{"version":3,"file":"static/js/orbit-main.4755cad0.chunk.js","mappings":"iKAIO,MAAMA,EAA8BC,EAAAA,GAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iFAChDC,EAAAA,IACOC,IAAK,IAAAC,EAAA,OAAIC,EAAAA,EAAAA,GAAkD,QAAjBD,EAACD,EAAMG,kBAAU,IAAAF,EAAAA,EAAI,EAAE,IACjED,GAASA,EAAMI,MAAMC,WAAWC,YAC5BN,IAAK,IAAAO,EAAA,OAAIC,EAAAA,EAAAA,GAAsD,QAAjBD,EAACP,EAAMG,kBAAU,IAAAI,EAAAA,EAAI,EAAE,G,gDCN/E,MAAME,GAAuBC,E,SAAAA,GAAU,uB,iECAvC,MCAMC,E,SDA4BhB,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,wMAOtCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWS,EAAE,G,uFELtC,MCFMC,GDEqBpB,EAAAA,EAAAA,IAAOqB,EAAAA,EAAPrB,CAAaE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iIAGlBE,GAASA,EAAMI,MAAMa,OAAOC,OAAOC,uBAAuBC,gBAAgBC,Y,gDELhG,MAAMC,GAAeZ,E,SAAAA,GAAU,e,gDCA/B,MAAMa,GAAkBb,E,SAAAA,GAAU,kB,mHCIlC,MAAMc,GAAsBC,EAAAA,EAAAA,IAAS,cAAkCC,EAAAA,EAE1EC,MAAAA,GAGI,OACEC,EAAAA,EAAAA,KAAA,OAAKC,UAAS,GAAAC,OAAKC,EAAAA,GAAW,KAAAD,QAAIE,EAAAA,EAAAA,IAAQ,mBAAoBC,SACzDC,KAAKlC,MAAMiC,UAGtB,G,8BChBG,SAAS/B,IACZ,OAAQ,IADwDiC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAI,GACzC,IAC/B,CAEO,SAAS3B,IACZ,OAAQ,GAD4D2B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAI,GAC9C,IAC9B,C,sGCHKG,E,mEAAc,SAAdA,GAAAA,EAAAA,EAAc,qBAAdA,EAAAA,EAAc,iBAAdA,EAAAA,EAAc,oBAAdA,IAAAA,EAAc,KAmBZ,MAAMC,EAAY5C,EAAAA,GAAO6C,OAAM3C,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4qFACxBE,GAASA,EAAMyC,SAAW,UAAY,YAG/BzC,GAASA,EAAM0C,QAAU,QAAU1C,EAAMI,MAAMuC,OAAOC,OAAOC,SAC5E7C,GAASA,EAAM8C,QAASC,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,mCACfE,EAAM8C,QAChB,OAMFjC,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQC,KAAK,IAK1BnD,GAASA,EAAMoD,WAAa,OAAS,SAUrCpD,GACLA,EAAMqD,UAAYrD,EAAMsD,SACjB,SAAUtD,EAAMuD,OAASvD,EAAMwD,UAAU,EAAG,QAAQxD,EAAMyD,YAAY,MAEtEzD,EAAM0D,eAAiB,OAYvB1D,GAASA,EAAMuD,SAAiBvD,GAASA,EAAMyD,cAGpDzD,GAASA,EAAMuD,SAEhBvD,GACDA,EAAM2D,UACC,OAEP3D,EAAM4D,OAAS5D,EAAMsD,UAAoC,WAAxBtD,EAAM6D,cAChC7D,EAAM4D,MAAM,KAEhB,SAET5D,GAASA,EAAMsD,UAAoC,WAAxBtD,EAAM6D,eAA6Bd,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,sCAClDE,EAAM4D,MAAM,MACzB,OAGY5D,GAASA,EAAMyD,cAGtBzD,GAAS+D,EAAS/D,GAAOgE,OACdhE,GAAS+D,EAAS/D,GAAOiE,KAC7BjE,GAAS+D,EAAS/D,GAAO4C,SAC3B5C,GAAUA,EAAMkE,UAAYH,EAAS/D,GAAOmE,OAAUJ,EAAS/D,GAAOmE,OAAS,SAG3FnE,GAAS+D,EAAS/D,GAAOoE,YAAarB,EAAAA,EAAAA,IAAGsB,IAAAA,GAAAvE,EAAAA,EAAAA,GAAA,uCACzBiE,EAAS/D,GAAOoE,YAC9B,OAGFpE,GAAS+D,EAAS/D,GAAOsE,cAAevB,EAAAA,EAAAA,IAAGwB,IAAAA,GAAAzE,EAAAA,EAAAA,GAAA,sWAEvBiE,EAAS/D,GAAOgE,KAChBD,EAAS/D,GAAOsE,cAQlC,OAIKE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWoE,KAAK,IAGlCzE,GAAS+D,EAAS/D,GAAOoE,aAAeL,EAAS/D,EAAOsC,EAAeoC,OAAON,YAAarB,EAAAA,EAAAA,IAAG4B,IAAAA,GAAA7E,EAAAA,EAAAA,GAAA,yDAE5F,OAEKE,GAAS+D,EAAS/D,EAAOsC,EAAeoC,OAAOV,OACpChE,GAAS+D,EAAS/D,EAAOsC,EAAeoC,OAAOT,KACnDjE,GAAS+D,EAAS/D,EAAOsC,EAAeoC,OAAO9B,SAC7D5C,GAAS+D,EAAS/D,EAAOsC,EAAeoC,OAAON,YAAarB,EAAAA,EAAAA,IAAG6B,IAAAA,GAAA9E,EAAAA,EAAAA,GAAA,uDAC/CiE,EAAS/D,EAAOsC,EAAeoC,OAAON,YACpD,OACUpE,GAAUA,EAAMkE,UAAYH,EAAS/D,EAAOsC,EAAeoC,OAAOP,OAAUJ,EAAS/D,EAAOsC,EAAeoC,OAAOP,OAAS,SAGvInE,GAAS+D,EAAS/D,GAAOsE,eAAiBP,EAAS/D,EAAOsC,EAAeoC,OAAOJ,cAAevB,EAAAA,EAAAA,IAAG8B,IAAAA,GAAA/E,EAAAA,EAAAA,GAAA,iZAUhG,OACFE,GAAS+D,EAAS/D,EAAOsC,EAAeoC,OAAOJ,cAAevB,EAAAA,EAAAA,IAAG+B,IAAAA,GAAAhF,EAAAA,EAAAA,GAAA,8bAE7CiE,EAAS/D,EAAOsC,EAAeoC,OAAOV,KACtCD,EAAS/D,EAAOsC,EAAeoC,OAAOJ,cAQxD,OAMNtE,GAAS+D,EAAS/D,GAAOoE,aAAeL,EAAS/D,EAAOsC,EAAeyC,QAAQX,YAAarB,EAAAA,EAAAA,IAAGiC,IAAAA,GAAAlF,EAAAA,EAAAA,GAAA,iDAE7F,OAEKE,GAAS+D,EAAS/D,EAAOsC,EAAeyC,QAAQf,OACrChE,GAAS+D,EAAS/D,EAAOsC,EAAeyC,QAAQd,KACpDjE,GAAS+D,EAAS/D,EAAOsC,EAAeyC,QAAQnC,SAC9D5C,GAAS+D,EAAS/D,EAAOsC,EAAeyC,QAAQX,YAAarB,EAAAA,EAAAA,IAAGkC,IAAAA,GAAAnF,EAAAA,EAAAA,GAAA,+CAChDiE,EAAS/D,EAAOsC,EAAeyC,QAAQX,YACrD,OACUpE,GAAUA,EAAMkE,UAAYH,EAAS/D,EAAOsC,EAAeyC,QAAQZ,OAAUJ,EAAS/D,EAAOsC,EAAeyC,QAAQZ,OAAS,SAGzInE,GAAS+D,EAAS/D,GAAOsE,eAAiBP,EAAS/D,EAAOsC,EAAeyC,QAAQT,cAAevB,EAAAA,EAAAA,IAAGmC,IAAAA,GAAApF,EAAAA,EAAAA,GAAA,yWAUjG,OACFE,GAAS+D,EAAS/D,EAAOsC,EAAeyC,QAAQT,cAAevB,EAAAA,EAAAA,IAAGoC,IAAAA,GAAArF,EAAAA,EAAAA,GAAA,kZAE9CiE,EAAS/D,EAAOsC,EAAeyC,QAAQf,KACvCD,EAAS/D,EAAOsC,EAAeyC,QAAQT,cAQzD,OAIL,SAASP,EAAS/D,EAAwBoF,GAC7C,IAAIC,EAAwC,SAW5C,OAVID,IAAa9C,EAAeyC,QAAU/E,EAAMsF,UAC5CD,EAAS,UAETD,IAAa9C,EAAeoC,QAC5BW,EAAS,SAETrF,EAAMyC,WACN4C,EAAS,YAGTrF,EAAM+D,SAASsB,GACRrF,EAAM+D,SAASsB,GAEnBrF,EAAM+D,SAASwB,MAC1B,C,eCnNO,MAAMC,GAAiB9E,EAAAA,EAAAA,GAAU,kB,mBCKjC,MAAM+E,EAAuB9F,EAAAA,GAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mBACzCE,GAASA,EAAM0F,cAAe3C,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,4EAC7B6F,EAAAA,EAAQC,IAAIC,IAAIC,SAGlB,O,eCVD,MAAMC,GAAwBrF,EAAAA,EAAAA,GAAU,yB,8BCExC,SAASsF,EAAWC,GAA8C,IAAjCC,EAAyB/D,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAChE,IACI,MAAMgE,EAAQC,EAAAA,GAAMC,QAAQJ,GAE5B,OAAIE,EAAMG,aAAa,IAAIF,EAAAA,GAAM,IAAK,IAAK,MAAQ,GACxCD,EAAMI,OAAOL,GAAmBM,OAEpCL,EAAMM,QAAQP,GAAmBM,MAC5C,CAAE,MAAOE,GAGL,OAFAC,QAAQC,IAAIF,GACZC,QAAQC,IAAI,gCAAiCX,GACtCA,CACX,CACJ,CAEO,SAASY,EAAYZ,GAA+C,IAAlCa,EAA0B3E,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAClE,IACI,MAAMgE,EAAQC,EAAAA,GAAMC,QAAQJ,GAE5B,OAAIE,EAAMG,aAAa,IAAIF,EAAAA,GAAM,IAAK,IAAK,MAAQ,GACxCD,EAAMI,OAA4B,KAArBO,GAA2BN,OAE5CL,EAAMI,OAAOO,GAAoBN,MAC5C,CAAE,MAAOE,GAGL,OAFAC,QAAQC,IAAIF,GACZC,QAAQC,IAAI,iCAAkCX,GACvCA,CACX,CACJ,CA8BO,SAASc,EAAgBhD,EAA8BiD,GAC1D,MAAMd,EAAoBe,EAAAA,MAAMC,SAASnD,EAASU,OAASV,EAASU,WAAQpC,EACtEyE,EAAqBG,EAAAA,MAAMC,SAASnD,EAASuB,QAAUvB,EAASuB,YAASjD,EAgB/E,IAAI8E,EAfAF,EAAAA,MAAMC,SAASnD,EAASU,eAExBV,GAAQqD,EAAAA,EAAAA,GAAA,GACDrD,IAESU,MAEhBwC,EAAAA,MAAMC,SAASnD,EAASuB,gBAExBvB,GAAQqD,EAAAA,EAAAA,GAAA,GACDrD,IAESuB,OAIhBvB,EAASwB,OAAOnB,aAChB+C,EAhDD,SAAuBE,EAAkBnB,GAC5C,MAAMoB,EAAOD,EAASE,MAAM,KAC5B,GAAID,EAAKlF,OAAS,EAAG,CACjB,IAAK,IAAIoF,EAAI,EAAGA,EAAIF,EAAKlF,OAAQoF,IAAK,CAClC,MAEMC,EAAczB,EAFLsB,EAAKE,GAAGE,UAAU,EAAG,GAEGxB,GAAmBwB,UAAU,GACpEJ,EAAKE,GAAKC,EAAcH,EAAKE,GAAGE,UAAU,EAC9C,CACA,OAAOJ,EAAKK,KAAK,IACrB,CACA,OAAON,CACX,CAoC0BO,CAAc7D,EAASwB,OAAOnB,WAAY8B,IAEhE,MAAM2B,GAA0BT,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACzBrD,EAASwB,QAAM,IAClBtB,GAAI+B,EAAWjC,EAASwB,OAAOtB,GAAIiC,GACnCtD,OAAQoD,EAAWjC,EAASwB,OAAO3C,OAAQsD,GAC3C9B,WAAY+C,IAGhB,IAAIW,EACA/D,EAASwB,OAAOnB,aAChB0D,EA7CD,SAAwBT,EAAkBP,GAC7C,MAAMQ,EAAOD,EAASE,MAAM,KAC5B,GAAID,EAAKlF,OAAS,EAAG,CACjB,IAAK,IAAIoF,EAAI,EAAGA,EAAIF,EAAKlF,OAAQoF,IAAK,CAClC,MAEMO,EAAelB,EAFNS,EAAKE,GAAGE,UAAU,EAAG,GAEKZ,GAAoBY,UAAU,GACvEJ,EAAKE,GAAKO,EAAeT,EAAKE,GAAGE,UAAU,EAC/C,CACA,OAAOJ,EAAKK,KAAK,IACrB,CACA,OAAON,CACX,CAiC2BW,CAAejE,EAASwB,OAAOnB,WAAY0C,IAElE,MAAMmB,GAA2Bb,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAC1BrD,EAASwB,QAAM,IAClBtB,GAAI4C,EAAY9C,EAASwB,OAAOtB,GAAI6C,GACpClE,OAAQiE,EAAY9C,EAASwB,OAAO3C,OAAQkE,GAC5C1C,WAAY0D,IAahB,OAN2BV,EAAAA,EAAAA,GAAA,CACvB3E,SAAUuE,EACVvC,MAAOoD,EACPvC,OAAQ2C,GACLlE,EAGX,CCpGO,MAAMmE,EAAoBvI,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yiBAI1BE,GAASA,EAAMoD,WAAa,OAAS,SAEjCpD,GAASA,EAAM0C,QAAU,QAAU1C,EAAMI,MAAMuC,OAAOC,OAAOC,SAC5E7C,GAASA,EAAM8C,QAASC,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,mCACfE,EAAM8C,QAChB,OAGM9C,GAASA,EAAMuD,SAEhBvD,GACDA,EAAM2D,UACC,OAEP3D,EAAMmI,SACCnI,EAAMuD,OAAO,KAEjBvD,EAAM4D,MAAM,OAGP5D,GAASA,EAAMyD,c,0KCF7B2E,EAA0HpI,IAAW,IAADqI,EACtI,IAAIrI,EAAMsI,cACN,OAAO,KAGX,MAAMA,EAAgBtI,EAAMsI,cAC5B,OAAO1G,EAAAA,EAAAA,KAAC6D,EAAoB,CAACC,aAA2B,QAAf2C,EAAErI,EAAMuI,eAAO,IAAAF,OAAA,EAAbA,EAAe3C,aAAazD,UACnEL,EAAAA,EAAAA,KAAC0G,EAAa,CAACE,SAAUC,EAAAA,EAAYC,GAAIC,KAAM3I,EAAM2I,QAClC,EA8FdC,GAASC,EAAAA,EAAAA,KA3FsC7I,IAAW,IAADa,EAAAiI,EAAAtE,EAAAuE,EAAAC,EAAAC,EAElE,IAAI,SACAhH,EAAQ,MAAE7B,EAAK,OAAE8I,EAAM,KAAEC,EAAI,OAAEC,EAAM,YAAEC,EAAW,QAAE3G,EAAO,SAAEwB,EAAQ,QAAEoF,EAAO,cAAEzF,EAAa,QAC7F0F,EAAO,aAAEC,EAAY,aAAEC,GAEvBzJ,EADG0J,GAAUC,EAAAA,EAAAA,GACb3J,EAAK4J,GACLvG,IAAY8F,EACZ7F,IAAarB,EAEjBsH,EAAUvJ,EAAMyC,cAAWJ,EAAYkH,EACvCC,EAAexJ,EAAMyC,cAAWJ,EAAYmH,EAC5CC,EAAezJ,EAAMyC,cAAWJ,EAAYoH,EAE5C,IAAII,EAAezJ,EAAM0J,iBAAiBtH,OAAOU,QAAQgG,GACrDa,EAAsB3J,EAAM0J,iBAAiBtH,OAAOwH,SAExD,MAAMjG,EAA4BgD,EAAgB8C,EAAaI,OAAQ7J,EAAM0J,iBAAiBtH,OAAO0H,kBAErGd,EAAsC,QAAhCvI,EAAS,QAATiI,EAAGM,SAAM,IAAAN,EAAAA,EAAIe,EAAaT,cAAM,IAAAvI,EAAAA,EAAIkJ,EAAoBX,OAC9D1G,EAAyC,QAAlC8B,EAAU,QAAVuE,EAAGrG,SAAO,IAAAqG,EAAAA,EAAIc,EAAanH,eAAO,IAAA8B,EAAAA,EAAIuF,EAAoBrH,QACjEwB,EAA4C,QAApC8E,EAAW,QAAXC,EAAG/E,SAAQ,IAAA+E,EAAAA,EAAIY,EAAa3F,gBAAQ,IAAA8E,EAAAA,EAAIe,EAAoB7F,SACpEmF,EAAcA,GAAe,IAC7BxF,EAAgBA,GAAiB,SAEjC,IAAIL,EAAW2F,GAAQA,EAAKR,KAAOQ,EAAKR,KAAO,UAC3CwB,EAAgBhB,GAAQA,EAAKiB,UAAYjB,EAAKiB,UAAY,OAE1D3G,EAAcrD,EAAM0J,iBAAiBtH,OAAO6H,aAAajB,GACzDxF,EAAQxD,EAAM0J,iBAAiBtH,OAAO8H,kBAAkBjB,GAAazF,MACrEL,EAASnD,EAAM0J,iBAAiBtH,OAAO8H,kBAAkBjB,GAAa9F,OACtEgH,EAAgBnK,EAAM0J,iBAAiBtH,OAAO8H,kBAAkBjB,GAAa7F,SAASA,GACtFgH,EAAWpK,EAAM0J,iBAAiBtH,OAAO8H,kBAAkBjB,GAAamB,UAAYX,EAAaW,UAAYT,EAAoBS,SACjI9G,EAAiC,OAAhB2F,EAAuB,GAAM,EAElD,OAAIrJ,EAAMyK,UACC7I,EAAAA,EAAAA,KAACsG,EAAiB,CACrBtE,MAAOA,EACPL,OAAQA,EACRb,QAASA,EACTI,OAAQ9C,EAAM8C,OACda,UAAW3D,EAAM2D,UACjBF,YAAaA,EACb0E,SAAU9E,IAAYC,EACtBF,WAAYpD,EAAMoD,cAInBsH,EAAAA,EAAAA,MAACnI,GAAS6E,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACbrD,SAAUA,EACVT,SAAUA,EACVD,QAASA,EACTI,YAAaA,EACbG,MAAOA,EACPL,OAAQA,EACRC,SAAU+G,EACV7G,eAAgBA,EAChBG,cAAeA,EACfnB,QAASA,EACTwB,SAAUA,EACVqF,QAASA,EACTC,aAAcA,EACdC,aAAcA,EACdkB,MAAOrB,GACHI,GAAU,IAAAzH,SAAA,CAEZkH,EAA0B,SAAlBgB,GAA2BvI,EAAAA,EAAAA,KAACwG,EAAU,CAC5CE,cAAea,EAAKyB,UACpBjC,KAAM4B,EACNhC,QAAS,CAAC7C,aAAcyD,EAAKzD,iBAC5B9D,EAAAA,EAAAA,KAACiJ,EAAAA,GAAiB,CAACC,WAAY,IAAKC,UAAWR,EAAgB,KAAMS,MAAO,CAACzH,OAAQgH,EAAgB,QAAa,KACrHvK,EAAMiC,UAAWL,EAAAA,EAAAA,KAACmE,EAAqB,CACrCrC,eAAgBA,EAChB2F,YAAaA,EACbxF,cAAeA,EAAc5B,UAE7BL,EAAAA,EAAAA,KAAC4D,EAAc,CACXgF,SAAUA,EAASvI,SAElBjC,EAAMiC,aAEY,KACzBkH,EAA0B,UAAlBgB,GAA4BvI,EAAAA,EAAAA,KAACwG,EAAU,CAC7CE,cAAea,EAAKyB,UACpBjC,KAAM4B,EACNhC,QAAS,CAAC7C,aAAcyD,EAAKzD,iBAC5B9D,EAAAA,EAAAA,KAACiJ,EAAAA,GAAiB,CAACC,WAAY,IAAKC,UAAWR,EAAgB,KAAMS,MAAO,CAACzH,OAAQgH,EAAgB,QAAa,QAC/G,G,qFCnIT,MAAMU,EAAyBtL,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,6E,MCAzC,MAAMoL,EAAgCvL,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gGAC1CE,GAASA,EAAMI,MAAM6J,OAAOkB,SACvBnL,GAASA,EAAMoL,QAAU,UAAY,W,MCFhD,MAAMC,EAAyB1L,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sIACxBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOqB,iBAAiB,I,MCD5D,MAAMC,EAA4B5L,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gKAErBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOqB,iBAAiB,IAG5D9G,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWS,EAAE,I,MCLtC,MAAM0K,EAA8B7L,EAAAA,GAAO8L,MAAMC,MAAM,CAC1DC,KAAK,SACLC,YAAa,KAF0BjM,CAGrCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4bAKWe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,SAAS,I,eCQ7C,MAAMC,EAA2D9L,IAC7D0K,EAAAA,EAAAA,MAACO,EAAsB,CAAAhJ,SAAA,EAC1ByI,EAAAA,EAAAA,MAACW,EAAsB,CAAApJ,SAAA,EACnBL,EAAAA,EAAAA,KAAC2J,EAAyB,CAAAtJ,SACrBjC,EAAM+L,kBAEXnK,EAAAA,EAAAA,KAAC4J,EAA2B,CACxBQ,MAAOhM,EAAMgM,MACbvJ,SAAUzC,EAAMyC,SAChBZ,UAAW7B,EAAMiM,QACjBC,SAAWC,IAAQnM,EAAMkM,SAASC,EAAGC,OAAOJ,MAAM,QAG1DpK,EAAAA,EAAAA,KAACsJ,EAA6B,CAACE,QAASiB,QAAQrM,EAAMsM,cAAezK,UAAW7B,EAAMuM,aAAatK,SAC9FjC,EAAMsM,iB,iEC7BZ,MAAME,E,SAAgB7M,GAAO8L,MAAMC,MAAM,CAC5CC,KAAM,SADmBhM,CAE3BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8fAGsBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOwC,cAAc,IAGxCjI,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOyC,gBAAgB,IAWtC1D,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAM6J,OAAO0C,YAAY,G,6JClBlE,MAAMC,EAAmBjN,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iGAGtBe,IAAA,IAAC,MAAC+C,GAAM/C,EAAA,OAAK+C,CAAK,IAClBY,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAO4B,SAAS,IAG1CgB,EAAYlN,EAAAA,GAAOmN,OAAM9J,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,slBAClBkJ,IAAA,IAAC,MAACpF,GAAMoF,EAAA,OAAKpF,CAAK,IACzBmJ,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAM6C,KAAKC,QAAQ8J,OAAO,IAGrBhN,GAASA,EAAMI,MAAM6J,OAAOgD,uBAE/BC,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAMuC,OAAOC,OAAOC,MAAM,IACxC7C,GAASA,EAAMmN,SAAWnN,EAAMI,MAAM6J,OAAOkB,OAASnL,EAAMI,MAAM6J,OAAOyC,mBAErE1M,GAASA,EAAMmN,SAAWnN,EAAMI,MAAM6J,OAAOkB,OAASnL,EAAMI,MAAM6J,OAAOqB,oBAiB3F8B,EAAiBzN,EAAAA,GAAOiB,IAAGkD,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,yQA2B1B,MAAMuN,UAAe3L,EAAAA,EACxBC,MAAAA,GACI,IAAA2L,EAAmCpL,KAAKlC,OAApC,MAAC4D,GAA2B0J,EAAjBC,GAAgB5D,EAAAA,EAAAA,GAAA2D,EAAA1D,GAC/BhG,EAAQA,GAAS,OACjB,MAAM4J,EAAwB,SAAV5J,EAAmB,OAAS,OAE1C6J,EAAYvL,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMC,eACzD,OAAOnD,EAAAA,EAAAA,MAACkC,EAAgB,CAAChJ,MAAOA,EAAM3B,SAAA,EAClCL,EAAAA,EAAAA,KAACiL,GAASzF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACFmG,GAAgB,IACpB3J,MAAO4J,EAAYvL,SAElBC,KAAKlC,MAAMiC,aAEhBL,EAAAA,EAAAA,KAACwL,EAAc,CAAAnL,UACXL,EAAAA,EAAAA,KAAC6L,EAAS,CAAC9E,KAAM,IAAK9G,UAAU,qBAG5C,E,kIC9EG,IAAK4G,GAKX,SALWA,GAAAA,EAAW,UAAXA,EAAW,QAAXA,EAAW,QAAXA,EAAW,YAKtB,CALWA,IAAAA,EAAW,KA+DvB,MAAMqF,EAAMnO,EAAAA,GAAOoO,IAAGlO,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mBAChBe,IAAA,IAAC,UAACmN,GAAUnN,EAAA,OAAKmN,GAAYjL,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,uEAC5B6F,EAAAA,EAAQC,IAAIC,IAAIC,SAGpB,IAAI,IAGH,MAAMmI,UAAgBC,EAAAA,UACzBvM,MAAAA,GAAU,IAADwM,EACL,MAAM3F,EAAWtG,KAAKlC,MAAMwI,SAAWtG,KAAKlC,MAAMwI,SAAWC,EAAY2F,IACnEC,EAAc7F,IAAaC,EAAY6F,GAAK,GAAM9F,IAAaC,EAAY8F,QAAU,IAAM,IAC3F5F,EAAOzG,KAAKlC,MAAM2I,KAAOzG,KAAKlC,MAAM2I,KAAO0F,EAC3CG,EAAQtM,KAAKlC,MAAMwO,MAAQtM,KAAKlC,MAAMwO,MAAQ,EAE9C5K,EAAQ1B,KAAKlC,MAAMyO,aAAgB9F,EAAO6F,EAAS7F,EACnDpF,EAASrB,KAAKlC,MAAMyO,aAAe9F,EAAQA,EAAO6F,EAElDE,EAA4B,QAArBP,EAAGjM,KAAKlC,MAAM0O,eAAO,IAAAP,EAAAA,EAAI,YAChCnD,GAAK5D,EAAAA,EAAAA,GAAA,CACPuH,QAAS,SACNzM,KAAKlC,MAAMgL,OAGlB,OACIN,EAAAA,EAAAA,MAACoD,EAAG,CACAE,UAAW9L,KAAKlC,MAAMgO,UACtBpK,MAAOA,EAAQ4E,EAAUjF,OAAQA,EAASiF,EAC1CwC,MAAOA,EACP0D,QAASA,EACTE,QAAQ,MAAMC,MAAM,6BACpBhN,UAAWK,KAAKlC,MAAM6B,UACtBiN,KAAM5M,KAAKlC,MAAM8O,MAAQ,QAAQ7M,SAAA,CAEhCC,KAAKlC,MAAM2K,OAAQ/I,EAAAA,EAAAA,KAAA,SAAAK,SAAQC,KAAKlC,MAAM2K,QAAiB,KACvDzI,KAAKlC,MAAMiC,WAGxB,E,gDCxGG,MAAM8M,GAAarO,E,SAAAA,GAAU,a,iECA7B,MAAMsO,E,SAAYrP,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4BACrBe,IAAA,IAAC,OAAC0C,GAAO1C,EAAA,OAAK0C,CAAM,G,iECD3B,MAAM0L,E,SAAkBtP,GAAO6C,OAAM3C,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2NAEfE,GAASA,EAAMI,MAAMa,OAAOC,OAAOgO,uBAAuB7N,Y,0ECKhF,MAAM8N,GAA8D1N,EAAAA,EAAAA,KAAUzB,GAC1EA,EAAMoP,MAAMC,WAAWrP,EAAMsP,kB,oCCHzB,SAASC,EAAgBC,EAA4BC,GAEhE,MAAOC,EAAgBC,IAAmBC,EAAAA,EAAAA,WAAS,GA2BnD,OAzBAC,EAAAA,EAAAA,YAAU,KACN,MAAMC,EAAqD,CAAC,EACzDL,IACCK,EAAyBC,UAAYN,EAAIO,sBACzCF,EAAyBG,KAAOC,SAASC,eAAeV,EAAIW,mBAGhE,MAGM3O,EAAW,IAAI4O,sBACjBxP,IAAA,IAAEyP,GAAMzP,EAAA,OAAK8O,EAJoBW,IAAiD,OAAHb,QAAG,IAAHA,GAAAA,EAAKO,sBAClFM,EAAMZ,eACNY,EAAMC,kBAAoB,GAAKD,EAAMZ,eAEVc,CAA4BF,GAAO,GAAER,GAKtE,OAHIN,EAAIiB,SACJhP,EAASiP,QAAQlB,EAAIiB,SAElB,KACH,IACIhP,EAASkP,YACb,CAAE,MAAOC,GACLjK,QAAQkK,MAAM,gCAClB,EACH,GACF,CAACrB,EAAKC,IAEFC,CACX,C,eCzBO,MAAMoB,GAAoErP,EAAAA,EAAAA,KAAUzB,IACvF,MAAM0N,GAAWqD,EAAAA,EAAAA,MACVC,EAAYC,IAAiBrB,EAAAA,EAAAA,UAAS,IACtCsB,EAAcC,IAAmBvB,EAAAA,EAAAA,WAAS,GAC3CwB,GAAqBC,EAAAA,EAAAA,QAA8B,MACzD,IAAIC,EAA8B/B,EAAgB6B,GAElD,MAAMhC,EAAQ1B,EAAS6D,OAAOC,SAASxR,EAAMyR,YAa7C5B,EAAAA,EAAAA,YAAU,KACN,MAAM6B,GAAkBC,EAAAA,EAAAA,KAAS,IAAMjE,EAASkE,KAAKC,eACjD,KACIZ,EAAc,GACdE,GAAgB,EAAK,IAG7B,MAAO,KACHO,GAAiB,CACpB,GACF,CAAChE,EAASkE,KAAKC,gBAElBhC,EAAAA,EAAAA,YAAU,KAEeuB,EAAmBX,QAAQqB,wBAEhCC,KAAOC,OAAOC,aAAef,GAAgBI,GA3B3CY,MAClB,MAAMC,EAAY/C,EAAMgD,iBAAiBpB,GACxB,IAAdmB,GACqB,IAAjBjB,GACCC,GAAgB,GAGpBF,EAAcD,EAAamB,EAC/B,EAoBID,EACJ,IAMJ,MAAMG,EAAQC,MAAMC,KAAK,CAACnQ,OAAQ4O,IAAa,CAACwB,EAAGhL,IAAMA,EAAI,IAE7D,OAEIkD,EAAAA,EAAAA,MAACwD,EAAAA,SAAc,CAAAjM,SAAA,CACVoQ,EAAMI,KAAIC,IAAuB9Q,EAAAA,EAAAA,KAACuN,EAAqB,CACCG,eAAgBoD,EAChBtD,MAAOA,GAFFsD,MAI9D9Q,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAAEpH,MAAO,OAAQL,OAAQ,OAChCiM,IAAK4B,EACLvP,WAAWG,EAAAA,EAAAA,IAAQ,6CAA2C,GAAAF,OAP/C9B,EAAMyR,UAAS,UAQtB,G,8EC9DlB,MCJMkB,EDI+BhT,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gIAMhDe,IAAA,IAAC,WAAC+R,GAAW/R,EAAA,OAAM+R,IAAc7P,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,kTAKzB0E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWwS,SAAS,IAGvC7J,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAWyS,UAAU,IAGxC/F,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAMC,WAAW0S,SAAS,GAInD,G,+CEzBE,MAAMC,GAAgCtS,E,SAAAA,GAAU,gC,uFCChD,MCDMuS,GDC0CtT,EAAAA,EAAAA,IAAOqB,EAAAA,EAAPrB,CAAaE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mC,kGEC7D,MCFMoT,GDE6CvT,EAAAA,EAAAA,IAAOqB,EAAAA,EAAPrB,CAAaE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yHAGnEe,IAAA,IAAC,WAACsS,GAAWtS,EAAA,OAAKsS,EAAa,oBAAsB,IAAI,GACzDC,EAAAA,G,mEERG,MAAMA,EAAmB,mBACnBC,EAAM,MACNC,EAAQ,O,+JCCd,MAAMC,EAAsC5T,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yZAM5CE,IAASwT,EAAAA,EAAAA,GAAUxT,EAAMI,MAAMqT,WAAWC,cAAczJ,OAAO0J,SAASC,kBAAmB,OAUpD5T,GAASA,EAAMI,MAAM6J,OAAO4J,qBAExEhT,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW0S,SAAS,I,MCjB5C,MAAMe,GAAwCnU,EAAAA,EAAAA,IAAO4T,EAAP5T,CAA2CE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4LAC/EE,IAASwT,EAAAA,EAAAA,GAAUxT,EAAMI,MAAMqT,WAAWC,cAAczJ,OAAO0J,SAASC,kBAAmB,OAErC5T,GAASA,EAAMI,MAAM6J,OAAO8J,aAAmB/T,GAASA,EAAMI,MAAM6J,OAAO8J,a,MCH3I,MAAMC,GAAsCrU,EAAAA,EAAAA,IAAO4T,EAAP5T,CAA2CE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8EAC7EE,IAASwT,EAAAA,EAAAA,GAAUxT,EAAMI,MAAM6J,OAAOgK,8BAA+B,MCAzEC,GAA+BC,EAAAA,EAAAA,GAAcZ,GACrDa,aAAaN,GACbO,WAAWL,GACXM,Q,oCCNE,MAAMC,GAAqC7T,EAAAA,EAAAA,GAAU,sC,MCArD,MCAM8T,EDA+C7U,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2G,MEA/D,MCAM2U,EDAwC9U,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qIEAlD4U,GAA+BhU,EAAAA,EAAAA,GAAU,gC,qCCA/C,MAAMiU,GAA6BjU,EAAAA,EAAAA,GAAU,8BCAvCkU,GAAuClU,EAAAA,EAAAA,GAAU,wCCAjDmU,GAA+BnU,EAAAA,EAAAA,GAAU,gC,gBCA/C,MAAMoU,EAA8BnV,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2E,6DCwBgB,IAgB/DiV,GADLtT,EAAAA,EAAAA,IAAQuT,EAAT,cAC4BtT,EAAAA,EAA8CuT,WAAAA,GAAA,SAAA9S,WAAA,KAE9D+S,UAAaC,IACjB,MAAMC,EAAqC,CACvCC,YAAY,EACZC,SAAUpT,KAAKlC,MAAMuV,YACrBC,UAAWtT,KAAKlC,MAAMwV,UACtBC,UAAWvT,KAAKlC,MAAMyV,WAG1BN,EAASO,KAAKN,EAAe,CAC/B,CAGMO,iBAAAA,GAEJ,MAAMC,EAAY1T,KAAKlC,MAAM6V,UACvBC,EAAgB5T,KAAKwL,SAASqI,OAAOC,WAAa9T,KAAKwL,SAASqI,OAAOE,SAE7E,OAAIhP,EAAAA,MAAMiP,QAAQN,IAAc3O,EAAAA,MAAMkP,kBAAkBP,EAAUQ,SAAuC,IAA5BR,EAAUQ,OAAOhU,QAAgB0T,EACnG,MAIPpL,EAAAA,EAAAA,MAACsI,EAAAA,EAA6B,CAACnR,UAAW,+CAA+CI,SAAA,EACrFL,EAAAA,EAAAA,KAACqR,EAAAA,EAAgC,CAACoD,IAAK,UAAYT,EAAUQ,OAAQE,IAAKpU,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOqV,WAAWC,gBAAgBnV,cACpJO,EAAAA,EAAAA,KAAA,QAAAK,SAAO2T,EAAUQ,WAG7B,CAEQK,iBAAAA,GACJ,OAAO7U,EAAAA,EAAAA,KAAC8U,EAAAA,EAAmB,CAACd,UAAW1T,KAAKlC,MAAM6V,WACtD,CAEQc,oBAAAA,GACJ,OAAO/U,EAAAA,EAAAA,KAACgV,EAAAA,EAAsB,CAAChB,UAAW1T,KAAKlC,MAAM6V,WACzD,CAEQgB,cAAAA,GACJ,IAAIC,EAAU5U,KAAKlC,MAAM+W,SAASC,eAAe9U,KAAKlC,MAAMmV,SAAS8B,UACrE,OAAKhQ,EAAAA,MAAMkP,kBAAkBW,GAKtB,MAJIlV,EAAAA,EAAAA,KAACiT,EAA4B,CAAA5S,SAC/BC,KAAKwL,SAASwJ,SAASC,YAAYL,IAIhD,CAEQM,sBAAAA,GACJ,MAAMxB,EAAY1T,KAAKlC,MAAM6V,UAC7B,IAAIwB,GAAc,EAKlB,OAJIzB,EAAU0B,OAAS1B,EAAU2B,aAC7BF,EAAczB,EAAU2B,WAAWnV,SAAWwT,EAAU0B,QAGxDrQ,EAAAA,MAAMiP,QAAQN,IAAeA,EAAU4B,WAAcH,GAKrDzV,EAAAA,EAAAA,KAACgT,EAAoC,CAAC/S,UAAU,8CAA6CI,UACzFL,EAAAA,EAAAA,KAAA,QAAAK,SAAM,iBALH,IAQf,CAEQwV,kBAAAA,GAEJ,MAAM7B,EAAY1T,KAAKlC,MAAM6V,UAE7B,OAAI5O,EAAAA,MAAMiP,QAAQN,KAAeA,EAAU8B,OAChC,MAIPhN,EAAAA,EAAAA,MAACwJ,EAA4B,CAACrS,UAAW,mCAAmCI,SAAA,CACvEC,KAAKyT,oBACLzT,KAAKuU,qBACN7U,EAAAA,EAAAA,KAAC+V,EAAAA,GAAe,IACfzV,KAAKyU,uBACLzU,KAAK2U,iBACL3U,KAAKkV,2BAGlB,CAEQQ,mBAAAA,GAAuB,IAADC,EAC1B,MAAMjC,EAAY1T,KAAKlC,MAAM6V,UAE7B,OAAI5O,EAAAA,MAAMiP,QAAQN,IAAcA,EAAU8B,OAC/B,MAIPhN,EAAAA,EAAAA,MAAC6J,EAAkC,CAAC1S,UAAU,0CAAyCI,SAAA,EACnFL,EAAAA,EAAAA,KAAA,QAAAK,SAAOC,KAAKwL,SAASoK,YAAYC,UAAU,yCAC3CnW,EAAAA,EAAAA,KAACkT,EAA2B,CAACjT,UAAU,mCAAkCI,SAAsB,QAAtB4V,EAAE3V,KAAKlC,MAAM6V,iBAAS,IAAAgC,OAAA,EAApBA,EAAsBG,4BAG7G,CAEQC,yBAAAA,GACJ,MAAMrC,EAA4B1T,KAAKlC,MAAM6V,UACvCV,EAAqBjT,KAAKlC,MAAMmV,SACtC,IAAI+C,EACAC,EAEJ,GAAIlR,EAAAA,MAAMiP,QAAQN,KAAeA,EAAUwC,WACvCF,EAAoB,OAAR/C,QAAQ,IAARA,OAAQ,EAARA,EAAUxK,MACtBwN,EAAoB,OAARhD,QAAQ,IAARA,OAAQ,EAARA,EAAUkD,kBACnB,CAEH,IAAIC,EAAcC,KAAKC,SAEvBN,EAAYtC,EAAU6C,KAEtBN,GAAYO,EAAAA,EAAAA,IAAc9C,EAAUwC,WAAYE,EAAYjX,WAChE,CAEA,OAAQO,EAAAA,EAAAA,KAACsR,EAAAA,EAAmC,CAACyF,MAAI,EAACrC,IAAK6B,EAAW9B,IAAK6B,EAAWrW,UAAW,4CACjG,CAEQ+W,oBAAAA,GACJ,MAAMC,EAA8D,CAChEhD,UAAW3T,KAAKlC,MAAM6V,UACtBV,SAAUjT,KAAKlC,MAAMmV,UAGzB,OACIzK,EAAAA,EAAAA,MAAC+J,EAA8B,CAAC5S,UAAU,qCAAoCI,SAAA,CACzEC,KAAK+V,6BACNvN,EAAAA,EAAAA,MAAC8J,EAAqC,CAAC3S,UAAU,6CAA4CI,SAAA,CACxFC,KAAKwL,SAASoL,WAAWrI,QAAQgD,WAAWsF,0BAA0BF,GACtE3W,KAAKuV,qBACLvV,KAAK0V,2BAItB,CAEQoB,gBAAAA,GAAoB,IAADC,EAEvB,IAAItO,GAA2B,QAAnBsO,EAAA/W,KAAKlC,MAAMmV,gBAAQ,IAAA8D,OAAA,EAAnBA,EAAqBtO,QAAS,OAC1C,MAAMiL,EAAY1T,KAAKlC,MAAM6V,UAM7B,OAJID,QAAgCvT,IAAnBuT,EAAU6C,MAAsB7C,EAAU6C,KAAKrW,OAAS,IACrEuI,EAAQiL,EAAU6C,OAIlB7W,EAAAA,EAAAA,KAAC+S,EAA0B,CAAC9S,UAAU,iCAAgCI,UAClEL,EAAAA,EAAAA,KAAA,QAAAK,SAAO0I,KAGnB,CAEQuO,eAAAA,GACJ,OACItX,EAAAA,EAAAA,KAAC+Q,EAAAA,EAAqB,CAClBC,WAAY1Q,KAAKlC,MAAM4S,WACvB/Q,UAAWsX,IAAW,2BAAD,4BAAArX,OAAyDI,KAAKlC,MAAMmV,SAAS8B,UAAQ,aAAAnV,OAAiBI,KAAKlC,MAAMmV,SAAS8B,WAAazH,IAAKtN,KAAKlC,MAAMoZ,sBAAsBnX,UAElMyI,EAAAA,EAAAA,MAACgK,EAA4B,CAACnL,QAASA,IAAMrH,KAAKgT,UAAUhT,KAAKlC,MAAMmV,UAAWtT,UAAWsX,IAAW,yCAA0C/F,EAAAA,IAAkBnR,SAAA,CAC/JC,KAAK0W,uBACL1W,KAAK8W,uBAItB,CAEArX,MAAAA,GACI,IACI,OAAOO,KAAKgX,iBAChB,CAAE,MAAOtI,GAEL,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,qDAAD/O,OAAsDI,KAAKlC,MAAMmV,UAAYjT,KAAKlC,MAAMmV,SAAS8B,UAAYrG,GAChI,IACX,CACJ,KACHoE,EAEM,MAAMsE,GAA0BC,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,Y,oHC7N7D,MAAMyE,GAAoB9Y,E,SAAAA,GAAU,qB,4DCApC,MAAM+Y,EAAgC9Z,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kC,MCAhD,MAAM4Z,EAAqC/Z,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kcAMjDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW0S,SAAS,IAMlB/S,GAASA,EAAMI,MAAMqT,WAAWC,cAAczJ,OAAO0J,SAASgG,gBAG9D3Z,GAASA,EAAMI,MAAM6J,OAAO2P,kBAG5B5Z,GAASA,EAAMI,MAAMqT,WAAWC,cAAczJ,OAAO0J,SAASgG,gB,MClBvF,MAAME,EAAuCla,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uIAGtCE,GAASA,EAAMI,MAAMqT,WAAWC,cAAczJ,OAAO0J,SAASgG,gB,mDCmBtF,IACaG,GAAmBC,EAc3BC,EAAAA,GAAWxK,IAAGyK,EAGdD,EAAAA,GAAWxK,IAAG0K,EAedC,EAAAA,GAAOC,OAjCX3Y,EAAAA,EAAAA,KAAQ4Y,EAAT,cACyC3Y,EAAAA,EAIrCuT,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAJTua,gBAAyC,KAAK,KAC9CC,gBAAyC,MAAIC,EAAAA,EAAAA,GAAA,0BAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,4BAAAE,EAAA,WAkB7CC,eAAyB,EAAE,KAE3BC,uBAA0BC,IAC9B5Y,KAAKqY,gBAAkBO,EACvB5Y,KAAK6Y,6BAA6B,EACpC,KAEMC,uBAA0BC,IAC9B/Y,KAAKsY,gBAAkBS,EACvB/Y,KAAK6Y,6BAA6B,GAtBlCG,EAAAA,EAAAA,IAAehZ,KACnB,CAEA,kBAAIiZ,GACA,OAAOjZ,KAAKwL,SAAS0N,eAAeC,4BACxC,CAqBQC,qBAAAA,GAAyB,IAADhO,EAAAiO,EAC5B,IAAIC,EAA8BtZ,KAAKuZ,sBAAiC,QAAbnO,EAAGpL,KAAKlC,aAAK,IAAAsN,GAAyB,QAAzBiO,EAAVjO,EAAYoO,+BAAuB,IAAAH,OAAzB,EAAVA,EAAqCI,iBACnGzZ,KAAK0Z,mBAAqB1Z,KAAK0Y,eAAiBY,EAA8BA,EAA8BtZ,KAAK0Y,cACrH,CAEQG,2BAAAA,GAEJ,GAAK7Y,KAAKsY,iBAAoBtY,KAAKqY,gBAEnC,IACIrY,KAAKuZ,qBAAuBlD,KAAKsD,MAAMC,OAAO5Z,KAAKsY,gBAA6B,aAAKsB,OAAO5Z,KAAKqY,gBAA6B,cAC9HrY,KAAKoZ,uBACT,CAAE,MAAOzK,GACL3O,KAAKwL,SAAS2L,OAAOxI,MAAM,kDAAmDA,EAClF,CACJ,CAGQkL,wBAAAA,GAA4B,IAADC,EAAAC,EAAAC,EAE/B,GAAIjV,EAAAA,MAAMkP,kBAAkBjU,KAAKlC,MAAM0b,yBAA0B,OAAO,KAExE,IAAIS,EAAuC,QAAtBH,EAAG9Z,KAAKiZ,sBAAc,IAAAa,GAAqB,QAArBC,EAAnBD,EAAqBI,2BAAmB,IAAAH,GAAS,QAATC,EAAxCD,EAA0CI,eAAO,IAAAH,OAA9B,EAAnBA,EAAmDC,kBAM3E,OALKA,IACDA,EAAoBja,KAAKlC,MAAM0b,0BAK/B9Z,EAAAA,EAAAA,KAAC0a,EAAAA,EAAe,CACZC,WAAYJ,EAAkBI,WAC9BC,YAAaL,EAAkBK,YAC/BC,yBAA0BN,EAAkBM,yBAC5CC,iBAAiB,GAG7B,CAEQC,mBAAAA,GAEJ,IAAIC,EAAY,GAEhB,IAAK,IAAIpV,EAAI,EAAGA,EAAI,GAAIA,IACpBoV,EAAUC,MACNjb,EAAAA,EAAAA,KAAC+Q,EAAAA,EAAqB,CAAA1Q,UAClByI,EAAAA,EAAAA,MAACmP,EAAoC,CAAA5X,SAAA,EACjCL,EAAAA,EAAAA,KAAC6X,EAA6B,KAC9B7X,EAAAA,EAAAA,KAAC8X,EAAkC,CAAAzX,SAAC,gBAHhBuF,IASpC,OAAOoV,CACX,CAEQE,iBAAAA,CAAkBC,EAAiBvH,EAAmBwH,EAAavH,GACvE,OAAOvT,KAAKwL,SAASuP,6BAA6BC,gBAAgBC,WAC9Dvb,EAAAA,EAAAA,KAACwb,EAAAA,EAAmB,CAChBnG,SAAU/U,KAAKwL,SAAS2P,MAAMC,SAASP,GAAS9F,SAChDzB,UAAWA,EACXD,YAAarT,KAAKlC,MAAMuV,YACxBE,UAAWA,EACX8H,gBAAgB,EAChBC,sBAAsB,GANAtb,KAAKwL,SAAS2P,MAAMC,SAASP,GAAS9F,WAOhErV,EAAAA,EAAAA,KAAC0X,EAAAA,EAAuB,CACpByD,QAASA,EACT5H,SAAUjT,KAAKwL,SAAS2P,MAAMC,SAASP,GACvCvH,UAAWA,EACXC,UAAWA,EACXI,UAAW3T,KAAKwL,SAAS0N,eAAeqC,aAAaV,GACrDxH,YAAarT,KAAKlC,MAAMuV,YACxB6D,sBAAuBlX,KAAK2Y,wBAExC,CAEQ6C,eAAAA,CAAgBX,EAAiBvH,EAAmBwH,GAAc,IAADW,EAErE,IAAIlI,EAAqE,QAA5DkI,EAAGzb,KAAKwL,SAAS0N,eAAeC,oCAA4B,IAAAsC,OAAA,EAAzDA,EAA2DC,kBAAkBjT,MAIzFzI,KAAKwL,SAASkE,KAAKC,cAA8B,kBAAd4D,IACnCA,EAAY,iBAEhB,MAAMoI,EAA0BrI,IAAetT,KAAK0Z,mBAAqB,EAEzE,OACIlR,EAAAA,EAAAA,MAACwD,EAAAA,SAAc,CAAAjM,SAAA,CACVC,KAAK4a,kBAAkBC,EAASvH,EAAWwH,EAAKvH,GAE7CoI,GAA2B3b,KAAK6Z,6BAHnBiB,EAO7B,CAEQc,YAAAA,GAEJ,IAAIC,EAAoB,GAOxB,OAJI7b,KAAKiZ,iBACL4C,EAAU7b,KAAKwL,SAAS0N,eAAe4C,gBAGpB,IAAnBD,EAAQ3b,OACDF,KAAKya,uBAEZza,KAAK0Y,eAAiBmD,EAAQ3b,OACvB2b,EAAQtL,KAAI,CAACsK,EAASvH,IAActT,KAAKwb,gBAAgBX,EAASvH,EAAWuH,KAE5F,CAEAkB,iBAAAA,GACI3D,MAAM2D,oBAEN/b,KAAKyP,UAAS,IAAM,CAChBzP,KAAKwL,SAASqI,OAAOmI,GAAGC,KACxBjc,KAAKwL,SAASqI,OAAOE,SACrB/T,KAAKwL,SAASqI,OAAOC,YACtB,IAAM9T,KAAKoZ,yBAAyB,CAAC8C,iBAAiB,GAC7D,CAEAzc,MAAAA,GAEI,OACIC,EAAAA,EAAAA,KAAC4X,EAAiB,CAAChK,IAAKtN,KAAK8Y,uBAAwBnZ,UAAU,sBAAqBI,SAC/EC,KAAK4b,gBAGlB,GACHpD,GAAA2D,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,sBAAAvE,GAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAtJwC,CAAE,IAAD/D,GAAA0D,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,wBAAArE,GAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGC,CAAE,KAADL,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,yBAAApE,GAAAyE,OAAAC,yBAAAvE,EAAAiE,UAAA,yBAAAjE,EAAAiE,WAnBnCtJ,EAmBmCqF,KAAArF,E,qHCzCrC,MCAM6J,E,SDAkBlf,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4BEAlC,MAAMgf,GAA4Bpe,E,SAAAA,GAAU,6B,eCWnD,MAAMqe,EAAuB,CACzBC,IAAK,CACF,IAAM,IAAM,IAAM,IAAM,IAAK,KAC9B,KAAM,KAAM,KAAM,KAAM,KAAM,KAC9B,KAAM,KAAM,KAAM,KAAM,KAAM,MAEhCC,MAAO,CAAC,IAAK,OAIV,MAAMrI,UAA+BlV,EAAAA,EAEhCwd,aAAAA,CAAcC,GAElB,OAAIJ,EAAqBC,IAAII,SAASD,GAC3B9L,EAAAA,GACA0L,EAAqBE,MAAMG,SAASD,GACpC7L,EAAAA,GAGJ,IACX,CAEA3R,MAAAA,GAEI,OAAIsF,EAAAA,MAAMiP,QAAQhU,KAAKlC,MAAM4V,YAAc1T,KAAKlC,MAAM4V,UAAU4B,YAActV,KAAKlC,MAAM4V,UAAUyJ,sBAA6E,IAArDnd,KAAKlC,MAAM4V,UAAUyJ,qBAAqBjd,OAC1J,MAIPR,EAAAA,EAAAA,KAACid,EAA0B,CAAChd,WAAWG,EAAAA,EAAAA,IAAQ,0CAA0CC,SACxFC,KAAKlC,MAAM4V,UAAUyJ,qBAAqB5M,KAAI,CAAC0M,EAAW3X,KACvD5F,EAAAA,EAAAA,KAACkd,EAAyB,CAASQ,UAAWpd,KAAKgd,cAAcC,EAAU9d,YAAYY,UACnFL,EAAAA,EAAAA,KAAA,QAAAK,SAAOkd,KADqB3X,MAM5C,E,6HCtCG,MAAMkP,UAA4BhV,EAAAA,EAE7B6d,YAAAA,GAE6B,IAADC,EAAhC,QAAItd,KAAKlC,MAAM4V,UAAU0B,SACc,QAA/BkI,EAAAtd,KAAKlC,MAAM4V,UAAU2B,kBAAU,IAAAiI,OAAA,EAA/BA,EAAiCpd,QAAS,EACnCF,KAAKlC,MAAM4V,UAAU2B,WAAWnV,SAAWF,KAAKlC,MAAM4V,UAAU0B,MAEhEpV,KAAKlC,MAAM4V,UAAU6J,UAAYvd,KAAKlC,MAAM4V,UAAU0B,MAKzE,CAEQoI,mBAAAA,GACJ,OAAOxd,KAAKqd,eAAiBrd,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKyd,iCAAmCzd,KAAK0d,0BAClH,CAEQD,6BAAAA,GACJ,OAAOzd,KAAKwL,SAASqI,OAAOC,SAAW,gCAAkC,2BAC7E,CAEQ6J,mBAAAA,GACJ,OAAO3d,KAAKqd,eACNrd,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOqV,WAAWuJ,mBAAmBze,WAC7Ea,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOqV,WAAWwJ,cAAc1e,UAClF,CAEQue,wBAAAA,GAE6B,IAADI,EAAhC,OAAI9d,KAAKlC,MAAM4V,UAAU0B,OACc,QAA/B0I,EAAA9d,KAAKlC,MAAM4V,UAAU2B,kBAAU,IAAAyI,OAAA,EAA/BA,EAAiC5d,QAAS,EACpC,GAANN,OAAUI,KAAKlC,MAAM4V,UAAU2B,WAAWnV,OAAM,KAAAN,OAAII,KAAKlC,MAAM4V,UAAU0B,OAEnE,GAANxV,OAAUI,KAAKlC,MAAM4V,UAAU6J,QAAO,KAAA3d,OAAII,KAAKlC,MAAM4V,UAAU0B,OAIhEpV,KAAKlC,MAAM4V,UAAU6J,OAChC,CAEA9d,MAAAA,GAEI,OAAIsF,EAAAA,MAAMiP,QAAQhU,KAAKlC,MAAM4V,iBAA+CvT,IAAjCH,KAAKlC,MAAM4V,UAAU6J,QACrD,MAIP/U,EAAAA,EAAAA,MAACsI,EAAAA,EAA6B,CAACiN,oBAAqB/d,KAAKlC,MAAMigB,oBAChCpe,UAAW,oDAAoDI,SAAA,EAC1FL,EAAAA,EAAAA,KAACqR,EAAAA,EAAgC,CAACoD,IAAG,SAAAvU,OAAWI,KAAKwd,uBAAyBpJ,IAAKpU,KAAK2d,yBACxFje,EAAAA,EAAAA,KAAA,QAAMC,WAAWG,EAAAA,EAAAA,IAAQ,0DAA0DC,SAAEC,KAAKwd,0BAGtG,E,gDClEG,MAAMQ,GAAwCxf,E,SAAAA,GAAU,wC,yGCAxD,MAAMyf,GAA6Bzf,EAAAA,EAAAA,GAAU,8BCFvC0f,EAAgB,gBCEhBC,GAAsB3f,EAAAA,EAAAA,GAAU,uB,gFCwB7C,MAAMqU,GAAsDtT,EAAAA,EAAAA,KAAUzB,IAClE,MAAM0N,GAAWqD,EAAAA,EAAAA,MACjBlB,EAAAA,EAAAA,YAAU,IACC,IAAM7P,EAAMsgB,eAAiBtgB,EAAMsgB,cAAcC,WACzD,CAACvgB,EAAMsgB,gBAEV,MAKME,EAAwBxgB,EAAMwgB,uBAAyBtS,EAAAA,SAC7D,OACItM,EAAAA,EAAAA,KAAC6e,EAAAA,GAAa,CAACrgB,MAAOsN,EAAStN,MAAMsgB,iBAAiBze,UAClDyI,EAAAA,EAAAA,MAAC2V,EAAmB,CAChBxe,UAAWsX,IAAW,wBAAyB,CAC3C,CAACiH,GAAgBpgB,EAAMsgB,cAAcK,WAEzCC,YAAa5gB,EAAM6gB,OAAOC,aAAa7e,SAAA,CAEtCjC,EAAM2K,OAAQ/I,EAAAA,EAAAA,KAACmf,EAAAA,EAA4B,CAAA9e,UACxCL,EAAAA,EAAAA,KAACof,EAAAA,EAAmB,CAACnf,WAAWG,EAAAA,EAAAA,IAAQ,yBAAyBC,UACrEL,EAAAA,EAAAA,KAAA,QAAMoJ,MAAO,CAACiW,KAAM,YAAYhf,SAC7ByL,EAASoK,YAAYC,UAAU/X,EAAM2K,aAGN,MAClC/I,EAAAA,EAAAA,KAACue,EAA0B,CACvBte,UAAW,gCAAgCI,SAE1CjC,EAAMkhB,QAAQzO,KAAK0O,IAAe,IAADC,EAAAC,EAAAC,EAAAC,EAAAC,EAC9B,OACmD,IAA/CL,EAAUvD,kBAAkB6D,QAAQrf,OAAe,MAC/CR,EAAAA,EAAAA,KAAC4e,EAAqB,CAElBkB,oBAAqBP,EAAUvD,kBAAkBjT,MACjDgX,OAAQR,EAAU/E,oBAAoBuF,OACtCpY,QAASqY,cA/BhBA,iBACflU,EAAS0N,eAAeyG,mBAAmBC,EAAM,EA8BAC,CAAiBZ,EAAU/E,oBAAoBuF,QAC1EK,QAASb,EAAU/E,oBAAoB4F,QACvCC,aAA0C,QAA7Bb,EAAAD,EAAU/E,2BAAmB,IAAAgF,GAAQ,QAARC,EAA7BD,EAA+BO,cAAM,IAAAN,OAAR,EAA7BA,EAAuCa,kBAAsE,QAAzDZ,EAAK5T,EAAS0N,eAAeC,oCAA4B,IAAAiG,GAAqB,QAArBC,EAApDD,EAAsDlF,2BAAmB,IAAAmF,GAAQ,QAARC,EAAzED,EAA2EI,cAAM,IAAAH,OAA7B,EAApDA,EAAmFU,gBALpJf,EAAU/E,oBAAoBuF,OAMrC,UAMV,IAKXQ,GAAwB5I,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,U,iEC3E3D,MAAMqN,E,SAAmBziB,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4B,qICUnC,MAAMuiB,GAAe5gB,EAAAA,EAAAA,MAAQuT,EAAC,cAA2BtT,EAAAA,EAO5DC,MAAAA,GACI,IAAI2gB,EAAWpgB,KAAKwL,SAAS6U,YAAYD,SAASpgB,KAAKlC,MAAMwiB,aAC7D,MAEMC,EAAcH,EAASI,OAAO,UAC9BC,EAAcL,EAASI,OAAO,aACpC,IAAIE,EAEAH,EAAcE,GACdC,EAAUN,EAASO,MAAMJ,EAAaA,EAPlB,IAQpBH,EAAWA,EAASO,MAAMF,EAAaF,GAAeG,IAEtDA,EAAUN,EAASO,MAAMJ,EAAalK,KAAKuK,IAVvB,GAU4CH,EAAcF,IAC9EH,EAAWM,EAAUN,EAASO,MAAMF,IAGxC,IAAII,EAAmB7gB,KAAKlC,MAAM+iB,iBAClC,OAAOnhB,EAAAA,EAAAA,KAACmhB,EAAgB,CAAClhB,UAAWK,KAAKlC,MAAM6B,UAAUI,SACnDqgB,GAEV,IA1BOU,aAA4C,CAC/CR,YAAaS,EAAAA,EAAYC,KACzBH,iBAAkBpjB,EAAAA,GAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2CAChBE,GAASA,EAAMI,MAAM6J,OAAOkZ,cAE5CnO,G,qFChBE,MAAMoO,GAAiB1iB,E,SAAAA,GAAU,kB,gDCsBxC,MAAMqU,GAAgEtT,EAAAA,EAAAA,KAAUzB,IAC5E,MAAOqjB,EAAoBC,IAAyB1T,EAAAA,EAAAA,UAAyB,MAQ7E,IANAC,EAAAA,EAAAA,YAAU,KACN7P,EAAMujB,YAAYC,iCAAiCC,MAAKC,IACpDJ,EAAsBK,KAAKC,UAAUF,GAAc,GACrD,GACH,CAAC1jB,EAAMujB,YAAavjB,EAAM4R,KAAKC,eAE/B5K,EAAAA,MAAMkP,kBAAkBkN,GACvB,OAAO,KAGX,MAAMQ,EAAeF,KAAKC,UAAU5jB,EAAMujB,YAAYO,wBAAwB9jB,EAAMyc,2BACpF,OACI7a,EAAAA,EAAAA,KAACwhB,EAAc,CAAAnhB,UACXL,EAAAA,EAAAA,KAAA,iBACImiB,OAAQF,EACRH,aAAcL,KAEL,IAIZW,GAAuBzK,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,cAAe,S,eClChF,MAAMA,GAA4DtT,EAAAA,EAAAA,KAAUzB,GACrEA,EAAMujB,YAAYU,oBACTriB,EAAAA,EAAAA,KAACsiB,EAAAA,EAAkB,CAACC,UAAWnkB,EAAMmkB,UAAUliB,UACnDL,EAAAA,EAAAA,KAACoiB,GAAoB5c,EAAAA,EAAAA,GAAA,GAAMpH,OAGnB4B,EAAAA,EAAAA,KAACwiB,EAAAA,GAAkBhd,EAAAA,EAAAA,GAAA,GAAMpH,MAKhCsc,GAAkB/C,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,e,0ECvBrD,MAAMsP,UAAsBnW,EAAAA,UAC/BvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAAC0iB,EAAAA,SAAQ,CAACC,UAAU3iB,EAAAA,EAAAA,KAAA,OAAKC,UAAU,iBAAsBI,SAC3DC,KAAKlC,MAAMiC,UAEpB,E,+DCLG,MAAMuiB,UAAgC9iB,EAAAA,G,gDCFtC,MAAM+iB,EAA2B,0B,oHCAjC,IAAKC,GAGX,SAHWA,GAAAA,EAAAA,EAAoB,mCAApBA,EAAAA,EAAoB,qBAG/B,CAHWA,IAAAA,EAAoB,KAIzB,MACMC,EAAsC,GAKtCC,EAA+B,I,gCCArC,MAAMC,EAA4BllB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,y9BAIrCe,IAAA,IAAC,eAACikB,GAAejkB,EAAA,OAAKikB,CAAc,IAK7BtgB,IAAA,IAAC,eAACsgB,GAAetgB,EAAA,OAAKsgB,CAAc,IAK1C9b,IAAA,IAAC,OAAC+b,GAAO/b,EAAA,OAAK+b,CAAM,IAK7BhY,IAAA,IAAC,eAACiY,EAAc,YAAEC,GAAYlY,EAAA,OAAKiY,EACjCC,IAAgBP,EAAqBQ,SAAUniB,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,iFD1Bd,IC6BhCiD,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,sdACkB6kB,EAA+CA,EAAmDA,EAA6CA,EAA+CA,EAAuDA,EAAiDA,GAOlTzX,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAMC,WAAW0S,SAAS,IAOpD,EAAE,I,UCxCH,MAAMoS,EAAsBxlB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oPAKvCe,IAAA,IAAC,eAACmkB,EAAc,MAAE5kB,GAAMS,EAAA,OAAKmkB,GAAiBjiB,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,0HACvBM,EAAMa,OAAOC,OAAOkkB,QAAQC,iCAAiChkB,YAGrF,EAAE,IAKJmD,IAAA,IAAC,eAACwgB,EAAc,YAAEC,GAAYzgB,EAAA,OAAMwgB,GAAkBC,IAAgBP,EAAqBY,gBAAkBviB,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,4LACtF6kB,GAEf3b,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAWklB,SAAS,IAGhD,EAAE,I,MCrBH,MAAMC,EAAyB7lB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mZAMnCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOwb,cAAc,IACtBjhB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAO2P,eAAe,IAClE5Q,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAM6C,KAAKC,QAAQC,KAAK,IAE1B4J,IAAA,IAAC,eAAC2Y,GAAe3Y,EAAA,OAAsB,GAAjB2Y,EAAsBd,CAA4B,IAG5E1X,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAMC,WAAWC,SAAS,IAC/BqlB,IAAA,IAAC,eAACD,GAAeC,EAAA,OAAsB,GAAjBD,EAAsBd,CAA4B,GHf1C,OGoBpCgB,IAAA,IAAC,KAACC,GAAKD,EAAA,OAAKC,EAAO,EAAI,CAAC,IAChBC,IAAA,IAAC,KAACD,GAAKC,EAAA,OAAKD,EAAO,EAAI,GAAI,I,qCCzB3C,MAAME,UAA+CC,EAAAA,EACjDC,UAAAA,CAAWC,EAAqBC,GACnC,OAAO7L,MAAM2L,WAAWC,EAASC,EACrC,E,qCCQJ,MAAMC,EAAqC,CACvC,CAAC1B,EAAqBQ,SLVkB,EKWxC,CAACR,EAAqBY,gBAAiBX,GAU3C,IACa0B,GAAgBtM,EA+CxBC,EAAAA,GAAWxK,IAAGyK,EAEdD,EAAAA,GAAWxK,IAAG0K,EAEdF,EAAAA,GAAWxK,IAAG8W,EAmGdnM,EAAAA,GAAOC,MAAKmM,EAKZpM,EAAAA,GAAOC,MAAKoM,EAKZrM,EAAAA,GAAOC,OAjKX3Y,EAAAA,EAAAA,KAAQ4Y,EAAT,cACsC3Y,EAAAA,EAUlCuT,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KANTymB,eAA0C,KAAK,KAE/CC,0BAAoB,OACpBC,uBAAiE,IAAIZ,GAAwCtL,EAAAA,EAAAA,GAAA,oBAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,0BAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,yBAAAmM,EAAA,WA6C7GC,kBAA2C,KAAK,KAChDC,gBAAkBlC,EAA6B,KAG/CmC,gBAAkBnC,EAA6B,KAE/CoC,gBAAqD,KAAK,KA0G1DC,2BAA8BC,IAClChlB,KAAK2kB,kBAAoBK,EACrBA,IACAhlB,KAAK4kB,gBAAkBI,EAAGpV,wBAAwBlO,MACtD,GA5JAsX,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK6kB,gBAAkB/U,OAAOC,WAClC,CAEAgM,iBAAAA,GACI3D,MAAM2D,oBACN/b,KAAKwkB,qBAAuBxkB,KAAKilB,kBAC5BjlB,KAAKlC,MAAMonB,QACZllB,KAAKmlB,gBAEb,CAEAC,kBAAAA,CAAmBC,GAEXrlB,KAAKlC,MAAMonB,SAAWG,EAAUH,SAC3BllB,KAAKlC,MAAMonB,OAGRllB,KAAK8kB,iBACL9kB,KAAK8kB,kBAAkB9kB,KAAKlC,MAAMonB,QAHtCllB,KAAKmlB,iBAOjB,CAEAG,oBAAAA,GACIlN,MAAMkN,uBACNtlB,KAAKukB,eAAiB,KACtBvkB,KAAK8kB,gBAAkB,KACvB9kB,KAAKykB,uBAAuBpG,UAC5Bre,KAAKwkB,qBAAqBnG,SAC9B,CAgBA,oBAAc8G,GACNnlB,KAAKwkB,qBAAqBe,SAAWC,EAAAA,EAAgBC,SAAWzlB,KAAKwkB,qBAAqBe,SAAWC,EAAAA,EAAgBE,UAGzH1lB,KAAKwkB,qBAAqBmB,QAC1B3lB,KAAKwkB,qBAAqBoB,YAAY5lB,KAAK2kB,mBAC/C,CAEQM,eAAAA,GACJ,OAAO,IAAIY,EAAAA,EAAmB7lB,KAAKwL,SAAU,CACzC9J,MAAO,IAAKL,OAAQ,IAAMykB,sBAAsB,GACjD,CAAC,CACAC,KAAM,2BACNC,QAAShmB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOkkB,QAAQ+C,uBAAuB9mB,aACvF,CACAM,OAAQd,IAAwB,IAOxBunB,GAPC,gBAACC,GAAgBxnB,GAGtBynB,EAAAA,EAAAA,GAAapmB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOkkB,QAAQC,iCAAiChkB,YAAYoiB,MAAM8E,IACnHrmB,KAAKukB,eAAiB8B,EAASC,QAAQ,IAK3CtmB,KAAK8kB,gBAAmByB,IAEhBL,IACAA,EAA2BM,UAAYD,EAAQ,EAAI,EACvD,EAGJ,IAAIE,EAAiBN,EAA0C,yBAyC/DM,EAAeC,MAAMC,YAAY,CAC7BhB,MAAQvX,IACJ8X,EAA6B9X,CAAK,IAzCrBwY,MACjBH,EAAeC,MAAMG,aAAa,EAAG,UAAU,GAC/CJ,EAAeC,MAAMI,aAAa,EAAG,kBAAkB,EAAO,IAC5BL,EAAeC,MAAMI,aAAa,EAAG,aAAa,EAAO,GACjEC,SAAW,CACjCC,MAAOA,CAAC5Y,EAAO4Y,KACe,cAAtBA,EAAMC,aACNjnB,KAAKknB,qBAAoB,EAC7B,GAGRT,EAAeC,MAAMI,aAAa,EAAG,kBAAkB,EAAO,GAC9DL,EAAeC,MAAMI,aAAa,EAAG,6BAA6B,EAAO,KACvCL,EAAeC,MAAMI,aAAa,EAAG,wBAAwB,EAAO,GAC5EC,SAAW,CACjCpB,MAAQvX,IACJpO,KAAKknB,qBAAoB,EAAM,GAGvCT,EAAeC,MAAMI,aAAa,EAAG,aAAa,EAAO,GACjCL,EAAeC,MAAMI,aAAa,EAAG,YAAY,EAAO,GAChEC,SAAW,CACvBI,SAAW/Y,IACPpO,KAAKonB,eAAepnB,KAAKlC,MAAMupB,oBAC/BrnB,KAAKsnB,sBAELtnB,KAAKykB,uBAAuBV,YAAW,KACnC/jB,KAAK8kB,gBAAkB,KACvB9kB,KAAKwkB,qBAAqBnG,SAAS,IAGvCre,KAAKykB,uBAAuBV,YAAW,KACnC/jB,KAAKukB,eAAiB,KACtBvkB,KAAKlC,MAAMypB,mBAAmBvnB,KAAKwnB,aAAa,GACO,IAAxDtD,EAAmClkB,KAAKwnB,cAAuB,IAAI,EAE7E,EASLZ,GAEA5mB,KAAK6kB,gBAAkB7kB,KAAKwL,SAASsE,OAAOC,WAAW,GAE5D,CACC0X,SAAU,WACV5X,IAAK,IACLnO,MAAO,QAEf,CAGQ4lB,mBAAAA,GACJtnB,KAAK0nB,oBAAqB,CAC9B,CAGQN,cAAAA,CAAeO,GACnB3nB,KAAKwnB,aAAeG,CACxB,CAGQT,mBAAAA,CAAoBS,GACxB3nB,KAAK4nB,kBAAoBD,CAC7B,CASAloB,MAAAA,GAGI,OAAOC,EAAAA,EAAAA,KAACijB,EAAyB,CAAChjB,UAAW,iCACXmjB,eAAgB9iB,KAAK0nB,mBACrB3E,YAAa/iB,KAAKwnB,aAClB5E,eAAgB5iB,KAAK6kB,gBACrBhC,OAAQ7iB,KAAKlC,MAAM+kB,OAAO9iB,UAExDL,EAAAA,EAAAA,KAACujB,EAAmB,CAChB3V,IAAKtN,KAAK+kB,2BACVjC,eAAgB9iB,KAAK0nB,mBACrB3E,YAAa/iB,KAAKwnB,aAAaznB,UAE/ByI,EAAAA,EAAAA,MAAC8a,EAAsB,CACnBE,eAAgBxjB,KAAK4kB,gBACrBjB,KAAM3jB,KAAK4nB,kBAAkB7nB,SAAA,CAE5BC,KAAKwL,SAASoK,YAAYC,UAAU,2BACrCnW,EAAAA,EAAAA,KAAA,SACCM,KAAKwL,SAASoK,YAAYC,UAAU,gCAIrD,GACH2C,GAAA2D,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,gBAAAvE,GAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBArJ0BgG,EAAqBQ,OAAQ,IAADvK,GAAA0D,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,sBAAArE,GAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEtB,CAAM,IAADkI,GAAAvI,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,qBAAApE,GAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEN,CAAM,KAADL,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,uBAAAgI,GAAA3H,OAAAC,yBAAAvE,EAAAiE,UAAA,uBAAAjE,EAAAiE,YAAAD,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,kBAAAiI,GAAA5H,OAAAC,yBAAAvE,EAAAiE,UAAA,kBAAAjE,EAAAiE,YAAAD,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,uBAAAkI,GAAA7H,OAAAC,yBAAAvE,EAAAiE,UAAA,uBAAAjE,EAAAiE,WArD5BtJ,EAqD4BqF,KAAArF,G,4BClE9B,MAAM+U,EAAyClpB,IAA+C,IAA9C,OAACkkB,EAAM,QAAExb,EAAO,QAAEygB,EAAO,aAAEC,GAAappB,EAM3F,OAJAqN,EAAAA,WAAgB,KACZ8b,GAAS,GACV,CAACA,KAEIpoB,EAAAA,EAAAA,KAACsoB,GAAmB,CAACnF,OAAQA,EAAQxb,QAASA,EAAS0gB,aAAcA,EAAahoB,UACtFL,EAAAA,EAAAA,KAACuoB,GAAe,CAACtoB,WAAWG,EAAAA,EAAAA,IAAQ,6BAClB,EAGpBooB,GAAqBC,EAAAA,EAAAA,IAASxqB,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8XAoB9BwqB,GAAiBD,EAAAA,EAAAA,IAASrnB,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,4MAY1ByqB,GAAeF,EAAAA,EAAAA,IAASvmB,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,wFASxBoqB,GAAsBvqB,EAAAA,GAAOiB,IAAGyD,IAAAA,GAAAvE,EAAAA,EAAAA,GAAA,mjCAQzB0E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,IAMrC/J,IAAA,IAAC,OAAC+b,GAAO/b,EAAA,OAAK+b,CAAM,IAGDhY,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAM6J,OAAOwb,cAAc,IAAoBvY,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAM6J,OAAOwb,cAAc,IAUhIE,IAAA,IAAC,aAACsE,GAAatE,EAAA,OAAKsE,GAAelnB,EAAAA,EAAAA,IAAGwB,IAAAA,GAAAzE,EAAAA,EAAAA,GAAA,wENpFK,EMqFuCsqB,IAChFrnB,EAAAA,EAAAA,IAAG4B,IAAAA,GAAA7E,EAAAA,EAAAA,GAAA,gLACkDwqB,EAEGA,EAE3D,IAYmC1E,IAAA,IAAC,MAACxlB,GAAMwlB,EAAA,OAAKxlB,EAAM6J,OAAO0C,YAAY,GAGzB4d,GAI/CJ,GAAkBxqB,EAAAA,GAAOiB,IAAGgE,IAAAA,GAAA9E,EAAAA,EAAAA,GAAA,0bAINgmB,IAAA,IAAC,MAAC1lB,GAAM0lB,EAAA,OAAK1lB,EAAMa,OAAOC,OAAOkkB,QAAQC,iCAAiChkB,UAAU,IAQnGmpB,IAAA,IAAC,MAACpqB,GAAMoqB,EAAA,OAAKpqB,EAAMC,WAAWklB,SAAS,I,8CChHpD,IACakF,IAAuB1Q,GAQ/BC,EAAAA,GAAWxK,IAAGyK,GAEdD,EAAAA,GAAWxK,IAAG0K,GAEdF,EAAAA,GAAWxK,IAAG8W,GAkBdnM,EAAAA,GAAOC,MAAKmM,GAYZpM,EAAAA,GAAOC,MAAKoM,GAgBZrM,EAAAA,GAAOC,OA3DX3Y,EAAAA,EAAAA,KAAQ4Y,GAAT,cAC6C3Y,EAAAA,EAEzCuT,WAAAA,CAAYjV,GACRsa,MAAMta,IAAOya,EAAAA,EAAAA,GAAA,mBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,uBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,8BAAAmM,GAAA,WAWTD,uBAAiE,IAAIZ,EAAyC,KAQ9GwD,iBAAmB,IACnBrnB,KAAKlC,MAAM0qB,WACJhG,EAAqBY,eAErBZ,EAAqBQ,SAEnCzK,EAAAA,EAAAA,GAAA,0BAAAkQ,GAAA,OAAAlQ,EAAAA,EAAAA,GAAA,kBAAAmQ,GAAA,OAAAnQ,EAAAA,EAAAA,GAAA,kBAAAoQ,GAAA,WAoDOC,YAAc,KAMlB5oB,KAAKwL,SAASqd,UAAUC,qBALa,CACjCC,UAAW,kBACXC,SAAU,UACV/Q,OAAQ,uBAEuC,EAAK,EAC1D,KAEMgR,WAAcpG,GACd7iB,KAAKkpB,aAEDxpB,EAAAA,EAAAA,KAACmoB,EAAU,CACPhF,OAAQA,EACRxb,QAASrH,KAAKmpB,WACdrB,QAAS9nB,KAAK4oB,YACdb,aAAc/nB,KAAKopB,yBAIxB,MA/FPpQ,EAAAA,EAAAA,IAAehZ,KACnB,CAUAslB,oBAAAA,GACIlN,MAAMkN,uBACNtlB,KAAKykB,uBAAuBpG,SAChC,CAqFA5e,MAAAA,GACI,MAAMojB,EAAS7iB,KAAKwL,SAAS6d,eAAeC,4BAI5C,OAAOtpB,KAAKupB,gBAAkBvpB,KAAKipB,WAAWpG,IAAUnjB,EAAAA,EAAAA,KAACykB,EAAgB,CACrEkD,iBAAkBrnB,KAAKqnB,iBACvBE,mBAAoBvnB,KAAKunB,mBACzB1E,OAAQA,EACRqC,OAAQllB,KAAKlC,MAAMonB,QAE3B,GACH1M,IAAA2D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,eAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA3GyB,CAAM,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,mBAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAED,CAAM,IAADkI,IAAAvI,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,0BAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEE,CAAM,IAADiM,IAAAtM,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,sBAAAgI,IAAA,CAAA/H,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAkBT,KACrBxc,KAAKlC,MAAM0qB,WACXxoB,KAAKkpB,aAAc,EAEnBlpB,KAAKykB,uBAAuBV,YAAW,KACnC/jB,KAAKwpB,YAAW,EAAK,GACtB,KAEPxpB,KAAKupB,iBAAkB,CAAI,CAC7B,IAADb,IAAAvM,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,cAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGqBiN,IACdzpB,KAAKlC,MAAM0qB,WACXxoB,KAAKkpB,aAAc,EAEfO,EACAzpB,KAAKykB,uBAAuBV,YAAW,KACnC/jB,KAAKwpB,YAAW,EAAM,GACvB,KAGHxpB,KAAKlC,MAAM4rB,qBAAuB1pB,KAAKlC,MAAM4rB,qBAErD,CACF,IAADf,IAAAxM,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,cAAAkI,IAAA,CAAAjI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAGoB,KAMjBxc,KAAKwL,SAASqd,UAAUC,qBALa,CACjCC,UAAW,kBACXC,SAAU,UACV/Q,OAAQ,wBAEuC,GAE/CjY,KAAKlC,MAAM6rB,SACX3pB,KAAKlC,MAAM6rB,UAEf3pB,KAAKopB,wBAAyB,EAC9BppB,KAAKykB,uBAAuBV,YAAW,MACnC6F,EAAAA,EAAAA,KAAY,KACR5pB,KAAKkpB,aAAc,EAEnBlpB,KAAKlC,MAAM4rB,qBAAuB1pB,KAAKlC,MAAM4rB,qBAAqB,GACpE,GACHG,KAA+C,CACpD,IA/EG/W,GA+EJqF,MAAArF,G,8FC9FE,MAAMgX,GAAoBtrB,EAAAA,EAAAA,GAAU,qBCA9BurB,GAAevrB,EAAAA,EAAAA,GAAU,gB,0BCM/B,MAAMwrB,GAAgCzqB,EAAAA,EAAAA,IAAS,cAA4CC,EAAAA,EAEhGC,MAAAA,GACE,OAAKO,KAAKwL,SAASye,cAAcC,KAAKC,qBAAqB1d,SAKzDjE,EAAAA,EAAAA,MAACshB,EAAiB,CAACnqB,UAAU,6BAA4BI,SAAA,EACvDL,EAAAA,EAAAA,KAAC0qB,EAAAA,EAAc,CAACC,OAAQrqB,KAAKwL,SAAS8e,KAAKC,kBAC1CvqB,KAAKwqB,+BAND,IAUX,CAGQA,yBAAAA,GAEN,OADWxqB,KAAKwL,SAASye,cAAcC,KAC7BC,qBAAqBM,kBAK7B/qB,EAAAA,EAAAA,KAACqqB,EAAY,CAACpqB,UAAW,0BAA0BI,SAChDC,KAAKwL,SAASoL,WAAWrI,QAAQgD,WAAWmZ,6BALxC,IASX,G,+CCnCK,MAAMC,GAAoBnsB,E,SAAAA,GAAU,oB,mJCapC,MAAM4rB,GAAgD7qB,EAAAA,EAAAA,KAAUzB,IACnE,MAAM0N,GAAWqD,EAAAA,EAAAA,KAEX+b,EAAiB9sB,EAAMusB,OAASvsB,EAAMusB,OAAS7e,EAAS8e,KAAKO,oBAE7DC,GAAmBC,EAAAA,EAAAA,cAAY,KACjC,MAAMC,EAAcxf,EAAS8e,KAAKW,uBAAyBzf,EAAS8e,KAAKW,uBAAyBzf,EAAS8e,KAAKY,iBAE1GC,EAAkC3f,EAAS8e,KAAKc,4BAA4BJ,GAElF,GAAKG,EAIL,OAAO3f,EAAS8e,KAAKD,OAAOc,EAAgCE,KAAMT,EAAgBO,EAAgCG,MAAM,GACzH,CAACV,EAAgBpf,EAAS8e,QAEtBiB,EAAUC,IAAe9d,EAAAA,EAAAA,UAASod,KAEnCW,GAAaV,EAAAA,EAAAA,cAAY,KAC3B,MAAMT,EAAOQ,IAETS,IAAajB,GACbkB,EAAYlB,EAChB,GACD,CAACiB,EAAUT,KAEdnd,EAAAA,EAAAA,YAAU,KACN,MAAM+d,EAAelgB,EAAS8e,KAAKqB,oBAAoBF,GACvD,MAAO,KACHC,EAAaE,KAAK,CACrB,GACF,CAACpgB,EAAS8e,KAAMmB,KAEnB9d,EAAAA,EAAAA,YAAU,KACN,MAAMke,GAAWC,EAAAA,EAAAA,GAAiB,qBAAsBL,EAAY,KACpE,MAAO,KACHM,cAAcF,EAAS,CAC1B,GACF,CAACrgB,EAAS8e,KAAMmB,IAEnB,MAAMO,EAAqDluB,EAAMmuB,IAAMnuB,EAAMmuB,IAAMtB,EAAAA,EAEnF,OACIjrB,EAAAA,EAAAA,KAACssB,EAAG,CAACrsB,UAAWsX,KAAWnX,EAAAA,EAAAA,IAAQ,sBAAuBhC,EAAM6B,WAAWI,UACvEL,EAAAA,EAAAA,KAAA,OAAKC,WAAWG,EAAAA,EAAAA,IAAQ,YAAYC,SAC/BwrB,KAEH,G,yFCxDP,MCLMvJ,EDK4BvkB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iMAK9CsuB,EAAAA,IAEmBpuB,GAASA,EAAMI,MAAM6J,OAAO8J,YAG/Csa,EAAAA,IAIDruB,GAASA,EAAMmkB,YAAaphB,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,+BACjBE,EAAMmkB,Y,4IEAxB,MAAMpP,GAA+DtT,EAAAA,EAAAA,KAAUzB,IAE3E,MAAMsuB,EAAW,IAAIC,EAAAA,EAAYvuB,EAAMwc,YAAaxc,EAAMuc,WAAYvc,EAAMwuB,cAE5E3e,EAAAA,EAAAA,YAAU,KACN7P,EAAMyuB,WAAWC,WAAWJ,EAAS,IAGzC,IAAIK,EAAmB3uB,EAAMyuB,WAAWG,WAAWN,EAAStR,KAM5D,OALI2R,IACAA,EAAmB,IAAIE,EAAAA,IAKvBjtB,EAAAA,EAAAA,KAACsiB,EAAAA,EAAkB,CAACC,UAAWnkB,EAAMmkB,UACjBtiB,UAAS,iCAAAC,OAAmCwsB,EAAS9R,YAAW,KAAA1a,OAAI9B,EAAM6B,WAAa,IAAKI,SAExG0sB,EAAiBhtB,OAAO,CACpB+a,gBAAiB1c,EAAM0c,gBACvByH,UAAWnkB,EAAMmkB,aAGR,IAIhBC,GAAqB7K,EAAAA,EAAAA,GAAaxE,EACa,CAAC,cACzD,CACI+Z,eAAiB9uB,IAAU4B,EAAAA,EAAAA,KAACmtB,EAAAA,EAAoB,CAACrS,gBAAiB1c,EAAM0c,gBAAiByH,UAAWnkB,EAAMmkB,a,6GCjD3G,MAAM6K,EAA0BrvB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sCAE3CE,GAASA,EAAMmkB,YAAaphB,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,uCACfE,EAAMmkB,a,eCKrB,MAAM4K,GAAuBttB,EAAAA,EAAAA,IAClC,cAAmCC,EAAAA,EAEjCC,MAAAA,GACE,OAAGO,KAAKlC,MAAM0c,kBAAoBxa,KAAKwL,SAASqI,OAAOkZ,OAAOC,YAClDttB,EAAAA,EAAAA,KAACotB,EAAuB,CAAC7K,UAAWjiB,KAAKlC,MAAMmkB,UAAWtiB,UAAU,8BAEzE,IACT,G,wGCjBG,MAAMstB,GAAuBzuB,EAAAA,EAAAA,GAAU,wB,wECAvC,MAAM0uB,EAAoBzvB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,6YAK9Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,I,UCL7C,MAAM+uB,EAAiC1vB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,ufAkBlDe,IAAA,IAAC,OAACyuB,GAAOzuB,EAAA,OAAKyuB,GAASvsB,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,qEAEA0E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMa,OAAOC,OAAOquB,UAAUC,kBAAkBnuB,UAAU,KAC/F0B,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,sEAEqBkJ,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMa,OAAOC,OAAOquB,UAAUE,mBAAmBpuB,UAAU,GACnG,I,oFClBE,MAAMquB,EAAyCxhB,EAAAA,YAAyC,CAAClO,EAAOwP,KAE/F5N,EAAAA,EAAAA,KAAC+tB,EAAAA,IAAMvoB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKpH,GAAK,IAAEwP,IAAKA,OCMnBogB,GAA0BnuB,EAAAA,EAAAA,IACnC,cAAsCC,EAAAA,EAA6CuT,WAAAA,GAAA,SAAA9S,WAAA,KAC/E0tB,YAAc3hB,EAAAA,YAAkC,KAChD4hB,YAAc5hB,EAAAA,WAAkC,CAEhD,aAAY6hB,GACR,OAAO7tB,KAAKwL,SAASsiB,SAASC,yBAClC,CAEAtuB,MAAAA,GACI,OAAQ+I,EAAAA,EAAAA,MAAC0kB,EAAiB,CAAAntB,SAAA,EACtBL,EAAAA,EAAAA,KAACytB,EAA8B,CAACC,QAAQ,EAAM9f,IAAKtN,KAAK2tB,YAAahuB,WAAWG,EAAAA,EAAAA,IAAQ,kCACxFJ,EAAAA,EAAAA,KAACytB,EAA8B,CAAC7f,IAAKtN,KAAK4tB,YAAajuB,WAAWG,EAAAA,EAAAA,IAAQ,8BAC1EJ,EAAAA,EAAAA,KAAC8tB,EAAe,CACZQ,IAAKhuB,KAAKwL,SAASyiB,SAASC,cAAgB,MAAQ,MACpDplB,MAAO,CAACpH,MAAO,QACfysB,cAAe,EACfC,gBAAgB,EAChBC,WAAY,CACRC,WAAW,GAEfC,WAAY,CACRC,OAAQxuB,KAAK4tB,YAAYrf,QACzBkgB,OAAQzuB,KAAK2tB,YAAYpf,SAE7BmgB,QAAS,CAACC,EAAAA,GAAYC,EAAAA,IACtBjvB,UAAU,yBAEVkvB,aAAeC,IAC6B,mBAA7BA,EAAOC,OAAOR,aACrBO,EAAOC,OAAOR,WAAWE,OAASzuB,KAAK2tB,YAAYpf,QACnDugB,EAAOC,OAAOR,WAAWC,OAASxuB,KAAK4tB,YAAYrf,QACvD,EAEJygB,oBAAsBF,IAClB9uB,KAAKlC,MAAMmxB,6BAA6BH,EAAOI,YAAY,EAC7DnvB,SAEDC,KAAK6tB,UAAUtd,KAAKoX,IACVjoB,EAAAA,EAAAA,KAACyvB,EAAAA,GAAW,CAAYrmB,MAAO,CAACpH,MAAO,QAAQ3B,SACjDpB,IAAmB,IAAlB,SAAEywB,GAAUzwB,EACV,OAAOe,EAAAA,EAAAA,KAAC2vB,EAAAA,EAAoB,CAAYC,QAAS3H,GAAfA,EAAE4H,GAAiB,GAFpC5H,EAAE4H,UAQ3C,IC7DKC,GAAsBhxB,EAAAA,EAAAA,GAAU,uBCAhCixB,GAAyBjxB,EAAAA,EAAAA,GAAU,0B,MCAzC,MAAMkxB,EAA8BjyB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iTAE6BE,GAAUA,EAAMI,MAAMa,OAAOC,OAAOquB,UAAUsC,mBAAmBxwB,aAEtIR,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IACkCN,GAAUA,EAAMI,MAAMa,OAAOC,OAAOquB,UAAUsC,mBAAmBxwB,aCL1IywB,GAA4BpxB,EAAAA,EAAAA,GAAU,6B,2BCWnD,IACaqxB,GAA0BhY,EAQlCC,EAAAA,GAAWxK,IAAGyK,EAGdE,EAAAA,GAAOC,OAZX3Y,EAAAA,EAAAA,KAAQ4Y,EAAT,cACgD3Y,EAAAA,EAE5CuT,WAAAA,CAAYjV,GACRsa,MAAMta,IAAOya,EAAAA,EAAAA,GAAA,2BAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,uCAAAE,EAAA,WAaTqX,oBAAsB,KAC1B,MAAMC,EAAiB/vB,KAAKwL,SAASsiB,SAASC,0BAA0B/tB,KAAKgwB,qBAC7E,IAAID,EACA,OAAO,KAGX,MAAME,EAAgBF,EAAeE,cAErC,OAASvwB,EAAAA,EAAAA,KAAC8vB,EAAmB,CAAC7vB,WAAWG,EAAAA,EAAAA,IAAQ,gCAAgCC,SAC5EkwB,EAAc1f,KAAI2f,IAAexwB,EAAAA,EAAAA,KAACywB,EAAAA,EAAiB,CACsBxwB,WAAWG,EAAAA,EAAAA,IAAQ,0BACnBiV,SAAUmb,EAAYjd,SAAS8B,SAC/Bqb,aAAcL,EAAeK,aAC7BC,eAAgB3Q,gBACRwQ,EAAYI,MAAM,EAE1BxnB,MAAO,CAACynB,aAAc,WAAU,GAAA3wB,OAP7CmwB,EAAeR,GAAE,KAAA3vB,OAAIswB,EAAYjd,SAAS8B,cASrF,GA7BtBiE,EAAAA,EAAAA,IAAehZ,KACnB,CAiCAP,MAAAA,GAGI,OACI+I,EAAAA,EAAAA,MAACykB,EAAoB,CAACttB,WAAWG,EAAAA,EAAAA,IAAQ,mCAAmCC,SAAA,EACxEyI,EAAAA,EAAAA,MAACknB,EAA2B,CAAA3vB,SAAA,EACxBL,EAAAA,EAAAA,KAAC+vB,EAAsB,CAAA1vB,SAClBC,KAAKwL,SAASoK,YAAYC,UAAU,mCAEzCnW,EAAAA,EAAAA,KAACguB,EAAuB,CAACuB,6BAA8BjvB,KAAKwwB,sCAEhE9wB,EAAAA,EAAAA,KAACkwB,EAAyB,CAAA7vB,SACrBC,KAAKwL,SAASoK,YAAYC,UAAU,wCAExC7V,KAAK8vB,wBAGlB,GACHtX,GAAA2D,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,uBAAAvE,GAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAhDyB,CAAE,IAAD/D,GAAA0D,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,mCAAArE,GAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGoBiU,IACvCzwB,KAAKgwB,oBAAsBS,CAAY,CACzC,IAfG3d,EAeJqF,KAAArF,E,wFC1BE,MAAM4d,EAAiBjzB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oSAMlCE,GAASA,EAAM6yB,YAAa9vB,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,uBAAoB,KAE5Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAKvCkE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWyyB,OAAO,IAIrC9pB,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAW0yB,IAAM,QAAW3yB,EAAMC,WAAW2yB,SAAS,I,eCjB/E,MAAMC,GAAqBvyB,E,SAAAA,GAAU,sB,MCCrC,MAAMwyB,GAAqBvzB,EAAAA,EAAAA,IAAOszB,EAAPtzB,CAA0BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8DAErCe,IAAA,IAAC,cAACsyB,GAActyB,EAAA,OAAKsyB,EAAgB,SAAW,GAAG,I,MCHnE,MAAMC,EAA4BzzB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gL,MCA5C,MAAMuzB,EAA2B1zB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4H,MCC3C,MAAMwzB,GAA2B3zB,EAAAA,EAAAA,IAAO0zB,EAAP1zB,CAAgCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,U,MCDjE,MAAMyzB,EAAkC5zB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gK,MCAlD,MAAM0zB,EAA4B7zB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oKAKtCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,I,MCL7C,MAAMmzB,EAAmC9zB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uHAGpDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQC,KAAK,IAC9BqB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,I,MCJ7C,MAAMozB,EAAgC/zB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8FAEnDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,I,MCFjC,MAAMC,EAA2Cj0B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mOAI5De,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQ8J,OAAO,IAGhCxI,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,I,iBCP7C,MAAMuzB,EAAyBl0B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kQACnBE,GAASA,EAAM8zB,UAM/BjzB,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,I,MCP7C,MAAMyzB,EAAkCp0B,EAAAA,GAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4CACpDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,I,MCDnC,MAAMK,EAAiCr0B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2K,MCAjD,MAAMm0B,EAAkCt0B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8F,6BCAlD,MAAMo0B,EAA2Bv0B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gKAQ9CE,GAASA,EAAMm0B,qBACLpxB,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,wEACQE,EAAMI,MAAM6J,OAAOkB,OAC1BnL,EAAMI,MAAM6C,KAAKC,QAAQywB,MAE7B,K,eCGP,MAAMS,UAAuCC,EAAAA,EAEhDpf,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAMTs0B,iBAAwB,KAL5BpyB,KAAK0mB,MAAQ,CACT2L,kBAAmBv0B,EAAMwxB,QAAQ+C,kBAEzC,CAMAtW,iBAAAA,GACI3D,MAAM2D,oBACH/b,KAAKlC,MAAMwxB,QAAQ2C,sBAClBjyB,KAAKoyB,iBAAmBE,aAAY,KAChCtyB,KAAKuyB,SAAS,CACVF,kBAAmBryB,KAAKlC,MAAMwxB,QAAQ+C,mBACxC,GACH,KAEX,CAEA/M,oBAAAA,GACIlN,MAAMkN,uBACHtlB,KAAKoyB,kBACJrG,cAAc/rB,KAAKoyB,iBAE3B,CAEA3yB,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACsyB,EAAwB,CAAC3qB,QAASrH,KAAKlC,MAAMuJ,QAAS4qB,oBAAqBjyB,KAAKlC,MAAMwxB,QAAQ2C,oBAAoBlyB,SAC9GC,KAAKlC,MAAMwxB,QAAQ+C,mBAGhC,E,cCVG,MAAMG,GAA2BjzB,EAAAA,EAAAA,IACpC,cAAuCC,EAAAA,EAE3BizB,qBAAAA,GACJ,OACI/yB,EAAAA,EAAAA,KAAC6xB,EAAgC,CAAAxxB,SAC5BC,KAAKlC,MAAMwxB,QAAQoD,yBAA2B1yB,KAAKlC,MAAMwxB,QAAQqD,yBAG9E,CAEQC,oBAAAA,GACJ,OAAI5yB,KAAKlC,MAAMwxB,QAAQoD,yBAKnBlqB,EAAAA,EAAAA,MAACkpB,EAAwC,CAAA3xB,SAAA,EACrCL,EAAAA,EAAAA,KAAA,QAAAK,SACKC,KAAKwL,SAASoK,YAAYC,UAAU,uCAEzCnW,EAAAA,EAAAA,KAACmyB,EAA+B,CAAA9xB,SAC3BC,KAAKlC,MAAMwxB,QAAQqD,6BATrB,IAaf,CAEAlzB,MAAAA,GACI,IAAIozB,EAAW7yB,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMonB,SACtD,OACItqB,EAAAA,EAAAA,MAACwoB,EAAkB,CAAC+B,mBAAoB/yB,KAAKlC,MAAMi1B,mBAAoB9B,cAAejxB,KAAKlC,MAAMmzB,cAAetxB,WAAWG,EAAAA,EAAAA,IAAQ,wBAAwBC,SAAA,EACxJL,EAAAA,EAAAA,KAACwyB,EAA8B,CAAC5C,QAAStvB,KAAKlC,MAAMwxB,QAASjoB,QAASrH,KAAKlC,MAAMuJ,WAEhFmB,EAAAA,EAAAA,MAAC0oB,EAAyB,CAAC7pB,QAASrH,KAAKlC,MAAMuJ,QAAQtH,SAAA,EACnDL,EAAAA,EAAAA,KAAC2xB,EAA+B,CAAAtxB,UAC5BL,EAAAA,EAAAA,KAACiyB,EAAsB,CAACC,QAAS5xB,KAAKlC,MAAMwxB,QAAQsC,aAExDppB,EAAAA,EAAAA,MAAC8oB,EAAyB,CAAAvxB,SAAA,CACrBC,KAAKyyB,yBACN/yB,EAAAA,EAAAA,KAAC8xB,EAA6B,CAAAzxB,SACzBC,KAAKlC,MAAMwxB,QAAQ0D,cAEvBhzB,KAAK4yB,8BAIdpqB,EAAAA,EAAAA,MAAC4oB,EAAwB,CAAArxB,SAAA,EACrBL,EAAAA,EAAAA,KAACoyB,EAA8B,CAACzqB,QAASrH,KAAKlC,MAAMm1B,aAAalzB,UAC7DL,EAAAA,EAAAA,KAACmzB,EAAQ,CAACpsB,KAAM,IAAKH,SAAUC,EAAAA,EAAY2F,SAE/CxM,EAAAA,EAAAA,KAACqyB,EAA+B,CAAC1qB,QAASrH,KAAKlC,MAAMuJ,eAKrE,I,MClGD,MAAM6rB,GAAqBz1B,EAAAA,EAAAA,IAAOszB,EAAPtzB,CAA0BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sEAEnCe,IAAA,IAAC,cAACsyB,GAActyB,EAAA,OAAKsyB,EAAgB,IAAM,QAAQ,I,MCHrE,MAAMkC,EAA2B11B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2KAI5Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,I,MCJnC,MAAM2B,EAA4B31B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8I,MCC5C,MAAMy1B,GAA2B51B,EAAAA,EAAAA,IAAO0zB,EAAP1zB,CAAgCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,UCwB3D01B,IAA2B/zB,EAAAA,EAAAA,IACpC,cAAuCC,EAAAA,EACnCC,MAAAA,GACI,IAAI8zB,EAAYvzB,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM8nB,UACvD,OACIhrB,EAAAA,EAAAA,MAAC0qB,EAAkB,CAACH,mBAAoB/yB,KAAKlC,MAAMi1B,mBAAoB9B,cAAejxB,KAAKlC,MAAMmzB,cAAetxB,WAAWG,EAAAA,EAAAA,IAAQ,wBAAwBC,SAAA,EACvJL,EAAAA,EAAAA,KAACyzB,EAAwB,CAAC9rB,QAASrH,KAAKlC,MAAMuJ,QAAQtH,SACjDC,KAAKlC,MAAMwxB,QAAQ0D,eAExBtzB,EAAAA,EAAAA,KAAC0zB,EAAyB,CAAC/rB,QAASrH,KAAKlC,MAAMuJ,QAAQtH,SAClDC,KAAKlC,MAAMwxB,QAAQmE,sBAExBjrB,EAAAA,EAAAA,MAAC6qB,EAAwB,CAAAtzB,SAAA,EACrBL,EAAAA,EAAAA,KAACoyB,EAA8B,CAACzqB,QAASrH,KAAKlC,MAAMm1B,aAAalzB,UAC7DL,EAAAA,EAAAA,KAAC6zB,EAAS,CAAC9sB,KAAM,IAAKH,SAAUC,EAAAA,EAAY2F,SAEhDxM,EAAAA,EAAAA,KAACqyB,EAA+B,CAAC1qB,QAASrH,KAAKlC,MAAMuJ,eAIrE,IC1BKgoB,IAAuB9vB,EAAAA,EAAAA,IAChC,cAAmC4yB,EAAAA,EAC/Bpf,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAKT41B,cAAgB,KACpB1zB,KAAKuyB,SAAS,CACVoB,cAAe3zB,KAAK0mB,MAAMiN,cAC5B,EACL,KAEOC,wBAA0B,KAC1B5zB,KAAKlC,MAAMuJ,SACXrH,KAAKlC,MAAMuJ,QAAQrH,KAAKlC,MAAMwxB,QAClC,EAbAtvB,KAAK0mB,MAAQ,CACTiN,cAAc,EAEtB,CAaAl0B,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACkoB,EAAc,CAACC,WAAYxmB,QAAQnK,KAAKlC,MAAMuJ,SAAU1H,WAAWG,EAAAA,EAAAA,IAAQ,kCAAkCC,SAAA,EAC1GL,EAAAA,EAAAA,KAAC8yB,EAAwB,CAACO,mBAAoB/yB,KAAKlC,MAAMwxB,QAAQyD,mBAAoBzD,QAAStvB,KAAKlC,MAAMwxB,QAAS2B,cAAejxB,KAAK0mB,MAAMiN,aAAcV,aAAcjzB,KAAK0zB,cAAersB,QAASrH,KAAK4zB,2BAC1Ml0B,EAAAA,EAAAA,KAAC4zB,GAAwB,CAACP,mBAAoB/yB,KAAKlC,MAAMwxB,QAAQyD,mBAAoBzD,QAAStvB,KAAKlC,MAAMwxB,QAAS2B,cAAejxB,KAAK0mB,MAAMiN,aAAcV,aAAcjzB,KAAK0zB,cAAersB,QAASrH,KAAK4zB,4BAGtN,G,gGC9CD,MAAMC,GAA4Br1B,EAAAA,EAAAA,GAAU,6B,0DCA5C,MAAMs1B,GAAqBt1B,EAAAA,EAAAA,GAAU,sB,eCArC,MAAMu1B,GAA4Bv1B,EAAAA,EAAAA,GAAU,6B,eCiBnD,MAAMqU,GAAgBtT,EAAAA,EAAAA,IAAS,cAA8CC,EAAAA,EAAqDuT,WAAAA,GAAA,SAAA9S,WAAA,KACtH+zB,oBAAkB9uB,EAAAA,EAAAA,GAAA,CACtB+uB,QAAS,CACLC,MAAO,IACPrI,SAAU,MAEX7rB,KAAKwL,SAAStN,MAAMi2B,gBAAgBC,0BAAwB,KAG3DC,0BAAoB,OAsEpBC,gBAAkB5U,UACtB1f,KAAKu0B,eAAe,SAMpB,MAAMC,EAAYx0B,KAAKwL,SAASuP,6BAA6B0Z,eAAexZ,UAAYyZ,EAAAA,GAA0BC,UAAYD,EAAAA,GAA0BE,UAClJC,EAAU70B,KAAKwL,SAASuP,6BAA6B0Z,eAAexZ,UAAY6Z,EAAAA,GAAiBC,SAAWD,EAAAA,GAAiBE,mBAE7Hh1B,KAAKwL,SAASypB,WAAWC,cAAc,CACzCC,QAAS,CACLC,KAAMC,EAAAA,EAAS/0B,OACfg1B,OAAQC,EAAAA,GAAeC,aACvBX,WAEJY,sBAAuB,CACnBjB,cAGP,CACJ,CAzFOkB,yBAAAA,CAA0Bb,GAW9B,KATKA,GAAY70B,KAAKq0B,sBAAwBr0B,KAAKq0B,qBAAqBsB,UAAYd,IAI5E70B,KAAKq0B,sBAAwBr0B,KAAKq0B,qBAAqBuB,mBACvD51B,KAAKq0B,qBAAqBuB,kBAAkBC,EAAAA,EAAyBC,WAIzEjB,KAAa70B,KAAKq0B,sBAAwBr0B,KAAKq0B,qBAAqBsB,UAAYd,GAAU,CAC1F,IAAIkB,EAA+D/1B,KAAKg0B,mBAExEh0B,KAAKq0B,sBAAoBnvB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAClB6wB,GAAc,IACjBJ,QAASd,IAEb70B,KAAKwL,SAASypB,WAAWe,wBAAwBh2B,KAAKq0B,qBAC1D,CAEKQ,IACD70B,KAAKq0B,0BAAuBl0B,EAEpC,CAEAilB,kBAAAA,GACQplB,KAAKwL,SAASypB,WAAWgB,qBACzBj2B,KAAKu0B,eAAe,OAE5B,CAEA90B,MAAAA,GACI,IAAKO,KAAKwL,SAASypB,WAAWgB,oBAC1B,OAAO,KAIX,IAAKj2B,KAAKwL,SAASypB,WAAWiB,eAC1B,OAAO,KAGX,GAAIl2B,KAAKwL,SAASypB,WAAWkB,kBACzB,OAAO,KAUX,IAAIC,GAAmB,EAKvB,OAJ0D,IAAtDp2B,KAAKlC,MAAMu4B,oBAAoBC,oBAA4Bt2B,KAAKlC,MAAM+V,OAAOkZ,OAAOwJ,UAAYv2B,KAAKlC,MAAM+V,OAAOmI,GAAGwa,YACrHJ,GAAmB,IAInB5tB,EAAAA,EAAAA,MAACurB,EAAyB,CAACuC,mBAAoBt2B,KAAKlC,MAAMu4B,oBAAoBC,mBAAoBF,iBAAkBA,EAAiBr2B,SAAA,EACjIL,EAAAA,EAAAA,KAACm0B,EAAyB,CACtBvmB,IAAKtN,KAAK01B,0BAA0Be,KAAKz2B,SAE7CN,EAAAA,EAAAA,KAACo0B,EAAkB,CAACn0B,WAAWG,EAAAA,EAAAA,IAAQ,6BAA8BuH,QAASA,IAAMrH,KAAKs0B,sBAGrG,CAyBQC,cAAAA,CAAetc,GACnB,IACI,IAAI5R,EAAoC,CACpC4R,OAAQA,EACR+Q,SAAU,gBACVD,UAAW,eACX2N,MAAO,MACPC,WAAY,CACRC,SAAU52B,KAAKwL,SAASorB,SAASC,WAAa,WAAa72B,KAAKwL,SAASorB,SAASE,WAAWC,SAAS53B,WACtGqiB,aAAcxhB,KAAKwL,SAASkE,KAAKsnB,kBAGzCh3B,KAAKwL,SAASqd,UAAUC,qBAAqBziB,GAAS,EAC1D,CACA,MAAOqI,GACHjK,QAAQC,IAAI,iBAAmBuT,EAAS,wCAA0CvJ,EACtF,CACJ,IAGSuoB,GAAkC5f,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,sBAAuB,U,iEC3I5F,MAAMqkB,E,SAAgCz5B,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8E,mJCQhD,IAAKu5B,GAIX,SAJWA,GAAAA,EAAAA,EAAS,eAATA,EAAAA,EAAS,eAATA,EAAAA,EAAS,uCAIpB,CAJWA,IAAAA,EAAS,KAgBd,MAAMC,EAA8Ft5B,IACvG,MAAM0N,GAAWqD,EAAAA,EAAAA,KACjB,IAAIwoB,EAAc,0CAOlB,OANIv5B,EAAMw5B,YAAcH,EAAUI,OAC9BF,EAAc,4CAEdv5B,EAAMw5B,YAAcH,EAAUK,OAC9BH,EAAc,6CAGd7uB,EAAAA,EAAAA,MAACivB,EAAAA,EAA8B,CAAA13B,SAAA,EAC3BL,EAAAA,EAAAA,KAACw3B,EAAAA,EAA6B,CAAAn3B,SACxByL,EAASoK,YAAYC,UAAUwhB,EAAa,CAC1CK,8BAA+B55B,EAAM65B,2BAG7Cj4B,EAAAA,EAAAA,KAACmN,EAAAA,EAAU,KACXnN,EAAAA,EAAAA,KAACoN,EAAAA,EAAS,CAACzL,OAAO,YAElB3B,EAAAA,EAAAA,KAACk4B,EAAAA,EAA4B,CACzBC,gBAAiB/5B,EAAM+5B,gBACvBC,UAAWh6B,EAAMg6B,UACjBC,UAAWj6B,EAAMi6B,aAGrBr4B,EAAAA,EAAAA,KAAA,OAAAK,UACIL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAQ,UAAWK,QAASA,IAAMvJ,EAAMk6B,cAAcC,QAASr3B,OAAO,cAAab,SACtFyL,EAASoK,YAAYC,UAAU,YAIX,C,+HCvClC,MAAMqiB,EAA4Ep6B,IACrF,MAAM0N,GAAWqD,EAAAA,EAAAA,KACjB,OACIrG,EAAAA,EAAAA,MAACivB,EAAAA,EAA8B,CAAA13B,SAAA,EAC3BL,EAAAA,EAAAA,KAACoN,EAAAA,EAAS,CAACzL,OAAO,YAElB3B,EAAAA,EAAAA,KAACk4B,EAAAA,EAA4B,CACzBC,gBAAiB/5B,EAAM+5B,gBACvBC,UAAWh6B,EAAMg6B,UACjBC,UAAWj6B,EAAMi6B,aAGrBr4B,EAAAA,EAAAA,KAACy4B,EAAAA,EAA2B,CACxBC,cAAe,CACXz4B,UAAW,oCACXmC,KAAM0J,EAASoK,YAAYC,UAAU,UACrCxO,QAASvJ,EAAMu6B,UAEnBC,gBAAiB,CACb34B,UAAW,oCACXmC,KAAM0J,EAASoK,YAAYC,UAAU,UACrCxO,QAASvJ,EAAMy6B,UAEnBC,uBAAwBhtB,EAASrN,WAAWC,UAC5CuB,WAAWG,EAAAA,EAAAA,IAAQ,gCACnBc,OAAO,kBAGkB,C,iEC5ClC,MAAM62B,E,SAAiCh6B,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,+HAI3Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWyS,UAAU,G,wHCH9C,MAAM6nB,EAAgCh7B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sCAI1C86B,EAA6Bj7B,EAAAA,GAAOiB,IAAGoC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,kBAC9C+6B,EAAAA,IAGOC,EAA8Bn7B,EAAAA,GAAOiB,IAAGkD,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,kBAC/Ci7B,EAAAA,I,eCAC,MAAMjB,EAAqE95B,IAC9E,MAAM0N,GAAWqD,EAAAA,EAAAA,KACjB,OAAQrG,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACJyI,EAAAA,EAAAA,MAACiwB,EAA6B,CAAA14B,SAAA,EAC1BL,EAAAA,EAAAA,KAACg5B,EAA0B,CAAA34B,SAAEyL,EAASoK,YAAYC,UAAU,qCAC5DnW,EAAAA,EAAAA,KAACk5B,EAA2B,CAACj5B,WAAWG,EAAAA,EAAAA,IAAQ,gCAAgCC,SAAEjC,EAAM+5B,gBAAgBkB,gCAG5GvwB,EAAAA,EAAAA,MAACiwB,EAA6B,CAAA14B,SAAA,EAC1BL,EAAAA,EAAAA,KAACg5B,EAA0B,CAAA34B,SAAEyL,EAASoK,YAAYC,UAAU,6CAC5DnW,EAAAA,EAAAA,KAACk5B,EAA2B,CAACj5B,WAAWG,EAAAA,EAAAA,IAAQ,mCAAmCC,SAAEyL,EAASwJ,SAASC,YAAYnX,EAAMg6B,UAAYh6B,EAAMi6B,iBAG/IvvB,EAAAA,EAAAA,MAACiwB,EAA6B,CAAA14B,SAAA,EAC1BL,EAAAA,EAAAA,KAACg5B,EAA0B,CAAA34B,SAAEyL,EAASoK,YAAYC,UAAU,uCAC5DnW,EAAAA,EAAAA,KAACk5B,EAA2B,CAACj5B,WAAWG,EAAAA,EAAAA,IAAQ,kCAAkCC,SAAEyL,EAASwJ,SAASC,YAAYnX,EAAMi6B,kBAE7H,C,4GC3BA,MAAMiB,EAA2Bv7B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oIAIrCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW86B,SAAS,I,MCJ7C,MAAMC,EAAoBz7B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,0LAOhCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW0S,SAAS,I,+ECI3C,MAAMsoB,GAA6B55B,EAAAA,EAAAA,IACtC,cAAyCC,EAAAA,EAAgDuT,WAAAA,GAAA,SAAA9S,WAAA,KAqC7Em5B,uBAAyB1Z,UAC7B1f,KAAKlC,MAAMu7B,eAAevvB,GACnB,CACHwvB,QAAQ,GAEf,CAxCOC,cAAAA,GACJ,IAAInZ,EAAWpgB,KAAKwL,SAAS6U,YAAYmZ,cAEzC,MAAMC,EAAqBA,CAACC,EAAiBC,IAClC35B,KAAKwL,SAASoK,YAAYC,UAAU,oCAAqC,CAC5E6jB,QAASA,EACTE,KAAM55B,KAAKwL,SAASwJ,SAASC,YAAY0kB,KAIjD,GAAIvZ,EAAW,IACX,MAAO,CACH,CACItW,MAAOsW,EACPte,KAAM23B,EAAmB,IAAKrZ,KAO1C,OAFoByZ,EAAAA,EAAAA,GAA2B75B,KAAKwL,SAASye,cAAc6P,gBAAgBC,WAAWC,MAAMC,sBAEzF1pB,KAAI2pB,IACZ,CACHR,QAASQ,EACTpwB,MAAOuM,KAAK8jB,MAAMD,EAAI9Z,EAAW,SAEtCX,QAAO2a,GAAaA,EAAUtwB,OAAS,MACrCyG,KAAI6pB,IACM,CACHtwB,MAAOswB,EAAUtwB,MACjBhI,KAAM23B,EAAmBW,EAAUV,QAASU,EAAUtwB,UAGtE,CASArK,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAAC26B,EAAAA,EAAiB,CAACC,MAAOt6B,KAAKwL,SAASoK,YAAYC,UAAU,+CAC3C0kB,MAAOv6B,KAAKu5B,iBACZiB,aAAcx6B,KAAKwL,SAASoK,YAAYC,UAAU,UAClDwjB,eAAgBr5B,KAAKo5B,uBACrBhvB,aAAcpK,KAAKlC,MAAMsM,aACzBzK,WAAWG,EAAAA,EAAAA,IAAQ,gDAE9C,ICjED,MAAM26B,EACT1nB,WAAAA,CAA6B6C,GAAmC,KAAnCA,YAAAA,CAC7B,CAEA8kB,OAAAA,CAAQ5wB,GACJ,OAAc,IAAVA,EACO9J,KAAK4V,YAAYC,UAAU,cAE/B7V,KAAK4V,YAAYC,UAAU,YAAa,CAACvF,EAAGxG,GACvD,CAEA6wB,KAAAA,CAAM7wB,GACF,OAAa,IAAVA,EACQ9J,KAAK4V,YAAYC,UAAU,YAE/B7V,KAAK4V,YAAYC,UAAU,UAAW,CAACvF,EAAGxG,GACrD,CAEA8wB,IAAAA,CAAK9wB,GAED,OAAa,IAAVA,EACQ9J,KAAK4V,YAAYC,UAAU,WAE/B7V,KAAK4V,YAAYC,UAAU,SAAU,CAACvF,EAAGxG,GACpD,CAEA+wB,IAAAA,GACI,OAAO76B,KAAK4V,YAAYC,UAAU,WACtC,CAEAilB,KAAAA,GACI,OAAO96B,KAAK4V,YAAYC,UAAU,YACtC,E,eCjBG,MAAMklB,GAA6Bx7B,EAAAA,EAAAA,IACtC,cAAyCC,EAAAA,EAAgDuT,WAAAA,GAAA,SAAA9S,WAAA,KA2B7Em5B,uBAA0BtvB,GACvB,IAAIkxB,SAAmCC,IAE1C,MAMMC,EAAkBA,KACpBD,EAAQ,CACJ3B,QAAQ,IAEZt5B,KAAKlC,MAAMu7B,eAAevvB,EAAM,EAGjC/E,EAAAA,MAAMkP,kBAAkBnK,IAAUA,IAAUuM,KAAKuK,OAAO5gB,KAAKm7B,sBAC5DD,IAEAl7B,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CACrCC,iBAAiB,EACjB7yB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,aAC3C/T,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,qDAAsD,CAACyU,KAAMtqB,KAAKu7B,mBAAmBC,EAAAA,SAASC,YAAY3xB,MAC1I,SACA9J,KAAKwL,SAASoK,YAAYC,UAAU,0DAE9C6lB,QAAS,CACL,CACI55B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1C8lB,aAAc,OACdt0B,QAASqY,UA1BrBub,EAAQ,CACJ3B,QAAQ,IA2BIt5B,KAAKwL,SAASqd,UAAU+S,cAAc,0CAA2C,MAC1EC,EAAAA,EAAkCC,yBAGjD,CACIh6B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,OAC1C8lB,aAAc,OACdt0B,QAASqY,UACLwb,IACAl7B,KAAKwL,SAASqd,UAAU+S,cAAc,0CAA2C,OAC1EC,EAAAA,EAAkCC,2BAK7D,GAIP,CA5ED,iBAAYC,GACR,OAAO,IAAItB,EAAmBz6B,KAAKwL,SAASoK,YAChD,CAEQ2lB,kBAAAA,CAAmBS,GACvB,OAAOA,EAASC,aAAe,GAAKj8B,KAAK+7B,cAAcrB,QAAQsB,EAASC,cAAgBj8B,KAAK+7B,cAAcpB,MAAMqB,EAASE,WAC9H,CAEQf,kBAAAA,GACJ,OAAGn7B,KAAKwL,SAASqI,OAAOmI,GAAGmgB,YAChBtC,EAAAA,EAAAA,GAA2B75B,KAAKwL,SAASye,cAAc6P,gBAAgBC,WAAWC,MAAMoC,iCAExFvC,EAAAA,EAAAA,GAA2B75B,KAAKwL,SAASye,cAAc6P,gBAAgBC,WAAWC,MAAMqC,2BAEvG,CAEQC,iBAAAA,GACJ,OAAOt8B,KAAKm7B,qBAAqB5qB,KAAImqB,IACjC,MAAMsB,EAAWR,EAAAA,SAASC,YAAYf,GACtC,MAAO,CACH5wB,MAAOkyB,EAASO,aAChBz6B,KAAM9B,KAAKu7B,mBAAmBS,GACjC,GAET,CAsDAv8B,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAAC26B,EAAAA,EAAiB,CAACC,MAAOt6B,KAAKwL,SAASoK,YAAYC,UAAU,+CAC3C0kB,MAAOv6B,KAAKs8B,oBACZ9B,aAAcx6B,KAAKwL,SAASoK,YAAYC,UAAU,UAClDwjB,eAAgBr5B,KAAKo5B,uBACrBhvB,aAAcpK,KAAKlC,MAAMsM,aACzBzK,WAAWG,EAAAA,EAAAA,IAAQ,8CAE9C,IC7FK08B,GAAoCj9B,EAAAA,EAAAA,IAC7C,cAAgDC,EAAAA,EAAuDuT,WAAAA,GAAA,SAAA9S,WAAA,KAiB3Fm5B,uBAAyB1Z,UAC7B1f,KAAKlC,MAAMu7B,eAAevvB,GACnB,CACHwvB,QAAQ,GAEf,CApBD,iBAAYyC,GACR,OAAO,IAAItB,EAAmBz6B,KAAKwL,SAASoK,YAChD,CAEQ6mB,qBAAAA,GAGJ,OAFe5C,EAAAA,EAAAA,GAA2B75B,KAAKwL,SAASye,cAAc6P,gBAAgBC,WAAWC,MAAM0C,2BAC5EnsB,KAAImqB,GAAWc,EAAAA,SAASC,YAAYf,KACjDnqB,KAAIosB,IACP,CACH7yB,MAAO6yB,EAAIJ,aACXz6B,KAAM66B,EAAIV,aAAe,GAAKj8B,KAAK+7B,cAAcrB,QAAQiC,EAAIV,cAAgBj8B,KAAK+7B,cAAcpB,MAAMgC,EAAIT,eAGtH,CASAz8B,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAAC26B,EAAAA,EAAiB,CAACC,MAAOt6B,KAAKwL,SAASoK,YAAYC,UAAU,sDAC3C0kB,MAAOv6B,KAAKy8B,wBACZpD,eAAgBr5B,KAAKo5B,uBACrBz5B,WAAWG,EAAAA,EAAAA,IAAQ,uDAE9C,IC9BK88B,GAAsCr9B,EAAAA,EAAAA,IAC/C,cAAkDC,EAAAA,EAAyDuT,WAAAA,GAAA,SAAA9S,WAAA,KAM/Fs7B,mBAAsBjR,GACvBA,EAAK2R,aAAe,GACZj8B,KAAK+7B,cAAcrB,QAAQpQ,EAAK2R,cAGxC3R,EAAK4R,WAAa,GACVl8B,KAAK+7B,cAAcpB,MAAMrQ,EAAK4R,YAGnB,IAAnB5R,EAAKuS,UACG78B,KAAK+7B,cAAclB,OAGR,KAAnBvQ,EAAKuS,WAAuC,KAAnBvS,EAAKuS,UACtB78B,KAAK+7B,cAAcjB,QAGvB96B,KAAK+7B,cAAcnB,KAAKtQ,EAAKuS,WACvC,KAaOzD,uBAA0BtvB,GACvB,IAAIkxB,SAAmCC,IAE1C,MAAM6B,EAAkBA,KACpB7B,EAAQ,CACJ3B,QAAQ,EACRyD,sBAAuB,OAE3B/8B,KAAKlC,MAAMu7B,eAAe,KAAK,EAG7B6B,EAAkBA,KACpBD,EAAQ,CACJ3B,QAAQ,IAEZt5B,KAAKlC,MAAMu7B,eAAevvB,EAAM,EAGjC/E,EAAAA,MAAMkP,kBAAkBnK,IACvBoxB,IACAl7B,KAAKlC,MAAMu7B,eAAevvB,IAE1B9J,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CACrCC,iBAAiB,EACjB7yB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,aAC3C/T,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,6DAA8D,CAACyU,KAAMtqB,KAAKu7B,mBAAmBC,EAAAA,SAASwB,YAAYlzB,MACtJ,SACA9J,KAAKwL,SAASoK,YAAYC,UAAU,kEAE1C6lB,QAAS,CACL,CACI55B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1C8lB,aAAc,OACdt0B,QAASqY,UACLod,IAEA98B,KAAKwL,SAASqd,UAAU+S,cAAc,0CAA2C,MAC1EC,EAAAA,EAAkCC,yBAGjD,CACIh6B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,OAC1C8lB,aAAc,OACdt0B,QAASqY,UACLwb,IAEAl7B,KAAKwL,SAASqd,UAAU+S,cAAc,0CAA2C,OAC1EC,EAAAA,EAAkCC,2BAM7D,GAIP,CA5FD,iBAAYC,GACR,OAAO,IAAItB,EAAmBz6B,KAAKwL,SAASoK,YAChD,CAsBQ6mB,qBAAAA,GAGJ,OAFe5C,EAAAA,EAAAA,GAA2B75B,KAAKwL,SAASye,cAAc6P,gBAAgBC,WAAWC,MAAMiD,6BAC5E1sB,KAAImqB,GAAWc,EAAAA,SAASC,YAAYf,KACjDnqB,KAAIosB,IACP,CACH7yB,MAAO6yB,EAAIJ,aACXz6B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,kDAAkD,CAACyU,KAAMtqB,KAAKu7B,mBAAmBoB,QAGvI,CA6DAl9B,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAAC26B,EAAAA,EAAiB,CAACC,MAAOt6B,KAAKwL,SAASoK,YAAYC,UAAU,uDAC3C0kB,MAAOv6B,KAAKy8B,wBACZjC,aAAcx6B,KAAKwL,SAASoK,YAAYC,UAAU,2BAClDwjB,eAAgBr5B,KAAKo5B,uBACrBz5B,WAAWG,EAAAA,EAAAA,IAAQ,wDAE9C,I,MCvHD,MAAMo9B,EAAYz/B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uG,iBCC5B,MAAMu/B,EAAwB1/B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,6EAElCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW0S,SAAS,ICLvCusB,EAAkD,kD,MCGxD,MAAMC,EAAoB5/B,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,+KAChCE,GAASA,EAAMI,MAAM6J,OAAOu1B,gBAMhCF,GACMt/B,GAASA,EAAMI,MAAM6J,OAAO0C,e,iBCRlC,MAAM8yB,GAA4B9/B,EAAAA,EAAAA,IAAOy5B,EAAAA,EAAPz5B,CAAqCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kD,MCAvE,MAAM4/B,GAAgC//B,EAAAA,EAAAA,IAAOy5B,EAAAA,EAAPz5B,CAAqCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uDACvEe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO01B,aAAa,I,iBC0ClD,IACaC,GADZn+B,EAAAA,EAAAA,IAAQuT,EAAT,cACmDqf,EAAAA,EAE/Cpf,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAST6/B,0BAA4B,KAEhC,IAAI39B,KAAK49B,qBACL,OAGJ59B,KAAKlC,MAAMk6B,cAAcC,QAEzB,IAAI4F,EAAmB79B,KAAK0mB,MAAMoX,eAAeC,iBAC9Ch5B,EAAAA,MAAMkP,kBAAkB4pB,KACvBA,EAAmBrC,EAAAA,SAASC,aAAY5B,EAAAA,EAAAA,GAA2B75B,KAAKwL,SAASye,cAAc6P,gBAAgBC,WAAWC,MAAM0C,2BAA2B,IAAIH,cAGnKv8B,KAAKlC,MAAMkgC,YAAY,CACnBC,gBAAiBj+B,KAAK0mB,MAAMoX,eAAeG,gBAC3CC,qBAAsB1C,EAAAA,SAASwB,YAAYh9B,KAAK0mB,MAAMoX,eAAeI,sBACrEH,iBAAkBvC,EAAAA,SAASwB,YAAYa,GACvCM,kBAAmB3C,EAAAA,SAASwB,YAAYh9B,KAAK0mB,MAAMoX,eAAeK,oBACpE,EACL,KAEOC,YAAc,KAElBp+B,KAAKuyB,SAAS,CACV8L,qBAAqB,IACtB,IAAMr+B,KAAK29B,6BAA4B,EAE7C,KA4BOW,qBAAwBx0B,IAC5B9J,KAAKuyB,SAAS,CACVuL,gBAAc54B,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACPlF,KAAK0mB,MAAMoX,gBAAc,IAC5BI,qBAAsBp0B,GAAgB,SAE3C,IAAM9J,KAAK49B,sBAAqB,EAGtC,KAEOW,qBAAwBz0B,IAC5B9J,KAAKuyB,SAAS,CACVuL,gBAAc54B,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACPlF,KAAK0mB,MAAMoX,gBAAc,IAC5BG,gBAAiBn0B,MAEtB,IAAM9J,KAAK49B,sBAAqB,EACtC,KAEOY,4BAA+B10B,IACnC9J,KAAKuyB,SAAS,CACVuL,gBAAc54B,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACPlF,KAAK0mB,MAAMoX,gBAAc,IAC5BC,iBAAkBj0B,GAAgB,QAExC,EACL,KAEO20B,6BAAgC30B,IACpC9J,KAAKuyB,SAAS,CACVuL,gBAAc54B,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACPlF,KAAK0mB,MAAMoX,gBAAc,IAC5BK,kBAAmBr0B,GAAgB,QAEzC,EACL,KASO40B,8BAAiC7J,IACrC,MAAM8J,EAAqB,OAAP9J,QAAO,IAAPA,OAAO,EAAPA,EAAS+J,cAAc,IAADh/B,OAAKw9B,IACpC,OAAXuB,QAAW,IAAXA,GAAAA,EAAaE,iBAAiB,SAAS,KACnC7+B,KAAKwL,SAASszB,gBAAgBC,uBAAuB,GACvD,EAhHF/+B,KAAK0mB,MAAQ,CACToX,eAAgB,CAAC,EACjBO,qBAAqB,EACrBW,uBAAwB,KACxBC,uBAAwB,KAEhC,CA+BQrB,kBAAAA,GACJ,IAAI59B,KAAK0mB,MAAM2X,oBACX,OAAO,EAGX,MAAMa,EAAuG,CACzGF,uBAAwB,KACxBC,uBAAwB,MAgB5B,OAbGl6B,EAAAA,MAAMkP,kBAAkBjU,KAAK0mB,MAAMoX,eAAeG,mBACjDiB,EAAcF,uBAAyBh/B,KAAKwL,SAASoK,YAAYC,UAAU,+CAG5E9Q,EAAAA,MAAMkP,kBAAkBjU,KAAK0mB,MAAMoX,eAAeI,wBACjDgB,EAAcD,uBAAyBj/B,KAAKwL,SAASoK,YAAYC,UAAU,+CAG/E7V,KAAKuyB,UAAQrtB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACRlF,KAAK0mB,OACLwY,KAGC/0B,QAAQ+0B,EAAcF,wBAA0BE,EAAcD,uBAC1E,CAwCQE,kBAAAA,GACJ,MAAMC,EAA4Bp/B,KAAKwL,SAASoK,YAAYC,UAAU,kDACtE,OAAO7V,KAAKwL,SAASoK,YAAYC,UAAU,yCAA0C,CACjFwpB,wBAAwB,aAADz/B,OAAew9B,EAA+C,MAAAx9B,OAAKw/B,EAAyB,SAE3H,CASA3/B,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACwwB,EAAwB,CAAAj5B,SAAA,EACrBL,EAAAA,EAAAA,KAAC69B,EAAyB,CAAAx9B,SACrBC,KAAKwL,SAASoK,YAAYC,UAAU,+BAEzCnW,EAAAA,EAAAA,KAAC89B,EAA6B,CAAAz9B,SACzBC,KAAKwL,SAASoK,YAAYC,UAAU,oCAEzCnW,EAAAA,EAAAA,KAACmN,EAAAA,EAAU,KACXrE,EAAAA,EAAAA,MAAC0wB,EAAiB,CAAAn5B,SAAA,EACdL,EAAAA,EAAAA,KAACq7B,EAA0B,CACvB1B,eAAgBr5B,KAAKs+B,qBACrBl0B,aAAcpK,KAAK0mB,MAAMuY,0BAE7Bv/B,EAAAA,EAAAA,KAACy9B,EAAqB,KACtBz9B,EAAAA,EAAAA,KAACy5B,EAA0B,CACvBE,eAAgBr5B,KAAKu+B,qBACrBn0B,aAAcpK,KAAK0mB,MAAMsY,6BAIjCx2B,EAAAA,EAAAA,MAAC0wB,EAAiB,CAAAn5B,SAAA,EACdL,EAAAA,EAAAA,KAAC88B,EAAiC,CAACnD,eAAgBr5B,KAAKw+B,+BACxD9+B,EAAAA,EAAAA,KAACy9B,EAAqB,KACtBz9B,EAAAA,EAAAA,KAACk9B,EAAmC,CAACvD,eAAgBr5B,KAAKy+B,mCAG9Dj2B,EAAAA,EAAAA,MAAC00B,EAAS,CAAAn9B,SAAA,EACNL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAO,UAAUK,QAASrH,KAAKo+B,YAAa38B,WAAW,EAAM1B,SAChEC,KAAKwL,SAASoK,YAAYC,UAAU,6BAGzCnW,EAAAA,EAAAA,KAAC29B,EAAiB,CAACiC,wBAAyB,CAACC,OAAQv/B,KAAKm/B,sBAAuB7xB,IAAKtN,KAAK0+B,gCACzF1+B,KAAKlC,MAAM0hC,kBACT9/B,EAAAA,EAAAA,KAAC29B,EAAiB,CAAC19B,WAAWG,EAAAA,EAAAA,IAAQ,oBAAoBC,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,4BAA6B,CAAC4pB,YAAaz/B,KAAKlC,MAAM0hC,yBAM1K,KACH1sB,C,gGC9MM,MAAM4sB,EAAuBjiC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,6E,MCAvC,MAAM+hC,EAAkBliC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iGAC5BE,GAASA,EAAMI,MAAM6J,OAAOkB,SACvBnL,GAASA,EAAMoL,QAAU,UAAY,W,MCFhD,MAAM02B,EAAmBniC,EAAAA,GAAO68B,MAAK38B,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mC,iDC+B5C,IACay8B,GADZ96B,EAAAA,EAAAA,IAAQuT,EAAT,cACuCqf,EAAAA,EACnCpf,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAMT+hC,UAAYngB,UAChB,IAAI5V,EAAwB,KACE,MAA3Bg2B,EAAU51B,OAAOJ,QAChBA,EAAQi2B,SAASD,EAAU51B,OAAOJ,QAGtC,MAAMk2B,QAAwBhgC,KAAKlC,MAAMu7B,eAAevvB,GACrDk2B,EAAgB1G,OACZv0B,EAAAA,MAAMk7B,YAAYD,EAAgBjD,uBACjC/8B,KAAKuyB,SAAS,CACV2N,eAAgBlgC,KAAK0mB,MAAMwZ,iBAG/BlgC,KAAKuyB,SAAS,CACV2N,eAAgBF,EAAgBjD,wBAKxC/8B,KAAKuyB,SAAS,CACV2N,eAAgBp2B,GAExB,EACH,KAEOq2B,oBAAsB,KAEtBzgC,EAAAA,EAAAA,KAACigC,EAAe,CAACz2B,QAASiB,QAAQnK,KAAKlC,MAAMsM,cAAcrK,SACtDC,KAAKlC,MAAMsM,eAjCpBpK,KAAK0mB,MAAQ,CACTwZ,eAAgB,KAExB,CAmCAzgC,MAAAA,GAAU,IAAD2gC,EAEL,MAAM7F,EAAwB,IAAIv6B,KAAKlC,MAAMy8B,OAS7C,OAPGv6B,KAAKlC,MAAM08B,cACVD,EAAM8F,OAAO,EAAG,EAAG,CACfv2B,MAAO,EACPhI,KAAM9B,KAAKlC,MAAM08B,gBAKrBhyB,EAAAA,EAAAA,MAACk3B,EAAoB,CAAA3/B,SAAA,EACjBL,EAAAA,EAAAA,KAACkgC,EAAgB,CAAA7/B,SACZC,KAAKlC,MAAMw8B,SAEhB56B,EAAAA,EAAAA,KAACyL,EAAAA,EAAM,CAACrB,MAAgC,QAA3Bs2B,EAAEpgC,KAAK0mB,MAAMwZ,sBAAc,IAAAE,EAAAA,EAAI,GACpCp2B,SAAUhK,KAAK6/B,UACf50B,SAAUd,QAAQnK,KAAKlC,MAAMsM,cAC7BzK,UAAWK,KAAKlC,MAAM6B,UACtB+B,MAAM,OAAM3B,SAEZw6B,EAAMhqB,KAAI+vB,IAAQ5gC,EAAAA,EAAAA,KAAA,UAAQoK,MAAOw2B,EAAKx2B,MAAM/J,SAEvCugC,EAAKx+B,MADqBw+B,EAAKx2B,WAK3C9J,KAAKmgC,wBAGlB,KACHrtB,C,uFCxGM,MAAMytB,EAAwB9iC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,6WAOlCE,GAASA,EAAM0iC,WAAa,QAAU,UAEtC7hC,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAC/BN,GAASA,EAAM0iC,WAAa,QAAU,WAC7C/8B,EAAAA,EAAQC,IAAI+8B,WAAW78B,Q,6GCT9B,MAAM88B,EAAuBjjC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4QAE/Be,IAAA,IAAC,KAACgiC,GAAKhiC,EAAA,OAAKgiC,EAAO,OAAS,MAAM,IAC3Cr+B,IAAA,IAAC,aAAC8tB,EAAY,MAAElyB,GAAMoE,EAAA,OAAK8tB,GAAevvB,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,uCAE3C,EAAE,I,4BCUH,MAAMgjC,EAAqBnjC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,0JAE9Be,IAAA,IAAC,eAAC0c,GAAe1c,EAAA,OAAK0c,EAAiB,UAAW,QAAQ,IAC3D/Y,IAAA,IAAC,eAAC+Y,GAAe/Y,EAAA,OAAK+Y,EAAiB,UAAW,SAAS,IACzDvU,IAAA,IAAC,aAACspB,GAAatpB,EAAA,OAAKspB,EAAe,QAAS,MAAM,IAGzCvlB,IAAA,IAAC,MAAC3M,EAAK,aAAEkyB,GAAavlB,EAAA,MAAK,QAtB7Bg2B,EAAC3iC,EAAmBkyB,KACtC,OAAQA,GACJ,KAAK0Q,EAAAA,EAAiBC,SAClB,OAAO7iC,EAAMa,OAAOC,OAAOquB,UAAU2T,qBAAqB7hC,WAC9D,KAAK2hC,EAAAA,EAAiBG,SAClB,OAAO/iC,EAAMa,OAAOC,OAAOquB,UAAU6T,qBAAqB/hC,WAC9D,KAAK2hC,EAAAA,EAAiBK,gBAClB,OAAOjjC,EAAMa,OAAOC,OAAOquB,UAAU+T,sBAAsBjiC,WAC/D,KAAK2hC,EAAAA,EAAiBO,gBAClB,OAAOnjC,EAAMa,OAAOC,OAAOquB,UAAUiU,sBAAsBniC,WAC/D,QACI,MAAO,GACf,EAUyD0hC,CAAgB3iC,EAAOkyB,GAAgB,IAAI,I,MCzBjG,MAAMmR,EAAuB9jC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,6PAIlBE,GAAS,IAAMA,EAAMI,MAAMa,OAAOC,OAAOwiC,uBAAuBriC,WAAa,M,MCJlG,MAAMsiC,EAA4BhkC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,0L,eCA5C,MAAM8jC,GAAmBljC,EAAAA,EAAAA,GAAU,oBCA7BmjC,GAAqBnjC,EAAAA,EAAAA,GAAU,sB,MCArC,MAAMojC,EAAyBnkC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mC,mCCqBzC,MAAMuyB,UAA0B3wB,EAAAA,EACnCC,MAAAA,GACI,IAAIoiC,EAAc7hC,KAAKlC,MAAM+jC,aAAe7hC,KAAKwL,SAASoK,YAAYC,UAAU,QAC5E5C,EAAqBjT,KAAKwL,SAAS2P,MAAMC,SAASpb,KAAKlC,MAAMiX,UAEjE,OACIvM,EAAAA,EAAAA,MAACk4B,EAAoB,CAAC/gC,UAAW,2BAA6BK,KAAKlC,MAAM6B,UAAWywB,aAAcpwB,KAAKlC,MAAMsyB,aAAcuQ,KAAM3gC,KAAKlC,MAAM6iC,KAAM73B,MAAO9I,KAAKlC,MAAMgL,MAAM/I,SAAA,EACtKyI,EAAAA,EAAAA,MAAC+3B,EAAAA,EAAqB,CAAC5gC,UAAU,8DAA6DI,SAAA,EAK1FL,EAAAA,EAAAA,KAACoiC,EAAAA,EAAkB,CACf7uB,SAAUA,KAEdvT,EAAAA,EAAAA,KAACkhC,EAAkB,CAACjhC,UAAU,qDAAqD0b,eAAgBrb,KAAKwL,SAAStN,MAAM6jC,qBAAsB3R,aAAcpwB,KAAKlC,MAAMsyB,mBAE1K1wB,EAAAA,EAAAA,KAAC6hC,EAAoB,CAAC5hC,UAAU,0EAEhC6I,EAAAA,EAAAA,MAACi5B,EAAyB,CAAC9hC,UAAU,gCAA+BI,SAAA,EAChEL,EAAAA,EAAAA,KAACgiC,EAAgB,CAAC/hC,UAAU,sBAAqBI,SAAEkT,EAASxK,SAC5D/I,EAAAA,EAAAA,KAACiiC,EAAkB,CAAChiC,UAAU,kCAAiCI,UAC3DL,EAAAA,EAAAA,KAACsiC,EAAAA,EAAoB,CAACjtB,SAAU/U,KAAKlC,MAAMiX,cAE/CrV,EAAAA,EAAAA,KAACkiC,EAAsB,CAACjiC,UAAU,6BAA4BI,UAC1DL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAO,OAAOG,YAAY,IAAIE,QAASrH,KAAKlC,MAAMuyB,eAAetwB,SAAE8hC,WAM/F,E,wECpDG,MAAMI,GAAiBzjC,EAAAA,EAAAA,GAAU,kBCA3B0jC,GAAsB1jC,EAAAA,EAAAA,GAAU,uB,0DCa7C,MAAMqU,GAAqDtT,EAAAA,EAAAA,KAAUzB,IACjE,MAAM0N,GAAWqD,EAAAA,EAAAA,KACXszB,EAAerkC,EAAM+W,SAASC,eAAehX,EAAMiX,UACzD,OAAIotB,GAMAziC,EAAAA,EAAAA,KAACuiC,EAAc,CAACtiC,UAAW7B,EAAM6B,UAAUI,UACvCL,EAAAA,EAAAA,KAACwiC,EAAmB,CAACviC,WAAWG,EAAAA,EAAAA,IAAQ,0BAA0BC,SAC7DyL,EAASwJ,SAASC,YAAYktB,OAPhC,IASU,IAIZH,GAAuB3qB,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,Y,wDChC1D,MAAMuvB,EAAiB,gBACjBC,EAAoB,mB,iGCC1B,MAAMC,GAAiB9jC,EAAAA,EAAAA,GAAU,kB,iDCAjC,MCAM+jC,EDA4B9kC,EAAAA,GAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kFAErCE,GAASA,EAAMI,MAAM6J,OAAO0C,e,iBEQpC,MAAM+3B,UAAgChjC,EAAAA,EAA6CuT,WAAAA,GAAA,SAAA9S,WAAA,KAChFwiC,uBAAyB,IAC3B19B,EAAAA,MAAMC,SAAShF,KAAKlC,MAAM4kC,kBACrBl6B,EAAAA,EAAAA,MAAC+5B,EAAkB,CAAC5iC,UAAW,2BAA2BI,SAAA,CAAC,IAAEC,KAAKlC,MAAM4kC,gBAAgB,OAE1F,IACR,CAEDjjC,MAAAA,GACE,OACE+I,EAAAA,EAAAA,MAAC85B,EAAc,CAAC3iC,WAAWG,EAAAA,EAAAA,IAAQ,uBAAuBC,SAAA,EACxDL,EAAAA,EAAAA,KAAA,QAAMC,UAAW,uBAAuBI,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKlC,MAAM2K,SACxFzI,KAAKyiC,2BAGZ,ECzBK,MAAME,EAAqBllC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sECA/BglC,GAAwBpkC,EAAAA,EAAAA,GAAU,yB,MCAxC,MAAMqkC,EAAoBplC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sI,aCApC,MAAMklC,GAAiBtkC,EAAAA,EAAAA,GAAU,kB,0BCSxC,MAAMqU,GAAiEtT,EAAAA,EAAAA,KAASzB,IAE9E,IAAIilC,GAAaC,EAAAA,EAAAA,IAAwBllC,EAAMmlC,WAAWC,mBAAmBljB,cAC7E,MAAMmjB,EAAWrlC,EAAMslC,cACvB,IAAIL,EACF,OACIrjC,EAAAA,EAAAA,KAAAo5B,EAAAA,SAAA,CAAA/4B,SAAGojC,IAIT,IAAIE,GAAQL,EAAAA,EAAAA,IAAwBG,GAAUnjB,cAAcsjB,QAAQP,GACpE,GAAGM,EAAQ,EACT,OACI3jC,EAAAA,EAAAA,KAAAo5B,EAAAA,SAAA,CAAA/4B,SAAGojC,IAIT,MAAMI,EAAsBJ,EAAS39B,UAAU,EAAG69B,GAClD,IAAIG,EAAgBL,EAAS39B,UAAU69B,EAAOA,EAAQN,EAAW7iC,QAEjE,MAAMujC,EAA4BD,EAActjC,QAAS8iC,EAAAA,EAAAA,IAAwBQ,GAAetjC,OAChGsjC,EAAgBL,EAAS39B,UAAU69B,EAAOA,EAAQN,EAAW7iC,OAASujC,GAEtE,MAAMC,EAAqBP,EAAS39B,UAAU69B,EAAQN,EAAW7iC,OAASujC,GAE1E,OACIj7B,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,CACGwjC,GAAoB7jC,EAAAA,EAAAA,KAACojC,EAAc,CAACnjC,UAAW,kBAAkBI,SAAEyjC,IAAgCE,IACnG,IAIIC,GAAmCtsB,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,e,MCzCtE,MAAM+wB,EAAuBnmC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,+D,MCAvC,MAAMimC,EAAqBpmC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2D,eCe5C,MAAMiV,GAAwDtT,EAAAA,EAAAA,KAAUzB,IACpE,MAAM0N,GAAWqD,EAAAA,EAAAA,KAQjB,OACIrG,EAAAA,EAAAA,MAACq6B,EAAiB,CAACljC,UAAW,sBAAuB0H,QARjCqY,gBACd5hB,EAAMmlC,WAAWa,2BAChBt4B,EAASu4B,UAAUC,kBACpBlmC,EAAMmmC,SAASC,wBACfpmC,EAAMqmC,iBAAiBC,eAAe,EAIkCrkC,SAAA,EAC1EL,EAAAA,EAAAA,KAACmkC,EAAkB,CAAA9jC,UACfL,EAAAA,EAAAA,KAACoiC,EAAAA,EAAkB,CAAC7uB,SAAUnV,EAAMqmC,iBAAiBlxB,SAAUoxB,gBAAgB,OAEnF3kC,EAAAA,EAAAA,KAACkkC,EAAoB,CAAA7jC,UACjBL,EAAAA,EAAAA,KAACikC,EAAgC,CAACP,cAAetlC,EAAMqmC,iBAAiBriC,WAE5D,IAIfwiC,GAA0BjtB,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,WAAY,eCzBnE0xB,GAA0BhlC,EAAAA,EAAAA,IACnC,cAAsCC,EAAAA,EAE1BglC,WAAAA,CAAYC,GAChB,OACI/kC,EAAAA,EAAAA,KAAC4kC,EAAuB,CAA8BH,iBAAkBM,GAA1CA,EAAkB3iC,KAExD,CAEQ8Z,YAAAA,GACJ,OACIlc,EAAAA,EAAAA,KAACijC,EAAkB,CAAChjC,WAAWG,EAAAA,EAAAA,IAAQ,2BAA2BC,SAC5DC,KAAKlC,MAAMy8B,MAAMhqB,KAAIk0B,GAAqBzkC,KAAKwkC,YAAYC,MAGzE,CAEAhlC,MAAAA,GACI,OAAgC,IAA5BO,KAAKlC,MAAMy8B,MAAMr6B,OACV,MAIPsI,EAAAA,EAAAA,MAAA,QAAM7I,WAAWG,EAAAA,EAAAA,IAAQ,sCAAsCC,SAAA,EAC3DL,EAAAA,EAAAA,KAAC8iC,EAAuB,CAAC/5B,MAAO,oBAC/BzI,KAAK4b,iBAGlB,I,iBCvCD,MAAM8oB,EAAejnC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uEACvBE,GAASA,EAAM6mC,cAAgB,QAAU,SCiBlD9xB,GAAoDtT,EAAAA,EAAAA,KAAUzB,IAAW,IAAD8mC,EAAAC,EAAAC,EAAAC,EAC1E,MAAMv5B,GAAWqD,EAAAA,EAAAA,KAOXm2B,EAAelnC,EAAMmnC,iBAAmBnnC,EAAMmlC,WAAWiC,aAAa/pB,MAAMjb,OA+ClF,OACIsI,EAAAA,EAAAA,MAAA,OAAK7I,UAAW,oBAAoBI,SAAA,EAChCL,EAAAA,EAAAA,KAAC8iC,EAAuB,CAAC/5B,MAAO,uBAAwBi6B,gBAA8C,QAA/BkC,EAAE9mC,EAAMmlC,WAAWiC,oBAAY,IAAAN,GAAO,QAAPC,EAA7BD,EAA+BzpB,aAAK,IAAA0pB,OAAP,EAA7BA,EAAsC3kC,UAChF,QAA7B4kC,EAAAhnC,EAAMmlC,WAAWiC,oBAAY,IAAAJ,GAAO,QAAPC,EAA7BD,EAA+B3pB,aAAK,IAAA4pB,OAAP,EAA7BA,EAAsC7kC,QAAS,EAzB/BilC,MACtB,MAAMC,EAAgB/uB,KAAKuK,IAAI9iB,EAAMmnC,iBAAkBnnC,EAAMmlC,WAAWiC,aAAa/pB,MAAMjb,QAC3F,OACIsI,EAAAA,EAAAA,MAACm6B,EAAkB,CAAChjC,WAAWG,EAAAA,EAAAA,IAAQ,2BAA2BC,SAAA,CAC7DjC,EAAMmlC,WAAWiC,aAAa/pB,MAAMwF,MAAM,EAAGykB,GAAe70B,KAAI80B,GAnCxDA,KAEb3lC,EAAAA,EAAAA,KAAC4kC,EAAuB,CAAyBH,iBAAkBkB,GAArCA,EAAcvqB,KAiC0C0pB,CAAYa,KA1BlG75B,EAASqI,OAAOmI,GAAGC,KACZ,MAIPvc,EAAAA,EAAAA,KAACglC,EAAY,CAACC,cAAeK,EAAcrlC,WAAWG,EAAAA,EAAAA,IAAQ,2BAA2BC,UACrFL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CACH/G,WAAWG,EAAAA,EAAAA,IAAQ,uBACnBsD,QAAM,EACN3B,WAAS,EACTuF,OAAO,cACPG,YAAY,KACZjG,YAAU,EACVX,UAAWykC,EACX39B,QAASvJ,EAAMwnC,WAAWvlC,SAEzByL,EAASoK,YAAYC,UAAU,cAYnB,EAoBjBsvB,IAdJ38B,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,EAAAA,KAACkjC,EAAqB,CAACjjC,WAAWG,EAAAA,EAAAA,IAAQ,yBAAyBC,SAC9DyL,EAASoK,YAAYC,UAAU,wBAGpCnW,EAAAA,EAAAA,KAAC6kC,EAAuB,CAAChK,MAAOz8B,EAAMmlC,WAAWiC,aAAaK,sBAYhE,IAIDC,GAAsBnuB,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,e,MCpFzD,MCAM4yB,EDA6BhoC,EAAAA,GAAOioC,GAAE/nC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gGAIzBE,GAASA,EAAMI,MAAM6J,OAAO8J,aEJzC8zB,GAAqBnnC,EAAAA,EAAAA,GAAU,sBCA/BonC,GAAoBpnC,EAAAA,EAAAA,GAAU,qBCA9BqnC,GAA4BrnC,EAAAA,EAAAA,GAAU,6BCAtCsnC,GAAuBtnC,EAAAA,EAAAA,GAAU,wB,0BCiB9C,MAAMqU,GAA0DtT,EAAAA,EAAAA,KAAUzB,IACtE,MAAM0N,GAAWqD,EAAAA,EAAAA,KAuCjB,OACInP,EAAAA,EAAAA,KAAC+lC,EAAmB,CAChB9lC,UAAW,8BAAgC7B,EAAMqmC,iBAAiBriC,KAElEuF,QA1CgBqY,gBACd5hB,EAAMmlC,WAAWa,2BAChBt4B,EAASu4B,UAAUC,kBACpBlmC,EAAMmmC,SAASC,wBACfpmC,EAAMqmC,iBAAiBC,gBAC7B54B,EAASqd,UAAUkd,uBAAuBC,EAAAA,GAA+BC,OAAQnoC,EAAMqmC,iBAAiB16B,KAAM3L,EAAMqmC,iBAAiBriC,KAAK,EAqC7G/B,SAlCHmmC,KAC1B,OAAOA,GACH,KAAKC,EAAAA,EAAiBC,MAClB,OACI1mC,EAAAA,EAAAA,KAACimC,EAAkB,CAAChmC,UAAW,sBAAwBumC,EAAUnmC,UAC7DL,EAAAA,EAAAA,KAACikC,EAAgC,CAACP,cAAetlC,EAAMqmC,iBAAiBriC,SAGpF,KAAKqkC,EAAAA,EAAiBE,KAClB,OACI3mC,EAAAA,EAAAA,KAACkmC,EAAiB,CAACjmC,UAAW,sBAAwBumC,EAAUnmC,UAC5DL,EAAAA,EAAAA,KAACikC,EAAgC,CAACP,cAAetlC,EAAMqmC,iBAAiBriC,SAGpF,KAAKqkC,EAAAA,EAAiBG,eAClB,OACI5mC,EAAAA,EAAAA,KAACmmC,EAAyB,CAAClmC,UAAW,sBAAwBumC,EAAUnmC,UACpEL,EAAAA,EAAAA,KAACikC,EAAgC,CAACP,cAAetlC,EAAMqmC,iBAAiBriC,SAIpF,QACI,OACIpC,EAAAA,EAAAA,KAAComC,EAAoB,CAACnmC,UAAW,sBAAwBumC,EAAUnmC,UAC/DL,EAAAA,EAAAA,KAACikC,EAAgC,CAACP,cAAetlC,EAAMqmC,iBAAiBriC,SAGxF,EAQKykC,CAAqBzoC,EAAMqmC,iBAAiBqC,gBAFxC1oC,EAAMqmC,iBAAiBriC,KAGV,IAIjB2kC,GAA4BpvB,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,WAAY,e,MCnE3E,MCAM6zB,EDA4BjpC,EAAAA,GAAOkpC,GAAEhpC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2FAGnBE,GAASA,EAAMI,MAAM6J,OAAO6+B,iBES9CC,GAA0BtnC,EAAAA,EAAAA,IACrC,cAAsCC,EAAAA,EAE5BsnC,wBAAAA,CAAyBrC,GAC/B,OACE/kC,EAAAA,EAAAA,KAAC+mC,EAAyB,CAA8BtC,iBAAkBM,GAA1CA,EAAkB3iC,KAEtD,CAEQilC,0BAAAA,GACN,OAAO/mC,KAAKlC,MAAMy8B,MAAMhqB,KAAIk0B,GAAqBzkC,KAAK8mC,yBAAyBrC,IAEnF,CAEEhlC,MAAAA,GACE,OAA+B,IAA5BO,KAAKlC,MAAMy8B,MAAMr6B,OACX,MAIPsI,EAAAA,EAAAA,MAAA,QAAM7I,UAAWK,KAAKlC,MAAM6B,UAAUI,SAAA,EACpCL,EAAAA,EAAAA,KAAC8iC,EAAuB,CAAC/5B,MAAOzI,KAAKlC,MAAM2K,SAC3C/I,EAAAA,EAAAA,KAACgnC,EAAkB,CAAC/mC,UAAW,8BAA8BI,SAC1DC,KAAK+mC,iCAId,ICvCSC,GAAuBxoC,EAAAA,EAAAA,GAAU,wBCAjCyoC,IAA8BzoC,EAAAA,EAAAA,GAAU,+B,gBCA9C,MAAM0oC,IAAgD1oC,EAAAA,EAAAA,GAAU,iDCA1D2oC,IAA2C3oC,EAAAA,EAAAA,GAAU,4CCArD4oC,IAAiD5oC,EAAAA,EAAAA,GAAU,kDCA3D6oC,IAAiD7oC,EAAAA,EAAAA,GAAU,kDCC3D8oC,IAAqD9oC,EAAAA,EAAAA,GAAU,sDCU/D+oC,IAAuGhoC,EAAAA,EAAAA,KAAUzB,IAC1H,MAAM0N,GAAWqD,EAAAA,EAAAA,KAEjB,OAAQrG,EAAAA,EAAAA,MAAC2+B,GAAwC,CAC7CK,YAAa1pC,EAAM0pC,YACnBngC,QAASA,KAAOvJ,EAAM2pC,mCAAmCrD,eAAe,EAAErkC,SAAA,EAE1EL,EAAAA,EAAAA,KAAC0nC,GAA8C,CAC3Cn0B,SAAUnV,EAAM2pC,mCAAmCx0B,SACnDy0B,OAAO,EACPC,QAASA,OACTC,UAAWA,OACXC,wBAAyBA,OACzBC,iBAAiB,EACjBC,YAAY,EACZt7B,SAAS,EACTu7B,oBAAqBx8B,EAASy8B,qBAC9BC,MAAM,KAEVxoC,EAAAA,EAAAA,KAAC2nC,GAA8C,CAAAtnC,UAC3CL,EAAAA,EAAAA,KAAC4nC,GAAkD,CAAAvnC,SAC9CjC,EAAM2pC,mCAAmC3lC,WAIX,ICnClCqmC,IAAiD3pC,EAAAA,EAAAA,GAAU,kDCA3D4pC,IAA2C5pC,EAAAA,EAAAA,GAAU,4CCArD6pC,IAAkD7pC,EAAAA,EAAAA,GAAU,mDCW5D8pC,IAAmG/oC,EAAAA,EAAAA,KAAUzB,IACtH,MAAM0N,GAAWqD,EAAAA,EAAAA,KACjB,IAAI05B,EAAsB/8B,EAAStN,MAAMuN,aAAaC,MAAM88B,oBAE5D,OAAOhgC,EAAAA,EAAAA,MAAC4/B,GAAwC,CAACzoC,WAAWG,EAAAA,EAAAA,IAAQ,gDAAgDC,SAAA,EAChHyI,EAAAA,EAAAA,MAAC2/B,GAA8C,CAAApoC,SAAA,EAC3CL,EAAAA,EAAAA,KAAC6oC,EAAmB,CAAC9hC,KAAM,IAAKqC,MAAO,CAAC2/B,YAAa,OAAQxkC,MAAOuH,EAAStN,MAAMuN,aAAa1D,OAAO0C,iBACvG/K,EAAAA,EAAAA,KAACwnC,GAA6C,CAAAnnC,SACzCyL,EAASoK,YAAYC,UAAU,2CAGxCnW,EAAAA,EAAAA,KAAC2oC,GAA+C,CAAAtoC,SAExCjC,EAAMy8B,MAAMhqB,KAAIk3B,IACZ/nC,EAAAA,EAAAA,KAAC6nC,GAA8C,CAE3CC,YAAa1pC,EAAMy8B,MAAMr6B,OACzBunC,mCAAoCA,GAF/BA,EAAmC3sB,WAMjB,ICXzCjI,IAAsDtT,EAAAA,EAAAA,KAAUzB,IAClE,MAAM0N,GAAWqD,EAAAA,EAAAA,MACV65B,EAAaC,IAAkBj7B,EAAAA,EAAAA,UATlB,IAoBpB,IATAC,EAAAA,EAAAA,YAAU,KACN,MAAMi7B,GAAIn5B,EAAAA,GAAAA,KAAS,IAAM3R,EAAMmlC,WAAWC,oBAAmB,KACzDyF,EAbY,GAamB,IAGnC,MAAO,IAAMC,GAAG,GACjB,CAAC9qC,EAAMmlC,WAAWC,qBAGhBplC,EAAMmlC,WAAW4F,kBAClB,OAAO,KAGX,MAAMC,EAAcA,KAChBt9B,EAASqd,UAAUkd,uBAAuBC,EAAAA,GAA+BC,OAAQ,QAAS8C,EAAAA,GAA4BC,UACtH,MAAMC,EAAY5yB,KAAKuK,IAAI8nB,EA1BX,GA0B0C5qC,EAAMmlC,WAAWiC,aAAa/pB,MAAMjb,QAC9FyoC,EAAeM,EAAU,EAiCvBC,EAAkB19B,EAASqI,OAAOkZ,OAAOwJ,WAAa/qB,EAASqI,OAAOmI,GAAGmtB,MAE/E,OACIzpC,EAAAA,EAAAA,KAACsnC,EAAoB,CAACkC,gBAAiBA,GAAmB19B,EAASrN,WAAWirC,SAAU97B,IAAKxP,EAAMmlC,WAAWoG,yBAAyBtpC,UACnIL,EAAAA,EAAAA,KAACunC,GAA2B,CAAAlnC,SAxB5BjC,EAAMmlC,WAAWqG,oBAEb9gC,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,EAAAA,KAAC8lC,EAAmB,CAACP,iBAAkByD,EAAapD,WAAYwD,IAC/Dt9B,EAAS+9B,UAAUtuB,UAAY,MAAOvb,EAAAA,EAAAA,KAACmnC,EAAuB,CAACp+B,MAAO,uBAAwB9I,UAAW,qCAAsC46B,MAAOz8B,EAAMmlC,WAAWiC,aAAasE,0BAKzLhhC,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,CAjBJyL,EAASi+B,YAAYC,mBACbhqC,EAAAA,EAAAA,KAAC4oC,GAA8C,CAAC/N,MAAOz8B,EAAMmlC,WAAWiC,aAAayE,wCAG1F,MAeKjqC,EAAAA,EAAAA,KAAC6kC,EAAuB,CAAChK,MAAOz8B,EAAMmlC,WAAWiC,aAAaK,iBAC7D/5B,EAAS+9B,UAAUtuB,UAAY,MAAOvb,EAAAA,EAAAA,KAACmnC,EAAuB,CAACp+B,MAAO,oBAAqB9I,UAAW,iCAAkC46B,MAAOz8B,EAAMmlC,WAAWiC,aAAasE,4BAenK,IAKlBI,IAAwBvyB,EAAAA,EAAAA,GAAaxE,GAAe,CAAC,eCnFrDg3B,IAAqBrrC,EAAAA,EAAAA,GAAU,sBCJ/BsrC,IAAuBtrC,EAAAA,EAAAA,GAAU,wBCAjCurC,IAAqBvrC,EAAAA,EAAAA,GAAU,sBCUtCqU,IAAgDtT,EAAAA,EAAAA,KAAUzB,IAC9D,MAAM0N,GAAWqD,EAAAA,EAAAA,KACXm7B,GAAc76B,EAAAA,EAAAA,QAAY,OAGhCxB,EAAAA,EAAAA,YAAU,IACD,KACDq8B,EAAYz7B,SACd07B,aAAaD,EAAYz7B,QAC3B,GAED,IAEH,MAuBM27B,EAAkB1+B,EAASqI,OAAOC,SAnBNkT,IAChClpB,EAAMmlC,WAAWziB,OAAOwG,EAAM9c,OAAOJ,OAEjCkgC,EAAYz7B,SACd07B,aAAaD,EAAYz7B,SAG3By7B,EAAYz7B,QAAU47B,YAAW,KAEU,IAADvF,GADxCoF,EAAYz7B,QAAU,KAClBzQ,EAAMmlC,WAAWC,qBACoB,QAAvC0B,EAAA9mC,EAAMmlC,WAAWmH,eAAe77B,eAAO,IAAAq2B,GAAvCA,EAAyCyF,OAC3C,GAzB2B,IA0BH,EAhBFrjB,IACxBlpB,EAAMmlC,WAAWziB,OAAOwG,EAAM9c,OAAOJ,MAAM,EAwB7C,OACEpK,EAAAA,EAAAA,KAACqqC,GAAkB,CACjBz8B,IAAKxP,EAAMmlC,WAAWmH,eACtBzqC,WAAWG,EAAAA,EAAAA,IAAQ,wBACnB2J,KAAM,OACNK,MAAOhM,EAAMmlC,WAAWC,kBACxBoH,aAAc,MACd5gC,YAAa8B,EAASoK,YAAYC,UAAU,oBAC5C7L,SAAUkgC,EACV7iC,QAfoBqY,gBAChB5hB,EAAMmlC,WAAWsH,kBAAkB,GAcX,IAIrBC,IAAkBnzB,EAAAA,EAAAA,GAAaxE,GAAe,CAAC,eC7D/C43B,IAAgBjsC,EAAAA,EAAAA,GAAU,iBCYjCqU,IAA2DtT,EAAAA,EAAAA,KAAUzB,IACvE,MAAM0N,GAAWqD,EAAAA,EAAAA,KAMX67B,GAAwB5sC,EAAMmlC,WAAWC,mBAAqB,IAAIhjC,OAAS,EAE3EyqC,EAAan/B,EAAStN,MAAMuN,aAAaC,MAAMk/B,WACrD,OACIpiC,EAAAA,EAAAA,MAACshC,GAAoB,CAACnqC,WAAWG,EAAAA,EAAAA,IAAQ,gBAAgBC,SAAA,EACrDL,EAAAA,EAAAA,KAAC+qC,GAAa,CAAA1qC,UACVL,EAAAA,EAAAA,KAACirC,EAAU,CAAClkC,KAAM,OAEtB/G,EAAAA,EAAAA,KAACmqC,GAAkB,CAAClqC,WAAWG,EAAAA,EAAAA,IAAQ,4BAA6BoJ,QAASwhC,EAAsBrjC,QAbzEwjC,KAAO,IAADjG,EAAAC,EACpC/mC,EAAMmlC,WAAWziB,OAAO,IACO,QAA/BokB,EAAA9mC,EAAMmlC,WAAWmH,sBAAc,IAAAxF,GAAS,QAATC,EAA/BD,EAAiCr2B,eAAO,IAAAs2B,GAAxCA,EAA0CiG,OAAO,KAY7CprC,EAAAA,EAAAA,KAAC8qC,GAAe,MACG,IAKlBO,IAA6B1zB,EAAAA,EAAAA,GAAaxE,GAAe,CAAC,e,gBC7BhE,MAAMm4B,IAAyBzrC,EAAAA,EAAAA,IAAS,cAAqCC,EAAAA,EAChFC,MAAAA,GACI,MAAMkrC,EAAa3qC,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMk/B,WAC1D,OACIpiC,EAAAA,EAAAA,MAACyiC,GAAAA,EAAkB,CAAAlrC,SAAA,EACfL,EAAAA,EAAAA,KAAC8qC,GAAe,KAChB9qC,EAAAA,EAAAA,KAAC+qC,GAAa,CAAA1qC,UACVL,EAAAA,EAAAA,KAACirC,EAAU,CAAClkC,KAAM,QAIlC,IChBSykC,IAAgB1sC,EAAAA,EAAAA,GAAU,iB,2BCcvC,MAAMqU,IAAoDtT,EAAAA,EAAAA,KAAUzB,IAChE,MAAM0N,GAAWqD,EAAAA,EAAAA,KACXs8B,GAAYpgB,EAAAA,EAAAA,cAAY,KAAO,IAAD6Z,EACiB,QAAjDA,EAAA9mC,EAAMmlC,WAAWoG,yBAAyB96B,eAAO,IAAAq2B,GAAjDA,EAAmDwG,SAAS,EAAG,EAAE,GAClE,CAACttC,EAAMmlC,aAcV,OARAt1B,EAAAA,EAAAA,YAAU,KAAO,IAADk3B,EAAAC,EAGZ,OAF+B,QAA/BD,EAAA/mC,EAAMmlC,WAAWmH,sBAAc,IAAAvF,GAAS,QAATC,EAA/BD,EAAiCt2B,eAAO,IAAAu2B,GAAxCA,EAA0CjG,iBAAiB,QAASsM,GAE7D,KAAO,IAADpG,EAAAsG,EACsB,QAA/BtG,EAAAjnC,EAAMmlC,WAAWmH,sBAAc,IAAArF,GAAS,QAATsG,EAA/BtG,EAAiCx2B,eAAO,IAAA88B,GAAxCA,EAA0CC,oBAAoB,QAASH,EAAU,CACpF,GACF,CAACrtC,EAAMmlC,WAAYkI,KAGlB3iC,EAAAA,EAAAA,MAAC0iC,GAAa,CAACvrC,UAAWsX,MAAWnX,EAAAA,EAAAA,IAAQ,sBAAuBhC,EAAM6B,WAC3D6T,KAAM1V,EAAMmlC,WAAW4F,kBACvBv7B,IAAKxP,EAAMmlC,WAAWsI,mBAAmBxrC,SAAA,CAdjDyL,EAASqI,OAAOC,UAAWpU,EAAAA,EAAAA,KAACqrC,GAA0B,KAAMrrC,EAAAA,EAAAA,KAACsrC,GAAsB,KAgBtFtrC,EAAAA,EAAAA,KAACkqC,GAAqB,MACV,IAIX4B,IAAsBn0B,EAAAA,EAAAA,GAAaxE,GAAe,CAAC,c,iEC1CzD,MCAMo4B,E,SDA4BxtC,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uD,iEEA5C,MAAM6tC,E,SAAqBhuC,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,wRAS/Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAGvCkE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,UAAY,QAAUF,EAAMC,WAAWutC,SAAS,G,gDCdpF,MAAMC,EAAiB,G,wECEvB,MAAMC,GAAoBptC,E,SAAAA,GAAU,qB,iECC3C,MAAMqtC,EAAapuC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mKAElBE,GAASA,EAAMI,MAAM6J,OAAO4B,YACnChL,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQ8J,OAAO,IAUrCghC,GAAQruC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,+FAIrB0E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW4tC,UAAU,IAK7CC,GAAYvuC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,gGCvBvBquC,GD8B4BC,EAAAA,EAAAA,GAAeJ,EAAOE,G,eE1BxD,MAAMG,GAA2B5sC,EAAAA,EAAAA,IAAS,cAAuCC,EAAAA,EAEtFC,MAAAA,GACE,IAAI2sC,EAAwBpsC,KAAKwL,SAASye,cAAcC,KAAKvL,OAAO0tB,iBACpE,OAAID,GAA0BA,EAAsB3/B,SAKlDjE,EAAAA,EAAAA,MAACyjC,EAAkB,CAACtsC,UAAW,sBAAsBI,SAAA,CAClDC,KAAKwL,SAASoK,YAAYC,UAAU,2BACrCnW,EAAAA,EAAAA,KAAC4sC,EAAAA,EAAI,CAACC,KAAM,6CAA8CC,uBAAuB,EAAOtiC,OAAQ,SAASnK,SACtG,8BAEFC,KAAKwL,SAASoK,YAAYC,UAAU,2BACrCnW,EAAAA,EAAAA,KAAC4sC,EAAAA,EAAI,CAACC,KAAM,iFAAkFC,uBAAuB,EAAOtiC,OAAQ,SAASnK,SAC1I,8BAXE,IAgBX,I,UCxBF,MAAM8rC,EAAapuC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4BAIvBkuC,GAAQruC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,kCAI1B6uC,GAAYhvC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,0ICTvB8uC,GDmBmCR,EAAAA,EAAAA,GAAeJ,EAAOW,GEfzDE,GAA4BptC,EAAAA,EAAAA,IAAS,cAAwCC,EAAAA,EAEhFotC,gBAAAA,CAAiBC,GACvB,OAAGA,GAAmBA,EAAgBpgC,QAC7BzM,KAAKwL,SAASoL,WAAWrI,QAAQgD,WAAWu7B,iCAG9C,IACT,CAEQC,uBAAAA,GACN,OAAO/sC,KAAKwL,SAASoL,WAAWrI,QAAQgD,WAAWy7B,6BACrD,CAEAvtC,MAAAA,GACE,IAAIwtC,EAAyBjtC,KAAKwL,SAASye,cAAcC,KAAKvL,OAAOuuB,iBACrE,OAAID,GAA2BA,EAAuBxgC,SAKlDjE,EAAAA,EAAAA,MAACkkC,EAAyB,CAAC/sC,UAAW,qCAAqCI,SAAA,CACxEC,KAAK4sC,iBAAiBK,EAAuBE,WAC7CntC,KAAK+sC,6BANH,IASX,I,qCCjBF,IACaK,GADZ7tC,EAAAA,EAAAA,IAAQuT,EAAT,cAC6CtT,EAAAA,EAA6CuT,WAAAA,GAAA,SAAA9S,WAAA,KAM9EotC,uBAA0BxY,IAC1B70B,KAAKlC,MAAMwvC,uBACXttC,KAAKwL,SAASmT,OAAO4uB,+BAA+B1Y,EACxD,CACF,CARF,iBAAY2Y,GACR,OAAOxtC,KAAKwL,SAASye,cAAcC,KAAKvL,MAC5C,CAQQ8uB,sBAAAA,GACJ,OAAIztC,KAAKwL,SAASqI,OAAOC,UACdpU,EAAAA,EAAAA,KAACsqB,EAAAA,EAA6B,IAGlC,IACX,CAEQ0jB,qBAAAA,GACJ,GAAI1tC,KAAKwL,SAAS+9B,UAAUoE,MACxB,OAAO,KAIX,IAAIvB,EAAwBpsC,KAAKwtC,cAAcnB,iBAC3CY,EAAyBjtC,KAAKwtC,cAAcN,iBAEhD,OAAID,GAA0BA,EAAuBxgC,SAC1C/M,EAAAA,EAAAA,KAACitC,EAAyB,IAC1BP,GAAyBA,EAAsB3/B,SAC/C/M,EAAAA,EAAAA,KAACysC,EAAwB,IAG7B,IACX,CAEA1sC,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACojC,EAAiB,CAACjsC,UAAWsX,IAAW,4BAA6BjX,KAAKlC,MAAM6B,WAAY2N,IAAKtN,KAAKqtC,uBAAuBttC,SAAA,CACzHC,KAAKytC,yBACLztC,KAAK0tC,0BAGlB,KACH56B,C,uFC5DM,MAAM86B,EAAqBnwC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oI,MCArC,MAAMiwC,EAAcpwC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qKAKRE,GAASA,EAAMI,MAAMa,OAAOC,OAAO0Q,KAAKo+B,sBAAsB3uC,aAC9ErB,GAASA,EAAMI,MAAM6J,OAAOwb,iB,MCNlC,MAAMwqB,EAAkBtwC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oGAE5BE,GAASA,EAAMI,MAAM6J,OAAOkZ,aCFlC,MAAM+sB,GAA0BxvC,E,SAAAA,GAAU,2B,qECkBjD,MAAMqU,GAAyFtT,EAAAA,EAAAA,KAAUzB,IAAW,IAADmwC,EAAAC,EAC/G,MAAM1iC,GAAWqD,EAAAA,EAAAA,KAeXuR,EAAiE,QAAzD6tB,EAAsC,QAAtCC,EAAGpwC,EAAMqwC,WAAWC,0BAAkB,IAAAF,OAAA,EAAnCA,EAAqCG,yBAAiB,IAAAJ,EAAAA,EAAIziC,EAAS6U,YAAYmZ,cAEhG,OACIhxB,EAAAA,EAAAA,MAAColC,EAAkB,CAACvmC,QAhBRA,KACZvJ,EAAMimC,SAASuK,UAAU,EAgBL3uC,UAAW4uC,EAAAA,GAA6CxuC,SAAA,EACxEL,EAAAA,EAAAA,KAACmuC,EAAW,IAbZriC,EAASsiB,SAAS0gB,aAIlB9uC,EAAAA,EAAAA,KAACsuC,EAAuB,CAACruC,WAAWG,EAAAA,EAAAA,IAAQ,gCAHrC,MAcPJ,EAAAA,EAAAA,KAACquC,EAAe,CAACpuC,WAAWG,EAAAA,EAAAA,IAAQ,6BAA6BC,SAC5DyL,EAASwJ,SAASC,YAAYmL,OAElB,IAKhBquB,GAA2Dp3B,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,aAAc,Y,2FC9C5G,SAAS67B,EAAqBljC,GACjC,OAAGA,EAASrN,WAAWC,UACZ,KAEA,GAEf,CAEO,SAASuwC,EAAoBnjC,GAChC,OAAQ9L,EAAAA,EAAAA,KAAClC,EAAAA,EAA2B,CAACS,WAAYuN,EAASrN,WAAWC,UAAY,EAAI,IACzF,C,mFCbO,MAAMwwC,GAA+BpwC,E,SAAAA,GAAU,gC,0BCW/C,MAAMqwC,GAAgDtvC,EAAAA,EAAAA,IACzD,cAA4DC,EAAAA,EAExDC,MAAAA,GACI,MAAMqvC,GAAYH,EAAAA,EAAAA,GAAoB3uC,KAAKwL,UAC3C,OACIhD,EAAAA,EAAAA,MAAComC,EAA4B,CAAA7uC,SAAA,CACxB+uC,EACA9uC,KAAKwL,SAASoL,WAAWrI,QAAQgD,WAAWw9B,2BAA2B,CAACC,YAAahvC,KAAKlC,MAAMkxC,cAChGF,EACA9uC,KAAKwL,SAASoL,WAAWrI,QAAQgD,WAAW09B,wBAAwB,CAACD,YAAahvC,KAAKlC,MAAMkxC,gBAG1G,I,uCCxBD,MAAME,EAAiBzxC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kF,+CCQjC,MAAMuxC,GAA+B5vC,EAAAA,EAAAA,IAAS,cAA2CC,EAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KACnGmvC,gBAAkB1vB,gBAChB1f,KAAKwL,SAAS6jC,QAAQC,YAAY,CACpCC,YAAaC,EAAAA,GAAmBC,YAChCta,QAAS,CACLG,OAAQC,EAAAA,GAAeC,aACvBJ,KAAMC,EAAAA,EAASqa,OACf7a,QAASC,EAAAA,GAAiB6a,gBAEhC,CACL,CACDlwC,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CACHM,OAAO,UACPrH,WAAWG,EAAAA,EAAAA,IAAQ,6BACnBqH,aAAaunC,EAAAA,EAAAA,GAAqB1uC,KAAKwL,UACvCnE,QAASrH,KAAKovC,gBAAgBrvC,SAE7BC,KAAKwL,SAASoK,YAAYC,UAAU,YAGjD,ICzBS+5B,GAAuDrwC,EAAAA,EAAAA,IAChE,cAAmEC,EAAAA,EAC/DC,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAAC0mC,EAAc,CAAAnvC,SAAA,EACV4uC,EAAAA,EAAAA,GAAoB3uC,KAAKwL,WAC1B9L,EAAAA,EAAAA,KAACyvC,EAA4B,MAGzC,ICVKU,GAAiDtwC,EAAAA,EAAAA,IAC1D,cAA6DC,EAAAA,EACzDC,MAAAA,GACI,OAAGO,KAAKwL,SAASrN,WAAWC,WAChBsB,EAAAA,EAAAA,KAAC+uC,EAAAA,EAAwD,KAEzD/uC,EAAAA,EAAAA,KAACkwC,EAAoD,GAGrE,I,MCbD,MAAME,EAA0BryC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gBCYpCmyC,GAAgCxwC,EAAAA,EAAAA,IACzC,cAA4CC,EAAAA,EAC1CC,MAAAA,GAEI,OACIC,EAAAA,EAAAA,KAACowC,EAAuB,CAACnwC,WAAWG,EAAAA,EAAAA,IAAQ,wBAAwBC,SAE5DC,KAAKwL,SAASkE,KAAKC,cACdjQ,EAAAA,EAAAA,KAACmwC,EAA8C,KAC/CnwC,EAAAA,EAAAA,KAACmvC,EAA6C,CAACG,YAAahvC,KAAKlC,MAAMkxC,eAI5F,G,2GCrBC,MAAMgB,UAA0CxwC,EAAAA,EACnDC,MAAAA,GACI,OAAGwwC,EAAAA,EAAAA,MACQ,MAEJvwC,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAAC2D,QAAQ,OAAQyjC,UAAW,UAAW3gB,GAAI4gB,EAAAA,GAClE,E,gDCZG,MAAMA,EAA8B,6B,uFCO3C,MAcaC,EAA8B3yC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yGAElCe,IAAA,IAAC,OAAC8B,GAAO9B,EAAA,MAhBF8B,KACtB,OAAQA,GACJ,KAAK4vC,EAAAA,EAAsBC,UACvB,MAAO,MACX,KAAKD,EAAAA,EAAsBE,eACvB,MAAO,MACX,KAAKF,EAAAA,EAAsBG,cACvB,MAAO,OACX,KAAKH,EAAAA,EAAsBI,SAC3B,QACI,MAAO,OACf,EAK6BC,CAAiBjwC,EAAO,G,oGCXzD,MAkBakwC,EAAqBlzC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,ynBACpBE,GAnBM8yC,EAAC9yC,EAAiCI,KAC5D,GAAIJ,EAAM+yC,qBACN,MAAO,OAGX,MAAMC,GAAgBC,EAAAA,EAAAA,GAA6B7yC,EAAOJ,EAAMkzC,aAChE,OAAIF,EAIChzC,EAAM2C,SAAW4vC,EAAAA,EAAsBC,WAAaxyC,EAAM2C,SAAW4vC,EAAAA,EAAsBE,iBACzFO,EAAcG,oBAId,OAASH,EAAcj/B,WAAa,IAHhC,OAASi/B,EAAcG,oBAAsB,IAL7C,MAQmC,EAIjBL,CAAsB9yC,EAAOA,EAAMI,SAa9DS,IAAA,IAAC,OAAC8B,GAAO9B,EAAA,OAAK8B,IAAW4vC,EAAAA,EAAsBE,iBAAkB1vC,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,yEAGrE,G,gDC7CE,MAAMszC,GAAmB1yC,E,SAAAA,GAAU,mB,+DCOnC,SAASuyC,EAA6B7yC,EAAmB8yC,GAC5D,MAAMhyC,EAASd,EAAMa,OAAOC,OAAOmyC,eACnC,OAAQH,GACJ,KAAKI,EAAAA,GAAYC,MACb,MAAO,CACHx/B,WAAY7S,EAAOsyC,MAAMC,eAAepyC,WACxCqyC,KAAMxyC,EAAOsyC,MAAMG,SAAStyC,YAEpC,KAAKiyC,EAAAA,GAAYM,SACb,MAAO,CACH7/B,WAAY7S,EAAO2yC,UAAUJ,eAAepyC,WAC5CqyC,KAAMxyC,EAAO2yC,UAAUF,SAAStyC,YAExC,KAAKiyC,EAAAA,GAAYQ,SACb,MAAO,CACH//B,WAAY7S,EAAO6yC,SAASN,eAAepyC,WAC3CqyC,KAAMxyC,EAAO6yC,SAASJ,SAAStyC,YAEvC,KAAKiyC,EAAAA,GAAYU,MACb,MAAO,CACHjgC,WAAY7S,EAAO+yC,MAAMR,eAAepyC,WACxCqyC,KAAMxyC,EAAO+yC,MAAMN,SAAStyC,YAEpC,KAAKiyC,EAAAA,GAAYY,eACb,MAAO,CACHngC,WAAY7S,EAAOizC,gBAAgBV,eAAepyC,WAClDqyC,KAAMxyC,EAAOizC,gBAAgBR,SAAStyC,WACtC8xC,oBAAqBjyC,EAAOizC,gBAAgBC,yBAAyB/yC,YAE7E,KAAKiyC,EAAAA,GAAYe,iBACb,MAAO,CACHtgC,WAAY7S,EAAOozC,kBAAkBb,eAAepyC,WACpDqyC,KAAMxyC,EAAOozC,kBAAkBX,SAAStyC,YAEhD,KAAKiyC,EAAAA,GAAYiB,UACb,MAAO,CACHxgC,WAAY7S,EAAOszC,YAAYf,eAAepyC,WAC9CqyC,KAAMxyC,EAAOszC,YAAYb,SAAStyC,YAE1C,KAAKiyC,EAAAA,GAAYmB,MACb,MAAO,CACH1gC,WAAY7S,EAAOwzC,MAAMjB,eAAepyC,WACxCqyC,KAAM,IAEd,KAAKJ,EAAAA,GAAYqB,YACb,MAAO,CACH5gC,WAAY7S,EAAO0zC,aAAanB,eAAepyC,WAC/CqyC,KAAMxyC,EAAO0zC,aAAajB,SAAStyC,YAG3C,KAAKiyC,EAAAA,GAAYuB,cACb,MAAO,CACH9gC,WAAY7S,EAAO4zC,eAAerB,eAAepyC,WACjDqyC,KAAMxyC,EAAO4zC,eAAenB,SAAStyC,YAE7C,QACI,OAAO,KAGnB,C,0KClEO,MAAM0zC,GAAuBr0C,EAAAA,EAAAA,GAAU,wBCAjCs0C,GAAyBt0C,EAAAA,EAAAA,GAAU,0BCAnCu0C,GAAyBv0C,EAAAA,EAAAA,GAAU,0BCAnCw0C,GAA6Bx0C,EAAAA,EAAAA,GAAU,8B,eCA7C,MAAMy0C,GAAwBz0C,EAAAA,EAAAA,GAAU,yB,oCCSc,IAUvDqU,GAAagF,EAGdC,EAAAA,GAAWxK,IAAGyK,EAsCdE,EAAAA,GAAOC,OA1CX3Y,EAAAA,EAAAA,KAAQ4Y,EAAT,cAC4B3Y,EAAAA,EAMxBuT,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KANTo1C,yBAAmB,GAAA36B,EAAAA,EAAAA,GAAA,kBAAAC,EAAA,OAQvBQ,EAAAA,EAAAA,IAAehZ,KACnB,CAEA+b,iBAAAA,GACI/b,KAAKmzC,WACT,CAEA/tB,kBAAAA,CAAmBC,GACVA,EAAU+tB,YAAYC,cAAgBrzC,KAAKlC,MAAMs1C,YAAYC,cAC9DrzC,KAAKszC,qBACLtzC,KAAKmzC,YAEb,CAEA7tB,oBAAAA,GACItlB,KAAKszC,oBACT,CAEQH,SAAAA,GACJnzC,KAAKuzC,cACLvzC,KAAKkzC,oBAAsB5gB,aAAY,KACnCtyB,KAAKuzC,aAAa,GACnB,IACP,CAEQD,kBAAAA,GACAtzC,KAAKkzC,sBACLnnB,cAAc/rB,KAAKkzC,qBACnBlzC,KAAKkzC,yBAAsB/yC,EAEnC,CAGQozC,WAAAA,GACJ,MAAMC,EAAaxzC,KAAKwL,SAAS8e,KAAKW,uBACtC,IAAKuoB,EAED,YADAxzC,KAAKwL,SAAS2L,OAAOs8B,QAAQ,0BAIjC,MAAMC,EAAc1zC,KAAKlC,MAAMs1C,YAAYC,YAGrCM,EAAyF,IAApEt9B,KAAKsD,OAAO+5B,EAAYE,UAAYJ,EAAWI,WAAa,KACjFC,EAAsBrY,EAAAA,SAASsY,iBAAiBz9B,KAAK09B,IAAI,EAAGJ,IAClE3zC,KAAKg0C,WAAaH,EAAoB10C,SAAS,CAAC80C,eAAe,GACnE,CAEAx0C,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACuzC,EAAqB,CACzBtzC,UAAU,yBACVc,OAAQT,KAAKlC,MAAM2C,OACnByzC,YAAal0C,KAAKlC,MAAMo2C,YACxBC,UAAWn0C,KAAKlC,MAAM+W,SAASu/B,aAAap0C,KAAKlC,MAAMkzC,aACvDqD,QAASr0C,KAAKlC,MAAMkzC,cAAgBI,EAAAA,GAAYC,MAAMtxC,SAErDC,KAAKg0C,YAEd,GACHx7B,GAAA2D,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,cAAAvE,GAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAhEgC,EAAG,KAADL,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,eAAArE,GAAA0E,OAAAC,yBAAAvE,EAAAiE,UAAA,eAAAjE,EAAAiE,WAL1BtJ,EAK0BqF,KAAArF,GAkE5B,MAAMwhC,GAA8Bj9B,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,aCtF3D0hC,GAA8B/1C,EAAAA,EAAAA,GAAU,+BCHxCg2C,GAAkCh2C,EAAAA,EAAAA,GAAU,mCCA5Ci2C,GAAmCj2C,EAAAA,EAAAA,GAAU,oC,0CCA1D,MAAMk2C,EAAiB,iDAuChB,MAAMC,EAA2Bl3C,EAAAA,GAAOiB,IAAGoC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,4PA3BzB,IA8BnBe,IAAA,IAAC,OAACi2C,GAAOj2C,EAAA,OAAKi2C,GAAS/zC,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,sCACb,IACXiD,EAAAA,EAAAA,IAAGsB,IAAAA,GAAAvE,EAAAA,EAAAA,GAAA,mCACK,EACX,GAnCqB,GAyCT0E,IAAA,IAAC,OAACsyC,GAAOtyC,EAAA,OAvC1B,SAA8BuyC,GAC1B,MAAMC,GAAYD,EALK,GAJD,IAS6CE,GAC7DC,GAAUH,EAVM,GAIC,IAM0CE,GACjE,OAAO5sB,EAAAA,EAAAA,IAASxqB,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qZAGAk3C,EAIAA,EAIAE,EAIAA,EAIAF,EAGpB,CAc+BG,CAAqBL,EAAO,GAAIF,GA+BxD,MAAMQ,EAA2Bz3C,EAAAA,GAAOiB,IAAG+D,IAAAA,GAAA7E,EAAAA,EAAAA,GAAA,8QA3BzB,IA8BnBkJ,IAAA,IAAC,OAAC8tC,GAAO9tC,EAAA,OAAK8tC,GAAS/zC,EAAAA,EAAAA,IAAG6B,IAAAA,GAAA9E,EAAAA,EAAAA,GAAA,sCACb,KACXiD,EAAAA,EAAAA,IAAG8B,IAAAA,GAAA/E,EAAAA,EAAAA,GAAA,mCACK,GACX,GAnCqB,IAyCTiN,IAAA,IAAC,OAAC+pC,GAAO/pC,EAAA,OAvC1B,SAA8BgqC,GAC1B,MAAMC,GAAYD,EAjDK,GAJD,IAqD6CM,GAC7DH,GAAUH,EAtDM,GAIC,IAkD0CM,GACjE,OAAOhtB,EAAAA,EAAAA,IAAS9lB,IAAAA,GAAAzE,EAAAA,EAAAA,GAAA,qZAGAk3C,EAIAA,EAIAE,EAIAA,EAIAF,EAGpB,CAc+BM,CAAqBR,EAAO,GAAIF,G,eChGxD,MAAMW,GAA+B72C,EAAAA,EAAAA,GAAU,gC,4GCQtD,MAAM82C,GAAyB,SAAC70C,EAA+ByzC,GAAqD,IAAhCqB,EAAkBt1C,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GACpG,OAAQQ,GACN,KAAK4vC,GAAsBC,UAEzB,OAAqB,GAAd4D,EAAmB,IAAM,KAClC,KAAK7D,GAAsBE,eAEzB,OAAqB,GAAd2D,EAAmB,IAAM,KAClC,KAAK7D,GAAsBI,SAC3B,QACE,OAAI8E,EAEmB,GAAdrB,EAAmB,IAAM,KAGX,GAAdA,EAAmB,IAAM,KAGxC,EAEasB,GAAyB/3C,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4BAInC63C,IAAyBh4C,EAAAA,EAAAA,IAAO+3C,GAAP/3C,CAA8BqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,4OACvDe,IAAA,IAAC,QAAC01C,GAAQ11C,EAAA,OAAK01C,EAAU,QAAU,MAAM,IAIlD/xC,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6C,KAAKC,QAAQywB,IAAI,IAC7B3qB,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAM6J,OAAO2tC,mBAAmB,IAGzC7qC,IAAA,IAAC,OAACpK,EAAM,YAAEyzC,GAAYrpC,EAAA,OAAKyqC,GAAuB70C,EAAQyzC,EAAY,IAE1ElpC,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAMC,WAAWo3C,SAAS,IACjC9xB,IAAA,IAAC,OAAChjB,EAAM,YAAEyzC,GAAYzwB,EAAA,OAAK6xB,GAAuB70C,EAAQyzC,GAAa,EAAK,IAW7F,IANwBjiC,EAAAA,GAAAA,GAAcujC,IACjCrjC,WAAWsjC,IACXE,cAAcF,IACdG,cAAcH,IACdrjC,Q,2CCfE,IAAKi+B,IAKX,SALWA,GAAAA,EAAAA,EAAqB,uBAArBA,EAAAA,EAAqB,iCAArBA,EAAAA,EAAqB,yBAArBA,EAAAA,EAAqB,mCAKhC,CALWA,KAAAA,GAAqB,SAuB3Bx9B,IAAagF,GAsBdC,EAAAA,GAAWxK,IAAGyK,GAIdE,EAAAA,GAAOC,MAAKF,GA8CZF,EAAAA,GAAWxK,IAAG8W,GAMdnM,EAAAA,GAAOC,OA/EX3Y,EAAAA,EAAAA,KAAQ4Y,GAAT,cAC4B3Y,EAAAA,EAExBuT,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAIT+3C,eAAiB,KAAO,IAADC,EAAAC,EAAAC,EAI3B,GAFAh2C,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAc,iBAAiB,GAADnmC,OAAuC,QAAvCk2C,EAAK91C,KAAKwL,SAASyqC,QAAQC,oBAAY,IAAAJ,GAAM,QAANC,EAAlCD,EAAoC5rB,YAAI,IAAA6rB,OAAN,EAAlCA,EAA0CI,UAAS,MAAAv2C,OAA4B,QAA5Bo2C,EAAKh2C,KAAKlC,MAAMs4C,oBAAY,IAAAJ,OAAA,EAAvBA,EAAyBhF,cAE/JhxC,KAAKlC,MAAMuJ,QAAS,CAAC,IAADgvC,EACpB,MAAMC,EAAWt2C,KAAKwL,SAASye,cAAcssB,wBAAwBv2C,KAAKlC,MAAMs4C,aAAaI,WAC7Fx2C,KAAKwL,SAASqd,UAAU4tB,wBAA8C,QAAvBJ,EAACr2C,KAAKlC,MAAMuV,mBAAW,IAAAgjC,EAAAA,EAAI,cAAe,iBAAkBr2C,KAAKlC,MAAMs4C,aAAapF,aAAuB,OAARsF,QAAQ,IAARA,GAAAA,EAAU7tC,MAAQ,IAAM6tC,EAAS7tC,MAAQ,KAC3LzI,KAAKlC,MAAMuJ,SACf,GACH,KAEOqvC,mBAAqB,MAChB12C,KAAKlC,MAAMuJ,SAAWrH,KAAKlC,MAAMs4C,aAAapF,cAAgBI,EAAAA,GAAYU,OACtFv5B,EAAAA,EAAAA,GAAA,mBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,mBAAAE,GAAA,WAsDOk+B,oBAAc,OACdC,4BAAsB,OACtBC,cAAQ,GAAAt+B,EAAAA,EAAAA,GAAA,sBAAAmM,GAAA,WAYRoyB,uCAA0CC,IAC1C/2C,KAAK62C,WACL72C,KAAK62C,SAAS72C,KAAK22C,gBACnB32C,KAAK62C,cAAW12C,GAEpBH,KAAK22C,eAAiBI,EAClB/2C,KAAK22C,iBACA32C,KAAK42C,yBACN52C,KAAK42C,uBAAyB,IAAII,EAAAA,GAAeh3C,KAAKi3C,iBAE1Dj3C,KAAK42C,uBAAuBpoC,QAAQxO,KAAK22C,gBACzC32C,KAAK62C,SAAYK,IAGTl3C,KAAK42C,wBACL52C,KAAK42C,uBAAuBO,UAAUD,EAC1C,EAER,GAtGAl+B,EAAAA,EAAAA,IAAehZ,KACnB,CAsBQo3C,eAAAA,CAAgBC,GACpBr3C,KAAKs3C,YAAcD,CACvB,CAEA,0BAAYE,GAAmC,IAADC,EAAAC,EAC1C,MAAMjB,EAA8C,QAArCgB,EAA0B,QAA1BC,EAAGz3C,KAAKlC,MAAMs4C,oBAAY,IAAAqB,OAAA,EAAvBA,EAAyBjB,iBAAS,IAAAgB,EAAAA,EAAIE,EAAAA,GAAkBrG,MACpEsG,EAAiB33C,KAAKlC,MAAM+W,SAAS+iC,oBAAoBpB,GAC/D,OAAQzxC,EAAAA,MAAMkP,kBAAgC,OAAd0jC,QAAc,IAAdA,OAAc,EAAdA,EAAgBvE,YACpD,CAEA,yBAAYyE,GACR,OAAS73C,KAAKs3C,cAAgBt3C,KAAKu3C,sBACvC,CAEA,gBAAYO,GAA6B,IAADC,EAAAC,EACpC,OAA2C,QAA3CD,EAA8B,QAA9BC,EAAOh4C,KAAKlC,MAAMs4C,oBAAY,IAAA4B,OAAA,EAAvBA,EAAyBhH,mBAAW,IAAA+G,EAAAA,EAAI3G,EAAAA,GAAYC,KAC/D,CAEAt1B,iBAAAA,GACI3D,MAAM2D,oBAGN,MAAM+0B,GAAgBC,EAAAA,GAAAA,GAA6B/wC,KAAKwL,SAAStN,MAAMuN,aAAczL,KAAK83C,cAErFhH,EAML9V,QAAQid,IAAI,CACRnH,EAAcU,MAAOprB,EAAAA,EAAAA,GAAa0qB,EAAcU,MAAQxW,QAAQC,UAChE6V,EAAcj/B,YAAauU,EAAAA,EAAAA,GAAa0qB,EAAcj/B,YAAampB,QAAQC,YAC5E1Z,MAAK,KACJvhB,KAAKo3C,iBAAgB,EAAK,IAR1Bp3C,KAAKwL,SAAS2L,OAAOs8B,QAAQ,mBAAD7zC,OAAoBI,KAAK83C,aAAY,WAUzE,CAEAxyB,oBAAAA,GACQtlB,KAAK42C,yBACL52C,KAAK42C,uBAAuBnoC,aAC5BzO,KAAK42C,uBAAyB,KAEtC,CAuCQsB,gCAAAA,CAAiCC,GACrC,IAAIC,EAAiB,GACrB,OAAQD,GACJ,KAAKE,EAAAA,GAAcC,IACfF,EAAiB,4BACjB,MAEJ,KAAKC,EAAAA,GAAcE,SACfH,EAAiB,6BACjB,MAEJ,KAAKC,EAAAA,GAAcG,QACnB,QACIJ,EAAiB,0BAIzB,OAAOA,CACX,CAEQK,uBAAAA,GACJ,MAAMC,EAAiB14C,KAAKwL,SAASrN,WAAWwS,WAAa3Q,KAAKwL,SAASrN,WAAWC,UAEtF,OAAO4B,KAAKlC,MAAM2C,QAAUi4C,EAAiBrI,GAAsBG,cAAgBH,GAAsBI,QAC7G,CAEQkI,mBAAAA,CAAoBhB,GACxB,MAAM,aAACQ,EAAY,cAAES,GAAiBjB,EAAevE,aAAe,CAAC,EAErE,OACI+E,IAAiBE,EAAAA,GAAcQ,KAC/B74C,KAAKwL,SAASwJ,SAASC,YAAY2jC,GACnC54C,KAAKwL,SAASwJ,SAASC,YAA0B,OAAd0iC,QAAc,IAAdA,OAAc,EAAdA,EAAgBmB,cAE3D,CAEAr5C,MAAAA,GAAU,IAADs5C,EAAAC,EACL,IAAKh5C,KAAKlC,MAAMs4C,eAAiBp2C,KAAKlC,MAAMs4C,aAAa3pC,QACrD,OAAO,KAGX,MAAM+pC,EAAYyC,OAAwC,QAAlCF,EAAC/4C,KAAKlC,MAAMs4C,aAAaI,iBAAS,IAAAuC,EAAAA,EAAIrB,EAAAA,GAAkBrG,OAC1EL,EAAahxC,KAAK83C,aAElBH,EAAkC33C,KAAKlC,MAAM+W,SAAS+iC,oBAAoBpB,GAC1EpD,GAA6B,OAAduE,QAAc,IAAdA,OAAc,EAAdA,EAAgBvE,cAAe,CAAC,EAEhDpzC,KAAK63C,uBACNF,EAAeuB,aAAa9F,GAGhC,MAAM,aAAC+E,GAAgB/E,GAAe,CAAC,EAEjC+F,EAAan5C,KAAKlC,MAAMq7C,YAAcntC,EAAAA,SAEtCvL,EAAST,KAAKy4C,0BAEdtE,EAAYn0C,KAAKlC,MAAM+W,SAASu/B,aAAapD,GAE7CoI,EAAkBp5C,KAAKlC,MAAMs4C,aAAapF,cAAgBI,EAAAA,GAAYC,MAE5E,OAAO3xC,EAAAA,EAAAA,KAACy5C,EAAU,CAAAp5C,UACdL,EAAAA,EAAAA,KAAC0wC,EAAAA,EAA2B,CAAC9iC,IAAKtN,KAAK82C,uCAAwCr2C,OAAQA,EAAOV,UAC1FL,EAAAA,EAAAA,KAACwxC,EAAAA,EAAgB,CAAC7pC,QAASrH,KAAK61C,eAAgBwD,YAAar5C,KAAK02C,qBAChD/2C,UAAU,oBAAmBI,UAC3CyI,EAAAA,EAAAA,MAACmoC,EAAAA,EAAkB,CAACE,qBAAsB7wC,KAAK63C,sBAAuB7G,YAAaA,EAC/DvwC,OAAQA,EAAOV,SAAA,CAC9Bo4C,IAAiBE,EAAAA,GAAcC,KAAM9vC,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EAClCL,EAAAA,EAAAA,KAACi1C,EAAwB,KACzBj1C,EAAAA,EAAAA,KAACw1C,EAAwB,KACzBx1C,EAAAA,EAAAA,KAACi1C,EAAwB,CAACC,QAAM,KAChCl1C,EAAAA,EAAAA,KAACw1C,EAAwB,CAACN,QAAM,OAC9B,KAEJ50C,KAAK63C,uBACHrvC,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,EAAAA,KAAC45C,EAAAA,EAA8B,KAC/B9wC,EAAAA,EAAAA,MAAC+wC,EAAAA,EAA8B,CAAAx5C,SAAA,EAC3BL,EAAAA,EAAAA,KAAC85C,EAAAA,EAAuC,KACxC95C,EAAAA,EAAAA,KAAC+5C,EAAAA,EAAkC,WAG3CjxC,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,EAAAA,KAACg6C,GAAe,CAACj5C,OAAQA,EAAQyzC,YAAal0C,KAAKk0C,YAAaG,QAAS+E,EAAgBr5C,SACpFC,KAAKwL,SAASoK,YAAYC,UAAU,2BAEzCnW,EAAAA,EAAAA,KAACmzC,EAAoB,CACjBz+B,IAAgF,QAA7E4kC,GAAEjI,EAAAA,GAAAA,GAA6B/wC,KAAKwL,SAAStN,MAAMuN,aAAculC,UAAY,IAAAgI,OAAA,EAA3EA,EAA6ExH,KAClFr9B,IAAI,eACJ1T,OAAQA,EACR4zC,QAAS+E,KAEb5wC,EAAAA,EAAAA,MAAC6sC,EAA4B,CAAC50C,OAAQA,EAAQ4zC,QAAS+E,EAAgBr5C,SAAA,CAClEo4C,IAAiBE,EAAAA,GAAcQ,OAC5Bn5C,EAAAA,EAAAA,KAAC60C,EAA2B,CAAC9zC,OAAQA,EAAQyzC,YAAal0C,KAAKk0C,YAClCC,UAAWA,EAAUp0C,SAE7CC,KAAKwL,SAASoK,YAAYC,UAAU,8BAI7CnW,EAAAA,EAAAA,KAACozC,EAAsB,CAACpsB,MAAOyxB,EAAc13C,OAAQA,EAC7ByzC,YAAal0C,KAAKk0C,YAAaC,UAAWA,EAC1Cx0C,WAAWG,EAAAA,GAAAA,IAAQ,4BACnBu0C,QAAS+E,EACTt3C,KAAM9B,KAAK24C,oBAAoBhB,GAAgB53C,UAGnEL,EAAAA,EAAAA,KAAA,QAAAK,SACKC,KAAK24C,oBAAoBhB,WAItCj4C,EAAAA,EAAAA,KAACqzC,EAAsB,CAACtyC,OAAQA,EAAOV,SACrCqzC,EAAY+E,aACTA,IAAiBE,EAAAA,GAAcQ,MAC5BrwC,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,EAAAA,KAAC80C,EAA+B,CAAC/zC,OAAQA,EACRyzC,YAAal0C,KAAKk0C,YAClBC,UAAWA,EAAUp0C,SACjDC,KAAKwL,SAASoK,YAAYC,UAAU,kCAGzCnW,EAAAA,EAAAA,KAAC+0C,EAAgC,CAACh0C,OAAQA,EACRyzC,YAAal0C,KAAKk0C,YAClBC,UAAWA,EACXx0C,WAAWG,EAAAA,GAAAA,IAAQ,uCAAuCC,SACvFC,KAAKwL,SAASwJ,SAASC,YAAY0iC,EAAemB,qBAG3DtwC,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,EAAAA,KAACszC,EAA0B,CAACvyC,OAAQA,EAAQimB,MAAOyxB,EACvBjE,YAAal0C,KAAKk0C,YAClBC,UAAWA,EAAUp0C,SAE5CC,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKk4C,iCAAiCC,OAG/Ez4C,EAAAA,EAAAA,KAAC40C,EAA2B,CACxBlB,YAAaA,EACb3yC,OAAQA,EACRyzC,YAAal0C,KAAKk0C,YAClBlD,YAAaA,QAEdtxC,EAAAA,EAAAA,KAACoN,GAAAA,EAAS,CAACzL,OAAQZ,IAAW4vC,GAAsBI,SAAW,OAAS,sBAOnH,GACHj4B,IAAA2D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,eAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA9OyB,CAAM,KAADL,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,mBAAArE,IAAA0E,OAAAC,yBAAAvE,GAAAiE,UAAA,mBAAAjE,GAAAiE,WAAA3D,IAAA0D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,eAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkI,IAAAvI,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,kBAAAgI,IAAA,CAAA/H,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAwDDm9B,IAKtB,MAAMC,EADcD,EAAQ,GAAGzvC,OACQ0F,wBACvC5P,KAAKk0C,YAAc0F,EAAiBl4C,KAAK,CAC3C,IAvFGoR,GAuFJqF,MAAArF,IAkLE,MAAM+mC,IAAyBxiC,EAAAA,EAAAA,GAAaxE,GAAe,CAAC,Y,uFCpU5D,MAAM4mC,GAAqCh8C,EAAAA,EAAAA,IAAOq8C,EAAAA,EAAPr8C,CAA6CE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gC,uFCAxF,MAAM47C,GAA0C/7C,EAAAA,EAAAA,IAAOq8C,EAAAA,EAAPr8C,CAA6CE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,+B,iECD7F,MAAM27C,E,SAAiC97C,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yD,iECAjD,MAAMk8C,E,SAAwCr8C,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,0T,iECAxD,MAAM07C,E,SAAiC77C,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uV,wFCAjD,MAAMm8C,GAAmCv7C,EAAAA,EAAAA,GAAU,oC,gDCEnD,MAAMw7C,EAA+CA,KACxD,MAAMxuC,GAAWqD,EAAAA,EAAAA,KAyBjB,OACInP,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAQ,UAAWK,QAzBb4yC,KAqBdC,UAAUC,YAAYC,oBApBHlwB,IAA+B,IAADmwB,EAAAC,EAC7C9uC,EAAS4vB,OAAOC,oBAAoB,CAChC5yB,MAAO,cACP3G,KAAM2f,KAAKC,UAAU,CACjB64B,SAAc,OAAJrwB,QAAI,IAAJA,GAAY,QAARmwB,EAAJnwB,EAAMswB,cAAM,IAAAH,OAAR,EAAJA,EAAcE,SACxBE,UAAe,OAAJvwB,QAAI,IAAJA,GAAY,QAARowB,EAAJpwB,EAAMswB,cAAM,IAAAF,OAAR,EAAJA,EAAcG,WAC1B,KAAM,IACX,IAGW/rC,IACblD,EAAS4vB,OAAOC,oBAAoB,CAChC5yB,MAAO,YACP3G,KAAM2f,KAAKC,UAAU,CACjBg5B,KAAS,OAAHhsC,QAAG,IAAHA,OAAG,EAAHA,EAAKgsC,KACXC,QAAY,OAAHjsC,QAAG,IAAHA,OAAG,EAAHA,EAAKisC,SACf,KAAM,IACX,GAGsD,EAId56C,SAAC,WAAgB,E,kDC7BhE,MAAM66C,EAAcn9C,EAAAA,GAAOo9C,SAAQl9C,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4MAK7Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,SAAS,IACxB7L,GAASA,EAAMI,MAAM6J,OAAOwC,iBAE/BjI,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMuC,OAAOC,OAAOC,MAAM,IACxCmG,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAM6J,OAAOqB,iBAAiB,I,MCTxD,MAAM0xC,EAAQr9C,EAAAA,GAAO68B,MAAK38B,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kCCApBm9C,GAA2Bv8C,EAAAA,EAAAA,GAAU,4BCArCw8C,GAA8Bx8C,EAAAA,EAAAA,GAAU,+BCQ/Cy8C,EAAe,CACjBxyC,MAAO,eACPkyC,QAAS,0CACTO,iBAAiB,EACjBC,kBAAkB,EAClBC,mBAAmB,GAEjBC,EAAc,CAChBv5C,KAAM,gBACNuF,QAAUi0C,IAAgBA,GAAY,GAG7BC,EAA4BA,KACrC,MAAOC,EAAYC,IAAiB/tC,EAAAA,EAAAA,UAASutC,GACvCzvC,GAAWqD,EAAAA,EAAAA,KAEX6sC,EAAiBzxC,IACnB,MAAMH,EAA2B,aAAnBG,EAAGC,OAAOT,KAAsBQ,EAAGC,OAAOyxC,QAAU1xC,EAAGC,OAAOJ,MACtE8xC,EAAQ3xC,EAAGC,OAAO6b,KACxB01B,GAAav2C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAGs2C,GAAU,IAAE,CAACI,GAAQ9xC,IAAO,EAuBlD,OAAQtB,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACAyI,EAAAA,EAAAA,MAACwyC,EAA2B,CAAAj7C,SAAA,EACxByI,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrBL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,YACJL,EAAAA,EAAAA,KAAA,SAAO+J,KAAK,OAAOK,MAAO0xC,EAAW/yC,MAAOsd,KAAK,QAAQ/b,SAAU0xC,QAGvElzC,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrBL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,cACJL,EAAAA,EAAAA,KAACk7C,EAAW,CACR9xC,MAAO,CAACR,SAAU,SAAU5G,MAAO,OAAQm6C,OAAQ,YACnDC,KAAM,EACN/1B,KAAK,UACLjc,MAAO0xC,EAAWb,QAClB3wC,SAAU0xC,QAIlBlzC,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrBL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,cACJyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,WACLsc,KAAK,kBACLwJ,GAAG,kBACHosB,QAASH,EAAWN,gBACpBlxC,SAAU0xC,KAEdh8C,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAQ,kBAAiBh8C,SAAC,+BAGrCyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,WACLsc,KAAK,mBACLwJ,GAAG,mBACHosB,QAASH,EAAWL,iBACpBnxC,SAAU0xC,KAEdh8C,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAQ,mBAAkBh8C,SAAC,2BAGtCyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,WACLsc,KAAK,oBACLwJ,GAAG,oBACHosB,QAASH,EAAWJ,kBACpBpxC,SAAU0xC,KAEdh8C,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAQ,oBAAmBh8C,SAAC,kCAK/CyI,EAAAA,EAAAA,MAACwyC,EAA2B,CAAAj7C,SAAA,EACxBL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAO,UAAUK,QA5EjB20C,KAChB,MAAMC,EAAoD,CACtDC,aAAc,CACVzzC,MAAO+yC,EAAW/yC,MAClBkyC,QAASa,EAAWb,QACpBwB,MAAOX,EAAWL,kBAAoB,sBACtC76C,OAAQk7C,EAAWJ,mBAAqBC,GAE5Ce,aAAc,CACVn4B,QAASu3B,EAAWN,iBAAmB1f,EAAAA,SAASsY,iBAAiB,OAIzEtoC,EAAS6wC,QAAQC,kBAAkBL,EAAwB,EA+DLl8C,SAAC,kBAC/CL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAO,OAAOK,QA7DZk1C,KAClB/wC,EAAS6wC,QAAQG,iBAAiB,EA4DmBz8C,SAAC,wBAEnD,E,ICrGN08C,E,4CAAqB,SAArBA,GAAAA,EAAAA,EAAqB,iBAArBA,EAAAA,EAAqB,uCAArBA,EAAAA,EAAqB,+BAArBA,EAAAA,EAAqB,oBAArBA,IAAAA,EAAqB,KAOnB,MAAMC,EAA+CA,KACxD,MAAMlxC,GAAWqD,EAAAA,EAAAA,MACV8tC,EAAYC,IAAiBlvC,EAAAA,EAAAA,UAAS+uC,EAAsBI,OAC7D7e,EAAe8e,IACjBC,MAAMt7B,KAAKC,UAAUo7B,GAAQ,EA4EjC,OAAQt0C,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAAC2D,QAAS,QAAQ1M,SAAA,EAClCL,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAACpH,MAAO,SAAS3B,UAC7BL,EAAAA,EAAAA,KAAC26B,EAAAA,EAAiB,CACdC,MAAM,iCACNC,MAAO,CAAC,CACJzwB,MAAO2yC,EAAsBI,MAC7B/6C,KAAM,gBACP,CACCgI,MAAO2yC,EAAsBO,iBAC7Bl7C,KAAM,qBACP,CACCgI,MAAO2yC,EAAsBQ,aAC7Bn7C,KAAM,iBACP,CACCgI,MAAO2yC,EAAsBS,OAC7Bp7C,KAAM,WAEVu3B,eAAiBvvB,IACb8yC,EAAc9yC,GACPkxB,QAAQC,QAAQ,CACnB3B,QAAQ,KAGhB35B,UAAU,+CAGdD,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAO,UAAUK,QAnGV81C,KACf,OAAQR,GACJ,KAAKF,EAAsBI,MACvBrxC,EAAS4vB,OAAOgiB,WAAUplB,IAAkBt4B,EAAAA,EAAAA,KAACg+B,EAAAA,EAA6B,CACtE1F,cAAeA,EACfgG,YAAaA,KAEZ,CACDv1B,MAAO+C,EAASoK,YAAYC,UAAU,gCACtCwnC,gBAAgB,EAChBC,oBAAoB,IAIxB,MACJ,KAAKb,EAAsBO,iBACvBxxC,EAAS4vB,OAAOgiB,WAAUplB,IAAkBt4B,EAAAA,EAAAA,KAAC03B,EAAAA,EAAoC,CAC7EY,cAAeA,EACfH,gBAAiB2D,EAAAA,SAASC,YAAY,IACtCnE,UAAWH,EAAAA,EAAU6lB,iBACrBjlB,UAAW,GACXD,WAAY,KAEZH,sBAAsB,oBACrB,CACDlvB,MAAO+C,EAASoK,YAAYC,UAAU,4CACtC0nC,yBAAyB,EACzBF,gBAAgB,EAChBC,oBAAoB,IAExB,MACJ,KAAKb,EAAsBQ,aACvBzxC,EAAS4vB,OAAOgiB,WAAUplB,IAAkBt4B,EAAAA,EAAAA,KAAC03B,EAAAA,EAAoC,CAC7EY,cAAeA,EACfH,gBAAiB2D,EAAAA,SAASC,YAAY,IACtCnE,UAAWH,EAAAA,EAAUI,KACrBQ,UAAW,GACXD,WAAY,KAEZH,sBAAsB,oBACrB,CACDlvB,MAAO+C,EAASoK,YAAYC,UAAU,6CACtC0nC,yBAAyB,EACzBF,gBAAgB,EAChBC,oBAAoB,IAExB,MACJ,KAAKb,EAAsBS,OACvB1xC,EAAS4vB,OAAOgiB,WAAWplB,IACvBt4B,EAAAA,EAAAA,KAACw4B,EAAAA,EAA2B,CACxBF,cAAeA,EACfH,gBAAiB2D,EAAAA,SAASC,YAAY,IACtC1D,UAAW,GACXD,UAAW,IACXO,SAAUA,KACNL,EAAcC,OAAO,EAEzBM,SAAUA,KACNP,EAAcC,OAAO,KAG9B,CACCxvB,MAAO+C,EAASoK,YAAYC,UAAU,wCACtC0nC,yBAAyB,EACzBF,gBAAgB,EAChBC,oBAAoB,IAMhC,EA4B8C18C,OAAO,gBAAeb,SAAC,6BACnE,E,eCxHV,MAAMy9C,EAAgC,gCAE/B,MAAMC,UAA+Bj+C,EAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KAE/Cy9C,eAAiB,KACrB19C,KAAKwL,SAASmyC,eAAenqC,MAAM,CACtC,CAED/T,MAAAA,GAEI,OAD6BO,KAAKwL,SAASoyC,aAAaC,QAAQL,IAErDh1C,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,CAAK,uDAERL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAO,OAAOK,QAASA,KAC3BrH,KAAKwL,SAASoyC,aAAaE,WAAWN,GACtC1tC,OAAO8mB,SAASmnB,QAAQ,EAC1Bh+C,SAAC,cAIJL,EAAAA,EAAAA,KAAA,OAAAK,UACHL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAO,UAAUK,QAASrH,KAAK09C,eAAe39C,SAAC,sBAE/D,E,4BCnBCi+C,E,qDAAwB,SAAxBA,GAAAA,EAAAA,EAAwB,mBAAxBA,EAAAA,EAAwB,0BAAxBA,IAAAA,EAAwB,KAK7B,IACaC,GAAwBpmC,EAQhCC,EAAAA,GAAWxK,IAAGyK,EAEdD,EAAAA,GAAWxK,IAAG0K,EAEdF,EAAAA,GAAWxK,IAAG8W,EAOdnM,EAAAA,GAAOC,MAAKmM,EAKZpM,EAAAA,GAAOC,OAzBX3Y,EAAAA,EAAAA,KAAQ4Y,EAAT,cAC8C3Y,EAAAA,EAC1CuT,WAAAA,CAAYjV,GACRsa,MAAMta,IAAOya,EAAAA,EAAAA,GAAA,eAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,wBAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,iBAAAmM,EAAA,WAaT8D,SAAW,IACPxoB,KAAKk+C,YAAcF,EAAyBG,QACvD5lC,EAAAA,EAAAA,GAAA,4BAAAkQ,EAAA,OAAAlQ,EAAAA,EAAAA,GAAA,6BAAAmQ,EAAA,OAbG1P,EAAAA,EAAAA,IAAehZ,KACnB,CAyBAP,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACHyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,CAAK,gBACA,CACG,CAACi+C,EAAyBG,OAAQ,WAClC,CAACH,EAAyBI,UAAW,gBACvC7tC,KAAK8tC,IACH71C,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,WAAWwJ,GAAI,YAAc8uB,EAAS,GAAIv0C,MAAOu0C,EAAS,GAC5E1C,QAAS37C,KAAKk+C,YAAcG,EAAS,GACrCr0C,SAAWC,KACP2f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKk+C,UAAYne,SAAS91B,EAAGC,OAAOJ,MAAkC,GACxE,KAGVpK,EAAAA,EAAAA,KAACo7C,EAAK,CAAChyC,MAAO,CAACR,SAAU,UAAWyzC,QAAS,YAAcsC,EAAS,GAAGt+C,SAAEs+C,EAAS,OAV5EA,EAAS,UAc3B71C,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAACw1C,eAAgB,QAAQv+C,SAAA,EACjCyI,EAAAA,EAAAA,MAAC9B,EAAAA,EAAM,CAACM,OAAO,UAAUK,QAASA,KAC9BrH,KAAKu+C,uBAAuB,EAC9Bx+C,SAAA,CAAEC,KAAKw+C,iBAAmB,SAAW,SAAS,cAC/Cx+C,KAAKw+C,kBAAmBh2C,EAAAA,EAAAA,MAAC9B,EAAAA,EAAM,CAACM,OAAO,OAAOK,QAASA,KACpDrH,KAAKy+C,sBAAsB,EAC7B1+C,SAAA,CAAEC,KAAK0+C,QAAU,OAAS,QAAQ,wBAA6B,SAErEh/C,EAAAA,EAAAA,KAAA,OAAAK,SAAK,+KAIJC,KAAKw+C,kBAAmB9+C,EAAAA,EAAAA,KAAC6oB,EAAAA,EAAuB,CAC7CC,SAAUxoB,KAAKwoB,SAEfkB,oBAAqB1pB,KAAKu+C,sBAC1Br5B,OAAQllB,KAAK0+C,UACZ,OAEb,GACHlmC,GAAA2D,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,WAAAvE,GAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA9DqB,CAAM,IAAD/D,GAAA0D,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,oBAAArE,GAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEI,CAAM,IAADkI,GAAAvI,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,aAAApE,GAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEZwhC,EAAyBG,MAAO,IAAD11B,GAAAtM,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,wBAAAgI,GAAA,CAAA/H,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAOpB,KAC3Bxc,KAAK0+C,SAAW1+C,KAAK0+C,OAAO,CAC9B,IAADh2B,GAAAvM,EAAAA,EAAAA,GAAAhE,EAAAiE,UAAA,yBAAAiI,GAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAG+B,KAC5Bxc,KAAKw+C,kBAAoBx+C,KAAKw+C,gBAAgB,CACjD,IA5BI1rC,EA4BJqF,KAAArF,G,eCtBE,MAAM6rC,GAAoBp/C,EAAAA,EAAAA,IAAS,cAAgCC,EAAAA,EAAeuT,WAAAA,GAAA,IAAA6rC,EAAA,SAAA3+C,WAAA2+C,EAAA5+C,KAAA,KAE7E6+C,cAAe,EAAM,KACrBC,mBAAoB,EAAK,KACzBC,gBAAkB,EAAE,KACpBC,eAAkC,CAAC,CACvCC,aAAcj/C,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOkgD,mBAAmBC,2BAA2BC,uBAAuBjgD,WAClIm7B,MAAO,kEACP54B,MAAO,IAAKL,OAAQ,KACrB,CACC49C,aAAcj/C,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOkgD,mBAAmBC,2BAA2BE,uBAAuBlgD,WAClIm7B,MAAO,uCACP54B,MAAO,IAAKL,OAAQ,KACrB,CACC49C,aAAcj/C,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOkgD,mBAAmBC,2BAA2BG,uBAAuBngD,WAClIm7B,MAAO,kEACP54B,MAAO,IAAKL,OAAQ,KACrB,CACC49C,aAAcj/C,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOkgD,mBAAmBC,2BAA2BI,uBAAuBpgD,WAClIm7B,MAAO,yDACP54B,MAAO,IAAKL,OAAQ,MACrB,KAEKm+C,mBAA2C,GAAG,KAE9CC,iBAAmB//B,UACvB,IAAK1f,KAAK0/C,eACN,OAEJ,IAAIC,EAAoB,IAAI95B,EAAAA,EAAmB7lB,KAAKwL,SAAU,CAC1D9J,MAAOk+C,EAAIl+C,MACXL,OAAQu+C,EAAIv+C,OACZykB,uBAAwB9lB,KAAK6+C,cAC9B,CAAC,CAAC94B,KAAM,2BAA4BC,QAAS45B,EAAIX,eAAgB,CAChEx/C,OAAQd,IAAyC,IAAxC,gBAACwnB,EAAe,gBAAE05B,GAAgBlhD,EACvC,MAAM8nB,EAAiBN,EAAgB25B,yBAEvC,IAAIC,EAAgB,EACpB,MAAMC,EAAsBH,EAAgBC,yBAAyBG,UAAUC,WAAW3vC,KAAI4vC,GAAKA,EAAEp6B,OAQ/Fa,EAAeA,KACmBH,EAAeC,MAAMG,aAAa,EAAGm5B,EAAoBD,EAAgBC,EAAoB9/C,SAAS,EAAM,EAcpJ,IAAIkgD,EA0BJ,OAxBA35B,EAAeC,MAAMC,YAAY,CAK7BQ,SAAW/Y,IACP2xC,IAEAK,EAAoBjW,WAAWvjB,EAAc,IAAK,IAQtD5mB,KAAK8+C,kBACLl4B,IAEAw5B,EAAoBjW,WAAWvjB,EAAc,KAGjD5mB,KAAKw/C,mBAAmB7kC,KAAKglC,EAAkBthC,SAExC,KACH4rB,aAAamW,GACbA,OAAoBjgD,CAAS,CAChC,IAITw/C,EAAkBh6B,QAClBg6B,EAAkB/5B,YAAY5lB,KAAK0/C,eAAe,EACpD,KAEMW,oBAAsB,WAA6B,IACnDC,IADsCrgD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACd2+C,EAAKY,mBAAmBe,QAAU3B,EAAKY,mBAAmBgB,MAClFF,IACAA,IACAA,OAAengD,EAEvB,EAAE,KACMu/C,eAAwC,KAAK,KAC7Ce,qBAAwBz7B,IAC5BhlB,KAAK0/C,eAAiB16B,CAAE,CAC1B,CACFvlB,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACHyI,EAAAA,EAAAA,MAACwyC,EAA2B,CAAAj7C,SAAA,EACxByI,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrByI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,WAAWsc,KAAK,cAAcwJ,GAAG,cAAczlB,MAAM,cAC1DE,SAAWxF,IAAQxE,KAAK6+C,aAAer6C,EAAE0F,OAAOyxC,OAAO,EAAK+E,eAAgB1gD,KAAK6+C,gBAErFn/C,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,cAAch8C,SAAC,wBAEnCyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,WAAWsc,KAAK,mBAAmBwJ,GAAG,mBAAmBzlB,MAAM,mBACpEE,SAAWxF,IAAQxE,KAAK8+C,kBAAoBt6C,EAAE0F,OAAOyxC,OAAO,EAAK+E,eAAgB1gD,KAAK8+C,qBAE1Fp/C,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,mBAAmBh8C,SAAC,8BAG5CL,EAAAA,EAAAA,KAACq7C,EAAwB,CAAAh7C,UACrBL,EAAAA,EAAAA,KAAA,OAAAK,SAAOC,KAAKg/C,eAAezuC,KAAI,CAACowC,EAAcr7C,KAC1CkD,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,gBAAgBwJ,GAAI,iBAAmBjqB,EAAGwE,MAAOxE,EAAGo7C,eAAgBp7C,IAAMtF,KAAK++C,gBACjG/0C,SAAUA,KAAQhK,KAAK++C,gBAAkBz5C,CAAC,KAE9C5F,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,iBAAmBz2C,EAAEvF,SAAE4gD,EAAarmB,UAL9C,iBAAmBh1B,aAUzCkD,EAAAA,EAAAA,MAACwyC,EAA2B,CAAAj7C,SAAA,EACxBL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAO,UAAUK,QAASA,KAC9BrH,KAAKy/C,iBAAiBz/C,KAAKg/C,eAAeh/C,KAAK++C,iBAAiB,EAClEh/C,SAAC,iCACHL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAO,OAAOK,QAASrH,KAAKqgD,oBAAoBtgD,SAAC,mBACzDL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAO,OAAOK,QAASA,KAAQrH,KAAKqgD,qBAAoB,EAAM,EAAItgD,SAAC,sBAE/EL,EAAAA,EAAAA,KAAA,OAAK4N,IAAKtN,KAAKygD,yBAIvB,I,kBCxKG,MAAMG,GAAQnjD,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uDACPe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO8J,UAAU,IAC/CvP,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOjG,IAAI,ICI9B++C,GAA8C/iD,IACvD,MAAM0N,GAAWqD,EAAAA,EAAAA,MACViyC,IAAQpzC,EAAAA,EAAAA,UAASlC,EAASu1C,MAAMC,YAChC9iD,EAAO+iD,IAAYvzC,EAAAA,EAAAA,UAAS,WAYnC,OAAOlF,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAACpI,OAAQ,oBAAoBX,SAAA,EAC5CyI,EAAAA,EAAAA,MAAC04C,GAAAA,GAAgB,CAACC,WAAW,SAAQphD,SAAA,EACjCL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,YACH,CAAC,QAAS,WAAWwQ,KAAK6wC,IACvB54C,EAAAA,EAAAA,MAAA,OAAcM,MAAO,CAAClI,OAAQ,OAAOb,SAAA,EACjCL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAM,SAAW+6B,EAAMvxB,GAAI,SAAWuxB,EAAO,IAAMM,EAAIt3C,MAAOs3C,EAC3EzF,QAASyF,IAAOljD,EAChB8L,SAAUA,KACNi3C,EAASG,EAAG,KAGpB1hD,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,SAAW+E,EAAO,IAAMM,EAAGrhD,SAAEqhD,MARvCA,SAalB1hD,EAAAA,EAAAA,KAAC6e,EAAAA,GAAa,CAACrgB,OA3BD4c,EA2BiB5c,EA1BnB,UAAR4c,EACOtP,EAAStN,MAAMuN,aAGfD,EAAStN,MAAMsgB,kBAsBYze,UAClCL,EAAAA,EAAAA,KAACkhD,GAAK,CAAA7gD,SACDjC,EAAMiC,gBA7BnB,IAAkB+a,CAgCZ,E,OC3CH,MAAMumC,GAAe5jD,EAAAA,GAAO8L,MAAK5L,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,4MAK3Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,SAAS,IACxB7L,GAASA,EAAMI,MAAM6J,OAAOwC,iBAE/BjI,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMuC,OAAOC,OAAOC,MAAM,IACxCmG,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAM6J,OAAOqB,iBAAiB,I,uGCC/D,MAAMk4C,GAAgB7jD,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,mIACPe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOjG,IAAI,IAG1CQ,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,IAKpD,IACa0wC,IAAe1pC,GAOvBC,EAAAA,GAAWxK,IAAGyK,GAEdD,EAAAA,GAAWxK,IAAG0K,GAEdF,EAAAA,GAAWxK,IAAG8W,GAEdtM,EAAAA,GAAWxK,IAAG+W,GAEdvM,EAAAA,GAAWxK,IAAGgX,GAEdxM,EAAAA,GAAWxK,IAAGk0C,GAEd1pC,EAAAA,GAAWxK,IAAGm0C,GAEd3pC,EAAAA,GAAWxK,IAAGo0C,GAEd5pC,EAAAA,GAAWxK,IAAGq0C,GAEd7pC,EAAAA,GAAWxK,IAAGs0C,GAEd9pC,EAAAA,GAAWxK,IAAGu0C,GAEd/pC,EAAAA,GAAWxK,IAAGw0C,GAEdhqC,EAAAA,GAAWxK,IAAGy0C,GAEdjqC,EAAAA,GAAWxK,IAAG00C,GAEdlqC,EAAAA,GAAWxK,KApCf/N,EAAAA,EAAAA,KAAQ4Y,GAAT,cACqC3Y,EAAAA,EACjCuT,WAAAA,CAAYjV,GACRsa,MAAMta,IAAOya,EAAAA,EAAAA,GAAA,cAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,mBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,gBAAAmM,GAAA,OAAAnM,EAAAA,EAAAA,GAAA,uBAAAkQ,GAAA,OAAAlQ,EAAAA,EAAAA,GAAA,cAAAmQ,GAAA,OAAAnQ,EAAAA,EAAAA,GAAA,sBAAAoQ,GAAA,OAAApQ,EAAAA,EAAAA,GAAA,qBAAA0pC,GAAA,OAAA1pC,EAAAA,EAAAA,GAAA,eAAA2pC,GAAA,OAAA3pC,EAAAA,EAAAA,GAAA,gBAAA4pC,GAAA,OAAA5pC,EAAAA,EAAAA,GAAA,qBAAA6pC,GAAA,OAAA7pC,EAAAA,EAAAA,GAAA,iBAAA8pC,GAAA,OAAA9pC,EAAAA,EAAAA,GAAA,kBAAA+pC,GAAA,OAAA/pC,EAAAA,EAAAA,GAAA,gBAAAgqC,GAAA,OAAAhqC,EAAAA,EAAAA,GAAA,gBAAAiqC,GAAA,OAAAjqC,EAAAA,EAAAA,GAAA,mBAAAkqC,GAAA,OAEbzpC,EAAAA,EAAAA,IAAehZ,KACnB,CAiCA,iBAAI0iD,GACA,OAAK1iD,KAAK2iD,eAGC3iD,KAAK2iD,eAFL3iD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMk3C,YAKtD,CAEA,iBAAIF,CAAc54C,IACd8f,EAAAA,EAAAA,KAAY,KACR5pB,KAAK2iD,eAAiB74C,CAAK,GAGnC,CAEAiS,iBAAAA,GACI3D,MAAM2D,mBACV,CAGAtc,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACwyC,EAA2B,CAAAj7C,SAAA,EAC/ByI,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrBL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,cACJL,EAAAA,EAAAA,KAAA,OAAAK,SACK,CAAC,UAAW,YAAa,UAAW,OAAQ,UAAW,eAAewQ,KAAKtM,IACxEuE,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,QAAQwJ,GAAI,SAAWtrB,EAAO6F,MAAO7F,EACvD03C,QAAS37C,KAAKgH,SAAW/C,EACzB+F,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKgH,OAAS/C,CAAqB,GACrC,KAGVvE,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,SAAW93C,EAAMlE,SAAEkE,MAV7BA,WAetBuE,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrBL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,oBACJL,EAAAA,EAAAA,KAAA,OAAAK,SACK,CAAC,KAAM,IAAK,IAAK,IAAK,MAAMwQ,KAAKpJ,IAC9BqB,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,cAAcwJ,GAAI,eAAiBpoB,EACrD2C,MAAO3C,EAAaw0C,QAAS37C,KAAKmH,cAAgBA,EAClD6C,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKmH,YAAcA,CAAgC,GACrD,KAGVzH,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,eAAiB50C,EAAYpH,SAAEoH,MAVzCA,QAclBzH,EAAAA,EAAAA,KAAA,MAAAK,SAAI,cACJL,EAAAA,EAAAA,KAAA,OAAAK,SACK,CAAC,QAAS,QAAS,OAAQ,aAAawQ,KAAKrJ,IAC1CsB,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,SAASwJ,GAAI,UAAYroB,EAAQ4C,MAAO5C,EAC1Dy0C,QAAqB,cAAXz0C,QAA0C/G,IAAhBH,KAAKkH,QAAyBlH,KAAKkH,SAAWA,EAClF8C,SAAWC,KACP2f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKkH,OAA6B,cAApB+C,EAAGC,OAAOJ,MAAwBG,EAAGC,OAAOJ,WAAwB3J,CAAS,GAC7F,KAGVT,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,UAAY70C,EAAOnH,SAAEmH,MAV/BA,WAetBsB,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrBL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,sBACJyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,WAAWsc,KAAK,WAAWwJ,GAAG,WAAWzlB,MAAM,WACpD6xC,SAA2B,IAAlB37C,KAAK6iD,SACd74C,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAK6iD,UAAY7iD,KAAK6iD,QAAQ,GAChC,KAGVnjD,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,WAAWh8C,SAAC,kBAEhCL,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAACzH,OAAQ,WACrB3B,EAAAA,EAAAA,KAAA,OAAAK,SACK,CACG,CAACgmB,KAAM,UAAW+8B,UAAW9iD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMq3C,SACpE,CAACh9B,KAAM,WAAY+8B,UAAW9iD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMs3C,UACrE,CAACj9B,KAAM,YAAa+8B,UAAW9iD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM8nB,WACtE,CAACzN,KAAM,WAAY+8B,UAAW9iD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMonB,UACrE,CAAC/M,KAAM,eAAgB+8B,UAAW9iD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMk3C,eAC3EryC,KAAKtJ,IACHuB,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,gBAAgBwJ,GAAI,iBAAmBtoB,EAAK8e,KAC9Djc,MAAO7C,EAAK8e,KAAM41B,QAAS37C,KAAK0iD,gBAAkBz7C,EAAK67C,UACvD94C,SAAUA,IAAMhK,KAAK0iD,cAAgBz7C,EAAK67C,aAE9CpjD,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,iBAAmB90C,EAAK8e,KAAKhmB,SAAEkH,EAAK8e,SAN9C9e,EAAK8e,cAW3Bvd,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrBL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,yBACJL,EAAAA,EAAAA,KAAA,OAAAK,SACK,CAAC,QAAS,UAAW,SAASwQ,KAAK0yC,IAChCz6C,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,kBAAkBwJ,GAAI,mBAAqB0zB,EAC7Dn5C,MAAOm5C,EAAiBtH,QAAS37C,KAAKijD,kBAAoBA,EAC1Dj5C,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKijD,gBAAkBA,CAAiC,GAC1D,KAGVvjD,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,mBAAqBkH,EAAgBljD,SAAEkjD,MAVjDA,QAclBvjD,EAAAA,EAAAA,KAAA,MAAAK,SAAI,sBACJL,EAAAA,EAAAA,KAAA,OAAAK,SACK,CAAC,OAAQ,SAASwQ,KAAKtI,IACpBO,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,gBAAgBwJ,GAAI,iBAAmBtnB,EACzD6B,MAAO7B,EAAe0zC,QAAS37C,KAAKiI,gBAAkBA,EACtD+B,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKiI,cAAgBA,CAA8C,GACrE,KAGVvI,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,iBAAmB9zC,EAAclI,SAAEkI,MAV7CA,WAetBO,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrByI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,YACH,CAAC,OAAQ,QAAS,aAAawQ,KAAK/P,IACjCgI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,UAAUwJ,GAAI,WAAa/uB,EAASsJ,MAAOtJ,EAC7Dm7C,QAAsB,cAAZn7C,QAA4CL,IAAjBH,KAAKQ,SAAuC,SAAZA,IAAuC,IAAjBR,KAAKQ,SAAkC,UAAZA,IAAwC,IAAjBR,KAAKQ,QAClJwJ,SAAWC,KACP2f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKQ,QAA8B,cAApByJ,EAAGC,OAAOJ,WAAwB3J,EAAiC,SAApB8J,EAAGC,OAAOJ,KAAgC,GAC1G,KAGVpK,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,WAAav7C,EAAQT,SAAES,MAVjCA,SAclBd,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAACzH,OAAQ,WACrBmH,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,aACH,CAAC,OAAQ,QAAS,aAAawQ,KAAKvO,IACjCwG,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,WAAWwJ,GAAI,YAAcvtB,EAAU8H,MAAO9H,EAChE25C,QAAuB,cAAb35C,QAA8C7B,IAAlBH,KAAKgC,UAAyC,SAAbA,IAAyC,IAAlBhC,KAAKgC,UAAoC,UAAbA,IAA0C,IAAlBhC,KAAKgC,SACvJgI,SAAWC,KACP2f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKgC,SAA+B,cAApBiI,EAAGC,OAAOJ,WAAwB3J,EAAiC,SAApB8J,EAAGC,OAAOJ,KAAgC,GAC3G,KAGVpK,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,YAAc/5C,EAASjC,SAAEiC,MAVnCA,YAetBtC,EAAAA,EAAAA,KAACq7C,EAAwB,CAAAh7C,UACrByI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,mBACH,CAAC,SAAU,WAAY,OAAQ,QAAQwQ,KAAK5O,IACzC6G,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,gBAAgBwJ,GAAI,iBAAmB5tB,EACzDmI,MAAOnI,EAAeg6C,QAAS37C,KAAK2B,gBAAkBA,EACtDqI,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAK2B,cAAgBA,CAAoC,GAC3D,KAGVjC,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,iBAAmBp6C,EAAc5B,SAAE4B,MAV7CA,WAetB6G,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrByI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,WAAWsc,KAAK,aAAawJ,GAAG,aAAazlB,MAAM,aACxD6xC,SAA6B,IAApB37C,KAAKkB,WACd8I,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKkB,YAAclB,KAAKkB,UAAU,GACpC,KAGVxB,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,aAAah8C,SAAC,qBAElCyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,WAAWsc,KAAK,YAAYwJ,GAAG,YAAYzlB,MAAM,YACtD6xC,SAA4B,IAAnB37C,KAAKyB,UACduI,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKyB,WAAazB,KAAKyB,SAAS,GAClC,KAGV/B,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,YAAYh8C,SAAC,mBAEjCyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,WAAWsc,KAAK,WAAWwJ,GAAG,WAAWzlB,MAAM,WACpD6xC,SAA2B,IAAlB37C,KAAKO,SACdyJ,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKO,UAAYP,KAAKO,QAAQ,GAChC,KAGVb,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,WAAWh8C,SAAC,iBAEhCyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,WAAWsc,KAAK,WAAWwJ,GAAG,WAAWzlB,MAAM,WACpD6xC,SAA2B,IAAlB37C,KAAKuI,SACdyB,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKuI,UAAYvI,KAAKuI,QAAQ,GAChC,KAGV7I,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,WAAWh8C,SAAC,iBAEhCL,EAAAA,EAAAA,KAAA,OAAAK,UACIL,EAAAA,EAAAA,KAAC2hD,GAAY,CACTv4C,MAAO,CAACR,SAAU,SAAU5G,MAAO,SACnC+H,KAAK,OAAOsc,KAAK,cAAcwJ,GAAG,cAAczlB,MAAO9J,KAAKkjD,YAC5Dl5C,SAAWC,KACP2f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKkjD,YAAcj5C,EAAGC,OAAOJ,KAAK,GACpC,UAMlBpK,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAACD,UAAW,QAAQ9I,UAC5BL,EAAAA,EAAAA,KAAC4hD,GAAa,CAAAvhD,UACVL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CACHM,OAAQhH,KAAKgH,OACbE,OAAQlH,KAAKkH,OACbD,KAAMjH,KAAK6iD,SAAW,CAClBn6C,UAAW1I,KAAK0iD,cAChBj8C,KAAMzG,KAAKijD,gBACX/6C,UAAWlI,KAAKiI,oBAChB9H,EACJgH,YAAanH,KAAKmH,YAClB3G,QAASR,KAAKQ,QACdU,WAAYlB,KAAKkB,WACjBO,UAAWzB,KAAKyB,UAChBO,SAAUhC,KAAKgC,SACfL,cAAe3B,KAAK2B,cACpBpB,SAAUP,KAAKO,SACfgI,SAAUvI,KAAKuI,SAASxI,SAEvBC,KAAKkjD,oBAK1B,GACH1qC,IAAA2D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,UAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAjU0B,SAAU,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,eAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAEC,GAAI,IAADkI,IAAAvI,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,YAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEzB,CAAM,IAADiM,IAAAtM,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,mBAAAgI,IAAA,CAAA/H,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAEkB,OAAQ,IAADkM,IAAAvM,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,UAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,WAEI,IAADmM,IAAAxM,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,kBAAAkI,IAAA,CAAAjI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAylC,IAAA9lC,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,iBAAAolC,IAAA,CAAAnlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAIG,MAAO,IAAD0lC,IAAA/lC,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,WAAAqlC,IAAA,CAAAplC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,WAEZ,IAAD2lC,IAAAhmC,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,YAAAslC,IAAA,CAAArlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,WAEE,IAAD4lC,IAAAjmC,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,iBAAAulC,IAAA,CAAAtlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAEJ,QAAS,IAAD6lC,IAAAlmC,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,aAAAwlC,IAAA,CAAAvlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEjC,CAAM,IAAD8lC,IAAAnmC,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,cAAAylC,IAAA,CAAAxlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEJ,CAAM,IAAD+lC,IAAApmC,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,YAAA0lC,IAAA,CAAAzlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEP,CAAM,IAADgmC,IAAArmC,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,YAAA2lC,IAAA,CAAA1lC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEL,CAAM,IAADimC,IAAAtmC,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,eAAA4lC,IAAA,CAAA3lC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAEF,cAAe,IArCxB1J,GAqCuBqF,MAAArF,I,2CC/ChC,MAAMqwC,GAAY1lD,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,iKAOds8B,GAAMA,EAAEh8B,MAAM6J,OAAOmyB,EAAEp4B,OAAS,gBACrBo4B,GAAMA,EAAEh8B,MAAM6J,OAAOmyB,EAAEroB,aAAe,gBACtCqoB,GAAMA,EAAEh8B,MAAM6J,OAAOmyB,EAAEx5B,SAAW,gBACpDw5B,GAAMA,EAAEh8B,MAAM6C,KAAKC,QAAQk5B,EAAEkpB,aAAelpB,EAAEh8B,MAAM6C,KAAKC,QAAQqiD,OACtDnpB,GAAMA,EAAE5xB,UAAY,QAOtC,IACag7C,IAAgCzrC,GAMxCC,EAAAA,GAAWxK,IAAGyK,GAGdD,EAAAA,GAAWxK,IAAG0K,GAGdF,EAAAA,GAAWxK,IAAG8W,GAGdtM,EAAAA,GAAWxK,IAAG+W,GAGdvM,EAAAA,GAAWxK,KAnBf/N,EAAAA,EAAAA,KAAQ4Y,GAAT,cACsD3Y,EAAAA,EAClDuT,WAAAA,CAAYjV,GACRsa,MAAMta,IAAOya,EAAAA,EAAAA,GAAA,kBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,iBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,iBAAAmM,GAAA,OAAAnM,EAAAA,EAAAA,GAAA,kBAAAkQ,GAAA,OAAAlQ,EAAAA,EAAAA,GAAA,gBAAAmQ,GAAA,OACb1P,EAAAA,EAAAA,IAAehZ,KACnB,CAiBAP,MAAAA,GACG,OAAO+I,EAAAA,EAAAA,MAACwyC,EAA2B,CAAAj7C,SAAA,EAC9ByI,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrBL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,mBACJL,EAAAA,EAAAA,KAAA,OAAAK,SACK,CACG,eAAgB,mBAAoB,oBAAqB,uBACzD,iBAAkB,qBAAsB,sBAAuB,yBAC/D,iBAAkB,uBAAwB,aAAc,kBAAmB,kBAAmB,mBAAoB,qBAClH,uBAAwB,kBAC1BwQ,KAAKsB,IACHrJ,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,aAAawJ,GAAI,cAAgB1d,EAAY/H,MAAO+H,EACtE8pC,QAAS37C,KAAK6R,aAAeA,EAC7B7H,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAK6R,WAAaA,CAAU,GAC9B,KAGVnS,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,cAAgBlqC,EAAW9R,SAAE8R,MAVvCA,WAetBrJ,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrBL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,mBACJL,EAAAA,EAAAA,KAAA,OAAAK,SACK,CACG,eAAgB,mBAAoB,oBAAqB,uBACzD,iBAAkB,qBAAsB,sBAAuB,yBAC/D,WAAY,iBAAkB,OAAQ,YAAa,YAAa,aAAc,eAC9E,cACFwQ,KAAKgzC,IACH/6C,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,YAAYwJ,GAAI,aAAeg0B,EAAWz5C,MAAOy5C,EACnE5H,QAAS37C,KAAKujD,YAAcA,EAC5Bv5C,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKujD,UAAYA,CAAS,GAC5B,KAGV7jD,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,aAAewH,EAAUxjD,SAAEwjD,MAVrCA,WAetB/6C,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrBL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,kBACJL,EAAAA,EAAAA,KAAA,OAAAK,SACK,CACG,eAAgB,mBAAoB,oBAAqB,uBACzD,iBAAkB,qBAAsB,sBAAuB,yBAC/D,gBAAiB,sBAAuB,YAAa,iBAAkB,mBAAoB,oBAC3F,qBACFwQ,KAAKizC,IACHh7C,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,YAAYwJ,GAAI,aAAei0B,EAAW15C,MAAO05C,EACnE7H,QAAS37C,KAAKwjD,YAAcA,EAC5Bx5C,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKwjD,UAAYA,CAAS,GAC5B,KAGV9jD,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,aAAeyH,EAAUzjD,SAAEyjD,MAVrCA,WAetBh7C,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EACrBL,EAAAA,EAAAA,KAAA,MAAAK,SAAI,oBACJL,EAAAA,EAAAA,KAAA,OAAAK,SACK,CACG,OAAQ,QAAS,UAAW,SAAU,OAAQ,OAAQ,QAAS,QAAS,aAC1EwQ,KAAK6yC,IACH56C,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,aAAawJ,GAAI,cAAgB6zB,EAAYt5C,MAAOs5C,EACtEzH,QAAS37C,KAAKojD,aAAeA,EAC7Bp5C,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKojD,WAAaA,CAAU,GAC9B,KAGV1jD,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,cAAgBqH,EAAWrjD,SAAEqjD,MAVvCA,QAclB56C,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAC2hD,GAAY,CACT53C,KAAK,SACLX,MAAO,CAACR,SAAU,SAAU5G,MAAO,QACnCkf,IAAK,EACLmzB,IAAK,EACL0P,KAAM,IACN19B,KAAK,WAAWwJ,GAAG,WAAWzlB,MAAO9J,KAAKsI,SAC1C0B,SAAWC,KACP2f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKsI,SAAW+N,KAAK09B,IAAI,EAAG19B,KAAKuK,IAAI,EAAG8iC,WAAWz5C,EAAGC,OAAOJ,QAAQ,GACvE,IAER,cAIXpK,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAACD,UAAW,QAAQ9I,UAC3BL,EAAAA,EAAAA,KAACyjD,GAAS,CACNrhD,KAAM9B,KAAKujD,UACX1xC,WAAY7R,KAAK6R,WACjBnR,OAAQV,KAAKwjD,UACbJ,WAAYpjD,KAAKojD,WACjB96C,SAAUtI,KAAKsI,SAASvI,SAC3B,scAKb,GACHyY,IAAA2D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,cAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBA1IwB,YAAa,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,aAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAGb,MAAO,IAADkI,IAAAvI,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,aAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAGN,WAAY,IAADiM,IAAAtM,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,cAAAgI,IAAA,CAAA/H,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAGV,MAAO,IAADkM,IAAAvM,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,YAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGR,GAAI,IApBlB1J,GAoBiBqF,MAAArF,I,yBClC1B,IACa6wC,IADZpkD,EAAAA,EAAAA,KAAQ4Y,GAAT,cAC2D3Y,EAAAA,EAIvDuT,WAAAA,CAAYjV,GACRsa,MAAMta,IAAOya,EAAAA,EAAAA,GAAA,oBAAAC,GAAA,OAEbQ,EAAAA,EAAAA,IAAehZ,KACnB,CAEAP,MAAAA,GACI,IAAImkD,EAAkB,MAACzjD,GAAWP,OAAOI,KAAKlC,MAAM+lD,QAAQtzC,KAAKzG,IAC7D,MAAM2C,OAAoBtM,IAAV2J,EAAsB,UAAYA,EAAM3K,WAAW2kD,cACnE,OAAOpkD,EAAAA,EAAAA,KAAA,UAAsBoK,MAAOA,EAAQA,EAAM3K,WAAa,GAAGY,SAAE0M,GAAhDA,EAAiE,IAGzF,OAAOjE,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAACR,SAAU,SAAU5G,MAAO,SAAS3B,SAAA,EACpDL,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS/7C,KAAKlC,MAAMimD,UAAUhkD,SAAEC,KAAKlC,MAAMkmD,WAClDtkD,EAAAA,EAAAA,KAACyL,GAAAA,EAAM,CACH4a,KAAM/lB,KAAKlC,MAAMimD,UACjBx0B,GAAIvvB,KAAKlC,MAAMimD,UACfj6C,MAAO9J,KAAKlC,MAAMmmD,aAClBj6C,SAAWxF,IACPxE,KAAKkkD,aAAe1/C,EAAE0F,OAAO7D,QAAQ7B,EAAE0F,OAAOi6C,eAAer6C,MAC7D9J,KAAKlC,MAAMsmD,UAAUpkD,KAAKlC,MAAMimD,UAAW/jD,KAAKkkD,aAAa,EAEjExiD,MAAM,OAAM3B,SAEX6jD,MAGb,GACHprC,IAAA2D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,gBA/BItE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBACOxc,KAAKlC,MAAMmmD,YAAa,IAHrCnxC,GAGoCqF,MAAArF,G,uDCF7C,MAAMgoC,GAAQr9C,EAAAA,GAAO68B,MAAK38B,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,uDAuBpBymD,GAAmBh+C,IAMdmC,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACHL,EAAAA,EAAAA,KAACo7C,GAAK,CAACiB,QAAS11C,EAAQ09C,UAAUhkD,SAAEsG,EAAQ29C,WAC5CtkD,EAAAA,EAAAA,KAACk7C,EAAW,CACR9xC,MAAO,CAACR,SAAU,SAAU5G,MAAO,QACnCo6C,KAAM,EACN/1B,KAAM1f,EAAQ09C,UAAWx0B,GAAIlpB,EAAQ09C,UAAWj6C,MAAOzD,EAAQyD,MAC/DE,SAAWC,IACP5D,EAAQi+C,eAAej+C,EAAQ09C,UAAW95C,EAAGC,OAAOJ,MAAM,OAMpEy6C,GAA0Bl+C,IAMrB3G,EAAAA,EAAAA,KAACikD,GAAyB,CAC7BK,QAAS39C,EAAQ29C,QACjBD,UAAW19C,EAAQ09C,UACnBF,OAAQ,CAAC,OAAQ,SACjBO,UAAWA,CAACL,EAAWj6C,KACnBzD,EAAQi+C,eAAeP,EAAqB,KAAVj6C,OAAe3J,EAAsB,SAAV2J,EAAiB,EAElFm6C,aAAc59C,EAAQ49C,aAAc59C,EAAQ49C,aAAa9kD,gBAAagB,IAI9E,IACaqkD,IAAe3sC,GACvBC,EAAAA,GAAWxK,IAAGyK,GASdD,EAAAA,GAAWxK,IAAG0K,GAadC,EAAAA,GAAOC,MAAKkM,GAUZnM,EAAAA,GAAOC,OAlCX3Y,EAAAA,EAAAA,KAAQ4Y,GAAT,cACqC3Y,EAAAA,EAiBjCuT,WAAAA,CAAYjV,GACRsa,MAAMta,IAAOya,EAAAA,EAAAA,GAAA,oBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,qBAAAE,GAAA,WAHTgsC,oBAAc,GAKlBzrC,EAAAA,EAAAA,IAAehZ,KACnB,CAGA0kD,uBAAAA,CAAwBX,EAAmCj6C,GACnD/E,EAAAA,MAAMk7B,YAAYn2B,UACX9J,KAAK2kD,cAAcZ,GAI9B/jD,KAAK2kD,cAAcZ,GAAaj6C,CACpC,CAGA86C,qBAAAA,CAAsBb,EAAmBj6C,GACrC9J,KAAK6kD,aAAe/6C,CACxB,CAEArK,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACwyC,EAA2B,CAAAj7C,SAAA,EAC/ByI,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,EA/FhBsG,EAgGQ,CACL09C,UAAW,QACXC,QAAS,aACTl6C,MAAO9J,KAAK2kD,cAAcl8C,MAC1B67C,eAAgBtkD,KAAK0kD,0BA9FlCl8C,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACHL,EAAAA,EAAAA,KAACo7C,GAAK,CAACiB,QAAS11C,EAAQ09C,UAAUhkD,SAAEsG,EAAQ29C,WAC5CtkD,EAAAA,EAAAA,KAAC2hD,GAAY,CACTv4C,MAAO,CAACR,SAAU,SAAU5G,MAAO,QACnC+H,KAAK,OAAOsc,KAAM1f,EAAQ09C,UAAWx0B,GAAIlpB,EAAQ09C,UAAWj6C,MAAOzD,EAAQyD,MAC3EE,SAAWC,IACP5D,EAAQi+C,eAAej+C,EAAQ09C,UAAW95C,EAAGC,OAAOJ,MAAM,QA2FzDu6C,GAAgB,CACTN,UAAW,GACXC,QAAS,eACTl6C,MAAO9J,KAAK6kD,aACZP,eAAgBtkD,KAAK4kD,yBAI7BllD,EAAAA,EAAAA,KAACo7C,GAAK,CAACiB,QAAQ,gBAAeh8C,SAAC,8BAC/BL,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACk7C,EAAW,CACR9xC,MAAO,CAAC7E,MAAO,SAAUvC,MAAO,QAChCo6C,KAAM,GACN/1B,KAAK,gBAAgBwJ,GAAG,gBAAgBzlB,MAAO2X,KAAKC,UAAU1hB,KAAK2kD,mBAAexkD,EAAW,GAC7FI,UAAQ,QAIhBiI,EAAAA,EAAAA,MAACuyC,EAAwB,CAAAh7C,SAAA,CACpBwkD,GAAuB,CAChBR,UAAW,kBACXC,QAAS,oBACTM,eAAgBtkD,KAAK0kD,0BAG5BH,GAAuB,CAChBR,UAAW,cACXC,QAAS,eACTM,eAAgBtkD,KAAK0kD,0BAG5BH,GAAuB,CAChBR,UAAW,4BACXC,QAAS,gCACTM,eAAgBtkD,KAAK0kD,0BAG5BH,GAAuB,CAChBR,UAAW,6BACXC,QAAS,+BACTM,eAAgBtkD,KAAK0kD,0BAG5BH,GAAuB,CAChBR,UAAW,oCACXC,QAAS,uCACTM,eAAgBtkD,KAAK0kD,0BAG5BH,GAAuB,CAChBR,UAAW,mBACXC,QAAS,qBACTM,eAAgBtkD,KAAK0kD,0BAG5BH,GAAuB,CAChBR,UAAW,sBACXC,QAAS,uBACTM,eAAgBtkD,KAAK0kD,0BAG5BH,GAAuB,CAChBR,UAAW,0BACXC,QAAS,+BACTM,eAAgBtkD,KAAK0kD,0BAG5BH,GAAuB,CAChBR,UAAW,qBACXC,QAAS,uBACTM,eAAgBtkD,KAAK0kD,0BAG5BH,GAAuB,CAChBR,UAAW,iBACXC,QAAS,mBACTM,eAAgBtkD,KAAK0kD,0BAG5BH,GAAuB,CAChBR,UAAW,2BACXC,QAAS,oCACTM,eAAgBtkD,KAAK0kD,0BAG5BH,GAAuB,CAChBR,UAAW,wBACXC,QAAS,6BACTM,eAAgBtkD,KAAK0kD,8BAKjChlD,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAACD,UAAW,QAAQ9I,UAC5BL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CACHM,OAAO,UACPK,QAASA,KACL,MAAMy9C,GAAYt8C,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACdL,EAAAA,EAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SACTC,KAAK6kD,gBAEVnlD,EAAAA,EAAAA,KAACy4B,GAAAA,EAA2B,CACxBC,cAAe,CACXt2B,KAAM,WACNuF,QAASA,KAAO,IAAD29C,EAEQ,QAAnBA,EAAAhlD,KAAKykD,sBAAc,IAAAO,GAAnBA,EAAqB/sB,OAAO,GAGpCK,gBAAiB,CACbx2B,KAAM,WACNuF,QAASA,KAAO,IAAD49C,EAEQ,QAAnBA,EAAAjlD,KAAKykD,sBAAc,IAAAQ,GAAnBA,EAAqBhtB,OAAO,GAGpCitB,WAAY,CACRpjD,KAAM,2BACNuF,QAASA,KAAO,IAAD89C,EAEQ,QAAnBA,EAAAnlD,KAAKykD,sBAAc,IAAAU,GAAnBA,EAAqBltB,OAAO,GAGpCr3B,OAAO,mBAITyF,GAAyBnB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACxBlF,KAAK2kD,eAAa,IAAES,SAAUA,KAC7BplD,KAAKykD,eAAiB,IAAI,IAIlCzkD,KAAKykD,eAAiBzkD,KAAKwL,SAAS4vB,OAAOgiB,WAAU,IAAM0H,GAAWz+C,EAAQ,EAChFtG,SAAC,qBA7OFsG,KAkPjB,GACCmS,IAAA2D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,gBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,0dAAA/D,IAAA0D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,iBAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAjLyC,CACtC/T,MAAO,gBACT,KAAD0T,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,2BAAApE,IAAAyE,OAAAC,yBAAAvE,GAAAiE,UAAA,2BAAAjE,GAAAiE,YAAAD,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,yBAAAgI,IAAA3H,OAAAC,yBAAAvE,GAAAiE,UAAA,yBAAAjE,GAAAiE,WAdItJ,GAcJqF,MAAArF,I,sBChFAuyC,G,aAAc,SAAdA,GAAAA,EAAc,kBAAdA,EAAc,YAAdA,EAAc,YAAdA,EAAc,YAAdA,EAAc,eAAdA,KAAAA,GAAc,KAQnB,IACaC,IAAaztC,GACrBC,EAAAA,GAAWxK,IAAGyK,GAGdD,EAAAA,GAAWxK,KALf/N,EAAAA,EAAAA,KAAQ4Y,GAAT,cACmC3Y,EAAAA,EAO/BuT,WAAAA,CAAYjV,GAERsa,MAAMta,IAAOya,EAAAA,EAAAA,GAAA,aAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,YAAAE,GAAA,OAEbO,EAAAA,EAAAA,IAAehZ,KACnB,CAEA+b,iBAAAA,GACI3D,MAAM2D,qBACN6N,EAAAA,EAAAA,KAAY,KACR5pB,KAAKiE,MAAQjE,KAAKwL,SAAStN,MAAMuN,aAAa1D,OAAOwb,cAAc,GAE3E,CAEQgiC,gBAAAA,CAAiBC,GACrB,OAAQA,GACJ,KAAKH,GAAeI,KAChB,OAAO,EACX,KAAKJ,GAAeK,KAChB,OAAO,EACX,KAAKL,GAAeM,KAChB,OAAO,EACX,KAAKN,GAAeO,MAChB,OAAO,GACX,QACI,OAEZ,CAEAnmD,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACHyI,EAAAA,EAAAA,MAACwyC,EAA2B,CAAClyC,MAAO,CAACq4C,WAAY,SAAU7C,eAAgB,QAAQv+C,SAAA,EAC/EyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,cAAcwJ,GAAG,uBACnCzlB,MAAO9J,KAAKwL,SAAStN,MAAMuN,aAAa1D,OAAOwb,eAC/Co4B,QAAS37C,KAAKiE,QAAUjE,KAAKwL,SAAStN,MAAMuN,aAAa1D,OAAOwb,eAChEvZ,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKiE,MAAQjE,KAAKwL,SAAStN,MAAMuN,aAAa1D,OAAOwb,cAAc,GACrE,KAGV7jB,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,uBAAuBh8C,SAAC,uBAE5CyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,SACI+J,KAAK,QAAQsc,KAAK,cAAcwJ,GAAG,qBACnCzlB,MAAO9J,KAAKwL,SAAStN,MAAMuN,aAAa1D,OAAO0C,aAC/CkxC,QAAS37C,KAAKiE,QAAUjE,KAAKwL,SAAStN,MAAMuN,aAAa1D,OAAO0C,aAChET,SAAUA,MACN4f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKiE,MAAQjE,KAAKwL,SAAStN,MAAMuN,aAAa1D,OAAO0C,YAAY,GACnE,KAGV/K,EAAAA,EAAAA,KAACo7C,EAAK,CAACiB,QAAS,qBAAqBh8C,SAAC,qBAE1CL,EAAAA,EAAAA,KAAA,OAAAK,UACIL,EAAAA,EAAAA,KAACyL,GAAAA,EAAM,CAACokB,GAAG,YAAYzlB,MAAO9J,KAAKyG,KAAMuD,SAAWxF,KAChDolB,EAAAA,EAAAA,KAAY,KACR5pB,KAAKyG,KAAOjC,EAAE0F,OAAO7D,QAAQ7B,EAAE0F,OAAOi6C,eAAer6C,KAAuB,GAC9E,EACJ/J,SACG,CAACslD,GAAeI,KAAMJ,GAAeQ,QAASR,GAAeK,KAAML,GAAeM,KAAMN,GAAeO,OAAOr1C,KAAI9J,IACxG/G,EAAAA,EAAAA,KAAA,UAAmBoK,MAAOrD,EAAK1G,SAAE0G,GAApBA,aAKpC/G,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAAC2D,QAAS,OAAQxI,MAAOjE,KAAKiE,MAAO6hD,SAAU,QAAQ/lD,SAC9D0c,OAAOspC,KAAKC,GAAAA,GAAmBz1C,KAAIuK,IAChC,IAAImrC,EAAoB,CAAC,EACb,iBAARnrC,IACAmrC,EAAe,CAACnkD,KAAM,SAEd,iBAARgZ,IACAmrC,EAAe,CAACC,UAAU,IAE9B,IAAIC,EAAUnmD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMoP,GACrD,OAAOpb,EAAAA,EAAAA,KAACymD,GAAOjhD,EAAAA,EAAAA,GAAA,CAEXuB,KAAMzG,KAAKulD,iBAAiBvlD,KAAKyG,MACjC9G,UAAW,YAAcmb,EACzBvO,cAAY,GACR05C,GAJCnrC,EAKP,QAIlB,GACHtC,IAAA2D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,SAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAhG2B,MAAO,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,QAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGf6oC,GAAeQ,OAAQ,IANjC/yC,GAMgCqF,MAAArF,I,OCjBzC,MAAMszC,GAAQ3oD,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,uhBAOXe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOjG,IAAI,IAO9BQ,IAAA,IAAC,MAACpE,EAAK,GAAEmoD,GAAG/jD,EAAA,OAAKpE,EAAMC,WAAWkoD,EAAG,IASrCv/C,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAW0S,SAAS,IAKvCy1C,IAAqB/mD,EAAAA,EAAAA,IAAS,cAAiCC,EAAAA,EAExEC,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACHyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,UAAStmD,SAAC,aAGpBL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,cAAatmD,SAAC,mBAGxBL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,gBAAetmD,SAAC,qBAG1BL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,cAAatmD,SAAC,sBAI5ByI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,aAAYtmD,SAAC,iBAGvBL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,iBAAgBtmD,SAAC,uBAG3BL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,mBAAkBtmD,SAAC,yBAG7BL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,iBAAgBtmD,SAAC,0BAI/ByI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,QAAOtmD,SAAC,kBAGlBL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,YAAWtmD,SAAC,oBAI1ByI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,WAAUtmD,SAAC,sBAGrBL,EAAAA,EAAAA,KAAC0mD,GAAK,CAACC,GAAG,eAActmD,SAAC,yBAKrC,I,kCC3EJ,MAAM+6C,GAAQr9C,EAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,2BACZe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO0C,YAAY,IAE7C87C,GAAQ9oD,EAAAA,GAAOC,KAAIoD,KAAAA,IAAAlD,EAAAA,EAAAA,GAAA,2BACZ0E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOwb,cAAc,IAO/C1Q,IAAgBtT,EAAAA,EAAAA,IAAS,cAAkCC,EAAAA,EACrDgnD,qBAAAA,GACJ,OAAOh+C,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAAC29C,QAAS,SAAS1mD,SAAA,EAClCL,EAAAA,EAAAA,KAAA,OAAAK,SAAK,gBACLL,EAAAA,EAAAA,KAAA,OAAAK,UACIyI,EAAAA,EAAAA,MAAA,QAAMM,MAAO,CAAC49C,aAAc,IAAI3mD,SAAA,EAACL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,yBAA4B,eAAWL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAE+P,OAAOoqC,UAAUyM,YAAkB,WAGtI,CACQC,iBAAAA,GACJ,OAAK5mD,KAAKlC,MAAM+oD,aAAaC,SAASC,sBAG/Bv+C,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACHyI,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAAC29C,QAAS,OAAO1mD,SAAA,CAAC,qBAAiBL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,uCACtDyI,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAAC29C,QAAS,SAAS1mD,SAAA,EAC3BL,EAAAA,EAAAA,KAAA,OAAAK,SAAK,YACLyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIyI,EAAAA,EAAAA,MAAA,QAAMM,MAAO,CAAC49C,aAAc,IAAI3mD,SAAA,EAACL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,WAAc,eAAWL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAEC,KAAKlC,MAAM+oD,aAAaC,SAASE,QAAc,QACxHx+C,EAAAA,EAAAA,MAAA,QAAMM,MAAO,CAAC49C,aAAc,IAAI3mD,SAAA,EAACL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,kBAAqB,eAAWL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAEC,KAAKlC,MAAM+oD,aAAaC,SAASG,eAAqB,cAI9Iz+C,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAAC29C,QAAS,SAAS1mD,SAAA,EAC3BL,EAAAA,EAAAA,KAAA,OAAAK,SAAK,SACLyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIyI,EAAAA,EAAAA,MAAA,QAAMM,MAAO,CAAC49C,aAAc,IAAI3mD,SAAA,EAACL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,cAAiB,eAAWL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAEC,KAAKlC,MAAM+oD,aAAaC,SAASI,WAAiB,QAC9H1+C,EAAAA,EAAAA,MAAA,QAAMM,MAAO,CAAC49C,aAAc,IAAI3mD,SAAA,EAACL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,qBAAwB,eAAWL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAEC,KAAKlC,MAAM+oD,aAAaC,SAASK,kBAAwB,QAC5I3+C,EAAAA,EAAAA,MAAA,QAAAzI,SAAA,EAAML,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,aAAgB,eAAWL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAEC,KAAKlC,MAAM+oD,aAAaC,SAASM,UAAgB,cAIzG5+C,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAAC29C,QAAS,SAAS1mD,SAAA,EAC3BL,EAAAA,EAAAA,KAAA,OAAAK,SAAK,kBACLyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EAAKL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,YAAe,eAAWL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,UAA8C,IAA5CC,KAAKlC,MAAM+oD,aAAaC,SAASO,OAAkB,QAAsD,IAA5CrnD,KAAKlC,MAAM+oD,aAAaC,SAASO,OAAmB,QAAU,qBAG7K7+C,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAAC29C,QAAS,SAAS1mD,SAAA,EAC3BL,EAAAA,EAAAA,KAAA,OAAAK,SAAK,cACLyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EAAKL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,YAAe,iDACvBL,EAAAA,EAAAA,KAAA,OAAAK,SAAK,oGACJC,KAAKlC,MAAM+oD,aAAaC,SAASQ,OAAO/2C,KAAI,CAACg3C,EAAOjiD,KAC1C5F,EAAAA,EAAAA,KAAA,OAAAK,UAAaL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAE0hB,KAAKC,UAAU6lC,MAA1BjiD,SAEzBkD,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EAAKL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,mBAAsB,kDAA8CL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAEC,KAAKlC,MAAM+oD,aAAaC,SAASU,gBAAsB,cAjC5I9nD,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAAC29C,QAAS,OAAO1mD,SAAC,8BAoC7C,CACQ0nD,yBAAAA,GACJ,OAAOj/C,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACHyI,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAAC29C,QAAS,OAAO1mD,SAAA,CAAC,qBAAiBL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,eACtDyI,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAAC29C,QAAS,SAAS1mD,SAAA,EAC3BL,EAAAA,EAAAA,KAAA,OAAAK,SAAK,SACLyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIyI,EAAAA,EAAAA,MAAA,QAAMM,MAAO,CAAC49C,aAAc,IAAI3mD,SAAA,EAACL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,aAAgB,eAAWL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAE2nD,GAAAA,EAAO1rC,GAAG+J,OAAa,QAClGvd,EAAAA,EAAAA,MAAA,QAAAzI,SAAA,EAAML,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,gBAAmB,eAAWL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAE2nD,GAAAA,EAAO1rC,GAAGtP,UAAgB,cAGrFlE,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAAC29C,QAAS,SAAS1mD,SAAA,EAC3BL,EAAAA,EAAAA,KAAA,OAAAK,SAAK,cACLyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,EACIyI,EAAAA,EAAAA,MAAA,QAAMM,MAAO,CAAC49C,aAAc,IAAI3mD,SAAA,EAACL,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,kBAAqB,eAAWL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAE2nD,GAAAA,EAAOC,QAAQ5hC,OAAa,QAC5Gvd,EAAAA,EAAAA,MAAA,QAAAzI,SAAA,EAAML,EAAAA,EAAAA,KAACo7C,GAAK,CAAA/6C,SAAC,qBAAwB,eAAWL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAE2nD,GAAAA,EAAOC,QAAQj7C,UAAgB,cAG/FlE,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAAC29C,QAAS,SAAS1mD,SAAA,EAC3BL,EAAAA,EAAAA,KAAA,OAAAK,SAAK,eACLL,EAAAA,EAAAA,KAAA,OAAAK,UACIyI,EAAAA,EAAAA,MAAA,QAAMM,MAAO,CAAC49C,aAAc,IAAI3mD,SAAA,EAACL,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAE2nD,GAAAA,EAAOE,SAASlmD,QAAc,OAAGhC,EAAAA,EAAAA,KAAC6mD,GAAK,CAAAxmD,SAAE2nD,GAAAA,EAAOE,SAASvmD,mBAIlH,CACA5B,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAAA,OAAKM,MAAO,CAACR,SAAU,IAAIvI,SAAA,CAC5BC,KAAKwmD,wBACLxmD,KAAK4mD,oBACL5mD,KAAKynD,8BAEf,IAGSI,IAAsBxwC,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,iBCnGnDi1C,IAAqBtpD,EAAAA,EAAAA,GAAU,sBCA/BupD,IAAmBvpD,EAAAA,EAAAA,GAAU,oBCA7BwpD,IAA4BxpD,EAAAA,EAAAA,GAAU,6B,gBCK5C,MAAMypD,GAAwCC,IACjD,MAAOC,EAAQC,IAAa16C,EAAAA,EAAAA,WAAS,GAMrC,OAAQw6C,EAASG,iBACX,MACA7/C,EAAAA,EAAAA,MAACs/C,GAAkB,CAAA/nD,SAAA,EACjBL,EAAAA,EAAAA,KAAA,SAAO+J,KAAK,WAAW8lB,GAAI24B,EAASniC,KAAMA,KAAK,oBAAoB1e,QAPtDihD,KACjBF,GAAWD,EAAO,KAOdzoD,EAAAA,EAAAA,KAACqoD,GAAgB,CAAChM,QAASmM,EAASniC,KAAKhmB,SAAEmoD,EAASz/C,SACpD/I,EAAAA,EAAAA,KAACnB,GAAAA,EAAoB,CAAC4pD,OAAQA,KAC9BzoD,EAAAA,EAAAA,KAACsoD,GAAyB,CAACG,OAAQA,EAAOpoD,SAAEmoD,EAASK,aACpC,E,gBChBtB,MAAMC,IAAwCjpD,EAAAA,EAAAA,KAAS,KAC1D,MAAMiM,GAAWqD,EAAAA,EAAAA,KAEjB,OACInP,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAACD,UAAW,QAAQ9I,UAC5BL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CACHM,OAAO,UACPK,QAASA,KACL,MAAMohD,EAAcj9C,EAAStN,MAAMuN,aAAaC,MAAMg9C,gBACtDl9C,EAAS4vB,OAAOC,oBAAoB,CAChC5yB,MAAO+C,EAASoK,YAAYC,UAAU,kBACtC/T,KATD,6nFAUC6mD,gBAAgB,EAChB1hD,MAAMvH,EAAAA,EAAAA,KAAC+oD,EAAW,CAAC3/C,MAAO,CAAC2D,QAAS,UAAWhG,KAAM,MACrDmiD,yBAAyB,EACzBltB,QAAS,CACL,CACI55B,KAAM0J,EAASoK,YAAYC,UAAU,MACrC8lB,aAAc,UACdt0B,QAASqY,SAAYmc,GAAAA,EAAkCC,0BAGjE,EACJ/7B,SACL,iBAGC,I,eCzBP,MAAM8oD,GAA4CA,KACrD,MAAMr9C,GAAWqD,EAAAA,EAAAA,KACXi6C,GAAmB/9B,EAAAA,EAAAA,cAAY,KACjCvf,EAAS4vB,OAAOgiB,WAAUplB,IAAkBt4B,EAAAA,EAAAA,KAACqpD,GAAAA,EAAuB,CAChE/wB,cAAeA,EACfgxB,WAAaC,IACTxkD,QAAQC,IAAIukD,EAAO,EAEvBC,gBAAiBA,IAAM,MACvBC,gBAAiBA,IAAM,OACtB,CACD1gD,MAAO+C,EAASoK,YAAYC,UAAU,oBACtCuzC,qBAAqB,EACrB9L,oBAAoB,EACpBsL,yBAAyB,EACzBS,kBAAmBA,OACnBhM,gBAAgB,GAClB,GACH,CAAC7xC,EAAS4vB,OAAQ5vB,EAASoK,cAExB0zC,GAA2Bv+B,EAAAA,EAAAA,cAAY,KACzCvf,EAAS4vB,OAAOC,oBAAoB,CAChCkuB,QAAS/9C,EAAStN,MAAMuN,aAAaC,MAAMg9C,gBAC3CjgD,MAAO+C,EAASoK,YAAYC,UAAU,2BACtC/T,KAAM0J,EAASoK,YAAYC,UAAU,6BACrC6lB,QAAS,CACL,CACI55B,KAAM0J,EAASoK,YAAYC,UAAU,MACrC8lB,aAAc,UACdt0B,QAASqY,SACEmc,GAAAA,EAAkCC,0BAIvD,GACH,CAACtwB,EAAS4vB,OAAQ5vB,EAAStN,MAAOsN,EAASoK,cAE9C,OAAQpN,EAAAA,EAAAA,MAAC04C,GAAAA,GAAgB,CAAAnhD,SAAA,EACrBL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAQ,UAAWK,QAASyhD,EAAiB/oD,SAAC,2BACtDL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CAACM,OAAQ,YAAaK,QAASiiD,EAAyBvpD,SAAC,gCACjD,EC3CVypD,IAAqCjqD,EAAAA,EAAAA,KAAS,KACvD,MAAMiM,GAAWqD,EAAAA,EAAAA,KACjB,OACInP,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAACD,UAAW,QAAQ9I,UAC5BL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CACHM,OAAO,UACPK,QAASA,KAAQmE,EAASi+C,WAAWC,2BAA2B,EAAG3pD,SACtE,sBAGC,ICMR4pD,GAAmC,CACrC,CACI5jC,KAAM,gBACNtd,MAAO,2BACP8/C,UAAU7oD,EAAAA,EAAAA,KAACmpD,GAA+B,KAE9C,CACI9iC,KAAM,cACNtd,MAAO,gCACP8/C,UAAU7oD,EAAAA,EAAAA,KAACs6C,EAAkC,KAC9C,CACCj0B,KAAM,UACNtd,MAAO,WACP8/C,UAAU7oD,EAAAA,EAAAA,KAAC67C,EAAe,KAC3B,CACCx1B,KAAM,kBACNtd,MAAO,gCACP8/C,UAAU7oD,EAAAA,EAAAA,KAACg9C,EAAkC,KAC9C,CACC32B,KAAM,iBACNtd,MAAO,kBACP8/C,UAAU7oD,EAAAA,EAAAA,KAAC+9C,EAAsB,KAClC,CACC13B,KAAM,mBACNtd,MAAO,oBACP8/C,UAAU7oD,EAAAA,EAAAA,KAACu+C,EAAwB,KACpC,CACCl4B,KAAM,YACNtd,MAAO,aACP8/C,UAAU7oD,EAAAA,EAAAA,KAACi/C,EAAiB,KAC7B,CACC54B,KAAM,UACNtd,MAAO,UACP8/C,UAAU7oD,EAAAA,EAAAA,KAACmhD,GAAa,CAAA9gD,UAACL,EAAAA,EAAAA,KAAC6hD,GAAe,OAC1C,CACCx7B,KAAM,2BACNtd,MAAO,8BACP8/C,UAAU7oD,EAAAA,EAAAA,KAACmhD,GAAa,CAAA9gD,UAACL,EAAAA,EAAAA,KAAC4jD,GAAgC,MAC1D+E,kBAAkB,GACnB,CACCtiC,KAAM,SACNtd,MAAO,SACP8/C,UAAU7oD,EAAAA,EAAAA,KAAC8kD,GAAe,KAC5B,CACEz+B,KAAM,gBACNtd,MAAO,iBACP8/C,UAAU7oD,EAAAA,EAAAA,KAAC8oD,GAA2B,KAE1C,CACIziC,KAAM,QACNtd,MAAO,QACP8/C,UAAU7oD,EAAAA,EAAAA,KAAC4lD,GAAa,KACzB,CACCv/B,KAAM,aACNtd,MAAO,cACP8/C,UAAU7oD,EAAAA,EAAAA,KAAC4mD,GAAkB,KAC9B,CACCvgC,KAAM,cACNtd,MAAO,eACP8/C,UAAU7oD,EAAAA,EAAAA,KAACmoD,GAAmB,KAElC,CACI9hC,KAAM,aACNtd,MAAO,cACP8/C,UAAU7oD,EAAAA,EAAAA,KAAC8pD,GAAwB,MAIpC,SAASI,KACZ,OACIlqD,EAAAA,EAAAA,KAACq6C,EAAgC,CAAAh6C,SAC5B4pD,GAAUp5C,KAAI23C,GAAYD,GAAqCC,MAG5E,C,+FC5FO,MAAM2B,GAAWrrD,EAAAA,EAAAA,GAAU,Y,eCA3B,MAAMsrD,GAAoBtrD,EAAAA,EAAAA,GAAU,qB,yDC2BpC,MAAMurD,GAAgDxqD,EAAAA,EAAAA,KAAUzB,IAAW,IAADksD,EAAAC,EAC7E,MAAMz+C,GAAWqD,EAAAA,EAAAA,KACXq7C,GAAiB/6C,EAAAA,EAAAA,QAA4B,MAC7Cg7C,GAAkBh7C,EAAAA,EAAAA,QAAgC,MAClDi7C,GAAej7C,EAAAA,EAAAA,QAA4B,IAC3Ck7C,EAAevsD,EAAMkqC,oBAAoBqiB,aAEzCC,GAAoBv/B,EAAAA,EAAAA,cAAY,IAC/Bo/B,EAAgB57C,QACRzQ,EAAMkqC,oBAAoBuiB,eAAezsD,EAAMmV,SAAUk3C,EAAgB57C,QAASzQ,EAAM0sD,gBAExF,MAGZ,CAAC1sD,EAAMmV,SAAUnV,EAAM0sD,eAAgB1sD,EAAMkqC,uBAEhDr6B,EAAAA,EAAAA,YAAU,KAEN,MAAM88C,EAAcH,IACpBJ,EAAe37C,QAAUk8C,EAEzB,MAAMC,EAAeP,EAAgB57C,QAErC,MAAO,KACQ,OAAXk8C,QAAW,IAAXA,GAAAA,EAAaE,UACb,IACOD,IACCA,EAAaE,OAAS,GACtBF,EAAat2C,IAAM,GACnBs2C,EAAaG,QAEjBV,EAAgB57C,QAAU,IAC9B,CACA,MAAOG,GACHlD,EAAS2L,OAAOxI,MAAM,mDAAoDD,EAC9E,EACH,GAEF,CAAC47C,EAAmB9+C,EAAS2L,SAGhC,MAAM2zC,GAAY//B,EAAAA,EAAAA,cAAY,KAAO,IAADggC,EACV,QAAtBA,EAAAb,EAAe37C,eAAO,IAAAw8C,GAAtBA,EAAwBF,MAAM,GAC/B,IAEGG,GAAYjgC,EAAAA,EAAAA,cAAY,KAAO,IAADkgC,EACV,QAAtBA,EAAAf,EAAe37C,eAAO,IAAA08C,GAAtBA,EAAwB36B,MAAM,GAC/B,IAEG46B,GAAangC,EAAAA,EAAAA,cAAY,KAAO,IAADogC,EACX,QAAtBA,EAAAjB,EAAe37C,eAAO,IAAA48C,GAAtBA,EAAwB5kC,OAAO,GAChC,IAEG6kC,GAAYrgC,EAAAA,EAAAA,cAAY,KAAO,IAADsgC,EACV,QAAtBA,EAAAnB,EAAe37C,eAAO,IAAA88C,GAAtBA,EAAwBV,UACxBT,EAAe37C,QAAU+7C,IACzBU,GAAW,GACZ,CAACV,EAAmBU,KAIvBr9C,EAAAA,EAAAA,YAAU,KAEN,MAAM29C,EAAYlB,EAAa77C,QAc/B,OAZA+8C,EAAU3wC,MAAKlL,EAAAA,EAAAA,KAAS,SAAA87C,EAAA,OAA4B,QAA5BA,EAAMrB,EAAe37C,eAAO,IAAAg9C,OAAA,EAAtBA,EAAwBtgD,QAAQ,IAAGA,IAC7DnN,EAAM6pC,QAAQ18B,EAAUA,EAAWmgD,OAAYjrD,EAAU,KAG7DmrD,EAAU3wC,MAAKlL,EAAAA,EAAAA,KAAS,SAAA+7C,EAAA,OAA4B,QAA5BA,EAAMtB,EAAe37C,eAAO,IAAAi9C,OAAA,EAAtBA,EAAwBC,SAAS,IAAGA,IAC9D3tD,EAAM8pC,UAAU6jB,EAAU,KAG9BH,EAAU3wC,MAAKlL,EAAAA,EAAAA,KAAS,SAAAi8C,EAAA,OAA4B,QAA5BA,EAAMxB,EAAe37C,eAAO,IAAAm9C,OAAA,EAAtBA,EAAwBC,qBAAqB,IAAGA,IAC1E7tD,EAAM+pC,wBAAwB8jB,EAAsB,KAGjD,KACHL,EAAUM,SAAQhjB,GAAKA,MACvBwhB,EAAa77C,QAAU,EAAE,CAC5B,GAEF,CAACzQ,EAAOstD,KAEXz9C,EAAAA,EAAAA,YAAU,KAEH08C,EACKvsD,EAAMgqC,iBAAmBhqC,EAAMiqC,WAC/BijB,IACOltD,EAAM+tD,gBACbf,IAEAI,IAGJA,GACJ,IAGJ,MAAMY,EAAuBA,KACuC,IAADC,EAA3D1B,GAAgBvsD,EAAMgqC,iBAAmBhqC,EAAMiqC,aAC/CijB,IACsB,QAAtBe,EAAA7B,EAAe37C,eAAO,IAAAw9C,GAAtBA,EAAwBC,YAAY,OAAQ,kBAC5CxgD,EAASqd,UAAU+S,cAAc99B,EAAMkqC,oBAAoBikB,WAAY,WAAY,mBAAoBnuD,EAAMmV,SAAS8B,UAAU,GACpI,EAYJ,OACIvM,EAAAA,EAAAA,MAACshD,EAAiB,CACdnqD,UAAWsX,KAAWnX,EAAAA,EAAAA,IAAQ,sBAAuBhC,EAAM6B,WAC3DusD,eAAgB/hD,QAA8B,QAAvB6/C,EAACE,EAAe37C,eAAO,IAAAy7C,OAAA,EAAtBA,EAAwByB,WAChDU,2BAA4BhiD,QAA8B,QAAvB8/C,EAACC,EAAe37C,eAAO,IAAA07C,OAAA,EAAtBA,EAAwB0B,uBAC5DS,aAActuD,EAAM2O,QAAQ1M,SAAA,EAE5BL,EAAAA,EAAAA,KAACmqD,EAAQ,CACLv8C,IAAK68C,EACLkC,aAAa,EACb3kB,MAAO5pC,EAAM4pC,MACbQ,KAAMpqC,EAAMoqC,OAnBKokB,MAAO,IAADC,EAAAC,EAC/B,OAAyB,QAAtBD,EAAArC,EAAe37C,eAAO,IAAAg+C,GAAtBA,EAAwBE,iBAA2C,QAAxBD,EAACrC,EAAgB57C,eAAO,IAAAi+C,IAAvBA,EAAyBtnC,OAC7D,MAECxlB,EAAAA,EAAAA,KAACgtD,EAAAA,EAAkB,CAACrlD,QAASykD,GACzC,EAgBKQ,KACe,G,2FCvJrB,MCNMK,EDM6BlvD,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iEAElCe,IAAA,IAAC,MAACT,EAAK,YAAE0uD,GAAYjuD,EAAA,OAAMiuD,IAAet7C,EAAAA,EAAAA,GAAUpT,EAAM6J,OAAO8J,WAAW1S,WAAY,GAAI,IAGxGmD,IAAA,IAAC,QAACuqD,GAAQvqD,EAAA,OAAMuqD,GAGdhsD,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,0EAHqBiD,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,iEAM9B,G,iEEjBE,MCAMkvD,E,SDA4BrvD,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,ueAMjCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO2P,gBAAgBvY,UAAU,IAEzDmD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWyS,UAAU,G,iEER9C,MCAMm8C,E,SDAsBtvD,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2TAI3BE,GAASA,EAAMI,MAAM6J,OAAOilD,gBAEjCruD,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWyS,UAAU,IAEvB9S,GAASA,EAAMI,MAAMqT,WAAWC,cAAczJ,OAAO0J,SAASgG,gBAG/EnV,IAAA,IAAC,MAACpE,GAAMoE,EAAA,SAAA1C,OAAQ1B,EAAMC,WAAWC,UAAS,SAAAwB,OAAQ1B,EAAMC,WAAWutC,UAAS,IAI5E5kC,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,SAAAlH,OAAQ1B,EAAMC,WAAWo3C,UAAS,SAAA31C,OAAQ1B,EAAMC,WAAWutC,UAAS,G,gDEflF,MAAMuhB,GAAkBzuD,E,SAAAA,GAAU,kB,iICClC,MCDO0uD,EDCyBzvD,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,wIAIpBE,GAASA,EAAMI,MAAMa,OAAOC,OAAOmuD,UAAUhuD,a,eELnE,MAAMiuD,GAAmB5uD,EAAAA,EAAAA,GAAU,oBCA7B6uD,GAAe7uD,EAAAA,EAAAA,GAAU,gB,eCY/B,MAAM8uD,UAAiC9tD,EAAAA,EAEpC+tD,aAAAA,GACN,OAAQ7tD,EAAAA,EAAAA,KAAC0tD,EAAgB,CAACztD,UAAU,kBAAiBI,SAAC,KACxD,CACQytD,eAAAA,GACN,OAAGxtD,KAAKlC,MAAMgM,OACJpK,EAAAA,EAAAA,KAACwtD,EAAgB,CAACvtD,UAAU,uBAG/BK,KAAKutD,eACd,CAEQE,kBAAAA,GACN,OAAG1oD,EAAAA,MAAMiP,QAAQhU,KAAKlC,MAAMgM,OACnB9J,KAAKutD,iBAGN7tD,EAAAA,EAAAA,KAAC0tD,EAAgB,CAACztD,UAAU,qBAAoBI,SAAEC,KAAKlC,MAAMgM,OACvE,CAGQ4jD,YAAAA,GACN,OAAG1tD,KAAKlC,MAAM2L,OAASkkD,EAAAA,EAAmBC,MACjC5tD,KAAKwtD,kBAGPxtD,KAAKytD,oBACd,CAEAhuD,MAAAA,GACE,OACE+I,EAAAA,EAAAA,MAAA,MAAAzI,SAAA,EACEL,EAAAA,EAAAA,KAAC2tD,EAAY,CAAC1tD,UAAU,gBAAeI,SAAEC,KAAKlC,MAAM2K,QACnDzI,KAAK0tD,iBAIZ,EClDK,MAAMG,GAAoBrvD,EAAAA,EAAAA,GAAU,qBCUpC,MAAMsvD,UAAmCtuD,EAAAA,EAEtCuuD,uBAAAA,CAAwBC,GAC9B,IAAIlzC,EAAMkzC,EAAMC,QAAO,CAACC,EAAKC,IAASA,EAAK1lD,MAAQ,IAAMylD,GAAK,IAC9D,OACExuD,EAAAA,EAAAA,KAAA,MAAAK,SACGiuD,EAAMz9C,KAAI69C,IAAS1uD,EAAAA,EAAAA,KAAC4tD,EAAwB,CAAkB7kD,MAAO2lD,EAAK3lD,MAAOgB,KAAM2kD,EAAK3kD,KAAMK,MAAOskD,EAAKtkD,OAA5DskD,EAAK3lD,UADjDqS,EAIb,CAEArb,MAAAA,GACE,GAAkC,IAA/BO,KAAKlC,MAAMuwD,SAASnuD,OACrB,OAAO,KAGT,IAAIouD,GAASC,EAAAA,EAAAA,IAAmBvuD,KAAKlC,MAAMuwD,SAAU,GAErD,OACI3uD,EAAAA,EAAAA,KAACmuD,EAAiB,CAACluD,UAAU,iCAAiC6uD,YAAa,EAAEzuD,UACzEL,EAAAA,EAAAA,KAAA,SAAAK,SACGuuD,EAAO/9C,KAAIk+C,GAASzuD,KAAK+tD,wBAAwBU,QAI9D,E,iBClCK,MCDMC,EDC+BjxD,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4BEDzC+wD,GAA0BnwD,EAAAA,EAAAA,GAAU,2BCQ1C,MAAMowD,UAAoCpvD,EAAAA,EAE/CC,MAAAA,GAEE,OACE+I,EAAAA,EAAAA,MAACkmD,EAAqB,CAAC/uD,UAAU,0BAAyBI,SAAA,EACxDL,EAAAA,EAAAA,KAACutD,EAAAA,EAAe,CAAAltD,SACbC,KAAKwL,SAASoK,YAAYC,UAAU,mBAEvCnW,EAAAA,EAAAA,KAACivD,EAAuB,CAAC55C,SAAU/U,KAAKlC,MAAMiX,aAGpD,E,mBCnBF,MAAM82B,EAAapuC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2GAOvBkuC,EAAQD,EACRG,GAAYvuC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,qCCTvBixD,GDaqC3iB,EAAAA,EAAAA,GAAeJ,EAAOE,G,eEAxE,MAAMn5B,UAAsBrT,EAAAA,EAElBsvD,qBAAAA,CAAsB77C,GAAqB,IAAD87C,EAEhD,IAAI97C,EAAS+7C,WACX,OAAO,KAGT,IAAIC,EAAkBjvD,KAAKwL,SAASye,cAAcC,KAAK+kC,gBAEnDC,EAA4C,OAAfD,QAAe,IAAfA,GAAmC,QAApBF,EAAfE,EAAiBE,0BAAkB,IAAAJ,OAApB,EAAfA,EAAqCK,qBAEtE,OAAIrqD,EAAAA,MAAMkP,kBAAkBi7C,IAA+BA,GAElDxvD,EAAAA,EAAAA,KAACkvD,EAA2B,CAAC75C,SAAU9B,EAAS8B,WAGlD,IACT,CAEAtV,MAAAA,GACE,IAAIwT,EAAWjT,KAAKlC,MAAMmV,SAE1B,OACEzK,EAAAA,EAAAA,MAACqmD,EAA2B,CAAClvD,UAAU,iCAAgCI,SAAA,CACpEC,KAAKlC,MAAMuxD,oBACZ3vD,EAAAA,EAAAA,KAACouD,EAA0B,CAACO,SAAUruD,KAAKlC,MAAMwxD,4BAA4BC,mBAAmBt8C,KAC/FjT,KAAK8uD,sBAAsB77C,KAIlC,EAGK,MAAMu8C,GAAoCn4C,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,+B,qIC1C9E,MAAMg5B,GAAapuC,EAAAA,EAAAA,IAAOqB,EAAAA,EAAPrB,CAAaE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gGAO1BkuC,GAAQruC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,qHAInBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW4tC,UAAU,IAM/CC,GAAYvuC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,6BCtBvB6xD,GD0BwBvjB,EAAAA,EAAAA,GAAeJ,EAAOE,G,eElBpD,MAAM0jB,GAA2BnwD,EAAAA,EAAAA,IACpC,cAAuCC,EAAAA,EAEnCC,MAAAA,GACI,IAAIwT,EAAWjT,KAAKlC,MAAMmV,SACtB08C,EAAW18C,EAAS28C,WAAa38C,EAAS28C,WAAa38C,EAAS48C,oBAGpE,OACInwD,EAAAA,EAAAA,KAAC+vD,EAAc,CAAyB9vD,UAAU,sBAAsByU,IAAKu7C,EAAUG,YAAa78C,EAAS48C,qBAAxF58C,EAAS8B,SAEtC,I,MClBD,MCDMg7C,EDCoBtyD,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2EEO9BoyD,GAAuBzwD,EAAAA,EAAAA,IAChC,cAAmCC,EAAAA,EAE/BC,MAAAA,GACI,IAAIwT,EAAWjT,KAAKlC,MAAMmV,SAG1B,OACIvT,EAAAA,EAAAA,KAACqwD,EAAU,CAAAhwD,UACPyI,EAAAA,EAAAA,MAAA,SAAO9G,MAAO,OAAQkpD,OAAQ33C,EAAS28C,WAAYK,UAAU,EAAM/nB,MAAM,EAAKnoC,SAAA,EAE1EL,EAAAA,EAAAA,KAAA,UAAQ0U,IAAK,+BAAgC3K,KAAM,eAEnD/J,EAAAA,EAAAA,KAACgwD,EAAwB,CAACz8C,SAAUjT,KAAKlC,MAAMmV,eALtCA,EAAS8B,SASlC,IChBKm7C,GAAgC3wD,EAAAA,EAAAA,IACzC,cAA4CC,EAAAA,EACxCC,MAAAA,GACI,OAAIO,KAAKlC,MAAMmV,SAASk9C,iBAEhBzwD,EAAAA,EAAAA,KAACswD,EAAoB,CAAC/8C,SAAUjT,KAAKlC,MAAMmV,YAI3CvT,EAAAA,EAAAA,KAACgwD,EAAwB,CAACz8C,SAAUjT,KAAKlC,MAAMmV,UAG3D,G,uFCpBD,MAAM4L,EAA+BphB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uRAM3Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,GAM7CgyD,EAAAA,IACQ9tD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,G,gDCd7C,MAAM0gB,GAAsBtgB,E,SAAAA,GAAU,sB,iICGtC,MAAM6xD,EAAwB5yD,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8kBAIzBE,GAASA,EAAMI,MAAM6J,OAAO8J,aAEzClT,IAAA,IAAC,YAAC+f,GAAY/f,EAAA,OAAM+f,EAAc,EAAI,IAAI,GACtCitB,EAAAA,EAAiB,EAMxB2kB,EAAAA,IACkBxyD,GAASoG,EAAAA,GAAMC,QAAQrG,EAAMI,MAAM6J,OAAOwC,eAAgB,KAAMjG,SAE9DxG,GAASoG,EAAAA,GAAMC,QAAQrG,EAAMI,MAAM6J,OAAOwC,eAAgB,IAAKjG,QAKpFisD,EAAAA,GAA2BC,EAAAA,GAA4BC,EAAAA,IAIjDnuD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,GAG1CkyD,EAAAA,I,4BC3BD,MAAMI,GAAmBjzD,EAAAA,EAAAA,IAAO4yD,EAAP5yD,CAA6BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4KACvD0yD,EAAAA,GACkBpsD,EAAAA,GAAMC,QAAQwsD,EAAAA,EAAWC,QAAS,KAAMtsD,OAEtCJ,EAAAA,GAAMC,QAAQwsD,EAAAA,EAAWC,QAAS,IAAKtsD,Q,iBCJ1D,MAAMusD,GAAwBpzD,EAAAA,EAAAA,IAAO4yD,EAAP5yD,CAA6BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sMAC5C+yD,EAAAA,EAAWG,QAC3BR,EAAAA,GACkBpsD,EAAAA,GAAMC,QAAQwsD,EAAAA,EAAWG,QAAS,KAAMxsD,OAEtCJ,EAAAA,GAAMC,QAAQwsD,EAAAA,EAAWI,MAAO,IAAKzsD,Q,MCTxD,MAAM0sD,GAAqBvzD,EAAAA,EAAAA,IAAO4yD,EAAP5yD,CAA6BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4CCIlDqzD,GAAiBh/C,EAAAA,EAAAA,GAAco+C,GACvCa,MAAMR,GACNv+C,WAAW0+C,GACXM,QAAQH,GACR5+C,Q,0BCRE,MAAMg/C,GAAqB5yD,EAAAA,EAAAA,GAAU,sB,oCCArC,MAAM6yD,EAAiC5zD,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yDCA3C0zD,GAAwB9yD,EAAAA,EAAAA,GAAU,yB,2DC2B/C,MAAMqU,GAAqDtT,EAAAA,EAAAA,KAAUzB,IACjE,MAAM0N,GAAWqD,EAAAA,EAAAA,KA8BXiF,EAAWtI,EAASqI,OAAOC,SAC3By9C,EAAqBt6C,IAAW,kBAAmB,CACrD,CAACq5C,EAAAA,IAASxyD,EAAMsgB,cAAcK,WAG5BksB,EAAan/B,EAAStN,MAAMuN,aAAaC,MAAMk/B,WAErD,OACIlrC,EAAAA,EAAAA,KAAC6e,EAAAA,GAAa,CAACrgB,MAAOsN,EAAStN,MAAMuN,aAAa1L,UAC9CyI,EAAAA,EAAAA,MAACyoD,EAAc,CAACtxD,UAAW4xD,EAAoB7yC,YAAa5gB,EAAM6gB,OAAOC,aAActR,IAbpE0X,IACvBlnB,EAAMsgB,cAAcozC,cAAcxsC,EAAG,EAY6EjlB,SAAA,CACzGjC,EAAM2K,QACHD,EAAAA,EAAAA,MAACqW,EAAAA,EAA4B,CAAA9e,SAAA,EACzByI,EAAAA,EAAAA,MAACsW,EAAAA,EAAmB,CAACnf,WAAWG,EAAAA,EAAAA,IAAQ,yBAAyBC,SAAA,EACrEL,EAAAA,EAAAA,KAAA,QAAMoJ,MAAO,CAACiW,KAAM,YAAYhf,SAC7ByL,EAASoK,YAAYC,UAAU/X,EAAM2K,SA5BVgpD,MAC1C,MAAMC,EAAmBlmD,EAASmmD,YAAYC,yBAE9C,OAAmB,OAAhBF,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB96B,YAAai7B,EAAAA,EAAiCC,iBACxD,KAGJJ,EAAiBK,YAAY,EAuBfN,MAEH39C,IACEtL,EAAAA,EAAAA,MAAC6oD,EAA8B,CAAAtxD,SAAA,CAEvBjC,EAAMk0D,iBACNtyD,EAAAA,EAAAA,KAAC4xD,EAAqB,CAAAvxD,UAClBL,EAAAA,EAAAA,KAAA,OAAK2H,QAnDfqY,sBACTlU,EAASy3B,YAAYsH,kBAAkB,EAkDYxqC,UAC5BL,EAAAA,EAAAA,KAACirC,EAAU,CAAClkC,KAAM,UAI7B+E,EAASmmD,YAAYM,qCApDLC,MACzC,MAAMR,EAAmBlmD,EAASmmD,YAAYC,yBAE9C,OAAmB,OAAhBF,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB96B,YAAai7B,EAAAA,EAAiCM,gBACxD,KAGJT,EAAiBK,YAAY,EAkD3BG,IACDxyD,EAAAA,EAAAA,KAAC0xD,EAAkB,QAEX,IAIXgB,GAAuB/6C,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,U,gGChGjE,MAAMw/C,EAASrmD,EAAAA,MACX,IAAM,wCAAkCuV,MAAK5iB,IAAA,IAAC,gBAAE2zD,GAAiB3zD,EAAA,MAAM,CAAE4zD,QAASD,EAAiB,MAG1FA,EAAkBtmD,EAAAA,YAAiB,CAAClO,EAA8BwP,KACpE5N,EAAAA,EAAAA,KAACyiB,EAAAA,EAAa,CAAApiB,UACjBL,EAAAA,EAAAA,KAAC2yD,GAAMntD,EAAAA,EAAAA,GAAA,CACHoI,IAAKA,GACDxP,O,8FCRT,MAAM00D,GAA6BjzD,EAAAA,EAAAA,IAAS,cAAyCC,EAAAA,EACxFuc,iBAAAA,GACI3D,MAAM2D,oBACN/b,KAAKwL,SAASinD,iBAAiBC,MACnC,CAEAjzD,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAAA,OAAK6vB,GAAG,yBAEhB,G,uFCZG,MCAMojC,GDA8Bl1D,EAAAA,EAAAA,IAAOsP,EAAAA,EAAPtP,CAAuBE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,6CACrDE,GAASA,EAAMI,MAAMqT,WAAWqhD,YAAYC,kBAC3C/0D,GAASA,EAAMI,MAAMqT,WAAWqhD,YAAYC,iB,iJEDnD,MAAMl6B,GAAkB93B,EAAAA,EAAAA,IAAGlD,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iIACrBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,SAAS,IAQnCkvB,GAA6Bh4B,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,iIAChCE,GAASA,EAAMI,MAAM6J,OAAO0C,eAQ5Bs6C,EAAgBtnD,EAAAA,GAAOiB,IAAGkD,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,uHAEjC+6B,GACOr2B,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW20D,aAAa,GAChDrvD,EAAAA,EAAQC,IAAIgoC,UAAU9nC,SAMjBmvD,GAAoBt1D,EAAAA,EAAAA,IAAOsnD,EAAPtnD,CAAqB0E,IAAAA,GAAAvE,EAAAA,EAAAA,GAAA,0CAEhD+6B,GAGOq6B,EAA2Bv1D,EAAAA,GAAOiB,IAAG2D,IAAAA,GAAAzE,EAAAA,EAAAA,GAAA,uHAE5Ci7B,GACO/xB,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAW20D,aAAa,GAChDrvD,EAAAA,EAAQC,IAAIgoC,UAAU9nC,SAajBqvD,GAPoBx1D,EAAAA,GAAOiB,IAAG+D,IAAAA,GAAA7E,EAAAA,EAAAA,GAAA,iGAC9BiN,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAM6J,OAAOmrD,YAAY,IAMhBz1D,EAAAA,GAAOiB,IAAGgE,IAAAA,GAAA9E,EAAAA,EAAAA,GAAA,wGAIhCoN,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAM6J,OAAOu1B,cAAc,I,gDCvD9C,MAAM61B,GAAiB30D,E,SAAAA,GAAU,iB,kICFjC,MAAM40D,EAAgB,gBAChBC,EAAkB,kBAClBC,EAAyB,yBACzBC,EAA+B,+BAC/BC,EAAuC,uCACvCC,EAA4B,4BAC5BC,EAAuB,uBACvBC,EAAmB,mBACnBC,EAA0B,0BAC1BC,EAAgC,+B,wHCLtC,MAAMC,EAA2Br2D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,wIAEpCe,IAAA,IAAC,OAACiC,GAAOjC,EAAA,OAAKiC,GAAkB,aAAa,IACrD0B,IAAA,IAAC,uBAACk2B,GAAuBl2B,EAAA,OAAKk2B,EAAyBu7B,EAAAA,GAA2BC,EAAAA,EAA4B,IAEvGltD,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAW20D,aAAa,GAChDrvD,EAAAA,EAAQC,IAAI2jD,OAAO3b,UAAU9nC,S,QCN9B,MAAMsc,EAAmBziB,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mCACpCq2D,EAAAA,IACOt1D,IAAA,IAAC,uBAAC65B,GAAuB75B,EAAA,OAAK65B,EAAyB,OAAS,KAAK,IAGrE07B,EAAyBz2D,EAAAA,GAAOiB,IAAGoC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,yHAC1CC,EAAAA,IAGKyE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,GAC5CqF,EAAAA,EAAQC,IAAIgoC,UAAU9nC,S,MCZrB,MAAMuwD,EAAgB12D,EAAAA,GAAO6C,OAAM3C,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kVAUpCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,IAG7B/gD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAO0C,YAAY,I,MCZ5C,MAAM2pD,EAAwB32D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mKAKlCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW20D,aAAa,GAChDrvD,EAAAA,EAAQC,IAAI2jD,OAAO3b,UAAU9nC,S,6CCgB9B,MAAMu0B,UAAoCnsB,EAAAA,UAC7CvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACHyI,EAAAA,EAAAA,MAACsrD,EAAwB,CACrBt7B,uBAAwBx4B,KAAKlC,MAAM06B,uBACnC74B,UAAWsX,IAAWjX,KAAKlC,MAAM6B,WAAWG,EAAAA,EAAAA,IAAQ,iCACpDc,OAAQZ,KAAKlC,MAAM8C,OAAOb,SAAA,EAE1BL,EAAAA,EAAAA,KAACwgB,EAAgB,CAACsY,uBAAwBx4B,KAAKlC,MAAM06B,uBAAuBz4B,UACxEL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CACHW,QAASrH,KAAKlC,MAAMs6B,cAAc/wB,QAClC9G,SAAYP,KAAKlC,MAAMs6B,cAAc73B,SACrCyG,OAAO,UACPvF,UAAWzB,KAAKlC,MAAM06B,uBACtBrxB,YAAY,IACZxH,UAAWK,KAAKlC,MAAMs6B,cAAcz4B,UACpCiB,OAASZ,KAAKlC,MAAM06B,yBAA2Bx4B,KAAKlC,MAAMw6B,gBAAmB,qBAAkBn4B,EAAUJ,SAExGC,KAAKlC,MAAMs6B,cAAct2B,SAGjC9B,KAAKlC,MAAMw6B,iBAAkB9vB,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EAAEL,EAAAA,EAAAA,KAACw0D,EAAsB,KAAGx0D,EAAAA,EAAAA,KAACwgB,EAAgB,CAACsY,uBAAwBx4B,KAAKlC,MAAM06B,uBAAuBz4B,UAClIL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CACHW,QAASrH,KAAKlC,MAAMw6B,gBAAgBjxB,QACpC9G,SAAYP,KAAKlC,MAAMw6B,gBAAgB/3B,SACvCyG,OAAQhH,KAAKlC,MAAMw6B,gBAAgB+7B,iBAAmB,UAAY,cAClE5yD,UAAWzB,KAAKlC,MAAM06B,uBACtBrxB,YAAY,IACZxH,UAAWK,KAAKlC,MAAMw6B,gBAAgB34B,UACtCiB,OAAQZ,KAAKlC,MAAM06B,uBAAyB,gBAAkB,aAC9DtxB,OAAO,QAAOnH,SAEbC,KAAKlC,MAAMw6B,gBAAgBx2B,YAEX,QAE5B9B,KAAKlC,MAAMonD,YAAaxlD,EAAAA,EAAAA,KAAC00D,EAAqB,CAAAr0D,UAC3CL,EAAAA,EAAAA,KAACy0D,EAAa,CACV9sD,QAASrH,KAAKlC,MAAMonD,WAAW79C,QAC/B9G,SAAYP,KAAKlC,MAAMonD,WAAW3kD,SAClCZ,UAAWK,KAAKlC,MAAMonD,WAAWvlD,UAAUI,SAC7CC,KAAKlC,MAAMonD,WAAWpjD,SACD,OAEnC,E,uECnEG,MAAMwyD,GAAkB91D,E,SAAAA,GAAU,mB,iDCAlC,MAAM+1D,E,SAA4B92D,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iK,eCa5C,MAAM42D,UAA8Bh1D,EAAAA,EAE/Bi1D,YAAAA,GACJ,OAAIz0D,KAAKlC,MAAM2K,OAIP/I,EAAAA,EAAAA,KAACyzD,EAAAA,EAAc,CAACxzD,UAAU,sBAAqBI,SAClDC,KAAKlC,MAAM2K,QAJL,IAMf,CAEQisD,kBAAAA,GACJ,OAAG10D,KAAKlC,MAAMw9B,gBACH,MAIP57B,EAAAA,EAAAA,KAACizD,EAAAA,EAAoB,CAAChzD,WAAWG,EAAAA,EAAAA,IAAQ,kCAAmCuH,QAASrH,KAAKlC,MAAM62D,oBAExG,CAEQC,mBAAAA,GACJ,OAAG50D,KAAKlC,MAAM+2D,mBACH70D,KAAKlC,MAAM+2D,qBAEf,IACX,CAEQC,cAAAA,GACJ,OAAG90D,KAAKlC,MAAMw9B,kBAAoBt7B,KAAKlC,MAAM+2D,mBAClC,MAGPrsD,EAAAA,EAAAA,MAAC+rD,EAAyB,CAAAx0D,SAAA,CACrBC,KAAK40D,sBACL50D,KAAK00D,uBAIlB,CAEQK,cAAAA,GACJ,OAAI/0D,KAAKlC,MAAMiC,SACJC,KAAKlC,MAAMiC,UAIlByI,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,CACKC,KAAKy0D,eACLz0D,KAAK80D,mBAGlB,CAEAr1D,MAAAA,GACI,IAAIO,KAAKlC,MAAM2K,OAASzI,KAAKlC,MAAMw9B,kBAAoBt7B,KAAKlC,MAAMiC,SAC9D,OAAO,KAKX,OACIL,EAAAA,EAAAA,KAAC40D,EAAe,CAAC30D,UAAS,GAAAC,QAAKE,EAAAA,EAAAA,IAAQ,0BAAyB,KAAAF,OAAII,KAAKlC,MAAM6B,UAAWK,KAAKlC,MAAM6B,UAAY,IAAM0B,OAH/F,KAG8GtB,SACjIC,KAAK+0D,kBAGlB,E,8GCzEJ,MAAMC,EAAiBv3D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kGAITe,IAAA,IAAC,cAACs2D,EAAa,eAAEC,GAAev2D,EAAA,SAAAiB,OAAQs1D,EAAc,OAAAt1D,OAAMq1D,EAAa,cAQ3FE,EAAwB13D,EAAAA,GAAOiB,IAAGoC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,ogBAWjCE,GAAUA,EAAMs3D,+BAAiCt3D,EAAM2tD,WAAS,qBAAA7rD,OAAyB9B,EAAMI,MAAM6J,OAAOwC,kBAElGjI,IAAA,IAAC,UAACmpD,GAAUnpD,EAAA,OAAKmpD,EAAY,0CAA4C,wCAAwC,IA4B3H,MAAM4J,UAAsC71D,EAAAA,EAC/CC,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACs1D,EAAc,CAACC,cAAej1D,KAAKlC,MAAM4D,MAAOwzD,eAAgBl1D,KAAKlC,MAAMuD,OAAOtB,UAC/EL,EAAAA,EAAAA,KAACy1D,EAAqB,CAAC1J,UAAWzrD,KAAKlC,MAAM2tD,UAAW2J,8BAA+Bp1D,KAAKlC,MAAMs3D,8BAA8Br1D,SAC3HC,KAAKlC,MAAMiC,YAI5B,E,8ICnDJ,MAAM8rC,EAAapuC,EAAAA,GAAO0iD,EAACxiD,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yBAChBE,GAASA,EAAMI,MAAM6J,OAAOjG,OAGhC,MAAMwqC,UAAa9sC,EAAAA,EAA0BuT,WAAAA,GAAA,SAAA9S,WAAA,KAE1Cq1D,SAAYtuC,IAEdhnB,KAAKwL,SAAS+9B,UAAUtuB,WAAmC,WAAtBjb,KAAKlC,MAAMoM,QAClD8c,EAAMuuC,iBACNv1D,KAAKwL,SAAS+9B,UAAUisB,QAAQx1D,KAAKlC,MAAMyuC,QAElCxnC,EAAAA,MAAMkP,kBAAkBjU,KAAKlC,MAAM0uC,wBAA0BxsC,KAAKlC,MAAM0uC,wBACjFxlB,EAAMuuC,iBAGJv1D,KAAKlC,MAAMuJ,SACbrH,KAAKlC,MAAMuJ,QAAQ2f,EACrB,CACA,CAEMyuC,eAAAA,GACN,IAAIC,EAAc,CAAC,EAyBnB,OAvBG11D,KAAKlC,MAAMyxB,KACZmmC,EAAOnmC,GAAKvvB,KAAKlC,MAAMyxB,IAEtBvvB,KAAKlC,MAAM6B,YACZ+1D,EAAO/1D,UAAYK,KAAKlC,MAAM6B,WAG7BK,KAAKlC,MAAMyuC,OACZmpB,EAAOnpB,KAAOvsC,KAAKwL,SAASorB,SAAS++B,aAAa31D,KAAKlC,MAAMyuC,MAAQ,KAAKptC,YAGzEa,KAAKlC,MAAMoM,SACZwrD,EAAOxrD,OAASlK,KAAKlC,MAAMoM,QAG1BlK,KAAKlC,MAAM83D,WACZF,EAAOE,SAAW51D,KAAKlC,MAAM83D,UAG3B51D,KAAKlC,MAAM+3D,cACbH,EAAOG,YAAc71D,KAAKlC,MAAM+3D,aAG3BH,CACT,CAEQI,aAAAA,CAAcC,GACpB,MAAM/pC,EAAMhsB,KAAKlC,MAAMmuB,KAAO4f,EAC9B,OACEnsC,EAAAA,EAAAA,KAACssB,GAAG9mB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKy1D,mBAAiB,IAC5BpuD,QAASrH,KAAKs1D,SACdhoD,IAAKyoD,EAAUh2D,SACfC,KAAKlC,MAAMiC,WAGlB,CAEAN,MAAAA,GACE,IAAKO,KAAKlC,MAAMk4D,UACd,OAAOh2D,KAAK81D,cAAc,MAG5B,IAAIC,EAAiB/pD,EAAAA,YACrB,OACEtM,EAAAA,EAAAA,KAACu2D,EAAAA,EAAU,CAACC,QAASl2D,KAAKlC,MAAMk4D,UAAWG,WAAYJ,EAAUh2D,SAC9DC,KAAK81D,cAAcC,IAG1B,E,mMCzFK,MAAMK,EAAqB34D,EAAAA,GAAO68B,MAAK38B,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2CAExC+6B,EAAAA,I,qCCFC,MAAM09B,EAAa54D,EAAAA,GAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kBAC/Bi7B,EAAAA,I,ICaDy9B,E,YAAkB,SAAlBA,GAAAA,EAAAA,EAAkB,+BAAlBA,EAAAA,EAAkB,8BAAlBA,IAAAA,EAAkB,KAiBhB,MAAMvN,GAAkExpD,EAAAA,EAAAA,KAAUzB,IACrF,MAAM0N,GAAWqD,EAAAA,EAAAA,MACVqxB,EAAgBq2B,IAAqB7oD,EAAAA,EAAAA,UAA6B4oD,EAAmBE,eACrFC,EAA4BC,IAAiChpD,EAAAA,EAAAA,UAAiB,KAC9EipD,EAAeC,IAAoBlpD,EAAAA,EAAAA,UAAS,IAC5CtD,EAAcysD,IAAmBnpD,EAAAA,EAAAA,UAAwB,MAE1DopD,EAAiBh5D,EAAMqrD,kBACvB4N,EAAiBj5D,EAAMorD,kBAIvB8N,GAAWjsC,EAAAA,EAAAA,cAAY,CAACksC,EAAgBC,KAC1C,IAAIC,EAAwB,KASxB,OARAF,EAAiBF,EACjBI,EAAS3rD,EAASoK,YAAYC,UAAU,iCACjCqhD,IAAoBZ,EAAmBE,cAC1CS,GAAkB,IAClBE,EAAS3rD,EAASoK,YAAYC,UAAU,2BAGhDghD,EAAgBM,GACLpyD,EAAAA,MAAMkP,kBAAkBkjD,EAAO,GAC3C,CAACJ,EAAgBvrD,EAASoK,cAEvBwhD,GAAiBrsC,EAAAA,EAAAA,cAAa,KAC5BjtB,EAAM+qB,WAAa/qB,EAAM+qB,UAAUuuC,gBACnCt5D,EAAM+qB,UAAUuuC,iBAEpB5rD,EAAS6jC,QAAQgoB,YAAY,CACzBliC,QAAS,CACLG,OAAQC,EAAAA,GAAeC,aACvBJ,KAAMC,EAAAA,EAASqa,OACf7a,QAASC,EAAAA,GAAiBwiC,gBAEhC,GACH,CAAC9rD,EAAS6jC,QAASvxC,EAAM+qB,YAoBtB0uC,GAAuBxsC,EAAAA,EAAAA,cAAaysC,IACtC,IAAI1tD,EAAwB,KAAhB0tD,EAAqB,EAAI9T,WAAW8T,GAC7CzyD,EAAAA,MAAMC,SAAS8E,IAAU,oBAAoB2tD,KAAKD,IAEjD1tD,EAAQuM,KAAKsD,MAAc,IAAR7P,GACnB8sD,EAAiB9sD,GACjBktD,EAASltD,EAAOwsD,EAAmBoB,eAGnCd,EAAiB,GACjBC,EAAgBrrD,EAASoK,YAAYC,UAAU,4BAEnD0gD,EAAkBD,EAAmBoB,aACrChB,EAA8Bc,EAAY,GAC3C,CAACR,EAAUxrD,EAASoK,cAEjB+hD,GAAuB5sC,EAAAA,EAAAA,cAAY,KAErC6rC,EADyBG,GAEzBR,EAAkBD,EAAmBE,cACrCE,EAA8B,IAC9BG,EAAgB,KAAK,GACtB,CAACE,IAEJ,OAAOvuD,EAAAA,EAAAA,MAAA,OAAK7I,UAAWsX,IAAW,eAAenX,EAAAA,EAAAA,IAAQ,qBAAqBC,SAAA,EAC1EyI,EAAAA,EAAAA,MAACu8C,EAAAA,GAAa,CAAAhlD,SAAA,CAAEyL,EAASoK,YAAYC,UAAU,0BAA0B,KAACnW,EAAAA,EAAAA,KAAC22D,EAAU,CAAAt2D,SAAEyL,EAASwJ,SAASC,YAAY8hD,GAAgB,SACrIr3D,EAAAA,EAAAA,KAACqlD,EAAAA,GAAa,CAAAhlD,UACVyI,EAAAA,EAAAA,MAAC04C,EAAAA,GAAgB,CAACC,WAAW,SAAQphD,SAAA,EACjCL,EAAAA,EAAAA,KAAC4K,EAAAA,EAAa,CACVyb,KAAK,YACLwJ,GAAG,yBACHzlB,MAAOwsD,EAAmBE,aAC1B7a,QAASzb,IAAmBo2B,EAAmBE,aAC/CxsD,SAAU2tD,KAEdj4D,EAAAA,EAAAA,KAAC02D,EAAkB,CAACwB,GAAG,QAAQ7b,QAAQ,yBAAwBh8C,SAC1DyL,EAASoK,YAAYC,UAAU,kCAI1CkhD,EAAiBD,GACnBtuD,EAAAA,EAAAA,MAACu8C,EAAAA,GAAa,CAAAhlD,SAAA,EACVL,EAAAA,EAAAA,KAAA,OAAAK,SAAMyL,EAASoK,YAAYC,UAAU,6BACrCnW,EAAAA,EAAAA,KAAA,OAAAK,UACIL,EAAAA,EAAAA,KAACkK,EAAAA,EAAmB,CAChBE,MAAO2sD,EACP5sD,eAAgB2B,EAASwJ,SAAS6iD,kBAClC7tD,SAAUutD,EACVxtD,SAASjK,EAAAA,EAAAA,IAAQ,uBACjBsK,aAAcA,SAIxB,MACF1K,EAAAA,EAAAA,KAACy4B,EAAAA,EAA2B,CACxBC,cAAe,CACXt2B,KAAM0J,EAASoK,YAAYC,UAAU,oBACrCxO,QA3EYywD,KAAO,IAADC,EAE1B,IAAKf,EAASL,EAAez2B,GACzB,OAGJ,IAAI83B,EAAcrB,EACfL,EAAmBE,eAAiBt2B,IACnC83B,EAAcjB,GAGlBj5D,EAAMk6B,cAAcC,QACD,QAAnB8/B,EAAIj6D,EAAM+qB,iBAAS,IAAAkvC,GAAfA,EAAiB/O,YACjBlrD,EAAM+qB,UAAUmgC,WAAWgP,EAAa1B,EAAmBE,eAAiBt2B,GAEhFpiC,EAAMkrD,WAAWgP,EAAY,EA6DrBr4D,WAAWG,EAAAA,EAAAA,IAAQ,8BAEvBw4B,gBAAiB,CACbx2B,KAAM0J,EAASoK,YAAYC,UAAU,WACrCxO,QAAS+vD,EACTz3D,WAAWG,EAAAA,EAAAA,IAAQ,gCAEvBc,OAAO,kBAET,G,iEC3JH,MAAMq3D,E,SAAmCx6D,GAAOy6D,IAAGv6D,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4DAC9CE,IAAyB,IAAjBA,EAAMq6D,OAAkB,OAAS,SAC1Cr6D,IAA0B,IAAjBA,EAAMq6D,OAAkB,QAAoC,IAA1Br6D,EAAMs6D,gBAA2B,OAAS,SACjFt6D,IAA0B,IAAjBA,EAAMq6D,OAAkB,OAAS,W,wHCHlD,MAAME,EAA+B56D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,6FAKlDE,GAAUA,EAAMw6D,aAcZ,MAd2Bz3D,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,+LAGzBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWoE,KAAK,IAMnCD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWo6D,SAAS,MCbvCC,GAAwBvmD,EAAAA,EAAAA,GAAcomD,GAC9CjmD,Q,iBCDE,MAAMqmD,GAA8Bh7D,EAAAA,EAAAA,IAAOw6D,EAAAA,EAAPx6D,CAAwCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2CCCtE86D,GAA4BzmD,EAAAA,EAAAA,GAAcgmD,EAAAA,GAAkC/G,MAAMuH,GAA6BrmD,Q,wDCWrH,MAAMumD,GAA8Bp5D,EAAAA,EAAAA,IACvC,cAA0CC,EAAAA,EAAiDuT,WAAAA,GAAA,SAAA9S,WAAA,KAE/E24D,gBAAkBl5C,UAAa,IAADm5C,EAAAC,EAC0B,QAA5DD,EAAI74D,KAAKwL,SAASye,cAAcC,KAAKvL,OAAOuuB,wBAAgB,IAAA2rB,GAAW,QAAXC,EAAxDD,EAA0D1rB,iBAAS,IAAA2rB,GAAnEA,EAAqER,eAIzEt4D,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,uCAChE/lC,KAAKwL,SAASszB,gBAAgBC,wBAAuB,CAC9D,CAEOg6B,YAAAA,GAAwB,IAADC,EAAAC,EAC3B,OAA+D,QAA/DD,EAAOh5D,KAAKwL,SAASye,cAAcC,KAAKvL,OAAOuuB,wBAAgB,IAAA8rB,GAAW,QAAXC,EAAxDD,EAA0D7rB,iBAAS,IAAA8rB,OAAX,EAAxDA,EAAqEC,QAChF,CAEQC,QAAAA,GACJ,MAAMC,EAAMp5D,KAAKwL,SAASoL,WAAWrI,QAAQ8qD,qBAC7C,OAAQr5D,KAAK+4D,gBACT,IAAK,OACD,OAAO/4D,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOs6D,qBAAqBC,oBAAoBp6D,WACnG,IAAK,OACD,OAAW,KAARi6D,EACQp5D,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOs6D,qBAAqBE,oBAAoBr6D,WAExFa,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOs6D,qBAAqBG,oBAAoBt6D,WAEvG,IAAK,UACD,OAAOa,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOs6D,qBAAqBI,uBAAuBv6D,WACtG,QACI,OAAW,KAARi6D,EACQp5D,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOs6D,qBAAqBK,qBAAqBx6D,WAEzFa,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOs6D,qBAAqBM,qBAAqBz6D,WAGhH,CAEAM,MAAAA,GAAU,IAADo6D,EAAAC,EAAAC,EAAAC,EACL,MAAMC,EAAMj6D,KAAKm5D,WACXe,EAA4B,QAArBL,EAAG75D,KAAKlC,MAAMq8D,eAAO,IAAAN,EAAAA,EAAInB,EAChCN,EAA4C,QAA7B0B,EAAG95D,KAAKlC,MAAMs6D,uBAAe,IAAA0B,GAAAA,EAClD,OACItxD,EAAAA,EAAAA,MAACgwD,EAAqB,CAAEF,aAAsE,QAA1DyB,EAAE/5D,KAAKwL,SAASye,cAAcC,KAAKvL,OAAOuuB,wBAAgB,IAAA6sB,GAAW,QAAXC,EAAxDD,EAA0D5sB,iBAAS,IAAA6sB,OAAX,EAAxDA,EAAqE1B,aACnFjxD,QAASrH,KAAK44D,gBACfR,gBAAiBA,EACjBz4D,UAAWsX,IAAWjX,KAAKlC,MAAM6B,WAAWG,EAAAA,EAAAA,IAAQ,sCAAsCC,SAAA,EAC7GL,EAAAA,EAAAA,KAACw6D,EAAO,CAAC9lD,IAAK6lD,EAAK7B,gBAAiBA,EAAiBD,OAAgC,SAAxBn4D,KAAK+4D,iBACjE/4D,KAAKlC,MAAMiC,UACZL,EAAAA,EAAAA,KAAClC,EAAAA,EAA2B,CAACS,WAAYm6D,EAAkB,GAAM,MAG7E,G,sHChED,MAAMgC,E,SAAwC38D,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2BAClDE,GAASA,EAAMI,MAAM6J,OAAO4B,Y,eCSlC,MAAM0wD,GAAyC96D,EAAAA,EAAAA,IAAS,cAAqDC,EAAAA,EAChHC,MAAAA,GAAU,IAADq6D,EACL,MAAM1B,EAA4C,QAA7B0B,EAAG95D,KAAKlC,MAAMs6D,uBAAe,IAAA0B,GAAAA,EAClD,OACItxD,EAAAA,EAAAA,MAACmwD,EAAAA,EAA2B,CAACP,gBAAiBA,EAAgBr4D,SAAA,EAC1DL,EAAAA,EAAAA,KAAClC,EAAAA,EAA2B,CAACS,WAAY,MACzCyB,EAAAA,EAAAA,KAAC06D,EAAqC,CAAAr6D,SAAC,mBAKnD,G,iICrBG,MAAMu6D,GAAkC78D,EAAAA,EAAAA,IAAOw6D,EAAAA,EAAPx6D,CAAwCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yCAC3EE,IAAmC,IAA1BA,EAAMs6D,gBAA2B,SAAW,SACtDt6D,IAAmC,IAA1BA,EAAMs6D,gBAA2B,OAAS,S,eCKvD,MAAMmC,GAAoCh7D,EAAAA,EAAAA,IAAS,cAAgDC,EAAAA,EACtGC,MAAAA,GAAU,IAADq6D,EACL,MAAM1B,EAA4C,QAA7B0B,EAAG95D,KAAKlC,MAAMs6D,uBAAe,IAAA0B,GAAAA,EAClD,OACIp6D,EAAAA,EAAAA,KAACi5D,EAAAA,EAA2B,CAACP,gBAAiBA,EAAiB+B,QAASG,GAEhF,G,2GCbG,MAAME,EAAqC/8D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kF,iBCDrD,MAAM68D,EAAwCh9D,EAAAA,GAAO6C,OAAM3C,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gQACvCE,GAASA,EAAM48D,WAI/B/7D,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWoE,KAAK,IAMnCD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWo6D,SAAS,I,MCV3C,MAAMoC,GAA6Bl9D,EAAAA,EAAAA,IAAOg9D,EAAPh9D,CAA6CE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2HAI1Ee,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAMT,EAAMC,WAAW0S,SAAS,I,yBCD9C,MAAM+pD,GAAmCr7D,EAAAA,EAAAA,IAAS,cAA+CC,EAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KAC3G46D,cAAgBn7C,UACpB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,iCAChE/lC,KAAKwL,SAASszB,gBAAgBg8B,gBAAgB,CACvD,CACDr7D,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACi7D,EAA0B,CAACD,SAAU16D,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAO+7D,oBAAoBC,QAAQC,iBAAiB97D,WACtGkI,QAASrH,KAAK66D,cACdl7D,WAAWG,EAAAA,EAAAA,IAAQ,oBAEvD,I,MCdG,MAAMo7D,GAAgCz9D,EAAAA,EAAAA,IAAOg9D,EAAPh9D,CAA6CE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,+CCG7Eu9D,GAAsC57D,EAAAA,EAAAA,IAAS,cAAkDC,EAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KACjH46D,cAAgBn7C,UACpB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,yCAChE/lC,KAAKwL,SAASszB,gBAAgBs8B,mBAAmB,CAC1D,CACD37D,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACw7D,EAA6B,CAACR,SAAU16D,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAO+7D,oBAAoBC,QAAQK,mBAAmBl8D,WACxGkI,QAASrH,KAAK66D,cACdl7D,WAAWG,EAAAA,EAAAA,IAAQ,4BAE1D,I,mBCbJ,MAAM+rC,GAAapuC,EAAAA,EAAAA,IAAOg9D,EAAPh9D,CAA6CE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4CAM1DkuC,EAAQD,EACRG,GAAYvuC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,+CAKvB09D,GAA2BpvB,EAAAA,EAAAA,GAAeJ,EAAOE,GCVjDuvB,GAAiCh8D,EAAAA,EAAAA,IAAS,cAA6CC,EAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KACvG46D,cAAgBn7C,UACpB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,kCAChE/lC,KAAKwL,SAASszB,gBAAgB08B,cAAc,CACrD,CACD/7D,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAAC47D,EAAwB,CAACZ,SAAU16D,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAO+7D,oBAAoBC,QAAQS,cAAct8D,WACnGkI,QAASrH,KAAK66D,cACdl7D,WAAWG,EAAAA,EAAAA,IAAQ,qBAErD,I,MCdG,MAAM47D,GAA6Cj+D,EAAAA,EAAAA,IAAOg9D,EAAPh9D,CAA6CE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uHAI1Fe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAMT,EAAMC,WAAW0S,SAAS,ICDxC8qD,GAAmDp8D,EAAAA,EAAAA,IAAS,cAA+CC,EAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KAC3H46D,cAAgBn7C,gBACd1f,KAAKwL,SAASszB,gBAAgB88B,gCAAgC,CACvE,CACDn8D,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACg8D,EAA0C,CAAChB,SAAU16D,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAO+7D,oBAAoBC,QAAQa,uBAAuB18D,WAC5HkI,QAASrH,KAAK66D,cACdl7D,WAAWG,EAAAA,EAAAA,IAAQ,4BAGvD,ICHSg8D,GAA2Cv8D,EAAAA,EAAAA,IAAS,cAAuDC,EAAAA,EAE5Gu8D,2BAAAA,GACJ,OAAI/7D,KAAKlC,MAAMk+D,uBACJ,MAIPxzD,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,EAAAA,KAAClC,EAAAA,EAA2B,CAACS,WAAY,KACzCyB,EAAAA,EAAAA,KAAC67D,EAA8B,KAC/B77D,EAAAA,EAAAA,KAAClC,EAAAA,EAA2B,CAACS,WAAY,KACzCyB,EAAAA,EAAAA,KAACy7D,EAAmC,MAGhD,CAEQc,uCAAAA,GACJ,OACIzzD,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,EAAAA,KAACi8D,EAAgD,KACjDj8D,EAAAA,EAAAA,KAAClC,EAAAA,EAA2B,CAACS,WAAY,MAGrD,CAEAwB,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACgyD,EAAkC,CAAAz6D,SAAA,CAC9BC,KAAKi8D,2CACNv8D,EAAAA,EAAAA,KAACk7D,EAAgC,IAChC56D,KAAK+7D,gCAGlB,G,gGC7CG,MAAMG,EAA8B,wBAE9BC,EAAiB1+D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,0HAIjCs+D,G,iBCNA,MAAME,EAAwB3+D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,6aASzCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,IAE7B/gD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOs0D,QAAQ,GAIvCC,EAAAA,IAKKx1D,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAWo6D,SAAS,I,gDCrB7C,MAAMgE,EAAsB9+D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iOAKvCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,IAE7B/gD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAO4B,SAAS,IAEnC7C,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAWC,SAAS,I,iBCT7C,MAAMo+D,EAA0B/+D,EAAAA,GAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yFACnCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO0C,YAAY,I,MCD9C,MAAMgyD,EAAwBh/D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,+C,uCCexC,MAAM8+D,UAAkCl9D,EAAAA,EAA8CuT,WAAAA,GAAA,SAAA9S,WAAA,KAOjF08D,aAAe,KACnB38D,KAAKlC,MAAMk6B,cAAcC,OAAO,CACnC,CAPO2kC,QAAAA,GACJ,MAAMC,EAAM,IAAIC,KAChB,OAAO,IAAIthC,EAAAA,SAAS,EAAEqhC,EAAIE,WAAWF,EAAIG,cAAc79D,UAC3D,CAMAM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAAC+zD,EAAmB,CAAAx8D,SAAA,EAChBL,EAAAA,EAAAA,KAACqlD,EAAAA,GAAa,CAAAhlD,SAAEC,KAAKlC,MAAMm/D,gBAC3Bz0D,EAAAA,EAAAA,MAACu8C,EAAAA,GAAa,CAAAhlD,SAAA,CACTC,KAAKlC,MAAMo/D,cACZx9D,EAAAA,EAAAA,KAAC88D,EAAuB,CAAAz8D,SAAEC,KAAK48D,aAC9B58D,KAAKlC,MAAMq/D,iBAEhBz9D,EAAAA,EAAAA,KAAC+8D,EAAqB,CAAA18D,UAClBL,EAAAA,EAAAA,KAACy4B,EAAAA,EAA2B,CAACC,cAAe,CACxC/wB,QAASrH,KAAK28D,aACd76D,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,aAK9D,EC3CG,MAAMunD,EAAsB3/D,EAAAA,GAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2J,MCAvC,MAAMy/D,EAA6B5/D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qa,MCC7C,MAAM0/D,EAA8B7/D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kOAU7C0+D,EAAAA,I,iBCVD,MAAMiB,EAA+B9/D,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,ogBAmB9C0+D,EAAAA,ICFKkB,GAAoGj+D,EAAAA,EAAAA,KAAUzB,IACvH,MAAM0N,GAAWqD,EAAAA,EAAAA,MACV4uD,EAAkBC,IAAuBhwD,EAAAA,EAAAA,WAAS,GAEnD6mB,EAAkB+F,IACpB9uB,EAASqd,UAAUkd,uBAAuB,aAAc,SAAU,cAAgBzL,EAAM,EAmBtFqjC,EAAgBA,KAClBD,GAAoB,GAEpBlyD,EAASkE,KAAKkuD,oBAAoBr8C,MAAM2I,IACpCzlB,QAAQC,IAAIwlB,GAnBhB1e,EAAS4vB,OAAOgiB,WAAWplB,IACnBt4B,EAAAA,EAAAA,KAACg9D,EAAyB,CACtBO,aAAczxD,EAASoK,YAAYC,UAAU,oCAC7CqnD,aAAc1xD,EAASoK,YAAYC,UAAU,oCAC7CsnD,aAAc3xD,EAASoK,YAAYC,UAAU,oCAC7CmiB,cAAeA,KAEvB,CACIvvB,MAAO+C,EAASoK,YAAYC,UAAU,iCACtCgoD,0BAA0B,EAC1BviC,iBAAiB,EACjB+hB,gBAAgB,GASR,IACbygB,OAAOpvD,IACNjK,QAAQC,IAAIgK,EAAI,IAEpB6lB,EAAe,WAAW,EAgBxBwpC,EAAiB/2C,IACnBA,EAAMg3C,kBACNN,GAAoB,EAAM,EAkBxBO,EAAiBA,KACZv+D,EAAAA,EAAAA,KAAC09D,EAAmB,CAACz9D,WAAWG,EAAAA,EAAAA,IAAQ,yBACnBuH,QAASA,IAAMs2D,IAAgB59D,SAAC,sBAqB1Dm+D,EAAkB1yD,EAAStN,MAAMuN,aAAaC,MAAMyyD,0BAC1D,OACI31D,EAAAA,EAAAA,MAACwD,EAAAA,SAAc,CAAAjM,SAAA,EACXyI,EAAAA,EAAAA,MAAC2zD,EAAc,CAACx8D,UAAWsX,KAAWnX,EAAAA,EAAAA,IAAQ,2BAA4B,CACtE,CAACw8D,EAAAA,IAASmB,IAEEn2D,aAAcA,KA7D9BkE,EAASqI,OAAOmI,GAAGmgB,aACnBuhC,GAAoB,GACpBnpC,EAAe,SA2D6C,EAC5ChtB,aAAcA,KAvD9BiE,EAASqI,OAAOmI,GAAGmgB,YACnBuhC,GAAoB,EAsDwC,EAC5Cr2D,QAASA,KA7CxBo2D,IACDC,GAAoB,GACpBnpC,EAAe,SA2CkC,EAAAx0B,SAAA,EAC7CL,EAAAA,EAAAA,KAACw+D,EAAe,CAACv+D,UAAWu8D,KAC5Bx8D,EAAAA,EAAAA,KAAC69D,EAA4B,CAAC59D,UAAWsX,IAAW,CAChD,CAACqlD,EAAAA,IAASmB,IACX19D,UACCL,EAAAA,EAAAA,KAAC08D,EAAqB,CAClBz8D,UAAWsX,KAAWnX,EAAAA,EAAAA,IAAQ,kBAAmB,CAC7C,CAACw8D,EAAAA,IAASmB,IACX19D,UACHyI,EAAAA,EAAAA,MAAA,OAAAzI,SAAA,CAAK,gDAlCjByL,EAASrN,WAAW0S,WAAarF,EAASrN,WAAWirC,UAC7C1pC,EAAAA,EAAAA,KAAA,OAAAK,SAAMk+D,MAEPA,IAhBNzyD,EAASrN,WAAWoE,MAIlB,MAHI7C,EAAAA,EAAAA,KAAC29D,EAA0B,CAAC19D,UAAW,mBACX0H,QAAU2f,GAAU+2C,EAAc/2C,eAmBrExb,EAASqI,OAAOmI,GAAGmgB,YACZz8B,EAAAA,EAAAA,KAAC49D,EAA2B,CAAC39D,UAAWsX,KAAWnX,EAAAA,EAAAA,IAAQ,kBAAmB,CACjF,CAACw8D,EAAAA,IAASmB,IAEsBp2D,QAAU2f,GAAU+2C,EAAc/2C,KAEnE,OA8BU,G,gGCzIlB,MAAMo3C,E,SAA+B3gE,GAAO6C,OAAM3C,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gE,yBCIlD,MAAMygE,GAAqC9+D,EAAAA,EAAAA,IAAS,cAAiDC,EAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KAC/G24D,gBAAkBl5C,UACtB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,wBAChE/lC,KAAKwL,SAASszB,gBAAgB08B,cAAc,CACrD,CACD/7D,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAAC0+D,EAA4B,CAAC/2D,QAASrH,KAAK44D,gBAAiBj5D,WAAWG,EAAAA,EAAAA,IAAQ,6BAA6BC,UACzGL,EAAAA,EAAAA,KAAA,OAAK8M,QAAQ,aAAaG,MAAM,6BAA4B5M,UACxDL,EAAAA,EAAAA,KAAA,KAAGkN,KAAK,UAAS7M,UACbL,EAAAA,EAAAA,KAAA,QACI4+D,EAAE,0tPAK1B,G,2GCpBG,MAAMC,EAAqC9gE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kF,QCIrD,MAAM4gE,EAA6B/gE,EAAAA,GAAO6C,OAAM3C,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mTAG1BE,GAASA,EAAMI,MAAMa,OAAOC,OAAO+7D,oBAAoB0D,QAAQC,sBAAsBv/D,aAI5GrB,IAAUA,EAAMs6D,kBAAmBv3D,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,4CAE/Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAIvCkE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,I,yBCT7C,MAAM8tD,GAAmCp/D,EAAAA,EAAAA,IAAS,cAA+CC,EAAAA,EAAsDuT,WAAAA,GAAA,SAAA9S,WAAA,KAClJ24D,gBAAkBl5C,UACtB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,8CAChE/lC,KAAKwL,SAASszB,gBAAgBg8B,gBAAgB,CACvD,CAEDr7D,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAAC8+D,EAA0B,CAACpG,gBAAiBp4D,KAAKlC,MAAMs6D,gBAAiB/wD,QAASrH,KAAK44D,gBAAiBj5D,WAAWG,EAAAA,EAAAA,IAAQ,oBAEnI,ICVS8+D,GAA2Cr/D,EAAAA,EAAAA,IAAS,cAAuDC,EAAAA,EACpHC,MAAAA,GAAU,IAADq6D,EACL,MAAM1B,EAA4C,QAA7B0B,EAAG95D,KAAKlC,MAAMs6D,uBAAe,IAAA0B,GAAAA,EAClD,OACIp6D,EAAAA,EAAAA,KAAC6+D,EAAkC,CAAAx+D,UAC/BL,EAAAA,EAAAA,KAACi/D,EAAgC,CAACvG,gBAAiBA,KAG/D,G,2GChBG,MAAMyG,EAAoCphE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kF,oBCApD,MAAMkhE,EAAgD,4CAEhDC,EAAuCthE,EAAAA,GAAO6C,OAAM3C,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kSAKtDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWoE,KAAK,IAMnCD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWo6D,SAAS,GAM7CuG,GAKDhhE,GAASA,EAAMkhE,cACPn+D,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,0EAIHiD,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,4E,QCvBR,MAAMqhE,GAA+BxhE,EAAAA,EAAAA,IAAOshE,EAAPthE,CAA4CE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qBACpFE,GAASA,EAAMs6D,iBAAkBv3D,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,6DAGnC,O,eCAE,MAAMshE,GAAqC3/D,EAAAA,EAAAA,IAC9C,cAAiDC,EAAAA,EAAgDuT,WAAAA,GAAA,SAAA9S,WAAA,KACrF24D,gBAAkBl5C,UACtB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,0BAEhE/lC,KAAKwL,SAASszB,gBAAgBs8B,mBAAmB,CACzD,CAEF37D,MAAAA,GACI,MAAM0/D,EAAoBn/D,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM0zD,4BAC3DC,EAA0Br/D,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM4zD,kCAEvE,OACI5/D,EAAAA,EAAAA,KAACu/D,EAA4B,CAACt/D,WAAWG,EAAAA,EAAAA,IAAQ,0BAA2Bk/D,aAAch/D,KAAKlC,MAAMkhE,aAAc5G,gBAAiBp4D,KAAKlC,MAAMs6D,gBAAiB/wD,QAASrH,KAAK44D,gBAAgB74D,SACzLC,KAAKlC,MAAMkhE,cAAgBt/D,EAAAA,EAAAA,KAAC2/D,EAAuB,CAAC54D,KAAM,IAAK9G,WAAWG,EAAAA,EAAAA,IAAQ,2BACjFJ,EAAAA,EAAAA,KAACy/D,EAAiB,CAACx/D,WAAWG,EAAAA,EAAAA,IAAQ,wBAA0B,IAAMg/D,KAExF,I,YC1BG,MAAMS,GAA8B9hE,EAAAA,EAAAA,IAAOshE,EAAPthE,CAA4CE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oCACjFE,GAASA,EAAMkhE,cACLn+D,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,gGAIHiD,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,+DAKbE,GAASA,EAAMs6D,iBAAkBv3D,EAAAA,EAAAA,IAAGsB,IAAAA,GAAAvE,EAAAA,EAAAA,GAAA,8DAGnC,O,0BCHA,MAAM4hE,GAAoCjgE,EAAAA,EAAAA,IAC7C,cAAgDC,EAAAA,EAAuDuT,WAAAA,GAAA,SAAA9S,WAAA,KAC3F24D,gBAAkBl5C,UACtB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,yCAEzD/lC,KAAKwL,SAASi0D,eAAeC,eAAe,CACrDC,YAAYtqC,EAAAA,EAAS/0B,OACrBs/D,eAAe9qC,EAAAA,GAAiB+qC,sBAChCvqC,OAAQwqC,EAAAA,GAAwBC,UACtC,CACD,CAEDtgE,MAAAA,GACQ,MAAMugE,EAAkBhgE,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMu0D,0BACzDC,EAAwBlgE,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMy0D,gCAErE,OACIzgE,EAAAA,EAAAA,KAAC6/D,EAA2B,CAAC5/D,WAAWG,EAAAA,EAAAA,IAAQ,+BAAgCk/D,aAAch/D,KAAKlC,MAAMkhE,aAAc5G,gBAAiBp4D,KAAKlC,MAAMs6D,gBAAiB/wD,QAASrH,KAAK44D,gBAAgB74D,SAC7LC,KAAKlC,MAAMkhE,cAAgBt/D,EAAAA,EAAAA,KAACwgE,EAAqB,CAACz5D,KAAM,IAAK9G,WAAWG,EAAAA,EAAAA,IAAQ,gCAC3EJ,EAAAA,EAAAA,KAACsgE,EAAe,CAACrgE,WAAWG,EAAAA,EAAAA,IAAQ,6BAA+B,IAAMg/D,KAG/F,I,QCjCD,MAAMsB,GAA0B3iE,EAAAA,EAAAA,IAAOshE,EAAPthE,CAA4CE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iBAC/EE,GAASA,EAAMs6D,iBAAkBv3D,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,uDAGnC,OCIQyiE,GAAgC9gE,EAAAA,EAAAA,IACzC,cAA4CC,EAAAA,EAAmDuT,WAAAA,GAAA,SAAA9S,WAAA,KACnF24D,gBAAkBl5C,UACtB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,wBACtE/lC,KAAKwL,SAASqd,UAAUC,qBAAqB,CACzCC,UAAW,mBACXC,SAAU,aACV/Q,OAAQ,SACRqiB,MAAO,yBACT,SAEIt6B,KAAKwL,SAASszB,gBAAgB08B,cAAc,CACrD,CAED/7D,MAAAA,GACI,MAAM6gE,EAAetgE,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM60D,uBACtDC,EAAqBxgE,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM+0D,6BAElE,OACI/gE,EAAAA,EAAAA,KAAC0gE,EAAuB,CAACzgE,WAAWG,EAAAA,EAAAA,IAAQ,8BAA+Bk/D,aAAch/D,KAAKlC,MAAMkhE,aAAc5G,gBAAiBp4D,KAAKlC,MAAMs6D,gBAAiB/wD,QAASrH,KAAK44D,gBAAgB74D,SACxLC,KAAKlC,MAAMkhE,cAAgBt/D,EAAAA,EAAAA,KAAC8gE,EAAkB,CAAC/5D,KAAM,IAAK9G,WAAWG,EAAAA,EAAAA,IAAQ,+BACxEJ,EAAAA,EAAAA,KAAC4gE,EAAY,CAAC3gE,WAAWG,EAAAA,EAAAA,IAAQ,4BAA8B,IAAMg/D,KAIvF,I,eCrBD,MAAM4B,GAA0CnhE,EAAAA,EAAAA,IACnD,cAAsDC,EAAAA,EAClDC,MAAAA,GAAU,IAADq6D,EACL,IAAI6G,EAEAA,EADD3gE,KAAKlC,MAAMkhE,aACQ,EACZh/D,KAAKlC,MAAMs6D,gBACC,GAEA,EAItB,MAAMA,EAA4C,QAA7B0B,EAAG95D,KAAKlC,MAAMs6D,uBAAe,IAAA0B,GAAAA,EAElD,OACItxD,EAAAA,EAAAA,MAACq2D,EAAiC,CAAA9+D,SAAA,EAC9BL,EAAAA,EAAAA,KAACw/D,EAAkC,CAACF,aAAch/D,KAAKlC,MAAMkhE,aAAc5G,gBAAiBA,KAC5F14D,EAAAA,EAAAA,KAAClC,EAAAA,EAA2B,CAACS,WAAY0iE,KACzCjhE,EAAAA,EAAAA,KAAC8/D,EAAiC,CAACR,aAAch/D,KAAKlC,MAAMkhE,aAAc5G,gBAAiBA,KAC3F14D,EAAAA,EAAAA,KAAClC,EAAAA,EAA2B,CAACS,WAAY0iE,KACzCjhE,EAAAA,EAAAA,KAAC2gE,EAA6B,CAACrB,aAAch/D,KAAKlC,MAAMkhE,aAAc5G,gBAAiBA,MAGnG,G,6GCpCR,MAAMwI,EAAmCnjE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gRAItCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAU9CyiE,GAAoCpjE,EAAAA,EAAAA,IAAOmjE,EAAPnjE,CAAwCqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,4CAC3EE,GAAUA,EAAMsF,QAASvC,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,mEACNE,GAAUA,EAAMI,MAAM6J,OAAO+4D,aACxChjE,GAAUA,EAAMI,MAAM6J,OAAOwC,iBACvC,OAIFw2D,GAAsCtjE,EAAAA,EAAAA,IAAOmjE,EAAPnjE,CAAwC0E,IAAAA,GAAAvE,EAAAA,EAAAA,GAAA,4CAC7EE,GAAUA,EAAMsF,QAASvC,EAAAA,EAAAA,IAAGwB,IAAAA,GAAAzE,EAAAA,EAAAA,GAAA,mEACP0E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOi5D,gBAAgB,IACpDljE,GAAUA,EAAMI,MAAM6J,OAAO+4D,aACvC,OAIFG,GAAoCxjE,EAAAA,EAAAA,IAAOmjE,EAAPnjE,CAAwCgF,IAAAA,GAAA7E,EAAAA,EAAAA,GAAA,4CAC3EE,GAAUA,EAAMsF,QAASvC,EAAAA,EAAAA,IAAG6B,IAAAA,GAAA9E,EAAAA,EAAAA,GAAA,mEACNE,GAAUA,EAAMI,MAAM6J,OAAO+4D,aACxChjE,GAAUA,EAAMI,MAAM6J,OAAOwb,iBACvC,OAIF29C,GAAiCzjE,EAAAA,EAAAA,IAAOmjE,EAAPnjE,CAAwCkF,IAAAA,GAAA/E,EAAAA,EAAAA,GAAA,4CACxEE,GAAUA,EAAMsF,QAASvC,EAAAA,EAAAA,IAAG+B,IAAAA,GAAAhF,EAAAA,EAAAA,GAAA,mEACNE,GAAUA,EAAMI,MAAM6J,OAAOo5D,iBACxCrjE,GAAUA,EAAMI,MAAM6J,OAAO+4D,aACvC,OAIFM,GAA+B3jE,EAAAA,EAAAA,IAAOmjE,EAAPnjE,CAAwCqF,IAAAA,GAAAlF,EAAAA,EAAAA,GAAA,2BAC/DE,GAAUA,EAAMsF,OAAStF,EAAMI,MAAM6J,OAAO4B,UAAY7L,EAAMI,MAAM6J,OAAOu1B,iBAGnF+jC,GAAoC5jE,EAAAA,EAAAA,IAAOmjE,EAAPnjE,CAAwCsF,IAAAA,GAAAnF,EAAAA,EAAAA,GAAA,mBAC3EE,GAAUA,EAAMsF,QAASvC,EAAAA,EAAAA,IAAGmC,IAAAA,GAAApF,EAAAA,EAAAA,GAAA,2EACjBE,GAAUA,EAAMI,MAAM6J,OAAO+4D,aAEvC,OAIKQ,GAA6BrvD,EAAAA,EAAAA,GAAc4uD,GACnD3uD,aAAa6uD,GACbQ,WAAWN,GACX9P,QAAQ+P,GACRhQ,MAAMkQ,GACNjvD,WAAWkvD,GACXjvD,O,iECjEE,MAAMovD,E,SAA8B/jE,GAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8B,qGCC/C,MAAM6jE,EAAgChkE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sYAM1Ce,IAAA,IAAC,MAACT,EAAK,OAAEkF,GAAOzE,EAAA,OAAKyE,EAASlF,EAAM6J,OAAO+4D,WAAY5iE,EAAM6J,OAAOjG,IAAI,IAExEQ,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW2yB,SAAS,IAAKhqB,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAW4tC,UAAU,IAGpFlhC,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAMC,WAAWC,SAAS,IAC1C4M,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAM6C,KAAKC,QAAQ8J,OAAO,IAEhC2Y,IAAA,IAAC,MAACvlB,EAAK,OAAEkF,GAAOqgB,EAAA,OAAKrgB,EAASlF,EAAM6J,OAAO+4D,WAAY5iE,EAAM6J,OAAO4B,SAAS,IAI7E+Z,IAAA,IAAC,MAACxlB,GAAMwlB,EAAA,OAAKxlB,EAAM6J,OAAO25D,SAAS,IAI9CC,GAAkClkE,EAAAA,EAAAA,IAAOgkE,EAAPhkE,CAAqCqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,2BAChEgmB,IAAA,IAAC,MAAC1lB,EAAK,OAAEkF,GAAOwgB,EAAA,OAAKxgB,EAASlF,EAAM6J,OAAOi5D,iBAAkB9iE,EAAM6J,OAAOjG,IAAI,IAGrF8/D,GAAgCnkE,EAAAA,EAAAA,IAAOgkE,EAAPhkE,CAAqCmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,oBACrE0qB,IAAA,IAAC,MAACpqB,GAAMoqB,EAAA,OAAKpqB,EAAM6C,KAAKC,QAAQ8J,OAAO,IAGvC+2D,GAA6BpkE,EAAAA,EAAAA,IAAOgkE,EAAPhkE,CAAqC0E,IAAAA,GAAAvE,EAAAA,EAAAA,GAAA,8DAC3DkkE,IAAA,IAAC,MAAC5jE,GAAM4jE,EAAA,OAAK5jE,EAAMC,WAAWC,SAAS,IAC7B2jE,IAAA,IAAC,MAAC7jE,EAAK,OAAEkF,GAAO2+D,EAAA,OAAK3+D,EAAS,IAAK,GAAG,IAIhD4+D,GAAyB/vD,EAAAA,EAAAA,GAAcwvD,GAC/CvvD,aAAayvD,GACbJ,WAAWK,GACXzQ,QAAQ0Q,GACRzvD,O,kGCzCE,MAAM6vD,EAA8BxkE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sKAE7Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO8J,UAAU,IAI/CvP,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW4tC,UAAU,IAAKjlC,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAW2yB,SAAS,I,QCHjG,MAAMoxC,GAAkCzkE,EAAAA,EAAAA,IAAOwkE,EAAPxkE,CAAmCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gGAG9De,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW4tC,UAAU,IAAKzpC,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW2yB,SAAS,IAK3FqxC,GAA8B1kE,EAAAA,EAAAA,IAAOwkE,EAAPxkE,CAAmCqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,mKAExCkJ,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAKwK,EAAAA,EAAAA,GAAUpT,EAAM6J,OAAOyC,iBAAkB,GAAI,IAQ5E43D,GAAuBnwD,EAAAA,EAAAA,GAAcgwD,GAC7CV,WAAWW,GACX/Q,QAAQ+Q,GACR/vD,WAAWgwD,GACX/vD,O,2GCzBE,MAAMiwD,EAA0B5kE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8E,yCCEjD,MAAM0kE,EAAuC7kE,EAAAA,GAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,UAGlD2kE,GAAkC9kE,EAAAA,EAAAA,IAAO6kE,EAAP7kE,CAA4CqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,qRAQ3DE,GAAUA,EAAMsF,OAAStF,EAAMI,MAAM6J,OAAO+4D,WAAa,eAC5EW,EAAAA,GACuB3jE,GAAUA,EAAMI,MAAM6J,OAAO+4D,aAG7CniE,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAKvCokE,GAAgCvwD,EAAAA,EAAAA,GAAcqwD,GACtDpR,MAAMqR,GACNnwD,Q,6DCTL,IACaqwD,GADZljE,EAAAA,EAAAA,IAAQuT,EAAT,cACkDtT,EAAAA,EAAkDuT,WAAAA,GAAA,SAAA9S,WAAA,KAExF24D,gBAAkBl5C,gBAChB1f,KAAKlC,MAAM4kE,SAASC,SAAS,EACtC,KAEOC,YAAc,KAClB,IAAI5iE,KAAKlC,MAAM4kE,SAASG,aAAe7iE,KAAKlC,MAAM4kE,SAASz7D,KACvD,OAAO,KAGX,GAAsC,eAAnCjH,KAAKlC,MAAM4kE,SAASG,WAA6B,CAAC,IAADC,EAChD,MAAMC,EAAO/iE,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM1L,KAAKlC,MAAM4kE,SAASz7D,MACxE,OAAI87D,GAMIrjE,EAAAA,EAAAA,KAACqjE,EAAI,CAACt8D,KAAM,EAAGgC,MAAsC,QAAjCq6D,EAAE9iE,KAAKlC,MAAM4kE,SAASM,mBAAW,IAAAF,EAAAA,EAAI,MAL7D9iE,KAAKwL,SAAS2L,OAAOxI,MAAM,aAAD/O,OAAcI,KAAKlC,MAAM4kE,SAAS5nD,IAAG,yBAAAlb,OAAwBI,KAAKlC,MAAM4kE,SAASz7D,KAAI,gDAExG,KAIf,CAAO,GAAsC,gBAAnCjH,KAAKlC,MAAM4kE,SAASG,WAA8B,CAAC,IAADI,EACxD,MAAMC,EAAWljE,KAAKlC,MAAM4kE,SAASz7D,KACrC,OAAIi8D,GAIIxjE,EAAAA,EAAAA,KAACZ,EAAAA,EAAK,CAACsV,IAAK8uD,EAAU/uD,IAAoC,QAAjC8uD,EAAEjjE,KAAKlC,MAAM4kE,SAASM,mBAAW,IAAAC,EAAAA,EAAI,MAHlEjjE,KAAKwL,SAAS2L,OAAOxI,MAAM,aAAD/O,OAAcI,KAAKlC,MAAM4kE,SAAS5nD,IAAG,yBAAAlb,OAAwBI,KAAKlC,MAAM4kE,SAASz7D,KAAI,iDACxG,KAGf,CAAQ,IAADk8D,EACH,OAAQzjE,EAAAA,EAAAA,KAACZ,EAAAA,EAAK,CAACsV,IAAKpU,KAAKlC,MAAM4kE,SAASz7D,KAAMkN,IAAoC,QAAjCgvD,EAAEnjE,KAAKlC,MAAM4kE,SAASM,mBAAW,IAAAG,EAAAA,EAAI,IAC1F,EACH,KAGOC,uBAAyB,IAE1BpjE,KAAKlC,MAAM4kE,SAASW,oBAEf3jE,EAAAA,EAAAA,KAAC2iE,EAAuB,CAAAtiE,SACnBC,KAAK4iE,iBAKVp6D,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACJL,EAAAA,EAAAA,KAAC8iE,EAA6B,CAACp/D,OAAQpD,KAAKlC,MAAM4kE,SAASY,uBAC3D5jE,EAAAA,EAAAA,KAAC4hE,EAAAA,EAA0B,CAACl+D,OAAQpD,KAAKlC,MAAM4kE,SAASY,oBAAoBvjE,SACvEC,KAAK4iE,iBAEVljE,EAAAA,EAAAA,KAAC8hE,EAAAA,EAA2B,CAAAzhE,SACtBC,KAAKlC,MAAM4kE,SAAS5gE,OAExB9B,KAAKlC,MAAMylE,WAAY7jE,EAAAA,EAAAA,KAAA,KAAM8L,SAAStN,MAAMuN,aAAaC,MAAM83D,YAAW,CAAC/8D,KAAM,IAAQ,OAGlG,CAIDhH,MAAAA,GAAU,IAADgkE,EAEL,IAAIl3B,EAAuC,QAAnCk3B,EAAGzjE,KAAKlC,MAAM4kE,SAASgB,oBAAY,IAAAD,EAAAA,EAAI,GAK/C,OAJGl3B,IACCA,EAAOvsC,KAAKwL,SAASorB,SAAS++B,aAAappB,GAAMptC,aAIjDO,EAAAA,EAAAA,KAACikE,EAAAA,EAA8B,CAAChkE,UAAWK,KAAKlC,MAAM6B,UAAW0H,QAASrH,KAAK44D,gBAAgB74D,UAC3FL,EAAAA,EAAAA,KAAC4sC,EAAAA,EAAI,CAACC,KAAMq3B,UAAUC,UAAUt3B,IAAOxsC,UACnCL,EAAAA,EAAAA,KAACsiE,EAAAA,EAAsB,CAAC5+D,OAAQpD,KAAKlC,MAAM4kE,SAASY,oBAAoBvjE,SACnEC,KAAKojE,8BAK1B,KACHtwD,C,4HC3FD,MAAMgxD,EAAkCrmE,EAAAA,GAAOioC,GAAE/nC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,ylBAKpCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAcxBkE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOwC,cAAc,IAC3BzD,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAM6J,OAAOqB,iBAAiB,IAY9E26D,GAAoCtmE,EAAAA,EAAAA,IAAOqmE,EAAPrmE,CAAuCqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,+EAExCiN,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAM6J,OAAOqB,iBAAiB,IAI9E46D,GAAkCvmE,EAAAA,EAAAA,IAAOqmE,EAAPrmE,CAAuCmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,0DAMzEqmE,GAA6BxmE,EAAAA,EAAAA,IAAOqmE,EAAPrmE,CAAuC0E,IAAAA,GAAAvE,EAAAA,EAAAA,GAAA,+EAEjCoN,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAM6J,OAAOyC,gBAAgB,IAItE05D,GAA2BjyD,EAAAA,EAAAA,GAAc6xD,GACjD5xD,aAAa6xD,GACb5xD,WAAW6xD,GACX9S,MAAM+S,GACN7xD,Q,+CC3CL,IACauxD,GADZpkE,EAAAA,EAAAA,IAAQuT,EAAT,cACoDtT,EAAAA,EAChDC,MAAAA,GAEI,OAAOC,EAAAA,EAAAA,KAACwkE,EAAwB,CAACvkE,UAAWsX,KAAWnX,EAAAA,EAAAA,IAAQ,gBAAiBE,KAAKlC,MAAM6B,WAAY0H,QAASrH,KAAKlC,MAAMuJ,QAAQtH,SAC7HC,KAAKlC,MAAMiC,UAErB,KACH+S,C,qHCRD,MAAMD,GAA8CtT,EAAAA,EAAAA,KAAUzB,IAC1D,MAAMqmE,EAAYrmE,EAAMsmE,aAAa7zD,KAAIuK,GAAOhd,EAAMmmC,SAASogC,YAAYvpD,KACtE2E,QAAOijD,GAAYA,EAASj2D,UACjC,OAAyB,IAArB03D,EAAUjkE,OACH,MAIPR,EAAAA,EAAAA,KAAC0iE,EAAAA,EAAoB,CAACziE,UAAW7B,EAAM6B,UAAUI,UAC7CL,EAAAA,EAAAA,KAAA,MAAIC,WAAWG,EAAAA,EAAAA,IAAQ,uBAAwBgJ,MAAO,CAAClI,OAAQ,IAAK0jE,cAAe,QAAQvkE,SAEnFokE,EAAU5zD,KAAImyD,IACVhjE,EAAAA,EAAAA,KAACsM,EAAAA,SAAc,CAAAjM,SACV2iE,EAAS6B,kBADO7B,EAAS5nD,UAMvB,IAIlB0pD,GAAqBntD,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,Y,gDClCxD,MAAM4xD,E,SAAeC,C,8GCErB,MAAMC,GAA0B9jE,EAAAA,EAAAA,IAAGlD,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,0FAIrCgnE,EAAAA,IAKQF,GAAsBjnE,EAAAA,EAAAA,IAAOqB,EAAAA,EAAPrB,CAAaqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,4vCACnCe,IAAA,IAAC,KAACgiC,GAAKhiC,EAAA,OAAKgiC,EAAO,EAAG,CAAC,GAChCgkC,GAeA7mE,GAASA,EAAM+mE,aAAchkE,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,yFAEvBE,EAAMI,MAAMC,WAAWC,Y,uJC7BpC,MCDa0mE,EDCMrnE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kCACzB+mE,EAAAA,G,eEcG,MAAMI,UAAmCvlE,EAAAA,EAAyCuT,WAAAA,GAAA,SAAA9S,WAAA,KAC7E+kE,qBAA2C,KAAK,KAChDC,0BAAwE,KAAK,KAE7EC,gCAAmCrwC,IACvC70B,KAAKglE,qBAAuBnwC,EAExB70B,KAAKilE,4BACLjlE,KAAKilE,0BAA0BE,aAC/BnlE,KAAKilE,0BAA4B,MAEjCpwC,GAEA70B,KAAKolE,uBAETplE,KAAKglE,qBAAuBnwC,CAAO,CACrC,CAEF,0BAAcuwC,GACVplE,KAAKilE,0BAA4BjlE,KAAKwL,SAAS65D,yBAAyBC,SAAS,CAC7Et/C,QAAShmB,KAAKlC,MAAMynE,iBACpB9+D,KAAM,CACF/E,MAAO1B,KAAKlC,MAAM4D,MAAOL,OAAQrB,KAAKlC,MAAMuD,QAEhDs0B,QAAS31B,KAAKglE,qBACd/wC,QAASj0B,KAAKlC,MAAM0nE,gBACpBC,gBAAiBzlE,KAAKlC,MAAM2nE,gBAC5BC,sBAAuB1lE,KAAKlC,MAAM4nE,uBAE1C,CAEAjmE,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAAColE,EAAoB,CACxBx3D,IAAKtN,KAAKklE,iCAElB,E,mCCxBG,MAAMpjC,GAAqBviC,EAAAA,EAAAA,IAC9B,cAAiC4yB,EAAAA,EAC7Bpf,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAUT6nE,yBAA2B,KAAK,KAShCC,UAAY,KAChB5lE,KAAKuyB,SAAS,CAACszC,kBAAkB,IAC7B7lE,KAAKlC,MAAM8nE,WACX5lE,KAAKlC,MAAM8nE,YAGX5lE,KAAKlC,MAAMgoE,kBAIf9lE,KAAK+lE,yBAAyB,EAChC,KAEMA,wBAA0B,KAC9B/lE,KAAK2lE,yBAA2Bx7B,YAAW,KACvC,IAAIjgB,EAAOlqB,KAAKlC,MAAMmV,SAAS+yD,aAAa,CAACnB,WAAY7kE,KAAKimE,wBAAyBC,cAAc,IACjGh8C,GACAlqB,KAAKuyB,SAAS,CAACgzC,iBAAkBr7C,IAErClqB,KAAK2lE,yBAA2B,IAAI,GACrC3lE,KAAKlC,MAAMmV,SAASkzD,0BAA0BjyC,OAAS,EAAE,EAC9D,KAEMuxC,gBAAkB,KACtBzlE,KAAKuyB,SAAS,CAAC6zC,iBAAiB,IAC5BpmE,KAAKlC,MAAMuoE,4BACXrmE,KAAKlC,MAAMuoE,2BAA2B,WAC1C,EACF,KAEMX,sBAAwB,KAC5B1lE,KAAKuyB,SAAS,CAAC6zC,iBAAiB,IAC5BpmE,KAAKlC,MAAMuoE,4BACXrmE,KAAKlC,MAAMuoE,2BAA2B,SAC1C,EACF,KAEMJ,sBAAwB,IACxBlhE,EAAAA,MAAMkP,kBAAkBjU,KAAKlC,MAAMud,gBAC5Brb,KAAKwL,SAAStN,MAAM6jC,qBAExB/hC,KAAKlC,MAAMud,eA3DlBrb,KAAK0mB,MAAQ,CAAC,CAClB,CAEA3K,iBAAAA,GACQ/b,KAAKlC,MAAMuoE,4BACXrmE,KAAKlC,MAAMuoE,2BAA4BrmE,KAAK0mB,MAAM6+C,iBAAmC,SAAhB,cAE7E,CAIAjgD,oBAAAA,GACIlN,MAAMkN,uBACHtlB,KAAK2lE,2BACJ17B,aAAajqC,KAAK2lE,0BAClB3lE,KAAK2lE,yBAA2B,KAExC,CA6CAlmE,MAAAA,GACI,MAAM6mE,EAAStmE,KAAKlC,MAAMmV,SAASszD,iBAC7BC,EAASxmE,KAAKlC,MAAMmV,SAAS+yD,aAAa,CAACnB,WAAY7kE,KAAKimE,0BAC5DQ,IAAc1hE,EAAAA,MAAMkP,kBAAkBjU,KAAKlC,MAAMumC,iBAAyBrkC,KAAKlC,MAAMumC,eAE3F,OAAO77B,EAAAA,EAAAA,MAAC6sD,EAAAA,GAA6BnwD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAC7BlF,KAAKwL,SAAS2P,MAAMurD,0BAA0B1mE,KAAKimE,0BAAwB,IAC/Exa,UAAWzrD,KAAK0mB,MAAMm/C,iBAAiB9lE,SAAA,CAErCC,KAAK0mB,MAAM6+C,kBAAmB7lE,EAAAA,EAAAA,KAACqlE,GAA0B7/D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACvDqgE,iBAAkBvlE,KAAK0mB,MAAM6+C,iBAC7BC,gBAAiBxlE,KAAKlC,MAAMmV,SAASkzD,0BACrC9qD,eAAgBrb,KAAKimE,yBACjBjmE,KAAKwL,SAAS2P,MAAMurD,0BAA0B1mE,KAAKimE,yBAAyB,IAAK,IACrFR,gBAAiBzlE,KAAKylE,gBACtBC,sBAAuB1lE,KAAK0lE,yBAC3B,MACLhmE,EAAAA,EAAAA,KAAC+kE,EAAAA,GAAYv/D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACTy7B,KAAM3gC,KAAK0mB,MAAM0/C,gBACjBhyD,IAAKoyD,EACLryD,IAAKmyD,EACL7vD,KAAQgwD,EACR9mE,UAAS,iBAAAC,OAAmB+mE,EAAAA,IAC5B7W,YAAa9vD,KAAKlC,MAAMmV,SAAS2zD,2BAA2B5mE,KAAKimE,0BAC7DjmE,KAAKwL,SAAS2P,MAAMurD,0BAA0B1mE,KAAKimE,0BAAwB,IAC/EpB,WAAY7kE,KAAKimE,wBACjBY,YAAaA,KACT7mE,KAAKuyB,SAAS,CAACszC,kBAAkB,GAAM,EAE3CiB,OAAQ9mE,KAAKlC,MAAMgpE,OACnBlB,UAAW5lE,KAAK4lE,gBAG5B,G,yHChID,MAAMmB,EAAW,WACXnC,EAA4B,4BAC5BoC,EAAkB,kBAClBC,EAAuB,uBACvBC,EAAyB,yBACzBC,EAAc,cACdC,EAAuB,uBACvBC,EAAkB,kBAClBV,EAAoB,mB,iECN1B,MCAMW,E,SDAiC7pE,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mbAW3Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWwS,SAAS,IAMvCrO,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,G,sGEfpD,MAAMg7B,EAAapuC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qhBAQEE,GAASA,EAAMI,MAAMa,OAAOC,OAAOC,uBAAuBC,gBAAgBC,aAKxErB,GAASA,EAAMI,MAAMa,OAAOC,OAAOwiC,uBAAuBriC,aAWrF2sC,GAAQruC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,wIAKtB6F,EAAAA,EAAQC,IAAIC,IAAIC,SAQpBooC,GAAYvuC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,yWAGvBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWwS,SAAS,GAIvClN,EAAAA,EAAQC,IAAIC,IAAIC,SAOhBtB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,GAKvCpN,EAAAA,EAAQC,IAAIC,IAAIC,SC1DhB2jE,GDiE+Br7B,EAAAA,EAAAA,GAAeJ,EAAOE,E,sGE/DlE,MAAMH,EAAapuC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,+NAYvBkuC,GAAQruC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,sFAEvBupE,EAAAA,IAKHn7B,GAAYvuC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,iWAIvBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWwS,SAAS,IAOvCrO,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,IChCvC22D,GD2CiBt7B,EAAAA,EAAAA,GAAeJ,EAAOE,E,iEE3C7C,MAAMy7B,E,SAAqBhqE,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,0MAO/Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,G,gDCP7C,MAAMkpE,GAA0B9oE,E,SAAAA,GAAU,0B,wGCgCjD,MAAMqtC,EAAapuC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uvBAMPe,IAAA,IAAC,MAACT,EAAK,WAAE2mE,EAAU,UAAEpZ,EAAS,iBAAEic,GAAiB/oE,EAAA,OA7BvE,SAAkCT,EAAOutD,EAAoBkc,EAAuBD,GAEhF,OAAIjc,EACOvtD,EAAMa,OAAOC,OAAO4oE,gBAAgBzoE,WAG3CuoE,EAEIC,EACOzpE,EAAMa,OAAOC,OAAOC,uBAAuB4oE,sBAAsB1oE,WAGrEjB,EAAMa,OAAOC,OAAOC,uBAAuB6oE,mBAAmB3oE,WAGrEwoE,EACOzpE,EAAMa,OAAOC,OAAOC,uBAAuB4oE,sBAAsB1oE,WAGrEjB,EAAMa,OAAOC,OAAOC,uBAAuBC,gBAAgBC,UACtE,CAS4E4oE,CAAyB7pE,EAAOutD,EAAWoZ,EAAY6C,EAAiB,IAE9I5pE,GAASA,EAAM+mE,aAAchkE,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,6EAOnB0E,IAAA,IAAC,UAACmpD,GAAUnpD,EAAA,OAAKmpD,EAAY,QAAU,MAAM,IAEjD3kD,IAAA,IAAC,WAAC+9D,GAAW/9D,EAAA,OAAK+9D,EAAa,IAAM,MAAM,IAC1Ch6D,IAAA,IAAC,WAACg6D,GAAWh6D,EAAA,OAAKg6D,EAAa,IAAM,MAAM,IAC1C75D,IAAA,IAAC,WAAC65D,GAAW75D,EAAA,OAAK65D,EAAa,IAAM,MAAM,IAC1CphD,IAAA,IAAC,WAACohD,GAAWphD,EAAA,OAAKohD,EAAa,IAAM,QAAQ,IAGtCnhD,IAAA,IAAC,WAACmhD,GAAWnhD,EAAA,OAAKmhD,EAAa,SAAW,KAAK,IAiB3D74B,GAAYvuC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,2GAGnCoqE,EAAAA,IAIFlqE,GAASA,EAAM+mE,aAAchkE,EAAAA,EAAAA,IAAGsB,IAAAA,GAAAvE,EAAAA,EAAAA,GAAA,6CAKzBkuC,EAAQD,EAERo8B,GAA+B/7B,EAAAA,EAAAA,GAAeJ,EAAOE,G,8BChFlE,SAASk8B,IACL,MAAM,8CAANtoE,OAEY+mE,EAAAA,GAAiB,+EAKjC,CAEA,MAAM76B,GAAQruC,EAAAA,EAAAA,IAAO0qE,EAAP1qE,CAAiBE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gLACzBsqE,KAEOvpE,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW4tC,UAAU,GAGtC7f,EAAAA,IAOT8f,GAAYvuC,EAAAA,EAAAA,IAAO2qE,EAAP3qE,CAAqBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,kBACjCsqE,KAGOG,GAAiCn8B,EAAAA,EAAAA,GAAeJ,EAAOE,GC/BvDu7B,GAAwBt1D,EAAAA,EAAAA,GAAcg2D,GAA8B/1D,aAAam2D,GAAgCj2D,O,uFCDvH,MAAMk2D,EAAsB7qE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8pBAGhCE,GAASA,EAAMI,MAAM6J,OAAO4J,oBAWjCq1D,EAAAA,IAIKroE,IAAA,IAAC,MAAET,GAAOS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,GAI1C6oE,EAAAA,IASC3kE,IAAA,IAAC,MAAEpE,GAAOoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,I,iBC/B/C,MAAM03D,GAAwB9qE,EAAAA,EAAAA,IAAO6qE,EAAP7qE,CAA2BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sGACrDE,GAASA,EAAMI,MAAM6J,OAAOmrD,eACnCv0D,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,IAG7BnvB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,I,MCL3C,MAAMoqE,GAAkB/qE,EAAAA,EAAAA,IAAO6qE,EAAP7qE,CAA2BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yCAC/Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAC5CkE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6C,KAAKC,QAAQ8J,OAAO,I,MCFtC,MAAM29D,GAAiBhrE,EAAAA,EAAAA,IAAO6qE,EAAP7qE,CAA2BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gC,MCAlD,MAAM8qE,GAAsBjrE,EAAAA,EAAAA,IAAO6qE,EAAP7qE,CAA2BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mBACxDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQ2nE,KAAK,ICG9BC,GAAe32D,EAAAA,EAAAA,GAAcq2D,GACrCO,OAAOL,GACPM,WAAWN,GACXtX,MAAMuX,GACNM,SAASN,GACTv2D,aAAaq2D,GACbp2D,WAAWu2D,GAAqBt2D,O,gHCJrC,MAAMy5B,EAAapuC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qQAUrBupE,EAAAA,IAMKr7B,GAAQruC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,oPAC/BorE,EAAAA,GAAe7B,EAAAA,IAITxoE,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW4tC,UAAU,GAC3C7f,EAAAA,IAMG5pB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW4tC,UAAU,IAC9BjuC,GAASA,EAAMmrE,eAAiB,OAAS,MAIpDj9B,GAAYvuC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,mdAI9BkJ,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAWwS,SAAS,GAExCw2D,EAAAA,IAICt8D,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAMC,WAAWyS,UAAU,GAEzCu2D,EAAAA,IAICn8D,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAMC,WAAWo3C,SAAS,GAExC4xB,EAAAA,IAIC1jD,IAAA,IAAC,MAACvlB,GAAMulB,EAAA,OAAKvlB,EAAMC,WAAW0S,SAAS,GAExCs2D,EAAAA,IAMC+B,GAAiBh9B,EAAAA,EAAAA,GAAeJ,EAAOE,G,qBClEpD,MAAMk8B,GAASrnE,EAAAA,EAAAA,IAAGlD,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oBACZe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,IAGpCqa,GAAQruC,EAAAA,EAAAA,IAAO0qE,EAAP1qE,CAAiBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,8RACzBsqE,EAGCf,EAAAA,IAIM7kE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW4tC,UAAU,GAC1C7f,EAAAA,IAMEplB,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAW4tC,UAAU,GAC1Co7B,EAAAA,IAMLn7B,GAAYvuC,EAAAA,EAAAA,IAAO2qE,EAAP3qE,CAAqBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,iNACjCsqE,GAIOr9D,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAMC,WAAW0S,SAAS,GACzCs2D,EAAAA,IAKEn8D,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAMC,WAAWwS,SAAS,GACzCw2D,EAAAA,IAMEgC,GAAmBj9B,EAAAA,EAAAA,GAAeJ,EAAOE,G,MC/C/C,MAAMo9B,GAAa3rE,EAAAA,EAAAA,IAAOyrE,EAAPzrE,CAAsBE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oDCGnC4pE,GAAev1D,EAAAA,EAAAA,GAAci3D,GACjBG,OAAOD,GACPl3D,aAAai3D,GACb/2D,O,oOCDlB,MAAMk3D,EAAyB7rE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,mWAEnCe,IAAA,IAAC,MAAC+C,GAAM/C,EAAA,OAAK+C,CAAK,IACjBY,IAAA,IAAC,OAACjB,GAAOiB,EAAA,OAAKjB,CAAM,IAKbyF,IAAA,IAAC,aAACyiE,GAAaziE,EAAA,OAAKyiE,GAAgB,KAAK,I,MCJvD,MAAMC,EAA4B/rE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,iaAIxCe,IAAA,IAAC,IAACkR,GAAIlR,EAAA,OAAKkR,EAAM,OAAS,SAAS,IAClCvN,IAAA,IAAC,KAACmnE,GAAKnnE,EAAA,OAAKmnE,EAAO,OAAS,SAAS,IACpC3iE,IAAA,IAAC,MAAC4iE,GAAM5iE,EAAA,OAAK4iE,EAAQ,OAAS,SAAS,IACtC7+D,IAAA,IAAC,OAAC+pC,GAAO/pC,EAAA,OAAK+pC,EAAS,OAAS,SAAS,IAE1C5pC,IAAA,IAAC,MAACtJ,GAAMsJ,EAAA,OAAKtJ,CAAK,IACjB+hB,IAAA,IAAC,OAACpiB,GAAOoiB,EAAA,OAAKpiB,CAAM,IAIbqiB,IAAA,IAAC,aAAC6lD,GAAa7lD,EAAA,OAAK6lD,GAAgB,KAAK,I,iBCxBvD,MCAMI,EDA8BlsE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sHAKnCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO2P,gBAAgBvY,UAAU,I,0CEctE,MAAMyqE,EAAensE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,kbAgBzBisE,GAAuBpsE,EAAAA,EAAAA,IAAOmsE,EAAPnsE,CAAoBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,iGAY3CksE,GAAuBrsE,EAAAA,EAAAA,IAAOmsE,EAAPnsE,CAAoBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,iGAEpCe,IAAA,IAAC,MAACorE,GAAMprE,EAAA,OAAKorE,EAAQ,MAAQ,KAAK,IAUxC,MAAMC,UAAoCxqE,EAAAA,EAAkDuT,WAAAA,GAAA,SAAA9S,WAAA,KAEvFgqE,wBAA0B,IAC1BjqE,KAAKlC,MAAMud,eACJrb,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOkrE,6BAA6B/qE,WAE5Ea,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOmrE,0BAA0BhrE,UAEvF,CACOirE,0BAAAA,GACJ,OACI5hE,EAAAA,EAAAA,MAACg/D,EAAAA,EAAO,CAACyB,gBAAgB,EAAMtpE,UAAW,cAAcI,SAAA,EACpDL,EAAAA,EAAAA,KAAC6nE,EAAAA,EAAqB,CAAC1C,WAAY7kE,KAAKlC,MAAMud,eAAgBowC,WAAW,EAAK1rD,UAC1EL,EAAAA,EAAAA,KAAC21D,EAAAA,GAA6BnwD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKwL,SAAS2P,MAAMurD,0BAA0B1mE,KAAKlC,MAAMud,iBAAe,IAAEowC,WAAW,QAE5HjjD,EAAAA,EAAAA,MAAC8+D,EAAAA,EAAuB,CAAC2B,eAAgBjpE,KAAKlC,MAAMud,eAAetb,SAAA,EAC/DyI,EAAAA,EAAAA,MAACogE,EAAAA,EAAY,CAAA7oE,SAAA,CAAC,QACVL,EAAAA,EAAAA,KAACmqE,EAAoB,QAEzBnqE,EAAAA,EAAAA,KAAC+nE,EAAAA,EAAkB,CAAA1nE,SAAC,cAIpC,CAEQsqE,0BAAAA,GACJ,OACI7hE,EAAAA,EAAAA,MAAC8hE,EAAAA,EAAc,CAAAvqE,SAAA,EACXL,EAAAA,EAAAA,KAAC6qE,EAAAA,EAA4B,CAAAxqE,UACzBL,EAAAA,EAAAA,KAAC21D,EAAAA,GAA6BnwD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKwL,SAAS2P,MAAMurD,0BAA0B1mE,KAAKlC,MAAMud,iBAAe,IAAEowC,WAAW,EAAK1rD,UACzHL,EAAAA,EAAAA,KAACZ,EAAAA,EAAK,CAACsV,IAAKpU,KAAKiqE,kCAGzBzhE,EAAAA,EAAAA,MAACgiE,EAAAA,EAA8B,CAAAzqE,SAAA,EAC3BL,EAAAA,EAAAA,KAACoqE,EAAoB,KACrBpqE,EAAAA,EAAAA,KAACoqE,EAAoB,CAACC,OAAK,SAI3C,CAEQU,oBAAAA,GACJ,OACI/qE,EAAAA,EAAAA,KAACqtD,EAAAA,EAAY,CAACptD,WAAWG,EAAAA,EAAAA,IAAQ,kCAAkCC,UAC/DyI,EAAAA,EAAAA,MAACmhE,EAAoB,CAAA5pE,SAAA,EACjByI,EAAAA,EAAAA,MAAC6sD,EAAAA,EAA6B,CAAC3zD,MAAO,GAAIL,OAAQ,EAAEtB,SAAA,EAChDL,EAAAA,EAAAA,KAAC8pE,EAAyB,CAAC35D,KAAG,EAAC65D,OAAK,EAAChoE,MAAO,OAAQL,OAAQ,OAAQkoE,aAAc,SAClF7pE,EAAAA,EAAAA,KAAC8pE,EAAyB,CAAC50B,QAAM,EAAC60B,MAAI,EAAC/nE,MAAO,QAASL,OAAQ,OAAQkoE,aAAc,UACrF7pE,EAAAA,EAAAA,KAAC8pE,EAAyB,CAAC50B,QAAM,EAAC80B,OAAK,EAAChoE,MAAO,QAASL,OAAQ,OAAQkoE,aAAc,YAE1F7pE,EAAAA,EAAAA,KAACotD,EAAAA,EAAkB,CAAA/sD,SACdC,KAAKwL,SAASrN,WAAWyS,YACtBlR,EAAAA,EAAAA,KAAC4pE,EAAsB,CAAC5nE,MAAM,QAAQL,OAAO,OAAOkoE,aAAa,UACjE7pE,EAAAA,EAAAA,KAAC4pE,EAAsB,CAAC5nE,MAAM,QAAQL,OAAO,OAAOkoE,aAAa,eAKzF,CAEA9pE,MAAAA,GAEI,OAAIO,KAAKlC,MAAM4sE,eAAiBC,EAAAA,GACrB3qE,KAAKqqE,6BAGZ,CAACO,EAAAA,GAAqBC,EAAAA,IAAmB3tD,SAASld,KAAKlC,MAAM4sE,cACtD1qE,KAAKyqE,uBAGTzqE,KAAKoqE,4BAChB,E,2JCjIG,MAAMU,GAAertE,EAAAA,EAAAA,IAAOqB,EAAAA,EAAPrB,CAAaE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uDAIrCE,GAASA,EAAMud,gBAAiBxa,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,uHAQnCiD,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,8D,UCbA,MAAMmtE,EAA0BttE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gIAO3CE,GAASA,EAAMud,gBAAiBxa,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,iJAO7BiD,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,4E,MCdR,MAAMotE,EAAsBvtE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,0c,MCCtC,MAAMqtE,EAAwBxtE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2K,MCAxC,MAAMstE,EAAuBztE,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4M,eCYvC,MAAMutE,GAAoE5rE,EAAAA,EAAAA,KAAUzB,GAClFA,EAAMstE,UAAattE,EAAMutE,aAIzBvtE,EAAMutE,aAINvtE,EAAMstE,UAKP1rE,EAAAA,EAAAA,KAACqrE,EAAuB,CAAC1vD,eAAgBvd,EAAMud,eAAetb,UAC1DyI,EAAAA,EAAAA,MAACwiE,EAAoB,CAAAjrE,SAAA,EACjBL,EAAAA,EAAAA,KAACurE,EAAqB,CAAAlrE,UAClBL,EAAAA,EAAAA,KAACZ,EAAAA,EAAK,CAAC2X,MAAI,EAACrC,IAAKtW,EAAMstE,SAAUzrE,UAAU,qBAE/CD,EAAAA,EAAAA,KAACwrE,EAAoB,CAAAnrE,UACjBL,EAAAA,EAAAA,KAACZ,EAAAA,EAAK,CAAC2X,MAAI,EAACrC,IAAKtW,EAAMutE,aAAc1rE,UAAU,0BAVnDD,EAAAA,EAAAA,KAACorE,EAAY,CAACr0D,MAAI,EAACrC,IAAKtW,EAAMutE,aAAchwD,eAAgBvd,EAAMud,eAAgB1b,UAAU,mBAJ5FD,EAAAA,EAAAA,KAACorE,EAAY,CAACr0D,MAAI,EAACrC,IAAKtW,EAAMstE,SAAU/vD,eAAgBvd,EAAMud,eAAgB1b,UAAU,kBAJzF,OCOF2rE,GAA8B/rE,EAAAA,EAAAA,IACzC,cAA0C4yB,EAAAA,EAExCpf,WAAAA,CAAYjV,GACVsa,MAAMta,GAAO,KAOPytE,wBAA0B,KAChCvrE,KAAKuyB,SAAS,CAAEk5B,WAAW,GAAQ,EANnCzrD,KAAK0mB,MAAQ,CACX+kC,WAAW,EAEf,CAMAhsD,MAAAA,GAEE,MAAM+rE,EAAwBx/D,EAAAA,YACxBggB,EAAMhsB,KAAKlC,MAAMmuB,IAEvB,OACEvsB,EAAAA,EAAAA,KAACu2D,EAAAA,EAAU,CAACC,QAASl2D,KAAKlC,MAAMmV,SAASw4D,SAAUtV,WAAYqV,EAAiBzrE,UAC9EyI,EAAAA,EAAAA,MAACwjB,EAAG,CAACrsB,UAAS,2BAAAC,OAA6BwnE,EAAAA,IACzC95D,IAAKk+D,EACLnkE,QAASrH,KAAKlC,MAAM4tE,eACpBjgB,UAAWzrD,KAAK0mB,MAAM+kC,UACtBoZ,WAAY7kE,KAAKlC,MAAMud,eACvBqsD,iBAAkB1nE,KAAKlC,MAAMmV,SAAS04D,kBAAkB5rE,SAAA,EAExDL,EAAAA,EAAAA,KAACoiC,EAAAA,EAAkB,CACjB7uB,SAAUjT,KAAKlC,MAAMmV,SAAUoI,eAAgBrb,KAAKlC,MAAMud,eAAgBuqD,UAAW5lE,KAAKurE,wBAC1FlF,2BAA4BrmE,KAAKlC,MAAMuoE,6BAExCrmE,KAAKlC,MAAM8tE,oBACZlsE,EAAAA,EAAAA,KAACyrE,EAAwB,CACvB9vD,eAAgBrb,KAAKlC,MAAMud,eAC3B+vD,SAAUprE,KAAKlC,MAAMmV,SAASm4D,eAAYjrE,EAC1CkrE,aAAcrrE,KAAKlC,MAAMmV,SAASo4D,mBAAgBlrE,QAI5D,I,oDC9DJ,MAAM0rC,EAAapuC,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qEAGhBE,GAASA,EAAMI,MAAM6J,OAAOwb,iBAG5BuoB,GAAQruC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,yDAK1BouC,GAAYvuC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,oHAI9Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW0S,SAAS,IAKvCg7D,GAA4B3/B,EAAAA,EAAAA,GAAeJ,EAAOE,G,qBCnB/D,MAAMk8B,GAASrnE,EAAAA,EAAAA,IAAGlD,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4DACLE,GAASA,EAAMI,MAAM6J,OAAO+jE,cAEnCntE,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,IAGpCqa,GAAQruC,EAAAA,EAAAA,IAAO0qE,EAAP1qE,CAAiBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,0CACzBsqE,GAIAl8B,GAAYvuC,EAAAA,EAAAA,IAAO2qE,EAAP3qE,CAAqBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,kJACjCsqE,GACO5lE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWwS,SAAS,IAKvC7J,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAW0S,SAAS,IAMvCk7D,GAA8B7/B,EAAAA,EAAAA,GAAeJ,EAAOE,G,MCzB1D,MAAMggC,GAAuBvuE,EAAAA,EAAAA,IAAOouE,EAAPpuE,CAAiCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qCACxDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,SAAS,IAC1CrH,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6C,KAAKC,QAAQywB,IAAI,I,iBCDnC,MAAMw6C,GAA4BxuE,EAAAA,EAAAA,IAAOouE,EAAPpuE,CAAiCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,0BAC7D+yD,EAAAA,EAAWG,S,MCDjB,MAAMob,IAAwBzuE,EAAAA,EAAAA,IAAOouE,EAAPpuE,CAAiCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,UCGzDuuE,IAAqBl6D,EAAAA,EAAAA,GAAc45D,GAC3C35D,aAAa65D,GACb7a,MAAM8a,GACN75D,WAAW85D,GACXr2B,cAAcq2B,GACd5C,OAAO6C,IACPrD,OAAOqD,IACP95D,Q,4BCJE,MAAMg6D,IAA0B7sE,EAAAA,EAAAA,IACrC,cAAsCC,GAAAA,EAEpCC,MAAAA,GACE,OAAIO,KAAKlC,MAAMo4D,SAKbx2D,EAAAA,EAAAA,KAACgH,GAAAA,EAAM,CACLM,OAAO,cACPC,KAAM,CAACyB,UAAW1I,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMonB,SAAUrsB,KAAM,WACzE9G,UAAU,2BACV0H,QAASrH,KAAKlC,MAAMuuE,eACpBzrE,OAAO,oBATF,IAYX,I,OCvBG,MCFM0rE,GDEwB7uE,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,oYAexCmpE,EAAAA,I,eERA,MAAMwF,IAA0BhtE,EAAAA,EAAAA,IACrC,cAAsCC,GAAAA,EAEpCC,MAAAA,GACE,OAAIO,KAAKlC,MAAMo4D,SAKbx2D,EAAAA,EAAAA,KAACgH,GAAAA,EAAM,CACL/G,WAAWG,EAAAA,GAAAA,IAAQ,4BACnBuH,QAASrH,KAAKlC,MAAM0uE,oBACpBxlE,OAAO,cAAajH,SAElBC,KAAKwL,SAASoK,YAAYC,UAAU,UATjC,IAaX,I,mBC3BG,MAAM42D,GAA0BhvE,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,gXAWpCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAKvCkE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,I,OCd7C,MAAM67D,IAA4BjvE,EAAAA,EAAAA,IAAOgvE,GAAPhvE,CAA+BE,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,oNAC3DE,GAASA,EAAMI,MAAM6J,OAAO+jE,cAEnCntE,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,IAG7BnvB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWwS,SAAS,IAKvC7J,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAW0S,SAAS,I,OCZ7C,MAAM87D,IAAqBlvE,EAAAA,EAAAA,IAAOgvE,GAAPhvE,CAA+BE,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,sDAChDE,GAASA,EAAMI,MAAM6C,KAAK0F,KAAKsjE,Q,OCDzC,MAAM6C,IAA0BnvE,EAAAA,EAAAA,IAAOgvE,GAAPhvE,CAA+BE,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,4BCGzDivE,IAAmB56D,EAAAA,EAAAA,GAAcw6D,IACzCv6D,aAAaw6D,IACbxb,MAAMyb,IACN5D,SAAS4D,IACTx6D,WAAWy6D,IACXh3B,cAAcg3B,IACdx6D,Q,mBCTE,MCDM06D,GDC8BrvE,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,4UAS1Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,GAK7C2oE,EAAAA,GACGG,EAAAA,I,mBEhBD,MAAM6F,GAA+BtvE,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,kMAGzCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW0S,SAAS,I,gBCwB7C,MAAMm8D,IAA8EztE,EAAAA,EAAAA,KAAUzB,IACjG,MAAM0N,GAAWqD,EAAAA,GAAAA,MACVo+D,EAAaC,IAAkBx/D,EAAAA,EAAAA,WAAS,GACzCy/D,GAAWh+D,EAAAA,EAAAA,QAAuB,OAExCxB,EAAAA,EAAAA,YAAU,KACN7P,EAAMmV,SAASg6D,cAAc1rD,MAAK0rD,IAC9BC,EAAeD,EAAY,GAC7B,GACH,CAACnvE,EAAMmV,WAEV,MAAMm6D,EAAqBA,MAEnBtvE,EAAMwd,sBAAwB9P,EAASqI,OAAOC,WAAahW,EAAMmV,SAASo6D,oBAIvEljE,QAAQ8iE,GAAenvE,EAAMmV,SAASq6D,8BAGjD3/D,EAAAA,EAAAA,YAAU,KACN,GAAa,OAARw/D,QAAQ,IAARA,IAAAA,EAAU5+D,QAAS,OAExB,MAAMg/D,EAAeJ,EAAS5+D,QACxBi/D,GAA0B,OAAZD,QAAY,IAAZA,OAAY,EAAZA,EAAcE,eAAgB,EAE5CC,EAA8B,GADX59D,OAAO69D,iBAAiBJ,GAAcK,iBAAiB,eAAepoE,UAAU,EAAG,GACpE,EAEpCgoE,EAAcE,IACdH,EAAazkE,MAAM+kE,UAAYH,EAAY,KAC3CH,EAAaO,UAAUC,IAAI9G,EAAAA,IAC9B,GACF,CAACkG,IAGJ,MAcMa,EAAgBA,KAClB,GAAIlwE,EAAMmV,SAAS+7C,WACf,OAAOr6C,IAGX,MAAMs5D,EAAsBziE,EAASwJ,SAASk5D,gBAAgBpwE,EAAMmV,SAASk7D,OAAQrwE,EAAMmV,SAASm7D,QAEpG,OADsBtwE,EAAMmV,SAASo7D,gBAAkBJ,EAE5CK,IAGJ,IAAI,EAGTC,EAAcA,IACTzwE,EAAMmV,SAASo7D,gBAAkBvwE,EAAMmV,SAAS+7C,WAGrDr6C,EAAiBA,KAEfjV,EAAAA,EAAAA,KAACmtE,GAAgB,CAACltE,UAAU,yBAAwBI,UAChDL,EAAAA,EAAAA,KAACsiC,GAAAA,EAAoB,CAACjtB,SAAUjX,EAAMmV,SAAS8B,aAKrDu5D,EAAmBA,KACrB,MAAML,EAAsBziE,EAASwJ,SAASk5D,gBAAgBpwE,EAAMmV,SAASk7D,OAAQrwE,EAAMmV,SAASm7D,QACpG,OACI1uE,EAAAA,EAAAA,KAACysE,GAAkB,CAACxsE,UAAU,sBAAqBI,SAC9CkuE,GACgB,EAIvBxZ,EAAeA,KACjB,MAAM+Z,EAAaD,IACnB,OAAIzwE,EAAM2wE,kBACC/uE,EAAAA,EAAAA,KAACqtE,GAA4B,CAACptE,UAAWsX,IAAW,CAAE,cAAeu3D,IAAeA,WAAYA,EAAWzuE,UAC9GL,EAAAA,EAAAA,KAACkpE,EAAAA,EAAY,CACTjpE,UAAWsX,KAAWnX,EAAAA,GAAAA,IAAQ,iBAAkB,CAAE,CAACknE,EAAAA,KAAkB,IACrEyH,kBAAkB,EAAK1uE,SAEtBjC,EAAMmV,SAASxK,WAIjB/I,EAAAA,EAAAA,KAACkpE,EAAAA,EAAY,CAChBjpE,UAAWsX,KAAWnX,EAAAA,GAAAA,IAAQ,iBAAkB,CAAE,CAACknE,EAAAA,KAAmBwH,EAAY,cAAeA,IACjGC,kBAAkB,EAClBnhE,IAAK6/D,EAASptE,SAEbjC,EAAMmV,SAASxK,OAExB,EAcJ,OACID,EAAAA,EAAAA,MAAC8+D,GAAAA,EAAuB,CAAC3nE,UAAU,4BAC/BspE,eAAgBnrE,EAAMmrE,eAAelpE,SAAA,EAXrCyI,EAAAA,EAAAA,MAACskE,GAAoB,CAACntE,UAAWsX,IAAW,uBAAwB,CAAE,CAACiwD,EAAAA,IAAyBkG,MAAwBrtE,SAAA,CACnH00D,IACA32D,EAAM2wE,kBAAoBF,KACvB7uE,EAAAA,EAAAA,KAAC+nE,GAAAA,EAAkB,CAAC9nE,UAAWsX,IAAW,CAAE,uBAAwBnZ,EAAM2wE,iBAAkB,SAAU3wE,EAAMmV,SAAS+7C,WAAY,cAAelxD,EAAMmV,SAASo7D,iBAAkBtuE,SAAEiuE,MACjL,QA5ETZ,KAMD5kE,EAAAA,EAAAA,MAAC8jE,GAAc,CAAAvsE,SAAA,EACXL,EAAAA,EAAAA,KAAC6sE,GAAuB,CAACrW,QAASp4D,EAAMmV,SAASq6D,4BAA6Bd,oBAAqB1uE,EAAM0uE,uBACzG9sE,EAAAA,EAAAA,KAAC0sE,GAAuB,CAAClW,QAAS+W,EAAaZ,eAAgBvuE,EAAMuuE,oBAPlE,OAqFe,I,kBCnJ3B,MAAMqC,GAA2BjxE,EAAAA,GAAO6C,OAAM3C,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,uhBACxBE,GAASA,EAAMI,MAAMa,OAAOC,OAAO2vE,sBAAsBxvE,YAgB/E4nE,EAAAA,IAKMpoE,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW2yB,SAAS,IAAKxuB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWyyB,OAAO,I,OCvBvF,MAAMg+C,IAA6BnxE,EAAAA,EAAAA,IAAOixE,GAAPjxE,CAAgCE,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,oKAK7De,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW4tC,UAAU,I,mBCJ9C,MAAM8iC,IAA6BpxE,EAAAA,EAAAA,IAAOixE,GAAPjxE,CAAgCE,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,+IAK/CE,GAAUoG,GAAAA,GAAMC,QAAQrG,EAAMI,MAAM6J,OAAO0C,aAAc,IAAKqkE,SCH5EC,IAAoB98D,EAAAA,EAAAA,GAAcy8D,IAC1CM,aAAaH,IACb38D,aAAa08D,IAA4Bx8D,Q,4BCNvC,MAAM68D,IAAqBzwE,EAAAA,GAAAA,GAAU,sB,mBC4B5C,IACa0wE,IADZ3vE,EAAAA,EAAAA,IAAQuT,GAAT,cACwDtT,GAAAA,EAAwDuT,WAAAA,GAAA,SAAA9S,WAAA,KACrGkvE,mBAAoC,IAAK,CAEhD,YAAIl8D,GACA,OAAOjT,KAAKlC,MAAMmV,QACtB,CAEQm8D,yBAAAA,GACJ,OAAIpvE,KAAKwL,SAASqI,OAAOmI,GAAGmgB,YAAcn8B,KAAKwL,SAASrN,WAAWkxE,aACxD,MAEH3vE,EAAAA,EAAAA,KAACqvE,GAAiB,CAACpvE,WAAWG,EAAAA,GAAAA,IAAQ,6BAClD,CAEQwvE,sBAAAA,GACJ,OAAItvE,KAAKlC,MAAMyxE,iBAAmBxqE,GAAAA,MAAMkP,kBAAkBjU,KAAKlC,MAAMwV,WAC1D,MAIP5T,EAAAA,EAAAA,KAACuvE,GAAkB,CAACtvE,UAAW,uBAAuBI,SACjDC,KAAKlC,MAAMwV,UAAU,GAGlC,CACA7T,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,CAEKC,KAAKsvE,0BAEN9mE,EAAAA,EAAAA,MAACg/D,GAAAA,EAAO,CAAC7nE,UAAS,mCAAAC,OAAqCI,KAAKlC,MAAM6B,WACtD2H,aAActH,KAAKlC,MAAMwJ,aACzBC,aAAcvH,KAAKlC,MAAMyJ,aACzB0hE,eAAgBjpE,KAAKlC,MAAMud,eAAetb,SAAA,EAG9CL,EAAAA,EAAAA,KAAC4rE,EAA2B,CAACr4D,SAAUjT,KAAKiT,SACZgZ,IAAKs7C,GAAAA,EACLmE,eAAgB1rE,KAAKlC,MAAM4tE,eAC3BrwD,eAAgBrb,KAAKlC,MAAMud,eAC3BuwD,mBAAoB5rE,KAAKovE,4BACzB/I,2BAA4BrmE,KAAKlC,MAAMuoE,8BAGvE3mE,EAAAA,EAAAA,KAACstE,GAA6B,CAAC/5D,SAAUjT,KAAKiT,SAClBqI,qBAAsBtb,KAAKlC,MAAMwd,qBACjC+wD,eAAgBrsE,KAAKlC,MAAMuuE,eAC3BG,oBAAqBxsE,KAAKlC,MAAM0uE,oBAChCvD,eAAgBjpE,KAAKlC,MAAMud,eAC3BozD,iBAAkBzuE,KAAKlC,MAAM2wE,wBAK7E,KACH37D,GCpFM,MAAM08D,GAAoBz8D,WAAAA,GAAA,KAC/B08D,SAAqB,EAAG,CACxBC,MAAAA,GAA0B,IAAD,IAAAC,EAAA1vE,UAAAC,OAAf0vE,EAAO,IAAAx/D,MAAAu/D,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAPD,EAAOC,GAAA5vE,UAAA4vE,GAaf,OAXAD,EAAQhkB,SAAQtrB,IACd,GAAGv7B,GAAAA,MAAM+qE,SAASxvC,GAChBtgC,KAAKyvE,SAAS90D,KAAK2lB,QACd,GAAGv7B,GAAAA,MAAMgrE,QAAQzvC,GACtBA,EAAKsrB,SAAQokB,GAAKhwE,KAAKyvE,SAAS90D,KAAKs+B,OAAO+2B,WACvC,IAAIjrE,GAAAA,MAAMkP,kBAAkBqsB,GAGjC,MAAM,IAAI2vC,MAAM,4DAClB,IAEKjwE,IACT,CAEA4D,KAAAA,GACE,IAAI8xD,EAAS11D,KAAKyvE,SAASxhB,QAAO,CAACC,EAAKC,IAASD,EAAM,IAAMC,GAAM,IACnE,OAAOuH,EAAOlwD,UAAU,EAAGkwD,EAAOx1D,OACpC,E,2CCtBK,MAAMooE,GAAsB7qE,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,8LAIvCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQkvE,MAAM,IAC/BpyE,GAASA,EAAMI,MAAM6J,OAAO4B,YAE5BrH,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,I,OCN7C,MAAM03D,IAAwB9qE,EAAAA,EAAAA,IAAO6qE,GAAP7qE,CAA2BE,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,iCCEnDgrE,IAAe32D,EAAAA,EAAAA,GAAcq2D,IAAqBp2D,aAAaq2D,IAAuBn2D,Q,OCH5F,MAAMq6D,GAA0BhvE,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,4JACnCE,GAASA,EAAMI,MAAM6J,OAAOwb,iBACpC5kB,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQC,KAAK,IAI9BqB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWyyB,OAAO,I,mBCJ3C,MAAM87C,IAA4BjvE,EAAAA,EAAAA,IAAOgvE,GAAPhvE,CAA+BE,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,+ZAClEe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQmvE,SAAS,GAElCxf,GAAAA,EAAWyf,YACKtyE,GAASA,EAAMI,MAAM6J,OAAO4B,YAAoB7L,GAASA,EAAMI,MAAM6J,OAAO4B,YAAwB7L,GAASA,EAAMI,MAAM6J,OAAO4B,YAAwB7L,GAASA,EAAMI,MAAM6J,OAAO4B,YAAoB7L,GAASA,EAAMI,MAAM6J,OAAO4B,YAEhO7L,GAASA,EAAMI,MAAM6J,OAAO4B,YAEhDrH,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,IACnCN,GAASA,EAAMI,MAAM6J,OAAO4B,YCThCkjE,IAAmB56D,EAAAA,EAAAA,GAAcw6D,IAAyBv6D,aAAaw6D,IAA2Bt6D,QCWlG46D,IAAgCztE,EAAAA,EAAAA,IACzC,cAA4CC,GAAAA,EACxCC,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAAC8+D,GAAAA,EAAuB,CAAC3nE,UAAU,4BAA2BI,SAAA,EAC1DL,EAAAA,EAAAA,KAACkpE,GAAY,CAACjpE,UAAU,gBAAeI,SAClCC,KAAKlC,MAAMmV,SAASxK,SAGzB/I,EAAAA,EAAAA,KAACmtE,GAAgB,CAAC,UAAQ,oBAAmB9sE,UACzCL,EAAAA,EAAAA,KAACsiC,GAAAA,EAAoB,CAACjtB,SAAU/U,KAAKlC,MAAMmV,SAAS8B,cAGxDrV,EAAAA,EAAAA,KAACgH,GAAAA,EAAM,CACH/G,UAAU,4BACV0H,QAASrH,KAAKlC,MAAM4tE,eACpB1kE,OAAO,UAASjH,SAEfC,KAAKwL,SAASoK,YAAYC,UAAU,uBAIrD,ICrBKw6D,IAAqC9wE,EAAAA,EAAAA,IAC9C,cAAiDC,GAAAA,EAG7CC,MAAAA,GACI,IAAIwT,EAAWjT,KAAKlC,MAAMmV,SAE1B,OACIzK,EAAAA,EAAAA,MAACg/D,GAAAA,EAAO,CAAC7nE,UAAS,mCAAAC,OAAqCglE,EAAAA,GAAyB,KAAAhlE,OAAII,KAAKlC,MAAM6B,WAAYI,SAAA,EACvGL,EAAAA,EAAAA,KAAC4rE,EAA2B,CAACr4D,SAAUA,EACVgZ,IAAKs7C,GAAAA,EACLmE,eAAgB1rE,KAAKlC,MAAM4tE,eAC3BE,mBAAoB,QAEjDlsE,EAAAA,EAAAA,KAACstE,GAA6B,CAAC/5D,SAAUA,EAAUy4D,eAAgB1rE,KAAKlC,MAAM4tE,mBAG1F,I,mBC/BD,MCAM4E,GDA8B7yE,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,8LAMxCE,GAASA,EAAMI,MAAMC,WAAW0S,Y,eEMtC,MAAM0/D,IAAkChxE,EAAAA,EAAAA,IAC3C,cAA8CC,GAAAA,EAE1CC,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAAC4wE,GAAoB,CAAAvwE,UACbL,EAAAA,EAAAA,KAAC0X,GAAAA,EAAuB,CAExByD,QAAS7a,KAAKlC,MAAM0yE,YAAYz7D,SAChC9B,SAAUjT,KAAKlC,MAAM0yE,YACrBl9D,UAAWtT,KAAKlC,MAAMwV,WAAa,EACnCC,UAAWvT,KAAKlC,MAAMyV,UACtBI,UAAW3T,KAAKwL,SAAS0N,eAAeqC,aAAavb,KAAKlC,MAAM0yE,YAAYz7D,UAC5ErE,YAAU,EACV2C,YAAarT,KAAKlC,MAAMuV,YACxB6D,sBAAuB,MARlBlX,KAAKlC,MAAM0yE,YAAYz7D,WAY5C,I,oGC9BD,MCDM07D,GDC6BhzE,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,gFAElCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAK2S,EAAAA,GAAAA,GAAUpT,EAAM6J,OAAO8J,WAAW1S,WAAY,GAAI,IEI1E,MAAMuxE,WAAkClxE,GAAAA,EACnCojE,WAAAA,GAEJ,GAAI5iE,KAAKwL,SAASkE,KAAKihE,YAAYC,MAAMC,QAAS,CAC9C,MAAMC,EAAW9wE,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMqlE,SACxD,OAAOrxE,EAAAA,EAAAA,KAACoxE,EAAQ,CAACrqE,KAAM,KAC3B,CAEA,MAAMuqE,EAAahxE,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMulE,WAC1D,OAAOvxE,EAAAA,EAAAA,KAACsxE,EAAU,CAACvqE,KAAM,KAC7B,CAEQyqE,YAAAA,GACJlxE,KAAKwL,SAASkE,KAAKihE,YAAYC,MAAMO,QACzC,CAEA1xE,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAAC+wE,GAAmB,CAACppE,QAASA,IAAMrH,KAAKkxE,eAAenxE,SACnDC,KAAK4iE,eAGlB,EClBG,MAAMwO,WAAkC5xE,GAAAA,EAA+CuT,WAAAA,GAAA,SAAA9S,WAAA,KAElFoxE,SAAW,MAAO,CAElBC,eAAAA,GACJ,OAAKtxE,KAAKlC,MAAMyzE,cAKZ7xE,EAAAA,EAAAA,KAACitD,GAAAA,EAAmB,CAACC,aAAW,EAAC9jD,MAAO,CAAC2e,SAAU,WAAY5X,IAAK7P,KAAKqxE,SAAU3H,MAAO1pE,KAAKqxE,UAAUtxE,UACrGL,EAAAA,EAAAA,KAACgxE,GAAyB,CAAC1oC,oBAAqBhoC,KAAKlC,MAAMkqC,wBALxD,IAQf,CAEQwpC,iBAAAA,GACJ,OAAKxxE,KAAKlC,MAAM2zE,qBAKZ/xE,EAAAA,EAAAA,KAACitD,GAAAA,EAAmB,CAACE,SAAO,EAAC/jD,MAAO,CAAC2e,SAAU,WAAYmtB,OAAQ50C,KAAKqxE,SAAU5H,KAAMzpE,KAAKqxE,UAAUtxE,SAClGC,KAAKlC,MAAM2zE,sBALT,IAQf,CAEQC,kBAAAA,GACJ,OAAK1xE,KAAKlC,MAAM6zE,sBAKZjyE,EAAAA,EAAAA,KAACitD,GAAAA,EAAmB,CAAC7jD,MAAO,CAAC2e,SAAU,WAAYmtB,OAAQ50C,KAAKqxE,SAAU3H,MAAO1pE,KAAKqxE,UAAUtxE,SAC3FC,KAAKlC,MAAM6zE,uBALT,IAQf,CAEAlyE,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACwD,EAAAA,SAAc,CAAAjM,SAAA,CACVC,KAAKsxE,kBACLtxE,KAAKwxE,oBACLxxE,KAAK0xE,uBAGlB,E,OC3DG,MCAME,GDA6Bn0E,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,yOAQ9Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQ8J,OAAO,IAChCxI,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAO4B,SAAS,IETnCkoE,IAAiCrzE,EAAAA,GAAAA,GAAU,kC,OCAjD,MCAMszE,GDAuCr0E,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,oF,uDECvD,MCDMm0E,GDCiCt0E,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,uMAQtCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAK2S,EAAAA,GAAAA,GAAUpT,EAAM6J,OAAO8J,WAAW1S,WAAY,GAAI,I,OET1E,MCAM6yE,GDAiCv0E,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,0KAMtCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO8J,WAAW1S,UAAU,I,mBEN1D,MCAM8yE,GDAkCx0E,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,sEAG5Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,UAAUxK,UAAU,I,OEHpD,MCAM+yE,GDAiCz0E,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,oGAI3Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,UAAUxK,UAAU,IEQ5C,MAAMgzE,WAAkC3yE,GAAAA,EAA+CuT,WAAAA,GAAA,SAAA9S,WAAA,KAE1FmyE,kBAAoB,KACpBpyE,KAAKlC,MAAMu0E,SACXryE,KAAKlC,MAAMu0E,UAEfryE,KAAKlC,MAAMw0E,aAAY,EAAM,CAC/B,CAEF7yE,MAAAA,GACI,MAAM8yE,EAAiBvyE,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM8mE,eAE9D,OACIhqE,EAAAA,EAAAA,MAACupE,GAAuB,CAAAhyE,SAAA,EACpBL,EAAAA,EAAAA,KAACsyE,GAAuB,CAAAjyE,UACpBL,EAAAA,EAAAA,KAAC6yE,EAAc,CAAC9rE,KAAM,EAAGH,SAAUC,GAAAA,EAAY2F,SAEnDxM,EAAAA,EAAAA,KAACuyE,GAAwB,CAAAlyE,SACpBC,KAAKwL,SAASoK,YAAYC,UAAU,+BAEzCnW,EAAAA,EAAAA,KAACwyE,GAAuB,CAAAnyE,SACnBC,KAAKwL,SAASoK,YAAYC,UAAU,iCAEzCnW,EAAAA,EAAAA,KAACgH,GAAAA,EAAM,CAACM,OAAO,UAAUG,YAAY,KAAKE,QAASrH,KAAKoyE,kBAAkBryE,SACrEC,KAAKwL,SAASoK,YAAYC,UAAU,aAIrD,E,8BC5BW,MAAM48D,WAAqCjzE,GAAAA,EAAkDuT,WAAAA,GAAA,SAAA9S,WAAA,KAOhGyyE,gBAAkB,KACtB,MAAMz/D,EAAqBjT,KAAKlC,MAAMmV,SAEtC,GAAY,OAARA,QAAQ,IAARA,GAAAA,EAAU0/D,kBACV,OAAe,OAAR1/D,QAAQ,IAARA,OAAQ,EAARA,EAAU0/D,kBAGrB,MAAMj/D,EAAY1T,KAAKwL,SAAS0N,eAAeqC,aAAatI,EAAS8B,UAErE,GAAIhQ,GAAAA,MAAMiP,QAAQN,KAAeA,EAAUwC,WACvC,OAAe,OAARjD,QAAQ,IAARA,OAAQ,EAARA,EAAUkD,cACd,CAEH,IAAIC,EAAcC,KAAKC,SAEvB,OAAOE,EAAAA,GAAAA,IAAc9C,EAAUwC,WAAYE,EAAYjX,WAC3D,EACF,CAEFM,MAAAA,GAA2B,IAADsX,EACtB,OAAQrX,EAAAA,EAAAA,KAACsR,GAAAA,EAAmC,CACxCtP,MAAO,IAAKL,OAAQ,IACpBoV,MAAI,EAACrC,IAAKpU,KAAK0yE,kBACfv+D,IAAwB,QAArB4C,EAAE/W,KAAKlC,MAAMmV,gBAAQ,IAAA8D,OAAA,EAAnBA,EAAqBtO,MAC1B9I,UAAW,2CACXmnE,OAAQ9mE,KAAKlC,MAAMgpE,OACnBlB,UAAW5lE,KAAKlC,MAAM8nE,UACtB30D,WAAYjR,KAAKlC,MAAMmT,YAE/B,EC/CG,MCDM2hE,GDCkCn1E,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,6JAE5Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO0C,aAAatL,UAAU,IAEjDmD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWyS,UAAU,I,OEL9C,MCAMiiE,GDA+Bp1E,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,2JAGzCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,UAAUxK,UAAU,IAE9CmD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWyS,UAAU,I,mBEL9C,MCAMkiE,GDAmCr1E,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,oDAC7Ce,IAAA,IAAC,MAAC+C,GAAM/C,EAAA,OAAK+C,GAAgB,MAAM,I,OEDhD,MAKaqxE,GAL2Bt1E,EAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,iDACxCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO0C,aAAatL,UAAU,I,OCD5D,MAOa6zE,GAP+Bv1E,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,8FCyBvC,MAAMq1E,WAAiCzzE,GAAAA,EAGlD,cAAY0zE,GACR,OAAOlzE,KAAKwL,SAAS0N,eAAeqC,aAAavb,KAAKlC,MAAMmV,SAAS8B,SACzE,CAEQo+D,gBAAAA,GAA+B,IAADC,EAAAC,EAElC,IAAIlF,EACAC,EAUJ,OARGrpE,GAAAA,MAAMkP,kBAAiC,QAAhBm/D,EAACpzE,KAAKkzE,kBAAU,IAAAE,OAAA,EAAfA,EAAiBE,SAAWvuE,GAAAA,MAAMkP,kBAAiC,QAAhBo/D,EAACrzE,KAAKkzE,kBAAU,IAAAG,OAAA,EAAfA,EAAiBE,SAC5FpF,EAASnuE,KAAKlC,MAAMmV,SAASk7D,OAC7BC,EAASpuE,KAAKlC,MAAMmV,SAASm7D,SAE7BD,EAASnuE,KAAKkzE,WAAWI,OACzBlF,EAASpuE,KAAKkzE,WAAWK,SAIzB7zE,EAAAA,EAAAA,KAACkzE,GAAwB,CAAA7yE,SACpBC,KAAKwL,SAASwJ,SAASk5D,gBAAgBC,EAAQC,IAG5D,CAEQt3D,gBAAAA,GAA+B,IAADC,EAAAy8D,EAAAC,EAElC,IAAIhrE,GAA2B,QAAnBsO,EAAA/W,KAAKlC,MAAMmV,gBAAQ,IAAA8D,OAAA,EAAnBA,EAAqBtO,QAAS,OAM1C,OAJmB,QAAf+qE,EAAAxzE,KAAKkzE,kBAAU,IAAAM,GAAM,QAANC,EAAfD,EAAiBj9D,YAAI,IAAAk9D,OAAN,EAAfA,EAAuBvzE,QAAS,IAChCuI,EAAQzI,KAAKkzE,WAAW38D,OAIxB7W,EAAAA,EAAAA,KAACmzE,GAAqB,CAAA9yE,SACjB0I,GAGb,CAEQkM,cAAAA,GACJ,OAAI3U,KAAKlC,MAAMmV,SAAS+7C,YAKpBxmD,EAAAA,EAAAA,MAACwqE,GAA4B,CAAAjzE,SAAA,EACzBL,EAAAA,EAAAA,KAAA,QAAAK,SACKC,KAAKwL,SAASoK,YAAYC,UAAU,cAEzCnW,EAAAA,EAAAA,KAACqzE,GAAwB,CAAAhzE,UACrBL,EAAAA,EAAAA,KAACsiC,GAAAA,EAAoB,CAACjtB,SAAU/U,KAAKlC,MAAMmV,SAAS8B,gBATrD,IAaf,CAEQ2+D,oBAAAA,GACJ,OAAQ1zE,KAAKlC,MAAM2L,MACf,IAAK,OACD,OAAOzJ,KAAKmzE,mBAChB,IAAK,UACD,OAAOnzE,KAAK2U,iBAChB,QACI,OAAO,KAEnB,CAEAlV,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACskD,GAAAA,EAAkB,CAACntD,WAAWG,EAAAA,GAAAA,IAAQ,yCAAyCC,SAAA,EAC5EyI,EAAAA,EAAAA,MAACsqE,GAAyB,CAACpxE,MAAO1B,KAAKwL,SAASrN,WAAWyyB,QAAU,MAAQ,MAAM7wB,SAAA,CAC9EC,KAAK8W,mBACL9W,KAAK0zE,2BAEVh0E,EAAAA,EAAAA,KAACozE,GAAyB,CAAA/yE,UACtBL,EAAAA,EAAAA,KAACgH,GAAAA,EAAM,CACHM,OAAO,UACPvF,WAAS,EACT0F,YAAY,KACZE,QAASrH,KAAKlC,MAAM61E,YAAY5zE,SAE/BC,KAAKwL,SAASoK,YAAYC,UAAU,kBAKzD,E,mEC/EJ,IACa+9D,IAAkB/7D,GAW1BC,GAAAA,GAAWxK,IAAGyK,GAKdE,GAAAA,GAAOC,MAAKF,GAMZF,GAAAA,GAAWxK,IAAG8W,GAGdnM,GAAAA,GAAOC,MAAKmM,GASZvM,GAAAA,GAAWxK,IAAGgX,GAGdxM,GAAAA,GAAWxK,IAAGk0C,GAGdvpC,GAAAA,GAAOC,MAAKupC,GAQZxpC,GAAAA,GAAOC,MAAKwpC,GAOZ5pC,GAAAA,GAAWxK,IAAGq0C,GAGd1pC,GAAAA,GAAOC,OA3DX3Y,EAAAA,EAAAA,KAAQ4Y,GAAT,cACwC3Y,GAAAA,EAEpCuT,WAAAA,CAAYjV,GAERsa,MAAMta,GAAO,KAKT+1E,6BAA4E1zE,GAASoY,EAAAA,GAAAA,GAAA,iBAAAC,GAAA,WAKrFs7D,cAAQ,GAAAv7D,EAAAA,GAAAA,GAAA,0BAAAE,GAAA,WAgBRs7D,oBAAsB,KAC1B/zE,KAAKg0E,sBAAqB,EAAK,GAClCz7D,EAAAA,GAAAA,GAAA,uBAAAmM,GAAA,OAAAnM,EAAAA,GAAAA,GAAA,2BAAAkQ,GAAA,OAAAlQ,EAAAA,GAAAA,GAAA,gCAAAmQ,GAAA,WA+BOurD,oBAAsB,KAC1Bj0E,KAAKlC,MAAM4tE,iBACX,MAAMzf,EAAajsD,KAAKlC,MAAMkqC,oBAAoBikB,WAClDjsD,KAAKwL,SAASqd,UAAU4tB,wBAAwBwV,EAAY,YAAaioB,GAAAA,GAAkCC,MAAOn0E,KAAKlC,MAAMmV,SAAS8B,SAAS,GA5D/IiE,EAAAA,GAAAA,IAAehZ,KACnB,CAUAsyE,WAAAA,CAAYxoE,EAAgBuoE,GACxBryE,KAAKo0E,UAAYtqE,EACjB9J,KAAK8zE,SAAWzB,CACpB,CAMQ2B,oBAAAA,CAAqBlqE,GACzB9J,KAAKq0E,mBAAqBvqE,CAC9B,CAaAwqE,iBAAAA,CAAkBxqE,GACd9J,KAAKu0E,gBAAkBzqE,GACT,IAAVA,GACA9J,KAAKw0E,sBAEb,CAGAA,oBAAAA,IACqC,IAA7Bx0E,KAAKy0E,sBACLz0E,KAAKy0E,qBAAsB,EAEnC,CAMAC,0BAAAA,CAA2B5qE,GACvB9J,KAAK20E,yBAA2B7qE,CACpC,CAQAiS,iBAAAA,GACQ/b,KAAKlC,MAAMmV,SAAS0/D,oBACpB3yE,KAAK6zE,yBAA0BztD,EAAAA,GAAAA,GAAapmB,KAAKlC,MAAMmV,SAAS0/D,mBAChE3yE,KAAK6zE,wBAAwBtyD,KAAKvhB,KAAK+zE,qBAE/C,CAEAzuD,oBAAAA,GACQtlB,KAAK6zE,0BACL7zE,KAAK6zE,6BAA0B1zE,EAEvC,CAEQy0E,oBAAAA,GACJ,IAAK50E,KAAK20E,2BAA6B30E,KAAKu0E,gBACxC,OAAO,KAGX,IAAIM,EAAa,GAOjB,OANI70E,KAAK20E,yBACLE,EAAa70E,KAAKwL,SAASoK,YAAYC,UAAU,kCAC1C7V,KAAKu0E,kBACZM,EAAa70E,KAAKwL,SAASoK,YAAYC,UAAU,+BAG9CnW,EAAAA,EAAAA,KAACkyE,GAAmB,CAAA7xE,SAAE80E,GACjC,CAEQC,kBAAAA,GACJ,OACIp1E,EAAAA,EAAAA,KAACyyE,GAAyB,CACtBE,QAASryE,KAAK8zE,SACdxB,YAAatyE,KAAKsyE,aAG9B,CAEQyC,aAAAA,GACJ,OACIvsE,EAAAA,EAAAA,MAAC6sD,GAAAA,EAA6B,CAAC3zD,MAAO,GAAIL,OAAQ,EAAEtB,SAAA,EAGhDL,EAAAA,EAAAA,KAACqqD,GAAAA,EAAc,CACX92C,SAAUjT,KAAKlC,MAAMmV,SACrBy0B,MAAO1nC,KAAKwL,SAASkE,KAAKihE,YAAYC,MAAMC,QAC5ClpC,QAAS3nC,KAAKsyE,YACd1qC,UAAW5nC,KAAKs0E,kBAChBzsC,wBAAyB7nC,KAAK00E,2BAC9B5sC,gBAAiB9nC,KAAKlC,MAAMgqC,gBAC5BC,WAAY/nC,KAAKlC,MAAMiqC,WACvBt7B,QAASzM,KAAKlC,MAAMgqC,kBAAoB9nC,KAAKo0E,UAC7CpsC,oBAAqBhoC,KAAKlC,MAAMkqC,oBAChCwiB,eAAgBxqD,KAAKlC,MAAM0sD,iBAE5BxqD,KAAKwL,SAASrN,WAAWyS,aAAe5Q,KAAKlC,MAAMgqC,iBAAoB9nC,KAAKo0E,WAAcp0E,KAAKlC,MAAMgqC,iBAAmB9nC,KAAKy0E,qBAAuBz0E,KAAKq0E,mBAAuBr0E,KAAKg1E,2BAA2Bh1E,KAAKo0E,WAAap0E,KAAKlC,MAAMgqC,iBAAmB9nC,KAAK40E,uBACvQ50E,KAAKi1E,8BACJj1E,KAAKo0E,WAAap0E,KAAKlC,MAAMgqC,gBAAmB9nC,KAAK80E,qBAAuB,OAG1F,CAEQG,2BAAAA,GACJ,GAAIj1E,KAAKlC,MAAMo3E,gBAAkBC,GAAgBC,OAC7C,OACI11E,EAAAA,EAAAA,KAAC0xE,GAAyB,CACtBppC,oBAAqBhoC,KAAKlC,MAAMkqC,oBAChCupC,aAAcvxE,KAAKlC,MAAMgqC,kBAAoB9nC,KAAKo0E,YAK9D,MAAM1gE,EAAY1T,KAAKwL,SAAS0N,eAAeqC,aAAavb,KAAKlC,MAAMmV,SAAS8B,UAEhF,OACIrV,EAAAA,EAAAA,KAAC0xE,GAAyB,CACtBppC,oBAAqBhoC,KAAKlC,MAAMkqC,oBAChCypC,qBAAqB/xE,EAAAA,EAAAA,KAAC8U,GAAAA,EAAmB,CAACuJ,qBAAmB,EAACrK,UAAWA,IACzEi+D,sBAAsBjyE,EAAAA,EAAAA,KAACgV,GAAAA,EAAsB,CAAChB,UAAWA,IACzD69D,aAAcvxE,KAAKlC,MAAMgqC,kBAAoB9nC,KAAKo0E,WAI9D,CAEQY,0BAAAA,CAA2B/jE,GAC/B,OAAOvR,EAAAA,EAAAA,KAAC+yE,GAA4B,CAChCx/D,SAAUjT,KAAKlC,MAAMmV,SACrB6zD,OAAQ9mE,KAAKw0E,qBACb5O,UAAW5lE,KAAKw0E,qBAChBvjE,WAAYA,GAEpB,CAEQokE,aAAAA,GACJ,OACI31E,EAAAA,EAAAA,KAACuzE,GAAwB,CACrBU,YAAa3zE,KAAKi0E,oBAClBhhE,SAAUjT,KAAKlC,MAAMmV,SACrBxJ,KAAMzJ,KAAKlC,MAAMo3E,gBAAkBC,GAAgBC,OAAS,UAAY,QAGpF,CAEQE,eAAAA,GACJ,GAAIt1E,KAAKy0E,sBAAwBz0E,KAAKq0E,mBAClC,OACI30E,EAAAA,EAAAA,KAACoyE,GAA6B,CAAA/xE,UAC1BL,EAAAA,EAAAA,KAACsqE,GAAAA,EAA2B,CACxBU,aAAcE,GAAAA,GACdvvD,gBAAgB,KAKpC,CAEQk6D,yBAAAA,GACJ,OAAIv1E,KAAKlC,MAAMgqC,iBAAmB9nC,KAAKwL,SAASrN,WAAWC,UAChD,MAEJsB,EAAAA,EAAAA,KAACmyE,GAA8B,GAC1C,CAGApyE,MAAAA,GAEI,OACI+I,EAAAA,EAAAA,MAACukD,GAAAA,EAAY,CAACptD,WAAWG,EAAAA,GAAAA,IAAQ,kCAAkCC,SAAA,CAC9DC,KAAK+0E,gBACL/0E,KAAKq1E,gBACLr1E,KAAKs1E,kBACLt1E,KAAKu1E,8BAGlB,GACH/8D,IAAA2D,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,aAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAhMgC,CAAM,KAADL,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,eAAArE,IAAA0E,OAAAC,yBAAAvE,GAAAiE,UAAA,eAAAjE,GAAAiE,WAAA3D,IAAA0D,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,sBAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAWL,CAAM,KAADL,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,wBAAAgI,IAAA3H,OAAAC,yBAAAvE,GAAAiE,UAAA,wBAAAjE,GAAAiE,WAAAsI,IAAAvI,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,mBAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAYC,CAAK,IAADiM,IAAAtM,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,uBAAAkI,IAAA,CAAAjI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGA,CAAK,KAADL,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,qBAAAolC,IAAA/kC,OAAAC,yBAAAvE,GAAAiE,UAAA,qBAAAjE,GAAAiE,YAAAD,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,wBAAAqlC,IAAAhlC,OAAAC,yBAAAvE,GAAAiE,UAAA,wBAAAjE,GAAAiE,WAAAsM,IAAAvM,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,4BAAAslC,IAAA,CAAArlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAkBC,CAAM,KAADL,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,8BAAAulC,IAAAllC,OAAAC,yBAAAvE,GAAAiE,UAAA,8BAAAjE,GAAAiE,WAzD5CtJ,GAyD4CqF,MAAArF,I,mBC3F9C,MCDM0iE,GDC+B/3E,EAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,EAAAA,GAAA,+JAEhDC,GAAAA,IACOc,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWyS,UAAU,IAGhCtO,IAAA,IAAC,cAACmzE,GAAcnzE,EAAA,OAAKmzE,EAAgB,aAAe,UAAU,I,4BEA5E,IAAKN,IAGX,SAHWA,GAAAA,EAAe,wCAAfA,EAAe,2BAG1B,CAHWA,KAAAA,GAAe,KAgB3B,IACaO,IAAuB79D,GAY/BC,GAAAA,GAAWxK,IAAGyK,GAEdD,GAAAA,GAAWxK,IAAG0K,GA0CdC,GAAAA,GAAOC,MAAKkM,GAyBZnM,GAAAA,GAAOC,OAlFX3Y,EAAAA,EAAAA,KAAQ4Y,GAAT,cAC6C3Y,GAAAA,EAEzCuT,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAMT63E,8BAA6D,KAAK,KAClEC,8BAA6D,KAAK,KAClEC,uBAAgD,MAAIt9D,EAAAA,GAAAA,GAAA,wBAAAC,GAAA,OAAAD,EAAAA,GAAAA,GAAA,mBAAAE,GAAA,WAMpDq9D,0BAA6BjhD,IACjC70B,KAAK61E,uBAAyBhhD,EACzB70B,KAAK21E,+BAAkC31E,KAAK41E,gCAG7C/gD,GACA70B,KAAK21E,8BAA8BnnE,QAAQqmB,GAC3C70B,KAAK41E,8BAA8BpnE,QAAQqmB,KAE3C70B,KAAK21E,8BAA8Bx+B,UAAUtiB,GAC7C70B,KAAK41E,8BAA8Bz+B,UAAUtiB,IACjD,EACH,KAqBOkhD,sCAAyCp8B,IAC7CA,EAAQiS,SAASx9C,IACbpO,KAAKg2E,mBAAmB5nE,EAAMZ,eAAe,GAC/C,EACL,KAqBOyoE,sCAAyCt8B,IAC7CA,EAAQiS,SAASx9C,IACbpO,KAAKk2E,cAAc9nE,EAAMZ,eAAe,GAC1C,EACL,KA+CO2oE,wBAA0B,IAC1Bn2E,KAAKlC,MAAMo3E,gBAAkBC,GAAgBiB,YACtCp2E,KAAKwL,SAAS6qE,kBAGlBr2E,KAAKwL,SAAS8qE,oBA9HrBt9D,EAAAA,GAAAA,IAAehZ,KACnB,CA0BQu2E,4BAAAA,GACAv2E,KAAKw2E,aAAex2E,KAAKy2E,kBACzBz2E,KAAKlC,MAAM44E,qBAAqB12E,KAAKlC,MAAMwV,UAEnD,CAEQqjE,iCAAAA,CAAkC9hD,GACtC,MAAM+hD,EAAwD,CAC1D/oE,UAAW,IACXE,KAAM8mB,GAEN70B,KAAKwL,SAASrN,WAAWyS,aACzBgmE,EAA4BC,WAAa,eAG7C72E,KAAK21E,8BAAgC,IAAIxnE,qBAAqBnO,KAAK+1E,sCAAuCa,EAC9G,CASAZ,kBAAAA,CAAmB1wE,GACftF,KAAKy2E,iBAAmBnxE,EACxBtF,KAAKu2E,8BACT,CAEQO,kCAAAA,GACA92E,KAAK21E,gCACL31E,KAAK21E,8BAA8BlnE,aACnCzO,KAAK21E,8BAAgC,KAE7C,CAEQoB,mCAAAA,GACJ/2E,KAAK41E,8BAAgC,IAAIznE,qBAAqBnO,KAAKi2E,sCAAuC,CACtGpoE,UAAW,KAEnB,CASAqoE,aAAAA,CAAc5wE,GACVtF,KAAKw2E,YAAclxE,EACnBtF,KAAKu2E,8BACT,CAEQS,oCAAAA,GACAh3E,KAAK41E,gCACL51E,KAAK41E,8BAA8BnnE,aACnCzO,KAAK41E,8BAAgC,KAE7C,CAEA75D,iBAAAA,GACI3D,MAAM2D,oBACN/b,KAAK+2E,sCACD/2E,KAAK61E,wBACL71E,KAAK41E,8BAA8BpnE,QAAQxO,KAAK61E,wBAEhD71E,KAAKlC,MAAMm5E,qBACXj3E,KAAK22E,kCAAkC32E,KAAKlC,MAAMm5E,oBAC9Cj3E,KAAK61E,wBACL71E,KAAK21E,8BAA8BnnE,QAAQxO,KAAK61E,wBAG5D,CAEAvwD,oBAAAA,GACIlN,MAAMkN,uBACNtlB,KAAK82E,qCACL92E,KAAKg3E,sCACT,CAEA5xD,kBAAAA,CAAmBC,GACXrlB,KAAKlC,MAAMm5E,mBACPj3E,KAAKlC,MAAMm5E,qBAAuB5xD,EAAU4xD,qBAC5Cj3E,KAAK82E,qCACL92E,KAAK22E,kCAAkC32E,KAAKlC,MAAMm5E,oBAClDj3E,KAAK21E,8BAA8BnnE,QAAQxO,KAAK61E,yBAGpD71E,KAAK82E,oCAEb,CAUAr3E,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAAC81E,GAAqB,CAClBloE,IAAKtN,KAAK81E,0BACVL,cAAez1E,KAAKwL,SAASrN,WAAWyS,aAAe5Q,KAAKy2E,iBAAiB12E,UAE7EL,EAAAA,EAAAA,KAACk0E,GAAkB,CACf3gE,SAAUjT,KAAKlC,MAAMmV,SACrB60B,gBAAiB9nC,KAAKy2E,iBACtB1uC,WAAY/nC,KAAKw2E,YACjB9K,eAAgB1rE,KAAKlC,MAAM4tE,eAC3B1jC,oBAAqBhoC,KAAKm2E,0BAC1BjB,cAAel1E,KAAKlC,MAAMo3E,cAC1B1qB,eAAgBxqD,KAAKlC,MAAMo5E,kBAI3C,GACH1+D,IAAA2D,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,oBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA3I8B,CAAM,IAAD/D,IAAA0D,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,eAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEV,CAAM,KAADL,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,sBAAApE,IAAAyE,OAAAC,yBAAAvE,GAAAiE,UAAA,sBAAAjE,GAAAiE,YAAAD,EAAAA,GAAAA,GAAAhE,GAAAiE,UAAA,iBAAAgI,IAAA3H,OAAAC,yBAAAvE,GAAAiE,UAAA,iBAAAjE,GAAAiE,WAhBtBtJ,GAgBsBqF,MAAArF,I,gBCH/B,MAAMD,IAAoDtT,EAAAA,EAAAA,KAAUzB,IAChE,MAAM0N,GAAWqD,EAAAA,GAAAA,KACXsoE,GAAoBhoE,EAAAA,EAAAA,QAA+B,UACnD8D,EAAWzH,EAAS2P,MAAMC,SAAStd,EAAMiX,UAEzC/B,EAAY0M,UAGd,MAAMxM,EAAqC,CACvCC,WAAYikE,EACZhkE,SAAUtV,EAAMuV,YAChBE,UAAWzV,EAAMyV,UACjB8jE,aAAcv5E,EAAMu5E,aACpBC,YAAax5E,EAAMw5E,YACnBC,aAAcz5E,EAAMy5E,aACpBjkE,UAAWxV,EAAMwV,UACjBkkE,SAAU15E,EAAM25E,aAChBC,sBAAuB55E,EAAM65E,qBAC7BR,kBAAmBA,EAAkB5oE,eAGnC0E,EAASO,KAAKN,EAAe,EAQjC0kE,EAAel4D,gBACX1M,GAAU,EAAK,EAGnB6kE,EAAoBn4D,gBAChB1M,GAAU,EAAM,EAGpB8kE,EAAep4D,UACjB,MAAMq4D,QAAoB9kE,EAAS+kE,iBAdhB19C,MAenB9uB,EAASorB,SAASjc,KAAKo9D,GAfJz9C,EAgBL,OAAD16B,OAAQqT,EAAS8B,UAf9BvJ,EAASqd,UAAUC,qBAAqB,CAACC,UAAU,iBAAiBC,SAASlrB,EAAMuV,YAAa4E,OAAQna,EAAMyV,UAAW+mB,MAAOA,IAAQ,EAe/F,EAGvC29C,EAAgBA,IACXn6E,EAAMo6E,qBAAqBC,mBAC1Br6E,EAAMwd,qBAGZ88D,EAAwB1xD,IAC1BywD,EAAkB5oE,QAAUmY,CAAK,EAG/Bpf,EAAeA,KACb2wE,KACAn6E,EAAMo6E,qBAAqBG,eAAev6E,EAAMiX,SACpD,EAGExN,EAAeA,KACb0wE,KACAn6E,EAAMo6E,qBAAqBI,kBAC/B,EA4BJ,IAAIrlE,EACA,OAAO,KAGX,IAEI,MAAM28D,EA/BsB38D,KAC5B,IAAIslE,EAAU,IAAI/I,GAmBlB,OAjBA+I,EAAQ7I,OAAO3I,EAAAA,IAEZjpE,EAAM06E,iBACLD,EAAUA,EAAQ7I,OAAOvI,EAAAA,KAGzBl0D,IACAslE,EAAUA,EAAQ7I,OAAO,cAAD9vE,OAAe64E,GAAWxlE,EAASylE,aACtDhJ,OAAOz8D,EAAS0lE,uBAChBjJ,OAAO,gBAAD9vE,OAAiB64E,GAAWxlE,EAAS2lE,eAC3ClJ,OAAO,aAAD9vE,OAAcqT,EAAS8B,YAGnCjX,EAAM65E,sBACLY,EAAQ7I,QAAO5vE,EAAAA,GAAAA,IAAQ,8BAGpBy4E,EAAQ30E,OAAO,EAWNi1E,CAAuB5lE,GAEvC,OAAQnV,EAAM4sE,cAEV,KAAKC,GAAAA,GACD,OACIjrE,EAAAA,EAAAA,KAAC2wE,GAAkC,CACCp9D,SAAUA,EACVtT,UAAWiwE,EACXlE,eAAgBkM,GAHX95E,EAAM4sE,cAOvD,KAAKoO,GAAAA,GACD,OACIp5E,EAAAA,EAAAA,KAAC6wE,GAA+B,CACCC,YAAav9D,EACbM,UAAWzV,EAAMyV,UACjBD,UAAWxV,EAAMwV,UACjBD,YAAavV,EAAMuV,aAJdvV,EAAM4sE,cAQpD,KAAKE,GAAAA,GACD,OACIlrE,EAAAA,EAAAA,KAACg2E,GAAuB,CACCziE,SAAUA,EACVy4D,eAAgBkM,EAChBX,mBAAoBn5E,EAAMm5E,mBAC1B/B,cAAeC,GAAgBiB,YAC/B9iE,UAAWxV,EAAMwV,UACjBojE,qBAAsB54E,EAAM44E,sBANvB54E,EAAM4sE,cAU5C,KAAKG,GAAAA,GACD,OACInrE,EAAAA,EAAAA,KAACg2E,GAAuB,CACCziE,SAAUA,EACVy4D,eAAgBkM,EAChBX,mBAAoBn5E,EAAMm5E,mBAC1B/B,cAAeC,GAAgBC,OAC/B8B,eAAgBp5E,EAAMo5E,eACtB5jE,UAAWxV,EAAMwV,UACjBojE,qBAAsB54E,EAAM44E,sBAPvB54E,EAAM4sE,cAW5C,QACI,OACIhrE,EAAAA,EAAAA,KAACwvE,GAAkC,CACCvvE,UAAWiwE,EACX38D,SAAUA,EACVqI,qBAAsBxd,EAAMwd,qBAC5BhU,aAAcA,EACdC,aAAcA,EACdmkE,eAAgBkM,EAChBpL,oBAAqBqL,EACrBvkE,UAAWxV,EAAMwV,UACjBi8D,gBAAiBzxE,EAAMyxE,gBACvBl0D,eAAgBvd,EAAMud,eACtBgxD,eAAgByL,EAChBzR,2BAA4B+R,EAC5B3J,iBAAkB3wE,EAAM2wE,mBAAoB,GAbxC,gCAkBxD,CAAE,MAAO//D,GAEL,OADAlD,EAAS2L,OAAOxI,MAAM,iDAAD/O,OAAkDqT,EAAS8B,SAAQ,OAAAnV,OAAMqT,EAASxK,MAAK,aAAA7I,OAAY9B,EAAMyV,WAAa7E,GACpI,IACX,KAISwM,IAAsB7D,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,wBAAyB,CACrF+Z,eAAgB9uB,IAER4B,EAAAA,EAAAA,KAACsqE,GAAAA,EAA2B,CACxBU,aAAc5sE,EAAM4sE,aACpBrvD,eAAgBvd,EAAMud,mBAMtC,SAASo9D,GAAWM,GAChB,IACI,OAAOA,EAAIC,QAAQ,OAAQ,KAAKh5D,aACpC,CACA,MAAMxb,GACF,MAAO,EACX,CACJ,C,iEChOO,MAAMy0E,E,SAA+Bx7E,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,6HACzCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO0C,YAAY,IAC3BnI,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAO0C,YAAY,G,yHCDvD,MAAMyuE,EAAsBz7E,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,ikBAMxCu7E,EAAAA,IAIMx6E,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWo3C,SAAS,GAE3C4jC,EAAAA,GAA4B5oB,EAAAA,GAA2B6oB,EAAAA,GAA4B3oB,EAAAA,IAK/EnuD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,GAE3C0/C,EAAAA,GAA2B6oB,EAAAA,GAA4B3oB,EAAAA,GAGvD0oB,EAAAA,I,iBCjBA,MAAME,EAAkB57E,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oYAKpCu7E,EAAAA,IAKMx6E,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAKvCkE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,GAG3CsoE,EAAAA,I,MCjBA,MAAMG,GAAiB77E,EAAAA,EAAAA,IAAOy7E,EAAPz7E,CAA2BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qTAC9Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWo3C,SAAS,GAE3C4jC,EAAAA,IAKI72E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,GAE3CsoE,EAAAA,IAKeryE,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAM6J,OAAOwC,cAAc,I,MCfvD,MAAMgvE,GAAsB97E,EAAAA,EAAAA,IAAOy7E,EAAPz7E,CAA2BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4PAEzDu7E,EAAAA,IAIMx6E,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWo3C,SAAS,GAE3C4jC,EAAAA,I,MCRA,MAAMK,GAAwB/7E,EAAAA,EAAAA,IAAOy7E,EAAPz7E,CAA2BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,4PAE3Du7E,EAAAA,IAIMx6E,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWo3C,SAAS,GAE3C4jC,EAAAA,ICVMM,GAAexnE,EAAAA,EAAAA,GAAcinE,GACrClK,aAAawK,GACbtnE,aAAamnE,GACbnoB,MAAMooB,GACNnnE,WAAWonE,GACXnnE,Q,iBCTE,MCDMsnE,GDC2Bj8E,EAAAA,EAAAA,IAAOqB,EAAAA,EAAPrB,CAAaE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gF,mBEErD,MAAM+7E,GAAQl8E,EAAAA,EAAAA,IAAOqB,EAAAA,EAAPrB,CAAaE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,QAErBouC,GAAYvuC,EAAAA,EAAAA,IAAOqB,EAAAA,EAAPrB,CAAaqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,yDACxBu7E,EAAAA,IAKMS,GAA+B1tC,EAAAA,EAAAA,GAAeytC,EAAO3tC,GCVrD6tC,GAAwB5nE,EAAAA,EAAAA,GAAc2nE,GAA8BxnE,Q,UCAjF,MAAMy5B,EAAapuC,EAAAA,GAAOq8E,GAAEn8E,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,sDAExBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQkvE,MAAM,IAC/BpyE,GAASA,EAAMI,MAAM6J,OAAO4B,YAGjCgwE,GAAQl8E,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,6DAK1BouC,GAAYvuC,EAAAA,EAAAA,IAAOouC,EAAPpuC,CAAkBmE,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,+EAGzB0E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,IAKrCkpE,GAA2B7tC,EAAAA,EAAAA,GAAeytC,EAAO3tC,G,MCnBvD,MAAMguC,GAA6Bv8E,EAAAA,EAAAA,IAAOs8E,EAAPt8E,CAAgCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oBACpEe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,ICA7BwoD,GAAoBhoE,EAAAA,EAAAA,GAAc8nE,GAA0B7nE,aAAa8nE,GAA4B5nE,Q,MCF3G,MAAM8nE,EAA8Bz8E,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,+M,MCC9C,MAAMu8E,GAAgC18E,EAAAA,EAAAA,IAAOy8E,EAAPz8E,CAAmCE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,UCCnEw8E,GAAuBnoE,EAAAA,EAAAA,GAAcioE,GAA6BhoE,aAAaioE,GAA+B/nE,Q,mBCFpH,MAAMioE,EAA0B58E,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,gGAQpC08E,GAAgC78E,EAAAA,EAAAA,IAAO48E,EAAP58E,CAA+BqD,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,2B,iBCJ5E,MAAM28E,GAAwB98E,EAAAA,EAAAA,IAAO48E,EAAP58E,CAA+BE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qDAShD48E,IAA4Ej7E,EAAAA,EAAAA,KAAUzB,IAC/F,MAAM28E,GAASC,EAAAA,EAAAA,UAAQ,MAAS,IAAG,IACnC,OAAOh7E,EAAAA,EAAAA,KAAC66E,EAAqB,CAAAx6E,UACzBL,EAAAA,EAAAA,KAAC4yD,EAAAA,EAAe,CACZl+C,IAAKtW,EAAMq+C,MACXw+B,UAAQ,EACRzyC,MAAI,EACJp/B,MAAO2xE,KAES,I,+BCb5B,IACaG,IADZr7E,EAAAA,EAAAA,IAAQuT,GAAT,cACmDtT,EAAAA,EAA+CuT,WAAAA,GAAA,SAAA9S,WAAA,KACtF0kB,kBAA2C,KAAK,KAChDk2D,kBAAoB,KAAK,KACzBC,qBAA2C,KAAK,KAmFhD/1D,2BAA8BC,IAClChlB,KAAK2kB,kBAAoBK,CAAE,CAC9B,CAnFDjJ,iBAAAA,GACI/b,KAAK+6E,kBACL/6E,KAAK66E,mBAAoBprE,EAAAA,GAAAA,KAAS,IAC9B,CACIzP,KAAKwL,SAASrN,WAAWC,UACzB4B,KAAKwL,SAASrN,WAAW0S,aAE5BqZ,IACGlqB,KAAKg7E,iBACLh7E,KAAK+6E,iBAAiB,GAElC,CAGAz1D,oBAAAA,GACItlB,KAAKg7E,iBACLh7E,KAAK66E,mBACT,CAEQI,gBAAAA,GACJ,IAAIC,EAA0B,CAC1Bx5E,MAAO,KACPL,OAAQ,IACR0kB,KAAM,UACNo1D,MAAO,GAgBX,OAbIn7E,KAAKwL,SAASrN,WAAWC,YACzB88E,EAAwBx5E,MAAQ,KAChCw5E,EAAwB75E,OAAS,IACjC65E,EAAwBn1D,KAAO,SAC/Bm1D,EAAwBC,MAAQ,GAGhCn7E,KAAKwL,SAASrN,WAAW0S,YACzBqqE,EAAwBx5E,MAAQ,IAChCw5E,EAAwB75E,OAAS,IACjC65E,EAAwBn1D,KAAO,SAC/Bm1D,EAAwBC,MAAQ,IAE7B,IAAIt1D,GAAAA,EACP7lB,KAAKwL,SACL,CACI9J,MAAOw5E,EAAwBx5E,MAAOL,OAAQ65E,EAAwB75E,OAAQykB,sBAAsB,GAExG,CAAC,CAACC,KAAM,8BAA+BC,QAAShmB,KAAKlC,MAAMq+C,QAC3D,CACI18C,OAAQd,IAAiC,IAAhC,QAACy8E,EAAO,gBAAEj1D,GAAgBxnB,EAC3B8nB,EAAiBN,EAAgBk1D,4BACrC50D,EAAele,SAAS+yE,cAAcJ,EAAwBn1D,MAC9DU,EAAele,SAASgzE,sBAGxB90D,EAAenW,EAAI8qE,EAAQI,OAAO95E,MAAQ,EAC1C+kB,EAAeg1D,EAAIL,EAAQI,OAAOn6E,OAAS,EAC3ColB,EAAe00D,MAAMO,IAAIR,EAAwBC,OAG7C10D,EAAeC,MAAMG,aAAa,EAAG,SAAS,GAC9CJ,EAAeC,MAAMI,aAAa,EAAG,QAAQ,EAAM,EAGzC,GAGtB,CACIplB,MAAO,QAGnB,CAEA,qBAAcq5E,GACV/6E,KAAK86E,qBAAuB96E,KAAKi7E,mBACjCj7E,KAAK86E,qBAAqBn1D,QAC1B3lB,KAAK86E,qBAAqBl1D,YAAY5lB,KAAK2kB,kBAC/C,CAEQq2D,cAAAA,GACJh7E,KAAK86E,qBAAqBz8D,SAC9B,CAMA5e,MAAAA,GACI,OAAQ+I,EAAAA,EAAAA,MAAAswB,EAAAA,SAAA,CAAA/4B,SAAA,EACJL,EAAAA,EAAAA,KAAC26E,EAAuB,CAAC/sE,IAAKtN,KAAK+kB,8BAGnCrlB,EAAAA,EAAAA,KAAC46E,EAA6B,MAEtC,KACHxnE,G,OCnGD,IACa6oE,IADZp8E,EAAAA,EAAAA,IAAQuT,GAAT,cAC+CtT,EAAAA,EAC3CC,MAAAA,GACI,MAA+C,SAA3CO,KAAKlC,MAAM89E,qBAAqBC,QACzBn8E,EAAAA,EAAAA,KAACk7E,GAA6B,CAACz+B,MAAOn8C,KAAKlC,MAAM89E,qBAAqB3hB,OAE1Ev6D,EAAAA,EAAAA,KAAC86E,GAA+B,CAACr+B,MAAOn8C,KAAKlC,MAAM89E,qBAAqB3hB,KACnF,KACHnnD,GCEM,MAAMgpE,IAAoBv8E,EAAAA,EAAAA,IAAS,cAAgCC,EAAAA,EAE9Du8E,mBAAAA,GACJ,GAAG/7E,KAAKlC,MAAM2K,MAAO,CACjB,MAAMuzE,EAAUh8E,KAAKwL,SAASqI,OAAOC,SAC/B9T,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOi9E,4BAA4B98E,WAC3Ea,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOk9E,qBAAqB/8E,WAC1E,OACIqJ,EAAAA,EAAAA,MAAC4xE,EAAoB,CAAAr6E,SAAA,EACTL,EAAAA,EAAAA,KAACm6E,EAAqB,CAClBl6E,UAAW,2BACXwU,IAAKnU,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKlC,MAAM2K,OAAS,QAC7D2L,IAAK4nE,KAEjBt8E,EAAAA,EAAAA,KAACu6E,EAAiB,CAACt6E,UAAW,sBAAsBI,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKlC,MAAM2K,WAGjH,CACA,OAAO,IACX,CAEAhJ,MAAAA,GACI,OAAKO,KAAKlC,MAAMq+C,OAAUn8C,KAAKwL,SAASmmD,YAAYwqB,YAAcn8E,KAAKwL,SAASrN,WAAW0S,UAChF,MAKPnR,EAAAA,EAAAA,KAAC6e,EAAAA,GAAa,CAACrgB,MAAO8B,KAAKwL,SAAStN,MAAMuN,aAAa1L,UACnDyI,EAAAA,EAAAA,MAACixE,EAAY,CAACnsE,IAAKtN,KAAKlC,MAAMs+E,YAAaz8E,UAAW,gBAAgBI,SAAA,CACjEC,KAAKlC,MAAMu+E,gBACZ38E,EAAAA,EAAAA,KAACi8E,GAAyB,CAACC,qBAAsB57E,KAAKlC,MAAMu+E,kBAE5D38E,EAAAA,EAAAA,KAACg6E,EAAiB,CACdvlE,IAAKnU,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKlC,MAAM2K,OAASzI,KAAKlC,MAAMw+E,SAAW,IACnFloE,IAAKpU,KAAKlC,MAAMq+C,MAChBx8C,UAAW,sBACX48E,cAAc,SAEjBv8E,KAAK+7E,0BAKtB,G,gDC/DG,MAAMS,GAAsBh+E,E,SAAAA,GAAU,qB,gJCIsB,IAU7DqU,GADLtT,EAAAA,EAAAA,IAAQuT,EAAT,cAC4BtT,EAAAA,EACxBC,MAAAA,GACI,MAAMg9E,EAAuBz8E,KAAKlC,MAAM4+E,qBAAuB18E,KAAKlC,MAAM4+E,qBAAuBj/E,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,QAC3G,OAAOoC,KAAKlC,MAAMimC,SAAS44C,qBAAqBpsE,KAAI,CAACqsE,EAAMv5C,KACvD3jC,EAAAA,EAAAA,KAAC+8E,EAAoB,CAAC98E,UAAWK,KAAKlC,MAAM++E,2BAA2B98E,UACnEL,EAAAA,EAAAA,KAAC88E,EAAAA,EAAkB,CAAC78E,UAAU,uBAAsBI,SAC9C68E,EAAKrsE,KAAI,CAACmyD,EAAUr/B,IAAUq/B,EAAS6B,eAAe,CAACuY,cAAe98E,KAAKlC,MAAMi/E,YAAaC,gBAAiB35C,SAF5C,QAAQA,IAM7F,KACHvwB,EAEM,MAAMmqE,GAA2B5lE,EAAAA,EAAAA,GAAaxE,EAAe,CAAC,Y,+CC3B9D,MAAMqqE,GAAuB1+E,E,SAAAA,GAAU,uB,gDCAvC,MAAM2+E,GAAqB3+E,E,SAAAA,GAAU,qB,iECCrC,MAAMkuD,E,SAAsBjvD,GAAO6C,OAAM3C,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,8aACnBE,GAASA,EAAMI,MAAMa,OAAOC,OAAO2vE,sBAAsBxvE,Y,0ECA/E,SAAS0P,IACZ,OAAOuuE,EAAAA,EAAAA,YAAWC,EAAAA,IAAc7xE,QACpC,C,gGCgBA,SAAS8xE,EAA0B9xE,GAC/B,OAAOA,EAASyiD,QAAO,CAACsvB,EAAahvE,KACjCgvE,EAAYhvE,EAAQivE,aAAejvE,EAAQkvE,gBACpCF,IACR,CAAC,EACR,CA0CO,SAASlmE,EAAqB3O,EACAg1E,EACAr3E,GAgCjC,OA9B+Cs3E,IAC3C,MAAMC,GAAmB/uE,EAAAA,EAAAA,MAClBgvE,EAAkBC,IAAuBpwE,EAAAA,EAAAA,UA9CxD,SAA6BkwE,EAAmCG,GAE5D,OAAOT,EAA0BS,EAAcxtE,KAAIwV,IACxC,CACHy3D,YAAaz3D,EACb03D,gBAAiBG,EAAgBI,iBAAiBj4D,OAG9D,CAsCsEk4D,CAAoBL,EAAiBF,IAE7FQ,EAtCd,SAA+BC,GAC3B,MAAMzoB,EAA6B,GAYnC,OAVAj5C,OAAOspC,KAAKo4B,GAAavyB,SAAQ7lC,IAC7B,MAAMq4D,EAAWD,EAAYp4D,GAC1Bq4D,aAAoBpjD,SACnB06B,EAAO/6C,KAAK,CACR6iE,YAAaz3D,EACb03D,gBAAiBW,GAEzB,IAGG1oB,CACX,CAwBmC2oB,CAAsBR,GAajD,OAXAlwE,EAAAA,EAAAA,YAAU,KACHuwE,EAAmBh+E,OAAS,GAzB3Cwf,eAAuCm+D,GACnC,aAAa7iD,QAAQid,IAAI4lC,EAAiBttE,KAAImP,UACzC,MAAM4+D,QAAiCC,EAAId,gBAC3C,MAAO,CACHD,YAAae,EAAIf,YACjBC,gBAAiBa,EACpB,IAEV,CAkBgBE,CAAwBN,GAAoB38D,MAAKk9D,IAC7CX,GAAmB54E,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACd24E,GACAP,EAA0BmB,IAC/B,GAEV,GACD,CAACb,EAAiBC,EAAkBK,IAEnCA,EAAmBh+E,OAAS,EAClB,OAAPmG,QAAO,IAAPA,GAAAA,EAASumB,eACM,OAAPvmB,QAAO,IAAPA,OAAO,EAAPA,EAASumB,eAAe+wD,GAExB,MAKXj+E,EAAAA,EAAAA,KAACgJ,GAASxD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKy4E,GAAoBE,GAAmB,CAKlE,C,8DCpGO,MAAMa,EACT3rE,WAAAA,CAAoB4rE,GAA2C,KAA3CA,gBAAAA,EAAwC,KAOpDC,WAAkC,EAN1C,CAEA,YAAcpzE,GACV,OAAOxL,KAAK2+E,eAChB,CAKAlvE,QAAAA,CAAqDovE,EAAuCC,EAAsGC,GAC9L/+E,KAAK4+E,WAAWjkE,MAAKqkE,EAAAA,EAAAA,IAAaH,EAAYC,EAAQC,GAC1D,CAGA1gE,OAAAA,GACIre,KAAK4+E,WAAWhzB,SAAQ/U,GAAYA,KACxC,E,+BCfG,IAAKooC,E,iBAIX,SAJWA,GAAAA,EAAAA,EAAuB,uBAAvBA,EAAAA,EAAuB,qBAAvBA,EAAAA,EAAuB,6BAIlC,CAJWA,IAAAA,EAAuB,I,+BCJ5B,IAAKj5C,EAMA+C,EAcAm2C,EAKAhL,EAcAiL,E,sDAnCX,SAJWn5C,GAAAA,EAA8B,wBAA9BA,EAA8B,UAA9BA,EAA8B,gBAIzC,CAJWA,IAAAA,EAA8B,KAazC,SAPW+C,GAAAA,EAA2B,sBAA3BA,EAA2B,4CAA3BA,EAA2B,yBAA3BA,EAA2B,oBAA3BA,EAA2B,mCAA3BA,EAA2B,qBAOtC,CAPWA,IAAAA,EAA2B,KAiBtC,SAHWm2C,GAAAA,EAAoC,wBAApCA,EAAoC,gCAG/C,CAHWA,IAAAA,EAAoC,KAW/C,SANWhL,GAAAA,EAAiC,4BAAjCA,EAAiC,4BAAjCA,EAAiC,+BAAjCA,EAAiC,cAAjCA,EAAiC,cAM5C,CANWA,IAAAA,EAAiC,KAiB5C,SAHWiL,GAAAA,EAA+B,+CAA/BA,EAA+B,0CAG1C,CAHWA,IAAAA,EAA+B,I,yMC1CpC,MAAMC,EAA6B,gBAC7BC,EAAgC,kBAChCC,EAA2B,cAC3BC,EAAmB,QACnBC,EAA0B,cAC1BC,EAAsB,WACtBC,EAAuB,oBACvBC,EAA2B,eAC3BC,EAAyB,aACzBC,EAA+B,kBAC/BC,EAAuB,YACvBC,EAA2B,eAC3BC,EAAsB,WACtBC,EAA+B,mBAC/BC,EAAuB,WACvBC,EAAkB,WAClBC,EAAqB,mBAErBC,EAAajwE,MAAMkwE,GAC5BlB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,E,sGC7BG,SAASI,EAAwB/0E,GACpC,MAAMg1E,EAAmCh1E,EAASuhB,OAAO0zD,uBACzD,MAAO,CACHC,WAAYC,EAAwBn1E,GACpC+qB,SAAUmxB,EAAAA,EAAO36B,OAAO6zD,SACxBC,GAAIr1E,EAASqI,OAAOmI,GAAG+J,KACvB+6D,UAAU,EACVC,YAAav1E,EAASqI,OAAOmI,GAAG+J,KAChCi7D,YAAaR,EAAeS,YAC5BC,SAAUV,EAAeW,SACzBC,MAAOZ,EAAea,MACtBC,UAAW91E,EAASuhB,OAAOw0D,eAC3BC,cAAehB,EAAeiB,cAC9BC,sBAAuBlB,EAAemB,sBAE9C,CAEO,SAASC,EAA4Bp2E,GAAyD,IAADq2E,EAAAC,EAAAC,EAAAC,EAChG,MAAMC,EAAgC,CAClCC,SAAU,YACVC,iBAAkB32E,EAASoL,WAAWwrE,oBACtCC,OAA6B,QAAtBR,EAAAr2E,EAASkE,KAAK4yE,gBAAQ,IAAAT,OAAA,EAAtBA,EAAwBQ,SAAS,EACxCE,MAAO/2E,EAASkE,KAAK8yE,MACrBC,sBAA4C,QAAtBX,EAAAt2E,EAASkE,KAAK4yE,gBAAQ,IAAAR,OAAA,EAAtBA,EAAwBY,wBAAwB,EACtEC,IAAKn3E,EAASkE,KAAKsnB,gBACnB4rD,cAAqC,QAAxBb,EAAEv2E,EAASkE,KAAK4yE,gBAAQ,IAAAP,OAAA,EAAtBA,EAAwBc,UACvCC,aAAoC,QAAxBd,EAAEx2E,EAASkE,KAAK4yE,gBAAQ,IAAAN,OAAA,EAAtBA,EAAwBe,UAO1C,OAJIv3E,EAASkE,KAAKC,eACdsyE,EAASe,IAAMx3E,EAASkE,KAAKszE,KAG1Bf,CACX,CAEOviE,eAAeujE,EAA2Bz3E,GAAiE,IAAD03E,EAAAC,EAC7G,MAAMC,QAAwB53E,EAAS63E,IAAIC,qBAE3C,MAAO,CACHC,QAAsC,QAA/BL,EAAE13E,EAAS63E,IAAIG,wBAAgB,IAAAN,OAAA,EAA7BA,EAA+Bp/B,cACxC2/B,kBAAmBj4E,EAAS8e,KAAKo5D,oBAAoBvkF,WACrDwkF,QAASn4E,EAASkE,KAAKk0E,QACvBC,IAAoB,OAAfT,QAAe,IAAfA,OAAe,EAAfA,EAAiBU,IACtBC,UAA0B,OAAfX,QAAe,IAAfA,OAAe,EAAfA,EAAiBW,UAC5BC,QAAwB,OAAfZ,QAAe,IAAfA,OAAe,EAAfA,EAAiBa,QAC1BC,UAAiC,QAAxBf,EAAiB,OAAfC,QAAe,IAAfA,OAAe,EAAfA,EAAiB18D,aAAK,IAAAy8D,EAAAA,EAAI,GAE7C,CAEO,SAASgB,EAAoC34E,GAChD,MAAO,CACH44E,qBAAsB54E,EAAS63E,IAAIgB,sBACnCC,QAAS94E,EAAS63E,IAAIkB,aACtBC,WAAYh5E,EAAS63E,IAAIoB,gBACzBC,aAAcl5E,EAASyiB,SAAS02D,gBAChCC,OAAQp5E,EAAS63E,IAAIwB,UAAUC,aAC/BC,aAAcv5E,EAASwJ,SAASgwE,aAChCC,WAAYz5E,EAASqd,UAAUq8D,oBAC/BC,gBAAiB35E,EAAStN,MAAMknF,UAAUC,WAElD,CAEA,SAAS1E,EAAwBn1E,GAC7B,OAAIA,EAASqI,OAAOE,SACTuxE,EAAAA,GAAWC,OAGlB/5E,EAASqI,OAAOmI,GAAGmgB,WACZmpD,EAAAA,GAAWE,WAGfF,EAAAA,GAAWG,EACtB,C,gDC5EO,MAAMC,EAAuC,CAChDC,U,SAAWC,GAAeC,a,mFCCvB,MAAMl5D,EAEXltB,MAAAA,CAAO3B,GACL,OAAQ4B,EAAAA,EAAAA,KAACmtB,EAAAA,EAAoB,CAACrS,gBAAiB1c,EAAM0c,gBAAiByH,UAAWnkB,EAAMmkB,WACzF,E,+DCLK,MAAMoK,EACXtZ,WAAAA,CAAoB+yE,EAA8BC,EAA6BC,GAA4C,KAAvGF,aAAAA,EAAoB,KAAUC,YAAAA,EAAmB,KAAUC,iBAAAA,CAC/E,CAEAC,OAAAA,CAAQC,EAAqBC,GAC3B,OAAOnmF,KAAKomF,UAAUF,EAAalmF,KAAKsa,cACjCta,KAAKomF,UAAUD,EAAYnmF,KAAKqa,WACzC,CAEQ+rE,SAAAA,CAAUC,EAAWC,GAI3B,OAHAD,EAAOthF,EAAAA,MAAMkP,kBAAkBoyE,GAAQ,GAAKA,EAAKlnF,eACjDmnF,EAAOvhF,EAAAA,MAAMkP,kBAAkBqyE,GAAQ,GAAKA,EAAKnnF,WAGnD,CAEA,OAAI2b,GAAe,IAADyrE,EAChB,MAAM,GAAN3mF,OAAUI,KAAKsa,YAAW,KAAA1a,OAAII,KAAKqa,WAAU,KAAAza,OAAyB,QAAzB2mF,EAAIvmF,KAAKgmF,wBAAgB,IAAAO,EAAAA,EAAI,OAC5E,CAEA,eAAIjsE,GACF,OAAOta,KAAK8lF,YACd,CAEA,cAAIzrE,GACF,OAAOra,KAAK+lF,WACd,CAEA,oBAAIS,GACF,OAAOxmF,KAAKgmF,gBACd,CAEAS,YAAAA,GACE,QAAS1hF,EAAAA,MAAMiP,QAAQhU,KAAK8lF,eAAiB/gF,EAAAA,MAAMiP,QAAQhU,KAAK+lF,aAClE,CAEA5mF,QAAAA,GACE,MAAM,eAANS,OAAsBI,KAAKqa,WAAU,mBAAAza,OAAkBI,KAAKsa,YAC9D,E,+BCrCK,IAAKosE,E,yBAGX,SAHWA,GAAAA,EAA4B,yDAA5BA,EAA4B,yDAGvC,CAHWA,IAAAA,EAA4B,KAKjC,MAAMC,EAA2B,CACtCC,UAAW,eACXC,WAAY,gBACZC,oBAAqB,yBACrBC,oBAAqB,yBACrBC,UAAW,eACXC,WAAY,gBACZC,oBAAqB,yBACrBC,cAAe,OACfC,cAAe,O,+BC6BV,IAAKvrD,E,iBAGX,SAHWA,GAAAA,EAAAA,EAAiC,mDAAjCA,EAAAA,EAAiC,mCAG5C,CAHWA,IAAAA,EAAiC,I,+BC/CtC,IAAKwrD,E,iBAYX,SAZWA,GAAAA,EAAAA,EAAqB,0CAArBA,EAAAA,EAAqB,4BAArBA,EAAAA,EAAqB,4BAArBA,EAAAA,EAAqB,0DAArBA,EAAAA,EAAqB,gBAArBA,EAAAA,EAAqB,wBAArBA,EAAAA,EAAqB,kDAArBA,EAAAA,EAAqB,8BAArBA,EAAAA,EAAqB,oCAArBA,EAAAA,EAAqB,wBAArBA,EAAAA,EAAqB,0CAYhC,CAZWA,IAAAA,EAAqB,I,+BCS1B,IAAKC,EAKAC,EAgCAC,EAqBAC,E,2BAvDX,SAHWH,GAAAA,EAAAA,EAAuB,6CAAvBA,EAAAA,EAAuB,uCAGlC,CAHWA,IAAAA,EAAuB,KAmClC,SA9BWC,GAAAA,EAAAA,EAAqB,0CAArBA,EAAAA,EAAqB,sDA8BhC,CA9BWA,IAAAA,EAAqB,KAmDhC,SAnBWC,GAAAA,EAAAA,EAAuB,wDAmBlC,CAnBWA,IAAAA,EAAuB,KAuBlC,SAFWC,GAAAA,EAAAA,EAAmB,8CAE9B,CAFWA,IAAAA,EAAmB,I,gDChExB,MAAMC,EAAwB,uB,+BCA9B,IAAK/5B,E,iBAGX,SAHWA,GAAAA,EAAAA,EAAkB,6BAAlBA,EAAAA,EAAkB,iBAG7B,CAHWA,IAAAA,EAAkB,I,+BCUvB,IAAKg6B,E,iBAIX,SAJWA,GAAAA,EAAAA,EAAY,eAAZA,EAAAA,EAAY,eAAZA,EAAAA,EAAY,qBAIvB,CAJWA,IAAAA,EAAY,I,+BCXjB,IAAKC,E,iBAGX,SAHWA,GAAAA,EAAAA,EAA4B,uBAA5BA,EAAAA,EAA4B,mBAGvC,CAHWA,IAAAA,EAA4B,I,+BCFjC,IAAKC,E,iBA2IT,SA3ISA,GAAAA,EAAAA,EAAY,iBAAZA,EAAAA,EAAY,mBAAZA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,iCAAZA,EAAAA,EAAY,iBAAZA,EAAAA,EAAY,qBAAZA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,6BAAZA,EAAAA,EAAY,uBAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,4BAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,gCAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,kBAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,wCAAZA,EAAAA,EAAY,sBAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,oBAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,4BAAZA,EAAAA,EAAY,4CAAZA,EAAAA,EAAY,kBAAZA,EAAAA,EAAY,kBAAZA,EAAAA,EAAY,kCAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,wCAAZA,EAAAA,EAAY,sBAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,kCAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,gCAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,oCAAZA,EAAAA,EAAY,4BAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,sCAAZA,EAAAA,EAAY,gBAAZA,EAAAA,EAAY,4BAAZA,EAAAA,EAAY,4DAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,kBAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,4BAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,4BAAZA,EAAAA,EAAY,4BAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,4BAAZA,EAAAA,EAAY,kBAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,gCAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,oBAAZA,EAAAA,EAAY,4BAAZA,EAAAA,EAAY,oCAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,gCAAZA,EAAAA,EAAY,kBAAZA,EAAAA,EAAY,kBAAZA,EAAAA,EAAY,gCAAZA,EAAAA,EAAY,oBAAZA,EAAAA,EAAY,oBAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,kBAAZA,EAAAA,EAAY,gCAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,4BAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,wCAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,4BAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,0BAAZA,EAAAA,EAAY,wBAAZA,EAAAA,EAAY,gCAAZA,EAAAA,EAAY,oBAAZA,EAAAA,EAAY,kCAAZA,EAAAA,EAAY,4CAAZA,EAAAA,EAAY,8BAAZA,EAAAA,EAAY,sBAAZA,EAAAA,EAAY,yBAAZA,EAAAA,EAAY,6CAAZA,EAAAA,EAAY,qBAAZA,EAAAA,EAAY,mCAAZA,EAAAA,EAAY,mBAAZA,EAAAA,EAAY,qCAAZA,EAAAA,EAAY,+BAAZA,EAAAA,EAAY,iCAAZA,EAAAA,EAAY,yBAAZA,EAAAA,EAAY,uBAAZA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,+BAAZA,EAAAA,EAAY,qDAAZA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,yBAAZA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,+BAAZA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,6BAAZA,EAAAA,EAAY,6BAAZA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,iCAAZA,EAAAA,EAAY,uBAAZA,EAAAA,EAAY,yBAAZA,EAAAA,EAAY,uBAAZA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,6BAAZA,EAAAA,EAAY,+BAAZA,EAAAA,EAAY,+BAAZA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,uBAAZA,EAAAA,EAAY,mCAAZA,EAAAA,EAAY,iCAAZA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,mBAAZA,EAAAA,EAAY,uBAAZA,EAAAA,EAAY,6BAAZA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,uBAAZA,EAAAA,EAAY,iCA2IrB,CA3ISA,IAAAA,EAAY,I,+BCoBjB,IAAKh2B,E,iBAGX,SAHWA,GAAAA,EAAAA,EAAgC,qCAAhCA,EAAAA,EAAgC,uCAG3C,CAHWA,IAAAA,EAAgC,I,+BCpBrC,IAAKi2B,E,iBAKX,SALWA,GAAAA,EAAAA,EAAqB,eAArBA,EAAAA,EAAqB,uBAArBA,EAAAA,EAAqB,aAKhC,CALWA,IAAAA,EAAqB,I,oJCE1B,MAAMC,GAAoBvpF,EAAAA,EAAAA,GAAU,qB,qECiBpC,MAAMwpF,GAAiEzoF,EAAAA,EAAAA,KAAUzB,IACpF,MAAM0N,GAAWqD,EAAAA,EAAAA,MACVkpE,EAAakQ,IAAkBv6E,EAAAA,EAAAA,UAAyB,OAE/DC,EAAAA,EAAAA,YAAU,KACN7P,EAAMmV,SAAS+kE,iBAAiBz2D,MAAKw2D,IACjCkQ,EAAelQ,EAAY,GAC7B,GACH,CAACj6E,EAAMmV,WAEV,MAAMi1E,EAAgBxoE,UACdq4D,IAIJoQ,IAEIrqF,EAAMyR,WAEN/D,EAASqd,UAAUC,qBAAqB,CAACC,UAAU,iBAAiBC,SAAUlrB,EAAMyR,UAAW0I,OAAQ,iBAAkBqiB,MAAM,OAAD16B,OAASqT,EAAS8B,YAAa,GAGjKvJ,EAASorB,SAASjc,KAAKo9D,GAAY,EAGjCoQ,EAAmBA,KAAO,IAADC,EACR,QAAnBA,EAAAtqF,EAAMk6B,qBAAa,IAAAowD,GAAnBA,EAAqBnwD,OAAO,EAgBhC,IAAIhlB,EAAWnV,EAAMmV,SACrB,OACIzK,EAAAA,EAAAA,MAACgsD,EAAAA,EAAqB,CAAAz0D,SAAA,EAClBL,EAAAA,EAAAA,KAACyzD,EAAAA,EAAc,CAACxzD,UAAU,6BAA4BI,SAAEkT,EAASxK,QAdjE1D,EAAAA,MAAMiP,QAAQ+jE,IAAgBvsE,EAAS+9B,UAAUtuB,UAC1C,MAIPvb,EAAAA,EAAAA,KAACqoF,EAAiB,CAACpoF,UAAU,sBAAsB0H,QAAS6gF,EAAcnoF,UACtEL,EAAAA,EAAAA,KAACZ,EAAAA,EAAK,CAACsV,IAAK5I,EAAStN,MAAMuN,aAAa1M,OAAOC,OAAOqpF,YAAYlpF,gBAUtEO,EAAAA,EAAAA,KAACizD,EAAAA,EAAoB,CAAChzD,UAAU,kBAAkB0H,QAAS8gF,MACvC,I,kDCzDzB,MCRMG,EDQsB7qF,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,yM,iBEPtC,MCDM2qF,EDCwB9qF,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2M,oCEexC,MAAM4qF,GAAkCjpF,EAAAA,EAAAA,IAC3C,cAA8CC,EAAAA,EAAgDuT,WAAAA,GAAA,SAAA9S,WAAA,KAElFwoF,cAAgB,KACpBzoF,KAAKlC,MAAMk6B,cAAcC,QACzBj4B,KAAKlC,MAAMmV,SAASO,MAAItO,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAGlF,KAAKlC,MAAMoV,gBAAc,IAAEC,YAAY,IAAM,EAC5E,KAEMu1E,cAAgB,KACpB1oF,KAAKlC,MAAMk6B,cAAcC,QACzBj4B,KAAKlC,MAAMmV,SAASO,MAAItO,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAGlF,KAAKlC,MAAMoV,gBAAc,IAAEC,YAAY,IAAO,CAC7E,CAEMw1E,iBAAAA,CAAkB11E,GACtB,OAAKA,EAAS21E,mCAKVlpF,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CACH/G,WAAWG,EAAAA,EAAAA,IAAQ,4BACnBuH,QAASrH,KAAK0oF,cACd1hF,OAAO,YACPvF,WAAS,EAAA1B,SAEPC,KAAKwL,SAASoK,YAAYC,UAAU,UAVnC,IAaf,CAEApW,MAAAA,GACI,IAAKO,KAAKwL,SAASqI,OAAOC,SACtB,OAAO,KAGX,MAAMb,EAAWjT,KAAKlC,MAAMmV,SAE5B,OACIzK,EAAAA,EAAAA,MAAC8/E,EAAY,CAAC3oF,UAAU,gCAA+BI,SAAA,EACnDL,EAAAA,EAAAA,KAACjB,EAAAA,EAAkB,CAACkB,UAAU,uBAAsBI,UAChDL,EAAAA,EAAAA,KAACb,EAAAA,EAAW,CAACc,UAAU,eACVyU,IAAKnB,EAAS41E,gCACd/4B,YAAa78C,EAAS2zD,kCAEvCp+D,EAAAA,EAAAA,MAAC+/E,EAAc,CAAC5oF,UAAU,0BAAyBI,SAAA,EAC/CL,EAAAA,EAAAA,KAACgH,EAAAA,EAAM,CACH/G,WAAWG,EAAAA,EAAAA,IAAQ,4BACnBkH,OAAO,UACPvF,WAAS,EACT4F,QAASrH,KAAKyoF,cAAc1oF,SAE3BC,KAAKwL,SAASoK,YAAYC,UAAU,WAEzCnW,EAAAA,EAAAA,KAAA,OAAKoJ,MAAO,CAACzH,OAAQ,UACpBrB,KAAK2oF,kBAAkB11E,QAIxC,IC1EK61E,GAAsBtqF,EAAAA,EAAAA,GAAU,uB,MCAtC,MCAMuqF,EDAkCtrF,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,qGEA5CorF,GAAcxqF,EAAAA,EAAAA,GAAU,e,MCC9B,MCDMyqF,GDCyBxrF,EAAAA,EAAAA,IAAOqB,EAAAA,EAAPrB,CAAaE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,0C,MED5C,MCAMsrF,EDAwBzrF,EAAAA,GAAOC,KAAIC,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,uK,MEAzC,MCAMurF,EDA2B1rF,EAAAA,GAAOiB,IAAGf,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oFEI3C,MAAMwrF,UAAsC5pF,EAAAA,EAC/CC,MAAAA,GACI,OACE+I,EAAAA,EAAAA,MAAC2gF,EAAiB,CAAAppF,SAAA,EACdL,EAAAA,EAAAA,KAACupF,EAAe,CAAC70E,IAAKpU,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOqqF,iCAAiClqF,cACtGO,EAAAA,EAAAA,KAACwpF,EAAc,CAAAnpF,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,uBAG/D,ECOG,MAAMyzE,GAAoC/pF,EAAAA,EAAAA,IAC7C,cAAgDC,EAAAA,EAE5Cuc,iBAAAA,GACI3D,MAAM2D,oBACN/b,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASqI,OAAOC,WACpCA,IACOA,GACA9T,KAAKlC,MAAMk6B,cAAcC,OAC7B,GAEZ,CAEAsxD,2BAAAA,GACI,OAAOvpF,KAAKlC,MAAMmV,SAASu2E,2BAA6B9pF,EAAAA,EAAAA,KAAC0pF,EAA6B,IAAO,IACjG,CAEA3pF,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACsgF,EAAmB,CAACnpF,UAAU,iCAAgCI,SAAA,EAC3DL,EAAAA,EAAAA,KAACsoF,EAAc,CAAC/0E,SAAUjT,KAAKlC,MAAMmV,SAAU1D,UAAWvP,KAAKlC,MAAMoV,eAAeE,SAAU4kB,cAAeh4B,KAAKlC,MAAMk6B,gBACvHh4B,KAAKupF,+BACN/gF,EAAAA,EAAAA,MAACugF,EAAwB,CAACppF,UAAU,wCAAuCI,SAAA,EACvEL,EAAAA,EAAAA,KAACwwD,EAAAA,EAA6B,CAACj9C,SAAUjT,KAAKlC,MAAMmV,YAEpDvT,EAAAA,EAAAA,KAACspF,EAAW,CAACrpF,UAAU,iBACvBD,EAAAA,EAAAA,KAAC8oF,EAA+B,CAACv1E,SAAUjT,KAAKlC,MAAMmV,SAAUC,gBAAchO,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACvElF,KAAKlC,MAAMoV,gBAAc,IAC5BwkE,sBAAsB,EACtB+R,8BAA8B,IAC/BzxD,cAAeh4B,KAAKlC,MAAMk6B,oBAEjCt4B,EAAAA,EAAAA,KAAC8vD,EAAAA,EAAiC,CAACv8C,SAAUjT,KAAKlC,MAAMmV,SAAUo8C,mBAAoB,SAIlG,I,yGCJD,SAASq6B,GAAwBC,EAAiBC,GACvD,OAAGD,EAAMlhF,MAAQmhF,EAAMnhF,OACb,EACAkhF,EAAMlhF,MAAQmhF,EAAMnhF,MACrB,EAGF,CACT,CAGO,IAAMohF,IAAQ/2E,EAAd,MACLC,WAAAA,CAAoB+2E,EACAt+E,GAAoC,KADpCs+E,aAAAA,EAAuB,KACvBt+E,SAAAA,GAClBwN,EAAAA,EAAAA,IAAehZ,MAEfyc,OAAOstE,eAAe/pF,KAAK8pF,aAAc,sBAAuB,CAC9DE,IAAKA,IAAMhqF,KAAKiqF,oBAChB5tE,cAAc,GAElB,CAEA,aAAY6tE,GACV,OAAOlqF,KAAKwL,SAASqI,OAAOC,QAC9B,CAEA,iBAAYq2E,GACV,OAAOnqF,KAAKwL,SAASkE,KAAKC,YAC5B,CAEA,YAAIoF,GACF,OAAO/U,KAAK8pF,aAAa/0E,QAC3B,CAEA,SAAItM,GACF,OAAOzI,KAAK8pF,aAAarhF,KAC3B,CAEA,iBAAI2hF,GACF,OAAOpqF,KAAK8pF,aAAaM,aAC3B,CAGA,cAAIp7B,GACF,OAAOhvD,KAAK8pF,aAAa96B,aAAc,CACzC,CAEA,aAAIq7B,GACF,OAAOrqF,KAAKsqF,iBAAiB,MAC/B,CAEA,mBAAIC,GACF,OAAOvqF,KAAKsqF,iBAAiB,YAC/B,CAEA,kBAAIE,GACF,OAAOxqF,KAAKsqF,iBAAiB,iBAC/B,CAEQA,gBAAAA,CAAiBG,GACvB,QAAKA,MAIA1lF,EAAAA,MAAMgrE,QAAQ/vE,KAAK8pF,aAAaY,eAIrCD,EAAaA,EAAWzqE,cAEjB,GAAKhgB,KAAK8pF,aAAaY,YAAYC,WAAUlrE,GAAUA,EAAOO,gBAAkByqE,KAEzF,CAEA,iBAAIG,GACF,OAAO5qF,KAAK8pF,aAAac,gBAAiB,CAC5C,CAEA,iBAAIC,GACF,OAAO7qF,KAAK8pF,aAAae,aAC3B,CAEA,eAAIC,GACF,OAAO9qF,KAAK8pF,aAAagB,cAAe,CAC1C,CAEA,gBAAIC,GACF,OAAO/qF,KAAK8pF,aAAaiB,eAAgB,CAC3C,CAEA,gBAAIC,GACF,OAAOhrF,KAAK8pF,aAAakB,YAC3B,CAEA,iBAAIC,GACF,OAAOjrF,KAAK8pF,aAAamB,gBAAiB,CAC5C,CAEA,cAAIC,GACF,OAAOlrF,KAAK8pF,aAAaoB,aAAc,CACzC,CAEA,eAAIC,GACF,OAAOnrF,KAAK8pF,aAAaqB,cAAe,CAC1C,CAEA,iBAAIC,GACF,OAAOprF,KAAK8pF,aAAasB,aAC3B,CAEA,6BAAI5B,GACF,OAAOxpF,KAAK8pF,aAAaN,yBAC3B,CAEA,gBAAI6B,GACF,OAAOrrF,KAAKsqF,iBAAiB,YAC/B,CAEA,iBAAIgB,GACF,OAAOtrF,KAAKsqF,iBAAiB,aAC/B,CAEA,gBAAIiB,GACF,OAAOvrF,KAAK8pF,aAAayB,YAC3B,CAEA,kBAAIld,GACF,IAAImd,EAAoBxrF,KAAK2rE,mBAAqB3rE,KAAKyrF,aAEvD,OAAQzrF,KAAKgvD,YAAcw8B,CAC7B,CAGA,qBACIne,GAEF,MAAuB,gBAAnBrtE,KAAK04E,YAID14E,KAAKmqF,aACf,CAEA,YAAI1e,GACF,OAAOzrE,KAAKkqF,SACd,CAGA,iBAAMjd,GACJ,OAAO9iE,cAAcnK,KAAKg4E,iBAC5B,CAEA,+BACI1K,GACF,QAAKttE,KAAK8pF,aAAa4B,wBAInB1rF,KAAKkqF,YAIDlqF,KAAK8pF,aAAa6B,cACnB3rF,KAAK8pF,aAAa6B,aAAaC,kBAC/B5rF,KAAK8pF,aAAa6B,aAAaC,iBAAiBC,IACzD,CAGA,qCACIjD,GACF,QAAK5oF,KAAK8pF,aAAa4B,uBAInB1rF,KAAKwL,SAASkE,KAAKC,aACd3P,KAAK8pF,aAAa6B,cAAgB3rF,KAAK8pF,aAAa6B,aAAaG,mBAAqB9rF,KAAK8pF,aAAa6B,aAAaG,kBAAkBzkC,OAGzIrnD,KAAK8pF,aAAa6B,cAAgB3rF,KAAK8pF,aAAa6B,aAAaC,kBAAoB5rF,KAAK8pF,aAAa6B,aAAaC,iBAAiBvkC,OAC9I,CAEC,oBAAM2wB,GAEL,IAAKh4E,KAAK8pF,aAAaiC,YACrB,MAAO,GAIT,aAFsB/rF,KAAKwL,SAASwgF,SAEvBC,eAAejsF,KAAK8pF,aAAaiC,aAKvC/rF,KAAK8pF,aAAaiC,aAJvB/rF,KAAKwL,SAAS2L,OAAO+0E,MAAM,cAADtsF,OAAeI,KAAK8pF,aAAaiC,YAAW,eAAAnsF,OAAcI,KAAK+U,SAAQ,OAAAnV,OAAMI,KAAKyI,MAAK,4BAC1G,GAIX,CAGA,YAAI0jF,GACF,OAAKnsF,KAAK8pF,aAAaqC,SAIhBnsF,KAAK8pF,aAAaqC,SAHhB,EAIX,CAEA,eAAIC,GACF,OAAOjiF,QAAQnK,KAAKmsF,SACtB,CAEA,aAAIzT,GACF,OAAO14E,KAAK8pF,aAAapR,SAC3B,CAEA,eAAI2T,GACF,OAAOrsF,KAAK8pF,aAAauC,WAC3B,CAEA,gBAAIC,GACF,OAAGtsF,KAAKusF,aAAevsF,KAAKwsF,eACnBrmD,EAAAA,EAAiBC,MAGvBpmC,KAAKyrF,aACCtlD,EAAAA,EAAiBE,KAGvBrmC,KAAK2rE,kBACCxlC,EAAAA,EAAiBG,eAGnB,EAET,CAEA,yBAAIqyC,GACF,MAAO,iBAAmB34E,KAAKssF,YACjC,CAEA,eAAI1T,GACF,OAAO54E,KAAK8pF,aAAalR,WAC3B,CAEA,YAAI6T,GACF,OAAOzsF,KAAK8pF,aAAa2C,QAC3B,CAEA,cAAIC,GACF,OAAO1sF,KAAK8pF,aAAa4C,UAC3B,CAEQC,oBAAAA,CAAqB5N,GAA8D,IAAD6N,EACtF,IAAI5tF,EAA0B,QAApB4tF,EAAG5sF,KAAK8pF,oBAAY,IAAA8C,OAAA,EAAjBA,EAAmB5tF,OAChC,OAAKA,EAID+/E,EAAKla,YAAc7lE,EAAO6tF,YACtB9N,EAAK7Y,aACGlnE,EAAO8tF,gBAAmB9sF,KAAK+sF,mBAAmB/sF,KAAKgtF,0BAA0BhuF,EAAO8tF,kBAAoB,GAEjH9sF,KAAKgtF,0BAA0BhuF,EAAO6tF,aAG7C9N,EAAK7Y,aACGlnE,EAAOiuF,eAAkBjtF,KAAK+sF,mBAAmB/sF,KAAKgtF,0BAA0BhuF,EAAOiuF,iBAAmB,GAG/GjtF,KAAKgtF,0BAA0BhuF,EAAOiI,MAdlC,EAef,CAEQimF,6BAAAA,CAA8BC,GAChC,OAAQA,IAAqBC,EAAAA,EAAqBC,wBAA0BF,IAAqBC,EAAAA,EAAqBE,yBAC5H,CAEQC,wBAAAA,CAAyBxO,GAA8D,IAADyO,EAC1F,IAAIxuF,EAA0B,QAApBwuF,EAAGxtF,KAAK8pF,oBAAY,IAAA0D,OAAA,EAAjBA,EAAmBxuF,OAChC,IAAKA,EACD,MAAO,GAGX,MAAMmuF,EAAmBntF,KAAKwL,SAASoL,WAAWrI,QAAQk/E,sBAC1D,OAAIN,IAAqBC,EAAAA,EAAqBM,eACnC1tF,KAAK2sF,qBAAqB5N,GAG7BA,EAAKla,YAAc7lE,EAAO6tF,YACtB7tF,EAAO2uF,+BAAiC3tF,KAAKktF,8BAA8BC,GACpEpO,EAAK7Y,aAAe,GAAKlmE,KAAKgtF,0BAA0BhuF,EAAO2uF,+BAEjE3uF,EAAO4uF,yBAEL7O,EAAK7Y,aAAe,GAAKlmE,KAAKgtF,0BAA0BhuF,EAAO4uF,0BAEjET,IAAqBC,EAAAA,EAAqBS,uBAAyBV,IAAqBC,EAAAA,EAAqBE,0BAC3GttF,KAAK2sF,qBAAqB5N,GAI1BA,EAAK7Y,aAAe,GAAKlmE,KAAK4mE,2BAA2BmY,EAAKla,YAIrE7lE,EAAO8uF,wBAA0B9tF,KAAKktF,8BAA8BC,GAC7DpO,EAAK7Y,aAAe,GAAKlmE,KAAKgtF,0BAA0BhuF,EAAO8uF,wBAEjE9uF,EAAO+uF,kBAELhP,EAAK7Y,aAAe,GAAKlmE,KAAKgtF,0BAA0BhuF,EAAO+uF,mBAI/D/tF,KAAK2sF,qBAAqB5N,EAIjD,CAEA/Y,YAAAA,CAAa3/D,GACT,IAAI04E,EAAO,CACPla,YAAmB,OAAPx+D,QAAO,IAAPA,OAAO,EAAPA,EAASw+D,cAAc,EACnCqB,cAAqB,OAAP7/D,QAAO,IAAPA,OAAO,EAAPA,EAAS6/D,gBAAgB,GAG3C,OADalmE,KAAK8pF,cAAgB9pF,KAAK8pF,aAAa9qF,OAKjDgB,KAAKkrF,WACClrF,KAAKutF,yBAAyBxO,GAG9B/+E,KAAK2sF,qBAAqB5N,GAPxB,EASf,CAEAiP,kBAAAA,GAA8B,IAADC,EAAAC,EAC3B,IAAIr8E,EAA8B,QAApBo8E,EAAGjuF,KAAK8pF,oBAAY,IAAAmE,GAAQ,QAARC,EAAjBD,EAAmBjvF,cAAM,IAAAkvF,OAAR,EAAjBA,EAA2Br8E,WAC5C,OAAKA,EAIE7R,KAAKgtF,0BAA0Bn7E,GAH7B,EAIX,CAEQk7E,kBAAAA,CAAmBoB,GACzB,OAAKA,EAAaC,SAAS,QAKpBD,EAAanV,QAAQ,OAAQ,UAJlCh5E,KAAKwL,SAAS2L,OAAOxI,MAAM,8CAAgDw/E,GACpE,GAIX,CAEAhoB,uBAAAA,GACE,MAAMkoB,EAAuBruF,KAAK8pF,cAAgB9pF,KAAK8pF,aAAauE,qBACpE,MAAO,CACLn6D,OAA2B,OAApBm6D,QAAoB,IAApBA,OAAoB,EAApBA,EAAsBn6D,QAAS,IACtCrI,UAA8B,OAApBwiE,QAAoB,IAApBA,OAAoB,EAApBA,EAAsBxiE,WAAY,IAEhD,CAEA,mCAAIg9D,GAA2C,IAADyF,EAAAC,EAC5C,MAAMtnF,EAAwB,QAApBqnF,EAAGtuF,KAAK8pF,oBAAY,IAAAwE,GAAQ,QAARC,EAAjBD,EAAmBtvF,cAAM,IAAAuvF,OAAR,EAAjBA,EAA2BtnF,KACxC,OAAKA,EAIEjH,KAAKgtF,0BAA0B/lF,GAH7B,EAIX,CAEA,0BAAIunF,GACF,IAAIxvF,EAASgB,KAAK8pF,cAAgB9pF,KAAK8pF,aAAa9qF,OACpD,IAAKA,EACH,MAAO,GAGT,IAAIm9C,EAAgBn9C,EAAOiI,KAK3B,OAJIjH,KAAKwL,SAAStN,MAAM6jC,sBAAwB/iC,EAAO6tF,cACrD1wC,EAAQn9C,EAAO6tF,aAGV7sF,KAAKgtF,0BAA0B7wC,EACxC,CAEA,SAAIsyC,GACF,OAAOzuF,KAAK8pF,aAAa2E,KAC3B,CAEA,aAAIC,GACF,OAAO1uF,KAAK8pF,aAAa4E,SAC3B,CAEA,qBAAI/b,GAA6B,IAADgc,EAAAC,EAC9B,MAAMC,EAAmC,QAApBF,EAAG3uF,KAAK8pF,oBAAY,IAAA6E,GAAQ,QAARC,EAAjBD,EAAmB3vF,cAAM,IAAA4vF,OAAR,EAAjBA,EAA2BC,gBACnD,OAAKA,EAIE7uF,KAAKgtF,0BAA0B6B,GAH7B,EAIX,CAEA,cAAIC,GAAuB,IAADC,EAAAC,EACxB,MAAMF,EAA8B,QAApBC,EAAG/uF,KAAK8pF,oBAAY,IAAAiF,GAAQ,QAARC,EAAjBD,EAAmB/vF,cAAM,IAAAgwF,OAAR,EAAjBA,EAA2BC,YAC9C,OAAKH,EAIE9uF,KAAKgtF,0BAA0B8B,GAH7B,EAIX,CAEA,iBAAII,GAA0B,IAADC,EAAAC,EAC3B,MAAMC,EAA8B,QAApBF,EAAGnvF,KAAK8pF,oBAAY,IAAAqF,GAAQ,QAARC,EAAjBD,EAAmBnwF,cAAM,IAAAowF,OAAR,EAAjBA,EAA2BE,aAC9C,OAAKD,EAIErvF,KAAKgtF,0BAA0BqC,GAH7B,EAIX,CAEQE,YAAAA,CAAaC,GAAoC,IAADC,EACtD,OAAID,EAKoG,QAAxGC,EAAOC,EAAAA,EAAWC,YAAYH,EAAY,OAAQxvF,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAO4wF,eAAO,IAAAH,OAAA,EAAjGA,EAAmGtwF,WAJjG,IAKX,CAEA,YACIisE,GACF,OAAOprE,KAAKuvF,aAAavvF,KAAKyuF,MAChC,CAEA,gBACIpjB,GACF,OAAOrrE,KAAKuvF,aAAavvF,KAAK0uF,UAChC,CAEA,UAAIvgB,GACF,OAAOnuE,KAAK8pF,aAAa3b,MAC3B,CAEA,UAAIC,GACF,OAAOpuE,KAAK8pF,aAAa1b,MAC3B,CAEA,kBAAIyhB,GACF,OAAO7vF,KAAK8pF,aAAa+F,cAC3B,CAEAjpB,0BAAAA,CAA2BkpB,GACzB,OAAIA,EACK9vF,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOkrE,6BAA6B/qE,WAE9Ea,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOmrE,0BAA0BhrE,UAClF,CAEAonE,cAAAA,GAAkB,IAAD1N,EAAAC,EAAAE,EAAAC,EAEf,IAAI82B,EAA2C,QAAnCl3B,EAAG74D,KAAKwL,SAASye,cAAcC,YAAI,IAAA2uC,GAAK,QAALC,EAAhCD,EAAkCm3B,WAAG,IAAAl3B,GAAO,QAAPE,EAArCF,EAAuC39C,aAAK,IAAA69C,GAAQ,QAARC,EAA5CD,EAA8Ch6D,cAAM,IAAAi6D,OAApB,EAAhCA,EAAsD9kD,IAErE,OAAOnU,KAAKwL,SAASoK,YAAYC,UAAUk6E,EAAU,CACnD5sD,SAAUnjC,KAAKyI,MACfwnF,aAAcjwF,KAAKssF,cAEvB,CAEQU,yBAAAA,CAA0BkD,GAChC,OAAOlwF,KAAKwL,SAASye,cAAckmE,qBAAqBD,EAC1D,CAEA,cACItgC,GACF,IAAI5wD,EAASgB,KAAK8pF,aAAa9qF,OAC/B,OAAKA,EAIEgB,KAAKkqF,UAAYlqF,KAAKgtF,0BAA0BhuF,EAAOoxF,cAC1DpwF,KAAKgtF,0BAA0BhuF,EAAOqxF,UAJjC,EAKX,CAEA,uBACIxgC,GAEF,MAAM7wD,EAASgB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOoc,MAAMm1E,uBAE7D,GAAItwF,KAAKwL,SAASqI,OAAOC,SACvB,OAAQ9T,KAAKssF,cACX,KAAKnmD,EAAAA,EAAiBC,MACpB,OAAOpnC,EAAOuxF,oCAAoCpxF,WACpD,KAAKgnC,EAAAA,EAAiBG,eACpB,OAAOtnC,EAAOwxF,6CAA6CrxF,WAC7D,KAAKgnC,EAAAA,EAAiBE,KACpB,OAAOrnC,EAAOyxF,mCAAmCtxF,gBAGrD,OAAQa,KAAKssF,cACX,KAAKnmD,EAAAA,EAAiBC,MACpB,OAAOpnC,EAAO0xF,6BAA6BvxF,WAC7C,KAAKgnC,EAAAA,EAAiBG,eACpB,OAAOtnC,EAAO2xF,sCAAsCxxF,WACtD,KAAKgnC,EAAAA,EAAiBE,KACpB,OAAOrnC,EAAO4xF,4BAA4BzxF,WAIhD,MAAO,EACT,CAEA,mBAAIgxD,GACF,OAAyB,SAAlBnwD,KAAK+U,QACd,CAGA,eAAI87E,GACF,OAAO7wF,KAAK8pF,aAAa+G,WAC3B,CAEA,iBAAIC,GACF,OAAO9wF,KAAKsqF,iBAAiB,eAC/B,CAEA,qBAAIyG,GACF,OAAO/wF,KAAKgxF,aAAeC,EAAAA,GAAgBC,IAC7C,CAEA,oBAAIC,GACF,OAAOnxF,KAAKgxF,aAAeC,EAAAA,GAAgBG,GAC7C,CAEA,uBAAIC,GACF,OAAOrxF,KAAKgxF,aAAeC,EAAAA,GAAgBK,MAC7C,CAEA,mBAAIC,GACF,OAAOvxF,KAAKsqF,iBAAiB,eAC/B,CAEA,sBAAIkH,GACF,OAAOxxF,KAAKsqF,iBAAiB,kBAC/B,CAEA,uBAAImH,GACF,OAAOzxF,KAAKsqF,iBAAiB,kBAC/B,CAEA,sBAAIoH,GACF,OAAO1xF,KAAKsqF,iBAAiB,kBAC/B,CAEA,8BACIqH,GACF,IAAK3xF,KAAKkqF,UACR,OAAO,EAGT,IAAKlqF,KAAK8pF,aAAa4B,qBACrB,OAAO,EAGT,GAAI1rF,KAAKyrF,aACP,OAAO,EAGT,IAAIE,EAAe3rF,KAAK8pF,aAAa6B,aACZ,IAADiG,EAIjBC,EAJP,GAAI7xF,KAAKmqF,eACP,GAAgB,OAAZwB,QAAY,IAAZA,GAAwC,QAA5BiG,EAAZjG,EAAcmG,kCAA0B,IAAAF,GAAxCA,EAA0CvqC,OAC5C,OAAO,OAGT,GAAgB,OAAZskC,QAAY,IAAZA,GAAuC,QAA3BkG,EAAZlG,EAAcoG,iCAAyB,IAAAF,GAAvCA,EAAyCxqC,OAC3C,OAAO,EAIX,OAAO,CACT,CAEA,uBAAI2qC,GACF,OAAO7nF,QAAQnK,KAAK8pF,aAAa4B,qBACnC,CAEA,uBACIzB,GAEF,IAAIjqF,KAAKgyF,oBACP,OAAO,EAGT,IAAIrG,EAAe3rF,KAAK8pF,aAAa6B,aACrC,QAAKA,IAID3rF,KAAKmqF,cACAhgF,QAAoB,OAAZwhF,QAAY,IAAZA,GAA+B,QAAnBsG,EAAZtG,EAAcG,yBAAiB,IAAAmG,OAAnB,EAAZA,EAAiCpG,IAEzC1hF,QAAoB,OAAZwhF,QAAY,IAAZA,GAA8B,QAAlBuG,EAAZvG,EAAcC,wBAAgB,IAAAsG,OAAlB,EAAZA,EAAgCrG,KAHxB,IAADoG,EAEjBC,CAGT,CAEA,UAAM1+E,CAAKub,GAET,GAAG/uB,KAAKmyF,sBAAsBpjE,GAC5B,OAGF,SAAU/uB,KAAKoyF,4BAA4BrjE,GAEzC,OADA/uB,KAAKqyF,kBACE,CACLC,UAAWA,QAKftyF,KAAKuyF,uBAAuBxjE,GAE5B,IAAIyjE,EAAyD,KAmB7D,OAlBIzjE,EAAO5b,YACN4b,EAAO0jE,iBACRzyF,KAAKwL,SAAS63E,IAAIqP,cAAcC,sBAAsB5jE,EAAO0jE,iBAE/DD,cAA8BxyF,KAAKwL,SAAS2iC,YAAYykD,SAAS,CAC/DC,SAAUlL,EAAAA,EAAamL,KACvB7/E,SAAUjT,KACV+yF,eAAgBhkE,EAAOgkE,eACvBC,uBAAwBjkE,EAAOikE,uBAC/BC,WAAYlkE,EAAOkkE,cAGrBT,cAA8BxyF,KAAKwL,SAAS2iC,YAAYykD,SAAS,CAC/DC,SAAUlL,EAAAA,EAAauL,KACvBjgF,SAAUjT,OAIP,CACLsyF,UAAW5yE,UAAa,IAADyzE,QACD,QAApBA,EAAMX,SAAc,IAAAW,OAAA,EAAdA,EAAgBb,UAAU,CAC9Bc,uBAAuB,IACvB,EAIR,CAEA,iCAAchB,CAA4BrjE,GACxC,OAAOA,EAAO5b,YAAc4b,EAAO06D,+BAC3BzpF,KAAKwL,SAASkE,KAAKC,eACiC,WAA7C3P,KAAKwL,SAAS6nF,iBAAiBC,SAChD,CAIQnB,qBAAAA,CAAsBpjE,GAC5B,GAAI/uB,KAAK2xF,4BAA8B5iE,EAAO2oD,qBAAsB,CAClE,MAAM6b,EAA0Bv7D,IAAkBt4B,EAAAA,EAAAA,KAAC4pF,EAAiC,CAACr2E,SAAUjT,KACVkT,eAAgB6b,EAChBiJ,cAAeA,IAGpG,OAFAh4B,KAAKwL,SAAS4vB,OAAOgiB,UAAUm2C,EAAuB,CAACj4D,iBAAiB,KAEjE,CACT,CAEA,OAAO,CACT,CAGQ+2D,eAAAA,GACNryF,KAAKwL,SAASqd,UAAU4tB,wBAAwByoC,EAAAA,GAAqCsU,WAAY,OAAQtf,EAAAA,GAAkCuf,cAC3IzzF,KAAKwL,SAASi0D,cAAcl+C,MAAKk+C,GAAiBA,EAAci0B,eAAe,CAC7Ev+D,QAAS,CACPC,KAAMC,EAAAA,EAASs+D,OACfr+D,OAAQC,EAAAA,GAAeC,aACvBX,QAASC,EAAAA,GAAiB8+D,gBAE5BnB,gBAAiB,CACfoB,GAAI,YAGV,CAEQtB,sBAAAA,CAAuBxjE,GAC7B,IAAKA,EAAO3b,WAAa2b,EAAOxb,UAC9B,OAEF,MAAMA,EAAYvT,KAAK8zF,mBAAmB/kE,EAAOxb,WACjDvT,KAAKwL,SAASqd,UAAUC,qBAAqB,CAACC,UAAU,iBAAiBC,SAAU+F,EAAO3b,SAAU6E,OAAQ,aAAcqiB,MAAO/mB,EAAWzJ,MAAO9J,KAAK+U,SAAS5V,WAAYw3B,WAAY5H,IAAS,EACpM,CAGAglE,eAAAA,CAAgBC,GACd,IAAIlyF,EAAO9B,KAAKyI,MAAQ,IAAMzI,KAAK0sF,WACnC,IAAK,IAAIrpD,EAAQ,EAAGA,EAAQ2wD,EAAM9zF,OAAQmjC,IACxC,IAAKvhC,EAAKmyF,MAAMD,EAAM3wD,IACpB,OAAO,EAIX,OAAO,CACT,CAEA,iBAAIltB,GAAyB,IAAD+9E,EAAAC,EAC1B,MAAMC,EAA8B,QAApBF,EAAGl0F,KAAK8pF,oBAAY,IAAAoK,GAAQ,QAARC,EAAjBD,EAAmBl1F,cAAM,IAAAm1F,OAAR,EAAjBA,EAA2BC,WAC9C,OAAKA,EAIEp0F,KAAKgtF,0BAA0BoH,GAH7B,EAIX,CAOQN,kBAAAA,CAAmBvgF,GACzB,OAAOA,EAAUylE,QAAQ,KAAM,IACjC,CAEA,eAAIqb,GAEF,OAAGr0F,KAAK8pF,aAAauK,YACZr0F,KAAK8pF,aAAauK,YAGpBr0F,KAAKwL,SAAS8oF,aAAaC,mBAAmBv0F,KACvD,CAEA,eAAIusF,GACD,OAAOvsF,KAAKqsF,cAAgBmI,EAAAA,EAAWC,YAC7Bz0F,KAAKqsF,cAAgBmI,EAAAA,EAAWE,IAC7C,CAEA,eAAIC,GACF,OAAO30F,KAAKqsF,cAAgBmI,EAAAA,EAAWI,UACzC,CAGA,gBAAIC,GAcF,MAb0B,CACxBL,EAAAA,EAAWM,SACXN,EAAAA,EAAWO,UACXP,EAAAA,EAAWQ,gBACXR,EAAAA,EAAWS,MACXT,EAAAA,EAAWU,KACXV,EAAAA,EAAWW,MACXX,EAAAA,EAAWY,qBACXZ,EAAAA,EAAWa,SACXb,EAAAA,EAAWc,aACXd,EAAAA,EAAWe,aAGYr4E,SAASld,KAAKqsF,YACzC,CAEA,gBAAImJ,GACF,OAAOx1F,KAAKqsF,cAAgBmI,EAAAA,EAAWe,WACzC,CAEA,kBAAI/I,GACF,OAAOxsF,KAAKqsF,cAAgBmI,EAAAA,EAAWc,YACzC,CAEA,eAAIG,GACF,OAAOz1F,KAAKqsF,cAAgBmI,EAAAA,EAAWO,SACzC,CAEA,cAAIW,GACF,OAAO11F,KAAKqsF,cAAgBmI,EAAAA,EAAWa,QACzC,CAEA,gBAAI5J,GACF,OAAOzrF,KAAKqsF,cAAgBmI,EAAAA,EAAWmB,WACzC,CAEA,cAAIC,GACF,OAAO51F,KAAKqsF,cAAgBmI,EAAAA,EAAWM,QACzC,CAGA,qBAAInpB,GAEF,OAAO3rE,KAAKy1F,aACLz1F,KAAK01F,YACL11F,KAAK41F,YACL51F,KAAKw1F,cACLx1F,KAAKqsF,cAAgBmI,EAAAA,EAAWS,OAChCj1F,KAAKqsF,cAAgBmI,EAAAA,EAAWU,MAChCl1F,KAAKqsF,cAAgBmI,EAAAA,EAAWQ,iBAChCh1F,KAAKqsF,cAAgBmI,EAAAA,EAAWY,sBAChCp1F,KAAKqsF,cAAgBmI,EAAAA,EAAWqB,eAChC71F,KAAKqsF,cAAgBmI,EAAAA,EAAWsB,QAChC91F,KAAKqsF,cAAgBmI,EAAAA,EAAWuB,mBAChC/1F,KAAKqsF,cAAgBmI,EAAAA,EAAWwB,eAChCh2F,KAAKqsF,cAAgBmI,EAAAA,EAAWyB,eACzC,CAEA,oBAAIC,GACF,OAAOl2F,KAAK8pF,aAAaoM,gBAC3B,CAEA,YAAIC,GAAsB,IAADC,EACvB,OAAmC,QAAnCA,EAAOp2F,KAAK8pF,aAAauM,kBAAU,IAAAD,EAAAA,EAAI,EACzC,CAEA,cAAIpF,GACF,OAAOhxF,KAAK8pF,aAAakH,UAC3B,CAKA,yCAAIsF,GACF,OAAOt2F,KAAK20F,WACd,CAEA,wBAAI4B,GACF,OAAQv2F,KAAK20F,WACf,IACDx4E,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,qBAhrBEo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,EAAAsJ,UAAA,qBAAAtJ,EAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,+BAmBRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,EAAAsJ,UAAA,+BAAAtJ,EAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,qCAgBRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,EAAAsJ,UAAA,qCAAAtJ,EAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,YAoQRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,EAAAsJ,UAAA,YAAAtJ,EAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,gBAKRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,EAAAsJ,UAAA,gBAAAtJ,EAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,cAsCRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,EAAAsJ,UAAA,cAAAtJ,EAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,uBAWRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,EAAAsJ,UAAA,uBAAAtJ,EAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,8BAqERo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,EAAAsJ,UAAA,8BAAAtJ,EAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,uBAgCRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,EAAAsJ,UAAA,uBAAAtJ,EAAAsJ,WAAAtJ,E,+BC5nBJ,IAAKqzB,E,iBAIX,SAJWA,GAAAA,EAAgB,cAAhBA,EAAgB,gCAAhBA,EAAgB,YAI3B,CAJWA,IAAAA,EAAgB,I,+BCArB,IAAKswD,E,iBAGX,SAHWA,GAAAA,EAAAA,EAAiB,6BAAjBA,EAAAA,EAAiB,mCAG5B,CAHWA,IAAAA,EAAiB,I,mCCAxBC,E,iBAAY,SAAZA,GAAAA,EAAY,kBAAZA,EAAY,wBAAZA,EAAY,wBAAZA,EAAY,kCAAZA,EAAY,kCAAZA,EAAY,wBAAZA,EAAY,UAAZA,EAAY,cAAZA,EAAY,YAAZA,EAAY,8BAAZA,EAAY,4BAAZA,EAAY,kCAAZA,EAAY,YAAZA,EAAY,0BAAZA,EAAY,cAAZA,EAAY,uBAAZA,IAAAA,EAAY,I,gDCAV,IAAKC,EAOAC,EAIAC,GALX,SANWF,GAAAA,EAAS,UAATA,EAAS,gBAATA,EAAS,cAATA,EAAS,gBAATA,EAAS,yBAMpB,CANWA,IAAAA,EAAS,KAUpB,SAHWC,GAAAA,EAAgB,oBAAhBA,EAAgB,sBAG3B,CAHWA,IAAAA,EAAgB,KAQ3B,SAJWC,GAAAA,EAAY,YAAZA,EAAY,gBAAZA,EAAY,YAIvB,CAJWA,IAAAA,EAAY,KAMjB,MAAMC,EAAkB/jF,WAAAA,GAAA,KAInBgkF,OAAmB,GAAG,KACtBC,gBAAU,EAJlB,cAAWtzF,GACP,OAAO,IAAIozF,CACf,CAIAG,SAAAA,CAAUC,GAEN,OADAl3F,KAAKg3F,WAAaE,EACXl3F,IACX,CACAm3F,QAAAA,CAASC,GAEL,OADAp3F,KAAK+2F,OAAOp8E,KAAK,eAAD/a,OAAgBw3F,EAAC,QAC1Bp3F,IACX,CACAq3F,QAAAA,CAASD,GAEL,OADAp3F,KAAK+2F,OAAOp8E,KAAK,eAAD/a,OAAgBw3F,EAAC,QAC1Bp3F,IACX,CACAiiB,SAAAA,CAAUq1E,GAEN,OADAt3F,KAAK+2F,OAAOp8E,KAAK,gBAAD/a,OAAiB03F,EAAC,QAC3Bt3F,IACX,CACA6tE,SAAAA,CAAUypB,GAEN,OADAt3F,KAAK+2F,OAAOp8E,KAAK,gBAAD/a,OAAiB03F,EAAC,QAC3Bt3F,IACX,CACAu3F,WAAAA,CAAYC,GAER,OADAx3F,KAAK+2F,OAAOp8E,KAAK,iBAAD/a,OAAkB43F,EAAC,MAC5Bx3F,IACX,CACAuC,KAAAA,CAAMk1F,GAEF,OADAz3F,KAAK+2F,OAAOp8E,KAAK,WAAD/a,OAAY63F,EAAI,QAAU,OAAM,MACzCz3F,IACX,CACA03F,QAAAA,CAASD,GAEL,OADAz3F,KAAK+2F,OAAOp8E,KAAK,eAAD/a,OAAgB63F,EAAI,QAAU,OAAM,MAC7Cz3F,IACX,CACA23F,OAAAA,CAAQC,GAMJ,OALIA,EACA53F,KAAK+2F,OAAOp8E,KAAK,aAAD/a,OAAcg4F,EAAS,MAEvC53F,KAAK+2F,OAAOp8E,KAAK,aAEd3a,IACX,CACA63F,UAAAA,CAAWD,GAMP,OALIA,EACA53F,KAAK+2F,OAAOp8E,KAAK,iBAAD/a,OAAkBg4F,EAAS,MAE3C53F,KAAK+2F,OAAOp8E,KAAK,iBAEd3a,IACX,CACA4D,KAAAA,GACI,IAAIk0F,EAAQ,IAAI93F,KAAK+2F,QAIrB,OAHI/2F,KAAKg3F,YACLc,EAAMC,QAAQ/3F,KAAKg3F,YAEhBc,EAAMryF,KAAK,QACtB,EC1EJ,IAAI,MAAEuyF,EAAK,KAAEC,EAAI,KAAEC,EAAI,KAAEC,EAAI,MAAEC,GCHJ,CACvBJ,MAAO,IACPC,KAAM,IACNC,KAAM,KACNC,KAAM,KACNC,MAAO,MDAJ,MAAMC,EAA8B,CACvCz5F,GAAIk4F,EAAkBpzF,IAAI2zF,SAASW,EAAQ,GAAGp0F,QAE9CiN,UAAWimF,EAAkBpzF,IAAI2zF,SAASY,EAAO,GAAGr0F,QACpD00F,OAAQxB,EAAkBpzF,IAAIyzF,SAASa,GAAOX,SAASY,EAAO,GAAGr0F,QACjEq1B,UAAW69D,EAAkBpzF,IAAIyzF,SAASa,GAAOp0F,QAEjD2xC,UAAWuhD,EAAkBpzF,IAAI2zF,SAASa,EAAO,GAAGt0F,QACpD20F,OAAQzB,EAAkBpzF,IAAIyzF,SAASc,GAAMZ,SAASa,EAAO,GAAGt0F,QAChE+M,UAAWmmF,EAAkBpzF,IAAIyzF,SAASc,GAAMr0F,QAEhDxF,UAAW04F,EAAkBpzF,IAAI2zF,SAASc,EAAO,GAAGv0F,QACpD40F,OAAQ1B,EAAkBpzF,IAAIyzF,SAASe,GAAMb,SAASc,EAAO,GAAGv0F,QAChEyf,UAAWyzE,EAAkBpzF,IAAIyzF,SAASe,GAAMt0F,QAEhDmoC,WAAY+qD,EAAkBpzF,IAAI2zF,SAASe,EAAQ,GAAGx0F,QACtDgtB,QAASkmE,EAAkBpzF,IAAIyzF,SAASgB,GAAMd,SAASe,EAAQ,GAAGx0F,QAClEgN,WAAYkmF,EAAkBpzF,IAAIyzF,SAASgB,GAAMv0F,QAEjDitB,IAAKimE,EAAkBpzF,IAAIyzF,SAASiB,GAAOx0F,QAE3CwlC,SAAU0tD,EAAkBpzF,IAAI6zF,YAAYX,EAAiB6B,UAAU70F,QACvE8nC,UAAWorD,EAAkBpzF,IAAI6zF,YAAYX,EAAiB8B,WAAW90F,QAEzEkvD,cAAegkC,EAAkBpzF,IAAImqE,UAAU,KAAKjqE,QACpDktB,UAAWgmE,EAAkBpzF,IAAImqE,UAAU,KAAKjqE,QAEhDrB,MAAOu0F,EAAkBpzF,IAAInB,OAAM,GAAMqB,QACzC20D,UAAWu+B,EAAkBpzF,IAAInB,OAAM,GAAOqB,QAE9C8zF,SAAUZ,EAAkBpzF,IAAIg0F,UAAS,GAAM9zF,QAC/CyrE,aAAcynB,EAAkBpzF,IAAIg0F,UAAS,GAAO9zF,QAEpD+zF,QAASb,EAAkBpzF,IAAIi0F,UAAU/zF,QACzC+0F,YAAa7B,EAAkBpzF,IAAIi0F,QAAQd,EAAa+B,MAAMh1F,QAC9Di1F,cAAe/B,EAAkBpzF,IAAIi0F,QAAQd,EAAaiC,QAAQl1F,QAClEm1F,YAAajC,EAAkBpzF,IAAIi0F,QAAQd,EAAamC,MAAMp1F,QAE9Di0F,WAAYf,EAAkBpzF,IAAIm0F,aAAaj0F,QAC/Cq1F,eAAgBnC,EAAkBpzF,IAAIm0F,WAAWhB,EAAa+B,MAAMh1F,QACpEs1F,iBAAkBpC,EAAkBpzF,IAAIm0F,WAAWhB,EAAaiC,QAAQl1F,QACxEu1F,eAAgBrC,EAAkBpzF,IAAIm0F,WAAWhB,EAAamC,MAAMp1F,Q,4EE3CzD,MAAMw1F,UAA0BC,EAAAA,EAC3CtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,sBAAuBkhF,EAAc9tF,EAC/C,CAEA,cAAgB8pD,SACNt1D,KAAKwL,SAAS+tF,gCAAgCC,iBACxD,E,4ECNW,MAAMC,UAAqCJ,EAAAA,EACtDtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,iCAAkCkhF,EAAc9tF,EAC1D,CAEA,cAAgB8pD,SACNt1D,KAAKwL,SAAS6jC,QAAQqqD,gCAChC,E,uFCNW,MAAMC,UAAmBN,EAAAA,EACpCtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,eAAekhF,EAAc9tF,EACvC,CACA,cAAgB8pD,eACCt1D,KAAKwL,SAASouF,aAAaC,SAAU,CAC9CC,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3CvrB,sBAAuB,CACnBskE,SAAUC,EAAAA,GAAaC,MAE3B9kE,QAAS,CACLC,KAAMC,EAAAA,EAAS6kE,eACfrlE,QAAS70B,KAAK8a,IACdwa,OAAQswD,EAAAA,GAAeC,eAGnC,E,uFCjBW,MAAMsU,UAAwBd,EAAAA,EACzCtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,qBAAsBkhF,EAAc9tF,EAC9C,CAEA,cAAgB8pD,eACCt1D,KAAKwL,SAASi0D,eAAe26B,cAAc,CACpDx6E,MAAOy6E,EAAAA,GAAaC,WAE5B,E,iGCRW,MAAMC,UAA4BlB,EAAAA,EAC7CtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,wBAAyBkhF,EAAc9tF,EACjD,CAEA,cAAgB8pD,eACCt1D,KAAKwL,SAASouF,aAAaY,sBAAsB,CAC1DV,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3C7rB,QAAS,CACLC,KAAMC,EAAAA,EAASolE,SACf5lE,QAASC,EAAAA,GAAiB4lE,wBAC1BplE,OAAQC,EAAAA,GAAeC,cAE3BC,sBAAuB,CACnBH,OAAQwqC,EAAAA,GAAwB26B,WAG5C,E,kGCjBW,MAAME,UAAsBtB,EAAAA,EACvCtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,kBAAmBkhF,EAAc9tF,EAC3C,CAEA,cAAgB8pD,SACNt1D,KAAKwL,SAAS6jC,QAAQgoB,YAAY,CACpCliC,QAAS,CACLG,OAAQC,EAAAA,GAAeC,aACvBJ,KAAMC,EAAAA,EAAS6kE,eACfrlE,QAASC,EAAAA,GAAiB6a,gBAGtC,E,2ECdW,MAAMirD,UAAgCC,EAAAA,EACjD9nF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,4BAA6BkhF,EAAc9tF,EACrD,CAEA,cAAgB8pD,CAASjvD,GAErBrG,KAAKwL,SAASi+B,YAAYqxD,gDAEpB1iF,MAAMk9C,SAASjvD,EACzB,E,uFCVW,MAAM00F,UAAyB1B,EAAAA,EAC1CtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,qBAAsBkhF,EAAc9tF,EAC9C,CAEA,cAAgB8pD,eACCt1D,KAAKwL,SAASouF,aAAaoB,cAAc,CAClDlB,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3C7rB,QAAS,CACLC,KAAMC,EAAAA,EAAS6kE,eACfrlE,QAAS+wD,EAAAA,GAAeqV,aACxB3lE,OAAQswD,EAAAA,GAAeC,eAGnC,E,uFCdW,MAAMqV,UAAyB7B,EAAAA,EAC1CtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,qBAAsBkhF,EAAc9tF,EAC9C,CAEA,cAAgB8pD,GACZ,MAAM6lC,QAAmBn7F,KAAKwL,SAASuhB,OAAOquE,oBAC9Cp7F,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CACrC5yB,MAAO,OACP3G,KAAMq5F,EACNz/D,QAAS,CACL,CACI55B,KAAM,QACN65B,aAAc,UACdt0B,QAASqY,SACEmc,EAAAA,EAAkCC,wBAGjD,CACIh6B,KAAM,UACN65B,aAAc,UACdt0B,QAASqY,UACL1f,KAAKwL,SAASuhB,OAAOsuE,SAASF,GACvBt/D,EAAAA,EAAkCC,kCAKnD97B,KAAKwL,SAAS+tF,gCAAgCC,iBACxD,E,2EC9BW,MAAM8B,UAAwCjC,EAAAA,EACzDtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,oCAAqCkhF,EAAc9tF,EAC7D,CAEA,cAAgB8pD,GACZt1D,KAAKwL,SAASoL,WAAWrI,QAAQgtF,wBACrC,E,4ECPW,MAAMC,UAAyBnC,EAAAA,EAC1CtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,qBAAsBkhF,EAAc9tF,EAC9C,CAEA,cAAgB8pD,eACCt1D,KAAKwL,SAASiwF,mBAAmBC,QAClD,E,4ECPW,MAAMC,UAA+BtC,EAAAA,EAChDtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,2BAA4BkhF,EAAc9tF,EACpD,CAEA,cAAgB8pD,GACZ,E,uFCLO,MAAMsmC,UAAqBvC,EAAAA,EACtCtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,iBAAkBkhF,EAAc9tF,EAC1C,CAEA,cAAgB8pD,eACCt1D,KAAKwL,SAASi0D,eAAe26B,cAAc,CACpDx6E,MAAOy6E,EAAAA,GAAawB,cAE5B,E,4ECTW,MAAMC,UAAkDzC,EAAAA,EACnEtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,sCAAuCkhF,EAAc9tF,EAC/D,CAEA,cAAgB8pD,CAASjvD,GACrBrG,KAAKwL,SAAS63E,IAAI0Y,yCACtB,E,uFCPW,MAAMC,UAAgC3C,EAAAA,EACjDtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,4BAA6BkhF,EAAc9tF,EACrD,CAEA,cAAgB8pD,SACNt1D,KAAKwL,SAAS6jC,QAAQ4sD,eAAe,CAAC1sD,YAAaC,EAAAA,GAAmB0sD,mBAChF,E,kGCLW,MAAMC,UAAqB9C,EAAAA,EACtCtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,iBAAkBkhF,EAAc9tF,EAC1C,CAEA,cAAgB8pD,eACCt1D,KAAKwL,SAASi0D,eAAei0B,eAAe,CACrDv+D,QAAS,CACLC,KAAMC,EAAAA,EAAS6kE,eACf5kE,OAAQC,EAAAA,GAAeC,aACvBX,QAASC,EAAAA,GAAiB8+D,gBAE9BnB,gBAAiB,CACboB,GAAI7zF,KAAK6hB,OAAOgyE,KAG5B,E,4ECfW,MAAMuI,UAAqC/C,EAAAA,EACtDtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,iCAAkCkhF,EAAc9tF,EAC1D,CACA,cAAgB8pD,CAASjvD,GACrBrG,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CACrCv5B,KAAM,qCACN2G,MAAO,QAEf,E,kGCXW,MAAM4zF,UAAgChD,EAAAA,EACjDtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,4BAA6BkhF,EAAc9tF,EACrD,CAEA,cAAgB8pD,eACCt1D,KAAKwL,SAASouF,aAAaY,sBAAsB,CAC1DV,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAE3C7rB,QAAS,CACLC,KAAMC,EAAAA,EAASolE,SACf5lE,QAASC,EAAAA,GAAiB4lE,wBAC1BplE,OAAQC,EAAAA,GAAeC,cAE3BC,sBAAuB,CACnB6mE,SAAUC,EAAAA,GAAsBC,sBAChClnE,OAAQwqC,EAAAA,GAAwB26B,WAG5C,E,4ECrBW,MAAMgC,UAAsBpD,EAAAA,EACvCtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,kBAAmBkhF,EAAc9tF,EAC3C,CAEA,cAAgB8pD,GACZt1D,KAAKwL,SAASkxF,gBAAgBC,2BAClC,E,kGCLW,MAAMC,UAAiCvD,EAAAA,EAClDtmF,WAAAA,CAAYumF,EAAqC9tF,GAC7C4M,MAAM,6BAA8BkhF,EAAc9tF,EACtD,CAEA,cAAgB8pD,SACNt1D,KAAKwL,SAAS6jC,QAAQwtD,uBACxB,CACI1nE,QAAS,CACLG,OAAQC,EAAAA,GAAeC,aACvBJ,KAAMC,EAAAA,EAASolE,SACf5lE,QAASC,EAAAA,GAAiBgoE,2BAI1C,E,0EChBG,MAAMjC,UAA6BxB,EAAAA,EACtC,cAAgB/jC,CAASjvD,GACrB,IAAIrG,KAAK6hB,OAAOk7E,OACZ,MAAM,IAAI9sB,MAAM,sBAADrwE,OAAuBI,KAAK8a,IAAG,eAGlD,MAAMkiF,EAAsC,CAAC,iBAAkB,oBAAqB,qBAEpF,IACOh9F,KAAKwL,SAASkE,KAAKC,cAAgBqtF,EAAgB9/E,SAASld,KAAK6hB,OAAOk7E,SACvE/8F,KAAKwL,SAAS63E,IAAI0Y,yCAE1B,CACA,MAAOv3F,GACHxE,KAAKwL,SAASqd,UAAUC,qBAAqB,CACzCC,UAAW,QACXC,SAAU,aACV/Q,OAAQ,8CACRnO,MAAMtF,EAAErF,YAEhB,CAAC,cAESa,KAAKwL,SAASszB,gBAAgBm+D,aAAa,CAC7CF,OAAQ/8F,KAAK6hB,OAAOk7E,OACpBG,SAAiB,OAAP72F,QAAO,IAAPA,OAAO,EAAPA,EAAS62F,SACnBzK,gBAAiB,CACboB,GAAI7zF,KAAK6hB,OAAOgyE,KAG5B,CACJ,CAEA,uBAAIvwB,GACA,IAAI65B,EAAOn9F,KAAK0jE,aAChB,IACI,IAAKy5B,EACD,OAAO,EAEY,MAAnBA,EAAKx8E,OAAO,KACZw8E,EAAOA,EAAKx8E,MAAM,GAAI,IAE1B,MAAMy8E,EAAcp9F,KAAKwL,SAASorB,SAASE,WAAWC,SAChDsmE,EAAY,IAAIC,EAAAA,EAAQH,GAE9B,GAAIC,EAAYppF,QACZ,OAAOqpF,EAAUrpF,QACrB,GAAIqpF,EAAUrpF,QACV,OAAO,EAEX,MAAMupF,EAAWF,EAAUG,UAAU,GAAGx9E,cAGxC,OAAIu9E,IAFaH,EAAYI,UAAU,GAAGx9E,eAKnCo9E,EAAYj+F,WAAW6gB,cAAcsjB,QAAQ65D,EAAKn9E,gBAAkB,CAC/E,CAAE,MAAMxb,GAEJ,OADAxE,KAAKwL,SAAS2L,OAAOxI,MAAM,2BAAD/O,OAA4Bu9F,EAAI,uBAAuB34F,IAC1E,CACX,CACJ,E,gDCzDG,MAAe60F,EAClBtmF,WAAAA,CAA4B+H,EACCw+E,EACE9tF,GAAoC,KAFvCsP,IAAAA,EAAgB,KACfw+E,aAAAA,EAAmC,KACjC9tF,SAAAA,EAAiC,KAqBxDiyF,QAAgD,IApBxD,CAKA,aAAM96B,CAAQt8D,GACV,MAAM49B,QAAiBjkC,KAAKwL,SAASy4B,eAC/BA,EAASC,yBACRlkC,KAAKwL,SAASu4B,UAAUC,YAC/BhkC,KAAKwL,SAASuhB,OAAO2wE,4BACA19F,KAAKwL,SAASmyF,QAC5Bj0B,MAAMk0B,cACb,MAAM/0E,EAAY7oB,KAAK6hB,OAAOgH,UAC3BA,GACC7oB,KAAKwL,SAASqd,UAAUkd,uBAAuBld,EAAUG,SAAUH,EAAU5Q,OAAQ4Q,EAAUyR,cAE5Ft6B,KAAKwL,SAAS6qB,qBAAqBwnE,kBAAoB79F,KAAK8a,UAC7D9a,KAAKs1D,UACf,CAIA,UAAczzC,GAKV,OAJI7hB,KAAKy9F,UACLz9F,KAAKy9F,QAAUz9F,KAAKs5F,aAAawE,kBAAkB99F,KAAK8a,MAGrD9a,KAAKy9F,OAChB,CAEA,uBAAIn6B,GACA,OAAO,CACX,CAEAI,UAAAA,GACI,OAAI1jE,KAAK6hB,OAAOk7E,OAGT/8F,KAAKwL,SAASszB,gBAAgB4kC,WAAW1jE,KAAK6hB,OAAOk7E,QAFjD,IAGf,E,0ECtCG,MAAegB,EAClBhrF,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,CAC/B,CAKAsyF,iBAAAA,CAAkBhjF,GACd,MACMkjF,EADah+F,KAAKwL,SAASye,cAAcC,KACsBi6C,UAAUrpD,GAC/E,IAAIkjF,EACA,MAAM,IAAI/tB,MAAM,6BAADrwE,OAA8Bkb,EAAG,eAGpD,MAAMmjF,EAAqBj+F,KAAKk+F,+BAE1BC,EAA4DF,GAAsBA,EAAmBnjF,GA4B3G,OAAO,IAAIsjF,MAAMJ,EAxBkB,CAC/BhU,IAAKA,CAAC9/E,EAAam0F,KACf,GAAY,cAATA,EAAsB,CACrB,MAAMC,EAAmBt+F,KAAKu+F,gCAC9B,GAAGD,EAAkB,CAKjB,OAJ6Cp5F,EAAAA,EAAAA,GAAA,CACzC+S,OAAQ6C,GACLwjF,EAGX,CACI,OAAO,IAEf,CAAO,CACH,MAAME,EAAoBL,GAA0BA,EAAuBE,GAC3E,OAAGt5F,EAAAA,MAAMk7B,YAAYu+D,GACVt0F,EAAOm0F,GAEPG,CAEf,IAOZ,E,8DCtDG,MAAMC,UAAoCV,EAAAA,EACnCG,4BAAAA,GAEV,CAEUK,6BAAAA,GACN,OAAO,IACX,E,gDCIG,MAAeG,EAClB3rF,WAAAA,CAA4B+H,EACCw+E,EACE9tF,EACAmzF,GAAuD,KAH1D7jF,IAAAA,EAAgB,KACfw+E,aAAAA,EAAmC,KACjC9tF,SAAAA,EAAiC,KACjCmzF,sBAAAA,EAAoD,KAO3ElB,QAAgD,KAAK,KACnDmB,wBAAyDz+F,EAAU,KAU5D0+F,oBAAc,EAjB3B7+F,KAAK6+F,eAAiB7+F,KAAK2+F,sBAAsBG,kBAAkB9+F,KAAK8a,IAAK9a,KAAKs5F,aACtF,CAQA,UAAYz3E,GAKR,OAJI7hB,KAAKy9F,UACLz9F,KAAKy9F,QAAUz9F,KAAKs5F,aAAawE,kBAAkB99F,KAAK8a,MAGrD9a,KAAKy9F,OAChB,CAIAl5B,cAAAA,CAAel+D,GAEX,OADArG,KAAK4+F,mBAAqBv4F,EACnBrG,KAAK++F,oBAAoB14F,EACpC,CAEAs8D,OAAAA,CAAQt8D,GAAmD,IAAD24F,EAItD,OAH0B,QAA1BA,EAAGh/F,KAAK4+F,0BAAkB,IAAAI,GAAvBA,EAAyBliB,eACxB98E,KAAK4+F,mBAAmB9hB,gBAErB98E,KAAK6+F,eAAel8B,QAAQt8D,EACvC,CAGA,QAAIvE,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAK6hB,OAAO/f,KAC3D,CAEA,YAAIm9F,GACA,OAAO,IACX,CAEA,sBAAI57B,GAA+B,IAAD67B,EAC9B,OAAqC,QAArCA,EAAOl/F,KAAK6hB,OAAOwhD,0BAAkB,IAAA67B,GAAAA,CACzC,CAEUC,cAAAA,GAA2B,IAADC,EAChC,OAA0B,QAA1BA,EAAOp/F,KAAK6hB,OAAOpV,eAAO,IAAA2yF,GAAAA,CAC9B,CAEA,WAAI3yF,GACA,OAAOzM,KAAKm/F,gBAChB,CAEA,uBAAI77B,GACA,OAAOtjE,KAAK6+F,eAAev7B,mBAC/B,CAEA,cAAIT,GAAuC,IAADw8B,EACtC,OAAqC,QAArCA,EAAOr/F,KAAK6hB,OAAOy9E,0BAAkB,IAAAD,EAAAA,EAAI,YAC7C,CAEA,QAAIp4F,GACA,OAAOjH,KAAK6hB,OAAO09E,YACvB,CAEA,eAAIv8B,GACA,OAAOhjE,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAK6hB,OAAO29E,oBAC3D,CAEA97B,UAAAA,GACI,OAAO1jE,KAAK6+F,eAAen7B,YAC/B,E,iFCzFG,IAAK7tC,GAKX,SALWA,GAAAA,EAAAA,EAAwB,+BAAxBA,EAAAA,EAAwB,iCAAxBA,EAAAA,EAAwB,yBAAxBA,EAAAA,EAAwB,yBAKnC,CALWA,IAAAA,EAAwB,KAwB7B,MAAM4pE,UAAgC/gB,EAAAA,EAG/BghB,gBAAAA,CAAiBr5F,EAAuCs5F,GAC9D,GAAIt5F,EAAQu5F,YAAcv5F,EAAQu5F,UAAUr6E,SAAWC,EAAAA,EAAgBC,SAAWpf,EAAQu5F,UAAUr6E,SAAWC,EAAAA,EAAgBE,SAC3H,MAAM,IAAIuqD,MAAM,8EAGpB,IAAItwB,EAAoB,IAAI95B,EAAAA,EAAmB7lB,KAAKwL,SAAU,CAC1D9J,MAAO2E,EAAQI,KAAK/E,MACpBL,OAAQgF,EAAQI,KAAKpF,OACrBw+F,cAAeA,KACPx5F,EAAQuvB,mBACRvvB,EAAQuvB,kBAAkBC,EAAyBiqE,aACvD,GAEL,CAAC,CAAC/5E,KAAM45E,EAAc35E,QAAS3f,EAAQ2f,UAAW,CACjDvmB,OAAQd,IAAyC,IAAxC,gBAACwnB,EAAe,gBAAE05B,GAAgBlhD,EACnC8nB,EAAiBN,EAAgBw5E,GAErC,MAAM3/C,EAAsBH,EAAgB8/C,GAAc1/C,UAAUC,WAAW3vC,KAAI4vC,GAAKA,EAAEp6B,OACpFg6E,GAA0E,IAAxD//C,EAAoB1c,QAAQj9B,EAAQ25F,eAAwB35F,EAAQ25F,cAAgBhgD,EAAoB,GAG1Hp5B,EAAeA,KAEjBH,EAAeC,MAAMG,aAAa,EAAGk5E,GAAiB,EAAM,EAEhE,IAAI3/C,EAkBJ,OAhBA35B,EAAeC,MAAMC,YAAY,CAC7BQ,SAAW/Y,IAEPgyC,EAAoBjW,WAAWvjB,EAAcvgB,EAAQ4tB,QAAQpI,SAAS,IAI9EjF,IAEAvgB,EAAQuvB,kBAAqBqqE,IACrB55F,EAAQq/D,uBACRr/D,EAAQq/D,sBAAsBu6B,GAElCtgD,EAAkBthC,SAAS,EAGxB,KACH4rB,aAAamW,EAAkB,CAClC,GAEN,CACC3zC,QAAS,QACT/K,MAAO,SAGX2E,EAAQu5F,UAAYjgD,EACpBt5C,EAAQuvB,kBAAoB+pB,EAAkBthC,QAE9CshC,EAAkBh6B,QAAQpE,MAAKjf,IAAe,IAAd,OAACijB,GAAOjjB,EAChCijB,IAAWC,EAAAA,EAAgBE,UACvBrf,EAAQo/D,iBACRp/D,EAAQo/D,kBAEZ9lB,EAAkB/5B,YAAYvf,EAAQsvB,SAC1C,IACDmoC,OAAOt5D,IAENxE,KAAKwL,SAAS2L,OAAOxI,MAAMnK,EAAE,GAErC,E,+BChFG,IAAKghB,E,yBAOX,SAPWA,GAAAA,EAAAA,EAAe,eAAfA,EAAAA,EAAe,qBAAfA,EAAAA,EAAe,mBAAfA,EAAAA,EAAe,qBAAfA,EAAAA,EAAe,qBAAfA,EAAAA,EAAe,uBAO1B,CAPWA,IAAAA,EAAe,KAoBpB,MAAMK,EAST9S,WAAAA,CACYvH,EACA00F,EACAC,EACA53C,EACA63C,GACT,KALS50F,SAAAA,EAAyB,KACzB00F,qBAAAA,EAA2C,KAC3CC,cAAAA,EAAsC,KACtC53C,SAAAA,EAA4B,KAC5B63C,UAAAA,EAAyB,KAb7BhlB,aAAO,OACPilB,qBAAe,OACfC,iBAA0C,CAAC,EAAE,KAC7CC,iBAAmD,CAAC,EAAE,KACtDC,eAAoC,GAAG,KACvCC,gBAAiB,EAAM,KACvBC,QAA2Bl7E,EAAgBm7E,KAAK,KAWhDC,YAAoD,KAAK,KA0G1DviF,QAAU,KACTre,KAAK0gG,UAAYl7E,EAAgBm7E,MAAQ3gG,KAAK0gG,UAAYl7E,EAAgBC,QAC1EzlB,KAAKygG,gBAAiB,EACfzgG,KAAK0gG,UAAYl7E,EAAgBE,UACxC1lB,KAAK0gG,QAAUl7E,EAAgBq7E,SAC/B7gG,KAAK8gG,mBACT,EACH,KAEOA,iBAAmB,KACvB,KAAO9gG,KAAKwgG,eAAetgG,QAAQ,CACTF,KAAKwgG,eAAehgD,KAC1CugD,EACJ,CAIA,IAHI/gG,KAAKuoD,SAASlqC,SACdre,KAAKuoD,SAASlqC,UAEXre,KAAKmgG,cAAcjgG,QAAQ,CAC9B,MAAM8gG,EAAWhhG,KAAKmgG,cAAc3/C,MAChCxgD,KAAKsgG,iBAAiBU,EAASj7E,QAC/B/lB,KAAKsgG,iBAAiBU,EAASj7E,MAAMk7E,YAAa,EAClDjhG,KAAKsgG,iBAAiBU,EAASj7E,MAAM4kC,iBAC9B3qD,KAAKsgG,iBAAiBU,EAASj7E,MAE9C,CACA/lB,KAAKqgG,iBAAiB,CArI1B,CAGO16E,KAAAA,GAIH,OAHK3lB,KAAK4gG,cACN5gG,KAAK4gG,YAAc5gG,KAAKkhG,eAErBlhG,KAAK4gG,WAChB,CAEA,iBAAcM,GAIV,GAFAlhG,KAAK0gG,QAAUl7E,EAAgBC,QAE3BzlB,KAAKygG,eAEL,OADAzgG,KAAK0gG,QAAUl7E,EAAgB27E,QACxB,CAAC57E,OAAQC,EAAgB27E,SAIpC,IAAKC,IAAKhmB,EAAS/8D,QAASgjF,EAAc,UAAEC,EAAS,OAAEC,SAAgBvhG,KAAKwL,SAAS4vE,QAAQomB,cAAcxhG,KAAKkgG,sBAChHlgG,KAAKo7E,QAAUA,EACfp7E,KAAKqgG,gBAAkBgB,EAEvB,MAAM,UAACI,SAAmBzhG,KAAKwL,SAAS4vE,QAAQsmB,cAActmB,EAASp7E,KAAKmgG,eAAeriC,OAAOt5D,IAG9F,MAFAxE,KAAK0gG,QAAUl7E,EAAgBm8E,OAC/BN,IACM78F,CAAC,IAIX,GAAIxE,KAAKygG,eAGL,OAFAzgG,KAAK0gG,QAAUl7E,EAAgB27E,QAC/BnhG,KAAK8gG,mBACE,CAACv7E,OAAQC,EAAgB27E,SAIhCnhG,KAAKogG,WACL3jF,OAAOmlF,oBAAoB5hG,KAAKogG,WAAWx0C,SAASi2C,IAChDN,EAAOz4F,MAAM+4F,GAAY7hG,KAAKogG,UAAUyB,EAAS,IAMzD7hG,KAAKmgG,cAAcv0C,SAASk2C,IACxB9hG,KAAKugG,iBAAiBuB,EAAO/7E,MAAQ07E,EAAUK,EAAO/7E,MACtD,IAAIU,EAAiB,IAAI66E,EAAUS,MAAMN,EAAUK,EAAO/7E,MAAMk6B,WAChEjgD,KAAKsgG,iBAAiBwB,EAAO/7E,MAAQU,EACrC20D,EAAQ4mB,MAAMC,SAASx7E,EAAe,IAM1C,MAAMy7E,EAAiBliG,KAAKuoD,SAAS9oD,OAAO,CAAC27E,UAASj1D,gBAAiBnmB,KAAKsgG,iBAAkBzgD,gBAAiB7/C,KAAKugG,mBAQpH,OAPI2B,GACAliG,KAAKwgG,eAAe7lF,KAAKunF,GAMzBliG,KAAKygG,gBACLzgG,KAAK0gG,QAAUl7E,EAAgB27E,QAC/BnhG,KAAK8gG,mBACE,CAACv7E,OAAQC,EAAgB27E,WAIpCnhG,KAAK0gG,QAAUl7E,EAAgBE,QAExB,CAACH,OAAQC,EAAgBE,QAAS67E,OAAQvhG,KAAKo7E,QAAQ+mB,MAClE,CAEOv8E,WAAAA,CAAY+P,GACf,IAAK31B,KAAK4gG,YACN,MAAM,IAAI3wB,MAAM,4DAEpB,OAAOjwE,KAAK4gG,YAAYr/E,MAAMm0C,IAGtBA,EAAOnwC,SAAWC,EAAgBE,SAClCiQ,EAAQysE,YAAY1sC,EAAO6rC,QAExB7rC,IAEf,CAEA,mBAAWvvC,GACP,OAAOnmB,KAAKsgG,gBAChB,CAEA,mBAAWzgD,GACP,OAAO7/C,KAAKugG,gBAChB,CAEA,UAAWh7E,GACP,OAAOvlB,KAAK0gG,OAChB,E,gDCxJG,MAAM2B,EAAuC,G,+BCA7C,IAAKC,E,iBAUX,SAVWA,GAAAA,EAAgB,qDAAhBA,EAAgB,uDAAhBA,EAAgB,sBAAhBA,EAAgB,sEAAhBA,EAAgB,gDAAhBA,EAAgB,8BAAhBA,EAAgB,0BAAhBA,EAAgB,uDAAhBA,EAAgB,kCAU3B,CAVWA,IAAAA,EAAgB,I,gDCIrB,MAAMC,EACTxvF,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,CAAoC,CACnEg3F,0BAAAA,GACI,OAAIxiG,KAAKwL,SAASi3F,SAASC,8BACnB1iG,KAAKwL,SAASrN,WAAW0S,UAClB,QAGJ,QAGP7Q,KAAKwL,SAASrN,WAAW0S,UAClB,QACA7Q,KAAKwL,SAASrN,WAAWC,UACzB,QAGJ,OACX,CAEAg2B,sBAAAA,GACI,MAAO,CACHpO,QAAShmB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAO2jG,IAAIC,gBAAgBzjG,WAC5EsH,KAAM,CACF/E,MAAO,IACPL,OAAQ,KAEZ2+F,mBAAe7/F,EAEvB,CAEA0iG,4CAAAA,GACI,MAAO,CACH,UAAa,CACT,CACI,MAAS,UACT,IAAO,6BAEX,CACI,MAAS,aACT,IAAO,6BAEX,CACI,MAAS,cACT,IAAO,6BAEX,CACI,MAAS,qBACT,IAAO,6BAEX,CACI,MAAS,eACT,IAAO,8BAGf,UAAa,CACT,CACI,MAAS,SACT,IAAO,6BAEX,CACI,MAAS,YACT,IAAO,4BAEX,CACI,MAAS,UACT,IAAO,4BAEX,CACI,MAAS,aACT,IAAO,4BAEX,CACI,MAAS,SACT,IAAO,4BAEX,CACI,MAAS,UACT,IAAO,4BAEX,CACI,MAAS,gBACT,IAAO,4BAEX,CACI,MAAS,WACT,IAAO,wBACP,sBAAwB,GAE5B,CACI,MAAS,cACT,IAAO,4BAGf,iBAAoB,CAChB,MAAS,wBACT,QAAW,WAEf,gBAAmB,CACf,MAAS,0BACT,QAAW,IAGvB,E,+BC3GG,IAAKC,EAKAC,E,oCAFX,SAHWD,GAAAA,EAAsB,+BAAtBA,EAAsB,iBAGjC,CAHWA,IAAAA,EAAsB,KAUjC,SALWC,GAAAA,EAAe,kCAAfA,EAAe,oBAAfA,EAAe,wBAAfA,EAAe,uCAK1B,CALWA,IAAAA,EAAe,KAO3B,IAAIC,EAA0B,GACvB,SAASC,EAAkBtjG,GAC9B,OAAKA,GAGLqjG,GAAmB,IAAMrjG,EAClBqjG,GAHIA,CAIf,C,+BCDO,IAAKE,E,iBAEX,SAFWA,GAAAA,EAAgB,0BAE3B,CAFWA,IAAAA,EAAgB,I,mGChBrB,MAAM30D,GAA+CzuC,EAAAA,EAAAA,IAAQ,oCACvDqjG,GAAqCrjG,EAAAA,EAAAA,IAAQ,iCAC7CsjG,GAA2CtjG,EAAAA,EAAAA,IAAQ,8BACnDujG,GAA0CvjG,EAAAA,EAAAA,IAAQ,mCAClDwjG,GAA0CxjG,EAAAA,EAAAA,IAAQ,6B,8DCJxD,MAAMyjG,EACTxwF,WAAAA,CAAoBywF,GAAc,KAAdA,SAAAA,EAAW,KAEvBC,UAAwC,CAAC,EAAE,KA8DnDC,gBAAmBte,GACRplF,KAAKyjG,UAAUre,EAAUue,WAAa3jG,KAAKyjG,UAAUre,EAAUue,WAAa3jG,KAAKwjG,QAjE1D,CAIlCtxF,YAAAA,CAAa0xF,GAET,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUC,UAAUH,WAAaC,EACzC5jG,IACX,CAEAgvE,YAAAA,CAAa40B,GAET,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUE,UAAUJ,WAAaC,EACzC5jG,IACX,CAEA6oE,MAAAA,CAAO+6B,GAEH,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUG,aAAaL,WAAaC,EAC5C5jG,IACX,CAEA8oE,UAAAA,CAAW86B,GAEP,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUI,QAAQN,WAAaC,EACvC5jG,IACX,CAEAqpE,MAAAA,CAAOu6B,GAEH,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUK,aAAaP,WAAaC,EAC5C5jG,IACX,CAEAuhE,UAAAA,CAAWqiC,GAEP,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUM,QAAQR,WAAaC,EACvC5jG,IACX,CAEAmxD,OAAAA,CAAQyyC,GAEJ,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUO,KAAKT,WAAaC,EACpC5jG,IACX,CAEAkxD,KAAAA,CAAM0yC,GAEF,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUQ,GAAGV,WAAaC,EAClC5jG,IACX,CAEA+oE,QAAAA,CAAS66B,GAEL,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUS,MAAMX,WAAaC,EACrC5jG,IACX,CAEAmS,UAAAA,CAAWyxF,GAEP,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUU,QAAQZ,WAAaC,EACvC5jG,IACX,CAEA41C,aAAAA,CAAcguD,GAEV,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUW,WAAWb,WAAaC,EAC1C5jG,IACX,CAEA21C,aAAAA,CAAciuD,GAEV,OADA5jG,KAAKyjG,UAAUI,EAAAA,EAAUY,WAAWd,WAAaC,EAC1C5jG,IACX,E,+DC/DG,MAAMyD,EAAQsP,WAAAA,GAAA,KAITgkF,OAAmB,GAAG,KACtB2N,gBAA0B,CAAM,CAJxC,cAAWhhG,GACP,OAAO,IAAID,CACf,CAGQkhG,UAAAA,CAAWC,GACf,OAAI5kG,KAAK0kG,gBACL1kG,KAAK0kG,gBAAiB,EAChB,QAAN9kG,OAAeglG,EAAI,MAEhBA,CACX,CACA,OAAIC,GAEA,OADA7kG,KAAK0kG,gBAAiB,EACf1kG,IACX,CACA,WAAI8kG,GAEA,OADA9kG,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,YAC1B3kG,IACX,CAEA,QAAI+kG,GAEA,OADA/kG,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,qBAC1B3kG,IACX,CAEA,UAAIqnD,GAEA,OADArnD,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,gBAC1B3kG,IACX,CAEA,eAAIglG,GAEA,OADAhlG,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,uBAC1B3kG,IACX,CAEA,UAAIilG,GAEA,OADAjlG,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,wBAC1B3kG,IACX,CAEA,YAAIopC,GAEA,OADAppC,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,kBAC1B3kG,IACX,CAEA,aAAI0rC,GAEA,OADA1rC,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,mBAC1B3kG,IACX,CAEA,UAAIklG,GAEA,OADAllG,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,gBAC1B3kG,IACX,CAEA,OAAI2D,GAEA,OADA3D,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,aAC1B3kG,IACX,CAEA,iBAAImlG,GAEA,OADAnlG,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,IAAD/kG,OAAKwlG,EAAAA,MAC9BplG,IACX,CAEA,UAAI+sB,GAEA,OADA/sB,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,gBAC1B3kG,IACX,CAEA,cAAIygC,GAEA,OADAzgC,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,sBAC1B3kG,IACX,CAEA,eAAIqlG,GAEA,OADArlG,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,uBAC1B3kG,IACX,CAEA,cAAIslG,GAEA,OADAtlG,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,qBAC1B3kG,IACX,CAEA,aAAIupC,GAEA,OADAvpC,KAAK+2F,OAAOp8E,KAAK3a,KAAK2kG,WAAW,IAAD/kG,OAAK2lG,EAAAA,MAC9BvlG,IACX,CAEA4D,KAAAA,GACI,OAA0B,IAAvB5D,KAAK+2F,OAAO72F,OACJ,GAGL,OAANN,OAAcI,KAAK+2F,OAAOtxF,KAAK,IACnC,E,mMC5FG,MAAM+/F,GAAwB3kG,EAAAA,EAAAA,IAAGlD,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,wDAI3Bo2D,GAA+BnzD,EAAAA,EAAAA,IAAGC,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,gEAIlCm2D,GAA2BlzD,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,2DAK9B6nG,EAAuB3nG,IAA8C+C,EAAAA,EAAAA,IAAGsB,IAAAA,GAAAvE,EAAAA,EAAAA,GAAA,gCAClEE,EAAMqjD,YAAc,SAK1BukD,GAA4B7kG,EAAAA,EAAAA,IAAG4B,IAAAA,GAAA7E,EAAAA,EAAAA,GAAA,kBACtC6nG,EAAoB,CAACtkD,WAAY,YAG1B8S,EAAgBn2D,IAAiC+C,EAAAA,EAAAA,IAAG6B,IAAAA,GAAA9E,EAAAA,EAAAA,GAAA,6BACjDE,EAAM+K,WAAa,QAKtBhL,GAAoBgD,EAAAA,EAAAA,IAAG+B,IAAAA,GAAAhF,EAAAA,EAAAA,GAAA,+BAGvB+nG,GAAuB9kG,EAAAA,EAAAA,IAAGiC,IAAAA,GAAAlF,EAAAA,EAAAA,GAAA,+BAM1BgoG,EAAuBnoG,EAAAA,GAAOiB,IAAGqE,IAAAA,GAAAnF,EAAAA,EAAAA,GAAA,kBACxCC,GAGO4X,EAAkBhY,EAAAA,GAAOiB,IAAGsE,IAAAA,GAAApF,EAAAA,EAAAA,GAAA,kBACnCq2D,GAGOtrD,EAAoBlL,EAAAA,GAAOiB,IAAGuE,IAAAA,GAAArF,EAAAA,EAAAA,GAAA,mBApBZE,IAAsD+C,EAAAA,EAAAA,IAAG8B,IAAAA,GAAA/E,EAAAA,EAAAA,GAAA,+BAC1EE,EAAM8K,YAAc,IAAO9K,EAAM+K,WAAa,UA2B/Cq4C,GAJ0BzjD,EAAAA,GAAOiB,IAAGmnG,IAAAA,GAAAjoG,EAAAA,EAAAA,GAAA,kBAC3C+nG,GAG0BloG,EAAAA,GAAOiB,IAAGonG,IAAAA,GAAAloG,EAAAA,EAAAA,GAAA,sCAKpCe,IAAA,IAAC,UAAConG,GAAUpnG,EAAA,MAAmB,WAAdonG,EAAyBhyC,EAA2ByxC,CAAqB,GAC1FC,GA5CkC3nG,IAAsD+C,EAAAA,EAAAA,IAAGwB,IAAAA,GAAAzE,EAAAA,EAAAA,GAAA,oCAC1EE,EAAMkoG,gBAAkB,W,gDCzBxC,MAAMC,EAAa,CACtBl1C,MAAO,UACPm1C,QAAS,UACTt1C,QAAS,UACTE,QAAS,UACTq1C,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,QAAS,UACTC,MAAO,UACP76C,YAAa,c,+BC3BV,IAAK86C,E,iBAIT,SAJSA,GAAAA,EAAAA,EAAiB,uBAAjBA,EAAAA,EAAiB,2BAAjBA,EAAAA,EAAiB,eAI1B,CAJSA,IAAAA,EAAiB,I,gGCGtB,SAASlpG,EAA8CmpG,GAE1D,MAAMj/F,EAA4B5K,IAC9B,MACM8pG,GADW/4F,EAAAA,EAAAA,KACW3Q,MAAM2pG,MAClC,IAAI77E,EAAY47E,GAAcA,EAAWD,GAGzC,IAAI37E,EACA,MAAM,IAAIikD,MAAM,sBAADrwE,OAAuB+nG,IAG1C,OACIjoG,EAAAA,EAAAA,KAACssB,GAAG9mB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAACoI,IAAKxP,EAAMgqG,cAAkBhqG,GAAK,IAAAiC,SAClCjC,EAAMiC,WACL,EAMd,OADqBiM,EAAAA,YAAsB,CAAClO,EAAOwP,KAAQ5N,EAAAA,EAAAA,KAACgJ,GAASxD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKpH,GAAK,IAAEgqG,aAAcx6F,MAInG,C,2GCnBO,SAAS4+B,EACZ2/C,EAAuCxkC,GAGvC,IAAI0gD,GAAsBxoG,EAAAA,EAAAA,IAAS,cAAcC,EAAAA,EAC7CC,MAAAA,GACI,IAAIiJ,EAAY,KAQhB,OALIA,EADD1I,KAAKwL,SAASqI,OAAOC,SACRuzC,EAEAwkC,GAIZnsF,EAAAA,EAAAA,KAACgJ,GAASxD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAACoI,IAAKtN,KAAKlC,MAAMgqG,cAAkB9nG,KAAKlC,OAAK,IAAAiC,SAClDC,KAAKlC,MAAMiC,WAGxB,IAMJ,OAFqBiM,EAAAA,YAAiB,CAAClO,EAAOwP,KAAQ5N,EAAAA,EAAAA,KAACqoG,GAAmB7iG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKpH,GAAK,IAAEgqG,aAAcx6F,MAGxG,C,0GC7BA,MAAM06F,UAA+GzE,EAAAA,EAEjHnxF,KAAAA,GACI,MAAMsxF,EAAkB1jG,KAAK0jG,gBAC7B,IAAIqE,EAAsB,cAAcvoG,EAAAA,EACpCC,MAAAA,GACI,IAAIiJ,EAAiBg7F,EAAgB1jG,KAAKwL,SAAStN,MAAMknF,WAEzD,OACI1lF,EAAAA,EAAAA,KAACgJ,GAASxD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAACoI,IAAKtN,KAAKlC,MAAMgqG,cAAkB9nG,KAAKlC,OAAK,IAAAiC,SAClDC,KAAKlC,MAAMiC,WAGxB,GAKJ,OAFqBiM,EAAAA,YAAiB,CAAClO,EAAOwP,KAAQ5N,EAAAA,EAAAA,KAACqoG,GAAmB7iG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKpH,GAAK,IAAEgqG,aAAcx6F,MAGxG,EAIG,SAAS2E,EAGdg2F,GACE,OAAO,IAAID,EAAoBC,EACnC,C,+DChCO,MAAMpE,EACT9wF,WAAAA,CAA4B4wF,EACAte,GAA8B,KAD9Bse,UAAAA,EAAiB,KACjBte,WAAAA,CAC5B,EAHSwe,EAKKE,UAAY,IAAIF,EAAU,YAAaqE,EAAAA,GAAgBnE,WAL5DF,EAMKG,aAAe,IAAIH,EAAU,gBAAiBqE,EAAAA,GAAgBnE,WANnEF,EAOKK,aAAe,IAAIL,EAAU,gBAAiBqE,EAAAA,GAAgBnE,WAPnEF,EAQKC,UAAY,IAAID,EAAU,YAAaqE,EAAAA,GAAgBpE,WAR5DD,EAUKM,QAAU,IAAIN,EAAU,UAAWqE,EAAAA,GAAgB/D,SAVxDN,EAWKO,KAAO,IAAIP,EAAU,OAAQqE,EAAAA,GAAgBC,MAXlDtE,EAYKI,QAAU,IAAIJ,EAAU,WAAYqE,EAAAA,GAAgBC,MAZzDtE,EAaKQ,GAAK,IAAIR,EAAU,KAAMqE,EAAAA,GAAgB7D,IAb9CR,EAcKS,MAAQ,IAAIT,EAAU,SAAUqE,EAAAA,GAAgB7D,IAdrDR,EAeKU,QAAU,IAAIV,EAAU,UAAWqE,EAAAA,GAAgB3D,SAfxDV,EAgBKW,WAAa,IAAIX,EAAU,cAAeqE,EAAAA,GAAgB3D,SAhB/DV,EAiBKY,WAAa,IAAIZ,EAAU,cAAeqE,EAAAA,GAAgB3D,Q,iGChBrE,MAAM6D,UAAuBp8F,EAAAA,UAChCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYF,MAAO,GAAG,GAAGvM,UAC7DyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,osCAC9C5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qNACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uNACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2NAGpB,E,eCNG,MAAMiqC,UAAgBv8F,EAAAA,UACzBvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGtB,OAAO,OAAO3F,YAAY,IAAIqL,KAAK,OAAOy7F,SAAS,UAAStoG,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,WAAS8oG,OAAO,yBAChB9oG,EAAAA,EAAAA,KAAA,QAAM4+D,EAEF,6LASJ1xD,KAAK,eAAey7F,SAAS,iBAI7C,ECpBG,MAAMI,UAAiBz8F,EAAAA,UAC1BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAEgO,WAAS,EAAA/L,UAC9BL,EAAAA,EAAAA,KAAA,KAAAK,UACIL,EAAAA,EAAAA,KAAA,QACIkN,KAAK,eACL0xD,EAAE,sIAKtB,ECZG,MAAMoqC,UAAoB18F,EAAAA,UAC7BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnBL,EAAAA,EAAAA,KAAA,KAAGipG,UAAU,iCAAgC5oG,UACzCL,EAAAA,EAAAA,KAAA,QACIkN,KAAK,eACL0xD,EAAE,sIAKtB,ECZG,MAAM/qC,UAAkBvnB,EAAAA,UAC3BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnBL,EAAAA,EAAAA,KAAA,KAAAK,UACIL,EAAAA,EAAAA,KAAA,QACIkN,KAAK,eACL0xD,EAAE,kKAKtB,ECjBG,MAAMsqC,UAA0B58F,EAAAA,UACnCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wYAIR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qRAKpB,ECRG,MAAMuqC,UAAiB78F,EAAAA,UAC1BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAG+mB,GAAG,OAAMxvB,SAAA,EACRL,EAAAA,EAAAA,KAAA,QACIkN,KAAK,eACL0xD,EAAE,0cAEN5+D,EAAAA,EAAAA,KAAA,QACIkN,KAAK,eACL0xD,EAAE,w3BAKtB,E,4BChBJ,MAAMwqC,EAAUrrG,EAAAA,GAAOqE,KAAInE,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,oJAOpB,MAAMmrG,UAAqB/8F,EAAAA,UAC9BvM,MAAAA,GACI,IAAIqC,EAAO9B,KAAKlC,MAAMgE,KAAKknG,OAAOC,OAAO,EAAE,GAC3C,OACIvpG,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnBL,EAAAA,EAAAA,KAAA,KAAAK,UACIL,EAAAA,EAAAA,KAACopG,EAAO,CACJl8F,KAAK,eACL0D,EAAE,MAAMmrE,EAAE,MACVytB,WAAW,SAAQnpG,SACrB+B,QAIlB,ECrBG,MAAMqnG,UAAuBn9F,EAAAA,UAChCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnBL,EAAAA,EAAAA,KAAA,KAAAK,UACIL,EAAAA,EAAAA,KAAA,QACIkN,KAAK,eACL0xD,EAAE,ooCAKtB,EChBG,MAAM8qC,UAAqBp9F,EAAAA,UAC9BvM,MAAAA,GACI,MAAM4pG,EAAkBrpG,KAAKlC,MAAMurG,iBAAmB,EACtD,OAAO7gG,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oOACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QAAQC,eAAe,WACvI9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yIACJ1xD,KAAK,eAAe08F,YAAaD,KACrC3pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yIACJp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QAAQC,eAAe,WACrFhhG,EAAAA,EAAAA,MAAA,KAAGihG,SAAS,yBAAwB1pG,SAAA,EAChCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uqBACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,UACxF7B,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,aAEzE7B,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mRACJp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QAAQC,eAAe,WACrF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gLACJ1xD,KAAK,kBACTlN,EAAAA,EAAAA,KAAA,QAAAK,UACIL,EAAAA,EAAAA,KAAA,YAAU6vB,GAAG,mBAAkBxvB,UAC3BL,EAAAA,EAAAA,KAAA,QAAMgC,MAAM,UAAUL,OAAO,UAAUuL,KAAK,QAAQ+7F,UAAU,sCAI9E,ECzBG,MAAMe,UAAqB19F,EAAAA,UAC9BvM,MAAAA,GACI,MAAM4pG,EAAkBrpG,KAAKlC,MAAMurG,iBAAmB,EACtD,OAAO7gG,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kMACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAEpI9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oNACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oNACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2KACJ1xD,KAAK,eAAe1F,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAEtG9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACxH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACxH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACxH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACxH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,aAEjI,ECjCG,MAAMI,UAAsB59F,EAAAA,UAC/BvM,MAAAA,GACI,MAAM4pG,EAAkBrpG,KAAKlC,MAAMurG,iBAAmB,EACtD,OAAO7gG,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oSACJ1xD,KAAK,eAAe08F,YAAaD,KAErC3pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iVACJp3D,OAAO,eAAe3F,YAAY,UAEtC7B,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kGACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAEjH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gGACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6kBACJ1xD,KAAK,kBAETlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kGACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,WAE3DjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kDAAkDp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,aAEzH,EC7BG,MAAME,UAAwB79F,EAAAA,UACjCvM,MAAAA,GACI,MAAM4pG,EAAkBrpG,KAAKlC,MAAMurG,iBAAmB,EACtD,OAAO7gG,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yFAAyF1xD,KAAK,eAAe08F,YAAaD,KAClI3pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yFAAyFp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,WAChL9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,WAClH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,WAC1H9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gCAAgCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,WACvH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gCAAgCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,WACvH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,WAC1H9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,WAClH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iCAAiCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,WACxH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iCAAiCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,SAASH,eAAe,aAEhI,EClBG,MAAMM,UAAkB99F,EAAAA,UAC3BvM,MAAAA,GACI,MAAM4pG,EAAkBrpG,KAAKlC,MAAMurG,iBAAmB,EACtD,OAAO7gG,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mIACJ1xD,KAAK,kBAETlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iTACJ1xD,KAAK,kBAETlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gNACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,WAEhH7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0MACJp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,WAE9D7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,WAC7F7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,WAC7F7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,WAC7F7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,WAC7F7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,WACrG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,WACrG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,WACrG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,aAE7G,ECzBG,MAAMQ,UAAqB/9F,EAAAA,UAC9BvM,MAAAA,GACI,MAAM4pG,EAAkBrpG,KAAKlC,MAAMurG,iBAAmB,EACtD,OAAO7gG,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0OACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAEpI9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+KACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kEACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iKACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oDACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2IACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oNACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kNACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oNACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oNACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oNACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oNACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,aAG1F,EC/CG,MAAMQ,UAAsBh+F,EAAAA,UAC/BvM,MAAAA,GACI,MAAM4pG,EAAkBrpG,KAAKlC,MAAMurG,iBAAmB,EACtD,OAAO7gG,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2KACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAEpI9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACxH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iNACJ1xD,KAAK,eAAe08F,YAAaD,KAErC3pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iNACJp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAElF9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wLACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAEpI9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WACxH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6gBACJ1xD,KAAK,kBAETlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4gBACJ1xD,KAAK,kBAETlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,ygBACJ1xD,KAAK,oBAGjB,EC7BG,MAAMq9F,UAAqBj+F,EAAAA,UAC9BvM,MAAAA,GACI,MAAM4pG,EAAkBrpG,KAAKlC,MAAMurG,iBAAmB,EACtD,OAAO7gG,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,goCACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,OAAOooG,cAAc,QAAQH,eAAe,WAEpI9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,opBACJ1xD,KAAK,oBAGjB,ECZG,MAAMs9F,UAAwBl+F,EAAAA,UACjCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,cAAazM,UAC1CyI,EAAAA,EAAAA,MAAA,KAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0xD,EAAE,k9BAS5B5+D,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0xD,EAAE,wtBAO5B5+D,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0xD,EAAE,0sBAO5B5+D,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0xD,EAAE,wmDAe5B5+D,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0xD,EAAE,q4DAiB5B5+D,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0xD,EAAE,w/DAqB5C,ECjFG,MAAM6rC,UAA6Bn+F,EAAAA,UACtCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UACxCL,EAAAA,EAAAA,KAAA,KAAAK,UACIL,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0xD,EAAE,2NAI5C,ECJG,MAAM8rC,UAA0Bp+F,EAAAA,UACnCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,iBAAgBzM,UAC7CL,EAAAA,EAAAA,KAAA,KAAAK,UACIL,EAAAA,EAAAA,KAAA,QACIkN,KAAK,eACL0xD,EAAE,0jDACFqqC,UAAU,yCAK9B,EClBG,MAAM0B,UAAyBr+F,EAAAA,UAClCvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,SAAA,EAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAejN,UAAU,aAAYI,SAAA,EACzCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yFACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6KAEZ91D,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAejN,UAAU,WAAUI,SAAA,EACvCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wFACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wKAGpB,ECZG,MAAMgsC,UAAsBt+F,EAAAA,UAC/BvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+GACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,sHACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8FACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6lBAGpB,ECVG,MAAMisC,UAAiBv+F,EAAAA,UAC1BvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+xCACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4GACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2GAGpB,ECTG,MAAMksC,UAAqBx+F,EAAAA,UAC9BvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8GACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4nDAGpB,ECRG,MAAMwS,UAAiB9kE,EAAAA,UAC1BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACpBL,EAAAA,EAAAA,KAAA,KAAGipG,UAAU,qBAAoB5oG,UAC9ByI,EAAAA,EAAAA,MAAA,KAAGmgG,UAAU,kBAAiB5oG,SAAA,EAC3BL,EAAAA,EAAAA,KAAA,KAAGipG,UAAU,wBAAuB5oG,UACjCyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAe+7F,UAAU,kBAAiB5oG,SAAA,EAC/CL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wIAAwIqqC,UAAU,8BAC1JjpG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mMAAmMqqC,UAAU,gCAG3NngG,EAAAA,EAAAA,MAAA,KAAGmgG,UAAU,uBAAsB5oG,SAAA,EAChCL,EAAAA,EAAAA,KAAA,QAAMwH,OAAO,eAAeujG,GAAG,QAAQC,GAAG,QAAQ/B,UAAU,yCAC5DjpG,EAAAA,EAAAA,KAAA,QAAMwH,OAAO,eAAeyjG,GAAG,QAAQC,GAAG,QAAQjC,UAAU,kDAMhF,ECpBG,MAAM33B,UAAmBhlE,EAAAA,UAC5BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnBL,EAAAA,EAAAA,KAAA,KAAGipG,UAAU,qBAAoB5oG,UAC7BL,EAAAA,EAAAA,KAAA,KAAGipG,UAAU,wBAAuB5oG,UAChCyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAe+7F,UAAU,kBAAiB5oG,SAAA,EAC9CL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wIAAwIqqC,UAAU,8BAC1JjpG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mMAAmMqqC,UAAU,mCAM7O,ECdG,MAAMkC,UAAoB7+F,EAAAA,UAC7BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGmgG,UAAU,iCAAgC5oG,SAAA,EACzCL,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0xD,EAAE,oLAAoLqqC,UAAU,6BAC1NjpG,EAAAA,EAAAA,KAAA,UAAQkN,KAAK,eAAek+F,GAAG,QAAQC,GAAG,QAAQniE,EAAE,QAAQ+/D,UAAU,+BAItF,ECVG,MAAMp2B,UAAuBvmE,EAAAA,UAChCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACpByI,EAAAA,EAAAA,MAAA,KAAGmgG,UAAU,oCAAmC5oG,SAAA,EAC7CL,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0xD,EAAE,uJAAuJqqC,UAAU,8BAC7LjpG,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0xD,EAAE,iPAAiPqqC,UAAU,yBACvRjpG,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0xD,EAAE,qPAAqPqqC,UAAU,gCAIzS,ECXG,MAAMqC,UAAyBh/F,EAAAA,UAClCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UACxCyI,EAAAA,EAAAA,MAAA,KAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,QAAMkN,KAAM,OAAQlL,MAAM,KAAKL,OAAO,QACtC3B,EAAAA,EAAAA,KAAA,QAAMkN,KAAM,eACN0xD,EAAE,2IACFqqC,UAAU,4BAChBjpG,EAAAA,EAAAA,KAAA,QAAMkN,KAAM,eACN0xD,EAAE,kJACFqqC,UAAU,gCAIhC,ECdG,MAAMsC,UAAiCj/F,EAAAA,UAC1CvM,MAAAA,GACI,MAAM4pG,EAAkBrpG,KAAKlC,MAAMurG,iBAAmB,EACtD,OAAO7gG,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,giFACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,OAAOioG,eAAe,WAE9G9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+hFACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,OAAOioG,eAAe,WAE9G9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uiFACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,OAAOioG,eAAe,WAE9G9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kJACJ1xD,KAAK,kBAETlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+IACJ1xD,KAAK,oBAGjB,ECrBG,MAAMs+F,UAA6Bl/F,EAAAA,UACtCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UACxCyI,EAAAA,EAAAA,MAAA,KAAG+mB,GAAG,cAAc,YAAU,cAAco5E,UAAU,uBAAsB5oG,SAAA,EACxEL,EAAAA,EAAAA,KAAA,QAAM6vB,GAAG,iBAAiB,YAAU,iBAAiB7tB,MAAM,KAAKL,OAAO,KAAKsnG,UAAU,uBAAuB/7F,KAAM,eAAgBu+F,QAAQ,OAC3IzrG,EAAAA,EAAAA,KAAA,KAAG6vB,GAAG,SAASo5E,UAAU,qBAAoB5oG,UACzCL,EAAAA,EAAAA,KAAA,KAAG6vB,GAAG,cAAc,YAAU,cAAco5E,UAAU,iBAAgB5oG,UAClEyI,EAAAA,EAAAA,MAAA,KAAG+mB,GAAG,cAAc,YAAU,cAAaxvB,SAAA,EACvCL,EAAAA,EAAAA,KAAA,QAAM6vB,GAAG,YAAY,YAAU,YAAY+uC,EAAE,yKAAyKqqC,UAAU,wBAAwB/7F,KAAM,kBAC9PlN,EAAAA,EAAAA,KAAA,QAAM6vB,GAAG,YAAY,YAAU,YAAY+uC,EAAE,0RAA0RqqC,UAAU,iBAAiB/7F,KAAM,6BAOpY,ECjBG,MAAMw+F,UAAsBp/F,EAAAA,UAC/BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAEgO,WAAS,EAAA/L,UAC/BL,EAAAA,EAAAA,KAAA,QAAMipG,UAAU,iCAAiC/7F,KAAK,eAAe0xD,EAAE,kJAGlF,ECPG,MAAM+sC,UAAuBr/F,EAAAA,UAChCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAEgO,WAAS,EAAA/L,UAC/BL,EAAAA,EAAAA,KAAA,QAAMipG,UAAU,mBAAmB/7F,KAAK,eAAe0xD,EAAE,kJAGpE,E,sBCNJ,MAAMgtC,IAAenjF,EAAAA,EAAAA,IAASxqB,IAAAA,GAAAC,EAAAA,EAAAA,GAAA,2HAQxB2tG,GAAW9tG,EAAAA,GAAO+tG,EAAC1qG,IAAAA,GAAAlD,EAAAA,EAAAA,GAAA,mBACnBe,IAAA,IAAC,SAACunD,GAASvnD,EAAA,OAAKunD,GAAWrlD,EAAAA,EAAAA,IAAGe,IAAAA,GAAAhE,EAAAA,EAAAA,GAAA,6GAEiB0tG,IAC7C,EAAE,IAGJG,GAAchuG,EAAAA,GAAOiuG,KAAIvpG,IAAAA,GAAAvE,EAAAA,EAAAA,GAAA,6CAGzB+tG,GAAeluG,EAAAA,GAAO+tG,EAACnpG,IAAAA,GAAAzE,EAAAA,EAAAA,GAAA,mBACvB0E,IAAA,IAAC,SAAC4jD,GAAS5jD,EAAA,OAAK4jD,GAAWrlD,EAAAA,EAAAA,IAAG4B,IAAAA,GAAA7E,EAAAA,EAAAA,GAAA,4KAG5B,EAAE,IAEJguG,IAAuBzjF,EAAAA,EAAAA,IAASzlB,IAAAA,GAAA9E,EAAAA,EAAAA,GAAA,+HAWhCiuG,GAAkBpuG,EAAAA,GAAOiuG,KAAI/oG,IAAAA,GAAA/E,EAAAA,EAAAA,GAAA,oCAE7BkJ,IAAA,IAAC,SAACo/C,GAASp/C,EAAA,OAAKo/C,GAAWrlD,EAAAA,EAAAA,IAAG+B,IAAAA,GAAAhF,EAAAA,EAAAA,GAAA,sEACiBguG,IAC7C,EAAE,IAOH,MAAME,WAAqB9/F,EAAAA,UAC9BvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,cAAazM,SAAA,EAC1CyI,EAAAA,EAAAA,MAAA,QAAM+mB,GAAG,SAAQxvB,SAAA,EAEbL,EAAAA,EAAAA,KAAA,QAAM4Q,EAAE,IAAImrE,EAAE,IAAI/5E,MAAM,QAAQL,OAAO,QAAQuL,KAAK,WAGpDlN,EAAAA,EAAAA,KAAC+rG,GAAW,CAACvlD,SAAUlmD,KAAKlC,MAAMooD,SAC9BoY,EAAE,mPAGF1xD,KAAK,cAIbpE,EAAAA,EAAAA,MAACmjG,GAAY,CAAChsG,UAAU,gBAAgBumD,SAAUlmD,KAAKlC,MAAMooD,SAASnmD,SAAA,EAClEL,EAAAA,EAAAA,KAAA,QAAMqsG,KAAK,eAAepsG,UAAU,aAAaiN,KAAK,eAAe0xD,EAAE,wkBAMvE5+D,EAAAA,EAAAA,KAACmsG,GAAe,CAAC3lD,SAAUlmD,KAAKlC,MAAMooD,SAAUvmD,UAAU,eAAeiN,KAAK,eAAe0xD,EAAE,yUAInG91D,EAAAA,EAAAA,MAAC+iG,GAAQ,CAACrlD,SAAUlmD,KAAKlC,MAAMooD,SAASnmD,SAAA,EACpCL,EAAAA,EAAAA,KAAA,QAAMC,UAAU,GAAGiN,KAAK,eAAe0xD,EAAE,gbAIzC5+D,EAAAA,EAAAA,KAAA,QAAMC,UAAU,GAAGiN,KAAK,eAAe0xD,EAAE,4MAKzD,E,gBCjFG,MAAM0tC,WAAiBhgG,EAAAA,UAC1BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yHACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0IAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4IAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8IAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yIAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,sbAOxB,ECrBG,MAAM2tC,WAAiBjgG,EAAAA,UAC1BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAS,YAAYzM,UAC1CL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mxDAAmxD1xD,KAAK,mBAG5yD,ECPG,MAAMs/F,WAAuBlgG,EAAAA,UAChCvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAM,OAAO7M,SAAA,EACtDyI,EAAAA,EAAAA,MAAA,KAAGihG,SAAS,2BAA0B1pG,SAAA,EAClCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kPAAkPp3D,OAAO,eAAe3F,YAAY,UAAUgoG,iBAAiB,QACvT7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+IAA+Ip3D,OAAO,eAAe3F,YAAY,UAAUgoG,iBAAiB,QACpN7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0BAA0Bp3D,OAAO,eAAe3F,YAAY,UAAUgoG,iBAAiB,QAC/F7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,UAAUgoG,iBAAiB,QAChG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,UAAUgoG,iBAAiB,QAChG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0BAA0Bp3D,OAAO,eAAe3F,YAAY,UAAUgoG,iBAAiB,QAC/F7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0KAA0Kp3D,OAAO,eAAe3F,YAAY,UAAUgoG,iBAAiB,QAC/O7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4KAA4Kp3D,OAAO,eAAe3F,YAAY,UAAUgoG,iBAAiB,WAErP7pG,EAAAA,EAAAA,KAAA,QAAAK,UACIL,EAAAA,EAAAA,KAAA,YAAU6vB,GAAG,qBAAoBxvB,UAC7BL,EAAAA,EAAAA,KAAA,QAAMgC,MAAM,KAAKL,OAAO,KAAKuL,KAAK,eAAe+7F,UAAU,+BAK/E,ECrBG,MAAMwD,WAAkBngG,EAAAA,UAC3BvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAM,OAAO7M,SAAA,EACtDL,EAAAA,EAAAA,KAAA,KAAG+pG,SAAS,2BAA0B1pG,UAClCyI,EAAAA,EAAAA,MAAA,KAAGihG,SAAS,2BAA0B1pG,SAAA,EAClCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mEAAmEp3D,OAAO,eAAe3F,YAAY,MAAMooG,cAAc,QAAQH,eAAe,WACxJ9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iEAAiEp3D,OAAO,eAAe3F,YAAY,MAAMooG,cAAc,QAAQH,eAAe,WACtJ9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+DAA+Dp3D,OAAO,eAAe3F,YAAY,MAAMooG,cAAc,QAAQH,eAAe,WACpJ9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kEAAkEp3D,OAAO,eAAe3F,YAAY,MAAMooG,cAAc,QAAQH,eAAe,WACvJ9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gEAAgEp3D,OAAO,eAAe3F,YAAY,MAAMooG,cAAc,QAAQH,eAAe,WACrJ9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gNAAgNp3D,OAAO,eAAe3F,YAAY,MAAMooG,cAAc,QAAQH,eAAe,WACrS9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iNAAiNp3D,OAAO,eAAe3F,YAAY,MAAMooG,cAAc,QAAQH,eAAe,gBAG9ShhG,EAAAA,EAAAA,MAAA,QAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,YAAU6vB,GAAG,qBAAoBxvB,UAC7BL,EAAAA,EAAAA,KAAA,QAAMgC,MAAM,KAAKL,OAAO,KAAKuL,KAAK,eAAe+7F,UAAU,2BAE/DjpG,EAAAA,EAAAA,KAAA,YAAU6vB,GAAG,qBAAoBxvB,UAC7BL,EAAAA,EAAAA,KAAA,QAAMgC,MAAM,KAAKL,OAAO,KAAKuL,KAAK,eAAe+7F,UAAU,gCAK/E,ECzBG,MAAMyD,WAAqBpgG,EAAAA,UAC9BvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EACpDL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAeyiG,cAAc,WACvEjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uWAAuWp3D,OAAO,eAAeyiG,cAAc,QAAQH,eAAe,WAC1a9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,sWAAsWp3D,OAAO,eAAeyiG,cAAc,QAAQH,eAAe,WACza9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAeyiG,cAAc,WACvEjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0KAA0Kp3D,OAAO,eAAeyiG,cAAc,QAAQH,eAAe,WAC7O9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yKAAyKp3D,OAAO,eAAeyiG,cAAc,QAAQH,eAAe,aAGxP,ECZG,MAAM6C,WAAuBrgG,EAAAA,UAChCvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAG0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EACjDL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mUAAmUp3D,OAAO,kBAClVxH,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,ggHAAggH1xD,KAAK,kBAC7gHlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+VAA+V1xD,KAAK,oBAG5X,ECTG,MAAM0/F,WAAwBtgG,EAAAA,UACjCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uhBAKR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uEACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,sEACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uEACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oFACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qFACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uEACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6EACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8EACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8EACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2EACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wEACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gFAsBxB,EC3CG,MAAMiuC,WAAgBvgG,EAAAA,UACzBvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kFACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8CACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6YAIR5+D,EAAAA,EAAAA,KAAA,QAAM4Q,EAAE,IAAImrE,EAAE,QAAQ/5E,MAAM,KAAKL,OAAO,WACxC3B,EAAAA,EAAAA,KAAA,QAAM4Q,EAAE,IAAImrE,EAAE,SAAS/5E,MAAM,KAAKL,OAAO,eAYzD,ECxBG,MAAM4oG,WAAqBj+F,EAAAA,UAC9BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2JAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8JAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6IAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qJAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kJAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,m9BAuCxB,ECtDG,MAAMkuC,WAA8BxgG,EAAAA,UACvCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,ikBAKR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iGAsBxB,EChCG,MAAMsrC,WAAsB59F,EAAAA,UAC/BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wRACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qSACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wNACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qZACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+LACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+bACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6ZACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yZACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2CAIxB,ECjBG,MAAMorC,WAAqB19F,EAAAA,UAC9BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oJACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iCACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kEACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uEACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uEACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kFACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wEACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,sDACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wDACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,sDACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8DAIxB,ECtBG,MAAMmuC,WAA2BzgG,EAAAA,UACpCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yIACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0PAIxB,ECVG,MAAMouC,WAAoB1gG,EAAAA,UAC7BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8OACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qCACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0CAIxB,ECXG,MAAMquC,WAAqB3gG,EAAAA,UAC9BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qOACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uFACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yJACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,sPACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mQAIxB,ECbG,MAAMsuC,WAAwB5gG,EAAAA,UACjCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yNACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6HACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4LAIxB,ECXG,MAAMuuC,WAAoB7gG,EAAAA,UAC7BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4RAGR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yRAGR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yRAGR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8RAGR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mTAGR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qTAMxB,EC1BG,MAAMwuC,WAAwB9gG,EAAAA,UACjCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnBL,EAAAA,EAAAA,KAAA,KAAAK,UACIL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,sHAAsH1xD,KAAK,gBAInJ,ECTG,MAAMmgG,WAAwB/gG,EAAAA,UACjCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnBL,EAAAA,EAAAA,KAAA,KAAAK,UACIL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,sHAAsH1xD,KAAK,gBAInJ,ECTG,MAAMogG,WAAuBhhG,EAAAA,UAChCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wRACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qSACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wNACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qZACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+LACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+bACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6ZACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yZACR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2CAIxB,ECjBG,MAAM2uC,WAAoBjhG,EAAAA,UAC7BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,UACpDL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wyCAAwyC1xD,KAAK,mBAGj0C,ECPG,MAAMsgG,WAAqBlhG,EAAAA,UAC9BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAACsH,QAAQ,aAAgBxM,KAAKlC,OAAK,IAAAiC,UACvCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+iEAA+iE1xD,KAAK,mBAGxkE,ECPG,MAAMugG,WAAyBnhG,EAAAA,UAClCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAACsH,QAAQ,aAAgBxM,KAAKlC,OAAK,IAAAiC,UACvCyI,EAAAA,EAAAA,MAAA,KAAGtB,OAAO,eAAe3F,YAAY,MAAMioG,eAAe,QAAQ58F,KAAK,OAAM7M,SAAA,EACzEL,EAAAA,EAAAA,KAAA,QAAMwH,OAAO,OAAOo3D,EAAE,qGACtB5+D,EAAAA,EAAAA,KAAA,QAAMwH,OAAO,OAAOo3D,EAAE,8BAA8BqrC,cAAc,WAClEjqG,EAAAA,EAAAA,KAAA,QAAMwH,OAAO,OAAOyiG,cAAc,QAAQrrC,EAAE,2MAI5D,ECfG,MAAM8uC,WAAuBphG,EAAAA,UAChCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0VAIR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4lBAMR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+jBAQxB,ECvBG,MAAM+uC,WAAwBrhG,EAAAA,UACjCvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,SAAA,EACxCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mNAAmNqqC,UAAU,yBAAyB/7F,KAAM,kBACpQlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6KAA6KqqC,UAAU,2BAA2B/7F,KAAM,kBAChOlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wKAAwKqqC,UAAU,yBAAyB/7F,KAAM,kBACzNlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2QAA2QqqC,UAAU,yBAAyB/7F,KAAM,oBAGxU,ECLG,MAAM0gG,WAAmBthG,EAAAA,UAC5BvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,cAAazM,SAAA,EAC1CL,EAAAA,EAAAA,KAAA,QACI6vB,GAAG,YACP7vB,EAAAA,EAAAA,KAAA,QACI4+D,EAAE,kg4BACF1xD,KAAM,eACN2iB,GAAG,mBAGnB,ECjBG,MAAMg+E,WAAyBvhG,EAAAA,UAClCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnByI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,OAAO1F,OAAO,eAAcnH,SAAA,EAChCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6PAA6P/8D,YAAY,MAAMgoG,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WAClV9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mDAAmD/8D,YAAY,MAAMgoG,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACxI9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mLAAmL/8D,YAAY,MAAMgoG,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACxQ9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mLAAmL/8D,YAAY,MAAMgoG,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,eAIxR,ECZG,MAAMgE,WAA+BxhG,EAAAA,UACxCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYF,MAAO,GAAG,GAAGvM,UAC7DyI,EAAAA,EAAAA,MAAA,KAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mKAAmK1xD,KAAK,kBAChLlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4KAA4K1xD,KAAK,kBACzLlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0KAA0K1xD,KAAK,sBAGnM,ECRG,MAAM6gG,WAAuBzhG,EAAAA,UAChCvM,MAAAA,GACI,MAAM4pG,EAAkBrpG,KAAKlC,MAAMurG,iBAAmB,EACtD,OAAO7gG,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kNACJ1xD,KAAK,eAAe08F,YAAaD,EAAiBniG,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QAEhH7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QAC7F7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QACpG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QACpG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yBAAyBp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QAC3F7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QACpG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QACrG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uBAAuBp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QACzF7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QACrG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QACrG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yBAAyBp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QAC3F7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QACrG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QACrG7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iNACJp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QAE9D7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,KAAKI,cAAc,WACxHjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oNACJ1xD,KAAK,eAAe1F,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,QAElF7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,KAAKI,cAAc,WAChHjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,eAAe3F,YAAY,OAAOgoG,iBAAiB,KAAKI,cAAc,aAExH,EC5BG,MAAM+D,WAAmB1hG,EAAAA,UAE5BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UACxCL,EAAAA,EAAAA,KAAA,KAAGkN,KAAK,OAAM7M,UACVL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wXAAwXp3D,OAAO,eAAe3F,YAAY,UAIlb,ECPG,MAAMosG,WAA6B3hG,EAAAA,UACtCvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,SAAA,EACxCyI,EAAAA,EAAAA,MAAA,KAAGihG,SAAS,wBAAuB1pG,SAAA,EAC/BL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,q9CAAq9C1xD,KAAK,kBACl+ClN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6lBAA6lB1xD,KAAK,kBAC1mBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kaAAka1xD,KAAK,kBAC/alN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oqBAAoqB1xD,KAAK,kBACjrBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4iCAA4iC1xD,KAAK,qBAE7jClN,EAAAA,EAAAA,KAAA,QAAAK,UACIL,EAAAA,EAAAA,KAAA,YAAU6vB,GAAG,kBAAiBxvB,UAC1BL,EAAAA,EAAAA,KAAA,QAAMgC,MAAM,KAAKL,OAAO,KAAKuL,KAAK,wBAKtD,ECvBG,MAAMghG,WAAuB5hG,EAAAA,UAChCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC3CyI,EAAAA,EAAAA,MAAA,KAAGihG,SAAS,0BAA0B78F,KAAM,cAAc7M,SAAA,EACtDL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iPAAiPp3D,OAAO,eAAe3F,YAAY,MAAMooG,cAAc,QAAQH,eAAe,WACtU9pG,EAAAA,EAAAA,KAAA,QAAM6vB,GAAG,8BAA8B3iB,KAAK,eAAc7M,UACtDL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0CAEZ5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,sTAAsT1xD,KAAK,eAAem/F,KAAK,uCACvVrsG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gfAAgf1xD,KAAK,sBAG7gB,ECZG,MAAMihG,WAA2B7hG,EAAAA,UACpCvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,SAAA,EAC/CL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,spMAAspM1xD,KAAK,aACnqMlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,ykJAAykJ1xD,KAAK,eAE9lJ,ECFG,MAAMkhG,WAA2B9hG,EAAAA,UACpCvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,SAAA,EAC/CL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,84KAA84K1xD,KAAK,aAC35KlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gsHAAgsH1xD,KAAK,eAErtH,ECVG,MAAMmhG,WAA6B/hG,EAAAA,UACtCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,OAAM7M,SAAA,EACVL,EAAAA,EAAAA,KAAA,QAAMyrG,QAAQ,OAAO7sC,EAAE,wyCAAwyC1xD,KAAK,aACp0ClN,EAAAA,EAAAA,KAAA,QAAMyrG,QAAQ,OAAO7sC,EAAE,+4CAA+4C1xD,KAAK,aAC36ClN,EAAAA,EAAAA,KAAA,QAAMyrG,QAAQ,OAAO7sC,EAAE,q4CAAq4C1xD,KAAK,iBAG76C,E,gBCTG,MAAMohG,WAAoChiG,EAAAA,UAC7CvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAG0O,QAAQ,YAAYF,MAAO,GAAG,GAAGvM,SAAA,EAC9DL,EAAAA,EAAAA,KAAA,QAAM4Q,EAAE,MAAMmrE,EAAE,MAAM/5E,MAAM,KAAKL,OAAO,KAAK4sG,GAAG,MAAMrhG,KAAK,QAAQ1F,OAAO,WAC1ExH,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yIAAyI1xD,KAAK,aACtJlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oPAAoP1xD,KAAK,WACjQlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8OAA8O1xD,KAAK,WAC3PlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,45CAA45C1xD,KAAK,aACz6ClN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,i6BAAi6B1xD,KAAK,aAC96BlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,i4BAAi4B1xD,KAAK,aAC94BlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8CAA8C1xD,KAAK,aAC3DlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,45BAA45B1xD,KAAK,aACz6BlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,48CAA48C1xD,KAAK,aACz9ClN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qiBAAqiB1xD,KAAK,aACljBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,06CAA06C1xD,KAAK,eAE/7C,EChBG,MAAMshG,WAA0CliG,EAAAA,UACnDvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAG0O,QAAQ,YAAWzM,SAAA,EAChDL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yIAAyI1xD,KAAK,aACtJlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kPAAkP1xD,KAAK,WAC/PlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8OAA8O1xD,KAAK,aAEnQ,ECPG,MAAMuhG,WAAkCniG,EAAAA,UAC3CvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAG0O,QAAQ,YAAYF,MAAO,GAAG,GAAGvM,SAAA,EAC9DL,EAAAA,EAAAA,KAAA,QAAM4Q,EAAE,MAAMmrE,EAAE,MAAM/5E,MAAM,KAAKL,OAAO,KAAK4sG,GAAG,MAAMrhG,KAAK,QAAQ1F,OAAO,WAC1ExH,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,87CAA87C1xD,KAAK,aAC38ClN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,u6BAAu6B1xD,KAAK,aACp7BlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,u5BAAu5B1xD,KAAK,aACp6BlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8CAA8C1xD,KAAK,aAC3DlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,u5CAAu5C1xD,KAAK,aACp6ClN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,ucAAuc1xD,KAAK,aACpdlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,ukDAAukD1xD,KAAK,aACplDlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wiBAAwiB1xD,KAAK,aACrjBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,s8CAAs8C1xD,KAAK,aACn9ClN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,25BAA25B1xD,KAAK,aACx6BlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,idAAid1xD,KAAK,aAC9dlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oNAAoN1xD,KAAK,WACjOlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0XAA0X1xD,KAAK,aACvYlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,WAChGjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,WAC/FjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gMAAgM1xD,KAAK,aAC7MlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yIAAyI1xD,KAAK,WACtJlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yWAAyW1xD,KAAK,WACtXlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,UAAUqiG,iBAAiB,KAAII,cAAc,WACvFjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+DAA+Dp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,WAC5HjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,aAEhG,EC1BG,MAAMyE,WAAwCpiG,EAAAA,UACjDvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAG0O,QAAQ,YAAYF,MAAO,GAAG,GAAGvM,SAAA,EAC9DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uNAAuN1xD,KAAK,WACpOlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+XAA+X1xD,KAAK,aAC5YlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,WAC/FjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,WAC/FjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gMAAgM1xD,KAAK,aAC7MlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iJAAiJ1xD,KAAK,WAC9JlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yWAAyW1xD,KAAK,WACtXlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0BAA0Bp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,WACvFjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mEAAmEp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,WAChIjqG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,aAEhG,ECdG,MAAM0E,WAA+BriG,EAAAA,UACxCvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAG0O,QAAQ,YAAYF,MAAO,GAAG,GAAGvM,SAAA,EAC9DL,EAAAA,EAAAA,KAAA,QAAM4Q,EAAE,MAAMmrE,EAAE,MAAM/5E,MAAM,KAAKL,OAAO,KAAK4sG,GAAG,MAAMrhG,KAAK,QAAQ1F,OAAO,WAC1ExH,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,s7CAAs7C1xD,KAAK,aACn8ClN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gmBAAgmB1xD,KAAK,aAC7mBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,olDAAolD1xD,KAAK,aACjmDlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oDAAoD1xD,KAAK,aACjElN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uGAAuG1xD,KAAK,aACpHlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mlBAAmlB1xD,KAAK,aAChmBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+5BAA+5B1xD,KAAK,aAC56BlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+7CAA+7C1xD,KAAK,aAC58ClN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8kBAA8kB1xD,KAAK,aAC3lBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,6TAA6T1xD,KAAK,WAC1UlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4jBAA4jB1xD,KAAK,aACzkBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kEAAkEp3D,OAAO,+BAA+B3F,YAAY,IAAIgoG,iBAAiB,KAAKI,cAAc,QAAQ/8F,KAAK,WACjLlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gJAAgJ1xD,KAAK,aAC7JlN,EAAAA,EAAAA,KAAA,QAAAK,UACIyI,EAAAA,EAAAA,MAAA,kBAAgB+mB,GAAG,yBAAyBo7E,GAAG,UAAUC,GAAG,UAAUH,GAAG,UAAUC,GAAG,UAAU4D,cAAc,iBAAgBvuG,SAAA,EAC1HL,EAAAA,EAAAA,KAAA,QAAM6uG,UAAU,aAChB7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,YAAYD,UAAU,aACnC7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,SAASD,UAAU,aAChC7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,SAASD,UAAU,aAChC7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,QAAQD,UAAU,aAC/B7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,SAASD,UAAU,aAChC7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,SAASD,UAAU,aAChC7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,IAAID,UAAU,oBAI3C,EC9BG,MAAME,WAAqCziG,EAAAA,UAC9CvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAG0O,QAAQ,YAAWzM,SAAA,EAChDL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wUAAwU1xD,KAAK,WACrVlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2kBAA2kB1xD,KAAK,aACxlBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mEAAmEp3D,OAAO,+BAA+B3F,YAAY,IAAIgoG,iBAAiB,KAAKI,cAAc,QAAQ/8F,KAAK,WAClLlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mJAAmJ1xD,KAAK,aAChKlN,EAAAA,EAAAA,KAAA,QAAAK,UACIyI,EAAAA,EAAAA,MAAA,kBAAgB+mB,GAAG,yBAAyBo7E,GAAG,UAAUC,GAAG,UAAUH,GAAG,UAAUC,GAAG,UAAU4D,cAAc,iBAAgBvuG,SAAA,EAC1HL,EAAAA,EAAAA,KAAA,QAAM6uG,UAAU,aAChB7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,YAAYD,UAAU,aACnC7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,SAASD,UAAU,aAChC7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,SAASD,UAAU,aAChC7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,QAAQD,UAAU,aAC/B7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,SAASD,UAAU,aAChC7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,SAASD,UAAU,aAChC7uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,IAAID,UAAU,oBAI3C,ECpBG,MAAMG,WAAyC1iG,EAAAA,UAClDvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAG0O,QAAQ,YAAWzM,SAAA,EAChDL,EAAAA,EAAAA,KAAA,QAAM4Q,EAAE,MAAMmrE,EAAE,MAAM/5E,MAAM,KAAKL,OAAO,KAAK4sG,GAAG,MAAMrhG,KAAK,QAAQ1F,OAAO,WAC1ExH,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2BAA2Bp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WAC/G9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qCAAqCp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACzH9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iNAAiNp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACrS9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iNAAiNp3D,OAAO,UAAUqiG,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,aAE7S,ECTG,MAAMmF,WAAkC3iG,EAAAA,UAC3CvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAG0O,QAAQ,aAAcF,MAAO,IAAI,GAAGvM,SAAA,EACjEL,EAAAA,EAAAA,KAAA,QAAM4Q,EAAE,WAAWmrE,EAAE,UAAU/5E,MAAM,MAAML,OAAO,KAAK4sG,GAAG,QAAQrhG,KAAK,QAAQ1F,OAAO,aACtFsB,EAAAA,EAAAA,MAAA,KAAGihG,SAAS,uBAAsB1pG,SAAA,EAC9BL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oGAAoG1xD,KAAK,aACjHlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8oBAA8oB1xD,KAAK,cAE/pBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,y8MAAy8M1xD,KAAK,WACt9MlN,EAAAA,EAAAA,KAAA,QAAAK,UACIL,EAAAA,EAAAA,KAAA,YAAU6vB,GAAG,iBAAgBxvB,UACzBL,EAAAA,EAAAA,KAAA,QAAMgC,MAAM,KAAKL,OAAO,KAAKuL,KAAK,QAAQ+7F,UAAU,sCAIpE,ECfG,MAAMiG,WAAoB5iG,EAAAA,UAC7BvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EACtBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2WAIR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kuCAchB,ECtBG,MAAMuwC,WAA+B7iG,EAAAA,UACxCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CL,EAAAA,EAAAA,KAAA,KAAGkN,KAAK,eAAc7M,UAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mHAGpB,ECPG,MAAMwwC,WAAqB9iG,EAAAA,UAC9BvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+YAIR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wRAKpB,ECbG,MAAMywC,WAAuB/iG,EAAAA,UAChCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CL,EAAAA,EAAAA,KAAA,KAAGkN,KAAK,eAAc7M,UAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8sDAkBpB,ECtBG,MAAM0wC,WAAkBhjG,EAAAA,UAC3BvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uNAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uQAKpB,ECXG,MAAM2wC,WAA2BjjG,EAAAA,UACpCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,0SAI9C5+D,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,wUAI9C5+D,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,uTAI9C5+D,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,2UAI9C5+D,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,oKAE9C5+D,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,8IAE9C5+D,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,iOAG9C5+D,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,sbAO1D,EClCG,MAAM4wC,WAAkBljG,EAAAA,UAC3BvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2KAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,0SAKpB,ECXG,MAAM6wC,WAA0BnjG,EAAAA,UACnCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,24BAQR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,s4BAUpB,ECtBG,MAAM8wC,WAA4BpjG,EAAAA,UACrCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,ocAIR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gZAMpB,ECdG,MAAM+wC,WAA2BrjG,EAAAA,UACpCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4QAGR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uoFAyBR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uQAKpB,ECrCG,MAAMgxC,WAA8BtjG,EAAAA,UACvCvM,MAAAA,GACI,OAAOC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UAC/CyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,gnBAMR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mJAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4IAER5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mbAIR5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,yuBASpB,EC3BG,MAAMixC,WAAyBvjG,EAAAA,UAElCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UACxCyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,eAAc7M,SAAA,EAClBL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4QAGR5+D,EAAAA,EAAAA,KAAA,WAAS8oG,OAAO,oHAIhC,ECbG,MAAMgH,WAAmBxjG,EAAAA,UAE5BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,UACxCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+3BAIJ1xD,KAAK,mBAIrB,ECbG,MAAM6iG,WAAyBzjG,EAAAA,UAElCvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,SAAA,EACxCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,giBAAgiB1xD,KAAK,eAAe1F,OAAO,eAAe3F,YAAY,UACjmB7B,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2PAA2P1xD,KAAK,eAAe1F,OAAO,eAAe3F,YAAY,YAGlU,ECLG,MAAMmuG,WAAqB1jG,EAAAA,UAC9BvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE8O,KAAM5M,KAAKlC,MAAM6xG,WAAa,QAAU,cAAenjG,QAAQ,YAAWzM,SAAA,EACtGL,EAAAA,EAAAA,KAAA,QAAM6vB,GAAG,oBAAqBqgF,UAAU,iBAAiBt/F,EAAE,IAAImrE,EAAE,IAAI/5E,MAAM,KAAKL,OAAO,KAAItB,UACvFL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kBAAkB1xD,KAAK,aAEnClN,EAAAA,EAAAA,KAAA,KAAGqsG,KAAK,0BAAyBhsG,UAC7BL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2iBAA2iBp3D,OAAO,QAAQ3F,YAAY,IAAIgoG,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,eAGzpB,ECdG,MAAMqG,WAAsB7jG,EAAAA,UAC/BvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAM,OAAO7M,SAAA,EACtDyI,EAAAA,EAAAA,MAAA,KAAGihG,SAAS,2BAA0B1pG,SAAA,EAClCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,qNAAqNp3D,OAAO,eAAeyiG,cAAc,QAAQH,eAAe,WACxR9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iNAAiNp3D,OAAO,eAAeyiG,cAAc,QAAQH,eAAe,WACpR9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kNAAkNp3D,OAAO,eAAeyiG,cAAc,QAAQH,eAAe,WACrR9pG,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,gIAAgIp3D,OAAO,eAAeyiG,cAAc,QAAQH,eAAe,cAE7O9pG,EAAAA,EAAAA,KAAA,QAAAK,UACIL,EAAAA,EAAAA,KAAA,YAAU6vB,GAAG,qBAAoBxvB,UAC7BL,EAAAA,EAAAA,KAAA,QAAMgC,MAAM,OAAOL,OAAO,KAAKuL,KAAK,eAAe+7F,UAAU,8BAKjF,E,gBCjBG,MAAMmH,WAA4B9jG,EAAAA,UACrCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,UAASzM,UACtCL,EAAAA,EAAAA,KAAA,UAAQorG,GAAG,IAAIC,GAAG,IAAIniE,EAAE,IAAIh8B,KAAK,cAG7C,ECPG,MAAMmjG,WAAkB/jG,EAAAA,UAC3BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE8O,KAAK,OAAM7M,UAChCyI,EAAAA,EAAAA,MAAA,KAAGtB,OAAO,eAAe3F,YAAY,MAAMooG,cAAc,SAAQ5pG,SAAA,EAC7DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wLAAwLirC,iBAAiB,WACjN7pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uBAAuBkrC,eAAe,WAC9C9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,uCAAuCirC,iBAAiB,eAIhF,ECXG,MAAMyG,WAAoBhkG,EAAAA,UAC7BvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,KAAG+pG,SAAS,2BAA0B1pG,UAClCyI,EAAAA,EAAAA,MAAA,KAAGiX,OAAO,+BAA8B1f,SAAA,EACpCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oJAAoJp3D,OAAO,QAAQ3F,YAAY,UAAUooG,cAAc,QAAQH,eAAe,WACtO9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oEAAoEp3D,OAAO,QAAQ3F,YAAY,UAAUooG,cAAc,QAAQH,eAAe,WACtJ9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2GAA2Gp3D,OAAO,QAAQ3F,YAAY,UAAUooG,cAAc,QAAQH,eAAe,WAC7L9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mHAAmHp3D,OAAO,QAAQ3F,YAAY,UAAUooG,cAAc,QAAQH,eAAe,gBAG7MhhG,EAAAA,EAAAA,MAAA,QAAAzI,SAAA,EACIyI,EAAAA,EAAAA,MAAA,UAAQ+mB,GAAG,yBAAyBjf,EAAE,KAAKmrE,EAAE,KAAK/5E,MAAM,KAAKL,OAAO,UAAU4uG,YAAY,iBAAiBC,0BAA0B,OAAMnwG,SAAA,EACvIL,EAAAA,EAAAA,KAAA,WAASywG,aAAa,IAAIz6C,OAAO,wBACjCh2D,EAAAA,EAAAA,KAAA,iBAAe0wG,GAAG,cAAc3mG,KAAK,SAASo6C,OAAO,4CAA4C6R,OAAO,eACxGh2D,EAAAA,EAAAA,KAAA,gBACAA,EAAAA,EAAAA,KAAA,kBAAgB2wG,aAAa,OAC7B3wG,EAAAA,EAAAA,KAAA,eAAa4wG,IAAI,YAAYC,SAAS,SACtC7wG,EAAAA,EAAAA,KAAA,iBAAe+J,KAAK,SAASo6C,OAAO,+CACpCnkD,EAAAA,EAAAA,KAAA,WAAS8wG,KAAK,SAASF,IAAI,qBAAqB56C,OAAO,qCACvDh2D,EAAAA,EAAAA,KAAA,WAAS8wG,KAAK,SAASJ,GAAG,gBAAgBE,IAAI,kCAAkC56C,OAAO,cAE3Fh2D,EAAAA,EAAAA,KAAA,YAAU6vB,GAAG,qBAAoBxvB,UAC7BL,EAAAA,EAAAA,KAAA,QAAMgC,MAAM,KAAKL,OAAO,KAAKuL,KAAK,kBAIlD,EC3BG,MAAM6jG,WAAqBzkG,EAAAA,UAC9BvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,KAAG+pG,SAAS,2BAA0B1pG,UAClCyI,EAAAA,EAAAA,MAAA,KAAGiX,OAAO,+BAA8B1f,SAAA,EACpCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oJAAoJp3D,OAAO,QAAQ3F,YAAY,UAAUooG,cAAc,QAAQH,eAAe,WACtO9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oEAAoEp3D,OAAO,QAAQ3F,YAAY,UAAUooG,cAAc,QAAQH,eAAe,WACtJ9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,2GAA2Gp3D,OAAO,QAAQ3F,YAAY,UAAUooG,cAAc,QAAQH,eAAe,WAC7L9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mHAAmHp3D,OAAO,QAAQ3F,YAAY,UAAUooG,cAAc,QAAQH,eAAe,WACrM9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAO,QAAQ3F,YAAY,IAAIooG,cAAc,gBAGhGnhG,EAAAA,EAAAA,MAAA,QAAAzI,SAAA,EACIyI,EAAAA,EAAAA,MAAA,UAAQ+mB,GAAG,yBAAyBjf,EAAE,KAAKmrE,EAAE,KAAK/5E,MAAM,UAAUL,OAAO,UAAU4uG,YAAY,iBAAiBC,0BAA0B,OAAMnwG,SAAA,EAC5IL,EAAAA,EAAAA,KAAA,WAASywG,aAAa,IAAIz6C,OAAO,wBACjCh2D,EAAAA,EAAAA,KAAA,iBAAe0wG,GAAG,cAAc3mG,KAAK,SAASo6C,OAAO,4CAA4C6R,OAAO,eACxGh2D,EAAAA,EAAAA,KAAA,gBACAA,EAAAA,EAAAA,KAAA,kBAAgB2wG,aAAa,OAC7B3wG,EAAAA,EAAAA,KAAA,eAAa4wG,IAAI,YAAYC,SAAS,SACtC7wG,EAAAA,EAAAA,KAAA,iBAAe+J,KAAK,SAASo6C,OAAO,+CACpCnkD,EAAAA,EAAAA,KAAA,WAAS8wG,KAAK,SAASF,IAAI,qBAAqB56C,OAAO,qCACvDh2D,EAAAA,EAAAA,KAAA,WAAS8wG,KAAK,SAASJ,GAAG,gBAAgBE,IAAI,kCAAkC56C,OAAO,cAE3Fh2D,EAAAA,EAAAA,KAAA,YAAU6vB,GAAG,qBAAoBxvB,UAC7BL,EAAAA,EAAAA,KAAA,QAAMgC,MAAM,KAAKL,OAAO,KAAKuL,KAAK,kBAIlD,EC5BG,MAAM8jG,WAAuB1kG,EAAAA,UAChCvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,SAAA,EAC/CL,EAAAA,EAAAA,KAAA,KAAG+pG,SAAS,0BAAyB1pG,UACjCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,srCAAsrC1xD,KAAK,oBAEvsClN,EAAAA,EAAAA,KAAA,QAAAK,UACIL,EAAAA,EAAAA,KAAA,YAAU6vB,GAAG,oBAAmBxvB,UAC5BL,EAAAA,EAAAA,KAAA,QAAMgC,MAAM,KAAKL,OAAO,KAAKuL,KAAK,QAAQ+7F,UAAU,mCAIpE,ECVG,MAAMgI,WAA0B3kG,EAAAA,UAEnCvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,SAAA,EACxCL,EAAAA,EAAAA,KAAA,QAAM6vB,GAAG,8BAA8B3iB,KAAK,eAAc7M,UACtDL,EAAAA,EAAAA,KAAA,QAAM,YAAU,UAAU,YAAU,UAAU4+D,EAAE,i9FAEpD5+D,EAAAA,EAAAA,KAAA,KAAG+f,OAAO,8BAA6B1f,UACnCL,EAAAA,EAAAA,KAAA,QAAM,YAAU,UAAU,YAAU,UAAU4+D,EAAE,48FAA48F1xD,KAAK,kCAAkC,eAAa,WAEpjGlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,ooZAAooZ1xD,KAAK,eAAem/F,KAAK,uCACrqZrsG,EAAAA,EAAAA,KAAA,QAAM6vB,GAAG,8BAA8B3iB,KAAK,eAAc7M,UACtDL,EAAAA,EAAAA,KAAA,QAAM,YAAU,UAAU,YAAU,UAAU4+D,EAAE,i9FAEpD5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,ooZAAooZ1xD,KAAK,eAAem/F,KAAK,uCACrqZrsG,EAAAA,EAAAA,KAAA,UAAQorG,GAAG,UAAUC,GAAG,UAAUniE,EAAE,UAAUh8B,KAAK,kBACnDlN,EAAAA,EAAAA,KAAA,UAAQorG,GAAG,UAAUC,GAAG,UAAUniE,EAAE,UAAUh8B,KAAK,kBACnDlN,EAAAA,EAAAA,KAAA,QAAM6vB,GAAG,8BAA8B3iB,KAAK,eAAc7M,UACtDL,EAAAA,EAAAA,KAAA,QAAM,YAAU,UAAU,YAAU,UAAU4+D,EAAE,o8CAEpD5+D,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,8rMAA8rM1xD,KAAK,kCAAkCm/F,KAAK,uCAClvMvjG,EAAAA,EAAAA,MAAA,QAAAzI,SAAA,EACIyI,EAAAA,EAAAA,MAAA,UAAQ+mB,GAAG,wBAAwBjf,EAAE,IAAImrE,EAAE,IAAI/5E,MAAM,KAAKL,OAAO,KAAK4uG,YAAY,iBAAiBC,0BAA0B,OAAMnwG,SAAA,EAC/HL,EAAAA,EAAAA,KAAA,WAASywG,aAAa,IAAIz6C,OAAO,wBACjCh2D,EAAAA,EAAAA,KAAA,WAAS8wG,KAAK,SAASJ,GAAG,gBAAgBE,IAAI,qBAAqB56C,OAAO,WAC1Eh2D,EAAAA,EAAAA,KAAA,iBAAe0wG,GAAG,cAAc3mG,KAAK,SAASo6C,OAAO,4CAA4C6R,OAAO,eACxGh2D,EAAAA,EAAAA,KAAA,gBACAA,EAAAA,EAAAA,KAAA,kBAAgB2wG,aAAa,SAC7B3wG,EAAAA,EAAAA,KAAA,eAAa4wG,IAAI,YAAYC,SAAS,aAAaK,GAAG,KAAKC,GAAG,OAC9DnxG,EAAAA,EAAAA,KAAA,iBAAe+J,KAAK,SAASo6C,OAAO,gDACpCnkD,EAAAA,EAAAA,KAAA,WAAS8wG,KAAK,SAASF,IAAI,QAAQ56C,OAAO,wCAE9CltD,EAAAA,EAAAA,MAAA,kBAAgB+mB,GAAG,4BAA4Bo7E,GAAG,IAAIC,GAAG,KAAKH,GAAG,OAAOC,GAAG,IAAI4D,cAAc,iBAAgBvuG,SAAA,EACzGL,EAAAA,EAAAA,KAAA,QAAM,aAAW,aACjBA,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,QAAQ,aAAW,aAChC9uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,OAAO,aAAW,gBAEnChmG,EAAAA,EAAAA,MAAA,kBAAgB+mB,GAAG,4BAA4Bo7E,GAAG,IAAIC,GAAG,KAAKH,GAAG,OAAOC,GAAG,IAAI4D,cAAc,iBAAgBvuG,SAAA,EACzGL,EAAAA,EAAAA,KAAA,QAAM,aAAW,aACjBA,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,OAAO,aAAW,aAC/B9uG,EAAAA,EAAAA,KAAA,QAAM8uG,OAAO,MAAM,aAAW,qBAKlD,E,sCC5CG,MAAMjmE,WAA4Bv8B,EAAAA,UACrCvM,MAAAA,GACI,MAAA2L,EAA8BpL,KAAKlC,OAA7B,SAAEgzG,GAAmB1lG,EAAN2lG,GAAItpG,EAAAA,GAAAA,GAAA2D,EAAA1D,IACzB,OACIc,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAK6rG,GAAI,IAAEvkG,QAAS,YAAaI,KAAM,OAAO7M,SAAA,EAClDL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4MAA4M1xD,KAAK,kBACzNlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACrK9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+BAA+Bp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACjK9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACrK9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+BAA+Bp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACjK9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oCAAoCp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACtK9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACrK9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACrK9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACrK9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,kCAAkCp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACpK9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACrK9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oCAAoCp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,WACtK9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,mCAAmCp3D,OAAQlH,KAAKlC,MAAMgzG,SAAW9wG,KAAKlC,MAAMgzG,SAAW,UAAWvH,iBAAiB,KAAKI,cAAc,QAAQH,eAAe,aAGjL,ECpBG,MAAMwH,WAA8BhlG,EAAAA,UACvCvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,UACpDyI,EAAAA,EAAAA,MAAA,KAAGihG,SAAS,2BAA0B1pG,SAAA,EAClCL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,slCAAslC1xD,KAAK,kBACnmClN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,sKAAsK1xD,KAAK,sBAInM,ECbG,MAAMqkG,WAA4BjlG,EAAAA,UACrCvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,SAAA,EAC3DL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+rBAA+rB1xD,KAAK,eAAe,eAAa,SACxuBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+WAA+W1xD,KAAK,eAAe,eAAa,SACxZlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,+rBAA+rB1xD,KAAK,kBAC5sBlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oDAAoD1xD,KAAK,kBACjElN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,oFAAoF1xD,KAAK,oBAEzG,ECVG,MAAMskG,WAAqBllG,EAAAA,UAC9BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAYI,KAAK,OAAM7M,UACpDyI,EAAAA,EAAAA,MAAA,KAAAzI,SAAA,EACIL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4zPAA4zP1xD,KAAK,kBACz0PlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,4cAA4c1xD,KAAK,kBACzdlN,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iaAAia1xD,KAAK,sBAI9b,EC+FG,MAAMo5C,GAAiC,CAC1CmrD,eAAgBvD,GAChBwD,uBAAwB5D,GACxB6D,eAAgBjJ,EAChBrlD,QAASwlD,EACTz1E,SAAUD,EAAAA,EACVmwB,SAAUylD,EACVjlC,YAAaklC,EACbl1E,UAAWD,EACX+9E,kBAAmB1I,EACnB2I,mBAAoBzD,GACpB0D,mBAAoB3D,GACpB4D,oBAAqBC,GAAAA,EACrBC,qBAAsB5D,GACtB6D,SAAU/I,EACVgJ,aAAc9I,EACd+I,eAAgB3I,EAChB4I,oBAAqBd,GACrBe,aAAc5I,EACd6I,aAAcvI,EACdwI,cAAetI,EACfuI,gBAAiBtI,EACjBuI,UAAWtI,EACXuI,aAActI,EACduI,cAAetI,EACfuI,aAActI,EACduI,gBAAiBtI,EACjBuI,qBAAsBtI,EACtBuI,kBAAmBtI,EACnBuI,iBAAkBtI,EAClBuI,cAAetI,EACfuI,SAAUtI,EACV3nD,aAAc4nD,EACdz5B,SAAUD,EACVgiC,gBAAiBhD,GACjB7+B,WAAYD,EACZ+hC,YAAalI,EACbr4B,eAAgBD,EAChBygC,2BAA4BhI,EAC5BiI,yBAA0BhI,EAC1BiI,qBAAsBhI,EACtBiI,cAAe/H,EACfz/F,eAAgB0/F,EAChB+H,aAActH,GACdlhE,WAAYD,GAAAA,EACZ0oE,aAAcpH,GACdqH,aAActH,GACduH,mBAAoBrH,GACpBsH,cAAerH,GACfsH,iBAAkBrH,GAClBsH,mBAAoBrH,GACpBsH,YAAapH,GACbqH,iBAAkBC,GAClBC,oBAAqBxH,GACrByH,qBAAsBvH,GACtBwH,qBAAsBzG,GACtB0G,kBAAmBC,GACnBC,iBAAkBC,GAClBC,uBAAwB5H,GACxB6H,gBAAiB5H,GACjB6H,iBAAkB5H,GAClB6H,oBAAqB5H,GACrB6H,gBAAiB5H,GACjB6H,oBAAqB5H,GACrB6H,oBAAqB5H,GACrB6H,mBAAoB5H,GACpB6H,gBAAiB5H,GACjB6H,kBAAmBjF,GACnBkF,sBAAuBC,GAAAA,EACvBC,iBAAkB9H,GAClB+H,aAAchI,GACdiI,eAAgB/H,GAChB1kD,gBAAiB2kD,GACjB+H,WAAY9H,GACZ+H,WAAY5H,GACZ6H,WAAY5H,GACZ6H,qBAAsB5H,GACtBvuC,4BAA6B4uC,GAC7B1uC,kCAAmC4uC,GACnCjuC,0BAA2BkuC,GAC3BhuC,gCAAiCiuC,GACjC7tC,uBAAwB8tC,GACxB5tC,6BAA8BguC,GAC9B+G,iCAAkC9G,GAClCvwC,0BAA2BwwC,GAC3B8G,YAAa7G,GACb8G,aAAcvG,GACdwG,uBAAwB9G,GACxB+G,aAAc9G,GACd+G,eAAgB9G,GAChB+G,UAAW9G,GACX+G,mBAAoB9G,GACpB+G,UAAW9G,GACX+G,kBAAmB9G,GACnB+G,oBAAqB9G,GACrB+G,mBAAoB9G,GACpB+G,sBAAuB9G,GACvB+G,aAAc9G,GACd+G,OAAQ9G,GACR+G,aAAc9G,GACd+G,aAAc9G,GACd+G,UAAW1G,GACX2G,YAAa1G,GACb2G,aAAclG,GACdmG,eAAgBlG,GAChBmG,kBAAmBlG,GACnBnoE,oBAAqBD,GACrBuuE,sBAAuB9F,GACvB+F,aAAc7F,G,gGCjNX,MAAMr+E,UAAiB7mB,EAAAA,UAC1BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAAiC,UACnBL,EAAAA,EAAAA,KAAA,KAAAK,UACIL,EAAAA,EAAAA,KAAA,QACIkN,KAAK,eACL0xD,EAAE,gjBAKtB,E,gGCZG,MAAM3zB,UAAmB3+B,EAAAA,UAC5BvM,MAAAA,GACI,OACIC,EAAAA,EAAAA,KAACqM,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAEgO,WAAS,EAACU,QAAQ,YAAWzM,UAClDyI,EAAAA,EAAAA,MAAA,KAAGoE,KAAK,OAAM7M,SAAA,EACVL,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,wLAAwLp3D,OAAO,eAAe3F,YAAY,IAAIooG,cAAc,QAAQH,eAAe,WAC3Q9pG,EAAAA,EAAAA,KAAA,QAAM4+D,EAAE,iCAAiCp3D,OAAO,eAAe3F,YAAY,IAAIooG,cAAc,SAASH,eAAe,eAIrI,E,gGCfG,MAAMwL,UAA0BhpG,EAAAA,UACnCvM,MAAAA,GACI,OACI+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAE0O,QAAQ,YAAWzM,SAAA,EACpCyI,EAAAA,EAAAA,MAAA,QAAM+mB,GAAG,gCAAgCqgF,UAAU,iBAAiBt/F,EAAE,YAAYmrE,EAAE,IAAI/5E,MAAM,KAAKL,OAAO,KAAKuL,KAAK,OAAM7M,SAAA,EACtHL,EAAAA,EAAAA,KAAA,QAAMkN,KAAK,eAAe0D,EAAE,YAAY5O,MAAM,KAAKL,OAAO,QAC1D3B,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,o3MAElD5+D,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,82MAA82M1xD,KAAK,kBACj6MlN,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,82MAA82Mp3D,OAAO,eAAe3F,YAAY,MAAMioG,eAAe,QAAQuC,KAAK,2CAGh/M,E,0ECbG,MAAMp7C,GAAUzrD,EAAAA,EAAAA,GAAA,CACnB8xG,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbC,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbC,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbC,OAAQ,UACRC,eAAgB,UAChBznC,WAAY,UACZ0nC,YAAa,UAGbC,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEb/2C,eAAgB,WAEb8kC,EAAAA,E,0EC7BA,MAAMt1C,GAAUzrD,EAAAA,EAAAA,GAAA,CACnB8xG,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbC,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbC,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbQ,cAAe,WAEZlS,EAAAA,E,0EClBA,MAAMt1C,GAAUzrD,EAAAA,EAAAA,GAAA,CACnB8xG,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbC,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbC,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAGbC,OAAQ,UACRC,eAAgB,UAChBznC,WAAY,UACZ0nC,YAAa,WAEV7R,EAAAA,E,0ECtBA,MAAMt1C,GAAUzrD,EAAAA,EAAAA,GAAA,CACnB8xG,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbC,OAAQ,UACRC,eAAgB,GAChBC,WAAY,GACZC,YAAa,GAEbC,OAAQ,UACRC,eAAgB,GAChBC,WAAY,GACZC,YAAa,GAEbC,OAAQ,mEACRG,OAAQ,UACRK,KAAM,UACNC,OAAQ,UACRC,UAAW,aACRrS,EAAAA,E,gGCpBA,MAAMyL,UAA4B1lG,EAAAA,UACrCvM,MAAAA,GACI,OAAO+I,EAAAA,EAAAA,MAACuD,EAAAA,GAAO7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAG0O,QAAQ,YAAWzM,SAAA,EAChDL,EAAAA,EAAAA,KAAA,QAAMyrG,QAAQ,OAAO7sC,EAAE,80BAA80B1xD,KAAK,kBAC12BlN,EAAAA,EAAAA,KAAA,QAAM2oG,SAAS,UAAUC,SAAS,UAAUhqC,EAAE,6xKAA6xK1xD,KAAK,oBAEx1K,E,0ECPG,MAAM+jD,GAAUzrD,EAAAA,EAAAA,GAAA,CACnB8xG,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbC,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbC,OAAQ,UACRC,eAAgB,UAChBC,WAAY,UACZC,YAAa,UAEbC,OAAQ,WAEL3R,EAAAA,E,+BCpBA,SAAS30F,EAAUvN,GAA2C,IAA9BonG,EAAelrG,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EACrD,IAAI+vE,EACJ,GAAG,2BAA2BvY,KAAK1zD,GAM/B,OAJgB,KADhBisE,EAAIjsE,EAAIyB,UAAU,GAAGH,MAAM,KACtBnF,SACD8vE,EAAI,CAACA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAGlC,QAAQ,EADfA,EAAI,KAAKA,EAAEvqE,KAAK,MACI,GAAI,IAAMuqE,GAAG,EAAG,IAAO,IAAFA,GAAOvqE,KAAK,KAAK,IAAM0lG,EAAS,IAE7E,MAAM,IAAIl7B,MAAM,qBACpB,C,qPCXO,MAAMsoC,EAAyB,gBACzBC,EAAyB,gBACzBC,EAAqC,2BACrCC,EAAmC,qBACnCC,EAAqC,0BACrCC,EAA+B,0BAC/BC,EAAiC,oBACjCC,EAAiC,yBACjCC,EAA4B,gBAC5BC,EAA2C,2BAC3CC,EAAwC,yBACxCC,EAAiC,4BACjCC,EAAmD,gCACnDC,EAA2C,2BAC3CC,EAA2B,YAI3BC,EAA+B,sBAC/BC,EAA0B,mBAI1BC,EAAiC,iBAEjCC,EAAiC,kBAEjCC,EAAiC,iBAEjCC,EAA2B,Y,+BC7BjC,IAAKC,E,iBAIX,SAJWA,GAAAA,EAAAA,EAAY,2BAAZA,EAAAA,EAAY,eAAZA,EAAAA,EAAY,+BAIvB,CAJWA,IAAAA,EAAY,I,8FCAjB,MAAMrkF,EAAiB,CAC1BC,aAAc,gBACdqkF,oBAAqB,wBACrBC,IAAK,MACLC,UAAW,aACXC,gBAAiB,mBACjBC,aAAc,eACdC,YAAa,eACbC,cAAe,iBACfC,iBAAkB,qBAClBC,YAAa,eACbC,KAAM,OACNC,YAAa,cACblrE,QAAS,UACTmrE,oBAAqB,wBAGZ1lF,EAAmB,CAC5B6a,cAAe,iBACf8qE,eAAgB,kBAChBC,sBAAuB,0BACvB5d,yBAA0B,6BAC1B6d,YAAa,eACbC,WAAY,cACZC,SAAU,YACV9lF,SAAU,YACVC,aAAc,gBACd8lF,0BAA2B,yBAC3BC,qBAAsB,yBACtBrgB,wBAAyB,uBACzBsgB,uBAAwB,4BACxBn7C,sBAAuB,2BACvBo7C,UAAW,aACX3jD,cAAe,iBACfs8B,eAAgB,mBAGPsnB,EAAsB,CAC/BC,YAAa,IACbC,wBAAyB,IACzBC,sBAAuB,IACvBC,kBAAmB,IACnBC,kBAAmB,IACnBC,eAAgB,IAChBC,cAAe,IACfC,6BAA8B,IAC9BC,YAAa,IACbC,aAAc,IACdC,oBAAqB,IACrBC,wBAAyB,IACzBC,0BAA2B,IAC3BC,uBAAwB,IACxBC,oBAAqB,IACrBC,eAAgB,IAChBC,SAAU,IACVC,gBAAiB,KAGd,SAASC,EAAsBC,GAClC,OAAQA,GACJ,KAAKpB,EAAoBkB,gBACrB,MAAO,kBACX,KAAKlB,EAAoBY,wBACrB,MAAO,0BACX,KAAKZ,EAAoBa,0BACrB,MAAO,4BACX,KAAKb,EAAoBc,uBACrB,MAAO,yBACX,KAAKd,EAAoBe,oBACrB,MAAO,sBACX,KAAKf,EAAoBgB,eACrB,MAAO,iBACX,KAAKhB,EAAoBiB,SACrB,MAAO,WACX,QACI,MAAO,GAEnB,CAEO,MAAMI,EAAwB,CACjCC,gCAAiC,2BACjCC,gCAAiC,2BACjCC,4BAA6B,qBAC7BC,0BAA2B,uBAC3BC,0BAA2B,cAC3BC,mCAAoC,eACpCC,cAAe,gBAGNC,EAAqB,CAC9BC,eAAgB,UAChBC,cAAe,S,+BC3FZ,IAAKn8E,E,iBAKX,SALWA,GAAAA,EAAgB,aAAhBA,EAAgB,aAAhBA,EAAgB,oBAAhBA,EAAgB,oBAK3B,CALWA,IAAAA,EAAgB,I,+BCArB,IAAK0zD,E,iBAyBX,SAzBWA,GAAAA,EAAAA,EAAU,qBAAVA,EAAAA,EAAU,wBAAVA,EAAAA,EAAU,8BAAVA,EAAAA,EAAU,0BAAVA,EAAAA,EAAU,sCAAVA,EAAAA,EAAU,kBAAVA,EAAAA,EAAU,sCAAVA,EAAAA,EAAU,iCAAVA,EAAAA,EAAU,mBAAVA,EAAAA,EAAU,gBAAVA,EAAAA,EAAU,+BAAVA,EAAAA,EAAU,kCAAVA,EAAAA,EAAU,mBAAVA,EAAAA,EAAU,iDAAVA,EAAAA,EAAU,mBAAVA,EAAAA,EAAU,0CAAVA,EAAAA,EAAU,wBAAVA,EAAAA,EAAU,mCAAVA,EAAAA,EAAU,iCAAVA,EAAAA,EAAU,gBAAVA,EAAAA,EAAU,4BAAVA,EAAAA,EAAU,8BAAVA,EAAAA,EAAU,kDAAVA,EAAAA,EAAU,6BAyBrB,CAzBWA,IAAAA,EAAU,I,+BCAf,IAAK98C,EASAtG,EAaAiH,E,oCAfX,SAPWX,GAAAA,EAAAA,EAAiB,mBAAjBA,EAAAA,EAAiB,0BAAjBA,EAAAA,EAAiB,sCAAjBA,EAAAA,EAAiB,uCAAjBA,EAAAA,EAAiB,wDAO5B,CAPWA,IAAAA,EAAiB,KAoB5B,SAXWtG,GAAAA,EAAW,cAAXA,EAAW,oBAAXA,EAAW,oBAAXA,EAAW,cAAXA,EAAW,gCAAXA,EAAW,oCAAXA,EAAW,mCAAXA,EAAW,cAAXA,EAAW,8BAAXA,EAAW,0BAWtB,CAXWA,IAAAA,EAAW,KAkBtB,SALWiH,GAAAA,EAAAA,EAAa,eAAbA,EAAAA,EAAa,qBAAbA,EAAAA,EAAa,aAAbA,EAAAA,EAAa,uBAKxB,CALWA,IAAAA,EAAa,I,gDCtBzB,MAUA,EAVkB,CACd6kE,uBAAyB,kBACzBC,gDAAiD,2BACjDC,6BAA8B,aAC9BC,mCAAoC,mBACpCC,4BAA6B,cAC7BC,oCAAqC,SACrCC,8BAA+B,yB,+BCN5B,IAAKC,E,iBAIX,SAJWA,GAAAA,EAAAA,EAAuC,mBAAvCA,EAAAA,EAAuC,yCAAvCA,EAAAA,EAAuC,uBAIlD,CAJWA,IAAAA,EAAuC,I,gDCA5C,MAAMC,EAAwC,mB,gDCDrD,MAAMC,EAAsB,CACxBC,SAAU,WACVC,uBAAwB,yBACxBC,qBAAsB,uB,+BCHnB,IAAK/8F,E,iBAIX,SAJWA,GAAAA,EAAW,YAAXA,EAAW,cAAXA,EAAW,YAItB,CAJWA,IAAAA,EAAW,I,8BCsYhB,SAASjhB,EAAQH,GACpB,OAAOA,EAAUR,UACrB,CAEO,SAAS4+G,EAAWp+G,GACvB,MAAO,IAAMA,EAAUR,UAC3B,C,yDC5YO,IAAKiuF,E,iBAMX,SANWA,GAAAA,EAAAA,EAAoB,mCAApBA,EAAAA,EAAoB,2CAApBA,EAAAA,EAAoB,mDAApBA,EAAAA,EAAoB,iDAApBA,EAAAA,EAAoB,yDAM/B,CANWA,IAAAA,EAAoB,I,+BCEzB,IAAK4wB,E,iBAGX,SAHWA,GAAAA,EAAAA,EAAQ,iCAARA,EAAAA,EAAQ,2BAGnB,CAHWA,IAAAA,EAAQ,I,gECApB,SAASC,EAAS3mB,GACd,OAAOv3D,SAASu3D,EAAG,GACvB,CAEA,SAAS4mB,EAASC,GACd,IAAI7mB,EAAI6mB,EAAEh/G,SAAS,IACnB,OAAiB,IAAbm4F,EAAEp3F,OACK,IAAMo3F,EAEVA,CACX,CAEA,SAAS8mB,EAAMt0G,EAAe8W,EAAamzB,GACvC,OAAO19B,KAAKuK,IAAIvK,KAAK09B,IAAIjqC,EAAO8W,GAAMmzB,EAC1C,CAGO,SAASsqE,EAASz1E,EAAW4iE,EAAW8S,GAE3C11E,GAAQ,IACR4iE,GAAQ,IACR8S,GAAQ,IAGR,IAAIC,EAAOloG,KAAKuK,IAAIgoB,EAAE4iE,EAAE8S,GACpBE,EAAOnoG,KAAK09B,IAAInL,EAAE4iE,EAAE8S,GACpBG,EAAQD,EAAOD,EACfjnB,EAAI,EACJonB,EAAI,EACJC,EAAI,EAiCR,OA5BArnB,EADc,IAAVmnB,EACA,EAEKD,IAAS51E,GACZ4iE,EAAI8S,GAAKG,EAAS,EAEfD,IAAShT,GACb8S,EAAI11E,GAAK61E,EAAQ,GAGjB71E,EAAI4iE,GAAKiT,EAAQ,EAEtBnnB,EAAIjhF,KAAKsD,MAAU,GAAJ29E,GAGXA,EAAI,IACJA,GAAK,KAGTqnB,GAAKH,EAAOD,GAAQ,EAGpBG,EAAc,IAAVD,EAAc,EAAIA,GAAS,EAAIpoG,KAAKuoG,IAAI,EAAID,EAAI,IAGpDD,IAAU,IAAJA,GAASG,QAAQ,GACvBF,IAAU,IAAJA,GAASE,QAAQ,GAGhB,CACHC,IAAKxnB,EACLynB,WAAYL,EACZM,UAAWL,EAEnB,CAEO,SAASM,EAAS3nB,EAAWonB,EAAWC,GAE3CD,GAAK,IACLC,GAAK,IAEL,IAAI3uC,GAAK,EAAI35D,KAAKuoG,IAAI,EAAID,EAAI,IAAMD,EAChCpuG,EAAI0/D,GAAK,EAAI35D,KAAKuoG,IAAKtnB,EAAI,GAAM,EAAI,IACrCJ,EAAIynB,EAAI3uC,EAAE,EACVpnC,EAAI,EACJ4iE,EAAI,EACJ8S,EAAI,EAkBR,OAhBI,GAAKhnB,GAAKA,EAAI,IACd1uD,EAAIonC,EAAGw7B,EAAIl7F,EAAGguG,EAAI,GACX,IAAMhnB,GAAKA,EAAI,KACtB1uD,EAAIt4B,EAAGk7F,EAAIx7B,EAAGsuC,EAAI,GACX,KAAOhnB,GAAKA,EAAI,KACvB1uD,EAAI,EAAG4iE,EAAIx7B,EAAGsuC,EAAIhuG,GACX,KAAOgnF,GAAKA,EAAI,KACvB1uD,EAAI,EAAG4iE,EAAIl7F,EAAGguG,EAAItuC,GACX,KAAOsnB,GAAKA,EAAI,KACvB1uD,EAAIt4B,EAAGk7F,EAAI,EAAG8S,EAAItuC,GACX,KAAOsnB,GAAKA,EAAI,MACvB1uD,EAAIonC,EAAGw7B,EAAI,EAAG8S,EAAIhuG,GAEtBs4B,EAAIvyB,KAAKsD,MAAgB,KAATivB,EAAIsuD,IACpBsU,EAAIn1F,KAAKsD,MAAgB,KAAT6xF,EAAItU,IACpBonB,EAAIjoG,KAAKsD,MAAgB,KAAT2kG,EAAIpnB,IACb,CACHp6E,IAAK8rB,EACL7rB,MAAOyuF,EACP0T,KAAMZ,EAEd,CAEO,MAAMp6G,EAMT,cAAOC,CAAQJ,EAAaonG,GACxB,GAAY,gBAARpnG,EACA,OAAOG,EAAM0oD,cAQjB,IAAK,sDAAsD6K,KAAK1zD,GAC5D,MAAM,IAAIksE,MAAM,sBAEL,MAAXlsE,EAAI,KAAYA,EAAMA,EAAIyB,UAAU,IACxC,IAAIwqE,EAAcjsE,EAAIsB,MAAM,IACX,IAAb2qE,EAAE9vE,SACF8vE,EAAI,CAACA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAExB,IAAbA,EAAE9vE,SACF8vE,EAAI,CAACA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAErD,MAAMlzD,EAAMmhG,EAAS,GAAKjuC,EAAE,GAAKA,EAAE,IAC7BmvC,EAAMlB,EAAS,GAAKjuC,EAAE,GAAKA,EAAE,IAC7BovC,EAAMnB,EAAS,GAAKjuC,EAAE,GAAKA,EAAE,IAC7BqvC,EAAsB,IAAbrvC,EAAE9vE,OAAe+9G,EAAS,GAAKjuC,EAAE,GAAKA,EAAE,IAAM,IACvDsvC,EAAQv6G,EAAAA,MAAMkP,kBAAkBk3F,GAAuB90F,KAAKsD,MAAM,IAAQ0lG,EAAS,KAAO,IAA9ClU,EAClD,OAAO,IAAIjnG,EAAM4Y,EAAKqiG,EAAKC,EAAKE,EACpC,CAEA,kBAAO1yD,GACH,OAAO,IAAI1oD,EAAM,IAAK,IAAK,IAAK,EACpC,CAEA6O,WAAAA,CAAY61B,EAAW4iE,EAAW8S,GAA2B,IAAhB9mB,EAASv3F,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAAC,KAtC1C6c,SAAG,OACHqiG,SAAG,OACHC,SAAG,OACHE,SAAG,EAoCft/G,KAAK8c,IAAMshG,EAAMx1E,EAAG,EAAG,KACvB5oC,KAAKm/G,IAAMf,EAAM5S,EAAG,EAAG,KACvBxrG,KAAKo/G,IAAMhB,EAAME,EAAG,EAAG,KACvBt+G,KAAKs/G,IAAMlB,EAAM5mB,EAAG,EAAG,EAC3B,CAEA+nB,GAAAA,GACI,MAAO,QAAU,CAACv/G,KAAK8c,IAAK9c,KAAKm/G,IAAKn/G,KAAKo/G,KAAK35G,KAAK,MAAQ,GACjE,CAEAqpE,IAAAA,GACI,MAAO,QAAU,CAAC9uE,KAAK8c,IAAK9c,KAAKm/G,IAAKn/G,KAAKo/G,IAAKp/G,KAAKs/G,KAAK75G,KAAK,MAAQ,GAC3E,CAEA1B,GAAAA,GACI,SADW9D,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACW,IAAM,IAAMi+G,EAASl+G,KAAK8c,KAAOohG,EAASl+G,KAAKm/G,KAAOjB,EAASl+G,KAAKo/G,IAC9F,CAEA96G,IAAAA,GACI,SADYrE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACU,IAAM,IAAMi+G,EAASl+G,KAAK8c,KAAOohG,EAASl+G,KAAKm/G,KAAOjB,EAASl+G,KAAKo/G,KAAOlB,EAAS7nG,KAAKsD,MAAiB,IAAX3Z,KAAKs/G,KAC9H,CAiBAl7G,YAAAA,CAAa4rE,GACT,OAAO35D,KAAKmpG,KAAKnpG,KAAKopG,IAAIzvC,EAAElzD,IAAM9c,KAAK8c,IAAK,GAAKzG,KAAKopG,IAAIzvC,EAAEmvC,IAAMn/G,KAAKm/G,IAAK,GAAK9oG,KAAKopG,IAAIzvC,EAAEovC,IAAMp/G,KAAKo/G,IAAK,GAChH,CAEQM,oBAAAA,CAAqBC,GACzB,GAAiB,IAAb3/G,KAAKs/G,IAAW,CAChB,GAAIK,EAAS,EACT,OAAO,IAAIz7G,EAAM,IAAK,IAAK,IAAKy7G,EAAS,KAE7C,GAAIA,EAAS,EACT,OAAO,IAAIz7G,EAAM,EAAG,EAAG,EAAGy7G,EAAS,IAE3C,CAEA,MAAMC,EAAUvB,EAASr+G,KAAK8c,IAAK9c,KAAKm/G,IAAKn/G,KAAKo/G,KAClDQ,EAAQZ,UAAYZ,EAAMwB,EAAQZ,UAAYW,EAAQ,EAAG,KACzD,MAAME,EAAUZ,EAASW,EAAQd,IAAKc,EAAQb,WAAYa,EAAQZ,WAClE,OAAO,IAAI96G,EAAM27G,EAAQ/iG,IAAK+iG,EAAQ9iG,MAAO8iG,EAAQX,KAAMl/G,KAAKs/G,IACpE,CAEA/6G,OAAAA,CAAQo7G,GACJ,OAAO3/G,KAAK0/G,qBAAqBrpG,KAAKuoG,IAAIe,GAC9C,CAEAt7G,MAAAA,CAAOs7G,GACH,OAAO3/G,KAAK0/G,sBAAsBrpG,KAAKuoG,IAAIe,GAC/C,CAEQG,qBAAAA,CAAsBH,GAC1B,MAAMC,EAAUvB,EAASr+G,KAAK8c,IAAK9c,KAAKm/G,IAAKn/G,KAAKo/G,KAClDQ,EAAQb,WAAaX,EAAMwB,EAAQb,WAAaY,EAAQ,EAAG,KAC3D,MAAME,EAAUZ,EAASW,EAAQd,IAAKc,EAAQb,WAAYa,EAAQZ,WAClE,OAAO,IAAI96G,EAAM27G,EAAQ/iG,IAAK+iG,EAAQ9iG,MAAO8iG,EAAQX,KAAMl/G,KAAKs/G,IACpE,CAEAS,QAAAA,CAASJ,GACL,OAAO3/G,KAAK8/G,sBAAsBzpG,KAAKuoG,IAAIe,GAC/C,CAEAK,UAAAA,CAAWL,GACP,OAAO3/G,KAAK8/G,uBAAuBzpG,KAAKuoG,IAAIe,GAChD,CAEQM,kBAAAA,CAAmBN,GACvB,MAAMxU,EAAUiT,EAAMp+G,KAAKs/G,IAAMK,EAAQ,EAAG,GAC5C,OAAO,IAAIz7G,EAAMlE,KAAK8c,IAAK9c,KAAKm/G,IAAKn/G,KAAKo/G,IAAKjU,EACnD,CAEA+U,MAAAA,CAAOP,GACH,OAAO3/G,KAAKigH,mBAAmB5pG,KAAKuoG,IAAIe,GAC5C,CAEAQ,OAAAA,CAAQR,GACJ,OAAO3/G,KAAKigH,oBAAoB5pG,KAAKuoG,IAAIe,GAC7C,E,+DCrOG,SAASv5F,EAAahS,EAAa6P,GACtCA,EAAUA,GAAWuX,EAAAA,SAASC,YAAY,GAC1C,IAAI2kF,EAAkB,KACtB,OAAO,IAAIplF,SAAqC,CAACqlF,EAAKC,KAClD,IAAInkE,EAAQ,IAAIr9C,MAChBq9C,EAAMokE,OAAS,KACXt2E,aAAam2E,GACbC,EAAI,CAAC1xG,MAAO,KAAM6xG,cAAepsG,EAAKkS,SAAU61B,GAAO,EAE3DA,EAAMskE,QAAU,KACZx2E,aAAam2E,GACbE,EAAI,CACA3xG,MAAO,mCAAqCyF,EAC5CosG,cAAepsG,GACjB,EAENgsG,EAAaj2E,YAAW,KACpBm2E,EAAI,CACA3xG,MAAO,4CAA8CyF,EACrDosG,cAAepsG,GACjB,GACH6P,EAAQy8F,mBACXvkE,EAAM/nC,IAAMA,CAAG,GAEvB,C,6ICZA,MAAMusG,EAAeC,EAAQ,OAEtB,MAAMC,EACX9tG,WAAAA,CACoB+tG,EACAC,EACAC,EACAC,EACAC,GAAmC,KAJnCJ,QAAAA,EAAuB,KACvBC,yBAAAA,EAAiD,KACjDC,MAAAA,EAAmB,KACnBC,QAAAA,EAAuB,KACvBC,gBAAAA,EAAgC,KAG5CC,wBAAkB,OAClBC,wBAAkB,OAClBC,mBAAa,CAJrB,CAMA,mCAAMC,GACJthH,KAAKmhH,mBAAqBnhH,KAAK+gH,yBAAyBQ,eACxDvhH,KAAKohH,mBAAqBphH,KAAKwhH,wBAE/B,IAAIC,QAA6BzhH,KAAK0hH,2BACtC1hH,KAAKqhH,cAAgB,GAAAzhH,OAAI6hH,EAAqBE,KAAI,KAAA/hH,OAAI6hH,EAAqBG,cAAgB5hG,cAG3F,MAAMhB,EAA4C,CAChD6iG,YAAaJ,EAAqBp+B,IAAIxhE,OAAOigG,gBAAgBC,MAAMC,OACnEL,KAAMF,EAAqBE,KAC3BC,aAAcH,EAAqBG,aACnCK,aAAcjiH,KAAKqhH,cACnB99B,QAASk+B,EAAqBl+B,QAC9B2+B,MAAOT,EAAqBS,MAC5B7+B,IAAKo+B,EAAqBp+B,IAC1B8+B,MAAOV,EAAqBW,YAC5BC,IAAKriH,KAAKohH,mBACVkB,kBAAmBb,EAAqBa,kBACxCC,kBAAmBd,EAAqBc,kBACxCC,UAAWf,EAAqBe,WAGlC,OAAOC,EAAAA,EAAAA,IAA8BzjG,EACvC,CAGA,8BAAc0iG,GACZ,IAAID,EAAoDzhH,KAAK8gH,QAAQ4B,kBAAkBC,EAAAA,GACvF,MAAMhB,EAAOF,EAAqBE,KAAK3hG,cACjC4hG,EAAeH,EAAqBG,aAAa5hG,cACjD4iG,EAAO5iH,KAAKohH,mBAAmBnzF,SAAS40F,KAAK7iG,eAE7C,UAAC8iG,SAAmB,gCAEpBN,EAAY,IAAIM,EAAU,CAC9BC,aAActB,EAAqBp+B,IAAIxhE,OAAOigG,gBAAgBC,MAAMC,OACpEL,KAAMF,EAAqBE,KAC3BC,aAAcH,EAAqBG,aACnC3zF,SAAUjuB,KAAKohH,mBAAmBnzF,SAAS40F,KAC3Ct5E,WAAWy5E,EAAAA,EAAAA,IAAiBhjH,KAAKkhH,mBASnC,OALAO,EAAqBS,MAAMrgG,aAAe7hB,KAAKijH,qBAAqBtB,EAAMC,EAAcY,GACxFf,EAAqBS,MAAMU,WAAa5iH,KAAKkjH,kCAAkCvB,EAAMC,EAAcgB,GACnGnB,QAA6BzhH,KAAKmjH,4BAA4B1B,EAAsBe,GACpFf,EAAuBzhH,KAAKojH,yBAAyB3B,GACrDA,EAAqBe,UAAYA,EAC1Bf,CAET,CAEA,0BAAcwB,CAAqBtB,EAAcC,EAAsBY,GACrE,IACE,MAAMa,QAAqB,SAAO,KAADzjH,OAA8B+hH,EAAI,eAAA/hH,OAAcgiH,EAAY,YAEvF0B,EAAgD,CACpDd,UAAWA,GAEb,OAAOa,EAAa9wD,QAAQ+wD,EAC9B,CAAE,MAAO50G,GAEP,MADA1O,KAAKihH,QAAQtyG,MAAM,oDAAD/O,OAAqD+hH,EAAI,KAAA/hH,OAAIgiH,GAAgBlzG,GACzFA,CACR,CAEF,CAEA,uCAAcw0G,CAAkCvB,EAAcC,EAAsB2B,GAClF,IAEE,aADiC,SAAO,KAAD3jH,OAA8B+hH,EAAI,eAAA/hH,OAAcgiH,EAAY,eAAAhiH,OAAc2jH,KACvFhxD,OAC5B,CAAE,MAAO7jD,GACP1O,KAAKihH,QAAQ/0B,MAAM,0CAADtsF,OAA2C2jH,EAAY,aAAA3jH,OAAY+hH,EAAI,KAAA/hH,OAAIgiH,GAAgBlzG,EAC/G,CAEF,CAGA,iCAAMy0G,CAA4B1B,EAAmDe,GAKnF,OAJAf,EAAqBS,MAAMrgG,OAAS8+F,GAAa6C,EAAAA,EAAAA,sBAAqB,CAAChB,UAAWA,IAAaf,EAAqBS,MAAMrgG,QACvH7hB,KAAKmhH,oBAAsBnhH,KAAKmhH,mBAAmBe,OAASliH,KAAKmhH,mBAAmBe,MAAMljG,SAC3F2hG,EAAac,EAAqBS,MAAMrgG,OAAQ7hB,KAAKmhH,mBAAmBe,MAAMljG,SAEzEyiG,CACT,CAIQ2B,wBAAAA,CAAyB3B,GAE/B,IAAKA,EAAqBp+B,MAAOo+B,EAAqBp+B,IAAIxhE,OACxD,OAAO4/F,EAGTd,EAAac,EAAsB,CACjCp+B,IAAK,CACHxhE,OAAS7hB,KAAKmhH,oBAAsBnhH,KAAKmhH,mBAAmB99B,KAAQ,CAAC,KAIzEs9B,EAAac,EAAsB,CACjCp+B,IAAK,CACHxhE,OAAQ,CACN4hG,SAAU,CACRZ,KAAM7iH,KAAKohH,mBAAmBnzF,SAAS40F,KACvCa,KAAM1jH,KAAKohH,mBAAmBnzF,SAASy1F,UAM/C,IAAIC,EAAYlC,EAAqBS,MAAMU,KAK3C,OAJGe,GAAaA,EAAU7hH,MAAQ6hH,EAAU7hH,KAAK8hH,UAC/CjD,EAAac,EAAqBp+B,IAAIxhE,OAAO4hG,SAAS3hH,KAAM6hH,EAAU7hH,KAAK8hH,UAGtEnC,CACT,CAKQoC,kBAAAA,CAAmBC,GAAiE,IAADC,EAAAC,EAAAC,EAEzF,GAA0B,QAA1BF,EAAG/jH,KAAKmhH,0BAAkB,IAAA4C,GAAvBA,EAAyB7B,MAAO,CACjC,IAAIgC,EAAuBlkH,KAAKmhH,mBAAmBe,MAAMj0F,SACrDk2F,EAAuBnkH,KAAKmhH,mBAAmBe,MAAMwB,KAEtDQ,IACDJ,EAAW71F,UAAQ/oB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAO4+G,EAAW71F,UAAQ,IAAE40F,KAAMqB,KAGpDC,IACDL,EAAW71F,UAAQ/oB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAO4+G,EAAW71F,UAAQ,IAAEy1F,KAAMS,KAGvD,IAAIC,EAAwBpkH,KAAKmhH,mBAAmBe,MAAMmC,cACvDD,IACDN,EAAWQ,cAAgBF,EAE/B,CAGA,IAAIG,EAA2C,QAA1BP,EAAGhkH,KAAKmhH,0BAAkB,IAAA6C,GAAS,QAATC,EAAvBD,EAAyBQ,eAAO,IAAAP,OAAT,EAAvBA,EAAkCQ,SAM1D,OAJGF,IACDT,EAAWW,UAAQv/G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAO4+G,EAAWW,UAAaF,IAG7CT,CACT,CAEQtC,qBAAAA,GACN,IAAIsC,EAAa9jH,KAAK8gH,QAAQ4B,kBAAkB,YAAc,CAAC,EAO/D,OALAoB,EAAW71F,SAAW61F,EAAW71F,UAAY,CAAC,EAC9C61F,EAAW71F,SAAS40F,KAAOiB,EAAW71F,SAAS40F,MAAQ,MACvDiB,EAAW71F,SAASy1F,KAAOI,EAAW71F,SAASy1F,MAAQ,KAGpD1jH,KAAKmhH,mBACCnhH,KAAK6jH,mBAAmBC,GAG1BA,CACT,E,eCpLK,MAAMY,EAA8C3xG,WAAAA,GAAA,KACvDvH,cAAQ,EAERm5G,aAAAA,CAAc1qD,GACLA,IAIDj6D,KAAKwL,SAIDxL,KAAKwL,SAASsE,OAAO80G,aAAa3qD,GAClCj6D,KAAKwL,SAASorB,SAASiuF,SAAS5qD,GAEhCj6D,KAAKwL,SAASorB,SAASjc,KAAKs/C,GAGhCnqD,OAAO8mB,SAAS2V,KAAO0tB,EAE/B,CAEA6qD,mBAAAA,GAAqD,IAADC,EAChD,OAAiB,QAAjBA,EAAI/kH,KAAKwL,gBAAQ,IAAAu5G,GAAbA,EAAex7E,UAAUtuB,UAClBjb,KAAKwL,SAAS+9B,UAAUisB,QAExB,IAEf,CAEAwvD,SAAAA,GACI,OAAOhlH,KAAKilH,aAAaC,EAAAA,GAC7B,CAEAC,SAAAA,GACI,OAAOnlH,KAAKilH,aAAaG,EAAAA,GAC7B,CAEQH,YAAAA,CAAaI,GACjB,IAAKrlH,KAAKwL,SACN,OAAO,EAIX,OADY,IAAI85G,EAAAA,EAAI,IAAIC,IAAIz1G,OAAO8mB,SAAS2V,OACjCxV,SAASyuF,UAAUrmH,WAAW6gB,gBAAkBqlG,CAC/D,CAEAI,yBAAAA,GAAkD,IAADC,EAAAC,EAAAC,EAC7C,IAAK5lH,KAAKwL,SACN,OAAO,KAGX,MAAMq6G,EAAkC,CAAC,EAKzC,OAJa,QAAbH,EAAA1lH,KAAKwL,gBAAQ,IAAAk6G,GAAe,QAAfC,EAAbD,EAAez7F,qBAAa,IAAA07F,GAAqB,QAArBC,EAA5BD,EAA8BG,2BAAmB,IAAAF,GAAjDA,EAAmDh6D,SAAQ72C,IACvD8wG,EAAW9wG,GAAY,CAAC,CAAC,IAGtB8wG,CACX,CAEA,oCAAME,GAA+D,IAADC,EAAAC,EAChE,OAAmC,QAAnCD,QAA2B,QAAnBC,EAAMjmH,KAAKwL,gBAAQ,IAAAy6G,OAAA,EAAbA,EAAetnG,eAAM,IAAAqnG,OAAA,EAA5BA,EAA+BD,gCAC1C,CAEA51B,oBAAAA,CAAqB+1B,GAAgC,IAADC,EAAAC,EAChD,OAAoB,QAApBD,EAAOnmH,KAAKwL,gBAAQ,IAAA26G,GAAe,QAAfC,EAAbD,EAAel8F,qBAAa,IAAAm8F,OAAf,EAAbA,EAA8Bj2B,qBAAqB+1B,EAC9D,CAEAG,6BAAAA,GACI,OAAQrmH,KAAKwL,SAAS+tF,+BAC1B,CAEA+sB,iBAAAA,GACI,OAAOtmH,KAAKwL,SAAS6jC,OACzB,CAEA,0BAAMk3E,GAEF,aADyBvmH,KAAKwL,SAAS2iC,UAE3C,CAEAq4E,6BAAAA,GACI,OAAOxmH,KAAKwL,SAASi7G,mBACzB,CAEAC,iBAAAA,GACI,OAAO1mH,KAAKwL,SAASm7G,OACzB,CAGAC,yBAAAA,GACI,OAAO5mH,KAAKwL,SAASq7G,eACzB,CAEAC,4BAAAA,GACI,OAAO9mH,KAAKwL,SAASi0D,aACzB,CAEAsnD,sBAAAA,GACI,OAAO/mH,KAAKwL,SAAS6wC,OACzB,CAEA2qE,yBAAAA,GACI,OAAOhnH,KAAKwL,SAASszB,eACzB,CAEAmoF,mBAAAA,GACI,OAAOjnH,KAAKwL,SAAS07G,SACzB,CAEAC,yBAAAA,GACI,OAAQnnH,KAAKwL,SAASoL,UAC1B,CAEAwwG,gBAAAA,GACI,OAAOpnH,KAAKwL,SAAS4vB,MACzB,CAEAisF,qBAAAA,GACI,OAAOrnH,KAAKwL,SAASoK,WACzB,CAEA0xG,sCAAAA,GAAgF,IAADC,EAC3E,OAAoB,QAApBA,EAAOvnH,KAAKwL,gBAAQ,IAAA+7G,OAAA,EAAbA,EAAexsG,4BAC1B,E,eC7IG,MAAMysG,EACXz0G,WAAAA,CAAoB00G,GAA8C,KAA9CA,sBAAAA,EAA2C,KAGvDhqB,QAAmB,IAF3B,CAIAiqB,QAAAA,CAASC,GACP,GAAG5iH,EAAAA,MAAMkP,kBAAkBjU,KAAKy9F,SAAU,CACxC,IAAI57E,EAAS,CAAC,EAEd7hB,KAAKynH,sBAAsB77D,SAAQg8D,IACjCnrG,OAAOstE,eAAeloE,EAAQ+lG,EAAcC,aAAc,CACxD79B,IAAKA,IAAM49B,EAAcF,SAASC,GAClCjsC,IAAKA,OAGLr/D,cAAc,EACdC,YAAY,GACZ,IAGJtc,KAAKy9F,QAAU57E,CACjB,CAEA,OAAO7hB,KAAKy9F,OACd,CAEA,eAAOqqB,CAASC,EAAoBJ,GAClC,IAAIK,EAAYvrG,OAAOspC,KAAKgiE,GAAYx3G,KAAI03G,GAAYN,EAAQO,wBAAwBD,EAAUF,KAClG,OAAO,IAAIP,EAAoBQ,EACjC,EC7BK,MAAMG,EACXp1G,WAAAA,CAAoBq1G,EAAsDC,GAAqB,KAA3ED,sBAAAA,EAA4C,KAAUC,cAAAA,CAC1E,CAEA,gBAAIpkE,GACF,OAAOjkD,KAAKqoH,aACd,CAEA,cAAIC,GACF,OAAOtoH,KAAKooH,qBACd,CAEAV,QAAAA,CAASC,GACP,IAAI,IAAIriH,EAAI,EAAGijH,EAAMvoH,KAAKsoH,WAAWpoH,OAAQoF,EAAIijH,EAAKjjH,IAAK,CACzD,IACIkjH,EADqBxoH,KAAKsoH,WAAWhjH,GACDoiH,SAASC,GACjD,IAAI5iH,EAAAA,MAAMkP,kBAAkBu0G,GAC1B,OAAOxoH,KAAKyoH,0BAA0Bd,EAASa,EAEnD,CAEA,OAAOxoH,KAAKyoH,0BAA0Bd,EAAS3nH,KAAKikD,aACtD,CAEQwkE,yBAAAA,CAA0Bd,EAA0C79G,GAC1E,OAAO69G,EAAQe,mBAAmB5+G,GAAO49G,SAASC,EACpD,ECzBK,MAAMgB,EACX51G,WAAAA,CAAoB61G,GAAkB,KAAlBA,QAAAA,EAAe,KAO3BC,qBAA2B1oH,CANnC,CAEA,OAAI2oH,GACF,OAAO9oH,KAAK4oH,OACd,CAIAlB,QAAAA,CAASC,GACP,GAAG5iH,EAAAA,MAAMk7B,YAAYjgC,KAAK6oH,iBAAkB,CAC1C,IAAIE,EAAmC,GAEvCtsG,OAAOspC,KAAK/lD,KAAK8oH,KAAKl9D,SAAQi8D,IAC5BkB,EAAWpuG,KAAKgtG,EAAQO,wBAAwBL,EAAc7nH,KAAK8oH,KAAK,IAG1E,IAAIE,EAAkB,IAAIxB,EAAoBuB,GAC9C/oH,KAAK6oH,gBAAkBG,EAAgBtB,SAASC,EAClD,CAEA,OAAO3nH,KAAK6oH,eACd,EC1BK,MAAMI,EACXl2G,WAAAA,CAAoBm2G,GAAsC,KAAtCA,iBAAAA,CACpB,CAEA,cAAIZ,GACF,OAAOtoH,KAAKkpH,gBACd,CAEAxB,QAAAA,CAASC,GACP,OAAO3nH,KAAKsoH,WAAW/3G,KAAI,CAAC+vB,EAAM+C,IAAU/C,EAAKonF,SAASC,EAAQwB,sBAAsB9lF,EAAMlkC,cAChG,ECTK,MAAMiqH,EACXr2G,WAAAA,CAAoBs2G,GAAc,KAAdA,OAAAA,EAAW,KAOvBR,qBAAkB1oH,CAN1B,CAEA,SAAI2J,GACF,OAAO9J,KAAKqpH,MACd,CAIA3B,QAAAA,CAASC,GAIP,OAHG5iH,EAAAA,MAAMk7B,YAAYjgC,KAAK6oH,mBACxB7oH,KAAK6oH,gBAAkBlB,EAAQ2B,yBAAyB3B,EAAQ4B,yBAA0BvpH,KAAK8J,QAE1F9J,KAAK6oH,eACd,ECdK,MAAMW,EACXz2G,WAAAA,CAAoB02G,GAA4B,KAA5BA,qBAAAA,CACpB,CAEA,cAAIC,GACF,OAAO1pH,KAAKypH,oBACd,CAEA/B,QAAAA,CAASC,GACP,IAAI7vB,GAAS93F,KAAK0pH,WAAW5xB,OAAS,IAAIvnF,KAAIq0F,GAAQ+iB,EAAQgC,uBAAuB/kB,KAErF,OADsB+iB,EAAQiC,sBAAsB5pH,KAAK0pH,WAAWG,WAAa,MAAO/xB,GACrE4vB,SAASC,GACnB3nH,KAAK0pH,WAAW5/G,MAElB,IACT,EChBK,MAAeggH,EAEpB/2G,WAAAA,CAAoBgkF,GAA8B,KAA9BA,OAAAA,CAEpB,CAEA,SAAIe,GACF,OAAO93F,KAAK+2F,MACd,ECTK,MAAMgzB,UAA0BD,EAErCpC,QAAAA,CAASC,GACP,IAAI,IAAIriH,EAAI,EAAGijH,EAAMvoH,KAAK83F,MAAM53F,OAAQoF,EAAIijH,EAAKjjH,IAAK,CAEpD,GADWtF,KAAK83F,MAAMxyF,GACdoiH,SAASC,GACf,OAAO,CAEX,CAEA,OAAO,CACT,ECXK,MAAMqC,UAA2BF,EAEtCpC,QAAAA,CAASC,GACP,GAAyB,IAAtB3nH,KAAK83F,MAAM53F,OACZ,OAAO,EAGT,IAAI,IAAIoF,EAAI,EAAGijH,EAAMvoH,KAAK83F,MAAM53F,OAAQoF,EAAIijH,EAAKjjH,IAAK,CAEpD,IADWtF,KAAK83F,MAAMxyF,GACboiH,SAASC,GAChB,OAAO,CAEX,CAEA,OAAO,CACT,ECbK,MAAMsC,EACXl3G,WAAAA,CAAoBm3G,GAAuB,KAAvBA,gBAAAA,CACpB,CAEA,cAAIR,GACF,OAAO1pH,KAAKkqH,eACd,CACAxC,QAAAA,CAASC,GACP,GAAG5iH,EAAAA,MAAMgrE,QAAQ/vE,KAAK0pH,WAAW5xB,OAAQ,CACvC,IAAIqyB,EAAanqH,KAAK0pH,WAAW5xB,MAAMvnF,KAAIq0F,GAAQ+iB,EAAQgC,uBAAuB/kB,KAElF,OADsB+iB,EAAQiC,sBAAsB5pH,KAAK0pH,WAAWG,WAAa,MAAOM,GACjEzC,SAASC,EAClC,CAAO,CACL,IAAIpX,EAAWoX,EAAQyC,yBAAyBpqH,KAAK0pH,WAAWnZ,UAC5D8Z,EAAe1C,EAAQ2C,gBAAgBtqH,KAAK0pH,WAAWn6F,IAC3D,OAAOghF,EAASga,QAAQF,EAAcrqH,KAAK0pH,WAAW5/G,MACxD,CAEF,ECrBK,MAAe0gH,GCAf,MAAMC,UAAsBD,EACjCD,OAAAA,CAAQG,EAAiBC,GACvB,OAAG3qH,KAAK4qH,mBAAmBF,IAAW1qH,KAAK4qH,mBAAmBD,IAC/C,OAAND,QAAM,IAANA,OAAM,EAANA,EAAQvrH,eAAqB,OAANwrH,QAAM,IAANA,OAAM,EAANA,EAAQxrH,YAGjCurH,GAAUC,CACnB,CAEQC,kBAAAA,CAAmB9gH,GACzB,MAAc,SAAVA,GAA8B,UAAVA,CAK1B,ECdK,MAAM+gH,UAAyBL,EACpCD,OAAAA,CAAQG,EAAiBC,GACvB,QAAS,IAAIF,GAAgBF,QAAQG,EAAQC,EAC/C,ECGK,MAAMG,EACX/3G,WAAAA,CAAoBg4G,EAA2DC,GAAuB,KAAlFD,iBAAAA,EAAiD,KAAUC,qBAAAA,CAE/E,CAEAZ,wBAAAA,CAAyBa,GACvB,OAAOjrH,KAAK+qH,iBAAiBX,yBAAyBa,EACxD,CAEArB,qBAAAA,CAAsBsB,EAA6BpzB,GACjD,OAAO93F,KAAK+qH,iBAAiBnB,sBAAsBsB,EAAqBpzB,EAC1E,CAEA6xB,sBAAAA,CAAuBwB,GACrB,OAAOnrH,KAAK+qH,iBAAiBpB,uBAAuBwB,EACtD,CAEAC,wBAAAA,CAAyBC,GACvB,OAAOrrH,KAAK+qH,iBAAiBK,yBAAyBC,EACxD,CAEAf,eAAAA,CAAgBvkG,GACd,OAAO/lB,KAAK+qH,iBAAiBT,gBAAgBvkG,EAC/C,CAEA2iG,kBAAAA,CAAmB5+G,GACjB,OAAO9J,KAAK+qH,iBAAiBrC,mBAAmB5+G,EAClD,CAGAy/G,sBAAAA,GACE,OAAOvpH,KAAK+qH,iBAAiBxB,yBAA2B,IAAMvpH,KAAKgrH,oBACrE,CAEA7B,qBAAAA,CAAsBtB,GACpB,OAAO,IAAIiD,EAAqB9qH,KAAM6nH,EACxC,CAEAyB,wBAAAA,CAAyBgC,EAAsBxhH,GAC7C,OAAO9J,KAAK+qH,iBAAiBzB,yBAAyBgC,EAAcxhH,EACtE,CAEAo+G,uBAAAA,CAAwBL,EAAsB0D,GAC5C,OAAOvrH,KAAK+qH,iBAAiB7C,wBAAwBL,EAAc0D,EACrE,CAEAC,gBAAAA,GACE,OAAOxrH,KAAK+qH,iBAAiBS,kBAC/B,ECnDK,MAAMC,EACX14G,WAAAA,CAAoB24G,EAA+BC,GAAmC,KAAlED,cAAAA,EAAqB,KAAUC,gBAAAA,CAEnD,CAEA,gBAAI9D,GACF,OAAO7nH,KAAK0rH,aACd,CAEAhE,QAAAA,CAASC,GAEP,IAAIiE,EAAkBjE,EAAQwB,sBAAsBnpH,KAAK6nH,cAEzD,IACE,OAAO7nH,KAAK2rH,gBAAgBjE,SAASkE,EACvC,CAAE,MAAOl9G,GACP,MAAM,IAAIuhE,MAAM,+BAADrwE,OAAgCgsH,EAAgBrC,yBAAwB,MAAA3pH,OAAK8O,GAC9F,CAEF,ECbK,SAASm9G,EAA2BC,GACzC,IAAIC,EAA8C,CAChD9nE,aAAc,GACd+nE,WAAY,IAGd,OAAIF,GAIJA,EAASlgE,SAAQqgE,IACf,GAAKA,EAAQC,QAGN,CACL,IAAIb,EAA4C,CAC9CxB,UAAW,MACX//G,MAAOmiH,EAAQE,MACfr0B,MAAO,IAGTm0B,EAAQC,QAAQtgE,SAAQwgE,IACtBf,EAAoBvzB,MAAMn9E,KAUlC,SAA+ByxG,GAC7B,MAAO,CACL78F,GAAI68F,EAAQrmG,KACZwqF,SAAU,IACVzmG,MACoB,IAAlBsiH,EAAQtiH,QAAiC,IAAlBsiH,EAAQtiH,OAAoC,SAAlBsiH,EAAQtiH,MAI/D,CAnBuCuiH,CAAsBD,GAAS,IAGhEL,EAAqBC,WAAWrxG,KAAK0wG,EACvC,MAbEU,EAAqB9nE,aAAegoE,EAAQE,KAa9C,IAGKJ,GAtBEA,CAuBX,CCtCO,MAAMO,EACXv5G,WAAAA,CAAoBw5G,EAAqBC,GAAoB,KAAzCD,OAAAA,EAAW,KAAUC,aAAAA,CAEzC,CAEA,SAAIC,GACF,OAAOzsH,KAAKusH,MACd,CAEA,eAAInK,GACF,OAAOpiH,KAAKwsH,YACd,CAEA,gBAAI3E,GACF,MAAO,SACT,CAEAH,QAAAA,CAASC,GACP,IAAIiE,EAAkBjE,EAAQwB,sBAAsBnpH,KAAK6nH,cAErD6E,EAAmB1sH,KAAKysH,MAAMC,iBAI9BZ,EAAW9rH,KAAKoiH,aAAepiH,KAAKoiH,YAAYuK,SAAW3sH,KAAKoiH,YAAYuK,QAAQD,GAEpFE,EAAsB,GAKxBA,EAJGd,EAISnE,EAAQe,mBAAmBmD,EAA2BC,IAAWpE,SAASkE,GAF1EjE,EAAQe,mBAAmB1oH,KAAKysH,MAAMzsH,KAAK6nH,eAAeH,SAASkE,GAKjF,IAAIiB,EAAgBlF,EAAQ6D,oBAAsB,GAElD,OAA6B,IAAzBqB,EAAc3sH,OACT0sH,EAGF,IAAIC,KAAkBD,EAC/B,EC3CK,MAAME,UAAwBtC,EACnCD,OAAAA,CAAQG,EAAiBC,GACvB,SAAUD,GAAU,IAAIvrH,cAAgBwrH,GAAU,IAAIxrH,WACxD,ECDK,MAAM4tH,UAA4BvC,EACvCz3G,WAAAA,CAAoBkuG,GAClB7oG,QAAQ,KADU6oG,QAAAA,CAEpB,CAEAsJ,OAAAA,CAAQG,EAAiBC,GAKvB,OAJK5lH,EAAAA,MAAMC,SAAS0lH,IAAY3lH,EAAAA,MAAMC,SAAS2lH,IAC7C3qH,KAAKihH,QAAQtyG,MAAM,2DAAD/O,OAA4D8qH,EAAM,aAAA9qH,OAAY+qH,IAG3FD,EAASC,CAClB,ECXK,MAAMqC,UAAyBxC,EAClCz3G,WAAAA,CAAoBkuG,GAChB7oG,QAAQ,KADQ6oG,QAAAA,CAEpB,CAEAsJ,OAAAA,CAAQG,EAAiBC,GAIrB,OAHK5lH,EAAAA,MAAMC,SAAS0lH,IAAY3lH,EAAAA,MAAMC,SAAS2lH,IAC3C3qH,KAAKihH,QAAQtyG,MAAM,wDAAD/O,OAAyD8qH,EAAM,aAAA9qH,OAAY+qH,IAE1FD,EAASC,CACpB,ECTG,MAAMsC,UAAsBzC,EAC/Bz3G,WAAAA,CAAoBkuG,GAChB7oG,QAAQ,KADQ6oG,QAAAA,CAEpB,CAEAsJ,OAAAA,CAAQG,EAAiBC,GACrB,OAAI5lH,EAAAA,MAAMgrE,QAAQ46C,GAKXA,EAAOztG,SAASwtG,IAJnB1qH,KAAKihH,QAAQtyG,MAAM,oEAAD/O,OAAqE+qH,KAChF,IAAIF,GAAgBF,QAAQG,EAAQC,GAInD,ECYG,MAAMuC,EACXn6G,WAAAA,CAAoBo6G,GAAqD,KAArDA,aAAAA,CAEpB,CAIA7C,eAAAA,CAAgBvkG,GACd,OAAO/lB,KAAKmtH,aAAa7C,gBAAgBvkG,EAC3C,CAEA2iG,kBAAAA,CAAmB5+G,GACjB,OAAG/E,EAAAA,MAAMqoH,SAAStjH,GACb9J,KAAKqtH,6BAA6BvjH,GAC5B,IAAIq+G,EAAoBnoH,KAAKstH,4BAA4BxjH,EAAMkiH,YAAaliH,EAAMm6C,cAElF,IAAI0kE,EAAgB7+G,GAErB/E,EAAAA,MAAMgrE,QAAQjmE,GACf,IAAIm/G,EAAen/G,EAAMyG,KAAI+vB,GAAQtgC,KAAK0oH,mBAAmBpoF,MAE7D,IAAI8oF,EAAqBt/G,EAEpC,CAEQwjH,2BAAAA,CAA4BC,GAClC,OAAQA,GAAyB,IAAIh9G,KAAI86G,GAAuBrrH,KAAKorH,yBAAyBC,IAChG,CAEAD,wBAAAA,CAAyBC,GACvB,OAAO,IAAI7B,EAAmB6B,EAChC,CAEAzB,qBAAAA,CAAsBsB,EAA6BpzB,GACjD,OAAQozB,EAAoBpnE,eAC1B,IAAK,KACH,OAAO,IAAIimE,EAAkBjyB,GAC/B,IAAK,MACH,OAAO,IAAIkyB,EAAmBlyB,GAChC,QACE,MAAM,IAAI7nB,MAAM,iCAADrwE,OAAkCsrH,EAAmB,mBAG1E,CAEAvB,sBAAAA,CAAuBwB,GACrB,OAAO,IAAIlB,EAAiBkB,EAC9B,CAEAf,wBAAAA,CAAyBa,GACvB,OAAQA,EAAajrG,eACnB,IAAK,QACL,IAAK,IACH,OAAO,IAAIyqG,EACb,IAAK,YACL,IAAK,YACL,IAAK,KACH,OAAO,IAAII,EACb,IAAK,WACL,IAAK,WACH,OAAO,IAAIiC,EACb,IAAK,eACH,OAAO,IAAIC,EAAoB/sH,KAAKmtH,aAAah2G,QACnD,IAAK,YACH,OAAO,IAAI61G,EAAiBhtH,KAAKmtH,aAAah2G,QAChD,IAAK,SACH,OAAO,IAAI81G,EAAcjtH,KAAKmtH,aAAah2G,QAC7C,QACE,MAAM,IAAI84D,MAAM,oCAADrwE,OAAqCqrH,IAE1D,CAEQoC,4BAAAA,CAA6BvE,GACnC,OAAI/jH,EAAAA,MAAMkP,kBAAkB60G,EAAgB,cACtC/jH,EAAAA,MAAMkP,kBAAkB60G,EAAkB,aAKlD,CAEAS,sBAAAA,GACE,MAAO,EACT,CAEAJ,qBAAAA,CAAsBtB,GACpB,OAAO,IAAIiD,EAAqB9qH,KAAM6nH,EACxC,CAEAyB,wBAAAA,CAAyBgC,EAAsBxhH,GAC7C,OAAOA,CACT,CAEAo+G,uBAAAA,CAAwBL,EAAsB0D,GAC5C,OAAQ1D,GACN,IAAK,UACH,OAAO,IAAIyE,EAAyBf,EAAevrH,KAAKmtH,aAAahL,OACvE,IAAK,gBACH,IAAIqL,EAAgBjC,EAAckC,cAMlC,OAJED,EADEjC,EAAckC,eAAiBlC,EAAckC,cAAcC,WAChDxoH,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOsoH,GAAa,IAAEE,UAAW1tH,KAAK2tH,wBAAwBpC,EAAckC,cAAcC,cAE1FxoH,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOsoH,GAAa,IAAEE,UAAW1tH,KAAK2tH,wBAAwB3tH,KAAKmtH,aAAahL,OAASniH,KAAKmtH,aAAahL,MAAMuL,aAEzH,IAAIjC,EAAkB5D,EAAc7nH,KAAK0oH,mBAAmB8E,IACrE,QACE,OAAO,IAAI/B,EAAkB5D,EAAc7nH,KAAK0oH,mBAAmB6C,EAAc1D,KAEvF,CAGQ8F,uBAAAA,CAAwBC,GAE9B,MAAMjiC,EAAe,CACnBC,iBAAkB,CAACC,IAAI,EAAMxkC,QAAQ,GACrCykC,kBAAmB,CAACD,IAAI,EAAMxkC,QAAQ,GACtC0qC,0BAA2B,CAAClG,IAAI,EAAMxkC,QAAQ,GAC9CyqC,2BAA4B,CAACjG,IAAI,EAAMxkC,QAAQ,IAsBjD,OAnBAumE,EAAoBA,GAAqB,CAAC,GAEvC39E,EAAAA,EAAAA,OACDxzB,OAAOspC,KAAK6nE,GAAmBhiE,SAAQ72C,IACrC64G,EAAkB74G,GAAwB,aAAI42E,CAAY,IAItC3rF,KAAKwrH,mBAEX5/D,SAAQ72C,IACrB64G,EAAkB74G,KAGnB64G,EAAkB74G,GAAY,CAAC,GAF/B64G,EAAkB74G,GAAwB,aAAI42E,CAIhD,IAGKiiC,CACT,CAEApC,gBAAAA,GACE,OAAOxrH,KAAKmtH,aAAa3B,oBAAsB,EACjD,EC7KK,MCaD7K,EAAeC,EAAQ,OAEtB,MAAMiN,EACX96G,WAAAA,CAAoB+6G,EACAC,EACAhN,EACAiN,EACA/M,GAA0B,KAJ1B6M,0BAAAA,EAA2D,KAC3DC,kBAAAA,EAAoC,KACpChN,yBAAAA,EAAiD,KACjDiN,OAAAA,EAAwB,KACxB/M,QAAAA,EAAuB,KA2GnCgN,kBAAqBhzF,IAC3B,IAAI4qF,EAAa7lH,KAAK+tH,kBAAkBtI,4BACrCI,EACD5qF,EAAQ4qF,GAER17E,YAAW,IAAMnqC,KAAKiuH,kBAAkBhzF,IAAU,EACpD,EACA,KAcMizF,oCAAuCjzF,IAC7Cj7B,KAAK+tH,kBAAkBhI,iCAAiCxkG,MAAK4sG,IAC3DnuH,KAAKouH,eAAeD,EAA6BlzF,EAAQ,GACzD,CAjIJ,CAEAy3B,IAAAA,GAEE,OAAO,mEAAsEnxC,MAAK8sG,GAAUA,EAAOC,MAAK/sG,MAAK+sG,IAC3Gx+G,OAAkB,UAAI9P,KAAK8tH,0BAA0BzqC,IAAIxhE,OAAO0sG,OAAOC,UAAY,OACnF,MAAMC,EAAS,IAAIH,EAAItuH,KAAK8tH,0BAA0BzqC,IAAIxhE,QAC1D,IAAI6sG,EAA0B1uH,KAAK2uH,wBAEnC,OAAO,IAAI3zF,SAAcC,IAMvBwzF,EAAOG,WAAWF,GALYG,KAC5B/+G,OAAsB,IAAI2+G,EAC1BxzF,GAAS,GAGkD,GAC7D,GAGN,CAGQ0zF,qBAAAA,GACN,IAAID,EAAqB,CACvBI,QAAS9uH,KAAK+uH,6BACdC,KAAMhvH,KAAKivH,0BACXC,KAAMlvH,KAAKmvH,0BACXC,YAAapvH,KAAKqvH,iCAClBC,MAAOtvH,KAAKuvH,2BACZC,gBAAiBxvH,KAAKyvH,qCACtBC,qBAAsB1vH,KAAK2vH,mCAC3BC,aAAc5vH,KAAK6vH,2BACnBC,gBAAiB9vH,KAAK+vH,8BACtBC,yBAA0BhwH,KAAKiwH,uCAC/BC,mBAAoBlwH,KAAKmwH,iCACzBC,aAAcpwH,KAAKqwH,2BACnBC,qBAAsBtwH,KAAKuwH,mCAC3BC,qBAAsBxwH,KAAKywH,mCAC3BC,aAAc1wH,KAAK2wH,kCACnB52F,WAAY,CACV62F,wBAAyBA,IAAM5wH,KAAK+tH,kBAAkB5G,6BAExD0J,YAAa,CACXzJ,iBAAkBA,IAAMpnH,KAAK+tH,kBAAkB3G,oBAEjD0J,iBAAkB,CAChBzJ,sBAAuBA,IAAMrnH,KAAK+tH,kBAAkB1G,yBAEtD0J,UAAW,CACTC,oCAAqCA,IAAMhxH,KAAK+tH,kBAAkBzG,2CAKtE,OADA3G,EAAa+N,EAAoB1uH,KAAKixH,kCAC/BvC,CACT,CAEQe,kCAAAA,GACN,MAAO,CACLyB,aAAclxH,KAAKguH,OAAOmD,WAAWpyH,OAAOC,OAAOmyC,eAAeigF,UAAUjyH,WAGhF,CAEQ4vH,0BAAAA,GACN,MAAO,CACLxrC,QAASvjF,KAAK8tH,0BAA0BvqC,QAE5C,CAEQ0rC,uBAAAA,GAAgC,IAADoC,EAAAC,EAAAC,EACrC,OAA2C,QAApCF,EAAArxH,KAAK8tH,0BAA0B5L,aAAK,IAAAmP,GAAQ,QAARC,EAApCD,EAAsCxvG,cAAM,IAAAyvG,GAAK,QAALC,EAA5CD,EAA8CE,WAAG,IAAAD,OAAb,EAApCA,EAAmDvC,OAAQ,CAAC,CACrE,CAEQiC,8BAAAA,GACN,IAAIQ,EAAwBzxH,KAAK8tH,0BAA0B5L,OAASliH,KAAK8tH,0BAA0B5L,MAAMrgG,QAAU7hB,KAAK8tH,0BAA0B5L,MAAMrgG,OAAO2vG,IAC/J,IAAIC,EACF,MAAO,CAAC,EAGV,IAAIhN,EAAoC,CACtCiN,IAAK1xH,KAAK8tH,0BAA0BzqC,IAAIxhE,OAAOigG,gBAAgB4P,KAG7DC,EAAqE,CACrErH,gBAAkBsH,GAAenN,EAASmN,GAC1CpG,iBAAkBA,IAAM,GACxBrJ,MAAOniH,KAAK8tH,0BAA0B3L,MACtChrG,OAAQnX,KAAKihH,SAGb0G,EAAU,IAAIuF,EAA+ByE,GAEjD,OADgBnK,EAAoBM,SAAS2J,EAAuB9J,GACnDD,SAASC,EAC5B,CAEQwH,uBAAAA,GAMN,MAJkB,CAChBh/B,qBAAuB+1B,GAA0BlmH,KAAK+tH,kBAAkB59B,qBAAqB+1B,GAIjG,CAWQ2L,eAAAA,GACN,OAAO,IAAI72F,SAAaC,IACtBj7B,KAAKiuH,kBAAkBhzF,EAAQ,GAEnC,CAEQ62F,+BAAAA,GACN,OAAO,IAAI92F,SAAaC,IACtBj7B,KAAKkuH,oCAAoCjzF,EAAQ,GAErD,CASAmzF,cAAAA,CAAev5F,EAAsBoG,GAChCpG,EACDoG,EAAQpG,GAERsV,YAAW,IAAMnqC,KAAKkuH,oCAAoCjzF,IAAU,EAExE,CAEQo0F,8BAAAA,GAAuC,IAAD0C,EAC5C,IAAIC,EAAoBhyH,KAAK+gH,yBAAyBQ,eAEtD,MAAO,CACL0Q,eAAgBjyH,KAAK6xH,gBAAgBp7F,KAAKz2B,MAC1CkyH,UAAYj4D,GAAgBj6D,KAAK+tH,kBAAkBpJ,cAAc1qD,GACjE6qD,oBAAsBA,IAAM9kH,KAAK+tH,kBAAkBjJ,sBACnDqN,cAAeA,IAAMnyH,KAAK+tH,kBAAkB/I,YAC5CoN,cAAeA,IAAMpyH,KAAK+tH,kBAAkB5I,YAC5CgJ,4BAA6BnuH,KAAK8xH,gCAAgCr7F,KAAKz2B,MACvEqyH,UAA4B,OAAjBL,QAAiB,IAAjBA,GAAwB,QAAPD,EAAjBC,EAAmB9P,aAAK,IAAA6P,OAAP,EAAjBA,EAA0BO,UACrCC,sBAAuB7yG,gBAAoD1f,KAAK+tH,kBAAkB9G,uBAAuBuL,iBAAiB//B,GAE9I,CAGQ88B,wBAAAA,GAAiC,IAADkD,EAAAC,EAAAC,EACpC,IAAIj9D,EAAc,CAAC,EACfs8D,EAAoBhyH,KAAK+gH,yBAAyBQ,eAQtD,OAPoB,OAAjByQ,QAAiB,IAAjBA,GAAsB,QAALS,EAAjBT,EAAmB3uC,WAAG,IAAAovC,GAAtBA,EAAwBG,MACzBl9D,EAAOm9D,OAASb,EAAkB3uC,IAAIuvC,KAGxCl9D,EAAOisD,KAAO3hH,KAAK8tH,0BAA0BnM,KAC7CjsD,EAAOksD,aAAe5hH,KAAK8tH,0BAA0BlM,aACrDlsD,EAAO6sD,kBAAoBp4G,QAAmD,QAA5CuoH,EAAkB,OAAjBV,QAAiB,IAAjBA,GAAwB,QAAPW,EAAjBX,EAAmB9P,aAAK,IAAAyQ,OAAP,EAAjBA,EAA0BpQ,yBAAiB,IAAAmQ,EAAAA,EAAI1yH,KAAK8tH,0BAA0BvL,mBAC1G7sD,CACX,CAEQi6D,gCAAAA,GACN,MAAO,CACLtJ,8BAA+BA,IAAMrmH,KAAK+tH,kBAAkB1H,gCAEhE,CAEQwJ,wBAAAA,GACN,MAAO,CACLvJ,kBAAmBA,IAAMtmH,KAAK+tH,kBAAkBzH,oBAEpD,CAEQyJ,2BAAAA,GACN,MAAO,CACLxJ,qBAAsBA,IAAMvmH,KAAK+tH,kBAAkBxH,uBAEvD,CAEQ0J,oCAAAA,GACN,MAAO,CACLzJ,8BAA+BA,IAAMxmH,KAAK+tH,kBAAkBvH,gCAEhE,CAEQmK,+BAAAA,GACN,MAAO,CACLjK,kBAAmBA,IAAM1mH,KAAK+tH,kBAAkBrH,oBAEpD,CAGQ6J,gCAAAA,GACN,MAAO,CACL3J,0BAA2BA,IAAM5mH,KAAK+tH,kBAAkBnH,4BAE5D,CAEQuJ,8BAAAA,GACN,MAAO,CACL2C,qBAAsBA,IAAM9yH,KAAK+tH,kBAAkBjH,+BAEvD,CAEQuJ,wBAAAA,GACN,MAAO,CACL0C,eAAgBA,IAAM/yH,KAAK+tH,kBAAkBhH,yBAEjD,CAEQ0J,gCAAAA,GACN,MAAO,CACL3xF,gBAAiBA,IAAM9+B,KAAK+tH,kBAAkB/G,4BAElD,ECrPK,MAAMgM,EAA8C,uC,cCG3D,MAAMC,EAAMrS,EAAQ,MAEb,MAAMsS,UAAyCx0C,EAAAA,EAElDy0C,gBAAAA,CAAiBC,GACb,OAAIH,EAAIG,KAAcpzH,KAAKwL,SAASye,cAAc6P,gBAAgBu5F,mBAAmBC,gBACjFtzH,KAAKuzH,cACE,EAGf,CAEQA,UAAAA,GACJ,IAAIC,EAAsB,IAAI12D,KAC9B02D,EAAeC,SAASD,EAAeE,WAAa,GACpD1zH,KAAKwL,SAASmoH,QAAQC,aAAaZ,EAAsC,OAAQQ,EACrF,E,4CCVG,IAAeK,IAAuBh8G,EAIxCC,EAAAA,GAAWxK,IAAGyK,EAGdE,EAAAA,GAAOC,MAAKF,EAKZF,EAAAA,GAAWxK,IAAG8W,EAGdnM,EAAAA,GAAOC,MAAKmM,EA8CZvM,EAAAA,GAAWxK,IAAGgX,EAEdrM,EAAAA,GAAOC,MAAKpF,EA/DV,cAA+C4rE,EAAAA,EAQ1Co1C,eAAAA,CAAgBC,GACpB/zH,KAAK+zH,YAAcA,CACvB,CAMQC,gBAAAA,CAAiB3pE,GACrBrqD,KAAKqqD,aAAeA,CACxB,CAEA,sBACI4pE,GACA,GAAIj0H,KAAKwL,SAASkE,KAAKC,aACnB,OAAO,EAGX,MAAMukH,EAAwBl0H,KAAKwL,SAASoL,WAAWwrE,oBACjD+xC,EAA+Bn0H,KAAKwL,SAASye,cAAc6P,gBAAgBs6F,gBAAgBD,6BAA6BD,GAC9H,OAAQnvH,EAAAA,MAAMkP,kBAAkBkgH,IAAiCA,CACrE,CAOOE,gBAAAA,CAAiBvqH,GACpB9J,KAAKs0H,eAAiBxqH,CAC1B,CAEOyqH,gBAAAA,GACH,OAAOv0H,KAAKs0H,cAChB,CAEAvhH,WAAAA,CAAavH,GACT4M,MAAM5M,GAAU,KA3CJygD,gBAAU,GAAA1zC,EAAAA,EAAAA,GAAA,mBAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,oBAAAE,EAAA,WAgClB67G,eAA4C,MAAI/7G,EAAAA,EAAAA,GAAA,yBAAAmM,EAAA,OAapD1L,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKw0H,QACLx0H,KAAKwL,SAAS63E,IAAIoxC,OAAOC,aAAY,KACjC10H,KAAKg0H,kBAAiB,EAAM,IAEhCh0H,KAAKwL,SAAS63E,IAAIoxC,OAAOE,cAAa,KAClC30H,KAAKg0H,kBAAiB,EAAK,IAE/BxoH,EAAS63E,IAAIoxC,OAAOG,YAAW,KAC3B50H,KAAKwL,SAASkE,KAAKihE,YAAYC,MAAMikD,YAAW,EAAK,GAE7D,CAKAC,oBAAAA,CAAqBhrH,GACjB9J,KAAK+0H,kBAAoBjrH,CAC7B,CAEQ0qH,KAAAA,GACJ,MAAMT,EAAc/zH,KAAKg1H,oBAEpBjB,GACD/zH,KAAKwL,SAAS63E,IAAI4xC,yBACbC,YACAC,YAAYn1H,KAAKisD,YACjBmpE,UAAU,2BACVC,OAGTr1H,KAAK8zH,gBAAgBC,EACzB,GAKHv7G,GAAA2D,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,eAAAvE,GAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAhF0B,IAAK,KAADL,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,mBAAArE,GAAA0E,OAAAC,yBAAA5J,EAAAsJ,UAAA,mBAAAtJ,EAAAsJ,WAAA3D,GAAA0D,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,gBAAApE,GAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAQH,CAAK,KAADL,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,oBAAAgI,GAAA3H,OAAAC,yBAAA5J,EAAAsJ,UAAA,oBAAAtJ,EAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,sBAO3Bo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,EAAAsJ,UAAA,sBAAAtJ,EAAAsJ,WAAAsI,GAAAvI,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,qBAAAiI,GAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA0CmB,GAAO,KAADL,EAAAA,EAAAA,GAAArJ,EAAAsJ,UAAA,wBAAAkI,GAAA7H,OAAAC,yBAAA5J,EAAAsJ,UAAA,wBAAAtJ,EAAAsJ,WAAAtJ,GCvEtC,MAAMwiH,GACK,GADLA,GAEM,SAFNA,GAGQ,WAGP,MAAMC,GAOTxiH,WAAAA,CAAYyiH,EAAoBthG,GAAgB,KANxCuhG,cAAQ,OACRC,oBAAc,OACdC,gBAAU,OACVC,eAAS,OACTC,OAAiBP,GAGrBt1H,KAAK01H,eAAiBxhG,EACtBl0B,KAAK41H,UAAYJ,EACjBx1H,KAAK81H,QACT,CAEOvvG,KAAAA,GACH,GAAIvmB,KAAK61H,SAAWP,GAA8B,CAC9C,IAAIS,EAAcj5D,KAAKD,MAAQ78D,KAAK21H,WAEpC31H,KAAK61H,OAASP,GACdt1H,KAAKg2H,cACLh2H,KAAK01H,eAAiB11H,KAAK01H,eAAiBK,CAChD,CACJ,CAEOD,MAAAA,GACC91H,KAAK61H,SAAWP,KAChBt1H,KAAK61H,OAASP,GACdt1H,KAAKg2H,cACLh2H,KAAK21H,WAAa74D,KAAKD,MACvB78D,KAAKy1H,SAAWtrF,WAAWnqC,KAAK41H,UAAW51H,KAAK01H,gBAExD,CAEO/qE,OAAAA,GACH3qD,KAAKg2H,cACLh2H,KAAKy1H,SAAW,IACpB,CAEQO,WAAAA,GACAh2H,KAAKy1H,UACLxrF,aAAajqC,KAAKy1H,SAE1B,E,uDCtCG,IAAMQ,IAAyBp+G,GAgBjCC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKF,GAKZF,EAAAA,GAAWxK,IAAG8W,GAGdnM,EAAAA,GAAOC,MAAKmM,GAKZvM,EAAAA,GAAWxK,IAAGgX,GAGdrM,EAAAA,GAAOC,MAAKspC,GAKZ1pC,EAAAA,GAAWxK,IAAGm0C,GAGdxpC,EAAAA,GAAOC,MAAKpF,GA3CV,MAoBHojH,YAAAA,CAAapsH,GACT9J,KAAKiL,SAAWnB,CACpB,CAMAqsH,aAAAA,CAAcrsH,GACV9J,KAAKyrD,UAAY3hD,CACrB,CAMAssH,yBAAAA,CAA0BtsH,GACtB9J,KAAK2rD,sBAAwB7hD,CACjC,CAMAusH,mBAAAA,CAAoBvsH,GAChB9J,KAAKysD,gBAAkB3iD,CAC3B,CAMAiJ,WAAAA,CAAYujH,EAAmBvhH,EAAiBwhH,EAAkCC,EAAqBC,EAAyCC,GAAqC,KAArCA,UAAAA,EAAkC,KAlD1KC,eAAS,OACTC,qBAAe,OACfC,mBAAa,OACbC,iBAAW,OACXC,eAAgC,KAAK,KAErCC,yBAAmB,OACnBC,sBAAgC,EAAM,KACtCC,kBAA4B,EAAK,KACjCC,qBAAiC,GAAG,KACpCC,iBAA2B,EAAM,KACjCC,YAAsB,EAAM,KAC5BC,kBAA4B,GAAC/+G,EAAAA,EAAAA,GAAA,gBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,iBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,6BAAAmM,GAAA,OAAAnM,EAAAA,EAAAA,GAAA,uBAAAkQ,GAAA,WAkC7B8uG,eAAiB,IACdv3H,KAAK02H,UAAUrgD,kBAAkBpqB,WAC3C,KAwGSurE,WAAa,KAGfx3H,KAAKysD,kBAILzsD,KAAKg3H,oBAAsBS,YAAY56D,MACvC78D,KAAKm2H,eAAc,IAEvBn2H,KAAK+2H,eAAexwG,OAAO,EAC9B,KAESmxG,WAAa,KAEnB13H,KAAKo3H,iBAAkB,EACvBp3H,KAAK23H,6BACL33H,KAAKm2H,eAAc,GACnBn2H,KAAK+2H,eAAejB,SAEpBrxH,QAAQC,IAAI,2BAA6B1E,KAAK22H,WAEzC32H,KAAKq3H,aACN5yH,QAAQC,IAAI,mDAAqD1E,KAAK22H,WACtE32H,KAAKumB,QACT,EACH,KAEOqxG,WAAa,KAOjB53H,KAAKm3H,qBAAqBx8G,KAAK88G,YAAY56D,MAAQ78D,KAAKg3H,qBACxDh3H,KAAKm2H,eAAc,GACnBn2H,KAAK+2H,eAAejB,SACpBrxH,QAAQC,IAAI,2BAA6B1E,KAAK22H,UAAU,EAC3D,KAEOkB,SAAYnpH,IAChB1O,KAAKk2H,cAAa,GAClBzxH,QAAQkK,MAAM,oBAAqBD,GACnC1O,KAAK83H,KAAK,QAAS,mBAAmB,EACzC,KAEOC,iBAAmB,KACvBtzH,QAAQkK,MAAM,oCAAsC3O,KAAK22H,WAEzD32H,KAAKq2H,qBAAoB,GACzBr2H,KAAKm2H,eAAc,GACnBn2H,KAAK83H,KAAK,OAAQ,sBAClB93H,KAAK02H,UAAU7tG,UAAU4tB,wBAAwBz2C,KAAKu3H,iBAAkB,WAAYrjD,GAAAA,GAAkCjE,MAAOjwE,KAAK22H,UAAUx3H,WAAW,EAC1J,KAEO64H,gBAAkB,KACtBh4H,KAAKk2H,cAAa,EAAK,GA9JvBl9G,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK82H,YAAcR,EACnBt2H,KAAK42H,gBAAkBL,EACvBv2H,KAAK62H,cAAgBL,EACrBx2H,KAAK22H,UAAY5hH,EACjB/U,KAAKs3H,kBAAoBb,EAEzBz2H,KAAK+2H,eAAiB,IAAIxB,IAAc,KACpCv1H,KAAK6nC,yBAAyB,GAC/B4uF,GAEH3mH,OAAO+uB,iBAAiB,UAAW7+B,KAAKg4H,iBACxCh4H,KAAK42H,gBAAgB/3F,iBAAiB,UAAW7+B,KAAKw3H,YACtDx3H,KAAK42H,gBAAgB/3F,iBAAiB,UAAW7+B,KAAK03H,YACtD13H,KAAK42H,gBAAgB/3F,iBAAiB,UAAW7+B,KAAK43H,YACtD53H,KAAK42H,gBAAgB/3F,iBAAiB,QAAS7+B,KAAK63H,SACxD,CAEA,kBAAItB,GACA,OAAOv2H,KAAK42H,eAChB,CAEA,gBAAIJ,GACA,OAAOx2H,KAAK62H,aAChB,CAEAvmG,IAAAA,GACStwB,KAAK2rD,wBACN3rD,KAAKq3H,YAAa,EAClBr3H,KAAKg3H,oBAAsBS,YAAY56D,MACvCp4D,QAAQC,IAAI,sBAAwB1E,KAAK22H,WACzC32H,KAAK42H,gBAAgBtmG,OAChB/O,MAAK,KACFvhB,KAAKq2H,qBAAoB,GACzB5xH,QAAQC,IAAI,+BAAiC1E,KAAK22H,UAAU,IAE/D74D,OAAMnvD,IACgB,oBAAfA,EAAMoX,KAEN/lB,KAAK+3H,mBAEL/3H,KAAK63H,SAASlpH,EAClB,IAGJ3O,KAAKk3H,mBACLl3H,KAAKk3H,kBAAmB,EACxBl3H,KAAK83H,KAAK,OAAQ,QAClB93H,KAAK02H,UAAU7tG,UAAU4tB,wBAAwBz2C,KAAKu3H,iBAAkB,UAAWrjD,GAAAA,GAAkC+jD,cAAej4H,KAAK22H,UAAUx3H,aAG/J,CAEAonB,KAAAA,GACIvmB,KAAKq3H,YAAa,EAElB5yH,QAAQC,IAAI,qBAAuB1E,KAAK22H,WAIpC32H,KAAKo3H,kBACLp3H,KAAK42H,gBAAgBrwG,QACrB9hB,QAAQC,IAAI,iBAAmB1E,KAAK22H,YAGxC32H,KAAK+2H,eAAexwG,QACpBvmB,KAAKk4H,iCACT,CAEArtE,IAAAA,GACI7qD,KAAK42H,gBAAgB/rE,MACzB,CAEAstE,WAAAA,CAAYxpH,GACR3O,KAAK63H,SAASlpH,EAClB,CAEAk5B,uBAAAA,GACI7nC,KAAK42H,gBAAgBrwG,QACrBvmB,KAAKo2H,2BAA0B,GAC/Bp2H,KAAKo4H,gCACLp4H,KAAK02H,UAAU7tG,UAAU4tB,wBAAwBz2C,KAAKu3H,iBAAkB,cAAc,wBAAD33H,OAA0BI,KAAKs3H,kBAAoB,KAAQt3H,KAAK22H,UAAUx3H,WACnK,CAEAwrD,OAAAA,GACI3qD,KAAK+2H,eAAepsE,UACpB3qD,KAAK+2H,eAAiB,KAEtBjnH,OAAOw7B,oBAAoB,UAAWtrC,KAAKg4H,iBAC3Ch4H,KAAK42H,gBAAgBtrF,oBAAoB,UAAWtrC,KAAKw3H,YACzDx3H,KAAK42H,gBAAgBtrF,oBAAoB,UAAWtrC,KAAK03H,YACzD13H,KAAK42H,gBAAgBtrF,oBAAoB,UAAWtrC,KAAK43H,YACzD53H,KAAK42H,gBAAgBtrF,oBAAoB,QAAStrC,KAAK63H,UACvD73H,KAAK42H,gBAAkB,IAC3B,CAEA5qE,WAAAA,CAAYviD,EAAgBwO,GACxBjY,KAAK83H,KAAKruH,EAAMwO,EACpB,CA8DQogH,qBAAAA,GACJ,OAAOr4H,KAAKm3H,qBAAqBlpE,QAAO,CAACqqE,EAAWp0E,IACzCo0E,EAAYp0E,GACpB,EACP,CAEQg0E,+BAAAA,GACJ,MACMvhG,EAA6B,CAC/BrM,KAFoBtqB,KAAKq4H,wBAEDr4H,KAAKm3H,qBAAqBj3H,QAGtDF,KAAK83H,KAAK,OAAQ,mBAAoBnhG,EAC1C,CAEQyhG,6BAAAA,GACJ,MACMzhG,EAA6B,CAC/BrM,KAFoBtqB,KAAKq4H,wBAEDr4H,KAAKm3H,qBAAqBj3H,OAClDq4H,WAAYv4H,KAAKm3H,qBAAqBj3H,QAG1CF,KAAK83H,KAAK,OAAQ,mBAAoBnhG,EAC1C,CAEQghG,0BAAAA,GACJ,IAAK33H,KAAKi3H,qBAAsB,CAC5B,MACMuB,EAA2B,CAC7BluG,KAFkBmtG,YAAY56D,MAAQ78D,KAAKg3H,qBAI/Ch3H,KAAKi3H,sBAAuB,EAC5Bj3H,KAAK83H,KAAK,OAAQ,YAAaU,GAC/Bx4H,KAAK02H,UAAU7tG,UAAU4tB,wBAAwBz2C,KAAKu3H,iBAAkB,OAAQrjD,GAAAA,GAAkC+jD,cAAej4H,KAAK22H,UAAUx3H,WACpJ,CACJ,CAEUs5H,gBAAAA,CAAiBC,EAAuBC,GAC9C,IAAK34H,KAAK42H,gBAAgB1xG,OAAQ,CAK9B,GAD2BwzG,EAAcC,EAlQf,GAmQsB,CAI5C,MAAMC,EAAmC,CACrCF,cAAeA,EACfG,YAAaF,GAEjB34H,KAAK83H,KAAK,OAAQ,UAAWc,EACjC,CACJ,CACJ,CAEUd,IAAAA,CAAKruH,EAAgBwO,GAAuF,IAAvE0e,EAA6D12B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KACvG64H,EAAkB94H,KAAK02H,UAAUrzC,IAAI4xC,yBAChBC,YACAC,YAAYn1H,KAAK02H,UAAUrgD,kBAAkBpqB,YAC7CmpE,UAAUn9G,GACV8gH,SAAS/4H,KAAK82H,aACdkC,SAASh5H,KAAK22H,UAAUx3H,YAMjD,GAJK4F,EAAAA,MAAMkP,kBAAkB0iB,IACzBmiG,EAAgBG,cAActiG,GAIzB,UADDltB,EAEAqvH,EAAgBnqH,aAIhBmqH,EAAgBzD,MAG5B,GACH78G,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAnRuB,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,gBAAAtJ,GAAAsJ,WAAA3D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAQJ,CAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iBAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,iBAAAtJ,GAAAsJ,WAAAsI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,yBAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAQQ,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,6BAAAkI,IAAA7H,OAAAC,yBAAA5J,GAAAsJ,UAAA,6BAAAtJ,GAAAsJ,WAAAqM,IAAAtM,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAolC,IAAA,CAAAnlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAQX,CAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAAqlC,IAAAhlC,OAAAC,yBAAA5J,GAAAsJ,UAAA,uBAAAtJ,GAAAsJ,WAAAtJ,IC3B5B,MAAMomH,WAA+BjD,GASxC,kBAAclC,CAAYoF,GACtB,MACMC,EAAqBD,EAAQE,YA9BZ,iCAgCvB,MAH0B,CAAC,WAAY,SAGdn8G,SAASk8G,EACtC,CAEArmH,WAAAA,CAAYvH,EAAmCuJ,EAAkBwhH,EAAkCC,EAAqBC,GACpHr+G,MAAM,SAAUrD,EAAUwhH,EAAgBC,EAAcC,EAAgBjrH,GAAU,KAhB9E8tH,cAAgB,KAAK,KACrBC,cAAgB,EAAE,KAElBC,kCAA4C,EAAM,KAClDC,yBAAmC,EAAE,KACrCC,yBAAmC,EAAE,KACrCC,WAAqB,EAAE,KAyDvBC,QAAU,KAGd,GAAuC,IAAnC55H,KAAKu2H,eAAel/E,WACpB,OAGJ,MAAMwiF,EAAc75H,KAAKu2H,eAAesD,YACpCA,IAAgB75H,KAAKu5H,eAErBv5H,KAAKu5H,cAAgBM,EACjB75H,KAAKyrD,WAGLzrD,KAAK03H,cAIJ13H,KAAKyrD,WAGNzrD,KAAKw3H,aAIbx3H,KAAK25H,aA1FsB,KA2FvB35H,KAAK25H,aACL35H,KAAK25H,WAAa,EAClB35H,KAAK85H,oBACT,EA1EI/0H,EAAAA,MAAMg1H,WAAWxD,EAAeyD,2BAChCh6H,KAAKw5H,kCAAmC,EAEhD,CAEAlpG,IAAAA,IACQvrB,EAAAA,MAAMiP,QAAQhU,KAAKu2H,eAAeniH,MAAQpU,KAAKu2H,eAAeniH,MAAQpU,KAAKw2H,gBAC3Ex2H,KAAKu2H,eAAeniH,IAAMpU,KAAKw2H,cAE9Bx2H,KAAK2rD,uBACN3rD,KAAKi6H,eAET7hH,MAAMkY,MACV,CAEA/J,KAAAA,GACIvmB,KAAKk6H,iBACL9hH,MAAMmO,OACV,CAEAshB,uBAAAA,GACIzvB,MAAMyvB,0BACN7nC,KAAKk6H,gBACT,CAEAvvE,OAAAA,GACI3qD,KAAKk6H,iBACLl6H,KAAKw5H,kCAAmC,EAExCphH,MAAMuyC,SACV,CAEQsvE,YAAAA,GACCj6H,KAAKs5H,gBACNt5H,KAAKs5H,cAAgBhnG,YAAYtyB,KAAK45H,QAzD5B,KA2DlB,CAEQM,cAAAA,GACAl6H,KAAKs5H,gBACLvtG,cAAc/rB,KAAKs5H,eACnBt5H,KAAKs5H,cAAgB,KAE7B,CAkCQQ,iBAAAA,GAEJ,GAAI95H,KAAKu2H,eACL,GAAIv2H,KAAKw5H,iCAAkC,CACvC,MAAMW,EAAuBn6H,KAAKu2H,eAAeyD,0BACjDh6H,KAAKo6H,UACDD,EAAqBE,mBACrBF,EAAqBG,iBAE7B,MAEIt6H,KAAKo6H,UACAp6H,KAAKu2H,eAAuBgE,wBAC5Bv6H,KAAKu2H,eAAuBiE,wBAI7C,CAEQJ,SAAAA,CAAU1B,EAAuBC,GAErC,MAAM8B,EAAiB/B,EAAgB14H,KAAKy5H,yBACtCiB,EAAiB/B,EAAgB34H,KAAK05H,yBAE5C15H,KAAKy4H,iBAAiBgC,EAAgBC,GAEtC16H,KAAKy5H,yBAA2Bf,EAChC14H,KAAK05H,yBAA2Bf,CACpC,E,gBC9IG,MAAMgC,WAA2B1E,GAapC,kBAAclC,GACV,OAAO6G,GAAAA,GAAAA,aACX,CAEA7nH,WAAAA,CAA+BvH,EAAmCuJ,EAAkBwhH,EAAkCC,EAAsBC,GACxIr+G,MAAM,MAAOrD,EAAUwhH,EAAgBC,EAAcC,EAAgBjrH,GAAU,KADpDA,SAAAA,EAAiC,KAhBtDqvH,kBAAY,OACZC,mBAA6B,EAAM,KACrCC,cAA+B,CACnCn6G,IAAKhH,OAAOohH,UACZjnF,IAAKn6B,OAAOqhH,WACf,KAEkBC,YAAUh2H,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACtB01H,GAAAA,GAAIO,eAAa,IACpBC,mBAAmB,IAAI,KA8BjBC,YAAc,CAACr0G,EAAqBkD,KAC1C,MAAM,MAACoxG,GAASpxG,EACZoxG,IACAt7H,KAAK66H,aAAalwE,UAClB3qD,KAAKm4H,YAAYjuG,GACrB,EACH,KAESqxG,iBAAmB,CAACv0G,EAA8BkD,KACxDlqB,KAAK66H,aAAaW,WAAWx7H,KAAKw2H,aAAa,EAClD,KAESiF,kBAAoB,CAACz0G,EAA+BkD,KAC1D9R,MAAMkY,OACNtwB,KAAK86H,mBAAoB,CAAI,EAChC,KAESY,gBAAkB,CAAC10G,EAA6BkD,KACtD,MAAMyxG,EAAiB37H,KAAK66H,aAAae,OAAO1xG,EAAK2xG,OAAOC,QACxDH,EAAiB37H,KAAK+6H,cAAcn6G,MACpC5gB,KAAK+6H,cAAcn6G,IAAM+6G,GAEzBA,EAAiB37H,KAAK+6H,cAAchnF,MACpC/zC,KAAK+6H,cAAchnF,IAAM4nF,EAC7B,EACH,KAESI,WAAa,CAAC/0G,EAAwBkD,KAQ5ClqB,KAAKy4H,iBAAiBvuG,EAAKuwG,eAAgBvwG,EAAKwwG,eAAe,EAClE,KAESsB,qBAAuB,CAACh1G,EAA2BkD,KACzDlqB,KAAKwL,SAASy8B,qBAAqB6sF,qBAAqB90H,KAAK66H,aAAa9F,kBAAkB,CA5DhG,CAEAltF,uBAAAA,GACIzvB,MAAMyvB,0BACN7nC,KAAK66H,aAAaoB,WAClBj8H,KAAK83H,KAAK,OAAQ,qBAAsB93H,KAAK+6H,cACjD,CAEApwE,OAAAA,GAAW,IAADuxE,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACW,QAAjBN,EAAAl8H,KAAK66H,oBAAY,IAAAqB,GAAjBA,EAAmBtwG,IAAIgvG,GAAAA,GAAAA,OAAW6B,MAAOz8H,KAAKq7H,aAC7B,QAAjBc,EAAAn8H,KAAK66H,oBAAY,IAAAsB,GAAjBA,EAAmBvwG,IAAIgvG,GAAAA,GAAAA,OAAW8B,eAAgB18H,KAAKu7H,kBACtC,QAAjBa,EAAAp8H,KAAK66H,oBAAY,IAAAuB,GAAjBA,EAAmBxwG,IAAIgvG,GAAAA,GAAAA,OAAW+B,gBAAiB38H,KAAKy7H,mBACvC,QAAjBY,EAAAr8H,KAAK66H,oBAAY,IAAAwB,GAAjBA,EAAmBzwG,IAAIgvG,GAAAA,GAAAA,OAAWgC,cAAe58H,KAAK07H,iBACrC,QAAjBY,EAAAt8H,KAAK66H,oBAAY,IAAAyB,GAAjBA,EAAmB1wG,IAAIgvG,GAAAA,GAAAA,OAAWiC,SAAU78H,KAAK+7H,YAChC,QAAjBQ,EAAAv8H,KAAK66H,oBAAY,IAAA0B,GAAjBA,EAAmB3wG,IAAIgvG,GAAAA,GAAAA,OAAWkC,YAAa98H,KAAKg8H,sBAEnC,QAAjBQ,EAAAx8H,KAAK66H,oBAAY,IAAA2B,GAAjBA,EAAmB7xE,UACnBvyC,MAAMuyC,SAEV,ECxCG,MAAMoyE,WAA4BpC,GAErCrqG,IAAAA,GACQtwB,KAAK66H,cACL76H,KAAK66H,aAAamC,YAClB5kH,MAAMkY,QAENtwB,KAAK66H,aAAe76H,KAAKi9H,oBAEjC,CAEA12G,KAAAA,GAAS,IAAD21G,EACJ9jH,MAAMmO,QACW,QAAjB21G,EAAAl8H,KAAK66H,oBAAY,IAAAqB,GAAjBA,EAAmBD,UACvB,CAEQgB,kBAAAA,GACJ,MAAMC,EAAc,IAAItC,GAAAA,GAAI56H,KAAKk7H,YAajC,OAXAgC,EAAYC,GAAGvC,GAAAA,GAAAA,OAAW6B,MAAOz8H,KAAKq7H,aACtC6B,EAAYC,GAAGvC,GAAAA,GAAAA,OAAW8B,eAAgB18H,KAAKu7H,kBAC/C2B,EAAYC,GAAGvC,GAAAA,GAAAA,OAAWgC,cAAe58H,KAAK07H,iBAC9CwB,EAAYC,GAAGvC,GAAAA,GAAAA,OAAWiC,SAAU78H,KAAK+7H,YACzCmB,EAAYC,GAAGvC,GAAAA,GAAAA,OAAWkC,YAAa98H,KAAKg8H,sBAC5CkB,EAAYnI,kBAAqB/0H,KAAKwL,SAASy8B,qBAAqB8sF,kBAEpEmI,EAAYC,GAAGvC,GAAAA,GAAAA,OAAW+B,gBAAiB38H,KAAKy7H,mBAEhDyB,EAAYE,YAAYp9H,KAAKu2H,gBAEtB2G,CACX,EC1BG,MAAMG,WAAiCxJ,GAAwB9gH,WAAAA,GAAA,SAAA9S,WAAA,KAE3DgsD,WAAa,mBAAoB,CAE9B+oE,iBAAAA,GACN,MAAMmE,EAAUnrH,SAASsvH,cAAc,SACvC,IACI,QAAIpE,GAAuBnF,YAAYoF,IAIhC4D,GAAoBhJ,aAC/B,CAAC,QAEG,IACIoF,EAAQ/kH,IAAM,GACd+kH,EAAQtuE,OACRsuE,EAAQoE,QACZ,CAAE,MAAO7uH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,kEAAmED,EAClG,CACJ,CAEJ,CAEA67C,cAAAA,CAAet3C,EAAoBsjH,EAAkCiH,GAEjE,MAAMzoH,EAAW9B,EAAS8B,SACpByhH,EAAevjH,EAASk5E,SAE3Bl5E,EAAS67E,aACRynC,EAAe3rE,OAAS33C,EAAS67E,YAIrC,MAAM2nC,EArCsC,KAwC5C,OAAIyC,GAAuBnF,YAAYwC,KAAoBv2H,KAAKwL,SAASqI,OAAOmI,GAAGwa,UACxE,IAAI0iG,GAAuBl5H,KAAKwL,SAAUuJ,EAAUwhH,EAAgBC,EAAcC,GAGzFsG,GAAoBhJ,cACb,IAAIgJ,GAAoB/8H,KAAKwL,SAAUuJ,EAAUwhH,EAAgBC,EAAcC,GAGnF,IACX,ECrDG,MAAMgH,GACT1qH,WAAAA,CAA6B2qH,EACDtlF,EACCulF,GAAoB,KAFpBD,mBAAAA,EAAuC,KACxCtlF,eAAAA,EAAsB,KACrBulF,YAAAA,CAC7B,CAEA,eAAI/nH,GACA,OAAO5V,KAAK09H,mBAAmB7nH,UAAU7V,KAAKo4C,eAAgBp4C,KAAK29H,YACvE,ECLG,MAAMC,WAA2Bl/C,EAAAA,EAEtC,YAAIm/C,GACF,OAAO79H,KAAKwL,SAASyiB,SAAS6vG,eAChC,CAEAjoH,SAAAA,CAAUiF,EAAaijH,GACrB,IACE,IAAIC,EAAmB,GAEvB,GAAIh+H,KAAK69H,UAAoB,KAAR/iH,EAAY,CAC/B,IAAI9a,KAAK69H,SAAS/iH,GAMhB,OAFA9a,KAAKwL,SAAS2L,OAAO+0E,MAAM,2BAADtsF,OAA4Bkb,EAAG,iBAAAlb,OAAgBI,KAAKwL,SAASyiB,SAAS02D,kBAEzF7pE,EALPkjH,EAAmBh+H,KAAK69H,SAAS/iH,EAOrC,CACA,OAAO9a,KAAKi+H,eAAeD,EAAkBD,EAC/C,CAAE,MAAOrvH,GAEP,OADAjK,QAAQC,IAAI,gDAAiDgK,GACtD,EACT,CACF,CAEAwvH,cAAAA,CAAepjH,EAAaijH,GAC1B,OAAO,IAAIN,GAAgBz9H,KAAM8a,EAAMijH,EACzC,CAEQE,cAAAA,CAAellD,GAA4B,IAAfjvE,EAAK7J,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAE1C,GAAG,KAAO84E,EACR,OAAOA,EAET,GAAIh0E,EAAAA,MAAMqoH,SAAStjH,GACf2S,OAAOspC,KAAKj8C,GAAO8hD,SAAQ9wC,GAAOi+D,EAAMA,EAAIC,QAAQ,IAADp5E,OAAKkb,EAAG,KAAKhR,EAAMgR,UAErE,CAEH,IAAIqjH,EAAaplD,EAAIkb,MAAM,iBAAmB,GAE9C,IAAK,IAAImqC,KAAaD,EAElBplD,EADEjvE,EACIivE,EAAIC,QAAQ,IAADp5E,OAAKw+H,EAAS,KAAKt0H,GAG9BivE,EAAIC,QAAQ,IAADp5E,OAAKw+H,EAAS,KAAKp+H,KAAKwL,SAASye,cAAco0G,0BAA0BD,GAIhG,CACE,OAAOrlD,CAEX,EC5DK,MAAMulD,GAA2C,CACpDC,IAAK,KACLC,IAAK,MACLC,IAAK,IACLC,IAAK,SACLC,IAAK,OACLC,IAAK,MACLC,IAAK,KACLC,IAAK,MACLC,IAAK,MCLF,MAAMC,WAAwBtgD,EAAAA,EAEnCzpE,WAAAA,CAAYnL,EAAem1H,GACzB,OAAOj/H,KAAKwL,SAAS63E,IAAIpuE,YAAYnL,EAAOm1H,EAC9C,CAIA/wD,eAAAA,CAAgBC,EAAgBC,GAC9B,OAAGD,GAAUC,EACJpuE,KAAKiV,YAAYk5D,GAAQ,GAAQ,MAAQnuE,KAAKiV,YAAYm5D,GAAQ,GAElE,IAEX,CAEA,gBAAI4W,GACF,OAAOhlF,KAAKwL,SAAS63E,IAAI67C,iBAC3B,CAEA,qBAAIrnE,GACF,OAAOymE,GAAiBt+H,KAAKglF,eAAiBhlF,KAAKglF,YACrD,ECVK,MAAMm6C,WAAyBzgD,EAAAA,EAEpC9iD,aAAAA,CACE5S,GAKC,IAJD/Q,EAA0BhY,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,QAAGE,EAC7Bm6B,EAAyBr6B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,QAAGE,EAC5B2J,EAAyB7J,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,QAAGE,EAC5Bi/H,EAA8Bn/H,UAAAC,OAAA,EAAAD,UAAA,QAAAE,EAE9BH,KAAKwL,SAAS63E,IAAIznD,cAAc5S,EAAU/Q,EAAQqiB,EAAOxwB,EAAOs1H,EAClE,CAGAC,kBAAAA,CAAmBpnH,EAAgBqiB,EAAgBxwB,GACjD9J,KAAK47B,cAAc,oBAAqB3jB,EAAQqiB,EAAOxwB,EACzD,CAEAi8B,sBAAAA,CAAuB/c,EAAmD/Q,EAAsCqiB,EAA8CxwB,GAC5J,IACE,IAAIogB,EAA+B,CACjCnB,UAAU,kBACVC,SAASA,EACT/Q,OAAOA,EACPqiB,MAAMA,EACNxwB,MAAOA,GAET9J,KAAK8oB,qBAAqBoB,GAAM,EAClC,CACA,MAAOxb,GACLjK,QAAQC,IAAI,2CAA6CgK,EAC3D,CACF,CAEA+nC,uBAAAA,CAAwBztB,EAAyD/Q,EAA4CqiB,EAAoDxwB,GAC/K,IACE,IAAIogB,EAA+B,CACjCnB,UAAU,kBACVC,SAASA,EACT/Q,OAAOA,EACPqiB,MAAMA,EACNxwB,MAAMA,GAER9J,KAAK8oB,qBAAqBoB,GAAM,EAClC,CACA,MAAOxb,GACLjK,QAAQC,IAAI,4CAA8CgK,EAC5D,CACF,CAEA4wH,uBAAAA,CAAwBt2G,EAAoD/Q,EAAuCqiB,EAAgBxwB,GACjI,IACE,IAAIogB,EAAiC,CACnCnB,UAAW,mBACXC,SAAUA,EACV/Q,OAAQA,EACRqiB,MAAOA,EACPxwB,MAAOA,GAET9J,KAAK8oB,qBAAqBoB,GAAM,EAClC,CAAE,MAAOxb,GACPjK,QAAQC,IAAI,4CAA8CgK,EAC5D,CACF,CAEAoa,oBAAAA,CAAqBziB,EAAmCk5H,GACtD,MAAMpoH,EAA4BnX,KAAKwL,SAAS63E,IAAI4xC,yBACjDC,YACAC,YAAY9uH,EAAQ2iB,UACpBosG,UAAU/uH,EAAQ4R,QAClB8gH,SAAS1yH,EAAQi0B,OACjB0+F,SAAS3yH,EAAQyD,OACjBmvH,cAAc5yH,EAAQswB,YAEpB5xB,EAAAA,MAAMkP,kBAAkB5N,EAAQqwB,QACnCvf,EAAOqoH,SAASn5H,EAAQqwB,OAGtB6oG,EACFpoH,EAAOsoH,aAAap5H,EAAQ0iB,UAAU,MAAO,aAG7C5R,EAAOsoH,aAAap5H,EAAQ0iB,UAAW,OAGzC5R,EAAOk+G,MACT,CAEAH,SAAAA,CAAUp1F,GACR,OAAO9/B,KAAKwL,SAAS63E,IAAI4xC,yBAAyBC,UAAUp1F,EAC9D,CAEAolD,iBAAAA,GACE,OAAOllF,KAAKwL,SAAS63E,IAAI6B,mBAC3B,CAEA,qBAAMw6C,CAAgBC,SACd3/H,KAAKwL,SAAS63E,IAAIq8C,gBAAgBC,EAC1C,E,gBCjHK,MAAMC,GAAwC,mB,kCCS9C,IAAMC,IAAYhoH,GAqBtBC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKF,GAUZF,EAAAA,GAAWxK,IAAG8W,GAEdnM,EAAAA,GAAOC,MAAKmM,GAKZvM,EAAAA,GAAWxK,IAAGgX,GAMdrM,EAAAA,GAAOC,MAAKpF,GA/CR,cAA2B4rE,EAAAA,EAEhC3rE,WAAAA,CAAY+sH,GACV1nH,MAAM0nH,IAAgBvnH,EAAAA,EAAAA,GAAA,sBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,gBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,2BAAAmM,GAAA,WA6FhBq7G,uBAAwC/kG,QAAQC,UAAU,KA2H1D+kG,iBAA2B,GAAG,KAC9BC,+BAAyC,EAAE,KAC3CC,iCAA2C,IAAI,KAC/CC,iCAA2C,IAAK,KAChDC,YAAoB,IAAItjE,KAAK,4BA1NnC9jD,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKyP,UACH,IAAMzP,KAAKwL,SAASkE,KAAKC,eACzB,KACE3P,KAAK+/H,uBAAyB//H,KAAKqgI,iBAAiB,GAEtD,CACEnkH,iBAAiB,IAGrBlc,KAAKwL,SAAS63E,IAAIoxC,OAAO6L,6BAA6BtgI,KAAKugI,4BAC3DvgI,KAAKwgI,uBACP,CAOQC,sBAAAA,CAAuBC,GAC7B1gI,KAAK2gI,eAAiBD,CACxB,CAEQF,qBAAAA,GACN,IAAII,EAAyB5gI,KAAKwL,SAASoyC,aAAaijF,QAAkBjB,IAC1E5/H,KAAKygI,uBAAuB17H,EAAAA,MAAMkP,kBAAkB2sH,GAA0B,GAAKA,EACrF,CAKQE,YAAAA,CAAa1lH,GACnBpb,KAAKob,SAAWA,CAClB,CASQmlH,0BAAAA,CAA2B3T,GAC7B5sH,KAAK+gI,oBAAoBC,eACrBhhI,KAAKwL,SAAS63E,IAAI49C,WAAWC,eAAelhI,KAAK+gI,oBAAoBnU,UAAWA,KACtF5sH,KAAK+gI,oBAAsB,CACvBC,eAAe,EACfpU,UAAWA,GAGnB,CAIA,oBAAcuU,CAAeC,GAG3B,IAAIhmH,EAAqB,CAAC,EAE1B,MAAMimH,EAAyBrhI,KAAKwL,SAASye,cAAc67F,oBAAoB73D,QAAO,CAACsvB,EAAa+jD,KAChG/jD,EAAY+jD,IAAM,EACX/jD,IACR,CAAC,GAwBJ,OAtBA9gE,OAAOspC,KAAKq7E,GAAcx1E,SAAQ72C,IAChC,IAEE,GAAIssH,EAAuBtsH,GAAW,CAClC,IAAIwsH,EAAUH,EAAarsH,GACvBk6C,EAAkBjvD,KAAKwL,SAASye,cAAcC,KAAK+kC,gBACnDuyE,EAAevyE,GAAmBA,EAAgBw+D,eAAiBx+D,EAAgBw+D,cAAcC,WAAaz+D,EAAgBw+D,cAAcC,UAAU34G,IAAc,CAAC,EAIrK0sH,EAAchlH,OAAOilH,OAAOH,EAASC,GACrCvuH,EAAW,IAAI42E,GAAAA,EAAS43C,EAAazhI,KAAKwL,UAE9C4P,EAASnI,EAAS8B,UAAY9B,CAElC,CACF,CAAE,MAAMvE,GACN1O,KAAKwL,SAAS2L,OAAOxI,MAAM,6CAAD/O,OAA8CmV,GAAYrG,EACtF,KAIK0M,CACT,CAKAumH,wBAAAA,GACE,OAAO3hI,KAAK+/H,sBACd,CAEA,qBAAcM,GACZ,IAAIva,EAAsB9lH,KAAKwL,SAASye,cAAc67F,qBAAuB,GAC7E,GAAkC,IAA/BA,EAAoB5lH,OAErB,YADAF,KAAKwL,SAAS2L,OAAOxI,MAAM,0DAI7B,MAAMyM,QAAiBpb,KAAK4hI,iBAAiB9b,GAE7C9lH,KAAK8gI,aAAa1lH,EACpB,CAEA,sBAAMwmH,CAAiBhV,GACrB,IACE,IAAIwU,QAAqBphI,KAAKwL,SAAS63E,IAAIw+C,aAAajV,GAExD,aAAa5sH,KAAKmhI,eAAeC,EACnC,CAAE,MAAO1yH,GAEP,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,uDAAwDD,GAC5E,CAAC,CACV,CACF,CAEC,qBAAMozH,CAAgBlV,GACrB,IAAKA,GAAkC,IAArBA,EAAU1sH,OACxB,MAAO,CAAC,EAIZ,GAAIuc,OAAOspC,KAAK/lD,KAAKob,UAAUlb,OAAS,EAAG,CAGvC,OAFqB0sH,EAAUntG,QAAQ6hH,GAAOthI,KAAKob,SAASkmH,KAChCrzE,QAAO,CAACC,EAAKozE,KAAQpzE,EAAIozE,GAAMthI,KAAKob,SAASkmH,GAAYpzE,IAAO,CAAC,EAEjG,CAEI,OAAOluD,KAAK4hI,iBAAiBhV,EAEnC,CAEA,4BAAMmV,CAAuBnV,GAC3B,IAAIwU,QAAqBphI,KAAKwL,SAAS63E,IAAI0+C,uBAAuBnV,GAE9DxxG,EAAqB,CAAC,EAKxB,OAJAqB,OAAOspC,KAAKq7E,GAAcx1E,SAAQ72C,IAC9B,IAAI0sH,EAAchlH,OAAOilH,OAAON,EAAarsH,GAAW/U,KAAKob,SAASrG,IACtEqG,EAASrG,GAAY,IAAI80E,GAAAA,EAAS43C,EAAazhI,KAAKwL,SAAS,IAE1D4P,CACX,CAEA,uBAAM4mH,CAAkBpV,GACtB,IAAIxxG,QAAiBpb,KAAK8hI,gBAAgBlV,GAE1C,MAAMl3D,EAAqB,GAC3B,IAAI,IAAIpwD,EAAI,EAAGA,EAAIsnH,EAAU1sH,OAAQoF,IAAK,CACxC,MAAMyP,EAAW63G,EAAUtnH,GACvB8V,EAASrG,IACX2gD,EAAO/6C,KAAKS,EAASrG,GAEzB,CACA,OAAO2gD,CACT,CAEA,iBAAMusE,CAAYltH,GAChB,MAAMqG,QAAiBpb,KAAK8hI,gBAAgB,CAAC/sH,IAC7C,OAAGqG,EACMA,EAASrG,GAET,IAEX,CAEA,wBAAMmtH,CAAmBntH,EAAkBotH,GACzC,IACE,aAAaniI,KAAKwL,SAAS63E,IAAI6+C,mBAAmBntH,EAAUotH,EAC9D,CAAE,MAAOzzH,GAEP,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,6DAAD/O,OAA8DmV,GAAYrG,GAC7F,EACT,CACF,CAEAg4D,yBAAAA,CAA0BrrD,EAA0B6qC,GAClD,OAAI7qC,EACE6qC,EACK,CACLxkD,MAAO,IACPL,OAAQ,KAGL,CACLK,MAAO,IACPL,OAAQ,KAIL,CACLK,MAAO,IACPL,OAAQ,IAEZ,CAEA+gI,QAAAA,CAASrtH,GACP,GAAI/U,KAAK2gI,eAAer9F,QAAQvuB,IAAa,EAC3C,OAGF,IAAI2rH,EAA0B,CAAC3rH,KAAa/U,KAAK2gI,gBAAgBhgH,MAAM,EAAG3gB,KAAKggI,kBAC/EhgI,KAAKwL,SAASoyC,aAAaykF,QAAQzC,GAA+Bc,GAClE1gI,KAAKygI,uBAAuBC,EAC9B,CAEA4B,eAAAA,CAAgBvtH,GACd,IAAI2rH,EAA0B1gI,KAAK2gI,eAAelhH,QAAO6hH,GAAMA,IAAOvsH,IACtE/U,KAAKwL,SAASoyC,aAAaykF,QAAQzC,GAA+Bc,GAClE1gI,KAAKygI,uBAAuBC,EAC9B,CAUO6B,gCAAAA,CAAiCxtH,GACtC,IAAIytH,EAAOxiI,KAAKwL,SAASu1C,MAAM0hF,QAAQ1tH,EAAS5V,YAE5CujI,EAAiBrsH,KAAKsD,QAAO,IAAImjD,MAAOlpB,UAAY5zC,KAAKogI,YAAYxsF,WAAW,OAIpF,OAFev9B,KAAKuoG,IAAI4jB,IAASxiI,KAAKmgI,iCAAmCngI,KAAKkgI,kCAAoClgI,KAAKkgI,iCAEpGwC,EAAiB1iI,KAAKigI,8BAC3C,CAEA,6BAAa0C,GACX,MAAMC,EAAuD,CAC3DrjH,QAASvf,KAAK2gI,eACdl0H,SAAS,EACThE,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,kBAC3CwF,gBAAgB,eAGLrb,KAAKwL,SAASq3H,mBAAmB11H,WAAWy1H,EAC3D,GACDpqH,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAjO4B,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,0BAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,0BAAAtJ,GAAAsJ,WAAA3D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAaR,CAAC,CAAE,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,gBAAAtJ,GAAAsJ,WAAAsI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAOoB,CACvCwkH,eAAe,EACfpU,UAAW,GACb,KAADzwG,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,8BAAAkI,IAAA7H,OAAAC,yBAAA5J,GAAAsJ,UAAA,8BAAAtJ,GAAAsJ,WAAAtJ,I,ICjDEgwH,G,qBAwDL,SAASC,GACPC,EACAC,EACAC,GAEA,IAAIC,EAAwB,GAgB5B,OAfIH,EAAqBC,IAAaD,EAAqBC,GAAUG,MAAMF,IACzEF,EAAqBC,GAAUG,MAAMF,GAAUt3E,SAAQgxB,IAAS,IAADymD,EAC7D,IAAIC,EAA2B,QAAhBD,EAAGzmD,EAAK2mD,gBAAQ,IAAAF,EAAAA,EAAI,CAAC,EAEpCC,EAAY72H,UAAU1H,EAAAA,MAAMkP,kBAAkBqvH,EAAY72H,UAAkB62H,EAAY72H,QAExF,IAAI+U,EAAeqqG,EAA2BjvC,EAAK4mD,UACnDF,EAAY/jH,QAAU,CAAC,EACvB+jH,EAAY/jH,QAAQ0kC,aAAeziC,EAAayiC,aAChDq/E,EAAY/jH,QAAQysG,WAAaxqG,EAAawqG,WAE9CmX,EAAWxoH,KAAK2oH,EAAY,IAIzBH,CACT,EA9Ec,SAATL,GAAAA,EAAS,kBAATA,EAAS,cAATA,EAAS,+BAATA,KAAAA,GAAS,KCaP,IAAMW,IAAqB5rH,GA6D/BC,EAAAA,GAAWxK,IAAGwF,GA7DV,cAAoC4rE,EAAAA,EAIzC3rE,WAAAA,CAAYvH,EAAmCk4H,GAC7CtrH,MAAM5M,GAAU,KAHlBm4H,0BAAoB,GAAAprH,EAAAA,EAAAA,GAAA,YAAAC,GAAA,OAKlBQ,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK2jI,qBAAuBD,EAE5B1jI,KAAK4jI,mBACP,CAEQC,mCAAAA,GACN,MAAO,CACL1hB,MAAOniH,KAAK2jI,qBAAqBxhB,MACjCqJ,iBAAkBA,IAAMxrH,KAAKwL,SAASs4H,SAASC,iBAC/CzZ,gBAAkBsH,GAAgB5xH,KAAKwL,SAASgW,aAAa8oG,gBAAgBsH,GAC7Ez6G,OAAQnX,KAAKwL,SAAS2L,OAE1B,CAEQysH,iBAAAA,GACN,IAAII,EAAqBhkI,KAAK2jI,qBAAqBzhB,MAAMrgG,OACrD7hB,KAAK2jI,qBAAqBxhB,OAASniH,KAAK2jI,qBAAqBxhB,MAAM9yG,QDhCpE,SACL20H,EACAhB,GAGIgB,EAAmBC,WACrBD,EAAmBC,SAASC,WAAanB,GACvCC,EACA7iD,GAAAA,GACA2iD,GAAUqB,UAIVH,EAAmB30H,QACrBoN,OAAOspC,KAAKi+E,EAAmB30H,QAAQu8C,SAAQq3E,IAE5B,eAAbA,IASOA,IAAa7jD,GAAAA,KAQtB4kD,EAAmB30H,OAAO4zH,GAAUmB,gBAAkBrB,GACpDC,EACAC,EACAH,GAAUqB,UAVZH,EAAmB30H,OAAO4zH,GAAUoB,aAAetB,GACjDC,EACAC,EACAH,GAAUwB,OAcd,GAIN,CCdMC,CAAkBP,EAAoBhkI,KAAK2jI,qBAAqBxhB,MAAM9yG,QAGxE,IAAIs4G,EAAU,IAAIuF,EAA+BltH,KAAK6jI,uCAElD35G,EADkBs9F,EAAoBM,SAASkc,EAAoBrc,GAC5CD,SAASC,GACpC3nH,KAAKwkI,4BAA4Bt6G,EAC/B,iBACA,KACE,IAAI0iG,EAAsB,GACtBc,EAAaxjG,EAAK+kC,iBAAmB/kC,EAAK+kC,gBAAgBw+D,eAAiBvjG,EAAK+kC,gBAAgBw+D,cAAcC,WAAc,CAAC,EAOjI,OANAjxG,OAAOmlF,oBAAoB8rB,GAAW9hE,SAAQ01E,IAC5C,IAAIvsH,EAAWgrB,SAASuhG,GACnBmD,MAAM1vH,IACT63G,EAAUjyG,KAAK5F,EACjB,IAEK63G,CAAS,KAIpBhjG,EAAAA,EAAAA,KAAY,KACV5pB,KAAKkqB,KAAOA,CAA0B,GAE1C,CAGQs6G,2BAAAA,CAA4BE,EAAqB7c,EAAsB8c,GAC7EloH,OAAOstE,eAAe26C,EAAY7c,EAAc,CAC9C79B,IAAK26C,EACLtoH,cAAc,GAGlB,CAKA,qBAAIimG,GACF,OAAOtiH,KAAK2jI,qBAAqBrhB,iBACnC,CAEA,oBAAIsiB,GACF,OAAO5kI,KAAK2jI,qBAAqBthB,IAAIiC,aACvC,CAEA,uBAAIwB,GAEF,IAAI+e,GAAY3/H,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOlF,KAAK8kI,2BAA8B9kI,KAAK+kI,yBAA4B/kI,KAAKglI,wCAEhG,OAAOvoH,OAAOonC,OAAOghF,EACvB,CAEQC,uBAAAA,GACN,IAAIpvE,EAAuB,CAAC,EAa5B,OAZC11D,KAAKkqB,KAAK+5G,SAASC,YAAc,IAAIt4E,SAAQq5E,IAC5C,GAAIA,EAAUx4H,QAAS,CACrB,IAAIy4H,EAAWD,EAAU1lH,SAAW,GAChCxa,EAAAA,MAAMgrE,QAAQm1D,IAChBA,EAASt5E,SAAQ72C,IACf2gD,EAAO3gD,GAAYA,CAAQ,GAIjC,KAGK2gD,CACT,CAEQqvE,qBAAAA,GACN,IAAIrvE,EAAuB,CAAC,EA6B5B,OA5BAj5C,OAAOspC,KAAK/lD,KAAKkqB,KAAK7a,QAAQu8C,SAAQr8C,IACpC,IAAI41H,EAAcnlI,KAAKkqB,KAAK7a,OAAOE,IAElC41H,EAAYf,iBAAmB,IAAIx4E,SAAQw5E,IAC1C,GAAIA,EAAa34H,QAAS,CACxB,IAAIy4H,EAAWE,EAAa7lH,SAAW,GACnCxa,EAAAA,MAAMgrE,QAAQm1D,IAChBA,EAASt5E,SAAQ72C,IACf2gD,EAAO3gD,GAAYA,CAAQ,GAIjC,MAIDowH,EAAYd,cAAgB,IAAIz4E,SAAQy5E,IACvC,GAAIA,EAAgB54H,QAAS,CAC3B,IAAIy4H,EAAWG,EAAgB9lH,SAAW,GACtCxa,EAAAA,MAAMgrE,QAAQm1D,IAChBA,EAASt5E,SAAQ72C,IACf2gD,EAAO3gD,GAAYA,CAAQ,GAGjC,IACA,IAGG2gD,CACT,CAGQsvE,oCAAAA,GACN,IAAItvE,EAAuB,CAAC,EAExB4vE,EAAwBtlI,KAAKkqB,KAAK7a,OAAO+vE,GAAAA,IAC7C,IAAKkmD,EACH,OAAO5vE,EAGT,IAAIwvE,EAAWI,EAAsBj2H,QAAUi2H,EAAsBj2H,OAAOkQ,QAExExa,EAAAA,MAAMgrE,QAAQm1D,IAChBA,EAASt5E,SAAQ25E,IACXA,EAAe94H,UACjBipD,EAAO6vE,EAAeC,QAAUD,EAAeC,OACjD,IAMJ,IAAIC,EAAsBH,EAAsBI,cAUhD,OATI3gI,EAAAA,MAAMgrE,QAAQ01D,IAChBA,EAAoB75E,SAAQ4kB,IAC1B,IAAIm1D,EAAgBn1D,EAAYjxD,SAAW,GACvCxa,EAAAA,MAAMgrE,QAAQ41D,IAChBA,EAAc/5E,SAAQ72C,GAAY2gD,EAAO3gD,GAAYA,GACvD,IAIG2gD,CACT,CAEA2oE,yBAAAA,CAA0BuH,GACxB,IAAIC,EAAmB7lI,KAAKkqB,KACxB47G,EAAgBF,EAASvgI,MAAM,KAEnC,IAAK,IAAI+4H,KAAa0H,EACpBD,EAAcA,EAAYzH,GAG5B,OAAQyH,GAA0B,EACpC,CAEA11C,oBAAAA,CAAqB41C,GACnB,GAAIhhI,EAAAA,MAAMiP,QAAQ+xH,GAChB,MAAO,GAGT,IAAIC,EAAiBhmI,KAAK2jI,qBAAqBtgD,IAAIxhE,OAAOigG,gBAAgBC,MAAMkkB,YAChF,GAAID,EAIF,OAHKA,EAAe53C,SAAS,OAC3B43C,GAAkB,KAEbA,EAAiBD,EACnB,CACL,IAAIG,EAAalmI,KAAK2jI,qBAAqBtgD,IAAIxhE,OAAOigG,gBAAgBC,MAAMC,OAI5E,OAHKkkB,EAAW93C,SAAS,OACvB83C,GAAc,KAETA,EAAa,eAAiBH,CACvC,CACF,CAEAI,iBAAAA,CAAkBC,GAChB,GAAIrhI,EAAAA,MAAMiP,QAAQoyH,GAChB,MAAO,GAET,IAAIF,EAAalmI,KAAK2jI,qBAAqBtgD,IAAIxhE,OAAOigG,gBAAgBC,MAAMC,OACxEtW,EAAOw6B,GAA0BlmI,KAAKwL,SAASsE,OAAO+iH,OAI1D,OAHKnnB,EAAKtd,SAAS,OACjBsd,GAAQ,KAEFA,EAAI,MAAA9rG,OAASwmI,EACvB,CAEAC,YAAAA,GACE,OAAO,IAAI9gB,IAAIvlH,KAAK2jI,qBAAqBtgD,IAAIxhE,OAAOigG,gBAAgBC,MAAMC,OAAS,kBAAkBz1E,IACvG,CAEAgK,uBAAAA,CAAwBhnB,GAEtB,MAAM+2G,EAAqBtmI,KAAKkqB,KAAK+5G,SAASC,YAAc,GAC5D,IAAK,IAAI5+H,EAAI,EAAGA,EAAIghI,EAAmBpmI,OAAQoF,IAAK,CAAC,IAADihI,EAClD,IAAItB,EAAYqB,EAAmBhhI,GACnC,GAA2B,QAA3BihI,EAAItB,EAAUuB,qBAAa,IAAAD,GAAvBA,EAAyB/vF,UAAW,CACtC,IAAI0uF,EAAWD,EAAU1lH,SAAW,GACpC,GAAIxa,EAAAA,MAAMgrE,QAAQm1D,IAAaD,EAAUuB,cAAchwF,UAAUr3C,aAAeowB,EAC9E,OAAO01G,CAEX,CACF,CAEA,OAAO,IACT,CAEAwB,+BAAAA,GACE,MAAMC,EAAqB1mI,KAAKkqB,KAAK7a,OAAO6wE,GAAAA,IAC5C,IAAKwmD,EACH,OAAO,KAKT,OAFyCA,EAAmBtC,iBAAmB,IAAIxkI,OAAO8mI,EAAmBrC,cAAgB,IACjFsC,MAAKC,GAAcA,EAAWn6H,SAAWm6H,EAAWC,uBAElG,CAEQC,qBAAAA,GAAyB,IAADhxF,EAC9B,MAAMK,EAAmD,QAA1CL,EAAG91C,KAAKwL,SAASyqC,QAAQC,aAAahsB,YAAI,IAAA4rB,OAAA,EAAvCA,EAAyCK,UAI3D,OAHcpxC,EAAAA,MAAMkP,kBAAkBkiC,IAA4B,aAAdA,EAClDn2C,KAAKkqB,KAAK+5G,SAASC,WACnBlkI,KAAKwL,SAASye,cAAcC,KAAK7a,OAAO8mC,GAAWiuF,eAEvD,CAEA2C,mBAAAA,CAAoBt+H,GAClB,MAAM26H,EAAQpjI,KAAK8mI,wBACnB,OAAY,OAAL1D,QAAK,IAALA,OAAK,EAALA,EAAOuD,MAAK/pD,GAAQA,EAAKn0E,MAAMq7C,gBAAkBr7C,EAAMq7C,eAChE,CAEAkjF,gBAAAA,CAAiBz3G,GACf,MAAM6zG,EAAQpjI,KAAK8mI,wBACnB,OAAY,OAAL1D,QAAK,IAALA,OAAK,EAALA,EAAOuD,MAAK/pD,GAAQA,EAAKqqD,SAAW13G,GAC7C,CAEA,mBAAIuK,GACF,OAAO95B,KAAKwL,SAAS63E,IAAI6jD,YAC3B,GACD1uH,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,QAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA1J,I,uDCjRM,IAAMq0H,IAAoBtvH,GAC5BC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKF,GAKZC,EAAAA,GAAOC,MAAKpF,GATV,MAKH+hH,UAAAA,CAAWltG,GACP3nB,KAAK6wE,QAAUlpD,CACnB,CAGAwpD,MAAAA,GACInxE,KAAK6wE,SAAW7wE,KAAK6wE,OACzB,CAEA99D,WAAAA,IAAcwF,EAAAA,EAAAA,GAAA,eAAAC,GAAA,OACVQ,EAAAA,EAAAA,IAAehZ,KACnB,GACHwY,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,WAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAfsB,CAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,cAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,cAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,UAAApE,IAAAyE,OAAAC,yBAAA5J,GAAAsJ,UAAA,UAAAtJ,GAAAsJ,WAAAtJ,ICFpB,MAAMs0H,GAAgBr0H,WAAAA,GAAA,KACzB69D,MAA+B,IAAIu2D,EAAuB,E,iDCgBvD,IAAME,IAAWxvH,GAsBnBC,EAAAA,GAAWxK,IAAGyK,GAEdD,EAAAA,GAAWxK,IAAG0K,GAIdF,EAAAA,GAAWxK,IAAG8W,GAGdnM,EAAAA,GAAOC,MAAKmM,GA2BZpM,EAAAA,GAAOC,MAAKoM,GAYZxM,EAAAA,GAAWxK,IAAGwF,GAtEZ,cAA0B4rE,EAAAA,EAG7B3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAgBpBmlE,YAA+B,IAAIy2D,IAAiB7uH,EAAAA,EAAAA,GAAA,oBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,oBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,iBAAAmM,GAAA,OAAAnM,EAAAA,EAAAA,GAAA,gBAAAkQ,GAAA,OAdhDzP,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKsnI,gBAAgB,CAAC,GACtBtnI,KAAKwL,SAAS63E,IAAIoxC,OAAO8S,oBAAoBvnI,KAAKsnI,iBAElDtnI,KAAKyP,UAAS,IAAMzP,KAAK2P,eAAeA,IAChCA,GACA3P,KAAKwL,SAASoyC,aAAaE,WAAWwkD,GAAAA,EAAiBklC,UAC3D,GACD,CACCtrH,iBAAiB,GAEzB,CAcQorH,eAAAA,CAAgBv4G,GAEpBA,EAASA,GAAU,CAAC,EAEpB/uB,KAAK2P,aAAe3P,KAAKwL,SAAS63E,IAAI1zE,aAElC5K,EAAAA,MAAMkP,kBAAkB8a,EAAO04G,cAC/BznI,KAAKynI,aAAe,KAEpBznI,KAAKynI,aAAe14G,EAAO04G,aAG/B,MAAMnlD,EAAYtiF,KAAKwL,SAAS63E,IAAIf,UAAY,CAAC,EAEjD,GAAKtiF,KAAK2P,aAKN3P,KAAK0nI,UAAYplD,EACjBtiF,KAAKwL,SAASoyC,aAAa+pF,QAAQ,eAAgBrlD,EAASslD,mBANxC,CACpB,MAAMC,EAAe7nI,KAAKwL,SAASoyC,aAAaC,QAAQ,gBACxD79C,KAAKwL,SAASsE,OAAOs7B,SAAS,EAAG,GACjCprC,KAAK0nI,WAASxiI,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOo9E,GAAQ,IAAEslD,cAAgBC,EAAe9nG,SAAS8nG,QAAgB1nI,GAC3F,CAKAH,KAAK8nI,iBACT,CAGQA,eAAAA,GAAmB,IAADC,EACtB/nI,KAAKykH,SAAW,CACZujB,aAAchoI,KAAK2P,aACnBi4H,cAAe5nI,KAAK0nI,UAAUE,eAAiB,EAC/CK,MAAOjoI,KAAK0nI,UAAUO,QAAS,EAC/BC,SAAUloI,KAAK0nI,UAAUQ,UAAY,KACrCC,sBAAuBnoI,KAAKooI,sBAC5BC,oBAA6C,QAA1BN,EAAE/nI,KAAKsoI,2BAAmB,IAAAP,OAAA,EAAxBA,EAA0B/nH,cAEvD,CAMA,uBAAIuoH,GACA,OAAOvoI,KAAKwL,SAAS63E,IAAImlD,qBAAuB,CACpD,CAGA,QAAIziH,GACA,OAAO/lB,KAAK0nI,UAAUe,UAAY,EACtC,CAGA,OAAIzlD,GACA,OAAOhjF,KAAK0nI,UAAU1kD,KAAO,EACjC,CAEA,uBAAIslD,GACA,OAAOtoI,KAAK0nI,UAAUY,mBAC1B,CAEA,YAAII,GACA,OAAO1oI,KAAK0nI,UAAUgB,QAC1B,CAEQC,4BAAAA,GAAgD,IAADC,EACnD,IAAIpB,EAA+F,QAAtFoB,EAAG5oI,KAAKwL,SAASorB,SAASE,WAAW+xG,YAAYC,cAnGvC,oBAmG4E,IAAAF,OAAA,EAAnFA,EAAqF5/B,OAOrG,GANGw+B,EACCxnI,KAAKwL,SAASoyC,aAAa+pF,QAAQrlC,GAAAA,EAAiBklC,UAAWA,GAE/DA,EAAYxnI,KAAKwL,SAASoyC,aAAaC,QAAQykD,GAAAA,EAAiBklC,YAGhEA,EACA,OAAO,KAGX,MAAMuB,EAAUhpG,SAASynG,GAEzB,OAAGziI,EAAAA,MAAMC,SAAS+jI,GACP/oI,KAAKwL,SAASoL,WAAWrI,QAAQy6H,0CAA0CD,IAElF/oI,KAAKwL,SAAS2L,OAAOxI,MAAM,gDAAD/O,OAAiD4nI,IACpE,KAEf,CAEA,aAAIA,GACA,IACI,MAAMyB,EAA0BjpI,KAAK2oI,+BAErC,OAAGM,IAIClkI,EAAAA,MAAMkP,kBAAkBjU,KAAK0nI,UAAUF,YACvCziI,EAAAA,MAAMkP,kBAAkBjU,KAAK0nI,UAAUwB,yBAChC,KAEAlpI,KAAKwL,SAAS8e,KAAK6+G,gBAAgBnpI,KAAK0nI,UAAUF,UAAWxnI,KAAK0nI,UAAUwB,yBAE3F,CAAE,MAAOx6H,GAEL,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,6BAA8BD,GAClD,IACX,CAEJ,CAEA,YAAI4zE,GACA,OAAOtiF,KAAK0nI,SAChB,CAEA,SAAIllD,GACA,OAAQxiF,KAAK0nI,UAAUE,cAAgB,GAAsC,IAAjC5nI,KAAK0nI,UAAUE,aAC/D,CAEA,yBAAIwB,GACA,OAAKppI,KAAK0nI,WAEL1nI,KAAK0nI,UAAU0B,sBAEb5tG,EAAAA,SAAS6tG,MAAMrpI,KAAK0nI,UAAU0B,uBAH1B,IAIf,CAEA,yBAAIhB,GACA,OAAIpoI,KAAKopI,sBACEppI,KAAKopI,sBAAsBvsG,UAE/BysG,GACX,CAEA,mBAAItyG,GACA,OAAOh3B,KAAK0nI,UAAU6B,cAC1B,CAEA,eAAIC,GACA,OAAOxpI,KAAKwL,SAAS63E,IAAIomD,gBAC7B,CAEAC,iBAAAA,GACI,OAAO1pI,KAAKwL,SAAS63E,IAAIqmD,oBAAoBnoH,MAAK2I,GAAQA,EAAKy/G,OACnE,CAEAC,gBAAAA,GACI,OAAO5pI,KAAKwL,SAAS63E,IAAIumD,kBAC7B,CAEAC,gBAAAA,GACI,OAAO7pI,KAAKwL,SAAS63E,IAAIwmD,kBAC7B,CAEA,eAAMC,CAAUr3C,SACNzyF,KAAKwL,SAAS63E,IAAI0mD,cAAct3C,EAC1C,CAEAu3C,mBAAAA,GAAgC,IAADC,EAC3B,OAAyC,QAAzCA,EAAOjqI,KAAKwL,SAAS63E,IAAI6mD,wBAAgB,IAAAD,OAAA,EAAlCA,EAAoCE,mBAC/C,CAEAC,MAAAA,GACI,OAAOpqI,KAAKwL,SAAS63E,IAAI+mD,QAC7B,CAEA,eAAIC,GACA,OAAQrqI,KAAK0nI,UAAUQ,UACnB,KAAK,EACD,MAAO,WACX,KAAK,EACD,MAAO,YACX,QACI,MAAO,GAEnB,CAGQoC,cAAAA,GACJ,OAAOtqI,KAAKwL,SAAS63E,IAAIknD,eAC7B,CAEAC,gBAAAA,GAEI,OAAKxqI,KAAKsqI,iBAKHtqI,KAAKwL,SAAS63E,IAAIonD,mBACpBlpH,MAAK,IACKvhB,KAAK0qI,+BACP5sE,OAAOpvD,IACJ1O,KAAKwL,SAAS2L,OAAOxI,MAAM,2CAA4CD,EAAI,MARhFssB,QAAQC,SAavB,CAEA,0BAAM0vG,CAAqBC,GAGvB,SAFM5qI,KAAKwqI,oBAENxqI,KAAK2P,aACN,UACU3P,KAAK8pI,WACf,CAAE,MAAOp7H,GACL1O,KAAKwL,SAAS2L,OAAO+0E,MAAM0+C,EAAY,gCAAiCl8H,EAC5E,CAEJ,OAAO1O,KAAK2P,YAChB,CAGQ+6H,4BAAAA,GAA+C,IAADG,EAClD,IAAIC,EAtPkB,WAuPtB,MAAMh0G,EAAa92B,KAAKwL,SAASorB,SAASE,WACtCA,EAAW+xG,YAAYkC,SAASC,GAAAA,EAAU1tB,+BACqC,QAA5EutB,EAAA/zG,EAAW+xG,YAAYC,cAAckC,GAAAA,EAAU5tB,qCAA6B,IAAAytB,OAAA,EAA5EA,EAA8E7qH,iBAAkBgrH,GAAAA,EAAU3tB,qCAC7GytB,EAAmBE,GAAAA,EAAU1tB,6BAEjC,MAAM2tB,EAAkBn0G,EAAWo0G,kBAAkBJ,GAAkB3rI,WACvE,OAAOa,KAAKwL,SAASorB,SAASoiD,QAAQiyD,EAC1C,CAGAE,YAAAA,CAAaC,GACT,OAAOprI,KAAKwL,SAAS63E,IAAI8nD,aAAaC,EAC1C,CAEAxtE,iBAAAA,GACI,MAAM4wC,EAASxuG,KAAKwL,SAAS8e,KAAKo5D,oBAElC,OAAO1jF,KAAKwL,SAASonH,IAAIyY,eAAeC,mBAAmB,CACvDC,eAAgB/8B,EAChBg9B,eAAgBxrI,KAAKwL,SAAS63E,IAAIgB,wBACnC9iE,MAAK,KACJvhB,KAAKoqI,QAAQ,IACdtsE,OAAOpvD,IACN1O,KAAKwL,SAAS63E,IAAI4xC,yBACbC,YACAC,YAAY,wBACZC,UAAU,uBACV4D,SAASv3G,KAAKC,UAAUhT,IACxBC,QACL3O,KAAKoqI,SACLpqI,KAAKwL,SAAS2L,OAAOxI,MAAM,+BAAgCD,EAAI,GAEvE,CAEA,WAAIk1E,GAA0B,IAAD6nD,EACzB,OAAkC,QAAlCA,EAAOzrI,KAAKwL,SAAS63E,IAAIqoD,iBAAS,IAAAD,OAAA,EAA3BA,EAA6B7nD,OACxC,CAEA,qCAAM+nD,GACF,IAAK3rI,KAAK2P,aACN,OAAO,EAQX,aAJ2B3P,KAAKwL,SAASonH,IAAIgZ,uBAAuBC,gBAAgB,CAChFC,iBAAkBhkD,GAAAA,EAAsBgL,QAGxBi5C,eAAeC,KAAIttB,GAAKA,EAAEutB,QAElD,CAEAC,4BAAAA,GACI,OAAOlsI,KAAKwL,SAAS63E,IAAI6oD,8BAC7B,CAEAC,oBAAAA,CAAqBloH,GACjBjkB,KAAKwL,SAAS63E,IAAI8oD,qBAAqBloH,EAC3C,CAIAmoH,6BAAAA,GACI,IACI,OAAO5wG,EAAAA,SAAS6tG,MAAMrpI,KAAKwL,SAASye,cAAc6P,gBAAgBuyG,OAAOC,2BAC7E,CAAE,MAAO59H,GAEL,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,8CAAD/O,OAA+CI,KAAKwL,SAASye,cAAc6P,gBAAgBuyG,OAAOC,4BAA8B59H,GACnJ8sB,EAAAA,SAASC,YAAY,GAChC,CAEJ,GACHjjB,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBApS2B,CAAM,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEN,IAAK,IAADkI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAIG,CAAC,CAAE,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,mBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAiI,IAAA5H,OAAAC,yBAAA5J,GAAAsJ,UAAA,mBAAAtJ,GAAAsJ,WAAAqM,IAAAtM,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAAAkI,IAAA,CAAAjI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBA0CrB,CAAC,CAAE,IAAD1J,I,kCCnFV,IAAMy5H,IAA6B10H,GA4CvCC,EAAAA,GAAWxK,IAAGyK,GAGdD,EAAAA,GAAWxK,IAAG0K,GAIdC,EAAAA,GAAOC,MAAKpF,GAnDR,cAA4C4rE,EAAAA,EACjD3rE,WAAAA,CAAY+sH,GACV1nH,MAAM0nH,IAAgBvnH,EAAAA,EAAAA,GAAA,oBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,0BAAAE,GAAA,OAEtBO,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKwsI,qBACP,CAEA,yBAAcA,GACZ,MAAMn5C,QAAwBrzF,KAAKwL,SAAS6nF,gBACtCoI,QAA0Bz7F,KAAKwL,SAASiwF,kBAC9Cz7F,KAAKyP,UACD,KACS,CACLg9H,aAAczsI,KAAKwL,SAASkE,KAAK+0G,SACjCioB,YAAar5C,EAAgBoxB,SAC7BkoB,eAAgB3sI,KAAKwL,SAASqI,OAAO4wG,SACrC3wG,SAAU9T,KAAKwL,SAASqI,OAAOC,SAC/B84H,iBAAkB5sI,KAAKwL,SAASrN,WAAW0uI,gBAC3CC,YAAa9sI,KAAKwL,SAAS+9B,UAAUtuB,UACrC8xH,iBAAkBtxC,EAAkBsxC,iBACpCC,mBAAoBhtI,KAAKwL,SAASi+B,YAAYC,sBAGlD,KACE1pC,KAAK8nI,iBAAiB,GAExB,CACE5rH,iBAAiB,GAEzB,CAEA,qBAAc4rH,GACZ,MAAMz0C,QAAwBrzF,KAAKwL,SAAS6nF,gBACtC45C,QAAsBjtI,KAAKktI,oBACjCltI,KAAKmtI,iBAAejoI,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACjBmuF,EAAgBoxB,UAChBzkH,KAAKwL,SAASkE,KAAK+0G,UACnBzkH,KAAKwL,SAASqI,OAAO4wG,UACrBzkH,KAAKotI,wBACLH,GACP,CAUQE,eAAAA,CAAgBE,GACtBrtI,KAAKstI,aAAeD,EACpBrtI,KAAKutI,mBAAqBzwE,KAAKD,KACjC,CAEAytD,eAAAA,CAAgBvkG,GACd,IAAIskG,EAAerqH,KAAKstI,aAAavnH,GAMrC,OAJGhhB,EAAAA,MAAMk7B,YAAYoqF,IACnBrqH,KAAKwL,SAAS2L,OAAO+0E,MAAM,WAADtsF,OAAYmmB,EAAI,0CAGrCskG,CACT,CAEA,0BAAY+iB,GACV,MAAMI,EAAc,CAAC,EAIrB,OAHC/wH,OAAOspC,KAAKsyC,GAAAA,GAA0CzsC,SAAQ6hF,IAC7DD,EAAYC,GAAkBztI,KAAKwL,SAASrN,WAAWsvI,EAAe,IAEjED,CACT,CAEA,uBAAcN,GACZ,MAAMzxC,QAA0Bz7F,KAAKwL,SAASiwF,kBAC9C,MAAO,CACLi2B,IAAK1xH,KAAKwL,SAASye,cAAc05G,qBAAqBtgD,IAAIxhE,OAAOigG,gBAAgB4P,IACjFgc,YAAa1tI,KAAKwL,SAASye,cAAc05G,qBAAqBpgD,QAC9De,QAAStkF,KAAKwL,SAAS63E,IAAIkB,aAC3BC,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9BkpD,aAAc3tI,KAAKwL,SAASoL,WAAWwrE,oBACvCygC,KAAM7iH,KAAKwL,SAASyiB,SAAS02D,gBAC7BipD,SAAU5tI,KAAKwL,SAASyiB,SAAS02D,gBACjCmoD,YAAa9sI,KAAKwL,SAAS+9B,UAAUtuB,UACrC8xH,iBAAkBtxC,EAAkBsxC,iBACpCC,mBAAoBhtI,KAAKwL,SAASi+B,YAAYC,kBAElD,CAEA,SAAImkG,GACF,OAAO1jI,QAAQnK,KAAKsqH,gBAAgB,UACtC,CAEA,SAAIwjB,GACF,OAAO3jI,QAAQnK,KAAKsqH,gBAAgB,UACtC,GAED9xG,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAtD6C,CAAC,CAAE,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGjB,IAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAApE,IAAAyE,OAAAC,yBAAA5J,GAAAsJ,UAAA,mBAAAtJ,GAAAsJ,WAAAtJ,I,kCCjD5B,IAAMi7H,IAAal2H,GAcvBI,EAAAA,GAAOC,MAAKH,GA0BZD,EAAAA,GAAWxK,IAAG0K,GAcdF,EAAAA,GAAWxK,IAAGwF,GAtDV,cAA4B4rE,EAAAA,EACjC3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,gBAAAC,GAAA,WAyClBzE,cAAQ,OAERiI,QAAE,OACF2rC,aAAO,OACPX,WAAK,OACLj6B,YAAM,OACNihH,aAAO,OACPC,yBAAmB,OAEnBC,kBAAY,GAAA31H,EAAAA,EAAAA,GAAA,gBAAAE,GAAA,OAhDVO,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKmuI,oBACLnuI,KAAKwL,SAAS4iI,IAAIC,YAAYC,cAActuI,KAAKmuI,kBACnD,CAEA,cAAYI,GACV,OAAOvuI,KAAKwL,SAAS63E,IAAIxvE,MAC3B,CAGQs6H,iBAAAA,GACNnuI,KAAK8T,SAAW9T,KAAKuuI,WAAWz6H,WAChC9T,KAAK+T,SAAW/T,KAAKuuI,WAAWx6H,WAEhC/T,KAAKgc,GAAKhc,KAAKuuI,WAAWvyH,GAC1Bhc,KAAK2nD,QAAU3nD,KAAKuuI,WAAW5mF,QAC/B3nD,KAAK+sB,OAAS/sB,KAAKuuI,WAAWxhH,OAC9B/sB,KAAKguI,QAAUhuI,KAAKuuI,WAAWP,QAC/BhuI,KAAKgnD,MAAQhnD,KAAKuuI,WAAWvnF,MAC7BhnD,KAAKiuI,oBAAsBjuI,KAAKuuI,WAAWN,oBAE3CjuI,KAAKkuI,aAAeluI,KAAKuuI,WAAWL,aAEpCluI,KAAKykH,SAAW,CACd3wG,SAAU9T,KAAK8T,SACf4sE,WAAY1gF,KAAK8T,SAAW,SAAW,KACvCyiB,SAAUv2B,KAAK+sB,OAAOwJ,SACtBi4G,iBAAkBxuI,KAAK+sB,OAAOC,WAC9ByhH,gBAAiBzuI,KAAKgc,GAAG+J,KACzB2oH,KAAMhnF,GAAAA,EAAOinF,eAAiB,SAAW,GACzCV,oBAAqBjuI,KAAKuuI,WAAWN,oBAEzC,CAsBA,oBAAIW,GACF,OAAO5uI,KAAKwL,SAAS63E,IAAIgB,qBAC3B,CAEA,kBAAIwqD,GACF,OAAOnnF,GAAAA,EAAOmnF,cAChB,CAEA,uBAAIC,GACF,OAAOpnF,GAAAA,EAAOonF,mBAChB,IACD3yH,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,qBAAAvE,IAAA4E,OAAAC,yBAAA5J,GAAAsJ,UAAA,qBAAAtJ,GAAAsJ,WAAA5D,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA1J,IC1EOqtE,GAAAA,GADD,MAAM4uD,GAEe,oBAFfA,GAGmB,uB,8CCGzB,MAAMC,GAAkD,CAC3DhO,eAAe,EACfpU,UAAW,GACXiY,aAAc,CAAC,EACfhpD,YAAQ17E,GAQL,IAAM8uI,IAAep3H,GAazBC,EAAAA,GAAWxK,IAAGyK,GAGdD,EAAAA,GAAWxK,IAAG0K,GAcdF,EAAAA,GAAWxK,IAAG8W,GAIdnM,EAAAA,GAAOC,MAAKmM,GAgBZpM,EAAAA,GAAOC,MAAKoM,GAQZrM,EAAAA,GAAOC,MAAKpF,GA1DR,cAA8B4rE,EAAAA,EACnC3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,0BAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,qCAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,kCAAAmM,GAAA,WA6JVwqH,oDAAqD,GA3J3Dl2H,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eACrC,IAAM3P,KAAKmvI,kBACX,CACEjzH,iBAAiB,GAEvB,CAOA,2CAAIkzH,GAA4D,IAADC,EAE7D,OADArvI,KAAKsvI,0CACoC,QAAlCD,EAAArvI,KAAKuvI,qCAA6B,IAAAF,OAAA,EAAlCA,EAAoCG,cAAe,IAC5D,CACA,kDAAIC,GAAmE,IAADC,EAEpE,OADA1vI,KAAKsvI,0CACoC,QAAlCI,EAAA1vI,KAAKuvI,qCAA6B,IAAAG,OAAA,EAAlCA,EAAoCC,qBAAsB,IACnE,CAUQC,sBAAAA,CAAuB9lI,GAE7B,IAAI+lI,EAAmB,CAAC,EAEpB/lI,EAAM8iH,WACR9iH,EAAM8iH,UAAUhhE,SAAQ,CAAC72C,EAAUzP,IAAMuqI,EAAiB96H,GAAYzP,IAGxEtF,KAAK8vI,oBAAkB5qI,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAClB4E,GAAK,IACR8iH,UAAY9iH,EAAM8iH,WAAa,GAC/BiY,aAAcgL,GAElB,CAGQE,qCAAAA,CAAsCC,GAC5ChwI,KAAKuvI,8BAAgC,CACnCC,YAAcQ,GAAqCA,EAAkCp2B,GAAAA,EAAaq2B,OAAU,GAC5GN,mBAAqBK,GAAqCA,EAAkCp2B,GAAAA,EAAas2B,eAAkB,GAE/H,CAGQC,6BAAAA,CAA8BvjB,GACpCA,EAAYA,GAAa,GAEzB5sH,KAAKowI,2BAA6BxjB,EAAU3+D,QAAO,CAACC,EAAKC,EAAM9qB,KAC7D6qB,EAAIC,GAAQ9qB,EACL6qB,IACN,CAAC,EACN,CAEQihF,cAAAA,GACNnvI,KAAKqwI,oCACLrwI,KAAKswI,2BACP,CAEAD,iCAAAA,GACKrwI,KAAKwL,SAASkE,KAAKC,eACpB3P,KAAKuvI,8BAAgC,KAExC,CAED,+BAAce,GACZ,IAAIC,QAA8BvwI,KAAKwL,SAAS63E,IAAImtD,qBAAqB,CAACC,8BAA8B,IAExGzwI,KAAK4vI,uBAAuB,CAC1BhjB,UAAW2jB,EAAsB3jB,UACjC/wC,OAAQ00D,EAAsB10D,OAC9BgpD,aAAc,CAAC,EACf7D,eAAe,IAEjBuP,QAA8BvwI,KAAKwL,SAAS63E,IAAImtD,qBAAqB,CAACE,SAAU,IAAKD,8BAA8B,IACnHzwI,KAAKmwI,8BAA8BI,EAAsB3jB,WAAa,IAEtE5sH,KAAK2wI,gCACP,CAEQA,8BAAAA,GAEN,IAAIC,EAAkB5wI,KAAK8vI,mBAAmBljB,UAAU3+D,QAAO,CAACyH,EAAQ3gD,EAAUsuB,KAChFqyB,EAAO3gD,GAAYsuB,EACZqyB,IACN,CAAC,GAEJ11D,KAAKwL,SAASqd,UAAUC,qBAAqB,CAC3CE,SAAU+lH,GACV92H,OAAQwJ,KAAKC,UAAUkvH,GACvBt2G,MAAOt6B,KAAK8vI,mBAAmBj0D,OAC/B9yD,UAAU,qBACT,EACL,CAEA,+CAAM8nH,CAA0CC,GAC9C,aAAa9wI,KAAKwL,SAASonH,IAAIme,kBAAkBF,0CAA0C,CACzFG,SAAUF,GAEd,CAEAG,SAAAA,CAAUrkB,EAAqBvmH,GAC7B,MAAM6qI,EAA4BnsI,EAAAA,MAAMiP,QAAe,OAAP3N,QAAO,IAAPA,OAAO,EAAPA,EAAS8qI,kBAAoBnxI,KAAKowI,2BAAoC,OAAP/pI,QAAO,IAAPA,OAAO,EAAPA,EAAS8qI,iBACxH,IAAID,GAA+E,IAAlDz0H,OAAOspC,KAAKmrF,GAA2BhxI,OACtE,OAAO0sH,EAGT,MAAMwkB,EAAsBrsI,EAAAA,MAAMC,SAAgB,OAAPqB,QAAO,IAAPA,OAAO,EAAPA,EAAS+qI,qBAAuB/qI,EAAQ+qI,oBAAsB,EACzG,IAAIC,EAAiBD,EAAsB,EAAIxkB,EAAUjsG,MAAM,EAAGywH,GAAuB,GACzF,MAAME,EAAcF,EAAsB,EAAIxkB,EAAUjsG,MAAMywH,GAAuBxkB,EAE/E2kB,EAAkB,CAAC,EAuBzB,OAtBAD,EAAY1lF,SAAQ,CAAC01E,EAAIj+F,KACvBkuG,EAAgBjQ,GAAMj+F,CAAK,IAG7BiuG,EAAYE,MAAK,CAACC,EAAKC,KACrB,IAAIC,EAAST,EAA0BO,GACnCG,EAASV,EAA0BQ,GAEvC,OAAG3sI,EAAAA,MAAMk7B,YAAY0xG,IAAW5sI,EAAAA,MAAMk7B,YAAY2xG,GACxCL,EAAgBE,GAAOF,EAAgBG,IAAS,EAAI,EAG3D3sI,EAAAA,MAAMk7B,YAAY0xG,GACZ,EACC5sI,EAAAA,MAAMk7B,YAAY2xG,IAIpBD,EAASC,GAHP,EAGsB,CAAC,IAI5BP,EAAezxI,OAAO0xI,EAC/B,CAEAO,WAAAA,GACE,OAAO7xI,KAAK8vI,mBAAmBj0D,MACjC,CAEAi2D,kBAAAA,CAAmB/8H,GACjB,YAA0D5U,IAAnDH,KAAK8vI,mBAAmBjL,aAAa9vH,QAA0B5U,EAAYH,KAAK8vI,mBAAmBj0D,MAC5G,CAGA,4CAAcyzD,GACZ,IAAGtvI,KAAKkvI,oDAIJnqI,EAAAA,MAAMkP,kBAAkBjU,KAAKuvI,+BAAjC,CAIAvvI,KAAKkvI,oDAAqD,EAC1D,IACE,MAAM6C,QAA8D/xI,KAAKwL,SAAS63E,IAAI2uD,qCAAqCp4B,GAAAA,EAAaq2B,KAAMr2B,GAAAA,EAAas2B,cAC3JlwI,KAAK+vI,sCAAsCgC,EAC7C,CAAC,QACC/xI,KAAKkvI,oDAAqD,CAC5D,CARA,CAUF,CAGQ+C,0BAAAA,CAA2BC,GAEjC,IAAIntI,EAAAA,MAAMkP,kBAAkBi+H,GAAa,CACvC,GAAIA,IAAet4B,GAAAA,EAAaq2B,KAC9B,OAAOjwI,KAAKovI,wCACP,GAAG8C,IAAet4B,GAAAA,EAAas2B,aACpC,OAAOlwI,KAAKyvI,+CAEZzvI,KAAKwL,SAAS2L,OAAOxI,MAAM,0DAAD/O,OAA2DsyI,GAEzF,CAEA,MAAO,EACT,CAECC,aAAAA,CAAcC,EAA2BF,GACxC,MAAMG,EAAiBryI,KAAKiyI,2BAA2BC,GACtD,OAAIG,EAIED,EAAgBZ,MAAK,CAACc,EAAMC,KACjC,MAAMC,EAAiBH,EAAe/uG,QAAQgvG,GACxCG,EAAkBJ,EAAe/uG,QAAQivG,GAC/C,OAAuB,IAApBC,IAA8C,IAArBC,GACH,IAApBD,GAC2B,IAArBC,EAAyB,EAAI,GAE5B,EAILD,EAAiBC,CAAe,IAd/BL,CAiBZ,GACD55H,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA1M0CwyH,EAA4B,IAADv2H,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iCAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGE,IAAK,IAADkI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,8BAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,0BAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,0BAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,yCAAAiI,IAAA5H,OAAAC,yBAAA5J,GAAAsJ,UAAA,yCAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iCAAAkI,IAAA7H,OAAAC,yBAAA5J,GAAAsJ,UAAA,iCAAAtJ,GAAAsJ,WAAAtJ,ICuBrE,MAAM4/H,GACmB,+BADnBA,GAES,qBAFTA,GAGoB,gCAHpBA,GAMQ,oBANRA,GAOA,YAPAA,GAQC,aARDA,GASM,kBATNA,GAUO,mBAVPA,GAWa,yBAXbA,GAYS,qBAZTA,GAaM,kBAbNA,GAcM,kBAdNA,GAea,yBAfbA,GAgBE,cAhBFA,GAiBC,aAjBDA,GAkBW,uBAlBXA,GAmBa,yBAnBbA,GAoBI,gBApBJA,GAqBoC,gDArBpCA,GAsBS,qBAtBTA,GAuBS,qB,4BCrBf,MAAMC,GACX5/H,WAAAA,CAAoB6/H,GAAe,KAAfA,IAAAA,CAEpB,CAEArL,mBAAAA,CAAoB/R,GAClB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA+yI,yBAAAA,CAA0Bvd,GACxB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAgzI,kBAAAA,CAAmBxd,GACjB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAizI,eAAAA,CAAgBzd,GACd,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA40H,UAAAA,CAAWY,GACT,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAkzI,WAAAA,CAAY1d,GACV,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAGAmzI,cAAAA,CAAe3d,GACb,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcC,cACzB7d,SAAWtrG,GAASsrG,EAAStrG,GAAQ,CAAC,GACtCy9F,QAAS3nH,MAEb,CAEAsgI,4BAAAA,CAA6B9K,GAC3B,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAszI,eAAAA,CAAgB9d,GACd,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAuzI,iBAAAA,CAAkB/d,GAChB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAwzI,sBAAAA,CAAuBhe,GACrB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAyzI,sBAAAA,CAAuBje,GACrB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAGA0zI,oBAAAA,CAAqBle,GACnB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcO,kCACzBne,WACA7N,QAAS3nH,MAEb,CAEA4zI,6BAAAA,CAA8Bpe,GAC5B,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcS,2CACzBre,WACA7N,QAAS3nH,MAEb,CAEA8zI,2BAAAA,CAA4Bte,GAC1B,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcO,kCACzBne,WACA7N,QAAS3nH,MAEb,CAEA+zI,gBAAAA,CAAiBve,GACf,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,WACA7N,QAAS3nH,MAEb,CAEAg0I,oBAAAA,CAAqBxe,GACnB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAca,qBACzBze,WACA7N,QAAS3nH,MAEb,CAEAk0I,oBAAAA,CAAqB1e,GACnB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWqB,GAAAA,GAAcC,qBACzB5e,WACA7N,QAAS3nH,MAEb,CAEAq0I,oBAAAA,CAAqB7e,GACnB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWqB,GAAAA,GAAcG,qBACzB9e,WACA7N,QAAS3nH,MAEb,CAGAu0I,uBAAAA,CAAwB/e,GACtB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,WACA7N,QAAS3nH,MAEb,CAEA20H,YAAAA,CAAaa,GACX,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA00H,WAAAA,CAAYc,GACV,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAw0I,oBAAAA,CAAqBhf,GACnB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAy0I,qBAAAA,CAAsBjf,GACpB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcsB,sBACzBlf,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA20I,8BAAAA,CAA+Bnf,GAC7B,MAAMof,EAAwC,GAW9C,OAVAA,EAAcj6H,KAAK3a,KAAKy0I,uBAAsB,KAC5Cjf,GAAU,KAGZof,EAAcj6H,KAAK3a,KAAKw0I,sBAAsBK,IACxCn+C,GAAAA,EAAao+C,UAAYD,GAC3Brf,GACF,KAGK,CACL5pG,IAAKA,KACHgpH,EAAchpF,SAAQ8yD,GAAKA,EAAE9yF,KAAI,EAGvC,CAEAmpH,2BAAAA,CAA4Bvf,GAC1B,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAg1I,cAAAA,CAAexf,GACb,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,WACA7N,QAAS3nH,MAEb,CAEAi1I,wBAAAA,CAAyBzf,GACvB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,WACA7N,QAAS3nH,MAEb,CAEAk1I,kBAAAA,CAAmB1f,GACjB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAm1I,mBAAAA,CAAoB3f,GAClB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWJ,GACXld,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAo1I,wBAAAA,CAAyB5f,GACvB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAciC,2BACzB7f,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAs1I,aAAAA,CAAc9f,GACZ,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcmC,oBACzB/f,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAw1I,mBAAAA,CAAoBhgB,GAClB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcqC,2BACzBjgB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA01I,oBAAAA,CAAqBlgB,GACnB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcuC,oCACzBngB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA41I,sBAAAA,CAAuBpgB,GACrB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcyC,sCACzBrgB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA81I,sBAAAA,CAAuBtgB,GACrB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAc2C,sCACzBvgB,SAAUA,EACV7N,QAAS3nH,MAEb,CAGAg2I,4CAAAA,CAA6CxgB,GAC3C,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAc6C,kCACzBzgB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAk2I,4CAAAA,CAA6C1gB,GAC3C,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAc+C,qCACzB3gB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAo2I,qBAAAA,CAAsB5gB,GACpB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAciD,uBACzB7gB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAs2I,oBAAAA,CAAqB9gB,GACnB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcmD,kCACzB/gB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAw2I,qBAAAA,CAAsBhhB,GACpB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcqD,sBACzBjhB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA02I,4BAAAA,CAA6BlhB,GAC3B,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcuD,wBACzBnhB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA42I,qBAAAA,CAAsBphB,GACpB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcyD,2BACzBrhB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA82I,iBAAAA,CAAkBthB,GAChB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAc2D,+BACzBvhB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAg3I,oBAAAA,CAAqBxhB,GACnB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAc6D,sBACzBzhB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAk3I,qBAAAA,CAAsB1hB,GACpB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAc+D,qBACzB3hB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAo3I,yBAAAA,CAA0B5hB,GACxB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAciE,+BACzB7hB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAs3I,uBAAAA,CAAwB9hB,GACtB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcmE,wBACzB/hB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEAw3I,mBAAAA,CAAoBhiB,GAClB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcqE,oBACzBjiB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA03I,2BAAAA,CAA4BliB,GAC1B,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcuE,4BACzBniB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA43I,uBAAAA,CAAwBpiB,GACtB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAcyE,wBACzBriB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA83I,uBAAAA,CAAwBtiB,GACtB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAc2E,wBACzBviB,SAAUA,EACV7N,QAAS3nH,MAEb,CAEA2rB,mBAAAA,CAAoB6pG,GAClB,OAAOx1H,KAAK4yI,IAAIC,QAAQ,CACtBC,UAAWM,GAAAA,GAAc4E,yBACzBxiB,SAAUA,EACV7N,QAAS3nH,MAEb,E,eCnfK,MAAMi4I,GACTC,QAAAA,CAASp4G,GACLq4G,GAAAA,EAAMC,KAAKhF,GAAAA,GAAciF,UAAW,CAChCC,SAAUx4G,EAAU/qB,SACpBA,SAAU+qB,EAAU/qB,SACpBwjI,OAAQz4G,EAAUy4G,QAE1B,CAEAC,UAAAA,CAAW14G,GACPq4G,GAAAA,EAAMC,KAAKhF,GAAAA,GAAcqF,WAAY,CACjCH,SAAUx4G,EAAU/qB,SACpBA,SAAU+qB,EAAU/qB,SACpBwjI,OAAQz4G,EAAUy4G,OAClBG,aAAc54G,EAAU44G,aACxBC,uBAAwB74G,EAAU64G,wBAE1C,CAEAC,SAAAA,GACIT,GAAAA,EAAMC,KAAKhF,GAAAA,GAAcyF,yBAC7B,CAEAC,gBAAAA,GACIX,GAAAA,EAAMC,KAAKhF,GAAAA,GAAc2F,mBAC7B,CAEAC,gCAAAA,GACIb,GAAAA,EAAMC,KAAKhF,GAAAA,GAAc6F,uCAC7B,CAEAtmD,qBAAAA,CAAsBF,GAClB0lD,GAAAA,EAAMC,KAAKhF,GAAAA,GAAc8F,wBAAyBzmD,EACtD,CAGA0mD,uBAAAA,CAAwBl/E,GACpBk+E,GAAAA,EAAMC,KAAKhF,GAAAA,GAAcgG,uBAAwBn/E,EACrD,CAEAo/E,2BAAAA,GACIlB,GAAAA,EAAMC,KAAKhF,GAAAA,GAAckG,sBAAsB,EACnD,CAEAC,eAAAA,CAAgB5+F,GACZw9F,GAAAA,EAAMC,KAAKhF,GAAAA,GAAcoG,aAAc7+F,EAC3C,CAEA8+F,mBAAAA,GACItB,GAAAA,EAAMC,KAAKhF,GAAAA,GAAcsG,sBAC7B,CAEAC,qBAAAA,CAAsB5qH,GAClBopH,GAAAA,EAAMC,KAAKhF,GAAAA,GAAcwG,uBAAwB7qH,EACrD,CAEA8qH,kBAAAA,CAAmB9qH,GACfopH,GAAAA,EAAMC,KAAKhF,GAAAA,GAAc0G,qBAAsB/qH,EAAOgrH,WAC1D,CAEAC,YAAAA,CAAaC,GACT9B,GAAAA,EAAMC,KAAKhF,GAAAA,GAAc8G,cAAeD,EAC5C,CAEAE,sBAAAA,GACIhC,GAAAA,EAAMC,KAAKhF,GAAAA,GAAcgH,0BAC7B,CAEAC,qBAAAA,GACIlC,GAAAA,EAAMC,KAAKhF,GAAAA,GAAckH,0BAC7B,CAEAC,sBAAAA,CAAuBtgF,GACnBk+E,GAAAA,EAAMC,KAAKhF,GAAAA,GAAcoH,+BAAgCvgF,EAC7D,CAEAwgF,yBAAAA,GACItC,GAAAA,EAAMC,KAAKhF,GAAAA,GAAcsH,uBAC7B,CAEAC,gBAAAA,GACIxC,GAAAA,EAAMC,KAAKhF,GAAAA,GAAcwH,0BAC7B,CAEAC,uBAAAA,CAAwB3kF,GACpBiiF,GAAAA,EAAMC,KAAKhF,GAAAA,GAAc0H,yBAA0B5kF,EACvD,CAEA6kF,iBAAAA,CAAkBC,GAMd7C,GAAAA,EAAMC,KAAKhF,GAAAA,GAAc6H,wBAAyBD,EACtD,CAEAE,gBAAAA,GACI/C,GAAAA,EAAMC,KAAKjE,GAAAA,GAAcC,qBAC7B,CAEA+G,kBAAAA,GACIhD,GAAAA,EAAMC,KAAKjE,GAAAA,GAAcG,qBAC7B,CAEA8G,YAAAA,GACIjD,GAAAA,EAAMC,KAAKhF,GAAAA,GAAciI,cAC7B,CAEAC,aAAAA,GACInD,GAAAA,EAAMC,KAAKhF,GAAAA,GAAcmI,cAC7B,E,4BCtEG,IAAMC,IAAU3jI,GAoGpBC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKpF,GAvGR,cAAyB4rE,EAAAA,EAC9B3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,GAAU,KAkCViwI,QAAqB,MAAIljI,EAAAA,EAAAA,GAAA,kBAAAC,GAAA,WAiajCk6E,cAAkC,IAAIulD,IAjcpCj/H,EAAAA,EAAAA,IAAehZ,MAUfmqC,YAAW,KACTnqC,KAAK07I,sCAAsC,IAI7C17I,KAAK27I,iBAEL37I,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASorB,SAASE,aACzC,KACM92B,KAAKwL,SAASorB,SAASglH,sBACzB57I,KAAK4yI,IAAIiJ,cACX,GAEN,CAEQF,cAAAA,GAEF52I,EAAAA,MAAMg1H,WAAW/5H,KAAK4yI,IAAIkJ,gBAC5B97I,KAAK4yI,IAAIkJ,eAEb,CAIA,UAAIrnB,GAKF,OAJKz0H,KAAKy7I,UACRz7I,KAAKy7I,QAAU,IAAI9I,GAAU3yI,KAAK4yI,MAG7B5yI,KAAKy7I,OACd,CAGA,OAAY7I,GACV,OAAO5yI,KAAKwL,SAASsE,OAAO4yG,kB9B9FD,M8B+F7B,CAGA,gBAAI/yG,GACF,OAAO3P,KAAK4yI,IAAIjjI,cAClB,CAEA,2BAAIosI,GACF,OAAO/7I,KAAK4yI,IAAImJ,yBAClB,CAEA,0BAAIC,GACF,OAAO,IACT,CAEA,4BAAI/mB,GACF,OAAOj1H,KAAK4yI,IAAI3d,0BAClB,CAEA,qBAAIgnB,GACF,OAAOj8I,KAAK4yI,IAAIsJ,gCAClB,CAEA,YAAI55D,GACF,IAAI65D,EAAcn8I,KAAK4yI,IAAIwJ,cACvBC,EAAkBF,GAAeA,EAAYG,aAAgB,CAAC,EAGlE,MAAO,CACL7T,SAAqB,OAAX0T,QAAW,IAAXA,OAAW,EAAXA,EAAa1T,SACvB5lD,UAAWw5D,EAAeE,UAC1Bx5D,SAAUs5D,EAAeG,SACzBvU,MAAOjoI,KAAK4yI,IAAIrwD,QAChBqlD,cAAeyU,EAAeI,cAC9BvU,SAAUmU,EAAeK,SACzBtT,sBAAuBiT,EAAeM,sBACtC35D,IAAgB,OAAXm5D,QAAW,IAAXA,OAAW,EAAXA,EAAan5D,IAClBumD,eAAgB8S,EAAeO,eAC/BC,UAAW78I,KAAK4yI,IAAIkK,eACpBxU,oBAAqB+T,EAAehU,oBACpCK,SAAU2T,EAAeU,SACzB16D,OAAQt9E,EAAAA,MAAMkP,kBAAkBooI,EAAeW,aAC/Ct6D,qBAAsB25D,EAAe35D,qBACrCu6D,MAAOZ,EAAea,MACtB1V,UAAW6U,EAAec,UAC1BjU,wBAAyBmT,EAAee,wBACxCC,aAAchB,EAAeiB,aAEjC,CAOQC,cAAAA,CAAezzI,GACrB9J,KAAKw9I,WAAa1zI,CACpB,CAEA0mI,oBAAAA,CAAqBnqI,GACnB,OAAOrG,KAAK4yI,IAAI6K,UAAiB,OAAPp3I,QAAO,IAAPA,OAAO,EAAPA,EAASqqI,SAAiB,OAAPrqI,QAAO,IAAPA,OAAO,EAAPA,EAASoqI,6BAAqC,OAAPpqI,QAAO,IAAPA,OAAO,EAAPA,EAASq3I,uCAAuCn8H,MAAK2I,IAChI,CACL0iG,UAAW1iG,EAAKyzH,kBAAoB,GACpC9hE,OAAQ3xD,EAAKstD,YAGnB,CAEAw6D,oCAAAA,GAAoG,IAAD,IAAAriE,EAAA1vE,UAAAC,OAA3D09I,EAAW,IAAAxtI,MAAAu/D,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAX+tE,EAAW/tE,GAAA5vE,UAAA4vE,GACjD,OAAO7vE,KAAK4yI,IAAIZ,qCAAqC4L,EACvD,CAEAC,uBAAAA,CAAwBx3I,GACtB,OAAOrG,KAAK4yI,IAAIkL,kBAAyB,OAAPz3I,QAAO,IAAPA,OAAO,EAAPA,EAASqqI,SAAiB,OAAPrqI,QAAO,IAAPA,OAAO,EAAPA,EAASoqI,6BAAqC,OAAPpqI,QAAO,IAAPA,OAAO,EAAPA,EAASq3I,uCAAuCn8H,MAAK2I,IACxI,CACL0iG,UAAW1iG,EAAKyzH,kBAAoB,GACpC9hE,OAAQ3xD,EAAKstD,YAGnB,CAEAvsD,oBAAAA,GACE,OAAOjrB,KAAK4yI,IAAI3nH,sBAClB,CAEA8yH,wBAAAA,CAAyB1yH,EAAuB2yH,GAC9C,OAAOh+I,KAAK4yI,IAAImL,yBAAyB1yH,EAAM2yH,EACjD,CAEApiH,aAAAA,CAAc5S,GAA4H,IAA1G/Q,EAAchY,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAMq6B,EAAar6B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAM6J,EAAa7J,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAMm/H,EAA6Bn/H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KACjI,IACED,KAAK4yI,IAAIh3G,cAAc,CACrB5S,SAAUA,EACV/Q,OAAQA,EACRqiB,MAAOA,EACPxwB,MAAOA,EACPs1H,qBAAsBA,GAE1B,CAAE,MAAO6e,GACPj+I,KAAKwL,SAAS2L,OAAOxI,MAAM,uCAAD/O,OAAwCq+I,GACpE,CACF,CAEAC,mBAAAA,GACE,OAAOl+I,KAAK4yI,IAAIuL,iBAClB,CAEAlpI,WAAAA,CAAYnL,GAAsD,IAAvCm1H,EAAoBh/H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAC7C,OAAOD,KAAK4yI,IAAIwL,UAAUt0I,EAAOm1H,EACnC,CAEA,UAAIprH,GACF,OAAO7T,KAAK4yI,IAAI/+H,QAClB,CAEA42H,gBAAAA,GACE,OAAOzqI,KAAK4yI,IAAInI,kBAClB,CAEA,cAAM73C,CAASvsF,GAEb,IAAIg4I,GAAoBn5I,EAAAA,EAAAA,GAAA,GAAOmB,GAS/B,OARKA,EAAQi4I,eACXD,EAAgBE,OAAS,CACvBC,MAAO,CACLF,cAAc,WAKPt+I,KAAK4yI,IAAIhgD,SAASyrD,EAEjC,CAEA,mBAAMtU,CAAct3C,SAEZzyF,KAAK4yI,IAAI7I,cAAct3C,EAC/B,CAEAsvC,sBAAAA,CAAuBnV,GACrB,OAAO5sH,KAAK4yI,IAAI7Q,uBAAuBnV,EACzC,CAEAiV,YAAAA,CAAajV,GACX,OAAO5sH,KAAK4yI,IAAI/Q,aAAajV,EAC/B,CAEA6xB,cAAAA,GACE,OAAOz+I,KAAK4yI,IAAI6L,gBAClB,CAEAC,eAAAA,GACE,OAAO1+I,KAAK4yI,IAAI8L,iBAClB,CAEAC,iBAAAA,GACE,OAAO3+I,KAAK4yI,IAAI+L,mBAClB,CAEAjV,iBAAAA,GACE,OAAO1pI,KAAK4yI,IAAIlJ,mBAClB,CAEAE,gBAAAA,GACE,OAAO5pI,KAAK4yI,IAAIhJ,kBAClB,CAEAC,gBAAAA,GACE,OAAO7pI,KAAK4yI,IAAI/I,kBAClB,CAEA3H,kBAAAA,CAAmBntH,GAAiE,IAA/CotH,EAAqBliI,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAC3D,OAAOD,KAAK4yI,IAAI1Q,mBAAmBntH,EAAUotH,EAC/C,CAEAiI,MAAAA,GACE,OAAOpqI,KAAK4yI,IAAIxI,QAClB,CAEA7lD,UAAAA,GACE,OAAOvkF,KAAK4yI,IAAIruD,YAClB,CAEAE,aAAAA,GACE,OAAOzkF,KAAK4yI,IAAInuD,eAClB,CAEAm6D,oBAAAA,GACE,OAAO5+I,KAAK4yI,IAAIgM,sBAClB,CAEAC,oBAAAA,CAAqB9pI,GACnB,OAAO/U,KAAK4yI,IAAIiM,qBAAqB9pI,EACvC,CAEA+pI,cAAAA,CAAe7kF,GACbj6D,KAAK4yI,IAAIkM,eAAe7kF,EAC1B,CAEQyhF,oCAAAA,GACN,IACE,IAAIqD,EAAkB/+I,KAAKwL,SAASmoH,QAAQqrB,UAAU,yBAElDD,GACF/+I,KAAK4yI,IAAIqM,kBAAkBF,EAE/B,CAAE,MAAOrwI,GACP1O,KAAKwL,SAAS2L,OAAOxI,MAAM,2DAA6DD,EAC1F,CAAC,QAEC1O,KAAKwL,SAASmoH,QAAQurB,aAAa,wBACrC,CAEF,CAEAC,qBAAAA,GACE,OAAOn/I,KAAK4yI,IAAIwM,oBAClB,CAEA,wBACI5W,GACF,OAAOxoI,KAAK4yI,IAAIyM,uBAClB,CAEAC,iBAAAA,CAAkB/vH,GAChBvvB,KAAK4yI,IAAI2M,kBAAkBhwH,EAC7B,CAEAgwH,iBAAAA,CAAkBzkI,GAChB,OAAO9a,KAAK4yI,IAAI2M,kBAAkBzkI,EACpC,CAGA0kI,mBAAAA,GACMz6I,EAAAA,MAAMg1H,WAAW/5H,KAAK4yI,IAAI4M,qBAC5Bx/I,KAAK4yI,IAAI4M,sBAGRx/I,KAAK4yI,IAAY6M,yBAEtB,CAEAC,kBAAAA,GACM36I,EAAAA,MAAMg1H,WAAW/5H,KAAK4yI,IAAI8M,oBAC5B1/I,KAAK4yI,IAAI8M,qBAGR1/I,KAAK4yI,IAAY+M,wBAEtB,CAEAC,qBAAAA,GACE,OAAO5/I,KAAK4yI,IAAIgN,uBAClB,CAEAC,eAAAA,GACE,OAAO7/I,KAAK4yI,IAAIiN,iBAClB,CAEAC,qBAAAA,GACE,OAAO9/I,KAAK4yI,IAAIkN,uBAClB,CAEAC,WAAAA,CAAYz/H,EAA0B0/H,GACpC,OAAOhgJ,KAAK4yI,IAAImN,YAAYz/H,EAAa0/H,EAC3C,CAEA7U,YAAAA,CAAaC,GACX,OAAOprI,KAAK4yI,IAAIzH,aAAaC,EAC/B,CAGA/mD,mBAAAA,GACE,OAAOrkF,KAAK4yI,IAAIqN,mBAClB,CAEAp7D,OAAAA,GACE,MAAO,CACLq7D,oBAAqBA,IAAMlgJ,KAAK4yI,IAAI/tD,UAAUq7D,sBAC9CC,kBAAmBA,IAAMngJ,KAAK4yI,IAAI/tD,UAAUs7D,oBAC5CC,WAAYA,IAAMpgJ,KAAK4yI,IAAI/tD,UAAUu7D,aACrCt7D,WAAYA,IAAM9kF,KAAK4yI,IAAI/tD,UAAUC,aACrCu7D,aAAcA,IAAMrgJ,KAAK4yI,IAAI/tD,UAAUw7D,eACvCC,cAAeA,IAAMtgJ,KAAK4yI,IAAI/tD,UAAUy7D,gBACxCC,cAAgBC,GAAsBxgJ,KAAK4yI,IAAI/tD,UAAU07D,cAAcC,GACvEC,uBAAwBA,IAAMzgJ,KAAK4yI,IAAI/tD,UAAU47D,yBAErD,CAEAxf,QAAAA,GACE,OAAOjhI,KAAK4yI,IAAI3R,UAClB,CAEAyf,qBAAAA,GACE1gJ,KAAK4yI,IAAI+N,qBACX,CAEAC,cAAAA,GACE,OAAO5gJ,KAAK4yI,IAAIgO,gBAClB,CAEAC,mBAAAA,CAAoB32H,GAClBlqB,KAAK4yI,IAAIiO,oBAAoB32H,EAC/B,CAEAu/G,cAAAA,GACE,OAAOzpI,KAAK4yI,IAAInJ,gBAClB,CAEAjmD,cAAAA,GACE,OAAOxjF,KAAK4yI,IAAIpvD,gBAClB,CAEAs9D,kBAAAA,GACE,OAAO9gJ,KAAK4yI,IAAIkO,oBAClB,CAEAC,6BAAAA,GACE,OAAO/gJ,KAAK4yI,IAAImO,+BAClB,CAEAC,QAAAA,CAAoB/mF,EAAagnF,GAC/B,OAAOjhJ,KAAK4yI,IAAIoO,SAAoB/mF,EAAKgnF,EAC3C,CAEAC,OAAAA,CAAmBjnF,EAAagnF,GAC9B,OAAOjhJ,KAAK4yI,IAAIsO,QAAmBjnF,EAAKgnF,EAC1C,CAEA/Z,UAAAA,GACE,OAAOlnI,KAAK4yI,IAAI1L,YAClB,CAEAia,UAAAA,CAAW96I,GACT,OAAOrG,KAAK4yI,IAAIuO,WAAW96I,EAC7B,CAEA+6I,eAAAA,GACE,OAAOphJ,KAAK4yI,IAAIwO,iBAClB,CAEAliB,eAAAA,GACE,OAAOl/H,KAAK4yI,IAAI1T,iBAClB,CAEA,iBAAImiB,GACF,MAAO,CACLC,IAAKj6D,GAAAA,EAAsBk6D,IAC3BC,WAAYn6D,GAAAA,EAAsBo6D,UAEtC,CAEAv8D,iBAAAA,GACE,OAAOllF,KAAK4yI,IAAI1tD,mBAClB,CAEAqlD,aAAAA,GACE,OAAOvqI,KAAK4yI,IAAIrI,eAClB,CAEAmX,uBAAAA,GACE1hJ,KAAK4yI,IAAI8O,yBACX,CAEAC,0BAAAA,GACE3hJ,KAAK4yI,IAAI+O,4BACX,CAEA,aAAIjW,GACF,OAAO1rI,KAAK4yI,IAAIgP,YAAc,IAChC,CAEAt+D,kBAAAA,GACE,OAAOtjF,KAAK4yI,IAAItvD,oBAClB,CAEAu+D,kBAAAA,GACE,OAAO7hJ,KAAK4yI,IAAIiP,oBAClB,CAEAC,gCAAAA,GACE,OAAO9hJ,KAAK4yI,IAAIkP,kCAClB,CAEA/lD,uCAAAA,GACE,OAAO/7F,KAAK4yI,IAAI72C,yCAClB,CAEAgmD,wBAAAA,CAAyBC,EAAiB/9H,GACxCjkB,KAAK4yI,IAAImP,yBAAyBC,EAAS/9H,EAC7C,CAEAg+H,yBAAAA,GACEjiJ,KAAK4yI,IAAIqP,2BACX,CAEA,UAAIl1H,GACF,OAAO/sB,KAAK4yI,IAAI7lH,MAClB,CAEA,qBAAIm1H,GACF,OAAOliJ,KAAK4yI,IAAIsP,iBAClB,CAIAC,sBAAAA,GACE,OAAOniJ,KAAK4yI,IAAIuP,wBAClB,CAGAC,2BAAAA,CAA4Bt4I,GAC1B9J,KAAK4yI,IAAIwP,4BAA4Bt4I,EACvC,CAEA,QAAIu4I,GACF,OAAOriJ,KAAK4yI,IAAIyP,IAClB,CAEA,gBAAIC,GACF,OAAOtiJ,KAAK4yI,IAAI0P,YAClB,CAEAC,wBAAAA,GACE,OAAOviJ,KAAK4yI,IAAI2P,0BAClB,CAEAC,oBAAAA,CAAqBC,GACnB,OAAOziJ,KAAK4yI,IAAI4P,qBAAqBC,EACvC,CAEAC,mBAAAA,CAAoBD,EAAuB34I,GACzC9J,KAAK4yI,IAAI8P,oBAAoBD,EAAe34I,EAC9C,CAEA64I,mBAAAA,GACE,OAAO3iJ,KAAK4yI,IAAI+P,qBAClB,CAEAzY,cAAAA,GACE,OAAOlqI,KAAK4yI,IAAI1I,gBAClB,CAEA0Y,wBAAAA,GACE,OAAO5iJ,KAAK4yI,IAAIgQ,0BAClB,CAGA,6BAAIC,GACF,OAAO7iJ,KAAK4yI,IAAIiQ,2BAClB,CAEAtuD,kBAAAA,CAAmBx/E,EAAkBs3E,EAAqBI,GACxD,OAAOzsF,KAAK4yI,IAAIr+C,mBAAmBx/E,EAAUs3E,EAAaI,EAC5D,CAEAvhE,cAAAA,GACE,OAAOlrB,KAAK4yI,IAAI1nH,gBAClB,CAEAE,2BAAAA,CAA4BC,GAC1B,OAAOrrB,KAAK4yI,IAAIxnH,4BAA4BC,EAC9C,CAEAhB,MAAAA,CAAOgB,EAAW0gF,EAAe+2C,GAC/B,OAAO9iJ,KAAK4yI,IAAIvoH,OAAOgB,EAAM0gF,EAAM+2C,EACrC,CACA5W,4BAAAA,GACE,OAAOlsI,KAAK4yI,IAAI1G,8BAClB,CAEAC,oBAAAA,CAAqBloH,GACnBjkB,KAAK4yI,IAAIzG,qBAAqBloH,EAChC,CAEA8+H,0BAAAA,CAA2Bh0H,GACzB,OAAO/uB,KAAK4yI,IAAImQ,2BAA2Bh0H,EAC7C,CAEA,qBAAM2wG,CAAgBC,SACd3/H,KAAK4yI,IAAIlT,gBAAgBC,EACjC,GACDnnH,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,cAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA9auB,CAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,kBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,wBAuKzBo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,wBAAAtJ,GAAAsJ,WAAAtJ,IClTJ,MAAMkwI,GACTjwI,WAAAA,CAA6BvH,GAAoC,KAApCA,SAAAA,EAAiC,KASrDy3I,sBAAgC,CARzC,CAEAC,iBAAAA,CAAkBnuI,GACd,OAAO,IACX,CACA,oBAAIouI,GACA,OAAOnjJ,KAAKwL,SAAS2P,MAAMC,QAC/B,CAGA62C,4BAAAA,GACI,OAAO,IACX,CAEAL,sBAAAA,GACI,OAAO,IACX,CAEAwxF,iBAAAA,GACA,CAEA/kI,OAAAA,GACA,CAEAglI,+BAAAA,CAAgCC,GAC5B,OAAO,CACX,CAEAC,aAAAA,CAAcC,GACV,OAAO,CACX,CAEAC,qBAAAA,CAAsBC,GAClB,MAAO,CAAC,CACZ,EC1CG,MAAMC,GAA4B,wBAElC,MAAMC,GACT7wI,WAAAA,CAA6BvH,GAAoC,KAApCA,SAAAA,EAAiC,KAItDq4I,cAA0C,CAAC,EAH/C7jJ,KAAK6jJ,cAAgB7jJ,KAAKwL,SAASoyC,aAAaijF,QAAQ8iB,KAA8B,CAAC,CAC3F,CAIAG,0BAAAA,CAA2BC,GAA4B,IAADjuG,EAClD,MAAMK,EAAmD,QAA1CL,EAAG91C,KAAKwL,SAASyqC,QAAQC,aAAahsB,YAAI,IAAA4rB,OAAA,EAAvCA,EAAyCK,UACxDA,IACCn2C,KAAK6jJ,cAAc1tG,GAAa4tG,EAChC/jJ,KAAKwL,SAASoyC,aAAaykF,QAAQshB,GAA2B3jJ,KAAK6jJ,eAE3E,CAEAG,oBAAAA,GACIhkJ,KAAK6jJ,cAAgB,CAAC,EACtB7jJ,KAAKwL,SAASoyC,aAAaE,WAAW6lG,GAC1C,CAEAM,8BAAAA,GAA4C,IAADluG,EACvC,MAAMI,EAAmD,QAA1CJ,EAAG/1C,KAAKwL,SAASyqC,QAAQC,aAAahsB,YAAI,IAAA6rB,OAAA,EAAvCA,EAAyCI,UAC5C,IAAD+tG,EAAd,OAAG/tG,GACqC,QAApC+tG,EAAOlkJ,KAAK6jJ,cAAc1tG,UAAU,IAAA+tG,EAAAA,EAEjC,EACX,E,gBCdJ,MAAMC,GAAoB,YAEnB,IAAMC,IAAkBvsI,GAyC1BI,EAAAA,GAAOC,MAAKH,GAwDZD,EAAAA,GAAWxK,IAAGwF,GAjGZ,cAAiC4rE,EAAAA,EAEpC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAoCH64I,yBAAmB,GAAA9rI,EAAAA,EAAAA,GAAA,iCAAAC,GAAA,OAlChCQ,EAAAA,EAAAA,IAAehZ,MACfA,KAAKskJ,0BAA4B,IAAItB,GAAsBhjJ,KAAKwL,UAChExL,KAAKqkJ,oBAAsB,IAAIT,GAAoBp4I,GACnDxL,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASyqC,QAAQC,eAAc,KACpDl2C,KAAKukJ,oBAAoBvkJ,KAAKwL,SAAS6D,OAAOm1I,kBAAkB,GACjE,CACCtoI,iBAAiB,IAGrBlc,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASorB,SAASE,aAAY,KAAO,IAAD8xG,EACzD,GAA2C,QAAvCA,EAAC5oI,KAAKwL,SAASorB,SAASE,WAAW0rG,YAAI,IAAAoG,GAAtCA,EAAwCzpI,YAKtC,GAAIa,KAAKykJ,4BAA6B,CACLzkJ,KAAKqkJ,oBAAoBJ,iCAC7B9kJ,aAAea,KAAK0kJ,yBAAyBvlJ,YACzEa,KAAKqkJ,oBAAoBP,2BAA2B9jJ,KAAK0kJ,yBAEjE,MAVyD,CACrD,MAAMC,EAAe3kJ,KAAKqkJ,oBAAoBJ,iCAC1CU,EAAazkJ,OAAS,GACtBF,KAAK4kJ,aAAaD,EAE1B,CAKA,GACD,CACCzoI,iBAAiB,IAGrBlc,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAAc,KAC5C3P,KAAKwL,SAASkE,KAAKC,cACpB3P,KAAKqkJ,oBAAoBL,sBAC7B,GACD,CACC9nI,iBAAiB,GAEzB,CAKQqoI,mBAAAA,CAAoBM,GACpB7kJ,KAAKskJ,2BACLtkJ,KAAKskJ,0BAA0BjmI,UAI/Bre,KAAKskJ,0BADLO,EACiCA,EAAaC,4BAEb,IAAI9B,GAAsBhjJ,KAAKwL,SAExE,CAEA,+BAAYi5I,GAA+B,IAADM,EACtC,MAAMviB,EAA6C,QAAzCuiB,EAAG/kJ,KAAKwL,SAASorB,SAASE,WAAW0rG,YAAI,IAAAuiB,OAAA,EAAtCA,EAAwC5lJ,WACrD,QAAKqjI,GAIEA,EAAKxiH,cAAcglI,WAAWb,GACzC,CAEA,oBAAIhB,GACA,OAAOnjJ,KAAKskJ,0BAA0BnB,gBAC1C,CAEA,4BACIuB,GAAsC,IAADO,EACrC,MAAMC,EAAgD,QAAzCD,EAAGjlJ,KAAKwL,SAASorB,SAASE,WAAW0rG,YAAI,IAAAyiB,OAAA,EAAtCA,EAAwCn7I,MACxD,GAAIo7I,EAAS,CAAC,IAADC,EACT,IAAIp2H,EAASm2H,EAAQ7/I,MAAM,KAC3B,GAAiC,aAApB,QAAT8/I,EAAAp2H,EAAO,UAAE,IAAAo2H,OAAA,EAATA,EAAWnlI,eACX,OAAO+O,EAAO,GAAG1pB,MAAM,IAE/B,CAEA,MAAO,EACX,CAEA,kBAAMu/I,CAAab,GACf/jJ,KAAKwL,SAASsE,OAAOs7B,SAAS,EAAG,GAC7B24G,EAAU7jJ,OAAS,SACbF,KAAKwL,SAASorB,SAASjc,KAAKwpI,GAAoBJ,EAAUt+I,KAAK,MACrEzF,KAAKqkJ,oBAAoBP,2BAA2BC,UAE9C/jJ,KAAKolJ,cAEnB,CAEA,kBAAMA,GACEplJ,KAAKm8E,aACLn8E,KAAKqkJ,oBAAoBP,2BAA2B,UAC9C9jJ,KAAKwL,SAASorB,SAASjc,KAAK3a,KAAKwL,SAASorB,SAASE,WAAWuuH,qBAE5E,CAOA,cAAIlpE,GACA,OAAOn8E,KAAK0kJ,yBAAyBxkJ,OAAS,CAClD,CAEA,wBAAI+iJ,GACA,OAAOjjJ,KAAKskJ,0BAA0BrB,oBAC1C,CAEAqC,eAAAA,CAAgB9B,GACZ,OAAOxjJ,KAAK0kJ,yBAAyBxnI,SAASsmI,EAClD,CAEAD,aAAAA,CAAcC,GACV,OAAOxjJ,KAAKskJ,0BAA0Bf,cAAcC,EACxD,CAEAvxF,4BAAAA,GACI,OAAOjyD,KAAKskJ,0BAA0BryF,8BAC1C,CAEAL,sBAAAA,GACI,OAAO5xD,KAAKskJ,0BAA0B1yF,wBAC1C,CAEAwxF,iBAAAA,GACIpjJ,KAAKskJ,0BAA0BlB,mBACnC,CAEAC,+BAAAA,CAAgCC,GAC5B,OAAOtjJ,KAAKskJ,0BAA0BjB,gCAAgCC,EAC1E,CAEOJ,iBAAAA,CAAkBnuI,GACrB,OAAO/U,KAAKskJ,0BAA0BpB,kBAAkBnuI,EAC5D,CAEA0uI,qBAAAA,CAAsBC,GAClB,OAAO1jJ,KAAKskJ,0BAA0Bb,sBAAsBC,EAChE,IACHvnI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAAvE,IAAA4E,OAAAC,yBAAA5J,GAAAsJ,UAAA,uBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,4BA1EIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,4BAAAtJ,GAAAsJ,WAAA5D,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,6BAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA1J,I,gBCrEN,IAAKyyI,IAUX,SAVWA,GAAAA,EAAW,sBAAXA,EAAW,sBAAXA,EAAW,oCAAXA,EAAW,kCAAXA,EAAW,4BAAXA,EAAW,sCAAXA,EAAW,wCAAXA,EAAW,sCAAXA,EAAW,0CAUtB,CAVWA,KAAAA,GAAW,K,0FCXhB,MCHMC,IDG4B/nJ,EAAAA,GAAAA,IAAO+pE,GAAAA,EAAP/pE,CAAeE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8DACjD6F,GAAAA,EAAQC,IAAI2jD,OAAO89C,cAAcvhG,QAAeH,GAAAA,EAAQC,IAAI2jD,OAAO9d,UAAU3lC,S,mBEH7E,MCDM6gE,IDCsBhnE,EAAAA,GAAAA,IAAOgoJ,GAAAA,EAAPhoJ,CAAwBE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gC,+DEUpD,MAAM8nJ,IAAiCnmJ,EAAAA,GAAAA,IAC5C,cAA6CC,GAAAA,EAC3CC,MAAAA,GACE,OACEC,EAAAA,GAAAA,KAAC8lJ,GAAkB,CAAC7lJ,UAAWsX,KAAW,sBAAuB,CAAC,CAACkwD,GAAAA,IAAcnnE,KAAKlC,MAAM06E,iBAAiBz4E,UACzGL,EAAAA,GAAAA,KAAC6nE,GAAAA,EAAqB,CAAC5nE,UAAWynE,GAAAA,GAAqBrnE,UACrDL,EAAAA,GAAAA,KAAC+kE,GAAY,CAACrwD,IAAKpU,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAO4oE,gBAAgBzoE,gBAI5F,I,gBCrBG,MAAMwmJ,IAAmBnnJ,EAAAA,GAAAA,GAAU,oBCA7BonJ,IAAqBpnJ,EAAAA,GAAAA,GAAU,sB,OCArC,MCAMqnJ,GDAmBpoJ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,ic,uCEsBnC,MAAMkoJ,IAA4DvmJ,EAAAA,GAAAA,KAAUzB,IAC/E,MAAM0N,GAAWqD,EAAAA,GAAAA,KACXk3I,GAA4B52I,EAAAA,GAAAA,QAA8B,MAC1D62I,GAA2B72I,EAAAA,GAAAA,QAA8B,OAE/DxB,EAAAA,GAAAA,YAAU,KACN7P,EAAMmoJ,UAAUC,kBAAkBC,WAAWJ,EAA0Bx3I,SAEhE,KACHzQ,EAAMmoJ,UAAUC,kBAAkBC,WAAW,KAAK,IAGvD,CAACroJ,EAAMmoJ,UAAUC,oBAGpB,MAAMjgF,EAAwBA,IACnBnoE,EAAMmoJ,UAAUlkH,uBA0E3B,OAAKjkC,EAAMmoJ,UAAUG,WAKjB59I,EAAAA,GAAAA,MAACq9I,GAAS,CAAClmJ,UAAWsX,MAAWnX,EAAAA,GAAAA,IAAQ,mBAAoBhC,EAAM6B,WAAWI,SAAA,CAEzEjC,EAAMmoJ,UAAUI,oBAEjB79I,EAAAA,GAAAA,MAACm9I,GAAgB,CAAChmJ,UAAWsX,KAAW,0BAA2BnZ,EAAMmoJ,UAAUv7E,cACjEp9D,IAAK04I,EAAyBjmJ,SAAA,EAC5CyI,EAAAA,GAAAA,MAACo9I,GAAkB,CAACjmJ,UAAU,6BAA6B2N,IAAKy4I,EAC5CO,cAAe96I,EAASqI,OAAOm6H,QAAQuY,QAAQxmJ,SAAA,CAC9DjC,EAAMmoJ,UAAUO,uBAzBZ5qI,MAEjB,MAAMgxG,EAAY9uH,EAAMmoJ,UAAUr5B,UAClC,OAAIA,EAAU1sH,OAAS,EACZ0sH,EAAUr8G,KAAI,CAACwE,EAAUsuB,IA/DjBojH,EAAC1xI,EAAkBzB,EAAmBk3C,KAClD9qD,EAAAA,GAAAA,KAACwb,GAAAA,EAAmB,CAEvBnG,SAAUA,EACV1B,YAAavV,EAAMmoJ,UAAU12I,UAC7B+L,sBAAsB,EACtB/H,UAAWzV,EAAMmoJ,UAAUx9I,MAAM2vC,eACjCi/B,aAAcv5E,EAAMu5E,aACpBC,YAAax5E,EAAMmoJ,UAAUhf,OAC7B1vD,aAAcz5E,EAAMmoJ,UAAU/T,WAC9Bv6D,qBAAsB75E,EAAM65E,qBAC5BjN,aAAc5sE,EAAMmoJ,UAAUv7E,aAC9BuM,mBAAoB+uE,EAAyBz3I,QAC7C+E,UAAWA,EACXi8D,gBAAiBzxE,EAAMyxE,gBACvBiJ,gBAAgB,EAChBn9D,eAAgB4qD,IAChBwR,aAAc35E,EAAMmoJ,UAAUzuE,SAC9B/I,iBAAkB3wE,EAAMmoJ,UAAUS,6BAClCxvE,eAAgB1sB,EAChBksB,qBAAsB54E,EAAM6oJ,0BAlBvB5xI,GA8DM0xI,CAAe1xI,EAAUsuB,EAAOtuB,IAAajX,EAAM8oJ,gBAxBxCC,MAE1B,IAAIC,EAAehpJ,EAAMmoJ,UAAUc,uBAE/BrsI,EAAY,GAEhB,IAAK,IAAIpV,EAAI,EAAGA,GAAKwhJ,EAAcxhJ,IAC/BoV,EAAUC,MACNjb,EAAAA,GAAAA,KAACsqE,GAAAA,EAA2B,CAExBU,aAAc5sE,EAAMmoJ,UAAUv7E,aAC9BrvD,eAAgB4qD,KAFX,YAAc3gE,IAO/B,OAAOoV,CAAS,EAWTmsI,EAAuB,EAkBjBjrI,GA7DWorI,MAExB,GAAIlpJ,EAAMmoJ,UAAUc,uBAAyB,EACzC,OAAO,KAGX,IAAIE,EAAkC,GAClCC,EAAuBppJ,EAAMopJ,sBAAwB,EAEzD,IAAK,IAAI5hJ,EAAI,EAAGA,EAAI4hJ,EAAsB5hJ,IACtC2hJ,EAAatsI,MAAKjb,EAAAA,GAAAA,KAACgmJ,GAA8B,CAA+BltE,gBAAgB,GAAzC,oBAAsBlzE,IAGjF,OAAO2hJ,CAAY,EAiDND,MAEJlpJ,EAAMmoJ,UAAUkB,0BAGpBrpJ,EAAMmoJ,UAAUmB,sBAnBd,IAqBK,IC7HPC,IAA0B9nJ,EAAAA,GAAAA,IACrC,cAAsCC,GAAAA,EAEpCC,MAAAA,GACE,MAAMwmJ,EAAYjmJ,KAAKlC,MAAMmoJ,UAC7B,IAAIiB,EAAuB7wI,KAAK09B,IAAI,EAAG,EAAIkyG,EAAUr5B,UAAU1sH,QAE/D,OACIR,EAAAA,GAAAA,KAAComJ,GAAoB,CAACG,UAAWA,EAAWtmJ,UAAU,qBAChCunJ,qBAAsBA,EACtB7vE,aAAcr3E,KAAKlC,MAAMu5E,aACzBM,sBAAsB,GAGlD,I,OCfG,IAAe2vE,IAAkBx0I,GAAjC,MACHC,WAAAA,CAA+B7F,GAAkC,KAAlCA,MAAAA,GAC3B8L,EAAAA,EAAAA,IAAehZ,KACnB,CAgBA,YAAcwL,GACV,OAAOxL,KAAKkN,MAAM1B,QACtB,CAEA,aAAI+D,GACA,OAAOvP,KAAKkN,MAAMqC,SACtB,CAEA,WAAIg4I,GACA,MAAM,GAAN3nJ,OAAUI,KAAKkN,MAAMqC,UAAS,KAAA3P,OAAII,KAAKyI,MAAM2vC,eAAc,KAAAx4C,OAAII,KAAKinI,OACxE,CAEA,YAAIzvD,GACA,OAAGx3E,KAAKkN,MAAMsqE,SACHx3E,KAAKkN,MAAMsqE,SAGnBx3E,KAAKwnJ,YACGxnJ,KAAKwL,SAASgsE,SAASq6D,cAG3B,EACX,CACA,wBAAI4V,GACA,OAAOznJ,KAAKkN,MAAMu6I,oBACtB,CAEA,aACIrB,GACA,OAAOpmJ,KAAK0nJ,oBAChB,CAEA,aACI96B,GACA,OAAO5sH,KAAK2nJ,+BAA+B3nJ,KAAK4nJ,gBACpD,CAEUD,8BAAAA,CAA+B/6B,GACrC,OAAO5sH,KAAK6nJ,iBACA7nJ,KAAK8nJ,eACD9nJ,KAAK+nJ,mBAAmBn7B,IAC5C,CAEUk7B,cAAAA,CAAel7B,GACrB,IAAIo7B,EAAmC,CAAC5W,oBAAqBpxI,KAAKioJ,sCAMlE,OAJKljJ,EAAAA,MAAMiP,QAAQhU,KAAKkN,MAAMg7I,+BAC1BF,EAAiB7W,iBAAmBnxI,KAAKkN,MAAMg7I,6BAGhDloJ,KAAKwnJ,YACGxnJ,KAAKwL,SAASgsE,SAASy5D,UAAUrkB,EAAWo7B,GAGhDp7B,CACX,CAEUi7B,gBAAAA,CAAiBj7B,GACvB,OAAOA,EAAUntG,QAAO6hH,GAAMthI,KAAKwL,SAASmmD,YAAYwxF,iBAAiB7hB,KACxD3gH,MAAM,EAAG3gB,KAAKynJ,qBACnC,CAEUM,kBAAAA,CAAmBn7B,GACzB,MAAO,IAAI,IAAIu7B,IAAIv7B,GACvB,CAEA7qF,oBAAAA,GACI,OAAG/hC,KAAKooJ,mBAIDpoJ,KAAKwL,SAAStN,MAAM6jC,sBAAwB/hC,KAAKqoJ,gBAC5D,CAEA5oJ,MAAAA,CAAO43E,GACH,OAAOr3E,KAAKsoJ,YAAYjxE,EAC5B,IAEHl7D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAnDIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,aAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAKRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,aAAAtJ,GAAAsJ,WAAAtJ,I,gBC3DN,MAAMy1I,IAAmB/pJ,EAAAA,GAAAA,GAAU,oB,+BCCnC,MCDMgqJ,GDC0B/qJ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,kTAC3CC,GAAAA,IAMOc,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWo3C,SAAS,IAKvCjzC,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,I,OEZ7C,MCDM43I,GDC2BhrJ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6SAC5CC,GAAAA,IAMOc,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAIvCkE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWo3C,SAAS,IAIvCzuC,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAW0S,SAAS,I,mBEf7C,MAAM63I,GAAkCjrJ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qE,OCClD,MAAM+qJ,IAAoClrJ,EAAAA,GAAAA,IAAOirJ,GAAPjrJ,CAAuCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gCCA3EgrJ,IAA2B32I,EAAAA,GAAAA,GAAcy2I,IACjDx2I,aAAay2I,IACbv2I,Q,OCHE,MAAMy2I,GAAyCprJ,GAAAA,GAAOqrJ,OAAMnrJ,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,oGCAtDmrJ,IAAkC92I,EAAAA,GAAAA,GAAc42I,IACxDz2I,Q,gBCWL,MAAMS,IAAgBtT,EAAAA,GAAAA,IAAS,cAAcC,GAAAA,EAA6CuT,WAAAA,GAAA,SAAA9S,WAAA,KAE1E41C,eAAiB,KACrB71C,KAAKlC,MAAMkrJ,SAASC,2BAA2BjpJ,KAAKlC,MAAMs4C,aAAa8yG,WAAW,CACrF,CAEOC,gBAAAA,GAAoB,IAADnzG,EAAAwB,EAClBx3C,KAAKlC,MAAMs4C,aAAa8yG,YAEzBlpJ,KAAKwL,SAAS2L,OAAOk+G,KAAK,4DAGS,QAAnCr/E,EAACh2C,KAAKlC,MAAMs4C,aAAa2nF,kBAAU,IAAA/nF,GAAlCA,EAAoC2rE,MACrC3hH,KAAKwL,SAAS2L,OAAOs8B,QAAQ,sDAGM,QAAnC+D,EAACx3C,KAAKlC,MAAMs4C,aAAa2nF,kBAAU,IAAAvmF,GAAlCA,EAAoChB,WACrCx2C,KAAKwL,SAAS2L,OAAOs8B,QAAQ,0DAErC,CAEAh0C,MAAAA,GAAU,IAADg4C,EACL,OAA2B,QAAxBA,EAACz3C,KAAKlC,MAAMs4C,oBAAY,IAAAqB,GAAvBA,EAAyBhrC,SAG7BzM,KAAKmpJ,oBAGDzpJ,EAAAA,GAAAA,KAAC+oJ,GAAiB,CAAC9oJ,UAAU,sBAAqBI,UAC9CL,EAAAA,GAAAA,KAACkpJ,GAAwB,CAACjpJ,WAAWG,EAAAA,GAAAA,IAAQ,0CAA2CuH,QAASrH,KAAK61C,eAAe91C,UACjHL,EAAAA,GAAAA,KAACqpJ,GAA+B,CAACK,YAAY,IAAIC,UAAU,KAAKj1I,IAAKpU,KAAKlC,MAAMkrJ,SAASM,aAAatpJ,KAAKlC,MAAMs4C,aAAa2nF,YAAap+H,WAAWG,EAAAA,GAAAA,IAAQ,4BAP/J,IAWf,IAIKypJ,IAA0BlyI,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,a,gBCnD7D,MAAM22I,IAAmBhrJ,EAAAA,GAAAA,GAAU,oBCA7BirJ,IAAejrJ,EAAAA,GAAAA,GAAU,gBCUzBkrJ,IAAyBnqJ,EAAAA,GAAAA,IAClC,cAAqCC,GAAAA,EAEjCC,MAAAA,GAEI,MAAMkqJ,EAAa1yI,KAAW,sBAAuBjX,KAAKlC,MAAM6B,WAEhE,OACI6I,EAAAA,GAAAA,MAACihJ,GAAY,CAAC9pJ,UAAWgqJ,EAAW5pJ,SAAA,CAC/BC,KAAKlC,MAAM2K,MACXzI,KAAKwL,SAASrN,WAAWwS,WAAYjR,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,IAAM,KAC3DzV,KAAKlC,MAAMiC,WAGxB,ICxBK6pJ,IAAmBprJ,EAAAA,GAAAA,GAAU,oB,UCAnC,MAAMqrJ,GAAkBpsJ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4CAGnCe,IAAA,IAAC,cAAC2nJ,GAAc3nJ,EAAA,OAAK2nJ,GAAgBzlJ,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,sCAEtC,IAAI,I,gBCLL,MAAMksJ,IAAmBtrJ,EAAAA,GAAAA,GAAU,oBCkB7BurJ,IAAqBxqJ,EAAAA,GAAAA,IAAS,cAAiCC,GAAAA,EAAwCuT,WAAAA,GAAA,SAAA9S,WAAA,KAG1G+pJ,wBAA0B,KAChChqJ,KAAKlC,MAAMgxB,OAAOm7H,cAAc,EAChC,KAEMC,wBAA0B,KAChClqJ,KAAKlC,MAAMgxB,OAAOq7H,UAAU,EAC5B,KA0CMC,mBAAqB,KAC3BpqJ,KAAKwL,SAASqd,UAAUC,qBAAqB,CAACC,UAAU,iBAAiBC,SAAUhpB,KAAKlC,MAAMuV,YAAa4E,OAAQ,UAAWqiB,MAAOt6B,KAAKlC,MAAMusJ,kBAAkB,GAElK,MAAMpwF,EAAMj6D,KAAKlC,MAAMwsJ,gBACvBtqJ,KAAKwL,SAASorB,SAASjc,KAAKs/C,EAAI,CAChC,CA7CMswF,iCAAAA,GAEN,IAAKvqJ,KAAKlC,MAAMgxB,OAAO07H,YAAcxqJ,KAAKlC,MAAMgxB,OAAO27H,cACrD,OAAO,KAGT,MAAMnE,EAAgBtmJ,KAAKwL,SAASqI,OAAOm6H,QAAQuY,QAEnD,OAAQ/9I,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACNL,EAAAA,GAAAA,KAACmqJ,GAAe,CAACvD,cAAeA,EAAcvmJ,UAC5CL,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACLM,OAAO,cACPG,YAAY,KACZjG,YAAU,EACV+F,KAAM,CAACyB,UAAW1I,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMs3C,UACzDrjD,UAAU,wBACV0H,QAASrH,KAAKgqJ,wBACdzpJ,UAAWP,KAAKlC,MAAMgxB,OAAO27H,mBAIjC/qJ,EAAAA,GAAAA,KAACmqJ,GAAe,CAACvD,cAAeA,EAAcvmJ,UAC5CL,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACLM,OAAO,cACPG,YAAY,KACZjG,YAAU,EACV+F,KAAM,CAACyB,UAAW1I,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM83D,YAAahgE,cAAc,GACpF7D,UAAU,wBACV0H,QAASrH,KAAKkqJ,wBACd3pJ,UAAWP,KAAKlC,MAAMgxB,OAAO07H,gBAKrC,CAEQE,+BAAAA,GACN,OAAO1qJ,KAAKwL,SAASqI,OAAOC,UAAY3J,QAAQnK,KAAKlC,MAAM6sJ,iBAC7D,CASQC,mBAAAA,GACN,GAAyC,IAAtC5qJ,KAAKlC,MAAMwsJ,gBAAgBpqJ,QAAgBF,KAAKwL,SAAS+9B,UAAUtuB,UACpE,OAAO,KAGT,MAAMm9B,EAAyBp4C,KAAK0qJ,kCAAoC,UAAY,UAC9ErqJ,EAAYL,KAAK0qJ,kCAAoCZ,GAAmBpjJ,GAAAA,EAE9E,OAAOhH,EAAAA,GAAAA,KAACmqJ,GAAe,CAAA9pJ,UACrBL,EAAAA,GAAAA,KAACW,EAAS,CACR2G,OAAO,cACPG,YAAY,KACZjG,YAAU,EACVmG,QAASrH,KAAKoqJ,mBACdzqJ,UAAU,kBAAiBI,SAE1BC,KAAKwL,SAASoK,YAAYC,UAAUuiC,MAG3C,CAEA34C,MAAAA,GAEE,OACE+I,EAAAA,GAAAA,MAACohJ,GAAgB,CAACjqJ,WAAWG,EAAAA,GAAAA,IAAQ,qBAAqBC,SAAA,CACvDC,KAAKuqJ,oCACLvqJ,KAAK4qJ,wBAGZ,I,gDCrGK,IAAMC,IAAiBhzI,GAU3BC,EAAAA,GAAWxK,IAAGyK,GAGdD,EAAAA,GAAWxK,IAAG0K,GAGdC,EAAAA,GAAOC,MAAKkM,GAcZnM,EAAAA,GAAOC,MAAKmM,GA2DZpM,EAAAA,GAAOC,MAAKoM,GAKZxM,EAAAA,GAAWxK,IAAGk0C,GAedvpC,EAAAA,GAAOC,MAAKpF,GA7GR,MAGLC,WAAAA,CAAoBvH,EACSs/I,GAA2C,KADpDt/I,SAAAA,EAAyB,KAChBs/I,oBAAAA,EAAwC,KAF7DC,gBAAyC,MAAIxyI,EAAAA,EAAAA,GAAA,gBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,+BAAAE,GAAA,WA8DpCuyI,oBAAc,GAAAzyI,EAAAA,EAAAA,GAAA,oBAAAmM,GAAA,WA2CvBumI,oBAAqB,EAAM,KAiD3BC,6BAAuB,OACvBC,eAAiB,KAEvBlhH,aAAajqC,KAAKkrJ,yBAElBlrJ,KAAKkrJ,wBAA0B/gH,YAAW,KACxCnqC,KAAKu0B,gBAAgB,GACpB,IAAI,GA9JPvb,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKgrJ,eAAiBhrJ,KAAKwL,SAASyiB,SAASC,aAC/C,CASAi4H,UAAAA,CAAWtxH,GACT70B,KAAKorJ,eACFv2H,GACD70B,KAAKqrJ,SAAWx2H,EAChB70B,KAAKsrJ,gBAAgBz2H,EAAQ02H,aAC7BvrJ,KAAKwrJ,wBAA0BxrJ,KAAKwL,SAASsE,OAAO27I,sCAAsCzrJ,KAAKqrJ,UAC/FrrJ,KAAK0rJ,eAEL1rJ,KAAK2rJ,sBACL3rJ,KAAKqrJ,SAAW,KAEpB,CAGAM,mBAAAA,GACE3rJ,KAAKwrJ,wBAA0B,EAC3BxrJ,KAAKqrJ,WACPrrJ,KAAKqrJ,SAAgB,MAAE1iD,UAAS,yBAEpC,CAEQ+iD,UAAAA,GAEF1rJ,KAAK+qJ,kBACP/qJ,KAAK+qJ,gBAAkB,IAAI/zG,GAAAA,IAAe,KACxCh3C,KAAKsrJ,gBAAgBtrJ,KAAKqrJ,SAASE,YAAY,KAInDvrJ,KAAK+qJ,gBAAgBv8I,QAAQxO,KAAKqrJ,UAE/BrrJ,KAAKwL,SAASqI,OAAOC,UAAY9T,KAAKqrJ,UACvCrrJ,KAAKqrJ,SAASxsH,iBAAiB,SAAU7+B,KAAKmrJ,eAElD,CAEQC,YAAAA,GAEHprJ,KAAK+qJ,iBACN/qJ,KAAK+qJ,gBAAgBt8I,aAGpBzO,KAAKwL,SAASqI,OAAOC,UAAY9T,KAAKqrJ,UACvCrrJ,KAAKqrJ,SAAS//G,oBAAoB,SAAUtrC,KAAKmrJ,eAErD,CAKA,iBAAIV,GACF,QAAIzqJ,KAAKqrJ,UACAh1I,KAAKuoG,IAAI5+G,KAAKwrJ,0BAA4B,CAIrD,CAEA,aAAIhB,GACF,QAAIxqJ,KAAKqrJ,UACAh1I,KAAKuoG,IAAI5+G,KAAKwrJ,yBAA2BxrJ,KAAK4rJ,0BAA4B,CAIrF,CAGA,UAAYC,GACV,OAAO7rJ,KAAKwL,SAASsE,OAAOg8I,gBAAgB9rJ,KAAKqrJ,SACnD,CAIQC,eAAAA,CAAgBxhJ,GACtB9J,KAAK+rJ,aAAejiJ,CACtB,CAMA,6BACY8hJ,GACV,OAAG5rJ,KAAKqrJ,SACCrrJ,KAAK+rJ,aAAe/rJ,KAAK6rJ,OAG3B,CACT,CAKQG,MAAAA,CAAOC,GACb,IAAGjsJ,KAAKirJ,mBAAR,CAIAjrJ,KAAKirJ,oBAAqB,EAE1B,IACE,IAAIiB,EAAyBlsJ,KAAKwL,SAASsE,OAAO27I,sCAAsCzrJ,KAAKqrJ,UACzFc,EAAYF,EAAiB51I,KAAKuoG,IAAIstC,IAEvClsJ,KAAKgrJ,iBACNmB,IAAa,GAGf,IAAIC,EAAkBF,EAAyBC,EAE/CnsJ,KAAKqrJ,SAAgB,MAAE1iD,UAAS,eAAA/oG,OAAkBwsJ,EAAe,aACjEpsJ,KAAKwrJ,wBAA0BY,EAE3BpsJ,KAAKwL,SAASkE,KAAK8yE,OACrBxiF,KAAKu0B,gBAET,CAAC,QACCv0B,KAAKirJ,oBAAqB,CAC5B,CAtBA,CAuBF,CAEQ12H,cAAAA,GACNv0B,KAAKwL,SAASqd,UAAUC,qBAAqB,CAACC,UAAU,iBAAiBC,SAAUhpB,KAAK8qJ,oBAAoBv7I,UAAW0I,OAAQ,QAASqiB,MAAOt6B,KAAK8qJ,oBAAoBriJ,MAAM2vC,iBAAiB,EACjM,CAGA+xG,QAAAA,GACKnqJ,KAAKwqJ,WACNxqJ,KAAKgsJ,QAAQK,IAAsC,EAAIh2I,KAAKuK,IAAI5gB,KAAK6rJ,OAAQ7rJ,KAAK4rJ,0BAA4BS,IAGlH,CAEApC,YAAAA,GACKjqJ,KAAKyqJ,eACNzqJ,KAAKgsJ,QAAQK,GAAqCh2I,KAAKuK,IAAI5gB,KAAK6rJ,OAAQQ,IAE5E,GAWD7zI,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA1JiC,IAAK,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,2BAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGM,CAAE,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,cAAApE,IAAAyE,OAAAC,yBAAA5J,GAAAsJ,UAAA,cAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,uBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAiI,IAAA5H,OAAAC,yBAAA5J,GAAAsJ,UAAA,mBAAAtJ,GAAAsJ,WAAAsI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAAkI,IAAA,CAAAjI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAiFpB,CAAE,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,6BAGvBo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,6BAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,UAAAolC,IAAA/kC,OAAAC,yBAAA5J,GAAAsJ,UAAA,UAAAtJ,GAAAsJ,WAAAtJ,I,4ECjGX,MAMMw5I,GAAwB,CAJF,GACA,GACD,KAQdC,IAA0EhtJ,EAAAA,GAAAA,KAAUzB,IAC7F,IAAI0uJ,GAAYr9I,EAAAA,GAAAA,QAA8B,MAE1Cs9I,EAAmB,EAEvB,MAAMjhJ,GAAWqD,EAAAA,GAAAA,KAEX4rE,GAASC,EAAAA,GAAAA,UAAQ,MAASnR,aAAc,GAAI98D,QAAS,UAAW,IAMhEigJ,EAAuBA,KAAe,IAADC,EACvC,OAAOF,GAAqC,QAArBE,EAAG7uJ,EAAMs4C,oBAAY,IAAAu2G,OAAA,EAAlBA,EAAoBC,WAAW1sJ,OAAM,EAS7D2sJ,EAAoBC,IAClBz2I,KAAKsD,MAAMmzI,KAAkBR,GAAsBI,OACnDF,EAAUj+I,QAAQgY,QAElB/a,EAASuhJ,aAAaC,qBAVFC,MACxB,MAAM5pH,EAAgBqpH,IAEtB,OAAOzzG,OAAOn7C,EAAMs4C,aAAaw2G,WAAWvpH,GAAO,EAOJ4pH,IAE3C9iH,YAAW,KACPqiH,EAAUj+I,QAAQ+hB,MAAM,GA1CP,KAsBzBm8H,IAwBA,EAgBJ,OACI/sJ,EAAAA,GAAAA,KAAC4yD,GAAAA,EAAe,CACZugF,QAfeqa,CAAClmI,EAAqB+H,KAQrC/H,IAAUmmI,GAAAA,aAAaC,OACvBP,EAAkB99H,EAAkCs+H,MACxD,EAMIj5I,IAAK5I,EAAStN,MAAMuN,aAAa1M,OAAOuuJ,YAAYC,mBAAmBpuJ,WACvEmO,IAAKk/I,EACL7xE,UAAQ,EACRzyC,MAAI,EACJp/B,MAAO2xE,GACT,I,OC3EH,MAAM+yE,GAAwB/vJ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+UAQ1Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQC,KAAK,IAI9BqB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,IAItC0I,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAW0S,SAAS,ICbvC48I,IAAwCluJ,EAAAA,GAAAA,KAAS,KAAO,IAADmuJ,EAChE,MAAMliJ,GAAWqD,EAAAA,GAAAA,KAEjB,OACInP,EAAAA,GAAAA,KAAC8tJ,GAAqB,CAAAztJ,SACjByL,EAASwJ,SAASC,YAAgD,QAArCy4I,EAACliJ,EAASuhJ,aAAap1G,sBAAc,IAAA+1G,OAAA,EAApCA,EAAsC50G,gBACjD,I,oDCehC,MAAMjmC,IAA4DtT,EAAAA,GAAAA,KAAUzB,IAAW,IAAD6vJ,EAClF,MAAMniJ,GAAWqD,EAAAA,GAAAA,KAEXsqC,EAAar7C,EAAMq7C,YAAcntC,GAAAA,SAEjC4hJ,EAAyBA,IACJpiJ,EAASrN,WAAWwS,WAAanF,EAASrN,WAAWC,UAEpDiyC,GAAAA,EAAsBG,cAAgBH,GAAAA,EAAsBI,SAGlFo9G,EAAwBA,KAAgB,IAADlB,EAAAmB,EACzC,QAAuB,QAAnBnB,EAAC7uJ,EAAMs4C,oBAAY,IAAAu2G,GAAY,QAAZmB,EAAlBnB,EAAoBC,kBAAU,IAAAkB,IAA9BA,EAAgC5tJ,SAI9BpC,EAAMs4C,aAAaw2G,WAAWmB,OAAMC,IACvC,MAAMr2G,EAAiB75C,EAAM+W,SAAS+iC,oBAAoBqB,OAAO+0G,IACjE,OAAQjpJ,EAAAA,MAAMkP,kBAAgC,OAAd0jC,QAAc,IAAdA,OAAc,EAAdA,EAAgBvE,YAAY,GAC9D,EAmBN,OAAuB,QAAnBu6G,EAAC7vJ,EAAMs4C,oBAAY,IAAAu3G,GAAlBA,EAAoBlhJ,SAKrB/M,EAAAA,GAAAA,KAACy5C,EAAU,CAAAp5C,UACPL,EAAAA,GAAAA,KAAC0wC,GAAAA,EAA2B,CAAC3vC,OAAQmtJ,IAAyB7tJ,UAC1DL,EAAAA,GAAAA,KAACwxC,GAAAA,EAAgB,CAAC7pC,QAASA,IAAMvJ,EAAMuJ,UAAWgyC,cAAev7C,EAAMuJ,QAAS1H,UAAU,oBAAmBI,UACzGL,EAAAA,GAAAA,KAACixC,GAAAA,EAAkB,CAACE,sBAAuBg9G,IAAyB78G,YAAaI,GAAAA,GAAYmB,MAAO9xC,OAAQmtJ,IAAyB7tJ,SAvB1I8tJ,KACHrlJ,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAAC6sJ,GAA8B,CAACn2G,aAAct4C,EAAMs4C,gBACpD12C,EAAAA,GAAAA,KAAC+tJ,GAA2B,QAEhCjlJ,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAAC45C,GAAAA,EAA8B,KAC/B9wC,EAAAA,GAAAA,MAAC+wC,GAAAA,EAA8B,CAAAx5C,SAAA,EAC3BL,EAAAA,GAAAA,KAAC85C,GAAAA,EAAuC,KACxC95C,EAAAA,GAAAA,KAAC+5C,GAAAA,EAAkC,kBAOxC,IAYM,IAIRw0G,IAA8B52I,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,aCxDjE,MAAeq7I,WAA4B5G,GAE9Cv0I,WAAAA,CAA+Bo7I,EAAiDjhJ,GAC5EkL,MAAMlL,GAAO,KADcihJ,kBAAAA,EAA+C,KA6BpEC,mBAAyC,IAAIvD,GAAkB7qJ,KAAKwL,SAAUxL,KA3BxF,CAEA,UAAIinI,GACA,OAAOjnI,KAAKmuJ,kBAAkBlnB,MAClC,CAEA,eAAIonB,GACA,OAAOruJ,KAAKmuJ,kBAAkBE,WAClC,CAEA,SAAI5lJ,GACA,OAAOzI,KAAKwL,SAASoK,YAAYsoH,eAAel+H,KAAKmuJ,kBAAkB1lJ,MAAOzI,KAAKsuJ,6BACvF,CAEA,qBAAIpI,GACA,OAAOlmJ,KAAKouJ,kBAChB,CAEA,gCAAI1H,GACA,MAAMtwG,EAAep2C,KAAKmuJ,kBAAkB3nB,cAClD,SAAKpwF,IAAiBA,EAAa3pC,UAItB2pC,EAAapF,cAAgBI,GAAAA,GAAYY,cACpD,CAIUs8G,0BAAAA,GACN,OAAOtuJ,KAAKmuJ,kBAAkBI,4BAA8BvuJ,KAAKwL,SAASkE,KAAKqW,UAAO5lB,CAC1F,CAEA,wCAAc8nJ,GACV,OAAOjoJ,KAAKmuJ,kBAAkBK,8BAClC,CAEA,cAAItc,GACA,OAAO,IACX,CAEA,mBAAI3iE,GACA,OAAOvvE,KAAKmuJ,kBAAkB5+E,eAClC,CAEA,cAAck/E,GACV,MAAMC,EAAe1uJ,KAAKmuJ,kBAAkBQ,QAAU,GAMtD,OAAI5pJ,EAAAA,MAAMqoH,SAASshC,GACPA,EAAqBz0F,KAAO,GAGjCy0F,CACX,CAEA,eAAclH,GACV,OAAOxnJ,KAAKmuJ,kBAAkBS,eAClC,CAEUlH,kBAAAA,GACN,OAAQ1nJ,KAAKwL,SAASmmD,YAAYwqB,UACtC,CAEUyrE,aAAAA,GACN,MAAMh7B,EAAY5sH,KAAKmuJ,kBAAkB5uI,SAAW,GACpD,OAAIvf,KAAKwL,SAASmmD,YAAYwqB,WACnB,GAGJywC,CACX,CAGUiiC,0BAAAA,GACN,OAAI7uJ,KAAKmuJ,kBAAkB3nB,cAChB,EAGPxmI,KAAKmuJ,kBAAkBzjF,eAAiBC,GAAAA,GACjC,EAGJ,CACX,CAEA,0BAAIo8E,GACA,OAAO/mJ,KAAK6uJ,4BAChB,CAEUhH,gBAAAA,CAAiBj7B,GAEvB,OADAA,EAAYx0G,MAAMyvI,iBAAiBj7B,GAC5B5sH,KAAK8uJ,kDAAkDliC,EAClE,CAEQkiC,iDAAAA,CAAkDliC,GACtD,OAAK5sH,KAAKwL,SAASqI,OAAOC,SAGtB9T,KAAKmuJ,kBAAkBzjF,eAAiBC,GAAAA,GACjCiiD,EAEN5sH,KAAKwL,SAASorB,SAASC,WAGrB+1F,EAAUjsG,MAAM,EAAG,GAFfisG,EANAA,CASf,CAEA,iBAAImiC,GACA,OAAO/uJ,KAAKmuJ,kBAAkBa,iBAClC,CAEA,wBAAYC,GAAiC,IAADC,EACxC,OAAO/kJ,QAA4C,QAArC+kJ,EAAClvJ,KAAKmuJ,kBAAkB3nB,qBAAa,IAAA0oB,OAAA,EAApCA,EAAsCziJ,QACzD,CAEA,gCAAY0iJ,GAAyC,IAADC,EAChD,OAAOjlJ,QAA6C,QAAtCilJ,EAACpvJ,KAAKmuJ,kBAAkBkB,sBAAc,IAAAD,OAAA,EAArCA,EAAuC3iJ,QAC1D,CAEA,gBAAIi+D,GACA,OAAO1qE,KAAKmuJ,kBAAkBzjF,YAClC,CAEA,oBAAc09E,GACV,OAAOpoJ,KAAKmuJ,kBAAkBmB,eAClC,CAEA,mBAAcjH,GACV,OAAOroJ,KAAKmuJ,kBAAkB9yI,cAClC,CAEUk0I,oBAAAA,GACN,IAAIl/H,EAAiB,KAKrB,OAJGrwB,KAAKwL,SAASorB,SAASC,aACtBxG,EAAiBA,IAAMrwB,KAAKwL,SAASorB,SAASjc,KAAK,gBAG/Cjb,EAAAA,GAAAA,KAACm6C,GAAAA,EAAsB,CAC3BzD,aAAcp2C,KAAKmuJ,kBAAkB3nB,cACrCnzH,YAAY,cACZ8lC,WAAYqvG,GACZnhJ,QAASgpB,GAEjB,CAEUm/H,qBAAAA,GACN,OACI9vJ,EAAAA,GAAAA,KAAC6pJ,GAAuB,CACpBnzG,aAAcp2C,KAAKmuJ,kBAAkBkB,gBAGjD,CAEUI,yBAAAA,GACN,IAAIp/H,EAAiB,KAKrB,OAJGrwB,KAAKwL,SAASorB,SAASC,aACtBxG,EAAiBA,IAAMrwB,KAAKwL,SAASorB,SAASjc,KAAK,gBAInDjb,EAAAA,GAAAA,KAACuuJ,GAA2B,CACxB73G,aAAcp2C,KAAKmuJ,kBAAkBuB,mBACrCv2G,WAAYqvG,GACZnhJ,QAASgpB,GAGrB,CAEAm2H,oBAAAA,GACI,OACIh+I,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,CACKC,KAAKuvJ,uBACLvvJ,KAAKwvJ,wBACLxvJ,KAAKyvJ,8BAGlB,CAEApJ,gBAAAA,GACI,OACI3mJ,EAAAA,GAAAA,KAACgqJ,GAAsB,CAACjhJ,MAAOzI,KAAK2vJ,2BACZhwJ,UAAWsX,QAAcjX,KAAK4vJ,uBAAuB7vJ,SACxEC,KAAK6vJ,wBAGlB,CAEUA,oBAAAA,GACN,OAAOnwJ,EAAAA,GAAAA,KAACqqJ,GAAkB,CACtBM,gBAAiBrqJ,KAAKyI,MAAM2vC,eAC5BtpB,OAAQ9uB,KAAKkmJ,kBACboE,gBAAiBtqJ,KAAKyuJ,WACtBp7I,YAAarT,KAAKuP,UAClBo7I,iBAAkB3qJ,KAAKmuJ,kBAAkBxD,kBAEjD,CAGAiF,mBAAAA,GACI,MAAMjG,EAAuB,CAAC3pJ,KAAKmuJ,kBAAkB2B,oBASrD,OARG9vJ,KAAKivJ,sBACJtF,EAAWhvI,KAAKynB,GAAAA,GAGjBpiC,KAAKmvJ,8BACJxF,EAAWhvI,KAAK0nB,GAAAA,GAGbsnH,CACX,CAEAgG,wBAAAA,GACI,OACInnJ,EAAAA,GAAAA,MAACghJ,GAAgB,CAAC7pJ,UAAU,sBAAqBI,SAAA,CAC5CC,KAAK+vJ,oBACL/vJ,KAAKgwJ,sBAGlB,CAEUD,iBAAAA,GACN,OAAI/vJ,KAAKivJ,sBAAwBjvJ,KAAKmuJ,kBAAkB2B,qBAAuBG,GAAAA,IACpEvwJ,EAAAA,GAAAA,KAAC6oJ,GAAgB,IAGrB,IACX,CAEUyH,iBAAAA,GACN,OAAOhwJ,KAAKyI,MAAMmN,WACtB,CAEAuxI,oBAAAA,GACI,OAAO,IACX,CAEAC,gBAAAA,GACI,OAAO,IACX,EC7QG,MAAe8I,WAAyBhC,GAC3C,eAAc1G,GACV,OAAO,CACX,CAEU2I,wBAAAA,CAAyBvjC,GAC/B,MAAMwjC,EAAoBpwJ,KAAKmuJ,kBAAkBiC,kBACjD,OAAKA,GAAkD,IAA7BA,EAAkBlwJ,OAIrC0sH,EAAUntG,QAAO1K,IAAa,IAADs7I,EAChC,OAAOD,EAAkBlzI,SAA+C,QAAvCmzI,EAACrwJ,KAAKwL,SAAS2P,MAAMC,SAASrG,UAAS,IAAAs7I,OAAA,EAAtCA,EAAwChkE,YAAY,IAJ/EugC,CAMf,ECXG,MAAM0jC,WAAgCJ,GAE/BxI,kBAAAA,GACN,OAAI1nJ,KAAKwL,SAASkE,KAAKC,cAAgB3P,KAAKwL,SAAS2P,MAAM4lH,oBAAoBC,cACpE5oH,MAAMsvI,sBAAwB1nJ,KAAK4sH,UAAU1sH,OAAS,EAE1DkY,MAAMsvI,oBACjB,CAEUE,aAAAA,GACN,IAAK5nJ,KAAKwL,SAAS2P,MAAM4lH,oBAAoBnU,UACzC,MAAO,GAGX,IAAIA,EAAY5sH,KAAKwL,SAAS2P,MAAM4lH,oBAAoBnU,UACxD,OAAO5sH,KAAKmwJ,yBAAyBvjC,EACzC,CAEA07B,WAAAA,CAAYjxE,GACR,OAAQ33E,EAAAA,GAAAA,KAAC2nJ,GAAuB,CAAoBpB,UAAWjmJ,KAAMq3E,aAAcA,GAA7Cr3E,KAAKunJ,QAC/C,ECbG,MAAMgJ,IAAoBhxJ,EAAAA,GAAAA,IAAS,cAAgCC,GAAAA,EAExEC,MAAAA,GAEE,MAAMwmJ,EAAYjmJ,KAAKlC,MAAMmoJ,UAE7B,OACIvmJ,EAAAA,GAAAA,KAAComJ,GAAoB,CAACG,UAAWA,EAAWtmJ,UAAW,kCAAmC03E,aAAcr3E,KAAKlC,MAAMu5E,cAEzH,ICjBK,MAAMm5E,WAA0BN,GAEzBxI,kBAAAA,GACN,OAAI1nJ,KAAKwL,SAASgsE,SAASs4D,mBAAmB9O,cAIvC5oH,MAAMsvI,sBAAwB1nJ,KAAK4nJ,gBAAgB1nJ,OAAS,EAHxDkY,MAAMsvI,oBAIrB,CAEUE,aAAAA,GAA2B,IAAD6I,EAChC,OAAgD,QAAzCA,EAAAzwJ,KAAKwL,SAASgsE,SAASs4D,0BAAkB,IAAA2gB,OAAA,EAAzCA,EAA2C7jC,YAAa,EACnE,CAEU0hC,0BAAAA,GACN,OAAOtuJ,KAAKwL,SAASkE,KAAK4yE,SAASO,SACvC,CAEA,YAAIrL,GAAoB,IAADk5E,EACnB,OAAgD,QAAzCA,EAAA1wJ,KAAKwL,SAASgsE,SAASs4D,0BAAkB,IAAA4gB,OAAA,EAAzCA,EAA2C70E,SAAU,EAChE,CAEAysE,WAAAA,CAAYjxE,GACR,OAAQ33E,EAAAA,GAAAA,KAAC6wJ,GAAiB,CAAoBtK,UAAWjmJ,KAAMq3E,aAAcA,GAA7Cr3E,KAAKunJ,QACzC,ECjBG,MAAMoJ,IAA0BpxJ,EAAAA,GAAAA,IACnC,cAAsCC,GAAAA,EAClCC,MAAAA,GACI,MAAMwmJ,EAAYjmJ,KAAKlC,MAAMmoJ,UAC7B,OACIvmJ,EAAAA,GAAAA,KAAComJ,GAAoB,CACjBG,UAAWA,EACXtmJ,UAAW,gBACX03E,aAAcr3E,KAAKlC,MAAMu5E,cAGrC,ICfD,MAAMu5E,WAA0B1C,GACnCn7I,WAAAA,CAA+Bo7I,EACnBjhJ,GACRkL,MAAM+1I,EAAmBjhJ,GAAO,KAFLihJ,kBAAAA,CAG/B,CAEUzG,kBAAAA,GACN,OAAG3iJ,EAAAA,MAAMkP,kBAAkBjU,KAAKwL,SAASqlJ,YAAYC,uBAC1C14I,MAAMsvI,qBAGVtvI,MAAMsvI,sBAAwB1nJ,KAAK4sH,UAAU1sH,OAAS,CACjE,CAEU0nJ,aAAAA,GAA2B,IAADmJ,EAChC,OAAsD,QAA/CA,EAAA/wJ,KAAKwL,SAASqlJ,YAAYC,6BAAqB,IAAAC,OAAA,EAA/CA,EAAiDnkC,YAAa,EACzE,CAEU0hC,0BAAAA,GACN,OAAOtuJ,KAAKwL,SAASkE,KAAKqW,IAC9B,CAEA,YAAIyxD,GAAoB,IAADw5E,EACnB,OAAsD,QAA/CA,EAAAhxJ,KAAKwL,SAASqlJ,YAAYC,6BAAqB,IAAAE,OAAA,EAA/CA,EAAiDn1E,SAAU,EACtE,CAEAysE,WAAAA,CAAYjxE,GACR,OAAO33E,EAAAA,GAAAA,KAACixJ,GAAuB,CAAoB1K,UAAWjmJ,KAAMq3E,aAAcA,GAA7Cr3E,KAAKunJ,QAC9C,ECvBG,MAAM0J,IAA0B1xJ,EAAAA,GAAAA,IACnC,cAAsCC,GAAAA,EAElCC,MAAAA,GAEI,MAAMwmJ,EAAYjmJ,KAAKlC,MAAMmoJ,UAE7B,OACIvmJ,EAAAA,GAAAA,KAAA,OAAKC,WAAWG,EAAAA,GAAAA,IAAQ,uBAAuBC,UAC3CL,EAAAA,GAAAA,KAAComJ,GAAoB,CACjBG,UAAWA,EACX5uE,aAAcr3E,KAAKlC,MAAMu5E,aACzB9H,gBAAiBvvE,KAAKlC,MAAMmoJ,UAAU12E,gBACtCoI,sBAAsB,KAItC,ICrBD,MAAMu5E,WAAgChB,GAE/BxI,kBAAAA,GACN,OAAG3iJ,EAAAA,MAAMkP,kBAAkBjU,KAAKmxJ,qBACrB/4I,MAAMsvI,qBAGVtvI,MAAMsvI,sBAAwB1nJ,KAAK4sH,UAAU1sH,OAAS,CACjE,CAEA,cAAIgyI,GACA,OAAGntI,EAAAA,MAAMkP,kBAAkBjU,KAAKwL,SAASuP,6BAA6Bq2I,+BAC3Dx3C,GAAAA,EAAas2B,aAGjBnwG,SAAS//B,KAAKwL,SAASuP,6BAA6Bq2I,8BAC/D,CAEU9C,0BAAAA,GACN,IAAI+C,EArB+B,GA2BnC,OAJG,EAAIrxJ,KAAK4sH,UAAU1sH,QAAUF,KAAK4sH,UAAU1sH,OAASmxJ,IACpDA,EAAWrxJ,KAAK4sH,UAAU1sH,QAGvB,CACHoxJ,UAAWD,EACX7nB,YAAaxpI,KAAKwL,SAASkE,KAAK85H,aAAexpI,KAAKwL,SAASoK,YAAYC,UAAU,gBAE3F,CAEU+xI,aAAAA,GACN,OAAO5nJ,KAAKmxJ,qBAAuB,EACvC,CAEA,mBAAc9I,GACV,OAAO,CACX,CAEQ8I,iBAAAA,GACJ,OAAGnxJ,KAAKkyI,aAAet4B,GAAAA,EAAas2B,aACzBlwI,KAAKwL,SAASgsE,SAASi4D,+CAEvBzvI,KAAKwL,SAASgsE,SAAS43D,uCAEtC,CAEA,wBAAIqY,GACA,OAlDmC,EAmDvC,CAEAa,WAAAA,CAAYjxE,GACR,OACI33E,EAAAA,GAAAA,KAACuxJ,GAAuB,CAAoBhL,UAAWjmJ,KAAMq3E,aAAcA,GAA7Cr3E,KAAKunJ,QAE3C,EC3DG,MAAMgK,WAA8BrD,GAE7BxG,kBAAAA,GACN,OAAOtvI,MAAMsvI,sBAAwB1nJ,KAAK4sH,UAAU1sH,OAAS,CACjE,CAEAooJ,WAAAA,CAAYjxE,GACR,MAAMuvD,EAAa5mI,KAAKmuJ,kBAGxB,OACIzuJ,EAAAA,GAAAA,KAAComJ,GAAoB,CACjBG,UAAWjmJ,KAEXq3E,aAAcA,EACd9H,gBAAiBq3D,EAAWr3D,iBAFvBvvE,KAAKunJ,QAKtB,E,eCDJ,MAEaiK,IAA0BjyJ,EAAAA,GAAAA,IACnC,MAAMiyJ,UAAgCr/H,GAAAA,EAAoFpf,WAAAA,GAAA,SAAA9S,WAAA,KAEtHymB,MAAQ,CACJ+qI,YAAY,GACd,KAmBMC,2BAAqB,OAErBC,8BAAiCh4G,KACjCA,EAAQ,GAAGtrC,kBAAoB,GAAKsrC,EAAQ,GAAGnsC,kBAC/CxN,KAAK4xJ,+BACL5xJ,KAAKuyB,SAAS,CACVk/H,YAAY,IAEpB,EACF,KA2BMI,yBAA4Bh9H,IAC5BA,GACA70B,KAAK8xJ,4BAA4Bj9H,EACrC,CACF,CAzDM4xH,cAAAA,CAAe1xI,EAAkBzB,GAGrC,OACI5T,EAAAA,GAAAA,KAACwb,GAAAA,EAAmB,CACCu8D,aAAcz3E,KAAKlC,MAAM05E,SACzBziE,SAAUA,EACVzB,UAAWA,EACXD,YAAarT,KAAKlC,MAAMuV,YACxBE,UAAWvT,KAAKlC,MAAMi0J,wBACtBrnF,aAAc1qE,KAAKlC,MAAM4sE,aACzBiN,qBAAsB33E,KAAKlC,MAAM65E,qBACjCt8D,eAAgBrb,KAAKlC,MAAMud,eAC3BC,qBAAsBtb,KAAKlC,MAAMwd,sBAT5BvG,EAWlC,CAaQ+8I,2BAAAA,CAA4Bj9H,GAEhC70B,KAAK4xJ,+BAEL5xJ,KAAK0xJ,sBAAwB,IAAIvjJ,qBAAqBnO,KAAK2xJ,8BAA+B,CACtF96E,WAAY,QACZhpE,UAAW,KAGf7N,KAAK0xJ,sBAAsBljJ,QAAQqmB,EACvC,CAGAvP,oBAAAA,GACElN,MAAMkN,uBACNtlB,KAAK4xJ,8BACP,CAEQA,4BAAAA,GACA5xJ,KAAK0xJ,wBACL1xJ,KAAK0xJ,sBAAsBjjJ,aAC3BzO,KAAK0xJ,sBAAwB,KAErC,CAQQM,gBAAAA,GACJ,MAAMC,EAAqBjyJ,KAAKlC,MAAM8uH,UAAUjsG,MArE3B,IAsErB,GAAiC,IAA9BsxI,EAAmB/xJ,OAClB,OAAO,KAGX,MAAMgyJ,GAAiBhtJ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAChBlF,KAAKlC,OAAK,IACbq0J,WAAYnyJ,KAAKlC,MAAMq0J,WAAa,EACpCvlC,UAAWqlC,IAGf,OAAQvyJ,EAAAA,GAAAA,KAAC8xJ,GAAuBtsJ,EAAAA,EAAAA,GAAA,GAAmDgtJ,GAAiB,SAAAtyJ,OAArDsyJ,EAAkBC,YACrE,CAEQC,mBAAAA,GACJ,MAAMC,EApFe,GAoFIryJ,KAAKlC,MAAMq0J,WAC9BG,EAAwBtyJ,KAAKlC,MAAM8uH,UAAUjsG,MAAM,EArFpC,IAsFrB,OACInY,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,CACKuyJ,EAAsB/hJ,KAAI,CAACwE,EAAUsuB,IAAUrjC,KAAKymJ,eAAe1xI,EAAUs9I,EAAmBhvH,KAChGrjC,KAAKgyJ,qBAGlB,CAEAvyJ,MAAAA,GAEI,OAA6B,IAA1BO,KAAKlC,MAAMq0J,YAAoBnyJ,KAAK0mB,MAAM+qI,WACpCzxJ,KAAKoyJ,uBAIV1yJ,EAAAA,GAAAA,KAAA,OAAKoJ,MAAO,CAACpH,MAAO,OAAQL,OAAQ,QAASiM,IAAKtN,KAAK6xJ,0BAE/D,IC1HKU,IAAe/zJ,EAAAA,GAAAA,GAAU,gB,OCA/B,MCAMg0J,GDAgC/0J,GAAAA,GAAOy8B,EAACv8B,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gGAIxCE,GAASA,EAAMI,MAAM6J,OAAO4B,Y,OEHlC,MAAM8oJ,GAAwBh1J,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,oDAC1C80J,GAAAA,ICcQC,IAAqBpzJ,EAAAA,GAAAA,IAAS,cAAiCC,GAAAA,EAElEi1D,YAAAA,GAEN,OAAIz0D,KAAKlC,MAAMwd,sBAAwBtb,KAAKwL,SAASmmD,YAAYwqB,WACxD,KAEFn8E,KAAKlC,MAAMmoJ,UAAUI,kBAC9B,CAEQzqI,YAAAA,CAAagxG,GACnB,OAEIltH,EAAAA,GAAAA,KAAC6yJ,GAAY,CAAC5yJ,UAAWsX,KAAW,gBAAiBowD,GAAAA,IAAiBtnE,UAClEL,EAAAA,GAAAA,KAAC8xJ,GAAuB,CAACW,WAAY,EACZvlC,UAAWA,EACXp1C,SAAUx3E,KAAKlC,MAAMmoJ,UAAUzuE,SAC/B9M,aAAc1qE,KAAKlC,MAAMmoJ,UAAUv7E,aACnCr3D,YAAarT,KAAKlC,MAAMmoJ,UAAU12I,UAClCwiJ,wBAAyB/xJ,KAAKlC,MAAMmoJ,UAAUx9I,MAAM2vC,eACpDu/B,qBAAsB33E,KAAKlC,MAAM65E,qBACjCt8D,eAAgBrb,KAAKlC,MAAMud,eAC3BC,qBAAsBtb,KAAKlC,MAAMwd,wBAGpE,CAEQs3I,cAAAA,GACN,OAAG5yJ,KAAKwL,SAASmmD,YAAYwqB,YAEzBz8E,EAAAA,GAAAA,KAAC8yJ,GAAsB,CAAAzyJ,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,yCAGxD,IAEX,CAEQk/C,cAAAA,GACN,IAAI63D,EAAY5sH,KAAKlC,MAAMmoJ,UAAUr5B,UACrC,OAAwB,IAArBA,EAAU1sH,OACJF,KAAK4yJ,kBAGZpqJ,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,CACGC,KAAKy0D,eACLz0D,KAAK4b,aAAagxG,KAGzB,CAGAntH,MAAAA,GACE,OACEC,EAAAA,GAAAA,KAAC+yJ,GAAqB,CAAC9yJ,UAAW,0BAA0BI,SACzDC,KAAK+0D,kBAGZ,IClEK,MAAM89F,WAA2BvL,GACpCv0I,WAAAA,CAA+B+/I,EACnB5lJ,GACRkL,MAAMlL,GAAM,KAFe4lJ,WAAAA,CAG/B,CAEUlL,aAAAA,GACN,OAAO5nJ,KAAK8yJ,WAAWvzI,SAAW,EACtC,CAEA,eAAcioI,GACV,OAAOxnJ,KAAK8yJ,WAAWlE,eAC3B,CAGUlH,kBAAAA,GACN,OAAO,CAEX,CAEA,wCAAcO,GAEd,CAEA,UAAIhhB,GACA,OAAOjnI,KAAK8yJ,WAAW7rB,MAC3B,CAEA,SAAIx+H,GACA,OAAOzI,KAAKwL,SAASoK,YAAYsoH,eAAel+H,KAAK8yJ,WAAWrqJ,MACpE,CAEA,wBAAIg/I,GACA,OAAOznJ,KAAK4nJ,gBAAgB1nJ,MAChC,CAEA,iBAAI6uJ,GACA,OAAO,CACX,CAEA,gBAAIrkF,GACA,OAAO1qE,KAAK8yJ,WAAWpoF,YAC3B,CAEA,oBAAc09E,GACV,OAAOpoJ,KAAK8yJ,WAAWxD,eAC3B,CAEA,mBAAcjH,GACV,OAAOroJ,KAAK8yJ,WAAWz3I,cAC3B,CAEA,4BAAY03I,GACR,OAAO/yJ,KAAK+hC,sBAChB,CAEAskH,gBAAAA,GACI,MAAM59I,GACF/I,EAAAA,GAAAA,KAAC8pJ,GAAgB,CAAC7pJ,UAAU,sBAAqBI,SAC5CC,KAAKyI,MAAMmN,cAIpB,OACIlW,EAAAA,GAAAA,KAACgqJ,GAAsB,CAACjhJ,MAAOA,GAEvC,CAEU6/I,WAAAA,CAAYjxE,GAClB,OACI33E,EAAAA,GAAAA,KAACizJ,GAAkB,CACC1M,UAAWjmJ,KACX23E,sBAAsB,EACtBr8D,sBAAsB,EACtBD,eAAgBrb,KAAK+yJ,0BAJhB/yJ,KAAKunJ,QAMtC,E,OC9EyD,IAQvD10I,IADLtT,EAAAA,GAAAA,IAAQuT,GAAT,cAC4BtT,GAAAA,EAExBuc,iBAAAA,GACI3D,MAAM2D,oBAEN/b,KAAKyP,UAAS,IAAMzP,KAAKlC,MAAMqwC,WAAW6kH,eAAeC,uCACpDC,IACGlzJ,KAAKlC,MAAMmoJ,UAAUC,kBAAkByF,qBAAqB,GAGxE,CAEAlsJ,MAAAA,GACI,MAAMwmJ,EAAYjmJ,KAAKlC,MAAMmoJ,UAE7B,OACIvmJ,EAAAA,GAAAA,KAAA,OAAKC,WAAWG,EAAAA,GAAAA,IAAQ,yBAAyBC,UAC7CL,EAAAA,GAAAA,KAAComJ,GAAoB,CACjBG,UAAWA,EACX5uE,aAAcr3E,KAAKlC,MAAMu5E,aACzBM,sBAAsB,KAItC,KACH7kE,GAEM,MAAMqgJ,IAA4B97I,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,eCpC/D,MAAMugJ,WAAwClD,GACjDn9I,WAAAA,CAA+Bo7I,EAAiDjhJ,GAC5EkL,MAAM+1I,EAAmBjhJ,GAAO,KADLihJ,kBAAAA,EAE3BnuJ,KAAKwL,SAAS2iC,WAAW5sB,MAAK4sB,IAC1BA,EAAW6kH,eAAeK,6BAA6B,GAG/D,CAEU3L,kBAAAA,GACN,OAAOtvI,MAAMsvI,sBACT1nJ,KAAK4sH,UAAU1sH,OAAS,CAChC,CAEUouJ,0BAAAA,GACN,MAAMgF,EAAkBtzJ,KAAKwL,SAAS+nJ,iBAAiBC,6BAA6B,GACpF,OAAIF,EACO,CACHnwH,SAAUmwH,EAAgB7qJ,OAI3B2P,MAAMk2I,4BACjB,CAEU1G,aAAAA,GACN,OAAO5nJ,KAAKwL,SAAS+nJ,iBAAiBC,6BAA6BjjJ,KAAIkjJ,GAASA,EAAM1+I,UAC1F,CAIUuzI,WAAAA,CAAYjxE,GAClB,OACI33E,EAAAA,GAAAA,KAACyzJ,GAAyB,CAAoBlN,UAAWjmJ,KAAMq3E,aAAcA,GAA7Cr3E,KAAKunJ,QAE7C,E,OCvCG,MCAMmM,GDAmCj2J,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2BAC7Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,UAAUxK,UAAU,I,OEDpD,MCAMw0J,GDAmCl2J,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iZAM7Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO8J,WAAW1S,UAAU,IAC1CmD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAO0C,aAAatL,UAAU,I,sBEF5D,IAAMy0J,IAA2B/7I,GAYnCC,EAAAA,GAAWxK,IAAGyK,GAEdD,EAAAA,GAAWxK,IAAG0K,GAwDdC,EAAAA,GAAOC,MAAKpF,GAtEV,MAQHC,WAAAA,CAA6B2jH,EAA6Co0B,GAA4C,KAAzFp0B,UAAAA,EAA0B,KAAmBo0B,oBAAAA,EAAyC,KAN3GO,SAAwB,KAAK,KAC7BwI,aAAe,EAAE,KACjBC,gBAAkB,EAAE,KACpBC,oBAAsB,GAAG,KACzBC,oBAAsB,8BAA4Bz7I,EAAAA,EAAAA,GAAA,iBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,qBAAAE,GAAA,WA0BlDw7I,kBAAqBjtI,IACzBhnB,KAAK6zJ,aAAe7sI,EAAMktI,eAAe,GAAGC,OAAO,EACtD,KAEOC,gBAAmBptI,IAEF3Q,KAAKuoG,IAAI53F,EAAMktI,eAAe,GAAGC,QAAUn0J,KAAK6zJ,cAElD7zJ,KAAK+zJ,sBAEpB/sI,EAAMktI,eAAe,GAAGC,QAAUn0J,KAAK6zJ,aACvC7zJ,KAAKmqJ,WAELnqJ,KAAKiqJ,eACT,EACH,KAEOoK,qBAAwBrtI,IAOD,cAAvBA,EAAM6gG,cAAgC7gG,EAAM9c,SAAWlK,KAAKqrJ,WAExDrrJ,KAAK8zJ,gBAAkB,IAEvB9zJ,KAAKqrJ,SAAS37E,OAAO1vE,KAAKqrJ,SAASiJ,mBAEnCt0J,KAAKqrJ,SAASviJ,MAAMyrJ,WAAa,OACjCv0J,KAAKqrJ,SAASviJ,MAAM6/F,UAAY,iBAGpC3oG,KAAKw0J,yBAAwB,GACjC,EACF,KA8DMC,kBAAoC,MAzHxCz7I,EAAAA,EAAAA,IAAehZ,KACnB,CAOQ0rJ,UAAAA,GACJ1rJ,KAAKorJ,eACLprJ,KAAKqrJ,SAASxsH,iBAAiB,gBAAiB7+B,KAAKq0J,sBACrDr0J,KAAKqrJ,SAASxsH,iBAAiB,aAAc7+B,KAAKi0J,mBAClDj0J,KAAKqrJ,SAASxsH,iBAAiB,WAAY7+B,KAAKo0J,gBACpD,CAEQhJ,YAAAA,GACAprJ,KAAKqrJ,WACLrrJ,KAAKqrJ,SAAS//G,oBAAoB,gBAAiBtrC,KAAKq0J,sBACxDr0J,KAAKqrJ,SAAS//G,oBAAoB,aAActrC,KAAKi0J,mBACrDj0J,KAAKqrJ,SAAS//G,oBAAoB,WAAYtrC,KAAKo0J,iBAE3D,CAyCQI,uBAAAA,CAAwBE,GAC5B10J,KAAKwqJ,UAAYkK,EACjB10J,KAAKyqJ,cAAgBiK,CACzB,CAEAvO,UAAAA,CAAWtxH,GACP70B,KAAKorJ,eACDv2H,GACA70B,KAAKqrJ,SAAWx2H,EAChB70B,KAAKqrJ,SAASviJ,MAAM6rJ,SAAW,UAC/B30J,KAAK0rJ,cAEL1rJ,KAAKqrJ,SAAW,IAExB,CAEAlB,QAAAA,CAAS9jJ,GAEL,IAAKrG,KAAKwqJ,UAAW,OAErBnkJ,GAAOnB,EAAAA,EAAAA,GAAA,CACH0vJ,qBAAqB,GAClBvuJ,GAGPrG,KAAK60J,yBAAwB,EAAMxuJ,EAAQuuJ,qBAE3C50J,KAAK8zJ,iBAAmB,EACxB9zJ,KAAKqrJ,SAASviJ,MAAMyrJ,WAAav0J,KAAKg0J,oBACtC,MAAM5H,GAAmBpsJ,KAAK02H,UAAUv4H,WAAWyS,WAAa,MAAQ,MAAQ5Q,KAAK02H,UAAUzoG,SAASC,cAAgB,GAAK,GAC7HluB,KAAKqrJ,SAASviJ,MAAM6/F,UAAY,cAAgByjD,EAAkB,KAClEpsJ,KAAKw0J,yBAAwB,EACjC,CAEAvK,YAAAA,GAEI,IAAKjqJ,KAAKyqJ,cAAe,OAEzBzqJ,KAAK60J,yBAAwB,GAE7B70J,KAAK8zJ,gBAAkB,EAEvB9zJ,KAAKqrJ,SAASviJ,MAAMyrJ,WAAa,OACjCv0J,KAAKqrJ,SAASyJ,QAAQ90J,KAAKqrJ,SAAS0J,kBACpC,MAAM3I,GAAmBpsJ,KAAK02H,UAAUv4H,WAAWyS,WAAa,MAAQ,MAAQ5Q,KAAK02H,UAAUzoG,SAASC,cAAgB,GAAK,GAC7HluB,KAAKqrJ,SAASviJ,MAAM6/F,UAAY,cAAgByjD,EAAkB,KAElEpsJ,KAAKw0J,yBAAwB,GAE7BQ,uBAAsB,KAClBh1J,KAAKqrJ,SAASviJ,MAAMyrJ,WAAav0J,KAAKg0J,oBACtCh0J,KAAKqrJ,SAASviJ,MAAM6/F,UAAY,eAAe,GAEvD,CAEAgjD,mBAAAA,GACI3rJ,KAAKqrJ,SAASviJ,MAAM6/F,UAAY,eACpC,CAGAssD,mBAAAA,CAAoB3hJ,GAChBtT,KAAKy0J,kBAAoBnhJ,CAC7B,CAEQuhJ,uBAAAA,CAAwBK,GAAuD,IAAlCC,EAAmBl1J,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GACpE,IAEA,GAAG8E,EAAAA,MAAMkP,kBAAkBjU,KAAKy0J,mBAC5B,OAGJ,IAAIW,EAEAA,GADe,IAAhBF,GACcl1J,KAAKy0J,kBAAoB,GAAKz0J,KAAK8qJ,oBAAoBl+B,UAAU1sH,OAGnEF,KAAKy0J,kBAAkB,EAAMz0J,KAAKy0J,kBAAkB,EAAMz0J,KAAK8qJ,oBAAoBl+B,UAAU1sH,OAAO,EAGnH,IAAIm1J,EAAkBr1J,KAAK8qJ,oBAAoBl+B,UAAU5sH,KAAKy0J,mBAE9Dz0J,KAAK02H,UAAU7tG,UAAUC,qBAAqB,CAC1CC,UAAU,oBACVC,SAAUhpB,KAAK8qJ,oBAAoBv7I,UACnC+qB,MAAO,QACPriB,OAAQ,oBACR0e,WAAY,CACR0+H,gBAAgBA,EAChBC,mBAAmBt1J,KAAKy0J,kBACxBc,cAAcv1J,KAAK8qJ,oBAAoBl+B,UAAUwoC,GACjDD,YAAYA,KAEjB,EACH,CACA,MAAOzmJ,GACHjK,QAAQC,IAAI,mCAAqCgK,EACrD,CACJ,GAEH8J,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA7JwB,CAAK,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iBAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEA,CAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,2BAAApE,IAAAyE,OAAAC,yBAAA5J,GAAAsJ,UAAA,2BAAAtJ,GAAAsJ,WAAAtJ,I,sBCfjC,MAAM0iJ,GAAmC/3J,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,ubAKpCe,IAAA,IAAC,SAACywB,GAASzwB,EAAA,OAAKywB,EAAW,IAAM,MAAM,IAEzC9sB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWyS,UAAU,IAWxC6kJ,IAA0Ch4J,EAAAA,GAAAA,IAAO+3J,GAAP/3J,CAAwCqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,qNAElFkJ,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAWyS,UAAU,IAOxC8kJ,IAA0Cj4J,EAAAA,GAAAA,IAAO+3J,GAAP/3J,CAAwCmE,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,wNAElFiN,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAMC,WAAWyS,UAAU,IAO/C+kJ,GAAoBl4J,GAAAA,GAAOiB,IAAGyD,KAAAA,IAAAvE,EAAAA,GAAAA,GAAA,qFAOvBg4J,IAA6Bn4J,EAAAA,GAAAA,IAAOk4J,GAAPl4J,CAAyB4E,KAAAA,IAAAzE,EAAAA,GAAAA,GAAA,uKAI7D6F,GAAAA,EAAQC,IAAIC,IAAIC,SAOTiyJ,IAA8Bp4J,EAAAA,GAAAA,IAAOk4J,GAAPl4J,CAAyBgF,KAAAA,IAAA7E,EAAAA,GAAAA,GAAA,2KAI9D6F,GAAAA,EAAQC,IAAIC,IAAIC,SC/DTkyJ,GAAmCL,GACnCM,GAAmCL,GAEnCM,GAAsBJ,GACtBK,GAAuBJ,GCMvBK,IAAqB32J,EAAAA,GAAAA,IAAS,cAAiCC,GAAAA,EAAwCuT,WAAAA,GAAA,SAAA9S,WAAA,KAUxGk2J,0BAA6B7iJ,IACjCtT,KAAKlC,MAAMmoJ,UAAUgP,oBAAoB3hJ,EAAU,CACtD,CARO8iJ,gBAAAA,GACJ,IAAIxpC,EAAY5sH,KAAKlC,MAAMmoJ,UAAUr5B,UAErC,OAAOA,EADK5sH,KAAKwL,SAASrN,WAAWyS,WAAa,EAAKg8G,EAAU1sH,OAAS,EAE9E,CAMAT,MAAAA,GACI,MAAMwmJ,EAAYjmJ,KAAKlC,MAAMmoJ,UAC7B,OACIvmJ,EAAAA,GAAAA,KAAComJ,GAAoB,CACjBG,UAAWA,EACX5uE,aAAcr3E,KAAKlC,MAAMu5E,aACzBuvE,aAAc5mJ,KAAKo2J,mBACnBzP,yBAA0B3mJ,KAAKm2J,2BAG3C,ICzBG,MAAeE,WAA8BnI,GAAmDn7I,WAAAA,GAAA,SAAA9S,WAAA,KACzFmuJ,mBAAkD,IAAIwF,GAA4B5zJ,KAAKwL,SAAUxL,MAAM,KAYvGs2J,kBAA4B,mCAAqCt2J,KAAKmuJ,kBAAkBlnB,MAAO,CAVzG,eAAcugB,GACV,OAAO,CACX,CAEU+O,mCAAAA,GACN,IAAIC,EAAcx2J,KAAKwL,SAASoyC,aAAaC,QAAQ79C,KAAKs2J,mBAE1D,OAAOvxJ,EAAAA,MAAMkP,kBAAkBuiJ,GAAe,EAAIz2H,SAASy2H,EAC/D,CAaUC,6BAAAA,CAA8BC,GACpC,GAAG3xJ,EAAAA,MAAMkP,kBAAkBoiJ,GAAsBM,kBAAkB32J,KAAKs2J,oBAAqB,CACzFD,GAAsBM,kBAAkB32J,KAAKs2J,mBAAqBt2J,KAAKu2J,sCACvE,IAAIK,GAAaP,GAAsBM,kBAAkB32J,KAAKs2J,mBAAqB,GAAMt2J,KAAKmuJ,kBAAkB5uI,QAAQrf,OACxHF,KAAKwL,SAASoyC,aAAa+pF,QAAQ3nI,KAAKs2J,kBAAmBM,EAC/D,CAEA,OAAOF,EAAUr2H,OAAOg2H,GAAsBM,kBAAkB32J,KAAKs2J,oBAAoB12J,OAAO82J,EACpG,CAEA,aAAI9pC,GAEA,IAAIiqC,EAAS72J,KAAK2nJ,+BAA+B3nJ,KAAK4nJ,iBAEtD,GAAI5nJ,KAAKwL,SAASrN,WAAWyS,YAAcimJ,EAAO32J,OAAS,EAAG,CAC1D,IAAI42J,EAAWD,EAAOr2G,MACtBq2G,EAAO9+D,QAAQ++D,EACnB,CACA,OAAOD,CACX,CAEA1P,oBAAAA,GAEI,MAAM4P,EAAW/2J,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMynG,cAClD6jD,EAAWh3J,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMC,eAExD,OACInD,EAAAA,GAAAA,MAACwD,GAAAA,SAAc,CAAAjM,SAAA,CACVC,KAAKwL,SAASrN,WAAWyS,YACtBlR,EAAAA,GAAAA,KAACs2J,GAAmB,CAAAj2J,UAChByI,EAAAA,GAAAA,MAAA,OAAK9G,MAAM,KAAKL,OAAO,OAAOmL,QAAQ,aAAYzM,SAAA,EAC9CL,EAAAA,GAAAA,KAAA,QAAAK,UACIyI,EAAAA,GAAAA,MAAA,UAAQ+mB,GAAG,iBAAiBjf,EAAE,IAAImrE,EAAE,IAAI/5E,MAAM,KAAKL,OAAO,MAAM4uG,YAAY,iBAAgBlwG,SAAA,EACxFL,EAAAA,GAAAA,KAAA,YAAUu3J,GAAG,IAAIC,GAAG,OACpBx3J,EAAAA,GAAAA,KAAA,kBAAgB2wG,aAAa,IAAI36C,OAAO,UACxCh2D,EAAAA,GAAAA,KAAA,eACAA,EAAAA,GAAAA,KAAA,eAAa6wG,SAAS,KAAKD,IAAI,UAC/B5wG,EAAAA,GAAAA,KAAA,eAAa0wG,GAAG,wBAGxB1wG,EAAAA,GAAAA,KAAA,KAAGipG,UAAU,2BAA2BlpF,OAAO,uBAAsB1f,UACjEL,EAAAA,GAAAA,KAAA,QAAM6vB,GAAG,mBAAmB,YAAU,iBAAiB7tB,MAAM,IAAIL,OAAO,MAAMsnG,UAAU,iBAAiB/7F,KAAK,mBAIxH,MACNlN,EAAAA,GAAAA,KAACo2J,GAAgC,CAAC1mI,SAAUpvB,KAAKkmJ,kBAAkBuE,cAAepjJ,QAASA,IAAMrH,KAAKkmJ,kBAAkB+D,eAAelqJ,UACnIL,EAAAA,GAAAA,KAACq3J,EAAQ,CAACtwJ,KAAM,EAAGqC,MAAO,CAAC2e,SAAU,WAAY5X,IAAK,MAAO45D,KAAM,YAEvE/pE,EAAAA,GAAAA,KAACq2J,GAAgC,CAAC3mI,SAAUpvB,KAAKkmJ,kBAAkBsE,UAAWnjJ,QAASA,IAAMrH,KAAKkmJ,kBAAkBiE,WAAWpqJ,UAC3HL,EAAAA,GAAAA,KAACs3J,EAAQ,CAACvwJ,KAAM,EAAGqC,MAAO,CAAC2e,SAAU,WAAY5X,IAAK,MAAO65D,MAAO,WAEvE1pE,KAAKwL,SAASrN,WAAWyS,YACtBlR,EAAAA,GAAAA,KAACu2J,GAAoB,CAAAl2J,UACjByI,EAAAA,GAAAA,MAAA,OAAK9G,MAAM,KAAKL,OAAO,OAAOmL,QAAQ,aAAYzM,SAAA,EAC9CL,EAAAA,GAAAA,KAAA,QAAAK,UACIyI,EAAAA,GAAAA,MAAA,UAAQ+mB,GAAG,iBAAiBjf,EAAE,IAAImrE,EAAE,IAAI/5E,MAAM,KAAKL,OAAO,MAAM4uG,YAAY,iBAAgBlwG,SAAA,EACxFL,EAAAA,GAAAA,KAAA,YAAUu3J,GAAG,KAAKC,GAAG,OACrBx3J,EAAAA,GAAAA,KAAA,kBAAgB2wG,aAAa,IAAI36C,OAAO,UACxCh2D,EAAAA,GAAAA,KAAA,eACAA,EAAAA,GAAAA,KAAA,eAAa6wG,SAAS,KAAKD,IAAI,UAC/B5wG,EAAAA,GAAAA,KAAA,eAAa0wG,GAAG,wBAGxB1wG,EAAAA,GAAAA,KAAA,KAAGipG,UAAU,2BAA2BlpF,OAAO,uBAAsB1f,UACjEL,EAAAA,GAAAA,KAAA,QAAM6vB,GAAG,mBAAmB,YAAU,iBAAiB7tB,MAAM,IAAIL,OAAO,MAAMsnG,UAAU,kBAAkB/7F,KAAK,mBAIzH,OAGlB,CAIA07I,WAAAA,CAAYjxE,GACR,OACI33E,EAAAA,GAAAA,KAACw2J,GAAkB,CAEfjQ,UAAWjmJ,KACXq3E,aAAcA,GAFTr3E,KAAKunJ,QAKtB,CAEA0N,mBAAAA,CAAoB3hJ,GAChBtT,KAAKouJ,mBAAmB6G,oBAAoB3hJ,EAChD,EAhHkB+iJ,GAsBDM,kBAA4C,CAAC,EC1B3D,MAAMQ,WAAoCd,GAAsBtjJ,WAAAA,GAAA,SAAA9S,WAAA,KAM3Dm3J,sBAAwB,IAGrBp3J,KAAKwL,SAAS+9B,UAAUtuB,YAC1Bjb,KAAKwL,SAASuP,6BAA6Bs8I,gBAAgBp8I,WAC5Djb,KAAKwL,SAAS6qE,kBAAkB49C,kBACtC,CAVF,gBAAIvpD,GACA,OAAOE,GAAAA,EACX,CAUU88E,kBAAAA,GACN,OAAG1nJ,KAAKo3J,0BAIDh/I,MAAMsvI,sBAAwB1nJ,KAAK4sH,UAAU1sH,OAAS,EACjE,CAEA,wBAAIunJ,GACA,OAAO,EACX,CAEUG,aAAAA,GAEN,IAAI7iJ,EAAAA,MAAMkP,kBAAkBjU,KAAKwL,SAAS6qE,kBAAkB09C,eACpD/zH,KAAKwL,SAAS6qE,kBAAkB09C,YACpC,MAAO,GAGX,IAAI2iC,EAAY,IAAI12J,KAAKmuJ,kBAAkB5uI,SACvCqtG,EAAY5sH,KAAKy2J,8BAA8BC,GAInD,OAFA9pC,EAAYA,EAAUntG,QAAQ6hH,IAAE,IAAA+uB,EAAA,OAAqC,QAArCA,EAAKrwJ,KAAKwL,SAAS2P,MAAMC,SAASkmH,UAAG,IAAA+uB,OAAA,EAAhCA,EAAkCjkE,WAAW,IAE5B,IAAnDpsF,KAAKwL,SAAS0N,eAAeo+I,WAAWp3J,OAChC0sH,EAEAA,EAAUntG,QAAO83I,GAASv3J,KAAKwL,SAAS0N,eAAes+I,cAAc7wB,MAAK9rH,GAAWA,IAAY08I,EAAMp4J,cAEtH,CAEA,0BAAI4nJ,GACA,OAAO/mJ,KAAK6uJ,4BAChB,CAEUA,0BAAAA,GACN,OAAG9pJ,EAAAA,MAAMkP,kBAAkBjU,KAAKwL,SAAS6qE,kBAAkB09C,cAAmE,IAAnD/zH,KAAKwL,SAAS0N,eAAeo+I,WAAWp3J,OACxG,EAGJ,CACX,CAEU6vJ,iBAAAA,GACN,OACIrwJ,EAAAA,GAAAA,KAACi0J,GAAyB,CAAA5zJ,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,SAExE,CAEUm6I,iBAAAA,GACN,OACItwJ,EAAAA,GAAAA,KAACg0J,GAAyB,CAAA3zJ,SACrBC,KAAKyI,MAAMmN,aAGxB,ECvEG,MAAM6hJ,WAA6BpB,GAEtCtjJ,WAAAA,CAAYo7I,EAAiDjhJ,GACzDkL,MAAM+1I,EAAmBjhJ,GAAO,KAS5BwqJ,2BAA6B,IAE7B13J,KAAKwL,SAAS+9B,UAAUtuB,WACxBjb,KAAKwL,SAAS8qE,mBAAmB29C,qBAChCj0H,KAAKwL,SAASuP,6BAA6B48I,gBAAgB18I,UAXhEjb,KAAKwL,SAAS8qE,mBAAmB+9C,iBAAiBr0H,KAAKkmJ,kBAC3D,CAEA,gBAAIx7E,GACA,OAAOG,GAAAA,EACX,CAUU68E,kBAAAA,GACN,OAAG1nJ,KAAK03J,+BAIDt/I,MAAMsvI,sBAAwB1nJ,KAAK4sH,UAAU1sH,OAAS,EACjE,CAEA,wBAAIunJ,GACA,OAAO,CACX,CAEUG,aAAAA,GAEN,IAAI8O,EAAY,IAAI12J,KAAKmuJ,kBAAkB5uI,SACvCqtG,EAAY5sH,KAAKy2J,8BAA8BC,GAInD,OAFA9pC,EAAYA,EAAUntG,QAAQ6hH,IAAE,IAAA+uB,EAAA,OAAqC,QAArCA,EAAKrwJ,KAAKwL,SAAS2P,MAAMC,SAASkmH,UAAG,IAAA+uB,OAAA,EAAhCA,EAAkCjkE,WAAW,IAE3EwgC,CACX,CAEA,0BAAIm6B,GACA,OAAO/mJ,KAAK6uJ,4BAChB,CAEUA,0BAAAA,GACN,OAAO,CACX,ECpCG,MAAM+I,GAET7kJ,WAAAA,CAA6B7F,GAAkC,KAAlCA,MAAAA,CAC7B,CACA2qJ,YAAAA,CAAazyB,GAET,OAAQA,EAAaipB,aACjB,KAAK9I,GAAYuS,gBACb,OAAO,IAAIxH,GAAwBlrB,EAAcplI,KAAKkN,OAC1D,KAAKq4I,GAAYwS,UACb,OAAO,IAAIvH,GAAkBprB,EAAcplI,KAAKkN,OACpD,KAAKq4I,GAAYyS,UACb,OAAO,IAAIpH,GAAkBxrB,EAAcplI,KAAKkN,OACpD,KAAKq4I,GAAY0S,iBACb,OAAO,IAAI/G,GAAwB9rB,EAAcplI,KAAKkN,OAC1D,KAAKq4I,GAAY2S,kBACb,OAAO,IAAIf,GAA4B/xB,EAAcplI,KAAKkN,OAC7D,KAAKq4I,GAAY4S,aACb,OAAO,IAAIV,GAAqBryB,EAAcplI,KAAKkN,OACxD,KAAKq4I,GAAY6S,mBACb,OAAO,IAAIhF,GAAgChuB,EAAcplI,KAAKkN,OAElE,QACI,OAAO,IAAIqkJ,GAAsBnsB,EAAcplI,KAAKkN,OAGhE,CAEAmrJ,UAAAA,CAAWvF,GACP,OAAO,IAAID,GAAmBC,EAAY9yJ,KAAKkN,MACnD,E,gBC3CG,MAAMorJ,GACTvlJ,WAAAA,CAA6BvH,EACT+D,EACCgpJ,GAAqC,KAF7B/sJ,SAAAA,EAAiC,KAC1C+D,UAAAA,EAAiB,KAChBgpJ,cAAAA,CAErB,CACQC,2BAAAA,CAA4BnhF,EAAsBohF,EAAqC92I,GAC3F,IAAKA,EACD,OAAO,EAKX,OAF2B01D,IAAiB11D,EAAa8F,UACjDgxI,EAA8B92I,EAAa8F,UAAY4vD,IAAiBohF,EAK5Ez4J,KAAKwL,SAASrN,WAAW0S,UAClB,IAGJ,IAPI,CAQf,CAEApR,MAAAA,CAAO43E,EAAsBohF,GACzB,MAAMC,EAAkB14J,KAAKw4J,4BAA4BnhF,EAAcohF,EAA6Bz4J,KAAKu4J,eACzG,OAAwB,IAApBG,EACO,MAIPh5J,EAAAA,GAAAA,KAAC0a,GAAAA,EAAe,CAEZI,iBAAiB,EACjBH,WAAYra,KAAKu4J,cAAcl+I,WAC/BC,YAAata,KAAKu4J,cAAcj+I,YAChCgS,YAAatsB,KAAKu4J,cAAcjsI,YAChCrK,UAAWy2I,EAAkB,KAC7Bn+I,yBAA0Bva,KAAKu4J,cAAch+I,0BAAyB,GAAA3a,OAN9DI,KAAKuP,UAAS,8BAAA3P,OAA6By3E,GAS/D,EC1CG,MAAMshF,IAAwCn6J,EAAAA,GAAAA,GAAU,yCCDlDo6J,IAA4Cp6J,EAAAA,GAAAA,GAAU,6CCAtDq6J,IAAkCr6J,EAAAA,GAAAA,GAAU,mCCA5Cs6J,IAAwCt6J,EAAAA,GAAAA,GAAU,yCCclDu6J,IAAqFx5J,EAAAA,GAAAA,KAAUzB,IAAW,IAADk7J,EAAAC,EAClH,MAAMztJ,GAAWqD,EAAAA,GAAAA,KACXqqJ,EAAoD1tJ,EAASmmD,YAAY8xF,sBAAsB,CAAC3lJ,EAAM0lJ,WAEtGzuI,EAA+BvJ,EAASi+B,YAAY0vH,mBAAmBr7J,EAAM0lJ,UAOnF,OAAKzuI,GAKDvM,EAAAA,GAAAA,MAACqwJ,GAA+B,CAC5BrxH,YAAa1pC,EAAM0pC,YACnBngC,QAZSiuD,KACb9pD,EAASqd,UAAUkd,uBAAuB,aAAc,0BAA2BjoC,EAAM0lJ,UACzFh4I,EAASi+B,YAAY2vH,iBAAiBt7J,EAAM0lJ,SAAS,EAU/BzjJ,SAAA,EAGlBL,EAAAA,GAAAA,KAACo5J,GAAqC,CAClC7lJ,SAAU8B,EACV2yB,OAAO,EACPC,QAASA,OACTC,UAAWA,OACXC,wBAAyBA,OACzBC,iBAAiB,EACjBC,YAAY,EACZt7B,SAAS,EACTu7B,oBAAqBx8B,EAASy8B,qBAC9BC,MAAM,KAEVxoC,EAAAA,GAAAA,KAACi5J,GAAqC,CAAA54J,UAClCL,EAAAA,GAAAA,KAACk5J,GAAyC,CAAA74J,SACL,QADKi5J,EACX,QADWC,EACrCC,EAAWp7J,EAAM0lJ,iBAAS,IAAAyV,OAAA,EAA1BA,EAA4Bn3J,YAAI,IAAAk3J,EAAAA,EAAIl7J,EAAM0lJ,gBAvBhD,IA0B2B,ICpD7B6V,IAAkC76J,EAAAA,GAAAA,GAAU,mCCA5C86J,IAAwC96J,EAAAA,GAAAA,GAAU,yCCAlD+6J,IAAuC/6J,EAAAA,GAAAA,GAAU,wCCAjDg7J,IAAyCh7J,EAAAA,GAAAA,GAAU,0C,UCUzD,MAAMqrJ,GAAkBpsJ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mBACnCe,IAAA,IAAC,cAAC2nJ,GAAc3nJ,EAAA,OAAK2nJ,GAAgBzlJ,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,sCAEtC,IAAI,IASC67J,IAAiFl6J,EAAAA,GAAAA,KAAUzB,IACpG,MAAM0N,GAAWqD,EAAAA,GAAAA,KACjB,IAAI05B,EAAsB/8B,EAAStN,MAAMuN,aAAaC,MAAM88B,oBAK5D,OACIhgC,EAAAA,GAAAA,MAAC6wJ,GAA+B,CAAC15J,WAAWG,EAAAA,GAAAA,IAAQ,mCAAmCC,SAAA,EACnFyI,EAAAA,GAAAA,MAAC8wJ,GAAqC,CAAAv5J,SAAA,EAClCL,EAAAA,GAAAA,KAAC6oC,EAAmB,CAAC9hC,KAAM,IAAKqC,MAAO,CAAC2/B,YAAa,OAAQxkC,MAAOuH,EAAStN,MAAMuN,aAAa1D,OAAO0C,cAAeqmG,SAAUtlG,EAAStN,MAAMuN,aAAa1D,OAAO0C,gBACnK/K,EAAAA,GAAAA,KAAC65J,GAAoC,CAAAx5J,SAChCyL,EAASoK,YAAYC,UAAU,wCAEpCnW,EAAAA,GAAAA,KAACmqJ,GAAe,CAAA9pJ,UACZL,EAAAA,GAAAA,KAACoqJ,GAAgB,CACbnqJ,WAAWG,EAAAA,GAAAA,IAAQ,0CACnBkH,OAAO,cACPG,YAAY,KACZjG,YAAU,EACVmG,QAjBDqyJ,KACfluJ,EAASqd,UAAUkd,uBAAuB,aAAc,4BACxDv6B,EAASszB,gBAAgBm+D,aAAa,CAACF,OAAQ,yBAAyB,EAepCh9F,SACnByL,EAASoK,YAAYC,UAAU,mBAI5CnW,EAAAA,GAAAA,KAAC85J,GAAsC,CAAAz5J,SAClCjC,EAAM67J,aAAappJ,KAAIizI,IACpB9jJ,EAAAA,GAAAA,KAACq5J,GAAqC,CAElCvV,SAAUA,EACVh8G,YAAa1pC,EAAM67J,aAAaz5J,QAF3B,oBAAsBsjJ,SAKT,IClDnC,MAAMoW,GACT7mJ,WAAAA,CAA6BvH,EAAmD+D,EAC3DsqJ,GAA8D,KADtDruJ,SAAAA,EAAiC,KAAkB+D,UAAAA,EAAiB,KAC5EsqJ,yBAAAA,CACrB,CAEQC,8BAAAA,CAA+BziF,GACnC,QAAKtyE,EAAAA,MAAMkP,kBAAkBjU,KAAK65J,4BAC9B75J,KAAKwL,SAASi+B,YAAYC,mBAC1B2tC,IAAiBr3E,KAAK65J,yBAAyBpyI,SAKvD,CAEAhoB,MAAAA,CAAO43E,GACH,OAAKr3E,KAAK85J,+BAA+BziF,IAEjC33E,EAAAA,GAAAA,KAAC+5J,GAAqC,CAACE,aAAc35J,KAAK65J,yBAAyB9V,UAAWgW,iBAAiB,EAAO14J,OAAO,OAFrE,IAGpE,EClBG,MAAM24J,GACTjnJ,WAAAA,CAA4BvH,EACR+D,EACPoS,EACAs4I,GAA6D,KAH9CzuJ,SAAAA,EAAiC,KACzC+D,UAAAA,EAAiB,KACxBoS,aAAAA,EAAiC,KACjCs4I,wBAAAA,EAA0D,KAM/DC,wBAAkB,OAClBC,wBAAkB,EANtBn6J,KAAKk6J,mBAAqB,IAAI5B,GAAuBt4J,KAAKwL,SAAUxL,KAAKuP,UAAWvP,KAAK2hB,cACzF3hB,KAAKm6J,mBAAqB,IAAIP,GAA8B55J,KAAKwL,SAAUxL,KAAKuP,UAAWvP,KAAKi6J,wBAEpG,CAIAG,kBAAAA,CAAmB/iF,EAAsBohF,GACrC,OACIjwJ,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,CACKC,KAAKk6J,mBAAmBz6J,OAAO43E,EAAcohF,GAC7Cz4J,KAAKm6J,mBAAmB16J,OAAO43E,KAG5C,E,gBCJG,IAAegjF,IAAcxiJ,GA0F/BC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKpF,GA7FV,MACHC,WAAAA,CAA4BxD,EACR/D,EACC8uJ,GAAyD,KAFlD/qJ,UAAAA,EAAiB,KACzB/D,SAAAA,EAAiC,KAChC8uJ,gCAAAA,EAAsD,KAiBnEC,gCAA0B,OAC1BC,kBAAY,GAAAjiJ,EAAAA,EAAAA,GAAA,+BAAAC,GAAA,OAjBhBQ,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKw6J,aAAe,IAAI5C,GAAY53J,MACpCA,KAAKu6J,2BAA6B,IAAIP,GAAwBh6J,KAAKwL,SAC/DxL,KAAKuP,UACLvP,KAAKy6J,8BACLz6J,KAAK06J,gCAETjrJ,EAAAA,EAAAA,KAAS,IAAM,CAACzP,KAAKwL,SAASkE,KAAKC,aAAc3P,KAAKwL,SAASyqC,QAAQC,gBACnEx2B,gBACU1f,KAAK26J,iCAAiC,GAC7C,CACHz+I,iBAAiB,GAEzB,CAeUs8I,2BAAAA,CAA4BnhF,EAAsB11D,GACxD,IAAKA,EACD,OAAO,EAKX,OAF2B01D,IAAiB11D,EAAa8F,UACjDznB,KAAK46J,SAAS16J,OAASyhB,EAAa8F,UAAY4vD,IAAiBr3E,KAAK46J,SAAS16J,OAKnFF,KAAKwL,SAASrN,WAAW0S,UAClB,IAGJ,IAPI,CAQf,CACUgJ,wBAAAA,CAAyBw9D,GAC/B,MAAM11D,EAAe3hB,KAAKy6J,8BACpB/B,EAAkB14J,KAAKw4J,4BAA4BnhF,EAAc11D,GACvE,OAAwB,IAApB+2I,EACO,MAIPh5J,EAAAA,GAAAA,KAAC0a,GAAAA,EAAe,CAEZI,iBAAiB,EACjBH,WAAYsH,EAAatH,WACzBC,YAAaqH,EAAarH,YAC1BgS,YAAa3K,EAAa2K,YAC1BrK,UAAWy2I,EAAkB,KAC7Bn+I,yBAA0BoH,EAAapH,0BAAyB,GAAA3a,OANxDI,KAAKuP,UAAS,8BAAA3P,OAA6By3E,GAS/D,CAEA,sBAAcwjF,GACV,OAAO76J,KAAKwL,SAASye,cAAc6P,gBAAgBghI,QAAQD,kBAC/D,CAEA,uCAAcE,GACV,OAAO,CACX,CAEUC,sBAAAA,GACN,OAAO,IACX,CAEA,YAAIxjF,GACA,MAAO,EACX,CAEA,+BAAI0wE,GACA,OAAO,IACX,CAMQ+S,0BAAAA,CAA2BnxJ,GAC/B9J,KAAKk7J,wBAA0BpxJ,CACnC,CACA,qCAAc6wJ,GAAkD,IAAD7kH,EAC3D,IAAI91C,KAAK+6J,sCAGL/6J,KAAKk7J,yBAIJl7J,KAAKwL,SAASkE,KAAKC,eAImB,QAAvCmmC,EAAA91C,KAAKwL,SAASyqC,QAAQC,aAAahsB,YAAI,IAAA4rB,OAAA,EAAvCA,EAAyCK,aAAcn2C,KAAKuP,UAAW,CACvE,MAAMyhI,EAAWhxI,KAAKm7J,4BAA4B17I,QAAO27I,IAAOr2J,EAAAA,MAAMkP,kBAAkBmnJ,EAAGn0B,UACtF12H,KAAI6qJ,GAAMA,EAAGn0B,OAAO9nI,aACzB,GAAwB,IAApB6xI,EAAS9wI,OACT,OAGJF,KAAKi7J,iCAAiCj7J,KAAKwL,SAASgsE,SAASq5D,0CAA0CG,GAC3G,CACJ,CAEQqqB,yBAAAA,CAA0BC,GAC9B,MAAMC,EAAqBv7J,KAAKg7J,yBAEhC,OAAIj2J,EAAAA,MAAMkP,kBAAkBsnJ,KAK5BA,EAAmBC,UAEnBD,EAAmB3vG,SAAQr8B,IACvB,IAAKxqB,EAAAA,MAAMC,SAASuqB,GAAK,OAEzB,MAAMksI,EAAYH,EAAQ3wE,WAAW/N,GAASA,EAAKqqD,SAAW13G,IAE1DksI,EAAY,GACZH,EAAQj7H,OAAO,EAAG,EAAGi7H,EAAQj7H,OAAOo7H,EAAW,GAAG,GACtD,KAbOH,CAiBf,CAGUI,gBAAAA,CAAiBC,GACvB,MAAMC,EAAS57J,KAAKk7J,wBACpB,IAAKU,EACD,OAAOD,EAGX,MAAME,EAAiCF,EAAgBl8I,QAAOi/F,IAAMA,EAAEqwC,gBACjEvd,MAAK,CAACsqB,EAAIC,KAAQH,EAAOG,EAAG90B,SAAW,IAAM20B,EAAOE,EAAG70B,SAAW,KAEvE,IAAI+0B,EAA0C,GAY9C,OAXAL,EAAgB/vG,SAAQqwG,IACpB,GAAIA,EAASlN,cACTiN,EAAqBrhJ,KAAKshJ,OACvB,CACH,IAAIC,EAAiBL,EAA+Bt7G,QAChD27G,GACAF,EAAqBrhJ,KAAKuhJ,EAElC,KAGGF,CACX,CAIA,YACWpB,GACP,MAAMllG,EAAS11D,KAAKm8J,kBAEpB,OADAn8J,KAAKo8J,wBAAwB1mG,GACtBA,CACX,CAEA,6BACI2mG,GACA,IAAIzvC,EAAsB,GAS1B,OARA5sH,KAAKs8J,0BAA0B1wG,SAAQ4/C,IACnCohB,EAAY,IACLA,KACAphB,EAAEjsF,QACR,IAIE,IAAI,IAAI4oI,IAAIv7B,IAAYr8G,KAAIwE,GAAY/U,KAAKwL,SAAS2P,MAAMC,SAASrG,KAAW0K,QAAOxM,GAAYA,GAC9G,CAGA,sBAAIspJ,GACA,IAAI3vC,EAAsB,GAE1B,IAAK,IAAIhwC,KAAQ58E,KAAK46J,SAClBhuC,EAAY,IACLA,KACAhwC,EAAKgwC,WAIhB,MAAO,IAAI,IAAIu7B,IAAIv7B,IAAY1sH,MACnC,CAEA,cAAI4O,GACA,OAAO9O,KAAK46J,SAAS16J,MACzB,CAEUi8J,eAAAA,GACN,OAAOn8J,KAAKw8J,aACRx8J,KAAKy8J,yBACDz8J,KAAK08J,+BACD18J,KAAK28J,6BACD38J,KAAKq7J,0BACDr7J,KAAK07J,iBACD17J,KAAK48J,sBACjC,CAEQH,wBAAAA,CAAyBnB,GAE7B,GAAIA,EAAQp7J,QAAUF,KAAK68J,iBACvB,OAAOvB,EAEX,IAAI5lG,EAA4B,GAE5BonG,EAAqB98J,KAAK68J,iBAC9B,IAAK,IAAIv3J,EAAI,EAAGA,EAAIg2J,EAAQp7J,OAAQoF,IAAK,CACrC,MAAMs3E,EAAO0+E,EAAQh2J,IACjBw3J,EAAqB,GAAKlgF,EAAKmyE,gBAC/Br5F,EAAO/6C,KAAKiiE,GAGZA,EAAKwpE,WACL0W,GAGR,CAEA,OAAOpnG,CACX,CAEAvoD,UAAAA,CAAWkqE,GACP,IAAI5vD,EAAW4vD,EAEf,IAAK,IAAIuF,KAAQ58E,KAAK46J,SAIlB,GAHIh+E,EAAKwpE,WACL3+H,IAEa,IAAbA,EACA,OAAOznB,KAAK+8J,qBAAqB1lF,EAAcuF,GAIvD,OAAO,IACX,CAEUmgF,oBAAAA,CAAqB1lF,EAAsBuF,GACjD,OACIp0E,EAAAA,GAAAA,MAACwD,GAAAA,SAAc,CAAAjM,SAAA,CACV68E,EAAKn9E,OAAO43E,GACZr3E,KAAKu6J,2BAA2BH,mBAAmB/iF,EAAcr3E,KAAK46J,SAAS16J,UAF/D08E,EAAK2qE,QAKlC,CAEAr3I,gBAAAA,CAAiB8sJ,GACb,OAAIA,EAAsBh9J,KAAK46J,SAAS16J,OAC7B,EAGJ,CACX,CAEUw8J,8BAAAA,CAA+BpB,GAIrC,OAHIt7J,KAAKwL,SAASkE,KAAKC,cACnB3P,KAAKs6J,gCAAgC2C,cAAcj9J,KAAKuP,UAAW+rJ,GAEhEA,CACX,CAEUqB,4BAAAA,CAA6BrB,GACnC,OAAIt7J,KAAKwL,SAASkE,KAAKC,aACZ2rJ,EAGJt7J,KAAKs6J,gCAAgC4C,UAAUl9J,KAAKuP,UAAW+rJ,EAC1E,CAEUsB,cAAAA,GACN,MAAM59I,EAAUhf,KAAKm7J,4BACf/3B,EAA2B,GAMjC,OAJApkH,EAAQ4sC,SAASg7E,IACbxD,EAAMzoH,KAAK3a,KAAKm9J,cAAcv2B,GAAY,IAGvCxD,CACX,CAEUo5B,YAAAA,CAAap5B,GAInB,OAHApjI,KAAKs8J,0BAA0B1wG,SAAQknG,IACnC1vB,EAAMzoH,KAAK3a,KAAKo9J,YAAYtK,GAAY,IAErC1vB,CACX,CAEUg6B,WAAAA,CAAYtK,GAClB,OAAO9yJ,KAAKw6J,aAAanC,WAAWvF,EACxC,CAEUqK,aAAAA,CAAc/3B,GACpB,OAAOplI,KAAKw6J,aAAa3C,aAAazyB,EAC1C,CAEUg3B,uBAAAA,CAAwBh5B,GAC9B,IAAKpjI,KAAKwL,SAASkE,KAAKC,aACpB,OAAOyzH,EAGX,IAAKpjI,KAAK+6J,oCACN,OAAO33B,EAGX,MAAMwN,EAAkB,CACpB5nH,SAAU,oBACV/Q,OAAQmrH,EAAM7yH,KAAIqsE,GAAQA,EAAKn0E,QAAOhD,KAAK,KAC3C60B,MAAO,SAKX,OAFAt6B,KAAKwL,SAASqd,UAAU+S,cAAcg1G,EAAgB5nH,SAAU4nH,EAAgB34H,OAAQ24H,EAAgBt2G,OAEjG8oG,CACX,GACH5qH,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,2BAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAnP6D,IAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,8BAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,8BAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YA+E7Do6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,YAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,6BAORo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,6BAAAtJ,GAAAsJ,WAAAtJ,I,kCCrMb,MAAMk5B,GAAYvuC,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+MAGdE,GAASA,EAAMu/J,sBAAwB,2CAA6C,SAW5FvxH,IAAQruC,EAAAA,GAAAA,IAAOuuC,GAAPvuC,CAAiBqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,wDAKlB0/J,IAAwBpxH,EAAAA,GAAAA,GAAeJ,GAAOE,I,UCnB3D,MAAMuxH,IAAsBp1I,EAAAA,GAAAA,IAASxqB,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4bAkBxB4/J,GAAwB//J,GAAAA,GAAOiB,IAAGoC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,4RAEzBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMa,OAAOC,OAAOy+J,WAAWC,0BAA0Bv+J,UAAU,GAYrFo+J,I,UCjCjB,MAAMI,IAAsBx1I,EAAAA,GAAAA,IAASxqB,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,uSAaxBggK,GAAoBngK,GAAAA,GAAOy6D,IAAGp3D,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,4KAQtB+/J,I,OCrBd,MAAME,GAAwBpgK,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gXAC1Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMa,OAAOC,OAAOy+J,WAAWK,gCAAgC3+J,UAAU,IAQ/FmD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAO4B,SAAS,I,OCTzC,MAAMo0J,GAAwBtgK,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,oNAEzBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMa,OAAOC,OAAOy+J,WAAWO,0BAA0B7+J,UAAU,ICYhG0T,IAAmDtT,EAAAA,GAAAA,KAAUzB,IAC/D,MAAM0N,GAAWqD,EAAAA,GAAAA,KAMjB,OAAK/Q,EAAMmgK,UAAUC,qBAKjB11J,EAAAA,GAAAA,MAAC80J,GAAqB,CAACD,sBAAuBv/J,EAAMu4B,oBAAoB8nI,0BACjD92J,QAXDqY,UACtBlU,EAASqd,UAAU+S,cAAc,aAAc,QAASpwB,EAAS6D,OAAOm1I,kBAAkBj1I,WAC1FzR,EAAMmgK,UAAUG,gBAAgB,EAUTz+J,WAAWG,EAAAA,GAAAA,IAAQ,qBAAqBC,SAAA,EAC3DL,EAAAA,GAAAA,KAAC89J,GAAqB,KACtB99J,EAAAA,GAAAA,KAACq+J,GAAqB,KACtBv1J,EAAAA,GAAAA,MAACq1J,GAAqB,CAAA99J,SAAA,CAAC,IAAEyL,EAASoK,YAAYC,UAAU,2BAA4B,QACpFnW,EAAAA,GAAAA,KAACk+J,GAAiB,CAACxpJ,IAAK5I,EAAStN,MAAMuN,aAAa1M,OAAOC,OAAOy+J,WAAWY,qBAAqBl/J,WAAYgV,IAAI,wBAV/G,IAWiB,IAInBmqJ,IAAqBjnJ,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,YAAa,wB,gBCrCrE,MAAM0rJ,IAAmB//J,EAAAA,GAAAA,GAAU,oBCC7BggK,IAA0BhgK,EAAAA,GAAAA,GAAU,2BCGpCigK,IAAgCl/J,EAAAA,GAAAA,IAAS,cAA4CC,GAAAA,EAEhGC,MAAAA,GACE,MAAMi/J,EAAe1+J,KAAKwL,SAASi3F,SAASk8D,2BAE5C,OAA4B,IAAxBD,EAAax+J,OACR,MAGPR,EAAAA,GAAAA,KAAC8+J,GAAuB,CAAC7+J,WAAWG,EAAAA,GAAAA,IAAQ,uCAAwC8+J,kBAAmB5+J,KAAKwL,SAASi3F,SAASm8D,kBAAkB7+J,SAC7I2+J,EAAanuJ,KAAI,CAACsuJ,EAAkBx7H,IAAUw7H,EAAiBt6F,eAAe,CAACu6F,UAAWz7H,EAAO07H,gBAAiBL,EAAax+J,YAGtI,I,UChBK,MAAM8+J,GAAiCvhK,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,kGAG3BE,GAASA,EAAMI,MAAMa,OAAOC,OAAOigK,2BAA2B9/J,aACrFrB,GAASA,EAAMmkB,YAAaphB,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,mDACVE,EAAMmkB,a,OCN1B,MAAMi9I,GAA8BzhK,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,kOACxCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAIxBN,GAASA,EAAMI,MAAM6J,OAAO6+B,iBACxB9oC,GAASA,EAAMI,MAAM6J,OAAOy7C,Y,sBCLrD,MAAM27G,GAAqB1hK,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4SAK9BE,GAASA,EAAMshK,kBAAoBthK,EAAMuhK,sBAAuB,2CAA6C,QAOrH57J,GAAAA,EAAQC,IAAI2jD,OAAOzjD,SAGnB9F,GAASA,EAAMwhK,WAAWz+J,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,sGAEXE,GAASA,EAAMI,MAAM6J,OAAO0C,eAE5C,K,aCjBR,MAAM80J,GAA4BzhK,IAAiCqqB,EAAAA,GAAAA,IAASxqB,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,uTAG9C0T,EAAAA,GAAAA,GAAUxT,EAAMI,MAAM6J,OAAO0C,aAAc,KAOxC6G,EAAAA,GAAAA,GAAUxT,EAAMI,MAAM6J,OAAO0C,aAAc,IAI9C6G,EAAAA,GAAAA,GAAUxT,EAAMI,MAAM6J,OAAO0C,aAAc,ICjB5D+0J,IDqB4B/hK,EAAAA,GAAAA,IAAO0hK,GAAP1hK,CAA0BqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,qCACtDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOs0D,QAAQ,IACzCv+D,GAASA,EAAM2hK,eAAgB5+J,EAAAA,GAAAA,IAAGe,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,mCAAc2hK,IAA2C,K,OEtB1F,MCDMG,IDCmCjiK,EAAAA,GAAAA,IAAO0hK,GAAP1hK,CAA0BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8CAC7De,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOs0D,QAAQ,IAChCv+D,IAAK,IAAA6hK,EAAA,OAAgB,QAAhBA,EAAI7hK,EAAM+kB,cAAM,IAAA88I,EAAAA,EAAI,GAAG,IEUrC9sJ,IAAgBtT,EAAAA,GAAAA,IAClB,cAAmCC,GAAAA,EAA0CuT,WAAAA,GAAA,SAAA9S,WAAA,KAuDjE2/J,eAAiB,KACjB5/J,KAAKwL,SAASq0J,gBAAgBC,gBAC9B9/J,KAAKwL,SAASq0J,gBAAgBE,mBAClC,CACF,CAzDFhkJ,iBAAAA,GAAqB,IAADikJ,EAAAC,EAChB7nJ,MAAM2D,oBACN/b,KAAKwL,SAASq0J,gBAAgBK,sBAAgE,QAA3CF,EAA6B,QAA7BC,EAACjgK,KAAKlC,MAAMqiK,yBAAiB,IAAAF,OAAA,EAA5BA,EAA8BG,oBAAY,IAAAJ,EAAAA,EAAI,KACtG,CAEAvgK,MAAAA,GACI,GAAIO,KAAKwL,SAASq0J,gBAAgBC,eAAgB,CAC9C,IAAIO,EAAqBrgK,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM+mG,qBAEhE,OACI/yG,EAAAA,GAAAA,KAACggK,GAAyB,CAAC//J,UAAW,oCACX0H,QAASA,KAAOrH,KAAK4/J,gBAAgB,EACrCH,eAAe,EACfH,WAAW,EACXz8I,OAAQ7iB,KAAKwL,SAASq0J,gBAAgBS,oBAAsBtgK,KAAKwL,SAAS4vB,OAAOmlI,yBAA2B,EAAG,KAC/GnB,iBAAkBp/J,KAAKwL,SAASqI,OAAOkZ,OAAOC,WAAWjtB,UAEhFL,EAAAA,GAAAA,KAAC2gK,EAAkB,CAAC55J,KAAM,EAAG8F,cAAY,KAGrD,CAEA,MAAMi0J,EAAexgK,KAAKwL,SAASq0J,gBAAgBY,mBACnD,OAAID,GAKA9gK,EAAAA,GAAAA,KAAC8/J,GAAkB,CAAC7/J,UAAW,4BACX0H,QAASA,KAAOrH,KAAK0gK,sBAAsBF,EAAa,EACxDf,cAAee,EAAaG,gCAC5BrB,UAAWkB,EAAaG,gCACxBvB,iBAAkBp/J,KAAKwL,SAASqI,OAAOkZ,OAAOC,WAC9CqyI,sBAAuBr/J,KAAKlC,MAAMu4B,oBAAoB8nI,0BAA0Bp+J,SAE9FygK,EAAa/gK,WAXZ,IAcf,CAGQihK,qBAAAA,CAAsBE,GAE1B5gK,KAAKwL,SAASqd,UAAU4tB,wBAAwBmqH,EAAMC,kBAAmB,uBAAwB7gK,KAAKwL,SAASyqC,QAAQC,aAAahsB,KAAKisB,WAEzI,MAAM9vC,EAA6B,CAC/By6J,cAAeA,KACX9gK,KAAKwL,SAASqd,UAAU4tB,wBAAwBmqH,EAAMC,kBAAmB,wBAAyB7gK,KAAKwL,SAASyqC,QAAQC,aAAahsB,KAAKisB,UAAU,GAG5Jn2C,KAAKwL,SAASq0J,gBAAgBkB,eAAeH,EAAOv6J,EACxD,IAUK26J,IAAuB3pJ,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,wB,4BC7D1D,MAAMouJ,IAAoB1hK,EAAAA,GAAAA,IAAS,cAAgC+iB,GAAAA,EAEhE4+I,gBAAAA,GACJ,MAAMC,EAAiBnhK,KAAKwL,SAASi3F,SAAS2+D,oBAE9C,OACI54J,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAACs/J,GAA8B,CAAuC/8I,UAAWk/I,EAAel/I,UAAWtiB,WAAWG,EAAAA,GAAAA,IAAQ,sCAA1F,oCACpCJ,EAAAA,GAAAA,KAAC0a,GAAAA,GAAelV,EAAAA,EAAAA,GAAA,GAAkCi8J,GAA5B,wBACrBnhK,KAAKwL,SAASi3F,SAASC,gCAAkC1iG,KAAKwL,SAASi3F,SAAS4+D,gBAAgB3hK,EAAAA,GAAAA,KAACw/J,GAA2B,CAAoCv/J,WAAWG,EAAAA,GAAAA,IAAQ,mCAAlD,gCAAyF,OAGvO,CAEQwhK,2BAAAA,GACN,OAAGthK,KAAKwL,SAASqI,OAAOkZ,OAAOC,WACtB,MAGFttB,EAAAA,GAAAA,KAAC++J,GAA6B,GAAM,2BAC7C,CAEQ8C,gBAAAA,GACN,GAAGvhK,KAAKwL,SAASqI,OAAOkZ,OAAOC,WAC7B,OAAO,KAET,IAAIrL,EAAe3hB,KAAKwL,SAASye,cAAcC,KAAK+5G,SAASu9B,WAC7D,OAAI7/I,EAAalV,SAIf/M,EAAAA,GAAAA,KAACwiB,GAAAA,EAAkB,CACCviB,UAAW,cACX6a,iBAAiB,EACjBF,YAAaqH,EAAarH,YAC1BD,WAAYsH,EAAatH,YAJpB,wBAHlB,IASX,CAEQonJ,kBAAAA,GACN,OACEj5J,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACEL,EAAAA,GAAAA,KAACshK,GAAoB,CACCb,kBAAmBngK,KAAKwL,SAASye,cAAcC,KAAK+5G,SAASy9B,aADzD,4BAE1BhiK,EAAAA,GAAAA,KAACu3B,GAAAA,EAA+B,MAGtC,CAEDx3B,MAAAA,GACK,MAAME,EAAYsX,KAAW,6BAA8B,CACzD,CAAC0qJ,GAAAA,IAAW3hK,KAAKwL,SAASi3F,SAASm/D,8BAGvC,OACEp5J,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,CACGC,KAAKkhK,oBACN14J,EAAAA,GAAAA,MAAC+1J,GAAgB,CAAC5+J,UAAWA,EAAUI,SAAA,CAClCC,KAAKshK,+BACN5hK,EAAAA,GAAAA,KAACkP,GAAAA,EAAwB,CAAyBW,UAAW4wE,GAAAA,IAA9B,oBAC/BzgF,EAAAA,GAAAA,KAAC4+J,GAAkB,MAHqB,4BAK3Ct+J,KAAKuhK,mBACLvhK,KAAKyhK,uBAGZ,IC/EK,IAAKI,IAUX,SAVWA,GAAAA,EAAAA,EAAoB,oBAApBA,EAAAA,EAAoB,4BAApBA,EAAAA,EAAoB,0BAApBA,EAAAA,EAAoB,sCAApBA,EAAAA,EAAoB,oCAApBA,EAAAA,EAAoB,gCAApBA,EAAAA,EAAoB,kCAApBA,EAAAA,EAAoB,gCAApBA,EAAAA,EAAoB,gCAU/B,CAVWA,KAAAA,GAAoB,K,gBCHzB,IAAKC,IAIX,SAJWA,GAAAA,EAAAA,EAAqB,6BAArBA,EAAAA,EAAqB,6BAArBA,EAAAA,EAAqB,iCAIhC,CAJWA,KAAAA,GAAqB,KCCjC,MAAMC,GACFhvJ,WAAAA,GAAoD,KAInCivJ,iBAAW,UAAAryF,EAAA1vE,UAAAC,OAJbooH,EAAU,IAAAl4G,MAAAu/D,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAVy4C,EAAUz4C,GAAA5vE,UAAA4vE,GACrB7vE,KAAKgiK,YAAc15C,CACvB,CAIA25C,WAAAA,CAAYhvJ,GACR,IAAIyiD,EAAgCosG,GAAsBI,cAC1D,IAAI,IAAIv9B,KAAa3kI,KAAKgiK,YAAa,CACnC,MAAMp5H,EAAI+7F,EAAUs9B,YAAYhvJ,GAChC,GAAG21B,IAAMk5H,GAAsBK,YAC3B,OAAOv5H,EACDA,IAAMk5H,GAAsBI,gBAClCxsG,EAAS9sB,EAEjB,CACA,OAAO8sB,CACX,EAGG,SAAS0sG,KAAmE,IAAD,IAAAC,EAAApiK,UAAAC,OAA5DooH,EAAU,IAAAl4G,MAAAiyJ,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAVh6C,EAAUg6C,GAAAriK,UAAAqiK,GAC5B,OAAO,IAAIP,MAA0Bz5C,EACzC,CCvBO,MAAMi6C,GACTxvJ,WAAAA,GAAoD,KAInCivJ,iBAAW,UAAAryF,EAAA1vE,UAAAC,OAJbooH,EAAU,IAAAl4G,MAAAu/D,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAVy4C,EAAUz4C,GAAA5vE,UAAA4vE,GACrB7vE,KAAKgiK,YAAc15C,CACvB,CAIA25C,WAAAA,CAAYhvJ,EAAoBqwI,GAC5B,IAAI5tF,EAASosG,GAAsBI,cACnC,IAAI,IAAIv9B,KAAa3kI,KAAKgiK,YAAa,CACnC,MAAMp5H,EAAI+7F,EAAUs9B,YAAYhvJ,EAAUqwI,GAC1C,GAAG16G,IAAMk5H,GAAsBU,YAC3B,OAAO55H,EACDA,IAAMk5H,GAAsBI,gBAClCxsG,EAAS9sB,EAEjB,CAEA,OAAO8sB,CACX,EAGG,SAAS+sG,KAAkE,IAAD,IAAAJ,EAAApiK,UAAAC,OAA1DooH,EAAU,IAAAl4G,MAAAiyJ,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAVh6C,EAAUg6C,GAAAriK,UAAAqiK,GAC7B,OAAO,IAAIC,MAA2Bj6C,EAC1C,CCnBO,MAAeo6C,GAClB3vJ,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,EAAiC,KAQvDm3J,sBAAgB,EAPrB3iK,KAAK2iK,iBAAmB3iK,KAAK4iK,uBACjC,CAQA,yBAAIC,GACA,OAAO,CACX,CAEUC,8BAAAA,CAA+BrjJ,EAA+BsjJ,GACpE,GAAiC,IAA7BtjJ,EAAOujJ,WAAW9iK,OAClB,MAAO,GAGX,MAAMw1D,EAAkC,GAExC,IAAK,IAAIutG,KAAoBF,EAAmB,CAC5C,MAAMG,EAAYzjJ,EAAOujJ,WAAWr8B,MAAKw8B,GAAMA,EAAG5zI,KAAO0zI,EAAiB1zI,KACtE2zI,GACAxtG,EAAO/6C,KAAKuoJ,EAEpB,CAEA,OAAOxtG,CAEX,CAEAkvF,YAAAA,CAAa3xI,EAAoBmwJ,EAAyCL,GAEtE,MAAMM,EAA2C,GAEjD,IAAK,IAAI5jJ,KAAU2jJ,EAAgB,CAC/B,MAAME,EAAoCtjK,KAAK8iK,+BAA+BrjJ,EAAQsjJ,GAClFO,EAAkCpjK,OAAS,EAC3CmjK,EAAiB1oJ,KAAK8nJ,GAAIhjJ,EAAQ2iJ,MAAMkB,KAExCD,EAAiB1oJ,KAAK8E,EAE9B,CAEA,OAAO2iJ,MAAMiB,GAAkBpB,YAAYhvJ,EAC/C,CAEA,iBAAIswJ,GACA,OAAO,CACX,CAEArgB,iBAAAA,CAAkBjwI,GACd,MAAMyiD,EAAmB,GAOzB,OANA11D,KAAK2iK,iBAAiB/2G,SAAQnsC,IAC1BA,EAAOyjI,kBAAkBjwI,GAAU24C,SAAQ43F,IACvC9tF,EAAO/6C,KAAK6oI,EAAS,GACvB,IAGC9tF,CACX,ECjEG,MAAe8tG,GAClBzwJ,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,CAC/B,CAIA,cAAIw3J,GACA,MAAO,EACX,CAEA9f,iBAAAA,CAAkBjwI,GACd,OAAIjT,KAAKiiK,YAAYhvJ,KAAc6uJ,GAAsBK,YAC9C,CAACniK,KAAKuvB,IAGN,EAEf,EClBG,MAAMk0I,WAAuCD,GAChD,MAAIj0I,GACA,MAAO,iBACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,kBAC/C,CAEAosJ,WAAAA,CAAYhvJ,GACR,OAAGA,EAAS89E,kBACD+wE,GAAsBK,YAE1BL,GAAsBU,WACjC,ECdG,MAAMkB,WAAsCF,GAC/C,MAAIj0I,GACA,MAAO,gBACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,iBAC/C,CAEAosJ,WAAAA,CAAYhvJ,GACR,OAAGA,EAASk+E,iBACD2wE,GAAsBK,YAE1BL,GAAsBU,WACjC,ECdG,MAAMmB,WAAyCH,GAClD,MAAIj0I,GACA,MAAO,mBACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,oBAC/C,CAEAosJ,WAAAA,CAAYhvJ,GACR,OAAIA,EAASo+E,oBACFywE,GAAsBK,YAG1BL,GAAsBU,WACjC,ECZG,MAAMoB,WAA4ClB,GAErD,yBAAWG,GACP,OAAO,CACX,CAEA,MAAItzI,GACA,MAAO,YACX,CAEA,SAAI9mB,GACA,OAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,aAC/C,CACU+sJ,qBAAAA,GACN,MAAO,CACH,IAAIa,GAA+BzjK,KAAKwL,UACxC,IAAIm4J,GAAiC3jK,KAAKwL,UAC1C,IAAIk4J,GAA8B1jK,KAAKwL,UAE/C,CAEA,iBAAI+3J,GACA,OAAO,CACX,EC1BG,MAAeM,WAAwCL,GAM1DvB,WAAAA,CAAYhvJ,GACR,OAAGjT,KAAK8jK,mBAAmB7wJ,GAChB6uJ,GAAsBK,YAG1BL,GAAsBU,WACjC,ECZG,MAAMuB,WAAwCF,GAEjD,MAAIt0I,GACA,MAAO,oBACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,aAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOlO,EAAAA,MAAMC,SAASiO,EAASm3E,gBAAkBn3E,EAASm3E,eAAiB,GAAKn3E,EAASm3E,eAAiB,EAC9G,ECZG,MAAM45E,WAAuCH,GAChD,MAAIt0I,GACA,MAAO,kBACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,gBAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOlO,EAAAA,MAAMC,SAASiO,EAASm3E,gBAAkBn3E,EAASm3E,eAAiB,EAC/E,ECZG,MAAM65E,WAAgCJ,GACzC,MAAIt0I,GACA,MAAO,KACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAASo3E,SACpB,ECXG,MAAM65E,WAAiCL,GAC1C,MAAIt0I,GACA,MAAO,WACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,aAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAASo4E,YACpB,ECXG,MAAM84E,WAAkCN,GAC3C,MAAIt0I,GACA,MAAO,YACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,cAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAASq4E,aACpB,ECXG,MAAM84E,WAAkCP,GAC3C,MAAIt0I,GACA,MAAO,OACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,QAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAAS23E,aACpB,ECXG,MAAMy5E,WAAkCR,GAC3C,MAAIt0I,GACA,MAAO,WACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,aAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAAS83E,YACpB,ECXG,MAAMu5E,WAAoCT,GAC7C,MAAIt0I,GACA,MAAO,WACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,YAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAASk4E,WACpB,ECXG,MAAMo5E,WAAoCV,GAC7C,MAAIt0I,GACA,MAAO,YACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,YAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAAS63E,WACpB,ECGG,MAAM05E,WAA8C9B,GACvD,SAAIj6J,GACA,OAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,gBAC/C,CAEA,MAAI0Z,GACA,MAAO,UACX,CAEUqzI,qBAAAA,GACN,MAAO,CACH,IAAImB,GAAgC/jK,KAAKwL,UACzC,IAAIw4J,GAA+BhkK,KAAKwL,UACxC,IAAIy4J,GAAwBjkK,KAAKwL,UACjC,IAAI04J,GAAyBlkK,KAAKwL,UAClC,IAAI24J,GAA0BnkK,KAAKwL,UACnC,IAAI44J,GAA0BpkK,KAAKwL,UACnC,IAAI64J,GAA0BrkK,KAAKwL,UACnC,IAAI84J,GAA4BtkK,KAAKwL,UACrC,IAAI+4J,GAA4BvkK,KAAKwL,UAE7C,ECnCG,MAAMi5J,WAAwCZ,GACjD,MAAIt0I,GACA,MAAO,mBACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,oBAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAASs+E,eACpB,ECXG,MAAMmzE,WAA2Cb,GACpD,MAAIt0I,GACA,MAAO,sBACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,mBAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAASu+E,kBACpB,ECXG,MAAMmzE,WAA2Cd,GACpD,MAAIt0I,GACA,MAAO,sBACX,CAEA,QAAIztB,GACA,MAAO,kBACX,CAEUgiK,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAASw+E,mBACpB,ECXG,MAAMmzE,WAA2Cf,GACpD,MAAIt0I,GACA,MAAO,uBACX,CAEA,QAAIztB,GACA,MAAO,mBACX,CAEUgiK,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAASy+E,kBACpB,ECNG,MAAMmzE,WAAmChB,GAC5C,MAAIt0I,GACA,MAAO,aACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,UAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAOA,EAAS+7C,UACpB,CAEA,cAAIg0G,GACA,MAAO,CACH,IAAIyB,GAAgCzkK,KAAKwL,UACzC,IAAIk5J,GAAmC1kK,KAAKwL,UAC5C,IAAIm5J,GAAmC3kK,KAAKwL,UAC5C,IAAIo5J,GAAmC5kK,KAAKwL,UAEpD,ECzBG,MAAMs5J,WAAqCjB,GAC9C,MAAIt0I,GACA,MAAO,gBACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,aAC/C,CAEUiuJ,kBAAAA,CAAmB7wJ,GACzB,OAAQA,EAAS+7C,UACrB,ECRG,MAAM+1G,WAA4CrC,GAErD,MAAInzI,GACA,MAAO,YACX,CAEA,SAAI9mB,GACA,OAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,WAC/C,CAEU+sJ,qBAAAA,GACN,MAAO,CACH,IAAIiC,GAA2B7kK,KAAKwL,UACpC,IAAIs5J,GAA6B9kK,KAAKwL,UAE9C,CAEA,iBAAI+3J,GACA,OAAO,CACX,ECpBG,MAAMyB,GACTjyJ,WAAAA,CAA4Bwc,EACR01I,EACCC,GAAiB,KAFV31I,GAAAA,EAAU,KAClB01I,QAAAA,EAA+B,KAC9BC,MAAAA,EAAc,KA2B1BlC,WAAsC,EAzB/C,CAEA9f,iBAAAA,CAAkBjwI,GACd,OAAIjT,KAAKiiK,YAAYhvJ,KAAc6uJ,GAAsBK,YAC9C,CAACniK,KAAKuvB,IAGN,EAEf,CAEA,QAAIztB,GACA,OAAI9B,KAAKklK,MACEllK,KAAKklK,MAETllK,KAAKilK,QAAQ,GAAGl/I,IAC3B,CAEAk8I,WAAAA,CAAYhvJ,GAA4C,IAADkyJ,EACnD,OAAgB,QAAhBA,EAAInlK,KAAKilK,eAAO,IAAAE,GAAZA,EAAcC,MAAKC,IAAgB,OAANA,QAAM,IAANA,OAAM,EAANA,EAAQ91I,MAAOtc,EAASw5E,WAC9Cq1E,GAAsBK,YAE1BL,GAAsBU,WACjC,E,gBC1BG,MAAM8C,WAA4C5C,GAErD,MAAInzI,GACA,MAAO,SACX,CAEA,SAAI9mB,GACA,OAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,eAC/C,CAEA,yBAAIgtJ,GAAkC,IAADhqG,EAAAC,EACjC,OAAQ/zD,EAAAA,MAAMiP,QAAgE,QAAzD6kD,EAAC74D,KAAKwL,SAASye,cAAcC,KAAK+kC,gBAAgBs2G,eAAO,IAAA1sG,GAAiB,QAAjBC,EAAxDD,EAA0D2sG,uBAAe,IAAA1sG,OAAjB,EAAxDA,EAA2E2sG,uBACrG,CAEOC,6BAAAA,GAA2D,IAAD1sG,EAAAC,EAC7D,MAAO,CACH,IAAI+rG,GAAuB,aAAc,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAag+E,QAAS7lK,KAAKwL,SAASoK,YAAYC,UAAU,yBAA0B,CAACiwJ,UAA6F,QAApF9sG,EAA0D,QAA1DC,EAAEj5D,KAAKwL,SAASye,cAAcC,KAAK+kC,gBAAgBs2G,eAAO,IAAAtsG,OAAA,EAAxDA,EAA0D8sG,gCAAwB,IAAA/sG,EAAAA,EAAI,SACpQ,IAAIgsG,GAAuB,aAAc,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAam+E,SAC3F,IAAIhB,GAAuB,gBAAiB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAao+E,YAC9F,IAAIjB,GAAuB,mBAAoB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaq+E,eACjG,IAAIlB,GAAuB,mBAAoB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAas+E,eACjG,IAAInB,GAAuB,mBAAoB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAau+E,eACjG,IAAIpB,GAAuB,gBAAiB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaw+E,YAC9F,IAAIrB,GAAuB,aAAc,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAay+E,SAC3F,IAAItB,GAAuB,aAAc,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa0+E,SAC3F,IAAIvB,GAAuB,mBAAoB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa2+E,eACjG,IAAIxB,GAAuB,gBAAiB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa4+E,YAC9F,IAAIzB,GAAuB,qBAAsB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa6+E,iBACnG,IAAI1B,GAAuB,sBAAuB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa8+E,kBACpG,IAAI3B,GAAuB,iBAAkB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa++E,aAC/F,IAAI5B,GAAuB,mBAAoB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAag/E,eACjG,IAAI7B,GAAuB,YAAa,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAai/E,QAC1F,IAAI9B,GAAuB,kBAAmB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAak/E,cAChG,IAAI/B,GAAuB,aAAc,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAam/E,SAC3F,IAAIhC,GAAuB,kBAAmB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAao/E,cAChG,IAAIjC,GAAuB,kBAAmB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaq/E,cAChG,IAAIlC,GAAuB,sBAAuB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAas/E,kBACpG,IAAInC,GAAuB,aAAc,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAau/E,OAAQpnK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaw/E,SAAU,OAC9J,IAAIrC,GAAuB,gBAAiB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAay/E,YAC9F,IAAItC,GAAuB,aAAc,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa0/E,SAC3F,IAAIvC,GAAuB,gBAAiB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa2/E,YAC9F,IAAIxC,GAAuB,yBAA0B,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa4/E,mBAAmB,YAC1H,IAAIzC,GAAuB,mCAAoC,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa6/E,6BAA6B,aAC9I,IAAI1C,GAAuB,qBAAsB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa8/E,iBACnG,IAAI3C,GAAuB,iBAAkB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa+/E,YAAY,aAC3G,IAAI5C,GAAuB,kBAAmB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaggF,aAAa,YAC7G,IAAI7C,GAAuB,mBAAoB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaigF,eACjG,IAAI9C,GAAuB,mBAAoB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAakgF,eACjG,IAAI/C,GAAuB,iBAAkB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAamgF,aAC/F,IAAIhD,GAAuB,kBAAmB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaogF,cAChG,IAAIjD,GAAuB,kBAAmB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaqgF,cAChG,IAAIlD,GAAuB,eAAgB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAasgF,WAC7F,IAAInD,GAAuB,iBAAkB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaugF,aAC/F,IAAIpD,GAAuB,gBAAiB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAawgF,YAC9F,IAAIrD,GAAuB,qBAAsB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaygF,iBACnG,IAAItD,GAAuB,gBAAiB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa0gF,YAC9F,IAAIvD,GAAuB,aAAc,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa2gF,SAC3F,IAAIxD,GAAuB,mBAAoB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa4gF,eACjG,IAAIzD,GAAuB,eAAgB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa6gF,WAC7F,IAAI1D,GAAuB,qBAAsB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa8gF,eAAe,eAClH,IAAI3D,GAAuB,eAAgB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa+gF,UAAW5oK,KAAKwL,SAASoK,YAAYC,UAAU,qBAAsB,CAACiwJ,UAAW,WAC9K,IAAId,GAAuB,gBAAiB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaghF,YAC9F,IAAI7D,GAAuB,gBAAiB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaihF,YAC9F,IAAI9D,GAAuB,iBAAkB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAakhF,aAC/F,IAAI/D,GAAuB,mBAAoB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAamhF,eACjG,IAAIhE,GAAuB,aAAc,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaohF,SAC3F,IAAIjE,GAAuB,oBAAqB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAaqhF,gBAClG,IAAIlE,GAAuB,iBAAkB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAashF,aAC/F,IAAInE,GAAuB,qBAAsB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAauhF,gBACnG,IAAIpE,GAAuB,oBAAqB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAawhF,eAClG,IAAIrE,GAAuB,iBAAkB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAayhF,YAC/F,IAAItE,GAAuB,iBAAkB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa0hF,aAC/F,IAAIvE,GAAuB,eAAgB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa2hF,WAC7F,IAAIxE,GAAuB,eAAgB,CAAChlK,KAAKwL,SAASm6J,YAAYC,UAAU/9E,GAAAA,EAAa4hF,WAErG,CAEQC,wCAAAA,GAAsE,IAAD3vG,EAAAC,EAAA2vG,EACzE,MAAMC,EAA8H,QAApG7vG,EAA2D,QAA3DC,EAAGh6D,KAAKwL,SAASye,cAAcC,KAAK+kC,gBAAgBs2G,eAAO,IAAAvrG,GAAiB,QAAjB2vG,EAAxD3vG,EAA0DwrG,uBAAe,IAAAmE,OAAjB,EAAxDA,EAA2ElE,8BAAsB,IAAA1rG,EAAAA,EAAI,GACxI,GAA0C,IAAtC6vG,EAA2B1pK,OAC3B,MAAO,IAAIF,KAAK0lK,iCAGpB,MAAMmE,EAAgC7pK,KAAK0lK,gCAAgCoE,cAAaC,GAAKA,EAAEx6I,KACzFmmC,EAAmC,GACzC,IAAK,IAAI8tF,KAAYomB,EAA4B,CAC7C,MAAMnqJ,EAASoqJ,EAA8BrmB,GACzC/jI,EACAi2C,EAAO/6C,KAAK8E,GAEZzf,KAAKwL,SAAS2L,OAAOxI,MAAM,yDAAD/O,OAA0D4jJ,GAE5F,CAEA,OAAO9tF,CACX,CAEUktG,qBAAAA,GACN,MAAM2C,EAAUvlK,KAAK0pK,2CACrB,IAAIM,EAAgCzE,EAAQ0E,YAAWF,IAAC,IAAAG,EAAA,OAAa,QAAbA,EAAIH,EAAE9E,eAAO,IAAAiF,OAAA,EAATA,EAAW35J,KAAI80J,GAAgB,OAANA,QAAM,IAANA,OAAM,EAANA,EAAQ91I,IAAG,IAChG,MAAM46I,EAA4B,GAE5BC,EAAgB3tJ,OAAOspC,KAAK/lD,KAAKwL,SAAS63E,IAAIq7D,mBAAmBnuI,KAAIgf,GAAMwQ,SAASxQ,KAC1F,IAAK,IAAIk9D,KAAY29E,EACZJ,EAAoB9sJ,SAASuvE,IAC9B09E,EAAgBxvJ,KAAK8xE,GAS7B,OALI09E,EAAgBjqK,OAAS,GACzBqlK,EAAQ5qJ,KAAK,IAAIqqJ,GAAuB,gBAAiBmF,EAAgB55J,KAAIk8E,GAAYzsF,KAAKwL,SAASm6J,YAAYC,UAAUn5E,KAAYzsF,KAAKwL,SAASoK,YAAYC,UAAU,WAI1K0vJ,CACX,ECtHG,MAAe8E,WAAsC7G,GAGxDvB,WAAAA,CAAYhvJ,GACR,OAAGjT,KAAKsqK,yBAAyBptJ,SAASjK,EAASo5E,aACxCy1E,GAAsBK,YAG1BL,GAAsBU,WACjC,E,gBCVG,MAAM+H,WAAiCF,GAC1C,MAAI96I,GACA,MAAO,UACX,CAEA,4BAAc+6I,GACV,MAAO,CAAC91E,GAAAA,EAAWM,SACvB,CAEA,QAAIhzF,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,WAC/C,ECXG,MAAM20J,WAAkCH,GAE3C,MAAI96I,GACA,MAAO,WACX,CAEA,4BAAc+6I,GACV,MAAO,CAAC91E,GAAAA,EAAWO,UACvB,CAEA,QAAIjzF,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,YAC/C,ECZG,MAAM40J,WAA8BJ,GACvC,MAAI96I,GACA,MAAO,OACX,CAEA,4BAAc+6I,GACV,MAAO,CAAC91E,GAAAA,EAAWS,MACvB,CAEA,QAAInzF,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,QAC/C,ECXG,MAAM60J,WAA6BL,GACtC,MAAI96I,GACA,MAAO,MACX,CAEA,4BAAc+6I,GACV,MAAO,CAAC91E,GAAAA,EAAWU,KACvB,CAEA,QAAIpzF,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,OAC/C,ECVG,MAAM80J,WAAuCnH,GAChD,MAAIj0I,GACA,MAAO,mBACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,oBAC/C,CAEAosJ,WAAAA,CAAYhvJ,GACR,OAAGA,EAASg4E,cACD62E,GAAsBK,YAG1BL,GAAsBU,WACjC,ECfG,MAAMoI,WAAmDpH,GAC5D,MAAIj0I,GACA,MAAO,gCACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,YAC/C,CAEAosJ,WAAAA,CAAYhvJ,GACR,OAAGA,EAASg4E,eAAiBh4E,EAASs3E,gBAC3Bu3E,GAAsBK,YAG1BL,GAAsBU,WACjC,ECdG,MAAeqI,WAAqCrH,GAIvDvB,WAAAA,CAAYhvJ,GACR,GAAIA,EAASo5E,cAAgBmI,GAAAA,EAAWmB,cAAgB1iF,EAAS+3E,aAC7D,OAAO82E,GAAsBU,YAGjC,MAAMsI,EAAe73J,EAAS+3E,aAAahrE,cAC3C,OAAI8qJ,IAA2E,IAA3DA,EAAaxnI,QAAQtjC,KAAK+qK,4BACnCjJ,GAAsBK,YAG1BL,GAAsBU,WACjC,EClBG,MAAMwI,WAAsCH,GAC/C,MAAIt7I,GACA,MAAO,iBACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,kBAC/C,CAEA,8BAAck1J,GACV,MAAO,OACX,ECVG,MAAME,WAA8BZ,GAEvC,MAAI96I,GACA,MAAO,OACX,CAEA,4BAAc+6I,GACV,MAAO,CAAC91E,GAAAA,EAAWe,YAAaf,GAAAA,EAAWQ,gBAAiBR,GAAAA,EAAWW,MAAOX,GAAAA,EAAWwB,cAAexB,GAAAA,EAAWuB,kBAAmBvB,GAAAA,EAAWY,qBACrJ,CAEA,QAAItzF,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,QAC/C,ECZG,MAAMq1J,WAAiCb,GAC1C,MAAI96I,GACA,MAAO,UACX,CAEA,4BAAc+6I,GACV,MAAO,CAAC91E,GAAAA,EAAWa,SAAUb,GAAAA,EAAWqB,cAC5C,CAEA,QAAI/zF,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,WAC/C,ECXG,MAAMs1J,WAAqCd,GAC9C,MAAI96I,GACA,MAAO,cACX,CAEA,4BAAc+6I,GACV,MAAO,CAAC91E,GAAAA,EAAWc,aACvB,CAEA,QAAIxzF,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,eAC/C,ECXG,MAAMu1J,WAA8Bf,GAEvC,MAAI96I,GACA,MAAO,OACX,CAEA,4BAAc+6I,GACV,MAAO,CAAC91E,GAAAA,EAAWC,WAAYD,GAAAA,EAAWE,KAC9C,CAEA,QAAI5yF,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,aAC/C,ECVG,MAAMw1J,GACTt4J,WAAAA,CAA+BvH,EAA2C8/J,GAAsD,KAAjG9/J,SAAAA,EAAiC,KAAU8/J,2BAAAA,EAAmD,KAepHtI,WAAsC,EAd/C,CACA9f,iBAAAA,CAAkBjwI,GACd,OAAIjT,KAAKiiK,YAAYhvJ,KAAc6uJ,GAAsBK,YAC9C,CAACniK,KAAKuvB,IAGN,EAEf,CAEA,MAAIA,GACA,MAAO,kBACX,CAIA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,QAC/C,CAEAosJ,WAAAA,CAAYhvJ,GACR,MAAMs4J,EAA2BvrK,KAAKsrK,2BACtC,IAAI,IAAItiJ,KAAYuiJ,EAClB,GAAGviJ,EAASi5I,YAAYhvJ,KAAc6uJ,GAAsBK,YAC1D,OAAOL,GAAsBU,YAIjC,OAAOV,GAAsBK,WACjC,EClCG,MAAMqJ,WAAqCX,GAC9C,MAAIt7I,GACA,MAAO,eACX,CAEA,8BAAcw7I,GACV,MAAO,UACX,CAEA,QAAIjpK,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,gBAC/C,ECXG,MAAM41J,WAAsCZ,GAE/C,MAAIt7I,GACA,MAAO,gBACX,CAEA,8BAAcw7I,GACV,MAAO,WACX,CAEA,QAAIjpK,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,iBAC/C,ECZG,MAAM61J,WAAkCb,GAE3C,MAAIt7I,GACA,MAAO,YACX,CAEA,8BAAcw7I,GACV,MAAO,OACX,CAEA,QAAIjpK,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,aAC/C,ECZG,MAAM81J,WAAqCd,GAC9C,MAAIt7I,GACA,MAAO,eACX,CAEA,8BAAcw7I,GACV,MAAO,UACX,CAEA,QAAIjpK,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,gBAC/C,ECTG,MAAM+1J,WAAsCpI,GAC/C,MAAIj0I,GACA,MAAO,gBACX,CAEA,QAAIztB,GACA,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,gBAC/C,CAEAosJ,WAAAA,CAAYhvJ,GACR,OAAGA,EAASu3E,eACDs3E,GAAsBK,YAG1BL,GAAsBU,WACjC,ECIG,MAAMqJ,WAA2CnJ,GAEpD,MAAInzI,GACA,MAAO,YACX,CAEA,SAAI9mB,GACA,OAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,kBAC/C,CAEU+sJ,qBAAAA,GACN,MAAM2C,EAAmC,CACrC,IAAIqG,GAA8B5rK,KAAKwL,UACvC,IAAI4/J,GAAsBprK,KAAKwL,UAC/B,IAAI0/J,GAAyBlrK,KAAKwL,UAClC,IAAIg/J,GAA0BxqK,KAAKwL,UACnC,IAAIy/J,GAAsBjrK,KAAKwL,UAC/B,IAAI2/J,GAA6BnrK,KAAKwL,UACtC,IAAI++J,GAAyBvqK,KAAKwL,UAClC,IAAIi/J,GAAsBzqK,KAAKwL,UAC/B,IAAIk/J,GAAqB1qK,KAAKwL,UAC9B,IAAIggK,GAA6BxrK,KAAKwL,UACtC,IAAIigK,GAA8BzrK,KAAKwL,UACvC,IAAImgK,GAA6B3rK,KAAKwL,UACtC,IAAIkgK,GAA0B1rK,KAAKwL,UACnC,IAAIw/J,GAA8BhrK,KAAKwL,UACvC,IAAIm/J,GAA+B3qK,KAAKwL,UACxC,IAAIo/J,GAA2C5qK,KAAKwL,WAExD,OAAO+5J,EAAQ3lK,OAAO,IAAIyrK,GAA+BrrK,KAAKwL,SAAU+5J,GAC5E,EC/CG,MAAMuG,WAAkCtI,GAC3CzwJ,WAAAA,CAA4Bwc,EACG/jB,EACXugK,EACRC,GACR5zJ,MAAM5M,GAAU,KAJQ+jB,GAAAA,EAAU,KACP/jB,SAAAA,EAAiC,KAC5CugK,qBAAAA,EAAyC,KAM5CE,eAAS,EAHtBjsK,KAAKisK,UAAY,CAACjsK,KAAK+rK,qBAAqBx8I,MAAQy8I,GAAkB,GAC1E,CAIA,QAAIlqK,GACA,OAAO9B,KAAK+rK,qBAAqBhmJ,IACrC,CAEAk8I,WAAAA,CAAYhvJ,GACR,IAAI,IAAIi5J,KAAWj5J,EAASkjF,SACxB,GAAGn2F,KAAKisK,UAAU/uJ,SAASgvJ,GACvB,OAAOpK,GAAsBK,YAGrC,OAAOL,GAAsBU,WACjC,EC5BG,IAAK2J,IAoCT,SApCSA,GAAAA,EAAAA,EAAW,yBAAXA,EAAAA,EAAW,6CAAXA,EAAAA,EAAW,uBAAXA,EAAAA,EAAW,+BAAXA,EAAAA,EAAW,iBAAXA,EAAAA,EAAW,2BAAXA,EAAAA,EAAW,mCAAXA,EAAAA,EAAW,kBAAXA,EAAAA,EAAW,sCAAXA,EAAAA,EAAW,0CAAXA,EAAAA,EAAW,kBAAXA,EAAAA,EAAW,oBAAXA,EAAAA,EAAW,sCAAXA,EAAAA,EAAW,4CAAXA,EAAAA,EAAW,wBAAXA,EAAAA,EAAW,wBAAXA,EAAAA,EAAW,8BAAXA,EAAAA,EAAW,oBAAXA,EAAAA,EAAW,4BAAXA,EAAAA,EAAW,oBAAXA,EAAAA,EAAW,oCAAXA,EAAAA,EAAW,YAAXA,EAAAA,EAAW,kCAAXA,EAAAA,EAAW,gCAAXA,EAAAA,EAAW,gBAAXA,EAAAA,EAAW,sBAAXA,EAAAA,EAAW,gBAAXA,EAAAA,EAAW,kBAAXA,EAAAA,EAAW,oDAAXA,EAAAA,EAAW,oCAAXA,EAAAA,EAAW,kBAAXA,EAAAA,EAAW,wBAAXA,EAAAA,EAAW,oCAAXA,EAAAA,EAAW,6BAAXA,EAAAA,EAAW,2DAoCpB,CApCSA,KAAAA,GAAW,KCOhB,MAAMC,WAA2C1J,GAEpD,MAAInzI,GACA,MAAO,QACX,CAEA,SAAI9mB,GACA,OAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,SAC/C,CAEA,yBAAIgtJ,GAAkC,IAADhqG,EAAAC,EACjC,OAAQ/zD,EAAAA,MAAMiP,QAAgE,QAAzD6kD,EAAC74D,KAAKwL,SAASye,cAAcC,KAAK+kC,gBAAgBs2G,eAAO,IAAA1sG,GAAiB,QAAjBC,EAAxDD,EAA0D2sG,uBAAe,IAAA1sG,OAAjB,EAAxDA,EAA2EuzG,sBACrG,CAEQC,yBAAAA,GACJ,MAAO,CACH,IAAIR,GAA0B,kBAAmB9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYM,YAC5H,IAAIX,GAA0B,6BAA8B9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYO,sBACvI,IAAIZ,GAA0B,iBAAkB9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYQ,WAC3H,IAAIb,GAA0B,sBAAuB9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYS,cAAe,CAACT,GAAYU,yBAC5J,IAAIf,GAA0B,cAAe9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYW,QACxH,IAAIhB,GAA0B,eAAgB9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYY,SACzH,IAAIjB,GAA0B,4BAA6B9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYa,oBACtI,IAAIlB,GAA0B,0BAA2B9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYc,kBACpI,IAAInB,GAA0B,iBAAkB9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYe,WAC3H,IAAIpB,GAA0B,6BAA8B9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYgB,qBACvI,IAAIrB,GAA0B,sBAAuB9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYgB,qBAChI,IAAIrB,GAA0B,aAAc9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYiB,OACvH,IAAItB,GAA0B,wBAAyB9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYkB,QAClI,IAAIvB,GAA0B,wBAAyB9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYmB,iBAClI,IAAIxB,GAA0B,cAAe9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYoB,QACxH,IAAIzB,GAA0B,0BAA2B9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYqB,kBACpI,IAAI1B,GAA0B,yBAA0B9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYsB,iBACnI,IAAI3B,GAA0B,iBAAkB9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYuB,WAC3H,IAAI5B,GAA0B,yBAA0B9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYwB,gBACnI,IAAI7B,GAA0B,cAAe9rK,KAAKwL,SAAUxL,KAAKwL,SAAS+gK,WAAWC,uBAAuBL,GAAYyB,QAEhI,CAGUhL,qBAAAA,GAAkD,IAAD5pG,EAAAC,EACvD,MAAMozG,EAAgF,QAA3DrzG,EAAGh5D,KAAKwL,SAASye,cAAcC,KAAK+kC,gBAAgBs2G,eAAO,IAAAvsG,GAAiB,QAAjBC,EAAxDD,EAA0DwsG,uBAAe,IAAAvsG,OAAjB,EAAxDA,EAA2EozG,sBACzG,GAAItnK,EAAAA,MAAMiP,QAAQq4J,GACd,OAAOrsK,KAAKssK,4BAGhB,MAAMuB,EAAmB7tK,KAAKssK,4BAA4BxC,cAAaC,GAAKA,EAAEx6I,KAExEmmC,EAAkC,GACxC,IAAK,IAAI8tF,KAAY6oB,EAAuB,CACxC,MAAM5sJ,EAASouJ,EAAiBrqB,GAC5B/jI,EACAi2C,EAAO/6C,KAAK8E,GAEZzf,KAAKwL,SAAS2L,OAAOxI,MAAM,oDAAD/O,OAAqD4jJ,GAEvF,CAEA,OAAO9tF,CAEX,ECxDG,MAAMo4G,GACT/6J,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,EAAiC,KAG/CuiK,eAA4D,CACzE,WAAc,IAAInK,GAAoC5jK,KAAKwL,UAC3D,SAAYxL,KAAKguK,uCACjB,WAAc,IAAIjJ,GAAoC/kK,KAAKwL,UAC3D,OAAU,IAAI4gK,GAAmCpsK,KAAKwL,UACtD,QAAYxL,KAAKiuK,kCACjB,WAAcjuK,KAAKkuK,oCARvB,CAWAC,wBAAAA,CAAyBC,GACrB,OAAIA,KAAwBpuK,KAAK+tK,eACtB/tK,KAAK+tK,eAAeK,IAE3BpuK,KAAKwL,SAAS2L,OAAOxI,MAAM,kDAAD/O,OAAmDwuK,IACtE,KAEf,CAGAH,+BAAAA,GACI,OAAO,IAAI3I,GAAoCtlK,KAAKwL,SACxD,CAEA0iK,iCAAAA,GACI,OAAO,IAAIrC,GAAmC7rK,KAAKwL,SACvD,CAEAwiK,oCAAAA,GACI,OAAO,IAAIxJ,GAAsCxkK,KAAKwL,SAC1D,CAEA6iK,yBAAAA,GACI,OAAO5xJ,OAAOonC,OAAO7jD,KAAK+tK,eAC9B,E,aCjCG,IAAeO,IAAuBz2J,GA4DxCC,EAAAA,GAAWxK,IAAGwF,GA5DZ,cAA+CgR,GAAAA,EAElD/Q,WAAAA,CAA+BvH,GAC3B4M,QAAQ,KADmB5M,SAAAA,EAAiC,KAuCtD+iK,SAAW,IAAIT,GAAgC9tK,KAAKwL,UAAU,KAMhEgjK,+BAAgC,GAAKj2J,EAAAA,EAAAA,GAAA,wBAAAC,GAAA,WAgBrCi2J,mBAA4D,MA3DhEz1J,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK0uK,aAAY,IAAM1uK,KAAKwL,SAASorB,SAASE,aAAY,KAItDqT,YAAW,MACPvgB,EAAAA,EAAAA,KAAY,KACR,IACI5pB,KAAKmjJ,iBAAmBnjJ,KAAK2uK,eACzB3uK,KAAKwL,SAASmmD,YAAYwqB,aAAen8E,KAAKwuK,+BAC9CxuK,KAAK4uK,+BAEb,CAAC,QACG5uK,KAAKwuK,+BAAgC,CACzC,IACF,GACJ,GAEH,CACCtyJ,iBAAiB,IAGrBlc,KAAK0uK,aAAY,IAAM1uK,KAAKwL,SAAS2P,MAAMC,WAAU,KAIjD+uB,YAAW,MACPvgB,EAAAA,EAAAA,KAAY,KACR5pB,KAAKmjJ,iBAAmBnjJ,KAAK2uK,cAAc,GAC7C,GACJ,GAEH,CACCzyJ,iBAAiB,GAEzB,CAGAqnI,aAAAA,CAAcC,GACV,OAAOxjJ,KAAK6uK,eAAezJ,MAAK3lJ,GAAUA,EAAO8P,KAAOi0H,GAC5D,CAGAsrB,6BAAAA,GACI9uK,KAAKwuK,+BAAgC,CACzC,CAcA,qBAAWO,GAIP,OAHK/uK,KAAKyuK,qBACNzuK,KAAKyuK,mBAAqBzuK,KAAKgvK,4BAE5BhvK,KAAKyuK,kBAChB,CAGA,kBACWI,GACP,MAAMn5G,EAA6B,GAKnC,OAJA11D,KAAK+uK,kBAAkBnjH,SAAQ5iC,IAC3BA,EAAS25I,iBAAiB/2G,SAAQm+G,GAAKr0G,EAAO/6C,KAAKovJ,IAAG,IAGnDr0G,CACX,CAEA,wBAAIutF,GACA,OAAOjjJ,KAAK6uK,eAAe3uK,OAAS,CACxC,CAEUyuK,YAAAA,GAEN,MAAMvzJ,EAAWpb,KAAKwL,SAAS2P,MAAMC,SAErC,IAAKpb,KAAK6uK,eAAezJ,MAAK2E,GAAKA,EAAEkF,YACjC,OAAO7zJ,EAGX,MAAMupH,EAAY3kI,KAAKkvK,mBAEjBx5G,EAAmB,CAAC,EAE1B,IAAK,IAAIy5G,KAAQ1yJ,OAAOonC,OAAO7jD,KAAKwL,SAAS2P,MAAMC,UAAW,CAC1D,MAAMg0J,EAAezqC,EAAUs9B,YAAYkN,GACvCrN,GAAsBK,cAAgBiN,IACtC15G,EAAOy5G,EAAKp6J,UAAYo6J,EAEhC,CAEA,OAAOz5G,CACX,CAEOwtF,iBAAAA,CAAkBnuI,GAGrB,MAAM9B,EAAWjT,KAAKwL,SAAS2P,MAAMC,SAASrG,GAC9C,IAAK9B,EACD,MAAO,GAEX,MAAMo8J,EAAgBrvK,KAAKuuK,SAASF,4BAC9B34G,EAAmB,GAOzB,OANA25G,EAAczjH,SAAQ5iC,IAClBA,EAASk6H,kBAAkBjwI,GAAU24C,SAAQ43F,IACzC9tF,EAAO/6C,KAAK6oI,EAAS,GACvB,IAGC9tF,CACX,CAEA2tF,+BAAAA,CAAgCC,GAC5B,OAAO,CACX,CAEAG,qBAAAA,CAAsBC,GAClB,IAAIhuF,EAAgD,CAAC,EAErD,IAAK,IAAI45G,KAAsBtvK,KAAKuuK,SAASF,4BACzC,IAAK,IAAIkB,KAAoBD,EAAmB3M,iBAAkB,CAC9D,GAAI4M,EAAiBvM,WAAW9iK,OAAS,EACrC,IAAK,IAAIgjK,KAAaqM,EAAiBvM,WAAWvjJ,QAAO+vJ,GAAQ9rB,EAAWxmI,SAASsyJ,EAAKjgJ,MACtFmmC,EAAOwtG,EAAU3zI,IAAM2zI,EAG3Bxf,EAAWxmI,SAASqyJ,EAAiBhgJ,MACrCmmC,EAAO65G,EAAiBhgJ,IAAMggJ,EAEtC,CAGJ,OAAO75G,CACX,GACHl9C,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAvFgD,CAAC,CAAE,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBAW9Co6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,kBAAAtJ,GAAAsJ,WAAAtJ,ICrFN,MAAM28J,IAAmCjxK,EAAAA,GAAAA,GAAU,oCCA7CkxK,IAAoBlxK,EAAAA,GAAAA,GAAU,qB,OCApC,MAAMmxK,GAA2BlyK,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,oG,OCA3C,MAAMgyK,GAAgBnyK,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2FAI3BE,GAASA,EAAMyC,SAAW,OAAS,YCJlCsvK,IAAiBrxK,EAAAA,GAAAA,GAAU,kBCA3BsxK,IAAqBtxK,EAAAA,GAAAA,GAAU,sB,OCArC,MAAMuxK,GAAgBtyK,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gC,OCAhC,MAAMoyK,GAAyBvyK,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8EAGjCE,GAASA,EAAMyC,SAAW,MAAQ,MCgBpC0vK,IAA8B1wK,EAAAA,GAAAA,IACvC,MAAM0wK,UAAoCzwK,GAAAA,EAAiDuT,WAAAA,GAAA,SAAA9S,WAAA,KAE/EiwK,gBAAkB,KAClBlwK,KAAKlC,MAAM2hB,OAAOlf,UAGtBP,KAAKlC,MAAM2hB,OAAO0wJ,cAAc,CACnC,CAEOC,iBAAAA,GACJ,MAAMpN,EAAahjK,KAAKlC,MAAM2hB,OAAOujJ,WACrC,OAAyB,IAAtBA,EAAW9iK,OACH,MAIPR,EAAAA,GAAAA,KAACqwK,GAAa,CAAAhwK,SACTijK,EAAWzyJ,KAAI4yJ,IAAOzjK,EAAAA,GAAAA,KAACuwK,EAA2B,CACCI,iBAAkBrwK,KAAKlC,MAAMuyK,iBAC7B5wJ,OAAQ0jJ,EACRmN,UAAU,YAHLnN,EAAG5zI,OAMxE,CAEA9vB,MAAAA,GACI,MAAMggB,EAASzf,KAAKlC,MAAM2hB,OACpB6wJ,EAAYtwK,KAAKlC,MAAMwyK,UAE7B,OACI9nK,EAAAA,GAAAA,MAACwnK,GAAsB,CAACzvK,SAAUkf,EAAOlf,SAAUZ,WAAWG,EAAAA,GAAAA,IAAQ,uBAAuBC,SAAA,EACzFyI,EAAAA,GAAAA,MAAConK,GAAa,CAACvoK,QAASrH,KAAKkwK,gBAAiB3vK,SAAUkf,EAAOlf,SAASR,SAAA,EACpEL,EAAAA,GAAAA,KAACmwK,GAAc,CAACpmK,KAAM6mK,EAAWvqJ,KAAI,GAAAnmB,OAAKI,KAAKlC,MAAMuyK,iBAAgB,WAAW10H,QAASxxC,QAAQsV,EAAO09G,IAAKozC,UAAQ,EAAChwK,SAAUkf,EAAOlf,YACvIiI,EAAAA,GAAAA,MAACsnK,GAAkB,CAACU,UAAW/wJ,EAAO09G,GAAGp9H,SAAA,CACpC0f,EAAO3d,KACP2d,EAAOgxJ,WAAa,GAAC,KAAA7wK,OAAS6f,EAAOgxJ,WAAU,WAGvDzwK,KAAKowK,sBAIlB,ICjDKM,IAAiCnxK,EAAAA,GAAAA,IAC1C,cAA6CC,GAAAA,EAEzCmxK,cAAAA,CAAe3nJ,GAGX,OAAOtpB,EAAAA,GAAAA,KAAAo5B,GAAAA,SAAA,CAAA/4B,SACFipB,EAAS4nJ,eAAergK,KAAIsgK,IAAmBnxK,EAAAA,GAAAA,KAACuwK,GAA2B,CACVxwJ,OAAQoxJ,EACRP,UAAWtnJ,EAASu6I,cAAgB,WAAa,QACjD8M,iBAAkBrnJ,EAASuG,IAHXshJ,EAAethJ,OAKzG,CAEA9vB,MAAAA,GACI,OAAIO,KAAKlC,MAAMqqD,QAKXzoD,EAAAA,GAAAA,KAACiwK,GAAwB,CAAA5vK,SACpBC,KAAK2wK,eAAe3wK,KAAKlC,MAAMkrB,YAL7B,IAQf,ICrCK8nJ,IAA0BtyK,EAAAA,GAAAA,GAAU,2BCApCuyK,IAAiBvyK,EAAAA,GAAAA,GAAU,kBCA3BwyK,IAAmBxyK,EAAAA,GAAAA,GAAU,oBCe7ByyK,IAAgC1xK,EAAAA,GAAAA,IACzC,cAA4CC,GAAAA,EAAmDuT,WAAAA,GAAA,SAAA9S,WAAA,KACnF24D,gBAAkB,KACtB54D,KAAKlC,MAAMozK,iBAAiBlxK,KAAKlC,MAAMkrB,SAAS,CACnD,CAGDvpB,MAAAA,GACI,MAAM0xK,EAAqBnxK,KAAKlC,MAAMkrB,SAASooJ,2BAA2B7gK,KAAIw5J,GAAKA,EAAEjoK,OACrF,OACI0G,EAAAA,GAAAA,MAACsoK,GAAuB,CAACzpK,QAASrH,KAAK44D,gBAAgB74D,SAAA,EACnDL,EAAAA,GAAAA,KAACqxK,GAAc,CAAC5oH,OAAQnoD,KAAKlC,MAAMqqD,OAAOpoD,SACrCC,KAAKlC,MAAMkrB,SAASvgB,SAGzBD,EAAAA,GAAAA,MAACwoK,GAAgB,CAAC5qB,WAAYpmJ,KAAKlC,MAAMqqD,QAAUgpH,EAAmBjxK,OAAS,EAAEH,SAAA,CAAC,IAC5EoxK,EAAmB1rK,KAAK,MAAM,SAIhD,ICtBK4rK,IAA0B9xK,EAAAA,GAAAA,IACnC,cAAsCC,GAAAA,EAElCC,MAAAA,GACI,MAAM,SAACupB,EAAQ,OAAEm/B,GAAUnoD,KAAKlC,MAChC,OACI0K,EAAAA,GAAAA,MAACknK,GAAiB,CAAC/vK,WAAWG,EAAAA,GAAAA,IAAQ,4BAA4BC,SAAA,EAC9DL,EAAAA,GAAAA,KAACuxK,GAA6B,CAACjoJ,SAAUA,EAAUm/B,OAAQA,EAAQ+oH,iBAAkBlxK,KAAKlC,MAAMozK,oBAChGxxK,EAAAA,GAAAA,KAACgxK,GAA8B,CAAC1nJ,SAAUA,EAAUm/B,OAAQA,MAGxE,ICVKmpH,IAAgC/xK,EAAAA,GAAAA,IACzC,cAA4C4yB,GAAAA,EAAkGpf,WAAAA,GAAA,SAAA9S,WAAA,KAE1IymB,MAA6C,CACzC6qJ,mBAAoB,MACvB,KAEDC,kBAAqBxoJ,IACjB,IAAIyoJ,EAA0BzxK,KAAK0mB,MAAM6qJ,mBAGrCE,GAA2BzoJ,EAASuG,KAAOkiJ,EAAwBliJ,KACnEkiJ,EAA0B,MAG9BzxK,KAAKuyB,SAAS,CAACg/I,mBAAoBE,EAA0B,KAAOzoJ,GAAU,CACjF,CAGDvpB,MAAAA,GACI,OACIC,EAAAA,GAAAA,KAAC+vK,GAAgC,CAAA1vK,SAG5BC,KAAKlC,MAAM4zK,cAAcC,kBAAkBphK,KAAIyY,IAAQ,IAAA4oJ,EAAA,OAAKlyK,EAAAA,GAAAA,KAAC2xK,GAAuB,CACCroJ,SAAUA,EACVkoJ,iBAAkBlxK,KAAKwxK,kBACvBrpH,QAAqC,QAA7BypH,EAAA5xK,KAAK0mB,MAAM6qJ,0BAAkB,IAAAK,OAAA,EAA7BA,EAA+BriJ,MAAOvG,EAASuG,IAHlDvG,EAASvgB,MAG8C,KAG9J,IC5CKopK,IAAyBrzK,EAAAA,GAAAA,GAAU,0BCAnCszK,IAA+BtzK,EAAAA,GAAAA,GAAU,gCCAzCuzK,IAA+BvzK,EAAAA,GAAAA,GAAU,gC,UCE/C,MAAMwzK,IAA+Bv0K,EAAAA,GAAAA,IAAOiJ,GAAAA,EAAPjJ,CAAcE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iCAInDq0K,IAAiCx0K,EAAAA,GAAAA,IAAOu0K,GAAPv0K,CAAoCqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,+CAI/Ds0K,IAAoCjgK,EAAAA,GAAAA,GAAc+/J,IAC1D9gH,MAAM+gH,IACNlpG,SAASkpG,IACT7/J,QCbQ+/J,IAAc3zK,EAAAA,GAAAA,GAAU,e,OCE9B,MAAM4zK,GAA0B30K,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gNAC3Cq2D,GAAAA,IAGkBt1D,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAK2S,EAAAA,GAAAA,GAAUpT,EAAM6J,OAAOgD,qBAAsB,IAAK,ICe1EsnK,IAA+B9yK,EAAAA,GAAAA,IACxC,cAA2CC,GAAAA,EAAkDuT,WAAAA,GAAA,SAAA9S,WAAA,KAEjFqyK,SAAW5yJ,gBACT1f,KAAKlC,MAAM4zK,cAAc9sB,sBACxB5kJ,KAAKwL,SAASmyF,QAAQj0B,MAAM6oG,MAAM,EAC5C,KAEOC,UAAY,KAChBxyK,KAAKlC,MAAM4zK,cAAce,cAAc,EAC1C,KAEOC,YAAchzJ,gBACZ1f,KAAKlC,MAAM4zK,cAActsB,cAAc,CAChD,CAEDrpI,iBAAAA,GACI3D,MAAM2D,oBACN/b,KAAKlC,MAAM4zK,cAAciB,aAC7B,CAGAlzK,MAAAA,GACI,MAAM8zB,EAAYvzB,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM8nB,UACnDo/I,EAAmC5yK,KAAKlC,MAAM4zK,cAAcruB,kCAC5DwvB,EAAkC7yK,KAAKlC,MAAM4zK,cAAcoB,uBAAuB5yK,OAExF,OACIsI,EAAAA,GAAAA,MAACqpK,GAAsB,CAAClyK,WAAWG,EAAAA,GAAAA,IAAQ,uBAAuBC,SAAA,EAC9DyI,EAAAA,GAAAA,MAACupK,GAA4B,CAAAhyK,SAAA,EACzBL,EAAAA,GAAAA,KAACyyK,GAAW,CAAApyK,SACPC,KAAKwL,SAASoK,YAAYC,UAAU,gBAEzCnW,EAAAA,GAAAA,KAAA,OAAK2H,QAASrH,KAAKwyK,UAAW7yK,WAAWG,EAAAA,GAAAA,IAAQ,sCAAuCgJ,MAAO,CAACiqK,OAAQ,WAAWhzK,UAC/GL,EAAAA,GAAAA,KAAC6zB,EAAS,UAGlB7zB,EAAAA,GAAAA,KAAC0yK,GAAuB,CAAAryK,UACpBL,EAAAA,GAAAA,KAAC4xK,GAA6B,CAACI,cAAe1xK,KAAKlC,MAAM4zK,mBAE7DlpK,EAAAA,GAAAA,MAACspK,GAA4B,CAAA/xK,SAAA,EACzBL,EAAAA,GAAAA,KAACwyK,GAAiC,CAAClrK,OAAO,YAAYK,QAASrH,KAAK0yK,YAAa/yK,WAAWG,EAAAA,GAAAA,IAAQ,2BAA2BC,SAC1HC,KAAKwL,SAASoK,YAAYC,UAAU,gBAGzCnW,EAAAA,GAAAA,KAACsyK,GAA4B,CAAChrK,OAAO,UAAUK,QAASrH,KAAKsyK,SAAU3yK,WAAWG,EAAAA,GAAAA,IAAQ,2BAA2BC,SAChHC,KAAKwL,SAASoK,YAAYC,UAAU,UAAYg9J,EAAyB,EAAC,KAAAjzK,OAAQgzK,EAAwB,KAAM,WAMrI,ICnED,MAAMI,GAETjgK,WAAAA,CAA6BvH,EACAkmK,GAA+C,KAD/ClmK,SAAAA,EAAiC,KACjCkmK,cAAAA,EAA4C,KAIhEniJ,QAAE,OACF0jJ,aAAuB,EAAM,KAC7BC,iBAAkC,KAAK,KAChDC,qBAA+B,EAAM,KAC5B1qK,MAAgB,GAAG,KAC5B2qK,kBAA4B,EARxBpzK,KAAKuvB,GAAKvvB,KAAKwL,SAASu1C,MAAMC,SAClC,CASAqyH,OAAAA,GACA,CAEAC,gBAAAA,GACA,CAEA7zK,MAAAA,GACI,OACIC,EAAAA,GAAAA,KAAC2yK,GAA4B,CAACX,cAAe1xK,KAAK0xK,eAE1D,E,gBC1BG,IAAM6B,IAAqB17J,GAgB7BC,EAAAA,GAAWxK,IAAGyK,GA+BdE,EAAAA,GAAOC,MAAKpF,GA/CV,MACHC,WAAAA,CAA+BygK,EACAC,GAAkD,KADlDD,gBAAAA,EAAiC,KACjCC,eAAAA,GAA+Cl7J,EAAAA,EAAAA,GAAA,WAAAC,GAAA,WA2DtEk7J,YAAiD,MA1DrD16J,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK2zK,IAAMH,EAAgBvE,SAC/B,CAEA,MAAI1/I,GACA,OAAOvvB,KAAKwzK,gBAAgBjkJ,EAChC,CAEA,QAAIztB,GACA,OAAO9B,KAAKwzK,gBAAgB1xK,IAChC,CAIA,MAAIq7H,GACA,OAAOn9H,KAAK2zK,GAChB,CAEA,MAAIx2C,CAAGrzH,GACH9J,KAAK4zK,OAAO9pK,EAChB,CAEU+pK,+BAAAA,GACN7zK,KAAKyzK,eAAe7C,eAAehlH,SAAQm+G,IACpCA,EAAEx6I,KAAOvvB,KAAKuvB,KACbw6I,EAAE5sC,IAAK,EACX,GAER,CAEUy2C,MAAAA,CAAO9pK,GAEVA,GAAS9J,KAAKyzK,iBAAmBzzK,KAAKyzK,eAAelQ,eACrDvjK,KAAK6zK,mCAGRjqJ,EAAAA,EAAAA,KAAY,IAAM5pB,KAAK2zK,IAAM7pK,GACjC,CAEA,YAAIvJ,GACA,OAAO,CACX,CAGA4vK,YAAAA,GACInwK,KAAKm9H,IAAMn9H,KAAKm9H,EACpB,CAEA,qBAAIzzF,GACA,OAAQ1pC,KAAKwzK,gBAAgBM,aACjC,CAEA,cAAIrD,GACA,OAAOzwK,KAAKwzK,gBAAgB/C,UAChC,CAIA,cAAIzN,GAIA,OAHIhjK,KAAK0zK,cACL1zK,KAAK0zK,YAAc1zK,KAAKwzK,gBAAgBxQ,WAAWzyJ,KAAI4yJ,GAAM,IAAI4Q,GAAyB/zK,KAAMmjK,MAE7FnjK,KAAK0zK,WAChB,GACHl7J,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,OAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAnD4B,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,gBAAAtJ,GAAAsJ,WAAAtJ,IAsD3B,MAAMihK,WAAiCR,GAC1CxgK,WAAAA,CAA6BihK,EACjBR,GACRp7J,MAAMo7J,GAAgB,KAFGQ,OAAAA,CAG7B,CAEA,MAAI72C,GACA,OAAOn9H,KAAK2zK,KAAO3zK,KAAKg0K,OAAO72C,EACnC,CAEA,MAAIA,CAAGrzH,GACH9J,KAAK4zK,OAAO9pK,EAChB,CAEA,YAAIvJ,GACA,OAAQP,KAAKg0K,OAAO72C,EACxB,E,OCrFG,IAAM82C,IAA8BnhK,GAApC,MACHC,WAAAA,CAA6BmhK,GAAqD,KAArDA,wBAAAA,EAAkD,KAM9DC,cAAQ,GALrBn7J,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKm0K,SAAWD,EAAwBvR,iBAAiBpyJ,KAAIw5J,GAAK,IAAIwJ,GAAsBxJ,EAAG/pK,OACnG,CAGA,kBACI4wK,GACA,OAAO5wK,KAAKm0K,SAAS10J,QAAOsqJ,GAAKA,EAAErgI,mBACvC,CAEA,MAAIna,GACA,OAAOvvB,KAAKk0K,wBAAwB3kJ,EACxC,CAEA,SAAI9mB,GACA,OAAOzI,KAAKk0K,wBAAwBzrK,KACxC,CAEAqqK,oBAAAA,GACI,OAAO9yK,KAAKo0K,wBAAwB7jK,KAAIw5J,GAAKA,EAAEx6I,IACnD,CAEA,cAAIkhJ,GACA,OAAOzwK,KAAKk0K,wBAAwBzD,UACxC,CAEA,iBAAIlN,GACA,OAAOvjK,KAAKk0K,wBAAwB3Q,aACxC,CAEQ6Q,qBAAAA,GACJ,MAAM1+G,EAAkC,GAExC,IAAI,IAAIj2C,KAAUzf,KAAKm0K,SACnB,GAAG10J,EAAO09G,GAAI,CACVznE,EAAO/6C,KAAK8E,GACZ,IAAI,IAAIyjJ,KAAazjJ,EAAOujJ,WACrBE,EAAU/lC,IACTznE,EAAO/6C,KAAKuoJ,EAGxB,CAEJ,OAAOxtG,CACX,CAGA07G,wBAAAA,GACI,OAAOpxK,KAAKo0K,wBAAwB30J,QAAOsqJ,GAAKA,EAAErgI,mBACtD,IAEHvtB,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBA9CIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,kBAAAtJ,GAAAsJ,WAAAtJ,ICHN,MAAMuhK,GACTthK,WAAAA,CAA6BvH,GAAoC,KAApCA,SAAAA,CAE7B,CAEQ8oK,YAAAA,GACJ,IAAI19I,EAAW52B,KAAKwL,SAASorB,SAASE,WAAWC,SAAS53B,WAK1D,MAJgB,MAAby3B,GAAoBA,EAASw3D,SAAS,OACrCx3D,EAAWA,EAASpxB,UAAU,EAAGoxB,EAAS12B,OAAS,IAGhD02B,CACX,CAEQ29I,UAAAA,CAAWC,GACfx0K,KAAKwL,SAASqd,UAAUkd,uBAAuB,mBAAoByuI,EAAgBv8J,OAAQu8J,EAAgBl6I,MAAOk6I,EAAgBC,WACtI,CAEAC,iBAAAA,GACI10K,KAAKu0K,WAAW,CACZt8J,OAAQ,OACRqiB,MAAOt6B,KAAKs0K,gBAEpB,CAEAK,kBAAAA,GACI30K,KAAKu0K,WAAW,CACZt8J,OAAQ,QACRqiB,MAAOt6B,KAAKs0K,gBAEpB,CAEAM,kBAAAA,GACI50K,KAAKu0K,WAAW,CACZt8J,OAAQ,QACRqiB,MAAOt6B,KAAKs0K,gBAEpB,CAEAO,4BAAAA,CAA6B9lJ,GACzB/uB,KAAKu0K,WAAW,CACZt8J,OAAQ,WACRqiB,MAAOt6B,KAAKs0K,eACZG,WAAYhzJ,KAAKC,UAAUqN,IAEnC,CAEA+lJ,0BAAAA,CAA2B/lJ,GACvB/uB,KAAKu0K,WAAW,CACZt8J,OAAQ,QACRqiB,MAAOt6B,KAAKs0K,eACZG,WAAYhzJ,KAAKC,UAAUqN,IAEnC,CAEAgmJ,kBAAAA,CAAmBC,GACfh1K,KAAKu0K,WAAW,CACZt8J,OAAQ,SACRqiB,MAAO06I,GAEf,EC5DG,MAAMC,GACTliK,WAAAA,CAA6BmiK,EACA1pK,GAAoC,KADpC0pK,SAAAA,EAAiD,KACjD1pK,SAAAA,EAAiC,KAMrD2pK,uBAAiB,OAMlBC,iBAAW,EAVfp1K,KAAKo1K,YAAcp1K,KAAK+uK,kBAAkBx+J,KAAIy/D,GAAK,IAAIikG,GAA+BjkG,KACtFhwE,KAAKm1K,kBAAoB,IAAId,GAAyBr0K,KAAKwL,SAC/D,CAIA,qBAAIujK,GACA,OAAO/uK,KAAKk1K,SAASnG,iBACzB,CAGA,qBAAI4C,GACA,OAAO3xK,KAAKo1K,YAAY31J,QAAOuwD,GAAKA,EAAE4gG,eAAe1wK,OAAS,GAClE,CAEO4yK,oBAAAA,GACH,IAAIp9G,EAAmB,GASvB,OAPA11D,KAAKo1K,YAAYxpH,SAAQokB,IACrBta,EAAS,IACFA,KACAsa,EAAE8iG,uBACR,IAGEp9G,CACX,CAIA2tF,+BAAAA,GACI,OAAOrjJ,KAAKwL,SAASmmD,YAAY0xF,gCAAgCrjJ,KAAK8yK,uBAC1E,CAEAH,WAAAA,GACI3yK,KAAKm1K,kBAAkBT,mBAC3B,CAEA,oCAAcW,CAA+Bp9J,GACzCjY,KAAKk1K,SAASpG,sCACR72J,GACV,CAEA,kBAAM2sI,GACC5kJ,KAAK8yK,uBAAuB3zK,aAAea,KAAKwL,SAASmmD,YAAY+yF,yBAAyBvlJ,kBACvFa,KAAKq1K,gCAA+B31J,gBAChC1f,KAAKwL,SAASmmD,YAAYizF,aAAa5kJ,KAAK8yK,wBAClD9yK,KAAKm1K,kBAAkBL,2BAA2B90K,KAAKk1K,SAASI,oCAAoC,GAIhH,CAEA,kBAAMC,CAAa91J,GACfA,EAAO09G,IAAK,QACNn9H,KAAKq1K,gCAA+B31J,gBAChC1f,KAAKwL,SAASmmD,YAAYizF,aAAa5kJ,KAAK8yK,wBAClD9yK,KAAKm1K,kBAAkBJ,mBAAmBt1J,EAAO8P,GAAG,GAE5D,CAEA,kBAAMkjJ,UACKzyK,KAAKwL,SAASmyF,QAAQj0B,MAAM6oG,OACnCvyK,KAAKm1K,kBAAkBR,oBAC3B,CAEA,kBAAMvvB,GACCplJ,KAAKwL,SAASmmD,YAAYwqB,kBACnBn8E,KAAKq1K,gCAA+B31J,gBAChC1f,KAAKwL,SAASmmD,YAAYyzF,eAChCplJ,KAAKm1K,kBAAkBP,oBAAoB,WAG5C50K,KAAKwL,SAASmyF,QAAQj0B,MAAM6oG,MAGvC,EC3FG,MAAMiD,IAAyBh3K,EAAAA,GAAAA,GAAU,0B,gBCMzC,MAAMi3K,IAA+Bl2K,EAAAA,GAAAA,IAAS,cAA2CC,GAAAA,EAAmBuT,WAAAA,GAAA,SAAA9S,WAAA,KAEzGy1K,WAAa,KACnB11K,KAAKwL,SAASmmD,YAAYyxF,mBAAmB,CAC7C,CAEF3jJ,MAAAA,GACE,IAAIO,KAAKwL,SAASmmD,YAAYsxF,qBAC5B,OAAO,KAGT,GAAGjjJ,KAAKwL,SAAS6D,OAAOsmK,gCACtB,OAAO,KAGT,MAAMjoE,EAAa1tG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM4pG,WAE1D,OACA51G,EAAAA,GAAAA,KAAC4sC,GAAAA,EAAI,CAACrgB,IAAKupJ,GAAwB71K,UAAWsX,KAAW,yBAA0B,CAAC,CAACqlD,GAAAA,IAAUt8D,KAAKwL,SAASmmD,YAAYwqB,aAAc90E,QAASrH,KAAK01K,WAAW31K,UAC9JL,EAAAA,GAAAA,KAACguG,EAAU,CAACjnG,KAAM,IAAK9G,UAAW,oBAGtC,I,sBC3BK,MAAMi2K,GAAwBn4K,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2JAKzCe,IAAA,IAAC,4BAACk3K,GAA4Bl3K,EAAA,OAAKk3K,GAA8Bh1K,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,8BAA2B,EAAE,IAEjGE,GAASA,EAAMI,MAAM6C,KAAKC,QAAQkvE,QAClCy1B,GAAAA,I,+BCPC,MAAMmwE,GAA4Br4K,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4MAI5B0T,EAAAA,GAAAA,GAAU20F,GAAAA,EAAWgB,QAAS,K,OCN/C,MAAM8uE,GAAoBt4K,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4hBAe9Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,I,mBCd7C,MAAM43K,IAAwBv4K,EAAAA,GAAAA,IAAOsP,GAAAA,EAAPtP,CAAuBE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+CCD/Cq4K,IAAuBz3K,EAAAA,GAAAA,GAAU,wB,OCAvC,MAAM03K,GAA4Bz4K,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wF,OCuB5C,MAAMu4K,IAAuD52K,EAAAA,GAAAA,MAAQuT,GACxE,cAAmEtT,GAAAA,EAAgEuT,WAAAA,GAAA,SAAA9S,WAAA,KAMvHm2K,gBAAkB12J,gBAChB1f,KAAKlC,MAAM4zK,cAAc6D,aAAa91J,EAAO,CACtD,CAEO42J,uBAAAA,CAAwB52J,GAC5B,OACIjX,EAAAA,GAAAA,MAAC0tK,GAAyB,CAAiBv2K,WAAWG,EAAAA,GAAAA,IAAQ,mCAAmCC,SAAA,EAC7FL,EAAAA,GAAAA,KAAClC,GAAAA,EAA2B,KAC5BgL,EAAAA,GAAAA,MAACstK,GAAyB,CAAA/1K,SAAA,EACtBL,EAAAA,GAAAA,KAACu2K,GAAoB,CAAAl2K,SAChB0f,EAAO3d,QAEZpC,EAAAA,GAAAA,KAAClC,GAAAA,EAA2B,KAC5BkC,EAAAA,GAAAA,KAACs2K,GAAqB,CAAC3uK,QAASA,IAAMrH,KAAKo2K,gBAAgB32J,GAAS9f,WAAWG,EAAAA,GAAAA,IAAQ,6CAP/D2f,EAAO8P,GAa/C,CAEQ+mJ,kBAAAA,GACJ,MAAM/Q,EAA6C,GASnD,OARAvlK,KAAKlC,MAAM4zK,cAAcC,kBAAkB/lH,SAAQ5iC,IAC/CA,EAASooJ,2BAA2BxlH,SAAQm+G,IACrCA,EAAE5sC,IACDooC,EAAQ5qJ,KAAKovJ,EACjB,GAEF,IAECxE,CACX,CAEQgR,qBAAAA,GAEJ,OACI72K,EAAAA,GAAAA,KAACq2K,GAAiB,CAAAh2K,SACbC,KAAKs2K,qBAAqB/lK,KAAIkP,GAAUzf,KAAKq2K,wBAAwB52J,MAGlF,CAEAhgB,MAAAA,GACI,OACA+I,EAAAA,GAAAA,MAACotK,GAAqB,CAACC,4BAA6B71K,KAAKlC,MAAM+3K,4BAA6Bl2K,WAAWG,EAAAA,GAAAA,IAAQ,yCAAyCC,SAAA,EACpJL,EAAAA,GAAAA,KAAClC,GAAAA,EAA2B,CAACS,WAAY,IACxC+B,KAAKlC,MAAM04K,oBAAqB92K,EAAAA,GAAAA,KAAC+1K,GAA4B,IAE7Dz1K,KAAKu2K,0BAId,IA1DOz1J,aAAyE,CAC5E01J,mBAAkB,EAClBX,6BAA6B,GAChC/iK,K,OClBF,IAAe2jK,IAA4B3jK,GAA3C,MACHC,WAAAA,CAA+Bu8J,EACA9jK,GAAoC,KADpC8jK,mBAAAA,EAA6C,KAC7C9jK,SAAAA,GAC3BwN,EAAAA,EAAAA,IAAehZ,KACnB,CAMA,MAAIuvB,GACA,OAAOvvB,KAAKsvK,mBAAmB//I,EACnC,CAEA,SAAI9mB,GACA,OAAOzI,KAAKsvK,mBAAmB7mK,KACnC,CAEA,iBAAI86J,GACA,OAAOvjK,KAAKsvK,mBAAmB/L,aACnC,CAEA,mBACYmT,GACR,OAAO12K,KAAK2iK,iBAAiBljJ,QAAOsqJ,GAAKA,EAAEkF,WAC/C,CAEA,sBACY0H,GACR,OAAO32K,KAAK2iK,iBAAiBsH,YAAWF,GAAKA,EAAE/G,WAAWvjJ,QAAO0jJ,GAAMA,EAAG8L,aAC9E,CAEAhN,WAAAA,CAAYhvJ,GAAiF,IAA7D2jK,EAA4B32K,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KACvDslK,EAAUvlK,KAAK02K,gBACf1T,EAAahjK,KAAK22K,mBAQtB,OALGC,IACCrR,EAAUvlK,KAAK2iK,iBAAiBljJ,QAAOsqJ,GAAK6M,EAAmB15J,SAAS6sJ,EAAEx6I,MAC1EyzI,EAAahjK,KAAK2iK,iBAAiBsH,YAAWF,GAAKA,EAAE/G,WAAWvjJ,QAAO0jJ,GAAMyT,EAAmB15J,SAASimJ,EAAG5zI,SAG1F,IAAnBg2I,EAAQrlK,QAAsC,IAAtB8iK,EAAW9iK,OAC3B4hK,GAAsBI,cAG1BliK,KAAKsvK,mBAAmB1qB,aAAa3xI,EACxCsyJ,EAAQh1J,KAAIsmK,GAAeA,EAAYtH,mBACvCvM,EAAWzyJ,KAAI2yJ,GAAaA,EAAUqM,mBAC9C,CAEAuH,4BAAAA,CAA6B7jK,GACzB,OAAOjT,KAAK2iK,iBAAiByC,MAAK2E,GAAKA,EAAE9H,YAAYhvJ,KAAc6uJ,GAAsBK,aAC7F,CAEA,kCAAI4U,GACA,MAAO,IACA/2K,KAAK02K,mBACL12K,KAAK22K,mBAEhB,IAEHx6J,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAxCIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,mBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAKRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,sBAAAtJ,GAAAsJ,WAAAtJ,IChCN,MAAekkK,GAClBjkK,WAAAA,CAA4Bw8J,EACG/jK,GAAoC,KADvC+jK,iBAAAA,EAAuC,KACpC/jK,SAAAA,EAAiC,KAKvDsoK,eAAgB,CAJzB,CAOA,MAAIvkJ,GACA,OAAOvvB,KAAKuvK,iBAAiBhgJ,EACjC,CAEA,QAAIztB,GACA,OAAO9B,KAAKuvK,iBAAiBztK,IACjC,CAGA,aAAImtK,GACA,OAAOjvK,KAAKwL,SAASmmD,YAAY2zF,gBAAgBtlJ,KAAKuvK,iBAAiBhgJ,GAC3E,CAEA0yI,WAAAA,CAAYhvJ,GACR,OAAOjT,KAAKuvK,iBAAiBtN,YAAYhvJ,EAC7C,CAEA,cAAIw9J,GACA,OAAO,IACX,E,OC3BG,IAAMwG,IAAsBnkK,GAA5B,MAAMmkK,UAA+BD,GACxCjkK,WAAAA,CAAYw8J,EACA/jK,GACR4M,MAAMm3J,EAAkB/jK,IAExBwN,EAAAA,EAAAA,IAAehZ,KACnB,CAEA,SACImb,GAEA,OAD0Bnb,KAAKwL,SAAS6D,OAAOm1I,kBAAkB6X,0BACvC58I,QAAOxM,GAAYjT,KAAKuvK,iBAAiBtN,YAAYhvJ,KAAc6uJ,GAAsBK,aACvH,CAEA,cAAIsO,GACA,OAAOzwK,KAAKmb,MAAMjb,MACtB,CAEA,cACI8iK,GACA,OAAOhjK,KAAKuvK,iBAAiBvM,WAAWzyJ,KAAI4yJ,GAAM,IAAI8T,EAAuB9T,EAAInjK,KAAKwL,YAC9CiU,QAAOsqJ,GAAKA,EAAE0G,WAAa,IAC3Bj/B,MAAK,CAAC0lC,EAAIC,IAAOA,EAAG1G,WAAayG,EAAGzG,YAChF,IACHt0J,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,SAhBIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,SAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,cAURo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,cAAAtJ,GAAAsJ,WAAAtJ,I,OClBN,IAAMskK,IAA+BtkK,GAArC,cAA8C2jK,GACjD1jK,WAAAA,CAAYu8J,EACA9jK,GACR4M,MAAMk3J,EAAoB9jK,IAE1BwN,EAAAA,EAAAA,IAAehZ,KACnB,CAEUq3K,sBAAAA,CAAuB9H,GAC7B,OAAO,IAAI0H,GAAuB1H,EAAkBvvK,KAAKwL,SAC7D,CAKA,oBACIm3J,GACA,OAAG3iK,KAAKsvK,mBAAmBzM,sBAChB7iK,KAAKs3K,uBAELt3K,KAAKs3K,uBAAuB9lC,MAAK,CAAC0lC,EAAIC,IAAOA,EAAG1G,WAAayG,EAAGzG,YAE/E,CAEU6G,oBAAAA,GACN,OAAOt3K,KAAKsvK,mBAAmB3M,iBAC1BpyJ,KAAIw5J,GAAM/pK,KAAKq3K,uBAAuBtN,KACtCtqJ,QAAOsqJ,GAAKA,EAAE0G,WAAa,GACpC,CAEA,cACIA,GACA,MAAM8G,EAAkB,IAAIpvB,IAI5B,OAHAnoJ,KAAK2iK,iBAAiB/2G,SAAQm+G,IAC1BA,EAAE5uJ,MAAMywC,SAAQujH,GAAQoI,EAAgBxpG,IAAIohG,EAAKp6J,WAAU,IAExDwiK,EAAgB9wK,IAC3B,IACH0V,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAvBIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,oBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,cAeRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,cAAAtJ,GAAAsJ,WAAAtJ,ICbN,MAAM0kK,WAAoClJ,GAE7Cv7J,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAIHisK,wBAAkB,EAH/Bz3K,KAAKy3K,mBAAqB,IAAIpD,GAAyBr0K,KAAKwL,SAChE,CAIUwjK,wBAAAA,GAAyD,IAADl5H,EAAA+iB,EAAAC,EAC9D,MAAMvpD,EAAmD,QAA1CumC,EAAG91C,KAAKwL,SAASyqC,QAAQC,aAAahsB,YAAI,IAAA4rB,OAAA,EAAvCA,EAAyCK,UAC3D,IAAK5mC,EACD,MAAO,GAGX,MAAMmoK,EAA+D,QAArD7+G,EAAG74D,KAAKwL,SAASye,cAAcC,KAAK7a,OAAOE,UAAU,IAAAspD,GAAiB,QAAjBC,EAAlDD,EAAoD2sG,uBAAe,IAAA1sG,OAAjB,EAAlDA,EAAqE4+G,WACxF,IAAK3yK,EAAAA,MAAMgrE,QAAQ2nG,GACf,MAAO,GAGX,MAAMnS,EAAuC,GAY7C,OAXAmS,EAAW9rH,SAAQ5iC,IACf,GAAY,OAARA,QAAQ,IAARA,GAAAA,EAAUuG,GAAI,CACd,MAAMooJ,EAAoB33K,KAAKuuK,SAASJ,yBAAyBnlJ,EAASuG,IACvEooJ,EACCpS,EAAQ5qJ,KAAK3a,KAAK43K,gCAAgCD,IAElD33K,KAAKwL,SAAS2L,OAAOxI,MAAM,iDAAD/O,OAAkDopB,EAASuG,IAE7F,KAGGg2I,CACX,CAEUqS,+BAAAA,CAAgCD,GACtC,OAAO,IAAIP,GAAgCO,EAAmB33K,KAAKwL,SACvE,CAEU0jK,gBAAAA,GACN,OAAOzM,MAAOziK,KAAK+uK,kBACvB,CAEQ8I,oBAAAA,GACJ,OAAO,IAAI5C,GAA8Bj1K,KAAMA,KAAKwL,SACxD,CAEA8pK,iCAAAA,GACI,MAAMlS,EAA2C,CAAC,EAClDpjK,KAAK+uK,kBAAkBnjH,SAAQ5iC,IAC3B,MAAM8uJ,EAA2B9uJ,EAAS+tJ,+BACvCe,EAAyB53K,OAAS,IACjCkjK,EAAep6I,EAASuG,IAAMuoJ,EAAyBvnK,KAAIw5J,GAAKA,EAAEx6I,KACtE,IAGJ,MAAO,CACHkhJ,WAFezwK,KAAKwL,SAAS6D,OAAOm1I,kBAAkB+X,mBAGtD6G,eAAgBA,EAExB,CAEUwL,6BAAAA,GAEN5uK,KAAKy3K,mBAAmB5C,6BAA6B70K,KAAKs1K,oCAE9D,CAEArjH,4BAAAA,GACI,OAAGjyD,KAAKwL,SAASrN,WAAWC,WAChBsB,EAAAA,GAAAA,KAAC+1K,GAA4B,IAE9B,IAEf,CAEA7jH,sBAAAA,GACI,OAAG5xD,KAAKwL,SAASrN,WAAWC,UACjB,CACHw4B,SAAUi7B,GAAAA,EAAiCM,gBAC3CJ,cAAeryD,EAAAA,GAAAA,KAACy2K,GAAoD,CAACK,mBAAmB,EAAO9E,cAAe1xK,KAAK63K,0BAGhH,CACHjhJ,SAAUi7B,GAAAA,EAAiCC,iBAC3CC,cAAeryD,EAAAA,GAAAA,KAACy2K,GAAoD,CAACzE,cAAe1xK,KAAK63K,yBAGrG,CAEA,uBAAMz0B,UACKpjJ,KAAKwL,SAASmyF,QAAQj0B,MAAM/uD,KAAK,IAAIq4J,GAAkChzK,KAAKwL,SAAUxL,KAAK63K,wBACtG,CAEAx0B,+BAAAA,CAAgCC,GAC5B,IAAIy0B,EAAyB/3K,KAAKg4K,+BAA+B10B,GACjE,OAAO7mI,OAAOspC,KAAKgyH,GAAwB73K,MAC/C,CAEQ83K,8BAAAA,CAA+B10B,GACnC,MAAM20B,EAAoBj4K,KAAKwL,SAAS6D,OAAOm1I,kBAAkB6X,0BAEjE,IAAIr8J,KAAK6uK,eAAezJ,MAAK2E,GAAKzmB,EAAUpmI,SAAS6sJ,EAAEx6I,MACnD,OAAO0oJ,EAGX,MAAMtzC,EAAY3kI,KAAKkvK,mBAEjBx5G,EAAmB,CAAC,EAE1B,IAAI,IAAIy5G,KAAQ1yJ,OAAOonC,OAAOo0H,GAAoB,CAC9C,MAAM7I,EAAezqC,EAAUs9B,YAAYkN,EAAM7rB,GAC9Cwe,GAAsBK,cAAgBiN,IACrC15G,EAAOy5G,EAAKp6J,UAAYo6J,EAEhC,CAEA,OAAOz5G,CACX,EC7HG,MAAMwiH,WAA2B7d,GAEpCtnJ,WAAAA,CAAYvH,EAAmC2sK,GAC3C//J,MAAM+nE,GAAAA,GAAiB30E,EAAU2sK,IAEjC1oK,EAAAA,EAAAA,KACI,IAAMzP,KAAKwL,SAASyqC,QAAQC,eAC3BA,IAAkB,IAADkiI,GACuB,QAAjCA,EAAAliI,EAAamiI,gBAAgBnuJ,YAAI,IAAAkuJ,OAAA,EAAjCA,EAAmCjiI,aAAc+pC,GAAAA,IACjDlgF,KAAKwL,SAASi3F,SAAS61E,oBAC3B,GACD,CACCp8J,iBAAiB,GAG7B,CAEA,oBAAI2gJ,GACA,OAAO,EACX,CAEA,wBAAIpV,GACA,OAAO,EACX,CAEA,YAAIjwE,GACA,MAAO,EACX,CAEA+gG,WAAAA,GACI,OAAQ74K,EAAAA,GAAAA,KAACuhK,GAAiB,GAC9B,CAEUjG,sBAAAA,GAEN,MAAOwd,EAAuBx4K,KAAKwL,SAASitK,oBAAoB//F,UAChE,GAAwB,OAApB8/F,QAAoB,IAApBA,IAAAA,EAAsBE,UAA+B,OAApBF,QAAoB,IAApBA,OAAoB,EAApBA,EAAsBE,WAAY7W,GAAqBlsE,YAI5F,OAAO31F,KAAKwL,SAASuP,6BAA6B49J,SACtD,CAEUjd,gBAAAA,CAAiBJ,GACvB,OAAGt7J,KAAK+6J,oCACGO,EAGJljJ,MAAMsjJ,iBAAiBJ,EAClC,CAEUH,yBAAAA,GACN,OAAOn7J,KAAKwL,SAASye,cAAcC,KAAK+5G,SAASC,YAAc,EACnE,CACUo4B,uBAAAA,GACN,MAAO,EACX,CAEU7B,2BAAAA,GACN,MAAM94I,EAAe3hB,KAAKwL,SAASye,cAAcC,KAAK+5G,SAAShqH,kBAC/D,OAAI0H,GAAgB3hB,KAAKwL,SAAS+9B,UAAUtuB,UACjC,KAGJ,CACHwM,SAAU9F,EAAai3J,aAAe,EACtCv+J,WAAYsH,EAAatH,WACzBC,YAAaqH,EAAarH,YAC1BC,yBAA0BoH,EAAapH,yBAE/C,CAEUmgJ,2BAAAA,GACN,MAAMme,EAAyB74K,KAAKwL,SAASye,cAAcC,KAAK+5G,SAAS60C,kBACzE,OAAID,EAIG,CACHpxJ,SAAUoxJ,EAAuBpxJ,SACjCs8H,UAAW80B,EAAuB90B,WAL3B,IAOf,CAEAg1B,sBAAAA,CAAuBC,GACnB,OAAOA,CACX,CAEA,6BAAI3c,GACA,MAAO,EACX,CAEA,2BAAI4c,GACA,MAAO,CAAC,CACZ,CAEAn0B,yBAAAA,GACI,OAAO,IAAI0yB,GAA4Bx3K,KAAKwL,SAChD,E,sDCjHG,MCFM0tK,IDEyBz7K,EAAAA,GAAAA,IAAOqB,GAAAA,EAAPrB,CAAaE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qKAOtCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW4tC,UAAU,I,OER9C,MCAMotI,GDAuB17K,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6HAEjCE,GAASA,EAAMI,MAAM6J,OAAO4B,Y,OEHlC,MCAMyvK,GDAiC37K,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sIAElDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQ8J,OAAO,IAChChN,GAASA,EAAMI,MAAM6J,OAAOu1B,iB,UEFzC,MAAM+7I,IAAqBlxJ,EAAAA,GAAAA,IAASxqB,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,kPCDvB07K,GDgB0B77K,GAAAA,GAAOiB,IAAGoC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,yQAQzC0yD,GAAAA,GAEa+oH,IAGR16K,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW4tC,UAAU,IEPxCwtI,IAA4Bh6K,EAAAA,GAAAA,IACrC,cAAwC4yB,GAAAA,EAAwFpf,WAAAA,GAAA,SAAA9S,WAAA,KAC5HymB,MAAwC,CACpC8yJ,qBAAqB,EACxB,CAED/5K,MAAAA,GAGI,IAAIgJ,EAAQzI,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKlC,MAAM27K,UAAUhxK,OAErE,OACID,EAAAA,GAAAA,MAAC8wK,GAAgB,CAAC35K,UAAWsX,KAAW,wBAAyB,CAAC,CAACq5C,GAAAA,IAAStwD,KAAKlC,MAAM2gB,WAAW1e,SAAA,EAC9FL,EAAAA,GAAAA,KAAC21D,GAAAA,EAA6B,CAC1B3zD,MAAO,IACPL,OAAQ,IACRoqD,UAAWzrD,KAAK0mB,MAAM8yJ,oBACtBpkH,+BAA6B,EAAAr1D,UAE7BL,EAAAA,GAAAA,KAACw5K,GAAe,CACZ9kK,IAAKpU,KAAKlC,MAAM27K,UAAUC,aAC1BvlK,IAAK1L,EACL/G,MAAO,IACPL,OAAQ,IACRoV,MAAI,EACJowD,YAAaA,KACT7mE,KAAKuyB,SAAS,CAACinJ,qBAAqB,GAAM,EAE9C5zG,UAAWA,KACP5lE,KAAKuyB,SAAS,CAACinJ,qBAAqB,GAAO,OAIvD95K,EAAAA,GAAAA,KAACy5K,GAAa,CAAAp5K,SACT0I,KAEL/I,EAAAA,GAAAA,KAAC05K,GAAuB,CAAAr5K,SACnBC,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKlC,MAAM27K,UAAUE,iBAI1E,I,wCCvDD,MAAMC,IAA8Br6K,EAAAA,GAAAA,IACvC,cAA0CC,GAAAA,EAGtCC,MAAAA,GACI,OACIC,EAAAA,GAAAA,KAACutD,GAAAA,EAAe,CAAAltD,SACXC,KAAKlC,MAAMkY,WAGxB,ICFFnD,IAAyDtT,EAAAA,GAAAA,KAAUzB,IASrE,IAAImV,EAAWnV,EAAMmV,SACrB,OACIzK,EAAAA,GAAAA,MAAC8wK,GAAgB,CAAC35K,UAAWsX,KAAW,uBAAwBhE,EAAS0lE,sBAAuB,CAAC,CAACroB,GAAAA,IAASxyD,EAAM2gB,WAC/FnX,aAXAuyK,KAClB/7K,EAAMo6E,qBAAqB4hG,uBAAuB,EAWhCvyK,aARAwyK,KAClBj8K,EAAMo6E,qBAAqB8hG,yBAAyB,EAONj6K,SAAA,EAC1CL,EAAAA,GAAAA,KAACwwD,GAAAA,EAA6B,CAACj9C,SAAUA,KACzCvT,EAAAA,GAAAA,KAAC8vD,GAAAA,EAAiC,CAACv8C,SAAUA,EAAUo8C,oBAAoB3vD,EAAAA,GAAAA,KAACk6K,GAA2B,CAAC5jK,UAAW/C,EAASxK,YAC7G,IAIdwxK,IAA2B5iK,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,yBClB/DA,IAAwDtT,EAAAA,GAAAA,KAAUzB,IAAW,IAADo8K,EAAAC,EAC9E,MAAM3uK,GAAWqD,EAAAA,GAAAA,KAejB,IAdAlB,EAAAA,GAAAA,YAAU,KACFnC,EAASqI,OAAOC,UAChBhW,EAAMo6E,qBAAqBkiG,oBAGxB,KACC5uK,EAASqI,OAAOC,UAChBhW,EAAMo6E,qBAAqBmiG,oBAC/B,IAGL,CAACv8K,EAAMo6E,qBAAsB1sE,EAASqI,OAAOC,WAG5CtI,EAASqI,OAAOC,SAChB,OAAO,KAGX,IAAIwmK,EAAyD,QAA9CJ,EAAG1uK,EAASye,cAAcC,KAAK+kC,uBAAe,IAAAirH,GAAoB,QAApBC,EAA3CD,EAA6C/qH,0BAAkB,IAAAgrH,OAApB,EAA3CA,EAAiEG,YAKnF,OAJGv1K,EAAAA,MAAMkP,kBAAkBqmK,KACvBA,GAAc,GAGdA,EAIAx8K,EAAMo6E,qBAAqBqiG,sBACnB76K,EAAAA,GAAAA,KAACu6K,GAAwB,CAACx7J,SAA6B,QAArB+7J,EAAE18K,EAAMsgB,qBAAa,IAAAo8J,OAAA,EAAnBA,EAAqB/7J,SAAUxL,SAAUnV,EAAMo6E,qBAAqBqiG,wBAExG76K,EAAAA,GAAAA,KAAC65K,GAAyB,CAAC96J,SAA6B,QAArBg8J,EAAE38K,EAAMsgB,qBAAa,IAAAq8J,OAAA,EAAnBA,EAAqBh8J,SAAUg7J,UAAW37K,EAAM27K,YANtF,KAG2C,IAADe,EAE9CC,CAEP,IAISC,IAA6BrjK,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,yB,OCtDhE,MAAM8nK,GAA6Bl9K,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6FAC7CsuB,GAAAA,IACUvtB,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWwS,SAAS,ICMjD,MAAMiqK,WAAgCp7K,GAAAA,EAC3CC,MAAAA,GACE,OAAIO,KAAKlC,MAAM+jB,OAAOpV,SAAWzM,KAAKwL,SAASqI,OAAOkZ,OAAOC,WACpD,MAIPttB,EAAAA,GAAAA,KAACi7K,GAA0B,CAACh7K,UAAW,qBAAqBI,UAC1DL,EAAAA,GAAAA,KAACwiB,GAAAA,EAAkB,CAAC5H,YAAata,KAAKlC,MAAM+jB,OAAOvH,YAC/BD,WAAYra,KAAKlC,MAAM+jB,OAAOxH,WAC9BG,iBAAiB,KAI3C,ECzBK,MAAMqgK,GACC,a,4BCyBP,MAAMC,IAAuBv7K,EAAAA,GAAAA,IAChC,cAAmCC,GAAAA,EAAyCuT,WAAAA,GAAA,SAAA9S,WAAA,KAEhE86K,oBAAc,EAEtB,iBAAY38J,GAIR,OAHKpe,KAAK+6K,iBACN/6K,KAAK+6K,eAAiB/6K,KAAKwL,SAASwvK,qBAAqBC,uBAEtDj7K,KAAK+6K,cAChB,CAEAz1J,oBAAAA,GACIlN,MAAMkN,uBACNtlB,KAAKwL,SAAS4iI,IAAI/qF,KAAKyqB,UAAUyvD,OAAOrxG,GAAAA,IACxClsB,KAAKoe,cAAcC,SACvB,CAEA,UAAYwD,GACR,OAAO7hB,KAAKwL,SAAS6D,OAAO6rK,eAAel7K,KAAKlC,MAAMyR,UAC1D,CAGQkyJ,kBAAAA,GACJ,OACIj5J,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAACshK,GAAoB,CAACb,kBAAmBngK,KAAK6hB,OAAO6/I,eACrDhiK,EAAAA,GAAAA,KAACu3B,GAAAA,EAA+B,MAG5C,CAIAx3B,MAAAA,GAEI,IAAI07K,EAAc,CACd1yK,MAAO,GACPkxK,YAAa,GACbD,aAAc,IAWlB,OARI15K,KAAK6hB,OAAOu5J,cACZD,EAAc,CACV1yK,MAAOzI,KAAK6hB,OAAOu5J,YAAYC,UAC/B1B,YAAa35K,KAAK6hB,OAAOu5J,YAAYE,SACrC5B,aAAc15K,KAAK6hB,OAAOu5J,YAAYG,aAK1C/yK,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAACo8E,GAAAA,EAAiB,CAAC3/B,MAAOn8C,KAAK6hB,OAAO25J,SAAUn/F,eAAgBr8E,KAAK6hB,OAAO45J,iBAAkBn/F,QAASt8E,KAAK6hB,OAAOpZ,SACnH/I,EAAAA,GAAAA,KAAC0yD,GAAAA,EAAoB,CACjBh0C,cAAepe,KAAKoe,cACpB4zC,gBAAgB,EAChBvpD,MAAOzI,KAAK6hB,OAAOpZ,MACnBizK,6BAA8B17K,KAAKwL,SAASmmD,YAAYC,4BAG5DppD,EAAAA,GAAAA,MAACnJ,GAAAA,EAAe,CAACM,UAAW,yBAAyBI,SAAA,EACjDL,EAAAA,GAAAA,KAACN,GAAAA,EAAY,CAACO,UAAWsX,KAAW,uBAAuBlX,UACvDL,EAAAA,GAAAA,KAACkP,GAAAA,EAAwB,CAA4BW,UAAWvP,KAAKlC,MAAMyR,WAA5CvP,KAAKlC,MAAMyR,aAGzCvP,KAAK6hB,OAAOs0B,YAAc0kI,KAA2Bn7K,EAAAA,GAAAA,KAACg7K,GAA0B,CAACt8J,cAAepe,KAAKoe,cAAeq7J,UAAW0B,IAEnIn7K,KAAKyhK,sBACN/hK,EAAAA,GAAAA,KAAC4+J,GAAkB,QAGvB5+J,EAAAA,GAAAA,KAACk7K,GAAuB,CAACrrK,UAAWvP,KAAKlC,MAAMyR,UAAWsS,OAAQ7hB,KAAK6hB,OAAO2/I,eAG1F,ICjGD,SAASma,GAA0BC,GACtC,OAA4B,OAApBA,QAAoB,IAApBA,EAAAA,EAAwB,IAAI9R,cAAatmB,GAAYA,IACzD,CAACA,EAAUngH,KACA,CACHmgH,SAAUA,EACVngH,MAAOA,KAGnB,CCRG,MAAMw4I,IAAoBr9K,EAAAA,GAAAA,GAAU,qBCD9Bs9K,IAAgBt9K,EAAAA,GAAAA,GAAU,iBCe1Bu9K,IAAsBx8K,EAAAA,GAAAA,IACjC,cAAkCC,GAAAA,EAAyCuT,WAAAA,GAAA,SAAA9S,WAAA,KAEjE+7K,eAAiB,KACvBh8K,KAAKlC,MAAMkM,SAAShK,KAAKlC,MAAM2hB,OAAO,CACtC,CAEFhgB,MAAAA,GACE,OACI+I,EAAAA,GAAAA,MAAC8jC,GAAAA,EAAI,CAACrgB,IAAK6vJ,GAAen8K,UAAWsX,KAAW,iBAAiB,CAAC,CAACqlD,GAAAA,IAASt8D,KAAKlC,MAAM2hB,OAAO09G,KAAM91H,QAASrH,KAAKg8K,eAAej8K,SAAA,EAC7HL,EAAAA,GAAAA,KAACm8K,GAAiB,CAACl8K,UAAW,wBAC7BK,KAAKlC,MAAM2hB,OAAO3d,OAG7B,I,UC3BJ,MAAMm6K,GAAex+K,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,kEAMzB+7E,GAAQsiG,GAERjwI,IAAYvuC,EAAAA,GAAAA,IAAOw+K,GAAPx+K,CAAoBqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,gWAOnC6F,GAAAA,EAAQC,IAAI2jD,OAAO3b,UAAU9nC,SAIrBjF,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW0S,SAAS,GAG1CpN,GAAAA,EAAQC,IAAI2jD,OAAO3b,UAAU9nC,SCxBxBs4K,ID+B6BhwI,EAAAA,GAAAA,GAAeytC,GAAO3tC,IErBzD,MAAMmwI,WAAgC38K,GAAAA,EAA6CuT,WAAAA,GAAA,SAAA9S,WAAA,KAEhFm8K,eAAkB38J,IACxBzf,KAAKlC,MAAMu+K,SAAS58J,EAAO,CAC3B,CAEM68J,gBAAAA,CAAiB78J,GACvB,OACE/f,EAAAA,GAAAA,KAACq8K,GAAmB,CAAiBt8J,OAAQA,EAAQzV,SAAUhK,KAAKo8K,gBAA1C38J,EAAO8P,GAErC,CAEA9vB,MAAAA,GACE,OACEC,EAAAA,GAAAA,KAACw8K,GAAmB,CAACv8K,UAAW,wBAAwBI,SACrDC,KAAKlC,MAAMynK,QAAQh1J,KAAIkP,GAAUzf,KAAKs8K,iBAAiB78J,MAG9D,E,OC5BK,MAAM88J,GAA6B9+K,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qHAIlCE,GAASA,EAAMI,MAAM6J,OAAO8J,a,OCJvC,MCAM2qK,GDAiC/+K,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4D,gBEmBjD,MAAM6+K,IAAkCl9K,EAAAA,GAAAA,IAC3C,cAA8CC,GAAAA,EAAqDuT,WAAAA,GAAA,SAAA9S,WAAA,KAGvFy8K,YAAc,KAClB18K,KAAKlC,MAAMk6B,cAAcC,OAAO,EAClC,KAEM0kJ,cAAgBj9J,gBACd1f,KAAKlC,MAAM4zK,cAAc9sB,eAC/B,MAAMg4B,EAAoB58K,KAAKlC,MAAM4zK,cAAcd,eAAenxJ,QAAOsqJ,GAAKA,EAAE5sC,KAAI5sH,KAAIw5J,GAAKA,EAAEx6I,KAC/FvvB,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa/lC,KAAKwL,SAASyqC,QAAQC,aAAahsB,KAAKisB,UAAWymI,EAAkBn3K,KAAK,MACtIzF,KAAK08K,aAAa,EACpB,KAEMG,cAAgBn9J,UACpB1f,KAAKlC,MAAM4zK,cAAcd,eAAehlH,SAAQm+G,IAC5CA,EAAE5sC,IAAK,CAAK,UAGVn9H,KAAK28K,eAAe,EAE5B,KAmBMG,gBAAmBr9J,IACvBA,EAAO0wJ,cAAc,CACxB,CAnBO4M,mBAAAA,GACJ,OAAQr9K,EAAAA,GAAAA,KAAC88K,GAAuB,CAAC78K,UAAW,2BAA2BI,UACnEL,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CACxBC,cAAe,CACXz4B,UAAW,0BACXmC,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,SAC1CxO,QAASrH,KAAK28K,eAElBrkJ,gBAAiB,CACb34B,UAAW,0BACXmC,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,aAC1CxO,QAASrH,KAAK68K,eAElBrkJ,uBAAwBx4B,KAAKwL,SAASrN,WAAWC,aAE7D,CAMAqB,MAAAA,GAEI,OAAuD,IAAnDO,KAAKlC,MAAM4zK,cAAcd,eAAe1wK,OACjC,MAIPsI,EAAAA,GAAAA,MAAC+zK,GAA0B,CAAC58K,UAAW,0BAA0BI,SAAA,EAC7DL,EAAAA,GAAAA,KAACy8K,GAAuB,CAAC5W,QAASvlK,KAAKlC,MAAM4zK,cAAcd,eAAgByL,SAAUr8K,KAAK88K,kBACzF98K,KAAK+8K,wBAGlB,ICxED,MAAMC,GACTjqK,WAAAA,CAA6Bg8J,EACAvjK,GAAoC,KADpCujK,kBAAAA,EAA8C,KAC9CvjK,SAAAA,EAAiC,KAI7C2oK,cAAQ,EAHrBn0K,KAAKm0K,SAAWn0K,KAAK63K,sBACzB,CAIA,kBAAIjH,GACA,OAAO5wK,KAAKm0K,SAAS10J,QAAOsqJ,GAAKA,EAAErgI,mBACvC,CAEQmuI,oBAAAA,GACJ,MAAMniH,EAAkC,GAQxC,OANA11D,KAAK+uK,kBAAkBnjH,SAAQokB,IAC3BA,EAAE2yF,iBAAiB/2G,SAAQm+G,IACvBr0G,EAAO/6C,KAAK,IAAI44J,GAAsBxJ,GAAG,GAC3C,IAGC/pK,KAAKi9K,aAAavnH,EAC7B,CAEQunH,YAAAA,CAAa1X,GAGjB,MAAM2X,EAAwBl9K,KAAKwL,SAAS6D,OAAOm1I,kBAAkBy0B,wBAErE,OAAGl0K,EAAAA,MAAMiP,QAAQkpK,GACN3X,EAGJA,EAAQ/zB,MAAK,CAAC0lC,EAAIC,KAAE,IAAAgG,EAAAC,EAAA,OAAiC,QAA5BD,EAAAD,EAAsBhG,EAAG3nJ,WAAG,IAAA4tJ,OAAA,EAA5BA,EAA8B95I,QAAoC,QAA/B+5I,EAAGF,EAAsB/F,EAAG5nJ,WAAG,IAAA6tJ,OAAA,EAA5BA,EAA8B/5I,MAAM,GAC9G,CAEA,kBAAMuhH,SACI5kJ,KAAKwL,SAASmmD,YAAYizF,aAAa5kJ,KAAKm0K,SAAS10J,QAAOsqJ,GAAKA,EAAE5sC,KAAI5sH,KAAIw5J,GAAKA,EAAEx6I,KAC5F,E,OChCG,IAAM8tJ,IAAqBvqK,GAA3B,cAAoC0wJ,GACzCzwJ,WAAAA,CAAYvH,EAAoD8xK,GAC9DllK,MAAM5M,GAAU,KAD8C8xK,oBAAAA,GAG9DtkK,EAAAA,EAAAA,IAAehZ,KACjB,CAEA,MAAIuvB,GACF,MAAO,OACT,CAEA,QAAIztB,GACF,OAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,QAC7C,CAEA,0BACI0nK,GACF,OAAOv9K,KAAKs9K,oBAAoB79J,QAAOuwD,GAAKA,EAAE2yF,iBAAiBziK,OAAS,GAC1E,CAEA+hK,WAAAA,CAAYhvJ,GACV,MAAMs4J,EAA2BvrK,KAAKu9K,uBACtC,IAAI,IAAIv0J,KAAYuiJ,EAClB,GAAGviJ,EAAS8tJ,6BAA6B7jK,GACvC,OAAO6uJ,GAAsBU,YAIjC,OAAOV,GAAsBK,WAC/B,IAEDhmJ,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,0BAhBEo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,0BAAAtJ,GAAAsJ,WAAAtJ,ICnBJ,MAAM0qK,GAETzqK,WAAAA,CAAY0qK,EACiBjyK,GAAoC,KAApCA,SAAAA,EAAiC,KASrD+jB,GAA2B,KAAK,KAUhCozI,sBAAgB,OAMhBE,uBAAwB,EAxB7B7iK,KAAK2iK,iBAAmB,CACpB,IAAI0a,GAAsB7xK,EAAUiyK,GAE5C,CACAv6B,iBAAAA,CAAkBjwI,GACd,MAAM,IAAIg9D,MAAM,0BACpB,CAIA20E,YAAAA,CAAa3xI,EAAoBsyJ,GAC7B,OAAOvlK,KAAK2iK,iBAAiB,GAAGV,YAAYhvJ,EAChD,CAEA,SAAIxK,GACA,OAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,QAC/C,CAIA,iBAAI0tJ,GACA,OAAO,CACX,EC/BG,MAAMma,WAA8B1G,GACvC,cAAIhU,GACA,MAAO,EACX,E,OCGG,IAAM2a,IAA8B7qK,GAApC,cAA6C2jK,GAChD1jK,WAAAA,CAAYu8J,EACA9jK,GACR4M,MAAMk3J,EAAoB9jK,IAE1BwN,EAAAA,EAAAA,IAAehZ,KACnB,CAKA,oBACI2iK,GACA,OAAO3iK,KAAK49K,+BAChB,CACQA,6BAAAA,GAEJ,MAAMC,EAAoC79K,KAAKwL,SAAS6D,OAAOm1I,kBAAkBy0B,wBACjF,OAAGl0K,EAAAA,MAAMiP,QAAQ6pK,GACN,GAGJ79K,KAAKsvK,mBAAmB3M,iBACAljJ,QAAOsqJ,GAAK8T,EAAkC9T,EAAEx6I,MAChDhf,KAAIw5J,GAAK,IAAI2T,GAAsB3T,EAAG/pK,KAAKwL,WAC9E,CAEA,cAAIilK,GACA,OAAO,IACX,IACHt0J,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAnBIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,oBAAAtJ,GAAAsJ,WAAAtJ,I,OClBN,MCAMgrK,GDA8BrgL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8FEcxCmgL,IAA8Bx+K,EAAAA,GAAAA,IACzC,cAA0CC,GAAAA,EAAiDuT,WAAAA,GAAA,SAAA9S,WAAA,KAGjF+9K,cAAgBt+J,UACtBD,EAAO0wJ,qBACDnwK,KAAKlC,MAAM4zK,cAAc9sB,eAC/B5kJ,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa/lC,KAAKwL,SAASyqC,QAAQC,aAAahsB,KAAKisB,UAAW12B,EAAO8P,GAAG,CACzH,CAEF9vB,MAAAA,GAEE,OAAsD,IAAnDO,KAAKlC,MAAM4zK,cAAcd,eAAe1wK,OAClC,MAIPR,EAAAA,GAAAA,KAACo+K,GAAoB,CAACn+K,UAAW,0BAA0BI,UACvDL,EAAAA,GAAAA,KAACy8K,GAAuB,CAAC5W,QAASvlK,KAAKlC,MAAM4zK,cAAcd,eAAgByL,SAAUr8K,KAAKg+K,iBAGlG,IC9BG,MAAMC,GACTlrK,WAAAA,CAA4Bw8J,EACC/jK,GAAoC,KADrC+jK,iBAAAA,EAAuC,KACtC/jK,SAAAA,EAAiC,KAGrDsoK,eAAgB,EAAK,KAkBrBrD,WAA6B,KAAK,KAElCzN,WAAiC,EAtB1C,CAIA,MAAIzzI,GACA,OAAOvvB,KAAKuvK,iBAAiBhgJ,EACjC,CAEA,QAAIztB,GACA,OAAO9B,KAAKuvK,iBAAiBztK,IACjC,CAEA,aAAImtK,GACA,OAAOjvK,KAAKwL,SAASmmD,YAAY2zF,gBAAgBtlJ,KAAKuvB,GAC1D,CAEA0yI,WAAAA,CAAYhvJ,GACR,OAAOjT,KAAKuvK,iBAAiBtN,YAAYhvJ,EAC7C,E,mBCvBG,MAAMirK,GACTnrK,WAAAA,CAA4Bwc,EACP4uJ,GAAuB,KADhB5uJ,GAAAA,EAAU,KACjB4uJ,aAAAA,EAAoB,KAkBhCnb,WAAsC,EAhB/C,CACA9f,iBAAAA,CAAkBjwI,GACd,MAAM,IAAIg9D,MAAM,0BACpB,CAEA,QAAInuE,GACA,OAAO9B,KAAKm+K,YAChB,CAEAlc,WAAAA,CAAYhvJ,GACR,OAAImrK,EAAAA,GAAAA,IAAanrK,EAAS2lE,YAAY54D,kBAAmBo+J,EAAAA,GAAAA,IAAap+K,KAAKm+K,aAAan+J,eAC7E8hJ,GAAsBK,YAE1BL,GAAsBU,WACjC,ECRG,IAAM6b,IAA8BvrK,GAApC,MACHC,WAAAA,CAA6BvH,GAAoC,KAApCA,SAAAA,EAAiC,KAIrD+jB,GAA2B,QAAQ,KACnC9mB,MAAgB,iBAAiB,KACjCgoK,WAA6B,MALlCz3J,EAAAA,EAAAA,IAAehZ,KACnB,CAOAiiK,WAAAA,CAAYhvJ,GAER,OAAoC,IAAjCjT,KAAK2iK,iBAAiBziK,OACd4hK,GAAsBI,cAG1BO,MAAOziK,KAAK2iK,kBAAkBV,YAAYhvJ,EACrD,CAGA6jK,4BAAAA,CAA6B7jK,GACzB,OAAOjT,KAAKiiK,YAAYhvJ,KAAc6uJ,GAAsBK,WAChE,CAEA,oBACIQ,GACA,OAAO3iK,KAAKs+K,uBAChB,CAEA,kCAAIvH,GACA,OAAO/2K,KAAK2iK,iBAAiBljJ,QAAOsqJ,GAAKA,EAAEkF,WAC/C,CAEQqP,qBAAAA,GACJ,MAAM5oH,EAAiC,GAIjCmoH,EAAoC79K,KAAKwL,SAAS6D,OAAOm1I,kBAAkBy0B,wBAEjF,IAAI,IAAIsF,KAAmBv+K,KAAKwL,SAASmmD,YAAY+yF,yBACjD,IAAIm5B,EAAkCU,GAAkB,CACpD,MAAMC,EAA0Bx+K,KAAKy+K,yBAAyBF,GAC3DC,GACC9oH,EAAO/6C,KAAK6jK,EAEpB,CAGJ,OAAO9oH,CACX,CAEQ+oH,wBAAAA,CAAyBj7B,GAAmD,IAADk7B,EAC/E,MAAMC,EAAQn7B,EAASn+I,MAAM,KAC7B,GAAGs5K,EAAMz+K,OAAS,EACd,OAAO,KAGX,OAAQy+K,EAAM,IACV,IAAK,SACD,MACMl/J,EAAqF,QAA/Ei/J,EADY,IAAIpZ,GAAoCtlK,KAAKwL,UACtCk6J,gCAAgC/+B,MAAKojC,GAAKA,EAAEx6I,KAAOi0H,WAAS,IAAAk7B,EAAAA,EAAI,KAC/F,OAAGj/J,EACQ,IAAIw+J,GAAqBx+J,EAAQzf,KAAKwL,UAEtC,KAGf,IAAK,UACD,OAAO,IAAIyyK,GAAqB,IAAIC,GAAyB16B,EAAUm7B,EAAM,IAAK3+K,KAAKwL,UAC3F,QACI,OAAO,KAGnB,CAEA,iBAAI+3J,GACA,OAAO,CACX,IACHpnJ,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAvDIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,oBAAAtJ,GAAAsJ,WAAAtJ,ICbN,MAAM8rK,WAAkCtQ,GAAwBv7J,WAAAA,GAAA,SAAA9S,WAAA,KAE3D4+K,gBAAkB,IAAIC,GAAAA,GAAK,IAAM,IAAInB,GAA+B39K,KAAKuuK,SAASN,kCAAmCjuK,KAAKwL,YAAW,KACrIuzK,eAAiB,IAAID,GAAAA,GAAK,IAAM,IAAInB,GAA+B39K,KAAKuuK,SAASL,oCAAqCluK,KAAKwL,YAAW,KACtIwzK,kBAAoB,IAAIF,GAAAA,GAAK,IAAM,IAAInB,GAA+B39K,KAAKuuK,SAASP,uCAAwChuK,KAAKwL,YAAW,KAC5IyzK,gBAAkB,IAAIH,GAAAA,GAAK,IAAM,IAAInB,GAA+B,IAAIH,GAA+B,CAACx9K,KAAK6+K,gBAAgB/0K,MAAO9J,KAAK++K,eAAej1K,MAAO9J,KAAKg/K,kBAAkBl1K,OAAQ9J,KAAKwL,UAAWxL,KAAKwL,YAAW,KAC9N0zK,eAAiB,IAAIJ,GAAAA,GAAK,IAAM,IAAIT,GAA+Br+K,KAAKwL,WAAW,CAEjFwjK,wBAAAA,GACN,MAAO,CACHhvK,KAAK6+K,gBAAgB/0K,MACrB9J,KAAK++K,eAAej1K,MACpB9J,KAAKg/K,kBAAkBl1K,MACvB9J,KAAKi/K,gBAAgBn1K,MACrB9J,KAAKk/K,eAAep1K,MAE5B,CAEUolK,gBAAAA,GACN,OAAO9M,GAAGK,GAAIziK,KAAK6+K,gBAAgB/0K,MACrB9J,KAAK++K,eAAej1K,MACpB9J,KAAKg/K,kBAAkBl1K,MACvB9J,KAAKk/K,eAAep1K,OAC9B9J,KAAKi/K,gBAAgBn1K,MAC7B,CAEQ+tK,oBAAAA,GACJ,OAAO,IAAImF,GAA4Bh9K,KAAK+uK,kBAAmB/uK,KAAKwL,SACxE,CAEA43I,iBAAAA,GACIpjJ,KAAKwL,SAAS4vB,OAAOgiB,WAAWplB,IAAkBt4B,EAAAA,GAAAA,KAAC+8K,GAA+B,CAACzkJ,cAAeA,EAAe05I,cAAe1xK,KAAK63K,0BAA2B,CAC5JpvK,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,UAC3CynC,oBAAoB,EACpB6hI,gBAAgB,GAExB,CAEAltH,4BAAAA,GACI,OAAGjyD,KAAKwL,SAASrN,WAAWC,WAChBsB,EAAAA,GAAAA,KAAC+1K,GAA4B,IAE9B,IAGf,CAEA7jH,sBAAAA,GACI,OAAG5xD,KAAKwL,SAASrN,WAAWC,UACjB,KAEA,CACHw4B,SAAUi7B,GAAAA,EAAiCM,gBAC3CJ,cAAeryD,EAAAA,GAAAA,KAACq+K,GAA2B,CAACrM,cAAe1xK,KAAK63K,yBAG5E,CAEUjJ,6BAAAA,GACN,CAGJvrB,+BAAAA,CAAgCC,GAC5B,OAAO,CACX,E,OC/DG,IAAM87B,IAAqBtsK,GAA3B,cAAoCunJ,GACvCtnJ,WAAAA,CAAYxD,EACR/D,EACA2sK,GACA//J,MAAM7I,EAAW/D,EAAU2sK,IAE3Bn/J,EAAAA,EAAAA,IAAehZ,KACnB,CAEA,oBAAI68J,GACA,OAAO,EACX,CAEA,wBAAIpV,GACA,OAAO,EACX,CAEA,UAAY5lI,GACR,OAAO7hB,KAAKwL,SAASye,cAAcC,KAAK7a,OAAOrP,KAAKuP,UACxD,CAEU4rJ,yBAAAA,GACN,OAAOn7J,KAAK6hB,OAAOuiH,iBAAmB,EAC1C,CAEUk4B,uBAAAA,GACN,OAAOt8J,KAAK6hB,OAAOwiH,cAAgB,EACvC,CAEAk0C,WAAAA,GACI,OAAO74K,EAAAA,GAAAA,KAACo7K,GAAoB,CAAsBvrK,UAAWvP,KAAKuP,WAAhCvP,KAAKuP,UAC3C,CAEUkrJ,2BAAAA,GACN,MAAM94I,EAAe3hB,KAAK6hB,OAAO5H,kBACjC,OAAK0H,EAID3hB,KAAKwL,SAASqI,OAAOkZ,OAAOC,WACrB,KAGJ,CACHvF,SAAU9F,EAAa09J,kBAAoB,EAC3ChlK,WAAYsH,EAAatH,WACzBC,YAAaqH,EAAarH,YAC1BC,yBAA0BoH,EAAapH,0BAXhC,IAaf,CAEUmgJ,2BAAAA,GACN,MAAMme,EAAyB74K,KAAK6hB,OAAOy9J,yBAC3C,OAAIzG,EAIG,CACHpxJ,SAAUoxJ,EAAuBwG,iBACjCt7B,UAAW80B,EAAuB0G,sBAL3B,IAOf,CAEAxG,sBAAAA,CAAuBC,GACnB,OAAQh5K,KAAKuP,WACT,KAAKgwE,GAAAA,GACL,KAAKE,GAAAA,GACD,OAAOu5F,EAAUv5J,QAAO+rF,GAAKA,EAAEjf,cACnC,KAAK7M,GAAAA,GACD,OAAOs5F,EAAUv5J,QAAO+rF,GAAKA,EAAEjf,aAAeif,EAAE3W,eACpD,KAAKrV,GAAAA,EACD,OAAOw5F,EAAUv5J,QAAO+rF,GAAKA,EAAE3W,eAEnC,QACI,OAAOmkF,EAAUv5J,QAAO+rF,IAAMA,EAAE/f,eAE5C,CACA,2BACIwtF,GACA,OAAO0C,GAA0B37K,KAAK6hB,OAAO0jJ,QACjD,CAEAzgB,yBAAAA,GACI,OAAI9kJ,KAAK66J,mBACE,IAAI2c,GAA4Bx3K,KAAKwL,UAEzC,IAAIozK,GAA0B5+K,KAAKwL,SAC9C,IACH2Q,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,2BAXIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,2BAAAtJ,GAAAsJ,WAAAtJ,ICjGN,MAAM0sK,GACTzsK,WAAAA,CAA6BvH,GAAoC,KAApCA,SAAAA,EAAiC,KA0BrD6wJ,0BAAwC,GAAG,KAE3CE,mBAA6B,EAAE,KAE/B0c,wBAAwD,CAAC,CA7BlE,CACA,aAAI1pK,GACA,MAAO,WACX,CAEA,cAAIT,GACA,OAAO,CACX,CAEAypK,WAAAA,GACI,OAAO,IACX,CAEAprK,UAAAA,CAAWkqE,GACP,OAAO,IACX,CAEAnnE,gBAAAA,CAAiB8sJ,GACb,OAAO,CACX,CAEA+b,sBAAAA,CAAuBC,GACnB,MAAO,EACX,CAOAl0B,yBAAAA,GACI,OAAO,IAAI9B,GAAsBhjJ,KAAKwL,SAC1C,ECtCJ,MAAMi0K,GAA6B,6BAM5B,MAAMC,GACT3sK,WAAAA,CAA6BvH,GAAoC,KAApCA,SAAAA,EAAiC,KAStDm0K,iBAAyC,IARjD,CAEQC,sBAAAA,GACJ,MAAO,CACHx8C,MAAO,CAAC,EAEhB,CAGQy8C,mBAAAA,GAIJ,OAHI7/K,KAAK2/K,mBACL3/K,KAAK2/K,iBAAmB3/K,KAAKwL,SAASoyC,aAAaijF,QAAQ4+C,KAA+Bz/K,KAAK4/K,0BAE5F5/K,KAAK2/K,gBAChB,CAEA1iB,aAAAA,CAAc1tJ,EAAmB6zH,GAC7B,MAAM08C,EAAa9/K,KAAK6/K,sBACxBC,EAAW18C,MAAM7zH,GAAa6zH,EAAM7yH,KAAIqsE,GAAQA,EAAKn0E,MAAM2vC,iBAC3Dp4C,KAAKwL,SAASoyC,aAAaykF,QAAQo9C,GAA4BK,EACnE,CAEA5iB,SAAAA,CAAU3tJ,EAAmB6zH,GACzB,MAAM28C,EAAkB//K,KAAK6/K,sBAAsBz8C,MAAM7zH,IAAc,GACvE,GAA8B,IAA3BwwK,EAAgB7/K,OACf,OAAOkjI,EAGX,MAAM48C,EAAgBD,EAAgB9xH,QAA+B,CAAC19C,EAAKgD,EAAW8vB,KAClF9yB,EAAIgD,GAAa8vB,EACV9yB,IACR,CAAC,GAGJ,OAAO6yH,EAAMoO,MAAK,CAACyuC,EAAIC,KAAQF,EAAcC,EAAGx3K,MAAM2vC,iBAAmB,IAAM4nI,EAAcE,EAAGz3K,MAAM2vC,iBAAmB,IAE7H,E,wCC7CG,MAAM+nI,IAAiC3hL,EAAAA,GAAAA,GAAU,kCCA3C4hL,IAAiC5hL,EAAAA,GAAAA,GAAU,kC,gBCiBjD,MAAM6hL,IAA8B9gL,EAAAA,GAAAA,IACvC,cAA0CC,GAAAA,EAAiDuT,WAAAA,GAAA,SAAA9S,WAAA,KAE/EqgL,cAAgB,IAAIC,IAAI,CAC5B,CAAC,gBAAiBvgL,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMqmG,qBACzD,CAAC,gBAAiB/xG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMsmG,cACzD,CAAC,WAAYhyG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMumG,cACpD,CAAC,cAAejyG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM0mG,WACvD,CAAC,YAAapyG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMwmG,eACrD,CAAC,WAAYlyG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM2mG,cACpD,CAAC,eAAgBryG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMymG,iBACxD,CAAC,aAAcnyG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM4mG,eACtD,CAAC,YAAatyG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM6mG,cACrD,CAAC,YAAavyG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMunG,0BACrD,CAAC,cAAejzG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM2pG,aACxD,CAEKmrE,cAAAA,GACJ,OAAOxgL,KAAKsgL,cAAct2F,IAAIhqF,KAAKlC,MAAM0hB,oBAC7C,CAEQihK,uBAAAA,GAGJ,IAAIC,EAAwB1gL,KAAKlC,MAAM0hB,oBAKvC,OAJIxf,KAAKwL,SAASkE,KAAKC,cAA0C,kBAA1B+wK,IACnCA,EAAwB,iBAGrBA,CACX,CAEAC,eAAAA,CAAgBvxJ,GACPA,IACDpvB,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAc,WAAY/lC,KAAKygL,2BAC9EzgL,KAAKlC,OAASkC,KAAKlC,MAAMuJ,UAEjC,CAEA5H,MAAAA,GACI,IAAI2G,EAAgBpG,KAAKwgL,iBACzB,OAAO9gL,EAAAA,GAAAA,KAACse,GAAAA,EAAqC,CAAAje,UACzCyI,EAAAA,GAAAA,MAAC8jC,GAAAA,EAAI,CAACrgB,IAAKm0J,GACP7zI,KAAMvsC,KAAKlC,MAAMgiB,QACjBngB,UACIsX,KACI,gCAAkCjX,KAAKlC,MAAM2hB,OAAU,IAAMzf,KAAKlC,MAAM2hB,OAAU,IAClF,CAAC,CAAC68C,GAAAA,IAASt8D,KAAKlC,MAAMiiB,cAE9B1Y,QAASA,IAAMrH,KAAK2gL,gBAAgB3gL,KAAKlC,MAAMiiB,aAAahgB,SAAA,EAE5DL,EAAAA,GAAAA,KAAC0G,EAAa,CAACK,KAAMzG,KAAKwL,SAASrN,WAAWC,UAAY,EAAI,IAAKmO,cAAY,EAAC88F,gBAAiBrpG,KAAKlC,MAAMiiB,YAAc,GAAM,KAChIrgB,EAAAA,GAAAA,KAACygL,GAA8B,CAC3BxgL,UAAWsX,KAAW,CAAC,CAACqlD,GAAAA,IAASt8D,KAAKlC,MAAMiiB,cAAchgB,SAEzDC,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKygL,iCAI1D,ICrDKG,IAA8BrhL,EAAAA,GAAAA,IACzC,cAA0C4yB,GAAAA,EAA6Fpf,WAAAA,GAAA,SAAA9S,WAAA,KAE7H86K,oBAAc,OACd8F,aAAe70K,GAAAA,WAAkC,CAEzD+P,iBAAAA,GACE3D,MAAM2D,mBACR,CAEA,iBAAYqC,GAAiC,IAAD0iK,EAC1C,OAAK9gL,KAAK+6K,gBAAmC,QAArB+F,EAAI9gL,KAAK6gL,oBAAY,IAAAC,IAAjBA,EAAmBvyK,QAGtCvO,KAAKwL,SAASwvK,qBAAqBC,uBAF1Cj7K,KAAK+6K,eAAiB/6K,KAAKwL,SAASwvK,qBAAqBC,sBAKpDj7K,KAAK+6K,eACd,CAEQtZ,kBAAAA,GACN,OACEj5J,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACEL,EAAAA,GAAAA,KAACshK,GAAoB,CAACb,kBAAmBngK,KAAKlC,MAAMkhB,QAAQ0iJ,eAC5DhiK,EAAAA,GAAAA,KAACu3B,GAAAA,EAA+B,MAGtC,CAEAx3B,MAAAA,GACE,OACE+I,EAAAA,GAAAA,MAAA,OAAK7I,UAAS,GAAAC,OAAKwwD,GAAAA,GAAwB,uBAAsBrwD,SAAA,EAE/DL,EAAAA,GAAAA,KAACo8E,GAAAA,EAAiB,CAAC3/B,MAAOn8C,KAAKlC,MAAMkhB,QAAQw8J,SAAUp/F,YAAap8E,KAAK6gL,aAAcxkG,eAAgBr8E,KAAKlC,MAAMkhB,QAAQy8J,mBAG1Hz7K,KAAKwL,SAAS0N,eAAe6nK,kBAAmBrhL,EAAAA,GAAAA,KAACugB,GAAAA,EAAqB,CACpExX,MAAOzI,KAAKlC,MAAMkhB,QAAQvW,MAC1BuW,QAAShf,KAAKwL,SAAS0N,eAAe8nK,2BACtC5iK,cAAepe,KAAKoe,cACpBE,sBAAuB+hK,MAIzB3gL,EAAAA,GAAAA,KAACkY,GAAAA,EAAmB,CAClBvE,YA/CS,kBAgDTmG,wBAAyBxZ,KAAKlC,MAAMkhB,QAAQ/E,kBAC5C20I,gBAAiB5uJ,KAAKlC,MAAMkhB,QAAQ4vI,mBAEtClvJ,EAAAA,GAAAA,KAACk7K,GAAuB,CAACrrK,UAAWvP,KAAKlC,MAAMyR,UAAWsS,OAAQ7hB,KAAKlC,MAAMkhB,QAAQwiJ,aAEpFxhK,KAAKyhK,sBACN/hK,EAAAA,GAAAA,KAAC4+J,GAAkB,MAKzB,ICrEG,MAAM2iB,GACTluK,WAAAA,CAA4BxD,EACC/D,GAAoC,KADrC+D,UAAAA,EAAiB,KAChB/D,SAAAA,EAAiC,KAqCrD+wJ,mBAA6B,CApCtC,CAEA,cAAIztJ,GACA,OAAO,CACX,CAEA3B,UAAAA,CAAWkqE,GACP,OAAO,IACX,CAEAnnE,gBAAAA,CAAiB8sJ,GACb,OAAO,CACX,CAEA,WAAIh+I,GACA,OAAOhf,KAAKwL,SAASye,cAAcC,KAAK7a,OAAOrP,KAAKuP,UACxD,CAEAgpK,WAAAA,GACI,OACI74K,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACVL,EAAAA,GAAAA,KAACkhL,GAA2B,CACCrxK,UAAWvP,KAAKuP,UAChByP,QAAShf,KAAKgf,SAFThf,KAAKuP,YAKnD,CAEAwpK,sBAAAA,CAAuBC,GACnB,OAAOA,EAAUv5J,QAAO+rF,GAAKA,EAAE/f,cACnC,CAEA,6BAAI4wE,GACA,MAAO,EACX,CAIA,2BAAI4c,GACA,OAAO0C,GAA0B37K,KAAKgf,QAAQumJ,QAClD,CAEAzgB,yBAAAA,GACI,OAAO,IAAI85B,GAA0B5+K,KAAKwL,SAC9C,ECzDG,MAAM01K,WAAkC9B,GAC3C,+BAAIl3B,GACA,OAAOnjJ,EAAAA,MAAMiP,QAAQhU,KAAKwL,SAAS0N,eAAeioK,mBAAqB,KAAOnhL,KAAKwL,SAAS0N,eAAeioK,iBAC/G,E,kCCEG,MCNMC,GDMyC3jL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2MAIrDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,GAKrCutC,GAAAA,GAET7tC,GAASA,EAAMujL,gBAAiBxgL,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,iC,OEjBhC,MCAM0jL,GDA6C7jL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wEES9DiV,IAA0EtT,EAAAA,GAAAA,KAAUzB,IAEtF,MASMqmE,EAAYrmE,EAAMu4B,oBAAoBkrJ,eAE5C,OAAwB,IAArBp9G,EAAUjkE,OACF,MAGPR,EAAAA,GAAAA,KAACsM,GAAAA,SAAc,CAAAjM,UACXL,EAAAA,GAAAA,KAAC4hL,GAAmC,CAAC3hL,WAAWG,EAAAA,GAAAA,IAAQ,oCAAoCC,SACvFokE,EAAU5zD,KAAImyD,GAjBFA,KAGjBhjE,EAAAA,GAAAA,KAACsM,GAAAA,SAAc,CAAAjM,SACV2iE,EAAS6B,kBADO7B,EAAS5nD,KAcC0mK,CAAgB9+G,QAElC,IAKZ++G,IAA4CpqK,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,wB,mBCnCtF,MAKa6uK,GAL2CjkL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gGAE5CE,GAASA,EAAMI,MAAM6J,OAAOwC,iBCa5CsI,IAA6DtT,EAAAA,GAAAA,KAAUzB,IACzE,MAAM0N,GAAWqD,EAAAA,GAAAA,KACX8yK,GAAexyK,EAAAA,GAAAA,QAA8B,MAEnD,IAAKrR,EAAMu4B,oBAAoB8nI,4BAA8Bh0J,QAAQrM,EAAM8jL,sBACvE,OAAO,KAGX,MAAMC,GAAyB92J,EAAAA,GAAAA,cAAa6d,IACxC9qC,EAAMu4B,oBAAoByrJ,mBAAmBl5I,EAAE,GAChD,CAAC9qC,EAAMu4B,sBAWV,OAPA1oB,EAAAA,GAAAA,YAAU,KACN,MAAMo0K,EAAejkL,EAAMu4B,oBAAoBC,mBAAqB,KAChEqrJ,EAAapzK,UACbozK,EAAapzK,QAAQzF,MAAMzH,OAAS0gL,EACxC,GACD,CAACjkL,EAAMu4B,oBAAoBC,sBAG1B9tB,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAACkmG,GAAAA,GAAoB,CAACt4F,IAAKq0K,EAAc74K,MAAO,CAACynB,aAAc,8BAA+BlvB,OAAQ,WACtG3B,EAAAA,GAAAA,KAAC0hL,GAA+B,CAC5BC,cAAe71K,EAASm7G,QAAQq7D,WAChC10K,IAAKu0K,EACLliL,UAAWsX,KAAWsL,GAAAA,GAA0BziB,EAAAA,GAAAA,IAAQ,gCAAgCC,UAExFL,EAAAA,GAAAA,KAACgiL,GAAwC,CAAA3hL,UACrCL,EAAAA,GAAAA,KAAC+hL,GAAyC,UAGnD,IAIEQ,IAA+B5qK,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,wBCpD5DqvK,IAAsB1jL,EAAAA,GAAAA,GAAU,uB,gBCAtC,MAAM2jL,IAA4B3jL,EAAAA,GAAAA,GAAU,6BCAtC4jL,IAAsC5jL,EAAAA,GAAAA,GAAU,uCCAhD6jL,IAA4B7jL,EAAAA,GAAAA,GAAU,6B,OCA5C,MAAM8jL,GAAgC7kL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gCCgB1C2kL,IAAgGhjL,EAAAA,GAAAA,KAAUzB,IACnH,MAAM0N,GAAWqD,EAAAA,GAAAA,KACjB,IAAI2zK,GAAkBrzK,EAAAA,GAAAA,QAAO,MAE7BnD,GAAAA,WAAgB,KACRw2K,EAAgBj0K,SAAWzQ,EAAM2kL,wBAAwBtlD,IACzDhzF,YAAW,KAAO,IAADu4I,EACU,QAAvBA,EAAAF,EAAgBj0K,eAAO,IAAAm0K,GAAvBA,EAAyBC,eAAe,CACpCC,SAAU,SACVC,MAAO,SACPC,OAAQ,UACV,GAEH,IACP,GACD,CAAChlL,EAAM2kL,wBAAwBtlD,KAsBlC,OACIz9H,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,CAACnI,IAAKk1K,EAAgBziL,UAClCyI,EAAAA,GAAAA,MAAC65K,GAAyB,CACtB1iL,UATS,2BAAAC,OAAiC9B,EAAM2kL,wBAAwBtlD,GAAK,SAAW,YAUxF/tG,SAAUtxB,EAAM2kL,wBAAwBtlD,GACxC91H,QATWqY,gBACb5hB,EAAM2kL,wBAAwBxgB,aAAa,EAQjBliK,SAAA,CAzBjBgjL,MACf,GAAIh+K,EAAAA,MAAMiP,QAAQlW,EAAMmJ,MACpB,OAAO,KAGX,IAAI87D,EAAOjlE,EAAMmJ,KACbi/B,EAAiCpoC,EAAM2kL,wBAAwBtlD,GAAK,CAACl5H,MAAOuH,EAAStN,MAAMuN,aAAa1D,OAAO0C,cAAgB,CAAC,EACpI,OACI/K,EAAAA,GAAAA,KAAC4iL,GAA6B,CAAAviL,UAC1BL,EAAAA,GAAAA,KAACqjE,EAAI,CAACt8D,KAAM,EAAGqC,MAAOo9B,KACM,EAiB3B68I,GACAv3K,EAASoK,YAAYC,UAAU/X,EAAMklL,wBAE5B,ICrDbC,IAA6C1jL,EAAAA,GAAAA,KAAS,KAC/D,MAAMiM,GAAWqD,EAAAA,GAAAA,KAejB,OACInP,EAAAA,GAAAA,KAAC0iL,GAAmC,CAACziL,WAAWG,EAAAA,GAAAA,IAAQ,qCAAqCC,SACxFyL,EAASi+B,YAAYy5I,mBAAmB3yK,KAAI4yK,IAAgBC,OAfzCtK,EAe4DqK,GAd7Dz5I,mBAIhBhqC,EAAAA,GAAAA,KAAC6iL,GAAsC,CAE1CE,wBAAyB3J,EACzBkK,mBAAoBlK,EAAkBrwK,MACtCxB,KAAMlC,EAAAA,MAAMkP,kBAAkB6kK,EAAkB7xK,MAAQ,KAAOuE,EAAStN,MAAMuN,aAAaC,MAAMotK,EAAkB7xK,OAH9G6xK,EAAkBrwK,OAJhB,KAFaqwK,KAeyE,KAC3D,I,mBC5BvC,MAAMuK,IAA8B5lL,EAAAA,GAAAA,IAAO2vC,GAAAA,EAAP3vC,CAA+BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iCCD7D0lL,IAA+B9kL,EAAAA,GAAAA,GAAU,gC,OCC/C,MAAM+kL,GAAoC9lL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,yIAK5C+tC,GAAAA,EAAiB,G,mBCNzB,MAAM63I,GAAmB/lL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,uKAI7BE,GAASA,EAAMI,MAAM6J,OAAO4B,Y,OCJlC,MAAM85K,GAAqBhmL,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0GAEhCE,GAASA,EAAMI,MAAM6J,OAAO4B,YCE5B+5K,IAAoDnkL,EAAAA,GAAAA,KAAS,KACtE,MAAMiM,GAAWqD,EAAAA,GAAAA,KA8BjB,OACInP,EAAAA,GAAAA,KAAAo5B,GAAAA,SAAA,CAAA/4B,SAxB4B4jL,EAAC5qG,EAAakwB,EAAgB26E,KAE1D,GAA6B,IAAzBA,EAAc1jL,OACd,MAAO,CAAC64E,GAGZ,MAAM4lG,EAAQ5lG,EAAI1zE,MAAM4jG,GACxB,IAAI46E,EAAa,EAEjB,OAAOlF,EAAM1wH,QAAO,CAACC,EAAK41H,EAAMzgJ,KAC5B6qB,EAAIvzC,KAAKmpK,GAELzgJ,EAAQs7I,EAAMz+K,OAAS,IACvBguD,EAAIvzC,KAAK3O,GAAAA,aAAmB43K,EAAcC,GAAa,CAAE/oK,IAAKuoB,KAC1DwgJ,EAAaD,EAAc1jL,OAAS,GACpC2jL,KAID31H,IACR,GAAG,EAMEy1H,CACIn4K,EAASoK,YAAYC,UAAU,mBAC/B,yBACA,EACInW,EAAAA,GAAAA,KAAC+jL,GAAkB,CACfp8K,QAASA,IAAMmE,EAASszB,gBAAgBilJ,6BACxCpkL,WAAWG,EAAAA,GAAAA,IAAQ,6BAA6BC,SAE/CyL,EAASoK,YAAYC,UAAU,8BAEpCnW,EAAAA,GAAAA,KAAC+jL,GAAkB,CACfp8K,QAASA,IAAMmE,EAASszB,gBAAgBC,wBACxCp/B,WAAWG,EAAAA,GAAAA,IAAQ,6BAA6BC,SAE/CyL,EAASoK,YAAYC,UAAU,gCAKjD,I,gBCtCJ,MAAMmuK,IAAmCzkL,EAAAA,GAAAA,KAAS,KACrD,MAAMiM,GAAWqD,EAAAA,GAAAA,KAkCXo1K,EAA2BA,KAC7B,MAAMx7H,EAAcj9C,EAAStN,MAAMuN,aAAaC,MAAMg9C,gBACtDl9C,EAAS4vB,OAAOC,oBAAoB,CAChC5yB,MAAO+C,EAASoK,YAAYC,UAAU,qBACtC/T,MAAMpC,EAAAA,GAAAA,KAACgkL,GAAuC,IAC9C/6H,gBAAgB,EAChB1hD,MAAMvH,EAAAA,GAAAA,KAAC+oD,EAAW,CAAC3/C,MAAO,CAAC2D,QAAS,UAAWhG,KAAM,MACrDmiD,yBAAyB,EACzBltB,QAAS,CACL,CACI55B,KAAM0J,EAASoK,YAAYC,UAAU,MACrC8lB,aAAc,UACdt0B,QAASqY,SAAYmc,GAAAA,EAAkCC,0BAGjE,EAIN,OACItzB,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIyI,EAAAA,GAAAA,MAAC+6K,GAAiC,CAAAxjL,SAAA,EAC9BL,EAAAA,GAAAA,KAAC2jL,GAA2B,CAAC/1I,uBAAuB,IA5CpC42I,MACxB,MAAMC,EAA2E34K,EAASye,cAAcC,KAAK7a,OAAO+0K,iBAAiBzlK,OACrI,OAAI5Z,EAAAA,MAAMkP,kBAAqD,OAAnCkwK,QAAmC,IAAnCA,OAAmC,EAAnCA,EAAqCE,iBAAiF,KAA5B,OAAnCF,QAAmC,IAAnCA,OAAmC,EAAnCA,EAAqCE,cAAc53K,SAC3H,MAIP/M,EAAAA,GAAAA,KAAC8jL,GAAgB,CAACn8K,QAAS48K,EAA0BtkL,WAAWG,EAAAA,GAAAA,IAAQ,4BAA4BC,SAC/FyL,EAASoK,YAAYC,UAA6C,OAAnCsuK,QAAmC,IAAnCA,OAAmC,EAAnCA,EAAqCE,cAAcviL,OACpE,EAoCdoiL,GAhCoBI,MAC7B,MAAMH,EAA2E34K,EAASye,cAAcC,KAAK7a,OAAO+0K,iBAAiBzlK,OACrI,OAAI5Z,EAAAA,MAAMkP,kBAAqD,OAAnCkwK,QAAmC,IAAnCA,OAAmC,EAAnCA,EAAqCI,sBAA2F,KAAjC,OAAnCJ,QAAmC,IAAnCA,OAAmC,EAAnCA,EAAqCI,mBAAmB93K,SACrI,MAGJ/M,EAAAA,GAAAA,KAACi5D,GAAAA,EAA2B,GAAG,EA2B7B2rH,OAEL97K,EAAAA,GAAAA,MAAC25K,GAAyB,CAAApiL,SAAA,EACtBL,EAAAA,GAAAA,KAACujL,GAAgC,IA3DauB,MACtD,GAAIh5K,EAASkE,KAAKC,aACd,OACIjQ,EAAAA,GAAAA,KAAC4jL,GAA4B,CAAAvjL,UACzBL,EAAAA,GAAAA,KAAC+uC,GAAAA,EAAwD,KAGrE,EAqDS+1I,QAEN,I,OCnFJ,MAAMC,GAAiBhnL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+F,OCDjC,MAAM8mL,GAAsBjnL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wECYhC+mL,IAAsEplL,EAAAA,GAAAA,KAAUzB,IACzF,MAAMq4D,GAAahnD,EAAAA,GAAAA,WACb,iBAACy1K,EAAgB,gBAAEC,EAAe,eAAEC,EAAc,iBAAEC,GAAoBjnL,EAExEknL,EAAa3uK,KAAK4uK,KAAKH,GAEvBI,GAAmBn6J,EAAAA,GAAAA,cAAao6J,IAClC,MAAMC,EAA2B,IAAdD,EAEnB,OAAIJ,EACG1uK,KAAKuoG,IAAIkmE,GCxBmB,GDyBM,IAA9BD,EAAgB/lB,WAAmB+lB,EAAgBQ,eAA+B,IAAdL,GAM7DH,EAAgB/lB,YAAc8lB,EAAiBU,cAAgBT,EAAgBQ,gBAAgC,IAAfL,EADhG,cAANplL,OAAqBwlL,EAAU,MAS7B,cAANxlL,OAAqBwlL,EAAyB,IAAZJ,EAAe,MAG/C,cAANplL,OAAqBwlL,EAAU,MAGb,IAAnBN,EACO,cAANllL,OAAqBwlL,EAAU,MAG7B,mBAANxlL,OAA0BwlL,EAAU,QAAAxlL,OAAOklL,EAAc,UAE1D,CAACA,EAAgBC,EAAkBC,EAAWJ,EAAiBU,aAAcT,EAAgB/lB,UAAW+lB,EAAgBQ,iBAE3H13K,EAAAA,GAAAA,YAAU,KACHwoD,EAAW5nD,UAEN4nD,EAAW5nD,QAAQzF,MAAMyrJ,WAD1BwwB,EACuC,8BAEA,QAE1C5uH,EAAW5nD,QAAQzF,MAAM6/F,UAAYu8E,EAAiBL,EAAgBU,iBAC1E,GACD,CAACV,EAAgBU,gBAAiBL,EAAkBH,IAEvD,MAAMtqG,EAAwB,CAC1BkuB,UAAWu8E,EAAiBL,EAAgBU,kBAGhD,OACI7lL,EAAAA,GAAAA,KAACglL,GAAmB,CAAC/kL,UAAWklL,EAAgB/pK,IAE3BxN,IAAK6oD,EACLrtD,MAAO2xE,EACP+qG,gBAAiB1nL,EAAM0nL,gBAAgBzlL,SACvD8kL,EAAgBY,sBAJKZ,EAAgB/pK,IAKpB,IE9DjB4qK,IAA4DnmL,EAAAA,GAAAA,KAAUzB,IAC/E,MAAM8mL,EAAmB9mL,EAAM8mL,iBACzBe,GAAmBx2K,EAAAA,GAAAA,QAA8B,MACjDy2K,GAAcz2K,EAAAA,GAAAA,QAAO,IACpB21K,EAAgBe,IAAqBn4K,EAAAA,GAAAA,UAAS,IAC9Cq3K,EAAkBe,IAAuBp4K,EAAAA,GAAAA,WAAS,GACnDlC,GAAWqD,EAAAA,GAAAA,KAEXk3K,EAAyBA,KACvBjB,GAAiB,IACjBF,EAAiBz6B,WACjB3+I,EAASi+B,YAAYu8I,0BACdlB,EDzBwB,KC0B/BF,EAAiB36B,eACjBz+I,EAASi+B,YAAYu8I,0BAEzBF,GAAoB,GACpBD,EAAkB,EAAE,EAWlBI,GAAqBl7J,EAAAA,GAAAA,cAAa/D,IACpCA,EAAMuuC,iBAEN,MAAM2wH,EAASl/J,EAAMm/J,QAAQ,GAAGC,QAAUR,EAAYr3K,QACtDs3K,EAAkBK,EAAO,GAC1B,KAQHv4K,EAAAA,GAAAA,YAAU,KACN,MAAMmhB,EAAS62J,EAAiBp3K,QAKhC,OAJIugB,GACAA,EAAO+P,iBAAiB,YAAaonJ,EAAoB,CAACI,SAAS,IAGhE,KACCv3J,GACAA,EAAOwc,oBAAoB,YAAa26I,EAC5C,CAEH,GACF,CAACA,IAeJ,OACIvmL,EAAAA,GAAAA,KAAC+kL,GAAc,CAACn3K,IAAKq4K,EACjBW,aAlDqBt/J,IACrB49J,EAAiB2B,0BAA0BC,6BAC3C5B,EAAiB2B,0BAA0BE,sBAE/Cz/J,EAAMuuC,iBACNqwH,EAAYr3K,QAAUyY,EAAMm/J,QAAQ,GAAGC,OAAO,EA8C1CM,WApCmB1/J,IACvB,MAAMk/J,EAASl/J,EAAMktI,eAAe,GAAGkyB,QAAUR,EAAYr3K,QAC7Ds3K,EAAkBK,GAClBJ,GAAoB,EAAK,EAiCS/lL,SAE7B6kL,EAAiB+B,OAAOp2K,KAhBTs0K,IAEhBnlL,EAAAA,GAAAA,KAACilL,GAAyB,CACtBE,gBAAiBA,EACjBD,iBAAkBA,EAClBE,eAAgBA,EAChBC,iBAAkBA,EAClBS,gBAAqD,IAApCX,EAAgBU,gBAAwBQ,OAAyB5lL,GALtD0kL,EAAgB/pK,QAenC,I,OCrFlB,MAAM8rK,GAAkCnpL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4H,OCAlD,MAAMipL,GAAoBppL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sK,OCApC,MAAMkpL,GAAwBrpL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,kTCalCmpL,IAAgFxnL,EAAAA,GAAAA,KAAUzB,IACnG,IAAI0uJ,GAAYr9I,EAAAA,GAAAA,QAA8B,MAC1C3D,GAAWqD,EAAAA,GAAAA,KAGf,MAAM+2K,GAAcz2K,EAAAA,GAAAA,QAAO,GACrB63K,GAAY73K,EAAAA,GAAAA,QAAO,GAEnB83K,EAAUA,KACZz7K,EAASi+B,YAAYy9I,oBAAqB,EAC1CppL,EAAMqpL,YACN37K,EAASqd,UAAUkd,uBAAuB,cAAe,UAAW,aAAa,EAwBrF,OACErmC,EAAAA,GAAAA,KAACknL,GAA+B,CAACv/K,QAAS4/K,EACTX,aAtBT9hL,IACtBohL,EAAYr3K,QAAU/J,EAAE2hL,QAAQ,GAAGC,OAAO,EAsBXM,WAXXliL,IACpBwiL,EAAUz4K,QAAU/J,EAAE0vJ,eAAe,GAAGkyB,QARzBR,EAAYr3K,QAAUy4K,EAAUz4K,QAClC,IAET04K,GAMS,EAUkBtnL,WAAWG,EAAAA,GAAAA,IAAQ,sCAAsCC,UAEtFyI,EAAAA,GAAAA,MAACq+K,GAAiB,CAAA9mL,SAAA,EACdL,EAAAA,GAAAA,KAAC4yD,GAAAA,EAAe,CACZxpD,MAAO,CAACpH,MAAO,QAASL,OAAQ,SAChCiM,IAAKk/I,EACLp4I,IAAK5I,EAAStN,MAAMuN,aAAa1M,OAAOuuJ,YAAY85B,6BAA6BjoL,WACjFw7E,UAAU,EACVzyC,MAAM,KAEV1/B,EAAAA,GAAAA,MAACs+K,GAAqB,CAAA/mL,SAAA,EAClBL,EAAAA,GAAAA,KAAA,KAAAK,SAAIyL,EAASoK,YAAYC,UAAU,wCACnCnW,EAAAA,GAAAA,KAAA,KAAAK,SAAIyL,EAASoK,YAAYC,UAAU,mDAGb,I,OCnEjC,MAAMwxK,GAA4B5pL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+CCStC0pL,IAA4C/nL,EAAAA,GAAAA,KAAS,KAC9D,MAAMiM,GAAWqD,EAAAA,GAAAA,MACV04K,EAAgBC,IAAqB95K,EAAAA,GAAAA,WAAUlC,EAASi+B,YAAYy9I,oBAErEtC,EAAmBp5K,EAASi+B,YAAYm7I,kBAE9Cj3K,EAAAA,GAAAA,YAAU,KACF45K,GACA/7K,EAASqd,UAAUkd,uBAAuB,cAAe,OAAQ,cAGjE6+I,EAAiB2B,0BAA0BC,6BAC3C5B,EAAiB2B,0BAA0BE,qBAC/C,GACD,CAACc,EAAgB/7K,EAASqd,UAAW+7J,EAAiB2B,4BAEzD,MAAMkB,EAAoBA,KACtB7C,EAAiB2B,0BAA0BmB,uBAC3CF,GAAkB,EAAM,EAc5B,OACIh/K,EAAAA,GAAAA,MAAC6+K,GAAyB,CAAC93J,GC5CS,4BD4CyB5vB,WAAWG,EAAAA,GAAAA,IAAQ,gCAAgCC,SAAA,CAV5GwnL,GAGI7nL,EAAAA,GAAAA,KAACqnL,GAA8B,CAACI,UAAWM,IAG5C,MAMH/nL,EAAAA,GAAAA,KAACgmL,GAAoB,CAACd,iBAAkBA,MAChB,IEpCvB+C,IAA6BpoL,EAAAA,GAAAA,KAAS,KAC/C,MAAMiM,GAAWqD,EAAAA,GAAAA,KAgCjB,OA9BAlB,EAAAA,GAAAA,YAAU,KACN,MAeM6B,GAAkBC,EAAAA,EAAAA,KAAS,IAAMjE,EAASi+B,YAAYC,oBACvDA,IACQA,GACDl+B,EAASorB,SAASgxJ,SAASrmK,MAAK,KAjBxC/V,EAAS4vB,OAAOC,oBAAoB,CAChCutB,yBAAyB,EACzBngD,MAAO+C,EAASoK,YAAYC,UAAU,gCACtC/T,KAAM0J,EAASoK,YAAYC,UAAU,+BACrC0zC,QAAS/9C,EAAStN,MAAMuN,aAAaC,MAAMonB,SAC3C4I,QAAS,CACL,CACI55B,KAAM0J,EAASoK,YAAYC,UAAU,SACrC8lB,aAAc,UACdt0B,QAASqY,SAAYmc,GAAAA,EAAkCC,0BAQa,GAC5E,GACD,CACH5f,iBAAiB,IAGrB,MAAO,KACH1M,GAAiB,CACpB,GACF,CAAChE,EAASorB,SAAUprB,EAASi+B,YAAYC,kBAAmBl+B,EAAS4vB,OAAQ5vB,EAAStN,MAAOsN,EAASoK,eAGrGpN,EAAAA,GAAAA,MAAC05K,GAAmB,CAAAniL,SAAA,EAChBL,EAAAA,GAAAA,KAACskL,GAAsB,KACvBtkL,EAAAA,GAAAA,KAAC4nL,GAA+B,KAChC5nL,EAAAA,GAAAA,KAACuiL,GAA4B,CAACL,sBAAsB,MAClC,I,OC/CvB,MAAMiG,GAAiBpqL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mCCA3BkqL,IAAqBtpL,EAAAA,GAAAA,GAAU,sBCI/BupL,IAAcxoL,EAAAA,GAAAA,IAAS,cAA0BC,GAAAA,EAC5DC,MAAAA,GACE,MAAM,YAACmW,GAAe5V,KAAKwL,SAE3B,OACE9L,EAAAA,GAAAA,KAACmoL,GAAc,CAACloL,UAAU,6BAA4BI,UACpDL,EAAAA,GAAAA,KAACooL,GAAkB,CAAA/nL,SAAE6V,EAAYC,UAAU,iBAGjD,ICbWmyK,IAAexpL,EAAAA,GAAAA,GAAU,gBCAzBypL,IAAmBzpL,EAAAA,GAAAA,GAAU,oBCA7B0pL,IAAoB1pL,EAAAA,GAAAA,GAAU,qBCA9B2pL,IAAmB3pL,EAAAA,GAAAA,GAAU,oBCA7B4pL,IAA0B5pL,EAAAA,GAAAA,GAAU,2BC4B1C,MAAM6pL,WAAoC7oL,GAAAA,EAAiDuT,WAAAA,GAAA,SAAA9S,WAAA,KAsBtFoH,QAAW7C,IACVxE,KAAKsoL,qBAGVtoL,KAAKlC,MAAMuJ,QAAQ7C,EAAE,CACxB,CA1BD/E,MAAAA,GACI,MAAM8oL,EAAkBvoL,KAAKsoL,oBACvBliL,EAAgBpG,KAAKlC,MAAM4kD,cAEjC,OACIl6C,EAAAA,GAAAA,MAACw/K,GAAY,CAACQ,cAAexoL,KAAKlC,MAAM0qL,cAAe7oL,UAAWK,KAAKlC,MAAM6B,UAAW0H,QAASrH,KAAKqH,QAAQtH,SAAA,EAC1GL,EAAAA,GAAAA,KAAC0oL,GAAuB,CAAChlL,OAAQpD,KAAKyoL,8CAA8C1oL,UAChFyI,EAAAA,GAAAA,MAACy/K,GAAgB,CAACO,cAAexoL,KAAKlC,MAAM0qL,cAAeplL,OAAQmlL,EAAgBxoL,SAAA,CAC9EqG,GAAgB1G,EAAAA,GAAAA,KAAC0G,EAAa,CAACK,KAAM,MAAS,KAC9CzG,KAAKyoL,+CACF/oL,EAAAA,GAAAA,KAACwoL,GAAiB,CAACM,cAAexoL,KAAKlC,MAAM0qL,cAAe7oL,WAAWG,EAAAA,GAAAA,IAAQ,sCAAsCC,SAAEC,KAAKlC,MAAM4qL,2BAChI,WAGdhpL,EAAAA,GAAAA,KAACyoL,GAAgB,CAACK,cAAexoL,KAAKlC,MAAM0qL,cAAeplL,OAAQmlL,EAAgBxoL,SAC9EC,KAAKlC,MAAMgE,SAI5B,CASQ2mL,2CAAAA,GACJ,YAA+CtoL,IAAxCH,KAAKlC,MAAM4qL,0BAA0C1oL,KAAKlC,MAAM4qL,yBAA2B,CACtG,CAEQJ,iBAAAA,GACJ,OAAOtoL,KAAKyoL,iDAAmDzoL,KAAKlC,MAAM6qL,mBAC9E,ECpDJ,MAAM91K,IAA6CtT,EAAAA,GAAAA,KAAUzB,IACzD,MAAM0N,GAAWqD,EAAAA,GAAAA,KAWjB,OACInP,EAAAA,GAAAA,KAAC2oL,GAA2B,CACxBG,cAAe1qL,EAAM0qL,cACrBE,yBAA4B5qL,EAAMg8G,IAAI4uE,yBACtC/oL,WAAaG,EAAAA,GAAAA,IAAQ,oBACrB4iD,cAAiBl3C,EAAStN,MAAMuN,aAAaC,MAAMupG,iBACnDnzG,KAAQ0J,EAASoK,YAAYC,UAAU,iBACvCxO,QAhBeqY,sBACNlU,EAASmzF,uBAAuBG,kBAAkB,uCAAuCn8B,UACtGn3D,EAASqd,UAAUkd,uBAAuB,aAAa,SAAU,kBAE3DjoC,EAAMg8G,IAAI8uE,iCACTp9K,EAASu4B,UAAUC,WAAW,GAYnC,IAGG6kJ,IAAexxK,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,Q,gBC5BlD,MAAMi2K,IAA6BvpL,EAAAA,GAAAA,IAAS,cAAcC,GAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KAEpE24D,gBAAkBl5C,UACtB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,uBAC/D/lC,KAAKwL,SAASu4B,UAAUglJ,aAAa,CAC/C,CAEMtpL,MAAAA,GACH,OACIC,EAAAA,GAAAA,KAAC2oL,GAA2B,CACxBK,yBAA0B1oL,KAAKwL,SAASsiB,SAASC,0BAA0B7tB,OAC3EP,UAAawjG,GAAAA,GACbzgD,cAAiB1iD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMwpG,aACxDpzG,KAAQ9B,KAAKwL,SAASoK,YAAYC,UAAU,sBAC5CxO,QAASrH,KAAK44D,iBAG1B,I,4BCnBG,MAAMowH,IAAazpL,EAAAA,GAAAA,IAAS,cAAyBC,GAAAA,EAE1DC,MAAAA,GACE,MAAMwpL,EAAoBjpL,KAAKwL,SAASye,cAAcC,KAAKyzE,OAAOurF,YAClE,OAAKD,GAAsBA,EAAkBx8K,SAI3C/M,EAAAA,GAAAA,KAACy9E,GAAAA,EAAkB,CAACgsG,mBAAiB,EAACC,qBAAmB,EAAArpL,UACvDL,EAAAA,GAAAA,KAAA,OAAKoJ,MAAO,CAAC29C,QAAS,cAAc1mD,UAClCL,EAAAA,GAAAA,KAAC8yD,GAAAA,EAA0B,QALxB,IASX,I,OCRF,IACa62H,IADZ9pL,EAAAA,GAAAA,IAAQuT,GAAT,cAC8BtT,GAAAA,EAC1BC,MAAAA,GACI,IAAI6pL,EAAYtpL,KAAKwL,SAASkE,KAAK4yE,SAAStiF,KAAKlC,MAAMyrL,kBACvD,OAAIxkL,EAAAA,MAAMkP,kBAAkBq1K,GACjB,KAEPtpL,KAAKlC,MAAM0rL,gBAAkBxpL,KAAKlC,MAAM6B,WACjCD,EAAAA,GAAAA,KAAA,QAAMC,UAAWK,KAAKlC,MAAM6B,UAAUI,SACxCupL,IAGEA,CAEf,KACHx2K,G,OCzBM,MAAM22K,GAAmBhsL,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mC,OCApC,MAAM8rL,GAAkBjsL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,yJAC5Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOmrD,YAAY,IAKtC5wD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,I,OCN7C,MAAMurL,GAAuBlsL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,uJACjCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOu1B,cAAc,IAIxCh7B,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,ICKvCwrL,GAAwBA,KACjC,IAAIp+K,GAAWqD,EAAAA,GAAAA,KACf,MAAM,cAACg7K,EAAa,cAAEC,EAAa,aAAEC,GAAgBv+K,EAASye,cAAcC,KAAKyzE,OAAOqsF,eAClFC,EAAYz+K,EAASye,cAAcC,KAAK+kC,gBAAgBg7H,UAAUhmJ,SAASn5B,QAUjF,SAASo/K,EAAgBC,EAA0BlvK,GAC/C,OAAIA,GAGGvb,EAAAA,GAAAA,KAAC2pL,GAAQ,CAAC1pL,UAAU,eAAe4pL,iBAAkBY,IAFrD,IAGX,CAiBA,MAAM9+E,EAAiB7/F,EAAStN,MAAMuN,aAAaC,MAAM83D,YAMzD,OACI9jE,EAAAA,GAAAA,KAACy9E,GAAAA,EAAkB,CAACx9E,UAAU,4BAA4B0H,QALvCqY,iBACZlU,EAASu4B,UAAUqmJ,iBAAiB,EAIuCrqL,UAC9EyI,EAAAA,GAAAA,MAAC04C,GAAAA,GAAgB,CAACC,WAAW,SAASr4C,MAAO,CAACiqK,OAAQ,WAAWhzK,SAAA,CAtBjDyL,EAASrN,WAAWC,WAE7BsB,EAAAA,GAAAA,KAACkmG,GAAAA,GAAoB,CAAC98F,MAAO,CAAC2/B,YAAa,UAAU1oC,UACxDL,EAAAA,GAAAA,KAAA,OAAKoJ,MAAO,CAAC2e,SAAU,WAAY/lB,MAAO,OAAQL,OAAQ,QAAQtB,UAC9DL,EAAAA,GAAAA,KAAA,OAAKoJ,MAAO,CAAC2e,SAAU,WAAY/lB,MAAO,OAAQL,OAAQ,OAAQwO,IAAK,QAAS45D,KAAM,SAAS1pE,UAC3FL,EAAAA,GAAAA,KAACZ,GAAAA,EAAK,CAACsV,IAAK61K,EAAW91K,IAAI,YAKhCzU,EAAAA,GAAAA,KAACiJ,GAAAA,GAAiB,CAACC,WAAY,IAAKC,UAAU,YAcjDL,EAAAA,GAAAA,MAACiN,GAAAA,GAAe,CAAA1V,SAAA,EACZyI,EAAAA,GAAAA,MAACkhL,GAAe,CAAA3pL,SAAA,CAzChC,SAA0Bkb,EAAoBovK,GAC1C,IAAIpvK,EACJ,OAAO,KAEP,MAAMqvK,EAAkBtqL,KAAKwL,SAASkE,KAAK26H,YAC3C,OAAO3qI,EAAAA,GAAAA,KAAA,QAAAK,SAAOsqL,EAAWx0K,UAAUy0K,IACvC,CAoCqBC,CAAiBV,EAAer+K,EAASoK,aACzCs0K,EAAgB,YAAaJ,GAC7BI,EAAgB,WAAYH,OAEjCvhL,EAAAA,GAAAA,MAACmhL,GAAoB,CAAA5pL,SAAA,EACjBL,EAAAA,GAAAA,KAAC+pL,GAAgB,CAAA1pL,SAAEyL,EAASoK,YAAYC,UAAU,yBAClDnW,EAAAA,GAAAA,KAAC2pL,GAAQ,CAAC1pL,UAAU,uBAAuB4pL,iBAAiB,eAGpE7pL,EAAAA,GAAAA,KAACkmG,GAAAA,GAAoB,CAAA7lG,UACjBL,EAAAA,GAAAA,KAAC2rG,EAAc,CAAC5kG,KAAM,YAGb,E,gBClEtB,MAAM+jL,IAAwBjrL,EAAAA,GAAAA,KAAS,KAEtCG,EAAAA,GAAAA,KAACu9E,GAAAA,EAAwB,CAACP,qBAAsBS,GAAAA,EAAoBN,4BAA4B/8E,EAAAA,GAAAA,IAAQ,+BCNnG2qL,IAAyBjsL,EAAAA,GAAAA,GAAU,0B,OCAzC,MAAMksL,GAAkBjtL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6FCA5B+sL,IAAuBnsL,EAAAA,GAAAA,GAAU,wB,gBCAvC,MAAMosL,IAA8BpsL,EAAAA,GAAAA,GAAU,+B,gBCQ9C,MAAMqsL,WAA4BrrL,GAAAA,EACvCC,MAAAA,GACE,MAAM4qL,EAAarqL,KAAKwL,SAASoK,YAEjC,OACEpN,EAAAA,GAAAA,MAACiiL,GAAsB,CAAC9qL,WAAWG,EAAAA,GAAAA,IAAQ,6BAA6BC,SAAA,EACtEyI,EAAAA,GAAAA,MAACkiL,GAAe,CAAA3qL,SAAA,EACdL,EAAAA,GAAAA,KAACirL,GAAoB,CAAA5qL,SAAEsqL,EAAWx0K,UAAU,mBAC5CnW,EAAAA,GAAAA,KAACygB,GAAAA,EAAY,CAACG,YAAaS,GAAAA,EAAY+pK,KAAMjqK,iBAAkB+pK,GAA6BjrL,WAAWG,EAAAA,GAAAA,IAAQ,0BAEjH0I,EAAAA,GAAAA,MAACkiL,GAAe,CAAA3qL,SAAA,EACdL,EAAAA,GAAAA,KAACirL,GAAoB,CAAA5qL,SAAEsqL,EAAWx0K,UAAU,oBAC5CnW,EAAAA,GAAAA,KAACygB,GAAAA,EAAY,CAACG,YAAaS,GAAAA,EAAYgqK,MAAOlqK,iBAAkB+pK,GAA6BjrL,WAAWG,EAAAA,GAAAA,IAAQ,2BAIxH,ECxBK,MAAMkrL,IAAyBxsL,EAAAA,GAAAA,GAAU,0B,gBCKzC,MAAMysL,IAA+B1rL,EAAAA,GAAAA,KAAS,KACjD,MAAMiM,GAAWqD,EAAAA,GAAAA,KACXw7K,EAAa7+K,EAASoK,YAU5B,OACIpN,EAAAA,GAAAA,MAACwiL,GAAsB,CAAAjrL,SAAA,EACnBL,EAAAA,GAAAA,KAACwgB,GAAAA,EAAgB,CAACvgB,UAAU,oBAAmBI,UAC3CL,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CAACM,OAAO,UAAUK,QAXjBqY,iBACTlU,EAASu4B,UAAUmnJ,eAAe,EAUczpL,WAAS,EAAA1B,SACnDsqL,EAAWx0K,UAAU,gBAG9BnW,EAAAA,GAAAA,KAACwgB,GAAAA,EAAgB,CAACvgB,UAAU,qBAAoBI,UAC5CL,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CAACM,OAAO,OAAOK,QAZbqY,iBACVlU,EAASu4B,UAAUonJ,gBAAgB,EAWW1pL,WAAS,EAAA1B,SACjDsqL,EAAWx0K,UAAU,kBAGT,IC7BpBu1K,IAA0B5sL,EAAAA,GAAAA,GAAU,2BCApC6sL,IAAyB7sL,EAAAA,GAAAA,GAAU,0B,2BCWzC,MAAM8sL,GAAwBA,KACjC,MAAM9/K,GAAWqD,EAAAA,GAAAA,KACjB,OAAOrG,EAAAA,GAAAA,MAAC20E,GAAAA,EAAkB,CAACx9E,WAAWG,EAAAA,GAAAA,IAAQ,kBAAkBC,SAAA,EAC5DyI,EAAAA,GAAAA,MAAC04C,GAAAA,GAAgB,CAACC,WAAW,SAAS6kD,eAAe,gBAAejmG,SAAA,EAChEL,EAAAA,GAAAA,KAAC0rL,GAAuB,CAAArrL,SAAEyL,EAASoK,YAAYC,UAAU,cACzDnW,EAAAA,GAAAA,KAACygB,GAAAA,EAAY,CAACxgB,WAAWG,EAAAA,GAAAA,IAAQ,yBAA0B+gB,iBAAkBwqK,SAEjF3rL,EAAAA,GAAAA,KAACw9E,GAAAA,EAAoB,KACrBx9E,EAAAA,GAAAA,KAACmrL,GAAmB,KACpBnrL,EAAAA,GAAAA,KAACwhD,GAAAA,GAAgB,KACjBxhD,EAAAA,GAAAA,KAACurL,GAAkB,KACnBvrL,EAAAA,GAAAA,KAACoN,GAAAA,EAAS,CAACzL,OAAO,WACD,EChBnBwR,IAAgEtT,EAAAA,GAAAA,KAAUzB,IAE9E,MAAMqmE,EAAYrmE,EAAMimC,SAASwnJ,cAEjC,OACI7rL,EAAAA,GAAAA,KAAAo5B,GAAAA,SAAA,CAAA/4B,SACGokE,EAAU5zD,KAAImyD,IAAYhjE,EAAAA,GAAAA,KAACsM,GAAAA,SAAc,CAAAjM,SAAqB2iE,EAAS6B,kBAAxB7B,EAAS5nD,QACxD,IAII0wK,IAAkCn0K,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,aClB/D44K,IAAuBjtL,EAAAA,GAAAA,GAAU,wB,2CCQkB,IAM1DqU,IADLtT,EAAAA,GAAAA,IAAQuT,GAAT,cAC4BtT,GAAAA,EAAgDuT,WAAAA,GAAA,SAAA9S,WAAA,KAClEyrL,aAA8C,KAAK,KACnDC,sBAAuB,EAAM,KAC7BC,kBAAmB,EAAM,KACzB9xF,2BAAqB,OACrB+xF,8BAAwB,OAqEhCC,6BAA+B,KAC7B9rL,KAAK6rL,yBAA2BE,GAAAA,GAAyBC,YAAY,CACtE,CArEDjwK,iBAAAA,GACE3D,MAAM2D,oBACN/b,KAAK85F,sBAAwB95F,KAAKwL,SAASu1C,MAAMC,UAC7ChhD,KAAKwL,SAASygL,cAAchxK,WAAajb,KAAKlC,MAAMimC,SAASokB,QAC/DnoD,KAAKksL,uBAET,CAEA9mK,kBAAAA,GACMplB,KAAKwL,SAASygL,cAAchxK,YACzBjb,KAAKlC,MAAMimC,SAASokB,SAEnBnoD,KAAK0rL,aACP1rL,KAAKmsL,qBACInsL,KAAK2rL,uBAEd3rL,KAAK4rL,kBAAmB,KAGvB5rL,KAAK0rL,cAAgB1rL,KAAKlC,MAAMimC,SAASokB,QAC5CnoD,KAAKksL,wBAGX,CAEA5mK,oBAAAA,GACEtlB,KAAKmsL,oBACP,CAEA,2BAAMD,GACJlsL,KAAK6rL,yBAA2BE,GAAAA,GAAyBK,WACzDpsL,KAAK2rL,sBAAuB,cACf3rL,KAAKwL,SAASouF,aAAayyF,sBAAsB,CAC5DvyF,sBAAuB95F,KAAK85F,sBAC5B3kE,QAAS,CACPC,KAAMC,GAAAA,EAASolE,SACf5lE,QAASC,GAAAA,GAAiBgmF,0BAC1BxlF,OAAQC,GAAAA,GAAeC,cAEzBC,sBAAuB,CACrBH,OAAQwqC,GAAAA,GAAwB26B,YAEjCl5E,MAAM6/E,IACPphG,KAAK0rL,aAAetqF,EACpBphG,KAAK2rL,sBAAuB,EACxB3rL,KAAK4rL,mBACP5rL,KAAK4rL,kBAAmB,EACxB5rL,KAAKmsL,qBACP,IACCG,SAAQ,KACTtsL,KAAK2rL,sBAAuB,EAC5B3rL,KAAK4rL,kBAAmB,CAAK,GAEjC,CACAO,kBAAAA,GACMnsL,KAAK0rL,eACP1rL,KAAK0rL,aAAazzJ,MAAM,CACtB9C,QAAS,CACPC,KAAMC,GAAAA,EAASolE,SACfnlE,OAAQC,GAAAA,GAAeC,cAEzByqE,OAAQjgG,KAAK6rL,2BAEf7rL,KAAK0rL,aAAe,KAExB,CAMAjsL,MAAAA,GACE,OAAKO,KAAKwL,SAASygL,cAAchxK,WAO/Bvb,EAAAA,GAAAA,KAACy9E,GAAAA,EAAkB,CAAAp9E,UACfL,EAAAA,GAAAA,KAAC+rL,GAAoB,CACjBl8J,GAAIm3D,GAAAA,EAA6B6lG,iCACjC5sL,UAAW,2BAA6BK,KAAKlC,MAAMimC,SAASokB,OAAS,8BAAgC,iCACrG9gD,QAASrH,KAAK8rL,iCAVf,IAcX,KACDh5K,GAGM,MAAM05K,IAA6Bn1K,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,a,OChHhE,MAAM45K,GAA2BhvL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,udAKrCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,ICLvCsuL,IAAqBluL,EAAAA,GAAAA,GAAU,sB,OCArC,MAAMmuL,GAA4BlvL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qECAtCgvL,IAAgBpuL,EAAAA,GAAAA,GAAU,iBCK1BquL,IAA2BttL,EAAAA,GAAAA,KAAS,KAC7C,MAAMiM,GAAWqD,EAAAA,GAAAA,KACXw7K,EAAa7+K,EAASoK,YAK5B,OAAOlW,EAAAA,GAAAA,KAACy9E,GAAAA,EAAkB,CAACx9E,WAAWG,EAAAA,GAAAA,IAAQ,2BAA2BC,UACrEL,EAAAA,GAAAA,KAACktL,GAAa,CAACjtL,UAAS,GAAAC,QAAKE,EAAAA,GAAAA,IAAQ,kBAAiB,KAAAF,QAAIE,EAAAA,GAAAA,IAAQ,wBAAuB,KAAAF,QAAIE,EAAAA,GAAAA,IAAQ,4BACtFuH,QANIqY,iBACZlU,EAASu4B,UAAU+oJ,UAAU,EAKG/sL,SAClCsqL,EAAWx0K,UAAU,aAET,I,OCjBlB,MAAMk3K,GAAwBtvL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mGAIlCE,GAASA,EAAMI,MAAM6J,OAAOjG,OCOnC+Q,IAA+CtT,EAAAA,GAAAA,KAAUzB,IAC3D,MACMusL,GADWx7K,EAAAA,GAAAA,KACW+G,YAE5B,OAAQpN,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACJL,EAAAA,GAAAA,KAACoN,GAAAA,EAAS,CAACzL,OAAQ,UACnBmH,EAAAA,GAAAA,MAACukL,GAAqB,CAAAhtL,SAAA,CACjBsqL,EAAWx0K,UAAU,+BACtBnW,EAAAA,GAAAA,KAAA,SACC5B,EAAM+oD,aAAammI,kBAGxBttL,EAAAA,GAAAA,KAACoN,GAAAA,EAAS,CAACzL,OAAQ,UACnB3B,EAAAA,GAAAA,KAACw9E,GAAAA,EAAoB,KACrBx9E,EAAAA,GAAAA,KAACmtL,GAAc,MAChB,IAIMI,IAAiB51K,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,iB,OC9BpD,MAAMq6K,GAAqBzvL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+PACpBE,GAASA,EAAMI,MAAM6J,OAAO8J,a,OCD7C,MAAMs7K,GAAmC1vL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sI,6BCAnD,MAAMwvL,GAA+B3vL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6NASzCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOmrD,YAAY,I,OCT5C,MAAMm6H,GAA2B5vL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sTAKvCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOmrD,YAAY,ICG3CrgD,IAA+DtT,EAAAA,GAAAA,KAAUzB,IAEvE,MAAM0N,GAAWqD,EAAAA,GAAAA,KAOXw8F,EAAiB7/F,EAAStN,MAAMuN,aAAaC,MAAMC,eACnD2hL,EAAiB9hL,EAAStN,MAAMuN,aAAaC,MAAM8qG,aAEzD,OACIhuG,EAAAA,GAAAA,MAAC6kL,GAAwB,CAAC1tL,UAAW,8BAA+B2N,IAAKxP,EAAMimC,SAASwpJ,cAAcxtL,SAAA,EAClGL,EAAAA,GAAAA,KAAA,QAAAK,UACIL,EAAAA,GAAAA,KAAC4tL,EAAc,CAAC7mL,KAAM,OAE1B/G,EAAAA,GAAAA,KAAA,QAAAK,SACKyL,EAASoK,YAAYC,UAAU,qBAEpCrN,EAAAA,GAAAA,MAAA,QAAMnB,QAASA,KAffmE,EAAS2P,MAAMwnH,+BACf7kI,EAAMimC,SAASC,aAciBjkC,SAAA,CAC3ByL,EAASoK,YAAYC,UAAU,QAChCnW,EAAAA,GAAAA,KAAC2rG,EAAc,CAAC5kG,KAAM,WAEH,IAI1B+mL,IAAiCn2K,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,aC3B9D46K,IAA2BluL,EAAAA,GAAAA,IAAS,cAAuCC,GAAAA,EAE5EkuL,YAAAA,CAAa34K,GAAmB,IAADs7I,EACG,QAAtCA,EAAArwJ,KAAKwL,SAAS2P,MAAMC,SAASrG,UAAS,IAAAs7I,GAAtCA,EAAwC78I,KAAK,CACzCL,YAAY,EACZI,UAAW,sBAEnB,CAEA9T,MAAAA,GAAU,IAADo5D,EACL,OAAkD,IAA9C74D,KAAKwL,SAAS2P,MAAMwlH,eAAezgI,OAC5B,KAGiD,QAAxD24D,EAAC74D,KAAKwL,SAASye,cAAcC,KAAKyzE,OAAOgwF,uBAAe,IAAA90H,GAAvDA,EAAyDpsD,SAK1DjE,EAAAA,GAAAA,MAAC0kL,GAAkB,CAACvtL,UAAW,uBAAuBI,SAAA,EAClDL,EAAAA,GAAAA,KAAC8tL,GAA8B,KAC/B9tL,EAAAA,GAAAA,KAACytL,GAAgC,CAAAptL,SAC5BC,KAAKwL,SAAS2P,MAAMwlH,eAAehgH,MAAM,EAAE,GAAGpQ,KAAI+wH,GAAMthI,KAAKwL,SAAS2P,MAAMC,SAASkmH,KAAK/wH,KAAIq9K,GAC1FA,GACDplL,EAAAA,GAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,GAAAA,KAAC6gC,GAAAA,EAAqB,CAACC,YAAU,EAAC7gC,UAAS,iBAAAC,OAAmBguL,EAAG74K,UAAY1N,QAASA,IAAMrH,KAAK0tL,aAAaE,EAAG74K,UAAUhV,UACvHL,EAAAA,GAAAA,KAACoiC,GAAAA,EAAkB,CAAC7uB,SAAU26K,EAAIvpJ,gBAAgB,EAAMhpB,gBAAc,EAACyqD,kBAAgB,OAE3FpmE,EAAAA,GAAAA,KAAC0tL,GAA4B,CAAArtL,SACxB6tL,EAAGnlL,WANN,YARX,IAqBf,IC7BSolL,IAAiBtuL,EAAAA,GAAAA,IAAS,cAA6BC,GAAAA,EAElEC,MAAAA,GAKE,OACE+I,EAAAA,GAAAA,MAACikL,GAAwB,CAAA1sL,SAAA,EACvByI,EAAAA,GAAAA,MAAC04C,GAAAA,GAAgB,CAAC6kD,UAAU,SAASj9F,MAAO,CAACzH,OAAQ,QAAQtB,SAAA,EAC3DyI,EAAAA,GAAAA,MAACiN,GAAAA,GAAe,CAAA1V,SAAA,EACdL,EAAAA,GAAAA,KAACkqL,GAAW,KACZlqL,EAAAA,GAAAA,KAAC4rL,GAAW,KACZ9iL,EAAAA,GAAAA,MAACkkL,GAAkB,CAAC/sL,UAAU,0BAAyBI,SAAA,EACrDL,EAAAA,GAAAA,KAACmpL,GAAY,KACbnpL,EAAAA,GAAAA,KAACopL,GAA0B,QAE7BppL,EAAAA,GAAAA,KAACspL,GAAU,KACXtpL,EAAAA,GAAAA,KAAC8rL,GAA+B,KAChC9rL,EAAAA,GAAAA,KAAC8sL,GAA0B,KAC3B9sL,EAAAA,GAAAA,KAAC8qL,GAAW,KACZ9qL,EAAAA,GAAAA,KAAC+tL,GAAwB,QAE3B/tL,EAAAA,GAAAA,KAACkmG,GAAAA,GAAoB,CAAA7lG,UACnBL,EAAAA,GAAAA,KAACutL,GAAc,SAGlBjtL,KAAKwL,SAASqI,OAAOmI,GAAGmtB,QAASzpC,EAAAA,GAAAA,KAACitL,GAAyB,MAGlE,I,OC9CK,MAAMmB,GAA2BrwL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wGCArCmwL,IAAuBvvL,EAAAA,GAAAA,GAAU,wBCAjCwvL,IAAoBxvL,EAAAA,GAAAA,GAAU,qBCiBpC,MAAMyvL,WAAmBzuL,GAAAA,EAEtB0uL,qBAAAA,GACN,MAAM36J,EAAYvzB,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM8nB,UACzD,OACEhrB,EAAAA,GAAAA,MAACwlL,GAAiB,CAACruL,UAAU,0BAAyBI,SAAA,EACpDL,EAAAA,GAAAA,KAACqoL,GAAW,KACZroL,EAAAA,GAAAA,KAACouL,GAAwB,CAAA/tL,UACvBL,EAAAA,GAAAA,KAACquL,GAAoB,CAACpuL,UAAU,yBAAyB0H,QAASrH,KAAKlC,MAAMkmC,UAAUjkC,UACrFL,EAAAA,GAAAA,KAAC6zB,EAAS,CAAC9sB,KAAM,YAK3B,CAEAhH,MAAAA,GACE,OACE+I,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,CACGC,KAAKkuL,yBACNxuL,EAAAA,GAAAA,KAAC+sL,GAAwB,CAAA1sL,UACvByI,EAAAA,GAAAA,MAAC04C,GAAAA,GAAgB,CAAC6kD,UAAU,SAASj9F,MAAO,CAACzH,OAAQ,QAAQtB,SAAA,EAC3DyI,EAAAA,GAAAA,MAACiN,GAAAA,GAAe,CAAA1V,SAAA,EACdL,EAAAA,GAAAA,KAACkqL,GAAW,KACZlqL,EAAAA,GAAAA,KAAC4rL,GAAW,KACZ5rL,EAAAA,GAAAA,KAAC8sL,GAA0B,KAC3B9sL,EAAAA,GAAAA,KAAC8qL,GAAW,KACZ9qL,EAAAA,GAAAA,KAAC+tL,GAAwB,QAE3B/tL,EAAAA,GAAAA,KAACkmG,GAAAA,GAAoB,CAAA7lG,UACnBL,EAAAA,GAAAA,KAACutL,GAAc,aAM3B,ECrDK,MAAMkB,IAAsB3vL,EAAAA,GAAAA,GAAU,uBCAhC4vL,IAAgB5vL,EAAAA,GAAAA,GAAU,iB,OCAhC,MAAM6vL,GAAqB5wL,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iC,eCAtC,MAAM0wL,IAAkB9vL,EAAAA,GAAAA,GAAU,mB,OCAlC,MCAM+vL,GDA4B9wL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sL,OEA5C,MCAM4wL,GDA2B/wL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mMEwB5CiV,IAAgBtT,EAAAA,GAAAA,IAAS,cAAcC,GAAAA,EAA8BuT,WAAAA,GAAA,SAAA9S,WAAA,KAEjEwuL,UAAYziL,GAAAA,YAAkC,KA0E9C0iL,WAAa,KACf1uL,KAAKyuL,UAAUlgL,UACjBvO,KAAKyuL,UAAUlgL,QAAQogL,UAAY,GAErC3uL,KAAKlC,MAAMimC,SAASC,WAAW,CAChC,CA7EOkqJ,qBAAAA,GAEN,GAAIluL,KAAKwL,SAASqI,OAAOC,SAAU,CACjC,MAAMyf,EAAYvzB,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM8nB,UACzD,OACEhrB,EAAAA,GAAAA,MAAC2lL,GAAmB,CAAApuL,SAAA,EAClBL,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,CAAC5M,UAAU,MAAK9I,SAC7BC,KAAK4uL,6BAERlvL,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,CAAC5M,UAAU,MAAK9I,UAC9BL,EAAAA,GAAAA,KAACqoL,GAAW,OAEdroL,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,CAAC5M,UAAU,MAAK9I,UAC9BL,EAAAA,GAAAA,KAACwhD,GAAAA,GAAgB,CAAC8kD,eAAe,WAAUjmG,UACzCL,EAAAA,GAAAA,KAACquL,GAAoB,CAACpuL,UAAU,yBAAyB0H,QAASrH,KAAK0uL,WAAW3uL,UAChFL,EAAAA,GAAAA,KAAC6zB,EAAS,CAAC9sB,KAAM,YAM7B,CAEA,OAAO,IACT,CAEAhH,MAAAA,GACE,IAAIO,KAAKwL,SAASkE,KAAKC,aACrB,OAAO,KAGT,MAAMg6I,EAAa1yI,MAAWnX,EAAAA,GAAAA,IAAQ,gBAAiB,CACrD,CAAC+uL,GAAAA,IAAiB7uL,KAAKlC,MAAMimC,SAASokB,SAGxC,OACEzoD,EAAAA,GAAAA,KAAC4uL,GAAe,CAAC3uL,UAAWgqJ,EAAY9mI,OAAQ7iB,KAAKlC,MAAMimC,SAASlhB,OAAO9iB,UACzEyI,EAAAA,GAAAA,MAAC+lL,GAAkB,CAAAxuL,SAAA,CAChBC,KAAKkuL,yBACNxuL,EAAAA,GAAAA,KAAC8uL,GAAiB,CAAClhL,IAAKtN,KAAKyuL,UAAU1uL,SACpCC,KAAK8uL,4BAKhB,CAEQF,uBAAAA,GACN,IAAI5uL,KAAKwL,SAASqI,OAAOC,SACvB,OAAO,KACT,IAAI9T,KAAKlC,MAAMimC,SAASgrJ,cACtB,OAAO,KAET,MAAMtmF,EAAWzoG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMs3C,SACxD,OACEx6C,EAAAA,GAAAA,MAAC4lL,GAAa,CAACzuL,UAAU,8BAA8B0H,QAASrH,KAAK0uL,WAAW3uL,SAAA,EAC9EL,EAAAA,GAAAA,KAAC+oG,EAAQ,KACT/oG,EAAAA,GAAAA,KAAC2uL,GAAkB,CAAAtuL,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,YAG/D,CAEQi5K,mBAAAA,GACN,OAAG9uL,KAAKlC,MAAMimC,SAASgrJ,eACbrvL,EAAAA,GAAAA,KAACmwB,GAAAA,EAA0B,IAC3B7vB,KAAKwL,SAASqI,OAAOC,UACtBpU,EAAAA,GAAAA,KAACmuL,GAAc,KAEfnuL,EAAAA,GAAAA,KAACuuL,GAAU,CAACjqJ,UAAWhkC,KAAK0uL,YAEvC,IAWWM,IAAW33K,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,a,yBC1GrD,MCHao8K,GDKuBxxL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,64BAMnCsxL,KAIEpxL,GAASA,EAAM+kB,SAExBlkB,IAAA,IAAC,iBAACy0K,GAAiBz0K,EAAA,OAAKy0K,GAAmBvyK,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,+CAE5CiD,EAAAA,GAAAA,IAAGe,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,kCACSE,GAASA,EAAMI,MAAM6J,OAAOwC,gBAC3C,IAGQjI,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAMpE,EAAMC,WAAW0S,SAAS,GAO5CpN,GAAAA,EAAQC,IAAIC,IAAIC,QAYfH,GAAAA,EAAQC,IAAIC,IAAIC,S,OEzCjB,MAAMurL,GAAmB1xL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iFAC7BE,GAASA,EAAMoL,QAAU,QAAU,S,OCHzC,MCAMkmL,GDAoB3xL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gMAO5BE,GAASA,EAAMuxL,mBAAqB,MAAQ,MACnCvxL,GAASA,EAAMI,MAAM6J,OAAOwC,iB,OEP7C,MCDM+kL,GDCyB7xL,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gF,UEDhD,MAAM2xL,IAA4BpnK,EAAAA,GAAAA,IAASxqB,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gTAc9B4xL,GAA8B/xL,GAAAA,GAAOiB,IAAGoC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,6XAOxBE,GAASA,EAAMI,MAAMa,OAAOC,OAAO2vE,sBAAsBxvE,YAErEowL,I,OCtBV,MAAME,IAAgChyL,EAAAA,GAAAA,IAAO+xL,GAAP/xL,CAAmCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wG,OCAzE,MAAM8xL,IAA0BjyL,EAAAA,GAAAA,IAAO+xL,GAAP/xL,CAAmCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,yE,OCAnE,MAAM+xL,IAA0BlyL,EAAAA,GAAAA,IAAO+xL,GAAP/xL,CAAmCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,yE,OCAnE,MAAMgyL,IAA8BnyL,EAAAA,GAAAA,IAAO+xL,GAAP/xL,CAAmCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,kDCIjEiyL,IAAwB59K,EAAAA,GAAAA,GAAcu9K,IACdt9K,aAAau9K,IACb5mH,OAAO6mH,IACP5mH,WAAW4mH,IACXrmH,OAAOsmH,IACPx9K,WAAWy9K,IACXx9K,QCNxB09K,IAAmCvwL,EAAAA,GAAAA,KAAS,KAEjDG,EAAAA,GAAAA,KAAC0vL,GAAU,CAACzvL,WAAWG,EAAAA,GAAAA,IAAQ,cAAcC,UACzCL,EAAAA,GAAAA,KAAC4vL,GAAe,CAAC3vL,UAAU,mBAAkBI,UACzCL,EAAAA,GAAAA,KAACmwL,GAAoB,CAAClwL,UAAU,gCCG1CkT,IAAqDtT,EAAAA,GAAAA,KAAUzB,IACnE,MAAMiyL,EAAcjyL,EAAM6/F,OAAOj0B,MAC3BsmH,EAAgBA,KACpB,MAAMC,EAA6BF,EAAYG,gCACzCC,EAAmBJ,EAAYI,iBACrC,OAAOJ,EAAYK,eAAe7/K,KAAI,CAACyxI,EAAS3+G,KAE1C3jC,EAAAA,GAAAA,KAACyvL,GAAgB,CAAkB5/J,GAAIyyH,EAAQzyH,GAAIrmB,QAASm6B,IAAU4sJ,IAA+BE,EAAiBpwL,SACnHiiJ,EAAQviJ,UADYuiJ,EAAQzyH,KAInC,EA4BJ,OAAO8gK,GAAAA,aAfcC,MACnB,IAAIztK,EAASktK,EAAYQ,mBACrBnd,EAAmB2c,EAAYS,kBAEnC,OAEIhoL,EAAAA,GAAAA,MAACymL,GAAa,CAACpsK,OAAQA,EAAQuwJ,iBAAkBA,EAAkBzzK,UAAWsX,KAAWnZ,EAAM6B,UAAW,CACxG6T,KAAMu8K,EAAY5nI,SACjBpoD,SAAA,CACAiwL,IAlBJD,EAAYI,kBAETzwL,EAAAA,GAAAA,KAACowL,GAAsB,IAItB,OAca,EAIOQ,GAAgBxyL,EAAMswI,IAAI/qF,KAAK,IAKjDotI,IAAuBp5K,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,SAAU,QC7C5D,MAAM69K,GACjB39K,WAAAA,CAA6BvH,GAAoC,KAApCA,SAAAA,EAAiC,KAGrD+wJ,wBAAkB,OAClB0c,6BAAuB,OACvBnqK,gBAAU,OACnB24I,0BAAoB,OAMXl4I,UAAoB6wE,GAAAA,EAX7B,CAOA,6BAAIi8E,GACA,OAAOr8J,KAAKwL,SAASi+B,YAAYknJ,eACrC,CAKA5X,sBAAAA,CAAuBC,GACnB,MAAO,EACX,CAEAl0B,yBAAAA,GACI,OAAO,IAAI0yB,GAA4Bx3K,KAAKwL,SAChD,CAEA0E,gBAAAA,CAAiB8sJ,GACb,OAAO,CACX,CAEAub,WAAAA,GACI,OACI/vK,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAACioL,GAAgB,KACjBjoL,EAAAA,GAAAA,KAACsvL,GAAQ,KACTtvL,EAAAA,GAAAA,KAAC+wL,GAAoB,CAAoB9wL,WAAWG,EAAAA,GAAAA,IAAQ,oBAAlC,kBAGtC,CAEAqN,UAAAA,CAAWkqE,GAEX,EChCG,MAAMu5G,WAAsBlyG,EAAAA,EAE/B3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAKZqlL,QAA2C,CAAC,EAAE,KACrCv2B,qCAA+B,EAL5Ct6J,KAAKs6J,gCAAkC,IAAIolB,GAAsBl0K,GACjExL,KAAK8wL,aACT,CAKQA,WAAAA,GACJ9wL,KAAK6wL,QAAQ1wG,GAAAA,IAAmBngF,KAAK+wL,aAAa5wG,GAAAA,IAClD,MAAM6wG,EAAgBhxL,KAAKwL,SAASye,cAAcC,KAAK7a,OACvD,IAAK,IAAIE,KAAayhL,EAClBhxL,KAAK6wL,QAAQthL,GAAavP,KAAK+wL,aAAaxhL,EAEpD,CAEAD,QAAAA,CAASC,GACL,OAAOvP,KAAK6wL,QAAQthL,IAAc,IAAIiwK,GAAex/K,KAAKwL,SAC9D,CAEQulL,YAAAA,CAAaxhL,GACjB,OAAQA,GACJ,KAAK8vE,GAAAA,GACD,OAAO,IAAI6hG,GAA0B3xK,EAAWvP,KAAKwL,SAAUxL,KAAKs6J,iCACxE,KAAKn6E,GAAAA,GACD,OAAO,IAAI+3F,GAAmBl4K,KAAKwL,SAAUxL,KAAKs6J,iCACtD,KAAKl7E,GAAAA,GACD,OAAO,IAAI6hG,GAAwB1xK,EAAWvP,KAAKwL,UACvD,KAAK40E,GAAAA,GACD,OAAO,IAAIswG,GAAsB1wL,KAAKwL,UAC1C,QACI,OAAO,IAAI4zK,GAAsB7vK,EAAWvP,KAAKwL,SAAUxL,KAAKs6J,iCAE5E,CAEA9V,eAAAA,GAAoC,IAAD1uG,EAC/B,MAAMvmC,EAAmD,QAA1CumC,EAAG91C,KAAKwL,SAASyqC,QAAQC,aAAahsB,YAAI,IAAA4rB,OAAA,EAAvCA,EAAyCK,UAC3D,OAAK5mC,EAGEvP,KAAKsP,SAASC,GAFV,IAAIiwK,GAAex/K,KAAKwL,SAIvC,CAEA0vK,cAAAA,CAAe/kI,GACX,OAAOn2C,KAAKwL,SAASye,cAAcC,KAAK7a,OAAO8mC,EACnD,CAEAw/H,6BAAAA,GAA0C,IAADsb,EACrC,MAAMC,EAAsC,CAAC9xG,GAAAA,IACvClpC,EAAel2C,KAAKwL,SAASyqC,QAAQC,aAC3C,OAAOg7I,EAA0Bh0K,SAAqB,OAAZg5B,QAAY,IAAZA,GAAkB,QAAN+6I,EAAZ/6I,EAAchsB,YAAI,IAAA+mK,OAAN,EAAZA,EAAoB96I,UAClE,ECvEG,MAAMg7I,GACXp+K,WAAAA,CAAoB0qF,EAAoDjyF,GAAoC,KAAxFiyF,QAAAA,EAA0C,KAAUjyF,SAAAA,CACxE,CAEA,SAAI/C,GACF,OAAOzI,KAAKy9F,QAAQh1F,KACtB,CAEA,OAAIwxD,GACF,OAAOj6D,KAAKy9F,QAAQxjC,GACtB,CAEA,aAAIm3H,GACF,OAAO,CACT,CAEA,iBAAMC,GACJrxL,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,WAAY/lC,KAAKyI,OAE7EzI,KAAKsxL,oBACL,IAAIr3H,EAAMj6D,KAAKy9F,QAAQxjC,IAEpBj6D,KAAKwL,SAASqI,OAAOkZ,OAAOC,mBAGvBhtB,KAAKuxL,sBAELvxL,KAAKwL,SAASkE,KAAK06H,SACtBpqI,KAAKy9F,QAAQ+zF,uBACdv3H,SAAaj6D,KAAKwL,SAAS07G,WAAWuqE,gBAAgBx3H,KANxDj6D,KAAKwL,SAASsE,OAAO4hL,SAASz3H,EAWlC,CAEQs3H,aAAAA,GACN,OAAGvxL,KAAKwL,SAASkE,KAAKC,aACb3P,KAAKwL,SAASkE,KAAKg6H,oBACvBnoH,MAAKooH,IACJ3pI,KAAKwL,SAASmoH,QAAQg+D,mBAAmB,wBAAyBhoD,EAAM,IACvE7rE,OAAM,KACP99D,KAAKwL,SAAS2L,OAAOxI,MAAM,4DAA4D,IAGpFqsB,QAAQC,SAEnB,CAEQq2J,iBAAAA,GACN,IAGE,IAAKtxL,KAAKy9F,QAAQm0F,UAChB,OAGF,IAAK7sL,EAAAA,MAAM+qE,SAAS9vE,KAAKy9F,QAAQm0F,WAE/B,YADA5xL,KAAKwL,SAAS2L,OAAOxI,MAAM,wDAAD/O,OAAyDI,KAAKyI,QAI1F,GAAIzI,KAAKy9F,QAAQm0F,UAAU1xL,OAAS,GAElC,YADAF,KAAKwL,SAAS2L,OAAOxI,MAAM,uDAAD/O,OAAwDI,KAAKyI,MAAK,kBAAA7I,OAAiBI,KAAKy9F,QAAQm0F,UAAUpsL,UAAU,EAAG,IAAG,SAK3I,IAAIqsL,SAAS7xL,KAAKy9F,QAAQm0F,UACrCE,EACF,CACA,MAAOpjL,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,0DAAD/O,OAA2DI,KAAKyI,MAAK,iBAAA7I,OAAgBI,KAAKy9F,QAAQm0F,WAAaljL,EAC3I,CACF,EC5EK,MAAMqjL,GACXh/K,WAAAA,CAAoB2jH,EAA4Cs7D,EAAwBC,EAAmCC,GAAkC,KAAzIx7D,UAAAA,EAAkC,KAAUs7D,OAAAA,EAAc,KAAUC,kBAAAA,EAAyB,KAAUC,OAAAA,CAE3H,CAEA,SAAIzpL,GACF,OAAGzI,KAAKgyL,OACChyL,KAAKgyL,OAGPhyL,KAAK02H,UAAU9gH,YAAYC,UAAU7V,KAAKiyL,kBACnD,CAEA,SAAI13J,GACF,OAAOv6B,KAAKkyL,MACd,EChBK,MAAMC,GACXp/K,WAAAA,CAAoBi/K,GAAiB,KAAjBA,OAAAA,CAEpB,CACA,aAAIZ,GACF,OAAO,CACT,CACA,SAAI3oL,GACF,OAAOzI,KAAKgyL,MACd,CAEA,OAAI/3H,GACF,MAAO,EACT,CAEAo3H,WAAAA,GACA,E,yBCDK,IAAMe,IAAev6K,GAwEzBC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKF,GAKZF,EAAAA,GAAWxK,IAAG8W,GAgBdnM,EAAAA,GAAOC,MAAKpF,GAhGR,cAA8B4rE,EAAAA,EACnC3rE,WAAAA,CAAoBs/K,EAAqC7mL,GACvD4M,MAAM5M,GAAU,KADE6mL,qBAAAA,EAAmC,KA2C/CC,qDAAuD,IAAE/5K,EAAAA,EAAAA,GAAA,uBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,wBAAAE,GAAA,OAxC/DO,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKuyL,oBAEL,IAAIC,GAA0B,EAC1BxyL,KAAKyyL,4BACPzyL,KAAK0yL,qBAAqB1yL,KAAKwL,SAASye,cAAc05G,qBAAqBthB,IAAIswE,kBAC3E3yL,KAAK2yL,iBAAiB3+K,UACxBw+K,GAA0B,IAG5BxyL,KAAK0yL,qBAAqB,MAE5B1yL,KAAKyP,UACH,KACS,CACLmjL,IAAK5yL,KAAKwL,SAASorB,SAASE,WAC5BjV,OAAQ7hB,KAAKyyL,+BAGjB9zL,IAAoB,IAAnB,IAACi0L,EAAG,OAAE/wK,GAAOljB,EACRwL,QAAQ0X,GACV7hB,KAAK6yL,wBAAwBD,EAAI77J,SAAS53B,YAE1Ca,KAAK0yL,qBAAqB,KAC5B,GAEF,CACEx2K,gBAAiBs2K,GAKvB,CAEA,8BAAYC,GAAuC,IAAD55H,EAChD,OAAO1uD,QAAyD,QAAlD0uD,EAAC74D,KAAKwL,SAASye,cAAcC,KAAKyoK,wBAAgB,IAAA95H,OAAA,EAAjDA,EAAmDpsD,QACpE,CAKA,iBAAWyhB,GACT,OAAOluB,KAAKwL,SAAS4iI,IAAI0kD,qBAAqB,QAAQ,GAAGhlH,UAAUilH,SAAS,UAC9E,CAEA,mBAAIpuG,GACF,OAAO3kF,KAAKwL,SAASye,cAAc05G,qBAAqBthB,IAAIp0F,SAAS40F,IACvE,CAEA,uBAAImwE,GACF,OAAOhzL,KAAKwL,SAASye,cAAc05G,qBAAqBthB,IAAIp0F,SAASy1F,IACvE,CAGQuvE,gBAAAA,GACN,OAAOjzL,KAAKqyL,qBAAqBvwL,MAAQ,CAAC,CAC5C,CAGQywL,iBAAAA,GAA2B,IAADz5H,EAChC,IAAIo6H,EAA2E,QAA9Dp6H,EAAG94D,KAAKwL,SAASye,cAAc05G,qBAAqBzhB,MAAMU,YAAI,IAAA9pD,OAAA,EAA3DA,EAA6Dh3D,KAC7Eg8H,GAAe54H,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOlF,KAAKizL,oBAAuBC,GAEtDlzL,KAAKmzL,oBAAoBr1D,EAC3B,CAOQq1D,mBAAAA,CAAoBjpK,GAC1BlqB,KAAK89H,gBAAkB5zG,CACzB,CAMQkpK,kCAAAA,CAAmCC,GACzC,IAAIC,EAAmBtzL,KAAKuzL,4BAA4BF,GAAsBA,EAAmBG,UAAWH,GAAsBA,EAAmBI,iBAAkB,eAEnKC,EAAmB1zL,KAAKuzL,4BAA4BF,GAAsBA,EAAmBM,UAAWN,GAAsBA,EAAmBO,gBAAiB,kBAEtK,MAAO,CACLN,iBAAkBA,EAClBI,iBAAkBA,EAClB1/K,QAA2C,IAAlCs/K,EAAiB/4J,MAAMr6B,QAAkD,IAAlCwzL,EAAiBn5J,MAAMr6B,OAE3E,CAGQwyL,oBAAAA,CAAqBW,GAC3BrzL,KAAK2yL,iBAAmB3yL,KAAKozL,mCAAmCC,EAClE,CAEQE,2BAAAA,CAA4BM,EAAkDC,EAAqDC,GACzIF,EAAcA,GAAe,GAG7B,IAAIt5J,EAAiC,GAUrC,OAZAu5J,EAAgBA,GAAiB,CAACrrL,MAAO,GAAI8F,QAAS,KAIpCA,SAAWslL,EAAY3zL,OAAS,GAChDq6B,EAAM5f,KAAK,IAAIw3K,GAA6B2B,EAAcvlL,UAG5DslL,EAAYjoI,SAAQooI,IAClBz5J,EAAM5f,KAAK,IAAIw2K,GAAqB6C,EAAKh0L,KAAKwL,UAAU,IAGnD,IAAIumL,GAAwB/xL,KAAKwL,SACpCsoL,EAAcrrL,MACdsrL,EACAx5J,EAEN,CAEA,6BAAMs4J,CAAwB54H,GAC5B,GAAKj6D,KAAKyyL,4BAINzyL,KAAKsyL,uDAAyDr4H,EAKlE,IAAGj6D,KAAKwL,SAASqI,OAAOkZ,OAAOC,aAAeijB,EAAAA,EAAAA,MAA9C,CAQAjwC,KAAKsyL,qDAAuDr4H,EAE5D,IACE,MAAMp4C,cAAsB7hB,KAAKwL,SAASyoL,QAAQC,iCAAiCj6H,GACnF,GAAIp4C,EAAQ,CACV,MAAMsyK,EAAen0L,KAAKozL,mCAAmCvxK,GACxDsyK,EAAangL,UAChB4V,EAAAA,EAAAA,KAAY,KACV5pB,KAAK2yL,iBAAmBwB,CAAY,GAG1C,MACMn0L,KAAK2yL,iBAAiB3+K,SAA+F,SAApFhU,KAAKwL,SAASye,cAAc05G,qBAAqBtgD,IAAIxhE,OAAOigG,gBAAgB4P,KAC/G1xH,KAAK0yL,qBAAqB1yL,KAAKo0L,gDAGrC,CAAE,MAAO1lL,GACP1O,KAAKwL,SAAS2L,OAAOxI,MAAM,2CAA4CD,GACnE1O,KAAK2yL,iBAAiB3+K,SAA+F,SAApFhU,KAAKwL,SAASye,cAAc05G,qBAAqBtgD,IAAIxhE,OAAOigG,gBAAgB4P,KAC/G1xH,KAAK0yL,qBAAqB1yL,KAAKo0L,gDAEnC,CAxBA,MAJKp0L,KAAK2yL,iBAAiB3+K,SACvBhU,KAAK0yL,qBAAqB1yL,KAAKq0L,8CA4BrC,CAGQD,6CAAAA,GACN,OAAOp0L,KAAKwL,SAAStN,MAAMi2B,gBAAgB0uE,8CAC7C,CAGQwxF,2CAAAA,GACN,MAAO,CACLb,UAAW,CACT,CAAC/qL,MAAO,UAAWwxD,IAAK,eACxB,CAACxxD,MAAO,2BAAQwxD,IAAK,eACrB,CAACxxD,MAAO,UAAWwxD,IAAK,eACxB,CAACxxD,MAAO,aAAWwxD,IAAK,eACxB,CAACxxD,MAAO,QAASwxD,IAAK,eACtB,CAACxxD,MAAO,cAAYwxD,IAAK,eACzB,CAACxxD,MAAO,qBAAOwxD,IAAK,eACpB,CAACxxD,MAAO,6CAAWwxD,IAAK,eACxB,CAACxxD,MAAO,6CAAWwxD,IAAK,eACxB,CAACxxD,MAAO,aAAcwxD,IAAK,gBAE7B05H,UAAW,GACXF,iBAAkB,CAAE,MAAS,GAAI,QAAW,IAC5CG,gBAAiB,CAAC,MAAS,IAG/B,GACDp7K,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBArHmC,CAAC,CAAE,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,uBAAAtJ,GAAAsJ,WAAA3D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,wBAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,wBAAAtJ,GAAAsJ,WAAAtJ,I,gBCrF/B,IAAMwhL,IAAaz8K,GAsBrBC,EAAAA,GAAWxK,IAAGyK,GAMdE,EAAAA,GAAOC,MAAKpF,GA5BV,MAMHC,WAAAA,CAAoBvH,EAA2BwZ,GAAmB,KAA9CxZ,SAAAA,EAAyB,KALrC+oL,2BAAqB,OACrBC,qCAA+B,OAC/BC,oBAA8B,EAAE,KAChCC,YAAkC,MAAIn8K,EAAAA,EAAAA,GAAA,iBAAAC,GAAA,WA6BtCm8K,eAAiB,KACrB,GAAI30L,KAAKy0L,mBAAqB,EAC1Bz0L,KAAK40L,cAAa,QAElB,GAAI50L,KAAK00L,YAAa,CAClB,MAAMG,EAAqB70L,KAAK00L,YAAY9kL,wBAAwBC,IACpE7P,KAAK40L,aAAa50L,KAAKy0L,oBAAsBI,EACjD,MACI70L,KAAK40L,aAAa50L,KAAKwL,SAASsE,OAAOglL,QAAU90L,KAAKy0L,mBAE9D,GApCAz7K,EAAAA,EAAAA,IAAehZ,MACfA,KAAKwxD,cAAcxsC,GACnBhlB,KAAKw0L,iCAAkC/kL,EAAAA,EAAAA,KAAS,IAAMzP,KAAKwL,SAASmT,OAAOC,eAAeA,IACtF5e,KAAKy0L,mBAAqB71K,CAAY,GACvC,CACC1C,iBAAiB,IAGrBlc,KAAKu0L,sBAAwBv0L,KAAKwL,SAASsE,OAAOu+H,YAAY0mD,OAAO/0L,KAAK20L,eAC9E,CAEAnjI,aAAAA,CAAcxsC,GACVhlB,KAAK00L,YAAc1vK,CACvB,CAIA,YAAIvG,GACA,OAAOze,KAAKg1L,SAChB,CAGQJ,YAAAA,CAAa9qL,GACjB9J,KAAKg1L,UAAYlrL,CACrB,CAeAuU,OAAAA,GACQre,KAAKu0L,uBACLv0L,KAAKu0L,sBAAsBl2K,UAE/Bre,KAAKw0L,kCACLx0L,KAAK00L,YAAc,IACvB,GAEHl8K,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA/BgC,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,gBAAAtJ,GAAAsJ,WAAAtJ,ICxB/B,MAAMmiL,WAAoCv2G,EAAAA,EAE/Cu8F,mBAAAA,CAAoBj2J,GAClB,OAAO,IAAIsvK,GAAct0L,KAAKwL,SAAUwZ,EAC1C,E,gBCEK,IAAMkwK,IAAuBr9K,GAgGjCC,EAAAA,GAAWxK,IAAGyK,GAEdE,EAAAA,GAAOC,MAAKpF,GAlGR,cAAsC4rE,EAAAA,EAC3C3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,GAAU,KAWV2pL,6BAAuB,OACvBC,8BAAwB,OACxBC,+BAA2D,KAAK,KA0DhEC,kCAA4C,EAAM,KAElDC,aAA2B,MAAIh9K,EAAAA,EAAAA,GAAA,oCAAAC,GAAA,WA4B/Bg9K,8BAA+B,GAnGrCx8K,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKy1L,yBAELz1L,KAAK01L,mCAAkC,EACzC,CASQA,iCAAAA,CAAkCC,GACxC31L,KAAKq1L,gCAAiC5lL,EAAAA,EAAAA,KAAS,KACpC,CACLmjL,IAAK5yL,KAAKwL,SAASorB,SAASE,eAG/B5M,IACKlqB,KAAK41L,eAAe1rK,EAAK0oK,KAC3B5yL,KAAK61L,sBAEL71L,KAAKwL,SAAS2iC,WAAW5sB,MAAK4sB,IAAe,IAAD2nJ,EACb,QAA7BA,EAAA3nJ,EAAWC,0BAAkB,IAAA0nJ,GAA7BA,EAA+BxjG,UAAU,CACvCc,uBAAuB,GACvB,GAGN,GACC,CAACl3E,gBAAiBy5K,GACzB,CAEQI,qCAAAA,GACH/1L,KAAKq1L,iCACNr1L,KAAKq1L,iCACLr1L,KAAKq1L,+BAAiC,KAE1C,CAGQI,sBAAAA,GACNz1L,KAAKm1L,wBAA0Bn1L,KAAKwL,SAAS63E,IAAIoxC,OAAOG,WAAW50H,KAAKg2L,YAAYv/J,KAAKz2B,OACzFA,KAAKo1L,yBAA2Bp1L,KAAKwL,SAAS63E,IAAIoxC,OAAOye,YAAYlzI,KAAKi2L,aAAax/J,KAAKz2B,MAC9F,CAEQk2L,0BAAAA,GACHl2L,KAAKm1L,yBACNn1L,KAAKm1L,wBAAwBvpK,MAG5B5rB,KAAKo1L,0BACNp1L,KAAKo1L,yBAAyBxpK,KAElC,CAEQuqK,oBAAAA,CAAqBphL,EAAkBwjI,GAC7C,MAAM,cAAN34I,OAAqBmV,EAAQ,UAAAnV,OAAS24I,EAAS,IAAM,IACvD,CAEQq9C,cAAAA,CAAehD,GACrB,QAAGA,EAAIpwD,KAAK14H,MAAMk7I,WAAW,YAK/B,CAKQgxC,WAAAA,CAAYI,GAEdp2L,KAAK41L,eAAe51L,KAAKwL,SAASorB,SAASE,cAC7C92B,KAAKu1L,aAAev1L,KAAKwL,SAASorB,SAASE,YAG7C92B,KAAK+1L,wCACL/1L,KAAKwL,SAASorB,SAASjc,KAAK3a,KAAKm2L,qBAAqBC,EAAYrhL,SAAUqhL,EAAY79C,SAAS+zC,SAAQ,IAAMtsL,KAAK01L,mCAAkC,IACxJ,CAEQO,YAAAA,GACN,GAAGj2L,KAAKs1L,iCAEN,YADAt1L,KAAKs1L,kCAAmC,GAI1C,IAAIe,EAAcr2L,KAAKu1L,aAAev1L,KAAKu1L,aAAap2L,WAAaa,KAAKwL,SAASorB,SAASE,WAAWC,SAAS53B,WAChHa,KAAKwL,SAASorB,SAASjc,KAAK07K,EAC9B,CAKQC,gCAAAA,GACNt2L,KAAKu2L,6BAA+Bz5H,KAAKD,KAC3C,CAGA,yBAAMg5H,GACJ,GAAG71L,KAAKw1L,6BACN,OAGF,IAAIhzD,EAAOxiI,KAAKwL,SAASorB,SAASE,WAAW0rG,KAE7C,GAAGA,EAAKxuH,QACN,OAGF,IAEIwiL,EAFkBh0D,EAAK14H,MAESzE,MAAM,KAE1C,GAA8C,UAA1CmxL,EAAc,IAAM,IAAIx2K,eACoB,UAA1Cw2K,EAAc,IAAM,IAAIx2K,cAC5B,OAEF,IAAIjL,EAAWyhL,EAAc,GACzB3jG,EAAW2jG,EAAc,GAEzBvjL,QAAiBjT,KAAKwL,SAAS2P,MAAM8mH,YAAYliG,SAAShrB,IAC9D,IAAI9B,EAGF,OAFAjT,KAAKi2L,oBACLj2L,KAAKs2L,mCAIP,IAAIpjL,EAAqC,CACvCC,WAAyB,MAAb0/E,GAGd7yF,KAAKw1L,8BAA+B,EACpCx1L,KAAKk2L,6BACL,UACQjjL,EAASO,KAAKN,EACtB,CACA,MAAOxE,GACL1O,KAAKi2L,eACLj2L,KAAKwL,SAAS2L,OAAOxI,MAAM,iCAAD/O,OAAkCI,KAAKwL,SAASorB,SAASE,WAAW33B,YAAcuP,EAC9G,CAAC,QAEC1O,KAAKw1L,8BAA+B,EACpCx1L,KAAKy1L,yBACLz1L,KAAKs2L,kCACP,CACF,CAEAG,iBAAAA,GACEz2L,KAAKs1L,kCAAmC,EACxCt1L,KAAKwL,SAASszB,gBAAgB43J,uBAChC,GAEDl+K,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gCAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oCAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,oCAAAtJ,GAAAsJ,WAAAtJ,ICpKD,MAAM6tG,GAAeC,EAAQ,OAEtB,MAAM+1E,GACX5jL,WAAAA,CAAoB6jL,EAAmC31E,GAA0B,KAA7D21E,SAAAA,EAAyB,KAAU31E,QAAAA,CAEvD,CAEQ41E,qBAAAA,GAEN,IACE,IAAIC,EAAkB92L,KAAK42L,SAAS/1D,QAAQk2D,EAAAA,GAC5C,GAAGD,EACD,OAAOA,EAAWE,UAEtB,CAAE,MAAOtoL,GACP1O,KAAKihH,QAAQtyG,MAAM,+CAAgDD,EACrE,CAEA,OAAO,IACT,CAEQuoL,gCAAAA,GACN,IACE,IAAIC,EAAyBl3L,KAAK42L,SAAS/1D,QAAQ,wBACnD,GAAGq2D,EACD,OAAOA,CAEX,CAAE,MAAOxoL,GACP1O,KAAKihH,QAAQtyG,MAAM,wDAAyDD,EAC9E,CAGA,OAAO,IACT,CAEA6yG,YAAAA,GACE,IAAIyQ,EAAuChyH,KAAK62L,wBAC5CK,EAAyBl3L,KAAKi3L,mCAGlC,OAAGjlE,GAAqBklE,GACtBllE,EAAqBA,GAAqB,CAAC,EAExCklE,IACDllE,EAAkB9P,MAAQ8P,EAAkB9P,OAAS,CAAC,EACtD8P,EAAkB9P,MAAMljG,QAAUgzG,EAAkB9P,MAAMljG,SAAW,CAAC,EACtE2hG,GAAaqR,EAAkB9P,MAAMljG,QAASk4K,IAGzCllE,GAGF,IACT,EClDK,MAAMmlE,WAAwBz4G,EAAAA,EAKjC3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,GAAU,KAJV21G,wBAAkB,EAKxB,IAAIi2E,EAA0B,IAAIT,GAAwB32L,KAAKwL,SAASoyC,aAAc59C,KAAKwL,SAAS2L,QACpGnX,KAAKmhH,mBAAqBi2E,EAAwB71E,gBAAkB,CAAC,CAEvE,CAEA81E,YAAAA,GACE,OAAOr3L,KAAKmhH,mBAAmBe,OAAUliH,KAAKmhH,mBAAmBe,MAAMoQ,SACzE,CAEAyR,cAAAA,GAEE,IAAInX,EAAY5sH,KAAKmhH,mBAAmBe,OAAUliH,KAAKmhH,mBAAmBe,MAAMo1E,sBAChF,OAAI1qE,EAID7nH,EAAAA,MAAMC,SAAS4nH,GACT,CAACA,GAGP7nH,EAAAA,MAAM+qE,SAAS88C,GACTA,EAAUvnH,MAAM,KAAKkL,KAAI+wH,GAAMvhG,SAASuhG,KAAK7hH,QAAO6hH,GAAMv8H,EAAAA,MAAMC,SAASs8H,KAG/Ev8H,EAAAA,MAAMgrE,QAAQ68C,GACRA,EAAUr8G,KAAI+wH,GAAMvhG,SAASkZ,OAAOqoF,MAAM7hH,QAAO6hH,GAAMv8H,EAAAA,MAAMC,SAASs8H,KAGxE,GAfE,EAgBX,CAEAi2D,mBAAAA,GAAgD,IAADxzE,EAAAC,EAC3C,OAA8B,QAAvBD,EAAA/jH,KAAKmhH,0BAAkB,IAAA4C,GAAS,QAATC,EAAvBD,EAAyBS,eAAO,IAAAR,OAAT,EAAvBA,EAAkCS,WAAY,CAAC,CAC1D,E,mBClCG,IAAM+yE,IAAc3/K,GA2BxBC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKF,GAaZC,EAAAA,GAAOC,MAAKpF,GA3CR,cAA6B4rE,EAAAA,EAClC3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,sBAAAC,GAAA,OAEhBQ,EAAAA,EAAAA,IAAehZ,KACjB,CAEA,cACIgiL,GAAuB,IAADyV,EACxB,OAAQ1yL,EAAAA,MAAMkP,kBAAqC,QAApBwjL,EAACz3L,KAAK03L,sBAAc,IAAAD,OAAA,EAAnBA,EAAqBE,UACvD,CAEA,6BACWC,GACT,MAAkC,oBAA3B53L,KAAK63L,iBACd,CAEA,+BACWC,GACT,MAAkC,sBAA3B93L,KAAK63L,iBACd,CAEA,qBACYA,GAA0C,IAADE,EACnD,OAA0B,QAAnBA,EAAA/3L,KAAK03L,sBAAc,IAAAK,OAAA,EAAnBA,EAAqBC,cAAe,IAC7C,CAMAC,YAAAA,CAAa5I,GAEPrvL,KAAKgiL,YACPhiL,KAAKk4L,cAGPl4L,KAAK03L,eAAiB,CACpBM,YAAa3I,EAAqB,oBAAsB,kBACxDsI,UAAW33L,KAAKwL,SAAS8e,KAAK6tK,iBAElC,CAGAD,WAAAA,GACKl4L,KAAKgiL,aACNhiL,KAAK03L,eAAiB,KAE1B,IACDv7K,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,cA1CEo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,cAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,6BAKRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,6BAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,+BAKRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,+BAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,qBAKRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,qBAAAtJ,GAAAsJ,WAAA5D,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAM0C,IAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,gBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,eAAApE,IAAAyE,OAAAC,yBAAA5J,GAAAsJ,UAAA,eAAAtJ,GAAAsJ,WAAAtJ,I,gBCnClD,MAAMslL,WAA2B15G,EAAAA,EACtC3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,GAEN,MAAM6sL,EAAyBr4L,KAAKs4L,2CACjCD,EACDr4L,KAAKwL,SAASoyC,aAAaykF,QAAQ//B,GAAAA,EAAiBi2F,iCAAkCF,GAEtFr4L,KAAKwL,SAASoyC,aAAaE,WAAWwkD,GAAAA,EAAiBi2F,kCAGzDv4L,KAAKwL,SAAS63E,IAAIoxC,OAAO+e,uBAAuBxzI,KAAKw4L,wBAAwB/hK,KAAKz2B,MACpF,CAEQw4L,uBAAAA,GACN,MAAMC,EAA2Bz4L,KAAK04L,4BACnCD,GAAwE,aAA5CA,EAAyBE,gBACtD34L,KAAKwL,SAASorB,SAASiuF,SAAS4zE,EAAyBG,YAAc,gBAE3E,CAEA,+BAAIF,GACF,OAAO14L,KAAKwL,SAASoyC,aAAaijF,QAAsCv+B,GAAAA,EAAiBi2F,iCAC3F,CAEA,yBAAIM,GACF,OAAO1uL,QAAQnK,KAAK04L,4BACtB,CAEA,oBAAII,GACF,OAAO94L,KAAK64L,uBAAyB74L,KAAKwL,SAASgW,aAAassH,KAClE,CAEA,oBAAIirD,GACF,OAAO/4L,KAAK64L,uBAAyB74L,KAAKwL,SAASgW,aAAaqsH,KAClE,CAEQyqD,wCAAAA,GACN,MAAMU,EAA+Bh5L,KAAKwL,SAASorB,SAASE,WAAW+xG,YAAYC,cAAc,sBACjG,IAAIkwD,EACF,OAAO,KAGT,GAAGA,EAA6Bh0C,WAAW,QACzC,MAAO,CACL4zC,YAAaI,GAIjB,MAAMC,EAAwBC,GAAAA,EAAEC,SAASH,GACzC,IAAIC,EACF,OAAO,KAGT,IAAIL,EACAD,EACAS,EAAaH,EAAsBnG,qBAAqB,eAU5D,OATIsG,GAAcA,EAAWl5L,OAAS,IACpC04L,EAAcQ,EAAW94J,KAAK,GAAG+4J,aAGnCD,EAAaH,EAAsBnG,qBAAqB,kBACpDsG,GAAcA,EAAWl5L,OAAS,IACpCy4L,EAAiBS,EAAW94J,KAAK,GAAG+4J,aAGnCT,EACM,CACLA,YAAaA,EACbD,eAAgBA,QAHpB,CAMF,E,wCCxDF,MAAMW,GAAyBttL,GAAAA,MAC3B,IAAM,gCAAuCuV,MAAK5iB,IAAA,IAAC,uBAAC26L,GAAuB36L,EAAA,MAAM,CAAC4zD,QAAS+mI,EAAuB,MAEhHC,GAA6BvtL,GAAAA,MAC/B,IAAM,gCAAoDuV,MAAKjf,IAAA,IAAC,2BAACi3L,GAA2Bj3L,EAAA,MAAM,CAACiwD,QAASgnI,EAA2B,MAErIC,GAA8BxtL,GAAAA,MAChC,IAAM,gCAAoDuV,MAAKza,IAAA,IAAC,4BAAC0yL,GAA4B1yL,EAAA,MAAM,CAACyrD,QAASinI,EAA4B,MAEvIC,GAAyBztL,GAAAA,MAC3B,IAAM,gCAAwDuV,MAAK1W,IAAA,IAAC,uBAAC4uL,GAAuB5uL,EAAA,MAAM,CAAC0nD,QAASknI,EAAuB,MAGjIC,GAAiC1tL,GAAAA,MACnC,IAAM,gCAAuEuV,MAAKvW,IAAA,IAAC,+BAAC0uL,GAA+B1uL,EAAA,MAAM,CAACunD,QAASmnI,EAA+B,MAGhKC,GAAoB3tL,GAAAA,MACtB,IAAM,gCAA8CuV,MAAKkC,IAAA,IAAC,kBAACk2K,GAAkBl2K,EAAA,MAAM,CAAC8uC,QAASonI,EAAkB,MAGtGC,GAAwD,CACjE,CACI73E,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,IAAmB,GAAAtlH,OAAOwlH,EAAAA,KACrCy0E,OAAO,EACP3vK,KAAM,CAACisB,UAAWgqC,GAAAA,IAClB25G,aAAc9wH,GAAAA,GACdvpE,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC3CL,EAAAA,GAAAA,KAAC65L,GAA0B,WAIvC,CACIx3E,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,aAAAtlH,OAAawlH,EAAAA,GAAmB,WAC9Dy0E,OAAO,EACP3vK,KAAM,CAACisB,UAAWopC,GAAAA,IAClBu6G,aAAcC,GAAAA,GACdt6L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC3CL,EAAAA,GAAAA,KAAC85L,GAA2B,CAACjqL,UAAWgwE,GAAAA,YAIpD,CACIwiC,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,iBAAAtlH,OAAiBwlH,EAAAA,GAAmB,eAClEy0E,OAAO,EACP3vK,KAAM,CAACisB,UAAW+pC,GAAAA,IAClB45G,aAAcE,GAAAA,GACdv6L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC3CL,EAAAA,GAAAA,KAAC85L,GAA2B,CAACjqL,UAAW2wE,GAAAA,YAIpD,CACI6hC,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,mBAAAtlH,OAAmBwlH,EAAAA,GAAmB,iBACpEy0E,OAAO,EACP3vK,KAAM,CAACisB,UAAWypC,GAAAA,IAClBk6G,aAAcG,GAAAA,GACdx6L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC3CL,EAAAA,GAAAA,KAAC85L,GAA2B,CAACjqL,UAAWqwE,GAAAA,YAIpD,CACImiC,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,+BAAAtlH,OAA+BwlH,EAAAA,GAAmB,6BAChFy0E,OAAO,EACP3vK,KAAM,CAACisB,UAAW8pC,GAAAA,IAClB65G,aAAcI,GAAAA,GACdz6L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC3CL,EAAAA,GAAAA,KAAC85L,GAA2B,CAACjqL,UAAW0wE,GAAAA,YAIpD,CACI8hC,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,oBAAAtlH,OAAoBwlH,EAAAA,GAAmB,kBACrEy0E,OAAO,EACP3vK,KAAM,CAACisB,UAAWqpC,GAAAA,GAClBs6G,aAAcK,GAAAA,GACd16L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC3CL,EAAAA,GAAAA,KAAC85L,GAA2B,CAACjqL,UAAWiwE,GAAAA,WAIpD,CACIuiC,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,gBAAAtlH,OAAgBwlH,EAAAA,GAAmB,cACjEy0E,OAAO,EACP3vK,KAAM,CAACisB,UAAWspC,GAAAA,IAClBq6G,aAAcM,GAAAA,GACd36L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC3CL,EAAAA,GAAAA,KAAC85L,GAA2B,CAACjqL,UAAWkwE,GAAAA,YAIpD,CACIsiC,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,mBAAAtlH,OAAmBwlH,EAAAA,GAAmB,iBACpEy0E,OAAO,EACP3vK,KAAM,CAACisB,UAAWipC,GAAAA,IAClB06G,aAAc3gH,GAAAA,GACd15E,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC3CL,EAAAA,GAAAA,KAAC85L,GAA2B,CAACjqL,UAAW6vE,GAAAA,YAIpD,CACI2iC,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,sBAAAtlH,OAAsBwlH,EAAAA,GAAmB,oBACvEy0E,OAAO,EACPC,aAAcvpI,GAAAA,GACd9wD,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC3CL,EAAAA,GAAAA,KAAC+5L,GAAsB,CAACY,YAAa5jG,GAAAA,EAAkB6jG,YAAaC,4BAA4B,EAAMC,iBAAiB,WAInI,CACIz4E,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,uBAAAtlH,OAAuBwlH,EAAAA,GAAmB,qBACxEy0E,OAAO,EACPC,aAActpI,GAAAA,GACd/wD,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC3CL,EAAAA,GAAAA,KAAC+5L,GAAsB,CAACY,YAAa5jG,GAAAA,EAAkBgkG,eAAgBF,4BAA4B,EAAOC,iBAAiB,WAIvI,CACIz4E,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,iBAAAtlH,OAAiBwlH,EAAAA,GAAmB,eAClEy0E,OAAO,EACPC,aAAcrpI,GAAAA,GACdhxD,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SACpBtiJ,EAAAA,GAAAA,KAACg6L,GAA8B,OAFLjpI,GAAAA,KAOtC,CACIsxD,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,mBAAAtlH,OAAmBwlH,EAAAA,GAAmB,iBACpEy0E,OAAO,EACP3vK,KAAM,CAACisB,UAAWmpC,GAAAA,IAClB7/E,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACxBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC3CL,EAAAA,GAAAA,KAAC85L,GAA2B,CAACjqL,UAAW+vE,GAAAA,YAIpD,CACIyiC,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,iBAAAtlH,OAAiBwlH,EAAAA,GAAmB,eAClEy0E,OAAO,EACPC,aAAcY,GAAAA,GACdj7L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAACL,EAAAA,GAAAA,KAACi6L,GAAiB,OAEnD,CACI53E,MAAO,CAAC,GAADniH,OAAIslH,EAAAA,GAAmB,kBAAAtlH,OAAkBwlH,EAAAA,GAAmB,gBACnEy0E,OAAO,EACPp6L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAACL,EAAAA,GAAAA,KAACkqD,GAAAA,mBAAkB,QCpIlD+wI,GAAqB3uL,GAAAA,MACvB,IAAM,gCAA2DuV,MAAK5iB,IAAA,IAAC,mBAACg8L,GAAmBh8L,EAAA,MAAM,CAAC4zD,QAASooI,EAAmB,MAG5HC,GAAmB5uL,GAAAA,MACrB,IAAM,gCAAuDuV,MAAKjf,IAAA,IAAC,iBAACs4L,GAAiBt4L,EAAA,MAAM,CAACiwD,QAASqoI,EAAiB,MAEpHC,GAA6B7uL,GAAAA,MACjC,IAAM,+BAAwEuV,MAAKza,IAAA,IAAC,2BAAC+zL,GAA2B/zL,EAAA,MAAM,CAACyrD,QAASsoI,EAA2B,MAGvJnB,GAAiC1tL,GAAAA,MACnC,IAAM,gCAAkFuV,MAAK1W,IAAA,IAAC,+BAAC6uL,GAA+B7uL,EAAA,MAAM,CAAC0nD,QAASmnI,EAA+B,MAG3KoB,GAA8B9uL,GAAAA,MAClC,IAAM,gCAA0EuV,MAAKvW,IAAA,IAAC,4BAAC8vL,GAA4B9vL,EAAA,MAAM,CAACunD,QAASuoI,EAA4B,MAG3JnB,GAAoB3tL,GAAAA,MACxB,IAAM,gCAAyDuV,MAAKkC,IAAA,IAAC,kBAACk2K,GAAkBl2K,EAAA,MAAM,CAAC8uC,QAASonI,EAAkB,MAEtH/vI,GAAqB59C,GAAAA,MACzB,IAAM,wCAA6EuV,MAAKmC,IAAA,IAAC,mBAACkmC,GAAmBlmC,EAAA,MAAM,CAAC6uC,QAAS3I,EAAmB,MAG3I,MAAMmxI,WAAoCr8G,EAAAA,EAC/Cs8G,uBAAAA,GACE,MAAO,CACLC,cAAe,CACbx7L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAACL,EAAAA,GAAAA,KAACk7L,GAAgB,OAEhDM,OAAQ,CACN,CACEn5E,MAAO,CAAC,KACR83E,OAAO,EACP3vK,KAAM,CAACisB,UAAWgqC,GAAAA,IAClB25G,aAAc9wH,GAAAA,GACdvpE,OAAQA,KACJC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACZL,EAAAA,GAAAA,KAACi7L,GAAkB,OAG3B,CACE54E,MAAO,CAAC,SAAU,eAAgB,iBAAkB,gBAAiB,kBAAmB,iBAAkB,6BAA8B,kBAAmB,aAAc,iBACzK83E,OAAO,EACP3vK,KAAM,CAACisB,UAAWopC,GAAAA,IAClBu6G,aAAcC,GAAAA,GACdt6L,OAAQA,KACJC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACZL,EAAAA,GAAAA,KAACi7L,GAAkB,OAG3B,CACE54E,MAAO,CAAC,aAAc,kBAAmB,OAAQ,eAAgB,aAAc,aAC/E83E,OAAO,EACP3vK,KAAM,CAACisB,UAAW+pC,GAAAA,IAClB45G,aAAcE,GAAAA,GACdv6L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,4BACR83E,OAAO,EACP3vK,KAAM,CAACisB,UAAW8pC,GAAAA,IAClB65G,aAAcI,GAAAA,GACdz6L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,gCAAiC,YAAa,UAAW,WACjE83E,OAAO,EACP3vK,KAAM,CAACisB,UAAW6pC,GAAAA,IAClB85G,aAAcqB,GAAAA,GACd17L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,mBACR83E,OAAO,EACP3vK,KAAM,CAACisB,UAAW4pC,GAAAA,IAClB+5G,aAAcsB,GAAAA,GACd37L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,iCAAkC,cAC1C83E,OAAO,EACP3vK,KAAM,CAACisB,UAAW2pC,GAAAA,IAClBg6G,aAAcuB,GAAAA,GACd57L,OAAQA,KAAKC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACzBL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,yBAA0B,YAAa,YAC/C83E,OAAO,EACP3vK,KAAM,CAACisB,UAAWspC,GAAAA,IAClBq6G,aAAcM,GAAAA,GACd36L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,kCAAmC,sBAC3C83E,OAAO,EACP3vK,KAAM,CAACisB,UAAW0pC,GAAAA,IAClBi6G,aAAcwB,GAAAA,GACd77L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,0BAA0B,gBAAiB,iBAAkB,SAAU,oBAAqB,oBAAqB,oBAAqB,eAAgB,cAAe,kBAAmB,eAAgB,aAAc,aAC9N83E,OAAO,EACP3vK,KAAM,CAACisB,UAAWqpC,GAAAA,GAClBs6G,aAAcK,GAAAA,GACd16L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,mBACR83E,OAAO,EACPC,aAAcvpI,GAAAA,GACd9wD,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACm7L,GAA0B,CAAqCR,YAAa5jG,GAAAA,EAAkB6jG,YAAaC,4BAA4B,EAAMgB,qBAAqB,GAAlI9kG,GAAAA,EAAkB6jG,cADpB,mBAInC,CACEv4E,MAAO,CAAC,oBACR83E,OAAO,EACPC,aAAc1gH,GAAAA,GACd35E,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACo7L,GAA2B,CAACP,4BAA4B,KAD1B,oBAInC,CACEx4E,MAAO,CAAC,oBACR83E,OAAO,EACPC,aAActpI,GAAAA,GACd/wD,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACm7L,GAA0B,CAAwCR,YAAa5jG,GAAAA,EAAkBgkG,eAAgBF,4BAA4B,EAAMgB,qBAAqB,GAAxI9kG,GAAAA,EAAkBgkG,iBADnB,oBAIpC,CACE14E,MAAO,CAAC,cACR83E,OAAO,EACPC,aAAcrpI,GAAAA,GACdhxD,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACg6L,GAA8B,KADCjpI,GAAAA,KAIpC,CACEsxD,MAAO,CAAC,cACR73F,KAAM,CAACsxK,sBAAuB,GAC9B3B,OAAO,EACPC,aAAcY,GAAAA,GACdj7L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAACL,EAAAA,GAAAA,KAACi6L,GAAiB,OAEjD,CACE53E,MAAO,CAAC,eAAgB,gBAAiB,kBAAmB,gBAC5D83E,OAAO,EACP3vK,KAAM,CAACisB,UAAWipC,GAAAA,IAClB06G,aAAc3gH,GAAAA,GACd15E,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,qBACR83E,OAAO,EACP3vK,KAAM,CAACisB,UAAWipC,GAAAA,IAClB06G,aAAc3gH,GAAAA,GACd15E,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,sBACR83E,OAAO,EACP3vK,KAAM,CAACisB,UAAWkpC,GAAAA,IAClBy6G,aAAc3gH,GAAAA,GAAuB,IAAMhtD,GAAAA,GAC3C1sB,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,gBACR83E,OAAO,EACP3vK,KAAM,CAACisB,UAAWypC,GAAAA,IAClBk6G,aAAcG,GAAAA,GACdx6L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,iBAAkB,cAAe,iBACzC83E,OAAO,EACP3vK,KAAM,CAACisB,UAAWwpC,GAAAA,IAClBm6G,aAAc2B,GAAAA,GACdh8L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,uBAAwB,wBAAyB,0BAA2B,uBAAwB,oBAAqB,kBAAmB,oBAAqB,oBACzK83E,OAAO,EACP3vK,KAAM,CAACisB,UAAWupC,GAAAA,IAClBo6G,aAAc4B,GAAAA,GACdj8L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC1BL,EAAAA,GAAAA,KAACi7L,GAAkB,OAGvB,CACE54E,MAAO,CAAC,gBACR83E,OAAO,EACPp6L,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAACL,EAAAA,GAAAA,KAACkqD,GAAkB,OAElD,CACEm4D,MAAO,CAAC,iBACR83E,OAAO,EACPp6L,OAAQA,KAAO+I,EAAAA,GAAAA,MAAC2Z,GAAAA,EAAa,CAAApiB,SAAA,EACXL,EAAAA,GAAAA,KAACwiB,GAAAA,EAAkB,CACD1H,iBAAiB,EACjBF,YAAa,SACbD,WAAY,UAHL,gBAIzB3a,EAAAA,GAAAA,KAAC0a,GAAAA,EAAe,CACCI,iBAAiB,EACjBF,YAAa,SACbD,WAAY,SACZE,yBAA0B,wCAJrB,mBAO1C,CACEwnG,MAAO,CAAC,iBACR83E,OAAO,EACP3vK,KAAM,CAACyxK,YAAY,EAAMxlJ,UAAWiqC,GAAAA,IACpC3gF,OAAQA,KAAMC,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAACL,EAAAA,GAAAA,KAACi7L,GAAkB,UAE/Cf,IAGT,E,gBCvSK,MAAMgC,WAAmBC,GAAAA,EAOlBC,aAAAA,GACN,OAAO,CACX,E,oDCKG,IAAMC,IAAclkL,GAuCxBC,EAAAA,GAAWxK,IAAGyK,GAKdE,EAAAA,GAAOC,MAAKpF,GA5CR,cAA6B4rE,EAAAA,EAElC3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,oBAAAC,GAAA,WAuCVwjL,iBAA4B,MArClChjL,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASorB,SAASE,aACxC87J,GAAQ5yL,KAAKi8L,oBAAoBrJ,IAClC,CACE12K,iBAAiB,IAGrBlc,KAAKyP,UACH,IAAMzP,KAAKwL,SAASkE,KAAKC,eACxBA,IAAkB,IAADusL,EAChB,GAAIvsL,EAAc,CAEhB,IAAIwsL,EAAcn8L,KAAKwL,SAASuP,6BAA6BqhL,WAAW7iF,GAAAA,IAExE,GAAIx0G,EAAAA,MAAMkP,kBAAkBkoL,GAAc,CACxC,IAAIE,EAAgBr8L,KAAKwL,SAASoyC,aAAaijF,QAAQ,0BAClD97H,EAAAA,MAAMkP,kBAAkBooL,IAC3Br8L,KAAKwL,SAASoyC,aAAaE,WAAW,yBAE1C,CAEA,IAAIw+I,EAAkBH,GAAeA,EAAYI,YAAcJ,EAAYI,WAAWC,aAEjFz3L,EAAAA,MAAMkP,kBAAkBqoL,IAC3Bt8L,KAAKwL,SAASoyC,aAAa+pF,QAAQ,yBAA0B20D,EAEjE,CAEAt8L,KAAKy8L,YAA6B,QAAlBP,EAACl8L,KAAKk2C,oBAAY,IAAAgmJ,OAAA,EAAjBA,EAAmB7jB,gBAAgB,GAG1D,CAQQ4jB,mBAAAA,CAAoBrJ,GAAiB,IAAD8J,EAC1C,GAAyB,QAAzBA,EAAI18L,KAAKg8L,wBAAgB,IAAAU,GAArBA,EAAuBC,OAAO/J,EAAI77J,UACpC,OAGF,IAAI6lK,EAAuB58L,KAAKwL,SAASoxL,qBAAqB5B,0BAC1D/mG,GAAQ4oG,EAAAA,GAAAA,GAAajK,EAAI77J,SAAS53B,WAAYy9L,EAAqB1B,QAEvE,GAAIjnG,EAAO,CAET,GADkBj0F,KAAKy8L,YAAYxoG,EAAMokF,iBAEvC,OAEFr4K,KAAK88L,kCACL98L,KAAKk2C,aAAe,IAAI0lJ,GAAW57L,KAAK+8L,mBAAmB9oG,EAAMokF,iBAAkBpkF,EAAM+oG,aACzFh9L,KAAKi9L,8BACP,MACMj9L,KAAKwL,SAAS+9B,UAAUtuB,UAC1Bjb,KAAKk2C,aAAe,IAAIgnJ,GAAAA,EAAcl9L,KAAKwL,SAAS+9B,UAAU4zJ,qBAE9Dn9L,KAAKk2C,aAAe,IAAIgnJ,GAAAA,EAAcN,EAAqB3B,cAAcx7L,QAG7EO,KAAKg8L,iBAAmBpJ,EAAI77J,SAM5BoT,YAAW,IAAMnqC,KAAKwL,SAASsE,OAAOs7B,SAAS,EAAG,IAAI,IACxD,CAEQ2xJ,kBAAAA,CAAmB1kB,GACzB,IAAK,IAADx/G,EACF,IAAIukI,EAAkF,QAAzDvkI,EAAG74D,KAAKwL,SAASye,cAAcC,KAAKmzK,6BAAqB,IAAAxkI,OAAA,EAAtDA,EAAwDukI,0BACxF,GAAIA,EACF,IAAK,MAAM1xF,KAAQ2sE,EAAgBt2D,MACjC,GAAIq7E,EAA0B1xF,GAE5B,OADA2sE,EAAgBnuJ,KAAKisB,UAAYinJ,EAA0B1xF,GACpD2sE,EAIb,OAAOA,CACT,CAAE,MAAO7zK,GAEP,OADAxE,KAAKwL,SAAS2L,OAAOxI,MAAM,uDAAwDnK,GAC5E6zK,CACT,CACF,CAEQykB,+BAAAA,GACN98L,KAAKs9L,+BAA+B1xI,SAAQ2xI,IAC1Cv9L,KAAKwL,SAAS4iI,IAAI/qF,KAAKyqB,UAAUyvD,OAAOggE,EAAS,GAErD,CAEQN,4BAAAA,GACNj9L,KAAKs9L,+BAA+B1xI,SAAQ2xI,IAC1Cv9L,KAAKwL,SAAS4iI,IAAI/qF,KAAKyqB,UAAUC,IAAIwvH,EAAS,GAElD,CAEQD,4BAAAA,GAA0C,IAADE,EAAAC,EAC/C,OAAsB,QAAlBD,EAACx9L,KAAKk2C,oBAAY,IAAAsnJ,GAAiB,QAAjBC,EAAjBD,EAAmBnlB,uBAAe,IAAAolB,GAAlCA,EAAoC3D,aAIlC95L,KAAKk2C,aAAamiI,gBAAgByhB,aAAaz0L,MAAM,KAAKoa,QAAO89K,GAAYA,IAH3E,EAKX,CAEAG,YAAAA,CAAahyF,GAEX,SADYmxF,EAAAA,GAAAA,GAAanxF,EAAKvsG,WAAYa,KAAKwL,SAASoxL,qBAAqB5B,0BAA0BE,OAMzG,CAEQyC,qBAAAA,GACN,IAAItB,EAAgBr8L,KAAKwL,SAASoyC,aAAaijF,QAAQ,uBAClD97H,EAAAA,MAAMkP,kBAAkBooL,IAG3Br8L,KAAKwL,SAASoyC,aAAaE,WAAW,sBAE1C,CAEA2+I,WAAAA,CAAYpkB,GACV,IAEEr4K,KAAK29L,wBAEL,IAAItB,EAAgBr8L,KAAKwL,SAASoyC,aAAaijF,QAAQ,0BAEvD,IAAK,IAAIx9F,EAAQ,EAAGA,GAA6B,QAAxBu6J,EAAGvlB,EAAgBt2D,aAAK,IAAA67E,OAAA,EAArBA,EAAuB19L,QAAQmjC,IAAS,CAAC,IAADu6J,EAAAC,EAClE,IAAIC,EAA8C,QAA/BD,EAAGxlB,EAAgBt2D,MAAM1+E,UAAM,IAAAw6J,OAAA,EAA5BA,EAA8B79K,cACpD,GAAIq8K,GAAiBA,EAAcyB,GAEjC,OADA99L,KAAKwL,SAASorB,SAASjc,KAAK0hL,EAAcyB,KACnC,CAEX,CACA,OAAO,CACT,CAAE,MAAOpvL,GAEP,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,8CAAgDD,IACpE,CACT,CACF,GACD8J,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,uBAAAtJ,GAAAsJ,WAAAtJ,I,aCjKM,IAAMirL,IAAclmL,GA2ExBI,EAAAA,GAAOC,MAAKpF,GA3ER,cAA6B4rE,EAAAA,EAElC3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,yBAAAC,GAAA,OAEhBQ,EAAAA,EAAAA,IAAehZ,MAIfA,KAAKyP,UACH,IAAMzP,KAAKmoD,SACVA,IACIA,EACDnoD,KAAKg+L,mBAELh+L,KAAKi+L,kBAEPj+L,KAAKwL,SAAS63E,IAAI++D,4BAA4Bj6F,EAAO,GAG3D,CAOA+1I,gBAAAA,CAAiBC,GAKf,OAJAv0K,EAAAA,EAAAA,KAAY,KACV5pB,KAAKo+L,kBAAkBzjL,KAAKwjL,EAAS,IAGhC,CACLE,YAAaA,KACX,MAAMh7J,EAAQrjC,KAAKo+L,kBAAkBzzG,WAAU3a,GAAKA,IAAMmuH,IACvD96J,GAAS,IACVzZ,EAAAA,EAAAA,KAAY,KACV5pB,KAAKo+L,kBAAkB/9J,OAAOgD,EAAO,EAAE,GAE3C,EAGN,CAGA,UAAIxgB,GACF,MAAMy7K,EAAWt+L,KAAKo+L,kBAAkB3+K,QAAOuwD,GAAKA,EAAEuuH,eACdhuL,KAAIy/D,GAAKA,EAAEugH,qBACX9wK,QAAOoD,IAAW9d,EAAAA,MAAMkP,kBAAkB4O,KAClF,GAAuB,IAApBy7K,EAASp+L,OAIZ,OAAOmW,KAAK09B,OAAOuqJ,EACrB,CAEAE,qBAAAA,CAAsBC,GACpB,IAAIC,EAAQ,EACZ,IAAI,IAAI1uH,KAAKhwE,KAAKo+L,kBACbK,EAAUzuH,IACX0uH,IAGJ,OAAOA,CACT,CAGA,UACIv2I,GAEF,OAAOnoD,KAAKo+L,kBAAkB7tL,KAAIy/D,GAAKA,EAAEuuH,eACXn5B,MAAKm5B,GAAgBA,GACrD,CAIAI,YAAAA,GACE3+L,KAAKo+L,kBAAkBxyI,SAAQokB,GAAKA,EAAEsjG,oBACxC,CAEA0qB,gBAAAA,GACEh+L,KAAKwL,SAAS4iI,IAAI4vD,kBAEpB,CACAC,eAAAA,GACMj+L,KAAKmoD,QACPnoD,KAAKwL,SAAS4iI,IAAI6vD,iBAGtB,GACDzlL,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,qBAlEEtE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBACqC,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,UA0CjDo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,UAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAAvE,IAAA4E,OAAAC,yBAAA5J,GAAAsJ,UAAA,gBAAAtJ,GAAAsJ,WAAAtJ,I,uCCtEJ,MAAM8rL,WAAoBlgH,EAAAA,EAC/B7hB,GAAAA,GACE,OAAOC,KAAKD,KACd,CAEAs7H,cAAAA,GACE,OAAO1gE,YAAY56D,KACrB,CAEA3xC,cAAAA,GACE,OAAO,IAAI4xC,IACb,CAEA7xC,oBAAAA,GACE,OAAOjrB,KAAKwL,SAAS63E,IAAIp4D,sBAC3B,CAEAk+G,eAAAA,CAAgB99G,EAAuB2yH,GACrC,MAAMxW,EAAYxnI,KAAK6+L,0BAA0BxzK,EAAM2yH,GAEvD,OADsBh+I,KAAK8+L,wBAAwBt3D,EAAUn8G,KAAO,IAAKm8G,EAAUl8G,MAErF,CAEQuzK,yBAAAA,CAA0BxzK,EAAuB2yH,GACvD,OAAOh+I,KAAKwL,SAAS63E,IAAI06D,yBAAyB1yH,EAAM2yH,EAC1D,CAEQ8gD,uBAAAA,CAAwBt3D,EAA0Bu3D,GACxD,OAAOC,GAAAA,EAAc30K,OAAOm9G,EAAUroI,WAAYa,KAAKi/L,+BAAgCF,EACzF,CAEQE,4BAAAA,GACN,OAAOj/L,KAAKwL,SAAS63E,IAAI44D,kBAAkB1wH,UAAYvrB,KAAKk/L,0BAC9D,CAEAC,aAAAA,GACE,OAAOn/L,KAAKwL,SAAS63E,IAAI44D,kBAAkB5wH,IAC7C,CAEAd,aAAAA,GACE,OAAOvqB,KAAKwL,SAAS63E,IAAI44D,kBAAkB3xH,IAC7C,CAEAO,iBAAAA,GACE,OAAO7qB,KAAKwL,SAAS63E,IAAI44D,kBAAkB1wH,QAC7C,CAEA2zK,wBAAAA,GACE,OAAOl/L,KAAKwL,SAAS63E,IAAI44D,kBAAkBmjD,eAC7C,CAEA17G,iBAAAA,GACE,OAAQ,IAAI5mB,MAAO4mB,oBAAsB,IAAQ,CACnD,CAEA27G,2BAAAA,CAA4Bh0K,EAAqB0zK,GAC/C,OAAOC,GAAAA,EAAc30K,OAAOgB,EAAKlsB,WAAYa,KAAKk/L,2BAA4BH,EAChF,CAEApzK,mBAAAA,CAAoB2zK,GAClB,OAAOt/L,KAAKwL,SAAS63E,IAAIoxC,OAAO9oG,oBAAoB2zK,EACtD,CAEAl0K,2BAAAA,CAA4BC,GAC1B,OAAOrrB,KAAKwL,SAAS63E,IAAIj4D,4BAA4BC,EACvD,CAEAhB,MAAAA,CAAOgB,EAAW0gF,EAAe+2C,GAC/B,OAAO9iJ,KAAKwL,SAAS63E,IAAIh5D,OAAOgB,EAAM0gF,EAAM+2C,EAC9C,ECjEK,IAAMy8C,IAAuB1nL,GAajCC,EAAAA,GAAWxK,IAAGyK,GAWdE,EAAAA,GAAOC,MAAKpF,GAxBR,cAAsC4rE,EAAAA,EAE3C3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,kCAAAC,GAAA,WAYVgnL,0CAA2C,GAVjDxmL,EAAAA,EAAAA,IAAehZ,OAEfyP,EAAAA,EAAAA,KAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAC9B,KACE3P,KAAKy/L,2BAA6B,IAAI,GAE9C,CAMA,yBAAI3uC,GAIF,OAHI/rJ,EAAAA,MAAMkP,kBAAkBjU,KAAKy/L,6BAC/Bz/L,KAAK0/L,+BAEA1/L,KAAKy/L,0BACd,CAGQE,yBAAAA,CAA0B71L,GAEhC,IAAI+lI,EAAmB,CAAC,EAEpB/lI,EAAM8iH,WACR9iH,EAAM8iH,UAAUhhE,SAAQ,CAAC72C,EAAUzP,IAAMuqI,EAAiB96H,GAAYzP,IAGxEtF,KAAKy/L,4BAA0Bv6L,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAO4E,GAAK,IAAE8iH,UAAY9iH,EAAM8iH,WAAa,GAAKiY,aAAcgL,GACjG,CAEA,kCAAc6vD,GACZ,IAAG1/L,KAAKw/L,yCAAR,CAGAx/L,KAAKw/L,0CAA2C,EAChD,IACE,GAAGx/L,KAAKwL,SAASkE,KAAKC,aAAc,CAClC,IAAI4gI,QAA8BvwI,KAAKwL,SAAS63E,IAAIw6D,wBAAwB,CAACpN,8BAA8B,IAC3GzwI,KAAK2/L,0BAA0B,CAC7B/yE,WAAgC,OAArB2jB,QAAqB,IAArBA,OAAqB,EAArBA,EAAuB3jB,YAAa,GAC/C/wC,OAA6B,OAArB00D,QAAqB,IAArBA,OAAqB,EAArBA,EAAuB10D,QAEnC,MAGE1xC,YAAW,KACTnqC,KAAK2/L,0BAA0B,CAC7B/yE,UAAW,GACX/wC,OAAQ,IACR,IAKN77E,KAAK4/L,mCACP,CAAC,QACE5/L,KAAKw/L,0CAA2C,CACnD,CAxBA,CA0BF,CAEQI,iCAAAA,GACN,IAAI5/L,KAAK8wJ,sBACP,OAGF,IAAIlgB,EAAkB5wI,KAAK8wJ,sBAAsBlkC,UAAU3+D,QAAO,CAACyH,EAAQ3gD,EAAUsuB,KACnFqyB,EAAO3gD,GAAYsuB,EACZqyB,IACN,CAAC,GAGJ11D,KAAKwL,SAASqd,UAAUC,qBAAqB,CAC3CE,SAAU+lH,GACV92H,OAAQwJ,KAAKC,UAAUkvH,GACvBt2G,MAAOt6B,KAAK8wJ,sBAAsBj1E,OAClC9yD,UAAU,qBACT,EACL,GACDvQ,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,8BAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAvE4D,IAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,6BAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,6BAAAtJ,GAAAsJ,WAAAtJ,I,4BCZ1D,IAAM+sL,IAAYhoL,GAiBpBC,EAAAA,GAAWxK,IAAGyK,GAwCdE,EAAAA,GAAOC,MAAKpF,GAzDV,cAA2B4rE,EAAAA,EAE9B3rE,WAAAA,CAAYvH,EAAmCs0L,EAAmCC,GAC9E3nL,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,+BAAAC,GAAA,WAyBHwnL,YAAM,GAvBnBhnL,EAAAA,EAAAA,IAAehZ,MACfA,KAAKggM,QAAM96L,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACJ66L,GACAD,EAAgBl4F,YAGvB5nG,KAAKigM,iBAAiBH,GACtB9/L,KAAKwL,SAAS4iI,IAAI/qF,KAAKyqB,UAAUC,IAAImyH,GAAAA,GACzC,CAOA,aAAI96G,GACA,OAAOplF,KAAKmgM,wBAAwB/6G,SACxC,CAEA,gBAAI35E,GAAmC,IAAD20L,EAClC,OAAmC,QAAnCA,EAAOpgM,KAAKmgM,+BAAuB,IAAAC,OAAA,EAA5BA,EAA8BjvE,UACzC,CAGA,SAAItpB,GACA,OAAO7nG,KAAKggM,MAChB,CAEA,oBAAIxhL,GACA,OAAOxe,KAAKmgM,wBAAwB3hL,gBACxC,CAEA,eAAI6hL,GACA,OAAOrgM,KAAKmgM,wBAAwBE,WACxC,CAEA,iBAAIC,GACA,OAAOtgM,KAAKmgM,wBAAwBG,aACxC,CAEA,wBAAIv+J,GACA,OAAO/hC,KAAKwL,SAASqI,OAAOkZ,OAAOC,YAAc7iB,QAAQnK,KAAKmgM,wBAAwBI,uBAC1F,CAEA,mBAAIpsK,GACA,MAAMqsK,EAAwBxgM,KAAKmgM,wBAAwBK,sBAC3D,OAAIA,EACOA,EAAsBxgM,KAAKwL,UAE/B,IAAI+2F,GAAAA,EAAwBviG,KAAKwL,SAC5C,CAGQy0L,gBAAAA,CAAiBH,GACrB9/L,KAAKmgM,wBAA0BL,CACnC,CAEAW,kBAAAA,GACI,OAAOzgM,KAAKyL,aAAai1L,YAC7B,GAEHloL,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,2BAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,oBAAAtJ,GAAAsJ,WAAAtJ,I,gBCzEM,MAAM6tL,GACT5tL,WAAAA,CAAoBvH,GAAoC,KAApCA,SAAAA,EAAiC,KAOrDo1L,yBAA4B3mI,IACxBj6D,KAAKwL,SAAS2L,OAAOxI,MAAM,8FAC3B3O,KAAKwL,SAASsE,OAAO0D,KAAKymD,EAAI,CARlC,CAEA4mI,YAAAA,CAAap5D,GACT,OAAOzsG,QAAQC,QAAQ,KAC3B,CAOA6lK,YAAAA,GAAuB,CACvBC,kBAAAA,GAA6B,CAC7BC,iBAAAA,GAA4B,CAC5BC,iBAAAA,GAA4B,CAC5B5pI,WAAAA,CAAYntC,GAAoD,OAAO8Q,QAAQkmK,QAAS,E,gBCJ5F,MAAMtG,GAAmB5uL,GAAAA,MACrB,IAAM,gCAAuDuV,MAAK5iB,IAAA,IAAC,iBAACi8L,GAAiBj8L,EAAA,MAAM,CAAC4zD,QAASqoI,EAAiB,MAEpHtB,GAAyBttL,GAAAA,MAC3B,IAAM,gCAAgEuV,MAAKjf,IAAA,IAAC,uBAACg3L,GAAuBh3L,EAAA,MAAM,CAACiwD,QAAS+mI,EAAuB,MAEzI6H,GAA2Bn1L,GAAAA,MAC7B,IAAM,6BAAiFuV,MAAKza,IAAA,IAAC,yBAACq6L,GAAyBr6L,EAAA,MAAM,CAACyrD,QAAS4uI,EAAyB,MAG7J,MAAMC,WAAyB1iH,EAAAA,EAKlC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KALZ61L,2BAAqB,OACrBC,iBAAmB,EAAE,KAgFZC,wBAAkD,KAAK,KA6CxE/rI,QAAWyE,IACPj6D,KAAKqhM,sBAAsBT,yBAAyB3mI,EAAI,EAC3D,KAUDunI,cAAgB,KACTxhM,KAAKwL,SAASkE,KAAKC,cAClB3P,KAAKwL,SAAS4vB,OAAOgiB,WAAU,KAAM19C,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAC/CL,EAAAA,GAAAA,KAACyhM,GAAwB,OACX,CACd14L,MAAO,KAEf,EA1IAzI,KAAKqhM,sBAAwB,IAAIV,GAAyBn1L,GAC1DxL,KAAKuhM,wBAA0BvhM,KAAKyhM,iCAChCzhM,KAAKib,YACLjb,KAAKwL,SAASk2L,OAAOC,iBAAgB,IAAM3hM,KAAKqhM,sBAAsBP,iBACtE9gM,KAAK4hM,yBAEL5hM,KAAKwL,SAASorB,SAASirK,yBACvB7hM,KAAKqhM,sBAAwBrhM,KAAKwL,SAASs2L,qCAAqCC,cAAc/hM,KAAKuhM,wBAAwBl8E,UAC3HrlH,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAK+3H,eACnC/nH,UACI,GAAG+nH,IAAiBu6D,GAAAA,GAAeC,qBAQ/BjiM,KAAKwL,SAASkE,KAAKC,aAAc,CACjC,UACU3P,KAAKwL,SAASkE,KAAK86H,kBAC7B,CAAE,MAAO97H,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,yDAA0DD,EACzF,CAEI1O,KAAKwL,SAASkE,KAAKC,eACnB3P,KAAKshM,mBACLthM,KAAKwL,SAASqd,UAAU+S,cAAc,aAAc,eAAgB57B,KAAKuhM,wBAAwBl8E,SAAUrlH,KAAKshM,kBAChHthM,KAAKqhM,sBAAsBR,aAAap5D,GAAclmH,MAAK8E,IAC5C,OAARA,QAAQ,IAARA,GAAAA,EAAUsjH,OAET3pI,KAAKwL,SAASkE,KAAKy7H,aAAa9kH,EACpC,IAGZ,KAGhB,CAGA,4BAAcu7K,GACV,UACU5hM,KAAKwL,SAASkE,KAAK86H,mBACzBxqI,KAAKqhM,sBAAsBN,oBAC/B,CAAE,MAAOryL,GACL1O,KAAKqhM,sBAAsBL,mBAC/B,CAEJ,CAGQS,8BAAAA,GACJ,MAAMS,EAA0BliM,KAAKwL,SAASorB,SAASE,WAAWC,SAASyuF,UAAUrmH,WAAW6gB,cAE1FmiL,EAAyBniM,KAAKwL,SAASye,cAAcC,KAAKqf,UAChE,IAAKxkC,EAAAA,MAAMqoH,SAAS+0E,GAChB,OAAO,KAGX,MAAMC,EAAY3lL,OAAOspC,KAAKo8I,GAE9B,IAAK,IAAI78L,EAAI,EAAGA,EAAI88L,EAAUliM,OAAQoF,IAAK,CACvC,MAAM+/G,EAAW+8E,EAAU98L,GAC3B,IAAY,OAAR+/G,QAAQ,IAARA,OAAQ,EAARA,EAAUrlG,iBAAkBkiL,EAAyB,CACrD,IAAIG,EAAkBF,EAAuB98E,GAE7C,OADAg9E,EAAgBh9E,SAAWA,EACpBg9E,CACX,CACJ,CAEA,OAAO,IACX,CAIA,0BAAIC,GACA,OAAOtiM,KAAKuhM,uBAChB,CAEA,aAAItmL,GAEA,OAAGjb,KAAKwL,SAASqI,OAAOmI,GAAGC,QAGvBjc,KAAKuhM,uBAIb,CAEA,SAAIgB,GACA,QAAGviM,KAAKib,WACGjb,KAAKuhM,wBAAwBl8E,SAASrlG,gBAAkBklG,EAAAA,EAIvE,CAEA,SAAIv3E,GACA,QAAG3tC,KAAKib,WACGjb,KAAKuhM,wBAAwBl8E,SAASrlG,gBAAkBolG,EAAAA,EAIvE,CAEA,uBAAI+3E,GACA,MAAO,KAAMz9L,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACvBL,EAAAA,GAAAA,KAAC45L,GAAsB,CAACt3C,SAAStiJ,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UAACL,EAAAA,GAAAA,KAACk7L,GAAgB,SAEzE,CAEA4H,8BAAAA,GAA4D,IAADC,EACvD,IAAIC,EAA6C,QAA9BD,EAAGziM,KAAKsiM,8BAAsB,IAAAG,OAAA,EAA3BA,EAA6BE,oBAEnD,OAAOD,GAAmBA,EAAgB/7D,MAAKz5H,GAASlN,KAAKwL,SAASorB,SAASE,WAAWC,SAAS4lK,OAAO,IAAIr/F,GAAAA,EAAQpwF,EAAMiwF,QAChI,CAMA8jG,iBAAAA,CAAkB/2K,GACdlqB,KAAKqhM,sBAAsBJ,kBAAkB/2K,EACjD,CAEAmtC,WAAAA,CAAYntC,GACR,OAAOlqB,KAAKqhM,sBAAsBhqI,YAAYntC,EAClD,ECnKG,MAAM04K,IAA2BpkM,EAAAA,GAAAA,GAAU,4B,8BCE3C,MAAMqkM,GAA0BplM,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,uuBAUlCE,GAASA,EAAMglM,SAAW,OAAS,SAK1BhlM,IAASwT,EAAAA,GAAAA,GAAUxT,EAAMI,MAAM6J,OAAO8J,WAAY,MAElE0hD,GAAAA,IACkCz1D,GAASA,EAAMilM,+BAS5CpkM,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,GAGxCs1D,GAAAA,I,OC9BL,MAAMsvI,IAAyBvlM,EAAAA,GAAAA,IAAOolM,GAAPplM,CAA+BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sCAC7CE,IAASwT,EAAAA,GAAAA,GAAUxT,EAAMI,MAAM6J,OAAO4J,mBAAoB,OCDrEsxL,IAAmBhxL,EAAAA,GAAAA,GAAc4wL,IACzC1wL,WAAW6wL,IACX5wL,Q,+BCQL,MAAM8wL,IAAsB/6K,EAAAA,GAAAA,IAASxqB,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,uPAU/BulM,IAAuBh7K,EAAAA,GAAAA,IAASrnB,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,yPAWhCwlM,IAAsBviM,EAAAA,GAAAA,IAAGe,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,yDACdslM,GCpCsC,KDuCjDG,IAAuBxiM,EAAAA,GAAAA,IAAGsB,KAAAA,IAAAvE,EAAAA,GAAAA,GAAA,yDACfulM,GCxCsC,KD2CjDG,IAAeziM,EAAAA,GAAAA,IAAGwB,KAAAA,IAAAzE,EAAAA,GAAAA,GAAA,iJAChBw1D,GAAAA,IAGgBz0D,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOw7L,iBAAiB,IAK7DpkB,IAAiBt+K,EAAAA,GAAAA,IAAG4B,KAAAA,IAAA7E,EAAAA,GAAAA,GAAA,uDAClB+1D,GAAAA,IAKF9nB,GAAapuC,GAAAA,GAAOiB,IAAGgE,KAAAA,IAAA9E,EAAAA,GAAAA,GAAA,2MAKLE,GAASA,EAAMI,MAAM6J,OAAO8J,YAC5C2hD,GAAAA,IAMF1nB,IAAQruC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBkF,KAAAA,IAAA/E,EAAAA,GAAAA,GAAA,wFAC3B0lM,GACAnkB,GACE9rH,GAAAA,GACG+vI,GAEHvvI,GAAAA,GACGwvI,IAIJr3J,IAAYvuC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBmF,KAAAA,IAAAhF,EAAAA,GAAAA,GAAA,unBAG7B21D,GAAAA,GAGD9vD,GAAAA,EAAQC,IAAI2jD,OAAO69C,OAAOthG,QAChBgwD,GAAAA,GAGF0vI,GACAnkB,GAGP1rH,GAAAA,GAKG6vI,GACAnkB,GAGF9rH,GAAAA,GACE5vD,GAAAA,EAAQC,IAAI2jD,OAAO69C,OAAOthG,QACtBw/L,GAEH3vI,GAAAA,GACG2vI,GAINvvI,GAAAA,GACEpwD,GAAAA,EAAQC,IAAI2jD,OAAO69C,OAAOthG,QACtBy/L,GAEH5vI,GAAAA,GACG4vI,IEpHDG,IFyHiCt3J,EAAAA,GAAAA,GAAeJ,GAAOE,I,OGxH7D,MCDMy3J,GDC8BhmM,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mKAExCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO0C,YAAY,IAGtCnI,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW20D,aAAa,GAC9CrvD,GAAAA,EAAQC,IAAI2jD,OAAO3b,UAAU9nC,SEyB1B8/L,IAAuBnkM,EAAAA,GAAAA,IAChC,cAAmCyM,GAAAA,UAA8C+G,WAAAA,GAAA,SAAA9S,WAAA,KAGrE0jM,2BAA6B,KACjC3jM,KAAKlC,MAAMk6B,cAAcC,OAAM,GAAM,EAAK,CAC5C,CAEFx4B,MAAAA,GACI,MAAMmkM,EAAiB3sL,MAAWnX,EAAAA,GAAAA,IAAQ,oBAAoBA,EAAAA,GAAAA,IAAQ,YAAa+jM,GAAAA,GAAc,CAC7F,CAACtwI,GAAAA,IAA+BvzD,KAAKlC,MAAMgmM,cAAcC,2BACzD,CAACrwI,GAAAA,IAAuB1zD,KAAKlC,MAAMgmM,cAAc16I,oBACjD,CAACqK,GAAAA,IAA4BzzD,KAAKlC,MAAMgmM,cAAcl7I,wBACtD,CAACyK,GAAAA,IAAkBrzD,KAAKlC,MAAMgmM,cAAcE,0BAC5C,CAACpwI,GAAAA,IAA0B5zD,KAAKlC,MAAMgmM,cAAcG,wBAGlDC,EAAwBlkM,KAAKlC,MAAMgmM,cAAcK,aAAe,GAEhEC,EAAgBntL,MAAWnX,EAAAA,GAAAA,IAAQ,2BAA2BA,EAAAA,GAAAA,IAAQ,uBAAwBokM,EAAuB,CACvH,CAAC5wI,GAAAA,IAAyBtzD,KAAKlC,MAAMgmM,cAAcxmJ,qBAGjD+mJ,EAAiBptL,MAAWnX,EAAAA,GAAAA,IAAQ,2BAA4B,CAClE,CAACszD,GAAAA,KAAiBpzD,KAAKlC,MAAMgmM,cAAcQ,YAC3C,CAACjxI,GAAAA,IAAkBrzD,KAAKlC,MAAMgmM,cAAcE,0BAC5C,CAACvwI,GAAAA,IAA4BzzD,KAAKlC,MAAMgmM,cAAcl7I,wBACtD,CAAC2K,GAAAA,IAA+BvzD,KAAKlC,MAAMgmM,cAAcC,2BACzD,CAACvwI,GAAAA,IAAuCxzD,KAAKlC,MAAMgmM,cAAcS,kCACjE,CAAC5wI,GAAAA,IAAmB3zD,KAAKlC,MAAMgmM,cAAc3kB,eAC7C,CAACvrH,GAAAA,IAA0B5zD,KAAKlC,MAAMgmM,cAAcG,sBACpD,CAACpwI,GAAAA,IAAgC7zD,KAAKlC,MAAMk6B,cAAcwsK,8BAGxDC,EAAwBzkM,KAAKlC,MAAMgmM,cAAcY,kBAAoBhlM,EAAAA,GAAAA,KAAAo5B,GAAAA,SAAA,KACvEp5B,EAAAA,GAAAA,KAAC80D,GAAAA,EAAqB,CAClB70D,UAAWykM,EACX37L,MAAOzI,KAAKlC,MAAMgmM,cAAcr7L,MAChC6yB,gBAAiBt7B,KAAKlC,MAAMgmM,cAAcxoK,gBAC1Cq5B,mBAAoB30D,KAAK2jM,2BACzB9uI,mBAAoB70D,KAAKlC,MAAMgmM,cAAca,2BAE/C5B,EAA+B/iM,KAAKlC,MAAMgmM,cAAcf,8BAAgC,GACxF6B,EAAa5kM,KAAKlC,MAAMgmM,cAAc78L,KACtCkiC,EAAQnpC,KAAKlC,MAAM0N,SAASqI,OAAOi7H,oBACzC,OACIpvI,EAAAA,GAAAA,KAAC6e,GAAAA,GAAa,CAACrgB,MAAO8B,KAAKlC,MAAM0N,SAAStN,MAAMmiM,YAAYtgM,UACxDL,EAAAA,GAAAA,KAACujM,GAAgB,CAACF,6BAA8BA,EAC9BpjM,UAAWikM,EACXd,SAAU9iM,KAAKlC,MAAMk6B,cAAc8qK,SACnCh6L,MAAO,CAAC+Z,OAAQ7iB,KAAKlC,MAAMk6B,cAAcnV,QACzCsmB,MAAOA,EAAMppC,UAC3ByI,EAAAA,GAAAA,MAACg7L,GAAuB,CAAC7jM,UAAW0kM,EAAetkM,SAAA,CAC9C0kM,GACDj8L,EAAAA,GAAAA,MAACo6L,GAAwB,CACrBiC,cAAe7kM,KAAKlC,MAAMgmM,cAAce,cACxClwC,SAAU30J,KAAKlC,MAAMgmM,cAAcnvC,SACnCh1J,UAAWsX,MAAWnX,EAAAA,GAAAA,IAAQ,qCAAqCA,EAAAA,GAAAA,IAAQ,qBAC3EglM,UAAW9kM,KAAKlC,MAAMgmM,cAAcvmJ,wBACpCqL,wBAAyB5oD,KAAKlC,MAAMgmM,cAAcl7I,wBAAwB7oD,SAAA,CAEzE6kM,IAAcllM,EAAAA,GAAAA,KAAC+jM,GAAoB,CAAA1jM,UAChCL,EAAAA,GAAAA,KAACklM,EAAU,CAAC97L,MAAO,CAAC2D,QAAS,UAAWhG,KAAM,QAEjDzG,KAAKlC,MAAMkyL,cAAchwL,KAAKlC,MAAMk6B,wBAM7D,I,mBCtGD,MAAM+sK,GAAyBtnM,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qPAMrCE,GAASA,EAAMI,MAAMC,WAAW86B,YAMhCn7B,GAASA,EAAMI,MAAMC,WAAWwS,Y,OCZpC,MAAMq0L,GAA0CvnM,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wNAOpDE,GAASA,EAAMI,MAAM6J,OAAOjG,O,OCPlC,MAAMmjM,GAAyCxnM,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0QAQrDE,GAASA,EAAMI,MAAMC,WAAW0S,Y,OCNpC,MAAMq0L,IAA+BznM,EAAAA,GAAAA,IAAOiJ,GAAAA,EAAPjJ,CAAcE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8aAEpD6F,GAAAA,EAAQC,IAAIC,IAAIC,SAIT9F,GAAS,IAAIA,EAAMqnM,2BAGxB1hM,GAAAA,EAAQC,IAAIC,IAAIC,SAMX9F,GAASA,EAAMI,MAAMC,WAAW0S,WAKjCpN,GAAAA,EAAQC,IAAIC,IAAIC,SCRfwhM,IAA+B7lM,EAAAA,GAAAA,IACxC,cAA2CC,GAAAA,EAAkDuT,WAAAA,GAAA,SAAA9S,WAAA,KACjF24D,gBAAkBl5C,UACtB,MAAMpf,EAASN,KAAKlC,MAAMunM,oBACJ/kM,EAAO+G,YACfw0B,GAAAA,EAAkCC,wBAC5C97B,KAAKlC,MAAMk6B,cAAcC,OAC7B,CACH,CACDx4B,MAAAA,GACI,MAAMa,EAASN,KAAKlC,MAAMunM,cAC1B,OACI78L,EAAAA,GAAAA,MAAC08L,GAA4B,CACCl+L,OAAQ1G,EAAOq7B,aACft0B,QAASrH,KAAK44D,gBACdusI,0BAA2B9uL,KAAK09B,IAAI,EAAG/zC,KAAKlC,MAAMwnM,iBAAiBvlM,SAAA,CAAC,IAC7FO,EAAOwB,OAJuBxB,EAAOwB,KAOlD,I,OCjCD,MAAMyjM,GAAsC9nM,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6IAMhDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO0C,YAAY,I,OCL5C,MAAM+6L,IAAyC/nM,EAAAA,GAAAA,IAAOunM,GAAPvnM,CAA+CE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sFCwBxF6nM,IAA+BlmM,EAAAA,GAAAA,IACxC,cAA2CC,GAAAA,EAE/BojE,WAAAA,GACJ,OAAI5iE,KAAKlC,MAAMmJ,KAIZlC,EAAAA,MAAM+qE,SAAS9vE,KAAKlC,MAAMmJ,OAClBvH,EAAAA,GAAAA,KAAC6lM,GAAmC,CAAAxlM,UACvCL,EAAAA,GAAAA,KAACZ,GAAAA,EAAK,CAACsV,IAAKpU,KAAKlC,MAAMmJ,UAIxBvH,EAAAA,GAAAA,KAAC6lM,GAAmC,CAAAxlM,SACtCC,KAAKlC,MAAMmJ,OAVL,IAYf,CAEQy+L,WAAAA,GACJ,OAAI1lM,KAAKlC,MAAMgE,KAIZiD,EAAAA,MAAM+qE,SAAS9vE,KAAKlC,MAAMgE,OAASkK,GAAAA,eAAqBhM,KAAKlC,MAAMgE,OAE9DpC,EAAAA,GAAAA,KAACslM,GAAuC,CAAAjlM,SACnCC,KAAKlC,MAAMgE,OAKM,IAA3B9B,KAAKlC,MAAMgE,KAAK5B,QAEXR,EAAAA,GAAAA,KAACslM,GAAuC,CAAAjlM,SACnCC,KAAKlC,MAAMgE,KAAK,MAMzBpC,EAAAA,GAAAA,KAAC8lM,GAAsC,CAAAzlM,UACnCL,EAAAA,GAAAA,KAAA,MAAAK,SACKC,KAAKlC,MAAMgE,KAAKyO,KAAIo1L,IAAQjmM,EAAAA,GAAAA,KAAA,MAAAK,SAAgB4lM,GAAPA,SAtBvC,IA0Bf,CACAlmM,MAAAA,GACI,OACI+I,EAAAA,GAAAA,MAACu8L,GAAsB,CAAAhlM,SAAA,CAClBC,KAAK4iE,eACNljE,EAAAA,GAAAA,KAACslM,GAAuC,CAAAjlM,SACnCC,KAAK0lM,iBAEVhmM,EAAAA,GAAAA,KAACulM,GAAsC,CAACtlM,WAAWG,EAAAA,GAAAA,IAAQ,gCAAgCC,SACtFC,KAAKlC,MAAM49B,QAAQnrB,KAAIjQ,IAAWZ,EAAAA,GAAAA,KAAC0lM,GAA4B,CACCC,cAAe/kM,EACfglM,gBAAiBtlM,KAAKlC,MAAM49B,QAAQx7B,OACpC83B,cAAeh4B,KAAKlC,MAAMk6B,eAHrB13B,EAAOwB,YAO7F,I,wCC5DD,IAAM8jM,IAAa/tL,GAkCrBC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKpF,GArCV,cAA4B4rE,EAAAA,EAE/B3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,gCAAAC,GAAA,WA2CZqtL,mBAAuBC,IAE3B9lM,KAAK+lM,4BAA4B/lM,KAAKgmM,yBAAyBvmL,QAAO2b,GAAUA,EAAOpD,cAAcnV,SAAWijL,EAAcjjL,UAC9H7iB,KAAKwL,SAAS2iC,WAAW5sB,MAAK4sB,IAAe,IAAD2nJ,EACX,QAA7BA,EAAA3nJ,EAAWC,0BAAkB,IAAA0nJ,GAA7BA,EAA+BmQ,yBAAyBC,gBAAgB,GAC1E,GA9CFltL,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKmmM,0BACLnmM,KAAKwL,SAASupB,SAASxT,MAAKwT,IACxB/0B,KAAKyP,UAAS,IAAOslB,EAASqxK,8BAC1B,IAAKpmM,KAAKqmM,mBACb,IAGLrmM,KAAKyP,UAAS,IAAMzP,KAAKsmM,iBAAiBA,IAClCA,EACAtmM,KAAKumM,iBAELvmM,KAAKwmM,eACT,GAER,CAEQL,uBAAAA,GACJnmM,KAAKwL,SAAS63E,IAAIoxC,OAAOG,WAAW50H,KAAKqmM,gBAAgB5vK,KAAKz2B,OAE9DA,KAAKyP,UAAS,IAAM,CACZzP,KAAKwL,SAASkE,KAAKC,aACnB3P,KAAKwL,SAASyqC,QAAQC,gBAE9B,IAAKl2C,KAAKqmM,mBAEd,CAMQN,2BAAAA,CAA4BU,GAChCzmM,KAAKgmM,yBAA2BS,CACpC,CAEA,kBAAWC,GACP,OAAQ1mM,KAAKgmM,yBAAyBz1L,KAAI6qB,GAAUA,EAAOurK,iBAC/D,CAUQH,aAAAA,GACJxmM,KAAKwL,SAAS4iI,IAAI/qF,KAAKyqB,UAAUyvD,OAAOqpE,GAAAA,GAC5C,CAEQL,cAAAA,GACJvmM,KAAKwL,SAAS4iI,IAAI/qF,KAAKyqB,UAAUC,IAAI64H,GAAAA,GACzC,CAEQC,cAAAA,CAAexpJ,EAA0BypJ,GAE7C,GAAGA,EACC,OAAOA,EAGX,MAAMxI,EAAWt+L,KAAKgmM,yBAAyBz1L,KAAI6qB,GAAUA,EAAOpD,cAAcnV,SAElF,OAAuB,IAApBy7K,EAASp+L,OACDm9C,EAAiBr9C,KAAKwL,SAAS63E,IAAI24D,uBAAyB,EAAI,IAGxE3+F,EACQhnC,KAAK09B,OAAOuqJ,EAAUt+L,KAAKwL,SAAS63E,IAAI24D,wBAA0B,EAElE3lI,KAAK09B,OAAOuqJ,GAAY,CAEvC,CAEA,kBAAIgI,GACA,OAAQvhM,EAAAA,MAAMiP,QAAQhU,KAAKgmM,yBAAyBvmL,QAAO6+C,IAAMA,EAAEtmC,cAAc8qK,WACrF,CAEAiE,YAAAA,CAAahoH,GACT,OAAIA,EAAKioH,cACEhnM,KAAKgmM,yBAAyB9lM,OAElCF,KAAKgmM,yBAAyBvmL,QAAO6+C,IAAMA,EAAEtmC,cAAc8qK,WAAU5iM,MAChF,CAEAmmM,eAAAA,GAC2BrmM,KAAKgmM,yBAAyBvmL,QAAO2b,IAAWA,EAAOpD,cAAc6lC,2BAC7EjS,SAASxwB,IACpBA,EAAOpD,cAAc2yB,SAAS,IAGlC3qD,KAAK+lM,4BAA4B/lM,KAAKgmM,yBAAyBvmL,QAAO2b,GAAUA,EAAOpD,cAAc6lC,2BACzG,CAEAzgB,SAAAA,CAAU4yI,EAAwE3pL,GAAkD,IAAD4gM,EAAAC,EAC/H,MAAMC,EAAcnnM,KAAK6mM,eAAsB,QAARI,EAAC5gM,SAAO,IAAA4gM,OAAA,EAAPA,EAAS5pJ,eAAsB,QAAR6pJ,EAAC7gM,SAAO,IAAA6gM,OAAA,EAAPA,EAASJ,aAEzEzgM,GAAOnB,EAAAA,EAAAA,GAAA,CACHo2B,iBAAiB,EACjBgpK,aAAa,EACbN,2BAA2B,GACxB39L,GAGP,MAAM2xB,EAAgB,IAAIovK,GAAmBD,EAAannM,KAAKwL,SAAUxL,KAAK6lM,mBAAoBx/L,GAG5FghM,EAAoBA,KAAO,IAADC,EACXtnM,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,UAEvB,QAAX+wK,EAAIjhM,SAAO,IAAAihM,GAAPA,EAASC,mCAEpBvnM,KAAKwL,SAAS63E,IAAI0+D,yBA/HX,2BA+HoD,KAG/D,MAAM4kD,GAAmBjnM,EAAAA,GAAAA,KAACgkM,GAAoB,CACCl4L,SAAUxL,KAAKwL,SACfwsB,cAAeA,EACfg4J,cAAeA,EACf8T,cAAez9L,GAJV2xB,EAAcnV,QAMlE7iB,KAAK+lM,4BAA4B,IAC1B/lM,KAAKgmM,yBACR,CACIhuK,cAAeA,EACf2uK,gBAAiBA,IAEvB,EA4BN,OAxBA3mM,KAAKwL,SAAS2iC,WAAW5sB,MAAK4sB,IAE1B,GAAGA,EAAWC,oBAAsB+4J,EAAch5J,EAAWq5J,gBAEzD,OAAOr5J,EAAWC,mBAAmBq5J,+BAA+B,CAChE9kI,QAASjjD,UAEL,GADA1f,KAAKwL,SAASqd,UAAUkd,uBAvJrB,iBAuJgE,0BAA0B,gBAADnmC,OAAkBunM,IAC3Gh5J,EAAWC,mBACV,UACUD,EAAWC,mBAAmB63J,yBAAyByB,cACjE,CAAE,MAAOh5L,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,wCAAD/O,OAAyCuuC,EAAWC,mBAAmBn7B,SAAS8B,UAC9G,CAGJsyL,GAAmB,IAI3BA,GACJ,IAIGrvK,CACX,CAEAuoI,sBAAAA,GACI,OAAOvgK,KAAKwL,SAAS63E,IAAI24D,sBAC7B,CAEA2rD,mBAAAA,GACI,OAA4C,IAAzC3nM,KAAKgmM,yBAAyB9lM,OACtB,EAEJmW,KAAK09B,OAAO/zC,KAAKgmM,yBAAyBz1L,KAAIq3L,GAAOA,EAAI5vK,cAAcnV,SAClF,CAEAwY,mBAAAA,CAAoBh1B,GAChB,OAAOrG,KAAKo9C,WAAUplB,IAAkBt4B,EAAAA,GAAAA,KAAC+lM,GAA4B,CACjEztK,cAAeA,EACfl2B,KAAMuE,EAAQvE,KACd45B,QAASr1B,EAAQq1B,SAAW,GAC5Bz0B,KAAMZ,EAAQY,QACb,CACDwB,MAAOpC,EAAQoC,QAAUpC,EAAQsiD,eAAiB,KAAO,IACzD1hD,KAAMZ,EAAQkjD,QACdjM,oBAAoB,EACpBhiB,gBAAiBj1B,EAAQi1B,gBACzB+hB,gBAAgB,EAChBuL,0BAAyB7jD,EAAAA,MAAMkP,kBAAkB5N,EAAQuiD,0BAAkCviD,EAAQuiD,wBACnGQ,qBAAqB,EACrBm+I,kCAAmCp9L,QAAQ9D,EAAQkhM,mCACnDl+I,kBAAmBhjD,EAAQgjD,kBAC3BjE,SAAU/+C,EAAQ++C,SAClByY,yBAA0Bx3D,EAAQw3D,0BAE1C,GACHrlD,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,4BAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAjKqD,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,+BAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,+BAAAtJ,GAAAsJ,WAAAtJ,IAoKlDs0L,IAAkBpvL,GAkBnBF,EAAAA,GAAWxK,IAAG8W,GAadtM,EAAAA,GAAWxK,IAAG+W,GAuBdvM,EAAAA,GAAWxK,IAAGgX,GAGdrM,EAAAA,GAAOC,MAAK2vL,GAzDjB,MACI90L,WAAAA,CAAY8P,EACQ6zG,EACAoxE,EACAC,GAA6B,KAF7BrxE,UAAAA,EAAS,KACToxE,aAAAA,EAAmD,KACnDC,SAAAA,EAA0B,KAQtCC,WAAY,GAAKzvL,EAAAA,EAAAA,GAAA,eAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,gBAAAmM,GAAA,OAAAnM,EAAAA,EAAAA,GAAA,mCAAAkQ,GAAA,WAiEjBw/K,6BAAgCC,IAAwC,IAADC,EAG3E,GAFAnoM,KAAKgoM,WAAY,EAEdE,GAAuBloM,KAAK+nM,SAAS1+I,kBACpC,IACIrpD,KAAK+nM,SAAS1+I,mBAClB,CAAE,MAAO36C,GAAM,IAAD05L,EAAAC,EACVroM,KAAK02H,UAAUv/G,OAAOxI,MAAM,wDAAD/O,OAAsE,QAAtEwoM,EAAyDpoM,KAAK+nM,gBAAQ,IAAAK,OAAA,EAAbA,EAAeE,UAAS,qBAAA1oM,OAAiC,QAAjCyoM,EAAoBroM,KAAK+nM,gBAAQ,IAAAM,OAAA,EAAbA,EAAe5/L,OAASzI,KAAK+nM,SAAS1+I,kBAAmB36C,EAC7L,CAGJ,GAAG1O,KAAK+nM,SAAS3iJ,SACb,IACIplD,KAAK+nM,SAAS3iJ,UAClB,CAAE,MAAO12C,GAAM,IAAD65L,EAAAC,EACVxoM,KAAK02H,UAAUv/G,OAAOxI,MAAM,+CAAD/O,OAA6D,QAA7D2oM,EAAgDvoM,KAAK+nM,gBAAQ,IAAAQ,OAAA,EAAbA,EAAeD,UAAS,qBAAA1oM,OAAiC,QAAjC4oM,EAAoBxoM,KAAK+nM,gBAAQ,IAAAS,OAAA,EAAbA,EAAe//L,OAASzI,KAAK+nM,SAAS3iJ,SAAU12C,EAC3K,CAGJ1O,KAAK8nM,aAAa9nM,MAEF,QAAhBmoM,EAAGnoM,KAAK+nM,gBAAQ,IAAAI,GAAbA,EAAeZ,mCACdvnM,KAAK02H,UAAUrzC,IAAI4+D,4BAGvBjiJ,KAAK02H,UAAUrzC,IAAIqP,cAAc4oD,eAAe,GAjGhDtiI,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK8iM,SAAW34L,QAAQnK,KAAK+nM,SAASU,gBACtCzoM,KAAK0oM,QAAU7lL,CACnB,CAKA,4BAAWg7C,GACP,OAAO79D,KAAK+nM,SAASlqI,wBACzB,CAKA,UAAIh7C,GACA,OAAO7iB,KAAK0oM,OAChB,CAEA,UAAI7lL,CAAO/Y,IACP8f,EAAAA,EAAAA,KAAY,KACR5pB,KAAK0oM,QAAU5+L,CAAK,GAE5B,CAKA2C,OAAAA,IACImd,EAAAA,EAAAA,KAAY,KACR5pB,KAAK8iM,UAAW,CAAK,IAGtB9iM,KAAK+nM,SAASY,WACb3oM,KAAK+nM,SAASY,WAEtB,CAEAhoK,IAAAA,IACI/W,EAAAA,EAAAA,KAAY,KACR5pB,KAAK8iM,UAAW,CAAI,IAGrB9iM,KAAK+nM,SAASa,QACb5oM,KAAK+nM,SAASa,QAEtB,CAMA3wK,KAAAA,GAAmD,IAA7CiwK,EAA4BjoM,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAC3BD,KAAKgoM,YAKRhoM,KAAKwkM,4BAA8BxkM,KAAK+nM,SAAS/D,0BAC9ChkM,KAAKwkM,6BACJqE,EAAAA,GAAAA,GAAgB,gCAAgC,IAAK7oM,KAAKioM,6BAA6BC,IAAsB,KAE7GloM,KAAKioM,6BAA6BC,GAG1C,CAEAv9I,OAAAA,GACI3qD,KAAKioM,8BAA6B,EACtC,GA6BHxvL,IAAA0D,EAAAA,EAAAA,GAAA0rL,GAAAzrL,UAAA,WAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkI,IAAAvI,EAAAA,EAAAA,GAAA0rL,GAAAzrL,UAAA,YAAAgI,IAAA,CAAA/H,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAxEuB,CAAM,IAADiM,IAAAtM,EAAAA,EAAAA,GAAA0rL,GAAAzrL,UAAA,+BAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAuBqB,CAAM,KAADL,EAAAA,EAAAA,GAAA0rL,GAAAzrL,UAAA,SAAAkI,IAAA7H,OAAAC,yBAAAmrL,GAAAzrL,UAAA,SAAAyrL,GAAAzrL,WAAAyrL,ICvRhD,MAAMiB,WAA2BpqH,EAAAA,EAEpC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GACNxL,KAAKw0H,OACT,CAEA,yBAAYu0E,GACR,OAAO/oM,KAAKwL,SAASye,cAAc05G,qBAAqBtgD,IAAIxhE,OAAOigG,eACvE,CAEQknF,aAAAA,GACJ,QAAKhpM,KAAK+oM,sBAAsBE,eAG3BjpM,KAAK+oM,sBAAsBhnF,MAAMmnF,eAClClpM,KAAKwL,SAAS2L,OAAOxI,MAAM,2DACpB,GAIf,CAEA,eAAWw6L,GACP,OAAKnpM,KAAKgpM,gBAGHhpM,KAAK+oM,sBAAsBhnF,MAAMmnF,aAAe,iBAF5C,IAGf,CAEQ10E,KAAAA,GACAx0H,KAAKgpM,kBACLhpM,KAAKopM,yBAEDppM,KAAKwL,SAASqI,OAAOmI,GAAGmtB,OACxBnpC,KAAKqpM,WAGjB,CAGQA,QAAAA,GACArpM,KAAKmpM,YACLnpM,KAAKspM,6BAELtpM,KAAKwL,SAAS2L,OAAOxI,MAAM,4BAEnC,CAEQ26L,0BAAAA,GACJtpM,KAAKupM,oBAAoBhoL,MAAMioL,KACLA,EAAa99L,OAAS,IAC9BkgD,SAAQ69I,GAAYzpM,KAAK0pM,kBCxDhB,mBDwDuDD,IAAU,GAEhG,CAEQC,iBAAAA,CAAkBC,EAAaF,GACnC,MAAMG,EAAW5pM,KAAKwL,SAAS4iI,IAAI9Q,cAAc,QACjDssE,EAAQD,IAAMA,EACdC,EAAQr9J,KAAOvsC,KAAK+oM,sBAAsBhnF,MAAMmnF,aAAe,IAAMO,EAASr1L,IAE1Eq1L,EAASI,QACTD,EAAQC,MAAQJ,EAASI,OAG7B7pM,KAAKwL,SAAS4iI,IAAI07D,KAAKp6H,OAAOk6H,EAClC,CAEQL,iBAAAA,GACJ,OAAOvpM,KAAKwL,SAASu+L,KAAK//G,IAAIhqF,KAAKmpM,aAC9BrrI,OAAMpvD,IACH1O,KAAKwL,SACA2L,OAAOxI,MAAM,4CAAD/O,OAA6CI,KAAKmpM,aAAez6L,GAC3EssB,QAAQkmK,WAE3B,CAEQkI,sBAAAA,GACJ,MAAMY,EAAWhqM,KAAKwL,SAAS4iI,IAAIxvG,cCnFA,6BDqF/BorK,IACAA,EAAQz9J,KAAOvsC,KAAKmpM,YAE5B,EEjFG,MAAMc,GAAiC,uBAEvC,MAAMC,GACTn3L,WAAAA,CAAoBvH,GAAoC,KAApCA,SAAAA,EAAiC,KAwBrDo1L,yBAA4B3mI,IAAuB,IAADkwI,EAChB,QAA9BA,EAAAnqM,KAAKoqM,iCAAyB,IAAAD,GAA9BA,EAAgCvJ,yBAAyB3mI,EAAI,CAvBjE,CAEA,6BAAYmwI,GACR,MAAMC,EAAUrqM,KAAKwL,SAASsE,OAAO4yG,kBAAkBunF,IAIvD,OAHII,GACArqM,KAAKwL,SAAS2L,OAAOxI,MAAM,GAAD/O,OAAIqqM,GAA8B,4BAEzDI,CACX,CAEAxJ,YAAAA,CAAap5D,GAER,IAAD6iE,EAIAC,EALA,OAAGvqM,KAAKwqM,wBAEiC,QAArCF,EAAOtqM,KAAKoqM,iCAAyB,IAAAE,OAAA,EAA9BA,EAAgCzJ,aAAap5D,IAItB,QAA9B8iE,EAAAvqM,KAAKoqM,iCAAyB,IAAAG,GAA9BA,EAAgCE,WACzBzvK,QAAQC,QAAQ,MAE/B,CAMA,2BAAYuvK,GACX,IAADE,EACI,OAAO3lM,EAAAA,MAAMg1H,WAAyC,QAA/B2wE,EAAC1qM,KAAKoqM,iCAAyB,IAAAM,OAAA,EAA9BA,EAAgC7J,aAC5D,CAEAC,YAAAA,GACI,IAAK,IAAD6J,EACH5lM,EAAAA,MAAMg1H,WAAyC,QAA/B4wE,EAAC3qM,KAAKoqM,iCAAyB,IAAAO,OAAA,EAA9BA,EAAgC7J,cAChD9gM,KAAKoqM,0BAA0BtJ,eAE/B9gM,KAAKwL,SAAS2L,OAAOs8B,QAAQ,GAAD7zC,OAAIqqM,GAA8B,4BAEhE,CAAC,MAAOzlM,GACJxE,KAAKwL,SAAS2L,OAAOxI,MAAM,kDAAkDnK,EACjF,CACJ,CAEAu8L,kBAAAA,GACI,IAAK,IAAD6J,EACG7lM,EAAAA,MAAMg1H,WAAyC,QAA/B6wE,EAAC5qM,KAAKoqM,iCAAyB,IAAAQ,OAAA,EAA9BA,EAAgC7J,oBAChD/gM,KAAKoqM,0BAA0BrJ,qBAE/B/gM,KAAKwL,SAAS2L,OAAOs8B,QAAQ,GAAD7zC,OAAIqqM,GAA8B,kCAEtE,CAAC,MAAOzlM,GACJxE,KAAKwL,SAAS2L,OAAOxI,MAAM,wDAAwDnK,EACvF,CAEJ,CAEAw8L,iBAAAA,GAA0B,IAAD6J,EAClB9lM,EAAAA,MAAMg1H,WAAyC,QAA/B8wE,EAAC7qM,KAAKoqM,iCAAyB,IAAAS,OAAA,EAA9BA,EAAgC7J,mBAChDhhM,KAAKoqM,0BAA0BpJ,oBAE/BhhM,KAAKwL,SAAS2L,OAAOs8B,QAAQ,GAAD7zC,OAAIqqM,GAA8B,iCAEtE,CAEAhJ,iBAAAA,CAAkB/2K,GAAiC,IAAD4gL,EAChB,QAA9BA,EAAA9qM,KAAKoqM,iCAAyB,IAAAU,GAA9BA,EAAgCC,gBAAgBtpL,KAAKC,UAAUwI,GACnE,CAEAmtC,WAAAA,CAAYntC,GAAmD,IAAD8gL,EAC1D,MAAMC,EAA+E,CACjFC,SAAUC,GAAAA,GAASC,QACnBC,WAAYnhL,EACZohL,cAAetrM,KAAKwL,SAASu1C,MAAMC,WAIvC,OAD8B,QAA9BgqJ,EAAAhrM,KAAKoqM,iCAAyB,IAAAY,GAA9BA,EAAgCD,gBAAgBtpL,KAAKC,UAAUupL,IACxDjwK,QAAQC,SACnB,EClFG,MAAMswK,GAAiC,uBAGvC,MAAMC,GACTz4L,WAAAA,CAAoBvH,GAAoC,KAApCA,SAAAA,EAAiC,KA+B7CigM,kBAAqBlmL,IAA2B,IAADmmL,EACrB,QAA9BA,EAAA1rM,KAAK2rM,iCAAyB,IAAAD,GAA9BA,EAAgCE,iBAAiBrmL,EAAO,EAC1D,KAEFq7K,yBAA4B3mI,IAAuB,IAAD4xI,EAChB,QAA9BA,EAAA7rM,KAAK2rM,iCAAyB,IAAAE,GAA9BA,EAAgCC,iBAAiB7xI,EAAI,EACvD,KA4BFgnI,kBAAqB/2K,IAAoC,IAAD6hL,EACtB,QAA9BA,EAAA/rM,KAAK2rM,iCAAyB,IAAAI,GAA9BA,EAAgChB,gBAAgBtpL,KAAKC,UAAUwI,GAAM,EACvE,KAEFmtC,YAAentC,IAAsD,IAAD8hL,EAChE,MAAMf,EAA+E,CACjFC,SAAUC,GAAAA,GAASC,QACnBC,WAAYnhL,EACZohL,cAAetrM,KAAKwL,SAASu1C,MAAMC,WAIvC,OAD8B,QAA9BgrJ,EAAAhsM,KAAK2rM,iCAAyB,IAAAK,GAA9BA,EAAgCjB,gBAAgBtpL,KAAKC,UAAUupL,IACxDjwK,QAAQC,SAAS,EA1ExBj7B,KAAKyrM,mBAAkB,GAEvBzrM,KAAK0rJ,aAEL1rJ,KAAKwL,SAASouF,YAAYr4E,MAAKq4E,KAC3BnqF,EAAAA,EAAAA,KACI,IAAMmqF,EAAYqyG,qBACjBA,IACGjsM,KAAKyrM,mBAAmBQ,EAAmB,GAElD,GAET,CAEQvgD,UAAAA,GACJ1rJ,KAAKwL,SAAS63E,IAAIoxC,OAAOG,YAAW,IAAM50H,KAAKyrM,mBAAkB,KACjEzrM,KAAKwL,SAAS63E,IAAIoxC,OAAOye,aAAY,IAAMlzI,KAAKyrM,mBAAkB,IACtE,CAEA,6BAAYE,GACR,MAAMtB,EAAUrqM,KAAKwL,SAASsE,OAAO4yG,kBAAkB6oF,IAKvD,OAJKlB,IACDrqM,KAAKwL,SAAS2L,OAAOxI,MAAM,GAAD/O,OAAI2rM,GAA8B,4BAC5DvrM,KAAKwL,SAASqd,UAAUw2G,mBA7BU,iCA6ByC,yBAA0BksE,KAElGlB,CACX,CAUAxJ,YAAAA,CAAap5D,GACT,OAAO,IAAIzsG,SAA0B,CAACC,EAASimK,KAC3C,MAAMgL,EAAUA,YACLlsM,KAAK2rM,0BAA0BQ,mCAC/BnsM,KAAK2rM,0BAA0BS,yBAAyB,EAGnEpsM,KAAK2rM,0BAA0BQ,4BAA+Bp9K,IAC1DkM,EAAQlM,GACRm9K,GAAS,EAGblsM,KAAK2rM,0BAA0BS,0BAA6Bz9L,IACxDuyL,EAAOvyL,GACPu9L,GAAS,EAGb,IACIlsM,KAAK2rM,0BAA0B9K,aAAap5D,EAChD,CAAE,MAAO94H,GACLuyL,EAAOvyL,GACPu9L,GACJ,IAER,CAiBApL,YAAAA,GAAsB,CACtBC,kBAAAA,GAA4B,CAC5BC,iBAAAA,GAA2B,ECrFxB,MAAMqL,WAAoD3tH,EAAAA,EAC7DqjH,aAAAA,CAAc18E,GACV,OAAe,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAUrlG,eACb,KAAKklG,EAAAA,GACD,OAAO,IAAIglF,GAA0BlqM,KAAKwL,UAC9C,KAAK45G,EAAAA,GACD,OAAO,IAAIomF,GAA0BxrM,KAAKwL,UAC9C,QACI,OAAO,IAAIm1L,GAAyB3gM,KAAKwL,UAErD,ECEG,MAAM8gM,GACZv5L,WAAAA,CAA4B2I,EACXxB,GAAiD,KADtCwB,kBAAAA,EAA8C,KACzDxB,oBAAAA,CACjB,E,4BCrBD,MAAMqyL,GAAc,mBAAA58H,EAAA1vE,UAAAC,OAAIssM,EAAI,IAAAp8L,MAAAu/D,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJ28H,EAAI38H,GAAA5vE,UAAA4vE,GAAA,OAAgBpuD,KAAKC,UAAU8qL,EAAM,EAIjE,GAF0J1a,IAAS2a,EAAAA,GAAAA,SAAS3a,EAAMya,ICJ3K,IAAKG,G,uBAOX,SAPWA,GAAAA,EAAc,gCAAdA,EAAc,8BAAdA,EAAc,6BAAdA,EAAc,wBAAdA,EAAc,sBAAdA,EAAc,kCAOzB,CAPWA,KAAAA,GAAc,KCiCnB,IAAMC,IAAqB90L,GA4E7BC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKF,GAgBZF,EAAAA,GAAWxK,IAAGwF,GA/FZ,cAAoC4rE,EAAAA,EAKvC3rE,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAJT63H,gBAAU,OACVi3E,kCAA4B,OAkCpC5rB,2BAA0D,GAAG,KAErD6rB,kBAAmB,GAAIt0L,EAAAA,EAAAA,GAAA,mCAAAC,GAAA,WAoDvBs0L,2CAA6CC,IAAQ,IAAM/sM,KAAKwL,SAASonH,IAAIme,kBAAkBi8D,0CAA0C,CAC7IC,WAAY,OACb10L,EAAAA,EAAAA,GAAA,mBAAAE,GAAA,WAKKy0L,uBAAmC,GAAG,KAyGtCC,mBAAsBjjL,KAG1BN,EAAAA,EAAAA,KAAY,KACR5pB,KAAKotM,YAAc3wL,OAAOspC,KAAK77B,GAAM3Z,KAAIsK,IAAO,CAC5CA,UACAnH,WAASxO,EAAAA,EAAAA,GAAA,GAAMlF,KAAKqtM,oBAAoBnjL,EAAKrP,QAC9C,IAIF9V,EAAAA,MAAMkP,kBAAkBjU,KAAK21H,cAC9B31H,KAAKu0K,aACLv0K,KAAK21H,WAAa,KACtB,GAjNA38G,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASyqC,QAAQC,eAAc,KACpDl2C,KAAKstM,OAAO,IAGhBttM,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eACnC,IAAM3P,KAAKwL,SAAS0N,eAAeq0L,gCACnC,CAACrxL,iBAAiB,IAEtB,MAAMsxL,EAAkBxtM,KAAKwL,SAASye,cAAcC,KAAK7a,OAAO+vE,GAAAA,IAC5DouH,IACIA,EAAgBn+L,OAAOs3H,MAAK8mE,GAvBf,yBAuB+BA,EAAahlM,UACzDzI,KAAK6sM,kBAAmB,GAG5B7sM,KAAKghL,2BAA6BwsB,EAAgBnpE,aAC7C9zH,KAAIm9L,IACD,IAAIxzL,EAAsBszL,EAAgBn+L,OAAOs3H,MAAK8mE,GAAgBA,EAAahlM,QAAUilM,EAAKjlM,QAClG,OAAIyR,EACO,IAAIoyL,GAA0BoB,EAAMxzL,GAEpC,IACX,IAEHuF,QAAOiuL,IAAS3oM,EAAAA,MAAM4oM,OAAOD,KAE1C,CAKA,mBAAI3sB,GACA,OAAO/gL,KAAK6sM,gBAChB,CAEA,gCACI1zL,GAAkE,IAADy0L,EAAAC,EACjE,MAAMC,EAAuB9tM,KAAK+tM,2BACN,IAADC,EAA3B,IAAKF,EACD,OAAyC,QAAzCE,EAAOhuM,KAAKghL,2BAA2B,UAAE,IAAAgtB,EAAAA,EAAI,KAGjD,MAAM/uL,EAA+I,QAAtI2uL,EAAG5tM,KAAKghL,2BAA2Br6C,MAAKsnE,IAAG,IAAAC,EAAAC,EAAA,OAA2B,QAAvBD,EAAAD,EAAI/zL,2BAAmB,IAAAg0L,GAAQ,QAARC,EAAvBD,EAAyBzuL,cAAM,IAAA0uL,OAAR,EAAvBA,EAAiCnuL,kBAAsC,OAApB8tL,QAAoB,IAApBA,OAAoB,EAApBA,EAAsB9tL,cAAc,eAAA4tL,EAAAA,EAAI,KAEzJ,OAAI3uL,IAIqC,QAAzC4uL,EAAO7tM,KAAKghL,2BAA2B,UAAE,IAAA6sB,EAAAA,EAAI,KACjD,CAEQE,wBAAAA,GAA4C,IAADnlE,EAC/C,MAAMsc,EAAgD,QAAzCtc,EAAG5oI,KAAKwL,SAASorB,SAASE,WAAW0rG,YAAI,IAAAoG,OAAA,EAAtCA,EAAwC9+H,MACxD,GAAIo7I,EAAS,CAET,OADaA,EAAQ7/I,MAAM,KACb,EAClB,CAEA,OAAO,IACX,CAEA,wBAAMsa,CAAmBC,GACjBA,SACM5f,KAAKwL,SAASorB,SAASjc,KAAK,YAAD/a,OAAaggB,GAEtD,CAMQwuL,8BAAAA,CAA+BtkM,GAEnC,IAAI+lI,EAAmB,CAAC,EAEpB/lI,EAAM8iH,WACN9iH,EAAM8iH,UAAUhhE,SAAQ,CAAC72C,EAAUzP,IAAMuqI,EAAiB96H,GAAYzP,IAG1EtF,KAAKquM,6BAA2BnpM,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAO4E,GAAK,IAAE8iH,UAAY9iH,EAAM8iH,WAAa,GAAKiY,aAAcgL,GACpG,CAUA,iBACW2nB,GACP,MAAM82C,EAAuBtuM,KAAKotM,YAC7B3tL,QAAO8uL,IAAcxpM,EAAAA,MAAMiP,QAAQu6L,EAAU76L,YAAc66L,EAAU76L,UAAU8B,SAC/EjF,KAAIg+L,GAAaA,EAAU1zL,UAOhC,OANK2zL,EAAAA,GAAAA,IAAYxuM,KAAKktM,uBAAwBoB,KAG1CtuM,KAAKktM,uBAAyBoB,GAG3BtuM,KAAKktM,sBAChB,CAEA,kCAAMK,GACF,GAAIvtM,KAAKwL,SAASkE,KAAKC,aAAc,CAEjC,MAAM4gI,QAA8BvwI,KAAK8sM,6CAEzC9sM,KAAKouM,+BAA+B,CAChCxhF,UAAW2jB,EAAsBk+D,UACjC5yH,OAAQ00D,EAAsBm+D,QAEtC,CACJ,CAEA,cAAIp3C,GAOA,OAJIvyJ,EAAAA,MAAMkP,kBAAkBjU,KAAK4sM,+BAC7B5sM,KAAK2uM,SAGF3uM,KAAKotM,WAChB,CAEQuB,MAAAA,GACJ3uM,KAAK21H,WAAa31H,KAAKwL,SAAS8e,KAAK6tK,iBACrCn4L,KAAK4sM,6BAA+B5sM,KAAKwL,SAAS63E,IAAIoxC,OAAOgf,uBAAuBzzI,KAAKmtM,mBAAmB12K,KAAKz2B,OACjHA,KAAKwL,SAAS63E,IAAIm8D,qBACtB,CAEQ8tD,KAAAA,GACAttM,KAAK4sM,+BACL5sM,KAAK4sM,6BAA6BhhL,MAClC5rB,KAAK4sM,6BAA+B,MAGxC5sM,KAAKwL,SAAS63E,IAAIq8D,oBACtB,CAEOnkI,YAAAA,CAAaV,GAChB,IAAI0zL,EAAYvuM,KAAKs3J,WAAW3wB,MAAK4nE,GAAaA,EAAU1zL,UAAYA,EAAQ1b,aAChF,OAAOovM,EAAYA,EAAU76L,UAAY,IAC7C,CAEQk7L,sBAAAA,CAAuBl7L,GAC3B,OAA0B,KAAb,OAATA,QAAS,IAATA,OAAS,EAATA,EAAW8B,SAAmBzQ,EAAAA,MAAMkP,kBAA2B,OAATP,QAAS,IAATA,OAAS,EAATA,EAAWoC,2BAIrEpC,EAAUoC,wBAA0B9V,KAAK6uM,4BAAqC,OAATn7L,QAAS,IAATA,OAAS,EAATA,EAAWoC,0BAHrEpC,CAKf,CAEQo7L,0BAAAA,CAA2Bp7L,GAC/B,IAAIq7L,EAAsBr7L,EAAUyJ,qBACpC,GAAIpY,EAAAA,MAAMkP,kBAAkB86L,GACxB,OAAOr7L,EAGX,IAAIs7L,EAAgC,GA6BpC,OA5BID,GAAsD,IAA/BA,EAAoB7uM,OAC3C8uM,EAAgCD,GAGhCC,EAAgCD,EAAoBx+L,KAAI69C,GAE5C,OAAJA,QAAI,IAAJA,GAAAA,EAAM42F,WAAW,MAAQ52F,EAAKluD,OAAS,GAAc,OAATkuD,GAG/B,OAATA,GACOq2E,MAAM7qH,OAAOw0C,IAHjB,KAMAA,IAIf4gJ,EAAgCA,EAA8BvvL,QAAO2uC,IAASrpD,EAAAA,MAAMkP,kBAAkBm6C,KAKlG4gJ,EAFAA,EAA8B9uM,OAAS,EAEP8uM,EAA8BruL,MAAM,EAAG,GAEvC,IAGxCjN,EAAUyJ,qBAAuB6xL,EAC1Bt7L,CACX,CAoBQ25L,mBAAAA,CAAoB35L,GAMxB,OALK3O,EAAAA,MAAMkP,kBAAkBP,KACzBA,EAAY1T,KAAK4uM,uBAAuBl7L,GACxCA,EAAY1T,KAAK8uM,2BAA2Bp7L,IAGzCA,CACX,CAEQ6gK,UAAAA,GACJ,IAAI06B,EAA0BjvM,KAAKwL,SAASk2L,OAAOwN,2BAA2BlvM,KAAK21H,YACnF31H,KAAKwL,SAASqd,UAAUw2G,mBAAmB,mBAAoB,4BAA6B4vE,EAChG,CAEQJ,2BAAAA,CAA4BM,GAChC,OAAO3zK,EAAAA,SAAS6tG,MAAM8lE,GAASC,cAAcr2K,yBACjD,CAEA,qBAAIooJ,GAAyD,IAADkuB,EACxD,OAAuC,QAAvCA,EAAOrvM,KAAKquM,mCAA2B,IAAAgB,OAAA,EAAhCA,EAAkCxqE,YAC7C,CAEO/oH,YAAAA,GACH,GAAI/W,EAAAA,MAAMiP,QAAQhU,KAAKs3J,YACnB,MAAO,GAEX,IAAIr4I,EAAYjf,KAAKmZ,6BAEjBm2L,EAAkBrwL,EAAUvD,kBAAkB6D,QAAQE,QAAQ8vL,IAC9D,MAAMt8L,EAAWjT,KAAKwL,SAAS2P,MAAMC,SAASm0L,GAC9C,QAAKt8L,KAIAlO,EAAAA,MAAMiP,QAAQhU,KAAKub,aAAag0L,MAIjCxqM,EAAAA,MAAMiP,QAAgB,OAARf,QAAQ,IAARA,OAAQ,EAARA,EAAUkD,iBAIpBpR,EAAAA,MAAMiP,QAAQhU,KAAKs3J,YAAW,IAItCk4C,EAAkC,CAClC5gD,gBAAiB3vI,EAAUvD,kBAAkBkzI,gBAC7C6gD,2BAA4BxwL,EAAUvD,kBAAkB8yI,gCAE5D,GAAIxuJ,KAAK0vM,iBAA0B,OAATF,QAAS,IAATA,OAAS,EAATA,EAAW5gD,iBAAkB,CAAC,IAAD+gD,EACnD,MAAMC,EAAiC,CACnCz+D,iBAAkD,QAAlCw+D,EAAE3vM,KAAKquM,mCAA2B,IAAAsB,OAAA,EAAhCA,EAAkC9qE,aACpDuM,oBAAqBrsI,EAAAA,MAAMC,SAAkB,OAATwqM,QAAS,IAATA,OAAS,EAATA,EAAWC,4BAAuC,OAATD,QAAS,IAATA,OAAS,EAATA,EAAWC,2BAA6B,GAIzH,OAAI1qM,EAAAA,MAAMkP,kBAAkBgL,EAAU/E,oBAAoB21L,gBAC/C7vM,KAAKwL,SAASgsE,SAASy5D,UAAUq+D,EAAiBM,GAElD5vM,KAAKwL,SAASgsE,SAASy5D,UAAUq+D,EAAiBM,GAAgBjvL,MAAM,EAAG1B,EAAU/E,oBAAoB21L,eAExH,CAEA,IAGI,OAFAP,EAAkBtvM,KAAK8vM,8BAA8BR,GAEjDvqM,EAAAA,MAAMkP,kBAAkBgL,EAAU/E,oBAAoB21L,gBAC/CP,EAEAA,EAAgB3uL,MAAM,EAAG1B,EAAU/E,oBAAoB21L,eAGtE,CAAE,MAAOlhM,GAEL,OADA3O,KAAKwL,SAAS2L,OAAOxI,MAAM,gCAAiCA,GACrD2gM,CACX,CACJ,CAEQI,gBAAAA,GAA6D,IAADK,EAChE,OAD6C9vM,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,IAClBD,KAAKwL,SAASwkM,0BAA0BC,kBAAkB,oBAC7ElrM,EAAAA,MAAMiP,QAAwC,QAAjC+7L,EAAC/vM,KAAKquM,mCAA2B,IAAA0B,OAAA,EAAhCA,EAAkCnjF,UAC5D,CAEQsjF,eAAAA,CAAgBvY,GACpB,IAAI3sK,EAAchrB,KAAKwL,SAAS8e,KAAKY,iBACjCilL,EAAa30K,EAAAA,SAAS6tG,MAAMsuD,GAAWj3E,kBAAoBllF,EAAAA,SAAS6tG,MAAMr+G,EAAY+xC,WAAa,IAAM/xC,EAAYgyC,cAAc0jD,kBACvI,OAAOyvF,GAvTe,MAuTwBA,EAAa,CAC/D,CAEAL,6BAAAA,CAA8BM,GAC1B,IAAIC,EAA0B,GAC9B,IAAK,IAAIhtK,EAAQ,EAAGA,EAAQ+sK,EAAQlwM,OAAQmjC,IAAS,CACjD,IAAIitK,EAAcF,EAAQ/sK,GACtB3vB,EAAY1T,KAAKub,aAAa+0L,GAC7BvrM,EAAAA,MAAMiP,QAAQN,IAAeA,EAAU8B,gBACjC46L,EAAQ/sK,GAGX3vB,EAAUoC,yBACN9V,KAAKkwM,gBAAgBx8L,EAAUoC,0BAC/Bu6L,EAAc11L,KAAK21L,GAInC,CAGA,OADAF,EAAUA,EAAQ3wL,QAAO0vJ,IAASpqK,EAAAA,MAAMkP,kBAAkBk7J,MAC3CvvK,OAAOywM,EAC1B,CAEAE,kBAAAA,CAAmBC,GACf,OAAOA,IAAiB9D,GAAe+D,SAC3C,IACHt0L,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gCAlSIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,gCAAAtJ,GAAAsJ,WAAA5D,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,+BAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAiCsD,IAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kCAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,kCAAAtJ,GAAAsJ,WAAA3D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,eAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAmB5B,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iBAGxCo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,iBAAAtJ,GAAAsJ,WAAAtJ,ICjIN,MAAM49L,GAA0BA,CAACC,EAAkCC,KAExE,GAAI7rM,EAAAA,MAAMkP,kBAAkB08L,IAAkB5rM,EAAAA,MAAMkP,kBAAkB08L,EAAcpU,YAClF,OAAO,EAGT,IAAK,IAAIj3L,EAAI,EAAGA,EAAIsrM,EAAkB1wM,OAAQoF,IAC5C,GAAIP,EAAAA,MAAMkP,kBAAkB08L,EAAcpU,WAAWqU,EAAkBtrM,KACrE,OAAO,EAIX,OAAO,CAAI,EAGN,SAASurM,GAA0BF,EAAkC9oF,GAC1E,MAAMkB,EAAa4nF,EAAcpU,WACjC,OAAIxzE,EAIGA,EAAuB,OAAZlB,QAAY,IAAZA,OAAY,EAAZA,EAAc7nG,eAHvB,IAKX,C,gBCJO,MAAM8wL,GAET/9L,WAAAA,CAA6Bg+L,EACAC,EACAC,EACAzlM,EACAnF,GAAuC,KAJvC0qM,cAAAA,EAAqB,KACrBC,uBAAAA,EAAqD,KACrDC,qBAAAA,EAA8C,KAC9CzlM,SAAAA,EAAiC,KACjCnF,QAAAA,CAC7B,CAEA,qBAAc6qM,GACV,OAAOlxM,KAAKixM,sBAChB,CAEOE,gBAAAA,GACH,OAAOnxM,KAAKkxM,kBAAkB9U,WAAWp8L,KAAK+wM,cAClD,CAEUK,wBAAAA,GAAqC,IAADC,EAC1C,MAAMlV,EAAcn8L,KAAKmxM,mBACzB,IAAIhV,EACA,OAAO,EAGX,GAAe,QAAfkV,EAAGrxM,KAAKqG,eAAO,IAAAgrM,GAAZA,EAAcC,qBACb,OAAOtxM,KAAKqG,QAAQirM,qBAAqBnV,GAG7C,MAAMoV,EAA4B,gBACsC,IAADC,EAAvE,OAAId,GAAwBvU,EAAa,CAACoV,IACsD,UAApB,QAAjEC,EAAAX,GAA0B1U,EAAaoV,UAA0B,IAAAC,OAAA,EAAjEA,EAAmExxL,gBAE1EhgB,KAAKwL,SAAS2L,OAAOxI,MAAM,SAAD/O,OAAU2xM,EAAyB,uBAAA3xM,OAAsBI,KAAK+wM,cAAa,cAGlG,EACX,CAEA,eAAYU,GACR,OAAOzxM,KAAKoxM,0BAChB,CAEA,aAAIn2L,GAAsB,IAADy2L,EAErB,IAAIC,EAA+C,KAEnD,GAAe,QAAfD,EAAG1xM,KAAKqG,eAAO,IAAAqrM,GAAZA,EAAcE,oCAAqC,CAElDD,EADkC3xM,KAAKqG,QAAQurM,sCACN5xM,KAAKwL,SAASoL,WAAWwrE,oBACtE,CAMA,OAJGr9E,EAAAA,MAAMkP,kBAAkB09L,KACvBA,EAAe3xM,KAAKgxM,0BAGhBW,GACJ,KAAK1yH,GAAAA,EAAwB4yH,SACzB,OAAO,EACX,KAAK5yH,GAAAA,EAAwB6yH,QACzB,OAAO,EACX,KAAK7yH,GAAAA,EAAwB8yH,YACzB,OAAO/xM,KAAKyxM,YAChB,QAEI,OADAzxM,KAAKwL,SAAS2L,OAAOxI,MAAM,uCAAD/O,OAAwC+xM,EAAY,SAAA/xM,OAAQI,KAAK+wM,iBACpF,EAGnB,EAGG,MAAMiB,WAA+BlzB,GAAAA,GCtFrC,MAAMmzB,GAAoDl/L,WAAAA,GAAA,KACpDm/L,kBAAoC,IAAK,CAElD9V,UAAAA,CAAW+V,GACP,OAAO,IACX,CAEAC,mBAAAA,GACI,OAAOp3K,QAAQC,SACnB,ECdG,MAAMo3K,GAAkD,2BAClDC,GAA6C,iCCQ7CC,GAAkC,CAC3CC,iBAAkB,GAClBC,SAAU,CAAC,EACXC,kBAAmB,MAGhB,MAAeC,GAClB5/L,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,CAE/B,CAKA,qBAAI0mM,GACA,OAAOlyM,KAAKwL,SAASoyC,aAAaC,QAAQy0J,GAC9C,CAEA,qBAAcJ,CAAkBpoM,GACzBA,EACC9J,KAAKwL,SAASoyC,aAAa+pF,QAAQ2qE,GAA4CxoM,GAE/E9J,KAAKwL,SAASoyC,aAAaE,WAAWw0J,GAE9C,CAEUM,uCAAAA,GAA2D,IAADC,EAChE,OAA0G,QAA1GA,EAAO7yM,KAAKwL,SAASoyC,aAAaijF,QAAwBwxE,WAAgD,IAAAQ,EAAAA,EAAIN,EAClH,CAEUO,YAAAA,CAAaX,EAAqBY,GACxC,IAAIZ,IAAgBY,IAAaA,EAASN,SACtC,OAAO,KAIX,MAAMzkE,EAAU+kE,EAASN,SAASN,EAAYnyL,eAC9C,OAAIguH,GAIAA,EAAQuuD,WAIkC,IAA3C9/K,OAAOspC,KAAKioF,EAAQuuD,YAAYr8L,OACxB,KAGJ8tI,EAXI,IAYf,E,aChDG,IAAMglE,IAAkCn7L,GAa1CC,EAAAA,GAAWxK,IAAGwF,GAbZ,cAAiD6/L,GACpD5/L,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,iBAAAC,GAAA,MAEhBxY,KAAKizM,UAAYjzM,KAAKkzM,gBACtBlzM,KAAKwL,SAASoyC,aAAaykF,QAAQgwE,GAAiDryM,KAAKizM,WACtFjzM,KAAKizM,UAAUP,oBACd1yM,KAAKkyM,kBAAoBlyM,KAAKizM,UAAUP,oBAG5C15L,EAAAA,EAAAA,IAAehZ,KACnB,CAKAo8L,UAAAA,CAAW+V,GACP,OAAOnyM,KAAK8yM,aAAaX,EAAanyM,KAAKizM,UAC/C,CAEAb,mBAAAA,GACI,OAAOp3K,QAAQC,SACnB,CAEQi4K,aAAAA,GACJ,MAAMC,EAAenzM,KAAKwL,SAAS63E,IAAIm/D,qBAAqB,iBAC5D,OAAG2wD,EACQnzM,KAAKozM,mBAAmBD,GAExBnzM,KAAK4yM,yCAEpB,CAEQQ,kBAAAA,CAAmBC,GACvB,IAAK,IAADC,EACA,MAAMP,EAA2BtxL,KAAK4nH,MAAMgqE,GAK5C,OAHGN,EAASP,kBACRxyM,KAAKwL,SAAS2L,OAAOxI,MAAM,0CAA2CokM,EAASP,kBAE5E,CACHA,iBAAkBO,EAASP,iBAC3BE,kBAAmBK,EAASL,kBAC5BD,SAA2B,QAAnBa,EAAEP,EAASN,gBAAQ,IAAAa,EAAAA,EAAI,CAAC,EAGxC,CAAE,MAAO5kM,GAEL,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,mCAAoCD,EAAK2kM,GAC7DrzM,KAAK4yM,yCAChB,CACJ,GAEHp6L,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA1J,I,aCzDM,IAAMygM,IAAiC17L,GAYzCC,EAAAA,GAAWxK,IAAGwF,GAZZ,cAAgD6/L,GACnD5/L,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,0BAAAC,GAAA,WAaHg7L,+BAAyB,OAEzBC,mCAA6B,EAb1CzzM,KAAK0zM,mBAAqBnB,GAC1BvyM,KAAKwzM,0BAA4BxzM,KAAK4yM,0CAEtC5yM,KAAKyzM,8BAAgCzzM,KAAK2zM,0BAE1C36L,EAAAA,EAAAA,IAAehZ,KACnB,CASAoyM,mBAAAA,GACI,OAAOpyM,KAAKyzM,6BAChB,CAEA,4BAAcE,GAEV,IAEI,IAAI3zM,KAAKwL,SAASye,cAAc6P,gBAAgBi3F,UAAU6iF,gCACtD,OAGJ,MAAMC,EAAiE,CACnEC,QAAS9zM,KAAKwL,SAAS63E,IAAIkB,aAC3BwvH,WAAY/zM,KAAKwL,SAAS63E,IAAIoB,gBAC9BipD,YAAa1tI,KAAKwL,SAAS63E,IAAIG,iBAC/B1vE,SAAU9T,KAAKwL,SAASqI,OAAOmI,GAAGmgB,YAGnCn8B,KAAKkyM,oBACJ2B,EAAQ3B,kBAAoBlyM,KAAKkyM,mBAGrC,MAAM7rL,QAAiBrmB,KAAKwL,SAASonH,IAAIohF,oBAAoBC,2BAA2BJ,IAExFjqL,EAAAA,EAAAA,KAAY,KAAO,IAADsqL,EACdl0M,KAAKkyM,kBAAoB7rL,EAASqsL,kBAClC1yM,KAAK0zM,mBAAqB,CACtBjB,SAA2B,QAAnByB,EAAE7tL,EAASosL,gBAAQ,IAAAyB,EAAAA,EAAI,CAAC,EAChC1B,iBAAkB,KAClBE,kBAAmBrsL,EAASqsL,kBAC/B,GAET,CAAE,MAAOhkM,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,iDAAkDD,EACjF,CAEJ,CAEA0tL,UAAAA,CAAW+V,GACP,IAAInkE,EAAUhuI,KAAK8yM,aAAaX,EAAanyM,KAAK0zM,oBAClD,OAAG1lE,GAIIhuI,KAAK8yM,aAAaX,EAAanyM,KAAKwzM,0BAC/C,GAEHh7L,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA1J,I,aCjCM,IAAMqhM,IAAmCt8L,GAmB3CC,EAAAA,GAAWxK,IAAGwF,GAnBZ,cAAkD4rE,EAAAA,EAErD3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,iCAAAC,GAAA,WAgDZ47L,eAAiBp0M,KAAKq0M,yBAAyB97F,GAAAA,IAAwB,IAAMv4G,KAAKwL,SAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAKC,iBAAiBC,gBAAe,KAK1KC,eAAiB10M,KAAKq0M,yBAAyB77F,GAAAA,IAAwB,IAAMx4G,KAAKwL,SAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAKI,iBAAiBF,gBAAe,KAK1KG,0BAA4B50M,KAAKq0M,yBAAyB57F,GAAAA,IAAoC,IAAMz4G,KAAKwL,SAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAKM,qCAAqCJ,gBAAe,KAKrNK,oBAAsB90M,KAAKq0M,yBAAyB37F,GAAAA,IAAkC,IAAM14G,KAAKwL,SAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAKQ,oBAAoBN,gBAAe,KAK5LO,eAAiBh1M,KAAKq0M,yBAAyB17F,GAAAA,IACnD,IAAM34G,KAAKwL,SAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAKU,uBAAuBR,eAAe,CACzGnD,qBAAuBnV,GPrFxB,SAAsCwU,EAAkC9oF,GAAgC,IAAD2pF,EAC5G,MAAiF,UAApB,QAAtDA,EAAAX,GAA0BF,EAAe9oF,UAAa,IAAA2pF,OAAA,EAAtDA,EAAwDxxL,cACjE,COmFkEk1L,CAA6B/Y,EAAa,kBACpGyV,oCAAqCA,IAAM5xM,KAAKwL,SAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAKU,uBAAuBE,6BAChI,KAKKC,gBAAkBp1M,KAAKq0M,yBAAyBz7F,GAAAA,IACpD,SAAA//C,EAAAC,EAAA,OAAoE,QAApED,EAAqD,QAArDC,EAAM94D,KAAKwL,SAASye,cAAcC,KAAKyzB,sBAAc,IAAAmb,OAAA,EAA/CA,EAAiD27I,qBAAa,IAAA57I,EAAAA,EAAIomB,GAAAA,EAAwB4yH,QAAQ,IAAE,KAKtGwD,iBAAmBr1M,KAAKq0M,yBAAyBx7F,GAAAA,IACrD,IAAM55B,GAAAA,EAAwB8yH,cAAY,KAKtCuD,iBAAmBt1M,KAAKq0M,yBAAyBv7F,GAAAA,IACrD,IAAM75B,GAAAA,EAAwB8yH,cAAY,KAKtCwD,aAAev1M,KAAKq0M,yBAAyBt7F,GAAAA,IACjD,IAAM/4G,KAAKwL,SAASye,cAAc6P,gBAAgB07K,YAAYf,gBAAe,KAKzEgB,gBAAkBz1M,KAAKq0M,yBAAyB76F,GAAAA,IACpD,IAAMv6B,GAAAA,EAAwB8yH,cAAa,KAKvC2D,0BAA4B11M,KAAKq0M,yBAAyBr7F,GAAAA,IAA0C,IAAM/5B,GAAAA,EAAwB8yH,cAAa,KAK/I4D,wBAA0B31M,KAAKq0M,yBAAyBp7F,GAAAA,IAC5D,SAAAjgD,EAAAC,EAAA,OAA+E,QAA/ED,EAA0D,QAA1DC,EAAMj5D,KAAKwL,SAASye,cAAcC,KAAKmM,2BAAmB,IAAA4iC,OAAA,EAApDA,EAAsD28I,2BAAmB,IAAA58I,EAAAA,EAAIimB,GAAAA,EAAwB4yH,QAAQ,IAAE,KAKjHgE,gBAAkB71M,KAAKq0M,yBAAyB36F,GAAAA,IACpD,IAAM15G,KAAKwL,SAASye,cAAc6P,gBAAgBo1F,KAAK4mF,uBAAsB,KAKzEC,YAAc/1M,KAAKq0M,yBAAyB16F,GAAAA,IAChD,IAAM16B,GAAAA,EAAwB8yH,cAAa,KA2DvCiE,iBAAmBh2M,KAAKq0M,yBAAyB56F,GAAAA,IACrD,IAAMx6B,GAAAA,EAAwB8yH,eAvL9B/4L,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAClCA,IAEO3P,KAAKi2M,0BADLtmM,EACiC,IAAIqjM,GAAmChzM,KAAKwL,UAE5C,IAAI+nM,GAAkCvzM,KAAKwL,SAChF,GACD,CACH0Q,iBAAiB,GAEzB,CAKA,qBAAIg2L,GACA,OAAOlyM,KAAKi2M,0BAA0B/D,iBAC1C,CAEA,4BAAcgE,CAAuBC,GAEjC,aADMn2M,KAAKi2M,0BAA0B7D,sBAC9B+D,EAAkBrsM,KAC7B,CAEAsyL,UAAAA,CAAW+V,GACP,OAAOnyM,KAAKi2M,0BAA0B7Z,WAAW+V,EACrD,CAEAC,mBAAAA,GACI,OAAOpyM,KAAKi2M,0BAA0B7D,qBAC1C,CAGQgE,oBAAAA,CAAqBrF,EAAuBsF,EAAgDhwM,GAChG,OAAO,IAAIyqM,GAAmBC,EAAesF,GAAiB,IAAMr2M,KAAKi2M,2BAA2Bj2M,KAAKwL,SAAUnF,EACvH,CAGQguM,wBAAAA,CAAyBtD,EAAuBsF,EAAgDhwM,GACpG,OAAO,IAAI2rM,IAAuB,IACvBhyM,KAAKo2M,qBAAqBrF,EAAesF,EAAiBhwM,IAEzE,CAGA,iBAAIiwM,GACA,OAAOt2M,KAAKo0M,eAAetqM,KAC/B,CAGA,iBAAIysM,GACA,OAAOv2M,KAAK00M,eAAe5qM,KAC/B,CAGA,4BAAI0sM,GACA,OAAOx2M,KAAK40M,0BAA0B9qM,KAC1C,CAGA,6BAAa2sM,GACT,aAAaz2M,KAAKk2M,uBAAuBl2M,KAAK80M,oBAClD,CAOA,iBAAI7oB,GACA,OAAOjsL,KAAKg1M,eAAelrM,KAC/B,CAIA,kBAAI6zC,GACA,OAAO39C,KAAKo1M,gBAAgBtrM,KAChC,CAIA,mBAAIutJ,GACA,OAAOr3J,KAAKq1M,iBAAiBvrM,KACjC,CAIA,mBAAI6tJ,GACA,OAAO33J,KAAKs1M,iBAAiBxrM,KACjC,CAIA,eAAI2/B,GACA,OAAOzpC,KAAKu1M,aAAazrM,KAC7B,CAIA,kBAAI2qB,GACA,OAAOz0B,KAAKy1M,gBAAgB3rM,KAChC,CAGA,4BAAI4sM,GACA,OAAO12M,KAAK01M,0BAA0B5rM,KAC1C,CAIA,0BAAI6sM,GACA,OAAO32M,KAAK21M,wBAAwB7rM,KACxC,CAIA,kBAAI8sM,GACA,OAAO52M,KAAK61M,gBAAgB/rM,KAChC,CAIA,cAAI2/C,GACA,OAAOzpD,KAAK+1M,YAAYjsM,KAC5B,CAEA,oBAAI+sM,GAEA,MAAMC,EAA8B92M,KAAKo8L,WAAWljF,GAAAA,IAE9CxjD,EAA+B,CAACrmD,OAAQ,IAC9C,GAAIqhM,GAAwBoG,EAA6B,CAAC,YAAc/xM,EAAAA,MAAM+qE,SAASgnI,EAA4Bva,WAAWltL,QAC1H,IACIqmD,EAAOrmD,OAASoS,KAAK4nH,MAAMytE,EAA4Bva,WAAWltL,OAAO2pE,QAAQ,KAAM,KAC3F,CAAE,MAAOtqE,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,6CAAD/O,OAA8Cs5G,GAAAA,GAA8B,KAAKxqG,EAC/G,CAEJ,OAAOgnD,CACX,CAEA,iCAAI07F,GACA,MAAM2lD,EAA+C/2M,KAAKo8L,WAAWjjF,GAAAA,IAGuB,IAAD69F,EAAAC,EAAAC,EAD3F,GAAIH,GACIrG,GAAwBqG,EAA8C,CAAC,WACvE,OAAqF,QAArFC,EAA8D,QAA9DC,EAAOF,EAA6Cxa,kBAAU,IAAA0a,GAAQ,QAARC,EAAvDD,EAAyDE,cAAM,IAAAD,OAAR,EAAvDA,EAAiEl3L,qBAAa,IAAAg3L,EAAAA,EAAI,KAIjG,OAAO,IACX,CAEA,4BAAII,GACA,MAAMC,EAAoCr3M,KAAKo8L,WAAWhjF,GAAAA,IAEuB,IAADk+F,EAAAC,EADhF,GAAIF,GACI3G,GAAwB2G,EAAmC,CAAC,WAC5D,OAAmD,QAAnDC,EAAOD,EAAkC9a,kBAAU,IAAA+a,GAAQ,QAARC,EAA5CD,EAA8CE,cAAM,IAAAD,OAAR,EAA5CA,EAAsDv3L,cAIrE,OAAO,IACX,CAEA,aAAI24J,GACA,MAAM8+B,EAAyBz3M,KAAKo8L,WAAW/iF,GAAAA,IAC/C,GAAIo+F,GACI/G,GAAwB+G,EAAwB,CAAC,WAAY,CAAC,IAADC,EAC7D,IAAIzwE,EAA0C,QAApCywE,EAAGD,EAAuBlb,kBAAU,IAAAmb,OAAA,EAAjCA,EAAmCP,OAChD,MAAMQ,EAAc1wE,EAAO5hI,MAAM,KAIjC,OAFA4hI,EAAS0wE,EAAYpnM,KAAKgf,GAAewQ,SAASxQ,KAE3C03G,CACX,CAGJ,OAAO,IACX,CAIA,mBAAIjsH,GACA,OAAOhb,KAAKg2M,iBAAiBlsM,KACjC,GACH0O,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,6BAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA5K2D,IAAIy1L,EAAwB,IAADn/L,IC1DhF,MAAM8kM,WAA6Bl5H,EAAAA,EACxC,aAAIzjE,GACF,QAAGjb,KAAKwL,SAASkE,KAAKC,cACb3P,KAAKwL,SAASuP,6BAA6BkxK,cAAchxK,SAIpE,E,gBCFK,IAAM48L,IAAkBhgM,GAqC1BI,EAAAA,GAAOC,MAAKpF,GArCV,cAAiC4rE,EAAAA,EAgBpC,iBAAIllD,GACA,OAAOx5B,KAAK83M,oBAAoB/2L,GAAAA,EAAYC,OAAS,CACzD,CAEA,gBAAI+2L,GACA,OAAO/3M,KAAK83M,oBAAoB/2L,GAAAA,EAAY+pK,OAAS,CACzD,CAEA,iBAAIktB,GACA,OAAOh4M,KAAK83M,oBAAoB/2L,GAAAA,EAAYgqK,QAAU,CAC1D,CAEAh4K,WAAAA,CAAY+sH,GACR1nH,MAAM0nH,IAAgBvnH,EAAAA,EAAAA,GAAA,gBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,2BAAAE,GAAA,OAEtBO,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKi4M,YACLj4M,KAAKk4M,cACT,CAGQC,WAAAA,CAAY/3L,EAAkB4/H,EAAqBo4D,GACvDp4M,KAAKogB,SAASg4L,GAASh4L,EACvBpgB,KAAK83M,oBAAoBM,GAASp4D,CACtC,CAKQi4D,SAAAA,GACJj4M,KAAKwL,SAAS63E,IAAIoxC,OAAOsf,kBAAiB,KACtC/zI,KAAKk4M,cAAc,IAEvBl4M,KAAKwL,SAAS63E,IAAIoxC,OAAO8S,qBAAoB7nH,UACzC1f,KAAKk4M,sBACEl4M,KAAKwL,SAAS6sM,YAAYC,oCAAoCvpL,EAAO,GAEpF,CAEQmpL,YAAAA,GACJ,IAAK,MAAMK,KAAgB97L,OAAOonC,OAAO9iC,GAAAA,GAAc,CACnD,MAAM,SAACX,EAAQ,YAAE4/H,GAAehgJ,KAAKw4M,SAASD,GAC9Cv4M,KAAKm4M,YAAY/3L,EAAU4/H,EAAau4D,EAC5C,CACJ,CAGQC,QAAAA,CAASD,GACb,IAAIn4L,EAAW,GACX4/H,EAAsBy4D,IAM1B,OAJIz4M,KAAKwL,SAASkE,KAAKC,eACnByQ,EAAWpgB,KAAKwL,SAAS63E,IAAI08D,YAAYw4D,GACzCv4D,EAAchgJ,KAAKwL,SAAS63E,IAAI08D,YAAYw4D,GAAc,IAEvD,CAACn4L,WAAU4/H,cACtB,CAEA04D,mBAAAA,CAAoBzlM,GAChB,OAAGA,EAASu2E,0BACDxpF,KAAK+3M,aAEL/3M,KAAKw5B,aAEpB,GAEHhhB,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAjFItE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBACoC,CAC3C,CAACuE,GAAAA,EAAY+pK,MAAO,GACpB,CAAC/pK,GAAAA,EAAYgqK,OAAQ,GACrB,CAAChqK,GAAAA,EAAYC,MAAO,GACtB,IAADvI,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAEAtE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAC+C,CACtD,CAACuE,GAAAA,EAAY+pK,MAAO,EACpB,CAAC/pK,GAAAA,EAAYgqK,OAAQ,EACrB,CAAChqK,GAAAA,EAAYC,MAAO,EACtB,KAAD7E,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,eAAAvE,IAAA4E,OAAAC,yBAAA5J,GAAAsJ,UAAA,eAAAtJ,GAAAsJ,WAAAtJ,I,+BCbE,MAAM6lM,WAAiD56G,GAAAA,EAEhDG,4BAAAA,GACN,OAAOl+F,KAAKwL,SAASye,cAAcC,KAAK+5G,SAAS20E,iBACrD,CAEUr6G,6BAAAA,GACN,MAAO,CACHv1E,SAAUgd,GAAAA,GAA+BpX,WACzC0L,MAAOyO,GAAAA,GAA4B8vK,qBAE3C,ECjBJ,MAaaC,GAbMr7M,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6NAEpBe,IAAA,IAAC,wBAACo6M,GAAwBp6M,EAAA,OAAKo6M,EAA0B,SAAW,CAAC,IACnEz2M,IAAA,IAAC,wBAACy2M,GAAwBz2M,EAAA,OAAKy2M,EAA0B,SAAW,CAAC,IAEhEjyM,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMqT,WAAWoN,OAAO5W,OAAOixM,eAAeC,uBAAuB95M,UAAU,IACjG0L,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAM6J,OAAO4B,UAAUxK,UAAU,I,mBCJlD,MAAM+5M,IAAgCz7M,EAAAA,GAAAA,IAAOq7M,GAAPr7M,CAA0CE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4LAEjE+yD,GAAAA,EAAW+mD,YAEL55G,GAASA,EAAMI,MAAM6J,OAAO8J,a,OCLjD,MAAMsnM,IAAqC17M,EAAAA,GAAAA,IAAOq7M,GAAPr7M,CAA0CE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wJAEjFe,IAAA,IAAC,wBAACo6M,GAAwBp6M,EAAA,OAAKo6M,EAA0B,UAAY,CAAC,IACpEz2M,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOmrD,YAAY,IAEjCpsD,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMqT,WAAWoN,OAAO5W,OAAOixM,eAAeC,uBAAuB95M,UAAU,ICHjGi6M,IAA8BnnM,EAAAA,GAAAA,GAAc6mM,IACpD5nJ,MAAMgoJ,IACN/mM,WAAWgnM,IAAoC/mM,Q,OCL7C,MAAMinM,GAAwC57M,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8RAOpDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,I,mBCL3C,MAAMk7M,IAAwC77M,EAAAA,GAAAA,IAAO47M,GAAP57M,CAA6CE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4DACvFe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOmrD,YAAY,GAEpCvC,GAAAA,EAAW82C,OCHX8xG,IAAiCtnM,EAAAA,GAAAA,GAAconM,IACvDlnM,WAAWmnM,IACXlnM,Q,OCJE,MAAMonM,GAA4C/7M,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8FAIxDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,ICHrCq7M,IAAqCxnM,EAAAA,GAAAA,GAAcunM,IAA2CpnM,Q,OCDpG,MAAMsnM,GAA4Cj8M,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2MAM/De,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,IAC7B/gD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,ICNrCu7M,IAAqC1nM,EAAAA,GAAAA,GAAcynM,IAC3DtnM,Q,gBCGE,MAAMwnM,GAAoCn8M,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gmBAGvDE,GAASA,EAAM+7M,sBAAuBh5M,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,wBAAqB,KAOvDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWyS,UAAU,IAClCtO,IAAA,IAAC,gBAACy8J,GAAgBz8J,EAAA,OAAK,IAAMy8J,CAAe,IAQ/BjhK,GAASA,EAAMI,MAAMa,OAAOC,OAAO86M,kBAAkB36M,aAQxE2H,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAWC,SAAS,IAE5CN,GAASA,EAAM+7M,sBAAuBh5M,EAAAA,GAAAA,IAAGe,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,wBAAqB,KAGzDiN,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAMC,WAAW0S,SAAS,IACrC/S,GAAUA,EAAM+7M,qBAA+B,MAAR,QAC9C/7M,GAASA,EAAM+7M,sBAAuBh5M,EAAAA,GAAAA,IAAGsB,KAAAA,IAAAvE,EAAAA,GAAAA,GAAA,yBAAqB,K,gBCtC7D,MAAMm8M,IAA+Bt8M,EAAAA,GAAAA,IAAOm8M,GAAPn8M,CAAyCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4KACjFE,GAASA,EAAM+7M,sBAAuBh5M,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,wBAAqB,KAOvDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWo3C,SAAS,IAC5Cz3C,GAASA,EAAM+7M,sBAAuBh5M,EAAAA,GAAAA,IAAGe,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,wBAAqB,KAGzD0E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAW0S,SAAS,IAC5C/S,GAASA,EAAM+7M,sBAAuBh5M,EAAAA,GAAAA,IAAGsB,KAAAA,IAAAvE,EAAAA,GAAAA,GAAA,yBAAqB,K,OCb7D,MAAMo8M,IAAsCv8M,EAAAA,GAAAA,IAAOm8M,GAAPn8M,CAAyCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mEACjFe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWyS,UAAU,IAC9BtO,IAAA,IAAC,gBAACy8J,GAAgBz8J,EAAA,OAAK,IAAMy8J,CAAe,I,OCF1D,MAAMk7C,IAAsCx8M,EAAAA,GAAAA,IAAOm8M,GAAPn8M,CAAyCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sH,OCArF,MAAMs8M,IAAiCz8M,EAAAA,GAAAA,IAAOm8M,GAAPn8M,CAAyCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sHCI1Eu8M,IAA6BloM,EAAAA,GAAAA,GAAc2nM,IACnD5qI,aAAairI,IACb/oJ,MAAM6oJ,IACN7nM,aAAa8nM,IACb7oJ,QAAQ+oJ,IACR9nM,Q,OCJE,MAAMgoM,GAAwC38M,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gpBAEhDe,IAAA,IAAC,UAAC8sD,GAAU9sD,EAAA,OAAK8sD,EAAY,QAAU,MAAM,IAW7CnpD,IAAA,IAAC,UAAC+3M,GAAU/3M,EAAA,OAAK+3M,IAAc3yG,GAAAA,EAAkB4yG,SAAW,OAAS,MAAM,IAC1ExzM,IAAA,IAAC,UAACuzM,GAAUvzM,EAAA,OAAKuzM,IAAc3yG,GAAAA,EAAkB4yG,SAAW,OAAS,MAAM,IAC1EzvM,IAAA,IAAC,UAACwvM,GAAUxvM,EAAA,OAAKwvM,IAAc3yG,GAAAA,EAAkB4yG,SAAW,OAAS,MAAM,IAC1EtvM,IAAA,IAAC,UAACqvM,GAAUrvM,EAAA,OAAKqvM,IAAc3yG,GAAAA,EAAkB4yG,SAAW,OAAS,MAAM,IAEpE72L,IAAA,IAAC,UAAC42L,GAAU52L,EAAA,OAAK42L,IAAc3yG,GAAAA,EAAkB4yG,SAAW,MAAQ,MAAM,I,OCvB5F,MAAMC,IAAmC98M,EAAAA,GAAAA,IAAO28M,GAAP38M,CAA6CE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wI,OCCtF,MAAM48M,IAA0C/8M,EAAAA,GAAAA,IAAO28M,GAAP38M,CAA6CE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sQAOrFe,IAAA,IAAC,UAAC07M,GAAU17M,EAAA,OAAK07M,IAAc3yG,GAAAA,EAAkB4yG,SAAW,OAAS,CAAC,IACrEh4M,IAAA,IAAC,UAAC+3M,GAAU/3M,EAAA,OAAK+3M,IAAc3yG,GAAAA,EAAkB4yG,SAAW,OAAS,CAAC,IACrExzM,IAAA,IAAC,UAACuzM,GAAUvzM,EAAA,OAAKuzM,IAAc3yG,GAAAA,EAAkB4yG,SAAW,OAAS,CAAC,IACrEzvM,IAAA,IAAC,UAACwvM,GAAUxvM,EAAA,OAAKwvM,IAAc3yG,GAAAA,EAAkB4yG,SAAW,OAAS,CAAC,IAC/DtvM,IAAA,IAAC,UAACqvM,GAAUrvM,EAAA,OAAKqvM,IAAc3yG,GAAAA,EAAkB4yG,SAAW,MAAQ,MAAM,ICVtFG,IAAiCxoM,EAAAA,GAAAA,GAAcmoM,IACvDprI,aAAawrI,IACbtpJ,MAAMqpJ,IACNnoM,Q,kBCNE,MAAMsoM,GAAiDj9M,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4B,OCCjE,MAAM+8M,IAAmDl9M,EAAAA,GAAAA,IAAOi9M,GAAPj9M,CAAsDE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sDCCzGg9M,IAA0C3oM,EAAAA,GAAAA,GAAcyoM,IAChE1rI,aAAa2rI,IACbvoM,QCOE,MAAMyoM,WAAyC1oL,GAAAA,EAGlDpf,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAHTg9M,iBAAsE,IAAIv3G,GAAAA,EAAgB,CAAC7hG,MAAO,IAAKL,OAAQ,MAKnHrB,KAAK0mB,MAAQ,CACT+kC,WAAW,GAEfzrD,KAAK86M,iBAAiB9rI,aAAa,CAACttE,MAAO,IAAKL,OAAQ,MACxDrB,KAAK86M,iBAAiB3pJ,QAAQ,CAACzvD,MAAO,IAAKL,OAAQ,MACnDrB,KAAK86M,iBAAiB5pJ,MAAM,CAACxvD,MAAO,IAAKL,OAAQ,MACjDrB,KAAK86M,iBAAiB5oM,aAAa,CAACxQ,MAAO,IAAKL,OAAQ,KAC5D,CAEQ05M,kBAAAA,GACJ/6M,KAAKuyB,SAAS,CAAEk5B,WAAW,GAC/B,CAEAhsD,MAAAA,GACI,OACIC,EAAAA,GAAAA,KAACk7M,GAAuC,CAAA76M,UACpCyI,EAAAA,GAAAA,MAAC6sD,GAAAA,GAA6BnwD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACtBlF,KAAK86M,iBAAiBp3G,gBAAgB1jG,KAAKwL,SAAStN,MAAMknF,YAAU,IAAArlF,SAAA,EAExEL,EAAAA,GAAAA,KAAC+6M,GAA8B,CAC3BhvJ,UAAWzrD,KAAK0mB,MAAM+kC,UACtB4uJ,UAAWr6M,KAAKwL,SAASi3F,SAASm/D,4BAA8Bl6D,GAAAA,EAAkB4yG,SAAW5yG,GAAAA,EAAkBszG,cAInHt7M,EAAAA,GAAAA,KAACZ,GAAAA,GAAKoG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKlF,KAAKlC,OAAK,IAAEgpE,OAAQA,IAAM9mE,KAAK+6M,qBAAsBjyM,OAAK5D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAMlF,KAAKlC,MAAMgL,OAAK,IAAEpH,MAAO,OAAQL,OAAQ,iBAIpI,E,OC9CG,MAAM45M,GAAoCx9M,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,ySAMhDE,GAASA,EAAMI,MAAM6J,OAAO4B,YAK5BhL,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,I,OCV3C,MAAM88M,IAA+Bz9M,EAAAA,GAAAA,IAAOw9M,GAAPx9M,CAAyCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mSAExEe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOozM,oBAAoB,IACnC74M,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOqzM,sBAAsB,IACzCt0M,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAM6J,OAAO2tC,mBAAmB,IAGtE7qC,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAM6C,KAAKC,QAAQmvE,SAAS,IAGlCnlE,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAMC,WAAWC,SAAS,ICTvCi9M,IAA6BppM,EAAAA,GAAAA,GAAcgpM,IACnD/pJ,MAAMgqJ,IACN9oM,Q,OCJE,MCAMkpM,GDAoC79M,GAAAA,GAAO0iD,EAACxiD,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qDEqBnDiV,IAAqEtT,EAAAA,GAAAA,KAAUzB,IAAW,IAADy9M,EAC3F,MAAM74I,EAAW5kE,EAAM4kE,SAEjB84I,EAAoB,IAAIj7B,IAAI,CAC9B,CAAC,qBAAsBziL,EAAMI,MAAMuN,aAAaC,MAAMgoG,oBACtD,CAAC,gBAAiB51G,EAAMI,MAAMuN,aAAaC,MAAM8nG,eACjD,CAAC,mBAAoB11G,EAAMI,MAAMuN,aAAaC,MAAMkoG,kBACpD,CAAC,mBAAoB91G,EAAMI,MAAMuN,aAAaC,MAAM+nG,kBACpD,CAAC,4BAA6B31G,EAAMI,MAAMuN,aAAaC,MAAMqoG,sBAC7D,CAAC,uBAAwBj2G,EAAMI,MAAMuN,aAAaC,MAAMsoG,sBACxD,CAAC,iBAAkBl2G,EAAMI,MAAMuN,aAAaC,MAAMooG,uBAMtD,SAAS2nG,EAAQp9G,EAAsD30F,EAAqBgyM,GAExF,IAAI3rH,EAAW,GACX4rH,EAAY79M,EAAMmsB,cAAcC,KAAK8lE,IAMzC,OAJI2rH,GAAaA,EAAUjkC,YAAcikC,EAAUjkC,WAAW14K,QAAU28M,EAAUjkC,WAAW14K,OAAOq/F,KAClGtO,EAAW4rH,EAAUjkC,WAAW14K,OAAOq/F,IAGlCvgG,EAAM8X,YAAYC,UAAUk6E,EAAU,CAC3C,CAACrmF,GAAcgyM,GAErB,CAEA,MAAME,EAAkBl8L,UACpB,IAAIwK,EAAiC,CACjCnB,UAAW,mBACXC,SAAU,YACV/Q,OAAQ,OACRqiB,MAAM,GAAD16B,OAAK9B,EAAM4kE,SAAS5nD,IAAG,KAAAlb,OAAI9B,EAAMghK,YAE1ChhK,EAAM+qB,UAAUC,qBAAqBoB,GAAM,SAErCpsB,EAAM4kE,SAASC,SAAS,EAGlC,IAAIp2B,EAAkC,QAA9BgvK,EAAGz9M,EAAM4kE,SAASgB,oBAAY,IAAA63I,EAAAA,EAAI,GACvChvK,IACCA,EAAOzuC,EAAM84B,SAAS++B,aAAappB,GAAMptC,YAG7C,MACM08M,EADyC,qBAAjBn5I,EAAS5nD,KAA8Bhd,EAAM2kG,SAASq5G,cAAgB,GAEhGp8M,EAAAA,GAAAA,KAAC05M,GAA2B,CAACz5M,WAAWG,EAAAA,GAAAA,IAAQ,4BAA6Bi5M,wBAAyBj7M,EAAM2kG,SAASs2G,wBAAwBh5M,SACxIjC,EAAM2kG,SAASq5G,cAAgB,GAAK,MAAQh+M,EAAM2kG,SAASq5G,gBAE9D,KAEN,GAAIh+M,EAAM2kG,SAASs2G,wBAAyB,CACxC,MAAMh2I,EA3CV,SAAwBzoC,GACpB,MAAMyhL,EAAUzhL,EAAM0uE,OAAOhwB,QAAQ,UAAW,KAChD,OAAOwiI,EAAkBQ,IAAID,GAAWP,EAAkBxxH,IAAI+xH,GAAYj+M,EAAMI,MAAMuN,aAAaC,MAAMqoG,oBAC7G,CAwCiBysE,CAAe99G,EAAS5nD,KACrC,OAAOpb,EAAAA,GAAAA,KAAC4sC,GAAAA,EAAI,CAACC,KAAMA,EAAMypB,UAAWl4D,EAAM+V,OAAOC,SAAS/T,UACtDyI,EAAAA,GAAAA,MAAC+wM,GAA8B,CAC3B55M,UAAWsX,KAAWyrD,EAAS5nD,KAAKhb,EAAAA,GAAAA,IAAQ,iBAC5CuH,QAASu0M,EAAgB77M,SAAA,EAEzByI,EAAAA,GAAAA,MAACixM,GAAkC,CAAA15M,SAAA,EAC/BL,EAAAA,GAAAA,KAACqjE,EAAI,CAACt8D,KAAM3I,EAAMK,WAAWyS,WAAa,IAAM,IAC/CirM,MAELn8M,EAAAA,GAAAA,KAACi6M,GAAkC,CAAA55M,UAC/BL,EAAAA,GAAAA,KAAA,QAAMC,WAAWG,EAAAA,GAAAA,IAAQ,yBAAyBC,SAC5CjC,EAAM4kE,SAAS5gE,aAX+B4gE,EAAS5nD,IAgB7E,CAEA,OACIpb,EAAAA,GAAAA,KAACy6M,GAA0B,CAEvBx6M,UAAWsX,KAAWyrD,EAAS5nD,KAAKhb,EAAAA,GAAAA,IAAQ,iBAC5CuH,QAASu0M,EACT/B,qBAAsB/7M,EAAM2kG,SAASC,8BACrCq8D,gBAAiBjhK,EAAMihK,gBAAgBh/J,UAGvCyI,EAAAA,GAAAA,MAAC8jC,GAAAA,EAAI,CAACC,KAAMA,EAAMypB,UAAWl4D,EAAM+V,OAAOC,SAAUmY,IAAKqvL,GAA2Bv7M,SAAA,EACpFL,EAAAA,GAAAA,KAACm7M,GAGG,CACAzmM,IAAKsuD,EAASz7D,KACd+uD,UAAWl4D,EAAM+V,OAAOC,SACxB2C,MAAM,EACN9W,UAAW,YACXmwD,YAAahyD,EAAMmsB,cAAcC,KAAK+kC,gBAAgBw+D,cAAcwuF,gCACpE9nM,IAAKsnM,EAAQ,MAAO,eAAgB/4I,EAAS5gE,MAC7C2G,MAAOgzM,EAAQ,QAAS,eAAgB/4I,EAAS5gE,SAErD0G,EAAAA,GAAAA,MAAC6yM,GAA0B,CAAAt7M,SAAA,EACvBL,EAAAA,GAAAA,KAAA,QAAMC,WAAWG,EAAAA,GAAAA,IAAQ,yBAAyBC,SAC5CjC,EAAM4kE,SAAS5gE,OAEpB+5M,SAxBAn5I,EAAS5nD,IA2BW,IAIxBohM,IAAuC7kM,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,WAAY,WAAY,aAAc,SAAU,QAAS,gBAAiB,cAAe,c,qCC7HnK,MAAMspM,WAAmDz9G,GAAAA,EAClDK,mBAAAA,CAAoB14F,GAC1B,OAAQ3G,EAAAA,GAAAA,KAACw8M,GAAoC,CAEzCx5I,SAAU1iE,KACV8+J,UAAWz4J,EAAQy4J,UACnBC,gBAAiB14J,EAAQ04J,iBAHpB/+J,KAAK8a,IAKlB,ECC+D,IAE9DshM,IAAS,SAATA,GAAAA,EAAS,sBAATA,EAAS,4BAATA,EAAS,8BAATA,EAAS,4BAATA,EAAS,8BAATA,EAAS,iCAATA,EAAS,qCAATA,EAAS,yCAATA,EAAS,iCAATA,EAAS,+BAATA,EAAS,8BAATA,KAAAA,GAAS,KAcd,MAAMC,GAAsC,CACxC,CAACx6C,GAAqBz7H,OAAQ,CAACg2K,GAAUh2K,MAAOg2K,GAAUE,SAAUF,GAAUpkD,UAAWokD,GAAUG,aAAcH,GAAUzmH,YAAaymH,GAAUI,YAClJ,CAAC36C,GAAqB9sE,WAAY,CAACqnH,GAAUzmH,YAAaymH,GAAUrnH,UAAWqnH,GAAUpkD,UAAWokD,GAAUh2K,MAAOg2K,GAAUK,aAAcL,GAAUE,UACvJ,CAACz6C,GAAqBxsE,UAAW,CAAC+mH,GAAUzmH,YAAaymH,GAAU/mH,SAAW+mH,GAAUpkD,UAAWokD,GAAUh2K,MAAOg2K,GAAUK,aAAcL,GAAUE,UACtJ,CAACz6C,GAAqB66C,gBAAiB,CAACN,GAAUzmH,YAAaymH,GAAUrnH,UAAWqnH,GAAUpkD,UAAWokD,GAAUh2K,MAAOg2K,GAAUK,aAAcL,GAAUE,UAC5J,CAACz6C,GAAqB86C,eAAgB,CAACP,GAAUzmH,YAAaymH,GAAU/mH,SAAU+mH,GAAUpkD,UAAWokD,GAAUh2K,MAAOg2K,GAAUK,aAAcL,GAAUE,UAC1J,CAACz6C,GAAqBlsE,aAAc,CAACymH,GAAUzmH,YAAaymH,GAAU/mH,SAAU+mH,GAAUpkD,UAAYokD,GAAUh2K,MAAOg2K,GAAUK,aAAcL,GAAUE,UACzJ,CAACz6C,GAAqB+6C,cAAe,CAACR,GAAUzmH,YAAaymH,GAAUK,aAAcL,GAAUpkD,UAAWokD,GAAUh2K,MAAOg2K,GAAUE,SAAUF,GAAU7mH,aACzJ,CAACssE,GAAqBg7C,aAAc,CAACT,GAAUh2K,MAAOg2K,GAAUE,SAAUF,GAAUpkD,UAAWokD,GAAUI,WAAYJ,GAAUG,aAAcH,GAAUU,eACvJ,CAACj7C,GAAqBk7C,aAAc,CAACX,GAAUzmH,YAAaymH,GAAUh2K,MAAMg2K,GAAUpkD,UAAWokD,GAAUE,SAAUF,GAAUG,aAAcH,GAAUK,eAGpJ,IAAMO,IAAenlM,GAoCvBC,EAAAA,GAAWxK,IAAGyK,GAOdE,EAAAA,GAAOC,MAAKF,GAKZF,EAAAA,GAAWxK,IAAG8W,GAGdnM,EAAAA,GAAOC,MAAKpF,GAnDV,cAA8B4rE,EAAAA,EAEjC3rE,WAAAA,CAAYvH,EAAoDmzF,GAC5DvmF,MAAM5M,GAAU,KAD4CmzF,sBAAAA,EAAoD,KAgCnGs+G,2BAAqB,GAAA1kM,EAAAA,EAAAA,GAAA,sBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,oBAAAE,GAAA,OA7BlCO,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKi9M,sBAAwB,IAAItE,GAAyCntM,GAE1ExL,KAAKk9M,iBAAiBl9M,KAAKwL,SAASye,cAAcC,KAAK+5G,SAASk5E,mBAEhEn9M,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASitK,oBAAoB//F,YACjD0kI,IACY,OAALA,QAAK,IAALA,GAAAA,EAAO1kC,SACP14K,KAAKq9M,mBAAmBD,EAAM1kC,QAClC,GAEJ,CACIx8J,iBAAiB,IAGzBlc,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAClCA,IACOA,EACA3P,KAAKs9M,uBAELt9M,KAAKu9M,kBAAkB,EAC3B,GAEJ,CACIrhM,iBAAiB,GAE7B,CAOA,iBAAI4/L,GACA,OAAO97M,KAAKw9M,cAChB,CAGAD,iBAAAA,CAAkBE,GACdz9M,KAAKw9M,eAAiBC,CAC1B,CAMQP,gBAAAA,CAAiB7tM,GACrBrP,KAAK0+J,aAAervJ,CACxB,CAEQguM,kBAAAA,CAAmB9tL,GAEvB,IAAImuL,EAAcrB,GAAoC9sL,GACjDmuL,EAKL19M,KAAKk9M,iBAAiBQ,GAJlB19M,KAAKwL,SAAS2L,OAAOxI,MAAM,uBAAD/O,OAAwB2vB,EAAE,6BAK5D,CAGA,0BAAc+tL,GAEV,MAAMK,EAA+B39M,KAAKwL,SAASye,cAAcw8G,kCACjE,IAAKk3E,IAAiC54M,EAAAA,MAAMgrE,QAAQ4tI,EAA6Bp+L,SAE7E,YADAvf,KAAKu9M,kBAAkB,GAK3B,MAAMvkC,QAAkBh5K,KAAKwL,SAAS2P,MAAM6mH,kBAAkB27E,EAA6Bp+L,SACrFq+L,EAAY59M,KAAK69M,oCAEjBC,EAA0C,CAAC,EACjD9kC,EAAU/qH,QAAO,CAAC6vJ,EAAUlwB,KACxB,MAAMtsD,EAAKssD,EAAG74K,SAId,OAHIusH,IAAOs8E,EAAUt8E,KACjBw8E,EAASx8E,GAAMA,GAEZw8E,CAAQ,GAChBA,GAEH99M,KAAKu9M,kBAAkB9gM,OAAOspC,KAAK+3J,GAAU59M,OACjD,CAEAo4K,kBAAAA,GACQt4K,KAAKwL,SAASkE,KAAKC,cACnB3P,KAAK+9M,qBAEb,CAEQA,mBAAAA,GAEJ,MAAMJ,EAA+B39M,KAAKwL,SAASye,cAAcw8G,kCAC5Dk3E,GAAiC54M,EAAAA,MAAMgrE,QAAQ4tI,EAA6Bp+L,WAIjFvf,KAAKg+M,kCAAkCL,EAA6Bp+L,SACpEvf,KAAKu9M,kBAAkB,GAC3B,CAEQM,iCAAAA,GACJ,MAAMnoJ,EAAwC,CAAC,EAC/C,IACI,MAAM8gG,EAAcx2J,KAAKwL,SAASoyC,aAAaC,QAAQ79C,KAAKi+M,oCAC5D,OAAKl5M,EAAAA,MAAM+qE,SAAS0mF,IAGpBA,EAAYnxJ,MAAM,KAAKumD,SAAQ72C,IAC3B2gD,EAAO3gD,GAAYA,CAAQ,IAExB2gD,GALIA,CAMf,CAAE,MAAMhnD,GAEJ,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,mBAAD/O,OAAoBI,KAAKi+M,mCAAkC,wCAAwCvvM,GACtHgnD,CACX,CACJ,CAEQsoJ,iCAAAA,CAAkCF,GACtC,MAAM74E,EAAY64E,EAASr4M,KAAK,KAChCzF,KAAKwL,SAASoyC,aAAa+pF,QAAQ3nI,KAAKi+M,mCAAoCh5E,EAChF,CAEQg5E,gCAAAA,GACJ,MAAM,GAANr+M,OAhKyC,kBAgKE,KAAAA,OAAII,KAAKwL,SAASkE,KAAKszE,IACtE,CAGA,oBAAIk7H,GACA,OAAQn5M,EAAAA,MAAMiP,QAAQhU,KAAKwL,SAASye,cAAcC,KAAK+5G,SAASk6E,UAAUC,yBAC9E,CAEA,kBAAI/8C,GACA,MAAMg9C,EAA0Br+M,KAAKwL,SAASye,cAAcC,KAAK+5G,SAASk6E,UAAU5jM,yBACpF,OAAQxV,EAAAA,MAAMiP,QAAQqqM,EAC1B,CAEA,qBAAIz/C,GACA,MAAM0/C,EAAiBt+M,KAAKwL,SAAStN,MAAMuN,aAAahL,OAAOm+J,kBAI/D,OAAI0/C,IAAmB52G,GAAAA,EAAkB62G,MAAQD,IAAmB52G,GAAAA,EAAkBszG,WAC3EsD,EAEPt+M,KAAKk+M,kBAAoBl+M,KAAKqhK,eACvB35D,GAAAA,EAAkBszG,WAElBtzG,GAAAA,EAAkB4yG,QAEjC,CAEA,+BAAI14C,GACA,OAAO5hK,KAAK4+J,oBAAsBl3D,GAAAA,EAAkB4yG,QACxD,CAEA,iCAAI53G,GACA,OAAO1iG,KAAK4+J,oBAAsBl3D,GAAAA,EAAkBszG,UACxD,CAEA,2BAAIjC,GACA,OAAO/4M,KAAK4+J,oBAAsBl3D,GAAAA,EAAkB62G,IACxD,CAEQC,yBAAAA,GACJ,OAAOx+M,KAAKwL,SAASye,cAAcC,KAAK+5G,SAASk6E,UAAUC,wBAC/D,CAEAh9C,iBAAAA,GACI,MAAMq9C,EAAkBz+M,KAAKwL,SAASye,cAAcC,KAAK+5G,SAASk6E,UAGlE,MAAO,CACH3jM,iBAAiB,EACjByH,UAJcjiB,KAAKwL,SAAStN,MAAMi2B,gBAAgBquE,6BAKlDloF,YAJgBta,KAAKk+M,iBAAmBl+M,KAAKw+M,4BAA8BC,EAAgBnkM,YAK3FD,WAAYokM,EAAgBpkM,WAC5BE,yBAA0BkkM,EAAgBlkM,yBAElD,CAEQmkM,YAAAA,CAAa5jM,GACjB,IAAI6jM,EAAiB3+M,KAAKwL,SAASoL,WAAWrI,QAAQ41D,UAAUy6I,+BAA+B9jM,EAAK9a,KAAKi9M,sBAAuBj9M,KAAK2+F,uBACrI,OAAGggH,GAII,IAAIxC,GAA2CrhM,EAAK9a,KAAKi9M,sBAAuBj9M,KAAKwL,SAAUxL,KAAK2+F,sBAC/G,CAEAggE,wBAAAA,GACI,OAAO3+J,KAAK0+J,aAAanuJ,KAAIuK,GAAO9a,KAAK0+M,aAAa5jM,KACjD2E,QAAOijD,GAAYA,EAASj2D,SACrC,GACH+L,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBArKoC,CAAE,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,qBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,qBAAAtJ,GAAAsJ,WAAA3D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAYJ,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,oBAAAtJ,GAAAsJ,WAAAtJ,I,OCzF7B,MCAM+rM,GDAiCphN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4K,mBECjD,MCDMkhN,IDCqCrhN,EAAAA,GAAAA,IAAOsnD,GAAAA,GAAPtnD,CAAqBE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gC,OEAhE,MCDMmhN,IDCsCthN,EAAAA,GAAAA,IAAOu1D,GAAAA,GAAPv1D,CAAgCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8B,OEA5E,MCDMohN,IDC+CvhN,EAAAA,GAAAA,IAAOsnD,GAAAA,GAAPtnD,CAAqBE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8BEWpEqhN,IAA+E1/M,EAAAA,GAAAA,KAAUzB,IAClG,MAAM0N,GAAWqD,EAAAA,GAAAA,KACXqwM,EAAgBphN,EAAMqhN,mBAEtBC,EAAet1M,GACVA,EAAM3K,WAAWkgN,SAAS,EAAG,KAGxC,OACI72M,EAAAA,GAAAA,MAACq2M,GAAuB,CAACl/M,WAAWG,EAAAA,GAAAA,IAAQ,6BAA6BC,SAAA,EACrEyI,EAAAA,GAAAA,MAACu2M,GAA4B,CAACp/M,WAAWG,EAAAA,GAAAA,IAAQ,iCAAiCC,SAAA,CAC7Eq/M,EAAYF,EAAcxkL,SAAS,IAAE0kL,EAAYF,EAAcn2E,aAEpErpI,EAAAA,GAAAA,KAACs/M,GAAqC,CAAAj/M,SACjCyL,EAASoK,YAAYC,UAAU,uCAEpCnW,EAAAA,GAAAA,KAACo/M,GAA2B,CAAA/+M,SACvByL,EAASoK,YAAYC,UAAU,wCAEd,I,aCpB3B,MAAMypM,GAAgD,yCAEtD,IAAMC,IAAsB1nM,GAIhCC,EAAAA,GAAWxK,IAAGwF,GAJV,cAAqC4rE,EAAAA,EAW1C3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,GAAU,KAVVg0M,uBAA0Bx/M,KAAKwL,SAASoL,WAAW6oM,4BAA0BlnM,EAAAA,EAAAA,GAAA,sBAAAC,GAAA,WAK7EisC,eAA6C,KAAK,KAClDi7J,gCAAwD,KAAK,KAC7DC,gCAAwD,KAAK,KAuG7DC,mBAA0B,MAlGhC5mM,EAAAA,EAAAA,IAAehZ,MAEXA,KAAKw/M,uBAAuBK,gBAC9B7/M,KAAKyP,UACH,IAAMzP,KAAKwL,SAASkE,KAAKC,eACzBA,IACKA,EACD3P,KAAK8/M,eAEL9/M,KAAK+/M,eACP,GAEF,CACE7jM,iBAAiB,GAIzB,CAEA,0BAAY8jM,GACV,MAAMC,EAAuBjgN,KAAKwL,SAASoyC,aAAaC,QAAQyhK,IAChE,OAAGW,EACOlgL,SAASkgL,GAGZ,IACT,CAEA,0BAAYD,CAAuBl2M,GAC9B/E,EAAAA,MAAMkP,kBAAkBnK,GACzB9J,KAAKwL,SAASoyC,aAAaE,WAAWwhK,IAEtCt/M,KAAKwL,SAASoyC,aAAa+pF,QAAQ23E,GAAuCx1M,EAE9E,CAEA,gBAAYo2M,GACV,MAAM1sF,EAAiBxzH,KAAKggN,uBAC5B,OAAGj7M,EAAAA,MAAMkP,kBAAkBu/G,IAIpBxzH,KAAKwL,SAAS8e,KAAKuyC,MAAQ22D,CACpC,CAEA,kBAAcssF,GACT9/M,KAAKkgN,cACNlgN,KAAKmgN,sBAGPngN,KAAK2/M,gCAAkC3/M,KAAKwL,SAAS63E,IAAIoxC,OAAO4f,sBAAqB,KACnFr0I,KAAKggN,uBAAyBhgN,KAAKwL,SAAS8e,KAAKuyC,MAAQ78D,KAAKw/M,uBAAuBY,aAAa1/F,kBAClG1gH,KAAKmgN,qBAAqB,IAI5BngN,KAAK0/M,gCAAkC1/M,KAAKwL,SAAS63E,IAAIoxC,OAAOyf,sBAAqBx0H,UACnF1f,KAAKqgN,uBACLrgN,KAAKggN,uBAAyB,WACxBhgN,KAAKsgN,yBAAyB,GAExC,CAEQP,aAAAA,GAAiB,IAADQ,EAAAC,EAEtBxgN,KAAKqgN,uBAE+B,QAApCE,EAAAvgN,KAAK2/M,uCAA+B,IAAAY,GAApCA,EAAsC30L,MACtC5rB,KAAK2/M,gCAAkC,KAEH,QAApCa,EAAAxgN,KAAK0/M,uCAA+B,IAAAc,GAApCA,EAAsC50L,MACtC5rB,KAAK0/M,gCAAkC,KAEvC1/M,KAAKggN,uBAAyB,IAChC,CAEA,6BAAcM,GACZ,UACQtgN,KAAKwL,SAASonH,IAAI6tF,uBAAuBC,uBAAuB,CACpEC,sBAAuB3gN,KAAKw/M,uBAAuBY,aAAa7jL,cAEpE,CAAE,MAAO7tB,GACP1O,KAAKwL,SAAS2L,OAAOxI,MAAM,sCAAuCD,EACpE,CAEF,CAEQkyM,oBAAAA,IACNh3L,EAAAA,EAAAA,KAAY,KACP5pB,KAAKkgN,aACNlgN,KAAK01H,eAAiBl6F,EAAAA,SAASsY,iBAAiB9zC,KAAKggN,uBAAyBhgN,KAAKwL,SAAS8e,KAAKuyC,QAEjG78D,KAAKggN,uBAAyB,KAC9BhgN,KAAK01H,eAAiBl6F,EAAAA,SAASsY,iBAAiB,GAClD,GAEJ,CAGQ+sK,oBAAAA,GACN7gN,KAAK4gN,uBACL5gN,KAAK4/M,oBAAqB9zL,EAAAA,GAAAA,GAAiB,8BAA6B,KACtE9rB,KAAK4gN,uBAEF5gN,KAAKkgN,aACNlgN,KAAK8gN,yBAEL9gN,KAAKqgN,sBACP,GACC,IACL,CAEQU,mBAAAA,GACH/gN,KAAK4/M,qBACN7zL,cAAc/rB,KAAK4/M,oBACnB5/M,KAAK4/M,mBAAqB,KAE9B,CAEQO,mBAAAA,GAENngN,KAAKwL,SAAS4vB,OAAOgiB,WAAWplB,IAC9Bh4B,KAAKykD,eAAiBzsB,GACft4B,EAAAA,GAAAA,KAACu/M,GAA6B,CAACE,iBAAkBA,IAAMn/M,KAAK01H,mBAClE,CACDjtH,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,gCAC3CwnC,gBAAgB,EAChB/hB,iBAAiB,EACjBuiC,0BAA0B,IAG5B79D,KAAKwL,SAASqd,UAAUC,qBAAqB,CAC3CC,UAAU,QACVC,SAAS,yBACT/Q,OAAO,eACN,GAEHjY,KAAK6gN,sBAGP,CAEQR,oBAAAA,GACNrgN,KAAK+gN,sBACF/gN,KAAKykD,iBACNzkD,KAAKykD,eAAexsB,QACpBj4B,KAAKykD,eAAiB,KACtBzkD,KAAKwL,SAASqd,UAAUC,qBAAqB,CAC3CC,UAAU,QACVC,SAAS,yBACT/Q,OAAO,eACN,GAIP,CAEQ6oM,sBAAAA,GAEc,IADP9yM,SAASgzM,wBAAuBlhN,EAAAA,GAAAA,IAAQ,8BAC5CI,SACPF,KAAKwL,SAASqd,UAAUC,qBAAqB,CAC3CC,UAAU,QACVC,SAAS,yBACT/Q,OAAO,sBACN,GACHjY,KAAK+gN,sBACL/gN,KAAKwL,SAASsE,OAAOiuC,SAEzB,GAGDvlC,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBApLoCgf,EAAAA,SAASsY,iBAAiB,EAAG,IAADhhC,I,mBCb1D,IAAMmuM,IAAkBppM,GAC1BC,EAAAA,GAAWxK,IAAGyK,GAsBdE,EAAAA,GAAOC,MAAKpF,GAvBV,MAMHC,WAAAA,CAAmBmuM,EAAuBC,GAKtC,GAL6F,KAA9ED,MAAAA,EAAa,KAAUC,yBAAAA,GAAoD5oM,EAAAA,EAAAA,GAAA,iBAAAC,GAAA,WAFtF4oM,oBAAc,GAAA7oM,EAAAA,EAAAA,GAAA,6BAAAE,GAAA,OAGlBO,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKohN,eAAiBtxM,OAAOuxM,WAAWH,GAEpClhN,KAAKohN,eAAeviL,iBACpB7+B,KAAKohN,eAAeviL,iBAAiB,SAAU7+B,KAAKshN,4BACjD,GAAIthN,KAAKohN,eAAez6L,YAC3B3mB,KAAKohN,eAAez6L,YAAY3mB,KAAKshN,2BAClC,KAAIthN,KAAKohN,eAAeG,SAG3B,MAAM,IAAItxI,MAAM,mDAFhBjwE,KAAKohN,eAAeG,SAAWvhN,KAAKshN,qBAGxC,CACAthN,KAAKshN,sBAAsBthN,KAAKohN,eACpC,CAWA/iM,OAAAA,GACQre,KAAKohN,eAAe91K,oBACpBtrC,KAAKohN,eAAe91K,oBAAoB,SAAUtrC,KAAKshN,uBAChDthN,KAAKohN,eAAeI,eAC3BxhN,KAAKohN,eAAeI,eAAexhN,KAAKshN,uBACjCthN,KAAKohN,eAAeG,WAC3BvhN,KAAKohN,eAAeG,cAAWphN,EAEvC,GACHqY,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,yBAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAjB4BilM,IACrB,IAAIC,EAAiB1hN,KAAK2hN,YAAcF,EAAgBG,QACxD5hN,KAAK2hN,UAAYF,EAAgBG,QAC7B5hN,KAAKmhN,0BAA4BO,GACjC1hN,KAAKmhN,yBAAyBM,EAAgBG,QAClD,CACF,IAAD9uM,I,gBC5BE,IAAM+uM,IAAiBhqM,GAGzBC,EAAAA,GAAWxK,IAAGyK,GAcdE,EAAAA,GAAOC,MAAKpF,GAjBV,cAAgC4rE,EAAAA,EAMnC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KANZs2M,yBAAmB,GAAAvpM,EAAAA,EAAAA,GAAA,uBAAAC,GAAA,OAOvBQ,EAAAA,EAAAA,IAAehZ,MAEf,MAAMwtI,EAAc,CAAC,EACpB/wH,OAAOspC,KAAKsyC,GAAAA,GAA4CzsC,SAAQqrC,IAC7Du2C,EAAYv2C,GAAa,IAAIgqH,GAAmB5oH,GAAAA,EAAapB,GAAYj3F,KAAK+hN,sBAAsBtrL,KAAKz2B,MAAM,IAEnHA,KAAK8hN,oBAAsBt0E,CAC/B,CAGAu0E,qBAAAA,GACI/hN,KAAK6sI,gBAAkB,IAAI/vE,IAC/B,CAEA,MAAIl+D,GACA,OAAOoB,KAAK8hN,oBAAoBljN,GAAG+iN,SACvC,CACA,aAAI9wM,GACA,OAAO7Q,KAAK8hN,oBAAoBjxM,UAAU8wM,SAC9C,CACA,UAAIrpH,GACA,OAAOt4F,KAAK8hN,oBAAoBxpH,OAAOqpH,SAC3C,CACA,aAAI1oL,GACA,OAAOj5B,KAAK8hN,oBAAoB7oL,UAAU0oL,SAC9C,CACA,aAAIpsK,GACA,OAAOv1C,KAAK8hN,oBAAoBvsK,UAAUosK,SAC9C,CACA,UAAIppH,GACA,OAAOv4F,KAAK8hN,oBAAoBvpH,OAAOopH,SAC3C,CACA,aAAIhxM,GACA,OAAO3Q,KAAK8hN,oBAAoBnxM,UAAUgxM,SAC9C,CACA,aAAIvjN,GACA,OAAO4B,KAAK8hN,oBAAoB1jN,UAAUujN,SAC9C,CACA,UAAInpH,GACA,OAAOx4F,KAAK8hN,oBAAoBtpH,OAAOmpH,SAC3C,CACA,aAAIt+L,GACA,OAAOrjB,KAAK8hN,oBAAoBz+L,UAAUs+L,SAC9C,CACA,cAAI51K,GACA,OAAO/rC,KAAK8hN,oBAAoB/1K,WAAW41K,SAC/C,CACA,WAAI/wL,GACA,OAAO5wB,KAAK8hN,oBAAoBlxL,QAAQ+wL,SAC5C,CACA,cAAI/wM,GACA,OAAO5Q,KAAK8hN,oBAAoBlxM,WAAW+wM,SAC/C,CACA,OAAI9wL,GACA,OAAO7wB,KAAK8hN,oBAAoBjxL,IAAI8wL,SACxC,CACA,YAAIv4K,GACA,OAAOppC,KAAK8hN,oBAAoB14K,SAASu4K,SAC7C,CACA,aAAIj2K,GACA,OAAO1rC,KAAK8hN,oBAAoBp2K,UAAUi2K,SAC9C,CACA,aAAI7wL,GACA,OAAO9wB,KAAK8hN,oBAAoBhxL,UAAU6wL,SAC9C,CACA,iBAAI7uJ,GACA,OAAO9yD,KAAK8hN,oBAAoBhvJ,cAAc6uJ,SAClD,CAEA,SAAIp/M,GACA,OAAOvC,KAAK8hN,oBAAoBv/M,MAAMo/M,SAC1C,CACA,aAAIppJ,GACA,OAAOv4D,KAAK8hN,oBAAoBvpJ,UAAUopJ,SAC9C,CAEA,YAAIjqH,GACA,OAAO13F,KAAK8hN,oBAAoBpqH,SAASiqH,SAC7C,CACA,gBAAItyI,GACA,OAAOrvE,KAAK8hN,oBAAoBzyI,aAAasyI,SACjD,CAEA,WAAIhqH,GACA,OAAO33F,KAAK8hN,oBAAoBnqH,QAAQgqH,SAC5C,CACA,eAAIhpH,GACA,OAAO34F,KAAK8hN,oBAAoBnpH,YAAYgpH,SAChD,CACA,iBAAI9oH,GACA,OAAO74F,KAAK8hN,oBAAoBjpH,cAAc8oH,SAClD,CACA,eAAI5oH,GACA,OAAO/4F,KAAK8hN,oBAAoB/oH,YAAY4oH,SAChD,CAEA,cAAI9pH,GACA,OAAO73F,KAAK8hN,oBAAoBjqH,WAAW8pH,SAC/C,CACA,kBAAI1oH,GACA,OAAOj5F,KAAK8hN,oBAAoB7oH,eAAe0oH,SACnD,CACA,oBAAIzoH,GACA,OAAOl5F,KAAK8hN,oBAAoB5oH,iBAAiByoH,SACrD,CACA,kBAAIxoH,GACA,OAAOn5F,KAAK8hN,oBAAoB3oH,eAAewoH,SACnD,GACHnpM,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAhH4B,IAAIsgD,IAAO,KAAD3gD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,yBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,yBAAAtJ,GAAAsJ,WAAAtJ,I,4BCThC,MAAMkvM,WAAqBtjI,EAAAA,EAC9B19B,OAAAA,GACE,OAAOihK,EAAAA,GAAAA,IACT,CAEAC,MAAAA,CAAOC,GACH,MAAO,8EAA8E1qJ,KAAK0qJ,EAC9F,CAEA1/E,OAAAA,CAAQ34H,GACJ,IAAI04H,EAAO,EAEX,MAAM4/E,EAAW3gM,KAAKC,UAAU5X,GAChC,GAAwB,IAApBs4M,EAASliN,OACT,OAAOsiI,EAEX,IAAK,IAAIl9H,EAAI,EAAGA,EAAI88M,EAASliN,OAAQoF,IAAK,CAEtCk9H,GAASA,GAAQ,GAAKA,EADX4/E,EAASC,WAAW/8M,GAE/Bk9H,GAAOA,CACX,CAEA,OAAOA,CACX,ECrBJ,MAAM8/E,GAAoB,YAEnB,IAAMC,IAA0B1qM,GAEpCC,EAAAA,GAAWxK,IAAGyK,GAedE,EAAAA,GAAOC,MAAKpF,GAjBR,cAAyC4rE,EAAAA,EAK9C3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,iBAAAC,GAAA,OAEhBQ,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKwiN,6BAELxiN,KAAKyP,UAAU,IAAMzP,KAAKwL,SAASkE,KAAKC,eACrCA,GAAiBA,GAAgB3P,KAAKwiN,8BAE3C,CAGQC,mBAAAA,CAAoBlrH,GAC1Bv3F,KAAK04E,UAAY6e,CACnB,CAEA,gCAAcirH,GACZ,MAAME,EAAkC1iN,KAAKwL,SAASye,cAAc6P,gBAAgB6oL,KAAKC,0BAEzF,MADgB79M,EAAAA,MAAMkP,kBAAkByuM,IAA2CA,GAEjF,OAGF,MAAMG,EAAkB7iN,KAAKwL,SAASmoH,QAAQqrB,UAAUsjE,IAKxD,GAJIO,GACF7iN,KAAKyiN,oBAAoBhhM,KAAK4nH,MAAMw5E,IAGnC7iN,KAAKwL,SAASkE,KAAKC,aAAc,CAClC,IAAImzM,QAA8C9iN,KAAKwL,SAASonH,IAAIyY,eAAe03E,yBAChE,OAAfD,QAAe,IAAfA,GAAAA,EAAiBpqC,UACnB14K,KAAKyiN,oBAAoBK,GACzB9iN,KAAKgjN,0BAA0BF,GAEnC,CACF,CAEQE,yBAAAA,CAA0BzrH,GAChC,IAAIi8B,EAAsB,IAAI12D,KAC9B02D,EAAeyvF,QAAQzvF,EAAe0vF,UAAY,GAClDljN,KAAKwL,SAASmoH,QAAQC,aAAa0uF,GAAkB7gM,KAAKC,UAAU61E,GAAci8B,EACpF,GACDh7G,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA7C0C,IAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,uBAAAtJ,GAAAsJ,WAAAtJ,ICTxC,MAAMqwM,GACTpwM,WAAAA,CAAoB2jH,GAAqC,KAArCA,UAAAA,CACpB,CAEU0sF,eAAAA,GACN,MAAO,EACX,CAEQC,cAAAA,CAAeC,GACnB,IAAIrpJ,EAAG,GAAAr6D,OAAMI,KAAKojN,mBAAiBxjN,OAAG0jN,GACtC,OAAGrpJ,EAAI+qF,WAAW,KACP/qF,EAEJ,IAAMA,CACjB,CAEUspJ,eAAAA,GACN,OAAOvjN,KAAK02H,UAAU9/G,WAAW4sM,gBACrC,CAGUC,SAAAA,CAAqBH,EAAeriE,GAC1C,OAAOjhJ,KAAK02H,UAAUrzC,IAAI29D,SAAShhJ,KAAKqjN,eAAeC,GAAQriE,EACnE,CAEUyiE,QAAAA,CAAoBJ,EAAeriE,GACzC,OAAOjhJ,KAAK02H,UAAUrzC,IAAI69D,QAAQlhJ,KAAKqjN,eAAeC,GAAQriE,EAClE,ECvBG,MAAM0iE,WAA+BR,GACjCC,eAAAA,GACT,MAAO,uBACR,CACAQ,yBAAAA,GACC,OAAO5jN,KAAKyjN,UAAU,4BACvB,EAaM,MAAMI,WAA0CV,GAC5CC,eAAAA,GACT,MAAO,kCACR,CACAU,iBAAAA,CAAkBjQ,GACjB,OAAO7zM,KAAKyjN,UAAU,oBAAqB5P,EAC5C,CAEAkQ,qBAAAA,GACC,OAAO/jN,KAAKyjN,UAAU,kBACvB,EAuBM,MAAMO,WAAkCb,GACpCC,eAAAA,GACT,MAAO,0BACR,CACAa,oBAAAA,CAAqBC,GACpB,OAAOlkN,KAAKyjN,UAAU,QAASS,EAChC,CAEAC,qBAAAA,GACC,OAAOnkN,KAAKyjN,UAAU,SACvB,EAsBM,MAAMW,WAA4BjB,GAC9BC,eAAAA,GACT,MAAO,oBACR,CACAnP,0BAAAA,CAA2BJ,GAC1B,OAAO7zM,KAAKyjN,UAAU,6BAA8B5P,EACrD,EAqBM,MAAMwQ,WAA0BlB,GAC5BC,eAAAA,GACT,MAAO,kBACR,CACApW,yCAAAA,CAA0C6G,GACzC,OAAO7zM,KAAKyjN,UAAU,4CAA6C5P,EACpE,CAEAhjE,yCAAAA,CAA0CyzE,GACzC,OAAOtkN,KAAKyjN,UAAU,mCAAoCa,EAC3D,EAwBM,MAAMC,WAA2BpB,GACvCqB,cAAAA,GACC,OAAOxkN,KAAKyjN,UAAU,iCACvB,CAEAgB,iBAAAA,GACC,OAAOzkN,KAAKyjN,UAAU,qBACvB,CAEAiB,YAAAA,CAAa7Q,GACZ,OAAO7zM,KAAKyjN,UAAU,8BAA+B5P,EACtD,CAEA8Q,cAAAA,CAAe9Q,GACd,OAAO7zM,KAAKyjN,UAAU,iCAAkC5P,EACzD,EAgBM,MAAM+Q,WAA8BzB,GAChCC,eAAAA,GACT,MAAO,sBACR,CACAyB,gCAAAA,CAAiChR,GAChC,OAAO7zM,KAAKyjN,UAAU,aAAc5P,EACrC,EASM,MAAMiR,WAAsB3B,GACxBC,eAAAA,GACT,MAAO,cACR,CACA2B,mBAAAA,GACC,OAAO/kN,KAAKyjN,UAAU,sBACvB,EA2BM,MAAMuB,WAA+B7B,GACjCC,eAAAA,GACT,MAAO,uBACR,CACAv3E,eAAAA,CAAgBgoE,GACf,OAAO7zM,KAAKyjN,UAAU,kBAAmB5P,EAC1C,EAuBM,MAAMoR,WAAmC9B,GACrCC,eAAAA,GACT,MAAO,2BACR,CACA8B,qBAAAA,CAAsBrR,GACrB,OAAO7zM,KAAKyjN,UAAU,wBAAyB5P,EAChD,CAEAsR,gCAAAA,CAAiCjB,GAChC,OAAOlkN,KAAKyjN,UAAU,mCAAoCS,EAC3D,EA4CM,MAAMkB,WAA+BjC,GACjCC,eAAAA,GACT,MAAO,uBACR,CACAiC,wBAAAA,CAAyBxR,GACxB,OAAO7zM,KAAKyjN,UAAU,wBAAyB5P,EAChD,CAEA6M,sBAAAA,CAAuB7M,GACtB,OAAO7zM,KAAKyjN,UAAU,yBAA0B5P,EACjD,EA8BM,MAAMyR,WAAqCnC,GACvCC,eAAAA,GACT,MAAO,4BACR,CACAmC,cAAAA,GACC,OAAOvlN,KAAKyjN,UAAU,iBACvB,EA2CM,MAAM+B,WAAkCrC,GACpCC,eAAAA,GACT,MAAO,0BACR,CACAqC,wBAAAA,CAAyB5R,GACxB,OAAO7zM,KAAKyjN,UAAU,gBAAiB5P,EACxC,CAEA6R,wBAAAA,CAAyB7R,GACxB,OAAO7zM,KAAKyjN,UAAU,gBAAiB5P,EACxC,CAEA8R,mCAAAA,CAAoC9R,GACnC,OAAO7zM,KAAKyjN,UAAU,2BAA4B5P,EACnD,EA0MM,MAAM+R,WAAuBzC,GACzBC,eAAAA,GACT,MAAO,eACR,CACAyC,YAAAA,CAAa3yM,GACZ,OAAOlT,KAAKyjN,UAAU,eAAgBvwM,EACvC,CAEA0kE,YAAAA,CAAa1kE,GACZ,OAAOlT,KAAKyjN,UAAU,eAAgBvwM,EACvC,CAEA2kE,iBAAAA,CAAkB3kE,GACjB,OAAOlT,KAAKyjN,UAAU,oBAAqBvwM,EAC5C,CAEA4yM,eAAAA,CAAgB5yM,GACf,OAAOlT,KAAKyjN,UAAU,kBAAmBvwM,EAC1C,CAEA6yM,kBAAAA,CAAmBlS,GAClB,OAAO7zM,KAAKyjN,UAAU,qBAAsB5P,EAC7C,CAEAmS,wBAAAA,CAAyBnS,GACxB,OAAO7zM,KAAKyjN,UAAU,2BAA4B5P,EACnD,EA8HM,MAAMoS,WAA0B9C,GAC5BC,eAAAA,GACT,MAAO,kBACR,CACA8C,UAAAA,CAAW5B,GACV,OAAOtkN,KAAKyjN,UAAU,oBAAqBa,EAC5C,CAEA6B,kBAAAA,CAAmB7B,GAClB,OAAOtkN,KAAKyjN,UAAU,4BAA6Ba,EACpD,CAEA8B,iBAAAA,CAAkB9B,GACjB,OAAOtkN,KAAKyjN,UAAU,oBAAqBa,EAC5C,CAEA+B,qBAAAA,CAAsB/B,GACrB,OAAOtkN,KAAKyjN,UAAU,oBAAqBa,EAC5C,EA2FM,MAAMgC,WAAuBnD,GACzBC,eAAAA,GACT,MAAO,eACR,CACAmD,mBAAAA,GACC,OAAOvmN,KAAKyjN,UAAU,mBACvB,CAEA+C,0BAAAA,CAA2B3S,GAC1B,OAAO7zM,KAAKyjN,UAAU,yBAA0B5P,EACjD,CAEA4S,mBAAAA,CAAoB5S,GACnB,OAAO7zM,KAAKyjN,UAAU,sBAAuB5P,EAC9C,CAEA6S,YAAAA,GACC,OAAO1mN,KAAKyjN,UAAU,eACvB,CAEAV,sBAAAA,GACC,OAAO/iN,KAAKyjN,UAAU,yBACvB,CAEAn4E,kBAAAA,CAAmBuoE,GAClB,OAAO7zM,KAAKyjN,UAAU,qBAAsB5P,EAC7C,CAEA8S,eAAAA,GACC,OAAO3mN,KAAKyjN,UAAU,kBACvB,CAEAmD,iBAAAA,CAAkB/S,GACjB,OAAO7zM,KAAKyjN,UAAU,oBAAqB5P,EAC5C,CAEAgT,kBAAAA,CAAmBhT,GAClB,OAAO7zM,KAAKyjN,UAAU,qBAAsB5P,EAC7C,EAIM,MAAMiT,WAAmBpoI,EAAAA,EAC/B3rE,WAAAA,CAAYvH,GACX4M,MAAM5M,GAAU,KAkBRu7M,4BAAsB,OACtBC,uCAAiC,OACjCC,+BAAyB,OACzBjT,yBAAmB,OACnBjjE,uBAAiB,OACjBm2E,wBAAkB,OAClBC,2BAAqB,OACrBC,mBAAa,OACbx7E,4BAAsB,OACtBy7E,gCAA0B,OAC1B5G,4BAAsB,OACtB6G,kCAA4B,OAC5BC,+BAAyB,OACzB/0H,oBAAc,OACdg1H,uBAAiB,OACjBn8E,oBAAc,EAhCtBrrI,KAAK+mN,uBAAyB,IAAIpD,GAAuBn4M,GACzDxL,KAAKgnN,kCAAoC,IAAInD,GAAkCr4M,GAC/ExL,KAAKinN,0BAA4B,IAAIjD,GAA0Bx4M,GAC/DxL,KAAKg0M,oBAAsB,IAAIoQ,GAAoB54M,GACnDxL,KAAK+wI,kBAAoB,IAAIszE,GAAkB74M,GAC/CxL,KAAKknN,mBAAqB,IAAI3C,GAAmB/4M,GACjDxL,KAAKmnN,sBAAwB,IAAIvC,GAAsBp5M,GACvDxL,KAAKonN,cAAgB,IAAItC,GAAct5M,GACvCxL,KAAK4rI,uBAAyB,IAAIo5E,GAAuBx5M,GACzDxL,KAAKqnN,2BAA6B,IAAIpC,GAA2Bz5M,GACjExL,KAAKygN,uBAAyB,IAAI2E,GAAuB55M,GACzDxL,KAAKsnN,6BAA+B,IAAIhC,GAA6B95M,GACrExL,KAAKunN,0BAA4B,IAAI/B,GAA0Bh6M,GAC/DxL,KAAKwyF,eAAiB,IAAIozH,GAAep6M,GACzCxL,KAAKwnN,kBAAoB,IAAIvB,GAAkBz6M,GAC/CxL,KAAKqrI,eAAiB,IAAIi7E,GAAe96M,EAC1C,E,wBCz6BD,MAAMi8M,GAA4BhqN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mKAMtCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,IAC7B/gD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOu1B,cAAc,IAI/CwO,IAAQruC,EAAAA,GAAAA,IAAOgqN,GAAPhqN,CAAiCqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,4BAIzCouC,IAAYvuC,EAAAA,GAAAA,IAAOgqN,GAAPhqN,CAAiCmE,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,2EAEtCkJ,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,SAAAlH,OAAQ1B,EAAMC,WAAWutC,UAAS,IAK1Cg8K,IAAqBx7K,EAAAA,GAAAA,GAAeJ,GAAOE,I,mBCvBjD,MAAM27K,GAAmClqN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sHAI7Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,SAAAiB,OAAQ1B,EAAMC,WAAWC,UAAS,SAAAwB,OAAQ1B,EAAMC,WAAWutC,UAAS,I,OCHlF,MAAMk8K,IAAoCnqN,EAAAA,GAAAA,IAAOsnD,GAAAA,GAAPtnD,CAAqBE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,oPAI7Di7B,GAAAA,IAIIl6B,IAAA,IAAC,MAACT,GAAMS,EAAA,SAAAiB,OAAQ1B,EAAMC,WAAWC,UAAS,SAAAwB,OAAQ1B,EAAMC,WAAWirC,SAAQ,I,OCRjF,MAAMy+K,IAAsCpqN,EAAAA,GAAAA,IAAOmqN,GAAPnqN,CAAyCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2DAE/EE,GAASA,EAAMI,MAAM6J,OAAO0C,eCD5Bq9M,IAA6B71M,EAAAA,GAAAA,GAAc21M,IAAmC11M,aAAa21M,IAAqCz1M,Q,OCFtI,MAAM21M,GAAsCtqN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qD,OCexDoqN,G,aAAc,SAAdA,GAAAA,EAAc,gDAAdA,EAAc,0CAAdA,EAAc,sDAAdA,EAAc,0DAAdA,EAAc,wCAAdA,EAAc,8CAAdA,EAAc,uCAAdA,KAAAA,GAAc,KAUnB,MAEMC,GAA+D,CACjE,CAACD,GAAeE,wBAAyB,aACzC,CAACF,GAAeG,qBAAsB,WACtC,CAACH,GAAeI,2BAA4B,gBAC5C,CAACJ,GAAeK,6BAA8B,kBAC9C,CAACL,GAAeM,oBAAqB,cACrC,CAACN,GAAeO,uBAAwB,YACxC,CAACP,GAAeQ,mBAAoB,UAGlCC,GAA0D,CAC5D,CAACzqG,GAAAA,EAAS0qG,eAAgB,CACtBV,GAAeG,oBACfH,GAAeK,4BACfL,GAAeM,mBACfN,GAAeQ,mBAEnB,CAACxqG,GAAAA,EAAS2qG,YAAa,CACnBX,GAAeE,uBACfF,GAAeI,0BACfJ,GAAeM,mBACfN,GAAeO,wBAcvB,IACaK,IADZrpN,EAAAA,GAAAA,IAAQuT,GAAT,cAC4Dqf,GAAAA,EAIxDpf,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAHT+qN,4BAAsB,OAoBtBC,oBAAsB,KAC1B,MAAMC,EAA0B/oN,KAAKlC,MAAMkrN,YAAYjwL,0BAEjDiwL,EAAW,GAAAppN,OAAMmpN,EAAwBvjN,UAAU,EAAG,GAAE,KAAA5F,OAAImpN,EAAwBvjN,UAAU,GAAE,KACtG,OACIgD,EAAAA,GAAAA,MAACs/M,GAA0B,CAACnoN,UAAW,0BAA0BI,SAAA,EAC7DL,EAAAA,GAAAA,KAAA,QAAAK,SAAOC,KAAKwL,SAASoK,YAAYC,UAAU,4BAC3CnW,EAAAA,GAAAA,KAAA,QAAAK,SAAOipN,MACkB,EAEnC,KAEMC,yBAA2B,KAE3BzgN,EAAAA,GAAAA,MAACu/M,GAAmC,CAACpoN,UAAW,2BAA2BI,SAAA,EACvEL,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,iBACnD7V,KAAKkpN,iBACNxpN,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CAACC,cAAe,CACxCt2B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,eAC1CxO,QAASrH,KAAKmpN,qBAI5B,KAEMD,cAAgB,KAEhBxpN,EAAAA,GAAAA,KAACioN,GAAgC,CAAA5nN,UAC7BL,EAAAA,GAAAA,KAACyL,GAAAA,EAAM,CACHxL,UAAW,mBACXmK,MAAO9J,KAAK0mB,MAAMwZ,eAClBl2B,SAAUxF,GAAKxE,KAAKopN,iBAAiB5kN,EAAE0F,OAAOJ,OAC9CpI,MAAM,OAAM3B,SAEX0c,OAAOonC,OAAO4kK,GAAoBzoN,KAAKlC,MAAMurN,YAAY94M,KAAI+4M,IAC1D5pN,EAAAA,GAAAA,KAAA,UAAQoK,MAAOw/M,EAAUvpN,SAEpBC,KAAKwL,SAASoK,YAAYC,UAAUyzM,IADhCA,SAO3B,KAEMF,iBAAoBG,GACjBvpN,KAAKuyB,SAAS,CACjB2N,eAAgBqpL,IAEtB,KAEMC,yBAAkC,EAAM,KACxCL,eAAiBzpM,UACrB,GAAG1f,KAAKwpN,wBACJ,OAEJxpN,KAAKwpN,yBAA0B,EAE/B,MAAMC,EAAmB/pM,sBACR1f,KAAKwL,SAAS2iC,YAAYs7K,iBAAiB,CACpDr2H,uBAAuB,GACzB,EAIN,OADApzF,KAAK0pN,0BACG1pN,KAAK0mB,MAAMwZ,gBACf,KAAK8nL,GAAeE,uBACpB,KAAKF,GAAeG,oBAChBnoN,KAAK2pN,kBACL,MACJ,KAAK3B,GAAeM,mBAChBtoN,KAAK2pN,kBACL3pN,KAAKwL,SAASo+M,iBAAiBnzB,oBAC/B,MACJ,KAAKuxB,GAAeO,sBAChBvoN,KAAK2pN,kBACLF,IACA,MACJ,KAAKzB,GAAeQ,kBAChBxoN,KAAK2pN,wBACCF,IACNzpN,KAAKwL,SAASkE,KAAK06H,SACnB,MACJ,KAAK49E,GAAeK,4BAChBroN,KAAK2pN,kBACLF,IACAzpN,KAAK6pN,qBAEL,MACJ,KAAK7B,GAAeI,0BAChBpoN,KAAK8pN,0BACL9pN,KAAK2pN,kBAEb,EACF,KAEME,mBAAqBnqM,sBACZ1f,KAAKwL,SAASouF,aAAaY,sBAAsB,CAC1DV,sBAAuB95F,KAAK6oN,uBAC5B1zL,QAAS,CACLC,KAAMC,GAAAA,EAAS/0B,OACfu0B,QAASmzL,GAAeK,4BACxB/yL,OAAQswD,GAAAA,GAAeC,cAE3BpwD,sBAAuB,CACnB6mE,SAAUC,GAAAA,GAAsBC,sBAChClnE,OAAQwqC,GAAAA,GAAwBiqJ,QAEtC,EACL,KAEOD,wBAA0B,KAC1B9pN,KAAKlC,MAAMurN,YAAcrrG,GAAAA,EAAS2qG,aAC9B5jN,EAAAA,MAAMg1H,WAAW/5H,KAAKlC,MAAMksN,iBAC5BhqN,KAAKlC,MAAMksN,kBAEXvlN,QAAQkK,MAAM,mEAEtB,EACF,KAEMg7M,gBAAkB,KACtB3pN,KAAKlC,MAAMk6B,cAAcC,OAAO,EAClC,KAEMyxL,wBAA0B,KAC9B,MAAMzxM,EAASgwM,GAA6BjoN,KAAK0mB,MAAMwZ,gBAEvDlgC,KAAKiqN,yBAAyBhyM,GAE9BjY,KAAKwL,SAASi7G,oBAAoByjG,mBAAmB,CACjDC,WAAYlyM,EACZ6hF,sBAAuB95F,KAAK6oN,wBAC9B,EACJ,KAEMoB,yBAA4BhyM,IAChC,MAAMd,EAASnX,KAAKwL,SAASqd,UAAUqsG,UAAU,CAC7Ck1F,iBAtMqB,6BAuMrBC,eAAgBpyM,IAGpBd,EAAOmzM,UAAU,uBACjBnzM,EAAOk+G,MAAM,EA9Jbr1H,KAAK0mB,MAAQ,CACTwZ,eAAgB8nL,GAAeE,uBAEvC,CAEAnsM,iBAAAA,GACI3D,MAAM2D,oBACN/b,KAAK6oN,uBAAyB7oN,KAAKwL,SAASu1C,MAAMC,UAClDhhD,KAAKwL,SAASi7G,oBAAoB8jG,eAAe,CAC7CzwH,sBAAuB95F,KAAK6oN,uBAC5B2B,iBAAkBtvG,GAAAA,GAAoBI,kBACtCmvG,mBAAoB,qBAE5B,CAoJAhrN,MAAAA,GACI,OACI+I,EAAAA,GAAAA,MAACk/M,GAAkB,CAAA3nN,SAAA,CACdC,KAAK8oN,sBACL9oN,KAAKipN,6BAGlB,KACHn2M,G,mBClOM,MAAM43M,WAAqClrN,GAAAA,EAAmDuT,WAAAA,GAAA,SAAA9S,WAAA,KAEzF0qN,aAAe,KACnB3qN,KAAKwL,SAASqd,UAAUkd,uBAAuB,iBAAkB,+BAAgC,WACjG/lC,KAAKlC,MAAM8sN,cACX5qN,KAAK2pN,iBAAiB,EACxB,KAEMA,gBAAkB,KACtB3pN,KAAKlC,MAAMk6B,eAAiBh4B,KAAKlC,MAAMk6B,cAAcC,OAAO,CAC9D,CAEFx4B,MAAAA,GAEI,MAAM,YAACorN,EAAW,YAACC,GAAe9qN,KAAKlC,MAEvC,OACI0K,EAAAA,GAAAA,MAACijC,GAAAA,EAAkB,CAAA1rC,SAAA,CACd8qN,IAAenrN,EAAAA,GAAAA,KAACszD,GAAAA,GAAwB,CAAAjzD,SAAE8qN,IAC1CC,IAAeprN,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SAAE+qN,KAChCprN,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CAACC,cAAe,CACxCt2B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,0BAC1CxO,QAASrH,KAAK2qN,aACdhrN,WAAWG,EAAAA,GAAAA,IAAQ,uCAInC,ECxCG,MAAMirN,GAAoBttN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mWAMrCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,IAGzB/gD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOwb,cAAc,IAQ5Czc,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAWC,SAAS,IAGvCyM,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAMC,WAAWC,UAAY,QAAUF,EAAMC,WAAWutC,SAAS,I,OCN3F,IACas/K,IADZzrN,EAAAA,GAAAA,IAAQuT,GAAT,cAC2DtT,GAAAA,EAAkDuT,WAAAA,GAAA,SAAA9S,WAAA,KAEjGgrN,6BAA+BvrM,UAEnC1f,KAAKlC,MAAMk6B,cAAcC,QAEzB,MAAMkW,QAAmBnuC,KAAKwL,SAAS2iC,WACvC,IAAIk8G,EAAmB,oBAEpBl8G,EAAWC,qBACVi8G,EAAkB,yBACZl8G,EAAWC,mBAAmB63J,yBAAyBC,kBAIjElmM,KAAKwL,SAASqd,UAAU+S,cAAc,wBAAyByuH,EAAgB,EACjF,KAEM6gE,8BAAgCxrM,UACpC1f,KAAKwL,SAASqd,UAAU+S,cAAc,wBAAyB,0BAElD57B,KAAKwL,SAAS2iC,YAAYs7K,iBAAiB,CACpDr2H,uBAAuB,IAI3BpzF,KAAKlC,MAAMk6B,cAAcC,OAAO,EAClC,KAEMkzL,4BAA8B,KAClC,IAAIC,EAAuB/0M,KAAKuoG,IAAI5+G,KAAKlC,MAAMutN,cAC/C,OAAOrrN,KAAKwL,SAASwJ,SAASC,YAAYm2M,GAAsB,EAAK,EACvE,KAEME,yBAA2B,KAC/B,MAAMvC,EAA0B/oN,KAAKlC,MAAMkrN,YAAYjwL,0BAEvD,MAAM,GAANn5B,OAAUmpN,EAAwBvjN,UAAU,EAAG,GAAE,KAAA5F,OAAImpN,EAAwBvjN,UAAU,GAAE,MAC3F,KAEM+lN,uBAAyB,KAC7B,MAAMnzK,EAAiBp4C,KAAKlC,MAAMutN,aAAe,EAAI,oBAAsB,kBAC3E,OAAOrrN,KAAKwL,SAASoK,YAAYC,UAAUuiC,EAAe,EAC5D,KAEMozK,qBAAuB,IACvBzmN,EAAAA,MAAMkP,kBAAkBjU,KAAKlC,MAAM2tN,eAC5B,MAIPjjN,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,yBACpDnW,EAAAA,GAAAA,KAACszD,GAAAA,GAAwB,CAACrzD,WAAWG,EAAAA,GAAAA,IAAQ,yBAAyBC,SACjEC,KAAKwL,SAASwJ,SAASC,YAAYjV,KAAKlC,MAAM2tN,eAAe,QAI7E,KAEOC,gBAAkB,IAClB3mN,EAAAA,MAAMkP,kBAAkBjU,KAAKlC,MAAM6tN,UAC5B,MAIPjsN,EAAAA,GAAAA,KAACszD,GAAAA,GAAwB,CAAAjzD,SACpBC,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKlC,MAAM6tN,YAG3D,KAEOC,2BAA6B,KAE7BpjN,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SACTC,KAAKurN,4BAEV7rN,EAAAA,GAAAA,KAACszD,GAAAA,GAAwB,CAACrzD,WAAWG,EAAAA,GAAAA,IAAQ,iCAAiCC,SACzEC,KAAKmrN,kCAIrB,CAED1rN,MAAAA,GACI,OACI+I,EAAAA,GAAAA,MAACuiN,GAAiB,CAAAhrN,SAAA,CACbC,KAAK0rN,mBACNhsN,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,4BACpDnW,EAAAA,GAAAA,KAACszD,GAAAA,GAAwB,CAAAjzD,SAAEC,KAAKsrN,6BAC/BtrN,KAAK4rN,6BACL5rN,KAAKwrN,wBACN9rN,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CAACC,cAAe,CACxC/wB,QAASrH,KAAKirN,6BACdnpN,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,gBAC3CyiB,gBAAiBt4B,KAAKlC,MAAM+tN,SAAW,CACtCxkN,QAASrH,KAAKkrN,8BACdppN,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,mBAC1C,KAAM2iB,uBAAwBx4B,KAAKwL,SAASrN,WAAWC,YAAc4B,KAAKwL,SAASrN,WAAW20D,kBAG9G,KACHhgD,G,OCtHM,MAAMg5M,GAAsBruN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,uQAKvCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,IAU7B/gD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,I,OCf7C,MAAM2tN,GAA+BtuN,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+B,OCAhD,MAAMouN,GAA6BvuN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2FACzCE,GAASA,EAAMI,MAAM6J,OAAO0C,e,gBCiBvC,MAAMoI,WAAsBrT,GAAAA,EAA2DuT,WAAAA,GAAA,SAAA9S,WAAA,KAS3EgsN,gBAAkB,KACtB,GAAIlnN,EAAAA,MAAMkP,kBAAkBjU,KAAKlC,MAAMouN,UACnC,OAAO,KAGX,MAAMA,EAAWlsN,KAAKlC,MAAMouN,SAAW,EAAI,EAAIlsN,KAAKlC,MAAMouN,SACpDpqN,EAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,0BAEjD,OAAOrN,EAAAA,GAAAA,MAACwjN,GAA0B,CAAAjsN,SAAA,EAC9BL,EAAAA,GAAAA,KAACqsN,GAA4B,CAACpsN,UAAW,8BAA8BI,SAAEmsN,IAAwC,IAAEpqN,IAC1F,EAChC,KAEOqqN,gBAAkB,KAClBnsN,KAAKlC,MAAMynB,SAAWo4F,GAAAA,EAAoBE,wBAEtC79G,KAAKlC,MAAMukJ,KAAKO,6BAA+BlsD,GAAAA,EAAa01H,gBAC5DpsN,KAAKwL,SAASi0D,cAAcl+C,MAAKk+C,GAAiBA,EAAc4sJ,oCAEhErsN,KAAKwL,SAAS6jC,QAAQqqD,iCAG1B15F,KAAKwL,SAASqd,UAAU+S,cAAc,uBAAwB,gBAEvD57B,KAAKlC,MAAMynB,SAAWo4F,GAAAA,EAAoBG,sBACjD99G,KAAKwL,SAASqd,UAAU+S,cAAc,uBAAwB,kBAGlE57B,KAAKlC,MAAMk6B,cAAcC,OAAO,EACnC,KAEOq0L,eAAiB,IACjBtsN,KAAKlC,MAAMynB,SAAWo4F,GAAAA,EAAoBE,uBACnC79G,KAAKwL,SAASoK,YAAYC,UAAU,2BAGxC7V,KAAKwL,SAASoK,YAAYC,UAAU,KAC9C,CA5CDkG,iBAAAA,GACI3D,MAAM2D,oBACN/b,KAAKwL,SAASqd,UAAUqsG,UAAU,CAC9B4d,UAAW,+BACZzd,MACP,CAyCA51H,MAAAA,GACI,OACE+I,EAAAA,GAAAA,MAACsjN,GAAmB,CAAA/rN,SAAA,CACfC,KAAKisN,mBACNvsN,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAACplD,UAAW,+BAA+BI,SAAEC,KAAKlC,MAAMyuN,YACtE7sN,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CAACC,cAAe,CACxC/wB,QAASrH,KAAKmsN,gBACdrqN,KAAM9B,KAAKssN,oBAEdtsN,KAAKlC,MAAM0uN,YAAa9sN,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SAAEC,KAAKlC,MAAM0uN,aAA8B,OAG5F,EAGG,MAAMC,IAA4Bp1M,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,S,OCjFtE,MAKa65M,GALgCjvN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gDAE5Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOu1B,cAAc,I,OCF5C,MAeMqvL,GAfgClvN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sOAMjDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,IAI7B/gD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,I,OCVpD,MAYawuN,GAZ0BnvN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sKAItCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,SAAS,IAIjCrH,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOu1B,cAAc,I,OCRrD,MAMauvL,GANgBpvN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,oEAE5Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOu1B,cAAc,ICMtCwvL,IAAsEvtN,EAAAA,GAAAA,KAAUzB,IACzF,MAAM0N,GAAWqD,EAAAA,GAAAA,MACVk+M,EAAqBC,IAAwBt/M,EAAAA,GAAAA,WAAS,GAuC7D,OACIlF,EAAAA,GAAAA,MAACmkN,GAAsB,CAAA5sN,SAAA,EACnBL,EAAAA,GAAAA,KAACktN,GAAuB,CAAA7sN,UACpBL,EAAAA,GAAAA,KAAA,OAAAK,SACKyL,EAASoK,YAAYC,UAAU,yBAGxCnW,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CAACC,cAAe,CACxC/wB,QAxCYqY,UACpB,UACUlU,EAASuhB,OAAOkgM,qBAAqBC,kBAC3C1hN,EAASqd,UAAUkd,uBAAuB,iBAAkB,aAChE,CAAE,MAAOr3B,GACLlD,EAAS2L,OAAOxI,MAAM,kCAAmCD,EAC7D,CAEA5Q,EAAMk6B,cAAcC,OAAO,EAiCnBn2B,KA7BD0J,EAASoK,YAAYC,UAAU,0CA+BlCnW,EAAAA,GAAAA,KAACktN,GAAuB,CAAA7sN,UACpBL,EAAAA,GAAAA,KAAA,OAAAK,SACKyL,EAASoK,YAAYC,UAAU,6BAGxCnW,EAAAA,GAAAA,KAACmtN,GAAa,CAACxlN,QAASA,KAnD5B2lN,GAAsBD,EAmDuC,EAAAhtN,SACpDyL,EAASoK,YAAYC,UAAU,0BAjCnCk3M,GAKDrtN,EAAAA,GAAAA,KAACgtN,GAA6B,CAAA3sN,UAC1BL,EAAAA,GAAAA,KAAA,MAAI4/B,wBAAyB,CAACC,OAAQ/zB,EAASoK,YAAYC,UAAU,sBALlE,OAmCc,I,OCrE1B,MAIMs3M,GAJuB1vN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6BCAjCwvN,IAAwB5uN,EAAAA,GAAAA,GAAU,yBCAlC6uN,IAA0B7uN,EAAAA,GAAAA,GAAU,2B,OCA1C,MAKM8uN,GAL4C7vN,GAAAA,GAAO0iD,EAACxiD,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iEACpDE,GAASA,EAAMI,MAAM6J,OAAO0C,eCD5B8iN,IAAwB/uN,EAAAA,GAAAA,GAAU,yBCYlCgvN,IAA2DjuN,EAAAA,GAAAA,KAAUzB,IAC9E,MAAM0N,GAAWqD,EAAAA,GAAAA,KAEX4+M,EAAcjiN,EAAStN,MAAMuN,aAAaC,MAAMonB,SAKtD,OACItqB,EAAAA,GAAAA,MAAC2kN,GAAa,CAAAptN,SAAA,EACVL,EAAAA,GAAAA,KAACwhD,GAAAA,GAAgB,CAACC,WAAW,SAAQphD,UACjCL,EAAAA,GAAAA,KAACkmG,GAAAA,GAAoB,CAAA7lG,UANtBL,EAAAA,GAAAA,KAAC6tN,GAAqB,CAAAxtN,UAACL,EAAAA,GAAAA,KAAC+tN,EAAW,CAAChnN,KAAM,WAU7C+B,EAAAA,GAAAA,MAACiN,GAAAA,GAAe,CAAC5M,UAAU,QAAO9I,SAAA,EAC9BL,EAAAA,GAAAA,KAAC0tN,GAAqB,CAAArtN,SACjBjC,EAAMo+C,aAAazzC,SAExB/I,EAAAA,GAAAA,KAAC2tN,GAAuB,CAAAttN,SACnBjC,EAAMo+C,aAAawxK,eAExBhuN,EAAAA,GAAAA,KAAC4tN,GAAkC,CAACjmN,QAASA,IAAMmE,EAASszB,gBAAgBC,wBAAwBh/B,SAC/FyL,EAASoK,YAAYC,UAAU,+BAG5B,I,gBCDjB,IAAM83M,IAAiC91M,GAqLzCC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKpF,GAxLV,cAAgD4rE,EAAAA,EACnD3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,iCAAAC,GAAA,OAEhBQ,EAAAA,EAAAA,IAAehZ,KACnB,CAEA4tN,qCAAAA,CAAsC/4L,EAAsBxuB,GACxD,OAAOrG,KAAK6tN,iBAAiBh5L,GACzBn1B,EAAAA,GAAAA,KAAC89D,GAAAA,EAAwC,CAAyCt1D,UAAkB,OAAP7B,QAAO,IAAPA,OAAO,EAAPA,EAAS6B,WAAvD,mCACvD,CAEA4lN,iBAAAA,CAAkBhwN,GACd,OAAOkC,KAAKwL,SAASuiN,2BAA2BC,0BAA0BlwN,EAC9E,CAEAmwN,sBAAAA,CAAuBnwN,GACnB,OAAOkC,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAC9Bt4B,EAAAA,GAAAA,KAACgrN,GAA4B,CACzB1yL,cAAeA,EACf4yL,YAAa9sN,EAAM8sN,YACnBC,YAAa7qN,KAAKwL,SAASoK,YAAYC,UAAU,kCACjDi1M,YAAa9qN,KAAKwL,SAASoK,YAAYC,UAAU,wCAEjD,CACJpN,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,+BAC3C5O,KAAMjH,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM0nG,aAC7C2wF,4BAA4B,EAC5Bn7I,yBAAyB,EACzBQ,qBAAqB,EACrB9L,oBAAoB,EACpBD,gBAAgB,EAChBypJ,YAAaz/G,GAAAA,EAAsB6mI,QAAU,EAC7C9oK,SAAUtnD,EAAMqwN,gBAChBtwJ,0BAA0B,EAC1BviC,iBAAiB,GAG7B,CAEQ8yL,kCAAAA,CAAmCjqB,GACvC,MAAO,CACH17L,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,aAC3CkuL,4BAA4B,EAC5Bn7I,yBAAyB,EACzBQ,qBAAqB,EACrB9L,oBAAoB,EACpBD,gBAAgB,EAChB+H,SAAU,KACVyY,0BAA0B,EAC1BviC,iBAAiB,EACjB6oK,YAAaA,EACboD,mCAAmC,EACnCtgM,KAAMjH,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMsnG,2BAErD,CAEAq7G,oBAAAA,CAAqBhoN,GACjB,OAAOrG,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAAiBt4B,EAAAA,GAAAA,KAAC+sN,GAAyB,CAC7EF,SAAUlmN,EAAQkmN,SAClBL,SAAU7lN,EAAQ6lN,SAClB3mM,OAAQlf,EAAQkf,OAChBinM,WAAYnmN,EAAQmmN,WACpBx0L,cAAeA,KACf,CACAqxB,kBAAmBA,IAAMrpD,KAAKwL,SAASqd,UAAU+S,cAAc,uBAAwB,SACvFwtB,qBAAqB,EACrB9L,oBAAoB,EACpBD,gBAAgB,EAChBwgB,0BAA0B,EAC1Bp1D,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,sBAC3C5O,KAAMjH,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM6pG,sBAErD,CAEA+4G,iCAAAA,CAAkCjoN,GAE9B,MAAMy9L,EAAgB9jM,KAAKouN,mCAAmC,mCAE9D,OAAOpuN,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAAiBt4B,EAAAA,GAAAA,KAACkpN,IAAsC1jN,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAClFmB,GAAO,IACX2xB,cAAeA,MACjB8rK,EACV,CAEAyqB,gCAAAA,CAAiCloN,GAE7B,MAAMy9L,EAAgB9jM,KAAKouN,qCAE3B,OAAOpuN,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAAiBt4B,EAAAA,GAAAA,KAACsrN,IAAqC9lN,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACjFmB,GAAO,IACX2xB,cAAeA,MACjB8rK,EACV,CAGA0qB,yBAAAA,CAA0Bz/L,GAEtB,MAAM0/L,EAAwBzuN,KAAKwL,SAASu1C,MAAMC,UAElDhhD,KAAKwL,SAASi7G,oBAAoB8jG,eAAe,CAC7CzwH,sBAAuB20H,EACvBjE,iBAAkBtvG,GAAAA,GAAoBK,kBACtCkvG,mBAAoBluG,GAAAA,GAAsBC,gCAC1C8uF,cAAev8K,EAAO2/L,gBAG1B,MAAMjmK,EAAczoD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMg9C,gBAC3D,OAAO1oD,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CAC5CK,QAAS,CACL,CACIC,aAAc,UACd75B,KAAMitB,EAAO4/L,WACbtnN,QAASqY,UACL1f,KAAKwL,SAASi7G,oBAAoByjG,mBAAmB,CACjDO,mBAAoBluG,GAAAA,GAAsBC,gCAC1C2tG,WAAY,eACZ7e,cAAev8K,EAAO2/L,cACtB50H,sBAAuB20H,IAEpB5yL,GAAAA,EAAkCC,0BAIrDR,iBAAiB,EACjBx5B,KAAMitB,EAAOjtB,KACb2G,MAAOsmB,EAAOtmB,MAAMuX,cACpB/Y,MAAMvH,EAAAA,GAAAA,KAAC+oD,EAAW,CAAC3/C,MAAO,CAAC2D,QAAS,UAAWhG,KAAM,MACrDmiD,yBAAyB,EACzB2+I,mCAAmC,GAE3C,CAEAqnB,oBAAAA,CAAqBC,GACjB,MAAMpmK,EAAczoD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMg9C,gBAC3D,OAAO1oD,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CAC5CK,QAAS,CACL,CACIC,aAAc,UACd75B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1CxO,QAASqY,SACEmc,GAAAA,EAAkCC,yBAIrDh6B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAUg5M,GAC1CpmN,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,oCAAoCmK,cAC/E/Y,MAAMvH,EAAAA,GAAAA,KAAC+oD,EAAW,CAAC3/C,MAAO,CAAC2D,QAAS,UAAWhG,KAAM,MACrDmiD,yBAAyB,EACzB2+I,mCAAmC,GAE3C,CAEAunB,mBAAAA,GACI,GAAI9uN,KAAKwL,SAAS+9B,UAAUtuB,UACxB,OAGJ,MAAMwtC,EAAczoD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMg9C,gBAC3D,OAAO1oD,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CAC5CK,QAAS,CACL,CACIC,aAAc,UACd75B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1CxO,QAASqY,UACL1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,yBAA0B,KAAM,kBACxElK,GAAAA,EAAkCC,0BAIrDh6B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,oCAC1CpN,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,oCAAoCmK,cAC/E/Y,MAAMvH,EAAAA,GAAAA,KAAC+oD,EAAW,CAAC3/C,MAAO,CAAC2D,QAAS,UAAWhG,KAAM,MACrDmiD,yBAAyB,EACzB2+I,mCAAmC,EACnCl+I,kBAAmB3pC,UACf1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,yBAA0B,QAAS,iBAAiB,GAG/G,CAMQgpL,6BAAAA,CAA8BC,GAClChvN,KAAKgvN,0BAA4BA,CACrC,CAEQC,iBAAAA,CAAkBp6L,GACtB,MAAMwO,EAAQrjC,KAAKgvN,0BAA0BrkI,WAAUrqD,GAAQA,EAAKzL,UAAYA,IAC5EwO,GAAS,GACTrjC,KAAK+uN,8BAA8B,IAAI/uN,KAAKgvN,0BAA0B3uL,OAAOgD,EAAO,IAE5F,CAEQwqL,gBAAAA,CAAiBh5L,EAAsBiuB,GAU3C,OARA9iD,KAAK+uN,8BAA8B,IAC5B/uN,KAAKgvN,0BACR,CACIlsK,UAAWA,EACXjuB,QAASA,KAIV,CACHq6L,QAASA,KACLlvN,KAAKivN,kBAAkBp6L,EAAQ,EAG3C,CAEA2kE,eAAAA,GACI,OAAOx5F,KAAKwL,SAASoL,WAAWrI,QAAQgD,WAAWioF,iBACvD,CAEA21H,uBAAAA,GACI,OAAOnvN,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAAiBt4B,EAAAA,GAAAA,KAACotN,GAA4B,CAChF90L,cAAeA,KACf,CACAvvB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,wBAC3CkuL,4BAA4B,EAC5Bn7I,yBAAyB,EACzBQ,qBAAqB,EACrByU,0BAA0B,EAC1BvgB,oBAAoB,EACpB8H,SAAUA,IAAMplD,KAAKwL,SAAS63E,IAAIqP,cAAcioD,oBAExD,CAGAy0E,qBAAAA,CAAsBC,GAClBrvN,KAAKwL,SAAS6wC,QAAQizK,gBAAgB,CAClC//L,GAAI8/L,EAAY9/L,IAAM,sBACtB6sB,aAAcizK,EAAYjzK,aAC1BmzK,cAAeF,EAAYE,cAC3Bv/B,cAAgBhsK,IAAoBtkB,EAAAA,GAAAA,KAAC8tN,GAAmB,CAACtxK,aAAcmzK,EAAYnzK,gBAE3F,GAEH1jC,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,6BAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBA3D8D,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iCAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,iCAAAtJ,GAAAsJ,WAAAtJ,I,gBCtN1D,MAAM08M,GACTz8M,WAAAA,CAAoBkuG,GAA0B,KAA1BA,QAAAA,CACpB,CAEA/0B,KAAAA,CAAMvxC,GAAkD,IAAD,IAAAg1B,EAAA1vE,UAAAC,OAA7BuvN,EAAc,IAAAr/M,MAAAu/D,EAAA,EAAAA,EAAA,KAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAd4/I,EAAc5/I,EAAA,GAAA5vE,UAAA4vE,GACpC7vE,KAAKihH,QAAQ/0B,MAAMvxC,EAAS80K,EAChC,CAEAC,IAAAA,CAAK/0K,GAAmD,IAAD,IAAA0nH,EAAApiK,UAAAC,OAA9BuvN,EAAc,IAAAr/M,MAAAiyJ,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAdmtD,EAAcntD,EAAA,GAAAriK,UAAAqiK,GACnCtiK,KAAKihH,QAAQxtE,QAAQkH,EAAS80K,EAClC,CAEA9gN,KAAAA,CAAMgsC,GAAkD,IAAD,IAAAg1K,EAAA1vN,UAAAC,OAA7BuvN,EAAc,IAAAr/M,MAAAu/M,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAdH,EAAcG,EAAA,GAAA3vN,UAAA2vN,GACpC5vN,KAAKihH,QAAQtyG,MAAMgsC,EAAS80K,EAChC,CAEAp6F,IAAAA,CAAK16E,GAAkD,IAAD,IAAAk1K,EAAA5vN,UAAAC,OAA7BuvN,EAAc,IAAAr/M,MAAAy/M,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAdL,EAAcK,EAAA,GAAA7vN,UAAA6vN,GACnC9vN,KAAKihH,QAAQoU,KAAK16E,EAAS80K,EAC/B,CAEAM,KAAAA,CAAMp1K,GAA8C,IAAD,IAAAq1K,EAAA/vN,UAAAC,OAA5BuvN,EAAc,IAAAr/M,MAAA4/M,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAdR,EAAcQ,EAAA,GAAAhwN,UAAAgwN,GACjCjwN,KAAKihH,QAAQoU,KAAK16E,EAAS80K,EAC/B,CAEA/qN,GAAAA,CAAIi2C,GAA+C,IAAD,IAAAu1K,EAAAjwN,UAAAC,OAA7BuvN,EAAc,IAAAr/M,MAAA8/M,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAdV,EAAcU,EAAA,GAAAlwN,UAAAkwN,GAC/BnwN,KAAKihH,QAAQoU,KAAK16E,EAAS80K,EAC/B,EAGG,MAAMW,WAA6B1xI,EAAAA,EACtC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAYX6kN,cAAQ,EAXbrwN,KAAKqwN,SAAW,IAAIC,GAAAA,GAAc,IAAId,GAAoBhkN,EAAS2L,SACnEnX,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAClCA,IACMA,EACC3P,KAAKqwN,SAASE,SAASC,OAAOC,aAAaC,QAAQhrI,GAAAA,EAAuB,CAAC,GAE3E1lF,KAAKqwN,SAASE,SAASC,OAAOG,cAAcD,QAAQhrI,GAAAA,EAAuB,CAAC,EAChF,GAEZ,E,gBC7CG,MAAekrI,GAClB79M,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,CAC/B,ECQG,MAAMqlN,WAAiCD,GAC1C,YAAME,CAAOnxF,GACT,MAAMoxF,EAAwDpxF,EAAQ0rE,WAAW51K,uBAAyB,CAAC,EAC3G,GAAGs7L,EAAyB92J,IAAK,CAC7Bj6D,KAAKwL,SAASi7G,oBAAoBuqG,eAAe,CAC7C1lB,cAAe3rE,EAAQ2rE,cACvBD,WAAY1rE,EAAQ0rE,WACpB30K,MAAOkvD,GAAAA,GAAeqrI,cAG1B,MAAMC,QAAgBjuI,EAAAA,GAAAA,IAA2BjjF,KAAKwL,UACtDxL,KAAKwL,SAASi7G,oBAAoB0qG,eAAe,CAC7C7lB,cAAe3rE,EAAQ2rE,cACvB8lB,oBAAkBlsN,EAAAA,EAAAA,GAAA,CACdmmM,WAAY1rE,EAAQ0rE,WACpB30K,MAAOkvD,GAAAA,GAAeqrI,YACtBI,mBAAoBC,GAAAA,GAAmB9c,mBACpCrwH,EAAAA,GAAAA,IAAoCnkF,KAAKwL,WAGhD+lN,YAAYhxI,EAAAA,GAAAA,IAAwBvgF,KAAKwL,UACzC0lN,QAASA,EACTjvI,SAAU,CACNC,SAAU,gBACVC,iBAAkBniF,KAAKwL,SAASoL,WAAWwrE,oBAC3CunD,MAAO,IAEX6nF,sBAAuBxxN,KAAKwL,SAASimN,cAAcpB,iBAGjDrwN,KAAKwL,SAASszB,gBAAgB02B,QAAQ,CACxCyE,IAAK82J,EAAyB92J,IAC9B8/B,SAAU,UAGlB,KAAO,CAAC,IAAD23H,EACH1xN,KAAKwL,SAAS2L,OAAOxI,MAAM,oDAAD/O,OAAuE,QAAvE8xN,EAAqD/xF,EAAQ0rE,kBAAU,IAAAqmB,OAAA,EAAlBA,EAAoBC,aACvG,CACJ,ECvCG,MAAMC,WAAgDhB,GACzD,YAAME,CAAOnxF,GACT3/H,KAAKwL,SAASi7G,oBAAoBuqG,eAAe,CAC7C1lB,cAAe3rE,EAAQ2rE,cACvBD,WAAY1rE,EAAQ0rE,WACpB30K,MAAOkvD,GAAAA,GAAeisI,kBAG1B,MAAMX,QAAgBjuI,EAAAA,GAAAA,IAA2BjjF,KAAKwL,UAoBtD,OAlBAxL,KAAKwL,SAASi7G,oBAAoB0qG,eAAe,CAC7C7lB,cAAe3rE,EAAQ2rE,cACvB8lB,oBAAkBlsN,EAAAA,EAAAA,GAAA,CACdmmM,WAAY1rE,EAAQ0rE,WACpB30K,MAAOkvD,GAAAA,GAAeisI,gBACtBR,mBAAoBrxN,KAAKwL,SAASqI,OAAOmI,GAAGmgB,WAAam1L,GAAAA,GAAmBQ,oBAAsBR,GAAAA,GAAmBS,kBAClH5tI,EAAAA,GAAAA,IAAoCnkF,KAAKwL,WAEhD+lN,YAAYhxI,EAAAA,GAAAA,IAAwBvgF,KAAKwL,UACzC0lN,QAASA,EACTjvI,SAAU,CACNC,SAAU,gBACVC,iBAAkBniF,KAAKwL,SAASoL,WAAWwrE,oBAC3CunD,MAAO,IAEX6nF,sBAAuBxxN,KAAKwL,SAASimN,cAAcpB,WAGhDrwN,KAAKwL,SAAS6jC,QAAQqqD,gCACjC,ECtCG,MAAMs4H,WAAiCpB,GAC1C,YAAME,CAAOnxF,GAAgD,IAAD+xF,QAClD1xN,KAAKwL,SAAS6jC,QAAQgoB,YAAY,CACpCliC,QAA2B,QAApBu8L,EAAE/xF,EAAQ0rE,kBAAU,IAAAqmB,OAAA,EAAlBA,EAAoBv8L,QAC7Bk2K,WAAY1rE,EAAQ0rE,YAE5B,ECNG,MAAM4mB,WAAkCrB,GAC3C,YAAME,CAAOnxF,GAAiD,IAAD+xF,QACnD1xN,KAAKwL,SAAS6jC,QAAQ6iL,aAAa,CACrC/8L,QAA2B,QAApBu8L,EAAE/xF,EAAQ0rE,kBAAU,IAAAqmB,OAAA,EAAlBA,EAAoBv8L,QAC7Bk2K,WAAY1rE,EAAQ0rE,YAE5B,ECLG,MAAM8mB,WAA8BvB,GACvC,YAAME,CAAOnxF,GAAiD,IAADyyF,EACzD,MAAM39C,EAAa90C,EAAQ80C,WAC3B,GAAc,OAAVA,QAAU,IAAVA,IAAAA,EAAYx6G,IAEZ,YADAj6D,KAAKwL,SAAS2L,OAAOxI,MAAM,uCAI/B,IAAIorF,EAAmC,SACnC06E,EAAW49C,iBACXt4H,EAAW,kBAGT/5F,KAAKwL,SAASszB,gBAAgB02B,QAAQ,CACxCyE,IAAmB,QAAhBm4J,EAAE39C,EAAWx6G,WAAG,IAAAm4J,OAAA,EAAdA,EAAgBppH,OACrBjP,SAAUA,GAElB,EClBG,MAAMu4H,WAA8B1B,GACvC,YAAME,CAAOnxF,SACH3/H,KAAKwL,SAASimN,cAAcpB,SAAS9hM,WAAWiiM,OAAO+B,QAAQ7B,QAAQ,CACzE/qI,UAAWg6C,EAAQ0rE,WAAWsmB,YAAYxyN,YAC3C,CACCu3B,MAAOkvD,GAAAA,GAAe4sI,OACtBnnB,WAAY1rE,EAAQ0rE,WACpBC,cAAe3rE,EAAQ2rE,eAE/B,ECGG,MAAemnB,WAAsF7B,GAKxG,YAAME,CAAOnxF,GAIT,OAFA3/H,KAAKu0B,eAAeorG,IAEf3/H,KAAKwL,SAASkE,KAAKC,cAAgB3P,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,SACzDv2B,KAAK0yN,iBAAiB/yF,GAG1B3/H,KAAKwL,SAASkE,KAAKk6H,mBAAmBroH,MAAKoxM,GACvC3yN,KAAK0yN,iBAAiB/yF,EAASgzF,EAAchpF,QAE5D,CAEQipF,uBAAAA,GACJ,OAAQ5yN,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,UAAYv2B,KAAKwL,SAASqI,OAAOC,QACzE,CAIQ4+M,gBAAAA,CAAiB/yF,EAAmBgK,GAAgC,IAADkpF,EAAAC,EAEvE,MAAMr+C,EAAaz0K,KAAK+yN,uBAAuBpzF,GAEzCqzF,EAAsB,CACxBC,kBAA+C,QAA9BJ,EAAEp+C,EAAWw+C,yBAAiB,IAAAJ,OAAA,EAA5BA,EAA8B1zN,WACjD+zN,qBAAqD,QAAjCJ,EAAEr+C,EAAWy+C,4BAAoB,IAAAJ,OAAA,EAA/BA,EAAiC3zN,WACvDuvN,cAAej6C,EAAWi6C,eAGzB3pN,EAAAA,MAAMkP,kBAAkB01H,IAC1BltH,OAAOstE,eAAeipI,EAAqB,IAAK,CAC5ClpN,MAAO6/H,EACPrtH,YAAY,IAInB,MAAM62M,EAAsC,CACxCl5J,IAAKw6G,EAAWx6G,IAChBm5J,OAAQ,OACRC,YAAaL,GASjB,OANIhzN,KAAK4yN,4BACLO,EAAiBjpN,OAAS,SAG9BlK,KAAKwL,SAAS4iI,IAAIklF,WAAWH,GAEtBn4L,QAAQC,SACnB,CAIA,oBAAc1G,CAAeorG,GACzB,MAAMv+C,EAAQphF,KAAKuzN,oBACblC,EAAqBrxN,KAAKwzN,uBAEhCxzN,KAAKwL,SAASi7G,oBAAoBuqG,eAAe,CAC7C1lB,cAAe3rE,EAAQ2rE,cACvBD,WAAY1rE,EAAQ0rE,WACpB30K,MAAO0qD,IAGX,MAAM8vI,QAAgBjuI,EAAAA,GAAAA,IAA2BjjF,KAAKwL,UACtDxL,KAAKwL,SAASi7G,oBAAoB0qG,eAAe,CAC7C7lB,cAAe3rE,EAAQ2rE,cACvB8lB,oBAAkBlsN,EAAAA,EAAAA,GAAA,CACdmmM,WAAY1rE,EAAQ0rE,WACpB30K,MAAO0qD,EACPiwI,mBAAoBA,IACjBltI,EAAAA,GAAAA,IAAoCnkF,KAAKwL,WAEhD+lN,YAAYhxI,EAAAA,GAAAA,IAAwBvgF,KAAKwL,UACzC0lN,QAASA,EACTjvI,SAAU,CACNC,SAAUliF,KAAKwL,SAASkE,KAAKC,aAAe,gBAAkB,YAC9DwyE,iBAAkBniF,KAAKwL,SAASoL,WAAWwrE,oBAC3CunD,MAAO,IAEX6nF,sBAAuBxxN,KAAKwL,SAASimN,cAAcpB,UAE3D,EAGG,MAAMoD,WAA+BhB,GAC9Bc,iBAAAA,GACN,OAAO3tI,GAAAA,GAAe8tI,SAC1B,CAGUF,oBAAAA,GACN,OAAOlC,GAAAA,GAAmBqC,UAC9B,CAEUZ,sBAAAA,CAAuBpzF,GAC7B,OAAOA,EAAQ80C,UACnB,EC5GG,MAAMm/C,WAA2ChD,GACpD,YAAME,CAAOnxF,GAA8D,IAAD+xF,EACtE,UAAU1xN,KAAKwL,SAASkE,KAAKi7H,qBAAqB,sCAC9C,MAAM,IAAI16D,MAAM,kCAGbjwE,KAAKwL,SAASu4B,UAAUC,YAE/BhkC,KAAKwL,SAASimN,cAAcpB,SAAS9hM,WAAWiiM,OAAO+B,QAAQ7B,QAAQ,CACnE/qI,UAAWg6C,EAAQ0rE,WAAWsmB,YAAYxyN,YAC3C,CACCu3B,MAAOkvD,GAAAA,GAAeiuI,kBACtBxoB,YAAUnmM,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACHy6H,EAAQ0rE,YAAU,IACrB51K,uBAAqBvwB,EAAAA,EAAAA,GAAA,CACjBowB,OAAQwqC,GAAAA,GAAwBiqJ,MAChCztH,SAAUC,GAAAA,GAAsBu3H,MACX,QADepC,EACjC/xF,EAAQ0rE,kBAAU,IAAAqmB,OAAA,EAAlBA,EAAoBj8L,yBAG/B61K,cAAe3rE,EAAQ2rE,eAE/B,ECxBG,MAAMyoB,WAAoCnD,GAC7C,YAAME,CAAOnxF,GACT,OAAOA,EAAQ80C,WAAWu/C,gBACtB,KAAKC,GAAAA,GAAeC,eACVl0N,KAAKwL,SAASszB,gBAAgBC,wBACpC,MACJ,KAAKk1L,GAAAA,GAAeE,WAEhB,MAAM,IAAIlkJ,MAAM,eAADrwE,OAAgB+/H,EAAQ80C,WAAWu/C,eAAc,0BACpE,QACI,MAAM,IAAI/jJ,MAAM,eAADrwE,OAAgB+/H,EAAQ80C,WAAWu/C,eAAc,sBAE5E,ECfG,MAAMI,WAA4BxD,GACrC,YAAME,CAAOnxF,GACT,OAAO3/H,KAAKwL,SAASkE,KAAK06H,QAC9B,ECHG,MAAMiqF,WAAoCzD,GAC7C,YAAME,CAAOnxF,GAAuD,IAAD+xF,QACzD1xN,KAAKwL,SAASimN,cAAcpB,SAAS9hM,WAAWiiM,OAAO+B,QAAQ7B,QAAQ,CACzE/qI,UAA6B,QAApB+rI,EAAE/xF,EAAQ0rE,kBAAU,IAAAqmB,OAAA,EAAlBA,EAAoBC,YAAYxyN,YAC5C,CACCu3B,MAAOkvD,GAAAA,GAAeqV,aACtBowG,WAAY1rE,EAAQ0rE,WACpBC,cAAe3rE,EAAQ2rE,eAE/B,ECTG,MAAMgpB,WAA2B1D,GACpC,YAAME,CAAOnxF,GACT,UAAU3/H,KAAKwL,SAASkE,KAAKi7H,qBAAqB,sBAC9C,MAAM,IAAI16D,MAAM,0BAExB,ECLG,MAAMskJ,WAAkC3D,GAC3C,YAAME,CAAOnxF,GAAqD,IAAD+xF,EAAA8C,EAAAC,EAAAC,EAAAC,cAChD30N,KAAKwL,SAASi0D,eAAei0B,eAAe,CACrDv+D,QAA2B,QAApBu8L,EAAE/xF,EAAQ0rE,kBAAU,IAAAqmB,OAAA,EAAlBA,EAAoBv8L,QAC7B2kE,sBAAyC,QAApB06H,EAAE70F,EAAQ0rE,kBAAU,IAAAmpB,OAAA,EAAlBA,EAAoB16H,sBAC3C86H,UAA6B,QAApBH,EAAE90F,EAAQ80C,kBAAU,IAAAggD,OAAA,EAAlBA,EAAoBG,UAC/BniI,gBAAiB,CACboiI,IAAuB,QAApBH,EAAE/0F,EAAQ80C,kBAAU,IAAAigD,OAAA,EAAlBA,EAAoBG,IACzBhhI,GAAsB,QAApB8gI,EAAEh1F,EAAQ80C,kBAAU,IAAAkgD,OAAA,EAAlBA,EAAoB9gI,KAGpC,ECXG,MAAMihI,WAAwClE,GACjD,YAAME,CAAOnxF,GAA2D,IAAD+xF,QAC7D1xN,KAAKwL,SAAS6jC,QAAQwtD,uBAAuB,CAC/C1nE,QAA2B,QAApBu8L,EAAE/xF,EAAQ0rE,kBAAU,IAAAqmB,OAAA,EAAlBA,EAAoBv8L,QAC7Bk2K,WAAY1rE,EAAQ0rE,YAE5B,E,4BCLG,MAAM0pB,WAAiCnE,GAC1C,YAAME,CAAOnxF,GAAoD,IAAD+xF,EAAA8C,EAAAQ,EAAAC,QACtDj1N,KAAKwL,SAAS6jC,QAAQC,YAAY,CACpCC,YAAamgD,GAAAA,EAAWwlI,mBAAmB,cAAiC,QAApBxD,EAAE/xF,EAAQ0rE,kBAAU,IAAAqmB,OAAA,EAAlBA,EAAoBj8L,wBAC7Di6D,GAAAA,EAAWwlI,mBAAmB,QAA2B,QAApBV,EAAE70F,EAAQ0rE,kBAAU,IAAAmpB,OAAA,EAAlBA,EAAoB/+L,uBAC5EN,QAA2B,QAApB6/L,EAAEr1F,EAAQ0rE,kBAAU,IAAA2pB,OAAA,EAAlBA,EAAoB7/L,QAC7BggM,SAAUzlI,GAAAA,EAAW0lI,kBAAkB,YAA+B,QAApBH,EAAEt1F,EAAQ0rE,kBAAU,IAAA4pB,OAAA,EAAlBA,EAAoBx/L,wBAEhF,ECRG,MAAM4/L,WAAoCzE,GAC7C,YAAME,CAAOnxF,eACI3/H,KAAKwL,SAASi0D,eAAe26B,cAAc,CACpDx6E,MAAOy6E,GAAAA,GAAawB,cAE5B,ECNG,MAAMy5H,WAAwC1E,GACjD,YAAME,CAAOnxF,SACH3/H,KAAKwL,SAASorB,SAASjc,KAAKglH,EAAQ80C,WAAWx6G,IACzD,ECHG,MAAMs7J,WAAmC3E,GAC5C,YAAME,CAAOnxF,GAAsD,IAAD80F,cACjDz0N,KAAKwL,SAASi0D,eAAe26B,cAAc,CACpDx6E,MAAyB,QAApB60M,EAAE90F,EAAQ80C,kBAAU,IAAAggD,OAAA,EAAlBA,EAAoB70M,OAEnC,ECLG,MAAM41M,WAA8B5E,GACvC,YAAME,CAAOnxF,GAAiD,IAAD80F,EAAAgB,cAC5Cz1N,KAAKwL,SAASi0D,eAAei2J,aAAa,CACnDC,WAA8B,QAApBlB,EAAE90F,EAAQ80C,kBAAU,IAAAggD,GAAY,QAAZgB,EAAlBhB,EAAoBmB,kBAAU,IAAAH,OAAZ,EAAlBA,EAAgCt2N,YAEpD,ECLG,MAAM02N,WAA2CjF,GACpD,YAAME,CAAOnxF,SACA3/H,KAAKwL,SAASkE,KAAKi7H,qBAAqB,8CACtC3qI,KAAKwL,SAASu4B,UAAUuK,UAEvC,ECJG,MAAMwnL,WAAoClF,GAC7C,YAAME,CAAOnxF,GAET,MAAM5qH,EAAW4qH,EAAQ80C,WAAW1/J,SAEjC4qH,EAAQ80C,WAAWl8B,cACZv4I,KAAKwL,SAASkE,KAAKi7H,qBAAqB,qCAG5C3qI,KAAKwL,SAAS2P,MAAMwmH,2BAE1B,MAAM1uH,QAAiBjT,KAAKwL,SAAS2P,MAAM8mH,YAAYltH,GAEvD,IAAI9B,EAAU,CAGV,GAFAjT,KAAKwL,SAAS2L,OAAOxI,MAAM,aAAD/O,OAAcmV,EAAQ,oBAE5C/U,KAAK+1N,wBAAwBhhN,GAAW,CAExC,MAAMihN,EAA6B,CAC/B5gM,KAAMC,GAAAA,EAAS/0B,OACf21N,QAAS,CACL,CACI/qB,SAAUC,GAAAA,GAAS+qB,eACnBzhD,WAAY90C,EAAQ80C,cAOhC,YADAz0K,KAAKwL,SAAS63E,IAAIy7D,eAAe,cAADl/I,OAAeu2N,mBAAmB10M,KAAKC,UAAUs0M,KAErF,CAIA,OAFAh2N,KAAKwL,SAASqd,UAAUy2G,wBAAwBngD,GAAAA,GAAgCi3I,oBAAqB,mBAAoBrhN,EAAS5V,uBAC5Ha,KAAKq2N,uBAAuBthN,EAEtC,OAEM9B,EAASO,KAAK,CAChBL,WAAYwsH,EAAQ80C,WAAWl8B,QAEvC,CAGQw9E,uBAAAA,CAAwBhhN,GAC5B,OAAO/U,KAAKwL,SAASqI,OAAOkZ,OAAOC,aAC9BhtB,KAAKwL,SAAS63E,IAAIw7D,qBAAqB9pI,KACvC/U,KAAKwL,SAASoL,WAAW0/M,kCAClC,CAEA,4BAAcD,CAAuBthN,GACjC,IAAIwhN,EACJ,MAAMrjE,QAAwBlzJ,KAAKwL,SAAS2P,MAAM+mH,mBAAmBntH,EAAU,KAAO,GAEtF,IAAkB,OAAfm+I,QAAe,IAAfA,OAAe,EAAfA,EAAiBhzJ,QAAS,EAAG,CAC5B,MAAMs2N,QAAuBx2N,KAAKwL,SAAS2P,MAAM6mH,kBAAkBkxB,IAAoB,IAErE,OAAdsjE,QAAc,IAAdA,OAAc,EAAdA,EAAgBt2N,QAAS,IACzBq2N,EAAoBC,EAAe,GAAGzhN,SAE9C,CAEA,IAAKwhN,EAAmB,CAAC,IAAD9lE,EACpBzwJ,KAAKwL,SAAS2L,OAAOxI,MAAM,yDAAD/O,OAA0DmV,EAAQ,0BAAAnV,OAAyBszJ,EAAgBztJ,KAAK,KAAI,MAE9I,MAAMgxN,GAAgE,QAAzChmE,EAAAzwJ,KAAKwL,SAASgsE,SAASs4D,0BAAkB,IAAA2gB,OAAA,EAAzCA,EAA2C7jC,YAAa,GAErF,GAAoC,IAAhC6pG,EAAqBv2N,OAErB,YADAF,KAAKwL,SAAS2L,OAAO+0E,MAAM,+DAADtsF,OAAgEmV,IAO9F,GAHAwhN,EAAoBE,EADIpgN,KAAK8jB,MAAM9jB,KAAKC,SAAWD,KAAKuK,IAAI,GAAI61M,EAAqBv2N,iBAIzEF,KAAKwL,SAAS2P,MAAM8mH,YAAYs0F,GACxC,MAER,CAEA,MAAMG,QAAkB12N,KAAKwL,SAASkrN,gBAEhCA,EAAUC,kBAAkBJ,EAAmBv2N,KAAKwL,SAASoK,YAAYC,UAAU,+BAAgC7V,KAAKwL,SAASoK,YAAYC,UAAU,uBACjK,ECpFG,MAAM+gN,WAA4ChG,GACrD,YAAME,CAAOnxF,eACI3/H,KAAKwL,SAASi0D,eAAeo3J,oBAC9C,ECDG,MAAMC,WAA0ClG,GACnD,YAAME,CAAOnxF,GAA6D,IAADo3F,EAAArF,EAAAsF,EAAAxC,EACrE,UAAUx0N,KAAKwL,SAASkE,KAAKi7H,qBAAqB,qCAC9C,MAAM,IAAI16D,MAAM,yBAKpB,SAFMjwE,KAAKwL,SAASypB,WAAWgiM,sBAE1Bj3N,KAAKwL,SAASypB,WAAWgB,oBAC1B,MAAM,IAAIg6C,MAAM,wDAGpB,MAAMz7C,EAAgE,QAAvDuiM,EAAqB,QAArBrF,EAAG/xF,EAAQ0rE,kBAAU,IAAAqmB,GAAuB,QAAvBsF,EAAlBtF,EAAoBj8L,6BAAqB,IAAAuhM,OAAvB,EAAlBA,EAA2CxiM,iBAAS,IAAAuiM,EAAAA,EAAIriM,GAAAA,GAA0BE,UAEpG50B,KAAKu0B,eAAeC,SAEdx0B,KAAKwL,SAASypB,WAAWC,cAAc,CACzCC,SAAOjwB,EAAAA,EAAAA,GAAA,CACHkwB,KAAMC,GAAAA,EAAS6hM,cACf5hM,OAAQC,GAAAA,GAAeC,aACvBX,QAASC,GAAAA,GAAiBC,UACL,QADay/L,EAC/B70F,EAAQ0rE,kBAAU,IAAAmpB,OAAA,EAAlBA,EAAoBr/L,SAE3BM,sBAAuB,CACnBjB,UAAWA,IAGvB,CAEQD,cAAAA,CAAeC,GACnB,IACI,IAAInuB,EAAoC,CACpC4R,OAAQ,QACR+Q,SAAU,YACVD,UAAW,eACXjf,MAAO0qB,EAAUr1B,WACjBu3B,MAAO,MACPC,WAAY,CACRC,SAAU52B,KAAKwL,SAASorB,SAASC,WAAa,WAAa72B,KAAKwL,SAASorB,SAASE,WAAWC,SAAS53B,WACtGqiB,aAAcxhB,KAAKwL,SAASkE,KAAKsnB,kBAGzCh3B,KAAKwL,SAASqd,UAAUC,qBAAqBziB,GAAS,EAC1D,CACA,MAAOqI,GACHjK,QAAQC,IAAI,qDAAsDgK,EACtE,CACJ,ECvCG,MAAMyoN,WAAoCvG,GAC7C,YAAME,CAAOnxF,GAAuD,IAADy3F,EAAAC,EAAAC,EAE/D,IACIt3N,KAAKu0B,eAAeorG,EACxB,CAAE,MAAOn7H,GACLxE,KAAKwL,SAAS2L,OAAOxI,MAAM,sDAC/B,CAEA,MAAMskN,EAAwD,QAAvCmE,EAAGz3F,EAAQ80C,WAAWw+C,yBAAiB,IAAAmE,OAAA,EAApCA,EAAsCj4N,WAC1D+zN,EAA8D,QAA1CmE,EAAG13F,EAAQ80C,WAAWy+C,4BAAoB,IAAAmE,OAAA,EAAvCA,EAAyCl4N,WAChEuvN,EAAiB/uF,EAAQ80C,WAAWi6C,cACpCz0J,EAAG,GAAAr6D,OAA4B,QAA5B03N,EAAM33F,EAAQ80C,WAAWx6G,WAAG,IAAAq9J,OAAA,EAAtBA,EAAwBtuH,OAAM,uBAAAppG,OAAsBqzN,EAAiB,0BAAArzN,OAAyBszN,EAAoB,mBAAAtzN,OAAkB8uN,GAEnJ,OAAO1uN,KAAKwL,SAASszB,gBAAgB02B,QAAQ,CACzCyE,IAAKA,EACL8/B,SAAU,UAElB,CAEA,oBAAcxlE,CAAeorG,GACzB,MAAMv+C,EAAQphF,KAAKuzN,oBACblC,EAAqBrxN,KAAKwzN,uBAEhCxzN,KAAKwL,SAASi7G,oBAAoBuqG,eAAe,CAC7C1lB,cAAe3rE,EAAQ2rE,cACvBD,WAAY1rE,EAAQ0rE,WACpB30K,MAAO0qD,IAGX,MAAM8vI,QAAgBjuI,EAAAA,GAAAA,IAA2BjjF,KAAKwL,UACtDxL,KAAKwL,SAASi7G,oBAAoB0qG,eAAe,CAC7C7lB,cAAe3rE,EAAQ2rE,cACvB8lB,oBAAkBlsN,EAAAA,EAAAA,GAAA,CACdmmM,WAAY1rE,EAAQ0rE,WACpB30K,MAAO0qD,EACPiwI,mBAAoBA,IACjBltI,EAAAA,GAAAA,IAAoCnkF,KAAKwL,WAEhD+lN,YAAYhxI,EAAAA,GAAAA,IAAwBvgF,KAAKwL,UACzC0lN,QAASA,EACTjvI,SAAU,CACNC,SAAUliF,KAAKwL,SAASkE,KAAKC,aAAe,gBAAkB,YAC9DwyE,iBAAkBniF,KAAKwL,SAASoL,WAAWwrE,oBAC3CunD,MAAO,IAEX6nF,sBAAuBxxN,KAAKwL,SAASimN,cAAcpB,UAE3D,CAGUkD,iBAAAA,GACN,OAAO3tI,GAAAA,GAAe2xI,cAC1B,CAEU/D,oBAAAA,GACN,OAAOlC,GAAAA,GAAmBkG,gBAC9B,EC9DG,MAAMC,WAA+B7G,GACxC,YAAME,CAAOnxF,GAAkD,IAAD+xF,EAAAgG,EAiB1D,OAfG/3F,EAAQ80C,WAAWkjD,4BAA8BC,GAAAA,GAA0BC,cAC1E73N,KAAKwL,SAAS63E,IAAIqP,cAAcinD,sBAAsB,CAClD0vC,SAAU1pD,EAAQ80C,WAAWqjD,aAC7BC,qBAAsBzG,GAAAA,GAAmB0G,aAAa74N,mBAEpDa,KAAKwL,SAASkE,KAAK86H,0BAEnBxqI,KAAKwL,SAASkE,KAAKy7H,aAAa,CAClC2oE,QAAS9zM,KAAKwL,SAAS63E,IAAIkB,aAC3BolD,MAAOhK,EAAQ80C,WAAWqjD,aAC1BG,qBAAsBj4N,KAAKwL,SAAS63E,IAAIgB,sBACxC6zI,eAAgBl4N,KAAKwL,SAAS63E,IAAIoB,kBAIlCk7C,EAAQ80C,WAAW0jD,iBAAiBpyM,MACxC,KAAKqyM,GAAAA,GAAqB9oL,kBAChBtvC,KAAKwL,SAAS6jC,QAAQgoB,YAAY,CACpCliC,QAA2B,QAApBu8L,EAAE/xF,EAAQ0rE,kBAAU,IAAAqmB,OAAA,EAAlBA,EAAoBv8L,QAC7Bk2K,WAAY1rE,EAAQ0rE,WACpB8pB,SAAwD,QAAhDuC,EAAE/3F,EAAQ80C,WAAW0jD,iBAAiBpvG,kBAAU,IAAA2uG,OAAA,EAA9CA,EAAgD9C,YAE9D,MACJ,KAAKwD,GAAAA,GAAqBC,qCACTr4N,KAAKwL,SAASi0D,eAAe4sJ,kCAGtD,ECVG,MAAMiM,WAAuC55I,EAAAA,EAChD3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAEN,MAAMyqN,EAAUzqN,EAASimN,cAAcpB,SAASkI,cAAc/H,OAE9DyF,EAAQz3E,MAAMg6E,kBAAiB74F,GACpB,IAAI20F,GAAmBt0N,KAAKwL,UAAUslN,OAAOnxF,KAGxDs2F,EAAQ3wJ,SAASkzJ,kBAAiB74F,GACvB,IAAI40F,GAA0Bv0N,KAAKwL,UAAUslN,OAAOnxF,KAG/Ds2F,EAAQwC,YAAYD,kBAAiB74F,GAC1B,IAAIkxF,GAAyB7wN,KAAKwL,UAAUslN,OAAOnxF,KAG9Ds2F,EAAQyC,2BAA2BF,kBAAkB74F,GAC1C,IAAIiyF,GAAwC5xN,KAAKwL,UAAUslN,OAAOnxF,KAG7Es2F,EAAQ7qB,QAAQotB,kBAAkB74F,GACvB,IAAIqyF,GAAyBhyN,KAAKwL,UAAUslN,OAAOnxF,KAG9Ds2F,EAAQ0C,SAASH,kBAAkB74F,GACxB,IAAIsyF,GAA0BjyN,KAAKwL,UAAUslN,OAAOnxF,KAG/Ds2F,EAAQ2C,mBAAmBJ,kBAAiB74F,GACjC,IAAIm1F,GAAgC90N,KAAKwL,UAAUslN,OAAOnxF,KAGrEs2F,EAAQ3mL,YAAYkpL,kBAAiB74F,GAC1B,IAAIo1F,GAAyB/0N,KAAKwL,UAAUslN,OAAOnxF,KAG9Ds2F,EAAQ77H,cAAco+H,kBAAiB74F,GAC5B,IAAI41F,GAA2Bv1N,KAAKwL,UAAUslN,OAAOnxF,KAGhEs2F,EAAQ4C,eAAeL,kBAAiB74F,GAC7B,IAAI01F,GAA4Br1N,KAAKwL,UAAUslN,OAAOnxF,KAGjEs2F,EAAQ6C,mBAAmBN,kBAAiB74F,GACjC,IAAI21F,GAAgCt1N,KAAKwL,UAAUslN,OAAOnxF,KAGrEs2F,EAAQ8C,SAASP,kBAAiB74F,GACvB,IAAIwyF,GAAsBnyN,KAAKwL,UAAUslN,OAAOnxF,KAG3Ds2F,EAAQp8H,SAAS2+H,kBAAiB74F,GACvB,IAAI2yF,GAAsBtyN,KAAKwL,UAAUslN,OAAOnxF,KAG3Ds2F,EAAQ+C,UAAUR,kBAAiB74F,GACxB,IAAI8zF,GAAuBzzN,KAAKwL,UAAUslN,OAAOnxF,KAG5Ds2F,EAAQgD,eAAeT,kBAAiB74F,GAC7B,IAAIw3F,GAA4Bn3N,KAAKwL,UAAUslN,OAAOnxF,KAGjEs2F,EAAQz7H,sBAAsBg+H,kBAAiB74F,GACpC,IAAIi0F,GAAmC5zN,KAAKwL,UAAUslN,OAAOnxF,KAGxEs2F,EAAQ5pC,sBAAsBmsC,kBAAiB74F,GACpC,IAAIk2F,GAAmC71N,KAAKwL,UAAUslN,OAAOnxF,KAGxEs2F,EAAQiD,eAAeV,kBAAiB74F,GAC7B,IAAIo0F,GAA4B/zN,KAAKwL,UAAUslN,OAAOnxF,KAGjEs2F,EAAQ7rF,OAAOouF,kBAAiB74F,GACrB,IAAIy0F,GAAoBp0N,KAAKwL,UAAUslN,OAAOnxF,KAGzDs2F,EAAQkD,SAASX,kBAAiB74F,GACvB,IAAI00F,GAA4Br0N,KAAKwL,UAAUslN,OAAOnxF,KAGjEs2F,EAAQmD,SAASZ,kBAAiB74F,GACvB,IAAI61F,GAAsBx1N,KAAKwL,UAAUslN,OAAOnxF,KAG3Ds2F,EAAQC,eAAesC,kBAAiB74F,GAC7B,IAAIm2F,GAA4B91N,KAAKwL,UAAUslN,OAAOnxF,KAGjEs2F,EAAQY,mBAAmB2B,kBAAiB74F,GACjC,IAAIi3F,GAAoC52N,KAAKwL,UAAUslN,OAAOnxF,KAGzEs2F,EAAQoD,qBAAqBb,kBAAiB74F,GACnC,IAAIm3F,GAAkC92N,KAAKwL,UAAUslN,OAAOnxF,KAGvEs2F,EAAQqD,UAAUd,kBAAiB74F,GACxB,IAAI83F,GAAuBz3N,KAAKwL,UAAUslN,OAAOnxF,IAEhE,EC1HG,IAAM45F,IAAsB1hN,GAC9BC,EAAAA,GAAWxK,IAAGyK,GASdE,EAAAA,GAAOC,MAAKpF,GAVV,cAAqC4rE,EAAAA,EAIxC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,eAAAC,GAAA,OAEhBQ,EAAAA,EAAAA,IAAehZ,KACnB,CAGAw5N,SAAAA,CAAUx3E,GAGN,OAFAA,EAAU,IAAIy3E,GAAuBz3E,EAAShiJ,KAAKwL,UACnDxL,KAAK05N,QAAU,IAAI15N,KAAK05N,QAAS13E,GAC1B,CACHzkB,OAAQA,KACJ,MAAMo8F,EAAsB35N,KAAK05N,QAAQ/uI,WAAU2zB,GAAKA,EAAE/uF,KAAOyyH,EAAQzyH,KACtEoqM,GAAuB,IACtB/vM,EAAAA,EAAAA,KAAY,KACR5pB,KAAK05N,QAAQr5L,OAAOs5L,EAAqB,GACzC35N,KAAK05N,QAAU,IAAI15N,KAAK05N,QAAQ,GAExC,EAIZ,GACHlhN,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,WAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAzBuC,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,aAAAtJ,GAAAsJ,WAAAtJ,IA4B1C,MAAM2mN,GACF1mN,WAAAA,CAA6B6mN,EAA0DljG,GAAqC,KAA/FkjG,gBAAAA,EAAuC,KAAmBljG,UAAAA,EAAkC,KAKxGmjG,SAAG,EAJhB75N,KAAK65N,IAAM75N,KAAK02H,UAAU31E,MAAMC,SACpC,CAKA,MAAIzxB,GACA,OAAOvvB,KAAK45N,gBAAgBrqM,IAAMvvB,KAAK65N,GAC3C,CAEA,aAAIzzE,GACA,QAAGrhJ,EAAAA,MAAMkP,kBAAkBjU,KAAK45N,gBAAgBxzE,YAGzCpmJ,KAAK45N,gBAAgBxzE,SAChC,CAEA3mJ,MAAAA,GACI,OAAOO,KAAK45N,gBAAgBn6N,QAChC,E,OC5DG,MAAMq6N,GAAmBr8N,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6MAMpCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,IAE7B/gD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAO4B,SAAS,ICKzC,MAAMowN,WAAoCv6N,GAAAA,EAAgDuT,WAAAA,GAAA,SAAA9S,WAAA,KAE7F08D,aAAe,KACX38D,KAAKlC,MAAMk6B,cAAcC,OAAO,CACnC,CAEDx4B,MAAAA,GACI,OACI+I,EAAAA,GAAAA,MAACsxN,GAAgB,CAAA/5N,SAAA,EACbL,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SAAEC,KAAKlC,MAAMk8N,eAC3Bt6N,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SAAEC,KAAKlC,MAAMm8N,eAC3Bv6N,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CAACC,cAAe,CACxCt2B,KAAM9B,KAAKlC,MAAMo8N,cACjB7yN,QAASrH,KAAK28D,aACdh9D,WAAWG,EAAAA,GAAAA,IAAQ,yCAInC,ECfG,MAAMq6N,WAAgCz7I,EAAAA,EACzC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GACFxL,KAAKwL,SAAS+9B,UAAUtuB,WACxBjb,KAAKyP,UAAU,IAAMzP,KAAKwL,SAASkE,KAAKC,eACnCA,IACG,MAAMukH,EAAwBl0H,KAAKwL,SAASoL,WAAWwrE,oBACjDg4I,EAAYp6N,KAAKwL,SAASye,cAAc6P,gBAAgBugM,iBAAiBD,UAC3EzqN,IAAiB3P,KAAKwL,SAAS63E,IAAI04D,yBAA2Bq+E,GAAaA,EAAUlmG,IACrFl0H,KAAKs6N,iCACT,GAGJ,CAACp+M,iBAAiB,GAI9B,CAEA,qCAAco+M,GACV,IACI,IAAIC,QAA2Fv6N,KAAKwL,SAASonH,IAAIy0F,2BAA2BnC,sBACxI,CACIsV,gBCrCQ,UDwChBx6N,KAAKy6N,0BAA0BF,EAEnC,CAAE,MAAO5rN,GACL3O,KAAKwL,SAAS2L,OAAOxI,MAAM,sDAAuDA,EACtF,CAEJ,CACA,uCAAc+rN,CAAkC5gI,EAA+BqwH,EAAoB11C,GAE/F,IAAIo/B,EAA8E,CAC9E8mB,0BAA2BxQ,EAC3B11C,WAAYhzJ,KAAKC,UAAU+yJ,GAAc,CAAC,UAGxCz0K,KAAKwL,SAASonH,IAAIy0F,2BAA2BlC,iCAAiCtR,eACvE7zM,KAAKwL,SAASouF,aAAaC,SAAS,CAC7CC,sBAAuBA,EACvBrkE,sBAAuB,CACnBskE,SAAUC,GAAAA,GAAa4gI,KAE3BzlM,QAAS,CACLC,KAAMC,GAAAA,EAASwlM,QACfvlM,OAAQswD,GAAAA,GAAeC,aACvBhxD,QAAS,iBAGrB,CAEQ4lM,yBAAAA,CAA0BF,GAAoF,IAADO,EAEjH,IAAIC,GAAsD,QAAjCD,EAACP,EAAyBtE,eAAO,IAAA6E,EAAAA,EAAI,IAAIr7M,QAAOxH,IAAM,IAAA+iN,EAAA,MCrE/C,iBDqEmD/iN,EAAOxO,MCpEpE,SDoE0H,QAAjBuxN,EAAA/iN,EAAOw8J,kBAAU,IAAAumD,OAAA,EAAjBA,EAAmB1+G,UAA4B,IAC9K,GAAkC,IAA9By+G,EAAmB76N,OACnB,OAEJ,MAAM45F,EAAwB95F,KAAKwL,SAASu1C,MAAMC,UAC5C/oC,EAAS8iN,EAAmB,GAGlC/6N,KAAKwL,SAASi7G,oBAAoB8jG,eAAe,CAC7CzwH,sBAAuBA,EACvB0wH,iBAAkBtvG,GAAAA,GAAoBC,cAI1Cn7G,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAC3Bt4B,EAAAA,GAAAA,KAACq6N,GAA2B,CACxB/hM,cAAeA,EACfgiM,YAAah6N,KAAKwL,SAASoK,YAAYC,UAAU,4BACjDokN,YAAaj6N,KAAKwL,SAASoK,YAAYC,UAAU,4BACjDqkN,cAAel6N,KAAKwL,SAASoK,YAAYC,UAAU,oCACnD,CACI5O,KAAMjH,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMgnG,kBAC7Cr1D,gBAAgB,EAChB/hB,iBAAiB,EACjB7yB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,yBAC3CynC,oBAAoB,EACpB8L,qBAAqB,EACrBR,yBAAyB,EACzBm7I,4BAA4B,EAC5B3+I,SAAUA,IAAMplD,KAAK06N,kCAAkC5gI,EAAuB7hF,EAAOxO,KAAMwO,EAAOw8J,aAGlH,EElFG,MAAMwmD,WAAmCv8I,EAAAA,EAC5C3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAENA,EAAS63E,IAAIoxC,OAAOse,2BAA0B,KACtCvnI,EAASkE,KAAKC,cACd3P,KAAKk7N,gBACT,IAIJl7N,KAAKyP,UAAS,IAAMjE,EAASkE,KAAKC,eAAeA,IAC7C3P,KAAKm7N,kBAAoB,EACrBxrN,GACA3P,KAAKo7N,uBACT,IAGJp7N,KAAKwL,SAASsE,OAAOu+H,YAAYgtF,WAAU,IAAMr7N,KAAKs7N,yBACtDt7N,KAAKwL,SAASsE,OAAOu+H,YAAYktF,aAAY,IAAMv7N,KAAKw7N,uBAGxDx7N,KAAKwL,SAASsE,OAAOu+H,YAAYotF,UAAS,IAAMz7N,KAAK07N,sBACrD17N,KAAKwL,SAAS63E,IAAIoxC,OAAO+hB,uBAAsB,IAAMx2I,KAAK27N,wBAC9D,CAEA,qBAAYR,GACR,MAAMrxN,EAAQ9J,KAAKwL,SAASoyC,aAAaC,QAAQ,+BACjD,OAAI94C,EAAAA,MAAMkP,kBAAkBnK,GACjB,EAEJi2B,SAASj2B,EAEpB,CAEA,qBAAYqxN,CAAkBrxN,GAC1B9J,KAAKwL,SAASoyC,aAAa+pF,QAAQ,8BAA+B79H,EACtE,CAGQ8xN,aAAAA,CAAc9oF,EAAmBhzG,GACrC,OAAO9/B,KAAKwL,SAASqd,UAAUqsG,UAAUp1F,GACpC2/F,aAAaqT,EAAW,MAAO,aAC/BtT,SAAS55C,GAAAA,GAAeC,cACxBg2I,oBAAoB77N,KAAKm7N,kBAClC,CAEQW,gBAAAA,GACJ97N,KAAKm7N,oBACL,MAAMn4I,EAAMhjF,KAAKwL,SAASkE,KAAKszE,IACzB+4I,EAAkB/7N,KAAKwL,SAASkE,KAAK4yE,SAASu6D,UACpD,MAAM,GAANj9I,OAAUojF,EAAG,KAAApjF,OAAIm8N,EAAe,KAAAn8N,OAAIgmF,GAAAA,GAAeC,aAAY,KAAAjmF,OAAII,KAAKm7N,kBAC5E,CAEA,oBAAMnK,CAAegL,GACjB,IAAK,IAADC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACA,MAAMxpF,EAAY,sBAEH9yI,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACTypF,UAAWv8N,KAAK87N,mBAChBU,YAAaR,EAAYtlM,MACzB8tD,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9Bg4I,8BAA+Bz8N,KAAK08N,gCAAgCV,EAAY3wB,YAChFA,WAAY,CACRl2K,QAA+B,QAAxB8mM,EAAED,EAAY3wB,kBAAU,IAAA4wB,OAAA,EAAtBA,EAAwB9mM,QACjCw8L,YAAmC,QAAxBuK,EAAEF,EAAY3wB,kBAAU,IAAA6wB,OAAA,EAAtBA,EAAwBvK,YACrCgL,iBAAwC,QAAxBR,EAAEH,EAAY3wB,kBAAU,IAAA8wB,OAAA,EAAtBA,EAAwBQ,iBAC1CC,QAA+B,QAAxBR,EAAEJ,EAAY3wB,kBAAU,IAAA+wB,OAAA,EAAtBA,EAAwBQ,YAItCC,iBAAuC,QAAvBR,EAACL,EAAY3wB,kBAAU,IAAAgxB,OAAA,EAAtBA,EAAwBviI,uBAC3CgjI,yBAA+C,QAAvBR,EAACN,EAAY3wB,kBAAU,IAAAixB,OAAA,EAAtBA,EAAwBxiI,uBACjDu7B,MACT,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,mDAAoDD,EACnF,CAEJ,CAEA,oBAAMyiN,CAAe4L,GACjB,IACI,MAAMjqF,EAAY,sBACH9yI,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACTypF,UAAWv8N,KAAK87N,mBAChBU,YAAaO,EAAc3L,mBAAmB16L,MAC9C8tD,WAAYu4I,EAAc3L,mBAAmB5sI,WAC7CO,aAAcg4I,EAAc3L,mBAAmBrsI,aAC/C92D,SAAU8uM,EAAc3L,mBAAmB1sI,aAC3C+3I,8BAA+Bz8N,KAAK08N,gCAAgCK,EAAc3L,mBAAmB/lB,YACrGjnH,qBAAsB24I,EAAc3L,mBAAmBhtI,qBACvDitI,mBAAoB0L,EAAc3L,mBAAmBC,mBACrDhmB,WAAY,CACRl2K,QAAS4nM,EAAc3L,mBAAmB/lB,WAAWl2K,QACrDw8L,YAAaoL,EAAc3L,mBAAmB/lB,WAAWsmB,YACzDgL,iBAAkBI,EAAc3L,mBAAmB/lB,WAAWsxB,iBAC9DC,QAASG,EAAc3L,mBAAmB/lB,WAAWuxB,QACrDnnM,sBAAuBsnM,EAAc3L,mBAAmB/lB,WAAW51K,sBACnEunM,YAAaD,EAAc3L,mBAAmB/lB,WAAW2xB,aAE7D/6I,SAAU,CACNC,SAAU66I,EAAc96I,SAASC,SACjCC,iBAAkB46I,EAAc96I,SAASE,iBACzCK,MAAOu6I,EAAc96I,SAASM,MAC9BF,MAAO06I,EAAc96I,SAASI,MAC9BI,qBAAsBs6I,EAAc96I,SAASQ,qBAC7CE,IAAKo6I,EAAc96I,SAASU,KAEhCc,kBAAmBs5I,EAAc7L,QAAQztI,kBACzC8tI,WAAY,CACR0L,aAAcF,EAAcxL,WAAW7wI,WACvC1kE,GAAI+gN,EAAcxL,WAAW1wI,GAC7BtqD,SAAUwmM,EAAcxL,WAAWh7L,SACnCuqD,SAAUi8I,EAAcxL,WAAWzwI,SACnCC,YAAag8I,EAAcxL,WAAWxwI,YACtCm8I,WAAYl9N,KAAKm9N,qBAMtBN,iBAAiBE,EAAc3L,mBAAmB/lB,WAAWvxG,uBAC/DgjI,yBAAyBC,EAAc3L,mBAAmB/lB,WAAWvxG,uBACrEu7B,MACT,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,mDAAoDD,EACnF,CACJ,CAEA,mBAAM0uN,CAAcL,EAA4CM,GAC5DA,GAA6Bn4N,EAAAA,EAAAA,GAAA,CACzBo4N,UAAW,EACXC,iBAAkB,IACfF,GAEP,MAAMG,EAAgBA,KAClB,IACI,MAAO,CACHroM,QAAS4nM,EAAc3L,mBAAmB/lB,WAAWl2K,QACrDw8L,YAAaoL,EAAc3L,mBAAmB/lB,WAAWsmB,YACzDgL,iBAAkBI,EAAc3L,mBAAmB/lB,WAAWsxB,iBAC9DC,QAASG,EAAc3L,mBAAmB/lB,WAAWuxB,QACrDnnM,sBAAuBsnM,EAAc3L,mBAAmB/lB,WAAW51K,sBACnEunM,YAAaD,EAAc3L,mBAAmB/lB,WAAW2xB,YAEjE,CAAE,MAAOtuN,GACL,OAAO,IACX,GAGJ,IAAK,IAAD+uN,EAAAC,EACA,MAAM5qF,EAAY,qBACH9yI,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAYr2H,OAAOilH,OAAO,CACvB66F,UAAWv8N,KAAK87N,mBAChBt3I,WAAYu4I,EAAc3L,mBAAmB5sI,WAC7Ci4I,8BAA+Bz8N,KAAK08N,gCAAgCK,EAAc3L,mBAAmB/lB,YACrGsyB,KAAkD,IAA5CN,EAA8BC,UACpCA,UAAWD,EAA8BC,UACzCC,iBAAkBF,EAA8BE,iBAChDf,YAAaO,EAAc3L,mBAAmB16L,MAC9C20K,WAAYmyB,KACbz4N,EAAAA,MAAMkP,kBAAkBopN,EAA8BO,aAAe,CAAC,EAAI,CAACA,YAAaP,EAA8BO,gBAGtHf,iBAA4D,QAA5CY,EAACV,EAAc3L,mBAAmB/lB,kBAAU,IAAAoyB,OAAA,EAA3CA,EAA6C3jI,uBAChEgjI,yBAAoE,QAA5CY,EAACX,EAAc3L,mBAAmB/lB,kBAAU,IAAAqyB,OAAA,EAA3CA,EAA6C5jI,uBACtEu7B,MACT,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,kDAAmDD,EAClF,CAEJ,CAEA,qCAAcguN,CAAgCrxB,GAGlC,IAADrlF,EAAA63G,EAFP,OAAe,OAAVxyB,QAAU,IAAVA,GAAAA,EAAYvxG,uBAGkH,QAA/HksB,EAA4G,QAA5G63G,SAAc79N,KAAKwL,SAASouF,aAAakkI,kCAAkCzyB,EAAWvxG,8BAAsB,IAAA+jI,OAAA,EAArGA,EAAuGE,yBAAiB,IAAA/3G,EAAAA,EAFxH,CAIf,CAEAg4G,SAAAA,CAAUC,GACN,IAAK,IAADC,EAAAC,EAAAC,EAGA,MAAMtrF,EAAY,gBACH9yI,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACTypF,UAAWv8N,KAAK87N,mBAChBt3I,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9Bg4I,wBAAyB,EACzBD,YAAayB,EAAgBvnM,MAC7B2nM,eAAgBJ,EAAgBK,YAChCnpM,QAAmC,QAA5B+oM,EAAED,EAAgB5yB,kBAAU,IAAA6yB,OAAA,EAA1BA,EAA4B/oM,WAItC0nM,iBAA2C,QAA3BsB,EAACF,EAAgB5yB,kBAAU,IAAA8yB,OAAA,EAA1BA,EAA4BrkI,uBAC/CgjI,yBAAmD,QAA3BsB,EAACH,EAAgB5yB,kBAAU,IAAA+yB,OAAA,EAA1BA,EAA4BtkI,uBACrDu7B,MACT,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,8CAA+CD,EAC9E,CACJ,CAEA6vN,WAAAA,CAAY7nM,EAAeojE,EAA+B5vF,GACtD,IACI,MAAM4oI,EAAY,kBACH9yI,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACTtuD,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9B+3I,YAAa9lM,KAIdmmM,iBAAiB/iI,GACnBgjI,yBAAyBhjI,GACzBu7B,KAAKnrH,EACd,CAAE,MAAOwE,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,gDAAiDD,EAChF,CACJ,CAEA67M,cAAAA,CAAex7L,GACX,IACI,MAAM+jH,EAAY,2BACZ0rF,EAAqB,YAErB1+L,EAAY,CACd,CAACgzG,GAAY,CACT0pF,YAAa52I,GAAAA,GAAeC,aAC5B02I,UAAWv8N,KAAK87N,mBAChBt3I,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9B+lI,iBAAkBz7L,EAAOy7L,iBACzBiS,wBAAyB,EACzBhS,mBAAoB17L,EAAO07L,qBAI/B17L,EAAO0vM,YACP3+L,EAAU0+L,GAAsB,CAC5BE,YAAa3vM,EAAO0vM,UAAUC,YAC9BC,YAAa5vM,EAAO0vM,UAAUE,YAC9B7mM,UAAW/I,EAAO0vM,UAAU3mM,UAC5B8mM,YAAa7vM,EAAO0vM,UAAUG,YAC9BC,aAAc9vM,EAAO0vM,UAAUI,aAC/BC,eAAgB/vM,EAAO0vM,UAAUK,iBAI1B9+N,KAAK47N,cAAc9oF,EAAWhzG,GAEtC+8L,iBAAiB9tM,EAAOu8K,eAAiBv8K,EAAO+qE,uBAClDgjI,yBAAyB/tM,EAAO+qE,uBAChCu7B,MACT,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,mDAAoDD,EACnF,CACJ,CAEQyuN,cAAAA,GACJ,OAAOrtN,OAAO0rE,OAAO95E,MAAQoO,OAAOivN,iBAAmB,IAAMjvN,OAAO0rE,OAAOn6E,OAASyO,OAAOivN,gBAC/F,CAEQ3D,qBAAAA,GACJ,IACI,MAAMtoF,EAAY,2BACZy+E,GAAahxI,EAAAA,GAAAA,IAAwBvgF,KAAKwL,UACjCxL,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACT6qF,MAAM,EACNL,UAAW,EACXC,iBAAkB,GAClBhB,UAAWv8N,KAAK87N,mBAChBt3I,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9B8sI,WAAY,CACR0L,aAAc1L,EAAW7wI,WACzB1kE,GAAIu1M,EAAW1wI,GACftqD,SAAUg7L,EAAWh7L,SACrBuqD,SAAUywI,EAAWzwI,SACrBC,YAAawwI,EAAWxwI,YACxBm8I,WAAYl9N,KAAKm9N,qBAKtB9nG,MAEX,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,0DAA2DD,EAC1F,CACJ,CAEQwsN,cAAAA,GACJ,IACI,MAAMpoF,EAAY,oBACH9yI,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACTypF,UAAWv8N,KAAK87N,mBAChBt3I,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9Bu6I,gBAAiB,KAIlB3pG,MAEX,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,mDAAoDD,EACnF,CACJ,CAEAuwN,aAAAA,CAAclwM,GACV,IACI,MAAM+jH,EAAY,2BAEH9yI,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACTypF,UAAWv8N,KAAK87N,mBAChBt3I,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9Bg4I,wBAAyB,EACzByC,WAAYnwM,EAAOmwM,WACnBC,kBAAmBpwM,EAAOowM,kBAC1BC,aAAcrwM,EAAOqwM,gBAItBvC,iBAAiB9tM,EAAO+qE,uBAC1BgjI,yBAAyB/tM,EAAO+qE,uBAChCu7B,MACT,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,kDAAmDD,EAClF,CAEJ,CAEAw7M,kBAAAA,CAAmBn7L,GACf,IACI,MAAM+jH,EAAY,8BAEZhzG,EAAiB,CACnBy8L,UAAWv8N,KAAK87N,mBAChBt3I,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9B0lI,WAAYp7L,EAAOo7L,WACnBM,mBAAoB17L,EAAO07L,mBAC3BgU,UAAW1vM,EAAO0vM,WAGnB1vM,EAAO0vM,YACN3+L,EAAU2+L,UAAY1vM,EAAO0vM,WAIjC,MAAMtnN,EAA4BnX,KAAK47N,cAAc9oF,EAAW,CAC5D,CAACA,GAAYhzG,IAGb/Q,EAAOswM,kBACPloN,EAAOsoH,aAAaqT,EAAW,OAGnC37H,EAAO0lN,iBAAiB9tM,EAAOu8K,eAAiBv8K,EAAO+qE,uBAClDgjI,yBAAyB/tM,EAAO+qE,uBAChCu7B,MAET,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,uDAAwDD,EACvF,CACJ,CAEA4wN,cAAAA,CAAeC,EAAqBC,EAAkBp+I,GAClD,IACI,MAAM0xD,EAAY,yBACH9yI,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACTypF,UAAWv8N,KAAK87N,mBAChBt3I,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9B86I,YAAaA,EACb3B,YAAa4B,EACbhD,YAAap7I,KAGdi0C,MAEX,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,mDAAoDD,EACnF,CACJ,CAEQgtN,iBAAAA,GACJ,IACI,IAAK17N,KAAKwL,SAASkE,KAAKC,aACpB,OAEJ,MAAMmjI,EAAY,qBAEZ37H,EAASnX,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACTtuD,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9B83I,UAAWv8N,KAAK87N,mBAChB2D,cAAe,EACfC,gBAAiB,YAIzBvoN,EAAOk+G,OACPl+G,EAAOk+G,KAAK,mBAGhB,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,qDAAsDD,EACrF,CACJ,CAEQ4sN,oBAAAA,GACJ,IACI,IAAKt7N,KAAKwL,SAASkE,KAAKC,aACpB,OAEJ,MAAMmjI,EAAY,qBAEZ37H,EAASnX,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACTtuD,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9B83I,UAAWv8N,KAAK87N,mBAChB2D,cAAe,EACfC,gBAAiB,gBAIzBvoN,EAAOk+G,OACPl+G,EAAOk+G,KAAK,mBAEhB,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,wDAAyDD,EACxF,CACJ,CAEQ8sN,kBAAAA,GACJ,IACI,IAAKx7N,KAAKwL,SAASkE,KAAKC,aACpB,OAEJ,MAAMmjI,EAAY,qBAEZ37H,EAASnX,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACTtuD,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9B83I,UAAWv8N,KAAK87N,mBAChB2D,cAAe,EACfC,gBAAiB,gBAIzBvoN,EAAOk+G,OACPl+G,EAAOk+G,KAAK,mBAEhB,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,sDAAuDD,EACtF,CACJ,CAEQitN,oBAAAA,GACJ,IACI,IAAK37N,KAAKwL,SAASkE,KAAKC,aACpB,OAEJ,MAAMmjI,EAAY,qBAEH9yI,KAAK47N,cAAc9oF,EAAW,CACzC,CAACA,GAAY,CACTtuD,WAAYxkF,KAAKwL,SAAS63E,IAAIoB,gBAC9B83I,UAAWv8N,KAAK87N,mBAChB2D,cAAe,EACfC,gBAAiB,oBAIlBrqG,MAEX,CAAE,MAAO3mH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,yDAA0DD,EACzF,CACJ,EC/eG,MAAMixN,WAAyCjhJ,EAAAA,EAE3CuxH,iBAAAA,CAAkB1gM,GACrB,OAAkG,IAA3FvP,KAAKwL,SAASuP,6BAA6B87L,iBAAiBxnM,OAAOi0B,QAAQ/zB,EACtF,ECfG,SAASqwN,GAAqBrwL,GACjC,QAAGxqC,EAAAA,MAAMkP,kBAAkBs7B,MAI3BA,EAAcA,EAAYpwC,cACHqwC,GAAAA,GAAmBqwL,aAAa1gO,YAChDowC,IAAgBC,GAAAA,GAAmBC,YAAYtwC,YAC/CowC,IAAgBC,GAAAA,GAAmBswL,QAAQ3gO,WACtD,CAEO,SAAS4gO,GAAqBxwL,GAEjC,OAAGxqC,EAAAA,MAAMkP,kBAAkBs7B,KAI3BA,EAAcA,EAAYpwC,cACHqwC,GAAAA,GAAmBwwL,SAAS7gO,UACvD,C,gBCyBO,MAAM8gO,WAAuBvhJ,EAAAA,EAEhCuhE,iBAAAA,GACI,OAAIjgJ,KAAKwL,SAASqI,OAAOmI,GAAGmgB,WACjBm1L,GAAAA,GAAmBQ,oBAEnBR,GAAAA,GAAmBS,eAElC,CAEQmO,wBAAAA,CAAyBC,GACzBA,EAAkBC,+BAClBpgO,KAAKwL,SAASi7G,oBAAoBw4G,cAAckB,EAAkBC,+BAGlED,EAAkBE,mCAClBrgO,KAAKwL,SAASi7G,oBAAoBw4G,cAAckB,EAAkBE,kCAE1E,CAGA,gCAAMC,GAEF,aAD0BtgO,KAAKugO,gCACZC,UACvB,CAEA,6BAAMC,GACF,OAAOzgO,KAAKwL,SAASqI,OAAOmI,GAAGmgB,mBAAsBn8B,KAAKsgO,4BAC9D,CAEA,6BAAcI,CAAwBC,EAAyBC,GAC3D,IAAK,IAADC,EACA,IAAI3P,EACJ,IACIA,QAAgBlxN,KAAKwL,SAAS63E,IAAIC,oBACtC,CACA,MAAOw9I,GACH9gO,KAAKwL,SAAS2L,OAAOxI,MAAM,8BAAD/O,OAA+B+gO,EAAO,uBAAuBG,EAC3F,CACA,aAAaF,EAAuB,CAChCG,aAAc/gO,KAAKwL,SAAS63E,IAAIG,iBAChCw9I,QAAgB,QAATH,EAAE3P,SAAO,IAAA2P,OAAA,EAAPA,EAAS58I,SAE1B,CAAE,MAAOv1E,GAEL,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,kBAAD/O,OAAmB+gO,EAAO,uBAAuBjyN,GACpE,CACH8xN,YAAY,EACZS,iBAAkB,QAClB1D,iBAAiB,uBAAD39N,OAAyB+gO,EAAO,gBAChDO,QAAS,EACTC,WAAW,EAEnB,CACJ,CAEA,2BAAcC,CAAsBT,EACAU,EACAC,EACAC,EACAX,GAGhC,GAAI5gO,KAAKwL,SAAS+9B,UAAUtuB,UAGxB,MAAO,CACHulN,YAAY,EACZ1mI,sBAAuB,GACvB0nI,wBAAwB,GAMhC,GAFsBxhO,KAAKwL,SAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAKosB,GAEjElsB,gBAAkBx1H,GAAAA,EAAwB4yH,SACxD,MAAO,CACH2uB,YAAY,EACZ1mI,sBAAuB,GACvB0nI,wBAAwB,GAIhC,MAAM/sB,EAAgB8sB,IAEtB,GAAGvhO,KAAKwL,SAASye,cAAc6P,gBAAgB2nM,eAAeC,qBAAuBjtB,EAAcx5L,UAAW,CAE1G,SADkCqmN,MACPh6I,GAAAA,GAAwBq6I,oBAC/C,MAAO,CACHnB,YAAY,EACZgB,wBAAwB,EACxB1nI,sBAAuB,GAGnC,CAGA,MAAMA,EAAwB95F,KAAKwL,SAASu1C,MAAMC,UAElD,IAAIo/K,EAAkE,KAClEwB,EAAgBntB,EAActD,mBAC/BywB,IACCxB,EAAgC,CAC5BtmI,sBAAuBA,EACvBolI,WAAYmC,EACZlC,kBAAmB,eACnBC,aAAc,CACVjtB,YAAayvB,EAAcC,YAC3BC,UAAWF,EAAcG,UACzBC,OAAQJ,EAAcK,UAMlC,IAAIC,QAAuBliO,KAAK0gO,wBAAwBC,EAASC,GACjE,MAAMP,EAA+D,CACjEvmI,sBAAuBA,EACvBolI,WAAYmC,EACZlC,kBAAmB,yBACnBC,aAAc,CACVoB,WAAY0B,EAAe1B,WAC3BS,iBAAkBiB,EAAejB,iBACjC3D,UAAW4E,EAAehB,QAC1B92N,aAAc83N,EAAe3E,iBAC7BtyN,SAAUd,QAAQ+3N,EAAehB,WAIzC,MAAO,CACHV,WAAY/rB,EAAcx5L,WAAainN,EAAe1B,WACtD1mI,sBAAuBA,EACvBsmI,8BAA+BA,EAC/BC,kCAAmCA,EACnCmB,wBAAwB,EAEhC,CAEA,kCAAcjB,GAEV,OAAIvgO,KAAKwL,SAAS+9B,UAAUtuB,UACjB+f,QAAQC,QACX,CACIulM,YAAY,EACZ1mI,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3CwgL,wBAAwB,IAK7BxhO,KAAKohO,sBACRx7I,GAAAA,GAAeu8I,eACf,WACAziN,qBAAyB1f,KAAKwL,SAASi0D,eAAe2iK,6BACtD,IAAMpiO,KAAKwL,SAASuP,6BAA6Bu7L,gBAChDvnL,GAAmD/uB,KAAKwL,SAASonH,IAAI20F,0BAA0B9B,yBAAyB12L,IAEjI,CAEA,kCAAcszM,GACV,OAAOriO,KAAKohO,sBACRx7I,GAAAA,GAAe08I,eACf,YACA,IAAMtnM,QAAQC,QAAQqsD,GAAAA,GAAwBq6I,uBAC9C,IAAM3hO,KAAKwL,SAASuP,6BAA6Bw7L,gBAChDxnL,GAAmD/uB,KAAKwL,SAASonH,IAAI20F,0BAA0B7B,yBAAyB32L,IAEjI,CAEA,6CAAcwzM,GACV,OAAOviO,KAAKohO,sBACRx7I,GAAAA,GAAe48I,mBACf,uBACA9iN,qBAAyB1f,KAAKwL,SAASi0D,eAAegjK,wCACtD,IAAMziO,KAAKwL,SAASuP,6BAA6By7L,2BAChDznL,GAAmD/uB,KAAKwL,SAASonH,IAAI20F,0BAA0B5B,oCAAoC52L,IAE5I,CAGA,iBAAMsoC,CAAYhxD,GAEd,UAAUrG,KAAKwL,SAASkE,KAAKi7H,qBAAqB,8BAC9C,OAGJ,MAAM+3F,QAA2B1iO,KAAKugO,+BAEnCmC,EAAmBlB,yBAItBxhO,KAAKkgO,yBAAyBwC,GAE1BA,EAAmBlC,uBACNxgO,KAAKwL,SAASouF,aAAa+oI,mBAAiBz9N,EAAAA,EAAAA,GAAC,CACtD40F,sBAAuB4oI,EAAmB5oI,uBAAyB95F,KAAKwL,SAASu1C,MAAMC,UACvF7rB,QAAS9uB,EAAQ8uB,QACjBM,sBAAuB,CACnBm/L,UAAkB,OAAPvuN,QAAO,IAAPA,OAAO,EAAPA,EAAS8uN,WAErB9uN,EAAQglM,mBAGTrrM,KAAKi8F,gBAAc/2F,EAAAA,EAAAA,GAAC,CACtBqqC,YAAaC,GAAAA,GAAmBqwL,cAC7Bx5N,IAGf,CAEA,kBAAM6rN,CAAa7rN,GACf,UAAUrG,KAAKwL,SAASkE,KAAKi7H,qBAAqB,+BAC9C,OAGJ,MAAMi4F,QAAiC5iO,KAAKqiO,+BAE5C,IAAGO,EAAyBpB,uBAA5B,CAMA,GAFAxhO,KAAKkgO,yBAAyB0C,GAE3B5iO,KAAKwL,SAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAKI,iBAAiBkuB,2CAA4C,CAAC,IAADC,EAAAC,EAEzH,GAA6D,QAA7DD,EAAGF,EAAyBvC,yCAAiC,IAAAyC,GAAc,QAAdC,EAA1DD,EAA4D1D,oBAAY,IAAA2D,GAAxEA,EAA0E93N,SAYzE,YAXAjL,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CACrCv5B,KAAM9B,KAAKwL,SAASoL,WAAWosN,yBAC/Br6K,gBAAgB,EAChBjtB,QAAS,CACL,CACI55B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1C8lB,aAAc,UACdt0B,QAASqY,SAAYmc,GAAAA,EAAkCC,2BAOvE,IAAI8mM,EAAyBpC,WAEzB,wBADaxgO,KAAKwL,SAASi0D,eAAe4sJ,iCAGlD,CAEIuW,EAAyBpC,uBACZxgO,KAAKwL,SAASouF,aAAaqpI,mBAAiB/9N,EAAAA,EAAAA,GAAC,CACtD40F,sBAAuB8oI,EAAyB9oI,uBAAyB95F,KAAKwL,SAASu1C,MAAMC,UAC7F7rB,QAAS9uB,EAAQ8uB,QACjBsnM,wBAAyB,GACtBp2N,EAAQglM,mBAGTrrM,KAAKi8F,gBAAc/2F,EAAAA,EAAAA,GAAC,CACtBqqC,YAAaC,GAAAA,GAAmB0zL,uBAC7B78N,GArCX,CAwCJ,CAEA,4BAAMw2F,CAAuBx2F,GACzB,UAAUrG,KAAKwL,SAASkE,KAAKi7H,qBAAqB,yCAC9C,OAGJ,MAAMg7E,QAA4C3lN,KAAKuiO,0CAEpD5c,EAAoC6b,yBAIvCxhO,KAAKkgO,yBAAyBva,GAE1BA,EAAoC6a,uBACvBxgO,KAAKwL,SAASouF,aAAaupI,8BAA4Bj+N,EAAAA,EAAAA,GAAC,CACjE40F,sBAAuB6rH,EAAoC7rH,uBAAyB95F,KAAKwL,SAASu1C,MAAMC,UACxG7rB,QAAS9uB,EAAQ8uB,SACd9uB,EAAQglM,mBAGTrrM,KAAKi8F,gBAAc/2F,EAAAA,EAAAA,GAAC,CACtBqqC,YAAaC,GAAAA,GAAmBgzL,oBAC7Bn8N,IAGf,CAEA,iBAAMipC,GAA8D,IAAlDjpC,EAA2BpG,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC7C,SAAUD,KAAKwL,SAASkE,KAAKi7H,qBAAqB,8BAAlD,CAIA,GAAIi1F,GAAqBv5N,EAAQkpC,aAAc,CAC3C,MAAMmzL,QAA2B1iO,KAAKugO,+BACtC,GAAGmC,EAAmBlB,uBAClB,OAIJ,GADAxhO,KAAKkgO,yBAAyBwC,GAC1BA,EAAmBlC,WAQnB,wBAPaxgO,KAAKwL,SAASouF,aAAa+oI,kBAAkB,CACtD7oI,sBAAuB4oI,EAAmB5oI,uBAAyB95F,KAAKwL,SAASu1C,MAAMC,UACvF7rB,QAAS9uB,EAAQ8uB,QACjBM,sBAAuB,CACnBm/L,WAAkB,OAAPvuN,QAAO,IAAPA,OAAO,EAAPA,EAAS8uN,WAAY,KAKhD,MAAO,GAAI4K,GAAqB15N,EAAQkpC,aAAc,CAClD,MAAM6zL,QAA2BpjO,KAAKqiO,+BACtC,GAAGe,EAAmB5B,uBAClB,OAIJ,GADAxhO,KAAKkgO,yBAAyBkD,GAC1BA,EAAmB5C,WAKnB,wBAJaxgO,KAAKwL,SAASouF,aAAaqpI,kBAAkB,CACtDnpI,sBAAuBspI,EAAmBtpI,uBAAyB95F,KAAKwL,SAASu1C,MAAMC,UACvF7rB,QAAS9uB,EAAQ8uB,SAI7B,OAEMn1B,KAAKqjO,yBAAyBh9N,EAnCpC,CAoCJ,CAEA,oBAAM41F,GAAiE,IAAlD51F,EAA2BpG,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,QACtCD,KAAKwL,SAASkE,KAAKi7H,qBAAqB,wCAG5C3qI,KAAKqjO,yBAAyBh9N,EACxC,CAEA,8BAAcg9N,GAA2E,IAAlDh9N,EAA2BpG,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,cACrDD,KAAKwL,SAASi0D,eAAenwB,YAAYjpC,EAC1D,CAEA,oCAAMqzF,GACF,OAAO15F,KAAKqjO,yBAAyB,CACjC9zL,YAAaC,GAAAA,GAAmB8zL,UAExC,E,2CCpYG,MAAeC,WAAgCz/M,GAAAA,EAClD/Q,WAAAA,CAA+BvH,GAC3B4M,QAAO,KADoB5M,SAAAA,CAE/B,CAGUg4N,aAAAA,CAAcvpK,GACjBj6D,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,SAC3Bv2B,KAAKwL,SAASuhB,OAAO++K,iBAAiB7xI,GAEtCj6D,KAAKwL,SAASsE,OAAO2zN,aAAaxpK,EAE1C,ECZG,MAAMypK,GAAiCjmO,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iOAEzCE,GAASA,EAAMu5F,SAAW,OACzBv5F,GAASA,EAAM+vE,UAAY,OAEhC/vE,GAASA,EAAMq+B,WAAa,uEAAyE,uBACpGr+B,GAASA,EAAMq+B,WAAa,OAAS,uBAGtCx9B,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,ICVrCulO,IAAoCnlO,EAAAA,GAAAA,GAAU,qC,OCApD,MAAMolO,GAAwBnmO,GAAAA,GAAOqrJ,OAAMnrJ,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2CCerCimO,IAA0EtkO,EAAAA,GAAAA,KAAUzB,IAAW,IAADgmO,EACvG,MAAMt4N,GAAWqD,EAAAA,GAAAA,KAYjB,OACInP,EAAAA,GAAAA,KAACkkO,GAAqB,CAACr0M,GAAIzxB,EAAMyxB,GACVxJ,KAAMjoB,EAAMyxB,GACZnb,IAAwB,SAAnBtW,EAAMimO,SAAsB,GAAKjmO,EAAMm8D,IAC5C3sD,IAdMunB,IACP,SAAnB/2B,EAAMimO,UACLv4N,EAAS4iI,IAAI41F,sBAAsBlmO,EAAMm8D,IAAK,CAC1C/vD,OAAQpM,EAAMyxB,KAItBzxB,EAAMmmO,gBAAgBpvM,EAAQ,EAQPu0H,YAAY,IACZC,UAA0B,QAAjBy6E,EAAEhmO,EAAMurJ,iBAAS,IAAAy6E,EAAAA,EAAI,OAC9BI,MAAOx8K,GAAAA,EAAOC,QAAQw8K,+BACtBC,iBAAiB,EACjBzkO,UAAWsX,KAAWnZ,EAAM6B,WAAWG,EAAAA,GAAAA,IAAQ,gCAAiC,I,OCf/G,IACaukO,IADZ9kO,EAAAA,GAAAA,IAAQuT,GAAT,cAC8DtT,GAAAA,EAA8DuT,WAAAA,GAAA,SAAA9S,WAAA,KAChHqkO,cAAgB,KACpBtkO,KAAKlC,MAAMk6B,cAAcC,OAAO,EACnC,KAEOy8B,mBAAqB,KACzB,GAAI10D,KAAKwL,SAASqI,OAAOmI,GAAGmgB,YAAcn8B,KAAKlC,MAAMw9B,gBACjD,OAAO,KAGX,MAAM/H,EAAYvzB,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM8nB,UAEzD,OACI9zB,EAAAA,GAAAA,KAACikO,GAAiC,CAAChkO,WAAWG,EAAAA,GAAAA,IAAQ,kCACnBuH,QAASrH,KAAKskO,cAAcvkO,UAC3DL,EAAAA,GAAAA,KAAC6zB,EAAS,CAAC9sB,KAAM,OACe,CAE3C,CAEDhH,MAAAA,GACI,OACI+I,EAAAA,GAAAA,MAACk7N,GAA8B,CAACrsI,SAAUr3F,KAAKlC,MAAMu5F,WACrBxpB,UAAW7tE,KAAKlC,MAAM+vE,YACtB1xC,WAAYn8B,KAAKwL,SAASqI,OAAOmI,GAAGmgB,WAAWp8B,SAAA,CAE1EC,KAAK00D,sBAENh1D,EAAAA,GAAAA,KAACmkO,GAA2B,CAACt0M,GAAIvvB,KAAKlC,MAAMyxB,GACfw0M,SAAU/jO,KAAKlC,MAAMimO,SACrB9pK,IAAKj6D,KAAKlC,MAAMm8D,IAChBovF,UAAWrpJ,KAAKlC,MAAMurJ,UACtB1pJ,UAAWK,KAAKlC,MAAMymO,gBACtBN,gBAAiBjkO,KAAKlC,MAAMmmO,oBAGrE,KACHnxN,G,yBCvCM,IAAM0xN,IAA0B3sN,GAelCC,EAAAA,GAAWxK,IAAGyK,GAEdD,EAAAA,GAAWxK,IAAG0K,GAoBdF,EAAAA,GAAWxK,IAAGwF,GArCZ,MACHC,WAAAA,CAA6BvH,EACAu8L,GAA8C,KAD9Cv8L,SAAAA,EAAiC,KACjCu8L,SAAAA,GAA2CxvL,EAAAA,EAAAA,GAAA,uBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,wBAAAE,GAAA,WAwBxEgsN,YAAc,KAAe,IAADC,EACxB,OAA2B,QAA3BA,EAAO1kO,KAAK2kO,uBAAe,IAAAD,EAAAA,EAAI1kO,KAAK+nM,SAAS1wG,QAAQ,EACxD,KACDutI,aAAe,KAAe,IAADC,EACzB,OAA4B,QAA5BA,EAAO7kO,KAAK8kO,wBAAgB,IAAAD,EAAAA,EAAI7kO,KAAK+nM,SAASl6H,SAAS,EAC1D,KAGgBgsJ,SAAG,OAEZp1K,eAA6C,MAAIlsC,EAAAA,EAAAA,GAAA,wBAAAmM,GAAA,WAKjDqgN,iBAAoBC,KACxBp7M,EAAAA,EAAAA,KAAY,KACR5pB,KAAKilO,iBAAmBD,CAAa,GACvC,GAzCFhsN,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK65N,IAAMruN,EAASu1C,MAAMC,SAC9B,CACA3iC,OAAAA,GAAiB,IAAD2mC,EACO,QAAnBA,EAAAhlD,KAAKykD,sBAAc,IAAAO,GAAnBA,EAAqB/sB,OACzB,CAEAxrB,OAAAA,GAAiB,IAADw4C,EACO,QAAnBA,EAAAjlD,KAAKykD,sBAAc,IAAAQ,GAAnBA,EAAqBx4C,SACzB,CAMAy4N,UAAAA,CAAW7tI,EAAkBxpB,IACzBjkD,EAAAA,EAAAA,KAAY,KACR5pB,KAAK2kO,gBAAkBttI,EACvBr3F,KAAK8kO,iBAAmBj3J,CAAS,GAEzC,CAuBAs3J,iBAAAA,CAAkBlrK,GACd,OAAO,IAAIj/B,SAAeC,IAEtBj7B,KAAKwL,SAAS4vB,OAAOgiB,WAAWplB,IAC5Bh4B,KAAKykD,eAAiBzsB,GAElBt4B,EAAAA,GAAAA,KAAC2kO,GAAwC,CAAC90M,GAAIvvB,KAAK65N,IACT5/J,IAAKA,EACLo9B,SAAUr3F,KAAKykO,YACf52J,UAAW7tE,KAAK4kO,aAChBtpM,gBAAiBt7B,KAAK+nM,SAASzsK,gBAC/B2oM,gBAAiBjkO,KAAK+kO,iBACtB/sM,cAAeA,EACfqxH,UAAWrpJ,KAAK+nM,SAASq9B,gBACzBb,gBAAiBvkO,KAAK+nM,SAASs9B,oBAC/BtB,SAAU/jO,KAAK+nM,SAASg8B,aAEvE,CACCn7K,yBAAyB,EACzBttB,iBAAiB,EACjBiiB,yBAAyB,EACzBF,gBAAgB,EAChBinJ,YAAatkM,KAAKwL,SAASrN,WAAWC,UACtC0oM,YAAa9mM,KAAK+nM,SAASllL,OAC3Bg7C,yBAA0B79D,KAAK+nM,SAASlqI,yBACxC82F,SAAU,QACV8zC,eAAgBzoM,KAAK+nM,SAASU,eAC9BxE,uBAAuB,EACvB56I,kBAAmBA,KACfrpD,KAAKwL,SAASqd,UAAUw2G,mBAAmBr/H,KAAK+nM,SAAS19C,gBAAiB,kBAAkB,EAEhGjlG,SAAUA,KACNplD,KAAK+nM,SAAS3iJ,WAAW7jC,MAAK,IAAM0Z,KAAU,GAEpD,GAEV,CAEAqqM,oBAAAA,CAAqBrrK,GACjB,OACIv6D,EAAAA,GAAAA,KAACmkO,GAA2B,CAACt0M,GAAIvvB,KAAK65N,IACTkK,SAAU/jO,KAAK+nM,SAASg8B,SACxB9pK,IAAKA,EACLovF,UAAWrpJ,KAAK+nM,SAASq9B,gBACzBzlO,UAAWK,KAAK+nM,SAASs9B,oBACzBpB,gBAAiBjkO,KAAK+kO,kBAE3D,CAGAQ,YAAAA,CAAa1iN,GACT7iB,KAAKykD,eAAe5hC,OAASA,CACjC,CAEA,YAAIigL,GACA,QAAG9iM,KAAKykD,gBACGzkD,KAAKykD,eAAeq+I,QAInC,GAEHtqL,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA7F6C,IAAK,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEH,IAAK,IAADkI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAoBF,IAAK,IAAD1J,ICjC9C,MAAe0yN,WAAwCjC,GAC1DxwN,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KA8CZi6N,mBAAqB/lN,UAAkC,IAADgmN,EAAAC,EACvDhrL,EAAQrlB,UAAyB,QAAnBowM,EAAK1lO,KAAK4lO,iBAAS,IAAAF,GAAkB,QAAlBC,EAAdD,EAAgBT,wBAAgB,IAAAU,OAAlB,EAAdA,EAAkCE,iBAIxD7lO,KAAKu0B,eAAeomB,SACd36C,KAAK8lO,uBAAuBnrL,GAAQ,EAC7C,KAWSirL,UAA+C,KAAK,KAepDG,sBAAwBrmN,UAC9B1f,KAAKwL,SAAS63E,IAAIqP,cAAcmnD,mBAAmB,CAC/CE,WAAY/5I,KAAKgmO,mBAErBhmO,KAAKqe,SAAS,EACjB,KAES4nN,yBAA2B,KAAO,IAADC,EACzB,QAAdA,EAAAlmO,KAAK4lO,iBAAS,IAAAM,GAAdA,EAAgB7nN,UAChBre,KAAK4lO,UAAY,IAAI,EAvFrB5lO,KAAKmmO,wBAAwBnmO,KAAKwL,SAAS63E,IAAIoxC,OAAO6gB,cAAct1I,KAAKylO,oBAC7E,CAKUW,iBAAAA,CAAkBzrL,GACxB,GAAG51C,EAAAA,MAAM+qE,SAASn1B,EAAQzwB,MACtB,IACI,OAAOzI,KAAK4nH,MAAM1uF,EAAQzwB,KAC9B,CAAE,MAAOxb,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,oDAAD/O,OAAqD+6C,EAAQzwB,MAAQxb,EACnG,CAIJ,OAAOisC,EAAQzwB,IACnB,CAEUm8M,gBAAAA,CAAiB1rL,GACvB,OAAO+0C,GAAAA,EAAW0lI,kBAAkB,WAAYp1N,KAAKomO,kBAAkBzrL,GAC3E,CAEU2rL,WAAAA,CAAY3rL,GAClB,OAAO+0C,GAAAA,EAAW0lI,kBAAkB,MAAOp1N,KAAKomO,kBAAkBzrL,GACtE,CAEU4rL,cAAAA,CAAe5rL,GACrB,OAAO+0C,GAAAA,EAAWwlI,mBAAmB,SAAUl1N,KAAKomO,kBAAkBzrL,GAC1E,CAEU6rL,iBAAAA,CAAkB7rL,GACxB,OAAQ+0C,GAAAA,EAAW0lI,kBAAkB,WAAYp1N,KAAKomO,kBAAkBzrL,KAC7D+0C,GAAAA,EAAW0lI,kBAAkB,YAAap1N,KAAKomO,kBAAkBzrL,GAChF,CAEU8rL,oBAAAA,CAAqB9rL,GAAyC,IAAD+rL,EACnE,OAA+E,QAA/EA,EAAQh3I,GAAAA,EAAWwlI,mBAAmB,QAASl1N,KAAKomO,kBAAkBzrL,WAAS,IAAA+rL,EAAAA,OAAIvmO,CACvF,CAEUwmO,sBAAAA,CAAuBhsL,GAAkD,IAADisL,EAC9E,OAA+E,QAA/EA,EAAQl3I,GAAAA,EAAWwlI,mBAAmB,QAASl1N,KAAKomO,kBAAkBzrL,WAAS,IAAAisL,EAAAA,OAAIzmO,CACvF,CAYUo0B,cAAAA,CAAeomB,GACrB,MAAM1iC,EAAM,gBAAArY,OAAmBI,KAAKgmO,kBACjCrrL,EAAQzwB,KACPlqB,KAAKwL,SAASqd,UAAUw2G,mBAAmBpnH,EAAO,gBAADrY,OAAkB6hB,KAAKC,UAAUi5B,EAAQzwB,QAE1FlqB,KAAKwL,SAASqd,UAAUw2G,mBAAmBpnH,EAEnD,CAGU4uN,YAAAA,CAAaC,GASnB,OARI9mO,KAAK4lO,YACL5lO,KAAK4lO,UAAY,IAAIpB,GAA2BxkO,KAAKwL,UAAQtG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACtDlF,KAAK+mO,4BACLD,GAAc,IACjB1hL,SAAUplD,KAAK+lO,0BAIhB/lO,KAAK4lO,SAChB,CAgBA,6BAAgBoB,CAAwB/sK,EAAa6sK,GACjD9mO,KAAKwL,SAAS63E,IAAIqP,cAAcynD,+BAC1Bn6I,KAAK6mO,aAAaC,GAAgB3B,kBAAkBlrK,EAC9D,CAEUgtK,yBAAAA,CAA0BhtK,EAAa6sK,GAC7C,OAAO9mO,KAAK6mO,aAAaC,GAAgBxB,qBAAqBrrK,EAClE,CAEA,eAAgBitK,CAAUjtK,GAC0B,SAA7Cj6D,KAAK+mO,2BAA2BhD,SAC/B/jO,KAAKwL,SAAS4iI,IAAI41F,sBAAsB/pK,EAAK,CACzC/vD,OAAQ,gBAGNlK,KAAKwL,SAASorB,SAASiuF,SAAS5qD,EAE9C,CAEUupK,aAAAA,CAAcvpK,GAC4B,SAA7Cj6D,KAAK+mO,2BAA2BhD,SAC/B/jO,KAAKwL,SAAS4iI,IAAI41F,sBAAsB/pK,EAAK,CACzC/vD,OAAQ,WAGZkO,MAAMorN,cAAcvpK,EAE5B,CAEA,uBAAgBktK,CAAkB9gO,GAC9BrG,KAAKimO,2BACL,MAAMmB,EAAyC,CAC3CjyM,QAAS9uB,EAAQ8uB,SAGlB9uB,EAAQghO,WACPD,EAAmBjS,SAAW9uN,EAAQghO,gBAGpCrnO,KAAKwL,SAAS6jC,QAAQgoB,YAAY+vK,EAC5C,CAEA,kBAAgBE,CAAajhO,GAUzBrG,KAAKimO,2BAEL,IAAIrmK,EAAiBv5D,EAAQ8uB,QAAQN,QAEjC+qC,IACIggK,GAAqBv5N,EAAQuZ,OAC7BggD,EAAiB9qC,GAAAA,GAAiB6a,cAC3BowL,GAAqB15N,EAAQuZ,SACpCggD,EAAiB9qC,GAAAA,GAAiB2lF,iBAI1C,MAAM1rF,EAA6B,CAC/BoG,QAAS,CACLG,OAAQjvB,EAAQ8uB,QAAQG,OACxBT,QAAS+qC,EACTxqC,KAAM/uB,EAAQ8uB,QAAQC,OAI3B/uB,EAAQghO,WACPt4M,EAAOomM,SAAW9uN,EAAQghO,UAG3BhhO,EAAQuZ,QACPmP,EAAOwgB,YAAclpC,EAAQuZ,aAG3B5f,KAAKwL,SAAS6jC,QAAQC,YAAYvgB,EAC5C,CAEA,oBAAgBw4M,CAAe5sL,GAAoC,IAAD6sL,EAC9D,GAAG,oBAA4D,QAA5CA,EAAKxnO,KAAKynO,eAAe,UAAW9sL,UAAQ,IAAA6sL,OAAA,EAAvCA,EAAyCxnN,eAAe,CAC5E,MAAMi6C,EAAMj6D,KAAKynO,eAAe,MAAO9sL,GACpCsf,IACIj6D,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,SAE3Bv2B,KAAKwL,SAASuhB,OAAO++K,iBAAiB7xI,SAIhCj6D,KAAKwL,SAASorB,SAASiuF,SAAS5qD,GAGlD,CACJ,CAEQwtK,cAAAA,CAAex/G,EAAiBttE,GACpC,OAAO+0C,GAAAA,EAAW0lI,kBAAkBntG,EAAUjoH,KAAKomO,kBAAkBzrL,GACzE,CAEU+sL,eAAAA,CAAgB/sL,GACtB,MAAMgtL,EAAoBj4I,GAAAA,EAAWk4I,2BAA2B,UAAW5nO,KAAKomO,kBAAkBzrL,KAAa,CAAC,GAC1G,KAACvlB,EAAOC,GAAAA,EAASoa,YAAW,QAAE5a,EAAUC,GAAAA,GAAiBwiC,cAAa,OAAEhiC,EAASC,GAAAA,GAAe8Z,SAAWs4L,EACjH,MAAO,CACHvyM,KAAKA,EACLP,QAASA,EACTS,OAAQA,EAEhB,CAEUuyM,6BAAAA,CAA8BltL,GACpC,MAAMmtL,EAA8Bp4I,GAAAA,EAAWk4I,2BAA2B,wBAAyB5nO,KAAKomO,kBAAkBzrL,KAAa,CAAC,GAClI,SAAC2hD,EAAWC,GAAAA,GAAsBu3H,KAAI,OAAEx+L,EAASwqC,GAAAA,GAAwBioK,SAAWD,EAC1F,MAAO,CACHxrI,SAAUA,EACVhnE,OAAQA,EAEhB,EC7NJ,MAAM0yM,GACI,IADJA,GAEO,IAFPA,GAGI,IAHJA,GAIwB,IAJxBA,GAKsB,IALtBA,GAMY,KANZA,GAOY,KAPZA,GAQ+B,KAR/BA,GASU,KATVA,GAU2B,KAV3BA,GAWe,KAXfA,GAYc,MAGb,MAAMC,WAAwCzC,GAEvCQ,cAAAA,GACN,OAAOtvI,GAAAA,EAAawxI,UACxB,CAGA,sBAAMC,CAAiB9hO,GACnB,GAAIrG,KAAKwL,SAASkE,KAAKC,aACnB,MAAM,IAAIsgE,MAAM,mEAIVjwE,KAAKooO,sCACLpoO,KAAKqoO,wBAAwBhiO,SAE7BrG,KAAKsoO,kCAAkCjiO,EAErD,CAEA,mCAAc+hO,GAEV,aAD8CpoO,KAAKwL,SAASuP,6BAA6B07L,2BAClDx7L,SAC3C,CAEA,6BAAcotN,CAAwBhiO,eACrBrG,KAAKwL,SAASouF,aAAa2uI,uBAAuBliO,EACnE,CAEA,uCAAciiO,CAAkCjiO,GAC5C,MAAM4zD,QAAYj6D,KAAKwoO,YAAYniO,SAC7BrG,KAAKgnO,wBAAwB/sK,EACvC,CAEA,iBAAgBuuK,CAAYniO,GAExB,MAAMoiO,EAAwC,CAC1CjoF,qBAFuBxgJ,KAAKwL,SAAS07G,WAAWsL,iBAAiBnsH,EAAQosF,kBAW7E,OANGpsF,EAAQuuN,YACP6T,EAAY7T,UAAYvuN,EAAQuuN,WAGpC6T,EAAYC,wBAA0B1oO,KAAKwL,SAASoL,WAAW+xN,iDAE3C3oO,KAAKwL,SAAS62I,MAAMumF,mBAAmBH,EAC/D,CAEU1B,wBAAAA,GACN,MAAO,CACH1vI,SAAU,KACVxpB,UAAW,IACXhrD,OAAQwkE,GAAAA,EAAsBwhJ,WAC9BhrK,0BAA0B,EAC1BviC,gBAAiBt7B,KAAK8oO,uBACtB/E,SAAU,OACV15E,gBAAiBrqJ,KAAKgmO,iBACtBX,qBAAqBvlO,EAAAA,GAAAA,IAAQ,2CAErC,CAEA,0BAAcgpO,GACV,OAAO,CACX,CAEA,4BAAgBhD,CAAuBnrL,GACnC,MAAMouL,EAAW/oO,KAAKqmO,iBAAiB1rL,GACvC,GAAKouL,EAIL,OAAQA,GACJ,KAAKf,GACL,KAAKA,GACDhoO,KAAKimO,2BACL,MACJ,KAAK+B,SACKhoO,KAAKsnO,aAAa,CACpB1nN,WAAOzf,EACPknO,SAAUrnO,KAAKwmO,kBAAkB7rL,GACjCxlB,QAAS,CACLG,OAAQC,GAAAA,GAAe0kF,aACvB7kF,KAAMC,GAAAA,EAAS2zM,kBACfn0M,QAASC,GAAAA,GAAiB6a,iBAGlC,MACJ,KAAKq4L,SACKhoO,KAAKipO,kCACX,MACJ,KAAKjB,SACKhoO,KAAKkpO,iBACX,MACJ,KAAKlB,GACD,MAAMmB,EAAcnpO,KAAKomO,kBAAkBzrL,SACrC36C,KAAKopO,yBAAyB,CAChC//C,SAAU35F,GAAAA,EAAW0lI,kBAAkB,WAAY+T,GACnDpR,qBAAsBroI,GAAAA,EAAW0lI,kBAAkB,uBAAwB+T,KAE/E,MACJ,KAAKnB,GACD,MAAMqB,EAA0B35I,GAAAA,EAAWC,YAAY,+BAAgC3vF,KAAKomO,kBAAkBzrL,IAC1G0uL,SACMrpO,KAAKspO,yBAAyBD,GAExC,MACJ,KAAKrB,SACKhoO,KAAKupO,oCACX,MACJ,KAAKvB,GACD,MAAM/tK,EAAMy1B,GAAAA,EAAW0lI,kBAAkB,SAAUp1N,KAAKomO,kBAAkBzrL,IACtEsf,QACMj6D,KAAKwpO,YAAYvvK,GAEvBj6D,KAAKwL,SAAS2L,OAAOxI,MAAM,mDAE/B,MACJ,KAAKq5N,SACKhoO,KAAKypO,uBACX,MACJ,KAAKzB,SACKhoO,KAAKunO,eAAe5sL,GAC1B,MACJ,KAAKqtL,GACDhoO,KAAK0pO,qBACL,MACJ,QACI1pO,KAAKwL,SAAS2L,OAAO+0E,MAAM,6BAADtsF,OAA8BmpO,EAAQ,uBAE5E,CAEA,oBAAgBG,GACZlpO,KAAKimO,iCACCjmO,KAAKwL,SAASkE,KAAKo6H,WAC7B,CAEA,8BAAgBs/F,CAAyBr6M,GACrC/uB,KAAKwL,SAAS63E,IAAIqP,cAAcinD,sBAAsB5qH,EAC1D,CAEA,qCAAgBk6M,GACZjpO,KAAKimO,iCACCjmO,KAAKwL,SAAS6jC,QAAQqqD,gCAChC,CAEA,uCAAgB6vI,GACZvpO,KAAKimO,uCACQjmO,KAAKwL,SAASi0D,eAAe4sJ,iCAC9C,CAEA,iBAAgBmd,CAAYvvK,UACjBj6D,KAAKwL,SAASi0D,eAAekqK,WAAW1vK,EACnD,CAEA,0BAAgBwvK,SACNzpO,KAAKwL,SAASorB,SAASiuF,SAAS7kH,KAAKwL,SAAS63E,IAAIw+D,qBAC5D,CAEA,8BAAgBynF,CAAyBD,GACrCO,GAAAA,EAAMluJ,IAAIgM,GAAAA,EAAuBjmE,KAAKC,UAAU2nN,GACpD,CAEA,wBAAgBK,eACC1pO,KAAKwL,SAASouF,aAAaY,sBAAsB,CAC1DrlE,QAAS,CACLG,OAAQC,GAAAA,GAAeilF,oBACvBplF,KAAMC,GAAAA,EAASolE,UAEnBX,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,WAEnD,EC5LJ,MAAM6oL,GACI,IADJA,GAEO,IAFPA,GAGa,IAHbA,GAIM,KAJNA,GAKK,KALLA,GAMY,KANZA,GAOK,UAPLA,GAQI,KARJA,GASY,KAIX,MAAMC,WAAqCtE,GAEpCQ,cAAAA,GACN,OAAOtvI,GAAAA,EAAaqzI,UACxB,CAEA,mBAAM3vI,CAAc/zF,GAEhB,UAAUrG,KAAKwL,SAASkE,KAAKi7H,qBAAqB,gCAC9C,OAGJ,IAAU,OAAPtkI,QAAO,IAAPA,OAAO,EAAPA,EAASuZ,SAAUy6E,GAAAA,GAAaw3H,gBAE/B,wBADa7xN,KAAKwL,SAASi0D,eAAe4sJ,kCAI9C,MAAMpyJ,QAAYj6D,KAAKwoO,YAAYniO,SAC7BrG,KAAKgnO,wBAAwB/sK,EAEvC,CAGA,iBAAgBuuK,CAAYniO,GACxB,mBAAoBrG,KAAKwL,SAAS62I,MAAM2nF,gBAAgB,CACpDpqN,MAAc,OAAPvZ,QAAO,IAAPA,OAAO,EAAPA,EAASuZ,OAExB,CAEUmnN,wBAAAA,GACN,MAAO,CACH1vI,SAAU,IACVxpB,UAAW,IACXhrD,OAAQwkE,GAAAA,EAAsB4iJ,UAC9B3uM,iBAAiB,EACjByoM,SAAU,OACV15E,gBAAiBrqJ,KAAKgmO,iBACtBX,qBAAqBvlO,EAAAA,GAAAA,IAAQ,yCAErC,CAEA,4BAAgBgmO,CAAuBnrL,GACnC,MAAMouL,EAAW/oO,KAAKqmO,iBAAiB1rL,GACvC,GAAIouL,EAGJ,OAAQA,GACJ,KAAKc,SACK7pO,KAAKmnO,kBAAkB,CACzBE,SAAUrnO,KAAKwmO,kBAAkB7rL,GACjCxlB,QAAS,CACLG,OAAQC,GAAAA,GAAewkF,UACvB3kF,KAAMC,GAAAA,EAASqa,OACf7a,QAASC,GAAAA,GAAiB6a,iBAGlC,MACJ,KAAKk6L,SACK7pO,KAAKsnO,aAAa,CACpB1nN,MAAO5f,KAAKymO,qBAAqB9rL,GACjC0sL,SAAUrnO,KAAKwmO,kBAAkB7rL,GACjCxlB,QAAS,CACLG,OAAQC,GAAAA,GAAewkF,UACvB3kF,KAAMC,GAAAA,EAASqa,UAGvB,MACJ,KAAKm6L,SACK7pO,KAAKgT,UAAW,CAClB+B,SAAU/U,KAAKumO,eAAe5rL,GAC9BuvL,iBAAkBx6I,GAAAA,EAAWwlI,mBAAmB,mBAC5CxlI,GAAAA,EAAWC,YAAY,oBAAqB3vF,KAAKomO,kBAAkBzrL,OAE3E,MACJ,KAAKkvL,SACK7pO,KAAKmqO,cAAc,CACrBxU,WAAYjmI,GAAAA,EAAW0lI,kBAAkB,aAAcp1N,KAAKomO,kBAAkBzrL,MAElF,MACJ,KAAKkvL,SACK7pO,KAAKoqO,aACX,MACJ,KAAKP,GACL,KAAKA,GACD7pO,KAAKimO,2BACL,MACJ,KAAK4D,GACD,MAAMQ,EAAcrqO,KAAKsmO,YAAY3rL,GAClC0vL,QACOrqO,KAAKsqO,iBAAiBD,GAE5BrqO,KAAKwL,SAAS2L,OAAOxI,MAAM,sEAG/B,MACJ,KAAKk7N,GACD,MAAMU,EAAcvqO,KAAKsmO,YAAY3rL,GAClC4vL,QACOvqO,KAAKwqO,iBAAiBD,GAE5BvqO,KAAKwL,SAAS2L,OAAOxI,MAAM,sEAE/B,MACJ,QACI3O,KAAKwL,SAAS2L,OAAO+0E,MAAM,6BAADtsF,OAA8BmpO,EAAQ,qBAG5E,CAEA,eAAgB/1N,CAAU3M,GAEtB,GADArG,KAAKimO,4BACD5/N,EAAQ0O,SAER,YADA/U,KAAKwL,SAAS2L,OAAO+0E,MAAM,4DAI/B,MAAMj5E,QAAiBjT,KAAKwL,SAAS2P,MAAM8mH,YAAY57H,EAAQ0O,UAE3D9B,QAKEA,EAASO,KAAK,CAChBL,YAAY,EACZ8/E,WAAY5sF,EAAQ6jO,mBANpBlqO,KAAKwL,SAAS2L,OAAO+0E,MAAM,mBAADtsF,OAAoByG,EAAQ0O,SAAQ,iDAQtE,CAEA,mBAAgBo1N,CAAc9jO,GAC1BrG,KAAKimO,uCACQjmO,KAAKwL,SAASi0D,eAAei2J,aAAarvN,EAC3D,CAEA,gBAAgB+jO,GACZpqO,KAAKimO,iCACCjmO,KAAKwL,SAASszB,gBAAgB2rM,WACxC,CAEA,sBAAgBH,CAAiBD,GAC7BrqO,KAAKimO,2BACFoE,QACOrqO,KAAKwL,SAASszB,gBAAgB02B,QAAQ,CACxCyE,IAAKowK,EACLtwI,SAAU,yBAGd/5F,KAAKwL,SAAS2L,OAAOxI,MAAM,oFAEnC,CAEA,sBAAgB67N,CAAiBD,GAC7BvqO,KAAKimO,2BACFsE,QACOvqO,KAAKwL,SAASszB,gBAAgB02B,QAAQ,CACxCyE,IAAKswK,EACLxwI,SAAU,WAGd/5F,KAAKwL,SAAS2L,OAAOxI,MAAM,oFAGnC,ECtLG,IAAK+7N,IAEX,SAFWA,GAAAA,EAAoB,0BAE/B,CAFWA,KAAAA,GAAoB,KAIzB,MAAMC,WAAmCnF,GAElCQ,cAAAA,GACN,OAAOtvI,GAAAA,EAAao+C,OACxB,CAEA,eAAY81F,GACR,OAAO5qO,KAAKwL,SAASqI,OAAOkZ,OAAO6zD,UAAY5gF,KAAKwL,SAASqI,OAAOkZ,OAAOC,UAC/E,CAEA,kBAAY69M,GACR,OAAO7qO,KAAKwL,SAASqI,OAAOmI,GAAG8uN,SAAW9qO,KAAKwL,SAASqI,OAAO8zC,QAAQojL,WAAa/qO,KAAKwL,SAASqI,OAAOi7H,mBAC7G,CAEA,eAAYk8F,GACR,OAAOhrO,KAAKwL,SAASqI,OAAOmI,GAAGmgB,YAAcn8B,KAAKwL,SAASqI,OAAOi7H,mBACtE,CAEA,iBAAMx/F,CAAYjpC,GACd,UAAUrG,KAAKwL,SAASkE,KAAKi7H,qBAAqB,WAC9C,OAGJ,MAAM1wE,QAAYj6D,KAAKwoO,YAAYniO,GAEhCrG,KAAK4qO,YACJ5qO,KAAKwL,SAASuhB,OAAO++K,iBAAiB7xI,GAChCj6D,KAAK6qO,eACX7qO,KAAKwjO,cAAcvpK,GACbj6D,KAAKgrO,kBACLhrO,KAAKknO,UAAUjtK,SAEfj6D,KAAKgnO,wBAAwB/sK,EAE3C,CAEA,iBAAgBuuK,CAAYniO,GACxB,mBAAoBrG,KAAKwL,SAAS62I,MAAM4oF,cAAc,CAClD/gO,OAAQlK,KAAKgrO,YAAc,EAAI,EAC/Bz7L,YAAoB,OAAPlpC,QAAO,IAAPA,OAAO,EAAPA,EAASkpC,YACtB83L,SAAiB,OAAPhhO,QAAO,IAAPA,OAAO,EAAPA,EAAS8uN,UAE3B,CAEU4R,wBAAAA,GACN,MAAO,CACH1vI,SAAU,KACVxpB,UAAW,IACXhrD,OAAQwkE,GAAAA,EAAsB0gJ,QAC9BzsM,iBAAiB,EACjByoM,SAAU,OACV15E,gBAAiBrqJ,KAAKgmO,iBACtBX,qBAAqBvlO,EAAAA,GAAAA,IAAQ,sCAErC,CAEA,4BAAgBgmO,CAAuBnrL,GAAuC,IAADuwL,EAEzE,GAAkG,gBAApB,QAA3EA,EAAAx7I,GAAAA,EAAW0lI,kBAAkB,QAASp1N,KAAKomO,kBAAkBzrL,EAAQzwB,cAAM,IAAAghN,OAAA,EAA3EA,EAA6ElrN,eAE5E,YADAhgB,KAAKimO,2BAIT,MAAM8C,EAAW/oO,KAAKqmO,iBAAiB1rL,GAEvC,GAAQouL,IACC2B,GAAqBS,oBACtBnrO,KAAK0pO,mBAAmB/uL,QAGxB36C,KAAKwL,SAAS2L,OAAO+0E,MAAM,+CAAgD68I,EAIvF,CAEA,wBAAcW,CAAmB/uL,GAC7B36C,KAAKimO,uCACQjmO,KAAKwL,SAASouF,aAAaY,sBAAsB,CAC1DV,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3C7rB,QAASn1B,KAAK0nO,gBAAgB/sL,GAC9BllB,sBAAuBz1B,KAAK6nO,8BAA8BltL,IAElE,EC/EJ,MAAMywL,GACO,SADPA,GAEQ,UAFRA,GAGc,IAHdA,GAIO,IAJPA,GAKa,IALbA,GAMU,KANVA,GAOK,KAPLA,GAQa,KARbA,GASY,KATZA,GAUc,KAVdA,GAWI,KAXJA,GAYc,MAGb,MAAMC,WAA+B7F,GAAoFzyN,WAAAA,GAAA,SAAA9S,WAAA,KA4BpHqrO,eAAsB,IAAK,CAzBnC,aAAMC,CAAQllO,GACV,IAAIrG,KAAKwL,SAASkE,KAAKC,aAEnB,YADA3P,KAAKwL,SAAS2L,OAAOxI,MAAM,sDAQ/B,MAAMsrD,QAAYj6D,KAAKwoO,YAAYniO,SAC7BrG,KAAKgnO,wBAAwB/sK,EAAK,CACpCp3C,OAAQxc,EAAQwc,SAGpB7iB,KAAKsrO,eAAiBnhM,YAAW,KAAO,IAADu7L,EAClB,QAAjBA,EAAG1lO,KAAK4lO,iBAAS,IAAAF,GAAdA,EAAgB5iC,UAIf9iM,KAAKimO,0BACT,GACD,IACP,CAIA,iBAAgBuC,CAAYniO,GACxB,mBAAoBrG,KAAKwL,SAAS62I,MAAMmpF,UAAU,CAC9CC,iBAAkBplO,EAAQolO,iBAC1BC,SAAUrlO,EAAQqlO,UAE1B,CAEU1F,cAAAA,GACN,OAAOtvI,GAAAA,EAAa4qD,GACxB,CAEUylF,wBAAAA,GACN,MAAO,CACH1vI,SAAU,KACVxpB,UAAW,IACXk2J,SAAU,OACVlhN,OAAQwkE,GAAAA,EAAsBskJ,iBAC9BrwM,iBAAiB,EACjB+uH,gBAAiBrqJ,KAAKgmO,iBACtBv9B,gBAAgB,EAChB28B,gBAAiBplO,KAAKwL,SAASqI,OAAOmI,GAAGmgB,WAAa,KAAO,OAC7DkpM,qBAAqBvlO,EAAAA,GAAAA,IAAQ,kCAErC,CAEA,4BAAgBgmO,CAAuBnrL,GAAuC,IAAD+rL,EAAAE,EACzE,MAAMmC,EAAW/oO,KAAKqmO,iBAAiB1rL,GACvC,GAAIouL,EAIJ,OAAQA,GACJ,KAAKqC,GACDnhM,aAAajqC,KAAKsrO,gBAClB,MAAMM,EAAoB5rO,KAAKomO,kBAAkBzrL,GAC3Cj5C,EAAQguF,GAAAA,EAAWwlI,mBAAmB,QAAS0W,GAC/CvqO,EAASquF,GAAAA,EAAWwlI,mBAAmB,SAAU0W,GACvD5rO,KAAK6rO,UAAUnqO,EAAOL,GACtBrB,KAAKwL,SAAS63E,IAAIqP,cAAcsnD,aAAah6I,MAC7C,MACJ,KAAKorO,GACDprO,KAAKimO,2BACL,MACJ,KAAKmF,SACKprO,KAAK8rO,eAAe,CACtBlsN,MAAO5f,KAAK2mO,uBAAuBhsL,KAEvC,MACJ,KAAKywL,SACKprO,KAAKsnO,aAAa,CACpB1nN,MAAO5f,KAAKymO,qBAAqB9rL,GACjC0sL,SAAUrnO,KAAKwmO,kBAAkB7rL,GACjCxlB,QAAS,CACLG,OAAQC,GAAAA,GAAeukF,IACvB1kF,KAAMC,GAAAA,EAASisH,IACfzsH,QAASu2M,MAGjB,MACJ,KAAKA,SACKprO,KAAKmnO,kBAAkB,CACzBE,SAAUrnO,KAAKwmO,kBAAkB7rL,GACjCxlB,QAAS,CACLG,OAAQC,GAAAA,GAAeukF,IACvB1kF,KAAMC,GAAAA,EAASisH,IACfzsH,QAASu2M,MAGjB,MACJ,KAAKA,SACKprO,KAAKyoF,cAAsF,QAAzEi+I,EAACh3I,GAAAA,EAAWwlI,mBAAmB,SAAUl1N,KAAKomO,kBAAkBzrL,WAAS,IAAA+rL,EAAAA,OAAIvmO,GACrG,MACJ,KAAKirO,SACKprO,KAAK0oF,cAAsF,QAAzEk+I,EAACl3I,GAAAA,EAAWwlI,mBAAmB,SAAUl1N,KAAKomO,kBAAkBzrL,WAAS,IAAAisL,EAAAA,OAAIzmO,GACrG,MACJ,KAAKirO,SACKprO,KAAKoqO,aACX,MACJ,KAAKgB,SACKprO,KAAKwqO,iBAAiBxqO,KAAKsmO,YAAY3rL,IAC7C,MACJ,KAAKywL,SACKprO,KAAKsqO,iBAAiBtqO,KAAKsmO,YAAY3rL,IAC7C,MAEJ,KAAKywL,SACKprO,KAAKmqO,cAAcz6I,GAAAA,EAAW0lI,kBAAkB,aAAcp1N,KAAKomO,kBAAkBzrL,KAC3F,MAEJ,KAAKywL,SACKprO,KAAK0pO,qBACX,MAEJ,QACI1pO,KAAKwL,SAAS2L,OAAO+0E,MAAM,6BAADtsF,OAA8BmpO,EAAQ,cAE5E,CAGU8C,SAAAA,CAAUnqO,EAAgCL,GAAwC,IAADwqJ,EAAAkgF,EAAAC,EAI3D9F,GAF5B7kO,EAAe,QAAT0qO,EAAG1qO,SAAM,IAAA0qO,EAAAA,EAAI,GADnBrqO,EAAa,QAARmqJ,EAAGnqJ,SAAK,IAAAmqJ,EAAAA,EAAI,GAGN,GAAKxqJ,EAAS,KACP,QAAd6kO,EAAAlmO,KAAK4lO,iBAAS,IAAAM,GAAdA,EAAgBhB,WAAWxjO,EAAOL,IAExB,QAAd2qO,EAAAhsO,KAAK4lO,iBAAS,IAAAoG,GAAdA,EAAgBv/N,SACpB,CAEA,oBAAgBq/N,CAAezlO,GAC3BrG,KAAKimO,uCACQjmO,KAAKwL,SAASi0D,eAAe26B,cAAc/zF,EAC5D,CAEA,eAAc2M,CAAU+B,EAAmCwjI,GAEvD,GADAv4I,KAAKimO,4BACDlxN,EAEA,YADA/U,KAAKwL,SAAS2L,OAAOxI,MAAM,+CAI/B,MAAMsE,QAAiBjT,KAAKwL,SAAS2P,MAAM8mH,YAAYltH,GAEnD9B,QAKEA,EAASO,KAAK,CAChBL,WAAYolI,IALZv4I,KAAKwL,SAAS2L,OAAOxI,MAAM,mBAAD/O,OAAoB24I,EAAS,OAAS,OAAM,UAAA34I,OAASmV,EAAQ,uCAO/F,CAEA,mBAAgB0zE,CAAc1zE,SACpB/U,KAAKgT,UAAU+B,GAAU,EACnC,CAEA,mBAAgB2zE,CAAc3zE,SACpB/U,KAAKgT,UAAU+B,GAAU,EACnC,CAEA,gBAAgBq1N,GACZpqO,KAAKimO,iCACCjmO,KAAKwL,SAASszB,gBAAgB2rM,WACxC,CAEA,sBAAgBD,CAAiBD,GAC7BvqO,KAAKimO,2BACFsE,QACOvqO,KAAKwL,SAASszB,gBAAgB02B,QAAQ,CACxCyE,IAAKswK,EACLxwI,SAAU,WAGd/5F,KAAKwL,SAAS2L,OAAOxI,MAAM,6EAGnC,CAEA,sBAAgB27N,CAAiBD,GAC7BrqO,KAAKimO,2BACFoE,QACOrqO,KAAKwL,SAASszB,gBAAgB02B,QAAQ,CACxCyE,IAAKowK,EACLtwI,SAAU,yBAGd/5F,KAAKwL,SAAS2L,OAAOxI,MAAM,6EAEnC,CAEA,mBAAgBw7N,CAAcxU,GAC1B31N,KAAKimO,2BAEDtQ,cAKS31N,KAAKwL,SAASi0D,eAAei2J,aAAa,CACnDC,WAAYA,IALZ31N,KAAKwL,SAAS2L,OAAOxI,MAAM,yDAOnC,CAEA,wBAAgB+6N,GACZ1pO,KAAKimO,uCACQjmO,KAAKwL,SAASouF,aAAaY,sBAAsB,CAC1DV,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3C7rB,QAAS,CACLC,KAAMC,GAAAA,EAASisH,IACfzsH,QAASC,GAAAA,GAAiBmmF,UAC1B3lF,OAAQC,GAAAA,GAAeC,cAE3BC,sBAAuB,CACnBH,OAAQwqC,GAAAA,GAAwBwhF,MAG5C,CAGA2qF,YAAAA,GAAsB,IAADC,EACH,QAAdA,EAAAlsO,KAAK4lO,iBAAS,IAAAsG,GAAdA,EAAgB3G,aAAal+I,GAAAA,EAAsBk6D,IACvD,ECnQG,MAAe4qF,WAAiD3G,GACnE,4BAAgBM,CAAuBnrL,GAAuC,IAADuwL,EAAAkB,EACzE,MAAMrD,EAAW/oO,KAAKqmO,iBAAiB1rL,GACvC,GAAIouL,EAIJ,OAAQA,GACJ,IAAK,IACE,WAAoF,QAA7EmC,EAAKx7I,GAAAA,EAAW0lI,kBAAkB,UAAWp1N,KAAKomO,kBAAkBzrL,WAAS,IAAAuwL,GAAY,QAAZkB,EAAxElB,EAA0E/rO,kBAAU,IAAAitO,OAAZ,EAAxEA,EAAsFpsN,gBACjGhgB,KAAKimO,2BAET,MACJ,IAAK,WACIjmO,KAAKkpO,iBACX,MACH,IAAK,WACKlpO,KAAKunO,eAAe5sL,GAGtC,CAEA,oBAAgBuuL,GACZlpO,KAAKimO,iCACCjmO,KAAKwL,SAASkE,KAAKo6H,WAC7B,CAEUi9F,wBAAAA,GACN,MAAO,CACH1vI,SAAU,KACVxpB,UAAW,IACXhrD,OAAQwkE,GAAAA,EAAsB4iJ,UAC9B3uM,iBAAiB,EACjByoM,SAAU,OACV15E,gBAAiBrqJ,KAAKgmO,iBAE9B,ECrCG,MAAMqG,WAA0CF,GACzCnG,cAAAA,GACN,OAAOtvI,GAAAA,EAAa41I,eACxB,CAEA,wBAAMC,GACF,MAAMtyK,QAAYj6D,KAAKwoO,oBACjBxoO,KAAKgnO,wBAAwB/sK,EACvC,CAEA,iBAAgBuuK,GACZ,mBAAoBxoO,KAAKwL,SAAS62I,MAAMmqF,sBAC5C,CAEUzF,wBAAAA,GACN,OAAA7hO,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOkT,MAAM2uN,4BAA0B,IACnC1B,qBAAqBvlO,EAAAA,GAAAA,IAAQ,+CAErC,ECnBG,MAAM2sO,WAA0CN,GACzCnG,cAAAA,GACN,OAAOtvI,GAAAA,EAAag2I,eACxB,CAEA,wBAAM7V,GACF,MAAM58J,QAAYj6D,KAAKwoO,oBACjBxoO,KAAKgnO,wBAAwB/sK,EACvC,CAEA,iBAAgBuuK,GACZ,mBAAoBxoO,KAAKwL,SAAS62I,MAAMsqF,sBAC5C,CAEU5F,wBAAAA,GACN,OAAA7hO,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOkT,MAAM2uN,4BAA0B,IACnC1B,qBAAqBvlO,EAAAA,GAAAA,IAAQ,+CAErC,ECAG,MAAM8sO,WAAwCpH,GAA4EzyN,WAAAA,GAAA,SAAA9S,WAAA,KA+BrH4sO,kBAA0C,IAAK,CA7BvD,sBAAMC,CAAiBzmO,GACnB,MAAM4zD,QAAYj6D,KAAKwoO,YAAYniO,SAC7BrG,KAAKgnO,wBAAwB/sK,EACvC,CAEA,iBAAgBuuK,CAAYniO,GACxB,mBAAoBrG,KAAKwL,SAAS62I,MAAM0qF,mBAAmB,CACvDpjG,MAAOtjI,EAAQsjI,OAEvB,CAEUq8F,cAAAA,GACN,OAAOtvI,GAAAA,EAAas2I,aACxB,CAEUjG,wBAAAA,GACN,MAAO,CACH1vI,SAAU,KACVxpB,UAAW,IACXhrD,OAAQwkE,GAAAA,EAAsB4lJ,cAC9BlJ,SAAU,OACV15E,gBAAiBrqJ,KAAKgmO,iBACtB1qM,iBAAiB,EACjB+pM,qBAAqBvlO,EAAAA,GAAAA,IAAQ,4CAErC,CAMA,4BAAgBgmO,CAAuBnrL,GACnC,MAAMouL,EAAW/oO,KAAKqmO,iBAAiB1rL,GACvC,IAAIouL,EACA,OAKJ,MAAMmE,EAAyBxtN,UAC3B,IACI,IAAK1f,KAAKwL,SAASkE,KAAKC,aAAc,CAClC,IAAItJ,EAAUrG,KAAKmtO,kCAAkCxyL,GACrD,GAAGt0C,EAAQsjI,MACP,UACU3pI,KAAKwL,SAASkE,KAAKy7H,aAAa9kI,EAC1C,CAAC,QACGrG,KAAK6sO,kBAAoB,IAC7B,CAGR,CACJ,CAAE,MAAMroO,GACJxE,KAAKwL,SAAS2L,OAAOxI,MAAM,+DAAgEnK,EAC/F,GAGE4oO,EAAe1tN,UACb1f,KAAK6sO,oBACL7sO,KAAK6sO,kBAAoBK,WAGvBltO,KAAK6sO,iBAAiB,EAGhC,OAAQ9D,EAAS/oN,eACb,IAAK,UACDhgB,KAAKimO,iCACCmH,IACN,MACJ,IAAK,WACKptO,KAAKkpO,iBACX,MACJ,IAAK,WACKlpO,KAAKqtO,qBAAqBrtO,KAAKmtO,kCAAkCxyL,IACvE,MACJ,IAAK,YACKyyL,IACN,MAAMj4M,EAAUn1B,KAAK0nO,gBAAgB/sL,GAC/BllB,EAAwBz1B,KAAK6nO,8BAA8BltL,SAC3D36C,KAAK0pO,mBAAmB,CAACv0M,QAASA,EAASM,sBAAuBA,IACxE,MACJ,IAAK,IACDz1B,KAAKimO,iCAECmH,UAEAptO,KAAKmnO,kBAAkB,CACzBE,SAAUrnO,KAAKwmO,kBAAkB7rL,GACjCxlB,QAAS,CACLG,OAAQC,GAAAA,GAAe4kF,cACvB/kF,KAAMC,GAAAA,EAASqa,OACf7a,QAASC,GAAAA,GAAiB6a,iBAK9C,CAEUw9L,iCAAAA,CAAkCxyL,GACxC,MAAMwuL,EAAcnpO,KAAKomO,kBAAkBzrL,GACrCgvF,EAAQj6C,GAAAA,EAAW0lI,kBAAkB,QAAS+T,GACpD,IAAIx/F,EACA,MAAO,CACHA,MAAO,KACPsuF,qBAAsB,MAI9B,MAAMqV,EAAoB59I,GAAAA,EAAWC,YAAY,oBAAqBw5I,GAGtE,MAAO,CACHx/F,MAAOA,EACPsuF,qBAJyBvoI,GAAAA,EAAWwlI,mBAAmB,yBAA0BoY,GAOzF,CAEA,oBAAgBpE,GACZlpO,KAAKimO,iCACCjmO,KAAKwL,SAASkE,KAAKo6H,WAC7B,CAEA,0BAAgBujG,CAAqBhnO,GACjCrG,KAAKimO,2BAEF5/N,EAAQsjI,aACD3pI,KAAKwL,SAASkE,KAAKy7H,aAAa,CAClCxB,MAAOtjI,EAAQsjI,MACfsuF,qBAAsB5xN,EAAQ4xN,mCAErBj4N,KAAKwL,SAASi0D,eAAe4sJ,mCAE1CrsN,KAAKwL,SAAS2L,OAAOxI,MAAM,0FAEnC,CAGA,wBAAgB+6N,CAAmBrjO,GAC/BrG,KAAKimO,uCACQjmO,KAAKwL,SAASouF,aAAaY,sBAAsB,CAC1DrlE,SAAOjwB,EAAAA,EAAAA,GAAA,CACHowB,OAAQC,GAAAA,GAAe4kF,cACvB/kF,KAAMC,GAAAA,EAAS/0B,QACZ+F,EAAQ8uB,SAEf2kE,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3CvrB,uBAAqBvwB,EAAAA,EAAAA,GAAA,CACjBowB,OAAQwqC,GAAAA,GAAwBiqJ,MAChCwjB,0BAA0B,EAC1BjxI,SAAUC,GAAAA,GAAsBu3H,MAC7BztN,EAAQovB,wBAGvB,EC1KG,MAAM+3M,WAAoDhI,GAE7D,sCAAMiI,GACF,UAAUztO,KAAKwL,SAASkE,KAAKi7H,qBAAqB,oBAC9C,OAGJ,MAAM1wE,QAAYj6D,KAAKwoO,oBACjBxoO,KAAKgnO,wBAAwB/sK,EACvC,CAEA,iBAAgBuuK,GACZ,aAAcxoO,KAAKwL,SAAS62I,MAAMqrF,uBACtC,CAEU1H,cAAAA,GACN,OAAOtvI,GAAAA,EAAa01H,eACxB,CAEU2a,wBAAAA,GACN,MAAO,CACH1vI,SAAU,IACVxpB,UAAW,IACXhrD,OAAQwkE,GAAAA,EAAsB4iJ,UAC9B3uM,gBAAiBt7B,KAAK2tO,iBACtB5J,SAAU,OACV15E,gBAAiBrqJ,KAAKgmO,iBACtBX,qBAAqBvlO,EAAAA,GAAAA,IAAQ,+CAErC,CAEA,oBAAc6tO,GACV,OAAO,CACX,CAEA,4BAAgB7H,CAAuBnrL,GACnC,MAAMouL,EAAW/oO,KAAKqmO,iBAAiB1rL,GACvC,GAAIouL,EAIJ,OAAQA,GACJ,IAAK,UACD/oO,KAAKimO,2BACL,MACJ,IAAK,UACKjmO,KAAKsnO,aAAa,CACpB1nN,MAAO5f,KAAKymO,qBAAqB9rL,GACjC0sL,SAAUrnO,KAAKwmO,kBAAkB7rL,GACjCxlB,QAAS,CACLG,OAAQC,GAAAA,GAAeykF,gBACvB5kF,KAAMC,GAAAA,EAASqa,UAGvB,MACJ,IAAK,UACK1vC,KAAKmnO,kBAAkB,CACzBE,SAAUrnO,KAAKwmO,kBAAkB7rL,GACjCxlB,QAAS,CACLG,OAAQC,GAAAA,GAAeykF,gBACvB5kF,KAAMC,GAAAA,EAASqa,OACf7a,QAASC,GAAAA,GAAiB6a,iBAK9C,ECvEG,MAAMi+L,WAAsCrK,GAC/C,oBAAM7jK,CAAer5D,GACdrG,KAAKwL,SAASuP,6BAA6BkxK,cAAchxK,sBAC3Cjb,KAAKwL,SAASouF,aAAaY,sBAAsB,CAC1DV,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3C7rB,QAAS,CACLC,KAAM/uB,EAAQs5D,YACd9qC,QAASxuB,EAAQu5D,eACjBtqC,OAAQC,GAAAA,GAAeC,cAE3BC,sBAAuB,CACnB6mE,SAAUC,GAAAA,GAAsBu3H,KAChCx+L,OAAQjvB,EAAQivB,sBAKXt1B,KAAKwL,SAASi0D,eAAe26B,cAAc,CACpDx6E,MAAOy6E,GAAAA,GAAawzI,mBAIhC,EC1BG,MAAMC,WAAqCvK,GAC9C,mBAAMvoI,GACF,MAAM/gC,QAAYj6D,KAAKwoO,cACvBxoO,KAAKwjO,cAAcvpK,EACvB,CAEA,iBAAgBuuK,GACZ,mBAAoBxoO,KAAKwL,SAAS62I,MAAM0rF,iBAC5C,ECGJ,MAAMC,GACc,IADdA,GAEmB,KAFnBA,GAGO,IAHPA,GAIK,KAJLA,GAKY,KALZA,GAM4B,KAI3B,MAAMC,WAAgCzI,GAEzC,kBAAM9P,CAAarvN,GAA8C,IAADwyD,EAC5D,IAAIxyD,EAAQsvN,WACR,MAAM,IAAI1lJ,MAAM,8CAGpB,MAAMhW,EAAkE,QAA/DpB,EAAG74D,KAAKwL,SAASye,cAAc6P,gBAAgBs1F,YAAY9U,YAAI,IAAAzhD,OAAA,EAA5DA,EAA8Dq1K,YAC1E,IAAIj0K,EACA,MAAM,IAAIgW,MAAM,0CAGdjwE,KAAKwL,SAASorB,SAASjc,KAAKs/C,EAAI+e,QAAQ,eAAgB3yE,EAAQsvN,YAC1E,CAEA,2BAAMwY,GACF,MAAMl0K,QAAYj6D,KAAKwoO,cACvB,OAAOxoO,KAAKinO,0BAA0BhtK,EAC1C,CACA,iBAAgBuuK,GACZ,MAAM7S,EAAa51L,SAAS//B,KAAKwL,SAASorB,SAASE,WAAW+xG,YAAYC,cAAc,eACxF,mBAAoB9oI,KAAKwL,SAAS62I,MAAM+rF,eAAe,CACnDC,oBAAqB1Y,GAE7B,CAEUqQ,cAAAA,GACN,OAAOtvI,GAAAA,EAAa43I,IACxB,CAEUvH,wBAAAA,GACN,MAAO,CACH1vI,SAAU,KACVxpB,UAAW,IACXhrD,OAAQwkE,GAAAA,EAAsB4iJ,UAC9B3uM,iBAAiB,EACjByoM,SAAU,OACV15E,gBAAiBrqJ,KAAKgmO,iBACtBX,qBAAqBvlO,EAAAA,GAAAA,IAAQ,mCAErC,CAEA,4BAAgBgmO,CAAuBnrL,GACnC,MAAMouL,EAAW/oO,KAAKqmO,iBAAiB1rL,GACvC,GAAIouL,EAIJ,OAAQA,GACJ,KAAKiF,SACKhuO,KAAKuuO,uBAAuB7+I,GAAAA,EAAW0lI,kBAAkB,MAAOp1N,KAAKomO,kBAAkBzrL,KAC7F,MACJ,KAAKqzL,SACKhuO,KAAKsnO,aAAa,CACpB1nN,MAAO5f,KAAKymO,qBAAqB9rL,GACjC0sL,SAAUrnO,KAAKwmO,kBAAkB7rL,GACjCxlB,QAAS,CACLG,OAAQC,GAAAA,GAAe+kF,KACvBllF,KAAMC,GAAAA,EAAS/0B,UAGvB,MACJ,KAAK0tO,SACKhuO,KAAKyoF,cAAciH,GAAAA,EAAWwlI,mBAAmB,SAAUl1N,KAAKomO,kBAAkBzrL,KACxF,MACJ,KAAKqzL,SACKhuO,KAAK0oF,cAAcgH,GAAAA,EAAWwlI,mBAAmB,SAAUl1N,KAAKomO,kBAAkBzrL,KACxF,MACJ,KAAKqzL,SACKhuO,KAAKoqO,aACX,MACJ,KAAK4D,UACMhuO,KAAKwL,SAASyyJ,WAAWuwE,2BAI5C,CAEA,4BAAgBD,CAAuBt0K,SAC7Bj6D,KAAKwL,SAASorB,SAASiuF,SAAS5qD,EAC1C,CAEA,mBAAgBwuB,CAAc1zE,GAC1B,MAAM9B,QAAiBjT,KAAKwL,SAAS2P,MAAM8mH,YAAYltH,GACnD9B,QAKEA,EAASO,KAAK,CAChBL,YAAY,IALZnT,KAAKwL,SAAS2L,OAAOxI,MAAM,oCAAD/O,OAAqCmV,EAAQ,oDAO/E,CAEA,mBAAgB2zE,CAAc3zE,GAC1B,MAAM9B,QAAiBjT,KAAKwL,SAAS2P,MAAM8mH,YAAYltH,GACnD9B,QAKEA,EAASO,KAAK,CAChBL,YAAY,IALZnT,KAAKwL,SAAS2L,OAAOxI,MAAM,oCAAD/O,OAAqCmV,EAAQ,oDAO/E,CAEA,gBAAgBq1N,SACNpqO,KAAKwL,SAASszB,gBAAgB2rM,WACxC,ECjIG,MAAMgE,WAAgClL,GACzC,kBAAMmL,SACI1uO,KAAKwL,SAASszB,gBAAgBm+D,aAAa,CAC7CF,OAAQ,YAEhB,ECaJ,MAAM4xI,GACa,MADbA,GAEO,UAFPA,GAGS,KAIR,MAAeC,WAAmDpJ,GAAuFzyN,WAAAA,GAAA,SAAA9S,WAAA,KAEpJ4uO,qBAAgDvnJ,GAAAA,GAAwBwnJ,iBAAiB,KACzFC,sBAAqD,IAAK,CAKlE,uBAAMC,CAAkB3oO,GACpB,aAAarG,KAAKivO,uBAAuB5oO,EAC7C,CAEA,4BAAgB6oO,CAAuBr7B,GACnC,IAAI7zM,KAAKwL,SAASkE,KAAKC,aACnB,MAAO,GAGX,IAGI,aAFuB3P,KAAKwL,SAASonH,IAAIyY,eAAeu7E,kBAAkB/S,IAE1D4tB,eAAejwF,MAAK,CAAC29F,EAAKC,KAAS,IAADC,EAAAC,EAG9C,OAF8B,QAAfD,EAAGF,EAAII,gBAAQ,IAAAF,EAAAA,EAAI,WACJ,QAAfC,EAAGF,EAAIG,gBAAQ,IAAAD,EAAAA,EAAI,SACN,GAEpC,CAAE,MAAO5gO,GAEL,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,0CAAD/O,OAA2CI,KAAKwL,SAASkE,KAAKszE,KAAOt0E,GACxF,EACX,CAEJ,CAEA,4BAAgBugO,CAAuB5oO,EAAoBmpO,GAEvD,MAAMC,QAAuBzvO,KAAKkvO,uBAAuBlvO,KAAK0vO,gCAE9D,OAA6B,IAA1BD,EAAevvO,OACPonF,GAAAA,GAAwBq6I,oBAGhC8N,EAAerqE,MAAKuqE,GAAMA,EAAGC,MAA4B,OAArBJ,QAAqB,IAArBA,OAAqB,EAArBA,EAAuBI,MAEnDtoJ,GAAAA,GAAwBwnJ,wBAG7B9uO,KAAK6vO,mBAAmBJ,EAAe,GAAIppO,GAE9CrG,KAAK6uO,uBAAyBvnJ,GAAAA,GAAwBq6I,oBAC9C3hO,KAAK6uO,qBAGT7uO,KAAKivO,uBAAuB5oO,EAASopO,EAAe,IAC/D,CAEUK,6CAAAA,CAA8CC,GACpD,IAAIC,EAA8D,CAAC,EAOnE,OANGD,EAAkBE,WAAazoJ,GAAAA,GAAwB0oJ,2BACtDF,EAAe10M,iBAAkB,EACjC00M,EAAe34I,SAAW,IAC1B24I,EAAeniK,UAAY,MAG/B3oE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOlF,KAAK+mO,4BACLiJ,EAEX,CAEA,wBAAgBH,CAAmBE,EAAsC1pO,GACrErG,KAAK6uO,qBAAuBvnJ,GAAAA,GAAwBwnJ,iBACpD9uO,KAAK+uO,sBAAwBgB,EAC7B,MAAM91K,QAAYj6D,KAAKwoO,YAAYuH,EAAmB1pO,SAChDrG,KAAKgnO,wBAAwB/sK,EAAKj6D,KAAK8vO,8CAA8CC,GAC/F,CAEA,oBAAcpC,GACV,OAAO,CACX,CAEU5G,wBAAAA,GACN,MAAO,CACH1vI,SAAU,KACVxpB,UAAW,IACXhrD,OAAQwkE,GAAAA,EAAsB4lJ,cAC9BlJ,SAAU,OACV15E,gBAAiBrqJ,KAAKgmO,iBACtB1qM,gBAAiBt7B,KAAK2tO,iBAE9B,CAEA,4BAAgB7H,CAAuBnrL,GACnC,MAAMouL,EAAW/oO,KAAKqmO,iBAAiB1rL,GAEvC,IAAIouL,EACA,OAGJ,MAAMoH,EAAUnwO,KAAKomO,kBAAkBzrL,GAEvC,OAAQouL,EAAS/oN,eACb,KAAK2uN,GACD,MAAMx5M,EAAUu6D,GAAAA,EAAWC,YAAY,UAAWwgJ,GAC5C16M,EAAwBi6D,GAAAA,EAAWC,YAAY,wBAAyBwgJ,SAExEnwO,KAAK0pO,mBAAmB,CAACv0M,QAASA,EAASM,sBAAuBA,IACxE,MACJ,KAAKk5M,GACD3uO,KAAKimO,uCACQjmO,KAAKwL,SAASi0D,eAAe26B,cAAc,CACpDx6E,MAAO5f,KAAK2mO,uBAAuBhsL,KAEvC,MACJ,KAAKg0L,SACK3uO,KAAKowO,WAAW1gJ,GAAAA,EAAW0lI,kBAAkB,QAAS+a,IAGxE,CAEA,wBAAgBzG,CAAmBrjO,GAC/BrG,KAAKimO,uCACQjmO,KAAKwL,SAASouF,aAAaY,sBAAsB,CAC1DrlE,SAAOjwB,EAAAA,EAAAA,GAAA,CACHowB,OAAQC,GAAAA,GAAe4kF,cACvB/kF,KAAMC,GAAAA,EAAS/0B,QACZ+F,EAAQ8uB,SAEf2kE,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3CvrB,uBAAqBvwB,EAAAA,EAAAA,GAAA,CACjBowB,OAAQwqC,GAAAA,GAAwBiqJ,MAChCwjB,0BAA0B,EAC1BjxI,SAAUC,GAAAA,GAAsBu3H,MAC7BztN,EAAQovB,wBAGvB,CAEA,gBAAgB26M,CAAWzmG,GACpBA,IAEC3pI,KAAK6uO,qBAAuBvnJ,GAAAA,GAAwBq6I,qBAExD3hO,KAAKimO,0BAET,EC3KG,IAAKoK,IAmCX,SAnCWA,GAAAA,EAAAA,EAAqB,qBAArBA,EAAAA,EAAqB,gBAArBA,EAAAA,EAAqB,sBAmChC,CAnCWA,KAAAA,GAAqB,KCU1B,MAAMC,WAAgD1B,GAC/Cc,4BAAAA,GACN,MAAO,CACHa,UAAWjf,GAAAA,GAAmB9c,iBAC9Bg8B,YAAaH,GAAsBI,QACnCC,WAAY,EAEpB,CAEU1K,cAAAA,GACN,OAAOtvI,GAAAA,EAAai6I,WACxB,CAEA,iBAAgBnI,CAAYuH,GACxB,mBAAoB/vO,KAAKwL,SAAS62I,MAAMuuF,iBAAiB,CACrDC,oCAAqCvf,GAAAA,GAAmB9c,iBACxDg8B,YAAaT,EAAkBe,YAC/BC,cAAehB,EAAkBiB,eAEzC,CAEUjK,wBAAAA,GACN,OAAA7hO,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOkT,MAAM2uN,4BAA0B,IACnC1B,qBAAqBvlO,EAAAA,GAAAA,IAAQ,sDAErC,EC3BG,MAAMmxO,WAA2DrC,GAC1Dc,4BAAAA,GACN,MAAO,CACHa,UAAWjf,GAAAA,GAAmBzc,qCAC9B27B,YAAaH,GAAsBI,QACnCC,WAAY,EAEpB,CAEU1K,cAAAA,GACN,OAAOtvI,GAAAA,EAAai6I,WACxB,CAEA,iBAAgBnI,CAAYuH,GACxB,mBAAoB/vO,KAAKwL,SAAS62I,MAAMuuF,iBAAiB,CACrDC,oCAAqCvf,GAAAA,GAAmBzc,qCACxD27B,YAAaT,EAAkBe,YAC/BC,cAAehB,EAAkBiB,eAEzC,CAEUjK,wBAAAA,GACN,OAAA7hO,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOkT,MAAM2uN,4BAA0B,IACnC1B,qBAAqBvlO,EAAAA,GAAAA,IAAQ,kEAErC,EClBG,MAAMoxO,WAAqDtC,GAE9D,uBAAMI,CAAkB3oO,GACpB,GAAU,OAAPA,QAAO,IAAPA,IAAAA,EAASsjI,MAMR,OAAOvxH,MAAM42N,kBAAkB3oO,GANhB,CACf,MAAM4zD,cAAmBj6D,KAAKwL,SAAS62I,MAAM8uF,kBAAkB,CAC3DxnG,MAAc,OAAPtjI,QAAO,IAAPA,OAAO,EAAPA,EAASsjI,cAEd3pI,KAAKgnO,wBAAwB/sK,EACvC,CAIJ,CAEUy1K,4BAAAA,GACN,MAAO,CACHc,YAAaH,GAAsBe,KACnCV,WAAY,EAEpB,CAEU1K,cAAAA,GACN,OAAOtvI,GAAAA,EAAa26I,YACxB,CAEA,iBAAgB7I,CAAYuH,EAAsC1pO,GAC9D,mBAAoBrG,KAAKwL,SAAS62I,MAAM8uF,kBAAkB,CACtDxnG,MAAc,OAAPtjI,QAAO,IAAPA,OAAO,EAAPA,EAASsjI,OAExB,CAEA,4BAAgBm8F,CAAuBnrL,GACnC,MAAMouL,EAAW/oO,KAAKqmO,iBAAiB1rL,GAEvC,GAAIouL,EAAJ,CAIA,GACS,MADDA,EAAS/oN,oBAEHhgB,KAAKmnO,kBAAkB,CACzBE,SAAUrnO,KAAKwmO,kBAAkB7rL,GACjCxlB,QAAS,CACLG,OAAQC,GAAAA,GAAe2kF,YACvB9kF,KAAMC,GAAAA,EAAS43M,cACfp4M,QAASC,GAAAA,GAAiB6a,4BAK5Bv3B,MAAM0tN,uBAAuBnrL,GAI3C,OAAOviC,MAAM0tN,uBAAuBnrL,EAlBpC,CAmBJ,CAGUosL,wBAAAA,GACN,OAAA7hO,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOkT,MAAM2uN,4BAA0B,IACnC1B,qBAAqBvlO,EAAAA,GAAAA,IAAQ,4CAErC,ECzBG,MAAMwxO,GACTv+N,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,CAE/B,CACA,gBAAIyuG,GACA,OAAO,IAAIguH,GAAgCjoO,KAAKwL,SACpD,CAEA,aAAIuuG,GACA,OAAO,IAAI+vH,GAA6B9pO,KAAKwL,SACjD,CAEA,WAAI6jC,GACA,OAAO,IAAIs7L,GAA2B3qO,KAAKwL,SAC/C,CAEA,OAAIsuG,GACA,OAAO,IAAIuxH,GAAuBrrO,KAAKwL,SAC3C,CAEA,kBAAI+lO,GACA,OAAO,IAAIlF,GAAkCrsO,KAAKwL,SACtD,CAEA,kBAAIgmO,GACA,OAAO,IAAI/E,GAAkCzsO,KAAKwL,SACtD,CAEA,gBAAIimO,GACA,OAAO,IAAI7E,GAAgC5sO,KAAKwL,SACpD,CAEA,6BAAIkmO,GACA,OAAO,IAAIR,GAA6ClxO,KAAKwL,SACjE,CAEA,wBAAImmO,GACA,OAAO,IAAIrB,GAAwCtwO,KAAKwL,SAC5D,CAEA,mCAAIomO,GACA,OAAO,IAAIX,GAAmDjxO,KAAKwL,SACvE,CAEA,4BAAIqmO,GACA,OAAO,IAAIrE,GAA4CxtO,KAAKwL,SAChE,CACA,cAAIsmO,GACA,OAAO,IAAIlE,GAA8B5tO,KAAKwL,SAClD,CAEA,aAAIumO,GACA,OAAO,IAAIjE,GAA6B9tO,KAAKwL,SACjD,CAEA,QAAI8uG,GACA,OAAO,IAAI2zH,GAAwBjuO,KAAKwL,SAC5C,CAEA,QAAIwmO,GACA,OAAO,IAAIvD,GAAwBzuO,KAAKwL,SAC5C,E,+BC7GG,MAAMymO,GACTl/N,WAAAA,CAA6BkF,EACAzM,EACAwjC,GAAiD,KAFjD/2B,OAAAA,EAAc,KACdzM,SAAAA,EAAyB,KACzBwjC,YAAAA,CAC7B,CAEApT,aAAAA,GACI,IACItB,EADAtR,EAAW,sBAEZhpB,KAAKgvC,cACJhmB,EAAYhpB,KAAKgvC,YAAY6jD,WAAalL,GAAAA,EAAauL,KAAO,6BAA+B,wBAC7F54D,EAAQt6B,KAAKgvC,YAAY/7B,SAAS8B,SAAW,IAAM/U,KAAKgvC,YAAY/7B,SAASxK,MAAMuwE,QAAQ,KAAM,KAGrGh5E,KAAKwL,SAASqd,UAAU+S,cAAc5S,EAAUhpB,KAAKiY,OAAQqiB,EACjE,ECPJ,IACaznB,IADZtT,EAAAA,GAAAA,IAAQuT,GAAT,cACmCtT,GAAAA,EAA2DuT,WAAAA,GAAA,SAAA9S,WAAA,KAElFq1D,SAAW51C,UACZ1f,KAAKwL,SAASoL,WAAW+xN,sCACxB,IAAIsJ,GAAoC,cAAejyO,KAAKwL,SAAUxL,KAAKlC,MAAMkxC,aAAapT,gBAC9F57B,KAAKwL,SAASkxF,gBAAgBw1I,0BAE9B,IAAID,GAAoC,QAASjyO,KAAKwL,SAAUxL,KAAKlC,MAAMkxC,aAAapT,sBAClF57B,KAAKwL,SAASkE,KAAKo6H,UAAU,CAC/Bj2C,GAAI,UAEZ,CACH,CAGDp0F,MAAAA,GAAU,IAAD0yO,EAEL,OACIzyO,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACHM,OAAyB,QAAnBmrO,EAAEnyO,KAAKlC,MAAMkJ,cAAM,IAAAmrO,EAAAA,EAAI,YAC7BhrO,aAAaunC,EAAAA,GAAAA,GAAqB1uC,KAAKwL,UACvCnE,QAASrH,KAAKs1D,SACd31D,WAAWG,EAAAA,GAAAA,IAAQ,wBACnByI,SAAUvI,KAAKlC,MAAM6gB,OAAOpW,SAASxI,SAEnCC,KAAKwL,SAASoK,YAAYC,UAAU,UAGlD,KACH/C,GACM,MAAMs/N,IAA6B/6N,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,W,OCpCJ,IAQ7DA,IADLtT,EAAAA,GAAAA,IAAQuT,GAAT,cAC4BtT,GAAAA,EAA+DuT,WAAAA,GAAA,SAAA9S,WAAA,KAC/Eq1D,SAAW51C,UACf,IAAIuyN,GAAoC,WAAYjyO,KAAKwL,SAAUxL,KAAKlC,MAAMkxC,aAAapT,4BAC9E57B,KAAKwL,SAASi0D,eAAei0B,eAAgB,CACtDv+D,QAAS,CACLC,KAAMC,GAAAA,EAASqa,OACfpa,OAAQC,GAAAA,GAAeC,aACvBX,QAASC,GAAAA,GAAiB8+D,gBAE9BnB,gBAAiB,CAACoB,GAAI,UACxB,CACL,CAEDp0F,MAAAA,GAAU,IAAD0yO,EAAAE,EACL,OAAGryO,KAAKlC,MAAMu1F,gBAAgBi/I,aAAetyO,KAAKwL,SAASye,cAAcC,KAAK+kC,gBAAgBsjL,mBACnF,MAGP7yO,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACHM,OAAyB,QAAnBmrO,EAAEnyO,KAAKlC,MAAMkJ,cAAM,IAAAmrO,EAAAA,EAAI,UAC7BhrO,aAAaunC,EAAAA,GAAAA,GAAqB1uC,KAAKwL,UACvCnE,QAASrH,KAAKs1D,SACd31D,WAAWG,EAAAA,GAAAA,IAAQ,sBACnByI,SAAUvI,KAAKlC,MAAM6gB,OAAOpW,SAASxI,SAEpB,QAFoBsyO,EAEnCryO,KAAKlC,MAAMgE,YAAI,IAAAuwO,EAAAA,EAAIryO,KAAKwL,SAASoK,YAAYC,UAAU,YAGrE,KACH/C,GAEM,MAAM0/N,IAAgCn7N,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,kBAAmB,W,OC/C7F,MAaa4/N,GAbWh1O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iLAK9Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,IAG7B/gD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,I,OCRlD,MAYas0O,GAZsBj1O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qJAIlCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,SAAS,IAIjCrH,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOu1B,cAAc,I,OCRrD,MAOaq1M,GAPwBl1O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mGAEpCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO0C,YAAY,ICiB1C,MAAMmoO,WAAuBpzO,GAAAA,EAA4CuT,WAAAA,GAAA,SAAA9S,WAAA,KAYpE4yO,qBAAuBnzN,UAC3B1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,eAAgB,QAC/D/lC,KAAKlC,MAAMk6B,cAAcC,oBACZj4B,KAAKwL,SAASouF,aAAak5I,eAAe,CACnDh5I,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3C7rB,QAAS,CACLG,OAAQC,GAAAA,GAAeglF,YACvBnlF,KAAMC,GAAAA,EAAS/0B,SAErB,EACL,KAEOyyO,gBAAkB,IACpB/yO,KAAKwL,SAAS+9B,UAAUtuB,UACjB,MAITvb,EAAAA,GAAAA,KAACizO,GAAqB,CAACtrO,QAASrH,KAAK6yO,qBAAsBlzO,WAAWG,EAAAA,GAAAA,IAAQ,sBAAsBC,SAC/FC,KAAKwL,SAASoK,YAAYC,UAAU,uBAG3C,CAhCFkG,iBAAAA,GACI3D,MAAM2D,oBACN/b,KAAKwL,SAASqd,UAAUkd,uBAAuB,eAAgB,OACnE,CAEAzgB,oBAAAA,GACIlN,MAAMkN,uBACNtlB,KAAKwL,SAASqd,UAAUkd,uBAAuB,eAAgB,QACnE,CA0BQitM,uBAAAA,CAAwBC,EAAyBnpO,EAAeopO,GACpE,OAAKnuO,EAAAA,MAAMiP,QAAQlK,GAQZ,MANHtB,EAAAA,GAAAA,MAACkqO,GAAmB,CAAA3yO,SAAA,EAChBL,EAAAA,GAAAA,KAAA,OAAAK,SAAMC,KAAKwL,SAASoK,YAAYC,UAAUo9N,MAC1CvzO,EAAAA,GAAAA,KAAA,OAAKC,UAAWuzO,GAAc,GAAGnzO,SAAE+J,MAK/C,CAEArK,MAAAA,GACI,MAAM0zO,EAAqBpuO,EAAAA,MAAMkP,kBAAkBjU,KAAKlC,MAAMs1O,0BAAuBjzO,EAAYH,KAAKwL,SAASwJ,SAASC,YAAYjV,KAAKlC,MAAMs1O,qBAC/I,OACE5qO,EAAAA,GAAAA,MAACiqO,GAAQ,CAAC9yO,UAAW,oBAAoBI,SAAA,CACpCC,KAAKgzO,wBAAwB,yBAA0BhzO,KAAKwL,SAASkE,KAAKszE,KAC1EhjF,KAAKgzO,wBAAwB,0BAA2BhzO,KAAKlC,MAAMu1O,YACjErzO,KAAKgzO,wBAAwB,2BAA4BG,GAAoBrzO,EAAAA,GAAAA,IAAQ,oCACvFE,KAAKgzO,wBAAwB,6BAA8BhzO,KAAKlC,MAAMkvL,eACtEhtL,KAAK+yO,oBAGhB,E,OC9EG,MAaMO,GAb2B71O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8OAKrCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,I,OCL7C,MAMMm1O,GAN2B91O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iFCKrC41O,IAA+Bj0O,EAAAA,GAAAA,KAAS,KACjD,MAAMiM,GAAWqD,EAAAA,GAAAA,KACjB,OAAI9J,EAAAA,MAAM4oM,OAAOniM,EAASkE,KAAK83H,WACpB,MAIPh/H,EAAAA,GAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,GAAAA,KAAC4zO,GAAiB,CAAC3zO,WAAWG,EAAAA,GAAAA,IAAQ,uBAAuBC,SACxDyL,EAASoK,YAAYC,UAAU,uBAEpCnW,EAAAA,GAAAA,KAAC6zO,GAAiB,CAAC5zO,WAAWG,EAAAA,GAAAA,IAAQ,uBAAuBC,SACxDyL,EAASkE,KAAK83H,cAEjB,ICnBDisG,IAAmCj1O,EAAAA,GAAAA,GAAU,oC,OCAnD,MAAMk1O,GAA6Cj2O,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wCCMxD+1O,IAAmEp0O,EAAAA,GAAAA,KAAUzB,IACtF,MAAM0N,GAAWqD,EAAAA,GAAAA,KAEX6E,EAAY5V,EAAM6V,UACxB,IAAIw6D,EACAC,EAUJ,GARIrpE,EAAAA,MAAMiP,QAAQN,SAAoCvT,IAArBuT,EAAU4/D,aAA6CnzE,IAArBuT,EAAU6/D,QACzEpF,EAASrwE,EAAMmV,SAASk7D,OACxBC,EAAStwE,EAAMmV,SAASm7D,SAExBD,EAASz6D,EAAU4/D,OACnBlF,EAAS16D,EAAU6/D,SAGlBpF,IAAWC,EAEZ,YADA5iE,EAAS2L,OAAOk+G,KAAK,2CAADz1H,OAA4C9B,EAAMmV,SAAS8B,SAAQ,KAAAnV,OAAIuuE,EAAM,KAAAvuE,OAAIwuE,IAgBzG,OACI1uE,EAAAA,GAAAA,KAAC+zO,GAAgC,CAAC9zO,UAAU,wCAAuCI,UAC/EL,EAAAA,GAAAA,KAAA,QAAAK,SAESyL,EAASqI,OAAOC,UAAYhW,EAAM81O,aAhB7BzlK,KAEd3lE,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,CACKjC,EAAM81O,eAAgBl0O,EAAAA,GAAAA,KAACg0O,GAA0C,CAAA3zO,SAC7DyL,EAASoK,YAAYC,UAAU,aAEnCrK,EAASwJ,SAASC,YAAYk5D,GAAQ,MAW/B0lK,CAAa1lK,GACb3iE,EAASwJ,SAASk5D,gBAAgBC,EAAQC,MAGvB,IC1BpC,MAAM0lK,GACT/gO,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,CAC/B,CAEAyjC,uBAAAA,CAAwBnxC,GACpB,OACI4B,EAAAA,GAAAA,KAAC0yO,IAA0BltO,EAAAA,EAAAA,GAAA,GAAKpH,GAExC,CAEAixC,0BAAAA,CAA2BjxC,GACvB,OACI4B,EAAAA,GAAAA,KAAC8yO,IAA6BttO,EAAAA,EAAAA,GAAA,GAAKpH,GAE3C,CAEAkvC,2BAAAA,GACI,OAAO,IACX,CAEAF,8BAAAA,GACI,OAAQptC,EAAAA,GAAAA,KAACi5D,GAAAA,EAA2B,GACxC,CAEAjuC,wBAAAA,GACI,OAAQhrB,EAAAA,GAAAA,KAAC8zO,GAAkB,GAC/B,CAEA38N,yBAAAA,CAA0B/Y,GACtB,OACI4B,EAAAA,GAAAA,KAACi0O,IAAmBzuO,EAAAA,EAAAA,GAAA,GAAKpH,GAEjC,CAEUi2O,oBAAAA,GACN,OAAO/4M,QAAQC,QAAQ,CAAC,EAC5B,CAEAu+D,eAAAA,GACI,OAAOx5F,KAAK+zO,uBAAuBxyN,MAAKzjB,GAC7B,IAAIk9B,SAAcC,IACrBj7B,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAAiBt4B,EAAAA,GAAAA,KAACkzO,IAAc1tO,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACvDpH,GAAK,IACTkvL,cAAehtL,KAAKwL,SAAS63E,IAAIwB,UAAUu7D,aAC3CpoH,cAAeA,MACf,CACAvvB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,eAC3CkuL,4BAA4B,EAC5Bn7I,yBAAyB,EACzBQ,qBAAqB,EACrB9L,oBAAoB,EACpB8H,SAAUA,IAAMnqB,KAClB,KAKd,ECzEG,MAAM+4M,GACTjhO,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,CAC/B,CAEAyoO,eAAAA,CAAgBn5N,EAAkBw+E,EAAqCqF,GACnE,OAAO,IACX,CAEAu1I,6BAAAA,CAA8Bp5N,EAAkBw+E,EAAqCqF,GACjF,OAAO,IACX,CACAw1I,uBAAAA,CAAwBr5N,EAAkBw+E,EAAqCqF,GAC3E,OAAO,IACX,CAEAy1I,sBAAAA,CAAuBt5N,EAAkBw+E,EAAqCqF,GAC1E,OAAO,IACX,CAEA01I,eAAAA,CAAgBv5N,EAAkBw+E,EAAqCqF,GACnE,OAAO,IACX,CAEA21I,oBAAAA,CAAqBx5N,EAAkBw+E,EAAqCqF,GACxE,OAAO,IACX,CAEAigH,8BAAAA,CAA+B9jM,EAAkBw+E,EAAqCqF,GAClF,OAAO,IACX,EClCG,IAAK41I,IAGX,SAHWA,GAAAA,EAAAA,EAAwC,uBAAxCA,EAAAA,EAAwC,iBAGnD,CAHWA,KAAAA,GAAwC,KCK7C,MAAMC,GACT,kBAAMv3I,CAAa52F,GACf,MAAO,CACHouO,iBAAkBF,GAAyCG,SAEnE,ECQG,MAAMC,GACT5hO,WAAAA,CAA+B6hO,EACXC,EACNrpO,GAAoC,KAFnBopO,iBAAAA,EAAmC,KAC9CC,eAAAA,EAAsB,KAC5BrpO,SAAAA,CACd,CACA,QAAIua,GACA,OAAO+uN,GAAAA,GAAiB90O,KAAK60O,eACjC,CAEA,wBAAIx7K,GACA,OAAOr5D,KAAKwL,SAAS63E,IAAIwB,UAAUy7D,eACvC,CAEAy0F,wCAAAA,GACI,OAAO/0O,KAAK40O,iBAAiBG,0CACjC,CAEAC,4BAAAA,GACI,OAAOh1O,KAAK40O,iBAAiBI,8BACjC,CAEA,yBAAMC,SACIj1O,KAAK40O,iBAAiBM,2BAA2B,EAC3D,CAEAC,qBAAAA,CAAsBC,GAClBp1O,KAAK40O,iBAAiBO,sBAAsBC,EAChD,CAEA,6BAAIC,GACA,OAAOr1O,KAAK40O,iBAAiBS,2BACjC,CAEAC,UAAAA,GACI,OAAOt1O,KAAKwL,SAASkE,KAAK06H,QAC9B,CAEA,iBAAI3qE,GACA,OAAO,IAAI6xK,GAA6BtxO,KAAKwL,SACjD,CAEA,cAAI+F,GACA,OAAO,IAAIuiO,GAA2B9zO,KAAKwL,SAC/C,CAEA,aAAI24D,GACA,OAAO,IAAI6vK,GAA8Bh0O,KAAKwL,SAClD,CAEA,uBAAI+pO,GACA,OAAO,IAAIf,EACf,CAEA,6BAAIgB,GACA,OAAOx1O,KAAK40O,iBAAiBY,2BACjC,CAEA/nJ,mBAAAA,GACI,OAAOztF,KAAK40O,iBAAiBnnJ,qBACjC,CAEA,4BAAIgoJ,GACA,OAAO,CACX,CAEAzsG,yCAAAA,CAA0C0sG,GACtC,OAAO,IACX,CAEAn6I,sBAAAA,GAEA,CAEA,6BAAMo6I,GAEN,CAEA,2BAAIC,GACA,OAAO,CACX,CAEAC,0BAAAA,CAA2B5iO,GACvB,OAAOjT,KAAKwL,SAAS6U,YAAYq4L,oBAAoBzlM,EACzD,CAEA6iO,0BAAAA,CAA2B7iO,GACvB,OAAO,CACX,E,8BCtGG,MAAM8iO,WAAoCjC,GAC7C9mM,2BAAAA,GACI,OACIttC,EAAAA,GAAAA,KAAC89D,GAAAA,EAAwC,CAACt1D,UAAWu1G,GAAAA,EAAwCu4H,UAErG,ECRG,MAAMC,GAA+Bx4O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8IAKzCE,GAASA,EAAMI,MAAM6J,OAAOu1B,iB,OCLlC,MAAM44M,GAAqCz4O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qK,OCArD,MAAMu4O,GAAqC14O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qK,OCArD,MAAMw4O,GAAyC34O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wEAC1DE,GAASA,EAAMI,MAAM6C,KAAKC,QAAQywB,OAC3B9yB,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW0S,SAAS,I,OCF7C,MAAMwlO,GAAyC54O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4FACnDE,GAASA,EAAMI,MAAM6J,OAAO0C,eAGnC3M,GAASA,EAAMI,MAAM6C,KAAKC,QAAQywB,O,OCJjC,MAAM6kN,GAAsC74O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8HCuBvDiV,IAAmEtT,EAAAA,GAAAA,KAAUzB,IAC/E,MAAM0N,GAAWqD,EAAAA,GAAAA,KAEX0nO,EAAgBpsO,QAAQrM,EAAMqwC,WAAWC,oBAEzCxS,EAAiB3jB,IACnBzM,EAASqd,UAAU+S,cAAc,wBAAyB3jB,EAAO,EAG/Du+N,EAAyBA,KAC3BhrO,EAASi7G,oBAAoByjG,mBAAmB,CAC5CpwH,sBAAuBh8F,EAAM2wN,sBAC7BhE,mBAAoBluG,GAAAA,GAAsBM,mCAC1CstG,WAAY,gBACd,EAGAssB,EAAc/2N,UAAa,IAADuuB,EAE5BrS,EAAc,cAEd46M,UAEyC,QAAzCvoM,EAAMnwC,EAAMqwC,WAAWC,0BAAkB,IAAAH,OAAA,EAAnCA,EAAqCqkD,UAAU,CACjDc,uBAAuB,KAG3Bt1F,EAAMk6B,cAAcC,OAAO,EAGzBy+M,EAAah3N,UAEXkc,EADD26M,EACe,mBAEA,qBAGlBC,IAEA14O,EAAMk6B,cAAcC,OAAO,EAIzB0+M,EAAuBA,KAErBj3O,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CAACM,OAAO,UAAUK,QAASqvO,EAAY/2O,WAAWG,EAAAA,GAAAA,IAAQ,iCAAiCC,SAC7FyL,EAASoK,YAAYC,UAAU,0CA6B5C,OACIrN,EAAAA,GAAAA,MAACytO,GAA4B,CAAAl2O,SAAA,EACzBL,EAAAA,GAAAA,KAACw2O,GAAkC,CAAAn2O,SAC9ByL,EAASoK,YAAYC,UAAU,uCAGpCnW,EAAAA,GAAAA,KAAC02O,GAAsC,CAAAr2O,SAClCyL,EAASoK,YAAYC,UAAU,+CAGpCnW,EAAAA,GAAAA,KAAC22O,GAAsC,CAAAt2O,SAfrB62O,MACtB,MAAMC,EAAcrrO,EAASsrO,aAAaC,oBAC1C,OAAOF,EAAYl8M,MAAMx7B,WAAWkgN,SAAS,EAAG,KAAO,KAAOw3B,EAAYn8M,QAAQv7B,WAAWkgN,SAAS,EAAG,KAAO,GAAG,EAc1Gu3B,MAGLl3O,EAAAA,GAAAA,KAAC02O,GAAsC,CAAAr2O,SAE/BjC,EAAMutN,cAAgB,EAChB7/M,EAASoK,YAAYC,UAAU,6CAC/BrK,EAASoK,YAAYC,UAAU,kDAI7CnW,EAAAA,GAAAA,KAAC22O,GAAsC,CAAAt2O,SAClCyL,EAASwJ,SAASC,YAAYoB,KAAKuoG,IAAI9gH,EAAMutN,kBAGlD3rN,EAAAA,GAAAA,KAACy2O,GAAkC,CAAAp2O,SAC9ByL,EAASoK,YAAYC,UAAU,6CAGpCnW,EAAAA,GAAAA,KAAC42O,GAAmC,CAAC32O,WAAWG,EAAAA,GAAAA,IAAQ,gCAAgCC,SArDzFw2O,GAEK/tO,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CAACM,OAAO,YAAYK,QAASovO,EAAY12O,SAC3CyL,EAASoK,YAAYC,UAAU,gBAGnC8gO,OAMNA,QA2CwB,IAI1BK,IAAqC3/N,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,eCjIxE,MAAMokO,WAA0BtC,GAErC,gBAAMW,SACEt1O,KAAKwL,SAASkxF,gBAAgBw6I,iCAAiC,CACnEC,SAAUz3N,SAAYtH,MAAMk9N,aAC5B8B,SAAU13N,aAEd,CAEA,cAAInO,GACF,OAAO,IAAIwkO,GAA4B/1O,KAAKwL,SAC9C,CAEA,6BAAMmqO,GAEJ,WADyB31O,KAAKwL,SAAS2iC,YACvBkpM,8BACd,OAGF,MAAM5oB,EAAwBzuN,KAAKwL,SAASu1C,MAAMC,UAElD,IAAIqqK,EAAe,EAEnB,IACEA,SAAsBrrN,KAAKwL,SAASonH,IAAIyY,eAAek7E,uBAAuB+wB,YAChF,CAAE,MAAO5oO,GACP1O,KAAKwL,SAAS2L,OAAOxI,MAAM,2CAA4CD,EACzE,CAEA,OAAO,IAAIssB,SAAcC,IAEvBj7B,KAAKwL,SAASi7G,oBAAoB8jG,eAAe,CAC/CC,iBAAkBtvG,GAAAA,GAAoBW,oBACtC4uG,mBAAoBluG,GAAAA,GAAsBM,mCAC1C/iB,sBAAuB20H,IAIzBzuN,KAAKwL,SAAS63E,IAAIqP,cAAcwoD,mBAEhCl7I,KAAKwL,SAAS4vB,OAAOgiB,WAAWplB,IAC5Bt4B,EAAAA,GAAAA,KAACs3O,GAAkC,CAACh/M,cAAeA,EACfy2L,sBAAuBA,EACvBpD,aAAcA,KAAkB,CACtE5iN,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,8BAC3CylB,iBAAiB,EACjBisK,mCAAmC,EACnC3+I,yBAAyB,EACzBQ,qBAAqB,EACrB/L,gBAAgB,EAChBwgB,0BAA0B,EAC1BzY,SAAUA,KACRplD,KAAKwL,SAAS63E,IAAIqP,cAAcyoD,qBAChClgH,GAAS,GAEX,GAEN,EC9DK,MAAMs8M,WAAgDtP,GACzD,sBAAME,CAAiB9hO,GACnB,UACUrG,KAAKwL,SAASuiN,2BAA2BC,2BACnD,CAAE,MAAOt/M,GAEL,YADA1O,KAAKwL,SAAS2L,OAAO+0E,MAAM,gCAAiCx9E,EAEhE,CAEA,aAAa0J,MAAM+vN,iBAAiB9hO,EACxC,ECLG,MAAMmxO,WAA6ClG,GACtD,gBAAIr3H,GACA,OAAO,IAAIs9H,GAAwCv3O,KAAKwL,SAC5D,E,OCTG,MAUMisO,GAV8Bh6O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,kKAGxCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,I,OCH7C,MAQMs5O,GAR8Bj6O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mGAGxCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,I,OCH7C,MAAMu5O,GAAkBl6O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4GAG5Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,ICKvCw5O,IAAwDr4O,EAAAA,GAAAA,KAAUzB,IAC3E,MAAM0N,GAAWqD,EAAAA,GAAAA,MACVioO,EAAce,IAAmBnqO,EAAAA,GAAAA,UAASlC,EAASsrO,aAAaC,qBAEvE,IAAKD,EACD,OAAO,KAGX,MAAMn8M,EAAQtkB,KAAK8jB,MAAM28M,EAAa56M,YAChCxB,EAAUrkB,KAAK8jB,MAAM28M,EAAap8M,SAexC,OAbA/sB,EAAAA,GAAAA,YAAU,KACN,MAAM6B,GAAkBC,EAAAA,EAAAA,KAAS,IAAMjE,EAASsrO,aAAaC,sBACxDA,KACmB,OAAZD,QAAY,IAAZA,OAAY,EAAZA,EAAc76M,iBAAoC,OAAnB86M,QAAmB,IAAnBA,OAAmB,EAAnBA,EAAqB96M,eACpD47M,EAAgBd,EACpB,IAGR,MAAO,KACHvnO,GAAiB,CACpB,GACF,CAAChE,EAASsrO,aAAaC,oBAAiC,OAAZD,QAAY,IAAZA,OAAY,EAAZA,EAAc76M,gBAGzDzzB,EAAAA,GAAAA,MAACmvO,GAAe,CAACh4O,UAAW7B,EAAM6B,UAAUI,SAAA,EACtCyL,EAASqI,OAAOmI,GAAGmgB,aACjB3zB,EAAAA,GAAAA,MAACivO,GAAoB,CAAA13O,SAAA,CAChByL,EAASoK,YAAYC,UAAU,uBAAuB,QAI/DnW,EAAAA,GAAAA,KAACg4O,GAAoB,CAAC/3O,WAAWG,EAAAA,GAAAA,IAAQ,oBAAoBC,SAAA,GAAAH,OACrD+6B,EAAMx7B,WAAWkgN,SAAS,EAAG,KAAI,OAAAz/M,OAAM86B,EAAQv7B,WAAWkgN,SAAS,EAAG,UAEhE,I,OC3CnB,MAAMy4B,GAA8Br6O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0LAIxCe,IAAA,IAAC,MAAET,GAAOS,EAAA,OAAKT,EAAMC,WAAWo3C,SAAS,IAKzCjzC,IAAA,IAAC,MAAEpE,GAAOoE,EAAA,OAAKpE,EAAMC,WAAWklB,SAAS,I,OCT/C,MAAM00N,GAAwBt6O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wNAClCe,IAAA,IAAC,MAAET,GAAOS,EAAA,OAAKT,EAAMC,WAAWo3C,SAAS,IAEfz3C,GAASA,EAAMI,MAAM6J,OAAOu1B,iBAGtDh7B,IAAA,IAAC,MAAEpE,GAAOoE,EAAA,OAAKpE,EAAMC,WAAWklB,SAAS,IAEhBvlB,GAASA,EAAMI,MAAM6J,OAAOu1B,iBCJrD06M,IAA8Cz4O,EAAAA,GAAAA,KAAS,KAE5DiJ,EAAAA,GAAAA,MAACsvO,GAA2B,CAAA/3O,SAAA,EACxBL,EAAAA,GAAAA,KAACq4O,GAAqB,CAAAh4O,UAClBL,EAAAA,GAAAA,KAAC8zO,GAAkB,OAEvB9zO,EAAAA,GAAAA,KAACk4O,GAAqB,SCCrBK,IAAgG14O,EAAAA,GAAAA,KAAUzB,IACnH,MAAOo6O,EAAoBC,IAAyBzqO,EAAAA,GAAAA,WAAS,GAY7D,OAVAC,EAAAA,GAAAA,YAAU,KACN,MAAMyqO,GAAUvvC,EAAAA,GAAAA,GAAgB,yCAAyC,KACrEsvC,GAAsB,EAAK,GAC5Br6O,EAAMu6O,8BAAgC78M,EAAAA,SAASC,YCnBG,IDqBrD,MAAO,KACHwO,aAAamuM,EAAQ,CACxB,GACF,CAACt6O,EAAMu6O,+BAENv6O,EAAMw6O,sBAAwBJ,GACtBx4O,EAAAA,GAAAA,KAACs4O,GAAiC,IACnCE,GACAx4O,EAAAA,GAAAA,KAACk4O,GAAqB,KAEtBl4O,EAAAA,GAAAA,KAAC8zO,GAAkB,GAC9B,IExBG,MAAM+E,WAAqCzE,GAG9C/kM,0BAAAA,CAA2BjxC,GACvB,MAAM06O,EAAoE,CAAC,EAI3E,OAHGx4O,KAAKwL,SAASoL,WAAW+xN,uCACxB6P,EAAc12O,KAAO9B,KAAKwL,SAASoK,YAAYC,UAAU,aAEtDuC,MAAM22B,4BAA0B7pC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAClCpH,GACA06O,GAEX,CAEA1rM,8BAAAA,GACI,OAAOptC,EAAAA,GAAAA,KAACi5D,GAAAA,EAA2B,GACvC,CAEAjuC,wBAAAA,GACI,OAAQhrB,EAAAA,GAAAA,KAACu4O,GAAsC,GACnD,E,mBCtBG,MAAMQ,IAAqCh7O,EAAAA,GAAAA,IAAOglE,GAAAA,EAAPhlE,CAAoCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,uICM/E,MAAM86O,WAA0Ch6I,GAAAA,EACnD3rF,WAAAA,CAAaumF,EACA9tF,EACAmzF,GACTvmF,MAAM,0BAA2BkhF,EAAc9tF,EAAUmzF,EAC7D,CAEUI,mBAAAA,CAAoB14F,GAC1B,OAAQ3G,EAAAA,GAAAA,KAAC+4O,GAAkC,CAAgB/1K,SAAU1iE,MAApBA,KAAK8a,IAC1D,ECZG,MAAM69N,WAAgC3E,GACzCC,eAAAA,CAAgBn5N,EAAkBw+E,EAAqCqF,GACnE,MACS,4BADD7jF,EAEO,IAAI49N,GAAkCp/I,EAAct5F,KAAKwL,SAAUmzF,GAEnEvmF,MAAM67N,gBAAgBn5N,EAAKw+E,EAAcqF,EAG5D,ECJG,MAAMi6I,WAA2BjE,GACpC,iBAAIl1K,GACA,OAAO,IAAI+3K,GAAqCx3O,KAAKwL,SACzD,CAEA,cAAI+F,GACA,OAAO,IAAIgnO,GAA6Bv4O,KAAKwL,SACjD,CAEA,aAAI24D,GACA,OAAO,IAAIw0K,GAAwB34O,KAAKwL,SAC5C,E,gBCbG,MAAMqtO,WAAoC/E,GAC7C7kM,uBAAAA,CAAwBnxC,GACpB,MAAM69B,EAA6B37B,KAAKwL,SAASoL,WAAW+xN,qCACrB,UACA,YACvC,OAAOvwN,MAAM62B,yBAAuB/pC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAC/BpH,GAAK,IACRkJ,OAAQ20B,IAEhB,CAEAoT,0BAAAA,CAA2BjxC,GACvB,MAAM69B,EAA6B37B,KAAKwL,SAASoL,WAAW+xN,qCAClB,YACA,UAC1C,OAAOvwN,MAAM22B,4BAA0B7pC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAClCpH,GAAK,IACRkJ,OAAQ20B,IAEhB,CAEAqR,2BAAAA,GACI,OACIttC,EAAAA,GAAAA,KAACk/D,GAAAA,EAAwC,CAACxG,iBAAiB,GAEnE,CAEA1tC,wBAAAA,GACI,OAAQhrB,EAAAA,GAAAA,KAACu4O,GAAsC,GACnD,ECtCG,MAAMa,WAA+C7Q,GACxD,0BAAca,GACV,OAAO,CACX,CAEA,sBAAMX,CAAiB9hO,GACnB,UACUrG,KAAKwL,SAASuiN,2BAA2BC,2BACnD,CAAE,MAAOt/M,GAEL,YADA1O,KAAKwL,SAAS2L,OAAO+0E,MAAM,gCAAiCx9E,EAEhE,CAEA,OAAO0J,MAAM+vN,iBAAiB9hO,EAClC,ECfG,MAAM0yO,WAA2DvL,GACpE,oBAAcG,GACV,OAAO,CACX,ECSG,MAAMqL,WAA4C1H,GACrD,gBAAIr3H,GACA,OAAO,IAAI6+H,GAAuC94O,KAAKwL,SAC3D,CAEA,4BAAIqmO,GACA,OAAO,IAAIkH,GAAmD/4O,KAAKwL,SACvE,ECXG,MAAMytO,WAA0BtE,GACnC,cAAIpjO,GACA,OAAO,IAAIsnO,GAA4B74O,KAAKwL,SAChD,CAEA,iBAAIi0D,GACA,OAAO,IAAIu5K,GAAoCh5O,KAAKwL,SACxD,ECfG,MAAM0tO,WAAmDjR,GAC5D,0BAAca,GACV,OAAO,CACX,ECHG,MAAMqQ,WAA+D3L,GACxE,oBAAcG,GACV,OAAO,CACX,ECHG,MAAMyL,WAAgElI,GACzE,oBAAcvD,GACV,OAAO,CACX,ECkBG,MAAM0L,WAAgD/H,GACzD,gBAAIr3H,GACA,OAAO,IAAIi/H,GAA2Cl5O,KAAKwL,SAC/D,CAEA,6BAAIkmO,GACA,OAAO,IAAI0H,GAAwDp5O,KAAKwL,SAC5E,CAEA,4BAAIqmO,GACA,OAAO,IAAIsH,GAAuDn5O,KAAKwL,SAC3E,E,+BC7BG,MAAM8tO,WAAwCxF,GACjDhnM,8BAAAA,GACI,OAAOptC,EAAAA,GAAAA,KAAC26D,GAAAA,EAAsC,CAACjC,iBAAiB,GACpE,CAEAprB,2BAAAA,GACI,OACIttC,EAAAA,GAAAA,KAAC2+D,GAAAA,EAAkC,GAE3C,CAEA3zC,wBAAAA,GACI,OAAQhrB,EAAAA,GAAAA,KAACu4O,GAAsC,GACnD,ECVG,MAAMsB,WAA8B5E,GACvC,iBAAIl1K,GACA,OAAO,IAAI45K,GAAwCr5O,KAAKwL,SAC5D,CAEA,cAAI+F,GACA,OAAO,IAAI+nO,GAAgCt5O,KAAKwL,SACpD,ECbG,MAAMguO,WAAiDvR,GAC1D,0BAAca,GACV,OAAO,CACX,ECGG,MAAM2Q,WAA8CnI,GACvD,gBAAIr3H,GACA,OAAO,IAAIu/H,GAAyCx5O,KAAKwL,SAC7D,ECTG,MAAMkuO,GAAwBj8O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mSACdE,GAASA,EAAMI,MAAMa,OAAOC,OAAO+7D,oBAAoB4+K,GAAGC,eAAez6O,aAOzFR,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAMT,EAAMC,WAAW0S,SAAS,I,OCRlD,MAAMgpO,GAA2Bp8O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8E,OCA3C,MAAMk8O,GAAuBr8O,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,yIAI9Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAMT,EAAMC,WAAW0S,SAAS,ICE5CkpO,IAAwBx6O,EAAAA,GAAAA,IACjC,cAA8BC,GAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KACjC24D,gBAAkBl5C,UACtB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,2BAChE/lC,KAAKwL,SAASszB,gBAAgBg8B,gBAAgB,CACvD,CACDr7D,MAAAA,GACI,OACI+I,EAAAA,GAAAA,MAACqxO,GAAwB,CAACl6O,WAAWG,EAAAA,GAAAA,IAAQ,mBAAoBuH,QAASrH,KAAK44D,gBAAgB74D,SAAA,EAC3FL,EAAAA,GAAAA,KAACo6O,GAAoB,CAAA/5O,SAChBC,KAAKwL,SAASoK,YAAYC,UAAU,6BAEzCnW,EAAAA,GAAAA,KAACg6O,GAAqB,MAGlC,I,OCpBD,MAAMM,GAAgCv8O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,kF,OCDhD,MAAMq8O,GAAyBx8O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sQACfE,GAASA,EAAMI,MAAMa,OAAOC,OAAO+7D,oBAAoB4+K,GAAGO,eAAe/6O,aAMzFR,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAMT,EAAMC,WAAW0S,SAAS,ICH5CspO,IAA+B56O,EAAAA,GAAAA,IACxC,cAA2CC,GAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KAC9C24D,gBAAkBl5C,UACtB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,gCAChE/lC,KAAKwL,SAASszB,gBAAgBC,uBAAuB,CAC9D,CACDt/B,MAAAA,GACI,OACIC,EAAAA,GAAAA,KAACu6O,GAAsB,CAACt6O,WAAWG,EAAAA,GAAAA,IAAQ,gCACbuH,QAASrH,KAAK44D,iBAEpD,ICVKwhL,IAAsC76O,EAAAA,GAAAA,IAAS,cAAuDC,GAAAA,EAC/GC,MAAAA,GACI,MAAM46O,EAASr6O,KAAKwL,SAASye,cAAcC,KAAKvL,OAAOuuB,iBAAiBmtM,OACxE,OACI7xO,EAAAA,GAAAA,MAACwxO,GAA6B,CAAAj6O,SAAA,CACzBs6O,GAAUA,EAAO5tO,UAAW/M,EAAAA,GAAAA,KAACq6O,GAAqB,KACnDr6O,EAAAA,GAAAA,KAACy6O,GAA4B,MAGzC,ICXG,MAAMG,WAAsCxG,GAC/C9mM,2BAAAA,GACI,OACIttC,EAAAA,GAAAA,KAAC06O,GAAmC,GAE5C,CAEA1vN,wBAAAA,GACI,OAAQhrB,EAAAA,GAAAA,KAACu4O,GAAsC,CAC3CK,sBAAsB,EACtBD,6BAA8B78M,EAAAA,SAASwB,YAAY,KAE3D,ECLG,MAAMu9M,WAA4B5F,GACrC,iBAAIl1K,GACA,OAAO,IAAIg6K,GAAsCz5O,KAAKwL,SAC1D,CAEA,cAAI+F,GACA,OAAO,IAAI+oO,GAA8Bt6O,KAAKwL,SAClD,CACA,gBAAM8pO,SACIl9N,MAAMk9N,aACZt1O,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CACrC5yB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,2BAC3C/T,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,0BAC1CgoD,0BAA0B,EAC1BniC,QAAS,CACL,CACI55B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1C8lB,aAAc,UACdt0B,QAASqY,SACEmc,GAAAA,EAAkCC,0BAK7D,CAEAktG,yCAAAA,CAA0C0sG,GACtC,MAAMrqN,EAAO,IAAIyxC,KAAuC,IAAlC44K,GAatB,OAAO,IAAI8E,KAAKC,eAAe,QAXa,CACxCC,SAAU,mBACVC,KAAM,UACN7/M,MAAO,UACP8/M,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRvoG,OAAQ,UACRwoG,QAAQ,IAGqC1wN,OAAOgB,EAE5D,ECpDG,MAAM2vN,WAA0C/S,GACnD,0BAAca,GACV,OAAO,CACX,ECGG,MAAMmS,WAAuC3J,GAChD,gBAAIr3H,GACA,OAAO,IAAI+gI,GAAkCh7O,KAAKwL,SACtD,ECNG,MAAM0vO,WAA+BpH,GACxCj9N,yBAAAA,CAA0B/Y,GAEtB,MAAMq9O,EAAan7O,KAAKwL,SAAS0N,eAAeq3L,mBAAmBzyM,EAAMmV,SAAS+3E,cAClF,OAAO5yE,MAAMvB,2BAAyB3R,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACjCpH,GAAK,IACR81O,aAAcuH,IAEtB,ECHG,MAAMC,WAAqBzG,GAC9B,cAAIpjO,GACA,OAAO,IAAI2pO,GAAuBl7O,KAAKwL,SAC3C,CAEA,iBAAIi0D,GACA,OAAO,IAAIw7K,GAA+Bj7O,KAAKwL,SACnD,CAEA,2BAAIoqO,GACA,OAAO,CACX,ECnBG,MAAMyF,WAAyD7N,GAClE,oBAAcG,GACV,OAAO,CACX,ECGG,MAAM2N,WAA0ChK,GAEnD,4BAAIO,GACA,OAAO,IAAIwJ,GAAiDr7O,KAAKwL,SACrE,ECTG,MAAM+vO,WAAkCzH,GAC3C,0BAAgBC,GACZ,MAAMj2O,QAAcsa,MAAM27N,uBAC1B,OAAA7uO,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOpH,GAAK,IACRu1O,WAAYrzO,KAAKwL,SAASkE,KAAK4yE,SAAS26D,OAEhD,ECKG,MAAMu+F,WAAkC98I,GAAAA,EAC3C3rF,WAAAA,CAAaumF,EACA9tF,EACAmzF,GACTvmF,MAAM,iCAAkCkhF,EAAc9tF,EAAUmzF,EACpE,CAGUI,mBAAAA,CAAoB14F,GAC1B,OACI3G,EAAAA,GAAAA,KAAA,OAAoBoJ,MAAO,CAAC2yO,gBAAiB,MAAOx3O,MAAO,SAAUoD,QAASA,IAAMrH,KAAK2iE,UAAU5iE,SAC9FC,KAAK8B,MADA9B,KAAK8a,IAIvB,ECnBG,MAAM4gO,WAA6B1H,GACtCC,eAAAA,CAAgBn5N,EAAkBw+E,EAAqCqF,GACnE,MACS,mCADD7jF,EAEO,IAAI0gO,GAA0BliJ,EAAct5F,KAAKwL,SAAUmzF,GAE3DvmF,MAAM67N,gBAAgBn5N,EAAKw+E,EAAcqF,EAG5D,E,OCjBG,MAAMg9I,GAA+Bl+O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2LAQhDE,GAASA,EAAMI,MAAM6C,KAAKC,QAAQywB,O,OCPjC,MAAMmqN,IAAcn+O,EAAAA,GAAAA,IAAO0N,GAAAA,EAAP1N,CAAcE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gCCe5Bi+O,IAAwFt8O,EAAAA,GAAAA,KAAUzB,IAAW,IAADa,EAAAm9O,EACrH,MAAMtwO,GAAWqD,EAAAA,GAAAA,KAEXktO,EAAkBvwO,EAASkE,KAAKw8H,gCAE/B8vG,EAAsBC,IAA2BvuO,EAAAA,GAAAA,UAAyL,QAAjL/O,EAA8H,QAA9Hm9O,EAACC,EAAgBG,6BAA6Bv1G,MAAKh/G,GAAKA,EAAEsU,eAAiB8/M,EAAgBI,sBAAsBlgN,sBAAa,IAAA6/M,EAAAA,EAAIC,EAAgBG,6BAA6B,UAAE,IAAAv9O,EAAAA,EACtI6M,EAASkE,KAAK08H,iCAiCzH,OACI5jI,EAAAA,GAAAA,MAACmzO,GAA4B,CAAA57O,SAAA,EACzBL,EAAAA,GAAAA,KAAA,OAAAK,SAAMyL,EAASoK,YAAYC,UAAU,wCACrCnW,EAAAA,GAAAA,KAACk8O,GAAW,CAAC9xO,MAAOkyO,EAAqB//M,aAAcjyB,SAjB7Cgd,IACdi1N,EAAwBzgN,EAAAA,SAASC,YAAYsE,SAAS/Y,EAAM9c,OAAOJ,QAAQ,EAgBImB,UAAU,EAAOvJ,MAAO,OAAQ/B,WAAWG,EAAAA,GAAAA,IAAQ,gCAAgCC,SACzJg8O,EAAgBG,6BAA6B3rO,KA9BpCyrB,IAGdt8B,EAAAA,GAAAA,KAAA,UAAoCoK,MAAOkyB,EAASC,aAAal8B,SAC5DyL,EAASoK,YAAYC,UAAU,sCAAuC,CACnE6kB,QAASsB,EAASC,gBAFbD,EAASC,mBA8BtBv8B,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CAACC,cAAe,CACxC/wB,QAlBIA,KApBMu0B,IAAC3jB,EAAgBqiB,EAqBnC9uB,EAASkE,KAAKy8H,qBAAqB6vG,GAChCA,EAAqB//M,eAAiB8/M,EAAgBI,sBAAsBlgN,eAtB5DhkB,EAuBD,UAvBiBqiB,EAuBN0hN,EAAqB//M,aAAa98B,WAtB/DqM,EAASqd,UAAU+S,cAAc99B,EAAM+iK,kBAAmB5oJ,EAAQqiB,IAwBlEx8B,EAAMk6B,cAAcC,OAAO,EAcnBn2B,KAAK0J,EAASoK,YAAYC,UAAU,WAGb,I,gBC/ChC,MAAMumO,WAAwBzH,GACjC,iBAAIl1K,GACA,OAAO,IAAI67K,GAAkCt7O,KAAKwL,SACtD,CAEA,cAAI+F,GACA,OAAO,IAAIgqO,GAA0Bv7O,KAAKwL,SAC9C,CAEA,aAAI24D,GACA,OAAO,IAAIu3K,GAAqB17O,KAAKwL,SACzC,CAEA+vF,sBAAAA,GACI,MAAMslE,EAAoB,0BAE1B7gK,KAAKwL,SAASqd,UAAU+S,cAAcilI,EAAmB,QAEzD7gK,KAAKwL,SAAS4vB,OAAOgiB,WAAWplB,IAExBt4B,EAAAA,GAAAA,KAACm8O,GAAkC,CAAC7jN,cAAeA,EAAe6oI,kBAAmBA,KAE1F,CACCp4J,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,qCAC3CynC,oBAAoB,EACpBsL,yBAAyB,EACzBQ,qBAAqB,EACrBC,kBAAmBA,KACfrpD,KAAKwL,SAASqd,UAAU+S,cAAcilI,EAAmB,SAAS,GAG9E,CAEAg1E,0BAAAA,CAA2B5iO,GACvB,OAAOoD,KAAKuK,IAAIyhF,GAAAA,EAAsCriG,KAAKwL,SAAS6U,YAAYq4L,oBAAoBzlM,GACxG,CAEA6iO,0BAAAA,CAA2B7iO,GACvB,OAAO,GACX,EC3DG,MAAMopO,WAA2D7O,GACpE,oBAAcG,GACV,OAAO,CACX,ECGG,MAAM2O,WAA4ChL,GAErD,4BAAIO,GACA,OAAO,IAAIwK,GAAmDr8O,KAAKwL,SACvE,ECJG,MAAM+wO,WAA0B5H,GACnC,iBAAIl1K,GACA,OAAO,IAAI68K,GAAoCt8O,KAAKwL,SACxD,ECRG,MAAMgxO,WAAqC1I,GAC9C,0BAAgBC,GACZ,MAAMj2O,QAAcsa,MAAM27N,uBACpB0I,QAAuBz8O,KAAKwL,SAASkE,KAAKi8H,kCAChD,OAAAzmI,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOpH,GAAK,IACRs1O,oBAAqBqJ,GAE7B,ECPG,MAAMC,WAA2B/H,GACpC,cAAIpjO,GACA,OAAO,IAAIirO,GAA6Bx8O,KAAKwL,SACjD,E,4BCAG,MAAMmxO,WAAmC7I,GAC5C,0BAAgBC,GACZ,MAAMj2O,QAAcsa,MAAM27N,uBACpB0I,QAAuBz8O,KAAKwL,SAASkE,KAAKi8H,kCAChD,OAAAzmI,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOpH,GAAK,IACRs1O,oBAAqBqJ,GAE7B,CAEA3vM,8BAAAA,GACI,OAAQptC,EAAAA,GAAAA,KAAC66D,GAAAA,EAAiC,CAACnC,iBAAiB,GAChE,CAEAprB,2BAAAA,GACI,OACIttC,EAAAA,GAAAA,KAACghE,GAAAA,EAAuC,CAAC1B,cAAc,EAAO5G,iBAAiB,GAEvF,CAEA1tC,wBAAAA,GACI,OAAQhrB,EAAAA,GAAAA,KAACu4O,GAAsC,GACnD,ECzBG,MAAM2E,WAAyBjI,GAClC,cAAIpjO,GACA,OAAO,IAAIorO,GAA2B38O,KAAKwL,SAC/C,ECLG,MAAMqxO,WAA2DrP,GACpE,oBAAcG,GACV,OAAO,CACX,ECDG,MAAMmP,WAA4CxL,GAErD,4BAAIO,GACA,OAAO,IAAIgL,GAAmD78O,KAAKwL,SACvE,E,gBCHG,MAAMuxO,WAAoCjJ,GAC7C9mM,2BAAAA,GACI,OACIttC,EAAAA,GAAAA,KAACo8D,GAAAA,EAAwC,GAEjD,CAEApxC,wBAAAA,GACI,OAAQhrB,EAAAA,GAAAA,KAACu4O,GAAsC,GACnD,ECRG,MAAM+E,WAA0BrI,GAEnC,cAAIpjO,GACA,OAAO,IAAIwrO,GAA4B/8O,KAAKwL,SAChD,CAEA,iBAAIi0D,GACA,OAAO,IAAIq9K,GAAoC98O,KAAKwL,SACxD,ECPG,IAAKyxO,IAGX,SAHWA,GAAAA,EAAAA,EAAY,uBAAZA,EAAAA,EAAY,uBAGvB,CAHWA,KAAAA,GAAY,KCJjB,MAAMC,WAAwBvI,GACjC,gBAAMW,SACyBt1O,KAAKwL,SAASkxF,gBAAgBygJ,qCACrCF,GAAaG,gBACvBhlO,MAAMk9N,YAEpB,CAEA,4BAAIG,GACA,OAAO,CACX,E,aCWG,IAAM4H,IAAiBxlO,GA+BzBC,EAAAA,GAAWxK,IAAGwF,GA/BZ,cAAgC4rE,EAAAA,EACnC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,eAAAC,GAAA,OAEhBQ,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eACnC,KACI3P,KAAKuO,QAAUvO,KAAKs9O,mBAAmB,GACxC,CACHphO,iBAAiB,GAEzB,CACAkmE,iBAAAA,GACI,OAAOpiF,KAAKwL,SAAS63E,IAAIu7D,uBAAuBx8D,mBACpD,CAEAohI,cAAAA,GACI,OAAOxjN,KAAKwL,SAAS63E,IAAIu7D,uBAAuB4kE,gBACpD,CAEA/D,wBAAAA,GAEI,MAAM89B,EAAwBv9O,KAAKwL,SAAS63E,IAAIu7D,uBAAuB6gE,2BAEvE,OAAAv6M,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOq4O,GAAqB,IACxBn9B,aAAc5kL,EAAAA,SAAS6tG,MAAMk0G,EAAsBn9B,eAE3D,CAMAo9B,6BAAAA,GACI,OAAOx9O,KAAKwL,SAAS63E,IAAIu7D,uBAAuB4+F,+BACpD,CAEA7U,kCAAAA,GACI,OAAO3oO,KAAKwL,SAASqI,OAAOg7H,gBAAkB7uI,KAAKwL,SAASye,cAAc6P,gBAAgBk1F,KAAKyuH,4BACnG,CAEAnnB,gCAAAA,GACI,OAAOt2N,KAAKwL,SAASye,cAAc6P,gBAAgBk1F,KAAK0uH,0BAC5D,CAGAC,eAAAA,CAAgBrgB,GACZ,OAAOt9N,KAAKwL,SAAS63E,IAAIu7D,uBAAuB++F,gBAAgBrgB,EACpE,CAEA0F,sBAAAA,GACI,OAAOhjO,KAAK29O,gBAAgBC,GAAAA,EAAgBC,cAChD,CAEAvI,UAAAA,GACI,OAAOt1O,KAAKuO,QAAQ+mO,YACxB,CAEA3yF,mBAAAA,GACI,OAAO3iJ,KAAKwL,SAAS63E,IAAIu7D,uBAAuB+D,qBACpD,CAEQ26F,iBAAAA,GACJ,MAAMQ,EAAiB99O,KAAKoiF,oBACtBwyJ,EAAmB50O,KAAKwL,SAAS63E,IAAI6+D,kBAC3C,OAAQ47F,GACJ,KAAKC,GAAAA,GAAsBC,QACvB,OAAO,IAAI/G,GAAkBrC,EAAkBkJ,EAAgB99O,KAAKwL,UACxE,KAAKuyO,GAAAA,GAAsBE,SACvB,OAAO,IAAIrF,GAAmBhE,EAAkBkJ,EAAgB99O,KAAKwL,UACzE,KAAKuyO,GAAAA,GAAsBG,eACvB,OAAO,IAAIjF,GAAkBrE,EAAkBkJ,EAAgB99O,KAAKwL,UACxE,KAAKuyO,GAAAA,GAAsBI,YACvB,OAAO,IAAI5E,GAAsB3E,EAAkBkJ,EAAgB99O,KAAKwL,UAC5E,KAAKuyO,GAAAA,GAAsBK,GACvB,OAAO,IAAI7D,GAAoB3F,EAAkBkJ,EAAgB99O,KAAKwL,UAC1E,KAAKuyO,GAAAA,GAAsBM,GACvB,OAAO,IAAIjD,GAAaxG,EAAkBkJ,EAAgB99O,KAAKwL,UACnE,KAAKuyO,GAAAA,GAAsBO,MACvB,OAAO,IAAIlC,GAAgBxH,EAAkBkJ,EAAgB99O,KAAKwL,UACtE,KAAKuyO,GAAAA,GAAsBQ,QACvB,OAAO,IAAIhC,GAAkB3H,EAAkBkJ,EAAgB99O,KAAKwL,UACxE,KAAKuyO,GAAAA,GAAsBS,SACvB,OAAO,IAAI9B,GAAmB9H,EAAkBkJ,EAAgB99O,KAAKwL,UACzE,KAAKuyO,GAAAA,GAAsBU,OACvB,OAAO,IAAI7B,GAAiBhI,EAAkBkJ,EAAgB99O,KAAKwL,UACvE,KAAKuyO,GAAAA,GAAsBW,GACvB,OAAO,IAAI1B,GAAkBpI,EAAkBkJ,EAAgB99O,KAAKwL,UACxE,KAAKuyO,GAAAA,GAAsBY,MACvB,OAAO,IAAIzB,GAAgBtI,EAAkBkJ,EAAgB99O,KAAKwL,UACtE,QACI,OAAO,IAAImpO,GAAwBC,EAAkBkJ,EAAgB99O,KAAKwL,UAEtF,CAEAmqO,uBAAAA,GACI,OAAO31O,KAAKuO,QAAQonO,yBACxB,CAEA,2BAAIC,GACA,OAAO,CACX,GACHp9N,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,WAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA1J,IC5H6C,IAEzC8rO,G,sBAAW,SAAXA,GAAAA,EAAW,6BAAXA,EAAW,+BAAXA,EAAW,gCAAXA,KAAAA,GAAW,KAaT,MAAMC,WAA6BngK,EAAAA,EAetC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAdZszO,YAEJ,CACAC,aAAc,GACdC,cAAe,GACfC,cAAe,IACjB,KAEMC,eAAyC,GAAG,KAE5CC,qBAA+B,EAAE,KACjCC,2BAAqC,EAAE,KAwCvCC,iBAAmB3/N,UAIvB,SAFM1f,KAAKwL,SAASkE,KAAK86H,mBAEpBxqI,KAAKwL,SAASkE,KAAKC,cAInB3P,KAAKwL,SAASoL,WAAW4mO,gCAI9B,IACI,MAAM8B,QAAsBt/O,KAAKwL,SAASonH,IAAIyY,eAAes7E,kBAEvD44B,EAAkBD,EAAcE,kBAAkB74G,MAAK84G,GAASA,EAAMC,YAAcd,GAAYe,gBACtG3/O,KAAK8+O,YAAYC,aAAgBQ,GAAmBA,EAAgBK,cAAiB,GAErF,MAAMC,EAAmBP,EAAcE,kBAAkB74G,MAAK84G,GAASA,EAAMC,YAAcd,GAAYkB,iBACvG9/O,KAAK8+O,YAAYE,cAAiBa,GAAoBA,EAAiBD,cAAiB,GAExF,MAAMG,EAAmBT,EAAcE,kBAAkB74G,MAAK84G,GAASA,EAAMC,YAAcd,GAAYoB,iBACvGhgP,KAAK8+O,YAAYG,cAAiBc,GAAoBA,EAAiBH,cAAiB,GAExF5/O,KAAK0rJ,YAET,CAAE,MAAM/8I,GACJ3O,KAAKwL,SAAS2L,OAAOxI,MAAM,yDAA0DA,EACzF,GACH,KAEOsxO,kBAAoB,KACpBjgP,KAAKwL,SAASkE,KAAKC,eACnB3P,KAAKkgP,qBACLlgP,KAAKorJ,eACT,EACH,KA+GO80F,mBAAqB,KAEzB,MAAMC,EAAUngP,KAAK8+O,YAAYC,aAAa7+O,OAAS,GAAKF,KAAK8+O,YAAYE,cAAc9+O,OAAS,GAAKF,KAAK8+O,YAAYG,cAAc/+O,OAAS,GAE5IF,KAAKwL,SAASoL,WAAW4mO,iCAAmCx9O,KAAKm/O,qBAAuB,IAAMgB,IAMnGh2M,YAAW,KACPnqC,KAAKwL,SAAS6wC,QAAQC,kBAAkB,CACpCF,aAAc,CACVn4B,QAASuX,EAAAA,SAASwB,YAAYh9B,KAAKo/O,6BAEvCljM,aAAc,CACVzzC,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,+BAC3C8kC,QAAS36C,KAAKogP,0BAElB7wB,cAAeA,KACXvvN,KAAKm/O,sBAAsB,GAEjC,GACH,KACHn/O,KAAKm/O,uBAAsB,EA9M3Bn/O,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAAc+P,gBAC3C1f,KAAKq/O,mBACXr/O,KAAKkgP,oBAAoB,GAE1B,CACChkO,iBAAiB,IAGrBlc,KAAKwL,SAAS63E,IAAIoxC,OAAO+f,sBAAsB90H,UACvCy9E,IAASzG,GAAAA,EAAaqzI,kBAChB/pO,KAAKq/O,kBACf,IAGJr/O,KAAKwL,SAAS63E,IAAIoxC,OAAOygB,oBAAmB,KACxCl1I,KAAKkgP,oBAAoB,GAEjC,CAEQx0F,UAAAA,GAC+B,IAA/B1rJ,KAAKk/O,eAAeh/O,SACpBF,KAAKk/O,eAAevkO,KAAK3a,KAAKwL,SAAS63E,IAAIoxC,OAAOye,YAAYlzI,KAAKkgP,qBACnElgP,KAAKk/O,eAAevkO,KAAK3a,KAAKwL,SAAS63E,IAAIoxC,OAAOse,0BAA0B/yI,KAAKigP,oBAEzF,CAEQ70F,YAAAA,GAEJprJ,KAAKk/O,eAAetzL,SAAQlgC,IACxBA,EAAaE,KAAK,IAGtB5rB,KAAKk/O,eAAiB,EAC1B,CAwCQmB,yBAAAA,CAA0BC,GAC9B,OAAQA,GACJ,KAAK,EACD,OAAOtgP,KAAKwL,SAASoK,YAAYC,UAAU,qCAC/C,KAAK,EACD,OAAO7V,KAAKwL,SAASoK,YAAYC,UAAU,sCAC/C,KAAK,EACD,OAAO7V,KAAKwL,SAASoK,YAAYC,UAAU,uCAC/C,QACI,MAAO,GAEnB,CAEQ0qO,oBAAAA,CAAqBz2O,EAAe02O,GAExC,MAAa,QAATA,EAEM,GAAN5gP,OAAUkK,EAAQ,GAAE,KAAAlK,OAAII,KAAKwL,SAASoK,YAAYC,UAAU,qCAG1D,GAANjW,OAAUkK,EAAK,KAAAlK,OAAII,KAAKwL,SAASoK,YAAYC,UAAU,oCAC3D,CAEQ4qO,+BAAAA,CAAgCH,GAEpC,IAAII,EAAiB,GACrB,MAAMC,EAAS3gP,KAAK8+O,YAAYC,aAAap4G,MAAKg6G,GAAUA,EAAOL,SAAWA,IAM9E,OAJIK,IACAD,EAAc,GAAA9gP,OAAMI,KAAKqgP,0BAA0BC,GAAO,MAAA1gP,OAAKI,KAAKwL,SAASwJ,SAASC,YAAY0rO,EAAO72O,OAAO,KAG7G42O,CACX,CAEQE,gCAAAA,CAAiCN,GAErC,IAAII,EAAiB,GACrB,MAAMC,EAAS3gP,KAAK8+O,YAAYE,cAAcr4G,MAAKg6G,GAAUA,EAAOL,SAAWA,IAM/E,OAJIK,IACAD,EAAc,GAAA9gP,OAAMI,KAAKqgP,0BAA0BC,GAAO,MAAA1gP,OAAKI,KAAKugP,qBAAqBI,EAAO72O,MAAO62O,EAAOH,QAG3GE,CACX,CAEQG,0BAAAA,CAA2B/jM,GAE/B,IAAIh7C,EAAO,GAaX,OAXAg7C,EAASA,EAAOr9B,QAAOggO,GAAmB,KAAVA,KAEzB7zL,SAAQ,CAAC6zL,EAAOn6O,KAEnBxD,GAAQ29O,EAEJ3iM,EAAOx3C,EAAI,KACXxD,GAAQ,MACZ,IAGGA,CACX,CAEQg/O,qBAAAA,GAEJ,OAA6C,IAAzC9gP,KAAK8+O,YAAYC,aAAa7+O,OACvB,KAGL,GAANN,OAAUI,KAAKwL,SAASoK,YAAYC,UAAU,uCAAsC,OAAAjW,OAAMI,KAAK6gP,2BAA2B,CAAC7gP,KAAKygP,gCAAgC,GAAIzgP,KAAKygP,gCAAgC,GAAIzgP,KAAKygP,gCAAgC,KACtP,CAEQM,sBAAAA,GAEJ,OAA8C,IAA1C/gP,KAAK8+O,YAAYE,cAAc9+O,OACxB,KAGL,GAANN,OAAUI,KAAKwL,SAASoK,YAAYC,UAAU,yCAAwC,OAAAjW,OAAMI,KAAK6gP,2BAA2B,CAAC7gP,KAAK4gP,iCAAiC,GAAI5gP,KAAK4gP,iCAAiC,GAAI5gP,KAAK4gP,iCAAiC,KAC3P,CAEQI,sBAAAA,GAEJ,OAA8C,IAA1ChhP,KAAK8+O,YAAYG,cAAc/+O,OACxB,KAGL,GAANN,OAAUI,KAAKwL,SAASoK,YAAYC,UAAU,wCAAuC,OAAAjW,OAAMI,KAAKwL,SAASwJ,SAASC,YAAYjV,KAAK8+O,YAAYG,cAAc,GAAGn1O,OAAO,GAC3K,CAEQs2O,sBAAAA,GACJ,MAAMa,EAAQ,GACRC,EAAelhP,KAAK8gP,wBACtBI,GACAD,EAAMtmO,KAAKumO,GAEf,MAAMC,EAAgBnhP,KAAK+gP,yBACvBI,GACAF,EAAMtmO,KAAKwmO,GAEf,MAAMC,EAAgBphP,KAAKghP,yBAI3B,OAHII,GACAH,EAAMtmO,KAAKymO,GAERH,CACX,CA6BA5iO,OAAAA,GACIjG,MAAMiG,UACNre,KAAKorJ,cACT,ECxOG,IAAMi2F,IAAoBxpO,GAY5BC,EAAAA,GAAWxK,IAAGyK,GA4DdE,EAAAA,GAAOC,MAAKF,GA+BZC,EAAAA,GAAOC,MAAKpF,GAvGV,cAAmC4rE,EAAAA,EACtC3rE,WAAAA,CAAY+sH,GACR1nH,MAAM0nH,IAAgBvnH,EAAAA,EAAAA,GAAA,uBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,8BAAAE,GAAA,WAgBlB6oO,iCAAgE,KAAK,KACrEC,+BAA8D,KAAK,KACnEC,4BAAwD,KAAK,KAG7DC,mBAAsB9xO,IACtBA,EACA3P,KAAK0rJ,cAEL1rJ,KAAKorJ,eAELprJ,KAAK0hP,oBAAmB,GAC5B,GACHnpO,EAAAA,EAAAA,GAAA,4BAAAmM,GAAA,WAqDOi9N,+BAAiC,MAKR,IAAzB3hP,KAAK4hP,iBACL5hP,KAAK0hP,oBAAmB,GACxBv3M,YAAW,KACPnqC,KAAK0hP,oBAAmB,EAAK,GAC9B,MAEH1hP,KAAK0hP,oBAAmB,EAC5B,EACF,KAWK/3N,QAAU,KACV3pB,KAAK6hP,uBAAuB3hP,OAAS,IACpCF,KAAK6hP,uBAAuB,GAAG5V,eAC/BjsO,KAAK8hP,0BACT,EACH,KAEMC,oBAAsB,IAClB/hP,KAAK6hP,uBAAuB3hP,OAAS,GAhH5C8Y,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,cACnC3P,KAAKyhP,mBACL,CAAEvlO,iBAAiB,GAE3B,CAuBA,qBAAY8lO,GACR,OAAOhiP,KAAKwL,SAASye,cAAc6P,gBAAgBmoN,cAAcC,gBACrE,CAEQx2F,UAAAA,GACJ1rJ,KAAKshP,iCAAmCthP,KAAKwL,SAAS63E,IAAIoxC,OAAOwgB,yBAAyBj1I,KAAK2hP,gCAC/F3hP,KAAKwL,SAAS2iC,WAAW5sB,MAAK4sB,IAC1BnuC,KAAKwhP,6BAA8B/xO,EAAAA,EAAAA,KAAS,IAAM0+B,EAAWC,qBACxDA,IAMW,IAAD+zM,GALPniP,KAAK8hP,0BACF1zM,GACIA,EAAmBykD,WAAalL,GAAAA,EAAamL,MAAS9yF,KAAKgiP,oBAC1DhiP,KAAKuhP,+BAAiCvhP,KAAKwL,SAAS63E,IAAIoxC,OAAOugB,eAAeh1I,KAAKoiP,wBAGvFpiP,KAAK0hP,oBAAmB,GACW,QAAnCS,EAAAniP,KAAKuhP,sCAA8B,IAAAY,GAAnCA,EAAqCv2N,MACrC5rB,KAAKuhP,+BAAiC,KAC1C,GACF,GAGd,CAEQn2F,YAAAA,GAAgB,IAADi3F,EAAAC,EACnBtiP,KAAK8hP,0BAEgC,QAArCO,EAAAriP,KAAKshP,wCAAgC,IAAAe,GAArCA,EAAuCz2N,MACJ,QAAnC02N,EAAAtiP,KAAKuhP,sCAA8B,IAAAe,GAAnCA,EAAqC12N,MAErC5rB,KAAKshP,iCAAmC,KACxCthP,KAAKuhP,+BAAiC,KAEnCvhP,KAAKwhP,8BACJxhP,KAAKwhP,8BACLxhP,KAAKwhP,4BAA8B,KAE3C,CAQQM,uBAAAA,IACJl4N,EAAAA,EAAAA,KAAY,KACR5pB,KAAK6hP,uBAAyB,EAAE,GAExC,CAiBOn4N,mBAAAA,GACH1pB,KAAK0hP,oBAAmB,EAC5B,CAGQA,kBAAAA,CAAmB/kN,GACvB38B,KAAK4hP,gBAAkBjlN,CAC3B,CAaOrT,yBAAAA,GACH,OAAO+9D,GAAAA,EAAsBk7J,gBACjC,GACH/pO,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA7G4B,CAAM,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,0BAE7BtE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBACyC,EAAG,IAADkI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,wBAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAyDtBy9H,IAC5Bj6I,KAAK6hP,uBAAuB,GAAK5nG,CAAO,CAE1C,KAAD99H,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAApE,IAAAyE,OAAAC,yBAAA5J,GAAAsJ,UAAA,sBAAAtJ,GAAAsJ,WAAAtJ,I,mBCtFE,MAAe0vO,GAElBzvO,WAAAA,CAAsBvH,EAAqCi3O,GAAkC,KAAvEj3O,SAAAA,EAAyB,KAAYi3O,YAAAA,EAA+B,KAmBlFC,aAAuB,EAAM,KA6BnBnzN,QAAE,OACFsxI,uBAAiB,CAhDnC,CAMAP,mBAAAA,GACI,OAAO,CACX,CAEA,qBAAMqiF,GAAqC,IAADC,EACtC,OAAOz4O,QAAwB,QAAjBy4O,EAAC5iP,KAAKyiP,mBAAW,IAAAG,OAAA,EAAhBA,EAAkBn2O,QACrC,CAEA,YAAI2f,GACA,OAAO,IAAIC,GAAAA,EAAYrsB,KAAKyiP,YAAYnoO,YAAata,KAAKyiP,YAAYpoO,WAAY,KACtF,CAIQwoO,mBAAAA,GACJ,MAAM,SAANjjP,OAAgBI,KAAKuvB,GAAE,SAC3B,CAEA,cAAIuzN,GACA,IAGI,MAAmB,SADHhzO,OAAOizO,eAAellM,QAAQ79C,KAAK6iP,sBAEvD,CACA,MAAOn0O,GAEH,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,uBAAwBD,GAC5C1O,KAAK0iP,WAChB,CACJ,CAEA,cAAII,CAAWA,GACX,IACI9iP,KAAK0iP,YAAcI,EAEnBhzO,OAAOizO,eAAep7G,QAAQ3nI,KAAK6iP,sBAAuBC,EAAY,OAAS,QACnF,CACA,MAAOp0O,GACH1O,KAAKwL,SAAS2L,OAAOxI,MAAM,uBAAwBD,EACvD,CACJ,ECnDG,MAAMs0O,WAAqBR,GAAUzvO,WAAAA,GAAA,SAAA9S,WAAA,KACxCsvB,GAAK,eAAe,KACpBsxI,kBAAoB,YAAa,CAEjCoiF,YAAAA,CAAaR,GACTziP,KAAKyiP,YAAcA,CACvB,CAEA,qBAAME,GACF,MAAMO,SAAiBljP,KAAKwL,SAAS6nF,iBAAiBC,UACtD,OAAQtzF,KAAKwL,SAASkE,KAAKC,eAA6B,IAAZuzO,IAAuBljP,KAAKwL,SAAS+9B,UAAUtuB,iBAAmB7C,MAAMuqO,iBACxH,CAEAhiF,6BAAAA,GACI,OAAO,CACX,CAEAlhK,MAAAA,GACI,IAAI2G,EAAgBpG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM8mG,gBAC3D,OACI9yG,EAAAA,GAAAA,KAAC0G,EAAa,CAACK,KAAM,EAAG8F,cAAY,GAE5C,ECxBJ,MAUA,GAVoB9O,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0KAERe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMa,OAAOC,OAAOmkP,iBAAiBC,UAAUjkP,UAAU,I,sBCE5F,MAAMkkP,IAAiBl7N,EAAAA,GAAAA,IAASxqB,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,uGAU1B0lP,IAAiBn7N,EAAAA,GAAAA,IAASrnB,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,uGAU1B2lP,IAAqBp7N,EAAAA,GAAAA,IAASvmB,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,sGAU9B4lP,IAAer7N,EAAAA,GAAAA,IAAShmB,KAAAA,IAAAvE,EAAAA,GAAAA,GAAA,uGAiC9B,GAtBqBH,GAAAA,GAAOiB,IAAG2D,KAAAA,IAAAzE,EAAAA,GAAAA,GAAA,2fAGTe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMa,OAAOC,OAAOmkP,iBAAiBM,WAAWtkP,UAAU,IASvFmD,IAAA,IAAC,SAACohP,GAASphP,EAAA,OAAKohP,IAAY7iP,EAAAA,GAAAA,IAAG4B,KAAAA,IAAA7E,EAAAA,GAAAA,GAAA,0DACXylP,GAAmBC,GAAmBC,GAAuBC,GAClF,I,UC1DL,MAAMx3M,GAAYvuC,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4FAOtBkuC,IAAQruC,EAAAA,GAAAA,IAAOuuC,GAAPvuC,CAAiBqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,sCAM/B,IAFsBsuC,EAAAA,GAAAA,GAAeJ,GAAOE,ICN/B23M,IAA0BpkP,EAAAA,GAAAA,IAAS,cAAsCC,GAAAA,EAClFC,MAAAA,GACI,MAAMikP,EAAW1jP,KAAKwL,SAASq0J,gBAAgB+jF,8BAC/C,OACIlkP,EAAAA,GAAAA,KAACmkP,GAAa,CAAClkP,WAAWG,EAAAA,GAAAA,IAAQ,qCAAqCC,UACnEL,EAAAA,GAAAA,KAACokP,GAAW,CAAA/jP,UACRL,EAAAA,GAAAA,KAACqkP,GAAY,CAACL,SAAUA,OAIxC,ICdG,MAAMM,WAA4BxB,GAAUzvO,WAAAA,GAAA,SAAA9S,WAAA,KAC/CsvB,GAAK,iBAAiB,KACtBsxI,kBAAoB,KAAM,CAE1B,qBAAM8hF,GACF,OAAO3iP,KAAKwL,SAASq0J,gBAAgBokF,6BAA+BjkP,KAAKwL,SAAS+9B,UAAUtuB,iBAAmB7C,MAAMuqO,oBAAsB3iP,KAAK8iP,UACpJ,CAEAniF,6BAAAA,GACI,OAAO,CACX,CAEAlhK,MAAAA,GACI,OAAOC,EAAAA,GAAAA,KAACikP,GAAuB,GACnC,E,aCdJ,MAAM93M,GAAapuC,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6BAIhBkuC,IAAQruC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,0DAC1Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAW4tC,UAAU,IAKxCC,IAAYvuC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBmE,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,sEAErC6F,GAAAA,EAAQC,IAAI2jD,OAAO69C,OAAOthG,SCdnBsgP,IDmB+Bh4M,EAAAA,GAAAA,GAAeJ,GAAOE,IElB3D,MAAMm4M,WAA0B3B,GAAUzvO,WAAAA,GAAA,SAAA9S,WAAA,KAC7CsvB,GAAK,oBAAoB,KACzBsxI,kBAAoB,SAAU,CAE9B,qBAAM8hF,GACF,MAAMO,SAAiBljP,KAAKwL,SAAS6nF,iBAAiBC,UACtD,OAAOtzF,KAAKwL,SAASq0J,gBAAgBukF,6BAC5BpkP,KAAKwL,SAAS+9B,UAAUtuB,YACZ,IAAZioO,GACDljP,KAAKwL,SAASqI,OAAOC,UACrB9T,KAAKwL,SAASrN,WAAWirC,gBACnBhxB,MAAMuqO,iBACxB,CAEAhiF,6BAAAA,GACI,OAAO,CACX,CAEAL,mBAAAA,GACI,OAAO,CACX,CAEA7gK,MAAAA,GACI,OAAO,IACX,E,oDCHG,IAAM4kP,IAAsBxsO,GAE9BC,EAAAA,GAAWxK,IAAGyK,GAGdD,EAAAA,GAAWxK,IAAG0K,GAuBdC,EAAAA,GAAOC,MAAKkM,GAMZnM,EAAAA,GAAOC,MAAKmM,GAyGZvM,EAAAA,GAAWxK,IAAGgX,GAGdrM,EAAAA,GAAOC,MAAKspC,GAMZ1pC,EAAAA,GAAWxK,IAAGm0C,GAGdxpC,EAAAA,GAAOC,MAAKwpC,GAgIZ5pC,EAAAA,GAAWxK,IAAGq0C,GAGd1pC,EAAAA,GAAOC,MAAKpF,GA1RV,cAAqC4rE,EAAAA,EAQxC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,qCAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,mCAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,0BAAAmM,GAAA,OAAAnM,EAAAA,EAAAA,GAAA,2BAAAkQ,GAAA,WAmJZ67N,WAAuB,GAAG,KAmF1BC,YAAsB,MAAIhsO,EAAAA,EAAAA,GAAA,oBAAAmQ,GAAA,WAwD1B87N,0BAA4B,EAAE,KAC9BC,iDAA2D,GA7R/DzrO,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK0rJ,YACT,CAEA,2BAAIg5F,GACA,MAAMC,EAAsB3kP,KAAKwL,SAASye,cAAc6P,gBAAgB8qN,gBAAgBF,wBAClFG,GAAkC9/O,EAAAA,MAAMkP,kBAAkBjU,KAAKwL,SAASye,cAAcC,KAAK46N,gBACjG,OAAOH,GAAuBE,CAClC,CAEA,8BAAIT,GACA,MAAMO,EAAsB3kP,KAAKwL,SAASye,cAAc6P,gBAAgB8qN,gBAAgBR,2BAClFW,GAAqChgP,EAAAA,MAAMkP,kBAAkBjU,KAAKwL,SAASye,cAAcC,KAAK86N,mBACpG,OAAOL,GAAuBI,CAClC,CAGQE,sBAAAA,CAAuBC,GAC3BllP,KAAK4jP,8BAAgCsB,CACzC,CAIQC,8BAAAA,CAA+BlB,GACnCjkP,KAAKolP,4BAA8BnB,CACvC,CAEQv4F,UAAAA,GACJ1rJ,KAAKyP,UAAS,MACNE,aAAc3P,KAAKwL,SAASkE,KAAKC,aACjC01O,YAAarlP,KAAKwL,SAAS6U,YAAYy3L,oBAAoB/2L,GAAAA,EAAYC,UAE3EriB,IAAkC,IAAjC,aAACgR,EAAY,YAAE01O,GAAY1mP,EACpBqB,KAAK0kP,0BACD/0O,GAAgB5K,EAAAA,MAAMC,SAASqgP,IAAgBA,EAnD/B,IAoDhBrlP,KAAKilP,wBAAuB,GACrBt1O,GACP3P,KAAKilP,wBAAuB,GAEpC,GAEJ,CAAC/oO,iBAAiB,IAGtBlc,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAClCA,IACQA,EAID3P,KAAKslP,qCAHLtlP,KAAKolP,6BAA8B,EACnCplP,KAAKulP,8BAGT,GACD,CAAErpO,iBAAiB,IAG1Blc,KAAKwL,SAAS6nF,gBAAgB9xE,MAAK8xE,IAC/BrzF,KAAKyP,UACD,KAAe,CACXg1G,SAAUpxB,EAAgBoxB,aAE9B/kG,gBACU1f,KAAKwlP,oBAAoB,GAChC,CAAEtpO,iBAAiB,GACzB,IAGLlc,KAAKyP,UACD,KAAe,CACXE,aAAc3P,KAAKwL,SAASkE,KAAKC,aACjCs0O,2BAA4BjkP,KAAKikP,2BACjCwB,mBAAoBzlP,KAAK0lP,oBACzBC,aAAc3lP,KAAK2lP,iBAEvBjmO,gBACU1f,KAAKwlP,oBAAoB,GAChC,CAAEtpO,iBAAiB,IAG1Blc,KAAKwL,SAAS63E,IAAIoxC,OAAO0gB,qBAAoBjrH,IACrClqB,KAAKwL,SAASkE,KAAKC,cACnB3P,KAAKwL,SAASkE,KAAKszE,IAAI7jF,aAAe+qB,EAAK07N,IAAIzmP,YAC/C4F,EAAAA,MAAM8gP,UAAU37N,EAAK47N,+BAIrB9lP,KAAKslP,mCACT,IAGAtlP,KAAKokP,6BACLpkP,KAAKwL,SAAS2iC,WAAW5sB,MAAK4sB,IAC1BA,EAAW6kH,eAAe+yF,2BAA2B,IAGzD/lP,KAAKwL,SAAS63E,IAAIoxC,OAAOye,aAAahpH,IAC7BA,EAAKquH,QAAWv4I,KAAK8/J,gBAAmB9/J,KAAKykP,iDAC9CzkP,KAAKgmP,wBACT,IAGJhmP,KAAKwL,SAAS63E,IAAIoxC,OAAOG,YAAY1qG,IAC5BA,EAAKquH,SACNv4I,KAAK+/J,oBACL//J,KAAKykP,iDAAkD,EACvDzkP,KAAKimP,kBACT,KAIRjmP,KAAKyP,UACD,KAAe,CACX+wJ,aAAcxgK,KAAKygK,mBACnBvqH,aAAcl2C,KAAKwL,SAASyqC,QAAQC,iBAExCx2B,UACI,GAAGwK,EAAKs2I,aAAc,CAAC,IAAD0lF,QACYh8N,EAAKs2I,aAAamiF,mBACzBz4N,EAAKgsB,aAAawnJ,cAAsC,QAA1BwoD,EAAIh8N,EAAKgsB,aAAahsB,YAAI,IAAAg8N,GAAtBA,EAAwB/vM,WAC7En2C,KAAKwL,SAASqd,UAAU4tB,wBAAwBvsB,EAAKs2I,aAAaK,kBAAmB,uBAAwB32I,EAAKgsB,aAAahsB,KAAKisB,UAE5I,IAGJ,CAAEj6B,iBAAiB,GAE3B,CAMQiqO,oBAAAA,CAAqBvlF,GACzB5gK,KAAKygK,mBAAqBG,CAC9B,CAOAV,qBAAAA,CAAsBr+I,GAClB7hB,KAAK0lP,oBAAsB7jO,CAC/B,CAGQukO,aAAAA,GACJ,GAAIpmP,KAAKskP,WAAWpkP,OAAS,EAAG,CAE5B,MAAMmmP,EAAermP,KAAKskP,WAAW39G,MAAKi6B,GAASA,aAAiBoiF,KASpE,OARIqD,EACAA,EAAapD,aAAajjP,KAAK0lP,qBAG3B1lP,KAAK0lP,qBACL1lP,KAAKskP,WAAW3pO,KAAK,IAAIqoO,GAAahjP,KAAKwL,SAAUxL,KAAK0lP,sBAG3D1lP,KAAKskP,UAChB,CAUA,OAPItkP,KAAK0kP,yBAA2B1kP,KAAKwL,SAASye,cAAcC,KAAK46N,gBACjE9kP,KAAKskP,WAAW3pO,KAAK,IAAIqpO,GAAoBhkP,KAAKwL,SAAUxL,KAAKwL,SAASye,cAAcC,KAAK46N,iBAE7F9kP,KAAK0lP,qBACL1lP,KAAKskP,WAAW3pO,KAAK,IAAIqoO,GAAahjP,KAAKwL,SAAUxL,KAAK0lP,sBAGvD1lP,KAAKskP,UAChB,CAEQiB,2BAAAA,GACJ,OAAOvlP,KAAKskP,WAAW14L,SAAQg1G,IAAWA,EAAMkiF,YAAa,CAAK,GACtE,CAEA,wBAAM0C,GAIF,MAAMc,EAAStmP,KAAKomP,gBACpB,IAAIG,EAAwB,KAC5B,IAAK,MAAM3lF,KAAS0lF,EAChB,SAAU1lF,EAAM+hF,kBACZ,IAEI,MAAMp2N,QAAmBvsB,KAAKwL,SAAS+gB,WAEvC,SAD+BA,EAAWC,WAAWo0I,EAAMx0I,UACrC,CAClBm6N,EAAgB3lF,EAChB,KACJ,CACJ,CAAE,MAAA4lF,GACE,CAMZxmP,KAAKmmP,qBAAqBI,EAC9B,CAEA,iCAAcE,GACV,IACI,MAAMC,QAAmB1mP,KAAKwL,SAASonH,IAAIm0F,uBAAuBnD,4BAClE,OAAO7+M,EAAAA,MAAMgrE,QAAQ22K,IAAeA,EAAWxmP,QAAU,CAC7D,CACA,MAAOwO,GAEH,OAAO,CACX,CACJ,CAEQ42O,iCAAAA,GACAtlP,KAAK0kP,yBACL1kP,KAAKymP,8BAA8BllO,MAAKolO,IAEhC3mP,KAAKwL,SAASkE,KAAKC,cACnB3P,KAAKmlP,+BAA+BwB,EACxC,GAGZ,CAEA,8BAAI1C,GACA,OAAOjkP,KAAKolP,2BAChB,CAIArkF,cAAAA,CAAeH,EAAev6J,GAAmC,IAADugP,EAC5D5mP,KAAK+/J,oBACL//J,KAAKukP,YAAc3jF,EACnB5gK,KAAKukP,YAAYzB,YAAa,EAE9B,MAAM9qN,EAAgBh4B,KAAKwL,SAAS4vB,OAAOgiB,WAAU,IAC1Cp9C,KAAK6mP,cAAcjmF,IAC3B,CACCn4J,MAAO,IACP28C,SAAUA,KACNplD,KAAK+/J,qBACE,OAAP15J,QAAO,IAAPA,OAAO,EAAPA,EAASy6J,iBAAwB,OAAPz6J,QAAO,IAAPA,GAAAA,EAASy6J,gBAAe,EAEtDxlI,iBAAiB,EACjByoK,4BAA4B,EAC5Bn7I,yBAAyB,EACzBQ,qBAAqB,EACrBs7I,kBAAkB,EAClBvlB,gBAAgB,EAChB9hI,eAAsC,QAAxBupM,EAAEvgP,EAAQg3C,sBAAc,IAAAupM,GAAAA,EACtCrpM,yBAAyB,EACzBymJ,2BAA2B,IAG/BhkM,KAAK8mP,iBAAiB9uN,EAC1B,CAEQ6uN,aAAAA,CAAcjmF,GAClB,OACIlhK,EAAAA,GAAAA,KAACwkP,GAAoB,CAACvkP,UAAW,8BAA8BI,UAC3DL,EAAAA,GAAAA,KAACwiB,GAAAA,EAAkB,CACC7H,WAAYumJ,EAAMx0I,SAAS/R,WAC3BC,YAAasmJ,EAAMx0I,SAAS9R,YAC5BE,iBAAiB,GAAM,wBAAA5a,OAHMghK,EAAMrxI,MAMnE,CAMQu3N,gBAAAA,CAAiBnB,GACrB3lP,KAAK2lP,aAAeA,CACxB,CAEA,kBAAI7lF,GACA,OAAQ/6J,EAAAA,MAAMkP,kBAAkBjU,KAAK2lP,aACzC,CAEA,uBAAIrlF,GAAgC,IAADymF,EAAAC,EAC/B,OAA8C,QAA9CD,EAAuB,QAAvBC,EAAOhnP,KAAKukP,mBAAW,IAAAyC,OAAA,EAAhBA,EAAkB1mF,6BAAqB,IAAAymF,GAAAA,CAClD,CAKQd,eAAAA,GACJjmP,KAAKwkP,2BAA4B37C,EAAAA,GAAAA,GAAgB,4BAA4BnpL,gBACnE1f,KAAKgmP,yBACXhmP,KAAKykP,iDAAkD,CAAI,GAC5D,IACP,CAEA,4BAAcuB,GACV,MAAMplF,EAAQ,IAAIujF,GAAkBnkP,KAAKwL,SAAUxL,KAAKwL,SAASye,cAAcC,KAAK86N,mBAE9Ez4N,QAAmBvsB,KAAKwL,SAAS+gB,WAEvC,UAD+BA,EAAWC,WAAWo0I,EAAMx0I,UAGvD,YADApsB,KAAKwL,SAAS2L,OAAOxI,MAAM,iEAADzJ,EAAAA,EAAAA,GAAC,CAAD,EAAsElF,KAAKwL,SAASye,cAAcC,KAAK86N,oBAIrI,UAAWpkF,EAAM+hF,kBACb,OAGJ3iP,KAAKwL,SAASqd,UAAU4tB,wBAAwByoC,GAAAA,GAAqCsU,WAAY,OAAQtf,GAAAA,GAAkC+yK,cAE3I,MAAM5gP,EAA6B,CAC/By6J,cAAeA,KACX9gK,KAAKwL,SAAS2iC,WAAW5sB,MAAK4sB,IAAe,IAAD+4M,EAAAC,EACxC,MAAMnxO,GAAYgtB,EAAAA,GAAAA,IAAyE,QAAlDkkN,EAA2C,QAA3CC,EAACh5M,EAAW6kH,eAAeo0F,wBAAgB,IAAAD,OAAA,EAA1CA,EAA4C1+O,aAAK,IAAAy+O,EAAAA,EAAI,IAC/FlnP,KAAKwL,SAASqd,UAAU4tB,wBAAwByoC,GAAAA,GAAqCsU,WAAW,GAAD5zF,OAAKoW,EAAS,UAAUk+D,GAAAA,GAAkC+yK,aAAa,GACxK,EAGN5pM,gBAAgB,GAEpBr9C,KAAK+gK,eAAeH,EAAOv6J,EAC/B,CAEA05J,iBAAAA,GACQ//J,KAAKwkP,4BACLv6M,aAAajqC,KAAKwkP,2BAClBxkP,KAAKwkP,0BAA4B,GAGjCxkP,KAAK2lP,eACL3lP,KAAK2lP,aAAa1tN,QAClBj4B,KAAK8mP,iBAAiB,MACtB9mP,KAAKukP,YAAc,KAE3B,GACH/rO,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iCAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAvV4C,CAAM,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,+BAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGC,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,0BAAApE,IAAAyE,OAAAC,yBAAA5J,GAAAsJ,UAAA,0BAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kCAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,kCAAAtJ,GAAAsJ,WAAAsI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAsIhB,IAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,wBAAAkI,IAAA7H,OAAAC,yBAAA5J,GAAAsJ,UAAA,wBAAAtJ,GAAAsJ,WAAAqM,IAAAtM,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAAolC,IAAA,CAAAnlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBASS,IAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,yBAAAqlC,IAAAhlC,OAAAC,yBAAA5J,GAAAsJ,UAAA,yBAAAtJ,GAAAsJ,WAAAsM,IAAAvM,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAAslC,IAAA,CAAArlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAmIV,IAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAAAulC,IAAAllC,OAAAC,yBAAA5J,GAAAsJ,UAAA,oBAAAtJ,GAAAsJ,WAAAtJ,IClS5C4M,eAAe2nO,GAAsBhhP,GACxC,MAAM,KAACihP,EAAI,UAAEhmJ,SATjB5hF,iBAKI,MAAO,CAAC4nO,WAJW,iGAILhmJ,gBADU,iGAE5B,CAGoCimJ,GAChC,IAAInmJ,EAAM,IAAIkmJ,EAAKE,YAAY,CAC3BC,gBAAiB,EACjB/lP,MAAO2E,EAAQ3E,MACfL,OAAQgF,EAAQhF,OAChBqmP,WAAW,EACXC,cAAethP,EAAQyf,uBAG3B,MAAMzH,EAAUA,KACZ,IACI+iF,EAAIe,KAAK72D,oBAAoB,mBAAoBs8M,GAAoB,GACrExmJ,EAAIymJ,OACJzmJ,EAAIz2C,SAAQ,GAAM,GAClBy2C,OAAMjhG,CACV,CAAE,MAAOuO,GACLjK,QAAQkK,MAAM,qCAAsCD,EACxD,GAIEk5O,EAAsBE,IACpBzhP,EAAQw5F,eACRx5F,EAAQw5F,gBAERx5F,EAAQ0hP,0BACR1pO,GACJ,EAKJ,OAFA+iF,EAAIe,KAAKtjE,iBAAiB,mBAAoB+oN,GAAoB,GAE3D,CAACxmJ,MAAKG,OAAQH,EAAIe,KAAM9jF,UAASijF,YAC5C,CCvCO,MAAM0mJ,WAAuBtpK,EAAAA,EAGhC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAHZy8O,qCAA+B,EAInCjoP,KAAKioP,gCAAkCjoP,KAAKwL,SAAS08O,oBAAoBC,YAA2Dd,GACxI,CACO7lJ,aAAAA,CAAcn7F,GACjB,OAAIA,EAAQyf,qBACDuhO,GAAsBhhP,GAE1BrG,KAAKioP,gCAAgC5hP,EAChD,CAEOq7F,aAAAA,CAActmB,EAAsB+kB,GACvC,OAAO,IAAInlE,SAA4D,CAACqlF,EAAKC,KACzEngB,EAAcv0C,SAAQjtD,IAAsB,IAArB,KAAConB,EAAI,QAAEC,GAAQrnB,EAClCy8E,EAAQgtK,OAAOr6K,IAAIhoD,EAAMC,EAAQ,IAErCo1D,EAAQgtK,OAAOv9L,MAAKnrC,MAAO0oO,EAAQ3mJ,KAM/BtB,EAAcv0C,SAAQtpD,IAAsB,IAArB,KAACyjB,EAAI,QAAEC,GAAQ1jB,EAC7Bm/F,EAAU17E,GAAMk6B,WACjBqgE,EAAI,+CAA+Ct6F,EACvD,IAEJq6F,EAAI,CAAC+nI,SAAQ3mJ,aAAW,GAC1B,GAEV,E,4BCzBG,MAAM4mJ,WAAwC5oJ,GAAAA,EAMjD1sF,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KANZ88O,qBAAoD,KAAK,KACzDC,gBAAkB,IAAIhoE,IAA6C,KACnEioE,cAAwB,EAAM,KAC9BC,sBAAgC,EAAK,KAoCrCC,qBAAuB,CAAC/uM,EAAsCp6C,KAClEo6C,EAAQiS,SAASx9C,IACb,IAAKpO,KAAKuoP,gBAAgBvsC,IAAI5tM,EAAMlE,QAEhC,OAEJ,MAAMy+O,EAAiB3oP,KAAKuoP,gBAAgBv+J,IAAI57E,EAAMlE,QAClDkE,EAAMZ,eAENm7O,EAAe5gN,YAAa,GAG5B4gN,EAAe5gN,YAAa,EAExB4gN,EAAe/yN,mBACf+yN,EAAe/yN,kBAAkBC,GAAAA,EAAyB+yN,eAElE,IAEJ5oP,KAAK6oP,yBAAyB,EAChC,KAsBMC,qBAAe,OACfC,kBAA4B,EAAM,KAClCC,yBAAmC,EAAM,KACzCH,wBAA0B,KACzB7oP,KAAKyoP,uBAINzoP,KAAK+oP,iBACL/oP,KAAKgpP,yBAA0B,GAI/BhpP,KAAK8oP,kBACL7+M,aAAajqC,KAAK8oP,iBAClB9oP,KAAK8oP,qBAAkB3oP,GAE3BH,KAAK8oP,gBAAkB3+M,YAAWzqB,UAI9B,GAHA1f,KAAK+oP,kBAAmB,GAGnB/oP,KAAKwoP,aAAc,CACpB,IAAIS,EAA+B,EAC/BC,EAAkD,GAWtD,GATAlpP,KAAKuoP,gBAAgB38L,SAAS+8L,KACtBA,EAAe/oJ,WAAc+oJ,EAAe/oJ,UAAUr6E,SAAWC,GAAAA,EAAgBE,SAAWijO,EAAe/oJ,UAAUr6E,SAAWC,GAAAA,EAAgBC,QAEzIkjO,EAAe5gN,YACtBmhN,EAAgBvuO,KAAKguO,GAFrBM,GAGJ,IAIAA,EA1HO,EA2HPjpP,KAAKwL,SAAS2L,OAAOxI,MAAM,0CAA0Cs6O,EAA1C,sCACxB,GAAIA,EA5HA,EA4HmD,CAC1D,IAAIE,EA7HG,EA6HmCF,GAC1CG,EAAAA,GAAAA,IAAQF,GACR,IAAK,IAAI5jP,EAAE,EAAGA,EAAE+Q,KAAKuK,IAAIsoO,EAAgBhpP,OAAQipP,GAAiB7jP,IAAK,CACnE,MAAMqjP,EAAiBO,EAAgB5jP,GACvCtF,KAAK0/F,iBAAiBipJ,EAAgB,2BAC1C,CACJ,CACJ,CAEA3oP,KAAK8oP,qBAAkB3oP,EACvBH,KAAK+oP,kBAAmB,EACpB/oP,KAAKgpP,0BACLhpP,KAAKgpP,yBAA0B,EAC/BhpP,KAAK6oP,0BACT,GACD,MAAI,EA9HP7oP,KAAKsoP,qBAAuB,IAAIn6O,qBAAqBnO,KAAK0oP,qBAAsB,CAC5E76O,UAAW,KAKfrC,EAAS63E,IAAIoxC,OAAOG,YAAW,KAC3B50H,KAAKwoP,cAAe,EACpBxoP,KAAKuoP,gBAAgB38L,SAAS+8L,IACtBA,EAAe/yN,mBACf+yN,EAAe/yN,kBAAkBC,GAAAA,EAAyBwiH,UAC9D,GACF,IAKN7sI,EAAS63E,IAAIoxC,OAAOye,aAAY,KAC5BlzI,KAAKwoP,cAAe,EACpBxoP,KAAK6oP,yBAAyB,IAGlC7oP,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAAc,KACjD3P,KAAKyoP,qBAAuBzoP,KAAKwL,SAASoL,WAAWrI,QAAQinO,0BACzDx1O,KAAKyoP,sBACLzoP,KAAK6oP,yBACT,GACD,CACC3sO,iBAAiB,GAEzB,CA2BOopD,QAAAA,CAASj/D,GAIZ,OAHArG,KAAKuoP,gBAAgB7sK,IAAIr1E,EAAQsvB,QAAStvB,GAC1CrG,KAAKsoP,qBAAqB95O,QAAQnI,EAAQsvB,SAEnC,CACHwvC,WAAYA,KACR,GAAInlE,KAAKuoP,gBAAgBvsC,IAAI31M,EAAQsvB,SAAU,CAC3C,MAAMgzN,EAAiB3oP,KAAKuoP,gBAAgBv+J,IAAI3jF,EAAQsvB,SACxD31B,KAAKuoP,gBAAgBc,OAAOhjP,EAAQsvB,SACpC31B,KAAKsoP,qBAAqBnxM,UAAU9wC,EAAQsvB,SACxCgzN,EAAe/yN,mBACf+yN,EAAe/yN,kBAAkBC,GAAAA,EAAyBC,UAElE,GAGZ,ECzFG,MAAMwzN,WAAmC5qK,EAAAA,EAAmD3rE,WAAAA,GAAA,SAAA9S,WAAA,KACvFspP,gBAAkB,CAAE,CAErBpB,WAAAA,CAAmDqB,GACtD,OAAO9pO,UAGH,GAAI1f,KAAKupP,iBAAmB,EACxB,OAAOvuN,QAAQkmK,OAAO,2BAE1BlhM,KAAKupP,kBACL,IACI,MAAM7zL,QAAwB8zL,EAAUnjP,GAClCw5F,EAAgBA,KAClB7/F,KAAKupP,iBAAiB,EAG1B,OADA7zL,EAAO6rC,OAAO1iE,iBAAiB,mBAAoBghE,IACnD36F,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOwwD,GAAM,IACTr3C,QAASA,KACLq3C,EAAO6rC,OAAOj2D,oBAAoB,mBAAoBu0D,GAKtD,MAAM4pJ,EAAgB/zL,EAAO6rC,OAAOmoJ,WAAW,UACzCC,EAAgBj0L,EAAO6rC,OAAOmoJ,WAAW,UACpBD,EAAgBA,EAAcG,iBAAoBD,GAAgBA,EAAcC,kBAEvG5pP,KAAKupP,kBAET7zL,EAAOr3C,SAAS,GAG5B,CAAE,MAAO7Z,GAEL,MADAxE,KAAKupP,kBACC/kP,CACV,EAER,E,UCzCG,IAAeqlP,IAAkB/2O,GAAjC,cAA0C4rE,EAAAA,EAC7C3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,iBAAAC,GAAA,OAChBQ,EAAAA,EAAAA,IAAehZ,MACfwL,EAASs+O,QAAQ5rD,iBAAiBl+L,KACtC,CAIA,YAAI+pP,GACA,OAAO/pP,KAAKgqP,SAChB,CAEA12E,gBAAAA,GACI,CAGJid,gBAAAA,GACI,MAAMw5D,EAAW/pP,KAAKgqP,UAAUvqO,QAAOg4E,IAEnC,MAAMwyJ,EAAcxyJ,EAAEwyJ,YAChBtlN,EAAgB8yD,EAAE9yD,gBACxB,OAAOslN,GAAetlN,CAAa,IAGvC,GAAuB,IAApBolN,EAAS7pP,OAIZ,OAAOmW,KAAK09B,OAAOg2M,EAASx5O,KAAIknF,GAAKA,EAAE50E,UAAW,CACtD,CAEA,gBAAI07K,GAOA,OANiBv+L,KAAKgqP,UAAUvqO,QAAOg4E,IAEnC,MAAMwyJ,EAAcxyJ,EAAEwyJ,YAChBtlN,EAAgB8yD,EAAE9yD,gBACxB,OAAOslN,GAAetlN,CAAa,IAEvBzkC,OAAS,CAC7B,GAEHsY,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAnCItE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAC4B,EAAG,IAAD1J,I,4BCXtC,MAAMo3O,GAA4B,CACrCnkO,KAAM,aACNmwC,SAAS,EACTi0L,MAAO,cACPC,iBAAkB,CAAC,UACnBC,EAAAA,CAAGngO,GACC,MAAM,OAACuwD,EAAM,cAAE6vK,GAAiBpgO,EAAKxD,MAGrC+zD,EAAO8vK,OAAS,CACZ16O,IAAKwG,KAAKsD,MAAM2wO,EAAcE,cAAc/uK,GAAK,KACjDhS,KAAMpzD,KAAKsD,MAAM2wO,EAAcE,cAAcl6O,GAAK,KAE1D,GAGSm6O,GAA+B,CACxC1kO,KAAM,gBACNmwC,SAAS,EACTi0L,MAAOO,GAAAA,GACPL,GAAI,SAASngO,GACT,MAAMygO,EAAczgO,EAAKxD,MAAMkkO,MAAML,OAAO7oP,MACtCmpP,EAAe3gO,EAAKxD,MAAMkkO,MAAML,OAAOlpP,QACvC,OAACo5E,EAAM,SAAEqwK,GAAY5gO,EAAKxD,MAEhCwD,EAAK7jB,QAAQ0kP,UAAW,EAExB7gO,EAAKxD,MAAMwuJ,SAAW,QACtBhrJ,EAAKxD,MAAMxe,UAAY,SAEvBuyE,EAAO8vK,OAAS,CACZ16O,IAAMC,OAAOC,YAAc86O,EAAe,GAAM,KAChDphL,MAAOz7D,SAASg9O,gBAAgBC,YAAcN,GAAe,EAAI,MAGrElwK,EAAOywK,MAAQ,CACXt2M,OAAQ,OACR60B,MAAOkhL,EAAcG,EAASI,MAAMD,aAAe,EAAI,KACvDp7O,IAAK,OAEb,GAGSs7O,GAAwB,CACjCplO,KAAM,SACN1f,QAAS,CACLmoG,OAAQ,CAAC,GAAI,MAIR48I,GAAsB,CAC/BrlO,KAAM,OACN1f,QAAS,CACLogD,QAAS,IAIJ4kM,GAAiC,CAC1CtlO,KAAM,kBACN1f,QAAS,CACLogD,QAAS,I,aCpDV,IAAe6kM,IAAgBzzO,GAyBjCC,EAAAA,GAAWxK,IAAGwF,GAzBZ,MACHC,WAAAA,CAA+BvH,EACAnF,GAAoB,KADpBmF,SAAAA,EAAiC,KACjCnF,QAAAA,EAAiB,KAOxCklP,wBAA2BvkO,IAC5BhnB,KAAKqG,QAAQmlP,qBAAuBxrP,KAAKyrP,mBAAqBzrP,KAAKyrP,iBAAiB14D,SAAS/rK,EAAM9c,SAClGlK,KAAK0rP,cACT,EACH,KAEQn8N,QAAE,OAEHo8N,sBAAgD,GAAG,KAEnDC,kBAAyB,KAAK,KAC5BC,gBAAuB,MAAItzO,EAAAA,EAAAA,GAAA,wBAAAC,GAAA,OAhBjCQ,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKuvB,IAAK0yL,EAAAA,GAAAA,IACd,CAqBAt9K,aAAAA,GACI,OAAO,CACX,CAGAmnN,iBAAAA,CAAkBL,IAEd7hO,EAAAA,EAAAA,KAAY,KACR5pB,KAAKyrP,iBAAmBA,CAAgB,IAGzCzrP,KAAKqG,QAAQ0lP,mBACZ/rP,KAAKqG,QAAQ0lP,oBAGbhnP,EAAAA,MAAMkP,kBAAkBjU,KAAKqG,QAAQ4d,WACrCjkB,KAAK4rP,mBAAoB/iD,EAAAA,GAAAA,GAAgB,uBAAuB,IAAM7oM,KAAK0rP,gBAAgB1rP,KAAKqG,QAAQ4d,QAAQy8F,oBAGjH1gH,KAAKqG,QAAQmlP,qBACZxrP,KAAK2rP,sBAAsBhxO,KAAK3a,KAAKwL,SAAS4iI,IAAIC,YAAY29G,MAAMhsP,KAAKurP,yBAEjF,CAEA,eAAIU,GACA,OAAO9hP,QAAQnK,KAAKqG,QAAQ4lP,YAChC,CAEA,UAAIppO,GACA,OAAG9d,EAAAA,MAAMkP,kBAAkBjU,KAAKqG,QAAQwc,QAC7B,IAGR7iB,KAAKqG,QAAQ4jP,YACLjqP,KAAKqG,QAAQwc,OAAS,EAG1B7iB,KAAKqG,QAAQwc,MACxB,CAEA,YAAIqjC,GACA,QAAGnhD,EAAAA,MAAMkP,kBAAkBjU,KAAKqG,QAAQ6/C,WAIjClmD,KAAKqG,QAAQ6/C,QACxB,CAEA,WAAIgmM,GACA,QAAGnnP,EAAAA,MAAMkP,kBAAkBjU,KAAKqG,QAAQ6lP,UAIjClsP,KAAKqG,QAAQ6lP,OACxB,CAEA,yBAAIC,GACA,OAAOhiP,QAAQnK,KAAKqG,QAAQ+lP,gBAChC,CAEA,2BAAIC,GACA,OAAOliP,QAAQnK,KAAKqG,QAAQgmP,wBAChC,CAGA,WAAIC,GACA,OAAOtsP,KAAKqG,QAAQimP,OACxB,CAEA,eAAIrC,GACA,OAAO9/O,QAAQnK,KAAKqG,QAAQ4jP,YAChC,CAEQsC,oBAAAA,CAAqBC,GAEzB,OAAOC,EAAAA,GAAAA,IAAaD,EAAiBxsP,KAAKyrP,iBAAkB,CACxDvjP,UAAWlI,KAAKqG,QAAQ6B,WAAa,OACrCgtK,SAAUl1K,KAAKqG,QAAQ6uK,UAAY,QACnCw3E,UAAW,CACPrB,GACAD,GACAD,MACInrP,KAAKqG,QAAQqmP,WAAa,KAG1C,CAEAjtP,MAAAA,GACI,IAAIO,KAAKyrP,iBACL,OAAO,KAGX,IAAIe,EAAkBxsP,KAAK2sP,sBAW3B,OAVIH,IACAA,EAAkBxsP,KAAKwL,SAAS4iI,IAAI/qF,MAGrCrjD,KAAK6rP,iBACJ7rP,KAAK4sP,yBAGT5sP,KAAK6rP,gBAAkB7rP,KAAKusP,qBAAqBC,GAE1CxsP,KAAKqG,QAAQ2pL,eAExB,CAEQ48D,sBAAAA,GACD5sP,KAAK6rP,kBACJ7rP,KAAK6rP,gBAAgBlhM,UACrB3qD,KAAK6rP,gBAAkB,KAE/B,CAEQgB,yBAAAA,GACJ7sP,KAAK2rP,sBAAsB//L,SAAQ3hD,GAAMA,EAAGoU,YAC5Cre,KAAK2rP,sBAAwB,EACjC,CAEQmB,sBAAAA,GACD9sP,KAAK4rP,oBACJ3hN,aAAajqC,KAAK4rP,mBAClB5rP,KAAK4rP,kBAAoB,KAEjC,CAEQmB,QAAAA,GACJ/sP,KAAK8sP,yBAEL9sP,KAAK4sP,yBAEL5sP,KAAK6sP,6BAELjjO,EAAAA,EAAAA,KAAY,KACR5pB,KAAKyrP,iBAAmB,IAAI,GAEpC,CAEAC,YAAAA,GACI1rP,KAAK+sP,WAEF/sP,KAAKqG,QAAQ2mP,iBACZhtP,KAAKqG,QAAQ2mP,iBAErB,GAEHx0O,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA1J,IClLM,MAAMm6O,WAA4B3B,GAErCv4O,WAAAA,CAAYm6O,EACA1hP,EACAnF,GACR+R,MAAM5M,EAAUnF,GAAS,KAOpB6mP,uBAAiB,GALtBl0O,EAAAA,EAAAA,IAAehZ,MACfA,KAAKktP,kBAAoBA,CAE7B,CAIUP,mBAAAA,GACN,OAAG5nP,EAAAA,MAAM+qE,SAAS9vE,KAAKqG,QAAQ8mP,UACpBntP,KAAKwL,SAAS4iI,IAAIxvG,cAAc5+B,KAAKqG,QAAQ8mP,UAGjDntP,KAAKqG,QAAQ8mP,QACxB,CAEAzB,YAAAA,GACItzO,MAAMszO,eACN1rP,KAAKktP,kBAAkBE,cAAcptP,KACzC,E,UCvBG,IAAMqtP,IAAsBx1O,GA2B9BI,EAAAA,GAAOC,MAAKpF,GA3BV,cAAqC+2O,GAExC92O,WAAAA,CAAYvH,GACR4M,MAAM5M,IACNwN,EAAAA,EAAAA,IAAehZ,KACnB,CAEAotP,aAAAA,CAAchmP,GACV,MAAMi8B,EAAQrjC,KAAK+pP,SAASp/J,WAAU8M,GAAKA,EAAEloE,KAAOnoB,EAAQmoB,KACzD8T,GAAS,IACRzZ,EAAAA,EAAAA,KAAY,KACR5pB,KAAK+pP,SAAS1pN,OAAOgD,EAAO,EAAE,GAG1C,CAEUiqN,yBAAAA,CAA0BjnP,GAQhC,OAPAA,GAAOnB,EAAAA,EAAAA,GAAA,CACH+kP,aAAa,EACbmC,iBAAiB,EACjBZ,qBAAqB,EACrBtlM,UAAU,GACP7/C,EAGX,CAGAknP,WAAAA,CAAYlnP,GACRA,EAAUrG,KAAKstP,0BAA0BjnP,GACzC,MAAMmnP,EAAe,IAAIP,GAAoBjtP,KAAMA,KAAKwL,SAAUnF,GAElE,OADArG,KAAK+pP,SAASpvO,KAAK6yO,GACZA,CAEX,IACHrxO,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,eAAAvE,IAAA4E,OAAAC,yBAAA5J,GAAAsJ,UAAA,eAAAtJ,GAAAsJ,WAAAtJ,I,wCC9BM,IAAe26O,IAAyB51O,GAqB1CI,EAAAA,GAAOC,MAAKH,GAWZE,EAAAA,GAAOC,MAAKF,GAOZF,EAAAA,GAAWxK,IAAG8W,GAIdtM,EAAAA,GAAWxK,IAAG+W,GAedvM,EAAAA,GAAWxK,IAAGgX,GAMdrM,EAAAA,GAAOC,MAAKspC,GAKZ1pC,EAAAA,GAAWxK,IAAGwF,GArEZ,MAGHC,WAAAA,CAA+BvH,EAAoDkiP,GAAmB,KAAvEliP,SAAAA,EAAiC,KAAmBkiP,SAAAA,EAAgB,KAWlFC,+BAAyB,OAMlCC,qBAA+B,IAAEr1O,EAAAA,EAAAA,GAAA,cAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,sBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,kBAAAmM,GAAA,OAAAnM,EAAAA,EAAAA,GAAA,gBAAAkQ,GAAA,OAhBrCzP,EAAAA,EAAAA,IAAehZ,MACfA,KAAK2tP,0BAA4B3tP,KAAK6tP,iCAC1C,CAUA,iBAAIC,GACA,MAAO,CAAC,GAAI,GAAI,GACpB,CAIAC,sBAAAA,CAAuBC,GACfA,IAAiBhuP,KAAK4tP,uBAG1B5tP,KAAK2tP,0BAA0BI,uBAAuBC,GACtDhuP,KAAK4tP,qBAAuBI,EAC5BhuP,KAAKiuP,eACLjuP,KAAKkuP,eACT,CAGQD,YAAAA,GACJjuP,KAAKmuP,SAAW,GAChBnuP,KAAKouP,OAAS,KACdpuP,KAAKquP,eAAiB,CAC1B,CAUA,sBAAIC,GACA,OAAKtuP,KAAKouP,QAGHpuP,KAAKquP,eAAiBruP,KAAKouP,OAAOluP,MAC7C,CAEA,kBAAIquP,GACA,OAAOvuP,KAAKsuP,oBAAsBtuP,KAAK2tP,0BAA0BY,cACrE,CAIA,aAAI9iM,GACA,OAAOzrD,KAAKwuP,YAAcxuP,KAAK2tP,0BAA0BliM,SAC7D,CAGQ0qE,aAAAA,CAAcrsH,GAClB9J,KAAKwuP,WAAa1kP,CACtB,CAIA,WAAI2kP,GACA,MAAO,IACAzuP,KAAKmuP,YACLnuP,KAAK2tP,0BAA0Bc,QAE1C,CAEQC,sBAAAA,GACJ,GAA4B,IAAxB1uP,KAAKquP,eACL,MAAO,CACHM,aAAc3uP,KAAK4tP,qBACnBF,SAAU1tP,KAAK0tP,SACfkB,WAAY,GAIpB,MAAMC,EAAW7uP,KAAKouP,OAAOpuP,KAAKquP,gBAClC,MAAO,CACHM,aAAc3uP,KAAK4tP,qBACnBgB,WAAY5uP,KAAKquP,eAAiB,EAClCX,SAAU1tP,KAAK0tP,SACfoB,WAAYD,EAASE,WACrBC,QAASH,EAASI,QAClBC,QAASL,EAASM,QAI1B,CAIA,mBAAcC,CAAcC,GACxB,MAAM35L,EAAmB,CAAC,EACpB45L,EAA6B,GAYnC,GAVAD,EAAeE,gBAAgB3jM,SAAQ4jM,IACnC,MAAMz6O,EAAW/U,KAAKyvP,uBAAuBD,GACvCv8O,EAAWjT,KAAKwL,SAAS2P,MAAMC,SAASrG,GAC1C9B,EACAyiD,EAAOziD,EAAS8B,UAAY9B,EAE5Bq8O,EAAiB30O,KAAK5F,EAC1B,IAGAu6O,EAAiBpvP,OAAS,EAAG,CAC7B,MAAMkb,QAAiBpb,KAAKwL,SAAS2P,MAAM4mH,uBAAuButH,GAClE7yO,OAAOspC,KAAK3qC,GAAUwwC,SAAQ72C,IAC1B2gD,EAAO3gD,GAAYqG,EAASrG,EAAS,GAE7C,CAEA,OAAO2gD,CACX,CAIA,kBAAMw4L,GAEF,IAAIluP,KAAKyrD,UAAT,CAcAzrD,KAAKm2H,eAAc,GAEnB,IACI,MAAM09E,EAAU7zM,KAAK0uP,yBACfW,QAAuBrvP,KAAK0vP,aAAa77C,GACzCz4L,QAAiBpb,KAAKovP,cAAcC,GAEpCM,EAA6B,GAEnC,IAAK,IAAIC,KAAcP,EAAeE,gBAAiB,CACnD,MACMt8O,EAAWmI,EADApb,KAAKyvP,uBAAuBG,IAE7C,GAAI38O,EAAU,CACV,MAAM48O,cAAuB7vP,KAAKwL,SAASskP,WAAWC,oBAAoB98O,EAAS2lE,aACnF+2K,EAAWh1O,KAAK3a,KAAKgwP,mBAAmB/8O,EAAU48O,EAASD,GAC/D,MACI5vP,KAAKwL,SAAS2L,OAAOxI,MAAM,yCAAD/O,OAA0CI,KAAKiwP,sBAAsBL,GAAW,gBAElH,EAGAhmO,EAAAA,EAAAA,KAAY,KACoB,IAAxB5pB,KAAKquP,iBACLruP,KAAKouP,OAASiB,EAAea,YAEjClwP,KAAKmuP,SAAW,IACTnuP,KAAKyuP,WACLkB,GAGP3vP,KAAKquP,gBAAgB,IAGrBruP,KAAKsuP,0BACCtuP,KAAK2tP,0BAA0BO,cAG7C,CAAC,QACGluP,KAAKm2H,eAAc,EACvB,CAnDA,CAoDJ,IACHh6G,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,0BAAAvE,IAAA4E,OAAAC,yBAAA5J,GAAAsJ,UAAA,0BAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,gBAAAtJ,GAAAsJ,WAAA5D,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,UAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAjJ+C,IAAK,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBAAAgI,IAAA,CAAA/H,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAIvB,CAAE,IAADkI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,cAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAeI,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iBAAAkI,IAAA7H,OAAAC,yBAAA5J,GAAAsJ,UAAA,iBAAAtJ,GAAAsJ,WAAAqM,IAAAtM,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAAAolC,IAAA,CAAAnlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAWG,EAAG,IAAD1J,IC7ErC,MAAeq9O,GAClBp9O,WAAAA,CAAgCvH,EACAyH,EACD48O,EACAD,GAA6B,KAH5BpkP,SAAAA,EAAiC,KACjCyH,SAAAA,EAAkB,KACnB48O,QAAAA,EAA+B,KAC/BD,WAAAA,CAE/B,CAYA,YAAIzsN,GACA,OAAOnjC,KAAKiT,SAASxK,KACzB,CAEA,aAAIwN,GACA,OAAOjW,KAAKiT,SAASu7E,sBACzB,CAEA,8BAAI5nB,GACA,OAAO5mE,KAAKiT,SAAS2zD,2BAA2B5mE,KAAKwL,SAAStN,MAAM6jC,qBACxE,CAEUquN,YAAAA,CAAatmP,GACnB,OAAO9J,KAAKwL,SAASwJ,SAASC,YAAYnL,EAC9C,CAEA,eAAc8L,GACV,OAAO5V,KAAKwL,SAASoK,WACzB,CAEA,yBAAIy6O,GACA,OAAOrwP,KAAKswP,2BAChB,CAEA,eAAIC,GACA,OAAOpmP,QAAQnK,KAAKwL,SAAS2P,MAAMC,SAASpb,KAAKiT,SAAS8B,UAC9D,CAEA,cAAMy7O,GACExwP,KAAKuwP,oBAGHvwP,KAAKiT,SAASO,KAAK,CACrBL,YAAY,EACZukE,sBAAsB,IAG1B13E,KAAKwL,SAASqd,UAAUkd,uBAAuB,uBAAwB,YAAa/lC,KAAKiT,SAASxK,MAAOzI,KAAKiT,SAAS8B,UAE3H,EC1DG,MAAM07O,WAAqCN,GAC9C,QAAI9kO,GACA,OAAGrrB,KAAK4vP,WAAWc,eACR1wP,KAAKwL,SAAS8e,KAAK+0K,4BAA4Br/L,KAAK4vP,WAAWc,gBAAiB,GAEhF1wP,KAAKwL,SAAS8e,KAAK+0K,4BAA4Br/L,KAAK4vP,WAAW9yL,MAAO,EAErF,CAEA,OAAI6zL,GACA,OAAG3wP,KAAK4wP,gBAAkB5wP,KAAK6wP,uBACpB,CACH,CACI/uP,KAAM9B,KAAK4V,YAAYC,UAAU,kBAAmB,CAACi7O,UAAW9wP,KAAK4wP,iBACrE7mP,SAASjK,EAAAA,GAAAA,IAAQ,iCAErB,CACIgC,KAAM9B,KAAK4V,YAAYC,UAAU,wBAAyB,CAACk7O,gBAAiB/wP,KAAK6wP,yBACjF9mP,SAASjK,EAAAA,GAAAA,IAAQ,wCAItB,CACH,CACIgC,KAAM9B,KAAK4vP,WAAWoB,OACtBjnP,SAASjK,EAAAA,GAAAA,IAAQ,+BAG7B,CAEUwwP,yBAAAA,GACN,OAAOtwP,KAAK4vP,WAAWqB,0BAChBjxP,KAAKkxP,4CACLlxP,KAAK6vP,QAAQsB,2BAA2BnxP,KAAK4vP,WACxD,CAEA,iBAAIwB,GACA,OAAIpxP,KAAK4vP,WAAWyB,SAIbrxP,KAAK4V,YAAYC,UAAU,yCAHvB,IAIf,CAEA,oBAAYy7O,GACR,OAAQvsP,EAAAA,MAAMkP,kBAAkBjU,KAAK4vP,WAAW2B,yBACxCxsP,EAAAA,MAAMkP,kBAAkBjU,KAAK4vP,WAAW4B,sBACpD,CAEQC,oBAAAA,GACJ,MAAO,CACH,CACI93E,YAAa35K,KAAK4V,YAAYC,UAAU,sBACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAW8B,WACzC3nP,SAASjK,EAAAA,GAAAA,IAAQ,gCAErB,CACI65K,YAAa50K,EAAAA,MAAMkP,kBAAkBjU,KAAK4vP,WAAW+B,wBAC/C3xP,KAAK4V,YAAYC,UAAU,2BAC3B7V,KAAK4V,YAAYC,UAAU,qCACjC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAWgC,cACzC7nP,SAASjK,EAAAA,GAAAA,IAAQ,oCAErB,CACI65K,YAAa35K,KAAK4V,YAAYC,UAAU,2BACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAWiC,2BACzC9nP,SAASjK,EAAAA,GAAAA,IAAQ,qCAG7B,CAEQgyP,mBAAAA,GACJ,MAAMC,EAAU,CACZ,CACIp4E,YAAa35K,KAAK4V,YAAYC,UAAU,gCACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAW8B,WACzC3nP,SAASjK,EAAAA,GAAAA,IAAQ,gCAErB,CACI65K,YAAa35K,KAAK4V,YAAYC,UAAU,qCACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAWgC,cACzC7nP,SAASjK,EAAAA,GAAAA,IAAQ,oCAErB,CACI65K,YAAa35K,KAAK4V,YAAYC,UAAU,4CACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAW4B,uBACzCznP,SAASjK,EAAAA,GAAAA,IAAQ,yCAYzB,OARIiF,EAAAA,MAAMkP,kBAAkBjU,KAAK4vP,WAAW2B,wBACxCQ,EAAQp3O,KAAK,CACTg/J,YAAa35K,KAAK4V,YAAYC,UAAU,4CACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAW2B,uBACzCxnP,SAASjK,EAAAA,GAAAA,IAAQ,gDAIlBiyP,CACX,CAEA,WAAIA,GACA,OAAG/xP,KAAKsxP,iBACGtxP,KAAK8xP,sBAEL9xP,KAAKyxP,sBAEpB,CAEA,mBAAIO,GACA,OAAGhyP,KAAKsxP,iBACGtxP,KAAK4V,YAAYC,UAAU,uCAG/B,IACX,CAEA,kBAAY+6O,GAAiC,IAADqB,EACxC,OAAqC,QAA9BA,EAAAjyP,KAAK4vP,WAAWsC,sBAAc,IAAAD,OAAA,EAA9BA,EAAgCE,oBAAqB,IAChE,CAEA,0BAAYtB,GAAyC,IAADuB,EAChD,OAAqC,QAA9BA,EAAApyP,KAAK4vP,WAAWsC,sBAAc,IAAAE,OAAA,EAA9BA,EAAgCC,4BAA6B,IACxE,CAEQnB,wCAAAA,GAAqD,IAADoB,EACxD,OAA2C,QAA3CA,EAAQtyP,KAAK4vP,WAAW2C,2BAAmB,IAAAD,OAAA,EAAnCA,EAAqCtyO,eACzC,IAAK,MACD,OAAO,EACX,IAAK,SACD,OAAOhgB,KAAKwL,SAASqI,OAAOmI,GAAGmgB,WACnC,IAAK,KACD,OAAQn8B,KAAKwL,SAASqI,OAAOmI,GAAGmgB,WACpC,QACI,OAAO,EAEnB,CAEA,oDAAIq2N,GACA,OAAGxyP,KAAKkxP,2CACG,KAGRlxP,KAAKwL,SAASqI,OAAOmI,GAAGmgB,WAChBn8B,KAAK4V,YAAYC,UAAU,oDAE3B7V,KAAK4V,YAAYC,UAAU,+CAE1C,CAEA,uBAAM48O,GACEzyP,KAAKqwP,mCAIIrwP,KAAKwL,SAAS2iC,YAAYykD,SAAS,CAC5CC,SAAUlL,GAAAA,EAAa+qK,QACvBz/O,SAAUjT,KAAKiT,SACf0/O,kBAAmB,CACfC,YAAa5yP,KAAK4vP,WAAWoB,OAC7B6B,cAAe7yP,KAAK4vP,WAAW9yL,KAC/Bg2L,wBAAyB9yP,KAAK4vP,WAAWc,iBAGrD,ECtKG,MAAMqC,GACThgP,WAAAA,CAA+BvH,EACRokP,GAAiD,KADzCpkP,SAAAA,EAAiC,KACzCokP,WAAAA,CAEvB,CAEA,QAAIvkO,GAEA,OAAOrrB,KAAKwL,SAAS8e,KAAK+0K,4BAA4Br/L,KAAK4vP,WAAW9yL,MAAO,EACjF,CAEA,OAAI6zL,GACA,MAAO,CACH,CACI7uP,KAAM9B,KAAK4vP,WAAWoB,OACtBjnP,SAASjK,EAAAA,GAAAA,IAAQ,wCAG7B,CAGA,iBAAIsxP,GACA,OAAO,IACX,CAEQK,oBAAAA,GACJ,MAAO,CACH,CACI93E,YAAa35K,KAAK4V,YAAYC,UAAU,sBACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAW8B,WACzC3nP,SAASjK,EAAAA,GAAAA,IAAQ,gCAErB,CACI65K,YAAa35K,KAAK4V,YAAYC,UAAU,2BACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAWgC,cACzC7nP,SAASjK,EAAAA,GAAAA,IAAQ,oCAErB,CACI65K,YAAa35K,KAAK4V,YAAYC,UAAU,2BACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAWiC,2BACzC9nP,SAASjK,EAAAA,GAAAA,IAAQ,qCAG7B,CAEA,WAAIiyP,GACA,OAAO/xP,KAAKyxP,sBAChB,CAEA,mBAAIO,GACA,OAAO,IACX,CAEA,oDAAIQ,GACA,OAAO,IACX,CAEA,YAAIrvN,GACA,OAAOnjC,KAAK4vP,WAAWoD,QAC3B,CAEA,aAAI/8O,GACA,MAAO,EACX,CAEA,8BAAI2wD,GACA,OAAI5mE,KAAKwL,SAAStN,MAAM6jC,qBACb/hC,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOkrE,6BAA6B/qE,WAEhFa,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOmrE,0BAA0BhrE,UACpF,CAEA,yBAAIkxP,GACA,OAAO,CACX,CAEA,uBAAMoC,GAEN,CAEQrC,YAAAA,CAAatmP,GACjB,OAAO9J,KAAKwL,SAASwJ,SAASC,YAAYnL,EAC9C,CAEA,eAAY8L,GACR,OAAO5V,KAAKwL,SAASoK,WACzB,E,+BCnFG,IAAMq9O,IAAmCp7O,GAW3CI,EAAAA,GAAOC,MAAKH,GAQZD,EAAAA,GAAWxK,IAAG0K,GAGdC,EAAAA,GAAOC,MAAKkM,GAKZtM,EAAAA,GAAWxK,IAAG+W,GAMdvM,EAAAA,GAAWxK,IAAGwF,GAjCZ,MAEHC,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,EAAiC,KAQxDoiP,qBAA+B,IAAEr1O,EAAAA,EAAAA,GAAA,iBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,uBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,eAAAmM,GAAA,OAPrC1L,EAAAA,EAAAA,IAAehZ,KACnB,CAEA,iBAAI8tP,GACA,MAAO,CAAC,GAAI,GAAI,GACpB,CAIAC,sBAAAA,CAAuBC,GACnBhuP,KAAK4tP,qBAAuBI,EAC5BhuP,KAAKyuP,QAAU,GACfzuP,KAAKkzP,iBAAkB,EACvBlzP,KAAKyrD,WAAY,CACrB,CAMQ0qE,aAAAA,CAAcrsH,GAClB9J,KAAKyrD,UAAY3hD,CACrB,CAIA,kBAAIykP,GACA,OAAOvuP,KAAKkzP,eAChB,CAKA,kBAAMhF,GACF,GAAIluP,KAAKyrD,UACL,OAGJzrD,KAAKm2H,eAAc,GAEnB,MAAMw5H,EAAwC,GAE9C,IACI,MAAMN,QAAuBrvP,KAAKwL,SAASonH,IAAI40F,kBAAkBrB,mBAAmBnmN,KAAKmzP,0BAEzF,IAAK,IAAIvD,KAAcP,EAAeE,gBAClCI,EAAWh1O,KAAK3a,KAAKgwP,mBAAmBJ,KAG5ChmO,EAAAA,EAAAA,KAAY,KACR5pB,KAAKyuP,QAAU,IACRzuP,KAAKyuP,WACLkB,EACN,GAET,CAAE,MAAOjhP,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,sCAAuCD,EACtE,CAAC,SACGkb,EAAAA,EAAAA,KAAY,IACR5pB,KAAKkzP,iBAAkB,IAE3BlzP,KAAKm2H,eAAc,EACvB,CACJ,CAEQg9H,sBAAAA,GACJ,MAAO,CACH3kJ,OAAQ,EACRixI,MAAO,EACPkP,aAAc3uP,KAAK4tP,qBAE3B,CAEUoC,kBAAAA,CAAmBJ,GACzB,OAAO,IAAImD,GAAiC/yP,KAAKwL,SAAUokP,EAC/D,IACHzzO,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,0BAAAvE,IAAA4E,OAAAC,yBAAA5J,GAAAsJ,UAAA,0BAAAtJ,GAAAsJ,WAAA5D,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA3DwB,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iBAAApE,IAAAyE,OAAAC,yBAAA5J,GAAAsJ,UAAA,iBAAAtJ,GAAAsJ,WAAA3D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAgI,IAAA,CAAA/H,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAQS,CAAK,IAADkI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,WAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAMF,EAAG,IAAD1J,ICvCpC,MAAMsgP,GAET,iBAAItF,GAEA,MAAO,EACX,CAEAC,sBAAAA,CAAuBC,GAA6B,CACpD,aAAIviM,GACA,OAAO,CACX,CACA,kBAAI8iM,GACA,OAAO,CACX,CACA,WAAIE,GACA,MAAO,EACX,CACA,kBAAMP,GACN,ECXG,MAAMmF,WAAwC5F,GAIjD,kBAAgBiC,CAAa77C,GACzB,aAAc7zM,KAAKwL,SAASonH,IAAI40F,kBAAkBtB,WAAWrS,EACjE,CACU47C,sBAAAA,CAAuBD,GAC7B,OAAOA,EAAO8D,UAClB,CACUtD,kBAAAA,CAAmB/8O,EAAoB48O,EAAiCD,GAC9E,OAAO,IAAIa,GAA6BzwP,KAAKwL,SAAUyH,EAAU48O,EAASD,EAC9E,CAEUK,qBAAAA,CAAsBL,GAC5B,OAAOA,EAAWoB,MACtB,CAEUnD,+BAAAA,GACN,OAAI7tP,KAAKwL,SAASye,cAAc6P,gBAAgBy5N,gBAAgBC,6BACrD,IAAIP,GAAoCjzP,KAAKwL,UAEjD,IAAI4nP,EACf,ECzBG,MAAMK,WAAwCtD,GACjD,WAAI4B,GACA,MAAO,CACH,CACIp4E,YAAa35K,KAAK4V,YAAYC,UAAU,mCACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAW8D,WACzC3pP,SAASjK,EAAAA,GAAAA,IAAQ,gCAErB,CACI65K,YAAa35K,KAAK4V,YAAYC,UAAU,uCACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAW+D,WACzC5pP,SAASjK,EAAAA,GAAAA,IAAQ,oCAErB,CACI65K,YAAa35K,KAAK4V,YAAYC,UAAU,gCACxC/L,MAAO9J,KAAKowP,aAAapwP,KAAK4vP,WAAWgE,gBACzC7pP,SAASjK,EAAAA,GAAAA,IAAQ,qCAG7B,CAEA,iBAAIsxP,GACA,OAAO,IACX,CAEA,QAAI/lO,GACA,OAAOrrB,KAAKwL,SAAS8e,KAAK+0K,4BAA4Br/L,KAAK4vP,WAAWiE,oBAAqB,EAC/F,CAEA,mBAAI7B,GACA,OAAO,IACX,CAEA,OAAIrB,GACA,MAAO,CACH,CACI7uP,KAAM9B,KAAK4vP,WAAWkE,cACtB/pP,SAASjK,EAAAA,GAAAA,IAAQ,iCAG7B,CAEUwwP,yBAAAA,GACN,OAAO,CACX,CAEA,oDAAIkC,GACA,OAAO,IACX,CAEA,uBAAMC,GACF,EC/CD,MAAMsB,WAA2CtG,GAC1CuC,kBAAAA,CAAmB/8O,EAAoB48O,EAAiCD,GAC9E,OAAO,IAAI6D,GAAgCzzP,KAAKwL,SAAUyH,EAAU48O,EAASD,EACjF,CAEUH,sBAAAA,CAAuBG,GAC7B,OAAOA,EAAW0D,UACtB,CAGA,kBAAgB5D,CAAa77C,GACzB,aAAc7zM,KAAKwL,SAASonH,IAAI40F,kBAAkBnB,sBAAsBxS,EAC5E,CAEUo8C,qBAAAA,CAAsBL,GAC5B,OAAOA,EAAWkE,aACtB,CAEUjG,+BAAAA,GACN,OAAO,IAAIuF,EACf,ECvBG,MAAMY,WAA6Bt1K,EAAAA,EAEtCu1K,gBAAAA,CAAiB55D,GAAuF,IAAvD65D,EAAmBj0P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GACnE,OAAQo6L,IACC5jG,GAAAA,EAAkBgkG,eACZ,IAAIs5D,GAAmC/zP,KAAKwL,SAAU0oP,GAEtD,IAAIb,GAAgCrzP,KAAKwL,SAAU0oP,EAEtE,E,gBCTJ,MAAMC,GAAsD,2CAQrD,IAAMC,IAAuBv8O,GAkFjCC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKpF,GArFR,cAAsC4rE,EAAAA,EAE3C3rE,WAAAA,CAAYvH,GACV4M,MAAM5M,GAAU,KAuDV6oP,sBAAgB,GAAA97O,EAAAA,EAAAA,GAAA,oCAAAC,GAAA,OArDtBQ,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKq0P,iBAAmBr0P,KAAKs0P,sCACzBt0P,KAAKq0P,iBAAiBE,wBACxBv0P,KAAKq0P,iBAAiBE,sBAAwBv0P,KAAKw0P,yCAGrDx0P,KAAKwL,SAAS2iC,WAAW5sB,MAAK4sB,IAC5BnuC,KAAKyP,UAAS,KAAe,CACvBglP,mBAAoBtmN,EAAW6kH,eAAeyhG,uBAEhD/0O,UACM1f,KAAKwL,SAASkE,KAAKC,cACjBua,EAAKuqO,qBACPz0P,KAAK00P,mBAAmBxqO,EAAKuqO,0BACvBz0P,KAAK20P,sCAEf,GAEL,IAKH30P,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASyqC,QAAQC,eACxCx2B,gBACQ1f,KAAK20P,qCAAqC,GAC/C,CACDz4O,iBAAiB,GAGvB,CAEAs4O,qCAAAA,GACE,OAAOn0K,GAAAA,GAAWpyB,QAAO,CAACsvB,EAAar5B,KACrCq5B,EAAYr5B,GAAgB,EACrBq5B,IACN,CAAC,EACN,CAEQ+2K,mCAAAA,GACN,MAAMM,EAAqB70N,SAAS//B,KAAKwL,SAASoyC,aAAaC,QAAQs2M,KACvE,OAAGpvP,EAAAA,MAAMC,SAAS4vP,GAET,CACL5hG,eAAgB4hG,EAChBL,sBAAuBv0P,KAAKw0P,yCAGvBx0P,KAAKwL,SAASoyC,aAAaijF,QAAQszH,KAAwDn0P,KAAK60P,iCAE3G,CAIQH,kBAAAA,CAAmBzhP,GACzBwJ,OAAOspC,KAAK/lD,KAAKq0P,iBAAiBE,uBAAuB3oM,SAAQr8C,IAE3D,EADUvP,KAAKwL,SAAS6D,OAAOC,SAASC,GAC9BwpK,uBAAuB,CAAC9lK,IAAW/S,SAC/CF,KAAKq0P,iBAAiBE,sBAAsBhlP,GAAa0D,EAAS8B,SACpE,IAGF,MAAM8vI,EAAe7kJ,KAAKwL,SAAS6D,OAAOm1I,kBAC1CxkJ,KAAKq0P,iBAAiBE,sBAAsB1vG,EAAat1I,WAAa0D,EAAS8B,SAC/E/U,KAAKq0P,iBAAiBrhG,eAAiB//I,EAAS8B,SAGhD/U,KAAKwL,SAASoyC,aAAaykF,QAAQ8xH,GAAqDn0P,KAAKq0P,iBAC/F,CAEQQ,+BAAAA,GACN,MAAO,CACLN,sBAAuBv0P,KAAKw0P,wCAEhC,CAMQM,gCAAAA,CAAiC97E,GACvCh5K,KAAKwzJ,6BAA+BwlB,CACtC,CAEQ+7E,8BAAAA,CAA+BxlP,GACrC,IAAIylP,EAAiCh1P,KAAKq0P,iBAAiBE,sBAAsBhlP,GAEjF,OAAGylP,GAIIh1P,KAAKq0P,iBAAiBrhG,cAC/B,CAEA,yCAAc2hG,GACZ,MAAM9vG,EAAe7kJ,KAAKwL,SAAS6D,OAAOm1I,kBAE1C,IAAIywG,EAAgCj1P,KAAK+0P,+BAA+BlwG,EAAat1I,WAKrF,GAFAvP,KAAK80P,iCAAiC,KAElCG,EACF,OAGF,MAAM/hG,QAAwBlzJ,KAAKwL,SAAS2P,MAAM+mH,mBAAmB+yH,EAA+B,IACpG,IAAIj8E,QAAmBh5K,KAAKwL,SAAS2P,MAAM6mH,kBAAkB,CAACizH,KAAkC/hG,KAAsB,GACtH8lB,EAAYn0B,EAAak0B,uBAAuBC,GAE5CA,EAAU94K,OAAS,GAAK84K,EAAUryC,MAAKn7B,GAAKA,EAAEz2F,WAAakgP,KAC7Dj1P,KAAK80P,iCAAiC97E,EAE1C,GACDxgK,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gCAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBArC4C,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oCAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,oCAAAtJ,GAAAsJ,WAAAtJ,IClGxC,MAAMoiP,GACTniP,WAAAA,CAA4BoiP,EAA+BC,EAA+BC,GAAmB,KAAjFF,MAAAA,EAAa,KAAkBC,MAAAA,EAAa,KAAkBC,SAAAA,CAC1F,CAEA,eAAOC,CAAS5oP,GACZ,IAAIA,EACA,OAAO,KAGX,MAAMiyK,EAAQjyK,EAAQrH,MAAM,KAC5B,GAAoB,IAAjBs5K,EAAMz+K,OACL,OAAO,KAGX,MAAMi1P,EAAQp1N,SAAS4+I,EAAM,IAC7B,IAAI55K,EAAAA,MAAMC,SAASmwP,GACf,OAAO,KAGX,MAAMC,EAAQr1N,SAAS4+I,EAAM,IAC7B,IAAI55K,EAAAA,MAAMC,SAASowP,GACf,OAAO,KAGX,MAAMC,EAAWt1N,SAAS4+I,EAAM,IAChC,OAAI55K,EAAAA,MAAMC,SAASqwP,GAIZ,IAAIH,GAAcC,EAAOC,EAAOC,GAH5B,IAIf,CAEAl2P,QAAAA,GACI,MAAM,GAANS,OAAUI,KAAKm1P,MAAK,KAAAv1P,OAAII,KAAKo1P,MAAK,KAAAx1P,OAAII,KAAKq1P,SAC/C,CAEA,YAAOhsH,CAAM38H,GACT,MAAMib,EAAIutO,GAAcI,SAAS5oP,GACjC,GAAGib,EACC,OAAOA,EAGX,MAAM,IAAIsoD,MAAM,0BAADrwE,OAA2B8M,GAC9C,CAEAiwL,MAAAA,CAAO44D,GACH,QAAIA,IAIGv1P,KAAKm1P,QAAUI,EAAaJ,OAASn1P,KAAKo1P,QAAUG,EAAaH,OAASp1P,KAAKq1P,WAAaE,EAAaF,SACpH,CAEAG,aAAAA,CAAcD,GACV,QAAIA,IAIDv1P,KAAKm1P,MAAQI,EAAaJ,SAEnBn1P,KAAKm1P,MAAQI,EAAaJ,SAIjCn1P,KAAKo1P,MAAQG,EAAaH,SAEnBp1P,KAAKo1P,MAAQG,EAAaH,QAIjCp1P,KAAKq1P,SAAWE,EAAaF,UAKpC,CAEAI,aAAAA,CAAcF,GACV,OAAQv1P,KAAKw1P,cAAcD,EAC/B,ECrEG,MAAMG,WAAsBh3K,EAAAA,EAC/Bi3K,cAAAA,CAAe5gP,EAAkB6gP,GAAiD,IAAhCC,EAAgB51P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GACjE,OAAOD,KAAKwL,SAAS63E,IAAIt2D,OAAO4oO,eAAe5gP,EAAU6gP,EAASC,EACtE,CAEAC,sBAAAA,CAAuB/gP,GACnB,OAAO/U,KAAKwL,SAAS63E,IAAIt2D,OAAO+oO,uBAAuB/gP,EAC3D,CAEA,kCAAMghP,CAA6B1vP,SACzBrG,KAAKwL,SAAS63E,IAAIt2D,OAAOgpO,6BAA6B1vP,EAChE,CAEA2vP,4BAAAA,CAA6BjhP,EAAkB6jE,EAAqB3e,GAChE,OAAOj6D,KAAKwL,SAAS63E,IAAIt2D,OAAOipO,6BAA6BjhP,EAAU6jE,EAAa3e,EACxF,CACAg8L,4BAAAA,GACI,OAAOj2P,KAAKwL,SAAS63E,IAAIt2D,OAAOkpO,8BACpC,CAEAC,kBAAAA,CAAmBnhP,GACf,OAAO/U,KAAKwL,SAAS63E,IAAIt2D,OAAOmpO,mBAAmBnhP,EACvD,CAEAohP,oBAAAA,CAAqBphP,EAAkB6jE,GACnC,OAAO54E,KAAKwL,SAAS63E,IAAIt2D,OAAOopO,qBAAqBphP,EAAU6jE,EACnE,CAEAw9K,iBAAAA,GACI,OAAOp2P,KAAKwL,SAAS63E,IAAIt2D,OAAOqpO,mBACpC,CAEAC,iBAAAA,GACI,OAAOr2P,KAAKwL,SAAS63E,IAAIt2D,OAAOspO,mBACpC,CAEAC,4BAAAA,GACI,OAAOt2P,KAAKwL,SAAS63E,IAAIt2D,OAAOupO,8BACpC,CAEAC,aAAAA,CAAcC,GACVx2P,KAAKwL,SAAS63E,IAAIt2D,OAAOwpO,cAAcC,EAC3C,CAEAC,SAAAA,CAAU97M,GACN36C,KAAKwL,SAAS63E,IAAIqP,cAAc6mD,gBAAgB5+F,EACpD,CAEAmxJ,gBAAAA,CAAiB7xI,GACbj6D,KAAKwL,SAAS63E,IAAIt2D,OAAO++K,iBAAiB7xI,EAC9C,CAEAy8L,oBAAAA,GACI,OAAO12P,KAAKwL,SAAS63E,IAAIt2D,OAAO2pO,sBACpC,CAEAC,kBAAAA,CAAmB5nO,EAAyBha,GACxC,OAAO/U,KAAKwL,SAAS63E,IAAIt2D,OAAO4pO,mBAAmB5nO,EAAQha,EAC/D,CAEA2oF,kBAAAA,GACI,OAAO19F,KAAKwL,SAAS63E,IAAIt2D,OAAO2wE,oBACpC,CAEAtC,iBAAAA,GACI,OAAOp7F,KAAKwL,SAAS63E,IAAIt2D,OAAOquE,mBACpC,CAEAC,QAAAA,CAASh4C,GACLrjD,KAAKwL,SAAS63E,IAAIt2D,OAAOsuE,SAASh4C,EACtC,CAEA4pK,kBAAAA,GACI,OAAOjtN,KAAKwL,SAAS63E,IAAIt2D,OAAOkgM,oBACpC,CAEA2pC,mBAAAA,GACI,OAAO52P,KAAKwL,SAAS63E,IAAIt2D,OAAO6pO,qBACpC,CAEAC,sBAAAA,GACI,OAAO72P,KAAKwL,SAAS63E,IAAIt2D,OAAO8pO,wBACpC,CACAC,mBAAAA,GACI,OAAO92P,KAAKwL,SAAS63E,IAAIt2D,OAAO+pO,qBACpC,CAEAC,WAAAA,GACI,OAAO/2P,KAAKwL,SAAS63E,IAAIt2D,OAAOgqO,aACpC,CAEAC,UAAAA,GACI,OAAOh3P,KAAKwL,SAAS63E,IAAIt2D,OAAOiqO,YACpC,CAEA,oBAAMC,CAAehzO,SACXjkB,KAAKwL,SAAS63E,IAAIt2D,OAAOkqO,eAAehzO,EAClD,CAEAw8D,oBAAAA,GACI,OAAOzgF,KAAKwL,SAAS63E,IAAIt2D,OAAO0zD,sBACpC,CACA,0BAAMy2K,CAAqB12G,GACvB,aAAaxgJ,KAAKwL,SAAS63E,IAAIt2D,OAAOmqO,qBAAqB12G,EAC/D,CAEAj/D,YAAAA,GACI,OAAOvhF,KAAKwL,SAAS63E,IAAIt2D,OAAOw0D,cACpC,CAEA41K,aAAAA,GAA0C,IAADC,EAErC,IAAIC,EAAqD,QAAxCD,EAAGp3P,KAAKwL,SAAS63E,IAAIt2D,OAAOqzH,oBAAY,IAAAg3G,OAAA,EAArCA,EAAuCj4P,WAC3D,OAAG4F,EAAAA,MAAMiP,QAAQqjP,GACN,MAGXA,EAAgBA,EAAchyP,MAAM,KAAK,GAElC6vP,GAAcI,SAAS+B,GAClC,E,kCC5HG,IAAMC,IAAiBz/O,GAezBC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKF,GAKZF,EAAAA,GAAWxK,IAAG8W,GAEdnM,EAAAA,GAAOC,MAAKmM,GAOZvM,EAAAA,GAAWxK,IAAGgX,GAGdrM,EAAAA,GAAOC,MAAKpF,GAnCV,MAmBHojH,YAAAA,CAAapsH,GACT9J,KAAKiL,SAAWnB,CACpB,CAKAqsH,aAAAA,CAAcrsH,GACV9J,KAAKyrD,UAAY3hD,CACrB,CAQAusH,mBAAAA,CAAoBvsH,GAChB9J,KAAKysD,gBAAkB3iD,CAC3B,CAEAiJ,WAAAA,CAAYujH,EAAmBvhH,EAAiBwhH,EAAkCC,EAAqB+gI,EAC1E7gI,EAAqD8gI,GAA2B,KAAhF9gI,UAAAA,EAAkC,KAAmB8gI,eAAAA,EAAwB,KAvClG7gI,eAAS,OACTC,qBAAe,OACfC,mBAAa,OAEbC,iBAAW,OAEXE,yBAAmB,OACnBC,sBAAgC,EAAM,KACtCC,kBAA4B,EAAK,KACjCC,qBAAiC,GAAG,KACpCC,iBAA2B,EAAM,KACjCC,YAAsB,GAAK9+G,EAAAA,EAAAA,GAAA,gBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,iBAAAE,GAAA,WAiBnCkzC,uBAAiC,GAAKpzC,EAAAA,EAAAA,GAAA,uBAAAmM,GAAA,WAiC9B+yO,SAAW,KAAO,IAADC,EACjB13P,KAAKw3P,gBAG2C,QAApDE,EAAA13P,KAAK02H,UAAUpgD,mBAAmBi+C,0BAAkB,IAAAmjI,GAApDA,EAAsDvtG,SAAS,CAC3DyK,qBAAqB,GACvB,EACJ,KAyEQp9B,WAAa,KAGfx3H,KAAKysD,kBAILzsD,KAAKg3H,oBAAsBS,YAAY56D,MACvC78D,KAAKm2H,eAAc,GACvB,EACH,KAESuB,WAAa,KAEnB13H,KAAKo3H,iBAAkB,EACvBp3H,KAAK23H,6BACL33H,KAAKm2H,eAAc,GAEdn2H,KAAKq3H,YACNr3H,KAAKumB,OACT,EACH,KAEOgxG,eAAiB,IACdv3H,KAAK02H,UAAUpgD,mBAAmBrqB,WAC5C,KAEO2rE,WAAa,KAOjB53H,KAAKm3H,qBAAqBx8G,KAAK88G,YAAY56D,MAAQ78D,KAAKg3H,qBACxDh3H,KAAKm2H,eAAc,EAAM,EAC5B,KAEO0B,SAAYnpH,IAChB1O,KAAKk2H,cAAa,GAClBzxH,QAAQkK,MAAM,oBAAqBD,GACnC1O,KAAK83H,KAAK,QAAS,mBAAmB,EACzC,KAEOC,iBAAmB,KACvB/3H,KAAKq2H,qBAAoB,GACzBr2H,KAAKm2H,eAAc,GACnBn2H,KAAK83H,KAAK,OAAQ,sBAClB93H,KAAK02H,UAAU7tG,UAAU4tB,wBAAwBz2C,KAAKu3H,iBAAkB,WAAYrjD,GAAAA,GAAkCjE,MAAOjwE,KAAK22H,UAAUx3H,WAAW,EAC1J,KAEO64H,gBAAkB,KACtBh4H,KAAKk2H,cAAa,EAAK,GAzJvBl9G,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK82H,YAAcR,EACnBt2H,KAAK42H,gBAAkBL,EACvBv2H,KAAK62H,cAAgBL,EAErBx2H,KAAK22H,UAAY5hH,EAEjBjF,OAAO+uB,iBAAiB,UAAW7+B,KAAKg4H,iBAExCh4H,KAAK42H,gBAAgB/3F,iBAAiB,UAAW7+B,KAAK03H,YACtD13H,KAAK42H,gBAAgB/3F,iBAAiB,UAAW7+B,KAAK43H,YACtD53H,KAAK42H,gBAAgB/3F,iBAAiB,QAAS7+B,KAAK63H,UACpD73H,KAAK42H,gBAAgB/3F,iBAAiB,QAAS7+B,KAAKy3P,UAChDF,IACAv3P,KAAK42H,gBAAgBhsE,OAAS2sM,EAItC,CAWA,kBAAIhhI,GACA,OAAOv2H,KAAK42H,eAChB,CAEA,gBAAIJ,GACA,OAAOx2H,KAAK62H,aAChB,CAMAvmG,IAAAA,IAEQvrB,EAAAA,MAAMiP,QAAQhU,KAAKu2H,eAAeniH,MAAQpU,KAAKu2H,eAAeniH,MAAQpU,KAAKw2H,gBAC3Ex2H,KAAKu2H,eAAeniH,IAAMpU,KAAKw2H,cAGnCx2H,KAAKq3H,YAAa,EAClBr3H,KAAKg3H,oBAAsBS,YAAY56D,MACvC78D,KAAK42H,gBAAgBtmG,OAChB/O,MAAK,KACFvhB,KAAKq2H,qBAAoB,EAAK,IAEjCv4D,OAAMnvD,IACgB,oBAAfA,EAAMoX,KAEN/lB,KAAK+3H,mBAEL/3H,KAAK63H,SAASlpH,EAClB,IAEJ3O,KAAKk3H,mBACLl3H,KAAKk3H,kBAAmB,EACxBl3H,KAAK83H,KAAK,OAAQ,QAClB93H,KAAK02H,UAAU7tG,UAAU4tB,wBAAwBz2C,KAAKu3H,iBAAkB,UAAWrjD,GAAAA,GAAkC+jD,cAAej4H,KAAK22H,UAAUx3H,YAE3J,CAEAonB,KAAAA,GACIvmB,KAAKq3H,YAAa,EAIdr3H,KAAKo3H,iBACLp3H,KAAK42H,gBAAgBrwG,QAGzBvmB,KAAKk4H,iCACT,CAEArtE,IAAAA,GACI7qD,KAAK42H,gBAAgB/rE,MACzB,CAEAstE,WAAAA,CAAYxpH,GACR3O,KAAK63H,SAASlpH,EAClB,CAEAg8C,OAAAA,GACI76C,OAAOw7B,oBAAoB,UAAWtrC,KAAKg4H,iBAC3Ch4H,KAAK42H,gBAAgBtrF,oBAAoB,UAAWtrC,KAAKw3H,YACzDx3H,KAAK42H,gBAAgBtrF,oBAAoB,UAAWtrC,KAAK03H,YACzD13H,KAAK42H,gBAAgBtrF,oBAAoB,UAAWtrC,KAAK43H,YACzD53H,KAAK42H,gBAAgBtrF,oBAAoB,QAAStrC,KAAK63H,SAC3D,CAEA7rE,WAAAA,CAAYviD,EAAgBwO,GACxBjY,KAAK83H,KAAKruH,EAAMwO,EACpB,CAyDQogH,qBAAAA,GACJ,OAAOr4H,KAAKm3H,qBAAqBlpE,QAAO,CAACqqE,EAAWp0E,IACzCo0E,EAAYp0E,GACpB,EACP,CAEQg0E,+BAAAA,GACJ,MACMvhG,EAA6B,CAC/BrM,KAFoBtqB,KAAKq4H,wBAEDr4H,KAAKm3H,qBAAqBj3H,QAGtDF,KAAK83H,KAAK,OAAQ,mBAAoBnhG,EAC1C,CAEQyhG,6BAAAA,GACJ,MACMzhG,EAA6B,CAC/BrM,KAFoBtqB,KAAKq4H,wBAEDr4H,KAAKm3H,qBAAqBj3H,OAClDq4H,WAAYv4H,KAAKm3H,qBAAqBj3H,QAG1CF,KAAK83H,KAAK,OAAQ,mBAAoBnhG,EAC1C,CAEQghG,0BAAAA,GACJ,IAAK33H,KAAKi3H,qBAAsB,CAC5B,MACMuB,EAA2B,CAC7BluG,KAFkBmtG,YAAY56D,MAAQ78D,KAAKg3H,qBAI/Ch3H,KAAKi3H,sBAAuB,EAC5Bj3H,KAAK83H,KAAK,OAAQ,YAAaU,GAC/Bx4H,KAAK02H,UAAU7tG,UAAU4tB,wBAAwBz2C,KAAKu3H,iBAAkB,OAAQrjD,GAAAA,GAAkC+jD,cAAej4H,KAAK22H,UAAUx3H,WACpJ,CACJ,CAEUs5H,gBAAAA,CAAiBC,EAAuBC,GAC9C,IAAK34H,KAAK42H,gBAAgB1xG,OAAQ,CAK9B,GAD2BwzG,EAAcC,EAlPf,GAmPsB,CAI5C,MAAMC,EAAmC,CACrCF,cAAeA,EACfG,YAAaF,GAEjB34H,KAAK83H,KAAK,OAAQ,UAAWc,EACjC,CACJ,CACJ,CAEUd,IAAAA,CAAKruH,EAAgBwO,GAAuF,IAAvE0e,EAA6D12B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KACvG64H,EAAkB94H,KAAK02H,UAAUrzC,IAAI4xC,yBACpCC,YACAC,YAAYn1H,KAAKu3H,kBACjBnC,UAAUn9G,GACV8gH,SAAS/4H,KAAK82H,aACdkC,SAASh5H,KAAK22H,UAAUx3H,YAM7B,GAJK4F,EAAAA,MAAMkP,kBAAkB0iB,IACzBmiG,EAAgBG,cAActiG,GAIzB,UADDltB,EAEAqvH,EAAgBnqH,aAIhBmqH,EAAgBzD,MAG5B,GACH78G,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBApQuB,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,gBAAAtJ,GAAAsJ,WAAA3D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAQJ,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iBAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,iBAAAtJ,GAAAsJ,WAAAsI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBASC,CAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAAkI,IAAA7H,OAAAC,yBAAA5J,GAAAsJ,UAAA,uBAAAtJ,GAAAsJ,WAAAtJ,ICpC5B,MAAM6kP,WAAkC9jI,GAAwB9gH,WAAAA,GAAA,SAAA9S,WAAA,KAE5DgsD,WAAa,YAAa,CAEvB+oE,iBAAAA,GACN,OAAO,CACX,CAEAzqE,cAAAA,CAAet3C,EAAoBsjH,EAAkCiH,GAEjE,MAAMzoH,EAAW9B,EAAS8B,SAEpByhH,EAAevjH,EAASk5E,SACxBorK,EAActkP,EAAS0/D,kBAG7B,OAAO,IAAI2kL,GAAkB,oBAAqBviP,EAAUwhH,EAAgBC,EAAc+gI,EAAav3P,KAAKwL,SAAUgyH,EAE1H,E,gBCnBG,MAAMo6H,WAA8BC,GAAAA,EACvC9kP,WAAAA,CAAYoE,GACRiB,MAAM2qO,eAAgB5rO,EAC1B,ECLG,MAAM2gP,GACT/kP,WAAAA,GACI,MAAM8pD,EAAM,IAAIC,KAChBD,EAAIk7L,YAAYl7L,EAAIm7L,cAAgB,GACpC,MAAMxkI,EAAiB32D,EAAIo7L,cAC3BjqP,SAASkqP,OAAS,8BAAgC1kI,EAAiB,SACvE,CAEAI,YAAAA,CAAa7tG,EAAcjc,EAAequP,GACtC,IAAI3kI,EACJ,GAAI2kI,EACA3kI,EAAiB2kI,EAAgBF,kBAC9B,CACH,IAAIp7L,EAAM,IAAIC,KACdD,EAAIk7L,YAAYl7L,EAAIm7L,cAAgB,GACpCxkI,EAAiB32D,EAAIo7L,aACzB,CACAjqP,SAASkqP,OAASnyO,EAAO,IAAMjc,EAAQ,YAAc0pH,EAAgB,SACzE,CAEAm+D,kBAAAA,CAAmB5rK,EAAcjc,GAC7B,IAAI+yD,EAAM,IAAIC,KACdD,EAAIk7L,YAAYl7L,EAAIm7L,cAAgB,GACpChqP,SAASkqP,OAASnyO,EAAO,IAAMjc,EAAQ,YAAc9J,KAAKo4P,YAAc,YAAcv7L,EAAIo7L,cAAgB,SAC9G,CAEAj5G,SAAAA,CAAUj5H,GACN,IAAIkuE,EAAQjmF,SAASkqP,OAAOjkK,MAAM,IAAIokK,OAAOtyO,EAAO,aACpD,GAAIkuE,EACA,OAAOA,EAAM,EAErB,CAEAirD,YAAAA,CAAan5H,GACT/X,SAASkqP,OAASnyO,EAAO,mDAAqD/lB,KAAKo4P,YAAc,GACrG,CAEQA,SAAAA,GAEJ,MAAME,EAAgBxoP,OAAO8mB,SAAS2hO,SAASlzP,MAAM,KACrD,OAA6B,IAAzBizP,EAAcp4P,OAEPo4P,EAAc,GAIrBA,EAAcp4P,QAAU,GACoB,OAA5Co4P,EAAcA,EAAcp4P,OAAS,IACO,OAA5Co4P,EAAcA,EAAcp4P,OAAS,GAE9Bo4P,EAAc33O,OAAO,GAAGlb,KAAK,KAEjC6yP,EAAc33O,OAAO,GAAGlb,KAAK,IACxC,E,yBClDG,MAAM+yP,GACTzlP,WAAAA,CAA6Buc,EACDrc,GAAqB,KADpBqc,QAAAA,EAA8B,KAC/Brc,SAAAA,CAC5B,CAEA,yBAAIwlP,GACA,OAAOz4P,KAAKsvB,QAAQopO,eAAiB,IAC7B3zP,EAAAA,MAAMkP,kBAAkBjU,KAAKiT,SAASk7D,SAAWnuE,KAAKiT,SAASk7D,QAAUnuE,KAAKsvB,QAAQopO,eAClG,CACA,UAAMpoO,SAEItwB,KAAKiT,SAASO,KAAK,CACrBL,YAAY,EACZ4/E,eAAgB,CACZ4lK,WAAY34P,KAAKsvB,QAAQC,GACzBa,aAAcpwB,KAAKsvB,QAAQc,eAIvC,ECZG,IAAewoO,IAAgB/gP,GAgBjCC,EAAAA,GAAWxK,IAAGwF,GAhBZ,MACHC,WAAAA,CAAY8lP,EACmBrtP,GAAoC,KAApCA,SAAAA,GAAiC+M,EAAAA,EAAAA,GAAA,oBAAAC,GAAA,OAC5DQ,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK84P,aAAeD,CACxB,CAaAx6O,OAAAA,GACA,CAEA,MAAIkR,GACA,OAAOvvB,KAAK84P,aAAaC,EAC7B,CAEA,gBAAI3oO,GACA,OAAOpwB,KAAK84P,aAAaE,cAC7B,CAEA,uBAAIC,GACA,OAAO9uP,QAAQnK,KAAK84P,aAAaI,UACrC,CAEA,iBACIjpO,GACA,MAAMkpO,EAAkBn5P,KAAK84P,aAAaM,eACrC7oP,KAAIwE,GAAY/U,KAAKwL,SAAS2P,MAAMC,SAASrG,KAC7C0K,QAAOxM,GAAY9I,QAAQ8I,KAC3B62J,cAAaqF,GAAQA,EAAKp6J,WAO/B,OAHyB/U,KAAKwL,SAASgsE,SAASy5D,UAAUx0H,OAAOspC,KAAKozM,GACL5oP,KAAI+wH,GAAMvhG,SAASuhG,MAE5D/wH,KAAIwE,GAAY,IAAIyjP,GAAkBx4P,KAAMm5P,EAAgBpkP,MAC/E0K,QAAO45O,KACDr5P,KAAKi5P,qBAMGI,EAAIZ,uBAG3B,CAEAa,OAAAA,CAAQvkP,GACJ,OAAO5K,QAAQnK,KAAKiwB,cAAc02G,MAAKn7B,GAAKA,EAAEv4F,SAAS8B,WAAaA,IACxE,CAEA,gBAAIwkP,GACA,OAAOv5P,KAAK84P,aAAaU,YAC7B,CACA,kBAAIhmI,GACA,OAAOxzH,KAAK84P,aAAaW,cAC7B,CAEA,aAAYC,GACR,OAAO15P,KAAK84P,aAAaW,eAAe7lN,UAAY5zC,KAAKwL,SAAS8e,KAAKuyC,KAC3E,CAEA,WAAI88L,GACA,OAAQ35P,KAAK05P,WAAa15P,KAAKiwB,cAAc/vB,OAAS,CAC1D,CAEA05P,iBAAAA,CAAkBC,GACd,GAAGA,EAAed,KAAO/4P,KAAKuvB,GAC1B,MAAM,IAAI0gD,MAAM,0DAEpBrmD,EAAAA,EAAAA,KAAY,KACR5pB,KAAK84P,cAAY5zP,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACVlF,KAAK84P,cACLe,EACN,GAET,CAEA,kBAAIC,GAAkC,IAADC,EACjC,OAAqC,QAArCA,EAAO/5P,KAAK84P,aAAakB,oBAAY,IAAAD,EAAAA,EAAI,IAC7C,CAEA,kBAAIrB,GAA0B,IAADuB,EACzB,OAAuC,QAAvCA,EAAOj6P,KAAK84P,aAAaoB,sBAAc,IAAAD,EAAAA,EAAI,CAC/C,CAEA,2BAAIvnO,GACA,OAAG3tB,EAAAA,MAAMkP,kBAAkBjU,KAAK84P,aAAakB,cAClC,KAGJh6P,KAAKm6P,qBAAqBn6P,KAAK84P,aAAakB,aACvD,CAEA,2BAAIrnO,GACA,OAAO3yB,KAAKm6P,qBAAqBn6P,KAAK84P,aAAaoB,eACvD,CAEA,oBAAIE,GAQA,OAAO5+N,EAAAA,SAASsY,iBAAiB9zC,KAAK84P,aAAaW,eAAe7lN,UAAY5zC,KAAKwL,SAAS8e,KAAKuyC,MACrG,CAEA,uBAAI5qC,GACA,OAAOjyB,KAAKo6P,iBAAiBv9N,WAAa,CAC9C,CAEA,qBAAIxK,GACA,GAAGryB,KAAK05P,UACJ,OAAO15P,KAAKwL,SAASoK,YAAYC,UAAU,gCAG/C,MAAMwkP,EAAmC7+N,EAAAA,SAASwB,YAAY3mB,KAAK8jB,MAAMn6B,KAAKo6P,iBAAiB79N,eAE/F,OAAGv8B,KAAKiyB,oBACGjyB,KAAKwL,SAASoK,YAAYC,UAAU,4BAA6B,CAACykP,WAAWD,EAAiCl7P,SAAS,CAAC80C,eAAe,MAG3Ij0C,KAAKwL,SAASoK,YAAYC,UAAU,2BAA4B,CAACykP,WAAYjkP,KAAK8jB,MAAMkgO,EAAiCx9N,WAAW19B,YAC/I,GACHqZ,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iBAxGIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,iBAAAtJ,GAAAsJ,WAAAtJ,IC5CN,MAAMynP,WAA6B3B,GACtC,eAAI5lO,GACA,OAAOhzB,KAAKwL,SAASoK,YAAYC,UAAU,6BAC/C,CAEA,sBAAI4d,GACA,OAAOzzB,KAAKwL,SAASoK,YAAYC,UAAU,6BAC/C,CAEA,sBAAI2kP,GACA,OAAOx6P,KAAKwL,SAASoK,YAAYC,UAAU,8BAC/C,CAEUskP,oBAAAA,CAAqBx6I,GAC3B,OAAO3/G,KAAKwL,SAASwJ,SAASC,YAAY0qG,GAAQ,EACtD,CAEA,sBAAI5sF,GACA,OAAO/yB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOquB,UAAUotO,wBAAwBt7P,UAC5F,CAEA,WAAIyyB,GACA,OAAO5xB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOquB,UAAU6T,qBAAqB/hC,UACzF,ECvBG,MAAMu7P,WAAoC9B,GAE7C,eAAI5lO,GACA,OAAOhzB,KAAKwL,SAASoK,YAAYC,UAAU,+BAC/C,CAGA,sBAAI4d,GACA,OAAOzzB,KAAKwL,SAASoK,YAAYC,UAAU,+BAC/C,CAEA,sBAAI2kP,GACA,OAAOx6P,KAAKwL,SAASoK,YAAYC,UAAU,gCAC/C,CAEUskP,oBAAAA,CAAqBx6I,GAC3B,OAAO3/G,KAAKwL,SAASwJ,SAASC,YAAY0qG,GAAQ,EACtD,CAEA,sBAAI5sF,GACA,OAAO/yB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOquB,UAAUstO,yBAAyBx7P,UAC7F,CAEA,WAAIyyB,GACA,OAAO5xB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOquB,UAAUiU,sBAAsBniC,UAC1F,ECzBG,MAAMy7P,WAA8BhC,GACvC,eAAI5lO,GACA,OAAOhzB,KAAKwL,SAASoK,YAAYC,UAAU,6BAC/C,CAGA,sBAAI4d,GACA,OAAOzzB,KAAKwL,SAASoK,YAAYC,UAAU,6BAC/C,CAEA,sBAAI2kP,GACA,OAAOx6P,KAAKwL,SAASoK,YAAYC,UAAU,8BAC/C,CAEUskP,oBAAAA,CAAqBx6I,GAC3B,OAAQA,EAAS3/G,KAAK84P,aAAa+B,eAAe17P,UACtD,CAEA,sBAAI4zB,GACA,OAAO/yB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOquB,UAAUytO,wBAAwB37P,UAC5F,CAEA,WAAIyyB,GACA,OAAO5xB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOquB,UAAU2T,qBAAqB7hC,UACzF,ECxBG,MAAM47P,WAAqCnC,GAE9C,eAAI5lO,GACA,OAAOhzB,KAAKwL,SAASoK,YAAYC,UAAU,+BAC/C,CAGA,sBAAI4d,GACA,OAAOzzB,KAAKwL,SAASoK,YAAYC,UAAU,+BAC/C,CAEA,sBAAI2kP,GACA,OAAOx6P,KAAKwL,SAASoK,YAAYC,UAAU,gCAC/C,CAEUskP,oBAAAA,CAAqBx6I,GAC3B,OAAQA,EAAS3/G,KAAK84P,aAAa+B,eAAe17P,UACtD,CAEA,sBAAI4zB,GACA,OAAO/yB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOquB,UAAU2tO,yBAAyB77P,UAC7F,CAEA,WAAIyyB,GACA,OAAO5xB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOquB,UAAU+T,sBAAsBjiC,UAC1F,ECjBG,MAAM87P,WAA6Bn3O,GAAAA,EACtC/Q,WAAAA,CAA+BvH,GAC3B4M,QAAQ,KADmB5M,SAAAA,CAE/B,CAEU0vP,mBAAAA,CAAoBrC,GAC1B,OAAQA,EAAYG,gBAChB,KAAKl4N,GAAAA,EAAiBG,SAClB,OAAO,IAAIs5N,GAAqB1B,EAAa74P,KAAKwL,UACtD,KAAKs1B,GAAAA,EAAiBO,gBAClB,OAAO,IAAIq5N,GAA4B7B,EAAa74P,KAAKwL,UAC7D,KAAKs1B,GAAAA,EAAiBC,SAClB,OAAO,IAAI65N,GAAsB/B,EAAa74P,KAAKwL,UACvD,KAAKs1B,GAAAA,EAAiBK,gBAClB,OAAO,IAAI45N,GAA6BlC,EAAa74P,KAAKwL,UAC9D,QAEI,OADAxL,KAAKwL,SAAS2L,OAAOxI,MAAM,wBAAD/O,OAAyBi5P,EAAYG,iBACxD,KAEnB,E,UCnBG,ICRKmC,GDQCC,IAA8BtoP,GAApC,cAA6CmoP,GAChDloP,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAS+M,EAAAA,EAAAA,GAAA,gBAAAC,GAAA,WAsBX6iP,6BAAgCC,KACpC1xO,EAAAA,EAAAA,KAAY,KACR0xO,EAAS1vM,SAAQitM,IACb,MAAM0C,EAAkBv7P,KAAKw7P,aAAa3C,EAAYE,IACtD,GAAGwC,EACCA,EAAgB3B,kBAAkBf,OAC/B,CACH,MAAM4C,EAAez7P,KAAKk7P,oBAAoBrC,GAC3C4C,GACCz7P,KAAKs7P,SAAS3gP,KAAK8gP,EAE3B,IACF,GACJ,EACL,KAEOC,+BAAkCJ,KACtC1xO,EAAAA,EAAAA,KAAY,KACR0xO,EAAS1vM,SAAQitM,IACb,MAAM0C,EAAkBv7P,KAAKw7P,aAAa3C,EAAYE,IACnDwC,EACCA,EAAgB3B,kBAAkBf,GAElC74P,KAAKwL,SAAS2L,OAAOs8B,QAAQ,qFAAD7zC,OAAsFi5P,EAAYE,IAClI,GACF,GACJ,EACL,KAEO4C,+BAAkCC,KACtChyO,EAAAA,EAAAA,KAAY,KACRgyO,EAAWhwM,SAAQr8B,IACf,MAAM8T,EAAQrjC,KAAKs7P,SAAS3wK,WAAUhjE,GAAKA,EAAE4H,KAAOA,IACjD8T,GAAS,IACRrjC,KAAKs7P,SAASj4N,GAAOhlB,UACrBre,KAAKs7P,SAASj7N,OAAOgD,EAAO,GAChC,GACF,GACJ,GA1DFrqB,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKmmO,wBAAwBnmO,KAAKwL,SAAS63E,IAAIoxC,OAAOihB,qBAAqB11I,KAAKq7P,+BAChFr7P,KAAKmmO,wBAAwBnmO,KAAKwL,SAAS63E,IAAIoxC,OAAOmhB,uBAAuB51I,KAAK07P,iCAClF17P,KAAKmmO,wBAAwBnmO,KAAKwL,SAAS63E,IAAIoxC,OAAOqhB,uBAAuB91I,KAAK27P,gCACtF,CACAt9O,OAAAA,GACIjG,MAAMiG,UAENre,KAAKs7P,SAAS1vM,SAAQt8B,GAAWA,EAAQjR,YACzCre,KAAKs7P,SAAW,EACpB,CAKQE,YAAAA,CAAaK,GACjB,OAAO77P,KAAKs7P,SAAS30H,MAAKh/G,GAAKA,EAAE4H,KAAOssO,EAAU18P,cAAe,IACrE,CA2CA,qBAAM28P,GACF,GAEPtjP,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAnDItE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBACyB,EAAG,IAAD1J,I,UEfrCipP,IDLJ,SANWZ,GAAAA,EAAAA,EAAc,qBAAdA,EAAAA,EAAc,mBAAdA,EAAAA,EAAc,uBAAdA,EAAAA,EAAc,sBAAdA,EAAAA,EAAc,wBAMzB,CANWA,KAAAA,GAAc,KCWC,SAAtBY,GAAAA,EAAAA,EAAsB,uBAAtBA,EAAAA,EAAsB,sBAAtBA,KAAAA,GAAsB,KAOpB,IAAMC,IAA0BlpP,GAAhC,cAAyCmoP,GAC5CloP,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,gBAAAC,GAAA,OAEhBQ,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK87P,kBAEL97P,KAAKmmO,wBAAwBnmO,KAAKwL,SAAS63E,IAAIoxC,OAAOye,aAAYxzH,gBACxD1f,KAAK87P,iBAAiB,KAGhC97P,KAAKmmO,wBAAwBnmO,KAAKwL,SAAS63E,IAAIoxC,OAAO+f,sBAAqB90H,UACnE4V,IAAWohE,GAAAA,EAAao+C,SAAWx/G,IAAWohE,GAAAA,EAAaqzI,YAAcz0M,IAAWohE,GAAAA,EAAa4qD,WAC3FthJ,KAAK87P,iBACf,KAGJ97P,KAAKmmO,wBAAwBnmO,KAAKwL,SAAS63E,IAAIoxC,OAAOggB,uBAAsB/0H,gBAClE1f,KAAK87P,iBAAiB,KAGhC97P,KAAKmmO,wBAAwBnmO,KAAKwL,SAAS63E,IAAIoxC,OAAO2gB,0BAAyB11H,gBACrE1f,KAAK87P,iBAAiB,IAEpC,CAKQG,YAAAA,CAAaC,IACjBtyO,EAAAA,EAAAA,KAAY,KACR5pB,KAAKs7P,SAAWY,CAAW,GAEnC,CAEA79O,OAAAA,GACIjG,MAAMiG,UAENre,KAAKs7P,SAAS1vM,SAAQt8B,GAAWA,EAAQjR,YACzCre,KAAKs7P,SAAW,EACpB,CAEA,qBAAMQ,GACF,MAAMz1O,QAAiBrmB,KAAKwL,SAASonH,IAAI00F,6BAA6B/B,iBACtE,GAAIxgN,EAAAA,MAAMiP,QAAQqS,EAAS81O,mBAEvB,YADAn8P,KAAKi8P,aAAa,IAItB,MAAMG,EAAyC,GAE/C,IAAK,IAAIC,KAAwBh2O,EAAS81O,kBACtC,GAAIE,EAAqBC,cAAgBnB,GAAet4P,OAAQ,CAC5D,MAAM05P,QAA0Bv8P,KAAKw8P,4CAA4CH,GACjF,GAAIE,EAAmB,CACnB,MAAMd,EAAez7P,KAAKk7P,oBAAoBqB,GAC1Cd,GACAW,EAAczhP,KAAK8gP,EAE3B,CACJ,CAIJz7P,KAAKi8P,aAAaG,EAEtB,CAEA,iDAAcI,CAA4CH,GACtD,GAAIt3P,EAAAA,MAAMiP,QAAQqoP,EAAqBI,cAEnC,OADAz8P,KAAKwL,SAAS2L,OAAOxI,MAAM,+BAAD/O,OAAgCy8P,EAAqBK,WAAU,8BAClF,KAGX,GAAIL,EAAqBI,eAAiBz8P,KAAKwL,SAASwJ,SAASgwE,aAE7D,OADAhlF,KAAKwL,SAAS2L,OAAOxI,MAAM,+BAAD/O,OAAgCy8P,EAAqBK,WAAU,uBAAA98P,OAAsBy8P,EAAqBI,aAAY,gDAAA78P,OAA+CI,KAAKwL,SAASwJ,SAASgwE,eAC/M,KAGX,OAAQq3K,EAAqBM,gBACzB,KAAKZ,GAAuB96N,SACxB,OAAOjhC,KAAK48P,iBAAiBP,GACjC,KAAKN,GAAuBc,QACxB,OAAO78P,KAAK88P,gBAAgBT,GAChC,QAEI,OADAr8P,KAAKwL,SAAS2L,OAAOxI,MAAM,sCAAD/O,OAAuCy8P,EAAqBM,iBAC/E,KAEnB,CAEA,sBAAcI,CAAiBnwI,GAG3B,aAFwB5sH,KAAKwL,SAAS2P,MAAM6mH,kBAAkBpV,IAE7CntG,QAAOg0I,IAAU1uJ,EAAAA,MAAMkP,kBAAuB,OAALw/I,QAAK,IAALA,OAAK,EAALA,EAAOrlF,UAC5D79D,KAAIkjJ,GAASA,EAAMrlF,QAC5B,CAGQ4uL,yBAAAA,CAA0BzD,GAC9B,OAAIA,EACO,IAAIz8L,KAAKy8L,GAET,IAEf,CAEA,sBAAcqD,CAAiBP,GAC3B,IAAKA,EAAqBY,cAEtB,OADAj9P,KAAKwL,SAAS2L,OAAOxI,MAAM,yDAAD/O,OAA0Dy8P,EAAqBK,aAClG,KAGX,IAAIQ,EAAgBb,EAAqBY,cAAcE,WACvD,IAAKD,EAAe,CAChB,MAAME,QAAgBp9P,KAAK+8P,iBAAiBV,EAAqBgB,cAE7DH,EADmB,IAAnBE,EAAQl9P,OACQ,EAEAmW,KAAK09B,OAAOqpN,EAEpC,CACA,MAAO,CACHrE,GAAIsD,EAAqBK,WACzBxC,eAAgBmC,EAAqBY,cAAcK,sBAAwBJ,EAC3EK,SAAUlB,EAAqBmB,qBAC/BxE,eAAgBl4N,GAAAA,EAAiBC,SACjCi5N,aAAcqC,EAAqBY,cAAcQ,yBAA2BP,EAC5E1D,aAAcx5P,KAAKg9P,0BAA0BX,EAAqB7C,cAClEC,eAAgB,IAAI38L,KAAKu/L,EAAqB5C,gBAC9CoB,cAAeqC,EACf9D,eAAgBiD,EAAqBgB,aACrCnE,UAAWmD,EAAqBnD,UAExC,CAEA,qBAAc4D,CAAgBT,GAC1B,OAAKA,EAAqBqB,YAKnB,CACH3E,GAAIsD,EAAqBK,WACzBxC,eAAgBmC,EAAqBqB,YAAYC,wBACjDJ,SAAUlB,EAAqBmB,qBAC/BxE,eAAgBl4N,GAAAA,EAAiBG,SACjC+4N,aAAcqC,EAAqBuB,sBACnCpE,aAAcx5P,KAAKg9P,0BAA0BX,EAAqB7C,cAClEC,eAAgB,IAAI38L,KAAKu/L,EAAqB5C,gBAC9CoB,cAAe,EACfzB,eAAgBiD,EAAqBgB,aACrCnE,UAAWmD,EAAqBnD,YAdhCl5P,KAAKwL,SAAS2L,OAAOxI,MAAM,uDAAD/O,OAAwDy8P,EAAqBK,aAChG,KAgBf,GACHlkP,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAjIItE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBACyB,EAAG,IAAD1J,IC3CnC,MAAM+qP,GACT9qP,WAAAA,CAA6B+qP,GAAsC,KAAtCA,aAAAA,CAE7B,CAEA,WAAInE,GACA,OAAO35P,KAAK89P,aAAanE,SAAW35P,KAAKiwB,cAAc/vB,OAAS,CACpE,CACA05P,iBAAAA,CAAkBf,GACd74P,KAAK89P,aAAalE,kBAAkBf,EACxC,CACAS,OAAAA,CAAQvkP,GACJ,OAAO5K,QAAQnK,KAAKiwB,cAAc02G,MAAKn7B,GAAKA,EAAEv4F,SAAS8B,WAAaA,IACxE,CACAsJ,OAAAA,GACIre,KAAK89P,aAAaz/O,SACtB,CACA,gBAAIk7O,GACA,OAAOv5P,KAAK89P,aAAavE,YAC7B,CACA,kBAAI/lI,GACA,OAAOxzH,KAAK89P,aAAatqI,cAC7B,CACA,MAAIjkG,GACA,OAAOvvB,KAAK89P,aAAavuO,EAC7B,CACA,gBAAIa,GACA,OAAOpwB,KAAK89P,aAAa1tO,YAC7B,CACA,kBAAI0pO,GACA,OAAO95P,KAAK89P,aAAahE,cAC7B,CACA,2BAAIpnO,GACA,OAAO1yB,KAAK89P,aAAaprO,uBAC7B,CACA,kBAAIgmO,GACA,OAAO14P,KAAK89P,aAAapF,cAC7B,CACA,2BAAI/lO,GACA,OAAO3yB,KAAK89P,aAAanrO,uBAC7B,CACA,uBAAIV,GACA,OAAOjyB,KAAK89P,aAAa7rO,mBAC7B,CACA,qBAAII,GACA,OAAOryB,KAAK89P,aAAazrO,iBAC7B,CACA,eAAIW,GACA,OAAOhzB,KAAK89P,aAAa9qO,WAC7B,CACA,sBAAIwnO,GACA,OAAOx6P,KAAK89P,aAAatD,kBAC7B,CACA,sBAAI/mO,GACA,OAAOzzB,KAAK89P,aAAarqO,kBAC7B,CACA,iBAAIxD,GAEA,OAAOjwB,KAAK89P,aAAa7tO,cAAcxQ,QAAO45O,GAAOA,EAAIZ,uBAC7D,CACA,sBAAI1lO,GACA,OAAO/yB,KAAK89P,aAAa/qO,kBAC7B,CACA,WAAInB,GACA,OAAO5xB,KAAK89P,aAAalsO,OAC7B,CACA,uBAAIqnO,GACA,OAAOj5P,KAAK89P,aAAa7E,mBAC7B,E,mBC/DG,IAAM8E,IAAelmP,GAyCvBC,EAAAA,GAAWxK,IAAGyK,GAIdE,EAAAA,GAAOC,MAAKpF,GA7CV,cAA8B4rE,EAAAA,EACjC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,gDAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,0BAAAE,GAAA,OAEhBO,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKyP,UAAS,IAAMzP,KAAKwuC,cACrB9uB,gBACU1f,KAAKg+P,wCAAwC,IAG3Dh+P,KAAKyP,UAAS,IAAMzP,KAAKi+P,yCAAyC/9P,SAC9Dwf,gBACU1f,KAAKg+P,wCAAwC,IAG3Dh+P,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAClCA,IACOA,EACA3P,KAAKk+P,qBAAqB,CACtB,IAAI9C,GAA+Bp7P,KAAKwL,UACxC,IAAIwwP,GAA2Bh8P,KAAKwL,YAGxCxL,KAAKk+P,qBAAqB,GAC9B,GACD,CACHhiP,iBAAiB,GAEzB,CAKAiiP,8CAAAA,CAA+ClmP,IAC3C2R,EAAAA,EAAAA,KAAY,KACR5pB,KAAKi+P,yCAAyCtjP,KAAK1C,EAAO,GAElE,CAQQimP,oBAAAA,CAAqBE,GACzBp+P,KAAKq+P,mBAAmBzyM,SAAQ0yM,GAAMA,EAAGjgP,YACzCre,KAAKq+P,mBAAqBD,CAC9B,CAEA,eAAI5vN,GACA,OAAOxuC,KAAKu+P,mBAAmBr+P,OAAS,CAC5C,CAEA,gBACIs+P,GACA,IAAIC,EAAuC,GAS3C,OAPAz+P,KAAKq+P,mBAAmBzyM,SAAQ8yM,IAC5BD,EAAc,IACPA,KACAC,EAASpD,SACf,IAGEmD,CACX,CAGA,sBAAIF,GACA,OAAOv+P,KAAKw+P,aAAa/+O,QAAOkI,GAAKA,EAAEgyO,SAC3C,CAEA,oCAAIgF,GAEA,MAAO,IAAI3+P,KAAKu+P,oBACX/sH,MAAK,CAACotH,EAAIC,KAAQ,IAADC,EAAAC,EAAAC,EAAAC,EACd,IAAIC,GAAkC,QAA3BJ,EAAgB,QAAhBC,EAACH,EAAGrF,oBAAY,IAAAwF,OAAA,EAAfA,EAAiBnrN,iBAAS,IAAAkrN,EAAAA,EAAI,IAAgC,QAA/BE,EAAoB,QAApBC,EAAKJ,EAAGtF,oBAAY,IAAA0F,OAAA,EAAfA,EAAiBrrN,iBAAS,IAAAorN,EAAAA,EAAI,GAC9E,OAAa,IAATE,EACOA,EAEJN,EAAGprI,eAAe5/E,UAAYirN,EAAGrrI,eAAe5/E,SAAS,GAE5E,CAEA,sCAAIurN,GACA,MAAO,IAAIn/P,KAAKu+P,oBACX/sH,MAAK,CAACotH,EAAIC,IAAOD,EAAGprI,eAAe5/E,UAAYirN,EAAGrrI,eAAe5/E,WAC1E,CAEA,6BAAI7lB,GACA,OAAO/tB,KAAKm/P,mCACP5uP,KAAIoX,GAAK,IAAIk2O,GAAyBl2O,KACtClI,QAAOkI,GAAKA,EAAEgyO,SACvB,CAEAyF,eAAAA,CAAgB7vO,GACZ,OAAOvvB,KAAKu+P,mBAAmB53H,MAAKh/G,GAAKA,EAAE4H,KAAOA,KAAO,IAC7D,CAEA8vO,mCAAAA,CAAoCtqP,GAChC,OAAO/U,KAAK2+P,iCAAiCl/O,QAAO6P,GAAWA,EAAQgqO,QAAQvkP,IACnF,CAEA,qBAAM+mP,SACI9gO,QAAQid,IAAIj4C,KAAKq+P,mBAAmB9tP,KAAI2pB,GAAKA,EAAE4hO,oBACzD,CAEA,4CAAMkC,GACF,GAAIh+P,KAAKwuC,YAAa,CAClB,IAAK,IAAIv2B,KAAUjY,KAAKi+P,+CACdhmP,IAGVjY,KAAKi+P,yCAA2C,EACpD,CACJ,GACHzlP,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,4CAvFItE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBACoE,EAAG,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAUvB,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,wBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,wBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAa3Do6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,gBAAAtJ,GAAAsJ,WAAAtJ,IC5DN,MAAMwsP,WAA4B5gL,EAAAA,EACrC6gL,4BAAAA,GACI,OAAOv/P,KAAKwL,SAASoK,YAAYC,UAAU,SAC/C,CAEA0+E,kBAAAA,CAAmBthF,GACf,OAAOjT,KAAKwL,SAAS63E,IAAIkR,mBAAmBthF,EAAS8B,SAAU9B,EAASo5E,YAAap5E,EAASw5E,SAClG,E,yBCPG,IAAM+yK,IAAiB3nP,GA2CzBC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKF,GAcZF,EAAAA,GAAWxK,IAAG8W,GAOdnM,EAAAA,GAAOC,MAAKpF,GAnEV,cAAgC2sF,GAAAA,EACnC1sF,WAAAA,CAAY+sH,GACR1nH,MAAM0nH,GAAgB,KAqBlB2/H,yBAA0CzkO,QAAQC,WAAS1iB,EAAAA,EAAAA,GAAA,4BAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,0BAAAE,GAAA,OAnB/DO,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKyP,UACD,IAAMzP,KAAKwL,SAASkE,KAAKC,eACxBA,IACOA,EACI3P,KAAK0/P,eACL1/P,KAAKy/P,yBAA2Bz/P,KAAK2/P,sBAGzC3/P,KAAKy/P,yBAA2BzkO,QAAQC,UACxCj7B,KAAK4/P,yBAAwB,GACjC,GACD,CACC1jP,iBAAiB,GAG7B,CAIA,uBAAcyjP,GACV,IAAIE,GAAsB,EAC1B,GAAI7/P,KAAKwL,SAASkE,KAAKC,aACnB,IACIkwP,SAA8B7/P,KAAKwL,SAASs0P,IAAIC,uBACpD,CACA,MAAOrxP,GACH1O,KAAKwL,SAAS2L,OAAOxI,MAAM,+BAAgCD,EAC/D,CAGJ1O,KAAK4/P,wBAAwBC,EACjC,CAEA5oC,kBAAAA,GACI,OAAOj3N,KAAKy/P,wBAChB,CAMQG,uBAAAA,CAAwBp/B,GAC5BxgO,KAAKggQ,qBAAuBx/B,CAChC,CAGA,uBAAIvqM,GACA,OAAOj2B,KAAKggQ,oBAChB,CAEA,kBAAI9pO,GACA,OAAOl2B,KAAKigQ,iBAChB,CAKA,qBAAI9pO,GACA,OAAOn2B,KAAKkgQ,kBAChB,CAGAC,oBAAAA,CAAqBC,GACjBpgQ,KAAKkgQ,mBAAqBE,CAC9B,CAEApqO,uBAAAA,CAAwB3vB,GACpBrG,KAAK0/F,iBAAiBr5F,EAAS,yBACnC,CAEQq5P,UAAAA,GACJ,OAAO1/P,KAAKwL,SAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAK8rD,yBAAyBnqM,OACjG,CAEQ+pM,eAAAA,GACJ,OAAOjgQ,KAAKwL,SAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAK8rD,yBAAyBnqO,cACjG,CAEA,mBAAMhB,CAAc7uB,GAChBA,EAAQovB,sBAAwBpvB,EAAQovB,uBAAyB,CAAC,EAElEhZ,OAAOilH,OAAOr7H,EAAQovB,sBAAuB,CACzC4uF,cAAerkH,KAAKwL,SAASye,cAAc26G,iBAE3CvqH,WAAY,SACZimP,cAAetgQ,KAAKwL,SAASyoL,QAAQssE,wBAG5BvgQ,KAAKwL,SAASouF,aAAa4mK,yBAAyB,CAC7D1mK,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3C7rB,QAAS9uB,EAAQ8uB,QACjBM,sBAAuBpvB,EAAQovB,uBAEvC,GACHjd,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,wBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAxD2C,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,2BAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,2BAAAtJ,GAAAsJ,WAAA3D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAiBP,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,wBAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,wBAAAtJ,GAAAsJ,WAAAtJ,IC9DxC,MAAM2tP,WAA4B/hL,EAAAA,EACrC,gBAAMyiE,CAAW96I,SACPrG,KAAKwL,SAAS63E,IAAIi/D,aAAanB,WAAW96I,EACpD,E,aCDG,ICNKq6P,GDMCC,IAAmB9oP,GAoB3BC,EAAAA,GAAWxK,IAAGwF,GApBZ,cAAkC4rE,EAAAA,EACrC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAYZo1P,sBAAyB9gO,KAC7BlW,EAAAA,EAAAA,KAAY,KACR5pB,KAAK+2O,oBAAsBj3M,EAAU+2M,WAAW,GAClD,GACLt+N,EAAAA,EAAAA,GAAA,2BAAAC,GAAA,OAdGQ,EAAAA,EAAAA,IAAehZ,MACfwL,EAAS63E,IAAIoxC,OAAOuf,qBAAqBh0I,KAAK4gQ,uBAC9C5gQ,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAClCA,IACQA,IACD3P,KAAK+2O,oBAAsB,KAC/B,GAEZ,GAWHv+N,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAF0C,IAAK,IAAD1J,KClB9C,SATW4tP,GAAAA,EAAAA,EAAmB,WAAnBA,EAAAA,EAAmB,2CAAnBA,EAAAA,EAAmB,+CAAnBA,EAAAA,EAAmB,+CAAnBA,EAAAA,EAAmB,iBAAnBA,EAAAA,EAAmB,yDAAnBA,EAAAA,EAAmB,iDAS9B,CATWA,KAAAA,GAAmB,KCKxB,MAAMG,WAAmBniL,EAAAA,EAC5B3rE,WAAAA,CAAY+sH,GACR1nH,MAAM0nH,GAAgB,KA8BlBghI,QAA6B,KAAK,KAClCC,gBAAwC,KA9B5C/gQ,KAAKghQ,cACT,CAGQA,YAAAA,GACChhQ,KAAKib,YAIVjb,KAAKwL,SAAS63E,IAAIoxC,OAAO2hB,uBAAuBt2G,IAC5C9/B,KAAKihQ,SAASnhO,EAAU6pG,MAAM,IAGlC3pI,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAAeuxP,IAC9CA,EACAlhQ,KAAKmhQ,WAELnhQ,KAAKohQ,aACT,GACD,CACCllP,iBAAiB,IAEzB,CAEA,aAAIjB,GACA,OAAOjb,KAAKwL,SAASye,cAAc6P,gBAAgBunO,OAAOnrM,WACpDl2D,KAAKwL,SAASye,cAAc6P,gBAAgBunO,OAAOC,MAC7D,CAKA,cAAcC,GACLvhQ,KAAK8gQ,gBACA9gQ,KAAKwL,SAAS82I,aAAanB,WAAW,CACxClnF,IAAKj6D,KAAKwL,SAASye,cAAc6P,gBAAgBunO,OAAOC,SAE5DthQ,KAAK8gQ,QAAU9gQ,KAAKwL,SAASsE,OAAO4yG,kBAAkB,kBAE9D,CAEA,cAAcy+I,GAEV,GAAInhQ,KAAK+gQ,gBACL,OAAO/gQ,KAAK+gQ,gBA2BhB,OANA/gQ,KAAK+gQ,gBAlBkBrhP,WACnB,IACI,MAAMizM,QAAsB3yN,KAAKwL,SAAS63E,IAAIumD,mBAC9C,GAAkB,OAAb+oF,QAAa,IAAbA,IAAAA,EAAehpF,MAChB,MAAM,IAAI15D,MAAM,yCAGdjwE,KAAKuhQ,WACX,MAAMlhJ,QAAYrgH,KAAK8gQ,QAAQU,QAAQ,CACnCC,UAAW9uC,EAAchpF,QAE7B3pI,KAAKwL,SAAS2L,OAAOk+G,KAAK,6BAA8BhV,EAC5D,CAAE,MAAO3xG,GAEL,MADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,0BAA2BD,GAChDA,CACV,GAGmBgzP,GAEvB1hQ,KAAK+gQ,gBAAgBjjM,OAAM,KAEvB99D,KAAK+gQ,gBAAkB,IAAI,IAExB/gQ,KAAK+gQ,eAChB,CAEA,cAAcE,CAASU,GACnB,UACU3hQ,KAAKmhQ,iBACLnhQ,KAAK8gQ,QAAQc,sBAAsB,CACrCD,QAASA,IAEb3hQ,KAAKwL,SAAS2L,OAAOk+G,KAAK,2CAC9B,CAAE,MAAO3mH,GAEL,MADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,wCAAyCD,GAC9DA,CACV,CACJ,CAEA,iBAAc0yP,GAEV,GADAphQ,KAAK+gQ,gBAAkB,KACnB/gQ,KAAK8gQ,QACL,UACU9gQ,KAAK8gQ,QAAQe,6BACnB7hQ,KAAKwL,SAAS2L,OAAOk+G,KAAK,gDAC9B,CAAE,MAAO3mH,GAEL,MADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,6CAA8CD,GACnEA,CACV,CAER,CAEA,qBAAMozP,GACF,UACU9hQ,KAAKmhQ,WACX,MAAMY,QAAoB/hQ,KAAK8gQ,QAAQkB,mBAEvC,OADAhiQ,KAAKwL,SAAS2L,OAAOk+G,KAAK,qCAAsC0sI,GACzDA,CACX,CAAE,MAAMrzP,GAEJ,MADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,mCAAoCD,GACzDA,CACV,CACJ,CAEA,2BAAMqxP,GACF,IAAK//P,KAAKwL,SAASkE,KAAKC,aAEpB,OADA3P,KAAKwL,SAAS2L,OAAOs8B,QAAQ,6DACtB,EAGX,MAAMsuN,QAAoB/hQ,KAAK8hQ,kBACzBG,EAA4B,CAACvB,GAAoBwB,qBAKvD,QAD6BH,EAAYvhC,aAAeyhC,EAA0B/kP,SAAS6kP,EAAYI,qBAE3G,E,OCnIG,MAAMC,GAA2B3kQ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mEAErBe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOyC,gBAAgB,ICS5D,MAAM63P,WAAkC7iQ,GAAAA,EAAgDuT,WAAAA,GAAA,SAAA9S,WAAA,KAEnF0qN,aAAe,KACnB3qN,KAAKlC,MAAMk6B,eAAiBh4B,KAAKlC,MAAMk6B,cAAcC,OAAO,CAC9D,CAEFx4B,MAAAA,GACI,OACI+I,EAAAA,GAAAA,MAAA,OAAK7I,WAAWG,EAAAA,GAAAA,IAAQ,oBAAoBC,SAAA,EACxCL,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,0BACpDnW,EAAAA,GAAAA,KAAC0iQ,GAAwB,KACzB1iQ,EAAAA,GAAAA,KAACuzD,GAAAA,GAAmB,CAAAlzD,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,0BAC1DnW,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CACxBC,cAAe,CACXt2B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,gBAC1CxO,QAASrH,KAAK2qN,aACdhrN,WAAWG,EAAAA,GAAAA,IAAQ,uCAK3C,E,mBChCG,MAAMwiQ,GAAgB7kQ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mFAC5Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWklB,SAAS,I,OCA3C,MAAMk/O,IAAuB9kQ,EAAAA,GAAAA,IAAOsnD,GAAAA,GAAPtnD,CAAqBE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0BCenDiV,IAAqDtT,EAAAA,GAAAA,KAAUzB,IACjE,MAAM0N,GAAWqD,EAAAA,GAAAA,KAMXqb,EAAwBpsB,EAAMu6M,WAAWmqD,oBAC/C,IAAIC,EACAC,EAWJ,OARIx4O,GAA8B,OAAtBA,EAAKy4O,cAIbF,EAAkBj3P,EAASwJ,SAASC,YAAYiV,EAAK04O,aACrDF,EAAkBl3P,EAASwJ,SAASC,YAAYiV,EAAK24O,eAJrDJ,EAAkBj3P,EAASoK,YAAYC,UAAU,iCACjD6sP,EAAkBl3P,EAASoK,YAAYC,UAAU,mCAOjDrN,EAAAA,GAAAA,MAAC85P,GAAa,CAAC3iQ,WAAWG,EAAAA,GAAAA,IAAQ,0BAA0BC,SAAA,EACxDL,EAAAA,GAAAA,KAACqzD,GAAAA,GAAiB,CAAAhzD,SAAEyL,EAASoK,YAAYC,UAAU,2BACnDnW,EAAAA,GAAAA,KAAC6iQ,GAAoB,CAAAxiQ,SAAEyL,EAASoK,YAAYC,UAAU,kCACtDnW,EAAAA,GAAAA,KAAC6iQ,GAAoB,CAAC5iQ,WAAWG,EAAAA,GAAAA,IAAQ,+BAA+BC,SAAE0iQ,KAC1E/iQ,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SAAEyL,EAASoK,YAAYC,UAAU,oCAC/CnW,EAAAA,GAAAA,KAAC6iQ,GAAoB,CAAC5iQ,WAAWG,EAAAA,GAAAA,IAAQ,+BAA+BC,SAAE2iQ,KAE1EhjQ,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CACxBC,cAAe,CACXt2B,KAAM0J,EAASoK,YAAYC,UAAU,MACrCxO,QA7BKsjN,KACjB7sN,EAAMglQ,WAAahlQ,EAAMglQ,YACzBhlQ,EAAMk6B,eAAiBl6B,EAAMk6B,cAAcC,OAAO,EA4BtCt4B,WAAWG,EAAAA,GAAAA,IAAQ,uCAGf,IAKXijQ,IAAsB1rP,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,e,OCxDzD,MAAMmwP,GAA0BvlQ,GAAAA,GAAO8L,MAAMC,MAAM,CAACC,KAAM,YAA1BhM,CAAsCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+E,OCAtE,MAAMqlQ,GAAwBxlQ,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mbAO1BE,GAAUA,EAAM69C,QAAU79C,EAAMI,MAAM6J,OAAO0C,aAAe,SAcjE3M,GAAUA,EAAM69C,QAAU,mBAAqB,kB,OCpBzD,MAAMunN,GAAkBzlQ,GAAAA,GAAO68B,MAAK38B,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iHCQpC,MAAMulQ,WAA8B3jQ,GAAAA,EAEvCC,MAAAA,GACI,OAAQ+I,EAAAA,GAAAA,MAAC06P,GAAe,CAACvjQ,UAAWK,KAAKlC,MAAM6B,UAAUI,SAAA,EACrDL,EAAAA,GAAAA,KAACsjQ,GAAuB,CACCrnN,QAAS37C,KAAKlC,MAAM69C,QACpB3xC,SAAWxF,GAAMxE,KAAKlC,MAAMu+K,SAAS73K,EAAE0F,OAAOyxC,YACvEj8C,EAAAA,GAAAA,KAACujQ,GAAqB,CAACtnN,QAAS37C,KAAKlC,MAAM69C,YAEnD,E,OClBG,MAAMynN,GAA2B3lQ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,uQAK5Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,IAU7B/gD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,I,OCfpD,MAYailQ,GAZ4B5lQ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qJAIxCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,SAAS,IAIjCrH,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOu1B,cAAc,I,OCR9C,MAAMgmO,GAAkC7lQ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0PAMjCE,GAASA,EAAMI,MAAM6J,OAAOwC,iBCKvCg5P,IAA0EhkQ,EAAAA,GAAAA,KAAUzB,IAC7F,MAAM0N,GAAWqD,EAAAA,GAAAA,MACV20P,EAAaC,IAAkB/1P,EAAAA,GAAAA,WAAS,IAE/CC,EAAAA,GAAAA,YAAU,KACqB+R,WACvB,IAGI,SAFwBlU,EAASuhB,OAAO6pO,sBAEzB,CACX,MAAM4M,QAAoBh4P,EAASuhB,OAAOkgM,qBAAqBy2C,yBAC/DD,EAAeD,EACnB,CACJ,CAAE,MAAO90P,GACLlD,EAAS2L,OAAOxI,MAAM,oCAAqCD,EAC/D,GAEJi1P,EAAoB,GACrB,CAACn4P,EAASqd,UAAWrd,EAASuhB,OAAQvhB,EAAS2L,SAoClD,OACI3O,EAAAA,GAAAA,MAAC46P,GAAwB,CAAArjQ,SAAA,EACrBL,EAAAA,GAAAA,KAAC2jQ,GAAyB,CAAAtjQ,SACrByL,EAASoK,YAAYC,UAAU,uBAEpCrN,EAAAA,GAAAA,MAAC86P,GAA+B,CAAAvjQ,SAAA,EAC5BL,EAAAA,GAAAA,KAAA,OAAAK,SAAMyL,EAASoK,YAAYC,UAAU,2BACrCnW,EAAAA,GAAAA,KAACyjQ,GAAqB,CAACxnN,QAAS6nN,EAAannF,SAAW73K,GAzC5Ckb,WACpB,IAAIkkP,EAAY,iBAChB,IACQC,SACMr4P,EAASuhB,OAAO6pO,sBACOprP,EAASuhB,OAAOkgM,qBAAqB62C,WAAWlN,6BAEnEprP,EAASuhB,OAAOkgM,qBAAqBC,kBAC3Cu2C,EAAeI,UAGsBr4P,EAASuhB,OAAO8pO,+BAE3CrrP,EAASuhB,OAAO+pO,uBAGtBtrP,EAAS2L,OAAOs8B,QAAQ,qCACxB31C,EAAMk6B,cAAcC,WAK5BwrO,GAAe,GACfj4P,EAASuhB,OAAOiqO,aAChB4M,EAAY,kBAEpB,CAAE,MAAOl1P,GACLlD,EAAS2L,OAAOxI,MAAM,oCAAqCD,GAC3D5Q,EAAMk6B,cAAcC,OACxB,CAEAzsB,EAASqd,UAAUkd,uBAAwB,iBAAkB69N,EAAU,EAUDz3C,CAAgB3nN,GAAI7E,WAAWG,EAAAA,GAAAA,IAAQ,oCAElF,IC5E5B,IAAKikQ,IAKX,SALWA,GAAAA,EAAAA,EAAqB,uBAArBA,EAAAA,EAAqB,mBAArBA,EAAAA,EAAqB,qBAArBA,EAAAA,EAAqB,2BAKhC,CALWA,KAAAA,GAAqB,K,wCC2B1B,MAAMC,WAA+BtlL,EAAAA,EACxCwzJ,qBAAAA,CAAsB+xB,GAQlB,IAAIr3J,EAAkB5sG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM8oG,oBAC7D,OAAOx0G,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CAC5C5yB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,4BAC3C/T,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,2BAC1C0zC,QAASqjD,EACTlxE,QAAS,CACL,CACI55B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,sCAC1C8lB,aAAc,UACdt0B,QAASqY,UACL,GAAIukP,EAAkB,CAClB,MAAM,SAACj7O,EAAQ,OAAE/Q,EAAM,MAAEqiB,EAAK,MAAExwB,EAAK,qBAAEs1H,GAAwB6kI,EAC/DjkQ,KAAKwL,SAASqd,UAAU+S,cAAc5S,EAAU/Q,EAAQqiB,EAAOxwB,EAAOs1H,EAC1E,CAEA,mBADap/H,KAAKwL,SAASi0D,eAAeykM,kBACnCroO,GAAAA,EAAkCsoO,cAAc,KAK3E,CAEAC,sBAAAA,GACI,MAAM31C,EAAwBzuN,KAAKwL,SAASu1C,MAAMC,UAC5CqjN,EAAuBA,KACzBrkQ,KAAKwL,SAASi7G,oBAAoByjG,mBAAmB,CACjDpwH,sBAAuB20H,EACvBnjB,cAAemjB,EACftE,WAAYptG,GAAAA,GAAmBC,eAC/BytG,mBAAoBluG,GAAAA,GAAsBG,6BAC5C,EAEA4nJ,EAAMtkQ,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CACjDK,QAAS,CACL,CACIC,aAAc,UACd75B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,gBAC1CxO,QAASqY,UACL2kP,IACOxoO,GAAAA,EAAkCC,0BAIrDh6B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,uBAC1CpN,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,wBAC3C0zC,QAASvpD,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMg9C,gBAChDE,yBAAyB,EACzB2+I,mCAAmC,EACnCl+I,kBAAmBg7M,IAUvB,OAPArkQ,KAAKwL,SAASi7G,oBAAoB8jG,eAAe,CAC7CzwH,sBAAuB20H,EACvBnjB,cAAemjB,EACfjE,iBAAkBtvG,GAAAA,GAAoBO,cACtCgvG,mBAAoBluG,GAAAA,GAAsBG,8BAGvC4nJ,CACX,CAEAC,oBAAAA,GACI,MAAM91C,EAAwBzuN,KAAKwL,SAASu1C,MAAMC,UAS5CsjN,EAAMtkQ,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IACvCt4B,EAAAA,GAAAA,KAAC2iQ,GAAyB,CACtBrqO,cAAeA,KAEnB,CACIvvB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,sBAC3C5O,KAAMjH,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMg9C,gBAC7Cq7I,4BAA4B,EAC5Bn7I,yBAAyB,EACzBQ,qBAAqB,EACrB9L,oBAAoB,EACpBD,gBAAgB,EAChBypJ,YAAcz/G,GAAAA,EAAsB6mI,QAAU,EAC9CrwJ,0BAA0B,EAC1BzY,SAtBqBi/M,KACzBrkQ,KAAKwL,SAASi7G,oBAAoByjG,mBAAmB,CACjDpwH,sBAAuB20H,EACvBnjB,cAAemjB,EACftE,WAAYptG,GAAAA,GAAmBC,eAC/BytG,mBAAoBluG,GAAAA,GAAsBI,2BAC5C,IA2BN,OAPA38G,KAAKwL,SAASi7G,oBAAoB8jG,eAAe,CAC7CzwH,sBAAuB20H,EACvBnjB,cAAemjB,EACfjE,iBAAkBtvG,GAAAA,GAAoBQ,6BACtC+uG,mBAAoBluG,GAAAA,GAAsBI,4BAGvC2nJ,CACX,CAEA,sCAAMptB,CAAiC7wO,GACnC,MAAMuP,EAAc5V,KAAKwL,SAASoK,YAClC,OAAO,IAAIolB,SAAsB,CAACC,EAASimK,KACvC,MAAMutB,EAAwBzuN,KAAKwL,SAASu1C,MAAMC,UAC5CwjN,EAAevsP,IACjBjY,KAAKwL,SAASi7G,oBAAoByjG,mBAAmB,CACjDpwH,sBAAuB20H,EACvBnjB,cAAemjB,EACftE,WAAYlyM,EACZwyM,mBAAoBluG,GAAAA,GAAsBK,2BAC5C,EAEN58G,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CACrC5yB,MAAOmN,EAAYC,UAAU,yCAC7B/T,KAAM8T,EAAYC,UAAU,oCAC5B5O,MAAOvH,EAAAA,GAAAA,KAACmzB,GAAAA,EAAQ,IAChByI,iBAAiB,EACjBI,QAAS,CACL,CACI55B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,UAC1C8lB,aAAc,UACdt0B,QAASqY,UACL,UACUrZ,EAAQ+wO,WACdotB,EAAYznJ,GAAAA,GAAmBE,eAC/BhiF,EAAQgiN,GAAawnB,SACzB,CAAE,MAAO/1P,GACLwyL,EAAOxyL,EACX,CAEA,OAAOmtB,GAAAA,EAAkCC,sBAAsB,GAGvE,CACIh6B,KAAM8T,EAAYC,UAAU,UAC5B8lB,aAAc,OACdt0B,QAASqY,UACL,UACUrZ,EAAQ8wO,WACdqtB,EAAYznJ,GAAAA,GAAmBC,gBAC/B/hF,EAAQgiN,GAAaG,SACzB,CAAE,MAAO1uO,GACLwyL,EAAOxyL,EACX,CAEA,OAAOmtB,GAAAA,EAAkCC,sBAAsB,MAM/E97B,KAAKwL,SAASi7G,oBAAoB8jG,eAAe,CAC7CzwH,sBAAuB20H,EACvBnjB,cAAemjB,EACfjE,iBAAkBtvG,GAAAA,GAAoBS,YACtC8uG,mBAAoBluG,GAAAA,GAAsBK,2BAC5C,GAGV,CAEA,oBAAM8nJ,CAAeC,GACjB,MAAMl2C,EAAwBzuN,KAAKwL,SAASu1C,MAAMC,UAC5CqjN,EAAuBA,KACzBM,GAAkBA,IAElB3kQ,KAAKwL,SAASi7G,oBAAoByjG,mBAAmB,CACjDpwH,sBAAuB20H,EACvBnjB,cAAemjB,EACftE,WAAYptG,GAAAA,GAAmBC,eAC/BytG,mBAAoBluG,GAAAA,GAAsBO,eAC5C,EAGAwnJ,EAAMtkQ,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IACvCt4B,EAAAA,GAAAA,KAACqjQ,GAAmB,CAChBD,UAAWuB,EACXrsO,cAAeA,KAEnB,CACIvvB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,qBAC3C5O,KAAMjH,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMg9C,gBAC7Cq7I,4BAA4B,EAC5Bn7I,yBAAyB,EACzBQ,qBAAqB,EACrB9L,oBAAoB,EACpBD,gBAAgB,EAChBypJ,YAAaz/G,GAAAA,EAAsB6mI,QAAW,EAC9CrwJ,0BAA0B,EAC1BviC,iBAAiB,IAInBpR,SAA+BlqB,KAAKwL,SAAS6sM,YAAYmqD,oBACzD1jC,EAAiB9+N,KAAKwL,SAAS6U,YAAYmZ,cAgBjD,OAfAx5B,KAAKwL,SAASi7G,oBAAoB8jG,eAAe,CAC7CzwH,sBAAuB20H,EACvBnjB,cAAemjB,EACfjE,iBAAkBtvG,GAAAA,GAAoBU,aACtC6uG,mBAAoBluG,GAAAA,GAAsBO,cAC1C2hH,UAAW,CACPC,YAAax0M,EAAK04O,YAClBjkC,YAAaz0M,EAAK24O,YAClB/qO,UAAW5N,EAAKypO,UAChB/0B,YAAa10M,EAAK06O,YAClB/lC,aAAc30M,EAAKy4O,aACnB7jC,eAAgBA,KAIjBwlC,CACX,CAEA3nK,yBAAAA,GACI,OAAO38F,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAAiBt4B,EAAAA,GAAAA,KAAC6jQ,GAA8B,CAClFvrO,cAAeA,KACf,CACAvvB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,wBAC3CkuL,4BAA4B,EAC5Bn7I,yBAAyB,EACzBQ,qBAAqB,EACrByU,0BAA0B,EAC1BvgB,oBAAoB,EACpB+L,kBAAmBA,IAAMrpD,KAAKwL,SAAS63E,IAAIqP,cAAc+nD,6BAEjE,CAEA,sCAAM0iG,GACF,IAAIn9O,KAAKwL,SAASq5P,gBAAgB5pP,YAAcjb,KAAKwL,SAASq5P,gBAAgB7jI,cAG1E,OAAOhmG,QAAQC,QAAQgiN,GAAaG,UAGxC,MAAM0nB,QAA4B9kQ,KAAKwL,SAASq5P,gBAAgBE,0BAEhE,OAAGD,EAAoBE,gBAAkBjB,GAAsBlhQ,OACpDo6O,GAAaG,eAGXp9O,KAAKilQ,iCAAiCH,EAEvD,CAEQG,gCAAAA,CAAiC/6O,GAErC,MAAMrB,EAAY7oB,KAAKwL,SAASq5P,gBAAgBh8O,UAIhD,OAFAA,EAAUq8O,2BAEH,IAAIlqO,SAAsBC,IAE7Bj7B,KAAKwL,SAAS4vB,OAAOgiB,WAAWplB,IAC5Bt4B,EAAAA,GAAAA,KAACw4B,GAAAA,EAA2B,CACxBF,cAAeA,EACfH,gBAAiB3N,EAAK2N,gBACtBE,UAAW7N,EAAKi7O,iBAChBrtO,UAAW5N,EAAKk7O,iBAChB/sO,SAAUA,KACNxP,EAAUw8O,+BAA+B,UACzCrtO,EAAcC,QACdgD,EAAQgiN,GAAaG,SAAS,EAGlC7kN,SAAUA,KACN1P,EAAUw8O,+BAA+B,UACzCrtO,EAAcC,QACdgD,EAAQgiN,GAAawnB,SAAS,KAGvC,CACCh8P,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,wCAC3C0nC,yBAAyB,EACzBF,gBAAgB,EAChBC,oBAAoB,EACpB+L,kBAAmBA,KACfxgC,EAAUw8O,+BAA+B,UACzCpqO,EAAQgiN,GAAawnB,SAAS,GAEpC,GAGV,ECtTG,IAAMa,IAAuBztP,GAW/BC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKF,GAKZF,EAAAA,GAAWxK,IAAG8W,GAGdnM,EAAAA,GAAOC,MAAKmM,GAUZpM,EAAAA,GAAOC,MAAKpF,GAhCV,MACHC,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,EAAiC,KAQxDoiP,qBAA+B,IAAEr1O,EAAAA,EAAAA,GAAA,iBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,eAAAE,GAAA,OAPrCO,EAAAA,EAAAA,IAAehZ,KACnB,CAEA,iBAAI8tP,GACA,MAAO,CAAC,GAAI,GAAI,GACpB,CAQQ33H,aAAAA,CAAcrsH,GAClB9J,KAAKyrD,UAAY3hD,CACrB,CAMQy7P,WAAAA,CAAYz7P,GAChB9J,KAAKyuP,QAAU3kP,CACnB,CAEA07P,KAAAA,GACIxlQ,KAAKm2H,eAAc,GACnBn2H,KAAKulQ,YAAY,GACrB,CAGAxX,sBAAAA,CAAuBC,GAChBA,IAAiBhuP,KAAK4tP,uBAGzB5tP,KAAK4tP,qBAAuBI,EAC5BhuP,KAAKwlQ,QACLxlQ,KAAKylQ,iBACT,CAEA,mBAAcrW,CAAcC,GACxB,MAAM35L,EAAmB,CAAC,EACpB45L,EAA6B,GAYnC,GAVAD,EAAeqW,WAAW95M,SAAQ4jM,IAC9B,MAAMz6O,EAAWy6O,EAAOmW,WAClB1yP,EAAWjT,KAAKwL,SAAS2P,MAAMC,SAASrG,GAC3C9B,EACCyiD,EAAOziD,EAAS8B,UAAY9B,EAE5Bq8O,EAAiB30O,KAAK5F,EAC1B,IAGDu6O,EAAiBpvP,OAAS,EAAG,CAC5B,MAAMkb,QAAiBpb,KAAKwL,SAAS2P,MAAM4mH,uBAAuButH,GAClE7yO,OAAOspC,KAAK3qC,GAAUwwC,SAAQ72C,IAC1B2gD,EAAO3gD,GAAYqG,EAASrG,EAAS,GAE7C,CAEA,OAAO2gD,CACX,CAEQkwM,WAAAA,CAAYhW,GAChB,MAAO,CACH,CACIj2E,YAAa35K,KAAKwL,SAASoK,YAAYC,UAAU,0BACjD/L,MAAO9J,KAAKwL,SAASwJ,SAASC,YAAY26O,EAAWiW,WACrD97P,SAASjK,EAAAA,GAAAA,IAAQ,iCAErB,CACI65K,YAAa35K,KAAKwL,SAASoK,YAAYC,UAAU,gBACjD/L,MAAO9J,KAAKwL,SAASwJ,SAASC,YAAY26O,EAAWkW,6BACrD/7P,SAASjK,EAAAA,GAAAA,IAAQ,sCAG7B,CAGA,oBAAM2lQ,GACF,IAAGzlQ,KAAKyrD,UAAR,CAIAzrD,KAAKm2H,eAAc,GAEnB,IACI,MAAM09E,EAAsD,CACxD86C,aAAc3uP,KAAK4tP,sBAGjByB,QAAuBrvP,KAAKwL,SAASonH,IAAI40F,kBAAkBpB,kBAAkBvS,GAC7Ez4L,QAAiBpb,KAAKovP,cAAcC,GACpCM,EAA+C,GAGrD,IAAI,IAAIC,KAAcP,EAAeqW,WAAY,CAC7C,MAAM3wP,EAAW66O,EAAW+V,WACtB1yP,EAAWmI,EAASrG,GAEX,IAADgxP,EAAd,GAAI9yP,EACA08O,EAAWh1O,KAAK,CACZqrP,MAAuB,QAAlBD,EAAEnW,EAAWqW,aAAK,IAAAF,OAAA,EAAhBA,EAAkB5mQ,WACzB+mQ,WAAYtW,EAAW+V,WACvBxiO,SAAUlwB,EAASxK,MACnBwN,UAAWhD,EAAS+yD,aAAa,CAACnB,WAAY7kE,KAAKwL,SAAStN,MAAM6jC,uBAClEokO,oBAAqBlzP,EAAS2zD,2BAA2B5mE,KAAKwL,SAAStN,MAAM6jC,sBAC7EqkO,QAAS,IAAItpM,KAAK8yL,EAAWyW,aAC7BtU,QAAS/xP,KAAK4lQ,YAAYhW,UAG9B5vP,KAAKwL,SAAS2L,OAAOxI,MAAM,yCAAD/O,OAA0CmV,EAAQ,wBAEpF,CAEA/U,KAAKulQ,YAAY5V,EACrB,CAAC,QACG3vP,KAAKm2H,eAAc,EACvB,CApCA,CAqCJ,GACH39G,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA/GwB,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,iBAAAtJ,GAAAsJ,WAAA3D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,WAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAQkB,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,eAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,eAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,0BAAAiI,IAAA5H,OAAAC,yBAAA5J,GAAAsJ,UAAA,0BAAAtJ,GAAAsJ,WAAAtJ,ICtB3C,MAAMwzP,WAA8B5nL,EAAAA,EACvC0nI,iBAAAA,GACI,OAAO,IAAIk/C,GAAwBtlQ,KAAKwL,SAC5C,ECEG,MAAM+6P,GACTxzP,WAAAA,CAA6BvH,EAAoDnF,GAAoC,KAAxFmF,SAAAA,EAAiC,KAAmBnF,QAAAA,EAAiC,KAoE1Gw0D,cAAgBn7C,sBACP1f,KAAKwL,SAASi0D,eAAe26B,cAAc,CACpDx6E,MAAOy6E,GAAAA,GAAawB,cACtB,EACL,KAEO2qK,iBAAW,OACX96O,kBAAY,EA1EhB,MAAM+6O,EAA8BzmQ,KAAKwL,SAASsE,OAAO4yG,kBAAkB,WAAWgkJ,kBAEhFC,EAAoC3mQ,KAAK4mQ,qBAE/C5mQ,KAAKwmQ,YAAc,IAAIC,EAA4BE,GAEnD3mQ,KAAKwmQ,YAAY3nO,iBAAiB,wBAAyB7+B,KAAK66D,eAEhE76D,KAAK0rB,aAAe1rB,KAAKwL,SAAS63E,IAAIoxC,OAAO2hB,uBAAsBz3I,IAAA,IAAC,MAACgrI,GAAMhrI,EAAA,OAAKqB,KAAKqG,QAAQwgQ,gBAAkBl9H,CAAK,GAExH,CAEQi9H,kBAAAA,GACJ,MAAO,CACHv9E,SAAUrpL,KAAKqG,QAAQssN,cACvBm0C,cAAe9mQ,KAAKqG,QAAQwgQ,cAC5BE,IAAK/mQ,KAAKwL,SAASkE,KAAKszE,IACxBgkL,aAAchnQ,KAAKwL,SAASyiB,SAAS02D,gBACrCsiL,cAAe,CACXC,QAASlnQ,KAAKwL,SAAS63E,IAAIkB,aAC3B4iL,eAAgBnnQ,KAAKwL,SAAS63E,IAAIwB,UAAUs7D,oBAC5CinH,cAAepnQ,KAAKwL,SAAS63E,IAAIwB,UAAUu7D,aAC3CinH,eAAgBrnQ,KAAKwL,SAAS63E,IAAIgB,sBAClCijL,WAAYtnQ,KAAKwL,SAAS63E,IAAIkB,cAElCgqC,OAAQvuH,KAAKwL,SAASsE,OAAOrL,QAC7B8iQ,MAAOvnQ,KAAKwnQ,sBAEpB,CAEQA,mBAAAA,GAEJ,IAAIC,EAAoC,CACpCC,gBAAgB,cAChBC,eAAe,EACfC,eAAc,EACdC,SAAU,GACVC,UAAW,EAEXC,kBAAmB,EACnBC,WAAY,UACZC,sBAAsB,OAG1B,GAAIjoQ,KAAKwL,SAASrN,WAAWC,UAAW,CAKpC,OAJ+B8G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACxBuiQ,GAAkB,IACrBS,sBAAsB,QAG9B,CAaI,OAXiChjQ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAC1BuiQ,GAAkB,IACrBI,SAAU,GACVC,UAAW,EACXK,sBAAuB,EACvBF,sBAAuB,OACvBG,UAAW,UACXC,2BAA4BroQ,KAAKwL,SAAStN,MAAMuN,aAAa1D,OAAOgD,qBACpEu9P,wBAAyB,EACzBC,YAAa,QAIzB,CAWAlqP,OAAAA,GAAiB,IAADmqP,EAAAC,EACK,QAAjBD,EAAAxoQ,KAAK0rB,oBAAY,IAAA88O,GAAjBA,EAAmB58O,MAEH,QAAhB68O,EAAAzoQ,KAAKwmQ,mBAAW,IAAAiC,GAAhBA,EAAkBC,WACtB,ECpFG,MAAMC,WAAuBjqL,EAAAA,EAChC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAgBZo9P,oBAAqE,KAAK,KA2B1EC,0BAAqD,KAzCzD7oQ,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAClCA,IACQA,GACG3P,KAAK4oQ,sBACL5oQ,KAAK4oQ,oBAAoBrnP,MAAKylC,IAC1BA,EAAM3oC,SAAS,IAEnBre,KAAK4oQ,oBAAsB,KAEnC,GAGZ,CAGA,UAAMl2M,GACE1yD,KAAK4oQ,sBAIT5oQ,KAAK4oQ,oBAAsB5oQ,KAAK8oQ,eAGhC9oQ,KAAK4oQ,oBAAoB9qM,OAAOpvD,IAE5B,MADA1O,KAAK4oQ,oBAAsB,KACrBl6P,CAAG,IAGjB,CAEA,kBAAco6P,SACJ9oQ,KAAK+oQ,qBACX,MAAMC,QAAsBhpQ,KAAKipQ,oBAC3Bt2C,QAAsB3yN,KAAKwL,SAASkE,KAAKk6H,mBAE/C,OAAO,IAAI28H,GAAsBvmQ,KAAKwL,SAAU,CAC5CmnN,cAAeA,EAAchpF,MAC7Bk9H,cAAemC,GAEvB,CAGQD,kBAAAA,GACJ,IAAK/oQ,KAAK6oQ,0BAA2B,CACjC,GAAG9jQ,EAAAA,MAAMiP,QAAQhU,KAAKwL,SAASye,cAAc6P,gBAAgBovO,QAAQC,YACjE,OAAOnuO,QAAQC,UAEnBj7B,KAAK6oQ,0BAA4B7oQ,KAAKwL,SAAS82I,aAAanB,WAAW,CACnElnF,IAAKj6D,KAAKwL,SAASye,cAAc6P,gBAAgBovO,QAAQC,YAEjE,CAEA,OAAOnpQ,KAAK6oQ,yBAChB,CAEA,uBAAcI,GACV,MAAMD,EAAgBhpQ,KAAKwL,SAAS63E,IAAIwmD,mBACxC,OAAIm/H,EACOhuO,QAAQC,QAAQ+tO,GAGpB,IAAIhuO,SAAgB,CAACC,EAASimK,KACjC,MAAMj9K,EAAUkmB,YAAW,KACvBze,EAAaE,MACbs1K,EAAO,gCAAgC,GACxC,KAEGx1K,EAAe1rB,KAAKwL,SAAS63E,IAAIoxC,OAAO2hB,uBAAsBz3I,IAAc,IAAb,MAACgrI,GAAMhrI,EACxE+sB,EAAaE,MACbqe,aAAahmB,GACbgX,EAAQ0uG,EAAM,GAChB,GAEV,E,OCnFG,MAAMy/H,GAAuB3rQ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wRASjCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAGvCkE,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,UAAY,QAAUF,EAAMC,WAAWutC,SAAS,ICApF,MAAM29N,WAA4B7pQ,GAAAA,EAA0CuT,WAAAA,GAAA,SAAA9S,WAAA,KAEvEqpQ,qBAAuB,KAC3BtpQ,KAAKlC,MAAMyrQ,gBACXvpQ,KAAK2pN,iBAAiB,EACxB,KAEM6/C,uBAAyB,KAC7BxpQ,KAAKlC,MAAM2rQ,wBACXzpQ,KAAK2pN,iBAAiB,EACxB,KAEMA,gBAAkB,KACtB3pN,KAAKlC,MAAMk6B,eAAiBh4B,KAAKlC,MAAMk6B,cAAcC,OAAO,EAC9D,KAEMyxO,cAAgB,IACb1pQ,KAAKwL,SAASye,cAAcC,KAAKy/O,WAAWzlL,WAAa,EACnE,CAEDzkF,MAAAA,GAEI,OACI+I,EAAAA,GAAAA,MAAC4gQ,GAAoB,CAAArpQ,SAAA,EACjBL,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,qBAAsB,CAAC+zP,UAAW5pQ,KAAK0pQ,qBAC3FhqQ,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CAACC,cAAe,CACxCt2B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,uBAC1CxO,QAASrH,KAAKspQ,qBACd3pQ,WAAWG,EAAAA,GAAAA,IAAQ,mCACpBolD,WAAY,CACX79C,QAASrH,KAAKwpQ,uBACd1nQ,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,2BAA4B,CAAC+zP,UAAW5pQ,KAAK0pQ,uBAIvG,E,OC/CG,MAAMG,GAA4BpsQ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8FACxCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOkB,MAAM,I,OCDpC,MAAM6gQ,GAA6BrsQ,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0JCc7C,MAAMmsQ,WAAwC53O,GAAAA,EAEjDpf,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAcAksQ,eAAiB,iBAAiB,KAE3CV,qBAAuB,KACvBtpQ,KAAK0mB,MAAMujP,iBAAmBjqQ,KAAKgqQ,gBAOvChqQ,KAAKlC,MAAMyrQ,cAAcvpQ,KAAK0mB,MAAMujP,gBACpCjqQ,KAAK2pN,mBAPD3pN,KAAKuyB,SAAS,CACX23O,iBAAiB,GAMF,EACxB,KAEMV,uBAAyB,KAC7BxpQ,KAAKlC,MAAM2rQ,uBAAuB,EACpC,KAEM9/C,gBAAkB,KACtB3pN,KAAKlC,MAAMk6B,eAAiBh4B,KAAKlC,MAAMk6B,cAAcC,OAAO,EAC9D,KAEMmxL,iBAAoBG,GACjBvpN,KAAKuyB,SAAS,CACjB03O,eAAgB1gD,EAChB2gD,gBAAiB3gD,IAAcvpN,KAAKgqQ,iBAE1C,KAiBMG,eAAiB,IAWd,EAVezqQ,EAAAA,GAAAA,KAAA,UAAkCoK,MAAO9J,KAAKgqQ,eAAgBI,QAAQ,EAAKrqQ,SAC5FC,KAAKwL,SAASoK,YAAYC,UAAU,+BADN7V,KAAKgqQ,mBAInBhqQ,KAAKwL,SAASuiN,2BAA2BjtE,qBAAqBvwI,KAAI85P,IACnF3qQ,EAAAA,GAAAA,KAAA,UAAoBoK,MAAOugQ,EAAGtR,GAAGh5P,SAC5BsqQ,EAAG9zP,MADK8zP,EAAGtR,OAMvB,KAEO54N,oBAAsB,IACrBngC,KAAK0mB,MAAMwjP,iBAITxqQ,EAAAA,GAAAA,KAACmqQ,GAAyB,CAAA9pQ,SAC5BC,KAAKwL,SAASoK,YAAYC,UAAU,mCAJ9B,KAzEX7V,KAAK0mB,MAAQ,CACTujP,eAAgBjqQ,KAAKgqQ,eACrBE,iBAAiB,EAEzB,CAEAnuP,iBAAAA,GACI3D,MAAM2D,oBACN/b,KAAKuyB,SAAS,CACV03O,eAAgBjqQ,KAAKwL,SAASuiN,2BAA2Bu8C,wBAA0BtqQ,KAAKgqQ,gBAEhG,CA+BQO,oBAAAA,GACJ,OAAKvqQ,KAAKwL,SAASuiN,2BAA2By8C,oBAK1C9qQ,EAAAA,GAAAA,KAACyL,GAAAA,EAAM,CAACnB,SAAUxF,GAAKxE,KAAKopN,iBAAiB5kN,EAAE0F,OAAOJ,OAC3CA,MAAO9J,KAAK0mB,MAAMujP,eACrBvoQ,MAAM,OACN/B,UAAW,2BAA2BI,SACzCC,KAAKmqQ,mBARH,IAWf,CA0BA1qQ,MAAAA,GAEI,OACI+I,EAAAA,GAAAA,MAAC4gQ,GAAoB,CAAArpQ,SAAA,EACjBL,EAAAA,GAAAA,KAACqlD,GAAAA,GAAa,CAAAhlD,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,2BACpDrN,EAAAA,GAAAA,MAACshQ,GAA0B,CAAA/pQ,SAAA,CACtBC,KAAKuqQ,uBACLvqQ,KAAKmgC,0BAEVzgC,EAAAA,GAAAA,KAACy4B,GAAAA,EAA2B,CAACC,cAAe,CACxCt2B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,uBAC1CxO,QAASrH,KAAKspQ,qBACd3pQ,WAAWG,EAAAA,GAAAA,IAAQ,mCACpBolD,WAAY,CACX79C,QAASrH,KAAKwpQ,uBACd1nQ,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,2BAC1ClW,WAAWG,EAAAA,GAAAA,IAAQ,qCAInC,EC3GG,MAAM2qQ,GAGT13P,WAAAA,CAAoBvH,GAAoC,KAApCA,SAAAA,EAAiC,KAF7Ck/P,+BCfqC,iBDkB7C,CAEAC,iBAAAA,GACI3qQ,KAAKwL,SAASqd,UAAUkd,uBAAuB,iBAAkB,yBAA0B,wBAC3F/lC,KAAKwL,SAASorB,SAASjc,KAAK3a,KAAKwL,SAAS63E,IAAI09D,gCAClD,CAEA6pH,mBAAAA,CAAoB5mL,GAChBhkF,KAAKwL,SAASqd,UAAUkd,uBAAuB,iBAAkB,yBAA0B,WAC3F/lC,KAAKwL,SAASoyC,aAAa+pF,QAAQ3nI,KAAK0qQ,gCAAgC,EAC5E,CAEAG,uBAAAA,CAAwBC,GACrB,OAAOA,GAAgB3gQ,SAASnK,KAAKwL,SAASoyC,aAAaC,QAAQ79C,KAAK0qQ,gCAC3E,CAEAK,YAAAA,GACI,OAAO1B,EACX,CAEA2B,aAAAA,GACI,OAAOhrQ,KAAKwL,SAASoK,YAAYC,UAAU,oBAC/C,EAGG,MAAMo1P,GACTl4P,WAAAA,CAAoBvH,EAA2C0/P,GAAgD,KAA3F1/P,SAAAA,EAAiC,KAAU0/P,sCAAAA,CAC/D,CAEAP,iBAAAA,GACI3qQ,KAAKwL,SAASqd,UAAUkd,uBAAuB,iBAAkB,yBAA0B,qBAC3F/lC,KAAKwL,SAASorB,SAASiuF,SAAS7kH,KAAKwL,SAAS63E,IAAI09D,gCACtD,CAEA6pH,mBAAAA,CAAoB5mL,GAEhBhkF,KAAKwL,SAASqd,UAAUkd,uBAAuB,iBAAkB,yBAA0B,WACvFi+C,IACAhkF,KAAKwL,SAASuiN,2BAA2Bo9C,kBAAkBnnL,GAC3DhkF,KAAKwL,SAASu3O,eAAep7G,QAAQ3nI,KAAKkrQ,uCAAuC,GACjFlrQ,KAAKwL,SAASsE,OAAOiuC,SAE7B,CAEA8sN,uBAAAA,CAAwBC,GACpB,OAAOA,IAAiB3gQ,QAAQnK,KAAKwL,SAASuiN,2BAA2Bq9C,qBAC7E,CAEAL,YAAAA,GACI,OAAOhB,EACX,CAEAiB,aAAAA,GAEG,OAAOhrQ,KAAKwL,SAASoK,YAAYC,UAAU,oBAC9C,E,gBE7DG,MAAMw1P,WAA0C3sL,EAAAA,EAKnD3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAJZ8/P,oBAA0C,KAAK,KAC/CJ,sCAAgD,4BAA4B,KAgB5EK,+BAAkCjpJ,IACtCtiH,KAAKmrQ,kBAAkB7oJ,GACvB,MAAMkpJ,EAAsBxrQ,KAAKwL,SAASorB,SAASE,WAAWo0G,kBAAkBlrI,KAAKyrQ,YAAYtsQ,WACjGa,KAAKwL,SAASorB,SAASoiD,QAAQwyL,GAAqB1tM,OAAOpvD,IACvD1O,KAAKwL,SAAS2L,OAAOxI,MAAM,wDAAyDD,EAAI,GAC1F,EACL,KAEOg9P,kBAAoBhsP,UACpB1f,KAAKwL,SAASu3O,eAAellM,QAAQ79C,KAAKkrQ,yCAC1ClrQ,KAAKwL,SAASu3O,eAAejlM,WAAW99C,KAAKkrQ,6CACvClrQ,KAAKwL,SAASkE,KAAK86H,mBACpBxqI,KAAKwL,SAASkE,KAAKC,oBACf3P,KAAKwL,SAASkE,KAAKo6H,YAEhC,EACH,KAuDO2hI,WAAa/tJ,GAAAA,EAlFb19G,KAAKwL,SAASorB,SAASE,WAAW+xG,YAAYkC,SAAS/qI,KAAKyrQ,aAC5DzrQ,KAAKurQ,+BAA+BvrQ,KAAKwL,SAASorB,SAASE,WAAW+xG,YAAYC,cAAc9oI,KAAKyrQ,aAOzGthO,WAAWnqC,KAAK0rQ,kBAAmB,EACvC,CAoBA,sBAAIC,GACA,OAAK5mQ,EAAAA,MAAMkP,kBAAkBjU,KAAKsrQ,sBAI9BtrQ,KAAKwqQ,mBACLxqQ,KAAKsrQ,oBAAsB,IAAIL,GAA0BjrQ,KAAKwL,SAAUxL,KAAKkrQ,uCAE7ElrQ,KAAKsrQ,oBAAsB,IAAIb,GAA0BzqQ,KAAKwL,UAG3DxL,KAAKsrQ,qBATDtrQ,KAAKsrQ,mBAUpB,CAEA,+BAAMt9C,GAAgF,IAAtDlwN,EAA+BmC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAI/D,aAFOD,KAAKwL,SAASy4B,UAAUC,kBAExB,IAAIlJ,SAAQ,CAACC,EAASimK,KACzB,IAAKlhM,KAAK2rQ,mBAAmBd,wBAAwB/sQ,EAAMgtQ,cACvD,OAAO7vO,IAGX,MAAM2wO,EAAa5rQ,KAAK2rQ,mBAAmBZ,eAE3C/qQ,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAC3Bt4B,EAAAA,GAAAA,KAACksQ,EAAU,CACP5zO,cAAeA,EACfuxO,cAAgBvlL,IACZhkF,KAAK2rQ,mBAAmBf,oBAAoB5mL,GACrC/oD,KAEXwuO,sBAAuBA,KACnBzpQ,KAAK2rQ,mBAAmBhB,oBACxBzpE,GAAQ,KAEZ,CACJz4L,MAAOzI,KAAK2rQ,mBAAmBX,gBAC/B/jQ,KAAMjH,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM0nG,aAC7C2wF,4BAA4B,EAC5Bn7I,yBAAyB,EACzBQ,qBAAqB,EACrB9L,oBAAoB,EACpBD,gBAAiB,EACjB+H,SAAUA,KACNplD,KAAKwL,SAAS63E,IAAIqP,cAAc+mD,sBACzBynD,KAEXrjI,0BAA0B,GAC5B,GAEV,CAIAstM,iBAAAA,CAAkBnnL,GACdhkF,KAAK6rQ,oBACL7rQ,KAAKwL,SAASmoH,QAAQC,aAAa5zH,KAAKyrQ,WAAYznL,EACxD,CAEA6nL,iBAAAA,GACQ7rQ,KAAKwL,SAASmoH,QAAQqrB,UAAUh/I,KAAKyrQ,aACrCzrQ,KAAKwL,SAASmoH,QAAQC,aAAa5zH,KAAKyrQ,WAAY,GAE5D,CAIAnB,oBAAAA,GACI,OAAOtqQ,KAAKorQ,sBAAwBprQ,KAAKwL,SAASye,cAAcq4F,mBAAqB,EACzF,CAEA8oJ,kBAAAA,GACI,OAAOprQ,KAAKwL,SAASmoH,QAAQqrB,UAAUh/I,KAAKyrQ,aAAe,EAC/D,CAEA3qH,kBAAAA,GACI,OAAO9gJ,KAAKwL,SAAS63E,IAAIy9D,oBAC7B,CAEA0pH,gBAAAA,GAA6B,IAAD3xM,EAAAC,EACxB,OAAuC,QAAhCD,EAAA74D,KAAKwL,SAASye,cAAcC,YAAI,IAAA2uC,GAAS,QAATC,EAAhCD,EAAkCizM,eAAO,IAAAhzM,OAAT,EAAhCA,EAA2C79C,YAAajb,KAAK8gJ,qBAAqB5gJ,OAAS,CACtG,CAEA6rQ,gCAAAA,GACI,OAAO/rQ,KAAKwqQ,qBAAuBxqQ,KAAKwL,SAASkE,KAAKC,YAC1D,CAEAq8P,6BAAAA,CAA8BC,GAC1B,MAAM3pJ,EAAoBtiH,KAAKorQ,qBAC/B,GAAIprQ,KAAKwqQ,qBAAuBzlQ,EAAAA,MAAMiP,QAAQsuG,GAAmB,CAC7D,MAAMroD,EAAM,IAAIsrD,IAAI0mJ,GAEpB,OADAhyM,EAAIiyM,aAAax8L,OAAOguC,GAAAA,EAA+B4E,GAChDroD,EAAI1tB,IACf,CACA,OAAO0/N,CACX,EC/IG,MAAME,GAAiDp5P,WAAAA,GAAA,KAC1Dq5P,SAAW,oCAAoC,KAC/CC,cAAgB,wCAAyC,CACzD,WAAIC,GACA,MAAO,EACX,ECGG,MAAMpgJ,GACTn5G,WAAAA,CAA4Bw5P,EAAoCC,GAAqB,KAAzDD,EAAAA,EAAkB,KAAkBC,EAAAA,EAAkB,KAE1EC,iBAAW,OAQXC,aAAO,OAQPC,YAAM,OAQNC,yBAAmB,OAQnBC,kBAAY,CAlCiE,CAGrF,cAAIC,GAIA,OAHK9sQ,KAAKysQ,cACNzsQ,KAAKysQ,YAAcM,GAAeC,+BAA+BhtQ,KAAKusQ,EAAGvsQ,KAAKwsQ,IAE3ExsQ,KAAKysQ,WAChB,CAGA,UAAIvsQ,GAIA,OAHKF,KAAK0sQ,UACN1sQ,KAAK0sQ,QAAUr2P,KAAKmpG,KAAKx/G,KAAKysQ,cAE3BzsQ,KAAK0sQ,OAChB,CAGA,SAAIO,GAIA,OAHKjtQ,KAAK2sQ,SACN3sQ,KAAK2sQ,OAASI,GAAeE,MAAMjtQ,KAAKusQ,EAAGvsQ,KAAKwsQ,IAE7CxsQ,KAAK2sQ,MAChB,CAGA,sBAAIO,GAIA,OAHKltQ,KAAK4sQ,sBACN5sQ,KAAK4sQ,oBAAsBG,GAAeG,mBAAmBltQ,KAAKusQ,EAAGvsQ,KAAKwsQ,IAEvExsQ,KAAK4sQ,mBAChB,CAGA,eAAIO,GAQA,OAPKntQ,KAAK6sQ,eACN7sQ,KAAK6sQ,aAAeE,GAAeK,kBAAkBptQ,KAAKusQ,EAAGvsQ,KAAKwsQ,EAAG,KAMlExsQ,KAAK6sQ,YAChB,EAOG,MAAMQ,GACTt6P,WAAAA,CAA4Bu6P,EAAyC3sQ,GAAiB,KAA1D2sQ,OAAAA,EAAuB,KAAkB3sQ,OAAAA,CAAiB,CACtFkV,SAAAA,CAAUohJ,EAAYC,GAClB,IAAIi2G,EAAc,CACd78P,EAAGtQ,KAAKstQ,OAAOh9P,EAAI2mJ,EACnBx7E,EAAGz7E,KAAKstQ,OAAO7xL,EAAIy7E,GAEvB,OAAO,IAAIm2G,GAAOF,EAAantQ,KAAKW,OACxC,CACAw6E,KAAAA,CAAM7uE,GAAsC,IAAvBihQ,EAAgBttQ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAChCutQ,EAAoBxtQ,KAAKW,OAAS2L,EAAQihQ,EAC9C,OAAO,IAAIF,GAAOrtQ,KAAKstQ,OAAQj3P,KAAK09B,IAAI,EAAGy5N,GAC/C,CACAC,SAAAA,CAAU9tJ,GACN,OAAO3/G,KAAKm7E,MAAM,EAAGwkC,EACzB,CACA+tJ,OAAAA,CAAQ/tJ,GACJ,OAAO3/G,KAAKm7E,MAAMwkC,EACtB,EAGG,MAAMotJ,GACT,YAAOE,CAAMV,EAAoBC,GAC7B,OAAID,EAAEj8P,IAAMk8P,EAAEl8P,EAEHg5H,IAEPijI,EAAE9wL,IAAM+wL,EAAE/wL,EAGH,GAEH+wL,EAAE/wL,EAAI8wL,EAAE9wL,IAAI+wL,EAAEl8P,EAAIi8P,EAAEj8P,EAChC,CACA,yBAAO48P,CAAmBX,EAAoBC,GAC1C,OAAID,EAAE9wL,IAAM+wL,EAAE/wL,EAEH6tD,IAEPijI,EAAEj8P,IAAMk8P,EAAEl8P,EAGH,GAEHi8P,EAAEj8P,EAAIk8P,EAAEl8P,IAAIk8P,EAAE/wL,EAAI8wL,EAAE9wL,EAChC,CAUA,uBAAOkyL,CAAiBC,GACpB,KADuD3tQ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACxC,CAEX2tQ,GAA6B,IADhBv3P,KAAK8jB,MAAMyzO,EAAU,IAEtC,CACA,OAAOA,GAAWv3P,KAAKw3P,GAAK,IAChC,CAUA,uBAAOC,CAAiBC,GAA6C,IAA5BC,IAAkB/tQ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACnD2tQ,EAAUG,GAAW,IAAM13P,KAAKw3P,IACpC,OAAKG,EAIEJ,EAAmB,IADbv3P,KAAK8jB,MAAMyzO,EAAU,KAFvBA,CAIf,CAKA,mBAAOK,CAAahB,GAAiD,IAAlCiB,IAAwBjuQ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACnD8tQ,EAAU13P,KAAK83P,KAAKlB,GACxB,OAAOiB,EAAkBnB,GAAee,iBAAiBC,GAAWA,CACxE,CAEA,qCAAOf,CAA+BT,EAAoBC,GACtD,OAAOn2P,KAAKopG,IAAI8sJ,EAAEj8P,EAAIk8P,EAAEl8P,EAAG,GAAK+F,KAAKopG,IAAI8sJ,EAAE9wL,EAAI+wL,EAAE/wL,EAAG,EACxD,CAEA,4BAAO2yL,CAAsB7B,EAAoBC,GAC7C,OAAOn2P,KAAKmpG,KAAKutJ,GAAeC,+BAA+BT,EAAGC,GACtE,CAKA,gCAAO6B,CAA0B1jK,EAAYF,EAAYn+F,GACrD,OAAOq+F,GAAOF,EAAKE,GAAIr+F,CAC3B,CAIA,wBAAO8gQ,CAAkBkB,EAAoB/B,EAAoBjgQ,GAG7D,MAAO,CAACgE,EAFAy8P,GAAesB,0BAA0BC,EAAEh+P,EAAGi8P,EAAEj8P,EAAGhE,GAEhDmvE,EADHsxL,GAAesB,0BAA0BC,EAAE7yL,EAAG8wL,EAAE9wL,EAAGnvE,GAE/D,CAEA,yBAAOiiQ,CAAmB3lO,GAItB,MAAO,CACHt4B,EAAGs4B,EAAE6gC,KAAO7gC,EAAElnC,MAAM,EACpB+5E,EAAG7yC,EAAE/4B,IAAM+4B,EAAEvnC,OAAO,EAE5B,CAKA,2CAAOmtQ,CAAqC5lO,GACxC,IAAI0kO,EAASP,GAAewB,mBAAmB3lO,GAC/C,OAAO,IAAIykO,GAAOC,EAAQP,GAAeqB,sBAAsBd,EAAQ,CAACh9P,EAAGs4B,EAAE6gC,KAAMgS,EAAG7yC,EAAE/4B,MAC5F,EAGCC,OAAuB,iBACxBA,OAAuB,eAAIi9P,IC5LxB,MAAM0B,GACT17P,WAAAA,CAAoB2jH,GAAqC,KAArCA,UAAAA,EAAkC,KACtD01I,SAAW,iCAAiC,KAC5CC,cAAgB,qCAFyC,CAGzD,WAAIC,GACA,GAAItsQ,KAAK02H,UAAUv4H,WAAWC,UAAW,CACrC,IAAIswQ,EAAgB1gQ,SAAS4wB,eAAcm/E,EAAAA,GAAAA,IAAW,qBACtD,IAAK2wJ,EACD,MAAO,GAEX,IAAIC,EAAYD,EAAc9+P,wBAC1Bg/P,EAAU7B,GAAeyB,qCAAqCG,GAElE,OADAC,EAAUA,EAAQnB,UAAU,IACrB,CAACmB,EACZ,CAAO,CACH,IAAIC,EAAe7gQ,SAAS8gQ,kBAAiB/wJ,EAAAA,GAAAA,IAAW,iBACxD,GAA4B,IAAxB8wJ,EAAa3uQ,OACb,MAAO,GAEX,GAAI2uQ,EAAa3uQ,QAAU,EACvB,MAAO,CAAC6sQ,GAAeyB,qCAAqCK,EAAaA,EAAa3uQ,OAAS,GAAG0P,0BAEtG,IAAIm/P,EAAiBF,EAAa,GAC9BG,EAAeH,EAAaA,EAAa3uQ,OAAS,GAMtD,OALIF,KAAK02H,UAAUv4H,WAAW4tC,YAAc/rC,KAAK02H,UAAUv4H,WAAW2yB,YAC9D+9O,EAAa,KACbE,EAAiBF,EAAa,IAG/B,CACH9B,GAAeyB,qCAAqCQ,EAAap/P,yBACjEm9P,GAAeyB,qCAAqCO,EAAen/P,yBAE3E,CACJ,ECjCG,MAAMq/P,GACTl8P,WAAAA,CAAoB2jH,GAAqC,KAArCA,UAAAA,EAAkC,KACtD01I,SAAW,iCAAiC,KAC5CC,cAAgB,qCAFyC,CAGzD,WAAIC,GACA,IAAKtsQ,KAAK02H,UAAUhnH,KAAKC,aACrB,MAAO,GAEX,IAAIu/P,EAAiBlvQ,KAAK02H,UAAUv4H,WAAWC,WAAY2/G,EAAAA,GAAAA,IAAW,yBAA0BA,EAAAA,GAAAA,IAAW,sBACvG2wJ,EAAgB1gQ,SAAS4wB,cAAcswO,GAC3C,IAAKR,EACD,MAAO,GAEX,IAAIC,EAAYD,EAAc9+P,wBAC1Bg/P,EAAW7B,GAAeyB,qCAAqCG,GACnE,GAAI3uQ,KAAK02H,UAAUv4H,WAAWyS,YAAc5Q,KAAK02H,UAAUhnH,KAAKC,aAAc,CAC1E,IAAIw/P,ECtBT,WACH,OAD+BlvQ,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GACrByjD,WAAWiqB,iBAAiB3/D,SAASg9O,iBAAiB1iP,SACvE,CDoBmC8mQ,CAAQ,GAC/BR,EAAUA,EAAQzzL,MAAM,KAAKtlE,UAAU,EAAGs5P,EAC9C,CACA,MAAO,CAACP,EACZ,EE1BG,IAAKS,G,0BAEX,SAFWA,GAAAA,EAAAA,EAAS,mCAEpB,CAFWA,KAAAA,GAAS,KCUd,IAAMC,IAAqBz3P,GAI7BC,EAAAA,GAAWxK,IAAGyK,GAEdD,EAAAA,GAAWxK,IAAG0K,GAEdF,EAAAA,GAAWxK,IAAGwF,GARZ,cAAoC4rE,EAAAA,EAWvC,wCAAY6wL,GAAwC,IAAD12M,EAC/C,OAAkD,QAAlDA,EAAG74D,KAAKwL,SAASye,cAAcC,KAAKyzB,sBAAc,IAAAkb,IAA/CA,EAAiD22M,oCACzCxvQ,KAAKwL,SAASkE,KAAK04H,sBAAwB,EAG1D,CAGA,WAAYlyE,GACR,OAAOl2D,KAAKwL,SAASuP,6BAA6B4iC,eAAe1iC,WACtDjb,KAAKuvQ,sCACLvvQ,KAAKyvQ,MAAMvvQ,OAAS,CACnC,CAKA6S,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KA5BZ+oL,sBAAqD,KAAK,KAEzDk7E,MAA2B,IAAEl3P,EAAAA,EAAAA,GAAA,gBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,iBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,0BAAAmM,GAAA,WAwD9ByqH,eAAiBzvH,UAGrB,GAFA1f,KAAK0vQ,6BAEDC,IAAe3vQ,KAAKk2D,QACpB,aAG4Bl2D,KAAKwL,SAASokQ,yBAAyBC,kBAAkBR,GAAUS,kBAG/F9vQ,KAAKu0L,sBAAwBv0L,KAAKwL,SAASsE,OAAOu+H,YAAY0mD,OAAO/0L,KAAK+vQ,iBAC9E,EACF,KAEML,0BAA4B,KAE5B1vQ,KAAKu0L,wBACLv0L,KAAKu0L,sBAAsBl2K,UAC3Bre,KAAKu0L,sBAAwB,KACjC,EACF,KACMw7E,gBAAkB,KAAO,IAADj6N,EAAAC,EAEU,QAAlCD,EAAA91C,KAAKwL,SAASyqC,QAAQC,oBAAY,IAAAJ,GAAM,QAANC,EAAlCD,EAAoC5rB,YAAI,IAAA6rB,GAAxCA,EAA0CI,WAAan2C,KAAKwL,SAASsE,OAAOglL,QAAU,KACtF90L,KAAKwT,MACT,GArDAwF,EAAAA,EAAAA,IAAehZ,MAEf,IAAK,IAAD84D,EACA,IAAIk3M,GAA6D,QAA/Cl3M,EAAA94D,KAAKwL,SAASye,cAAcC,KAAKyzB,sBAAc,IAAAmb,OAAA,EAA/CA,EAAiDm3M,UAAW,GAC9EjwQ,KAAKyvQ,MAAQO,EAAYz/P,KAAK2/P,GAAkBlwQ,KAAKmwQ,gBAAgBD,IACzE,CAAE,MAAO1rQ,GACLxE,KAAKwL,SAAS2L,OAAOxI,MAAM,4CAA6CnK,EAC5E,CAEAxE,KAAKwL,SAASouF,YAAYr4E,MAAKq4E,IAC3B55F,KAAKyP,UAAS,IAAMmqF,EAAYqyG,qBAAqBA,IACjDjsM,KAAKisM,mBAAqBA,CAAkB,GAC7C,CACC/vL,iBAAiB,GACnB,IAKNlc,KAAKyP,UACD,IAAMzP,KAAKwL,SAASkE,KAAKC,eACxBggQ,GAAe3vQ,KAAKmvI,eAAewgI,IACpC,CACIzzP,iBAAiB,GAI7B,CA8BA1I,IAAAA,GACSxT,KAAKk2D,UAIVl2D,KAAKwL,SAASokQ,yBAAyBQ,qBAAqBf,GAAUS,gBAGtE9vQ,KAAK0vQ,4BAEL1vQ,KAAKqwQ,UAAY,EACjBrwQ,KAAKogQ,UAAW,EACpB,CAEAnoO,KAAAA,GACIj4B,KAAKogQ,UAAW,CACpB,CAGAkQ,QAAAA,GAEI,OADAtwQ,KAAKqwQ,UAAYh6P,KAAKuK,IAAI5gB,KAAKqwQ,UAAY,EAAGrwQ,KAAKyvQ,MAAMvvQ,OAAS,GAC3DF,KAAKqwQ,SAChB,CAEQF,eAAAA,CAAgBD,GACpB,OAAQA,GACJ,IAAK,cACD,OAAO,IAAI/D,GACf,IAAK,eACD,OAAO,IAAIsC,GAAuBzuQ,KAAKwL,UAC3C,IAAK,eACD,OAAO,IAAIyjQ,GAAuBjvQ,KAAKwL,UAC3C,QACI,MAAM,IAAIykE,MAAM,wBAADrwE,OAAyBswQ,IAEpD,CAKA,+BAAIK,GACA,MAAMC,EAA6BxwQ,KAAKwL,SAASs+O,QAAQtrD,uBAAsBL,GACpEA,EAASI,eAEdkyE,EAAiBzwQ,KAAKisM,mBACtBykE,EAAa1wQ,KAAKwL,SAAS4vB,OAAO2rK,aAAa,CAACC,eAAe,IAAS,EAG9E,QAASypE,GACFC,GACAF,EAA6B,EACxC,GACHh4P,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAvIc,CAAM,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEJ,CAAE,IAADkI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEQ,CAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,QA8ExBnE,EAAAA,IAAMwE,OAAAC,yBAAA5J,GAAAsJ,UAAA,QAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,SAcNnE,EAAAA,IAAMwE,OAAAC,yBAAA5J,GAAAsJ,UAAA,SAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAKNnE,EAAAA,IAAMwE,OAAAC,yBAAA5J,GAAAsJ,UAAA,YAAAtJ,GAAAsJ,WAAAtJ,ICjHJ,MAAM69P,WAAmBjyL,EAAAA,EAC5B,qBAAIkyL,GACA,OAAG5wQ,KAAKwL,SAASqI,OAAOkZ,OAAOC,WACpBhtB,KAAKwL,SAASuhB,OAAO2pO,wBAA0B12P,KAAKwL,SAASye,cAAc6P,gBAAgB+2O,IAAID,kBAE/F5wQ,KAAKwL,SAASye,cAAc6P,gBAAgB+2O,IAAID,iBAE/D,E,+BCFG,IAAeE,IAAsBj5P,GAiCvCC,EAAAA,GAAWxK,IAAGyK,GAGdD,EAAAA,GAAWxK,IAAG0K,GAwEdF,EAAAA,GAAWxK,IAAG8W,GAiBdtM,EAAAA,GAAWxK,IAAGwF,GA7HZ,cAA8Cw4O,GACjDv4O,WAAAA,CAA+Bg+P,EACnBvlQ,EACAnF,GACR+R,MAAM5M,EAAUnF,GAAS,KAHE0qQ,4BAAAA,GAAyDx4P,EAAAA,EAAAA,GAAA,2BAAAC,GAAC,OAADD,EAAAA,EAAAA,GAAA,sBAAAE,GAAC,OAADF,EAAAA,EAAAA,GAAA,0BAAAmM,GAAC,OAADnM,EAAAA,EAAAA,GAAA,4BAAAkQ,GAAC,OAIrFzP,EAAAA,EAAAA,IAAehZ,MACfA,KAAKgxQ,wCAELvhQ,EAAAA,EAAAA,KAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAAeA,IACzCA,IACA3P,KAAKixQ,oBAAsB,EAC/B,GACD,CACC/0P,iBAAiB,IAGrBlc,KAAKwL,SAASouF,YAAYr4E,MAAKq4E,KAC3BnqF,EAAAA,EAAAA,KAAS,IAAMmqF,EAAYqyG,qBAAqBA,IAC5CjsM,KAAKkxQ,oBAAsBjlE,CAAkB,GAC9C,CACC/vL,iBAAiB,GACnB,IAGNlc,KAAKwL,SAAS2iC,WAAW5sB,MAAK4sB,KAC1B1+B,EAAAA,EAAAA,KAAS,IAAM0+B,EAAWC,qBAAqBA,IAC3CpuC,KAAKmxQ,eAAiBhnQ,QAAQikC,EAAmB,GAClD,CACClyB,iBAAiB,GACnB,GAEV,CAUAyoB,aAAAA,GAA0B,IAADmR,EACrB,MAAM06N,EAA6BxwQ,KAAKwL,SAASs+O,QAAQtrD,uBAAsBL,GACxEA,IAAan+L,KAAK+wQ,6BAId5yE,EAASI,eAGd6yE,EAA8BpxQ,KAAK+wQ,4BAA4BM,oBAC/D1hQ,EAAe3P,KAAKwL,SAASkE,KAAKC,aAClC8gQ,EAAiBzwQ,KAAKkxQ,oBACtBI,EAAiBtxQ,KAAKwL,SAAS4vB,OAAOkrK,eACtC5I,EAAe19L,KAAKwL,SAASyqC,QAAQynJ,aAAa19L,KAAKwL,SAASorB,SAASE,WAAWC,UACpFw6O,EAAoCpnQ,QAA+C,QAAxC2rC,EAAC91C,KAAKwL,SAASyqC,QAAQC,aAAahsB,YAAI,IAAA4rB,OAAA,EAAvCA,EAAyC0lJ,sBACrF+6C,EAAgBv2O,KAAKmxQ,eACrBK,EAAkBxxQ,KAAKwL,SAAS6wC,QAAQm1N,gBACxCC,EAAuBzxQ,KAAKwL,SAASmyC,eAAeyiN,SAI1D,OAAOgR,GACIzhQ,GACA+tL,GAC+B,IAA/B8yE,IACCC,IACAa,IACAC,IACAvxQ,KAAK0xQ,iCACL1xQ,KAAK2xQ,gCACLp7B,IACAi7B,IACAC,CAChB,CAGA/lB,YAAAA,GACItzO,MAAMszO,eACN1rP,KAAK4xQ,oBACL5xQ,KAAKixQ,qBACT,CAEAnlB,iBAAAA,CAAkBL,GACdrzO,MAAM0zO,kBAAkBL,EAC5B,CAGQulB,oCAAAA,GACJ,IAAIa,EAAe7xQ,KAAKwL,SAASoyC,aAAaC,QAAQ79C,KAAK8xQ,mCACxDD,IACC7xQ,KAAK+xQ,mBAAqBhyO,SAAS8xO,IAGvCA,EAAe7xQ,KAAKwL,SAASoyC,aAAaC,QAAQ79C,KAAKgyQ,qCACpDH,IACC7xQ,KAAKiyQ,qBAAuBlyO,SAAS8xO,GAE7C,CAEA,qCAAYC,GACR,MAAM,GAANlyQ,OAAUI,KAAKqG,QAAQ6rQ,gBAAe,qBAC1C,CAEA,uCAAYF,GACR,MAAM,GAANpyQ,OAAUI,KAAKqG,QAAQ6rQ,gBAAe,uBAC1C,CAIA,qBAAIN,GACA,OAAG7sQ,EAAAA,MAAMkP,kBAAkBjU,KAAKqG,QAAQ8rQ,qBAC7B,EAGJnyQ,KAAK+xQ,kBAEhB,CACA,qBAAIH,CAAkB9nQ,GACd/E,EAAAA,MAAMkP,kBAAkBjU,KAAKqG,QAAQ8rQ,wBACrCvoP,EAAAA,EAAAA,KAAY,IAAM5pB,KAAK+xQ,mBAAqBjoQ,IAC5C9J,KAAKwL,SAASoyC,aAAa+pF,QAAQ3nI,KAAK8xQ,kCAAmChoQ,GAEnF,CAKA,uBAAImnQ,GACA,OAAOjxQ,KAAKiyQ,oBAChB,CAEA,uBAAIhB,CAAoBnnQ,IACpB8f,EAAAA,EAAAA,KAAY,IAAM5pB,KAAKiyQ,qBAAuBnoQ,IAC9C9J,KAAKwL,SAASoyC,aAAa+pF,QAAQ3nI,KAAKgyQ,oCAAqCloQ,EACjF,CAGA,kCAAc4nQ,GACV,OAAG3sQ,EAAAA,MAAMkP,kBAAkBjU,KAAKqG,QAAQ8rQ,sBAGjCnyQ,KAAK4xQ,mBAAqB5xQ,KAAKqG,QAAQ8rQ,mBAClD,CAEA,iCAAcR,GACV,OAAO3xQ,KAAKixQ,qBAAuB,CACvC,GAGHz4P,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBApHiC,CAAK,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGT,CAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,wCAkD5BnE,EAAAA,IAAMwE,OAAAC,yBAAA5J,GAAAsJ,UAAA,wCAAAtJ,GAAAsJ,WAAAsI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAsB8B,CAAE,IAADiM,IAAAtM,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,wBAAAgI,IAAA,CAAA/H,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAiBC,CAAE,IAAD1J,I,UCpIrC,MAAMs/P,GAAmC30Q,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8FAIpDE,GAASA,EAAM6yB,YAAa9vB,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,uBAAoB,K,UCHzD,MAAMy0Q,GAA8C50Q,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8FAIxDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,IAIpC6gP,IAA8C70Q,EAAAA,GAAAA,IAAO40Q,GAAP50Q,CAAmDqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,mDAC1F0E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOqzM,sBAAsB,IAIhDm3D,IAAuCtgQ,EAAAA,GAAAA,GAAcogQ,IAC7DlgQ,WAAWmgQ,IACXlgQ,Q,OChBE,MAAMogQ,GAAsC/0Q,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2DAChDE,GAASA,EAAMI,MAAM6J,OAAO0C,eACnC9L,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,I,OCDnC,MAAMghP,IAAsCh1Q,EAAAA,GAAAA,IAAO+0Q,GAAP/0Q,CAA2CE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2BACjFE,GAASA,EAAMI,MAAM6J,OAAO2qQ,mBCA5BC,IAA+B1gQ,EAAAA,GAAAA,GAAcugQ,IACrDrgQ,WAAWsgQ,IACXrgQ,Q,OCJE,MAAMwgQ,GAA8Bn1Q,GAAAA,GAAOy6D,IAAGv6D,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gD,OCA9C,MAAMi1Q,GAAsBp1Q,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8HAK3BE,GAAK,2CAAA8B,OAA+C9B,EAAMI,MAAM6J,OAAO0C,aAAY,QAAA7K,OAAO9B,EAAMI,MAAM6J,OAAO0C,aAAY,WAAA7K,OAAU9B,EAAMI,MAAM6J,OAAO0C,aAAY,c,OCJ7K,MAAMqoQ,IAAkBr1Q,EAAAA,GAAAA,IAAOo1Q,GAAPp1Q,CAA2BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2B,OCAnD,MAAMm1Q,IAAsBt1Q,EAAAA,GAAAA,IAAOo1Q,GAAPp1Q,CAA2BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iDAC5CE,GAASA,EAAMI,MAAM6J,OAAO2tC,sBCCjCs9N,IAAe/gQ,EAAAA,GAAAA,GAAc4gQ,IACrC3gQ,aAAa4gQ,IACb3gQ,WAAW4gQ,IACX3gQ,Q,OCNE,MAAM6gQ,GAA0Bx1Q,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,Q,OCC1C,MAAMs1Q,IAA0Bz1Q,EAAAA,GAAAA,IAAOw1Q,GAAPx1Q,CAA+BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2BACzDE,GAASA,EAAMI,MAAM6J,OAAO2qQ,mBCA5BS,IAAmBlhQ,EAAAA,GAAAA,GAAcghQ,IAAyB9gQ,WAAW+gQ,IAAyB9gQ,Q,OCe3G,IACaghQ,IADZ7zQ,EAAAA,GAAAA,IAAQuT,GAAT,cAC0CtT,GAAAA,EACtCC,MAAAA,GACI,MAAMwH,EAAOlC,EAAAA,MAAM+qE,SAAS9vE,KAAKlC,MAAMmJ,OACnCvH,EAAAA,GAAAA,KAACkzQ,GAA2B,CAACx+P,IAAKpU,KAAKlC,MAAMmJ,KAAK9H,WAAYgV,IAAI,YAClEnU,KAAKlC,MAAMmJ,KAEf,OACIuB,EAAAA,GAAAA,MAAC4pQ,GAAgC,CAACzhP,WAAYxmB,QAAQnK,KAAKlC,MAAMuJ,SAC/BA,QAASrH,KAAKlC,MAAMuJ,QACpB1H,UAAWK,KAAKlC,MAAM6B,UAAUI,SAAA,EAC9DL,EAAAA,GAAAA,KAACyzQ,GAAgB,CAAApzQ,SACZkH,KAELvH,EAAAA,GAAAA,KAACszQ,GAAY,KACbxqQ,EAAAA,GAAAA,MAAC+pQ,GAAoC,CAAC5yQ,UAAU,yCAAwCI,SAAA,CACnFC,KAAKlC,MAAM2K,QAAS/I,EAAAA,GAAAA,KAACizQ,GAA4B,CAAChzQ,UAAU,QAAOI,SAAEC,KAAKlC,MAAM2K,QAChFzI,KAAKlC,MAAMgE,UAI5B,KACHgR,GC1BM,MAAMugQ,WAAuCvC,GAEhD/9P,WAAAA,CAAYm6O,EACA1hP,GAER4M,MAAM80O,EAAmB1hP,EAAU,CAC/BwkL,cAAeA,KAAOtwL,EAAAA,GAAAA,KAAC0zQ,GAAoB,CAACnsQ,KAAMuE,EAAStN,MAAMuN,aAAa1M,OAAOC,OAAOoI,QAAQksQ,SAASn0Q,WACjEsJ,MAAO+C,EAASoK,YAAYC,UAAU,YACtC/T,KAAM0J,EAASoK,YAAYC,UAAU,uBACrCxO,QAASrH,KAAKuzQ,kBACd5zQ,WAAWG,EAAAA,GAAAA,IAAQ,sCAC/DmkB,QAASuX,EAAAA,SAASwB,YAAY,GAC9Bk1O,gBAAiB,gCACjBC,oBAAqB,EACrBloB,aAAa,EACbmC,iBAAiB,EACjBZ,qBAAqB,EACrBtlM,UAAU,IACX,KAoCCqtN,kBAAoB7zP,UACxB1f,KAAK0rP,eACD1rP,KAAKwL,SAAS+9B,UAAUtuB,UACxBjb,KAAKwL,SAAS+9B,UAAUi4J,uBAEjBxhM,KAAKwL,SAASu4B,UAAUglJ,cAEnC/oL,KAAKwL,SAASqd,UAAUkd,uBAAuB,UAAW,QAAS,YAAY,GA1C/E/sB,EAAAA,EAAAA,IAAehZ,KACnB,CAEA2kC,aAAAA,GAEI,MAAM6J,EAAcxuC,KAAKwL,SAASsiB,SAAS0gB,YACrCglO,EAAmBp7P,MAAMusB,gBAE/B,OAAO6J,GAAeglO,CAE1B,CAEU7mB,mBAAAA,GACN,MAAM8mB,EAAgBzzQ,KAAKwL,SAAS4iI,IAAIxvG,cAAc,IAADh/B,OAAK2uC,GAAAA,KAE1D,GAAGklO,EACC,OAAOA,EAGX,MAAMC,EAAY1zQ,KAAKwL,SAAS4iI,IAAIxvG,cAAc,IAADh/B,OAAKujG,GAAAA,KAEtD,OAAGuwK,GAKI1zQ,KAAKwL,SAAS4iI,IAAIxvG,cAAc,IAADh/B,OAAKwjG,GAAAA,IAC/C,CAEA0oJ,iBAAAA,CAAkBL,GACdrzO,MAAM0zO,kBAAkBL,GACxBzrP,KAAKwL,SAASqd,UAAUkd,uBAAuB,UAAW,OAAQ,YACtE,EChEG,MAAMotO,IAAmB30Q,EAAAA,GAAAA,GAAU,oB,OCAnC,MAAMm1Q,GAA2Bl2Q,GAAAA,GAAOy6D,IAAGv6D,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,oE,UCC3C,MAAMg2Q,IAA0Bn2Q,EAAAA,GAAAA,IAAO80Q,GAAP90Q,CAA4CE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qBAC7Ee,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQ8J,OAAO,IAG/B+oQ,GAA8Bp2Q,GAAAA,GAAOC,KAAIoD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,qBACjD0E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6C,KAAKC,QAAQywB,IAAI,ICInC,MAAMqiP,WAAoCt0Q,GAAAA,EAE7CC,MAAAA,GACI,MAAMi+H,EAAqB19H,KAAKwL,SAASoK,YAEnCm+P,EAAW/zQ,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOg1Q,gCAAgC70Q,WAC1F80Q,EAAej0Q,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOk1Q,cAAc/0Q,WAE5EkkD,GAAO76C,EAAAA,GAAAA,MAACorQ,GAAuB,CAAA7zQ,SAAA,CAChC29H,EAAmB7nH,UAAU,mBAAoB,CAACs+P,MAAOn0Q,KAAKlC,MAAMgoK,aACrEt9J,EAAAA,GAAAA,MAAA,OAAAzI,SAAA,CACK29H,EAAmB7nH,UAAU,YAC9BnW,EAAAA,GAAAA,KAACi0Q,GAAwB,CAACv/P,IAAK6/P,EAAc9/P,IAAI,WACjDzU,EAAAA,GAAAA,KAACm0Q,GAA2B,CAAA9zQ,SACvB29H,EAAmB7nH,UAAU,kCAKpC5O,GAAOvH,EAAAA,GAAAA,KAACyzQ,GAAgB,CAAC/+P,IAAK2/P,EAAS50Q,WAAYgV,IAAI,uBAE7D,OAAOzU,EAAAA,GAAAA,KAAC0zQ,GAAoB,CACxBnsQ,KAAMA,EACNnF,KAAMuhD,EACNh8C,QAASrH,KAAKlC,MAAMs2Q,WAE5B,E,aC3BG,IAAMC,IAA4Bx8P,GA4CpCC,EAAAA,GAAWxK,IAAGwF,GA5CZ,cAA2Cg+P,GAC9C/9P,WAAAA,CAAYm6O,EACA1hP,GAER4M,MAAM80O,EAAmB1hP,EAAU,CAC/BwkL,cAAeA,KAAOtwL,EAAAA,GAAAA,KAACo0Q,GAA2B,CAC5BhuG,UAAWt6J,EAAS63E,IAAIwB,UAAUw7D,eAClC+zH,UAAWp0Q,KAAKs0Q,kBACtCpC,gBAAiB,8BACjBC,oBAAqB,EACrB7lB,QAAS,CACL/oM,UAAW,QACXk4L,gBAAiB,QACjB84B,YAAa,eAEjB7nB,UAAW,CAACjC,IACZviP,UAAW,SACXkkP,iBAAiB,EACjBC,yBAAyB,EACzBb,qBAAqB,EACrBvB,aAAa,EACbiC,SAAS,KAEV3zO,EAAAA,EAAAA,GAAA,sBAAAC,GAAA,WA2DC87P,gBAAkB,KACtBt0Q,KAAK0rP,cAAc,GA1DnB1yO,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKwL,SAAS2iC,WAAW5sB,MAAK4sB,KAC1B1+B,EAAAA,EAAAA,KAAS,IAAM0+B,EAAWC,qBACrBA,IACMA,GACCpuC,KAAKw0Q,gBACT,GACF,KAIV/kQ,EAAAA,EAAAA,KAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAC9B,KACG3P,KAAKw0Q,eAAiB,CAAC,GAElC,CAMU7nB,mBAAAA,GACN,OAAO3sP,KAAKwL,SAAS4iI,IAAI/qF,IAC7B,CAEA1e,aAAAA,GACI,MAAM6uO,EAAmBp7P,MAAMusB,gBACzB8vO,EAAmBz0Q,KAAK00Q,kBAC9B,OAAO10Q,KAAKw0Q,eAAiB,GAClBC,GACAjB,CACf,CAEA,qBAAYkB,GACR,MAAM7gQ,EAAS7T,KAAKwL,SAASqI,OAG7B,IAAKA,EAAOmzC,MAAM2tN,SACd,OAAO,EACX,IAAK9gQ,EAAO8zC,QAAQojL,SAChB,OAAO,EACX,GAAIl3N,EAAOq6H,aACP,OAAO,EAGX,QADmBluI,KAAKwL,SAASye,cAAc05G,qBAAqBtgD,IAAIxhE,OAAOigG,gBAC/DmnF,cAEZp1L,EAAOkZ,OAAOwJ,WAGdv2B,KAAKwL,SAAS+9B,UAAUtuB,UAIhC,CAMAywO,YAAAA,GACItzO,MAAMszO,eACN1rP,KAAKwL,SAASqd,UAAUkd,uBAAuBC,GAAAA,GAA+B4uO,IAAK,gBAAiB,SACxG,CAEA9oB,iBAAAA,CAAkBL,GACdrzO,MAAM0zO,kBAAkBL,GACxBzrP,KAAKwL,SAASqd,UAAUkd,uBAAuBC,GAAAA,GAA+B4uO,IAAK,gBAAiB,OAExG,GACHp8P,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAnDoC,CAAE,IAAD1J,ICzC/B,MAAM+hQ,WAA4C/D,GACrD/9P,WAAAA,CAAYm6O,EACA1hP,GAER4M,MAAM80O,EAAmB1hP,EAAU,CAC/BwkL,cAAeA,KACX,MAAMjtH,EAAQv3D,EAAStN,MAAMuN,aAAaC,MAAM4lG,kBAChD,OAAQ5xG,EAAAA,GAAAA,KAAC0zQ,GAAoB,CAACnsQ,MAAMvH,EAAAA,GAAAA,KAACqjE,EAAI,IACXt6D,MAAO+C,EAASoK,YAAYC,UAAU,aACtC/T,KAAM0J,EAASoK,YAAYC,UAAU,0CACrCxO,QAASrH,KAAKuzQ,kBACd5zQ,WAAWG,EAAAA,GAAAA,IAAQ,0CAA2C,EAEhGmkB,QAASuX,EAAAA,SAASwB,YAAY,GAC9Bk1O,gBAAiB,qCACjBC,oBAAqB,EACrBloB,aAAa,EACbmC,iBAAiB,EACjBZ,qBAAqB,EACrBtlM,UAAU,IACX,KA6BCqtN,kBAAoB7zP,UACxB1f,KAAK0rP,eACL1rP,KAAKwL,SAASqd,UAAUkd,uBAAuB,UAAW,QAAS,aAChE/lC,KAAKwL,SAASrN,WAAWC,iBACjB4B,KAAKwL,SAASu4B,UAAUuK,uBAElBtuC,KAAKwL,SAASouF,aAAaY,sBAAsB,CAC1DV,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3C7rB,QAAS,CACLC,KAAMC,GAAAA,EAASqa,OACf7a,QAASC,GAAAA,GAAiBimF,qBAC1BzlF,OAAQC,GAAAA,GAAeC,eAGnC,GAzCAxc,EAAAA,EAAAA,IAAehZ,KACnB,CAEA2kC,aAAAA,GACI,MAAM6uO,EAAmBp7P,MAAMusB,gBACzBmwO,EAAyB90Q,KAAKwL,SAASygL,cAAchxK,UACrD6xH,EAAc9sI,KAAKwL,SAAS+9B,UAAUtuB,UACtC85P,EAA0C/0Q,KAAKwL,SAASye,cAAc6P,gBAAgBk7O,mBAAmBC,wBAC/G,OAAOzB,GAAoBsB,IAA2BhoI,GAAeioI,CACzE,CAEUpoB,mBAAAA,GACN,MAAM93N,EAAU70B,KAAKwL,SAAS4iI,IAAIxvG,cAAc,IAADh/B,OAAK2uC,GAAAA,KAEpD,OAAG1Z,GAII70B,KAAKwL,SAAS4iI,IAAIxvG,cAAc,IAADh/B,OAAKyjG,GAAAA,IAE/C,CAEAyoJ,iBAAAA,CAAkBL,GACdrzO,MAAM0zO,kBAAkBL,GACxBzrP,KAAKwL,SAASqd,UAAUkd,uBAAuB,UAAW,OAAQ,YACtE,E,OC5DG,MAAMmvO,GAAwCz3Q,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4lBAGnDE,GAASA,EAAM82C,OAAS,O,OCH7B,MAAMugO,GAA6C13Q,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8YAY5CE,GAASA,EAAMI,MAAM6J,OAAOqtQ,mB,OCZ7C,MAAMC,GAAsC53Q,GAAAA,GAAO6C,OAAM3C,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4NAEnCE,GAASA,EAAMI,MAAMa,OAAOC,OAAOgO,uBAAuB7N,aCYjF0T,IAA0DtT,EAAAA,GAAAA,KAAUzB,IACtE,MAAM0N,GAAWqD,EAAAA,GAAAA,KACjB,IAAI29I,GAAYr9I,EAAAA,GAAAA,QAA8B,MAC1CmmQ,EAAe9pQ,EAAStN,MAAMuN,aAAaC,MAAM88B,oBAErD,MAAM+sO,EAAqBA,KAKvBz3Q,EAAM03Q,uBAENhqQ,EAASqd,UAAUkd,uBAAuB,UAAW,YAAa,aAElEv6B,EAASszB,gBAAgBm+D,aAAa,CAClCF,OAAQ,yBACV,EAoDN,OACEv0F,EAAAA,GAAAA,MAAC0sQ,GAAqC,CAACtgO,OAAQ92C,EAAMu4B,oBAAoBC,mBAAqB,GAAIv2B,SAAA,EAC9FL,EAAAA,GAAAA,KAAC21Q,GAAmC,CAAChuQ,QARnBouQ,KACpBjqQ,EAASqd,UAAUkd,uBAAuB,UAAW,UAAW,aAEhEjoC,EAAM03Q,sBAAsB,KA5BxBhtQ,EAAAA,GAAAA,MAAC2sQ,GAA0C,CAAAp1Q,SAAA,EACvCL,EAAAA,GAAAA,KAAC41Q,EAAY,CAAC7uQ,KAAM,OACpB/G,EAAAA,GAAAA,KAAA,QAAMC,UAAW,sCAAsCI,SACpDyL,EAASoK,YAAYC,UAAU,cAElCnW,EAAAA,GAAAA,KAAA,QAAMC,UAAW,yCAAyCI,SACvDyL,EAASoK,YAAYC,UAAU,4BArBtCnW,EAAAA,GAAAA,KAAC4yD,GAAAA,EAAe,CACZxpD,MAAO,CAACpH,MAAO,OAAQL,OAAQ,OAAQolD,QAAS,SAChDn5C,IAAKk/I,EACLp4I,IAAK5I,EAAStN,MAAMuN,aAAa1M,OAAOuuJ,YAAYooH,mCAAmCv2Q,WACvFw7E,UAAU,EACVzyC,MAAM,EACNytO,iBAAkB,CACdC,oBAAqB,qBAsB7BptQ,EAAAA,GAAAA,MAAA,OAAK7I,UAAW,4CAA4CI,SAAA,EACxDL,EAAAA,GAAAA,KAAA,KAAAK,SACKyL,EAASoK,YAAYC,UAAU,kDAEpCnW,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CAACM,OAAQ,UAAWvF,WAAS,EAAC4F,QAASkuQ,EAAmBx1Q,SAC5DyL,EAASoK,YAAYC,UAAU,2DAkBN,IAIjCggQ,IAA4Bx+P,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,wB,aCnF/D,IAAMijQ,IAAyCj+P,GA2CjDC,EAAAA,GAAWxK,IAAGwF,GA3CZ,cAAwDg+P,GAG3D,WAAIxkB,GACA,MAAO,CACH7Q,gBAAiB,cACjB84B,YAAa,cAErB,CAEAxhQ,WAAAA,CAAYm6O,EACR1hP,GAEA4M,MAAM80O,EAAmB1hP,EAAU,CAC/BwkL,cAAeA,KAETtwL,EAAAA,GAAAA,KAACm2Q,GAAyB,CAACL,qBAAsBx1Q,KAAK0rP,aAAaj1N,KAAKz2B,QAG9EkI,UAAW,SACXwkP,UAAW,CAACxC,IACZgoB,gBAAiB,2CACjBC,oBAAqB,EACrBjmB,SAAS,EACTjC,aAAa,EACbmC,iBAAiB,EACjBZ,qBAAqB,EACrBtlM,UAAU,EACV+lM,aAAa,IACd,KA5BC13D,sBAAqD,MAAIh8K,EAAAA,EAAAA,GAAA,sBAAAC,GAAA,WA6CzDu3P,gBAAkB,KAAO,IAADj6N,EAEU,QAAlCA,EAAA91C,KAAKwL,SAASyqC,QAAQC,oBAAY,IAAAJ,GAAlCA,EAAoC4nJ,cAAgB19L,KAAKwL,SAASsE,OAAOglL,QAAU,MACnFlrK,EAAAA,EAAAA,KAAY,KACR5pB,KAAK+1Q,gBAAiB,CAAI,GAElC,EACF,KAEMrG,0BAA4B,KAE5B1vQ,KAAKu0L,wBACLv0L,KAAKu0L,sBAAsBl2K,UAC3Bre,KAAKu0L,sBAAwB,KACjC,GA7BAv7K,EAAAA,EAAAA,IAAehZ,OAEfyP,EAAAA,EAAAA,KAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAAeA,IACzCA,IAAiB3P,KAAKu0L,wBAEtBv0L,KAAKu0L,sBAAwBv0L,KAAKwL,SAASsE,OAAOu+H,YAAY0mD,OAAO/0L,KAAK+vQ,iBAC9E,GACD,CACC7zP,iBAAiB,GAEzB,CAsBAyoB,aAAAA,GACI,MAAM6uO,EAAmBp7P,MAAMusB,gBACzBqxO,EAA+Bh2Q,KAAKwL,SAASi+B,YAAYC,kBAG/D,OAFsC1pC,KAAKwL,SAAS63E,IAAI04D,yBAEfy3H,GAAoBwC,GAAgCh2Q,KAAK+1Q,cACtG,CAEUppB,mBAAAA,GACN,OAAO,IACX,CAEAb,iBAAAA,CAAkBL,GACdrzO,MAAM0zO,kBAAkBL,GAExBzrP,KAAK0vQ,4BAEL1vQ,KAAKwL,SAASqd,UAAUkd,uBAAuB,UAAW,OAAQ,YACtE,GACHvtB,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAtC6B,CAAM,IAAD1J,I,aC3C5B,IAAMmjQ,IAAyBp+P,GAsCjCC,EAAAA,GAAWxK,IAAGwF,GAtCZ,cAAwC+2O,GAC3C92O,WAAAA,CAAYvH,GAYR,IAAI0qQ,EAXJ99P,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,2BAAAC,GAAA,OAChBQ,EAAAA,EAAAA,IAAehZ,MACfA,KAAKm2Q,0BAELvsP,EAAAA,EAAAA,KAAY,KACR5pB,KAAKgqP,UAAUrvO,KAAK,IAAIk6P,GAAoC70Q,KAAMwL,IAClExL,KAAKgqP,UAAUrvO,KAAK,IAAI04P,GAA+BrzQ,KAAMwL,IAC7DxL,KAAKgqP,UAAUrvO,KAAK,IAAIm7P,GAA0C91Q,KAAMwL,IACxExL,KAAKgqP,UAAUrvO,KAAK,IAAI05P,GAA6Br0Q,KAAMwL,GAAU,IAIzExL,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAAeA,IAC/CA,EAKCumQ,EAAgC/rO,YAAW,MACvCvgB,EAAAA,EAAAA,KAAY,KACT5pB,KAAKqxQ,qBAAsB,CAAI,GAChC,GACH,MAEHpnO,aAAaisO,IACbtsP,EAAAA,EAAAA,KAAY,KACR5pB,KAAKqxQ,qBAAsB,CAAK,IAExC,GACD,CACCn1P,iBAAiB,GAIzB,CAKA,YAAI6tO,GAEA,MAAMqsB,EAAkBp2Q,KAAKgqP,UAAUvqO,QAAO42P,GAAMA,EAAG1xO,kBACvD,OAAGyxO,EAAgBl2Q,OAAS,EACjB,CAACk2Q,EAAgB,IAErB,EACX,CAEQD,sBAAAA,GACJ,IAAI3/G,EAAcx2J,KAAKwL,SAASoyC,aAAaC,QAAQ,mDAClD24G,IACCx2J,KAAKwL,SAASoyC,aAAa+pF,QAAQ,oDAAqE,SAAhB6uB,EAAyB,EAAI,GACrHx2J,KAAKwL,SAASoyC,aAAaE,WAAW,oDAG1C04G,EAAcx2J,KAAKwL,SAASoyC,aAAaC,QAAQ,4CAC9C24G,IACCx2J,KAAKwL,SAASoyC,aAAa+pF,QAAQ,kDAAmD6uB,GACtFx2J,KAAKwL,SAASoyC,aAAaE,WAAW,6CAG1C04G,EAAcx2J,KAAKwL,SAASoyC,aAAaC,QAAQ,6CAC9C24G,IACCx2J,KAAKwL,SAASoyC,aAAa+pF,QAAQ,gDAAiD6uB,GACpFx2J,KAAKwL,SAASoyC,aAAaE,WAAW,6CAG9C,GACHtlC,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA/BkC,CAAM,IAAD1J,ICxCjC,MAAMwjQ,WAA+B53L,EAAAA,EAKxC,yBAAW+vI,GAIP,OAHKzuN,KAAK6oN,yBACN7oN,KAAK6oN,uBAAyB7oN,KAAKwL,SAASu1C,MAAMC,WAE/ChhD,KAAK6oN,sBAChB,CAEA91M,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAXZ+qQ,8BAAwCvrI,GAAAA,EAAUztB,oCAAoC,KACtFsrG,4BAAsB,OAsBtB2tD,oCAAuC/nD,IAEtCzuN,KAAKwL,SAASu1C,MAAMmhK,OAAOuM,KAE5BA,EAAwBzuN,KAAKwL,SAASu1C,MAAMC,WAGhDhhD,KAAK6oN,uBAAyB4F,CAAqB,EAjB/CzuN,KAAKwL,SAASorB,SAASE,WAAW+xG,YAAYkC,SAAS/qI,KAAKu2Q,gCAC5Dv2Q,KAAKw2Q,oCAAoCx2Q,KAAKwL,SAASorB,SAASE,WAAW+xG,YAAYC,cAAc9oI,KAAKu2Q,gCAI1Gv2Q,KAAKy2Q,+BAAiCz2Q,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,UAClEv2B,KAAK02Q,0BAEb,CAYOA,wBAAAA,CAAyB3nP,GAC5B,MAAM7E,EAAO,CACT,gBAAmB,CACf,cAAiB,UACjB,YAAe,QACf,gBAAmB,CACf,OAAUlqB,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,SAAW,UAAY,UAC7D,QAAYxxB,EAAAA,MAAMiP,QAAc,OAAN+a,QAAM,IAANA,OAAM,EAANA,EAAQ4nP,iBAAmB32Q,KAAK42Q,wCAA2C,eAAiB,UACtH,YAAe,SACf,eAAmB7xQ,EAAAA,MAAMiP,QAAc,OAAN+a,QAAM,IAANA,OAAM,EAANA,EAAQ4nP,iBAAmB32Q,KAAK42Q,wCACjE,8BAAiC52Q,KAAK62Q,oBAK5C1/P,EAASnX,KAAKwL,SAASqd,UAAUqsG,UAAUhrG,GAEjD/S,EAAO2lN,0BAA+B,OAAN/tM,QAAM,IAANA,OAAM,EAANA,EAAQ0/L,wBAAyBzuN,KAAKyuN,uBACtEt3M,EAAOsoH,aAAa,kBAAmB,MAAO,aAC9CtoH,EAAOk+G,MACX,CAEA,oBAAWwhJ,GACT,MAA6E,SAAtE72Q,KAAKwL,SAASmoH,QAAQqrB,UAAUhU,GAAAA,EAAU9tB,uBACnD,CAEQ05J,qCAAAA,GAAkD,IAADE,EACrD,MAA0H,UAApB,QAA/FA,EAAA92Q,KAAKwL,SAASu3O,eAAellM,QAAQmtF,GAAAA,EAAU7tB,wDAAgD,IAAA25J,OAAA,EAA/FA,EAAiG92P,cAC5G,CAEA,gCAAWy2P,GACT,OAAOz2Q,KAAKwL,SAASye,cAAc6P,gBAAgBi9O,gBAAgBC,gBAAgBh3Q,KAAKwL,SAAS63E,IAAIkB,aACvG,E,4BC5EG,MAAM0yL,GAAWlkQ,WAAAA,GAAA,KACZmkQ,OAAyB,GAAG,KA0BpCC,aAAe,KACX,KAAOn3Q,KAAKk3Q,OAAOh3Q,OAAS,GAAG,CACNF,KAAKk3Q,OAAO32N,QACpB58B,MACjB,EACH,CA7BDyzP,UAAAA,CAAWpzP,GAEahkB,KAAKk3Q,OAAOvwI,MAAMlvC,GAAMA,EAAE4/K,UAAYrzP,EAAQqzP,WAE9Dr3Q,KAAKk3Q,OAAOv8P,KAAKqJ,EAkBzB,CASAszP,UAAAA,GACIt3Q,KAAKk3Q,OAAS,EAClB,E,mBCpCG,MAAM3pD,GAAwB9vN,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8FACnCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO0C,YAAY,ICkBrC8sQ,GAAsHz5Q,IAC/H,MAAM0N,GAAWqD,EAAAA,GAAAA,MACX,OAACvO,EAAM,QAAE0jB,GAAWlmB,EACpBuJ,GAAU0jB,EAAAA,GAAAA,cAAY,MCrBzB,SAAuCvf,EAA2B6rQ,GACrE,MAAMr0L,EAAMx3E,EAASkE,KAAKszE,KAAO,aACjCx3E,EAASqd,UAAU4tB,wBAAwByoC,GAAAA,GAAqCs4L,eAAgBH,EAAU,aAAcr0L,EAAM,IAAMlmB,KAAKD,MAAM19D,WACnJ,CDmBQs4Q,CAA8BjsQ,EAAUwY,EAAQqzP,SAChD/2Q,EAAO+G,QAAQ2c,EAAQiU,MAAM,GAC9B,CAACzsB,EAAUlL,EAAQ0jB,IAEhBypM,EAAcjiN,EAAStN,MAAMuN,aAAaC,MAAMonB,SAkBtD,OAJAnlB,EAAAA,GAAAA,YAAU,MCnCP,SAAgCnC,EAA2B6rQ,GAC9D,MAAMr0L,EAAMx3E,EAASkE,KAAKszE,KAAO,aACjCx3E,EAASqd,UAAU4tB,wBAAwByoC,GAAAA,GAAqCs4L,eAAgBH,EAAU,QAASr0L,EAAM,IAAMlmB,KAAKD,MAAM19D,WAC9I,CDiCQu4Q,CAAuBlsQ,EAAUwY,EAAQqzP,QAAQ,GAClD,CAACrzP,EAASxY,KAEN9L,EAAAA,GAAAA,KAAA,OAAAK,UACHyI,EAAAA,GAAAA,MAAC04C,GAAAA,GAAgB,CAACC,WAAW,SAAQphD,SAAA,EACjCL,EAAAA,GAAAA,KAACkmG,GAAAA,GAAoB,CAAA7lG,SAlBpBjC,EAAMq+C,ME/BgB,wBFkCvBr+C,EAAMq+C,OACCz8C,EAAAA,GAAAA,KAACu5E,GAAAA,EAA4B,CAAAl5E,UAACL,EAAAA,GAAAA,KAAC+tN,EAAW,CAAChnN,KAAM,OAEjD/G,EAAAA,GAAAA,KAAC6tN,GAAqB,CAAAxtN,UAACL,EAAAA,GAAAA,KAAA,OAAK0U,IAAKtW,EAAMq+C,MAAOhoC,IAAI,OALlD,QAoBP3L,EAAAA,GAAAA,MAACiN,GAAAA,GAAe,CAAC5M,UAAU,QAAO9I,SAAA,EAC9BL,EAAAA,GAAAA,KAAC0tN,GAAqB,CAAArtN,SAAEjC,EAAM2K,QAC5B1D,EAAAA,MAAMgrE,QAAQjyE,EAAM68C,SAClB78C,EAAM68C,QAAQpqC,KAAI2mF,IAAKx3F,EAAAA,GAAAA,KAAC2tN,GAAuB,CAAAttN,SAAEm3F,OACjDx3F,EAAAA,GAAAA,KAAC2tN,GAAuB,CAAAttN,SAAEjC,EAAM68C,UAClCr6C,GAASZ,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CAACM,OAAO,UAAUG,YAAY,IAAI1F,WAAS,EAAC4F,QAASA,EAASzG,OAAO,gBAAeb,SAAEO,EAAOwB,OAAiB,YAGtI,E,4BGtDH,MAAM61Q,GAST5kQ,WAAAA,CAA6BvH,EAAoDnF,GAA4B,KAAhFmF,SAAAA,EAAiC,KAAmBnF,QAAAA,EAAyB,KAR1FgxQ,aAAO,OAOf/4C,iBAAqDn+N,EAAU,KAK/Dy3Q,yBAAqD,KAAK,KAiDlE3/O,MAASqmM,IACDA,IACAt+N,KAAKs+N,YAAcA,GAEvBt+N,KAAK63Q,oBACLC,GAAAA,GAAM7wF,QAAQjnL,KAAKq3Q,QAAQ,EAC9B,KAEOU,sBAAkD,KA5DtD/3Q,KAAKq3Q,QAAUhxQ,EAAQkpB,GAAKlpB,EAAQkpB,GAAKvvB,KAAKwL,SAASu1C,MAAMC,SACjE,CAGAr9B,IAAAA,GACO3jB,KAAKqG,QAAQ2xQ,iBACZh4Q,KAAK43Q,0BAA2BK,EAAAA,EAAAA,KAAK,IAAMj4Q,KAAKqG,QAAQ2xQ,qBACpD,KACIh4Q,KAAK43Q,yBAA2B,KAChC53Q,KAAKk4Q,eAAe,IAG5Bl4Q,KAAKk4Q,eAEb,CAEQA,aAAAA,GAAuB,IAADC,EAAAC,EAAAC,EAAAC,EAC1B,MAAM/kP,EAAYvzB,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM8nB,UACzD,IAAI+kP,GAA4B,EACH,QAAzBJ,EAAAn4Q,KAAKqG,QAAQ+1C,oBAAY,IAAA+7N,GAAzBA,EAA2Bl0P,SAAWjkB,KAAKqG,QAAQ+1C,aAAan4B,QAAQy8F,kBAAoB,IAC5F63J,EAAYv4Q,KAAKqG,QAAQ+1C,aAAan4B,QAAQy8F,mBAElD,MAAMtkE,EAA2C,CAE7Cm8N,YACAC,gBAA0C,QAA3BJ,EAAEp4Q,KAAKqG,QAAQ+1C,oBAAY,IAAAg8N,OAAA,EAAzBA,EAA2BI,gBAE5C74Q,WAAWsjG,EAAAA,GAAAA,IAA2C,QAA1Bo1K,EAACr4Q,KAAKqG,QAAQ+1C,oBAAY,IAAAi8N,OAAA,EAAzBA,EAA2B14Q,WAIxD84Q,aAAyD,KAAlB,QAAzBH,EAAAt4Q,KAAKqG,QAAQ+1C,oBAAY,IAAAk8N,OAAA,EAAzBA,EAA2BG,cAAiC,MAAM/4Q,EAAAA,GAAAA,KAAA,UAAQ,aAAW,QAAQC,UAAU,kDAAkD8J,KAAK,SAASpC,QAASA,KAC1LrH,KAAKi4B,MAAMirE,GAAAA,EAAiBw1K,YAAY,EAC1C34Q,UAACL,EAAAA,GAAAA,KAAC6zB,EAAS,CAAC9sB,KAAM,OACpB4wQ,QAASr3Q,KAAKq3Q,QACdntP,KAAMlqB,OAEV83Q,EAAAA,GAAAA,IAAoB93Q,KAAKqG,QAAQ2pL,cAAchwL,MAAOo8C,EAC1D,CAEQy7N,iBAAAA,GACD73Q,KAAK+3Q,wBACJ/3Q,KAAK+3Q,wBACL/3Q,KAAK+3Q,sBAAwB,MAG9B/3Q,KAAK43Q,2BACJ53Q,KAAK43Q,2BACL53Q,KAAK43Q,yBAA2B,KAExC,CAWAe,YAAAA,GACQ34Q,KAAKqG,QAAQsyQ,cACb34Q,KAAKqG,QAAQsyQ,eAGd34Q,KAAKqG,QAAQ2xQ,mBACZh4Q,KAAK+3Q,uBAAwBE,EAAAA,EAAAA,KAAK,KAAOj4Q,KAAKqG,QAAQ2xQ,qBAClD,KACIh4Q,KAAK+3Q,sBAAwB,KAC7B/3Q,KAAKi4B,OAAO,IAI5B,CACAs3L,aAAAA,GACIvvN,KAAK63Q,oBAED73Q,KAAKqG,QAAQkpN,eACbvvN,KAAKqG,QAAQkpN,cAAcvvN,KAAKs+N,YAExC,E,0CCxFG,IAAMs6C,IAAc/gQ,GAgBtBC,EAAAA,GAAWxK,IAAGwF,GAhBZ,cAA6B4rE,EAAAA,EAShC,cAAYm6L,GACR,MAAO,IACA74Q,KAAK84Q,kBACL94Q,KAAK+4Q,cAEhB,CAKAhmQ,WAAAA,CAAYvH,GACR4M,MAAM5M,GAEN,KArBIwtQ,YAA0B,IAAI/B,GAAa,KAE3C6B,eAAiC,IAAEvgQ,EAAAA,EAAAA,GAAA,qBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,oBAAAE,GAAA,MAoBvCzY,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAAc,KACjD3P,KAAKg5Q,YAAY1B,YAAY,IAGjCt3Q,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAAeA,IAC9CA,EAEA3P,KAAKg5Q,YAAY7B,eAEjBn3Q,KAAKw8C,iBACT,GACD,CACCtgC,iBAAiB,IAKrBlc,KAAKwL,SAAS63E,IAAIoxC,OAAOC,aAAY,KACjC10H,KAAKg0H,kBAAiB,EAAM,IAEhCh0H,KAAKwL,SAAS63E,IAAIoxC,OAAOE,cAAa,KAClC30H,KAAKg0H,kBAAiB,GACtBh0H,KAAKg5Q,YAAY7B,cAAc,IAGnCW,GAAAA,GAAM9tQ,UAAU21H,IACZ,OAAQA,EAAQp6G,QACZ,IAAK,SAEDqE,EAAAA,EAAAA,KAAY,KACR,MAAMqvP,EAAoBj5Q,KAAK84Q,eAAenuL,WAAU8M,GAAKA,EAAE4/K,UAAY13I,EAAQz1G,KAAKmtP,UACpF4B,GAAqB,GACrBj5Q,KAAK84Q,eAAez4O,OAAO44O,EAAmB,GAElDj5Q,KAAK+4Q,cAAcp+P,KAAKglH,EAAQz1G,KAAK,IAEzCy1G,EAAQz1G,KAAKyuP,eACb,MACJ,IAAK,UAED,MACJ,IAAK,WAED/uP,EAAAA,EAAAA,KAAY,KACR,MAAMsvP,EAAMl5Q,KAAK+4Q,cAAcpuL,WAAW3mE,GAAYA,EAAQqzP,UAAY13I,EAAQz1G,KAAKmtP,UACnF6B,GAAO,GACPl5Q,KAAK+4Q,cAAc14O,OAAO64O,EAAK,EACnC,IAEJv5I,EAAQz1G,KAAKqlM,gBAErB,KAEJv2M,EAAAA,EAAAA,IAAehZ,KACnB,CAEA,mBAAIwxQ,GACA,OAAOxxQ,KAAK+4Q,cAAc74Q,OAAS,CACvC,CAGQ8zH,gBAAAA,CAAiB3pE,GACrBrqD,KAAKqqD,aAAeA,CACxB,CAEA8uN,oBAAAA,CAAqBv5N,GACjB,OAAO5/C,KAAKs8C,mBAAiBp3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACxB06C,GAAG,IACN1D,cAAYh3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACL06C,EAAI1D,cAAY,IACnB57C,OAAQs/C,EAAI1D,aAAa57C,OAASs/C,EAAI1D,aAAa57C,OAAS,CACxDwB,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1CxO,QAAUi0C,IACNA,GAAY,OAKhC,CAEAgB,iBAAAA,CAAkBsD,GACd,MAAM,aAAE1D,GAAoC0D,EAAnBw5N,GAAc3xQ,EAAAA,GAAAA,GAAKm4C,EAAGl4C,IAC/C,OAAO1H,KAAKsvN,iBAAepqN,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACtBk0Q,GAAc,IACjBppF,cAAgBhsK,IAAYtkB,EAAAA,GAAAA,KAAC63Q,IAAoBryQ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAK06C,EAAI1D,cAAY,IAAEl4B,QAASA,OAEzF,CAGAsrM,eAAAA,CAAgBjpN,GAA4B,IAADgzQ,EAAAC,EAEvC,GAAIt5Q,KAAK64Q,WAAWlyI,MAAKlvC,GAAKA,EAAE4/K,UAAYhxQ,EAAQkpB,KAChD,OAGJ,MAAMuoP,EAAQ,IAAIH,GAAa33Q,KAAKwL,SAAUnF,GAG9C,GAFArG,KAAK84Q,eAAen+P,KAAKm9P,KAED,QAApBuB,EAAAhzQ,EAAQ+1C,oBAAY,IAAAi9N,GAApBA,EAAsBp1P,UAA+B,QAApBq1P,EAAAjzQ,EAAQ+1C,oBAAY,IAAAk9N,OAAA,EAApBA,EAAsBr1P,QAAQy8F,mBAAoB,IAAM1gH,KAAKqqD,aAMlG,OADAytN,EAAMn0P,OACCm0P,EALH93Q,KAAKg5Q,YAAY5B,WAAWU,EAMpC,CAGAt7N,eAAAA,GACIs7N,GAAAA,GAAM7wF,UACNjnL,KAAK84Q,eAAeltN,SAAQ6rC,GAAKA,EAAE83H,kBACnCvvN,KAAK84Q,eAAiB,EAC1B,GACHtgQ,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iBAlIItE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAC6B,EAAG,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAUnB,CAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAkE1BnE,EAAAA,IAAMwE,OAAAC,yBAAA5J,GAAAsJ,UAAA,oBAAAtJ,GAAAsJ,WAAAtJ,IC1FJ,MAAMymQ,GAAwD,CACjE,CAAClK,GAAUS,gBAAkB,GCQ1B,MAAM0J,WAAwC96L,EAAAA,EAGjD3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAHZiuQ,sBAA6D,CAAC,EAAE,KAChEC,mBAAqB1+O,QAAQC,UAIjCj7B,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eACnC,KACO3P,KAAKwL,SAASkE,KAAKC,aAClB3P,KAAK05Q,mBAAqB15Q,KAAK25Q,mCAE/B35Q,KAAK45Q,YACT,GACD,CACC19P,iBAAiB,GAE7B,CAEA,uBAAa2zP,CAAkBgK,GAAsC,IAADC,EAChE,IAAI95Q,KAAKwL,SAASkE,KAAKC,aAEnB,OAAO,EAIX,GAAG5K,EAAAA,MAAMiP,QAAQhU,KAAKy5Q,uBAAwB,CACtCz5Q,KAAK05Q,qBACL15Q,KAAK05Q,mBAAqB15Q,KAAK25Q,oCAGnC,UACU35Q,KAAK05Q,kBACf,CAAE,MAAMhrQ,GAEJ,OADA1O,KAAKwL,SAAS2L,OAAOs8B,QAAQ,iDAAmD/kC,IACzE,CACX,CACJ,CAEA,OAA6C,QAAtCorQ,EAAC95Q,KAAKy5Q,sBAAsBI,UAAU,IAAAC,EAAAA,EAAI,GAAK95Q,KAAK+5Q,gBAAgBF,EAC/E,CAEA,0BAAazJ,CAAqByJ,GAAmC,IAADG,EAChE,IAAIC,GAAqD,QAAtCD,EAACh6Q,KAAKy5Q,sBAAsBI,UAAU,IAAAG,EAAAA,EAAI,GAAK,EAElE,MAAMnmE,EAAsE,CACxEqmE,UAAWL,GAGf75Q,KAAKy5Q,sBAAsBI,GAAaI,QAClCj6Q,KAAKwL,SAASonH,IAAIo0F,kCAAkClD,kBAAkBjQ,EAChF,CAEQkmE,eAAAA,CAAgBF,GACpB,OAAGN,GAA2BM,GACnBN,GAA2BM,GAI/B,CACX,CAEA,sCAAcF,GACV,IACI,MAAMQ,QAAqBn6Q,KAAKwL,SAASonH,IAAIo0F,kCAAkCjD,wBAC3Eo2D,GACAn6Q,KAAKo6Q,iDAAiDD,EAE9D,CAAE,MAAMzrQ,GACJ1O,KAAKwL,SAAS2L,OAAOxI,MAAM,+CAAgDD,EAC/E,CACJ,CAEQ0rQ,gDAAAA,CAAiDC,GACrDr6Q,KAAKy5Q,sBAAwBY,EAAmBpsN,QAAO,CAACuhM,EAAQ1mI,KAC5D0mI,EAAO1mI,EAAIoxJ,WAAapxJ,EAAIwxJ,aACrB9qB,IACR,CAAC,EACR,CAEQoqB,UAAAA,GACJ55Q,KAAK05Q,mBAAqB1+O,QAAQC,UAClCj7B,KAAKy5Q,sBAAwB,CAAC,CAClC,E,eCjFG,MAAMc,GACTxnQ,WAAAA,CAA4BgqF,EACCvxF,GAAoC,KADrCuxF,OAAAA,EAAwB,KACvBvxF,SAAAA,EAAiC,KAgB7CgvQ,uBAAiB,EAf9B,MAAM34P,EAASrW,EAASye,cAAcC,KAAKuwP,MAAM19K,GACjD,IAAIl7E,EACA,MAAM,IAAIouD,MAAM,6BAADrwE,OAA8Bm9F,EAAM,UAGpDh4F,EAAAA,MAAM+qE,SAASjuD,GACd7hB,KAAKw6Q,kBAAoB,CACrBvgN,IAAKp4C,GAGT7hB,KAAKw6Q,kBAAoB34P,CAGjC,CAIA,OAAIo4C,GAAe,IAADygN,EACd,OAAiC,QAAjCA,EAAO16Q,KAAKw6Q,kBAAkBvgN,WAAG,IAAAygN,EAAAA,EAAI,EACzC,CAEQC,4BAAAA,GACJ,GAA+B,YAA5B36Q,KAAK46Q,mBACJ,MAAO,SAGX,IAAGh2J,EAAAA,GAAAA,IAAa5kH,KAAKi6D,KAAM,CAEvB,OADmB,IAAIsrD,IAAIvlH,KAAKi6D,KAClB44D,OAAO7yG,gBAAkBhgB,KAAKwL,SAASsE,OAAO+iH,OAAO7yG,cACxD,WAEA,QAEf,CACI,OAAGhgB,KAAKwL,SAASyqC,QAAQynJ,aAAa,IAAIpgG,GAAAA,EAAQt9F,KAAKi6D,MAC5C,uBAEA,UAGnB,CAEA,YAAI8/B,GAA4C,IAAD8gL,EAAAC,EAAAC,EAAAC,EAC3C,OAAIh7Q,KAAKw6Q,kBAAkBzgL,SAmBxBh1F,EAAAA,MAAM+qE,SAAS9vE,KAAKw6Q,kBAAkBzgL,UAC9B,CACHlO,GAAI7rF,KAAKw6Q,kBAAkBzgL,SAC3B1yC,OAAQrnD,KAAKw6Q,kBAAkBzgL,SAC/BhtE,OAAQ/sB,KAAKw6Q,kBAAkBzgL,SAC/BxwD,UAAWvpC,KAAK26Q,gCAIjB,CACH9uL,GAAsC,QAApCgvL,EAAE76Q,KAAKw6Q,kBAAkBzgL,SAASlO,UAAE,IAAAgvL,EAAAA,EAAI,SAC1CxzN,OAA8C,QAAxCyzN,EAAE96Q,KAAKw6Q,kBAAkBzgL,SAAS1yC,cAAM,IAAAyzN,EAAAA,EAAI,SAClD/tP,OAA8C,QAAxCguP,EAAE/6Q,KAAKw6Q,kBAAkBzgL,SAAShtE,cAAM,IAAAguP,EAAAA,EAAI,SAClDxxO,UAAoD,QAA3CyxO,EAAEh7Q,KAAKw6Q,kBAAkBzgL,SAASxwD,iBAAS,IAAAyxO,EAAAA,EAAIh7Q,KAAK26Q,gCA/B9B,YAA5B36Q,KAAK46Q,qBAAoCh2J,EAAAA,GAAAA,IAAa5kH,KAAKi6D,KACnD,CACH4xB,GAAI,SACJxkC,OAAQ,SACRt6B,OAAQ,SACRwc,UAAWvpC,KAAK26Q,gCAGb,CACH9uL,GAAI,uBACJxkC,OAAQ,uBACRt6B,OAAQ,uBACRwc,UAAWvpC,KAAK26Q,+BAqBhC,CAEA,iBAAIM,GAAsD,IAADC,EAAAC,EAAAC,EACrD,OAAIp7Q,KAAKw6Q,kBAAkBS,cAiBxBl2Q,EAAAA,MAAM+qE,SAAS9vE,KAAKw6Q,kBAAkBS,eAC9B,CACHpvL,GAAI7rF,KAAKw6Q,kBAAkBS,cAC3B5zN,OAAQrnD,KAAKw6Q,kBAAkBS,cAC/BluP,OAAQ/sB,KAAKw6Q,kBAAkBS,eAIhC,CACHpvL,GAA2C,QAAzCqvL,EAAEl7Q,KAAKw6Q,kBAAkBS,cAAcpvL,UAAE,IAAAqvL,EAAAA,EAAI,WAC/C7zN,OAAmD,QAA7C8zN,EAAEn7Q,KAAKw6Q,kBAAkBS,cAAc5zN,cAAM,IAAA8zN,EAAAA,EAAI,WACvDpuP,OAAmD,QAA7CquP,EAAEp7Q,KAAKw6Q,kBAAkBS,cAAcluP,cAAM,IAAAquP,EAAAA,EAAI,aA3BpDx2J,EAAAA,GAAAA,IAAa5kH,KAAKi6D,KACV,CACH4xB,GAAI,WACJxkC,OAAQ,WACRt6B,OAAQ,YAGL,CACH8+D,GAAI,uBACJxkC,OAAQ,uBACRt6B,OAAQ,uBAoBxB,CAGA,sBAAI6tP,GACA,OAAG56Q,KAAKw6Q,kBAAkBI,mBACf56Q,KAAKw6Q,kBAAkBI,mBAG/B56Q,KAAKwL,SAASkE,KAAKC,cACf3P,KAAKq7Q,cACG,UAMR,QACX,CAEA,yBAAIC,GACA,OAAGv2Q,EAAAA,MAAMkP,kBAAkBjU,KAAKw6Q,kBAAkBc,wBACvC12J,EAAAA,GAAAA,IAAa5kH,KAAKi6D,KAGtBj6D,KAAKw6Q,kBAAkBc,qBAClC,CAEA,iBAAYD,GACR,OAAQr7Q,KAAK+8F,QACT,IAAK,YACL,IAAK,YACL,IAAK,WACL,IAAK,WACD,OAAO,EACX,QACI,OAAO,EAEnB,CAEA,gBAAMw+K,CAAW9oL,GACb,MAAM4vD,QAAariJ,KAAKwL,SAAS62I,KACjC,OAAQriJ,KAAK+8F,QACT,IAAK,YACD,aAAaslD,EAAKm5H,YAAY,CAC1B/oL,gBAAiBA,IAEzB,IAAK,YACD,aAAa4vD,EAAKo5H,YAAY,CAC1BhpL,gBAAiBA,IAEzB,IAAK,WACD,aAAa4vD,EAAKq5H,eAAe,CAC7BjpL,gBAAiBA,IAEzB,IAAK,WACD,aAAa4vD,EAAKs5H,iBACtB,QACI,MAAM,IAAI1rM,MAAM,QAADrwE,OAASI,KAAK+8F,OAAM,2BAE/C,CAEA,6BAAI6+K,GACA,MAAwB,cAAhB57Q,KAAK+8F,QAA0B/8F,KAAKwL,SAASqwQ,YAAY/iF,kBACzC,cAAhB94L,KAAK+8F,QAA0B/8F,KAAKwL,SAASqwQ,YAAY9iF,gBACrE,ECrLG,MAAM+iF,WAA+Bp9L,EAAAA,EAExChb,UAAAA,CAAWq5B,GACP,OAAO,IAAIw9K,GAAwBx9K,EAAQ/8F,KAAKwL,UAAUyuD,GAC9D,CAEQ8hN,gBAAAA,CAAiBhiL,GACrB,GAAgB,WAAbA,IAA0B/5F,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,WAAav2B,KAAKwL,SAAS+9B,UAAUtuB,UAE1F,IACI,OAAOjb,KAAKwL,SAASsE,OAAOksQ,mBAChC,CAAE,MAAOttQ,GAEL,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,gCAAiCD,GACrD,IACX,CAGJ,OAAO,IACX,CAEA,kBAAMuuF,CAAa52F,GAA+C,IAAD41Q,EAC7D,MAAMC,QAAqBl8Q,KAAKwL,SAASoL,WAAWrI,QAAQgnO,oBAAoBt4I,aAAa52F,GAC7F,GAAG61Q,EAAaznC,mBAAqBF,GAAyCG,SAC1E,OAGJruO,EAA8B,QAAvB41Q,EAAGC,EAAa71Q,eAAO,IAAA41Q,EAAAA,EAAI51Q,EAElC,MAAMwb,EAAS,IAAI04P,GAAwBl0Q,EAAQ02F,OAAQ/8F,KAAKwL,UAE1DuuF,EAAW/5F,KAAKm8Q,iBAAiBt6P,GAEvC,IAAIu6P,EAAkBp8Q,KAAK+7Q,iBAAiBhiL,GAExCoD,QAAan9F,KAAKq8Q,WAAWx6P,EAAQxb,GAEzC,GAAGA,EAAQ62F,SAAU,CACjB,IAAIA,EAAW72F,EAAQ62F,SACnBA,EAAS8nD,WAAW,OACpB9nD,EAAW,IAAMA,GAErBC,GAAcD,CAClB,OAEMl9F,KAAKs8Q,eAAen/K,EAAMpD,EAAUqiL,EAC9C,CAGA,aAAM5mN,CAAQnvD,GAEV,IAAI0zF,EAEAA,EADD1zF,EAAQ0zF,SACI1zF,EAAQ0zF,UAEhB6qB,EAAAA,GAAAA,IAAav+G,EAAQ4zD,KACT,SAEA,6BAIbj6D,KAAKs8Q,eAAej2Q,EAAQ4zD,IAAK8/B,EAAU/5F,KAAK+7Q,iBAAiBhiL,GAC3E,CAEQwiL,yBAAAA,CAA0BtiN,GAC9Bj6D,KAAKwL,SAAS+9B,UAAUisB,QAAQyE,EACpC,CAEQuiN,sBAAAA,CAAuBviN,GAC3Bj6D,KAAKwL,SAASuhB,OAAO++K,iBAAiB7xI,EAC1C,CAEQwiN,sBAAAA,CAAuBxiN,EAAamiN,GACxC,KAAIx3J,EAAAA,GAAAA,IAAa3qD,GAAM,CACnB,MAAMyiN,EAAa,IAAIn3J,IAAIvlH,KAAKwL,SAASsE,OAAO+iH,QAChD6pJ,EAAW7mB,SAAW57L,EACtBA,EAAMyiN,EAAWnwO,IACrB,CAEI6vO,EACAA,EAAgBxlP,SAAWqjC,EAE3Bj6D,KAAKwL,SAASsE,OAAO2zN,aAAaxpK,EAE1C,CAEA,2BAAc0iN,CAAsB1iN,GAChCj6D,KAAKwL,SAAS63E,IAAIqP,cAAc2nD,8BAC1Br6I,KAAKwL,SAASorB,SAASiuF,SAAS5qD,EAC1C,CAEA,wBAAc2iN,CAAmB3iN,GAC7Bj6D,KAAKwL,SAAS63E,IAAIqP,cAAc2nD,8BAC1Br6I,KAAKwL,SAASorB,SAASiuF,SAAS5qD,EAC1C,CAEA,oBAAcqiN,CAAeriN,EAAa8/B,EAAuCqiL,GAC7E,OAAQriL,GACJ,IAAK,6BACK/5F,KAAKwL,SAASorB,SAASjc,KAAKs/C,EAAIj6C,eACtC,MACJ,IAAK,SACEhgB,KAAKwL,SAAS+9B,UAAUtuB,UACvBjb,KAAKu8Q,0BAA0BtiN,GACzBj6D,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,SAClCv2B,KAAKw8Q,uBAAuBviN,GAE5Bj6D,KAAKy8Q,uBAAuBxiN,EAAKmiN,GAErC,MACJ,IAAK,WACEp8Q,KAAKwL,SAAS+9B,UAAUtuB,gBACjBjb,KAAK28Q,sBAAsB1iN,GAC3Bj6D,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,eAC5Bv2B,KAAK48Q,mBAAmB3iN,SAExBj6D,KAAKwL,SAASorB,SAASiuF,SAAS5qD,GAE1C,MACJ,IAAK,gBACDj6D,KAAKwL,SAAS63E,IAAIqP,cAAc6nD,uBAAuBtgF,GACvD,MACJ,QACI,MAAM,IAAIgW,MAAM,wCAADrwE,OAAyCm6F,IAGpE,CAEA,sBAAgB8iL,CAAiBh7P,GAE7B,IAAIi7P,EAAaj7P,EAAOo4C,IAExB,GAAqC,yBAAlCj6D,KAAKm8Q,iBAAiBt6P,GAAoC,CAEzD,KAAI+iG,EAAAA,GAAAA,IAAak4J,GAAa,CAC1B,MAAMJ,EAAa,IAAIn3J,IAAIvlH,KAAKwL,SAASsE,OAAO+iH,QAChD6pJ,EAAW7mB,SAAWinB,EACtBA,EAAaJ,EAAWnwO,IAC5B,CAEG1qB,EAAOy5P,wBACNwB,SAAoB98Q,KAAKwL,SAAS07G,WAAWuqE,gBAAgBqrF,IAGjEA,EAAa98Q,KAAKwL,SAASuiN,2BAA2Bi+C,8BAA8B8Q,EACxF,CAEA,OAAOA,CACX,CAEA,gBAAgBT,CAAWx6P,EAAiCxb,GAExD,GAAGrG,KAAK+8Q,2BAA2Bl7P,GAAS,CACxC,MAAM,MAAC8nH,SAAe3pI,KAAKwL,SAASkE,KAAKk6H,mBACzC,MAAM,GAANhqI,OAAUI,KAAKwL,SAASqwQ,YAAYnjF,4BAA4BE,YAAW,cAAAh5L,OAAc+pI,EAC7F,CAEA,MAAiC,WAA9B9nH,EAAO+4P,yBACO56Q,KAAK68Q,iBAAiBh7P,SAEtBA,EAAO05P,WAAWl1Q,EAAQosF,gBAE/C,CAEQsqL,0BAAAA,CAA2Bl7P,GAC/B,QAAI7hB,KAAKwL,SAASkE,KAAKC,cAIhBkS,EAAO+5P,yBAClB,CAEQoB,iBAAAA,CAAkBn7P,GACtB,OAAG7hB,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,SACpB1U,EAAOo5P,cAAcluP,OAG7B/sB,KAAKwL,SAASqI,OAAOmI,GAAGmgB,WAChBta,EAAOo5P,cAAc5zN,OAGzBxlC,EAAOo5P,cAAcpvL,EAChC,CAEUswL,gBAAAA,CAAiBt6P,GAGvB,OAAG7hB,KAAK+8Q,2BAA2Bl7P,GACxB7hB,KAAKg9Q,kBAAkBn7P,GAG/B7hB,KAAKwL,SAAS+9B,UAAUtuB,UAChB4G,EAAOk4E,SAASxwD,UAGxBvpC,KAAKwL,SAASqI,OAAOkZ,OAAOwJ,SACpB1U,EAAOk4E,SAAShtE,OAGxB/sB,KAAKwL,SAASqI,OAAOmI,GAAGmgB,WAChBta,EAAOk4E,SAAS1yC,OAGpBxlC,EAAOk4E,SAASlO,EAC3B,CAGA,eAAMoxL,SACIj9Q,KAAKi9F,aAAa,CACpBF,OAAQ,aAEhB,CAEA,eAAM0tI,SACIzqO,KAAKi9F,aAAa,CACpBF,OAAQ,aAEhB,CAEA,2BAAMh+D,SACI/+B,KAAKi9F,aAAa,CACpBF,OAAQ,yBAEhB,CAEA,oCAAMnhC,SACI57D,KAAKi9F,aAAa,CACpBF,OAAQ,kCAEhB,CAEA,2BAAM25F,SACI12L,KAAKi9F,aAAa,CACpBF,OAAQ,qBAEhB,CAEA,uBAAM3hC,SACIp7D,KAAKi9F,aAAa,CACpBF,OAAQ,qBAEhB,CAEA,kBAAMvhC,SACIx7D,KAAKi9F,aAAa,CACpBF,OAAQ,gBAEhB,CAEA,oBAAMjiC,SACI96D,KAAKi9F,aAAa,CACpBF,OAAQ,kBAEhB,CAEA,gCAAMgnF,SACI/jL,KAAKi9F,aAAa,CACpBF,OAAQ,0BAEhB,EC5QG,IAAKmgL,GCSL,SAASC,GAAcC,EAAiBC,GAC3C,IACI,OAAO57P,KAAK4nH,MAAM+zI,EACtB,CAAE,MAAM1uQ,GACJ,OAAO2uQ,GAAwB,EACnC,CACJ,EDXC,SAJWH,GAAAA,EAAW,sBAAXA,EAAW,kCAAXA,EAAW,wBAItB,CAJWA,KAAAA,GAAW,KEUhB,MAAMI,WAA+B5+L,EAAAA,EAExC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAFZ+xQ,2BAAqB,OAqBrBC,uBAAyB99P,UAE7B,GAAK1f,KAAKwL,SAASkE,KAAKC,aAKxB,IAAK,IAAIrK,EAAI,EAAGA,EAAIypB,EAAO7uB,OAAQoF,IAAK,CAEpC,MAAMuc,EAASkN,EAAOzpB,GAIhBm4Q,GADW14Q,EAAAA,MAAMkP,kBAAkB4N,EAAO67P,gBAAkB,CAAC,EAAIP,GAAct7P,EAAO67P,eAAgB,CAAC,IAC9E/X,YAAc9jP,EAAO8jP,WACpD,IAAI1yP,EACJ,IAAKlO,EAAAA,MAAMkP,kBAAkBwpQ,GAAgB,CACzC,MAAME,EAAgB59O,SAAS09O,GAC/B,GAAIh5I,MAAMk5I,GACN,MAAM,IAAI1tM,MAAM,iEAEpBh9D,QAAiBjT,KAAKwL,SAAS2P,MAAM8mH,YAAY07I,EACrD,CAEA,MAAM15P,EAAkBpC,EAAO+7P,eAAiB,EAG1CC,EAAsC,CACxCtuP,GAAI1N,EAAOi8P,UAGX1hO,aAAc,CACVn4B,QAASuX,EAAAA,SAASwB,YAAY/Y,IAGlCi4B,aAAc,CACVzzC,MAAOoZ,EAAOk8P,MACdpjO,QAAS94B,EAAOm8P,SAChB19Q,YAAQH,EACRg8C,OAAQn8C,KAAKwL,SAASrN,WAAWo3C,UAAY1zB,EAAOo8P,YAAcp8P,EAAOq8P,UAAYr8P,EAAOs8P,eAEhGxF,aAAcA,KACiC,IAADyF,EAAAC,EAAAC,EAArCv5Q,EAAAA,MAAMiP,QAAQ6N,EAAO08P,gBACtBv+Q,KAAKwL,SAASqd,UAAU+S,cAAkC,QAArBwiP,EAACv8P,EAAO08P,qBAAa,IAAAH,OAAA,EAApBA,EAAsBp1P,SAA8B,QAAtBq1P,EAAEx8P,EAAO08P,qBAAa,IAAAF,OAAA,EAApBA,EAAsBpmQ,OAA4B,QAAtBqmQ,EAAEz8P,EAAO08P,qBAAa,IAAAD,OAAA,EAApBA,EAAsBhkP,MAC9H,GAYJrnB,EAEA4qQ,EAAU3hO,aAAa57C,OAAS,CAC5BwB,KAAM+f,EAAO8sM,YAAc3uN,KAAKwL,SAASoK,YAAYC,UAAU,QAC/DxO,QAAUi0C,IACHroC,GACCjT,KAAKwL,SAAS2iC,WAAW5sB,MAAK4sB,IAC1BA,EAAWykD,SAAS,CAAC3/E,WAAU4/E,SAAUlL,GAAAA,EAAamL,MAAM,IAIpEx3C,GAAY,GAGbz5B,EAAO8sM,YAAc9sM,EAAO2zG,SACnCqoJ,EAAU3hO,aAAa57C,OAAS,CAC5BwB,KAAM+f,EAAO8sM,WACbtnN,QAAUi0C,IACNz5B,EAAO2zG,WACPl6E,GAAY,GAGbz5B,EAAO28P,OAAStB,GAAYuB,cAAiB58P,EAAO28P,MAASv6P,KAEpE45P,EAAU3hO,aAAa57C,OAAS,CAC5BwB,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1CxO,QAAUi0C,IACNA,GAAY,IAKxBt7C,KAAKwL,SAAS6wC,QAAQC,kBAAkBuhO,EAC5C,MArFI79Q,KAAKwL,SAAS2L,OAAO+0E,MAAM,8DAqF/B,EAzGAlsF,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAAeA,IAG1C,IAAD+uQ,EAFJ/uQ,EACC3P,KAAKu9Q,sBAAwBv9Q,KAAKwL,SAAS63E,IAAIoxC,OAAOqiB,kBAAkB92I,KAAKw9Q,wBAEnD,QAA1BkB,EAAA1+Q,KAAKu9Q,6BAAqB,IAAAmB,GAA1BA,EAA4B9yP,KAChC,GACD,CACC1P,iBAAiB,GAIzB,E,aCnBG,IAAMyiQ,IAAmB9mQ,GAO3BC,EAAAA,GAAWxK,IAAGwF,GAPZ,cAAkC4rE,EAAAA,EACrC3rE,WAAAA,CAAY+sH,GACR1nH,MAAM0nH,IAAgBvnH,EAAAA,EAAAA,GAAA,sBAAAC,GAAA,OAEtBQ,EAAAA,EAAAA,IAAehZ,KACjB,CAMKgtJ,oBAAAA,CAAqBx2G,GACxBx2C,KAAKwL,SAASqJ,SAAS0M,MAAK1M,KACxB+U,EAAAA,EAAAA,KAAY,KAAO,IAADg1P,EACd5+Q,KAAK23C,eAAiB9iC,EAAS+iC,oBAAoBpB,GAEnD,MAAMpD,GAAkC,QAAnBwrO,EAAA5+Q,KAAK23C,sBAAc,IAAAinO,OAAA,EAAnBA,EAAqBxrO,cAAe,CAAC,EAE1DpzC,KAAK23C,eAAeknO,aAAazrO,EAAY,GAC/C,GAGV,GACH56B,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA1J,IC3BM,MAAMgsQ,GACT/rQ,WAAAA,CAA4Bwc,EACPwvP,EACAvzQ,GAAoC,KAF7B+jB,GAAAA,EAAU,KACjBwvP,gBAAAA,EAAuB,KACvBvzQ,SAAAA,EAAiC,KAItCua,UAAI,EAHhB/lB,KAAK+lB,KAAO/lB,KAAKwL,SAASoK,YAAYC,UAAUkpQ,EACpD,CAIA94L,OAAAA,CAAQ+4L,GACJ,OAAO70Q,SAAQ64B,EAAAA,GAAAA,IAAwBhjC,KAAK+lB,MAAMkuE,MAAM+qL,KAAUh8O,EAAAA,GAAAA,IAAwBhjC,KAAK++Q,iBAAiB9qL,MAAM+qL,GAC1H,ECTG,MAAMC,WAA0BvgM,EAAAA,EAA0C3rE,WAAAA,GAAA,SAAA9S,WAAA,KAErEi/Q,WAAoC,CACxC,IAAIJ,GAAoB3yG,GAAYM,UAAW,YAAazsK,KAAKwL,UACjE,IAAIszQ,GAAoB3yG,GAAYO,oBAAqB,uBAAwB1sK,KAAKwL,UACtF,IAAIszQ,GAAoB3yG,GAAYQ,SAAU,WAAY3sK,KAAKwL,UAC/D,IAAIszQ,GAAoB3yG,GAAYS,aAAc,gBAAiB5sK,KAAKwL,UACxE,IAAIszQ,GAAoB3yG,GAAYW,MAAO,QAAS9sK,KAAKwL,UACzD,IAAIszQ,GAAoB3yG,GAAYgzG,WAAY,cAAen/Q,KAAKwL,UACpE,IAAIszQ,GAAoB3yG,GAAYsB,eAAgB,mBAAoBztK,KAAKwL,UAC7E,IAAIszQ,GAAoB3yG,GAAYkB,MAAO,kBAAmBrtK,KAAKwL,UACnE,IAAIszQ,GAAoB3yG,GAAYqB,gBAAiB,oBAAqBxtK,KAAKwL,UAC/E,IAAIszQ,GAAoB3yG,GAAYa,kBAAmB,sBAAuBhtK,KAAKwL,UACnF,IAAIszQ,GAAoB3yG,GAAYoB,MAAO,QAASvtK,KAAKwL,UACzD,IAAIszQ,GAAoB3yG,GAAYizG,OAAQ,SAAUp/Q,KAAKwL,UAC3D,IAAIszQ,GAAoB3yG,GAAYc,gBAAiB,oBAAqBjtK,KAAKwL,UAC/E,IAAIszQ,GAAoB3yG,GAAYgB,mBAAoB,uBAAwBntK,KAAKwL,UACrF,IAAIszQ,GAAoB3yG,GAAYuB,SAAU,WAAY1tK,KAAKwL,UAC/D,IAAIszQ,GAAoB3yG,GAAYe,SAAU,WAAYltK,KAAKwL,UAC/D,IAAIszQ,GAAoB3yG,GAAYkzG,YAAa,gBAAiBr/Q,KAAKwL,UACvE,IAAIszQ,GAAoB3yG,GAAYmzG,OAAQ,SAAUt/Q,KAAKwL,UAC3D,IAAIszQ,GAAoB3yG,GAAYozG,WAAY,cAAev/Q,KAAKwL,UACpE,IAAIszQ,GAAoB3yG,GAAYY,OAAQ,SAAU/sK,KAAKwL,UAC3D,IAAIszQ,GAAoB3yG,GAAYmB,eAAgB,kBAAmBttK,KAAKwL,UAC5E,IAAIszQ,GAAoB3yG,GAAYqzG,GAAI,MAAOx/Q,KAAKwL,UACpD,IAAIszQ,GAAoB3yG,GAAYwB,cAAe,mBAAoB3tK,KAAKwL,UAC5E,IAAIszQ,GAAoB3yG,GAAYszG,aAAc,gBAAiBz/Q,KAAKwL,UACxE,IAAIszQ,GAAoB3yG,GAAYiB,KAAM,OAAQptK,KAAKwL,UACvD,IAAIszQ,GAAoB3yG,GAAYuzG,QAAS,UAAW1/Q,KAAKwL,UAC7D,IAAIszQ,GAAoB3yG,GAAYwzG,KAAM,OAAQ3/Q,KAAKwL,UACvD,IAAIszQ,GAAoB3yG,GAAYyzG,MAAO,QAAS5/Q,KAAKwL,UACzD,IAAIszQ,GAAoB3yG,GAAYU,uBAAwB,2BAA4B7sK,KAAKwL,UAC7F,IAAIszQ,GAAoB3yG,GAAY0zG,eAAgB,mBAAoB7/Q,KAAKwL,UAC7E,IAAIszQ,GAAoB3yG,GAAYyB,MAAO,QAAS5tK,KAAKwL,UACzD,IAAIszQ,GAAoB3yG,GAAY2zG,SAAU,YAAa9/Q,KAAKwL,UAChE,IAAIszQ,GAAoB3yG,GAAY4zG,eAAgB,mBAAoB//Q,KAAKwL,UAC7E,IAAIszQ,GAAoB3yG,GAAY6zG,WAAY,cAAehgR,KAAKwL,UACpE,IAAIszQ,GAAoB3yG,GAAY8zG,0BAA2B,+BAAgCjgR,KAAKwL,UACvG,CAED00Q,UAAAA,CAAWlB,GACP,MAAMmB,EAAwB,GAQ9B,OANAngR,KAAKk/Q,WAAWtzN,SAAQ1tD,IAChBA,EAAM+nF,QAAQ+4L,IACdmB,EAAYxlQ,KAAKzc,EAAMqxB,GAC3B,IAGG4wP,CACX,CAEA3zG,sBAAAA,CAAuB4zG,GACnB,OAAOpgR,KAAKk/Q,WAAWv4I,MAAK05I,GAAuBA,EAAoB9wP,KAAO6wP,GAClF,ECzDG,MAAME,GACTvtQ,WAAAA,CAA4Bwc,EACRxJ,EACAw6P,GAAkB,KAFVhxP,GAAAA,EAAU,KAClBxJ,KAAAA,EAAY,KACZw6P,KAAAA,CACpB,CAEAt6L,OAAAA,CAAQ+4L,GACJ,OAAOh/Q,KAAKwgR,aAAaxB,IAAUh/Q,KAAKygR,eAAezB,EAC3D,CAEQwB,YAAAA,CAAaxB,GACjB,OAAO70Q,SAAQ64B,EAAAA,GAAAA,IAAwBhjC,KAAK+lB,MAAMkuE,MAAM+qL,GAC5D,CAEQyB,cAAAA,CAAezB,GAAyB,IAAD0B,EAC3C,OAAgB,QAAhBA,EAAO1gR,KAAKugR,YAAI,IAAAG,OAAA,EAATA,EAAWzyN,QAAO,CAAC0yN,EAAYC,MAC9Bz2Q,SAAQ64B,EAAAA,GAAAA,IAAwB49O,GAAY3sL,MAAM+qL,KAG/C2B,IACR,EACP,EClBG,MAAME,WAA2BniM,EAAAA,EAA2C3rE,WAAAA,GAAA,SAAA9S,WAAA,KAEvE6gR,YAAsC,CAC1C,IAAIR,GAAqBz4L,GAAAA,EAAag+E,MAAO,OAC7C,IAAIy6G,GAAqBz4L,GAAAA,EAAam+E,MAAO,OAC7C,IAAIs6G,GAAqBz4L,GAAAA,EAAao+E,SAAU,UAChD,IAAIq6G,GAAqBz4L,GAAAA,EAAaq+E,YAAa,aACnD,IAAIo6G,GAAqBz4L,GAAAA,EAAas+E,YAAa,aACnD,IAAIm6G,GAAqBz4L,GAAAA,EAAau+E,YAAa,aACnD,IAAIk6G,GAAqBz4L,GAAAA,EAAaw+E,SAAU,UAChD,IAAIi6G,GAAqBz4L,GAAAA,EAAay+E,MAAO,UAAW,CAAC,QACzD,IAAIg6G,GAAqBz4L,GAAAA,EAAa0+E,MAAO,OAC7C,IAAI+5G,GAAqBz4L,GAAAA,EAAa2+E,YAAa,aACnD,IAAI85G,GAAqBz4L,GAAAA,EAAa4+E,SAAU,UAChD,IAAI65G,GAAqBz4L,GAAAA,EAAa6+E,cAAe,gBACrD,IAAI45G,GAAqBz4L,GAAAA,EAAa8+E,eAAgB,iBACtD,IAAI25G,GAAqBz4L,GAAAA,EAAa++E,UAAW,WACjD,IAAI05G,GAAqBz4L,GAAAA,EAAag/E,YAAa,aACnD,IAAIy5G,GAAqBz4L,GAAAA,EAAai/E,KAAM,MAC5C,IAAIw5G,GAAqBz4L,GAAAA,EAAak/E,WAAY,YAClD,IAAIu5G,GAAqBz4L,GAAAA,EAAam/E,MAAO,OAC7C,IAAIs5G,GAAqBz4L,GAAAA,EAAao/E,WAAY,YAClD,IAAIq5G,GAAqBz4L,GAAAA,EAAaq/E,WAAY,YAClD,IAAIo5G,GAAqBz4L,GAAAA,EAAas/E,eAAgB,iBACtD,IAAIm5G,GAAqBz4L,GAAAA,EAAau/E,MAAO,OAC7C,IAAIk5G,GAAqBz4L,GAAAA,EAAaw/E,OAAQ,QAC9C,IAAIi5G,GAAqBz4L,GAAAA,EAAay/E,SAAU,UAChD,IAAIg5G,GAAqBz4L,GAAAA,EAAa0/E,MAAO,OAC7C,IAAI+4G,GAAqBz4L,GAAAA,EAAak5L,SAAU,UAChD,IAAIT,GAAqBz4L,GAAAA,EAAa2/E,SAAU,UAChD,IAAI84G,GAAqBz4L,GAAAA,EAAa4/E,iBAAkB,qBACxD,IAAI64G,GAAqBz4L,GAAAA,EAAa6/E,2BAA4B,8BAClE,IAAI44G,GAAqBz4L,GAAAA,EAAa8/E,cAAe,gBACrD,IAAI24G,GAAqBz4L,GAAAA,EAAa+/E,UAAW,aACjD,IAAI04G,GAAqBz4L,GAAAA,EAAaggF,WAAY,YAClD,IAAIy4G,GAAqBz4L,GAAAA,EAAaigF,YAAa,aACnD,IAAIw4G,GAAqBz4L,GAAAA,EAAakgF,YAAa,aACnD,IAAIu4G,GAAqBz4L,GAAAA,EAAamgF,UAAW,YACjD,IAAIs4G,GAAqBz4L,GAAAA,EAAaogF,WAAY,aAClD,IAAIq4G,GAAqBz4L,GAAAA,EAAaqgF,WAAY,aAClD,IAAIo4G,GAAqBz4L,GAAAA,EAAasgF,QAAS,SAC/C,IAAIm4G,GAAqBz4L,GAAAA,EAAaugF,UAAW,WACjD,IAAIk4G,GAAqBz4L,GAAAA,EAAawgF,SAAU,UAChD,IAAIi4G,GAAqBz4L,GAAAA,EAAaygF,cAAe,eACrD,IAAIg4G,GAAqBz4L,GAAAA,EAAa0gF,SAAU,UAChD,IAAI+3G,GAAqBz4L,GAAAA,EAAa2gF,MAAO,OAC7C,IAAI83G,GAAqBz4L,GAAAA,EAAa4gF,YAAa,aACnD,IAAI63G,GAAqBz4L,GAAAA,EAAa6gF,QAAS,SAC/C,IAAI43G,GAAqBz4L,GAAAA,EAAa8gF,aAAc,eACpD,IAAI23G,GAAqBz4L,GAAAA,EAAam5L,aAAc,cACpD,IAAIV,GAAqBz4L,GAAAA,EAAao5L,OAAQ,QAC9C,IAAIX,GAAqBz4L,GAAAA,EAAaq5L,WAAY,YAClD,IAAIZ,GAAqBz4L,GAAAA,EAAas5L,cAAe,eACrD,IAAIb,GAAqBz4L,GAAAA,EAAau5L,QAAS,SAC/C,IAAId,GAAqBz4L,GAAAA,EAAaw5L,WAAY,YAClD,IAAIf,GAAqBz4L,GAAAA,EAAay5L,YAAa,aACnD,IAAIhB,GAAqBz4L,GAAAA,EAAa05L,SAAU,UAChD,IAAIjB,GAAqBz4L,GAAAA,EAAa25L,SAAU,UAChD,IAAIlB,GAAqBz4L,GAAAA,EAAa45L,YAAa,aACnD,IAAInB,GAAqBz4L,GAAAA,EAAa65L,WAAY,YAClD,IAAIpB,GAAqBz4L,GAAAA,EAAa85L,aAAc,eACpD,IAAIrB,GAAqBz4L,GAAAA,EAAa+5L,SAAU,UAChD,IAAItB,GAAqBz4L,GAAAA,EAAag6L,YAAa,aACnD,IAAIvB,GAAqBz4L,GAAAA,EAAai6L,SAAU,UAChD,IAAIxB,GAAqBz4L,GAAAA,EAAak6L,MAAO,OAC7C,IAAIzB,GAAqBz4L,GAAAA,EAAam6L,UAAW,WACjD,IAAI1B,GAAqBz4L,GAAAA,EAAao6L,UAAW,WACjD,IAAI3B,GAAqBz4L,GAAAA,EAAaq6L,UAAW,WACjD,IAAI5B,GAAqBz4L,GAAAA,EAAas6L,UAAW,WACjD,IAAI7B,GAAqBz4L,GAAAA,EAAau6L,iBAAkB,mBACxD,IAAI9B,GAAqBz4L,GAAAA,EAAaw6L,QAAS,SAC/C,IAAI/B,GAAqBz4L,GAAAA,EAAay6L,YAAa,aACnD,IAAIhC,GAAqBz4L,GAAAA,EAAa06L,mBAAoB,qBAC1D,IAAIjC,GAAqBz4L,GAAAA,EAAa26L,aAAc,eACpD,IAAIlC,GAAqBz4L,GAAAA,EAAa46L,SAAU,UAChD,IAAInC,GAAqBz4L,GAAAA,EAAa66L,gBAAiB,kBACvD,IAAIpC,GAAqBz4L,GAAAA,EAAaghF,SAAU,UAChD,IAAIy3G,GAAqBz4L,GAAAA,EAAakhF,UAAW,WACjD,IAAIu3G,GAAqBz4L,GAAAA,EAAa86L,WAAY,YAClD,IAAIrC,GAAqBz4L,GAAAA,EAAayhF,SAAU,UAChD,IAAIg3G,GAAqBz4L,GAAAA,EAAa+6L,UAAW,WACjD,IAAItC,GAAqBz4L,GAAAA,EAAag7L,aAAc,cACpD,IAAIvC,GAAqBz4L,GAAAA,EAAamhF,YAAa,aACnD,IAAIs3G,GAAqBz4L,GAAAA,EAAai7L,OAAQ,QAC9C,IAAIxC,GAAqBz4L,GAAAA,EAAak7L,WAAY,aAClD,IAAIzC,GAAqBz4L,GAAAA,EAAashF,UAAW,WACjD,IAAIm3G,GAAqBz4L,GAAAA,EAAaohF,MAAO,OAC7C,IAAIq3G,GAAqBz4L,GAAAA,EAAam7L,OAAQ,QAC9C,IAAI1C,GAAqBz4L,GAAAA,EAAao7L,OAAQ,QAC9C,IAAI3C,GAAqBz4L,GAAAA,EAAaq7L,UAAW,WACjD,IAAI5C,GAAqBz4L,GAAAA,EAAas7L,UAAW,WACjD,IAAI7C,GAAqBz4L,GAAAA,EAAau7L,aAAc,cACpD,IAAI9C,GAAqBz4L,GAAAA,EAAaw7L,UAAW,WACjD,IAAI/C,GAAqBz4L,GAAAA,EAAay7L,WAAY,YAClD,IAAIhD,GAAqBz4L,GAAAA,EAAa07L,iBAAkB,mBACxD,IAAIjD,GAAqBz4L,GAAAA,EAAa27L,UAAW,YACjD,IAAIlD,GAAqBz4L,GAAAA,EAAa47L,WAAY,aAClD,IAAInD,GAAqBz4L,GAAAA,EAAa67L,UAAW,WACjD,IAAIpD,GAAqBz4L,GAAAA,EAAa87L,UAAW,WACjD,IAAIrD,GAAqBz4L,GAAAA,EAAa+7L,SAAU,WAChD,IAAItD,GAAqBz4L,GAAAA,EAAag8L,aAAc,eACpD,IAAIvD,GAAqBz4L,GAAAA,EAAai8L,OAAQ,QAC9C,IAAIxD,GAAqBz4L,GAAAA,EAAak8L,cAAe,gBACrD,IAAIzD,GAAqBz4L,GAAAA,EAAam8L,mBAAoB,qBAC1D,IAAI1D,GAAqBz4L,GAAAA,EAAaihF,SAAU,UAChD,IAAIw3G,GAAqBz4L,GAAAA,EAAao8L,mBAAoB,qBAC1D,IAAI3D,GAAqBz4L,GAAAA,EAAaq8L,OAAQ,QAC9C,IAAI5D,GAAqBz4L,GAAAA,EAAas8L,MAAO,OAC7C,IAAI7D,GAAqBz4L,GAAAA,EAAau8L,eAAgB,iBACtD,IAAI9D,GAAqBz4L,GAAAA,EAAaw8L,YAAa,aACnD,IAAI/D,GAAqBz4L,GAAAA,EAAaqhF,aAAc,cACpD,IAAIo3G,GAAqBz4L,GAAAA,EAAay8L,QAAS,SAC/C,IAAIhE,GAAqBz4L,GAAAA,EAAa08L,UAAW,WACjD,IAAIjE,GAAqBz4L,GAAAA,EAAa28L,YAAa,aACnD,IAAIlE,GAAqBz4L,GAAAA,EAAa48L,uBAAwB,yBAC9D,IAAInE,GAAqBz4L,GAAAA,EAAa0hF,UAAW,WACjD,IAAI+2G,GAAqBz4L,GAAAA,EAAa68L,UAAW,WACjD,IAAIpE,GAAqBz4L,GAAAA,EAAawhF,YAAa,cACnD,IAAIi3G,GAAqBz4L,GAAAA,EAAa88L,UAAW,WACjD,IAAIrE,GAAqBz4L,GAAAA,EAAa+8L,WAAY,aAClD,IAAItE,GAAqBz4L,GAAAA,EAAag9L,WAAY,aAClD,IAAIvE,GAAqBz4L,GAAAA,EAAai9L,UAAW,WACjD,IAAIxE,GAAqBz4L,GAAAA,EAAauhF,aAAc,cACpD,IAAIk3G,GAAqBz4L,GAAAA,EAAa2hF,QAAS,SAC/C,IAAI82G,GAAqBz4L,GAAAA,EAAak9L,SAAU,UAChD,IAAIzE,GAAqBz4L,GAAAA,EAAa+gF,QAAS,SAC/C,IAAI03G,GAAqBz4L,GAAAA,EAAam9L,UAAW,YACjD,IAAI1E,GAAqBz4L,GAAAA,EAAao9L,WAAY,aAClD,IAAI3E,GAAqBz4L,GAAAA,EAAaq9L,YAAa,aACnD,IAAI5E,GAAqBz4L,GAAAA,EAAas9L,YAAa,aACnD,IAAI7E,GAAqBz4L,GAAAA,EAAau9L,UAAW,YACjD,IAAI9E,GAAqBz4L,GAAAA,EAAaw9L,QAAS,SAC/C,IAAI/E,GAAqBz4L,GAAAA,EAAay9L,cAAe,gBACrD,IAAIhF,GAAqBz4L,GAAAA,EAAa09L,aAAc,eACpD,IAAIjF,GAAqBz4L,GAAAA,EAAa29L,UAAW,WACjD,IAAIlF,GAAqBz4L,GAAAA,EAAa49L,MAAO,OAC7C,IAAInF,GAAqBz4L,GAAAA,EAAa4hF,QAAS,SAC/C,IAAI62G,GAAqBz4L,GAAAA,EAAa69L,WAAY,aAClD,IAAIpF,GAAqBz4L,GAAAA,EAAa89L,aAAc,eACtD,CAEFC,WAAAA,CAAY5G,GACR,MAAM6G,EAAyB,GAQ/B,OANA7lR,KAAK8gR,YAAYl1N,SAAQ1tD,IACjBA,EAAM+nF,QAAQ+4L,IACd6G,EAAalrQ,KAAKzc,EAAMqxB,GAC5B,IAGGs2P,CACX,CACAjgH,SAAAA,CAAUkgH,GACN,OAAO9lR,KAAK8gR,YAAYn6I,MAAK05I,GAAuBA,EAAoB9wP,KAAOu2P,GACnF,E,yBC1JG,MAAMC,WAA8BrnM,EAAAA,EAEvCsnM,0BAAAA,GACI,OAAGhmR,KAAKwL,SAAS63E,IAAIw/D,0BACV7nH,QAAQC,UAGZ,IAAID,SAAcC,IACrB,MAAMvP,EAAe1rB,KAAKwL,SAAS63E,IAAIoxC,OAAO2iB,2BAA0B13H,UACxD,OAAZgM,QAAY,IAAZA,GAAAA,EAAcE,YACRsI,EAAAA,GAAAA,GAAMsH,EAAAA,SAASwB,YAAY,IACjC/B,GAAS,GACX,GAEV,ECdG,ICLKgrP,GCIAC,GFCCC,IAAsBtuQ,GAe9BC,EAAAA,GAAWxK,IAAGwF,GAfZ,MACHC,WAAAA,CAA+BvH,EAA8CyuJ,GAAoD,KAAlGzuJ,SAAAA,EAAyB,KAAqByuJ,wBAAAA,EAAiD,KAY9HhzJ,UAAI,GAAAsR,EAAAA,EAAAA,GAAA,WAAAC,GAAA,OAXAQ,EAAAA,EAAAA,IAAehZ,MACfA,KAAKiH,KAAOjH,KAAKi6J,wBAAwBhzJ,IAC7C,CAEA,MAAIsoB,GACA,OAAOvvB,KAAKi6J,wBAAwB1qI,EACxC,CAEA,SAAI9mB,GACA,OAAOzI,KAAKi6J,wBAAwB7hH,cACxC,CAKA,MAAI+kF,GACA,OAAOn9H,KAAKwL,SAASmmD,YAAY2zF,gBAAgBtlJ,KAAKi6J,wBAAwB1qI,GAClF,CAEA,qBAAIma,GAGA,OAFmC1pC,KAAKwL,SAASmmD,YAAY4xF,cAAcvjJ,KAAKi6J,wBAAwB1qI,GAG5G,CAEA,iBAAM0yI,SACIjiK,KAAKwL,SAASmmD,YAAYizF,aAAa,CAAC5kJ,KAAKi6J,wBAAwB1qI,IAC/E,GAEH/W,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,OAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAf4B,CAAM,IAAD1J,IGnB3B,MAAMszQ,WAAgCD,GACzC,MAAIhpJ,GACA,OAAOn9H,KAAKwL,SAASmmD,YAAY+yF,yBAAyBxkJ,OAAS,CACvE,CAEA,qBAAIwpC,GACA,OAAO,CACX,CAEA,iBAAMu4H,SACIjiK,KAAKwL,SAASmmD,YAAYyzF,cACpC,ECPG,MAAeihI,GAClBtzQ,WAAAA,CAA6BuzQ,EACAnrQ,EACE3P,GAAoC,KAFtC86Q,WAAAA,EAAkC,KAClCnrQ,MAAAA,EAAiB,KACf3P,SAAAA,EAAiC,KAKxD+6Q,cAAgB,CAJxB,CAMAC,aAAAA,CAAcC,GAEV,MAAM9lQ,EAAQ3gB,KAAKmb,MAAMwF,MAAM3gB,KAAKumR,cAAevmR,KAAKumR,cAAgBvmR,KAAKsmR,WAAWI,iBAChDn2Q,KAAI0C,GAAYjT,KAAK2mR,yBAAyB1zQ,KAItF,OAFAjT,KAAKumR,eAAiBvmR,KAAKsmR,WAAWI,gBAE/B,IACAD,KACA9lQ,EAEX,GHxBH,SAHWslQ,GAAAA,EAAAA,EAAa,6BAAbA,EAAAA,EAAa,2BAGxB,CAHWA,KAAAA,GAAa,KC2GxB,SAvGWC,GAAAA,EAA6B,gCAA7BA,EAA6B,oCAA7BA,EAA6B,oCAA7BA,EAA6B,oBAA7BA,EAA6B,oBAA7BA,EAA6B,oCAA7BA,EAA6B,YAA7BA,EAA6B,gBAA7BA,EAA6B,8CAA7BA,EAA6B,0CAA7BA,EAA6B,4CAA7BA,EAA6B,gDAA7BA,EAA6B,4CAA7BA,EAA6B,gCAA7BA,EAA6B,sCAA7BA,EAA6B,4CAA7BA,EAA6B,wCAA7BA,EAA6B,wDAA7BA,EAA6B,gDAA7BA,EAA6B,sBAuGxC,CAvGWA,KAAAA,GAA6B,KGWlC,MAAMU,GACT7zQ,WAAAA,CAA6BE,EACA4zQ,EACAC,EACAt7Q,GAAoC,KAHpCyH,SAAAA,EAAkB,KAClB4zQ,UAAAA,EAAwB,KACxBC,qBAAAA,EAAiD,KACjDt7Q,SAAAA,CAC7B,CAEA,aAAYu7Q,GACR,OAAG/mR,KAAK6mR,YAAcZ,GAAce,YACzB,cAEA,YAEf,CAEA,eAAYv8N,GACR,OAAOzqD,KAAK8mR,qBAAqBr8N,WACrC,CAEQw8N,UAAAA,CAAWl+I,GACf,OAAO1yH,KAAKsD,MAAgB,IAAVovH,GAAiB,GACvC,CAEQ6yF,aAAAA,CAAc97L,GAElB,MAAM2qB,EAAczqD,KAAKyqD,YAsBzB,OApBA3qB,GAAS56B,EAAAA,EAAAA,GAAA,CACL6hR,UAAW/mR,KAAK+mR,UAChBhyQ,SAAU/U,KAAKiT,SAAS8B,SACxBouB,SAAUnjC,KAAKiT,SAASxK,MACxBy+Q,eAAgBlnR,KAAKinR,WAAWx8N,EAAY08N,UAAU5qP,cACtDs0C,QAASpmB,EAAYomB,QACrBu2M,UAAW38N,EAAY28N,UACvBC,kBAAmB58N,EAAYyyK,WAC/BvxK,sBAAuBlB,EAAYkB,sBACnC27N,kBAAmBtnR,KAAK8mR,qBAAqBhoH,UAC7CyoH,eAAgBvnR,KAAK8mR,qBAAqBU,UAC1CC,YAAaznR,KAAKwL,SAASi+B,YAAYm7I,iBAAiB8iG,gBACxDC,cAAe3nR,KAAKwL,SAASi+B,YAAYqkK,qBAAqBv+K,IAC3DuQ,GAGJ9/B,KAAK6mR,YAAcZ,GAAc2B,aAChC9nP,EAAU+nP,cAAgB7nR,KAAKinR,WAAWx8N,EAAYq9N,yBAGnD9nR,KAAKwL,SAASqd,UAAUqsG,UAAU,CACrCzrF,aAAWvkC,EAAAA,EAAAA,GAAA,GACJ46B,KAER+8L,iBAAiB78N,KAAKwL,SAASu1C,MAAMC,WACnCy+E,aAAa,cAAe,MAAO,YAC5C,CAEAsoJ,iBAAAA,GACI/nR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8B8B,mBAC1C3yJ,MACP,CAEA4yJ,sBAAAA,GACIjoR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8BgC,wBAC1C7yJ,MACP,CAEA8yJ,uBAAAA,GACInoR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8BkC,yBAC1C/yJ,MACP,CAEAgzJ,qBAAAA,GACIroR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8BoC,uBAC1CjzJ,MACP,CAEQkzJ,YAAAA,CAAaz1I,EAA0CnkI,GAAmB,IAAD65Q,EAAAC,EAC7EzoR,KAAK47N,cAAc,CACf9oF,UAAWA,EACX41I,UAAqB,QAAZF,EAAE75Q,EAAMoX,YAAI,IAAAyiQ,EAAAA,EAAI,GACzBp+Q,aAA2B,QAAfq+Q,EAAE95Q,EAAMgsC,eAAO,IAAA8tO,EAAAA,EAAI,KAChCpzJ,MACP,CAEAszJ,kBAAAA,CAAmBh6Q,GACf3O,KAAKuoR,aAAarC,GAA8B0C,kBAAmBj6Q,EACvE,CAEAk6Q,eAAAA,CAAgBl6Q,GACZ3O,KAAKuoR,aAAarC,GAA8B4C,eAAgBn6Q,EACpE,CAEAo6Q,oBAAAA,CAAqBp6Q,GACjB3O,KAAKuoR,aAAarC,GAA8B8C,oBAAqBr6Q,EACzE,CAEAs6Q,qBAAAA,CAAsBt6Q,GAClB3O,KAAKuoR,aAAarC,GAA8BgD,qBAAsBv6Q,EAC1E,CAEAw6Q,uBAAAA,CAAwBx6Q,GACpB3O,KAAKuoR,aAAarC,GAA8BkD,qBAAsBz6Q,EAC1E,CAEA06Q,mBAAAA,CAAoBhvJ,GACbA,EAAqB,IAIxBr6H,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8BoD,mBACzC5wJ,cAAe2B,IAChBhF,MACP,CAEAk0J,2BAAAA,GACIvpR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8BsD,6BAC1Cn0J,MACP,CAEAo0J,oBAAAA,CAAqBC,GACjB1pR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8ByD,eACzCD,eAAgBA,IACjBr0J,MACP,CAGAu0J,sBAAAA,CAAuB76P,GACnB/uB,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8B2D,iBACzCH,eAAgB36P,EAAO26P,eACvBI,gBAAiB9pR,KAAKinR,WAAWl4P,EAAO+6P,gBAAgBvtP,gBACzD84F,MACP,CAEA00J,4BAAAA,CAA6BC,EAAsC3C,GAC/DrnR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8B+D,uBACzCD,mBAAoBA,EACpB3C,kBAAmBA,IACpBhyJ,MACP,CAEA60J,mBAAAA,CAAoBC,GACbA,EAAc5tP,aAAe,GAC5Bv8B,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8BkE,UACzCD,cAAeA,EAAc5tP,eAC9B84F,MAEX,CAEAg1J,cAAAA,GACIrqR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8BoE,WAC1Cj1J,MACP,CAEAk1J,gBAAAA,GACIvqR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8BsE,WAC1Cn1J,MACP,CAEAo1J,sBAAAA,GACIzqR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8BwE,mBAC1Cr1J,MACP,CAEAs1J,UAAAA,GACI3qR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8B0E,OAC1Cv1J,MACP,CAEAw1J,YAAAA,GACI7qR,KAAK47N,cAAc,CACf9oF,UAAWozI,GAA8B4E,SAC1Cz1J,MACP,EC5LG,MAAe01J,GAElBh4Q,WAAAA,CAA+BE,EAAuC4zQ,EAA6Cr7Q,GAAoC,KAAxHyH,SAAAA,EAAkB,KAAqB4zQ,UAAAA,EAAwB,KAAqBr7Q,SAAAA,EAAiC,KAM5IisK,mBAA0D,KAAK,KAS/DuzG,qBAA+BluN,KAAKD,MAAM,KAavCouN,UAAYvrQ,UAAa,IAADwrQ,EAER,QAAvBA,EAAAlrR,KAAKy3K,0BAAkB,IAAAyzG,GAAvBA,EAAyBb,uBAEnBrqR,KAAKiT,SAASO,KAAK,CACrBL,YAAY,GACd,EACL,KAESg4Q,YAAc,KAAO,IAADC,EACH,QAAvBA,EAAAprR,KAAKy3K,0BAAkB,IAAA2zG,GAAvBA,EAAyBb,kBAAkB,EAC9C,KAESc,oBAAsB,KAAO,IAADC,EACX,QAAvBA,EAAAtrR,KAAKy3K,0BAAkB,IAAA6zG,GAAvBA,EAAyBb,wBAAwB,CAxCrD,CAOAhrR,MAAAA,CAAOkoH,GAGH,OAFA3nH,KAAKy3K,mBAAqB,IAAImvG,GAA6B5mR,KAAKiT,SAAUjT,KAAK6mR,UAAWl/J,EAAS3nH,KAAKwL,UACxGm8G,EAAQl9D,YAAY8gO,wBAAwBvrR,KAAKy3K,oBAC1Cz3K,KAAKwrR,kBAAkB7jK,EAAQ,GAAD/nH,OAAKI,KAAKiT,SAAS8B,SAAQ,KAAAnV,OAAI+nH,EAAQm3C,WAChF,CAGA2sH,gBAAAA,CAAiB9jK,GAAoD,IAAD+jK,EAChE1rR,KAAKgrR,qBAAuBluN,KAAKD,MACV,QAAvB6uN,EAAA1rR,KAAKy3K,0BAAkB,IAAAi0G,GAAvBA,EAAyBjC,qBAAqB9hK,EAAQ+hK,eAC1D,CAEAiC,kBAAAA,CAAmBhkK,GAAuD,IAADikK,EAC9C,QAAvBA,EAAA5rR,KAAKy3K,0BAAkB,IAAAm0G,GAAvBA,EAAyBhC,uBAAuB,CAC5CF,eAAgB/hK,EAAQ+hK,eACxBI,gBAAiBtuP,EAAAA,SAASsY,iBAAkBgpB,KAAKD,MAAQ78D,KAAKgrR,uBAEtE,E,OCtCG,MAAMa,GAAiCpuR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mC,OCAjD,MAAMkuR,GAAiBruR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,yE,OCAjC,MAAMmuR,GAA2BtuR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+C,gBCW3C,MAAMouR,IAAoEzsR,EAAAA,GAAAA,KAAUzB,IAQnFA,EAAM2sD,YAAYwhO,UAAYnuR,EAAM2sD,YAAYkB,sBACzC,MAIPjsD,EAAAA,GAAAA,KAACgtD,GAAAA,EAAkB,CAACrlD,QAZDqY,gBACb5hB,EAAM2sD,YAAYn6B,KAAKxyB,EAAMsW,IAAK,CACpCw2C,OAAQ9sD,EAAM8sD,OACd6rE,eAAgB34H,EAAM24H,gBACxB,M,OChBH,MAAMy1J,GAAqBzuR,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mG,OCCtC,MAAMuuR,GAAyB1uR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qRAa9Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAK2S,EAAAA,GAAAA,GAAUpT,EAAM6J,OAAO8J,WAAW1S,WAAY,GAAI,ICLpEitR,IAA0D7sR,EAAAA,GAAAA,KAAUzB,IAC7E,MAAM0N,GAAWqD,EAAAA,GAAAA,KAEjB,IAAI/Q,EAAM2sD,YAAYx/C,UAAYnN,EAAM2sD,YAAYkB,sBAChD,OAAO,KAGX,IAAI+kD,EAAiBllG,EAAStN,MAAMuN,aAAaC,MAAMkrG,eAMvD,OACIpuG,EAAAA,GAAAA,MAAC2jR,GAAsB,CAAC9kR,QALLqY,gBACb5hB,EAAM2sD,YAAYW,WAAW,EAIarrD,SAAA,EAC5CL,EAAAA,GAAAA,KAACgxG,EAAc,CAACjqG,KAAM,KACtB/G,EAAAA,GAAAA,KAACwsR,GAAkB,CAAAnsR,SACdyL,EAASoK,YAAYC,UAAU,oCAEf,I,OC5B1B,MAAMw2Q,GAAgC5uR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8PAUjDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQ8J,OAAO,IAChCxI,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAO4B,SAAS,ICJnC2iR,IAA0F/sR,EAAAA,GAAAA,KAAUzB,IAC7G,MAAM0N,GAAWqD,EAAAA,GAAAA,KAEjB,OAAI/Q,EAAM2sD,YAAYkB,uBAKlBjsD,EAAAA,GAAAA,KAAC2sR,GAA6B,CAAAtsR,SACzByL,EAASoK,YAAYC,UAAU,oCAL7B,IAMyB,ICC3B02Q,IAA4DhtR,EAAAA,GAAAA,KAAUzB,IAE/E,MAAM0uR,GAA2Br9Q,EAAAA,GAAAA,QAA8B,OACzD,YAACs7C,EAAW,IAAEr2C,EAAG,SAAEgb,EAAQ,UAAEy3P,EAAS,OAAEj8N,GAAU9sD,EAElD24H,EAAiBowJ,IAAcZ,GAAc2B,WAAapsP,EAAAA,SAASC,YAAY,QAAKt7B,EAuC1F,OArCAwN,EAAAA,GAAAA,YAAU,KACN88C,EAAYgiO,OAAOD,EAAyBj+Q,SAErC,KACHk8C,EAAYiiO,QAAQ,IAGzB,CAACjiO,KAEJ98C,EAAAA,GAAAA,YAAU,KACN,IAAIg/Q,EAAqB,KAkBzB,OAjBGv9P,EACCq7B,EAAYn6B,KAAKlc,EAAK,CAClBw2C,OAAQA,EACR6rE,eAAgBA,IAGpBhsE,EAAYmiO,QAAQx4Q,EAAK,CACrBw2C,OAAQA,IACTrpC,MAAK,KACJorQ,EAAgBxiP,YAAWzqB,UACnB0P,SACMq7B,EAAYlkC,OACtB,GACDsgQ,IAAcZ,GAAc2B,WAAa,IAAO,IAAK,IAIzD,KACA+E,IACC1iP,aAAa0iP,GACbA,EAAgB,KACpB,CACH,GAEF,CAACliO,EAAar2C,EAAKgb,EAAUw7B,EAAQi8N,EAAWpwJ,KAG/CjuH,EAAAA,GAAAA,MAACsjR,GAAc,CAAA/rR,SAAA,EACXL,EAAAA,GAAAA,KAACqsR,GAAwB,CAACz+Q,IAAKk/Q,KAC/B9sR,EAAAA,GAAAA,KAACssR,GAAwB,CAACvhO,YAAa3sD,EAAM2sD,YACnBr2C,IAAKtW,EAAMsW,IACXw2C,OAAQ9sD,EAAM8sD,OACd6rE,eAAgBA,KAC1C/2H,EAAAA,GAAAA,KAAC0sR,GAAmB,CAAC3hO,YAAa3sD,EAAM2sD,eACxC/qD,EAAAA,GAAAA,KAAC4sR,GAAmC,CAAC7hO,YAAa3sD,EAAM2sD,gBAC3C,I,UCvEzB,MAAMoiO,IAAoC1kQ,EAAAA,GAAAA,IAASxqB,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0HAStCkvR,GAA8BrvR,GAAAA,GAAOiB,IAAGoC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,2EAGpCivR,ICGJE,IAAkFxtR,EAAAA,GAAAA,KAAUzB,IAErG,MAAMkvR,EAAelvR,EAAM2sD,YAAYgB,YAAc3tD,EAAM2sD,YAAYwiO,iBAAmBnvR,EAAM2sD,YAAYx/C,SAE5G,OACIzC,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,IACfu3Q,IAAgBttR,EAAAA,GAAAA,KAACotR,GAA2B,KAC7CptR,EAAAA,GAAAA,KAACmsR,GAA8B,CAAC/iR,MAAO,CAAC2D,QAASugR,EAAe,OAAS,SAAUrtR,UAAS,uBAAAC,OAAyB9B,EAAMmV,SAAS8B,UAAWhV,UAC3IL,EAAAA,GAAAA,KAAC6sR,GAAoB,CAAC9hO,YAAa3sD,EAAM2sD,YACnBr2C,IAAKtW,EAAMmV,SAASi8E,cACpB9/D,SAAUtxB,EAAMsxB,SAChBy3P,UAAWZ,GAAce,YACzBp8N,OAAQ9sD,EAAMmV,SAAS67E,gBAEjDpvF,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,MACjB,I,aC/BX,MAAMy3Q,IAAmC/kQ,EAAAA,GAAAA,IAASxqB,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4SAkBrCuvR,GAAsB1vR,GAAAA,GAAOiB,IAAGoC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,uKAazCE,GACAA,EAAMsvR,oBACFvsR,EAAAA,GAAAA,IAAGe,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,kGACYsvR,GACTpvR,EAAMuvR,4BACNvvR,EAAMwvR,sBAEZ,O,OCtCD,MAAMC,GAA8B9vR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mKAOnCE,GAASA,EAAMsoJ,UAAY,UAAY,W,OCPlD,MAAMonI,GAAqB/vR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,yiBCO/B6vR,IAAoEluR,EAAAA,GAAAA,KAAUzB,IAGnF4B,EAAAA,GAAAA,KAAC6tR,GAA2B,CAACnnI,UAAWtoJ,EAAM6lB,KAAK5jB,UAC/CL,EAAAA,GAAAA,KAAC8tR,GAAkB,Q,OCXxB,MAAME,GAAuCjwR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6F,OCAvD,MAAM+vR,GAAuClwR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+CCSjDgwR,IAAsEruR,EAAAA,GAAAA,KAAUzB,IACzF,MACMyoL,GADW13K,EAAAA,GAAAA,KAC0B46B,YAAYm7I,iBAAiB2B,0BAExE,OACI/9K,EAAAA,GAAAA,MAAC2kR,GAAmB,CAChBC,mBAAoB7mG,EAA0BC,4BAC9C8mG,qBAAsB/mG,EAA0B+mG,qBAChDD,4BAA6B9mG,EAA0B8mG,4BAA4BttR,SAAA,EACnFL,EAAAA,GAAAA,KAACiuR,GAAoC,CAAA5tR,SAChCjC,EAAMiC,YAGXL,EAAAA,GAAAA,KAACguR,GAAoC,CAAA3tR,UACjCL,EAAAA,GAAAA,KAAC+tR,GAAwB,CAAC9pQ,KAAM7lB,EAAM+vR,4BAGxB,ICxBjBC,IAAgEvuR,EAAAA,GAAAA,KAAUzB,IAG/E4B,EAAAA,GAAAA,KAACwhD,GAAAA,GAAgB,CAAC6kD,UAAU,SAASj9F,MAAO,CAACzH,OAAQ,QAAQtB,SACxDjC,EAAMiC,a,OCLZ,MAAMguR,GAA4BtwR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qPAW7C6F,GAAAA,EAAQC,IAAI2jD,OAAO89C,cAAcvhG,S,OCZhC,MAAMoqR,GAA+BvwR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gOAIzCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO4B,UAAUxK,UAAU,IAG9CmD,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWyS,UAAU,I,OCP9C,MAAMq9Q,GAA6BxwR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mI,OCA7C,MAAMswR,GAAyBzwR,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iF,gBCYjD,MAAMiV,IAAoEtT,EAAAA,GAAAA,KAAUzB,IAEhF,MAAOqwR,EAASC,GAAcpiR,GAAAA,SAAelO,EAAMqd,MAAMwlH,eAAer9F,QAAQxlC,EAAMiX,WAAa,GAe7Fu4K,EAAiBxvL,EAAMI,MAAMuN,aAAaC,MAAM8qG,aAItD,OACIhuG,EAAAA,GAAAA,MAACylR,GAA0B,CAAC5mR,QAlBTgnR,KACfF,GACArwR,EAAMqd,MAAMmnH,gBAAgBxkI,EAAMiX,UAClCjX,EAAMwwR,uBAENxwR,EAAMqd,MAAMinH,SAAStkI,EAAMiX,UAC3BjX,EAAMywR,cAAcC,4BACpB1wR,EAAM2wR,cAGVL,GAAYM,IAAcA,GAAS,EAQkB/uR,UAHtC,uBAAAC,OAA6BuuR,EAAU,SAAW,SAGYpuR,SAAA,EACrEL,EAAAA,GAAAA,KAAC4tL,EAAc,CAAC39E,WAAYw+K,EAAS7nR,SAAUC,GAAAA,EAAY6F,GAAI3F,KAAM,MACrE/G,EAAAA,GAAAA,KAACwuR,GAAsB,CAAAnuR,SAClBjC,EAAMqd,MAAMonH,iCAAiCzkI,EAAMiX,UAAY6E,OAAOu0Q,OAEtD,IAIxBQ,IAA0Bt3Q,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,QAAS,gBAAiB,U,OC1CvF,MAAM+7Q,GAA0BnxR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mMACtCE,GAASA,EAAMI,MAAM6J,OAAO8mR,cCK1BC,IAAgDvvR,EAAAA,GAAAA,KAAS,KAClE,MAAMiM,GAAWqD,EAAAA,GAAAA,KACX+hE,EAAQplE,EAASkE,KAAKihE,YAAYC,MAElCo/B,EAAcxkG,EAAStN,MAAMuN,aAAaC,MAAMgrG,YAChDjG,EAAejlG,EAAStN,MAAMuN,aAAaC,MAAMirG,aAMvD,OACIj3G,EAAAA,GAAAA,KAACkvR,GAAuB,CAACvnR,QALT0nR,KAChBn+M,EAAMO,QAAQ,EAIgCpxE,SACzC6wE,EAAMC,SAAUnxE,EAAAA,GAAAA,KAAC+wG,EAAY,CAACnqG,SAAUC,GAAAA,EAAY6F,GAAI3F,KAAM,MAAS/G,EAAAA,GAAAA,KAACswG,EAAW,CAAC1pG,SAAUC,GAAAA,EAAY6F,GAAI3F,KAAM,MAC/F,I,OCrB3B,MAAMuoR,GAAmCvxR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6E,OCAnD,MAAMqxR,GAAoCxxR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sLCsB9CsxR,IAA2E3vR,EAAAA,GAAAA,KAAUzB,IAC9F,MAAM0N,GAAWqD,EAAAA,GAAAA,KACX6E,EAAYlI,EAAS0N,eAAeqC,aAAazd,EAAMmV,SAAS8B,UAiBtE,OACIvM,EAAAA,GAAAA,MAACulR,GAAyB,CAAAhuR,SAAA,EACtByI,EAAAA,GAAAA,MAACwmR,GAAgC,CAAAjvR,SAAA,CAlBhB+W,MAAO,IAADq4Q,EAAAC,EAE3B,IAAI3mR,GAAsB,QAAd0mR,EAAArxR,EAAMmV,gBAAQ,IAAAk8Q,OAAA,EAAdA,EAAgB1mR,QAAS,OAMrC,OAJa,OAATiL,QAAS,IAATA,GAAe,QAAN07Q,EAAT17Q,EAAW6C,YAAI,IAAA64Q,OAAN,EAATA,EAAiBlvR,QAAS,IAC1BuI,EAAQiL,EAAU6C,OAIlB7W,EAAAA,GAAAA,KAACsuR,GAA4B,CAACruR,WAAWG,EAAAA,GAAAA,IAAQ,oCAAoCC,SAChF0I,GAC0B,EAQ1BqO,GACAhZ,EAAMuuQ,eACP3sQ,EAAAA,GAAAA,KAAA,OAAAK,UACIL,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACH9F,OAAQ,kBACRoG,OAAO,UACPK,QAASvJ,EAAMuxR,gBACfloR,YAAY,IACZ1F,WAAW,EAAM1B,SAChByL,EAASoK,YAAYC,UAAU,oBAI5CrN,EAAAA,GAAAA,MAACymR,GAAiC,CAAAlvR,SAAA,EAC9BL,EAAAA,GAAAA,KAACovR,GAA+B,KAChCpvR,EAAAA,GAAAA,KAACivR,GAAuB,CAAC55Q,SAAUjX,EAAMmV,SAAS8B,SAAU05Q,WAAY3wR,EAAM2wR,WAAYH,mBAAoBxwR,EAAMwwR,0BAEhG,I,+BC5D7B,MCDMgB,GDC0C7xR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gGAEpDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO0C,aAAatL,UAAU,I,OEHvD,MCAMowR,GDAmC9xR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4H,OEAnD,MCAM4xR,GDA8C/xR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8F,OEA9D,MCAM6xR,GDA0ChyR,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iDACvDe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO0C,aAAatL,UAAU,IEc/CuwR,IAA6EnwR,EAAAA,GAAAA,KAAUzB,IAChG,MAAM0N,GAAWqD,EAAAA,GAAAA,KACX6E,EAAYlI,EAAS0N,eAAeqC,aAAazd,EAAMmV,SAAS8B,UAahEo+D,EAAmBA,KACrB,IAAIhF,EACAC,EAUJ,OARIrpE,EAAAA,MAAMkP,kBAA2B,OAATP,QAAS,IAATA,OAAS,EAATA,EAAW4/D,SAAWvuE,EAAAA,MAAMkP,kBAA2B,OAATP,QAAS,IAATA,OAAS,EAATA,EAAW6/D,SACjFpF,EAASrwE,EAAMmV,SAASk7D,OACxBC,EAAStwE,EAAMmV,SAASm7D,SAExBD,EAASz6D,EAAU4/D,OACnBlF,EAAS16D,EAAU6/D,SAInB7zE,EAAAA,GAAAA,KAAC4vR,GAAgC,CAAAvvR,SAC5ByL,EAASwJ,SAASk5D,gBAAgBC,EAAQC,IACZ,EAarCz5D,EAAiBA,IACd7W,EAAMmV,SAAS+7C,YAKhBxmD,EAAAA,GAAAA,MAACgnR,GAAoC,CAAAzvR,SAAA,EACjCL,EAAAA,GAAAA,KAAA,QAAAK,SACKyL,EAASoK,YAAYC,UAAU,cAEpCrN,EAAAA,GAAAA,MAACinR,GAAgC,CAAA1vR,SAAA,EAC7BL,EAAAA,GAAAA,KAACsiC,GAAAA,EAAoB,CAACjtB,SAAUjX,EAAMmV,SAAS8B,WAnBtDjX,EAAMmV,SAASw4E,cAKZ/rF,EAAAA,GAAAA,KAAC8U,GAAAA,EAAmB,CAACuJ,qBAAmB,EAACrK,UAAWA,IAJjD,WASA,KAgBf,OACIlL,EAAAA,GAAAA,MAAC+mR,GAAyB,CAAAxvR,SAAA,CA3DD2zE,MACzB,OAAQ51E,EAAM2L,MACV,IAAK,OACD,OAAO0pE,IACX,IAAK,UACD,OAAOx+D,IACX,QACI,OAAO,KACf,EAoDK++D,IACDh0E,EAAAA,GAAAA,KAAC8U,GAAAA,EAAmB,CAACuJ,qBAAmB,EAACrK,UAAWA,MAC5B,IC9DvBi8Q,IAAsEpwR,EAAAA,GAAAA,KAAUzB,IAErF0K,EAAAA,GAAAA,MAAColR,GAAyB,CAACC,sBAAuB/vR,EAAM2sD,YAAYmlO,YAAY7vR,SAAA,EAC5EL,EAAAA,GAAAA,KAACouR,GAAgC,CAAA/tR,UAC7BL,EAAAA,GAAAA,KAACqtR,GAA+B,CAAC95Q,SAAUnV,EAAMmV,SAAUw3C,YAAa3sD,EAAM2sD,YAAar7B,SAAUtxB,EAAMsxB,cAE/G1vB,EAAAA,GAAAA,KAACwvR,GAA+B,CAC5Bj8Q,SAAUnV,EAAMmV,SAChBo8Q,gBAAiBvxR,EAAMuxR,gBACvBZ,WAAY3wR,EAAM2wR,WAClBH,mBAAoBxwR,EAAMwwR,mBAC1BjiB,eAAe3sQ,EAAAA,GAAAA,KAACgwR,GAA+B,CAACz8Q,SAAUnV,EAAMmV,SAAUxJ,KAAM,gBCrBzF,MAAMomR,WAAqC9E,GAE9Ch4Q,WAAAA,CAAYE,EAAoBzH,GAC5B4M,MAAMnF,EAAUgzQ,GAAce,YAAax7Q,EAC/C,CAEUggR,iBAAAA,CAAkB7jK,EAAsCmoK,GAC9D,OACIpwR,EAAAA,GAAAA,KAACiwR,GAAyB,CAEtB18Q,SAAUjT,KAAKiT,SACfw3C,YAAak9D,EAAQl9D,YACrBr7B,SAAUu4F,EAAQ09D,cAClBgqG,gBAAiBrvR,KAAKirR,UACtBwD,WAAYzuR,KAAKmrR,YACjBmD,mBAAoBtuR,KAAKqrR,qBANpByE,EASjB,ECvBG,MAAMC,WAAkC1J,GACjCM,wBAAAA,CAAyB1zQ,GAC/B,OAAO,IAAI48Q,GAA6B58Q,EAAUjT,KAAKwL,SAC3D,E,mBCNG,MAAMwkR,GAAgCvyR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iN,OCAhD,MAAMqyR,GAAkCxyR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+H,UCAzD,MAAMsyR,IAAqC/nQ,EAAAA,GAAAA,IAASxqB,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qIAYvCuyR,GAA+B1yR,GAAAA,GAAOiB,IAAGoC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,+CACrCsyR,ICOJE,IAAuE7wR,EAAAA,GAAAA,KAAUzB,IAC1F,MAAM0N,GAAWqD,EAAAA,GAAAA,KAoBXm+Q,EAAelvR,EAAM2sD,YAAYgB,YAAc3tD,EAAM2sD,YAAYx/C,SAEvE,OACIzC,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,IACfu3Q,IAAgBttR,EAAAA,GAAAA,KAACotR,GAA2B,KAC7CtkR,EAAAA,GAAAA,MAACqjR,GAA8B,CAAC/iR,MAAO,CAAC2D,QAASugR,EAAe,OAAS,SAASjtR,SAAA,EAC9EL,EAAAA,GAAAA,KAAC6sR,GAAoB,CAAC9hO,YAAa3sD,EAAM2sD,YACnBr2C,IAAKtW,EAAMmV,SAASk5E,SACpB/8D,SAAUtxB,EAAMsxB,SAChBy3P,UAAWZ,GAAc2B,WACzBh9N,OAAQ9sD,EAAMmV,SAAS67E,aA3BlCuhM,MACnB,MAAMh/M,EAAW,OACXi/M,EAAkB9kR,EAAStN,MAAMuN,aAAaC,MAAMonG,gBAE1D,OACIpzG,EAAAA,GAAAA,KAACitD,GAAAA,EAAmB,CAACC,aAAW,EAAC9jD,MAAO,CAAC2e,SAAU,WAAY5X,IAAKwhE,EAAU5H,KAAM4H,GAAUtxE,UAC1FyI,EAAAA,GAAAA,MAACwnR,GAA6B,CAAAjwR,SAAA,EAC1BL,EAAAA,GAAAA,KAACywR,GAA4B,CAAApwR,UACzBL,EAAAA,GAAAA,KAAC4wR,EAAe,CAAC7pR,KAAM,QAE3B/G,EAAAA,GAAAA,KAACuwR,GAA+B,CAAAlwR,SAAEyL,EAASoK,YAAYC,UAAU,qCAEnD,EAgBjBw6Q,OAEL3wR,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,MACjB,ICvCE86Q,IAAoEhxR,EAAAA,GAAAA,KAAUzB,IAGnF0K,EAAAA,GAAAA,MAAColR,GAAyB,CAACC,sBAAuB/vR,EAAM2sD,YAAYmlO,YAAY7vR,SAAA,EAC5EL,EAAAA,GAAAA,KAACouR,GAAgC,CAAA/tR,UAC7BL,EAAAA,GAAAA,KAAC0wR,GAA8B,CAACn9Q,SAAUnV,EAAMmV,SAAUw3C,YAAa3sD,EAAM2sD,YAAar7B,SAAUtxB,EAAMsxB,cAE9G1vB,EAAAA,GAAAA,KAACwvR,GAA+B,CAC5Bj8Q,SAAUnV,EAAMmV,SAChBo8Q,gBAAiBvxR,EAAMuxR,gBACvBZ,WAAY3wR,EAAM2wR,WAClBH,mBAAoBxwR,EAAMwwR,mBAC1BjiB,eAAe3sQ,EAAAA,GAAAA,KAACgwR,GAA+B,CAACz8Q,SAAUnV,EAAMmV,SAAUxJ,KAAM,gBCpBzF,MAAM+mR,WAAoCzF,GAE7Ch4Q,WAAAA,CAAYE,EAAoBzH,GAC5B4M,MAAMnF,EAAUgzQ,GAAc2B,WAAYp8Q,EAC9C,CAEUggR,iBAAAA,CAAkB7jK,EAAsCmoK,GAC9D,OACIpwR,EAAAA,GAAAA,KAAC6wR,GAAwB,CAErBt9Q,SAAUjT,KAAKiT,SACfw3C,YAAak9D,EAAQl9D,YACrBr7B,SAAUu4F,EAAQ09D,cAClBgqG,gBAAiBrvR,KAAKirR,UACtBwD,WAAYzuR,KAAKmrR,YACjBmD,mBAAoBtuR,KAAKqrR,qBANpByE,EASjB,ECxBG,MAAMW,WAAsCpK,GACrCM,wBAAAA,CAAyB1zQ,GAC/B,OAAO,IAAIu9Q,GAA4Bv9Q,EAAUjT,KAAKwL,SAC1D,E,OCNG,MAAMklR,GAAoBjzR,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+ECS3C,IAAI+yR,GAAiB,EACd,MAAMC,IAAkErxR,EAAAA,GAAAA,KAAS,KACpF,MACMsxR,GADWhiR,EAAAA,GAAAA,KAC8Bob,cAAcC,KAAK7a,OAAO+0K,iBAAiB0sG,mBAG1F,GAAiC,OAA7BD,QAA6B,IAA7BA,IAAAA,EAA+B3wR,OAC/B,OAAO,KAGX,MACMyhB,EAA0DkvQ,EADjCF,GAAiBE,EAA8B3wR,QAGxE6wR,EAAwBJ,KAE9B,OAAG5rR,EAAAA,MAAMkP,kBAAkB0N,GAChB,MAGJjiB,EAAAA,GAAAA,KAACgxR,GAAiB,CAAA3wR,UACrBL,EAAAA,GAAAA,KAAA,OAAKoJ,MAAO,CAACkoR,aAAa,EAAGC,WAAW,GAAGlxR,UACxCL,EAAAA,GAAAA,KAAC0a,GAAAA,EAAe,CACCza,UAAW,yBACX6a,iBAAiB,EACjBF,YAAaqH,EAAarH,YAC1BD,WAAYsH,EAAatH,WACzBE,yBAA0BoH,EAAapH,0BAAyB,cAAA3a,OAL7CmxR,OAQvB,IChCjB,MAAMG,GACTn+Q,WAAAA,CAA6Bo+Q,GAAqB,KAArBA,WAAAA,EAAkB,KAe/C1lO,WAAY,CAbZ,CAEAkgO,kBAAAA,CAAmBhkK,GAEnB,CACA8jK,gBAAAA,CAAiB9jK,GAEjB,CAEA,aAAImoK,GACA,OAAO9vR,KAAKmxR,UAChB,CAIA1xR,MAAAA,GACI,OAAOC,EAAAA,GAAAA,KAACkxR,GAAuB,GAAM5wR,KAAK8vR,UAC9C,ECvBG,MAAMsB,GAETr+Q,WAAAA,CAA6BvH,GAA4B,KAA5BA,SAAAA,CAC7B,CAEAg7Q,aAAAA,CAAcC,GACV,OAAGA,EAAoBvmR,OAAS,EACrB,IACAumR,EACH,IAAIyK,GAAuBlxR,KAAKwL,SAASu1C,MAAMC,YAIhDylO,CAEX,ECXG,MAAM4K,GACTt+Q,WAAAA,CAA6BvH,EACjB8lR,EACAC,EACAC,GAAkC,KAHjBhmR,SAAAA,EAAiC,KAuB7CurF,OAA4B,GAlBzCu6L,EAAkB1lO,SAAQ06N,IACtB,OAAQA,EAAWt9P,UACf,IAAK,cACDhpB,KAAK+2F,OAAOp8E,KAAK,IAAIo1Q,GAA0BzJ,EAAYiL,EAAsB/lR,IACjF,MACJ,IAAK,aACDxL,KAAK+2F,OAAOp8E,KAAK,IAAI81Q,GAA8BnK,EAAYkL,EAAqBhmR,IACpF,MACJ,IAAK,SACDxL,KAAK+2F,OAAOp8E,KAAK,IAAIy2Q,GAAqB5lR,IAC1C,MACJ,QACIxL,KAAKwL,SAAS2L,OAAOxI,MAAM,oCAAD/O,OAAqC0mR,EAAWt9P,WAElF,GAER,CAIAyoQ,eAAAA,GACI,IAAI/7N,EAA2B,GAC3Bg8N,GAAiB,EAErB,EAAG,CAEC,IAAIC,EAAiC,GAErC3xR,KAAK+2F,OAAOnrC,SAAQg5C,IAChB+sL,EAAe/sL,EAAK4hL,cAAcmL,EAAa,IAGnDj8N,EAAS,IAAMA,KACRi8N,GAGPD,EAAiBC,EAAazxR,OAAS,CAE3C,OAASwxR,GAET,OAAOh8N,CACX,E,OChDG,ICNKk8N,GDMUC,IAA0B/+Q,GAAzC,MACHC,WAAAA,CAA6Bwc,EACEuiQ,GAAqC,KADvCviQ,GAAAA,EAAU,KACRuiQ,WAAAA,GAC3B94Q,EAAAA,EAAAA,IAAehZ,KAEnB,CAOA,OAAI8a,GACA,MAAM,cAANlb,OAAqBI,KAAKuvB,GAC9B,CAGA,iBAAI81J,GACA,OAAgC,IAAzBrlL,KAAKulL,eAChB,CAGA,aACIzmB,GACA,MAAMizH,EAAe/xR,KAAK8xR,WAAWE,kBAAkBhyR,MACjDiyR,EAAoBjyR,KAAK8xR,WAAWI,sBAC1C,IAAIC,EAAgCnyR,KAAK8xR,WAAWM,oBAOpD,OANGH,EAAoBjyR,KAAK8xR,WAAWxsG,aAAe6sG,IAElDA,GAAiCA,GAAkCnyR,KAAK8xR,WAAWxsG,aAAe2sG,IAI/F57Q,KAAK09B,IAAIg+O,EAAcE,GAAqBF,EAAeI,GACtE,CAEA,mBACI5sG,GACA,OAAOvlL,KAAK8+J,UAAY9+J,KAAK8xR,WAAWI,qBAC5C,IACH/1Q,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAlBIo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,aAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAcRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,mBAAAtJ,GAAAsJ,WAAAtJ,IEnCN,MAAMu/Q,WAAyCR,GAElD9+Q,WAAAA,CAAYwc,EACAuiQ,EACiBroP,GACzBrxB,MAAMmX,EAAIuiQ,GAAY,KADGroP,YAAAA,EAA+B,KAK5CghB,iBAAW,EAHvBzqD,KAAKyqD,YAAchhB,EAAY6gB,mBACnC,CAIA,aAAIk9N,GACA,OAAOxnR,KAAK8+J,UAAY9+J,KAAKypC,YAAY6oP,gBAAgBpyR,MAC7D,CAEQqyR,mBAAAA,CAAuBt6Q,GAC3B,MAAMswC,EAAWvoD,KAAKypC,YAAY6oP,gBAAgBtyR,KAAKwnR,WACvD,OAAGj/N,EACQtwC,EAAOswC,IAGdvoD,KAAKypC,YAAYtyB,OAAOxI,MAAM,uCAAD/O,OAAwCI,KAAKwnR,UAAS,wBAAA5nR,OAAuBI,KAAKypC,YAAY6oP,gBAAgBpyR,SACpI,KAEf,CAEAulL,kBAAAA,GACI,OAAOzlL,KAAKuyR,qBAAoBhqO,GAAYA,EAAS9oD,OAAOO,OAChE,CAEA2rR,kBAAAA,CAAmBjC,GACf1pR,KAAKuyR,qBAAoBhqO,GAAYA,EAASojO,mBAAmB,CAC7DjC,eAAgBA,KAExB,CAEA+B,gBAAAA,CAAiB/B,GACb1pR,KAAKuyR,qBAAoBhqO,GAAYA,EAASkjO,iBAAiB,CAC3D/B,eAAgBA,KAExB,E,cD3CH,SAJWkI,GAAAA,EAAAA,EAAkB,wBAAlBA,EAAAA,EAAkB,qBAAlBA,EAAAA,EAAkB,qBAI7B,CAJWA,KAAAA,GAAkB,KECvB,IAAMY,IAA8B36Q,GAMtCC,EAAAA,GAAWxK,IAAGwF,GANZ,MASHC,WAAAA,CAAY0/Q,GAA+C,KARnDC,kBAAY,OACbrF,iCAA2B,OAC3BC,0BAAoB,OACnBqF,qBAAe,GAAAp6Q,EAAAA,EAAAA,GAAA,mCAAAC,GAAA,MAMnBxY,KAAK0yR,aAAeD,EAAsBC,aAC1C1yR,KAAKqtR,4BAA8BoF,EAAsBpF,4BACzDrtR,KAAKstR,qBAAuBmF,EAAsBnF,sBAClDt0Q,EAAAA,EAAAA,IAAehZ,KACnB,CAGO0nL,oBAAAA,GACH1nL,KAAK2yR,gBAAkBxoP,YAAW,KAC9BnqC,KAAKwmL,6BAA8B,CAAI,GACxCxmL,KAAK0yR,aACZ,CAGOjsG,mBAAAA,GACHzmL,KAAKwmL,6BAA8B,EACnCxmL,KAAK4yR,cACT,CAEQA,YAAAA,GACA5yR,KAAK2yR,iBACL1oP,aAAajqC,KAAK2yR,gBAG1B,GACHn6Q,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,+BAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBA5BiD,CAAM,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,wBASlDnE,EAAAA,IAAMwE,OAAAC,yBAAA5J,GAAAsJ,UAAA,wBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAONnE,EAAAA,IAAMwE,OAAAC,yBAAA5J,GAAAsJ,UAAA,uBAAAtJ,GAAAsJ,WAAAtJ,I,aCnBJ,IAAM+/Q,IAAqBh7Q,GAyD7BC,EAAAA,GAAWxK,IAAGwF,GAzDZ,MACHC,WAAAA,CAA6B+/Q,EAAoCzsR,GAAmD,KAAvFysR,WAAAA,EAAkC,KAe9C/qF,cAAQ,OAChBxhB,+BAAyB,GAAAhuK,EAAAA,EAAAA,GAAA,0BAAAC,GAAA,MAf9BxY,KAAK+nM,UAAQ7iM,EAAAA,EAAAA,GAAA,CACTitR,8BAA+B,EAC/BM,sBAAuB,CACnBnF,qBAAsBjnR,EAAQosR,sBAAsBnF,qBACpDD,4BAA6BhnR,EAAQosR,sBAAsBpF,4BAC3DqF,aAAcrsR,EAAQosR,sBAAsBC,eAE7CrsR,GAEPrG,KAAKumL,0BAA4B,IAAIisG,GAA+BxyR,KAAK+nM,SAAS0qF,wBAClFz5Q,EAAAA,EAAAA,IAAehZ,KACnB,CAMAkyR,mBAAAA,GACI,OAAOlyR,KAAK8yR,WAAWZ,qBAC3B,CAEQa,mBAAAA,CAAoB1vP,GACxBrjC,KAAK8yR,WAAWC,oBAAoB1vP,EACxC,CAEAqkP,aAAAA,GACI,OAAO1nR,KAAK8yR,WAAWpL,eAC3B,CAEA,gBAAIpiG,GACA,OAAOtlL,KAAK8yR,WAAWE,iBAC3B,CAGA,uBAAIZ,GACA,OAAO/7Q,KAAKuK,IAAI5gB,KAAK+nM,SAASoqF,8BAA+B97Q,KAAK8jB,MAAMn6B,KAAK0nR,gBAAgB,GACjG,CAGAsK,iBAAAA,CAAkBntG,GACd,OAAO7kL,KAAK2mL,OAAOh8F,WAAU+zB,GAAKA,IAAMmmE,GAC5C,CAEQouG,0BAAAA,GACJ,MAAMC,EAA0D,EAA9ClzR,KAAK+nM,SAASoqF,8BAC1Bz8N,EAAwC,GAC9C,IAAI,IAAIpwD,EAAI,EAAGA,GAAK4tR,EAAW5tR,IAC3BowD,EAAO/6C,KAAK3a,KAAK8yR,WAAWK,sBAAsB7tR,EAAEnG,WAAYa,OAGpE,OAAO01D,CACX,CAQA,UACIixH,GAEA,MAAMysG,EAAapzR,KAAK0nR,gBAExB,OAAkB,IAAf0L,EACQ,IAGPpzR,KAAKqzR,qBACLrzR,KAAKqzR,mBAAqBrzR,KAAKizR,8BAGhCG,EAAapzR,KAAKqzR,mBAAmBnzR,OAC7BF,KAAKqzR,mBAAmB1yQ,MAAM,EAAGyyQ,GAGtCpzR,KAAKqzR,mBACf,CAEA,yBAAYC,GACR,OAAOtzR,KAAK2mL,OAAOhgD,MAAKjoB,GAAKA,EAAE2mE,eACnC,CAEAl7B,QAAAA,GACOnqJ,KAAKkyR,sBAAwBlyR,KAAKslL,eAEjCtlL,KAAKszR,sBAAsB3H,mBAAmBiG,GAAmB2B,UAEjE3pQ,EAAAA,EAAAA,KAAY,KACR5pB,KAAK+yR,oBAAoB/yR,KAAKkyR,sBAAwB,GACnDlyR,KAAKkyR,sBAAwBlyR,KAAKoyR,qBAAuBpyR,KAAKkyR,uBAAyBlyR,KAAKslL,aAAetlL,KAAKoyR,qBAC/GpyR,KAAKwzR,uBAAuB,EAAGxzR,KAAK2mL,OAAOzmL,OAAS,GAGxDF,KAAKszR,sBAAsB7H,iBAAiBmG,GAAmB2B,QAAQ,IAInF,CAEAtpI,YAAAA,GACOjqJ,KAAKkyR,sBAAwB,IAC5BlyR,KAAKszR,sBAAsB3H,mBAAmBiG,GAAmB6B,WACjE7pQ,EAAAA,EAAAA,KAAY,KACR5pB,KAAK+yR,oBAAoB/yR,KAAKkyR,sBAAwB,GACnDlyR,KAAKkyR,uBAAyBlyR,KAAKoyR,qBAAuBpyR,KAAKkyR,sBAAwBlyR,KAAKslL,aAAetlL,KAAKoyR,qBAC/GpyR,KAAKwzR,uBAAuBxzR,KAAK2mL,OAAOzmL,OAAS,EAAG,GAExDF,KAAKszR,sBAAsB7H,iBAAiBmG,GAAmB6B,SAAS,IAGpF,CAEQD,sBAAAA,CAAuBnjR,EAAcqjR,GAGzC,MAAMC,EAAS,IAAI3zR,KAAKqzR,oBAClBO,EAAQ5zR,KAAK2mL,OAAOt2K,GAC1BsjR,EAAOtzP,OAAOhwB,EAAM,GACpBsjR,EAAOtzP,OAAOqzP,EAAI,EAAGE,GACrB5zR,KAAKqzR,mBAAqBM,CAE9B,GACHn7Q,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAnEsE,IAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,UAGtEo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,UAAAtJ,GAAAsJ,WAAAtJ,I,aCzDN,IAAM+gR,IAAiBh8Q,GA2CzBC,EAAAA,GAAWxK,IAAGwF,GA3CZ,MACHC,WAAAA,CAAoB02B,GAAkC,KAAlCA,YAAAA,GAA+BlxB,EAAAA,EAAAA,GAAA,0BAAAC,GAAA,WAgF3Cs7Q,kBAAoB,IAAIh1G,GAAAA,GAA6B,IAAM,IAAI+zG,GAAsB7yR,KAAM,CAACyyR,sBAAuBzyR,KAAKypC,YAAY5nB,OAAOkyQ,qBA9E/I/6Q,EAAAA,EAAAA,IAAehZ,OAEfyP,EAAAA,EAAAA,KAAS,IAAM,CAACzP,KAAKypC,YAAYqkK,qBAAsB9tM,KAAKypC,YAAY6oP,mBACpE,KAEmD,IAA5CtyR,KAAKypC,YAAY6oP,gBAAgBpyR,OAChCF,KAAKg0R,mBAAqB,EAE1Bh0R,KAAKg0R,mBAAqBh0R,KAAKi0R,mCAAqCj0R,KAAKypC,YAAY6oP,gBAAgBpyR,MACzG,GAGD,CACCgc,iBAAiB,GAE7B,CAEQ+3Q,gCAAAA,GAA4C,IAADC,EAE/C,MAAMvM,EAAgB3nR,KAAKypC,YAAYqkK,qBACvC,IAAK65E,EACD,OAAO,EAGX,MAAMwM,EAAcn0R,KAAKypC,YAAY2qP,iBAE/Bv3N,EAAMC,KAAKD,MAEjB,OAAIs3N,EAAYE,8BAAgCx3N,EAAMs3N,EAAYE,6BAA+B,OAE7FF,EAAYG,mBAAqB,CAAC,EAClCH,EAAYE,6BAA+Bx3N,EAC3C78D,KAAKypC,YAAY8qP,eAAeJ,GACzB,GAGkE,QAA7ED,EAAOl0R,KAAKypC,YAAY2qP,iBAAiBE,mBAAmB3M,EAAcp4P,WAAG,IAAA2kQ,EAAAA,EAAI,CACrF,CAMAhC,mBAAAA,GACI,OAAOlyR,KAAKg0R,kBAChB,CAEAjB,mBAAAA,CAAoBjpR,IAChB8f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKg0R,mBAAqBlqR,CAAK,IAGnC,MAAM2V,EAASzf,KAAKypC,YAAYqkK,qBAChC,GAAIruL,EAAQ,CACR,MAAM00Q,EAAcn0R,KAAKypC,YAAY2qP,iBACrCD,EAAYG,mBAAmB70Q,EAAO8P,IAAMzlB,EAC5CqqR,EAAYE,6BAA+Bv3N,KAAKD,MAChD78D,KAAKypC,YAAY8qP,eAAeJ,EACpC,CAEJ,CAEAnB,eAAAA,GACI,OAAOp5Q,OAAO46Q,gBAElB,CAGA9M,aAAAA,GACI,OAAO1nR,KAAKypC,YAAY6oP,gBAAgBpyR,MAC5C,CAEAizR,qBAAAA,CAAsB5jQ,EAAYq1J,GAC9B,OAAO,IAAIytG,GAAiC9iQ,EACAq1J,EACA5kL,KAAKypC,YACrD,CAGA,oBAAIm7I,GACA,OAAO5kL,KAAK8zR,kBAAkBhqR,KAClC,GACH0O,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAzCwC,CAAE,IAAD1J,I,yBC7BnC,IChBK2hR,GDgBCC,IAAkB78Q,GA+B1BC,EAAAA,GAAWxK,IAAGyK,GAGdD,EAAAA,GAAWxK,IAAG0K,GAGdC,EAAAA,GAAOC,MAAKpF,GArCV,cAAiC4rE,EAAAA,EAEpC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAUHmpR,aAAO,GAAAp8Q,EAAAA,EAAAA,GAAA,iCAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,qCAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,oCAAAmM,GAAA,WA2GPkwQ,oBAAgD,GAAG,KAuH5DC,aAA6C,KA1OjD70R,KAAK40R,oBAAsB50R,KAAK80R,4BAChC90R,KAAK+0R,kBAEL/7Q,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK20R,QAAU,IAAId,GAAkB7zR,KACzC,CAIQg1R,qBAAAA,GACJ,OAAOh1R,KAAKwL,SAASuP,6BAA6B0uB,YAAYxuB,SAClE,CAEQg6Q,uBAAAA,GACJ,MAAiD,WAA1Cj1R,KAAKwL,SAASqI,OAAOmzC,MAAM05B,UACtC,CAEA,qBAAIh3C,GACA,OACK1pC,KAAKwL,SAAS+9B,UAAUtuB,WACzBjb,KAAKi1R,2BACLj1R,KAAKwL,SAASkE,KAAKC,cACnB3P,KAAKg1R,uBACb,CASOl6L,uCAAAA,GACH96F,KAAKk1R,8BAA+B,EACpCl1R,KAAKm1R,8BACT,CAKA,+BAAIC,GACA,OAAOp1R,KAAKk1R,4BAChB,CAEQG,gCAAAA,GACJ,OAAOr1R,KAAKwL,SAASoyC,aAAaijF,QAAQv+B,GAAAA,EAAiBgzL,uBAC/D,CAEQH,4BAAAA,GACJn1R,KAAKwL,SAASoyC,aAAa+pF,QAAQrlC,GAAAA,EAAiBgzL,wBAAwB,EAChF,CAEA,UAAWzzQ,GACP,OAAO7hB,KAAKwL,SAASye,cAAcC,KAAK7a,OAAO+wE,GAAAA,GACnD,CAEQgvK,aAAAA,CAAcxiI,EAAqB/C,GACvC,MAAMzuG,EAAWpb,KAAKwL,SAAS2P,MAAMC,SACrC,OAAOwxG,EAAU3+D,QAAO,CAACsvB,EAAag4M,KAClC,MAAMtiR,EAAWmI,EAASm6Q,GAI1B,OAHItiR,GAAY42G,EAAU52G,IACtBsqE,EAAY5iE,KAAK1H,GAEdsqE,CAAW,GACnB,GACP,CAGA,yBACYi4M,GAAqC,IAADC,EAC5C,IAAI7oK,EAAY5sH,KAAK01R,0BACqC,IAADC,EAAnB,QAAtCF,EAAIz1R,KAAK41R,qCAA6B,IAAAH,GAAlCA,EAAoC7mI,kBACpChiC,EAAY5sH,KAAKwL,SAASgsE,SAASy5D,UAAUrkB,EAAW,CACpDwkB,oBAAuD,QAApCukJ,EAAE31R,KAAK41R,qCAA6B,IAAAD,OAAA,EAAlCA,EAAoCnnI,kCAGjE,OAAOxuJ,KAAKovP,cAAcxiI,GAAW35G,GAAY9I,QAAQ8I,EAASi8E,gBACtE,CAEA,6BACY2mM,GAAyC,IAADC,EAChD,IAAIlpK,EAAY5sH,KAAK+1R,8BACyC,IAADC,EAAnB,QAA1CF,EAAI91R,KAAKi2R,yCAAiC,IAAAH,GAAtCA,EAAwClnI,kBACxChiC,EAAY5sH,KAAKwL,SAASgsE,SAASy5D,UAAUrkB,EAAW,CACpDwkB,oBAA2D,QAAxC4kJ,EAAEh2R,KAAKi2R,yCAAiC,IAAAD,OAAA,EAAtCA,EAAwCxnI,kCAGrE,OAAOxuJ,KAAKovP,cAAcxiI,GAAW35G,GAAY9I,QAAQ8I,EAASk5E,WACtE,CAEA,mBACIwkG,GACA,MAAO,IACA3wL,KAAKw1R,yBACLx1R,KAAK61R,0BAEhB,CAGQK,gBAAAA,CAAiBl9G,GACrB,MAAM71B,EAAmBnjJ,KAAKwL,SAASmmD,YAAYwxF,iBACnD,OAAO61B,EAAUv5J,QAAOg0I,GAAStpJ,QAAQg5I,EAAiBsQ,EAAM1+I,YACpE,CAGA,mBACIu9Q,GACA,MAAMkD,EAAwBx1R,KAAKk2R,iBAAiBl2R,KAAKw1R,uBACnDK,EAA4B71R,KAAKk2R,iBAAiBl2R,KAAK61R,2BAE7D,OADqB,IAAIxE,GAAmBrxR,KAAKwL,SAAUxL,KAAK6hB,OAAOs0Q,YAAaX,EAAuBK,GACvFpE,iBACxB,CAIA,sBAAIvuG,GACA,OAAOljL,KAAK40R,mBAChB,CAEA,wBACI9mF,GACA,OAAO9tM,KAAKkjL,mBAAmBv8C,MAAKojC,GAAKA,EAAE5sC,IAC/C,CAEQ23J,yBAAAA,GAAuD,IAADsB,EAAAC,EAC1D,MAAM9wH,EAAoD,QAAvB6wH,EAAc,QAAdC,EAAGr2R,KAAK6hB,cAAM,IAAAw0Q,OAAA,EAAXA,EAAa9wH,eAAO,IAAA6wH,EAAAA,EAAI,GAC9D,MAAO,CACH,IAAIhQ,GAAwBpmR,KAAKwL,SAAU,CAAC+jB,GAAI,SAAUvG,SAAU,SAAUovB,eAAgB,UAAWnxC,KAAM,2BAC5Gs+J,EAAQh1J,KAAKkP,GAAW,IAAI0mQ,GAAuBnmR,KAAKwL,SAAUiU,KAE7E,CAGQm2Q,2BAAAA,GAA+C,IAADU,EAClD,IAAI9nI,EAAiC,EACjCI,GAAkB,EAElBhoB,EAAwC,QAA9B0vJ,EAAGt2R,KAAK6hB,OAAOuiH,uBAAe,IAAAkyJ,OAAA,EAA3BA,EAA6BC,WAAUnxJ,GAAgBA,EAAaipB,cAAgB9I,GAAYixI,sBASjH,OARc,OAAV5vJ,QAAU,IAAVA,GAAAA,EAAY4nB,iCACZA,EAAiC5nB,EAAW4nB,gCAGlC,OAAV5nB,QAAU,IAAVA,GAAAA,EAAYgoB,kBACZA,EAAkBhoB,EAAWgoB,iBAG1B,CACHA,kBAAiBJ,iCAEzB,CAEQynI,+BAAAA,GAAmD,IAADQ,EACtD,IAAIjoI,EAAiC,EACjCI,GAAkB,EAElBhoB,EAAwC,QAA9B6vJ,EAAGz2R,KAAK6hB,OAAOuiH,uBAAe,IAAAqyJ,OAAA,EAA3BA,EAA6BF,WAAUnxJ,GAAgBA,EAAaipB,cAAgB9I,GAAYmxI,mBAC7GtxJ,EAAaipB,cAAgB9I,GAAY2S,oBAU7C,OARc,OAAVtxB,QAAU,IAAVA,GAAAA,EAAY4nB,iCACZA,EAAiC5nB,EAAW4nB,gCAGlC,OAAV5nB,QAAU,IAAVA,GAAAA,EAAYgoB,kBACZA,EAAkBhoB,EAAWgoB,iBAG1B,CACHA,kBAAiBJ,iCAEzB,CAEQumI,cAAAA,GAAwB,IAAD4B,EACA,QAA3BA,EAAA32R,KAAK6hB,OAAOuiH,uBAAe,IAAAuyJ,GAA3BA,EAA6B/qO,SAAQgrO,IACjC,OAAQA,EAAWvoI,aACf,KAAK9I,GAAYixI,oBACbx2R,KAAK01R,0BAA4BkB,EAAWr3Q,QAC5C,MACJ,KAAKgmI,GAAYmxI,kBACjB,KAAKnxI,GAAY2S,kBACbl4J,KAAK+1R,8BAAgCa,EAAWr3Q,QAMxD,GAER,CAEA45I,kBAAAA,CAAmB3V,GACf,IAAIqzI,EAAgC,KAiBpC,OAhBA72R,KAAK2wL,gBAAgBvrB,MAAKkrC,IACtB,MAAMwmF,EAA2B92R,KAAKwL,SAASmmD,YAAYuxF,kBAAkBotD,EAAYv7L,UACzF,IAAIgiR,GAAsB,EAW1B,OAVKhyR,EAAAA,MAAMkP,kBAAkB6iR,KACzBC,EAAsBD,EAAyB1xH,MAAK4xH,GAC5CA,IAAyBxzI,IACzBqzI,EAAYvmF,GACL,MAMZymF,CAAmB,IAGvBF,CACX,CAEAz9H,gBAAAA,CAAiB5V,GACTz+I,EAAAA,MAAMkP,kBAAkBuvI,GACxBxjJ,KAAKwL,SAASorB,SAASjc,KAAK,iBAE5B3a,KAAKwL,SAASorB,SAASjc,KAAK,yBAAD/a,OAA0B4jJ,GAE7D,CAEA,sBAAI0jC,GACA,OAAOlnL,KAAKo0R,iBAAiB6C,eACjC,CAEA,sBAAI/vG,CAAmBp9K,GAEnB9J,KAAKu0R,eAAe,CAChB0C,gBAAiBntR,GAEzB,CAEA,oBAAI86K,GACA,OAAO5kL,KAAK20R,QAAQ/vG,gBACxB,CAGAwvG,cAAAA,GAQI,OAPIp0R,KAAK60R,eACL70R,KAAK60R,cAAY3vR,EAAAA,EAAAA,GAAA,CACbovR,mBAAoB,CAAC,EACrB2C,iBAAiB,GACdj3R,KAAKwL,SAASoyC,aAAaijF,QAA+Bv+B,GAAAA,EAAiB74D,eAG/EzpC,KAAK60R,YAEhB,CACAN,cAAAA,CAAerqQ,GACXlqB,KAAK60R,cAAY3vR,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACVlF,KAAKo0R,kBACLlqQ,GAEPlqB,KAAKwL,SAASoyC,aAAaykF,QAAQ//B,GAAAA,EAAiB74D,YAAazpC,KAAK60R,aAC1E,CAEAvqO,iBAAAA,GACI,OAAOtqD,KAAKwL,SAAS0rR,MAAMC,4BAC/B,CAEA,UAAIhgR,GACA,OAAOnX,KAAKwL,SAAS2L,MACzB,CAEA6uK,sBAAAA,GACIhmL,KAAKwL,SAAS63E,IAAIqP,cAAc0oD,cACpC,GACH5iI,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,6BAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBA9OiD,EAAG,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iCAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBAGE,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,2CAAApE,IAAAyE,OAAAC,yBAAA5J,GAAAsJ,UAAA,2CAAAtJ,GAAAsJ,WAAAsI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gCAQnDtE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBACsCxc,KAAKq1R,kCAAmC,KAADl5Q,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,yBA8BvFo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,yBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,6BAWRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,6BAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAWRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,mBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAeRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,mBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,wBAcRo6E,EAAAA,IAAQ/5E,OAAAC,yBAAA5J,GAAAsJ,UAAA,wBAAAtJ,GAAAsJ,WAAAtJ,KCvIZ,SANW2hR,GAAAA,EAAAA,EAAgC,WAAhCA,EAAAA,EAAgC,+BAAhCA,EAAAA,EAAgC,8DAAhCA,EAAAA,EAAgC,sDAM3C,CANWA,KAAAA,GAAgC,KAQrC,MAAM2C,GACTrkR,WAAAA,CAA6BmX,GAAmC,KAAnCA,KAAAA,CAC7B,CAEA,qBAAImtQ,GACA,OAAOr3R,KAAKkqB,KAAKmtQ,iBACrB,CACA,iBAAIryB,GACA,OAAOhlQ,KAAKkqB,KAAK86O,aACrB,CAEA,yBAAIsyB,GAAsC,IAADC,EACrC,MAAMD,EAAuD,QAAlCC,EAAGv3R,KAAKkqB,KAAKotQ,6BAAqB,IAAAC,EAAAA,EAAI,EACjE,OAAGD,EAAwB,EAChB,IAAIx6N,KAA6B,IAAxBw6N,GAGb,IACX,CACA,mBAAIz/P,GACA,MAAM2/P,EAAYx3R,KAAKs3R,sBACvB,OAAGE,EACQh8P,EAAAA,SAASsY,iBAAiBgpB,KAAKD,MAAQ26N,EAAU5jP,WAGrD,IACX,CACA,oBAAIuxN,GACA,OAAOnlQ,KAAKkqB,KAAKi7O,gBACrB,CACA,oBAAIC,GACA,OAAOplQ,KAAKkqB,KAAKk7O,gBACrB,CAEA,6BAAIqyB,GACA,OAAGz3R,KAAKkqB,KAAKutQ,0BACF,IAAI36N,KAA2C,IAAtC98D,KAAKkqB,KAAKutQ,2BAGvB,IACX,E,2DCjDG,MAAMC,GACT3kR,WAAAA,CAA6BvH,GAAoC,KAApCA,SAAAA,CAE7B,CAEA,gBAAYmsR,GACR,OAAO33R,KAAKwL,SAAS6U,YAAYmZ,aACrC,CAGA,wBAAYo+P,GACR,OAAO53R,KAAKwL,SAASwJ,SAASgwE,YAClC,CAEA6yM,wBAAAA,CAAyBnpE,GACrB1uN,KAAKwL,SAASi7G,oBAAoB8jG,eAAe,CAC7CC,iBAAkBtvG,GAAAA,GAAoBkB,gBACtCquG,mBAAoB,kBACpB3wH,sBAAuB40H,EACvBpjB,cAAeojB,GAEvB,CAEAopE,0BAAAA,CAA2BppE,EAAuB5xK,EAAqCwgL,EAAmB+5D,GACtGr3R,KAAKwL,SAASi7G,oBAAoByjG,mBAAmB,CACjDO,oBAAoBpuG,EAAAA,GAAAA,IAAsBnB,GAAAA,GAAoBkB,iBAC9D+tG,WAAY,MACZrwH,sBAAuB40H,EACvBpjB,cAAeojB,EACf+P,UAAW,CACPs5D,mCAAoCj7O,EAAO7e,gBAC3C+5P,mCAAoCl7O,EAAO5e,qBAAqB3B,aAChE07P,sCAAuCn7O,EAAO/e,iBAAiBxB,aAC/D27P,qCAAsCp7O,EAAO3e,kBAAkB5B,aAC/D86P,kBAAmBA,EACnB/5D,UAAWA,IAGvB,CAEA66D,yBAAAA,CAA0BzpE,GACtB1uN,KAAKwL,SAASi7G,oBAAoByjG,mBAAmB,CACjDO,oBAAoBpuG,EAAAA,GAAAA,IAAsBnB,GAAAA,GAAoBkB,iBAC9D+tG,WAAY,SACZrwH,sBAAuB40H,EACvBpjB,cAAeojB,GAEvB,CAEQ0pE,iBAAAA,CAAkB97K,EAAmBpyF,GACzClqB,KAAKwL,SAASi7G,oBAAoB8jG,eAAe,CAC7CC,iBAAkBluG,EAClBmuG,oBAAoBpuG,EAAAA,GAAAA,IAAsBC,GAC1CxiB,sBAAuB5vE,EAAKohL,cAC5BA,cAAephL,EAAKohL,cACpBmzB,UAAW,CACPI,aAAc7+N,KAAK43R,qBACnB94D,eAAgB9+N,KAAK23R,aACrBU,kBAAmBnuQ,EAAKouQ,YACxBC,yBAA0BruQ,EAAKquQ,yBAC/B75D,YAAax0M,EAAKi7O,iBAClBrtO,UAAW5N,EAAKk7O,iBAChBiyB,kBAAmBntQ,EAAKmtQ,oBAGpC,CAEAmB,iCAAAA,CAAkCtuQ,GAC9BlqB,KAAKo4R,kBACDl9K,GAAAA,GAAoBY,wBACpB5xF,EAER,CAEAuuQ,mCAAAA,CAAoCvuQ,GAChClqB,KAAKo4R,kBACDl9K,GAAAA,GAAoBa,0BACpB7xF,EAER,CAEAwuQ,8BAAAA,CAA+BxuQ,GAC3BlqB,KAAKo4R,kBACDl9K,GAAAA,GAAoBc,uBACpB9xF,EAER,CAEAyuQ,2BAAAA,CAA4BzuQ,GACxBlqB,KAAKo4R,kBACDl9K,GAAAA,GAAoBe,oBACpB/xF,EAER,CAEA0uQ,sBAAAA,CAAuB1uQ,GACnBlqB,KAAKo4R,kBACDl9K,GAAAA,GAAoBgB,eACpBhyF,EAER,CAEA2uQ,sBAAAA,CAAuBv8K,EAAmBpyF,GACtClqB,KAAKwL,SAASi7G,oBAAoByjG,mBAAmB,CACjDO,oBAAoBpuG,EAAAA,GAAAA,IAAsBC,GAC1C6tG,WAAY,UACZrwH,sBAAuB5vE,EAAKohL,cAC5BA,cAAephL,EAAKohL,cACpBmzB,UAAW,CACP45D,kBAAmBnuQ,EAAKouQ,YACxBjB,kBAAmBntQ,EAAKmtQ,oBAGpC,CAEA,4BAAcyB,GACV,MAAMC,QAAoB/4R,KAAKwL,SAASq5P,gBAAgBE,0BACxD,MAAO,CACHjmC,eAAgB9+N,KAAK23R,aACrB94D,aAAc7+N,KAAK43R,qBACnBl5D,YAAaq6D,EAAY5zB,iBACzBrtO,UAAWihQ,EAAY3zB,iBACvBzmC,YAAao6D,EAAY5zB,iBAAmB4zB,EAAY3zB,iBAEhE,CAEA,8BAAMF,GACF,MAAMx2C,EAAgB1uN,KAAKwL,SAASu1C,MAAMC,UACpCy9K,QAAkBz+N,KAAK84R,yBAC7B94R,KAAKwL,SAASi7G,oBAAoB8jG,eAAe,CAC7CC,iBAAkBtvG,GAAAA,GAAoBiB,SACtCsuG,oBAAoBpuG,EAAAA,GAAAA,IAAsBnB,GAAAA,GAAoBiB,UAC9DriB,sBAAuB40H,EACvBpjB,cAAeojB,EACf+P,UAAWA,GAEnB,CAEA,oCAAM4mC,CAA+Bl7C,GACjC,MAAMuE,EAAgB1uN,KAAKwL,SAASu1C,MAAMC,UACpCy9K,QAAkBz+N,KAAK84R,yBAC7B94R,KAAKwL,SAASi7G,oBAAoByjG,mBAAmB,CAClDO,oBAAoBpuG,EAAAA,GAAAA,IAAsBnB,GAAAA,GAAoBiB,UAC7DguG,WAAYA,EACZrwH,sBAAuB40H,EACvBpjB,cAAeojB,EACf+P,UAAWA,GAEnB,EC1HG,IAAMu6D,IAAsBnhR,GAyC9BC,EAAAA,GAAWxK,IAAGwF,GAzCZ,cAAqC4rE,EAAAA,EAExC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAoCXqd,eAAS,GAAAtQ,EAAAA,EAAAA,GAAA,oCAAAC,GAAA,WAIVygR,qCAAuE,KAAK,KAG5EC,wBAA+G,KAAK,KAGpHC,+BAAuD,KAAK,KAC5DC,+BAAuD,KAAK,KAC5DC,wBAAsD,KAAK,KA0D3DC,gCAAmCpvQ,IAAsC,IAADqvQ,EAAAC,EAAAC,EAC5E,OAAQvvQ,EAAKouQ,aACT,KAAKoB,GAAAA,EAA0BC,4BAEQ,QAAnCJ,EAAAv5R,KAAKm5R,sCAA8B,IAAAI,GAAnCA,EAAqCthQ,QAErCj4B,KAAK6oB,UAAU2vQ,kCAAkCtuQ,GAEjDlqB,KAAKm5R,+BAAiCn5R,KAAKwL,SAAS6wC,QAAQ88N,qBAAqB,CAC7Ej9N,aAAc,CACVzzC,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,aAC3C8kC,QAAS36C,KAAKwL,SAASoK,YAAYC,UAAU,mDAC7CvV,OAAQ,CACJwB,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1CxO,QAASi0C,GAAcA,MAG/Bi0K,cAAeA,KACXvvN,KAAKm5R,+BAAiC,KACtCn5R,KAAK6oB,UAAUgwQ,uBAAuB39K,GAAAA,GAAoBY,wBAAyB5xF,EAAK,IAGhG,MACJ,KAAKwvQ,GAAAA,EAA0BE,yBACQ,QAAnCJ,EAAAx5R,KAAKo5R,sCAA8B,IAAAI,GAAnCA,EAAqCvhQ,QAErCj4B,KAAK6oB,UAAU4vQ,oCAAoCvuQ,GAEnDlqB,KAAKo5R,+BAAiCp5R,KAAKwL,SAAS6wC,QAAQ88N,qBAAqB,CAC7Ej9N,aAAc,CACVzzC,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,aAC3C8kC,QAAS36C,KAAKwL,SAASoK,YAAYC,UAAU,mDAC7CvV,OAAQ,CACJwB,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1CxO,QAASi0C,GAAcA,MAG/Bi0K,cAAeA,KACXvvN,KAAKo5R,+BAAiC,KACtCp5R,KAAK6oB,UAAUgwQ,uBAAuB39K,GAAAA,GAAoBa,0BAA2B7xF,EAAK,IAGlG,MACJ,KAAKwvQ,GAAAA,EAA0BG,iBAC3B75R,KAAK6oB,UAAU8vQ,4BAA4BzuQ,GAC3ClqB,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAC3Bt4B,EAAAA,GAAAA,KAAC03B,GAAAA,EAAoC,CAACY,cAAeA,EACjBV,UAAWH,GAAAA,EAAUK,KACrBG,sBAAuB33B,KAAK85R,eAAe,IAAIh9N,KAAK5yC,EAAK6vQ,mBACzDliQ,gBAAiB2D,EAAAA,SAASwB,YAAY9S,EAAKquQ,0BAC3CxgQ,UAAW7N,EAAKi7O,iBAChBrtO,UAAW5N,EAAKk7O,oBACpD,CACI38P,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,6CAC3C0nC,yBAAyB,EACzBF,gBAAgB,EAChB+H,SAAUA,KACNplD,KAAK6oB,UAAUgwQ,uBAAuB39K,GAAAA,GAAoBe,oBAAqB/xF,EAAK,IAGhG,MACJ,KAAKwvQ,GAAAA,EAA0BM,iBAC3Bh6R,KAAK6oB,UAAU6vQ,+BAA+BxuQ,GAC9ClqB,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IACvBt4B,EAAAA,GAAAA,KAAC03B,GAAAA,EAAoC,CAACY,cAAeA,EACjBV,UAAWH,GAAAA,EAAUI,KACrBI,sBAAuB33B,KAAK85R,eAAe,IAAIh9N,KAAK5yC,EAAK6vQ,mBACzDliQ,gBAAiB2D,EAAAA,SAASwB,YAAY9S,EAAKquQ,0BAC3CxgQ,UAAW7N,EAAKi7O,iBAChBrtO,UAAW5N,EAAKk7O,oBACxD,CACI38P,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,6CAC3C0nC,yBAAyB,EACzBF,gBAAgB,EAChB+H,SAAUA,KACNplD,KAAK6oB,UAAUgwQ,uBAAuB39K,GAAAA,GAAoBc,uBAAwB9xF,EAAK,IAGnG,MACJ,KAAKwvQ,GAAAA,EAA0BO,aACC,QAA5BR,EAAAz5R,KAAKq5R,+BAAuB,IAAAI,GAA5BA,EAA8BxhQ,QAC9Bj4B,KAAK6oB,UAAU+vQ,uBAAuB1uQ,GACtClqB,KAAKq5R,wBAA0Br5R,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAC1Dt4B,EAAAA,GAAAA,KAAC03B,GAAAA,EAAoC,CACjCY,cAAeA,EACfV,UAAWH,GAAAA,EAAU6lB,iBACrBrlB,sBAAuB33B,KAAK85R,eAAe,IAAIh9N,KAAK5yC,EAAK6vQ,mBACzDliQ,gBAAiB2D,EAAAA,SAASwB,YAAY9S,EAAKquQ,0BAC3CxgQ,UAAW7N,EAAKi7O,iBAChBrtO,UAAW5N,EAAKk7O,oBAErB,CACC38P,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,4CAC3C0nC,yBAAyB,EACzBF,gBAAgB,EAChB+H,SAAUA,KACNplD,KAAK6oB,UAAUgwQ,uBAAuB39K,GAAAA,GAAoBgB,eAAgBhyF,EAAK,IAI/F,EA5MAlqB,KAAKk6R,6BAA+Bl6R,KAAKm6R,4CACzCn6R,KAAK6oB,UAAY,IAAI6uQ,GAAyBlsR,IAE9CwN,EAAAA,EAAAA,IAAehZ,MAEXA,KAAKib,YACLjb,KAAKwL,SAAS63E,IAAIoxC,OAAOqjB,wBAAwB93I,KAAKs5R,iCACtDt5R,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eAClCA,IACuB,IAADyqR,EAAAC,EAAAC,EAAAC,EAAd5qR,IAEwC,QAAzCyqR,EAAAp6R,KAAKi5R,4CAAoC,IAAAmB,GAAzCA,EAA2CxuQ,MACvC5rB,KAAKk5R,0BAELl5R,KAAKk5R,wBAAwB,IAAI9B,GAAoBp3R,KAAKw6R,sCAC1Dx6R,KAAKk5R,wBAA0B,MAGA,QAAnCmB,EAAAr6R,KAAKm5R,sCAA8B,IAAAkB,GAAnCA,EAAqCpiQ,QACrCj4B,KAAKm5R,+BAAiC,KACH,QAAnCmB,EAAAt6R,KAAKo5R,sCAA8B,IAAAkB,GAAnCA,EAAqCriQ,QACrCj4B,KAAKo5R,+BAAiC,KACV,QAA5BmB,EAAAv6R,KAAKq5R,+BAAuB,IAAAkB,GAA5BA,EAA8BtiQ,QAC9Bj4B,KAAKq5R,wBAA0B,KAG/Br5R,KAAKk6R,6BAA+Bl6R,KAAKm6R,4CAE7C,IAIhB,CAgBA,aAAIl/Q,GACA,OAAOjb,KAAKwL,SAASoL,WAAWrI,QAAQknO,wBAC5C,CAEA,iBAAIz0G,GAEA,OAAQ72H,QAAQnK,KAAKk5R,wBACzB,CAIQiB,yCAAAA,GACJ,OAAIn6R,KAAKib,UAKF,IAAI+f,SAA6BC,IACpCj7B,KAAKk5R,wBAA0Bj+P,EAE/Bj7B,KAAKi5R,qCAAuCj5R,KAAKwL,SAAS63E,IAAIoxC,OAAOmjB,yBAAwBmhJ,IAEzF99P,EAAQ,IAAIm8P,GAAoB2B,IAGhC/4R,KAAKi5R,qCAAqCrtQ,MAG1C5rB,KAAKk5R,wBAA0B,MAE/BtvQ,EAAAA,EAAAA,KAAY,KACR5pB,KAAKk6R,6BAA+Bl/P,QAAQC,QAAQ,IAAIm8P,GAAoB2B,GAAa,IAK7F/4R,KAAKi5R,qCAAuCj5R,KAAKwL,SAAS63E,IAAIoxC,OAAOmjB,yBAAwBmhJ,KACzFnvQ,EAAAA,EAAAA,KAAY,KACR5pB,KAAKk6R,6BAA+Bl/P,QAAQC,QAAQ,IAAIm8P,GAAoB2B,GAAa,GAC3F,GACJ,GACJ,IA5BK/9P,QAAQC,QAAQ,IAAIm8P,GAAoBp3R,KAAKw6R,qCA8B5D,CAGQA,iCAAAA,GACJ,MAAO,CACHx1B,cAAejB,GAAsB02B,SACrCt1B,iBAAkB,EAClBC,iBAAkB,EAClBiyB,kBAAmB,GACnBqD,eAAgB,EAExB,CAyGQC,WAAAA,CAAYtvQ,GAChB,OAAOrrB,KAAKwL,SAAS8e,KAAK+0K,4BAA4Bh0K,GAAM,EAChE,CAEQyuQ,cAAAA,CAAezuQ,GACnB,OAAOrrB,KAAKwL,SAAS8e,KAAK+0K,4BAA4B,IAAIviI,KAAKzxC,EAAKuoB,UAAuC,GAA3BvoB,EAAKq4D,oBAA2B,MAAO,EAC3H,CAEAqhL,uBAAAA,GACI,OAAG/kQ,KAAKghI,cACGhhI,KAAKk6R,6BAGT,IAAIl/P,SAA6B,CAACC,EAASimK,KAC9C,IAAI05F,GAAc,EAClB,MAAMx6K,EAAaj2E,YAAW,KAC1BywP,GAAc,EACd15F,EAAO,6CAA6C,GACrD1lK,EAAAA,SAAS6tG,MAAMrpI,KAAKwL,SAASye,cAAc6P,gBAAgB+gQ,gBAAgBC,iBAAiBp6K,mBAE/F1gH,KAAKk6R,6BAA6B34Q,MAAKw5Q,IAC/BH,IACA3wP,aAAam2E,GACbnlF,EAAQ8/P,GACZ,IACDj9N,OAAMpvD,IACDksR,IACA3wP,aAAam2E,GACb8gF,EAAOxyL,GACX,GACF,GAEV,CAEQssR,qCAAAA,CAAsCvD,GAC1Cz3R,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CACrC5yB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,oCAC3C/T,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,4CAA6C,CAAC4hR,0BAA2Bz3R,KAAK26R,YAAYlD,KACpI/7P,QAAS,CACL,CACI55B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1C8lB,aAAc,UACdt0B,QAASqY,SAAamc,GAAAA,EAAkCC,0BAIxE,CAEA,0BAAMmoL,CAAqBhxM,EAAoBgoR,GAE3C,MAAMF,QAAqB/6R,KAAK+kQ,0BAChC,GAAGk2B,EAAY,CACX,GAAGF,EAAa/1B,gBAAkBjB,GAAsBm3B,SAChDH,EAAa/1B,gBAAkBjB,GAAsBo3B,YAAcJ,EAAatD,0BAA0B7jP,UAAYkpB,KAAKD,MAAO,CAEtI,cADuB78D,KAAKwL,SAASonH,IAAIq0F,0BAA0B9C,yBAClDmZ,WACb,KAAKm3D,GAAiC2G,GACtC,KAAK3G,GAAiC4G,4BAClC,OAAOzzM,GAAAA,EAA6B8sJ,SACxC,QAEI,OADA10O,KAAKs7R,2BACE1zM,GAAAA,EAA6B2zM,OAGhD,MAAO,GAAGR,EAAa/1B,gBAAkBjB,GAAsBo3B,YAAcJ,EAAatD,0BAA0B7jP,UAAYkpB,KAAKD,MAGjI,OADA78D,KAAKg7R,sCAAsCD,EAAatD,2BACjD7vM,GAAAA,EAA6B2zM,OAGxC,OAAO3zM,GAAAA,EAA6B8sJ,QACxC,CAEA,GAAGqmD,EAAa/1B,gBAAkBjB,GAAsBlhQ,OACpD,OAAO+kF,GAAAA,EAA6B8sJ,SACjC,GAAGqmD,EAAa/1B,gBAAkBjB,GAAsBo3B,YAAcJ,EAAatD,0BAA0B7jP,UAAYkpB,KAAKD,MAGjI,OADA78D,KAAKg7R,sCAAsCD,EAAatD,2BACjD7vM,GAAAA,EAA6B2zM,OACjC,CACH,MAAM7sE,EAAgB1uN,KAAKwL,SAASu1C,MAAMC,UAC1C,aAAahhD,KAAKw7R,sCAAsCx7R,KAAKy7R,oBAAoB/sE,GAAgBA,EACrG,CACJ,CAEA,yBAAc+sE,CAAoB/sE,GAC9B,IACI,MAAMroM,QAAiBrmB,KAAKwL,SAASonH,IAAIyY,eAAew7E,mBAAmB,CACvE6H,cAAeA,IAGnB,OAAGroM,EAASq1Q,gBACD17R,KAAK26R,YAAY,IAAI79N,KAAKz2C,EAASq1Q,kBAGvC,IACX,CAAE,MAAOhtR,GAEL,OADA1O,KAAKwL,SAAS2L,OAAOxI,MAAM,kCAAmCD,GACvD,IACX,CAEJ,CAEQ4sR,wBAAAA,GACJt7R,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CACrCv5B,KAAM9B,KAAKwL,SAASoL,WAAWosN,yBAC/Br6K,gBAAgB,EAChBjtB,QAAS,CACL,CACI55B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1C8lB,aAAc,UACdt0B,QAASqY,SAAYmc,GAAAA,EAAkCC,0BAIvE,CAEQ0/P,+BAAAA,CAAgCh8P,EAAiCkvL,GAIrE,OAFA1uN,KAAK6oB,UAAUgvQ,yBAAyBnpE,GAEjC,IAAI1zL,SAAsC,CAACC,EAASimK,KAEvD,MAAMljK,EAActe,UAChB,IAAK,IAADi8Q,EAAAC,EACA,MAAMv1Q,QAAiBrmB,KAAKwL,SAASonH,IAAIq0F,0BAA0BhD,qBAAqB,CACpFyK,cAAeA,EACfzwL,gBAAiB6e,EAAO7e,gBACxB49P,8BAA+B/+O,EAAO5e,qBAAqB3B,aAC3Du/P,0BAA2Bh/O,EAAO/e,iBAAiBxB,aACnDw/P,2BAAkE,QAAxCJ,EAA0B,QAA1BC,EAAE9+O,EAAO3e,yBAAiB,IAAAy9P,OAAA,EAAxBA,EAA0Br/P,oBAAY,IAAAo/P,EAAAA,EAAI,IAK1E,OAFA37R,KAAK6oB,UAAUivQ,2BAA2BppE,EAAe5xK,EAAQz2B,EAASi3M,UAAWj3M,EAASgxQ,mBAEtFhxQ,EAASi3M,WACb,KAAKm3D,GAAiC2G,GAClCngQ,EAAQ2sD,GAAAA,EAA6B8sJ,UACrC,MACJ,KAAK+/C,GAAiC4G,4BAClCr7R,KAAKwL,SAAS4vB,OAAOC,oBAAoB,CACrC5yB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,oCAC3C/T,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,uCAC1CuvC,SAAUA,IAAMnqB,EAAQ2sD,GAAAA,EAA6B8sJ,UACrDp5M,iBAAiB,EACjBI,QAAS,CACL,CACI55B,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,MAC1C8lB,aAAc,UACdt0B,QAASqY,SAAYmc,GAAAA,EAAkCC,2BAInE,MACJ,QACI97B,KAAKs7R,2BACLrgQ,EAAQ2sD,GAAAA,EAA6B2zM,QAGjD,CAAE,MAAO7sR,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,mCAAoCD,GAC/DwyL,EAAOxyL,EACX,GAGJ1O,KAAKwL,SAAS4vB,OAAOgiB,WAAUhiB,IAAW17B,EAAAA,GAAAA,KAACg+B,GAAAA,EAA6B,CAAC1F,cAAeoD,EACeoE,gBAAiBA,EACjBxB,YAAaA,KAAiB,CACjIv1B,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,gCAC3C0nC,yBAAyB,EACzBF,gBAAgB,EAChBC,oBAAoB,EACpB+L,kBAAmBA,KACfrpD,KAAK6oB,UAAUsvQ,0BAA0BzpE,GACzCzzL,EAAQ2sD,GAAAA,EAA6B2zM,OAAO,GAElD,GAEV,GAEH/iR,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gCAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA1J,ICxaM,MAAMkpR,GACTjpR,WAAAA,CAAoBkpR,GAAkC,KAAlCA,cAAAA,EAA+B,KAG1CC,QAAS,EAAK,KAEfC,oBAA6Bh8R,EAAU,KACvCi8R,oBAAoBj8R,EAAU,KAC9Bk8R,eAAgB,CANxB,CAOQC,UAAAA,GACJ,GAAGt8R,KAAKq8R,cACJ,MAAM,IAAIpsN,MAAM,sCAAwCjwE,KAAKi8R,eAEjE,GAAGl3R,EAAAA,MAAMk7B,YAAYjgC,KAAKm8R,gBAAiB,CACvCn8R,KAAKq8R,eAAgB,EACrB,IACIr8R,KAAKm8R,eAAiBn8R,KAAKi8R,gBAAgB16Q,MAAK68D,IAC5Cp+E,KAAKo8R,eAAiBh+M,EACfp+E,KAAKo8R,iBAEpB,CAAC,QAEGp8R,KAAKq8R,eAAgB,CACzB,CAEJ,CACJ,CAEA,SAAIvyR,GAEA,OADA9J,KAAKs8R,aACEt8R,KAAKm8R,cAChB,CAEAI,mBAAAA,GACI,OAAGv8R,KAAKo8R,eACGp8R,KAAKo8R,eAETp8R,KAAK8J,KAChB,CAEA0yR,SAAAA,GACIx8R,KAAKs8R,YACT,EC7CG,MAAMG,GACT,gBAAMC,GACF,aAAa,8BACjB,CAEA,gBAAMC,GACF,aAAa,wDACjB,CAEA,gBAAMC,GACF,aAAa,+BACjB,CAEA,gBAAMC,GACF,aAAa,6BACjB,CAEA,gBAAMC,GACF,aAAa,+BACjB,E,OCjBG,MAAMC,GAAmCt/R,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0uBAClCE,GAASA,EAAMI,MAAM6J,OAAOi1R,wBAA0Bl/R,EAAMI,MAAM6J,OAAOozM,uBACpFr9M,GAASA,EAAMI,MAAM6J,OAAOmrD,eAI3Bp1D,GAASA,EAAMm/R,aAAe,OAWtCt+R,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQ8J,OAAO,IASrCxI,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6C,KAAKC,QAAQqiD,IAAI,IC1B/B65O,IAA+B1+R,EAAAA,GAAAA,GAAU,gCCYhDqU,IAA0EtT,EAAAA,GAAAA,KAAUzB,IAQlF4B,EAAAA,GAAAA,KAAC6e,GAAAA,GAAa,CAACrgB,MAAOJ,EAAMI,MAAMmiM,YAAYtgM,UAC1CyI,EAAAA,GAAAA,MAACu0R,GAAgC,CAACE,aAPlBE,MACpB,MAAMC,EAAat/R,EAAMswI,IAAIxvG,cAAc,IAADh/B,OAAK2iB,GAAAA,IAC/C,OAAO66Q,EAAuB,OAAVA,QAAU,IAAVA,OAAU,EAAVA,EAAYxtR,wBAAwBvO,OAAS,EAAE,EAKf87R,GAAkBp9R,SAAA,EAC9DL,EAAAA,GAAAA,KAACw9R,GAA4B,CAAAn9R,SACxBjC,EAAMgE,QAEXpC,EAAAA,GAAAA,KAACw9R,GAA4B,CAAC71R,QAASvJ,EAAMu/R,WAAWt9R,SACnDjC,EAAMw/R,iBAOdC,IAAgClmR,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,MAAO,U,mBCX1E,IAAM2qR,IAAoB3lR,GAU5BC,EAAAA,GAAWxK,IAAGyK,GAGdE,EAAAA,GAAOC,MAAKC,GAbV,MAAMqlR,UAA6B9+M,EAAAA,EAItC3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,IAAU+M,EAAAA,EAAAA,GAAA,6BAAAC,GAAA,OAEhBQ,EAAAA,EAAAA,IAAehZ,KACnB,CAMQy9R,wBAAAA,CAAyBC,GAC7B19R,KAAK29R,sBAAwBD,CACjC,CAEA,kCAAWE,GACP,OAAO59R,KAAK29R,sBAAsBptR,KAAI6qB,GAAUA,EAAOtxB,OAC3D,CAEO0kR,yBAAAA,GACHxuR,KAAK69R,iBAAiB,CAClB/7R,KAAM9B,KAAKwL,SAASoK,YAAYC,UAAU,gCAC1CynR,QAASt9R,KAAKwL,SAASoK,YAAYC,UAAU,+BAC7CioR,cAAeN,EAAqBO,uCACpCV,WAAY39Q,iBACsB1f,KAAKwL,SAASu4B,UAC5Bi6P,oBAAoB,GAGhD,CAEQH,gBAAAA,CAAiBI,GACrB,MAAM1uQ,EAAautC,KAAKD,MACxB1yB,YAAW,IAAMnqC,KAAKk+R,mBAAmB3uQ,IAAK0uQ,EAAuBH,eACrE99R,KAAKy9R,yBAAyB,IACvBz9R,KAAK29R,sBACR,CACIpuQ,GAAIA,EACJzlB,OAAOpK,EAAAA,GAAAA,KAAC69R,GAA6B,CACjCz7R,KAAMm8R,EAAuBn8R,KAC7Bw7R,QAASW,EAAuBX,QAChCD,WAAYY,EAAuBZ,eAInD,CAEQa,kBAAAA,CAAmB3uQ,GACvBvvB,KAAKy9R,yBAAyBz9R,KAAK29R,sBAAsBl+Q,QAAO0+Q,GAAMA,EAAG5uQ,KAAOA,IACpF,GACHpX,GAnD2B4lR,uCAAiD,IAW5DjrR,GAXgEqF,GAAAK,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,yBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBASvB,EAAG,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,4BAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,4BAAAtJ,GAAAsJ,WAAAtJ,IC/BrD,MAAMsrR,WAA+BzjK,GACxC9vE,IAAAA,GACQ7qD,KAAK66H,aACL76H,KAAK66H,aAAamC,aAElBh9H,KAAK66H,aAAe76H,KAAKi9H,qBACzBj9H,KAAK66H,aAAauC,YAAYp9H,KAAKu2H,gBAE3C,CAEAjmG,IAAAA,GACQtwB,KAAK66H,cACL76H,KAAK66H,aAAamC,YAClB5kH,MAAMkY,SAENtwB,KAAK66H,aAAe76H,KAAKi9H,qBACzBj9H,KAAK66H,aAAasC,GAAGvC,GAAAA,GAAAA,OAAW+B,gBAAiB38H,KAAKy7H,mBACtDz7H,KAAK66H,aAAauC,YAAYp9H,KAAKu2H,gBAE3C,CAEAhwG,KAAAA,GAAS,IAAD21G,EACJ9jH,MAAMmO,QACW,QAAjB21G,EAAAl8H,KAAK66H,oBAAY,IAAAqB,GAAjBA,EAAmBD,UACvB,CAEAp0F,uBAAAA,GAEA,CAEQo1F,kBAAAA,GACJ,MAAMC,EAAc,IAAItC,GAAAA,GAAI56H,KAAKk7H,YAQjC,OANAgC,EAAYC,GAAGvC,GAAAA,GAAAA,OAAW6B,MAAOz8H,KAAKq7H,aACtC6B,EAAYC,GAAGvC,GAAAA,GAAAA,OAAW8B,eAAgB18H,KAAKu7H,kBAC/C2B,EAAYC,GAAGvC,GAAAA,GAAAA,OAAWgC,cAAe58H,KAAK07H,iBAC9CwB,EAAYC,GAAGvC,GAAAA,GAAAA,OAAWiC,SAAU78H,KAAK+7H,YACzCmB,EAAYC,GAAGvC,GAAAA,GAAAA,OAAWkC,YAAa98H,KAAKg8H,sBAC5CkB,EAAYnI,kBAAqB/0H,KAAKwL,SAASy8B,qBAAqB8sF,kBAC7DmI,CACX,EC1CG,MAAMmhK,WAAkCnlK,GAC3CruE,IAAAA,GACIzyC,MAAMkY,OACNlY,MAAMmO,QACNvmB,KAAKs+R,QACT,CAEAz2P,uBAAAA,GAEA,CAEQy2P,MAAAA,GACJt+R,KAAKu2H,eAAesD,YAAc,CACtC,ECPG,MAAM0kK,WAAoC1qK,GAAwB9gH,WAAAA,GAAA,SAAA9S,WAAA,KAE9DgsD,WAAa,iBAAkB,CAE5B+oE,iBAAAA,GACN,MAAMmE,EAAUnrH,SAASsvH,cAAc,SACvC,IACI,QAAI+gK,GAA0BtqK,YAAYoF,IAInCilK,GAAuBrqK,aAClC,CAAC,QACG,IACIoF,EAAQ/kH,IAAM,GACd+kH,EAAQtuE,OACRsuE,EAAQoE,QACZ,CAAE,MAAO7uH,GACL1O,KAAKwL,SAAS2L,OAAOxI,MAAM,qEAAsED,EACrG,CACJ,CAEJ,CAEA67C,cAAAA,CAAet3C,EAAoBsjH,EAAkCiH,GAEjE,MAAMzoH,EAAW9B,EAAS8B,SACpByhH,EAAevjH,EAASi8E,cAE3Bj8E,EAAS67E,aACRynC,EAAe3rE,OAAS33C,EAAS67E,YAIrC,MAAM2nC,EApC0C,KAuChD,OAAKz2H,KAAKwL,SAASqI,OAAOmI,GAAGwa,WAAa6nQ,GAA0BtqK,YAAYwC,GACrE,IAAI8nK,GAA0Br+R,KAAKwL,SAAUuJ,EAAUwhH,EAAgBC,EAAcC,GAG5F2nK,GAAuBrqK,cAChB,IAAIqqK,GAAuBp+R,KAAKwL,SAAUuJ,EAAUwhH,EAAgBC,EAAcC,GAGtF,IACX,EC9CG,MAAM+nK,WAAwCzgM,GAAAA,EAEvCG,4BAAAA,GACN,OAAOl+F,KAAKwL,SAASye,cAAcC,KAAKvL,OAAOi6L,iBACnD,CAEUr6G,6BAAAA,GACN,MAAO,CACHv1E,SAAUgd,GAAAA,GAA+BpX,WACzC0L,MAAOyO,GAAAA,GAA4B01P,UAE3C,ECjBG,MAAMC,IAA6BlgS,EAAAA,GAAAA,GAAU,8BCAvCmgS,IAA6BngS,EAAAA,GAAAA,GAAU,8BCU7C,MAAMogS,WAA4Cp/R,GAAAA,EAA4EuT,WAAAA,GAAA,SAAA9S,WAAA,KACzH4+R,cAAgB,KAEpB,MAAM39B,EAASlhQ,KAAKwL,SAASkE,KAAKC,aAClC3P,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,UAAYm7N,EAAS,UAAY,IAAMlhQ,KAAKlC,MAAM4kE,SAAS5gE,MAEjI9B,KAAKlC,MAAM4kE,SAASC,SAAS,EAC/B,KAGMC,YAAc,KAAO,IAADk8N,EACxB,MAAMC,EAAiC/+R,KAAKlC,MAAM4kE,SAElD,GAAI39D,EAAAA,MAAMiP,QAAmB,OAAX+qR,QAAW,IAAXA,OAAW,EAAXA,EAAa93R,MAC3B,OAAO,KAGX,MAAM87D,EAAO/iE,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMqzR,EAAY93R,MAEhE,OAAIlC,EAAAA,MAAMkP,kBAAkB8uD,GACjB,MAGJrjE,EAAAA,GAAAA,KAACqjE,EAAI,CAACpjE,UAAS,2BAA8B8G,KAAM,EAAG3E,KAAM,GAAI2G,MAA8B,QAAzBq2R,EAAEC,EAAY/7N,mBAAW,IAAA87N,EAAAA,EAAI,IAAO,CAClH,CAGFr/R,MAAAA,GACI,MAAM,IAACqb,EAAG,KAAEhZ,GAAQ9B,KAAKlC,MAAM4kE,SAC/B,OAAOl6D,EAAAA,GAAAA,MAACk2R,GAA0B,CAC9BM,YAAalkR,EACbnb,UAAS,uBAAAC,OAAyBkb,GAClCzT,QAASA,IAAMrH,KAAK6+R,gBAAgB9+R,SAAA,CAEnCC,KAAK4iE,eACNljE,EAAAA,GAAAA,KAACi/R,GAA0B,CAAA5+R,SACtB+B,MAGb,EC9CG,MAAMm9R,WAA2CvgM,GAAAA,EAC1CK,mBAAAA,CAAoB14F,GAC1B,OAAQ3G,EAAAA,GAAAA,KAACk/R,GAAmC,CAAgBl8N,SAAU1iE,MAApBA,KAAK8a,IAC3D,E,4BCKG,IAAMokR,IAAarnR,GAMrBC,EAAAA,GAAWxK,IAAGyK,GAEdD,EAAAA,GAAWxK,IAAG0K,GAGdF,EAAAA,GAAWxK,IAAG8W,GAEdnM,EAAAA,GAAOC,MAAKpF,GAbV,cAA4B4rE,EAAAA,EAcxBygN,kBAAAA,GACHn/R,KAAKuI,UAAW,CACpB,CAIAwK,WAAAA,CAAYvH,EAAoDmzF,GAC5DvmF,MAAM5M,GAAU,KAD4CmzF,sBAAAA,EAAoD,KAnB5GygM,sBAA+C,KAAK,KACpD7qG,sBAAqD,KAAK,KAC1D8qG,eAAqC,KAAK,KAC1CC,6BAAmD,MAAI/mR,EAAAA,EAAAA,GAAA,qBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,8BAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,gBAAAmM,GAAA,WAc9C66Q,0BAAoB,OAyB7BC,gBAAkB,KACtBx/R,KAAKy/R,sBACLz/R,KAAK0/R,+BAA+B,EACtC,KAEM3vB,gBAAkB,KACtB/vQ,KAAKy/R,sBACLz/R,KAAK0/R,+BAA+B,GA5BpC1mR,EAAAA,EAAAA,IAAehZ,MACfA,KAAKo/R,sBAAwB,IAAIpoP,GAAAA,GAAeh3C,KAAKw/R,iBACrDx/R,KAAKu0L,sBAAwBv0L,KAAKwL,SAASsE,OAAOu+H,YAAY0mD,OAAO/0L,KAAK+vQ,iBAE1E/vQ,KAAKu/R,qBAAuB,IAAIf,GAAgChzR,EACpE,CAEA,gBAAIoT,GACA,OAAO5e,KAAK2/R,cAAgB3/R,KAAK4/R,sBACrC,CAGQH,mBAAAA,GAAuB,IAADI,EAC1B7/R,KAAK2/R,eAAmC,QAAnBE,EAAA7/R,KAAKq/R,sBAAc,IAAAQ,OAAA,EAAnBA,EAAqBpyN,eAAgB,CAC9D,CAGQiyN,6BAAAA,GAAiC,IAADI,EACpC9/R,KAAK4/R,wBAA0D,QAAjCE,EAAA9/R,KAAKs/R,oCAA4B,IAAAQ,OAAA,EAAjCA,EAAmCryN,eAAgB,CACrF,CAaAsyN,gBAAAA,CAAiBC,GACVhgS,KAAKq/R,gBACJr/R,KAAKo/R,sBAAsBjoP,UAAUn3C,KAAKq/R,gBAE9Cr/R,KAAKq/R,eAAiBW,EACtBhgS,KAAKy/R,sBACDO,GACAhgS,KAAKo/R,sBAAsB5wR,QAAQwxR,EAE3C,CAGAzyP,8BAAAA,CAA+B4gF,GACxBnuH,KAAKs/R,8BACJt/R,KAAKo/R,sBAAsBjoP,UAAUn3C,KAAKs/R,8BAE9Ct/R,KAAKs/R,6BAA+BnxK,EACpCnuH,KAAK0/R,gCACDvxK,GACAnuH,KAAKo/R,sBAAsB5wR,QAAQ2/G,EAE3C,CAEApI,8BAAAA,GACI,OAAO/lH,KAAKs/R,4BAChB,CAEQW,uBAAAA,CAAwBC,GAC5B,MAAa,4BAANA,GAAyC,4BAANA,CAC9C,CACAC,uBAAAA,GACI,OAAOngS,KAAKwL,SAASye,cAAcC,KAAKvL,OAAOyhR,YAAY3gR,QAAOygR,GACvDlgS,KAAKigS,wBAAwBC,KACrC3vR,KAAI8vR,GACIrgS,KAAKsgS,0BAA0BD,KACvC5gR,QAAOijD,GACCA,EAASj2D,SAExB,CACQ6zR,yBAAAA,CAA0BD,GAC9B,IAAIxhI,EAAmB7+J,KAAKwL,SAASoL,WAAWrI,QAAQ41D,UAAUmwK,qBAAqB+rD,EAAergS,KAAKu/R,qBAAsBv/R,KAAK2+F,uBACtI,OAAGkgE,GAGI,IAAIogI,GAAmCoB,EAAergS,KAAKu/R,qBAAsBv/R,KAAKwL,SAAUxL,KAAK2+F,sBAChH,CAEAtgF,OAAAA,GACIre,KAAKo/R,sBAAsB3wR,aAC3BzO,KAAKo/R,sBAAwB,KAC7Bp/R,KAAKu0L,sBAAsBl2K,UAC3Bre,KAAKu0L,sBAAwB,IACjC,GACH/7K,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBApG2B,CAAE,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,0BAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAEQ,CAAE,IAADkI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,YAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAGP,CAAK,KAADL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,sBAAAgI,IAAA3H,OAAAC,yBAAA5J,GAAAsJ,UAAA,sBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAqB9BnE,EAAAA,IAAMwE,OAAAC,yBAAA5J,GAAAsJ,UAAA,uBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,iCAKNnE,EAAAA,IAAMwE,OAAAC,yBAAA5J,GAAAsJ,UAAA,iCAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAeNnE,EAAAA,IAAMwE,OAAAC,yBAAA5J,GAAAsJ,UAAA,oBAAAtJ,GAAAsJ,YAAAD,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,kCAYNnE,EAAAA,IAAMwE,OAAAC,yBAAA5J,GAAAsJ,UAAA,kCAAAtJ,GAAAsJ,WAAAtJ,I,uCCnEJ,MAAMytR,WAAqC7hN,EAAAA,EAC9C3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAcHg1R,2BAAqB,EAblC,IAAIC,EAAiB7/K,EAAAA,OACrB5gH,KAAKwgS,sBAAwBC,EAAe16O,OACDx1C,IAAIkwR,GACJlwR,KAAK89G,IACF,MAAMqyK,EAA+DryK,EAAO97D,QAE5E,MAAO,CACHouO,UAFmB,IAAID,EAAkB,IAAIjiM,GAAAA,EAA4Bz+F,KAAKwL,UAAWxL,KAAKwL,UAEpEsP,IAC1B8lR,kBAAmBF,EACtB,IACF52H,cAAaxpI,GAAQA,EAAKqgQ,YAAWrgQ,GAAQA,EAAKsgQ,mBACnG,CAIA9hM,iBAAAA,CAAkBhkF,EAAkBw+E,GAAwD,IAADunM,EAEvFvnM,EAA2B,QAAfunM,EAAGvnM,SAAY,IAAAunM,EAAAA,EAAI,IAAIpiM,GAAAA,EAA4Bz+F,KAAKwL,UAEpE,MAAMs1R,EAA0B9gS,KAAKwgS,sBAAsB1lR,GAC3D,OAAGgmR,EACQ,IAAIA,EAAwBxnM,EAAct5F,KAAKwL,UAGnD,IAAIqvF,GAAAA,EAAqB//E,EAAKw+E,EAAct5F,KAAKwL,SAC5D,ECvCG,MAAMu1R,GACThuR,WAAAA,CAAoBiuR,GAAkC,KAAlCA,cAAAA,EAA+B,KAG3CC,kBAAwC,IAFhD,CAIA,cAAIC,GACA,OAAO/2R,QAAQnK,KAAKihS,kBACxB,CAEAxU,MAAAA,CAAO0U,GACH,IAAIA,EACA,MAAM,IAAIlxN,MAAM,0DAGjBjwE,KAAKihS,mBACJjhS,KAAK0sR,SAGT1sR,KAAKihS,kBAAoBE,EAEzBnhS,KAAKihS,kBAAkB7+L,YAAYpiG,KAAKghS,cAE5C,CAEOtU,MAAAA,GACA1sR,KAAKihS,oBACJjhS,KAAKihS,kBAAkBG,YAAYphS,KAAKghS,eACxChhS,KAAKihS,kBAAoB,KAEjC,CAEAt2O,OAAAA,GACI3qD,KAAK0sR,SACL1sR,KAAKghS,cAAgB,IACzB,EChCG,IAAMK,IAAqBxpR,GAS7BC,EAAAA,GAAWxK,IAAGyK,GAOdE,EAAAA,GAAOC,MAAKpF,GAhBV,MACHC,WAAAA,GAAe,KAMPuuR,gBAA0B,GAAC/oR,EAAAA,EAAAA,GAAA,8BAAAC,GAAA,MAL/BxY,KAAKshS,gBAAkB,EACvBthS,KAAKuhS,uBAAyB,GAC9BvoR,EAAAA,EAAAA,IAAehZ,KACnB,CAOA,aAAImnR,GACA,OAAO3rP,EAAAA,SAASsY,iBAAiB9zC,KAAKuhS,uBAC1C,CAGAC,eAAAA,GACI,GAAIxhS,KAAKshS,gBAAiB,CACtB,MAAMznK,EAAc/8D,KAAKD,MACzB78D,KAAKuhS,wBAA2B1nK,EAAc75H,KAAKshS,gBACnDthS,KAAKshS,gBAAkBznK,CAC3B,CACJ,CAEA4nK,aAAAA,GACIzhS,KAAKshS,gBAAkBxkO,KAAKD,KAChC,CAEA6kO,aAAAA,GACI1hS,KAAKwhS,kBACLxhS,KAAKshS,gBAAkB,CAC3B,GAEH9oR,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,0BAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,mBAAAtJ,GAAAsJ,WAAAtJ,ICfM,SAAS6uR,GAAkBhzR,GAC9B,IAAIA,EACA,OAAO,EAGX,OAAQA,EAAMoX,MACV,IAAK,kBAED,OAAO,EACX,IAAK,aACD,QAASpX,EAAMgsC,SAAWhsC,EAAMgsC,QAAQrX,QAAQ,uCAAyC,GAE7F,QACI,OAAO,EAEnB,C,iDC9BO,IAAMs+P,IAAqB/pR,GA2C7BC,EAAAA,GAAWxK,IAAGyK,GAadD,EAAAA,GAAWxK,IAAG0K,GAOdF,EAAAA,GAAWxK,IAAG8W,GAMdtM,EAAAA,GAAWxK,IAAG+W,GAMdvM,EAAAA,GAAWxK,IAAGgX,GAIdxM,EAAAA,GAAWxK,IAAGk0C,GAMd1pC,EAAAA,GAAWxK,IAAGwF,GArFZ,MACHC,WAAAA,CAA6B23C,EACAm3O,GAAsD,KADtDn3O,aAAAA,EAA8B,KAC9Bm3O,qBAAAA,EAAmD,KAuCxE7qK,oBAAqC,MAAIz+G,EAAAA,EAAAA,GAAA,yBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,kBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,oBAAAmM,GAAA,OAAAnM,EAAAA,EAAAA,GAAA,iBAAAkQ,GAAA,OAAAlQ,EAAAA,EAAAA,GAAA,kBAAAmQ,GAAA,OAAAnQ,EAAAA,EAAAA,GAAA,kBAAAoQ,GAAA,OAAApQ,EAAAA,EAAAA,GAAA,iBAAA0pC,GAAA,WAkDzC6/O,WAAa,MACjBl4Q,EAAAA,EAAAA,KAAY,KACR5pB,KAAK+hS,oBAAsB,KAC3B/hS,KAAKwuP,YAAa,EAClBxuP,KAAKo0E,WAAY,EACjBp0E,KAAKgiS,sBACLhiS,KAAKiiS,YAAa,EAClBjiS,KAAKkiS,WAAY,EACjBliS,KAAKmiS,iBACLniS,KAAKoiS,2BAA6B,CAAC,GACrC,EACL,KAEO1qK,WAAa,MACjB9tG,EAAAA,EAAAA,KAAY,KACR5pB,KAAKo0E,WAAY,EACjBp0E,KAAKwuP,YAAa,EAClBxuP,KAAKgiS,sBACLhiS,KAAKiiS,YAAa,EAClBjiS,KAAKkiS,WAAY,EACjBliS,KAAKqiS,YAAa,EAClBriS,KAAKsiS,kBAAkBb,eAAe,GACxC,EACL,KAsBOc,WAAa,MACjB34Q,EAAAA,EAAAA,KAAY,KACR5pB,KAAKo0E,WAAY,EACjBp0E,KAAKwuP,YAAa,EAClBxuP,KAAKwiS,sBACLxiS,KAAKiiS,YAAa,EAClBjiS,KAAKkiS,WAAY,EACjBliS,KAAKsiS,kBAAkBZ,eAAe,GACxC,EACL,KAEOlqK,WAAa,MACjB5tG,EAAAA,EAAAA,KAAY,KACR5pB,KAAKo0E,WAAY,EAEjBp0E,KAAKwiS,sBACLxiS,KAAKiiS,YAAa,EAClBjiS,KAAKkiS,WAAY,EACjBliS,KAAKsiS,kBAAkBZ,eAAe,GACxC,EACL,KAEO9pK,WAAa,MACjBhuG,EAAAA,EAAAA,KAAY,KACR5pB,KAAKo0E,WAAY,EACjBp0E,KAAKkiS,WAAY,CAAK,GACxB,EACL,KAKOrqK,SAAY7wG,IAAkB,IAAD4nP,EAEjC,MAAMjgQ,EAA6B,QAAxBigQ,EAAI5nP,EAAc9c,cAAM,IAAA0kQ,OAAA,EAArBA,EAAuBjgQ,MACrC,GAAG5J,EAAAA,MAAMkP,kBAAkBtF,GAGvB,OAGJ,IAAI1D,EAAoB02R,GAAkBhzR,IAE1Cib,EAAAA,EAAAA,KAAY,KAER5pB,KAAKo0E,UAAYnpE,EACjBjL,KAAKwuP,YAAa,EAClBxuP,KAAKgiS,sBACLhiS,KAAKiiS,YAAa,EAClBjiS,KAAKkiS,WAAY,EACjBliS,KAAKsiS,kBAAkBZ,eAAe,IAGvCz2R,GACCjL,KAAKm1K,kBAAkB0zG,gBAAgBl6Q,EAC3C,EACH,KAEO8zR,SAAW,MACf74Q,EAAAA,EAAAA,KAAY,KACR5pB,KAAKo0E,WAAY,EACjBp0E,KAAKwuP,YAAa,EAClBxuP,KAAK0iS,cAAe,EACpB1iS,KAAKiiS,YAAa,EAClBjiS,KAAKkiS,WAAY,EACjBliS,KAAKsiS,kBAAkBZ,eAAe,GACxC,EACL,KAEOU,2BAAqC,EAAE,KACvCO,cAAgB,KACjB3iS,KAAKiiS,YACJjiS,KAAKsiS,kBAAkBd,kBAG3B,MAAMoB,EAAkB5iS,KAAK0qD,aAAasvE,0BAEvC4oK,EAAgBvoK,mBAAqB,GAAKr6H,KAAKoiS,6BAA+BQ,EAAgBvoK,qBAC7Fr6H,KAAKoiS,2BAA6BQ,EAAgBvoK,mBAClDr6H,KAAKm1K,kBAAkBk0G,oBAAoBuZ,EAAgBvoK,oBAC/D,EACH,KAEOo9H,SAAW,KACfz3P,KAAKsiS,kBAAkBd,iBAAiB,EAC3C,KAEOO,oBAA+C,KAAK,KACpDc,UAAY,KAGhB,GAAqC,IAAjC7iS,KAAK0qD,aAAao4O,YAAsD,IAAlC9iS,KAAK0qD,aAAaq4O,YACxD,OAGJ,MAAMC,EAAkC,CACpCthS,MAAO1B,KAAK0qD,aAAao4O,WACzBzhS,OAAQrB,KAAK0qD,aAAaq4O,cAG3B/iS,KAAK+hS,qBAAwB/hS,KAAK+hS,oBAAoBrgS,QAAUshS,EAActhS,OAAS1B,KAAK+hS,oBAAoB1gS,SAAW2hS,EAAc3hS,QACxIrB,KAAKm1K,kBAAkB40G,6BAA6B/pR,KAAK+hS,oBAAqBiB,GAGlFhjS,KAAK+hS,oBAAsBiB,CAAa,EAC3C,KAEOhrK,gBAAkB,MACtBpuG,EAAAA,EAAAA,KAAY,KACR5pB,KAAKqiS,YAAa,CAAI,GACxB,EAlPFriS,KAAK0qD,aAAa7rB,iBAAiB,UAAW7+B,KAAK03H,YACnD13H,KAAK0qD,aAAa7rB,iBAAiB,UAAW7+B,KAAK43H,YACnD53H,KAAK0qD,aAAa7rB,iBAAiB,UAAW7+B,KAAKuiS,YACnDviS,KAAK0qD,aAAa7rB,iBAAiB,UAAW7+B,KAAKw3H,YACnDx3H,KAAK0qD,aAAa7rB,iBAAiB,QAAS7+B,KAAK63H,UACjD73H,KAAK0qD,aAAa7rB,iBAAiB,UAAW7+B,KAAK8hS,YACnD9hS,KAAK0qD,aAAa7rB,iBAAiB,QAAS7+B,KAAKyiS,UACjDziS,KAAK0qD,aAAa7rB,iBAAiB,aAAc7+B,KAAK2iS,eACtD3iS,KAAK0qD,aAAa7rB,iBAAiB,QAAS7+B,KAAKy3P,UACjDz3P,KAAK0qD,aAAa7rB,iBAAiB,SAAU7+B,KAAK6iS,WAClD/yR,OAAO+uB,iBAAiB,UAAW7+B,KAAKg4H,iBAGxCh4H,KAAKsiS,kBAAoB,IAAIjB,IAE7BroR,EAAAA,EAAAA,IAAehZ,KACnB,CAEA2qD,OAAAA,GACI3qD,KAAK0qD,aAAapf,oBAAoB,UAAWtrC,KAAK03H,YACtD13H,KAAK0qD,aAAapf,oBAAoB,UAAWtrC,KAAK43H,YACtD53H,KAAK0qD,aAAapf,oBAAoB,UAAWtrC,KAAKuiS,YACtDviS,KAAK0qD,aAAapf,oBAAoB,UAAWtrC,KAAKw3H,YACtDx3H,KAAK0qD,aAAapf,oBAAoB,QAAStrC,KAAK63H,UACpD73H,KAAK0qD,aAAapf,oBAAoB,UAAWtrC,KAAK8hS,YACtD9hS,KAAK0qD,aAAapf,oBAAoB,QAAStrC,KAAKyiS,UACpDziS,KAAK0qD,aAAapf,oBAAoB,aAActrC,KAAK2iS,eACzD3iS,KAAK0qD,aAAapf,oBAAoB,QAAStrC,KAAKy3P,UACpDz3P,KAAK0qD,aAAapf,oBAAoB,SAAUtrC,KAAK6iS,WACrD/yR,OAAOw7B,oBAAoB,UAAWtrC,KAAKg4H,gBAE/C,CAEA,qBAAYm9C,GACR,OAAOn1K,KAAK6hS,sBAChB,CAOA,aAAI1a,GACA,OAAOnnR,KAAKsiS,kBAAkBnb,SAClC,CAEAgb,cAAAA,IACIv4Q,EAAAA,EAAAA,KAAY,KACR5pB,KAAKsiS,kBAAoB,IAAIjB,EAAuB,GAE5D,CAIA,aAAI51O,GACA,OAAOzrD,KAAKwuP,UAChB,CAKA,eAAIohC,GACA,OAAO5vR,KAAK0iS,YAChB,CAIA,YAAIz3R,GACA,OAAOjL,KAAKo0E,WAAap0E,KAAKqiS,UAClC,CAQA,aAAIjb,GACA,OAAOpnR,KAAKiiS,UAChB,CAIA,YAAIhW,GACA,OAAOjsR,KAAKkiS,SAChB,CA2BQM,mBAAAA,IACJ54Q,EAAAA,EAAAA,KAAY,KACR5pB,KAAK0iS,cAAe,EACjB39R,EAAAA,MAAMkP,kBAAkBjU,KAAKg3H,uBAC5Bh3H,KAAKg3H,oBAAsBl6D,KAAKD,MACpC,GAER,CAEQmlO,mBAAAA,GACDhiS,KAAK0iS,eAAiB39R,EAAAA,MAAMkP,kBAAkBjU,KAAKg3H,sBAClDh3H,KAAKm1K,kBAAkB+0G,oBAAoB1uP,EAAAA,SAASsY,iBAAiBgpB,KAAKD,MAAS78D,KAAKg3H,uBAG5FptG,EAAAA,EAAAA,KAAY,KACR5pB,KAAK0iS,cAAe,EACpB1iS,KAAKg3H,oBAAsB,IAAI,GAEvC,GAoHHx+G,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,qBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,cAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAjMiC,CAAK,IAADkI,IAAAvI,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,gBAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAOF,CAAM,IAADiM,IAAAtM,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAAgI,IAAA,CAAA/H,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAMR,CAAM,IAADkM,IAAAvM,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,cAAAiI,IAAA,CAAAhI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAMJ,CAAM,IAADmM,IAAAxM,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,cAAAkI,IAAA,CAAAjI,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAIL,CAAM,IAADylC,IAAA9lC,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,aAAAolC,IAAA,CAAAnlC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAMN,CAAM,IAAD1J,I,kCC1E/B,IAAemwR,IAAoBprR,GAuCrCC,EAAAA,GAAWxK,IAAGyK,GAmDdD,EAAAA,GAAWxK,IAAG6K,GA1FZ,MAAe8qR,EAElBlwR,WAAAA,CAA+BvH,GAAoC,KAApCA,SAAAA,EAAiC,KA8BxDw1R,mBAAa,OACbkC,wBAAkD,GAAG,KACrDtkN,WAAkC,GAAG,KACrCukN,4BAAsB,OACtBC,KAAe,GAAG,KAClB3rH,wBAAkB,GAAAl/J,EAAAA,EAAAA,GAAA,uBAAAC,GAAA,WAclB6qR,uBAAiB,OAkBjBC,cAA6C,MAAI/qR,EAAAA,EAAAA,GAAA,uBAAAE,GAAA,WAyDjD8qR,aAAe,KACnB,GAAGvjS,KAAKmjS,uBAAuBjC,YAAclhS,KAAKwjS,aAAapc,UAAW,CACtEpnR,KAAKwjS,aAAaj9Q,QAClBvmB,KAAKy3K,mBAAmB4wG,wBACxB,MAAMob,EAAwBzjS,KAAKwL,SAAS63E,IAAIoxC,OAAOE,cAAaj1G,UAChE+jR,EAAsB73Q,MACtB,MAAM83Q,EAAoB1jS,KAAKkjS,wBAAwBv4M,WAAU+zB,GAAKA,IAAM+kL,IACzEC,GAAqB,GACpB1jS,KAAKkjS,wBAAwB7iQ,OAAOqjQ,EAAmB,SAGrD1jS,KAAK81H,QAAQ,IAGvB91H,KAAKkjS,wBAAwBvoR,KAAK8oR,EACtC,GA1IAzjS,KAAKghS,cAAgBhhS,KAAK2jS,sBAC1B3jS,KAAKmjS,uBAAyB,IAAIpC,GAAsB/gS,KAAKghS,eAC7DhhS,KAAKy3K,mBAAqBwrH,EAAqBW,yBAC/C5jS,KAAKqjS,kBAAoB,IAAIzB,GAAsB5hS,KAAKghS,eAAgB,IAAMhhS,KAAKy3K,qBAEnFz3K,KAAKkjS,wBAAwBvoR,KAAK3a,KAAKwL,SAAS63E,IAAIoxC,OAAOC,YAAY10H,KAAKujS,eAC5EvjS,KAAK4+E,WAAWjkE,MAAKlL,EAAAA,EAAAA,KAAS,IAAMjE,EAAS0rR,MAAM2M,eAAehzN,IAC1DA,EACA7wE,KAAK8jS,OAEL9jS,KAAK+jS,QACT,KAGJ/jS,KAAK4+E,WAAWjkE,MAAKlL,EAAAA,EAAAA,KACjB,IAAMzP,KAAK2rD,wBACXjsC,UACQskR,UACMhkS,KAAKumB,QACXvmB,KAAKy3K,mBAAmB8xG,8BAC5B,MAGRvwQ,EAAAA,EAAAA,IAAehZ,KAEnB,CAmBA,gBAAc0qD,GACV,OAAO1qD,KAAKghS,aAChB,CAIAzV,uBAAAA,CAAwB0Y,GACpBjkS,KAAKy3K,mBAAqBwsH,CAC9B,CAEUN,mBAAAA,GACN,MAAMj5O,EAAe18C,SAASsvH,cAAc,SAQ5C,OAPA5yE,EAAa2B,aAAc,EAC3B3B,EAAahjB,MAAQ1nC,KAAKwL,SAAS0rR,MAAM2M,aACzCn5O,EAAaiwB,UAAW,EACxBjwB,EAAaxiB,MAAO,EACpBwiB,EAAakiO,QAAU,OACvBliO,EAAa5hD,MAAMpH,MAAQ,OAC3BgpD,EAAa5hD,MAAMzH,OAAS,OACrBqpD,CACX,CAGA,gBAAc84O,GAEV,IAAIxjS,KAAKmjS,uBAAuBjC,WAC5B,MAAM,IAAIjxN,MAAM,sGAOpB,OAJIjwE,KAAKsjS,gBACLtjS,KAAKsjS,cAAgBtjS,KAAKkkS,yBAGvBlkS,KAAKsjS,aAChB,CAEA,cAAIpmE,GACA,MAAO,CACHx7N,MAAO1B,KAAK0qD,aAAao4O,WACzBzhS,OAAQrB,KAAK0qD,aAAaq4O,YAElC,CAIA,kBAAI9V,GACA,OAAOjtR,KAAKmkS,eAChB,CAEA,kBAAYlX,CAAenjR,IACvB8f,EAAAA,EAAAA,KAAY,KACR5pB,KAAKmkS,gBAAkBr6R,CAAK,GAGpC,CAEA,aAAI2hD,GACA,OAAOzrD,KAAKqjS,kBAAkB53O,SAClC,CAEA,eAAImkO,GACA,OAAO5vR,KAAKqjS,kBAAkBzT,WAClC,CAEA,YAAI3kR,GACA,OAAOjL,KAAKqjS,kBAAkBp4R,QAClC,CAEA,aAAIm8Q,GACA,OAAOpnR,KAAKqjS,kBAAkBjc,SAClC,CACA,YAAI6E,GACA,OAAOjsR,KAAKqjS,kBAAkBpX,QAClC,CAEA,WAAIp7M,GACA,OAAO7wE,KAAK0qD,aAAahjB,KAC7B,CAqBA+kP,MAAAA,CAAO0U,EAA+BiD,GAC/BA,GACCpkS,KAAKqkS,wBAAwBD,GAEjCpkS,KAAKmjS,uBAAuB1W,OAAO0U,EACvC,CAEAzU,MAAAA,GACI1sR,KAAKmjS,uBAAuBzW,QAChC,CAEA2X,uBAAAA,CAAwB5pN,GACpBh+D,OAAOspC,KAAK00B,GAAQ7uB,SAAQ04O,IACxBtkS,KAAKghS,cAAcl4R,MAAMw7R,GAAa7pN,EAAO6pN,EAAU,GAE/D,CAGA35O,OAAAA,GAAiB,IAAD45O,EACZvkS,KAAKmjS,uBAAuBx4O,UAC5B3qD,KAAKqjS,kBAAkB14O,UAEvB3qD,KAAKkjS,wBAAwBt3O,SAAQ44O,IACjCA,EAAS54Q,KAAK,IAElB5rB,KAAKkjS,wBAA0B,GAE/BljS,KAAK4+E,WAAWhzB,SAAQhjB,GAAKA,MAC7B5oC,KAAK4+E,WAAa,GAEA,QAAlB2lN,EAAAvkS,KAAKsjS,qBAAa,IAAAiB,GAAlBA,EAAoB55O,UACpB3qD,KAAKsjS,cAAgB,KAErBtjS,KAAKghS,cAAc5sR,IAAM,GACzBpU,KAAKghS,cAAcn2O,OACnB7qD,KAAKghS,cAAgB,IACzB,CAEAyD,SAAAA,CAAU75O,GACHA,EACIA,IAAW5qD,KAAKghS,cAAcp2O,SAC7B5qD,KAAKghS,cAAcp2O,OAAS,GAC5B5qD,KAAKitR,gBAAiB,GACtB7mQ,EAAAA,GAAAA,GAAawkC,GACRrpC,MAAK,KACFvhB,KAAKghS,cAAcp2O,OAASA,EAC5B5qD,KAAKitR,gBAAiB,CAAI,IAE7BnvN,OAAOpvD,IACJ1O,KAAKy3K,mBAAmB0xG,wBAAwBz6Q,EAAI,MAIhE1O,KAAKghS,cAAcp2O,OAAS,GAC5B5qD,KAAKitR,gBAAiB,EAE9B,CAEQyX,eAAAA,CAAgBtwR,GACjBpU,KAAKojS,OAAShvR,IACbpU,KAAKqjS,kBAAkBlB,iBACvBniS,KAAKojS,KAAOhvR,EAEpB,CAEA,aAAI+yQ,GACA,OAAOnnR,KAAKqjS,kBAAkBlc,SAClC,CAEA,0BAAIW,GACA,OAAO9nR,KAAK0qD,aAAa80K,QAC7B,CAEA,yBAAI7zK,GACA,QAAG3rD,KAAK2kS,iBACG3kS,KAAKmnR,UAAUzmK,mBAAqB1gH,KAAK2kS,gBAAgBjkL,iBAIxE,CAEA,aAAMksK,CAAQx4Q,EAAa/N,GACvB,IAII,GAFArG,KAAK0kS,gBAAgBtwR,GAElBpU,KAAK2rD,sBACJ,OAGA3rD,KAAKghS,cAAct5P,QACnB1nC,KAAKghS,cAAct5P,OAAQ,GAG/B1nC,KAAKykS,UAAUp+R,EAAQukD,cAEjB5qD,KAAKwjS,aAAa5W,QAAQx4Q,EACpC,CAAE,MAAO1F,GACL,GAAGizR,GAAkBjzR,GAEjB,MADA1O,KAAKy3K,mBAAmBkxG,mBAAmBj6Q,GACrCA,CAEd,CAEJ,CAEA,UAAM4hB,CAAKlc,EAAa/N,GACpB,IAQI,GANArG,KAAK0kS,gBAAgBtwR,IAErBwV,EAAAA,EAAAA,KAAY,KACR5pB,KAAK2kS,gBAAkBt+R,EAAQowH,cAAc,IAG9Cz2H,KAAK2rD,sBACJ,OAGJ3rD,KAAKykS,UAAUp+R,EAAQukD,cAEjB5qD,KAAKwjS,aAAalzQ,KAAKlc,GAEzBpU,KAAKghS,cAAct5P,QAAU1nC,KAAKwL,SAAS0rR,MAAM2M,eACjD7jS,KAAKghS,cAAct5P,OAAQ,GAG/B1nC,KAAKy3K,mBAAmBswG,mBAE5B,CAAE,MAAOr5Q,GACL,GAAGizR,GAAkBjzR,GAEjB,MADA1O,KAAKy3K,mBAAmBoxG,gBAAgBn6Q,GAClCA,CAEd,CACJ,CAGA,eAAM08C,GACF,UACUprD,KAAKwjS,aAAap4O,YAErBprD,KAAKghS,cAAct5P,QAAU1nC,KAAKwL,SAAS0rR,MAAM2M,eAChD7jS,KAAKghS,cAAct5P,OAAQ,GAG/B1nC,KAAKy3K,mBAAmBwwG,wBAC5B,CAAE,MAAOv5Q,GAEL,MADA1O,KAAKy3K,mBAAmBsxG,qBAAqBr6Q,GACvCA,CACV,CAEJ,CAEA,WAAM6X,GACFvmB,KAAKwjS,aAAaj9Q,OACtB,CAEA,YAAMuvG,GACF,UACU91H,KAAKwjS,aAAa1tK,SACxB91H,KAAKy3K,mBAAmB0wG,yBAC5B,CAAE,MAAOz5Q,GAEL,MADA1O,KAAKy3K,mBAAmBwxG,sBAAsBv6Q,GACxCA,CACV,CACJ,CAGAo1R,IAAAA,GACI9jS,KAAK0qD,aAAahjB,OAAQ,EAC1B1nC,KAAKy3K,mBAAmBkzG,YAC5B,CAEAoZ,MAAAA,GACI/jS,KAAK0qD,aAAahjB,OAAQ,EAC1B1nC,KAAKy3K,mBAAmBozG,cAC5B,GACH1yQ,GArSkByrR,yBAAoD,IC7ChE,MAEH7b,iBAAAA,GACItjR,QAAQC,IAAI,sBAChB,CAEAujR,sBAAAA,GACIxjR,QAAQC,IAAI,4BAChB,CAEAyjR,uBAAAA,GACI1jR,QAAQC,IAAI,6BAChB,CAEA2jR,qBAAAA,GACI5jR,QAAQC,IAAI,4BAChB,CAEAikR,kBAAAA,CAAmBh6Q,GACflK,QAAQkK,MAAM,gCAAD/O,OAAiC+O,EAAMoX,KAAI,iBAAAnmB,OAAgB+O,EAAMgsC,SAAWhsC,EAC7F,CAEAk6Q,eAAAA,CAAgBl6Q,GACZlK,QAAQkK,MAAM,6BAAD/O,OAA8B+O,EAAMoX,KAAI,iBAAAnmB,OAAgB+O,EAAMgsC,SAAWhsC,EAC1F,CAEAo6Q,oBAAAA,CAAqBp6Q,GACjBlK,QAAQkK,MAAM,0BAA2BA,EAC7C,CAEAs6Q,qBAAAA,CAAsBt6Q,GAClBlK,QAAQkK,MAAM,2BAA4BA,EAC9C,CAEA06Q,mBAAAA,CAAoBhvJ,GACbA,EAAqB,IACpB51H,QAAQC,IAAI,0BAAD9E,OAA2By6H,GAE9C,CAEAkvJ,2BAAAA,GACI9kR,QAAQC,IAAI,kCAChB,CAEAykR,uBAAAA,CAAwBx6Q,GACpBlK,QAAQC,IAAI,8BAA+BiK,EAC/C,CAEAo7Q,4BAAAA,CAA6BC,EAAsC3C,GAC/D5iR,QAAQC,IAAI,8BAAD9E,OAA+BoqR,EAAmBtoR,MAAK,OAAA9B,OAAMoqR,EAAmB3oR,OAAM,QAAAzB,OAAOynR,EAAkB3lR,MAAK,OAAA9B,OAAMynR,EAAkBhmR,QAC3J,CAEA6oR,mBAAAA,CAAoBC,GACbA,EAAc5tP,aAAe,GAC5B93B,QAAQC,IAAI,yBAA0BylR,EAAc5tP,aAE5D,CAEAouP,UAAAA,GACIlmR,QAAQC,IAAI,eAChB,CAEAmmR,YAAAA,GACIpmR,QAAQC,IAAI,iBAChB,GDyCeoO,GA5DuFqF,GAAAK,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,WAU5C,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAmDtB,CAAM,IAAD1J,IE1GrC,MAAM8xR,GAET7xR,WAAAA,CAAoB23C,GAAiC,KAAjCA,aAAAA,CACpB,CAEA,aAAI08N,GACA,OAAQpnR,KAAK0qD,aAAaxlC,MAC9B,CAEQ2/Q,UAAAA,CAAWzwR,GACf,OAAGpU,KAAK0qD,aAAat2C,MAAQA,IACzBpU,KAAK0qD,aAAat2C,IAAMA,GACjB,EAIf,CAEA,aAAMw4Q,CAAQx4Q,GACPpU,KAAK6kS,WAAWzwR,IACfpU,KAAK0qD,aAAaG,MAE1B,CAEA,UAAMv6B,CAAKlc,GACPpU,KAAK6kS,WAAWzwR,SACVpU,KAAK0qD,aAAap6B,MAC5B,CAEA,eAAM86B,GACF,MAAMh3C,EAAMpU,KAAK0qD,aAAat2C,IAC9BpU,KAAK0qD,aAAat2C,IAAM,GACxBpU,KAAK0qD,aAAaG,aACZ7qD,KAAKswB,KAAKlc,EACpB,CAEAmS,KAAAA,GACOvmB,KAAKonR,WACJpnR,KAAK0qD,aAAankC,OAE1B,CAEA,YAAMuvG,GACC91H,KAAK0qD,aAAat2C,MAAQpU,KAAKonR,iBACxBpnR,KAAK0qD,aAAap6B,MAEhC,CAEAq6B,OAAAA,GACI3qD,KAAK0qD,aAAe,IACxB,EC/CG,MAAMo6O,GAGT/xR,WAAAA,CAAoB23C,GAAiC,KAAjCA,aAAAA,EAA8B,KAU1CmwE,kBAAY,OACZuoK,KAAuB,KAV3BpjS,KAAK66H,aAAe,IAAID,GAAAA,IAAG11H,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACtB01H,GAAAA,GAAIO,eAAa,IACpBC,mBAAmB,KAGvBp7H,KAAK66H,aAAauC,YAAYp9H,KAAK0qD,aAEvC,CAKA,aAAI08N,GACA,OAAQpnR,KAAK0qD,aAAaxlC,MAC9B,CAEQ6/Q,kBAAAA,CAAmB3wR,GACtB,OAAO,IAAI4mB,SAAc,CAACC,EAASimK,KAChC,IAAI8jG,EAAyC,GAE7C,MAAMC,EAAcA,KAChBD,EAAoBp5O,SAAQyyI,GAAeA,MAC3C2mG,EAAsB,EAAE,EAEtBE,EAAuBA,KACzBD,IACAhqQ,GAAS,EAGPkqQ,EAAaA,CAACn+Q,EAAqBkD,KACrC+6Q,IACA/jG,EAAOh3K,EAAK,EAGhBlqB,KAAK66H,aAAasC,GAAGvC,GAAAA,GAAAA,OAAW+B,gBAAiBuoK,GACjDF,EAAoBrqR,MAAK,IAAM3a,KAAK66H,aAAajvG,IAAIgvG,GAAAA,GAAAA,OAAW+B,gBAAiBuoK,KAEjFllS,KAAK66H,aAAasC,GAAGvC,GAAAA,GAAAA,OAAW6B,MAAO0oK,GACvCH,EAAoBrqR,MAAK,IAAM3a,KAAK66H,aAAajvG,IAAIgvG,GAAAA,GAAAA,OAAW6B,MAAO0oK,KAEvEnlS,KAAK66H,aAAaW,WAAWpnH,EAAI,GAEzC,CAEA,aAAMw4Q,CAAQx4Q,GACPpU,KAAKojS,OAAShvR,GACbpU,KAAKojS,KAAOhvR,QACNpU,KAAK+kS,mBAAmB/kS,KAAKojS,OAEnCpjS,KAAK66H,aAAamC,WAE1B,CAEA,UAAM1sG,CAAKlc,SACDpU,KAAK4sR,QAAQx4Q,SACbpU,KAAK0qD,aAAap6B,MAC5B,CAEA,eAAM86B,GACF,MAAMh3C,EAAMpU,KAAKojS,KACjBpjS,KAAKojS,KAAO,SACNpjS,KAAKswB,KAAKlc,EACpB,CAEAmS,KAAAA,GACOvmB,KAAKonR,WACJpnR,KAAK0qD,aAAankC,QAGtBvmB,KAAK66H,aAAaoB,UACtB,CAEA,YAAMnG,GACC91H,KAAKojS,OAASpjS,KAAKonR,iBACZpnR,KAAKswB,KAAKtwB,KAAKojS,KAE7B,CAEAz4O,OAAAA,GACI3qD,KAAK66H,aAAauqK,cAClBplS,KAAK66H,aAAalwE,UAClB3qD,KAAK66H,aAAe,KACpB76H,KAAK0qD,aAAe,IACxB,ECvFG,MAAM26O,WAAkCpC,GACjCiB,qBAAAA,GACN,OAAIlkS,KAAKwL,SAASqI,OAAOmI,GAAGwa,WAAax2B,KAAKwL,SAAS0rR,MAAMoO,2BAA2BtlS,KAAK0qD,cAClF,IAAIk6O,GAA6B5kS,KAAK0qD,cAG1C,IAAIo6O,GAA0B9kS,KAAK0qD,aAC9C,ECLG,MAAM66O,WAAqB7mN,EAAAA,EAC9B3rE,WAAAA,CAAYvH,GACR4M,MAAM5M,GAAU,KAsBXg6R,0BAAoB,EArBzB,MAAM96O,EAAe18C,SAASsvH,cAAc,SAC5Ct9H,KAAKwlS,qBAAuBxlS,KAAKslS,2BAA2B56O,IAAiBkwE,GAAAA,GAAAA,aACjF,CAGA,gBAAIipK,GACA,OAAO7jS,KAAKwL,SAASkE,KAAKihE,YAAYC,MAAMC,OAChD,CAEA40N,WAAAA,GACIzlS,KAAKwL,SAASkE,KAAKihE,YAAYC,MAAMO,QACzC,CAGAm0N,0BAAAA,CAA2B56O,GACvB,MACM0uE,EAAqB1uE,EAAa2uE,YArBjB,iCAuBvB,MAH0B,CAAC,WAAY,SAGdn8G,SAASk8G,EACtC,CAKA+9J,0BAAAA,GACI,OAAO,IAAIkO,GAA0BrlS,KAAKwL,SAC9C,E,mBCpCG,MAAMk6R,GAA+BjoS,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mC,OCC/C,MAAM+nS,GAA8BloS,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,kJAGxCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,GAC1CqF,GAAAA,EAAQC,IAAI+8B,WAAW78B,S,OCL1B,MAAMgiS,GAA0CnoS,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6CAC3De,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQqiD,IAAI,I,OCDnC,MAAMwiP,GAAmCpoS,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sC,UCC1D,MAAMkoS,GAAgDroS,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4dAOpCe,IAAA,IAAC,MAACT,GAAMS,EAAA,MAAK,IAAMT,EAAMa,OAAOC,OAAO+mS,2BAA6B,GAAG,IAa7FC,IAAgDvoS,EAAAA,GAAAA,IAAOqoS,GAAProS,CAAqDqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,iJAO9FqoS,IAAyCh0R,EAAAA,GAAAA,GAAc6zR,IAC/D3zR,WAAW6zR,IACX5zR,QCrBE,MAAM8zR,WAAoC1mS,GAAAA,EAC7CC,MAAAA,GACI,OAAO+I,EAAAA,GAAAA,MAACk9R,GAA4B,CAAA3lS,SAAA,EAChCL,EAAAA,GAAAA,KAACimS,GAA2B,CAAA5lS,UACxByI,EAAAA,GAAAA,MAACo9R,GAAuC,CAAA7lS,SAAA,EACpCL,EAAAA,GAAAA,KAAC0tN,GAAqB,CAAArtN,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,iCAC5DnW,EAAAA,GAAAA,KAAC2tN,GAAuB,CAAAttN,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,6CAGtErN,EAAAA,GAAAA,MAACq9R,GAAgC,CAAA9lS,SAAA,EAC7BL,EAAAA,GAAAA,KAACywB,GAAAA,EAAiB,CACdpb,SAAU/U,KAAKlC,MAAMiX,SACrBsb,eAAgBrwB,KAAKlC,MAAMqoS,gCAG/BzmS,EAAAA,GAAAA,KAACumS,GAAsC,CAACtmS,UAAU,kCAG9D,E,gBCnBJ,MAAMymS,GAAwC5qQ,EAAAA,SAASwB,YAAY,GAC7DqpQ,GAAiD,0BAEhD,IAAMC,IAA0BzuR,GAalCC,EAAAA,GAAWxK,KAAG6K,GAbZ,cAAyCumE,EAAAA,EAgB5C3rE,WAAAA,CAAYvH,EAAmCujB,GAC3C3W,MAAM5M,GAAU,KAdZ+6R,4BAAsB,OACtBC,mCAA6B,OAC7BC,sCAAgC,OAChCC,gCAA0B,OAC1BC,2BAAqB,OACrBC,gCAA0B,OAC1BC,sBAAgB,OAChBC,qBAAsC,KAAK,KAC3CC,iBAAwC,MAAIxuR,EAAAA,EAAAA,GAAA,2BAAAC,GAAA,WAmH5CwuR,yBAA2B,KAC/BhnS,KAAKu0B,eAAe,CAAEtc,OAAQ,qBAAsBqiB,MAAOt6B,KAAK8mS,sBAAuB,EACzF,KAEMG,6CAA+C,KACnDjnS,KAAKu0B,eAAe,CAAEtc,OAAQ,sBAAuBqiB,MAAOt6B,KAAK8mS,sBAAuB,EAC1F,KAEMI,gCAAkC,KACtClnS,KAAKu0B,eAAe,CAAEtc,OAAQ,aAAcqiB,MAAOt6B,KAAK8mS,sBAAuB,EACjF,KAEMK,kBAAoBnnS,KAAKgnS,0BAvH7BhuR,EAAAA,EAAAA,IAAehZ,MAEfA,KAAKonS,gBAAgBr4Q,GAErB/uB,KAAKwL,SAASouF,YAAYr4E,MAAKq4E,IAC3B55F,KAAKyP,UAAS,IAAMmqF,EAAYqyG,qBAAqBA,IACjDjsM,KAAKkxQ,oBAAsBjlE,CAAkB,GAC9C,CAAE/vL,iBAAiB,GAAO,IAGjClc,KAAKyP,UAAS,IAAMzP,KAAKwL,SAASkE,KAAKC,eACnC,KACS3P,KAAKwL,SAASkE,KAAKC,cACpB3P,KAAKqnS,6BAETrnS,KAAKsnS,qBAAqB,GAC3B,CACHprR,iBAAiB,GAEzB,CAGOqrR,SAAAA,CAAUl4E,GACb,OAAOrvN,KAAKwL,SAAS6wC,QAAQizK,gBAAgB,CACzC//L,GAAI8/L,EAAY9/L,IAAM,4BACtB6sB,cAAYl3C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACLmqN,EAAYjzK,cAAY,IAC3Bz8C,WAAWG,EAAAA,GAAAA,IAAQ,kCAEvBkwL,cAAgBhsK,IACLtkB,EAAAA,GAAAA,KAACwmS,IAA2BhhS,EAAAA,EAAAA,GAAA,GAAgCmqN,EAAYnzK,cAAtC,sBAE7Cy8N,aAActpD,EAAYspD,aAC1BppD,cAAeF,EAAYE,cAC3ByoD,iBAAkBA,KAAOh4Q,KAAKkxQ,qBAEtC,CAEAk2B,eAAAA,CAAgBr4Q,GACZ/uB,KAAKumS,uBAA+B,OAANx3Q,QAAM,IAANA,GAAAA,EAAQy4Q,sBAAwBhsQ,EAAAA,SAAS6tG,MAAMt6G,EAAOy4Q,uBAAyBhsQ,EAAAA,SAAS6tG,MAAMrpI,KAAKwL,SAASye,cAAc6P,gBAAgB2tQ,oBAAoBD,uBAC5LxnS,KAAKymS,iCAAyC,OAAN13Q,QAAM,IAANA,GAAAA,EAAQ24Q,yBAA2B34Q,EAAO24Q,yBAA2B1nS,KAAKwL,SAASye,cAAc6P,gBAAgB2tQ,oBAAoBC,yBAC7K1nS,KAAKwmS,8BAAgCxmS,KAAK2nS,+CAC1C3nS,KAAK6mS,iBAAyB,OAAN93Q,QAAM,IAANA,GAAAA,EAAQ64Q,gBAAkBpsQ,EAAAA,SAAS6tG,MAAMt6G,EAAO64Q,iBAAmBpsQ,EAAAA,SAAS6tG,MAAMrpI,KAAKwL,SAASye,cAAc6P,gBAAgB2tQ,oBAAoBG,iBAC1K5nS,KAAK0rJ,aACL1rJ,KAAK6nS,qBACL7nS,KAAKsnS,qBACT,CAEQ57I,UAAAA,GACJ1rJ,KAAKwL,SAASouF,YAAYr4E,MAAKq4E,IACvBA,EAAYqyG,oBACZjsM,KAAKsnS,qBACT,IAGJtnS,KAAKwL,SAAS63E,IAAIoxC,OAAOye,YAAYlzI,KAAK8nS,yBAAyBrxQ,KAAKz2B,OACxEA,KAAKwL,SAAS63E,IAAIoxC,OAAOG,WAAW50H,KAAK+nS,oCAAoCtxQ,KAAKz2B,MACtF,CAEQsnS,mBAAAA,GACAtnS,KAAKwL,SAASkE,KAAKC,cACnB3P,KAAKgoS,0BACLhoS,KAAKioS,+BAELjoS,KAAK6nS,oBAEb,CAEQK,0BAAAA,GACAloS,KAAK0mS,4BACL36Q,cAAc/rB,KAAK0mS,2BAE3B,CAEQoB,wBAAAA,GACJ9nS,KAAKkoS,6BACLloS,KAAKgoS,yBACT,CAEQA,uBAAAA,GACJhoS,KAAK0mS,2BAA6Bp0Q,aAAY,KAC1CtyB,KAAKmoS,gCAAgC,GACtCnoS,KAAKumS,uBAAuB7lL,kBACnC,CAEQmnL,kBAAAA,GACJ7nS,KAAKkoS,6BACDloS,KAAK2mS,uBAAuB3mS,KAAK2mS,sBAAsBtoR,UAC3Dre,KAAK4mS,4BAA6B,CACtC,CAEQmB,mCAAAA,GACA/nS,KAAK4mS,4BAA8B5mS,KAAK+mS,mBACxC/mS,KAAKmnS,kBAAoBnnS,KAAKinS,6CAC9BjnS,KAAK+mS,mBACL/mS,KAAK+mS,iBAAmB,KAEhC,CAEQkB,2BAAAA,GACJjoS,KAAK2mS,sBAAwB3mS,KAAKwL,SAAS63E,IAAI0/D,2BAA2B,CACtEqlJ,8BAA+BhC,GAC/BiC,uBAAwBroS,KAAK8nS,yBAAyBrxQ,KAAKz2B,OAEnE,CAiBQsoS,SAAAA,GACJtoS,KAAK4mS,4BAA6B,CACtC,CAEQ2B,SAAAA,GACJvoS,KAAK4mS,4BAA6B,EAClC5mS,KAAK8nS,2BACL9nS,KAAKmnS,mBACT,CAEA,oCAAcgB,GAAkC,IAADniL,EAAAwiL,EACtCxoS,KAAKwL,SAASye,cAAc6P,gBAAgB2tQ,oBAAoBhzF,gBAKjEz0M,KAAK4mS,4BACLz8R,QAAuC,QAAhC67G,QAAQhmH,KAAKwL,SAAS2iC,kBAAU,IAAA63E,OAAA,EAA/BA,EAAkC53E,qBAC1CpuC,KAAKwL,SAASs+O,QAAQ3hM,QACtBnoD,KAAKwL,SAAS4vB,OAAOkrK,gBAKiC,sBAAhB,QAAtCkiG,EAAAxoS,KAAKwL,SAAS6D,OAAOm1I,yBAAiB,IAAAgkJ,OAAA,EAAtCA,EAAwCj5R,aAIxCvP,KAAKwmS,+BAAiCxmS,KAAKymS,iCAC3CzmS,KAAKwL,SAAS2L,OAAO+0E,MAAM,6EAADtsF,OAA8EI,KAAKymS,iCAAgC,aAIjJzmS,KAAKyoS,yBACAlnR,MAAKmnR,GAAsB1oS,KAAK2oS,sCAAsCD,KACtEnnR,MAAKqnR,IACF5oS,KAAK8mS,qBAAuB8B,EACrB5oS,KAAK6oS,wBAAwBD,MAEvCrnR,MAAKunR,GAAqB9oS,KAAK+oS,aAAaD,MACrD,CAEA,kBAAcC,CAAa91R,GACvBjT,KAAKmnS,kBAAoBnnS,KAAKgnS,yBAE9B,MAAMgC,EAAiBhpS,KAAKunS,UAAU,CAClCnrP,aAAc,CACVn4B,QAASuX,EAAAA,SAASwB,YAAYh9B,KAAK6mS,iBAAiBtqQ,cACpDi8O,iBAAiB,GAErBt8N,aAAc,CACVnnC,SAAU9B,EAAS8B,SACnBoxR,6BAA8BA,KACtBnmS,KAAK4mS,4BAA8B5mS,KAAK+mS,mBACxC/mS,KAAKmnS,kBAAoBnnS,KAAKknS,gCAC9BlnS,KAAK+mS,mBACL/mS,KAAK+mS,iBAAmB,MAE5B9zR,EAASO,KAAK,CAAEL,YAAY,GAAO,GAG3CwlQ,aAAcA,KACV34Q,KAAKsoS,YACLtoS,KAAKipS,gCACLjpS,KAAKu0B,eAAe,CAAEtc,OAAQ,OAAQqiB,MAAOt6B,KAAK8mS,qBAAsBh9R,MAAO,EAAI9J,KAAKwmS,+BAAgC,EAE5Hj3E,cAAeA,KACXvvN,KAAKuoS,WAAW,IAGxBvoS,KAAK+mS,iBAAiC,OAAdiC,QAAc,IAAdA,OAAc,EAAdA,EAAgB/wQ,KAC5C,CAEA,4BAAcwwQ,GACV,MAAMS,EAAsBlpS,KAAKwL,SAAS2P,MAAM4lH,oBAAoBnU,UACpE,GAAmC,IAA/Bs8K,EAAoBhpS,OAAc,CAAC,IAAD6wJ,EAClC,MAAMpT,EAAkE,QAAlDoT,EAAG/wJ,KAAKwL,SAASqlJ,YAAYC,6BAAqB,IAAAC,OAAA,EAA/CA,EAAiDnkC,UAE1E,OAAI7nH,EAAAA,MAAMgrE,QAAQ4tE,IAAqBA,EAAiBz9I,OAAS,EACtDy9I,EAAiBtnI,KAAK8jB,MAAM9jB,KAAKC,SAAWqnI,EAAiBz9I,UAEpEF,KAAKwL,SAAS2L,OAAO+0E,MAAM,qFACpBlxD,QAAQkmK,QAAO,GAE9B,CACI,OAAOgoG,EAAoB,EAEnC,CAEA,2CAAcP,CAAsCQ,GAChD,MAAMj2I,QAAwBlzJ,KAAKwL,SAAS2P,MAAM+mH,mBAAmBinK,EAAoB,GACzF,OAAIpkS,EAAAA,MAAMgrE,QAAQmjF,IAA+C,IAA3BA,EAAgBhzJ,QAClDF,KAAKwL,SAAS2L,OAAO+0E,MAAM,kGAADtsF,OAAmGupS,IACtHnuQ,QAAQkmK,OAAO,sFAEnBhuC,EAAgB78I,KAAK8jB,MAAM9jB,KAAKC,SAAW48I,EAAgBhzJ,QACtE,CAEA,6BAAc2oS,CAAwB9zR,GAClC,MAAMq0R,QAAqBppS,KAAKwL,SAAS2P,MAAM8mH,YAAYltH,GAC3D,OAAKq0R,IACDppS,KAAKwL,SAAS2L,OAAO+0E,MAAM,+FAADtsF,OAAgGmV,IACnHimB,QAAQkmK,QAAO,GAG9B,CAEQmoG,wCAAAA,GACJrpS,KAAKwL,SAASoyC,aAAa+pF,QAAQ0+J,GAAwC5kR,KAAKC,UAAU,CAAE4nR,yBAA0BtpS,KAAKwmS,+BAAiC,IAChK,CAEQmB,4CAAAA,GACJ,IAAI,yBAAE2B,GAA6BtpS,KAAKwL,SAASoyC,aAAaijF,QAAQwlK,KAA2C,EAKjH,OAJKthS,EAAAA,MAAMC,SAASskS,KAChBA,EAA2B,GAGxBA,CACX,CAEQjC,0BAAAA,GACJrnS,KAAKwmS,8BAAgC,EACrCxmS,KAAKqpS,0CACT,CAEQJ,6BAAAA,GACJjpS,KAAKwmS,gCACLxmS,KAAKqpS,0CACT,CAEQ90Q,cAAAA,CAAegqP,GACnBv+Q,KAAKwL,SAASqd,UAAUy2G,wBACpB,sBACa,OAAbi/I,QAAa,IAAbA,OAAa,EAAbA,EAAetmQ,OACF,OAAbsmQ,QAAa,IAAbA,OAAa,EAAbA,EAAejkP,MACF,OAAbikP,QAAa,IAAbA,OAAa,EAAbA,EAAez0Q,MAEvB,IApROy/R,MAAQ,6BAYAz2R,GAZ4BqF,GAAAK,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,uBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAab,CAAK,IAAD1J,ICxB/B,MAAM02R,IAAsBhrS,EAAAA,GAAAA,GAAU,uBCIhCirS,IAA6DlqS,EAAAA,GAAAA,KAAUzB,IAE5E4B,EAAAA,GAAAA,KAAC8pS,GAAmB,CAACrhP,OAAQrqD,EAAMqqD,OAAOpoD,SACrCjC,EAAMkkJ,Y,gBCPZ,MAAM0nJ,IAAqBlrS,EAAAA,GAAAA,GAAU,sBCO/BmrS,IAA2DpqS,EAAAA,GAAAA,KAAUzB,IAE1E0K,EAAAA,GAAAA,MAACkhS,GAAkB,CAACE,gBAAiB9rS,EAAM8rS,gBAAiBviS,QAASvJ,EAAMwqD,aAAavoD,SAAA,CACnFjC,EAAM2K,OACP/I,EAAAA,GAAAA,KAACnB,GAAAA,EAAoB,CAAC4pD,OAAQrqD,EAAMqqD,cCJnC0hP,IAA+CtqS,EAAAA,GAAAA,KAAUzB,IAClE,MAAOqqD,EAAQC,IAAa16C,EAAAA,GAAAA,WAAS,GAMrC,OACIlF,EAAAA,GAAAA,MAAA,OAAAzI,SAAA,EACIL,EAAAA,GAAAA,KAACiqS,GAAwB,CACrBlhS,MAAO3K,EAAM2K,MACb0/C,OAAQA,EACRyhP,gBAAiB9rS,EAAM8rS,gBACvBthP,aAVSA,KACjBF,GAAWD,EAAO,KAWdzoD,EAAAA,GAAAA,KAAC+pS,GAAyB,CAACznJ,QAASlkJ,EAAMkkJ,QAAS75F,OAAQA,MACzD,ICxBD2hP,IAA2BtrS,EAAAA,GAAAA,GAAU,4BCArCurS,IAA6BvrS,EAAAA,GAAAA,GAAU,8BCEvCwrS,IAA2CzqS,EAAAA,GAAAA,KAAUzB,IAC9D,MAAM0N,GAAWqD,EAAAA,GAAAA,KACjB,OACInP,EAAAA,GAAAA,KAACqqS,GAA0B,CAAAhqS,SACtByL,EAASoK,YAAYC,UAAU,2gGACP,I,gBCP9B,MAAMo0R,IAAuBzrS,EAAAA,GAAAA,GAAU,wBCQjC0rS,IAA+D3qS,EAAAA,GAAAA,KAAUzB,IAClF,MAAM0N,GAAWqD,EAAAA,GAAAA,KACjB,IAAIs7R,EAAkB3+R,EAAStN,MAAMuN,aAAaC,MAAMwmG,cACxD,OACI1pG,EAAAA,GAAAA,MAACyhS,GAAoB,CAAAlqS,SAAA,EACjBL,EAAAA,GAAAA,KAAA,OAAKoJ,MAAO,CAAC2D,QAAS,OAAQu5F,eAAgB,OAAOjmG,UACjDL,EAAAA,GAAAA,KAACizD,GAAAA,EAAoB,CAAChzD,WAAWG,EAAAA,GAAAA,IAAQ,kCAAmCuH,QAASA,IAAMvJ,EAAMk6B,cAAcC,aAEnHzvB,EAAAA,GAAAA,MAAA,OAAKM,MAAO,CAAC2D,QAAS,OAAQ29R,cAAe,SAAUjpP,WAAY,UAAUphD,SAAA,EACzEL,EAAAA,GAAAA,KAACyqS,EAAe,CAAC1jS,KAAM,IAAKqC,MAAO,CAAC2/B,YAAa,OAAQxkC,MAAOuH,EAAStN,MAAMuN,aAAa1D,OAAO0C,gBAClGe,EAASoK,YAAYC,UAAU,wIAEjB,ICpBlBw0R,IAAyB7rS,EAAAA,GAAAA,GAAU,0BCEnC8rS,IAAyC/qS,EAAAA,GAAAA,KAAUzB,IAC5D,MAAM0N,GAAWqD,EAAAA,GAAAA,KACjB,OACInP,EAAAA,GAAAA,KAAC2qS,GAAsB,CAAAtqS,SAClByL,EAASoK,YAAYC,UAAU,iBACX,ICIpB00R,IAA0EhrS,EAAAA,GAAAA,KAAUzB,IAC7F,MAAM0N,GAAWqD,EAAAA,GAAAA,KAKjB,OACIrG,EAAAA,GAAAA,MAACshS,GAAwB,CAAA/pS,SAAA,EACrBL,EAAAA,GAAAA,KAACwqS,GAA0B,CAAClyQ,cAAel6B,EAAMk6B,iBACjDxvB,EAAAA,GAAAA,MAAA,OAAKM,MAAO,CAAC29C,QAAS,QAAQ1mD,SAAA,EAC1BL,EAAAA,GAAAA,KAACmqS,GAAkB,CACfphS,OAAO/I,EAAAA,GAAAA,KAAC4qS,GAA4B,IACpCtoJ,SAAStiJ,EAAAA,GAAAA,KAACsqS,GAA8B,IACxCJ,iBAAiB,KAErBlqS,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACHM,OAAO,UACPpG,OAAO,mBACPa,WAAS,EACT9B,UAAW,+BAA+BI,SAEzCyL,EAASoK,YAAYC,UAAU,uBAEpCnW,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACHM,OAAO,YACPpG,OAAO,mBACPa,WAAS,EACT9B,UAAW,gCACX0H,QA1BF4wB,KACVzsB,EAASi+C,WAAW+gP,mBACpB1sS,EAAMk6B,cAAcC,OAAO,EAwBAl4B,SAEdyL,EAASoK,YAAYC,UAAU,mCAIjB,I,gBCvC5B,IAAM40R,IAAiB5yR,GAQzBC,EAAAA,GAAWxK,IAAGyK,GAMdE,EAAAA,GAAOC,MAAKpF,GAdV,cAAgC4rE,EAAAA,EACnC3rE,WAAAA,CAAY+sH,GACR1nH,MAAM0nH,IAAgBvnH,EAAAA,EAAAA,GAAA,uBAAAC,GAAA,OACtBQ,EAAAA,EAAAA,IAAehZ,MAEfA,KAAK0qS,gBAAkB1qS,KAAKwL,SAASoyC,aAAaijF,QAAQv+B,GAAAA,EAAiBqoM,eAC/E,CAIA,kBAAIA,GACA,OAAO3qS,KAAK0qS,eAChB,CAGAF,gBAAAA,GACIxqS,KAAK0qS,iBAAmB1qS,KAAK0qS,gBAC7B1qS,KAAKwL,SAASoyC,aAAa+pF,QAAQrlC,GAAAA,EAAiBqoM,gBAAgB,EACxE,CAEAjhP,yBAAAA,GACI,OAAI1pD,KAAK4qS,qBAKF,IAAI5vQ,SAAsBC,IAC7Bj7B,KAAKwL,SAAS4vB,OAAOgiB,WAAUplB,IAAiBt4B,EAAAA,GAAAA,KAAC6qS,GAA8B,CAC3EvyQ,cAAeA,KACf,CACAvvB,MAAOzI,KAAKwL,SAASoK,YAAYC,UAAU,eAC3C6uL,kBAAkB,EAClBX,4BAA4B,EAC5Bn7I,yBAAyB,EACzBQ,qBAAqB,EACrByU,0BAA0B,EAC1BvgB,oBAAoB,EACpBC,yBAAyB,GAC3B,IAfKviB,QAAQC,QAAQgiN,GAAaG,SAiB5C,CAEQwtD,oBAAAA,GACJ,OAAO5qS,KAAKwL,SAASuP,6BAA6B0uC,WAAWxuC,SACjE,GACHzC,IAAA2D,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,mBAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAL,EAAAA,EAAAA,GAAArJ,GAAAsJ,UAAA,oBAAArE,IAAA0E,OAAAC,yBAAA5J,GAAAsJ,UAAA,oBAAAtJ,GAAAsJ,WAAAtJ,ICgMM,MAAM+3R,GAST93R,WAAAA,CAAY+3R,EACA3zR,EACAymC,EACAmtP,EACAC,EACAC,EACAnrG,EACAorG,EACQC,EACAC,GAA+B,KAD/BD,mBAAAA,EAAoD,KACpDC,cAAAA,EAA4B,KAjBvC1pG,YAAM,OACNvqL,YAAM,OACNymC,kBAAY,OACZ9tC,YAAM,OACNs+H,SAAG,OACH27D,UAAI,OACJ+gG,sBAAgB,OAChBO,mBAAa,OAuLdC,eAAiB,IAAItP,IAAiCt8Q,UAC1D,MAAM,qBAAC6rR,SAA8B,gCACrC,OAAO,IAAIA,EAAqBvrS,KAAK,IACtC,KAKKwrS,UAAY,IAAIxP,IAA4Bt8Q,UAChD,MAAM,gBAAC+rR,SAAyB,gCAChC,OAAO,IAAIA,EAAgBzrS,KAAMA,KAAK2+F,sBAAsB,IAC7D,KAKK+sM,aAAe,IAAI5sH,GAAAA,GAA0B,IAAM,IAAIsZ,GAAmBp4L,QAAO,KAKjF2rS,mBAAqB,IAAI3P,IAAqCt8Q,UAClE,MAAM,yBAACksR,SAAkC,gCACzC,OAAO,IAAIA,EAAyB5rS,KAAK,IAC1C,KAKK6rS,sBAAwB,IAAI7P,IAAwCt8Q,UACxE,MAAM,4BAACosR,SAAqC9rS,KAAKqrS,cAAcvO,aAC/D,OAAO,IAAIgP,EAA4B9rS,KAAK,IAC7C,KAKK+rS,6BAA+B,IAAI/P,IAA+Ct8Q,UACtF,MAAM,mCAACssR,SAA4ChsS,KAAKqrS,cAAcvO,aACtE,OAAO,IAAIkP,EAAmChsS,KAAK,IACpD,KAKKisS,UAAY,IAAIntH,GAAAA,GAAuB,IAAM,IAAI7vC,GAAgBjvI,QAAO,KAKxEksS,aAAe,IAAIptH,GAAAA,GAA+B,IAAM,IAAIygB,GAAwBv/L,QAAO,KAK3FmsS,UAAY,IAAInQ,IAA4Bt8Q,UAChD,MAAM,gBAAC0sR,SAAyBpsS,KAAKqrS,cAAczO,aACnD,OAAO,IAAIwP,EAAgBpsS,KAAK,IACjC,KAKKqsS,kBAAoB,IAAIvtH,GAAAA,GAA+B,IAAM,IAAIoW,GAAwBl1L,QAAO,KAKhGssS,aAAe,IAAIxtH,GAAAA,GAA0B,IAAM,IAAI16B,GAAmBpkJ,QAAO,KAKjFusS,kBAAoB,IAAIztH,GAAAA,GAA+B,IAAM,IAAIs1E,GAAwBp0P,QAAO,KAKhGwsS,OAAS,IAAI1tH,GAAAA,GAAoB,IAAM,IAAIj/C,GAAa7/H,QAAO,KAK/DysS,SAAW,IAAIzQ,IAA2Bt8Q,UAC9C,MAAM,eAACgtR,SAAwB1sS,KAAKqrS,cAAcxO,aAClD,OAAO,IAAI6P,EAAe1sS,KAAK,IAChC,KAKK2sS,WAAa,IAAI3Q,IAA6Bt8Q,UAClD,MAAM,iBAACktR,SAA0B5sS,KAAKqrS,cAAcxO,aACpD,OAAO,IAAI+P,EAAiB5sS,KAAK,IAClC,KAKK6sS,UAAY,IAAI7Q,IAA4Bt8Q,UAChD,MAAM,gBAACotR,SAA0B9sS,KAAKqrS,cAAc3O,aACpD,OAAO,IAAIoQ,EAAgB9sS,KAAK,IACjC,KAKK+sS,eAAiB,IAAIjuH,GAAAA,GAA4B,IAAM,IAAIr7C,GAAsBzjI,KAAMA,KAAKmrS,sBAAqB,KAKjH6B,SAAW,IAAIluH,GAAAA,GAAsB,IAAM,IAAI0Y,GAAex3L,QAAO,KAKrEitS,WAAa,IAAIjR,IAA6Bt8Q,UAClD,MAAM,iBAACwtR,SAA0B,+BACjC,OAAO,IAAIA,EAAiBltS,KAAK,IAClC,KAKKmtS,UAAY,IAAIruH,GAAAA,GAAuB,IAAM,IAAIsuH,GAAAA,EAAgBt9R,OAAQ9P,KAAK49C,cAAc,CAAC3lC,EAAgBqiB,EAAgBxwB,IAAgB9J,KAAK6oB,UAAUw2G,mBAAmBpnH,EAAQqiB,EAAOxwB,OAAS,KAKvMujS,SAAW,IAAIvuH,GAAAA,GAAsB,IAAM,IAAIid,GAAe/7L,QAAO,KAKrEstS,YAAc,IAAIxuH,GAAAA,GAAyB,IAAM,IAAIu+D,GAAkBr9O,QAAO,KAK9EutS,cAAgB,IAAIzuH,GAAAA,GAAqC,IAAM,IAAIvyC,GAA8BvsI,QAAO,KAKxGwtS,gBAAkB,IAAI1uH,GAAAA,GAA6B,IAAM,IAAI6tB,GAAsB3sM,QAAO,KAK1FytS,aAAe,IAAI3uH,GAAAA,GAA0B,IAAM,IAAIlhD,GAAmB59H,QAAO,KAKjF0tS,iBAAmB,IAAI5uH,GAAAA,GAAuB,IAAM,IAAI9/C,GAAgBh/H,QAAO,KAM/E2tS,kBAAoB,IAAI7uH,GAAAA,GAAwB,IAAM,IAAI3/C,GAAiBn/H,QAAO,KAMlF4tS,2BAA6B,IAAI5R,IAAsCt8Q,UAC3E,MAAM,0BAACmuR,SAAmC,gCAC1C,OAAO,IAAIA,EAA0B7tS,KAAK,IAC3C,KAMK8tS,aAAe,IAAIhvH,GAAAA,GAAmB,IAAM,IAAIz3C,GAAYrnI,QAAO,KAOnE+tS,iBAAmB,IAAIjvH,GAAAA,GAAuB,IAAM,IAAIk+B,GAAgBh9M,KAAMA,KAAK2+F,yBAAwB,KAK3GqvM,4BAA8B,IAAIlvH,GAAAA,GAAkC,IAAM,IAAIyjC,GAA2BviN,QAAO,KAMhHiuS,QAAU,IAAIjS,IAA0Bt8Q,UAC5C,MAAM,cAACwuR,SAAuBluS,KAAKqrS,cAAc3O,aACjD,OAAO,IAAIwR,EAAcluS,KAAK,IAC/B,KAKKmuS,YAAc,IAAInS,IAA8Bt8Q,UACpD,MAAM,kBAAC0uR,SAA2BpuS,KAAKqrS,cAAc3O,aACrD,OAAO,IAAI0R,EAAkBpuS,KAAK,IACnC,KAKKquS,UAAY,IAAIvvH,GAAAA,GAAuB,IAAM,IAAIqY,GAAgBn3L,QAAO,KAKxEsuS,cAAgB,IAAItS,IAAgCt8Q,UACxD,MAAM,oBAAC6uR,SAA6B,gCACpC,OAAO,IAAIA,EAAoBvuS,KAAK,IACrC,KAKKwuS,QAAU,IAAI1vH,GAAAA,GAAqB,IAAM,IAAI/wC,GAAc/tI,QAAO,KAKlEyuS,gBAAkB,IAAIzS,IAAkCt8Q,UAC5D,MAAM,sBAACgvR,SAA+B1uS,KAAKqrS,cAAczO,aACzD,OAAO,IAAI8R,EAAsB1uS,KAAK,IACvC,KAKK2uS,wBAA0B,IAAI3S,IAA0Ct8Q,UAC5E,MAAM,8BAACkvR,SAAuC5uS,KAAKqrS,cAAczO,aACjE,OAAO,IAAIgS,EAA8B5uS,KAAK,IAC/C,KAKK6uS,KAA0B,IAAI/vH,GAAAA,GAAkB,IAAM,IAAItjC,GAAWx7I,QAAO,KAK5E6wL,QAAU,IAAI/R,GAAAA,GAAqB,IAAM,IAAI8R,GAAc5wL,QAAO,KAKlE8uS,UAAY,IAAIhwH,GAAAA,GAAuB,IAAM,IAAIsT,GAAgBpyL,KAAKorS,cAAeprS,QAAO,KAK5F+uS,UAAY,IAAI/S,IAA4Bt8Q,UAChD,MAAM,gBAACsvR,SAAyB,gCAEhC,OAAO,IAAIA,EAAgBhvS,KAAMA,KAAK2+F,sBAAsB,IAC7D,KAKKswM,YAAc,IAAIjT,IAA8Bt8Q,UACpD,MAAM,kBAACwvR,SAA2B,gCAClC,OAAO,IAAIA,EAAkBlvS,KAAMA,KAAK2+F,sBAAsB,IAC/D,KAKKwwM,WAAa,IAAInT,IAA6Bt8Q,UAClD,MAAM,iBAAC0vR,SAA0B,gCACjC,OAAO,IAAIA,EAAiBpvS,KAAK,IAClC,KAMKqvS,iBAAmB,IAAIrT,IAAmCt8Q,UAC9D,MAAM,uBAAC4vR,SAAgCtvS,KAAKqrS,cAAc3O,aAC1D,OAAO,IAAI4S,EAAuBtvS,KAAK,IACxC,KAKKuvS,sBAAwB,IAAIzwH,GAAAA,GAAmC,IAAM,IAAImW,GAA4Bj1L,QAAO,KAK5GwvS,WAAa,IAAIxT,IAA6Bt8Q,UAClD,MAAM,iBAAC+vR,SAA0BzvS,KAAKqrS,cAAc1O,aACpD,OAAO,IAAI8S,EAAiBzvS,KAAK,IAClC,KAKK0vS,sBAAwB,IAAI5wH,GAAAA,GAAmC,IAAM,IAAIic,GAA4B/6L,QAAO,KAK5G2vS,SAAW,IAAI7wH,GAAAA,GAAsB,IAAM,IAAIif,GAAe/9L,QAAO,KAKrE4vS,MAAQ,IAAI9wH,GAAAA,GAAmB,IAAM,IAAI8f,GAAY5+L,QAAO,KAK5D6vS,8BAAgC,IAAI/wH,GAAAA,GAA2C,IAAM,IAAIq1B,GAAoCn0M,QAAO,KAKpI8vS,iBAAmB,IAAIhxH,GAAAA,GAAwC,IAAM,IAAI6gD,GAAiC3/N,QAAO,KAOxG+vS,sBAAgB,OAChBC,wBAAkB,OAC3BhiL,OAAS,IAAI8wD,GAAAA,GAAoB,IAAM,IAAI+gB,GAAa7/L,KAAMA,KAAK+vS,iBAAkB/vS,KAAKgwS,sBAAqB,KAK/GC,WAAa,IAAInxH,GAAAA,GAAwB,IAAM,IAAIsiB,GAAiBphM,QAAO,KAK3EkwS,eAAiB,IAAIpxH,GAAAA,GAA4B,IAAM,IAAI0+G,GAAqBx9R,QAAO,KAKvFmwS,QAAU,IAAIrxH,GAAAA,GAAqB,IAAM,IAAI8mB,GAAc5lM,QAAO,KAKlEowS,QAAU,IAAItxH,GAAAA,GAAqB,IAAM,IAAIogH,GAAcl/R,KAAMA,KAAK2+F,yBAAwB,KAK9F0xM,aAAe,IAAIvxH,GAAAA,GAA0B,IAAM,IAAIgqB,GAAmB9oM,QAAO,KAKjFswS,mBAAqB,IAAItU,IAAqCt8Q,UAClE,MAAM,yBAAC6wR,SAAkC,gCACzC,OAAO,IAAIA,EAAyBvwS,KAAK,IAC1C,KAKKwwS,sCAAwC,IAAI1xH,GAAAA,GAAmD,IAAM,IAAIutB,GAA4CrsM,QAAO,KAQ5JywS,QAAU,IAAIzU,IAA0Bt8Q,UAC5C,MAAM,cAACgxR,SAAuB,+BAC9B,OAAO,IAAIA,EAAc1wS,KAAK,IAC/B,KAMK2wS,WAAa,IAAI3U,IAA6Bt8Q,UAClD,MAAM,iBAACkxR,SAA0B,gCACjC,OAAO,IAAIA,EAAiB5wS,KAAK,IAClC,KAKK6wS,KAAO,IAAI7U,IAAuBt8Q,UACtC,MAAM,WAACoxR,SAAoB,gCAC3B,OAAO,IAAIA,EAAW9wS,KAAK,IAC5B,KAKK+wS,UAAY,IAAI/U,IAA4Bt8Q,UAChD,MAAM,gBAACsxR,SAAyB,gCAChC,OAAO,IAAIA,EAAgBhxS,KAAK,IACjC,KAMKixS,aAAe,IAAInyH,GAAAA,GAA0B,IAAM,IAAI+4B,GAAmB73M,QAAO,KAKjFg1M,eAAiB,IAAIl2B,GAAAA,GAA4B,IAAM,IAAI84B,GAAqB53M,QAAO,KAKvFkxS,OAAS,IAAIpyH,GAAAA,GAAoB,IAAM,IAAIkjC,GAAahiN,QAAO,KAK/DmxS,iBAAmB,IAAIryH,GAAAA,GAA8B,IAAM,IAAIygC,GAAuBv/M,QAAO,KAK7FoxS,YAAc,IAAItyH,GAAAA,GAAyB,IAAM,IAAI+iC,GAAkB7hN,QAAO,KAK9EqxS,KAAO,IAAIvyH,GAAAA,GAAiB,IAAM,IAAIgoC,GAAW9mN,QAAO,KAKxDsxS,4BAA8B,IAAIxyH,GAAAA,GAAwC,IAAM,IAAI6uC,GAAkC3tN,QAAO,KAM7HuxS,eAAiB,IAAIzyH,GAAAA,GAA4B,IAAM,IAAIsxC,GAAqBpwN,QAAO,KAKvFwxS,aAAe,IAAIxV,IAAyCt8Q,UAChE,MAAM,6BAAC+xR,SAAsC,+BAC7C,OAAO,IAAIA,EAA6BzxS,KAAK,IAE9C,KAMK0xS,eAAiB,IAAI5yH,GAAAA,GAAqC,IAAM,IAAIw5C,GAA+Bt4N,QAAO,KAE1G2xS,iBAAmB,IAAI7yH,GAAAA,GAA8B,IAAM,IAAIy6C,GAAuBv5N,QAAO,KAK7F4xS,kBAAoB,IAAI9yH,GAAAA,GAA+B,IAAM,IAAIq7C,GAAwBn6N,QAAO,KAKhG6xS,UAAY,IAAI7V,IAA4Bt8Q,UAChD,MAAM,gBAAEoyR,SAA0B,gCAClC,OAAO,IAAIA,EAAgB9xS,KAAK,IACjC,KAKK+xS,qBAAuB,IAAIjzH,GAAAA,GAAkC,IAAM,IAAIm8C,GAA2Bj7N,QAAO,KAKzGgyS,mBAAqB,IAAIlzH,GAAAA,GAA2B,IAAM,IAAIzhD,GAAyBr9H,QAAO,KAK9FiyS,oBAAsB,IAAInzH,GAAAA,GAA2B,IAAM,IAAI64E,GAA0B33P,QAAO,KAKhGkyS,sBAAwB,IAAIpzH,GAAAA,GAA2B,IAAM,IAAIy/G,GAA4Bv+R,QAAO,KAKpGmyS,SAAkC,IAAIrzH,GAAAA,GAAsB,IAAM,IAAImhD,GAAejgO,QAAO,KAK5FoyS,iBAAkD,IAAItzH,GAAAA,GAA8B,IAAM,IAAIulE,GAAuBrkP,QAAO,KAK5HqyS,kCAAoC,IAAIvzH,GAAAA,GAAwC,IAAM,IAAI5rD,EAAiClzH,QAAO,KAKlIsyS,eAAiB,IAAIxzH,GAAAA,GAA2B,IAAM,IAAI+/D,GAAqB7+O,QAAO,KAKtFuyS,gBAAkB,IAAIzzH,GAAAA,GAA4B,IAAM,IAAIuiE,GAAqBrhP,QAAO,KAKxFwyS,gBAAkB,IAAI1zH,GAAAA,GAAsB,IAAM,IAAIkpE,GAAehoP,QAAO,KAK5EyyS,iCAAmC,IAAI3zH,GAAAA,GAAuC,IAAM,IAAIupE,GAAgCroP,QAAO,KAK/H0yS,4BAA8B,IAAI5zH,GAAAA,GAAkC,IAAM,IAAIwqE,GAA2BtpP,QAAO,KAKhH2yS,gBAAkB,IAAI7zH,GAAAA,GAA8B,IAAM,IAAIuuE,GAAuBrtP,QAAO,KAK5F4yS,mBAAqB,IAAI9zH,GAAAA,GAAiC,IAAM,IAAIm3F,GAA0Bj2Q,QAAO,KAOrG6yS,eAAiB,IAAI/zH,GAAAA,GAA4B,IAAM,IAAIk1E,GAAqBh0P,QAAO,KAKvF8yS,gBAAkB,IAAIh0H,GAAAA,GAA6B,IAAM,IAAIwnF,GAAsBtmQ,QAAO,KAK1F+yS,WAAa,IAAI/W,IAA6Bt8Q,UAClD,MAAM,iBAACszR,SAA0B,+BACjC,OAAO,IAAIA,EAAiBhzS,KAAK,IAClC,KAKKizS,mBAAqB,IAAIn0H,GAAAA,GAAyB,IAAM,IAAI0gF,GAAkBx/P,QAAO,KAKrFkzS,YAAc,IAAIlX,IAA8Bt8Q,UACpD,MAAM,kBAACyzR,SAA2B,yDAClC,OAAO,IAAIA,EAAkBnzS,KAAK,IACnC,KAKKozS,QAAU,IAAIt0H,GAAAA,GAA0B,IAAM,IAAI42E,GAAc11P,QAAO,KAKvEqzS,gBAAkB,IAAIv0H,GAAAA,GAAsB,IAAM,IAAI84E,GAAsB53P,KAAKmX,UAAS,KAK1Fm8R,SAAW,IAAIx0H,GAAAA,GAAsB,IAAM,IAAIg5E,KAAkB,KAKjEy7C,UAAY,IAAIz0H,GAAAA,GAAuB,IAAM,IAAIi/E,GAAgB/9P,QAAO,KAKxEwzS,cAAgB,IAAI10H,GAAAA,GAA2B,IAAM,IAAIwgF,GAAoBt/P,QAAO,KAKpFyzS,MAAQ,IAAIzX,IAAwBt8Q,UACxC,MAAM,YAACg0R,SAAqB,+BAC5B,OAAO,IAAIA,EAAY1zS,KAAK,IAC7B,KAKK2zS,cAAgB,IAAI70H,GAAAA,GAA2B,IAAM,IAAI2hF,GAAoBzgQ,QAAO,KAKpF4zS,aAAe,IAAI5X,IAA+Bt8Q,UACtD,MAAM,mBAACm0R,SAA4B,8BACnC,OAAO,IAAIA,EAAmB7zS,KAAK,IACpC,KAKK8zS,cAAgB,IAAIh1H,GAAAA,GAA2B,IAAM,IAAI6hF,GAAoB3gQ,QAAO,KAKpF+zS,aAAe,IAAI/X,IAA+Bt8Q,UACtD,MAAM,mBAACs0R,SAA4B,gCACnC,OAAO,IAAIA,EAAmBh0S,KAAK,IACpC,KAKKi0S,KAAO,IAAIn1H,GAAAA,GAAkB,IAAM,IAAI+hF,GAAW7gQ,QAAO,KAKzDk0S,iBAAmB,IAAIp1H,GAAAA,GAA8B,IAAM,IAAIklF,GAAuBhkQ,QAAO,KAK7Fm0S,4BAA8B,IAAIr1H,GAAAA,GAAkC,IAAM,IAAIusF,GAAkCrrQ,QAAO,KAKvHo0S,kBAAoB,IAAIt1H,GAAAA,GAAsB,IAAM,IAAI6pF,GAAe3oQ,QAAO,KAK9Eq0S,YAAc,IAAIrY,IAA8Bt8Q,UACpD,MAAM,kBAAC40R,SAA2Bt0S,KAAKqrS,cAAc1O,aACrD,OAAO,IAAI2X,EAAkBt0S,KAAK,IACnC,KAKKo1M,gBAAkB,IAAIt2B,GAAAA,GAA6B,IAAM,IAAIwwF,GAAsBtvQ,QAAO,KAK1Fu0S,KAAO,IAAIz1H,GAAAA,GAAkB,IAAM,IAAI6xF,GAAW3wQ,QAAO,KAKzDw0S,iBAAmB,IAAI11H,GAAAA,GAAuB,IAAM,IAAIw3F,GAAuBt2Q,QAAO,KAKtFy0S,SAAW,IAAI31H,GAAAA,GAAsB,IAAM,IAAI85F,GAAe54Q,QAAO,KAKrE00S,qBAAuB,IAAI51H,GAAAA,GAAkC,IAAM,IAAIwnH,GAA2BtmS,QAAO,KAKzG20S,0BAA4B,IAAI71H,GAAAA,GAAuC,IAAM,IAAI06F,GAAgCx5Q,QAAO,KAKxH40S,iBAAmB,IAAI91H,GAAAA,GAA8B,IAAM,IAAIg9F,GAAuB97Q,QAAO,KAK7F60S,uBAAyB,IAAI/1H,GAAAA,GAAoC,IAAM,IAAIyhH,GAA6BvgS,QAAO,KAK/G80S,qBAAuB,IAAI9Y,IAAuCt8Q,UACtE,MAAM,2BAACq1R,SAAoC,gCAC3C,OAAO,IAAIA,EAA2B/0S,KAAMA,KAAK2+F,sBAAsB,IACxE,KAKKq2M,cAAgB,IAAIl2H,GAAAA,GAA2B,IAAM,IAAI6/F,GAAoB3+Q,QAAM,KAKnFi1S,iBAAmB,IAAIn2H,GAAAA,GAA6B,IAAM,IAAIw+F,GAAuBt9Q,QAAO,KAE5Fk1S,YAAc,IAAIp2H,GAAAA,GAAyB,IAAM,IAAImgG,GAAkBj/Q,QAAM,KAK7Em1S,aAAe,IAAIr2H,GAAAA,GAA0B,IAAM,IAAI+hG,GAAmB7gR,QAAM,KAKhFo1S,gBAAkB,IAAIt2H,GAAAA,GAA6B,IAAM,IAAIinG,GAAsB/lR,QAAM,KAIzFu1M,aAAe,IAAIz2B,GAAAA,GAA0B,IAAM,IAAI41G,GAAmB10R,QAAM,KAMhFq1S,iBAAmB,IAAIv2H,GAAAA,GAA8B,IAAM,IAAIk6G,GAAuBh5R,QAAM,KAK5Fs1S,cAAgB,IAAItZ,IAAoCt8Q,UAC5D,MAAM,wBAAC61R,SAAiC,+BACxC,OAAO,IAAIA,EAAwBv1S,KAAK,IACzC,KAMKw1S,OAAS,IAAI12H,GAAAA,GAAoB,IAAM,IAAIymH,GAAavlS,QAAM,KAK9D+1M,YAAc,IAAIj3B,GAAAA,GAAyB,IAAM,IAAI2rH,GAAkBzqS,QA76B3EA,KAAKqrS,cAAgB,IAAI5O,GACzBqO,EAAiBt/R,SAAWxL,KAE5BA,KAAKmX,OAASA,EACdnX,KAAK0hM,OAAS,IAAI+zG,GAAAA,GAAc,KAC5Bz1S,KAAK+sB,OAAOkqO,eAAe,IAAI,IAGnCj3P,KAAK49C,aAAeA,EACpB59C,KAAK8P,OAASi7R,EACd/qS,KAAKouI,IAAM48J,EACXhrS,KAAK+pM,KAAOkhG,EACZjrS,KAAK+vS,iBAAmBjwG,EACxB9/L,KAAKgwS,mBAAqB9E,EAE1BlrS,KAAK6uS,KAAKrS,YACVx8R,KAAK+sS,eAAevQ,YACpBx8R,KAAK20S,0BAA0BnY,YAC/Bx8R,KAAK8tS,aAAatR,YAClBx8R,KAAK6vS,8BAA8BrT,YACnCx8R,KAAKgtS,SAASxQ,YACdx8R,KAAKmtS,UAAU3Q,YACfx8R,KAAKqtS,SAAS7Q,YACdx8R,KAAKutS,cAAc/Q,YAEnBx8R,KAAKmsS,UAAU3P,YAEfx8R,KAAK6sS,UAAUrQ,YACfx8R,KAAK2sS,WAAWnQ,YAEhBx8R,KAAKysS,SAASjQ,YACdx8R,KAAKwsS,OAAOhQ,YAEZx8R,KAAKssS,aAAa9P,YAElBx8R,KAAKqsS,kBAAkB7P,YAEvBx8R,KAAKisS,UAAUzP,YACfx8R,KAAKksS,aAAa1P,YAIlBx8R,KAAK0rS,aAAalP,YAClBx8R,KAAKwrS,UAAUhP,YAEfx8R,KAAKguH,OAAOwuK,YACZx8R,KAAKiwS,WAAWzT,YAChBx8R,KAAKqwS,aAAa7T,YAClBx8R,KAAKswS,mBAAmB9T,YAExBx8R,KAAKg1M,eAAewnF,YACpBx8R,KAAKmvS,WAAW3S,YAChBx8R,KAAK+tS,iBAAiBvR,YACtBx8R,KAAK+wS,UAAUvU,YACfx8R,KAAKmxS,iBAAiB3U,YACtBx8R,KAAKguS,4BAA4BxR,YAEjCx8R,KAAKwxS,aAAahV,YAClBx8R,KAAK0xS,eAAelV,YACpBx8R,KAAK4xS,kBAAkBpV,YACvBx8R,KAAK+xS,qBAAqBvV,YAC1Bx8R,KAAKsyS,eAAe9V,YACpBx8R,KAAKwvS,WAAWhT,YAEhBx8R,KAAK+uS,UAAUvS,YACfx8R,KAAK2yS,gBAAgBnW,YACrBx8R,KAAKivS,YAAYzS,YACjBx8R,KAAKkzS,YAAY1W,YACjBx8R,KAAKuzS,UAAU/W,YACfx8R,KAAK4zS,aAAapX,YAClBx8R,KAAK8zS,cAActX,YAEnBx8R,KAAKi0S,KAAKzX,YAEVx8R,KAAKm0S,4BAA4B3X,YACjCx8R,KAAKixS,aAAazU,YAClBx8R,KAAKq0S,YAAY7X,YACjBx8R,KAAK6wS,KAAKrU,YACVx8R,KAAK2wS,WAAWnU,YAChBx8R,KAAKo1M,gBAAgBonF,YACrBx8R,KAAK4yS,mBAAmBpW,YAExBx8R,KAAKw0S,iBAAiBhY,YACtBx8R,KAAKy0S,SAASjY,YACdx8R,KAAKi1S,iBAAiBzY,YACtBx8R,KAAKszS,SAAS9W,YACXx8R,KAAKiqB,cAAc6P,gBAAgB47Q,YAAYC,QAC9C31S,KAAK+zS,aAAavX,YAGtBx8R,KAAKq1S,iBAAiB7Y,YAEtBx8R,KAAKqjF,IAAIq9D,wBAET1gJ,KAAK00S,qBAAqBlY,YAE1BryP,YAAW,IAAMnqC,KAAK41S,4BAC1B,CAGQA,wBAAAA,GAEJ,IAAK51S,KAAK6T,OAAOmI,GAAGmtB,QAASnpC,KAAK6T,OAAOkZ,OAAOwJ,SAC5C,OAGJ,GAAGv2B,KAAKupC,UAAUtuB,UACd,OAGJ,MAAM46R,EAAuB71S,KAAK+sB,OAAOoqO,gBACzC,IAAI0+C,EACA,OAGJ,IAAIC,EAAiD,KACjDC,EAA8B,KAEL,KAA1B/1S,KAAKqjF,IAAIkB,cACRuxN,EAAwB,IAAI5gD,GAAc,EAAG,EAAG,YAChD6gD,EAAc,sEACkB,KAA1B/1S,KAAKqjF,IAAIkB,eACfuxN,EAAwB,IAAI5gD,GAAc,EAAG,EAAG,YAChD6gD,EAAc,wEAGdD,GAIDD,EAAqBrgD,cAAcsgD,KAClC91S,KAAK6oB,UAAUw2G,mBAAmB,oBAAqB,YAAaw2K,EAAqB12S,YACzFa,KAAKo7B,OAAOC,oBAAoB,CAC5B5yB,MAAO,gCACP3G,KAAM,sEACNw5B,iBAAiB,EACjBstB,yBAAyB,EACzBltB,QAAS,CACL,CACI55B,KAAM,gBACN65B,aAAwC,KAA1B37B,KAAKqjF,IAAIkB,aAAsB,UAAY,UACzDl9E,QAASqY,UACL1f,KAAK6oB,UAAUw2G,mBAAmB,oBAAqB,cAAew2K,EAAqB12S,YAC3Fa,KAAK+sB,OAAO++K,iBAAiBiqG,GACtBl6Q,GAAAA,EAAkCsoO,oBAOjE,CAEAnmL,gBAAAA,CAAiBj4D,GACb,IAAI03D,EAA2Bz9E,KAAK,IAADJ,OAAKmmB,IAKxC,GAJI03D,IACAA,EAAkBz9E,KAAK+lB,IAGxB03D,EACC,OAAIA,EAA0By+M,OAClBz+M,EAA0B8+M,sBAE3B9+M,EAIf,MAAM,IAAIxN,MAAM,mEAADrwE,OAAoEmmB,GAEvF,CAMA,iBAAW05C,GACP,OAAOz/D,KAAKsrS,eAAexhS,KAC/B,CAMA,YAAWi6B,GACP,OAAO/jC,KAAKwrS,UAAU1hS,KAC1B,CAGA,eAAW+xQ,GACP,OAAO77Q,KAAK0rS,aAAa5hS,KAC7B,CAMA,qBAAW+4H,GACP,OAAO7iI,KAAK2rS,mBAAmB7hS,KACnC,CAMA,wBAAWouE,GACP,OAAOl4E,KAAK6rS,sBAAsB/hS,KACtC,CAMA,+BAAIwlD,GACA,OAAOtvD,KAAK+rS,6BAA6BjiS,KAC7C,CAGA,YAAW0tE,GACP,OAAOx3E,KAAKisS,UAAUniS,KAC1B,CAGA,eAAW+mJ,GACP,OAAO7wJ,KAAKksS,aAAapiS,KAC7B,CAMA,YAAWirB,GACP,OAAO/0B,KAAKmsS,UAAUriS,KAC1B,CAGA,oBAAW8/M,GACP,OAAO5pN,KAAKqsS,kBAAkBviS,KAClC,CAGA,eAAW6nD,GACP,OAAO3xD,KAAKssS,aAAaxiS,KAC7B,CAGA,oBAAWypJ,GACP,OAAOvzJ,KAAKusS,kBAAkBziS,KAClC,CAGA,SAAWqR,GACP,OAAOnb,KAAKwsS,OAAO1iS,KACvB,CAMA,WAAWkiF,GACP,OAAOhsF,KAAKysS,SAAS3iS,KACzB,CAMA,aAAWo9G,GACP,OAAOlnH,KAAK2sS,WAAW7iS,KAC3B,CAMA,YAAWksS,GACP,OAAOh2S,KAAK6sS,UAAU/iS,KAC1B,CAGA,iBAAWmgB,GACP,OAAOjqB,KAAK+sS,eAAejjS,KAC/B,CAGA,WAAW68G,GACP,OAAO3mH,KAAKgtS,SAASljS,KACzB,CAMA,aAAWmsS,GACP,OAAOj2S,KAAKitS,WAAWnjS,KAC3B,CAGA,YAAW8sB,GACP,OAAO52B,KAAKmtS,UAAUrjS,KAC1B,CAGA,WAAWmsC,GACP,OAAOj2C,KAAKqtS,SAASvjS,KACzB,CAGA,cAAW8M,GACP,OAAO5W,KAAKstS,YAAYxjS,KAC5B,CAGA,gBAAW0X,GACP,OAAOxhB,KAAKutS,cAAczjS,KAC9B,CAGA,kBAAWoP,GACP,OAAOlZ,KAAKwtS,gBAAgB1jS,KAChC,CAGA,eAAW8L,GACP,OAAO5V,KAAKytS,aAAa3jS,KAC7B,CAIA,YAAWkL,GACP,OAAOhV,KAAK0tS,iBAAiB5jS,KACjC,CAIA,aAAW+e,GACP,OAAO7oB,KAAK2tS,kBAAkB7jS,KAClC,CAOA,sBAAWosS,GACP,OAAOl2S,KAAK4tS,2BAA2B9jS,KAC3C,CAIA,QAAI4F,GACA,OAAO1P,KAAK8tS,aAAahkS,KAC7B,CAIA,YAAI24F,GACA,OAAOziG,KAAK+tS,iBAAiBjkS,KACjC,CAIA,uBAAI2uK,GACA,OAAOz4K,KAAKguS,4BAA4BlkS,KAC5C,CAMA,UAAImqL,GACA,OAAOj0L,KAAKiuS,QAAQnkS,KACxB,CAMA,cAAIyiB,GACA,OAAOvsB,KAAKmuS,YAAYrkS,KAC5B,CAGA,YAAIg6H,GACA,OAAO9jI,KAAKquS,UAAUvkS,KAC1B,CAMA,gBAAI+8C,GACA,OAAO7mD,KAAKsuS,cAAcxkS,KAC9B,CAGA,UAAI+J,GACA,OAAO7T,KAAKwuS,QAAQ1kS,KACxB,CAMA,kBAAIqsS,GACA,OAAOn2S,KAAKyuS,gBAAgB3kS,KAChC,CAMA,0BAAIssS,GACA,OAAOp2S,KAAK2uS,wBAAwB7kS,KACxC,CAGA,OAAIu5E,GACA,OAAOrjF,KAAK6uS,KAAK/kS,KACrB,CAGA,UAAIuF,GACA,OAAOrP,KAAK6wL,QAAQ/mL,KACxB,CAGA,YAAImkB,GACA,OAAOjuB,KAAK8uS,UAAUhlS,KAC1B,CAOA,YAAIm6B,GACA,OAAOjkC,KAAK+uS,UAAUjlS,KAC1B,CAMA,cAAIm5B,GACA,OAAOjjC,KAAKivS,YAAYnlS,KAC5B,CAMA,aAAI4sN,GACA,OAAO12N,KAAKmvS,WAAWrlS,KAC3B,CAOA,mBAAIupF,GACA,OAAOrzF,KAAKqvS,iBAAiBvlS,KACjC,CAGA,wBAAIkxK,GACA,OAAOh7K,KAAKuvS,sBAAsBzlS,KACtC,CAMA,aAAIusS,GACA,OAAOr2S,KAAKwvS,WAAW1lS,KAC3B,CAGA,wBAAI8yL,GACA,OAAO58L,KAAK0vS,sBAAsB5lS,KACtC,CAGA,WAAIggP,GACA,OAAO9pP,KAAK2vS,SAAS7lS,KACzB,CAGA,QAAIwgB,GACA,OAAOtqB,KAAK4vS,MAAM9lS,KACtB,CAGA,gCAAIiR,GACA,OAAO/a,KAAK6vS,8BAA8B/lS,KAC9C,CAIA,6BAAIkmM,GACA,OAAOhwM,KAAK8vS,iBAAiBhmS,KACjC,CAMA,SAAI5L,GACA,OAAO8B,KAAKguH,OAAOlkH,KACvB,CAGA,aAAWy/B,GACP,OAAOvpC,KAAKiwS,WAAWnmS,KAC3B,CAGA,iBAAWykR,GACP,OAAOvuR,KAAKkwS,eAAepmS,KAC/B,CAGA,UAAWsxB,GACP,OAAOp7B,KAAKmwS,QAAQrmS,KACxB,CAGA,UAAW6U,GACP,OAAO3e,KAAKowS,QAAQtmS,KACxB,CAGA,YAAWwsS,GACP,OAAOt2S,KAAKqwS,aAAavmS,KAC7B,CAMA,qBAAW2xF,GACP,OAAOz7F,KAAKswS,mBAAmBxmS,KACnC,CAGA,wCAAWg4L,GACP,OAAO9hM,KAAKwwS,sCAAsC1mS,KACtD,CAUA,UAAW6zF,GACP,OAAO39F,KAAKywS,QAAQ3mS,KACxB,CAMA,aAAWm0J,GACP,OAAOj+J,KAAK2wS,WAAW7mS,KAC3B,CAMA,OAAWgwG,GACP,OAAO95G,KAAK6wS,KAAK/mS,KACrB,CAMA,YAAW+K,GACP,OAAO7U,KAAK+wS,UAAUjnS,KAC1B,CAIA,eAAWuW,GACP,OAAOrgB,KAAKixS,aAAannS,KAC7B,CAGA,iBAAWmiL,GACP,OAAOjsL,KAAKg1M,eAAelrM,KAC/B,CAGA,SAAWi3C,GACP,OAAO/gD,KAAKkxS,OAAOpnS,KACvB,CAGA,mBAAWysS,GACP,OAAOv2S,KAAKmxS,iBAAiBrnS,KACjC,CAGA,cAAW3L,GACP,OAAO6B,KAAKoxS,YAAYtnS,KAC5B,CAGA,OAAW8oH,GACP,OAAO5yH,KAAKqxS,KAAKvnS,KACrB,CAIA,mCAAWyvF,GACP,OAAOv5F,KAAKsxS,4BAA4BxnS,KAC5C,CAGA,iBAAW2nN,GACP,OAAOzxN,KAAKuxS,eAAeznS,KAC/B,CAOA,eAAW8vF,GACP,OAAO55F,KAAKwxS,aAAa1nS,KAC7B,CAMA,mBAAW0sS,GACP,OAAOx2S,KAAK2xS,iBAAiB7nS,KACjC,CAGA,oBAAW2sS,GACP,OAAOz2S,KAAK4xS,kBAAkB9nS,KAClC,CAMA,YAAWk/I,GACP,OAAOhpJ,KAAK6xS,UAAU/nS,KAC1B,CAGA,uBAAW28G,GACP,OAAOzmH,KAAK+xS,qBAAqBjoS,KACrC,CAGA,qBAAWusE,GACP,OAAOr2E,KAAKgyS,mBAAmBloS,KACnC,CAGA,sBAAWwsE,GACP,OAAOt2E,KAAKiyS,oBAAoBnoS,KACpC,CAGA,wBAAWm+B,GACP,OAAOjoC,KAAKkyS,sBAAsBpoS,KACtC,CAGA,WAAIulC,GACA,OAAOrvC,KAAKmyS,SAASroS,KACzB,CAGA,mBAAI+1J,GACA,OAAO7/J,KAAKoyS,iBAAiBtoS,KACjC,CAGA,oCAAW4sS,GACP,OAAO12S,KAAKqyS,kCAAkCvoS,KAClD,CAGA,iBAAW6sS,GACP,OAAO32S,KAAKsyS,eAAexoS,KAC/B,CAGA,kBAAWuf,GACP,OAAOrpB,KAAKuyS,gBAAgBzoS,KAChC,CAGA,WAAWsxE,GACP,OAAOp7E,KAAKwyS,gBAAgB1oS,KAChC,CAGA,4BAAWu7D,GACP,OAAOrlE,KAAKyyS,iCAAiC3oS,KACjD,CAGA,uBAAWo+O,GACP,OAAOloP,KAAK0yS,4BAA4B5oS,KAC5C,CAGA,mBAAW8sS,GACP,OAAO52S,KAAK2yS,gBAAgB7oS,KAChC,CAGA,sBAAW+sS,GACP,OAAO72S,KAAK4yS,mBAAmB9oS,KACnC,CAKA,iBAAWgtS,GACP,OAAO92S,KAAK6yS,eAAe/oS,KAC/B,CAGA,kBAAWitS,GACP,OAAO/2S,KAAK8yS,gBAAgBhpS,KAChC,CAMA,aAAWgmP,GACP,OAAO9vP,KAAK+yS,WAAWjpS,KAC3B,CAGA,cAAWmrB,GACP,OAAOj1B,KAAKizS,mBAAmBnpS,KACnC,CAMA,cAAWqkC,GACP,OAAOnuC,KAAKkzS,YAAYppS,KAC5B,CAGA,UAAWijB,GACP,OAAO/sB,KAAKozS,QAAQtpS,KACxB,CAGA,kBAAWi5O,GACP,OAAO/iP,KAAKqzS,gBAAgBvpS,KAChC,CAGA,WAAW6pH,GACP,OAAO3zH,KAAKszS,SAASxpS,KACzB,CAGA,YAAWgkB,GACP,OAAO9tB,KAAKuzS,UAAUzpS,KAC1B,CAGA,gBAAWwqF,GACP,OAAOt0F,KAAKwzS,cAAc1pS,KAC9B,CAMA,QAAWu4I,GACP,OAAOriJ,KAAKyzS,MAAM3pS,KACtB,CAGA,gBAAWw4I,GACP,OAAOtiJ,KAAK2zS,cAAc7pS,KAC9B,CAMA,eAAIuX,GACA,OAAOrhB,KAAK4zS,aAAa9pS,KAC7B,CAGA,gBAAIgtO,GACA,OAAO92O,KAAK8zS,cAAchqS,KAC9B,CAMA,eAAIuwG,GACA,OAAOr6G,KAAK+zS,aAAajqS,KAC7B,CAGA,OAAIg2P,GACA,OAAO9/P,KAAKi0S,KAAKnqS,KACrB,CAGA,mBAAI4yF,GACA,OAAO18F,KAAKk0S,iBAAiBpqS,KACjC,CAGA,8BAAIikN,GACA,OAAO/tN,KAAKm0S,4BAA4BrqS,KAC5C,CAGA,oBAAI2oD,GACA,OAAOzyD,KAAKo0S,kBAAkBtqS,KAClC,CAMA,cAAIuuM,GACA,OAAOr4M,KAAKq0S,YAAYvqS,KAC5B,CAGA,kBAAI6zC,GACA,OAAO39C,KAAKo1M,gBAAgBtrM,KAChC,CAGA,OAAIktS,GACA,OAAOh3S,KAAKu0S,KAAKzqS,KACrB,CAGA,mBAAI+8G,GACA,OAAO7mH,KAAKw0S,iBAAiB1qS,KACjC,CAGA,WAAIuyC,GACA,OAAOr8C,KAAKy0S,SAAS3qS,KACzB,CAGA,uBAAImtS,GACA,OAAOj3S,KAAK00S,qBAAqB5qS,KACrC,CAGA,4BAAI8lQ,GACA,OAAO5vQ,KAAK20S,0BAA0B7qS,KAC1C,CAGA,mBAAIg1B,GACA,OAAO9+B,KAAK40S,iBAAiB9qS,KACjC,CAGA,yBAAI60F,GACA,OAAO3+F,KAAK60S,uBAAuB/qS,KACvC,CAMA,uBAAIusB,GACA,OAAOr2B,KAAK80S,qBAAqBhrS,KACrC,CAGA,gBAAIijJ,GACA,OAAO/sJ,KAAKg1S,cAAclrS,KAC9B,CAKA,cAAIyiK,GACA,OAAOvsK,KAAKk1S,YAAYprS,KAC5B,CAGA,eAAI67J,GACA,OAAO3lK,KAAKm1S,aAAarrS,KAC7B,CAGA,kBAAIotS,GACA,OAAOl3S,KAAKo1S,gBAAgBtrS,KAChC,CAEA,eAAI2/B,GACA,OAAOzpC,KAAKu1M,aAAazrM,KAC7B,CAIA,mBAAI+6P,GACA,OAAO7kQ,KAAKq1S,iBAAiBvrS,KACjC,CAOA,gBAAIqtS,GACA,OAAOn3S,KAAKs1S,cAAcxrS,KAC9B,CAGA,SAAIotR,GACA,OAAOl3R,KAAKw1S,OAAO1rS,KACvB,CAGA,cAAI2/C,GACA,OAAOzpD,KAAK+1M,YAAYjsM,KAC5B,E,gBCtrCG,MAAMstS,IAAmB54S,EAAAA,GAAAA,GAAU,oBCD7B64S,IAAe74S,EAAAA,GAAAA,GAAU,gBCWzB84S,IAAU/3S,EAAAA,GAAAA,IAAS,cAAsBC,GAAAA,EAE1C0xE,YAAAA,CAAa1sE,GAElBxE,KAAKlC,MAAMy5S,eACVv3S,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,QAGvE/lC,KAAKlC,MAAMuJ,SACZrH,KAAKlC,MAAMuJ,QAAQ7C,GAGrBxE,KAAKwL,SAASorB,SAASgxJ,QACzB,CAEQ4vH,gBAAAA,GACN,OAAOx3S,KAAKwL,SAASye,cAAcC,KAAK+kC,gBAAgBwoP,OAC1D,CAEQC,WAAAA,GACF,IAAIC,EAAiB33S,KAAKwL,SAASye,cAAcC,KAAK+kC,gBAAgB2oP,gBACtE,OAAOD,GAA+B,GAAA/3S,OAAMI,KAAKwL,SAAStN,MAAMknF,UAAUue,UAAS,QACzF,CAGAlkG,MAAAA,GACE,OACEC,EAAAA,GAAAA,KAAC03S,GAAgB,CAACz3S,UAAU,oBAAmBI,UAC7CL,EAAAA,GAAAA,KAAC4sC,GAAAA,EAAI,CAACC,KAAMvsC,KAAKwL,SAASorB,SAASE,WAAW+7F,OAExCxrH,QAAU7C,GAAMxE,KAAKkxE,aAAa1sE,GAAGzE,UACzCL,EAAAA,GAAAA,KAAC23S,GAAY,CAAEjjS,IAAKpU,KAAKw3S,mBACjBh1N,MAAOxiF,KAAKwL,SAASkE,KAAK8yE,MAC1BruE,IAAKnU,KAAK03S,cACVh2S,MAAO,GACPL,OAAQ,GACR1B,UAAU,oBAK1B,ICpDWk4S,IAAoBr5S,EAAAA,GAAAA,GAAU,qBCA9Bs5S,IAAqBt5S,EAAAA,GAAAA,GAAU,sBCA/Bu5S,IAAyBv5S,EAAAA,GAAAA,GAAU,0BCgB1Cw5S,GACK,UADLA,GAEG,QAFHA,GAGK,UAGEC,IAAiB14S,EAAAA,GAAAA,IAC5B,cAA6B4yB,GAAAA,EAAkEpf,WAAAA,GAAA,SAAA9S,WAAA,KAC7FymB,MAAQ,CACNsxR,YAAa,WACb,KAsCME,cAAgBx4R,UACtB,IAAK1f,KAAKwL,SAASkE,KAAKC,aAGtB,OAFA3P,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,2BAChE/lC,KAAKwL,SAASkE,KAAKo6H,UAAW,CAACj2C,GAAI7zF,KAAKlC,MAAMq6S,cAItD,MAAMp0Q,QAAiB/jC,KAAKwL,SAASu4B,SAEhCA,EAASokB,OAKVpkB,EAASgrJ,eACXhrJ,EAASC,YACTD,EAASuK,YAETvK,EAASC,YARTD,EAASuK,UASX,CACD,CAxDD7uC,MAAAA,GACE,OACE+I,EAAAA,GAAAA,MAACqvS,GAAiB,CAAA93S,SAAA,EAChBL,EAAAA,GAAAA,KAAC4sC,GAAAA,EAAI,CAAC3sC,UAAS,GAAAC,QAAKE,EAAAA,GAAAA,IAAQ,uBACtBuH,QAASrH,KAAKk4S,cAAcn4S,UAChCL,EAAAA,GAAAA,KAACq4S,GAAsB,CAAC3jS,IAAKpU,KAAKo4S,gBAC7BjkS,IAAG,GAAAvU,OAAKI,KAAKwL,SAAStN,MAAMknF,UAAUue,UAAS,WAC/Cr8F,aAAcA,IAAMtH,KAAKq4S,mBAAmBL,IAC5CzwS,aAAcA,IAAMvH,KAAKq4S,mBAAmBL,IAC5CM,YAAaA,IAAMt4S,KAAKq4S,mBAAmBL,IAC3CO,UAAWA,IAAMv4S,KAAKq4S,mBAAmBL,QAG/Ch4S,KAAKw4S,oBAGZ,CAEQJ,aAAAA,GACN,MAAMv2R,EAAS7hB,KAAKwL,SAASye,cAAcC,KAAK+kC,gBAAgBg7H,UAChE,OAAOpoK,EAAOoiB,SAASjkC,KAAK0mB,MAAMsxR,cAAgBn2R,EAAOoiB,SAAS+zQ,GACpE,CAEQK,kBAAAA,CAAmBI,GACzBz4S,KAAKuyB,SAAS,CAACylR,YAAaS,GAAYT,IAC1C,CAEQQ,eAAAA,GACN,OAAKx4S,KAAKwL,SAASkE,KAAKC,cAGjBjQ,EAAAA,GAAAA,KAACo4S,GAAkB,CAAA/3S,UACxBL,EAAAA,GAAAA,KAAC2pL,GAAQ,CAACE,iBAAiB,gBAHpB,IAKX,IC9DSmvH,IAA4Bl6S,EAAAA,GAAAA,GAAU,6BCAtCm6S,IAAoBn6S,EAAAA,GAAAA,GAAU,qBCA9Bo6S,IAA0Bp6S,EAAAA,GAAAA,GAAU,2BCApCq6S,IAA6Br6S,EAAAA,GAAAA,GAAU,8BCAvCs6S,IAAoBt6S,EAAAA,GAAAA,GAAU,qBCiBrCu6S,GAAe,QAERC,IAAaz5S,EAAAA,GAAAA,IAAS,cAAyBC,GAAAA,EAAmBuT,WAAAA,GAAA,SAAA9S,WAAA,KA0DlEg5S,WAAav5R,UAClB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,mBAChE/lC,KAAKwL,SAASkE,KAAKo6H,UAAW,CAACj2C,GAAIklN,IAAc,EAC1D,KAEOzxE,aAAe5nN,iBACZ1f,KAAKwL,SAASu4B,UAAUC,YAE/BhkC,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,SAAU,sBAChE/lC,KAAKwL,SAAS6jC,QAAQgoB,YAAY,CACpCliC,QAAS,CACLG,OAAQC,GAAAA,GAAeC,aACvBJ,KAAMC,GAAAA,EAAS6kE,eACfrlE,QAASC,GAAAA,GAAiB8lF,aAEhC,CAEL,CAzEDn7G,MAAAA,GAEI,OACI+I,EAAAA,GAAAA,MAACswS,GAAiB,CAACn5S,UAAWsX,MAAWnX,EAAAA,GAAAA,IAAQ,mBAAmBC,SAAA,EAChEL,EAAAA,GAAAA,KAACu4S,GAAc,CAACE,YAAaY,MAC7BvwS,EAAAA,GAAAA,MAACmwS,GAAiB,CAACh5S,UAAU,yBAAwBI,SAAA,CAChDC,KAAKk5S,eACLl5S,KAAKm5S,oBAETn5S,KAAKo5S,8BAGlB,CAEQA,yBAAAA,GACJ,OACI5wS,EAAAA,GAAAA,MAACkkL,GAAkB,CAAC/sL,UAAU,0BAAyBI,SAAA,EACnDL,EAAAA,GAAAA,KAACmpL,GAAY,KACbnpL,EAAAA,GAAAA,KAACg5S,GAAyB,KAC1Bh5S,EAAAA,GAAAA,KAACopL,GAA0B,MAGvC,CAEQowH,YAAAA,GAEJ,OAAGl5S,KAAKwL,SAASkE,KAAKC,aAAqB,MAGvCjQ,EAAAA,GAAAA,KAAA,OAAKC,WAAWG,EAAAA,GAAAA,IAAQ,+BAA+BC,UACnDL,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACHM,OAAO,YACPG,YAAY,IACZvG,OAAO,SACPyG,QAASrH,KAAKi5S,WAAWl5S,SAC3BC,KAAKwL,SAASoK,YAAYC,UAAU,YAGlD,CAEQsjS,cAAAA,GACJ,IAAKn5S,KAAKwL,SAASkE,KAAKC,aACpB,OAAO,KAGX,MAAM44F,EAAUvoG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMq3C,QACvD,OACIv6C,EAAAA,GAAAA,MAACowS,GAAuB,CAACj5S,UAAWsX,MAAWnX,EAAAA,GAAAA,IAAQ,sBAAuBuH,QAASrH,KAAKsnO,aAAavnO,SAAA,EACrGL,EAAAA,GAAAA,KAACygB,GAAAA,EAAY,CAACxgB,UAAWsX,MAAWnX,EAAAA,GAAAA,IAAQ,6BAC5CJ,EAAAA,GAAAA,KAACm5S,GAA0B,CAAA94S,UACvBL,EAAAA,GAAAA,KAAC6oG,EAAO,QAIxB,I,wCCvEG,MAAM8wM,IAAc95S,EAAAA,GAAAA,IAAS,cAA0BC,GAAAA,EAC5DC,MAAAA,GACE,OACEC,EAAAA,GAAAA,KAAA,OAAKoJ,MAAO,CAAConC,UAAW,UAAUnwC,UAChCL,EAAAA,GAAAA,KAAC4sC,GAAAA,EAAI,CAACC,KAAMvsC,KAAKwL,SAASye,cAAcC,KAAK+Z,SAASq1Q,aAAaC,QAC7D/sQ,uBAAuB,EACvBnlC,QAASA,IAAMrH,KAAKu0B,iBAAiBx0B,UACzCL,EAAAA,GAAAA,KAACZ,GAAAA,EAAK,CAACsV,IAAKpU,KAAK0yE,kBAAmBhxE,MAAO,SAInD,CAEQ6yB,cAAAA,GACHv0B,KAAKwL,SAASqI,OAAOmI,GAAGmtB,MACzBnpC,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,MAAO,iBAEnE/lC,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,MAAO,kBAEvE,CAEQ2sC,eAAAA,GAEN,OAAG1yE,KAAKwL,SAASqI,OAAOmI,GAAGmtB,MAClBnpC,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOw6S,MAAMC,qBAAqBt6S,WACzEa,KAAKwL,SAASqI,OAAOmI,GAAGwa,UACzBx2B,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOw6S,MAAME,yBAAyBv6S,WAE9E,EAEX,I,mBClCK,MAAMw6S,GAA8Bl8S,GAAAA,GAAOm8S,QAAOj8S,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2D,OCAlD,MAAMi8S,GAAuBp8S,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,yE,aCCvC,MAAMk8S,GAAoCr8S,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,ivBAOnCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAO8J,UAAU,IAE/CvP,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWC,SAAS,IAiBxB0I,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAM6J,OAAOwC,cAAc,IAC3BM,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAM6J,OAAOqB,iBAAiB,IAavE2wS,IAAsCt8S,EAAAA,GAAAA,IAAOq8S,GAAPr8S,CAAyCqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,qIAC/EoN,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAMC,WAAWC,SAAS,IASvC47S,IAAoCv8S,EAAAA,GAAAA,IAAOq8S,GAAPr8S,CAAyCmE,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,8FAO7Eq8S,IAA6BhoS,EAAAA,GAAAA,GAAc6nS,IACnD5nS,aAAa6nS,IACb5nS,WAAW6nS,IACX5nS,Q,aC5DL,MAAM8nS,GAA+Bz8S,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+NAKzCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQ8J,OAAO,IAKhChN,GAASA,EAAMI,MAAM6J,OAAO4B,YACjB7L,GAASA,EAAMI,MAAM6J,OAAO8J,aAG9CsoS,IAAiC18S,EAAAA,GAAAA,IAAOy8S,GAAPz8S,CAAoCqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,oCAC9DE,GAASA,EAAMI,MAAM6J,OAAOjG,OACnCQ,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6C,KAAKC,QAAQqiD,IAAI,IAGpC+2P,IAAqC38S,EAAAA,GAAAA,IAAOy8S,GAAPz8S,CAAoCmE,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,8CAIlEy8S,IAAwBpoS,EAAAA,GAAAA,GAAcioS,IAC9ChoS,aAAaioS,IACbhoS,WAAWioS,IACXhoS,Q,gBCfE,MAAMS,IAAkEtT,EAAAA,GAAAA,KAAUzB,IACrF,MAAM0N,GAAWqD,EAAAA,GAAAA,KA2BXg6F,EAAWr9F,EAAStN,MAAMuN,aAAaC,MAAMypG,eACnD,OACI3sG,EAAAA,GAAAA,MAACyxS,GAA0B,CAACt6S,UAAU,eAAcI,SAAA,EAChDL,EAAAA,GAAAA,KAAC4hE,GAAAA,EAA0B,CAAAvhE,UACvBL,EAAAA,GAAAA,KAACmpG,EAAQ,CAACpiG,KAAM,OAEpB/G,EAAAA,GAAAA,KAAC26S,GAAqB,CAAC16S,UAAU,sBAAsB0H,QAhC9BqY,UAC7BlU,EAASqd,UAAUkd,uBAAuB,aAAa,SAAU,QAC9Dv6B,EAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAK+lG,eAAepkP,cAChEp4D,EAAMmmC,SAASC,yBAEd14B,EAASu4B,UAAUC,wBAGjBx4B,EAASouF,aAAak5I,eAAe,CAC9Ch5I,sBAAuBtuF,EAASu1C,MAAMC,UACtC7rB,QAAS,CACLC,KAAMC,GAAAA,EAASklR,cACf1lR,QAAS+wD,GAAAA,GAAeqV,aACxB3lE,OAAQswD,GAAAA,GAAeC,eAE7B,EAiB2F9lF,SAbzFyL,EAASye,cAAc6P,gBAAgBw6K,YAAYC,KAAK+lG,eAAepkP,QAChE1qD,EAASoK,YAAYC,UAAU,eAE/BrK,EAASoK,YAAYC,UAAU,YAab,IAIxB2kS,IAAoCnjS,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,a,OCrDvE,MAAM4nS,GAA4Ch9S,GAAAA,GAAOC,KAAIC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,yKAGhEe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQ8J,OAAO,IAKhChN,GAASA,EAAMI,MAAM6J,OAAO+4D,a,OCNhC,MAAM45O,IAAiCj9S,EAAAA,GAAAA,IAAOw8S,GAAPx8S,CAAkCE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sRAGnDE,GAASA,EAAMI,MAAMa,OAAOC,OAAO2vE,sBAAsBxvE,YAMhFsE,GAAAA,EAAQC,IAAIC,IAAIC,S,OCVf,MAAM+2S,IAA4Bl9S,EAAAA,GAAAA,IAAO48S,GAAP58S,CAA6BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qCCYhEiV,IAAoEtT,EAAAA,GAAAA,KAAUzB,IAChF,MAAM0N,GAAWqD,EAAAA,GAAAA,KACjB,OACIrG,EAAAA,GAAAA,MAACkyS,GAA8B,CAAC/6S,UAAU,eAAe0H,QAASA,IAAMvJ,EAAMmmC,SAAS22Q,6BAA6B76S,SAAA,EAChHL,EAAAA,GAAAA,KAACi7S,GAAyB,CAACh7S,WAAWG,EAAAA,GAAAA,IAAQ,wBAAwBC,SACjEyL,EAASoK,YAAYC,UAAU,gBAEpCnW,EAAAA,GAAAA,KAAC+6S,GAAyC,CAAC96S,UAAWsX,MAAWnX,EAAAA,GAAAA,IAAQ,gCAAgCC,SACpGyL,EAASyiB,SAAS02D,oBAEM,IAI5Bk2N,IAAsCxjS,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,a,UC1BhF,MAAMioS,GAAmCr9S,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sNAM7BE,GAASA,EAAMI,MAAM6J,OAAOgK,gCAC5BjU,GAASA,EAAMI,MAAM6J,OAAOgzS,gCAEvCp8S,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,IAO5C48S,IAAmCv9S,EAAAA,GAAAA,IAAOq9S,GAAPr9S,CAAwCqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,4BAIpEq9S,IAA4BhpS,EAAAA,GAAAA,GAAc6oS,IAClD3oS,WAAW6oS,IACX5oS,Q,OCvBE,MAAM8oS,GAA8Bz9S,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,UCGxCu9S,IAA+B57S,EAAAA,GAAAA,IAAS,cAA2CC,GAAAA,EAE5FuvR,WAAAA,GAEI/uR,KAAKwL,SAASuiN,2BAA2BC,0BAA0B,CAC/D88C,cAAc,GAEtB,CAEArrQ,MAAAA,GACI,IAAIwH,EACA8zR,EAAe/6R,KAAKwL,SAASuiN,2BAA2Bu8C,uBAO5D,OALIrjQ,EADA8zR,GACOr7R,EAAAA,GAAAA,KAAA,KAAM8L,SAAStN,MAAMuN,aAAaC,MAAMmmG,aAAY,CAAC/vG,KAAMi5R,EAAaj3O,cAAev3C,cAAY,KAEnG7M,EAAAA,GAAAA,KAAA,KAAM8L,SAAStN,MAAMuN,aAAaC,MAAM0pG,WAAU,CAACtsG,MAAO,CAAC7E,MAAOjE,KAAKwL,SAAStN,MAAMuN,aAAa1D,OAAO0C,iBAIjH/K,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACH/G,UAAW,kCACXqH,OAAO,cACPK,QAASrH,KAAK+uR,YAAYt4P,KAAKz2B,MAC/BY,OAAO,gBACPuG,YAAanH,KAAKwL,SAASqI,OAAOC,SAAW,KAAO,IAAI/T,SAEvDkH,GAGb,ICzBG,MAAMm0S,WAA6C57S,GAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KAE7Do7S,wBAA0B,KAC9Br7S,KAAKwL,SAASuiN,2BAA2BC,0BAA0B,CAC/D88C,cAAc,GAChB,CACL,CAEDrrQ,MAAAA,GACI,MAAMqsG,EAAe9rG,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM0nG,aAC5D,OACI5qG,EAAAA,GAAAA,MAACyxS,GAA0B,CAACt6S,UAAU,eAAcI,SAAA,EAChDL,EAAAA,GAAAA,KAAC4hE,GAAAA,EAA0B,CAAAvhE,UACvBL,EAAAA,GAAAA,KAACosG,EAAY,CAACrlG,KAAM,OAExB/G,EAAAA,GAAAA,KAAC26S,GAAqB,CAAC16S,UAAU,sBAAsB0H,QAASrH,KAAKq7S,wBAAwBt7S,SACxFC,KAAKwL,SAASoK,YAAYC,UAAU,+BAEzCnW,EAAAA,GAAAA,KAACy7S,GAA4B,MAGzC,E,OC5BG,MAAMG,GAAyB79S,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0SAClCe,IAAA,IAAC,aAACigB,GAAajgB,EAAA,OAAKigB,EAAgBA,EAAe,KAAQ,MAAM,IAKhDtc,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOy7C,SAAS,IAErD18C,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAWC,SAAS,I,UCR7C,MAAMm9S,GAAqB99S,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,gTAE/Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6J,OAAOjG,IAAI,IAE1BQ,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAO25D,SAAS,IAGvC56D,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAMC,WAAWC,SAAS,IAEnCyM,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAM6J,OAAO4B,SAAS,IAK1CqB,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAM6C,KAAKC,QAAQ8J,OAAO,IAIpC0wS,GAAkB/9S,GAAAA,GAAO0iD,EAACr/C,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,kKAG1B6lB,IAAA,IAAC,MAACvlB,GAAMulB,EAAA,OAAKvlB,EAAM6J,OAAOjG,IAAI,IAE1B4hB,IAAA,IAAC,MAACxlB,GAAMwlB,EAAA,OAAKxlB,EAAM6J,OAAO25D,SAAS,IAEvC99C,IAAA,IAAC,MAAC1lB,GAAM0lB,EAAA,OAAK1lB,EAAMC,WAAWC,SAAS,IACnCkqB,IAAA,IAAC,MAACpqB,GAAMoqB,EAAA,OAAKpqB,EAAM6J,OAAO4B,SAAS,IClBvC8xS,IAA4Dl8S,EAAAA,GAAAA,KAAUzB,IAChF,MAAM0N,GAAWqD,EAAAA,GAAAA,KACVorD,EAAMzuD,EAASszB,gBAAgB4kC,WAAW5lE,EAAM+jB,OAAOk7E,QACvDh6B,EAAOv3D,EAAStN,MAAMuN,aAAaC,MAAM2qG,aAC/C,OACI32G,EAAAA,GAAAA,KAAC67S,GAAkB,CAAAx7S,UACfyI,EAAAA,GAAAA,MAAC8jC,GAAAA,EAAI,CACDC,KAAM0tB,EACNhuC,IAAKuvR,GACLn0S,QAASqY,gBACClU,EAASszB,gBAAgBm+D,aAAa,CACxCF,OAAQj/F,EAAM+jB,OAAOk7E,QACvB,EACJh9F,SAAA,CAEDyL,EAASrN,WAAWC,WAAYsB,EAAAA,GAAAA,KAACqjE,EAAI,CAACt8D,KAAM,EAAGqC,MAAO,CAAClI,OAAQ,gBAAoB,KACnF9C,EAAM+jB,OAAO/f,SAXGhE,EAAM+jB,OAAOk7E,OAajB,ICjBhB2+M,IAA6Dn8S,EAAAA,GAAAA,KAAUzB,IAEhF,IAAI69S,GADa9sS,EAAAA,GAAAA,KACWob,cAAcC,KAAKvL,OAAOi9R,cACtD,OAAI72S,EAAAA,MAAMiP,QAAQ2nS,GACP,MAIPj8S,EAAAA,GAAAA,KAAC47S,GAAsB,CAAC18R,aAAc9gB,EAAM8gB,aAAa7e,SACpD47S,EAAaprS,KAAKsrS,IAAsBn8S,EAAAA,GAAAA,KAAC+7S,GAAoB,CAAgC55R,OAAQg6R,GAAlCA,EAAkB9+M,WACjE,I,OCnB1B,MAAM++M,GAAiCr+S,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0JAEpBe,IAAA,IAAC,WAACo9S,GAAWp9S,EAAA,OAAKo9S,CAAU,I,OCIA,IAQ1DlpS,IADLtT,EAAAA,GAAAA,IAAQuT,GAAT,cAC4BtT,GAAAA,EAEhBygS,uBAAAA,CAAwBC,GAC5B,MAAa,4BAANA,GAAyC,4BAANA,CAC9C,CAEAzgS,MAAAA,GACI,MAAM0kE,EAAYnkE,KAAKlC,MAAMsmE,aAAa3kD,QAAOygR,GACtClgS,KAAKigS,wBAAwBC,KACrC3vR,KAAIuK,GAAO9a,KAAKlC,MAAMmmC,SAAS+3Q,qCAAqClhS,KACtE2E,QAAOijD,GAAYA,EAASj2D,UAE7B,OAAyB,IAArB03D,EAAUjkE,OACH,MAIPR,EAAAA,GAAAA,KAACo8S,GAA8B,CAACn8S,UAAWsX,MAAWnX,EAAAA,GAAAA,IAAQ,wBAAwBA,EAAAA,GAAAA,IAAQ,qCAAsCi8S,WAAY53O,EAAUjkE,OAAOH,SAEzJokE,EAAU5zD,KAAImyD,IACVhjE,EAAAA,GAAAA,KAACsM,GAAAA,SAAc,CAAAjM,SACV2iE,EAAS6B,kBADO7B,EAAS5nD,QAOlD,KACHhI,GAEM,MAAMmpS,IAA8B5kS,EAAAA,GAAAA,GAAaxE,GAAgB,CAAC,aCdnEA,IAAgBtT,EAAAA,GAAAA,IAAS,cAAcC,GAAAA,EAA8BuT,WAAAA,GAAA,SAAA9S,WAAA,KA0DjEi8S,2BAA6B,IAC9Bl8S,KAAKwL,SAASuiN,2BAA2Bg+C,oCAGvCrsQ,EAAAA,GAAAA,KAAC07S,GAAoC,IAFnC,IAGV,CA7DD37S,MAAAA,GACE,MAAM08S,EAAan8S,KAAKwL,SAASye,cAAcC,KAAK+Z,SAASm4Q,oBACvDC,EAAmBr8S,KAAKwL,SAASye,cAAcC,KAAK+Z,SAASq4Q,sBAEnE,OACE9zS,EAAAA,GAAAA,MAACqxS,GAAoB,CAACl6S,UAAU,eAAcI,SAAA,CACzCgF,EAAAA,MAAMiP,QAAQqoS,GAEb,MADF38S,EAAAA,GAAAA,KAACu8S,GAA2B,CAAkC73O,aAAci4O,GAA1CA,EAAiB52S,KAAK,MAEzDzF,KAAKwL,SAASqI,OAAOC,UAAWpU,EAAAA,GAAAA,KAAC8rC,GAAAA,EAAmB,CAAC7rC,WAAWG,EAAAA,GAAAA,IAAQ,yBAA6B,MAEtG0I,EAAAA,GAAAA,MAACmxS,GAA2B,CAAA55S,SAAA,CACzBo8S,EAAW5rS,KAAIw1C,GAAQ/lD,KAAKu8S,0BAA0Bx2P,KAEtD/lD,KAAKw8S,iCAId,CAGQC,qCAAAA,GACN,OAAKz8S,KAAKwL,SAASqI,OAAOC,UAGtBm8B,EAAAA,EAAAA,MACK,MAEFvwC,EAAAA,GAAAA,KAACswC,GAAAA,EAAiC,IALhC,IAOX,CAEQusQ,sBAAAA,GAEN,GAAIv8S,KAAKwL,SAASqI,OAAOC,UAAY9T,KAAKlC,MAAMmlC,WAAW4F,kBACzD,OAAO,KACR,QAAA8mC,EAAA1vE,UAAAC,OAJ+B6lD,EAAI,IAAA31C,MAAAu/D,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAJ9pB,EAAI8pB,GAAA5vE,UAAA4vE,GAMpC,OAAOnwE,EAAAA,GAAAA,KAAC8kE,GAAAA,EAAkB,CAAsBJ,aAAcre,GAA9BA,EAAKtgD,KAAK,KAC5C,CAEQ+2S,yBAAAA,GACN,OAAKx8S,KAAKwL,SAASqI,OAAOC,UAAY9T,KAAKlC,MAAMmlC,WAAW4F,kBACnD,MAIPrgC,EAAAA,GAAAA,MAAC0yS,GAA2B,CAACv7S,UAAU,sBAAqBI,SAAA,CACzDC,KAAK08S,2BACL18S,KAAK28S,2BACL38S,KAAKy8S,wCACLz8S,KAAK48S,uBAGZ,CASQF,wBAAAA,GAA6C,IAAD7jP,EAAAC,EAElD,MAAM+jP,EAAiE,QAA5ChkP,EAAG74D,KAAKwL,SAASye,cAAcC,KAAK+Z,gBAAQ,IAAA40B,GAAgB,QAAhBC,EAAzCD,EAA2CikP,sBAAc,IAAAhkP,OAAhB,EAAzCA,EAA2DrsD,QACnFswS,GAAiC/8S,KAAKwL,SAASyiB,SAAS0kK,iBAAiB3+K,QACzEgpS,EAA6Bh9S,KAAKwL,SAASuiN,2BAA2By8C,mBAE5E,OAAKqyC,GAA0BE,GAAkCC,GAK/Dx0S,EAAAA,GAAAA,MAAC45D,GAAAA,EAAoB,CAAAriE,SAAA,CAClBC,KAAKi9S,oBACLj9S,KAAKk9S,4BACLl9S,KAAKk8S,gCAPD,IAUX,CAGQe,iBAAAA,GAAyC,IAADjkP,EAC9C,OAA4D,QAA5DA,EAAIh5D,KAAKwL,SAASye,cAAcC,KAAK+Z,SAAS64Q,sBAAc,IAAA9jP,GAAxDA,EAA0DvsD,SAE1D/M,EAAAA,GAAAA,KAAC86S,GAAiC,IAG/B,IACT,CAEQ0C,yBAAAA,GACN,OAAIl9S,KAAKwL,SAASyiB,SAAS0kK,iBAAiB3+K,QACnC,MAGPtU,EAAAA,GAAAA,KAACm7S,GAAmC,GAExC,CAEQ8B,wBAAAA,GACN,OAAI38S,KAAKwL,SAASrN,WAAWklB,UACpB,MAIL3jB,EAAAA,GAAAA,KAACg8S,GAAqB,GAE5B,CAEQkB,kBAAAA,GACN,OAAK58S,KAAKwL,SAASye,cAAcC,KAAK+Z,SAASq1Q,aAAa7sS,SAK1DjE,EAAAA,GAAAA,MAACwD,GAAAA,SAAc,CAAAjM,SAAA,EACbL,EAAAA,GAAAA,KAACu7S,GAAyB,KAC1Bv7S,EAAAA,GAAAA,KAAC25S,GAAW,OANP,IASX,IAGW8D,IAAW9lS,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,e,gBC7J9C,MAAMuqS,IAA8B5+S,EAAAA,GAAAA,GAAU,+B,aCCrD,MAAMqtC,GAAapuC,GAAAA,GAAOkpC,GAAEhpC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iFAOtBkuC,IAAQruC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,gDAK1BouC,IAAYvuC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBmE,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,0HCbvBy/S,IDuBiCnxQ,EAAAA,GAAAA,GAAeJ,GAAOE,I,aEtBpE,MAAMH,GAAapuC,GAAAA,GAAO6/S,GAAE3/S,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6DAGjBE,GAASA,EAAMI,MAAM6J,OAAO4B,YAGjCmiC,IAAQruC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,wCAE5Be,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,IAElCua,IAAYvuC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBmE,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,iCAEhC0E,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6C,KAAKC,QAAQkvE,MAAM,ICb7BqtO,IDgBkCrxQ,EAAAA,GAAAA,GAAeJ,GAAOE,I,aEfrE,MAAMH,GAAapuC,GAAAA,GAAOioC,GAAE/nC,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0DAMtBkuC,IAAQruC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,8CAK1BouC,IAAYvuC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBmE,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,gMAEVE,GAASA,EAAMI,MAAM6J,OAAO6+B,iBACzB9oC,GAASA,EAAMI,MAAM6J,OAAOilD,gBCf5CwwP,ID2BqCtxQ,EAAAA,GAAAA,GAAeJ,GAAOE,IE3B3DyxQ,IAA+Bj/S,EAAAA,GAAAA,GAAU,gC,gBCKtD,MAAMqtC,GAAapuC,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,QAEvBkuC,IAAQruC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBqD,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,4BAI1BouC,IAAYvuC,EAAAA,GAAAA,IAAOouC,GAAPpuC,CAAkBmE,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,4HAIdE,GAASA,EAAMI,MAAM6J,OAAO8J,aAG9C/T,GAASA,EAAM0yK,YAAa3vK,EAAAA,GAAAA,IAAGsB,KAAAA,IAAAvE,EAAAA,GAAAA,GAAA,sFACPE,GAASA,EAAMI,MAAMa,OAAOC,OAAO2vE,sBAAsBxvE,eCnBxEu+S,IDwByCxxQ,EAAAA,GAAAA,GAAeJ,GAAOE,IEV/D2xQ,IAAmCp+S,EAAAA,GAAAA,IAC9C,cAA+CC,GAAAA,EAA2CuT,WAAAA,GAAA,SAAA9S,WAAA,KAEhF29S,YAAet9Q,IACnBtgC,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAa,gBAAiBzF,EAAK73B,OAElF63B,EAAK+wJ,aAAa,CACpB,CAEMwsH,cAAAA,CAAev9Q,GAErB,IAAIw9Q,EAASx9Q,EAAK73B,MAAMuX,cAAgB,QACxC,OACExX,EAAAA,GAAAA,MAACg1S,GAA2B,CAAcn2S,QAASA,IAAMrH,KAAK49S,YAAYt9Q,GAAO3gC,UAAU,4BAA2BI,SAAA,EACpHL,EAAAA,GAAAA,KAAA,SAAO+J,KAAM,QAAS8lB,GAAIuuR,EAAQ/3R,KAAM,UACxCvd,EAAAA,GAAAA,MAACi1S,GAA4B,CAACM,WAAYz9Q,EAAK8wJ,UAAWzxL,UAAU,4BAA2BI,SAAA,EAC7FL,EAAAA,GAAAA,KAACg+S,GAA+B,CAACltI,UAAWlwI,EAAK8wJ,UAAWzxL,UAAU,8BAClE2gC,EAAK25B,KAAMv6D,EAAAA,GAAAA,KAAC4sC,GAAAA,EAAI,CAACC,KAAMjM,EAAK25B,IAAIl6D,SAAEugC,EAAK73B,SACtC/I,EAAAA,GAAAA,KAAA,QAAAK,SAAOugC,EAAK73B,aALaq1S,EAStC,CAEAr+S,MAAAA,GAEE,OAAuC,IAApCO,KAAKlC,MAAM87S,QAAQr/Q,MAAMr6B,OACnB,MAIPsI,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACEL,EAAAA,GAAAA,KAAC69S,GAAwB,CAAAx9S,SAAEC,KAAKlC,MAAM87S,QAAQnxS,SAC9C/I,EAAAA,GAAAA,KAAC29S,GAAuB,CAAAt9S,SACrBC,KAAKlC,MAAM87S,QAAQr/Q,MAAMhqB,KAAI+vB,GAAQtgC,KAAK69S,eAAev9Q,SAIlE,I,gBCzCG,MAAM09Q,IAAoCz+S,EAAAA,GAAAA,IAC/C,cAAgDC,GAAAA,EAEtCy+S,cAAAA,CAAerE,GAErB,OAA4B,IAAzBA,EAAQr/Q,MAAMr6B,OACR,MAGFR,EAAAA,GAAAA,KAACi+S,GAAgC,CAAC/D,QAASA,GACpD,CAEAn6S,MAAAA,GAEE,IAAIkzL,EAAmB3yL,KAAKwL,SAASyiB,SAAS0kK,iBAE9C,OAAIA,EAAiB3+K,QACZ,MAIPxL,EAAAA,GAAAA,MAAC40S,GAA2B,CAACj1P,OAAQnoD,KAAKlC,MAAMqqD,OAAQxoD,WAAWG,EAAAA,GAAAA,IAAQ,iCAAiCC,SAAA,CACzGC,KAAKi+S,eAAetrH,EAAiBW,kBACpCtzL,KAAKwL,SAASrN,WAAWklB,WAAasvK,EAAiBW,iBAAiB/4J,MAAMr6B,QAAUyyL,EAAiBe,iBAAiBn5J,MAAMr6B,QAChIR,EAAAA,GAAAA,KAACmN,GAAAA,EAAU,CAACqxS,UAAU,OAAO3tR,aAAa,OAAO5wB,UAAU,mCAC3D,KACDK,KAAKi+S,eAAetrH,EAAiBe,oBAG5C,ICxCSyqH,IAAmB3/S,EAAAA,GAAAA,GAAU,oB,OCMnC,MAAM4/S,GAAa3gT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,6gCAQvBE,GAASA,EAAM+kB,SAGjBlkB,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWC,SAAS,GAM5CqF,GAAAA,EAAQC,IAAIC,IAAIC,QAIdy6S,GAAAA,GAGA56S,GAAAA,EAAQC,IAAIC,IAAIC,SAMTtB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWutC,SAAS,GAO9C4yQ,GAAAA,I,OC3CD,MAAMC,GAA2B9gT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8HAMvCE,GAASA,EAAMI,MAAM6J,OAAOjG,O,OCNhC,MAAM08S,GAAiB/gT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,odC0BlCiV,IAAwCtT,EAAAA,GAAAA,KAAUzB,IACpD,MAAM0N,GAAWqD,EAAAA,GAAAA,KACX4vS,GAAatvS,EAAAA,GAAAA,UACbuvS,GAAiBvvS,EAAAA,GAAAA,QAAO,CAACwvS,YAAW,EAAOC,gBAAgB,EAAGC,wBAAyB,KAE7FlxS,EAAAA,GAAAA,YAAU,KACN,MAAMi7B,GAAIn5B,EAAAA,EAAAA,KAAS,IAAM3R,EAAMmlC,WAAW4F,oBACrCA,IACOA,GAAqB41Q,EAAWlwS,UAChCkwS,EAAWlwS,QAAQogL,UAAY,EACnC,IAER,MAAO,IAAM/lJ,GAAG,GACjB,CAAC9qC,EAAMmlC,aAEV,MAUM67Q,EAAep/R,iBACVlU,EAASu4B,UAAUC,WAAW,EAqBnC+6Q,EAAkBA,KACpBvzS,EAASqd,UAAUkd,uBAAuB,aAAa,SAAU,gBACjEjoC,EAAMmlC,WAAWa,oBACjBhmC,EAAMmmC,SAASC,iBAAiB,EA0F9BylH,EAAa1yI,KAAW,cAAe,CACzC,CAAConS,GAAAA,IAAYvgT,EAAMmmC,SAAS+6Q,mBAGhC,OACIt/S,EAAAA,GAAAA,KAAC0+S,GAAU,CAACz+S,UAAWgqJ,EAAYr8I,IAAKmxS,EAAYQ,aAtDvCz6S,IAIb,GAFiBgH,EAASqI,OAAOC,UAER,OAAV2qS,QAAU,IAAVA,GAAAA,EAAYlwS,QAAS,CAChC,MAAM2wS,EAAQ1zS,EAASyiB,SAASC,cAC1BixR,EAAW36S,EAAE2hL,QAAQ,GAAGhyB,QAEzBuqJ,EAAenwS,QAAQowS,aACxBD,EAAenwS,QAAQowS,YAAa,EACpCD,EAAenwS,QAAQswS,wBAA0BrzS,EAASsE,OAAO27I,sCAAsCgzJ,EAAWlwS,SAClHmwS,EAAenwS,QAAQqwS,gBAAkBO,EAGzCV,EAAWlwS,QAAQu/D,UAAUC,IAAIuwO,GAAAA,KAIrC,MAAMc,EAAgB/oS,KAAKuoG,IAAIvoG,KAAM6oS,EAAQ,MAAQ,OAAQC,EAAUT,EAAenwS,QAAQqwS,iBAAmBF,EAAenwS,QAAQqwS,kBAAoBM,GAAS,EAAI,GAEzKT,EAAWlwS,QAAQzF,MAAM6/F,UAAS,cAAA/oG,OAAiB8+S,EAAenwS,QAAQswS,wBAA0BO,EAAa,MACrH,IAiCyE3oR,UAAK,GAAOiwJ,YA9BjE24H,KACpB,GAAGX,EAAenwS,QAAQowS,WAAY,CAClC,MAAMO,EAAQ1zS,EAASyiB,SAASC,cAE1BoxR,EAAaJ,EAAQ1zS,EAASsE,OAAOyvS,WAAa,EAGlDC,EAAyBnpS,KAAKsD,MAAM8kS,EAAWlwS,QAAQ08O,aAAe,EAAE,IACxEw0D,EAA0BppS,KAAKuoG,IAAI0gM,EAAab,EAAWlwS,QAAQqB,wBAAwBsvS,EAAQ,QAAU,SAGnHT,EAAWlwS,QAAQu/D,UAAUyvD,OAAO+gL,GAAAA,IACpCI,EAAenwS,QAAQowS,YAAa,EAGhCc,EAA0BD,GAC1B1hT,EAAMmmC,SAASC,kBAInBu6Q,EAAWlwS,QAAQzF,MAAM42S,eAAe,YAC5C,IASiHjpR,UAAK,GAAO5T,OAAQ/kB,EAAMmmC,SAASphB,OAAO9iB,UACvJyI,EAAAA,GAAAA,MAAC21S,GAAgB,CAAAp+S,SAAA,CA7FO4/S,MAC5B,MAAMl3M,EAAWj9F,EAAStN,MAAMuN,aAAaC,MAAMs3C,SACnD,IAAI48P,EAAoBA,IAAMb,IAC1Bc,GAAqB,EACrBC,EAAoB,4BAYxB,OAXIhiT,EAAMmlC,WAAW4F,oBACjB+2Q,EAAoBA,IAAM9hT,EAAMmlC,WAAWa,oBAC3C+7Q,GAAqB,EACrBC,EAAoB,+BAEpBhiT,EAAMmmC,SAAS87Q,2BACfH,EAAoBA,IAAM9hT,EAAMmmC,SAAS+7Q,8BACzCH,GAAqB,EACrBC,GAAoBhgT,EAAAA,GAAAA,IAAQ,0BAG5B0L,EAASrN,WAAWC,WAEhBoK,EAAAA,GAAAA,MAAC2lL,GAAmB,CAAApuL,SAAA,EAChBL,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,CAAC5M,UAAU,MAAK9I,UAC5ByI,EAAAA,GAAAA,MAAC4lL,GAAa,CAACzuL,UAAWmgT,EAAmBz4S,QAASu4S,EAAkB7/S,SAAA,EACpEL,EAAAA,GAAAA,KAAC+oG,EAAQ,IACPo3M,GACEngT,EAAAA,GAAAA,KAAC2uL,GAAkB,CAAAtuL,SAAEyL,EAASoK,YAAYC,UAAU,UAClD,WAGdnW,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,CAAC5M,UAAU,MAAK9I,UAC5BL,EAAAA,GAAAA,KAAC43S,GAAO,CAACjwS,QAASA,IAAM03S,SAE5Br/S,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,CAAC5M,UAAU,WAKhC,IAAI,EA2DF82S,IAEDn3S,EAAAA,GAAAA,MAAC+1S,GAAwB,CAAAx+S,SAAA,CArI7ByL,EAASrN,WAAWC,UACb,MAIPsB,EAAAA,GAAAA,KAACg8S,GAAqB,CAAC98R,aAAc9gB,EAAM6gB,OAAOC,eAQtCqhS,MAChB,IAAKz0S,EAASqI,OAAOC,SACjB,OACIpU,EAAAA,GAAAA,KAAC43S,GAAO,CACJjwS,QAASy3S,EACToB,cAAc,EACd3I,eAAe,GAG3B,EAiHa0I,IACDz3S,EAAAA,GAAAA,MAACg2S,GAAc,CAAAz+S,SAAA,CA/GLogT,MACtB,IAAK30S,EAASqI,OAAOC,SACjB,OAAOpU,EAAAA,GAAAA,KAACs5S,GAAU,GACtB,EA6GiBmH,IACDzgT,EAAAA,GAAAA,KAACy9S,GAAQ,OAEZ3xS,EAASrN,WAAWC,UAAY,MAAOsB,EAAAA,GAAAA,KAACsqB,GAAAA,EAA6B,KACtEtqB,EAAAA,GAAAA,KAACs+S,GAAiC,CAAC71P,OAAQrqD,EAAMmmC,SAAS87Q,kCAGzD,IAKRK,IAAU/oS,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,WAAY,aAAc,WC3LjEwtS,IAAgC9gT,EAAAA,GAAAA,KAAS,KACpD,MAAMiM,GAAWqD,EAAAA,GAAAA,KAcjB,OACInP,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACH/G,UAAW,wBACXqH,OAAO,cACPC,KAAM,CAACyB,UAAW8C,EAAStN,MAAMuN,aAAaC,MAAMkmG,UACpDvqG,QAjBYqY,UAClBlU,EAASqd,UAAUkd,uBAAuB,aAAc,SAAU,oBACrDv6B,EAASouF,aAAak5I,eAAe,CAChDh5I,sBAAuBtuF,EAASu1C,MAAMC,UACtC7rB,QAAS,CACPC,KAAMC,GAAAA,EAASirR,SACfzrR,QAAS+wD,GAAAA,GAAeqV,aACxB3lE,OAAQswD,GAAAA,GAAeC,eAEzB,EASIjlF,OAAO,YACT,IC1BK2/S,IAA6B/hT,EAAAA,GAAAA,GAAU,8BCU9CqU,IAA8DtT,EAAAA,GAAAA,KAAUzB,IAW5E,IAAI0iT,EAAuB1iT,EAAM6gB,OAAOwhR,0BACxC,OAAoC,IAAhCqgB,EAAqBtgT,OAChB,MAGLR,EAAAA,GAAAA,KAAC6gT,GAA0B,CAAC5gT,WAAWG,EAAAA,GAAAA,IAAQ,uBAAuBC,UAf1C0gT,EAgBFD,GAdxB9gT,EAAAA,GAAAA,KAACsM,GAAAA,SAAc,CAAAjM,SACZ0gT,EAAMlwS,KAAImyD,IAAYhjE,EAAAA,GAAAA,KAACsM,GAAAA,SAAc,CAAAjM,SACnC2iE,EAAS6B,kBADgC7B,EAAS5nD,YAH7B2lS,KAiBC,IAItBC,IAAgCrpS,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,WChC7D8tS,IAAyBniT,EAAAA,GAAAA,GAAU,0BCU1CqU,IAA0DtT,EAAAA,GAAAA,KAAUzB,IACxE,MAAM0N,GAAWqD,EAAAA,GAAAA,KAaXu5F,EANA58F,EAASuP,6BAA6B27L,yBAAyBz7L,UAC1DzP,EAAStN,MAAMuN,aAAaC,MAAM0lG,uBAEpC5lG,EAAStN,MAAMuN,aAAaC,MAAM2lG,eAI3C,OACI3xG,EAAAA,GAAAA,KAACihT,GAAsB,CAAEt5S,QAdPwzD,KACpBrvD,EAASqd,UAAUkd,uBAAuB,aAAa,SAAU,eACjEjoC,EAAMmmC,SAAS28Q,gBAAgB,EAYmB7gT,UAC9CL,EAAAA,GAAAA,KAAC0oG,EAAc,CAACzoG,UAAS,GAAAC,QAAKE,EAAAA,GAAAA,IAAQ,qBAAuB2G,KAAM,IAAK8F,cAAY,KAC7D,IAKlBs0S,IAA4BxpS,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,a,mBCjC/D,MAAMiuS,GAA4BrjT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+GCatCmjT,IAAkCxhT,EAAAA,GAAAA,IAC7C,cAA8C4yB,GAAAA,EAG5Cpf,WAAAA,CAAYjV,GACVsa,MAAMta,GAAO,KAHPkjT,YAAM,OAUNC,gBAAkB,KACxBjhT,KAAKkhT,wBACLlhT,KAAKuyB,UAAQrtB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAGlF,KAAK0mB,OAAK,IAAEyhC,QAASnoD,KAAK0mB,MAAMyhC,SAAQ,EAC1D,KAEMg5P,iBAAmB,KACzBnhT,KAAKuyB,UAAQrtB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAGlF,KAAK0mB,OAAK,IAAEyhC,QAAQ,IAAO,EAC7C,KAEMi5P,sBAAwB,KAC9BphT,KAAKghT,OAAS72Q,WAAWnqC,KAAKmhT,iBAAkB,IAAI,EACpD,KAEMD,sBAAwB,KAC9Bj3Q,aAAajqC,KAAKghT,OAAO,EAnBzBhhT,KAAK0mB,MAAQ,CACXyhC,QAAQ,EAEZ,CAmBA1oD,MAAAA,GAEE,OAAGO,KAAKwL,SAASqI,OAAOC,UAAY9T,KAAKwL,SAASyiB,SAAS0kK,iBAAiB3+K,QACnE,MAIPxL,EAAAA,GAAAA,MAACs4S,GAAyB,CACxBx5S,aAAcA,IAAMtH,KAAKkhT,wBACzB35S,aAAcA,IAAMvH,KAAKohT,wBAAwBrhT,SAAA,EAEjDL,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACLM,OAAO,cACPC,KAAM,CAACyB,UAAW1I,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAMomG,eAAgBrrG,KAAM,SAC/ErD,OAAQpD,KAAK0mB,MAAMyhC,OACnB9gD,QAASA,IAAMrH,KAAKihT,kBACpBrgT,OAAO,WACPjB,WAAWG,EAAAA,GAAAA,IAAQ,kCAErBJ,EAAAA,GAAAA,KAACs+S,GAAiC,CAAC71P,OAAQnoD,KAAK0mB,MAAMyhC,WAG5D,IChESk5P,IAAyB7iT,EAAAA,GAAAA,GAAU,0BCKzC,MAAM8iT,WAAqC9hT,GAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KACrDoH,QAAU,KACdrH,KAAKwL,SAASqd,UAAUkd,uBAAuB,SAAU,QAAS,iBAElE/lC,KAAKwL,SAAS6jC,QAAQgoB,YAAY,CAC9BliC,QAAS,CACLG,OAAQC,GAAAA,GAAeC,aACvBJ,KAAMC,GAAAA,EAASolE,SACf5lE,QAASC,GAAAA,GAAiB6a,gBAEhC,CACJ,CACFlwC,MAAAA,GACI,OAAOC,EAAAA,GAAAA,KAAC2hT,GAAsB,CAACh6S,QAASrH,KAAKqH,QAAQtH,UACjDL,EAAAA,GAAAA,KAACZ,GAAAA,EAAK,CAACsV,IAAKpU,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOuiT,wBAAwBpiT,cAE3F,ECrBG,MAAMqiT,IAAqBhjT,EAAAA,GAAAA,GAAU,sBCA/BijT,IAA2BjjT,EAAAA,GAAAA,GAAU,4B,OCC3C,MCDMkjT,GDCsCjkT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mHAIzD6F,GAAAA,EAAQC,IAAIC,IAAIC,S,OEJb,MCDM+9S,GDCuClkT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mHAI1D6F,GAAAA,EAAQC,IAAIC,IAAIC,S,gBELb,MAAMg+S,IAAuBpjT,EAAAA,GAAAA,GAAU,wB,OCiC9C,IACaqU,IADZtT,EAAAA,GAAAA,IAAQuT,GAAT,cACmCtT,GAAAA,EAAqCuT,WAAAA,GAAA,SAAA9S,WAAA,KAM5D4hT,kBAAqBhtR,IACzB70B,KAAKlC,MAAM6gB,OAAOohR,iBAAiBlrQ,GAAW,KAAK,EACrD,KAuEMitR,mBAAqBpiS,UACzB1f,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAc,SAAU,2BAC1D/lC,KAAKwL,SAASy3B,YAAYsH,kBAAkB,CAC5D,CAhFD,iBAAYiD,GACR,OAAOxtC,KAAKwL,SAASye,cAAcC,KAAKvL,MAC5C,CAMQojS,iCAAAA,GACJ,OAAOriT,EAAAA,GAAAA,KAACswC,GAAAA,EAAiC,GAC7C,CAEQgyQ,yBAAAA,GAA6B,IAADC,EAAAC,EAAAC,EAEhC,OAA4D,KAAtC,QAAlBF,EAAAjiT,KAAKwtC,qBAAa,IAAAy0Q,GAAgB,QAAhBC,EAAlBD,EAAoBG,sBAAc,IAAAF,GAAQ,QAARC,EAAlCD,EAAoC1hS,cAAM,IAAA2hS,OAAxB,EAAlBA,EAA4C11S,SACrC,MAGJ/M,EAAAA,GAAAA,KAAC8rC,GAAAA,EAAmB,GAC/B,CAEQ62Q,iCAAAA,GAEJ,OAAKriT,KAAKwL,SAASygL,cAAchxK,WAK7Bvb,EAAAA,GAAAA,KAACgH,GAAAA,EAAM,CACHM,OAAO,cACPC,KAAM,CAAEyB,UAAW1I,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM4lG,mBAC1DjqG,QAASqY,iBACE1f,KAAKwL,SAASu4B,UAAUC,wBAClBhkC,KAAKwL,SAASouF,aAAaY,sBAAsB,CAC1DV,sBAAuB95F,KAAKwL,SAASu1C,MAAMC,UAC3C7rB,QAAS,CACLC,KAAMC,GAAAA,EAASqa,OACf7a,QAASC,GAAAA,GAAiBgmF,0BAC1BxlF,OAAQC,GAAAA,GAAeC,cAE3BC,sBAAuB,CACnBH,OAAQwqC,GAAAA,GAAwBiqJ,QAEtC,EAENnpN,OAAO,WACPwG,QAASpH,KAAKwL,SAASoK,YAAYC,UAAU,yBAC7ClW,UAAW0jG,GAAAA,KAvBR,IA0Bf,CAEQi/M,wBAAAA,GAA4B,IAADC,EAAAC,EAAAC,EAC/B,OAA0D,KAApC,QAAlBF,EAAAviT,KAAKwtC,qBAAa,IAAA+0Q,GAAgB,QAAhBC,EAAlBD,EAAoBH,sBAAc,IAAAI,GAAM,QAANC,EAAlCD,EAAoCxwE,YAAI,IAAAywE,OAAtB,EAAlBA,EAA0Ch2S,SACnC,MAGJ/M,EAAAA,GAAAA,KAAC2gT,GAAmB,GAC/B,CAEQqC,iCAAAA,GAEJ,OAAK1iT,KAAKwL,SAASuiN,2BAA2Bg+C,oCAIvCrsQ,EAAAA,GAAAA,KAACy7S,GAA4B,IAHzB,IAIf,CAEQwH,8BAAAA,GAAkC,IAADC,EAAAC,EAAAC,EACrC,OAA+D,KAAzC,QAAlBF,EAAA5iT,KAAKwtC,qBAAa,IAAAo1Q,GAAgB,QAAhBC,EAAlBD,EAAoBR,sBAAc,IAAAS,GAAW,QAAXC,EAAlCD,EAAoCrvH,iBAAS,IAAAsvH,OAA3B,EAAlBA,EAA+Cr2S,UAAoBzM,KAAKwL,SAASyiB,SAAS0kK,iBAAiB3+K,QACpG,MAGJtU,EAAAA,GAAAA,KAACqhT,GAA+B,GAC3C,CAOQgC,yBAAAA,GACJ,OAAK/iT,KAAKwL,SAASuP,6BAA6B27L,yBAAyBz7L,WAIlEzS,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACHL,EAAAA,GAAAA,KAAC8hT,GAAkB,CAAC7hT,UAAU,yBAC9BD,EAAAA,GAAAA,KAAA,OAAKC,UAAW,iCAAkC0H,QAASrH,KAAK8hT,mBAAmB/hT,UAC/EL,EAAAA,GAAAA,KAACirC,GAAAA,EAAU,SANR,IASf,CAEQq4Q,mBAAAA,GAIJ,OACIx6S,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAAC0tC,GAAAA,EAAuB,CAACE,uBAAuB,KAChD5tC,EAAAA,GAAAA,KAACghT,GAA6B,KAC9Bl4S,EAAAA,GAAAA,MAACi5S,GAAwB,CAAC9hT,UAAU,sBAChCsjT,aAAcjjT,KAAKlC,MAAM6gB,OAAOihR,uBAChCtyR,IAAKtN,KAAK6hT,kBACVqB,gBAAgB,EAAMnjT,SAAA,EACtByI,EAAAA,GAAAA,MAACk5S,GAA4B,CAAC/hT,UAAU,2BAA0BI,SAAA,EAC9DL,EAAAA,GAAAA,KAACkiT,GAAoB,CAAA7hT,UACjBL,EAAAA,GAAAA,KAACmhT,GAAyB,OAE9BnhT,EAAAA,GAAAA,KAAC8hT,GAAkB,CAAC7hT,UAAU,yBAC9BD,EAAAA,GAAAA,KAAC43S,GAAO,CAACC,eAAe,IACvBv3S,KAAK+iT,gCAEVv6S,EAAAA,GAAAA,MAACm5S,GAA6B,CAAChiT,UAAU,4BAA2BI,SAAA,CAC/DC,KAAKmjT,kBACNzjT,EAAAA,GAAAA,KAACqwC,GAAAA,EAA6B,YAKlD,CAEQqzQ,iBAAAA,GAAqB,IAADC,EAAAC,EACxB,OAAuB,QAAnBD,EAACrjT,KAAKwtC,qBAAa,IAAA61Q,GAAlBA,EAAoBE,kBAKrB7jT,EAAAA,GAAAA,KAACZ,GAAAA,EAAK,CAACsV,IAAuB,QAApBkvS,EAAEtjT,KAAKwtC,qBAAa,IAAA81Q,OAAA,EAAlBA,EAAoBC,mBAJzB,IAMf,CAEQC,wBAAAA,CAAyBC,GAC7B,IAAI34D,EAAiF,GACrF,IAAK24D,EACD,OAAO,KAGX,IAAK,IAAIpgR,EAAQ,EAAGA,EAAQogR,EAAavjT,OAAQmjC,IAAS,CACtD,MAAMqgR,EAAqBD,EAAapgR,GACxC,OAAQqgR,GACJ,IAAK,wBACD54D,EAASnwO,KAAK,CACVmoC,UAAW9iD,KAAK2iT,iCAChBroS,YAAaopS,IAEjB,MACJ,IAAK,kBACD54D,EAASnwO,KAAK,CACVmoC,UAAW9iD,KAAKsiT,2BAChBhoS,YAAaopS,IAEjB,MACJ,IAAK,eACD54D,EAASnwO,KAAK,CACVmoC,UAAW9iD,KAAKqiT,oCAChB/nS,YAAaopS,IAEjB,MACJ,IAAK,yBACD54D,EAASnwO,KAAK,CACVmoC,UAAW9iD,KAAK0iT,oCAChBpoS,YAAaopS,IAEjB,MACJ,IAAK,wBACD54D,EAASnwO,KAAK,CACVmoC,UAAW9iD,KAAK+sC,0BAChBzyB,YAAaopS,IAEjB,MACJ,IAAK,iBACD54D,EAASnwO,KAAK,CACVmoC,UAAW9iD,KAAKojT,oBAChB9oS,YAAaopS,IAEjB,MACJ,IAAK,kBACD54D,EAASnwO,KAAK,CACVmoC,UAAW9iD,KAAKgiT,4BAChB1nS,YAAaopS,IAEjB,MACJ,IAAK,oBACD54D,EAASnwO,KAAK,CACVmoC,UAAW9iD,KAAK2jT,oBAChBrpS,YAAaopS,IAI7B,CAMA,OAJA54D,EAAWA,EAASrrO,QAAO,SAAUuF,GACjC,OAAuB,MAAhBA,EAAG89B,SACd,IAEwB,IAApBgoM,EAAS5qP,OACF,KAIP4qP,EAASv6O,KAAI,CAACskB,EAASwO,KAEf76B,EAAAA,GAAAA,MAACo7S,GAAAA,SAAQ,CAAA7jT,SAAA,CACJ80B,EAAQiuB,UACRzf,IAAWynN,EAAS5qP,OAAS,IAAMR,EAAAA,GAAAA,KAAC8hT,GAAkB,MAF5C3sR,EAAQva,cAOvC,CAEQyyB,uBAAAA,GAA2B,IAAD82Q,EAAAC,EAC9B,OAAuD,MAAhC,QAAnBD,EAAC7jT,KAAKwtC,qBAAa,IAAAq2Q,GAAkB,QAAlBC,EAAlBD,EAAoB32Q,wBAAgB,IAAA42Q,GAApCA,EAAsCr3S,SAChC,MAEJ/M,EAAAA,GAAAA,KAAC0tC,GAAAA,EAAuB,CAACE,uBAAuB,GAC3D,CAEQy2Q,wBAAAA,GAA4B,IAADC,EAC/B,OACItkT,EAAAA,GAAAA,KAACgiT,GAA4B,CAAC/hT,UAAU,2BAA0BI,SAC7DC,KAAKwjT,yBAA2C,QAAnBQ,EAAChkT,KAAKwtC,qBAAa,IAAAw2Q,OAAA,EAAlBA,EAAoBC,kBAG/D,CAEQN,iBAAAA,GACJ,OAAOjkT,EAAAA,GAAAA,KAACghT,GAA6B,GACzC,CAEQyC,cAAAA,GAAkB,IAADe,EAAAC,EACrB,IAAKnkT,KAAKwL,SAASkE,KAAKC,aACpB,OAAO,KAGX,IAAK3P,KAAKwL,SAASrN,WAAW0S,UAC1B,OAAO,KAKX,OAF2F,KAA9B,QAAlBqzS,EAAAlkT,KAAKwtC,qBAAa,IAAA02Q,GAAgB,QAAhBC,EAAlBD,EAAoB9B,sBAAc,IAAA+B,OAAhB,EAAlBA,EAAoC/4G,UAGpE1rM,EAAAA,GAAAA,KAAC4hT,GAA4B,IAGjC,IACX,CAEQ8C,yBAAAA,GAA6B,IAADC,EAChC,OACI77S,EAAAA,GAAAA,MAACm5S,GAA6B,CAAChiT,UAAU,4BAA2BI,SAAA,CAC/DC,KAAK+hT,oCACL/hT,KAAKwjT,yBAA2C,QAAnBa,EAACrkT,KAAKwtC,qBAAa,IAAA62Q,OAAA,EAAlBA,EAAoBC,mBAEnD5kT,EAAAA,GAAAA,KAACqwC,GAAAA,EAA6B,MAG1C,CAEAtwC,MAAAA,GAKI,OAJA0qC,YAAW,KACPnqC,KAAKlC,MAAM6gB,OAAOwgR,oBAAoB,GACvC,MAECn/R,KAAKwL,SAASqI,OAAOC,SACd9T,KAAKgjT,uBAIZx6S,EAAAA,GAAAA,MAACi5S,GAAwB,CAAC9hT,UAAU,sBAChCsjT,aAAc,EACd31S,IAAKtN,KAAK6hT,kBACVqB,gBAAgB,EAAKnjT,SAAA,CACpBC,KAAK+jT,2BACL/jT,KAAKokT,8BAIlB,KACHtxS,GAGM,MAAMyxS,IAAkBltS,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,UAAW,CAAE+Z,eAAgBA,IAAM,OCjUlF43R,IAAsBhmT,EAAAA,GAAAA,GAAU,uBCIhCimT,IAAmBllT,EAAAA,GAAAA,IAAS,cAA+BC,GAAAA,EAAeuT,WAAAA,GAAA,SAAA9S,WAAA,KAE7E24D,gBAAkB,KACxB54D,KAAKwL,SAASs+O,QAAQnrD,cAAc,CACpC,CAEFl/L,MAAAA,GACE,OAAOC,EAAAA,GAAAA,KAAC8kT,GAAmB,CACzB7kT,WAAWG,EAAAA,GAAAA,IAAQ,cACnBuH,QAASrH,KAAK44D,gBACdj1C,KAAM3jB,KAAKwL,SAASs+O,QAAQ3hM,OAC5BtlC,OAAQ7iB,KAAKwL,SAASs+O,QAAQjnO,QAElC,I,OCbK,MAAM6hS,GAAwBjnT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qOAOlBE,GAASA,EAAMI,MAAMa,OAAOC,OAAO2vE,sBAAsBxvE,a,OCV/E,MAAMwlT,IAA0BlnT,EAAAA,GAAAA,IAAOinT,GAAPjnT,CAA6BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,qTAapCe,IAAA,IAAC,MAACugT,GAAMvgT,EAAA,OAAKugT,EAAQ,OAAS,KAAK,I,OCb5D,MAAM0F,IAAoBnnT,EAAAA,GAAAA,IAAOinT,GAAPjnT,CAA6BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iD,OCAvD,MAAMinT,IAAqBpnT,EAAAA,GAAAA,IAAOinT,GAAPjnT,CAA6BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+G,OCAxD,MAAMknT,IAAoBrnT,EAAAA,GAAAA,IAAOinT,GAAPjnT,CAA6BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iDCKjDmnT,IAAiB9yS,EAAAA,GAAAA,GAAcyyS,IACdxyS,aAAayyS,IACb97O,OAAO+7O,IACP97O,WAAW+7O,IACX1zP,QAAQ0zP,IACRx7O,OAAOy7O,IACP1yS,Q,OCZvB,MCAM4yS,GDA2BvnT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2FEcrCqnT,IAAkE1lT,EAAAA,GAAAA,KAAUzB,IACrF,MAAM0N,GAAWqD,EAAAA,GAAAA,KAWjB,OACInP,EAAAA,GAAAA,KAAC0vL,GAAU,CAACC,mBAAoBvxL,EAAMuxL,mBAAoB1vL,UAAWsX,KAAWnZ,EAAM6B,WAAWG,EAAAA,GAAAA,IAAQ,eAAeC,UACpHyI,EAAAA,GAAAA,MAAC8mL,GAAe,CAAC3vL,UAAU,mBAAkBI,SAAA,EACzCL,EAAAA,GAAAA,KAACmwL,GAAoB,CAAClwL,UAAU,2BAChCD,EAAAA,GAAAA,KAACqlT,GAAc,CAACplT,UAAU,kBAAkBu/S,MAAO1zS,EAASyiB,SAASC,gBAZzEpwB,EAAMuxL,oBAEF3vL,EAAAA,GAAAA,KAACslT,GAAiB,CAAAjlT,SAAEyL,EAASoK,YAAYC,UAAU,gBAGpD,SAUM,I,OC5BrB,IACaqvS,IADZ3lT,EAAAA,GAAAA,IAAQuT,GAAT,cACsCtT,GAAAA,EAElCC,MAAAA,GAEI,OAAKO,KAAKwL,SAASm7G,QAAQq7D,YAKvBtiL,EAAAA,GAAAA,KAACulT,GAAuB,CAAC51H,mBAAoBrvL,KAAKwL,SAASm7G,QAAQmxE,8BAJ5D,IAMf,KACHhlL,GClBM,MAAMqyS,IAAiB3mT,EAAAA,GAAAA,GAAU,kBCSlCqU,IAAqDtT,EAAAA,GAAAA,KAAUzB,IACnE,MAAM0N,GAAWqD,EAAAA,GAAAA,KACjB,OAAIrD,EAASye,cAAcC,KAAK+kC,gBAAgBm2P,iBACxC55S,EAASqI,OAAOkZ,OAAOC,YACxBxhB,EAASorB,SAASC,YAClB/4B,EAAMk4S,SAASqP,YACb,MAIL3lT,EAAAA,GAAAA,KAACylT,GAAc,CAACG,WAAW,EAAMC,SAAU,mCAAmCxlT,SACzEjC,EAAMkuF,QAAQw5N,YAAYj1S,KAAI,CAACk1S,EAAQpiR,IAAUoiR,EAAOhmT,OAAO4jC,EAAQ,MAC3D,IAIVqiR,IAAuBruS,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,UAAW,aCnB/D8yS,IAAqBpmT,EAAAA,GAAAA,IAAS,cAAiCC,GAAAA,EAC1EC,MAAAA,GACE,MAAMmmT,EAAuB5lT,KAAKwL,SAASye,cAAcC,MAAQlqB,KAAKwL,SAASye,cAAcC,KAAK27R,OAElG,OAAID,GAKAp9S,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACEL,EAAAA,GAAAA,KAACgmT,GAAoB,oBACrBhmT,EAAAA,GAAAA,KAACwiB,GAAAA,EAAkB,CAAC5H,YAAasrS,EAAoBtrS,YACjCD,WAAYurS,EAAoBvrS,WAChCiS,YAAatsB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAO+mT,qBAAqBC,mBAAmB5mT,WAC7Fqb,iBAAiB,OATlC,IAYX,I,mBCnBK,MAAMwrS,GAAyBvoT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,4DAC1BE,GAASA,EAAMI,MAAM6J,OAAO8J,aAClC/T,GAASA,EAAMmkB,Y,OCLxB,MAAMgkS,IAA2BxoT,EAAAA,GAAAA,IAAOuoT,GAAPvoT,CAA8BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8BACtDE,GAAK,mBAAA8B,OAAuB9B,EAAMI,MAAM6J,OAAO2qQ,iBAAgB,MAAA9yQ,OAAK9B,EAAMI,MAAM6J,OAAOwb,eAAc,MAAA3jB,OAAK9B,EAAMI,MAAM6J,OAAO2qQ,iBAAgB,O,mBCAtJ,MAAMwzC,IAA2BzoT,EAAAA,GAAAA,IAAOuoT,GAAPvoT,CAA8BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sJAC9C+yD,GAAAA,EAAWu1C,S,mBCD5B,MAAMigN,IAAyB1oT,EAAAA,GAAAA,IAAOuoT,GAAPvoT,CAA8BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sFAEX+yD,GAAAA,EAAW2mD,WAAkB3mD,GAAAA,EAAWI,O,OCH1F,MAAMq1P,IAAoB3oT,EAAAA,GAAAA,IAAOuoT,GAAPvoT,CAA8BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2CACpCE,GAASA,EAAMI,MAAMa,OAAOC,OAAOqnT,YAAYlnT,aCI7DmnT,IAAkBr0S,EAAAA,GAAAA,GAAc+zS,IACxCh3O,aAAak3O,IACbh0S,aAAa+zS,IACb1kP,WAAW4kP,IACXj1P,MAAMk1P,IACNh0S,QCPQm0S,IAAwBhnT,EAAAA,GAAAA,IAAS,cAAoCC,GAAAA,EAChFC,MAAAA,GAAU,IAADs2C,EACiCD,EAAtC,OAAG91C,KAAKwL,SAAS+9B,UAAUtuB,WACkB,QAAlC66B,EAAA91C,KAAKwL,SAASyqC,QAAQC,oBAAY,IAAAJ,OAAA,EAAlCA,EAAoCr2C,WAAY,MAIvDC,EAAAA,GAAAA,KAAC6e,GAAAA,GAAa,CAACrgB,MAAO8B,KAAKwL,SAAStN,MAAMsgB,iBAAiBze,UACvDL,EAAAA,GAAAA,KAAC4mT,GAAe,CAACrkS,UAAWjiB,KAAKwL,SAASsE,OAAOC,YAAc,KAAKhQ,UAC7B,QAAlCg2C,EAAA/1C,KAAKwL,SAASyqC,QAAQC,oBAAY,IAAAH,OAAA,EAAlCA,EAAoCt2C,WAAY,QAMjE,I,OCnBK,MAAM+mT,GAA8B/oT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wHAM1Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWo3C,SAAS,I,OCF3C,MAAMkxQ,GAAoBhpT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2BAC9BE,GAASA,EAAMsoJ,UAAY,QAAU,SCDrCsgK,IAA2BnnT,EAAAA,GAAAA,IAAS,cAAuCC,GAAAA,EACpFC,MAAAA,GACI,MAAMi6N,EAAU15N,KAAKwL,SAASgrS,gBAAgB98E,QAC9C,OAAsB,IAAnBA,EAAQx5N,OACA,MAGHR,EAAAA,GAAAA,KAAC8mT,GAA2B,CAAC7mT,UAAU,sBAAqBI,SAC/D25N,EAAQnpN,KAAIo2S,IAAUjnT,EAAAA,GAAAA,KAAC+mT,GAAiB,CAAiBl3R,GAAIo3R,EAAOp3R,GAAI62H,UAAWugK,EAAOvgK,WAA5CugK,EAAOp3R,OAE9D,ICdSq3R,IAAiBpoT,EAAAA,GAAAA,GAAU,kB,OCCjC,SAASqoT,GAAoBlmT,EAAgBmmT,GAA4D,IAAtB37M,EAAelrG,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EACxG,MAAM,6BAANL,OAAoCknT,EAAoBx2S,EAAC,OAAA1Q,OAAMknT,EAAoBrrO,EAAC,sBAAA77E,OAAqBurG,EAAO,MAAAvrG,OAAKe,EAAM,yBAAAf,OAAwBe,EAAM,MAC7J,CAYO,MAAMomT,GAAgBtpT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0IACxBe,IAAA,IAAC,OAACkkB,GAAOlkB,EAAA,OAAKkkB,CAAM,IAMhB/kB,GAAU+oT,GAAoB/oT,EAAM6C,OAAQ7C,EAAMgpT,oBAAqBhpT,EAAMqtG,WCtBnF67M,IAAgBxoT,EAAAA,GAAAA,GAAU,iBCahC,SAASyoT,GAA4BC,EAAgCC,GACxE,MAAM,UAANvnT,OAEJ,SAA+BsnT,EAAgCC,GAC3D,IAAIC,EAAQr6C,GAAekB,aAAalB,GAAeE,MAAMi6C,EAAeC,KACxED,EAAc52S,EAAI62S,EAAY72S,GAAM42S,EAAc52S,IAAM62S,EAAY72S,GAAK42S,EAAczrO,EAAI0rO,EAAY1rO,KACvG2rO,GAAS,KAEb,OAAOA,CACX,CARqBC,CAAsBH,EAAeC,GAAY,YACtE,CAQO,SAASG,GAAwBJ,EAAgCC,EAA8BI,GAClG,IAAIC,EAA0BD,EAAkB,EAO5CE,EAAS,KAAA7nT,OAAQunT,EAAY72S,EAAIk3S,EAAuB,KAAA5nT,OAAIunT,EAAY1rO,EAAC,OAAA77E,OAAM4nT,EAAuB,KAAA5nT,OAAI4nT,EAAuB,WAAA5nT,OAAoC,EAA1B4nT,EAA2B,SAAA5nT,OAAQ4nT,EAAuB,KAAA5nT,OAAI4nT,EAAuB,YAAA5nT,OAAqC,EAA1B4nT,EAA2B,QAE1Q,GAAIz6C,GAAeqB,sBAAsB84C,EAAeC,GAAyC,IAA1BK,EACnE,IACI,IAAIE,EAAK,IAAIx7L,GAAQg7L,EAAeC,GAGhCQ,EAA8BtxS,KAAKopG,IAAI+nM,EAAyB,GAEhEI,EAAcD,EAA8BD,EAAG56C,WAE/C+6C,EAAYxxS,KAAKmpG,KAAKmoM,GAA6B,EAAIC,IAEvDE,EAAI/6C,GAAeK,kBAAkB+5C,EAAaD,EAAeU,IAEhEG,EAAIC,GAoBrB,SAA8EC,EAA4BC,EAAkBj7C,GACxH,IAAIk7C,EAAqB,CAAC73S,EAAG,EAAGmrE,EAAG,GAAIqsO,EAAqB,CAACx3S,EAAG,EAAGmrE,EAAG,GACtE,GAAIwxL,IAAU3jI,IASV,OARA6+K,EAAI,CACA73S,EAAG23S,EAAU33S,EACbmrE,EAAGwsO,EAAUxsO,EAAIysO,GAErBJ,EAAI,CACAx3S,EAAG23S,EAAU33S,EACbmrE,EAAGwsO,EAAUxsO,EAAIysO,GAEd,CAACC,EAAGL,GAGf,IAAIM,EAAQ/xS,KAAKmpG,KAAKnpG,KAAKopG,IAAIyoM,EAAU,IAAI7xS,KAAKopG,IAAIwtJ,EAAO,GAAK,IAC9Do7C,EAAKJ,EAAU33S,EAAI83S,EACvBD,EAAI,CACA73S,EAAG+3S,EACH5sO,GAAI4sO,EAAKJ,EAAU33S,GAAG28P,EAAQg7C,EAAUxsO,GAE5C,IAAI6sO,EAAKL,EAAU33S,EAAI83S,EAKvB,OAJAN,EAAI,CACAx3S,EAAGg4S,EACH7sO,GAAI6sO,EAAKL,EAAU33S,GAAG28P,EAAQg7C,EAAUxsO,GAErC,CAAC0sO,EAAGL,EACf,CA9C2BS,CAAqET,EAAGD,EAAWH,EAAGx6C,qBACpG66C,EAAIC,GAqDjB,SAAqBQ,EAAqBC,EAAqBn6C,EAAoB/B,GAC/E,IAAI47C,EAAI,CAAC73S,EAAGk4S,EAAGl4S,EAAGmrE,EAAG+sO,EAAG/sO,GACpBqsO,EAAI,CAACx3S,EAAGm4S,EAAGn4S,EAAGmrE,EAAGgtO,EAAGhtO,GACxB,GAAI8wL,EAAEj8P,EAAIg+P,EAAEh+P,EAAG,CACX,GAAIi8P,EAAE9wL,EAAI6yL,EAAE7yL,EAAG,CAGX,GAAI0sO,EAAE73S,EAAIi8P,EAAEj8P,GAAK63S,EAAE1sO,EAAI8wL,EAAE9wL,GAAKqsO,EAAEx3S,EAAIi8P,EAAEj8P,GAAKw3S,EAAErsO,EAAI8wL,EAAE9wL,EAC/C,MAAO,CAAC0sO,EAAGL,GAEf,GAAIA,EAAEx3S,EAAIi8P,EAAEj8P,GAAKw3S,EAAErsO,EAAI8wL,EAAE9wL,GAAK0sO,EAAE73S,EAAIi8P,EAAEj8P,GAAK63S,EAAE1sO,EAAI8wL,EAAE9wL,EAC/C,MAAO,CAACqsO,EAAGK,GAEf,MAAMl4O,MAAM,uCAADrwE,OAAwCuoT,EAAE73S,EAAC,MAAA1Q,OAAKuoT,EAAE1sO,EAAC,SAAA77E,OAAQkoT,EAAEx3S,EAAC,MAAA1Q,OAAKkoT,EAAErsO,EAAC,SAAA77E,OAAQ0uQ,EAAEh+P,EAAC,MAAA1Q,OAAK0uQ,EAAE7yL,EAAC,SAAA77E,OAAQ2sQ,EAAEj8P,EAAC,MAAA1Q,OAAK2sQ,EAAE9wL,EAAC,KAC3H,CAAO,GAAI8wL,EAAE9wL,EAAI6yL,EAAE7yL,EAAG,CAGlB,GAAI0sO,EAAE73S,EAAIi8P,EAAEj8P,GAAK63S,EAAE1sO,EAAI8wL,EAAE9wL,GAAKqsO,EAAEx3S,EAAIi8P,EAAEj8P,GAAKw3S,EAAErsO,EAAI8wL,EAAE9wL,EAC/C,MAAO,CAAC0sO,EAAGL,GAEf,GAAIA,EAAEx3S,EAAIi8P,EAAEj8P,GAAKw3S,EAAErsO,EAAI8wL,EAAE9wL,GAAK0sO,EAAE73S,EAAIi8P,EAAEj8P,GAAK63S,EAAE1sO,EAAI8wL,EAAE9wL,EAC/C,MAAO,CAACqsO,EAAGK,GAEf,MAAMl4O,MAAM,uCAADrwE,OAAwCuoT,EAAE73S,EAAC,MAAA1Q,OAAKuoT,EAAE1sO,EAAC,SAAA77E,OAAQkoT,EAAEx3S,EAAC,MAAA1Q,OAAKkoT,EAAErsO,EAAC,SAAA77E,OAAQ0uQ,EAAEh+P,EAAC,MAAA1Q,OAAK0uQ,EAAE7yL,EAAC,SAAA77E,OAAQ2sQ,EAAEj8P,EAAC,MAAA1Q,OAAK2sQ,EAAE9wL,EAAC,KAC3H,CAAO,GAAI8wL,EAAE9wL,IAAM6yL,EAAE7yL,EAAG,CAGpB,GAAI0sO,EAAE1sO,EAAI8wL,EAAE9wL,GAAKqsO,EAAErsO,EAAI8wL,EAAE9wL,EACrB,MAAO,CAAC0sO,EAAGL,GAEf,GAAIA,EAAErsO,EAAI8wL,EAAE9wL,GAAK0sO,EAAE1sO,EAAI8wL,EAAE9wL,EACrB,MAAO,CAACqsO,EAAGK,GAEf,MAAMl4O,MAAM,uCAADrwE,OAAwCuoT,EAAE73S,EAAC,MAAA1Q,OAAKuoT,EAAE1sO,EAAC,SAAA77E,OAAQkoT,EAAEx3S,EAAC,MAAA1Q,OAAKkoT,EAAErsO,EAAC,SAAA77E,OAAQ0uQ,EAAEh+P,EAAC,MAAA1Q,OAAK0uQ,EAAE7yL,EAAC,SAAA77E,OAAQ2sQ,EAAEj8P,EAAC,MAAA1Q,OAAK2sQ,EAAE9wL,EAAC,KAC3H,CACJ,MAAO,GAAI8wL,EAAEj8P,EAAIg+P,EAAEh+P,EAAG,CAClB,GAAIi8P,EAAE9wL,EAAI6yL,EAAE7yL,EAAG,CAGX,GAAI0sO,EAAE73S,EAAIi8P,EAAEj8P,GAAK63S,EAAE1sO,EAAI8wL,EAAE9wL,GAAKqsO,EAAEx3S,EAAIi8P,EAAEj8P,GAAKw3S,EAAErsO,EAAI8wL,EAAE9wL,EAC/C,MAAO,CAAC0sO,EAAGL,GAEf,GAAIA,EAAEx3S,EAAIi8P,EAAEj8P,GAAKw3S,EAAErsO,EAAI8wL,EAAE9wL,GAAK0sO,EAAE73S,EAAIi8P,EAAEj8P,GAAK63S,EAAE1sO,EAAI8wL,EAAE9wL,EAC/C,MAAO,CAACqsO,EAAGK,GAEf,MAAMl4O,MAAM,uCAADrwE,OAAwCuoT,EAAE73S,EAAC,MAAA1Q,OAAKuoT,EAAE1sO,EAAC,SAAA77E,OAAQkoT,EAAEx3S,EAAC,MAAA1Q,OAAKkoT,EAAErsO,EAAC,SAAA77E,OAAQ0uQ,EAAEh+P,EAAC,MAAA1Q,OAAK0uQ,EAAE7yL,EAAC,SAAA77E,OAAQ2sQ,EAAEj8P,EAAC,MAAA1Q,OAAK2sQ,EAAE9wL,EAAC,KAC3H,CAAO,GAAI8wL,EAAE9wL,EAAI6yL,EAAE7yL,EAAG,CAGlB,GAAI0sO,EAAE73S,EAAIi8P,EAAEj8P,GAAK63S,EAAE1sO,EAAI8wL,EAAE9wL,GAAKqsO,EAAEx3S,EAAIi8P,EAAEj8P,GAAKw3S,EAAErsO,EAAI8wL,EAAE9wL,EAC/C,MAAO,CAAC0sO,EAAGL,GAEf,GAAIA,EAAEx3S,EAAIi8P,EAAEj8P,GAAKw3S,EAAErsO,EAAI8wL,EAAE9wL,GAAK0sO,EAAE73S,EAAIi8P,EAAEj8P,GAAK63S,EAAE1sO,EAAI8wL,EAAE9wL,EAC/C,MAAO,CAACqsO,EAAGK,GAEf,MAAMl4O,MAAM,uCAADrwE,OAAwCuoT,EAAE73S,EAAC,MAAA1Q,OAAKuoT,EAAE1sO,EAAC,SAAA77E,OAAQkoT,EAAEx3S,EAAC,MAAA1Q,OAAKkoT,EAAErsO,EAAC,SAAA77E,OAAQ0uQ,EAAEh+P,EAAC,MAAA1Q,OAAK0uQ,EAAE7yL,EAAC,SAAA77E,OAAQ2sQ,EAAEj8P,EAAC,MAAA1Q,OAAK2sQ,EAAE9wL,EAAC,KAC3H,CAAO,GAAI8wL,EAAE9wL,IAAM6yL,EAAE7yL,EAAG,CAGpB,GAAI0sO,EAAE1sO,EAAI8wL,EAAE9wL,GAAKqsO,EAAErsO,EAAI8wL,EAAE9wL,EACrB,MAAO,CAAC0sO,EAAGL,GAEf,GAAIA,EAAErsO,EAAI8wL,EAAE9wL,GAAK0sO,EAAE1sO,EAAI8wL,EAAE9wL,EACrB,MAAO,CAACqsO,EAAGK,GAEf,MAAMl4O,MAAM,uCAADrwE,OAAwCuoT,EAAE73S,EAAC,MAAA1Q,OAAKuoT,EAAE1sO,EAAC,SAAA77E,OAAQkoT,EAAEx3S,EAAC,MAAA1Q,OAAKkoT,EAAErsO,EAAC,SAAA77E,OAAQ0uQ,EAAEh+P,EAAC,MAAA1Q,OAAK0uQ,EAAE7yL,EAAC,SAAA77E,OAAQ2sQ,EAAEj8P,EAAC,MAAA1Q,OAAK2sQ,EAAE9wL,EAAC,KAC3H,CACJ,MAAO,GAAI8wL,EAAEj8P,IAAMg+P,EAAEh+P,EAAG,CACpB,GAAIi8P,EAAE9wL,EAAI6yL,EAAE7yL,EAAG,CAGX,GAAI0sO,EAAE73S,EAAIi8P,EAAEj8P,GAAKw3S,EAAEx3S,EAAIi8P,EAAEj8P,EACrB,MAAO,CAAC63S,EAAGL,GAEf,GAAIA,EAAEx3S,EAAIi8P,EAAEj8P,GAAK63S,EAAE73S,EAAIi8P,EAAEj8P,EACrB,MAAO,CAACw3S,EAAGK,GAEf,MAAMl4O,MAAM,uCAADrwE,OAAwCuoT,EAAE73S,EAAC,MAAA1Q,OAAKuoT,EAAE1sO,EAAC,SAAA77E,OAAQkoT,EAAEx3S,EAAC,MAAA1Q,OAAKkoT,EAAErsO,EAAC,SAAA77E,OAAQ0uQ,EAAEh+P,EAAC,MAAA1Q,OAAK0uQ,EAAE7yL,EAAC,SAAA77E,OAAQ2sQ,EAAEj8P,EAAC,MAAA1Q,OAAK2sQ,EAAE9wL,EAAC,KAC3H,CAAO,GAAI8wL,EAAE9wL,EAAI6yL,EAAE7yL,EAAG,CAGlB,GAAI0sO,EAAE73S,EAAIi8P,EAAEj8P,GAAKw3S,EAAEx3S,EAAIi8P,EAAEj8P,EACrB,MAAO,CAAC63S,EAAGL,GAEf,GAAIA,EAAEx3S,EAAIi8P,EAAEj8P,GAAK63S,EAAE73S,EAAIi8P,EAAEj8P,EACrB,MAAO,CAACw3S,EAAGK,GAEf,MAAMl4O,MAAM,uCAADrwE,OAAwCuoT,EAAE73S,EAAC,MAAA1Q,OAAKuoT,EAAE1sO,EAAC,SAAA77E,OAAQkoT,EAAEx3S,EAAC,MAAA1Q,OAAKkoT,EAAErsO,EAAC,SAAA77E,OAAQ0uQ,EAAEh+P,EAAC,MAAA1Q,OAAK0uQ,EAAE7yL,EAAC,SAAA77E,OAAQ2sQ,EAAEj8P,EAAC,MAAA1Q,OAAK2sQ,EAAE9wL,EAAC,KAC3H,CACJ,CACJ,CA/IuBitO,CAAYX,EAAIC,EAAId,EAAeY,GAG9CL,EAAS,KAAA7nT,OAAQsnT,EAAc52S,EAAC,KAAA1Q,OAAIsnT,EAAczrO,EAAC,OAAA77E,OAAMmoT,EAAGz3S,EAAC,KAAA1Q,OAAImoT,EAAGtsO,EAAC,OAAA77E,OAAM4nT,EAAuB,KAAA5nT,OAAI4nT,EAAuB,WAAA5nT,OAAUooT,EAAG13S,EAAC,KAAA1Q,OAAIooT,EAAGvsO,EAAC,KACvJ,CAAE,MAAOj3E,GACL,MAAMA,CACV,CAUJ,OAFAijT,GAAS,MAAA7nT,OAAUunT,EAAY72S,EAAIi3S,EAAe,KAAA3nT,OAAIunT,EAAY1rO,EAAC,OAAA77E,OAAM2nT,EAAe,KAAA3nT,OAAI2nT,EAAe,WAAA3nT,OAA4B,EAAlB2nT,EAAmB,SAAA3nT,OAAQ2nT,EAAe,KAAA3nT,OAAI2nT,EAAe,YAAA3nT,OAA6B,EAAlB2nT,EAAmB,QAEzME,CACX,C,OChEO,MAAMkB,GAAqBlrT,GAAAA,GAAOoO,IAAGlO,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,wIAM7Be,IAAA,IAAC,OAACkkB,GAAOlkB,EAAA,OAAKkkB,CAAM,ICNtB+lS,IAAqBpqT,EAAAA,GAAAA,GAAU,sB,gBCsB5C,IACaqqT,IADZtpT,EAAAA,GAAAA,KAAQ4Y,GAAT,cACkD3Y,GAAAA,EAkBtCspT,aAAAA,CAAcC,GAClB,MAAO,CACHz7C,OAAQ,CACJh9P,EAAGy4S,EAAEz4S,EACLmrE,EAAGstO,EAAEttO,EAAI,GAEb96E,OAAQ,EACRwqG,QAAS,EAEjB,CAIAp4F,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KA/BTkrT,YAAkC,KAAK,KACvCC,eAAwC,KAAK,KAC7CC,mBAAsD,MAAI3wS,EAAAA,EAAAA,GAAA,qBAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,sBAAAE,GAAA,WA0B1D0wS,iBAAkCnuR,QAAQC,UAAU,KAkC5DmuR,mBAAsB5kT,IAClBxE,KAAKgpT,YAAcxkT,CAAC,EACtB,KACF6kT,sBAAyB7kT,IACrBxE,KAAKipT,eAAiBzkT,CAAC,EACzB,KACF8kT,0BAA6B9kT,IACzBxE,KAAKkpT,mBAAqB1kT,CAAC,EAC7B,KA6BM+kT,kBAAqB9xN,IACzBz3F,KAAKmpT,iBAAmBnpT,KAAKmpT,iBAAiB5nS,MAAK,IACxCvhB,KAAKwpT,eAAe/xN,IAC7B,GAtEFz+E,EAAAA,EAAAA,IAAehZ,KACnB,CAGAypT,gBAAAA,CAAiBhyN,GACb,GAAKA,EAEE,CACH,IAAI4+K,EAAuB,IAAIhJ,GAAO,CAAC/8P,EAAGmnF,EAAE61K,OAAOh9P,EAAGmrE,EAAGgc,EAAE61K,OAAO7xL,GAAIgc,EAAE92F,QACxEX,KAAK0pT,cAAgBrzC,CACzB,MAJIr2Q,KAAK0pT,mBAAgBvpT,CAK7B,CAEA4b,iBAAAA,GACI/b,KAAKwL,SAAS4iI,IAAI4vD,oBAClBp0K,EAAAA,EAAAA,KAAY,KACR5pB,KAAK2pT,gBAAiB,CAAI,GAElC,CAEAvkS,kBAAAA,CAAmBC,EAAyDukS,EAAyBC,GAC7FxkS,EAAUnb,SAAWlK,KAAKlC,MAAMoM,QAChClK,KAAKupT,kBAAkBvpT,KAAKlC,MAAMoM,OAE1C,CAEAob,oBAAAA,GACItlB,KAAKwL,SAAS4iI,IAAI6vD,iBACtB,CAYAx+L,MAAAA,GACI,IAAKO,KAAK2pT,eACN,OAAO,KAEX,IAAID,EAAiB1pT,KAAK0pT,eAA0DxkT,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQlF,KAAK0pT,eAAa,IAAEv+M,QAAS,IAA/EnrG,KAAK8oT,cAAc9oT,KAAKlC,MAAMgsT,aACpEjnS,EAAS7iB,KAAKlC,MAAM+kB,OAExB,OAAQra,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACRL,EAAAA,GAAAA,KAACqnT,GAAa,CAACz5S,IAAKtN,KAAKopT,mBAAoBtC,oBAAqB4C,EAAcp8C,OAAQ3sQ,OAAQ+oT,EAAc/oT,OAAQwqG,QAAS,EAAIu+M,EAAcv+M,QAAStoF,OAAQA,EAAO9iB,UACrKL,EAAAA,GAAAA,KAACsnT,GAAa,CAACrjS,KAAM3jB,KAAKlC,MAAM6lB,UAEpCnb,EAAAA,GAAAA,MAACmgT,GAAkB,CAACn8S,QAAO,OAAA5M,OAASkQ,OAAOyvS,WAAU,KAAA3/S,OAAIkQ,OAAOC,aAAe8S,OAAQA,EAAO,EAAE9iB,SAAA,EAC5FL,EAAAA,GAAAA,KAAA,QAAAK,UACIyI,EAAAA,GAAAA,MAAA,kBAAgB8E,IAAKtN,KAAKspT,0BAA2B/5R,GAAG,QAAQo7E,GAAG,KAAKC,GAAG,KAAKH,GAAG,OAAOC,GAAG,KAAKq/M,kBAAmB9C,GAA4BjnT,KAAKlC,MAAMgsT,YAAaJ,EAAcp8C,QAAQvtQ,SAAA,EAC3LL,EAAAA,GAAAA,KAACkpT,GAAkB,CAACp6M,OAAO,KAAKw7M,YAAa,KAC7CtqT,EAAAA,GAAAA,KAACkpT,GAAkB,CAACp6M,OAAO,OAAOw7M,YAAa,UAGvDtqT,EAAAA,GAAAA,KAAA,QACI4N,IAAKtN,KAAKqpT,sBAAuBz8S,KAAK,cAAcy7F,SAAS,UAC7Dv/F,MAAO,CAACqiG,QAASu+M,EAAcv+M,SAC/B7sC,EAAGgpP,GAAwBtnT,KAAKlC,MAAMgsT,YAAaJ,EAAcp8C,OAAQo8C,EAAc/oT,eAInG,CAQQ6oT,cAAAA,CAAet/S,GACnB,IAAKlK,KAAKgpT,cAAgBhpT,KAAKipT,eAC3B,MAAMh5O,MAAM,0BAEhB,IAAIy5O,EAAiB1pT,KAAK0pT,eAA0DxkT,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQlF,KAAK0pT,eAAa,IAAEv+M,QAAS,IAA/EnrG,KAAK8oT,cAAc9oT,KAAKlC,MAAMgsT,aACpEG,EAAa//S,GAAMhF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAOgF,GAAM,IAAEihG,QAAS,IAAKnrG,KAAK8oT,cAAc9oT,KAAKlC,MAAMgsT,aAC9EX,EAkCZ,SAAyBe,EAAwEC,GAAkF,IAAzB3qF,EAAgBv/N,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,IACzK,OAAO,IAAI+6B,SAAc,CAACC,EAASimK,KAC/B,IACIkpH,EACAC,EAFAC,GAAgB,EAGhBC,EAASC,SACcrqT,IAAnBiqT,IACAA,EAAiBI,GAErB,MAAMC,EAAUD,EAAYJ,EAC5B,GAAIC,IAAsBG,EAAW,CACjC,MAAMl+S,EAAQ+J,KAAKuK,IAAI6pS,EAAUjrF,EAAU,GAE3C,IACI,IAAIkrF,EAAoBR,EAAyB59S,GACjD69S,EAAgBO,EACpB,CAAE,MAAOlmT,GACL4lT,OAAiBjqT,EACjBkqT,OAAoBlqT,EACpB+gM,GACJ,CAEc,IAAV50L,IACAg+S,GAAgB,EAExB,CACAD,EAAoBG,EACfF,GAGDF,OAAiBjqT,EACjBkqT,OAAoBlqT,EACpB86B,KAJAnrB,OAAOklJ,sBAAsBu1J,EAKjC,EAGJz6S,OAAOklJ,sBAAsBu1J,EAAM,GAE3C,CAxE+BI,EAAiBr+S,IACpC,IAAIo+S,EAAoB39C,GAAeK,kBAAkBs8C,EAAcp8C,OAAQ28C,EAAW38C,OAAQhhQ,GAC9Fs+S,EAAsB79C,GAAesB,0BAA0Bq7C,EAAcv+M,QAAS8+M,EAAW9+M,QAAS7+F,GAE9G,MAAO,CACHghQ,OAAQo9C,EACR/pT,OAHqBosQ,GAAesB,0BAA0Bq7C,EAAc/oT,OAAQspT,EAAWtpT,OAAQ2L,GAIvG6+F,QAASy/M,EACZ,IACDC,IACA7qT,KAAKgpT,YAAYlgT,MAAMgiT,gBAAkBjE,GAAoBgE,EAAalqT,OAAQkqT,EAAav9C,OAAQ,EAAIu9C,EAAa1/M,SACxHnrG,KAAKgpT,YAAYlgT,MAAMiiT,UAAYlE,GAAoBgE,EAAalqT,OAAQkqT,EAAav9C,OAAQ,EAAGu9C,EAAa1/M,SAEjHnrG,KAAKkpT,mBAAmB8B,aAAa,oBAAqB/D,GAA4BjnT,KAAKlC,MAAMgsT,YAAae,EAAav9C,SAE3HttQ,KAAKipT,eAAe+B,aAAa,IAAK1D,GAAwBtnT,KAAKlC,MAAMgsT,YAAae,EAAav9C,OAAQu9C,EAAalqT,SACxHX,KAAKipT,eAAengT,MAAMqiG,QAAU0/M,EAAa1/M,QAAQhsG,UAAU,IACpE2+D,OAAM,KAEC,IACPwuH,SAAQ,KAEPtsL,KAAKypT,iBAAiBv/S,EAAO,IAEjC,OAAOi/S,CACX,GAEH3wS,IAAA2D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,iBAjIItE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,WACqD,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,kBAC9DtE,EAAAA,IAAU,CAAAuE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBACc,CAAM,KAADL,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,oBAuB7BnE,EAAAA,IAAMwE,OAAAC,yBAAAvE,GAAAiE,UAAA,oBAAAjE,GAAAiE,WArCFtJ,GAqCEqF,MAAArF,GC3DJ,MAAMm4S,IAA0BzsT,EAAAA,GAAAA,GAAU,2B,OCA1C,MAAM0sT,GAA8BztT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iJAG/Ce,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQywB,IAAI,IAC7BnvB,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAMC,WAAWo3C,SAAS,ICJvC41Q,IAAmC3sT,EAAAA,GAAAA,GAAU,oCCA7C4sT,IAA0B5sT,EAAAA,GAAAA,GAAU,2BCApC6sT,IAAmC7sT,EAAAA,GAAAA,GAAU,oC,OCAnD,MAAM8sT,GAA6B7tT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,iHAGvCe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAMC,WAAWo3C,SAAS,I,OCH7C,MAAMg2Q,GAA2B9tT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,+FCArC4tT,IAAsBhtT,EAAAA,GAAAA,GAAU,uBC6BtC,MAAMitT,WAAkCjsT,GAAAA,EAAmEuT,WAAAA,GAAA,SAAA9S,WAAA,KACtGyrT,QAA8B,KAAK,KACnCC,mBAAkD,KAAK,KAgDvDC,iBAAoB5mS,IACxBhlB,KAAK0rT,QAAU1mS,EACfhlB,KAAK6rT,yBAAyB,EAChC,KACMA,wBAA0B,KAC9B,GAAI7rT,KAAK0rT,QAAS,CAEd,IAAI9iR,EAAI5oC,KAAK0rT,QAAQ97S,wBACjBogE,EAAI+8L,GAAewB,mBAAmB3lO,GAC1C5oC,KAAKlC,MAAM+tT,wBAAwB77O,EACvC,MACIhwE,KAAKlC,MAAM+tT,6BAAwB1rT,EACvC,EACF,KACMkzK,QAAU,KACdrzK,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAc,eAAgB/lC,KAAKlC,MAAMuyQ,UAAY,GAAGlxQ,YACvGa,KAAKlC,MAAMu1K,SAAS,EACvB,KACOy4I,OAAS,KACb9rT,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAc,cAAe/lC,KAAKlC,MAAMuyQ,UAAY,GAAGlxQ,YACtGa,KAAKlC,MAAMguT,QAAQ,CACtB,CApED/vS,iBAAAA,GACI/b,KAAK2rT,mBAAqB3rT,KAAKwL,SAASsE,OAAOu+H,YAAYxyF,OAAO77C,KAAK6rT,yBACvE7rT,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAc,QAAS/lC,KAAKlC,MAAMuyQ,UAAY,GAAGlxQ,WACpG,CAEAimB,kBAAAA,CAAmBC,GACXrlB,KAAKlC,MAAMuyQ,YAAchrP,EAAUgrP,WACnCrwQ,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAc,QAAS/lC,KAAKlC,MAAMuyQ,UAAY,GAAGlxQ,YAEhGa,KAAKlC,MAAMuyQ,UAAY,IAAMrwQ,KAAKlC,MAAMiuT,aACxC3lS,EAAAA,GAAAA,GAAapmB,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOgtT,WAAWC,4BAA4B9sT,WAE3G,CAEAmmB,oBAAAA,GACItlB,KAAK2rT,mBAAmBttS,SAC5B,CAEA5e,MAAAA,GACI,MAAM8zB,EAAYvzB,KAAKwL,SAAStN,MAAMuN,aAAaC,MAAM8nB,UACnD04R,EAAYlsT,KAAKwL,SAAStN,MAAMuN,aAAa1M,OAAOC,OAAOgtT,WAE3DG,EAAgBnsT,KAAKlC,MAAMsuT,QAAUF,EAAUD,4BAA4B9sT,WAAa+sT,EAAUG,oBAAoBltT,WAC5H,OAAOqJ,EAAAA,GAAAA,MAACgjT,GAAmB,CAAC7rT,WAAWG,EAAAA,GAAAA,IAAQ,sBAAuB+iB,OAAQ7iB,KAAKlC,MAAM+kB,OAAQc,KAAM3jB,KAAKlC,MAAM6lB,KAAMuQ,MAAOl0B,KAAKlC,MAAM6lB,KAAO,IAAM,EAAE5jB,SAAA,EACrJyI,EAAAA,GAAAA,MAAC8iT,GAA0B,CAAAvrT,SAAA,EACvBL,EAAAA,GAAAA,KAACurT,GAAuB,CAAC39S,IAAKtN,KAAK4rT,iBAAkB/oS,OAAQ7iB,KAAKlC,MAAM+kB,OAAO,EAAE9iB,UAC7EL,EAAAA,GAAAA,KAACZ,GAAAA,EAAK,CAACsV,IAAK+3S,OAEhBzsT,EAAAA,GAAAA,KAAC6rT,GAAwB,CAAClkT,QAASrH,KAAKqzK,QAAQtzK,UAC5CL,EAAAA,GAAAA,KAAC6zB,EAAS,CAAC9sB,KAAM,SAErB/G,EAAAA,GAAAA,KAACwrT,GAA2B,CAAAnrT,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKlC,MAAM2lD,KAAK2oN,aAClF1sQ,EAAAA,GAAAA,KAACyrT,GAAgC,CAAAprT,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU7V,KAAKlC,MAAM2lD,KAAK4oN,qBAE3F7jQ,EAAAA,GAAAA,MAAC04C,GAAAA,GAAgB,CAACC,WAAW,SAAQphD,SAAA,CAChCqQ,MAAMpQ,KAAKlC,MAAMiuT,YAAYn/S,KAAK5M,KAAKlC,MAAMuyQ,WAAW9/P,KAAI,CAAC+7S,EAAMpzC,KAAQx5Q,EAAAA,GAAAA,KAAC2rT,GAAgC,CAAWkB,WAAYD,IAASpzC,GAA1BA,MACnHx5Q,EAAAA,GAAAA,KAAC+V,GAAAA,GAAe,IAEZzV,KAAKlC,MAAMuyQ,YAAcrwQ,KAAKlC,MAAMiuT,WAAa,GACjDrsT,EAAAA,GAAAA,KAAC0rT,GAAuB,CAAC/jT,QAASrH,KAAK8rT,OAAO/rT,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,WACpFnW,EAAAA,GAAAA,KAAC0rT,GAAuB,CAAC/jT,QAASrH,KAAKlC,MAAM0uT,OAAOzsT,SAAEC,KAAKwL,SAASoK,YAAYC,UAAU,aAGjG7V,KAAKlC,MAAMiC,WAEpB,E,wCCtEJ,IACa+vQ,IAAcj4P,GAEtBC,EAAAA,GAAWxK,IAAGyK,GAEdD,EAAAA,GAAWxK,IAAG0K,GAKdF,EAAAA,GAAWxK,IAAG8W,GAKdtM,EAAAA,GAAWxK,KAff/N,EAAAA,GAAAA,KAAQ4Y,GAAT,cACoC3Y,GAAAA,EAiBhCuT,WAAAA,CAAYjV,GACRsa,MAAMta,GAAO,KAjBT2uT,cAAgB,MAAIl0S,EAAAA,EAAAA,GAAA,cAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,4BAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,eAAAmM,GAAA,OAAAnM,EAAAA,EAAAA,GAAA,YAAAkQ,GAAA,OAAAlQ,EAAAA,EAAAA,GAAA,uBAAAmQ,GAAA,WA6CpBmjS,wBAA2B77O,IAC/BhwE,KAAK0sT,wBAAwB18O,EAAE,GAClCz3D,EAAAA,EAAAA,GAAA,gBAAAoQ,GAAA,OA7BG3P,EAAAA,EAAAA,IAAehZ,KACnB,CAoBQ0sT,uBAAAA,CAAwBl1N,GAC5Bx3F,KAAK2sT,qBAAuBn1N,GAAK,CAC7BlnF,EAAG+F,KAAKsD,MAAM7J,OAAOyvS,WAAa,GAClC9jO,EAAGplE,KAAKsD,MAAM7J,OAAOC,aAAe,EAAE,IAE9C,CAoBQ68S,qCAAAA,CAAsCC,EAAgCxpR,GACtEwpR,EAAW3sT,OAASmjC,GAASwpR,EAAWxpR,IACxCrjC,KAAKsqN,UAAUuiG,EAAWxpR,IAE1BwpR,EAAW3sT,OAASmjC,EAAQ,IAC5BrjC,KAAKysT,cAAgBtiR,YAAW,KAC5BnqC,KAAK4sT,sCAAsCC,EAAYxpR,EAAM,EAAE,GAChE,KAEX,CAGQinL,SAAAA,CAAU7yH,GACdz3F,KAAKkK,OAASutF,CAClB,CAEAh4F,MAAAA,GACI,IAAKO,KAAKwL,SAASmyC,eAAeyiN,SAC9B,OAAO,KAEX,IAAKpgQ,KAAKwL,SAASmyC,eAAe4yN,4BAC9B,OAAO,KAEX,IAAIF,EAAYrwQ,KAAKwL,SAASmyC,eAAe0yN,UACzC5sN,EAAOzjD,KAAKwL,SAASmyC,eAAe8xN,MAAMY,GAC9C,OAAQ7nQ,EAAAA,GAAAA,MAAC+V,GAAAA,GAAa,CAACrgB,MAAO8B,KAAKwL,SAAStN,MAAMsgB,iBAAiBze,SAAA,EAC/DL,EAAAA,GAAAA,KAACmpT,GAA4B,CAAChmS,OAAQ,IAAMinS,YAAa9pT,KAAK2sT,qBAAsBziT,OAAQlK,KAAKkK,OAAQyZ,KAAM3jB,KAAK2jB,QACpHjkB,EAAAA,GAAAA,KAAC+rT,GAAyB,CACtB5oS,OAAQ,IACRgpS,wBAAyB7rT,KAAK6rT,wBAC9BW,OAAQxsT,KAAKswQ,SACbw7C,OAAQ9rT,KAAK8sT,gBACbz5I,QAASrzK,KAAK8sT,gBACdrpQ,KAAMA,EACN4sN,UAAWA,EACX07C,WAAY/rT,KAAKwL,SAASmyC,eAAe8xN,MAAMvvQ,OAC/CksT,QAASpsT,KAAKosT,QACdzoS,KAAM3jB,KAAK2jB,SAGvB,GACHnL,IAAA2D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,UAAAvE,IAAA,CAAAwE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,WAvG4D,IAAD/D,IAAA0D,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,wBAAArE,IAAA,CAAAsE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkI,IAAAvI,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,WAAApE,IAAA,CAAAqE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAOtC,CAAM,IAADiM,IAAAtM,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,QAAAgI,IAAA,CAAA/H,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAKR,CAAK,IAADkM,IAAAvM,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,mBAOlBnE,EAAAA,IAAM,CAAAoE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBACmB,KAEtBxc,KAAKosT,SAAU,EAEfpsT,KAAKsqN,eAAUnqN,GACfgqC,YAAW,KAEPnqC,KAAK2jB,MAAO,CAAK,GAClB,KACHwmB,YAAW,KAEPnqC,KAAKwL,SAASmyC,eAAe1lB,QAC7Bj4B,KAAKosT,SAAU,CAAK,GACrB,IAAI,CACV,KAAAjwS,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,2BAEAnE,EAAAA,IAAMwE,OAAAC,yBAAAvE,GAAAiE,UAAA,2BAAAjE,GAAAiE,WAAAuM,IAAAxM,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,YAWNnE,EAAAA,IAAM,CAAAoE,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,iBACY,KAEXxc,KAAKysT,gBACLxiR,aAAajqC,KAAKysT,eAClBzsT,KAAKysT,cAAgB,MAEzBzsT,KAAKwL,SAASqd,UAAUkd,uBAAuB,aAAc,cAAe/lC,KAAKwL,SAASmyC,eAAe0yN,UAAY,GAAGlxQ,YAExH,IAAI4tT,EAAe/sT,KAAKwL,SAASmyC,eAAe2yN,WAE5C7sN,EAAOzjD,KAAKwL,SAASmyC,eAAe8xN,MAAMs9C,GAC9C/sT,KAAK4sT,sCAAsCnpQ,EAAK6oN,QAAS,EAAE,CAC7D,KAADnwP,EAAAA,EAAAA,GAAAhE,GAAAiE,UAAA,aAaAnE,EAAAA,IAAMwE,OAAAC,yBAAAvE,GAAAiE,UAAA,aAAAjE,GAAAiE,WA7EFtJ,GA6EEqF,MAAArF,IClEX,MAAMk6S,GAA4BhhT,GAAAA,MAC9B,IAAM,gCAAmFuV,MAAK5iB,IAAA,IAAC,0BAACquT,GAA0BruT,EAAA,MAAM,CAAC4zD,QAASy6P,EAA0B,MAG3JC,IAAqB1tT,EAAAA,GAAAA,IAAS,cAAiCC,GAAAA,EAExEuc,iBAAAA,GACI,IACI/b,KAAKktT,gCACT,CAAE,MAAOv+S,GACLlK,QAAQkK,MAAMA,EAClB,CACJ,CAEQu+S,8BAAAA,GACJ,GAAIltT,KAAKwL,SAASye,cAAc6P,gBAAgBu5F,mBAAmBn9D,QAAS,CACxE,MAAMi3P,EAAkCntT,KAAKwL,SAASmoH,QAAQqrB,UAAUhsB,GAClE6V,EAAc,IAAIukL,gBAAgBptT,KAAKwL,SAASsE,OAAO8mB,SAASpW,QAEjE2sS,GAA+E,SAA5CtkL,EAAY7+C,IAAI,wBACpDhqF,KAAKwL,SAAS4vB,OAAOgiB,WAAWplB,IAChCt4B,EAAAA,GAAAA,KAACyiB,GAAAA,EAAa,CAAApiB,UACVL,EAAAA,GAAAA,KAACstT,GAAyB,CACtBh1R,cAAeA,OAGvB,CACIvvB,MAAO,iBACPo1D,0BAA0B,EAC1BviC,iBAAiB,EACjB+hB,gBAAgB,GAG5B,CACJ,CAEQgwQ,kBAAAA,GAIJ,OAAO3tT,EAAAA,GAAAA,KAAC+wL,GAAoB,CAAoB9wL,WAAWG,EAAAA,GAAAA,IAAQ,oBAAlC,eACrC,CAEQwtT,4BAAAA,GACJ,OACI9kT,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAACwlT,GAAgB,KACjBxlT,EAAAA,GAAAA,KAAC+kT,GAAgB,KACjB/kT,EAAAA,GAAAA,KAAC0gT,GAAO,KAER53S,EAAAA,GAAAA,MAACo+S,GAAc,CAACjnT,UAAW,kBAAkBI,SAAA,EACzCL,EAAAA,GAAAA,KAAC6kT,GAAe,KAEhB/7S,EAAAA,GAAAA,MAAClJ,GAAAA,EAAmB,CAAAS,SAAA,EAChBL,EAAAA,GAAAA,KAAC6mT,GAAqB,KACtB7mT,EAAAA,GAAAA,KAACimT,GAAkB,QAGvBjmT,EAAAA,GAAAA,KAACsvL,GAAQ,KACTtvL,EAAAA,GAAAA,KAACuiL,GAA4B,QAEjCviL,EAAAA,GAAAA,KAACgnT,GAAwB,IAExB1mT,KAAKqtT,sBACN3tT,EAAAA,GAAAA,KAACowQ,GAAc,MAG3B,CAEQy9C,wBAAAA,GACJ,OAAS/kT,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACLL,EAAAA,GAAAA,KAACwlT,GAAgB,KACjBxlT,EAAAA,GAAAA,KAAC+kT,GAAgB,KACjB/kT,EAAAA,GAAAA,KAAC0gT,GAAO,KAEJ53S,EAAAA,GAAAA,MAACo+S,GAAc,CAACjnT,UAAW,kBAAkBI,SAAA,EACzCL,EAAAA,GAAAA,KAACsvL,GAAQ,KACTtvL,EAAAA,GAAAA,KAAC6kT,GAAe,KAChB/7S,EAAAA,GAAAA,MAAClJ,GAAAA,EAAmB,CAAAS,SAAA,EAChBL,EAAAA,GAAAA,KAACgnT,GAAwB,KACzBhnT,EAAAA,GAAAA,KAAC6mT,GAAqB,KACtB7mT,EAAAA,GAAAA,KAACimT,GAAkB,UAG9B3lT,KAAKqtT,sBACN3tT,EAAAA,GAAAA,KAACuiL,GAA4B,KAC7BviL,EAAAA,GAAAA,KAACowQ,GAAc,MAEvB,CAGQ09C,gBAAAA,GAEJ,OAAIxtT,KAAKwL,SAASqI,OAAOC,SACd9T,KAAKstT,+BAELttT,KAAKutT,0BAEpB,CAEQE,gBAAAA,GACJ,OACIjlT,EAAAA,GAAAA,MAAAswB,GAAAA,SAAA,CAAA/4B,SAAA,EACIL,EAAAA,GAAAA,KAAC+kT,GAAgB,KACjB/kT,EAAAA,GAAAA,KAACknT,GAAc,CAACjnT,UAAW,kBAAkBI,UACzCL,EAAAA,GAAAA,KAAC6mT,GAAqB,QAItC,CAEA9mT,MAAAA,GACI,OAAGO,KAAKwL,SAAS+9B,UAAUtuB,UAChBjb,KAAKytT,mBAELztT,KAAKwtT,kBAEpB,ICpISE,IAAiCnuT,EAAAA,GAAAA,IAAS,cAA6CC,GAAAA,EAChGC,MAAAA,GACI,MAAMinM,EAAiB1mM,KAAKwL,SAAS4vB,OAAOsrK,eAAen2L,KAAIo2L,GAAmBtW,GAAAA,aAAsBsW,EAAiB3mM,KAAKwL,SAAS4iI,IAAI/qF,QAC3I,OAA6B,IAA1BqjJ,EAAexmM,OACP,MAEHR,EAAAA,GAAAA,KAAAo5B,GAAAA,SAAA,CAAA/4B,SACH2mM,GAET,ICTSinH,IAA4CpuT,EAAAA,GAAAA,IAAS,cAAwDC,GAAAA,EACtHC,MAAAA,GACI,MAAMmuT,EAAoB5tT,KAAKwL,SAAS+tF,gCAAgCy1H,0BAA0Bz+M,KAAI+vB,GAAQ+vJ,GAAAA,aAAsB/vJ,EAAKwiB,UAAWxiB,EAAKzL,WACzJ,OAAgC,IAA7B+4R,EAAkB1tT,OACV,MAGHR,EAAAA,GAAAA,KAAAo5B,GAAAA,SAAA,CAAA/4B,SACH6tT,GAET,I,uCCVG,MAAMC,IAA8BtuT,EAAAA,GAAAA,IAAS,cAA0CC,GAAAA,EAC1FC,MAAAA,GACI,OAAKO,KAAKwL,SAAS6d,eAAeu4N,iBAG3BliP,EAAAA,GAAAA,KAAC6oB,GAAAA,EAAuB,CAC3BC,SAAUxoB,KAAKwL,SAAS6d,eAAe04N,oBACvCp4N,QAAS3pB,KAAKwL,SAAS6d,eAAeM,QACtCD,oBAAqB1pB,KAAKwL,SAAS6d,eAAeK,sBAL3C,IAOf,I,OCTG,MAAMokS,GAAyBrwT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,uVAclBe,IAAA,IAAC,YAAC41Q,EAAW,MAAEr2Q,GAAMS,EAAA,OAAK41Q,GAA4Br2Q,EAAM6J,OAAOqB,iBAAiB,IACnF9G,IAAA,IAAC,YAACiyQ,EAAW,MAAEr2Q,GAAMoE,EAAA,OAAKiyQ,GAA4Br2Q,EAAM6J,OAAOqB,iBAAiB,I,OClB5G,MAAM2kT,IAAqBtwT,EAAAA,GAAAA,IAAOqwT,GAAPrwT,CAA8BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,yGAElCe,IAAA,IAAC,YAAC41Q,GAAY51Q,EAAA,OAAK41Q,GAA4B,MAAM,IACpDjyQ,IAAA,IAAC,YAACiyQ,GAAYjyQ,EAAA,OAAKiyQ,GAA4B,MAAM,I,OCH7E,MAAMy5C,IAAyBvwT,EAAAA,GAAAA,IAAOqwT,GAAPrwT,CAA8BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,yGAEtCe,IAAA,IAAC,YAAC41Q,EAAW,MAAEr2Q,GAAMS,EAAA,OAAK41Q,GAA4Br2Q,EAAM6J,OAAOozM,oBAAoB,IACtF74M,IAAA,IAAC,YAACiyQ,EAAW,MAAEr2Q,GAAMoE,EAAA,OAAKiyQ,GAA4Br2Q,EAAM6J,OAAOozM,oBAAoB,ICDzG8yG,IAAkBh8S,EAAAA,GAAAA,GAAc67S,IACxC57S,aAAa67S,IACb57S,WAAW67S,IACX57S,Q,UCNE,MAAM87S,GAAwBzwT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,mWAWlBE,GAASA,EAAMI,MAAMa,OAAOC,OAAOgO,uBAAuB7N,aAUjFR,IAAA,IAAC,aAACwvT,GAAaxvT,EAAA,OAAKwvT,GAActtT,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,6BAA0B,EAAE,I,mBCIhE,MAAMwwT,GAA6B3wT,GAAAA,GAAOiB,IAAGyD,KAAAA,IAAAvE,EAAAA,GAAAA,GAAA,qhCAWhDE,IAASuwT,OAvBKj/R,EAuBItxB,EAAMsF,OAvBSkrT,EAuBDxwT,EAAMooD,SAtBpC92B,EAIDk/R,GACMztT,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,sDAGLiD,EAAAA,GAAAA,IAAGe,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,uBAPDiD,EAAAA,GAAAA,IAAGlD,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,sBAFd,IAAkBwxB,EAAmBk/R,CAuBc,IAOtCxwT,GAAQA,EAAM+kB,SAEXlkB,IAAA,IAAC,gBAAC88O,EAAe,MAAEv9O,GAAMS,EAAA,OAAK88O,GAAoCv9O,EAAM6J,OAAO8J,UAAU,IAC9FvP,IAAA,IAAC,UAACihD,EAAS,MAAErlD,GAAMoE,EAAA,OAAKihD,GAAwBrlD,EAAM6J,OAAO4B,SAAS,IAE/D7C,IAAA,IAAC,YAACytQ,EAAW,MAAEr2Q,GAAM4I,EAAA,OAAKytQ,GAA4Br2Q,EAAM6J,OAAOqB,iBAAiB,IAKlGyB,IAAA,IAAC,QAACqhP,GAAQrhP,EAAA,OAAKqhP,GAAUrrP,EAAAA,GAAAA,IAAGwB,KAAAA,IAAAzE,EAAAA,GAAAA,GAAA,qCAA4BE,GAASA,EAAMI,MAAM6J,OAAO0C,eAAkB,IAAI,ICpDjG8jT,IAAsBt8S,EAAAA,GAAAA,GAAcm8S,IAC5Ch8S,Q,aCFE,MAAMo8S,GAAwB/wT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,0IAG3Ce,IAAA,IAAC,OAACi2C,GAAOj2C,EAAA,OAAKi2C,GAAS/zC,EAAAA,GAAAA,IAAGC,KAAAA,IAAAlD,EAAAA,GAAAA,GAAA,sFAIxBiD,EAAAA,GAAAA,IAAGe,KAAAA,IAAAhE,EAAAA,GAAAA,GAAA,iFAIN,IAKmBE,GAAK,2CAAA8B,OAA+C9B,EAAMI,MAAM6J,OAAO0C,aAAY,WAAA7K,OAAU9B,EAAMI,MAAM6J,OAAO0C,aAAY,YAAA7K,OAAW9B,EAAMI,MAAM6J,OAAO0C,aAAY,c,OCdrL,MAAMgkT,IAAoBhxT,EAAAA,GAAAA,IAAO+wT,GAAP/wT,CAA6BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8B,OCAvD,MAAM8wT,IAAwBjxT,EAAAA,GAAAA,IAAO+wT,GAAP/wT,CAA6BE,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8BCCrD+wT,IAAiB18S,EAAAA,GAAAA,GAAcu8S,IACvCt8S,aAAau8S,IACbt8S,WAAWu8S,IACX/4Q,cAAc+4Q,IACd94Q,cAAc84Q,IACdt8S,Q,OCRE,MAAMw8S,GAAoBnxT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8E,OCApC,MAAMixT,GAAiCpxT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,2BAC3CE,GAASA,EAAM+kB,S,OCgBrB,MAAMisS,IAAmBvvT,EAAAA,GAAAA,IAAS,cAA+BC,GAAAA,EAAsCuT,WAAAA,GAAA,SAAA9S,WAAA,KAElG8uT,mBAAsBl6R,IACvBA,GACC70B,KAAKlC,MAAMkxT,QAAQljE,kBAAkBj3N,EACzC,CACH,CAEDp1B,MAAAA,GACI,MAAMwvT,EAAiBjvT,KAAKlC,MAAMkxT,QAClC,IAAIC,EAAetqR,gBACf,OAAO,KAGX,MAAMq9G,EAAwB,OAAditK,QAAc,IAAdA,OAAc,EAAdA,EAAgBxvT,SAIhC,GAAIwvT,EAAehjE,YACf,OAAO57D,GAAAA,cACH3wL,EAAAA,GAAAA,KAAC6e,GAAAA,GAAa,CAACrgB,MAAO8B,KAAKwL,SAAStN,MAAMmiM,YAAYtgM,UAClDL,EAAAA,GAAAA,KAACmvT,GAA8B,CAACvhT,IAAKtN,KAAK+uT,mBAAoBlsS,QAAsB,OAAdosS,QAAc,IAAdA,OAAc,EAAdA,EAAgBpsS,SAAU,EAAE9iB,SAC7FiiJ,MAGXhiJ,KAAKwL,SAAS4iI,IAAI/qF,MAGxB,MAAM6oM,EAAU/hP,QAAsB,OAAd8kT,QAAc,IAAdA,OAAc,EAAdA,EAAgB/iE,SAExC,OAAO77D,GAAAA,cACH3wL,EAAAA,GAAAA,KAAC6e,GAAAA,GAAa,CAACrgB,MAAO8B,KAAKwL,SAAStN,MAAMmiM,YAAYtgM,UAClDyI,EAAAA,GAAAA,MAAC+lT,IAAmBrpT,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAChBvF,WAAWG,EAAAA,GAAAA,IAAQ,wBACnBwN,IAAKtN,KAAK+uT,mBACVlsS,QAAsB,OAAdosS,QAAc,IAAdA,OAAc,EAAdA,EAAgBpsS,SAAU,EAClCzf,OAAQ+G,QAAQ8kT,GAChB/oQ,SAAU/7C,QAAsB,OAAd8kT,QAAc,IAAdA,OAAc,EAAdA,EAAgB/oQ,UAClCgmM,QAASA,GACS,OAAd+iE,QAAc,IAAdA,OAAc,EAAdA,EAAgB3iE,SAAO,IAAAvsP,SAAA,CAE1BmsP,IAAWxsP,EAAAA,GAAAA,KAACivT,GAAc,KAEZ,OAAdM,QAAc,IAAdA,OAAc,EAAdA,EAAgB9iE,yBAAyBzsP,EAAAA,GAAAA,KAACwuT,GAAqB,CAAC7mT,QAASA,IAAM4nT,EAAevjE,eAAgByiE,aAAcc,EAAe5iE,2BAE5I3sP,EAAAA,GAAAA,KAACkvT,GAAiB,CAAA7uT,SACbiiJ,KAGLtiJ,EAAAA,GAAAA,KAACuuT,IAAe/oT,EAAAA,EAAAA,GAAA,CACZqqB,GAAG,2BACH,oBAAkB,IACA,OAAd0/R,QAAc,IAAdA,OAAc,EAAdA,EAAgB3iE,UAGvBJ,IAAWxsP,EAAAA,GAAAA,KAACivT,GAAc,CAAC/5Q,QAAM,UAIxC50C,KAAKwL,SAAS4iI,IAAI/qF,KAC5B,IAOJ,IACa6rQ,IADZ3vT,EAAAA,GAAAA,IAAQ4Y,GAAT,cAC+C3Y,GAAAA,EAE3CC,MAAAA,GACI,MAAMsqP,EAAW/pP,KAAKlC,MAAMqxT,mBAAmBplE,SAC/C,OACIrqP,EAAAA,GAAAA,KAAAo5B,GAAAA,SAAA,CAAA/4B,SACKgqP,EAASx5O,KAAIknF,IAAK/3F,EAAAA,GAAAA,KAACovT,GAAgB,CAAYE,QAASv3N,GAAfA,EAAEloE,OAGxD,KACHpX,G,OC/FM,MAAMi3S,GAA8B3xT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,8RAEtCE,GAASA,EAAMglM,SAAW,OAAS,SAKnChlM,GAASA,EAAM+kB,SAKN/kB,GAASA,EAAMI,MAAM6J,OAAOwC,iBACvCzM,GAASA,EAAMI,MAAM6J,OAAO4B,YCLnCkJ,IAA8DtT,EAAAA,GAAAA,KAAUzB,IAC1E,MAAMuxT,EAAmBvxT,EAAMqwC,WAAWmhR,qBAE1C,OAAID,GAKA3vT,EAAAA,GAAAA,KAAC0vT,GAA2B,CAACtsH,SAAUusH,EAAiBvsH,SAAUjgL,OAAQ/kB,EAAMqwC,WAAWq5J,gBAAgBznM,SACtGsvT,EAAiB5vT,WALf,IAMuB,IAIzB8vT,IAAgCl4S,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,eCdpEA,IAA8DtT,EAAAA,GAAAA,KAAUzB,IAC1E,GAAGA,EAAMqwC,WAAWmhR,qBAChB,OAAQ5vT,EAAAA,GAAAA,KAAC6vT,GAA6B,IAG1C,MAAMnhR,EAAqBtwC,EAAMqwC,WAAWC,mBAC5C,OAAIA,EAIGA,EAAmBohR,aAHf,IAG2B,IAG7BC,IAAgCp4S,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,e,OCdnE,MAAM68S,GAAsBjyT,GAAAA,GAAOiB,IAAGf,KAAAA,IAAAC,EAAAA,GAAAA,GAAA,ymFAQXe,IAAA,IAAC,MAACT,GAAMS,EAAA,OAAKT,EAAM6C,KAAKC,QAAQ8J,OAAO,IAKvCxI,IAAA,IAAC,MAACpE,GAAMoE,EAAA,OAAKpE,EAAM6J,OAAOwC,cAAc,IACzCzD,IAAA,IAAC,MAAC5I,GAAM4I,EAAA,OAAK5I,EAAM6J,OAAOwC,cAAc,IAgBlCM,IAAA,IAAC,MAAC3M,GAAM2M,EAAA,OAAK3M,EAAM6J,OAAO4B,SAAS,IACpCqB,IAAA,IAAC,MAAC9M,GAAM8M,EAAA,OAAK9M,EAAM6J,OAAO4B,SAAS,IAY9B8Z,IAAA,IAAC,MAACvlB,GAAMulB,EAAA,OAAKvlB,EAAM6J,OAAO0C,YAAY,IAEvCiZ,IAAA,IAAC,MAACxlB,GAAMwlB,EAAA,OAAKxlB,EAAM6J,OAAO0C,YAAY,ICpDnEklT,IAAoBnxT,EAAAA,GAAAA,GAAU,qB,SCIpC,MAAMoxT,WAAyBpwT,GAAAA,EAClCC,MAAAA,GACI,OAAQC,EAAAA,GAAAA,KAAC6e,GAAAA,GAAa,CAACrgB,MAAO8B,KAAKwL,SAAStN,MAAMoiM,cAAcvgM,UAC5DL,EAAAA,GAAAA,KAACgwT,GAAmB,CAAA3vT,UAChBL,EAAAA,GAAAA,KAACiwT,GAAiB,CACdloS,SAAUznB,KAAKwL,SAASrN,WAAWo3C,UAAY,aAAgBv1C,KAAKwL,SAASyiB,SAASC,cAAgB,cAAgB,eACtH2hS,cAAc,EACdh7Q,IAAK70C,KAAKwL,SAASyiB,SAASC,cAC5BqqP,UAAW,IACXC,iBAAiB,EACjBs3C,aAAa,EACbC,kBAAgB,EAChBC,WAAS,EACTC,cAAY,OAS5B,EClBJ,MAAMp9S,IAAuEtT,EAAAA,GAAAA,KAAUzB,GAElB,IAA9DA,EAAMywR,cAAcqP,+BAA+B19R,OAC3C,MAIPR,EAAAA,GAAAA,KAAAo5B,GAAAA,SAAA,CAAA/4B,SACKjC,EAAMywR,cAAcqP,+BAA+BrtR,KAAI2/S,GAAgB7/H,GAAAA,aAAsB6/H,EAAcpyT,EAAMswI,IAAI/qF,YAKrH8sQ,IAAyC94S,EAAAA,GAAAA,GAAaxE,GAAe,CAAC,gBAAiB,QCFvFu9S,IAAe7wT,EAAAA,GAAAA,IAAS,cAA2ByM,GAAAA,UAE9D+P,iBAAAA,GACE/b,KAAKlC,MAAM0N,SAASk2L,OAAO2uH,eAE3B,MAAMC,EAAatwT,KAAKlC,MAAM0N,SAASk2L,OAAO4uH,WAC9CtwT,KAAKlC,MAAM0N,SAAS2L,OAAOk+G,KAAK,gBAADz1H,OAAiB0wT,EAAU,aAC1DtwT,KAAKlC,MAAM0N,SAASyqS,UAAU10R,MAAK00R,GAAaA,EAAUvjP,SAEtD+xE,MAAM6rL,IACVtwT,KAAKlC,MAAM0N,SAASqd,UAAUw2G,mBAAmB,0BAC/Cr/H,KAAKlC,MAAM0N,SAASorB,SAASE,WAAWC,SAAS53B,WACjDmxT,EACJ,CAGA7wT,MAAAA,GAAU,IAAD8wT,EAAAC,EACP,OACE9wT,EAAAA,GAAAA,KAAC+wT,GAAAA,GAAoB,CAAC3mT,MAAO,CAAE0B,SAAUxL,KAAKlC,MAAM0N,UAAWzL,UAC7DL,EAAAA,GAAAA,KAACgxT,GAAAA,GAAiB,CAACC,uBAAuB,EAAMC,cAAe5wT,KAAKlC,MAAM0N,SAASyiB,SAASC,cAAgB,CAAC2iS,GAAAA,GAAa,GAAG9wT,UAC3HyI,EAAAA,GAAAA,MAAC+V,GAAAA,GAAa,CAACrgB,MAAO8B,KAAKlC,MAAM0N,SAAStN,MAAMuN,aAAa1L,SAAA,CAC1DC,KAAKlC,MAAM0N,SAAStN,MAAMuiM,qBACc,QAAxC8vH,EAAAvwT,KAAKlC,MAAM0N,SAASyqC,QAAQC,oBAAY,IAAAq6Q,GAAM,QAANC,EAAxCD,EAA0CrmS,YAAI,IAAAsmS,GAA9CA,EAAgD70H,WAC/C37L,KAAKlC,MAAM0N,SAAS6D,OAAOm1I,kBAAkB+zB,eAC7C74K,EAAAA,GAAAA,KAACutT,GAAkB,KAErBvtT,EAAAA,GAAAA,KAAC+vT,GAA6B,KAC9B/vT,EAAAA,GAAAA,KAACguT,GAA8B,KAC/BhuT,EAAAA,GAAAA,KAACywT,GAAsC,KACvCzwT,EAAAA,GAAAA,KAACwvT,GAAyB,CAA0BC,iBAAkBA,IAAMnvT,KAAKlC,MAAM0N,SAASorS,iBAAhE,qBAChCl3S,EAAAA,GAAAA,KAACwvT,GAAyB,CAA8BC,iBAAkBA,IAAMnvT,KAAKlC,MAAM0N,SAASqrS,oBAApE,yBAChCn3S,EAAAA,GAAAA,KAACmuT,GAA2B,KAC5BnuT,EAAAA,GAAAA,KAACkwT,GAAgB,KACjBlwT,EAAAA,GAAAA,KAACiuT,GAAyC,UAKpD,ICxDK,MAAMmD,GAEX/9S,WAAAA,CAAoBkuG,GAA0B,KAA1BA,QAAAA,EAAuB,KAI3C8vM,kBAAoB,CAAC,EAAE,KACvBzd,SAAW,CAAC,CAHZ,CAMA3rK,OAAAA,CAAQ7sH,EAAYhR,GAClB9J,KAAK+wT,kBAAkBj2S,GAAOhR,CAChC,CAEA+zC,OAAAA,CAAQ/iC,GACN,OAAO9a,KAAK+wT,kBAAkBj2S,EAChC,CAEAgjC,UAAAA,CAAWhjC,UACF9a,KAAK+wT,kBAAkBj2S,EAChC,CAEAunH,OAAAA,CAAQvnH,EAAahR,GACnB9J,KAAK+wT,kBAAkBj2S,GAAO2G,KAAKC,UAAU5X,EAC/C,CAEA+2H,OAAAA,CAAQ/lH,GACN,IAAIhR,EAAQ9J,KAAK69C,QAAQ/iC,GACzB,OAAIhR,EAIG2X,KAAK4nH,MAAMv/H,GAHTA,CAIX,CAEA8pH,YAAAA,CAAa7tG,EAAcjc,GACzB9J,KAAKszS,SAASvtR,GAAQjc,CACxB,CAEA6nL,kBAAAA,CAAmB5rK,EAAcjc,GAC/B9J,KAAKszS,SAASvtR,GAAQjc,CACxB,CAGAk1I,SAAAA,CAAUj5H,GACR,OAAO/lB,KAAKszS,SAASvtR,EACvB,CAEAm5H,YAAAA,CAAan5H,GACX,IACK/lB,KAAKszS,SAASvtR,WACR/lB,KAAKszS,SAASvtR,EAEzB,CAAE,MAAOrX,GACP1O,KAAKihH,QAAQtyG,MAAM,kDAAmDD,EACxE,CACF,E,0ECrDK,MAAMsiT,GACXj+S,WAAAA,CAAoBguG,EAAoEkwM,EAAiDC,EAA+BjwM,GAA0B,KAA9KF,yBAAAA,EAAiD,KAAmBkwM,UAAAA,EAAuC,KAAUC,cAAAA,EAAqB,KAAUjwM,QAAAA,EAAuB,KAQ9KkwM,gBAAU,EAPzB,IAAIC,EAAYpxT,KAAK+gH,yBAAyBQ,eAC9CvhH,KAAKmxT,WAAaC,GAAaA,EAAUlvM,OAASkvM,EAAUlvM,MAAMoQ,UAC9DtyH,KAAKmxT,aAAenxT,KAAKmxT,WAAW/iO,SAAS,OAC/CpuF,KAAKmxT,YAAc,IAEvB,CAIQE,cAAAA,CAAejrL,GACrB,MAAM,0CAANxmI,OAAiDwmI,EACnD,CAEQkrL,YAAAA,CAAar3P,GACnB,MAAMs3P,EAAc,OAAHt3P,QAAG,IAAHA,OAAG,EAAHA,EAAK50D,MAAM,KAC5B,GAAIksT,EAASrxT,OAAS,EAAG,CACvB,MAAMkmI,EAAWmrL,EAASA,EAASrxT,OAAS,GAC5C,MAAM,YAANN,OAAmBwmI,EACrB,CACA,MAAO,EACT,CAGA,sBAAMorL,GAEJ,IAAK,IAADC,EACF,IAAIxhR,EAAAA,EAAAA,MACF,OAIF,IAAKjwC,KAAKmxT,WACR,OAGF,GAAkB,QAAlBM,EAAIzxT,KAAKixT,iBAAS,IAAAQ,GAAdA,EAAgBC,QAAS,CAAC,IAADC,EAAAC,EAC3B,MAAMC,GAAwC,QAAdF,EAAA3xT,KAAKixT,iBAAS,IAAAU,OAAA,EAAdA,EAAgBD,UAAW,GACrDI,GAAyC,QAAdF,EAAA5xT,KAAKixT,iBAAS,IAAAW,OAAA,EAAdA,EAAgBG,WAAY,IAEzDF,EAAc3xT,OAAS,GAAK4xT,EAAe5xT,OAAS,KACtD2xT,EAAcjmQ,SAAQomQ,IACpBhyT,KAAKiyT,eAAejyT,KAAKsxT,aAAaU,GAASA,EAAO,IAExDF,EAAelmQ,SAAQsmQ,IACrBlyT,KAAKmyT,cAAcnyT,KAAKsxT,aAAaY,GAAUA,EAAQ,IAI7D,MACElyT,KAAKmyT,cAAc,eAAgBnyT,KAAKqxT,eAAe,aACvDrxT,KAAKiyT,eAAe,oBAAqBjyT,KAAKqxT,eAAe,kBAC7DrxT,KAAKiyT,eAAe,cAAejyT,KAAKqxT,eAAe,WACvDrxT,KAAKiyT,eAAe,aAAcjyT,KAAKqxT,eAAe,WAG1D,CAAE,MAAO3iT,GACP1O,KAAKihH,QAAQtyG,MAAM,+BAAgCD,EACrD,CACF,CAEQujT,cAAAA,CAAe1iS,EAAY0qC,GACjC,OAAO,IAAIj/B,SAAQ,CAACC,EAASimK,KAC3B,IAAIkxH,EAAYpkT,SAASsvH,cAAc,UACvC80L,EAAU7iS,GAAKA,EACf6iS,EAAUh+S,IAAM6lD,EAChBm4P,EAAU7xM,OAAS,KACjBtlF,GAAS,EAEXm3R,EAAU3xM,QAAW/xG,IACnB1O,KAAKihH,QAAQtyG,MAAM,kCAAD/O,OAAmCq6D,GAAOvrD,GAC5DwyL,EAAOxyL,EAAI,EAEbV,SAAS87L,KAAK1nG,YAAYgwN,EAAU,GAIxC,CAEQD,aAAAA,CAAc5iS,EAAY0qC,GAChC,IAAIo4P,EAAWrkT,SAASsvH,cAAc,QACtC+0L,EAAS9iS,GAAKA,EACd8iS,EAAe,KAAIp4P,EACnBo4P,EAAc,IAAI,aAClBA,EAAe,KAAI,WACnBA,EAAS5xM,QAAW/xG,IAClB1O,KAAKihH,QAAQtyG,MAAM,sCAAD/O,OAAuCq6D,GAAOvrD,EAAI,EAGtEV,SAAS87L,KAAK1nG,YAAYiwN,EAC5B,EC5EK3yS,eAAgB4yS,GAAYjsT,GAS/B,MAAM++E,EAnBV,SAAsBA,EAAmB2lN,EAA+BwnB,GAEpE,MAAMC,GAAgBxvM,EAAAA,EAAAA,IAAiBuvM,GAEvC,OAAGC,EACQ,GAAA5yT,OAAGwlF,EAAS,KAAAxlF,OAAI4yT,GAAgBxyS,cAEpColE,CACX,CAWsBqtO,CAAapsT,EAAQ++E,UAAW/+E,EAAQyJ,OAAQzJ,EAAQqsT,SACpEC,QAA8B,SAAiD,KAA1C/yT,OAA4DwlF,EAAS,sBAE1GwtO,EAA8C,CAChDpwM,UAAWn8G,EAAQm8G,WAGvB,OAAOmwM,EAAsBpgQ,QAAQqgQ,EACzC,C,gBCnCO,MCQMC,GAA8B,iBAEpC,MAAMC,GACT//S,WAAAA,CAA6B2jH,GAAqC,KAArCA,UAAAA,EAAkC,KAItDjC,YAAM,EAHXz0H,KAAKy0H,OAAS,IAAIs+L,GAAAA,GAAqBr8L,EAAU+6F,cAAcpB,SACnE,CAIA,oBAAM2iG,CAAepmM,GAGjB,IAAIqmM,EAAa,CAAC,EACdC,EAAe,GACnB,GAAyB,KAJzBtmM,EAAYA,GAAa,IAIX1sH,OACV,MAAO,CACH+yT,aACAC,gBAIR,IAAI93S,EAAWpb,KAAK02H,UAAUv7G,MAAMC,SAoBpC,OAnBIrW,EAAAA,MAAMiP,QAAQoH,KACdA,QAAiBpb,KAAK02H,UAAUv7G,MAAM2mH,gBAAgBlV,IAG1DA,EAAUhhE,SAAQ72C,IACd,MAAM9B,EAAWmI,EAASrG,GACtB9B,EACAggT,EAAWl+S,GAAY,CACnBA,SAAU9B,EAAS8B,SACnBtM,MAAOwK,EAASxK,MAChBiwE,UAAWzlE,EAASylE,UACpBziE,UAAWhD,EAAS+yD,eACpBmtP,aAAclgT,EAASszD,kBAG3B2sP,EAAav4S,KAAK5F,EACtB,IAGG,CACHk+S,aACAC,eAER,CAEA,gCAAME,GACF,MAAMC,EAAarzT,KAAK02H,UAAUzsG,cAAc67F,oBAEhD,IAAa,OAAVutM,QAAU,IAAVA,OAAU,EAAVA,EAAYnzT,QAAS,EAAE,CACtB,MAAM84K,QAAkBh5K,KAAK02H,UAAUrzC,IAAIw+C,aAAawxL,GAExD,OAAO52S,OAAOspC,KAAKizH,GACdv5J,QAAO1K,IAA8D,IAAlDikK,EAAUjkK,GAAUy0E,4BACvCv7B,QAAO,CAACC,EAAKn5C,KACVm5C,EAAIn5C,GAAYikK,EAAUjkK,GACnBm5C,IACR,CAAC,EACZ,CAEA,MAAO,CAAC,CACZ,CAEA,mBAAMolQ,GACF,MAAO,CACHx/G,QAAS9zM,KAAK02H,UAAUrzC,IAAIkB,aAC5BwvH,WAAY/zM,KAAK02H,UAAUrzC,IAAIoB,gBAC/B8uO,aAAcvzT,KAAK02H,UAAUzoG,SAAS+kK,oBACtCpkD,iBAAkB5uI,KAAK02H,UAAUrzC,IAAIgB,sBACrCmvO,SAAUxzT,KAAK02H,UAAUrzC,IAAIwB,UAAUq7D,sBACvC7xF,SAAU,CAAC,EACXolQ,IAAK,CACDC,kBAAmB3zR,SAAS//B,KAAK02H,UAAUzsG,cAAcC,KAAK27R,OAAOvrS,cAEzEzG,OAAQ,CACJ0iB,SAAUv2B,KAAK02H,UAAU7iH,OAAOkZ,OAAOwJ,SACvC4S,MAAOnpC,KAAK02H,UAAU7iH,OAAOmI,GAAGmtB,MAChCr1B,SAAU9T,KAAK02H,UAAU7iH,OAAOmI,GAAGmgB,YAEvCw3R,YAAa3zT,KAAK02H,UAAUzsG,cAAc05G,qBAAqBtgD,IAAIxhE,OAAOigG,gBAAgB4P,IAElG,CAIA,iBAAMkiM,GACF,MAAMC,EAAc7zT,KAAK02H,UAAUhnH,KAC7BC,EAAekkT,EAAYlkT,aAEjC,IAAImkT,EACJ,GAAG9zT,KAAK02H,UAAUrzC,IAAI66D,sBAAsBvjG,QACxC,IACIm5Q,EAAcryS,KAAK4nH,MAAMrpI,KAAK02H,UAAUrzC,IAAI66D,sBAAsBvjG,SAASo5Q,SAC/E,CAAE,MAAOrlT,GACL1O,KAAK02H,UAAUv/G,OAAOxI,MAAM,wCAAyCD,EACzE,CAIJ,OAAGiB,EACQ,CACHA,aAAcA,EACdmkT,YAAaA,EACbxxO,SAAU,CACNG,qBAAsBoxO,EAAYvxO,SAASI,uBAMhD,CACH/yE,cAAc,EACdmkT,YAAaA,EAErB,CAGA,kBAAME,CAAaj/R,GACf,MAAMk/R,QAAwBj0T,KAAK02H,UAAU3hG,eACvCk/R,EAAgBC,gBAAgBn/R,EAC1C,CAEAjM,oBAAAA,CAAqBoB,GAAiD,IAADiqS,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACjE,IAAI,UAACzrS,EAAS,SAAEC,EAAQ,OAAE/Q,EAAM,MAAEqiB,EAAK,MAAExwB,EAAK,WAAE6sB,EAAU,UAAE4oG,EAAS,MAAEn+C,GAASl3D,EAIhF,GAHAk3D,EAAa,QAAR+yO,EAAG/yO,SAAK,IAAA+yO,EAAAA,EDrIa,MCsI1B50L,EAAqB,QAAZ60L,EAAG70L,SAAS,IAAA60L,GAAAA,GAEhBrvT,EAAAA,MAAM+qE,SAAS/mD,KACdhkB,EAAAA,MAAMkP,kBAAkB+U,KAAcjkB,EAAAA,MAAM+qE,SAAS9mD,KACrDjkB,EAAAA,MAAMkP,kBAAkBgE,KAAYlT,EAAAA,MAAM+qE,SAAS73D,KACnDlT,EAAAA,MAAMkP,kBAAkBqmB,KAAWv1B,EAAAA,MAAM+qE,SAASx1C,GACpD,OAAO,EAGX,MAAMm6R,EAAiB,IAMvB,GALA1rS,GAAsB,QAATsrS,EAAAtrS,SAAS,IAAAsrS,OAAA,EAATA,EAAWn0T,QAASu0T,EAAkB1rS,EAAUpI,MAAM,EAAG8zS,GAAkB1rS,EACxFC,GAAoB,QAARsrS,EAAAtrS,SAAQ,IAAAsrS,OAAA,EAARA,EAAUp0T,QAASu0T,EAAkBzrS,EAASrI,MAAM,EAAG8zS,GAAkBzrS,EACrF/Q,GAAgB,QAANs8S,EAAAt8S,SAAM,IAAAs8S,OAAA,EAANA,EAAQr0T,QAASu0T,EAAkBx8S,EAAO0I,MAAM,EAAG8zS,GAAkBx8S,EAC/EqiB,GAAc,QAALk6R,EAAAl6R,SAAK,IAAAk6R,OAAA,EAALA,EAAOt0T,QAASu0T,EAAkBn6R,EAAM3Z,MAAM,EAAG8zS,GAAkBn6R,EAExEv1B,EAAAA,MAAMkP,kBAAkB0iB,GAExB,OADA32B,KAAK02H,UAAU7tG,UAAUC,qBAAqB,CAAEC,YAAWC,WAAU/Q,SAAQqiB,QAAOxwB,QAAO6sB,aAAYD,MAAO0qD,GAASm+C,IAChH,EAGX,GAAIx6H,EAAAA,MAAM+qE,SAASn5C,GAGf,OAFAA,EAAcA,EAAWz2B,OAASu0T,EAAkB99R,EAAWhW,MAAM,EAAG8zS,GAAkB99R,EAC1F32B,KAAK02H,UAAU7tG,UAAUC,qBAAqB,CAAEC,YAAWC,WAAU/Q,SAAQqiB,QAAOxwB,QAAO6sB,WAAYyqD,EAAQ,CAAE,CAACA,EAAQ,SAAUzqD,GAAeA,EAAYD,MAAO0qD,GAAUm+C,IACzK,EACJ,GAAIx6H,EAAAA,MAAMqoH,SAASz2F,GAAa,CACnC,MAAM+9R,EAAmB,GACzB,IAAIC,EAAsB,EAC1B,IAAK,MAAMt2N,KAAQ1nE,EAAY,CAC3B,IAAK5xB,EAAAA,MAAM+qE,SAASn5C,EAAW0nE,IAC3B,OAAO,EAEP1nE,EAAW0nE,GAAMn+F,OAASu0T,IAC1B99R,EAAW0nE,GAAQ1nE,EAAW0nE,GAAM19E,MAAM,EAAG8zS,IAEjDE,GACJ,CACA,QAAIA,EAAcD,KAGlB10T,KAAK02H,UAAU7tG,UAAUC,qBAAqB,CAAEC,YAAWC,WAAU/Q,SAAQqiB,QAAOxwB,QAAO6sB,WAAYyqD,EAAQ,CAAE,CAACA,EAAQ,SAAUzqD,GAAeA,EAAYD,MAAO0qD,GAAQm+C,IACvK,EACX,CAEA,OAAO,CACX,CAEA,sBAAMq1L,GACF,aAAc50T,KAAK02H,UAAUj7B,mBAAmBsxC,gBACpD,CAEA,mBAAM8nL,eACW70T,KAAK02H,UAAUj7B,mBAAmBC,QACnD,EChLG,MAAMo5N,GACX/hT,WAAAA,CAAoB2jH,GAAqC,KAArCA,UAAAA,CACpB,CAEA,WAAIhqH,GAEF,OAAOqoT,GAAAA,CACT,CAEA,sBAAYC,GACV,OAAOllT,OAAO+iT,GAChB,CAEA,YAAI5wO,GACF,MAAO,CACLtyE,aAAc3P,KAAK02H,UAAUhnH,KAAKC,aAEtC,CACA,YAAIslT,GACF,MAAO,CACLnhH,QAAS9zM,KAAK02H,UAAUrzC,IAAIkB,aAC5BwvH,WAAY/zM,KAAK02H,UAAUrzC,IAAIoB,gBAEnC,CAEA,cAAIywO,GACF,MAAO,CACLC,YAAan1T,KAAK02H,UAAUrzC,IAAIwB,UAAUu7D,aAE9C,CAKA,0BAAMg1K,GACJ,aAAap1T,KAAKg1T,mBAAmB5B,4BACvC,CAEA,cAAMr+R,CAASsgS,EAAqBC,GAClC,MAAMrB,QAAwBj0T,KAAK02H,UAAU3hG,eACvCk/R,EAAgBC,gBAAgBmB,EAAgBC,EACxD,CAEAC,mBAAAA,CAAoBt9S,EAAgBsX,GAClC,MAAM8lS,EAAiB,CACrBp9S,OAAQA,EACRsX,GAAIA,GAGN,OAAOvvB,KAAK+0B,SAASsgS,EACvB,CAEA,sBAAM7iM,CAAiB//B,GACrB,GAAI1tF,EAAAA,MAAM+qE,SAAS2iB,GACjB,IACEA,EAAkBhxE,KAAK4nH,MAAM52C,EAC/B,CAAE,MAAO/jF,GACP1O,KAAK02H,UAAUv/G,OAAOxI,MAAM,qCAAD/O,OAAsC6yF,GAAmB/jF,EACtF,CAGF,aAAc1O,KAAK02H,UAAUxP,WAAWsL,iBAAiB//B,EAC3D,CAEA72D,aAAAA,CAAc5S,EAAmB/Q,EAAiBqiB,EAAgBxwB,GAChE9J,KAAK02H,UAAU7tG,UAAU+S,cAAc5S,EAAU/Q,EAAQqiB,EAAOxwB,EAClE,CAEAgf,oBAAAA,CAAqBC,EAAmBC,EAAkB/Q,EAAgBqiB,EAAexwB,GAA4G,IAA5F6sB,EAAkB12B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAMs/H,IAAkBt/H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAASy2B,EAAaz2B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GF9E5I,ME+E9B,OAAOD,KAAKg1T,mBAAmBlsS,qBAAqB,CAClDC,UAAWA,EACXC,SAAUA,EACV/Q,OAAQA,EACRqiB,MAAOA,EACPxwB,MAAOA,EACP6sB,WAAYA,EACZ4oG,UAAWA,EACXn+C,MAAO1qD,GAEX,CAEAm+R,aAAAA,GACE,OAAO70T,KAAKg1T,mBAAmBH,eACjC,CAEAD,gBAAAA,GACE,OAAO50T,KAAKg1T,mBAAmBJ,kBACjC,CAEAY,qBAAAA,CAAsBhgM,GACpBx1H,KAAK02H,UAAUrzC,IAAIoxC,OAAO8S,qBAAoB,KAC5C,MAAM53H,EAAe3P,KAAK02H,UAAUhnH,KAAKC,aACzC6lH,GAAYA,EAAS7lH,EAAa,GAEtC,CAEA,kBAAMkyH,CAAajV,GACjB,aAAa5sH,KAAKg1T,mBAAmBhC,eAAepmM,EACtD,CAEAw0B,eAAAA,GACE,OAAOphJ,KAAK02H,UAAUrzC,IAAI+9D,iBAC5B,GCxFFq0K,EAAAA,EAAAA,IAAU,CACNC,eAAgB,aAIpB,IAAIC,GAAgB,SAASx+S,GACzB,IACI,IAAIy+S,EAAS,gCAGb,OAFAh4Q,aAAa+pF,QAAQiuL,EAAQA,GAC7Bh4Q,aAAaE,WAAW83Q,GACjB,IAAIC,GAAAA,EAAoB1+S,EACnC,CACA,MAAO3S,GAEH,OADA2S,EAAOxI,MAAM,kCACN,IAAImiT,GAA4B35S,EAC3C,CAEJ,EAgBOuI,eAAeo2S,KAAmC,IAADC,EAAAC,EACpD,IAAIjrB,EAAgB,IAAIkrB,GAAAA,EACpBjrB,EAAa,IAAIkrB,GAAAA,EACjBjrB,EAAc,IAAIkrB,GAAAA,EAClBC,EAAgB,IAAIC,GAAAA,EAAqE,QAAjDN,EAAChrB,EAAcroL,kBAAkBC,EAAAA,UAAgB,IAAAozM,GAAK,QAALC,EAAhDD,EAAkD1yO,WAAG,IAAA2yO,OAAL,EAAhDA,EAAuD9pO,OAChGqmO,EAAiBoD,GAAcS,GAE/BtrB,EAAmB,IAAIpmL,EACvB0yE,EAA0B,IAAIT,GAAwB47H,EAAgB6D,GAItEE,EAAuB,IAAIz1M,EAC3BkqL,EACA3zG,EACA6zG,EACAmrB,EACA7D,GAGAgE,QAAmBD,EAAqBh1M,gCAE5C,MAAMk1M,QAnCV92S,eAA+B6jG,EAAsBpsG,GACjD,IAEI,aAD+B,SAAwC,KAAjCvX,OAAyD2jH,EAAavjG,iBAClFuyC,OAC9B,CAAE,MAAO7jD,GAEL,OADAyI,EAAOxI,MAAM,2BAAD/O,OAA4B2jH,GAAgB70G,GACjD+nT,GAAAA,OACX,CAEJ,CA0B+BC,CAAgBH,EAAWl0M,IAAIp0F,SAAS40F,KAAMuzM,GAEzE,IAAIt2H,QAAwBwyH,GAAY,CACpCltO,UAAWuxO,CAAAA,SAAAA,aAAAA,WAAAA,GAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,qBAAAA,EAAAA,cAAAA,GAAYC,sBAAwBL,EAAWr0M,MAAMrgG,OAAO3jB,MAAM6nB,KAC7Ey8F,UAAW+zM,EAAW/zM,UACtBP,aAAcs0M,EAAWt0M,aACzBikB,WAAYqwL,EAAW10M,YACvB/xG,OAAQi7R,EACR2nB,QAASH,IAGb,MAAM,kBAACsE,SAA2B,2KAG5B,IAAI7F,GAAmB55H,EAAyBm/H,EAAWr0M,MAAMrgG,OAAOwgG,IAAKk0M,EAAWl0M,IAAIp0F,SAASy1F,KAAM0yM,GAAe5E,yBAE1H,IAAI3jM,EAAe0oM,EAAYzrB,EAAkB1zG,EAAyB0I,EAAiBs2H,GAAe1jQ,OAEhH,MAAMlnD,EAAW,IAAIq/R,GAAeC,EAAkBsrB,EAAe7D,EAAgBxnB,EAAeC,EAAYC,EAAanrG,EAAiB+2H,EAAmBN,EAAYC,GAE7K1mT,OAAc,MAAI,IAAIglT,GAAStpT,GAC/BsE,OAAO+iT,IAA+B,IAAIC,GAAWtnT,GAErDsE,OAAyB,iBAAI,SAAU+jF,EAAIijO,GACvC,OAAOhnT,OAAc,MAAE0iH,iBAAiB3+B,EAAIijO,EAChD,EP5CG,SAAmBtrT,GACX6kL,GAAAA,WACXriL,SAASC,eAAe,oBAGrBxO,QACHC,EAAAA,GAAAA,KAAC0wT,GAAY,CAAC5kT,SAAUA,IAE5B,COsCIurT,CAAUvrT,EACd,C,qFC3GA,MAAM4nI,EAAgB,CAClB4jL,iBAAgC,mBAChCC,uBAAgC,yBAChCC,cAAgC,gBAChCC,uBAAgC,yBAChC57K,cAAgC,gBAChC67K,6BAAgC,+BAChCC,mBAAgC,qBAChCC,kBAAgC,oBAChCC,iBAAgC,mBAChCC,4BAAgC,8BAChCC,iBAAgC,mBAChCC,oBAAgC,sBAChCj/K,WAAgC,aAChCk/K,gBAAgC,kBAChCC,iBAAgC,mBAChCC,oBAAgC,sBAChCC,oBAAgC,sBAChCviL,oBAAgC,sBAChCE,2BAAgC,6BAChCoD,yBAAgC,2BAChCk/K,sBAAgC,wBAChC1/K,UAAgC,YAChC2/K,mBAAgC,qBAChCC,mBAAgC,qBAChCn+K,qBAAgC,uBAChCo+K,qBAAgC,uBAChCC,YAAgC,cAChCC,WAAgC,aAChC3hL,sBAAgC,wBAChC4hL,2BAAgC,6BAChCC,2BAAgC,6BAChCC,+BAAgC,iCAChCC,2BAAgC,6BAChCt/K,wBAAgC,0BAChCu/K,wBAAgC,0BAChCplL,cAAe,gBAEfqlL,gBAAiB,kBACjBC,iBAAkB,mBAClBC,8BAA+B,gCAC/BC,kCAAmC,oCACnChlL,2CAA4C,6CAC5CF,kCAAmC,oCACnCmlL,gCAAiC,gDACjCC,sBAAuB,wBACvBC,gBAAiB,kBACjBC,+BAAgC,iCAChCC,oCAAqC,sCACrCC,gCAAiC,kCACjCv/K,uBAAwB,yBACxBJ,aAAc,eACd4/K,iBAAkB,mBAClBC,uBAAyB,yBACzBC,kBAAmB,oBACnBjjL,uBAAwB,yBACxBkjL,4BAA6B,8BAC7B3+K,0BAA2B,4BAC3B4+K,wBAAyB,0BACzBC,4BAA6B,8BAC7BC,0BAA2B,4BAC3BC,qBAAsB,uBACtBC,uBAAwB,yBACxBC,qBAAsB,uBACtBC,oBAAqB,sBACrBp/K,uBAAwB,yBACxBtB,uBAAwB,yBACxB2gL,iCAAkC,mCAClCC,yBAA0B,2BAC1BC,uBAAwB,yBACxBC,0BAA2B,4BAC3BC,yBAA0B,2BAC1BljL,sBAAuB,wBACvBmjL,qBAAsB,uBACtBhgL,0BAA2B,4BAC3BE,0BAA2B,4BAC3B+/K,iBAAmB,mBACnBC,qBAAuB,uBACvBC,QAAU,UACVC,QAAU,UACVC,kBAAmB,oBACnBC,cAAe,gBACfvjL,qBAAsB,uBACtBlD,qBAAsB,uBACtB0mL,kBAAmB,sBACnBC,kBAAmB,oBACnB9/K,yBAA2B,2BAC3B+/K,iBAAmB,mBACnB5/K,wBAA0B,0BAC1BtD,4BAA8B,8BAC9BJ,wBAAyB,0BACzBE,oBAAqB,sBACrBqjL,mBAAoB,qBACpBC,qBAAsB,uBACtBlkL,2BAA4B,6BAC5BmkL,gCAAiC,kCACjCrlL,oCAAqC,sCACrCE,sCAAuC,wCACvCE,sCAAuC,wCAC1CQ,kCAAmC,oCAChCQ,+BAAgC,iCAChCkkL,yCAA0C,2CAC1CC,8CAA+C,gDAC/C1gL,+BAAgC,iCAChCxC,yBAA0B,2BAC1BmjL,qBAAsB,uBACzBC,uBAAwB,yBACxBC,mBAAoB,qBACjBplL,kCAAmC,oCACnCE,qCAAsC,uCACtC8C,uCAAwC,yCACxCK,qBAAsB,uBACtBgiL,gBAAiB,kBACjB3kL,wBAAyB,0BACzB4kL,0BAA4B,4BAC5BC,wCAA0C,0CAC1CC,yCAA2C,2CAC3C/mL,sBAAwB,wBACxBW,2BAA6B,6BAC7BqmL,oBAA8B,sBAC9BhiL,sBAA8B,wBAC9BrC,+BAAgC,iCAChC6C,cAAe,gBACfnB,mBAAoB,qBACpB4iL,mBAAoB,qBACpBC,oBAAqB,sBACrBC,cAAe,gBACfC,kBAAoB,oBACpBC,gBAAiB,kBACjBlkL,wBAAyB,0BACzBE,wBAAyB,0BACzBsD,cAAe,iBAMblH,EAAgB,CAClB6nL,aAAc,eACdC,qBAAsB,uBACtB7nL,qBAAsB,uBACtBE,qBAAsB,wBAGpB4nL,EAAc,CAChBC,SAAU,QACVC,gBAAiB,WACjBC,UAAW,SACXC,cAAe,YACfC,cAAe,YACfC,aAAc,WACdC,oBAAqB,iBACrBC,eAAgB,aAChBC,eAAgB,aAChBC,cAAe,YACfC,aAAc,WACdC,kBAAmB,gBACnBC,UAAW,SACXC,SAAU,QACVC,UAAW,SACXC,QAAS,QAGPC,EAA2B,CAC7B/pL,EAAcmI,cACdnI,EAAc4kL,mBACd5kL,EAAc+kL,YACd/kL,EAAcC,cACdD,EAAcslL,gBACjBtlL,EAAcyF,yBACXzF,EAAciF,UACdjF,EAAcqF,WACdrF,EAAciI,eAQZ+hL,EAAkC,CACpChqL,EAAcmI,cACdnI,EAAc4kL,mBACd5kL,EAAcC,cACdD,EAAcslL,gBACdtlL,EAAcyF,yBACdzF,EAAciF,UACdjF,EAAcqF,WACdrF,EAAcmC,oBACdnC,EAAciI,c,uDChMX,MAAMuiG,EAAkB,CAC3By/E,sBAAuB,IACvBC,mBAAoB,OACpBC,oBAAqB,IACrBC,kBAAmB,OACnBC,sBAAuB,OACvBC,iBAAkB,IAClBC,qBAAsB,OACtBC,gBAAiB,OACjB//E,cAAe,IACfggF,mBAAoB,OACpBC,sBAAuB,OACvBC,yBAA0B,OAC1BC,0BAA2B,OAC3BC,2BAA4B,OAE5BC,gBAAiB,GACjBC,wBAAyB,GACzBC,cAAe,iBAIZ,SAASC,EAAoB/gG,GAA6B,IAADghG,EAE5D,OADAhhG,EAAqB,QAAZghG,EAAGhhG,SAAS,IAAAghG,OAAA,EAATA,EAAWn/T,cACDy+O,EAAgB6/E,sBAAsBt+T,YAAcm+N,IAAcsgB,EAAgBwgF,aAC5G,C,mECvBO,MAAMG,EAAiB,CAC7BC,IAAK,MACLC,OAAQ,SACRh5O,GAAI,KACJi5O,KAAM,QAMA,IAAKC,EAKA1tO,GAFX,SAHW0tO,GAAAA,EAAAA,EAAiB,oBAAjBA,EAAAA,EAAiB,0BAG5B,CAHWA,IAAAA,EAAiB,KAU5B,SALW1tO,GAAAA,EAAAA,EAAe,gBAAfA,EAAAA,EAAe,aAAfA,EAAAA,EAAe,mBAAfA,EAAAA,EAAe,eAK1B,CALWA,IAAAA,EAAe,I,8FCjB3B,MAAM2tO,EAAmB,CACrBC,kBAAmB,SACnBC,4BAA6B,kBAC7BC,mCAAoC,4BACpCC,qBAAsB,kBACtBC,wBAAyB,qBACzBC,sBAAuB,uBACvBC,yBAA0B,0BAC1BC,6BAA8B,8BAC9BC,mBAAoB,sBACpBC,6BAA8B,+BAE5BC,EAAc,CAChBC,SAAU,WACVC,cAAe,gBACfC,UAAW,aAETC,EAAa,CACfC,sBAAuB,uBASrBC,EAAa,CACfC,UAAW,EACXJ,UAAW,GAGTK,EAAyB,CAC3BC,aAAc,EACdC,kBAAmB,GAGjBj+H,EAAiB,CACnBk+H,gBAAiB,EACjBC,UAAW,EACX5I,iBAAkB,EAClB6I,qBAAsB,EACtBC,qBAAsB,EACtBC,YAAa,EACbr+H,mBAAoB,E,8BC1CjB,IAAKs+H,EAyBA7mC,E,yBAtBX,SAHW6mC,GAAAA,EAAY,cAAZA,EAAY,kBAGvB,CAHWA,IAAAA,EAAY,KA+BvB,SANW7mC,GAAAA,EAAAA,EAAyB,uCAAzBA,EAAAA,EAAyB,uCAAzBA,EAAAA,EAAyB,+BAAzBA,EAAAA,EAAyB,6DAAzBA,EAAAA,EAAyB,uDAMpC,CANWA,IAAAA,EAAyB,I,qFC1BrC,MAAM37C,EAAwB,CAC1ByiF,IAAK,EACLliF,MAAO,EACPK,MAAO,EACP8hF,OAAQ,EACRC,IAAK,EACLtiF,GAAI,EACJM,GAAI,EACJH,QAAS,EACTP,QAAS,GACTQ,SAAU,GACVC,OAAQ,GACRkiF,MAAO,GACPC,GAAI,GACJ3iF,SAAU,GACVC,eAAgB,GAChBC,YAAa,GACbE,GAAI,KAIFvJ,EAAmB,CACrB,CAACiJ,EAAsBO,OAAQ,QAC/B,CAACP,EAAsBY,OAAQ,QAC/B,CAACZ,EAAsB0iF,QAAS,SAChC,CAAC1iF,EAAsB2iF,KAAM,YAC7B,CAAC3iF,EAAsBK,IAAK,YAC5B,CAACL,EAAsBW,IAAK,UAC5B,CAACX,EAAsBS,UAAW,WAClC,CAACT,EAAsBU,QAAS,SAChC,CAACV,EAAsBM,IAAK,KAC5B,CAACN,EAAsB4iF,OAAQ,QAC/B,CAAC5iF,EAAsBQ,SAAU,UACjC,CAACR,EAAsBC,SAAU,UACjC,CAACD,EAAsBG,gBAAiB,UACxC,CAACH,EAAsBI,aAAc,cACrC,CAACJ,EAAsBE,UAAW,YAIhC4iF,EAAoB,CACtB,CAAC9iF,EAAsByiF,KAAM,MAC7B,CAACziF,EAAsBO,OAAQ,KAC/B,CAACP,EAAsBY,OAAQ,KAC/B,CAACZ,EAAsB0iF,QAAS,MAChC,CAAC1iF,EAAsB2iF,KAAM,MAC7B,CAAC3iF,EAAsBK,IAAK,KAC5B,CAACL,EAAsBW,IAAK,KAC5B,CAACX,EAAsBS,UAAW,KAClC,CAACT,EAAsBU,QAAS,KAChC,CAACV,EAAsBM,IAAK,KAC5B,CAACN,EAAsB4iF,OAAQ,KAC/B,CAAC5iF,EAAsBQ,SAAU,KACjC,CAACR,EAAsBG,gBAAiB,MACxC,CAACH,EAAsBI,aAAc,KACrC,CAACJ,EAAsBE,UAAW,MAGhC6iF,EAA2B,CAC7BC,wBAAyB,EACzBjjN,qBAAuB,EACvBkjN,kBAAmB,GAGjBC,EAAS,CACXT,IAAM,EACNU,MAAQ,GACRviF,MAAO,GACPwiF,OAAQ,GACRljF,SAAU,GACVmjF,WAAY,GACZC,YAAa,GACbC,WAAY,G,+CC8HhB,YArLA,MAAoBvuT,WAAAA,GAAA,KAERwuT,OAAS,iEAAiE,KAE1EC,UAAY,uIAAuI,KAEnJC,cAAgB,cAAc,KAG9BC,OAAS,CACb,QAAW,2BACXC,UAAW,SACXC,WAAY,cACZC,SAAU,eACVC,SAAU,qBACVC,UAAW,UACXC,WAAY,aACZC,SAAU,eACVC,QAAS,aACTC,QAAS,WACTC,YAAa,wBACbC,eAAgB,+BAChBC,YAAa,UACbC,YAAa,SAChB,KAGOC,MAAQ,CACZC,SAAU,CACN,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAC1C,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAEtEC,WAAY,CACR,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAC7E,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YAErH,CA8DDr4S,MAAAA,CAAOgB,EAAW0gF,EAAe+2C,GAS7B,GAPyB,IAArB7iJ,UAAUC,QAAyD,oBAAzCuc,OAAOL,UAAUjd,SAASwjU,KAAKt3S,IAAgC,KAAKosC,KAAKpsC,KACnG0gF,EAAO1gF,EACPA,OAAOlrB,GAIXkrB,EAAOA,EAAO,IAAIyxC,KAAKzxC,GAAQ,IAAIyxC,KAC/B2nE,MAAMp5G,GACN,MAAMu3S,YAAY,gBAMG,UAHzB72N,EAAO9yD,OAAOj5C,KAAK0hU,OAAO31N,IAASA,GAAQ/rG,KAAK0hU,OAAgB,UAGvD/gT,MAAM,EAAG,KACdorF,EAAOA,EAAKprF,MAAM,GAClBmiI,GAAM,GAGV,IAAIo2C,EAAIp2C,EAAM,SAAW,MACrBxkF,EAAIjzC,EAAK6tK,EAAI,UACb4uH,EAAIz8R,EAAK6tK,EAAI,SACbhiG,EAAI7rE,EAAK6tK,EAAI,WACbz9G,EAAIpwD,EAAK6tK,EAAI,cACb2pI,EAAIx3S,EAAK6tK,EAAI,WACb4pI,EAAIz3S,EAAK6tK,EAAI,aACbx6E,EAAIrzF,EAAK6tK,EAAI,aACb6pI,EAAI13S,EAAK6tK,EAAI,kBACb1hG,EAAIsrD,EAAM,EAAIz3H,EAAKq4D,oBACnBs/O,EAAQ,CACJ1kQ,EAAGA,EACH2kQ,GAAIjjU,KAAKkjU,KAAK5kQ,GACd6kQ,IAAKnjU,KAAKwiU,MAAMC,SAAS3a,GACzBsb,KAAMpjU,KAAKwiU,MAAMC,SAAS3a,EAAI,GAC9B5wN,EAAGA,EAAI,EACPmsO,GAAIrjU,KAAKkjU,KAAKhsO,EAAI,GAClBosO,IAAKtjU,KAAKwiU,MAAME,WAAWxrO,GAC3BqsO,KAAMvjU,KAAKwiU,MAAME,WAAWxrO,EAAI,IAChCssO,GAAIvqR,OAAOwiC,GAAG96D,MAAM,GACpB8iT,KAAMhoP,EACN6b,EAAGurO,EAAI,IAAM,GACba,GAAI1jU,KAAKkjU,KAAKL,EAAI,IAAM,IACxBA,EAAGA,EACHc,GAAI3jU,KAAKkjU,KAAKL,GACdC,EAAGA,EACHc,GAAI5jU,KAAKkjU,KAAKJ,GACdpkN,EAAGA,EACHmlN,GAAI7jU,KAAKkjU,KAAKxkN,GACdC,EAAG3+G,KAAKkjU,KAAKH,EAAG,GAChBA,EAAG/iU,KAAKkjU,KAAKH,EAAI,GAAK1sT,KAAKsD,MAAMopT,EAAI,IAAMA,GAC3CtrO,EAAGorO,EAAI,GAAK,IAAM,IAClBxsD,GAAIwsD,EAAI,GAAK,KAAO,KACpBiB,EAAGjB,EAAI,GAAK,IAAM,IAClBkB,GAAIlB,EAAI,GAAK,KAAO,KACpBmB,EAAGlhL,EAAM,OAAS7pG,OAAO5tB,GAAM4oE,MAAMj0F,KAAKwhU,YAAc,CAAC,KAAKhhR,MAAMw4B,QAAQh5E,KAAKyhU,cAAe,IAChGjqO,GAAIA,EAAI,EAAI,IAAM,KAAOx3F,KAAKkjU,KAAoC,IAA/B7sT,KAAK8jB,MAAM9jB,KAAKuoG,IAAIpnB,GAAK,IAAYnhF,KAAKuoG,IAAIpnB,GAAK,GAAI,GAC1FysO,EAAG,CAAC,KAAM,KAAM,KAAM,MAAM3lQ,EAAI,GAAK,EAAI,GAAMA,EAAI,IAAMA,EAAI,KAAQ,GAAK,EAAI,GAAKA,EAAI,KAG/F,OAAOytC,EAAK/yB,QAAQh5E,KAAKuhU,QAAS2C,GACvBA,KAAMlB,EAAQA,EAAMkB,GAAMA,EAAGvjT,MAAM,EAAGujT,EAAGhkU,OAAS,IAEjE,CAEQgjU,IAAAA,CAAKvmS,GAAuC,IAA1B4rF,EAAWtoH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAChCkkU,EAAclrR,OAAOtc,GACzB,KAAOwnS,EAAYjkU,OAASqoH,GACxB47M,EAAc,IAAMA,EAExB,OAAOA,CACX,CAEAC,sBAAAA,GACI,OAAOpkU,KAAKqqB,OAAO,IAAIyyC,KAAQ,+BACnC,CAEAunQ,SAAAA,CAAUh5S,GACN,OAAOrrB,KAAKqqB,OAAOgB,EAAM,+BAC7B,E,+CCSJ,YA/KA,MAIItY,WAAAA,GAAe,KAIPmsO,oBAAc,EAHlBl/O,KAAKk/O,eAAiB,CAAC,CAC3B,CAOA/hH,EAAAA,CAAGp3G,EAAyByvG,EAAoB7N,GAE5C,IAAK5hG,EACD,MAAM,IAAIkqD,MAAM,8CAGpB,IAAIulD,EACA,MAAM,IAAIvlD,MAAM,uDAMpB,GAHA03C,EAAUA,GAAW3nH,KAGjBoQ,MAAM2/D,QAAQhqD,GAAO,CACrB,IAAIu+S,EAA4C,GAChD,IAAK,IAAqCxxL,EAAjCyxL,EAAW,EAAGh8M,EAAMxiG,EAAK7lB,OAAmBqkU,EAAWh8M,EAAKg8M,IACjEzxL,EAAY/sH,EAAKw+S,GACjBD,EAAe3pT,KAAK3a,KAAKm9H,GAAG2V,EAAWtd,EAAU7N,IAIrD,MAAO,CACH/7F,IAAKA,IAAM04S,EAAe14Q,SAAQlgC,GAAgBA,EAAaE,QAEvE,CAYA,MAVI,qBAAuB5rB,KAAKk/O,eAAen5N,KAC3C/lB,KAAKk/O,eAAen5N,GAAQ,IAGhC/lB,KAAKk/O,eAAen5N,GAAMpL,KAAK,CAC3B66G,SAAUA,EACV7N,QAASA,IAIN,EAAE68M,EAAOC,EAAWC,KAChB,CACH94S,IAAKA,KACD5rB,KAAK4rB,IAAI44S,EAAOC,EAAWC,EAAS,IAHzC,CAMJ3+S,EAAMyvG,EAAU7N,EACvB,CAOAg9M,IAAAA,CAAK5+S,EAAyByvG,EAAoB7N,GAC9CA,EAAUA,GAAW3nH,KACrB,IAAI4kU,EAAO5kU,KACP6kU,EAAoB,WAChBD,EAAKh5S,IAAI7F,EAAM8+S,EAAcl9M,GAC7B6N,EAASpjH,MAAMpS,KAAMC,UACzB,EAKJ,OAFA4kU,EAAaC,kBAAoBtvM,EAE1Bx1H,KAAKm9H,GAAGp3G,EAAM8+S,EAAcl9M,EACvC,CAMAywB,IAAAA,CAAKryH,GAAiC,IAAnBgJ,EAAW9uB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC1B20I,EAAgB50I,KAAK+kU,sBAEZ,GAAGnlU,OAAOg1I,EAAc7uH,IAAS,IAEvC6lC,SAAQ5kC,IACX,IACIA,EAAMwuG,SAASmtM,KAAK37S,EAAM2gG,QAAS54F,EACvC,CAAE,MAAOkvH,GACLx5I,QAAQkK,MAAMsvI,EAClB,IAER,CASAryH,GAAAA,CAAI7F,EAAyByvG,EAAoB7N,GAC7C,GAAIv3G,MAAM2/D,QAAQhqD,GAEf,YADAA,EAAK6lC,SAAQknF,GAAa9yI,KAAK4rB,IAAIknH,EAAWtd,EAAU7N,KAG3DA,EAAUA,GAAW3nH,KAErB,IAAIy0H,EAASz0H,KAAKk/O,eAAen5N,GAIjC,QAAe5lB,IAAXs0H,EAAJ,CAIA,IAAK,IAAI8vM,EAAW9vM,EAAOv0H,OAAS,EAAG,GAAKqkU,EAAUA,IAAY,CAC9D,IAAIv9S,EAAQytG,EAAO8vM,IARHS,EAYEh+S,EAAMwuG,YAXNA,GAAYwvM,EAAGF,oBAAsBtvM,GAWlBxuG,EAAM2gG,SAAWA,GAClD8M,EAAOp0F,OAAOkkS,EAAU,EAEhC,CAfoBS,MAkBhB,IAAMvwM,EAAOv0H,eACNF,KAAKk/O,eAAen5N,EAd/B,CAgBJ,CAUAk/S,sBAAAA,GACIjlU,KAAKk/O,eAAiB,EAC1B,CAMA6lF,mBAAAA,GACI,OAAO/kU,KAAKk/O,cAChB,CAMAgmF,YAAAA,CAAazwM,GAEJA,GAILA,EAAO7oE,SAAS5kC,IACR5W,MAAM2/D,QAAQ/oD,GACdA,EAAM4kC,SAASu5Q,IACZA,EAAQv5S,KAAK,IAGhB5E,EAAM4E,KACV,GAER,E,yFCtMG,MAAM43F,EAAwBz0F,IACjC,MAAM,UAACyzF,GAAazzF,EACpB,MAAO,CACH,IAAO,CACH,WAAc,CACV,OAAU,CACN,IAAO,2BACP,MAAS,+BAGjB,MAAS,CACL,OAAU,CACN,IAAO,0BAInB,OAAU,CACN,kBAAqB,CACjB,wBAA2B,CACvB,SAAW,EACX,KAAQ,QACR,aAAgB,qBAChB,oBAAuB,6BAE3B,wBAA2B,CACvB,SAAW,EACX,KAAQ,QACR,aAAgB,sBAEpB,yBAA4B,CACxB,SAAW,IAGnB,eAAkB,CACd,UAAa,CACT,SAAW,GAEf,KAAQ,CACJ,SAAW,GAEf,OAAU,CACN,SAAW,IAGnB,iBAAoB,CAChB,oBACA,eACA,yBACA,kBACA,yBAEJ,gBAAmB,CACf,kBACA,yBAEJ,YAAe,CACX,aAAgB,GAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,aACN,SAAY,QACZ,MAAS,OAGjB,MAAS,CAAC,0BAA2B,+BAKrD,YAAe,CACX,SAAW,GAEf,eAAkB,CACd,cAAiBkwD,EAAAA,EAAwB6yH,QACzC,oCAAsC,EACtC,QAAW,CACP,cACA,eACA,iBAGR,IAAO,CACH,OAAS,EACT,UAAa,CACT,eAAkB,cAClB,aAAgB,gBAChB,kBAAqB,SAG7B,gBAAmB,CACf,oBAAsB,EACtB,mBAAsB,CAClB,aAAe,EACf,sBAAwB,IAGhC,UAAa,CACT,OAAQ,CACJ,oBAAuB,CACnB,CACI,MAAS,QACT,KAAQ,OACR,KAAQtvF,EAAUxjH,OAAOomU,WAAWC,sBAAsBC,mBAAmBnmU,YAEjF,CACI,MAAS,QACT,KAAQ,aACR,KAAQqjH,EAAUxjH,OAAOomU,WAAWC,sBAAsBE,eAAepmU,YAE7E,CACI,MAAS,WACT,KAAQ,gBACR,KAAQqjH,EAAUxjH,OAAOomU,WAAWC,sBAAsBG,kBAAkBrmU,YAEhF,CACI,MAAS,cACT,KAAQ,mBACR,KAAQqjH,EAAUxjH,OAAOomU,WAAWC,sBAAsBI,cAActmU,YAE5E,CACI,MAAS,eACT,KAAQ,oBACR,KAAQqjH,EAAUxjH,OAAOomU,WAAWC,sBAAsBK,sBAAsBvmU,cAI5F,OAAQ,CACJ,oBAAuB,CACnB,CACI,MAAS,QACT,KAAQ,OACR,KAAQqjH,EAAUxjH,OAAOomU,WAAWC,sBAAsBC,mBAAmBnmU,YAEjF,CACI,MAAS,QACT,KAAQ,aACR,KAAQqjH,EAAUxjH,OAAOomU,WAAWC,sBAAsBE,eAAepmU,YAE7E,CACI,MAAS,eACT,KAAQ,oBACR,KAAQqjH,EAAUxjH,OAAOomU,WAAWC,sBAAsBK,sBAAsBvmU,YAEpF,CACI,MAAS,cACT,KAAQ,mBACR,KAAQqjH,EAAUxjH,OAAOomU,WAAWC,sBAAsBI,cAActmU,YAE5E,CACI,MAAS,WACT,KAAQ,gBACR,KAAQqjH,EAAUxjH,OAAOomU,WAAWC,sBAAsBG,kBAAkBrmU,eAK5F,MAAS,CACL,KAAQ,aAEZ,OAAU,CACN,MAAS,CACL,kBAAqB,CACjB,iBAAoB,GAExB,gBAAmB,CACf,WAAc,CACV,CACI,GAAM,aACN,gBAAmB,IAEvB,CACI,GAAM,YAEV,CACI,GAAM,cAEV,CACI,GAAM,UAEV,CACI,GAAM,cAKtB,YAAe,CACX,gBAAmB,CACf,WAAc,CACV,CACI,GAAM,cAEV,CACI,GAAM,YAEV,CACI,GAAM,cAEV,CACI,GAAM,cAKtB,iBAAoB,CAChB,gBAAmB,CACf,WAAc,CACV,CACI,GAAM,cAEV,CACI,GAAM,YAEV,CACI,GAAM,cAEV,CACI,GAAM,WAEV,CACI,GAAM,YAIlB,YAAe,CACX,CACI,SAAY,cACZ,gBAAmB,GAEvB,CACI,SAAY,aACZ,gBAAmB,GAEvB,CACI,SAAY,SACZ,gBAAmB,IAG3B,QAAW,CACP,CACI,eAAkB,aAClB,SAAY,WACZ,GAAM,aAEV,CACI,eAAkB,OAClB,SAAY,SACZ,GAAM,cAEV,CACI,eAAkB,UAClB,SAAY,aACZ,GAAM,eAEV,CACI,eAAkB,gBAClB,SAAY,SACZ,GAAM,cAEV,CACI,eAAkB,YAClB,SAAY,UACZ,GAAM,oBAEV,CACI,eAAkB,eAClB,SAAY,UACZ,GAAM,sBAEV,CACI,eAAkB,YAClB,SAAY,UACZ,GAAM,oBAEV,CACI,eAAkB,kBAClB,SAAY,SACZ,GAAM,0BAGd,gBAAmB,CACf,aAAgB,IAChB,4BAA+B,IAC/B,qBAAwB,IAGhC,kBAAqB,CACjB,gBAAmB,CACf,WAAc,CACV,CACI,GAAM,cAEV,CACI,GAAM,cAEV,CACI,GAAM,YAEV,CACI,GAAM,cAEV,CACI,GAAM,aAKtB,gBAAmB,CACf,gBAAmB,CACf,WAAc,CACV,CACI,GAAM,WAEV,CACI,GAAM,kBAM1B,SAAY,CACR,kBAAqB,CACjB,mBAAsB,CAClB,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASC,iCAAiCzmU,YAEtF,cAAiB,CACb,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASE,4BAA4B1mU,YAEjF,iBAAoB,CAChB,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASG,+BAA+B3mU,YAEpF,iBAAoB,CAChB,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASI,+BAA+B5mU,YAEpF,0BAA6B,CACzB,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASK,oCAAoC7mU,YAEzF,eAAkB,CACd,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASM,kCAAkC9mU,YAEvF,iBAAoB,CAChB,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASO,+BAA+B/mU,YAEpF,kBAAqB,CACjB,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASQ,gCAAgChnU,YAErF,qBAAwB,CACpB,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASS,mCAAmCjnU,YAExF,mBAAsB,CAClB,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASU,iCAAiClnU,YAEtF,kBAAqB,CACjB,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASW,oCAAoCnnU,YAEzF,8BAAiC,CAC7B,aAAgBqjH,EAAUxjH,OAAOqQ,OAAOs2T,SAASY,iCAAiCpnU,cAI9F,MAAS,CAEL,SAAY,IACZ,aAAgB,aAChB,UAAa,UACb,0BAA6B,4BAC7B,aAAgB,cAChB,sBAAyB,wBACzB,gBAAmB,iBACnB,eAAkB,gBAClB,cAAiB,wCACjB,iBAAoB,kBACpB,aAAgB,aAChB,cAAiB,cACjB,eAAkB,gBAClB,kBAAqB,mBACrB,oBAAuB,sBACvB,kBAAqB,mBACrB,yBAA4B,oBAC5B,mBAAsB,oBACtB,aAAgB,aAChB,sBAAyB,iBAGzB,eAAkB,eAClB,kBAAqB,GACrB,kBAAqB,GACrB,YAAe,kBACf,QAAW,QACX,mBAAsB,oBACtB,YAAe,YACf,SAAY,GAGZ,WAAc,GACd,UAAa,GACb,UAAa,GACb,cAAe,GACf,cAAe,GACf,UAAa,GACb,UAAa,GACb,WAAc,GAGd,sBAAyB,CACrB,IAAO,GACP,uBAAyB,EACzB,SAAY,UAEhB,+BAAkC,CAC9B,IAAO,GACP,uBAAyB,EACzB,SAAY,UAEhB,aAAgB,CACZ,IAAO,8BACP,uBAAyB,GAE7B,kBAAqB,CACjB,IAAO,iCACP,uBAAyB,GAE7B,eAAkB,CACd,IAAO,iBACP,uBAAyB,EACzB,SAAY,UAEhB,kBAAqB,CACjB,IAAO,GACP,uBAAyB,EACzB,SAAY,UAEhB,aAAgB,CACZ,IAAO,GACP,uBAAyB,EACzB,SAAY,UAIhB,gBAAmB,GACnB,eAAkB,GAGlB,SAAY,CACR,mBAAsB,WAE1B,SAAY,CACR,mBAAsB,WAE1B,uBAA0B,CACtB,IAAO,8EACP,uBAAyB,EACzB,SAAY,WAGpB,UAAa,CACT,eAAkB,CACd,KAAQ,UACR,GAAM,SAEV,yBAA4B,CACxB,SAAW,GAEf,eAAkB,CACd,KAAQ,UACR,aAAgB,mBAEpB,kBAAmB,CACf,KAAQ,UACR,OAAU,cACV,aAAgB,mBAEpB,aAAgB,CACZ,KAAQ,OACR,OAAU,WACV,aAAgB,gBAEpB,iBAAoB,CAChB,KAAQ,4BACR,OAAU,eACV,aAAgB,oBAEpB,cAAiB,CACb,KAAQ,QACR,OAAU,YACV,aAAgB,iBAEpB,iBAAoB,CAChB,KAAQ,6BACR,OAAU,eACV,aAAgB,oBAEpB,0BAA6B,CACzB,KAAQ,YACR,OAAU,wBACV,aAAgB,wBAEpB,eAAkB,CACd,KAAQ,eACR,OAAU,kBACV,aAAgB,uBAEpB,mBAAsB,CAClB,KAAQ,cACR,OAAU,iBACV,aAAgB,sBAEpB,kBAAqB,CACjB,KAAQ,aACR,OAAU,iBAEd,8BAAiC,CAC7B,KAAQ,oBACR,OAAU,6BAEd,qBAAwB,CACpB,KAAQ,eACR,OAAU,mBACV,aAAgB,wBAEpB,iBAAoB,CAChB,KAAQ,WACR,OAAU,eACV,aAAgB,oBAEpB,kBAAqB,CACjB,KAAQ,YACR,OAAU,gBACV,aAAgB,qBAEpB,mBAAsB,CAClB,KAAQ,cACR,OAAU,iBACV,aAAgB,sBAEpB,YAAe,CACX,KAAQ,MACR,OAAU,UACV,aAAgB,eAEpB,gBAAmB,CACf,KAAQ,WACR,OAAU,cACV,aAAgB,eAEpB,uBAA0B,CACtB,KAAQ,kBACR,OAAU,qBACV,aAAgB,0BAEpB,gBAAmB,CACf,KAAQ,UACR,OAAU,cACV,aAAgB,mBAEpB,gBAAmB,CACf,KAAQ,oBACR,aAAgB,kBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,eACN,SAAY,QACZ,OAAS,GAEb,CACI,GAAM,aACN,SAAY,QACZ,MAAS,WAGjB,OAAS,MAKzB,mBAAsB,CAClB,KAAQ,aACR,OAAU,iBACV,aAAgB,sBAEpB,sBAAyB,CACrB,KAAQ,aACR,OAAU,oBACV,aAAgB,qBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,SACN,SAAY,QACZ,OAAS,IAGjB,OAAS,MAKzB,sBAAyB,CACrB,KAAQ,aACR,OAAU,oBACV,aAAgB,qBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,SACN,SAAY,QACZ,OAAS,IAGjB,OAAS,MAKzB,gBAAmB,CACf,KAAQ,UACR,aAAgB,eAEpB,sBAAyB,CACrB,KAAQ,iBACR,OAAU,oBACV,aAAgB,qBAEpB,6BAAgC,CAC5B,KAAQ,mCACR,OAAU,2BACV,aAAgB,qBAEpB,yBAA4B,CACxB,KAAQ,SACR,OAAU,aACV,aAAgB,sBAChB,SAAW,GAEf,wBAA2B,CACvB,KAAQ,WACR,OAAU,YACV,aAAgB,oBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,aACN,SAAY,QACZ,MAAS,WAGjB,OAAS,MAKzB,wBAA2B,CACvB,KAAQ,WACR,OAAU,YACV,aAAgB,wBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,aACN,SAAY,QACZ,MAAS,WAGjB,OAAS,MAKzB,aAAgB,CACZ,KAAQ,OACR,OAAU,WACV,aAAgB,gBAEpB,aAAgB,CACZ,KAAQ,YACR,OAAU,WACV,aAAgB,mBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,kBACN,SAAY,QACZ,OAAS,IAGjB,OAAS,MAKzB,mBAAsB,CAClB,KAAQ,yBACR,aAAgB,sBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,mBACN,SAAY,QACZ,OAAS,GAEb,CACI,GAAM,kBACN,SAAY,QACZ,MAAS,WAEb,CACI,GAAM,aACN,SAAY,QACZ,MAAS,SAEb,CACI,GAAM,sBACN,SAAY,QACZ,MAAS,UAGjB,OAAS,MAKzB,oBAAuB,CACnB,KAAQ,eACR,OAAU,kBACV,aAAgB,uBAEpB,mBAAsB,CAClB,KAAQ,eACR,OAAU,iBACV,aAAgB,iBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,aACN,SAAY,QACZ,MAAS,UAEb,CACI,GAAM,WACN,SAAY,QACZ,OAAS,IAGjB,OAAS,MAKzB,2BAA8B,CAC1B,KAAQ,sBACR,aAAgB,yBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,KACb,MAAS,CACL,CACI,GAAM,cACN,SAAY,IACZ,OAAS,IAGjB,OAAS,MAKzB,+BAAkC,CAC9B,KAAQ,mBACR,aAAgB,sBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,KACb,MAAS,CACL,CACI,GAAM,cACN,SAAY,IACZ,OAAS,IAGjB,OAAS,MAKzB,uBAA0B,CACtB,KAAQ,kBACR,aAAgB,qBAChB,OAAU,qBACV,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,KACb,MAAS,CACL,CACI,GAAM,cACN,SAAY,IACZ,OAAS,IAGjB,OAAS,MAKzB,mBAAsB,CAClB,KAAQ,cACR,aAAgB,iBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,KACb,MAAS,CACL,CACI,GAAM,cACN,SAAY,IACZ,OAAS,GAEb,CACI,GAAM,aACN,SAAY,QACZ,MAAS,WAGjB,OAAS,MAKzB,iBAAoB,CAChB,KAAQ,GACR,oBAAsB,EACtB,OAAU,eACV,mBAAsB,cACtB,aAAgBqjH,EAAUxjH,OAAOs6D,qBAAqBktQ,kBAAkBrnU,WACxE,oBAAuB,WACvB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,cACN,SAAY,QACZ,OAAS,IAGjB,OAAS,MAKzB,sBAAyB,CACrB,KAAQ,GACR,oBAAsB,EACtB,OAAU,oBACV,mBAAsB,cACtB,aAAgBqjH,EAAUxjH,OAAOs6D,qBAAqBmtQ,uBAAuBtnU,WAC7E,oBAAuB,oBACvB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,cACN,SAAY,QACZ,OAAS,IAGjB,OAAS,MAKzB,sBAAyB,CACrB,KAAQ,YACR,mBAAsB,aACtB,aAAgB,oBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,aACN,SAAY,QACZ,MAAS,UAEb,CACI,GAAM,eACN,SAAY,QACZ,MAAS,KAEb,CACI,GAAM,cACN,SAAY,QACZ,OAAS,IAGjB,OAAS,MAKzB,0BAA6B,CACzB,KAAQ,sBACR,aAAgB,YAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,MACb,MAAS,CACL,CACI,GAAM,cACN,SAAY,QACZ,OAAS,IAGjB,OAAS,MAKzB,mBAAsB,CAClB,KAAQ,cACR,aAAgB,iBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,KACb,MAAS,CACL,CACI,GAAM,SACN,SAAY,IACZ,OAAS,GAEb,CACI,GAAM,cACN,SAAY,IACZ,OAAS,IAGjB,OAAS,MAKzB,0BAA6B,CACzB,KAAQ,qBACR,aAAgB,wBAChB,QAAW,CACP,cAAgB,EAChB,WAAc,CACV,CACI,UAAa,KACb,MAAS,CACL,CACI,GAAM,cACN,SAAY,IACZ,OAAS,IAGjB,OAAS,MAKzB,gBAAmB,CACf,KAAQ,qBACR,aAAgB,sBAEpB,kCAAqC,CACjC,KAAQ,wCACR,aAAgB,aAEpB,oBAAuB,CACnB,KAAQ,kBACR,aAAgB,aAEpB,mBAAsB,CAClB,KAAQ,yBAEZ,oCAAuC,CACnC,KAAQ,GACR,SAAW,GAEf,+BAAkC,CAC9B,KAAQ,YACR,SAAW,GAEf,eAAkB,CACd,KAAQ,UAEZ,iBAAoB,CAChB,KAAQ,YACR,aAAgB,eAChB,OAAU,eACV,SAAW,GAEf,0BAA6B,CACzB,KAAQ,UACR,aAAgB,sBAChB,OAAU,wBACV,SAAW,IAInB,oBAAuB,CACnB,oBAAuB8/E,EAAAA,EAAwB6yH,QAC/C,eAAkB,CACd,eACA,qBACA,4BACA,gBACA,iBACA,oBAGR,OAAU,CACN,cAAiB,GACjB,gBAAmB,CACf,SAAW,IAGtB,C,6DCljCL,SACE,KAAQ,MACR,KAAQ,KACR,KAAQ,CACN,OAAU,8DACV,6BAAgC,oBAChC,4BAA+B,YAC/B,eAAkB,iBAClB,IAAO,MACP,iBAAoB,UACpB,WAAc,kBACd,MAAS,SACT,SAAY,WACZ,QAAW,UACX,OAAU,sBACV,QAAW,UACX,KAAQ,OACR,UAAW,UACX,YAAa,QACb,aAAc,SACd,YAAa,QACb,YAAa,QACb,QAAW,UACX,kBAAqB,UACrB,WAAc,aACd,QAAW,kBACX,mBAAsB,WACtB,OAAU,UACV,iBAAoB,eACpB,mBAAsB,iBACtB,iBAAoB,eACpB,eAAkB,aAClB,iBAAoB,QACpB,UAAa,OACb,SAAY,MACZ,MAAS,QACT,MAAS,QACT,eAAkB,mBAClB,iBAAoB,qBACpB,cAAiB,gBACjB,aAAgB,eAChB,YAAe,cACf,sBAAuB,sBACvB,WAAc,aACd,WAAY,QACZ,SAAY,WACZ,YAAe,cACf,uBAA0B,qBAC1B,QAAW,MACX,iBAAoB,uBACpB,gBAAmB,kBACnB,QAAW,UACX,IAAO,MACP,KAAQ,OACR,cAAiB,uBACjB,mBAAsB,aACtB,QAAW,UACX,YAAe,wBACf,eAAkB,uBAClB,aAAgB,iBAChB,IAAO,MACP,QAAW,UACX,uBAA0B,wBAC1B,UAAa,gBACb,aAAgB,eAChB,aAAc,aACd,gBAAiB,YACjB,qCAAwC,kBACxC,oCAAuC,qUACvC,uBAA0B,eAC1B,6BAAgC,cAChC,sBAAyB,yWACzB,wBAA2B,eAC3B,uBAA0B,sWAC1B,0BAA6B,kBAC7B,yBAA4B,yXAC5B,2BAA8B,YAC9B,0BAA6B,IAC7B,2BAA8B,mBAC9B,0BAA6B,gUAC7B,6BAAgC,qBAChC,4BAA+B,uUAC/B,+BAAkC,uBAClC,8BAAiC,oWACjC,0BAA6B,WAC7B,yBAA4B,ybAC5B,2BAA8B,YAC9B,eAAkB,iBAClB,gCAAmC,iBACnC,+BAAkC,4QAClC,qBAAwB,uBACxB,aAAgB,eAChB,MAAS,QACT,WAAc,aACd,UAAa,YACb,OAAU,SACV,MAAS,QACT,SAAY,WACZ,aAAgB,eAChB,UAAa,YACb,kBAAqB,oBACrB,SAAY,WACZ,MAAS,QACT,KAAQ,OACR,MAAS,QACT,WAAc,aACd,UAAa,YACb,KAAQ,OACR,UAAa,YACb,KAAQ,OACR,KAAQ,OACR,QAAW,UACX,YAAe,cACf,UAAa,aACb,UAAa,cACb,OAAU,UACV,OAAU,SACV,KAAQ,OACR,QAAW,UACX,4BAA+B,8BAC/B,eAAkB,iBAClB,UAAa,iBACb,iBAAoB,mBACpB,mBAAsB,uBACtB,iBAAoB,mBACpB,SAAY,WACZ,gBAAmB,kBACnB,mBAAsB,gCACtB,YAAe,UACf,YAAe,UACf,SAAY,WACZ,WAAc,aACd,aAAgB,eAChB,YAAe,cACf,MAAS,QACT,UAAa,YACb,MAAS,QACT,aAAgB,eAChB,WAAc,aACd,qBAAwB,qBACxB,cAAiB,gBACjB,gBAAmB,kBACnB,MAAS,QACT,YAAe,cACf,oCAAuC,sCACvC,2BAA8B,sBAC9B,UAAa,YACb,yBAA4B,yBAC5B,aAAgB,eAChB,eAAkB,iBAClB,eAAkB,iBAClB,qBAAwB,uBACxB,UAAa,iBACb,QAAW,aACX,YAAe,cACf,QAAW,UACX,eAAkB,iBAClB,gBAAmB,kBACnB,uBAA0B,aAC1B,gBAAmB,kBACnB,uBAA0B,kBAC1B,cAAiB,gBACjB,aAAgB,gBAChB,kBAAqB,cACrB,kBAAqB,6BACrB,iBAAoB,8BACpB,qBAAwB,qBACxB,gBAAmB,kBACnB,qBAAwB,uBACxB,KAAQ,OACR,gBAAmB,kBACnB,aAAgB,eAChB,QAAW,UACX,YAAe,cACf,aAAgB,OAChB,cAAiB,QACjB,aAAgB,eAChB,cAAiB,2BACjB,UAAW,UACX,WAAY,QACZ,iBAAoB,mBACpB,iBAAoB,mBACpB,kBAAqB,oBACrB,YAAe,cACf,2BAA8B,8CAC9B,yBAA4B,iCAC5B,qBAAwB,4BACxB,iBAAoB,mBACpB,kBAAqB,oBACrB,cAAiB,gBACjB,UAAa,gBACb,cAAiB,iCACjB,oBAAuB,sBACvB,oBAAuB,sBACvB,uBAA0B,yBAC1B,qBAAwB,0BACxB,UAAa,YACb,cAAiB,gBACjB,oBAAuB,sBACvB,cAAe,cACf,YAAe,cACf,4BAA+B,8BAC/B,gBAAmB,kBACnB,eAAkB,iBAClB,iBAAoB,mBACpB,WAAY,WACZ,uBAAwB,uBACxB,cAAiB,gBACjB,cAAiB,gBACjB,gBAAiB,gBACjB,SAAY,WACZ,eAAkB,iBAClB,gBAAmB,kBACnB,eAAkB,iBAClB,WAAc,aACd,aAAgB,eAChB,gBAAmB,kBACnB,UAAa,YACb,oBAAuB,gBACvB,KAAQ,OACR,wBAAyB,eACzB,kBAAqB,oBACrB,kBAAqB,oBACrB,iBAAoB,mBACpB,eAAkB,kBAClB,wBAA2B,4BAC3B,yBAA4B,2BAC5B,qBAAwB,uBACxB,cAAiB,oBACjB,wBAA2B,oBAC3B,sBAAyB,wBACzB,mCAAsC,oBACtC,kCAAqC,qdACrC,eAAkB,iBAClB,eAAkB,iBAClB,sBAAyB,wBACzB,6BAAgC,6BAChC,wBAA2B,0BAC3B,mCAAsC,iBACtC,0BAA6B,aAC7B,8BAAiC,OACjC,WAAc,aACd,cAAiB,YACjB,cAAiB,UACjB,4BAA+B,iCAC/B,4BAA+B,mCAC/B,4BAA+B,gCAC/B,4BAA+B,8BAC/B,4BAA+B,iCAC/B,4BAA+B,4BAC/B,mBAAsB,sBACtB,mBAAsB,qBACtB,iBAAoB,mBACpB,eAAkB,iBAClB,UAAa,YACb,gBAAmB,kDACnB,yBAA4B,gBAC5B,2BAA8B,0CAC9B,MAAS,QACT,oBAAuB,sBACvB,iBAAoB,mBACpB,UAAa,YACb,kBAAqB,oBACrB,iBAAoB,mBACpB,gBAAmB,kBACnB,sBAAyB,qCACzB,4BAA+B,cAC/B,kCAAqC,QACrC,mCAAsC,SACtC,oCAAuC,UACvC,oCAAuC,UACvC,sCAAyC,YACzC,qCAAwC,WACxC,iCAAoC,OACpC,iBAAoB,eACpB,qBAAwB,iBACxB,uBAA0B,0BAC1B,4BAA+B,kCAC/B,oBAAuB,oBACvB,kCAAqC,+DACrC,kDAAqD,aACrD,sDAAyD,yDACzD,wCAA2C,uIAC3C,6CAAgD,wGAChD,oDAAuD,yIACvD,oEAAuE,mKACvE,wCAA2C,uGAC3C,6CAAgD,sBAChD,uDAA0D,aAC1D,gCAAmC,iDACnC,mCAAsC,uFACtC,gCAAmC,4BACnC,gCAAmC,WACnC,wCAA2C,yCAC3C,2CAA8C,0DAC9C,0BAA2B,mBAC3B,4BAA6B,cAC7B,6BAA8B,cAC9B,8BAA+B,yBAC/B,0BAA2B,WAC3B,6BAA8B,cAC9B,mBAAsB,WACtB,cAAiB,gBACjB,cAAiB,mCACjB,aAAgB,eAChB,sBAAyB,wBACzB,yBAA4B,oBAC5B,yBAA4B,8DAC5B,8BAAiC,aACjC,MAAS,QACT,+BAAkC,6BAClC,0BAA6B,gBAC7B,SAAY,WACZ,OAAU,SACV,oBAAuB,WACvB,4BAA+B,mBAC/B,kBAAqB,SACrB,uBAA0B,cAC1B,0BAA6B,+BAC7B,mBAAsB,eACtB,sBAAyB,aACzB,YAAe,6BACf,8BAAiC,qBACjC,6BAAgC,sCAChC,4BAA+B,WAC/B,eAAkB,iBAClB,eAAkB,iBAClB,sBAAyB,wBACzB,qBAAwB,uBACxB,kBAAqB,uBACrB,mBAAsB,oDACtB,yBAA4B,qCAC5B,oBAAuB,UACvB,uBAA0B,YAC1B,uBAA0B,mBAC1B,SAAY,YACZ,oBAAuB,yCACvB,iBAAoB,6BACpB,qBAAwB,mBACxB,wBAA2B,gBAC3B,0BAA6B,6DAC7B,yBAA4B,iCAC5B,mBAAsB,MACtB,wBAA2B,WAC3B,kCAAqC,YACrC,wBAA2B,WAC3B,4BAA+B,eAC/B,6CAAgD,mCAChD,iDAAoD,uBACpD,6BAAgC,OAChC,kCAAqC,YACrC,yCAA4C,kBAC5C,yCAA4C,kBAC5C,oCAAuC,uBACvC,4CAA+C,eAC/C,sCAAyC,mCACzC,6BAAgC,2BAChC,sBAAyB,sCACzB,gBAAmB,0BACnB,gCAAmC,aACnC,oCAAuC,aACvC,6BAAgC,kBAChC,yBAA4B,cAC5B,8BAAiC,0BACjC,4BAA+B,aAC/B,4BAA+B,OAC/B,2BAA8B,WAC9B,2BAA8B,aAC9B,6BAAgC,mBAChC,6BAAgC,gBAChC,iCAAoC,aACpC,4BAA+B,kBAC/B,4BAA+B,oBAC/B,8BAAiC,0BACjC,8BAAiC,uBACjC,2BAA8B,sEAC9B,2BAA8B,+DAC9B,6BAAgC,kFAChC,6BAAgC,4EAChC,gCAAmC,6BACnC,iCAAoC,0CACpC,0BAA6B,0BAC7B,6BAAgC,UAChC,yBAA4B,+BAC5B,0CAA6C,aAC7C,6BAAgC,+CAChC,sCAAyC,2DACzC,mCAAsC,gDACtC,8BAAiC,gCACjC,mCAAsC,OACtC,oBAAuB,YACvB,oBAAuB,YACvB,yBAA4B,UAC5B,2BAA8B,YAC9B,kCAAqC,iCACrC,2BAA8B,8BAC9B,kCAAqC,aACrC,6BAAgC,oBAChC,+BAAkC,+HAClC,mCAAsC,UACtC,oCAAuC,gBACvC,0BAA6B,oDAC7B,OAAU,SACV,IAAO,MACP,GAAM,KACN,kCAAqC,YACrC,oCAAuC,6HACvC,kBAAqB,oBACrB,gBAAmB,kBACnB,gBAAmB,mBACnB,2DAA8D,kBAC9D,8DAAiE,qGACjE,2CAA8C,gBAC9C,+CAAkD,kCAClD,YAAe,cACf,4BAA+B,iBAC/B,+BAAkC,8BAClC,kCAAqC,2EACrC,uBAA0B,KAC1B,mBAAsB,wDACtB,YAAe,uBACf,wBAA2B,cAC3B,uBAA0B,iBAC1B,2BAA8B,iBAC9B,yBAA4B,uBAC5B,kCAAqC,iBACrC,qCAAwC,wBACxC,qCAAwC,8DACxC,qCAAwC,gEACxC,qCAAwC,oBACxC,mCAAsC,yCACtC,mCAAsC,sCACtC,mCAAsC,gCACtC,mCAAsC,iCACtC,2BAA8B,WAC9B,0BAA6B,kCAC7B,6BAAgC,8FAChC,0BAA6B,wBAC7B,8BAAiC,uBACjC,iCAAoC,6IACpC,uCAA0C,gIAC1C,yBAA4B,mBAC5B,wBAA2B,6DAC3B,mCAAsC,cACtC,SAAY,SACZ,QAAW,YACX,WAAc,WACd,UAAa,cACb,QAAW,QACX,OAAU,WACV,SAAY,SACZ,UAAa,UACb,OAAU,gBACV,wBAA2B,6BAC3B,6BAAgC,qBAChC,yBAA4B,0EAC5B,8BAAiC,iDACjC,uBAA0B,gBAC1B,0BAA6B,0BAC7B,2CAA8C,6BAC9C,2CAA8C,6BAC9C,uCAA0C,sPAC1C,+CAAkD,iBAClD,mDAAsD,oBACtD,kCAAqC,kCACrC,4CAA+C,qBAC/C,gDAAmD,wBACnD,2DAA8D,mKAC9D,+DAAkE,gBAClE,oDAAuD,uBACvD,mDAAsD,8DACtD,uDAA0D,2BAC1D,4CAA+C,qBAC/C,0CAA6C,qBAC7C,0CAA6C,qBAC7C,yCAA4C,sBAC5C,yCAA4C,sFAC5C,yCAA4C,sFAC5C,wCAA2C,gGAC3C,+BAAkC,oBAClC,uCAA0C,sBAC1C,iCAAoC,cACpC,gDAAmD,yCACnD,gDAAmD,yCACnD,qCAAwC,0BACxC,0CAA6C,gHAC7C,oCAAuC,6BACvC,UAAa,aACb,eAAkB,iBAClB,qBAAwB,mBACxB,WAAc,qBACd,WAAc,qBACd,kCAAqC,oBACrC,oCAAuC,6GACvC,GAAM,KACN,wBAA2B,SAC3B,uBAA0B,yFAC1B,yBAA4B,uBAC5B,2BAA8B,2HAC9B,aAAgB,eAChB,sCAAyC,kDACzC,+BAAkC,YAClC,8BAAiC,0HACjC,UAAa,YACb,wBAA2B,eAC3B,oBAAuB,gBACvB,iBAAoB,+BACpB,uBAA0B,mBAC1B,kBAAqB,QACrB,8BAAiC,0CACjC,uBAA0B,mCAC1B,4BAA+B,6DAC/B,yBAA4B,+CAC5B,wBAA2B,gBAC3B,uBAA0B,eAC1B,iBAAoB,YACpB,6BAAgC,YAChC,6BAAgC,YAChC,wBAA2B,YAC3B,0BAA6B,yGAC7B,4BAA+B,kBAC/B,8BAAiC,gIACjC,qCAAwC,UACxC,qCAAwC,UACxC,2BAA8B,YAC9B,8BAAiC,2BACjC,qBAAwB,wCACxB,wBAA2B,uBAC3B,yBAA4B,iBAC5B,iCAAoC,sEACpC,mBAAsB,eACtB,oBAAuB,sHACvB,oBAAuB,oFACvB,qBAAwB,cACxB,oBAAuB,uHACvB,aAAgB,KAChB,cAAiB,gBACjB,eAAkB,iBAClB,cAAiB,gBACjB,WAAc,aACd,gBAAmB,kBACnB,kBAAqB,oBACrB,SAAY,WACZ,UAAa,YACb,uBAAwB,uBACxB,OAAU,SACV,MAAS,QACT,gBAAiB,gBACjB,sBAAuB,sBACvB,oBAAqB,oBACrB,SAAY,WACZ,uBAAwB,uBACxB,gBAAiB,gBACjB,KAAQ,OACR,kBAAmB,kBACnB,kBAAmB,kBACnB,MAAS,QACT,oBAAqB,oBACrB,mBAAoB,mBACpB,SAAY,WACZ,mBAAoB,mBACpB,SAAY,WACZ,aAAgB,eAChB,OAAU,SACV,cAAiB,WACjB,gBAAmB,aACnB,UAAa,YACb,WAAc,aACd,YAAe,cACf,WAAc,aACd,UAAa,YACb,kBAAqB,oBACrB,WAAc,aACd,kCAAqC,wDACrC,uCAA0C,kCAC1C,+BAAkC,wDAClC,oCAAuC,4CACvC,+BAAkC,oCAClC,oCAAuC,yDACvC,KAAQ,OACR,KAAQ,OACR,YAAe,cACf,iCAAoC,eACpC,iCAAoC,gDACpC,wBAA2B,wCAC3B,uCAA0C,4EAC1C,mBAAsB,uBACtB,uBAA0B,YAC1B,wBAA2B,mBAC3B,gBAAmB,QACnB,iCAAoC,kBACpC,mBAAsB,kBACtB,sCAAyC,WACzC,sBAAyB,OACzB,4BAA+B,wBAC/B,uBAA0B,aAC1B,eAAkB,iBAClB,sBAAyB,wBACzB,oBAAuB,sBACvB,cAAiB,gBACjB,mBAAsB,qBACtB,WAAc,aACd,+BAAkC,iCAClC,qBAAwB,uBACxB,kBAAqB,oBACrB,iBAAoB,mBACpB,sBAAyB,wBACzB,qBAAwB,uBACxB,aAAgB,eAChB,kBAAmB,kBACnB,YAAe,cACf,iBAAoB,mBACpB,eAAkB,kBAClB,sBAAyB,wBACzB,WAAc,aACd,WAAc,aACd,oBAAuB,+BACvB,eAAkB,2EAClB,eAAkB,qWAClB,eAAkB,4OAClB,eAAkB,wXAClB,eAAkB,qWAClB,eAAkB,2OAClB,eAAkB,4LAClB,eAAkB,8HAClB,eAAkB,yOAClB,eAAkB,uHAClB,eAAkB,yOAClB,eAAkB,yOAClB,eAAkB,wKAClB,eAAkB,yOAClB,eAAkB,8IAClB,eAAkB,2UAClB,eAAkB,8DAClB,eAAkB,iIAClB,wBAA2B,kHAC3B,qBAAwB,kDACxB,iBAAoB,yEACpB,qBAAwB,uBACxB,mCAAsC,aACtC,qBAAwB,2BACxB,cAAiB,4vCACjB,YAAe,cACf,OAAU,SACV,OAAU,SACV,QAAW,UACX,MAAS,QACT,yBAA4B,2BAC5B,iBAAoB,mBACpB,MAAS,QACT,UAAa,YACb,iBAAoB,mBACpB,YAAe,cACf,6BAAgC,+BAChC,KAAQ,OACR,qBAAwB,GACxB,iBAAoB,cACpB,oBAAuB,eACvB,WAAc,aACd,eAAkB,iBAClB,eAAkB,iBAClB,mBAAsB,sBACtB,mBAAsB,gCACtB,kBAAqB,sBACrB,gBAAmB,oBACnB,eAAkB,aAClB,UAAa,sBACb,oBAAuB,sBACvB,YAAe,KACf,sBAAyB,+BACzB,KAAQ,OACR,sBAAyB,YACzB,qBAAwB,sCACxB,0BAA6B,eAC7B,0BAA6B,SAC7B,4BAA+B,UAC/B,UAAa,YACb,QAAW,MACX,cAAiB,gBACjB,qBAAwB,kEACxB,kCAAqC,yBACrC,4BAA+B,iBAC/B,kCAAqC,QACrC,uCAA0C,oBAC1C,6BAAgC,wCAChC,QAAW,UACX,4CAA+C,4BAC/C,iDAAoD,aACpD,kCAAqC,8BACrC,oCAAuC,iBACvC,kCAAqC,wDACrC,yCAA4C,+BAC5C,4CAA+C,2BAC/C,0CAA6C,qBAC7C,2BAA8B,WAC9B,qCAAwC,WACxC,WAAc,aACd,gCAAmC,qBACnC,sBAAyB,UACzB,qDAAwD,6UACxD,wDAA2D,iPAC3D,qDAAwD,0SACxD,wDAA2D,8MAC3D,+DAAkE,2TAClE,kEAAqE,+NACrE,sCAAyC,UACzC,sCAAyC,UACzC,6BAAgC,8BAChC,4BAA+B,4FAC/B,iCAAoC,eACpC,0BAA6B,qBAC7B,yBAA4B,8EAC5B,2BAA8B,kGAC9B,mCAAsC,OACtC,6BAAgC,mFAChC,sCAAyC,cACzC,kBAAqB,yBACrB,2BAA8B,uZAC9B,gBAAmB,SACnB,2BAA8B,gGAC9B,kBAAqB,kBACrB,gBAAkB,kpDAWlB,wBAA2B,sBAC3B,wBAA2B,4BAC3B,mBAAsB,MACtB,6BAAgC,cAChC,4BAA+B,sKAC/B,YAAe,cACf,iBAAoB,eACpB,yBAA4B,wB,+DC5tBzB,MAAMpiH,EACT,kBAAOC,CAAYk4B,EAAsB0D,GACrC,IAAIA,EACA,OAAO,KAEX1D,EAAeA,EAAa7nG,cAC5B,IAAI,IAAIioG,KAAYxrG,OAAOspC,KAAKwlE,GAC5B,GAAGtD,EAASjoG,gBAAkB6nG,EAC1B,OAAO0D,EAActD,GAI7B,OAAO,IACX,CAEA,iCAAO2/G,CAA2B//G,EAAsB0D,GACpD,MAAMzhH,EAAQ4lF,EAAWC,YAAYk4B,EAAc0D,GACnD,OAAGxmH,EAAAA,MAAMqoH,SAAStjH,GACP2S,OAAOspC,KAAKj8C,GAAOmkD,QAAO,CAACsvB,EAAaziE,KAC3CyiE,EAAYziE,EAAIkF,eAAiBlW,EAAMgR,GAChCyiE,IACR,CAAC,GAGDzzE,CACX,CAEA,yBAAOorN,CAAmBrtG,EAAsB0D,GAC5C,MAAMzhH,EAAQi2B,SAAS2vD,EAAWC,YAAYk4B,EAAc0D,IAC5D,OAAGxmH,EAAAA,MAAMC,SAAS8E,GACPA,EAGJ,IACX,CAEA,wBAAOsrN,CAAkBvtG,EAAsB0D,GAA8C,IAAD97B,EACxF,MAAM3lF,EAA2D,QAAtD2lF,EAAGC,EAAWC,YAAYk4B,EAAc0D,UAAc,IAAA97B,OAAA,EAAnDA,EAAqDtwF,WACnE,OAAG4F,EAAAA,MAAM+qE,SAAShmE,GACPA,EAEJ,IACX,E,+DC9CG,SAASoqB,EAAMrI,GAClB,OAAO,IAAImP,SAAeC,KACtB4tK,EAAAA,EAAAA,GAAgB,eAAe,IAAM5tK,KAAWpP,EAAS,GAEjE,C,qFCMO,MAAM/H,EAAiB/Q,WAAAA,GAAA,KAClB6rE,WAAkC,GAAG,KAKrC8nP,wBAAoD,GAAG,KAevDxjC,wBAAkD,GAAG,KAKrDyjC,WAAuB,GAAG,KAe1BC,UAAsB,GAAG,KAezBC,wBAAkD,EAAG,CAtD7Dn4J,WAAAA,CAAwD7vF,EAAuCC,EAAsGC,GACjM/+E,KAAK4+E,WAAWjkE,MAAKqkE,EAAAA,EAAAA,IAAaH,EAAYC,EAAQC,GAC1D,CAGU+nP,wBAAAA,CAAyBp7S,GAG/B,OAFA1rB,KAAK0mU,wBAAwB/rT,KAAK+Q,GAE3B,CACH2yK,YAAaA,KACT,MAAMh7J,EAAQrjC,KAAK0mU,wBAAwB/7O,WAAU+zB,GAAKA,IAAMhzF,IAC7D2X,GAAS,IACRrjC,KAAK0mU,wBAAwBrjS,GAAOg7J,cACpCr+L,KAAK0mU,wBAAwBrmS,OAAOgD,EAAO,GAC/C,EAGZ,CAGU8iM,uBAAAA,CAAwBz6M,GAC9B1rB,KAAKkjS,wBAAwBvoR,KAAK+Q,EACtC,CAGUq7S,WAAAA,CAAY/iT,GAAsG,IAAjF6H,EAA2B5rB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAAG8lB,EAAuB9lB,UAAAC,OAAA,EAAAD,UAAA,QAAAE,EAC/F,MAAMmN,EAAMyY,GAAO+F,EAAAA,EAAAA,GAAiB/F,EAAM/B,EAAS6H,GAAY/b,OAAOwiB,YAAYtO,EAASjf,EAAAA,MAAMC,SAAS6mB,GAAYA,EAAWA,EAAS60F,mBAE1I,OADA1gH,KAAK2mU,WAAWhsT,KAAKrN,GACd,CACH05T,MAAOA,KACHj7S,cAAcze,GACd,MAAM+1B,EAAQrjC,KAAK2mU,WAAWh8O,WAAUrlF,GAAKA,IAAMgI,IAChD+1B,GAAS,GACRrjC,KAAK2mU,WAAWtmS,OAAOgD,EAAO,EAClC,EAGZ,CAGUtf,UAAAA,CAAWC,GAAsG,IAAjF6H,EAA2B5rB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAAG8lB,EAAuB9lB,UAAAC,OAAA,EAAAD,UAAA,QAAAE,EAC9F,MAAMmN,EAAMyY,GAAO8iL,EAAAA,EAAAA,GAAgB9iL,EAAM/B,EAAS6H,GAAY/b,OAAOq6B,WAAWnmB,EAASjf,EAAAA,MAAMC,SAAS6mB,GAAYA,EAAWA,EAAS60F,mBAExI,OADA1gH,KAAK4mU,UAAUjsT,KAAKrN,GACb,CACH05T,MAAOA,KACH/8R,aAAa38B,GACb,MAAM+1B,EAAQrjC,KAAK4mU,UAAUj8O,WAAU8M,GAAKA,IAAMnqF,IAC/C+1B,GAAS,GACRrjC,KAAK4mU,UAAUvmS,OAAOgD,EAAO,EACjC,EAGZ,CAGU4jS,uBAAAA,CAAwBv7S,GAE9B,OADA1rB,KAAK6mU,wBAAwBlsT,KAAK+Q,GAC3BA,CACX,CAEArN,OAAAA,GACIre,KAAK4+E,WAAWhzB,SAAQhjB,GAAKA,MAC7B5oC,KAAK4+E,WAAa,GAClB5+E,KAAK0mU,wBAAwB96Q,SAAQ8yD,GAAKA,EAAE2/E,gBAC5Cr+L,KAAK0mU,wBAA0B,GAC/B1mU,KAAK2mU,WAAW/6Q,SAAQtmD,GAAKymB,cAAczmB,KAC3CtF,KAAK2mU,WAAa,GAClB3mU,KAAK4mU,UAAUh7Q,SAAQ6rC,GAAKxtD,aAAawtD,KACzCz3F,KAAK4mU,UAAY,GACjB5mU,KAAKkjS,wBAAwBt3O,SAAQ8yD,GAAKA,EAAE9yF,QAC5C5rB,KAAKkjS,wBAA0B,GAC/BljS,KAAK6mU,wBAAwBj7Q,SAAQ8yD,GAAKA,EAAErgG,YAC5Cre,KAAK6mU,wBAA0B,EAEnC,E,kBCzFJ,IAAIt2T,EAAM,CACT,2BAA4B,MAC5B,uCAAwC,MACxC,mBAAoB,MACpB,yBAA0B,MAC1B,6BAA8B,KAC9B,sBAAuB,MACvB,iCAAkC,KAClC,0BAA2B,MAC3B,0BAA2B,MAC3B,0CAA2C,KAC3C,0BAA2B,MAC3B,gCAAiC,MACjC,sBAAuB,MACvB,qDAAsD,MACtD,iCAAkC,MAClC,sBAAuB,MACvB,uCAAwC,MACxC,kCAAmC,MACnC,uBAAwB,MACxB,kCAAmC,OAIpC,SAAS22T,EAAe5iH,GACvB,IAAI/0L,EAAK43S,EAAsB7iH,GAC/B,OAAO8iH,EAAoB73S,EAC5B,CACA,SAAS43S,EAAsB7iH,GAC9B,IAAI8iH,EAAoB5vO,EAAEjnF,EAAK+zM,GAAM,CACpC,IAAI9/M,EAAI,IAAIyrE,MAAM,uBAAyBq0I,EAAM,KAEjD,MADA9/M,EAAEk2C,KAAO,mBACHl2C,CACP,CACA,OAAO+L,EAAI+zM,EACZ,CACA4iH,EAAenhR,KAAO,WACrB,OAAOtpC,OAAOspC,KAAKx1C,EACpB,EACA22T,EAAejsS,QAAUksS,EACzB94M,EAAOg5M,QAAUH,EACjBA,EAAe33S,GAAK,K,kBCzCpB,IAAIhf,EAAM,CACT,+BAAgC,CAC/B,MACA,IACA,IACA,KACA,KACA,IACA,KACA,KACA,MAED,mCAAoC,CACnC,MACA,IACA,KACA,KACA,KACA,KAED,mCAAoC,CACnC,MACA,IACA,KACA,KACA,KACA,MAED,+BAAgC,CAC/B,MACA,IACA,KACA,KACA,KACA,MAED,6BAA8B,CAC7B,MACA,IACA,KACA,KACA,KACA,MAED,iCAAkC,CACjC,MACA,IACA,KACA,IACA,KACA,KACA,KACA,KACA,KAED,iCAAkC,CACjC,MACA,IACA,KACA,IACA,KACA,KACA,KACA,KACA,MAED,6BAA8B,CAC7B,MACA,IACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,MAED,4BAA6B,CAC5B,MACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,MAED,wBAAyB,CACxB,KACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,MAED,8BAA+B,CAC9B,MACA,IACA,KACA,KACA,MAED,0BAA2B,CAC1B,MACA,IACA,KACA,KACA,KACA,KACA,OAGF,SAAS+2T,EAAoBhjH,GAC5B,IAAI8iH,EAAoB5vO,EAAEjnF,EAAK+zM,GAC9B,OAAOtpL,QAAQC,UAAU1Z,MAAK,KAC7B,IAAI/c,EAAI,IAAIyrE,MAAM,uBAAyBq0I,EAAM,KAEjD,MADA9/M,EAAEk2C,KAAO,mBACHl2C,CAAC,IAIT,IAAImsP,EAAMpgP,EAAI+zM,GAAM/0L,EAAKohO,EAAI,GAC7B,OAAO31N,QAAQid,IAAI04M,EAAIhwO,MAAM,GAAGpQ,IAAI62T,EAAoB5iU,IAAI+c,MAAK,IACzD6lT,EAAoB73S,IAE7B,CACA+3S,EAAoBvhR,KAAO,IAAOtpC,OAAOspC,KAAKx1C,GAC9C+2T,EAAoB/3S,GAAK,MACzB8+F,EAAOg5M,QAAUC,C,kBCvIjB,IAAI/2T,EAAM,CACT,6BAA8B,CAC7B,MACA,MAED,gCAAiC,CAChC,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,+BAAgC,CAC/B,MACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,yCAA0C,CACzC,MACA,MAED,4CAA6C,CAC5C,MACA,MAED,mCAAoC,CACnC,MACA,MAED,sCAAuC,CACtC,MACA,MAED,kCAAmC,CAClC,IACA,KAED,qCAAsC,CACrC,IACA,KAED,kCAAmC,CAClC,KACA,MAED,qCAAsC,CACrC,KACA,MAED,yCAA0C,CACzC,MACA,MAED,4CAA6C,CAC5C,MACA,MAED,mCAAoC,CACnC,KACA,MAED,sCAAuC,CACtC,KACA,MAED,0CAA2C,CAC1C,MACA,MAED,6CAA8C,CAC7C,MACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,yCAA0C,CACzC,MACA,MAED,4CAA6C,CAC5C,MACA,MAED,kCAAmC,CAClC,MACA,KAED,qCAAsC,CACrC,MACA,KAED,kCAAmC,CAClC,KACA,MAED,qCAAsC,CACrC,KACA,MAED,yCAA0C,CACzC,MACA,MAED,4CAA6C,CAC5C,MACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,kCAAmC,CAClC,KACA,MAED,qCAAsC,CACrC,KACA,MAED,kCAAmC,CAClC,MACA,MAED,qCAAsC,CACrC,MACA,MAED,2CAA4C,CAC3C,KACA,MAED,8CAA+C,CAC9C,KACA,MAED,mBAAoB,CACnB,OAED,sBAAuB,CACtB,OAED,gCAAiC,CAChC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,uCAAwC,CACvC,MACA,MAED,0CAA2C,CAC1C,MACA,MAED,iCAAkC,CACjC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,wCAAyC,CACxC,MACA,MAED,2CAA4C,CAC3C,MACA,MAED,wCAAyC,CACxC,MACA,MAED,2CAA4C,CAC3C,MACA,MAED,wCAAyC,CACxC,MACA,MAED,2CAA4C,CAC3C,MACA,MAED,wCAAyC,CACxC,MACA,MAED,2CAA4C,CAC3C,MACA,MAED,gCAAiC,CAChC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,uCAAwC,CACvC,MACA,MAED,0CAA2C,CAC1C,MACA,MAED,iCAAkC,CACjC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,wCAAyC,CACxC,MACA,MAED,2CAA4C,CAC3C,MACA,MAED,gCAAiC,CAChC,KACA,MAED,mCAAoC,CACnC,KACA,MAED,uCAAwC,CACvC,MACA,MAED,0CAA2C,CAC1C,MACA,MAED,2BAA4B,CAC3B,MACA,MAED,8BAA+B,CAC9B,MACA,MAED,kCAAmC,CAClC,KACA,MAED,qCAAsC,CACrC,KACA,MAED,6BAA8B,CAC7B,MACA,MAED,gCAAiC,CAChC,MACA,MAED,oCAAqC,CACpC,MACA,MAED,uCAAwC,CACvC,MACA,OAGF,SAAS+2T,EAAoBhjH,GAC5B,IAAI8iH,EAAoB5vO,EAAEjnF,EAAK+zM,GAC9B,OAAOtpL,QAAQC,UAAU1Z,MAAK,KAC7B,IAAI/c,EAAI,IAAIyrE,MAAM,uBAAyBq0I,EAAM,KAEjD,MADA9/M,EAAEk2C,KAAO,mBACHl2C,CAAC,IAIT,IAAImsP,EAAMpgP,EAAI+zM,GAAM/0L,EAAKohO,EAAI,GAC7B,OAAO31N,QAAQid,IAAI04M,EAAIhwO,MAAM,GAAGpQ,IAAI62T,EAAoB5iU,IAAI+c,MAAK,IACzD6lT,EAAoB73S,IAE7B,CACA+3S,EAAoBvhR,KAAO,IAAOtpC,OAAOspC,KAAKx1C,GAC9C+2T,EAAoB/3S,GAAK,MACzB8+F,EAAOg5M,QAAUC,C,kBChUjB,IAAI/2T,EAAM,CACT,6BAA8B,CAC7B,MACA,MAED,4BAA6B,CAC5B,MACA,MAED,kCAAmC,CAClC,MACA,MAED,mCAAoC,CACnC,MACA,MAED,kCAAmC,CAClC,IACA,KAED,kCAAmC,CAClC,KACA,MAED,mCAAoC,CACnC,KACA,MAED,kCAAmC,CAClC,MACA,MAED,kCAAmC,CAClC,MACA,MAED,kCAAmC,CAClC,MACA,KAED,kCAAmC,CAClC,KACA,MAED,kCAAmC,CAClC,MACA,MAED,kCAAmC,CAClC,KACA,MAED,kCAAmC,CAClC,MACA,MAED,gCAAiC,CAChC,MACA,MAED,iCAAkC,CACjC,MACA,MAED,gCAAiC,CAChC,MACA,MAED,iCAAkC,CACjC,MACA,MAED,gCAAiC,CAChC,KACA,MAED,2BAA4B,CAC3B,MACA,MAED,6BAA8B,CAC7B,MACA,OAGF,SAAS+2T,EAAoBhjH,GAC5B,IAAI8iH,EAAoB5vO,EAAEjnF,EAAK+zM,GAC9B,OAAOtpL,QAAQC,UAAU1Z,MAAK,KAC7B,IAAI/c,EAAI,IAAIyrE,MAAM,uBAAyBq0I,EAAM,KAEjD,MADA9/M,EAAEk2C,KAAO,mBACHl2C,CAAC,IAIT,IAAImsP,EAAMpgP,EAAI+zM,GAAM/0L,EAAKohO,EAAI,GAC7B,OAAOy2E,EAAoB5iU,EAAEmsP,EAAI,IAAIpvO,MAAK,IAClC6lT,EAAoB73S,IAE7B,CACA+3S,EAAoBvhR,KAAO,IAAOtpC,OAAOspC,KAAKx1C,GAC9C+2T,EAAoB/3S,GAAK,MACzB8+F,EAAOg5M,QAAUC,C,kBCtGjB,IAAI/2T,EAAM,CACT,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,KAED,WAAY,CACX,MACA,KAED,QAAS,CACR,KACA,MAED,WAAY,CACX,KACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,OAED,WAAY,CACX,OAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,KACA,MAED,WAAY,CACX,KACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,KAED,WAAY,CACX,MACA,KAED,QAAS,CACR,KACA,MAED,WAAY,CACX,KACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,MACA,MAED,WAAY,CACX,MACA,MAED,QAAS,CACR,KACA,MAED,WAAY,CACX,KACA,OAGF,SAAS+2T,EAAoBhjH,GAC5B,IAAI8iH,EAAoB5vO,EAAEjnF,EAAK+zM,GAC9B,OAAOtpL,QAAQC,UAAU1Z,MAAK,KAC7B,IAAI/c,EAAI,IAAIyrE,MAAM,uBAAyBq0I,EAAM,KAEjD,MADA9/M,EAAEk2C,KAAO,mBACHl2C,CAAC,IAIT,IAAImsP,EAAMpgP,EAAI+zM,GAAM/0L,EAAKohO,EAAI,GAC7B,OAAO31N,QAAQid,IAAI04M,EAAIhwO,MAAM,GAAGpQ,IAAI62T,EAAoB5iU,IAAI+c,MAAK,IACzD6lT,EAAoB73S,IAE7B,CACA+3S,EAAoBvhR,KAAO,IAAOtpC,OAAOspC,KAAKx1C,GAC9C+2T,EAAoB/3S,GAAK,MACzB8+F,EAAOg5M,QAAUC,C","sources":["app-react/basic-components/blank-separator/blank-horizontal-separator.box.ts","app-react/basic-components/collapse-indicator/collapse-indicator.box.ts","app-react/basic-components/game-icon-wrapper/game-icon-wrapper.default.box.ts","app-react/basic-components/game-icon-wrapper/game-icon-wrapper.box.ts","app-react/basic-components/game-icon/game-icon.default.box.ts","app-react/basic-components/game-icon/game-icon.box.ts","app-react/basic-components/lobby-grid/lobby-grid.box.ts","app-react/basic-components/lobby-wrapper/lobby-wrapper.box.ts","app-react/basic-components/main-screen/main-screen.component.tsx","app-react/basic-components/space-between-items-consts.ts","app-react/basic-ui-components/button/base/boxes/button.box.ts","app-react/basic-ui-components/button/base/boxes/label/button-label.box.ts","app-react/basic-ui-components/button/base/boxes/button-icon-wrapper.box.ts","app-react/basic-ui-components/button/base/boxes/label-padding-box/button-label-padding.box.ts","app-react/basic-ui-components/button/base/button-hover-colors-helpers.ts","app-react/basic-ui-components/button/skeleton/button-skeleton.box.tsx","app-react/basic-ui-components/button/base/button.component.tsx","app-react/basic-ui-components/form/currency-input/boxes/currency-amount-value.box.ts","app-react/basic-ui-components/form/currency-input/boxes/currency-amount-error-message.box.ts","app-react/basic-ui-components/form/currency-input/boxes/currency-amount-input.box.ts","app-react/basic-ui-components/form/currency-input/boxes/currency-amount-currency.box.ts","app-react/basic-ui-components/form/currency-input/boxes/currency-amount-input-value.box.ts","app-react/basic-ui-components/form/currency-input/currency-input.component.tsx","app-react/basic-ui-components/form/radioinput.box.ts","app-react/basic-ui-components/form/select.component.tsx","app-react/basic-ui-components/icon/svg-icon/svg.icon.tsx","app-react/basic-ui-components/layout/divider/divider.box.ts","app-react/basic-ui-components/layout/spacer.box.ts","app-react/basic-ui-components/x-close-button/x-close-button.box.ts","app-react/components/orbit-swiper/swiper-window.component.tsx","app-react/react-hooks/use-is-in-viewport.hook.ts","app-react/components/arena-games-lists/arena-games-lists.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid-item/live-casino-grid-item.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid-item/live-casino-grid-item.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/info-item/live-casino-grid-item-info-item.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/infobar-icon/live-casino-grid-item-infobar-icon.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/infobar-icon/live-casino-grid-item-infobar-icon.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail-image.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail-image.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/css-constants.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/live-casino-grid-item-infobar.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/live-casino-grid-item-infobar.casino777.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/live-casino-grid-item-infobar.mrgreen.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/live-casino-grid-item-infobar.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/closed-message/live-casino-grid-item-closed-message.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail-overlay.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail-overlay.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/wrapper/live-casino-grid-item-wrapper.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/title/live-casino-grid-item-title.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/bet-behind/live-casino-grid-item-bet-behind-button.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/jackpot/live-casino-grid-item-jackpot.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/closed-message/live-casino-grid-item-open-at.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/live-casino-arena-grid-item.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid/live-casino-grid.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid/skeleton/live-casino-grid-item-skeleton.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid/skeleton/live-casino-grid-item-skeleton-title.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/grid/skeleton/live-casino-grid-item-skeleton-wrapper.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/live-casino-arena-grid.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/draws/live-casino-grid-item-draws.default.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/draws/live-casino-grid-item-draws.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/infobar/draws/live-casino-grid-item-draw.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/roulette-draws.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/table-seats.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/boxes/live-casino-arena-navbar-button/wrapper/live-casino-arena-navbar-button-wrapper.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/boxes/live-casino-filter-buttons/live-casino-filter-buttons.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/css-constants.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/boxes/live-casino-navbar/live-casino-navbar.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/live-casino-arena-navbar.component.tsx","app-react/components/balance-box/balance-box-buttons/boxes/button-wrapper.box.ts","app-react/components/balance-box/balance-value.component.tsx","app-react/components/admin-banner/boxes/admin-banner-wrapper.box.ts","app-react/components/admin-banner/admin-banner.component.tsx","app-react/components/banner/banner.component.tsx","app-react/components/base-components/orbit-suspense/orbit-suspense.tsx","app-react/components/base-components/routed-component/routed.component.ts","app-react/components/bottom-navigation-bar/bottom-navigation-bar-consts.ts","app-react/components/burnout/burnout-animation/burnout-animation-constants.ts","app-react/components/burnout/burnout-animation/boxes/burnout-animation-container.box.ts","app-react/components/burnout/burnout-animation/boxes/burnout-animation.box.ts","app-react/components/burnout/burnout-animation/boxes/burnout-animation-text.box.ts","app-react/components/burnout/burnout-animation/disposable-burnout-dependencies.ts","app-react/components/burnout/burnout-animation/burnout-animation.component.tsx","app-react/components/burnout/burnout-animation/boxes/burnout-fab.box.tsx","app-react/components/burnout/burnout-animation/burnout-animation-wrapper.component.tsx","app-react/components/clock-and-last-login-box/boxes/clock-last-login.box.ts","app-react/components/clock-and-last-login-box/boxes/last-login.box.ts","app-react/components/clock-and-last-login-box/clock-and-last-login-box.component.tsx","app-react/components/clock/boxes/clock.component.box.tsx","app-react/components/clock/clock.component.tsx","app-react/components/cms-banner/banner-container/banner-container.default.box.ts","app-react/components/cms-banner/banner-container/banner-container.box.ts","app-react/components/cms-banner/cms-banner.component.tsx","app-react/components/cms-banner/empty-banner/empty-banner-container.box.ts","app-react/components/cms-banner/empty-banner/empty-banner.component.tsx","app-react/components/free-play/boxes/container/free-play-container.box.ts","app-react/components/free-play/boxes/vouchers-swiper/vouchers-swiper.box.ts","app-react/components/free-play/boxes/vouchers-swiper/arrow/voucher-swiper-arrow-container.box.ts","app-react/components/swiper/swiper.component.tsx","app-react/components/free-play/parts/voucher-card/swiper/vouchers-swiper.component.tsx","app-react/components/free-play/boxes/voucher-games-list/voucher-games-list.box.ts","app-react/components/free-play/boxes/vouchers-swiper/vouchers-swiper-title.box.ts","app-react/components/free-play/boxes/vouchers-swiper/vouchers-swiper-background.box.ts","app-react/components/free-play/boxes/voucher-games-list-title/voucher-games-list-title.box.ts","app-react/components/free-play/free-play-container.component.tsx","app-react/components/free-play/boxes/voucher-card/voucher-card.box.ts","app-react/components/free-play/boxes/voucher-card/voucher-card-side.box.ts","app-react/components/free-play/boxes/voucher-card/face/voucher-card-face.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/voucher-card-face-content.box.ts","app-react/components/free-play/boxes/voucher-card/common/footer/voucher-card-side-footer.box.ts","app-react/components/free-play/boxes/voucher-card/face/footer/voucher-card-face-footer.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/icon/voucher-card-face-icon-container.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/details/voucher-card-face-details.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/details/original-amount/voucher-card-face-original-amount.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/details/name/voucher-card-face-voucher-name.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/details/current-amount/voucher-card-face-current-amount-container.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/icon/voucher-card-face-icon.box.ts","app-react/components/free-play/boxes/voucher-card/face/content/details/current-amount/voucher-card-face-current-amount.box.ts","app-react/components/free-play/boxes/voucher-card/common/footer/side-toggle/voucher-card-side-toggle-button.box.ts","app-react/components/free-play/boxes/voucher-card/common/footer/footer-content/voucher-card-side-footer-content.box.ts","app-react/components/free-play/boxes/voucher-card/face/header/voucher-card-face-header.box.ts","app-react/components/free-play/parts/voucher-card/face/voucher-card-face-header.component.tsx","app-react/components/free-play/parts/voucher-card/face/voucher-card-face.component.tsx","app-react/components/free-play/boxes/voucher-card/back/voucher-card-back.box.ts","app-react/components/free-play/boxes/voucher-card/back/header/voucher-card-back-header.box.ts","app-react/components/free-play/boxes/voucher-card/back/content/voucher-card-back-content.box.ts","app-react/components/free-play/boxes/voucher-card/back/footer/voucher-card-back-footer.box.ts","app-react/components/free-play/parts/voucher-card/back/voucher-card-back.component.tsx","app-react/components/free-play/parts/voucher-card/voucher-card.component.tsx","app-react/components/free-to-play-animated-icon/boxes/free-to-play-animated-icon.box.ts","app-react/components/free-to-play-animated-icon/boxes/free-to-play-click.box.ts","app-react/components/free-to-play-animated-icon/boxes/free-to-play-icon-position.box.ts","app-react/components/free-to-play-animated-icon/free-to-play-animated-icon.component.tsx","app-react/components/gambling-session/boxes/gambling-session-message.box.ts","app-react/components/gambling-session/limit-reached/gambling-session-limit-reached.component.tsx","app-react/components/gambling-session/logout/gambling-session-logout-dialog.component.tsx","app-react/components/gambling-session/session-info/boxes/gambling-session-limits-summary.box.ts","app-react/components/gambling-session/session-info/boxes/gambling-session-info.box.ts","app-react/components/gambling-session/session-info/gambling-session-info.component.tsx","app-react/components/gambling-session/setup/boxes/gambling-session-limits.box.ts","app-react/components/gambling-session/setup/boxes/drop-downs-group.box.ts","app-react/components/gambling-session/setup/parts/loss-limit-drop-down.component.tsx","app-react/services/translation/translations-helper.ts","app-react/components/gambling-session/setup/parts/time-limit-drop-down.component.tsx","app-react/components/gambling-session/setup/parts/interval-reminder-drop-down.component.tsx","app-react/components/gambling-session/setup/parts/restriction-periods-drop-down.component.tsx","app-react/components/gambling-session/setup/boxes/footer.box.ts","app-react/components/gambling-session/setup/boxes/drop-downs-separator.box.ts","app-react/components/gambling-session/setup/css-constants.ts","app-react/components/gambling-session/setup/boxes/regulatory-text.box.ts","app-react/components/gambling-session/setup/boxes/gambling-session-message.box.ts","app-react/components/gambling-session/setup/boxes/gambling-session-warn-message.box.ts","app-react/components/gambling-session/setup/gambling-session-setup.component.tsx","app-react/components/gambling-session/setup/boxes/drop-down-container.box.ts","app-react/components/gambling-session/setup/boxes/error-message.box.ts","app-react/components/gambling-session/setup/boxes/drop-down-label.box.ts","app-react/components/gambling-session/setup/parts/drop-down.component.tsx","app-react/components/game-item/boxes/game-item-img-wrapper.box.ts","app-react/components/game-item/boxes/game-item-container.box.ts","app-react/components/game-item/boxes/game-item-fp-thumb.box.ts","app-react/components/game-item/boxes/game-item-delimiter.box.ts","app-react/components/game-item/boxes/game-item-details-wrapper.box.ts","app-react/components/game-item/boxes/game-item-title.box.ts","app-react/components/game-item/boxes/game-item-jackpot.box.ts","app-react/components/game-item/boxes/game-item-buttons-area.box.ts","app-react/components/game-item/game-item.component.tsx","app-react/components/game-jackpot/boxes/root/game-jackpot.box.ts","app-react/components/game-jackpot/boxes/value/game-jackpot-value.box.ts","app-react/components/game-jackpot/game-jackpot.component.tsx","app-react/components/game-list-title/constants.ts","app-react/components/game-search/search-result/search-box-title/boxes/search-title-box/search-title.box.ts","app-react/components/game-search/search-result/search-box-title/boxes/number-of-results-box/number-of-results.default.box.ts","app-react/components/game-search/search-result/search-box-title/boxes/number-of-results-box/number-of-results.box.ts","app-react/components/game-search/search-result/search-box-title/search-box-title.component.tsx","app-react/components/game-search/search-result/found-games/boxes/search-games-list/search-games-list.box.ts","app-react/components/game-search/search-result/found-games/boxes/search-no-game-found/search-no-games-found.box.ts","app-react/components/game-search/search-result/search-game-item/boxes/search-game-item/search-game-item.box.ts","app-react/components/game-search/search-result/highlight-search-list-item/boxes/search-match.box.ts","app-react/components/game-search/search-result/highlight-search-list-item/highlight-search-list-item.component.tsx","app-react/components/game-search/search-result/search-game-item/boxes/search-text-wrapper/search-text-wrapper.box.ts","app-react/components/game-search/search-result/search-game-item/boxes/search-game-image-box/search-game-image.box.ts","app-react/components/game-search/search-result/search-game-item/search-game-item.component.tsx","app-react/components/game-search/search-result/suggested-games/suggested-games.component.tsx","app-react/components/game-search/search-result/found-games/boxes/more-games/more-games.box.ts","app-react/components/game-search/search-result/found-games/found-games.component.tsx","app-react/components/game-search/search-result/search-result-item/boxes/search-result-item-box/search-result-item.default.box.ts","app-react/components/game-search/search-result/search-result-item/boxes/search-result-item-box/search-result-item.box.ts","app-react/components/game-search/search-result/search-result-item/boxes/search-links/slots-search-link/slots-search-link.box.ts","app-react/components/game-search/search-result/search-result-item/boxes/search-links/live-search-link/live-search-link.box.ts","app-react/components/game-search/search-result/search-result-item/boxes/search-links/card-and-table-search-link/card-and-table-search-link.box.ts","app-react/components/game-search/search-result/search-result-item/boxes/search-links/regular-search-link/regular-search-link.box.ts","app-react/components/game-search/search-result/search-result-item/search-result-item.component.tsx","app-react/components/game-search/search-result/suggested-links/boxes/search-links-list/search-links-list.default.box.ts","app-react/components/game-search/search-result/suggested-links/boxes/search-links-list/search-links-list.box.ts","app-react/components/game-search/search-result/suggested-links/suggested-links.component.tsx","app-react/components/game-search/search-result/boxes/search-form-results-box/search-form-results.box.ts","app-react/components/game-search/search-result/boxes/search-form-results-wrapper-box/search-form-results-wrapper.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/boxes/suggested-video-slides-filter-list-preview-title/suggested-video-slides-filter-list-preview-title.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/components/suggested-video-slides-filter-item-preview/boxes/suggested-video-slides-filter-item-preview/suggested-video-slides-filter-item-preview.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/components/suggested-video-slides-filter-item-preview/boxes/suggested-video-slides-filter-item-preview-player/suggested-video-slides-filter-item-preview-player.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/components/suggested-video-slides-filter-item-preview/boxes/suggested-video-slides-filter-item-preview-footer/suggested-video-slides-filter-item-preview-footer.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/components/suggested-video-slides-filter-item-preview/boxes/suggested-video-slides-filter-item-preview-footer-text/suggested-video-slides-filter-item-preview-footer-text.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/components/suggested-video-slides-filter-item-preview/suggested-video-slides-filter-item-preview.component.tsx","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/boxes/suggested-video-slides-filter-list-preview-header/suggested-video-slides-filter-list-preview-header.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/boxes/suggested-video-slides-filter-list-preview.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/boxes/suggested-video-slides-filter-list-preview-content/suggested-video-slides-filter-list-preview-content.box.ts","app-react/components/game-search/search-result/suggested-video-slides-filter-list-preview/suggested-video-slides-filter-list-preview.component.tsx","app-react/components/game-search/search-result/search-result.component.tsx","app-react/components/game-search/search-input/search-input-mobile/boxes/search-clear-icon/search-clear-icon.box.ts","app-react/components/game-search/search-input/search-input-mobile/boxes/search-input-mobile/search-input-mobile.box.ts","app-react/components/game-search/search-input/search-input-area/boxes/search-input-area-box/search-input-area.box.ts","app-react/components/game-search/search-input/search-input-area/search-input-area.tsx","app-react/components/game-search/search-input/search-input-pc/boxes/search-icon/search-icon.box.ts","app-react/components/game-search/search-input/search-input-mobile/search-input-mobile.component.tsx","app-react/components/game-search/search-input/search-input-pc/search-input-pc.component.tsx","app-react/components/game-search/boxes/game-search-box/game-search.box.ts","app-react/components/game-search/game-search.component.tsx","app-react/components/game-search/search-input/search-input-pc/boxes/search-input-form/search-input-form.default.box.ts","app-react/components/game-search/search-input/search-input-pc/boxes/search-input-form/search-input-form.box.ts","app-react/components/geo/boxes/geo-modal-wrapper.box.ts","app-react/components/header/header-consts.ts","app-react/components/header/top-header-left/regulatory-data/boxes/regulatory-data.box.ts","app-react/components/header/gambling-warning/boxes/gambling-warning.default.box.ts","app-react/components/header/gambling-warning/boxes/gambling-warning.box.ts","app-react/components/header/gambling-warning/gambling-warning.component.tsx","app-react/components/header/responsible-icons/boxes/responsible-gaming-icons.default.box.ts","app-react/components/header/responsible-icons/boxes/responsible-gaming-icons.box.ts","app-react/components/header/responsible-icons/responsible-icons.component.tsx","app-react/components/header/top-header-left/regulatory-data/regulatory-data.component.tsx","app-react/components/header/welcome-buttons/authorized-user/boxes/mobile-container/mobile-container.box.ts","app-react/components/header/welcome-buttons/authorized-user/boxes/icon/user-icon.box.ts","app-react/components/header/welcome-buttons/authorized-user/boxes/bankroll/user-bankroll.box.ts","app-react/components/header/welcome-buttons/authorized-user/boxes/free-play-dot-indicator/free-play-dot-indicator.box.ts","app-react/components/header/welcome-buttons/authorized-user/mobile-view/header-welcome-buttons-for-authorized-user-mobile-view.component.tsx","app-react/components/header/welcome-buttons/header-welcome-buttons-helpers.tsx","app-react/components/header/welcome-buttons/anonymous-user/boxes/buttons-container/anonymous-buttons-container.box.ts","app-react/components/header/welcome-buttons/anonymous-user/header-welcome-buttons-for-anonymous-user.component.tsx","app-react/components/header/welcome-buttons/authorized-user/boxes/pc-container/pc-container.box.ts","app-react/components/header/buttons/cashier-button/header-cashier-button.component.tsx","app-react/components/header/welcome-buttons/authorized-user/pc-view/header-welcome-buttons-for-authorized-user-pc-view.component.tsx","app-react/components/header/welcome-buttons/authorized-user/header-welcome-buttons-for-authorized-user.component.tsx","app-react/components/header/welcome-buttons/boxes/header-welcome-buttons.box.ts","app-react/components/header/welcome-buttons/header-welcome-buttons.component.tsx","app-react/components/inside-orbit-menu-container/inside-orbit-menu-container.component.tsx","app-react/components/inside-orbit-menu-container/inside-orbit-menu-container.consts.ts","app-react/components/jackpot-widget/boxes/aspect-ratio/jackpot-widget-aspect-ratio.box.ts","app-react/components/jackpot-widget/boxes/bg/jackpot-widget-bg.box.ts","app-react/components/jackpot-widget/boxes/jackpot-widget.box.ts","app-react/components/jackpot-widget/jackpot-widget-images.ts","app-react/components/jackpot-widget/boxes/logo/jackpot-widget-logo.box.ts","app-react/components/jackpot-widget/boxes/amount/jackpot-widget-amount.box.ts","app-react/components/jackpot-widget/boxes/footer/jackpot-widget-footer.box.ts","app-react/components/jackpot-widget/boxes/footer/clock/label/jackpot-widget-clock-label.box.ts","app-react/components/jackpot-widget/boxes/footer/clock/box/jackpot-widget-clock.box.ts","app-react/components/jackpot-widget/jackpot-widget-clock.component.tsx","app-react/components/jackpot-widget/boxes/amount/label/jackpot-widget-amount-label.box.ts","app-react/components/jackpot-widget/boxes/footer/collecting/label/jackpot-widget-collecting-label.box.ts","app-react/components/jackpot-widget/boxes/footer/collecting/amount/jackpot-widget-collecting-amount.box.ts","app-react/components/jackpot-widget/boxes/shine/jackpot-widget-shine.box.ts","app-react/components/jackpot-widget/boxes/amount/container/jackpot-widget-amount-container.box.ts","app-react/components/jackpot-widget/boxes/title/jackpot-title.box.ts","app-react/components/jackpot-widget/jackpot-widget.component.tsx","app-react/components/jackpot-widget/skeleton/boxes/footer/jackpot-widget-clock-label-skeleton.box.ts","app-react/components/jackpot-widget/skeleton/boxes/footer/jackpot-widget-collecting-label-skeleton.box.ts","app-react/components/jackpot-widget/skeleton/boxes/footer/jackpot-widget-footer-container-skeleton.box.ts","app-react/components/jackpot-widget/skeleton/boxes/footer/jackpot-widget-footer-element-skeleton.box.ts","app-react/components/jackpot-widget/skeleton/boxes/jackpot-widget-amount-skeleton.box.ts","app-react/components/laboratory-showcase/boxes/page-wrapper/laboratory-showcase-page-wrapper.box.ts","app-react/components/laboratory-showcase/showcases/geo-location-browser-api-test.component.tsx","app-react/basic-ui-components/form/textarea.box.ts","app-react/components/laboratory-showcase/boxes/label.ts","app-react/components/laboratory-showcase/boxes/showcase-configuration/showcase-configuration.box.ts","app-react/components/laboratory-showcase/boxes/showcase-content-container/showcase-content-container.box.ts","app-react/components/laboratory-showcase/showcases/toaster-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/gambling-session-setup-dialog-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/onboarding-tour-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/burnout-animation-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/pixi-spine-showcase.component.tsx","app-react/components/laboratory-showcase/boxes/bg.box.ts","app-react/components/laboratory-showcase/theme-switcher.component.tsx","app-react/basic-ui-components/form/textinput.box.ts","app-react/components/laboratory-showcase/showcases/buttons-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/typography-color-and-preset-showcase.component.tsx","app-react/components/laboratory-showcase/showcase-dropdown.component.tsx","app-react/components/laboratory-showcase/showcases/popups-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/icons-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/media-query-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/client-hints-showcase.component.tsx","app-react/components/laboratory-showcase/boxes/showcase-wrapper/showcase-wrapper.box.ts","app-react/components/laboratory-showcase/boxes/showcase-label/showcase-label.box.ts","app-react/components/laboratory-showcase/boxes/showcase-content-wrapper/showcase-content-wrapper.box.ts","app-react/components/laboratory-showcase/laboratory-showcase-container.component.tsx","app-react/components/laboratory-showcase/showcases/simple-message-dialog-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/add-funds-dialog-showcase.component.tsx","app-react/components/laboratory-showcase/showcases/jackpot-bet-dialog-showcase.component.tsx","app-react/components/laboratory-showcase/laboratory-showcase.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-component/boxes/video.box.ts","app-react/components/live-streaming-tile/video-common-components/video-container/video-container.box.ts","app-react/components/live-streaming-tile/video-common-components/video-component/video.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-overlay-item/video-overlay-item.default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-overlay-item/video-overlay-item.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-footer/boxes/video-tile-footer-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-footer/boxes/video-tile-footer.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile/boxes/video-tile-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile/boxes/video-tile.box.ts","app-react/components/lobby-game-info-preview/common/boxes/section-title/section-title.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/cell/boxes/cell-value-bool/cell-value-bool.default.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/cell/boxes/cell-value-bool/cell-value-bool.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/cell/boxes/cell-value-text/cell-value-text.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/cell/boxes/cell-title/cell-title.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/cell/game-feature-cell.component.tsx","app-react/components/lobby-game-info-preview/common/game-info-container/features/table/boxes/table-container/table-container.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/features/table/game-features-table.component.tsx","app-react/components/lobby-game-info-preview/common/game-info-container/jackpot/boxes/game-jackpot-preview/game-jackpot-preview.default.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/jackpot/boxes/game-jackpot-preview/game-jackpot-preview.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/jackpot/boxes/jackpot-amount-preview/jackpot-amount-preview.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/jackpot/game-jackpot-preview.component.tsx","app-react/components/lobby-game-info-preview/common/game-info-container/game-preview-info-container.default.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/game-preview-info-container.box.ts","app-react/components/lobby-game-info-preview/common/game-info-container/game-preview-info-container.component.tsx","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/stripe-image/boxes/stripe-image/stripe-image.default.box.ts","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/stripe-image/boxes/stripe-image/stripe-image.box.ts","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/stripe-image/game-stripe-image.component.tsx","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/trailer/boxes/trailer/trailer.default.box.ts","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/trailer/boxes/trailer/trailer.box.ts","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/trailer/game-trailer.component.tsx","app-react/components/lobby-game-info-preview/common/trailer-or-stripe-image/trailer-or-stripe-image.component.tsx","app-react/components/lobby-header/boxes/container/lobby-header-title.container.box.ts","app-react/components/lobby-header/boxes/title/lobby-header-title.box.ts","app-react/components/lobby-header/boxes/lobby-header.default.box.ts","app-react/components/lobby-header/boxes/lobby-header.si.box.ts","app-react/components/lobby-header/boxes/lobby-header.mrgreen.box.ts","app-react/components/lobby-header/boxes/lobby-header.wsop.box.ts","app-react/components/lobby-header/boxes/lobby-header.box.ts","app-react/components/lobby-header/boxes/line/lobby-header-line.box.ts","app-react/components/lobby-header/boxes/buttons/lobby-header-buttons-container.box.ts","app-react/components/lobby-header/boxes/buttons/lobby-header-button.box.ts","app-react/components/lobby-header/lobby-header.component.tsx","app-react/components/lottie-player/dot-lottie-player.component.tsx","app-react/components/loyalty-bar/loyalty-bar-wrapper.component.tsx","app-react/components/modal-dialog/boxes/close-button/dialog-close-button.default.box.ts","app-react/components/modal-dialog/boxes/close-button/dialog-close-button.box.ts","app-react/components/modal-dialog/boxes/text/dialog-text.box.ts","app-react/components/modal-dialog/boxes/title/dialog-title.box.ts","app-react/components/modal-dialog/css-classes.ts","app-react/components/modal-dialog/boxes/actions/buttons-wrapper.box.ts","app-react/components/modal-dialog/boxes/actions/button-wrapper.box.ts","app-react/components/modal-dialog/boxes/actions/link-action.box.ts","app-react/components/modal-dialog/boxes/actions/link-wrapper.box.ts","app-react/components/modal-dialog/modal-dialog-actions.component.tsx","app-react/components/modal-dialog/boxes/header/dialog-header.box.ts","app-react/components/modal-dialog/boxes/header-buttons/header-buttons-container.box.ts","app-react/components/modal-dialog/parts/header/dialog-header.component.tsx","app-react/components/raw-components/aspect-ratio-container/aspect-ratio-container.component.tsx","app-react/components/raw-components/link/link.tsx","app-react/components/regulation-specific/italy/add-funds/boxes/radio-input.label.box.ts","app-react/components/regulation-specific/italy/add-funds/boxes/amount-span.box.ts","app-react/components/regulation-specific/italy/add-funds/add-funds-dialog.component.tsx","app-react/components/responsible-gambling/minimum-gambling-age/boxes/icon/minimum-gambling-age-icon.default.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/boxes/minimum-gambling-age.default.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/boxes/minimum-gambling-age.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/boxes/icon/minimum-gambling-age-icon.si.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/boxes/icon/minimum-gambling-age-icon.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/minimum-gambling-age.component.tsx","app-react/components/responsible-gambling/minimum-gambling-age/regulations/netherlands/boxes/netherlands-minimum-gambling-age-label.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/regulations/netherlands/netherlands.minimum-gambling-age.component.tsx","app-react/components/responsible-gambling/minimum-gambling-age/regulations/sweden/boxes/sweden.minimum-gambling-age-icon.box.ts","app-react/components/responsible-gambling/minimum-gambling-age/regulations/sweden/sweden.minimum-gambling-age.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/boxes/denmark.responsible-gaming-buttons.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/boxes/denmark.responsible-gaming-button-base.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/safe-to-play-button/boxes/denmark.safe-to-play-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/safe-to-play-button/denmark.safe-to-play-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/self-exclusion/boxes/denmark.self-exclusion-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/self-exclusion/denmark.self-exclusion-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/self-test-button/boxes/denmark.self-test-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/self-test-button/denmark.self-test-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/responsible-gaming-button/denmark.secondary-responsible-gaming-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/responsible-gaming-button/denmark.secondary-responsible-gaming-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/denmark.responsible-gaming-buttons.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-tooltip.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-popup.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-popup-time.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-popup-ok.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/panic-button-popup.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-tooltip-click-here.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-tooltip-close.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-mobile-overlay.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/boxes/panic-button-tooltip-wrapper.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/germany/responsible-gaming-buttons-germany.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/netherlands/self-test-button/boxes/netherlands.self-test-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/netherlands/self-test-button/netherlands.self-test-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/ontario/boxes/ontario.responsible-gaming-buttons.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/ontario/safe-to-play/boxes/ontario.safe-to-play-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/ontario/safe-to-play/ontario.safe-to-play-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/ontario/ontario.responsible-gaming-buttons.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/boxes/sweden.responsible-gaming-buttons.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/boxes/sweden.responsible-gaming-button-base.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/self-exclusion-button/boxes/sweden.self-exclusion-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/self-exclusion-button/sweden.self-exclusion-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/gaming-limits/boxes/sweden.gaming-limits-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/gaming-limits/sweden.gaming-limits-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/self-test-button/boxes/sweden.self-test-button.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/self-test-button/sweden.self-test-button.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/sweden.responsible-gaming-buttons.component.tsx","app-react/components/side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-icon.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-label.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/side-menu-items-list.default.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/side-menu-items-list.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-image.box.ts","app-react/components/side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-pre-icon.box.ts","app-react/components/side-menu-rework/side-menu-items/generic-side-menu-item.component.tsx","app-react/components/side-menu-rework/side-menu-items/boxes/side-menu-item-container.box.ts","app-react/components/side-menu-rework/side-menu-items/side-menu-item-container.component.tsx","app-react/components/side-menu-rework/side-menu-links-group/side-menu-links-group.component.tsx","app-react/components/single-game/common/boxes/game-image/game-image.box.ts","app-react/components/single-game/common/boxes/game-image/game-image.default.box.ts","app-react/components/single-game/common/boxes/game-image/game-image-animated.default.box.ts","app-react/components/single-game/common/boxes/game-image/game-image-animated.box.ts","app-react/components/single-game/common/parts/game-image/game-image-animated.component.tsx","app-react/components/single-game/common/parts/game-image/game-image.component.tsx","app-react/components/single-game/css-constants.ts","app-react/components/single-game/jackpot-template/boxes/game-details-container/game-details-container.default.box.ts","app-react/components/single-game/jackpot-template/boxes/game-details-container/game-details-container.box.ts","app-react/components/single-game/jackpot-template/boxes/game-image-container/game-image-container.default.box.ts","app-react/components/single-game/jackpot-template/boxes/game-image-container/game-image-container.box.ts","app-react/components/single-game/jackpot-template/boxes/game/game.default.box.ts","app-react/components/single-game/jackpot-template/boxes/game/game.box.ts","app-react/components/single-game/regular-template/boxes/amount-container/amount-container.box.ts","app-react/components/single-game/regular-template/boxes/game-details-container/game-details-container.box.ts","app-react/components/single-game/regular-template/boxes/game-image-container/game-image-container.default.box.ts","app-react/components/single-game/regular-template/boxes/game-image-container/game-image-container.casino777.box.ts","app-react/components/single-game/regular-template/boxes/game-image-container/game-image-container.box.ts","app-react/components/single-game/regular-template/boxes/game-title/game-title.default.box.ts","app-react/components/single-game/regular-template/boxes/game-title/game-title.casino777.box.ts","app-react/components/single-game/regular-template/boxes/game-title/game-title.cip.box.ts","app-react/components/single-game/regular-template/boxes/game-title/game-title.si.box.ts","app-react/components/single-game/regular-template/boxes/game-title/game-title.mrgreen.box.ts","app-react/components/single-game/regular-template/boxes/game-title/game-title.box.ts","app-react/components/single-game/regular-template/boxes/game/game.default.box.ts","app-react/components/single-game/regular-template/boxes/game/game.casino777.box.ts","app-react/components/single-game/regular-template/boxes/game/game.cis.box.ts","app-react/components/single-game/regular-template/boxes/game/game.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton/skeleton-animated-button.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton/skeleton-animated-rectangle.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton/video-tile-skeleton.defaultbox.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton/video-tile.skeletonbox.ts","app-react/components/single-game/single-game-skeleton.component.tsx","app-react/components/single-game/common/boxes/game-badge/game-badge.box.ts","app-react/components/single-game/common/boxes/game-badge-flipper/game-badge-flipper-wrapper.box.ts","app-react/components/single-game/common/boxes/game-badge-flipper/game-badge-flipper-inner.box.ts","app-react/components/single-game/common/boxes/game-badge-flipper/game-badge-flipper-front.box.ts","app-react/components/single-game/common/boxes/game-badge-flipper/game-badge-flipper-back.box.ts","app-react/components/single-game/common/parts/game-badge-fliper/game-badge-fliper.component.tsx","app-react/components/single-game/common/parts/game-image-container.component/game-image-container.component.tsx","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.default.box.ts","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.casino777.box.ts","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.si.box.ts","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.mrgreen.box.ts","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.cis.box.ts","app-react/components/single-game/regular-template/boxes/min-max-bet-amount/min-max-bet-amount.box.ts","app-react/components/single-game/regular-template/parts/info-page-button/info-page-button.component.tsx","app-react/components/single-game/regular-template/boxes/game-buttons/game-buttons.default.box.ts","app-react/components/single-game/regular-template/boxes/game-buttons/game-buttons.box.ts","app-react/components/single-game/regular-template/parts/play-demo-button/play-demo-button.component.tsx","app-react/components/single-game/regular-template/boxes/jackpot-amount/jackpot-amount.default.box.ts","app-react/components/single-game/regular-template/boxes/jackpot-amount/jackpot-amount.casino777.box.ts","app-react/components/single-game/regular-template/boxes/jackpot-amount/jackpot-amount.si.box.ts","app-react/components/single-game/regular-template/boxes/jackpot-amount/jackpot-amount.mrgreen.box.ts","app-react/components/single-game/regular-template/boxes/jackpot-amount/jackpot-amount.box.ts","app-react/components/single-game/regular-template/boxes/game-info-container/game-info-container.default.box.ts","app-react/components/single-game/regular-template/boxes/game-info-container/game-info-container.box.ts","app-react/components/single-game/regular-template/boxes/two-rows-game-title-container/two-rows-game-title-container.box.ts","app-react/components/single-game/regular-template/parts/game-details-container/game-details-container.component.tsx","app-react/components/single-game/regular-template/boxes/play-real-button/play-real-button.default.box.ts","app-react/components/single-game/regular-template/boxes/play-real-button/play-real-button.casino777.box.ts","app-react/components/single-game/regular-template/boxes/play-real-button/play-real-button.casino888.box.ts","app-react/components/single-game/regular-template/boxes/play-real-button/play-real-button.box.tsx","app-react/components/single-game/regular-template/boxes/game-number-badge/game-number-badge.box.ts","app-react/components/single-game/regular-template/single-game-regular-template.component.tsx","utils/css-class-name-builder.ts","app-react/components/single-game/jackpot-template/boxes/game-title/game-title.default.box.ts","app-react/components/single-game/jackpot-template/boxes/game-title/game-title.casino777.box.ts","app-react/components/single-game/jackpot-template/boxes/game-title/game-title.box.ts","app-react/components/single-game/jackpot-template/boxes/jackpot-amount/jackpot-amount.default.box.ts","app-react/components/single-game/jackpot-template/boxes/jackpot-amount/jackpot-amount.casino777.box.ts","app-react/components/single-game/jackpot-template/boxes/jackpot-amount/jackpot-amount.box.ts","app-react/components/single-game/jackpot-template/parts/game-details-container/game-details-container.component.tsx","app-react/components/single-game/jackpot-template/single-game-jackpot-template.component.tsx","app-react/components/single-game/live-template/boxes/live-game-container/live-game-container.default.box.ts","app-react/components/single-game/live-template/boxes/live-game-container/live-game-container.box.ts","app-react/components/single-game/live-template/single-game-live-template.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-sound-button/boxes/video-sound-button-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-sound-button/boxes/video-sound-button.box.ts","app-react/components/live-streaming-tile/video-common-components/video-sound-button/video-sound-button.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-tile-overlay/video-tile-overlay.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-tile-overlay/boxes/video-tile-overlay-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-overlay/boxes/video-tile-overlay.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-static-image-overlay/video-tile-static-image-overlay.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton-container/video-tile-skeleton-container-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-skeleton-container/video-tile-skeleton-container.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-tile-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-tile.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-icon-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-icon.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-title-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-title.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-text-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen-boxes/video-retry-screen-text.box.ts","app-react/components/live-streaming-tile/video-common-components/video-retry-screen/video-retry-screen.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-thumbnail-image/video-thumbnail-image.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-tile-betting-range/video-tile-betting-range-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-betting-range/video-tile-betting-range.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-game-title/video-tile-game-title-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-game-title/video-tile-game-title.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-footer/boxes/video-tile-footer-section-default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-tile-footer/boxes/video-tile-footer-section.box.ts","app-react/components/live-streaming-tile/static-video-specific-components/video-list-jackpot-value/video-list-jackpot-value.box.tsx","app-react/components/live-streaming-tile/static-video-specific-components/video-list-jackpot-container/video-list-jackpot-container.box.tsx","app-react/components/live-streaming-tile/video-common-components/video-tile-footer/video-tile-footer.component.tsx","app-react/components/live-streaming-tile/video-common-components/video-tile/video-tile.component.tsx","app-react/components/single-game/video-template/boxes/video-item-container-default.box.ts","app-react/components/single-game/video-template/boxes/video-item-container.box.ts","app-react/components/single-game/video-template/single-game-video-template.component.tsx","app-react/components/single-game/single-game.component.tsx","app-react/components/toaster/toasts-content/boxes/standard-toast-image/standard-toast-image.default.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.default.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.777.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.si.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.mrgreen.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.888.box.ts","app-react/components/top-image/boxes/top-banner/top-banner.box.ts","app-react/components/top-image/boxes/top-banner-image/top-banner-image.default.box.ts","app-react/components/top-image/boxes/top-banner-image/top-banner-image.box.ts","app-react/components/top-image/boxes/top-banner-logo-image/top-banner-logo-image.default.box.ts","app-react/components/top-image/boxes/top-banner-logo-image/top-banner-logo-image.box.ts","app-react/components/top-image/boxes/top-banner-title/top-banner-title.default.box.ts","app-react/components/top-image/boxes/top-banner-title/top-banner-title.casino777.box.ts","app-react/components/top-image/boxes/top-banner-title/top-banner-title.box.ts","app-react/components/top-image/boxes/top-banner-live-logo/top-banner-live-logo.default.box.ts","app-react/components/top-image/boxes/top-banner-live-logo/top-banner-live-logo.casino777.box.ts","app-react/components/top-image/boxes/top-banner-live-logo/top-banner-live-logo.box.ts","app-react/components/animated-top-image/boxes/animated-top-image-wrapper.ts","app-react/components/animated-top-image/lottie-animated-top-image.component.tsx","app-react/components/animated-top-image/pixi-animated-top-image.component.tsx","app-react/components/animated-top-image/animated-top-image.component.tsx","app-react/components/top-image/top-image.component.tsx","app-react/components/useful-links/boxes/list/useful-links-list.box.ts","app-react/components/useful-links/parts/useful-links-list/useful-links-list.component.tsx","app-react/components/user-menu/user-menu-items/boxes/separator/user-menu-separator.box.ts","app-react/components/user-menu/user-menu/boxes/section/user-menu-section.box.ts","app-react/components/video-player/play-button/boxes/video-play-button.box.tsx","app-react/react-hooks/use-services.hook.ts","app-react/react-hooks/with-services.tsx","app-react/services/ServiceBase.ts","app-react/services/ab-testing/feature-toggle.view-model.interface.ts","app-react/services/analytics/analytics.service.interface.ts","app-react/services/arenas/arena-consts.ts","app-react/services/casinofied/casinofied-helper-functions.ts","app-react/services/casinofied/message-broker/message-broker.consts.ts","app-react/services/cms/cms-banners/banner-definition/empty-banner-definition.tsx","app-react/services/cms/cms-banners/cm-banner-id/cms-banner-id.ts","app-react/services/control-center/control-center.service.interface.ts","app-react/services/dialog/dialog.service.interface.ts","app-react/services/external-links/external-links-z-indexes.ts","app-react/services/external-links/handlers/pending-action/pending-action.external-link-handler.interface.ts","app-react/services/external-links/handlers/registration/registration.external-link-handler.interface.ts","app-react/services/game-preview-features-selector/preview-features/game-preview-feature.interface.ts","app-react/services/game-runner/interfaces/game-context/game-context-view-model.interface.ts","app-react/services/game-runner/interfaces/game-step/game-run-step.interface.ts","app-react/services/game-vendor/game-vendor-id.enum.ts","app-react/services/games-filter/games-filter.service.interface.ts","app-react/services/games-open-sessions/games-open-sessions-kind.enum.ts","app-react/components/lobby-game-info-preview/intermediate-page/title/boxes/game-info-button/game-info-button.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/title/title.component.tsx","app-react/components/lobby-game-info-preview/intermediate-page/game-icon-and-play-buttons/boxes/container/container.default.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/game-icon-and-play-buttons/boxes/container/container.box.ts","app-react/basic-components/play-buttons/play-buttons.default.box.ts","app-react/basic-components/play-buttons/play-buttons.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/game-icon-and-play-buttons/game-icon-and-play-buttons.component.tsx","app-react/components/lobby-game-info-preview/intermediate-page/boxes/intermediate-page/intermediate-page.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/boxes/stripe-image-and-buttons/stripe-image-and-buttons.default.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/boxes/stripe-image-and-buttons/stripe-image-and-buttons.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/boxes/gradient/gradient.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-image/warning-image.default.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-image/warning-image.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-text/warning-text.default.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-text/warning-text.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-message/warning-message.default.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/boxes/warning-message/warning-message.box.ts","app-react/components/lobby-game-info-preview/intermediate-page/only-real-money-warning/only-real-money-warning.component.tsx","app-react/components/lobby-game-info-preview/intermediate-page/open-game-intermediate-page.component.tsx","app-react/services/games/game-info.tsx","app-react/services/games/games-categories.enum.ts","app-react/services/gaming-history/gaming-history-type.ts","app-react/services/gnwp/gnwp-consts.ts","app-react/services/media-query/media-query-builder.ts","app-react/services/media-query/media-queries.ts","app-react/services/media-query/breakpoints.ts","app-react/services/menu-item-action-factory/custom-actions/about-dialog.action.ts","app-react/services/menu-item-action-factory/custom-actions/cashier-upload-documents.action.ts","app-react/services/menu-item-action-factory/custom-actions/chat.action.ts","app-react/services/menu-item-action-factory/custom-actions/com-points.action.ts","app-react/services/menu-item-action-factory/custom-actions/control-center.action.ts","app-react/services/menu-item-action-factory/custom-actions/deposit.action.ts","app-react/services/menu-item-action-factory/custom-actions/explore-navigation.action.ts","app-react/services/menu-item-action-factory/custom-actions/help-center.action.ts","app-react/services/menu-item-action-factory/custom-actions/hybrid-info.action.ts","app-react/services/menu-item-action-factory/custom-actions/inactivity-timeout-settings.action.ts","app-react/services/menu-item-action-factory/custom-actions/install-pwa.action.ts","app-react/services/menu-item-action-factory/custom-actions/loyalty-indicator.action.ts","app-react/services/menu-item-action-factory/custom-actions/my-club.action.ts","app-react/services/menu-item-action-factory/custom-actions/push-notifications-permissions-request.action.ts","app-react/services/menu-item-action-factory/custom-actions/reverse-withdrawal.action.ts","app-react/services/menu-item-action-factory/custom-actions/sign-up.action.ts","app-react/services/menu-item-action-factory/custom-actions/test-regulation-specific.action.ts","app-react/services/menu-item-action-factory/custom-actions/time-spent-reminder.action.ts","app-react/services/menu-item-action-factory/custom-actions/touch-id.action.ts","app-react/services/menu-item-action-factory/custom-actions/transaction-history.action.ts","app-react/services/menu-item-action-factory/link-navigation.action.ts","app-react/services/menu-item-action-factory/menu-item-action-base.ts","app-react/services/menu-items-common/menu-item-config-reader/menu-item-config-reader-base.ts","app-react/services/menu-items-common/menu-item-config-reader/menu-item-default-config-reader.ts","app-react/services/menu-items-common/renderer/menu-item-renderer-base.ts","app-react/services/pixi-app/animated-icon-base-service.service.ts","app-react/services/pixi-app/pixi-spine-animation.ts","app-react/services/regulation/italy/italy-regulation-constants.ts","app-react/services/storage/local-storage-keys.ts","app-react/services/theme/standard-theme-customizer.ts","app-react/services/toaster/toast-helpers/toast-classnames.helper.ts","app-react/services/toaster/toaster.service.interface.ts","app-react/services/tooltip/on-boarding-tooltip/on-boarding-tooltip-target-selectors.ts","app-react/themes/architecture/by-theme-registry.ts","app-react/themes/architecture/css-helpers/css-rule.ts","app-react/themes/architecture/css-helpers/flex.ts","app-react/themes/architecture/gray-colors.ts","app-react/themes/architecture/sections/theme-layout.interface.ts","app-react/themes/architecture/styled-box.tsx","app-react/themes/architecture/styled-by-device.tsx","app-react/themes/architecture/styled-by-theme.tsx","app-react/themes/architecture/theme-names.ts","app-react/themes/defaults/icons/mobile-menu.icon.tsx","app-react/themes/defaults/icons/add.icon.tsx","app-react/themes/defaults/icons/back.icon.tsx","app-react/themes/defaults/icons/forward.icon.tsx","app-react/themes/defaults/icons/close.icon.tsx","app-react/themes/defaults/icons/control-center.icon.tsx","app-react/themes/defaults/icons/help.icon.tsx","app-react/themes/defaults/icons/two-chars.icon.tsx","app-react/themes/defaults/icons/earth-globe.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/top-games.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/roulette.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/blackjack.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/elite-lounge.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/poker.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/baccarat.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/game-shows.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/new-games.icon.tsx","app-react/themes/defaults/icons/link-to-offer.icon.tsx","app-react/themes/defaults/icons/link-to-offer-close.icon.tsx","app-react/themes/defaults/icons/source-of-funds.icon.tsx","app-react/themes/defaults/icons/arrows-up-down.icon.tsx","app-react/themes/defaults/icons/megaphone.icon.tsx","app-react/themes/defaults/icons/chip.icon.tsx","app-react/themes/defaults/icons/settings.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/mute.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/unmute.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/viewers.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/broken-link.icon.tsx","app-react/themes/defaults/icons/time-reminder.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/triple-eight-exclusive.icon.tsx","app-react/themes/defaults/icons/payments-redirect.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/left-arrow.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/right-arrow.icon.tsx","app-react/themes/defaults/icons/location.icon.tsx","app-react/themes/defaults/icons/side-menu/blog.icon.tsx","app-react/themes/defaults/icons/side-menu/home.icon.tsx","app-react/themes/defaults/icons/side-menu/promotions.icon.tsx","app-react/themes/defaults/icons/side-menu/slots.icon.tsx","app-react/themes/defaults/icons/side-menu/jackpots.icon.tsx","app-react/themes/defaults/icons/side-menu/live-casino.icon.tsx","app-react/themes/defaults/icons/side-menu/casino-games.icon.tsx","app-react/themes/defaults/icons/side-menu/vip.icon.tsx","app-react/themes/defaults/icons/side-menu/new-games.icon.tsx","app-react/themes/defaults/icons/side-menu/888casino.icon.tsx","app-react/themes/defaults/icons/side-menu/blackjack.icon.tsx","app-react/themes/defaults/icons/side-menu/roulette.icon.tsx","app-react/themes/defaults/icons/side-menu/getting-started.icon.tsx","app-react/themes/defaults/icons/side-menu/banking.icon.tsx","app-react/themes/defaults/icons/side-menu/live-chat.icon.tsx","app-react/themes/defaults/icons/side-menu/download-app.icon.tsx","app-react/themes/defaults/icons/side-menu/club888.icon.tsx","app-react/themes/defaults/icons/side-menu/poker-circle.icon.tsx","app-react/themes/defaults/icons/side-menu/sport-circle.icon.tsx","app-react/themes/defaults/icons/side-menu/video-poker.icon.tsx","app-react/themes/defaults/icons/side-menu/deposit.icon.tsx","app-react/themes/defaults/icons/freeplay.icon.tsx","app-react/themes/defaults/icons/notifications.icon.tsx","app-react/themes/defaults/icons/help-center.icon.tsx","app-react/themes/defaults/icons/warning-sign.icon.tsx","app-react/themes/defaults/icons/usa-map.icon.tsx","app-react/themes/defaults/icons/side-menu/scratch-cards.icon.tsx","app-react/themes/defaults/icons/mobile-menu-no-search.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/speed-games.icon.tsx","app-react/themes/defaults/icons/filter.icon.tsx","app-react/themes/defaults/icons/temp-account-popup.icon.tsx","app-react/themes/defaults/icons/side-menu/mobile-apps.icon.tsx","app-react/themes/defaults/icons/header-navbar/app-header-sport.icon.tsx","app-react/themes/defaults/icons/header-navbar/app-header-poker.icon.tsx","app-react/themes/defaults/icons/header-navbar/app-header-logo-888.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/self-exclusion.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/self-exclusion-symbol.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/gaming-limit.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/gaming-limit-symbol.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/self-test.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/self-test-symbol.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/minimum-gambling-age.icon.tsx","app-react/themes/defaults/icons/header-navbar/regulation-icons/panic-button.icon.tsx","app-react/themes/defaults/icons/history.icon.tsx","app-react/themes/defaults/icons/transaction-history.icon.tsx","app-react/themes/defaults/icons/security.icon.tsx","app-react/themes/defaults/icons/comp-points.icon.tsx","app-react/themes/defaults/icons/timer.icon.tsx","app-react/themes/defaults/icons/biometric-login.icon.tsx","app-react/themes/defaults/icons/about.icon.tsx","app-react/themes/defaults/icons/gaming-history.icon.tsx","app-react/themes/defaults/icons/upload-documents.icon.tsx","app-react/themes/defaults/icons/tipping-history.icon.tsx","app-react/themes/defaults/icons/reverse-withdrawal.icon.tsx","app-react/themes/defaults/icons/open-external.icon.tsx","app-react/themes/defaults/icons/wallet.icon.tsx","app-react/themes/defaults/icons/register-user.icon.tsx","app-react/themes/defaults/icons/save-game.icon.tsx","app-react/themes/defaults/icons/side-menu/poker-chip.icon.tsx","app-react/themes/defaults/icons/live-arena-tile/red-record-circle.icon.tsx","app-react/themes/defaults/icons/leave.icon.tsx","app-react/themes/defaults/icons/sound-on.icon.tsx","app-react/themes/defaults/icons/sound-off.icon.tsx","app-react/themes/defaults/icons/retry-arrow.icon.tsx","app-react/themes/defaults/icons/explore-filled.icon.tsx","app-react/themes/defaults/icons/explore-outlined.icon.tsx","app-react/themes/defaults/icons/side-menu/exclusive-side-menu.icon.tsx","app-react/themes/defaults/icons/live-arena-navbar/italian-speaking.icon.tsx","app-react/themes/defaults/icons/add-funds.icon.tsx","app-react/themes/defaults/icons-registry.ts","app-react/themes/defaults/icons/info.icon.tsx","app-react/themes/defaults/icons/search.icon.tsx","app-react/themes/defaults/icons/side-menu/sport-football.icon.tsx","app-react/themes/definitions/casino777/base-colors.ts","app-react/themes/definitions/casino888/base-colors.ts","app-react/themes/definitions/harrahs/base-colors.ts","app-react/themes/definitions/mrgreen/base-colors.ts","app-react/themes/definitions/mrgreen/icons/header-navbar/app-header-casino.icon.tsx","app-react/themes/definitions/si/base-colors.ts","app-react/themes/hex-to-rgba.ts","common/const/ab-testing-names.ts","common/const/ai-trending-list-ids-map.ts","common/const/casinofied-analytics-consts.ts","common/const/free_play_consts.ts","common/const/game_groups_consts.ts","common/const/jackpot_map_ids.ts","common/const/migration_consts.ts","common/const/responsible-gaming.ts","common/const/state-of-residence-cookie_const.ts","common/const/temp_account_status.ts","common/const/wallet_balance_type.ts","common/cy-classes.ts","common/enums/game-childish-icon-mode.enum.ts","common/interfaces/orbit-component-to-sdk-adapter/components-props/time-spent-reminder-options.ts","common/utils/color-util.ts","common/utils/image-preload.ts","app-react/app-bootstrap/application-startup-configurations-reader/application-startup-configurations-reader.ts","app-react/app-bootstrap/sdk-initializer/sdk-hooks-provider.ts","app-react/services/configurations/evaluation/properties-evaluator/properties-evaluator.ts","app-react/services/configurations/evaluation/statements/statements-evaluator/statements-evaluator.ts","app-react/services/configurations/evaluation/value-evaluators/object-evaluator/object-evaluator.ts","app-react/services/configurations/evaluation/value-evaluators/array-evaluator/array-evaluator.ts","app-react/services/configurations/evaluation/value-evaluators/simple-value-evaluator/simple-value-evaluator.ts","app-react/services/configurations/evaluation/statements/statement-evaluator/statement-evaluator.ts","app-react/services/configurations/evaluation/statements/logical-operators/base-logical-operator.ts","app-react/services/configurations/evaluation/statements/logical-operators/or-logical-operator/or-logical-operator.ts","app-react/services/configurations/evaluation/statements/logical-operators/and-logical-operator/and-logical-operator.ts","app-react/services/configurations/evaluation/statements/segmentation-rule/segmentation-rule.ts","app-react/services/configurations/evaluation/statements/comparison-operators/base-comparison-operator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/equal-operator/equal-operator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/not-equal-operator/not-equal-operator.ts","app-react/services/configurations/evaluation/property-level-context/property-level-context.ts","app-react/services/configurations/evaluation/property-evaluator/property-evaluator.ts","app-react/services/configurations/create-statements-definition.ts","app-react/services/configurations/evaluation/special-properties-evaluators/games-id-property-evaluator/games-id-property-evaluator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/is-falsy-operator/is-falsy-operator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/greater-than-operator/greater-than-operator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/less-than-operator/less-than-operator.ts","app-react/services/configurations/evaluation/statements/comparison-operators/any-of-operator/any-of-operator.ts","app-react/services/configurations/evaluation/configuration-evaluation-context/configuration-evaluation-context.ts","app-react/app-bootstrap/constants.ts","app-react/app-bootstrap/sdk-initializer/sdk-initializer.ts","app-react/services/qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.service.constants.ts","app-react/services/qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.service.ts","app-react/services/video-live-stream/video-playing-service-base.ts","common/utils/pausable-timer.ts","app-react/services/video-live-stream/video-players/live-stream-players/video-live-stream-player-base.ts","app-react/services/video-live-stream/video-players/live-stream-players/native/video-live-stream-player-native.ts","app-react/services/video-live-stream/video-players/live-stream-players/hls/video-player-hls-base.ts","app-react/services/video-live-stream/video-players/live-stream-players/hls/video-live-stream-player-hls.ts","app-react/services/video-live-stream/live-stream-playing.service.ts","app-react/services/translation/text-translation.ts","app-react/services/translation/translation.service.ts","app-react/services/currency/currency-symbol.interface.ts","app-react/services/currency/currency.service.ts","app-react/services/analytics/analytics.service.ts","common/const/saved-games-ls-key_const.ts","app-react/services/games/games.service.ts","app-react/services/configurations/inject-admin-arenas.ts","app-react/services/configurations/configurations.service.ts","app-react/services/user/model/user-sound-preferences.ts","app-react/services/user/model/user-preferences.ts","app-react/services/user/user.service.ts","app-react/services/segmentation-aggregator/segmentation-aggregator.service.ts","app-react/services/device/device.service.ts","app-react/consts/seo-categories.ts","app-react/services/ai-engine/ai-engine.service.ts","app-react/services/sdk/cgp-sdk.interface.ts","app-react/services/sdk/sdk-events.ts","app-react/services/sdk/sdk-events-trigger.ts","app-react/services/sdk/sdk.service.ts","app-react/services/games-filter/strategies/no-filter/no-games-filter.strategy.ts","app-react/services/games-filter/games-filters-storage.ts","app-react/services/games-filter/games-filter.service.ts","app-react/services/configurations/config-data-sections/arenas.configuration.ts","app-react/components/single-game-placeholder/boxes/placeholder/game-placeholder.default.box.ts","app-react/components/single-game-placeholder/boxes/placeholder/game-placeholder.box.ts","app-react/components/single-game-placeholder/boxes/game-image/game-image.default.box.ts","app-react/components/single-game-placeholder/boxes/game-image/game-image.box.ts","app-react/components/single-game-placeholder/single-game-placeholder.component.tsx","app-react/components/orbit-swiper/boxes/swiper-wrapper/swiper-wrapper.box.ts","app-react/components/orbit-swiper/boxes/swiper-games-list/swiper-games-list.box.ts","app-react/components/orbit-swiper/boxes/swiper/swiper.default.box.ts","app-react/components/orbit-swiper/boxes/swiper/swiper.box.ts","app-react/components/orbit-swiper/orbit-swiper.component.tsx","app-react/components/recently-played/recently-played.component.tsx","app-react/services/arenas/models/lists/games-list-base.model.tsx","app-react/components/game-list-title/boxes/list-title-icon/list-title-icon.box.ts","app-react/components/orbit-swiper/boxes/jackpot-widget-wrapper/jackpot-widget-wrapper.default.box.ts","app-react/components/orbit-swiper/boxes/jackpot-widget-wrapper/jackpot-widget-wrapper.box.ts","app-react/components/red-tiger-widget/boxes/widget/red-tiger-widget.default.box.ts","app-react/components/red-tiger-widget/boxes/widget/red-tiger-widget.box.ts","app-react/components/red-tiger-widget/boxes/hitArea/red-tiger-widget-hit-area.default.box.ts","app-react/components/red-tiger-widget/boxes/hitArea/red-tiger-widget-hit-area.casino777.box.ts","app-react/components/red-tiger-widget/boxes/hitArea/red-tiger-widget-hit-area.box.ts","app-react/components/red-tiger-widget/boxes/frameContainer/red-tiger-widget-frame-container.default.box.ts","app-react/components/red-tiger-widget/boxes/frameContainer/red-tiger-widget-frame-container.box.ts","app-react/components/red-tiger-widget/red-tiger-widget.component.tsx","app-react/components/game-list-title/boxes/list-title-text/list-title-text.box.ts","app-react/components/game-list-title/boxes/list-title/list-title.box.ts","app-react/components/game-list-title/game-list-title.component.tsx","app-react/components/orbit-swiper/orbit-swiper-buttons/boxes/wrapper/swiper-buttons.box.ts","app-react/components/orbit-swiper/orbit-swiper-buttons/boxes/button/swiper-button.box.ts","app-react/components/orbit-swiper/orbit-swiper-buttons/boxes/explore-button/explore-button.box.ts","app-react/components/orbit-swiper/orbit-swiper-buttons/orbit-swiper-buttons.tsx","app-react/services/arenas/models/swiper-logic-handler/swipe-logic-handler.ts","app-react/components/titan-jackpot-widget/titan-jackpot-animation.component.tsx","app-react/components/titan-jackpot-widget/boxes/titan-jackpot-amount-container.box.ts","app-react/components/titan-jackpot-widget/titan-jackpot-amount.component.tsx","app-react/components/titan-jackpot-widget/titan-jackpot-widget.component.tsx","app-react/services/arenas/models/lists/swiper-list-base.model.tsx","app-react/services/arenas/models/lists/api-list-base.model.tsx","app-react/services/arenas/models/lists/recently-played/recently-played-list.model.tsx","app-react/components/ai-list/top-picks.component.tsx","app-react/services/arenas/models/lists/top-picks/top-picks-list.model.tsx","app-react/components/ai-new-games-list/ai-new-games-list.component.tsx","app-react/services/arenas/models/lists/new-games/new-games-list.model.tsx","app-react/components/players-like-you/players-like-you.component.tsx","app-react/services/arenas/models/lists/players-like-you/players-like-you-list.model.tsx","app-react/services/arenas/models/lists/static-swiper/static-swiper-list.model.tsx","app-react/components/games-grid/games-grid-batch/games-grid-batch.component.tsx","app-react/components/games-grid/boxes/games-grid/games-grid.box.ts","app-react/components/games-grid/boxes/no-games-found-message/no-games-found-message.default.box.ts","app-react/components/games-grid/boxes/no-games-found-message/no-games-found-message.box.ts","app-react/components/games-grid/boxes/games-grid-container.box.ts","app-react/components/games-grid/games-grid.component.tsx","app-react/services/arenas/models/lists/games-grid/games-grid-list.model.tsx","app-react/components/because-you-played/because-you-played.component.tsx","app-react/services/arenas/models/lists/because-you-played/because-you-played-list.model.tsx","app-react/components/live-streaming-tile/live-streaming-specific-components/live-streaming-list-title/live-streaming-list-title.default.box.ts","app-react/components/live-streaming-tile/live-streaming-specific-components/live-streaming-list-title/live-streaming-list-title.box.ts","app-react/components/live-streaming-tile/live-streaming-specific-components/live-streaming-title-icon/live-streaming-title-icon.default.box.ts","app-react/components/live-streaming-tile/live-streaming-specific-components/live-streaming-title-icon/live-streaming-title-icon.box.ts","app-react/services/arenas/models/swiper-logic-handler/live-stream-swipe-logic-handler.ts","app-react/components/live-streaming-tile/video-common-components/video-navigation/video-navigation.default.box.ts","app-react/components/live-streaming-tile/video-common-components/video-navigation/video-navigation.box.ts","app-react/components/video-list-component/video-list.component.tsx","app-react/services/arenas/models/lists/video-list/default-video-list.model.tsx","app-react/services/arenas/models/lists/video-list/live-streaming-video-list.model.tsx","app-react/services/arenas/models/lists/video-list/static-video-list.model.tsx","app-react/services/arenas/models/lists/list-factory.ts","app-react/services/arenas/models/swiper-extra-content/promotional-banner/promotional-banner.model.tsx","app-react/components/video-slides/filter-preview/item/footer/video-slides-filter-item-preview-footer.box.ts","app-react/components/video-slides/filter-preview/item/footer-text/video-slides-filter-item-preview-footer-text.box.ts","app-react/components/video-slides/filter-preview/item/container/video-slides-filter-item-preview.box.ts","app-react/components/video-slides/filter-preview/item/player/video-slides-filter-item-preview-player.box.ts","app-react/components/video-slides/filter-preview/item/video-slides-filter-item-preview.component.tsx","app-react/components/video-slides/filter-preview/list/container/video-slides-filter-list-preview.box.ts","app-react/components/video-slides/filter-preview/list/header/video-slides-filter-list-preview-header.box.ts","app-react/components/video-slides/filter-preview/list/title/video-slides-filter-list-preview-title.box.ts","app-react/components/video-slides/filter-preview/list/content/video-slides-filter-list-preview-content.box.ts","app-react/components/video-slides/filter-preview/video-slides-filter-list-preview.component.tsx","app-react/services/arenas/models/swiper-extra-content/video-slides-filter-preview/video-slides-filter-preview.model.tsx","app-react/services/arenas/models/swiper-extra-content/swiper-extra-content.model.tsx","app-react/services/arenas/models/arenas/arena-base.model.tsx","app-react/components/daily-deal/boxes/daily-deal-container.box.ts","app-react/components/daily-deal/boxes/daily-deal-chest-glow.box.ts","app-react/components/daily-deal/boxes/daily-deal-chest.box.ts","app-react/components/daily-deal/boxes/daily-deal-text-strip.box.ts","app-react/components/daily-deal/boxes/daily-deal-chest-halo.box.ts","app-react/components/daily-deal/daily-deal.component.tsx","app-react/basic-components/layout-wrapper/layout-wrapper.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arenas-container.box.ts","app-react/components/home-page-header-arenas/home-page-header-arenas.component.tsx","app-react/components/home-page/boxes/home-page-top-banner-background.box.ts","app-react/components/home-page/boxes/home-page-top-banner-divider-line.ts","app-react/components/link-to-offer/boxes/link-to-offer-base/link-to-offer-box-base.ts","app-react/components/link-to-offer/boxes/link-to-offer-icon/link-to-offer-icon.default.box.ts","app-react/components/link-to-offer/boxes/link-to-offer-icon/link-to-offer-icon.box.ts","app-react/components/link-to-offer/boxes/link-to-offer-dialog-close/link-to-offer-dialog-close.default.box.ts","app-react/components/link-to-offer/boxes/link-to-offer-dialog-close/link-to-offer-dialog-close.box.ts","app-react/components/link-to-offer/link-to-offer.component.tsx","app-react/components/home-page/home-page.component.tsx","app-react/services/user-game-orientation/user-game-orientation.service.interface.ts","app-react/services/games-filter/evaluators/game-filter-evaluator.interface.ts","app-react/services/games-filter/evaluators/or-game-filters-evaluator.ts","app-react/services/games-filter/evaluators/and-game-filters-evaluator.ts","app-react/services/games-filter/filters-categories-definitions/filter-category-definition-base.ts","app-react/services/games-filter/filters-definitions/game-filter-definition-base.ts","app-react/services/games-filter/filters-definitions/volatility/high-volatility.filter-definition.ts","app-react/services/games-filter/filters-definitions/volatility/low-volatility.filter-definition.ts","app-react/services/games-filter/filters-definitions/volatility/medium-volatility.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/volatility.filters-category-definition.ts","app-react/services/games-filter/filters-definitions/game-feature-filter-definition-base.ts","app-react/services/games-filter/filters-definitions/game-features/one-to-twenty-five.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/twenty-five-plus.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/new-game.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/low-stake.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/high-stake.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/bonus-game.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/free-spins.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/has-side-bets.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-features/is-multi-hand.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/game-features.filters-category-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-dailight-jackpot.filter-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-twilight-jackpot.filter-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-captain8-jackpot.filter-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-red-tiger-jackpot.filter-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-jackpot.filter-definition.ts","app-react/services/games-filter/filters-definitions/jackpot/has-no-jackpot.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/has-jackpot.filters-category-definition.ts","app-react/services/games-filter/filters-definitions/vendor/vendor.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/game-vendor.filters-category-definition.ts","app-react/services/games-filter/filters-definitions/game-group-filter-definition-base.ts","app-react/services/games-filter/filters-definitions/game-group/baccarat.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/blackjack.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/craps.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/keno.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-elite-lunge.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-elite-lounge-or-exclusive.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-game-filter-definition-base.ts","app-react/services/games-filter/filters-definitions/game-group/live-game-shows.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/poker.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/roulette.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/scratchcards.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/slots.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/other-game-group.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-baccarat.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-blackjack.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-poker.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/live-roulette.filter-definition.ts","app-react/services/games-filter/filters-definitions/game-group/italian-tables.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/game-group.filters-category-definition.ts","app-react/services/games-filter/filters-definitions/theme/game-theme.filter-definition.ts","app-react/services/game-theme/game-theme-id.enum.ts","app-react/services/games-filter/filters-categories-definitions/game-theme.filters-category-definition.ts","app-react/services/games-filter/filters-categories-definitions/filter-category-definition-factory.ts","app-react/services/games-filter/strategies/games-filter-strategy-base.ts","app-react/components/filters/advanced-filtering/filter-categories-list/boxes/filter-categories-list-container.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/filter-category.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/filter-category-content.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/filter-Item.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/input/filter-input.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/filter-item-title.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/sub-filters.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/filter-item-container.box.ts","app-react/components/filters/advanced-filtering/filter-category/filter-category-item.component.tsx","app-react/components/filters/advanced-filtering/filter-category/filter-category-content.component.tsx","app-react/components/filters/advanced-filtering/filter-category/boxes/title-category/filter-title-container.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/title/filter-title.box.ts","app-react/components/filters/advanced-filtering/filter-category/boxes/preview/filter-preview.box.ts","app-react/components/filters/advanced-filtering/filter-category/filter-category-header.component.tsx","app-react/components/filters/advanced-filtering/filter-category/filter-category.component.tsx","app-react/components/filters/advanced-filtering/filter-categories-list/filter-categories-list.component.tsx","app-react/components/filters/advanced-filtering/boxes/filter/advanced-games-filter.box.ts","app-react/components/filters/advanced-filtering/boxes/filter-footer/advanced-games-filter-footer.box.ts","app-react/components/filters/advanced-filtering/boxes/filter-header/advanced-games-filter-header.box.ts","app-react/components/filters/advanced-filtering/boxes/filter-button/advanced-games-filter-button.box.ts","app-react/components/filters/advanced-filtering/filter-categories-list/boxes/filter-by.box.ts","app-react/components/filters/advanced-filtering/boxes/filter-categories-list.box.ts","app-react/components/filters/advanced-filtering/advanced-games-filter.component.tsx","app-react/services/games-filter/strategies/advanced-filter/advanced-games-filter-drawer-renderer.tsx","app-react/services/games-filter/arena-filters/filters/arena-game-filter-editor.ts","app-react/services/games-filter/arena-filters/categories/arena-game-filters-category-editor.ts","app-react/services/games-filter/strategies/advanced-filter/advanced-filters-analytics.ts","app-react/services/games-filter/strategies/advanced-filter/advanced-strategy-filters-editor.ts","app-react/components/filters/filters-games-list-mobile/boxes/menu-button/filters-mobile-button.box.ts","app-react/components/header/top-header-left/filters/filters-mobile-button.component.tsx","app-react/components/filters/advanced-filtering/boxes/indicator-container.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/boxes/applied-filter-indicator.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/boxes/applied-filters.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/boxes/remove-filter-button.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/boxes/applied-filter-name.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/boxes/applied-filters-container.box.ts","app-react/components/filters/advanced-filtering/indicators/pc-indicator/applied-filters-pc-indicator-for-advanced-filtering.component.tsx","app-react/services/games-filter/arena-filters/categories/arena-game-filters-category-base.ts","app-react/services/games-filter/arena-filters/filters/arena-game-filter-base.ts","app-react/services/games-filter/arena-filters/filters/dynamic-arena-game-filter.ts","app-react/services/games-filter/arena-filters/categories/dynamic-arena-game-filters-category.ts","app-react/services/games-filter/strategies/advanced-filter/advanced-games-filter.strategy.tsx","app-react/services/arenas/models/arenas/home-page/home-page-arena.model.tsx","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-picture/arena-picture.default.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-picture/arena-picture.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-title/arena-title.default.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-title/arena-title.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-description-text/arena-description-text.default.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/boxes/arena-description-text/arena-description-text.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/boxes/lobby-game-info/lobby-game-info.default.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/boxes/lobby-game-info/lobby-game-info.box.ts","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/arena-info-preview/arena-info-preview.component.tsx","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/game-info-preview/title/pc-game-preview-title.component.tsx","app-react/components/lobby-game-info-preview/pc-game-info-preview/parts/game-info-preview/game-info-preview.component.tsx","app-react/components/lobby-game-info-preview/pc-game-info-preview/pc-game-info-preview.component.tsx","app-react/components/arena-host/seo-bread-crumbs/seo-breadcrumbs-container.box.ts","app-react/components/arena-host/seo-bread-crumbs/seo-bread-crumbs.component.tsx","app-react/components/arena-host/casino-arena/casino-arena.template-types.ts","app-react/components/arena-host/casino-arena/casino-arena.component.tsx","app-react/services/arenas/models/filters-configuration-to-map.ts","app-react/components/filters/filter-link/boxes/icon/filter-link-icon.box.ts","app-react/components/filters/filter-link/boxes/filter-link.box.ts","app-react/components/filters/filter-link/filter-link.component.tsx","app-react/components/filters/filter-link-list/filters-games-list.default.box.ts","app-react/components/filters/filter-link-list/filters-games-list.box.ts","app-react/components/filters/filter-link-list/filter-link-list.component.tsx","app-react/components/filters/filters-games-list-mobile/boxes/popup/filters-games-mobile-popup.box.ts","app-react/components/filters/filters-games-list-mobile/boxes/popup/menu/filters-mobile-buttons.default.box.ts","app-react/components/filters/filters-games-list-mobile/boxes/popup/menu/filters-mobile-buttons.box.ts","app-react/components/filters/filters-games-list-mobile/filters-games-list-mobile.component.tsx","app-react/services/games-filter/strategies/simple-games-filter/simple-strategy-filters-editor.ts","app-react/services/games-filter/filters-definitions/other/other.filter-definition.ts","app-react/services/games-filter/filters-categories-definitions/other.filters-category-definition.ts","app-react/services/games-filter/arena-filters/filters/static-arena-game-filter.ts","app-react/services/games-filter/arena-filters/categories/static-arena-game-filters-category.ts","app-react/components/filters/filters-games-list-pc/boxes/filters-game-list-pc.default.box.ts","app-react/components/filters/filters-games-list-pc/boxes/filters-game-list-pc.box.ts","app-react/components/filters/filters-games-list-pc/filters-games-list-pc.component.tsx","app-react/services/games-filter/arena-filters/filters/adhoc-arena-game-filter.ts","app-react/services/games-filter/filters-definitions/company/company.filter-definitions.ts","app-react/services/games-filter/arena-filters/categories/adhoc-arena-games-filters-category.ts","app-react/services/games-filter/strategies/simple-games-filter/simple-games-filter.strategy.tsx","app-react/services/arenas/models/arenas/casino-lobby/casino-lobby-arena.model.tsx","app-react/services/arenas/models/arenas/void-arena/void-arena.model.ts","app-react/services/arenas/models/lists-sort-order-storage.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/boxes/live-casino-filter-button-label/live-casino-filter-button-label.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/boxes/live-casino-arena-navbar-button/live-casino-arena-navbar-button.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-navbar/live-casino-arena-navbar-button.component.tsx","app-react/components/arena-host/new-live-casino-arena/new-live-casino-arena.component.tsx","app-react/services/arenas/models/arenas/new-live-casino/new-live-casino-arena.model.tsx","app-react/services/arenas/models/arenas/new-live-casino-ab/new-live-casino-arena-ab.model.tsx","app-react/components/bottom-navigation-bar/boxes/container/bottom-navigation-bar-container.default.box.ts","app-react/components/bottom-navigation-bar/boxes/container/bottom-navigation-bar-container.box.ts","app-react/components/bottom-navigation-bar/boxes/menu-items-list/bottom-navigation-bar-menu-items-list.default.box.ts","app-react/components/bottom-navigation-bar/boxes/menu-items-list/bottom-navigation-bar-menu-items-list.box.ts","app-react/components/bottom-navigation-bar/bottom-navigation-bar-menu-items-list.component.tsx","app-react/components/bottom-navigation-bar/boxes/container/bottom-navbar-menu-item-container.box.ts","app-react/components/bottom-navigation-bar/bottom-navigation-bar.component.tsx","app-react/components/arena-host/video-slides-arena/boxes/video-slides-arena.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/boxes/video-slides-arena-header.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-arena-filters-indicator/boxes/video-slides-arena-filters-indicator.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-header-filter-button/video-slide-filter-button/video-slide-filter-button.box.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-header-filter-button/video-slide-filter-button-icon.box.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-header-filter-button/video-slides-header-filter-button.component.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-arena-filters-indicator/video-slides-arena-filters-indicator.component.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/boxes/video-slide-regulatory-data.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-header-filter-button/video-slides-user-menu-button/video-slides-user-menu-button.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/boxes/regulatory/video-slides-arena-regulatory-data.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/boxes/regulatory/license-status/license-status.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/boxes/regulatory/license-status/license-text-link.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/components/video-slides-license-popup-content/video-slides-license-popup-content.component.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-header/video-slides-arena-header.component.tsx","app-react/components/spark-swiper/boxes/spark-swiper.box.ts","app-react/components/spark-swiper/boxes/spark-swiper-slide.box.ts","app-react/components/spark-swiper/spark-swiper-slide.component.tsx","app-react/components/spark-swiper/spark-swiper-consts.ts","app-react/components/spark-swiper/spark-swiper.component.tsx","app-react/components/video-slides/parts/on-boarding/boxes/video-slides-onboarding-overlay.box.ts","app-react/components/video-slides/parts/on-boarding/boxes/swiping-user-tip.box.ts","app-react/components/video-slides/parts/on-boarding/boxes/video-slides-tip-text.box.ts","app-react/components/video-slides/parts/on-boarding/video-slides-onboarding.component.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena-swiper/video-slides-arena-swiper.box.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena-swiper/video-slides-arena-swiper.component.tsx","app-react/components/arena-host/video-slides-arena/video-slides-arena.consts.ts","app-react/components/arena-host/video-slides-arena/video-slides-arena.component.tsx","app-react/components/welcome-user/boxes/welcome-user.box.ts","app-react/components/welcome-user/boxes/welcome-greeting.box.ts","app-react/components/welcome-user/welcome-user.component.tsx","app-react/components/profile-box-messages-indicator/boxes/indicator.box.ts","app-react/components/profile-box-messages-indicator/boxes/indicator-icon.box.ts","app-react/components/profile-box-messages-indicator/boxes/indicator-badge.box.ts","app-react/components/profile-box-messages-indicator/boxes/indicator-text.box.ts","app-react/components/profile-box-messages-indicator/boxes/indicator-icon-wrapper.box.ts","app-react/components/profile-box-messages-indicator/profile-box-messages-indicator.component.tsx","app-react/components/profile-box-messages-indicator/indicators/omg-indicator.component.tsx","app-react/components/profile-box-messages-indicator/indicators/freeplay-indicator.component.tsx","app-react/components/loyalty-bar/loyalty-bar.component.tsx","app-react/components/user-info/user-info.component.tsx","app-react/components/user-info/user-info-label.box.ts","app-react/components/user-details/boxes/user-menu-name.box.ts","app-react/components/user-details/boxes/user-menu-support-id.box.ts","app-react/components/user-details/user-details.component.tsx","app-react/components/useful-links/useful-links.component.tsx","app-react/components/balance-box/bonus-and-cash-balance/boxes/bonus-and-cash-balance.box.ts","app-react/components/balance-box/bonus-and-cash-balance/boxes/balance-inner.box.ts","app-react/components/balance-box/bonus-and-cash-balance/boxes/balance-label-inner.box.ts","app-react/components/balance-box/balance-value-boxes/balance-value-bonus-and-cash.box.ts","app-react/components/balance-box/bonus-and-cash-balance/bonus-and-cash-balance.component.tsx","app-react/components/balance-box/balance-box-buttons/boxes/balance-buttons-group.box.ts","app-react/components/balance-box/balance-box-buttons/user-balance-buttons.component.tsx","app-react/components/balance-box/boxes/user-menu-balance-label.box.ts","app-react/components/balance-box/balance-value-boxes/balance-value-primary.box.ts","app-react/components/balance-box/user-balance.component.tsx","app-react/components/user-menu/user-menu-items/user-menu-items-container.component.tsx","app-react/components/user-menu/mini-control-center/boxes/mini-control-center.box.ts","app-react/components/user-menu/mini-control-center/mini-control-center.component.tsx","app-react/components/user-menu/user-menu/boxes/user-menu-scroll-wrapper.box.ts","app-react/components/profile-box/boxes/profile-box-messages/profile-messages.box.ts","app-react/components/user-menu/user-menu/boxes/user-menu-fake-ios-padding.box.ts","app-react/components/user-menu-logout/boxes/log-out-link.box.ts","app-react/components/user-menu-logout/user-menu-logout.component.tsx","app-react/components/user-menu-footer/boxes/user-menu-app-version.box.ts","app-react/components/user-menu-footer/user-menu-footer.component.tsx","app-react/components/user-menu/save-games-widget/boxes/save-games-widget.box.ts","app-react/components/user-menu/save-games-widget/boxes/save-games-widget-games-container.box.tsx","app-react/components/user-menu/save-games-widget/boxes/save-games-widget-games-title.box.ts","app-react/components/user-menu/save-games-widget/boxes/save-games-widget-header.box.ts","app-react/components/user-menu/save-games-widget/save-games-widget-header.component.tsx","app-react/components/user-menu/save-games-widget/save-games-widget.component.tsx","app-react/components/user-menu/user-menu/user-menu-mobile.component.tsx","app-react/components/user-menu/close-button/boxes/user-menu-close-pc-button.box.ts","app-react/components/user-menu/close-button/boxes/close-icon/user-menu-close-icon.box.tsx","app-react/components/user-menu/user-menu/boxes/header/user-menu-header.box.ts","app-react/components/user-menu/user-menu/user-menu-pc.component.tsx","app-react/components/main-nav/boxes/mobile/mobile-menu-header.box.ts","app-react/components/main-nav/boxes/mobile/back/mobile-back.box.ts","app-react/components/main-nav/boxes/mobile/back/mobile-back-label.box.ts","app-react/components/user-menu/user-menu/boxes/root/user-menu-root.box.ts","app-react/components/user-menu/user-menu/boxes/wrapper/user-menu-wrapper.default.box.ts","app-react/components/user-menu/user-menu/boxes/wrapper/user-menu-wrapper.box.ts","app-react/components/user-menu/user-menu/boxes/holder/user-menu-holder.default.box.ts","app-react/components/user-menu/user-menu/boxes/holder/user-menu-holder.box.ts","app-react/components/user-menu/user-menu.component.tsx","app-react/components/drawer/boxes/body/drawer-body.default.box.tsx","app-react/components/drawer/boxes/body/drawer-body.box.tsx","app-react/components/drawer/boxes/content/drawer-content.box.ts","app-react/components/spinner/boxes/spinner/spinner.default.box.ts","app-react/components/spinner/boxes/spinner/spinner.box.ts","app-react/components/spinner/boxes/spinner-brand/spinner-brand.default.box.ts","app-react/components/spinner/boxes/spinner-brand/spinner-brand.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.default.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.casino777.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.cip.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.cis.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.mrgreen.box.ts","app-react/components/spinner/boxes/spinner-background/spinner-background.box.ts","app-react/components/drawer/drawer-spinner.component.tsx","app-react/components/drawer/drawer.component.tsx","app-react/services/arenas/models/arenas/video-slides/video-slides-arena.model.tsx","app-react/services/arenas/arenas.service.tsx","app-react/services/language/language-switcher/language-switcher-item.ts","app-react/services/language/language-switcher/language-switcher-section.ts","app-react/services/language/language-switcher/selected-language-switcher-item.ts","app-react/services/language/language.service.ts","app-react/components/sticky-handler/sticky-handler.ts","app-react/services/sticky-handler-factory/sticky-handler-factory.service.ts","app-react/services/game-route-handler/game-route-handler.service.ts","app-react/app-bootstrap/launcher-overrides-reader/launcher-overrides-reader.ts","app-react/services/launcher/launcher.service.ts","app-react/services/spinner/spinner.service.ts","app-react/services/cross-brands/cross-brands.service.ts","app-react/components/mini-orbit/routing/mini-orbit-routing-definition.tsx","app-react/services/routing-configuration/routing-configuration.service.tsx","app-react/services/routing/route/orbit-route.ts","app-react/services/routing/routing.service.ts","app-react/services/overlay/overlay.service.ts","app-react/services/time/time.service.ts","app-react/services/ai-new-games-engine/ai-new-games.service.ts","app-react/services/theme/theme.service.tsx","app-react/services/mini-orbit/adapters/void/void-communication-adapter.ts","app-react/services/mini-orbit/mini-orbit.service.tsx","app-react/components/modal-dialog/boxes/consumer-content/dialog-consumer-content.box.ts","app-react/components/modal-dialog/boxes/overlay/dialog-overlay.default.box.ts","app-react/components/modal-dialog/boxes/overlay/dialog-overlay.mrgreen.box.ts","app-react/components/modal-dialog/boxes/overlay/dialog-overlay.box.ts","app-react/components/modal-dialog/boxes/overlay-content/dialog-overlay-content.default.box.ts","app-react/components/modal-dialog/boxes/overlay-content/dialog-overlay-constants.ts","app-react/components/modal-dialog/boxes/overlay-content/dialog-overlay-content.box.ts","app-react/components/modal-dialog/boxes/icon-wrapper/dialog-icon-wrapper.default.box.ts","app-react/components/modal-dialog/boxes/icon-wrapper/dialog-icon-wrapper.box.ts","app-react/components/modal-dialog/modal-dialog.component.tsx","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog-single-line-content.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog-buttons-container.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog-button.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/simple-message-dialog-button.component.tsx","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog-icon-container.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/boxes/simple-message-dialog-multi-line-content.box.ts","app-react/components/modal-dialog/standard-dialogs/simple-message/simple-message-dialog.component.tsx","app-react/services/dialog/dialog.service.tsx","app-react/services/manifest/pwa-manifest.service.ts","app-react/services/manifest/pwa-manifest-constants.ts","app-react/services/mini-orbit/adapters/poker/poker-communication-adapter.ts","app-react/services/mini-orbit/adapters/sport/sport-communication-adapter.ts","app-react/services/mini-orbit/adapter-factory/mini-orbit-communication-adapter-factory.service.ts","app-react/services/live-table-feeds-service/live-table-feeds.service.interface.ts","utils/memoize.ts","common/const/sub_game_group_consts.ts","app-react/services/live-table-feeds-service/live-table-feeds.service.ts","app-react/services/ab-testing/ab-testing-feature-check.ts","app-react/services/ab-testing/feature-toggle.model.ts","app-react/services/ab-testing/strategies/void/void-ab-testing.strategy.ts","app-react/services/ab-testing/ab-testing-local-storage-keys.ts","app-react/services/ab-testing/strategies/ab-testing-base.strategy.ts","app-react/services/ab-testing/strategies/authorized/ab-testing-for-authorized-user.strategy.ts","app-react/services/ab-testing/strategies/anonymous/ab-testing-for-anonymous-user.strategy.ts","app-react/services/ab-testing/ab-testing-feature-data-provider.service.ts","app-react/services/control-center/control-center.service.ts","app-react/services/wallet-proxy/wallet-proxy.service.ts","app-react/services/homepage/homepage-header-arenas-menu-item-config-reader.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-badge/home-page-header-arena-badge.default.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-badge/home-page-header-arena-badge.si.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-badge/home-page-header-arena-badge.mrgreen.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-badge/home-page-header-arena-badge.box.ts","app-react/components/home-page-header-arenas/boxes/menu/menu-item/home-page-header-arena-menu-item.default.box.ts","app-react/components/home-page-header-arenas/boxes/menu/menu-item/home-page-header-arena-menu-item.mrgreen.box.ts","app-react/components/home-page-header-arenas/boxes/menu/menu-item/home-page-header-arena-menu-item.box.ts","app-react/components/home-page-header-arenas/boxes/menu/icon-box/home-page-header-arena-menu-item-icon.default.box.ts","app-react/components/home-page-header-arenas/boxes/menu/icon-box/home-page-header-arena-menu-item-icon.box.ts","app-react/components/home-page-header-arenas/boxes/menu/menu-item-name/home-page-header-arena-menu-item-name.default.box.ts","app-react/components/home-page-header-arenas/boxes/menu/menu-item-name/home-page-header-arena-menu-item-name.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.default.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.si.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.casino777.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.casino888.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.wsop.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/tile/home-page-header-arena-tile.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/skeleton/home-page-header-arena-skeleton.default.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/skeleton/home-page-header-arena-skeleton.si.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/skeleton/home-page-header-arena-skeleton.casino888.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/skeleton/home-page-header-arena-skeleton.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/ratio-image-wrapper/home-page-header-arena-ratio-image-wrapper.default.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/ratio-image-wrapper/home-page-header-arena-ratio-image-wrapper.caisno888.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/ratio-image-wrapper/home-page-header-arena-ratio-image-wrapper.box.ts","app-react/components/home-page-header-arenas/home-page-header-arena-tile.component.tsx","app-react/components/home-page-header-arenas/boxes/tiles/name/home-page-header-arena-name.default.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/name/home-page-header-arena-name.si.box.ts","app-react/components/home-page-header-arenas/boxes/tiles/name/home-page-header-arena-name.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-link/home-page-header-arena-link.default.box.ts","app-react/components/home-page-header-arenas/boxes/home-page-header-arena-link/home-page-header-arena-link.box.ts","app-react/components/home-page-header-arenas/home-page-header-arena-menu-item.component.tsx","app-react/services/homepage/menu-items/generic-homepage-header-arena-menu-item.renderer.tsx","app-react/services/homepage/homepage.service.tsx","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup.default.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown.popup.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-text.default.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-text.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-timer.default.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-timer.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-timer-remaining.default.box.ts","app-react/components/session-cooldown-popup/boxes/session-cooldown-popup-timer-remaining.box.ts","app-react/components/session-cooldown-popup/session-cooldown-popup.component.tsx","app-react/services/session-cooldown/session-cooldown.service.tsx","app-react/services/media-query/media-query-listener.ts","app-react/services/media-query/media-query.service.ts","app-react/services/tools/tools.service.ts","app-react/services/user-game-orientation/user-game-orientation.service.ts","app-react/services/api/api-controller-base.ts","app-react/services/api/api.service.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown.box.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown-option-selector.box.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown-main-text.default.box.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown-main-text.casino777.box.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown-main-text.box.ts","app-react/components/time-spent-reminder/with-dropdown/boxes/tsr-with-dropdown-selector-container.box.ts","app-react/components/time-spent-reminder/with-dropdown/time-spent-reminder-with-dropdown.component.tsx","app-react/components/geo/geo-permission-popup/geo-permission-popup.component.tsx","app-react/components/time-spent-reminder/with-balance/boxes/tsr-with-balance.box.ts","app-react/components/time-spent-reminder/with-balance/time-spent-reminder-with-balance.component.tsx","app-react/components/temp-account-popup/boxes/temp-account-popup.box.ts","app-react/components/temp-account-popup/boxes/temp-account-days-left-number.box.ts","app-react/components/temp-account-popup/boxes/temp-account-days-left-text.box.ts","app-react/components/temp-account-popup/temp-account-popup.component.tsx","app-react/components/biometric-dialog/init-biometric-dialog/boxes/init-biometric-footer-section.box.ts","app-react/components/biometric-dialog/init-biometric-dialog/boxes/init-biometric-dialog.box.ts","app-react/components/biometric-dialog/init-biometric-dialog/boxes/init-biometric-info-section.box.ts","app-react/components/biometric-dialog/init-biometric-dialog/boxes/help-option.box.ts","app-react/components/biometric-dialog/init-biometric-dialog/init-biometric-dialog.component.tsx","app-react/components/login-toast/boxes/login-toast.box.ts","app-react/components/toaster/toasts-content/boxes/standard-toast-title/standard-toast-title.box.ts","app-react/components/toaster/toasts-content/boxes/standard-toast-message/standard-toast-message.box.ts","app-react/components/login-toast/boxes/login-toast-message/login-toast-responsible-gaming-link.box.ts","app-react/components/toaster/toasts-content/boxes/standard-toast-image/standard-toast-image.box.ts","app-react/components/login-toast/login-toast.component.tsx","app-react/services/orbit-component-to-sdk-adapter/orbit-component-to-sdk-adapter.service.tsx","app-react/services/casinofied/message-broker/message-broker.service.ts","app-react/services/casinofied/action-handler/action-handler-base.ts","app-react/services/casinofied/action-handler/handlers/open-banking.action-handler.ts","app-react/services/casinofied/action-handler/handlers/upload-documents-from-cashier.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-deposit.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-withdraw.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-link.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-chat.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-link-with-form-post.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-control-center-full.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-client-page.action-handler.ts","app-react/services/casinofied/action-handler/handlers/logout.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-help-center.action-handler.ts","app-react/services/casinofied/action-handler/handlers/login.action-handler.ts","app-react/services/casinofied/action-handler/handlers/registration.action-handler.ts","app-react/services/casinofied/action-handler/handlers/transaction-history.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-cashier.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-challenges.action-handler.ts","app-react/services/casinofied/action-handler/handlers/navigate-client-page.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-my-account.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-rich.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-control-center-mini.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-casino-game.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-forgot-your-password.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-casino-free-to-play.action-handler.ts","app-react/services/casinofied/action-handler/handlers/open-online-help.action-handler.ts","app-react/services/casinofied/action-handler/handlers/autologin.action-handler.ts","app-react/services/casinofied/action-handler/casinofied-action-handler.service.ts","app-react/services/floating-bubbles/floating-bubbles.service.ts","app-react/components/source-of-funds/boxes/source-of-funds.box.ts","app-react/components/source-of-funds/source-of-funds-popup.component.tsx","app-react/services/restriction-ruler/restriction-ruler.service.tsx","app-react/services/restriction-ruler/restriction-ruler.service.interface.ts","app-react/services/casinofied/analytics-publisher/casinofied-analytics.service.ts","app-react/services/ab-testing-ai-sort/ab-testing-ai-sort-games-lists.service.ts","common/utils/cashier-util.ts","app-react/services/cashier/cashier.service.ts","app-react/services/external-links/handlers/external-link-handler-base.ts","app-react/components/external-links/boxes/external-link-iframe-container.box.ts","app-react/components/external-links/boxes/external-link-close-button-wrapper.box.ts","app-react/components/external-links/boxes/external-link-iframe.box.ts","app-react/components/external-links/external-link-iframe.component.tsx","app-react/components/external-links/external-link-iframe-in-modal-dialog.component.tsx","app-react/services/external-links/renderers/external-link-iframe.renderer.tsx","app-react/services/external-links/handlers/external-link-in-iframe-handler-base.ts","app-react/services/external-links/handlers/registration/registration.external-link-handler.ts","app-react/services/external-links/handlers/my-account/my-account.external-link-handler.tsx","app-react/services/external-links/handlers/cashier/cashier.external-link-handler.ts","app-react/services/external-links/handlers/omg/omg.external-link-handler.ts","app-react/services/external-links/handlers/forgot-credentials/forgot-credentials-external-link-handler-base.ts","app-react/services/external-links/handlers/forgot-credentials/forgot-user-name/forgot-user-name.external-link-handler.ts","app-react/services/external-links/handlers/forgot-credentials/forgot-password/forgot-password.external-link-handler.ts","app-react/services/external-links/handlers/pending-login/pending-login.external-link-handler.ts","app-react/services/external-links/handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers/game-limits/game-limits.external-link-handler.ts","app-react/services/external-links/handlers/contact-us/contact-us.external-link-handler.ts","app-react/services/external-links/handlers/rich/rich.external-link-handler.ts","app-react/services/external-links/handlers/help/help.external-link-handler.ts","app-react/services/external-links/handlers/pending-action/pending-action.external-link-handler.ts","common/enums/platform-event-type.enum.ts","app-react/services/external-links/handlers/pending-action/deposit/deposit-pending-action.external-link-handler.ts","app-react/services/external-links/handlers/pending-action/transaction-history/transaction-history-pending-action.external-link-handler.ts","app-react/services/external-links/handlers/pending-action/real-game-play/real-game-play-pending-action.external-link-handler.ts","app-react/services/external-links/handlers-factory/external-links-handlers-factory.ts","app-react/components/header/welcome-buttons/header-welcome-buttons-analytics-sender.ts","app-react/components/header/buttons/login-button/header-login-button.component.tsx","app-react/components/header/buttons/register-button/header-register-button.component.tsx","app-react/components/about-component/boxes/about.box.ts","app-react/components/about-component/boxes/about-info-section.box.ts","app-react/components/about-component/boxes/about-footer-section.box.ts","app-react/components/about-component/about.component.tsx","app-react/components/clock-and-last-login-box/last-login/boxes/last-login-label.box.ts","app-react/components/clock-and-last-login-box/last-login/boxes/last-login-value.box.ts","app-react/components/clock-and-last-login-box/last-login/last-login.component.tsx","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/bet-interval/live-casino-grid-item-bet-interval.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/bet-interval/live-casino-grid-item-bet-interval-min-wrapper.box.ts","app-react/components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/live-casino-min-max-bet.component.tsx","app-react/services/regulation/regulation-components-common.tsx","app-react/services/menu-items-common/regulations-specific/regulation-menu-item-factory-base.ts","app-react/services/links-navigation/regulation-hooks/regulation-link-navigation-hook.interface.ts","app-react/services/links-navigation/regulation-hooks/regulation-navigation-hook-base.ts","app-react/services/regulation/legacy-regulation-wrapper.ts","app-react/services/regulation/germany/components/germany.regulation-components.tsx","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog.box.ts","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog-header.box.ts","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog-footer.box.ts","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog-field-label.box.ts","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog-field-value.box.ts","app-react/components/reality-check/germany/boxes/germany.reality-check-dialog-buttons.box.ts","app-react/components/reality-check/germany/germany.reality-check-dialog.component.tsx","app-react/services/regulation/germany/germany.regulation.tsx","app-react/services/external-links/handlers/registration/regulations/michigan/michigan.registration.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/michigan/michigan.external-links-handlers-factory.ts","app-react/components/clock-and-last-login-box/session-timer/boxes/session-timer-label.box.ts","app-react/components/clock-and-last-login-box/session-timer/boxes/session-timer-value.box.ts","app-react/components/clock-and-last-login-box/session-timer/boxes/session-timer.box.ts","app-react/components/clock-and-last-login-box/session-timer/session-timer.component.tsx","app-react/components/clock-and-last-login-box/last-login-and-session-timer/boxes/last-login-and-session-timer.box.ts","app-react/components/clock-and-last-login-box/last-login-and-session-timer/boxes/last-login-container.box.ts","app-react/components/clock-and-last-login-box/last-login-and-session-timer/last-login-and-session-timer.component.tsx","app-react/components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component.tsx","app-react/services/regulation/regulation-const.ts","app-react/services/regulation/michigan/components/michigan.regulation-components.tsx","app-react/services/menu-item-regulation-specific/michigan/side-menu/components/michigan.sport-side-menu-item.component.tsx","app-react/services/menu-item-regulation-specific/michigan/side-menu/michigan.sport-side-menu-item.renderer.tsx","app-react/services/menu-item-regulation-specific/michigan/michigan.menu-item-factory.ts","app-react/services/regulation/michigan/michigan.regulation.ts","app-react/services/regulation/ontario/components/ontario.regulation-components.tsx","app-react/services/external-links/handlers/registration/regulations/ontario/ontario.registration.external-link-handler.ts","app-react/services/external-links/handlers/my-account-upload-documents/regulations/ontario/ontario.my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/ontario/ontario.external-links-handlers-factory.ts","app-react/services/regulation/ontario/ontario.regulation.ts","app-react/services/external-links/handlers/registration/regulations/netherlands/netherlands.registration.external-link-handler.ts","app-react/services/external-links/handlers/my-account-upload-documents/regulations/netherlands/netherlands.my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers/pending-action/real-game-play/netherlands/netherlands.real-game-play-pending-action.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/netherlands/netherlands.external-links-handlers-factory.ts","app-react/services/regulation/netherland/components/netherlands.regulation-components.tsx","app-react/services/regulation/netherland/netherlands.regulation.ts","app-react/services/external-links/handlers/registration/regulations/new-jersey/new-jersey.registration.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/new-jersey/new-jersey.external-links-handlers-factory.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/boxes/us.safe-to-play.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/boxes/us.safe-to-play-container.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/boxes/us.safe-to-play-label.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/safe-to-play/us.safe-to-play.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/boxes/us.responsible-gaming-buttons.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/boxes/us.responsible-gaming.box.ts","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/responsible-gaming/us.responsible-gaming.component.tsx","app-react/components/responsible-gambling/responsible-gaming-buttons/regulations/us/us.responsible-gaming-buttons.component.tsx","app-react/services/regulation/new-jersey/components/new-jersey.regulation-components.tsx","app-react/services/regulation/new-jersey/new-jersey.regulation.ts","app-react/services/external-links/handlers/registration/regulations/uk/uk.registration.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/uk/uk.external-links-handlers-factory.ts","app-react/services/regulation/uk/components/uk.regulation-components.ts","app-react/services/regulation/uk/uk.regulation.ts","app-react/services/external-links/handlers/my-account-upload-documents/regulations/italy/italy.my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/italy/italy.external-links-handlers-factory.ts","app-react/services/regulation/italy/components/italy.regulation-components.ts","app-react/services/menu-item-regulation-specific/italy/side-menu/italy.test-menu-item.renderer.tsx","app-react/services/menu-item-regulation-specific/italy/italy.menu-item-factory.ts","app-react/components/inactivity-timeout-settings/boxes/inactivity-timeout-settings.box.ts","app-react/components/inactivity-timeout-settings/boxes/drop-down.box.ts","app-react/components/inactivity-timeout-settings/inactivity-timeout-settings.component.tsx","app-react/services/regulation/italy/italy.regulation.tsx","app-react/services/external-links/handlers/my-account-upload-documents/regulations/romania/romania.my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/romania/romania.external-links-handlers-factory.ts","app-react/services/regulation/romania/romania.regulation.ts","app-react/services/regulation/portugal/components/portugal.regulation-components.ts","app-react/services/regulation/portugal/portugal.regulation.ts","app-react/services/regulation/sweden/components/sweden.regulation-components.tsx","app-react/services/regulation/sweden/sweden.regulation.ts","app-react/services/external-links/handlers/my-account-upload-documents/regulations/denmark/denmark.my-account-upload-documents.external-link-handler.ts","app-react/services/external-links/handlers-factory/regulations/denmark/denmark.external-links-handlers-factory.ts","app-react/services/regulation/denmark/components/denmark.regulation-components.tsx","app-react/services/regulation/denmark/denmark.regulation.ts","app-react/services/specific-dialogs/specific-dialogs.service.interface.ts","app-react/services/regulation/spain/spain.regulation.ts","app-react/services/regulation/regulation.service.ts","app-react/services/limits-toaster/limits-toaster.service.ts","app-react/services/burnout/player-burnout.service.ts","app-react/services/player-offerings/player-offerings/offers/offer-base.ts","app-react/services/player-offerings/player-offerings/offers/welcome-offer.tsx","app-react/components/wheel-of-fortune/boxes/wheel-of-fortune-shell.box.ts","app-react/components/wheel-of-fortune/boxes/wheel-of-fortune-colors.box.ts","app-react/components/wheel-of-fortune/boxes/wheel-of-fortune-wrapper.box.ts","app-react/components/wheel-of-fortune/wheel-of-fortune.component.tsx","app-react/services/player-offerings/player-offerings/offers/wheel-of-fortune-offer.tsx","app-react/components/link-to-offer/boxes/link-to-offer-banner/link-to-offer-banner.default.box.ts","app-react/components/link-to-offer/boxes/link-to-offer-banner/link-to-offer-banner.box.ts","app-react/services/player-offerings/player-offerings/offers/registration-offer.tsx","app-react/services/player-offerings/player-offerings.service.tsx","app-react/services/pixi-app/pixi-app-creator.ts","app-react/services/pixi-app/pixi-app.service.ts","app-react/services/game-animated-icons-manager/game-animated-icons-manager.service.ts","app-react/services/webgl-context-manager/webgl-context-manager.service.ts","app-react/services/tooltip/tooltip-base.service.ts","app-react/services/tooltip/tooltip-base/tooltip-modifiers.ts","app-react/services/tooltip/tooltip-base/tooltip-base.model.ts","app-react/services/tooltip/regular-tooltip/regular-tooltip.model.ts","app-react/services/tooltip/regular-tooltip/regular-tooltips.service.ts","app-react/services/gaming-history/models/paginator/history-paginator-base.model.ts","app-react/services/gaming-history/models/record/history-record-base.model.ts","app-react/services/gaming-history/models/record/user-gaming-history-record.model.ts","app-react/services/gaming-history/models/record/migrated-gaming-history-record.model.ts","app-react/services/gaming-history/models/paginator/migrated-gaming-history-paginator.model.ts","app-react/services/gaming-history/models/paginator/void-gaming-history-paginator.model.ts","app-react/services/gaming-history/models/paginator/user-gaming-history-paginator.model.ts","app-react/services/gaming-history/models/record/session-gaming-history-record.model.ts","app-react/services/gaming-history/models/paginator/session-gaming-history-paginator.model.ts","app-react/services/gaming-history/gaming-history.service.ts","app-react/services/because-you-played/because-you-played.service.ts","utils/version-number.ts","app-react/services/hybrid/hybrid.service.ts","app-react/services/video-live-stream/video-players/static-video-player/static-video-player.ts","app-react/services/video-live-stream/static-video-playing.service.ts","app-react/services/storage/session-storage.service.ts","app-react/services/storage/cookies.service.ts","app-react/services/free-play/free-play-game/free-play-game.model.ts","app-react/services/free-play/vouchers/voucher-base.model.ts","app-react/services/free-play/vouchers/free-play/free-play-voucher.model.ts","app-react/services/free-play/vouchers/jackpot-free-play/jackpot-free-play-voucher.model.ts","app-react/services/free-play/vouchers/free-spins/free-spins-voucher.model.ts","app-react/services/free-play/vouchers/jackpot-free-spins/jackpot-free-spins-voucher.model.ts","app-react/services/free-play/providers/vouchers-provider-base.ts","app-react/services/free-play/providers/888/888-free-play-vouchers.provider.ts","app-react/services/free-play/free-play.service.interface.ts","app-react/services/free-play/providers/3rdparty/third-party-vouchers.provider.ts","app-react/services/free-play/vouchers/voucher-for-ui-display.model.ts","app-react/services/free-play/free-play.service.ts","app-react/services/restrictions/restrictions.service.ts","app-react/services/free-to-play/free-to-play.service.ts","app-react/services/scrip-loader/script-loader.service.ts","app-react/services/session-timer/session-timer.service.ts","common/interfaces/crm-sdk-lib.interface.ts","app-react/services/crm/crm.service.ts","app-react/components/lugas/boxes/line-box.ts","app-react/components/lugas/lugas-active-popup.component.tsx","app-react/components/login-popup/boxes/login-popup.box.ts","app-react/components/login-popup/boxes/login-popup-dialog-text.box.ts","app-react/components/login-popup/login-popup.component.tsx","app-react/basic-ui-components/form/toggle-switch/boxes/checkbox/toggle-switch-checkbox.box.ts","app-react/basic-ui-components/form/toggle-switch/boxes/slider/toggle-switch-slider.box.ts","app-react/basic-ui-components/form/toggle-switch/boxes/toggle-switch.box.ts","app-react/basic-ui-components/form/toggle-switch/toggle-switch.component.tsx","app-react/components/biometric-dialog/modify-biometric-dialog/boxes/modify-biometric-dialog.box.ts","app-react/components/biometric-dialog/modify-biometric-dialog/boxes/modify-biometric-info-section/modify-biometric-info-section.box.ts","app-react/components/biometric-dialog/modify-biometric-dialog/boxes/modify-biometric-toggle-section/modify-biometric-toggle-section.box.ts","app-react/components/biometric-dialog/modify-biometric-dialog/modify-biometric-dialog.component.tsx","sdk/src/services/player_messages_service/firebase/handlers/gambling-session_handler_interfaces.ts","app-react/services/specific-dialogs/specific-dialogs.service.tsx","app-react/services/tipping-history/models/tipping-history-view-model.ts","app-react/services/tipping-history/tipping-history.service.ts","app-react/services/loyalty-indicator/models/loyalty-indicator.model.ts","app-react/services/loyalty-indicator/loyalty-indicator.service.ts","app-react/components/state-popup/boxes/state-popup-wrapper.box.ts","app-react/components/state-popup/state-popup.component.tsx","app-react/components/state-popup/boxes/state-popup-error-message.box.ts","app-react/components/state-popup/boxes/state-popup-select-wrapper.box.ts","app-react/components/state-popup/state-popup-with-dropdown.component.tsx","app-react/services/state-of-residence-identifier/state-popup-strategies.ts","app-react/services/state-of-residence-identifier/state-popup-strategies-consts.ts","app-react/services/state-of-residence-identifier/state-of-residence-identifier.service.tsx","app-react/services/onboarding-tour/steps/welcome.step.ts","app-react/services/onboarding-tour/geometry.helper.ts","app-react/services/onboarding-tour/steps/main-menu.step.ts","app-react/services/onboarding-tour/steps/user-menu.step.ts","utils/rem-to-px.ts","app-react/services/features-toggle-management/FeatureId.ts","app-react/services/onboarding-tour/onboarding-tour.service.ts","app-react/services/nyx/nyx.service.ts","app-react/services/tooltip/on-boarding-tooltip/on-boarding-tooltip.model.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/container.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/text-container.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/title.default.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/title.mrgreen.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/title.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/icon.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/separator/separator.default.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/separator/separator.777.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/separator/seperator.mrgreen.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/separator/separator.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/icon-container/icon-container.default.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/icon-container/icon-container.mrgreen.box.ts","app-react/components/tooltip/tooltips/icon-title-text/boxes/icon-container/icon-container.box.ts","app-react/components/tooltip/tooltips/icon-title-text/icon-title-text.tooltip.tsx","app-react/services/tooltip/on-boarding-tooltip/free-play/free-play.on-boarding-tooltip.model.tsx","app-react/components/tooltip/tooltips/ios-add-to-home/boxes/icon-container.box.ts","app-react/components/tooltip/tooltips/ios-add-to-home/boxes/ios-add-to-home-share-icon.box.ts","app-react/components/tooltip/tooltips/ios-add-to-home/boxes/message-body-container.box.ts","app-react/components/tooltip/tooltips/ios-add-to-home/ios-add-to-home.component.tsx","app-react/services/tooltip/on-boarding-tooltip/pwa/ios-pwa.on-boarding-tooltip.model.tsx","app-react/services/tooltip/on-boarding-tooltip/control-center/control-center.on-boarding-tooltip.model.tsx","app-react/components/tooltip/tooltips/explorer-onboarding-tooltip/boxes/explorer-onboarding-tooltip-container.box.ts","app-react/components/tooltip/tooltips/explorer-onboarding-tooltip/boxes/explorer-onboarding-tooltip-title-container.box.ts","app-react/components/tooltip/tooltips/explorer-onboarding-tooltip/boxes/explorer-onboarding-tooltip-x-button.box.ts","app-react/components/tooltip/tooltips/explorer-onboarding-tooltip/explorer-onboarding.tooltip.tsx","app-react/services/tooltip/on-boarding-tooltip/video-slides-explorer/video-slides-explorer.on-boarding-tooltip.model.tsx","app-react/services/tooltip/on-boarding-tooltip/on-boarding-tooltips.service.ts","app-react/services/player-migration/player-migration.service.ts","app-react/services/toaster/toasts-queue.ts","app-react/components/toaster/toasts-content/boxes/standard-toast-image.box.ts","app-react/components/toaster/toasts-content/standard-toast.component.tsx","app-react/services/toaster/toast-helpers/toast-analytics.helper.ts","app-react/services/toaster/taoster-service-consts.ts","app-react/services/toaster/toast-handler.tsx","app-react/services/toaster/toaster.service.tsx","app-react/services/features-toggle-management/FeaturesMaxDisplayCountMap.ts","app-react/services/features-toggle-management/features-toggle-management.service.ts","app-react/services/links-navigation/link-configuration-parser.ts","app-react/services/links-navigation/links-navigation.service.ts","app-react/services/toaster/firebase-toaster.service.interface.ts","utils/json-helper.ts","app-react/services/toaster/firebase-toaster.service.tsx","app-react/services/titan-jackpot/titan-jackpot.service.ts","app-react/services/game-theme/game-theme-definition/game-theme-definition.ts","app-react/services/game-theme/games-theme.service.ts","app-react/services/game-vendor/game-vendor-definition.ts/game-vendor-definition.ts","app-react/services/game-vendor/games-vendor.service.ts","app-react/services/player-messages/player-messages.service.ts","app-react/services/video-slides/models/video-slides-filter-editor/video-slides-filter.model.ts","app-react/services/video/models/video-type.enum.ts","app-react/services/video-slides/analytics/video-slides-analytics-data.interface.ts","app-react/services/video-slides/models/video-slides-filter-editor/for-you-video-slides-filter.ts","app-react/services/video-slides/models/rules/slide-rule-base.model.ts","app-react/services/video-slides/analytics/video-slides-analytics-reporter.ts","app-react/services/video-slides/video-slides-renderers/video-slide-base.renderer.ts","app-react/components/video-slides/slides-types/live-stream/player/boxes/live-stream-slide-player-container.box.ts","app-react/components/video-player/boxes/video-player.box.ts","app-react/components/video-player/boxes/video-element-container.box.ts","app-react/components/video-player/play-button/video-play-button.component.tsx","app-react/components/video-player/error/boxes/video-error-title.box.tsx","app-react/components/video-player/error/boxes/video-error-container.box.tsx","app-react/components/video-player/error/video-error.component.tsx","app-react/components/video-player/watch-limit/boxes/video-watch-time-limit-reached.box.ts","app-react/components/video-player/watch-limit/video-watch-time-limit-reached.component.tsx","app-react/components/video-player/video-player.component.tsx","app-react/components/video-slides/parts/skeleton/video-slide-player-skeleton.box.ts","app-react/components/video-slides/slides-types/video-stream/parts/player/video-stream-slide-player.component.tsx","app-react/components/video-slides/layout/boxes/video-slide-layout.box.ts","app-react/components/progress-bar/thin/boxes/thin-progress-bar-container.box.tsx","app-react/components/progress-bar/thin/boxes/thin-progress-bar.box.tsx","app-react/components/progress-bar/thin/thin-progress-bar.component.tsx","app-react/components/video-slides/layout/boxes/video-slide-layout-progress-indicator.box.ts","app-react/components/video-slides/layout/boxes/video-slide-layout-children-container.box.ts","app-react/components/video-slides/layout/video-slide-layout.component.tsx","app-react/components/video-slides/layout/content/video-slide-content-layout.component.tsx","app-react/components/video-slides/layout/footer/boxes/video-slide-footer-layout.box.ts","app-react/components/video-slides/layout/footer/boxes/game-title/video-slide-footer-game-title-layout.box.ts","app-react/components/video-slides/parts/save-game-button/save-game-button-container.box.tsx","app-react/components/video-slides/parts/save-game-button/boxes/save-game-button-title.box.ts","app-react/components/video-slides/parts/save-game-button/save-game-button.component.tsx","app-react/components/video-slides/parts/sound-button/boxes/video-slides-sound-icon.box.tsx","app-react/components/video-slides/parts/sound-button/video-slides-sound-button.component.tsx","app-react/components/video-slides/layout/footer/boxes/left/video-slide-footer-left-container.box.ts","app-react/components/video-slides/layout/footer/boxes/right/video-slide-footer-right-container.box.ts","app-react/components/video-slides/layout/footer/video-slide-footer-layout.component.tsx","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/betting-range/video-slides-stream-betting-range-default.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/betting-range/video-slides-stream-betting-range.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/footer-container/video-slides-stream-footer-default.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/footer-container/video-slides-stream-footer.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/jackpot/video-slides-stream-jackpot-container-default.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/jackpot/video-slides-stream-jackpot-container.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/jackpot/video-slides-stream-jackpot-value-default.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/boxes/jackpot/video-slides-stream-jackpot-value.box.ts","app-react/components/video-slides/parts/video-slides-stream-footer/video-slides-stream-footer.component.tsx","app-react/components/video-slides/slides-types/video-stream/video-stream-slide.component.tsx","app-react/services/video-slides/video-slides-renderers/video-stream-game-slide.renderer.tsx","app-react/services/video-slides/models/rules/video-stream-slide-rule.model.ts","app-react/components/video-slides/slides-types/live-stream/player/boxes/status-badge/live-stream-slide-status-badge.box.ts","app-react/components/video-slides/slides-types/live-stream/player/boxes/status-details/live-stream-slide-status-details.box.ts","app-react/components/video-slides/slides-types/live-stream/player/boxes/status-icon/live-stream-slide-status-icon.box.ts","app-react/components/video-slides/slides-types/live-stream/player/live-stream-slide-player.component.tsx","app-react/components/video-slides/slides-types/live-stream/live-stream-slide.component.tsx","app-react/services/video-slides/video-slides-renderers/live-stream-game-slide.renderer.tsx","app-react/services/video-slides/models/rules/live-stream-video-slide-rule.model.ts","app-react/components/video-slides/slides-types/promotion/boxes/promotion-slide.box.ts","app-react/components/video-slides/slides-types/promotion/promotion-slide.component.tsx","app-react/services/video-slides/video-slides-renderers/promotion-slide.renderer.tsx","app-react/services/video-slides/models/rules/banner-slide-rule.model.ts","app-react/services/video-slides/models/rules/slides-rules-handler.ts","app-react/components/spark-swiper/models/spark-swiper-slide-controller.tsx","app-react/components/spark-swiper/models/spark-swiper-slide-controller.interface.ts","app-react/services/video-slides/models/swiper/video-slides-swiper-slide.controller.ts","app-react/components/spark-swiper/models/animation/spark-swiper-swipe-animation.model.ts","app-react/components/spark-swiper/models/spark-swiper-controller.ts","app-react/services/video-slides/models/swiper/video-slides-swiper.ts","app-react/services/video-slides/video-slides.service.tsx","app-react/services/gambling-session/gambling-session.service.interface.ts","app-react/services/gambling-session/gambling-session-analytics.ts","app-react/services/gambling-session/gambling-session.service.tsx","utils/lazy-async.ts","app-react/services-groups/services-group-loader.ts","app-react/components/notifications/snackbar-notification.component.box.tsx","app-react/components/notifications/box/snackbar-notification-title.box.ts","app-react/components/notifications/snackbar-notification.component.tsx","app-react/services/notifications/notifications.service.tsx","app-react/services/video-live-stream/video-players/live-stream-players/hls/video-on-demand-player-hls.ts","app-react/services/video-live-stream/video-players/live-stream-players/native/video-on-demand-player-native.ts","app-react/services/video-live-stream/video-on-demand-playing.service.ts","app-react/services/cross-brands/cross-brands-item-config-reader.ts","app-react/components/header/top-header-left/cross-brand/boxes/app-header-cross-brand-item/app-header-cross-brand-item.box.ts","app-react/components/header/top-header-left/cross-brand/boxes/app-header-cross-brand-text/app-header-cross-brand-text.box.ts","app-react/components/header/top-header-left/cross-brand/cross-brands-items/generic-cross-brands-menu-item.component.tsx","app-react/services/header/menu-items/generic-cross-brands-menu-item.renderer.tsx","app-react/services/header/header.service.ts","app-react/services/menu-item-action-factory/menu-item-action-factory.service.ts","app-react/services/video/models/video-element-container.ts","app-react/services/video/models/video-watch-time-handler.ts","app-react/services/video/models/analytics/video-analytics-reporter.interface.ts","app-react/services/video/models/video-events-controller.ts","app-react/services/video/models/video-player-base.model.ts","app-react/services/video/models/analytics/video-console-analytics-reporter.ts","app-react/services/video/models/video-streaming/strategies/native-video-streaming.strategy.ts","app-react/services/video/models/video-streaming/strategies/hls-video-streaming.strategy.ts","app-react/services/video/models/video-streaming/video-streaming-player.model.ts","app-react/services/video/video.service.ts","app-react/components/idle-recommendation/boxes/idle-recommendation-toaster.box.ts","app-react/components/idle-recommendation/boxes/idle-recommendation-header.box.ts","app-react/components/idle-recommendation/boxes/idle-recommendation-header-title-wrapper.box.ts","app-react/components/idle-recommendation/boxes/idle-recommendation-game-details.box.ts","app-react/components/idle-recommendation/boxes/idle-recommendation-toaster-background.box.ts","app-react/components/idle-recommendation/idle-recommendation.component.tsx","app-react/services/idle-recommendations/idle-recommendations.service.tsx","app-react/components/accordion/components/content/boxes/accordion-content.box.ts","app-react/components/accordion/components/content/accordion-content.component.tsx","app-react/components/accordion/components/header/boxes/accordion-header.box.ts","app-react/components/accordion/components/header/accordion-header.component.tsx","app-react/components/accordion/accordion.component.tsx","app-react/components/jackpot-bet/boxes/opt-in-jackpot-bet-dialog/opt-in-jackpot-bet-dialog.box.ts","app-react/components/jackpot-bet/opt-in/components/opt-in-accordion-content/boxes/opt-in-accordion-content.box.ts","app-react/components/jackpot-bet/opt-in/components/opt-in-accordion-content/opt-in-accordion-content.component.tsx","app-react/components/jackpot-bet/opt-in/components/opt-in-dialog-header/boxes/opt-in-dialog-header.box.ts","app-react/components/jackpot-bet/opt-in/components/opt-in-dialog-header/opt-in-dialog-header.component.tsx","app-react/components/jackpot-bet/opt-in/opt-in-accordion-title/boxes/opt-in-accordion-title.box.ts","app-react/components/jackpot-bet/opt-in/opt-in-accordion-title/opt-in-accordion-title.component.tsx","app-react/components/jackpot-bet/opt-in/opt-in-jackpot-bet-dialog.component.tsx","app-react/services/jackpot-bet/jackpot-bet.service.tsx","app-react/services/service-factory.ts","app-react/components/user-menu/logo-box/boxes/logo-container/logo-container.box.ts","app-react/components/user-menu/logo-box/boxes/logo-image/default-logo-icon/logo-image.box.ts","app-react/components/user-menu/logo-box/logo-box.component.tsx","app-react/components/profile-box/profile-picture/boxes/profile-picture.box.ts","app-react/components/profile-box/profile-picture/boxes/profile-user-name.box.ts","app-react/components/profile-box/profile-picture/boxes/profile-picture-image.box.ts","app-react/components/profile-box/profile-picture/profile-picture.component.tsx","app-react/components/profile-box/boxes/profile-messages-divider.box.ts","app-react/components/profile-box/boxes/profile-buttons.box.ts","app-react/components/profile-box/boxes/profile-cashier-button/profile-cashier-button.box.ts","app-react/components/profile-box/boxes/profile-cashier-button/profile-cashier-add-button/profile-cashier-add-button.box.ts","app-react/components/profile-box/boxes/profile-wrapper.box.ts","app-react/components/profile-box/profile-box.component.tsx","app-react/components/side-menu/store-button/store-button.component.tsx","app-react/components/side-menu/boxes/menu-links-groups-container.box.ts","app-react/components/side-menu/boxes/side-menu-container.box.ts","app-react/components/side-menu/boxes/mobile-menu-item-container.box.ts","app-react/components/side-menu/boxes/mobile-menu-item-link.box.ts","app-react/components/side-menu/mobile-help-menu-item/mobile-help-center-menu-item.component.tsx","app-react/components/side-menu/mobile-lang-switcher-menu-item/boxes/mobile-lang-switcher-menu-item-selected-lang.box.ts","app-react/components/side-menu/mobile-lang-switcher-menu-item/boxes/mobile-lang-switcher-container.box.ts","app-react/components/side-menu/boxes/mobile-language-menu-item.box.ts","app-react/components/side-menu/mobile-lang-switcher-menu-item/mobile-lang-switcher-menu-item.component.tsx","app-react/components/side-menu/horizontal-ruler/side-menu-horizontal-line.box.ts","app-react/components/side-menu/boxes/mobile-menu-items-container.box.ts","app-react/components/header/top-header-right/state-selector-button/state-selector-button.component.tsx","app-react/components/side-menu/mobile-state-selector-menu-item/mobile-state-selector-menu-item.component.tsx","app-react/components/main-nav/boxes/related-sites/boxes/related-sites-wrapper.box.ts","app-react/components/main-nav/boxes/related-sites/boxes/related-site-link.box.ts","app-react/components/main-nav/boxes/related-sites/related-site.component.tsx","app-react/components/main-nav/boxes/related-sites/related-sites.component.tsx","app-react/components/side-menu-rework/side-menu-above-search-group/boxes/cross-brands-items-above-search.box.ts","app-react/components/side-menu-rework/side-menu-above-search-group/cross-brands-items-above-search.component.tsx","app-react/components/side-menu/side-menu.component.tsx","app-react/components/language-switcher-dropdown/boxes/language-switcher-dropdown.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/language-switcher-section-list.default.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/language-switcher-section-list.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-title/language-switcher-section-title.default.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-title/language-switcher-section-title.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/section-list-item/language-switcher-section-list-item.default.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/section-list-item/language-switcher-section-list-item.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/section-list-item/section-list-item-label/language-switcher-item-label.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/section-list-item/section-list-item-checkbox/language-switcher-item-checkbox.default.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/boxes/section-list/section-list-item/section-list-item-checkbox/language-switcher-item-checkbox.box.ts","app-react/components/language-switcher-dropdown/language-switcher-section/language-switcher-section.component.tsx","app-react/components/language-switcher-dropdown/language-switcher-dropdown.component.tsx","app-react/components/main-nav/boxes/main-nav-canvas/main-nav-canvas.box.ts","app-react/components/main-nav/boxes/main-nav.box.ts","app-react/components/main-nav/boxes/main-nav-content-wrapper.box.ts","app-react/components/main-nav/boxes/main-nav-menu.box.ts","app-react/components/main-nav/main-nav.component.tsx","app-react/components/header/top-header-right/help-button/help-button.component.tsx","app-react/components/header/top-header-left/cross-brand/boxes/app-header-cross-brand-list/app-header-cross-brand-list.box.ts","app-react/components/header/top-header-left/cross-brand/app-header-cross-brands.component.tsx","app-react/components/header/top-header-left/mobile-burger-menu/boxes/container/burger-menu-container.box.ts","app-react/components/header/top-header-left/mobile-burger-menu/mobile-burger-menu.component.tsx","app-react/components/header/boxes/language-switcher/header-language-switcher.box.ts","app-react/components/header/top-header-right/language-switcher/header-language-switcher.component.tsx","app-react/components/header/top-header-right/deposit/boxes/deposit-header-button.box.ts","app-react/components/header/top-header-right/deposit/deposit-header-button.component.tsx","app-react/components/header/boxes/navbar-separator/navbar-separator.box.ts","app-react/components/header/boxes/header-navbar-container/header-navbar-container.box.ts","app-react/components/header/boxes/navbar-left-container/header-navbar-left-container.default.box.ts","app-react/components/header/boxes/navbar-left-container/header-navbar-left-container.box.ts","app-react/components/header/boxes/navbar-right-container/header-navbar-right-container.default.box.ts","app-react/components/header/boxes/navbar-right-container/header-navbar-right-container.box.ts","app-react/components/header/top-header-left/mobile-burger-menu/boxes/wrapper/burger-menu-wrapper.box.ts","app-react/components/header/header.component.tsx","app-react/components/overlay/boxes/overlay.component.box.tsx","app-react/components/overlay/overlay.component.tsx","app-react/components/spinner/boxes/spinner-logo/spinner-logo.default.box.ts","app-react/components/spinner/boxes/spinner-logo/spinner-logo.casino777.box.ts","app-react/components/spinner/boxes/spinner-logo/spinner-logo.cip.box.ts","app-react/components/spinner/boxes/spinner-logo/spinner-logo.wsop.box.ts","app-react/components/spinner/boxes/spinner-logo/spinner-logo.cis.box.ts","app-react/components/spinner/boxes/spinner-logo/spinner-logo.box.ts","app-react/components/spinner/boxes/spinner-subtext/spinner-subtext.default.box.ts","app-react/components/spinner/boxes/spinner-subtext/spinner-subtext.box.ts","app-react/components/spinner/spinner-content.component.tsx","app-react/components/spinner/spinner.component.tsx","app-react/components/breadcrumbs/boxes/breadcrumbs.box.ts","app-react/components/breadcrumbs/breadcrumbs.component.tsx","app-react/components/app-footer/app-footer.component.tsx","app-react/components/router-outlet/boxes/router-outlet.default.box.ts","app-react/components/router-outlet/boxes/router-outlet.casino777.box.ts","app-react/components/router-outlet/boxes/router-outlet.casino888.box.ts","app-react/components/router-outlet/boxes/router-outlet.harrahs.box.ts","app-react/components/router-outlet/boxes/router-outlet.si.box.ts","app-react/components/router-outlet/boxes/router-outlet.box.ts","app-react/components/router-outlet/router-outlet.component.tsx","app-react/components/floating-bubbles/boxes/floating-bubbles-container.box.ts","app-react/components/floating-bubbles/boxes/floating-bubble.box.ts","app-react/components/floating-bubbles/floating-bubbles.component.tsx","app-react/components/container/boxes/main-wrapper.box.ts","app-react/components/onboarding-tour/spotlight/boxes/mask-cutout.box.ts","app-react/components/onboarding-tour/spotlight/boxes/mask-fabric/mask-fabric.box.ts","app-react/services/onboarding-tour/onboarding-spotlight.helper.ts","app-react/components/onboarding-tour/spotlight/boxes/spotlight-svg.box.ts","app-react/components/onboarding-tour/spotlight/boxes/gradient-stop-svg/gradient-stop-svg.box.ts","app-react/components/onboarding-tour/spotlight/onboarding-spotlight.component.tsx","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-log/onboarding-dialog-logo.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-main-text.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-secondary-text.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-next/onboarding-dialog-next.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-step-indicator/onboarding-dialog-step-indicator.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-content.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog-close.box.ts","app-react/components/onboarding-tour/dialog/boxes/onboarding-dialog/onboarding-dialog.box.ts","app-react/components/onboarding-tour/dialog/onboarding-dialog.component.tsx","app-react/components/onboarding-tour/onboarding-tour.component.tsx","app-react/components/container/container.component.tsx","app-react/components/modal-dialog/modal-dialogs-container.component.tsx","app-react/components/sdk/orbit-components-rendered-inside-sdk-container.tsx","app-react/components/burnout/player-burnout-layer.component.tsx","app-react/components/tooltip/boxes/tooltip-arrow/tooltip-arrow.default.ts","app-react/components/tooltip/boxes/tooltip-arrow/tooltip-arrow.777.ts","app-react/components/tooltip/boxes/tooltip-arrow/tooltip-arrow.mrgreen.box.ts","app-react/components/tooltip/boxes/tooltip-arrow/tooltip-arrow.box.ts","app-react/components/tooltip/boxes/tooltip-close-button.box.ts","app-react/components/tooltip/boxes/tooltip-container/tooltip-container.default.ts","app-react/components/tooltip/boxes/tooltip-container/tooltip-container.box.ts","app-react/components/tooltip/boxes/tooltip-glow/tooltip-glow.default.ts","app-react/components/tooltip/boxes/tooltip-glow/tooltip-glow.777.ts","app-react/components/tooltip/boxes/tooltip-glow/tooltip-glow.mrgreen.box.ts","app-react/components/tooltip/boxes/tooltip-glow/tooltip-glow.box.ts","app-react/components/tooltip/boxes/tooltip-content.box.ts","app-react/components/tooltip/boxes/tooltip-container/tooltip-lightweight-container.box.ts","app-react/components/tooltip/tooltip-container.component.tsx","app-react/components/game-window/loading-indicators/boxes/game-loading-indicator-root.box.ts","app-react/components/game-window/loading-indicators/game-loading-indicator.component.tsx","app-react/components/current-game-container/current-game-container.component.tsx","app-react/components/toaster/boxes/toaster-styles-wrapper.box.ts","app-react/components/toaster/boxes/toast-container/toast-container.box.ts","app-react/components/toaster/toaster.component.tsx","app-react/components/notifications/snackbar-notification-container.component.tsx","app-react/components/app/app.component.tsx","app-react/services/storage/in-memory-local-storage.service.ts","app-react/app-bootstrap/b2c-framework-loader/b2c-framework-loader.ts","app-react/themes/select-theme.ts","app-react/orbit-api.interface.ts","app-react/b2c-adapter.ts","app-react/orbit-api.ts","main.ts","sdk/src/events/events.ts","sdk/src/exceptions/cgp_error_codes.ts","sdk/src/services/games_information/games_information_service_interface.ts","sdk/src/services/oauth/oauth_const.ts","sdk/src/services/player_messages_service/firebase/handlers/messages_handler_interfaces.ts","sdk/src/services/regulation/regulation_const.ts","sdk/src/utils/date_formatter.ts","sdk/src/utils/event.ts","settings/configs/default-config.ts","settings/languages/eng.ts","utils/case-insensitive-property-reader.ts","utils/delay.ts","utils/disposable-object.ts","app-react/services/menu-item-action-factory/custom-actions|sync|/.+/.action/.(ts%7Ctsx)$","app-react/themes/definitions|lazy|/^/.*/theme/.definition$/|chunkName: theme-definition|groupOptions: {}|namespace object","settings/configs|lazy|/^/.*$/|groupOptions: {}|namespace object","settings/configs|lazy|/^/.*/config$/|groupOptions: {}|namespace object","settings/languages|lazy|/^/.*$/|chunkName: language|groupOptions: {}|namespace object"],"sourcesContent":["import styled from \"styled-components\";\nimport {flexFixedSizeItem} from \"../../themes/architecture/css-helpers/flex\";\nimport {MOBILE_HORIZONTAL_SPACE_BETWEEN_ITEMS, PC_HORIZONTAL_SPACE_BETWEEN_ITEMS} from \"../space-between-items-consts\";\n\nexport const BlankHorizontalSeparatorBox = styled.span<{multiplier?: number}>`\n ${flexFixedSizeItem}\n width: ${props => PC_HORIZONTAL_SPACE_BETWEEN_ITEMS(props.multiplier ?? 1)};\n @media ${props => props.theme.mediaQuery.lAndBelow} {\n width: ${props => MOBILE_HORIZONTAL_SPACE_BETWEEN_ITEMS(props.multiplier ?? 1)};\n }\n`;\n","import {styledBox} from \"../../themes/architecture/styled-box\";\n\nexport const CollapseIndicatorBox = styledBox(\"CollapseIndicatorBox\");","import styled from 'styled-components';\n\nexport const GameIconWrapperDefaultBox = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n\n @media ${({theme}) => theme.mediaQuery.xs} {\n padding-left: 15px;\n width: 80%;\n }\n`;","import {GameIconWrapperDefaultBox} from './game-icon-wrapper.default.box';\n\nexport const GameIconWrapperBox = GameIconWrapperDefaultBox;","import styled from 'styled-components';\nimport { Image } from '../../components/raw-components/image/image';\n\n//game-info-icon\nexport const GameIconDefaultBox = styled(Image)`\n display: block;\n background-size: 100%;\n background-image: url(\"${props => props.theme.assets.images.games_icons_background.BGGameBlack_png.toString()}\");\n background-repeat: no-repeat;\n`;\n\n","import {GameIconDefaultBox} from './game-icon.default.box';\n\nexport const GameIconBox = GameIconDefaultBox;","import {styledBox} from \"../../themes/architecture/styled-box\";\n\nexport const LobbyGridBox = styledBox('LobbyGridBox');","import {styledBox} from \"../../themes/architecture/styled-box\";\n\nexport const LobbyWrapperBox = styledBox('LobbyWrapperBox');\n","import React from 'react';\nimport {OrbitComponent} from '../../components/base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {MAIN_SCREEN} from '../../themes/css-global-classes';\nimport {CyClass} from \"../../../common/cy-classes\";\n\nexport const MainScreenComponent = observer(class MainScreenComponent extends OrbitComponent {\n\n render() {\n //TODO - main-screen class should be removed once we convert all the components to styled-components\n\n return (\n <div className={`${MAIN_SCREEN} ${CyClass('cy-main-screen')}`}>\n {this.props.children}\n </div>\n );\n }\n});\n\n","export function PC_HORIZONTAL_SPACE_BETWEEN_ITEMS(multiplier: number = 1) {\n return (15 * multiplier) + 'px';\n}\n\nexport function MOBILE_HORIZONTAL_SPACE_BETWEEN_ITEMS(multiplier: number = 1) {\n return (5 * multiplier) + 'px';\n}","import styled, { css } from \"styled-components\";\nimport { IButtonCommonProps, IButtonColorSet, IButtonPreset } from \"../button-props.interface\";\n\nenum ColorSetWanted {\n Default = 0,\n Hover = 1,\n Active = 2\n}\n\ninterface IButtonBoxProps extends IButtonCommonProps {\n colorSet: IButtonColorSet;\n\n width: number;\n height: number;\n strokeWidth: number;\n iconSize: number;\n lateralPadding: number;\n\n hasLabel: boolean;\n hasIcon: boolean;\n}\n\nexport const ButtonBox = styled.button<IButtonBoxProps>`\n cursor: ${props => props.disabled ? \"default\" : \"pointer\"};\n user-select: none;\n\n border-radius: ${props => props.rounded ? \"100px\" : props.theme.layout.border.radius};\n ${props => props.margin ? css`\n margin: ${props.margin};\n ` : null};\n\n /* Override user-agent styles */\n background: none;\n outline: none;\n\n ${({theme}) => theme.font.presets.ultra};\n /**\n * This is not the actual text size.\n * The text size is set in the span wrapping the text, here i'm just creating a context for the em units to compute relative to this\n */\n font-size: ${props => props.noRemUnits ? \"10px\" : \"1rem\"};\n /**\n * If we have only an icon and no label, we want a square (or circle) button\n * that means the width = height =>\n * border x 2 + lateral-padding x 2 + icon_size = height =>\n * lateral_padding = (height - icon_size - 2 x border)/2 =>\n * lateral_padding = (height - icon_size)/2 - border\n *\n * If we have label (with or without icon), don't bother, put 1em or whatever value decided by design (hardcoded or from the theme)\n */\n padding: 0 ${props => {\n if (props.hasIcon && !props.hasLabel) {\n return \"calc(\"+((props.height - props.iconSize)/2)+\"em - \"+props.strokeWidth+\"px)\";\n } else {\n return props.lateralPadding + \"em\";\n }\n }};\n line-height: 0.8;\n letter-spacing: 0.05em;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n /** content-box because the border is in px. So when computing heights, paddings etc in em border is not taken in consideration */\n /* box-sizing: content-box;\n height: calc(${props => props.height }em - 2*${props => props.strokeWidth }px); */\n /** OOORRR */\n box-sizing: border-box;\n height: ${props => props.height}em;\n\n width: ${props => {\n if (props.fullWidth) {\n return \"100%\";\n }\n if (props.width && props.hasLabel && props.labelOverflow !== \"expand\") {\n return props.width+\"em\";\n }\n return \"auto\";\n }};\n ${props => props.hasLabel && props.labelOverflow === \"expand\" ? css`\n min-width: ${props.width+\"em\"};\n ` : null};\n transition: all 0.2s ease-in-out;\n\n border-width: ${props => props.strokeWidth}px;\n border-style: solid;\n\n color: ${props => colorSet(props).text};\n background-color: ${props => colorSet(props).bg};\n border-color: ${props => colorSet(props).border};\n box-shadow: ${props => (props.elevated && colorSet(props).shadow) ? colorSet(props).shadow : \"none\"};\n\n /** support for bgGradient because */\n ${props => colorSet(props).bgGradient ? css`\n background: ${colorSet(props).bgGradient};\n ` : null}\n\n /** support for textGradient because */\n ${props => colorSet(props).textGradient ? css`\n & span {\n background: ${colorSet(props).text};\n background: ${colorSet(props).textGradient};\n background-size: 100%;\n -webkit-background-clip: text;\n -moz-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n -moz-text-fill-color: transparent;\n }\n ` : null}\n\n /* Putting the &:hover rules inside the hover media queries prevents the button to remain in hover state after pressing it.\n We wouldn't need this is the pressed/active state would be different from the hover state */\n @media ${({theme}) => theme.mediaQuery.hover } {\n &:hover {\n /* First reset the background, if the hover doesn't have a gradient bg then we don't want to show the \"normal\" state */\n ${props => colorSet(props).bgGradient && !colorSet(props, ColorSetWanted.Hover).bgGradient ? css`\n background: none;\n ` : null}\n\n color: ${props => colorSet(props, ColorSetWanted.Hover).text};\n background-color: ${props => colorSet(props, ColorSetWanted.Hover).bg};\n border-color: ${props => colorSet(props, ColorSetWanted.Hover).border};\n ${props => colorSet(props, ColorSetWanted.Hover).bgGradient ? css`\n background: ${colorSet(props, ColorSetWanted.Hover).bgGradient};\n ` : null}\n box-shadow: ${props => (props.elevated && colorSet(props, ColorSetWanted.Hover).shadow) ? colorSet(props, ColorSetWanted.Hover).shadow : \"none\"};\n\n /* Reset the text gradient, if the hover doesn't have a text gradient */\n ${props => colorSet(props).textGradient && !colorSet(props, ColorSetWanted.Hover).textGradient ? css`\n & span {\n background: none;\n background-size: 100%;\n -webkit-background-clip: unset;\n -moz-background-clip: unset;\n background-clip: unset;\n -webkit-text-fill-color: unset;\n -moz-text-fill-color: unset;\n }\n ` : null}\n ${props => colorSet(props, ColorSetWanted.Hover).textGradient ? css`\n & span {\n background: ${colorSet(props, ColorSetWanted.Hover).text};\n background: ${colorSet(props, ColorSetWanted.Hover).textGradient};\n background-size: 100%;\n -webkit-background-clip: text;\n -moz-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n -moz-text-fill-color: transparent;\n }\n ` : null}\n }\n }\n\n &:active {\n /* First reset the background, if the hover doesn't have a gradient bg then we don't want to show the \"normal\" state */\n ${props => colorSet(props).bgGradient && !colorSet(props, ColorSetWanted.Active).bgGradient ? css`\n background: none;\n ` : null}\n\n color: ${props => colorSet(props, ColorSetWanted.Active).text};\n background-color: ${props => colorSet(props, ColorSetWanted.Active).bg};\n border-color: ${props => colorSet(props, ColorSetWanted.Active).border};\n ${props => colorSet(props, ColorSetWanted.Active).bgGradient ? css`\n background: ${colorSet(props, ColorSetWanted.Active).bgGradient};\n ` : null}\n box-shadow: ${props => (props.elevated && colorSet(props, ColorSetWanted.Active).shadow) ? colorSet(props, ColorSetWanted.Active).shadow : \"none\"};\n\n /* Reset the text gradient, if the hover doesn't have a text gradient */\n ${props => colorSet(props).textGradient && !colorSet(props, ColorSetWanted.Active).textGradient ? css`\n & span {\n background: none;\n background-size: 100%;\n -webkit-background-clip: unset;\n -moz-background-clip: unset;\n background-clip: unset;\n -webkit-text-fill-color: unset;\n -moz-text-fill-color: unset;\n }\n ` : null}\n ${props => colorSet(props, ColorSetWanted.Active).textGradient ? css`\n & span {\n background: ${colorSet(props, ColorSetWanted.Active).text};\n background: ${colorSet(props, ColorSetWanted.Active).textGradient};\n background-size: 100%;\n -webkit-background-clip: text;\n -moz-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n -moz-text-fill-color: transparent;\n }\n ` : null}\n }\n`;\n\nexport function colorSet(props: IButtonBoxProps, hoverSet?: ColorSetWanted) {\n let setKey: keyof IButtonPreset[\"colors\"] = \"normal\";\n if (hoverSet === ColorSetWanted.Active || props.active) {\n setKey = \"active\";\n }\n if (hoverSet === ColorSetWanted.Hover) {\n setKey = \"hover\";\n }\n if (props.disabled) {\n setKey = \"disabled\";\n }\n // const setKey: keyof IButtonPreset[\"colors\"] = props.disabled ? \"disabled\" : (hoverSet || props.active ? \"hover\" : \"normal\");\n if (props.colorSet[setKey]) {\n return props.colorSet[setKey];\n }\n return props.colorSet.normal;\n}\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const ButtonLabelBox = styledBox('ButtonLabelBox');","import styled, { css } from \"styled-components\";\nimport { CssRule } from \"../../../../themes/architecture/css-helpers/css-rule\";\n\ninterface IButtonIconWrapperProps {\n reverseOnRTL?: boolean;\n}\n\nexport const ButtonIconWrapperBox = styled.span<IButtonIconWrapperProps>`\n ${props => props.reverseOnRTL ? css`\n ${CssRule.For.RTL.build()} &{\n transform: scaleX(-1);\n }\n ` : null}\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const ButtonLabelPaddingBox = styledBox('ButtonLabelPaddingBox');","import {Check} from \"@sparkware/app-utils\";\nimport {Color} from \"../../../../common/utils/color-util\";\nimport {IButtonColor, IButtonColorSet, IButtonColorSetDef} from \"./button-props.interface\";\n\nexport function hoverColor(hex: string, hoverAdjustAmount: number = 17) {\n try {\n const color = Color.fromHex(hex);\n // i chose 60 here because it's a value close to sqrt(35^2 + 35^2 + 35^2)\n if (color.distanceFrom(new Color(255, 255, 255)) < 60) {\n return color.darken(hoverAdjustAmount).hexa();\n }\n return color.lighten(hoverAdjustAmount).hexa();\n } catch (e) {\n console.log(e);\n console.log(\"HOVER COLOR WAS CALLED WITH: \", hex);\n return hex;\n }\n}\n\nexport function activeColor(hex: string, activeAdjustAmount: number = 17) {\n try {\n const color = Color.fromHex(hex);\n // i chose 60 here because it's a value close to sqrt(35^2 + 35^2 + 35^2)\n if (color.distanceFrom(new Color(255, 255, 255)) < 60) {\n return color.darken(activeAdjustAmount * 1.75).hexa();\n }\n return color.darken(activeAdjustAmount).hexa();\n } catch (e) {\n console.log(e);\n console.log(\"ACTIVE COLOR WAS CALLED WITH: \", hex);\n return hex;\n }\n}\n\nexport function hoverGradient(gradient: string, hoverAdjustAmount?: number) {\n const clrs = gradient.split(\"#\");\n if (clrs.length > 1) {\n for (let i = 1; i < clrs.length; i++) {\n const hexClr = clrs[i].substring(0, 6);\n // get the hover color and remove # because we will add when joining\n const hexHoverClr = hoverColor(hexClr, hoverAdjustAmount).substring(1);\n clrs[i] = hexHoverClr + clrs[i].substring(6);\n }\n return clrs.join(\"#\");\n }\n return gradient;\n}\n\nexport function activeGradient(gradient: string, activeAdjustAmount?: number) {\n const clrs = gradient.split(\"#\");\n if (clrs.length > 1) {\n for (let i = 1; i < clrs.length; i++) {\n const hexClr = clrs[i].substring(0, 6);\n // get the hover color and remove # because we will add when joining\n const hexActiveClr = activeColor(hexClr, activeAdjustAmount).substring(1);\n clrs[i] = hexActiveClr + clrs[i].substring(6);\n }\n return clrs.join(\"#\");\n }\n return gradient;\n}\n\nexport function computeColorSet(colorSet: IButtonColorSetDef, defaultDisabled: IButtonColor): IButtonColorSet {\n const hoverAdjustAmount = Check.isNumber(colorSet.hover) ? colorSet.hover : undefined;\n const activeAdjustAmount = Check.isNumber(colorSet.active) ? colorSet.active : undefined;\n if (Check.isNumber(colorSet.hover)) {\n // I need to clone the colorSet otherwise I will delete hover globally (colorSet is passed by reference)\n colorSet = {\n ...colorSet\n };\n delete colorSet.hover;\n }\n if (Check.isNumber(colorSet.active)) {\n // I need to clone the colorSet otherwise I will delete active globally (colorSet is passed by reference)\n colorSet = {\n ...colorSet\n };\n delete colorSet.active;\n }\n\n let hoverBgGradient = undefined;\n if (colorSet.normal.bgGradient) {\n hoverBgGradient = hoverGradient(colorSet.normal.bgGradient, hoverAdjustAmount);\n }\n const defaultHover: IButtonColor = {\n ...colorSet.normal,\n bg: hoverColor(colorSet.normal.bg, hoverAdjustAmount),\n border: hoverColor(colorSet.normal.border, hoverAdjustAmount),\n bgGradient: hoverBgGradient\n };\n \n let activeBgGradient = undefined;\n if (colorSet.normal.bgGradient) {\n activeBgGradient = activeGradient(colorSet.normal.bgGradient, activeAdjustAmount);\n }\n const defaultActive: IButtonColor = {\n ...colorSet.normal,\n bg: activeColor(colorSet.normal.bg, activeAdjustAmount),\n border: activeColor(colorSet.normal.border, activeAdjustAmount),\n bgGradient: activeBgGradient\n };\n /**\n * I get a weird Typescript bug probably because interfaces IButtonColorSet and IButtonColorSetDef.\n * It says that type number is not assignable to IButtonColor but defaultHover cannot be number and is not defined as number.\n * I cast it as any\n */\n const cset: IButtonColorSet = {\n disabled: defaultDisabled,\n hover: defaultHover as any,\n active: defaultActive,\n ...colorSet,\n }\n return cset\n}\n","import styled, {css} from \"styled-components\";\n\ninterface IButtonSkeletonProps {\n fullWidth?: boolean;\n rounded?: boolean;\n margin?: React.CSSProperties[\"margin\"];\n width: number;\n height: number;\n strokeWidth: number;\n iconOnly: boolean;\n noRemUnits?: boolean;\n}\n\nexport const ButtonSkeletonBox = styled.div<IButtonSkeletonProps>`\n /**\n * Here i'm just creating a context for the em units to compute relative to this\n */\n font-size: ${props => props.noRemUnits ? \"10px\" : \"1rem\"};\n\n border-radius: ${props => props.rounded ? \"100px\" : props.theme.layout.border.radius};\n ${props => props.margin ? css`\n margin: ${props.margin};\n ` : null};\n\n box-sizing: border-box;\n height: ${props => props.height}em;\n\n width: ${props => {\n if (props.fullWidth) {\n return \"100%\";\n }\n if (props.iconOnly) {\n return props.height+\"em\";\n }\n return props.width+\"em\";\n }};\n \n border-width: ${props => props.strokeWidth}px;\n border-style: solid;\n\n\n background: rgba(255, 255, 255, 0.25);\n animation: PulsatingAnimation 1s alternate infinite;\n @keyframes PulsatingAnimation {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.25;\n }\n }\n`;\n","import React, {PropsWithChildren} from \"react\";\nimport { withTheme } from \"styled-components\";\nimport { OrbitTheme } from \"../../../themes/architecture/orbit-theme.interface\";\nimport { SvgSizeUnit } from \"../../icon/svg-icon/svg.icon\";\nimport { IButtonCommonProps, ButtonPreset, ButtonStroke, ButtonSizeVariant, IButtonIconProps, IButtonColorSet } from \"./button-props.interface\";\nimport { ButtonBox } from \"./boxes/button.box\";\nimport { ButtonLabelBox } from \"./boxes/label/button-label.box\";\nimport { ButtonIconWrapperBox } from \"./boxes/button-icon-wrapper.box\";\nimport { FlexShrinkItemBox } from \"../../../themes/architecture/css-helpers/flex\";\nimport { ButtonLabelPaddingBox } from \"./boxes/label-padding-box/button-label-padding.box\";\nimport { computeColorSet } from \"./button-hover-colors-helpers\";\nimport {ButtonSkeletonBox} from \"../skeleton/button-skeleton.box\";\n\ninterface IButtonProps extends IButtonCommonProps {\n preset: ButtonPreset;\n stroke?: ButtonStroke;\n icon?: IButtonIconProps;\n sizeVariant?: ButtonSizeVariant;\n className?: string;\n tooltip?: string;\n\n /**\n * theme is addded by styled-component's withTheme\n */\n theme: OrbitTheme;\n\n /* button interactions */\n onClick?(): void;\n onMouseEnter?(): void;\n onMouseLeave?(): void;\n\n /** skeleton */\n skeleton?: boolean;\n}\n\nconst ButtonIcon: React.FC<{IconComponent: IButtonIconProps[\"Component\"], size: number, options?: {reverseOnRTL?: boolean}}> = (props) => {\n if(!props.IconComponent) {\n return null;\n }\n\n const IconComponent = props.IconComponent;\n return <ButtonIconWrapperBox reverseOnRTL={props.options?.reverseOnRTL}>\n <IconComponent sizeUnit={SvgSizeUnit.Em} size={props.size} />\n </ButtonIconWrapperBox>\n};\n\nconst $Button: React.FC<PropsWithChildren<IButtonProps>> = (props) => {\n\n let {\n children, theme, preset, icon, stroke, sizeVariant, rounded, elevated, tooltip, labelOverflow,\n onClick, onMouseEnter, onMouseLeave,\n ...otherProps\n } = props;\n let hasIcon = !!icon;\n let hasLabel = !!children;\n\n onClick = props.disabled ? undefined : onClick;\n onMouseEnter = props.disabled ? undefined : onMouseEnter;\n onMouseLeave = props.disabled ? undefined : onMouseLeave;\n\n let presetValues = theme.baseUIComponents.button.presets[preset];\n let themePresetDefaults = theme.baseUIComponents.button.defaults;\n\n const colorSet: IButtonColorSet = computeColorSet(presetValues.colors, theme.baseUIComponents.button.disabledColorSet);\n\n stroke = stroke ?? presetValues.stroke ?? themePresetDefaults.stroke;\n rounded = rounded ?? presetValues.rounded ?? themePresetDefaults.rounded;\n elevated = elevated ?? presetValues.elevated ?? themePresetDefaults.elevated;\n sizeVariant = sizeVariant || \"s\";\n labelOverflow = labelOverflow || \"expand\";\n\n let iconSize = icon && icon.size ? icon.size : \"regular\";\n let iconPlacement = icon && icon.placement ? icon.placement : \"left\";\n\n let strokeWidth = theme.baseUIComponents.button.strokeValues[stroke];\n let width = theme.baseUIComponents.button.sizeVariantValues[sizeVariant].width;\n let height = theme.baseUIComponents.button.sizeVariantValues[sizeVariant].height;\n let iconSizeValue = theme.baseUIComponents.button.sizeVariantValues[sizeVariant].iconSize[iconSize];\n let fontSize = theme.baseUIComponents.button.sizeVariantValues[sizeVariant].fontSize || presetValues.fontSize || themePresetDefaults.fontSize;\n let lateralPadding = sizeVariant === \"xs\" ? 0.6 : 1;\n\n if (props.skeleton) {\n return <ButtonSkeletonBox\n width={width}\n height={height}\n rounded={rounded}\n margin={props.margin}\n fullWidth={props.fullWidth}\n strokeWidth={strokeWidth}\n iconOnly={hasIcon && !hasLabel}\n noRemUnits={props.noRemUnits}\n />\n }\n\n return <ButtonBox\n colorSet={colorSet}\n hasLabel={hasLabel}\n hasIcon={hasIcon}\n strokeWidth={strokeWidth}\n width={width}\n height={height}\n iconSize={iconSizeValue}\n lateralPadding={lateralPadding}\n labelOverflow={labelOverflow}\n rounded={rounded}\n elevated={elevated}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n title={tooltip}\n {...otherProps}\n >\n { icon ? (iconPlacement === \"left\" ? <ButtonIcon\n IconComponent={icon.Component}\n size={iconSizeValue}\n options={{reverseOnRTL: icon.reverseOnRTL}}\n /> : <FlexShrinkItemBox flexShrink={100} flexBasis={iconSizeValue + \"em\"} style={{height: iconSizeValue + \"em\"}} />) : null }\n { props.children ? <ButtonLabelPaddingBox\n lateralPadding={lateralPadding}\n sizeVariant={sizeVariant}\n labelOverflow={labelOverflow}\n >\n <ButtonLabelBox\n fontSize={fontSize}\n >\n {props.children}\n </ButtonLabelBox>\n </ButtonLabelPaddingBox> : null }\n { icon ? (iconPlacement === \"right\" ? <ButtonIcon\n IconComponent={icon.Component}\n size={iconSizeValue}\n options={{reverseOnRTL: icon.reverseOnRTL}}\n /> : <FlexShrinkItemBox flexShrink={100} flexBasis={iconSizeValue + \"em\"} style={{height: iconSizeValue + \"em\"}} />) : null }\n </ButtonBox>;\n\n}\n\nexport const Button = withTheme($Button);\n","import styled from \"styled-components\";\n\nexport const CurrencyAmountValueBox = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`","import styled from \"styled-components\";\n\nexport const CurrencyAmountErrorMessageBox = styled.div<{visible: boolean}>`\n color: ${props => props.theme.colors.danger};\n visibility: ${props => props.visible ? 'visible' : 'hidden'};\n font-size: 0.8em;\n min-height: 1.5em;\n`","import styled from \"styled-components\";\n\nexport const CurrencyAmountInputBox = styled.div`\n border: 2px solid ${({theme}) => theme.colors.boxBorderContrast};\n display: inline-flex;\n border-radius: 5px;\n overflow: hidden;\n padding: 5px 0;\n`;","import styled from \"styled-components\";\n\nexport const CurrencyAmountCurrencyBox = styled.div`\n background: none;\n border-right: 2px solid ${({theme}) => theme.colors.boxBorderContrast};\n padding: 5px 15px;\n flex-grow: 0;\n @media ${({theme}) => theme.mediaQuery.xs} {\n max-width: 280px;\n }\n`;","import styled from \"styled-components\";\n\nexport const CurrencyAmountInputValueBox = styled.input.attrs({\n type:\"number\",\n placeholder: \"0\",\n })`\n border: 0;\n padding: 5px 15px;\n font-size: 1.5rem;\n background: none;\n color: ${({theme}) => theme.colors.textLight};\n width: 100%;\n &:focus {\n outline: none;\n }\n ::-webkit-inner-spin-button{\n -webkit-appearance: none; \n margin: 0; \n }\n ::-webkit-outer-spin-button{\n -webkit-appearance: none; \n margin: 0; \n } \n`;","import React from \"react\";\n\nimport {CurrencyAmountValueBox} from \"./boxes/currency-amount-value.box\";\nimport {CurrencyAmountErrorMessageBox} from \"./boxes/currency-amount-error-message.box\";\nimport {CurrencyAmountInputBox} from \"./boxes/currency-amount-input.box\";\nimport {CurrencyAmountCurrencyBox} from \"./boxes/currency-amount-currency.box\";\nimport {CurrencyAmountInputValueBox} from \"./boxes/currency-amount-input-value.box\";\n\ninterface ICurrencyValueInputProps {\n value?: string;\n currencySymbol: string;\n cyClass: string;\n disabled?: boolean\n onChange: (value: string) => void;\n errorMessage?: string;\n errorCyClass?: string;\n}\n\nexport const CurrencyAmountInput: React.FC<ICurrencyValueInputProps> = (props) => {\n return <CurrencyAmountValueBox>\n <CurrencyAmountInputBox>\n <CurrencyAmountCurrencyBox>\n {props.currencySymbol}\n </CurrencyAmountCurrencyBox>\n <CurrencyAmountInputValueBox\n value={props.value}\n disabled={props.disabled}\n className={props.cyClass}\n onChange={(ev) => {props.onChange(ev.target.value)}}\n />\n </CurrencyAmountInputBox>\n <CurrencyAmountErrorMessageBox visible={Boolean(props.errorMessage)} className={props.errorCyClass}>\n {props.errorMessage}\n </CurrencyAmountErrorMessageBox>\n </CurrencyAmountValueBox>\n}\n","\nimport styled from \"styled-components\";\n\nexport const RadioInputBox = styled.input.attrs({\n type: \"radio\",\n})`\n -webkit-appearance: none;\n appearance: none;\n background-color: ${({theme}) => theme.colors.backgroundDark};\n width: 1.65em;\n height: 1.65em;\n border: 1px solid ${({theme}) => theme.colors.boxBorderLighter};\n border-radius: 50%;\n\n display: grid;\n place-content: center;\n &:before{\n content: \"\";\n width: 0.65em;\n height: 0.65em;\n border-radius: 50%;\n transform: scale(0);\n background-color: ${({theme}) => theme.colors.brandPrimary};;\n }\n\n &:checked{\n &:before{\n transform: scale(1);\n }\n }\n`;","import React, {PropsWithChildren} from \"react\";\nimport styled from \"styled-components\";\nimport {OrbitComponent} from \"../../components/base-components/orbit-component/orbit-component\";\n\nconst SelectWrapperBox = styled.div<{width?: string;}>`\n display: inline-block;\n position: relative;\n width: ${({width}) => width};\n color: ${({theme}) => theme.colors.textLight};\n`;\n\nconst SelectBox = styled.select<{width: string; hasError?: boolean;}>`\n width: ${({width}) => width};\n ${({theme}) => theme.font.presets.regular};\n font-size: 1.275rem;\n transition: border-radius 0.2s linear, border-color 0.2s linear;\n background-color: ${props => props.theme.colors.backgroundMiddleDark};\n color: inherit;\n border-radius: ${({theme}) => theme.layout.border.radius};\n border-color: ${props => props.hasError ? props.theme.colors.danger : props.theme.colors.boxBorderLighter};\n &:hover {\n border-color: ${props => props.hasError ? props.theme.colors.danger : props.theme.colors.boxBorderContrast};;\n }\n border-width: 1px;\n border-style: solid;\n padding: 1rem 4rem 1rem 1.6rem;\n\n /* REMOVE THE DEFAULT ARROW */\n /* for Firefox */\n -moz-appearance: none;\n /* for Safari, Chrome, Opera */\n -webkit-appearance: none;\n /* for IE10 */\n &::-ms-expand {\n display: none;\n }\n`;\n\nconst SelectBoxArrow = styled.div`\n position: absolute;\n right: 0.6rem;\n top: -0.3rem;\n width: 3rem;\n padding: 0.7rem;\n margin-top: 0.72rem;\n pointer-events: none;\n border-radius: 50%;\n\n transition: transform 0.2s linear;\n transform: rotate(90deg);\n`;\n\ninterface ISelectProps extends PropsWithChildren {\n // standard props from native html select element that will be passed directly\n id?: string;\n name?: string;\n value?: string | number;\n onChange?(event: React.ChangeEvent<HTMLSelectElement>): void;\n className?: string;\n\n // custom props, not native html select element\n hasError?: boolean;\n width?: string;\n}\n\nexport class Select extends OrbitComponent<ISelectProps> { // React.SelectHTMLAttributes<HTMLSelectElement>\n render() {\n let {width, ...passThroughProps} = this.props;\n width = width || \"auto\";\n const selectWidth = width !== \"auto\" ? \"100%\" : \"auto\";\n\n const ArrowIcon = this.services.theme.currentTheme.icons.rightArrowIcon;\n return <SelectWrapperBox width={width}>\n <SelectBox\n {...passThroughProps}\n width={selectWidth}\n >\n {this.props.children}\n </SelectBox>\n <SelectBoxArrow>\n <ArrowIcon size={1.6} className=\"select-arrow\" />\n </SelectBoxArrow>\n </SelectWrapperBox>;\n }\n}","import * as React from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { CssRule } from '../../../themes/architecture/css-helpers/css-rule';\nimport {PropsWithChildren} from \"react\";\n\nexport enum SvgSizeUnit {\n Rem = \"rem\",\n Em = \"em\",\n Px = \"px\",\n Percent = \"%\"\n}\n\nexport interface ISvgIconProps extends PropsWithChildren {\n /**\n * The size of the icon.\n * @default 2.4\n */\n size?: number;\n /**\n * if false, the property size represents the width\n * if true, the property size represents the height\n * @default false\n */\n sizeIsHeight?: boolean;\n /**\n * Css unit: rem, em, px, %\n * @default rem\n */\n sizeUnit?: SvgSizeUnit;\n /**\n * Additional css,\n * Do not abuse this prop. You will be punished\n */\n style?: React.CSSProperties;\n /**\n * Additional class name for styling, selectors\n * Do not abuse this prop. You will be punished\n */\n className?: string;\n /**\n * title is required for SEO\n */\n title?: string;\n}\n\ninterface ISvgIconPrivateProps {\n /**\n * The aspect ratio of the icon. is expressed by the width divided by the height.\n * For example an icon that is 16:9 will have a ratio of 16/9 = 1.(7) ~= 1.78\n * Default is 1, square icon\n * @default 1\n */\n ratio?: number;\n /**\n * Specific svg property\n */\n viewBox?: string;\n /**\n * Some icons needs to be flipped on RTL languages, for example left arrow icon (<) must be flipped, and will look like a right arrow icon (>)\n */\n flipOnRTL?: boolean;\n /**\n * Used to normalize / reset the fill property. Some of the icons have black backdrop opacity without it.\n * alternative to wrapping the whole svg markup content in <g fill=\"none\"></g>. It doesn't matter which one is used\n */\n fill?: string;\n}\n\nconst Svg = styled.svg<{flipOnRTL?: boolean}>`\n ${({flipOnRTL}) => flipOnRTL ? css`\n ${CssRule.For.RTL.build()} & {\n transform: scaleX(-1);\n }`\n : null}\n`;\n\nexport class SvgIcon extends React.Component<ISvgIconProps & ISvgIconPrivateProps> {\n render() {\n const sizeUnit = this.props.sizeUnit ? this.props.sizeUnit : SvgSizeUnit.Rem;\n const defaultSize = sizeUnit === SvgSizeUnit.Px ? 24 : (sizeUnit === SvgSizeUnit.Percent ? 100 : 2.4);\n const size = this.props.size ? this.props.size : defaultSize;\n const ratio = this.props.ratio ? this.props.ratio : 1;\n\n const width = this.props.sizeIsHeight ? (size * ratio) : size;\n const height = this.props.sizeIsHeight ? size : (size / ratio);\n\n const viewBox = this.props.viewBox ?? \"0 0 24 24\";\n const style = {\n display: \"block\",\n ...this.props.style\n };\n\n return (\n <Svg\n flipOnRTL={this.props.flipOnRTL}\n width={width + sizeUnit} height={height + sizeUnit}\n style={style}\n viewBox={viewBox}\n version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\n className={this.props.className}\n fill={this.props.fill || \"unset\"}\n >\n {this.props.title ? <title>{this.props.title}</title> : null}\n {this.props.children}\n </Svg>\n );\n }\n}\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const DividerBox = styledBox('DividerBox');","import styled from \"styled-components\";\n\nexport const SpacerBox = styled.div<{height: string}>`\n height: ${({height}) => height};\n`;\n","import styled from \"styled-components\";\n\nexport const XCloseButtonBox = styled.button`\n cursor: pointer;\n background-image: url(\"${props => props.theme.assets.images.close_modal_dialog_png.toString()}\");\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n &:hover {\n opacity: 0.5;\n }\n`;","import {IArenaViewModel} from \"../../services/arenas/models/arenas/arena-view-model.interface\";\nimport React from 'react';\nimport {observer} from \"mobx-react\";\n\ninterface SwiperWindowComponentProps {\n windowPosition: number;\n arena: IArenaViewModel;\n}\n\nexport const SwiperWindowComponent: React.FC<SwiperWindowComponentProps> = observer((props) => {\n return props.arena.renderList(props.windowPosition);\n});\n\n\n","import {MutableRefObject, useEffect, useState} from \"react\";\n\ninterface UseIsInViewPortHookOptions {\n intersectionRoot?: string;\n intersectionThreshold?: number;\n}\n\nexport default function useIsInViewPort(ref: MutableRefObject<any>, opt?: UseIsInViewPortHookOptions) {\n\n const [isIntersecting, setIntersecting] = useState(false);\n\n useEffect(() => {\n const intersectionObserverInit: IntersectionObserverInit = {};\n if(opt){\n intersectionObserverInit.threshold = opt.intersectionThreshold;\n intersectionObserverInit.root = document.getElementById(opt.intersectionRoot);\n }\n\n const intersectionObserverHandler = (entry: IntersectionObserverEntry): boolean => opt?.intersectionThreshold\n ? entry.isIntersecting \n : entry.intersectionRatio > 0 || entry.isIntersecting;\n const observer = new IntersectionObserver(\n ([entry]) => setIntersecting(intersectionObserverHandler(entry)), intersectionObserverInit\n );\n if (ref.current) {\n observer.observe(ref.current);\n }\n return () => {\n try {\n observer.disconnect()\n } catch (err) {\n console.error('Failed to disconnect observer');\n }\n }\n }, [ref, opt]);\n\n return isIntersecting;\n}\n","import React, {useEffect, useRef, useState} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {SwiperWindowComponent} from \"../orbit-swiper/swiper-window.component\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {reaction} from \"mobx\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport useIsInViewPort from \"../../react-hooks/use-is-in-viewport.hook\";\n\ninterface ArenaGamesListsComponentProps {\n arenaName: string;\n}\n\nexport const ArenaGamesListsComponent: React.FC<ArenaGamesListsComponentProps> = observer((props) => {\n const services = useServices();\n const [listsCount, setListsCount] = useState(0);\n const [hasMoreLists, setHasMoreLists] = useState(true);\n const intersectionSpyRef = useRef<HTMLDivElement | null>(null);\n let isIntersectionSpyInViewport = useIsInViewPort(intersectionSpyRef);\n\n const arena = services.arenas.getArena(props.arenaName);\n\n const loadNextBatch = () => {\n const nextBatch = arena.getNextBatchSize(listsCount);\n if(nextBatch === 0) {\n if(hasMoreLists !== false) {\n setHasMoreLists(false);\n }\n } else {\n setListsCount(listsCount + nextBatch);\n }\n }\n\n useEffect(() => {\n const reactionDispose = reaction(() => services.user.isAuthorized,\n () => {\n setListsCount(0);\n setHasMoreLists(true);\n });\n\n return () => {\n reactionDispose();\n }\n }, [services.user.isAuthorized]);\n\n useEffect(() => {\n\n const spyRectangle = intersectionSpyRef.current.getBoundingClientRect();\n //spyRectangle.top <= window.innerHeight is here because IntersectionObserver used by useIsInViewPort hook has a delay in detecting that the element is not in the viewport anymore.\n if(spyRectangle.top <= window.innerHeight && hasMoreLists && isIntersectionSpyInViewport) {\n loadNextBatch();\n }\n });\n\n\n\n\n const range = Array.from({length: listsCount}, (x, i) => i + 1);\n\n return (\n\n <React.Fragment key={`${props.arenaName}_LISTS`}>\n {range.map(listWindowPosition => (<SwiperWindowComponent key={listWindowPosition}\n windowPosition={listWindowPosition}\n arena={arena}/>))}\n\n <div style={{ width: \"100%\", height: \"1px\"}}\n ref={intersectionSpyRef}\n className={CyClass('cy-lists-intersection-observer-target')}/>\n </React.Fragment>\n );\n\n});\n\n","import styled, {css} from \"styled-components\";\n\ninterface ILiveCasinoGridItemDefaultBoxProps {\n fluidWidth?: boolean; // when true, don't set the width, let it flow within its parent\n}\n\nexport const LiveCasinoGridItemDefaultBox = styled.div<ILiveCasinoGridItemDefaultBoxProps>`\n box-sizing: border-box;\n\n /* Prevents CSS Transform flicker */\n backface-visibility: hidden;\n\n ${({fluidWidth}) => !fluidWidth && css`\n\n width: calc(100% / 5);\n padding: 1em 0.5em;\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n width: calc(100% / 3);\n }\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n width: calc(100% / 4);\n }\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: calc(100% / 2);\n padding: 0.5em 0.25em;\n }\n `}\n`;","import {LiveCasinoGridItemDefaultBox} from \"./live-casino-grid-item.default.box\";\n\nexport const LiveCasinoGridItemBox = LiveCasinoGridItemDefaultBox;","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemInfoItemBox = styledBox('LiveCasinoGridItemInfoItemBox');\n","import styled from \"styled-components\";\nimport { Image } from \"../../../../../../raw-components/image/image\";\n\nexport const LiveCasinoGridItemInfobarIconDefaultBox = styled(Image)`\n margin-right: 0.25em;\n`;","import {LiveCasinoGridItemInfobarIconDefaultBox} from \"./live-casino-grid-item-infobar-icon.default.box\";\n\nexport const LiveCasinoGridItemInfobarIconBox = LiveCasinoGridItemInfobarIconDefaultBox;","import styled from \"styled-components\";\nimport {ITEM_WRAPPER_BOX} from \"../../css-constants\";\nimport { Image } from \"../../../../../raw-components/image/image\";\n\nexport const LiveCasinoGridItemThumbnailImageDefaultBox = styled(Image)<{filterBlur?: boolean}>`\n width: 100%;\n transition: transform 0.25s ease;\n ${({filterBlur}) => filterBlur ? 'filter: blur(2px)' : null};\n .${ITEM_WRAPPER_BOX}:hover &{\n transform: scale(1.2);\n }\n`;","import {LiveCasinoGridItemThumbnailImageDefaultBox} from \"./live-casino-grid-item-thumbnail-image.default.box\";\n\nexport const LiveCasinoGridItemThumbnailImageBox = LiveCasinoGridItemThumbnailImageDefaultBox;","export const ITEM_WRAPPER_BOX = 'item-wrapper-box';\nexport const RED = 'red';\nexport const GREEN = 'green';","import styled from \"styled-components\";\nimport {hexToRgba} from \"../../../../../../themes/hex-to-rgba\";\n\nexport const LiveCasinoGridItemInfobarDefaultBox = styled.div`\n display: flex;\n left: 0;\n bottom: 0;\n width: 100%;\n padding: 0.5em 1em;\n background: ${props => hexToRgba(props.theme.components.newLiveCasino.colors.gridItem.infobarBackground, 0.75)};\n position: absolute;\n\n &::before {\n content: \"\";\n position: absolute;\n top: -1px;\n left: 0;\n width: 100%;\n height: 1px;\n background: linear-gradient(90deg, transparent, ${props => props.theme.colors.backgroundContrast}, transparent);\n }\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding: 0.25em;\n }\n`;","import styled from \"styled-components\";\nimport {hexToRgba} from \"../../../../../../themes/hex-to-rgba\";\nimport {LiveCasinoGridItemInfobarDefaultBox} from \"./live-casino-grid-item-infobar.default.box\";\n\nexport const LiveCasinoGridItemInfobarCasino777Box = styled(LiveCasinoGridItemInfobarDefaultBox)`\n background: ${props => hexToRgba(props.theme.components.newLiveCasino.colors.gridItem.infobarBackground, 0.92)};\n &::before {\n background: transparent linear-gradient(90deg, transparent 0%, ${props => props.theme.colors.background} 33%, ${props => props.theme.colors.background} 69%, transparent 100%) 0% 0% no-repeat padding-box;\n }\n`;\n","import styled from \"styled-components\";\nimport {hexToRgba} from \"../../../../../../themes/hex-to-rgba\";\nimport {LiveCasinoGridItemInfobarDefaultBox} from \"./live-casino-grid-item-infobar.default.box\";\n\nexport const LiveCasinoGridItemInfobarMrGreenBox = styled(LiveCasinoGridItemInfobarDefaultBox)`\n background: ${props => hexToRgba(props.theme.colors.horizontalLineBackgroundColor, 0.6)};\n &::before {\n background: none;\n }\n`;\n","import { styledByTheme } from \"../../../../../../themes/architecture/styled-by-theme\";\nimport { LiveCasinoGridItemInfobarCasino777Box } from \"./live-casino-grid-item-infobar.casino777.box\";\nimport {LiveCasinoGridItemInfobarDefaultBox} from \"./live-casino-grid-item-infobar.default.box\";\nimport {LiveCasinoGridItemInfobarMrGreenBox} from \"./live-casino-grid-item-infobar.mrgreen.box\";\n\nexport const LiveCasinoGridItemInfobarBox = styledByTheme(LiveCasinoGridItemInfobarDefaultBox)\n .forCasino777(LiveCasinoGridItemInfobarCasino777Box)\n .forMrGreen(LiveCasinoGridItemInfobarMrGreenBox)\n .apply();\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemClosedMessageBox = styledBox('LiveCasinoGridItemClosedMessageBox');\n","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemThumbnailOverlayDefaultBox = styled.div`\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n`;","import {LiveCasinoGridItemThumbnailOverlayDefaultBox} from \"./live-casino-grid-item-thumbnail-overlay.default.box\";\n\nexport const LiveCasinoGridItemThumbnailOverlayBox = LiveCasinoGridItemThumbnailOverlayDefaultBox;","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemThumbnailDefaultBox = styled.div`\n position: relative;\n width: 100%;\n height: 0;\n padding-bottom: 56.25%; // keeps a 16:9 ratio\n overflow: hidden;\n`;","import {LiveCasinoGridItemThumbnailDefaultBox} from \"./live-casino-grid-item-thumbnail.default.box\";\n\nexport const LiveCasinoGridItemThumbnailBox = LiveCasinoGridItemThumbnailDefaultBox;","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemWrapperBox = styledBox(\"LiveCasinoGridItemWrapperBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemTitleBox = styledBox(\"LiveCasinoGridItemTitleBox\");\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemBetBehindButtonBox = styledBox('LiveCasinoGridItemBetBehindButtonBox');\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemJackpotBox = styledBox('LiveCasinoGridItemJackpotBox');\n","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemOpenAtBox = styled.div`\n width: 100%;\n font-size: 2.25em;\n font-weight: 700;\n`;","import React from \"react\";\nimport { observer } from 'mobx-react';\nimport classNames from \"classnames\";\nimport { GameInfo, OpenGameParameters } from '../../../../services/games/game-info';\nimport { OrbitComponent } from '../../../base-components/orbit-component/orbit-component';\nimport { ILiveTableInfo } from '../../../../services/live-table-feeds-service/live-table-feeds.service.interface';\nimport { Check } from \"@sparkware/app-utils\";\nimport { LiveCasinoGridItemInfobarBox } from \"./boxes/infobar/live-casino-grid-item-infobar.box\";\nimport { LiveCasinoGridItemInfobarIconBox } from \"./boxes/infobar/infobar-icon/live-casino-grid-item-infobar-icon.box\";\nimport { LiveCasinoGridItemInfoItemBox } from \"./boxes/infobar/info-item/live-casino-grid-item-info-item.box\";\nimport { LiveCasinoGridItemClosedMessageBox } from \"./boxes/closed-message/live-casino-grid-item-closed-message.box\";\nimport { LiveCasinoGridItemThumbnailOverlayBox } from \"./boxes/thumbnail/live-casino-grid-item-thumbnail-overlay.box\";\nimport { LiveCasinoGridItemThumbnailBox } from \"./boxes/thumbnail/live-casino-grid-item-thumbnail.box\";\nimport { LiveCasinoGridItemWrapperBox } from \"./boxes/wrapper/live-casino-grid-item-wrapper.box\";\nimport { LiveCasinoGridItemBox } from \"./boxes/grid-item/live-casino-grid-item.box\";\nimport { ITEM_WRAPPER_BOX } from \"./css-constants\";\nimport { LiveCasinoGridItemThumbnailImageBox } from \"./boxes/thumbnail/live-casino-grid-item-thumbnail-image.box\";\nimport { LiveCasinoGridItemTitleBox } from \"./boxes/title/live-casino-grid-item-title.box\";\nimport { LiveCasinoGridItemBetBehindButtonBox } from \"./boxes/infobar/bet-behind/live-casino-grid-item-bet-behind-button.box\";\nimport { LiveCasinoGridItemJackpotBox } from \"./boxes/infobar/jackpot/live-casino-grid-item-jackpot.box\";\nimport { addQueryParam } from \"../../../../../utils/url-utils\";\nimport { LiveCasinoGridItemOpenAtBox } from \"./boxes/closed-message/live-casino-grid-item-open-at.box\";\nimport { TableSeatsComponent } from \"./shared-components/table-seats.component\";\nimport { RouletteDrawsComponent } from \"./shared-components/roulette-draws.component\";\nimport { FlexGrowItemBox } from \"../../../../themes/architecture/css-helpers/flex\";\nimport { ComponentServicesPick } from \"../../../../services/component-services-pick\";\nimport { withServices } from \"../../../../react-hooks/with-services\";\nimport {LiveCasinoMinMaxBetComponentProps} from \"./shared-components/live-casino-min-max-bet.component.props\";\n\n\nexport interface ILiveCasinoArenaGridItemProps extends ComponentServicesPick<'jackpots'> {\n tableId: number;\n gameInfo: GameInfo;\n listTitle: string;\n gameIndex: number;\n seoCategory: string;\n liveTable: ILiveTableInfo;\n fluidWidth?: boolean;\n captureGameElementRef: (element: any) => void;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent<ILiveCasinoArenaGridItemProps> {\n\n private _openGame = (gameInfo: GameInfo) => {\n const openGameParams: OpenGameParameters = {\n isRealMode: true,\n pageName: this.props.seoCategory,\n gameIndex: this.props.gameIndex,\n listTitle: this.props.listTitle\n };\n\n gameInfo.open(openGameParams);\n };\n\n\n private _renderDealerName() {\n\n const tableInfo = this.props.liveTable;\n const isMobilePhone = this.services.device.isMobile && !this.services.device.isTablet;\n\n if (Check.isEmpty(tableInfo) || Check.isNullOrUndefined(tableInfo.Dealer) || tableInfo.Dealer.length === 0 || isMobilePhone) {\n return null;\n }\n\n return (\n <LiveCasinoGridItemInfoItemBox className={'cy-live-casino-grid-item-infobar-dealer-name'}>\n <LiveCasinoGridItemInfobarIconBox alt={'Dealer_' + tableInfo.Dealer} src={this.services.theme.currentTheme.assets.images.live_arena.dealer_icon_png.toString()} />\n <span>{tableInfo.Dealer}</span>\n </LiveCasinoGridItemInfoItemBox>\n )\n }\n\n private _renderSeatsCount() {\n return <TableSeatsComponent tableInfo={this.props.liveTable} />;\n }\n\n private _renderRouletteDraws() {\n return <RouletteDrawsComponent tableInfo={this.props.liveTable} />;\n }\n\n private _renderJackpot() {\n let jpValue = this.props.jackpots.getGameJackpot(this.props.gameInfo.gameType);\n if (!Check.isNullOrUndefined(jpValue)) {\n return <LiveCasinoGridItemJackpotBox>\n {this.services.currency.formatMoney(jpValue)}\n </LiveCasinoGridItemJackpotBox>;\n }\n return null;\n }\n\n private _renderBetBehindButton() {\n const tableInfo = this.props.liveTable;\n let tableIsFull = false;\n if (tableInfo.Seats && tableInfo.SeatsTaken) {\n tableIsFull = tableInfo.SeatsTaken.length === tableInfo.Seats;\n }\n\n if (Check.isEmpty(tableInfo) || !tableInfo.BetBehind || !tableIsFull) {\n return null;\n }\n\n return (\n <LiveCasinoGridItemBetBehindButtonBox className=\"cy-live-casino-grid-item-infobar-bet-behind\">\n <span>Bet behind</span>\n </LiveCasinoGridItemBetBehindButtonBox>\n );\n }\n\n private _renderGameInfobar() {\n\n const tableInfo = this.props.liveTable;\n\n if (Check.isEmpty(tableInfo) || !tableInfo.IsOpen) {\n return null;\n }\n\n return (\n <LiveCasinoGridItemInfobarBox className={'cy-live-casino-grid-item-infobar'}>\n {this._renderDealerName()}\n {this._renderSeatsCount()}\n <FlexGrowItemBox />\n {this._renderRouletteDraws()}\n {this._renderJackpot()}\n {this._renderBetBehindButton()}\n </LiveCasinoGridItemInfobarBox>\n );\n }\n\n private _renderGameIsClosed() {\n const tableInfo = this.props.liveTable;\n\n if (Check.isEmpty(tableInfo) || tableInfo.IsOpen) {\n return null;\n }\n\n return (\n <LiveCasinoGridItemClosedMessageBox className=\"cy-live-casino-grid-item-closed-message\">\n <span>{this.services.translation.translate(\"LIVE_ARENA_TABLE_IS_CLOSED_MESSAGE\")}</span>\n <LiveCasinoGridItemOpenAtBox className=\"cy-live-casino-grid-item-open-at\">{this.props.liveTable?.OperationHoursStartTime}</LiveCasinoGridItemOpenAtBox>\n </LiveCasinoGridItemClosedMessageBox>\n );\n }\n\n private _renderGameThumbnailImage() {\n const tableInfo: ILiveTableInfo = this.props.liveTable;\n const gameInfo: GameInfo = this.props.gameInfo;\n let gameTitle: string;\n let gameImage: string;\n\n if (Check.isEmpty(tableInfo) || !tableInfo.TableImage) {\n gameTitle = gameInfo?.title;\n gameImage = gameInfo?.gameArenaIcon;\n } else {\n // We need this random because we want to force react to reload the image because the url of the image is identical but the image changed.\n let imageRandom = Math.random();\n\n gameTitle = tableInfo.Name;\n\n gameImage = addQueryParam(tableInfo.TableImage, imageRandom.toString());\n }\n\n return (<LiveCasinoGridItemThumbnailImageBox lazy src={gameImage} alt={gameTitle} className={'cy-live-casino-grid-item-thumbnail-image'} />);\n }\n\n private _renderGameThumbnail() {\n const liveCasinoMinMaxBetProps: LiveCasinoMinMaxBetComponentProps = {\n liveTable: this.props.liveTable,\n gameInfo: this.props.gameInfo\n }\n\n return (\n <LiveCasinoGridItemThumbnailBox className=\"cy-live-casino-grid-item-thumbnail\">\n {this._renderGameThumbnailImage()}\n <LiveCasinoGridItemThumbnailOverlayBox className=\"cy-live-casino-grid-item-thumbnail-overlay\">\n {this.services.regulation.current.components.renderLiveCasinoMinMaxBet(liveCasinoMinMaxBetProps)}\n {this._renderGameInfobar()}\n {this._renderGameIsClosed()}\n </LiveCasinoGridItemThumbnailOverlayBox>\n </LiveCasinoGridItemThumbnailBox>\n );\n }\n\n private _renderGameTitle() {\n // Render an empty character so the div doesn't just collapse\n let title = this.props.gameInfo?.title || \"\\xa0\";\n const tableInfo = this.props.liveTable;\n\n if (tableInfo && tableInfo.Name !== undefined && tableInfo.Name.length > 0) {\n title = tableInfo.Name;\n }\n\n return (\n <LiveCasinoGridItemTitleBox className=\"cy-live-casino-grid-item-title\">\n <span>{title}</span>\n </LiveCasinoGridItemTitleBox>\n );\n }\n\n private _renderGameItem() {\n return (\n <LiveCasinoGridItemBox\n fluidWidth={this.props.fluidWidth}\n className={classNames(`cy-live-casino-grid-item`, `cy-live-casino-grid-item-${this.props.gameInfo.gameType}`, `game-type-${this.props.gameInfo.gameType}`)} ref={this.props.captureGameElementRef}\n >\n <LiveCasinoGridItemWrapperBox onClick={() => this._openGame(this.props.gameInfo)} className={classNames('cy-live-casino-grid-item-inner-wrapper', ITEM_WRAPPER_BOX)}>\n {this._renderGameThumbnail()}\n {this._renderGameTitle()}\n </LiveCasinoGridItemWrapperBox>\n </LiveCasinoGridItemBox>\n );\n }\n\n render() {\n try {\n return this._renderGameItem();\n } catch (err) {\n this.services.logger.error(`Failed to render LiveCasinoArenaGridItem for game ${this.props.gameInfo && this.props.gameInfo.gameType}`, err);\n return null;\n }\n }\n}\n\nexport const LiveCasinoArenaGridItem = withServices(ComponentBody, ['jackpots']);","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridBox = styledBox('LiveCasinoGridBox');\n","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemSkeletonBox = styled.div`\n padding-top: 56.25%;\n`;","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemSkeletonTitleBox = styled.div`\n padding: 0.5em 1em;\n font-size: 1.2em;\n color: rgba(0, 0, 0, 0);;\n overflow: hidden;\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding: 0.25em 0.5em;\n }\n animation: AmountSkeletonAnimation 1.5s linear infinite;\n @keyframes AmountSkeletonAnimation {\n 0% {\n background-color: ${props => props.theme.components.newLiveCasino.colors.gridItem.wrapperBorder};\n }\n 50% {\n background-color: ${props => props.theme.colors.backgroundLight};\n }\n 100% {\n background-color: ${props => props.theme.components.newLiveCasino.colors.gridItem.wrapperBorder};\n }\n }\n`;","import styled from \"styled-components\";\n\nexport const LiveCasinoGridItemSkeletonWrapperBox = styled.div`\n display: flex;\n flex-direction: column;\n border: 1px solid ${props => props.theme.components.newLiveCasino.colors.gridItem.wrapperBorder};\n border-radius: 3px;\n overflow: hidden;\n`;","import React from \"react\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {LiveCasinoGridBox} from \"./boxes/grid/live-casino-grid.box\";\nimport {observable, action, makeObservable} from \"mobx\";\nimport {LiveCasinoGridItemBox} from \"./boxes/grid-item/live-casino-grid-item.box\";\nimport {LiveCasinoArenaGridItem} from './live-casino-arena-grid-item.component';\nimport {LiveCasinoGridItemSkeletonBox} from \"./boxes/grid/skeleton/live-casino-grid-item-skeleton.box\";\nimport {LiveCasinoGridItemSkeletonTitleBox} from \"./boxes/grid/skeleton/live-casino-grid-item-skeleton-title.box\";\nimport {LiveCasinoGridItemSkeletonWrapperBox} from \"./boxes/grid/skeleton/live-casino-grid-item-skeleton-wrapper.box\";\nimport {LiveCasinoPromotionalBannerConfiguration} from '../../../../services/configurations/config-data-sections/arenas.configuration';\nimport {BannerComponent} from \"../../../banner/banner.component\";\nimport {\n LiveTableTabConfiguration\n} from \"../../../../services/live-table-feeds-service/live-table-feeds.service.interface\";\nimport {SingleGameComponent} from \"../../../single-game/single-game.component\";\n\nexport interface ILiveCasinoArenaGridProps {\n seoCategory: string;\n useAISortedList: boolean;\n promotionalBannerConfig?: LiveCasinoPromotionalBannerConfiguration;\n}\n\n@observer\nexport class LiveCasinoArenaGrid extends OrbitComponent<ILiveCasinoArenaGridProps> {\n private _gameElementRef: HTMLDivElement | null = null;\n private _gridElementRef: HTMLDivElement | null = null;\n\n constructor(props: ILiveCasinoArenaGridProps) {\n super(props);\n\n makeObservable(this);\n }\n\n get liveTabConfigs(): LiveTableTabConfiguration | null {\n return this.services.liveTableFeeds.currentArenaTabConfiguration;\n }\n\n @observable.ref\n private _cmsBannerPosition: number = 0;\n\n @observable.ref\n private _numberOfGamesPerRow: number = 0;\n\n private _numberOfGames: number = 0;\n\n private _captureGameElementRef = (gameElement: HTMLDivElement | null) => {\n this._gameElementRef = gameElement;\n this._computeNumberOfGamesInARow();\n };\n\n private _captureGridElementRef = (gridElement: HTMLDivElement | null) => {\n this._gridElementRef = gridElement;\n this._computeNumberOfGamesInARow();\n };\n\n @action.bound\n private _setCMSBannerPosition() {\n let cmsBannerPositionFromConfig = this._numberOfGamesPerRow * this.props?.promotionalBannerConfig?.displayRowPlace;\n this._cmsBannerPosition = this._numberOfGames > cmsBannerPositionFromConfig ? cmsBannerPositionFromConfig : this._numberOfGames;\n }\n\n private _computeNumberOfGamesInARow() {\n\n if (!this._gridElementRef || !this._gameElementRef) return;\n\n try {\n this._numberOfGamesPerRow = Math.round(Number(this._gridElementRef[\"offsetWidth\"]) / Number(this._gameElementRef[\"offsetWidth\"]));\n this._setCMSBannerPosition();\n } catch (error) {\n this.services.logger.error(\"Failed to compute number of live games in a row\", error);\n }\n }\n\n\n private _renderPromotionalBanner() {\n\n if (Check.isNullOrUndefined(this.props.promotionalBannerConfig)) return null;\n\n let promotionalBanner = this.liveTabConfigs?.headerConfiguration?.banners?.promotionalBanner;\n if (!promotionalBanner) {\n promotionalBanner = this.props.promotionalBannerConfig;\n }\n\n\n return (\n <BannerComponent\n templateID={promotionalBanner.templateID}\n componentID={promotionalBanner.componentID}\n bannerAdminPlaceholderId={promotionalBanner.bannerAdminPlaceholderId}\n showPlaceholder={false}\n />\n );\n }\n\n private _renderGridSkeleton() {\n\n let skeletons = [];\n\n for (var i = 0; i < 12; i++) {\n skeletons.push(\n <LiveCasinoGridItemBox key={i}>\n <LiveCasinoGridItemSkeletonWrapperBox>\n <LiveCasinoGridItemSkeletonBox />\n <LiveCasinoGridItemSkeletonTitleBox>Loading</LiveCasinoGridItemSkeletonTitleBox>\n </LiveCasinoGridItemSkeletonWrapperBox>\n </LiveCasinoGridItemBox>\n );\n }\n\n return skeletons;\n }\n\n private _renderAbGameInfo(tableId: number, gameIndex: number, key: number, listTitle: string) {\n return this.services.abTestingFeatureDataProvider.staticLiveArena.isEnabled ?\n <SingleGameComponent key={this.services.games.gamesMap[tableId].gameType}\n gameType={this.services.games.gamesMap[tableId].gameType}\n gameIndex={gameIndex}\n seoCategory={this.props.seoCategory}\n listTitle={listTitle}\n useSquareIcons={true}\n disableGameInfoHover={false} /> :\n <LiveCasinoArenaGridItem\n tableId={tableId}\n gameInfo={this.services.games.gamesMap[tableId]}\n gameIndex={gameIndex}\n listTitle={listTitle}\n liveTable={this.services.liveTableFeeds.getTableInfo(tableId)}\n seoCategory={this.props.seoCategory}\n captureGameElementRef={this._captureGameElementRef}\n />\n }\n\n private _renderGridItem(tableId: number, gameIndex: number, key: number) {\n\n let listTitle = this.services.liveTableFeeds.currentArenaTabConfiguration?.gridConfiguration.title;\n\n //this if is a duplicate with the one in live-casino-arena-navbar-button.component.tsx\n // in the future we should look for a way to refactor this for_you logic and have it come from the admin somehow, have only one source of truth\n if (this.services.user.isAuthorized && listTitle === \"TOP_EVO_GAMES\") {\n listTitle = \"FOR_YOU_GAMES\";\n }\n const shouldRenderPromoBanner = gameIndex === (this._cmsBannerPosition - 1);\n\n return (\n <React.Fragment key={key}>\n {this._renderAbGameInfo(tableId, gameIndex, key, listTitle)} \n {\n shouldRenderPromoBanner && this._renderPromotionalBanner()\n }\n </React.Fragment>\n );\n }\n\n private _renderGames() {\n\n let gameIds: number[] = [];\n\n\n if (this.liveTabConfigs) {\n gameIds = this.services.liveTableFeeds.getLiveGames();\n }\n\n if (gameIds.length === 0) {\n return this._renderGridSkeleton();\n } else {\n this._numberOfGames = gameIds.length;\n return gameIds.map((tableId, gameIndex) => this._renderGridItem(tableId, gameIndex, tableId));\n }\n }\n\n componentDidMount() {\n super.componentDidMount();\n\n this.reaction(() => [\n this.services.device.os.isPC,\n this.services.device.isTablet,\n this.services.device.isMobile\n ], () => this._setCMSBannerPosition(), {fireImmediately: true});\n }\n\n render() {\n\n return (\n <LiveCasinoGridBox ref={this._captureGridElementRef} className=\"cy-live-casino-grid\">\n {this._renderGames()}\n </LiveCasinoGridBox>\n );\n }\n}\n\n","import styled from \"styled-components\";\n\nexport const DrawsDefaultBox = styled.div`\n display: flex;\n`;","import {DrawsDefaultBox} from \"./live-casino-grid-item-draws.default.box\";\n\nexport const LiveCasinoGridItemDrawsBox = DrawsDefaultBox;","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemDrawBox = styledBox('LiveCasinoGridItemDrawBox');\n","import React from \"react\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {GREEN, RED} from \"../css-constants\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {ILiveTableInfo} from \"../../../../../services/live-table-feeds-service/live-table-feeds.service.interface\";\nimport {LiveCasinoGridItemDrawsBox} from \"../boxes/infobar/draws/live-casino-grid-item-draws.box\";\nimport {LiveCasinoGridItemDrawBox} from \"../boxes/infobar/draws/live-casino-grid-item-draw.box\";\n\ninterface IRouletteDrawsComponentProps {\n tableInfo: ILiveTableInfo;\n}\n\nconst ROULETTE_NUMBERS_MAP = {\n red: [\n \"1\", \"3\", \"5\", \"7\", \"9\", \"12\",\n \"14\", \"16\", \"18\", \"19\", \"21\", \"23\",\n \"25\", \"27\", \"30\", \"32\", \"34\", \"36\"\n ],\n green: [\"0\", \"00\"]\n // Black numbers are implied by default, no need to map them\n};\n\nexport class RouletteDrawsComponent extends OrbitComponent<IRouletteDrawsComponentProps> {\n\n private _getDrawColor(drawValue: string): string {\n\n if (ROULETTE_NUMBERS_MAP.red.includes(drawValue)) {\n return RED;\n } else if (ROULETTE_NUMBERS_MAP.green.includes(drawValue)) {\n return GREEN;\n }\n\n return null;\n }\n\n render() {\n\n if (Check.isEmpty(this.props.tableInfo) || this.props.tableInfo.BetBehind || !this.props.tableInfo.RouletteLast5Numbers || this.props.tableInfo.RouletteLast5Numbers.length === 0) {\n return null;\n }\n\n return (\n <LiveCasinoGridItemDrawsBox className={CyClass(\"cy-live-casino-grid-item-infobar-draws\")}>\n {this.props.tableInfo.RouletteLast5Numbers.map((drawValue, i) =>\n <LiveCasinoGridItemDrawBox key={i} drawColor={this._getDrawColor(drawValue.toString())}>\n <span>{drawValue}</span>\n </LiveCasinoGridItemDrawBox>\n )}\n </LiveCasinoGridItemDrawsBox>\n );\n }\n}\n","import React from \"react\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {ILiveTableInfo} from \"../../../../../services/live-table-feeds-service/live-table-feeds.service.interface\";\nimport {LiveCasinoGridItemInfoItemBox} from \"../boxes/infobar/info-item/live-casino-grid-item-info-item.box\";\nimport {LiveCasinoGridItemInfobarIconBox} from \"../boxes/infobar/infobar-icon/live-casino-grid-item-infobar-icon.box\";\n\nexport interface ITableSeatsComponentProps {\n tableInfo: ILiveTableInfo;\n isLiveStreamOverlay?: boolean;\n}\n\nexport class TableSeatsComponent extends OrbitComponent<ITableSeatsComponentProps> {\n\n private _isTableFull() {\n\n if (this.props.tableInfo.Seats) {\n if (this.props.tableInfo.SeatsTaken?.length > 0) {\n return this.props.tableInfo.SeatsTaken.length === this.props.tableInfo.Seats;\n } else {\n return this.props.tableInfo.Players === this.props.tableInfo.Seats;\n }\n }\n\n return false;\n }\n\n private _getTableIsFullText() {\n return this._isTableFull() ? this.services.translation.translate(this._getTableIsFullTranslationKey()) : this._getPlayersCountFormated();\n }\n\n private _getTableIsFullTranslationKey() {\n return this.services.device.isMobile ? \"LIVE_CASINO_TABLE_FULL_MOBILE\" : \"LIVE_CASINO_TABLE_FULL_PC\";\n }\n\n private _getSeatsIconSource() {\n return this._isTableFull()\n ? this.services.theme.currentTheme.assets.images.live_arena.seat_icon_dark_png.toString()\n : this.services.theme.currentTheme.assets.images.live_arena.seat_icon_png.toString();\n }\n\n private _getPlayersCountFormated() {\n\n if (this.props.tableInfo.Seats) {\n if (this.props.tableInfo.SeatsTaken?.length > 0) {\n return `${this.props.tableInfo.SeatsTaken.length}/${this.props.tableInfo.Seats}`;\n } else {\n return `${this.props.tableInfo.Players}/${this.props.tableInfo.Seats}`;\n }\n }\n\n return this.props.tableInfo.Players;\n }\n\n render() {\n\n if (Check.isEmpty(this.props.tableInfo) || this.props.tableInfo.Players === undefined) {\n return null;\n }\n\n return (\n <LiveCasinoGridItemInfoItemBox isLiveStreamOverlay={this.props.isLiveStreamOverlay}\n className={\"cy-live-casino-grid-item-infobar-game-seats-count\"}>\n <LiveCasinoGridItemInfobarIconBox alt={`Seats_${this._getTableIsFullText()}`} src={this._getSeatsIconSource()}/>\n <span className={CyClass(\"cy-live-casino-grid-item-infobar-game-seats-count-text\")}>{this._getTableIsFullText()}</span>\n </LiveCasinoGridItemInfoItemBox>\n );\n }\n}\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoArenaNavbarButtonWrapperBox = styledBox(\"LiveCasinoArenaNavbarButtonWrapperBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoFilterButtonsBox = styledBox(\"LiveCasinoFilterButtonsBox\");","export const STICKY_NAVBAR = 'sticky-navbar';\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoNavbarBox = styledBox(\"LiveCasinoNavbarBox\");\n","import React, {useEffect} from \"react\";\nimport {observer} from \"mobx-react\";\nimport classNames from \"classnames\";\nimport {IStickyHandler} from \"../../../sticky-handler/sticky-handler.interface\";\nimport {LiveCasinoFilterButtonsBox} from \"./boxes/live-casino-filter-buttons/live-casino-filter-buttons.box\";\nimport {STICKY_NAVBAR} from \"./css-constants\";\nimport {LiveCasinoNavbarBox} from \"./boxes/live-casino-navbar/live-casino-navbar.box\";\nimport {LiveCasinoArenaNavbarButtonProps} from \"./live-casino-arena-navbar-button.component\";\nimport {ThemeProvider} from \"styled-components\";\nimport {\n LiveTableTabConfiguration\n} from \"../../../../services/live-table-feeds-service/live-table-feeds.service.interface\";\nimport {LobbyHeaderTitleBox} from \"../../../lobby-header/boxes/title/lobby-header-title.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {LobbyHeaderTitleContainerBox} from \"../../../lobby-header/boxes/container/lobby-header-title.container.box\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface LiveCasinoArenaNavbarProps extends ComponentServicesPick<'header'>{\n title?: string;\n configs: LiveTableTabConfiguration[];\n stickyHandler: IStickyHandler;\n FilterButtonComponent: React.ComponentType<LiveCasinoArenaNavbarButtonProps>;\n}\n\nconst ComponentBody: React.FC<LiveCasinoArenaNavbarProps> = observer((props) => {\n const services = useServices();\n useEffect(() => {\n return () => props.stickyHandler && props.stickyHandler.dispose();\n }, [props.stickyHandler]);\n\n const _onFilterClicked = async (tabId: string) => {\n await services.liveTableFeeds.setCurrentArenaTab(tabId);\n };\n\n\n const FilterButtonComponent = props.FilterButtonComponent || React.Fragment;\n return (\n <ThemeProvider theme={services.theme.mainContentTheme}>\n <LiveCasinoNavbarBox\n className={classNames(\"cy-live-casino-navbar\", {\n [STICKY_NAVBAR]: props.stickyHandler.isSticky,\n })}\n stickOffset={props.header.headerHeight}\n >\n {props.title ? <LobbyHeaderTitleContainerBox>\n <LobbyHeaderTitleBox className={CyClass(\"cy-lobby-header-title\")}>\n <span style={{flex: \"0 0 auto\"}}>\n {services.translation.translate(props.title)}\n </span>\n </LobbyHeaderTitleBox>\n </LobbyHeaderTitleContainerBox> : null}\n <LiveCasinoFilterButtonsBox\n className={\"cy-live-casino-filter-buttons\"}\n >\n {props.configs.map((tabConfig) => {\n return (\n tabConfig.gridConfiguration.gamesId.length === 0 ? null :\n <FilterButtonComponent\n key={tabConfig.headerConfiguration.filter}\n labelTranslationKey={tabConfig.gridConfiguration.title}\n filter={tabConfig.headerConfiguration.filter}\n onClick={async () => await _onFilterClicked(tabConfig.headerConfiguration.filter)}\n seoPage={tabConfig.headerConfiguration.seoPage}\n isActiveTab={tabConfig.headerConfiguration?.filter?.toLowerCase() === services.liveTableFeeds.currentArenaTabConfiguration?.headerConfiguration?.filter?.toLowerCase()}\n />\n );\n\n })}\n </LiveCasinoFilterButtonsBox>\n </LiveCasinoNavbarBox>\n </ThemeProvider>\n );\n})\n\n\nexport const LiveCasinoArenaNavbar = withServices(ComponentBody, ['header']);","import styled from \"styled-components\";\n\nexport const ButtonWrapperBox = styled.div`\n width: 15rem;\n`;\n","import React from 'react';\nimport { observer } from \"mobx-react\";\nimport styled, { AnyStyledComponent } from 'styled-components';\nimport { BalanceType } from '../../../common/const/wallet_balance_type';\nimport { OrbitComponent } from \"../base-components/orbit-component/orbit-component\";\n\ninterface IBalanceValueProps {\n balanceType?: BalanceType;\n className?: string;\n WrapperComponent?: AnyStyledComponent;\n}\n\nexport const BalanceValue = observer(class BalanceValue extends OrbitComponent<IBalanceValueProps> {\n static defaultProps: Partial<IBalanceValueProps> = {\n balanceType: BalanceType.BOTH,\n WrapperComponent: styled.span`\n color: ${props => props.theme.colors.moneyColor};\n `\n };\n render() {\n let bankroll = this.services.walletProxy.bankroll[this.props.balanceType!];\n const balanceMaxChars = 15;\n // Bankroll length limited by 15 chars\n const numberIndex = bankroll.search(/[0-9]/g);\n const symbolIndex = bankroll.search(/[^0-9.,]/g);\n let balance: string;\n\n if (numberIndex > symbolIndex) {\n balance = bankroll.slice(numberIndex, numberIndex + balanceMaxChars);\n bankroll = bankroll.slice(symbolIndex, numberIndex) + balance;\n } else {\n balance = bankroll.slice(numberIndex, Math.min(balanceMaxChars, symbolIndex - numberIndex));\n bankroll = balance + bankroll.slice(symbolIndex);\n }\n\n let WrapperComponent = this.props.WrapperComponent!;\n return <WrapperComponent className={this.props.className}>\n { bankroll }\n </WrapperComponent>;\n }\n});\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const AdminBannerBox = styledBox('AdminBannerBox');","import React, {useEffect, useState} from \"react\";\nimport {AdminBannerBox} from \"./boxes/admin-banner-wrapper.box\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {NullableString} from \"../../../common/types/nullable-types\";\nimport {Check} from \"@sparkware/app-utils\";\n\n\ndeclare global {\n namespace JSX {\n interface IntrinsicElements {\n \"banner-slider\": any;\n }\n }\n}\n\nexport interface AdminBannerComponentProps {\n bannerAdminPlaceholderId: string;\n}\nexport interface AdminBannerComponentWithServicesProps extends ComponentServicesPick<'adminBanner' | 'user'>, AdminBannerComponentProps{\n\n}\n\nconst ComponentBody:React.FC<AdminBannerComponentWithServicesProps> = observer((props) => {\n const [bannerSegmentation, setBannerSegmentation] = useState<NullableString>(null);\n\n useEffect(() => {\n props.adminBanner.getSegmentationsForAdminBanner().then(segmentation => {\n setBannerSegmentation(JSON.stringify(segmentation));\n })\n }, [props.adminBanner, props.user.isAuthorized]);\n\n if(Check.isNullOrUndefined(bannerSegmentation)) {\n return null;\n }\n\n const bannerConfig = JSON.stringify(props.adminBanner.getConfigForAdminBanner(props.bannerAdminPlaceholderId));\n return (\n <AdminBannerBox>\n <banner-slider\n config={bannerConfig}\n segmentation={bannerSegmentation}\n ></banner-slider>\n </AdminBannerBox>\n );\n});\n\nexport const AdminBannerComponent = withServices(ComponentBody, [\"adminBanner\", \"user\"]);","import {CmsBannerComponent, CmsBannerComponentProps} from \"../cms-banner/cms-banner.component\";\nimport {AdminBannerComponent, AdminBannerComponentProps} from \"../admin-banner/admin-banner.component\";\nimport * as React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {BannerContainerBox} from \"../cms-banner/banner-container/banner-container.box\";\n\nexport interface BannerComponentProps extends CmsBannerComponentProps, AdminBannerComponentProps {\n\n}\ninterface BannerComponentWithServicesProps extends ComponentServicesPick<'adminBanner'>, BannerComponentProps {\n}\n\nconst ComponentBody: React.FC<BannerComponentWithServicesProps> = observer((props) => {\n if(props.adminBanner.adminBannerEnabled) {\n return (<BannerContainerBox minHeight={props.minHeight}>\n <AdminBannerComponent {...(props as AdminBannerComponentProps)}/>\n </BannerContainerBox>);\n } else {\n return (<CmsBannerComponent {...(props as CmsBannerComponentProps)}/>)\n }\n});\n\n\nexport const BannerComponent = withServices(ComponentBody, [\"adminBanner\"]);","import React, {PropsWithChildren, Suspense} from \"react\";\n\nexport class OrbitSuspense extends React.Component<PropsWithChildren> {\n render() {\n return <Suspense fallback={<div className=\"lazy-content\"></div>}>\n {this.props.children}\n </Suspense>\n }\n}\n","import {OrbitComponent} from '../orbit-component/orbit-component';\n\nexport class RoutedComponent<TProps> extends OrbitComponent<TProps> {\n}\n","export const HYBRID_EMBEDDED_NAV_MENU = 'hybrid-embedded-nav-menu';//don't delete it - we need it to get the height for the hybrid embedded","export enum AnimationDismissType {\n FloatingButton = 1,\n FadeOut = 2\n}\nexport const FADE_OUT_DURATION_IN_SECONDS = 1;\nexport const FLOATING_BUTTON_DURATION_IN_SECONDS = 0.8;\nexport const TEXT_TRANSITION_DURATION_IN_SECONDS = 0.3;\nexport const FAB_DISAPPEAR_DURATION_IN_SECONDS = 2;\n\n/* The native frame width as it was made by the designer. Intrinsic size of the png image. We agreed for a frame of 600px wide and 1000px tall */\nexport const NATIVE_ANIMATION_FRAME_WIDTH = 600;\n","import styled, { css } from \"styled-components\"\nimport { AnimationDismissType, FADE_OUT_DURATION_IN_SECONDS, FLOATING_BUTTON_DURATION_IN_SECONDS } from \"../burnout-animation-constants\";\n\ninterface IBurnoutAnimationContainerProps {\n animationEnded: boolean;\n dismissType: AnimationDismissType;\n viewportHeight: number;\n zIndex: number;\n}\n\nexport const BurnoutAnimationContainer = styled.div<IBurnoutAnimationContainerProps>`\n /* Position the container in the viewport, covering all visible area from top to bottom */\n position: fixed;\n top: 0;\n height: ${({viewportHeight}) => viewportHeight}px;\n /* it should be as wide as it can but no wider than 800px or the height of the viewport whichever is smaller\n Why no wider than 100vh? Because on very wide landscape screens (landscape mobile phones for example)\n we want to contain the animation in a square of the size equal to the height of the screen, any bigger, it will cut top and bottom part */\n width: 100%;\n max-width: min(${({viewportHeight}) => viewportHeight}px, 100vh, 800px);\n /* Horizontal alignment in viewport with right and transform */\n right: 50%;\n transform: translateX(50%);\n /* A big z-index, to make sure it's above everything */\n z-index: ${({zIndex}) => zIndex};\n /* Allow clicks to go through the animation elements so that the user can control the gameplay for example */\n pointer-events: none;\n /* overflow: hidden; */\n opacity: 1;\n ${({animationEnded, dismissType}) => animationEnded ? (\n dismissType === AnimationDismissType.FadeOut ? css`\n transition: opacity ${FADE_OUT_DURATION_IN_SECONDS}s;\n opacity: 0;\n ` : css`\n transition: height ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, width ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, max-width ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, top ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, right ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, border-radius ${FLOATING_BUTTON_DURATION_IN_SECONDS}s, opacity ${FLOATING_BUTTON_DURATION_IN_SECONDS}s;\n height: 60px;\n width: 60px;\n max-width: 60px;\n overflow: hidden;\n top: 75px;\n right: 60px;\n @media ${({theme}) => theme.mediaQuery.sAndBelow } {\n right: 40px;\n }\n border-radius: 50%;\n pointer-events: auto;\n opacity: 0.91;\n `\n ) : ''};\n\n`;\n","import styled, { css } from \"styled-components\"\nimport { AnimationDismissType, FLOATING_BUTTON_DURATION_IN_SECONDS } from \"../burnout-animation-constants\";\n\ninterface IBurnoutAnimationBoxProps {\n animationEnded: boolean;\n dismissType: AnimationDismissType;\n}\n\nexport const BurnoutAnimationBox = styled.div<IBurnoutAnimationBoxProps>`\n position: absolute;\n width: 100%;\n top: 50%;\n transform: translateY(-70%);\n ${({animationEnded, theme}) => animationEnded ? css`\n background-image: url(${theme.assets.images.burnout.burnout_animation_last_frame_png.toString()});\n background-position: 0 0;\n background-size: 100% 100%;\n ` : \"\"}\n\n /* Aspect ratio. 1000 / 600 = 1.(6) => In percentage 166.(6)% */\n height: 0;\n padding-top: calc(166.66667%);\n ${({animationEnded, dismissType}) => (animationEnded && dismissType === AnimationDismissType.FloatingButton) ? css`\n transition: transform ${FLOATING_BUTTON_DURATION_IN_SECONDS}s;\n transform: translateY(-90%) scale(2);\n @media ${({theme}) => theme.mediaQuery.lAndAbove } {\n transform: translate(-3%, -100%) scale(2.5);\n }\n ` : \"\"}\n`;\n","import styled from \"styled-components\"\nimport { NATIVE_ANIMATION_FRAME_WIDTH, TEXT_TRANSITION_DURATION_IN_SECONDS } from \"../burnout-animation-constants\";\n\ninterface ICongratulationsTextBoxProps {\n animationWidth: number;\n show: boolean;\n}\nexport const CongratulationsTextBox = styled.div<ICongratulationsTextBoxProps>`\n position: absolute;\n z-index: 2;\n width: 100%;\n top: 66%;\n text-align: center;\n color: ${({theme}) => theme.colors.brandSecondary};\n -webkit-text-stroke: 2px ${({theme}) => theme.colors.backgroundLight};\n ${({theme}) => theme.font.presets.ultra};\n\n font-size: ${({animationWidth}) => animationWidth * 33 / NATIVE_ANIMATION_FRAME_WIDTH}px;\n line-height: 1.1;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: ${({animationWidth}) => animationWidth * 39 / NATIVE_ANIMATION_FRAME_WIDTH}px;\n letter-spacing: -0.5px;\n }\n\n transition: opacity ${TEXT_TRANSITION_DURATION_IN_SECONDS}s, transform ${TEXT_TRANSITION_DURATION_IN_SECONDS}s;\n opacity: ${({show}) => show ? 1 : 0};\n transform: scale(${({show}) => show ? 1 : 0.25});\n`;\n","import {DisposableObject} from \"../../../../utils/disposable-object\";\n\nexport class DisposableBurnoutAnimationDependencies extends DisposableObject {\n public addTimeout(handler: () => void, timeout?: number) {\n return super.addTimeout(handler, timeout)\n }\n}","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport { AnimationDismissType, FADE_OUT_DURATION_IN_SECONDS, FLOATING_BUTTON_DURATION_IN_SECONDS, NATIVE_ANIMATION_FRAME_WIDTH } from \"./burnout-animation-constants\";\nimport { BurnoutAnimationContainer } from \"./boxes/burnout-animation-container.box\";\nimport { BurnoutAnimationBox } from \"./boxes/burnout-animation.box\";\nimport { CongratulationsTextBox } from \"./boxes/burnout-animation-text.box\";\nimport { TrackEntry } from \"../../../services/pixi-app/pixi-app.service.interface\";\nimport { imagePreload } from \"../../../../common/utils/image-preload\";\nimport {AnimationStatus, PixiSpineAnimation} from \"../../../services/pixi-app/pixi-spine-animation\";\nimport {DisposableBurnoutAnimationDependencies} from \"./disposable-burnout-dependencies\";\n\nconst ExitAnimationDurationByDismissType = {\n [AnimationDismissType.FadeOut]: FADE_OUT_DURATION_IN_SECONDS,\n [AnimationDismissType.FloatingButton]: FLOATING_BUTTON_DURATION_IN_SECONDS\n};\n\ninterface IBurnoutAnimationProps {\n zIndex: number;\n getExitAnimation(): AnimationDismissType;\n onExitAnimationEnd(exitAnimationType: AnimationDismissType): void;\n paused?: boolean;\n}\n\n@observer\nexport class BurnoutAnimation extends OrbitComponent<IBurnoutAnimationProps> {\n /* Sometimes the last frame iamge is loaded again at the end of the animation.\n My supposition is that when the preloaded image is not used immediately the browser assumes it will not be used so it unloads it.\n So I keep the reference to the image tag so the garbage collecter will not dispose the image.\n Apparently it works */\n private lastFrameCache: HTMLImageElement | null = null;\n\n private pixiBurnoutAnimation: PixiSpineAnimation;\n private disposableDependencies: DisposableBurnoutAnimationDependencies = new DisposableBurnoutAnimationDependencies();\n\n constructor(props: IBurnoutAnimationProps) {\n super(props);\n\n makeObservable(this);\n\n this._viewportHeight = window.innerHeight;\n }\n\n componentDidMount(): void {\n super.componentDidMount();\n this.pixiBurnoutAnimation = this.createAnimation();\n if (!this.props.paused) {\n this.startAnimation();\n }\n }\n\n componentDidUpdate(prevProps: IBurnoutAnimationProps) {\n\n if (this.props.paused !== prevProps.paused) {\n if (!this.props.paused) {\n this.startAnimation();\n } else {\n if (this._onPauseHandler) {\n this._onPauseHandler(!!this.props.paused);\n }\n }\n }\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this.lastFrameCache = null;\n this._onPauseHandler = null;\n this.disposableDependencies.dispose();\n this.pixiBurnoutAnimation.dispose();\n }\n\n @observable.ref\n private _dismissType = AnimationDismissType.FadeOut;\n @observable.ref\n private _hasAnimationEnded = false;\n @observable.ref\n private _showCongratsText = false;\n private _animationElement: HTMLDivElement | null = null;\n private _animationWidth = NATIVE_ANIMATION_FRAME_WIDTH;\n /* In mobile, i cannot use 100vh in css because it does not consider the browser chrome (tool bar and address bars and such).\n So I have to do this horrible hack, I take the height from JS */\n private _viewportHeight = NATIVE_ANIMATION_FRAME_WIDTH;\n\n private _onPauseHandler: ((pause: boolean) => void) | null = null;\n\n private async startAnimation() {\n if (this.pixiBurnoutAnimation.status === AnimationStatus.Loading || this.pixiBurnoutAnimation.status === AnimationStatus.Running) {\n return;\n }\n this.pixiBurnoutAnimation.start();\n this.pixiBurnoutAnimation.attachToDOM(this._animationElement);\n }\n\n private createAnimation() {\n return new PixiSpineAnimation(this.services, {\n width: 600, height: 1000, force2DCanvasContext: true\n }, [{\n name: 'burnoutAnimationResource',\n jsonUrl: this.services.theme.currentTheme.assets.images.burnout.burnout_animation_json.toString()\n }], {\n render: ({spineAnimations}) => {\n\n /* Animation assets are all loaded and we can play, but before that we should also preload the last frame image to avoid flicker at the end of animation */\n imagePreload(this.services.theme.currentTheme.assets.images.burnout.burnout_animation_last_frame_png.toString()).then((response) => {\n this.lastFrameCache = response.imageObj;\n });\n\n let currentAnimationTrackEntry: TrackEntry | null;\n\n this._onPauseHandler = (pause: boolean) => {\n // spineAnimation.autoUpdate = !pause;\n if (currentAnimationTrackEntry) {\n currentAnimationTrackEntry.timeScale = pause ? 0 : 1;\n }\n }\n\n let spineAnimation = spineAnimations['burnoutAnimationResource'];\n // play animation\n const runAnimation = () => {\n spineAnimation.state.setAnimation(0, \"1-zoom\", false);\n spineAnimation.state.addAnimation(0, \"2-static_close\", false, 0.3);\n const spineAnimationTrackEntry3 = spineAnimation.state.addAnimation(0, \"3-opening\", false, 0);\n spineAnimationTrackEntry3.listener = {\n event: (entry, event) => {\n if (event.stringValue === \"open_text\") {\n this.setShowCongratsText(true);\n }\n }\n };\n spineAnimation.state.addAnimation(0, \"4-static _open\", false, 0);\n spineAnimation.state.addAnimation(0, \"5-static _open_tranzition\", false, 1.5);\n const spineAnimationTrackEntry6 = spineAnimation.state.addAnimation(0, \"6-static _open_empty\", false, 0);\n spineAnimationTrackEntry6.listener = {\n start: (entry) => {\n this.setShowCongratsText(false);\n }\n };\n spineAnimation.state.addAnimation(0, \"7-closing\", false, 0);\n const finalTrackEntry = spineAnimation.state.addAnimation(0, \"8-closed\", false, 0);\n finalTrackEntry.listener = {\n complete: (entry) => {\n this.setDismissType(this.props.getExitAnimation());\n this.markAnimationEnding();\n\n this.disposableDependencies.addTimeout(() => {\n this._onPauseHandler = null;\n this.pixiBurnoutAnimation.dispose();\n });\n\n this.disposableDependencies.addTimeout(() => {\n this.lastFrameCache = null;\n this.props.onExitAnimationEnd(this._dismissType);\n }, ExitAnimationDurationByDismissType[this._dismissType] * 1000 + 100);\n }\n };\n }\n\n spineAnimation.state.addListener({\n start: (entry) => {\n currentAnimationTrackEntry = entry;\n }\n });\n\n runAnimation();\n\n this._viewportHeight = this.services.window.innerHeight;\n }\n }, {\n position: \"absolute\",\n top: \"0\",\n width: \"100%\"\n });\n }\n\n @action.bound\n private markAnimationEnding() {\n this._hasAnimationEnded = true;\n };\n\n @action.bound\n private setDismissType(v: AnimationDismissType) {\n this._dismissType = v;\n }\n\n @action.bound\n private setShowCongratsText(v: boolean) {\n this._showCongratsText = v;\n }\n\n private captureAnimationDivElement = (el: HTMLDivElement | null) => {\n this._animationElement = el;\n if (el) {\n this._animationWidth = el.getBoundingClientRect().width;\n }\n }\n\n render() {\n /* Delay the rendering of the animation for the time the image is preloaded.\n As soon we can start the animation then we can display, measure the size of the animation based on viewport and play */\n return <BurnoutAnimationContainer className={'cy-burnout-animation-container'}\n animationEnded={this._hasAnimationEnded}\n dismissType={this._dismissType}\n viewportHeight={this._viewportHeight}\n zIndex={this.props.zIndex}\n >\n <BurnoutAnimationBox\n ref={this.captureAnimationDivElement}\n animationEnded={this._hasAnimationEnded}\n dismissType={this._dismissType}\n >\n <CongratulationsTextBox\n animationWidth={this._animationWidth}\n show={this._showCongratsText}\n >\n {this.services.translation.translate(\"BURNOUT_MESSAGE_LINE_1\")}\n <br/>\n {this.services.translation.translate(\"BURNOUT_MESSAGE_LINE_2\")}\n </CongratulationsTextBox>\n </BurnoutAnimationBox>\n </BurnoutAnimationContainer>;\n }\n}\n","import React from \"react\";\nimport styled, { css, keyframes } from \"styled-components\";\nimport { FAB_DISAPPEAR_DURATION_IN_SECONDS } from \"../burnout-animation-constants\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\ninterface IBurnoutFabProps {\n zIndex: number;\n onClick(): void;\n onMount(): void;\n removeButton?: boolean;\n}\n\nexport const BurnoutFab: React.FC<IBurnoutFabProps> = ({zIndex, onClick, onMount, removeButton}) => {\n\n React.useEffect(() => {\n onMount();\n }, [onMount]);\n\n return (<BurnoutFabContainer zIndex={zIndex} onClick={onClick} removeButton={removeButton}>\n <BurnoutFabInner className={CyClass('cy-burnout-gift-button')}/>\n </BurnoutFabContainer>);\n};\n\nconst disappearAnimation = keyframes`\n 0% {\n transform: translateX(50%) scale(1.3);\n opacity: 1;\n }\n 50% {\n transform: translateX(50%) scale(1.3);\n opacity: 1;\n }\n 99% {\n transform: translateX(50%) scale(1.3);\n opacity: 0;\n }\n 100% {\n transform: translateX(50%) scale(1.3);\n opacity: 0;\n display: none;\n }\n`;\n\nconst pulseAnimation = keyframes`\n 0% {\n transform: translateX(50%) scale(1);\n }\n 50% {\n transform: translateX(50%) scale(1);\n }\n 100% {\n transform: translateX(50%) scale(1.1);\n }\n`;\n\nconst shadowAppear = keyframes`\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n`;\n\nconst BurnoutFabContainer = styled.div<{zIndex: number; removeButton?: boolean;}>`\n position: fixed;\n height: 60px;\n width: 60px;\n max-width: 60px;\n overflow: visible;\n top: 75px;\n right: 60px;\n @media ${({theme}) => theme.mediaQuery.sAndBelow } {\n right: 40px;\n }\n border-radius: 50%;\n cursor: pointer;\n /* A big z-index, to make sure it's above everything */\n z-index: ${({zIndex}) => zIndex};\n transform: translateX(50%);\n opacity: 0.9;\n /* box-shadow: 0px 0px 40px ${({theme}) => theme.colors.brandSecondary}, inset 0 0 40px ${({theme}) => theme.colors.brandSecondary}; */\n transition: transform 0.3s, opacity 0.3s;\n &:hover {\n transform: translateX(50%) scale(1.1);\n opacity: 1;\n }\n &:active {\n transform: translateX(50%) scale(1.3);\n opacity: 1;\n }\n ${({removeButton}) => removeButton ? css`\n animation: ${FAB_DISAPPEAR_DURATION_IN_SECONDS}s linear 0s 1 forwards running ${disappearAnimation};\n ` : css`\n animation: 1s linear 0s infinite alternate running ${pulseAnimation};\n &:hover {\n animation: 1s linear 0s infinite alternate paused ${pulseAnimation};\n }\n `}\n\n &::after {\n content: '';\n position: absolute;\n z-index: -1;\n width: 40%;\n height: 40%;\n top: 30%;\n left: 30%;\n background: transparent;\n border-radius: 50%;\n box-shadow: 0px 0px 40px 15px ${({theme}) => theme.colors.brandPrimary};\n transition: opacity 0.3s;\n opacity: 0;\n animation: 2s linear 0s 1 forwards running ${shadowAppear};\n }\n`;\n\nconst BurnoutFabInner = styled.div`\n position: absolute;\n width: 100%;\n top: 50%;\n background-image: url(${({theme}) => theme.assets.images.burnout.burnout_animation_last_frame_png.toString()});\n background-position: 0 0;\n background-size: 100% 100%;\n /* Aspect ratio. 1000 / 600 = 1.(6) => In percentage 166.(6)% */\n height: 0;\n padding-top: calc(166.66667%);\n transform: translateY(-90%) scale(2);\n transition: transform 0.3s;\n @media ${({theme}) => theme.mediaQuery.lAndAbove } {\n transform: translate(-3%, -100%) scale(2.5);\n }\n`;\n","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { action, observable, runInAction, makeObservable } from \"mobx\";\nimport { BurnoutAnimation } from \"./burnout-animation.component\";\nimport { AnimationDismissType, FAB_DISAPPEAR_DURATION_IN_SECONDS } from \"./burnout-animation-constants\";\nimport { BurnoutFab } from \"./boxes/burnout-fab.box\";\nimport {ISendElasticEventOptions} from \"../../../services/analytics/analytics.service.interface\";\nimport {DisposableBurnoutAnimationDependencies} from \"./disposable-burnout-dependencies\";\n\ninterface IBurnoutAnimationWrapper {\n checkOmg(): boolean;\n showOmg?(): void;\n paused?: boolean;\n onSafeUnmountNotice?(): void;\n}\n\n@observer\nexport class BurnoutAnimationWrapper extends OrbitComponent<IBurnoutAnimationWrapper> {\n\n constructor(props: IBurnoutAnimationWrapper) {\n super(props);\n\n makeObservable(this);\n }\n\n @observable.ref\n private _showButton = false;\n @observable.ref\n private _animationEnded = false;\n @observable.ref\n private _removeButtonAnimation = false;\n private disposableDependencies: DisposableBurnoutAnimationDependencies = new DisposableBurnoutAnimationDependencies();\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this.disposableDependencies.dispose();\n }\n\n\n private getExitAnimation = () => {\n if (this.props.checkOmg()) {\n return AnimationDismissType.FloatingButton;\n } else {\n return AnimationDismissType.FadeOut;\n }\n }\n\n @action.bound\n private onExitAnimationEnd = () => {\n if (this.props.checkOmg()) {\n this._showButton = true;\n } else {\n this.disposableDependencies.addTimeout(() => {\n this.recheckOmg(true);\n }, 2000);\n }\n this._animationEnded = true;\n };\n\n @action.bound\n private recheckOmg = (retryOnFail: boolean) => {\n if (this.props.checkOmg()) {\n this._showButton = true;\n } else {\n if (retryOnFail) {\n this.disposableDependencies.addTimeout(() => {\n this.recheckOmg(false);\n }, 2000);\n } else {\n // we can safely unmount this component\n this.props.onSafeUnmountNotice && this.props.onSafeUnmountNotice();\n }\n }\n };\n\n @action.bound\n private onClickFAB = () => {\n let data: ISendElasticEventOptions = {\n eventType: \"Orbit_Marketing\",\n category: 'Burnout',\n action: 'Click_floating_icon'\n }\n this.services.analytics.sendElasticInfoEvent(data, true);\n\n if (this.props.showOmg) {\n this.props.showOmg();\n }\n this._removeButtonAnimation = true;\n this.disposableDependencies.addTimeout(() => {\n runInAction(() => {\n this._showButton = false;\n // we can safely unmount this component\n this.props.onSafeUnmountNotice && this.props.onSafeUnmountNotice();\n });\n }, FAB_DISAPPEAR_DURATION_IN_SECONDS * 1000 + 500);\n };\n\n private _onMountFAB = () => {\n let data: ISendElasticEventOptions = {\n eventType: \"Orbit_Marketing\",\n category: 'Burnout',\n action: 'View_floating_icon'\n }\n this.services.analytics.sendElasticInfoEvent(data, true);\n };\n\n private _renderFAB = (zIndex: number) => {\n if (this._showButton) {\n return (\n <BurnoutFab\n zIndex={zIndex}\n onClick={this.onClickFAB}\n onMount={this._onMountFAB}\n removeButton={this._removeButtonAnimation}\n />\n )\n }\n return null;\n };\n\n\n render() {\n const zIndex = this.services.burnoutService.getBurnoutAnimationZIndex();\n /* Show the animation. If the prize is in bonus money and the omg was already received, the animation transform itself into a button.\n Else, the animation dissapear and I use another element as a button because\n it is a lot of logic inside the animation component that we don't need anymore and it might break stuff */\n return this._animationEnded ? this._renderFAB(zIndex) : <BurnoutAnimation\n getExitAnimation={this.getExitAnimation}\n onExitAnimationEnd={this.onExitAnimationEnd}\n zIndex={zIndex}\n paused={this.props.paused}\n />;\n }\n}\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ClockLastLoginBox = styledBox('ClockLastLoginBox');","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const LastLoginBox = styledBox('LastLoginBox');","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {ClockLastLoginBox} from \"./boxes/clock-last-login.box\";\nimport {LastLoginBox} from './boxes/last-login.box';\nimport {ClockComponent} from \"../clock/clock.component\";\n\n\nexport const ClockAndLastLoginBoxComponent = observer(class ClockAndLastLoginBoxComponent extends OrbitComponent<{}> {\n\n render() {\n if (!this.services.configuration.data.ClockAndLastLoginBox.display) {\n return null;\n }\n\n return (\n <ClockLastLoginBox className=\"cy-navbar-clock-last-login\">\n <ClockComponent format={this.services.time.getTimeFormat()} />\n {this._renderLastLoginComponent()}\n </ClockLastLoginBox>\n );\n\n }\n\n\n private _renderLastLoginComponent(): any {\n let data = this.services.configuration.data;\n if (!data.ClockAndLastLoginBox.lastLoginDisplay) {\n return null;\n }\n\n return (\n <LastLoginBox className={\"cy-last-login-component\"}>\n {this.services.regulation.current.components.renderLastLoginComponent()}\n </LastLoginBox>\n );\n\n }\n});\n\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ClockComponentBox = styledBox(\"ClockComponentBox\");\n","import React, {useCallback, useEffect, useState} from 'react';\nimport {observer} from 'mobx-react';\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {namedSetInterval} from \"../../../common/utils/time-functions\";\nimport {AnyStyledComponent} from \"styled-components\";\nimport {ClockComponentBox} from \"./boxes/clock.component.box\";\nimport classNames from \"classnames\";\n\ninterface ClockComponentProps {\n format?: string\n box?: AnyStyledComponent | React.ComponentType<any>;\n className?: string;\n}\n\nexport const ClockComponent: React.FC<ClockComponentProps> = observer((props) => {\n const services = useServices();\n\n const dateTimeFormat = props.format ? props.format : services.time.getDateTimeFormat();\n\n const getFormattedTime = useCallback(() => {\n const currentDate = services.time.getCurrentServerDate() ? services.time.getCurrentServerDate() : services.time.getCurrentDate();\n\n const currentDateInRegulationTimeZone = services.time.convertToRegulationTimeZone(currentDate);\n\n if (!currentDateInRegulationTimeZone) {\n return;\n }\n\n return services.time.format(currentDateInRegulationTimeZone.date, dateTimeFormat, currentDateInRegulationTimeZone.isUTC);\n }, [dateTimeFormat, services.time]);\n\n const [dateTime, setDateTime] = useState(getFormattedTime());\n\n const updateTime = useCallback(() => {\n const time = getFormattedTime();\n\n if (dateTime !== time) {\n setDateTime(time);\n }\n }, [dateTime, getFormattedTime]);\n\n useEffect(() => {\n const subscription = services.time.onServerTimeUpdated(updateTime);\n return () => {\n subscription.off();\n }\n }, [services.time, updateTime]);\n\n useEffect(() => {\n const interval = namedSetInterval('CLOCK_UPDATE_TIMER', updateTime, 1000);\n return () => {\n clearInterval(interval)\n }\n }, [services.time, updateTime]);\n\n const Box: AnyStyledComponent | React.ComponentType<any> = props.box ? props.box : ClockComponentBox;\n\n return (\n <Box className={classNames(CyClass('cy-clock-component'), props.className)}>\n <div className={CyClass('cy-clock')}>\n {dateTime}\n </div>\n </Box>\n );\n});\n","import styled, {css} from \"styled-components\";\nimport {LOBBY_PAGE, NEW_LIVE_AB_CASINO_PAGE} from \"../../../themes/css-global-classes\";\n\nexport interface IBannerContainerBoxProps {\n minHeight?: string;\n}\n\nexport const BannerContainerDefaultBox = styled.div<IBannerContainerBoxProps>`\n position: relative;\n width: 100%;\n overflow-x: hidden;\n\n .${LOBBY_PAGE} & {\n z-index: 2;\n background-color: ${props => props.theme.colors.background}\n }\n \n .${NEW_LIVE_AB_CASINO_PAGE} & {\n margin-bottom: 4rem;\n }\n \n ${props => props.minHeight && css`\n min-height: ${props.minHeight};\n`};\n`;\n","import {BannerContainerDefaultBox} from \"./banner-container.default.box\";\n\nexport const BannerContainerBox = BannerContainerDefaultBox;","import React, {useEffect} from 'react';\nimport {CmsBannerId} from '../../services/cms/cms-banners/cm-banner-id/cms-banner-id';\nimport {observer} from 'mobx-react';\nimport {EmptyBannerDefinition} from '../../services/cms/cms-banners/banner-definition/empty-banner-definition';\nimport {BannerContainerBox} from \"./banner-container/banner-container.box\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {EmptyBannerComponent} from \"./empty-banner/empty-banner.component\";\nimport {NullableString} from \"../../../common/types/nullable-types\";\n\nexport interface CmsBannerComponentProps {\n componentID: string;\n templateID: string;\n fallbackUrl?: NullableString;\n showPlaceholder: boolean;\n className?: string;\n minHeight?: string;\n}\ninterface CmsBannerComponentWithServicesProps extends CmsBannerComponentProps, ComponentServicesPick<'cmsBanners'>{\n\n}\n\nconst ComponentBody: React.FC<CmsBannerComponentWithServicesProps> = observer((props) => {\n\n const bannerId = new CmsBannerId(props.componentID, props.templateID, props.fallbackUrl);\n\n useEffect(() => {\n props.cmsBanners.loadBanner(bannerId)\n });\n\n let bannerDefinition = props.cmsBanners.bannersMap[bannerId.key];\n if(!bannerDefinition) {\n bannerDefinition = new EmptyBannerDefinition();\n }\n\n\n return (\n <BannerContainerBox minHeight={props.minHeight}\n className={`cy-cms-banner-container tcmid-${bannerId.componentID} ${props.className || ''}`}>\n {\n bannerDefinition.render({\n showPlaceholder: props.showPlaceholder,\n minHeight: props.minHeight\n })\n }\n </BannerContainerBox>\n );\n});\n\nexport const CmsBannerComponent = withServices(ComponentBody,\n ['cmsBanners'],\n {\n renderSkeleton: (props) => <EmptyBannerComponent showPlaceholder={props.showPlaceholder} minHeight={props.minHeight}/>\n });","import styled, {css} from \"styled-components\";\nimport {IBannerContainerBoxProps} from \"../banner-container/banner-container.default.box\";\n\nexport const EmptyBannerContainerBox = styled.div<IBannerContainerBoxProps>`\n width: 100%;\n ${props => props.minHeight && css`\n min-height: ${props.minHeight};\n `};\n`;\n","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {EmptyBannerContainerBox} from \"./empty-banner-container.box\";\n\nexport class EmptyBannerComponentProps {\n showPlaceholder: boolean;\n minHeight: string;\n}\n\n\nexport const EmptyBannerComponent = observer(\n class EmptyBannerComponent extends OrbitComponent<EmptyBannerComponentProps> {\n\n render() {\n if(this.props.showPlaceholder && !this.services.device.hybrid.isEmbedded) {\n return (<EmptyBannerContainerBox minHeight={this.props.minHeight} className='cy-cms-banner-placeholder'/>)\n }\n return null;\n }\n }\n);\n\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const FreePlayContainerBox = styledBox('FreePlayContainerBox');\n","import styled from \"styled-components\";\n\nexport const VouchersSwiperBox = styled.div`\n width: 100%;\n flex-shrink: 0;\n position: relative;\n padding-top: 3.3rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 1.2rem;\n }\n\n .swiper-pagination {\n .swiper-pagination-bullet {\n background-color: white;\n opacity: 0.25;\n &.swiper-pagination-bullet-active {\n opacity: 1;\n }\n }\n }\n`","import styled, { css } from \"styled-components\";\n\nexport const VoucherSwiperArrowContainerBox = styled.div<{isPrev?: boolean;}>`\n position: absolute;\n width: 3rem;\n height: 4rem;\n background-size: contain;\n /* background-color: red; */\n z-index: 2;\n /* display: flex;\n flex-direction: column;\n align-content: center;\n justify-content: center;\n align-items: center;\n text-align: center; */\n font-size: 2rem;\n padding: 4px;\n cursor: pointer;\n top: 50%;\n transform: translate(0, -50%);\n ${({isPrev}) => isPrev ? css`\n left: 0;\n background-image: url(${({theme}) => theme.assets.images.free_play.fp_left_arrow_png.toString()});\n ` : css`\n right: 0;\n background-image: url(${({theme}) => theme.assets.images.free_play.fp_right_arrow_png.toString()});\n `}\n &.swiper-button-disabled {\n opacity: 0.6;\n }\n`\n","import React from 'react';\nimport {SwiperProps, SwiperRef} from \"swiper/swiper-react\";\nimport {Swiper} from \"swiper/react\";\nimport 'swiper/css';\nimport 'swiper/css/navigation';\nimport 'swiper/css/pagination';\nimport 'swiper/css/virtual';\n\nexport const SwiperComponent: React.FC<SwiperProps> = React.forwardRef<SwiperRef, SwiperProps>((props, ref) => {\n return (\n <Swiper {...props} ref={ref}/>\n );\n})\n","import {observer} from \"mobx-react\";\nimport React from \"react\";\nimport {SwiperSlide} from \"swiper/react\";\nimport {Pagination, Navigation} from 'swiper/modules';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {VouchersSwiperBox} from \"../../../boxes/vouchers-swiper/vouchers-swiper.box\";\nimport {VoucherSwiperArrowContainerBox} from \"../../../boxes/vouchers-swiper/arrow/voucher-swiper-arrow-container.box\";\nimport {IFreePlayVoucherViewModel} from \"../../../../../services/free-play/vouchers/free-play-voucher-view-model.interface\";\nimport {VoucherCardComponent} from \"../voucher-card.component\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {SwiperComponent} from \"../../../../swiper/swiper.component\";\n\ninterface VouchersSwiperComponentProps {\n onCurrentVoucherIndexChanged: (voucherIndex: number) => void;\n}\n\nexport const VouchersSwiperComponent = observer(\n class VouchersSwiperComponent extends OrbitComponent<VouchersSwiperComponentProps> {\n prevElement = React.createRef<HTMLDivElement>();\n nextElement = React.createRef<HTMLDivElement>();\n\n private get _vouchers(): IFreePlayVoucherViewModel[] {\n return this.services.freePlay.userVouchersToDisplayInUI\n }\n\n render() {\n return (<VouchersSwiperBox>\n <VoucherSwiperArrowContainerBox isPrev={true} ref={this.prevElement} className={CyClass('cy-vouchers-previous-button')} />\n <VoucherSwiperArrowContainerBox ref={this.nextElement} className={CyClass('cy-vouchers-next-button')} />\n <SwiperComponent\n dir={this.services.language.isRTLLanguage ? \"rtl\" : \"ltr\"}\n style={{width: \"100%\"}}\n slidesPerView={1}\n centeredSlides={false}\n pagination={{\n clickable: true\n }}\n navigation={{\n nextEl: this.nextElement.current,\n prevEl: this.prevElement.current\n }}\n modules={[Pagination, Navigation]}\n className=\"freeplayVouchersSwiper\"\n // solution taken from: https://stackoverflow.com/questions/64099383/swiper-react-how-to-create-custom-navigation-pagination-components-using-react\n onBeforeInit={(swiper) => {\n if (typeof swiper.params.navigation !== \"boolean\") {\n swiper.params.navigation.prevEl = this.prevElement.current;\n swiper.params.navigation.nextEl = this.nextElement.current;\n }\n }}\n onActiveIndexChange={(swiper) => {\n this.props.onCurrentVoucherIndexChanged(swiper.activeIndex);\n }}\n >\n {this._vouchers.map((v) => {\n return <SwiperSlide key={v.id} style={{width: \"100%\"}}>\n {({ isActive }) => {\n return <VoucherCardComponent key={v.id} voucher={v}/>\n }}\n </SwiperSlide>\n })}\n </SwiperComponent>\n </VouchersSwiperBox>)\n }\n }\n);","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VoucherGamesListBox = styledBox(\"VoucherGamesListBox\");\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VouchersSwiperTitleBox = styledBox(\"VouchersSwiperTitleBox\");\n","import styled from \"styled-components\";\n\nexport const VouchersSwiperBackgroundBox = styled.div`\n width: 100%;\n background: linear-gradient(rgba(23, 23, 23, 0.5),rgba(0, 0, 0, 0.5)), url(${(props) => props.theme.assets.images.free_play.fp_vouchers_bg_png.toString()});\n background-repeat: no-repeat;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n background: linear-gradient(rgba(23, 23, 23, 0.5),rgba(0, 0, 0, 0.5)), url(${(props) => props.theme.assets.images.free_play.fp_vouchers_bg_png.toString()}) 0 -44px;\n background-size: cover;\n }\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VouchersGamesListTitleBox = styledBox(\"VouchersGamesListTitleBox\");\n","import React, {PropsWithChildren} from \"react\";\nimport { observable, action, makeObservable } from \"mobx\";\nimport {FreePlayContainerBox} from \"./boxes/container/free-play-container.box\";\nimport {observer} from \"mobx-react\";\nimport {VouchersSwiperComponent} from \"./parts/voucher-card/swiper/vouchers-swiper.component\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {VoucherGamesListBox} from \"./boxes/voucher-games-list/voucher-games-list.box\";\nimport {VouchersSwiperTitleBox} from \"./boxes/vouchers-swiper/vouchers-swiper-title.box\";\nimport {VouchersSwiperBackgroundBox} from \"./boxes/vouchers-swiper/vouchers-swiper-background.box\";\nimport {VouchersGamesListTitleBox} from \"./boxes/voucher-games-list-title/voucher-games-list-title.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {GameItemComponent} from \"../game-item/game-item.component\";\n\n@observer\nexport class FreePlayContainerComponent extends OrbitComponent {\n\n constructor(props: PropsWithChildren) {\n super(props);\n\n makeObservable(this);\n }\n\n @observable.ref\n currentVoucherIndex = 0;\n\n @action.bound\n private _onCurrentVoucherChangedHandler = (voucherIndex: number) => {\n this.currentVoucherIndex = voucherIndex;\n };\n\n private _renderVoucherGames = () => {\n const currentVoucher = this.services.freePlay.userVouchersToDisplayInUI[this.currentVoucherIndex];\n if(!currentVoucher) {\n return null;\n }\n\n const freePlayGames = currentVoucher.freePlayGames;\n\n return (<VoucherGamesListBox className={CyClass('cy-free-play-games-container')}>\n {freePlayGames.map(voucherGame => <GameItemComponent key={`${currentVoucher.id}_${voucherGame.gameInfo.gameType}`}\n className={CyClass('cy-free-play-game-item')}\n gameType={voucherGame.gameInfo.gameType}\n freePlayType={currentVoucher.freePlayType}\n onClickHandler={async () => {\n await voucherGame.play()\n }}\n style={{marginBottom: \"1.5rem\"}}\n />)}\n </VoucherGamesListBox>);\n }\n\n\n\n render() {\n\n\n return (\n <FreePlayContainerBox className={CyClass('cy-free-play-vouchers-container')}>\n <VouchersSwiperBackgroundBox>\n <VouchersSwiperTitleBox>\n {this.services.translation.translate('FREE_PLAY_MESSAGE_LIST_TITLE')}\n </VouchersSwiperTitleBox>\n <VouchersSwiperComponent onCurrentVoucherIndexChanged={this._onCurrentVoucherChangedHandler}/>\n </VouchersSwiperBackgroundBox>\n <VouchersGamesListTitleBox>\n {this.services.translation.translate('FREE_PLAY_MESSAGE_GAMES_LIST_TITLE')}\n </VouchersGamesListTitleBox>\n {this._renderVoucherGames()}\n </FreePlayContainerBox>\n )\n }\n}","import styled, {css} from \"styled-components\";\n\nexport const VoucherCardBox = styled.div<{showCursor: boolean; }>`\n position: relative;\n\n width: 31rem;\n height: 18rem;\n margin: 0 auto 3rem;\n ${props => props.showCursor ? css`cursor: pointer` : ''};\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 26rem;\n height: 15rem;\n }\n\n @media ${({theme}) => theme.mediaQuery.xlExact} {\n width: 33rem;\n } \n\n @media ${({theme}) => theme.mediaQuery.xxl + \" and \" + theme.mediaQuery.lowHeight} {\n width: 33rem;\n } \n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VoucherCardSideBox = styledBox(\"VoucherCardSideBox\");\n","import styled from \"styled-components\";\nimport {VoucherCardSideBox} from \"../voucher-card-side.box\";\n\nexport const VoucherCardFaceBox = styled(VoucherCardSideBox)`\n align-items: center;\n transform: rotateY(${({backSideShown}) => backSideShown ? \"180deg\" : \"0\"});\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardFaceContentBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n flex-grow: 1;\n line-height: 1.2;\n width: 100%;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardSideFooterBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n width: 100%;\n`","import styled from \"styled-components\";\nimport {VoucherCardSideFooterBox} from \"../../common/footer/voucher-card-side-footer.box\";\n\nexport const VoucherCardFaceFooterBox = styled(VoucherCardSideFooterBox)`\n`","import styled from \"styled-components\";\n\nexport const VoucherCardFaceIconContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding-right: 15px;\n height: 100%;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardFaceDetailsBox = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n flex-grow: 1;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin-top: 10px;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardFaceOriginalAmountBox = styled.div`\n font-size: 3rem;\n white-space: nowrap;\n ${({theme}) => theme.font.presets.ultra};\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 2rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardFaceVoucherNameBox = styled.div`\n font-size: 1.3rem;\n ${({theme}) => theme.font.presets.bold};\n letter-spacing: 1px;\n text-transform: uppercase;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardFaceCurrentAmountContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n ${({theme}) => theme.font.presets.regular};\n font-size: 1.5rem;\n margin-top: 20px;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin-top: 10px;\n font-size: 1.2rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardFaceIconBox = styled.div<{iconUrl: string}>`\n background-image: url(\"${props => props.iconUrl}\");\n background-repeat: no-repeat;\n background-position: center center;\n background-size: contain;\n width: 7.5em;\n height: 7.5em;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 6em;\n width: 6em;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardFaceCurrentAmountBox = styled.span`\n ${({theme}) => theme.font.presets.bold};\n padding-left: 4px;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardSideToggleButtonBox = styled.div`\n border: 1px solid;\n border-radius: 50%;\n padding: 1px;\n box-sizing: content-box;\n width: 1.4rem;\n height: 1.4rem;\n cursor: pointer;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardSideFooterContentBox = styled.div`\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n height: 100%;\n`","import styled, {css} from \"styled-components\";\n\nexport const VoucherCardFaceHeaderBox = styled.div<{isCloseToExpiration: boolean}>`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n width: 100%;\n font-size: 1.1rem;\n line-height: 1;\n ${\n props => props.isCloseToExpiration \n ? css`\n color: ${props.theme.colors.danger};\n ${props.theme.font.presets.bold};\n `\n : ''\n }\n`;\n","import {\n OrbitComponentWithState\n} from \"../../../../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {\n IFreePlayVoucherViewModel\n} from \"../../../../../services/free-play/vouchers/free-play-voucher-view-model.interface\";\nimport {VoucherCardFaceHeaderBox} from \"../../../boxes/voucher-card/face/header/voucher-card-face-header.box\";\nimport React from \"react\";\n\ninterface VoucherCardFaceHeaderComponentProps {\n voucher: IFreePlayVoucherViewModel;\n onClick?: () => void;\n}\n\ninterface VoucherCardFaceHeaderComponentState {\n expirationMessage: string;\n}\n\nexport class VoucherCardFaceHeaderComponent extends OrbitComponentWithState<VoucherCardFaceHeaderComponentProps, VoucherCardFaceHeaderComponentState> {\n\n constructor(props: VoucherCardFaceHeaderComponentProps) {\n super(props);\n this.state = {\n expirationMessage: props.voucher.expirationMessage\n };\n }\n\n private _expirationTimer: any = null;\n\n\n\n componentDidMount() {\n super.componentDidMount();\n if(this.props.voucher.isCloseToExpiration) {\n this._expirationTimer = setInterval(() => {\n this.setState({\n expirationMessage: this.props.voucher.expirationMessage\n })\n }, 1000);\n }\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n if(this._expirationTimer) {\n clearInterval(this._expirationTimer);\n }\n }\n\n render() {\n return (\n <VoucherCardFaceHeaderBox onClick={this.props.onClick} isCloseToExpiration={this.props.voucher.isCloseToExpiration}>\n {this.props.voucher.expirationMessage}\n </VoucherCardFaceHeaderBox>\n );\n }\n}","import React from \"react\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {\n IFreePlayVoucherViewModel\n} from \"../../../../../services/free-play/vouchers/free-play-voucher-view-model.interface\";\nimport {VoucherCardFaceBox} from \"../../../boxes/voucher-card/face/voucher-card-face.box\";\nimport {VoucherCardFaceContentBox} from \"../../../boxes/voucher-card/face/content/voucher-card-face-content.box\";\nimport {VoucherCardFaceFooterBox} from \"../../../boxes/voucher-card/face/footer/voucher-card-face-footer.box\";\nimport {VoucherCardFaceIconContainerBox} from \"../../../boxes/voucher-card/face/content/icon/voucher-card-face-icon-container.box\";\nimport {\n VoucherCardFaceDetailsBox\n} from \"../../../boxes/voucher-card/face/content/details/voucher-card-face-details.box\";\nimport {\n VoucherCardFaceOriginalAmountBox\n} from \"../../../boxes/voucher-card/face/content/details/original-amount/voucher-card-face-original-amount.box\";\nimport {\n VoucherCardFaceVoucherNameBox\n} from \"../../../boxes/voucher-card/face/content/details/name/voucher-card-face-voucher-name.box\";\nimport {\n VoucherCardFaceCurrentAmountContainerBox\n} from \"../../../boxes/voucher-card/face/content/details/current-amount/voucher-card-face-current-amount-container.box\";\nimport {observer} from \"mobx-react\";\nimport {VoucherCardFaceIconBox} from \"../../../boxes/voucher-card/face/content/icon/voucher-card-face-icon.box\";\nimport {\n VoucherCardFaceCurrentAmountBox\n} from \"../../../boxes/voucher-card/face/content/details/current-amount/voucher-card-face-current-amount.box\";\nimport {\n VoucherCardSideToggleButtonBox\n} from \"../../../boxes/voucher-card/common/footer/side-toggle/voucher-card-side-toggle-button.box\";\nimport {\n VoucherCardSideFooterContentBox\n} from \"../../../boxes/voucher-card/common/footer/footer-content/voucher-card-side-footer-content.box\";\nimport { SvgSizeUnit } from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport {VoucherCardFaceHeaderComponent} from \"./voucher-card-face-header.component\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\ninterface VoucherCardFaceComponentProps {\n voucher: IFreePlayVoucherViewModel;\n onToggleSide?: () => void;\n onClick?: () => void;\n backSideShown: boolean;\n backgroundImageUrl: string;\n}\n\n\nexport const VoucherCardFaceComponent = observer(\n class VoucherCardFaceComponent extends OrbitComponent<VoucherCardFaceComponentProps> {\n\n private _renderOriginalAmount() {\n return (\n <VoucherCardFaceOriginalAmountBox>\n {this.props.voucher.formattedOriginalAmount || this.props.voucher.formattedCurrentBalance}\n </VoucherCardFaceOriginalAmountBox>\n )\n }\n\n private _renderCurrentAmount() {\n if(!this.props.voucher.formattedOriginalAmount) {\n return null;\n }\n\n return (\n <VoucherCardFaceCurrentAmountContainerBox>\n <span>\n {this.services.translation.translate('FREE_PLAY_VOUCHER_BALANCE_PREFIX')}\n </span>\n <VoucherCardFaceCurrentAmountBox>\n {this.props.voucher.formattedCurrentBalance}\n </VoucherCardFaceCurrentAmountBox>\n </VoucherCardFaceCurrentAmountContainerBox>\n );\n }\n\n render() {\n let InfoIcon = this.services.theme.currentTheme.icons.infoIcon;\n return (\n <VoucherCardFaceBox backgroundImageUrl={this.props.backgroundImageUrl} backSideShown={this.props.backSideShown} className={CyClass('cy-voucher-card-face')}>\n <VoucherCardFaceHeaderComponent voucher={this.props.voucher} onClick={this.props.onClick}/>\n\n <VoucherCardFaceContentBox onClick={this.props.onClick}>\n <VoucherCardFaceIconContainerBox>\n <VoucherCardFaceIconBox iconUrl={this.props.voucher.iconUrl}/>\n </VoucherCardFaceIconContainerBox>\n <VoucherCardFaceDetailsBox>\n {this._renderOriginalAmount()}\n <VoucherCardFaceVoucherNameBox>\n {this.props.voucher.voucherName}\n </VoucherCardFaceVoucherNameBox>\n {this._renderCurrentAmount()}\n </VoucherCardFaceDetailsBox>\n </VoucherCardFaceContentBox>\n\n <VoucherCardFaceFooterBox>\n <VoucherCardSideToggleButtonBox onClick={this.props.onToggleSide}>\n <InfoIcon size={1.4} sizeUnit={SvgSizeUnit.Rem} />\n </VoucherCardSideToggleButtonBox>\n <VoucherCardSideFooterContentBox onClick={this.props.onClick}/>\n </VoucherCardFaceFooterBox>\n\n </VoucherCardFaceBox>\n )\n }\n }\n);","import styled from \"styled-components\";\nimport {VoucherCardSideBox} from \"../voucher-card-side.box\";\n\nexport const VoucherCardBackBox = styled(VoucherCardSideBox)`\n align-items: flex-start;\n transform: rotateY(${({backSideShown}) => backSideShown ? \"0\" : \"180deg\"});\n`;\n","import styled from \"styled-components\";\n\nexport const VoucherCardBackHeaderBox = styled.div`\n display: flex;\n flex-direction: row;\n align-content: flex-start;\n ${({theme}) => theme.font.presets.bold};\n font-size: 1.5rem;\n padding-top: 5px;\n padding-bottom: 5px;\n`","import styled from \"styled-components\";\n\nexport const VoucherCardBackContentBox = styled.div`\n display: flex;\n flex-direction: row;\n align-content: flex-start;\n flex-grow: 1;\n font-size: 1.2rem;\n line-height: 1.3;\n`","import styled from \"styled-components\";\nimport {VoucherCardSideFooterBox} from \"../../common/footer/voucher-card-side-footer.box\";\n\nexport const VoucherCardBackFooterBox = styled(VoucherCardSideFooterBox)`\n`","import React from \"react\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {\n IFreePlayVoucherViewModel\n} from \"../../../../../services/free-play/vouchers/free-play-voucher-view-model.interface\";\nimport {VoucherCardBackBox} from \"../../../boxes/voucher-card/back/voucher-card-back.box\";\nimport {VoucherCardBackHeaderBox} from \"../../../boxes/voucher-card/back/header/voucher-card-back-header.box\";\nimport {VoucherCardBackContentBox} from \"../../../boxes/voucher-card/back/content/voucher-card-back-content.box\";\nimport {VoucherCardBackFooterBox} from \"../../../boxes/voucher-card/back/footer/voucher-card-back-footer.box\";\nimport {observer} from \"mobx-react\";\nimport {\n VoucherCardSideToggleButtonBox\n} from \"../../../boxes/voucher-card/common/footer/side-toggle/voucher-card-side-toggle-button.box\";\nimport {\n VoucherCardSideFooterContentBox\n} from \"../../../boxes/voucher-card/common/footer/footer-content/voucher-card-side-footer-content.box\";\nimport { SvgSizeUnit } from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\ninterface VoucherCardBackComponentProps {\n voucher: IFreePlayVoucherViewModel;\n onToggleSide: () => void;\n onClick?: () => void;\n backSideShown: boolean;\n backgroundImageUrl: string;\n}\n\nexport const VoucherCardBackComponent = observer(\n class VoucherCardBackComponent extends OrbitComponent<VoucherCardBackComponentProps> {\n render() {\n let CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n return (\n <VoucherCardBackBox backgroundImageUrl={this.props.backgroundImageUrl} backSideShown={this.props.backSideShown} className={CyClass('cy-voucher-card-back')}>\n <VoucherCardBackHeaderBox onClick={this.props.onClick}>\n {this.props.voucher.voucherName}\n </VoucherCardBackHeaderBox>\n <VoucherCardBackContentBox onClick={this.props.onClick}>\n {this.props.voucher.voucherDescription}\n </VoucherCardBackContentBox>\n <VoucherCardBackFooterBox>\n <VoucherCardSideToggleButtonBox onClick={this.props.onToggleSide}>\n <CloseIcon size={1.4} sizeUnit={SvgSizeUnit.Rem} />\n </VoucherCardSideToggleButtonBox>\n <VoucherCardSideFooterContentBox onClick={this.props.onClick}/>\n </VoucherCardBackFooterBox>\n </VoucherCardBackBox>\n );\n }\n }\n);\n\n","import React from \"react\";\nimport {\n IFreePlayVoucherViewModel\n} from \"../../../../services/free-play/vouchers/free-play-voucher-view-model.interface\";\nimport {VoucherCardBox} from \"../../boxes/voucher-card/voucher-card.box\";\nimport {VoucherCardFaceComponent} from \"./face/voucher-card-face.component\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponentWithState} from \"../../../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {VoucherCardBackComponent} from \"./back/voucher-card-back.component\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\n\ninterface VoucherCardComponentProps {\n voucher: IFreePlayVoucherViewModel;\n onClick?: (voucher: IFreePlayVoucherViewModel) => void;\n}\n\ninterface VoucherCardComponentState {\n showBackSide: boolean;\n}\n\nexport const VoucherCardComponent = observer(\n class VoucherCardComponent extends OrbitComponentWithState<VoucherCardComponentProps, VoucherCardComponentState> {\n constructor(props: VoucherCardComponentProps) {\n super(props);\n this.state = {\n showBackSide: false\n }\n }\n private _onToggleSide = () => {\n this.setState({\n showBackSide: !this.state.showBackSide\n });\n }\n\n private _onCardSideClickHandler = () => {\n if (this.props.onClick) {\n this.props.onClick(this.props.voucher);\n }\n }\n\n render() {\n return (\n <VoucherCardBox showCursor={Boolean(this.props.onClick)} className={CyClass('cy-free-play-voucher-container')}>\n <VoucherCardFaceComponent backgroundImageUrl={this.props.voucher.backgroundImageUrl} voucher={this.props.voucher} backSideShown={this.state.showBackSide} onToggleSide={this._onToggleSide} onClick={this._onCardSideClickHandler} />\n <VoucherCardBackComponent backgroundImageUrl={this.props.voucher.backgroundImageUrl} voucher={this.props.voucher} backSideShown={this.state.showBackSide} onToggleSide={this._onToggleSide} onClick={this._onCardSideClickHandler} />\n </VoucherCardBox>\n )\n }\n }\n);","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const FreeToPlayAnimatedIconBox = styledBox('FreeToPlayAnimatedIconBox');","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const FreeToPlayClickBox = styledBox(\"FreeToPlayClickBox\");","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const FreeToPlayIconPositionBox = styledBox('FreeToPlayIconPositionBox');","import {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport * as React from \"react\";\nimport {FreeToPlayAnimatedIconBox} from \"./boxes/free-to-play-animated-icon.box\";\nimport {AnimatedIconObservableTarget, AnimatedIconUnloadReason, IAnimatedIconRequestOptions} from \"../../services/pixi-app/animated-icon-base-service.service\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../common/const/casinofied-analytics-consts\";\nimport {AreaType, CasinoFreeToPlayGameStage} from \"@sparkware/uc-sdk-core\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ISendElasticEventOptions} from \"../../services/analytics/analytics.service.interface\";\nimport {FreeToPlayClickBox} from \"./boxes/free-to-play-click.box\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {FreeToPlayIconPositionBox} from \"./boxes/free-to-play-icon-position.box\";\n\n\ninterface FreeToPlayAnimatedIconComponentProps extends ComponentServicesPick<'bottomNavigationBar' | 'device'> {\n\n}\n\nconst ComponentBody = observer(class FreeToPlayAnimatedIconComponent extends OrbitComponent<FreeToPlayAnimatedIconComponentProps> {\n private iconRequestOptions: Omit<IAnimatedIconRequestOptions, \"wrapper\"> = {\n timings: {\n delay: 2000,\n interval: 3000\n },\n ...this.services.theme.themeCustomizer.getFreeToPlayAnimation(),\n };\n\n private iconObservableTarget: AnimatedIconObservableTarget | undefined;\n\n private _captureElementRefForIcon(element: HTMLElement | null) {\n // if element is null (the component was unmounted) or the element changed, then check if we have a currently running/loading animation and remove it\n if (!element || (this.iconObservableTarget && this.iconObservableTarget.wrapper !== element)) {\n // if the current animation is loading, cancel it\n // if the current animation is already running, stop and dispose it\n // animation disposer do both things, abort if loading, dispose if running\n if (this.iconObservableTarget && this.iconObservableTarget.animationDisposer) {\n this.iconObservableTarget.animationDisposer(AnimatedIconUnloadReason.REQUESTED);\n }\n }\n // if the element exists and is different from the previous one, then the animation must be started\n if (element && (!this.iconObservableTarget || this.iconObservableTarget.wrapper !== element)) {\n let requestOptions: Omit<IAnimatedIconRequestOptions, \"wrapper\"> = this.iconRequestOptions;\n // update the reference\n this.iconObservableTarget = {\n ...requestOptions,\n wrapper: element\n };\n this.services.freeToPlay.loadFreeToPlayAnimation(this.iconObservableTarget);\n }\n // if element is null just update the reference so we know next time the capture is ran\n if (!element) {\n this.iconObservableTarget = undefined;\n }\n }\n\n componentDidUpdate() {\n if (this.services.freeToPlay.isPromotionEligible) {\n this._sendAnalytics(\"SHOW\");\n }\n }\n\n render() {\n if (!this.services.freeToPlay.isPromotionEligible) {\n return null;\n }\n\n // Hide UI of the widget but keep Functionality\n if (!this.services.freeToPlay.shouldShowIcon) {\n return null;\n }\n\n if (this.services.freeToPlay.isPromotionOpened) {\n return null;\n }\n\n // On phones with rounded corners and where the icon is right at the corner the icon is a little cut out.\n // This cuts the text inside the icon in MRG. Not a problem on 888 casino skin\n // This issue doesn't happen on iOS because of the safe area bottom reserved for the navigation bar.\n // It also doesn't happen on webapp because there are the system buttons and the browser\n // So, only on Android hybrid (full screen) where there is no bottom nav bar\n // I will pass shouldOffsetIcon and will do nothing with it in default.box and use it only in mrgreen.box\n // This solution is kind of shit because we cannot detect if a screen has rounded corners but since almost all phones since 2017 have rounded corners we just assume that it's a de facto\n let shouldOffsetIcon = false;\n if (this.props.bottomNavigationBar.bottomNavbarHeight === 0 && this.props.device.hybrid.isHybrid && this.props.device.os.isAndroid) {\n shouldOffsetIcon = true;\n }\n\n return (\n <FreeToPlayIconPositionBox bottomNavbarHeight={this.props.bottomNavigationBar.bottomNavbarHeight} shouldOffsetIcon={shouldOffsetIcon}>\n <FreeToPlayAnimatedIconBox\n ref={this._captureElementRefForIcon.bind(this)}\n />\n <FreeToPlayClickBox className={CyClass('cy-free-to-play-click-box')} onClick={() => this._openBonusWheel()} />\n </FreeToPlayIconPositionBox>\n );\n }\n\n private _openBonusWheel = async () => {\n this._sendAnalytics(\"CLICK\");\n\n // For Italy there will be an AB test. Some users will see the MiniArena as before and some will go directly to the Daily Wish wheel.\n // To show the daily wish directly, channel.element must be \"deep_link\", otherwise it will not work.\n // Even if it is a bit strange to set the element to \"deep_link\" instead of \"floating_icon\" even\n // if the flow does not originate from a deeplink but from a click on the floating icon, I must do this to work\n const gameStage = this.services.abTestingFeatureDataProvider.freeToPlayFlow.isEnabled ? CasinoFreeToPlayGameStage.DailyWish : CasinoFreeToPlayGameStage.MiniArena;\n const element = this.services.abTestingFeatureDataProvider.freeToPlayFlow.isEnabled ? CHANNEL_ELEMENTS.deepLink : CHANNEL_ELEMENTS.floatingIcon;\n \n await this.services.freeToPlay.showPromotion({\n channel: {\n area: AreaType.button,\n source: CHANNEL_SOURCE.casinoClient,\n element\n },\n appSpecificParameters: {\n gameStage\n }\n }\n );\n }\n\n private _sendAnalytics(action: string) {\n try {\n let options: ISendElasticEventOptions = {\n action: action,\n category: \"Floating_icon\",\n eventType: \"bonus_widget\",\n appID: \"F2P\",\n customData: {\n location: this.services.location.isHomePage ? 'homepage' : this.services.location.currentUri.pathName.toString(),\n segmentation: this.services.user.playerRMSStatus\n }\n };\n this.services.analytics.sendElasticInfoEvent(options, true);\n }\n catch (err) {\n console.log(\"Floating_icon \" + action + \" analytics report failed with error: \" + err);\n }\n }\n});\n\nexport const FreeToPlayAnimatedIconComponent = withServices(ComponentBody, ['bottomNavigationBar', 'device']);\n","import styled from \"styled-components\";\n\nexport const GamblingSessionMessageBaseBox = styled.div`\n text-align: center;\n padding-bottom: 10px;\n font-weight: 700;\n`","import {TimeSpan} from \"@sparkware/app-utils\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {DividerBox} from \"../../../basic-ui-components/layout/divider/divider.box\";\nimport {SpacerBox} from \"../../../basic-ui-components/layout/spacer.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\nimport {GamblingSessionMessageBaseBox} from \"../boxes/gambling-session-message.box\";\nimport {GamblingSessionLimitSummaryBox} from \"../session-info/boxes/gambling-session-limits-summary.box\";\nimport {GamblingSessionInfoComponent} from \"../session-info/gambling-session-info.component\";\n\nexport enum LimitType {\n Loss,\n Time,\n IntervalReminder\n}\n\ninterface IGamblingSessionLimitReachedComponentProps {\n sessionDuration: TimeSpan;\n limitType: LimitType;\n totalBets: number;\n totalWins: number;\n dialogHandler: IModalDialogHandler;\n\n sessionLimitTimestamp: string;\n}\n\nexport const GamblingSessionLimitReachedComponent: React.FC<IGamblingSessionLimitReachedComponentProps> = (props) => {\n const services = useServices();\n let mainTextKey = \"GAMBLING_SESSION_INTERVAL_REMINDER_TEXT\";\n if (props.limitType === LimitType.Loss) {\n mainTextKey = 'GAMBLING_SESSION_LOSS_LIMIT_REACHED_TEXT';\n }\n if (props.limitType === LimitType.Time) {\n mainTextKey = 'GAMBLING_SESSION_TIME_LIMIT_REACHED_TEXT';\n }\n return (\n <GamblingSessionLimitSummaryBox>\n <GamblingSessionMessageBaseBox>\n { services.translation.translate(mainTextKey, {\n gamblingSessionLimitTimestamp: props.sessionLimitTimestamp\n }) }\n </GamblingSessionMessageBaseBox>\n <DividerBox />\n <SpacerBox height=\"1.5rem\"/>\n\n <GamblingSessionInfoComponent\n sessionDuration={props.sessionDuration}\n totalWins={props.totalWins}\n totalBets={props.totalBets}\n />\n\n <div>\n <Button preset={\"primary\"} onClick={() => props.dialogHandler.close()} margin=\"2rem auto 0\">\n {services.translation.translate(\"OK\")}\n </Button>\n </div>\n\n </GamblingSessionLimitSummaryBox>\n );\n};","import {TimeSpan} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {SpacerBox} from \"../../../basic-ui-components/layout/spacer.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\nimport {ModalDialogActionsComponent} from \"../../modal-dialog/modal-dialog-actions.component\";\nimport {GamblingSessionLimitSummaryBox} from \"../session-info/boxes/gambling-session-limits-summary.box\";\nimport {GamblingSessionInfoComponent} from \"../session-info/gambling-session-info.component\";\n\ninterface IGamblingSessionLogoutDialogProps {\n dialogHandler: IModalDialogHandler;\n sessionDuration: TimeSpan;\n totalBets: number;\n totalWins: number;\n onLogout(): void;\n onCancel(): void;\n}\n\nexport const GamblingSessionLogoutDialog: React.FC<IGamblingSessionLogoutDialogProps> = (props) => {\n const services = useServices();\n return (\n <GamblingSessionLimitSummaryBox>\n <SpacerBox height=\"1.5rem\"/>\n\n <GamblingSessionInfoComponent\n sessionDuration={props.sessionDuration}\n totalWins={props.totalWins}\n totalBets={props.totalBets}\n />\n\n <ModalDialogActionsComponent\n primaryAction={{\n className: 'cy-gambling-session-logout-button',\n text: services.translation.translate('LOGOUT'),\n onClick: props.onLogout\n }}\n secondaryAction={{\n className: 'cy-gambling-session-cancel-button',\n text: services.translation.translate('CANCEL'),\n onClick: props.onCancel\n }} \n buttonsOnSeparateLines={services.mediaQuery.lAndBelow}\n className={CyClass(\"cy-modal-dialog-buttons-area\")}\n margin=\"2rem auto 0\"\n />\n\n </GamblingSessionLimitSummaryBox>\n );\n}","import styled from \"styled-components\";\n\nexport const GamblingSessionLimitSummaryBox = styled.div`\n font-size: 1.5rem;\n line-height: 1.75rem;\n padding: 15px;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n width: 600px;\n }\n`","import styled from \"styled-components\";\nimport {dialogHighlightedTextMixin, dialogTextMixin} from \"../../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const GamblingSessionInfoWrapperBox = styled.div`\n margin-bottom: 1.5rem;\n`;\n\nexport const GamblingSessionInfoTextBox = styled.div`\n ${dialogTextMixin}\n`;\n\nexport const GamblingSessionInfoValueBox = styled.div`\n ${dialogHighlightedTextMixin}\n`;\n","import React from 'react';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {GamblingSessionInfoTextBox, GamblingSessionInfoValueBox, GamblingSessionInfoWrapperBox} from \"./boxes/gambling-session-info.box\";\n\ninterface IGamblingSessionInfoProps {\n sessionDuration: TimeSpan;\n totalBets: number;\n totalWins: number;\n}\n\nexport const GamblingSessionInfoComponent: React.FC<IGamblingSessionInfoProps> = (props) => {\n const services = useServices();\n return (<>\n <GamblingSessionInfoWrapperBox>\n <GamblingSessionInfoTextBox>{services.translation.translate(\"GAMBLING_SESSION_DATA_DURATION\")}</GamblingSessionInfoTextBox>\n <GamblingSessionInfoValueBox className={CyClass('cy-gambling-session-duration')}>{props.sessionDuration.toHoursAndMinutesString()}</GamblingSessionInfoValueBox>\n </GamblingSessionInfoWrapperBox>\n\n <GamblingSessionInfoWrapperBox>\n <GamblingSessionInfoTextBox>{services.translation.translate(\"GAMBLING_SESSION_DATA_WIN_LOSS_SUMMARY\")}</GamblingSessionInfoTextBox>\n <GamblingSessionInfoValueBox className={CyClass('cy-gambling-session-profit-loss')}>{services.currency.formatMoney(props.totalWins - props.totalBets)}</GamblingSessionInfoValueBox>\n </GamblingSessionInfoWrapperBox>\n\n <GamblingSessionInfoWrapperBox>\n <GamblingSessionInfoTextBox>{services.translation.translate(\"GAMBLING_SESSION_DATA_TOTAL_BETS\")}</GamblingSessionInfoTextBox>\n <GamblingSessionInfoValueBox className={CyClass('cy-gambling-session-total-bets')}>{services.currency.formatMoney(props.totalBets)}</GamblingSessionInfoValueBox>\n </GamblingSessionInfoWrapperBox>\n </>);\n}","import styled from \"styled-components\";\n\nexport const GamblingSessionLimitsBox = styled.div`\n font-size: 1.275rem;\n line-height: 1.7rem;\n padding: 15px;\n @media ${({theme}) => theme.mediaQuery.sAndAbove} {\n max-width: 600px;\n }\n`","import styled from \"styled-components\";\n\nexport const DropDownsGroupBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n margin: 20px 0 15px 0;\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n flex-direction: column;\n }\n \n`","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {DropDownComponent, DropDownItem, IDropDownSelectionResult} from \"./drop-down.component\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {parseCommaSeparatedNumbers} from \"../../../../../utils/string-helpers\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\ninterface LossLimitDropDownComponentProps {\n onItemSelected: (value: NullableNumber) => void;\n errorMessage?: string;\n}\n\nexport const LossLimitDropDownComponent = observer(\n class LossLimitDropDownComponent extends OrbitComponent<LossLimitDropDownComponentProps> {\n\n private _getLossLimits(): DropDownItem[] {\n let bankroll = this.services.walletProxy.totalBankroll;\n\n const translateLossLimit = (percent: number, lossAmount: number): string => {\n return this.services.translation.translate('GAMBLING_SESSION_LOSS_LIMIT_VALUE', {\n percent: percent,\n loss: this.services.currency.formatMoney(lossAmount)\n })\n }\n\n if (bankroll < 100) {\n return [\n {\n value: bankroll,\n text: translateLossLimit(100, bankroll)\n }\n ]\n }\n\n const percentages = parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.LossLimitPercentages);\n\n return percentages.map(p => {\n return {\n percent: p,\n value: Math.floor(p * bankroll / 100)\n }\n }).filter(lossLimit => lossLimit.value >= 100)\n .map(lossLimit => {\n return {\n value: lossLimit.value,\n text: translateLossLimit(lossLimit.percent, lossLimit.value)\n }\n });\n }\n\n private _onItemSelectedHandler = async (value: NullableNumber): Promise<IDropDownSelectionResult> => {\n this.props.onItemSelected(value);\n return {\n cancel: false\n };\n }\n\n render() {\n return (\n <DropDownComponent label={this.services.translation.translate('GAMBLING_SESSION_LOSS_LIMIT_DROP_DOWN_LABEL')}\n items={this._getLossLimits()}\n nullItemText={this.services.translation.translate('SELECT')}\n onItemSelected={this._onItemSelectedHandler}\n errorMessage={this.props.errorMessage}\n className={CyClass('cy-gambling-session-limit-loss-limit-select')}/>\n );\n }\n }\n);","import {ITranslationService} from \"./translation.service.interface\";\n\nexport class TranslationsHelper {\n constructor(private readonly translation: ITranslationService) {\n }\n\n minutes(value: number): string {\n if (value === 1) {\n return this.translation.translate('ONE_MINUTE');\n }\n return this.translation.translate('X_MINUTES', {x: value});\n }\n\n hours(value: number): string {\n if(value === 1) {\n return this.translation.translate('ONE_HOUR');\n }\n return this.translation.translate('X_HOURS', {x: value});\n }\n\n days(value: number): string {\n\n if(value === 1) {\n return this.translation.translate('ONE_DAY');\n }\n return this.translation.translate('X_DAYS', {x: value});\n }\n\n week(): string {\n return this.translation.translate('ONE_WEEK');\n }\n\n month(): string {\n return this.translation.translate('ONE_MONTH');\n }\n}","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {DropDownComponent, DropDownItem, IDropDownSelectionResult} from \"./drop-down.component\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {TranslationsHelper} from \"../../../../services/translation/translations-helper\";\nimport {parseCommaSeparatedNumbers} from \"../../../../../utils/string-helpers\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {DialogButtonClickHandleResultEnum} from \"../../../../services/dialog/dialog.service.interface\";\n\ninterface TimeLimitDropDownComponentProps {\n onItemSelected: (value: NullableNumber) => void;\n errorMessage?: string;\n className?: string;\n}\n\nexport const TimeLimitDropDownComponent = observer(\n class TimeLimitDropDownComponent extends OrbitComponent<TimeLimitDropDownComponentProps> {\n\n private get _translations(): TranslationsHelper {\n return new TranslationsHelper(this.services.translation);\n }\n\n private _translateTimeSpan(timeSpan: TimeSpan): string {\n return timeSpan.totalMinutes < 60 ? this._translations.minutes(timeSpan.totalMinutes) : this._translations.hours(timeSpan.totalHours)\n }\n\n private _parseMaxDurations(): number[] {\n if(this.services.device.os.isMobileOS) {\n return parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.MaxDurationsInMinutesForMobile);\n } else {\n return parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.MaxDurationsInMinutesForPC);\n }\n }\n\n private _getDropDownItems(): DropDownItem[] {\n return this._parseMaxDurations().map(minutes => {\n const timeSpan = TimeSpan.fromMinutes(minutes);\n return {\n value: timeSpan.totalSeconds,\n text: this._translateTimeSpan(timeSpan)\n };\n });\n }\n private _onItemSelectedHandler = (value: NullableNumber): Promise<IDropDownSelectionResult> => {\n return new Promise<IDropDownSelectionResult>((resolve) => {\n\n const cancelSelection = () => {\n resolve({\n cancel: true\n });\n }\n\n const acceptSelection = () => {\n resolve({\n cancel: false\n });\n this.props.onItemSelected(value);\n }\n\n if(Check.isNullOrUndefined(value) || value !== Math.min(...this._parseMaxDurations())) {\n acceptSelection();\n } else {\n this.services.dialog.showSimpleTextModal({\n hideCloseButton: true,\n title: this.services.translation.translate('ATTENTION'),\n text: this.services.translation.translate('GAMBLING_SESSION_LIMIT_TIME_LOSS_CONFIRMATION_TEXT', {time: this._translateTimeSpan(TimeSpan.fromMinutes(value))})\n + '\\n\\n\\n'\n + this.services.translation.translate('GAMBLING_SESSION_LIMIT_TIME_LOSS_CONFIRMATION_QUESTION'),\n\n buttons: [\n {\n text: this.services.translation.translate('NO'),\n buttonPreset: 'info',\n onClick: async () => {\n cancelSelection();\n this.services.analytics.sendAnalytics('spain_limit_window_minimal_time_message', 'no');\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n },\n {\n text: this.services.translation.translate('YES'),\n buttonPreset: 'info',\n onClick: async () => {\n acceptSelection();\n this.services.analytics.sendAnalytics('spain_limit_window_minimal_time_message', 'yes');\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ]\n })\n }\n\n\n });\n }\n\n render() {\n return (\n <DropDownComponent label={this.services.translation.translate('GAMBLING_SESSION_TIME_LIMIT_DROP_DOWN_LABEL')}\n items={this._getDropDownItems()}\n nullItemText={this.services.translation.translate('SELECT')}\n onItemSelected={this._onItemSelectedHandler}\n errorMessage={this.props.errorMessage}\n className={CyClass('cy-gambling-session-limit-duration-select')}/>\n );\n }\n }\n);","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {TranslationsHelper} from \"../../../../services/translation/translations-helper\";\nimport {DropDownComponent, DropDownItem, IDropDownSelectionResult} from \"./drop-down.component\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {parseCommaSeparatedNumbers} from \"../../../../../utils/string-helpers\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\ninterface IntervalReminderDropDownComponentProps {\n onItemSelected: (value: NullableNumber) => void;\n}\n\nexport const IntervalReminderDropDownComponent = observer(\n class IntervalReminderDropDownComponent extends OrbitComponent<IntervalReminderDropDownComponentProps> {\n\n private get _translations(): TranslationsHelper {\n return new TranslationsHelper(this.services.translation);\n }\n\n private _getReminderIntervals(): DropDownItem[] {\n const values = parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.IntervalReminderInMinutes)\n .map(minutes => TimeSpan.fromMinutes(minutes))\n return values.map(val => {\n return {\n value: val.totalSeconds,\n text: val.totalMinutes < 60 ? this._translations.minutes(val.totalMinutes) : this._translations.hours(val.totalHours)\n };\n });\n }\n\n private _onItemSelectedHandler = async (value: NullableNumber): Promise<IDropDownSelectionResult> => {\n this.props.onItemSelected(value);\n return {\n cancel: false\n };\n }\n\n render() {\n return (\n <DropDownComponent label={this.services.translation.translate('GAMBLING_SESSION_REMINDER_INTERVAL_DROP_DOWN_LABEL')}\n items={this._getReminderIntervals()}\n onItemSelected={this._onItemSelectedHandler}\n className={CyClass('cy-gambling-session-limit-interval-reminder-select')}/>\n );\n }\n }\n);","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {DropDownComponent, DropDownItem, IDropDownSelectionResult} from \"./drop-down.component\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {TranslationsHelper} from \"../../../../services/translation/translations-helper\";\nimport {parseCommaSeparatedNumbers} from \"../../../../../utils/string-helpers\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {DialogButtonClickHandleResultEnum} from \"../../../../services/dialog/dialog.service.interface\";\n\n\ninterface RestrictionPeriodsDropDownComponentProps {\n onItemSelected: (value: NullableNumber) => void;\n}\n\nexport const RestrictionPeriodsDropDownComponent = observer(\n class RestrictionPeriodsDropDownComponent extends OrbitComponent<RestrictionPeriodsDropDownComponentProps> {\n\n private get _translations(): TranslationsHelper {\n return new TranslationsHelper(this.services.translation);\n }\n\n private _translateTimeSpan = (time: TimeSpan): string => {\n if(time.totalMinutes < 60) {\n return this._translations.minutes(time.totalMinutes);\n }\n\n if(time.totalHours < 24) {\n return this._translations.hours(time.totalHours);\n }\n\n if(time.totalDays === 7) {\n return this._translations.week();\n }\n\n if(time.totalDays === 30 || time.totalDays === 31) {\n return this._translations.month();\n }\n\n return this._translations.days(time.totalDays);\n }\n\n private _getReminderIntervals(): DropDownItem[] {\n const values = parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.RestrictionPeriodsInMinutes)\n .map(minutes => TimeSpan.fromMinutes(minutes))\n return values.map(val => {\n return {\n value: val.totalSeconds,\n text: this.services.translation.translate('GAMBLING_SESSION_LIMIT_RESTRICTION_PERIOD_VALUE',{time: this._translateTimeSpan(val)})\n };\n });\n }\n\n private _onItemSelectedHandler = (value: NullableNumber): Promise<IDropDownSelectionResult> => {\n return new Promise<IDropDownSelectionResult>((resolve) => {\n\n const cancelSelection = () => {\n resolve({\n cancel: true,\n overrideValueOnCancel: null\n });\n this.props.onItemSelected(null);\n }\n\n const acceptSelection = () => {\n resolve({\n cancel: false\n });\n this.props.onItemSelected(value);\n }\n\n if(Check.isNullOrUndefined(value)) {\n acceptSelection();\n this.props.onItemSelected(value);\n } else {\n this.services.dialog.showSimpleTextModal({\n hideCloseButton: true,\n title: this.services.translation.translate('ATTENTION'),\n text: this.services.translation.translate('GAMBLING_SESSION_LIMIT_RESTRICTION_BLOCK_CONFIRMATION_TEXT', {time: this._translateTimeSpan(TimeSpan.fromSeconds(value))})\n + '\\n\\n\\n'\n + this.services.translation.translate('GAMBLING_SESSION_LIMIT_RESTRICTION_BLOCK_CONFIRMATION_QUESTION'),\n\n buttons: [\n {\n text: this.services.translation.translate('NO'),\n buttonPreset: 'info',\n onClick: async () => {\n cancelSelection();\n // TODO: SPAIN_DECREE - change analytics\n this.services.analytics.sendAnalytics('spain_limit_window_minimal_time_message', 'no');\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n },\n {\n text: this.services.translation.translate('YES'),\n buttonPreset: 'info',\n onClick: async () => {\n acceptSelection();\n // TODO: SPAIN_DECREE - change analytics\n this.services.analytics.sendAnalytics('spain_limit_window_minimal_time_message', 'yes');\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n\n ]\n })\n }\n\n\n });\n }\n\n render() {\n return (\n <DropDownComponent label={this.services.translation.translate('GAMBLING_SESSION_RESTRICTION_PERIOD_DROP_DOWN_LABEL')}\n items={this._getReminderIntervals()}\n nullItemText={this.services.translation.translate('DONT_WANT_TO_BE_BLOCKED')}\n onItemSelected={this._onItemSelectedHandler}\n className={CyClass('cy-gambling-session-limit-restriction-period-select')}/>\n );\n }\n }\n);","import styled from \"styled-components\";\n\nexport const FooterBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n`","import styled from \"styled-components\";\n\n\nexport const DropDownsSeparatorBox = styled.div`\n width: 50px;\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n display: none;\n }\n`;\n","export const GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK = 'gambling-session-limits-responsible-gaming-link';","import styled from \"styled-components\";\nimport {GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK} from \"../css-constants\";\n\nexport const RegulatoryTextBox = styled.div`\n color: ${props => props.theme.colors.textMiddleDark};\n font-size: 1.3rem;\n white-space: pre-line;\n padding-top: 15px;\n \n \n > .${GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK} {\n color: ${props => props.theme.colors.brandPrimary};\n text-decoration-line: underline;\n }\n`","import styled from \"styled-components\";\nimport {GamblingSessionMessageBaseBox} from \"../../boxes/gambling-session-message.box\";\n\nexport const GamblingSessionMessageBox = styled(GamblingSessionMessageBaseBox)`\n max-width: 250px;\n margin: 0 auto;\n`;\n","import styled from \"styled-components\";\nimport {GamblingSessionMessageBaseBox} from \"../../boxes/gambling-session-message.box\";\n\nexport const GamblingSessionWarnMessageBox = styled(GamblingSessionMessageBaseBox)`\n color: ${({theme}) => theme.colors.buttonWarning};\n text-transform: uppercase;\n`","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {GamblingSessionLimitsBox} from \"./boxes/gambling-session-limits.box\";\nimport {IGamblingSessionLimitsSetup} from '../../../services/gambling-session/gambling-session-limits-setup.interface';\nimport {IModalDialogHandler} from '../../../services/dialog/dialog.service.interface';\nimport {DropDownsGroupBox} from \"./boxes/drop-downs-group.box\";\nimport {NullableNumber, NullableString} from '../../../../common/types/nullable-types';\nimport {OrbitComponentWithState} from '../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {LossLimitDropDownComponent} from \"./parts/loss-limit-drop-down.component\";\nimport {TimeLimitDropDownComponent} from \"./parts/time-limit-drop-down.component\";\nimport {IntervalReminderDropDownComponent} from \"./parts/interval-reminder-drop-down.component\";\nimport {RestrictionPeriodsDropDownComponent} from \"./parts/restriction-periods-drop-down.component\";\nimport {FooterBox} from \"./boxes/footer.box\";\nimport {Button} from '../../../basic-ui-components/button/base/button.component';\nimport {parseCommaSeparatedNumbers} from '../../../../utils/string-helpers';\nimport {DropDownsSeparatorBox} from \"./boxes/drop-downs-separator.box\";\nimport {RegulatoryTextBox} from \"./boxes/regulatory-text.box\";\nimport {GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK} from './css-constants';\nimport {GamblingSessionMessageBox} from './boxes/gambling-session-message.box';\nimport {GamblingSessionWarnMessageBox} from './boxes/gambling-session-warn-message.box';\nimport {DividerBox} from '../../../basic-ui-components/layout/divider/divider.box';\nimport {CyClass} from \"../../../../common/cy-classes\";\n\ninterface IGamblingSessionSetupProps {\n onSetLimits: (gameLimits: IGamblingSessionLimitsSetup) => void;\n dialogHandler: IModalDialogHandler;\n lastBetActivity?: NullableString;\n}\n\ninterface IGamblingSessionLimitsInternalData {\n lossLimitAmount: number;\n sessionDurationLimit: number;\n reminderInterval: number;\n restrictionPeriod?: number;\n}\n\ninterface IGamblingSessionSetupState {\n selectedLimits: Partial<IGamblingSessionLimitsInternalData>;\n isValidationEnabled: boolean;\n lossLimitsErrorMessage: NullableString;\n timeLimitsErrorMessage: NullableString;\n}\n\n\n\n@observer\nexport class GamblingSessionSetupComponent extends OrbitComponentWithState<IGamblingSessionSetupProps, IGamblingSessionSetupState> {\n\n constructor(props: IGamblingSessionSetupProps) {\n super(props);\n this.state = {\n selectedLimits: {},\n isValidationEnabled: false,\n lossLimitsErrorMessage: null,\n timeLimitsErrorMessage: null\n }\n }\n\n private _onAfterValidationEnabled = () => {\n\n if(!this._performValidation()) {\n return;\n }\n\n this.props.dialogHandler.close();\n\n let intervalReminder = this.state.selectedLimits.reminderInterval;\n if(Check.isNullOrUndefined(intervalReminder)) {\n intervalReminder = TimeSpan.fromMinutes(parseCommaSeparatedNumbers(this.services.configuration.servicesConfigs.Regulation.Spain.IntervalReminderInMinutes)[0]).totalSeconds;\n }\n\n this.props.onSetLimits({\n lossLimitAmount: this.state.selectedLimits.lossLimitAmount,\n sessionDurationLimit: TimeSpan.fromSeconds(this.state.selectedLimits.sessionDurationLimit),\n reminderInterval: TimeSpan.fromSeconds(intervalReminder),\n restrictionPeriod: TimeSpan.fromSeconds(this.state.selectedLimits.restrictionPeriod)\n });\n }\n\n private _onContinue = () => {\n\n this.setState({\n isValidationEnabled: true\n }, () => this._onAfterValidationEnabled());\n\n }\n\n private _performValidation(): boolean {\n if(!this.state.isValidationEnabled) {\n return true;\n }\n\n const errorMessages: Pick<IGamblingSessionSetupState, 'lossLimitsErrorMessage' | 'timeLimitsErrorMessage'> = {\n lossLimitsErrorMessage: null,\n timeLimitsErrorMessage: null\n };\n\n if(Check.isNullOrUndefined(this.state.selectedLimits.lossLimitAmount)) {\n errorMessages.lossLimitsErrorMessage = this.services.translation.translate('GAMBLING_SESSION_LOSS_LIMIT_REQUIRED_ERROR');\n }\n\n if(Check.isNullOrUndefined(this.state.selectedLimits.sessionDurationLimit)) {\n errorMessages.timeLimitsErrorMessage = this.services.translation.translate('GAMBLING_SESSION_TIME_LIMIT_REQUIRED_ERROR');\n }\n\n this.setState({\n ...this.state,\n ...errorMessages\n });\n\n return !Boolean(errorMessages.lossLimitsErrorMessage || errorMessages.timeLimitsErrorMessage);\n }\n\n private _onTimeLimitSelected = (value: NullableNumber) => {\n this.setState({\n selectedLimits: {\n ...this.state.selectedLimits,\n sessionDurationLimit: value ? value : null\n }\n }, () => this._performValidation());\n\n\n }\n\n private _onGameLimitSelected = (value: NullableNumber) => {\n this.setState({\n selectedLimits: {\n ...this.state.selectedLimits,\n lossLimitAmount: value\n }\n }, () => this._performValidation());\n }\n\n private _onIntervalReminderSelected = (value: NullableNumber) => {\n this.setState({\n selectedLimits: {\n ...this.state.selectedLimits,\n reminderInterval: value ? value : null\n }\n });\n }\n\n private _onRestrictionPeriodSelected = (value: NullableNumber) => {\n this.setState({\n selectedLimits: {\n ...this.state.selectedLimits,\n restrictionPeriod: value ? value : null\n }\n });\n }\n\n private _getRegulatoryText() {\n const responsibleGamingLinkText = this.services.translation.translate('GAMBLING_SESSION_LIMIT_RESPONSIBLE_GAMING_LINK');\n return this.services.translation.translate('GAMBLING_SESSION_LIMIT_REGULATORY_TEXT', {\n responsibleGamblingLink: `<a class=\"${GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK}\">${responsibleGamingLinkText}</a>`\n });\n }\n\n private _captureRegulatoryTextElement = (element: HTMLElement) => {\n const linkElement = element?.querySelector(`.${GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK}`);\n linkElement?.addEventListener('click', () => {\n this.services.linksNavigation.openResponsibleGaming();\n })\n }\n\n render() {\n return (\n <GamblingSessionLimitsBox>\n <GamblingSessionMessageBox>\n {this.services.translation.translate('GAMBLING_SESSION_MESSAGE')}\n </GamblingSessionMessageBox>\n <GamblingSessionWarnMessageBox>\n {this.services.translation.translate('GAMBLING_SESSION_WARN_MESSAGE')}\n </GamblingSessionWarnMessageBox>\n <DividerBox />\n <DropDownsGroupBox>\n <TimeLimitDropDownComponent\n onItemSelected={this._onTimeLimitSelected}\n errorMessage={this.state.timeLimitsErrorMessage}\n />\n <DropDownsSeparatorBox/>\n <LossLimitDropDownComponent\n onItemSelected={this._onGameLimitSelected}\n errorMessage={this.state.lossLimitsErrorMessage}\n />\n </DropDownsGroupBox>\n\n <DropDownsGroupBox>\n <IntervalReminderDropDownComponent onItemSelected={this._onIntervalReminderSelected}/>\n <DropDownsSeparatorBox/>\n <RestrictionPeriodsDropDownComponent onItemSelected={this._onRestrictionPeriodSelected}/>\n </DropDownsGroupBox>\n\n <FooterBox>\n <Button preset=\"primary\" onClick={this._onContinue} fullWidth={false}>\n {this.services.translation.translate('GAMBLING_SESSION_START')}\n </Button>\n\n <RegulatoryTextBox dangerouslySetInnerHTML={{__html: this._getRegulatoryText()}} ref={this._captureRegulatoryTextElement}/>\n { this.props.lastBetActivity &&\n <RegulatoryTextBox className={CyClass('cy-last-bet-date')}>{this.services.translation.translate('GAMBLING_SESSION_LAST_BET', {lastBetDate: this.props.lastBetActivity})}</RegulatoryTextBox>\n }\n </FooterBox>\n\n </GamblingSessionLimitsBox>\n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const DropDownContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`","import styled from \"styled-components\";\n\nexport const ErrorMessageBox = styled.div<{visible: boolean}>`\n color: ${props => props.theme.colors.danger};\n visibility: ${props => props.visible ? 'visible' : 'hidden'};\n min-height: 17px;\n padding: 0 0 0 4px;\n`","import styled from \"styled-components\";\n\nexport const DropDownLabelBox = styled.label`\n padding: 0 0 7px 0;\n`","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {DropDownContainerBox} from \"../boxes/drop-down-container.box\";\nimport {ErrorMessageBox} from \"../boxes/error-message.box\";\nimport {DropDownLabelBox} from \"../boxes/drop-down-label.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {Select} from \"../../../../basic-ui-components/form/select.component\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {OrbitComponentWithState} from \"../../../base-components/orbit-component-with-state/orbit-component-with-state\";\n\nexport interface DropDownItem {\n value: NullableNumber;\n text: string;\n}\n\nexport interface IDropDownSelectionResult {\n cancel: boolean;\n overrideValueOnCancel?: NullableNumber;\n}\n\ninterface SpainGameLimitDropDownComponentProps {\n label: string;\n items: DropDownItem[];\n nullItemText?: string;\n onItemSelected: (value: NullableNumber) => Promise<IDropDownSelectionResult>;\n errorMessage?: string;\n className?: string;\n}\n\ninterface SpainGameLimitDropDownComponentState {\n selectedOption: NullableNumber;\n}\n\n@observer\nexport class DropDownComponent extends OrbitComponentWithState<SpainGameLimitDropDownComponentProps, SpainGameLimitDropDownComponentState> {\n constructor(props: SpainGameLimitDropDownComponentProps) {\n super(props);\n this.state = {\n selectedOption: null\n };\n }\n\n private _onChange = async (eventData: any) => {\n let value: NullableNumber = null;\n if(eventData.target.value !== \"0\") {\n value = parseInt(eventData.target.value);\n }\n\n const selectionResult = await this.props.onItemSelected(value);\n if(selectionResult.cancel) {\n if(Check.isUndefined(selectionResult.overrideValueOnCancel)) {\n this.setState({\n selectedOption: this.state.selectedOption\n });\n } else {\n this.setState({\n selectedOption: selectionResult.overrideValueOnCancel\n });\n }\n\n } else {\n this.setState({\n selectedOption: value\n });\n }\n }\n\n private _renderErrorMessage = () => {\n return (\n <ErrorMessageBox visible={Boolean(this.props.errorMessage)}>\n {this.props.errorMessage}\n </ErrorMessageBox>\n );\n }\n\n render() {\n\n const items: DropDownItem[] = [...this.props.items];\n\n if(this.props.nullItemText) {\n items.splice(0, 0, {\n value: 0,\n text: this.props.nullItemText\n });\n }\n\n return (\n <DropDownContainerBox>\n <DropDownLabelBox>\n {this.props.label}\n </DropDownLabelBox>\n <Select value={this.state.selectedOption ?? \"\"}\n onChange={this._onChange}\n hasError={Boolean(this.props.errorMessage)}\n className={this.props.className}\n width=\"100%\">\n {\n items.map(item => <option value={item.value}\n key={item.value}>\n {item.text}\n </option>)\n }\n </Select>\n {this._renderErrorMessage()}\n </DropDownContainerBox>\n )\n }\n}","import styled from 'styled-components';\nimport { CssRule } from '../../../themes/architecture/css-helpers/css-rule';\n\nexport const GameItemImgWrapperBox = styled.div<{fixedWidth?: boolean}>`\n // cgp-game-item-img-wrapper\n display: flex;\n flex-direction: column;\n justify-content: center;\n position: relative;\n cursor: pointer;\n width: ${props => props.fixedWidth ? \"10rem\" : \"12rem\"};\n flex-shrink: 0;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: ${props => props.fixedWidth ? \"10rem\" : \"11.4rem\"};\n ${CssRule.For.iPhoneVer5.build()} {\n width: 6.5rem;\n background-position: center center;\n }\n }\n`;\n","import styled, { css } from 'styled-components';\nimport {FP_VOUCHER_TYPES} from \"../../../../common/const/free_play_consts\";\n\n\n\nexport const GameItemContainerBox = styled.div<{freePlayType?: FP_VOUCHER_TYPES; hide?: boolean;}>`\n // cgp-game-item-container\n display: ${({hide}) => hide ? \"none\" : \"flex\"};\n ${({freePlayType, theme}) => freePlayType ? css`\n width: 35.5rem;\n ` : \"\"}\n \n\n /* When also have cgp-game-item-fp class but is inside .idleRecommendation-layout apply width: 100% */\n .idleRecommendation-layout &.cgp-game-item-fp {\n width: 100%;\n }\n`;","import styled from 'styled-components';\n\nimport { OrbitTheme } from '../../../themes/architecture/orbit-theme.interface';\nimport {FP_VOUCHER_TYPES} from \"../../../../common/const/free_play_consts\";\n\nlet freePlayBgImage = (theme: OrbitTheme, freePlayType: FP_VOUCHER_TYPES) => {\n switch (freePlayType) {\n case FP_VOUCHER_TYPES.FreeSpin:\n return theme.assets.images.free_play.freeplay_type_fs_png.toString();\n case FP_VOUCHER_TYPES.FreePlay:\n return theme.assets.images.free_play.freeplay_type_fp_png.toString();\n case FP_VOUCHER_TYPES.FreeJackpotSpin:\n return theme.assets.images.free_play.freeplay_type_jfs_png.toString();\n case FP_VOUCHER_TYPES.FreeJackpotPlay:\n return theme.assets.images.free_play.freeplay_type_jfp_png.toString();\n default:\n return \"\";\n }\n}\n\nexport const GameItemFpThumbBox = styled.div<{freePlayType?: FP_VOUCHER_TYPES, useSquareIcons?: boolean}>`\n position: absolute;\n bottom: ${({useSquareIcons}) => useSquareIcons ? \"-1.5rem\": \"0.5rem\"};\n right: ${({useSquareIcons}) => useSquareIcons ? \"-1.5rem\": \"-0.5rem\"};\n display: ${({freePlayType}) => freePlayType ? \"block\": \"none\"};\n width: 3rem;\n height: 3rem;\n background-image: ${({theme, freePlayType}) => 'url(\"' + freePlayBgImage(theme, freePlayType) + '\")' };\n`;\n","import styled from 'styled-components';\n\nexport const GameItemDelimiterBox = styled.div`\n margin-left: 2rem;\n background-size: cover;\n flex: 0 1 2.5rem;\n background-image: url(${props => '\"' + props.theme.assets.images.vertical_line_glow_png.toString() + '\"'});\n /* Inside .idleRecommendation-layout apply: width: 1.5rem; */\n .idleRecommendation-layout & {\n width: 1.5rem;\n }\n`;","import styled from 'styled-components';\n\nexport const GameItemDetailsWrapperBox = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n flex: 1 0 15rem;\n text-align: center;\n min-height: 16rem;\n`;\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const GameItemTitleBox = styledBox('GameItemTitleBox');","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const GameItemJackpotBox = styledBox('GameItemJackpotBox');\n","import styled from 'styled-components';\n\nexport const GameItemButtonsAreaBox = styled.div`\n margin-top: 0.5rem;\n`;\n","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {Button} from '../../basic-ui-components/button/base/button.component';\nimport {GameInfo} from '../../services/games/game-info';\nimport {GameItemComponentProps} from '../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/game-item.component-props';\nimport {GameItemContainerBox} from './boxes/game-item-container.box';\nimport {GameItemImgWrapperBox} from './boxes/game-item-img-wrapper.box';\nimport {GameItemFpThumbBox} from './boxes/game-item-fp-thumb.box';\n// import { GameItemThumbnailBox } from './boxes/game-item-thumbnail.box';\nimport {GameItemDelimiterBox} from './boxes/game-item-delimiter.box';\nimport {GameItemDetailsWrapperBox} from './boxes/game-item-details-wrapper.box';\nimport {GameItemTitleBox} from './boxes/game-item-title.box';\nimport {GameItemJackpotBox} from './boxes/game-item-jackpot.box';\nimport {GameItemButtonsAreaBox} from './boxes/game-item-buttons-area.box';\nimport {GameImageComponent} from '../single-game/common/parts/game-image/game-image.component';\nimport {GameJackpotComponent} from \"../game-jackpot/game-jackpot.component\";\n\n/**\n * This component (used for idle-recommendation toaster)\n * may have roughly the same functionality and/or visual\n * as game-popup.component.tsx\n * TODO: Maybe make a common component\n */\nexport class GameItemComponent extends OrbitComponent<GameItemComponentProps> {\n render() {\n let playBtnText = this.props.playBtnText || this.services.translation.translate('PLAY');\n let gameInfo: GameInfo = this.services.games.gamesMap[this.props.gameType];\n\n return (\n <GameItemContainerBox className={\"cgp-game-item-container \" + this.props.className} freePlayType={this.props.freePlayType} hide={this.props.hide} style={this.props.style}>\n <GameItemImgWrapperBox className=\"cgp-game-item-img-wrapper cgp-themes-icons-placeholder-game\">\n {/* <GameItemThumbnailBox\n gameImagePath={gameInfo.getGameImage()}\n className=\"cgp-game-item-thumbnail\"\n /> */}\n <GameImageComponent\n gameInfo={gameInfo}\n />\n <GameItemFpThumbBox className=\"cgp-game-item-fp-thumb cgp-themes-icons-fp-default\" useSquareIcons={this.services.theme.shouldUseSquareIcons} freePlayType={this.props.freePlayType}></GameItemFpThumbBox>\n </GameItemImgWrapperBox>\n <GameItemDelimiterBox className=\"cgp-game-item-delimeter cgp-themes-property-icons-vertical-line-glow\"></GameItemDelimiterBox>\n\n <GameItemDetailsWrapperBox className=\"cgp-game-item-details-wrapper\">\n <GameItemTitleBox className=\"cgp-game-item-title\">{gameInfo.title}</GameItemTitleBox>\n <GameItemJackpotBox className=\"cgp-game-item-jackpot-container\">\n <GameJackpotComponent gameType={this.props.gameType} />\n </GameItemJackpotBox>\n <GameItemButtonsAreaBox className=\"cgp-game-item-buttons-area\">\n <Button preset=\"info\" sizeVariant=\"m\" onClick={this.props.onClickHandler}>{playBtnText}</Button>\n </GameItemButtonsAreaBox>\n </GameItemDetailsWrapperBox>\n </GameItemContainerBox>\n )\n\n }\n}\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const GameJackpotBox = styledBox('GameJackpotBox');\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const GameJackpotValueBox = styledBox('GameJackpotValueBox');\n","import React from 'react';\nimport {GameJackpotBox} from \"./boxes/root/game-jackpot.box\";\nimport {GameJackpotValueBox} from \"./boxes/value/game-jackpot-value.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\n\nexport interface GameJackpotComponentProps extends ComponentServicesPick<'jackpots'> {\n gameType: number;\n className?: string;\n}\n\nconst ComponentBody: React.FC<GameJackpotComponentProps> = observer((props) => {\n const services = useServices();\n const jackpotValue = props.jackpots.getGameJackpot(props.gameType);\n if(!jackpotValue) {\n return null;\n }\n\n return (\n\n <GameJackpotBox className={props.className}>\n <GameJackpotValueBox className={CyClass('cy-game-jackpot-amount')}>\n {services.currency.formatMoney(jackpotValue)}\n </GameJackpotValueBox>\n </GameJackpotBox>\n );\n})\n\nexport const GameJackpotComponent = withServices(ComponentBody, ['jackpots']);","export const JACKPOT_WIDGET = 'daily-jackpot';\nexport const RED_TIGER_JACKPOT = 'red-tiger-jackpot';","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SearchTitleBox = styledBox(\"SearchTitleBox\");","import styled from \"styled-components\";\n\nexport const NumberOfResultsDefaultBox = styled.span`\n margin: 0 0 0 1rem;\n color: ${props => props.theme.colors.brandPrimary};\n font-size: 1.5rem;\n`;","import {NumberOfResultsDefaultBox} from \"./number-of-results.default.box\";\n\nexport const NumberOfResultsBox = NumberOfResultsDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {SearchTitleBox} from \"./boxes/search-title-box/search-title.box\";\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {Check} from \"@sparkware/app-utils\";\nimport {NumberOfResultsBox} from \"./boxes/number-of-results-box/number-of-results.box\";\n\nexport interface SearchBoxTitleComponentProps {\n title: string;\n numberOfResults?: number;\n}\n\nexport class SearchBoxTitleComponent extends OrbitComponent<SearchBoxTitleComponentProps> {\n private _renderNumberOfResults = () => {\n if (Check.isNumber(this.props.numberOfResults)) {\n return <NumberOfResultsBox className={'cy-search-results-number'}>({this.props.numberOfResults})</NumberOfResultsBox>;\n }\n return null;\n }\n\n render() {\n return (\n <SearchTitleBox className={CyClass('cy-search-title-box')}>\n <span className={'cy-search-title-text'}>{this.services.translation.translate(this.props.title)}</span>\n {this._renderNumberOfResults()}\n </SearchTitleBox>\n )\n }\n}\n","import styled from \"styled-components\";\n\nexport const SearchGamesListBox = styled.div`\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n`;\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SearchNoGamesFoundBox = styledBox(\"SearchNoGamesFoundBox\");","import styled from \"styled-components\";\n\nexport const SearchGameItemBox = styled.div`\n width: calc(100% / 3);\n padding-right: 3px;\n display: flex;\n flex-direction: column;\n cursor: pointer;\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const SearchMatchBox = styledBox('SearchMatchBox');","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {SearchMatchBox} from \"./boxes/search-match.box\";\nimport {removeSpecialCharacters} from \"../../../../../utils/string-helpers\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface HighlightSearchListItemComponentProps extends ComponentServicesPick<'gameSearch'>{\n nameOfTheGame: string;\n}\n\nconst ComponentBody: React.FC<HighlightSearchListItemComponentProps> = observer(props => {\n\n let searchText = removeSpecialCharacters(props.gameSearch.currentSearchText).toLowerCase();\n const gameName = props.nameOfTheGame\n if(!searchText) {\n return (\n <>{gameName}</>\n );\n }\n\n let index = removeSpecialCharacters(gameName).toLowerCase().indexOf(searchText);\n if(index < 0) {\n return (\n <>{gameName}</>\n );\n }\n\n const beforeHighlightText = gameName.substring(0, index);\n let highlightText = gameName.substring(index, index + searchText.length);\n // Found how many special characters we have in this string\n const numberOfSpecialCharacters = highlightText.length - removeSpecialCharacters(highlightText).length;\n highlightText = gameName.substring(index, index + searchText.length + numberOfSpecialCharacters);\n\n const afterHighlightText = gameName.substring(index + searchText.length + numberOfSpecialCharacters);\n\n return (\n <>\n {beforeHighlightText}<SearchMatchBox className={'cy-search-match'}>{highlightText}</SearchMatchBox>{afterHighlightText}\n </>\n )\n})\n\nexport const HighlightSearchListItemComponent = withServices(ComponentBody, ['gameSearch'])","import styled from \"styled-components\";\n\nexport const SearchTextWrapperBox = styled.div`\n text-align: center;\n margin-bottom: 0.5rem;\n`;\n","import styled from \"styled-components\";\n\nexport const SearchGameImageBox = styled.div`\n border-radius: 15px;\n overflow: hidden;\n`;\n","import React from 'react';\nimport { observer } from 'mobx-react';\nimport { SearchGameItemBox } from './boxes/search-game-item/search-game-item.box';\nimport { ISearchSuggestion } from '../../../../services/game-search/game-search-result';\nimport { GameImageComponent } from '../../../single-game/common/parts/game-image/game-image.component';\nimport { HighlightSearchListItemComponent } from '../highlight-search-list-item/highlight-search-list-item.component';\nimport { SearchTextWrapperBox } from './boxes/search-text-wrapper/search-text-wrapper.box';\nimport {SearchGameImageBox} from \"./boxes/search-game-image-box/search-game-image.box\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\n\nexport interface SearchGameItemComponentProps extends ComponentServicesPick<'sideMenu' | 'gameSearch'>{\n searchSuggestion: ISearchSuggestion;\n}\n\nconst ComponentBody: React.FC<SearchGameItemComponentProps> = observer((props) => {\n const services = useServices();\n const _onClickHandler = async () => {\n await props.gameSearch.closeSearchResult();\n (await services.userMenu).closeMenu();\n await props.sideMenu.closeMobileMenu();\n await props.searchSuggestion.executeAction();\n };\n\n return (\n <SearchGameItemBox className={'cy-search-game-item'} onClick={_onClickHandler}>\n <SearchGameImageBox>\n <GameImageComponent gameInfo={props.searchSuggestion.gameInfo} useLazyLoading={false}/>\n </SearchGameImageBox>\n <SearchTextWrapperBox>\n <HighlightSearchListItemComponent nameOfTheGame={props.searchSuggestion.text} />\n </SearchTextWrapperBox>\n </SearchGameItemBox>\n );\n})\n\nexport const SearchGameItemComponent = withServices(ComponentBody, ['sideMenu', 'gameSearch']);\n","import React from 'react';\nimport { OrbitComponent } from '../../../base-components/orbit-component/orbit-component';\nimport { SearchBoxTitleComponent } from '../search-box-title/search-box-title.component';\nimport { ISearchSuggestion } from '../../../../services/game-search/game-search-result';\nimport { observer } from 'mobx-react';\nimport { CyClass } from '../../../../../common/cy-classes';\nimport { SearchGameItemComponent } from '../search-game-item/search-game-item.component';\nimport { SearchGamesListBox } from '../found-games/boxes/search-games-list/search-games-list.box';\n\nexport interface SuggestedGamesComponentProps {\n items: ISearchSuggestion[];\n}\n\nexport const SuggestedGamesComponent = observer(\n class SuggestedGamesComponent extends OrbitComponent<SuggestedGamesComponentProps> {\n\n private _renderGame(suggestedCategory: ISearchSuggestion) {\n return (\n <SearchGameItemComponent key={suggestedCategory.text} searchSuggestion={suggestedCategory} />\n )\n }\n\n private _renderGames() {\n return (\n <SearchGamesListBox className={CyClass('cy-found-games-list-box')}>\n { this.props.items.map(suggestedCategory => this._renderGame(suggestedCategory)) }\n </SearchGamesListBox>\n );\n }\n\n render() {\n if (this.props.items.length === 0) {\n return null;\n }\n\n return (\n <span className={CyClass('cy-suggested-links-suggested-games')}>\n <SearchBoxTitleComponent title={'SUGGESTED_GAMES'} />\n {this._renderGames()}\n </span>\n )\n }\n }\n);\n","import styled from \"styled-components\";\n\nexport const MoreGamesBox = styled.div<{shouldDisplay: boolean}>`\n display: ${props => props.shouldDisplay ? \"block\" : \"none\"};\n width: 100%;\n padding: 3px 1rem;\n`;\n","import React from 'react';\nimport { SearchBoxTitleComponent } from '../search-box-title/search-box-title.component';\nimport { ISearchSuggestion } from '../../../../services/game-search/game-search-result';\nimport { observer } from 'mobx-react';\nimport { SearchGamesListBox } from \"./boxes/search-games-list/search-games-list.box\";\nimport { SearchNoGamesFoundBox } from \"./boxes/search-no-game-found/search-no-games-found.box\";\nimport { CyClass } from \"../../../../../common/cy-classes\";\nimport { SearchGameItemComponent } from '../search-game-item/search-game-item.component';\nimport { SuggestedGamesComponent } from '../suggested-games/suggested-games.component';\nimport { Button } from '../../../../basic-ui-components/button/base/button.component';\nimport { MoreGamesBox } from './boxes/more-games/more-games.box';\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface FoundGamesComponentProps extends ComponentServicesPick<'gameSearch'> {\n loadedGamesCount: number;\n onLoadMore: () => void;\n}\n\nconst ComponentBody: React.FC<FoundGamesComponentProps> = observer((props) => {\n const services = useServices();\n const _renderGame = (suggestedGame: ISearchSuggestion) => {\n return (\n <SearchGameItemComponent key={suggestedGame.key} searchSuggestion={suggestedGame} />\n );\n }\n\n const hasMoreItems = props.loadedGamesCount < props.gameSearch.searchResult.games.length;\n\n const _renderMoreGames = () => {\n if (services.device.os.isPC) {\n return null;\n }\n\n return (\n <MoreGamesBox shouldDisplay={hasMoreItems} className={CyClass('cy-found-games-more-box')}>\n <Button\n className={CyClass('cy-found-games-more')}\n active\n fullWidth\n preset=\"flatStroked\"\n sizeVariant=\"xs\"\n noRemUnits\n disabled={!hasMoreItems}\n onClick={props.onLoadMore}\n >\n {services.translation.translate(\"MORE\")}\n </Button>\n </MoreGamesBox>\n );\n }\n\n const _renderFoundGames = () => {\n const gamesToRender = Math.min(props.loadedGamesCount, props.gameSearch.searchResult.games.length);\n return (\n <SearchGamesListBox className={CyClass('cy-found-games-list-box')}>\n {props.gameSearch.searchResult.games.slice(0, gamesToRender).map(suggestedGame => _renderGame(suggestedGame))}\n {_renderMoreGames()}\n </SearchGamesListBox>\n );\n }\n\n const _renderNoSearchResultMessage = () => {\n return (\n <>\n <SearchNoGamesFoundBox className={CyClass('cy-no-found-games-box')}>\n {services.translation.translate('NO_SEARCH_RESULTS')}\n </SearchNoGamesFoundBox>\n\n <SuggestedGamesComponent items={props.gameSearch.searchResult.suggestedGames} />\n </>\n );\n }\n\n return (\n <div className={'cy-search-results'}>\n <SearchBoxTitleComponent title={'SEARCH_RESULTS_TITLE'} numberOfResults={props.gameSearch.searchResult?.games?.length}/>\n { props.gameSearch.searchResult?.games?.length > 0 ?\n _renderFoundGames() :\n _renderNoSearchResultMessage()\n }\n </div>\n );\n})\n\nexport const FoundGamesComponent = withServices(ComponentBody, ['gameSearch']);","import styled from \"styled-components\";\n\nexport const SearchResultItemDefaultBox = styled.li`\n list-style-type: none;\n \n &:hover {\n background-color: ${props => props.theme.colors.background};\n }\n`;","import {SearchResultItemDefaultBox} from \"./search-result-item.default.box\";\n\nexport const SearchResultItemBox = SearchResultItemDefaultBox;","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const SlotsSearchLinkBox = styledBox('SlotsSearchLinkBox');\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LiveSearchLinkBox = styledBox('LiveSearchLinkBox');\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const CardAndTableSearchLinkBox = styledBox(\"CardAndTableSearchLinkBox\");","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const RegularSearchLinkBox = styledBox('RegularSearchLinkBox');\n","import React from 'react';\nimport {ISearchSuggestion} from '../../../../services/game-search/game-search-result';\nimport {HighlightSearchListItemComponent} from '../highlight-search-list-item/highlight-search-list-item.component';\nimport {observer} from 'mobx-react';\nimport {SearchResultItemBox} from \"./boxes/search-result-item-box/search-result-item.box\";\nimport {SlotsSearchLinkBox} from \"./boxes/search-links/slots-search-link/slots-search-link.box\";\nimport {LiveSearchLinkBox} from \"./boxes/search-links/live-search-link/live-search-link.box\";\nimport {CardAndTableSearchLinkBox} from \"./boxes/search-links/card-and-table-search-link/card-and-table-search-link.box\";\nimport {RegularSearchLinkBox} from \"./boxes/search-links/regular-search-link/regular-search-link.box\";\nimport {GAMES_CATEGORIES} from \"../../../../services/games/games-categories.enum\";\nimport {OrbitUserFlowAnalyticsCategory} from \"../../../../services/analytics/analytics.service.interface\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface SearchResultItemComponentProps extends ComponentServicesPick<'sideMenu' | 'gameSearch'>{\n searchSuggestion: ISearchSuggestion\n}\n\nconst ComponentBody: React.FC<SearchResultItemComponentProps> = observer((props) => {\n const services = useServices();\n const _onClickHandler = async () => {\n await props.gameSearch.closeSearchResult();\n (await services.userMenu).closeMenu();\n await props.sideMenu.closeMobileMenu();\n await props.searchSuggestion.executeAction();\n services.analytics.sendOrbitUserFlowEvent(OrbitUserFlowAnalyticsCategory.Search, props.searchSuggestion.type, props.searchSuggestion.text);\n };\n\n const _renderSearchLinkBox = (iconStyle: string) => {\n switch(iconStyle) {\n case GAMES_CATEGORIES.SLOTS:\n return (\n <SlotsSearchLinkBox className={'cy-search-link-box-' + iconStyle}>\n <HighlightSearchListItemComponent nameOfTheGame={props.searchSuggestion.text}/>\n </SlotsSearchLinkBox>\n );\n case GAMES_CATEGORIES.LIVE:\n return (\n <LiveSearchLinkBox className={'cy-search-link-box-' + iconStyle}>\n <HighlightSearchListItemComponent nameOfTheGame={props.searchSuggestion.text}/>\n </LiveSearchLinkBox>\n );\n case GAMES_CATEGORIES.CARD_AND_TABLE:\n return (\n <CardAndTableSearchLinkBox className={'cy-search-link-box-' + iconStyle}>\n <HighlightSearchListItemComponent nameOfTheGame={props.searchSuggestion.text}/>\n </CardAndTableSearchLinkBox>\n );\n\n default:\n return (\n <RegularSearchLinkBox className={'cy-search-link-box-' + iconStyle}>\n <HighlightSearchListItemComponent nameOfTheGame={props.searchSuggestion.text}/>\n </RegularSearchLinkBox>\n );\n }\n }\n\n return (\n <SearchResultItemBox\n className={'cy-search-results-item-box-' + props.searchSuggestion.text}\n key={props.searchSuggestion.text}\n onClick={_onClickHandler}>\n {_renderSearchLinkBox(props.searchSuggestion.linkIconClass)}\n </SearchResultItemBox>\n );\n});\n\nexport const SearchResultItemComponent = withServices(ComponentBody, ['sideMenu', 'gameSearch']);","import styled from \"styled-components\";\n\nexport const SearchLinksListDefaultBox = styled.ul`\n margin: 0 0 2rem 0;\n padding: 0;\n border-left: 2px solid ${props => props.theme.colors.boxBorderLight};\n`;","import {SearchLinksListDefaultBox} from \"./search-links-list.default.box\";\n\nexport const SearchLinksListBox = SearchLinksListDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {SearchBoxTitleComponent} from '../search-box-title/search-box-title.component';\nimport {ISearchSuggestion} from '../../../../services/game-search/game-search-result';\nimport {observer} from 'mobx-react';\nimport {SearchResultItemComponent} from '../search-result-item/search-result-item.component';\nimport {SearchLinksListBox} from \"./boxes/search-links-list/search-links-list.box\";\n\nexport interface SuggestedCategoriesComponentProps {\n title: string;\n className: string;\n items: ISearchSuggestion[];\n}\n\nexport const SuggestedLinksComponent = observer(\n class SuggestedLinksComponent extends OrbitComponent<SuggestedCategoriesComponentProps> {\n\n private _renderSuggestedCategory(suggestedCategory: ISearchSuggestion) {\n return (\n <SearchResultItemComponent key={suggestedCategory.text} searchSuggestion={suggestedCategory}/>\n )\n }\n\n private _renderSuggestedCategories() {\n return this.props.items.map(suggestedCategory => this._renderSuggestedCategory(suggestedCategory))\n\n }\n\n render() {\n if(this.props.items.length === 0) {\n return null;\n }\n\n return (\n <span className={this.props.className}>\n <SearchBoxTitleComponent title={this.props.title}/>\n <SearchLinksListBox className={'cy-suggested-links-list-box'}>\n {this._renderSuggestedCategories()}\n </SearchLinksListBox>\n </span>\n )\n }\n\n }\n);\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const SearchFormResultsBox = styledBox(\"SearchFormResultsBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const SearchFormResultsWrapperBox = styledBox(\"SearchFormResultsWrapperBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SuggestedVideoSlidesFilterListPreviewTitleBox = styledBox(\"SuggestedVideoSlidesFilterListPreviewTitleBox\");","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const SuggestedVideoSlidesFilterItemPreviewBox = styledBox(\"SuggestedVideoSlidesFilterItemPreviewBox\");","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const SuggestedVideoSlidesFilterItemPreviewPlayerBox = styledBox(\"SuggestedVideoSlidesFilterItemPreviewPlayerBox\");","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const SuggestedVideoSlidesFilterItemPreviewFooterBox = styledBox(\"SuggestedVideoSlidesFilterItemPreviewFooterBox\");","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\n\nexport const SuggestedVideoSlidesFilterItemPreviewFooterTextBox = styledBox(\"SuggestedVideoSlidesFilterItemPreviewFooterTextBox\");","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../../../react-hooks/use-services.hook\";\nimport {SuggestedVideoSlidesFilterItemPreviewBox} from \"./boxes/suggested-video-slides-filter-item-preview/suggested-video-slides-filter-item-preview.box\";\nimport {SuggestedVideoSlidesFilterItemPreviewPlayerBox} from \"./boxes/suggested-video-slides-filter-item-preview-player/suggested-video-slides-filter-item-preview-player.box\";\nimport {ISearchSuggestion} from \"../../../../../../services/game-search/game-search-result\";\nimport {SuggestedVideoSlidesFilterItemPreviewFooterBox} from \"./boxes/suggested-video-slides-filter-item-preview-footer/suggested-video-slides-filter-item-preview-footer.box\";\nimport {SuggestedVideoSlidesFilterItemPreviewFooterTextBox} from \"./boxes/suggested-video-slides-filter-item-preview-footer-text/suggested-video-slides-filter-item-preview-footer-text.box\";\n\ninterface SuggestedVideoSlidesFilterItemPreviewProps {\n videoSlidesFilterPreviewSuggestion: ISearchSuggestion;\n filterCount: number;\n}\nexport const SuggestedVideoSlidesFilterItemPreviewComponent: React.FC<SuggestedVideoSlidesFilterItemPreviewProps> = observer((props) => {\n const services = useServices();\n \n return (<SuggestedVideoSlidesFilterItemPreviewBox\n filterCount={props.filterCount}\n onClick={() => {props.videoSlidesFilterPreviewSuggestion.executeAction()}}\n >\n <SuggestedVideoSlidesFilterItemPreviewPlayerBox\n gameInfo={props.videoSlidesFilterPreviewSuggestion.gameInfo}\n muted={true}\n onError={() => {}} //TODO we will have a task for videoPlayer\n onLoading={() => {}}\n onWatchTimeLimitReached={() => {}}\n isInCenterStage={true}\n inViewport={true}\n display={true}\n videoPlayingService={services.videoOnDemandPlaying}\n loop={true}\n />\n <SuggestedVideoSlidesFilterItemPreviewFooterBox>\n <SuggestedVideoSlidesFilterItemPreviewFooterTextBox>\n {props.videoSlidesFilterPreviewSuggestion.text}\n </SuggestedVideoSlidesFilterItemPreviewFooterTextBox>\n </SuggestedVideoSlidesFilterItemPreviewFooterBox>\n\n </SuggestedVideoSlidesFilterItemPreviewBox>)\n})","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\n\nexport const SuggestedVideoSlidesFilterListPreviewHeaderBox = styledBox(\"SuggestedVideoSlidesFilterListPreviewHeaderBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n\nexport const SuggestedVideoSlidesFilterListPreviewBox = styledBox(\"SuggestedVideoSlidesFilterListPreviewBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\n\nexport const SuggestedVideoSlidesFilterListPreviewContentBox = styledBox(\"SuggestedVideoSlidesFilterListPreviewContentBox\");","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {ISearchSuggestion} from \"../../../../services/game-search/game-search-result\";\nimport {SuggestedVideoSlidesFilterListPreviewTitleBox} from \"./boxes/suggested-video-slides-filter-list-preview-title/suggested-video-slides-filter-list-preview-title.box\";\nimport {SuggestedVideoSlidesFilterItemPreviewComponent} from \"./components/suggested-video-slides-filter-item-preview/suggested-video-slides-filter-item-preview.component\";\nimport {SuggestedVideoSlidesFilterListPreviewHeaderBox} from \"./boxes/suggested-video-slides-filter-list-preview-header/suggested-video-slides-filter-list-preview-header.box\";\nimport {SuggestedVideoSlidesFilterListPreviewBox} from \"./boxes/suggested-video-slides-filter-list-preview.box\";\nimport {SuggestedVideoSlidesFilterListPreviewContentBox} from \"./boxes/suggested-video-slides-filter-list-preview-content/suggested-video-slides-filter-list-preview-content.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\ninterface SuggestedVideoSlidesFilterPreviewProps {\n items: ISearchSuggestion[];\n}\nexport const SuggestedVideoSlidesFilterListPreviewComponent: React.FC<SuggestedVideoSlidesFilterPreviewProps> = observer((props) => {\n const services = useServices();\n let ExploreOutlinedIcon = services.theme.currentTheme.icons.exploreOutlinedIcon;\n\n return <SuggestedVideoSlidesFilterListPreviewBox className={CyClass('cy-video-slides-search-suggestions-container')}>\n <SuggestedVideoSlidesFilterListPreviewHeaderBox>\n <ExploreOutlinedIcon size={2.2} style={{marginRight: \"10px\", color: services.theme.currentTheme.colors.brandPrimary}}/>\n <SuggestedVideoSlidesFilterListPreviewTitleBox>\n {services.translation.translate(\"VIDEO_SLIDES_FILTER_PREVIEW_TITLE\")}\n </SuggestedVideoSlidesFilterListPreviewTitleBox>\n </SuggestedVideoSlidesFilterListPreviewHeaderBox>\n <SuggestedVideoSlidesFilterListPreviewContentBox>\n {\n props.items.map(videoSlidesFilterPreviewSuggestion => (\n <SuggestedVideoSlidesFilterItemPreviewComponent\n key={videoSlidesFilterPreviewSuggestion.key}\n filterCount={props.items.length}\n videoSlidesFilterPreviewSuggestion={videoSlidesFilterPreviewSuggestion} />\n ))\n }\n </SuggestedVideoSlidesFilterListPreviewContentBox>\n </SuggestedVideoSlidesFilterListPreviewBox>\n});","import React, {useEffect, useState} from 'react';\nimport {observer} from 'mobx-react';\nimport {FoundGamesComponent} from \"./found-games/found-games.component\";\nimport {SuggestedLinksComponent} from \"./suggested-links/suggested-links.component\";\nimport {SearchFormResultsBox} from \"./boxes/search-form-results-box/search-form-results.box\";\nimport {SearchFormResultsWrapperBox} from \"./boxes/search-form-results-wrapper-box/search-form-results-wrapper.box\";\nimport {SuggestedGamesComponent} from './suggested-games/suggested-games.component';\nimport {\n OrbitUserFlowAnalyticsCategory,\n OrbitUserFlowAnalyticsLabel\n} from \"../../../services/analytics/analytics.service.interface\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {reaction} from \"mobx\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../react-hooks/with-services\";\nimport {SuggestedVideoSlidesFilterListPreviewComponent} from './suggested-video-slides-filter-list-preview/suggested-video-slides-filter-list-preview.component';\n\nconst LOAD_BATCH_SIZE = 12;\n\n\ninterface SearchResultComponentProps extends ComponentServicesPick<'gameSearch'> {\n\n}\n\nconst ComponentBody: React.FC<SearchResultComponentProps> = observer((props) => {\n const services = useServices();\n const [loadedGames, setLoadedGames] = useState(LOAD_BATCH_SIZE);\n\n useEffect(() => {\n const r = reaction(() => props.gameSearch.currentSearchText, () => {\n setLoadedGames(LOAD_BATCH_SIZE);\n });\n\n return () => r();\n }, [props.gameSearch.currentSearchText]);\n\n\n if (!props.gameSearch.isSearchBoxOpened) {\n return null;\n }\n\n const _onLoadMore = () => {\n services.analytics.sendOrbitUserFlowEvent(OrbitUserFlowAnalyticsCategory.Search, 'Entry', OrbitUserFlowAnalyticsLabel.ShowMore);\n const moreItems = Math.min(loadedGames + LOAD_BATCH_SIZE, props.gameSearch.searchResult.games.length);\n setLoadedGames(moreItems);\n }\n\n\n const renderSuggestedVideoSlidesFilterListPreview = () => {\n if (services.videoSlides.shouldBeDisplayed) {\n return (<SuggestedVideoSlidesFilterListPreviewComponent items={props.gameSearch.searchResult.suggestedVideoSlidesFilterListPreview} />)\n }\n\n return null;\n }\n\n const _renderSearchResults = () => {\n if (props.gameSearch.isSearchInProgress) {\n return (\n <>\n <FoundGamesComponent loadedGamesCount={loadedGames} onLoadMore={_onLoadMore} />\n {services.miniOrbit.isEnabled ? null : <SuggestedLinksComponent title={'SUGGESTED_CATEGORIES'} className={'cy-suggested-links-suggested-links'} items={props.gameSearch.searchResult.suggestedCategories} />}\n </>\n );\n } else {\n return (\n <>\n {renderSuggestedVideoSlidesFilterListPreview()}\n <SuggestedGamesComponent items={props.gameSearch.searchResult.suggestedGames} />\n {services.miniOrbit.isEnabled ? null : <SuggestedLinksComponent title={'QUICK_LINKS_TITLE'} className={'cy-suggested-links-quick-links'} items={props.gameSearch.searchResult.suggestedCategories} />}\n </>\n );\n }\n }\n\n\n\n const isHybridAndroid = services.device.hybrid.isHybrid && !services.device.os.isIOS;\n\n return (\n <SearchFormResultsBox isHybridAndroid={isHybridAndroid && services.mediaQuery.portrait} ref={props.gameSearch.searchResultComponentRef}>\n <SearchFormResultsWrapperBox>\n {_renderSearchResults()}\n </SearchFormResultsWrapperBox>\n </SearchFormResultsBox>\n );\n\n})\n\nexport const SearchResultComponent = withServices(ComponentBody, ['gameSearch']);","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport interface ISearchClearIconBoxProps {\n visible: boolean;\n}\n\nexport const SearchClearIconBox = styledBox(\"SearchClearIconBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SearchInputMobileBox = styledBox(\"SearchInputMobileBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SearchInputAreaBox = styledBox(\"SearchInputAreaBox\");\n","import React, { useEffect, useRef } from 'react';\nimport { observer } from 'mobx-react';\nimport { SearchInputAreaBox } from \"./boxes/search-input-area-box/search-input-area.box\";\nimport { CyClass } from '../../../../../common/cy-classes';\nimport { ComponentServicesPick } from \"../../../../services/component-services-pick\";\nimport { useServices } from \"../../../../react-hooks/use-services.hook\";\nimport { withServices } from \"../../../../react-hooks/with-services\";\n\ninterface SearchInputAreaProps extends ComponentServicesPick<'gameSearch'> {\n\n}\n\nconst ComponentBody: React.FC<SearchInputAreaProps> = observer((props) => {\n const services = useServices();\n const _timeoutRef = useRef<any>(null);\n const HIDE_KEYBOARD_DELAY_MS = 2000;\n\n useEffect(() => {\n return () => {\n if (_timeoutRef.current) {\n clearTimeout(_timeoutRef.current)\n }\n }\n }, []);\n\n const _onChangeHandler = (event: React.ChangeEvent<HTMLInputElement>) => {\n props.gameSearch.search(event.target.value);\n }\n\n const _onChangeHandlerWithBlur = (event: React.ChangeEvent<HTMLInputElement>) => {\n props.gameSearch.search(event.target.value);\n\n if (_timeoutRef.current) {\n clearTimeout(_timeoutRef.current);\n }\n\n _timeoutRef.current = setTimeout(() => {\n _timeoutRef.current = null;\n if (props.gameSearch.currentSearchText) {\n props.gameSearch.searchInputRef.current?.blur();\n }\n }, HIDE_KEYBOARD_DELAY_MS);\n };\n\n const _onClickHandler = async () => {\n await props.gameSearch.openSearchResult();\n };\n\n const onChangeHandler = services.device.isMobile ? _onChangeHandlerWithBlur : _onChangeHandler;\n\n return (\n <SearchInputAreaBox\n ref={props.gameSearch.searchInputRef}\n className={CyClass('cy-game-search-input')}\n type={'text'}\n value={props.gameSearch.currentSearchText}\n autoComplete={'off'}\n placeholder={services.translation.translate('SEARCH_YOUR_GAME')}\n onChange={onChangeHandler}\n onClick={_onClickHandler} />\n );\n})\n\nexport const SearchInputArea = withServices(ComponentBody, ['gameSearch']);","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const SearchIconBox = styledBox(\"SearchIconBox\");","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {SearchClearIconBox} from \"./boxes/search-clear-icon/search-clear-icon.box\";\nimport {SearchInputMobileBox} from \"./boxes/search-input-mobile/search-input-mobile.box\";\nimport {SearchInputArea} from \"../search-input-area/search-input-area\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {SearchIconBox} from '../search-input-pc/boxes/search-icon/search-icon.box';\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\n\ninterface SearchInputMobileComponentProps extends ComponentServicesPick<'gameSearch'>{\n}\n\nconst ComponentBody: React.FC<SearchInputMobileComponentProps> = observer((props) => {\n const services = useServices();\n const _onResetSearchTextHandler = () => {\n props.gameSearch.search('');\n props.gameSearch.searchInputRef?.current?.focus();\n };\n\n const _showResetSearchIcon = (props.gameSearch.currentSearchText || '').length > 0;\n\n const SearchIcon = services.theme.currentTheme.icons.searchIcon;\n return (\n <SearchInputMobileBox className={CyClass('cy-menu-item')}>\n <SearchIconBox>\n <SearchIcon size={2} />\n </SearchIconBox>\n <SearchClearIconBox className={CyClass('cy-clear-search-box-icon')} visible={_showResetSearchIcon} onClick={_onResetSearchTextHandler} />\n <SearchInputArea/>\n </SearchInputMobileBox>\n );\n\n})\n\nexport const SearchInputMobileComponent = withServices(ComponentBody, ['gameSearch']);","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {SearchInputArea} from \"../search-input-area/search-input-area\";\nimport {SearchInputFormBox} from \"./boxes/search-input-form/search-input-form.box\";\nimport {SearchIconBox} from \"./boxes/search-icon/search-icon.box\";\nimport {observer} from \"mobx-react\";\n\nexport const SearchInputPCComponent = observer(class SearchInputPCComponent extends OrbitComponent {\n render() {\n const SearchIcon = this.services.theme.currentTheme.icons.searchIcon;\n return (\n <SearchInputFormBox>\n <SearchInputArea/>\n <SearchIconBox>\n <SearchIcon size={2} />\n </SearchIconBox>\n </SearchInputFormBox>\n );\n }\n});","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const GameSearchBox = styledBox(\"GameSearchBox\");\n","import React, {useCallback, useEffect} from 'react';\nimport {observer} from 'mobx-react';\nimport {SearchResultComponent} from './search-result/search-result.component';\nimport {SearchInputMobileComponent} from \"./search-input/search-input-mobile/search-input-mobile.component\";\nimport {SearchInputPCComponent} from \"./search-input/search-input-pc/search-input-pc.component\";\nimport {GameSearchBox} from \"./boxes/game-search-box/game-search.box\";\nimport {CyClass} from '../../../common/cy-classes';\nimport classNames from 'classnames';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface GameSearchComponentProps extends ComponentServicesPick<'gameSearch'> {\n className?: string;\n}\n\nconst ComponentBody: React.FC<GameSearchComponentProps> = observer((props) => {\n const services = useServices();\n const _onUpdate = useCallback(() => {\n props.gameSearch.searchResultComponentRef.current?.scrollTo(0, 0);\n }, [props.gameSearch])\n\n const _renderSearchInput = () => {\n return services.device.isMobile ? <SearchInputMobileComponent /> : <SearchInputPCComponent/>;\n }\n\n useEffect(() => {\n props.gameSearch.searchInputRef?.current?.addEventListener(\"input\", _onUpdate);\n\n return () => {\n props.gameSearch.searchInputRef?.current?.removeEventListener(\"input\", _onUpdate);\n }\n }, [props.gameSearch, _onUpdate]);\n\n return (\n <GameSearchBox className={classNames(CyClass('cy-game-search-box'), props.className)}\n open={props.gameSearch.isSearchBoxOpened}\n ref={props.gameSearch.searchComponentRef}>\n {_renderSearchInput()}\n <SearchResultComponent/>\n </GameSearchBox>\n );\n})\n\nexport const GameSearchComponent = withServices(ComponentBody, ['gameSearch']);","import styled from \"styled-components\";\n\nexport const SearchInputFormDefaultBox = styled.div`\n display: flex;\n justify-content: center;\n`;","import {SearchInputFormDefaultBox} from \"./search-input-form.default.box\";\n\nexport const SearchInputFormBox = SearchInputFormDefaultBox;","import styled from \"styled-components\";\n\nexport const GeoModalWrapperBox = styled.div`\n max-width: 560px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-content: center;\n align-items: center;\n\n width: 25vw;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 82vw;\n }\n @media ${({theme}) => theme.mediaQuery.lAndBelow + \" and \" + theme.mediaQuery.landscape} {\n width: 56vw;\n }\n`;\n","export const HEADER_Z_INDEX = 105;","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const RegulatoryDataBox = styledBox('RegulatoryDataBox');","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.div`\n margin: auto 0;\n color: ${props => props.theme.colors.textLight};\n ${({theme}) => theme.font.presets.regular};\n font-weight: 300;\n font-size: 0.9rem;\n line-height: 1.2;\n\n a {\n text-decoration: underline;\n }\n`;\n\nconst PcBox = styled(DefaultBox)`\n max-width: 40%;\n text-align: left;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n max-width: 100%;\n }\n`;\n\nconst MobileBox = styled(DefaultBox)`\n max-width: 100%;\n padding: 0.25rem 0;\n font-size: 1rem;\n text-align: center;\n`;\n\nexport const GamblingWarningDefaultBox = styledByDevice(PcBox, MobileBox);\n","import {GamblingWarningDefaultBox} from \"./gambling-warning.default.box\";\n\nexport const GamblingWarningBox = GamblingWarningDefaultBox;\n","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {Link} from '../../raw-components/link/link';\nimport {GamblingWarningBox} from \"./boxes/gambling-warning.box\";\n\nexport const GamblingWarningComponent = observer(class GamblingWarningComponent extends OrbitComponent<{}> {\n\n render() {\n let gamblingMessageConfig = this.services.configuration.data.header.gambling_message;\n if(!gamblingMessageConfig || !gamblingMessageConfig.display) {\n return null;\n }\n\n return (\n <GamblingWarningBox className={\"cy-gambling-warning\"}>\n {this.services.translation.translate('GAMBLING_WARNING_part1')}\n <Link href={'https://www.888.it/probabilita-di-vincita/'} preventDefaultOnClick={false} target={'_blank'}>\n {'Probabilità di vincita'}\n </Link>\n {this.services.translation.translate('GAMBLING_WARNING_part2')}\n <Link href={'https://www.adm.gov.it/portale/monopoli/giochi/gioco_distanza/gioco_dist_note/'} preventDefaultOnClick={false} target={'_blank'}>\n {'maggiori informazioni.'}\n </Link>\n </GamblingWarningBox>\n );\n\n }\n});\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.div`\n display: flex;\n`;\n\nconst PcBox = styled(DefaultBox)`\n align-items: center;\n`;\n\nconst Mobilebox = styled(DefaultBox)`\n width: 100%;\n padding: 0.5rem 0 0 0;\n justify-content: center;\n\n .cgp-dk & {\n //justify-content: flex-start;\n }\n`;\n\nexport const ResponsibleGamingIconsDefaultBox = styledByDevice(PcBox, Mobilebox);\n","import {ResponsibleGamingIconsDefaultBox} from \"./responsible-gaming-icons.default.box\";\n\nexport const ResponsibleGamingIconsBox = ResponsibleGamingIconsDefaultBox;\n","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {ResponsibleIconsAgeButtonConfiguration} from '../../../services/configurations/config-data-sections/header.configuration';\nimport {ResponsibleGamingIconsBox} from \"./boxes/responsible-gaming-icons.box\";\n\nexport const ResponsibleIconsComponent = observer(class ResponsibleIconsComponent extends OrbitComponent {\n\n private _renderAgeButton(ageButtonConfig: ResponsibleIconsAgeButtonConfiguration) {\n if(ageButtonConfig && ageButtonConfig.display) {\n return this.services.regulation.current.components.renderHeaderMinimumGamblingAge();\n }\n\n return null;\n }\n\n private _renderResponsibleIcons() {\n return this.services.regulation.current.components.renderHeaderRegulationIcons();\n }\n\n render() {\n let responsibleIconsConfig = this.services.configuration.data.header.responsibleIcons;\n if(!responsibleIconsConfig || !responsibleIconsConfig.display) {\n return null;\n }\n\n return (\n <ResponsibleGamingIconsBox className={\"cy-header-responsible-gaming-icons\"}>\n {this._renderAgeButton(responsibleIconsConfig.ageButton)}\n {this._renderResponsibleIcons()}\n </ResponsibleGamingIconsBox>\n );\n }\n});\n","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {RegulatoryDataBox} from \"./boxes/regulatory-data.box\";\nimport {HeaderConfiguration} from '../../../../services/configurations/config-data-sections/header.configuration';\nimport {GamblingWarningComponent} from '../../gambling-warning/gambling-warning.component';\nimport {ResponsibleIconsComponent} from '../../responsible-icons/responsible-icons.component';\nimport {ClockAndLastLoginBoxComponent} from '../../../clock-and-last-login-box/clock-and-last-login-box.component';\nimport {observer} from \"mobx-react\";\nimport classNames from \"classnames\";\n\ninterface RegulatoryDataComponentProps {\n attachToHeaderService: boolean;\n className?: string;\n}\n\n@observer\nexport class RegulatoryDataComponent extends OrbitComponent<RegulatoryDataComponentProps> {\n\n private get _headerConfig(): HeaderConfiguration {\n return this.services.configuration.data.header;\n }\n\n private _captureHeaderUpperRef = (element: HTMLElement | null) => {\n if (this.props.attachToHeaderService) {\n this.services.header.setHeaderRegulationDataElement(element);\n }\n };\n\n private _renderMobileLastLogin() {\n if (this.services.device.isMobile) {\n return <ClockAndLastLoginBoxComponent />;\n }\n\n return null;\n }\n\n private _getRegulatoryContent() {\n if (this.services.miniOrbit.isCis) {\n return null;\n }\n\n\n let gamblingMessageConfig = this._headerConfig.gambling_message;\n let responsibleIconsConfig = this._headerConfig.responsibleIcons;\n\n if (responsibleIconsConfig && responsibleIconsConfig.display) {\n return <ResponsibleIconsComponent />;\n } else if (gamblingMessageConfig && gamblingMessageConfig.display) {\n return <GamblingWarningComponent />;\n }\n\n return null;\n };\n\n render() {\n return (\n <RegulatoryDataBox className={classNames('cy-header-regulation-data', this.props.className)} ref={this._captureHeaderUpperRef}>\n {this._renderMobileLastLogin()}\n {this._getRegulatoryContent()}\n </RegulatoryDataBox>\n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const MobileContainerBox = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 80px;\n`","import styled from \"styled-components\";\n\nexport const UserIconBox = styled.div`\n width: 20px;\n height: 20px;\n background-size: contain;\n background-repeat: no-repeat;\n background-image: url(\"${props => props.theme.assets.images.user.post_login_mobile_svg.toString()}\");\n color: ${props => props.theme.colors.brandSecondary};\n`","import styled from \"styled-components\";\n\nexport const UserBankrollBox = styled.div`\n font-size: 1.3rem;\n color: ${props => props.theme.colors.moneyColor};\n padding: 0px 8px;\n white-space: nowrap;\n`","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const FreePlayDotIndicatorBox = styledBox('FreePlayDotIndicatorBox');","import {observer} from \"mobx-react\";\nimport {MobileContainerBox} from \"../boxes/mobile-container/mobile-container.box\";\nimport {UserIconBox} from \"../boxes/icon/user-icon.box\";\nimport {UserBankrollBox} from \"../boxes/bankroll/user-bankroll.box\";\nimport {FreePlayDotIndicatorBox} from \"../boxes/free-play-dot-indicator/free-play-dot-indicator.box\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {\n TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE\n} from \"../../../../../services/tooltip/on-boarding-tooltip/on-boarding-tooltip-target-selectors\";\nimport {withServices} from \"../../../../../react-hooks/with-services\";\nimport React from \"react\";\nimport {ComponentServicesPick} from \"../../../../../services/component-services-pick\";\nimport {useServices} from \"../../../../../react-hooks/use-services.hook\";\n\n\nexport interface HeaderWelcomeButtonsForAuthorizedUserMobileViewComponentProps extends ComponentServicesPick<'gameRunner' | 'userMenu'> {\n\n}\n\n\nconst ComponentBody: React.FC<HeaderWelcomeButtonsForAuthorizedUserMobileViewComponentProps> = observer((props) => {\n const services = useServices();\n\n const onClick = () => {\n props.userMenu.openMenu();\n }\n\n const renderFreePlayIndicator = () => {\n if(!services.freePlay.hasVouchers) {\n return null;\n }\n return (\n <FreePlayDotIndicatorBox className={CyClass('cy-free-play-indicator-dot')}/>\n )\n }\n\n const bankroll = props.gameRunner.currentRunningGame?.totalUserBankroll ?? services.walletProxy.totalBankroll;\n\n return (\n <MobileContainerBox onClick={onClick}\n className={TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE}>\n <UserIconBox/>\n {renderFreePlayIndicator()}\n <UserBankrollBox className={CyClass('cy-mobile-header-bankroll')}>\n {services.currency.formatMoney(bankroll)}\n </UserBankrollBox>\n </MobileContainerBox>\n );\n})\n\n\nexport const HeaderWelcomeButtonsForAuthorizedUserMobileViewComponent = withServices(ComponentBody, ['gameRunner', 'userMenu'])","import {ButtonSizeVariant} from \"../../../basic-ui-components/button/base/button-props.interface\";\nimport {IServiceFactory} from \"../../../services/service-factory.interface\";\nimport React from \"react\";\nimport {BlankHorizontalSeparatorBox} from \"../../../basic-components/blank-separator/blank-horizontal-separator.box\";\n\nexport function getButtonSizeVariant(services: IServiceFactory): ButtonSizeVariant {\n if(services.mediaQuery.lAndBelow) {\n return \"xs\";\n } else {\n return \"m\";\n }\n}\n\nexport function getButtonsSeparator(services: IServiceFactory): React.ReactElement {\n return (<BlankHorizontalSeparatorBox multiplier={services.mediaQuery.lAndBelow ? 1 : 0.5}/>)\n}","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const AnonymousButtonsContainerBox = styledBox('AnonymousButtonsContainerBox');\n","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {AnonymousButtonsContainerBox} from \"./boxes/buttons-container/anonymous-buttons-container.box\";\nimport React from \"react\";\nimport {getButtonsSeparator} from \"../header-welcome-buttons-helpers\";\nimport {\n IGameContextViewModel\n} from \"../../../../services/game-runner/interfaces/game-context/game-context-view-model.interface\";\n\ninterface HeaderWelcomeButtonsForAnonymousUserComponentProps {\n gameContext?: IGameContextViewModel;\n}\n\nexport const HeaderWelcomeButtonsForAnonymousUserComponent = observer(\n class HeaderWelcomeButtonsForAnonymousUserComponent extends OrbitComponent<HeaderWelcomeButtonsForAnonymousUserComponentProps> {\n\n render() {\n const separator = getButtonsSeparator(this.services);\n return (\n <AnonymousButtonsContainerBox>\n {separator}\n {this.services.regulation.current.components.renderHeaderRegisterButton({gameContext: this.props.gameContext})}\n {separator}\n {this.services.regulation.current.components.renderHeaderLoginButton({gameContext: this.props.gameContext})}\n </AnonymousButtonsContainerBox>\n );\n }\n }\n);","import styled from \"styled-components\";\n\nexport const PCContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {Button} from \"../../../../basic-ui-components/button/base/button.component\";\nimport {getButtonSizeVariant} from \"../../welcome-buttons/header-welcome-buttons-helpers\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType, CashierSessionType} from \"@sparkware/uc-sdk-core\";\n\n\nexport const HeaderCashierButtonComponent = observer(class HeaderCashierButtonComponent extends OrbitComponent {\n private _onCashierClick = async () => {\n await this.services.cashier.openCashier({\n sessionType: CashierSessionType.FullCashier,\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n }\n render() {\n return (\n <Button\n preset=\"special\"\n className={CyClass('cy-welcome-cashier-button')}\n sizeVariant={getButtonSizeVariant(this.services)}\n onClick={this._onCashierClick}\n >\n {this.services.translation.translate('CASHIER')}\n </Button>\n )\n }\n});","import {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {PCContainerBox} from \"../boxes/pc-container/pc-container.box\";\nimport {getButtonsSeparator} from \"../../header-welcome-buttons-helpers\";\nimport {HeaderCashierButtonComponent} from \"../../../buttons/cashier-button/header-cashier-button.component\";\nimport React from \"react\";\n\nexport const HeaderWelcomeButtonsForAuthorizedUserPcViewComponent = observer(\n class HeaderWelcomeButtonsForAuthorizedUserPcViewComponent extends OrbitComponent {\n render() {\n return (\n <PCContainerBox>\n {getButtonsSeparator(this.services)}\n <HeaderCashierButtonComponent/>\n </PCContainerBox>\n );\n }\n }\n);","import React from 'react';\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {HeaderWelcomeButtonsForAuthorizedUserMobileViewComponent} from \"./mobile-view/header-welcome-buttons-for-authorized-user-mobile-view.component\";\nimport {HeaderWelcomeButtonsForAuthorizedUserPcViewComponent} from \"./pc-view/header-welcome-buttons-for-authorized-user-pc-view.component\";\n\nexport const HeaderWelcomeButtonsForAuthorizedUserComponent = observer(\n class HeaderWelcomeButtonsForAuthorizedUserComponent extends OrbitComponent {\n render() {\n if(this.services.mediaQuery.lAndBelow) {\n return (<HeaderWelcomeButtonsForAuthorizedUserMobileViewComponent/>);\n } else {\n return (<HeaderWelcomeButtonsForAuthorizedUserPcViewComponent/>);\n }\n\n }\n }\n);","import styled from \"styled-components\";\n\nexport const HeaderWelcomeButtonsBox = styled.div`\n \n`","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {HeaderWelcomeButtonsForAnonymousUserComponent} from \"./anonymous-user/header-welcome-buttons-for-anonymous-user.component\";\nimport {HeaderWelcomeButtonsForAuthorizedUserComponent} from \"./authorized-user/header-welcome-buttons-for-authorized-user.component\";\nimport {\n IGameContextViewModel\n} from \"../../../services/game-runner/interfaces/game-context/game-context-view-model.interface\";\nimport {HeaderWelcomeButtonsBox} from \"./boxes/header-welcome-buttons.box\";\nimport {CyClass} from \"../../../../common/cy-classes\";\n\ninterface HeaderWelcomeButtonsComponentProps {\n gameContext?: IGameContextViewModel;\n}\nexport const HeaderWelcomeButtonsComponent = observer(\n class HeaderWelcomeButtonsComponent extends OrbitComponent<HeaderWelcomeButtonsComponentProps> {\n render() {\n\n return (\n <HeaderWelcomeButtonsBox className={CyClass('cy-welcome-component')}>\n {\n this.services.user.isAuthorized\n ? (<HeaderWelcomeButtonsForAuthorizedUserComponent/>)\n : (<HeaderWelcomeButtonsForAnonymousUserComponent gameContext={this.props.gameContext}/>)\n }\n </HeaderWelcomeButtonsBox>\n );\n }\n }\n);\n","import {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {INSIDE_ORBIT_MENU_CONTAINER} from \"./inside-orbit-menu-container.consts\";\nimport {isInsideAutomation} from '../../../utils/automation-helpers';\n\n\nexport class InsideOrbitMenuContainerComponent extends OrbitComponent<{}> {\n render() {\n if(isInsideAutomation()) {\n return null;\n }\n return <div style={{display:\"none\", textAlign: \"center\"}} id={INSIDE_ORBIT_MENU_CONTAINER}/>\n }\n}","export const INSIDE_ORBIT_MENU_CONTAINER = 'inside-orbit-menu-container';","import styled from \"styled-components\";\nimport {JACKPOT_WIDGET_LAYOUT} from \"../../jackpot-widget.component\";\n\nexport interface IJackpotWidgetAspectRatioBoxProps {\n layout: JACKPOT_WIDGET_LAYOUT; \n};\n\nconst handlePaddingTop = (layout: JACKPOT_WIDGET_LAYOUT) => {\n switch (layout) {\n case JACKPOT_WIDGET_LAYOUT.LANDSCAPE:\n return \"58%\";\n case JACKPOT_WIDGET_LAYOUT.LANDSCAPE_WIDE:\n return \"25%\";\n case JACKPOT_WIDGET_LAYOUT.PORTRAIT_TALL:\n return \"128%\";\n case JACKPOT_WIDGET_LAYOUT.PORTRAIT:\n default: \n return \"123%\";\n }\n};\n\nexport const JackpotWidgetAspectRatioBox = styled.div<IJackpotWidgetAspectRatioBoxProps>`\n position: relative;\n padding-top: ${({layout}) => handlePaddingTop(layout)};\n transition: padding-top 0.5s ease-in-out;\n`;\n","import styled, {css} from 'styled-components';\nimport { JackpotType } from '../../../../../common/const/jackpot_map_ids';\nimport {JACKPOT_WIDGET_LAYOUT} from '../../jackpot-widget.component';\nimport {OrbitTheme} from '../../../../themes/architecture/orbit-theme.interface';\nimport {getJackpotWidgetImagesByType} from \"../../jackpot-widget-images\";\n\nexport interface IJackpotWidgetBgBoxProps {\n jackpotType: JackpotType;\n layout: JACKPOT_WIDGET_LAYOUT;\n shouldRenderSkeleton?: boolean;\n}\n\nconst handleBackgroundImage = (props: IJackpotWidgetBgBoxProps, theme: OrbitTheme) => {\n if (props.shouldRenderSkeleton) {\n return 'none';\n }\n\n const jackpotImages = getJackpotWidgetImagesByType(theme, props.jackpotType);\n if(!jackpotImages) {\n return 'none';\n }\n\n if ((props.layout === JACKPOT_WIDGET_LAYOUT.LANDSCAPE || props.layout === JACKPOT_WIDGET_LAYOUT.LANDSCAPE_WIDE)\n && jackpotImages.backgroundLandscape) {\n return 'url(' + jackpotImages.backgroundLandscape + ')';\n }\n\n return 'url(' + jackpotImages.background + ')';\n}\n\nexport const JackpotWidgetBgBox = styled.div<IJackpotWidgetBgBoxProps>`\n background-image: ${props => handleBackgroundImage(props, props.theme) };\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n width: 100%;\n height: 100%;\n\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n border-radius: 10px;\n\n ${({layout}) => layout === JACKPOT_WIDGET_LAYOUT.LANDSCAPE_WIDE && css`\n flex-direction: row;\n align-items: center;\n `}\n\n animation: JackpotBackgroundLoadingAnimation 1.5s linear infinite;\n\n @keyframes JackpotBackgroundLoadingAnimation {\n 0% {\n background-color: #000000;\n }\n 50% {\n background-color: #171717;\n }\n 100% {\n background-color: #000000;\n }\n }\n`;\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetBox = styledBox(\"JackpotWidgetBox\");","import {JackpotType} from \"../../../common/const/jackpot_map_ids\";\nimport {OrbitTheme} from \"../../themes/architecture/orbit-theme.interface\";\n\nexport interface IJackpotWidgetImages {\n background: string;\n logo: string;\n backgroundLandscape?: string;\n}\n\nexport function getJackpotWidgetImagesByType(theme: OrbitTheme, jackpotType: JackpotType): IJackpotWidgetImages | null {\n const images = theme.assets.images.jackpot_widget;\n switch (jackpotType) {\n case JackpotType.Daily:\n return {\n background: images.daily.background_png.toString(),\n logo: images.daily.logo_png.toString()\n }\n case JackpotType.HighNoon:\n return {\n background: images.high_noon.background_png.toString(),\n logo: images.high_noon.logo_png.toString()\n }\n case JackpotType.Twilight:\n return {\n background: images.twilight.background_png.toString(),\n logo: images.twilight.logo_png.toString()\n }\n case JackpotType.Party:\n return {\n background: images.party.background_png.toString(),\n logo: images.party.logo_png.toString()\n }\n case JackpotType.HourlyCaptain8:\n return {\n background: images.hourly_captain8.background_png.toString(),\n logo: images.hourly_captain8.logo_png.toString(),\n backgroundLandscape: images.hourly_captain8.background_landscape_png.toString()\n }\n case JackpotType.MillionaireGenie:\n return {\n background: images.millionaire_genie.background_png.toString(),\n logo: images.millionaire_genie.logo_png.toString()\n }\n case JackpotType.AgeOfGods:\n return {\n background: images.age_of_gods.background_png.toString(),\n logo: images.age_of_gods.logo_png.toString()\n }\n case JackpotType.Titan:\n return {\n background: images.titan.background_png.toString(),\n logo: \"\"\n }\n case JackpotType.JackpotKing:\n return {\n background: images.jackpot_king.background_png.toString(),\n logo: images.jackpot_king.logo_png.toString()\n }\n\n case JackpotType.VegasMillions:\n return {\n background: images.vegas_millions.background_png.toString(),\n logo: images.vegas_millions.logo_png.toString()\n }\n default:\n return null;\n }\n\n}","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetLogoBox = styledBox(\"JackpotWidgetLogoBox\");\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetAmountBox = styledBox(\"JackpotWidgetAmountBox\");\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetFooterBox = styledBox(\"JackpotWidgetFooterBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetClockLabelBox = styledBox(\"JackpotWidgetClockLabelBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetClockBox = styledBox(\"JackpotWidgetClockBox\");\n","import React from 'react';\nimport {action, makeObservable, observable} from 'mobx';\nimport {observer} from 'mobx-react';\nimport {TimeSpan} from '@sparkware/app-utils';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {JackpotWidgetClockBox} from './boxes/footer/clock/box/jackpot-widget-clock.box';\nimport {JackpotType} from '../../../common/const/jackpot_map_ids';\nimport {JACKPOT_WIDGET_LAYOUT} from './jackpot-widget.component';\nimport {SetIntervalType} from \"../../../common/types/set-interval-type\";\nimport {IJackpotStatefulData} from '../../services/jackpots/jackpots.service.interface';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface IDailyJackpotWidgetClockComponentProps extends ComponentServicesPick<'jackpots'>{\n jackpotData: IJackpotStatefulData;\n layout: JACKPOT_WIDGET_LAYOUT;\n widgetWidth?: number;\n jackpotType: JackpotType;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent<IDailyJackpotWidgetClockComponentProps> {\n private updateClockInterval: SetIntervalType;\n\n @observable.ref\n private clockValue: string = \"\";\n\n constructor(props: IDailyJackpotWidgetClockComponentProps) {\n super(props);\n\n makeObservable(this);\n }\n\n componentDidMount() {\n this.clockInit();\n }\n\n componentDidUpdate(prevProps: IDailyJackpotWidgetClockComponentProps) {\n if ( prevProps.jackpotData.mustHitTime !== this.props.jackpotData.mustHitTime) {\n this.clearClockInterval();\n this.clockInit();\n }\n }\n\n componentWillUnmount() {\n this.clearClockInterval();\n }\n\n private clockInit() {\n this.updateClock();\n this.updateClockInterval = setInterval(() => {\n this.updateClock();\n }, 1000);\n }\n\n private clearClockInterval() {\n if (this.updateClockInterval) {\n clearInterval(this.updateClockInterval);\n this.updateClockInterval = undefined;\n }\n }\n\n @action.bound\n private updateClock() {\n const serverDate = this.services.time.getCurrentServerDate();\n if (!serverDate) {\n this.services.logger.warning('Server date is invalid');\n return;\n }\n\n const mustHitDate = this.props.jackpotData.mustHitTime;\n\n // round it to 1 second\n const remainingTimeMilis = Math.round((mustHitDate.getTime() - serverDate.getTime()) / 1000) * 1000;\n const remainingTimeTimeSp = TimeSpan.fromMilliseconds(Math.max(0, remainingTimeMilis));\n this.clockValue = remainingTimeTimeSp.toString({useTotalHours: true});\n }\n\n render() {\n return <JackpotWidgetClockBox\n className=\"cy-daily-jackpot-clock\"\n layout={this.props.layout}\n widgetWidth={this.props.widgetWidth}\n themeType={this.props.jackpots.getThemeType(this.props.jackpotType)}\n isDaily={this.props.jackpotType === JackpotType.Daily}\n >\n {this.clockValue}\n </JackpotWidgetClockBox>;\n }\n}\n\nexport const JackpotWidgetClockComponent = withServices(ComponentBody, ['jackpots']);","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n/**\n * This is the \"PAID\" label shown above the amount at cold state\n */\nexport const JackpotWidgetAmountLabelBox = styledBox(\"JackpotWidgetAmountLabelBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetCollectingLabelBox = styledBox(\"JackpotWidgetCollectingLabelBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetCollectingAmountBox = styledBox(\"JackpotWidgetCollectingAmountBox\");\n","import styled, { keyframes, css } from \"styled-components\";\n\nconst animationProps = \"2s ease-in-out 0s normal infinite none running\";\n\n/**\n * The leftmost position of the sparkle (the center of the sparkle) in percentage\n */\nconst ShineLeftPosition = 20;\n/**\n * The rightmost position of the sparkle (the center of the sparkle) in percentage\n */\nconst ShineRightPosition = 80;\n\nconst BorderShineHeight = 2;\nconst BorderShineWidth = 30;\nfunction borderShineKeyframes(rtl?: boolean) {\n const startPos = (rtl ? ShineRightPosition : ShineLeftPosition) - (BorderShineWidth / 2);\n const endPos = (rtl ? ShineLeftPosition : ShineRightPosition) - (BorderShineWidth / 2);\n return keyframes`\n 0% {\n opacity: 0;\n left: ${startPos}%;\n }\n 20%, 30% {\n opacity: 0.5;\n left: ${startPos}%;\n }\n 50%, 60% {\n opacity: 1;\n left: ${endPos}%;\n }\n 80% {\n opacity: 0;\n left: ${endPos}%;\n }\n 100% {\n opacity: 0;\n left: ${startPos}%;\n }\n `;\n}\nexport const JackpotWidgetBorderShine = styled.div<{bottom?: boolean}>`\n position: absolute;\n width: ${BorderShineWidth}%;\n ${({bottom}) => bottom ? css`\n bottom: ${-(BorderShineHeight / 2)}px;\n ` : css`\n top: ${-(BorderShineHeight / 2)}px;\n `}\n height: ${BorderShineHeight}px;\n z-index: 10;\n background-color: transparent;\n background-image: linear-gradient(90deg, #00000000 0%, #FFFFFF 50%, #00000000 100%);\n\n animation: ${({bottom}) => borderShineKeyframes(bottom)} ${animationProps};\n`;\n\nconst RadialShineHeight = 22;\nconst RadialShineWidth = 20;\nfunction radialShineKeyframes(rtl?: boolean) {\n const startPos = (rtl ? ShineRightPosition : ShineLeftPosition) - (RadialShineWidth / 2);\n const endPos = (rtl ? ShineLeftPosition : ShineRightPosition) - (RadialShineWidth / 2);\n return keyframes`\n 0% {\n opacity: 0;\n left: ${startPos}%;\n }\n 20%, 30% {\n opacity: 0.1;\n left: ${startPos}%;\n }\n 50%, 60% {\n opacity: 1;\n left: ${endPos}%;\n }\n 80% {\n opacity: 0;\n left: ${endPos}%;\n }\n 100% {\n opacity: 0;\n left: ${startPos}%;\n }\n `;\n}\nexport const JackpotWidgetRadialShine = styled.div<{bottom?: boolean}>`\n position: absolute;\n width: ${RadialShineWidth}%;\n ${({bottom}) => bottom ? css`\n bottom: ${-(RadialShineHeight / 2)}px;\n ` : css`\n top: ${-(RadialShineHeight / 2)}px;\n `}\n height: ${RadialShineHeight}px;\n z-index: 10;\n background-color: transparent;\n background-image: radial-gradient(closest-side at 50% 50%, #FFFFFF 0%, #FFFFFF61 35%, #00000000 100%);\n\n animation: ${({bottom}) => radialShineKeyframes(bottom)} ${animationProps};\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const JackpotWidgetAmountContainer = styledBox('JackpotWidgetAmountContainer');","import styled from \"styled-components\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {JACKPOT_WIDGET_LAYOUT} from \"../../jackpot-widget.component\";\n\nexport interface IJackpotWidgetTitleBox {\n layout: JACKPOT_WIDGET_LAYOUT;\n widgetWidth: number;\n isDaily: boolean;\n}\n\nconst handleTitleBoxFontSize = (layout: JACKPOT_WIDGET_LAYOUT, widgetWidth: number, mAndBelow: boolean = false) => {\n switch (layout) {\n case JACKPOT_WIDGET_LAYOUT.LANDSCAPE:\n /** In desktop view at a widget width of 468px, the title should be of font-size 35px */\n return widgetWidth * 35 / 468 + \"px\";\n case JACKPOT_WIDGET_LAYOUT.LANDSCAPE_WIDE:\n /** In minimized view at a widget width of 375px, the title should be of font-size 25px */\n return widgetWidth * 25 / 375 + \"px\";\n case JACKPOT_WIDGET_LAYOUT.PORTRAIT:\n default:\n if (mAndBelow) {\n /** In mobile view at a widget width of 131px, the title should be of font-size 14px */\n return widgetWidth * 14 / 131 + \"px\";\n } else {\n /** At a widget width of 240px, the title should be of font-size 25px */\n return widgetWidth * 25 / 240 + \"px\";\n }\n }\n};\n\nexport const JackpotTitleDefaultBox = styled.div<IJackpotWidgetTitleBox>`\n display: none;\n`;\n\nexport const JackpotTitleMrGreenBox = styled(JackpotTitleDefaultBox)`\n display: ${({isDaily}) => isDaily ? \"block\" : \"none\"};\n text-shadow: 0px 2.70px 2.70px rgba(0, 0, 0, 0.29);\n line-height: 1.2;\n text-align: center;\n ${({theme}) => theme.font.presets.bold};\n color: ${({theme}) => theme.colors.brandSecondaryLight};\n padding-top: 5%;\n\n font-size: ${({layout, widgetWidth}) => handleTitleBoxFontSize(layout, widgetWidth)};\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n font-size: ${({layout, widgetWidth}) => handleTitleBoxFontSize(layout, widgetWidth, true)};\n }\n\n`;\n\nconst JackpotTitleBox = styledByTheme(JackpotTitleDefaultBox)\n .forMrGreen(JackpotTitleMrGreenBox)\n .forMrGreenCip(JackpotTitleMrGreenBox)\n .forMrGreenCis(JackpotTitleMrGreenBox)\n .apply();\n\nexport default JackpotTitleBox;\n\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {Check} from '@sparkware/app-utils';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {JACKPOT_STATE, JackpotInternalId, JackpotType} from '../../../common/const/jackpot_map_ids';\nimport {\n JackpotWidgetConfiguration\n} from '../../services/configurations/config-data-sections/jackpot-widget.configuration';\nimport {JackpotWidgetBox} from './boxes/jackpot-widget.box';\nimport {JackpotWidgetBgBox} from './boxes/bg/jackpot-widget-bg.box';\nimport {JackpotWidgetLogoBox} from './boxes/logo/jackpot-widget-logo.box';\nimport {JackpotWidgetAmountBox} from './boxes/amount/jackpot-widget-amount.box';\nimport {JackpotWidgetFooterBox} from './boxes/footer/jackpot-widget-footer.box';\nimport {JackpotWidgetClockLabelBox} from './boxes/footer/clock/label/jackpot-widget-clock-label.box';\nimport {JackpotWidgetClockComponent} from './jackpot-widget-clock.component';\nimport {JackpotWidgetAmountLabelBox} from './boxes/amount/label/jackpot-widget-amount-label.box';\nimport {JackpotWidgetCollectingLabelBox} from './boxes/footer/collecting/label/jackpot-widget-collecting-label.box';\nimport {JackpotWidgetCollectingAmountBox} from './boxes/footer/collecting/amount/jackpot-widget-collecting-amount.box';\nimport {JackpotWidgetBorderShine, JackpotWidgetRadialShine} from './boxes/shine/jackpot-widget-shine.box';\nimport {JackpotWidgetAspectRatioBox} from './boxes/aspect-ratio/jackpot-widget-aspect-ratio.box';\nimport {JackpotWidgetAmountContainer} from './boxes/amount/container/jackpot-widget-amount-container.box';\nimport {JackpotWidgetClockLabelSkeletonBox} from \"./skeleton/boxes/footer/jackpot-widget-clock-label-skeleton.box\";\nimport {\n JackpotWidgetCollectingLabelSkeletonBox\n} from \"./skeleton/boxes/footer/jackpot-widget-collecting-label-skeleton.box\";\nimport {JackpotWidgetFooterSkeletonBox} from \"./skeleton/boxes/footer/jackpot-widget-footer-container-skeleton.box\";\nimport {JackpotWidgetAmountSkeletonBox} from \"./skeleton/boxes/jackpot-widget-amount-skeleton.box\";\nimport {action, makeObservable, observable} from \"mobx\";\nimport {imagePreload} from '../../../common/utils/image-preload';\nimport {ResizeObserver, ResizeObserverEntry} from '@juggle/resize-observer';\nimport {IJackpotHandler} from '../../services/jackpots/jackpot-handler/jackpot-handler.interface';\nimport {IJackpotData} from '../../services/jackpots/jackpots.service.interface';\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {SpacerBox} from '../../basic-ui-components/layout/spacer.box';\nimport JackpotTitleBox from \"./boxes/title/jackpot-title.box\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {getJackpotWidgetImagesByType} from \"./jackpot-widget-images\";\n\n\nexport enum JACKPOT_WIDGET_LAYOUT {\n PORTRAIT,\n PORTRAIT_TALL,\n LANDSCAPE,\n LANDSCAPE_WIDE\n}\n\nexport interface IJackpotWidgetLayout {\n layout: JACKPOT_WIDGET_LAYOUT;\n}\n\nexport interface JackpotWidgetComponentProps extends ComponentServicesPick<'jackpots'> {\n\t/**\n\t * We send the wrapper as prop because if the widget is not rendered, then we don't want to render the Wrapper either\n\t */\n WrapperBox?: React.ComponentType;\n\twidgetConfig?: JackpotWidgetConfiguration;\n layout?: JACKPOT_WIDGET_LAYOUT;\n seoCategory?: string;\n onClick?: () => void;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent<JackpotWidgetComponentProps> {\n\n constructor(props: JackpotWidgetComponentProps) {\n super(props);\n makeObservable(this);\n }\n\n private _onWidgetClick = () => {\n //Product want to check how many users click on the widgets even if it's not clickable\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\", \"Jackpot_Widget\", `${this.services.routing.currentRoute?.data?.arenaType}, ${this.props.widgetConfig?.jackpotType}`);\n\n if (this.props.onClick) {\n const listInfo = this.services.configuration.getGamesListByJackpotId(this.props.widgetConfig.jackpotId);\n this.services.analytics.sendOrbitMarketingEvent(this.props.seoCategory ?? \"List_Widget\", \"Widget_Clicked\", this.props.widgetConfig.jackpotType + (listInfo?.title ? \"_\" + listInfo.title : \"\"));\n this.props.onClick();\n }\n }\n\n private _isWidgetClickable = () => {\n return !!this.props.onClick || this.props.widgetConfig.jackpotType === JackpotType.Party;\n }\n\n @observable.ref\n private imagesReady = false;\n\n\n @action.bound\n private _setImagesReady(readyState: boolean) {\n this.imagesReady = readyState;\n }\n\n private get _isJackpotHandlerReady(): boolean {\n const jackpotId = this.props.widgetConfig?.jackpotId ?? JackpotInternalId.Daily;\n const jackpotHandler = this.props.jackpots.currentJackpotsById[jackpotId];\n return !Check.isNullOrUndefined(jackpotHandler?.jackpotData);\n }\n\n private get _shouldRenderSkeleton() {\n return (!this.imagesReady || !this._isJackpotHandlerReady);\n }\n\n private get _jackpotType(): JackpotType {\n return this.props.widgetConfig?.jackpotType ?? JackpotType.Daily;\n }\n\n componentDidMount() {\n super.componentDidMount();\n\n\n const jackpotImages = getJackpotWidgetImagesByType(this.services.theme.currentTheme, this._jackpotType);\n\n if (!jackpotImages) {\n // this can happen if in Orbit Admin metadata has jackpotType has unknown value for Orbit - for example \"HourlyCaptain8\"\n this.services.logger.warning(`Unknown JP type ${this._jackpotType} found!`)\n return;\n }\n\n Promise.all([\n jackpotImages.logo ? imagePreload(jackpotImages.logo) : Promise.resolve(),\n jackpotImages.background ? imagePreload(jackpotImages.background): Promise.resolve()\n ]).then(() => {\n this._setImagesReady(true);\n });\n }\n\n componentWillUnmount() {\n if (this.resizeObserverInstance) {\n this.resizeObserverInstance.disconnect();\n this.resizeObserverInstance = null;\n }\n }\n\n @observable.ref\n private widgetWidth: number;\n private aspectRatioBox: HTMLDivElement | null;\n private resizeObserverInstance: ResizeObserver;\n private disposer: undefined | ((oldRefEl: HTMLDivElement) => void);\n\n @action.bound\n private setWidgetWidth = (entries: ResizeObserverEntry[]) => {\n // We know we are only watching the aspect ratio box element so we take the first element in the array.\n // We are not using this.aspectRatioBox directly because from a typescript point of view that could be null\n // and from a react component lifecycle perspective it could be null as well\n let targetElement = entries[0].target;\n const elementRectangle = targetElement.getBoundingClientRect();\n this.widgetWidth = elementRectangle.width;\n };\n\n private _captureJackpotWidgetAspectRatioBoxRef = (refEl: HTMLDivElement | null) => {\n if (this.disposer) {\n this.disposer(this.aspectRatioBox);\n this.disposer = undefined;\n }\n this.aspectRatioBox = refEl;\n if (this.aspectRatioBox) {\n if (!this.resizeObserverInstance) {\n this.resizeObserverInstance = new ResizeObserver(this.setWidgetWidth);\n }\n this.resizeObserverInstance.observe(this.aspectRatioBox);\n this.disposer = (oldRefEl: HTMLDivElement) => {\n // At unmount, the resizeObserverInstance will be destroyed and the disposer will be called too late.\n // In that case, we don't do anything since the observer was disconnected at unmount\n if (this.resizeObserverInstance) {\n this.resizeObserverInstance.unobserve(oldRefEl);\n }\n }\n }\n };\n\n private _getCountDownTimerTranslationKey(jackpotState: JACKPOT_STATE) {\n let translationKey = '';\n switch (jackpotState) {\n case JACKPOT_STATE.Hot:\n translationKey = 'JACKPOT-WIDGET-DROPS-SOON';\n break;\n\n case JACKPOT_STATE.OffHours:\n translationKey = 'JACKPOT-WIDGET-STARTS-SOON';\n break;\n\n case JACKPOT_STATE.Regular:\n default:\n translationKey = 'JACKPOT-WIDGET-MUST-PAY';\n break;\n }\n\n return translationKey;\n }\n\n private _getJackpotWidgetLayout(): JACKPOT_WIDGET_LAYOUT {\n const isMobileTablet = this.services.mediaQuery.mAndAbove && this.services.mediaQuery.lAndBelow;\n\n return this.props.layout || isMobileTablet ? JACKPOT_WIDGET_LAYOUT.PORTRAIT_TALL : JACKPOT_WIDGET_LAYOUT.PORTRAIT;\n }\n\n private _getAmountDisplayed(jackpotHandler: IJackpotHandler) {\n const {jackpotState, lastWinAmount} = jackpotHandler.jackpotData || {};\n\n return (\n jackpotState === JACKPOT_STATE.Cold ?\n this.services.currency.formatMoney(lastWinAmount) :\n this.services.currency.formatMoney(jackpotHandler?.jackpotAmount)\n );\n }\n\n render() {\n if (!this.props.widgetConfig || !this.props.widgetConfig.display) {\n return null;\n }\n\n const jackpotId = String(this.props.widgetConfig.jackpotId ?? JackpotInternalId.Daily);\n const jackpotType= this._jackpotType;\n\n const jackpotHandler: IJackpotHandler = this.props.jackpots.currentJackpotsById[jackpotId];\n const jackpotData = (jackpotHandler?.jackpotData || {}) as IJackpotData;\n\n if (!this._shouldRenderSkeleton) {\n jackpotHandler.startGradual(jackpotData);\n }\n\n const {jackpotState} = jackpotData || {};\n\n const WrapperBox = this.props.WrapperBox || React.Fragment;\n\n const layout = this._getJackpotWidgetLayout();\n\n const themeType = this.props.jackpots.getThemeType(jackpotType);\n\n const isDailyJPWidget = this.props.widgetConfig.jackpotType === JackpotType.Daily;\n\n return <WrapperBox>\n <JackpotWidgetAspectRatioBox ref={this._captureJackpotWidgetAspectRatioBoxRef} layout={layout}>\n <JackpotWidgetBox onClick={this._onWidgetClick} isClickable={this._isWidgetClickable()}\n className=\"cy-jackpot-widget\">\n <JackpotWidgetBgBox shouldRenderSkeleton={this._shouldRenderSkeleton} jackpotType={jackpotType}\n layout={layout}>\n {jackpotState === JACKPOT_STATE.Hot ? <>\n <JackpotWidgetBorderShine/>\n <JackpotWidgetRadialShine/>\n <JackpotWidgetBorderShine bottom/>\n <JackpotWidgetRadialShine bottom/>\n </> : null}\n\n {(this._shouldRenderSkeleton) ?\n <>\n <JackpotWidgetAmountSkeletonBox/>\n <JackpotWidgetFooterSkeletonBox>\n <JackpotWidgetCollectingLabelSkeletonBox/>\n <JackpotWidgetClockLabelSkeletonBox/>\n </JackpotWidgetFooterSkeletonBox>\n </> :\n <>\n <JackpotTitleBox layout={layout} widgetWidth={this.widgetWidth} isDaily={isDailyJPWidget}>\n {this.services.translation.translate(\"JACKPOT_WIDGET_TITLE\")}\n </JackpotTitleBox>\n <JackpotWidgetLogoBox\n src={getJackpotWidgetImagesByType(this.services.theme.currentTheme, jackpotType)?.logo}\n alt=\"jackpot-logo\"\n layout={layout}\n isDaily={isDailyJPWidget}\n />\n <JackpotWidgetAmountContainer layout={layout} isDaily={isDailyJPWidget}>\n {jackpotState === JACKPOT_STATE.Cold &&\n <JackpotWidgetAmountLabelBox layout={layout} widgetWidth={this.widgetWidth}\n themeType={themeType}\n >\n {this.services.translation.translate('JACKPOT-WIDGET-LAST-WIN')}\n </JackpotWidgetAmountLabelBox>\n }\n\n <JackpotWidgetAmountBox state={jackpotState} layout={layout}\n widgetWidth={this.widgetWidth} themeType={themeType}\n className={CyClass('cy-jackpot-widget-amount')}\n isDaily={isDailyJPWidget}\n text={this._getAmountDisplayed(jackpotHandler)}\n\n >\n <span>\n {this._getAmountDisplayed(jackpotHandler)}\n </span>\n </JackpotWidgetAmountBox>\n </JackpotWidgetAmountContainer>\n <JackpotWidgetFooterBox layout={layout}>\n { jackpotData.jackpotState ?\n (jackpotState === JACKPOT_STATE.Cold ?\n <>\n <JackpotWidgetCollectingLabelBox layout={layout}\n widgetWidth={this.widgetWidth}\n themeType={themeType}>\n {this.services.translation.translate('JACKPOT-WIDGET-NEXT-JACKPOT')}\n </JackpotWidgetCollectingLabelBox>\n\n <JackpotWidgetCollectingAmountBox layout={layout}\n widgetWidth={this.widgetWidth}\n themeType={themeType}\n className={CyClass('cy-jackpot-widget-collecting-amount')}>\n {this.services.currency.formatMoney(jackpotHandler.jackpotAmount)}\n </JackpotWidgetCollectingAmountBox>\n </> :\n <>\n <JackpotWidgetClockLabelBox layout={layout} state={jackpotState}\n widgetWidth={this.widgetWidth}\n themeType={themeType}\n >\n {this.services.translation.translate(this._getCountDownTimerTranslationKey(jackpotState))}\n </JackpotWidgetClockLabelBox>\n \n <JackpotWidgetClockComponent\n jackpotData={jackpotData}\n layout={layout}\n widgetWidth={this.widgetWidth}\n jackpotType={jackpotType}\n />\n </>) : <SpacerBox height={layout === JACKPOT_WIDGET_LAYOUT.PORTRAIT ? \"7rem\" : \"1rem\"}></SpacerBox> }\n </JackpotWidgetFooterBox>\n </>}\n </JackpotWidgetBgBox>\n </JackpotWidgetBox>\n </JackpotWidgetAspectRatioBox>\n </WrapperBox>;\n }\n}\n\n\nexport const JackpotWidgetComponent = withServices(ComponentBody, ['jackpots']);","import styled from \"styled-components\";\nimport {JackpotWidgetFooterElementSkeletonBox} from \"./jackpot-widget-footer-element-skeleton.box\";\n\nexport const JackpotWidgetClockLabelSkeletonBox = styled(JackpotWidgetFooterElementSkeletonBox)`\n margin-left: 50%;\n`;","import styled from \"styled-components\";\nimport {JackpotWidgetFooterElementSkeletonBox} from \"./jackpot-widget-footer-element-skeleton.box\";\n\nexport const JackpotWidgetCollectingLabelSkeletonBox = styled(JackpotWidgetFooterElementSkeletonBox)`\n margin-left: 5%;\n`;","import styled from \"styled-components\";\n\nexport const JackpotWidgetFooterSkeletonBox = styled.div`\n display: flex;\n margin-bottom: 0.8rem;\n`;","import styled from \"styled-components\";\n\nexport const JackpotWidgetFooterElementSkeletonBox = styled.div`\n width: 20%;\n height: 2rem;\n \n animation: FooterElementSkeletonAnimation 1.5s linear infinite;\n \n @keyframes FooterElementSkeletonAnimation {\n 0% {\n background-color: #474747;\n }\n 100% {\n background-color: #333333;\n }\n }\n`;","import styled from \"styled-components\";\n\nexport const JackpotWidgetAmountSkeletonBox = styled.div`\n margin-top: 35%;\n margin-left: 25%;\n\n width: 50%;\n height: 2.8rem;\n \n animation: AmountSkeletonAnimation 1.5s linear infinite;\n @keyframes AmountSkeletonAnimation {\n 0% {\n background-color: #474747;\n }\n 100% {\n background-color: #333333;\n }\n }\n`;","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const LaboratoryShowcasePageWrapperBox = styledBox(\"LaboratoryShowcasePageWrapperBox\");","import React from \"react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\n\nexport const GeoLocationBrowserApiTestComponent: React.FC = () => {\n const services = useServices();\n const _onGetGeo = () => {\n const onSuccess = (data: GeolocationPosition) => {\n services.dialog.showSimpleTextModal({\n title: \"Success GEO\",\n text: JSON.stringify({\n latitude: data?.coords?.latitude,\n longitude: data?.coords?.longitude\n }, null, 2)\n })\n }\n\n const onError = (err: GeolocationPositionError) => {\n services.dialog.showSimpleTextModal({\n title: \"Error GEO\",\n text: JSON.stringify({\n code: err?.code,\n message: err?.message\n }, null, 2)\n })\n }\n\n navigator.geolocation.getCurrentPosition(onSuccess, onError);\n }\n\n return (\n <Button preset={\"primary\"} onClick={_onGetGeo}>Get GEO</Button>\n );\n}","import styled from \"styled-components\";\n\nexport const TextareaBox = styled.textarea`\n padding: 10px;\n\n font-size: 1.5rem;\n\n color: ${({theme}) => theme.colors.textLight};\n background-color: ${props => props.theme.colors.backgroundDark};\n\n border-radius: ${({theme}) => theme.layout.border.radius};\n border-color: ${({theme}) => theme.colors.boxBorderContrast};\n border-width: 2px;\n border-style: solid;\n`;","import styled from \"styled-components\";\n\nexport const Label = styled.label`\n font-size: 1.6rem;\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ShowcaseConfigurationBox = styledBox(\"ShowcaseConfigurationBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ShowcaseContentContainerBox = styledBox(\"ShowcaseContentContainerBox\");","import {useServices} from \"../../../react-hooks/use-services.hook\";\nimport React, {useState} from \"react\";\nimport {IStandardToastDefinition} from \"../../../services/toaster/toaster.service.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {TextareaBox} from \"../../../basic-ui-components/form/textarea.box\";\nimport {Label} from \"../boxes/label\";\nimport {ShowcaseConfigurationBox} from \"../boxes/showcase-configuration/showcase-configuration.box\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\n\nconst BASE_CONTENT = {\n title: 'Test toaster',\n message: 'This is an example for standard toaster',\n showProgressBar: true,\n showDefaultImage: true,\n showDefaultButton: false,\n};\nconst BASE_BUTTON = {\n text: 'Close toaster',\n onClick: (closeToast) => {closeToast()}\n};\n\nexport const ToasterShowcase: React.FC = () => {\n const [toasterOpt, setToasterOpt] = useState(BASE_CONTENT);\n const services = useServices();\n\n const onChangeInput = (ev) => {\n const value = ev.target.type === 'checkbox' ? ev.target.checked : ev.target.value;\n const field = ev.target.name;\n setToasterOpt({...toasterOpt, [field]: value});\n };\n\n const showToaster = () => {\n const customizeToasterOptions: IStandardToastDefinition = {\n contentProps: {\n title: toasterOpt.title,\n message: toasterOpt.message,\n image: toasterOpt.showDefaultImage && 'DEFAULT_TOAST_IMAGE',\n button: toasterOpt.showDefaultButton && BASE_BUTTON\n },\n toastOptions: {\n timeout: toasterOpt.showProgressBar && TimeSpan.fromMilliseconds(5000)\n }\n };\n\n services.toaster.showStandardToast(customizeToasterOptions);\n };\n\n const closeToasters = () => {\n services.toaster.removeAllToasts()\n };\n\n return (<>\n <ShowcaseContentContainerBox>\n <ShowcaseConfigurationBox>\n <h3>Title:</h3>\n <input type=\"text\" value={toasterOpt.title} name=\"title\" onChange={onChangeInput} />\n </ShowcaseConfigurationBox>\n\n <ShowcaseConfigurationBox>\n <h3>Message:</h3>\n <TextareaBox\n style={{fontSize: \"1.6rem\", width: \"100%\", resize: \"vertical\"}}\n rows={4}\n name='message'\n value={toasterOpt.message}\n onChange={onChangeInput}\n />\n </ShowcaseConfigurationBox>\n\n <ShowcaseConfigurationBox>\n <h3>Options:</h3>\n <div>\n <input\n type=\"checkbox\"\n name=\"showProgressBar\"\n id=\"showProgressBar\"\n checked={toasterOpt.showProgressBar}\n onChange={onChangeInput}\n />\n <Label htmlFor='showProgressBar'>Show Progress bar (5s)</Label>\n </div>\n\n <div>\n <input\n type=\"checkbox\"\n name=\"showDefaultImage\"\n id=\"showDefaultImage\"\n checked={toasterOpt.showDefaultImage}\n onChange={onChangeInput}\n />\n <Label htmlFor='showDefaultImage'>Show default image</Label>\n </div>\n\n <div>\n <input\n type=\"checkbox\"\n name=\"showDefaultButton\"\n id=\"showDefaultButton\"\n checked={toasterOpt.showDefaultButton}\n onChange={onChangeInput}\n />\n <Label htmlFor='showDefaultButton'>Show default button</Label>\n </div>\n </ShowcaseConfigurationBox>\n </ShowcaseContentContainerBox>\n\n <ShowcaseContentContainerBox>\n <Button preset=\"primary\" onClick={showToaster}>Show toaster</Button>\n <Button preset=\"info\" onClick={closeToasters}>Close toasters</Button>\n </ShowcaseContentContainerBox>\n </>\n );\n}","import {useState} from \"react\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {GamblingSessionLimitReachedComponent, LimitType} from \"../../gambling-session/limit-reached/gambling-session-limit-reached.component\";\nimport {DropDownComponent} from \"../../gambling-session/setup/parts/drop-down.component\";\nimport {GamblingSessionSetupComponent} from \"../../gambling-session/setup/gambling-session-setup.component\";\nimport {IGamblingSessionLimitsSetup} from \"../../../services/gambling-session/gambling-session-limits-setup.interface\";\nimport {GamblingSessionLogoutDialog} from \"../../gambling-session/logout/gambling-session-logout-dialog.component\";\n\nenum GamblingSessionDialog {\n Setup = 1,\n IntervalReminder,\n LimitReached,\n Logout\n}\n\nexport const GamblingSessionSetupDialogShowcase: React.FC = () => {\n const services = useServices();\n const [dialogType, setDialogType] = useState(GamblingSessionDialog.Setup);\n const onSetLimits = (limits: IGamblingSessionLimitsSetup) => {\n alert(JSON.stringify(limits));\n };\n // window.TimeSpan = TimeSpan;\n const toggleOpen = () => {\n switch (dialogType) {\n case GamblingSessionDialog.Setup:\n services.dialog.showModal(dialogHandler => (<GamblingSessionSetupComponent\n dialogHandler={dialogHandler}\n onSetLimits={onSetLimits}\n // onContinue={onContinue}\n />), {\n title: services.translation.translate('GAMBLING_SESSION_SETUP_TITLE'),\n isHighPriority: true,\n mobileCenterHeader: true,\n // onClosedByXButton: () => resolve(GameStepsExecutionResultEnum.Cancel),\n // renderExtraHeaderButtons: () => <HelpPageButtonComponent/>\n });\n break;\n case GamblingSessionDialog.IntervalReminder:\n services.dialog.showModal(dialogHandler => (<GamblingSessionLimitReachedComponent\n dialogHandler={dialogHandler}\n sessionDuration={TimeSpan.fromMinutes(75)}\n limitType={LimitType.IntervalReminder}\n totalBets={25}\n totalWins={-25000}\n \n sessionLimitTimestamp=\"poimierți\"\n />), {\n title: services.translation.translate('GAMBLING_SESSION_INTERVAL_REMINDER_TITLE'),\n noDefaultContentPadding: true,\n isHighPriority: true,\n mobileCenterHeader: true,\n });\n break;\n case GamblingSessionDialog.LimitReached:\n services.dialog.showModal(dialogHandler => (<GamblingSessionLimitReachedComponent\n dialogHandler={dialogHandler}\n sessionDuration={TimeSpan.fromMinutes(75)}\n limitType={LimitType.Loss}\n totalBets={25}\n totalWins={-25000}\n \n sessionLimitTimestamp=\"poimierți\"\n />), {\n title: services.translation.translate('GAMBLING_SESSION_LOSS_LIMIT_REACHED_TITLE'),\n noDefaultContentPadding: true,\n isHighPriority: true,\n mobileCenterHeader: true,\n });\n break;\n case GamblingSessionDialog.Logout:\n services.dialog.showModal((dialogHandler) => (\n <GamblingSessionLogoutDialog\n dialogHandler={dialogHandler}\n sessionDuration={TimeSpan.fromMinutes(25)}\n totalBets={43}\n totalWins={156}\n onLogout={() => {\n dialogHandler.close();\n }}\n onCancel={() => {\n dialogHandler.close();\n }}\n />\n ), {\n title: services.translation.translate(\"GAMBLING_SESSION_LOGOUT_DIALOG_TITLE\"),\n noDefaultContentPadding: true,\n isHighPriority: true,\n mobileCenterHeader: true,\n // onClosedByXButton: () => {}\n });\n break;\n default:\n break;\n }\n };\n return (<div style={{display: \"flex\"}}>\n <div style={{width: \"300px\"}}>\n <DropDownComponent\n label=\"Gambling Session Dialog Select\"\n items={[{\n value: GamblingSessionDialog.Setup,\n text: \"Setup Dialog\"\n }, {\n value: GamblingSessionDialog.IntervalReminder,\n text: \"Interval Reminder\"\n }, {\n value: GamblingSessionDialog.LimitReached,\n text: \"Limit Reached\"\n }, {\n value: GamblingSessionDialog.Logout,\n text: \"Logout\"\n }]}\n onItemSelected={(value: GamblingSessionDialog) => {\n setDialogType(value);\n return Promise.resolve({\n cancel: false\n });\n }}\n className=\"showcase-gambling-session-dialog-select\"\n />\n </div>\n <Button preset=\"primary\" onClick={toggleOpen} margin=\"2rem 0 0 2rem\">Show game limits popup</Button>\n </div>);\n}","import React from \"react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { Button } from \"../../../basic-ui-components/button/base/button.component\";\n\nconst ONBOARDING_TOUR_ALREADY_SHOWN = \"onboarding_tour_already_shown\";\n\nexport class OnboardingTourShowcase extends OrbitComponent {\n\n private openOnboarding = () => {\n this.services.onboardingTour.open();\n }\n\n render() {\n let onboardingAlreadyShown = this.services.localStorage.getItem(ONBOARDING_TOUR_ALREADY_SHOWN);\n if (onboardingAlreadyShown) {\n return <div>\n Onboarding tour was already presented to this user;\n <Button preset=\"info\" onClick={() => {\n this.services.localStorage.removeItem(ONBOARDING_TOUR_ALREADY_SHOWN);\n window.location.reload();\n }}>Reset</Button>\n </div>;\n }\n\n return <div>\n <Button preset=\"primary\" onClick={this.openOnboarding}>Start onboarding</Button>\n </div>\n }\n}","import React, {PropsWithChildren} from \"react\";\nimport { observer } from \"mobx-react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { action, observable, runInAction, makeObservable } from \"mobx\";\nimport { BurnoutAnimationWrapper } from \"../../burnout/burnout-animation/burnout-animation-wrapper.component\";\nimport { Button } from \"../../../basic-ui-components/button/base/button.component\";\nimport {Label} from \"../boxes/label\";\n\nenum BurnoutAnimationScenario {\n GotOMG,\n NotYetOMG\n}\n\n@observer\nexport class BurnoutAnimationShowcase extends OrbitComponent {\n constructor(props: PropsWithChildren) {\n super(props);\n\n makeObservable(this);\n }\n\n\n @observable.ref\n private _paused = false;\n @observable.ref\n private _renderAnimation = false;\n @observable.ref\n private _scenario = BurnoutAnimationScenario.GotOMG;\n\n private checkOmg = () => {\n return (this._scenario === BurnoutAnimationScenario.GotOMG);\n }\n\n @action.bound\n private togglePauseAnimation = () => {\n this._paused = !this._paused;\n };\n\n @action.bound\n private toggleRenderAnimation = () => {\n this._renderAnimation = !this._renderAnimation;\n }\n\n\n render() {\n return <div>\n <div>Dismiss type:\n {[\n [BurnoutAnimationScenario.GotOMG, \"Got OMG\"],\n [BurnoutAnimationScenario.NotYetOMG, \"Not Yet OMG\"]\n ].map((scenario) =>\n <div key={scenario[0]}>\n <input\n type=\"radio\" name=\"scenario\" id={\"scenario_\" + scenario[0]} value={scenario[0]}\n checked={this._scenario === scenario[0]}\n onChange={(ev) => {\n runInAction(() => {\n this._scenario = parseInt(ev.target.value) as BurnoutAnimationScenario\n })\n }}\n />\n <Label style={{fontSize: \"1.6rem\"}} htmlFor={\"scenario_\" + scenario[0]}>{scenario[1]}</Label>\n </div>\n )}\n </div>\n <div style={{marginBlockEnd: \"1rem\"}}>\n <Button preset=\"primary\" onClick={() => {\n this.toggleRenderAnimation();\n }}>{this._renderAnimation ? \"Remove\" : \"Render\"} burnout</Button>\n {this._renderAnimation ? <Button preset=\"info\" onClick={() => {\n this.togglePauseAnimation();\n }}>{this._paused ? \"Play\" : \"Pause\"} burnout animation</Button>: null}\n </div>\n <div>Known issues: On iOS the fade animation and floating button animation have some problems. Don't try to\n change the orientation of the device while the animation is playing\n </div>\n\n {this._renderAnimation ? <BurnoutAnimationWrapper\n checkOmg={this.checkOmg}\n // showOmg={this.toggleRenderAnimation}\n onSafeUnmountNotice={this.toggleRenderAnimation}\n paused={this._paused}\n /> : null}\n </div>;\n }\n}\n","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { Button } from \"../../../basic-ui-components/button/base/button.component\";\nimport {Label} from \"../boxes/label\";\nimport {SetTimeoutType} from \"../../../../common/types/set-timeout-type\";\nimport {PixiSpineAnimation} from \"../../../services/pixi-app/pixi-spine-animation\";\nimport {ShowcaseConfigurationBox} from \"../boxes/showcase-configuration/showcase-configuration.box\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\n\n\ntype PixiAppDestroyerFn = () => void;\ninterface IAnimationDef {\n label: string;\n spineJsonUrl: string;\n width: number;\n height: number;\n};\n\nexport const PixiSpineShowcase = observer(class PixiSpineShowcase extends OrbitComponent {\n\n private _forceCanvas = false;\n private _runAnimationASAP = true;\n private _animationIndex = 0;\n private _animationList: IAnimationDef[] = [{\n spineJsonUrl: this.services.theme.currentTheme.assets.images.animated_icons_poc.millionaire_genie_megaways.genie_megaways_v1_json.toString(),\n label: \"Genie Megaways, Small, open setup pose with some artifacts (v1)\",\n width: 190, height: 191\n }, {\n spineJsonUrl: this.services.theme.currentTheme.assets.images.animated_icons_poc.millionaire_genie_megaways.genie_megaways_v2_json.toString(),\n label: \"Genie Megaways, Big, open setup pose\",\n width: 210, height: 290\n }, {\n spineJsonUrl: this.services.theme.currentTheme.assets.images.animated_icons_poc.millionaire_genie_megaways.genie_megaways_v3_json.toString(),\n label: \"Genie Megaways, Small, open setup pose with some artifacts (v2)\",\n width: 190, height: 191\n }, {\n spineJsonUrl: this.services.theme.currentTheme.assets.images.animated_icons_poc.millionaire_genie_megaways.genie_megaways_v4_json.toString(),\n label: \"Genie Megaways, Small, closed setup pose, wrong origin\",\n width: 190, height: 191\n }];\n\n private _pixiAppDestroyers: PixiAppDestroyerFn[] = [];\n\n private addPixiAnimation = async (def: IAnimationDef) => {\n if (!this._pixiAppRootEl) {\n return;\n }\n let iconPixiAnimation = new PixiSpineAnimation(this.services, {\n width: def.width,\n height: def.height,\n force2DCanvasContext: !!this._forceCanvas\n }, [{name: 'burnoutAnimationResource', jsonUrl: def.spineJsonUrl}], {\n render: ({spineAnimations, loaderResources}) => {\n const spineAnimation = spineAnimations.burnoutAnimationResource;\n // get the animations\n let animationsRan = 0;\n const availableAnimations = loaderResources.burnoutAnimationResource.spineData.animations.map(a => a.name);\n\n // set the position and scale\n // spineAnimation.x = app.screen.width / 2;\n // spineAnimation.y = app.screen.height;\n // spineAnimation.scale.set(0.5);\n\n // play animation\n const runAnimation = () => {\n /* let spineAnimationTrackEntry = */spineAnimation.state.setAnimation(0, availableAnimations[animationsRan % availableAnimations.length], false);\n // spineAnimationTrackEntry.timeScale = 0.25;\n // spineAnimationTrackEntry.listener = {\n // event: (entry, event) => {\n // console.log('TRACK ENTRY event', event, 'entry', entry);\n // if (event.stringValue === \"event name\") { do stuff here... }\n // },\n // complete: (entry) => { console.log(\"TRACK ENTRY COMPLETE\", entry); },\n // start: (entry) => { console.log('TRACK ENTRY start ', entry); }, <-- this cannot be trusted. It doesn't fire for the first animation in a track and for any animation set with \"setAnimation\"\n // end: (entry) => { console.log('TRACK ENTRY ended', entry); },\n // dispose: (entry) => { console.log('TRACK ENTRY disposed', entry); },\n // interrupt: (entry) => { console.log('TRACK ENTRY interrupted ', entry); }\n // };\n }\n let animationSchedule: SetTimeoutType;\n\n spineAnimation.state.addListener({\n // event: (entry, event) => {\n // console.log('ANIMATION event', event, 'entry', entry);\n // if (event.stringValue === \"event name\") { do stuff here... }\n // },\n complete: (entry) => {\n animationsRan++;\n // when animation completes, schedule the next iteration\n animationSchedule = setTimeout(runAnimation, 2000);\n },\n // start: (entry) => { console.log('ANIMATION start ', entry); },\n // end: (entry) => { console.log('ANIMATION ended', entry); },\n // dispose: (entry) => { console.log('ANIMATION disposed', entry); },\n // interrupt: (entry) => { console.log('ANIMATION interrupted ', entry); }\n });\n\n if (this._runAnimationASAP) {\n runAnimation();\n } else {\n animationSchedule = setTimeout(runAnimation, 2000);\n }\n\n this._pixiAppDestroyers.push(iconPixiAnimation.dispose);\n\n return () => {\n clearTimeout(animationSchedule);\n animationSchedule = undefined;\n };\n }\n });\n\n iconPixiAnimation.start();\n iconPixiAnimation.attachToDOM(this._pixiAppRootEl);\n };\n\n private removePixiAnimation = (oldest: boolean = true) => {\n let appDestroyer = oldest ? this._pixiAppDestroyers.shift() : this._pixiAppDestroyers.pop();\n if (appDestroyer) {\n appDestroyer();\n appDestroyer = undefined;\n }\n };\n private _pixiAppRootEl: HTMLDivElement | null = null;\n private capturePixiAppRootEl = (el: HTMLDivElement | null) => {\n this._pixiAppRootEl = el;\n };\n render() {\n return <>\n <ShowcaseContentContainerBox>\n <ShowcaseConfigurationBox>\n <div>\n <input\n type=\"checkbox\" name=\"forceCanvas\" id=\"forceCanvas\" value=\"forceCanvas\"\n onChange={(e) => { this._forceCanvas = e.target.checked; }} defaultChecked={this._forceCanvas}\n />\n <Label htmlFor={\"forceCanvas\"}>Force 2D canvas</Label>\n </div>\n <div>\n <input\n type=\"checkbox\" name=\"runAnimationASAP\" id=\"runAnimationASAP\" value=\"runAnimationASAP\"\n onChange={(e) => { this._runAnimationASAP = e.target.checked; }} defaultChecked={this._runAnimationASAP}\n />\n <Label htmlFor={\"runAnimationASAP\"}>Run Animation ASAP</Label>\n </div>\n </ShowcaseConfigurationBox>\n <ShowcaseConfigurationBox>\n <div>{ this._animationList.map((animationDef, i) =>\n <div key={\"animation_def_\" + i}>\n <input\n type=\"radio\" name=\"animation_def\" id={\"animation_def_\" + i} value={i} defaultChecked={i === this._animationIndex}\n onChange={() => { this._animationIndex = i; }}\n />\n <Label htmlFor={\"animation_def_\" + i}>{animationDef.label}</Label>\n </div>\n ) }</div>\n </ShowcaseConfigurationBox>\n </ShowcaseContentContainerBox>\n <ShowcaseContentContainerBox>\n <Button preset=\"primary\" onClick={() => {\n this.addPixiAnimation(this._animationList[this._animationIndex]);\n }}>Add Pixi Animated Game Icon</Button>\n <Button preset=\"info\" onClick={this.removePixiAnimation}>Remove oldest</Button>\n <Button preset=\"info\" onClick={() => { this.removePixiAnimation(false); }}>Remove newest</Button>\n </ShowcaseContentContainerBox>\n <div ref={this.capturePixiAppRootEl}></div>\n\n {/* <iframe src=\"https://localhost:7070/laboratory\" style={{width: \"100%\", height: 800}}></iframe> */}\n </>;\n }\n});\n","import styled from \"styled-components\";\n\nexport const BgBox = styled.div`\n background-color: ${({theme}) => theme.colors.background};\n color: ${({theme}) => theme.colors.text};\n`;","import {useState} from \"react\";\nimport {PropsWithChildren} from \"react\";\nimport {ThemeProvider} from \"styled-components\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {FlexContainerBox} from \"../../themes/architecture/css-helpers/flex\";\nimport {BgBox} from \"./boxes/bg.box\";\nimport {Label} from \"./boxes/label\";\n\nexport const ThemeSwitcher: React.FC<PropsWithChildren> = (props) => {\n const services = useServices();\n const [guid] = useState(services.tools.getGuid());\n const [theme, setTheme] = useState(\"content\");\n\n function getTheme(key: string) {\n if (key === \"shell\") {\n return services.theme.currentTheme;\n }\n if (key === \"content\") {\n return services.theme.mainContentTheme;\n }\n return services.theme.mainContentTheme;\n }\n\n return <div style={{border: \"1px dashed black\"}}>\n <FlexContainerBox alignItems=\"center\">\n <h3>Theme: </h3>\n {[\"shell\", \"content\"].map((th) =>\n <div key={th} style={{margin: \"5px\"}}>\n <input\n type=\"radio\" name={\"theme_\" + guid} id={\"theme_\" + guid + \"_\" + th} value={th}\n checked={th === theme}\n onChange={() => {\n setTheme(th); \n }}\n />\n <Label htmlFor={\"theme_\" + guid + \"_\" + th}>{th}</Label>\n </div>\n )}\n </FlexContainerBox>\n\n <ThemeProvider theme={getTheme(theme)}>\n <BgBox>\n {props.children}\n </BgBox>\n </ThemeProvider>\n </div>;\n};\n","import styled from \"styled-components\";\n\nexport const TextInputBox = styled.input`\n padding: 10px;\n\n font-size: 1.5rem;\n\n color: ${({theme}) => theme.colors.textLight};\n background-color: ${props => props.theme.colors.backgroundDark};\n\n border-radius: ${({theme}) => theme.layout.border.radius};\n border-color: ${({theme}) => theme.colors.boxBorderContrast};\n border-width: 2px;\n border-style: solid;\n`;","import React, {PropsWithChildren} from \"react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {TextInputBox} from \"../../../basic-ui-components/form/textinput.box\";\nimport { observer } from \"mobx-react\";\nimport { observable, runInAction, makeObservable } from \"mobx\";\nimport styled from \"styled-components\"\nimport { ButtonPreset, ButtonSizeVariant, ButtonIconSize, ButtonStroke, IButtonIconProps, ButtonLabelOverflow } from \"../../../basic-ui-components/button/base/button-props.interface\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport {Label} from \"../boxes/label\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\nimport {ShowcaseConfigurationBox} from \"../boxes/showcase-configuration/showcase-configuration.box\";\n\nconst ButtonWrapper = styled.div`\n border: 1px dashed ${({theme}) => theme.colors.text};\n padding: 8px;\n min-width: 400px;\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n min-width: 80%;\n }\n`;\n\n@observer\nexport class ButtonsShowcase extends OrbitComponent {\n constructor(props: PropsWithChildren) {\n super(props);\n\n makeObservable(this);\n }\n\n @observable.ref\n preset: ButtonPreset = \"special\";\n @observable.ref\n sizeVariant: ButtonSizeVariant = \"m\";\n @observable.ref\n withIcon = false;\n @observable.ref\n iconSizeVariant: ButtonIconSize = \"large\";\n @observable.ref\n stroke: ButtonStroke | undefined = undefined;\n @observable.ref\n _iconComponent: IButtonIconProps[\"Component\"]\n @observable.ref\n iconPlacement: IButtonIconProps[\"placement\"] = \"left\";\n @observable.ref\n rounded: boolean | undefined = undefined;\n @observable.ref\n elevated: boolean | undefined = undefined;\n @observable.ref\n labelOverflow: ButtonLabelOverflow = \"expand\";\n @observable.ref\n fullWidth = false;\n @observable.ref\n noRemUnits = false;\n @observable.ref\n disabled = false;\n @observable.ref\n skeleton = false;\n @observable.ref\n buttonLabel = \"Button Label\";\n\n get iconComponent(): IButtonIconProps[\"Component\"] {\n if (!this._iconComponent) {\n return this.services.theme.currentTheme.icons.settingsIcon;\n } else {\n return this._iconComponent;\n }\n\n }\n\n set iconComponent(value: IButtonIconProps[\"Component\"]) {\n runInAction(() => {\n this._iconComponent = value;\n });\n\n }\n\n componentDidMount() {\n super.componentDidMount();\n }\n\n\n render() {\n return <ShowcaseContentContainerBox>\n <ShowcaseConfigurationBox>\n <h3>PRESET: </h3>\n <div>\n {[\"primary\", \"secondary\", \"special\", \"info\", \"warning\", \"flatStroked\"].map((color) =>\n <div key={color}>\n <input\n type=\"radio\" name=\"color\" id={\"color_\" + color} value={color}\n checked={this.preset === color}\n onChange={() => {\n runInAction(() => {\n this.preset = color as ButtonPreset;\n })\n }}\n />\n <Label htmlFor={\"color_\" + color}>{color}</Label>\n </div>\n )}\n </div>\n </ShowcaseConfigurationBox>\n <ShowcaseConfigurationBox>\n <h3>Size Variant: </h3>\n <div>\n {[\"xl\", \"l\", \"m\", \"s\", \"xs\"].map((sizeVariant) =>\n <div key={sizeVariant}>\n <input\n type=\"radio\" name=\"sizeVariant\" id={\"sizeVariant_\" + sizeVariant}\n value={sizeVariant} checked={this.sizeVariant === sizeVariant}\n onChange={() => {\n runInAction(() => {\n this.sizeVariant = sizeVariant as ButtonSizeVariant;\n })\n }}\n />\n <Label htmlFor={\"sizeVariant_\" + sizeVariant}>{sizeVariant}</Label>\n </div>\n )}\n </div>\n <h3>Stroke: </h3>\n <div>\n {[\"heavy\", \"light\", \"none\", \"undefined\"].map((stroke) =>\n <div key={stroke}>\n <input\n type=\"radio\" name=\"stroke\" id={\"stroke_\" + stroke} value={stroke}\n checked={(stroke === \"undefined\" && this.stroke === undefined) || this.stroke === stroke}\n onChange={(ev) => {\n runInAction(() => {\n this.stroke = ev.target.value !== \"undefined\" ? ev.target.value as ButtonStroke : undefined;\n })\n }}\n />\n <Label htmlFor={\"stroke_\" + stroke}>{stroke}</Label>\n </div>\n )}\n </div>\n </ShowcaseConfigurationBox>\n <ShowcaseConfigurationBox>\n <h3>Icon Component: </h3>\n <div>\n <input\n type=\"checkbox\" name=\"withIcon\" id=\"withIcon\" value=\"withIcon\"\n checked={this.withIcon === true}\n onChange={() => {\n runInAction(() => {\n this.withIcon = !this.withIcon;\n })\n }}\n />\n <Label htmlFor={\"withIcon\"}>With Icon</Label>\n </div>\n <div style={{height: \"16px\"}}></div>\n <div>\n {[\n {name: \"AddIcon\", component: this.services.theme.currentTheme.icons.addIcon},\n {name: \"BackIcon\", component: this.services.theme.currentTheme.icons.backIcon},\n {name: \"CloseIcon\", component: this.services.theme.currentTheme.icons.closeIcon},\n {name: \"InfoIcon\", component: this.services.theme.currentTheme.icons.infoIcon},\n {name: \"SettingsIcon\", component: this.services.theme.currentTheme.icons.settingsIcon}\n ].map((icon) =>\n <div key={icon.name}>\n <input\n type=\"radio\" name=\"iconComponent\" id={\"iconComponent_\" + icon.name}\n value={icon.name} checked={this.iconComponent === icon.component}\n onChange={() => this.iconComponent = icon.component}\n />\n <Label htmlFor={\"iconComponent_\" + icon.name}>{icon.name}</Label>\n </div>\n )}\n </div>\n </ShowcaseConfigurationBox>\n <ShowcaseConfigurationBox>\n <h3>Icon Size Variant: </h3>\n <div>\n {[\"large\", \"regular\", \"small\"].map((iconSizeVariant) =>\n <div key={iconSizeVariant}>\n <input\n type=\"radio\" name=\"iconSizeVariant\" id={\"iconSizeVariant_\" + iconSizeVariant}\n value={iconSizeVariant} checked={this.iconSizeVariant === iconSizeVariant}\n onChange={() => {\n runInAction(() => {\n this.iconSizeVariant = iconSizeVariant as ButtonIconSize;\n })\n }}\n />\n <Label htmlFor={\"iconSizeVariant_\" + iconSizeVariant}>{iconSizeVariant}</Label>\n </div>\n )}\n </div>\n <h3>Icon Placement: </h3>\n <div>\n {[\"left\", \"right\"].map((iconPlacement) =>\n <div key={iconPlacement}>\n <input\n type=\"radio\" name=\"iconPlacement\" id={\"iconPlacement_\" + iconPlacement}\n value={iconPlacement} checked={this.iconPlacement === iconPlacement}\n onChange={() => {\n runInAction(() => {\n this.iconPlacement = iconPlacement as IButtonIconProps[\"placement\"];\n })\n }}\n />\n <Label htmlFor={\"iconPlacement_\" + iconPlacement}>{iconPlacement}</Label>\n </div>\n )}\n </div>\n </ShowcaseConfigurationBox>\n <ShowcaseConfigurationBox>\n <div>\n <h3>Rounded</h3>\n {[\"true\", \"false\", \"undefined\"].map((rounded) =>\n <div key={rounded}>\n <input\n type=\"radio\" name=\"rounded\" id={\"rounded_\" + rounded} value={rounded}\n checked={(rounded === \"undefined\" && this.rounded === undefined) || (rounded === \"true\" && this.rounded === true) || (rounded === \"false\" && this.rounded === false)}\n onChange={(ev) => {\n runInAction(() => {\n this.rounded = ev.target.value === \"undefined\" ? undefined : (ev.target.value === \"true\" ? true : false);\n })\n }}\n />\n <Label htmlFor={\"rounded_\" + rounded}>{rounded}</Label>\n </div>\n )}\n </div>\n <div style={{height: \"16px\"}}></div>\n <div>\n <h3>Elevated</h3>\n {[\"true\", \"false\", \"undefined\"].map((elevated) =>\n <div key={elevated}>\n <input\n type=\"radio\" name=\"elevated\" id={\"elevated_\" + elevated} value={elevated}\n checked={(elevated === \"undefined\" && this.elevated === undefined) || (elevated === \"true\" && this.elevated === true) || (elevated === \"false\" && this.elevated === false)}\n onChange={(ev) => {\n runInAction(() => {\n this.elevated = ev.target.value === \"undefined\" ? undefined : (ev.target.value === \"true\" ? true : false);\n })\n }}\n />\n <Label htmlFor={\"elevated_\" + elevated}>{elevated}</Label>\n </div>\n )}\n </div>\n </ShowcaseConfigurationBox>\n <ShowcaseConfigurationBox>\n <div>\n <h3>Label Overflow</h3>\n {[\"expand\", \"ellipsis\", \"clip\", \"wrap\"].map((labelOverflow) =>\n <div key={labelOverflow}>\n <input\n type=\"radio\" name=\"labelOverflow\" id={\"labelOverflow_\" + labelOverflow}\n value={labelOverflow} checked={this.labelOverflow === labelOverflow}\n onChange={() => {\n runInAction(() => {\n this.labelOverflow = labelOverflow as ButtonLabelOverflow;\n })\n }}\n />\n <Label htmlFor={\"labelOverflow_\" + labelOverflow}>{labelOverflow}</Label>\n </div>\n )}\n </div>\n </ShowcaseConfigurationBox>\n <ShowcaseConfigurationBox>\n <div>\n <input\n type=\"checkbox\" name=\"noRemUnits\" id=\"noRemUnits\" value=\"noRemUnits\"\n checked={this.noRemUnits === true}\n onChange={() => {\n runInAction(() => {\n this.noRemUnits = !this.noRemUnits;\n })\n }}\n />\n <Label htmlFor={\"noRemUnits\"}>No REM units</Label>\n </div>\n <div>\n <input\n type=\"checkbox\" name=\"fullWidth\" id=\"fullWidth\" value=\"fullWidth\"\n checked={this.fullWidth === true}\n onChange={() => {\n runInAction(() => {\n this.fullWidth = !this.fullWidth;\n })\n }}\n />\n <Label htmlFor={\"fullWidth\"}>Full Width</Label>\n </div>\n <div>\n <input\n type=\"checkbox\" name=\"disabled\" id=\"disabled\" value=\"disabled\"\n checked={this.disabled === true}\n onChange={() => {\n runInAction(() => {\n this.disabled = !this.disabled;\n })\n }}\n />\n <Label htmlFor={\"disabled\"}>Disabled</Label>\n </div>\n <div>\n <input\n type=\"checkbox\" name=\"skeleton\" id=\"skeleton\" value=\"skeleton\"\n checked={this.skeleton === true}\n onChange={() => {\n runInAction(() => {\n this.skeleton = !this.skeleton;\n })\n }}\n />\n <Label htmlFor={\"skeleton\"}>Skeleton</Label>\n </div>\n <div>\n <TextInputBox\n style={{fontSize: \"1.6rem\", width: \"150px\"}}\n type=\"text\" name=\"buttonLabel\" id=\"buttonLabel\" value={this.buttonLabel}\n onChange={(ev) => {\n runInAction(() => {\n this.buttonLabel = ev.target.value;\n })\n }}\n />\n </div>\n </ShowcaseConfigurationBox>\n\n <div style={{flexBasis: \"100%\"}}>\n <ButtonWrapper>\n <Button\n preset={this.preset}\n stroke={this.stroke}\n icon={this.withIcon ? {\n Component: this.iconComponent,\n size: this.iconSizeVariant,\n placement: this.iconPlacement\n } : undefined}\n sizeVariant={this.sizeVariant}\n rounded={this.rounded}\n noRemUnits={this.noRemUnits}\n fullWidth={this.fullWidth}\n elevated={this.elevated}\n labelOverflow={this.labelOverflow}\n disabled={this.disabled}\n skeleton={this.skeleton}\n >\n {this.buttonLabel}\n </Button>\n </ButtonWrapper>\n </div>\n </ShowcaseContentContainerBox>;\n }\n}\n","import {makeObservable, observable, runInAction} from \"mobx\";\nimport {observer} from \"mobx-react\";\nimport {PropsWithChildren} from \"react\";\nimport styled from \"styled-components\";\nimport {TextInputBox} from \"../../../basic-ui-components/form/textinput.box\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {Label} from \"../boxes/label\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\nimport {ShowcaseConfigurationBox} from \"../boxes/showcase-configuration/showcase-configuration.box\";\n\n\nconst ThemedBox = styled.div<{\n text: string;\n background: string;\n border: string;\n fontPreset: string;\n fontSize: number;\n}>`\n color: ${(p) => p.theme.colors[p.text] || \"transparent\"};\n background-color: ${(p) => p.theme.colors[p.background] || \"transparent\"};\n border: 5px solid ${(p) => p.theme.colors[p.border] || \"transparent\"};\n ${(p) => p.theme.font.presets[p.fontPreset] || p.theme.font.presets.body}\n font-size: ${(p) => p.fontSize || \"1.6\"}rem;\n\n margin: 15px 0;\n padding: 15px;\n\n`;\n\n@observer\nexport class TypographyColorAndPresetShowcase extends OrbitComponent {\n constructor(props: PropsWithChildren) {\n super(props);\n makeObservable(this);\n }\n\n @observable.ref\n background: string = \"background\";\n\n @observable.ref\n textColor: string = \"text\";\n\n @observable.ref\n boxBorder: string = \"boxBorder\";\n\n @observable.ref\n fontPreset: string = \"body\";\n\n @observable.ref\n fontSize: number = 1.6;\n\n render() {\n return <ShowcaseContentContainerBox>\n <ShowcaseConfigurationBox>\n <h3>BACKGROUNDS: </h3>\n <div>\n {[\n \"brandPrimary\", \"brandPrimaryDark\", \"brandPrimaryLight\", \"brandPrimaryContrast\",\n \"brandSecondary\", \"brandSecondaryDark\", \"brandSecondaryLight\", \"brandSecondaryContrast\",\n \"backgroundDark\", \"backgroundMiddleDark\", \"background\", \"backgroundLight\", \"backgroundHover\", \"backgroundActive\", \"backgroundContrast\",\n \"iconBackgroundActive\", \"logoBackground\"\n ].map((background) =>\n <div key={background}>\n <input\n type=\"radio\" name=\"background\" id={\"background_\" + background} value={background}\n checked={this.background === background}\n onChange={() => {\n runInAction(() => {\n this.background = background;\n })\n }}\n />\n <Label htmlFor={\"background_\" + background}>{background}</Label>\n </div>\n )}\n </div>\n </ShowcaseConfigurationBox>\n <ShowcaseConfigurationBox>\n <h3>TEXT COLORS: </h3>\n <div>\n {[\n \"brandPrimary\", \"brandPrimaryDark\", \"brandPrimaryLight\", \"brandPrimaryContrast\",\n \"brandSecondary\", \"brandSecondaryDark\", \"brandSecondaryLight\", \"brandSecondaryContrast\",\n \"textDark\", \"textMiddleDark\", \"text\", \"textLight\", \"textHover\", \"textActive\", \"textContrast\",\n \"moneyColor\"\n ].map((textColor) =>\n <div key={textColor}>\n <input\n type=\"radio\" name=\"textColor\" id={\"textColor_\" + textColor} value={textColor}\n checked={this.textColor === textColor}\n onChange={() => {\n runInAction(() => {\n this.textColor = textColor;\n })\n }}\n />\n <Label htmlFor={\"textColor_\" + textColor}>{textColor}</Label>\n </div>\n )}\n </div>\n </ShowcaseConfigurationBox>\n <ShowcaseConfigurationBox>\n <h3>BOX BORDER: </h3>\n <div>\n {[\n \"brandPrimary\", \"brandPrimaryDark\", \"brandPrimaryLight\", \"brandPrimaryContrast\",\n \"brandSecondary\", \"brandSecondaryDark\", \"brandSecondaryLight\", \"brandSecondaryContrast\",\n \"boxBorderDark\", \"boxBorderMediumDark\", \"boxBorder\", \"boxBorderLight\", \"boxBorderLighter\", \"boxBorderContrast\",\n \"modalDialogBorder\"\n ].map((boxBorder) =>\n <div key={boxBorder}>\n <input\n type=\"radio\" name=\"boxBorder\" id={\"boxBorder_\" + boxBorder} value={boxBorder}\n checked={this.boxBorder === boxBorder}\n onChange={() => {\n runInAction(() => {\n this.boxBorder = boxBorder;\n })\n }}\n />\n <Label htmlFor={\"boxBorder_\" + boxBorder}>{boxBorder}</Label>\n </div>\n )}\n </div>\n </ShowcaseConfigurationBox>\n <ShowcaseConfigurationBox>\n <h3>FONT PRESETS: </h3>\n <div>\n {[\n \"thin\", \"light\", \"regular\", \"medium\", \"body\", \"bold\", \"black\", \"ultra\", \"secondary\"\n ].map((fontPreset) =>\n <div key={fontPreset}>\n <input\n type=\"radio\" name=\"fontPreset\" id={\"fontPreset_\" + fontPreset} value={fontPreset}\n checked={this.fontPreset === fontPreset}\n onChange={() => {\n runInAction(() => {\n this.fontPreset = fontPreset;\n })\n }}\n />\n <Label htmlFor={\"fontPreset_\" + fontPreset}>{fontPreset}</Label>\n </div>\n )}\n </div>\n <div>\n <TextInputBox\n type=\"number\"\n style={{fontSize: \"1.6rem\", width: \"80px\"}}\n min={1}\n max={3}\n step={0.01}\n name=\"fontSize\" id=\"fontSize\" value={this.fontSize}\n onChange={(ev) => {\n runInAction(() => {\n this.fontSize = Math.max(1, Math.min(3, parseFloat(ev.target.value)));\n })\n }}\n /> REM\n </div>\n </ShowcaseConfigurationBox>\n\n <div style={{flexBasis: \"100%\"}}>\n <ThemedBox\n text={this.textColor}\n background={this.background}\n border={this.boxBorder}\n fontPreset={this.fontPreset}\n fontSize={this.fontSize}\n >\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n </ThemedBox>\n </div>\n </ShowcaseContentContainerBox>\n }\n}\n","import React from \"react\";\nimport { observable, makeObservable } from \"mobx\";\nimport { OrbitComponent } from \"../base-components/orbit-component/orbit-component\";\nimport { observer } from \"mobx-react\";\nimport { Select } from \"../../basic-ui-components/form/select.component\";\nimport {Label} from \"./boxes/label\";\n\ninterface IShowcaseDropdownComponentProps<T> {\n fieldName: string;\n caption: string;\n defaultValue?: T | undefined;\n values: T[];\n onChanged: (fieldName: string, value: T) => void;\n}\n\n@observer\nexport class ShowcaseDropdownComponent<T = string> extends OrbitComponent<IShowcaseDropdownComponentProps<T>> {\n @observable\n currentValue: T = this.props.defaultValue;\n\n constructor(props: IShowcaseDropdownComponentProps<T>) {\n super(props);\n\n makeObservable(this);\n }\n\n render() {\n let optionsTemplate = [undefined].concat(this.props.values).map((value: T | undefined) => {\n const display = value === undefined ? \"NOT SET\" : value.toString().toUpperCase();\n return <option key={display} value={value ? value.toString() : ''}>{display}</option>\n });\n\n return <div style={{fontSize: \"1.6rem\", width: \"250px\"}}>\n <Label htmlFor={this.props.fieldName}>{this.props.caption}</Label>\n <Select\n name={this.props.fieldName}\n id={this.props.fieldName}\n value={this.props.defaultValue as any}\n onChange={(e) => {\n this.currentValue = e.target.options[e.target.selectedIndex].value as any;\n this.props.onChanged(this.props.fieldName, this.currentValue);\n }}\n width=\"100%\"\n >\n {optionsTemplate}\n </Select>\n </div>;\n }\n}\n","import React, {PropsWithChildren} from \"react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport { observer } from \"mobx-react\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport styled from \"styled-components\"\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { IModalDialogHandler, ShowModalOptions } from \"../../../services/dialog/dialog.service.interface\";\nimport { Check } from \"@sparkware/app-utils\";\nimport { ShowcaseDropdownComponent } from \"../showcase-dropdown.component\";\nimport { TextInputBox } from \"../../../basic-ui-components/form/textinput.box\";\nimport { TextareaBox } from \"../../../basic-ui-components/form/textarea.box\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\nimport {ShowcaseConfigurationBox} from \"../boxes/showcase-configuration/showcase-configuration.box\";\nimport {DialogTextBox} from \"../../modal-dialog/boxes/text/dialog-text.box\";\nimport {ModalDialogActionsComponent} from \"../../modal-dialog/modal-dialog-actions.component\";\n\nconst Label = styled.label`\n display: block;\n font-size: 1.6rem;\n`;\n\nconst showEditBox = (options: {\n fieldName: keyof ShowModalOptions;\n caption: string;\n value: string;\n onValueChanged: (fieldName: string, value: string) => void\n}) => {\n return <div>\n <Label htmlFor={options.fieldName}>{options.caption}</Label>\n <TextInputBox\n style={{fontSize: \"1.6rem\", width: \"100%\"}}\n type=\"text\" name={options.fieldName} id={options.fieldName} value={options.value}\n onChange={(ev) => {\n options.onValueChanged(options.fieldName, ev.target.value);\n }}\n />\n </div>;\n}\n\nconst showTextAreaBox = (options: {\n fieldName: string;\n caption: string;\n value: string;\n onValueChanged: (fieldName: string, value: string) => void\n}) => {\n return <div>\n <Label htmlFor={options.fieldName}>{options.caption}</Label>\n <TextareaBox\n style={{fontSize: \"1.6rem\", width: \"100%\"}}\n rows={4}\n name={options.fieldName} id={options.fieldName} value={options.value}\n onChange={(ev) => {\n options.onValueChanged(options.fieldName, ev.target.value);\n }}\n />\n </div>;\n}\n\nconst showBooleanDropDownBox = (options: {\n fieldName: keyof ShowModalOptions;\n caption: string;\n onValueChanged: (fieldName: string, value: boolean) => void,\n defaultValue?: boolean\n}) => {\n return <ShowcaseDropdownComponent\n caption={options.caption}\n fieldName={options.fieldName}\n values={[\"true\", \"false\"]}\n onChanged={(fieldName, value) => {\n options.onValueChanged(fieldName, value === \"\" ? undefined : value === \"true\");\n }}\n defaultValue={options.defaultValue? options.defaultValue.toString() : undefined}\n />\n}\n\n@observer\nexport class PopoupsShowcase extends OrbitComponent {\n @observable.ref\n private _contentText = `Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit,\nsed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\nUt enim ad minim veniam,\nquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`;\n\n @observable.ref\n private _popupOptions: ShowModalOptions = {\n title: \"Default title\"\n };\n\n private _dialogHandler: IModalDialogHandler;\n\n constructor(props: PropsWithChildren) {\n super(props);\n\n makeObservable(this);\n }\n\n @action.bound\n _onUpdateFieldNameValue(fieldName: keyof ShowModalOptions, value: any) {\n if (Check.isUndefined(value)) {\n delete this._popupOptions[fieldName];\n return;\n }\n\n this._popupOptions[fieldName] = value as never;\n }\n\n @action.bound\n _onUpdateContentValue(fieldName: string, value: any) {\n this._contentText = value;\n }\n\n render() {\n return <ShowcaseContentContainerBox>\n <ShowcaseConfigurationBox>\n {showEditBox({\n fieldName: \"title\",\n caption: \"Title text\",\n value: this._popupOptions.title,\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showTextAreaBox({\n fieldName: \"\",\n caption: \"Content text\",\n value: this._contentText,\n onValueChanged: this._onUpdateContentValue\n }\n )}\n\n <Label htmlFor=\"shopPopupJSON\">Resulting popup options:</Label>\n <br/>\n <TextareaBox\n style={{color: \"yellow\", width: \"100%\"}}\n rows={10}\n name=\"shopPopupJSON\" id=\"shopPopupJSON\" value={JSON.stringify(this._popupOptions, undefined, 2)}\n disabled\n />\n </ShowcaseConfigurationBox>\n\n <ShowcaseConfigurationBox>\n {showBooleanDropDownBox({\n fieldName: \"hideCloseButton\",\n caption: \"Hide close button\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"hideBorders\",\n caption: \"Hide borders\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"showOpenAndCloseAnimation\",\n caption: \"Show hide and close animation\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"forceTransparentBackground\",\n caption: \"Force transparent background\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"forceTransparentContentBackground\",\n caption: \"Force transparent content background\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"hideDialogHeader\",\n caption: \"Hide dialog header\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"forceCentralization\",\n caption: \"Force centralization\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"disableFullscreenMobile\",\n caption: \"Disable fullscreen on mobile\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"mobileCenterHeader\",\n caption: \"Mobile center header\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"isHighPriority\",\n caption: \"Is high priority\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"shouldBeClosedOnlyByUser\",\n caption: \"Should be closed only by the user\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n {showBooleanDropDownBox({\n fieldName: \"forceFullscreenTablet\",\n caption: \"Force fullscreen on tablet\",\n onValueChanged: this._onUpdateFieldNameValue\n }\n )}\n </ShowcaseConfigurationBox>\n\n <div style={{flexBasis: \"100%\"}}>\n <Button\n preset=\"primary\"\n onClick={() => {\n const popupBody = <div>\n <DialogTextBox>\n {this._contentText}\n </DialogTextBox>\n <ModalDialogActionsComponent\n primaryAction={{\n text: \"CLOSE ME\",\n onClick: () => {\n //make sure that there is a way for user to close popup\n this._dialogHandler?.close();\n }\n }}\n secondaryAction={{\n text: \"CLOSE ME\",\n onClick: () => {\n //make sure that there is a way for user to close popup\n this._dialogHandler?.close();\n }\n }}\n linkAction={{\n text: \"I don't want this dialog\",\n onClick: () => {\n //make sure that there is a way for user to close popup\n this._dialogHandler?.close();\n }\n }}\n margin=\"3rem auto 0\"\n />\n </div>;\n\n const options: ShowModalOptions = {\n ...this._popupOptions, onClosed: () => {\n this._dialogHandler = null;\n }\n };\n\n this._dialogHandler = this.services.dialog.showModal(() => popupBody, options);\n }}>\n SHOW POPUP!\n </Button>\n </div>\n </ShowcaseContentContainerBox>\n }\n }","import React, {PropsWithChildren} from \"react\";\nimport { observer } from \"mobx-react\";\nimport { observable, runInAction, makeObservable } from \"mobx\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport {ThemeDefaultIcons} from '../../../themes/defaults/icons-registry';\nimport { Label } from \"../boxes/label\";\nimport {Select} from \"../../../basic-ui-components/form/select.component\";\nimport {ShowcaseContentContainerBox} from \"../boxes/showcase-content-container/showcase-content-container.box\";\n\nenum AvailableSizes {\n Default = \"default\",\n Rem2 = \"2rem\",\n Rem4 = \"4rem\",\n Rem6 = \"6rem\",\n Rem12 = \"12rem\"\n}\n\n@observer\nexport class IconsShowcase extends OrbitComponent {\n @observable.ref\n private color: string = \"#fff\";\n\n @observable.ref\n private size = AvailableSizes.Default;\n\n constructor(props: PropsWithChildren) {\n\n super(props);\n\n makeObservable(this);\n }\n\n componentDidMount() {\n super.componentDidMount();\n runInAction(() => {\n this.color = this.services.theme.currentTheme.colors.brandSecondary;\n })\n }\n\n private getIconSizeProps(inputSize: AvailableSizes) {\n switch (inputSize) {\n case AvailableSizes.Rem2:\n return 2;\n case AvailableSizes.Rem4:\n return 4;\n case AvailableSizes.Rem6:\n return 6;\n case AvailableSizes.Rem12:\n return 12;\n default:\n return undefined;\n }\n }\n\n render() {\n return <>\n <ShowcaseContentContainerBox style={{alignItems: \"center\", marginBlockEnd: \"2rem\"}}>\n <div>\n <input\n type=\"radio\" name=\"icons_color\" id=\"color_brandSecondary\"\n value={this.services.theme.currentTheme.colors.brandSecondary}\n checked={this.color === this.services.theme.currentTheme.colors.brandSecondary}\n onChange={() => {\n runInAction(() => {\n this.color = this.services.theme.currentTheme.colors.brandSecondary\n })\n }}\n />\n <Label htmlFor={\"color_brandSecondary\"}>brandSecondary</Label>\n </div>\n <div>\n <input\n type=\"radio\" name=\"icons_color\" id=\"color_brandPrimary\"\n value={this.services.theme.currentTheme.colors.brandPrimary}\n checked={this.color === this.services.theme.currentTheme.colors.brandPrimary}\n onChange={() => {\n runInAction(() => {\n this.color = this.services.theme.currentTheme.colors.brandPrimary\n })\n }}\n />\n <Label htmlFor={\"color_brandPrimary\"}>brandPrimary</Label>\n </div>\n <div>\n <Select id=\"icon_size\" value={this.size} onChange={(e) => {\n runInAction(() => {\n this.size = e.target.options[e.target.selectedIndex].value as AvailableSizes;\n });\n }}>\n {[AvailableSizes.Rem2, AvailableSizes.Default, AvailableSizes.Rem4, AvailableSizes.Rem6, AvailableSizes.Rem12].map(size => {\n return <option key={size} value={size}>{size}</option>\n })}\n </Select>\n </div>\n </ShowcaseContentContainerBox>\n <div style={{display: \"flex\", color: this.color, flexWrap: \"wrap\"}}>\n {Object.keys(ThemeDefaultIcons).map(key => {\n let specialProps: any = {};\n if (key === \"twoCharsIcon\") {\n specialProps = {text: \"test\"};\n }\n if (key === \"locationIcon\") {\n specialProps = {animated: true};\n }\n let TheIcon = this.services.theme.currentTheme.icons[key];\n return <TheIcon\n key={key}\n size={this.getIconSizeProps(this.size)}\n className={\"showcase-\" + key}\n sizeIsHeight\n {...specialProps}\n />;\n })}\n </div>\n </>;\n }\n}\n","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport styled from \"styled-components\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { IMediaQueries } from \"../../../services/media-query/media-queries.interface\";\n\nconst MQBox = styled.div<{mq: keyof IMediaQueries}>`\n display: inline-block;\n width: 200px;\n margin: 4px 8px 4px 0;\n padding: 5px 0;\n text-align: center;\n font-size: 1.6rem;\n color: ${({theme}) => theme.colors.text};\n border: 2px solid #777;\n border-radius: 4px;\n background-color: black;\n text-decoration: line-through;\n background-color: red;\n\n @media ${({theme, mq}) => theme.mediaQuery[mq]} {\n text-decoration: none;\n background-color: green;\n\n &:hover {\n background-color: darkgreen;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: 45%;\n }\n`;\n\nexport const MediaQueryShowcase = observer(class MediaQueryShowcase extends OrbitComponent {\n\n render() {\n return <>\n <div>\n <MQBox mq=\"pointer\">\n pointer\n </MQBox>\n <MQBox mq=\"pointerFine\">\n pointer: fine\n </MQBox>\n <MQBox mq=\"pointerCoarse\">\n pointer: coarse\n </MQBox>\n <MQBox mq=\"pointerNone\">\n pointer: none\n </MQBox>\n </div>\n <div>\n <MQBox mq=\"anyPointer\">\n any-pointer\n </MQBox>\n <MQBox mq=\"anyPointerFine\">\n any-pointer: fine\n </MQBox>\n <MQBox mq=\"anyPointerCoarse\">\n any-pointer: coarse\n </MQBox>\n <MQBox mq=\"anyPointerNone\">\n any-pointer: none\n </MQBox>\n </div>\n <div>\n <MQBox mq=\"hover\">\n hover: hover\n </MQBox>\n <MQBox mq=\"hoverNone\">\n hover: none\n </MQBox>\n </div>\n <div>\n <MQBox mq=\"anyHover\">\n any-hover: hover\n </MQBox>\n <MQBox mq=\"anyHoverNone\">\n any-hover: none\n </MQBox>\n </div>\n </>;\n }\n});\n","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport styled from \"styled-components\"\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport Device from \"../../../../sdk/src/utils/device/device\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\nconst Label = styled.span`\n color: ${({theme}) => theme.colors.brandPrimary};\n`;\nconst Value = styled.span`\n color: ${({theme}) => theme.colors.brandSecondary};\n`;\n\ninterface ClientHintsShowcaseProps extends ComponentServicesPick<'clientDevice'> {\n \n}\n\nconst ComponentBody = observer(class ClientHintsShowcase extends OrbitComponent<ClientHintsShowcaseProps> {\n private renderUserAgentString() {\n return <div style={{padding: \"5px 0\"}}>\n <div>USER AGENT</div>\n <div>\n <span style={{paddingRight: 20}}><Label>.navigator.userAgent</Label> (string) \"<Value>{window.navigator.userAgent}</Value>\"</span>\n </div>\n </div>;\n }\n private renderClientHints() {\n if (!this.props.clientDevice.detected.clientHintsAvailable) {\n return <div style={{padding: \"5px\"}}>CLIENT HINTS NOT AVAILABLE</div>;\n }\n return <>\n <div style={{padding: \"5px\"}}> Data taken from <Label>services.clientDevice.detected</Label></div>\n <div style={{padding: \"5px 0\"}}>\n <div>DEVICE</div>\n <div>\n <span style={{paddingRight: 20}}><Label>.model</Label> (string) \"<Value>{this.props.clientDevice.detected.model}</Value>\"</span>\n <span style={{paddingRight: 20}}><Label>.architecture</Label> (string) \"<Value>{this.props.clientDevice.detected.architecture}</Value>\"</span>\n </div>\n </div>\n\n <div style={{padding: \"5px 0\"}}>\n <div>OS:</div>\n <div>\n <span style={{paddingRight: 20}}><Label>.platform</Label> (string) \"<Value>{this.props.clientDevice.detected.platform}</Value>\"</span>\n <span style={{paddingRight: 20}}><Label>.platformVersion</Label> (string) \"<Value>{this.props.clientDevice.detected.platformVersion}</Value>\"</span>\n <span><Label>.bitness</Label> (string) \"<Value>{this.props.clientDevice.detected.bitness}</Value>\"</span>\n </div>\n </div>\n\n <div style={{padding: \"5px 0\"}}>\n <div>MOBILE FLAG:</div>\n <div><Label>.mobile</Label> (boolean) <Value>{this.props.clientDevice.detected.mobile === true ? \"true\" : (this.props.clientDevice.detected.mobile === false ? \"false\" : \"undefined\")}</Value></div>\n </div>\n\n <div style={{padding: \"5px 0\"}}>\n <div>BROWSER:</div>\n <div><Label>.brands</Label> (Array<{ brand: string; version: string; }>)\n <div>(array showing the hierarchy of the browser. For example \"Not A Brand\" > \"Chromium\" > \"Chrome\")</div>\n {this.props.clientDevice.detected.brands.map((brand, i) => {\n return <div key={i}><Value>{JSON.stringify(brand)}</Value></div>;\n })}</div>\n <div><Label>.uaFullVersion</Label> (browser version, user agent full version): \"<Value>{this.props.clientDevice.detected.uaFullVersion}</Value>\"</div>\n </div>\n </>;\n }\n private renderDeviceDetectionData() {\n return <>\n <div style={{padding: \"5px\"}}> Data taken from <Label>Device</Label></div>\n <div style={{padding: \"5px 0\"}}>\n <div>OS:</div>\n <div>\n <span style={{paddingRight: 20}}><Label>.os.name</Label> (string) \"<Value>{Device.os.name}</Value>\"</span>\n <span><Label>.os.version</Label> (string) \"<Value>{Device.os.version}</Value>\"</span>\n </div>\n </div>\n <div style={{padding: \"5px 0\"}}>\n <div>BROWSER:</div>\n <div>\n <span style={{paddingRight: 20}}><Label>.browser.name</Label> (string) \"<Value>{Device.browser.name}</Value>\"</span>\n <span><Label>.browser.version</Label> (string) \"<Value>{Device.browser.version}</Value>\"</span>\n </div>\n </div>\n <div style={{padding: \"5px 0\"}}>\n <div>VIEWPORT:</div>\n <div>\n <span style={{paddingRight: 20}}><Value>{Device.viewport.width}</Value> x <Value>{Device.viewport.height}</Value></span>\n </div>\n </div>\n </>;\n }\n render() {\n return <div style={{fontSize: 16}}>\n { this.renderUserAgentString() }\n { this.renderClientHints() }\n { this.renderDeviceDetectionData() }\n </div>;\n }\n});\n\nexport const ClientHintsShowcase = withServices(ComponentBody, ['clientDevice']);","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ShowcaseWrapperBox = styledBox(\"ShowcaseWrapperBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ShowcaseLabelBox = styledBox(\"ShowcaseLabelBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ShowcaseContentWrapperBox = styledBox(\"ShowcaseContentWrapperBox\");\n","import {useState} from \"react\";\nimport {ILaboratoryShowcase} from \"./laboratory-showcase.inteface\";\nimport {ShowcaseWrapperBox} from \"./boxes/showcase-wrapper/showcase-wrapper.box\";\nimport {ShowcaseLabelBox} from \"./boxes/showcase-label/showcase-label.box\";\nimport {ShowcaseContentWrapperBox} from \"./boxes/showcase-content-wrapper/showcase-content-wrapper.box\";\nimport {CollapseIndicatorBox} from \"../../basic-components/collapse-indicator/collapse-indicator.box\";\n\nexport const LaboratoryShowcaseContainerComponent = (showcase: ILaboratoryShowcase) => {\n const [isOpen, setIsOpen] = useState(false)\n\n const toggleIsOpen = () => {\n setIsOpen(!isOpen)\n }\n\n return (showcase.showcaseDisabled\n ? null\n : <ShowcaseWrapperBox>\n <input type=\"checkbox\" id={showcase.name} name=\"showcase-selector\" onClick={toggleIsOpen} />\n <ShowcaseLabelBox htmlFor={showcase.name}>{showcase.title}</ShowcaseLabelBox>\n <CollapseIndicatorBox isOpen={isOpen} />\n <ShowcaseContentWrapperBox isOpen={isOpen}>{showcase.renderer}</ShowcaseContentWrapperBox>\n </ShowcaseWrapperBox>)\n}","import {observer} from \"mobx-react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {DialogButtonClickHandleResultEnum} from \"../../../services/dialog/dialog.service.interface\";\n\nexport const SimpleMessageDialogShowcase: React.FC = observer(() => {\n const services = useServices();\n const LoremIpsum = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam egestas felis eu enim imperdiet, ut dapibus lectus pellentesque. Morbi vulputate, turpis eu malesuada porta, neque ipsum semper purus, sed tempor neque tortor at mi. Donec eu accumsan nulla, eget suscipit urna. Cras egestas dolor non nisi pellentesque vehicula. Aliquam mattis bibendum nibh ut laoreet. Suspendisse justo enim, porttitor non pharetra id, interdum eget ex. Maecenas aliquet lacinia commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.Nulla vitae libero malesuada sapien finibus commodo et iaculis velit. Proin ultricies tristique sem, dapibus porta augue bibendum non. Morbi molestie lacinia enim. Phasellus quis est ac leo vulputate molestie. Praesent dictum ipsum in lacinia facilisis. Donec ut urna at ligula hendrerit lobortis eget ut leo. Fusce molestie molestie tortor id bibendum. Nulla hendrerit ipsum at interdum iaculis. Aliquam fermentum pretium lectus nec pharetra. Aliquam ligula nunc, sodales eu felis eu, rhoncus maximus justo. Curabitur tempus ex id lectus malesuada sodales id vitae telluDonec interdum, augue ut egestas scelerisque, magna justo eleifend dui, malesuada hendrerit lorem dui at lorem. Donec pulvinar ante quis arcu aliquam tempus. Nullam et diam accumsan ligula commodo dapibus. Mauris pretium ultrices quam sit amet tincidunt. Proin nisi risus, facilisis sed dui id, rutrum dapibus arcu. Nunc ornare tortor et euismod convallis. Ut sed lobortis velit, tempor lacinia ligula. Vestibulum sollicitudin eros vitae dolor condimentum convallis.Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut egestas justo sed tortor blandit sagittis quis ac diam. Quisque pulvinar interdum velit. Etiam id metus nec enim pretium suscipit vel nec purus. Donec fringilla vestibulum nisl, id scelerisque risus blandit eget. Vestibulum id pulvinar arcu. Quisque a erat id augue ullamcorper accumsan eu eget enim.Donec pellentesque vitae tellus ut elementum. Sed nec efficitur urna, quis tincidunt tellus. Pellentesque tempus tempor libero, ut pretium massa dictum in. Cras eu eros nec nulla consequat auctor sit amet non urna. Sed in mauris non nunc rhoncus iaculis. Aliquam erat volutpat. Sed varius tortor eget purus condimentum consectetur. Nunc elit risus, molestie ut fermentum quis, convallis et nisl. Nullam nec varius nulla, ut semper enim. Nam tincidunt nibh velit, nec ultrices leo eleifend id. Donec lobortis turpis arcu, vitae fringilla purus varius in. Nulla facilisi. Aenean consectetur fermentum arcu, ac placerat purus posuere mattis. Donec eros erat, ultricies ut leo eget, pharetra vehicula elit.'\n return (\n <div style={{flexBasis: \"100%\"}}>\n <Button\n preset=\"primary\"\n onClick={() => {\n const WarningIcon = services.theme.currentTheme.icons.warningSignIcon;\n services.dialog.showSimpleTextModal({\n title: services.translation.translate(\"LICENSE_STATUS\"),\n text: LoremIpsum, \n showEmptyTitle: true,\n icon: <WarningIcon style={{display: \"inline\"}} size={5.6} />,\n disableFullscreenMobile: true,\n buttons: [\n {\n text: services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n }}\n >\n SHOW POPUP!\n </Button>\n </div>)\n})\n\n","import React, {useCallback} from \"react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {DialogButtonClickHandleResultEnum} from \"../../../services/dialog/dialog.service.interface\";\nimport {FlexContainerBox} from \"../../../themes/architecture/css-helpers/flex\";\nimport {AddFundsDialogComponent} from \"../../regulation-specific/italy/add-funds/add-funds-dialog.component\";\n\nexport const AddFundsDialogShowcaseComponent: React.FC = () => {\n const services = useServices();\n const _openFundsDialog = useCallback(() => {\n services.dialog.showModal(dialogHandler => (<AddFundsDialogComponent\n dialogHandler={dialogHandler}\n onAddFunds={(number) => {\n console.log(number)\n }}\n maxLimitInCents={() => 45678}\n minLimitInCents={() => 100}\n />), {\n title: services.translation.translate('GAME_LIMIT_TITLE'),\n forceCentralization: true,\n mobileCenterHeader: true,\n disableFullscreenMobile: true,\n onClosedByXButton: () => {},\n isHighPriority: true,\n });\n }, [services.dialog, services.translation]);\n\n const _openLimitsReachedDialog = useCallback(() => {\n services.dialog.showSimpleTextModal({\n iconSvg: services.theme.currentTheme.icons.warningSignIcon,\n title: services.translation.translate(\"ADD_FUNDS_BLOCKED_TITLE\"),\n text: services.translation.translate(\"ADD_FUNDS_BLOCKED_MESSAGE\"),\n buttons: [\n {\n text: services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async () => {\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n }\n ]\n });\n }, [services.dialog, services.theme, services.translation]);\n\n return (<FlexContainerBox>\n <Button preset={\"primary\"} onClick={_openFundsDialog}>Italy Add Funds Popup</Button>\n <Button preset={\"secondary\"} onClick={_openLimitsReachedDialog}>Italy Limit Reached Popup</Button>\n </FlexContainerBox>);\n}","import {observer} from \"mobx-react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\n\nexport const JackpotBetDialogShowcase: React.FC = observer(() => {\n const services = useServices();\n return (\n <div style={{flexBasis: \"100%\"}}>\n <Button\n preset=\"primary\"\n onClick={() => { services.jackpotBet.showOptInJackpotBetDialog();}}\n >\n SHOW JACKPOTBET!\n </Button>\n </div>)\n})\n\n","import {LaboratoryShowcasePageWrapperBox} from \"./boxes/page-wrapper/laboratory-showcase-page-wrapper.box\";\nimport {ILaboratoryShowcase} from \"./laboratory-showcase.inteface\";\nimport {GeoLocationBrowserApiTestComponent} from \"./showcases/geo-location-browser-api-test.component\";\nimport {ToasterShowcase} from \"./showcases/toaster-showcase.component\";\nimport {GamblingSessionSetupDialogShowcase} from \"./showcases/gambling-session-setup-dialog-showcase.component\";\nimport {OnboardingTourShowcase} from \"./showcases/onboarding-tour-showcase.component\";\nimport {BurnoutAnimationShowcase} from \"./showcases/burnout-animation-showcase.component\";\nimport {PixiSpineShowcase} from \"./showcases/pixi-spine-showcase.component\";\nimport {ThemeSwitcher} from \"./theme-switcher.component\";\nimport {ButtonsShowcase} from \"./showcases/buttons-showcase.component\";\nimport {TypographyColorAndPresetShowcase} from \"./showcases/typography-color-and-preset-showcase.component\";\nimport {PopoupsShowcase} from \"./showcases/popups-showcase.component\";\nimport {IconsShowcase} from \"./showcases/icons-showcase.component\";\nimport {MediaQueryShowcase} from \"./showcases/media-query-showcase.component\";\nimport {ClientHintsShowcase} from \"./showcases/client-hints-showcase.component\";\nimport {LaboratoryShowcaseContainerComponent} from \"./laboratory-showcase-container.component\";\nimport {SimpleMessageDialogShowcase} from \"./showcases/simple-message-dialog-showcase.component\";\nimport {AddFundsDialogShowcaseComponent} from \"./showcases/add-funds-dialog-showcase.component\";\nimport {JackpotBetDialogShowcase} from \"./showcases/jackpot-bet-dialog-showcase.component\";\n\nconst SHOWCASES: ILaboratoryShowcase[] = [\n {\n name: \"italyAddFunds\",\n title: \"Italy Add Funds Popup UI\",\n renderer: <AddFundsDialogShowcaseComponent />\n }, \n {\n name: \"geoLocation\",\n title: \"Geo Location Browser Api Test\",\n renderer: <GeoLocationBrowserApiTestComponent />\n }, {\n name: \"toaster\",\n title: \"Toasters\",\n renderer: <ToasterShowcase />\n }, {\n name: \"gamblingSession\",\n title: \"Gambling Session Setup Dialog\",\n renderer: <GamblingSessionSetupDialogShowcase />\n }, {\n name: \"onboardingTour\",\n title: \"Onboarding Tour\",\n renderer: <OnboardingTourShowcase />\n }, {\n name: \"burnoutAnimation\",\n title: \"Burnout Animation\",\n renderer: <BurnoutAnimationShowcase />\n }, {\n name: \"pixiSpine\",\n title: \"Pixi Spine\",\n renderer: <PixiSpineShowcase />\n }, {\n name: \"buttons\",\n title: \"Buttons\",\n renderer: <ThemeSwitcher><ButtonsShowcase /></ThemeSwitcher>\n }, {\n name: \"typographyColorAndPreset\",\n title: \"Typography Color And Preset\",\n renderer: <ThemeSwitcher><TypographyColorAndPresetShowcase /></ThemeSwitcher>,\n showcaseDisabled: true\n }, {\n name: \"popups\",\n title: \"Popups\",\n renderer: <PopoupsShowcase />\n },{\n name: \"simpleDialogs\",\n title: \"Simple dialogs\",\n renderer: <SimpleMessageDialogShowcase />\n },\n {\n name: \"icons\",\n title: \"Icons\",\n renderer: <IconsShowcase />\n }, {\n name: \"mediaQuery\",\n title: \"Media Query\",\n renderer: <MediaQueryShowcase />\n }, {\n name: \"clientHints\",\n title: \"Client Hints\",\n renderer: <ClientHintsShowcase />\n },\n {\n name: \"jackpotBet\",\n title: \"Jackpot Bet\",\n renderer: <JackpotBetDialogShowcase />\n },\n];\n\nexport function LaboratoryShowcase() {\n return (\n <LaboratoryShowcasePageWrapperBox>\n {SHOWCASES.map(showcase => LaboratoryShowcaseContainerComponent(showcase))}\n </LaboratoryShowcasePageWrapperBox>\n );\n}\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoBox = styledBox(\"VideoBox\");\n","import {styledBox} from '../../../../themes/architecture/styled-box';\n\nexport const VideoContainerBox = styledBox(\"VideoContainerBox\");\n","import React, {useCallback, useEffect, useRef} from 'react';\nimport {observer} from 'mobx-react';\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {IVideoPlayer} from '../../../../services/video-live-stream/video-players/video-player.interface';\nimport {VideoBox} from './boxes/video.box';\nimport {VideoPlayButtonBox} from \"../../../video-player/play-button/boxes/video-play-button.box\";\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport {VideoContainerBox} from '../video-container/video-container.box';\nimport {IVideoPlayingService} from \"../../../../services/video-live-stream/video-playing.service.interface\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {IReactionDisposer, reaction} from \"mobx\";\nimport classNames from 'classnames';\n\ninterface VideoComponentProps {\n className?: string;\n gameInfo: GameInfo;\n muted: boolean;\n onError?: (hasError: boolean, retryFn?: (() => void) | undefined) => void;\n onLoading?: (isLoading: boolean) => void;\n onWatchTimeLimitReached?: (watchTimeLimitReached: boolean) => void;\n isInCenterStage: boolean;\n inViewport: boolean;\n display: boolean;\n videoPlayingService: IVideoPlayingService;\n isLastGameType?: boolean;\n loop?: boolean;\n isVideoOnDemand?: boolean;\n}\n\nexport const VideoComponent: React.FC<VideoComponentProps> = observer((props) => {\n const services = useServices();\n const videoPlayerRef = useRef<IVideoPlayer | null>(null);\n const videoElementRef = useRef<HTMLVideoElement | null>(null);\n const reactionsRef = useRef<IReactionDisposer[]>([]);\n const isAppVisible = props.videoPlayingService.isAppVisible;\n\n const createVideoPlayer = useCallback(() => {\n if(videoElementRef.current) {\n return props.videoPlayingService.getVideoPlayer(props.gameInfo, videoElementRef.current, props.isLastGameType);\n } else {\n return null;\n }\n\n }, [props.gameInfo, props.isLastGameType, props.videoPlayingService]);\n\n useEffect(() => {\n\n const videoPlayer = createVideoPlayer();\n videoPlayerRef.current = videoPlayer;\n\n const videoElement = videoElementRef.current;\n\n return () => {\n videoPlayer?.destroy();\n try {\n if(videoElement) {\n videoElement.poster = \"\";\n videoElement.src = \"\";\n videoElement.load();\n }\n videoElementRef.current = null;\n }\n catch (err){\n services.logger.error('VideoComponent - Failed to cleanup video element', err);\n }\n }\n\n }, [createVideoPlayer, services.logger]);\n\n\n const loadVideo = useCallback(() => {\n videoPlayerRef.current?.load();\n }, []);\n\n const playVideo = useCallback(() => {\n videoPlayerRef.current?.play();\n }, []);\n\n const pauseVideo = useCallback(() => {\n videoPlayerRef.current?.pause();\n }, []);\n\n const retryPlay = useCallback(() => {\n videoPlayerRef.current?.destroy();\n videoPlayerRef.current = createVideoPlayer();\n playVideo();\n }, [createVideoPlayer, playVideo]);\n\n\n\n useEffect(() => {\n\n const reactions = reactionsRef.current;\n\n reactions.push(reaction(() => videoPlayerRef.current?.hasError, (hasError) => {\n props.onError(hasError, hasError ? retryPlay : undefined);\n }));\n\n reactions.push(reaction(() => videoPlayerRef.current?.isLoading, (isLoading) => {\n props.onLoading(isLoading);\n }));\n\n reactions.push(reaction(() => videoPlayerRef.current?.watchTimeLimitReached, (watchTimeLimitReached) => {\n props.onWatchTimeLimitReached(watchTimeLimitReached);\n }));\n\n return () => {\n reactions.forEach(r => r());\n reactionsRef.current = [];\n }\n\n }, [props, retryPlay]);\n\n useEffect(() => {\n\n if(isAppVisible) {\n if (props.isInCenterStage && props.inViewport) {\n playVideo();\n } else if (props.isVideoOnDemand) {\n loadVideo();\n } else {\n pauseVideo();\n }\n } else {\n pauseVideo();\n }\n });\n\n const handlePlayVideoClick = () => {\n if (isAppVisible && props.isInCenterStage && props.inViewport) {\n playVideo();\n videoPlayerRef.current?.logUIAction('info', 'VideoPlayClick');\n services.analytics.sendAnalytics(props.videoPlayingService.gaCategory, \"AUTOPLAY\", \"VIDEO_PLAY_CLICK\", props.gameInfo.gameType, true);\n }\n }\n\n\n const renderPlayerControls = () => {\n if(videoPlayerRef.current?.autoplayAllowed || !videoElementRef.current?.paused) {\n return null;\n } else {\n return (<VideoPlayButtonBox onClick={handlePlayVideoClick} />)\n }\n }\n\n return (\n <VideoContainerBox\n className={classNames(CyClass('cy-live-video-item'), props.className)}\n videoIsLoading={Boolean(videoPlayerRef.current?.isLoading)}\n videoWatchTimeLimitReached={Boolean(videoPlayerRef.current?.watchTimeLimitReached)}\n displayVideo={props.display}\n >\n <VideoBox\n ref={videoElementRef}\n playsInline={true}\n muted={props.muted}\n loop={props.loop}\n />\n {renderPlayerControls()}\n </VideoContainerBox>\n )\n\n});\n\n","import styled, {css} from \"styled-components\";\nimport { hexToRgba } from \"../../../../themes/hex-to-rgba\";\n\ninterface ILiveStreamingOverlayItemDefaultBoxProps {\n capsule?: boolean;\n transparent?: boolean;\n}\n\nexport const VideoOverlayItemDefaultBox = styled.div<ILiveStreamingOverlayItemDefaultBoxProps>`\n display: flex;\n background: ${({theme, transparent}) => !transparent && hexToRgba(theme.colors.background.toString(), 0.7)};\n\n\n ${({capsule}) => !capsule ? css`\n padding: 2px;\n border-radius: 4px;\n ` : css`\n padding: 0 0.25rem;\n border-radius: 2rem;\n `}\n`;\n","import {VideoOverlayItemDefaultBox} from \"./video-overlay-item.default.box\";\n\nexport const VideoOverlayItemBox = VideoOverlayItemDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoTileFooterDefaultBox = styled.div`\n display: flex;\n position: relative;\n padding: 2rem 1rem;\n align-items: center;\n justify-content: space-between;\n background: ${({theme}) => theme.colors.backgroundLight.toString()};\n\n @media ${({theme}) => theme.mediaQuery.xlAndAbove } {\n padding: 3rem 2.5rem;\n }\n\n &::after {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 1px;\n left: 0;\n bottom: 0;\n background: linear-gradient(90deg, transparent 10%, rgba(255, 255, 255, 0.85), transparent 90%);\n }\n`;\n","import {VideoTileFooterDefaultBox} from \"./video-tile-footer-default.box\";\n\nexport const VideoTileFooterBox = VideoTileFooterDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoTileDefaultBox = styled.div`\n position: relative;\n width: 100%;\n overflow: hidden;\n box-shadow: ${props => props.theme.colors.boxBorderDark} 0px 10px 8px -6px;\n\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n border-radius: 12px;\n border: 0.5px solid ${props => props.theme.components.newLiveCasino.colors.gridItem.wrapperBorder};\n }\n\n @media ${({theme}) => `${theme.mediaQuery.lAndBelow} and ${theme.mediaQuery.landscape}`} {\n padding: 0 12.5vw;\n }\n\n @media ${({theme}) => `${theme.mediaQuery.mAndBelow} and ${theme.mediaQuery.landscape}`} {\n padding: 0 25vw;\n }\n`;\n","import {VideoTileDefaultBox} from \"./video-tile-default.box\";\n\nexport const VideoTileBox = VideoTileDefaultBox;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const SectionTitleBox = styledBox(\"SectionTitleBox\");","import styled from 'styled-components';\n\n//check-div\nexport const CellValueBoolDefaultBox = styled.div`\n width: 13px;\n height: 13px;\n float: right;\n background-image: url(\"${props => props.theme.assets.images.check_png.toString()}\");\n background-repeat: no-repeat;\n`;","import {CellValueBoolDefaultBox} from './cell-value-bool.default.box';\n\nexport const CellValueBoolBox = CellValueBoolDefaultBox;","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const CellValueTextBox = styledBox(\"CellValueTextBox\");\n","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const CellTitleBox = styledBox(\"CellTitleBox\");","import React from 'react';\nimport {OrbitComponent} from '../../../../../base-components/orbit-component/orbit-component';\nimport {PreviewFeatureType} from '../../../../../../services/game-preview-features-selector/preview-features/game-preview-feature.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {CellValueBoolBox} from './boxes/cell-value-bool/cell-value-bool.box';\nimport {CellValueTextBox} from './boxes/cell-value-text/cell-value-text.box';\nimport {CellTitleBox} from './boxes/cell-title/cell-title.box';\n\nexport interface GameFeaturePreviewCellComponentProps{\n title: string;\n type: PreviewFeatureType,\n value: any\n}\n\nexport class GameFeatureCellComponent extends OrbitComponent<GameFeaturePreviewCellComponentProps> {\n\n private _renderNoInfo() {\n return (<CellValueTextBox className='cy-cell-no-info'>-</CellValueTextBox>);\n }\n private _renderCheckbox() {\n if(this.props.value) {\n return (<CellValueBoolBox className='cy-cell-value-bool'/>);\n }\n\n return this._renderNoInfo();\n }\n\n private _renderDescription() {\n if(Check.isEmpty(this.props.value)) {\n return this._renderNoInfo();\n }\n\n return (<CellValueTextBox className='cy-cell-value-text'>{this.props.value}</CellValueTextBox>);\n }\n\n\n private _renderValue() {\n if(this.props.type === PreviewFeatureType.check) {\n return this._renderCheckbox();\n }\n\n return this._renderDescription();\n }\n\n render() {\n return (\n <td>\n <CellTitleBox className='cy-cell-title'>{this.props.title}</CellTitleBox>\n {this._renderValue()}\n </td>\n );\n\n }\n}\n","import {styledBox} from \"../../../../../../../../themes/architecture/styled-box\";\n\nexport const TableContainerBox = styledBox(\"TableContainerBox\");","import React from 'react';\nimport {OrbitComponent} from '../../../../../base-components/orbit-component/orbit-component';\nimport {PreviewFeatureEvaluationResult} from '../../../../../../services/game-preview-features-selector/preview-features/game-preview-feature.interface';\nimport {splitArrayToChunks} from '../../../../../../../utils/array-helper';\nimport {GameFeatureCellComponent} from '../cell/game-feature-cell.component';\nimport {TableContainerBox} from './boxes/table-container/table-container.box';\n\n\nexport interface GameFeaturesPreviewTableComponentProps {\n features: PreviewFeatureEvaluationResult[]\n}\n\nexport class GameFeaturesTableComponent extends OrbitComponent<GameFeaturesPreviewTableComponentProps> {\n\n private _renderGameInfoTableRow(cells: PreviewFeatureEvaluationResult[]) {\n let key = cells.reduce((acc, curr) => curr.title + '_' + acc, '');\n return (\n <tr key={key}>\n {cells.map(cell => (<GameFeatureCellComponent key={cell.title} title={cell.title} type={cell.type} value={cell.value}></GameFeatureCellComponent>))}\n </tr>\n );\n }\n\n render() {\n if(this.props.features.length === 0) {\n return null;\n }\n\n let chunks = splitArrayToChunks(this.props.features, 2);\n\n return (\n <TableContainerBox className='cy-game-preview-features-table' cellSpacing={0}>\n <tbody>\n {chunks.map(chunk => this._renderGameInfoTableRow(chunk))}\n </tbody>\n </TableContainerBox>\n );\n }\n}\n","import styled from 'styled-components';\n\n//game-info-jackpot game-preview\nexport const GameJackpotPreviewDefaultBox = styled.div`\n width: 100%;\n`;","import {GameJackpotPreviewDefaultBox} from './game-jackpot-preview.default.box';\n\nexport const GameJackpotPreviewBox = GameJackpotPreviewDefaultBox;","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const JackpotAmountPreviewBox = styledBox(\"JackpotAmountPreviewBox\");","import React from 'react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {SectionTitleBox} from '../../boxes/section-title/section-title.box';\nimport {GameJackpotPreviewBox} from './boxes/game-jackpot-preview/game-jackpot-preview.box';\nimport {JackpotAmountPreviewBox} from './boxes/jackpot-amount-preview/jackpot-amount-preview.box';\n\nexport interface GameJackpotPreviewComponentProps {\n gameType: number;\n}\n\nexport class GameJackpotPreviewComponent extends OrbitComponent<GameJackpotPreviewComponentProps> {\n\n render() {\n //className={'game-info-jackpot game-preview'}\n return (\n <GameJackpotPreviewBox className='cy-game-jackpot-preview'>\n <SectionTitleBox>\n {this.services.translation.translate('GAME_JACKPOT')}\n </SectionTitleBox>\n <JackpotAmountPreviewBox gameType={this.props.gameType}/>\n </GameJackpotPreviewBox>\n )\n }\n}\n\n\n","import styled from 'styled-components';\nimport {styledByDevice} from '../../../../themes/architecture/styled-by-device';\n\nconst DefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n`;\n\nconst PcBox = DefaultBox;\nconst MobileBox = styled(DefaultBox)`\n padding: 0 10px 20px;\n`;\n\nexport const GamePreviewInfoContainerDefaultBox = styledByDevice(PcBox, MobileBox);","import {GamePreviewInfoContainerDefaultBox} from './game-preview-info-container.default.box';\n\nexport const GamePreviewInfoContainerBox = GamePreviewInfoContainerDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {GameFeaturesTableComponent} from './features/table/game-features-table.component';\nimport {GameJackpotPreviewComponent} from './jackpot/game-jackpot-preview.component';\nimport {Check} from \"@sparkware/app-utils\";\nimport {GameInfo} from '../../../../services/games/game-info';\nimport {GamePreviewInfoContainerBox} from './game-preview-info-container.box';\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n//import {RelatedGamesComponent} from './related-games/related-games.component';\n\ninterface GameInfoWrapperComponentProps extends ComponentServicesPick<'gamePreviewFeaturesSelector'> {\n gameInfo: GameInfo;\n gameTitleComponent: React.ReactNode | null;\n}\nclass ComponentBody extends OrbitComponent<GameInfoWrapperComponentProps> {\n\n private _renderJackpotPreview(gameInfo: GameInfo) {\n\n if(!gameInfo.hasJackpot){\n return null;\n }\n\n let generalSettings = this.services.configuration.data.generalSettings;\n\n let shouldRenderJackpotPreview = generalSettings?.gamesPreviewConfig?.shouldDisplayJackpot;\n\n if (Check.isNullOrUndefined(shouldRenderJackpotPreview) || shouldRenderJackpotPreview)\n {\n return <GameJackpotPreviewComponent gameType={gameInfo.gameType}/>;\n }\n\n return null;\n }\n\n render() {\n let gameInfo = this.props.gameInfo;\n\n return (\n <GamePreviewInfoContainerBox className='cy-game-preview-info-container'>\n {this.props.gameTitleComponent}\n <GameFeaturesTableComponent features={this.props.gamePreviewFeaturesSelector.getPreviewFeatures(gameInfo)} />\n {this._renderJackpotPreview(gameInfo)}\n {/*<RelatedGamesComponent />*/}\n </GamePreviewInfoContainerBox>\n );\n }\n}\n\nexport const GamePreviewInfoContainerComponent = withServices(ComponentBody, ['gamePreviewFeaturesSelector'])","import styled from 'styled-components';\nimport {styledByDevice} from '../../../../../../../themes/architecture/styled-by-device';\nimport { Image } from '../../../../../../raw-components/image/image';\n\n\n//.info-image-wrapper + info-image\n\nconst DefaultBox = styled(Image)`\n display: block;\n width: 100%;\n height: 100%;\n margin-bottom: 1.1rem;\n`;\n\nconst PcBox = styled(DefaultBox)`\n width: 375px;\n height: 121px;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n width: 285px;\n height: 92px;\n }\n`;\n\nconst MobileBox = styled(DefaultBox)`\n opacity: 0.7;\n`;\n\nexport const StripeImageDefaultBox = styledByDevice(PcBox, MobileBox);","import {StripeImageDefaultBox} from './stripe-image.default.box';\n\nexport const StripeImageBox = StripeImageDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {StripeImageBox} from './boxes/stripe-image/stripe-image.box';\n\nexport interface GameImagePreviewComponentProps {\n gameInfo: GameInfo;\n}\n\nexport const GameStripeImageComponent = observer(\n class GameStripeImageComponent extends OrbitComponent<GameImagePreviewComponentProps> {\n\n render() {\n let gameInfo = this.props.gameInfo;\n let imageSrc = gameInfo.stripImage ? gameInfo.stripImage : gameInfo.stripeImageFallback;\n // I noticed that sometimes react doesn't re render this component even if a different gameInfo is provided.\n // Setting key={gameInfo.gameType} seems to overcome this issue\n return (\n <StripeImageBox key={gameInfo.gameType} className='cy-game-strip-image' src={imageSrc} fallbackSrc={gameInfo.stripeImageFallback}/>\n );\n }\n }\n);\n\n","import styled from 'styled-components';\n\n//.info-video-wrapper + info-movie\nexport const TrailerDefaultBox = styled.div`\n width: 100%;\n height: 100%;\n margin-bottom: 1.1rem;\n`;","import {TrailerDefaultBox} from './trailer.default.box';\n\nexport const TrailerBox = TrailerDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {GameStripeImageComponent} from '../stripe-image/game-stripe-image.component';\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {TrailerBox} from './boxes/trailer/trailer.box';\n\nexport interface GameTrailerPreviewComponentProps {\n gameInfo: GameInfo;\n}\nexport const GameTrailerComponent = observer(\n class GameTrailerComponent extends OrbitComponent<GameTrailerPreviewComponentProps> {\n\n render() {\n let gameInfo = this.props.gameInfo;\n\n //we used here key={gameInfo.gameType} to make react re render the component when a different gameInfo is provided\n return (\n <TrailerBox key={gameInfo.gameType}>\n <video width={'100%'} poster={gameInfo.stripImage} autoPlay={true} loop={true}>\n {/*Video source hardcoded for testing purposes*/}\n <source src={'/assets/videos/harmonium.mp4'} type={\"video/mp4\"}/>\n {/*Fallback Image (the browser does not support video)*/}\n <GameStripeImageComponent gameInfo={this.props.gameInfo}/>\n </video>\n </TrailerBox>\n );\n }\n }\n);\n","import * as React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {GameStripeImageComponent} from './stripe-image/game-stripe-image.component';\nimport {GameTrailerComponent} from './trailer/game-trailer.component';\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../../services/games/game-info';\n\nexport interface GameImageContainerComponentProps {\n gameInfo: GameInfo;\n}\n\nexport const TrailerOrStripeImageComponent = observer(\n class TrailerOrStripeImageComponent extends OrbitComponent<GameImageContainerComponentProps> {\n render() {\n if (this.props.gameInfo.hasVideoTrailer) {\n return (\n <GameTrailerComponent gameInfo={this.props.gameInfo}/>\n );\n } else {\n return (\n <GameStripeImageComponent gameInfo={this.props.gameInfo}/>\n );\n }\n }\n }\n);\n","import styled from \"styled-components\";\nimport {LIVE_CASINO_PAGE_WRAPPER} from \"../../../../themes/css-global-classes\";\n\nexport const LobbyHeaderTitleContainerBox = styled.div`\n display: flex;\n width: 100%;\n min-height: 4rem;\n padding-left: 4rem;\n padding-right: 4rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-left: 1rem;\n padding-right: 1rem;\n margin-bottom: 1rem;\n }\n\n .${LIVE_CASINO_PAGE_WRAPPER} & {\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin-bottom: 0;\n }\n }\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const LobbyHeaderTitleBox = styledBox(\"LobbyHeaderTitleBox\");\n","import styled from \"styled-components\";\nimport {Color} from \"../../../../common/utils/color-util\";\nimport {GAMING_HISTORY_PAGE, SESSION_HISTORY_PAGE, STICKY, GAMES_OPEN_SESSIONS_PAGE} from \"../../../themes/css-global-classes\";\nimport {HEADER_Z_INDEX} from \"../../header/header-consts\";\n\nexport const LobbyHeaderDefaultBox = styled.div<{stickOffset: number;}>`\n display: flex;\n flex-direction: column;\n align-items: center;\n background-color: ${props => props.theme.colors.background};\n position: sticky;\n top: ${({stickOffset}) => (stickOffset - 1)+ \"px\"};\n z-index: ${HEADER_Z_INDEX - 1};\n\n padding-top: 1.4rem;\n padding-bottom: 1.4rem;\n transition: background-color 0.2s linear;\n\n &.${STICKY} {\n background-color: ${props => Color.fromHex(props.theme.colors.backgroundDark, 0.85).hexa()};\n @supports (backdrop-filter: blur(6px)) {\n background-color: ${props => Color.fromHex(props.theme.colors.backgroundDark, 0.5).hexa()};\n backdrop-filter: blur(10px);\n }\n }\n\n .${GAMING_HISTORY_PAGE} &, .${SESSION_HISTORY_PAGE} &, .${GAMES_OPEN_SESSIONS_PAGE} &{\n padding-bottom: 0;\n }\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 1rem;\n padding-bottom: 0;\n &.${STICKY}{\n width:100%;\n }\n }\n`;\n","import styled from \"styled-components\";\nimport {LobbyHeaderDefaultBox} from \"./lobby-header.default.box\";\nimport {STICKY} from \"../../../themes/css-global-classes\";\nimport {Color} from \"../../../../common/utils/color-util\";\nimport {baseColors} from \"../../../themes/definitions/si/base-colors\";\n\nexport const LobbyHeaderSiBox = styled(LobbyHeaderDefaultBox)`\n &.${STICKY} {\n background-color: ${Color.fromHex(baseColors.gray023, 0.85).hexa()};\n @supports (backdrop-filter: blur(6px)) {\n background-color: ${Color.fromHex(baseColors.gray023, 0.5).hexa()};\n backdrop-filter: blur(10px);\n }\n }\n`","import styled from \"styled-components\";\nimport {LobbyHeaderDefaultBox} from \"./lobby-header.default.box\";\nimport {baseColors} from \"../../../themes/definitions/mrgreen/base-colors\";\nimport {Color} from \"../../../../common/utils/color-util\";\nimport {STICKY} from \"../../../themes/css-global-classes\";\n\nexport const LobbyHeaderMrGreenBox = styled(LobbyHeaderDefaultBox)`\n background-color: ${baseColors.gray033};\n &.${STICKY} {\n background-color: ${Color.fromHex(baseColors.gray033, 0.85).hexa()};\n @supports (backdrop-filter: blur(6px)) {\n background-color: ${Color.fromHex(baseColors.black, 0.5).hexa()};\n backdrop-filter: blur(10px);\n }\n }\n`;\n","import styled from \"styled-components\";\nimport {LobbyHeaderDefaultBox} from \"./lobby-header.default.box\";\nexport const LobbyHeaderWsopBox = styled(LobbyHeaderDefaultBox)`\n background-color: #00000099;\n`","import {LobbyHeaderDefaultBox} from \"./lobby-header.default.box\";\nimport {styledByTheme} from \"../../../themes/architecture/styled-by-theme\";\nimport {LobbyHeaderSiBox} from \"./lobby-header.si.box\";\nimport {LobbyHeaderMrGreenBox} from \"./lobby-header.mrgreen.box\";\nimport {LobbyHeaderWsopBox} from \"./lobby-header.wsop.box\";\n\nexport const LobbyHeaderBox = styledByTheme(LobbyHeaderDefaultBox)\n .forSI(LobbyHeaderSiBox)\n .forMrGreen(LobbyHeaderMrGreenBox)\n .forWsop(LobbyHeaderWsopBox)\n .apply();\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const LobbyHeaderLineBox = styledBox(\"LobbyHeaderLineBox\");\n","import styled from \"styled-components\";\n\nexport const LobbyHeaderButtonsContainerBox = styled.div`\n display: flex;\n self-justify: flex-end;\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const LobbyHeaderButtonsBox = styledBox('LobbyHeaderButtonsBox');","import React, {PropsWithChildren} from 'react';\nimport {observer} from 'mobx-react';\nimport {IStickyHandler} from '../sticky-handler/sticky-handler.interface';\nimport {LobbyHeaderBox} from \"./boxes/lobby-header.box\";\nimport {LobbyHeaderTitleBox} from \"./boxes/title/lobby-header-title.box\";\nimport {LobbyHeaderLineBox} from \"./boxes/line/lobby-header-line.box\";\nimport classNames from 'classnames';\nimport {STICKY} from \"../../themes/css-global-classes\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {LobbyHeaderButtonsContainerBox} from \"./boxes/buttons/lobby-header-buttons-container.box\";\nimport {LobbyHeaderButtonsBox} from \"./boxes/buttons/lobby-header-button.box\";\nimport {ThemeProvider} from \"styled-components\";\nimport { LobbyHeaderTitleContainerBox } from './boxes/container/lobby-header-title.container.box';\nimport {Nullable} from \"../../../common/types/nullable-types\";\nimport {\n IFilterIndicatorRenderingOptions,\n FilterIndicatorRenderingLocation\n} from \"../../services/games-filter/games-filter.service.interface\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface LobbyHeaderComponentProps extends ComponentServicesPick<'header'>, PropsWithChildren{\n stickyHandler: IStickyHandler;\n title: string;\n showSearchIcon: boolean;\n arenaFiltersRenderingOptions?: Nullable<IFilterIndicatorRenderingOptions>;\n}\n\nconst ComponentBody: React.FC<LobbyHeaderComponentProps> = observer((props) => {\n const services = useServices();\n\n const handleSearchClick = async () => {\n await (await services.gameSearch).openSearchResult();\n }\n\n const _renderFiltersIndicatorUnderTheTitle = () => {\n const renderingOptions = services.gamesFilter.renderFiltersIndicator();\n\n if(renderingOptions?.location !== FilterIndicatorRenderingLocation.BelowArenaTitle) {\n return null;\n }\n\n return renderingOptions.reactElement;\n }\n\n const _renderFiltersIndicatorNextToTheTitle = () => {\n const renderingOptions = services.gamesFilter.renderFiltersIndicator();\n\n if(renderingOptions?.location !== FilterIndicatorRenderingLocation.NextToArenaTitle) {\n return null;\n }\n\n return renderingOptions.reactElement;\n }\n\n const _onCaptureElement = (el: HTMLElement | null) => {\n props.stickyHandler.updateElement(el);\n }\n\n const isMobile = services.device.isMobile;\n const lobbyHeaderClasses = classNames('cy-lobby-header', {\n [STICKY]: props.stickyHandler.isSticky\n });\n\n const SearchIcon = services.theme.currentTheme.icons.searchIcon;\n //console.log('HeaderHeight: ' + services.header.headerHeight);\n return (\n <ThemeProvider theme={services.theme.currentTheme}>\n <LobbyHeaderBox className={lobbyHeaderClasses} stickOffset={props.header.headerHeight} ref={_onCaptureElement}>\n {props.title &&\n <LobbyHeaderTitleContainerBox>\n <LobbyHeaderTitleBox className={CyClass(\"cy-lobby-header-title\")}>\n <span style={{flex: \"0 0 auto\"}}>\n {services.translation.translate(props.title)}\n </span>\n {_renderFiltersIndicatorNextToTheTitle()}\n </LobbyHeaderTitleBox>\n { isMobile &&\n <LobbyHeaderButtonsContainerBox>\n {\n props.showSearchIcon &&\n <LobbyHeaderButtonsBox>\n <div onClick={handleSearchClick}>\n <SearchIcon size={1.6}/>\n </div>\n </LobbyHeaderButtonsBox>\n }\n {services.gamesFilter.renderMobileFiltersIndicator()}\n </LobbyHeaderButtonsContainerBox>\n }\n </LobbyHeaderTitleContainerBox>\n }\n {_renderFiltersIndicatorUnderTheTitle()}\n <LobbyHeaderLineBox/>\n </LobbyHeaderBox>\n </ThemeProvider>\n );\n})\n\nexport const LobbyHeaderComponent = withServices(ComponentBody, ['header']);","import { Props as IDotLottiePlayerProps } from '@dotlottie/react-player';\nimport React from 'react';\nimport { OrbitSuspense } from '../base-components/orbit-suspense/orbit-suspense';\n\nconst Player = React.lazy(\n () => import('@dotlottie/react-player').then(({ DotLottiePlayer }) => ({ default: DotLottiePlayer }))\n);\n\nexport const DotLottiePlayer = React.forwardRef((props: IDotLottiePlayerProps, ref: any) => {\n return <OrbitSuspense>\n <Player\n ref={ref}\n {...props}\n />\n </OrbitSuspense>;\n});\n","import React from 'react';\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\n\nexport const LoyaltyBarWrapperComponent = observer(class LoyaltyBarWrapperComponent extends OrbitComponent {\n componentDidMount() {\n super.componentDidMount();\n this.services.loyaltyIndicator.init();\n }\n\n render() {\n return (\n <div id=\"rl-loyalty-indication\" />\n );\n }\n});","import styled from 'styled-components';\nimport {XCloseButtonBox} from \"../../../../basic-ui-components/x-close-button/x-close-button.box\";\nexport const DialogCloseButtonDefaultBox = styled(XCloseButtonBox)`\n width: ${props => props.theme.components.modalDialog.closeButtonSize};\n height: ${props => props.theme.components.modalDialog.closeButtonSize};\n`;","import {DialogCloseButtonDefaultBox} from './dialog-close-button.default.box';\n\nexport const DialogCloseButtonBox = DialogCloseButtonDefaultBox;","import styled, { css } from 'styled-components';\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const dialogTextMixin = css`\n color: ${({theme}) => theme.colors.textLight};\n font-size: 1.5rem;\n text-align: center;\n .dialog-form & {\n text-align: left\n }\n`;\n\nexport const dialogHighlightedTextMixin = css`\n color: ${props => props.theme.colors.brandPrimary};\n font-size: 1.5rem;\n text-align: center;\n .dialog-form & {\n text-align: left\n }\n`;\n\nexport const DialogTextBox = styled.div`\n margin-top: 2rem;\n ${dialogTextMixin}\n @media ${({theme}) => theme.mediaQuery.veryLowHeight} {\n ${CssRule.For.landscape.build()} & {\n margin-top: 0.5rem;\n }\n }\n`;\n\nexport const DialogBoldTextBox = styled(DialogTextBox)`\n font-weight: bold;\n ${dialogTextMixin}\n`;\n\nexport const DialogHighlightedTextBox = styled.div`\n margin-top: 2rem;\n ${dialogHighlightedTextMixin}\n @media ${({theme}) => theme.mediaQuery.veryLowHeight} {\n ${CssRule.For.landscape.build()} & {\n margin-top: 0.5rem;\n }\n }\n`;\n\nexport const ListDialogTextBox = styled.div`\n color: ${({theme}) => theme.colors.textContrast};\n margin-top: 4rem;\n font-size: 1.5rem;\n text-align: left;\n`;\n\nexport const DialogDimmedTextBox = styled.div` \n margin-top: 2rem;\n font-size: 1.4rem;\n text-align: center;\n color: ${({theme}) => theme.colors.textMiddleDark};\n `;","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const DialogTitleBox = styledBox(\"DialogTitleBox\");\n","export const APPLY_BORDERS = 'apply-borders';\nexport const APPLY_ANIMATION = 'apply-animation';\nexport const MOBILE_CENTERED_HEADER = 'mobile-centered-header';\nexport const FORCE_TRANSPARENT_BACKGROUND = 'force-transparent-background';\nexport const FORCE_TRANSPARENT_CONTENT_BACKGROUND = 'force-transparent-content-background';\nexport const DISABLE_FULLSCREEN_MOBILE = 'disable-fullscreen-mobile';\nexport const FORCE_CENTRALIZATION = 'force-centralization';\nexport const APPLY_MAX_HEIGHT = 'apply-max-height';\nexport const FORCE_FULLSCREEN_TABLET = 'force-fullscreen-tablet';\nexport const APPLY_MODAL_CLOSING_ANIMATION = 'apply-modal-closing-animation';","import styled from 'styled-components';\nimport {flexColumnContainerMixin, flexRowReverseContainerMixin} from '../../../../themes/architecture/css-helpers/flex';\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const ButtonsWrapperDefaultBox = styled.div<{buttonsOnSeparateLines?: boolean; margin?: string}>`\n width: 100%;\n margin: ${({margin}) => margin ? margin : \"5rem auto 0\" };\n ${({buttonsOnSeparateLines}) => buttonsOnSeparateLines ? flexColumnContainerMixin : flexRowReverseContainerMixin }\n\n @media ${({theme}) => theme.mediaQuery.veryLowHeight} {\n ${CssRule.For.mobile.landscape.build()} & {\n margin: 2rem auto 0;\n }\n }\n`;\n","import styled from 'styled-components';\nimport {flexGrowItem, flexFixedSizeItem} from '../../../../themes/architecture/css-helpers/flex';\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const ButtonWrapperBox = styled.div<{buttonsOnSeparateLines?: boolean; flexBasis?: string;}>`\n ${flexGrowItem}\n width: ${({buttonsOnSeparateLines}) => buttonsOnSeparateLines ? \"100%\" : \"40%\" };\n`;\n\nexport const ButtonSpacerDefaultBox = styled.div`\n ${flexFixedSizeItem}\n width: 1rem;\n height: 1.5rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n ${CssRule.For.landscape.build()} & {\n height: 0.5rem;\n }\n }\n`;\n","import styled from 'styled-components';\n\nexport const LinkActionBox = styled.button`\n margin: 0 auto;\n\n -webkit-appearance: none;\n -moz-appearance: none;\n background: transparent;\n padding: 5px 0px 0px;\n border: 0;\n border-radius: 0;\n line-height: 1;\n ${({theme}) => theme.font.presets.body};\n font-size: 1.6rem;\n font-weight: 700;\n color: ${({theme}) => theme.colors.brandPrimary};\n text-decoration: underline;\n cursor: pointer;\n`;\n","import styled from 'styled-components';\nimport {CssRule} from '../../../../themes/architecture/css-helpers/css-rule';\n\nexport const LinkWrapperDefaultBox = styled.div`\n width: 100%;\n margin-top: 3rem;\n text-align: center;\n \n @media ${({theme}) => theme.mediaQuery.veryLowHeight} {\n ${CssRule.For.mobile.landscape.build()} & {\n margin: 1.5rem auto 0;\n }\n }\n`;\n","import React from 'react';\nimport { Button } from '../../basic-ui-components/button/base/button.component';\nimport {ButtonsWrapperDefaultBox} from './boxes/actions/buttons-wrapper.box';\nimport {ButtonWrapperBox, ButtonSpacerDefaultBox} from './boxes/actions/button-wrapper.box';\nimport {LinkActionBox} from './boxes/actions/link-action.box';\nimport {LinkWrapperDefaultBox} from './boxes/actions/link-wrapper.box';\nimport classNames from \"classnames\";\nimport {CyClass} from \"../../../common/cy-classes\";\n\n\nexport interface IModalDialogActionProps {\n text: string;\n onClick(): void;\n className?: string;\n disabled?:boolean;\n}\nexport interface IModalDialogButtonsComponentProps {\n buttonsOnSeparateLines?: boolean;\n primaryAction: IModalDialogActionProps;\n secondaryAction?: IModalDialogActionProps & {useWarningPreset?: boolean};\n linkAction?: IModalDialogActionProps;\n className?: string;\n margin?: string;\n}\n\nexport class ModalDialogActionsComponent extends React.Component<IModalDialogButtonsComponentProps> {\n render() {\n return <>\n <ButtonsWrapperDefaultBox\n buttonsOnSeparateLines={this.props.buttonsOnSeparateLines}\n className={classNames(this.props.className, CyClass('cy-modal-dialog-buttons-area'))}\n margin={this.props.margin}\n >\n <ButtonWrapperBox buttonsOnSeparateLines={this.props.buttonsOnSeparateLines}>\n <Button\n onClick={this.props.primaryAction.onClick}\n disabled = {this.props.primaryAction.disabled}\n preset=\"primary\"\n fullWidth={this.props.buttonsOnSeparateLines}\n sizeVariant='s'\n className={this.props.primaryAction.className}\n margin={(this.props.buttonsOnSeparateLines || !this.props.secondaryAction) ? \"0 auto 0 auto\" : undefined}\n >\n {this.props.primaryAction.text}\n </Button>\n </ButtonWrapperBox>\n {this.props.secondaryAction ? <><ButtonSpacerDefaultBox /><ButtonWrapperBox buttonsOnSeparateLines={this.props.buttonsOnSeparateLines}>\n <Button\n onClick={this.props.secondaryAction.onClick}\n disabled = {this.props.secondaryAction.disabled}\n preset={this.props.secondaryAction.useWarningPreset ? \"warning\" : \"flatStroked\"}\n fullWidth={this.props.buttonsOnSeparateLines}\n sizeVariant='s'\n className={this.props.secondaryAction.className}\n margin={this.props.buttonsOnSeparateLines ? \"0 auto 0 auto\" : \"0 0 0 auto\"}\n stroke='heavy'\n >\n {this.props.secondaryAction.text}\n </Button>\n </ButtonWrapperBox></> : null}\n </ButtonsWrapperDefaultBox>\n {this.props.linkAction ? <LinkWrapperDefaultBox>\n <LinkActionBox\n onClick={this.props.linkAction.onClick}\n disabled = {this.props.linkAction.disabled}\n className={this.props.linkAction.className}\n >{this.props.linkAction.text}</LinkActionBox>\n </LinkWrapperDefaultBox> : null}\n </>;\n }\n}\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const DialogHeaderBox = styledBox(\"DialogHeaderBox\");\n","import styled from \"styled-components\";\n\nexport const HeaderButtonsContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-end;\n position: absolute;\n right: 10px;\n \n`","import React, {PropsWithChildren} from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {DialogHeaderBox} from '../../boxes/header/dialog-header.box';\nimport {DialogTitleBox} from '../../boxes/title/dialog-title.box';\nimport {DialogCloseButtonBox} from '../../boxes/close-button/dialog-close-button.box';\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {HeaderButtonsContainerBox} from \"../../boxes/header-buttons/header-buttons-container.box\";\n\nexport interface ModalDialogHeaderComponentProps extends PropsWithChildren {\n title?: string;\n hideCloseButton?: boolean;\n onCloseButtonClick?: () => void;\n className?: string;\n renderExtraButtons?: () => React.ReactElement;\n}\nexport class DialogHeaderComponent extends OrbitComponent<ModalDialogHeaderComponentProps> {\n\n private _renderTitle() {\n if(!this.props.title) {\n return null;\n }\n\n return (<DialogTitleBox className='dialog-header-title'>\n {this.props.title}\n </DialogTitleBox>);\n }\n\n private _renderCloseButton() {\n if(this.props.hideCloseButton) {\n return null;\n }\n\n return (\n <DialogCloseButtonBox className={CyClass('cy-modal-dialog-x-close-button')} onClick={this.props.onCloseButtonClick}/>\n );\n }\n\n private _renderExtraButtons() {\n if(this.props.renderExtraButtons) {\n return this.props.renderExtraButtons();\n }\n return null;\n }\n\n private _renderButtons() {\n if(this.props.hideCloseButton && !this.props.renderExtraButtons) {\n return null;\n }\n return (\n <HeaderButtonsContainerBox>\n {this._renderExtraButtons()}\n {this._renderCloseButton()}\n </HeaderButtonsContainerBox>\n )\n\n }\n\n private _renderContent() {\n if (this.props.children) {\n return this.props.children\n }\n\n return (\n <>\n {this._renderTitle()}\n {this._renderButtons()}\n </>\n );\n }\n\n render() {\n if(!this.props.title && this.props.hideCloseButton && !this.props.children) {\n return null;\n }\n\n let height: number | null = null;\n\n return (\n <DialogHeaderBox className={`${CyClass('cy-modal-dialog-header')} ${this.props.className? this.props.className : ''}`} height={height}>\n {this._renderContent()}\n </DialogHeaderBox>\n )\n }\n\n}","import React, {PropsWithChildren} from \"react\";\nimport styled from \"styled-components\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\n\ninterface IAspectRatioBoxProps {\n expectedWidth: number;\n expectedHeight: number;\n}\n\nconst AspectRatioBox = styled.div<IAspectRatioBoxProps>`\n position: relative;\n width: 100%;\n height: 0;\n padding-top: calc(${({expectedWidth, expectedHeight}) => `${expectedHeight} / ${expectedWidth} * 100%`});\n`;\n\ninterface IAspectRatioContentBoxProps {\n isLoading?: boolean;\n useBGColorDuringLoadAnimation?: boolean;\n}\n\nconst AspectRatioContentBox = styled.div<IAspectRatioContentBoxProps>`\n position: absolute;\n display: flex;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n opacity: 0;\n\n ${(props) => props.useBGColorDuringLoadAnimation && props.isLoading && `background-color: ${props.theme.colors.backgroundDark}`};\n\n animation: ${({isLoading}) => isLoading ? \"LoadingAnimation 1.5s linear 3 forwards\" : \"RevealAnimation 0.5s ease-out forwards\"};\n\n @keyframes LoadingAnimation {\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 1\n }\n 100% {\n opacity: 0;\n }\n }\n\n @keyframes RevealAnimation {\n to {\n opacity: 1;\n }\n }\n`;\n\ninterface IAspectRatioContainerComponentProp extends PropsWithChildren {\n width: number;\n height: number;\n isLoading?: boolean;\n useBGColorDuringLoadAnimation?: boolean;\n}\n\nexport class AspectRatioContainerComponent extends OrbitComponent<IAspectRatioContainerComponentProp> {\n render() {\n return (\n <AspectRatioBox expectedWidth={this.props.width} expectedHeight={this.props.height}>\n <AspectRatioContentBox isLoading={this.props.isLoading} useBGColorDuringLoadAnimation={this.props.useBGColorDuringLoadAnimation}>\n {this.props.children}\n </AspectRatioContentBox>\n </AspectRatioBox>\n );\n }\n}\n","import React, {PropsWithChildren} from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {TapHandler} from '../../tap-handler/tap-handler.component';\nimport {Check} from '@sparkware/app-utils';\nimport {AnyStyledComponent} from 'styled-components';\nimport styled from 'styled-components';\n\ninterface LinkProps extends PropsWithChildren {\n box?: AnyStyledComponent;\n id?: string;\n onClick?: (event?: any) => void;\n className?: string;\n href?: string;\n enableTap?: boolean;\n preventDefaultOnClick?: boolean\n target?: string;\n itemProp?: string;\n customProps?: {[key: string]: any};\n}\n\nconst DefaultBox = styled.a`\n color: ${props => props.theme.colors.text};\n`;\n\nexport class Link extends OrbitComponent<LinkProps> {\n\n private _onClick = (event) => {\n\n if (this.services.miniOrbit.isEnabled && this.props.target === \"_blank\") {\n event.preventDefault();\n this.services.miniOrbit.openUrl(this.props.href);\n\n } else if (Check.isNullOrUndefined(this.props.preventDefaultOnClick) || this.props.preventDefaultOnClick) {\n event.preventDefault();\n }\n\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private _getAnchorProps(): any {\n let result: any = {};\n\n if(this.props.id) {\n result.id = this.props.id;\n }\n if(this.props.className) {\n result.className = this.props.className;\n }\n\n if(this.props.href) {\n result.href = this.services.location.buildFullUri(this.props.href || '/').toString();\n }\n\n if(this.props.target) {\n result.target = this.props.target;\n }\n\n if(this.props.itemProp) {\n result.itemProp = this.props.itemProp;\n }\n\n if (this.props.customProps) {\n result.customProps = this.props.customProps;\n }\n\n return result;\n }\n\n private _renderAnchor(anchorRef: any) {\n const Box = this.props.box || DefaultBox;\n return (\n <Box {...this._getAnchorProps()}\n onClick={this._onClick}\n ref={anchorRef}>\n {this.props.children}\n </Box>\n );\n }\n\n render() {\n if (!this.props.enableTap) {\n return this._renderAnchor(null);\n }\n\n let anchorRef: any = React.createRef();\n return (\n <TapHandler enabled={this.props.enableTap} elementRef={anchorRef}>\n {this._renderAnchor(anchorRef)}\n </TapHandler>\n );\n }\n}\n","import styled from \"styled-components\";\nimport {dialogTextMixin} from \"../../../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const RadioInputLabelBox = styled.label`\n padding-left: 15px;\n ${dialogTextMixin}\n`;","import styled from \"styled-components\";\nimport {dialogHighlightedTextMixin} from \"../../../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const AmountSpan = styled.span`\n ${dialogHighlightedTextMixin}\n`\n","import React, {useCallback, useState} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {IModalDialogHandler} from \"../../../../services/dialog/dialog.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {ModalDialogActionsComponent} from \"../../../modal-dialog/modal-dialog-actions.component\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {DialogTextBox} from \"../../../modal-dialog/boxes/text/dialog-text.box\";\nimport {RadioInputBox} from \"../../../../basic-ui-components/form/radioinput.box\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {FlexContainerBox} from \"../../../../themes/architecture/css-helpers/flex\";\nimport {RadioInputLabelBox} from \"./boxes/radio-input.label.box\";\nimport classNames from \"classnames\";\nimport {CurrencyAmountInput} from \"../../../../basic-ui-components/form/currency-input/currency-input.component\";\nimport {AmountSpan} from \"./boxes/amount-span.box\";\n\nenum LimitsRadioButtons {\n DefaultLimit,\n CustomLimit\n}\n\ninterface AddFundsDialogComponentProps {\n dialogHandler: IModalDialogHandler;\n onAddFunds: (amount: number) => void;\n minLimitInCents: () => number;\n maxLimitInCents: () => number;\n minBet?: number;\n analytics?: {\n onAddFunds?: (amountInCents: number, allBalance: boolean) => void;\n onCashierClick?: () => void;\n };\n}\n\nexport const AddFundsDialogComponent: React.FC<AddFundsDialogComponentProps> = observer((props) => {\n const services = useServices();\n const [selectedOption, setSelectedOption] = useState<LimitsRadioButtons>(LimitsRadioButtons.DefaultLimit);\n const [customAmountTextInputValue, setCustomAmountTextInputValue] = useState<string>(\"\");\n const [amountInCents, setAmountInCents] = useState(0);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const _minLimitCents = props.minLimitInCents();\n const _maxLimitCents = props.maxLimitInCents();\n\n // When calling validate right after setAmount in onCustomAmountChange I get stalled values. So I send values as parameters.\n // All other values that I don;t expect to change are left in dependecies array\n const validate = useCallback((_amountInCents, _selectedOption) => {\n let errMsg: string | null = null;\n if (_amountInCents > _maxLimitCents) {\n errMsg = services.translation.translate('GAME_LIMIT_INSUFFICIENT_FUNDS');\n } else if (_selectedOption !== LimitsRadioButtons.DefaultLimit) {\n if (_amountInCents <= 0 ) {\n errMsg = services.translation.translate('GAME_LIMIT_VALUE_ERROR');\n }\n }\n setErrorMessage(errMsg);\n return Check.isNullOrUndefined(errMsg);\n }, [_maxLimitCents, services.translation]);\n\n const onCashierClick = useCallback( () => {\n if (props.analytics && props.analytics.onCashierClick) {\n props.analytics.onCashierClick();\n }\n services.cashier.openDeposit({\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.cashierAction\n }\n })\n }, [services.cashier, props.analytics]);\n\n const onAddFundsClick = () => {\n\n if (!validate(amountInCents, selectedOption)) {\n return;\n }\n\n let amountToAdd = amountInCents;\n if(LimitsRadioButtons.DefaultLimit === selectedOption) {\n amountToAdd = _maxLimitCents;\n }\n\n props.dialogHandler.close();\n if (props.analytics?.onAddFunds) {\n props.analytics.onAddFunds(amountToAdd, LimitsRadioButtons.DefaultLimit === selectedOption);\n }\n props.onAddFunds(amountToAdd);\n }\n\n const onCustomAmountChange = useCallback((targetValue: string) => {\n let value = targetValue === \"\" ? 0 : parseFloat(targetValue);\n if(Check.isNumber(value) && /^\\d+(\\.\\d{1,2})?$/.test(targetValue)) {\n // I am doing math.round after multiplying with 100 because in javascript 10.2 * 100 = 1019.(9)\n value = Math.round(value * 100);\n setAmountInCents(value);\n validate(value, LimitsRadioButtons.CustomLimit);\n } else {\n // set amount 0 because if accidentally presses top up\n setAmountInCents(0);\n setErrorMessage(services.translation.translate('GAME_LIMIT_VALUE_ERROR'));\n }\n setSelectedOption(LimitsRadioButtons.CustomLimit);\n setCustomAmountTextInputValue(targetValue);\n }, [validate, services.translation]);\n\n const onTotalLimitSelected = useCallback(() => {\n const availableBalance = _maxLimitCents;\n setAmountInCents(availableBalance)\n setSelectedOption(LimitsRadioButtons.DefaultLimit);\n setCustomAmountTextInputValue(\"\");\n setErrorMessage(null);\n }, [_maxLimitCents]);\n\n return <div className={classNames('dialog-form', CyClass('cy-modal-content'))}>\n <DialogTextBox>{services.translation.translate('REGULATORY_LIMIT_LABEL')} <AmountSpan>{services.currency.formatMoney(_maxLimitCents, true)}</AmountSpan></DialogTextBox>\n <DialogTextBox>\n <FlexContainerBox alignItems=\"center\">\n <RadioInputBox\n name=\"gameLimit\"\n id=\"gameLimit_totalBalance\"\n value={LimitsRadioButtons.DefaultLimit}\n checked={selectedOption === LimitsRadioButtons.DefaultLimit}\n onChange={onTotalLimitSelected}\n />\n <RadioInputLabelBox as=\"label\" htmlFor=\"gameLimit_totalBalance\">\n {services.translation.translate(\"ADD_FUNDS_TOTAL_BALANCE\")}\n </RadioInputLabelBox>\n </FlexContainerBox>\n </DialogTextBox>\n { _maxLimitCents > _minLimitCents ?\n <DialogTextBox>\n <div>{services.translation.translate(\"ADD_FUNDS_OTHER_AMOUNT\")}</div>\n <div>\n <CurrencyAmountInput\n value={customAmountTextInputValue}\n currencySymbol={services.currency.getCurrencySymbol}\n onChange={onCustomAmountChange}\n cyClass={CyClass('cy-add-funds-amount')}\n errorMessage={errorMessage}\n />\n </div>\n </DialogTextBox>\n : null }\n <ModalDialogActionsComponent\n primaryAction={{\n text: services.translation.translate(\"ADD_FUNDS_TOP_UP\"),\n onClick: onAddFundsClick,\n className: CyClass('cy-add-funds-topup-button')\n }}\n secondaryAction={{\n text: services.translation.translate(\"CASHIER\"),\n onClick: onCashierClick,\n className: CyClass('cy-add-funds-cashier-button')\n }}\n margin=\"3rem auto 0\"\n />\n </div>;\n})","import styled from \"styled-components\";\n\nexport const MinimumGamblingAgeIconDefaultBox = styled.img<{isShownInHeader: boolean, isWide?: boolean}>`\n height: ${props=> props.isWide === true ? \"33px\" : \"27px\"};\n width: ${props => props.isWide === true ? \"96px\" : (props.isShownInHeader === true ? \"35px\" : \"27px\")};\n min-width: ${props => props.isWide === true ? \"96px\" : \"initial\"};\n`","import styled, {css} from \"styled-components\";\n\nexport const MinimumGamblingAgeDefaultBox = styled.div<{isShownInHeader: boolean, disableClick?: boolean}>`\n display: flex;\n flex-direction: row;\n align-items: center;\n \n ${props => !props.disableClick ? css`\n cursor: pointer;\n \n @media ${({theme}) => theme.mediaQuery.hover}{\n &:hover {\n opacity: 0.5;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.hoverNone}{\n &:active {\n opacity: 0.5;\n }\n }\n ` : null}\n`;","import {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {MinimumGamblingAgeDefaultBox} from \"./minimum-gambling-age.default.box\";\n\nexport const MinimumGamblingAgeBox = styledByTheme(MinimumGamblingAgeDefaultBox)\n .apply();","import {MinimumGamblingAgeIconDefaultBox} from \"./minimum-gambling-age-icon.default.box\";\nimport styled from \"styled-components\";\n\nexport const MinimumGamblingAgeIconSiBox = styled(MinimumGamblingAgeIconDefaultBox)`\n height: 40px;\n width: 40px;\n`","import {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\nimport {MinimumGamblingAgeIconDefaultBox} from \"./minimum-gambling-age-icon.default.box\";\nimport {MinimumGamblingAgeIconSiBox} from \"./minimum-gambling-age-icon.si.box\";\n\nexport const MinimumGamblingAgeIconBox = styledByTheme(MinimumGamblingAgeIconDefaultBox).forSI(MinimumGamblingAgeIconSiBox).apply();","import React, {PropsWithChildren} from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {MinimumGamblingAgeBox} from \"./boxes/minimum-gambling-age.box\";\nimport {MinimumGamblingAgeIconBox} from \"./boxes/icon/minimum-gambling-age-icon.box\";\nimport classNames from 'classnames';\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {BlankHorizontalSeparatorBox} from \"../../../basic-components/blank-separator/blank-horizontal-separator.box\";\n\ninterface MinimumGamblingAgeComponentProps extends PropsWithChildren {\n className?: string;\n iconBox?: React.ComponentType;\n isShownInHeader?: boolean;\n}\n\nexport const MinimumGamblingAgeComponent = observer(\n class MinimumGamblingAgeComponent extends OrbitComponent<MinimumGamblingAgeComponentProps> {\n\n private _onClickHandler = async () => {\n if (this.services.configuration.data.header.responsibleIcons?.ageButton?.disableClick) {\n return;\n }\n\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_responsible_gaming_click');\n await this.services.linksNavigation.openResponsibleGaming();\n }\n\n private _getIconType(): string {\n return this.services.configuration.data.header.responsibleIcons?.ageButton?.iconType;\n }\n\n private _getIcon(): string {\n const age = this.services.regulation.current.responsibleGamingAge;\n switch (this._getIconType()) {\n case 'wide':\n return this.services.theme.currentTheme.assets.images.responsible_gambling.age_18plus_wide_png.toString();\n case 'flat':\n if(age === 21) {\n return this.services.theme.currentTheme.assets.images.responsible_gambling.age_21plus_flat_svg.toString();\n } else {\n return this.services.theme.currentTheme.assets.images.responsible_gambling.age_18plus_flat_svg.toString();\n }\n case 'capsule':\n return this.services.theme.currentTheme.assets.images.responsible_gambling.age_18plus_capsule_svg.toString();\n default:\n if(age === 21) {\n return this.services.theme.currentTheme.assets.images.responsible_gambling.age_21plus_round_svg.toString();\n } else {\n return this.services.theme.currentTheme.assets.images.responsible_gambling.age_18plus_round_svg.toString();\n }\n }\n }\n\n render() {\n const url = this._getIcon();\n const IconBox = this.props.iconBox ?? MinimumGamblingAgeIconBox;\n const isShownInHeader = this.props.isShownInHeader ?? false;\n return (\n <MinimumGamblingAgeBox disableClick={this.services.configuration.data.header.responsibleIcons?.ageButton?.disableClick}\n onClick={this._onClickHandler}\n isShownInHeader={isShownInHeader}\n className={classNames(this.props.className, CyClass('cy-open-responsible-gaming-button'))}>\n <IconBox src={url} isShownInHeader={isShownInHeader} isWide={this._getIconType() === \"wide\"}/>\n {this.props.children}\n <BlankHorizontalSeparatorBox multiplier={isShownInHeader ? 0.5 : 1}/>\n </MinimumGamblingAgeBox>\n );\n }\n }\n);","import styled from \"styled-components\";\n\n\nexport const NetherlandsMinimumGamblingAgeLabelBox = styled.div`\n color: ${props => props.theme.colors.textLight};\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {MinimumGamblingAgeComponent} from \"../../minimum-gambling-age.component\";\nimport {\n BlankHorizontalSeparatorBox\n} from \"../../../../../basic-components/blank-separator/blank-horizontal-separator.box\";\nimport {NetherlandsMinimumGamblingAgeLabelBox} from \"./boxes/netherlands-minimum-gambling-age-label.box\";\n\ninterface NetherlandsMinimumGamblingAgeComponentProps {\n isShownInHeader?: boolean;\n}\n\nexport const NetherlandsMinimumGamblingAgeComponent = observer(class NetherlandsMinimumGamblingAgeComponent extends OrbitComponent<NetherlandsMinimumGamblingAgeComponentProps> {\n render() {\n const isShownInHeader = this.props.isShownInHeader ?? false;\n return (\n <MinimumGamblingAgeComponent isShownInHeader={isShownInHeader}>\n <BlankHorizontalSeparatorBox multiplier={0.5}/>\n <NetherlandsMinimumGamblingAgeLabelBox>\n Speel bewust\n </NetherlandsMinimumGamblingAgeLabelBox>\n </MinimumGamblingAgeComponent>\n );\n }\n});","import styled from \"styled-components\";\nimport {MinimumGamblingAgeIconDefaultBox} from \"../../../boxes/icon/minimum-gambling-age-icon.default.box\";\n\nexport const SwedenMinimumGamblingAgeIconBox = styled(MinimumGamblingAgeIconDefaultBox)<{isShownInHeader: boolean}>`\n height: ${props => props.isShownInHeader === true ? \"2.5rem\" : \"23px\"};\n width: ${props => props.isShownInHeader === true ? \"auto\" : \"35px\"};\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {MinimumGamblingAgeComponent} from \"../../minimum-gambling-age.component\";\nimport {SwedenMinimumGamblingAgeIconBox} from \"./boxes/sweden.minimum-gambling-age-icon.box\";\n\ninterface SwedenMinimumGamblingAgeComponentProps {\n isShownInHeader?: boolean;\n}\n\nexport const SwedenMinimumGamblingAgeComponent = observer(class SwedenMinimumGamblingAgeComponent extends OrbitComponent<SwedenMinimumGamblingAgeComponentProps> {\n render() {\n const isShownInHeader = this.props.isShownInHeader ?? false;\n return (\n <MinimumGamblingAgeComponent isShownInHeader={isShownInHeader} iconBox={SwedenMinimumGamblingAgeIconBox}/>\n );\n }\n});","import styled from \"styled-components\";\n\n\nexport const DenmarkResponsibleGamingButtonsBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`","import styled from \"styled-components\";\n\nexport const DenmarkResponsibleGamingButtonBaseBox = styled.button<{imageUrl: string}>`\n background-image: url(\"${props => props.imageUrl}\");\n background-repeat: no-repeat;\n background-size: contain;\n cursor: pointer;\n @media ${({theme}) => theme.mediaQuery.hover}{\n &:hover {\n opacity: 0.5;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.hoverNone}{\n &:active {\n opacity: 0.5;\n }\n }\n\n`","import styled from \"styled-components\";\nimport {DenmarkResponsibleGamingButtonBaseBox} from \"../../boxes/denmark.responsible-gaming-button-base.box\";\n\nexport const DenmarkSafeToPlayButtonBox = styled(DenmarkResponsibleGamingButtonBaseBox)`\n width: 40px;\n height: 40px;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: 25px;\n height: 25px;\n }\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {DenmarkSafeToPlayButtonBox} from \"./boxes/denmark.safe-to-play-button.box\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\nexport const DenmarkSafeToPlayButtonComponent = observer(class DenmarkSafeToPlayButtonComponent extends OrbitComponent {\n private _clickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_dk_doga_icon_click');\n await this.services.linksNavigation.openSafeToPlay();\n }\n render() {\n return (\n <DenmarkSafeToPlayButtonBox imageUrl={this.services.theme.currentTheme.assets.images.regulation_specific.denmark.safe_to_play_png.toString()}\n onClick={this._clickHandler}\n className={CyClass('cy-dk-doga-icon')}/>\n );\n }\n});","import styled from \"styled-components\";\nimport {DenmarkResponsibleGamingButtonBaseBox} from \"../../boxes/denmark.responsible-gaming-button-base.box\";\n\nexport const DenmarkSelfExclusionButtonBox = styled(DenmarkResponsibleGamingButtonBaseBox)`\n width: 50px;\n height: 25px;\n`;\n","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {DenmarkSelfExclusionButtonBox} from \"./boxes/denmark.self-exclusion-button.box\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\nexport const DenmarkSelfExclusionButtonComponent = observer(class DenmarkSelfExclusionButtonComponent extends OrbitComponent {\n private _clickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_dk_stop_spillet_icon_click');\n await this.services.linksNavigation.openSelfExclusion();\n }\n render() {\n return (\n <DenmarkSelfExclusionButtonBox imageUrl={this.services.theme.currentTheme.assets.images.regulation_specific.denmark.self_exclusion_png.toString()}\n onClick={this._clickHandler}\n className={CyClass('cy-dk-stop-spillen-icon')}/>\n )\n }\n});","import styled from \"styled-components\";\nimport {DenmarkResponsibleGamingButtonBaseBox} from \"../../boxes/denmark.responsible-gaming-button-base.box\";\nimport {styledByDevice} from \"../../../../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled(DenmarkResponsibleGamingButtonBaseBox)`\n width: 120px;\n height: 20px;\n`;\n\n\nconst PcBox = DefaultBox;\nconst MobileBox = styled(DefaultBox)`\n width: 90px;\n height: 15px;\n`;\n\nexport const DenmarkSelfTestButtonBox = styledByDevice(PcBox, MobileBox);","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {DenmarkSelfTestButtonBox} from \"./boxes/denmark.self-test-button.box\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\nexport const DenmarkSelfTestButtonComponent = observer(class DenmarkSelfTestButtonComponent extends OrbitComponent {\n private _clickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_dk_rofus_icon_click');\n await this.services.linksNavigation.openSelfTest();\n }\n render() {\n return (\n <DenmarkSelfTestButtonBox imageUrl={this.services.theme.currentTheme.assets.images.regulation_specific.denmark.self_test_png.toString()}\n onClick={this._clickHandler}\n className={CyClass('cy-dk-rofus-icon')}/>\n )\n }\n});","import styled from \"styled-components\";\nimport {DenmarkResponsibleGamingButtonBaseBox} from \"../boxes/denmark.responsible-gaming-button-base.box\";\n\nexport const DenmarkSecondaryResponsibleGamingButtonBox = styled(DenmarkResponsibleGamingButtonBaseBox)`\n width: 72px;\n height: 35px;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: 48px;\n height: 23px;\n }\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {DenmarkSecondaryResponsibleGamingButtonBox} from \"./denmark.secondary-responsible-gaming-button.box\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\nexport const DenmarkSecondaryResponsibleGamingButtonComponent = observer(class DenmarkSafeToPlayButtonComponent extends OrbitComponent {\n private _clickHandler = async () => {\n await this.services.linksNavigation.openSecondaryResponsibleGaming();\n }\n render() {\n return (\n <DenmarkSecondaryResponsibleGamingButtonBox imageUrl={this.services.theme.currentTheme.assets.images.regulation_specific.denmark.responsible_gaming_svg.toString()}\n onClick={this._clickHandler}\n className={CyClass('cy-dk-secondary-rg-icon')}\n />\n );\n }\n});","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {DenmarkResponsibleGamingButtonsBox} from \"./boxes/denmark.responsible-gaming-buttons.box\";\nimport {\n BlankHorizontalSeparatorBox\n} from \"../../../../../basic-components/blank-separator/blank-horizontal-separator.box\";\nimport {DenmarkSafeToPlayButtonComponent} from \"./safe-to-play-button/denmark.safe-to-play-button.component\";\nimport {DenmarkSelfExclusionButtonComponent} from \"./self-exclusion/denmark.self-exclusion-button.component\";\nimport {DenmarkSelfTestButtonComponent} from \"./self-test-button/denmark.self-test-button.component\";\nimport {\n DenmarkSecondaryResponsibleGamingButtonComponent\n} from \"./responsible-gaming-button/denmark.secondary-responsible-gaming-button.component\";\n\nexport const DenmarkResponsibleGamingButtonsComponent = observer(class DenmarkResponsibleGamingButtonsComponent extends OrbitComponent<{hideSelfExclusionLinks?: boolean}> {\n\n private _renderSelfExclusionButtons() {\n if (this.props.hideSelfExclusionLinks) {\n return null;\n }\n\n return (\n <>\n <BlankHorizontalSeparatorBox multiplier={1}/>\n <DenmarkSelfTestButtonComponent/>\n <BlankHorizontalSeparatorBox multiplier={1}/>\n <DenmarkSelfExclusionButtonComponent/>\n </>\n );\n }\n\n private _renderSecondaryResponsibleGamblingIcon() {\n return (\n <>\n <DenmarkSecondaryResponsibleGamingButtonComponent/>\n <BlankHorizontalSeparatorBox multiplier={1}/>\n </>\n );\n }\n\n render() {\n return (\n <DenmarkResponsibleGamingButtonsBox>\n {this._renderSecondaryResponsibleGamblingIcon()}\n <DenmarkSafeToPlayButtonComponent/>\n {this._renderSelfExclusionButtons()}\n </DenmarkResponsibleGamingButtonsBox>\n );\n }\n});","import styled from \"styled-components\";\n\n\nexport const PanicButtonSVGIconClassName = \"panic-button-svg-icon\";\n\nexport const PanicButtonBox = styled.div`\n width: 15.7rem;\n height: 2.7rem;\n\n .${PanicButtonSVGIconClassName} {\n width: 100%;\n height: auto;\n }\n \n`;\n","import styled from \"styled-components\";\nimport {ACTIVE} from \"../../../../../../themes/css-global-classes\";\n\nexport const PanicButtonTooltipBox = styled.div`\n display: none;\n background-color: white;\n text-align: center;\n border-radius: 0.3rem;\n padding: 0.5rem;\n cursor: default;\n position: absolute !important;\n z-index: 107;\n ${({theme}) => theme.font.presets.body};\n font-size: 1.2rem;\n color: ${({theme}) => theme.colors.textDark};\n width: 130%;\n line-height: 1.2;\n \n &.${ACTIVE} {\n display: block;\n }\n\n \n @media ${({theme}) => theme.mediaQuery.hoverNone}{\n padding: 0.5rem 1rem 0.5rem 1rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const PanicButtonPopupBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n padding: 5rem 5rem 0;\n ${({theme}) => theme.font.presets.body};\n font-size: 1.5rem;\n color: ${({theme}) => theme.colors.textLight};\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow } {\n padding: 5rem 2rem 0 2rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const PanicButtonPopupTimeBox = styled.span`\n color: ${({theme}) => theme.colors.brandPrimary}; \n padding-left: 0.5rem;\n padding-right: 0.5rem;\n`;","import styled from \"styled-components\";\n\nexport const PanicButtonPopupOkBox = styled.div`\n width: 100%;\n margin-top: 5rem;\n`;","import {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {PanicButtonPopupBox} from \"./boxes/panic-button-popup.box\";\nimport React from 'react';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {IModalDialogHandler} from \"../../../../../services/dialog/dialog.service.interface\";\nimport {PanicButtonPopupTimeBox} from \"./boxes/panic-button-popup-time.box\";\nimport {PanicButtonPopupOkBox} from \"./boxes/panic-button-popup-ok.box\";\nimport { DialogTextBox } from \"../../../../modal-dialog/boxes/text/dialog-text.box\";\nimport { ModalDialogActionsComponent } from \"../../../../modal-dialog/modal-dialog-actions.component\";\n\ninterface PanicButtonPopupComponentProps{\n textMessage1:string,\n textMessage2:string,\n textMessage3:string,\n dialogHandler: IModalDialogHandler;\n}\n\nexport class PanicButtonPopupComponent extends OrbitComponent<PanicButtonPopupComponentProps>{\n\n private _getTime():string{\n const now = new Date();\n return new TimeSpan(0,now.getHours(),now.getMinutes()).toString();\n }\n\n private _closeDialog = () => {\n this.props.dialogHandler.close();\n }\n\n render(){\n return (\n <PanicButtonPopupBox>\n <DialogTextBox>{this.props.textMessage1}</DialogTextBox>\n <DialogTextBox>\n {this.props.textMessage2}\n <PanicButtonPopupTimeBox>{this._getTime()}</PanicButtonPopupTimeBox>\n {this.props.textMessage3}\n </DialogTextBox>\n <PanicButtonPopupOkBox>\n <ModalDialogActionsComponent primaryAction={{\n onClick: this._closeDialog,\n text: this.services.translation.translate('OK')\n }} />\n </PanicButtonPopupOkBox>\n </PanicButtonPopupBox>\n )\n }\n}","import styled from \"styled-components\";\n\nexport const TooltipClickHereBox = styled.span`\n text-decoration: underline;\n font-weight: bold;\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n cursor: pointer;\n margin-bottom: 0;\n`;","import styled from \"styled-components\";\n\nexport const PanicButtonTooltipCloseBox = styled.div`\n position: absolute;\n right: 0.5rem;\n top: 0.5rem;\n width: 1rem;\n height: 1rem;\n cursor: pointer;\n \n &::before, &::after {\n position: absolute;\n content: ' ';\n height: 1rem;\n width: 0.1rem;\n background-color: black;\n }\n &::before {\n transform: rotate(45deg);\n }\n &::after {\n transform: rotate(-45deg);\n }\n`;","import styled from \"styled-components\";\nimport {ACTIVE} from \"../../../../../../themes/css-global-classes\";\n\nexport const PanicButtonMobileOverlayBox = styled.div`\n display: none;\n position:absolute;\n width: 100vw;\n height: 100vh;\n background-color:rgba(0, 0, 0, 0);\n top:0;\n left:0;\n z-index: 106;\n \n &.${ACTIVE}{\n display: block;\n }\n`;","import styled from \"styled-components\";\nimport {ACTIVE} from \"../../../../../../themes/css-global-classes\";\n\nexport const PanicButtonTooltipWrapperBox = styled.div`\n position: relative;\n display: none;\n flex-direction: column;\n align-items: center;\n background-color: transparent;\n padding-top: 6px !important;\n\n &::before{\n content: \"\";\n position: absolute;\n display: none;\n top: 0;\n width: 12px;\n height: 12px;\n background-color: white;\n transform: rotate(45deg);\n }\n\n &.${ACTIVE} {\n display: flex;\n &::before{\n display: block;\n }\n }\n`\n","import React, {useState} from 'react';\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {PanicButtonBox, PanicButtonSVGIconClassName} from \"./boxes/panic-button.box\";\nimport {PanicButtonTooltipBox} from \"./boxes/panic-button-tooltip.box\";\nimport classNames from 'classnames';\nimport {observer} from \"mobx-react\";\nimport {PanicButtonPopupComponent} from \"./panic-button-popup.component\";\nimport {TooltipClickHereBox} from \"./boxes/panic-button-tooltip-click-here\";\nimport {ACTIVE} from \"../../../../../themes/css-global-classes\";\nimport {GermanyResponsibleGamingButtonPlacement} from \"../../../../../../common/const/responsible-gaming\";\nimport {PanicButtonTooltipCloseBox} from \"./boxes/panic-button-tooltip-close.box\";\nimport {PanicButtonMobileOverlayBox} from \"./boxes/panic-button-mobile-overlay.box\";\nimport {useServices} from \"../../../../../react-hooks/use-services.hook\";\nimport {PanicButtonTooltipWrapperBox} from \"./boxes/panic-button-tooltip-wrapper.box\";\n\n\nexport interface ResponsibleGamingButtonsGermanyComponentProps {\n placement: GermanyResponsibleGamingButtonPlacement\n}\n\nexport const ResponsibleGamingButtonsGermanyComponent: React.FC<ResponsibleGamingButtonsGermanyComponentProps> = observer((props) => {\n const services = useServices();\n const [isTooltipVisible, setIsTooltipVisible] = useState(false);\n\n const _sendAnalytics = (label: string) => {\n services.analytics.sendOrbitUserFlowEvent(\"Navigation\", \"Header\", \"Icon_panic_\" + label);\n }\n\n const _openPopup = () => {\n services.dialog.showModal((dialogHandler) =>\n <PanicButtonPopupComponent\n textMessage1={services.translation.translate('panic_restriction_popup_message1')}\n textMessage2={services.translation.translate('panic_restriction_popup_message2')}\n textMessage3={services.translation.translate('panic_restriction_popup_message3')}\n dialogHandler={dialogHandler}\n />,\n {\n title: services.translation.translate(\"panic_restriction_popup_title\"),\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: true,\n isHighPriority: true\n })\n }\n\n const _restrictUser = () => {\n setIsTooltipVisible(false);\n \n services.user.panicRestrictUser().then((data) => {\n console.log(data);\n _openPopup();\n }).catch((err) => {\n console.log(err);\n });\n _sendAnalytics(\"activate\");\n }\n\n const _onMouseEnterPanicBtn = () => {\n if(!services.device.os.isMobileOS){\n setIsTooltipVisible(true);\n _sendAnalytics(\"click\");\n }\n }\n\n const _onMouseLeavePanicBtn = () => {\n if(!services.device.os.isMobileOS) {\n setIsTooltipVisible(false);\n }\n }\n\n const _closeToolTip = (event: any) => {\n event.stopPropagation();\n setIsTooltipVisible(false);\n }\n\n const onClickPanicBtn = () => {\n if (!isTooltipVisible) {\n setIsTooltipVisible(true);\n _sendAnalytics(\"click\");\n }\n }\n\n const _renderCloseBtn = () => {\n if (!services.mediaQuery.hover) {\n return <PanicButtonTooltipCloseBox className={'cy-tooltip-close'}\n onClick={(event) => _closeToolTip(event)} />\n }\n return null;\n }\n\n const _getTooltipBox = () => {\n return <TooltipClickHereBox className={CyClass('cy-tooltip-click-here')}\n onClick={() => _restrictUser()}>klicken Sie hier.</TooltipClickHereBox>\n }\n\n const _renderTooltipClickHere = () => {\n if (services.mediaQuery.sAndBelow && services.mediaQuery.portrait) {\n return (<div>{_getTooltipBox()}</div>);\n } else {\n return _getTooltipBox();\n }\n }\n\n const _renderMobileOverlay = () => {\n if (services.device.os.isMobileOS) {\n return <PanicButtonMobileOverlayBox className={classNames(CyClass('cy-tooltip-box'), {\n [ACTIVE]: isTooltipVisible\n })}\n onClick={(event) => _closeToolTip(event)} />\n }\n return null;\n }\n\n const PanicButtonIcon = services.theme.currentTheme.icons.panicButtonRegulationIcon;\n return (\n <React.Fragment>\n <PanicButtonBox className={classNames(CyClass('cy-panic-button-germany'), {\n [ACTIVE]: isTooltipVisible,\n })}\n onMouseEnter={() => _onMouseEnterPanicBtn()}\n onMouseLeave={() => _onMouseLeavePanicBtn()}\n onClick={() => onClickPanicBtn()}>\n <PanicButtonIcon className={PanicButtonSVGIconClassName} />\n <PanicButtonTooltipWrapperBox className={classNames({\n [ACTIVE]: isTooltipVisible,\n })}>\n <PanicButtonTooltipBox\n className={classNames(CyClass('cy-tooltip-box'), {\n [ACTIVE]: isTooltipVisible\n })}>\n <div>\n Um eine 24-stündige Spielpause einzulegen,\n {_renderTooltipClickHere()}\n {_renderCloseBtn()}\n </div>\n </PanicButtonTooltipBox>\n </PanicButtonTooltipWrapperBox>\n\n </PanicButtonBox>\n {_renderMobileOverlay()}\n </React.Fragment>\n )\n \n})\n","import styled from \"styled-components\";\n\nexport const NetherlandsSelfTestButtonBox = styled.button`\n width: 105px;\n height: 32px;\n cursor: pointer;\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {NetherlandsSelfTestButtonBox} from \"./boxes/netherlands.self-test-button.box\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\nexport const NetherlandsSelfTestButtonComponent = observer(class NetherlandsSelfTestButtonComponent extends OrbitComponent {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_ksa_click');\n await this.services.linksNavigation.openSelfTest();\n }\n render() {\n return (\n <NetherlandsSelfTestButtonBox onClick={this._onClickHandler} className={CyClass('cy-netherlands-ksa-button')}>\n <svg viewBox='0 0 105 32' xmlns='http://www.w3.org/2000/svg'>\n <g fill='#7c7c7b'>\n <path\n d='M4.632 13.908L1.375 5.753h1.007l2.654 6.729 2.593-6.693.978-.036h.09l-3.219 8.155zM11.804 14.022a2.88 2.88 0 0 1-2.825-2.928c0-1.59 1.267-2.932 2.767-2.932.74 0 1.447.301 1.959.833s.783 1.249.752 1.985c-.002.145-.022.29-.06.43v.04H9.92a1.95 1.95 0 0 0 1.883 1.704 2.238 2.238 0 0 0 1.735-.89l.043-.06.604.594-.029.043a3.065 3.065 0 0 1-2.353 1.18zm1.717-3.39a1.815 1.815 0 0 0-1.785-1.606c-.92.025-1.692.7-1.836 1.605zm2.55 3.276V8.279h.925v.637c.46-.495 1.11-.77 1.786-.754h.29v.925h-.397a1.664 1.664 0 0 0-1.205.503 1.651 1.651 0 0 0-.466 1.215v3.103zm6.49 2.412a2.943 2.943 0 0 1-2.357-1.174l-.025-.043.603-.6.04.06a2.281 2.281 0 0 0 1.739.893c.505-.01.984-.222 1.33-.588.347-.366.532-.856.513-1.359v-.519a2.34 2.34 0 0 1-1.786.804 2.74 2.74 0 0 1-2.654-2.814 2.74 2.74 0 0 1 2.654-2.807 2.34 2.34 0 0 1 1.786.804v-.698h.925v5.23c.014.741-.271 1.456-.792 1.985s-1.233.826-1.976.826zm.057-7.294c-.936 0-1.729.894-1.729 1.954s.793 1.95 1.729 1.95a1.874 1.874 0 0 0 1.786-1.95 1.874 1.874 0 0 0-1.786-1.954zm7.057 4.996c-1.34 0-2.307-1.04-2.307-2.47V8.28h.925v3.274c-.024.412.123.816.405 1.118.283.302.677.477 1.091.483.918 0 1.611-.762 1.611-1.78V8.28h.929v5.629H31.4v-.637c-.44.487-1.068.76-1.725.75zm8.782-.114v-3.33c0-.929-.578-1.552-1.428-1.552a1.678 1.678 0 0 0-1.221.53c-.316.337-.478.79-.447 1.25v3.102h-.936V8.279h.932v.687a2.264 2.264 0 0 1 1.718-.793c1.382 0 2.307.97 2.307 2.415v3.33zm7 0v-3.33c0-.929-.578-1.552-1.428-1.552-.464 0-.907.192-1.223.529-.317.337-.48.79-.449 1.25v3.103h-.928V8.279h.925v.687a2.268 2.268 0 0 1 1.721-.793c1.379 0 2.307.97 2.307 2.415v3.33zm2.964 0V8.279h.925v5.629zm.461-6.831a.577.577 0 1 1-.002-1.155.577.577 0 0 1 .002 1.155zm6.536 6.83v-3.33c0-.928-.579-1.55-1.429-1.55-.463 0-.906.19-1.223.528-.316.337-.479.79-.448 1.25v3.103h-.925V8.279h.925v.687a2.268 2.268 0 0 1 1.718-.793c1.382 0 2.307.97 2.307 2.415v3.33zm5.157 2.413a2.936 2.936 0 0 1-2.357-1.174l-.025-.043.603-.6.04.06a2.281 2.281 0 0 0 1.739.893c.504-.011.983-.224 1.329-.59s.53-.854.51-1.357v-.519c-.447.517-1.1.812-1.785.804a2.74 2.74 0 0 1-2.654-2.814 2.74 2.74 0 0 1 2.657-2.807 2.325 2.325 0 0 1 1.786.804v-.698h.928v5.23a2.752 2.752 0 0 1-.792 1.986 2.773 2.773 0 0 1-1.979.825zm.057-7.294c-.936 0-1.728.894-1.728 1.954s.792 1.95 1.728 1.95a1.874 1.874 0 0 0 1.786-1.95 1.874 1.874 0 0 0-1.786-1.954zm8.84 4.882v-3.33c0-.929-.58-1.552-1.43-1.552a1.678 1.678 0 0 0-1.22.53c-.316.337-.478.79-.447 1.25v3.102h-.925V5.753h.925v3.202a2.264 2.264 0 0 1 1.714-.782c1.382 0 2.307.97 2.307 2.415v3.33zm5.446.114a2.943 2.943 0 0 1-2.762-1.768 2.924 2.924 0 0 1 .6-3.216 2.95 2.95 0 0 1 3.215-.66 2.932 2.932 0 0 1 1.829 2.716 2.909 2.909 0 0 1-2.882 2.928zm0-4.981a2.076 2.076 0 0 0-2 1.191 2.061 2.061 0 0 0 .373 2.29 2.08 2.08 0 0 0 2.273.504 2.067 2.067 0 0 0 1.311-1.918c.018-.535-.178-1.055-.545-1.445s-.875-.62-1.412-.637zm6.825 4.98c-1.34 0-2.307-1.038-2.307-2.468V8.279h.921v3.274a1.521 1.521 0 0 0 1.5 1.601c.918 0 1.61-.762 1.61-1.78V8.28h.93v5.629h-.93v-.637c-.438.487-1.067.76-1.724.75zm7.057 0c-1.471 0-2.71-1.34-2.71-2.927s1.239-2.921 2.71-2.921c.731.007 1.425.32 1.914.86v-3.28h.925v8.155h-.925v-.754a2.6 2.6 0 0 1-1.914.868zm0-4.98c-.846 0-1.786.85-1.786 2.067s.94 2.063 1.786 2.063c.993 0 1.9-.982 1.9-2.063 0-1.082-.907-2.082-1.9-2.082zm7.343 4.98a2.88 2.88 0 0 1-2.825-2.927c0-1.59 1.268-2.932 2.768-2.932.74 0 1.447.301 1.958.833.512.532.784 1.249.752 1.985 0 .145-.02.29-.06.43v.04H94.26a1.95 1.95 0 0 0 1.882 1.704 2.238 2.238 0 0 0 1.736-.89l.042-.06.604.594-.029.043a3.065 3.065 0 0 1-2.353 1.18zm1.714-3.39a1.812 1.812 0 0 0-1.786-1.605c-.918.028-1.688.701-1.835 1.605zm2.56 3.277V8.279h.926v.637c.46-.495 1.11-.77 1.786-.754h.292v.925h-.407a1.664 1.664 0 0 0-1.204.503 1.651 1.651 0 0 0-.467 1.215v3.103zM3.618 20.896l3.168-3.505h2.018l-2.997 3.33 3.214 4.708H7.018l-2.375-3.444-1.036 1.149v2.295H1.889V17.39h1.73zM12.857 24.856c-.4.433-.962.683-1.553.69-1.154 0-1.904-.747-1.904-1.608 0-.918.636-1.562 1.671-1.747l1.786-.32c0-.46-.357-.805-.978-.805a1.581 1.581 0 0 0-1.268.573l-.865-.86a2.833 2.833 0 0 1 2.247-1.09c1.428 0 2.421.975 2.421 2.239v3.5h-1.557zm0-1.836v-.175l-1.268.232c-.403.067-.632.288-.632.63 0 .341.229.576.75.576.672 0 1.15-.456 1.15-1.263zm4.825-2.526a2.113 2.113 0 0 1 1.604-.804c1.268 0 2.189.918 2.189 2.469v3.27h-1.543v-3.1a1.065 1.065 0 0 0-.291-.817 1.073 1.073 0 0 0-.805-.332c-.693 0-1.154.46-1.154 1.324v2.925H16.13v-5.626h1.553zm8.647.975a1.237 1.237 0 0 0-.922-.46c-.46 0-.69.232-.69.46 0 .804 2.594.402 2.594 2.298 0 .975-.807 1.779-2.25 1.779a2.787 2.787 0 0 1-2.304-1.035l.864-.861c.292.377.734.608 1.211.633.518 0 .75-.231.75-.516 0-.865-2.593-.438-2.593-2.298 0-.861.922-1.78 2.19-1.78a2.483 2.483 0 0 1 1.964.862zm5.478 0a1.248 1.248 0 0 0-.921-.46c-.461 0-.693.232-.693.46 0 .804 2.593.402 2.593 2.298 0 .975-.807 1.779-2.247 1.779a2.79 2.79 0 0 1-2.307-1.035l.864-.861c.292.376.734.607 1.211.633.522 0 .75-.231.75-.516 0-.865-2.593-.438-2.593-2.298 0-.861.922-1.78 2.19-1.78.75-.02 1.47.296 1.96.862zm3.907 3.273v3.099h-1.543v-8.038h1.543v.69a2.146 2.146 0 0 1 1.672-.803c1.428 0 2.707 1.263 2.707 2.928s-1.268 2.928-2.707 2.928a2.146 2.146 0 0 1-1.672-.804zm0-2.135c.089.74.748 1.279 1.493 1.22a1.39 1.39 0 0 0 1.282-1.439 1.39 1.39 0 0 0-1.393-1.332c-.396.01-.77.185-1.032.481s-.389.688-.35 1.08zm7.047.527a1.428 1.428 0 0 0 1.496 1.092 1.957 1.957 0 0 0 1.5-.69l.807 1.031a3.382 3.382 0 0 1-2.421.979c-1.05.01-2.026-.539-2.56-1.44s-.545-2.017-.028-2.928a2.941 2.941 0 0 1 2.53-1.488 2.763 2.763 0 0 1 2.019.803c.534.532.826 1.259.807 2.01.004.212-.015.423-.057.63zm0-1.093h2.596a1.252 1.252 0 0 0-1.268-1.031 1.36 1.36 0 0 0-1.328 1.038zM49.907 25.429h-1.553V17.39h1.553zM54.807 24.856c-.4.433-.962.683-1.553.69-1.154 0-1.904-.747-1.904-1.608 0-.918.636-1.562 1.671-1.747l1.786-.32c0-.46-.357-.805-.978-.805a1.581 1.581 0 0 0-1.268.573l-.865-.86a2.832 2.832 0 0 1 2.233-1.09c1.428 0 2.421.975 2.421 2.239v3.5h-1.557zm0-1.836v-.175l-1.268.232c-.403.067-.632.288-.632.63 0 .341.229.576.75.576.69 0 1.15-.456 1.15-1.263zm7.093 1.836a2.211 2.211 0 0 1-1.614.69c-1.268 0-2.19-.918-2.19-2.377v-3.366h1.547v3.203a1.074 1.074 0 0 0 1.096 1.089c.69 0 1.154-.46 1.154-1.32v-2.972h1.553v5.626h-1.553zm4.036-6.721h1.382v1.779h1.153v1.38h-1.153v2.238a.65.65 0 0 0 .693.651c.197.003.393-.035.575-.114v1.32a3.247 3.247 0 0 1-1.036.175c-1.154 0-1.786-.634-1.786-1.954v-2.312h-.978v-1.384h.518a.672.672 0 0 0 .635-.744zm6.628 7.41a2.933 2.933 0 0 1-2.882-2.964 2.934 2.934 0 0 1 2.958-2.89 2.934 2.934 0 0 1 2.92 2.927 3.037 3.037 0 0 1-2.996 2.928zm0-1.422a1.505 1.505 0 0 0 1.474-.838 1.494 1.494 0 0 0-.248-1.672 1.508 1.508 0 0 0-1.653-.378c-.577.225-.956.78-.955 1.397a1.42 1.42 0 0 0 .383 1.025c.26.277.62.44 1 .452zm7.793-2.825a1.814 1.814 0 0 0-.518-.057c-.807 0-1.325.516-1.325 1.49v2.698h-1.557v-5.626h1.557v.69c.404-.47.993-.742 1.615-.747h.228zm1.893-2.242a.863.863 0 0 1-.864-.86c0-.476.387-.862.864-.862s.864.386.864.861a.863.863 0 0 1-.864.861zm.807 6.373H81.5v-5.626h1.557zm2.479-7.294h1.382v1.779h1.153v1.38h-1.153v2.238a.65.65 0 0 0 .693.651c.197.003.393-.035.575-.114v1.32a3.247 3.247 0 0 1-1.036.175c-1.154 0-1.786-.634-1.786-1.954v-2.312h-.982v-1.384h.522a.672.672 0 0 0 .632-.744zm5.246 4.999a1.428 1.428 0 0 0 1.5 1.092 1.953 1.953 0 0 0 1.497-.69l.807 1.031a3.382 3.382 0 0 1-2.422.979 2.942 2.942 0 0 1-2.56-1.44 2.919 2.919 0 0 1-.028-2.928 2.941 2.941 0 0 1 2.531-1.488 2.763 2.763 0 0 1 2.018.803c.534.532.826 1.259.807 2.01.004.212-.015.423-.057.63zm0-1.093h2.593a1.252 1.252 0 0 0-1.268-1.031 1.36 1.36 0 0 0-1.325 1.038zm6.36-2.985a.863.863 0 0 1-.863-.86c0-.476.387-.862.864-.862s.864.386.864.861a.863.863 0 0 1-.864.861zm.787 6.373h-1.554v-5.626h1.554zm2.482-7.294h1.375v1.779h1.153v1.38h-1.153v2.238a.65.65 0 0 0 .714.651c.199.003.396-.036.579-.114v1.32a3.254 3.254 0 0 1-1.04.175c-1.15 0-1.785-.634-1.785-1.954v-2.312h-.979v-1.384h.518a.672.672 0 0 0 .636-.744zM0 30.278h105V32H0zM0 0h105v1.722H0z'/>\n </g>\n </svg>\n </NetherlandsSelfTestButtonBox>\n );\n }\n});","import styled from \"styled-components\";\n\nexport const OntarioResponsibleGamingButtonsBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`","import styled, {css} from \"styled-components\";\n\ninterface OntarioSafeToPlayButtonBoxProps {\n isShownInHeader: boolean\n}\n\nexport const OntarioSafeToPlayButtonBox = styled.button<OntarioSafeToPlayButtonBoxProps>`\n width: 175px;\n height: 35px;\n background-image: url(\"${props => props.theme.assets.images.regulation_specific.ontario.safe_to_play_icon_svg.toString()}\");\n background-size: contain;\n background-repeat: no-repeat;\n cursor: pointer;\n ${props => !props.isShownInHeader && css`background-position: center center`}\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n height: 25px;\n }\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n background-position: center center\n }\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {OntarioSafeToPlayButtonBox} from \"./boxes/ontario.safe-to-play-button.box\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\ninterface OntarioSafeToPlayButtonComponentProps{\n isShownInHeader: boolean\n}\n\nexport const OntarioSafeToPlayButtonComponent = observer(class OntarioSafeToPlayButtonComponent extends OrbitComponent<OntarioSafeToPlayButtonComponentProps> {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_ontario_safe_to_play_icon_click');\n await this.services.linksNavigation.openSafeToPlay();\n }\n\n render() {\n return (\n <OntarioSafeToPlayButtonBox isShownInHeader={this.props.isShownInHeader} onClick={this._onClickHandler} className={CyClass('cy-safe-to-play')}/>\n )\n }\n});","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {OntarioResponsibleGamingButtonsBox} from \"./boxes/ontario.responsible-gaming-buttons.box\";\nimport {OntarioSafeToPlayButtonComponent} from \"./safe-to-play/ontario.safe-to-play-button.component\";\n\ninterface OntarioResponsibleGamingButtonsComponentProps{\n isShownInHeader?: boolean\n}\n\nexport const OntarioResponsibleGamingButtonsComponent = observer(class OntarioResponsibleGamingButtonsComponent extends OrbitComponent<OntarioResponsibleGamingButtonsComponentProps> {\n render() {\n const isShownInHeader = this.props.isShownInHeader ?? false;\n return (\n <OntarioResponsibleGamingButtonsBox>\n <OntarioSafeToPlayButtonComponent isShownInHeader={isShownInHeader}/>\n </OntarioResponsibleGamingButtonsBox>\n );\n }\n});","import styled from \"styled-components\";\n\nexport const SwedenResponsibleGamingButtonsBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`","import styled, {css} from \"styled-components\";\n\nexport const SwedenResponsibleGamingButtonSBGIconClassName = \"sweden-responsible-gaming-button-svg-icon\";\n\nexport const SwedenResponsibleGamingButtonBaseBox = styled.button<{useIconsOnly: boolean}>`\n background-repeat: no-repeat;\n background-size: contain;\n cursor: pointer;\n\n @media ${({theme}) => theme.mediaQuery.hover}{\n &:hover {\n opacity: 0.5;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.hoverNone}{\n &:active {\n opacity: 0.5;\n }\n }\n \n .${SwedenResponsibleGamingButtonSBGIconClassName} {\n width: 100%;\n height: auto;\n }\n \n ${props => props.useIconsOnly\n ? css`\n width: 25px;\n height: 24px;\n `\n : css`\n width: 100px;\n height: 30px;\n `\n }\n`","import styled, {css} from \"styled-components\";\nimport {SwedenResponsibleGamingButtonBaseBox} from \"../../boxes/sweden.responsible-gaming-button-base.box\";\n\ninterface SwedenSelfExclusionButtonBoxProps{\n isShownInHeader:boolean;\n useIconsOnly: boolean;\n}\n\nexport const SwedenSelfExclusionButtonBox = styled(SwedenResponsibleGamingButtonBaseBox)<SwedenSelfExclusionButtonBoxProps>`\n ${props => props.isShownInHeader ? css`\n width: 8.5rem;\n height: 2.5rem;\n `: null}\n \n`;","import React from \"react\";\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\nimport {SwedenSelfExclusionButtonBox} from \"./boxes/sweden.self-exclusion-button.box\";\nimport {SwedenResponsibleGamingButtonSBGIconClassName} from \"../boxes/sweden.responsible-gaming-button-base.box\";\n\ninterface SwedenPanicButtonComponentProps {\n useIconsOnly: boolean;\n isShownInHeader: boolean;\n}\n\nexport const SwedenSelfExclusionButtonComponent = observer(\n class SwedenSelfExclusionButtonComponent extends OrbitComponent<SwedenPanicButtonComponentProps> {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_panic_click');\n\n await this.services.linksNavigation.openSelfExclusion();\n };\n\n render() {\n const SelfExclusionIcon = this.services.theme.currentTheme.icons.selfExclusionRegulationIcon;\n const SelfExclusionSymbolIcon = this.services.theme.currentTheme.icons.selfExclusionRegulationSymbolIcon;\n\n return (\n <SwedenSelfExclusionButtonBox className={CyClass('cy-sweden-panic-button')} useIconsOnly={this.props.useIconsOnly} isShownInHeader={this.props.isShownInHeader} onClick={this._onClickHandler}>\n {this.props.useIconsOnly ? <SelfExclusionSymbolIcon size={2.5} className={CyClass('cy-sweden-panic-icon')}/>\n : <SelfExclusionIcon className={CyClass('cy-sweden-panic-icon') + \" \" + SwedenResponsibleGamingButtonSBGIconClassName}/>}\n </SwedenSelfExclusionButtonBox>)\n }}\n);","import styled, {css} from \"styled-components\";\nimport {SwedenResponsibleGamingButtonBaseBox} from \"../../boxes/sweden.responsible-gaming-button-base.box\";\n\nexport const SwedenGamingLimitsButtonBox = styled(SwedenResponsibleGamingButtonBaseBox)<{useIconsOnly: boolean, isShownInHeader: boolean}>`\n ${props => props.useIconsOnly\n ? css`\n width: 26px;\n height: 22px;\n `\n : css`\n width: 120px;\n `\n }\n \n ${props => props.isShownInHeader ? css`\n width: 10rem;\n height: 2.5rem;\n `: null}\n`;","import React from \"react\";\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\nimport {SwedenGamingLimitsButtonBox} from \"./boxes/sweden.gaming-limits-button.box\";\nimport {CHANNEL_ELEMENTS} from \"../../../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType, ControlCenterOpenSource} from \"@sparkware/uc-sdk-core\";\nimport {SwedenResponsibleGamingButtonSBGIconClassName} from \"../boxes/sweden.responsible-gaming-button-base.box\";\n\ninterface SwedenGamingLimitsButtonComponentProps {\n useIconsOnly: boolean;\n isShownInHeader: boolean;\n}\n\nexport const SwedenGamingLimitsButtonComponent = observer(\n class SwedenGamingLimitsButtonComponent extends OrbitComponent<SwedenGamingLimitsButtonComponentProps> {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_deposit_limits_click');\n\n await (await this.services.externalLinks).openGameLimits({\n channelArea:AreaType.button,\n channelElement:CHANNEL_ELEMENTS.gamesLimitsGameButton,\n source: ControlCenterOpenSource.RgPolicy\n });\n }\n\n render() {\n const GamingLimitIcon = this.services.theme.currentTheme.icons.gamingLimitRegulationIcon;\n const GamingLimitSymbolIcon = this.services.theme.currentTheme.icons.gamingLimitRegulationSymbolIcon;\n\n return (\n <SwedenGamingLimitsButtonBox className={CyClass('cy-sweden-game-limit-button')} useIconsOnly={this.props.useIconsOnly} isShownInHeader={this.props.isShownInHeader} onClick={this._onClickHandler}>\n {this.props.useIconsOnly ? <GamingLimitSymbolIcon size={2.5} className={CyClass('cy-sweden-game-limit-icon')}/>\n : <GamingLimitIcon className={CyClass('cy-sweden-game-limit-icon') + \" \" + SwedenResponsibleGamingButtonSBGIconClassName} />}\n </SwedenGamingLimitsButtonBox>)\n\n }\n }\n);","import styled, {css} from \"styled-components\";\nimport {SwedenResponsibleGamingButtonBaseBox} from \"../../boxes/sweden.responsible-gaming-button-base.box\";\n\nexport const SwedenSelfTestButtonBox = styled(SwedenResponsibleGamingButtonBaseBox)<{useIconsOnly: boolean, isShownInHeader: boolean}>`\n ${props => props.isShownInHeader ? css`\n width: 8.5rem;\n height: 2.5rem;\n `: null}\n`;","import React from \"react\";\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\nimport {SwedenSelfTestButtonBox} from \"./boxes/sweden.self-test-button.box\";\nimport {SwedenResponsibleGamingButtonSBGIconClassName} from \"../boxes/sweden.responsible-gaming-button-base.box\";\n\ninterface SwedenSelfTestButtonComponentProps {\n useIconsOnly: boolean;\n isShownInHeader: boolean;\n}\nexport const SwedenSelfTestButtonComponent = observer(\n class SwedenSelfTestButtonComponent extends OrbitComponent<SwedenSelfTestButtonComponentProps> {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_self_test_click');\n this.services.analytics.sendElasticInfoEvent({\n eventType: 'sweden_self_test',\n category: 'Navigation',\n action: 'Header',\n label: 'Icon_self_test_click'\n },true);\n\n await this.services.linksNavigation.openSelfTest();\n }\n\n render() {\n const SelfTestIcon = this.services.theme.currentTheme.icons.selfTestRegulationIcon;\n const SelfTestSymbolIcon = this.services.theme.currentTheme.icons.selfTestRegulationSymbolIcon;\n\n return (\n <SwedenSelfTestButtonBox className={CyClass('cy-sweden-self-test-button')} useIconsOnly={this.props.useIconsOnly} isShownInHeader={this.props.isShownInHeader} onClick={this._onClickHandler}>\n {this.props.useIconsOnly ? <SelfTestSymbolIcon size={2.5} className={CyClass('cy-sweden-self-test-icon')}/>\n : <SelfTestIcon className={CyClass('cy-sweden-self-test-icon') + \" \" + SwedenResponsibleGamingButtonSBGIconClassName}\n />}\n </SwedenSelfTestButtonBox>)\n\n }\n }\n);","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {SwedenResponsibleGamingButtonsBox} from \"./boxes/sweden.responsible-gaming-buttons.box\";\nimport {SwedenSelfExclusionButtonComponent} from \"./self-exclusion-button/sweden.self-exclusion-button.component\";\nimport {SwedenGamingLimitsButtonComponent} from \"./gaming-limits/sweden.gaming-limits-button.component\";\nimport {SwedenSelfTestButtonComponent} from \"./self-test-button/sweden.self-test-button.component\";\nimport {\n BlankHorizontalSeparatorBox\n} from \"../../../../../basic-components/blank-separator/blank-horizontal-separator.box\";\n\ninterface SwedenResponsibleGamingButtonsComponentProps {\n useIconsOnly: boolean;\n isShownInHeader?: boolean;\n}\nexport const SwedenResponsibleGamingButtonsComponent = observer(\n class SwedenResponsibleGamingButtonsComponent extends OrbitComponent<SwedenResponsibleGamingButtonsComponentProps> {\n render() {\n let spaceMultiplier;\n if(this.props.useIconsOnly) {\n spaceMultiplier = 2;\n } else if(this.props.isShownInHeader){\n spaceMultiplier = 0.5;\n } else {\n spaceMultiplier = 1;\n }\n\n\n const isShownInHeader = this.props.isShownInHeader ?? false;\n\n return (\n <SwedenResponsibleGamingButtonsBox>\n <SwedenSelfExclusionButtonComponent useIconsOnly={this.props.useIconsOnly} isShownInHeader={isShownInHeader}/>\n <BlankHorizontalSeparatorBox multiplier={spaceMultiplier}/>\n <SwedenGamingLimitsButtonComponent useIconsOnly={this.props.useIconsOnly} isShownInHeader={isShownInHeader}/>\n <BlankHorizontalSeparatorBox multiplier={spaceMultiplier}/>\n <SwedenSelfTestButtonComponent useIconsOnly={this.props.useIconsOnly} isShownInHeader={isShownInHeader}/>\n </SwedenResponsibleGamingButtonsBox>\n );\n }\n }\n);","import styled, { css } from \"styled-components\";\nimport { styledByTheme } from \"../../../../../../themes/architecture/styled-by-theme\";\n\nconst GenericSideMenuItemIconCommonBox = styled.div<{active?: boolean}>`\n box-sizing: border-box;\n margin: 0 1rem 0 0;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 0 2rem 0 0;\n }\n\n width: 2.4rem;\n height: 2.4rem;\n padding: 0.2rem;\n transition: color 0.2s ease, background-color 0.2s ease, border-bottom 0.2s ease;\n`;\n\nconst GenericSideMenuItemIconDefaultBox = styled(GenericSideMenuItemIconCommonBox)`\n ${(props) => props.active ? css`\n background-color: ${(props) => props.theme.colors.textActive};\n color: ${(props) => props.theme.colors.backgroundDark};\n ` : null}\n border-radius: 50%;\n`;\n\nconst GenericSideMenuItemIconCasino777Box = styled(GenericSideMenuItemIconCommonBox)`\n ${(props) => props.active ? css`\n background-color: ${({theme}) => theme.colors.backgroundActive};\n color: ${(props) => props.theme.colors.textActive};\n ` : null}\n border-radius: 50%;\n`;\n\nconst GenericSideMenuItemIconHarrahsBox = styled(GenericSideMenuItemIconCommonBox)`\n ${(props) => props.active ? css`\n background-color: ${(props) => props.theme.colors.textActive};\n color: ${(props) => props.theme.colors.brandSecondary};\n ` : null}\n border-radius: 50%;\n`;\n\nconst GenericSideMenuItemIconWsopBox = styled(GenericSideMenuItemIconCommonBox)`\n ${(props) => props.active ? css`\n background-color: ${(props) => props.theme.colors.logoBackground};\n color: ${(props) => props.theme.colors.textActive};\n ` : null}\n border-radius: 50%;\n`;\n\nconst GenericSideMenuItemIconSIBox = styled(GenericSideMenuItemIconCommonBox)`\n color: ${(props) => props.active ? props.theme.colors.textLight : props.theme.colors.textMiddleDark};\n`;\n\nconst GenericSideMenuItemIconMrGreenBox = styled(GenericSideMenuItemIconCommonBox)`\n ${(props) => props.active ? css`\n color: ${(props) => props.theme.colors.textActive};\n background-color: transparent;\n ` : null}\n`;\n\n\nexport const GenericSideMenuItemIconBox = styledByTheme(GenericSideMenuItemIconDefaultBox)\n .forCasino777(GenericSideMenuItemIconCasino777Box)\n .forHarrahs(GenericSideMenuItemIconHarrahsBox)\n .forWsop(GenericSideMenuItemIconWsopBox)\n .forSI(GenericSideMenuItemIconSIBox)\n .forMrGreen(GenericSideMenuItemIconMrGreenBox)\n .apply();","import styled from \"styled-components\";\n\nexport const GenericSideMenuItemLabelBox = styled.span`\n flex: 1 0 auto;\n`;\n","import styled from \"styled-components\";\nimport { styledByTheme } from \"../../../../../../themes/architecture/styled-by-theme\";\n\nexport const GenericSideMenuItemDefaultBox = styled.div<{active?: boolean}>`\n display: flex;\n align-items: center;\n padding: 0.8rem 0;\n font-size: 1.4rem;\n line-height: 1;\n color: ${({theme, active}) => active ? theme.colors.textActive: theme.colors.text};\n transition: color 0.2s ease;\n @media ${({theme}) => theme.mediaQuery.lowHeight}, ${({theme}) => theme.mediaQuery.xlAndBelow} {\n padding: 0.6rem 0;\n }\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n ${({theme}) => theme.font.presets.regular};\n padding: 1rem 0;\n color: ${({theme, active}) => active ? theme.colors.textActive: theme.colors.textLight};\n font-weight: 300;\n }\n &:hover {\n color: ${({theme}) => theme.colors.textHover};\n }\n`;\n\nconst GenericSideMenuItemCasino777Box = styled(GenericSideMenuItemDefaultBox)`\n color: ${({theme, active}) => active ? theme.colors.backgroundActive: theme.colors.text};\n`;\n\nconst GenericSideMenuItemHarrahsBox = styled(GenericSideMenuItemDefaultBox)`\n ${({theme}) => theme.font.presets.regular};\n`;\n\nconst GenericSideMenuItemWsopBox = styled(GenericSideMenuItemDefaultBox)`\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-weight: ${({theme, active}) => active ? 600: 300};\n }\n`;\n\nexport const GenericSideMenuItemBox = styledByTheme(GenericSideMenuItemDefaultBox)\n .forCasino777(GenericSideMenuItemCasino777Box)\n .forHarrahs(GenericSideMenuItemHarrahsBox)\n .forWsop(GenericSideMenuItemWsopBox)\n .apply();\n","import styled from \"styled-components\";\n\nexport const SideMenuItemsListDefaultBox = styled.div`\n border-radius: 5px;\n background-color: ${({theme}) => theme.colors.background};\n margin: 1rem 0 0 0;\n padding: 0;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow}, ${({theme}) => theme.mediaQuery.lowHeight} {\n margin: 1rem 0 0 0;\n }\n`;\n","import styled from \"styled-components\";\nimport { styledByTheme } from \"../../../../themes/architecture/styled-by-theme\";\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\nimport {SideMenuItemsListDefaultBox} from \"./side-menu-items-list.default.box\";\n\nconst SideMenuItemsListHarrahsWsopBox = styled(SideMenuItemsListDefaultBox)`\n margin: 2rem 0 0 0;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow}, ${({theme}) => theme.mediaQuery.lowHeight} {\n margin: 1rem 0 0 0;\n }\n`;\n\nconst SideMenuItemsListMrGreenBox = styled(SideMenuItemsListDefaultBox)`\n background-color: transparent;\n border-bottom: 1px solid ${({theme}) => hexToRgba(theme.colors.boxBorderLighter, 0.2)};\n border-radius: 0;\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\nexport const SideMenuItemsListBox = styledByTheme(SideMenuItemsListDefaultBox)\n .forHarrahs(SideMenuItemsListHarrahsWsopBox)\n .forWsop(SideMenuItemsListHarrahsWsopBox)\n .forMrGreen(SideMenuItemsListMrGreenBox)\n .apply();\n","import styled from \"styled-components\";\n\nexport const GenericSideMenuImageBox = styled.div`\n width: 100%;\n display: flex;\n justify-content: center;\n`;","import styled from \"styled-components\";\nimport { styledByTheme } from \"../../../../../../themes/architecture/styled-by-theme\";\nimport {GenericSideMenuItemDefaultBox} from \"./generic-side-menu-item.box\";\n\nconst GenericSideMenuItemPreIconDefaultBox = styled.span<{active: boolean}>`\n`;\n\nconst GenericSideMenuItemPreIconSIBox = styled(GenericSideMenuItemPreIconDefaultBox)`\n position: absolute;\n top: 0;\n bottom: 0;\n left: -1rem;\n width: 4px;\n border-radius: 0.5rem 0 0 0.5rem;\n\n background-color: ${(props) => props.active ? props.theme.colors.textActive : \"transparent\"};\n ${GenericSideMenuItemDefaultBox}:hover & {\n background-color: ${(props) => props.theme.colors.textActive};\n }\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n left: -1.6rem;\n }\n`;\n\nexport const GenericSideMenuItemPreIconBox = styledByTheme(GenericSideMenuItemPreIconDefaultBox)\n .forSI(GenericSideMenuItemPreIconSIBox)\n .apply();\n","import React from 'react';\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {GenericSideMenuImageBox} from \"./boxes/link/generic/generic-side-menu-item-image.box\";\nimport {Image} from \"../../raw-components/image/image\";\nimport {GenericSideMenuItemPreIconBox} from \"./boxes/link/generic/generic-side-menu-item-pre-icon.box\";\nimport {GenericSideMenuItemIconBox} from \"./boxes/link/generic/generic-side-menu-item-icon.box\";\nimport {GenericSideMenuItemLabelBox} from \"./boxes/link/generic/generic-side-menu-item-label.box\";\nimport {Link} from \"../../raw-components/link/link\";\nimport {GenericSideMenuItemBox} from \"./boxes/link/generic/generic-side-menu-item.box\";\nimport {MenuItemComponentProps} from \"../../../services/menu-items-common/menu-item-component-props.interface\";\nimport {SideMenuItemContainerComponent} from \"./side-menu-item-container.component\";\n\ninterface GenericSideMenuLinkComponentProps extends MenuItemComponentProps {\n withArrow?: boolean\n className?: string;\n}\n\n@observer\nexport class GenericSideMenuItemComponent extends OrbitComponent<GenericSideMenuLinkComponentProps> {\n\n private _onClickHandler = async () => {\n await this.props.menuItem.execute();\n }\n\n private _renderIcon = () => {\n if(!this.props.menuItem.iconSource || !this.props.menuItem.icon) {\n return null;\n }\n\n if(this.props.menuItem.iconSource === \"themeIcons\") {\n const Icon = this.services.theme.currentTheme.icons[this.props.menuItem.icon];\n if(!Icon) {\n this.services.logger.error(`Menu item ${this.props.menuItem.key} has configured icon ${this.props.menuItem.icon} which does not exist in currentTheme.icons`)\n\n return null;\n }\n\n return (<Icon size={2} title={this.props.menuItem.iconAltText ?? '' } />);\n } else if(this.props.menuItem.iconSource === 'themeImages') {\n const imageURI = this.props.menuItem.icon;\n if(!imageURI) {\n this.services.logger.error(`Menu item ${this.props.menuItem.key} has configured icon ${this.props.menuItem.icon} which does not exist in currentTheme.images`)\n return null;\n }\n return (<Image src={imageURI} alt={this.props.menuItem.iconAltText ?? '' }/>)\n } else {\n return (<Image src={this.props.menuItem.icon} alt={this.props.menuItem.iconAltText ?? '' }/>)\n }\n }\n\n\n private _renderMenuItemContent = () => {\n\n if(this.props.menuItem.imageOnlyRendering) {\n return (\n <GenericSideMenuImageBox>\n {this._renderIcon()}\n </GenericSideMenuImageBox>\n );\n }\n\n return (<>\n <GenericSideMenuItemPreIconBox active={this.props.menuItem.isMatchToCurrentUrl}/>\n <GenericSideMenuItemIconBox active={this.props.menuItem.isMatchToCurrentUrl}>\n {this._renderIcon()}\n </GenericSideMenuItemIconBox>\n <GenericSideMenuItemLabelBox>\n { this.props.menuItem.text }\n </GenericSideMenuItemLabelBox>\n { this.props.withArrow ? <this.services.theme.currentTheme.icons.forwardIcon size={2} /> : null }\n </>);\n\n }\n\n\n\n render() {\n\n let href = this.props.menuItem.getLinkUrl() ?? \"\";\n if(href) {\n href = this.services.location.buildFullUri(href).toString();\n }\n\n return (\n <SideMenuItemContainerComponent className={this.props.className} onClick={this._onClickHandler}>\n <Link href={decodeURI(encodeURI(href))}>\n <GenericSideMenuItemBox active={this.props.menuItem.isMatchToCurrentUrl}>\n {this._renderMenuItemContent()}\n </GenericSideMenuItemBox>\n </Link>\n </SideMenuItemContainerComponent>\n );\n }\n}","import styled from \"styled-components\";\nimport { styledByTheme } from \"../../../../themes/architecture/styled-by-theme\";\n\nconst SideMenuItemContainerDefaultBox = styled.li`\n position: relative;\n display: block;\n border: none;\n margin: 1px 1.2rem 0 1.2rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 0 1.6rem;\n }\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n left: 0;\n width: 100%;\n\n box-sizing: content-box;\n height: 1px;\n background-color: ${({theme}) => theme.colors.backgroundDark};\n box-shadow: 0px 0.35px 0px 0px ${({theme}) => theme.colors.boxBorderContrast};\n margin-bottom: 1px;\n }\n\n &:first-child {\n margin-top: 0;\n &::before {\n display: none;\n }\n }\n`;\n\nconst SideMenuItemContainerCasino777Box = styled(SideMenuItemContainerDefaultBox)`\n &::before {\n box-shadow: 0px 0.25px 0px 0px ${({theme}) => theme.colors.boxBorderContrast};\n }\n`;\n\nconst SideMenuItemContainerMrGreenBox = styled(SideMenuItemContainerDefaultBox)`\n &::before {\n display: none;\n }\n`;\n\nconst SideMenuItemContainerSiBox = styled(SideMenuItemContainerDefaultBox)`\n &::before {\n box-shadow: 0px 0.35px 0px 0px ${({theme}) => theme.colors.boxBorderLighter};\n }\n`;\n\nexport const SideMenuItemContainerBox = styledByTheme(SideMenuItemContainerDefaultBox)\n .forCasino777(SideMenuItemContainerCasino777Box)\n .forMrGreen(SideMenuItemContainerMrGreenBox)\n .forSI(SideMenuItemContainerSiBox)\n .apply();\n","import React, {PropsWithChildren} from \"react\";\nimport { observer } from \"mobx-react\";\nimport { OrbitComponent } from \"../../base-components/orbit-component/orbit-component\";\nimport { SideMenuItemContainerBox } from \"./boxes/side-menu-item-container.box\";\nimport { CyClass } from \"../../../../common/cy-classes\";\nimport classNames from 'classnames';\n\n\ninterface SideMenuItemContainerComponentProps extends PropsWithChildren {\n className?: string;\n onClick?: () => void;\n}\n\n\n@observer\nexport class SideMenuItemContainerComponent extends OrbitComponent<SideMenuItemContainerComponentProps> {\n render() {\n\n return <SideMenuItemContainerBox className={classNames(CyClass(\"cy-menu-item\"), this.props.className)} onClick={this.props.onClick}>\n { this.props.children }\n </SideMenuItemContainerBox>;\n }\n}\n","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport { SideMenuItemsListBox } from \"../side-menu-items/boxes/side-menu-items-list.box\";\nimport {CyClass} from '../../../../common/cy-classes';\nimport {MenuItemKey} from \"../../../services/configurations/config-data-sections/generated-config-const\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\nexport interface SideMenuLinksProps extends ComponentServicesPick<'sideMenu'>{\n menuItemKeys: MenuItemKey[];\n className?: string;\n}\n\n\nconst ComponentBody: React.FC<SideMenuLinksProps> = observer((props) => {\n const menuItems = props.menuItemKeys.map(key => props.sideMenu.getMenuItem(key))\n .filter(menuItem => menuItem.display);\n if (menuItems.length === 0) {\n return null;\n }\n\n return (\n <SideMenuItemsListBox className={props.className}>\n <ul className={CyClass('cy-menu-links-group')} style={{margin: \"0\", listStyleType: \"none\"}}>\n {\n menuItems.map(menuItem => (\n <React.Fragment key={menuItem.key}>\n {menuItem.renderMenuItem()}\n </React.Fragment>)\n )\n }\n </ul>\n </SideMenuItemsListBox>\n )\n})\n\nexport const SideMenuLinksGroup = withServices(ComponentBody, ['sideMenu']);","import {GameImageDefaultBox} from './game-image.default.box';\n\nexport const GameImageBox = GameImageDefaultBox;","import styled, { css } from 'styled-components';\nimport { GAME_BOX_JACKPOT_TEMPLATE } from '../../../css-constants';\nimport { Image } from '../../../../raw-components/image/image';\n\nexport const commonGameImageCssMixin = css`\n position: absolute;\n width: 100%;\n\n .${GAME_BOX_JACKPOT_TEMPLATE} & {\n max-width: 20rem;\n }\n`;\n\nexport const GameImageDefaultBox = styled(Image)<{hide?: boolean; squareIcon?: boolean;}>`\n opacity: ${({hide}) => hide ? 0: 1};\n ${commonGameImageCssMixin}\n /**\n * BUGFIX-1896215 https://dev.azure.com/888holdings/GamingNDL/_workitems/edit/1896215\n * In a scrolling container (in this case orbit swiper), the first animated icon loaded is above all elements (in this case the static image and the number badge)\n * When swiping, if the first animated icon gets out of the viewport and unloads, the problem is transfered to the second animation.\n * Yes, I know, the solution doesn't have any logic. But I tried this long shot and it worked:\n * https://css-tricks.com/forums/topic/safari-for-ios-z-index-ordering-bug-while-scrolling-a-page-with-a-fixed-element/\n * https://stackoverflow.com/questions/16033416/while-scrolling-on-an-ios-device-the-z-index-of-elements-isnt-working\n * https://stackoverflow.com/questions/9807620/ipad-safari-scrolling-causes-html-elements-to-disappear-and-reappear-with-a-dela\n */\n -webkit-transform: translate3d(0,0,0);\n /**\n * Normally, the radius is taken care in game-image-container.default.box, but for Safari, where we encountered the bug solved above\n * the image is rendered in a separate layer and ignores the border radius of the parent\n */\n ${props => props.squareIcon && css`\n border-radius: 15px;\n @media ${props.theme.mediaQuery.lAndBelow} {\n border-radius: 8px;\n }\n `};\n /**\n * Because YES, Safari is the new Internet Explorer!!!\n */\n`;\n","import styled from 'styled-components';\nimport { commonGameImageCssMixin } from '../game-image/game-image.default.box';\n\nconst DefaultBox = styled.div`\n ${commonGameImageCssMixin};\n height: 100%;\n`;\n\nexport const GameImageAnimatedDefaultBox = DefaultBox;","import {GameImageAnimatedDefaultBox} from './game-image-animated.default.box';\n\nexport const GameImageAnimatedBox = GameImageAnimatedDefaultBox;","import React from 'react';\nimport { OrbitComponent } from '../../../../base-components/orbit-component/orbit-component';\nimport { GameImageAnimatedBox } from '../../boxes/game-image/game-image-animated.box';\nimport { IGameAnimatedIconRegistrationResult } from '../../../../../services/game-animated-icons-manager/game-animated-icons-manager.service.interface';\n\ninterface IGameImageComponentProps {\n animationJsonUrl: string;\n animationTiming: {\n delay: number;\n interval: number;\n }\n width: number;\n height: number;\n useSquareIcons?: boolean;\n onAnimationLoad?(): void;\n onAnimationWillUnload?(): void;\n}\n\nexport class GameImageAnimatedComponent extends OrbitComponent<IGameImageComponentProps> {\n private animatedImageWrapper: HTMLElement | null = null;\n private pixiAnimationRegistration: IGameAnimatedIconRegistrationResult | null = null;\n\n private _captureAnimatedImageElementRef = (element: HTMLElement) => {\n this.animatedImageWrapper = element;\n // cancelAnimationRequest\n if (this.pixiAnimationRegistration) {\n this.pixiAnimationRegistration.unregister();\n this.pixiAnimationRegistration = null;\n }\n if (element) {\n // requestAnimation\n this.loadPixiAnimatedIcon();\n }\n this.animatedImageWrapper = element;\n };\n\n private async loadPixiAnimatedIcon() {\n this.pixiAnimationRegistration = this.services.gameAnimatedIconsManager.register({\n jsonUrl: this.props.animationJsonUrl,\n size: {\n width: this.props.width, height: this.props.height\n },\n wrapper: this.animatedImageWrapper,\n timings: this.props.animationTiming,\n onAnimationLoad: this.props.onAnimationLoad,\n onAnimationWillUnload: this.props.onAnimationWillUnload\n });\n }\n\n render() {\n return <GameImageAnimatedBox\n ref={this._captureAnimatedImageElementRef}\n />\n }\n}\n","import React from 'react';\nimport {Check} from \"@sparkware/app-utils\";\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {GameImageBox} from '../../boxes/game-image/game-image.box';\nimport {GameImageAnimatedComponent} from './game-image-animated.component';\nimport { OrbitComponentWithState } from '../../../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport {SINGLE_GAME_IMAGE} from '../../../css-constants';\nimport { AspectRatioContainerComponent } from '../../../../raw-components/aspect-ratio-container/aspect-ratio-container.component';\n\nexport type GameIconAnimationState = \"ab-disabled\" | \"unavailable\" | \"static\" | \"animated\";\n\nexport interface GameIconComponentProps {\n gameInfo: GameInfo;\n useSquareIcons?: boolean;\n useLazyLoading?: boolean;\n onLoad?(): void;\n onLoadStart?(): void;\n onSettled?(): void;\n onAnimationIconStateChange?(state: GameIconAnimationState): void;\n disableAnimation?: boolean;\n}\n\nexport interface GameIconComponentState {\n loadingAnimation?: boolean;\n animationJsonUrl?: string;\n hideStaticImage?: boolean;\n}\n\nexport const GameImageComponent = observer(\n class GameImageComponent extends OrbitComponentWithState<GameIconComponentProps, GameIconComponentState> {\n constructor(props: GameIconComponentProps) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {\n if (this.props.onAnimationIconStateChange) {\n this.props.onAnimationIconStateChange(!this.state.animationJsonUrl ? \"unavailable\" : \"static\");\n }\n }\n\n private _loadAnimatedIconTimeout = null;\n\n componentWillUnmount() {\n super.componentWillUnmount();\n if(this._loadAnimatedIconTimeout) {\n clearTimeout(this._loadAnimatedIconTimeout);\n this._loadAnimatedIconTimeout = null;\n }\n }\n private onSettled = () => {\n this.setState({loadingAnimation: false});\n if (this.props.onSettled) {\n this.props.onSettled();\n }\n\n if (this.props.disableAnimation) {\n return;\n }\n\n this.attemptLoadAnimatedIcon();\n };\n\n private attemptLoadAnimatedIcon = () => {\n this._loadAnimatedIconTimeout = setTimeout(() => {\n let data = this.props.gameInfo.getGameImage({squareIcon: this._shouldUseSquareIcons(), animatedIcon: true});\n if (data) {\n this.setState({animationJsonUrl: data});\n }\n this._loadAnimatedIconTimeout = null;\n }, this.props.gameInfo.getAnimatedImageTimings().delay || 0);\n };\n\n private onAnimationLoad = () => {\n this.setState({hideStaticImage: true});\n if (this.props.onAnimationIconStateChange) {\n this.props.onAnimationIconStateChange(\"animated\");\n }\n };\n\n private onAnimationWillUnload = () => {\n this.setState({hideStaticImage: false});\n if (this.props.onAnimationIconStateChange) {\n this.props.onAnimationIconStateChange(\"static\");\n }\n };\n\n private _shouldUseSquareIcons = () => {\n if (Check.isNullOrUndefined(this.props.useSquareIcons)) {\n return this.services.theme.shouldUseSquareIcons;\n }\n return this.props.useSquareIcons;\n }\n\n render() {\n const seoAlt = this.props.gameInfo.getImageSeoAlt();\n const imgUrl = this.props.gameInfo.getGameImage({squareIcon: this._shouldUseSquareIcons()});\n const useLazyLoad = Check.isNullOrUndefined(this.props.useLazyLoading) ? true : this.props.useLazyLoading;\n\n return <AspectRatioContainerComponent\n {...this.services.games.getGameImageExpectedSizes(this._shouldUseSquareIcons())}\n isLoading={this.state.loadingAnimation}\n >\n { this.state.animationJsonUrl ? <GameImageAnimatedComponent\n animationJsonUrl={this.state.animationJsonUrl}\n animationTiming={this.props.gameInfo.getAnimatedImageTimings()}\n useSquareIcons={this._shouldUseSquareIcons()}\n {...this.services.games.getGameImageExpectedSizes(this._shouldUseSquareIcons(), true)}\n onAnimationLoad={this.onAnimationLoad}\n onAnimationWillUnload={this.onAnimationWillUnload}\n /> : null }\n <GameImageBox\n hide={this.state.hideStaticImage}\n src={imgUrl}\n alt={seoAlt}\n lazy = {useLazyLoad}\n className={`cy-game-image ${SINGLE_GAME_IMAGE}`}\n fallbackSrc={this.props.gameInfo.getGameImagePlaceHolderUrl(this._shouldUseSquareIcons())}\n {...this.services.games.getGameImageExpectedSizes(this._shouldUseSquareIcons())}\n squareIcon={this._shouldUseSquareIcons()}\n onLoadStart={() => {\n this.setState({loadingAnimation: true});\n }}\n onLoad={this.props.onLoad}\n onSettled={this.onSettled}\n />\n </AspectRatioContainerComponent>;\n }\n }\n);\n","export const GAME_BOX = 'game-box';\nexport const GAME_BOX_JACKPOT_TEMPLATE = 'game-box-jackpot-template';\nexport const TWO_LINES_TITLE = 'two-lines-title';\nexport const MULTIPLE_LINES_TITLE = 'multiple-lines-title';\nexport const ENABLE_HOVER_ANIMATION = 'enable-hover-animation';\nexport const SWIPER_MODE = 'swiper-mode';\nexport const GAME_IMAGE_CONTAINER = 'game-image-container';\nexport const GRID_GAMES_LIST = 'grid-games-list'; //TODO - I should do something with this when I will refactor games grid list\nexport const SINGLE_GAME_IMAGE = 'single-game-image';\n","import styled from 'styled-components';\n\nexport const GameDetailsContainerDefaultBox = styled.div`\n position: relative;\n flex: 1 0 auto;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n text-align: center;\n font-size: 1rem;\n align-items: flex-start;\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n font-size: 0.85rem;\n justify-content: space-between;\n min-height: 4rem;\n }\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n align-items: center;\n font-size: 0.7rem;\n }\n`;\n","import {GameDetailsContainerDefaultBox} from './game-details-container.default.box';\n\nexport const GameDetailsContainerBox = GameDetailsContainerDefaultBox;","import styled from 'styled-components';\nimport { styledByDevice } from '../../../../../themes/architecture/styled-by-device';\nimport { CssRule } from '../../../../../themes/architecture/css-helpers/css-rule';\n\nconst DefaultBox = styled.div`\n position: relative;\n width: 40%;\n max-width: 20rem;\n margin-left: 0;\n margin-right: 3.5rem;\n overflow: visible;\n background-size: 100%;\n background-image: url(\"${props => props.theme.assets.images.games_icons_background.BGGameBlack_png.toString()}\");\n background-repeat: no-repeat;\n\n &:after {\n content: \"\";\n background-image: url(\"${props => props.theme.assets.images.vertical_line_glow_png.toString()}\");\n background-repeat: no-repeat;\n background-size: contain;\n position: absolute;\n top: 0;\n height: 100%;\n transform: translateX(100%);\n }\n`;\n\n\nconst PcBox = styled(DefaultBox)`\n &:after {\n right: -10px;\n width: 40px;\n\n ${CssRule.For.RTL.build()} & {\n right: 28px;\n }\n }\n\n\n`;\n\nconst MobileBox = styled(DefaultBox)`\n\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n &:after {\n right: -10px;\n width: 40px;\n ${CssRule.For.RTL.build()} & {\n right: 28px;\n }\n }\n }\n\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n &:after {\n right: -8%;\n width: 25px;\n\n ${CssRule.For.RTL.build()} & {\n right: 80%;\n }\n }\n }\n`;\n\nexport const GameImageContainerDefaultBox = styledByDevice(PcBox, MobileBox);\n","import {GameImageContainerDefaultBox} from './game-image-container.default.box';\n\nexport const GameImageContainerBox = GameImageContainerDefaultBox;","import styled from 'styled-components';\nimport {SWIPER_MODE} from '../../../css-constants';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\n\nconst DefaultBox = styled.div`\n display: flex;\n align-items: center;\n width: 32%;\n margin: 10px 1% 0 0.25rem;\n padding-left: 0;\n padding-right: 0;\n padding-bottom: 5rem;\n cursor: pointer;\n user-select: none;\n`;\n\nconst PcBox = styled(DefaultBox)`\n justify-content: center;\n &.${SWIPER_MODE} {\n flex-shrink: 0;\n }\n`;\n\nconst MobileBox = styled(DefaultBox)`\n flex-direction: row;\n justify-content: space-around;\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n width: 49%;\n flex-shrink: 0;\n padding: 0.5rem;\n margin-right:0;\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: 100%;\n padding: 0 2em 1em;\n margin-left:0;\n margin-right:0;\n margin-bottom: 1rem;\n }\n`;\n\n\n\nexport const GameDefaultBox = styledByDevice(PcBox, MobileBox);\n\n","import {GameDefaultBox} from './game.default.box';\n\nexport const GameBox = GameDefaultBox;","import styled from 'styled-components';\n\nexport const AmountContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n width: 100%;\n height: 100%;\n min-height: 2.5rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n min-height: 2.0rem;\n }\n`;\n","import {styledBox} from '../../../../../themes/architecture/styled-box';\n\nexport const GameDetailsContainerBox = styledBox('GameDetailsContainerBox');","import styled, {css} from 'styled-components';\nimport { ORBIT_TAP } from '../../../../../themes/css-global-classes';\nimport { styledByDevice } from '../../../../../themes/architecture/styled-by-device';\n\n\ninterface GameImageContainerProps {\n isLoading?: boolean;\n squareIcon?: boolean;\n isCasinoGameIcon?: boolean;\n}\n\nfunction getPlaceholderBackground(theme, isLoading: boolean, isSquareIcon: boolean, isCasinoGameIcon: boolean): string {\n\n if (isLoading) {\n return theme.assets.images.empty_image_gif.toString();\n }\n\n if (isCasinoGameIcon) {\n\n if (isSquareIcon) {\n return theme.assets.images.games_icons_background.BGGameBlackSquare_png.toString();\n }\n\n return theme.assets.images.games_icons_background.BGcardandtable_png.toString();\n }\n\n if (isSquareIcon) {\n return theme.assets.images.games_icons_background.BGGameBlackSquare_png.toString();\n }\n\n return theme.assets.images.games_icons_background.BGGameBlack_png.toString();\n}\n\n//.game-item-image\nconst DefaultBox = styled.div<GameImageContainerProps>`\n position: relative;\n width: 100%;\n overflow: hidden;\n max-width: 21rem;\n margin: auto;\n background: url(${({theme, squareIcon, isLoading, isCasinoGameIcon}) => getPlaceholderBackground(theme, isLoading, squareIcon, isCasinoGameIcon)}) no-repeat center center;\n background-size: 100%;\n ${props => props.squareIcon && css`\n border-radius: 15px;\n background-size: 96%;\n `};\n\n &::after {\n position: absolute;\n display: ${({isLoading}) => isLoading ? \"block\" : \"none\"};\n content: \"\";\n top: ${({squareIcon}) => squareIcon ? \"0\" : \"1rem\"};\n left: ${({squareIcon}) => squareIcon ? \"0\" : \"1rem\"};\n right: ${({squareIcon}) => squareIcon ? \"0\" : \"1rem\"};\n bottom: ${({squareIcon}) => squareIcon ? \"0\" : \"1.5rem\"};\n background: radial-gradient(rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0.1));\n\n border-radius: ${({squareIcon}) => squareIcon ? \"1.5rem\" : \"35%\"};\n animation: LoadingAnimation 1s linear 3;\n }\n\n @keyframes LoadingAnimation {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n\nexport const MobileBox = styled(DefaultBox)`\n transform: none;\n\n &.${ORBIT_TAP}, &:active {\n transform: scale(0.95);\n }\n\n ${props => props.squareIcon && css`\n border-radius: 8px;\n `};\n`;\n\nexport const PcBox = DefaultBox;\n\nexport const GameImageContainerDefaultBox = styledByDevice(PcBox, MobileBox);","import styled from 'styled-components';\n\nimport {PcBox as BasePcBox, MobileBox as BaseMobileBox} from './game-image-container.default.box';\nimport {LOBBY_PAGE} from '../../../../../themes/css-global-classes';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\nimport {SINGLE_GAME_IMAGE} from '../../../css-constants';\n\n\nfunction common(): string {\n return `\n max-width: 19rem;\n & > .${SINGLE_GAME_IMAGE} {\n top: 4px;\n position: relative;\n }\n `;\n}\n\nconst PcBox = styled(BasePcBox)`\n ${common()}\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n &img {\n min-height: 139px\n .${LOBBY_PAGE} & {\n min-height: 125px;\n }\n }\n }\n`;\n\nconst MobileBox = styled(BaseMobileBox)`\n ${common()}\n`;\n\nexport const GameImageContainerCasino777Box = styledByDevice(PcBox, MobileBox);\n","import {GameImageContainerDefaultBox} from './game-image-container.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {GameImageContainerCasino777Box} from './game-image-container.casino777.box';\n\nexport const GameImageContainerBox = styledByTheme(GameImageContainerDefaultBox).forCasino777(GameImageContainerCasino777Box).apply();","import styled from 'styled-components';\nimport { MULTIPLE_LINES_TITLE, TWO_LINES_TITLE } from '../../../css-constants';\n\nexport const GameTitleDefaultBox = styled.div<{ hasTwoLinesTitle?: boolean }>`\n position: relative;\n text-align: center;\n color: ${props => props.theme.colors.backgroundContrast};\n opacity: 1;\n font-size: 1.4rem;\n line-height: 1.3;\n width: 100%;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n direction: initial;\n padding-bottom: 2px;\n\n &.${TWO_LINES_TITLE} {\n max-width: 90%;\n white-space: initial;\n }\n @media ${({ theme }) => theme.mediaQuery.lAndBelow} {\n font-size: 1.2rem;\n padding-bottom: 0;\n\n &.${MULTIPLE_LINES_TITLE} {\n &::after {\n content: \"...\";\n position: absolute;\n top: 16px;\n }\n }\n }\n\n @media ${({ theme }) => theme.mediaQuery.sAndBelow} {\n font-size: 1.2rem;\n }\n`;\n","import styled from 'styled-components';\nimport {GameTitleDefaultBox} from './game-title.default.box';\n\nexport const GameTitleCasino777Box = styled(GameTitleDefaultBox)`\n color: ${props => props.theme.colors.textContrast};\n ${({theme}) => theme.font.presets.bold};\n font-size: 1.5rem;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 1.2rem;\n }\n`\n","import styled from \"styled-components\";\nimport {GameTitleDefaultBox} from \"./game-title.default.box\";\n\nexport const GameTitleCipBox = styled(GameTitleDefaultBox)`\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n ${({theme}) => theme.font.presets.regular};\n }\n`","import styled from 'styled-components';\nimport {GameTitleDefaultBox} from './game-title.default.box';\n\nexport const GameTitleSIBox = styled(GameTitleDefaultBox)`\n font-weight: bold;\n`\n","import styled from 'styled-components';\nimport {GameTitleDefaultBox} from './game-title.default.box';\n\nexport const GameTitleMrGreenBox = styled(GameTitleDefaultBox)`\n ${({theme}) => theme.font.presets.light}\n`;\n","import {GameTitleDefaultBox} from './game-title.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {GameTitleCasino777Box} from './game-title.casino777.box';\nimport {GameTitleCipBox} from \"./game-title.cip.box\";\nimport {GameTitleSIBox} from \"./game-title.si.box\";\nimport {GameTitleMrGreenBox} from './game-title.mrgreen.box';\n\nexport const GameTitleBox = styledByTheme(GameTitleDefaultBox)\n .forCip(GameTitleCipBox)\n .forWsopCip(GameTitleCipBox)\n .forSI(GameTitleSIBox)\n .forSICis(GameTitleSIBox)\n .forCasino777(GameTitleCasino777Box)\n .forMrGreen(GameTitleMrGreenBox).apply();","import styled from 'styled-components';\nimport {SWIPER_MODE} from '../../../css-constants';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\nimport {HOME_PAGE, LOBBY_PAGE} from '../../../../../themes/css-global-classes';\n\nexport interface GameBoxProps {\n squareGameIcon: boolean;\n}\n\nconst DefaultBox = styled.div<GameBoxProps>`\n position: relative;\n margin-top: 10px;\n margin-bottom: 3rem;\n width: calc(100% / 7);\n text-align: center;\n cursor: pointer;\n user-select: none;\n\n\n &.${SWIPER_MODE} {\n flex-shrink: 0;\n justify-content: center;\n }\n`;\n\nexport const PcBox = styled(DefaultBox)`\n .${HOME_PAGE} &.${SWIPER_MODE} {\n width: 16.6667%;\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n .${LOBBY_PAGE} & {\n padding: 0 1%;\n width: calc(100% / 7);\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n margin-right: ${props => props.squareGameIcon ? '15px' : '0'};\n }\n`;\n\nexport const MobileBox = styled(DefaultBox)`\n padding: 0 4px;\n margin-bottom: 0;\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n width: 16.667%;\n &.${SWIPER_MODE} {\n width: 16%;\n }\n }\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n width: 16.667%;\n &.${SWIPER_MODE} {\n width: 16.1%;\n }\n }\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n width: 20%;\n &.${SWIPER_MODE} {\n width: 19%;\n }\n }\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: 33.3333%;\n &.${SWIPER_MODE} {\n width: 31%;\n }\n }\n`;\n\nexport const GameDefaultBox = styledByDevice(PcBox, MobileBox);","import styled, { css } from 'styled-components';\nimport {PcBox as BasePcBox, MobileBox as BaseMobileBox} from './game.default.box';\nimport {SWIPER_MODE} from '../../../css-constants';\nimport {LOBBY_PAGE} from '../../../../../themes/css-global-classes';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\n\nconst common = css`\n ${({theme}) => theme.font.presets.bold};\n`;\n\nconst PcBox = styled(BasePcBox)`\n ${common}\n margin-bottom: 5.5rem;\n\n .${SWIPER_MODE} &{\n height:24rem;\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n .${LOBBY_PAGE} & {\n width:14.25%;\n padding: 0 1%;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n .${SWIPER_MODE} & {\n height:22rem;\n }\n }\n`;\n\nconst MobileBox = styled(BaseMobileBox)`\n ${common}\n\n margin-bottom: 0;\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n .${SWIPER_MODE} &{\n height: 18rem;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n .${SWIPER_MODE} &{\n height: 26rem;\n }\n }\n`;\n\nexport const GameCasino777Box = styledByDevice(PcBox, MobileBox);","import styled from \"styled-components\";\nimport {GameDefaultBox} from \"./game.default.box\";\n\nexport const GameCisBox = styled(GameDefaultBox)`\n margin-bottom: 0;\n margin-top: 0\n`;","import {GameDefaultBox} from './game.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {GameCasino777Box} from './game.casino777.box';\nimport {GameCisBox} from \"./game.cis.box\";\n\n// TODO: address this any!!!!\nexport const GameBox: any = styledByTheme(GameDefaultBox)\n .forCis(GameCisBox)\n .forCasino777(GameCasino777Box)\n .apply();","import styled from \"styled-components\";\n\ninterface SkeletonAnimatedButtonProps {\n width: string;\n height: string;\n borderRadius?: string;\n}\n\nexport const SkeletonAnimatedButton = styled.div<SkeletonAnimatedButtonProps>`\n\n width: ${({width}) => width};\n height: ${({height}) => height};\n margin-left: auto;\n\n background: rgba(255, 255, 255, 0.25);\n\n border-radius: ${({borderRadius}) => borderRadius || \"5px\"};\n animation: PulsatingAnimation 2.5s alternate infinite;\n\n @keyframes PulsatingAnimation {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.25;\n }\n }\n`;\n","import styled from \"styled-components\";\n\ninterface SkeletonAnimatedRectangleProps {\n top?: boolean;\n left?: boolean;\n right?: boolean;\n bottom?: boolean;\n width: string;\n height: string;\n borderRadius?: string;\n}\n\nexport const SkeletonAnimatedRectangle = styled.div<SkeletonAnimatedRectangleProps>`\n\n position: absolute;\n\n top: ${({top}) => top ? \"1rem\" : \"initial\"};\n left: ${({left}) => left ? \"1rem\" : \"initial\"};\n right: ${({right}) => right ? \"1rem\" : \"initial\"};\n bottom: ${({bottom}) => bottom ? \"1rem\" : \"initial\"};\n\n width: ${({width}) => width};\n height: ${({height}) => height};\n\n background: rgba(0, 0, 0, 0.25);\n\n border-radius: ${({borderRadius}) => borderRadius || \"5px\"};\n animation: PulsatingAnimation 2s alternate infinite;\n\n @keyframes PulsatingAnimation {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0.5;\n }\n }\n`;\n","import styled from \"styled-components\";\n\nexport const VideoTileSkeletonDefaultbox = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: ${({theme}) => theme.colors.backgroundLight.toString()};\n`;\n","import {VideoTileSkeletonDefaultbox} from \"./video-tile-skeleton.defaultbox\";\n\nexport const VideoTileSkeletonbox = VideoTileSkeletonDefaultbox;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport {Image} from \"../raw-components/image/image\";\nimport {GameBox} from \"./regular-template/boxes/game/game.box\";\nimport {GameBox as JackpotGameBox} from \"../single-game/jackpot-template/boxes/game/game.box\";\nimport {GameTitleBox} from \"./regular-template/boxes/game-title/game-title.box\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {GameImageContainerBox} from \"./regular-template/boxes/game-image-container/game-image-container.box\";\nimport {GameImageContainerBox as JackpotGameImageContainerBox} from \"../single-game/jackpot-template/boxes/game-image-container/game-image-container.box\";\nimport {GameDetailsContainerBox} from \"./regular-template/boxes/game-details-container/game-details-container.box\";\nimport {GameDetailsContainerBox as JackpotGameDetailsContainerBox} from \"../single-game/jackpot-template/boxes/game-details-container/game-details-container.box\";\nimport {AspectRatioContainerComponent} from \"../raw-components/aspect-ratio-container/aspect-ratio-container.component\";\nimport {JACKPOTS_ITEM, LIVE_STREAMING_ITEM, STATIC_VIDEO_ITEM} from \"../../themes/css-global-classes\";\nimport {VideoTileBox} from \"../live-streaming-tile/video-common-components/video-tile/boxes/video-tile.box\";\nimport {SkeletonAnimatedButton} from \"../live-streaming-tile/video-common-components/video-tile-skeleton/skeleton-animated-button.box\";\nimport {SkeletonAnimatedRectangle} from \"../live-streaming-tile/video-common-components/video-tile-skeleton/skeleton-animated-rectangle.box\";\nimport {VideoTileFooterBox} from \"../live-streaming-tile/video-common-components/video-tile-footer/boxes/video-tile-footer.box\";\nimport {VideoTileSkeletonbox} from \"../live-streaming-tile/video-common-components/video-tile-skeleton/video-tile.skeletonbox\";\nimport { CyClass } from \"../../../common/cy-classes\";\nimport { AmountContainerBox } from \"./regular-template/boxes/amount-container/amount-container.box\";\n\nconst DummyTextBox = styled.div`\n background: linear-gradient(90deg, rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.25));\n background-size: 400px 100%;\n border-radius: 5px;\n animation: TextLoadingAnimation 1s linear infinite;\n\n @keyframes TextLoadingAnimation {\n 0% {\n background-position-x: -200px;\n }\n 100% {\n background-position-x: 200px;\n }\n }\n`;\n\nconst DummyTextBoxAbsolute = styled(DummyTextBox)`\n position: absolute;\n top: 0;\n left: 25%;\n right: 25%;\n bottom: 0;\n`;\n\ninterface IDummyTextBoxRelativeProps {\n small?: boolean;\n}\n\nconst DummyTextBoxRelative = styled(DummyTextBox)<IDummyTextBoxRelativeProps>`\n position: relative;\n width: ${({small}) => small ? \"50%\" : \"80%\"};\n height: 2rem;\n margin-bottom: 1rem;\n`;\n\nexport interface ISingleGameSkeletonComponentProps {\n templateType: string;\n useSquareIcons: boolean;\n}\n\nexport class SingleGameSkeletonComponent extends OrbitComponent<ISingleGameSkeletonComponentProps> {\n\n private _getPlaceholderImageUrl = () => {\n if (this.props.useSquareIcons) {\n return this.services.theme.currentTheme.assets.images.placeholder_game_icon_sq_png.toString();\n } else {\n return this.services.theme.currentTheme.assets.images.placeholder_game_icon_png.toString();\n }\n }\n private _renderRegularGameSkeleton() {\n return (\n <GameBox squareGameIcon={true} className={\"swiper-mode\"}>\n <GameImageContainerBox squareIcon={this.props.useSquareIcons} isLoading={true}>\n <AspectRatioContainerComponent {...this.services.games.getGameImageExpectedSizes(this.props.useSquareIcons)} isLoading={true} />\n </GameImageContainerBox>\n <GameDetailsContainerBox squareGameIcon={this.props.useSquareIcons}>\n <GameTitleBox> \n <DummyTextBoxAbsolute/>\n </GameTitleBox>\n <AmountContainerBox> </AmountContainerBox>\n </GameDetailsContainerBox>\n </GameBox>\n );\n }\n\n private _renderJackpotGameSkeleton() {\n return (\n <JackpotGameBox>\n <JackpotGameImageContainerBox>\n <AspectRatioContainerComponent {...this.services.games.getGameImageExpectedSizes(this.props.useSquareIcons)} isLoading={true}>\n <Image src={this._getPlaceholderImageUrl()}/>\n </AspectRatioContainerComponent>\n </JackpotGameImageContainerBox>\n <JackpotGameDetailsContainerBox>\n <DummyTextBoxRelative/>\n <DummyTextBoxRelative small/>\n </JackpotGameDetailsContainerBox>\n </JackpotGameBox>\n );\n }\n\n private _renderVideoSkeleton() {\n return (\n <VideoTileBox className={CyClass(\"cy-orbit-swiper-streaming-tile\")}>\n <VideoTileSkeletonbox>\n <AspectRatioContainerComponent width={16} height={9}>\n <SkeletonAnimatedRectangle top right width={\"25px\"} height={\"25px\"} borderRadius={\"50%\"}/>\n <SkeletonAnimatedRectangle bottom left width={\"100px\"} height={\"25px\"} borderRadius={\"10px\"}/>\n <SkeletonAnimatedRectangle bottom right width={\"100px\"} height={\"25px\"} borderRadius={\"2px\"}/>\n </AspectRatioContainerComponent>\n <VideoTileFooterBox>\n {this.services.mediaQuery.xlAndAbove ?\n <SkeletonAnimatedButton width=\"135px\" height=\"40px\" borderRadius=\"20px\" /> :\n <SkeletonAnimatedButton width=\"115px\" height=\"30px\" borderRadius=\"15px\" /> }\n </VideoTileFooterBox>\n </VideoTileSkeletonbox>\n </VideoTileBox>\n );\n }\n\n render () {\n\n if (this.props.templateType === JACKPOTS_ITEM) {\n return this._renderJackpotGameSkeleton();\n }\n\n if ([LIVE_STREAMING_ITEM, STATIC_VIDEO_ITEM].includes(this.props.templateType)) {\n return this._renderVideoSkeleton();\n }\n\n return this._renderRegularGameSkeleton();\n }\n}\n","import styled, { css } from 'styled-components';\nimport { Image } from '../../../../raw-components/image/image';\n\nexport const GameBadgeBox = styled(Image) <{ useSquareIcons?: boolean; }>`\n position: absolute;\n left: 0;\n \n ${props => props.useSquareIcons ? css`\n bottom: 0;\n width: 33%;\n height: 27%;\n \n max-width: 49px;\n max-height: 55px;\n ` \n : css`\n top: 0;\n height: 24%;\n width: 23%;\n `}\n`;\n","import styled, { css } from \"styled-components\";\n\nexport const GameBadgeFlipperWrapper = styled.div <{ useSquareIcons?: boolean; }>`\n position: absolute;\n left: 0;\n\n background-color: transparent;\n perspective: 1000px;\n \n ${props => props.useSquareIcons ? css`\n bottom: 0;\n width: 33%;\n height: 27%;\n \n max-width: 49px;\n max-height: 55px;\n ` : css`\n height: 24%;\n top: 0;\n width: 23%;\n `}\n`;\n","import styled from \"styled-components\";\n\nexport const GameBadgeFlippeInner= styled.div`\n position: relative;\n width: 100%;\n height: 100%;\n text-align: center;\n transition: transform 0.8s;\n transform-style: preserve-3d;\n\n animation: flip 5s ease-in-out infinite;\n animation-direction: alternate;\n\n @keyframes flip {\n 0% { transform: rotateY(0deg); }\n 45% { transform: rotateY(0deg); }\n 50% { transform: rotateY(180deg); }\n 100% { transform: rotateY(180deg); }\n }\n`;\n","\nimport styled from \"styled-components\";\n\nexport const GameBadgeFlipperFront = styled.div`\n position: absolute;\n width: 100%;\n height: 100%;\n backface-visibility: hidden;\n\n img {\n width: 100%;\n height: 100%;\n }\n`;\n","\nimport styled from \"styled-components\";\n\nexport const GameBadgeFlipperBack = styled.div`\n position: absolute;\n width: 100%;\n height: 100%;\n backface-visibility: hidden;\n transform: rotateY(180deg);\n\n img {\n width: 100%;\n height: 100%;\n }\n`;\n","import { observer } from 'mobx-react';\nimport { GameBadgeBox } from '../../boxes/game-badge/game-badge.box';\nimport { GameBadgeFlipperWrapper } from '../../boxes/game-badge-flipper/game-badge-flipper-wrapper.box';\nimport { GameBadgeFlippeInner } from '../../boxes/game-badge-flipper/game-badge-flipper-inner.box';\nimport { GameBadgeFlipperFront } from '../../boxes/game-badge-flipper/game-badge-flipper-front.box';\nimport { GameBadgeFlipperBack } from '../../boxes/game-badge-flipper/game-badge-flipper-back.box';\nimport { Image } from '../../../../raw-components/image/image';\n\nexport interface GameBadgeFliperComponentProps {\n badgeUrl?: string;\n flipBadgeUrl?: string;\n useSquareIcons?: boolean;\n}\n\n\nexport const GameBadgeFliperComponent: React.FC<GameBadgeFliperComponentProps> = observer((props) => {\n if (!props.badgeUrl && !props.flipBadgeUrl) {\n return null\n }\n\n if (!props.flipBadgeUrl) {\n return (<GameBadgeBox lazy src={props.badgeUrl} useSquareIcons={props.useSquareIcons} className='cy-game-badge' />)\n }\n\n if (!props.badgeUrl) {\n return (<GameBadgeBox lazy src={props.flipBadgeUrl} useSquareIcons={props.useSquareIcons} className='cy-game-badge' />)\n }\n\n return (\n <GameBadgeFlipperWrapper useSquareIcons={props.useSquareIcons}>\n <GameBadgeFlippeInner>\n <GameBadgeFlipperFront>\n <Image lazy src={props.badgeUrl} className='cy-game-badge' />\n </GameBadgeFlipperFront>\n <GameBadgeFlipperBack>\n <Image lazy src={props.flipBadgeUrl} className='cy-game-badge' />\n </GameBadgeFlipperBack>\n </GameBadgeFlippeInner>\n </GameBadgeFlipperWrapper>\n )\n});","import React from 'react';\nimport { GameImageComponent, GameIconAnimationState } from '../game-image/game-image.component';\nimport { observer } from 'mobx-react';\nimport { TapHandler } from '../../../../tap-handler/tap-handler.component';\nimport { AnyStyledComponent } from 'styled-components';\nimport { GameInfo } from '../../../../../services/games/game-info';\nimport { GAME_IMAGE_CONTAINER } from '../../../css-constants';\nimport { OrbitComponentWithState } from '../../../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport { GameBadgeFliperComponent } from '../game-badge-fliper/game-badge-fliper.component';\n\ninterface GameImageContainerComponentState {\n isLoading: boolean;\n}\n\nexport interface GameGameImageContainerComponentProps {\n gameInfo: GameInfo;\n box: AnyStyledComponent;\n playRealGameButton: React.ReactNode | null;\n onOpenRealGame: () => void;\n useSquareIcons?: boolean;\n onAnimationIconStateChange?(state: GameIconAnimationState): void;\n}\n\n\nexport const GameImageContainerComponent = observer(\n class GameImageContainerComponent extends OrbitComponentWithState<GameGameImageContainerComponentProps, GameImageContainerComponentState> {\n\n constructor(props) {\n super(props);\n\n this.state = {\n isLoading: true\n };\n }\n\n private _handleImageDoneLoading = () => {\n this.setState({ isLoading: false });\n }\n\n render() {\n //className=\"game-item-image\"\n const gameItemImageRef: any = React.createRef();\n const Box = this.props.box;\n\n return (\n <TapHandler enabled={this.props.gameInfo.allowTap} elementRef={gameItemImageRef}>\n <Box className={`cy-game-image-container ${GAME_IMAGE_CONTAINER}`}\n ref={gameItemImageRef}\n onClick={this.props.onOpenRealGame}\n isLoading={this.state.isLoading}\n squareIcon={this.props.useSquareIcons}\n isCasinoGameIcon={this.props.gameInfo.isCardOrTableGame}\n >\n <GameImageComponent\n gameInfo={this.props.gameInfo} useSquareIcons={this.props.useSquareIcons} onSettled={this._handleImageDoneLoading}\n onAnimationIconStateChange={this.props.onAnimationIconStateChange}\n />\n {this.props.playRealGameButton}\n <GameBadgeFliperComponent\n useSquareIcons={this.props.useSquareIcons}\n badgeUrl={this.props.gameInfo.badgeUrl || undefined}\n flipBadgeUrl={this.props.gameInfo.flipBadgeUrl || undefined}\n />\n </Box>\n </TapHandler>);\n }\n }\n);\n","import styled from 'styled-components';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\n\nconst DefaultBox = styled.div`\n text-align: center;\n opacity: 1;\n color: ${props => props.theme.colors.brandSecondary};\n`;\n\nexport const PcBox = styled(DefaultBox)`\n font-size: 1.4rem;\n font-weight: 600;\n`;\n\nexport const MobileBox = styled(DefaultBox)`\n font-size: 1.3rem;\n font-weight: 400;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 0.9rem;\n }\n`;\n\nexport const MinMaxBetAmountDefaultBox = styledByDevice(PcBox, MobileBox);\n","import styled, { css } from 'styled-components';\nimport {PcBox as BasePcBox, MobileBox as BaseMobileBox} from './min-max-bet-amount.default.box';\nimport {styledByDevice} from '../../../../../themes/architecture/styled-by-device';\n\nconst common = css`\n color: ${props => props.theme.colors.dangerLight};\n font-weight: 600;\n ${({theme}) => theme.font.presets.bold};\n`;\n\nconst PcBox = styled(BasePcBox)`\n ${common}\n font-size: 1.4rem;\n`;\n\nconst MobileBox = styled(BaseMobileBox)`\n ${common}\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n font-size: 1.4rem;\n top: 2rem;\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 1.2rem;\n }\n`;\n\n\nexport const MinMaxBetAmountCasino777Box = styledByDevice(PcBox, MobileBox);","import styled from 'styled-components';\nimport {MinMaxBetAmountDefaultBox} from './min-max-bet-amount.default.box';\n\nexport const MinMaxBetAmountSIBox = styled(MinMaxBetAmountDefaultBox) `\n color: ${({theme}) => theme.colors.textLight};\n ${({theme}) => theme.font.presets.bold};\n`;\n","import styled from 'styled-components';\nimport {MinMaxBetAmountDefaultBox} from './min-max-bet-amount.default.box';\nimport {baseColors} from '../../../../../themes/definitions/mrgreen/base-colors';\n\nexport const MinMaxBetAmountMrGreenBox = styled(MinMaxBetAmountDefaultBox)`\n color: ${baseColors.gray033};\n`;\n","import styled from 'styled-components';\nimport {MinMaxBetAmountDefaultBox} from './min-max-bet-amount.default.box';\n\n\nexport const MinMaxBetAmountCisBox = styled(MinMaxBetAmountDefaultBox)`\n`;\n","import {MinMaxBetAmountDefaultBox} from './min-max-bet-amount.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {MinMaxBetAmountCasino777Box} from './min-max-bet-amount.casino777.box';\nimport {MinMaxBetAmountSIBox} from './min-max-bet-amount.si.box';\nimport {MinMaxBetAmountMrGreenBox} from './min-max-bet-amount.mrgreen.box';\nimport { MinMaxBetAmountCisBox } from './min-max-bet-amount.cis.box';\n\nexport const MinMaxBetAmountBox = styledByTheme(MinMaxBetAmountDefaultBox)\n .forCasino777(MinMaxBetAmountCasino777Box)\n .forSI(MinMaxBetAmountSIBox)\n .forMrGreen(MinMaxBetAmountMrGreenBox)\n .forMrGreenCis(MinMaxBetAmountMrGreenBox)\n .forCis(MinMaxBetAmountCisBox)\n .forCip(MinMaxBetAmountCisBox)\n .apply();","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {Button} from '../../../../../basic-ui-components/button/base/button.component';\n\nexport interface InfoPageButtonComponentProps {\n enabled: boolean;\n onOpenInfoPage: () => void;\n}\n\nexport const InfoPageButtonComponent = observer(\n class InfoPageButtonComponent extends OrbitComponent<InfoPageButtonComponentProps> {\n\n render() {\n if(!this.props.enabled) {\n return null;\n }\n\n return (\n <Button\n preset=\"flatStroked\"\n icon={{Component: this.services.theme.currentTheme.icons.infoIcon, size: \"regular\"}}\n className='cy-game-info-page-button'\n onClick={this.props.onOpenInfoPage}\n margin=\"0px 0px 0px 1em\"\n />\n );\n }\n }\n);\n","import styled from 'styled-components';\nimport {GAME_BOX} from '../../../css-constants';\n\n//.hover-details\nexport const GameButtonsDefaultBox = styled.div`\n display: flex;\n justify-content: center;\n width: 100%;\n z-index: 2;\n position: absolute;\n margin: auto;\n top: 0;\n left: 0;\n right: 0;\n transform: translateY(5rem);\n opacity: 0;\n transition: all 0.3s ease-in-out;\n padding-top: 2px;\n\n .${GAME_BOX}:hover & {\n transform: translateY(0);\n opacity: 0.9;\n }\n`;","import {GameButtonsDefaultBox} from './game-buttons.default.box';\n\nexport const GameButtonsBox = GameButtonsDefaultBox;","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {Button} from '../../../../../basic-ui-components/button/base/button.component';\nimport {CyClass} from '../../../../../../common/cy-classes';\n\nexport interface PlayDemoButtonComponentProps {\n enabled: boolean;\n onOpenAnonymousGame: () => void;\n}\n\nexport const PlayDemoButtonComponent = observer(\n class PlayDemoButtonComponent extends OrbitComponent<PlayDemoButtonComponentProps> {\n\n render() {\n if(!this.props.enabled) {\n return null;\n }\n\n return (\n <Button\n className={CyClass('cy-play-demo-game-button')}\n onClick={this.props.onOpenAnonymousGame}\n preset=\"flatStroked\"\n >\n { this.services.translation.translate('DEMO') }\n </Button>\n );\n\n }\n }\n);\n\n","import styled from 'styled-components';\n\nexport const JackpotAmountDefaultBox = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n width: 80%;\n text-align: center;\n opacity: 1;\n font-size: 1.4rem;\n font-weight: 600;\n margin-bottom: 4px;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 1.3rem;\n font-weight: 400;\n width: 100%;\n }\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 1rem;\n }\n`;\n","import styled from 'styled-components';\nimport {JackpotAmountDefaultBox} from './jackpot-amount.default.box';\n\n\nexport const JackpotAmountCasino777Box = styled(JackpotAmountDefaultBox)`\n color: ${props => props.theme.colors.dangerLight};\n font-weight: 600;\n ${({theme}) => theme.font.presets.bold};\n font-size: 1.4rem;\n\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n font-size: 1.4rem;\n top: 2rem;\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 1.2rem;\n }\n`","import styled from \"styled-components\";\nimport {JackpotAmountDefaultBox} from \"./jackpot-amount.default.box\";\n\nexport const JackpotAmountSiBox = styled(JackpotAmountDefaultBox)`\n font-size: ${props => props.theme.font.size.small};\n font-weight: 400;\n`","import styled from \"styled-components\";\nimport {JackpotAmountDefaultBox} from \"./jackpot-amount.default.box\";\n\nexport const JackpotAmountMrgreenBox = styled(JackpotAmountDefaultBox)`\n width: 100%;\n`","import {JackpotAmountDefaultBox} from './jackpot-amount.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {JackpotAmountCasino777Box} from './jackpot-amount.casino777.box';\nimport {JackpotAmountSiBox} from \"./jackpot-amount.si.box\";\nimport {JackpotAmountMrgreenBox} from \"./jackpot-amount.mrgreen.box\";\n\nexport const JackpotAmountBox = styledByTheme(JackpotAmountDefaultBox)\n .forCasino777(JackpotAmountCasino777Box)\n .forSI(JackpotAmountSiBox)\n .forSICis(JackpotAmountSiBox)\n .forMrGreen(JackpotAmountMrgreenBox)\n .forMrGreenCis(JackpotAmountMrgreenBox)\n .apply();","import styled from 'styled-components';\nimport {ENABLE_HOVER_ANIMATION, GAME_BOX} from '../../../css-constants';\n\nexport const GameInfoContainerDefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-top: 2px;\n width: 100%;\n transition: all 0.3s ease-in-out;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 0;\n }\n \n\n .${GAME_BOX}:hover &{\n &.${ENABLE_HOVER_ANIMATION} {\n transform: translateY(6rem);\n opacity: 0;\n }\n }\n`;\n","import {GameInfoContainerDefaultBox} from './game-info-container.default.box';\n\nexport const GameInfoContainerBox = GameInfoContainerDefaultBox;","import styled from 'styled-components';\n\nexport const TwoRowsGameTitleContainerBox = styled.div<{hasDetails: boolean}>`\n height: 3.5rem;\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n height: 2.7rem;\n }\n\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n`;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { observer } from 'mobx-react';\nimport { GameTitleBox } from '../../boxes/game-title/game-title.box';\nimport classNames from 'classnames';\nimport { ENABLE_HOVER_ANIMATION, MULTIPLE_LINES_TITLE, TWO_LINES_TITLE } from '../../../css-constants';\nimport { GameInfo } from '../../../../../services/games/game-info';\nimport { MinMaxBetAmountBox } from '../../boxes/min-max-bet-amount/min-max-bet-amount.box';\nimport { InfoPageButtonComponent } from '../info-page-button/info-page-button.component';\nimport { GameButtonsBox } from '../../boxes/game-buttons/game-buttons.box';\nimport { PlayDemoButtonComponent } from '../play-demo-button/play-demo-button.component';\nimport { GameDetailsContainerBox } from '../../boxes/game-details-container/game-details-container.box';\nimport { JackpotAmountBox } from '../../boxes/jackpot-amount/jackpot-amount.box';\nimport { GameJackpotComponent } from '../../../../game-jackpot/game-jackpot.component';\nimport { GameInfoContainerBox } from '../../boxes/game-info-container/game-info-container.box';\nimport { CyClass } from \"../../../../../../common/cy-classes\";\nimport { AmountContainerBox } from '../../boxes/amount-container/amount-container.box';\nimport { TwoRowsGameTitleContainerBox } from '../../boxes/two-rows-game-title-container/two-rows-game-title-container.box';\nimport { useServices } from \"../../../../../react-hooks/use-services.hook\";\n\nexport interface GameDetailsContainerComponentProps {\n gameInfo: GameInfo;\n disableGameInfoHover: boolean;\n onOpenAnonymousGame: () => void;\n onOpenInfoPage: () => void;\n squareGameIcon?: boolean;\n hasTwoLinesTitle: boolean;\n}\n\nexport const GameDetailsContainerComponent: React.FC<GameDetailsContainerComponentProps> = observer((props) => {\n const services = useServices();\n const [hasInfoPage, setHasInfoPage] = useState(false);\n const titleRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n props.gameInfo.hasInfoPage().then(hasInfoPage => {\n setHasInfoPage(hasInfoPage)\n })\n }, [props.gameInfo]);\n\n const _allowHoverDetails = () => {\n\n if (props.disableGameInfoHover || services.device.isMobile || !props.gameInfo.allowHoverDetails) {\n return false;\n }\n\n return Boolean(hasInfoPage || props.gameInfo.allowDemoButtonInSingleGame);\n }\n\n useEffect(() => {\n if (!titleRef?.current) return;\n\n const titleElement = titleRef.current;\n const titleHeight = titleElement?.offsetHeight || 0;\n const titleLineHeight = +window.getComputedStyle(titleElement).getPropertyValue('line-height').substring(0, 2);\n const maxElSize = titleLineHeight * 2 + 1;\n\n if (titleHeight > maxElSize) {\n titleElement.style.maxHeight = maxElSize + 'px';\n titleElement.classList.add(MULTIPLE_LINES_TITLE);\n };\n }, [titleRef])\n\n\n const _renderGameButtons = () => {\n if (!_allowHoverDetails()) {\n return null;\n }\n\n return (\n\n <GameButtonsBox>\n <PlayDemoButtonComponent enabled={props.gameInfo.allowDemoButtonInSingleGame} onOpenAnonymousGame={props.onOpenAnonymousGame} />\n <InfoPageButtonComponent enabled={hasInfoPage} onOpenInfoPage={props.onOpenInfoPage} />\n </GameButtonsBox>\n );\n }\n\n const _renderAmount = () => {\n if (props.gameInfo.hasJackpot) {\n return _renderJackpot();\n }\n\n const formattedMinBaxBets = services.currency.formatMinMaxBet(props.gameInfo.minBet, props.gameInfo.maxBet);\n const hasMinMaxBets = props.gameInfo.allowMinMaxBet && formattedMinBaxBets;\n if (hasMinMaxBets) {\n return _renderMinBaxBet();\n }\n\n return null;\n }\n\n const _hasDetails = () => {\n return props.gameInfo.allowMinMaxBet || props.gameInfo.hasJackpot;\n }\n\n const _renderJackpot = () => {\n return (\n <JackpotAmountBox className='cy-game-jackpot-amount'>\n <GameJackpotComponent gameType={props.gameInfo.gameType} />\n </JackpotAmountBox>\n );\n }\n\n const _renderMinBaxBet = () => {\n const formattedMinBaxBets = services.currency.formatMinMaxBet(props.gameInfo.minBet, props.gameInfo.maxBet);\n return (\n <MinMaxBetAmountBox className=\"cy-game-min-max-bet\">\n {formattedMinBaxBets}\n </MinMaxBetAmountBox>\n );\n }\n\n const _renderTitle = () => {\n const hasDetails = _hasDetails();\n if (props.hasTwoLinesTitle) {\n return <TwoRowsGameTitleContainerBox className={classNames({ \"has-details\": hasDetails })} hasDetails={hasDetails}>\n <GameTitleBox\n className={classNames(CyClass('cy-game-title'), { [TWO_LINES_TITLE]: true })}\n hasTwoLinesTitle={true}\n >\n {props.gameInfo.title}\n </GameTitleBox>\n </TwoRowsGameTitleContainerBox>;\n } else {\n return <GameTitleBox\n className={classNames(CyClass('cy-game-title'), { [TWO_LINES_TITLE]: !hasDetails, \"has-details\": hasDetails })}\n hasTwoLinesTitle={false}\n ref={titleRef}\n >\n {props.gameInfo.title}\n </GameTitleBox>;\n }\n }\n\n const _renderGameInfoSection = () => {\n return (\n <GameInfoContainerBox className={classNames('cy-game-info-section', { [ENABLE_HOVER_ANIMATION]: _allowHoverDetails() })}>\n {_renderTitle()}\n {props.hasTwoLinesTitle || _hasDetails() ?\n <AmountContainerBox className={classNames({ \"has-two-lines-layout\": props.hasTwoLinesTitle, \"has-jp\": props.gameInfo.hasJackpot, \"has-min-max\": props.gameInfo.allowMinMaxBet })}>{_renderAmount()}</AmountContainerBox>\n : null}\n </GameInfoContainerBox>\n );\n }\n\n return (\n <GameDetailsContainerBox className=\"cy-game-details-container\"\n squareGameIcon={props.squareGameIcon}>\n {_renderGameInfoSection()}\n {_renderGameButtons()}\n </GameDetailsContainerBox>\n );\n});\n","import styled from 'styled-components';\nimport {GAME_BOX} from '../../../css-constants';\n\n\nexport const PlayRealButtonDefaultBox = styled.button`\n background-image: url(\"${props => props.theme.assets.images.SpriteSheetPC1920_png.toString()}\");\n background-position: -544px -409px;\n background-size: 1200px;\n background-repeat: no-repeat;\n position: absolute;\n cursor: pointer;\n right: 0;\n left: 0;\n top: 0;\n bottom: 0;\n margin: auto;\n width: 6rem;\n height: 6rem;\n opacity: 0;\n transition: all 0.35s ease-in-out;\n\n .${GAME_BOX}:hover & {\n transform: translateY(0);\n opacity: 0.9;\n }\n\n @media ${({theme}) => theme.mediaQuery.lowHeight}, ${({theme}) => theme.mediaQuery.xlExact} {\n background-position: -552px -408px;\n }\n\n`;","import styled from 'styled-components';\nimport {PlayRealButtonDefaultBox} from './play-real-button.default.box';\n\nexport const PlayRealButtonCasino777Box = styled(PlayRealButtonDefaultBox)`\n background-position: -195px -354px;\n width: 6.3rem;\n height: 6.3rem;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n background-position: -201px -358px;\n }\n`;","import styled from 'styled-components';\nimport {Color} from '../../../../../../common/utils/color-util';\nimport {PlayRealButtonDefaultBox} from './play-real-button.default.box';\n\nexport const PlayRealButtonCasino888Box = styled(PlayRealButtonDefaultBox)`\n background-position: -553px -409px;\n width: 50px;\n height: 50px;\n border-radius: 50%;\n box-shadow: 0 0 0 0 ${(props) => Color.fromHex(props.theme.colors.brandPrimary, 0.5).rgba()};\n`;","import {PlayRealButtonDefaultBox} from './play-real-button.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {PlayRealButtonCasino777Box} from './play-real-button.casino777.box';\nimport {PlayRealButtonCasino888Box} from './play-real-button.casino888.box';\n\n\nexport const PlayRealButtonBox = styledByTheme(PlayRealButtonDefaultBox)\n .forCasino888(PlayRealButtonCasino888Box)\n .forCasino777(PlayRealButtonCasino777Box).apply();\n","import { styledBox } from \"../../../../../themes/architecture/styled-box\";\n\nexport const GameNumberBadgeBox = styledBox('GameNumberBadgeBox')\n","import React from 'react'\nimport {GameImageContainerComponent} from '../common/parts/game-image-container.component/game-image-container.component';\nimport {GameDetailsContainerComponent} from './parts/game-details-container/game-details-container.component';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {GameInfo} from '../../../services/games/game-info';\nimport {observer} from 'mobx-react';\nimport {GameBox} from './boxes/game/game.box';\nimport {PlayRealButtonBox} from './boxes/play-real-button/play-real-button.box';\nimport {GameImageContainerBox} from './boxes/game-image-container/game-image-container.box';\nimport {GameNumberBadgeBox} from \"./boxes/game-number-badge/game-number-badge.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport { GameIconAnimationState } from '../common/parts/game-image/game-image.component';\nimport {CyClass} from '../../../../common/cy-classes';\n\nexport interface SingleGameRegularTemplateComponentProps {\n className: string;\n gameInfo: GameInfo;\n disableGameInfoHover: boolean;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n onOpenRealGame: () => void;\n onOpenAnonymousGame: () => void;\n onOpenInfoPage: () => void;\n onAnimationIconStateChange?(state: GameIconAnimationState): void;\n gameIndex?: number;\n useSquareIcons?: boolean;\n showNumberBadge?: boolean;\n hasTwoLinesTitle: boolean;\n}\n\n@observer\nexport class SingleGameRegularTemplateComponent extends OrbitComponent<SingleGameRegularTemplateComponentProps> {\n public stateActiveTimeout: number | null = null;\n\n get gameInfo(): GameInfo {\n return this.props.gameInfo;\n }\n\n private _renderPlayRealGameButton() {\n if (this.services.device.os.isMobileOS || this.services.mediaQuery.anyHoverNone) {\n return null;\n }\n return (<PlayRealButtonBox className={CyClass('cy-play-real-game-button')} />);\n }\n\n private _renderGameNumberBadge() {\n if(!this.props.showNumberBadge || Check.isNullOrUndefined(this.props.gameIndex)) {\n return null;\n }\n\n return (\n <GameNumberBadgeBox className={'cy-game-number-badge'}>\n {this.props.gameIndex+1}\n </GameNumberBadgeBox>\n )\n }\n render() {\n return (\n <>\n\n {this._renderGameNumberBadge()}\n\n <GameBox className={`cy-single-game-regular-template ${this.props.className}`}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n squareGameIcon={this.props.useSquareIcons}\n >\n\n <GameImageContainerComponent gameInfo={this.gameInfo}\n box={GameImageContainerBox}\n onOpenRealGame={this.props.onOpenRealGame}\n useSquareIcons={this.props.useSquareIcons}\n playRealGameButton={this._renderPlayRealGameButton()}\n onAnimationIconStateChange={this.props.onAnimationIconStateChange}\n />\n\n <GameDetailsContainerComponent gameInfo={this.gameInfo}\n disableGameInfoHover={this.props.disableGameInfoHover}\n onOpenInfoPage={this.props.onOpenInfoPage}\n onOpenAnonymousGame={this.props.onOpenAnonymousGame}\n squareGameIcon={this.props.useSquareIcons}\n hasTwoLinesTitle={this.props.hasTwoLinesTitle}\n />\n </GameBox>\n </>\n );\n }\n}\n","import {Check} from '@sparkware/app-utils';\n\n\nexport class CssClassNameBuilder {\n _classes: string[] = [];\n append(...classes): this {\n\n classes.forEach(item => {\n if(Check.isString(item)) {\n this._classes.push(item);\n } else if(Check.isArray(item)) {\n item.forEach(c => this._classes.push(String(c)));\n } else if (Check.isNullOrUndefined(item)) {\n // just ignore it\n } else {\n throw new Error('append method accepts only string or string[] as argument');\n }\n });\n return this;\n }\n\n build() {\n let result = this._classes.reduce((acc, curr) => acc + ' ' + curr, '');\n return result.substring(1, result.length);\n }\n}\n\n\n","import styled from 'styled-components';\n\nexport const GameTitleDefaultBox = styled.div`\n line-height: 2.5rem;\n font-size: 1.5em;\n font-weight: 300;\n ${({theme}) => theme.font.presets.medium};\n color: ${props => props.theme.colors.textLight};\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n max-width: 13rem;\n line-height: 1.7;\n }\n`;\n","import styled from 'styled-components';\nimport {GameTitleDefaultBox} from './game-title.default.box';\n\nexport const GameTitleCasino777Box = styled(GameTitleDefaultBox)`\n font-size: 1.9em;\n`;\n","import {GameTitleDefaultBox} from './game-title.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {GameTitleCasino777Box} from './game-title.casino777.box';\n\n\nexport const GameTitleBox = styledByTheme(GameTitleDefaultBox).forCasino777(GameTitleCasino777Box).apply();","import styled from 'styled-components';\n\nexport const JackpotAmountDefaultBox = styled.div`\n color: ${props => props.theme.colors.brandSecondary};\n ${({theme}) => theme.font.presets.ultra};\n font-size: 2.6em;\n width: 100%;\n margin-bottom: 4px;\n @media ${({theme}) => theme.mediaQuery.xlExact} {\n font-size: 2.2em;\n }\n`;\n","import styled from 'styled-components';\nimport {JackpotAmountDefaultBox} from './jackpot-amount.default.box';\nimport {baseColors} from \"../../../../../themes/definitions/casino777/base-colors\";\n\nexport const JackpotAmountCasino777Box = styled(JackpotAmountDefaultBox)`\n ${({theme}) => theme.font.presets.secondary};\n font-weight: 300;\n color: ${baseColors.base04Dark};\n text-shadow: 3px 3px 0 ${props => props.theme.colors.textLight}, 0 0 0 ${props => props.theme.colors.textLight}, 1px 1px 0 ${props => props.theme.colors.textLight}, 2px 2px 0 ${props => props.theme.colors.textLight}, 0 0 0 ${props => props.theme.colors.textLight};\n -webkit-text-stroke-width: .5px;\n -webkit-text-stroke-color: ${props => props.theme.colors.textLight};\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n color: ${props => props.theme.colors.textLight};\n text-shadow: none;\n letter-spacing: .3px;\n -webkit-text-stroke-width: 0;\n -webkit-text-stroke-color: transparent;\n }\n`;\n","import {JackpotAmountDefaultBox} from './jackpot-amount.default.box';\nimport {styledByTheme} from '../../../../../themes/architecture/styled-by-theme';\nimport {JackpotAmountCasino777Box} from './jackpot-amount.casino777.box';\n\nexport const JackpotAmountBox = styledByTheme(JackpotAmountDefaultBox).forCasino777(JackpotAmountCasino777Box).apply();","import React from 'react';\nimport {OrbitComponent} from '../../../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {Button} from '../../../../../basic-ui-components/button/base/button.component';\nimport {GameDetailsContainerBox} from '../../boxes/game-details-container/game-details-container.box';\nimport {GameTitleBox} from '../../boxes/game-title/game-title.box';\nimport {JackpotAmountBox} from '../../boxes/jackpot-amount/jackpot-amount.box';\nimport {GameJackpotComponent} from '../../../../game-jackpot/game-jackpot.component';\n\nexport interface GameDetailsContainerComponentProps {\n gameInfo: GameInfo;\n onOpenRealGame: () => void;\n}\n\nexport const GameDetailsContainerComponent = observer(\n class GameDetailsContainerComponent extends OrbitComponent<GameDetailsContainerComponentProps> {\n render() {\n return (\n <GameDetailsContainerBox className='cy-game-details-container'>\n <GameTitleBox className=\"cy-game-title\">\n {this.props.gameInfo.title}\n </GameTitleBox>\n\n <JackpotAmountBox data-cy=\"cy-jackpot-amount\">\n <GameJackpotComponent gameType={this.props.gameInfo.gameType}/>\n </JackpotAmountBox>\n\n <Button\n className=\"cy-hit-the-jackpot-button\"\n onClick={this.props.onOpenRealGame}\n preset=\"special\"\n >\n {this.services.translation.translate('HIT_THE_JACKPOT')}\n </Button>\n </GameDetailsContainerBox>\n );\n }\n }\n);","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {GameInfo} from '../../../services/games/game-info';\nimport {GameImageContainerComponent} from '../common/parts/game-image-container.component/game-image-container.component';\nimport {GameBox} from './boxes/game/game.box';\nimport {GameImageContainerBox} from './boxes/game-image-container/game-image-container.box';\nimport {GameDetailsContainerComponent} from './parts/game-details-container/game-details-container.component';\nimport {GAME_BOX_JACKPOT_TEMPLATE} from '../css-constants';\n\nexport interface SingleGameJackpotTemplateComponentProps {\n gameInfo: GameInfo;\n className: string;\n onOpenRealGame: () => void;\n}\n\nexport const SingleGameJackpotTemplateComponent = observer(\n class SingleGameJackpotTemplateComponent extends OrbitComponent<SingleGameJackpotTemplateComponentProps> {\n\n\n render() {\n let gameInfo = this.props.gameInfo;\n\n return (\n <GameBox className={`cy-single-game-jackpot-template ${GAME_BOX_JACKPOT_TEMPLATE} ${this.props.className}`}>\n <GameImageContainerComponent gameInfo={gameInfo}\n box={GameImageContainerBox}\n onOpenRealGame={this.props.onOpenRealGame}\n playRealGameButton={null}/>\n\n <GameDetailsContainerComponent gameInfo={gameInfo} onOpenRealGame={this.props.onOpenRealGame}/>\n </GameBox>\n );\n }\n }\n);","import styled from \"styled-components\";\n\nexport const LiveGameContainerDefaultBox = styled.div`\n\n flex-shrink: 0;\n width: calc(100% / 4);\n padding: 1rem 0.5rem 3rem 0.5rem;\n\n @media ${props => props.theme.mediaQuery.sAndBelow} {\n width: calc(100% / 2);\n padding: 1rem 0.5rem;\n }\n`;\n","import {LiveGameContainerDefaultBox} from \"./live-game-container.default.box\";\n\nexport const LiveGameContainerBox = LiveGameContainerDefaultBox;\n","import React from 'react'\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {LiveGameContainerBox} from './boxes/live-game-container/live-game-container.box';\nimport {LiveCasinoArenaGridItem} from '../../arena-host/new-live-casino-arena/live-casino-arena-grid/live-casino-arena-grid-item.component';\nimport {GameInfo} from '../../../services/games/game-info';\n\nexport interface SingleGameLiveTemplateComponentProps {\n tableConfig: GameInfo;\n listTitle: string;\n gameIndex: number | undefined;\n seoCategory: string;\n}\n\nexport const SingleGameLiveTemplateComponent = observer(\n class SingleGameLiveTemplateComponent extends OrbitComponent<SingleGameLiveTemplateComponentProps> {\n\n render() {\n return (\n <LiveGameContainerBox>\n <LiveCasinoArenaGridItem\n key={this.props.tableConfig.gameType}\n tableId={this.props.tableConfig.gameType}\n gameInfo={this.props.tableConfig}\n gameIndex={this.props.gameIndex || 0}\n listTitle={this.props.listTitle}\n liveTable={this.services.liveTableFeeds.getTableInfo(this.props.tableConfig.gameType)}\n fluidWidth\n seoCategory={this.props.seoCategory}\n captureGameElementRef={null}\n />\n </LiveGameContainerBox>\n );\n }\n }\n);\n\n\n","import styled from \"styled-components\";\nimport { hexToRgba } from \"../../../../../themes/hex-to-rgba\";\n\nexport const VideoSoundButtonDefaultBox = styled.div`\n padding: 0.25rem;\n background: ${({theme}) => hexToRgba(theme.colors.background.toString(), 0.9) };\n border-radius: 50%;\n`;\n","import {VideoSoundButtonDefaultBox} from \"./video-sound-button-default.box\";\n\nexport const VideoSoundButtonBox = VideoSoundButtonDefaultBox;\n","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {VideoSoundButtonBox} from \"./boxes/video-sound-button.box\";\nimport {IVideoPlayingService} from \"../../../../services/video-live-stream/video-playing.service.interface\";\n\nexport interface VideoSoundButtonComponentProps {\n videoPlayingService: IVideoPlayingService;\n}\n\nexport class VideoSoundButtonComponent extends OrbitComponent<VideoSoundButtonComponentProps> {\n private _renderIcon() {\n\n if (this.services.user.preferences.sound.isMuted) {\n const MuteIcon = this.services.theme.currentTheme.icons.muteIcon;\n return <MuteIcon size={2.5}/>;\n }\n\n const UnmuteIcon = this.services.theme.currentTheme.icons.unmuteIcon;\n return <UnmuteIcon size={2.5}/>;\n }\n\n private _handleClick() {\n this.services.user.preferences.sound.toggle();\n }\n\n render() {\n return (\n <VideoSoundButtonBox onClick={() => this._handleClick()}>\n {this._renderIcon()}\n </VideoSoundButtonBox>\n );\n }\n}\n","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {VideoOverlayItemBox} from \"../video-overlay-item/video-overlay-item.box\";\nimport {VideoSoundButtonComponent} from \"../video-sound-button/video-sound-button.component\";\nimport {IVideoPlayingService} from \"../../../../services/video-live-stream/video-playing.service.interface\";\n\nexport interface VideoTileOverlayComponentProps {\n videoPlayingService: IVideoPlayingService;\n videoPlaying: boolean;\n bottomLeftComponent?: React.ReactNode;\n bottomRightComponent?: React.ReactNode;\n}\n\nexport class VideoTileOverlayComponent extends OrbitComponent<VideoTileOverlayComponentProps> {\n\n private _padding = \"1rem\";\n\n private _renderTopRight(): React.ReactElement {\n if (!this.props.videoPlaying) {\n return null;\n }\n\n return (\n <VideoOverlayItemBox transparent style={{position: \"absolute\", top: this._padding, right: this._padding}}>\n <VideoSoundButtonComponent videoPlayingService={this.props.videoPlayingService}/>\n </VideoOverlayItemBox>\n );\n }\n\n private _renderBottomLeft(): React.ReactElement {\n if (!this.props.bottomLeftComponent) {\n return null;\n }\n\n return (\n <VideoOverlayItemBox capsule style={{position: \"absolute\", bottom: this._padding, left: this._padding}}>\n {this.props.bottomLeftComponent}\n </VideoOverlayItemBox>\n );\n }\n\n private _renderBottomRight(): React.ReactElement {\n if (!this.props.bottomRightComponent) {\n return null;\n }\n\n return (\n <VideoOverlayItemBox style={{position: \"absolute\", bottom: this._padding, right: this._padding}}>\n {this.props.bottomRightComponent}\n </VideoOverlayItemBox>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n {this._renderTopRight()}\n {this._renderBottomLeft()}\n {this._renderBottomRight()}\n </React.Fragment>\n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const VideoTileOverlayDefaultBox = styled.div`\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n font-size: 1.5rem;\n ${({theme}) => theme.font.presets.regular};\n color: ${({theme}) => theme.colors.textLight};\n background: rgba(0,0,0,0.5);\n`;\n","import {VideoTileOverlayDefaultBox} from \"./video-tile-overlay-default.box\";\n\nexport const VideoTileOverlayBox = VideoTileOverlayDefaultBox;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VideoTileStaticImageOverlayBox = styledBox(\"VideoTileStaticImageOverlayBox\");\n","import styled from \"styled-components\";\n\nexport const VideoTileSkeletonContainerDefaultBox = styled.div`\n position: absolute;\n top: 0px;\n left: 0px;\n width: 100%;\n`;\n","import {VideoTileSkeletonContainerDefaultBox} from \"./video-tile-skeleton-container-default.box\";\n\nexport const VideoTileSkeletonContainerBox = VideoTileSkeletonContainerDefaultBox;\n","import styled from \"styled-components\";\nimport { hexToRgba } from \"../../../../../themes/hex-to-rgba\";\n\nexport const VideoRetryScreenTileDefaultBox = styled.div`\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n background: ${({theme}) => hexToRgba(theme.colors.background.toString(), 0.6)};\n`;\n","import {VideoRetryScreenTileDefaultBox} from \"./video-retry-screen-tile-default.box\";\n\nexport const VideoRetryScreenTileBox = VideoRetryScreenTileDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoRetryScreenIconDefaultBox = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 5rem;\n height: 5rem;\n background: ${({theme}) => theme.colors.background.toString()};\n border-radius: 50%;\n`;\n","import {VideoRetryScreenIconDefaultBox} from \"./video-retry-screen-icon-default.box\";\n\nexport const VideoRetryScreenIconBox = VideoRetryScreenIconDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoRetryScreenTitleDefaultBox = styled.div`\n margin: 1rem 0;\n font-size: 2rem;\n color: ${({theme}) => theme.colors.textLight.toString()};\n`;\n","import {VideoRetryScreenTitleDefaultBox} from \"./video-retry-screen-title-default.box\";\n\nexport const VideoRetryScreenTitleBox = VideoRetryScreenTitleDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoRetryScreenTextDefaultBox = styled.div`\n margin-bottom: 1rem;\n font-size: 1.6rem;\n line-height: 1.5;\n color: ${({theme}) => theme.colors.textLight.toString()};\n`;\n","import {VideoRetryScreenTextDefaultBox} from \"./video-retry-screen-text-default.box\";\n\nexport const VideoRetryScreenTextBox = VideoRetryScreenTextDefaultBox;\n","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport React from 'react';\nimport {VideoRetryScreenTileBox} from \"./video-retry-screen-boxes/video-retry-screen-tile.box\";\nimport {VideoRetryScreenIconBox} from \"./video-retry-screen-boxes/video-retry-screen-icon.box\";\nimport {SvgSizeUnit} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport {VideoRetryScreenTitleBox} from \"./video-retry-screen-boxes/video-retry-screen-title.box\";\nimport {VideoRetryScreenTextBox} from \"./video-retry-screen-boxes/video-retry-screen-text.box\";\nimport {Button} from \"../../../../basic-ui-components/button/base/button.component\";\n\nexport interface VideoRetryScreenComponentProps {\n retryFn: () => void;\n setHasError: (value: boolean, retryFn?: (() => void) | undefined) => void;\n}\n\nexport default class VideoRetryScreenComponent extends OrbitComponent<VideoRetryScreenComponentProps> {\n\n private _retryAndSetError = () => {\n if (this.props.retryFn) {\n this.props.retryFn();\n }\n this.props.setHasError(false);\n };\n\n render(): React.ReactNode {\n const BrokenLinkIcon = this.services.theme.currentTheme.icons.brokenLinkIcon;\n\n return (\n <VideoRetryScreenTileBox>\n <VideoRetryScreenIconBox>\n <BrokenLinkIcon size={4} sizeUnit={SvgSizeUnit.Rem}/>\n </VideoRetryScreenIconBox>\n <VideoRetryScreenTitleBox>\n {this.services.translation.translate('CANT_CONNECT_ERROR_TITLE')}\n </VideoRetryScreenTitleBox>\n <VideoRetryScreenTextBox>\n {this.services.translation.translate('CANT_CONNECT_ERROR_MESSAGE')}\n </VideoRetryScreenTextBox>\n <Button preset=\"primary\" sizeVariant=\"xs\" onClick={this._retryAndSetError}>\n {this.services.translation.translate('RETRY')}\n </Button>\n </VideoRetryScreenTileBox>\n )\n }\n}\n","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport React from 'react';\nimport {LiveCasinoGridItemThumbnailImageBox} from \"../../../arena-host/new-live-casino-arena/live-casino-arena-grid/boxes/thumbnail/live-casino-grid-item-thumbnail-image.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {addQueryParam} from \"../../../../../utils/url-utils\";\n\nexport interface VideoThumbnailImageComponentProps {\n onLoad: () => void;\n onSettled: () => void;\n gameInfo: GameInfo;\n filterBlur: boolean;\n}\n\nexport default class VideoThumbnailImageComponent extends OrbitComponent<VideoThumbnailImageComponentProps> {\n\n //Priority for game video thumbnail image(takes the 1st that exists):\n // gameinfo.videoThumbnailUrl\n // tableinfo.TableImage\n // gameinfo.gameArenaIcon\n\n private _getImageSource = (): string => {\n const gameInfo: GameInfo = this.props.gameInfo;\n\n if (gameInfo?.videoThumbnailUrl) {\n return gameInfo?.videoThumbnailUrl;\n }\n\n const tableInfo = this.services.liveTableFeeds.getTableInfo(gameInfo.gameType);\n\n if (Check.isEmpty(tableInfo) || !tableInfo.TableImage) {\n return gameInfo?.gameArenaIcon;\n } else {\n // We need this random because we want to force react to reload the image because the url of the image is identical but the image changed.\n let imageRandom = Math.random();\n\n return addQueryParam(tableInfo.TableImage, imageRandom.toString());\n }\n };\n\n render(): React.ReactNode {\n return (<LiveCasinoGridItemThumbnailImageBox\n width={432} height={243}\n lazy src={this._getImageSource()}\n alt={this.props.gameInfo?.title}\n className={'cy-live-casino-grid-item-thumbnail-image'}\n onLoad={this.props.onLoad}\n onSettled={this.props.onSettled}\n filterBlur={this.props.filterBlur}\n />);\n }\n}\n","import styled from \"styled-components\";\n\n\nexport const VideoTileBettingRangeDefaultBox = styled.div`\n font-size: 1.2rem;\n color: ${({theme}) => theme.colors.brandPrimary.toString()};\n line-height: 1;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove } {\n margin: 12px 0 0 0rem;\n font-size: 1.3rem;\n }\n`;\n","import {VideoTileBettingRangeDefaultBox} from \"./video-tile-betting-range-default.box\";\n\nexport const VideoTileBettingRangeBox = VideoTileBettingRangeDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoTileGameTitleDefaultBox = styled.div`\n text-overflow: ellipsis;\n font-size: 1rem;\n color: ${({theme}) => theme.colors.textLight.toString()};\n line-height: 1.1;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove } {\n font-size: 1.3rem;\n }\n`;\n","import {VideoTileGameTitleDefaultBox} from \"./video-tile-game-title-default.box\";\n\nexport const VideoTileGameTitleBox = VideoTileGameTitleDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoTileFooterSectionDefaultBox = styled.div<{width?: string;}>`\n width: ${({width}) => width ? width : \"auto\"};\n margin-right: 1rem;\n`;\n","import {VideoTileFooterSectionDefaultBox} from \"./video-tile-footer-section-default.box\";\n\nexport const VideoTileFooterSectionBox = VideoTileFooterSectionDefaultBox;\n","import styled from \"styled-components\";\n\nconst VideoListJackpotValueDefaultBox = styled.span`\n color: ${({theme}) => theme.colors.brandPrimary.toString()};\n margin-left: 0.5rem;\n`;\n\nexport const VideoListJackpotValueBox = VideoListJackpotValueDefaultBox;\n","import styled from \"styled-components\";\n\nconst VideoListJackpotContainerDefaultBox = styled.div`\n display: flex;\n flex-direction: row;\n font-size: 1.2rem;\n margin-top: 5px;\n`;\n\nexport const VideoListJackpotContainerBox = VideoListJackpotContainerDefaultBox;","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport React, {ReactNode} from 'react';\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport {ILiveTableInfo} from \"../../../../services/live-table-feeds-service/live-table-feeds.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {VideoTileBettingRangeBox} from \"../video-tile-betting-range/video-tile-betting-range.box\";\nimport {VideoTileGameTitleBox} from \"../video-tile-game-title/video-tile-game-title.box\";\nimport {VideoTileFooterBox} from \"./boxes/video-tile-footer.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {VideoTileFooterSectionBox} from \"./boxes/video-tile-footer-section.box\";\nimport {Button} from \"../../../../basic-ui-components/button/base/button.component\";\nimport {GameJackpotComponent} from \"../../../game-jackpot/game-jackpot.component\";\nimport {\n VideoListJackpotValueBox\n} from \"../../static-video-specific-components/video-list-jackpot-value/video-list-jackpot-value.box\";\nimport {\n VideoListJackpotContainerBox\n} from \"../../static-video-specific-components/video-list-jackpot-container/video-list-jackpot-container.box\";\n\nexport type VideoTileFooterType = \"jackpot\" | \"bets\";\n\nexport interface VideoTileFooterComponentProps {\n onClickPlay: () => void;\n gameInfo: GameInfo;\n type: VideoTileFooterType;\n}\n\nexport default class VideoTileFooterComponent extends OrbitComponent<VideoTileFooterComponentProps> {\n\n //Information from GetLiveTables request feed, for live casino games only.\n private get _tableInfo(): ILiveTableInfo | null {\n return this.services.liveTableFeeds.getTableInfo(this.props.gameInfo.gameType);\n }\n\n private _renderMinMaxBet(): ReactNode {\n\n let minBet: number;\n let maxBet: number;\n\n if(Check.isNullOrUndefined(this._tableInfo?.MinBet) || Check.isNullOrUndefined(this._tableInfo?.MaxBet)){\n minBet = this.props.gameInfo.minBet;\n maxBet = this.props.gameInfo.maxBet;\n } else {\n minBet = this._tableInfo.MinBet;\n maxBet = this._tableInfo.MaxBet;\n }\n\n return (\n <VideoTileBettingRangeBox>\n {this.services.currency.formatMinMaxBet(minBet, maxBet)}\n </VideoTileBettingRangeBox>\n );\n }\n\n private _renderGameTitle(): ReactNode {\n\n let title = this.props.gameInfo?.title || \"\\xa0\";\n\n if (this._tableInfo?.Name?.length > 0) {\n title = this._tableInfo.Name;\n }\n\n return (\n <VideoTileGameTitleBox>\n {title}\n </VideoTileGameTitleBox>\n );\n }\n\n private _renderJackpot() {\n if(!this.props.gameInfo.hasJackpot) {\n return null;\n }\n\n return (\n <VideoListJackpotContainerBox>\n <span>\n {this.services.translation.translate(\"JACKPOT\")}\n </span>\n <VideoListJackpotValueBox>\n <GameJackpotComponent gameType={this.props.gameInfo.gameType}/>\n </VideoListJackpotValueBox>\n </VideoListJackpotContainerBox>\n );\n }\n\n private _renderSecondaryText() {\n switch (this.props.type) {\n case \"bets\":\n return this._renderMinMaxBet();\n case \"jackpot\":\n return this._renderJackpot();\n default:\n return null;\n }\n }\n\n render(): React.ReactNode {\n return (\n <VideoTileFooterBox className={CyClass(\"cy-orbit-swiper-streaming-tile-footer\")}>\n <VideoTileFooterSectionBox width={this.services.mediaQuery.xlExact ? \"55%\" : \"65%\"}>\n {this._renderGameTitle()}\n {this._renderSecondaryText()}\n </VideoTileFooterSectionBox>\n <VideoTileFooterSectionBox>\n <Button\n preset=\"primary\"\n fullWidth\n sizeVariant=\"xs\"\n onClick={this.props.onClickPlay}\n >\n {this.services.translation.translate(\"PLAY_NOW\")}\n </Button>\n </VideoTileFooterSectionBox>\n </VideoTileFooterBox>\n );\n }\n}\n","import React from \"react\";\nimport { imagePreload, ImagePreloadPromiseResponse } from \"../../../../../common/utils/image-preload\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {VideoTileBox} from \"./boxes/video-tile.box\";\nimport {AspectRatioContainerComponent} from \"../../../raw-components/aspect-ratio-container/aspect-ratio-container.component\";\nimport {VideoTileOverlayComponent} from \"../video-tile-overlay/video-tile-overlay.component\";\nimport {VideoTileOverlayBox} from \"../video-tile-overlay/boxes/video-tile-overlay.box\";\nimport {VideoTileStaticImageOverlayBox} from \"../video-tile-static-image-overlay/video-tile-static-image-overlay.box\";\nimport {VideoTileSkeletonContainerBox} from \"../video-tile-skeleton-container/video-tile-skeleton-container.box\";\nimport {VideoComponent} from \"../video-component/video.component\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport {observer} from \"mobx-react\";\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport {SingleGameSkeletonComponent} from \"../../../single-game/single-game-skeleton.component\";\nimport {LIVE_STREAMING_ITEM} from \"../../../../themes/css-global-classes\";\nimport {TableSeatsComponent} from \"../../../arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/table-seats.component\";\nimport {RouletteDrawsComponent} from \"../../../arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/roulette-draws.component\";\nimport {IVideoPlayingService} from \"../../../../services/video-live-stream/video-playing.service.interface\";\nimport VideoRetryScreenComponent from \"../video-retry-screen/video-retry-screen.component\";\nimport {VIDEO_ITEM_TYPE} from \"../../../single-game/video-template/single-game-video-template.component\";\nimport VideoThumbnailImageComponent from \"../video-thumbnail-image/video-thumbnail-image.component\";\nimport VideoTileFooterComponent from \"../video-tile-footer/video-tile-footer.component\";\nimport {\n OrbitMarketingEventAnalyticsLabel\n} from \"../../../../services/analytics/analytics.service.interface\";\n\nexport interface VideoTileComponentProps {\n gameInfo: GameInfo;\n isInCenterStage: boolean;\n inViewport: boolean;\n onOpenRealGame: () => void;\n videoPlayingService: IVideoPlayingService;\n videoItemType: VIDEO_ITEM_TYPE;\n isLastGameType?: boolean;\n}\n\n@observer\nexport class VideoTileComponent extends OrbitComponent<VideoTileComponentProps> {\n\n constructor(props: VideoTileComponentProps) {\n\n super(props);\n\n makeObservable(this);\n }\n\n private _posterImageLoadPromise: Promise<ImagePreloadPromiseResponse> | undefined = undefined;\n\n @observable.ref\n private _hasError: boolean = false;\n\n private _retryFn: (() => void) | undefined;\n\n @action.bound\n setHasError(value: boolean, retryFn?: (() => void) | undefined) {\n this._hasError = value;\n this._retryFn = retryFn;\n }\n\n @observable.ref\n private _posterImageLoaded = false;\n\n @action.bound\n private setPosterImageLoaded(value: boolean) {\n this._posterImageLoaded = value;\n }\n\n private onPosterImageLoaded = () => {\n this.setPosterImageLoaded(true);\n }\n\n @observable.ref\n private _isVideoLoading: boolean = true;\n\n @observable.ref\n private _isFirstTimeLoading: boolean = true;\n\n @action.bound\n setIsVideoLoading(value: boolean) {\n this._isVideoLoading = value;\n if (value === false) {\n this.firstTimeLoadingDone();\n }\n }\n\n @action.bound\n firstTimeLoadingDone() {\n if (this._isFirstTimeLoading === true) {\n this._isFirstTimeLoading = false;\n }\n }\n\n @observable.ref\n private _isWatchTimeLimitReached: boolean = false;\n\n @action.bound\n setIsWatchTimeLimitReached(value: boolean) {\n this._isWatchTimeLimitReached = value;\n }\n\n private _onPlayClickHandler = () => {\n this.props.onOpenRealGame();\n const gaCategory = this.props.videoPlayingService.gaCategory;\n this.services.analytics.sendOrbitMarketingEvent(gaCategory, 'PLAY_GAME', OrbitMarketingEventAnalyticsLabel.Click, this.props.gameInfo.gameType);\n };\n\n componentDidMount() {\n if (this.props.gameInfo.videoThumbnailUrl) {\n this._posterImageLoadPromise = imagePreload(this.props.gameInfo.videoThumbnailUrl);\n this._posterImageLoadPromise.then(this.onPosterImageLoaded);\n }\n }\n\n componentWillUnmount() {\n if (this._posterImageLoadPromise) {\n this._posterImageLoadPromise = undefined;\n }\n }\n\n private _renderPlayerOverlay() {\n if (!this._isWatchTimeLimitReached && !this._isVideoLoading) {\n return null;\n }\n\n let statusText = '';\n if (this._isWatchTimeLimitReached) {\n statusText = this.services.translation.translate('LIVE_STREAM_WATCH_TIME_REACHED');\n } else if (this._isVideoLoading) {\n statusText = this.services.translation.translate('LIVE_STREAM_VIDEO_LOADING');\n }\n\n return <VideoTileOverlayBox>{statusText}</VideoTileOverlayBox>;\n }\n\n private _renderRetryScreen() {\n return (\n <VideoRetryScreenComponent\n retryFn={this._retryFn}\n setHasError={this.setHasError}\n />\n )\n }\n\n private _renderPlayer() {\n return (\n <AspectRatioContainerComponent width={16} height={9}>\n {/* For the video element I cannot conditionally render it for this.props.isInCenterStage because when the video reaches end and the user\n swipes right/left it renders again and starts again */}\n <VideoComponent\n gameInfo={this.props.gameInfo}\n muted={this.services.user.preferences.sound.isMuted}\n onError={this.setHasError}\n onLoading={this.setIsVideoLoading}\n onWatchTimeLimitReached={this.setIsWatchTimeLimitReached}\n isInCenterStage={this.props.isInCenterStage}\n inViewport={this.props.inViewport}\n display={this.props.isInCenterStage && !this._hasError}\n videoPlayingService={this.props.videoPlayingService}\n isLastGameType={this.props.isLastGameType}\n />\n {((this.services.mediaQuery.xlAndAbove && !this.props.isInCenterStage) || this._hasError || (this.props.isInCenterStage && this._isFirstTimeLoading && this._posterImageLoaded)) ? this._renderVideoThumbnailImage(this._hasError && this.props.isInCenterStage) : this._renderPlayerOverlay()}\n {this._renderTileOverlayComponent()}\n {(this._hasError && this.props.isInCenterStage) ? this._renderRetryScreen() : null}\n </AspectRatioContainerComponent>\n );\n }\n\n private _renderTileOverlayComponent(): React.ReactNode {\n if (this.props.videoItemType === VIDEO_ITEM_TYPE.STATIC) {\n return (\n <VideoTileOverlayComponent\n videoPlayingService={this.props.videoPlayingService}\n videoPlaying={this.props.isInCenterStage && !this._hasError}\n />\n );\n }\n\n const tableInfo = this.services.liveTableFeeds.getTableInfo(this.props.gameInfo.gameType);\n\n return (\n <VideoTileOverlayComponent\n videoPlayingService={this.props.videoPlayingService}\n bottomLeftComponent={<TableSeatsComponent isLiveStreamOverlay tableInfo={tableInfo}/>}\n bottomRightComponent={<RouletteDrawsComponent tableInfo={tableInfo}/>}\n videoPlaying={this.props.isInCenterStage && !this._hasError}\n />\n )\n\n }\n\n private _renderVideoThumbnailImage(filterBlur: boolean) {\n return <VideoThumbnailImageComponent\n gameInfo={this.props.gameInfo}\n onLoad={this.firstTimeLoadingDone}\n onSettled={this.firstTimeLoadingDone}\n filterBlur={filterBlur}\n />\n }\n\n private _renderFooter() {\n return (\n <VideoTileFooterComponent\n onClickPlay={this._onPlayClickHandler}\n gameInfo={this.props.gameInfo}\n type={this.props.videoItemType === VIDEO_ITEM_TYPE.STATIC ? \"jackpot\" : \"bets\"}\n />\n );\n }\n\n private _renderSkeleton() {\n if (this._isFirstTimeLoading && !this._posterImageLoaded) {\n return (\n <VideoTileSkeletonContainerBox>\n <SingleGameSkeletonComponent\n templateType={LIVE_STREAMING_ITEM}\n useSquareIcons={false}\n />\n </VideoTileSkeletonContainerBox>\n )\n }\n }\n\n private _renderStaticImageOverlay() {\n if (this.props.isInCenterStage || this.services.mediaQuery.lAndBelow) {\n return null;\n }\n return <VideoTileStaticImageOverlayBox/>;\n }\n\n\n render() {\n\n return (\n <VideoTileBox className={CyClass(\"cy-orbit-swiper-streaming-tile\")}>\n {this._renderPlayer()}\n {this._renderFooter()}\n {this._renderSkeleton()}\n {this._renderStaticImageOverlay()}\n </VideoTileBox>\n );\n }\n}\n","import styled from \"styled-components\";\nimport {flexFixedSizeItem} from \"../../../../themes/architecture/css-helpers/flex\";\n\nexport const VideoItemContainerDefaultBox = styled.div<{stepBackStyle: boolean;}>`\n width: 100%;\n ${flexFixedSizeItem}\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n width: 33.33%;\n transition: transform 0.5s ease-in-out;\n transform: ${({stepBackStyle}) => stepBackStyle ? \"scale(0.7)\" : \"scale(1)\"};\n }\n`;\n","import {VideoItemContainerDefaultBox} from \"./video-item-container-default.box\";\n\nexport const VideoItemContainerBox = VideoItemContainerDefaultBox;\n","import React from \"react\";\nimport { observable, action, makeObservable } from \"mobx\";\nimport { observer } from \"mobx-react\";\nimport {GameInfo} from \"../../../services/games/game-info\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {VideoTileComponent} from \"../../live-streaming-tile/video-common-components/video-tile/video-tile.component\";\nimport {VideoItemContainerBox} from \"./boxes/video-item-container.box\";\nimport {IVideoPlayingService} from \"../../../services/video-live-stream/video-playing.service.interface\";\n\nexport enum VIDEO_ITEM_TYPE {\n LIVE_STREAM = 'Live-Streaming-Video-Item',\n STATIC = 'Static-Video-Item'\n}\n\nexport interface SingleGameVideoTemplateProps {\n gameInfo: GameInfo;\n intersectionTarget?: HTMLDivElement;\n onOpenRealGame: () => void;\n videoItemType: VIDEO_ITEM_TYPE;\n isLastGametype?: boolean;\n gameIndex?: number;\n onBringInCentralView?: (gameIndex: number) => void;\n\n}\n\n@observer\nexport class SingleGameVideoTemplate extends OrbitComponent<SingleGameVideoTemplateProps> {\n\n constructor(props: SingleGameVideoTemplateProps) {\n super(props);\n\n makeObservable(this);\n }\n\n\n private _inSwiperIntersectionObserver: IntersectionObserver | null = null;\n private _viewportIntersectionObserver: IntersectionObserver | null = null;\n private _videoContainerElement: HTMLDivElement | null = null;\n @observable.ref\n private _isInCenterStage = false;\n @observable.ref\n private _inViewport = false;\n\n private _captureVideoContainerRef = (element: HTMLDivElement | null) => {\n this._videoContainerElement = element;\n if (!this._inSwiperIntersectionObserver || !this._viewportIntersectionObserver) {\n return;\n }\n if (element) {\n this._inSwiperIntersectionObserver.observe(element);\n this._viewportIntersectionObserver.observe(element);\n } else {\n this._inSwiperIntersectionObserver.unobserve(element);\n this._viewportIntersectionObserver.unobserve(element);\n }\n }\n\n\n private _triggerOnBringInCentralView(): void {\n if (this._inViewport && this._isInCenterStage) {\n this.props.onBringInCentralView(this.props.gameIndex);\n }\n }\n\n private _createSwiperIntersectionObserver(element: HTMLElement) {\n const intersectionObserverOptions: IntersectionObserverInit = {\n threshold: 0.99,\n root: element\n };\n if (this.services.mediaQuery.xlAndAbove) {\n intersectionObserverOptions.rootMargin = \"0px -33.33%\";\n }\n\n this._inSwiperIntersectionObserver = new IntersectionObserver(this._inSwiperIntersectionObserverCallback, intersectionObserverOptions);\n }\n\n private _inSwiperIntersectionObserverCallback = (entries: IntersectionObserverEntry[]) => {\n entries.forEach((entry) => {\n this.setIsInCenterStage(entry.isIntersecting);\n });\n }\n\n @action.bound\n setIsInCenterStage(i: boolean) {\n this._isInCenterStage = i;\n this._triggerOnBringInCentralView();\n }\n\n private _destroySwiperIntersectionObserver() {\n if (this._inSwiperIntersectionObserver) {\n this._inSwiperIntersectionObserver.disconnect();\n this._inSwiperIntersectionObserver = null;\n }\n }\n\n private _createViewportIntersectionObserver() {\n this._viewportIntersectionObserver = new IntersectionObserver(this._viewportIntersectionObserverCallback, {\n threshold: 0.99\n });\n }\n\n private _viewportIntersectionObserverCallback = (entries: IntersectionObserverEntry[]) => {\n entries.forEach((entry) => {\n this.setInViewport(entry.isIntersecting);\n });\n }\n\n @action.bound\n setInViewport(i: boolean) {\n this._inViewport = i;\n this._triggerOnBringInCentralView();\n }\n\n private _destroyViewportIntersectionObserver() {\n if (this._viewportIntersectionObserver) {\n this._viewportIntersectionObserver.disconnect();\n this._viewportIntersectionObserver = null;\n }\n }\n\n componentDidMount() {\n super.componentDidMount();\n this._createViewportIntersectionObserver();\n if (this._videoContainerElement) {\n this._viewportIntersectionObserver.observe(this._videoContainerElement);\n }\n if (this.props.intersectionTarget) {\n this._createSwiperIntersectionObserver(this.props.intersectionTarget);\n if (this._videoContainerElement) {\n this._inSwiperIntersectionObserver.observe(this._videoContainerElement);\n }\n }\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this._destroySwiperIntersectionObserver();\n this._destroyViewportIntersectionObserver();\n }\n\n componentDidUpdate(prevProps: SingleGameVideoTemplateProps) {\n if (this.props.intersectionTarget) {\n if (this.props.intersectionTarget !== prevProps.intersectionTarget) {\n this._destroySwiperIntersectionObserver();\n this._createSwiperIntersectionObserver(this.props.intersectionTarget);\n this._inSwiperIntersectionObserver.observe(this._videoContainerElement);\n }\n } else {\n this._destroySwiperIntersectionObserver();\n }\n }\n\n private _getVideoPlayingService = (): IVideoPlayingService => {\n if (this.props.videoItemType === VIDEO_ITEM_TYPE.LIVE_STREAM) {\n return this.services.liveStreamPlaying;\n }\n\n return this.services.staticVideoPlaying;\n };\n\n render() {\n return (\n <VideoItemContainerBox\n ref={this._captureVideoContainerRef}\n stepBackStyle={this.services.mediaQuery.xlAndAbove && !this._isInCenterStage}\n >\n <VideoTileComponent\n gameInfo={this.props.gameInfo}\n isInCenterStage={this._isInCenterStage}\n inViewport={this._inViewport}\n onOpenRealGame={this.props.onOpenRealGame}\n videoPlayingService={this._getVideoPlayingService()}\n videoItemType={this.props.videoItemType}\n isLastGameType={this.props.isLastGametype}\n />\n </VideoItemContainerBox>\n );\n }\n}\n","import React, {useRef} from 'react';\nimport {SingleGameRegularTemplateComponent} from './regular-template/single-game-regular-template.component';\nimport {GameInfo, OpenGameParameters} from '../../services/games/game-info';\nimport {CssClassNameBuilder} from '../../../utils/css-class-name-builder';\nimport {observer} from 'mobx-react';\nimport {GAME_BOX, SWIPER_MODE} from './css-constants';\nimport {SingleGameJackpotTemplateComponent} from './jackpot-template/single-game-jackpot-template.component';\nimport {JACKPOTS_ITEM, LIVE_CASINO_ITEM, LIVE_STREAMING_ITEM, STATIC_VIDEO_ITEM} from '../../themes/css-global-classes';\nimport {CyClass} from '../../../common/cy-classes';\nimport {SingleGameLiveTemplateComponent} from './live-template/single-game-live-template.component';\nimport {SingleGameVideoTemplate, VIDEO_ITEM_TYPE} from './video-template/single-game-video-template.component';\nimport {GameIconAnimationState} from './common/parts/game-image/game-image.component';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {SingleGameSkeletonComponent} from \"./single-game-skeleton.component\";\n\ninterface SingleGameComponentProps extends ComponentServicesPick<'lobbyGameInfoPreview'>{\n gameType: number;\n seoCategory: string;\n listTitle: string;\n listPosition?: number,\n AdminListID?: number,\n AIListTypeID?: number;\n templateType?: any;\n gameIndex?: number;\n skipIntermediatePage?: boolean;\n disableGameInfoHover: boolean;\n isInsideSwiper?: boolean;\n aiEngineName?: string;\n useSquareIcons?: boolean;\n showNumberBadge?: boolean;\n intersectionTarget?: HTMLDivElement;\n hasTwoLinesTitle?: boolean;\n isLastGametype?: boolean;\n onBringInCentralView?: (gameIndex: number) => void;\n}\n\nconst ComponentBody: React.FC<SingleGameComponentProps> = observer((props) => {\n const services = useServices();\n const animatedIconState = useRef<GameIconAnimationState>('static');\n const gameInfo = services.games.gamesMap[props.gameType];\n\n const _openGame = async (openInRealMode: boolean) => {\n\n\n const openGameParams: OpenGameParameters = {\n isRealMode: openInRealMode,\n pageName: props.seoCategory,\n listTitle: props.listTitle,\n listPosition: props.listPosition,\n AdminListID: props.AdminListID,\n AIListTypeID: props.AIListTypeID,\n gameIndex: props.gameIndex,\n aiEngine: props.aiEngineName,\n showIntermediatePage: !props.skipIntermediatePage,\n animatedIconState: animatedIconState.current\n };\n\n await gameInfo.open(openGameParams)\n }\n\n const sendAnalytics = (label: string) => {\n services.analytics.sendElasticInfoEvent({eventType:\"CGP_Game_Click\",category:props.seoCategory, action: props.listTitle, label: label}, true);\n }\n\n\n const openRealGame = async () => {\n await _openGame(true);\n };\n\n const openAnonymousGame = async () => {\n await _openGame(false);\n };\n\n const openInfoPage = async () => {\n const infoPageUrl = await gameInfo.getInfoPageURL();\n services.location.push(infoPageUrl);\n sendAnalytics(`SEO_${gameInfo.gameType}`);\n };\n\n const _allowPreview = () => {\n return props.lobbyGameInfoPreview.allowGamePreview\n && !props.disableGameInfoHover;\n }\n\n const setAnimatedIconState = (state: GameIconAnimationState) => {\n animatedIconState.current = state;\n }\n\n const onMouseEnter = () => {\n if (_allowPreview()) {\n props.lobbyGameInfoPreview.setGamePreview(props.gameType);\n }\n };\n\n const onMouseLeave = () => {\n if (_allowPreview()) {\n props.lobbyGameInfoPreview.clearGamePreview();\n }\n };\n\n const _buildComponentClasses = (gameInfo: GameInfo) => {\n let builder = new CssClassNameBuilder();\n\n builder.append(GAME_BOX);\n\n if(props.isInsideSwiper) {\n builder = builder.append(SWIPER_MODE);\n }\n\n if (gameInfo) {\n builder = builder.append(`game-group-${toCssClass(gameInfo.gameGroup)}`)\n .append(gameInfo.gameCategoryClassName)\n .append(`game-company-${toCssClass(gameInfo.companyName)}`)\n .append(`game-type-${gameInfo.gameType}`);\n }\n\n if(props.skipIntermediatePage) {\n builder.append(CyClass('cy-skip-intermediate-page'));\n }\n\n return builder.build();\n\n }\n\n\n if(!gameInfo) {\n return null;\n }\n\n try {\n\n const classes = _buildComponentClasses(gameInfo);\n\n switch (props.templateType) {\n\n case JACKPOTS_ITEM:\n return (\n <SingleGameJackpotTemplateComponent key={props.templateType}\n gameInfo={gameInfo}\n className={classes}\n onOpenRealGame={openRealGame}\n />\n );\n\n case LIVE_CASINO_ITEM:\n return (\n <SingleGameLiveTemplateComponent key={props.templateType}\n tableConfig={gameInfo}\n listTitle={props.listTitle}\n gameIndex={props.gameIndex}\n seoCategory={props.seoCategory}\n />\n );\n\n case LIVE_STREAMING_ITEM:\n return (\n <SingleGameVideoTemplate key={props.templateType}\n gameInfo={gameInfo}\n onOpenRealGame={openRealGame}\n intersectionTarget={props.intersectionTarget}\n videoItemType={VIDEO_ITEM_TYPE.LIVE_STREAM}\n gameIndex={props.gameIndex}\n onBringInCentralView={props.onBringInCentralView}\n />\n );\n\n case STATIC_VIDEO_ITEM:\n return (\n <SingleGameVideoTemplate key={props.templateType}\n gameInfo={gameInfo}\n onOpenRealGame={openRealGame}\n intersectionTarget={props.intersectionTarget}\n videoItemType={VIDEO_ITEM_TYPE.STATIC}\n isLastGametype={props.isLastGametype}\n gameIndex={props.gameIndex}\n onBringInCentralView={props.onBringInCentralView}\n />\n );\n\n default:\n return (\n <SingleGameRegularTemplateComponent key=\"SINGLE_GAME_REGULAR_TEMPLATE\"\n className={classes}\n gameInfo={gameInfo}\n disableGameInfoHover={props.disableGameInfoHover}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onOpenRealGame={openRealGame}\n onOpenAnonymousGame={openAnonymousGame}\n gameIndex={props.gameIndex}\n showNumberBadge={props.showNumberBadge}\n useSquareIcons={props.useSquareIcons}\n onOpenInfoPage={openInfoPage}\n onAnimationIconStateChange={setAnimatedIconState}\n hasTwoLinesTitle={props.hasTwoLinesTitle || false}\n />\n );\n }\n\n } catch (err) {\n services.logger.error(`Failed to render SingleGameComponent for game ${gameInfo.gameType} - ${gameInfo.title} in list ${props.listTitle}`, err);\n return null;\n }\n\n});\n\nexport const SingleGameComponent = withServices(ComponentBody, ['lobbyGameInfoPreview'], {\n renderSkeleton: props => {\n return (\n <SingleGameSkeletonComponent\n templateType={props.templateType}\n useSquareIcons={props.useSquareIcons}\n />\n );\n }\n});\n\nfunction toCssClass(str: string){\n try{\n return str.replace(/\\s+/g, '-').toLowerCase();\n }\n catch(e){\n return '';\n }\n}\n\n","import styled from \"styled-components\";\n\nexport const StandardToastImageDefaultBox = styled.div`\n color: ${({theme}) => theme.colors.brandPrimary};\n border: 2px solid ${({theme}) => theme.colors.brandPrimary};\n border-radius: 50%;\n margin-right: 21px;\n padding: 1rem;\n`;\n","import styled from \"styled-components\";\nimport {GAMING_HISTORY_PAGE, NEW_LIVE_CASINO_PAGE, TIPPING_HISTORY_PAGE, GAMES_OPEN_SESSIONS_PAGE} from \"../../../../themes/css-global-classes\";\n\nexport const TopBannerDefaultBox = styled.div`\n position: relative;\n width: 100%;\n transition: all 0.03s ease-in-out;\n padding-bottom: calc(200 / 1750 * 100%);\n\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(204 / 1712 * 100%);\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n padding-bottom: calc(165 / 1024 * 100%);\n .${NEW_LIVE_CASINO_PAGE} &, .${GAMING_HISTORY_PAGE} &, .${TIPPING_HISTORY_PAGE} &, .${GAMES_OPEN_SESSIONS_PAGE} & {\n padding-bottom: calc(122 / 1024 * 100%);\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding-bottom: calc(105 / 414 * 100%);\n .${GAMING_HISTORY_PAGE} &, .${TIPPING_HISTORY_PAGE} &, .${GAMES_OPEN_SESSIONS_PAGE} & {\n padding-bottom: calc(77 / 600 * 100%);\n }\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(77 / 414 * 100%);\n }\n }\n`;","import styled from \"styled-components\";\nimport {NEW_LIVE_CASINO_PAGE} from \"../../../../themes/css-global-classes\";\n\n/**\n * After all banners will be replaced with ones of the same size remove this code\n * PC 1750 x 200 / Mobile 414 x 105\n * @deprecated\n */\nexport const TopBanner777Box = styled.div`\n position: relative;\n width: 100%;\n padding-bottom: calc(250 / 1750 * 100%);\n \n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(200 / 1690 * 100%);\n }\n \n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-bottom: calc(215 / 1024 * 100%);\n \n }\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding-bottom: calc(155 / 414 * 100%);\n \n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(77 / 375 * 100%);\n }\n }\n \n`;","import styled from \"styled-components\";\nimport { TopBannerDefaultBox } from './top-banner.default.box'\nimport {NEW_LIVE_CASINO_PAGE} from \"../../../../themes/css-global-classes\";\n\n/**\n * After all banners will be replaced with ones of the same size remove this code\n * PC 1750 x 200 / Mobile 414 x 105\n * @deprecated\n */\nexport const TopBannerSIBox = styled(TopBannerDefaultBox)`\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n padding-bottom: calc(165 / 1024 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(165 / 1024 * 100%);\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding-bottom: calc(100 / 414 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(100 / 414 * 100%);\n }\n }\n\n background-color: ${({theme}) => theme.colors.backgroundDark};\n`;","import styled from \"styled-components\";\nimport {TopBannerDefaultBox} from \"./top-banner.default.box\";\nimport {NEW_LIVE_CASINO_PAGE} from \"../../../../themes/css-global-classes\";\n\n/**\n * After all banners will be replaced with ones of the same size remove this code\n * PC 1750 x 200 / Mobile 414 x 105\n * @deprecated\n */\nexport const TopBannerMrGreenBox = styled(TopBannerDefaultBox)`\n padding-bottom: calc(200 / 1750 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(200 / 1750 * 100%);\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n padding-bottom: calc(105 / 414 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(105 / 414 * 100%);\n }\n }\n`;","import styled from \"styled-components\";\nimport {NEW_LIVE_CASINO_PAGE} from \"../../../../themes/css-global-classes\";\nimport {TopBannerDefaultBox} from \"./top-banner.default.box\";\n\n/**\n * After all banners will be replaced with ones of the same size remove this code\n * PC 1750 x 200 / Mobile 414 x 105\n * @deprecated\n */\nexport const TopBannerCasino888Box = styled(TopBannerDefaultBox)`\n padding-bottom: calc(200 / 1750 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(200 / 1750 * 100%);\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n padding-bottom: calc(105 / 414 * 100%);\n .${NEW_LIVE_CASINO_PAGE} & {\n padding-bottom: calc(105 / 414 * 100%);\n }\n }\n`;\n","import {TopBannerDefaultBox} from \"./top-banner.default.box\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {TopBanner777Box} from \"./top-banner.777.box\";\nimport {TopBannerSIBox} from \"./top-banner.si.box\";\nimport {TopBannerMrGreenBox} from \"./top-banner.mrgreen.box\";\nimport {TopBannerCasino888Box} from \"./top-banner.888.box\";\n\nexport const TopBannerBox = styledByTheme(TopBannerDefaultBox)\n .forCasino888(TopBannerCasino888Box)\n .forCasino777(TopBanner777Box)\n .forSI(TopBannerSIBox)\n .forMrGreen(TopBannerMrGreenBox)\n .apply();","import styled from \"styled-components\";\nimport { Image } from \"../../../raw-components/image/image\";\n\nexport const TopBannerImageDefaultBox = styled(Image)`\n position: absolute;\n width: 100%;\n height: auto;\n bottom: 0;\n`;","import {TopBannerImageDefaultBox} from \"./top-banner-image.default.box\";\n\nexport const TopBannerImageBox = TopBannerImageDefaultBox;","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\nimport {NEW_LIVE_CASINO_PAGE} from \"../../../../themes/css-global-classes\";\nimport { Image } from \"../../../raw-components/image/image\";\n\nconst PCBox = styled(Image)``;\n\nconst MobileBox = styled(Image)`\n .${NEW_LIVE_CASINO_PAGE} & {\n max-height: 40px;\n }\n`;\n\nexport const TopBannerLogoImageDefaultBox = styledByDevice(PCBox, MobileBox);","import {TopBannerLogoImageDefaultBox} from \"./top-banner-logo-image.default.box\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\n\nexport const TopBannerLogoImageBox = styledByTheme(TopBannerLogoImageDefaultBox).apply() ;\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.h1`\n font-weight: 300;\n ${({theme}) => theme.font.presets.medium};\n color: ${props => props.theme.colors.textLight};\n`;\n\nconst PCBox = styled(DefaultBox)`\n font-size: 2rem;\n text-transform: capitalize;\n`;\n\nconst MobileBox = styled(DefaultBox)`\n font-size: 1.8rem;\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 1.2rem;\n }\n`;\n\nexport const TopBannerTitleDefaultBox = styledByDevice(PCBox, MobileBox);","import styled from \"styled-components\";\nimport {TopBannerTitleDefaultBox} from \"./top-banner-title.default.box\";\n\nexport const TopBannerTitleCasino777Box = styled(TopBannerTitleDefaultBox)`\n ${({theme}) => theme.font.presets.bold};\n`;\n","import {TopBannerTitleDefaultBox} from \"./top-banner-title.default.box\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {TopBannerTitleCasino777Box} from \"./top-banner-title.casino777.box\";\n\nexport const TopBannerTitleBox = styledByTheme(TopBannerTitleDefaultBox).forCasino777(TopBannerTitleCasino777Box).apply();","import styled from \"styled-components\";\n\nexport const TopBannerLiveLogoDefaultBox = styled.div`\n position: absolute;\n width: 100%;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n`;\n","import styled from \"styled-components\";\nimport {TopBannerLiveLogoDefaultBox} from \"./top-banner-live-logo.default.box\";\n\nexport const TopBannerLiveLogoCasino777Box = styled(TopBannerLiveLogoDefaultBox)`\n`;","import {TopBannerLiveLogoDefaultBox} from \"./top-banner-live-logo.default.box\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {TopBannerLiveLogoCasino777Box} from \"./top-banner-live-logo.casino777.box\";\n\nexport const TopBannerLiveLogoBox = styledByTheme(TopBannerLiveLogoDefaultBox).forCasino777(TopBannerLiveLogoCasino777Box).apply();","import styled from \"styled-components\";\n\nexport const AnimatedTopImageWrapper = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n`;\n\nexport const AnimatedTopImageScrollHandler = styled(AnimatedTopImageWrapper)`\n z-index: 5;\n`;\n","import React, {useMemo} from \"react\";\nimport styled from \"styled-components\";\nimport {observer} from \"mobx-react\";\nimport {DotLottiePlayer} from \"../lottie-player/dot-lottie-player.component\";\nimport {AnimatedTopImageWrapper} from \"./boxes/animated-top-image-wrapper\";\n\nconst LottieTopImageWrapper = styled(AnimatedTopImageWrapper)`\n svg {\n display: block;\n }\n`;\n\nexport interface AnimatedTopImageComponentProps {\n image: string;\n}\nexport const LottieAnimatedTopImageComponent: React.FC<AnimatedTopImageComponentProps> = observer((props) => {\n const styles = useMemo(() => ({}), []);\n return <LottieTopImageWrapper>\n <DotLottiePlayer\n src={props.image}\n autoplay\n loop\n style={styles}\n />\n </LottieTopImageWrapper>;\n});\n","import {reaction} from \"mobx\";\nimport {observer} from \"mobx-react\";\nimport React from \"react\";\nimport {PixiSpineAnimation} from \"../../services/pixi-app/pixi-spine-animation\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {AnimatedTopImageScrollHandler, AnimatedTopImageWrapper} from \"./boxes/animated-top-image-wrapper\";\n\n\nexport interface AnimatedTopImageComponentProps {\n image: string;\n}\n@observer\nexport class PixiAnimatedTopImageComponent extends OrbitComponent<AnimatedTopImageComponentProps> {\n private _animationElement: HTMLDivElement | null = null;\n private _reactionDisposer = null;\n private _bannerPixiAnimation: PixiSpineAnimation = null;\n\n componentDidMount(): void {\n this._startAnimation();\n this._reactionDisposer = reaction(() =>\n [\n this.services.mediaQuery.lAndBelow,\n this.services.mediaQuery.sAndBelow\n ],\n (data) => {\n this._stopAnimation();\n this._startAnimation();\n })\n }\n\n\n componentWillUnmount(): void {\n this._stopAnimation();\n this._reactionDisposer();\n }\n\n private _createAnimation() {\n let defautSkinConfiguration = {\n width: 1750,\n height: 200,\n name: \"desktop\",\n scale: 1\n }\n\n if (this.services.mediaQuery.lAndBelow) {\n defautSkinConfiguration.width = 1024;\n defautSkinConfiguration.height = 165;\n defautSkinConfiguration.name = \"tablet\";\n defautSkinConfiguration.scale = 1;\n }\n\n if (this.services.mediaQuery.sAndBelow) {\n defautSkinConfiguration.width = 414;\n defautSkinConfiguration.height = 105;\n defautSkinConfiguration.name = \"mobile\";\n defautSkinConfiguration.scale = 0.6;\n }\n return new PixiSpineAnimation(\n this.services,\n {\n width: defautSkinConfiguration.width, height: defautSkinConfiguration.height, force2DCanvasContext: true\n },\n [{name: 'slotsAnimatedBannerResource', jsonUrl: this.props.image}],\n {\n render: ({pixiApp, spineAnimations}) => {\n let spineAnimation = spineAnimations.slotsAnimatedBannerResource;\n spineAnimation.skeleton.setSkinByName(defautSkinConfiguration.name);\n spineAnimation.skeleton.setSlotsToSetupPose();\n\n // set the position and scale\n spineAnimation.x = pixiApp.screen.width / 2;\n spineAnimation.y = pixiApp.screen.height / 2;\n spineAnimation.scale.set(defautSkinConfiguration.scale);\n\n const runAnimation = () => {\n spineAnimation.state.setAnimation(0, \"intro\", false);\n spineAnimation.state.addAnimation(0, \"loop\", true, 0);\n }\n\n runAnimation();\n }\n },\n {\n width: \"100%\"\n }\n );\n }\n\n private async _startAnimation() {\n this._bannerPixiAnimation = this._createAnimation();\n this._bannerPixiAnimation.start();\n this._bannerPixiAnimation.attachToDOM(this._animationElement);\n }\n\n private _stopAnimation() {\n this._bannerPixiAnimation.dispose();\n }\n\n private captureAnimationDivElement = (el: HTMLDivElement | null) => {\n this._animationElement = el;\n }\n\n render() {\n return (<>\n <AnimatedTopImageWrapper ref={this.captureAnimationDivElement} />\n {/* when rendering the animated banner, on mobile, because of the canvas we cannot scroll the page when holding from the canvas element.\n So we put this div in front of it so when we touch the screen, the target element is the div not the canvas */}\n <AnimatedTopImageScrollHandler />\n </>);\n }\n}","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport { LottieAnimatedTopImageComponent } from \"./lottie-animated-top-image.component\";\nimport {PixiAnimatedTopImageComponent} from \"./pixi-animated-top-image.component\";\nimport {AnimatedTopImageConfiguration} from \"../../services/configurations/config-data-sections/arenas.configuration\";\n\n\nexport interface AnimatedTopImageComponentProps {\n imageAnimationConfig: AnimatedTopImageConfiguration;\n}\n@observer\nexport class AnimatedTopImageComponent extends OrbitComponent<AnimatedTopImageComponentProps> {\n render() {\n if (this.props.imageAnimationConfig.engine === \"pixi\") {\n return <PixiAnimatedTopImageComponent image={this.props.imageAnimationConfig.url} />\n }\n return <LottieAnimatedTopImageComponent image={this.props.imageAnimationConfig.url} />\n }\n}","import React, {RefObject} from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {TopBannerBox} from \"./boxes/top-banner/top-banner.box\";\nimport {TopBannerImageBox} from \"./boxes/top-banner-image/top-banner-image.box\";\nimport {TopBannerLogoImageBox} from \"./boxes/top-banner-logo-image/top-banner-logo-image.box\";\nimport {TopBannerTitleBox} from \"./boxes/top-banner-title/top-banner-title.box\";\nimport {TopBannerLiveLogoBox} from \"./boxes/top-banner-live-logo/top-banner-live-logo.box\";\nimport {ThemeProvider} from \"styled-components\";\nimport {AnimatedTopImageComponent} from '../animated-top-image/animated-top-image.component';\nimport {AnimatedTopImageConfiguration} from '../../services/configurations/config-data-sections/arenas.configuration';\n\nexport interface TopImageComponentProps {\n image: string;\n animatedBanner?: AnimatedTopImageConfiguration;\n title?: string;\n altText?: string;\n className?: string;\n topImageRef?: RefObject<HTMLDivElement>;\n}\n\nexport const TopImageComponent = observer(class TopImageComponent extends OrbitComponent<TopImageComponentProps> {\n\n private _renderLogoAndTitle() {\n if(this.props.title) {\n const srcLogo = this.services.device.isMobile\n ? this.services.theme.currentTheme.assets.images.casino_live_logo_mobile_png.toString()\n : this.services.theme.currentTheme.assets.images.casino_live_logo_png.toString();\n return (\n <TopBannerLiveLogoBox>\n <TopBannerLogoImageBox\n className={'cy-top-banner-logo-image'}\n alt={this.services.translation.translate(this.props.title) + \" Logo\"}\n src={srcLogo}\n />\n <TopBannerTitleBox className={'cy-top-banner-title'}>{this.services.translation.translate(this.props.title)}</TopBannerTitleBox>\n </TopBannerLiveLogoBox>\n )\n }\n return null;\n }\n\n render() {\n if (!this.props.image || (this.services.gamesFilter.isFilterOn && this.services.mediaQuery.sAndBelow)) {\n return null;\n }\n\n // TODO: maybe get also an image placeholder to enable lazy loading\n return (\n <ThemeProvider theme={this.services.theme.currentTheme}>\n <TopBannerBox ref={this.props.topImageRef} className={'cy-top-banner'}>\n {this.props.animatedBanner ?\n <AnimatedTopImageComponent imageAnimationConfig={this.props.animatedBanner} />\n :\n <TopBannerImageBox\n alt={this.services.translation.translate(this.props.title || this.props.altText || \"\")}\n src={this.props.image}\n className={'cy-top-banner-image'}\n fetchPriority=\"high\"\n />}\n {this._renderLogoAndTitle()}\n </TopBannerBox>\n </ThemeProvider>\n )\n\n }\n});\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const UsefulLinksListBox = styledBox('UsefulLinksListBox');","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {UsefulLinksListBox} from '../../boxes/list/useful-links-list.box';\nimport {observer} from 'mobx-react';\nimport {styled} from '@mui/material';\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface UsefulLinksListComponentProps extends ComponentServicesPick<'userMenu'> {\n onItemClick?: () => void;\n // this will be UserMenuSectionBox in general except for mini orbit where it is gonna be MiniOrbitUsefulLinksListBox\n linksGroupWrapperBox?: React.ComponentType<{className?: string}>;\n linksGroupWrapperClassName?: string;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent<UsefulLinksListComponentProps> {\n render() {\n const LinksGroupWrapperBox = this.props.linksGroupWrapperBox ? this.props.linksGroupWrapperBox : styled.div``;\n return this.props.userMenu.usefulLinksMenuItems.map((list, index) =>\n <LinksGroupWrapperBox className={this.props.linksGroupWrapperClassName} key={\"list_\"+index}>\n <UsefulLinksListBox className='cy-useful-links-list'>\n { list.map((menuItem, index) => menuItem.renderMenuItem({onBeforeClick: this.props.onItemClick, showSeparator: !!index}) )}\n </UsefulLinksListBox>\n </LinksGroupWrapperBox>\n )\n }\n}\n\nexport const UsefulLinksListComponent = withServices(ComponentBody, [\"userMenu\"]);","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const UserMenuSeparatorBox = styledBox('UserMenuSeparatorBox');","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const UserMenuSectionBox = styledBox('UserMenuSectionBox');\n","import styled from \"styled-components\";\n\n\nexport const VideoPlayButtonBox = styled.button`\n background-image: url(\"${props => props.theme.assets.images.SpriteSheetPC1920_png.toString()}\");\n background-position: -544px -409px;\n background-size: 1200px;\n background-repeat: no-repeat;\n position: absolute;\n cursor: pointer;\n right: 0;\n left: 0;\n top: 0;\n bottom: 0;\n margin: auto;\n width: 6rem;\n height: 6rem;\n opacity: 0.9;\n transform: scale(1.5);\n transform: translateY(0);\n transition: all 0.35s ease-in-out;\n`;\n\n\n","import {IServiceFactory} from \"../services/service-factory.interface\";\nimport {useContext} from \"react\";\nimport {OrbitContext} from \"../orbit-context\";\n\nexport function useServices(): IServiceFactory {\n return useContext(OrbitContext).services;\n}","import {IServiceFactory, IServiceProvider} from \"../services/service-factory.interface\";\nimport React, {useEffect, useState} from \"react\";\nimport {useServices} from \"./use-services.hook\";\n\ntype CommonProperties<T, U> = Extract<keyof T, keyof U>;\n\ntype ComponentProps<TProps> = Omit<TProps, keyof IServiceFactory>\n\n/*\ntype Permutations<T, K = T> = [T] extends [never]\n ? []\n : K extends K\n ? [K, ...Permutations<Exclude<T, K>>]\n : never;\n*/\n\n\ninterface IServiceToInject {\n serviceName: string;\n serviceInstance: any;\n}\n\nfunction createServicesToInjectMap(services: IServiceToInject[]): Record<string, any> {\n return services.reduce((accumulator, current) => {\n accumulator[current.serviceName] = current.serviceInstance;\n return accumulator;\n }, {});\n}\n\nfunction getServicesToInject(serviceProvider: IServiceProvider, servicesNames: string[]): Record<string, any> {\n\n return createServicesToInjectMap(servicesNames.map(name => {\n return {\n serviceName: name,\n serviceInstance: serviceProvider.getServiceByName(name)\n }\n }));\n}\n\nfunction getUnresolvedServices(servicesMap: Record<string, any>): IServiceToInject[] {\n const result: IServiceToInject[] = [];\n\n Object.keys(servicesMap).forEach(name => {\n const instance = servicesMap[name];\n if(instance instanceof Promise) {\n result.push({\n serviceName: name,\n serviceInstance: instance\n });\n }\n });\n\n return result;\n}\n\nasync function resolveServicesToInject(servicesToInject: IServiceToInject[]): Promise<IServiceToInject[]> {\n return await Promise.all(servicesToInject.map(async (srv) => {\n const resolvedServiceInstance = await (srv.serviceInstance as Promise<any>);\n return {\n serviceName: srv.serviceName,\n serviceInstance: resolvedServiceInstance\n }\n }))\n}\n\ninterface IWithServicesOptions<TProps> {\n renderSkeleton?: (compProps: ComponentProps<TProps>) => React.ReactElement | null\n}\n\nexport function withServices<TProps>(Component: React.ComponentType<TProps>,\n servicesNamesToInject: CommonProperties<TProps, IServiceFactory>[],\n options?: IWithServicesOptions<TProps>) {\n\n const HOC: React.FC<ComponentProps<TProps>> = (componentProps: ComponentProps<TProps>) => {\n const serviceProvider = (useServices() as any) as IServiceProvider;\n const [servicesToInject, setServicesToInject] = useState<any>(getServicesToInject(serviceProvider, servicesNamesToInject));\n\n const unresolvedServices = getUnresolvedServices(servicesToInject);\n\n useEffect(() => {\n if(unresolvedServices.length > 0) {\n resolveServicesToInject(unresolvedServices).then(resolvedServices => {\n setServicesToInject({\n ...servicesToInject,\n ...createServicesToInjectMap(resolvedServices)\n });\n });\n }\n }, [serviceProvider, servicesToInject, unresolvedServices]);\n\n if (unresolvedServices.length > 0) {\n if(options?.renderSkeleton) {\n return options?.renderSkeleton(componentProps);\n } else {\n return null;\n }\n }\n\n return (\n <Component {...componentProps} {...servicesToInject}/>\n );\n }\n\n return HOC;\n}\n","import {IServiceFactoryExtended} from './service-factory-extended.interface';\nimport {IReactionOptions} from \"mobx\";\nimport {reaction as mobxReaction, IReactionDisposer, IReactionPublic} from 'mobx'\n\nexport class ServiceBase {\n constructor(private _serviceFactory: IServiceFactoryExtended) {\n }\n\n protected get services(): IServiceFactoryExtended {\n return this._serviceFactory;\n }\n\n private _reactions: IReactionDisposer[] = [];\n\n\n reaction<T, FireImmediately extends boolean = false>(expression: (r: IReactionPublic) => T, effect: (arg: T, prev: FireImmediately extends true ? T | undefined : T, r: IReactionPublic) => void, opts?: IReactionOptions<T, FireImmediately>): void {\n this._reactions.push(mobxReaction(expression, effect, opts));\n }\n\n\n dispose() {\n this._reactions.forEach(disposer => disposer());\n }\n}\n","import {IAbTestingFeature} from \"./ab-testing-feature-data-provider.service.interface\";\n\nexport interface IFeatureToggleViewModel {\n readonly isEnabled: boolean;\n getFeatureABData(): IAbTestingFeature | null;\n}\n\nexport enum FeatureToggleStatusEnum {\n Disabled = 0,\n Enabled = 1,\n EnabledByAB = 2\n}","import {IElasticEventData, IStructuredLogger} from '../../../common/interfaces/structured-logging-service-interface';\nimport {MenuItemKey} from \"../configurations/config-data-sections/generated-config-const\";\n\nexport enum OrbitUserFlowAnalyticsCategory {\n Navigation = 'Navigation',\n PWA = 'PWA',\n Search = 'Search',\n}\n\nexport enum OrbitUserFlowAnalyticsLabel {\n AppHeader = \"AppHeader\",\n HomePageHeaderArenas = \"HomePageHeaderArenas\",\n NavigationMenu = 'NavMenu',\n UserArea = 'UserArea',\n BottomNavigationBar = 'BottomNavBar',\n ShowMore = 'Show_More'\n}\n\nexport type OrbitUserFlowAnalyticsAction = MenuItemKey\n | string\n | 'myAccountButton' | 'withdrawButton' | 'depositButton'\n | 'Entry';\n\nexport enum OrbitMarketingEventAnalyticsCategory {\n Conversion = 'Conversion',\n Communications = 'Communications',\n}\n\nexport enum OrbitMarketingEventAnalyticsLabel {\n PreGamePopUp = 'PreGamePopUp',\n DemoRegPopup = 'DemoRegPopup',\n VideoPlayback = 'VIDEO_PLAYBACK',\n Error = 'ERROR',\n Click = 'CLICK',\n}\n\nexport type OrbitMarketingEventAnalyticsAction = MenuItemKey\n | string\n | 'Play' | 'Show'\n | 'IN_VIEW' | 'LIMIT_REACH' | 'AUTOPLAY' | 'PLAY' | 'PLAY_GAME' | 'SOUND_CLICK'\n | 'Open_Floating_Button' | 'Close_Floating_Button' | 'View_Floating_Button';\n\nexport enum OrbitAIFeatureAnalyticsCategory {\n AIArenaIconsDisplayed = 'AI_ArenaIconsDisplayed',\n CorrelatedGamePopUp = 'CorrelatedGamePopUp'\n}\n\nexport type OrbitAIFeatureAnalyticsAction = MenuItemKey\n | string\n | 'Game_Unavailable'\n\n\nexport interface ISendElasticEventOptions {\n eventType: string;\n category: string;\n action: string;\n label?: string;\n value?: string;\n customData?: object;\n appID?: string;\n}\n\nexport interface IAnalyticsService {\n sendAnalytics(category: string, action?: string, label?: string, value?: any, omitStructuredLogger?: boolean): void;\n sendTechnicalEvent(action: string, label?: string, value?: any): void;\n sendElasticInfoEvent(options: ISendElasticEventOptions, sendToDWH?: boolean): void;\n sendOrbitUserFlowEvent(category: string | OrbitUserFlowAnalyticsCategory, action: OrbitUserFlowAnalyticsAction, label?: string | OrbitUserFlowAnalyticsLabel, value?: any): void;\n sendOrbitMarketingEvent(category: string | OrbitMarketingEventAnalyticsCategory, action: OrbitMarketingEventAnalyticsAction, label?: string | OrbitMarketingEventAnalyticsLabel, value?: any): void;\n sendOrbitAIFeatureEvent(category: string | OrbitAIFeatureAnalyticsCategory, action: OrbitAIFeatureAnalyticsAction, label?: string, value?: any): void;\n getLogger(eventData?: IElasticEventData): IStructuredLogger;\n getGoogleClientID(): string;\n\n /**\n * Allows widgets like Deposit Widget to write logs through our logging system.\n * @param payload\n */\n writeWidgetLogs(payload: any): Promise<void>;\n}\n\n\n\n","export const NEW_LIVE_CASINO_ARENA_NAME = 'newLiveCasino';\nexport const NEW_LIVE_CASINO_AB_ARENA_NAME = 'newLiveCasinoAB';\nexport const CIP_ALL_GAMES_ARENA_NAME = 'cipAllGames';\nexport const SLOTS_ARENA_NAME = 'slots';\nexport const CASINO_GAMES_ARENA_NAME = 'casinoGames';\nexport const JACKPOTS_ARENA_NAME = 'jackpots';\nexport const EXCLUSIVE_ARENA_NAME = 'exclusive888Games';\nexport const SCRATCH_CARDS_ARENA_NAME = 'scratchCards';\nexport const VIDEO_POKER_ARENA_NAME = 'videoPoker';\nexport const INSTANT_WIN_GAMES_ARENA_NAME = 'instantWinGames';\nexport const BLACKJACK_ARENA_NAME = 'blackjack';\nexport const VIRTUAL_SPORT_ARENA_NAME = 'virtualSport';\nexport const ROULETTE_ARENA_NAME = 'roulette';\nexport const PROGRESSIVE_SLOTS_ARENA_NAME = 'progressiveSlots';\nexport const NEW_GAMES_ARENA_NAME = 'newGames';\nexport const HOME_PAGE_ARENA = 'homePage';\nexport const VIDEO_SLIDES_ARENA = 'videoSlidesArena';\n\nexport const ALL_ARENAS = Array.of(\n NEW_LIVE_CASINO_ARENA_NAME,\n NEW_LIVE_CASINO_AB_ARENA_NAME,\n CIP_ALL_GAMES_ARENA_NAME,\n SLOTS_ARENA_NAME,\n CASINO_GAMES_ARENA_NAME,\n JACKPOTS_ARENA_NAME,\n EXCLUSIVE_ARENA_NAME,\n SCRATCH_CARDS_ARENA_NAME,\n VIDEO_POKER_ARENA_NAME,\n INSTANT_WIN_GAMES_ARENA_NAME,\n BLACKJACK_ARENA_NAME,\n VIRTUAL_SPORT_ARENA_NAME,\n ROULETTE_ARENA_NAME,\n PROGRESSIVE_SLOTS_ARENA_NAME,\n NEW_GAMES_ARENA_NAME,\n HOME_PAGE_ARENA,\n);\n","import {IDeviceInfoParameters, DeviceType, IGeoInfoParameters, IUserInfoParameters} from '@sparkware/uc-sdk-core';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport Device from \"../../../sdk/src/utils/device/device\";\nimport {IMarketingObject} from '../hybrid/hybrid.service.interface';\n\nexport function getCasinofiedDeviceInfo(services: IServiceFactoryExtended): IDeviceInfoParameters {\n const hybridTestData: IMarketingObject = services.hybrid.getAppMareketingData();\n return {\n deviceType: getCasinofiedDeviceType(services),\n isHybrid: Device.hybrid.inCasino,\n OS: services.device.os.name,\n isNative: false,\n browserType: services.device.os.name,\n appsFlyerId: hybridTestData.AppsFlyerID,\n deviceId: hybridTestData.DeviceID,\n appId: hybridTestData.AppID,\n afInstall: services.hybrid.getAFInstall(),\n firebaseAppId: hybridTestData.FirebaseAppID,\n firebaseAppInstanceId: hybridTestData.FirebaseAppInstanceID\n };\n}\n\nexport function getCasinofiedCommonUserInfo(services: IServiceFactoryExtended): IUserInfoParameters {\n const userInfo: IUserInfoParameters = {\n userMode: 'anonymous',\n regulationTypeID: services.regulation.getRegulationCode(),\n isFTD: services.user.userData?.isFTD || false,\n isVIP: services.user.isVip,\n isPromotionPermitted: services.user.userData?.IsPromotionPermitted || false,\n RMS: services.user.playerRMSStatus,\n userFirstName: services.user.userData?.firstName,\n userLastName: services.user.userData?.lastName,\n }\n\n if (services.user.isAuthorized) {\n userInfo.cid = services.user.cid;\n }\n\n return userInfo;\n}\n\nexport async function getCasinofiedGeoInfoParams(services: IServiceFactoryExtended): Promise<IGeoInfoParameters> {\n const geoLocationInfo = await services.sdk.getGeoLocationInfo();\n\n return {\n country: services.sdk.getCountryIso3()?.toUpperCase(),\n timeZoneUTCOffset: services.time.getTimezoneOffset().toString(),\n loginIp: services.user.loginIP,\n ISP: geoLocationInfo?.isp,\n proxyType: geoLocationInfo?.proxyType,\n stateID: geoLocationInfo?.stateId,\n stateName: geoLocationInfo?.state ?? \"\"\n }\n}\n\nexport function getCasinofiedCommonAppContextParams(services: IServiceFactoryExtended) {\n return {\n productPackageFromID: services.sdk.getProductPackageId(),\n brandID: services.sdk.getBrandID(),\n subBrandID: services.sdk.getSubBrandID(),\n languageCode: services.language.currentLanguage,\n locale: services.sdk.getSkin().getCulture(),\n currencyCode: services.currency.currencyIso3,\n gaClientID: services.analytics.getGoogleClientID(),\n clientThemeName: services.theme.themeName.forWidgets\n }\n}\n\nfunction getCasinofiedDeviceType(services: IServiceFactoryExtended) {\n if (services.device.isTablet) {\n return DeviceType.Tablet;\n }\n\n if (services.device.os.isMobileOS) {\n return DeviceType.SmartPhone;\n }\n\n return DeviceType.PC;\n}\n","import {AppIdentifiers, ITopicHeaders} from '@sparkware/uc-sdk-core';\n\nexport const STANDARD_TOPIC_HEADER: ITopicHeaders = {\n publisher: AppIdentifiers.CasinoClient\n};\n\n","import React from 'react';\nimport {BannerRenderProps, IBannerDefinition} from './banner-definition.interface';\nimport {EmptyBannerComponent} from '../../../../components/cms-banner/empty-banner/empty-banner.component';\n\nexport class EmptyBannerDefinition implements IBannerDefinition {\n\n render(props: BannerRenderProps): React.ReactNode {\n return (<EmptyBannerComponent showPlaceholder={props.showPlaceholder} minHeight={props.minHeight}/>)\n }\n}\n","import {Check} from '@sparkware/app-utils';\nimport {NullableUndefinedString} from \"../../../../../common/types/nullable-types\";\n\nexport class CmsBannerId {\n constructor(private _componentID: string, private _templateID: string, private _fallbackFileUrl: NullableUndefinedString) {\n }\n\n isMatch(componentId: number, templateId: number): boolean {\n return this._areEqual(componentId, this.componentID)\n && this._areEqual(templateId, this.templateID);\n }\n\n private _areEqual(val1: any, val2: any): boolean {\n val1 = Check.isNullOrUndefined(val1) ? '' : val1.toString();\n val2 = Check.isNullOrUndefined(val2) ? '' : val2.toString();\n\n return val1 === val2;\n }\n\n get key(): string {\n return `${this.componentID}_${this.templateID}_${this._fallbackFileUrl ?? 'null'}`;\n }\n\n get componentID(): any {\n return this._componentID;\n }\n\n get templateID(): any {\n return this._templateID;\n }\n\n get fallbackFileName(): string {\n return this._fallbackFileUrl;\n }\n\n isValidCmsId(): boolean {\n return !(Check.isEmpty(this._componentID) || Check.isEmpty(this._templateID));\n }\n\n toString() {\n return `templateID: ${this.templateID}; componentID: ${this.componentID}`;\n }\n}\n","export interface IControlCenterService {\n readonly isEnabled: boolean;\n}\n\nexport enum CONTROL_CENTER_CONTAINERS_ID {\n CONTROL_CENTER_FULL_CONTAINER_ID = \"FullSafeZoneContainer\",\n CONTROL_CENTER_MINI_CONTAINER_ID = \"MiniSafeZoneContainer\"\n}\n\nexport const CONTROL_CENTER_BI_EVENTS = {\n MINI_OPEN: \"sz_mini_open\", //01010101\n MINI_READY: \"sz_mini_ready\",\n MINI_CLOSE_INTERNAL: \"sz_mini_close_internal\",\n MINI_CLOSE_EXTERNAL: \"sz_mini_close_external\", //01010104\n FULL_OPEN: \"sz_full_open\", //01020101\n FULL_READY: \"sz_full_ready\",\n FULL_CLOSE_EXTERNAL: \"sz_full_close_external\", //01020104\n CATEGORY_MINI: \"mini\",\n CATEGORY_FULL: \"full\"\n};\n\n\n","import React from 'react';\nimport {ButtonPreset} from \"../../basic-ui-components/button/base/button-props.interface\";\nimport { ISvgIconProps } from '../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {OverflowProperty} from \"../../../common/types/css\";\n\nexport interface IModalDialogHandler {\n close(shouldApplyClosingAnimation?: boolean, isClosedDirectlyByUser?: boolean): void;\n zIndex: number;\n shouldBeClosedOnlyByUser: boolean;\n shouldApplyClosingAnimation: boolean;\n readonly isHidden: boolean;\n display(): void;\n hide(): void;\n}\n\nexport interface ShowModalOptions {\n useAutoHeight?: boolean;\n title?: string;\n icon?: React.ComponentType<ISvgIconProps>;\n onClosed?: () => void;\n onClosedByXButton?: ()=> void;\n onHide?: () => void;\n onDisplay?: () => void;\n debugInfo?: string;\n hideBorders?: boolean;\n hideCloseButton?: boolean;\n showOpenAndCloseAnimation?: boolean;\n forceTransparentBackground?: boolean;\n transparentBackgroundOpacity?: number;\n forceTransparentContentBackground?: boolean;\n hideDialogHeader?: boolean;\n forceCentralization?: boolean;\n disableFullscreenMobile?: boolean;\n applyMaxHeight?: boolean;\n mobileCenterHeader?: boolean;\n isHighPriority?: boolean;\n forceZOrder?:number;\n shouldBeClosedOnlyByUser?: boolean;\n forceFullscreenTablet?: boolean;\n headerClass?: string;\n showPopupAboveSecondWebViewHybrid?:boolean;\n noDefaultContentPadding?: boolean;\n renderExtraHeaderButtons?: () => React.ReactElement;\n overflow?: OverflowProperty;\n createAsHidden?: boolean;\n}\n\nexport enum DialogButtonClickHandleResultEnum {\n CloseDialogAndContinue,\n KeepDialogOpen\n}\n\nexport interface ISimpleTextModalButtonOptions {\n text: string;\n buttonPreset: ButtonPreset;\n onClick: () => Promise<DialogButtonClickHandleResultEnum>;\n}\n\nexport interface ISimpleTextModalOptions {\n text: string | string[] | React.ReactElement;\n title?: string;\n /** @deprecated Do not send an icon as a string url or as react element. Use an svg icon in the iconSvg prop */\n icon?: string | React.ReactElement;\n iconSvg?: React.ComponentType<ISvgIconProps>;\n showEmptyTitle?: boolean;\n hideCloseButton?: boolean;\n buttons?: ISimpleTextModalButtonOptions[];\n disableFullscreenMobile?: boolean;\n showPopupAboveSecondWebViewHybrid?: boolean;\n onClosedByXButton?: ()=> void;\n onClosed?: () => void;\n shouldBeClosedOnlyByUser?: boolean;\n}\n\nexport interface IDialogService {\n showModal(renderContent: (dialogHandler: IModalDialogHandler) => React.ReactNode, options?: ShowModalOptions): IModalDialogHandler;\n showSimpleTextModal(options: ISimpleTextModalOptions): IModalDialogHandler;\n readonly currentDialogs: React.ReactNode[];\n readonly hasOpenDialogs: boolean;\n getMaxCGPOverlayZIndex(): number;\n closeAllDialogs(): void;\n countDialogs(opts: {includeHidden: boolean;}): number;\n getCurrentMaxZIndex(): number;\n\n}","export enum ExternalLinksZIndexes {\n OmgBehindTheGame= 8035,\n GameFrame = 8040,\n MyAccount = 8060,\n InternalOverExternalLink= 8065,\n Omg = 8070,\n Cashier = 8072,\n GeoProgressIndicator = 8074,\n Membership = 8078,\n PendingAction = 8085,\n TouchID = 8090,\n BurnOutAnimation = 8082\n}","import {UserController_GetPendingActionsResponse} from \"../../../api/api.service\";\n\n\nexport interface IPendingActionExternalLinkHandler<TOptions> {\n openPendingAction(options?: TOptions): Promise<PendingActionResultEnum>;\n}\n\nexport type PendingActionData = UserController_GetPendingActionsResponse[\"PendingActions\"][number];\n\nexport enum PendingActionResultEnum {\n ContinueCurrentFlow,\n BlockCurrentFlow\n}\n\nexport enum PendingActionTypeEnum {\n ResponsibleGaming = 19,\n ResponsibleGamingPhase2 = 22,\n\n /*\n Register player to regulator = 1,\n Demo to Real conversion = 2,\n Privacy policy = 3,\n Terms and Conditions approval = 4,\n Spain Full Migration = 5,\n Spain Only Migration = 6,\n Spain Only Registartion = 7,\n Complete Registration = 8,\n OPT-IN (whether the user wants Promotion Emails ) = 9,\n Geo Locate Mobile = 10,\n Players acknowledges before continuing = 11,\n Email Verification = 13,\n NEM-ID authentication required = 14,\n Sweden migration = 15,\n UK DOB Verification = 16,\n UK Address Verification = 17,\n UK View Verification Page = 18,\n Responsible Gaming = 19,\n Bonus Policy change = 20,\n Hesse Terms and Conditions Approval = 21,\n Responsible Gaming Phase 2 = 22,\n Retry Page = 23,\n Adding playing time limits = 24,\n ResubscribePending = 28,\n */\n}\n\nexport enum PendingActionReasonEnum {\n GamingCautionInteraction = 20,\n /*\n Complete real registration process = 1,\n Time out in registration to regulator = 2,\n Regulation Migration Process = 3,\n Short Registration Process = 4,\n Geo Location Detection = 5,\n Deposited more than the limit = 6,\n ThePlayerShouldVerifyHisEmailBeforeContinuing = 7,\n Terms and Conditions update = 8,\n Other = 9,\n DE Migration Process = 10,\n Danish Player should be authenticated with its NEM-ID = 11,\n UK account verification = 12,\n Gaming Caution escalation = 14,\n Adding playing time limits = 16,\n Adding playing time limits = 17,\n */\n}\n\nexport enum PendingActionIdEnum {\n SwedenGamingCaution = 40\n}","import {MarketingParams} from \"../../../../../common/interfaces/marketing-params.interface\";\nimport {IChannel} from \"@sparkware/uc-sdk-core\";\n\nexport const REGISTRATION_DATA_KEY = 'storeRegistrationData';\n\nexport interface IOpenRegistrationOptions {\n channel: IChannel;\n businessCorrelationID?: string;\n marketingParams?: MarketingParams;\n promoCode?: string;\n}\n\nexport interface IRegistrationExternalLinkHandler {\n openRegistration(options?: IOpenRegistrationOptions): Promise<void>;\n}","import {IServiceFactory} from '../../service-factory.interface';\nimport {GameInfo} from '../../games/game-info';\n\nexport enum PreviewFeatureType {\n description = 1,\n check = 2\n}\n\nexport interface PreviewFeatureEvaluationResult {\n title: string;\n value: any;\n type: PreviewFeatureType;\n}\nexport interface IGamePreviewFeature {\n readonly name: string;\n evaluate(services: IServiceFactory, gameInfo: GameInfo): PreviewFeatureEvaluationResult;\n}\n","import {IGamePartsViewModel} from \"../game-parts/game-parts-view-model.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {IGameSize} from \"../open-game-api-callers/open-game-api-response.interface\";\nimport {\n Nullable,\n NullableUndefinedString,\n UndefinedNumber\n} from \"../../../../../common/types/nullable-types\";\nimport {IRunningGameControllerViewModel} from \"../game-controller/running-game-controller.interface\";\nimport {IOpenHistoryGameParams} from \"../../game-runner.service.interface\";\nimport {IFreePlayVoucherViewModel} from \"../../../free-play/vouchers/free-play-voucher-view-model.interface\";\nimport {AddInGameFundsOptions, IRegulatedCompanyModel} from \"../../../companies/regulated-company-model.interface\";\n\nexport enum GameModeEnum {\n Demo = 0,\n Real = 1,\n History = 2\n}\n\nexport interface IGameSessionDataViewModel {\n readonly totalBets: number;\n readonly totalWins: number;\n readonly bankroll: number;\n readonly vendorGameSessionId: NullableUndefinedString;\n readonly regulationGameSessionId: NullableUndefinedString;\n readonly regulationParticipationTicketId: NullableUndefinedString;\n readonly netPosition: number;\n}\n\nexport interface IGameFreePlayContextViewModel {\n readonly isFreePlay: boolean;\n readonly isCurrentFreePlayMandatory: boolean;\n readonly isFreePlayMandatoryWhenAvailable: boolean;\n readonly shouldShowFreePlayHeader: boolean;\n readonly currentFreePlayVoucher: IFreePlayVoucherViewModel | null;\n readonly otherAvailableVouchersForCurrentGame: IFreePlayVoucherViewModel[];\n}\n\nexport interface IGameContextViewModel {\n readonly gameMode: GameModeEnum;\n readonly gameInfo: GameInfo;\n readonly controller: IRunningGameControllerViewModel;\n readonly supportsAddInGameFunds: boolean;\n addInGameFunds(options: AddInGameFundsOptions): Promise<void>;\n readonly company: IRegulatedCompanyModel;\n readonly gameParts: IGamePartsViewModel;\n readonly launchGameUrl: string | null;\n readonly gameSize: Nullable<IGameSize>;\n readonly isGameResizable: boolean;\n readonly freePlayContext: IGameFreePlayContextViewModel;\n readonly historyGameParams: IOpenHistoryGameParams | undefined;\n readonly gameSessionData: IGameSessionDataViewModel;\n readonly referrerId: UndefinedNumber;\n readonly allowSwitchBetweenDemoAndReal: boolean;\n}","import {GameContextModel} from \"../../../companies/game-context/game-context.model\";\n\nexport enum GameStepsExecutionResultEnum {\n Continue,\n Cancel\n}\n\n\nexport interface IGameRunStep {\n readonly isEnabled: boolean;\n disableGameStep(): this;\n enableGameStep(): this;\n executeStep(gameContext: GameContextModel): Promise<GameStepsExecutionResultEnum>;\n dispose(): void;\n}","export enum GameVendorId {\n V_888 = 1,\n V_CTXM = 2,\n V_vsGaming = 3,\n V_Electracade = 4,\n V_LNW = 5,\n V_Rival = 6,\n V_Dynamite = 7,\n V_Ashgaming = 8,\n V_Crypto = 9,\n V_BlueSq = 10,\n V_Bellfruit = 11,\n V_Sportech = 12,\n V_Netent = 13,\n V_Evolution = 14,\n V_WagerWorks = 15,\n V_Betlow = 16,\n V_Fremantle = 17,\n V_Gamesq = 18,\n V_DSL = 19,\n V_Ponsbic = 20,\n V_Blueprint = 21,\n V_Endemol = 22,\n V_Mazooma = 23,\n V_Genesis = 24,\n V_RevolverGaming = 25,\n V_Kambi = 26,\n V_NetEnt = 27,\n V_LNW2 = 28,\n V_Ingenuity = 29,\n V_PlayTech = 30,\n V_UniversalStudios = 31,\n V_IGT = 32,\n V_Elk = 33,\n V_Thunderkick = 34,\n V_Merkur = 35,\n V_NextGenBigTime = 36,\n V_Sigma = 37,\n V_Wizard = 38,\n V_Quickspin = 39,\n V_GamesGlobal = 40,\n V_Yggdrasil = 41,\n V_Amatic = 42,\n V_BallyWulff = 43,\n V_Skilzz = 44,\n V_LightningBox = 46,\n V_RedTiger = 47,\n V_Pragmatic = 48,\n V_NorthernLight = 49,\n V_H5 = 50,\n V_RubyPlay = 51,\n V_NextGenChanceInteractive = 52,\n V_PlayNGo = 53,\n V_AGS = 54,\n V_Gamevy = 55,\n V_Eyecon = 56,\n V_Greentube = 57,\n V_iSoftBet = 58,\n V_Playson = 59,\n V_Spectate = 60,\n V_Inspired = 61,\n V_PGSoft = 62,\n V_Skywind = 63,\n V_Habanero = 64,\n V_MGA = 65,\n V_RFranco = 66,\n V_4theplayer = 67,\n V_Realistic = 68,\n V_Oryx = 69,\n V_ReelPlay = 70,\n V_GamingRealms = 71,\n V_Hacksaw = 72,\n V_PushGaming = 73,\n V_WMG = 74,\n V_1x2 = 75,\n V_GoldenRace = 76,\n V_Leap = 77,\n V_Core = 78,\n V_ReelNRG = 79,\n V_IronDog = 80,\n V_Authentic = 81,\n V_Gamomat = 82,\n V_EGT = 83,\n V_Endorphina = 84,\n V_Betsoft = 85,\n V_Playzido = 86,\n V_RedRake = 87,\n V_PlayzidoOthers = 88,\n V_TomHorn = 89,\n V_NeoGames = 90,\n V_BFGames = 91,\n V_Kalamba = 92,\n V_GiveMe = 93,\n V_GoldenHero = 94,\n V_2by2 = 95,\n V_PlankGaming = 96,\n V_BulletproofGames = 97,\n V_Ainsworth = 98,\n V_Everi = 99,\n V_Wazdan = 100,\n V_PlayzidoReelplay = 101,\n V_Gong = 102,\n V_NoLimitCity = 103,\n V_DWG = 104,\n V_TripleCherry = 105,\n V_Spearhead = 106,\n V_Spinomenal = 107,\n V_Spribe = 108,\n V_CIRSA = 109,\n V_Funfair = 110,\n V_GreenJade = 111,\n V_NazionaleElectronica = 112,\n V_Booming = 113,\n V_Darwin = 114,\n V_Betixon = 115,\n V_NetGaming = 116,\n V_BGaming = 117,\n V_BlueHorn = 118,\n V_SpinPlay = 119,\n V_Arcadia = 120,\n V_Stakelogic = 121,\n V_Live5 = 122,\n V_Swintt = 123,\n V_Edict = 124,\n V_GameArt = 125,\n V_LadyLuck = 126,\n V_SmartSoft = 127,\n V_Spinberry = 128,\n V_TopSpin = 129,\n V_eZugi = 130,\n V_IndigoMagic = 131,\n V_AtomicLabs = 132,\n V_Bluberi = 133,\n V_RAW = 134,\n V_Reevo = 135,\n V_WhiteHat = 136,\n V_Galaxis = 137,\n V_Synot = 138,\n V_EGTDigital = 139\n }","import {GameInfo} from '../games/game-info';\nimport React from \"react\";\nimport {Nullable} from \"../../../common/types/nullable-types\";\nimport {IGameFilterDefinition} from './filters-definitions/game-filter-definition.interface';\n\nexport interface IFiltersGroup {\n text: string;\n filters: ActiveFilter[];\n isMultiSelect: boolean;\n}\n\nexport interface ActiveFilter {\n readonly id: string;\n readonly text: string;\n readonly on: boolean;\n readonly isDynamic: boolean;\n}\n\n\n\nexport enum FilterIndicatorRenderingLocation {\n BelowArenaTitle,\n NextToArenaTitle\n}\nexport interface IFilterIndicatorRenderingOptions {\n reactElement: React.ReactElement;\n location: FilterIndicatorRenderingLocation;\n}\n\nexport interface IGamesFilterService {\n\n readonly filteredGamesMap: Record<string,GameInfo>;\n readonly isFilterOn: boolean;\n readonly currentAppliedFiltersIds: string[];\n readonly isFilteringAvailable: boolean;\n isFilterApplied(filterId: string): boolean;\n applyFilters(filterIds: string[]): Promise<void>;\n clearFilters(): Promise<void>;\n renderMobileFiltersIndicator(): React.ReactElement;\n renderFiltersIndicator(): Nullable<IFilterIndicatorRenderingOptions>;\n showFiltersEditor(): void;\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number;\n\n getFiltersForGame(gameType: number): string[]; \n isValidFilter(filterId: string): boolean\n\n getFiltersDefinitions(filtersIds: string[]): Record<string, IGameFilterDefinition>;\n}\n","export enum GamesOpenSessionsKind\n{\n Real = 0,\n FreePlay = 1,\n All = 2\n}","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const GameInfoButtonBox = styledBox(\"GameInfoButtonBox\");","import React, {useEffect, useState} from 'react';\nimport {GameInfo} from '../../../../services/games/game-info';\nimport {Check} from '@sparkware/app-utils';\nimport {observer} from 'mobx-react';\nimport {IModalDialogHandler} from '../../../../services/dialog/dialog.service.interface';\nimport {GameInfoButtonBox} from './boxes/game-info-button/game-info-button.box';\nimport {DialogTitleBox} from '../../../modal-dialog/boxes/title/dialog-title.box';\nimport {DialogCloseButtonBox} from '../../../modal-dialog/boxes/close-button/dialog-close-button.box';\nimport {Image} from '../../../raw-components/image/image';\nimport {DialogHeaderComponent} from '../../../modal-dialog/parts/header/dialog-header.component';\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {NullableString} from \"../../../../../common/types/nullable-types\";\n\nexport interface MobileGamePreviewTitleComponentProps {\n gameInfo: GameInfo;\n arenaName?: string;\n dialogHandler: IModalDialogHandler;\n}\n\nexport const TitleComponent: React.FC<MobileGamePreviewTitleComponentProps> = observer((props) => {\n const services = useServices();\n const [infoPageUrl, setInfoPageUrl] = useState<NullableString>(null);\n\n useEffect(() => {\n props.gameInfo.getInfoPageURL().then(infoPageUrl => {\n setInfoPageUrl(infoPageUrl);\n })\n }, [props.gameInfo]);\n\n const _openGameInfo = async () => {\n if(!infoPageUrl) {\n return;\n }\n\n _closeInfoMobile();\n\n if (props.arenaName) {\n //TODO: Do we need it?\n services.analytics.sendElasticInfoEvent({eventType:\"CGP_Game_Click\",category: props.arenaName, action: \"Open_Game_Info\", label: `SEO_${gameInfo.gameType}`}, true);\n }\n\n services.location.push(infoPageUrl);\n };\n\n const _closeInfoMobile = () => {\n props.dialogHandler?.close();\n };\n\n const _renderOpenInfoButton = (gameInfo: GameInfo) => {\n\n if (Check.isEmpty(infoPageUrl) || services.miniOrbit.isEnabled) {\n return null;\n }\n\n return (\n <GameInfoButtonBox className='cy-game-info-button' onClick={_openGameInfo}>\n <Image src={services.theme.currentTheme.assets.images.infoBTN_png.toString()}/>\n </GameInfoButtonBox>\n );\n }\n\n let gameInfo = props.gameInfo;\n return (\n <DialogHeaderComponent>\n <DialogTitleBox className='cy-intermediate-page-title'>{gameInfo.title}</DialogTitleBox>\n {_renderOpenInfoButton(gameInfo)}\n <DialogCloseButtonBox className='cy-close-button' onClick={_closeInfoMobile}/>\n </DialogHeaderComponent>\n );\n\n});\n\n","import styled from 'styled-components';\n\n\n/**\n ContainerDefaultBox is placed over TrailerOrStripeImageComponent using position absolute.\n We do this because TrailerOrStripeImageComponent has opacity 0.5\n and we can't put ContainerDefaultBox inside TrailerOrStripeImageComponent because will inherit that opacity\n */\n\n\nexport const ContainerDefaultBox = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n`;\n","import {ContainerDefaultBox} from './container.default.box';\n\nexport const ContainerBox = ContainerDefaultBox;\n\n","import styled from 'styled-components';\n\n\nexport const PlayButtonsDefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n justify-content: center;\n width: 100%;\n height: 100%;\n margin-right: 10px;\n margin-left: 10px;\n`;\n","import {PlayButtonsDefaultBox} from './play-buttons.default.box';\n\nexport const PlayButtonsBox = PlayButtonsDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {GameInfo, OpenGameParameters} from '../../../../services/games/game-info';\nimport {observer} from 'mobx-react';\nimport {IModalDialogHandler} from '../../../../services/dialog/dialog.service.interface';\nimport {ContainerBox} from './boxes/container/container.box';\nimport {GameIconBox} from '../../../../basic-components/game-icon/game-icon.box';\nimport {PlayButtonsBox} from '../../../../basic-components/play-buttons/play-buttons.box';\nimport {GameIconWrapperBox} from '../../../../basic-components/game-icon-wrapper/game-icon-wrapper.box';\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {Button} from '../../../../basic-ui-components/button/base/button.component';\n\nexport interface MobileDemoAndPlayComponentProps {\n gameInfo: GameInfo;\n openGameParams: OpenGameParameters;\n dialogHandler: IModalDialogHandler;\n}\n\nexport const GameIconAndPlayButtonsComponent = observer(\n class GameIconAndPlayButtonsComponent extends OrbitComponent<MobileDemoAndPlayComponentProps> {\n\n private _openRealGame = () => {\n this.props.dialogHandler.close();\n this.props.gameInfo.open({...this.props.openGameParams, isRealMode: true});\n };\n\n private _openDemoGame = () => {\n this.props.dialogHandler.close();\n this.props.gameInfo.open({...this.props.openGameParams, isRealMode: false});\n };\n\n private _renderDemoButton(gameInfo: GameInfo) {\n if (!gameInfo.allowDemoButtonInIntermediatePage) {\n return null;\n }\n\n return (\n <Button\n className={CyClass('cy-play-demo-game-button')}\n onClick={this._openDemoGame}\n preset=\"secondary\"\n fullWidth\n >\n { this.services.translation.translate('DEMO') }\n </Button>\n );\n }\n\n render() {\n if (!this.services.device.isMobile) {\n return null;\n }\n\n const gameInfo = this.props.gameInfo;\n\n return (\n <ContainerBox className='cy-game-icon-and-play-buttons'>\n <GameIconWrapperBox className='cy-game-icon-wrapper'>\n <GameIconBox className='cy-game-icon'\n src={gameInfo.gameImageInsideIntermediatePage}\n fallbackSrc={gameInfo.getGameImagePlaceHolderUrl()}/>\n </GameIconWrapperBox>\n <PlayButtonsBox className='cy-play-buttons-wrapper'>\n <Button\n className={CyClass('cy-play-real-game-button')}\n preset=\"special\"\n fullWidth\n onClick={this._openRealGame}\n >\n {this.services.translation.translate('PLAY')}\n </Button>\n <div style={{height: \"2rem\"}}></div>\n {this._renderDemoButton(gameInfo)}\n </PlayButtonsBox>\n </ContainerBox>\n );\n }\n }\n);\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const IntermediatePageBox = styledBox(\"IntermediatePageBox\");","import styled from 'styled-components';\n\nexport const StripeImageAndButtonsDefaultBox = styled.div`\n position: relative;\n width: 100%;\n height: 220px;\n margin-bottom: 0.5rem;\n`;","import {StripeImageAndButtonsDefaultBox} from './stripe-image-and-buttons.default.box';\n\nexport const StripeImageAndButtonsBox = StripeImageAndButtonsDefaultBox;","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const GradientBox = styledBox(\"GradientBox\");","import styled from \"styled-components\";\nimport { Image } from \"../../../../../raw-components/image/image\";\n\nexport const WarningImageDefaultBox = styled(Image)`\n margin: 10px 5px 5px 15px;\n`;","import {WarningImageDefaultBox} from \"./warning-image.default.box\";\n\nexport const WarningImageBox = WarningImageDefaultBox;","import styled from \"styled-components\";\n\nexport const WarningTextDefaultBox = styled.span`\n font-size: 1.2rem;\n width: calc(100% - 50px);\n display: inline-block;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n`;\n","import {WarningTextDefaultBox} from \"./warning-text.default.box\";\n\nexport const WarningTextBox = WarningTextDefaultBox;","import styled from \"styled-components\";\n\nexport const WarningMessageDefaultBox = styled.div`\n position: relative;\n height: 40px;\n background-color: black;\n`;","import {WarningMessageDefaultBox} from \"./warning-message.default.box\";\n\nexport const WarningMessageBox = WarningMessageDefaultBox;","import React from 'react';\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {WarningImageBox} from \"./boxes/warning-image/warning-image.box\";\nimport {WarningTextBox} from \"./boxes/warning-text/warning-text.box\";\nimport {WarningMessageBox} from \"./boxes/warning-message/warning-message.box\";\n\nexport class RealMoneyOnlyWarningComponent extends OrbitComponent<{}>{\n render() {\n return(\n <WarningMessageBox>\n <WarningImageBox src={this.services.theme.currentTheme.assets.images.only_real_money_game_warning_png.toString()}/>\n <WarningTextBox>{this.services.translation.translate('REAL_MONEY_GAME')}</WarningTextBox>\n </WarningMessageBox>\n );\n }\n}","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {GameInfo, OpenGameParameters} from '../../../services/games/game-info';\nimport {TitleComponent} from './title/title.component';\nimport {TrailerOrStripeImageComponent} from '../common/trailer-or-stripe-image/trailer-or-stripe-image.component';\nimport {GamePreviewInfoContainerComponent} from '../common/game-info-container/game-preview-info-container.component';\nimport {observer} from 'mobx-react';\nimport {IModalDialogHandler} from '../../../services/dialog/dialog.service.interface';\nimport {GameIconAndPlayButtonsComponent} from './game-icon-and-play-buttons/game-icon-and-play-buttons.component';\nimport {IntermediatePageBox} from './boxes/intermediate-page/intermediate-page.box';\nimport {StripeImageAndButtonsBox} from './boxes/stripe-image-and-buttons/stripe-image-and-buttons.box';\nimport {GradientBox} from './boxes/gradient/gradient.box';\nimport {RealMoneyOnlyWarningComponent} from \"./only-real-money-warning/only-real-money-warning.component\";\n\nexport interface OpenGameIntermediatePageComponentProps {\n gameInfo: GameInfo;\n openGameParams: OpenGameParameters;\n dialogHandler: IModalDialogHandler;\n}\n\n\nexport const OpenGameIntermediatePageComponent = observer(\n class OpenGameIntermediatePageComponent extends OrbitComponent<OpenGameIntermediatePageComponentProps> {\n\n componentDidMount() {\n super.componentDidMount();\n this.reaction(() => this.services.device.isMobile,\n (isMobile) => {\n if(!isMobile) { // this is for when you switch from mobile to PC in the emulator or when you resize de browser window\n this.props.dialogHandler.close();\n }\n });\n }\n\n _renderOnlyRealMoneyWarning() {\n return this.props.gameInfo.allowWithdrawOnlyFromReal ? (<RealMoneyOnlyWarningComponent />) : null;\n }\n\n render() {\n return (\n <IntermediatePageBox className='cy-open-game-intermediate-page'>\n <TitleComponent gameInfo={this.props.gameInfo} arenaName={this.props.openGameParams.pageName} dialogHandler={this.props.dialogHandler}/>\n {this._renderOnlyRealMoneyWarning()}\n <StripeImageAndButtonsBox className='cy-stripe-image-and-buttons-container'>\n <TrailerOrStripeImageComponent gameInfo={this.props.gameInfo}/>\n {/*GameIconAndPlayButtonsComponent and GradientBox uses position absolute to place itself over the TrailerOrStripeImageComponent because TrailerOrStripeImageComponent box has opacity 0.5 */}\n <GradientBox className='cy-gradient'/>\n <GameIconAndPlayButtonsComponent gameInfo={this.props.gameInfo} openGameParams={{\n ...this.props.openGameParams,\n showIntermediatePage: false,\n isCalledFromIntermediatePage: true\n }} dialogHandler={this.props.dialogHandler}/>\n </StripeImageAndButtonsBox>\n <GamePreviewInfoContainerComponent gameInfo={this.props.gameInfo} gameTitleComponent={null}/>\n </IntermediatePageBox>\n\n );\n }\n }\n);","import { computed, makeObservable } from 'mobx';\nimport {Check} from '@sparkware/app-utils';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {IRunningGameHandler} from './running-game-handler.interface';\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\nimport {\n OpenGameIntermediatePageComponent\n} from \"../../components/lobby-game-info-preview/intermediate-page/open-game-intermediate-page.component\";\nimport React from \"react\";\nimport {GameIconAnimationState} from '../../components/single-game/common/parts/game-image/game-image.component';\nimport {\n IRunningGameControllerViewModel\n} from \"../game-runner/interfaces/game-controller/running-game-controller.interface\";\nimport {GameModeEnum} from \"../game-runner/interfaces/game-context/game-context-view-model.interface\";\nimport {IOpenFreePlayGameParams} from \"../game-runner/game-runner.service.interface\";\nimport {IGameRestriction} from \"../restrictions/game-restriction.interface\";\nimport {GAME_GROUP} from \"../../../common/const/game_groups_consts\";\nimport {NullableNumber, NullableString} from \"../../../common/types/nullable-types\";\nimport {GAMES_CATEGORIES} from \"./games-categories.enum\";\nimport {IGameInfo} from '../../../common/const/game-info.interface';\nimport {GAME_VOLATILITY} from '../../../sdk/src/services/games_information/games_information_service_interface';\nimport {\n OrbitMarketingEventAnalyticsCategory,\n OrbitMarketingEventAnalyticsLabel\n} from \"../analytics/analytics.service.interface\";\nimport { GameChildishIconMode } from '../../../common/enums/game-childish-icon-mode.enum';\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../common/const/casinofied-analytics-consts\";\nimport {CIPropRead} from \"../../../utils/case-insensitive-property-reader\";\n\n\nexport interface OpenGameParameters {\n isRealMode: boolean;\n pageName?: string;\n listTitle?: string;\n listPosition?: number;\n AdminListID?: number;\n marketingParams?: MarketingParams;\n gameIndex?: number;\n aiEngine?: string;\n aiSortingType?: string;\n AIListTypeID?: number;\n openFromDrawer?:boolean;\n showIntermediatePage?: boolean;\n isCalledFromIntermediatePage?: boolean;\n animatedIconState?: GameIconAnimationState;\n freePlayParams?: IOpenFreePlayGameParams;\n skipFreePlaySuggestion?: boolean;\n referrerId?: NullableNumber;\n}\n\n\n\nexport function gameInfoComparerByTitle(game1: GameInfo, game2: GameInfo): number {\n if(game1.title < game2.title) {\n return -1\n } else if(game1.title > game2.title) {\n return 1\n }\n\n return 0;\n}\n\n\nexport class GameInfo {\n constructor(private _rawGameData: IGameInfo,\n private services: IServiceFactoryExtended) {\n makeObservable(this);\n\n Object.defineProperty(this._rawGameData, 'allowSwitchGameMode', {\n get: () => this.allowSwitchGameMode,\n configurable: true\n });\n }\n\n private get _isMobile(): boolean {\n return this.services.device.isMobile;\n }\n\n private get _isAuthorized(): boolean {\n return this.services.user.isAuthorized;\n }\n\n get gameType(): number {\n return this._rawGameData.gameType;\n }\n\n get title(): string {\n return this._rawGameData.title;\n }\n\n get numberOfLines(): number {\n return this._rawGameData.numberOfLines;\n }\n\n\n get hasJackpot(): boolean {\n return this._rawGameData.hasJackpot || false;\n }\n\n get isNewGame(): boolean {\n return this._hasCustomFilter('new');\n }\n\n get isExclusiveGame(): boolean {\n return this._hasCustomFilter('exclusive');\n }\n\n get isItalianTable(): boolean {\n return this._hasCustomFilter('italian-tables');\n }\n\n private _hasCustomFilter(filterName: string): boolean {\n if (!filterName) {\n return false;\n }\n\n if (!Check.isArray(this._rawGameData.filtersList)) {\n return false;\n }\n\n filterName = filterName.toLowerCase();\n\n return 0 <= this._rawGameData.filtersList.findIndex(filter => filter.toLowerCase() === filterName);\n\n }\n\n get hasBonusGames(): boolean {\n return this._rawGameData.hasBonusGames || false;\n }\n\n get numberOfDecks(): number {\n return this._rawGameData.numberOfDecks;\n }\n\n get isMultiHand(): boolean {\n return this._rawGameData.isMultiHand || false;\n }\n\n get hasFreeSpins(): boolean {\n return this._rawGameData.hasFreeSpins || false;\n }\n\n get subGroupName(): string {\n return this._rawGameData.subGroupName;\n }\n\n get isEliteLounge(): boolean {\n return this._rawGameData.isEliteLounge || false;\n }\n\n get isChildish(): boolean {\n return this._rawGameData.isChildish || false;\n }\n\n get hasSideBets(): boolean {\n return this._rawGameData.hasSideBets || false;\n }\n\n get maxBetPerSpot(): number {\n return this._rawGameData.maxBetPerSpot;\n }\n\n get allowWithdrawOnlyFromReal(): boolean {\n return this._rawGameData.allowWithdrawOnlyFromReal;\n }\n\n get hasLowStakes(): boolean {\n return this._hasCustomFilter('lowStakes');\n }\n\n get hasHighStakes(): boolean {\n return this._hasCustomFilter('highStakes');\n }\n\n get ClassicSlots(): boolean {\n return this._rawGameData.ClassicSlots;\n }\n\n get allowMinMaxBet(): boolean {\n let isAllowedCategory = this.isCardOrTableGame || this.isLiveCasino;\n\n return !this.hasJackpot && isAllowedCategory;\n }\n\n\n @computed\n get allowHoverDetails(): boolean {\n\n if (this.gameGroup === 'Live Casino') {\n return false;\n }\n\n return !this._isAuthorized;\n }\n\n get allowTap(): boolean {\n return this._isMobile;\n }\n\n\n async hasInfoPage(): Promise<boolean> {\n return Boolean(await this.getInfoPageURL());\n }\n\n @computed\n get allowDemoButtonInSingleGame(): boolean {\n if (!this._rawGameData.isAnonymousSupported) {\n return false;\n }\n\n if (this._isMobile) {\n return false;\n }\n\n return (this._rawGameData.demoSettings\n && this._rawGameData.demoSettings.demoCTAAnonymous\n && this._rawGameData.demoSettings.demoCTAAnonymous.pc);\n }\n\n\n @computed\n get allowDemoButtonInIntermediatePage(): boolean {\n if (!this._rawGameData.isAnonymousSupported) {\n return false;\n }\n\n if (this.services.user.isAuthorized) {\n return this._rawGameData.demoSettings && this._rawGameData.demoSettings.demoCTAAuthorized && this._rawGameData.demoSettings.demoCTAAuthorized.mobile;\n }\n\n return this._rawGameData.demoSettings && this._rawGameData.demoSettings.demoCTAAnonymous && this._rawGameData.demoSettings.demoCTAAnonymous.mobile;\n }\n\n async getInfoPageURL(): Promise<string> {\n\n if (!this._rawGameData.infoPageURL) {\n return '';\n }\n const siteMap = await this.services.siteMap;\n\n if (!siteMap.isUrlInSiteMap(this._rawGameData.infoPageURL)) {\n this.services.logger.debug(`Page info '${this._rawGameData.infoPageURL}' for game ${this.gameType} - ${this.title} is not in the site map`);\n return '';\n }\n\n return this._rawGameData.infoPageURL\n }\n\n //Can be either a live stream URL or a static video URL.\n get videoURL(): string {\n if (!this._rawGameData.videoURL) {\n return '';\n }\n\n return this._rawGameData.videoURL;\n }\n\n get hasVideoURL(): boolean {\n return Boolean(this.videoURL);\n }\n\n get gameGroup(): string {\n return this._rawGameData.gameGroup;\n }\n\n get gameGroupId(): GAME_GROUP {\n return this._rawGameData.gameGroupId;\n }\n\n get gameCategory(): string {\n if(this.isVideoSlot || this.isScratchCards) {\n return GAMES_CATEGORIES.SLOTS;\n }\n\n if(this.isLiveCasino) {\n return GAMES_CATEGORIES.LIVE;\n }\n\n if(this.isCardOrTableGame) {\n return GAMES_CATEGORIES.CARD_AND_TABLE;\n }\n\n return '';\n\n }\n\n get gameCategoryClassName(): string {\n return 'game-category-' + this.gameCategory;\n }\n\n get companyName(): string {\n return this._rawGameData.companyName;\n }\n\n get vendorId(): number {\n return this._rawGameData.vendorId;\n }\n\n get vendorName(): string {\n return this._rawGameData.vendorName;\n }\n\n private _getDefaultGameImage(opts: {squareIcon: boolean; animatedIcon: boolean;}): string {\n let images = this._rawGameData?.images;\n if (!images) {\n return '';\n }\n\n if (opts.squareIcon && images.hybrid_icon) {\n if (opts.animatedIcon) {\n return (images.animated_square) ? this.getAnimatedJsonUrl(this._getResolvedGameImagePath(images.animated_square)) : '';\n }\n return this._getResolvedGameImagePath(images.hybrid_icon);\n }\n\n if (opts.animatedIcon) {\n return (images.animated_round) ? this.getAnimatedJsonUrl(this._getResolvedGameImagePath(images.animated_round)) : '';\n }\n\n return this._getResolvedGameImagePath(images.icon);\n }\n\n private _shouldUseLessNonChildishIcon(gameChildishMode: GameChildishIconMode): boolean {\n return (gameChildishMode === GameChildishIconMode.UseLessNonChildishIcon || gameChildishMode === GameChildishIconMode.PreferLessNonChildishIcon)\n }\n\n private _getImageForChildishGame(opts: {squareIcon: boolean; animatedIcon: boolean;}): string {\n let images = this._rawGameData?.images;\n if (!images) {\n return '';\n }\n\n const gameChildishMode = this.services.regulation.current.getChildishIconMode();\n if (gameChildishMode === GameChildishIconMode.UseDefaultIcon) {\n return this._getDefaultGameImage(opts);\n }\n else {\n if (opts.squareIcon && images.hybrid_icon) {\n if (images.hybrid_less_non_childish_icon && this._shouldUseLessNonChildishIcon(gameChildishMode)) {\n return opts.animatedIcon ? '' : this._getResolvedGameImagePath(images.hybrid_less_non_childish_icon);\n }\n else if (images.hybrid_non_childish_icon) {\n /* we are happy with the - hybrid_non_childish_icon - for UseLessNonChildishIcon or UseNonChildishIcon MODE */\n return opts.animatedIcon ? '' : this._getResolvedGameImagePath(images.hybrid_non_childish_icon);\n }\n else if (gameChildishMode === GameChildishIconMode.PreferNonChildishIcon || gameChildishMode === GameChildishIconMode.PreferLessNonChildishIcon) {\n return this._getDefaultGameImage(opts);\n }\n else {\n /* Handling scenario of mode: UseNonChildishIcon / UseLessNonChildishIcon, having - non_childish_icon / less_non_childish_icon - (game is not restricted) but missing hybrid_non_childish_icon / hybrid_less_non_childish_icon */\n return opts.animatedIcon ? '' : this.getGameImagePlaceHolderUrl(opts.squareIcon);\n }\n }\n else {\n if (images.less_non_childish_icon && this._shouldUseLessNonChildishIcon(gameChildishMode)) {\n return opts.animatedIcon ? '' : this._getResolvedGameImagePath(images.less_non_childish_icon);\n }\n else if (images.non_childish_icon) {\n /* we are happy with the - non_childish_icon - for UseLessNonChildishIcon or UseNonChildishIcon MODE */\n return opts.animatedIcon ? '' : this._getResolvedGameImagePath(images.non_childish_icon);\n }\n else {\n /* game is Childish & does not have - non_childish_icon or less_non_childish_icon - & is not restricted, it means we just PreferNonChildishIcon and we are happy with default icon*/\n return this._getDefaultGameImage(opts);\n }\n }\n }\n }\n\n getGameImage(options?: {squareIcon?: boolean; animatedIcon?: boolean;}): string {\n let opts = {\n squareIcon: options?.squareIcon || false,\n animatedIcon: options?.animatedIcon || false,\n }\n let images = this._rawGameData && this._rawGameData.images;\n if (!images) {\n return '';\n }\n\n if(this.isChildish){\n return this._getImageForChildishGame(opts);\n }\n else {\n return this._getDefaultGameImage(opts);\n }\n }\n\n getBackgroundImage(): string {\n let background = this._rawGameData?.images?.background;\n if (!background) {\n return '';\n }\n\n return this._getResolvedGameImagePath(background);\n }\n\n private getAnimatedJsonUrl(pngImagePath: string) {\n if (!pngImagePath.endsWith('.png')) {\n this.services.logger.error(\"Animated icon path does not end in '.png': \" + pngImagePath);\n return '';\n }\n // we don't expect for substring '.png' to exist in other place than the end of the string, so we do a simple replace\n return pngImagePath.replace('.png', '.json');\n }\n\n getAnimatedImageTimings() {\n const animatedImageTimings = this._rawGameData && this._rawGameData.animatedImageTimings\n return {\n delay: animatedImageTimings?.delay || 2000,\n interval: animatedImageTimings?.interval || 3000,\n }\n }\n\n get gameImageInsideIntermediatePage(): string {\n const icon = this._rawGameData?.images?.icon;\n if (!icon) {\n return '';\n }\n\n return this._getResolvedGameImagePath(icon);\n }\n\n get gameImageInHistoryPage(): string {\n let images = this._rawGameData && this._rawGameData.images;\n if (!images) {\n return '';\n }\n\n let image: string = images.icon;\n if (this.services.theme.shouldUseSquareIcons && images.hybrid_icon) {\n image = images.hybrid_icon;\n }\n\n return this._getResolvedGameImagePath(image);\n }\n\n get badge(): string | null {\n return this._rawGameData.badge;\n }\n\n get flipBadge(): string | null {\n return this._rawGameData.flipBadge;\n }\n\n get videoThumbnailUrl(): string {\n const video_thumbnail = this._rawGameData?.images?.video_thumbnail;\n if (!video_thumbnail) {\n return '';\n }\n\n return this._getResolvedGameImagePath(video_thumbnail);\n }\n\n get slideCover() : string {\n const slideCover = this._rawGameData?.images?.slide_cover;\n if (!slideCover) {\n return '';\n }\n\n return this._getResolvedGameImagePath(slideCover);\n }\n\n get videoSlideUrl() : string {\n const slideVideo = this._rawGameData?.images?.hls_manifest;\n if (!slideVideo) {\n return '';\n }\n\n return this._getResolvedGameImagePath(slideVideo);\n }\n\n private _getBadgeUrl(badgeName: string): NullableString {\n if(!badgeName) {\n return null;\n }\n\n\n return CIPropRead.getProperty(badgeName + \"_png\", this.services.theme.currentTheme.assets.images.badges)?.toString();\n }\n\n @computed\n get badgeUrl(): NullableString {\n return this._getBadgeUrl(this.badge);\n }\n\n @computed\n get flipBadgeUrl(): string | null {\n return this._getBadgeUrl(this.flipBadge);\n }\n\n get minBet(): number {\n return this._rawGameData.minBet;\n }\n\n get maxBet(): number {\n return this._rawGameData.maxBet;\n }\n\n get maxBetPerBrand(): number {\n return this._rawGameData.maxBetPerBrand;\n }\n\n getGameImagePlaceHolderUrl(useSquareIcon?: boolean): string {\n if (useSquareIcon) {\n return this.services.theme.currentTheme.assets.images.placeholder_game_icon_sq_png.toString();\n }\n return this.services.theme.currentTheme.assets.images.placeholder_game_icon_png.toString();\n }\n\n getImageSeoAlt() {\n\n let seoValue = this.services.configuration.data?.seo?.games?.images?.alt;\n\n return this.services.translation.translate(seoValue, {\n gameName: this.title,\n categoryName: this.gameCategory\n });\n };\n\n private _getResolvedGameImagePath(imagePath: string): string {\n return this.services.configuration.resolveGameImagePath(imagePath);\n }\n\n @computed\n get stripImage(): string {\n let images = this._rawGameData.images;\n if (!images) {\n return '';\n }\n\n return this._isMobile ? this._getResolvedGameImagePath(images.strip_mobile) :\n this._getResolvedGameImagePath(images.strip_pc);\n }\n\n @computed\n get stripeImageFallback(): string {\n \n const images = this.services.theme.currentTheme.assets.games.preview_default_images;\n\n if (this.services.device.isMobile) {\n switch (this.gameCategory) {\n case GAMES_CATEGORIES.SLOTS:\n return images.default_game_strip_slots_mobile_png.toString();\n case GAMES_CATEGORIES.CARD_AND_TABLE:\n return images.default_game_strip_card_and_table_mobile_png.toString();\n case GAMES_CATEGORIES.LIVE:\n return images.default_game_strip_live_mobile_png.toString();\n }\n } else {\n switch (this.gameCategory) {\n case GAMES_CATEGORIES.SLOTS:\n return images.default_game_strip_slots_png.toString();\n case GAMES_CATEGORIES.CARD_AND_TABLE:\n return images.default_game_strip_card_and_table_png.toString();\n case GAMES_CATEGORIES.LIVE:\n return images.default_game_strip_live_png.toString();\n }\n }\n\n return ''\n }\n\n get hasVideoTrailer(): boolean {\n return this.gameType === 130136;\n }\n\n\n get multiplayer(): number {\n return this._rawGameData.multiplayer;\n }\n\n get isClassicSlot(): boolean {\n return this._hasCustomFilter('ClassicSlots');\n }\n\n get hasHighVolatility(): boolean {\n return this.volatility === GAME_VOLATILITY.High;\n }\n\n get hasLowVolatility(): boolean {\n return this.volatility === GAME_VOLATILITY.Low;\n }\n\n get hasMediumVolatility(): boolean {\n return this.volatility === GAME_VOLATILITY.Medium;\n }\n\n get hasDailyJackpot(): boolean {\n return this._hasCustomFilter('DailyJackpot');\n }\n\n get hasTwilightJackpot(): boolean {\n return this._hasCustomFilter('TwilightJackpot');\n }\n\n get hasCaptain8tJackpot(): boolean {\n return this._hasCustomFilter('Captain8Jackpot');\n }\n\n get hasRedTigerJackpot(): boolean {\n return this._hasCustomFilter('RedTigerJackpot');\n }\n\n @computed\n get shouldShowIntermediatePage(): boolean {\n if (!this._isMobile) {\n return false;\n }\n\n if (!this._rawGameData.isAnonymousSupported) {\n return false;\n }\n\n if (this.isLiveCasino) {\n return false;\n }\n\n let demoSettings = this._rawGameData.demoSettings;\n if (this._isAuthorized) {\n if (demoSettings?.intermediatePageAuthorized?.mobile) {\n return true;\n }\n } else {\n if (demoSettings?.intermediatePageAnonymous?.mobile) {\n return true;\n }\n }\n\n return false;\n }\n\n get isDemoModeSupported(): boolean {\n return Boolean(this._rawGameData.isAnonymousSupported);\n }\n\n @computed\n get allowSwitchGameMode(): boolean {\n\n if(!this.isDemoModeSupported) {\n return false;\n }\n\n let demoSettings = this._rawGameData.demoSettings;\n if (!demoSettings) {\n return false;\n }\n\n if (this._isAuthorized) {\n return Boolean(demoSettings?.demoCTAAuthorized?.pc);\n } else {\n return Boolean(demoSettings?.demoCTAAnonymous?.pc);\n }\n }\n\n async open(params: OpenGameParameters): Promise<IRunningGameHandler> {\n\n if(this._showIntermediatePage(params)) {\n return;\n }\n\n if (await this._shouldRedirectToMembership(params)) {\n this._openMembership();\n return {\n closeGame: () => {\n }\n };\n }\n\n this._sendOpenGameAnalytics(params);\n\n let gameController: IRunningGameControllerViewModel | null = null;\n if (params.isRealMode) {\n if(params.marketingParams) {\n this.services.sdk.eventsTrigger.updateMarketingParams(params.marketingParams);\n }\n gameController = await (await this.services.gameRunner).openGame({\n gameMode: GameModeEnum.Real,\n gameInfo: this,\n freePlayParams: params.freePlayParams,\n skipFreePlaySuggestion: params.skipFreePlaySuggestion,\n referrerId: params.referrerId\n });\n } else {\n gameController = await (await this.services.gameRunner).openGame({\n gameMode: GameModeEnum.Demo,\n gameInfo: this\n });\n }\n\n return {\n closeGame: async () => {\n await gameController?.closeGame({\n shouldSuggestNextGame: false\n })\n }\n }\n\n }\n\n private async _shouldRedirectToMembership(params: OpenGameParameters): Promise<boolean> {\n return params.isRealMode && params.isCalledFromIntermediatePage\n && !this.services.user.isAuthorized\n && ((await this.services.cmsSegmentation).isCstatus === false);\n }\n\n\n //TODO - this should return a Promise\n private _showIntermediatePage(params: OpenGameParameters): boolean {\n if (this.shouldShowIntermediatePage && params.showIntermediatePage) {\n const dialogContentRenderer = ((dialogHandler) => <OpenGameIntermediatePageComponent gameInfo={this}\n openGameParams={params}\n dialogHandler={dialogHandler}/>);\n this.services.dialog.showModal(dialogContentRenderer, {hideCloseButton: true});\n\n return true;\n }\n\n return false;\n }\n\n\n private _openMembership() {\n this.services.analytics.sendOrbitMarketingEvent(OrbitMarketingEventAnalyticsCategory.Conversion, 'Play', OrbitMarketingEventAnalyticsLabel.PreGamePopUp);\n this.services.externalLinks.then(externalLinks => externalLinks.openMembership({\n channel: {\n area: AreaType.InGame,\n source: CHANNEL_SOURCE.casinoClient,\n element: CHANNEL_ELEMENTS.registerButton\n },\n marketingParams: {\n dl: \"20614\"\n }\n }));\n }\n\n private _sendOpenGameAnalytics(params: OpenGameParameters): void {\n if (!params.pageName || !params.listTitle) {\n return;\n }\n const listTitle = this._replaceUnderscore(params.listTitle);\n this.services.analytics.sendElasticInfoEvent({eventType:\"CGP_Game_Click\",category: params.pageName, action: 'game_click', label: listTitle, value: this.gameType.toString(), customData: params}, true);\n }\n\n\n isAllWordsMatch(words: RegExp[]) {\n let text = this.title + ' ' + this.vendorName;\n for (let index = 0; index < words.length; index++) {\n if (!text.match(words[index])) {\n return false;\n }\n }\n\n return true;\n }\n\n get gameArenaIcon(): string {\n const arena_icon = this._rawGameData?.images?.arena_icon;\n if (!arena_icon) {\n return '';\n }\n\n return this._getResolvedGameImagePath(arena_icon);\n }\n\n /**\n * @description BI/BA request not to send the underscore as part of the list title since they split by underscore to get all the data on the label\n * @param listTitle\n * @private\n */\n private _replaceUnderscore(listTitle): string {\n return listTitle.replace(/_/g, '-');\n }\n\n get restriction(): IGameRestriction {\n\n if(this._rawGameData.restriction) {\n return this._rawGameData.restriction as IGameRestriction;\n }\n\n return this.services.restrictions.getGameRestriction(this);\n }\n\n get isVideoSlot(): boolean {\n return this.gameGroupId === GAME_GROUP.VIDEO_SLOT\n || this.gameGroupId === GAME_GROUP.SLOT\n }\n\n get isCrashGame(): boolean {\n return this.gameGroupId === GAME_GROUP.CRASH_GAME;\n }\n\n //same as isCardOrTableGame() besides ARCADE, PAI_GOW_POKER, ROULETTE_LIKE\n get isCasinoGame() {\n const casinoGamesGroups = [\n GAME_GROUP.BACCARAT,\n GAME_GROUP.BLACKJACK,\n GAME_GROUP.CARRIBEAN_POKER,\n GAME_GROUP.CRAPS,\n GAME_GROUP.KENO,\n GAME_GROUP.POKER,\n GAME_GROUP.POKER_TEMPLATE_GAMES,\n GAME_GROUP.ROULETTE,\n GAME_GROUP.SCRATCH_CARD,\n GAME_GROUP.VIDEO_POKER\n ];\n\n return casinoGamesGroups.includes(this.gameGroupId);\n }\n\n get isVideoPoker(): boolean {\n return this.gameGroupId === GAME_GROUP.VIDEO_POKER;\n }\n\n get isScratchCards(): boolean {\n return this.gameGroupId === GAME_GROUP.SCRATCH_CARD;\n }\n\n get isBlackJack(): boolean {\n return this.gameGroupId === GAME_GROUP.BLACKJACK;\n }\n\n get isRoulette(): boolean {\n return this.gameGroupId === GAME_GROUP.ROULETTE;\n }\n\n get isLiveCasino(): boolean {\n return this.gameGroupId === GAME_GROUP.LIVE_CASINO;\n }\n\n get isBaccarat(): boolean {\n return this.gameGroupId === GAME_GROUP.BACCARAT;\n }\n\n\n get isCardOrTableGame(): boolean {\n\n return this.isBlackJack\n || this.isRoulette\n || this.isBaccarat\n || this.isVideoPoker\n || this.gameGroupId === GAME_GROUP.CRAPS\n || this.gameGroupId === GAME_GROUP.KENO\n || this.gameGroupId === GAME_GROUP.CARRIBEAN_POKER\n || this.gameGroupId === GAME_GROUP.POKER_TEMPLATE_GAMES\n || this.gameGroupId === GAME_GROUP.ROULETTE_LIKE\n || this.gameGroupId === GAME_GROUP.ARCADE\n || this.gameGroupId === GAME_GROUP.POWER_VIDEO_POKER\n || this.gameGroupId === GAME_GROUP.PAI_GOW_POKER\n || this.gameGroupId === GAME_GROUP.CRAZY_BLACKJACK\n }\n\n get externalGameCode(): NullableString {\n return this._rawGameData.externalGameCode;\n }\n\n get themeIds(): number[] {\n return this._rawGameData.gameThemes ?? [];\n }\n\n get volatility(): GAME_VOLATILITY {\n return this._rawGameData.volatility;\n }\n\n /**\n * For games like crash games we need to delay popups until the game animation complete event is received from the game\n */\n get requiresAnimationCompleteActionsDelay(): boolean {\n return this.isCrashGame;\n }\n\n get supportsStopAutoplay(): boolean {\n return !this.isCrashGame;\n }\n}\n","export enum GAMES_CATEGORIES {\n SLOTS = 'slots',\n CARD_AND_TABLE = 'card-and-table',\n LIVE = 'live'\n};\n","export enum GamingHistoryType {\n UserHistory = 1,\n SessionHistory = 2\n}\n","enum GNWP_SOURCES {\n CASHIER = 'cashier',\n CONTACT_US = 'contact_us',\n MEMBERSHIP = 'membership',\n FORGOT_PASSWORD = 'forgot_password',\n FORGOT_USERNAME = 'forgot_username',\n MY_ACCOUNT = 'my_account',\n OMG = 'omg',\n SPORT = 'sport',\n RICH = 'rich',\n PENDING_LOGIN = 'pending_login',\n PENDING_PLAY = 'pending_play',\n DOCUMENT_UPLOAD = 'upload_document',\n HELP = 'help',\n PENDING_APP = 'pending_app',\n POKER = 'poker',\n LIVE_CHAT = 'live_chat'\n}\n\nexport {GNWP_SOURCES};\n","export enum MediaType {\n All = \"all\",\n Screen = \"screen\",\n Print = \"print\",\n Speech = \"speech\",\n OnlyScreen = \"only screen\"\n}\nexport enum MediaOrientation {\n Portrait = \"portrait\",\n Landscape = \"landscape\"\n}\nexport enum MediaPointer {\n Fine = \"fine\",\n Coarse = \"coarse\",\n None = \"none\"\n}\n\nexport class MediaQueryBuilder {\n static get For(): MediaQueryBuilder {\n return new MediaQueryBuilder();\n }\n private _rules: string[] = [];\n private _mediaType: MediaType | undefined;\n\n mediaType(m: MediaType): MediaQueryBuilder {\n this._mediaType = m;\n return this;\n }\n minWidth(w: number): MediaQueryBuilder {\n this._rules.push(`(min-width: ${w}px)`);\n return this;\n }\n maxWidth(w: number): MediaQueryBuilder {\n this._rules.push(`(max-width: ${w}px)`);\n return this;\n }\n minHeight(h: number): MediaQueryBuilder {\n this._rules.push(`(min-height: ${h}px)`);\n return this;\n }\n maxHeight(h: number): MediaQueryBuilder {\n this._rules.push(`(max-height: ${h}px)`);\n return this;\n }\n orientation(o: MediaOrientation): MediaQueryBuilder {\n this._rules.push(`(orientation: ${o})`);\n return this;\n }\n hover(t: boolean) {\n this._rules.push(`(hover: ${t ? 'hover' : 'none'})`);\n return this;\n }\n anyHover(t: boolean) {\n this._rules.push(`(any-hover: ${t ? 'hover' : 'none'})`);\n return this;\n }\n pointer(precision?: MediaPointer) {\n if (precision) {\n this._rules.push(`(pointer: ${precision})`);\n } else {\n this._rules.push(`(pointer)`);\n }\n return this;\n }\n anyPointer(precision?: MediaPointer) {\n if (precision) {\n this._rules.push(`(any-pointer: ${precision})`);\n } else {\n this._rules.push(`(any-pointer)`);\n }\n return this;\n }\n build(): string {\n let rules = [...this._rules];\n if (this._mediaType) {\n rules.unshift(this._mediaType);\n }\n return rules.join(' and ');\n }\n}","import { breakpoints } from \"./breakpoints\";\nimport { IMediaQueries } from \"./media-queries.interface\";\nimport { MediaOrientation, MediaPointer, MediaQueryBuilder } from \"./media-query-builder\";\n\nlet { xsMax, sMax, mMax, lMax, xlMax } = breakpoints;\n\nexport const mediaQueries: IMediaQueries = {\n xs: MediaQueryBuilder.For.maxWidth(xsMax - 1).build(),\n\n sAndBelow: MediaQueryBuilder.For.maxWidth(sMax - 1).build(),\n sExact: MediaQueryBuilder.For.minWidth(xsMax).maxWidth(sMax - 1).build(),\n sAndAbove: MediaQueryBuilder.For.minWidth(xsMax).build(),\n\n mAndBelow: MediaQueryBuilder.For.maxWidth(mMax - 1).build(),\n mExact: MediaQueryBuilder.For.minWidth(sMax).maxWidth(mMax - 1).build(),\n mAndAbove: MediaQueryBuilder.For.minWidth(sMax).build(),\n\n lAndBelow: MediaQueryBuilder.For.maxWidth(lMax - 1).build(),\n lExact: MediaQueryBuilder.For.minWidth(mMax).maxWidth(lMax - 1).build(),\n lAndAbove: MediaQueryBuilder.For.minWidth(mMax).build(),\n\n xlAndBelow: MediaQueryBuilder.For.maxWidth(xlMax - 1).build(),\n xlExact: MediaQueryBuilder.For.minWidth(lMax).maxWidth(xlMax - 1).build(),\n xlAndAbove: MediaQueryBuilder.For.minWidth(lMax).build(),\n\n xxl: MediaQueryBuilder.For.minWidth(xlMax).build(),\n\n portrait: MediaQueryBuilder.For.orientation(MediaOrientation.Portrait).build(),\n landscape: MediaQueryBuilder.For.orientation(MediaOrientation.Landscape).build(),\n\n veryLowHeight: MediaQueryBuilder.For.maxHeight(500).build(),\n lowHeight: MediaQueryBuilder.For.maxHeight(900).build(),\n\n hover: MediaQueryBuilder.For.hover(true).build(),\n hoverNone: MediaQueryBuilder.For.hover(false).build(),\n\n anyHover: MediaQueryBuilder.For.anyHover(true).build(),\n anyHoverNone: MediaQueryBuilder.For.anyHover(false).build(),\n\n pointer: MediaQueryBuilder.For.pointer().build(),\n pointerFine: MediaQueryBuilder.For.pointer(MediaPointer.Fine).build(),\n pointerCoarse: MediaQueryBuilder.For.pointer(MediaPointer.Coarse).build(),\n pointerNone: MediaQueryBuilder.For.pointer(MediaPointer.None).build(),\n\n anyPointer: MediaQueryBuilder.For.anyPointer().build(),\n anyPointerFine: MediaQueryBuilder.For.anyPointer(MediaPointer.Fine).build(),\n anyPointerCoarse: MediaQueryBuilder.For.anyPointer(MediaPointer.Coarse).build(),\n anyPointerNone: MediaQueryBuilder.For.anyPointer(MediaPointer.None).build()\n}\n","/** Upper limits (non-inclusive) for media breakpoints */\nexport const breakpoints = {\n xsMax: 401,\n sMax: 768,\n mMax: 1024,\n lMax: 1280,\n xlMax: 1480\n};\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class AboutDialogAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"aboutDialogMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n await this.services.orbitComponentInsideSdkProvider.showAboutDialog();\n }\n}\n\n\n\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\n\nexport default class CashierUploadDocumentsAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"cashierUploadDocumentsMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n await this.services.cashier.openUploadDocumentsFromCashier();\n }\n}","import {AppIdentifiers, AreaType, ChatOpenMode} from \"@sparkware/uc-sdk-core\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {MenuItemActionBase} from \"../menu-item-action-base\";\n\n\nexport default class ChatAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"chatMenuItem\",configReader, services);\n }\n protected async _onClick(): Promise<void> {\n await (await this.services.appLauncher).openChat( {\n businessCorrelationID: this.services.tools.getGuid(),\n appSpecificParameters: {\n openMode: ChatOpenMode.Chat,\n },\n channel: {\n area: AreaType.NavigationMenu,\n element: this.key,\n source: AppIdentifiers.CasinoClient\n }\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\n\nexport default class ComPointsAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"compPointsMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n await (await this.services.externalLinks).openMyAccount({\n tabId: MyAccountTab.ComPoints\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {AreaType, ControlCenterOpenSource} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\n\nexport default class ControlCenterAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"controlCenterMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: AreaType.UserArea,\n element: CHANNEL_ELEMENTS.controlCenterUsefulLink,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n source: ControlCenterOpenSource.UserArea\n }\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class DepositAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"depositMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n await this.services.cashier.openDeposit({\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.NavigationMenu,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n }\n}","import {LinkNavigationAction} from \"../link-navigation.action\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemExecuteOptions} from \"../menu-item-action.interface\";\n\nexport default class ExploreNavigationAction extends LinkNavigationAction {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"videoSlideExploreMenuItem\", configReader, services);\n }\n\n protected async _onClick(options?: IMenuItemExecuteOptions): Promise<void> {\n\n this.services.videoSlides.setShownExplorerMenuBadgeCurrentSession();\n\n await super._onClick(options);\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {AppIdentifiers, AreaType} from \"@sparkware/uc-sdk-core\";\n\nexport default class HelpCenterAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"helpCenterMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n await (await this.services.appLauncher).openContactUs({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: AreaType.NavigationMenu,\n element: AppIdentifiers.CRHelpCenter,\n source: AppIdentifiers.CasinoClient\n }\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {DialogButtonClickHandleResultEnum} from \"../../dialog/dialog.service.interface\";\n\nexport default class HybridInfoAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"hybridInfoMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n const hybridInfo = await this.services.hybrid.getInfoForDisplay();\n this.services.dialog.showSimpleTextModal({\n title: 'Info',\n text: hybridInfo,\n buttons: [\n {\n text: 'Close',\n buttonPreset: 'special',\n onClick: async () => {\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n },\n {\n text: 'Mail to',\n buttonPreset: 'primary',\n onClick: async () => {\n this.services.hybrid.openMail(hybridInfo);\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ]\n })\n await this.services.orbitComponentInsideSdkProvider.showAboutDialog();\n }\n\n\n}\n\n\n\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class InactivityTimeoutSettingsAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"inactivityTimeoutSettingsMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n this.services.regulation.current.openInactivitySettings();\n }\n}\n\n\n\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class InstallPwaAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"installPWAMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n await (await this.services.progressiveWebApp).prompt();\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class LoyaltyIndicatorAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"loyaltyIndicatorMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n //nothing to do here\n }\n\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class MyClubAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"myClubMenuItem\", configReader, services)\n }\n\n protected async _onClick(): Promise<void> {\n await (await this.services.externalLinks).openMyAccount({\n tabId: MyAccountTab.LCChallenges\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IMenuItemExecuteOptions} from \"../menu-item-action.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nexport default class PushNotificationsPermissionsRequestAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"pushNotificationsPermissionsRequest\", configReader, services)\n }\n\n protected async _onClick(options?: IMenuItemExecuteOptions): Promise<void> {\n this.services.sdk.promptPushNotificationPermissionRequest();\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {CashierSessionType} from \"@sparkware/uc-sdk-core\";\n\nexport default class ReverseWithdrawalAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"reverseWithdrawalMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n await this.services.cashier.openOldCashier({sessionType: CashierSessionType.ReverseWithdrawal});\n }\n}\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\n\n\nexport default class SignUpAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"signUpMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n await (await this.services.externalLinks).openMembership({\n channel: {\n area: AreaType.NavigationMenu,\n source: CHANNEL_SOURCE.casinoClient,\n element: CHANNEL_ELEMENTS.registerButton\n },\n marketingParams: {\n dl: this.config.dl\n }\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IMenuItemExecuteOptions} from \"../menu-item-action.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\n/**\n * This class is for demonstrating how to override menu items per regulation. It should be removed when we will have a real case\n */\nexport default class TestRegulationSpecificAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"testRegulationSpecificMenuItem\", configReader, services);\n }\n protected async _onClick(options?: IMenuItemExecuteOptions): Promise<void> {\n this.services.dialog.showSimpleTextModal({\n text: 'Test regulation specific menu item',\n title: 'test',\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {AreaType, ControlCenterDeeplink, ControlCenterOpenSource} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\n\nexport default class TimeSpentReminderAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"timeSpentReminderMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n\n channel: {\n area: AreaType.UserArea,\n element: CHANNEL_ELEMENTS.controlCenterUsefulLink,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n deeplink: ControlCenterDeeplink.TimeSpentReminderPage,\n source: ControlCenterOpenSource.UserArea\n }\n });\n }\n}","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\n\nexport default class TouchIdAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"touchIdMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n this.services.specificDialogs.showModifyBiometricDialog();\n }\n}\n\n\n\n","import {MenuItemActionBase} from \"../menu-item-action-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\n\nexport default class TransactionHistoryAction extends MenuItemActionBase {\n constructor(configReader: IMenuItemConfigReader, services: IServiceFactoryExtended) {\n super(\"transactionHistoryMenuItem\", configReader, services);\n }\n\n protected async _onClick(): Promise<void> {\n await this.services.cashier.openTransactionHistory(\n {\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.UserArea,\n element: CHANNEL_ELEMENTS.transactionHistoryButton\n }\n }\n );\n }\n}","import {MenuItemActionBase} from \"./menu-item-action-base\";\nimport {UriPath} from \"../location/uri-path/uri-path\";\nimport {IMenuItemExecuteOptions} from \"./menu-item-action.interface\";\nimport {LinkNavigationId} from \"../configurations/config-data-sections/generated-config-const\";\n\nexport class LinkNavigationAction extends MenuItemActionBase {\n protected async _onClick(options?: IMenuItemExecuteOptions): Promise<void> {\n if(!this.config.linkId) {\n throw new Error(`Missing linkId for ${this.key} menu item`);\n }\n\n const promotionsLinks: LinkNavigationId[] = ['promotionsLink', 'promotionsCIPLink', 'promotionsCISLink'];\n\n try {\n if(this.services.user.isAuthorized && promotionsLinks.includes(this.config.linkId)) {\n this.services.sdk.promptPushNotificationPermissionRequest();\n }\n }\n catch (e) {\n this.services.analytics.sendElasticInfoEvent({\n eventType: \"error\",\n category: \"navigation\",\n action: \"push notification permission request failed\",\n value:e.toString()\n })\n }\n finally {\n await this.services.linksNavigation.navigateLink({\n linkId: this.config.linkId,\n linkHash: options?.linkHash,\n marketingParams: {\n dl: this.config.dl\n }\n });\n }\n }\n\n get isMatchToCurrentUrl(): boolean {\n let link = this.getLinkUrl();\n try {\n if (!link)\n return false;\n\n if (link.slice(-1) === '/') // NB: link may be \"/slots/\" comparing to \"/slots\", so trim trailing \"/\" from the link before comparing.\n link = link.slice(0, -1);\n\n const currentPath = this.services.location.currentUri.pathName;\n const candidate = new UriPath(link);\n\n if (currentPath.isEmpty)\n return candidate.isEmpty; // We're on the homepage, so a link to homepage is active\n if (candidate.isEmpty)\n return false; // We're *not* on the homepage, so a link to homepage is *definitely not* active\n\n const linkRoot = candidate.toArray()[1].toLowerCase();\n const pathRoot = currentPath.toArray()[1].toLowerCase();\n\n if (linkRoot !== pathRoot)\n return false; // cannot be the same link if they don't start in the same root\n\n return currentPath.toString().toLowerCase().indexOf(link.toLowerCase()) > -1;\n } catch(e) {\n this.services.logger.error(`Failed to compare link '${link}' to current route!`, e);\n return false;\n }\n }\n\n\n}","import {IMenuItemAction, IMenuItemExecuteOptions} from \"./menu-item-action.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {\n IMenuItemConfigReader, MenuItemConfigurationExtended\n} from \"../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {MenuItemKey} from \"../configurations/config-data-sections/generated-config-const\";\nimport {NullableUndefinedString} from \"../../../common/types/nullable-types\";\n\nexport abstract class MenuItemActionBase implements IMenuItemAction {\n constructor(public readonly key: MenuItemKey,\n private readonly configReader: IMenuItemConfigReader,\n protected readonly services: IServiceFactoryExtended) {\n }\n\n\n protected abstract _onClick(options?: IMenuItemExecuteOptions): Promise<void>;\n\n async execute(options?: IMenuItemExecuteOptions): Promise<void> {\n const sideMenu = await this.services.sideMenu;\n await sideMenu.closeMobileMenu();\n (await this.services.userMenu).closeMenu();\n this.services.hybrid.closeSecondWebView();\n const drawer = await this.services.drawer;\n drawer.right.closeDrawer();\n const analytics = this.config.analytics;\n if(analytics) {\n this.services.analytics.sendOrbitUserFlowEvent(analytics.category, analytics.action, analytics.label);\n }\n (await this.services.bottomNavigationBar).activeMenuItemKey = this.key;\n await this._onClick();\n }\n\n private _config: MenuItemConfigurationExtended | null = null;\n\n protected get config(): MenuItemConfigurationExtended {\n if(!this._config) {\n this._config = this.configReader.getMenuItemConfig(this.key);\n }\n\n return this._config;\n }\n\n get isMatchToCurrentUrl(): boolean {\n return false;\n }\n\n getLinkUrl(): NullableUndefinedString {\n if(!this.config.linkId) {\n return null;\n }\n return this.services.linksNavigation.getLinkUrl(this.config.linkId);\n }\n\n}","import {\n IMenuItemConfigReader,\n MenuItemAnalyticsCategoryAndLabel,\n MenuItemConfigurationExtended\n} from \"./menu-item-config-reader.interface\";\nimport {\n MenuItemConfiguration,\n MenuItemsConfiguration\n} from \"../../configurations/config-data-sections/menu-items.configuration\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {AnalyticsConfiguration} from \"../../configurations/config-data-sections/analytics.configuration\";\n\nexport abstract class MenuItemConfigReaderBase implements IMenuItemConfigReader {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n\n protected abstract _getMenuItemsConfigOverrides(): MenuItemsConfiguration | undefined;\n protected abstract _getAnalyticsCategoryAndLabel(): MenuItemAnalyticsCategoryAndLabel | null;\n\n getMenuItemConfig(key: string): MenuItemConfigurationExtended {\n const allConfigs = this.services.configuration.data;\n const menuItemConfig: MenuItemConfiguration | undefined = allConfigs.menuItems[key];\n if(!menuItemConfig) {\n throw new Error(`Missing configuration for ${key} menu item`);\n }\n\n const menuItemsOverrides = this._getMenuItemsConfigOverrides();\n\n const menuItemConfigOverride: MenuItemConfiguration | undefined = menuItemsOverrides && menuItemsOverrides[key];\n\n\n\n const menuItemConfigProxyHandler = {\n get: (target: any, prop: string) => {\n if(prop === 'analytics') {\n const categoryAndLabel = this._getAnalyticsCategoryAndLabel();\n if(categoryAndLabel) {\n const analyticsConfig: AnalyticsConfiguration = {\n action: key,\n ...categoryAndLabel\n }\n return analyticsConfig;\n } else {\n return null;\n }\n } else {\n const overridePropValue = menuItemConfigOverride && menuItemConfigOverride[prop];\n if(Check.isUndefined(overridePropValue)) {\n return target[prop];\n } else {\n return overridePropValue;\n }\n }\n }\n }\n\n return new Proxy(menuItemConfig, menuItemConfigProxyHandler);\n\n\n }\n}\n\n","import {MenuItemConfigReaderBase} from \"./menu-item-config-reader-base\";\nimport {\n MenuItemsConfiguration\n} from \"../../configurations/config-data-sections/menu-items.configuration\";\nimport {MenuItemAnalyticsCategoryAndLabel} from \"./menu-item-config-reader.interface\";\n\nexport class MenuItemDefaultConfigReader extends MenuItemConfigReaderBase {\n protected _getMenuItemsConfigOverrides(): MenuItemsConfiguration | undefined {\n return undefined;\n }\n\n protected _getAnalyticsCategoryAndLabel(): MenuItemAnalyticsCategoryAndLabel | null {\n return null;\n }\n}","import {IMenuItemRenderer, IRenderMenuItemOptions} from \"./menu-item.renderer.interface\";\nimport React from \"react\";\nimport {\n IMenuItemAction,\n IMenuItemExecuteOptions\n} from \"../../menu-item-action-factory/menu-item-action.interface\";\nimport {MenuItemKey} from \"../../configurations/config-data-sections/generated-config-const\";\nimport {NullableUndefinedString} from \"../../../../common/types/nullable-types\";\nimport {IconSourceConfiguration} from \"../../configurations/config-data-sections/icon-source.configuration\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {\n IMenuItemConfigReader,\n MenuItemConfigurationExtended\n} from \"../menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IMenuItemActionFactoryService} from \"../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\n\nexport abstract class MenuItemRendererBase implements IMenuItemRenderer {\n constructor(public readonly key: MenuItemKey,\n private readonly configReader: IMenuItemConfigReader,\n protected readonly services: IServiceFactoryExtended,\n protected readonly menuItemActionFactory: IMenuItemActionFactoryService) {\n this.menuItemAction = this.menuItemActionFactory.getMenuItemAction(this.key, this.configReader);\n }\n\n protected abstract _createReactElement(options?: IRenderMenuItemOptions): React.ReactElement;\n\n\n private _config: MenuItemConfigurationExtended | null = null;\n protected _lastRenderOptions: IRenderMenuItemOptions | undefined = undefined;\n\n private get config(): MenuItemConfigurationExtended {\n if(!this._config) {\n this._config = this.configReader.getMenuItemConfig(this.key);\n }\n\n return this._config;\n }\n\n private readonly menuItemAction: IMenuItemAction;\n\n renderMenuItem(options?: IRenderMenuItemOptions): React.ReactElement {\n this._lastRenderOptions = options;\n return this._createReactElement(options);\n }\n\n execute(options?: IMenuItemExecuteOptions): Promise<void> {\n if(this._lastRenderOptions?.onBeforeClick) {\n this._lastRenderOptions.onBeforeClick();\n }\n return this.menuItemAction.execute(options);\n }\n\n\n get text(): string {\n return this.services.translation.translate(this.config.text);\n }\n\n get sideText(): NullableUndefinedString {\n return null;\n }\n\n get imageOnlyRendering(): boolean {\n return this.config.imageOnlyRendering ?? false;\n }\n\n protected _shouldDisplay(): boolean {\n return this.config.display ?? true;\n }\n\n get display(): boolean {\n return this._shouldDisplay();\n }\n\n get isMatchToCurrentUrl(): boolean {\n return this.menuItemAction.isMatchToCurrentUrl;\n }\n\n get iconSource(): IconSourceConfiguration {\n return this.config.menuItemIconSource ?? \"themeIcons\";\n }\n\n get icon(): NullableUndefinedString {\n return this.config.menuItemIcon;\n }\n\n get iconAltText(): NullableUndefinedString {\n return this.services.translation.translate(this.config.menuItemIconAltText);\n }\n\n getLinkUrl(): NullableUndefinedString {\n return this.menuItemAction.getLinkUrl();\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {AnimationStatus, PixiSpineAnimation} from \"./pixi-spine-animation\";\n\nexport enum AnimatedIconUnloadReason {\n CONTEXT_LOST,\n VIEWPORT_EXIT,\n REQUESTED,\n GAME_OPEN\n}\n\nexport interface IAnimatedIconRequestOptions {\n jsonUrl: string;\n wrapper: HTMLElement;\n size: {width: number; height: number};\n timings: {delay: number; interval: number;};\n animationName?: string;\n onAnimationLoad?(): void;\n onAnimationWillUnload?(reason: AnimatedIconUnloadReason): void;\n}\n\nexport type AnimatedIconObservableTarget = IAnimatedIconRequestOptions & {\n animation?: PixiSpineAnimation;\n animationDisposer?(reason: AnimatedIconUnloadReason): void;\n inViewport?: boolean;\n};\n\n\nexport class AnimatedIconBaseService extends ServiceBase{\n\n\n protected loadAnimatedIcon(options: AnimatedIconObservableTarget, resourceName: string) {\n if (options.animation && (options.animation.status === AnimationStatus.Loading || options.animation.status === AnimationStatus.Running)) {\n throw new Error(\"Animated Icon Loading in progress already for this icon. Please be patient\");\n }\n\n let iconPixiAnimation = new PixiSpineAnimation(this.services, {\n width: options.size.width,\n height: options.size.height,\n onContextLost: () => {\n if (options.animationDisposer) {\n options.animationDisposer(AnimatedIconUnloadReason.CONTEXT_LOST);\n }\n }\n }, [{name: resourceName, jsonUrl: options.jsonUrl}], {\n render: ({spineAnimations, loaderResources}) => {\n let spineAnimation = spineAnimations[resourceName];\n // get the animations\n const availableAnimations = loaderResources[resourceName].spineData.animations.map(a => a.name);\n const animationToPlay = availableAnimations.indexOf(options.animationName) !== -1 ? options.animationName : availableAnimations[0];\n\n // play animation\n const runAnimation = () => {\n // animated icons will have only one animation that we play in loop. There won't be complex timeline animations\n spineAnimation.state.setAnimation(0, animationToPlay, false);\n }\n let animationSchedule: any;\n\n spineAnimation.state.addListener({\n complete: (entry) => {\n // when animation completes, schedule the next iteration\n animationSchedule = setTimeout(runAnimation, options.timings.interval);\n }\n });\n\n runAnimation();\n\n options.animationDisposer = (reason: AnimatedIconUnloadReason) => {\n if (options.onAnimationWillUnload) {\n options.onAnimationWillUnload(reason);\n }\n iconPixiAnimation.dispose();\n };\n\n return () => {\n clearTimeout(animationSchedule);\n };\n }\n }, {\n display: \"block\",\n width: \"100%\"\n });\n\n options.animation = iconPixiAnimation;\n options.animationDisposer = iconPixiAnimation.dispose;\n\n iconPixiAnimation.start().then(({status}) => {\n if (status === AnimationStatus.Running) {\n if (options.onAnimationLoad) {\n options.onAnimationLoad();\n }\n iconPixiAnimation.attachToDOM(options.wrapper);\n }\n }).catch((e) => {\n // An error occured while loading the animated icon. log the error\n this.services.logger.error(e);\n });\n }\n}","import {CSSProperties} from \"react\";\nimport {IServiceFactory} from \"../service-factory.interface\";\nimport {Spine, IPixiAppCreateOptions, Application, LoaderResource} from \"./pixi-app.service.interface\";\n\nexport interface IPixiSpineResourceDef {\n name: string;\n jsonUrl: string;\n}\n\ntype AnimationDef = (stuff: {pixiApp: Application, spineAnimations: Record<string, Spine>; loaderResources: Record<string, LoaderResource>;}) => (void | (() => void));\n\nexport interface IAnimationRenderer {\n render: AnimationDef;\n dispose?(): void\n}\n\nexport enum AnimationStatus {\n Idle,\n Loading,\n Failed,\n Aborted,\n Running,\n Disposed\n}\n\ninterface IPixiAnimationPromiseResultSuccess {\n status: AnimationStatus.Running;\n canvas: HTMLCanvasElement;\n}\ninterface IPixiAnimationPromiseResultOther {\n status: AnimationStatus.Failed | AnimationStatus.Aborted | AnimationStatus.Disposed;\n canvas?: undefined;\n}\n\ntype IPixiAnimationPromiseResult = IPixiAnimationPromiseResultSuccess | IPixiAnimationPromiseResultOther;\n\nexport class PixiSpineAnimation {\n private pixiApp: Application;\n private pixiAppDisposer: () => void;\n private _spineAnimations: Record<string, Spine> = {};\n private _loaderResources: Record<string, LoaderResource> = {};\n private disposeActions: Array<() => void> = [];\n private _signalAborted = false;\n private _status: AnimationStatus = AnimationStatus.Idle;\n\n constructor(\n private services: IServiceFactory,\n private pixiAppCreateOptions: IPixiAppCreateOptions,\n private resourcesUrls: IPixiSpineResourceDef[],\n private renderer: IAnimationRenderer,\n private canvasCss?: CSSProperties\n ) {\n }\n\n private initPromise: Promise<IPixiAnimationPromiseResult> = null;\n public start(): Promise<IPixiAnimationPromiseResult> {\n if (!this.initPromise) {\n this.initPromise = this._initialize();\n }\n return this.initPromise;\n }\n\n private async _initialize(): Promise<IPixiAnimationPromiseResult> {\n // The init started, set the status as Loading\n this._status = AnimationStatus.Loading;\n // between constructor and start, the animation could have been aborted or disposed, check it\n if (this._signalAborted) {\n this._status = AnimationStatus.Aborted;\n return {status: AnimationStatus.Aborted};\n }\n\n // create pixi app. this loads the pixi and pixi-spine libraries first time they are called\n let {app: pixiApp, dispose: disposePixiApp, PixiSpine, canvas} = await this.services.pixiApp.createPixiApp(this.pixiAppCreateOptions);\n this.pixiApp = pixiApp;\n this.pixiAppDisposer = disposePixiApp;\n\n const {resources} = await this.services.pixiApp.loadResources(pixiApp, this.resourcesUrls).catch((e: unknown) => {\n this._status = AnimationStatus.Failed;\n disposePixiApp();\n throw e;\n });\n\n // loading of pixi libraries and animation resources are async, I must check if someone aborted the animation meanwhile\n if (this._signalAborted) {\n this._status = AnimationStatus.Aborted;\n this._disposeInternal();\n return {status: AnimationStatus.Aborted};\n }\n\n // Apply custom CSS to the canvas element created by pixi\n if (this.canvasCss) {\n Object.getOwnPropertyNames(this.canvasCss).forEach((styleKey) => {\n canvas.style[styleKey] = this.canvasCss[styleKey];\n });\n }\n\n // for all loaded resources instantiate Spine objects.\n // keep both raw loaded resources and Spine objects in Map or Record objects. key is the name.\n this.resourcesUrls.forEach((resUrl) => {\n this._loaderResources[resUrl.name] = resources[resUrl.name];\n let spineAnimation = new PixiSpine.Spine(resources[resUrl.name].spineData);\n this._spineAnimations[resUrl.name] = spineAnimation;\n pixiApp.stage.addChild(spineAnimation);\n });\n\n // run the specific animation instructions that are given in constructor\n // for now, only sync code is supported. to support async make it await\n // const renderDisposer = await this.renderer.render({spineAnimations, loaderResources}); // <- the renderer return Promise<RenderDisposer | void>\n const renderDisposer = this.renderer.render({pixiApp, spineAnimations: this._spineAnimations, loaderResources: this._loaderResources});\n if (renderDisposer) {\n this.disposeActions.push(renderDisposer);\n }\n\n // in case the renderer is async then we should check again if the loading was aborted.\n // for now, this code is useless because for the renderer to support async code it should be something like this:\n // const renderDisposer = await this.renderer.render({spineAnimations, loaderResources}); // <- the renderer return Promise<RenderDisposer | void>\n if (this._signalAborted) {\n this._status = AnimationStatus.Aborted;\n this._disposeInternal();\n return {status: AnimationStatus.Aborted};\n }\n\n // all done, set the status to Running and return the status (resolve)\n this._status = AnimationStatus.Running;\n\n return {status: AnimationStatus.Running, canvas: this.pixiApp.view};\n }\n\n public attachToDOM(wrapper: HTMLElement): Promise<IPixiAnimationPromiseResult> {\n if (!this.initPromise) {\n throw new Error(\"Method attachToDOM MUST be called after the method start\");\n }\n return this.initPromise.then((result) => {\n // At this point the status can be only Aborted or Running\n // Or, after disposal, the status could be Disposed\n if (result.status === AnimationStatus.Running) {\n wrapper.appendChild(result.canvas);\n }\n return result;\n });\n }\n\n public get spineAnimations() {\n return this._spineAnimations;\n }\n\n public get loaderResources() {\n return this._loaderResources;\n }\n\n public get status() {\n return this._status;\n }\n\n /**\n * Dispose is the one method to be called both for disposal of the running animation and for aborting a loading one\n * If the animation object is newly created or loading, then the controller abort will be called.\n * that will cause a call to _disposeInternal from the _initialize method, as soon as the method checks the aborted flag\n * If the animation is running, we set the disposed status and call _disposeInternal owrselves\n */\n public dispose = () => {\n if (this._status === AnimationStatus.Idle || this._status === AnimationStatus.Loading) {\n this._signalAborted = true;\n } else if (this._status === AnimationStatus.Running) {\n this._status = AnimationStatus.Disposed;\n this._disposeInternal();\n }\n }\n\n private _disposeInternal = () => {\n while (this.disposeActions.length) {\n const disposeAction = this.disposeActions.pop();\n disposeAction();\n };\n if (this.renderer.dispose) {\n this.renderer.dispose();\n }\n while (this.resourcesUrls.length) {\n const resource = this.resourcesUrls.pop();\n if (this._spineAnimations[resource.name]) {\n this._spineAnimations[resource.name].autoUpdate = false;\n this._spineAnimations[resource.name].destroy();\n delete this._spineAnimations[resource.name];\n }\n }\n this.pixiAppDisposer();\n }\n\n}\n","export const ITALY_MAX_GAME_LIMIT_AMOUNT_IN_CENTS = 100000;","export enum LocalStorageKeys {\n currentRunningGameTab = 'cgp_CURRENT_RUNNING_GAME_TAB',\n currentRunningGameType = 'cgp_CURRENT_RUNNING_GAME_TYPE',\n uccMessages = 'cgp_ucc',\n crossBrandSpecificNavigationInfo = 'orbit_crossBrandSpecificNavigation',\n clientIpAddressesV2 = \"orbit_clientIpAddressesV2\",\n videoSlides = 'cgp_VideoSlides',\n lastLogin = \"cgp_lastLogin\",\n explorerMenuBadgeShown = 'cgp_EXPLORER_MENU_BADGE_SHOWN',\n isJackpotBetOn = 'IS_JACKPOTBET_ON'\n}","import {LanguageSwitcherConfiguration} from \"../../app-bootstrap/config-interfaces/b2c-startup.configurations\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {IThemeCustomizer} from \"./theme.service.interface\";\n\nexport class StandardThemeCustomizer implements IThemeCustomizer {\n constructor(protected readonly services: IServiceFactoryExtended) {}\n getHomePageTopBannerHeight(): string {\n if (this.services.homepage.headerArenasStyleIsSmallTiles) {\n if (this.services.mediaQuery.sAndBelow) {\n return \"22rem\";\n }\n\n return \"29rem\";\n }\n\n if (this.services.mediaQuery.sAndBelow) {\n return \"25rem\";\n } else if (this.services.mediaQuery.lAndBelow) {\n return \"30rem\";\n }\n\n return \"47rem\";\n }\n\n getFreeToPlayAnimation() {\n return {\n jsonUrl: this.services.theme.currentTheme.assets.images.f2p.freeToPlay_json.toString(),\n size: {\n width: 445,\n height: 364\n },\n animationName: undefined\n };\n }\n\n getLanguageSwitcherConfigForTestEnvironments(): LanguageSwitcherConfiguration {\n return {\n \"languages\": [\n {\n \"title\": \"Deutsch\",\n \"url\": \"https://de.888casino.com/\"\n },\n {\n \"title\": \"Español\",\n \"url\": \"https://es.888casino.com/\"\n },\n {\n \"title\": \"Français\",\n \"url\": \"https://fr.888casino.com/\"\n },\n {\n \"title\": \"日本語\",\n \"url\": \"https://jp.888casino.com/\"\n },\n {\n \"title\": \"Português\",\n \"url\": \"https://br.888casino.com/\"\n },\n ],\n \"countries\": [\n {\n \"title\": \"Canada\",\n \"url\": \"https://ca.888casino.com/\"\n },\n {\n \"title\": \"España\",\n \"url\": \"https://www.888casino.es\"\n },\n {\n \"title\": \"Danmark\",\n \"url\": \"https://www.888casino.dk\"\n },\n {\n \"title\": \"România\",\n \"url\": \"https://www.888casino.ro\"\n },\n {\n \"title\": \"Italia\",\n \"url\": \"https://www.888casino.it\"\n },\n {\n \"title\": \"Sverige\",\n \"url\": \"https://www.888casino.se\"\n },\n {\n \"title\": \"United States\",\n \"url\": \"https://us.888casino.com\"\n },\n {\n \"title\": \"Portugal\",\n \"url\": \"https://casino.888.pt\",\n \"sendFunnelParameters\": true\n },\n {\n \"title\": \"Deutschland\",\n \"url\": \"https://www.888slots.de\"\n }\n ],\n \"languageSettings\": {\n \"title\": \"Choose your language:\",\n \"current\": \"English\"\n },\n \"countrySettings\": {\n \"title\": \"Or choose your country:\",\n \"current\": \"\"\n }\n }\n };\n}\n","export enum CypressToastClassNames {\n Container = \"cy-toast-container\",\n Toast = \"cy-toast\",\n}\n\nexport enum ToastClassNames {\n Container = \"orbit-toast-container\",\n Toast = \"orbit-toast\",\n Body = \"orbit-toast-body\",\n ProgressBar = \"orbit-toast-progress-bar\"\n}\n\nlet toastClassNames: string = \"\";\nexport function addToastClassName(className?: string | undefined) {\n if (!className) {\n return toastClassNames;\n }\n toastClassNames += \" \" + className;\n return toastClassNames;\n}","import React from 'react';\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {IStandardToastContentProps} from \"../../components/toaster/toasts-content/standard-toast.component.props\";\n\nexport interface IToastHandler {\n readonly toastId: number | string;\n close(closeReason?: ToastCloseReason | string): void;\n}\n\ninterface IToastOptions {\n timeout?: TimeSpan;\n hideProgressBar?: boolean;\n className?: string;\n closeButton?: boolean;\n}\n\n\n\nexport enum ToastCloseReason {\n CloseButton = \"CloseButton\",\n}\n\nexport interface IToastDefinition {\n id?: number | string;\n toastOptions?: IToastOptions;\n renderContent: (handler: IToastHandler) => React.ReactElement;\n onToastShown?: () => void;\n displayCondition?: () => boolean;\n /**\n * @param closeReason ToastCloseReason | string | undefined\n * closeReason will be ToastCloseReason.CloseButton if the toast is closed from X button or undefined if it's autoClosed by the timeout or whatever you pass to the handler close method\n * Keep in mind that if you don't pass an argument to the close method the reason will be undefined just as in the case of timeout\n */\n onToastClosed?: (closeReason?: ToastCloseReason | string) => void;\n}\n\nexport interface IStandardToastDefinition extends Omit<IToastDefinition, \"renderContent\"> {\n contentProps: IStandardToastContentProps;\n}\n\ninterface IAnalyticsData {\n category: string;\n action: string;\n label?: string;\n}\n\nexport interface IAnalyticsOptions {\n analyticsData?: IAnalyticsData;\n}\n\nexport interface IToasterService {\n readonly hasOpenToasters: boolean;\n showCustomToast(toastDef: IToastDefinition): IToastHandler;// Promise<IToasterHandler>;\n showStandardToast(toastDef: IStandardToastDefinition): IToastHandler;\n showAckStandardToast(toastDef: IStandardToastDefinition): IToastHandler;\n removeAllToasts: () => void;\n}\n","import {CyClass} from \"../../../../common/cy-classes\";\n\nexport const TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE = CyClass('cy-header-bankroll-button-mobile');\nexport const TOOLTIP_TARGET_FREE_PLAY_INDICATOR = CyClass('cy-free-play-indicator-button');\nexport const TOOLTIP_TARGET_GIFT_MINI_ORBIT_INDICATOR = CyClass('cy-header-menu-gift-button');\nexport const TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON = CyClass('cy-header-control-center-button');\nexport const TOOLTIP_TARGET_BOTTOM_NAV_BAR_INDICATOR = CyClass('cy-bottom-navbar-menu-item');\n","import { ThemeName } from \"./theme-names\";\n\nexport class ByThemeRegistry<T> {\n constructor(private _default: T) {}\n\n private _registry: Partial<Record<string, T>> = {};\n\n forCasino777(override: T): this {\n this._registry[ThemeName.Casino777.forClient] = override;\n return this;\n }\n\n forCasino888(override: T): this {\n this._registry[ThemeName.Casino888.forClient] = override;\n return this;\n }\n\n forCip(override: T): this {\n this._registry[ThemeName.Casino888Cip.forClient] = override;\n return this;\n }\n\n forWsopCip(override: T): this {\n this._registry[ThemeName.WsopCip.forClient] = override;\n return this;\n }\n\n forCis(override: T): this {\n this._registry[ThemeName.Casino888Cis.forClient] = override;\n return this;\n }\n\n forHarrahs(override: T): this {\n this._registry[ThemeName.Harrahs.forClient] = override;\n return this;\n }\n\n forWsop(override: T): this {\n this._registry[ThemeName.Wsop.forClient] = override;\n return this;\n }\n\n forSI(override: T): this {\n this._registry[ThemeName.SI.forClient] = override;\n return this;\n }\n\n forSICis(override: T): this {\n this._registry[ThemeName.SICis.forClient] = override;\n return this;\n }\n\n forMrGreen(override: T): this {\n this._registry[ThemeName.MrGreen.forClient] = override;\n return this;\n }\n\n forMrGreenCis(override: T): this {\n this._registry[ThemeName.MrGreenCis.forClient] = override;\n return this;\n }\n\n forMrGreenCip(override: T): this {\n this._registry[ThemeName.MrGreenCip.forClient] = override;\n return this;\n }\n\n getRegistryItem = (themeName: ThemeName) => {\n return this._registry[themeName.forClient] ? this._registry[themeName.forClient] : this._default;\n }\n}\n","import {EMBEDDED_HYBRID, MINI_ORBIT} from '../../css-global-classes';\n\nexport class CssRule {\n static get For(): CssRule {\n return new CssRule()\n }\n private _rules: string[] = [];\n private negateNextRule: boolean = false;\n private formatRule(rule: string) {\n if (this.negateNextRule) {\n this.negateNextRule = false;\n return `:not(${rule})`;\n }\n return rule;\n }\n get not(): CssRule {\n this.negateNextRule = true\n return this;\n }\n get desktop(): CssRule {\n this._rules.push(this.formatRule('.cgp-pc'));\n return this;\n }\n\n get ipad(): CssRule {\n this._rules.push(this.formatRule('.cgp-ipad-device'));\n return this;\n }\n\n get mobile(): CssRule {\n this._rules.push(this.formatRule('.cgp-mobile'));\n return this;\n }\n\n get notMobileOs(): CssRule {\n this._rules.push(this.formatRule('.cgp-not-mobile-os'));\n return this;\n }\n\n get lowRes(): CssRule {\n this._rules.push(this.formatRule('.cgp-low-resolution'));\n return this;\n }\n\n get portrait(): CssRule {\n this._rules.push(this.formatRule('.cgp-portrait'));\n return this;\n }\n\n get landscape(): CssRule {\n this._rules.push(this.formatRule('.cgp-landscape'));\n return this;\n }\n\n get tablet(): CssRule {\n this._rules.push(this.formatRule('.cgp-tablet'));\n return this;\n }\n\n get RTL(): CssRule {\n this._rules.push(this.formatRule('.cgp-rtl'));\n return this;\n }\n\n get embededHybrid(): CssRule {\n this._rules.push(this.formatRule(`.${EMBEDDED_HYBRID}`));\n return this;\n }\n\n get hybrid(): CssRule {\n this._rules.push(this.formatRule(`.cgp-hybrid`));\n return this;\n }\n\n get iPhoneVer5(): CssRule {\n this._rules.push(this.formatRule('.cgp-iphone-ver-5'));\n return this;\n }\n\n get iPhoneVer10(): CssRule {\n this._rules.push(this.formatRule('.cgp-iphone-ver-10'));\n return this;\n }\n\n get realMobile(): CssRule {\n this._rules.push(this.formatRule('.cgp-real-mobile'));\n return this;\n }\n\n get miniOrbit(): CssRule {\n this._rules.push(this.formatRule(`.${MINI_ORBIT}`));\n return this;\n }\n\n build(): string {\n if(this._rules.length === 0) {\n return '';\n }\n\n return `html${this._rules.join('')}`;\n }\n}\n","import styled, { css } from \"styled-components\";\n\ntype FlexAlignItemsProp = \"flex-start\" | \"flex-end\" | \"stretch\" | \"center\" | \"baseline\";\ntype FlexJustifyContentProp = \"flex-start\" | \"flex-end\" | \"center\" | \"space-between\" | \"space-around\" | \"space-evenly\";\ntype FlexDirection = \"column\" | \"column-reverse\" | \"row\" | \"row-reverse\";\n\n/* styled components css interpolations */\n\nexport const flexRowContainerMixin = css`\n display: flex;\n flex-direction: row;\n`;\nexport const flexRowReverseContainerMixin = css`\n display: flex;\n flex-direction: row-reverse;\n`;\nexport const flexColumnContainerMixin = css`\n display: flex;\n flex-direction: column;\n`;\n\nexport const flexAlignItemsMixin = (props: {alignItems?: FlexAlignItemsProp;}) => css`\n align-items: ${props.alignItems || \"unset\"};\n`;\nexport const flexJustifyContentMixin = (props: {justifyContent?: FlexJustifyContentProp;}) => css`\n justify-content: ${props.justifyContent || \"unset\"};\n`;\nexport const flexCenterAlignItemsMixin = css`\n ${flexAlignItemsMixin({alignItems: \"center\"})}\n`;\n\nexport const flexGrowItem = (props: {flexBasis?: string;}) => css`\n flex: 1 0 ${props.flexBasis || \"auto\"};\n`;\nexport const flexShrinkItem = (props: {flexBasis?: string; flexShrink?: number;}) => css`\n flex: 0 ${props.flexShrink || \"1\"} ${props.flexBasis || \"auto\"};\n`;\nexport const flexFixedSizeItem = css`\n flex: 0 0 auto;\n`;\nexport const flexAdaptiveSizeItem = css`\n flex: 1 1 auto;\n`;\n\n/* styled based components, to be used as is or as Base to be extended */\n\nexport const FlexFixedSizeItemBox = styled.div`\n ${flexFixedSizeItem}\n`;\n\nexport const FlexGrowItemBox = styled.div`\n ${flexGrowItem}\n`;\n\nexport const FlexShrinkItemBox = styled.div`\n ${flexShrinkItem}\n`;\n\nexport const FlexAdaptiveSizeItemBox = styled.div`\n ${flexAdaptiveSizeItem}\n`;\n\nexport const FlexContainerBox = styled.div<{\n alignItems?: FlexAlignItemsProp;\n justifyContent?: FlexJustifyContentProp;\n direction?: FlexDirection;\n}>`\n ${({direction}) => direction === \"column\" ? flexColumnContainerMixin : flexRowContainerMixin};\n ${flexAlignItemsMixin}\n ${flexJustifyContentMixin}\n`;\n","export const grayColors = {\n black: \"#000000\",\n gray013: \"#0d0d0d\",\n gray023: \"#171717\",\n gray033: \"#212121\",\n gray043: \"#2b2b2b\",\n gray053: \"#353535\",\n gray063: \"#3f3f3f\",\n gray073: \"#494949\",\n gray083: \"#535353\",\n gray093: \"#5d5d5d\",\n gray103: \"#676767\",\n gray113: \"#717171\",\n gray123: \"#7b7b7b\",\n gray133: \"#858585\",\n gray143: \"#8f8f8f\",\n gray153: \"#999999\",\n gray163: \"#a3a3a3\",\n gray173: \"#adadad\",\n gray183: \"#b7b7b7\",\n gray193: \"#c1c1c1\",\n gray203: \"#cbcbcb\",\n gray213: \"#d5d5d5\",\n gray223: \"#dfdfdf\",\n gray233: \"#e9e9e9\",\n gray243: \"#f3f3f3\",\n gray253: \"#fdfdfd\",\n white: \"#ffffff\",\n transparent: \"transparent\"\n}","\nexport enum HeaderArenasStyle {\n BigTiles,\n SmallTiles,\n Menu\n }\n\nexport interface IThemeLayout {\n headerArenasStyle?: HeaderArenasStyle;\n border: {\n radius: string;\n };\n}","import React from \"react\";\nimport {IThemeBoxes} from \"../../services/theme/theme-boxes.interface\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\n\nexport function styledBox<TBoxName extends keyof IThemeBoxes>(boxName: TBoxName): IThemeBoxes[TBoxName] {\n\n const Component: React.FC<any> = (props: any) => {\n const services = useServices();\n const themeBoxes = services.theme.boxes;\n let Box: any = (themeBoxes && themeBoxes[boxName]);\n\n\n if(!Box) {\n throw new Error(`Missing styled box ${boxName}`);\n }\n\n return (\n <Box ref={props.forwardedRef} {...props}>\n {props.children}\n </Box>\n )\n\n }\n\n let finalComponent = React.forwardRef<any>((props, ref) => <Component {...props} forwardedRef={ref}/>);\n return (finalComponent as any) as IThemeBoxes[TBoxName];\n\n\n}\n","import React from 'react';\nimport {StyledComponent} from 'styled-components';\nimport {OrbitTheme} from './orbit-theme.interface';\nimport {OrbitComponent} from '../../components/base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\n\n/**\n * @deprecated\n */\nexport function styledByDevice<C extends keyof JSX.IntrinsicElements | React.ComponentType<any>, O extends object = {}>(\n pc: StyledComponent<C, OrbitTheme, O>, mobile: StyledComponent<C, OrbitTheme, O>\n): StyledComponent<C, OrbitTheme, O> {\n\n let ComponentDefinition = observer(class extends OrbitComponent<any>{\n render() {\n let Component = null;\n\n if(this.services.device.isMobile) {\n Component = mobile;\n } else {\n Component = pc;\n }\n\n return (\n <Component ref={this.props.forwardedRef} {...this.props}>\n {this.props.children}\n </Component>\n );\n }\n });\n\n\n let finalComponent = React.forwardRef((props, ref) => <ComponentDefinition {...props} forwardedRef={ref}/>);\n\n return (finalComponent as any) as StyledComponent<C, OrbitTheme, O>;\n}","import React from 'react';\nimport { StyledComponent } from 'styled-components';\nimport { OrbitTheme } from './orbit-theme.interface';\nimport { OrbitComponent } from '../../components/base-components/orbit-component/orbit-component';\nimport { ByThemeRegistry } from './by-theme-registry';\n\nclass StyledByTheme<C extends keyof JSX.IntrinsicElements | React.ComponentType<any>, O extends object = {}> extends ByThemeRegistry<StyledComponent<C, OrbitTheme, O>> {\n\n apply(): StyledComponent<C, OrbitTheme, O> {\n const getRegistryItem = this.getRegistryItem;\n let ComponentDefinition = class extends OrbitComponent<any>{\n render() {\n let Component: any = getRegistryItem(this.services.theme.themeName);\n\n return (\n <Component ref={this.props.forwardedRef} {...this.props}>\n {this.props.children}\n </Component>\n );\n }\n };\n\n let finalComponent = React.forwardRef((props, ref) => <ComponentDefinition {...props} forwardedRef={ref}/>);\n\n return (finalComponent as any) as StyledComponent<C, OrbitTheme, O>;\n }\n}\n\n\nexport function styledByTheme<\n C extends keyof JSX.IntrinsicElements | React.ComponentType<any>,\n O extends object = {}\n>(defaultComponent: StyledComponent<C, OrbitTheme, O>): StyledByTheme<C, O> {\n return new StyledByTheme<C, O>(defaultComponent);\n}\n","import {ClientThemeName} from \"@sparkware/uc-sdk-core\";\n\nexport class ThemeName {\n constructor(public readonly forClient: string,\n public readonly forWidgets: ClientThemeName) {\n }\n\n public static Casino888 = new ThemeName('casino888', ClientThemeName.Casino888);\n public static Casino888Cip = new ThemeName(\"casino888/cip\", ClientThemeName.Casino888);\n public static Casino888Cis = new ThemeName(\"casino888/cis\", ClientThemeName.Casino888);\n public static Casino777 = new ThemeName(\"casino777\", ClientThemeName.Casino777);\n\n public static Harrahs = new ThemeName(\"harrahs\", ClientThemeName.Harrahs)\n public static Wsop = new ThemeName('wsop', ClientThemeName.WSOP);\n public static WsopCip = new ThemeName(\"wsop/cip\", ClientThemeName.WSOP);\n public static SI = new ThemeName('si', ClientThemeName.SI); //sports illustrator\n public static SICis = new ThemeName('si/cis', ClientThemeName.SI);\n public static MrGreen = new ThemeName(\"mrgreen\", ClientThemeName.MrGreen);\n public static MrGreenCis = new ThemeName(\"mrgreen/cis\", ClientThemeName.MrGreen);\n public static MrGreenCip = new ThemeName(\"mrgreen/cip\", ClientThemeName.MrGreen);\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class MobileMenuIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 26 18\" ratio={26/18}>\n <g fill=\"currentColor\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M25.2456 12.2096L22.2671 9.11674C22.2511 9.10012 22.2332 9.08938 22.2162 9.07373C22.9838 7.86248 23.2913 6.39857 23.0791 4.96544C22.8669 3.53231 22.1501 2.2319 21.0676 1.31601C19.9851 0.400115 18.6138 -0.0661243 17.2193 0.00757337C15.8247 0.0812711 14.5061 0.68965 13.5187 1.71493C12.5314 2.74021 11.9455 4.10946 11.8745 5.55755C11.8035 7.00565 12.2525 8.42959 13.1345 9.55367C14.0165 10.6777 15.2689 11.422 16.649 11.6423C18.0292 11.8626 19.439 11.5434 20.6054 10.7463C20.6205 10.7639 20.6309 10.7825 20.6469 10.7991L23.6254 13.892C23.8402 14.1151 24.1317 14.2405 24.4355 14.2405C24.7394 14.2405 25.0308 14.1151 25.2456 13.892C25.4605 13.6689 25.5812 13.3663 25.5812 13.0508C25.5812 12.7353 25.4605 12.4327 25.2456 12.2096ZM17.5073 9.68116C16.7788 9.68135 16.0666 9.4572 15.4608 9.03707C14.855 8.61695 14.3828 8.0197 14.1039 7.32088C13.8249 6.62206 13.7518 5.85303 13.8938 5.11108C14.0358 4.36913 14.3866 3.68759 14.9016 3.15262C15.4167 2.61765 16.073 2.25329 16.7874 2.10564C17.5019 1.95799 18.2425 2.03366 18.9156 2.3231C19.5886 2.61255 20.1639 3.10276 20.5687 3.73172C20.9734 4.36068 21.1894 5.10016 21.1894 5.85662C21.1894 6.87078 20.8015 7.84342 20.111 8.56063C19.4205 9.27784 18.4839 9.6809 17.5073 9.68116Z\" />\n <path d=\"M8.94878 1.37109H1.41297C0.632606 1.37109 0 2.02799 0 2.8383C0 3.64862 0.632606 4.30551 1.41297 4.30551H8.94878C9.72914 4.30551 10.3617 3.64862 10.3617 2.8383C10.3617 2.02799 9.72914 1.37109 8.94878 1.37109Z\" />\n <path d=\"M8.94878 8.21875H1.41297C0.632606 8.21875 0 8.87564 0 9.68596C0 10.4963 0.632606 11.1532 1.41297 11.1532H8.94878C9.72914 11.1532 10.3617 10.4963 10.3617 9.68596C10.3617 8.87564 9.72914 8.21875 8.94878 8.21875Z\" />\n <path d=\"M20.2525 15.0664H1.41297C0.632606 15.0664 0 15.7233 0 16.5336C0 17.3439 0.632606 18.0008 1.41297 18.0008H20.2525C21.0329 18.0008 21.6655 17.3439 21.6655 16.5336C21.6655 15.7233 21.0329 15.0664 20.2525 15.0664Z\" />\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IAddIconProps extends ISvgIconProps {\n\n}\n\nexport class AddIcon extends React.Component<IAddIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n <polygon points=\"0 0 24 0 24 24 0 24\"></polygon>\n <path d={\n // R 12\n \"M12,0 C5.38,0 0,5.38 0,12 C0,18.62 5.38,24 12,24 C18.62,24 24,18.62 24,12 C24,5.38 18.62,0 12,0 Z \" +\n // R 11\n // \"M12,1 C5.92,1 1,5.92 1,12 C1,18.07 5.92,23 12,23 C18.07,23 23,18.07 23,12 C23,5.92 18.07,1 12,1 Z \" +\n // R 10\n // \"M12,2 C6.48,2 2,6.48 2,12 C2,17.52 6.48,22 12,22 C17.52,22 22,17.52 22,12 C22,6.48 17.52,2 12,2 Z \" +\n\n \"M17,13 L13,13 L13,17 L11,17 L11,13 L7,13 L7,11 \" +\n \"L11,11 L11,7 L13,7 L13,11 L17,11 L17,13 Z\"\n }\n fill=\"currentColor\" fillRule=\"nonzero\"></path>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IBackIconProps extends ISvgIconProps {\n\n}\n\nexport class BackIcon extends React.Component<IBackIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props} flipOnRTL>\n <g>\n <path\n fill=\"currentColor\"\n d=\"M14.18,20.36a2,2,0,0,1-1.41-.58L6.4,13.41a2,2,0,0,1,0-2.82l6.37-6.37A2,2,0,0,1,15.6,7.05l-4.95,5L15.6,17a2,2,0,0,1-1.42,3.41Z\"\n />\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IForwardIconProps extends ISvgIconProps {\n\n}\n\nexport class ForwardIcon extends React.Component<IForwardIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g transform=\"rotate(180) translate(-24 -24)\">\n <path\n fill=\"currentColor\"\n d=\"M14.18,20.36a2,2,0,0,1-1.41-.58L6.4,13.41a2,2,0,0,1,0-2.82l6.37-6.37A2,2,0,0,1,15.6,7.05l-4.95,5L15.6,17a2,2,0,0,1-1.42,3.41Z\"\n />\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface ICloseIconProps extends ISvgIconProps {\n\n}\n\nexport class CloseIcon extends React.Component<ICloseIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g>\n <path\n fill=\"currentColor\"\n d=\"M19.92,17l-5.09-5.1,4.8-4.8A2,2,0,1,0,16.8,4.22L12,9,7.2,4.22A2,2,0,0,0,4.37,7.05l4.8,4.8L4.08,17A2,2,0,1,0,6.9,19.78l5.1-5.1,5.1,5.1A2,2,0,1,0,19.92,17Z\"\n />\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ControlCenterIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M12,24c-0.12,0-0.241-0.023-0.354-0.069C5.71,21.508,1.875,15.8,1.875,9.389V4.752c0-0.379,0.228-0.721,0.578-0.866\n l9.188-3.815c0.23-0.095,0.489-0.095,0.719,0l9.187,3.815c0.35,0.145,0.579,0.487,0.579,0.866v4.637\n c0,6.411-3.835,12.12-9.771,14.542C12.241,23.977,12.12,24,12,24z M3.75,5.378v4.011c0,5.517,3.225,10.444,8.25,12.656\n c5.024-2.212,8.25-7.138,8.25-12.656V5.378L12,1.952L3.75,5.378z\"/>\n <path d=\"M10.964,14.812c-0.24,0-0.48-0.091-0.663-0.274l-2.62-2.621c-0.366-0.366-0.366-0.959,0-1.326\n c0.366-0.366,0.959-0.366,1.326,0l1.957,1.957l4.029-4.03c0.366-0.366,0.961-0.366,1.327,0c0.365,0.366,0.365,0.959,0,1.326\n l-4.693,4.693C11.443,14.722,11.204,14.812,10.964,14.812z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IHelpIconProps extends ISvgIconProps {\n\n}\n\nexport class HelpIcon extends React.Component<IHelpIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g id=\"help\">\n <path\n fill=\"currentColor\"\n d=\"M11.9,20.65a1.23,1.23,0,0,1-1.24-1.24,1.25,1.25,0,1,1,2.49,0A1.25,1.25,0,0,1,11.9,20.65Zm-.52-4.44a.52.52,0,0,1-.53-.52l0-3.53a.55.55,0,0,1,.16-.38l.16-.16a.56.56,0,0,1,.35-.15c1.9-.11,3.85-1.12,3.88-3.14a2.86,2.86,0,0,0-.81-2A3.61,3.61,0,0,0,12,5.28,4.19,4.19,0,0,0,8.36,7.71.54.54,0,0,1,8,8H7.94a.53.53,0,0,1-.4-.12l-.65-.55a.52.52,0,0,1-.13-.64A5.86,5.86,0,0,1,12,3.35a5.16,5.16,0,0,1,5.25,4.84V8.5a5.24,5.24,0,0,1-4.5,4.62v2.57a.52.52,0,0,1-.52.52Z\"\n />\n <path\n fill=\"currentColor\"\n d=\"M12,3.65A4.86,4.86,0,0,1,17,8.21v.3a5,5,0,0,1-4.5,4.36v2.82a.22.22,0,0,1-.22.22h-.9a.22.22,0,0,1-.23-.22l-.05-3.53a.28.28,0,0,1,.07-.17l.16-.16a.25.25,0,0,1,.15-.06c2-.11,4.13-1.22,4.17-3.43a3.14,3.14,0,0,0-.9-2.18A3.9,3.9,0,0,0,12,5,4.5,4.5,0,0,0,8.09,7.59a.26.26,0,0,1-.16.13h0a.22.22,0,0,1-.16,0l-.66-.56A.24.24,0,0,1,7,6.83a5.6,5.6,0,0,1,5-3.18M11.9,18.44a1,1,0,0,1,.95,1,.94.94,0,0,1-.95.94.93.93,0,0,1-.94-.94,1,1,0,0,1,.94-1M12,3.05A6.16,6.16,0,0,0,6.49,6.56a.82.82,0,0,0,.2,1l.66.56a.79.79,0,0,0,.55.2h.16a.83.83,0,0,0,.57-.46A3.9,3.9,0,0,1,12,5.58a3.33,3.33,0,0,1,2.33,1,2.51,2.51,0,0,1,.71,1.76c0,1.81-1.83,2.72-3.61,2.82a.86.86,0,0,0-.53.24l-.16.15a.86.86,0,0,0-.25.6l.05,3.54a.83.83,0,0,0,.83.81h.9a.82.82,0,0,0,.82-.82V13.36a5.47,5.47,0,0,0,4.5-4.8V8.19A5.46,5.46,0,0,0,12,3.05ZM11.9,17.84a1.58,1.58,0,0,0-1.54,1.57,1.55,1.55,0,0,0,3.09,0,1.58,1.58,0,0,0-1.55-1.57Z\"\n />\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport styled from \"styled-components\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ITwoCharsIconProps extends ISvgIconProps {\n text: string;\n}\n\nconst TextTag = styled.text`\n font-family: \"888-Bold\", Verdana, sans-serif;\n font-size: 15px;\n text-transform: uppercase;\n dominant-baseline: central;\n`;\n\nexport class TwoCharsIcon extends React.Component<ITwoCharsIconProps, {}> {\n render() {\n let text = this.props.text.trim().substr(0,2);\n return (\n <SvgIcon {...this.props}>\n <g>\n <TextTag\n fill=\"currentColor\"\n x=\"50%\" y=\"50%\"\n textAnchor=\"middle\"\n >{text}</TextTag>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IEarthGlobeIconProps extends ISvgIconProps {\n\n}\n\nexport class EarthGlobeIcon extends React.Component<IEarthGlobeIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g>\n <path\n fill=\"currentColor\"\n d=\"M12,2A10,10,0,0,0,2.81,8.06l-.12,0,0,.15a10,10,0,0,0,5.51,13A9.88,9.88,0,0,0,12,22,10,10,0,0,0,12,2ZM6.4,19.46A9.33,9.33,0,0,1,3.08,9.27l.27.83a.46.46,0,0,0,.13.18l1.67,1.1-.38.38a.31.31,0,0,0-.1.24v1a.4.4,0,0,0,0,.15l.67,1.33a.35.35,0,0,0,.23.18l1.4.28V18a.27.27,0,0,0,0,.12l.66,1.67A.33.33,0,0,0,7.9,20l1,.33.1,0A.33.33,0,0,0,9.33,20V18.5l1.2-.9a.33.33,0,0,0,.14-.27v-.86l1.23-1.24a.26.26,0,0,0,.09-.17l.34-1.66a.35.35,0,0,0-.26-.4H10.86L10,11.49a.33.33,0,0,0-.28-.16H7.54L7,10.18A.36.36,0,0,0,6.72,10a.33.33,0,0,0-.29.1L6,10.53V10a.33.33,0,0,0-.1-.24l-.56-.57V8.62l2-.29a.29.29,0,0,0,.13-.05l1.66-1a.25.25,0,0,0,.12-.11l.93-1.56.89-.29a.38.38,0,0,0,.21-.22l.33-1a.34.34,0,0,0-.21-.42h0L9.46,3.35l-.34-.23a9.36,9.36,0,0,1,6.41.24l-.61.31H13.67a.33.33,0,0,0-.3.18L12.7,5.18a.34.34,0,0,0,.15.45l0,0,1,.33a.41.41,0,0,0,.19,0l1.24-.31.91.3h0l1.66.34a.36.36,0,0,0,.25,0l.76-.51a9.34,9.34,0,0,1,1,1.34l-1.64.55-1.77-.3-.59-.88a.33.33,0,0,0-.27-.15h-2a.35.35,0,0,0-.24.1l-1,1a.32.32,0,0,0-.09.28l.33,2.34a.32.32,0,0,0,.2.25l2.33,1a.33.33,0,0,0,.22,0l1.19-.3.72.49v1.15a.24.24,0,0,0,0,.15l1.3,2.6v1.25a.34.34,0,0,0,.09.24l.7.7A9.33,9.33,0,0,1,6.4,19.46Z\"\n />\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class TopGamesIcon extends React.Component<ILiveCasinoNavbarIconProps> {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M15.1242 2.20001C15.4267 2.20001 15.6742 2.43482 15.6742 2.72182C15.6742 3.00881 15.4267 3.24362 15.1242 3.24362H6.87422C6.57172 3.24362 6.32422 3.00881 6.32422 2.72182C6.32422 2.43482 6.57172 2.20001 6.87422 2.20001H15.1242Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"22.93\" strokeLinejoin=\"round\"/>\n <path d=\"M15.0144 3.24426V9.76684C15.0144 11.9191 13.1583 13.6804 10.8894 13.6804C8.62047 13.6804 6.7644 11.9195 6.7644 9.76684V7.16894V3.24426\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} />\n <path d=\"M15.0144 3.24426V9.76684C15.0144 11.9191 13.1583 13.6804 10.8894 13.6804C8.62047 13.6804 6.7644 11.9195 6.7644 9.76684V7.16894V3.24426\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"22.93\" strokeLinejoin=\"round\"/>\n <g clipPath=\"url(#clip0_2740_81546)\">\n <path d=\"M11.8256 13.6538C11.8855 13.6538 11.9368 13.7143 11.9283 13.7749L11.6973 15.789C11.6374 16.2212 11.6973 17.0684 12.4844 16.9992C13.2458 16.9301 14.0928 16.956 14.4265 17.6908C14.6147 18.0971 14.9313 18.4861 15.3761 18.4861H15.6328C15.9323 18.4861 16.1804 18.7367 16.1804 19.0393C16.1804 19.3419 15.9323 19.5925 15.6328 19.5925H12.3988H10.9101H6.35859C6.05915 19.5925 5.81104 19.3419 5.81104 19.0393C5.81104 18.7367 6.05915 18.4861 6.35859 18.4861H6.61526C7.06015 18.4861 7.38526 18.0971 7.56492 17.6908C7.89859 16.9646 8.74559 16.9387 9.50704 16.9992C10.2856 17.0684 10.354 16.2212 10.2941 15.789L10.0631 13.7835C10.0631 13.723 10.1059 13.6625 10.1658 13.6625H11.8256V13.6538Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\"/>\n <path d=\"M9.44727 16.9905H12.4845\" stroke=\"currentColor\" strokeWidth=\"0.55\"/>\n </g>\n <path d=\"M15.125 4.28653H18.7V4.80834C18.7 5.09533 18.4526 5.33014 18.1501 5.33014V7.67827C18.1501 8.82624 17.16 9.7655 15.95 9.7655H15.125M6.87505 4.28653H3.30005V4.80834C3.30005 5.09533 3.54755 5.33014 3.85005 5.33014V7.67827C3.85005 8.82624 4.84005 9.7655 6.05005 9.7655H6.87505\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"22.93\" strokeLinejoin=\"round\"/>\n <path d=\"M11 5.28745C11 6.30625 11.6903 7.13982 12.534 7.13982C11.6903 7.13982 11 7.97338 11 8.99219C11 7.97338 10.3098 7.13982 9.46606 7.13982C10.3098 7.13982 11 6.30625 11 5.28745Z\"\n fill=\"currentColor\"/>\n <defs>\n <clipPath id=\"clip0_2740_81546\">\n <rect width=\"10.8057\" height=\"6.36228\" fill=\"white\" transform=\"translate(5.59717 13.4377)\"/>\n </clipPath>\n </defs>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class RouletteIcon extends React.Component<ILiveCasinoNavbarIconProps> {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M11 19.2844C15.5753 19.2844 19.2843 15.5754 19.2843 11.0001C19.2843 6.42474 15.5753 2.7157 11 2.7157C6.42462 2.7157 2.71558 6.42474 2.71558 11.0001C2.71558 15.5754 6.42462 19.2844 11 19.2844Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M10.9997 14.8663C13.1349 14.8663 14.8659 13.1353 14.8659 11.0001C14.8659 8.86488 13.1349 7.13394 10.9997 7.13394C8.86448 7.13394 7.13354 8.86488 7.13354 11.0001C7.13354 13.1353 8.86448 14.8663 10.9997 14.8663Z\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M11.0001 17.0751C14.3553 17.0751 17.0752 14.3552 17.0752 11.0001C17.0752 7.64487 14.3553 4.92496 11.0001 4.92496C7.64496 4.92496 4.92505 7.64487 4.92505 11.0001C4.92505 14.3552 7.64496 17.0751 11.0001 17.0751Z\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M11 12.1044C11.61 12.1044 12.1044 11.61 12.1044 11C12.1044 10.39 11.61 9.89551 11 9.89551C10.39 9.89551 9.89551 10.39 9.89551 11C9.89551 11.61 10.39 12.1044 11 12.1044Z\"\n fill=\"currentColor\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M11.781 10.2191L12.3671 9.63339\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M9.63306 12.3672L10.2188 11.7814\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11.781 11.7814L12.3671 12.3672\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M9.63306 9.63339L10.2188 10.2191\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M12.0007 7.26602L12.5724 5.13202\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M9.42773 16.8684L9.99973 14.7344\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M14.7346 12.0007L16.8683 12.5724\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M5.13184 9.42767L7.26584 9.99967\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M13.7334 8.26648L15.2957 6.70413\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M6.7041 15.2963L8.26645 13.7339\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M13.7334 13.7339L15.2957 15.2963\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M6.7041 6.70413L8.26645 8.26648\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M14.7346 9.99967L16.8683 9.42767\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M5.13184 12.5724L7.26584 12.0007\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M12.0007 14.7344L12.5724 16.8684\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M9.42773 5.13202L9.99973 7.26602\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class BlackjackIcon extends React.Component<ILiveCasinoNavbarIconProps> {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M18.7 19.8H8.18884C7.58133 19.8 7.08884 19.3075 7.08884 18.7V14.4222L2.9436 9.86247C2.5335 9.41136 2.56851 8.71275 3.02167 8.30491L7.08884 4.64446V3.30001C7.08884 2.6925 7.58133 2.20001 8.18884 2.20001H18.7C19.3075 2.20001 19.8 2.6925 19.8 3.30001V18.7C19.8 19.3075 19.3075 19.8 18.7 19.8Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity}\n />\n <path d=\"M7.08884 4.64446V3.30001C7.08884 2.6925 7.58133 2.20001 8.18884 2.20001H18.7C19.3075 2.20001 19.8 2.6925 19.8 3.30001V18.7C19.8 19.3075 19.3075 19.8 18.7 19.8H8.18884C7.58133 19.8 7.08884 19.3075 7.08884 18.7V14.4222M7.08884 4.64446L3.02167 8.30491C2.56851 8.71275 2.5335 9.41136 2.9436 9.86247L7.08884 14.4222M7.08884 4.64446V14.4222\"\n stroke=\"currentColor\" strokeWidth=\"0.55\"\n />\n <path d=\"M18.9442 16.2804L18.0957 18.5698C18.0783 18.6135 18.0184 18.6135 18.001 18.5698L17.1602 16.2801\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M18.6794 16.8508H17.4202\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M8.35987 5.4023L9.197 3.11286C9.21415 3.06919 9.27322 3.06919 9.29037 3.11286L10.1199 5.40259\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M8.62058 4.83197L9.86279 4.83197\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M12.6857 14.5485C12.9225 14.9006 13.4685 14.9075 13.6914 14.5465C13.9944 14.0555 14.3156 13.5769 14.6542 13.1118C15.0418 12.5687 15.3735 12.1189 15.6493 11.7623C15.9931 11.3178 16.0032 10.6787 15.6603 10.2335C15.3662 9.85171 15.0316 9.39848 14.6567 8.8752C14.3204 8.41173 13.9999 7.93597 13.696 7.44885C13.4678 7.08305 12.921 7.08829 12.6966 7.45645C12.4355 7.88492 12.1586 8.30279 11.8666 8.70911C11.4171 9.33626 11.0199 9.87257 10.675 10.318C10.3579 10.7276 10.3472 11.3026 10.6646 11.712C11.0321 12.1861 11.2572 12.4787 11.3398 12.5898C11.8741 13.3332 12.3253 13.987 12.6857 14.5485Z\"\n fill=\"currentColor\"\n />\n <path d=\"M4.40726 8.58679L5.04108 9.2206C5.25581 9.43533 5.25588 9.78345 5.04123 9.99827L4.88132 10.1583\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\"\n />\n <path d=\"M3.77148 8.85657L4.20059 8.41661L4.6297 7.97665\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" />\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class EliteLoungeIcon extends React.Component<ILiveCasinoNavbarIconProps> {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M11.3499 20.8998L20.6847 9.89891L18.2507 5.7005H4.44956L2.01611 9.89891L11.352 20.8998\" fill=\"currentColor\" fillOpacity={backdropOpacity}/>\n <path d=\"M11.3499 20.8998L20.6847 9.89891L18.2507 5.7005H4.44956L2.01611 9.89891L11.352 20.8998\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n <path d=\"M2.20361 9.89874H7.30835\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n <path d=\"M8.00439 9.89874L20.4989 9.89874\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n <path d=\"M7.25977 9.89874L11.3385 20.754\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n <path d=\"M7.2406 9.84447L4.73633 6.28058\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n <path d=\"M10.6704 6.16L7.31934 9.81846\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n <path d=\"M15.4421 9.89874L11.3633 20.754\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n <path d=\"M15.4604 9.84509L18.0528 6.16\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n <path d=\"M11.9688 6.30588L15.3764 9.96433\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n <path d=\"M11.3501 3.35468V1.82773\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n <path d=\"M15.9355 3.66005L16.9278 2.328\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n <path d=\"M6.76467 3.66005L5.77246 2.328\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class PokerIcon extends React.Component<ILiveCasinoNavbarIconProps> {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M12.5853 14.1712C12.5853 14.1712 10.9997 12.2094 10.9997 11.3482C10.9997 12.2094 9.41406 14.1712 9.41406 14.1712H12.585H12.5853Z\"\n fill=\"currentColor\"\n />\n <path d=\"M10.9998 11.4951C10.9998 11.4951 11.2093 12.8177 12.4695 12.8177C13.2169 12.8177 13.7071 12.4081 13.7071 11.3869C13.7071 10.0017 11.0001 7.79044 11.0001 7.79044C11.0001 7.79044 8.29321 10.0017 8.29321 11.3869C8.29321 12.4081 8.78309 12.8177 9.5308 12.8177C10.791 12.8177 11.0004 11.4951 11.0004 11.4951\"\n fill=\"currentColor\"\n />\n <path d=\"M1.87354 10.9999C1.87354 5.95965 5.95959 1.8736 10.9999 1.8736C16.0401 1.8736 20.1265 5.95965 20.1265 11.0002C20.1265 16.0408 16.0404 20.1268 10.9999 20.1268C5.9593 20.1268 1.87354 16.0405 1.87354 10.9999Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"13.33\"\n />\n <path d=\"M5.16064 10.9999C5.16064 7.77501 7.77504 5.16061 11 5.16061C14.2249 5.16061 16.8393 7.77501 16.8393 10.9999C16.8393 14.2249 14.2249 16.8393 11 16.8393C7.77504 16.8393 5.16064 14.2249 5.16064 10.9999Z\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"13.33\"\n />\n <path d=\"M10.9998 16.8782V20.1266\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"13.33\"/>\n <path d=\"M10.9998 1.87363V5.16062\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"13.33\"/>\n <path d=\"M16.8779 10.9999H20.1264\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"13.33\"/>\n <path d=\"M1.87354 10.9999H5.16053\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"13.33\"/>\n <path d=\"M15.1565 15.1565L17.4536 17.4536\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"13.33\"/>\n <path d=\"M4.54639 4.54657L6.87075 6.87093\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"13.33\"/>\n <path d=\"M6.84348 15.1565L4.54639 17.4536\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"13.33\"/>\n <path d=\"M17.4533 4.54657L15.1289 6.87093\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"13.33\"/>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class BaccaratIcon extends React.Component<ILiveCasinoNavbarIconProps> {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M3.63693 4.39999H18.3633C19.1568 4.39999 19.8 5.02455 19.8 5.79501V10.0884C19.8 14.8056 15.8253 18.717 10.9674 18.6999C6.12239 18.6829 2.19995 14.8636 2.19995 10.1548V5.79501C2.19995 5.02455 2.84314 4.39999 3.63657 4.39999H3.63693Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M6.20517 10.1548H3.63672C3.63672 14.0974 6.93958 17.305 11.0001 17.305C13.0302 17.305 14.871 16.5032 16.2043 15.2083C17.5375 13.9133 18.3635 12.1261 18.3635 10.1548H15.7954\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M11.0005 17.3049V14.8112\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M16.207 15.2107L14.3909 13.4472\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M5.79443 15.2107C5.98653 15.0242 7.41707 13.6351 7.6106 13.4472\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M6.20581 10.1548C6.20581 12.7267 8.35287 14.8112 11.0007 14.8112C12.3247 14.8112 13.5238 14.2902 14.3916 13.4475C15.2594 12.6048 15.796 11.4408 15.796 10.1548\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M14.0535 9.98013H7.94751V11.3751H14.0535V9.98013Z\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M16.5676 4.39996V7.53909C16.5676 8.11711 16.0851 8.58536 15.4902 8.58536H6.15144C5.55619 8.58536 5.07397 8.11676 5.07397 7.53909V4.39996\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M7.22856 7.18984C7.62527 7.18984 7.94687 6.87756 7.94687 6.49234C7.94687 6.10711 7.62527 5.79483 7.22856 5.79483C6.83185 5.79483 6.51025 6.10711 6.51025 6.49234C6.51025 6.87756 6.83185 7.18984 7.22856 7.18984Z\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M7.94751 6.49234C7.94751 6.10711 8.2691 5.79483 8.66582 5.79483C9.06253 5.79483 9.38413 6.10711 9.38413 6.49234C9.38413 6.87756 9.06253 7.18984 8.66582 7.18984C8.2691 7.18984 7.94751 6.87756 7.94751 6.49234Z\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M10.1026 7.18984C10.4993 7.18984 10.8209 6.87756 10.8209 6.49234C10.8209 6.10711 10.4993 5.79483 10.1026 5.79483C9.70587 5.79483 9.38428 6.10711 9.38428 6.49234C9.38428 6.87756 9.70587 7.18984 10.1026 7.18984Z\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M11.5389 7.18984C11.9356 7.18984 12.2572 6.87756 12.2572 6.49234C12.2572 6.10711 11.9356 5.79483 11.5389 5.79483C11.1422 5.79483 10.8206 6.10711 10.8206 6.49234C10.8206 6.87756 11.1422 7.18984 11.5389 7.18984Z\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M12.2573 6.49234C12.2573 6.10711 12.5789 5.79483 12.9756 5.79483C13.3723 5.79483 13.6939 6.10711 13.6939 6.49234C13.6939 6.87756 13.3723 7.18984 12.9756 7.18984C12.5789 7.18984 12.2573 6.87756 12.2573 6.49234Z\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M14.4129 7.18984C14.8096 7.18984 15.1312 6.87756 15.1312 6.49234C15.1312 6.10711 14.8096 5.79483 14.4129 5.79483C14.0162 5.79483 13.6946 6.10711 13.6946 6.49234C13.6946 6.87756 14.0162 7.18984 14.4129 7.18984Z\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class GameShowsIcon extends React.Component<ILiveCasinoNavbarIconProps> {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M3.71541 18.2861C3.25469 17.8254 3.25469 17.0785 3.71541 16.6178L5.10555 15.2276L6.77388 16.896L5.38374 18.2861C4.92302 18.7468 4.17613 18.7468 3.71567 18.2861H3.71541Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M2.71631 19.285L3.71535 18.2859\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M15.2073 10.4098C16.2669 10.4722 17.3474 10.0986 18.1572 9.2891C19.6608 7.78552 19.6608 5.34761 18.1572 3.84403C16.6536 2.34044 14.2157 2.34044 12.7121 3.84403C11.9026 4.65383 11.529 5.73433 11.5914 6.79396\"\n fill=\"currentColor\" fillOpacity={backdropOpacity}\n />\n <path d=\"M15.2073 10.4098C16.2669 10.4722 17.3474 10.0986 18.1572 9.2891C19.6608 7.78552 19.6608 5.34761 18.1572 3.84403C16.6536 2.34044 14.2157 2.34044 12.7121 3.84403C11.9026 4.65383 11.529 5.73433 11.5914 6.79396\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M12.4675 3.60257L18.3983 9.53337\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M5.1116 14.3355L11.5895 6.79205L15.209 10.4118L7.66553 16.8899C7.39276 17.1243 6.98567 17.1088 6.73146 16.8546L5.14692 15.2701C4.89272 15.0159 4.87725 14.6088 5.1116 14.336V14.3355Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M10.9338 11.067L10.1343 11.8665\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M16.7948 13.1677C16.7644 13.1575 16.74 13.1345 16.728 13.1048L16.3423 12.1555C16.3039 12.0609 16.1686 12.0651 16.1361 12.1619L15.8109 13.1312C15.8006 13.1617 15.7775 13.1862 15.7476 13.1982L14.7981 13.58C14.7031 13.6182 14.7072 13.754 14.8043 13.7864L15.7741 14.1103C15.8048 14.1206 15.8294 14.1438 15.8414 14.1739L16.2195 15.122C16.2574 15.2171 16.3933 15.2133 16.4259 15.1162L16.7503 14.1496C16.7605 14.1191 16.7835 14.0946 16.8133 14.0826L17.7649 13.6979C17.8596 13.6596 17.8555 13.5242 17.7587 13.4917L16.7948 13.1677Z\"\n fill=\"currentColor\"\n />\n <path d=\"M6.23452 8.76757C6.20413 8.75736 6.17971 8.7344 6.16765 8.7047L5.78203 7.75535C5.74362 7.66079 5.60831 7.66499 5.57584 7.76176L5.25059 8.73105C5.24034 8.76159 5.21723 8.7861 5.18734 8.79812L4.2378 9.17993C4.14284 9.21811 4.14692 9.35391 4.24399 9.38632L5.21378 9.7102C5.24449 9.72046 5.26912 9.74372 5.28111 9.77379L5.65916 10.7218C5.6971 10.817 5.83304 10.8132 5.86562 10.7161L6.18997 9.74945C6.2002 9.71899 6.22324 9.69451 6.25303 9.68247L7.20456 9.29779C7.29925 9.25951 7.29519 9.12408 7.19838 9.09154L6.23452 8.76757Z\"\n fill=\"currentColor\"\n />\n <path d=\"M8.64107 5.49179C8.61068 5.48158 8.58626 5.45862 8.5742 5.42892L8.44677 5.11519C8.40835 5.02062 8.27304 5.02482 8.24057 5.12159L8.13325 5.44142C8.123 5.47196 8.09988 5.49647 8.07 5.50849L7.75757 5.63412C7.66262 5.6723 7.66669 5.80809 7.76377 5.84051L8.08256 5.94697C8.11327 5.95723 8.1379 5.98049 8.14989 6.01057L8.27392 6.32161C8.31186 6.41675 8.4478 6.41296 8.48039 6.31586L8.58681 5.99869C8.59703 5.96822 8.62007 5.94375 8.64987 5.9317L8.96428 5.8046C9.05897 5.76632 9.05491 5.63089 8.95809 5.59835L8.64107 5.49179Z\"\n fill=\"currentColor\"\n />\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class NewGamesIcon extends React.Component<ILiveCasinoNavbarIconProps> {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M10.9982 2.20026C11.7607 2.20026 12.3691 3.28324 13.0749 3.47388C13.7766 3.66857 14.8271 3.03987 15.4437 3.40087C16.0561 3.76186 16.0196 4.9787 16.5185 5.48166C17.0174 5.98056 18.2383 5.94 18.5993 6.55653C18.9603 7.169 18.3316 8.21954 18.5263 8.92125C18.717 9.62296 19.7999 10.2314 19.7999 10.998C19.7999 11.7646 18.717 12.3689 18.5263 13.0747C18.3316 13.7764 18.9603 14.827 18.5993 15.4435C18.2383 16.056 17.0215 16.0195 16.5185 16.5184C16.0196 17.0173 16.0561 18.2382 15.4437 18.5991C14.8312 18.9601 13.7807 18.3314 13.0749 18.5261C12.3732 18.7168 11.7648 19.7998 10.9982 19.7998C10.2316 19.7998 9.62719 18.7168 8.92143 18.5261C8.21972 18.3314 7.16919 18.9601 6.55671 18.5991C5.94018 18.2382 5.98074 17.0213 5.48184 16.5184C4.98294 16.0195 3.76205 16.056 3.40105 15.4435C3.04006 14.831 3.66875 13.7805 3.47406 13.0747C3.28342 12.373 2.20044 11.7646 2.20044 10.998C2.20044 10.2314 3.28342 9.62701 3.47406 8.92125C3.66875 8.21954 3.04006 7.169 3.40105 6.55653C3.76205 5.94 4.97888 5.98056 5.48184 5.48166C5.98074 4.98275 5.94018 3.76186 6.55671 3.40087C7.16919 3.03987 8.21972 3.66857 8.92143 3.47388C9.62314 3.28324 10.2316 2.20026 10.9982 2.20026Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinecap=\"round\" strokeLinejoin=\"round\"\n />\n <path d=\"M11.3431 6.64905L12.4598 9.01985C12.5171 9.13979 12.6242 9.21975 12.7466 9.23974L15.2475 9.61954C15.5611 9.66752 15.6873 10.0713 15.4616 10.3032L13.6529 12.1463C13.5611 12.2382 13.5228 12.3702 13.542 12.5021L13.9703 15.1048C14.0238 15.4326 13.6949 15.6805 13.4158 15.5286L11.1787 14.2972C11.0678 14.2372 10.934 14.2372 10.8231 14.2972L8.586 15.5286C8.30302 15.6845 7.97798 15.4326 8.03151 15.1048L8.45981 12.5021C8.48275 12.3702 8.44069 12.2382 8.34891 12.1463L6.54013 10.3032C6.31452 10.0713 6.43689 9.66752 6.75428 9.61954L9.25521 9.23974C9.3814 9.21975 9.48848 9.13979 9.54201 9.01985L10.6586 6.64905C10.8001 6.3492 11.2055 6.3492 11.347 6.64905H11.3431Z\"\n fill=\"currentColor\"\n />\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class LinkToOfferIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 300 300\">\n <g>\n <path fill=\"currentColor\" d=\"M254.15,121H44.77c-8.26,0-14.99,6.8-14.99,15.16v18.24c0,8.26,6.72,14.99,14.99,14.99h4.85v46.83c0,0,0,0,0,0\n\t\tv44.81c0,8.36,6.72,15.16,14.99,15.16h169.7c8.26,0,14.99-6.8,14.99-15.16v-48.71c0,0,0,0,0,0V169.4h4.85\n\t\tc8.26,0,14.99-6.72,14.99-14.99v-18.24c0,0,0,0,0,0c0,0,0,0,0,0C269.13,127.8,262.41,121,254.15,121z M222.97,157.49L222.97,157.49\n\t\th-52.33v-24.59h83.5c1.7,0,3.08,1.46,3.08,3.26v18.24c0,1.76-1.33,3.08-3.08,3.08H222.97z M64.61,264.31\n\t\tc-1.7,0-3.08-1.46-3.08-3.26V218.7l49.3-49.3h17.45v33.39l-61.52,61.52H64.61z M44.77,157.49c-1.76,0-3.08-1.33-3.08-3.08v-18.24\n\t\tc0-1.8,1.38-3.26,3.08-3.26h83.5v24.59H44.77z M128.27,219.62v44.69H83.58L128.27,219.62z M140.18,205.25\n\t\tC140.18,205.25,140.18,205.25,140.18,205.25v-72.34h18.56v88.82c0,0,0,0,0,0v42.58h-18.56V205.25z M170.64,169.4h37.96\n\t\tl-37.96,37.96V169.4z M93.99,169.4l-32.47,32.47V169.4H93.99z M237.39,261.05c0,1.8-1.38,3.26-3.08,3.26h-34.52l37.6-37.6V261.05z\n\t\t M237.39,209.87l-54.44,54.44h-12.31v-40.12l54.79-54.79h11.95V209.87z\"/>\n <path fill=\"currentColor\" d=\"M79.78,65.94c-0.01,0.01-0.01,0.02-0.01,0.02c-0.01,0.01-0.01,0.01-0.02,0.02\n\t\tc-6.94,9.89-5.94,23.44,2.36,32.22c0.03,0.03,0.05,0.05,0.08,0.08c0.03,0.03,0.05,0.06,0.08,0.08\n\t\tc10.64,10.3,25.15,16.14,40.01,16.14c0.48,0,0.95-0.01,1.43-0.02c2.9-0.07,5.19-2.48,5.12-5.38c-0.07-2.85-2.41-5.12-5.25-5.12\n\t\tc-0.04,0-0.09,0-0.13,0c-12.52,0.31-24.81-4.45-33.78-13.08c-4.82-5.16-5.39-13.08-1.34-18.87c3.7-5.14,9.98-7.98,16.39-7.41\n\t\tc9.93,1.34,19.02,6.84,24.96,15.11c5.91,8.23,8.17,18.66,6.21,28.6c-0.56,2.85,1.29,5.61,4.13,6.17c0.34,0.07,0.69,0.1,1.02,0.1\n\t\tc2.46,0,4.65-1.73,5.15-4.24c2.52-12.78-0.39-26.17-7.98-36.75c-7.64-10.64-19.38-17.72-32.22-19.41c-0.03,0-0.07,0-0.1-0.01\n\t\tc-0.03,0-0.07-0.01-0.1-0.01C95.64,53.22,85.67,57.73,79.78,65.94z\"/>\n <path fill=\"currentColor\" d=\"M158.04,114.59c0.34,0,0.68-0.03,1.02-0.1c2.85-0.56,4.7-3.32,4.13-6.17c-1.96-9.94,0.3-20.36,6.21-28.6\n\t\tc5.93-8.27,15.02-13.77,24.95-15.11c6.42-0.56,12.69,2.27,16.4,7.41c4.05,5.79,3.48,13.71-1.34,18.87\n\t\tc-8.96,8.63-21.26,13.4-33.78,13.08c-2.9-0.07-5.31,2.22-5.38,5.12c-0.07,2.9,2.22,5.31,5.12,5.38c0.48,0.01,0.95,0.02,1.43,0.02\n\t\tc14.86,0,29.37-5.84,40.01-16.14c0.03-0.03,0.05-0.06,0.08-0.09c0.03-0.03,0.05-0.05,0.08-0.08c8.31-8.77,9.3-22.32,2.36-32.22\n\t\tc-0.01-0.01-0.01-0.01-0.02-0.02c-0.01-0.01-0.01-0.02-0.02-0.02c-5.89-8.2-15.86-12.71-26.02-11.77c-0.03,0-0.07,0.01-0.1,0.01\n\t\tc-0.03,0-0.07,0-0.1,0.01c-12.84,1.69-24.58,8.77-32.22,19.41c-7.59,10.58-10.5,23.98-7.98,36.75\n\t\tC153.39,112.86,155.59,114.59,158.04,114.59z\"/>\n <path fill=\"currentColor\" d=\"M36.96,53.18c2.19,0.73,4.37,1.13,6.48,1.53c2.25,0.42,4.37,0.81,6.3,1.55c1.06,0.41,2.44,1.14,3.04,2.34\n\t\tc0.71,1.42,1.04,3.17,1.38,5.03c0.23,1.25,0.47,2.54,0.84,3.85c0.21,0.73,0.45,1.46,0.74,2.23l0.03,0.08\n\t\tc0.06,0.18,0.17,0.49,0.27,0.75c0.87,2.35,2.54,2.71,3.48,2.71c0.2,0,0.37-0.02,0.49-0.03c0.08-0.01,0.16-0.03,0.24-0.04\n\t\tc1.02-0.22,2.38-0.92,3.09-3l0.01-0.04c0.17-0.47,0.32-0.98,0.45-1.53c0.08-0.37,0.16-0.74,0.23-1.12\n\t\tc0.08-0.39,0.15-0.77,0.23-1.08c0.2-0.78,0.38-1.59,0.56-2.37c0.71-3.17,1.39-6.15,3.28-7.77c1.63-1.39,3.76-1.91,6.23-2.52\n\t\tc0.86-0.21,1.75-0.43,2.66-0.7c0.18-0.05,0.35-0.1,0.53-0.15c0.54-0.15,1.16-0.32,1.8-0.57c0.72-0.27,1.31-0.62,1.79-0.89\n\t\tc0.15-0.09,0.31-0.18,0.46-0.26c1.15-0.62,1.87-1.83,1.85-3.14c-0.02-1.31-0.77-2.5-1.94-3.08c-1.14-0.57-2.34-0.79-3.3-0.96\n\t\tl-0.37-0.07c-1.05-0.2-2.07-0.34-3.03-0.47l-0.51-0.07c-1.63-0.22-3.17-0.42-4.6-0.82c-1.69-0.47-2.29-0.86-2.49-1.06\n\t\tc-0.23-0.22-0.71-0.79-1.29-2.11c-1.12-2.57-1.67-5.45-2.26-8.5c-0.22-1.17-0.45-2.37-0.72-3.57c-0.35-1.59-1.76-2.73-3.39-2.74\n\t\tc-0.01,0-0.02,0-0.03,0c-1.62,0-3.03,1.11-3.4,2.69c-0.38,1.59-0.85,3.25-1.3,4.85c-0.39,1.39-0.79,2.82-1.15,4.24l-0.1,0.41\n\t\tc-0.33,1.34-0.62,2.5-1.16,3.46c-0.94,1.7-2.52,2.99-4.46,3.64c-1.59,0.53-3.28,0.87-5.08,1.23c-1.92,0.38-3.9,0.78-5.9,1.45\n\t\tc-1.43,0.48-2.39,1.81-2.39,3.32S35.53,52.7,36.96,53.18z M58.52,43.6c0.32-0.58,0.59-1.17,0.81-1.75\n\t\tc0.05,0.11,0.09,0.22,0.14,0.33c0.83,1.9,1.78,3.34,2.9,4.4c1.24,1.17,2.8,1.88,4.22,2.35c-1.04,0.52-2.06,1.16-3.04,1.99\n\t\tc-1.92,1.63-3.12,3.68-3.95,5.81c-0.17-0.43-0.36-0.85-0.57-1.28c-1.27-2.53-3.61-4.51-6.78-5.74c-0.04-0.02-0.08-0.03-0.12-0.05\n\t\tC54.84,48.33,57.07,46.23,58.52,43.6z\"/>\n <path fill=\"currentColor\" d=\"M269.79,89.18c-0.4-0.1-0.79-0.21-1.18-0.32c-1.02-0.28-2.07-0.58-3.26-0.74c-0.48-0.07-0.96-0.12-1.44-0.18\n\t\tc-0.87-0.1-1.7-0.19-2.44-0.35l-0.09-0.02c-1-0.22-2.25-0.49-2.66-0.93c-0.15-0.16-0.36-0.59-0.44-0.75\n\t\tc-0.63-1.27-1.12-2.52-1.44-3.71c-0.19-0.71-0.34-1.47-0.5-2.27c-0.06-0.3-0.12-0.6-0.18-0.91c-0.14-0.67-0.27-1.34-0.4-2.02\n\t\tc-0.1-0.5-0.19-0.99-0.29-1.49c-0.28-1.4-1.47-2.44-2.89-2.53c-1.43-0.09-2.73,0.79-3.18,2.15c-0.27,0.81-0.62,1.89-0.91,3.01\n\t\tc-0.14,0.54-0.25,1.06-0.35,1.56c-0.06,0.31-0.13,0.62-0.2,0.93c-0.21,0.9-0.45,1.88-0.74,3c-0.32,1.24-0.68,2.51-1.31,3.2\n\t\tc-0.76,0.84-1.9,1.27-3.38,1.67c-0.78,0.21-1.6,0.39-2.31,0.54l-0.64,0.14c-0.81,0.17-1.65,0.35-2.5,0.57\n\t\tc-0.51,0.13-0.97,0.26-1.42,0.4c-0.33,0.1-0.66,0.23-0.98,0.36c-0.04,0.02-0.14,0.06-0.27,0.13c-0.06,0.03-0.14,0.07-0.2,0.09\n\t\tc-0.96,0.36-1.7,1.18-1.94,2.2c-0.29,1.21,0.15,2.47,1.13,3.23c0.77,0.6,1.62,0.76,2.02,0.83l0.06,0.01\n\t\tc0.12,0.02,0.25,0.05,0.37,0.07c0.1,0.02,0.19,0.03,0.29,0.05c1.79,0.44,3.62,0.82,5.43,1.16c1.39,0.25,3.3,0.6,4.35,1.42\n\t\tc0.38,0.3,0.71,0.76,0.93,1.3c0.07,0.18,0.15,0.47,0.21,0.73c0.35,1.37,0.68,2.77,0.98,4.16l0.02,0.08c0.06,0.3,0.12,0.6,0.17,0.9\n\t\tc0.08,0.47,0.17,0.96,0.29,1.48c0.2,0.86,0.5,1.59,0.8,2.26l-0.01-0.02c0.07,0.19,0.23,0.6,0.55,1.02c0.58,0.79,1.5,1.26,2.49,1.28\n\t\tc0.02,0,0.03,0,0.04,0c0.97,0,1.88-0.44,2.48-1.2c0.47-0.6,0.67-1.22,0.78-1.56l0.02-0.07c0.1-0.29,0.2-0.59,0.31-0.94\n\t\tc0.53-1.77,0.99-3.58,1.38-5.39c0.3-1.37,0.61-2.69,1.15-3.7c0.38-0.71,1.14-1.44,1.85-1.78c0.74-0.35,1.61-0.65,2.71-0.94\n\t\tc0.83-0.22,1.68-0.41,2.58-0.6l0.51-0.11c1.2-0.26,2.47-0.7,3.87-1.34c1-0.33,1.82-1.15,2.08-2.25\n\t\tC272.5,91.3,271.47,89.6,269.79,89.18z M252.93,97.01c-0.19,0.35-0.36,0.71-0.51,1.07c-0.64-1.35-1.55-2.5-2.67-3.37\n\t\tc-0.72-0.56-1.51-1-2.31-1.34c1.09-0.55,2.15-1.28,3.09-2.32c0.81-0.9,1.38-1.9,1.81-2.93c0.09,0.2,0.19,0.39,0.29,0.59\n\t\tc0.37,0.73,0.8,1.51,1.48,2.24c0.85,0.91,1.86,1.51,2.87,1.92C255.33,93.82,253.84,95.33,252.93,97.01z\"/>\n <path fill=\"currentColor\" d=\"M30.68,97.81c0.12,0.03,0.24,0.06,0.36,0.09c0.11,0.03,0.22,0.05,0.33,0.09c0.62,0.18,1.24,0.34,1.86,0.47\n\t\tc0.65,0.14,1.3,0.27,1.96,0.4c2.22,0.44,4.32,0.85,6.02,1.81c0.08,0.04,0.18,0.16,0.46,0.52c0.08,0.11,0.17,0.22,0.26,0.33\n\t\tc0.06,0.13,0.14,0.44,0.2,0.64c0.48,1.75,0.81,3.19,1.04,4.53c0.25,1.5,0.66,3.46,1.61,5.37c0.54,1.08,1.63,1.74,2.82,1.74\n\t\tc0.11,0,0.21-0.01,0.32-0.02c1.3-0.13,2.39-1.06,2.72-2.33c0.18-0.67,0.38-1.35,0.6-2.06c0.28-0.92,0.56-1.86,0.8-2.85l0.07-0.27\n\t\tc0.4-1.6,0.77-3.12,1.27-4.57c0.34-0.99,0.78-1.67,1.35-2.1c0.94-0.71,2.05-1.23,3.21-1.51c0.31-0.08,0.67-0.14,1.06-0.2\n\t\tc0.37-0.06,0.75-0.12,1.16-0.21c0.91-0.19,1.86-0.46,2.81-0.8c0.42-0.15,0.85-0.31,1.26-0.48c0.26-0.11,0.47-0.22,0.64-0.3\n\t\tc0.06-0.03,0.13-0.07,0.18-0.09c1.07-0.4,1.84-1.35,2.01-2.48c0.17-1.13-0.28-2.27-1.19-2.97c-0.62-0.48-1.26-0.68-1.61-0.78\n\t\tl-0.09-0.03c-0.35-0.12-0.72-0.22-1.1-0.3c-0.61-0.14-1.26-0.24-2.01-0.31c-1.18-0.11-2.36-0.32-3.26-0.49\n\t\tc-0.22-0.04-0.44-0.08-0.66-0.12c-1.01-0.18-2.15-0.39-2.73-0.77c-0.25-0.16-0.48-0.38-0.7-0.65c-0.3-0.37-0.57-0.83-0.84-1.43\n\t\tc-0.2-0.44-0.34-0.96-0.5-1.56l-0.08-0.31c-0.2-0.74-0.4-1.52-0.59-2.39c-0.37-1.66-0.68-3.36-0.98-5.01\n\t\tc-0.26-1.41-1.44-2.47-2.88-2.58c-1.44-0.1-2.76,0.78-3.21,2.15c-0.45,1.36-0.83,2.6-1.15,3.8c-0.2,0.75-0.35,1.48-0.5,2.19\n\t\tc-0.11,0.51-0.21,1-0.32,1.47c-0.32,1.34-0.67,2.62-1.28,3.61c-0.35,0.56-0.93,1.32-1.76,1.73c-0.26,0.13-0.69,0.23-1.15,0.34\n\t\tc-0.27,0.07-0.54,0.13-0.81,0.21c-0.89,0.25-1.8,0.5-2.71,0.72c-0.76,0.18-1.51,0.36-2.27,0.54c-0.69,0.16-1.37,0.35-2.01,0.58\n\t\tc-0.16,0.06-0.31,0.11-0.46,0.16c-0.12,0.04-0.36,0.12-0.55,0.2c-1.01,0.38-1.76,1.26-1.98,2.32c-0.22,1.06,0.13,2.16,0.92,2.91\n\t\tc0.8,0.76,1.7,0.95,2.08,1.02L30.68,97.81z M46.73,90.39c0.28-0.46,0.52-0.92,0.73-1.38c0.4,0.78,0.84,1.47,1.33,2.08\n\t\tc0.64,0.79,1.37,1.46,2.18,1.99c0.4,0.26,0.82,0.48,1.25,0.67c-0.44,0.26-0.86,0.55-1.27,0.85c-1.41,1.06-2.5,2.53-3.26,4.38\n\t\tc-0.2-0.45-0.46-0.91-0.82-1.35c-0.08-0.1-0.16-0.2-0.24-0.3c-0.48-0.61-1.14-1.45-2.31-2.12c-0.56-0.32-1.14-0.6-1.72-0.84\n\t\tC44.23,93.5,45.65,92.13,46.73,90.39z\"/>\n </g>\n </SvgIcon>\n );\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class LinkToOfferCloseIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 18 18\">\n <g>\n <path fill=\"currentColor\" d=\"M10.62,8.5l5.94-5.94A1.5,1.5,0,1,0,14.44.44L8.5,6.38,2.56.44A1.5,1.5,0,0,0,.44,2.56L6.38,8.5.44,14.44a1.49,1.49,0,0,0,0,2.12,1.5,1.5,0,0,0,2.12,0L8.5,10.62l5.94,5.94a1.5,1.5,0,0,0,2.12,0,1.49,1.49,0,0,0,0-2.12Z\"/>\n </g>\n </SvgIcon>\n );\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface ISourceOfFundsIconProps extends ISvgIconProps {\n\n}\n\nexport class SourceOfFundsIcon extends React.Component<ISourceOfFundsIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 137.67 113\">\n <g>\n <path\n fill=\"currentColor\"\n d=\"M21894.7,16062.013a35.985,35.985,0,1,1,35.988,35.988A36.025,36.025,0,0,1,21894.7,16062.013Zm4.658,0a31.33,31.33,0,1,0,31.33-31.329A31.368,31.368,0,0,0,21899.355,16062.013Zm26.938,20.6a4.4,4.4,0,0,1-3.6-1.858l-11-15.562a4.4,4.4,0,1,1,7.184-5.078l7.232,10.238,16.264-25.3a4.4,4.4,0,1,1,7.4,4.752l-19.791,30.789a4.4,4.4,0,0,1-3.6,2.019Zm-87.326-22.637a8.849,8.849,0,0,1-8.969-8.7v-52.224a8.85,8.85,0,0,1,8.969-8.705h26.9a4.416,4.416,0,0,1,4.482-4.35h17.934a4.421,4.421,0,0,1,4.486,4.35h26.9a8.846,8.846,0,0,1,8.969,8.705v22.371a40.186,40.186,0,0,0-4.482.469v-22.84a4.432,4.432,0,0,0-4.486-4.35h-26.9v4.35a4.421,4.421,0,0,1-4.486,4.35h-17.934a4.416,4.416,0,0,1-4.482-4.35v-4.35h-26.9a4.435,4.435,0,0,0-4.486,4.35v52.224a4.435,4.435,0,0,0,4.486,4.35h51.184a41.928,41.928,0,0,0-.492,4.35Zm31.387-60.923h17.934v-8.705h-17.934Zm11.041,50.823a2.2,2.2,0,0,1-2.039-2.359l.016-2.276c0-2.2-2.508-4.058-5.473-4.058h-20.443c-2.971,0-5.475,1.857-5.475,4.058v2.034a2.241,2.241,0,0,1-4.48,0v-2.034c0-4.637,4.465-8.407,9.955-8.407h20.443c5.49,0,9.955,3.771,9.955,8.407v2.034c0,.209-.01.419-.027.628a2.224,2.224,0,0,1-2.232,1.985C21881.527,16049.891,21881.461,16049.885,21881.395,16049.879Zm9.135-5.132a2.207,2.207,0,0,1,2.244-2.173h1.957a40.556,40.556,0,0,0-2.084,4.339A2.2,2.2,0,0,1,21890.529,16044.747Zm2.244-10.524a2.176,2.176,0,1,1,0-4.35h12.918a41.449,41.449,0,0,0-4.83,4.35Zm-40.756-12.619a11.215,11.215,0,1,1,11.213,10.877A11.053,11.053,0,0,1,21852.018,16021.6Zm4.486,0a6.729,6.729,0,1,0,6.727-6.527A6.635,6.635,0,0,0,21856.5,16021.6Zm36.27-.788a2.176,2.176,0,1,1,0-4.35h17.934a2.176,2.176,0,1,1,0,4.35Z\"\n transform=\"translate(-21829.498 -15985.501)\"\n />\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ArrowsUpDownIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 20 20\" >\n <g fill=\"currentColor\" className=\"arrow-down\" >\n <path d=\"M13.3,17.93a.38.38,0,0,1-.4-.37h0V8.21a.4.4,0,0,1,.79,0v9.34A.4.4,0,0,1,13.3,17.93Z\"/>\n <path d=\"M13.3,17.93a.43.43,0,0,1-.29-.12L10.75,15.5a.37.37,0,0,1,0-.52h0a.4.4,0,0,1,.56,0l2,2,2-2a.4.4,0,0,1,.56,0,.36.36,0,0,1,0,.51l0,0-2.25,2.31A.45.45,0,0,1,13.3,17.93Z\"/>\n </g>\n <g fill=\"currentColor\" className=\"arrow-up\" >\n <path d=\"M6.7,12.16a.38.38,0,0,1-.4-.37h0V2.45a.4.4,0,0,1,.8,0v9.34A.38.38,0,0,1,6.7,12.16Z\"/>\n <path d=\"M9,5.13A.38.38,0,0,1,8.67,5l-2-2-2,2a.42.42,0,0,1-.56,0,.37.37,0,0,1,0-.52h0L6.41,2.2A.41.41,0,0,1,7,2.2L9.25,4.5a.36.36,0,0,1,0,.51l0,0A.39.39,0,0,1,9,5.13Z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class MegaphoneIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 20 20\" >\n <g fill=\"currentColor\">\n <path d=\"M18.47,9.48H16.89a.52.52,0,0,0-.52.53.52.52,0,0,0,.52.53h1.58A.53.53,0,0,0,19,10,.53.53,0,0,0,18.47,9.48Z\"/>\n <path d=\"M16,12.49l1.06,1.06a.53.53,0,0,0,.74,0,.53.53,0,0,0,0-.75h0l-1.05-1.05a.53.53,0,0,0-.75,0A.53.53,0,0,0,16,12.49Z\"/>\n <path d=\"M16.74,8.27l1.05-1a.53.53,0,0,0,0-.75.53.53,0,0,0-.74,0h0L16,7.53a.53.53,0,1,0,.75.75h0Z\"/>\n <path d=\"M5.75,16.87a1.59,1.59,0,0,0,1.58-1.59V12.65h.53A4.74,4.74,0,0,1,11.15,14l.49.49a1.58,1.58,0,0,0,3.15-.24V4.74a1.6,1.6,0,0,0-1.56-1.61A1.58,1.58,0,0,0,11.64,4.5L11.15,5A4.74,4.74,0,0,1,7.86,6.32H4.69A1.58,1.58,0,0,0,3.2,7.38H3.11a2.11,2.11,0,0,0,0,4.22H3.2a1.57,1.57,0,0,0,1,1v2.73A1.59,1.59,0,0,0,5.75,16.87ZM12.68,4.74a.53.53,0,1,1,1.05,0v9.49a.53.53,0,0,1-.53.53h0a.52.52,0,0,1-.52-.53ZM8.38,7.35A5.77,5.77,0,0,0,11.62,6v7a5.71,5.71,0,0,0-3.24-1.36ZM3.11,10.54a1.06,1.06,0,0,1,0-2.11Zm3.17,4.74a.53.53,0,0,1-1.06,0V12.65H6.28ZM4.17,7.9a.53.53,0,0,1,.53-.53H7.33v4.22H4.69a.52.52,0,0,1-.53-.52Z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ChipIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 20 20\" >\n <g fill=\"currentColor\">\n <path d=\"M9.58,2.82v1.4a.36.36,0,0,0,.12.27.35.35,0,0,0,.25.1h.24a5.3,5.3,0,0,1,2.46.67h.18a.38.38,0,0,0,.32-.18l.71-1.18A7.5,7.5,0,0,1,16,6.07c-1.52.87-1.5.92-1.33,1.22A5.4,5.4,0,0,1,15.43,10a.38.38,0,0,0,.37.37h1.38a7.23,7.23,0,0,1-.8,2.91L15.2,12.6H15a.39.39,0,0,0-.32.19,5.48,5.48,0,0,1-2,2,.33.33,0,0,0-.17.23.34.34,0,0,0,0,.28l.69,1.17-.37.18a7.5,7.5,0,0,1-2.52.56V15.86a.38.38,0,0,0-.37-.37,5.49,5.49,0,0,1-2.82-.78.32.32,0,0,0-.19-.05h-.1a.38.38,0,0,0-.23.18L6,16a7.6,7.6,0,0,1-1.65-1.5c-.15-.19-.29-.39-.42-.59l.15-.09.69-.41c.35-.21.61-.36.42-.68A5.54,5.54,0,0,1,4.47,10a.35.35,0,0,0-.1-.26.39.39,0,0,0-.27-.11H2.8a7.19,7.19,0,0,1,.77-2.91A4.76,4.76,0,0,0,5,7.42c.12,0,.16-.08.22-.18A5.52,5.52,0,0,1,7.14,5.32a.37.37,0,0,0,.14-.49L6.64,3.64a7.19,7.19,0,0,1,2.94-.82M10.34,2l-.81,0A8,8,0,0,0,6.29,3l-.68.36L6,4l.47.87A6.21,6.21,0,0,0,4.78,6.53l-.85-.45L3.24,5.7l-.35.7A7.83,7.83,0,0,0,2,9.61v.8H3.73a6.09,6.09,0,0,0,.63,2.36l-.67.4-.14.08-.68.4.42.67c.17.25.32.46.47.65a7.61,7.61,0,0,0,1.83,1.66l.69.46.4-.74.42-.79a6,6,0,0,0,2.46.68V18h.79a7.87,7.87,0,0,0,2.79-.63l.42-.19.73-.37-.42-.7-.5-.84a6.35,6.35,0,0,0,1.78-1.76L16,14l.69.4.37-.71a8.18,8.18,0,0,0,.88-3.21V9.67H16.18a6.33,6.33,0,0,0-.64-2.38c.28-.18.68-.41.86-.51l.71-.41-.45-.67a8,8,0,0,0-2.39-2.4l-.66-.42-.4.67-.52.87a6.22,6.22,0,0,0-2.35-.59Z\"/>\n <path d=\"M10,13.05a3,3,0,1,1,3-3A3,3,0,0,1,10,13.05Zm0-5.32A2.28,2.28,0,1,0,12.28,10h0A2.28,2.28,0,0,0,10,7.73Z\"/>\n <path d=\"M10,18a8,8,0,1,1,8-8A8,8,0,0,1,10,18ZM10,2.78A7.23,7.23,0,1,0,17.22,10v0A7.23,7.23,0,0,0,10,2.78Z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class SettingsIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 20 20\" >\n <g fill=\"currentColor\">\n <path d=\"M10,8.4A1.6,1.6,0,1,1,8.4,10,1.6,1.6,0,0,1,10,8.4h0m0-.8A2.4,2.4,0,1,0,12.4,10h0A2.39,2.39,0,0,0,10,7.6Z\"/>\n <path d=\"M10.48,2.8a.43.43,0,0,1,.38.38V4.49l.59.16a6.18,6.18,0,0,1,1,.39l.52.27.41-.41L14,4.35a.42.42,0,0,1,.3-.12.44.44,0,0,1,.27.09l.79.86a.37.37,0,0,1,.1.28.47.47,0,0,1-.12.31l-.45.45-.45.45.34.54a4.76,4.76,0,0,1,.46,1l.18.56h1.43a.43.43,0,0,1,.38.38v1.23a.43.43,0,0,1-.38.38H15.44l-.16.59a4.75,4.75,0,0,1-.39,1l-.27.52.42.42.55.54a.46.46,0,0,1,0,.6l-.82.82a.42.42,0,0,1-.3.1.41.41,0,0,1-.3-.1l-.46-.45-.45-.45-.54.33a4.29,4.29,0,0,1-1,.47l-.57.18v1.43a.43.43,0,0,1-.38.38H9.52a.43.43,0,0,1-.38-.38V15.51l-.59-.16a4.75,4.75,0,0,1-1-.39L7,14.69l-.41.42L6,15.65a.42.42,0,0,1-.3.12.42.42,0,0,1-.27-.09l-.79-.86a.43.43,0,0,1,0-.58l.46-.46.45-.45-.34-.54a3.79,3.79,0,0,1-.47-1.07l-.17-.58H3.18a.45.45,0,0,1-.38-.39V9.52a.43.43,0,0,1,.38-.38H4.49l.17-.59a4.75,4.75,0,0,1,.39-1L5.31,7,4.9,6.59,4.35,6a.44.44,0,0,1,0-.6l.82-.82a.41.41,0,0,1,.3-.1.48.48,0,0,1,.28.08l.47.51.45.49.56-.35a4,4,0,0,1,1-.46l.56-.18V3.18a.44.44,0,0,1,.39-.38h1.29m0-.8H9.18A1.23,1.23,0,0,0,8,3.18V4a5.42,5.42,0,0,0-1.2.55l-.47-.51a1.28,1.28,0,0,0-1.73,0l-.82.81a1.24,1.24,0,0,0,0,1.73l.55.55a6.33,6.33,0,0,0-.45,1.19h-.7A1.23,1.23,0,0,0,2,9.52v1.23a1.22,1.22,0,0,0,1.18,1.18H4a5.06,5.06,0,0,0,.57,1.28l-.46.46a1.23,1.23,0,0,0,0,1.71l.76.84a1.24,1.24,0,0,0,1.73,0l.55-.55a6.33,6.33,0,0,0,1.19.45v.7A1.22,1.22,0,0,0,9.53,18h1.22a1.23,1.23,0,0,0,1.19-1.18V16a5.53,5.53,0,0,0,1.21-.56l.46.46a1.29,1.29,0,0,0,1.72,0l.82-.82a1.24,1.24,0,0,0,0-1.73l-.55-.55a5.71,5.71,0,0,0,.45-1.19h.77A1.22,1.22,0,0,0,18,10.41V9.18A1.22,1.22,0,0,0,16.82,8H16a5.29,5.29,0,0,0-.55-1.21l.45-.46a1.22,1.22,0,0,0,0-1.71l-.77-.84a1.24,1.24,0,0,0-1.73,0l-.55.55a6.24,6.24,0,0,0-1.18-.45v-.7A1.23,1.23,0,0,0,10.48,2Z\"/>\n </g>\n </SvgIcon>;\n }\n}\n\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class MuteIcon extends React.Component {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g transform=\"translate(-46 -83)\">\n <g transform=\"translate(-1 5)\">\n <g transform=\"translate(-282 -1167)\">\n <g fill=\"currentColor\" transform=\"translate(1.68)\">\n <path d=\"M372.97,1146h-1.65a1.32,1.32,0,0,0-1.32,1.32v3.12a1.32,1.32,0,0,0,1.32,1.32h1.65a.15.15,0,0,0,.15-.15v-5.46a.15.15,0,0,0-.15-.15Zm0,0\" transform=\"translate(-38.68 108.12)\" />\n <path d=\"M476.32,1068h-.72a.72.72,0,0,0-.437.148l-3.1,2.373a.149.149,0,0,0-.059.119v6.719a.15.15,0,0,0,.059.119l3.1,2.373a.72.72,0,0,0,.437.148h.72a.72.72,0,0,0,.72-.72v-10.56a.72.72,0,0,0-.72-.72Zm0,0\" transform=\"translate(-136.6 183)\" />\n </g>\n </g>\n <g transform=\"translate(-1 -0.632)\">\n <line stroke=\"currentColor\" x2=\"0.001\" y2=\"5.656\" transform=\"translate(67.129 88.632) rotate(45)\" />\n <line stroke=\"currentColor\" x1=\"5.656\" y1=\"0.001\" transform=\"translate(63.132 88.632) rotate(45)\" />\n </g>\n </g>\n </g>\n </SvgIcon>\n );\n }\n}\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class UnmuteIcon extends React.Component {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g transform=\"translate(-46 -56)\">\n <g transform=\"translate(-281 -1189)\">\n <g fill=\"currentColor\" transform=\"translate(1.68)\">\n <path d=\"M372.97,1146h-1.65a1.32,1.32,0,0,0-1.32,1.32v3.12a1.32,1.32,0,0,0,1.32,1.32h1.65a.15.15,0,0,0,.15-.15v-5.46a.15.15,0,0,0-.15-.15Zm0,0\" transform=\"translate(-38.68 108.12)\" />\n <path d=\"M476.32,1068h-.72a.72.72,0,0,0-.437.148l-3.1,2.373a.149.149,0,0,0-.059.119v6.719a.15.15,0,0,0,.059.119l3.1,2.373a.72.72,0,0,0,.437.148h.72a.72.72,0,0,0,.72-.72v-10.56a.72.72,0,0,0-.72-.72Zm0,0\" transform=\"translate(-136.6 183)\" />\n </g>\n </g>\n </g>\n </SvgIcon>\n );\n }\n}\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ViewersIcon extends React.Component {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g transform=\"translate(-9.5, -8) scale(1.8)\">\n <path fill=\"currentColor\" d=\"M57.771,119.465a7.477,7.477,0,0,0-6.571,4.38,7.118,7.118,0,0,0,13.141,0A7.477,7.477,0,0,0,57.771,119.465Zm0,7.118a2.738,2.738,0,1,1,2.738-2.738A2.738,2.738,0,0,1,57.771,126.583Z\" transform=\"translate(-46 -112.465)\" />\n <circle fill=\"currentColor\" cx=\"1.643\" cy=\"1.643\" r=\"1.643\" transform=\"translate(10.1 9.738)\" />\n </g>\n </SvgIcon>\n );\n }\n}\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class BrokenLinkIcon extends React.Component {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g transform=\"translate(3.333 4.996) scale(0.5)\">\n <path fill=\"currentColor\" d=\"M23.356,33a.717.717,0,0,1-.483-.317L4.239,4.4a1,1,0,0,1,.133-1.217.633.633,0,0,1,1,.133L23.939,31.6a.983.983,0,0,1-.133,1.217.633.633,0,0,1-.45.183Z\" transform=\"translate(-0.606 -2.998)\" />\n <path fill=\"currentColor\" d=\"M17.483,18.333A4.267,4.267,0,0,1,13.85,20.95H7.517C5.15,20.95,3.2,18.433,3.2,15.383v-.767c0-3.067,1.95-5.567,4.317-5.583H11.65L10.683,7.5H7.517C4.483,7.533,2,10.733,2,14.65v.767c0,3.9,2.483,7.1,5.517,7.117H13.85a5.25,5.25,0,0,0,4.4-2.933Z\" transform=\"translate(-2 0.004)\" />\n <path fill=\"currentColor\" d=\"M28.5,15.67a7.8,7.8,0,0,0-1.75-5,5.6,5.6,0,0,0-4.217-2.1h-6.85A5.283,5.283,0,0,0,12.25,9.953l.8,1.217a4.1,4.1,0,0,1,2.633-1.05h6.85A5.217,5.217,0,0,1,27.2,15.687v.767a5.183,5.183,0,0,1-4.667,5.567h-2.5l1,1.55h1.5c3.333,0,5.95-3.2,5.967-7.117Z\" transform=\"translate(4.833 0.717)\" />\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class TimeReminderIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 56 56\">\n <g>\n <rect fill={\"none\"} width=\"56\" height=\"56\"/>\n <path fill={\"currentColor\"}\n d=\"M25.333,48.667A23.333,23.333,0,1,1,48.667,25.333,23.333,23.333,0,0,1,25.333,48.667Zm0-44.333a21,21,0,1,0,21,21A21,21,0,0,0,25.333,4.333Z\"\n transform=\"translate(2.667 2.667)\"/>\n <path fill={\"currentColor\"}\n d=\"M20.163,19.289H19.7L6.63,12.522a1.043,1.043,0,1,1,.933-1.867l12.6,6.3,11.9-7.7a1.4,1.4,0,0,1,1.633.467c.233.467.233,1.167-.233,1.4l-12.6,7.933Z\"\n transform=\"translate(8.07 12.211)\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class TripleEightExclusiveIcon extends React.Component<ILiveCasinoNavbarIconProps> {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M4.18903 6.39668C3.78241 6.38976 3.37869 6.46516 3.00295 6.61819C2.62721 6.77122 2.28748 6.99861 2.00487 7.28623C1.71314 7.56473 1.48241 7.89897 1.32688 8.26841C1.17134 8.63785 1.09428 9.03468 1.10044 9.43449C1.09442 9.82817 1.16918 10.219 1.32025 10.5836C1.47132 10.9482 1.69559 11.2791 1.97965 11.5565C1.6956 11.8339 1.47133 12.1647 1.32026 12.5293C1.16919 12.8938 1.09443 13.2846 1.10044 13.6782C1.09433 14.078 1.17142 14.4747 1.32695 14.8441C1.48248 15.2135 1.71318 15.5477 2.00487 15.8261C2.28794 16.1131 2.6277 16.3401 3.00325 16.4931C3.3788 16.6461 3.78221 16.722 4.18867 16.716C4.59514 16.722 4.99855 16.6462 5.37411 16.4931C5.74966 16.3401 6.08942 16.1131 6.37248 15.8261C6.92391 15.3038 7.24689 14.5909 7.27295 13.8384C7.27691 13.7824 7.27691 13.7321 7.27691 13.6782V13.5999C7.26908 12.8314 6.95311 12.0969 6.39769 11.5562C6.93401 11.0365 7.24727 10.3343 7.27295 9.59427C7.27691 9.53829 7.27691 9.48799 7.27691 9.43414V9.3562C7.27297 8.96943 7.19096 8.58729 7.03564 8.23194C6.88032 7.8766 6.65478 7.55515 6.37212 7.28623C6.08964 6.99872 5.75009 6.7714 5.37454 6.61837C4.999 6.46534 4.59547 6.38988 4.18903 6.39668ZM3.32459 8.57434C3.43571 8.4592 3.56991 8.36798 3.7187 8.30646C3.86749 8.24493 4.02765 8.21443 4.18903 8.21689C4.35469 8.21448 4.51915 8.24488 4.67261 8.30629C4.82607 8.3677 4.9654 8.45886 5.08229 8.57434C5.19932 8.68493 5.29197 8.81801 5.35449 8.96532C5.41701 9.11262 5.44807 9.27099 5.44572 9.4306C5.44846 9.59083 5.41761 9.74991 5.35508 9.8979C5.29255 10.0459 5.19969 10.1796 5.08229 10.2908C4.96458 10.4048 4.82498 10.4946 4.67162 10.555C4.51826 10.6154 4.35421 10.6451 4.18903 10.6425C4.02814 10.6452 3.86841 10.6153 3.71972 10.5548C3.57102 10.4943 3.43654 10.4044 3.32459 10.2908C3.20745 10.1795 3.11486 10.0457 3.05258 9.89773C2.9903 9.74974 2.95967 9.59073 2.9626 9.4306C2.96026 9.27099 2.99131 9.11262 3.05383 8.96532C3.11635 8.81801 3.209 8.68493 3.32603 8.57434H3.32459ZM5.08085 14.5345C4.96344 14.6493 4.82402 14.74 4.67068 14.8013C4.51733 14.8627 4.35313 14.8935 4.18759 14.8919C3.94389 14.8907 3.70603 14.8185 3.504 14.6844C3.30196 14.5504 3.14481 14.3605 3.05235 14.1387C2.95989 13.9169 2.93627 13.6732 2.98446 13.4382C3.03265 13.2033 3.1505 12.9876 3.32315 12.8184C3.43708 12.7032 3.57372 12.6121 3.72472 12.5506C3.87572 12.4891 4.03788 12.4586 4.20128 12.461C4.36468 12.4586 4.52684 12.4891 4.67784 12.5506C4.82884 12.6121 4.96548 12.7032 5.07941 12.8184C5.1945 12.9308 5.28584 13.0645 5.34817 13.2117C5.41051 13.359 5.4426 13.5169 5.4426 13.6765C5.4426 13.836 5.41051 13.9939 5.34817 14.1412C5.28584 14.2884 5.1945 14.4221 5.07941 14.5345H5.08085Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinejoin=\"round\"\n />\n <path d=\"M11.0006 6.39674C10.5939 6.38982 10.1902 6.46522 9.81448 6.61825C9.43874 6.77128 9.099 6.99867 8.81639 7.2863C8.52466 7.56479 8.29394 7.89903 8.1384 8.26847C7.98287 8.63791 7.90581 9.03474 7.91196 9.43456C7.90595 9.82823 7.98071 10.2191 8.13177 10.5837C8.28284 10.9483 8.50711 11.2792 8.79118 11.5566C8.50712 11.8339 8.28285 12.1648 8.13179 12.5293C7.98072 12.8939 7.90595 13.2847 7.91196 13.6783C7.90586 14.078 7.98294 14.4748 8.13847 14.8442C8.29401 15.2136 8.52471 15.5477 8.81639 15.8262C9.09947 16.1131 9.43922 16.3401 9.81477 16.4932C10.1903 16.6462 10.5937 16.7221 11.0002 16.7161C11.4067 16.7221 11.8101 16.6462 12.1856 16.4932C12.5612 16.3401 12.9009 16.1132 13.184 15.8262C13.7354 15.3039 14.0584 14.5909 14.0845 13.8384C14.0884 13.7824 14.0884 13.7321 14.0884 13.6783V13.6C14.0806 12.8314 13.7646 12.0969 13.2092 11.5562C13.7455 11.0366 14.0588 10.3344 14.0845 9.59433C14.0884 9.53835 14.0884 9.48805 14.0884 9.4342V9.35626C14.0845 8.96949 14.0025 8.58735 13.8472 8.23201C13.6918 7.87666 13.4663 7.55521 13.1836 7.2863C12.9012 6.99878 12.5616 6.77146 12.1861 6.61843C11.8105 6.46541 11.407 6.38995 11.0006 6.39674ZM10.1361 8.5744C10.2472 8.45926 10.3814 8.36804 10.5302 8.30652C10.679 8.24499 10.8392 8.21449 11.0006 8.21695C11.1662 8.21454 11.3307 8.24494 11.4841 8.30635C11.6376 8.36776 11.7769 8.45892 11.8938 8.5744C12.0108 8.68499 12.1035 8.81807 12.166 8.96538C12.2285 9.11268 12.2596 9.27105 12.2572 9.43066C12.26 9.5909 12.2291 9.74997 12.1666 9.89796C12.1041 10.0459 12.0112 10.1797 11.8938 10.2908C11.7761 10.4048 11.6365 10.4946 11.4831 10.555C11.3298 10.6154 11.1657 10.6452 11.0006 10.6426C10.8397 10.6452 10.6799 10.6154 10.5312 10.5549C10.3825 10.4944 10.2481 10.4045 10.1361 10.2908C10.019 10.1796 9.92638 10.0458 9.8641 9.89779C9.80183 9.7498 9.7712 9.59079 9.77412 9.43066C9.77178 9.27105 9.80283 9.11268 9.86535 8.96538C9.92787 8.81807 10.0205 8.68499 10.1376 8.5744H10.1361ZM11.8924 14.5345C11.775 14.6493 11.6355 14.74 11.4822 14.8014C11.3289 14.8628 11.1647 14.8936 10.9991 14.892C10.7554 14.8907 10.5176 14.8185 10.3155 14.6845C10.1135 14.5504 9.95633 14.3606 9.86387 14.1388C9.77142 13.917 9.74779 13.6733 9.79598 13.4383C9.84418 13.2033 9.96203 12.9877 10.1347 12.8185C10.2486 12.7033 10.3852 12.6121 10.5362 12.5507C10.6872 12.4892 10.8494 12.4587 11.0128 12.461C11.1762 12.4587 11.3384 12.4892 11.4894 12.5507C11.6404 12.6121 11.777 12.7033 11.8909 12.8185C12.006 12.9309 12.0974 13.0645 12.1597 13.2118C12.222 13.3591 12.2541 13.517 12.2541 13.6765C12.2541 13.836 12.222 13.994 12.1597 14.1412C12.0974 14.2885 12.006 14.4222 11.8909 14.5345H11.8924Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinejoin=\"round\"\n />\n <path d=\"M17.8118 6.39674C17.4052 6.38982 17.0015 6.46522 16.6258 6.61825C16.25 6.77128 15.9103 6.99867 15.6277 7.2863C15.3359 7.56479 15.1052 7.89903 14.9497 8.26847C14.7941 8.63791 14.7171 9.03474 14.7232 9.43456C14.7172 9.82823 14.792 10.2191 14.9431 10.5837C15.0941 10.9483 15.3184 11.2792 15.6025 11.5566C15.3184 11.8339 15.0941 12.1648 14.9431 12.5293C14.792 12.8939 14.7172 13.2847 14.7232 13.6783C14.7171 14.078 14.7942 14.4748 14.9498 14.8442C15.1053 15.2136 15.336 15.5477 15.6277 15.8262C15.9107 16.1131 16.2505 16.3401 16.6261 16.4932C17.0016 16.6462 17.405 16.7221 17.8115 16.7161C18.2179 16.7221 18.6214 16.6462 18.9969 16.4932C19.3725 16.3401 19.7122 16.1132 19.9953 15.8262C20.5467 15.3039 20.8697 14.5909 20.8957 13.8384C20.8997 13.7824 20.8997 13.7321 20.8997 13.6783V13.6C20.8919 12.8314 20.5759 12.0969 20.0205 11.5562C20.5568 11.0366 20.8701 10.3344 20.8957 9.59433C20.8997 9.53835 20.8997 9.48805 20.8997 9.4342V9.35626C20.8958 8.96949 20.8138 8.58735 20.6584 8.23201C20.5031 7.87666 20.2776 7.55521 19.9949 7.2863C19.7124 6.99878 19.3729 6.77146 18.9973 6.61843C18.6218 6.46541 18.2183 6.38995 17.8118 6.39674ZM16.9474 8.5744C17.0585 8.45926 17.1927 8.36804 17.3415 8.30652C17.4903 8.24499 17.6504 8.21449 17.8118 8.21695C17.9775 8.21454 18.142 8.24494 18.2954 8.30635C18.4489 8.36776 18.5882 8.45892 18.7051 8.5744C18.8221 8.68499 18.9148 8.81807 18.9773 8.96538C19.0398 9.11268 19.0709 9.27105 19.0685 9.43066C19.0713 9.5909 19.0404 9.74997 18.9779 9.89796C18.9154 10.0459 18.8225 10.1797 18.7051 10.2908C18.5874 10.4048 18.4478 10.4946 18.2944 10.555C18.1411 10.6154 17.977 10.6452 17.8118 10.6426C17.6509 10.6452 17.4912 10.6154 17.3425 10.5549C17.1938 10.4944 17.0593 10.4045 16.9474 10.2908C16.8303 10.1796 16.7377 10.0458 16.6754 9.89779C16.6131 9.7498 16.5825 9.59079 16.5854 9.43066C16.5831 9.27105 16.6141 9.11268 16.6766 8.96538C16.7392 8.81807 16.8318 8.68499 16.9488 8.5744H16.9474ZM18.7037 14.5345C18.5862 14.6493 18.4468 14.74 18.2935 14.8014C18.1401 14.8628 17.9759 14.8936 17.8104 14.892C17.5667 14.8907 17.3288 14.8185 17.1268 14.6845C16.9248 14.5504 16.7676 14.3606 16.6752 14.1388C16.5827 13.917 16.5591 13.6733 16.6073 13.4383C16.6555 13.2033 16.7733 12.9877 16.9459 12.8185C17.0599 12.7033 17.1965 12.6121 17.3475 12.5507C17.4985 12.4892 17.6607 12.4587 17.8241 12.461C17.9875 12.4587 18.1496 12.4892 18.3006 12.5507C18.4516 12.6121 18.5883 12.7033 18.7022 12.8185C18.8173 12.9309 18.9086 13.0645 18.971 13.2118C19.0333 13.3591 19.0654 13.517 19.0654 13.6765C19.0654 13.836 19.0333 13.994 18.971 14.1412C18.9086 14.2885 18.8173 14.4222 18.7022 14.5345H18.7037Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\" strokeLinejoin=\"round\"\n />\n <path d=\"M7.81784 4.44668L7.3475 3.29993L6.95049 4.47166L5.78979 4.93386L6.97577 5.3261L7.43853 6.47535L7.83554 5.30362L8.99623 4.83892L7.81784 4.44668Z\"\n fill=\"currentColor\"\n />\n <path d=\"M14.3515 17.4321L14.0575 16.7153L13.8094 17.4477L13.084 17.7365L13.8252 17.9817L14.1144 18.7L14.3626 17.9676L15.088 17.6772L14.3515 17.4321Z\"\n fill=\"currentColor\"\n />\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class PaymentsRedirectIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 38 38\">\n <g id=\"Group_42663\" data-name=\"Group 42663\" transform=\"translate(-790 -354)\">\n <rect id=\"Rectangle_2343\" data-name=\"Rectangle 2343\" width=\"38\" height=\"38\" transform=\"translate(-790 -354)\" fill={\"currentColor\"} opacity=\"0\"/>\n <g id=\"export\" transform=\"translate(793 357)\">\n <g id=\"Group_42662\" data-name=\"Group 42662\" transform=\"translate(0 0)\">\n <g id=\"Group_42661\" data-name=\"Group 42661\">\n <path id=\"Path_3798\" data-name=\"Path 3798\" d=\"M227.422,2.188H233.2L220,15.395a1.094,1.094,0,1,0,1.544,1.55L234.746,3.739V9.512a1.094,1.094,0,1,0,2.188,0V1.1a1.1,1.1,0,0,0-1.1-1.1h-8.415a1.094,1.094,0,1,0,0,2.188Z\" transform=\"translate(-205.722 0)\" fill={\"currentColor\"}/>\n <path id=\"Path_3799\" data-name=\"Path 3799\" d=\"M6.552,31.212h18.1a6.558,6.558,0,0,0,6.552-6.552V16.135a1.092,1.092,0,0,0-2.184,0v8.519a4.375,4.375,0,0,1-4.368,4.368H6.552a4.375,4.375,0,0,1-4.368-4.368V6.558A4.375,4.375,0,0,1,6.552,2.19H15A1.1,1.1,0,0,0,15,0H6.552A6.558,6.558,0,0,0,0,6.552v18.1A6.564,6.564,0,0,0,6.552,31.212Z\" transform=\"translate(0 0)\" fill={\"currentColor\"}/>\n </g>\n </g>\n </g>\n </g>\n </SvgIcon>\n );\n }\n}\n\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class LeftArrowIcon extends React.Component {\n render() {\n return (\n <SvgIcon {...this.props} flipOnRTL>\n <path transform=\"translate(16 2.5) scale(-1, 1)\" fill=\"currentColor\" d=\"M11.193,8.327h0L3.46.594A2.027,2.027,0,1,0,.593,3.459l6.3,6.3-6.3,6.3A2.027,2.027,0,0,0,3.46,18.928l7.732-7.733h0a2.027,2.027,0,0,0,0-2.867\" />\n </SvgIcon>\n );\n }\n}\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class RightArrowIcon extends React.Component {\n render() {\n return (\n <SvgIcon {...this.props} flipOnRTL>\n <path transform=\"translate(7 2.5)\" fill=\"currentColor\" d=\"M11.193,8.327h0L3.46.594A2.027,2.027,0,1,0,.593,3.459l6.3,6.3-6.3,6.3A2.027,2.027,0,0,0,3.46,18.928l7.732-7.733h0a2.027,2.027,0,0,0,0-2.867\" />\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport styled, {keyframes, css} from \"styled-components\";\n\nconst pinAnimation = keyframes`\n from {\n transform: translateY(-13px);\n }\n to {\n transform: translateY(15px);\n }\n`;\nconst PinGroup = styled.g<{animated?: boolean;}>`\n ${({animated}) => animated ? css`\n transform: translateY(-13px);\n animation: 1s linear 1s infinite alternate ${pinAnimation};\n ` : \"\"}\n`;\n\nconst MaskPinPath = styled.path<{animated?: boolean;}>`\n transform: translateY(-35px);\n`;\nconst CirclesGroup = styled.g<{animated?: boolean;}>`\n ${({animated}) => animated ? css`\n /* when the icon is animated, move the circles down a bit so we make room for the pin's animation (up-down) */\n transform: translateY(19px);\n ` : \"\"}\n`;\nconst smallCircleAnimation = keyframes`\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n`;\nconst SmallCirclePath = styled.path<{animated?: boolean;}>`\n opacity: 0;\n ${({animated}) => animated ? css`\n animation: 1s linear 1s infinite alternate ${smallCircleAnimation};\n ` : \"\"}\n`;\n\nexport interface ILocationIconProps extends ISvgIconProps {\n animated?: boolean;\n}\n\nexport class LocationIcon extends React.Component<ILocationIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 497 624\">\n <mask id=\"myMask\">\n {/* Everything under a white pixel will be visible */}\n <rect x=\"0\" y=\"0\" width=\"641.6\" height=\"607.7\" fill=\"white\" />\n\n {/* Everything under a black pixel will be invisible */}\n <MaskPinPath animated={this.props.animated}\n d=\"M245.7,11.8c-99.3,0-180,80.7-180,180c0,40.3,14.2,86,43.3,139.4C145.4,398,197.8,464,233.2,517.1\n c4.6,6.9,13.9,8.8,20.8,4.2c1.6-1.1,3.1-2.5,4.2-4.2c35.5-53.2,87.8-119,124.2-185.9c29.1-53.5,43.3-99.1,43.3-139.4\n C425.7,92.5,345,11.8,245.7,11.8z\"\n fill=\"black\"\n />\n </mask>\n\n <CirclesGroup className=\"circles-group\" animated={this.props.animated}>\n <path mask=\"url(#myMask)\" className=\"big-circle\" fill=\"currentColor\" d=\"M245.7,605.7c-59.5,0-115.6-8.3-158-23.3c-21.3-7.6-38.3-16.5-50.3-26.6c-14.1-11.8-21.3-25-21.3-39\n c0-14,7.2-27.2,21.3-39c12-10.1,29-19.1,50.3-26.6c42.4-15,98.5-23.3,158-23.3c59.5,0,115.6,8.3,158,23.3\n c21.3,7.6,38.3,16.5,50.3,26.6c14.1,11.8,21.3,25,21.3,39c0,14-7.2,27.2-21.3,39c-12,10.1-29,19.1-50.3,26.6\n C361.3,597.5,305.2,605.7,245.7,605.7z M245.7,451.2c-56.9,0-110.3,7.8-150.3,22c-35.1,12.5-56.1,28.8-56.1,43.7\n c0,14.9,21,31.2,56.1,43.7c40,14.2,93.3,22,150.3,22c56.9,0,110.3-7.8,150.3-22c35.1-12.5,56.1-28.8,56.1-43.7\n c0-14.9-21-31.2-56.1-43.7C356,459,302.6,451.2,245.7,451.2z\"/>\n <SmallCirclePath animated={this.props.animated} className=\"small-circle\" fill=\"currentColor\" d=\"M245.7,558.5c-55,0-113.5-14.6-113.5-41.6c0-27,58.5-41.6,113.5-41.6c55,0,113.5,14.6,113.5,41.6\n C359.2,543.9,300.7,558.5,245.7,558.5z M245.7,486.4c-28.2,0-54.7,3.6-74.6,10.3c-17.1,5.7-27.8,13.5-27.8,20.2\n c0,12.7,38.9,30.5,102.4,30.5c28.2,0,54.7-3.6,74.6-10.3c17.1-5.7,27.8-13.5,27.8-20.2C348,504.1,309.1,486.4,245.7,486.4z\"/>\n </CirclesGroup>\n <PinGroup animated={this.props.animated}>\n <path className=\"\" fill=\"currentColor\" d=\"M245.7,11.8c-99.3,0-180,80.7-180,180c0,40.3,14.2,86,43.3,139.4C145.4,398,197.8,464,233.2,517.1\n c4.6,6.9,13.9,8.8,20.8,4.2c1.6-1.1,3.1-2.5,4.2-4.2c35.5-53.2,87.8-119,124.2-185.9c29.1-53.5,43.3-99.1,43.3-139.4\n C425.7,92.5,345,11.8,245.7,11.8z M356.1,316.9c-31.4,57.6-76.2,116.1-110.4,165.3c-34.1-49.2-79-107.6-110.4-165.3\n c-26.7-49-39.6-89.9-39.6-125.1c0-82.7,67.3-150,150-150s150,67.3,150,150C395.7,227,382.8,267.9,356.1,316.9z\"/>\n <path className=\"\" fill=\"currentColor\" d=\"M245.7,101.8c-49.7,0-90,40.3-90,90c0.1,49.7,40.3,89.9,90,90c49.7,0,90-40.3,90-90S295.5,101.8,245.7,101.8z\n M245.7,251.8c-33.1,0-60-26.9-60-60s26.9-60,60-60s60,26.9,60,60S278.9,251.8,245.7,251.8z\"/>\n </PinGroup>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IBlogIconProps extends ISvgIconProps {\n\n}\n\nexport class BlogIcon extends React.Component<IBlogIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\">\n <path d=\"M21.577,21.477H2.596c-0.973-0.003-0.986-1.496,0-1.5c0,0,18.981,0,18.981,0C22.551,19.98,22.563,21.473,21.577,21.477z\"/>\n <path d=\"M7.425,17.696H2.596c-0.647,0.023-1.005-0.839-0.53-1.28c0.141-0.141,0.331-0.22,0.53-0.22h4.829\n C8.404,16.2,8.407,17.692,7.425,17.696z\"/>\n <path d=\"M7.425,13.915H2.596c-0.647,0.022-1.005-0.838-0.53-1.28c0.141-0.141,0.331-0.22,0.53-0.22h4.829\n C8.404,12.418,8.407,13.911,7.425,13.915z\"/>\n <path d=\"M21.577,17.696h-5c-0.199,0-0.39-0.079-0.53-0.22c-0.473-0.442-0.118-1.303,0.53-1.28c0,0,5,0,5,0\n C22.555,16.2,22.558,17.692,21.577,17.696z\"/>\n <path d=\"M21.577,13.915h-2c-0.647,0.022-1.004-0.838-0.53-1.28c0.141-0.141,0.331-0.22,0.53-0.22h2\n C22.556,12.419,22.557,13.911,21.577,13.915z\"/>\n <path d=\"M9.968,17.068c-0.188,0.052,0.623-3.725,0.61-3.832c0.017-0.093,0.051-0.182,0.101-0.262l5.508-8.834\n c1.244-1.954,4.343-0.741,3.921,1.543c-0.05,0.278-0.154,0.543-0.307,0.78l-5.812,8.933c0.071,0.091-2.798,1.972-2.882,2.059\n C10.715,17.741,10.104,17.535,9.968,17.068z M12.027,13.643l-0.283,1.547l1.069-0.738l5.732-8.814\n c0.11-0.163,0.139-0.375,0.077-0.561c-0.145-0.514-0.899-0.609-1.166-0.147C17.456,4.929,12.027,13.643,12.027,13.643z\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IHomeIconProps extends ISvgIconProps {\n\n}\n\nexport class HomeIcon extends React.Component<IHomeIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox={\"0 0 19 18\"}>\n <path d=\"M11.3157 18.0026C11.1827 18.0026 11.0498 17.9412 10.9577 17.8388C10.8554 17.7364 10.8043 17.6032 10.8043 17.4599V11.1313H7.86889V17.4599C7.86889 17.6032 7.81775 17.7364 7.71547 17.8388C7.62342 17.9412 7.49046 18.0026 7.35749 18.0026H4.76984C4.05389 17.9821 3.36863 17.6852 2.85723 17.1629C2.35607 16.6406 2.09014 15.9545 2.10037 15.207V8.22303L1.17986 9.18563C1.17986 9.18563 1.08781 9.26755 1.00599 9.30851C0.944622 9.33924 0.873027 9.34948 0.81166 9.34948C0.750293 9.34948 0.678698 9.33924 0.627559 9.30851C0.555964 9.27779 0.504824 9.23683 0.443457 9.18563C0.351406 9.08323 0.290039 8.93986 0.290039 8.79649C0.290039 8.65313 0.351406 8.50976 0.443457 8.40736L8.0223 0.542741C8.40074 0.184327 8.86099 0 9.3417 0C9.82241 0 10.2929 0.184327 10.6304 0.512019L18.1479 8.40736C18.2399 8.50976 18.2911 8.65313 18.2911 8.79649C18.2911 8.93986 18.2399 9.08323 18.1377 9.18563C18.0968 9.23683 18.0354 9.27779 17.9638 9.30851C17.9024 9.33924 17.8308 9.34948 17.7695 9.34948C17.7081 9.34948 17.6365 9.33924 17.5854 9.30851C17.5138 9.27779 17.4626 9.23683 17.4013 9.18563L16.4807 8.23327V15.1558C16.5012 15.9443 16.2353 16.6406 15.7341 17.1527C15.2227 17.6749 14.5477 17.9821 13.8215 18.0026H11.3054H11.3157ZM11.3157 10.0356C11.4486 10.0356 11.5816 10.097 11.6737 10.1994C11.7657 10.3018 11.8271 10.4452 11.8271 10.5783V16.9069H13.8317C14.2613 16.9069 14.6806 16.7226 15.0079 16.3949C15.2841 16.1081 15.4171 15.7532 15.4477 15.3538V15.3231V15.2377V7.14779L9.95537 1.33125C9.76104 1.1674 9.54626 1.08548 9.3417 1.08548C9.11669 1.08548 8.9019 1.1674 8.72803 1.32101L3.13338 7.15803V15.2172C3.13338 15.6678 3.30726 16.0979 3.60387 16.4051C3.9107 16.7226 4.34027 16.9069 4.78007 16.9171H6.85633V10.5886C6.85633 10.4452 6.90747 10.3121 7.00975 10.2097C7.1018 10.1073 7.23476 10.0458 7.36772 10.0458H11.3259L11.3157 10.0356Z\" fill=\"currentColor\"/>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IPromotionsIconProps extends ISvgIconProps {\n\n}\n\nexport class PromotionsIcon extends React.Component<IPromotionsIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 19 18\" fill={'none'}>\n <g clipPath=\"url(#clip0_11018_281862)\">\n <path d=\"M16.6723 5.37109H1.91601C1.57218 5.37109 1.29346 5.65029 1.29346 5.9947V7.59717C1.29346 7.94158 1.57218 8.22078 1.91601 8.22078H16.6723C17.0161 8.22078 17.2949 7.94158 17.2949 7.59717V5.9947C17.2949 5.65029 17.0161 5.37109 16.6723 5.37109Z\" stroke=\"currentColor\" strokeWidth=\"1.11121\" strokeMiterlimit=\"10\"/>\n <path d=\"M2.05176 8.2168H16.537V16.3742C16.537 16.7186 16.2582 16.9978 15.9144 16.9978H2.67431C2.3305 16.9978 2.05176 16.7186 2.05176 16.3742V8.2168Z\" stroke=\"currentColor\" strokeWidth=\"1.11121\" strokeMiterlimit=\"10\"/>\n <path d=\"M7.7998 8.22266V17.0043\" stroke=\"currentColor\" strokeWidth=\"1.11121\" strokeMiterlimit=\"10\"/>\n <path d=\"M10.7896 8.22266V17.0043\" stroke=\"currentColor\" strokeWidth=\"1.11121\" strokeMiterlimit=\"10\"/>\n <path d=\"M10.7896 5.37402V8.24252\" stroke=\"currentColor\" strokeWidth=\"1.11121\" strokeMiterlimit=\"10\"/>\n <path d=\"M7.7998 5.37402V8.24252\" stroke=\"currentColor\" strokeWidth=\"1.11121\" strokeMiterlimit=\"10\"/>\n <path d=\"M9.52962 5.37587C9.52962 5.37587 9.4888 2.4821 11.2774 1.28216C12.7649 0.284135 14.6281 2.13579 13.508 3.68395C13.1093 4.23472 12.0141 5.27492 9.53026 5.37587H9.52962Z\" stroke=\"currentColor\" strokeWidth=\"1.11121\" strokeMiterlimit=\"10\"/>\n <path d=\"M9.05902 5.37587C9.05902 5.37587 9.09984 2.4821 7.31128 1.28216C5.82378 0.284135 3.96059 2.13579 5.08068 3.68395C5.47934 4.23472 6.57455 5.27492 9.05838 5.37587H9.05902Z\" stroke=\"currentColor\" strokeWidth=\"1.11121\" strokeMiterlimit=\"10\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_11018_281862\">\n <rect width=\"18\" height=\"18\" fill=\"currentColor\" transform=\"translate(0.290039)\"/>\n </clipPath>\n </defs>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ISlotsIconProps extends ISvgIconProps {\n\n}\n\nexport class SlotsIcon extends React.Component<ISlotsIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 19 18\" fill={'none'}>\n <g clipPath=\"url(#clip0_11018_281865)\">\n <g clipPath=\"url(#clip1_11018_281865)\">\n <path d=\"M9.95044 1.80273C9.95044 1.80273 10.4562 2.38686 11.5371 2.77138\" stroke=\"currentColor\" strokeWidth=\"0.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M3.8894 10.5215C3.8894 10.5215 4.65088 10.8698 5.88812 10.7619\" stroke=\"currentColor\" strokeWidth=\"0.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M12.0969 11.1521C12.0969 11.1521 12.9326 11.1 13.973 10.4229\" stroke=\"currentColor\" strokeWidth=\"0.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M4.80127 10.7179C4.80127 10.7179 5.2611 6.55981 10.7453 2.40723\" stroke=\"currentColor\" strokeWidth=\"0.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M13.1475 10.852C13.1475 10.852 9.7834 7.19598 10.8802 2.48438\" stroke=\"currentColor\" strokeWidth=\"0.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M4.88841 16.207C6.93089 16.207 8.58664 14.5535 8.58664 12.5137C8.58664 10.4739 6.93089 8.82031 4.88841 8.82031C2.84594 8.82031 1.19019 10.4739 1.19019 12.5137C1.19019 14.5535 2.84594 16.207 4.88841 16.207Z\" stroke=\"currentColor\" strokeWidth=\"0.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M13.6919 16.0449C15.7344 16.0449 17.3901 14.3913 17.3901 12.3516C17.3901 10.3118 15.7344 8.6582 13.6919 8.6582C11.6494 8.6582 9.99365 10.3118 9.99365 12.3516C9.99365 14.3913 11.6494 16.0449 13.6919 16.0449Z\" stroke=\"currentColor\" strokeWidth=\"0.9\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_11018_281865\">\n <rect width=\"18\" height=\"18\" fill=\"currentColor\" transform=\"translate(0.290039)\"/>\n </clipPath>\n <clipPath id=\"clip1_11018_281865\">\n <rect width=\"18\" height=\"18\" fill=\"currentColor\" transform=\"translate(0.290039)\"/>\n </clipPath>\n </defs>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IJackpotsIconProps extends ISvgIconProps {\n\n}\n\nexport class JackpotsIcon extends React.Component<IJackpotsIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 19 18\" fill=\"none\">\n <path d=\"M5.70654 16.3428H12.6944\" stroke=\"currentColor\" strokeLinecap=\"round\"/>\n <path d=\"M6.46098 15.9116C6.46098 15.9116 6.40424 14.0064 6.46098 13.9902C6.92306 13.4389 7.30407 12.8228 7.5959 12.1661C7.98502 11.3635 8.212 10.496 8.26064 9.61234C8.26064 9.54748 8.26064 9.53937 8.26064 9.53937C7.70129 9.23941 7.19868 8.85837 6.75282 8.40437C5.57737 7.36664 4.96938 5.24256 4.79104 3.77516C4.68565 3.07794 4.64512 2.36451 4.66944 1.65918H9.10372\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11.8927 15.9116C11.8927 15.9116 11.9495 14.0064 11.8927 13.9902C11.4307 13.4389 11.0497 12.8228 10.7578 12.1661C10.3687 11.3635 10.1417 10.496 10.0931 9.61234C10.0931 9.54748 10.0931 9.53937 10.0931 9.53937C10.6524 9.23941 11.155 8.85837 11.6009 8.40437C12.7763 7.36664 13.3843 5.24256 13.5627 3.77516C13.6681 3.06983 13.7086 2.36451 13.6843 1.65918H9.25\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M6.65552 14.0977H11.7383\" stroke=\"currentColor\" strokeLinecap=\"round\"/>\n <path d=\"M4.60441 2.54668H2.27783C2.27783 2.54668 1.92925 2.50615 1.93736 2.81422C1.75091 4.09516 2.14002 5.39231 2.99932 6.35706C3.81808 7.24075 4.9611 7.76772 6.16898 7.80825\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M13.9759 2.54668H16.3025C16.3025 2.54668 16.6511 2.50615 16.643 2.81422C16.8294 4.09516 16.4403 5.39231 15.581 6.35706C14.7623 7.24075 13.6193 7.76772 12.4114 7.80825\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ILiveCasinoIconProps extends ISvgIconProps {\n\n}\n\nexport class LiveCasinoIcon extends React.Component<ILiveCasinoIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M9.31289 16.0964L9.18145 16.0188L9.31025 15.9439L10.2704 15.3851L10.272 15.3842L11.3685 14.7409V17.3057L10.2731 16.6631L10.272 16.6624L9.31289 16.0964ZM8.80727 15.9439L8.93607 16.0188L8.80463 16.0964L7.84556 16.6624L7.84444 16.6631L6.74902 17.3057V14.7409L7.84556 15.3842L7.84556 15.3842L7.84708 15.3851L8.80727 15.9439Z\" stroke=\"currentColor\"/>\n <path d=\"M15.1035 6.45456C15.0798 5.25826 14.7572 4.10131 14.1747 3.08603C13.5609 2.00778 12.6558 1.11055 11.5696 0.504533C10.5937 -0.0857475 9.46824 -0.156581 8.55527 0.284162L8.46083 0.331384C8.39786 0.370736 8.31129 0.410088 8.24046 0.44157C8.11453 0.496663 7.98073 0.512404 7.84693 0.496663C7.52425 0.457311 7.02841 0.425829 6.53258 0.551756L6.45387 0.575367C4.53349 1.19713 3.17191 2.95223 2.98302 5.0615C2.94367 5.50224 2.9358 5.94299 2.95154 6.37586C2.90432 6.45456 2.86496 6.54114 2.83348 6.62771C2.67607 7.06846 2.66033 7.53281 2.77839 7.96568C2.90432 8.45365 3.19552 8.89439 3.62052 9.20921C3.80941 9.86245 4.10062 10.4685 4.50201 11.0037C4.57284 11.106 4.64368 11.2083 4.72238 11.3027C4.79322 11.3972 4.87192 11.4916 4.96636 11.5782C5.01359 11.6333 5.07655 11.6963 5.13164 11.7513C5.37563 12.0032 5.64322 12.2157 5.93442 12.4125C6.04461 12.4912 6.16267 12.562 6.28072 12.6328C6.32795 12.6564 6.37517 12.6879 6.42239 12.7115C6.53258 12.7745 6.65063 12.8375 6.76869 12.8847C6.91036 12.9555 7.05202 13.0106 7.20156 13.0657C7.51638 13.1838 7.84693 13.2782 8.18536 13.3333C8.46083 13.3884 8.73629 13.412 9.01963 13.4277H9.0275C9.15342 13.4199 9.28722 13.412 9.41315 13.3963C9.49185 13.3963 9.57843 13.3805 9.65713 13.3648C10.0743 13.2939 10.4757 13.1838 10.8613 13.0421C10.9951 12.987 11.121 12.9319 11.247 12.8768C11.4044 12.806 11.5618 12.7273 11.7113 12.6407C11.8294 12.5699 11.9474 12.499 12.0576 12.4203C12.3567 12.2236 12.6321 12.0032 12.884 11.7513C13.0335 11.6097 13.1752 11.4523 13.309 11.2791C13.8127 10.6652 14.1747 9.96477 14.3951 9.20134C14.828 8.87865 15.1192 8.4143 15.2373 7.91059C15.3474 7.43836 15.3081 6.91892 15.0956 6.45456H15.1035ZM3.76219 5.81706C3.75432 5.58882 3.76219 5.35271 3.7858 5.12446C3.93534 3.36936 5.05294 1.88973 6.64276 1.35454L6.7136 1.3388C7.0835 1.23648 7.47703 1.26009 7.75249 1.29944C8.02795 1.32306 8.28768 1.2837 8.5474 1.18926C8.61036 1.15778 8.6812 1.11843 8.74416 1.08694L8.83861 1.03972C9.52333 0.677682 10.3891 0.732775 11.1682 1.19713C12.1284 1.74019 12.9312 2.52723 13.4743 3.48742C13.8757 4.19576 14.1433 4.9828 14.2456 5.79345C14.2456 5.80919 14.2456 5.81706 14.2456 5.8328C13.9386 5.76984 13.3484 5.58095 12.6243 5.02215C12.1442 4.64437 11.7192 4.27446 11.3965 3.999C11.0187 3.66844 10.7905 3.45594 10.7826 3.44807C10.696 3.36149 10.578 3.32214 10.4599 3.33788C10.3419 3.34575 10.2395 3.42446 10.1766 3.5189C10.1766 3.52677 10.1215 3.60548 9.98769 3.74714C9.9562 3.78649 9.91685 3.82585 9.86963 3.8652C9.48398 4.25085 8.70481 4.88835 7.3511 5.47076C6.24137 5.95873 5.27331 6.10827 4.54923 6.13188C4.22655 6.14762 3.95895 6.13188 3.74645 6.10827C3.74645 6.01382 3.74645 5.91151 3.75432 5.81706H3.76219ZM14.2534 8.20967C14.159 8.3592 14.0252 8.48513 13.8757 8.58744C13.7734 8.65828 13.6946 8.76846 13.6474 8.91013C13.3641 9.94903 12.7738 10.8541 11.9317 11.531C11.0895 12.2 10.0821 12.5777 9.00389 12.625C7.98073 12.5777 6.99693 12.2314 6.19415 11.6018C6.18628 11.5939 6.17841 11.5939 6.17054 11.5782C6.13906 11.5625 6.10757 11.5467 6.08396 11.5231C5.24183 10.8541 4.65155 9.94903 4.36034 8.90226C4.32886 8.77633 4.25016 8.66615 4.13997 8.58744C3.9983 8.493 3.88025 8.36707 3.77793 8.23328C3.51034 7.8555 3.42376 7.35179 3.58904 6.90318C3.73071 6.91892 3.91173 6.93466 4.10849 6.93466C4.17932 6.94253 4.25803 6.94253 4.33673 6.94253C5.16312 6.94253 6.33582 6.80086 7.68166 6.21058C9.27148 5.51798 10.1451 4.75455 10.5544 4.32168C10.8849 4.62076 11.4595 5.11659 12.1442 5.65178C12.7659 6.13975 13.309 6.39947 13.7183 6.5254C13.9622 6.6041 14.1669 6.64345 14.3085 6.65132L14.34 6.72216C14.5919 7.21012 14.5447 7.78466 14.2534 8.20967Z\" fill=\"currentColor\"/>\n <path d=\"M10.3969 10.3069C10.0348 10.6846 9.5075 10.8971 9.0038 10.8971C8.50009 10.8971 7.98064 10.6846 7.61073 10.3069C7.45332 10.1416 7.45332 9.89759 7.61073 9.73231C7.76814 9.5749 8.01999 9.58277 8.1774 9.73231C8.61814 10.1888 9.38945 10.1888 9.83019 9.73231C9.9876 9.58277 10.2473 9.58277 10.3969 9.73231C10.5621 9.89759 10.5621 10.1416 10.3969 10.3069Z\" fill=\"currentColor\"/>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ICasinoGamesIconProps extends ISvgIconProps {\n\n}\n\nexport class CasinoGamesIcon extends React.Component<ICasinoGamesIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\" >\n <path d=\"M15,11c-0.4,0-0.7,0.2-0.8,0.5h-0.7c-0.2-0.4-0.5-0.8-0.9-0.9V9.8C12.8,9.7,13,9.3,13,9c0-0.6-0.4-1-1-1s-1,0.4-1,1\n c0,0.4,0.2,0.7,0.5,0.8v0.7c-0.4,0.2-0.8,0.5-0.9,0.9H9.8C9.7,11.2,9.4,11,9,11c-0.6,0-1,0.4-1,1c0,0.6,0.4,1,1,1\n c0.4,0,0.7-0.2,0.8-0.5h0.7c0.2,0.4,0.5,0.8,0.9,0.9v0.7C11.2,14.3,11,14.7,11,15c0,0.6,0.4,1,1,1s1-0.4,1-1c0-0.4-0.2-0.7-0.5-0.8\n v-0.7c0.4-0.2,0.8-0.5,0.9-0.9h0.7c0.2,0.3,0.5,0.5,0.8,0.5c0.6,0,1-0.4,1-1C16,11.4,15.6,11,15,11z M12,12.5\n c-0.3,0-0.5-0.2-0.5-0.5s0.2-0.5,0.5-0.5s0.5,0.2,0.5,0.5S12.3,12.5,12,12.5z\"/>\n <path d=\"M4,12.5H2c0.1,1.4,0.4,2.8,1.1,4.1l1.7-1C4.4,14.6,4.1,13.6,4,12.5z\"/>\n <path d=\"M4,11.5c0.1-1.1,0.3-2.1,0.8-3.1l-1.7-1c-0.6,1.3-1,2.6-1.1,4.1H4z\"/>\n <path d=\"M20,12.5c-0.1,1.1-0.3,2.1-0.8,3.1l1.7,1c0.6-1.3,1-2.6,1.1-4.1H20z\"/>\n <path d=\"M15.6,19.2c-1,0.5-2,0.8-3.1,0.8v2c1.4-0.1,2.8-0.4,4.1-1.1L15.6,19.2L15.6,19.2z\"/>\n <path d=\"M11.5,22v-2c-1.1-0.1-2.1-0.3-3.1-0.8l-1,1.7C8.7,21.6,10.1,21.9,11.5,22L11.5,22z\"/>\n <path d=\"M12.5,2v2c1.1,0.1,2.1,0.3,3.1,0.8l1-1.7C15.3,2.4,13.9,2.1,12.5,2z\"/>\n <path d=\"M7.6,18.7c-0.9-0.6-1.6-1.4-2.2-2.2l-1.7,1c0.8,1.2,1.8,2.2,3,3L7.6,18.7z\"/>\n <path d=\"M18.7,16.4c-0.6,0.9-1.4,1.7-2.2,2.2l1,1.7c1.2-0.8,2.2-1.8,3-3L18.7,16.4z\"/>\n <path d=\"M8.4,4.8c1-0.5,2-0.8,3.1-0.8V2c-1.4,0.1-2.8,0.4-4.1,1.1L8.4,4.8L8.4,4.8z\"/>\n <path d=\"M5.3,7.6c0.6-0.9,1.4-1.7,2.2-2.2l-1-1.7c-1.2,0.8-2.2,1.8-3,3L5.3,7.6z\"/>\n <path d=\"M19.2,8.4c0.5,1,0.8,2,0.8,3.1h2c-0.1-1.4-0.4-2.8-1.1-4.1L19.2,8.4z\"/>\n <path d=\"M16.4,5.3c0.9,0.6,1.6,1.4,2.2,2.2l1.7-1c-0.8-1.2-1.8-2.2-3-3L16.4,5.3z\"/>\n {/* <path d=\"M23.915,11.552c-0.002-2.162-2.298-4.046-6.145-5.038l-0.375,1.452c3.049,0.789,5.02,2.196,5.02,3.589\n c0,1.002-1.026,2.038-2.826,2.838c-2.409,0.975-4.991,1.451-7.589,1.398c-2.598,0.054-5.18-0.42-7.59-1.394\n c-1.791-0.8-2.82-1.833-2.825-2.83v-0.013C1.59,10.155,3.569,8.744,6.63,7.959L6.257,6.506C2.652,7.43,0.371,9.185,0.083,11.17\n l0.002,0.37c0,0.005-0.002,0.01-0.002,0.015c0,0.007,0.002,0.013,0.002,0.019v4.944c0,1.644,1.315,3.138,3.715,4.207\n c2.602,1.059,5.392,1.578,8.2,1.524c2.809,0.053,5.6-0.467,8.202-1.528c2.396-1.068,3.715-2.562,3.715-4.207v-4.962H23.915z\n M19.591,19.352c-2.41,0.974-4.992,1.448-7.59,1.394c-2.598,0.054-5.18-0.42-7.59-1.394c-1.796-0.802-2.826-1.838-2.826-2.838\n v-2.107c0.581,0.501,1.322,0.958,2.214,1.356c2.602,1.059,5.392,1.578,8.2,1.524c2.809,0.053,5.599-0.466,8.201-1.525\n c0.893-0.398,1.636-0.856,2.217-1.358v2.11C22.417,17.517,21.391,18.552,19.591,19.352z\"/>\n <path d=\"M12.503,12.392V7.998h-1.5v0.653c-1.672,0.064-3.316,0.453-4.837,1.15c-1.469,0.735-2.278,1.749-2.278,2.854h1.5\n c0-0.5,0.528-1.052,1.448-1.508c1.313-0.595,2.728-0.926,4.167-0.989v2.235H12.503z\"/>\n <path d=\"M7.854,7.339C8.25,7.347,8.606,7.003,8.601,6.606h2.134v-1.5H8.601C8.58,4.135,7.106,4.156,7.104,5.123c0,0,0,1.466,0,1.466\n C7.097,6.992,7.452,7.347,7.854,7.339z\"/>\n <path d=\"M13.253,5.106v1.5h2.144c-0.011,0.79,1.161,1.008,1.44,0.271c0.11-0.17,0.037-1.541,0.057-1.753\n c-0.002-0.967-1.476-0.989-1.497-0.018H13.253z\"/>\n <path d=\"M11.018,3.874v1.004h1.5V3.874c0.972-0.019,0.954-1.495-0.015-1.497c0,0-1.467,0-1.467,0\n C10.069,2.379,10.047,3.853,11.018,3.874z\"/>\n <path d=\"M12.86,10.142c1.485,0.047,2.947,0.387,4.3,1c0.921,0.461,1.449,1.013,1.449,1.513h1.5c0-1.105-0.809-2.121-2.279-2.859\n c-1.537-0.704-3.198-1.096-4.888-1.154L12.86,10.142z\"/> */}\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IVipIconProps extends ISvgIconProps {\n\n}\n\nexport class VipIcon extends React.Component<IVipIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\">\n <path d=\"M11.01,8.495l-2.686,7.314H6.543L3.857,8.495h1.571l2.01,5.81l2-5.81H11H11.01z\"/>\n <path d=\"M13.352,8.495v7.314h-1.467V8.495H13.352z\"/>\n <path d=\"M19.858,11.857c-0.181,0.343-0.476,0.619-0.867,0.829c-0.391,0.21-0.895,0.314-1.495,0.314h-1.229v2.809h-1.467V8.495h2.695\n c0.562,0,1.048,0.095,1.448,0.295s0.695,0.467,0.895,0.81c0.2,0.343,0.295,0.733,0.295,1.162\n C20.134,11.152,20.039,11.523,19.858,11.857z M18.334,11.542c0.2-0.181,0.295-0.448,0.295-0.781c0-0.714-0.4-1.067-1.191-1.067\n h-1.162v2.124h1.162c0.41,0,0.705-0.095,0.905-0.276H18.334z\"/>\n <rect x=\"2\" y=\"4.476\" width=\"20\" height=\"0.762\"/>\n <rect x=\"2\" y=\"18.762\" width=\"20\" height=\"0.762\"/>\n {/* <path d=\"M11.042,8.637l-2.816,7.678h-1.87L3.54,8.637h1.646l2.112,6.1l2.1-6.1H11.042z M13.506,8.637v7.678h-1.54V8.637H13.506z\n M20.623,11.015c0.002,0.403-0.099,0.801-0.292,1.155c-0.21,0.375-0.528,0.678-0.913,0.869c-0.488,0.236-1.026,0.349-1.567,0.33\n h-1.287v2.946h-1.54V8.637h2.827c0.523-0.015,1.042,0.09,1.518,0.308c0.392,0.181,0.72,0.476,0.941,0.847\n C20.522,10.164,20.63,10.586,20.623,11.015z M17.786,12.124c0.341,0.028,0.68-0.077,0.946-0.292\n c0.106-0.107,0.188-0.236,0.241-0.377c0.053-0.141,0.076-0.292,0.067-0.442c0-0.748-0.418-1.122-1.254-1.122h-1.222v2.233H17.786z\"\n />\n <path d=\"M22.587,5.565h-21v-1.5h21V5.565z\"/>\n <path d=\"M22.587,20.565h-21v-1.5h21V20.565z\"/> */}\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface INewGamesIconProps extends ISvgIconProps {\n\n}\n\nexport class NewGamesIcon extends React.Component<INewGamesIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\" >\n <path d=\"M21.6,16.5c-0.2,0-0.3-0.1-0.4-0.2l-0.5-0.5c-0.2-0.2-0.2-0.6,0-0.8c0.2-0.2,0.6-0.2,0.8,0l0.5,0.5c0.2,0.2,0.2,0.6,0,0.8\n C21.9,16.4,21.8,16.5,21.6,16.5z\"/>\n <path d=\"M12.3,22.8C12.2,22.8,12.2,22.8,12.3,22.8c-0.4,0-0.6-0.3-0.6-0.6l0.1-1c0-0.3,0.3-0.6,0.6-0.6c0.3,0,0.6,0.3,0.6,0.6\n l-0.1,1C12.8,22.6,12.6,22.8,12.3,22.8z\"/>\n <path d=\"M2.4,17C2.2,17,2.1,17,2,16.8c-0.2-0.2-0.2-0.6,0-0.8l0.5-0.5c0.2-0.2,0.6-0.2,0.8,0c0.2,0.2,0.2,0.6,0,0.8l-0.5,0.5\n C2.7,17,2.6,17,2.4,17z\"/>\n <path d=\"M18.6,5.9c-0.2,0-0.3-0.1-0.4-0.2c-0.2-0.2-0.2-0.6,0-0.8l0.5-0.5c0.2-0.2,0.6-0.2,0.8,0c0.2,0.2,0.2,0.6,0,0.8L19,5.7\n C18.9,5.9,18.7,5.9,18.6,5.9z\"/>\n <path d=\"M5.2,5.6C5,5.6,4.8,5.5,4.7,5.3L4.4,4.8C4.2,4.6,4.3,4.2,4.6,4c0.3-0.2,0.7-0.1,0.8,0.2l0.3,0.5C5.9,5,5.8,5.4,5.5,5.6\n C5.4,5.6,5.3,5.6,5.2,5.6z\"/>\n <path d=\"M16.3,19.5c-0.2,0-0.5-0.1-0.7-0.2l-3.5-1.9c-0.1,0-0.2,0-0.3,0l-3.5,1.8c-0.7,0.4-1.6,0.1-2-0.6c-0.1-0.3-0.2-0.6-0.1-0.9\n l0.7-3.9c0-0.1,0-0.2-0.1-0.3l-2.8-2.8c-0.6-0.6-0.6-1.5,0-2.1c0.2-0.2,0.5-0.4,0.9-0.4l3.9-0.6c0.1,0,0.2-0.1,0.2-0.2L10.6,4\n c0.4-0.7,1.3-1,2-0.7c0.3,0.1,0.5,0.4,0.7,0.7c0,0,0,0,0,0.1L15,7.6c0,0,0.1,0.1,0.2,0.2l3.9,0.6c0.8,0.1,1.4,0.9,1.3,1.7\n c-0.1,0.3-0.2,0.6-0.4,0.8l-2.9,2.8c-0.1,0.1-0.1,0.2-0.1,0.2l0.7,3.9c0.1,0.8-0.4,1.6-1.2,1.7C16.5,19.5,16.4,19.5,16.3,19.5z\n M11.9,16.3c0.2,0,0.5,0.1,0.7,0.2l3.5,1.8c0.1,0,0.1,0,0.2,0c0.2,0,0.3-0.2,0.2-0.3l-0.7-3.9c-0.1-0.5,0.1-1,0.4-1.3l2.8-2.8\n c0,0,0.1-0.1,0.1-0.2c0-0.1-0.1-0.3-0.2-0.3L15,8.9c-0.5-0.1-0.9-0.4-1.1-0.8l-1.8-3.6c0,0,0,0,0,0c0,0-0.1-0.1-0.1-0.1\n c-0.1-0.1-0.2,0-0.2,0c-0.1,0-0.1,0.1-0.2,0.1L9.9,8.1C9.7,8.6,9.3,8.9,8.8,8.9L4.9,9.5c-0.1,0-0.1,0-0.2,0.1\n c-0.1,0.1-0.1,0.3,0,0.4l2.8,2.8c0.4,0.4,0.5,0.8,0.4,1.3L7.3,18c0,0.1,0,0.1,0,0.2c0.1,0.1,0.2,0.2,0.4,0.1l3.5-1.8\n C11.4,16.3,11.7,16.3,11.9,16.3z\"/>\n {/* <path d=\"M21.599,15.932c-0.674-0.101-1.716-1.146-1.055-1.805c1.011-0.956,2.773,1.642,1.056,1.81L21.599,15.932z\"/>\n <path d=\"M12.334,22.19c-1.149,0.013-0.996-2.607,0.116-2.522C13.532,19.731,13.38,22.194,12.334,22.19z\"/>\n <path d=\"M2.571,16.457c-1.567-0.153-0.227-2.359,0.818-1.968C4.472,14.99,3.363,16.372,2.571,16.457z\"/>\n <path d=\"M18.571,5.457c-1.567-0.153-0.227-2.359,0.818-1.968C20.472,3.99,19.363,5.372,18.571,5.457z\"/>\n <path d=\"M5.335,5.19c-1.068-0.037-1.525-2.227-0.1-1.975C6.042,3.485,6.53,5.132,5.335,5.19z\"/>\n <path d=\"M12.002,2.44c0.303-0.001,0.601,0.083,0.859,0.244c0.258,0.16,0.465,0.39,0.598,0.662l1.738,3.529\n c0.009,0.018,0.022,0.034,0.039,0.046c0.016,0.012,0.035,0.019,0.055,0.022l3.9,0.566c0.3,0.044,0.581,0.171,0.813,0.366\n c0.232,0.195,0.404,0.452,0.497,0.74c0.094,0.288,0.105,0.597,0.032,0.891c-0.073,0.294-0.226,0.562-0.443,0.774l-2.819,2.748\n c-0.014,0.014-0.025,0.031-0.031,0.051c-0.006,0.019-0.008,0.04-0.004,0.059l0.666,3.88c0.052,0.299,0.02,0.607-0.094,0.888\n c-0.114,0.281-0.304,0.525-0.55,0.704c-0.246,0.179-0.536,0.284-0.839,0.306c-0.303,0.021-0.605-0.043-0.874-0.185l-3.485-1.832\n c-0.018-0.009-0.038-0.014-0.058-0.014s-0.04,0.005-0.058,0.014l-3.485,1.832c-0.233,0.124-0.492,0.189-0.756,0.189\n c-0.236,0-0.47-0.052-0.684-0.152c-0.214-0.1-0.404-0.245-0.557-0.426C6.31,18.16,6.199,17.948,6.137,17.72\n c-0.062-0.228-0.073-0.467-0.034-0.7l0.666-3.88c0.003-0.02,0.002-0.04-0.005-0.059c-0.006-0.019-0.017-0.037-0.031-0.051\n l-2.819-2.748c-0.217-0.212-0.37-0.48-0.443-0.774C3.399,9.214,3.41,8.905,3.503,8.617c0.094-0.288,0.266-0.545,0.498-0.74\n c0.232-0.195,0.513-0.322,0.813-0.366l3.9-0.566c0.019-0.004,0.037-0.012,0.053-0.024c0.016-0.012,0.028-0.028,0.036-0.046\n l1.742-3.53c0.133-0.272,0.341-0.502,0.598-0.662C11.401,2.523,11.699,2.439,12.002,2.44z M16.302,17.422\n c0.019-0.001,0.038-0.005,0.055-0.014c0.017-0.008,0.033-0.02,0.045-0.035c0.012-0.014,0.02-0.03,0.024-0.047\n c0.004-0.017,0.004-0.035,0-0.053l-0.666-3.88c-0.045-0.26-0.025-0.526,0.056-0.777c0.081-0.251,0.222-0.477,0.411-0.661\n l2.819-2.748c0.017-0.016,0.028-0.037,0.034-0.059c0.006-0.023,0.005-0.046-0.002-0.068c-0.007-0.022-0.02-0.042-0.038-0.057\n C19.022,9.007,19,8.997,18.977,8.994l-3.9-0.566c-0.261-0.038-0.508-0.139-0.721-0.293c-0.213-0.155-0.385-0.359-0.502-0.595\n l-1.742-3.53c-0.01-0.021-0.026-0.038-0.046-0.051C12.046,3.946,12.023,3.939,12,3.939c-0.023,0-0.046,0.007-0.066,0.019\n c-0.02,0.012-0.036,0.03-0.046,0.051l-1.742,3.53C10.03,7.775,9.857,7.98,9.644,8.134C9.431,8.289,9.184,8.39,8.923,8.428\n l-3.9,0.566C5,8.997,4.978,9.007,4.961,9.022C4.943,9.037,4.93,9.057,4.923,9.079C4.915,9.101,4.915,9.125,4.92,9.148\n C4.926,9.17,4.937,9.191,4.954,9.207l2.819,2.748c0.189,0.184,0.33,0.411,0.411,0.661c0.081,0.251,0.101,0.517,0.056,0.777\n l-0.666,3.88c-0.004,0.017-0.004,0.035,0,0.053c0.004,0.017,0.012,0.034,0.024,0.047c0.012,0.015,0.027,0.027,0.045,0.035\n c0.017,0.008,0.036,0.013,0.055,0.014c0.02,0,0.04-0.006,0.058-0.016l3.49-1.831c0.233-0.122,0.493-0.187,0.756-0.187\n s0.523,0.064,0.756,0.187l3.485,1.832c0.016,0.009,0.035,0.015,0.054,0.016L16.302,17.422z\"/> */}\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ITripleEightCasinoIconProps extends ISvgIconProps {\n\n}\n\nexport class TripleEightCasinoIcon extends React.Component<ITripleEightCasinoIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\" >\n <path d=\"M14.1,4.1l1,1.5l0.3,0.5l0.6,0l1.8,0.1L17.9,8l0,0.6l0.5,0.3l1.5,1l-0.8,1.6L18.8,12l0.3,0.6l0.8,1.6l-1.5,1l-0.5,0.3l0,0.6\n l-0.1,1.8L16,17.9l-0.6,0l-0.3,0.5l-1,1.5l-1.6-0.8L12,18.8l-0.6,0.3l-1.6,0.8l-1-1.5l-0.3-0.5l-0.6,0l-1.8-0.1L6.1,16l0-0.6\n l-0.5-0.3l-1.5-1l0.8-1.6L5.2,12l-0.3-0.6L4.1,9.9l1.5-1l0.5-0.3l0-0.6l0.1-1.8L8,6.1l0.6,0l0.3-0.5l1-1.5l1.6,0.8L12,5.2l0.6-0.3\n L14.1,4.1z M14.5,2.5L12,3.8L9.5,2.5L7.9,4.9L5,5L4.9,7.9L2.5,9.5L3.8,12l-1.3,2.5l2.4,1.6L5,19l2.9,0.1l1.6,2.4l2.5-1.3l2.5,1.3\n l1.6-2.4L19,19l0.1-2.9l2.4-1.6L20.2,12l1.3-2.5l-2.4-1.6L19,5l-2.9-0.1L14.5,2.5z\"/>\n <path d=\"M12,7.1l1.2,3.2l3.5,0.2L14,12.7l0.9,3.3L12,14.1L9.1,16l0.9-3.3l-2.7-2.2l3.5-0.2L12,7.1z\"/>\n {/* <path d=\"M15.529,10.734c0.005,0,0.008,0.003,0.013,0.003c0.006,0,0.013,0,0.02-0.001c1.518-0.051,2.982-0.721,4.025-1.847\n c1.096-1.231,1.589-2.873,1.357-4.404c0.007-0.268-0.091-0.509-0.276-0.677C20.377,3.542,20,3.563,19.962,3.57H17.58\n c0-0.143,0.01-0.286,0.005-0.428c-0.012-0.321-0.275-0.575-0.596-0.575h-5.036c-0.029,0-0.055,0.013-0.083,0.017\n c-0.028-0.004-0.053-0.017-0.083-0.017H6.751c-0.321,0-0.585,0.254-0.595,0.576C6.151,3.286,6.161,3.428,6.161,3.571L4.104,3.574\n C3.996,3.563,3.62,3.541,3.328,3.808c-0.184,0.169-0.282,0.41-0.269,0.576C2.821,6.017,3.313,7.659,4.418,8.898\n c0.977,1.054,2.339,1.691,3.764,1.804c0.16,0.197,0.329,0.378,0.51,0.537c0.461,0.47,0.971,0.874,1.522,1.206\n c-0.08,0.825-0.307,1.629-0.684,2.406c-0.29,0.653-0.659,1.26-1.1,1.809c-0.279,0.144-0.3,0.561-0.257,2.985H7.928\n c-0.493,0-0.894,0.4-0.894,0.894c0,0.493,0.4,0.894,0.894,0.894h7.935c0.493,0,0.894-0.4,0.894-0.894c0-0.493-0.4-0.894-0.894-0.894\n h-0.296c0.043-2.425,0.022-2.841-0.256-2.985c-0.44-0.547-0.811-1.156-1.109-1.826c-0.364-0.752-0.589-1.543-0.672-2.391\n c0.549-0.332,1.053-0.731,1.487-1.174C15.199,11.109,15.369,10.929,15.529,10.734z M19.784,4.758c0.12,1.215-0.27,2.421-1.079,3.329\n c-0.629,0.679-1.458,1.144-2.351,1.345c0.594-1.2,0.944-2.606,1.086-3.779c0.045-0.296,0.068-0.595,0.093-0.892L19.784,4.758z\n M5.3,8.096C4.502,7.201,4.111,6.029,4.21,4.762h1.997c0.025,0.294,0.047,0.589,0.091,0.876c0.141,1.156,0.481,2.528,1.044,3.704\n C6.567,9.11,5.851,8.691,5.3,8.096z M9.367,19.645c-0.01-0.674-0.015-1.315-0.013-1.764h5.033c0.001,0.45-0.004,1.091-0.013,1.764\n H9.367z M12.629,11.586c-0.204,0.109-0.326,0.41-0.313,0.641c0.059,1.082,0.333,2.135,0.805,3.109\n c0.212,0.477,0.474,0.923,0.758,1.354H9.863c0.282-0.428,0.542-0.87,0.748-1.335c0.481-0.99,0.755-2.043,0.815-3.243\n c0-0.219-0.121-0.421-0.314-0.525c-0.573-0.307-1.1-0.704-1.6-1.21C8.323,9.327,7.675,7.09,7.479,5.476\n C7.393,4.911,7.347,4.336,7.34,3.759h4.447c0.029,0,0.055-0.013,0.083-0.017c0.028,0.004,0.053,0.017,0.083,0.017H16.4\n c-0.007,0.573-0.054,1.152-0.141,1.735c-0.194,1.597-0.843,3.833-2.061,4.912C13.73,10.881,13.202,11.278,12.629,11.586z\"/> */}\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IBlackjackIconProps extends ISvgIconProps {\n\n}\n\nexport class BlackjackIcon extends React.Component<IBlackjackIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\">\n <path d=\"M11.255 7.062h7.354a1.402 1.402 0 0 1 1.4 1.4v11.686a1.402 1.402 0 0 1 -1.4 1.4h-7.354a1.402 1.402 0 0 1 -1.4 -1.4V8.462a1.402 1.402 0 0 1 1.4 -1.4Zm7.354 13.286a0.2 0.2 0 0 0 0.2 -0.2V8.462a0.2 0.2 0 0 0 -0.2 -0.2h-7.354a0.2 0.2 0 0 0 -0.2 0.2v11.686a0.2 0.2 0 0 0 0.2 0.2Z\"/>\n <path d=\"M8.734 17.39a0.6 0.6 0 0 1 -0.534 -0.324L3.564 8.11a1.469 1.469 0 0 1 0.628 -1.976l6.51 -3.371a1.469 1.469 0 0 1 1.976 0.628l0.871 1.68a0.6 0.6 0 1 1 -1.066 0.552l-0.872 -1.68a0.269 0.269 0 0 0 -0.358 -0.114L4.744 7.2a0.269 0.269 0 0 0 -0.114 0.359l4.64 8.955a0.6 0.6 0 0 1 -0.532 0.876Z\"/>\n <path d=\"m12.486 10.879 -0.32 0.974h-0.413l1.053 -3.098h0.48l1.057 3.098h-0.43l-0.331 -0.974Zm1.016 -0.313 -0.303 -0.892c-0.069 -0.202 -0.114 -0.386 -0.16 -0.566h-0.009c-0.046 0.184 -0.097 0.372 -0.16 0.56l-0.303 0.896Z\"/>\n <path d=\"M14.483 11.954h-0.64l-0.33 -0.974h-0.954l-0.32 0.974h-0.626l1.12 -3.298h0.626Zm-0.495 -0.2h0.216l-0.989 -2.898h-0.342l-0.985 2.898h0.202l0.32 -0.974h1.242Zm-0.346 -1.087h-1.213l0.348 -1.028c0.051 -0.16 0.1 -0.336 0.154 -0.553l0.022 -0.078h0.16l0.03 0.119c0.042 0.16 0.086 0.332 0.147 0.514Zm-0.934 -0.2h0.654l-0.258 -0.759c-0.026 -0.08 -0.05 -0.153 -0.07 -0.226 -0.022 0.08 -0.044 0.15 -0.066 0.219Z\"/>\n <path d=\"m6.374 6.522 0.417 -0.195 1.013 2.16c0.4 0.858 0.104 1.318 -0.452 1.578a1.492 1.492 0 0 1 -0.48 0.133l-0.098 -0.37a1.101 1.101 0 0 0 0.379 -0.102c0.374 -0.175 0.515 -0.446 0.219 -1.078Z\"/>\n <path d=\"m6.839 6.198 1.055 2.25a1.422 1.422 0 0 1 0.137 1.09 1.148 1.148 0 0 1 -0.64 0.622 1.58 1.58 0 0 1 -0.518 0.142l-0.08 0.004 -0.146 -0.568 0.121 -0.008a1.006 1.006 0 0 0 0.343 -0.093c0.31 -0.146 0.448 -0.355 0.17 -0.945l-1.04 -2.218Zm0.106 3.895a1.529 1.529 0 0 0 0.364 -0.114 0.946 0.946 0 0 0 0.534 -0.51 1.238 1.238 0 0 0 -0.13 -0.936L6.743 6.463l-0.235 0.11 0.954 2.036c0.289 0.615 0.206 0.989 -0.267 1.211a1.234 1.234 0 0 1 -0.296 0.095Z\"/>\n <path d=\"M13.467 18.292a1.706 1.706 0 0 1 -0.414 -0.051 1.662 1.662 0 0 1 -1.156 -1.026 1.833 1.833 0 0 1 0.182 -1.674 6.1 6.1 0 0 1 1.299 -1.28 7.637 7.637 0 0 0 1.175 -1.096 0.48 0.48 0 0 1 0.75 0.598 8.352 8.352 0 0 1 -1.321 1.243 5.468 5.468 0 0 0 -1.103 1.063 0.872 0.872 0 0 0 -0.088 0.795 0.709 0.709 0 0 0 0.494 0.443 0.732 0.732 0 0 0 0.752 -0.257 0.48 0.48 0 1 1 0.708 0.648 1.724 1.724 0 0 1 -1.278 0.593Z\"/>\n <path d=\"M16.39 18.292a1.724 1.724 0 0 1 -1.28 -0.592 0.48 0.48 0 1 1 0.708 -0.648 0.732 0.732 0 0 0 0.752 0.257 0.709 0.709 0 0 0 0.494 -0.443 0.872 0.872 0 0 0 -0.088 -0.795 5.17 5.17 0 0 0 -1.1 -1.062 7.981 7.981 0 0 1 -1.322 -1.247 0.48 0.48 0 1 1 0.75 -0.598 7.243 7.243 0 0 0 1.174 1.094 5.933 5.933 0 0 1 1.3 1.28 1.833 1.833 0 0 1 0.182 1.674 1.662 1.662 0 0 1 -1.156 1.031 1.706 1.706 0 0 1 -0.414 0.05Z\"/>\n <path d=\"M15.409 19.258h-0.96v-1.323h0.96Z\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IRouletteIconProps extends ISvgIconProps {\n\n}\n\nexport class RouletteIcon extends React.Component<IRouletteIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\">\n <path d=\"M11.985 2.865a9.12 9.12 0 1 1 -6.471 2.68 9.152 9.152 0 0 1 6.471 -2.68m0 17.102a7.951 7.951 0 1 0 -7.951 -7.951 7.951 7.951 0 0 0 7.951 7.951\"/>\n <path d=\"M11.391 18.419h1.2v2.32h-1.2z\"/>\n <path d=\"M3.303 11.34h2.32v1.2h-2.32z\"/>\n <path d=\"M18.426 11.34h2.48v1.2h-2.48z\"/>\n <path d=\"M11.391 3.14h1.2v2.48h-1.2z\"/>\n <path d=\"M12.918 10.99a1.36 1.36 0 1 1 -1.92 0 1.36 1.36 0 0 1 1.92 0\"/>\n <path d=\"M9.273 7.727a0.986 0.986 0 1 1 -1.395 0 0.987 0.987 0 0 1 1.395 0\"/>\n <path d=\"M7.874 14.77a0.986 0.986 0 1 1 0 1.395 0.987 0.987 0 0 1 0 -1.395\"/>\n <path d=\"M15.614 14.487a0.986 0.986 0 1 1 -0.986 0.986 0.986 0.986 0 0 1 0.986 -0.986\"/>\n <path d=\"M16.32 9.129a0.986 0.986 0 1 1 0 -1.395 0.987 0.987 0 0 1 0 1.395Z\"/>\n <path d=\"m14.254 10.64 -0.897 -0.8 1.67 -1.872 0.897 0.8Z\"/>\n <path d=\"m8.106 8.767 0.897 -0.799 1.67 1.876 -0.897 0.799z\"/>\n <path d=\"m8.974 15.981 -0.897 -0.8 1.67 -1.876 0.897 0.8Z\"/>\n <path d=\"m13.357 14.104 0.897 -0.799 1.67 1.876 -0.897 0.799z\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IGettingStartedIconProps extends ISvgIconProps {\n\n}\n\nexport class GettingStartedIcon extends React.Component<IGettingStartedIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\">\n <path d=\"M12.196 6.841a4.203 4.203 0 1 1 -4.2 4.2 4.208 4.208 0 0 1 4.2 -4.2Zm0 7.207a3.003 3.003 0 1 0 -3 -3.007 3.007 3.007 0 0 0 3 3.007Z\"/>\n <path d=\"M12.199 3.4a7.626 7.626 0 0 1 7.618 7.618 7.741 7.741 0 0 1 -2.379 5.53l-0.018 0.018 -5.22 5.074 -5.211 -5.066A7.618 7.618 0 0 1 12.199 3.4Zm4.374 12.315a6.523 6.523 0 0 0 2.043 -4.698 6.418 6.418 0 1 0 -10.804 4.686l0.007 0.007 4.379 4.25Z\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IBankingIconProps extends ISvgIconProps {\n\n}\n\nexport class BankingIcon extends React.Component<IBankingIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\">\n <path d=\"M6 6.426a0.4 0.4 0 0 0 -0.4 0.4v9.6a0.4 0.4 0 0 0 0.4 0.4h12a0.4 0.4 0 0 0 0.4 -0.4v-9.6a0.4 0.4 0 0 0 -0.4 -0.4h-12m0 -1.2h12a1.6 1.6 0 0 1 1.6 1.6v9.6a1.6 1.6 0 0 1 -1.6 1.6h-12a1.6 1.6 0 0 1 -1.6 -1.6v-9.6a1.6 1.6 0 0 1 1.6 -1.6Z\"/>\n <path d=\"M19.081 10.334H4.8v-1.2h14.281Z\"/>\n <path d=\"M9.409 15.134h-2.208v-1.2h2.208Z\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ILiveChatIconProps extends ISvgIconProps {\n\n}\n\nexport class LiveChatIcon extends React.Component<ILiveChatIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\">\n <path d=\"M18.196 9.923h-1.2v-1.458a3.445 3.445 0 0 0 -1.425 -2.686 5.81 5.81 0 0 0 -3.61 -1.181 5.81 5.81 0 0 0 -3.609 1.18 3.445 3.445 0 0 0 -1.425 2.686v1.458h-1.2v-1.458c0 -2.794 2.796 -5.066 6.234 -5.066s6.234 2.272 6.234 5.066Z\"/>\n <path d=\"M10.96 20.176a4.845 4.845 0 0 1 -4.839 -4.839h1.2A3.643 3.643 0 0 0 10.96 18.976Z\"/>\n <path d=\"M11.75 17.921a1.617 1.617 0 1 1 -1.617 1.617 1.619 1.619 0 0 1 1.617 -1.617Zm0 2.034a0.417 0.417 0 1 0 -0.417 -0.418 0.418 0.418 0 0 0 0.417 0.418Z\"/>\n <path d=\"M4.8 9.728a0.4 0.4 0 0 0 -0.4 0.4v3.6a0.4 0.4 0 0 0 0.4 0.4h0.577a0.4 0.4 0 0 0 0.4 -0.4v-3.6a0.4 0.4 0 0 0 -0.4 -0.4H4.8m0 -1.2h0.577a1.6 1.6 0 0 1 1.6 1.6v3.6a1.6 1.6 0 0 1 -1.6 1.6H4.8a1.6 1.6 0 0 1 -1.6 -1.6v-3.6a1.6 1.6 0 0 1 1.6 -1.6Z\"/>\n <path d=\"M18.395 9.728a0.4 0.4 0 0 0 -0.4 0.4v3.6a0.4 0.4 0 0 0 0.4 0.4h0.577a0.4 0.4 0 0 0 0.4 -0.4v-3.6a0.4 0.4 0 0 0 -0.4 -0.4h-0.577m0 -1.2h0.577a1.6 1.6 0 0 1 1.6 1.6v3.6a1.6 1.6 0 0 1 -1.6 1.6h-0.577a1.6 1.6 0 0 1 -1.6 -1.6v-3.6a1.6 1.6 0 0 1 1.6 -1.6Z\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IDownloadAppIconProps extends ISvgIconProps {\n\n}\n\nexport class DownloadAppIcon extends React.Component<IDownloadAppIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\">\n <path d=\"M17.104 17.943H7.198a1.813 1.813 0 0 1 -1.81 -1.81V13.624a0.6 0.6 0 0 1 1.2 0v2.508a0.611 0.611 0 0 0 0.61 0.61H17.104a0.611 0.611 0 0 0 0.61 -0.61V13.624a0.6 0.6 0 0 1 1.2 0v2.508a1.813 1.813 0 0 1 -1.81 1.811Z\"/>\n <path d=\"M12.152 13.418a0.6 0.6 0 0 1 -0.6 -0.6V6.022a0.6 0.6 0 0 1 0.6 -0.6 0.6 0.6 0 0 1 0.6 0.6v6.795a0.6 0.6 0 0 1 -0.6 0.6Z\"/>\n <path d=\"M12.15 14.561a0.598 0.598 0 0 1 -0.419 -0.17l-2.758 -2.694a0.6 0.6 0 1 1 0.838 -0.859l2.34 2.285 2.34 -2.284a0.6 0.6 0 0 1 0.838 0.858l-2.759 2.694a0.598 0.598 0 0 1 -0.419 0.17Z\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IClub888IconProps extends ISvgIconProps {\n\n}\n\nexport class Club888Icon extends React.Component<IClub888IconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\">\n <path d=\"M3.749,5.431c2.07,0,3.749,1.678,3.749,3.749s-1.678,3.749-3.749,3.749S0,11.25,0,9.18c0,0,0,0,0,0\n C0.002,7.11,1.679,5.433,3.749,5.431z M3.749,11.035c1.025,0,1.855-0.831,1.855-1.856c0-1.025-0.831-1.855-1.855-1.855\n S1.893,8.155,1.893,9.18l0,0C1.895,10.204,2.725,11.033,3.749,11.035z\"/>\n <path d=\"M3.749,11.071c2.07,0,3.749,1.678,3.749,3.749s-1.678,3.749-3.749,3.749S0,16.891,0,14.82\n C0.002,12.751,1.679,11.073,3.749,11.071z M3.749,16.676c1.025,0,1.855-0.831,1.855-1.856c0-1.025-0.831-1.855-1.855-1.855\n s-1.855,0.831-1.855,1.856l0,0C1.895,15.844,2.725,16.674,3.749,16.676z\"/>\n <path d=\"M12.001,5.431c2.07,0,3.749,1.678,3.749,3.749s-1.678,3.749-3.749,3.749S8.252,11.25,8.252,9.18v0\n C8.254,7.11,9.931,5.433,12.001,5.431z M12.001,11.035c1.025,0,1.856-0.831,1.856-1.855s-0.831-1.855-1.855-1.855\n s-1.856,0.831-1.856,1.855v0C10.147,10.204,10.977,11.033,12.001,11.035z\"/>\n <path d=\"M12.001,11.071c2.07,0,3.749,1.678,3.749,3.749s-1.678,3.749-3.749,3.749s-3.749-1.678-3.749-3.749\n C8.254,12.751,9.931,11.073,12.001,11.071z M12.001,16.676c1.025,0,1.856-0.831,1.856-1.855s-0.831-1.856-1.855-1.856\n s-1.856,0.831-1.856,1.855v0C10.147,15.844,10.977,16.674,12.001,16.676z\"/>\n <path d=\"M20.251,5.431C22.322,5.431,24,7.109,24,9.18s-1.678,3.749-3.749,3.749s-3.749-1.678-3.749-3.749c0,0,0,0,0,0\n C16.504,7.11,18.181,5.433,20.251,5.431z M20.251,11.035c1.025,0,1.855-0.831,1.855-1.856c0-1.025-0.831-1.855-1.855-1.855\n c-1.025,0-1.855,0.831-1.855,1.855C18.397,10.204,19.227,11.033,20.251,11.035z\"/>\n <path d=\"M20.251,11.071c2.07,0,3.749,1.678,3.749,3.749s-1.678,3.749-3.749,3.749s-3.749-1.678-3.749-3.749l0,0\n C16.504,12.751,18.181,11.073,20.251,11.071z M20.251,16.676c1.025,0,1.855-0.831,1.855-1.856c0-1.025-0.831-1.855-1.855-1.855\n c-1.025,0-1.855,0.831-1.855,1.856C18.397,15.844,19.227,16.674,20.251,16.676z\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IPokerCircleIconProps extends ISvgIconProps {\n\n}\n\nexport class PokerCircleIcon extends React.Component<IPokerCircleIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g>\n <path d=\"M12 2.4A9.6 9.6 0 1 1 2.4 12 9.611 9.611 0 0 1 12 2.4Zm0 13.803A4.203 4.203 0 1 0 7.8 12 4.208 4.208 0 0 0 12 16.2Z\" fill=\"#0080ff\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface ISportCircleIconProps extends ISvgIconProps {\n\n}\n\nexport class SportCircleIcon extends React.Component<ISportCircleIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g>\n <path d=\"M12 2.4A9.6 9.6 0 1 1 2.4 12 9.611 9.611 0 0 1 12 2.4Zm0 13.803A4.203 4.203 0 1 0 7.8 12 4.208 4.208 0 0 0 12 16.2Z\" fill=\"#fa6200\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IVideoPokerIconProps extends ISvgIconProps {\n\n}\n\nexport class VideoPokerIcon extends React.Component<IVideoPokerIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\">\n <path d=\"M11.255 7.062h7.354a1.402 1.402 0 0 1 1.4 1.4v11.686a1.402 1.402 0 0 1 -1.4 1.4h-7.354a1.402 1.402 0 0 1 -1.4 -1.4V8.462a1.402 1.402 0 0 1 1.4 -1.4Zm7.354 13.286a0.2 0.2 0 0 0 0.2 -0.2V8.462a0.2 0.2 0 0 0 -0.2 -0.2h-7.354a0.2 0.2 0 0 0 -0.2 0.2v11.686a0.2 0.2 0 0 0 0.2 0.2Z\"/>\n <path d=\"M8.734 17.39a0.6 0.6 0 0 1 -0.534 -0.324L3.564 8.11a1.469 1.469 0 0 1 0.628 -1.976l6.51 -3.371a1.469 1.469 0 0 1 1.976 0.628l0.871 1.68a0.6 0.6 0 1 1 -1.066 0.552l-0.872 -1.68a0.269 0.269 0 0 0 -0.358 -0.114L4.744 7.2a0.269 0.269 0 0 0 -0.114 0.359l4.64 8.955a0.6 0.6 0 0 1 -0.532 0.876Z\"/>\n <path d=\"m12.486 10.879 -0.32 0.974h-0.413l1.053 -3.098h0.48l1.057 3.098h-0.43l-0.331 -0.974Zm1.016 -0.313 -0.303 -0.892c-0.069 -0.202 -0.114 -0.386 -0.16 -0.566h-0.009c-0.046 0.184 -0.097 0.372 -0.16 0.56l-0.303 0.896Z\"/>\n <path d=\"M14.483 11.954h-0.64l-0.33 -0.974h-0.954l-0.32 0.974h-0.626l1.12 -3.298h0.626Zm-0.495 -0.2h0.216l-0.989 -2.898h-0.342l-0.985 2.898h0.202l0.32 -0.974h1.242Zm-0.346 -1.087h-1.213l0.348 -1.028c0.051 -0.16 0.1 -0.336 0.154 -0.553l0.022 -0.078h0.16l0.03 0.119c0.042 0.16 0.086 0.332 0.147 0.514Zm-0.934 -0.2h0.654l-0.258 -0.759c-0.026 -0.08 -0.05 -0.153 -0.07 -0.226 -0.022 0.08 -0.044 0.15 -0.066 0.219Z\"/>\n <path d=\"m6.374 6.522 0.417 -0.195 1.013 2.16c0.4 0.858 0.104 1.318 -0.452 1.578a1.492 1.492 0 0 1 -0.48 0.133l-0.098 -0.37a1.101 1.101 0 0 0 0.379 -0.102c0.374 -0.175 0.515 -0.446 0.219 -1.078Z\"/>\n <path d=\"m6.839 6.198 1.055 2.25a1.422 1.422 0 0 1 0.137 1.09 1.148 1.148 0 0 1 -0.64 0.622 1.58 1.58 0 0 1 -0.518 0.142l-0.08 0.004 -0.146 -0.568 0.121 -0.008a1.006 1.006 0 0 0 0.343 -0.093c0.31 -0.146 0.448 -0.355 0.17 -0.945l-1.04 -2.218Zm0.106 3.895a1.529 1.529 0 0 0 0.364 -0.114 0.946 0.946 0 0 0 0.534 -0.51 1.238 1.238 0 0 0 -0.13 -0.936L6.743 6.463l-0.235 0.11 0.954 2.036c0.289 0.615 0.206 0.989 -0.267 1.211a1.234 1.234 0 0 1 -0.296 0.095Z\"/>\n <path d=\"M13.467 18.292a1.706 1.706 0 0 1 -0.414 -0.051 1.662 1.662 0 0 1 -1.156 -1.026 1.833 1.833 0 0 1 0.182 -1.674 6.1 6.1 0 0 1 1.299 -1.28 7.637 7.637 0 0 0 1.175 -1.096 0.48 0.48 0 0 1 0.75 0.598 8.352 8.352 0 0 1 -1.321 1.243 5.468 5.468 0 0 0 -1.103 1.063 0.872 0.872 0 0 0 -0.088 0.795 0.709 0.709 0 0 0 0.494 0.443 0.732 0.732 0 0 0 0.752 -0.257 0.48 0.48 0 1 1 0.708 0.648 1.724 1.724 0 0 1 -1.278 0.593Z\"/>\n <path d=\"M16.39 18.292a1.724 1.724 0 0 1 -1.28 -0.592 0.48 0.48 0 1 1 0.708 -0.648 0.732 0.732 0 0 0 0.752 0.257 0.709 0.709 0 0 0 0.494 -0.443 0.872 0.872 0 0 0 -0.088 -0.795 5.17 5.17 0 0 0 -1.1 -1.062 7.981 7.981 0 0 1 -1.322 -1.247 0.48 0.48 0 1 1 0.75 -0.598 7.243 7.243 0 0 0 1.174 1.094 5.933 5.933 0 0 1 1.3 1.28 1.833 1.833 0 0 1 0.182 1.674 1.662 1.662 0 0 1 -1.156 1.031 1.706 1.706 0 0 1 -0.414 0.05Z\"/>\n <path d=\"M15.409 19.258h-0.96v-1.323h0.96Z\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IDepositIconProps extends ISvgIconProps {\n\n}\n\nexport class DepositIcon extends React.Component<IDepositIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 19 18\" fill=\"none\">\n <path d=\"M17.1158 7.84667V6.06232C17.1158 5.13188 16.3262 4.37464 15.3548 4.37464H13.0832L9.28824 1.14198C9.18072 1.05051 9.04197 1 8.89824 1C8.75451 1 8.61576 1.05051 8.50824 1.14198L4.71324 4.37464H3.22464C1.60644 4.37464 0.290039 5.63652 0.290039 7.18725V13.9374C0.290039 15.4881 1.60644 16.75 3.22464 16.75H15.3548C16.3256 16.75 17.1158 15.9928 17.1158 15.0623V13.278C17.7992 13.0461 18.29 12.4206 18.29 11.687V9.43711C18.29 8.70403 17.7992 8.07914 17.1158 7.84667ZM8.89884 2.31467L11.3168 4.37464H6.48024L8.89884 2.31467ZM15.9422 15.0623C15.9422 15.3725 15.6788 15.6245 15.3554 15.6245H3.22464C2.25384 15.6245 1.46364 14.8673 1.46364 13.9368V7.18725C1.46364 6.25681 2.25384 5.49957 3.22464 5.49957H15.3548C15.6782 5.49957 15.9416 5.75217 15.9416 6.06175V7.74943H14.1806C12.5624 7.74943 11.246 9.0113 11.246 10.562C11.246 12.1128 12.5624 13.3746 14.1806 13.3746H15.9416L15.9422 15.0623ZM17.1158 11.6875C17.1158 11.9977 16.8524 12.2503 16.529 12.2503H14.1812C13.2104 12.2503 12.4202 11.493 12.4202 10.5626C12.4202 9.63217 13.2104 8.87493 14.1812 8.87493H16.529C16.8524 8.87493 17.1158 9.12753 17.1158 9.43711V11.6875ZM14.1812 9.99986C13.8572 9.99986 13.5944 10.2519 13.5944 10.5626C13.5944 10.8733 13.8572 11.1248 14.1812 11.1248C14.5052 11.1248 14.768 10.8728 14.768 10.5626C14.768 10.2519 14.5052 9.99986 14.1812 9.99986Z\" fill=\"currentColor\"/>\n </SvgIcon>\n );\n }\n}\n","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport interface IFreePlayIconProps extends ISvgIconProps {\n\n}\n\nexport class FreePlayIcon extends React.Component<IFreePlayIconProps> {\n render() {\n return (\n <SvgIcon viewBox=\"0 0 30 30\" {...this.props}>\n <path d=\"M27.075 8.91966H21.575C21.9216 8.69109 22.2463 8.43098 22.545 8.14266C23.2181 7.46182 23.5956 6.54305 23.5956 5.58566C23.5956 4.62827 23.2181 3.70949 22.545 3.02866C21.8601 2.36872 20.9461 2 19.995 2C19.0439 2 18.1299 2.36872 17.445 3.02866C16.692 3.78566 14.692 6.86266 14.968 8.91966H14.843C15.117 6.86366 13.119 3.78466 12.366 3.02866C11.6811 2.36872 10.7671 2 9.816 2C8.86492 2 7.95087 2.36872 7.266 3.02866C6.59315 3.70962 6.21582 4.62835 6.21582 5.58566C6.21582 6.54297 6.59315 7.4617 7.266 8.14266C7.56583 8.43052 7.89117 8.69059 8.238 8.91966H2.738C2.27712 8.92045 1.83537 9.10395 1.50957 9.42994C1.18378 9.75592 1.00053 10.1978 1 10.6587V15.0017C1 15.2324 1.09166 15.4537 1.25482 15.6168C1.41797 15.78 1.63926 15.8717 1.87 15.8717H2.74V26.3017C2.74026 26.7627 2.9234 27.2048 3.24922 27.531C3.57504 27.8572 4.01695 28.0409 4.478 28.0417H25.338C25.799 28.0409 26.241 27.8572 26.5668 27.531C26.8926 27.2048 27.0757 26.7627 27.076 26.3017V15.8737H27.946C28.1767 15.8737 28.398 15.782 28.5612 15.6188C28.7243 15.4557 28.816 15.2344 28.816 15.0037V10.6587C28.8147 10.1975 28.6308 9.75565 28.3045 9.42975C27.9782 9.10386 27.5362 8.92045 27.075 8.91966ZM16.746 8.86266C16.346 8.44366 17.507 5.43366 18.679 4.25366C19.0329 3.91328 19.5049 3.72315 19.996 3.72315C20.4871 3.72315 20.9591 3.91328 21.313 4.25366C21.662 4.60896 21.8576 5.0871 21.8576 5.58516C21.8576 6.08322 21.662 6.56136 21.313 6.91666C20.113 7.96611 18.6432 8.65889 17.07 8.91666C16.9587 8.93028 16.8459 8.91043 16.746 8.85966M8.5 6.91766C8.15097 6.56236 7.9554 6.08422 7.9554 5.58616C7.9554 5.0881 8.15097 4.60996 8.5 4.25466C8.67215 4.08047 8.87716 3.94219 9.10315 3.8478C9.32913 3.75342 9.5716 3.70482 9.8165 3.70482C10.0614 3.70482 10.3039 3.75342 10.5299 3.8478C10.7558 3.94219 10.9608 4.08047 11.133 4.25466C12.305 5.43266 13.469 8.44466 13.064 8.86366C12.9645 8.91348 12.8526 8.93328 12.742 8.92066C11.1693 8.6622 9.70006 7.9695 8.5 6.92066M2.738 10.6587H14.038V14.1357H2.738V10.6587ZM4.476 15.8737H14.037V26.3017H4.477V15.8737M25.336 26.3017H15.776V15.8737H25.336V26.3017ZM27.074 14.1337H15.774V10.6587H27.074V14.1337Z\" fill=\"currentColor\"/>\n </SvgIcon>\n );\n }\n}","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport interface INotificationIconProps extends ISvgIconProps {\n\n}\n\nexport class NotificationIcon extends React.Component<INotificationIconProps> {\n render() {\n return (\n <SvgIcon viewBox=\"0 0 52 52\" {...this.props}>\n <g stroke=\"currentColor\" strokeWidth=\"4.0\" strokeLinejoin=\"round\" fill=\"none\">\n <path stroke=\"null\" d=\"m30.46234,46.08066c0,1.81614 -1.9091,3.28845 -4.26418,3.28845s-4.2659,-1.47231 -4.2659,-3.28845\"/>\n <path stroke=\"null\" d=\"m26.88256,4.12778l0,2.80532\" strokeLinecap=\"round\"/>\n <path stroke=\"null\" strokeLinecap=\"round\" d=\"m37.98898,19.64609a11.79253,12.12231 0 0 0 -23.58507,0l0,7.67188a17.08074,17.55839 0 0 1 -5.36024,12.05707l0,2.19171l34.30556,0l0,-2.19171a17.08074,17.55839 0 0 1 -5.36024,-12.05707l0,-7.67188z\"/>\n </g>\n </SvgIcon>\n );\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class HelpCenterIcon extends React.Component<ISvgIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"currentColor\">\n <path d=\"M12.7,13c-0.1-0.1-0.2-0.2-0.3-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.1,0-0.2,0-0.4,0.1c-0.1,0-0.2,0.1-0.3,0.2\n c-0.1,0.1-0.2,0.2-0.2,0.3c0,0.1-0.1,0.2-0.1,0.3c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.2,0.3c0.2,0.2,0.4,0.3,0.7,0.2\n c0.1,0,0.2,0,0.3-0.1s0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.2-0.3c0-0.1,0.1-0.2,0.1-0.3s0-0.2-0.1-0.3C12.8,13.2,12.7,13.1,12.7,13z\"\n />\n <path d=\"M9.8,7.8C9.9,7.9,10.1,8,10.3,8s0.3-0.1,0.4-0.2C11,7.3,11.5,7.1,12,6.9c0.1,0,0.3,0,0.4,0c0.1,0,0.2,0.1,0.4,0.2\n c0.1,0.1,0.2,0.2,0.2,0.3c0.1,0.1,0.1,0.3,0.1,0.4c0,0.2,0,0.3-0.1,0.5s-0.1,0.3-0.3,0.4S12.5,8.9,12.4,9C12.2,9,12.1,9,11.9,9\n c-0.2,0-0.3,0.1-0.5,0.2s-0.2,0.3-0.2,0.5v1.1c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.3,0.2,0.5,0.3c0.2,0,0.4-0.1,0.5-0.3\n s0.2-0.3,0.2-0.5v-0.3c0-0.1,0-0.2,0.1-0.2c0-0.1,0.1-0.1,0.2-0.1c0.5-0.2,1-0.6,1.3-1.2c0.3-0.5,0.4-1.1,0.2-1.7\n c-0.1-0.6-0.4-1.1-0.9-1.5c-0.5-0.4-1-0.6-1.6-0.6c-0.5,0-0.9,0.2-1.3,0.4c-0.4,0.2-0.7,0.5-1,0.9C9.5,6.8,9.4,7,9.5,7.2\n S9.6,7.7,9.8,7.8L9.8,7.8z\"/>\n <path d=\"M20,0.2H4c-2.2,0-4,1.8-4,4l0,11.6c0,2.2,1.8,4,4,4h0c0,0.9,0,2.7,0,3.1C4,23,4,23.1,4,23.2c0,0.1,0.1,0.2,0.2,0.3\n c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0,0.2,0.1,0.3,0.1c0,0,0.1,0,0.1,0c0.5,0,0.9-0.2,1.2-0.4c0.5-0.3,1-1,1.6-1.7c0.6-0.7,1.3-1.5,1.9-2\n l10.3,0c2.2,0,4-1.8,4-4l0-11.5C24,2,22.2,0.2,20,0.2z M22.5,1.6L22.5,1.6L22.5,1.6L22.5,1.6C22.5,1.6,22.5,1.6,22.5,1.6z\n M22.3,4.3v11.2c0,1.4-1.1,2.5-2.5,2.5H9.2l-0.4,0.3C8,19,7.2,19.8,6.5,20.7c-0.3,0.4-0.6,0.7-0.9,1c0-0.8,0-1.8,0-2.3l0-1.4\n l-1.4,0c-1.4,0-2.5-1.1-2.5-2.5V4.3c0-1.4,1.1-2.5,2.5-2.5h15.7C21.2,1.8,22.3,2.9,22.3,4.3z\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class WarningSignIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 66 66\">\n <path d=\"M29.464,57.006a27.506,27.506,0,1,1,27.5-25.355,1.228,1.228,0,1,1-2.447-.193A25.1,25.1,0,1,0,37.961,53.073a24.75,24.75,0,0,0,14.41-13.448v-.22a1.213,1.213,0,1,1,2.227.963v.247a27.641,27.641,0,0,1-25.135,16.39Z\" transform=\"translate(3.536 3.494)\" fill={\"currentColor\"}/>\n <path d=\"M13.768,21.61a2.75,2.75,0,0,1-1.98-.8,2.585,2.585,0,0,1-.8-1.952,2.75,2.75,0,0,1,2.75-2.75,2.475,2.475,0,0,1,1.9.825,2.626,2.626,0,0,1,0,3.823,2.557,2.557,0,0,1-1.87.852Z\" transform=\"translate(19.231 28.192)\" fill={\"currentColor\"}/>\n <path d=\"M14.433,30.346c-1.843,0-1.843-1.183-1.87-1.6L10.611,9.5a3.52,3.52,0,0,1,3.823-3.6,3.492,3.492,0,0,1,3.795,3.52L16.3,28.668C16.248,29.163,16.276,30.346,14.433,30.346Z\" transform=\"translate(18.566 10.3)\" fill={\"currentColor\"}/>\n <path d=\"M14.433,8.346a1.568,1.568,0,0,1,1.21.468.5.5,0,0,1,.165.358l-1.375,13.75L13.058,9.171a.385.385,0,0,1,.138-.22,1.65,1.65,0,0,1,1.237-.6m0-2.448a3.52,3.52,0,0,0-3.823,3.52l1.952,19.25c0,.412,0,1.6,1.87,1.6s1.815-1.183,1.87-1.6l1.925-19.25a3.493,3.493,0,0,0-3.8-3.52Z\" transform=\"translate(18.567 10.3)\" fill={\"currentColor\"}/>\n </SvgIcon>\n );\n }\n}\n\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IUSAMapIconProps extends ISvgIconProps {\ncolor: string;\n}\n\nexport class USAMapIcon extends React.Component<IUSAMapIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 800 750\">\n <defs\n id=\"defs60\" />\n <path\n d=\"M 805.21607,266.06202 L 805.41802,265.40356 L 809.72912,265.34184 L 812.80066,266.31181 L 814.90225,266.63513 L 815.87221,264.53354 L 814.41727,262.43196 L 814.41727,260.65369 L 811.99236,258.5521 L 809.89078,253.05565 L 811.18406,247.72085 L 811.0224,245.61927 L 809.72912,244.32598 C 809.72912,244.32598 811.18406,242.70938 811.18406,242.06274 C 811.18406,241.41609 811.66904,239.96115 811.66904,239.96115 L 813.60897,238.66787 L 815.54889,237.05126 L 816.03387,238.02123 L 814.57893,239.63783 L 813.28565,243.35602 L 813.60897,244.48764 L 815.38723,244.81096 L 815.87221,250.30742 L 813.77063,251.27738 L 814.09395,254.83391 L 814.57893,254.67225 L 815.71055,252.73233 L 817.32716,254.51059 L 815.71055,255.80388 L 815.38723,259.19875 L 817.9738,262.59362 L 821.85365,263.0786 L 823.47026,262.2703 L 826.70681,266.45323 L 828.06516,266.98953 L 828.76271,267.29867 L 828.90662,269.2457 L 828.13975,272.34331 L 826.55275,276.52638 L 826.10686,281.97549 L 827.5772,286.6163 L 829.74147,284.70016 L 831.56944,279.722 L 831.10769,276.33156 L 831.52578,271.74574 L 834.44573,267.96663 L 835.21614,264.74879 L 834.71883,264.19258 L 836.72641,260.16871 L 836.95336,255.30492 L 836.7274,254.59089 L 834.46317,247.23587 L 833.4932,247.72085 L 829.93667,245.29595 L 828.15841,240.60779 L 826.21848,237.05126 L 823.95524,236.0813 L 821.85365,232.52477 L 822.35259,230.42318 L 822.86297,230.92722 L 823.95524,233.17141 L 827.18845,236.0813 L 832.03826,238.34455 L 836.07977,238.99119 L 836.24143,240.44613 L 835.43313,241.41609 L 835.75645,244.16432 L 836.56475,244.16432 L 838.66634,241.73942 L 839.47464,236.8896 L 842.22287,232.84809 L 845.29442,226.38167 L 846.42604,220.88522 L 845.7794,219.75359 L 845.61774,210.37728 L 844.00113,206.98242 L 842.86951,207.79072 L 840.12128,208.11404 L 839.6363,207.62906 L 840.76793,206.65909 L 842.86951,204.71917 L 842.93257,203.62534 L 843.47304,203.5396 L 844.64778,204.07253 L 848.68929,202.9409 L 854.50907,201.00098 L 857.09563,200.03101 L 864.20869,194.69622 L 868.08854,191.78633 L 871.48341,188.2298 L 867.28024,186.6132 L 865.98696,188.06814 L 863.07707,190.81637 L 855.15571,194.69622 L 852.89246,194.53456 L 851.27586,193.88792 L 850.14423,194.53456 L 847.88099,197.12113 L 846.42604,198.41441 L 845.13276,198.73773 L 844.80944,197.44445 L 846.74936,195.66618 L 845.95281,193.98776 L 846.96715,194.21757 L 851.9225,190.81637 L 855.47903,187.58316 L 857.41895,185.48157 L 858.22726,186.12821 L 860.97548,184.67327 L 866.14862,183.54165 L 873.19331,180.05038 L 874.07001,179.82344 L 876.97987,178.85349 L 879.40478,176.91357 L 880.5364,175.1353 L 881.82968,175.29696 L 884.74063,173.76056 L 885.25981,173.3875 L 887.32614,172.38707 L 886.84116,170.12383 L 887.64946,168.66888 L 890.55935,167.21394 L 891.36765,170.28549 L 890.88267,172.06375 L 888.45776,173.5187 L 888.45776,174.48866 L 890.39769,173.03372 L 894.27754,168.50722 L 898.15739,166.5673 L 902.36056,165.11235 L 902.03724,162.68745 L 901.06728,159.77756 L 899.12735,157.35265 L 897.34909,156.54435 L 895.2475,156.70601 L 894.76252,157.19099 L 895.73248,158.48427 L 897.18743,157.67597 L 899.28901,159.29258 L 900.09732,162.0408 L 898.31905,163.81907 L 896.05581,164.78903 L 892.49928,164.30405 L 888.61942,158.32261 L 886.35618,155.73605 L 884.57791,155.73605 L 883.44629,156.54435 L 881.50636,153.95778 L 881.82968,152.50284 L 884.25459,147.3297 L 881.36535,142.91686 L 880.79902,142.42476 L 881.66802,141.34826 L 882.75824,138.05724 L 883.13131,136.93803 L 884.25459,130.67867 L 884.41625,126.31384 L 885.8712,125.02056 L 884.90123,121.78735 L 887.97278,118.23082 L 889.58939,119.68576 L 890.88267,119.20078 L 896.21747,116.12923 L 896.54079,113.21934 L 899.45068,112.73436 L 901.06728,110.14779 L 900.90562,108.53119 L 900.5823,105.45964 L 901.3906,104.16636 L 901.06728,103.03473 L 899.774,101.57979 L 901.87558,100.28651 L 903.65385,103.51972 L 905.10879,103.19639 L 905.43211,104.48968 L 905.43211,106.10628 L 907.37204,106.26794 L 907.85702,103.51972 L 908.342,102.87307 L 906.7254,101.41813 L 907.69536,99.963185 L 910.12027,98.508241 L 911.09023,97.053296 L 912.86849,96.891636 C 912.86849,96.891636 913.19182,98.993222 913.83846,98.993222 C 914.4851,98.993222 915.13174,98.993222 915.13174,98.993222 L 919.98155,93.496766 L 923.37642,90.425217 L 925.31635,89.778575 L 927.41794,85.090422 L 927.41794,83.150496 L 925.15469,79.432305 L 923.21476,77.330719 L 920.46654,77.49238 L 920.95152,78.624003 L 920.78986,79.108984 L 919.98155,79.108984 L 917.07167,76.845738 L 916.91001,71.995924 L 916.1017,70.055998 L 910.12027,70.055998 L 901.06728,40.148811 L 899.12735,39.178849 L 893.14592,36.753942 L 891.69097,36.592281 L 889.91271,38.370546 L 885.8712,41.280435 L 885.8712,42.250397 L 885.06289,43.0587 L 882.31467,42.412058 L 881.02138,40.148811 L 881.02138,39.017188 L 879.7281,38.855528 L 878.43481,38.855528 L 876.33323,43.0587 L 873.42334,51.950026 L 871.64507,56.79984 L 871.80674,61.649654 L 871.9684,63.104598 L 871.16009,65.852826 L 870.35179,66.822789 L 870.35179,72.804226 L 872.29172,75.229133 L 870.83677,79.270645 L 868.2502,83.958798 L 867.4419,89.455254 L 867.4419,92.041822 L 865.92811,91.631923 L 864.50757,91.750088 L 863.65083,92.208542 L 862.75375,92.203482 L 862.10711,93.820087 L 861.46047,93.335106 L 860.4905,92.365143 L 859.03556,94.305068 L 858.98709,99.337122 L 858.06661,99.63916 L 831.81913,106.3866 L 831.19711,106.78334 L 823.63192,108.85451 L 819.10542,110.30945 L 815.87221,110.14779 L 810.37576,111.44108 L 807.2944,112.68702 L 804.8793,114.51263 L 802.77772,116.93753 L 800.02949,120.65572 L 797.1196,125.18222 L 795.66465,128.09211 L 795.01801,128.90041 L 789.19824,134.39686 L 789.3599,136.98343 L 790.1682,138.11506 L 791.94646,138.92336 L 793.72473,138.92336 L 793.72473,140.3783 L 792.59311,142.47989 L 792.91643,143.93483 L 794.37137,146.03642 L 794.20971,148.29966 L 792.26978,149.43129 L 790.1682,149.43129 L 788.55159,151.37121 L 786.77333,154.60442 L 784.67174,156.38269 L 779.49861,156.86767 L 776.91204,157.99929 L 774.81045,159.29258 L 773.19385,159.13092 L 771.25392,157.83763 L 764.94917,157.99929 L 761.71596,158.48427 L 757.67444,159.77756 L 753.30961,161.2325 L 750.39972,163.01077 L 752.33965,169.15387 L 754.11791,169.31553 L 755.4112,172.38707 L 755.57286,173.35704 L 754.44123,174.327 L 752.33965,177.07523 L 751.85467,178.69183 L 749.91474,180.4701 L 748.13648,181.60172 L 747.16651,183.21833 L 745.87323,184.34995 L 744.44513,185.47533 L 743.4394,185.99452 L 737.95187,191.62467 L 736.65858,192.10965 L 732.45629,195.11854 L 731.43589,195.0077 L 725.34235,199.06105 L 721.4625,201.3243 L 718.06763,205.04249 L 714.02612,208.92234 L 710.79291,209.73064 L 707.88302,210.21562 L 702.38656,212.80219 L 700.28498,212.96385 L 696.89011,209.8923 L 691.71697,210.53895 L 689.13041,209.084 L 686.74934,207.73317 L 685.59749,207.4083 L 685.73554,206.82075 L 685.8972,205.36581 L 687.99878,201.64762 L 689.99934,199.90977 L 689.77705,194.85788 L 691.37404,193.26089 L 692.46466,192.91795 L 692.68694,189.36142 L 694.22271,186.3303 L 695.2735,186.93652 L 695.43516,187.58316 L 696.24347,187.74482 L 698.18339,186.77486 L 697.86007,177.23689 L 694.62686,168.9922 L 692.36361,159.93922 L 689.93871,156.70601 L 687.35214,154.92774 L 685.73554,156.05937 L 681.85568,157.83763 L 679.91576,162.84911 L 677.16753,166.5673 L 676.03591,167.21394 L 674.58096,166.5673 C 674.58096,166.5673 671.9944,165.11235 672.15606,164.46571 C 672.31772,163.81907 672.64104,159.45424 672.64104,159.45424 L 676.03591,158.16095 L 676.84421,154.76608 L 677.49085,152.17952 L 679.91576,150.56291 L 679.59244,140.53996 L 677.97583,138.27672 L 676.68255,137.46841 L 675.87425,135.36683 L 676.68255,134.55853 L 678.29915,134.88185 L 678.46081,133.26524 L 676.03591,131.00199 L 674.74262,128.41543 L 672.15606,128.41543 L 667.62956,126.96048 L 662.13311,123.56561 L 659.38488,123.56561 L 658.73824,124.21226 L 657.76827,123.72727 L 654.69673,121.46403 L 651.78684,123.24229 L 648.87695,125.50554 L 649.20027,129.06207 L 650.17023,129.38539 L 652.27182,129.87037 L 652.7568,130.67867 L 650.17023,131.48698 L 647.58367,131.8103 L 646.12872,133.58856 L 645.8054,135.69015 L 646.12872,137.30675 L 646.45204,142.80321 L 642.89551,144.9048 L 642.24887,144.74313 L 642.24887,140.53996 L 643.54215,138.11506 L 644.1888,135.69015 L 643.38049,134.88185 L 641.44057,135.69015 L 640.4706,139.89332 L 637.72238,141.02494 L 635.94411,142.96487 L 635.78245,143.93483 L 636.42909,144.74313 L 635.78245,147.3297 L 633.5192,147.81468 L 633.5192,148.94631 L 634.32751,151.37121 L 633.19588,157.51431 L 631.57928,161.55582 L 632.22592,166.24398 L 632.7109,167.3756 L 631.9026,169.80051 L 631.57928,170.60881 L 631.25596,173.35704 L 634.81249,179.33847 L 637.72238,185.80489 L 639.17732,190.65471 L 638.36902,195.34286 L 637.39906,201.3243 L 634.97415,206.49743 L 634.65083,209.24566 L 631.39196,212.33081 L 630.36734,213.12513 L 627.53777,214.74212 L 625.43618,216.68204 L 624.30456,217.00536 L 622.84961,216.0354 L 619.77855,215.14589 L 618.91895,215.34019 L 618.64644,214.4188 L 617.83814,211.83223 L 616.54486,208.11404 L 614.92825,206.33577 L 613.47331,203.74921 L 613.23974,198.26025 L 612.94089,197.18116 L 613.31165,194.21124 L 611.69504,189.68474 L 611.0484,183.54165 L 609.91678,181.11674 L 610.88674,178.04519 L 611.69504,175.1353 L 613.14999,172.54874 L 612.50334,169.15387 L 611.8567,165.59734 L 612.34168,163.81907 L 614.28161,161.39416 L 614.44327,158.64593 L 613.63497,157.35265 L 614.28161,154.76608 L 614.76659,151.53287 L 617.51482,145.87476 L 620.42471,139.08502 L 620.58637,136.82177 L 620.26305,135.85181 L 619.45474,136.33679 L 615.25157,142.64155 L 612.50334,146.68306 L 610.56342,148.46133 L 609.75512,150.72457 L 608.30017,151.53287 L 607.16855,153.4728 L 605.7136,153.14948 L 605.55194,151.37121 L 606.84523,148.94631 L 608.94681,144.25815 L 610.72508,142.64155 L 611.8264,140.34999 L 612.39377,139.45774 L 615.57489,132.45694 L 616.54486,128.41543 L 618.48478,124.05059 L 619.29308,123.88893 L 620.42471,125.50554 L 621.07135,125.50554 L 625.59784,123.08063 L 627.05279,124.69724 L 627.53777,124.8589 L 628.83105,123.72727 L 629.96267,120.65572 L 632.38758,119.84742 L 639.33898,119.20078 L 641.27891,116.61421 L 646.45204,116.45255 L 652.27182,117.74584 L 654.05008,117.74584 L 657.28329,116.29089 L 659.54654,116.45255 L 661.64813,115.80591 L 665.36632,116.29089 L 666.17462,116.61421 L 667.4679,116.29089 L 666.17462,115.32093 L 664.88134,114.67429 L 661.64813,111.60274 L 661.64813,104.65134 L 660.19318,104.16636 L 659.06156,105.29798 L 652.91846,106.91458 L 650.97853,107.39957 L 648.06865,106.59126 L 647.58367,106.26794 L 647.58367,100.60983 L 646.12872,100.44817 L 643.54215,101.74145 L 639.01566,103.68138 L 632.38758,104.0047 L 628.99271,105.13632 L 624.9512,108.69285 L 623.33459,109.66281 L 622.20297,109.66281 L 620.90969,110.47112 L 619.29308,109.98613 L 617.67648,108.69285 L 616.22153,109.66281 L 612.34168,109.82447 L 609.59345,107.07625 L 608.13851,104.0047 L 606.68357,102.87307 L 603.45036,101.90311 L 601.18711,101.90311 L 599.89383,100.60983 L 596.3373,103.51972 L 595.36733,104.65134 L 594.55903,104.16636 L 594.88235,101.57979 L 597.30726,98.34658 L 597.79224,95.921673 L 600.05549,95.113371 L 601.51043,92.041822 L 605.22862,91.071859 L 605.55194,90.101896 L 604.42032,88.970273 L 599.73217,89.455254 L 595.36733,91.880161 L 593.10409,94.143408 L 591.8108,95.921673 L 590.03254,96.729975 L 588.09261,99.639864 L 587.93095,100.93315 L 583.56612,103.03473 L 581.14121,104.97466 L 575.15978,105.94462 L 574.51313,106.59126 L 574.51313,107.56123 L 570.9566,109.82447 L 568.20837,110.63278 L 567.49209,111.21318 L 566.47456,111.63491 L 565.94513,112.89602 L 564.81351,112.73436 L 564.16686,111.60274 L 561.41864,110.79444 L 560.28701,110.9561 L 558.50875,111.92606 L 557.53878,111.27942 L 558.18543,109.33949 L 560.12535,106.26794 L 561.25697,105.13632 L 559.31705,103.68138 L 557.21546,104.48968 L 554.30557,106.4296 L 546.86919,109.66281 L 543.9593,110.30945 L 541.04942,109.82447 L 540.06769,108.94622 L 539.63268,108.39354 L 543.47432,105.45964 L 544.76761,105.29798 L 549.2941,100.28651 L 551.07237,99.478203 L 553.33561,95.598352 L 555.76052,92.041822 L 558.83207,89.455254 L 563.60681,87.448357 L 572.85259,83.387229 L 576.79131,81.550104 L 577.40341,79.270645 L 572.9635,79.64131 L 572.24989,80.725589 L 571.60324,80.725589 L 569.82498,77.65404 L 560.93365,77.977361 L 559.96369,78.785663 L 558.99373,78.785663 L 558.50875,77.49238 L 557.70044,75.714115 L 555.11388,76.199096 L 551.88067,79.432305 L 550.26406,80.240608 L 547.19251,80.240608 L 544.60595,79.270645 L 544.60595,77.169059 L 543.31266,77.007398 L 542.82768,77.49238 L 540.24111,76.199096 L 539.75613,73.289207 L 538.30119,73.774189 L 537.81621,74.744152 L 535.3913,74.25917 L 530.0565,71.834263 L 526.17665,69.247696 L 523.26676,69.247696 L 521.97348,68.277733 L 519.71023,68.924375 L 518.57861,70.055998 L 518.25529,71.349282 L 513.40548,71.349282 L 513.40548,69.247696 L 507.10072,68.924375 L 506.7774,67.469431 L 501.92758,67.469431 L 500.31098,65.852826 L 498.85603,59.709728 L 498.04773,54.213272 L 496.10781,53.40497 L 493.84456,52.919988 L 493.19792,53.081649 L 492.8746,61.326333 L 462.74218,61.291062 L 461.64538,61.243718 L 433.22188,60.679691 L 414.63093,60.033049 L 388.11861,58.739765 L 363.17227,56.855896 L 361.88845,56.374463 L 331.21413,53.56663 L 301.95358,50.0101 L 272.69304,45.968588 L 240.36094,40.633793 L 221.93165,37.238923 L 189.208,30.306187 L 188.08467,30.145706 L 175.08853,27.617595 L 174.36801,27.215777 L 159.20739,23.821104 L 136.2516,18.162988 L 116.2057,12.504871 L 107.6377,10.564946 L 97.938071,7.8167177 L 93.573239,6.3617734 L 92.441615,7.1700758 L 92.118294,7.9783781 L 94.543201,12.828192 L 95.674825,15.41476 L 93.89656,18.97129 L 93.89656,21.234537 L 94.543201,22.689481 L 93.734899,24.467746 L 94.219881,27.700955 L 95.189843,28.994239 L 95.028183,30.287523 L 93.573239,30.449183 L 92.926597,28.509258 L 91.794974,26.084351 L 90.016708,24.629406 L 90.340029,22.52782 L 92.603276,22.042839 L 92.279955,20.264574 L 91.956634,19.13295 L 89.855048,20.426234 L 88.561764,21.557857 L 88.561764,23.982765 L 86.298518,24.144425 L 82.903645,23.174462 L 79.993756,21.719518 L 76.922205,21.072876 L 72.395712,18.97129 L 69.162503,17.031364 L 66.414275,14.444797 L 63.989368,11.534908 L 61.887782,11.049927 L 59.624535,20.426234 L 61.4028,23.659444 L 61.4028,31.580807 L 60.756158,34.490695 L 62.211103,41.603756 L 64.959331,44.351984 L 60.594498,44.998625 L 60.432837,48.716816 L 63.019405,49.84844 L 61.4028,53.889951 L 58.654572,54.213272 L 58.331251,57.123161 L 60.594498,60.033049 L 58.492912,62.619617 L 56.229665,69.086035 L 52.996456,79.108984 L 49.763246,85.575403 L 44.751772,99.639864 L 38.285353,113.21934 L 30.20233,125.82886 L 28.262404,128.73875 L 27.454102,137.30675 L 26.160818,143.28819 L 28.86901,146.81562 L 28.387579,147.77848 L 26.80746,152.50284 L 26.645799,159.93922 L 21.472664,171.74043 L 18.401116,174.327 L 18.077795,175.45862 L 16.299529,176.26693 L 14.844585,180.4701 L 14.036283,183.70331 L 16.784511,187.90648 L 18.401116,192.10965 L 19.532739,195.66618 L 19.209418,202.1326 L 17.431153,205.20415 L 16.784511,211.02393 L 15.814548,214.74212 L 17.592813,218.62197 L 20.341041,223.14846 L 22.604288,227.99828 L 23.897571,232.03979 L 23.574251,235.273 L 23.25093,235.75798 L 23.25093,237.85956 L 28.909046,244.16432 L 28.424065,246.58923 L 27.777423,248.85248 L 27.130781,250.7924 L 27.292441,259.03709 L 29.394027,262.75528 L 31.333953,265.34184 L 34.082181,265.82683 L 35.052144,268.57505 L 33.920521,272.13158 L 31.818934,273.74819 L 30.687311,273.74819 L 29.879009,277.62804 L 30.36399,280.53793 L 33.5972,284.90276 L 35.213804,290.23756 L 36.668748,294.92571 L 37.962032,297.99726 L 41.356902,303.81704 L 42.811846,306.4036 L 43.296828,309.31349 L 44.913432,310.28345 L 44.913432,312.70836 L 44.10513,314.64829 L 42.326865,321.76135 L 41.841883,323.70127 L 44.266791,326.4495 L 48.469963,326.93448 L 52.996456,328.71275 L 56.876307,330.81433 L 59.786196,330.81433 L 62.696084,333.88588 L 65.282651,338.7357 L 66.414275,340.99894 L 70.294126,343.10053 L 75.14394,343.90883 L 76.598884,346.01042 L 77.245526,349.24363 L 75.790582,349.89027 L 76.113903,350.86023 L 79.347114,351.66853 L 82.095342,351.8302 L 85.005231,356.51835 L 88.885085,360.72152 L 89.693387,362.98477 L 92.279955,367.18794 L 92.603276,370.42115 L 92.603276,379.79746 L 93.088257,381.57572 L 103.11121,383.03067 L 122.83378,385.77889 L 136.74132,386.75359 L 137.74699,387.50041 L 135.11998,389.65874 L 134.79666,391.11369 L 135.28164,392.08365 L 154.19591,402.75324 L 166.32045,410.35128 L 181.03155,418.91929 L 197.84424,428.94224 L 210.13044,431.36715 L 235.25838,434.07206 L 236.86315,434.87445 L 252.32382,436.8636 L 253.6171,426.84065 L 270.26813,429.42722 L 282.72425,431.045 L 283.68593,431.04382 L 285.62584,431.52878 L 288.21243,434.43865 L 289.66738,438.80352 L 294.35554,441.06677 L 295.64882,444.29998 L 302.76189,452.22135 L 304.05517,453.83795 L 309.06664,455.93954 L 310.19827,458.04112 L 311.81487,459.01109 L 312.29985,461.75931 L 315.53306,468.22573 L 315.53306,476.30876 L 317.79631,480.99691 L 325.23269,488.75661 L 330.40583,490.8582 L 332.18409,492.79812 L 332.18409,493.44477 L 336.06394,495.70801 L 338.00387,496.35465 L 339.78213,497.48628 L 342.3687,498.45624 L 344.79361,496.03133 L 349.15844,489.88824 L 350.1284,486.17004 L 352.39165,482.93684 L 355.94818,481.48189 L 360.47467,479.70363 L 363.54622,481.96687 L 370.9826,482.61351 L 377.77234,483.74514 L 380.35891,485.84672 L 380.35891,486.97835 L 382.94548,490.0499 L 388.92692,495.38469 L 389.08858,496.83964 L 390.86684,498.77956 L 391.67514,502.98273 L 397.00994,515.26893 L 396.84828,517.20885 L 401.05145,519.79542 L 404.60798,526.4235 L 408.00285,530.78833 L 411.23606,532.08162 L 412.85266,534.34486 L 411.55938,538.7097 L 412.20602,539.67966 L 413.49931,540.3263 L 413.17599,543.72117 L 412.52934,544.36781 L 413.17599,546.63106 L 416.40919,548.57099 L 417.70248,555.0374 L 419.80406,558.91726 L 427.40211,562.31213 L 432.57524,563.44375 L 436.77841,566.5153 L 440.01162,567.16194 L 441.30491,566.67696 L 446.80136,567.80858 L 452.45948,571.68843 L 455.53103,569.74851 L 456.50099,568.29356 L 454.72273,565.54533 L 453.75276,559.40224 L 451.9745,552.45084 L 451.1662,550.02593 L 451.9745,545.49944 L 453.10612,541.61959 L 454.3994,537.09309 L 455.85435,531.59664 L 453.5911,529.65671 L 454.56107,527.71679 L 458.60258,527.39346 L 462.48243,521.89701 L 465.8773,521.25037 L 471.69708,517.69384 L 473.47534,516.23889 L 479.7801,512.84402 L 485.43821,510.41911 L 490.77301,507.18591 L 493.52124,505.08432 L 499.17935,499.74952 L 500.47264,498.94122 L 502.57422,497.48628 L 505.16079,495.54635 L 506.13075,493.60643 L 515.99204,489.07993 L 521.65692,487.49475 L 522.29848,487.36687 L 526.98496,485.84672 L 535.06798,485.5234 L 545.41425,489.07993 L 551.88067,490.21156 L 555.59886,488.75661 L 558.83207,489.88824 L 562.06528,490.8582 L 562.87358,488.75661 L 559.64037,487.62499 L 557.0538,488.10997 L 554.30557,486.49337 C 554.30557,486.49337 554.46724,485.20008 555.11388,485.03842 C 555.76052,484.87676 558.18543,484.06846 558.18543,484.06846 L 559.96369,485.5234 L 561.74196,484.55344 L 564.97517,485.20008 L 566.43011,487.62499 L 566.75343,489.88824 L 571.27992,490.21156 L 573.05819,491.98982 L 572.24989,493.60643 L 570.9566,494.41473 L 572.57321,496.03133 L 580.97955,499.58786 L 584.53608,498.29458 L 585.50605,495.86967 L 588.09261,495.22303 L 589.87088,493.76809 L 591.16416,494.73805 L 591.97246,497.64794 L 589.70922,498.45624 L 590.35586,499.10288 L 593.75073,497.8096 L 596.01398,494.41473 L 596.82228,493.92975 L 594.72069,493.60643 L 595.52899,491.98982 L 595.36733,490.53488 L 597.46892,490.0499 L 598.60054,488.75661 L 599.24718,489.56491 C 599.24718,489.56491 599.08552,492.63646 599.89383,492.63646 C 600.70213,492.63646 604.097,493.28311 604.097,493.28311 L 608.13851,495.22303 L 609.10847,496.67798 L 612.01836,496.67798 L 613.14999,497.64794 L 615.41323,494.57639 L 615.41323,493.12144 L 614.11995,493.12144 L 610.72508,490.37322 L 604.9053,489.56491 L 601.67209,487.30167 L 602.80372,484.55344 L 605.06696,484.87676 L 605.22862,484.23012 L 603.45036,483.26016 L 603.45036,482.77517 L 606.68357,482.77517 L 608.46183,479.70363 L 607.16855,477.7637 L 606.84523,475.01547 L 605.39028,475.17713 L 603.45036,477.27872 L 602.80372,479.86529 L 599.73217,479.21864 L 598.7622,477.44038 L 600.54047,475.50045 L 602.56122,473.7222 L 603.31778,473.20692 L 604.42032,472.4289 L 607.00689,468.22573 L 608.78515,469.03403 L 615.57489,467.09411 L 617.67648,467.41743 L 619.13142,468.22573 L 624.30456,468.22573 L 624.55882,466.96958 L 625.59784,466.77079 L 628.34607,466.77079 L 628.99271,466.93245 L 630.28599,464.18422 L 631.74094,459.81939 L 634.00419,460.46603 L 637.07573,466.44747 L 637.07573,467.41743 L 634.32751,469.35736 L 637.07573,469.68068 L 642.61779,467.10778 L 643.29612,467.22209 L 646.77536,466.60913 L 652.7568,464.50754 L 658.73824,464.02256 L 663.10307,463.37592 L 670.70111,465.15418 L 678.78414,469.03403 L 680.40074,470.48898 L 683.31063,471.6206 L 684.92723,473.56053 L 685.25055,476.30876 L 688.48376,475.01547 L 692.36361,475.01547 L 695.92015,473.07555 L 699.63834,469.51902 L 702.70988,469.68068 L 703.19487,468.54905 L 702.38656,467.57909 L 702.54822,465.63917 L 706.58974,464.83086 L 709.1763,464.83086 L 712.08619,466.28581 L 716.28936,467.74075 L 718.71427,471.45894 L 721.4625,472.4289 L 722.59412,475.82377 L 725.98899,477.44038 L 727.6056,480.02695 L 729.54552,480.67359 L 734.71866,481.96687 L 736.01194,485.03842 L 739.08349,488.75661 L 739.08349,498.29458 L 737.62855,502.98273 L 737.95187,505.73096 L 739.24515,510.58078 L 741.02342,514.62229 L 741.83172,514.13731 L 743.28666,509.61081 L 740.7001,508.64085 L 740.37677,507.99421 L 741.99338,507.34757 L 746.51987,508.31753 L 746.68153,509.93413 L 743.44832,515.43059 L 741.34674,517.8555 L 744.90327,521.57369 L 747.48983,524.64524 L 750.39972,529.98003 L 753.30961,533.85988 L 755.4112,538.87136 L 757.18946,539.19468 L 758.80607,537.09309 L 760.58433,538.22472 L 763.1709,542.26623 L 763.81754,545.82276 L 766.88909,550.18759 L 767.69739,548.89431 L 771.57724,549.21763 L 775.13377,551.48087 L 778.52864,556.65401 L 779.33695,560.04888 L 779.66027,562.95877 L 780.79189,563.92873 L 782.08518,564.41371 L 784.51008,563.44375 L 785.96503,561.82714 L 789.84488,561.66548 L 792.91643,560.21054 L 795.66465,556.97733 L 795.17967,555.0374 L 794.85635,552.6125 L 795.50299,550.67257 L 795.17967,548.73265 L 797.60458,547.43936 L 797.9279,544.04449 L 797.28126,542.26623 L 796.79628,530.30335 L 795.50299,522.70531 L 790.9765,514.46063 L 787.41997,508.64085 L 784.8334,503.30605 L 781.92351,500.39617 L 779.01363,492.95978 L 779.82193,491.6665 L 780.95355,490.37322 L 779.33695,487.46333 L 775.29544,483.74514 L 770.44562,478.24868 L 766.72743,471.94392 L 761.39264,462.56762 L 757.66294,452.82536 L 755.39728,445.50676 L 755.37832,444.61734 L 754.6029,438.31855 L 756.86614,428.2956 L 758.32109,424.09242 L 757.8361,421.50586 L 761.17051,415.26156 L 760.66021,413.90988 L 761.23097,412.93785 L 763.33256,411.64457 L 768.34404,406.14811 L 767.37407,402.9149 L 770.28396,402.75324 L 773.84049,399.35837 L 775.4571,398.55007 L 777.72034,395.1552 L 780.46857,392.40697 L 782.57016,388.85044 L 784.99506,388.2038 L 786.12669,385.45557 L 787.74329,384.64727 L 788.22827,378.34251 L 790.81484,372.19941 L 796.23601,366.74107 L 796.51628,365.93803 L 801.96941,364.60137 L 806.65757,364.11639 L 807.14255,361.69148 L 809.08247,355.22506 L 812.47734,350.53691 L 818.94376,345.20212 L 824.1169,342.77721 L 826.86512,342.13057 L 827.99675,342.61555 L 829.29003,342.61555 L 832.36158,337.76573 L 834.30151,334.2092 L 833.00822,334.69419 L 830.74498,336.95743 L 830.09833,335.34083 L 825.89516,335.34083 L 827.83509,329.03607 L 827.02679,327.74279 L 825.08686,327.74279 L 825.08686,326.77282 L 824.76354,325.47954 L 826.38014,326.77282 L 827.83509,326.93448 L 830.25999,327.2578 L 833.97819,325.6412 L 835.27147,322.73131 L 835.91811,320.62972 L 838.50468,319.33644 L 838.828,315.13327 L 838.0197,314.48663 L 840.4446,314.32497 L 839.79796,312.06172 L 837.37306,309.63681 L 833.81653,303.17039 L 832.10653,298.47179 L 831.18615,297.54706 L 827.57853,291.53513 L 821.77751,293.22096 L 820.20529,291.72666 L 822.75833,290.34535 L 822.26654,287.82122 L 820.49343,286.03584 L 820.37189,284.62394 L 818.0909,283.08107 L 818.00194,281.46555 L 820.69593,281.56049 L 820.91773,280.17589 L 819.68832,279.38612 L 820.16727,277.45573 L 818.79254,276.35318 L 819.23203,271.6631 L 818.36396,270.46308 L 815.17352,270.06055 L 813.02121,267.97209 L 808.16474,267.02998 L 805.21607,266.06202 z M 767.94269,577.91184 L 770.36761,577.2652 L 771.66089,577.02271 L 773.11585,574.67862 L 775.45993,573.06201 L 776.75322,573.547 L 778.45066,573.87032 L 778.85481,574.92111 L 775.37911,576.13357 L 771.17591,577.58852 L 768.83183,578.80098 L 767.94269,577.91184 z M 781.44139,572.90035 L 782.65385,573.95115 L 785.40209,571.84956 L 790.7369,567.64637 L 794.4551,563.7665 L 796.96085,557.1384 L 797.93082,555.44096 L 798.09248,552.04608 L 797.365,552.53106 L 796.39504,555.36013 L 794.94008,559.96746 L 791.70686,565.22146 L 787.34202,569.42464 L 783.94714,571.36457 L 781.44139,572.90035 z M 836.00199,331.45961 L 838.58857,328.95386 L 841.74095,326.36728 L 843.27673,325.72064 L 843.43839,323.69988 L 842.79175,317.55676 L 841.3368,315.21268 L 840.69015,313.35358 L 841.41763,313.11108 L 844.16587,318.60756 L 844.57002,323.05323 L 844.40836,326.44812 L 841.01348,327.98389 L 838.18441,330.40881 L 837.05279,331.62127 L 836.00199,331.45961 z M 899.97704,173.85121 L 902.14896,173.16533 L 902.60622,171.45066 L 903.63502,171.56497 L 904.66382,173.85121 L 903.4064,174.30845 L 899.5198,174.42277 L 899.97704,173.85121 z M 890.6035,174.65139 L 892.88972,172.02222 L 894.49009,172.02222 L 896.31908,173.50827 L 893.91854,174.53707 L 891.74662,175.56587 L 890.6035,174.65139 z M 902.28301,107.47825 L 903.81879,105.94247 L 905.19291,106.99327 L 905.75872,109.41819 L 904.06128,110.30732 L 902.28301,107.47825 z M 908.99194,101.57763 L 910.77021,103.43673 C 910.77021,103.43673 912.0635,103.51755 912.0635,103.19423 C 912.0635,102.87091 912.30599,101.17347 912.30599,101.17347 L 913.19513,100.36517 L 912.38682,98.586893 L 910.36606,99.31437 L 908.99194,101.57763 z M 820.32087,264.28945 L 821.45249,266.7952 L 821.61415,268.57347 L 822.74578,270.43257 C 822.74578,270.43257 823.63492,269.54343 823.63492,269.22011 C 823.63492,268.89679 822.90745,266.14855 822.90745,266.14855 L 822.17997,263.80446 L 820.32087,264.28945 z M 581.61931,82.059006 L 583.4483,80.001402 L 585.62022,79.201221 L 590.99286,75.314624 L 593.27908,74.743065 L 593.73634,75.200319 L 588.59232,80.344339 L 585.27728,82.287628 L 583.21967,83.202124 L 581.61931,82.059006 z M 667.79369,114.18719 L 668.44033,116.69293 L 671.67355,116.85459 L 672.96684,115.64213 C 672.96684,115.64213 672.88601,114.18719 672.56269,114.02552 C 672.23936,113.86386 670.94608,112.16642 670.94608,112.16642 L 668.76366,112.40891 L 667.14704,112.57057 L 666.82372,113.7022 L 667.79369,114.18719 z M 84.116548,12.340738 L 86.137312,12.179078 L 86.622294,13.553197 L 88.158073,11.936582 L 90.502155,11.936582 L 91.310458,13.472361 L 89.774678,15.169801 L 90.42133,15.978114 L 89.693853,17.998875 L 88.319734,18.403021 C 88.319734,18.403021 87.430596,18.483857 87.430596,18.160536 C 87.430596,17.837215 88.885551,15.573958 88.885551,15.573958 L 87.188111,15.008141 L 86.86479,16.463095 L 86.137312,17.109737 L 84.60153,14.84648 L 84.116548,12.340738 z M 457.2302,567.32304 L 456.66439,560.20996 L 453.91615,553.01604 L 453.35033,545.98379 L 454.88611,537.73908 L 458.20017,530.86849 L 461.67587,525.45284 L 464.82827,521.89629 L 465.47491,522.13879 L 460.70591,528.76689 L 456.34107,535.31417 L 454.3203,541.94226 L 453.99698,547.11542 L 454.88611,553.25854 L 457.47269,560.45246 L 457.95767,565.6256 L 458.11933,567.08056 L 457.2302,567.32304 z M 48.793607,337.03691 L 50.086895,338.57269 L 49.925235,339.86598 L 46.692014,339.78515 L 46.1262,338.57269 L 45.479556,337.11774 L 48.793607,337.03691 z M 50.733539,337.03691 L 51.945997,336.39027 L 55.50254,338.49186 L 58.5741,339.70431 L 57.684964,340.35097 L 53.158455,340.10847 L 51.541845,338.49186 L 50.733539,337.03691 z M 71.426153,356.84039 L 73.204418,359.18447 L 74.012731,360.15444 L 75.54851,360.72025 L 76.114317,359.2653 L 75.144354,357.48703 L 72.476951,355.46627 L 71.426153,355.62793 L 71.426153,356.84039 z M 69.971198,365.48925 L 71.749474,368.64164 L 72.961932,370.58158 L 71.506978,370.82406 L 70.213694,369.61161 C 70.213694,369.61161 69.486217,368.15666 69.486217,367.7525 C 69.486217,367.34836 69.486217,365.57008 69.486217,365.57008 L 69.971198,365.48925 z \"\n fill={\"currentColor\"}\n id=\"US-Mainland\" />\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ScratchCardsIcon extends React.Component<ISvgIconProps> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g fill=\"none\" stroke=\"currentColor\">\n <path d=\"M1.76511 0.435012H18.2351C18.9532 0.435012 19.5353 0.968117 19.5353 1.62569V18.3745C19.5353 19.0321 18.9532 19.5652 18.2351 19.5652H1.76511C1.04701 19.5652 0.464844 19.0321 0.464844 18.3745V1.62569C0.464844 0.968117 1.04701 0.435012 1.76511 0.435012Z\" strokeWidth=\"0.8\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M3.06543 10.0399H16.9349V17.184H3.06543V10.0399Z\" strokeWidth=\"0.8\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M14.2007 2.81677L15.0456 4.38457L16.935 4.63596L15.5679 5.85632L15.8906 7.57947L14.2007 6.76592L12.5108 7.57947L12.8335 5.85632L11.4663 4.63596L13.3557 4.38457L14.2007 2.81677Z\" strokeWidth=\"0.8\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5.79979 2.81677L4.95484 4.38457L3.06543 4.63596L4.43261 5.85632L4.10984 7.57947L5.79979 6.76592L7.4897 7.57947L7.16697 5.85632L8.53411 4.63596L6.64475 4.38457L5.79979 2.81677Z\" strokeWidth=\"0.8\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class MobileMenuNoSearchIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 26 18\" ratio={26/18}>\n <g>\n <path d=\"M19.4252 0H1.5748C0.705063 0 0 0.710972 0 1.588C0 2.46503 0.705063 3.176 1.5748 3.176H19.4252C20.2949 3.176 21 2.46503 21 1.588C21 0.710972 20.2949 0 19.4252 0Z\" fill=\"currentColor\"/>\n <path d=\"M19.4252 7.412H1.5748C0.705063 7.412 0 8.12297 0 9C0 9.87703 0.705063 10.588 1.5748 10.588H19.4252C20.2949 10.588 21 9.87703 21 9C21 8.12297 20.2949 7.412 19.4252 7.412Z\" fill=\"currentColor\"/>\n <path d=\"M19.4252 14.824H1.5748C0.705063 14.824 0 15.535 0 16.412C0 17.289 0.705063 18 1.5748 18H19.4252C20.2949 18 21 17.289 21 16.412C21 15.535 20.2949 14.824 19.4252 14.824Z\" fill=\"currentColor\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport {ILiveCasinoNavbarIconProps} from \"./live-casino-navbar-icon-props.interface\";\n\nexport class SpeedGamesIcon extends React.Component<ILiveCasinoNavbarIconProps> {\n render() {\n const backdropOpacity = this.props.backdropOpacity || 0;\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M11.0003 19.7998C15.2531 19.7998 18.7006 16.2539 18.7006 11.8799C18.7006 7.50587 15.2531 3.96002 11.0003 3.96002C6.7476 3.96002 3.30005 7.50587 3.30005 11.8799C3.30005 16.2539 6.7476 19.7998 11.0003 19.7998Z\"\n fill=\"currentColor\" fillOpacity={backdropOpacity} stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"\n />\n <path d=\"M11.0007 3.96002V7.11484\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M7.14893 5.02069L8.6666 7.72795\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M4.3313 7.92029L6.77142 9.36926\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M3.30005 11.88H6.27154\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M4.3313 15.8396L6.90137 14.3135\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M7.14893 18.7388L8.64655 16.0708\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M11.001 19.8V16.6781\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M14.8501 18.7383L13.2886 15.9565\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M17.6667 15.8401L14.9353 14.2181\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M18.7004 11.88H15.6331\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M17.6675 7.92029L14.9048 9.56086\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M14.8499 5.02069L13.3342 7.72795\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"/>\n <path d=\"M11.0081 16.7529C13.6197 16.7529 15.7369 14.5754 15.7369 11.8893C15.7369 9.20311 13.6197 7.02557 11.0081 7.02557C8.39643 7.02557 6.2793 9.20311 6.2793 11.8893C6.2793 14.5754 8.39643 16.7529 11.0081 16.7529Z\"\n stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"\n />\n <path d=\"M13.0244 10.1325L11.7068 11.3823\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n <path d=\"M11.0088 13.0254C11.5382 13.0254 11.9674 12.5936 11.9674 12.0609C11.9674 11.5282 11.5382 11.0963 11.0088 11.0963C10.4794 11.0963 10.0503 11.5282 10.0503 12.0609C10.0503 12.5936 10.4794 13.0254 11.0088 13.0254Z\"\n fill=\"currentColor\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\"\n />\n <path d=\"M10.9736 4.13409V2.20007\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n <path d=\"M12.6412 2.20007H9.30859\" stroke=\"currentColor\" strokeWidth=\"0.55\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n </SvgIcon>;\n }\n}\n","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\nexport interface IFilterIconProps extends ISvgIconProps{\n}\n\nexport class FilterIcon extends React.Component<IFilterIconProps, {}> {\n\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 16 16\" >\n <g fill=\"none\">\n <path d=\"M6.88958 6.89759L6.88851 6.89643L1.68086 1.24491H14.3196L9.11182 6.89811L9.1118 6.89809L9.10749 6.90283C8.78175 7.261 8.59528 7.73123 8.59528 8.22353V12.5066C8.59009 12.5133 8.58421 12.5209 8.57754 12.5293C8.54655 12.5685 8.51282 12.6089 8.46536 12.6657C8.45318 12.6803 8.44009 12.6959 8.42592 12.7129L7.40513 13.8832V8.22193C7.40513 7.7337 7.22289 7.26046 6.88958 6.89759Z\" stroke=\"currentColor\" strokeWidth=\"2\"/>\n </g>\n </SvgIcon>\n )\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface TempAccountPopupIconProps extends ISvgIconProps {\n\n}\n\nexport class TempAccountPopupIcon extends React.Component<TempAccountPopupIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 50 50\">\n <g clipPath=\"url(#clip0_1796_2396)\">\n <path d=\"M23.9783 50H6.0168C4.44151 50 2.93073 49.3742 1.81683 48.2603C0.702931 47.1464 0.0771484 45.6356 0.0771484 44.0603L0.0771484 5.93965C0.0771484 4.36436 0.702931 2.85359 1.81683 1.73968C2.93073 0.625783 4.44151 0 6.0168 0L33.5174 0C35.0927 0 36.6035 0.625783 37.7174 1.73968C38.8313 2.85359 39.457 4.36436 39.457 5.93965V20.1948C39.4746 20.3809 39.4531 20.5686 39.3939 20.7459C39.3348 20.9232 39.2392 21.0862 39.1134 21.2245C38.9876 21.3627 38.8343 21.4731 38.6634 21.5487C38.4924 21.6243 38.3075 21.6633 38.1206 21.6633C37.9337 21.6633 37.7489 21.6243 37.5779 21.5487C37.4069 21.4731 37.2536 21.3627 37.1278 21.2245C37.002 21.0862 36.9065 20.9232 36.8473 20.7459C36.7881 20.5686 36.7666 20.3809 36.7842 20.1948V5.93965C36.7842 5.51589 36.7005 5.09629 36.538 4.70493C36.3755 4.31357 36.1373 3.95815 35.8371 3.65906C35.5369 3.35996 35.1806 3.12308 34.7886 2.962C34.3967 2.80091 33.9768 2.7188 33.553 2.72036H6.0168C5.59105 2.71565 5.16859 2.79544 4.77388 2.95511C4.37918 3.11478 4.02007 3.35117 3.71735 3.65058C3.41462 3.94999 3.1743 4.30647 3.01029 4.6994C2.84628 5.09232 2.76185 5.51387 2.76187 5.93965V44.096C2.76185 44.5218 2.84628 44.9433 3.01029 45.3362C3.1743 45.7292 3.41462 46.0856 3.71735 46.3851C4.02007 46.6845 4.37918 46.9209 4.77388 47.0805C5.16859 47.2402 5.59105 47.32 6.0168 47.3153H23.9783C24.3343 47.3153 24.6758 47.4567 24.9275 47.7084C25.1792 47.9602 25.3207 48.3016 25.3207 48.6576C25.3207 49.0137 25.1792 49.3551 24.9275 49.6068C24.6758 49.8586 24.3343 50 23.9783 50V50Z\" fill=\"currentColor\"/>\n <path d=\"M31.0228 14.3502H8.45214C8.26605 14.3678 8.07835 14.3463 7.90104 14.2871C7.72374 14.2279 7.56075 14.1324 7.42251 14.0066C7.28427 13.8808 7.17382 13.7275 7.09825 13.5565C7.02268 13.3856 6.98364 13.2007 6.98364 13.0138C6.98364 12.8269 7.02268 12.642 7.09825 12.471C7.17382 12.3001 7.28427 12.1468 7.42251 12.021C7.56075 11.8952 7.72374 11.7996 7.90104 11.7405C8.07835 11.6813 8.26605 11.6598 8.45214 11.6774H31.0228C31.3555 11.7088 31.6645 11.8631 31.8895 12.1103C32.1144 12.3574 32.239 12.6796 32.239 13.0138C32.239 13.348 32.1144 13.6701 31.8895 13.9173C31.6645 14.1644 31.3555 14.3188 31.0228 14.3502Z\" fill=\"currentColor\"/>\n <path d=\"M20.9015 24.7802H8.48763C8.13161 24.7802 7.79017 24.6388 7.53843 24.3871C7.28669 24.1353 7.14526 23.7939 7.14526 23.4379C7.14526 23.0819 7.28669 22.7404 7.53843 22.4887C7.79017 22.2369 8.13161 22.0955 8.48763 22.0955H20.9015C21.2575 22.0955 21.599 22.2369 21.8507 22.4887C22.1024 22.7404 22.2439 23.0819 22.2439 23.4379C22.2439 23.7939 22.1024 24.1353 21.8507 24.3871C21.599 24.6388 21.2575 24.7802 20.9015 24.7802Z\" fill=\"currentColor\"/>\n <path d=\"M42.9851 40.3896H37.0455C36.8753 40.3907 36.7067 40.3576 36.5495 40.2923C36.3924 40.227 36.25 40.1309 36.1307 40.0095C35.8922 39.7651 35.7598 39.4363 35.7625 39.0948V32.7512C35.7687 32.414 35.9062 32.0925 36.1458 31.8551C36.3854 31.6177 36.7082 31.4832 37.0455 31.4802C37.2149 31.4802 37.3827 31.5137 37.5392 31.5789C37.6956 31.6442 37.8376 31.7397 37.9569 31.8601C38.0762 31.9805 38.1704 32.1234 38.2342 32.2804C38.298 32.4374 38.33 32.6055 38.3284 32.775V37.8237H42.9613C43.3016 37.8237 43.6279 37.9589 43.8685 38.1995C44.1091 38.4401 44.2443 38.7664 44.2443 39.1067C44.2443 39.4469 44.1091 39.7733 43.8685 40.0139C43.6279 40.2545 43.3016 40.3896 42.9613 40.3896H42.9851Z\" fill=\"currentColor\"/>\n <path d=\"M37.4018 50C34.9246 49.993 32.5051 49.252 30.4488 47.8706C28.3925 46.4892 26.7917 44.5294 25.8486 42.2388C24.9055 39.9481 24.6624 37.4293 25.15 35.0006C25.6376 32.5718 26.834 30.3421 28.5881 28.5929C30.3423 26.8437 32.5754 25.6536 35.0055 25.1729C37.4357 24.6923 39.9537 24.9425 42.2417 25.8921C44.5297 26.8417 46.4849 28.4481 47.8604 30.5083C49.236 32.5685 49.9701 34.9901 49.9701 37.4673C49.9686 39.1157 49.6422 40.7476 49.0096 42.2698C48.3769 43.7919 47.4505 45.1745 46.2833 46.3384C45.1161 47.5023 43.7309 48.4248 42.207 49.0531C40.683 49.6814 39.0502 50.0031 37.4018 50ZM37.4018 27.5125C35.4329 27.5125 33.5083 28.0963 31.8712 29.1902C30.2341 30.284 28.9582 31.8388 28.2047 33.6578C27.4513 35.4768 27.2541 37.4784 27.6382 39.4094C28.0224 41.3405 28.9705 43.1143 30.3627 44.5065C31.7549 45.8987 33.5287 46.8468 35.4597 47.2309C37.3908 47.615 39.3924 47.4179 41.2114 46.6644C43.0304 45.911 44.5851 44.635 45.679 42.998C46.7728 41.3609 47.3567 39.4362 47.3567 37.4673C47.3535 34.8281 46.3037 32.2979 44.4375 30.4317C42.5713 28.5655 40.041 27.5156 37.4018 27.5125Z\" fill=\"currentColor\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_1796_2396\">\n <rect width=\"50\" height=\"50\" fill=\"currentColor\"/>\n </clipPath>\n </defs>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport { ISvgIconProps, SvgIcon } from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class MobileAppsIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 20 20\" >\n <g clipPath=\"url(#clip0_8531_182414)\" fill={\"transparent\"}>\n <path d=\"M15.5984 18.3024C15.5984 19.019 15.0469 19.5689 14.4198 19.5689H5.57858C4.95126 19.5689 4.4 19.0187 4.4 18.3024V1.63559C4.4 0.918919 4.95155 0.36875 5.57858 0.36875H14.4195C15.0466 0.36875 15.5981 0.918919 15.5981 1.63559L15.5984 18.3024Z\" stroke=\"currentColor\" strokeWidth=\"0.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <mask id=\"path-2-inside-1_8531_182414\" fill=\"currentColor\">\n <path d=\"M8.99951 0.666016H11.4995H8.99951Z\"/>\n </mask>\n <path d=\"M8.99951 -0.133984C8.55768 -0.133984 8.19951 0.224188 8.19951 0.666016C8.19951 1.10784 8.55768 1.46602 8.99951 1.46602V-0.133984ZM11.4995 1.46602C11.9413 1.46602 12.2995 1.10784 12.2995 0.666016C12.2995 0.224188 11.9413 -0.133984 11.4995 -0.133984V1.46602ZM8.99951 1.46602H11.4995V-0.133984H8.99951V1.46602Z\" fill=\"currentColor\" mask=\"url(#path-2-inside-1_8531_182414)\"/>\n <path d=\"M10.35 6.96875C10.35 6.77545 10.1933 6.61875 10 6.61875C9.8067 6.61875 9.65 6.77545 9.65 6.96875L10.35 6.96875ZM9.75251 12.2162C9.8892 12.3529 10.1108 12.3529 10.2475 12.2162L12.4749 9.98885C12.6116 9.85217 12.6116 9.63056 12.4749 9.49388C12.3382 9.35719 12.1166 9.35719 11.9799 9.49388L10 11.4738L8.0201 9.49388C7.88342 9.35719 7.66181 9.35719 7.52513 9.49388C7.38844 9.63056 7.38844 9.85217 7.52513 9.98885L9.75251 12.2162ZM9.65 6.96875L9.65 11.9687L10.35 11.9688L10.35 6.96875L9.65 6.96875Z\" fill=\"currentColor\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import {ISvgIconProps, SvgIcon} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport class AppHeaderSportIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 35 35\">\n <path d=\"M33.0015 12.7439C33.011 13.4291 32.8843 14.1093 32.6287 14.7451C32.3731 15.3809 31.9936 15.9596 31.5125 16.4475C31.0313 16.9354 30.458 17.3228 29.8258 17.5872C29.1936 17.8517 28.5152 17.9878 27.83 17.9878C27.1447 17.9878 26.4663 17.8517 25.8341 17.5872C25.2019 17.3228 24.6286 16.9354 24.1475 16.4475C23.6663 15.9596 23.2869 15.3809 23.0313 14.7451C22.7756 14.1093 22.6489 13.4291 22.6585 12.7439C22.657 12.047 22.7938 11.3568 23.0609 10.7131C23.328 10.0694 23.7201 9.48508 24.2145 8.99392C23.7201 8.50278 23.3279 7.91846 23.0608 7.27477C22.7937 6.63108 22.657 5.94081 22.6585 5.24392C22.6489 4.55873 22.7756 3.87849 23.0313 3.2427C23.2869 2.60691 23.6663 2.02826 24.1475 1.54036C24.6286 1.05246 25.2019 0.665037 25.8341 0.400604C26.4663 0.136172 27.1447 0 27.83 0C28.5152 0 29.1936 0.136172 29.8258 0.400604C30.458 0.665037 31.0313 1.05246 31.5125 1.54036C31.9936 2.02826 32.3731 2.60691 32.6287 3.2427C32.8843 3.87849 33.011 4.55873 33.0015 5.24392C33.0029 5.94081 32.8662 6.63108 32.5991 7.27477C32.332 7.91846 31.9399 8.50278 31.4454 8.99392C31.9398 9.48512 32.3318 10.0695 32.5989 10.7131C32.866 11.3568 33.0028 12.047 33.0015 12.7439ZM27.8295 2.93391C27.257 2.94273 26.7083 3.16379 26.2896 3.55425C25.8709 3.9447 25.6121 4.47672 25.5634 5.04715C25.5147 5.61757 25.6796 6.18576 26.026 6.64153C26.3725 7.09731 26.8758 7.4082 27.4385 7.51391C27.5685 7.50391 27.6975 7.49392 27.8295 7.49392C27.9615 7.49392 28.0915 7.50391 28.2205 7.51391C28.7831 7.4082 29.2865 7.09731 29.6329 6.64153C29.9794 6.18576 30.1443 5.61757 30.0956 5.04715C30.0469 4.47672 29.7881 3.9447 29.3694 3.55425C28.9507 3.16379 28.4019 2.94273 27.8295 2.93391ZM28.2205 10.4739C28.0915 10.4839 27.9615 10.4939 27.8295 10.4939C27.6975 10.4939 27.5685 10.4839 27.4385 10.4739C26.8772 10.5717 26.3731 10.8763 26.0255 11.3278C25.678 11.7792 25.5124 12.3446 25.5614 12.9121C25.6105 13.4797 25.8706 14.0083 26.2904 14.3934C26.7102 14.7785 27.2593 14.9922 27.829 14.9922C28.3987 14.9922 28.9476 14.7785 29.3674 14.3934C29.7873 14.0083 30.0475 13.4797 30.0966 12.9121C30.1456 12.3446 29.98 11.7792 29.6325 11.3278C29.2849 10.8763 28.7808 10.5717 28.2195 10.4739H28.2205ZM16.5015 17.9949C15.8172 17.9898 15.1405 17.85 14.5103 17.5834C13.88 17.3168 13.3084 16.9286 12.8281 16.4411C12.3479 15.9536 11.9683 15.3763 11.7112 14.7421C11.4541 14.1079 11.3243 13.4292 11.3295 12.7449C11.3279 12.048 11.4646 11.3577 11.7317 10.714C11.9988 10.0703 12.391 9.48598 12.8855 8.99492C12.3909 8.50388 11.9987 7.91958 11.7316 7.27587C11.4645 6.63216 11.3278 5.94184 11.3295 5.24492C11.32 4.55973 11.4467 3.87949 11.7023 3.2437C11.9579 2.60791 12.3373 2.02926 12.8185 1.54136C13.2997 1.05346 13.873 0.666036 14.5051 0.401604C15.1373 0.137171 15.8157 0.000999451 16.501 0.000999451C17.1862 0.000999451 17.8647 0.137171 18.4968 0.401604C19.129 0.666036 19.7023 1.05346 20.1835 1.54136C20.6646 2.02926 21.0441 2.60791 21.2997 3.2437C21.5553 3.87949 21.682 4.55973 21.6725 5.24492C21.674 5.94182 21.5372 6.63211 21.2702 7.2758C21.0031 7.9195 20.6109 8.50381 20.1165 8.99492C20.6108 9.48608 21.0029 10.0704 21.27 10.7141C21.5371 11.3578 21.6739 12.048 21.6725 12.7449C21.6829 14.1268 21.1439 15.4562 20.1742 16.4408C19.2045 17.4253 17.8834 17.9843 16.5015 17.9949ZM16.5015 2.93492C15.929 2.94373 15.3803 3.1648 14.9616 3.55525C14.5429 3.9457 14.2841 4.47772 14.2354 5.04815C14.1867 5.61857 14.3516 6.18676 14.698 6.64254C15.0445 7.09831 15.5478 7.4092 16.1105 7.51492C16.2395 7.50492 16.3695 7.49492 16.5015 7.49492C16.6335 7.49492 16.7625 7.50492 16.8915 7.51492C17.4541 7.40923 17.9574 7.09842 18.3038 6.64275C18.6503 6.18708 18.8152 5.619 18.7666 5.04863C18.718 4.47827 18.4594 3.94625 18.0409 3.55572C17.6224 3.16519 17.0738 2.94396 16.5015 2.93492ZM16.8915 10.4749C16.7625 10.4849 16.6325 10.4949 16.5015 10.4949C16.3705 10.4949 16.2395 10.4849 16.1105 10.4749C15.5492 10.5727 15.0451 10.8773 14.6975 11.3288C14.35 11.7802 14.1844 12.3456 14.2334 12.9131C14.2825 13.4807 14.5426 14.0093 14.9624 14.3944C15.3822 14.7795 15.9313 14.9932 16.501 14.9932C17.0707 14.9932 17.6197 14.7795 18.0396 14.3944C18.4594 14.0093 18.7195 13.4807 18.7686 12.9131C18.8176 12.3456 18.652 11.7802 18.3045 11.3288C17.9569 10.8773 17.4527 10.5727 16.8915 10.4749ZM5.17152 17.9949C3.78964 17.9843 2.46852 17.4253 1.49879 16.4408C0.52906 15.4562 -0.00988287 14.1268 0.000500079 12.7449C-0.00104675 12.0481 0.135566 11.3579 0.402478 10.7142C0.669389 10.0705 1.06123 9.48617 1.55543 8.99492C1.06114 8.50373 0.669273 7.91938 0.402356 7.27569C0.135438 6.63199 -0.00115716 5.94175 0.000500079 5.24492C-0.00902807 4.55973 0.117686 3.87949 0.373303 3.2437C0.62892 2.60791 1.00835 2.02926 1.48951 1.54136C1.97068 1.05346 2.54399 0.666036 3.17616 0.401604C3.80833 0.137171 4.48676 0.000999451 5.17201 0.000999451C5.85726 0.000999451 6.53569 0.137171 7.16786 0.401604C7.80003 0.666036 8.37334 1.05346 8.8545 1.54136C9.33567 2.02926 9.7151 2.60791 9.97071 3.2437C10.2263 3.87949 10.353 4.55973 10.3435 5.24492C10.3452 5.94175 10.2086 6.63199 9.94166 7.27569C9.67474 7.91938 9.28275 8.50373 8.78846 8.99492C9.28271 9.48613 9.67463 10.0705 9.94154 10.7142C10.2085 11.3579 10.3451 12.0481 10.3435 12.7449C10.3487 13.4292 10.2189 14.1079 9.9618 14.7421C9.70467 15.3763 9.32513 15.9536 8.84486 16.4411C8.36459 16.9286 7.79301 17.3168 7.16273 17.5834C6.53246 17.85 5.85584 17.9898 5.17152 17.9949ZM5.17152 2.93492C4.59909 2.94373 4.05029 3.1648 3.6316 3.55525C3.21291 3.9457 2.95411 4.47772 2.90541 5.04815C2.85671 5.61857 3.02161 6.18676 3.36805 6.64254C3.7145 7.09831 4.21787 7.4092 4.78053 7.51492C4.91053 7.50492 5.03952 7.49492 5.17152 7.49492C5.30352 7.49492 5.43251 7.50492 5.56251 7.51492C6.12517 7.4092 6.62854 7.09831 6.97499 6.64254C7.32144 6.18676 7.48621 5.61857 7.43751 5.04815C7.38881 4.47772 7.13001 3.9457 6.71132 3.55525C6.29262 3.1648 5.74395 2.94373 5.17152 2.93492ZM5.56251 10.4749C5.43351 10.4849 5.30452 10.4949 5.17152 10.4949C5.03852 10.4949 4.91053 10.4849 4.78053 10.4749C4.21927 10.5727 3.71497 10.8773 3.36744 11.3288C3.01991 11.7802 2.8544 12.3456 2.90345 12.9131C2.95251 13.4807 3.21263 14.0093 3.63246 14.3944C4.05229 14.7795 4.60133 14.9932 5.17103 14.9932C5.74074 14.9932 6.28966 14.7795 6.70948 14.3944C7.12931 14.0093 7.38943 13.4807 7.43849 12.9131C7.48754 12.3456 7.32203 11.7802 6.9745 11.3288C6.62697 10.8773 6.12279 10.5727 5.56154 10.4749H5.56251Z\" fill=\"#FC6200\"/>\n <path d=\"M2.464 31.8645C1.9613 31.87 1.46354 31.7649 1.006 31.5565C0.629515 31.3981 0.287736 31.1674 0 30.8775L0.550001 29.8985C0.812299 30.1345 1.10862 30.3297 1.429 30.4775C1.75403 30.6334 2.10862 30.7179 2.469 30.7255C2.72792 30.7385 2.98573 30.6836 3.217 30.5665C3.30013 30.5255 3.37002 30.462 3.41866 30.3831C3.4673 30.3042 3.49272 30.2132 3.492 30.1205C3.49004 30.0513 3.47279 29.9835 3.4415 29.9217C3.4102 29.86 3.36564 29.806 3.311 29.7635C3.13711 29.6275 2.94177 29.5214 2.733 29.4495C2.25493 29.2845 1.79134 29.0801 1.347 28.8385C1.07155 28.6945 0.835652 28.485 0.660001 28.2285C0.51856 27.9812 0.449273 27.6992 0.460001 27.4145C0.455703 27.0977 0.556251 26.7883 0.746001 26.5345C0.947888 26.269 1.21529 26.0606 1.522 25.9295C1.87079 25.7783 2.24787 25.7032 2.628 25.7095C3.3392 25.699 4.03039 25.945 4.575 26.4025L4.19 27.4915C3.97061 27.3268 3.73013 27.1923 3.475 27.0915C3.21964 26.9715 2.94292 26.9035 2.661 26.8915C2.46604 26.8793 2.27118 26.9171 2.095 27.0015C2.02146 27.0345 1.95959 27.0888 1.91748 27.1575C1.87537 27.2262 1.85498 27.306 1.859 27.3865C1.86129 27.4659 1.88243 27.5435 1.92069 27.6131C1.95894 27.6827 2.01321 27.7421 2.079 27.7865C2.30364 27.941 2.54777 28.0651 2.805 28.1555C3.18046 28.3104 3.54762 28.4846 3.905 28.6775C4.15582 28.8163 4.37511 29.0056 4.549 29.2335C4.7194 29.4705 4.80978 29.7557 4.807 30.0475C4.81041 30.3009 4.75395 30.5515 4.64222 30.779C4.53049 31.0065 4.36664 31.2043 4.164 31.3565C3.66963 31.7103 3.0714 31.889 2.464 31.8645ZM10.274 25.7155C10.8087 25.707 11.3355 25.8453 11.797 26.1155C12.2351 26.3743 12.5925 26.75 12.829 27.2005C13.0785 27.679 13.2049 28.212 13.197 28.7515V28.7775C13.2043 29.3157 13.0778 29.8473 12.829 30.3245C12.5941 30.7754 12.2368 31.1508 11.798 31.4075C11.3347 31.6732 10.808 31.8084 10.274 31.7985C9.87065 31.8087 9.47138 31.7158 9.114 31.5285C8.78848 31.349 8.51731 31.0851 8.329 30.7645V34.2075H6.952V25.8255H8.329V26.7495C8.52701 26.4152 8.81326 26.1419 9.15634 25.9595C9.49943 25.7771 9.88612 25.6927 10.274 25.7155ZM11.803 28.7405C11.8113 28.5151 11.7741 28.2903 11.6937 28.0795C11.6133 27.8687 11.4913 27.6762 11.335 27.5135C11.1819 27.3563 10.9977 27.2325 10.7943 27.1503C10.5908 27.068 10.3724 27.0289 10.153 27.0355C9.86051 27.0333 9.57244 27.107 9.317 27.2495C9.06151 27.3911 8.85007 27.6004 8.706 27.8545C8.55311 28.1241 8.47508 28.4297 8.48 28.7395V28.7615C8.47512 29.0725 8.55091 29.3795 8.7 29.6525C8.83954 29.9091 9.04715 30.1223 9.3 30.2685C9.55227 30.415 9.83929 30.491 10.131 30.4885C10.4278 30.4914 10.7201 30.4155 10.978 30.2685C11.2331 30.1235 11.4426 29.9102 11.583 29.6525C11.7321 29.3795 11.8079 29.0725 11.803 28.7615V28.7405ZM18.337 31.7875C17.7932 31.7944 17.257 31.6596 16.781 31.3965C16.3228 31.1439 15.9437 30.7689 15.686 30.3135C15.4178 29.841 15.2797 29.3058 15.286 28.7625V28.7515C15.2797 28.2082 15.4178 27.673 15.686 27.2005C15.9451 26.7434 16.3236 26.3652 16.781 26.1065C17.2549 25.8373 17.792 25.6992 18.337 25.7065C18.8821 25.7006 19.4192 25.8386 19.894 26.1065C20.3495 26.3598 20.7277 26.732 20.988 27.1835C21.2567 27.654 21.3948 28.1878 21.388 28.7295V28.7515C21.3943 29.2948 21.2562 29.83 20.988 30.3025C20.7298 30.7588 20.3514 31.1354 19.894 31.3915C19.4188 31.6581 18.8818 31.7946 18.337 31.7875ZM18.348 30.4775C18.643 30.4808 18.9334 30.4048 19.189 30.2575C19.4398 30.1132 19.6454 29.902 19.783 29.6475C19.9291 29.3754 20.0032 29.0704 19.998 28.7615V28.7395C20.0029 28.4285 19.9271 28.1215 19.778 27.8485C19.6376 27.5909 19.4281 27.3775 19.173 27.2325C18.9151 27.0855 18.6228 27.0096 18.326 27.0125C18.0343 27.01 17.7473 27.086 17.495 27.2325C17.2422 27.3788 17.0345 27.5919 16.895 27.8485C16.7459 28.1215 16.6701 28.4285 16.675 28.7395V28.7615C16.6696 29.0716 16.7473 29.3776 16.9 29.6475C17.045 29.9022 17.2561 30.113 17.511 30.2575C17.7656 30.4038 18.0544 30.4797 18.348 30.4775ZM23.639 25.8255H25.014V27.0025C25.2002 26.6207 25.4877 26.2973 25.845 26.0675C26.1991 25.8458 26.6114 25.7347 27.029 25.7485V27.0575H26.864C26.5466 27.056 26.2341 27.1356 25.956 27.2885C25.6828 27.4344 25.4489 27.644 25.274 27.8995C25.1057 28.1395 25.0152 28.4254 25.015 28.7185V31.6775H23.639V25.8255ZM31.471 31.7985C31.0049 31.8281 30.546 31.6716 30.195 31.3635C30.0338 31.1869 29.9106 30.979 29.8331 30.7528C29.7555 30.5266 29.7252 30.2869 29.744 30.0485V27.1235H28.996V25.8235H29.744V24.1865H31.119V25.8255H32.747V27.1255H31.119V29.7775C31.1121 29.8779 31.125 29.9787 31.1571 30.0742C31.1892 30.1696 31.2398 30.2577 31.306 30.3335C31.376 30.4003 31.459 30.4518 31.5499 30.4848C31.6408 30.5179 31.7375 30.5317 31.834 30.5255C32.1438 30.5241 32.4516 30.4759 32.747 30.3825V31.5235C32.5589 31.6165 32.3591 31.6838 32.153 31.7235C31.9289 31.7722 31.7003 31.7973 31.471 31.7985Z\" fill=\"#FC6200\"/>\n </SvgIcon>\n }\n}","import {ISvgIconProps, SvgIcon} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport interface IAppHeaderPokerIconProps extends ISvgIconProps {\n title: string;\n}\n\nexport class AppHeaderPokerIcon extends React.Component<IAppHeaderPokerIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 35 35\">\n <path d=\"M33.0011 12.672C33.0011 14.0437 32.4562 15.3592 31.4862 16.3292C30.5163 17.2991 29.2008 17.844 27.8291 17.844C26.4574 17.844 25.142 17.2991 24.172 16.3292C23.2021 15.3592 22.6571 14.0437 22.6571 12.672C22.6557 11.9751 22.7925 11.2849 23.0596 10.6412C23.3267 9.9975 23.7188 9.41317 24.2132 8.922C23.7187 8.4309 23.3266 7.84658 23.0595 7.20289C22.7924 6.55919 22.6556 5.86891 22.6571 5.172C22.6571 3.8003 23.2021 2.48478 24.172 1.51484C25.142 0.544907 26.4574 0 27.8291 0C29.2008 0 30.5163 0.544907 31.4862 1.51484C32.4562 2.48478 33.0011 3.8003 33.0011 5.172C33.0025 5.86889 32.8657 6.55914 32.5987 7.20282C32.3316 7.8465 31.9395 8.43083 31.4451 8.922C31.9394 9.41324 32.3315 9.99757 32.5985 10.6412C32.8656 11.2849 33.0024 11.9751 33.0011 12.672ZM27.8291 2.862C27.2567 2.87081 26.7079 3.09188 26.2892 3.48233C25.8705 3.87279 25.6117 4.40481 25.563 4.97523C25.5143 5.54566 25.6792 6.11385 26.0257 6.56962C26.3721 7.02539 26.8755 7.33628 27.4381 7.442C27.5671 7.432 27.6971 7.422 27.8291 7.422C27.9611 7.422 28.0901 7.432 28.2201 7.442C28.7828 7.33628 29.2861 7.02539 29.6326 6.56962C29.979 6.11385 30.1439 5.54566 30.0952 4.97523C30.0465 4.40481 29.7877 3.87279 29.369 3.48233C28.9504 3.09188 28.4016 2.87081 27.8291 2.862ZM28.2201 10.402C28.0911 10.412 27.9611 10.422 27.8291 10.422C27.6971 10.422 27.5671 10.412 27.4381 10.402C26.8769 10.4999 26.3728 10.8046 26.0254 11.2561C25.678 11.7075 25.5124 12.2729 25.5615 12.8404C25.6107 13.4079 25.8709 13.9364 26.2907 14.3215C26.7105 14.7065 27.2595 14.9202 27.8291 14.9202C28.3988 14.9202 28.9478 14.7065 29.3676 14.3215C29.7874 13.9364 30.0476 13.4079 30.0967 12.8404C30.1458 12.2729 29.9803 11.7075 29.6328 11.2561C29.2854 10.8046 28.7813 10.4999 28.2201 10.402ZM16.5011 17.923C15.8168 17.9179 15.1402 17.7781 14.5099 17.5115C13.8796 17.2449 13.3081 16.8567 12.8278 16.3692C12.3475 15.8817 11.968 15.3044 11.7108 14.6702C11.4537 14.036 11.324 13.3573 11.3291 12.673C11.3276 11.9761 11.4644 11.2858 11.7315 10.6421C11.9986 9.99842 12.3907 9.4141 12.8852 8.923C12.3906 8.43193 11.9984 7.84762 11.7313 7.20392C11.4643 6.56022 11.3275 5.86992 11.3291 5.173C11.3291 3.8013 11.8741 2.48578 12.844 1.51584C13.814 0.545906 15.1294 0.000999451 16.5011 0.000999451C17.8728 0.000999451 19.1883 0.545906 20.1582 1.51584C21.1282 2.48578 21.6731 3.8013 21.6731 5.173C21.6747 5.86992 21.538 6.56022 21.2709 7.20392C21.0038 7.84762 20.6116 8.43193 20.1171 8.923C20.6115 9.41413 21.0037 9.99846 21.2708 10.6421C21.5379 11.2858 21.6746 11.9761 21.6731 12.673C21.6783 13.3573 21.5485 14.036 21.2914 14.6702C21.0343 15.3044 20.6547 15.8817 20.1745 16.3692C19.6942 16.8567 19.1226 17.2449 18.4923 17.5115C17.8621 17.7781 17.1854 17.9179 16.5011 17.923ZM16.5011 2.863C15.9287 2.87181 15.3799 3.09288 14.9612 3.48334C14.5425 3.87379 14.2837 4.40581 14.235 4.97623C14.1863 5.54666 14.3512 6.11485 14.6977 6.57062C15.0441 7.0264 15.5475 7.33728 16.1101 7.443C16.2391 7.433 16.3681 7.423 16.5011 7.423C16.6341 7.423 16.7621 7.433 16.8911 7.443C17.4537 7.33732 17.957 7.02651 18.3035 6.57084C18.65 6.11516 18.8148 5.54708 18.7663 4.97672C18.7177 4.40636 18.4591 3.87434 18.0406 3.48381C17.622 3.09327 17.0735 2.87204 16.5011 2.863ZM16.8911 10.403C16.7621 10.413 16.6331 10.423 16.5011 10.423C16.3691 10.423 16.2391 10.413 16.1101 10.403C15.5488 10.5006 15.0446 10.8052 14.6969 11.2566C14.3493 11.7081 14.1836 12.2734 14.2326 12.8411C14.2816 13.4087 14.5416 13.9373 14.9615 14.3225C15.3813 14.7076 15.9304 14.9213 16.5001 14.9213C17.0699 14.9213 17.6189 14.7076 18.0387 14.3225C18.4586 13.9373 18.7187 13.4087 18.7677 12.8411C18.8167 12.2734 18.651 11.7081 18.3034 11.2566C17.9557 10.8052 17.4515 10.5006 16.8902 10.403H16.8911ZM5.17117 17.923C3.78929 17.9124 2.46817 17.3534 1.49844 16.3688C0.528708 15.3843 -0.0102357 14.0549 0.000147288 12.673C-0.00126858 11.9761 0.135529 11.2859 0.402613 10.6422C0.669697 9.9985 1.0618 9.41417 1.55618 8.923C1.06175 8.43187 0.669579 7.84754 0.402491 7.20386C0.135404 6.56017 -0.00132378 5.8699 0.000147288 5.173C0.000147288 3.8013 0.54498 2.48578 1.51492 1.51584C2.48486 0.545906 3.80044 0.000999451 5.17214 0.000999451C6.54384 0.000999451 7.85931 0.545906 8.82925 1.51584C9.79919 2.48578 10.3441 3.8013 10.3441 5.173C10.3458 5.86992 10.209 6.56024 9.94192 7.20395C9.67482 7.84766 9.28267 8.43197 8.78811 8.923C9.28263 9.41407 9.67483 9.99837 9.94192 10.6421C10.209 11.2858 10.3457 11.9761 10.3441 12.673C10.3493 13.3574 10.2195 14.0361 9.96231 14.6704C9.7051 15.3046 9.32549 15.882 8.84512 16.3695C8.36474 16.8571 7.79301 17.2452 7.16262 17.5117C6.53223 17.7783 5.85558 17.918 5.17117 17.923ZM5.17117 2.863C4.59881 2.87204 4.05014 3.09327 3.63162 3.48381C3.2131 3.87434 2.95448 4.40636 2.90591 4.97672C2.85734 5.54708 3.02234 6.11516 3.3688 6.57084C3.71526 7.02651 4.21857 7.33732 4.78115 7.443C4.91015 7.433 5.03917 7.423 5.17117 7.423C5.30317 7.423 5.43216 7.433 5.56216 7.443C6.12481 7.33728 6.62819 7.0264 6.97463 6.57062C7.32108 6.11485 7.48586 5.54666 7.43716 4.97623C7.38846 4.40581 7.12965 3.87379 6.71096 3.48334C6.29227 3.09288 5.7436 2.87181 5.17117 2.863ZM5.56216 10.403C5.43316 10.413 5.30317 10.423 5.17117 10.423C5.03917 10.423 4.91015 10.413 4.78115 10.403C4.21989 10.5007 3.71572 10.8054 3.36819 11.2569C3.02066 11.7083 2.85502 12.2736 2.90408 12.8412C2.95313 13.4088 3.21325 13.9374 3.63308 14.3225C4.05291 14.7076 4.60195 14.9212 5.17166 14.9212C5.74136 14.9212 6.29028 14.7076 6.71011 14.3225C7.12994 13.9374 7.39006 13.4088 7.43911 12.8412C7.48817 12.2736 7.32265 11.7083 6.97512 11.2569C6.62759 10.8054 6.12342 10.5007 5.56216 10.403Z\" fill=\"#007CF7\"/>\n <path d=\"M3.323 25.6441C3.85804 25.6353 4.38521 25.7737 4.847 26.0441C5.28642 26.3036 5.64456 26.6808 5.881 27.1331C6.13048 27.6115 6.25695 28.1445 6.249 28.6841V28.7061C6.25695 29.2456 6.13048 29.7786 5.881 30.2571C5.64472 30.7069 5.28632 31.0809 4.847 31.3361C4.38369 31.6018 3.85701 31.7369 3.323 31.7271C2.91966 31.7373 2.52038 31.6444 2.163 31.4571C1.83661 31.2775 1.56472 31.0132 1.376 30.6921V34.1361H0V25.7541H1.375V26.6781C1.57325 26.3433 1.85997 26.0696 2.20364 25.8872C2.54731 25.7048 2.93462 25.6207 3.323 25.6441ZM4.852 28.6691C4.8604 28.4437 4.82339 28.2189 4.74316 28.0081C4.66293 27.7973 4.54113 27.6048 4.385 27.4421C4.23154 27.2844 4.0469 27.1605 3.84287 27.0782C3.63884 26.9959 3.41989 26.957 3.2 26.9641C2.9075 26.9618 2.61944 27.0356 2.364 27.1781C2.10851 27.3196 1.89707 27.529 1.753 27.7831C1.60011 28.0527 1.52208 28.3582 1.527 28.6681V28.6901C1.52211 29.0011 1.59791 29.3081 1.747 29.5811C1.88654 29.8377 2.09415 30.0508 2.347 30.1971C2.59898 30.3434 2.88563 30.4194 3.177 30.4171C3.47383 30.42 3.76611 30.3441 4.024 30.1971C4.27724 30.0513 4.48497 29.8381 4.624 29.5811C4.77309 29.3081 4.84889 29.0011 4.844 28.6901L4.852 28.6691ZM11.386 31.7161C10.8422 31.7229 10.306 31.5882 9.83 31.3251C9.37177 31.0724 8.9927 30.6975 8.735 30.2421C8.46677 29.7696 8.32874 29.2344 8.335 28.6911V28.6801C8.32874 28.1368 8.46677 27.6016 8.735 27.1291C8.99414 26.6719 9.37263 26.2938 9.83 26.0351C10.3039 25.7659 10.841 25.6278 11.386 25.6351C11.9311 25.6292 12.4682 25.7672 12.943 26.0351C13.3985 26.2883 13.7767 26.6606 14.037 27.1121C14.3057 27.5826 14.4438 28.1163 14.437 28.6581V28.6801C14.4433 29.2234 14.3052 29.7586 14.037 30.2311C13.7788 30.6873 13.4004 31.064 12.943 31.3201C12.4678 31.5866 11.9308 31.7232 11.386 31.7161ZM11.4 30.4061C11.695 30.4094 11.9854 30.3334 12.241 30.1861C12.4918 30.0418 12.6974 29.8306 12.835 29.5761C12.9811 29.3039 13.0552 28.9989 13.05 28.6901V28.6681C13.0549 28.3571 12.9791 28.0501 12.83 27.7771C12.6896 27.5194 12.4801 27.3061 12.225 27.1611C11.9671 27.0141 11.6748 26.9382 11.378 26.9411C11.0863 26.9386 10.7993 27.0146 10.547 27.1611C10.2942 27.3073 10.0865 27.5205 9.947 27.7771C9.79791 28.0501 9.72212 28.3571 9.727 28.6681V28.6901C9.7219 29.0003 9.79994 29.3062 9.953 29.5761C10.098 29.8308 10.3091 30.0415 10.564 30.1861C10.8183 30.3321 11.1068 30.4081 11.4 30.4061ZM18.69 29.3181L18.03 30.0771V31.6061H16.655V23.4551H18.03V28.1851L20.109 25.7541H21.726L19.5 28.3611L22.024 31.6061H20.439L18.69 29.3181ZM28.99 29.0181H24.63C24.6668 29.4343 24.85 29.8241 25.147 30.1181C25.4488 30.3955 25.8484 30.5419 26.258 30.5251C26.5736 30.5313 26.8838 30.4432 27.149 30.2721C27.4078 30.101 27.6135 29.861 27.743 29.5791L28.81 30.1401C28.5655 30.6031 28.2077 30.9967 27.77 31.2841C27.2947 31.5821 26.7417 31.7324 26.181 31.7161C25.6457 31.7235 25.118 31.5885 24.652 31.3251C24.2026 31.0702 23.8332 30.6952 23.585 30.2421C23.325 29.767 23.1924 29.2326 23.2 28.6911V28.6691C23.1931 28.1318 23.3235 27.6017 23.579 27.1291C23.8238 26.6759 24.187 26.2978 24.63 26.0351C25.0787 25.7676 25.5926 25.6291 26.115 25.6351C26.6733 25.6163 27.2246 25.7628 27.7 26.0561C28.119 26.323 28.4545 26.7025 28.668 27.1511C28.8789 27.5904 28.9879 28.0717 28.987 28.5591L28.99 29.0181ZM27.637 28.1181C27.6346 27.9105 27.5817 27.7067 27.483 27.5241C27.3706 27.3162 27.2032 27.1432 26.999 27.0241C26.7444 26.8809 26.4549 26.8116 26.163 26.8241C25.799 26.8101 25.4439 26.9385 25.173 27.1821C24.9088 27.4341 24.7316 27.7637 24.667 28.1231L27.637 28.1181ZM31.223 25.7531H32.598V26.9301C32.7842 26.5482 33.0717 26.2248 33.429 25.9951C33.7826 25.7737 34.1941 25.6627 34.611 25.6761V26.9861H34.446C34.1286 26.9846 33.8161 27.0641 33.538 27.2171C33.2648 27.3629 33.0309 27.5725 32.856 27.8281C32.6877 28.068 32.5972 28.354 32.597 28.6471V31.6061H31.219L31.223 25.7531Z\" fill=\"#007CF7\"/>\n </SvgIcon>\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class AppHeaderLogo888Icon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 40 40\">\n <g fill=\"none\">\n <path opacity=\"0.88\" d=\"M12.826 0.00418895C5.56272 0.18638 -0.177325 6.22105 0.00418895 13.4836C0.0874958 16.8159 1.4326 19.9924 3.7679 22.3704L3.76383 22.3744L3.7679 22.3785C-1.28808 27.5273 -1.24812 35.7896 3.8573 40.8902C6.29893 43.4118 9.67117 44.8172 13.1816 44.7752C20.157 44.761 25.9106 39.3081 26.2973 32.3435V31.3099C26.2641 27.9702 24.9089 24.7795 22.5289 22.4368C24.8296 20.1746 26.1734 17.1146 26.2817 13.89C26.2892 13.6177 26.3048 13.3848 26.3048 13.1599V12.826C26.1233 5.56272 20.0886 -0.177325 12.826 0.00418895ZM9.50659 9.41447C10.4582 8.40666 11.7884 7.84316 13.1741 7.86077C14.5829 7.84113 15.9381 8.40328 16.9195 9.41447C18.9683 11.4619 18.9697 14.7827 16.9229 16.8315C16.9216 16.8328 16.9209 16.8335 16.9195 16.8349C15.9361 17.8434 14.5829 18.4048 13.1741 18.3886C11.7891 18.4021 10.4602 17.8393 9.50659 16.8349C7.46455 14.7827 7.46455 11.4667 9.50659 9.41447ZM16.9223 35.2545C16.9223 35.2545 16.9202 35.2565 16.9189 35.2579C15.9287 36.2515 14.5761 36.7987 13.1741 36.773C11.7945 36.7967 10.467 36.2481 9.50659 35.2579C7.46455 33.2057 7.46455 29.8897 9.50659 27.8375C10.2753 27.0234 11.2906 26.4998 12.383 26.3373C12.6458 26.3501 12.9093 26.3562 13.1741 26.3535C13.4444 26.3569 13.7139 26.3508 13.9821 26.3373C15.0922 26.4991 16.1278 27.022 16.9195 27.8382C18.9683 29.8856 18.9697 33.2064 16.9229 35.2552L16.9223 35.2545Z\" fill=\"#7FFF00\"/>\n <path opacity=\"0.88\" d=\"M79.9993 13.1676V12.8255C79.8178 5.56294 73.7831 -0.177104 66.5199 0.0044102C59.2573 0.185924 53.5165 6.22127 53.6987 13.4839C53.782 16.8161 55.1278 19.9926 57.4631 22.3713L57.4591 22.3753L57.4631 22.3794C52.4071 27.5282 52.4471 35.7905 57.5525 40.8911C59.9942 43.4127 63.3664 44.8181 66.8768 44.7761C73.8522 44.7619 79.6058 39.309 79.9925 32.3444V31.3109C79.9587 27.9711 78.6034 24.7811 76.2241 22.4377C78.5262 20.1762 79.8699 17.1162 79.977 13.8909C79.9844 13.6186 80 13.3938 80 13.1682L79.9993 13.1676ZM63.2005 9.44585C64.1521 8.43804 65.4823 7.87454 66.868 7.89215C68.2774 7.87183 69.632 8.43398 70.6127 9.44585C72.6615 11.4933 72.6636 14.8141 70.6161 16.8629C70.6148 16.8642 70.6141 16.8649 70.6127 16.8663C69.7302 17.7745 68.547 18.319 67.2933 18.4064C67.1518 18.4037 67.0095 18.4024 66.8673 18.4044C66.7298 18.4024 66.5923 18.4037 66.4548 18.4057C65.2201 18.3177 64.0566 17.7725 63.1998 16.8656C61.1577 14.8134 61.1577 11.4974 63.1998 9.44517L63.2005 9.44585ZM70.6195 35.2825C70.6195 35.2825 70.6154 35.2865 70.6134 35.2886C69.6313 36.2991 68.2774 36.8613 66.8687 36.8423C65.4829 36.8585 64.1534 36.2957 63.2011 35.2886C61.1605 33.2391 61.1605 29.9251 63.2011 27.8763C64.022 27.0033 65.1274 26.4642 66.3079 26.347C66.4941 26.3531 66.6811 26.3558 66.8687 26.3538C67.0624 26.3565 67.2547 26.3538 67.4478 26.347C68.6452 26.4642 69.7702 27.0019 70.6141 27.8763C72.6609 29.9197 72.6636 33.2357 70.6202 35.2825H70.6195Z\" fill=\"#7FFF00\"/>\n <path opacity=\"0.88\" d=\"M39.6991 0.00508856C32.4352 0.191344 26.6972 6.23075 26.8834 13.4947C26.9688 16.8229 28.3125 19.9947 30.6438 22.3713L30.6512 22.3794C25.5912 27.5261 25.6298 35.7911 30.7365 40.8911C33.1789 43.4134 36.5518 44.8187 40.0622 44.7768C47.0389 44.7625 52.7932 39.3083 53.1799 32.3424V31.3163C53.1468 27.9759 51.7915 24.7845 49.4108 22.441C51.7109 20.1775 53.054 17.1175 53.1644 13.8923C53.1718 13.597 53.1874 13.3796 53.1874 13.154V12.8201C53.0025 5.55617 46.9631 -0.181167 39.6991 0.00508856ZM36.3872 9.43976C37.3374 8.42924 38.6683 7.86505 40.0554 7.88537C41.4655 7.86234 42.8215 8.42517 43.8015 9.43976C45.8489 11.4838 45.8517 14.7998 43.8076 16.8473C43.8056 16.8493 43.8035 16.8514 43.8015 16.8534C42.919 17.7616 41.7351 18.3062 40.4821 18.3942C40.3405 18.3915 40.1983 18.3902 40.0561 18.3922C39.9186 18.3902 39.7811 18.3915 39.6436 18.3942C38.4089 18.3062 37.2453 17.7603 36.3885 16.8541C34.3472 14.8046 34.3472 11.4899 36.3885 9.44043L36.3872 9.43976ZM43.8076 35.273C43.8076 35.273 43.8035 35.2771 43.8015 35.2791C42.8194 36.2896 41.4648 36.8518 40.0554 36.8335C38.6697 36.8497 37.3395 36.2862 36.3872 35.2791C34.3458 33.2296 34.3458 29.915 36.3872 27.8655C37.2081 26.9924 38.3141 26.4533 39.4946 26.3361C39.6809 26.3422 39.8678 26.3449 40.0554 26.3429C40.2491 26.3456 40.4415 26.3429 40.6338 26.3361C41.8313 26.4533 42.9562 26.9911 43.8008 27.8661C45.8483 29.9102 45.851 33.2262 43.8069 35.2737L43.8076 35.273Z\" fill=\"#7FFF00\"/>\n </g>\n </SvgIcon>\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class SelfExclusionRegulationIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 76 22\" ratio={76/22}>\n <rect x=\"0.5\" y=\"0.5\" width=\"75\" height=\"21\" rx=\"4.5\" fill=\"white\" stroke=\"black\"/>\n <path d=\"M25 11.0212C25 15.9765 20.9859 20 16 20C11.0563 20 7 15.9765 7 10.9788C7.04225 6.02353 11.0563 2 16 2C20.9859 2 25 6.02353 25 11.0212Z\" fill=\"#E20D18\"/>\n <path d=\"M14.6056 15.5529H11.9859C11.7746 15.5529 11.6056 15.3835 11.6056 15.1717V6.82821C11.6056 6.61645 11.7746 6.44704 11.9859 6.44704H14.6056C14.8169 6.44704 14.9859 6.61645 14.9859 6.82821V15.1717C14.9859 15.3835 14.8169 15.5529 14.6056 15.5529Z\" fill=\"white\"/>\n <path d=\"M20.014 15.5953H17.3943C17.1831 15.5953 17.014 15.4259 17.014 15.2141V6.82821C17.014 6.61645 17.1831 6.44704 17.3943 6.44704H20.014C20.2253 6.44704 20.3943 6.61645 20.3943 6.82821V15.1717C20.3943 15.4259 20.2253 15.5953 20.014 15.5953Z\" fill=\"white\"/>\n <path d=\"M33.9455 11.9557C33.9455 12.2127 33.8727 12.4696 33.7636 12.6899C33.6545 12.9468 33.4727 13.1304 33.2909 13.3139C33.0727 13.4975 32.7818 13.6443 32.4909 13.7544C32.2 13.8646 31.8 13.9013 31.3636 13.9013C30.8909 13.9013 30.4909 13.8646 30.1273 13.7544C29.7636 13.681 29.3636 13.5342 29 13.3506V12.2494H29.0727C29.4 12.5063 29.7636 12.7266 30.2 12.8734C30.6364 13.0203 31.0364 13.0937 31.4 13.0937C31.9455 13.0937 32.3455 12.9836 32.6364 12.8C32.9273 12.6165 33.0727 12.3228 33.0727 11.9924C33.0727 11.6987 33 11.4785 32.8545 11.3684C32.7091 11.2582 32.4909 11.1114 32.2 11.038C31.9818 10.9646 31.7636 10.9279 31.5091 10.8911C31.2545 10.8544 31 10.8177 30.7091 10.7443C30.1273 10.6342 29.7273 10.4139 29.4364 10.1203C29.1455 9.82659 29.0364 9.42279 29.0364 8.98229C29.0364 8.43165 29.2545 7.99115 29.7273 7.66077C30.2 7.33039 30.7455 7.14684 31.4727 7.14684C31.9091 7.14684 32.3455 7.18355 32.7091 7.29368C33.0727 7.3671 33.4364 7.47722 33.7273 7.62406V8.65191H33.6545C33.4 8.43165 33.0727 8.28482 32.6727 8.13798C32.2727 7.99115 31.8727 7.91773 31.4364 7.91773C30.9636 7.91773 30.6 8.02786 30.3455 8.2114C30.0545 8.39494 29.9455 8.65191 29.9455 8.94558C29.9455 9.20254 30.0182 9.42279 30.1636 9.56963C30.3091 9.71646 30.5636 9.82659 30.8909 9.93672C31.0727 9.97343 31.3273 10.0101 31.6909 10.0836C32.0182 10.157 32.3091 10.1937 32.5636 10.2671C33.0364 10.3772 33.4 10.5975 33.6545 10.8544C33.8 11.1114 33.9455 11.4785 33.9455 11.9557Z\" fill=\"#020203\"/>\n <path d=\"M39.5818 11.3316C39.5818 11.7354 39.5091 12.1025 39.4 12.4329C39.2909 12.7633 39.1455 13.0202 38.9273 13.2772C38.7455 13.4974 38.5273 13.6443 38.2364 13.7911C37.9455 13.9379 37.6909 13.9747 37.4 13.9747C37.1455 13.9747 36.9273 13.9379 36.7091 13.9012C36.4909 13.8278 36.3091 13.7544 36.0909 13.6443V15.7H35.2909V8.94554H36.0909V9.45947C36.3091 9.27592 36.5637 9.12909 36.8182 8.98225C37.0727 8.87212 37.3637 8.79871 37.6909 8.79871C38.2727 8.79871 38.7091 9.01896 39.0364 9.45947C39.4364 9.89997 39.5818 10.524 39.5818 11.3316ZM38.7455 11.3316C38.7455 10.7443 38.6364 10.3038 38.4546 10.0101C38.2364 9.71643 37.9455 9.56959 37.5455 9.56959C37.3273 9.56959 37.0727 9.6063 36.8546 9.71643C36.6 9.82655 36.3818 9.93668 36.1636 10.1202V12.8734C36.3818 12.9835 36.6 13.0569 36.7455 13.0936C36.9273 13.1304 37.1091 13.1671 37.3273 13.1671C37.7637 13.1671 38.1273 13.0202 38.3818 12.6898C38.6 12.3962 38.7455 11.9557 38.7455 11.3316Z\" fill=\"#020203\"/>\n <path d=\"M45 11.4418H41.4364C41.4364 11.7355 41.4727 11.9925 41.5818 12.2127C41.6546 12.433 41.8 12.6165 41.9455 12.7634C42.0909 12.9102 42.2727 13.0203 42.4909 13.0937C42.7091 13.1671 42.9273 13.2039 43.1818 13.2039C43.5091 13.2039 43.8364 13.1304 44.1637 13.0203C44.4909 12.8735 44.7455 12.7634 44.8909 12.6165H44.9273V13.4975C44.6364 13.6077 44.3818 13.7178 44.0909 13.7912C43.8 13.8646 43.5091 13.9013 43.1818 13.9013C42.3818 13.9013 41.7637 13.6811 41.2909 13.2406C40.8182 12.8001 40.6 12.176 40.6 11.3684C40.6 10.5608 40.8182 9.93677 41.2546 9.45955C41.6909 8.98234 42.2364 8.76208 42.9637 8.76208C43.6182 8.76208 44.1273 8.94563 44.4546 9.34943C44.8182 9.71652 45 10.2671 45 11.0013V11.4418ZM44.2 10.8178C44.2 10.3773 44.0909 10.0469 43.8727 9.82664C43.6546 9.60639 43.3273 9.45955 42.8909 9.45955C42.4546 9.45955 42.0909 9.60639 41.8364 9.86335C41.5818 10.1203 41.4364 10.4507 41.4 10.8178H44.2Z\" fill=\"#020203\"/>\n <path d=\"M47.1091 13.8278H46.3091V7H47.1091V13.8278Z\" fill=\"#020203\"/>\n <path d=\"M53.0728 11.3316C53.0728 11.7354 53 12.1025 52.8909 12.4329C52.7818 12.7633 52.6364 13.0202 52.4182 13.2772C52.2364 13.4974 52.0182 13.6443 51.7273 13.7911C51.4364 13.9379 51.1818 13.9747 50.8909 13.9747C50.6364 13.9747 50.4182 13.9379 50.2 13.9012C49.9818 13.8278 49.8 13.7544 49.5818 13.6443V15.7H48.8182V8.94554H49.6182V9.45947C49.8364 9.27592 50.0909 9.12909 50.3455 8.98225C50.6 8.87212 50.8909 8.79871 51.2182 8.79871C51.8 8.79871 52.2364 9.01896 52.5637 9.45947C52.9273 9.89997 53.0728 10.524 53.0728 11.3316ZM52.2364 11.3316C52.2364 10.7443 52.1273 10.3038 51.9455 10.0101C51.7637 9.71643 51.4364 9.56959 51.0364 9.56959C50.8182 9.56959 50.5637 9.6063 50.3455 9.71643C50.0909 9.82655 49.8728 9.93668 49.6546 10.1202V12.8734C49.8728 12.9835 50.0909 13.0569 50.2364 13.0936C50.4182 13.1304 50.6 13.1671 50.8182 13.1671C51.2546 13.1671 51.6182 13.0202 51.8728 12.6898C52.1273 12.3962 52.2364 11.9557 52.2364 11.3316Z\" fill=\"#020203\"/>\n <path d=\"M58.2 13.8279H57.4V13.314C57.3273 13.3507 57.2182 13.4241 57.1091 13.5342C57 13.6076 56.8546 13.6811 56.7455 13.7545C56.6 13.8279 56.4546 13.8646 56.2727 13.938C56.0909 13.9747 55.8727 14.0114 55.6546 14.0114C55.2182 14.0114 54.8546 13.8646 54.5637 13.5709C54.2727 13.2773 54.1273 12.9102 54.1273 12.4697C54.1273 12.1026 54.2 11.8089 54.3455 11.5886C54.4909 11.3684 54.7091 11.1849 55 11.038C55.2909 10.8912 55.6546 10.8178 56.0546 10.7811C56.4546 10.7443 56.9273 10.7076 57.4 10.6709V10.5608C57.4 10.3773 57.3637 10.2304 57.2909 10.0836C57.2182 9.97346 57.1455 9.86333 57 9.78991C56.8909 9.7165 56.7455 9.67979 56.6 9.64308C56.4546 9.60637 56.2727 9.60637 56.0909 9.60637C55.8727 9.60637 55.6546 9.64308 55.3637 9.67979C55.0727 9.7165 54.8182 9.82662 54.5637 9.93675H54.5273V9.09245C54.6727 9.05574 54.9273 8.98232 55.2182 8.94561C55.5091 8.9089 55.8 8.87219 56.0909 8.87219C56.4182 8.87219 56.7455 8.9089 56.9636 8.94561C57.2182 9.01903 57.4364 9.09245 57.6182 9.23928C57.8 9.38612 57.9455 9.53295 58.0182 9.75321C58.0909 9.97346 58.1636 10.2304 58.1636 10.5608V13.8279H58.2ZM57.3637 12.6165V11.2583C57.1091 11.2583 56.8182 11.295 56.4909 11.3317C56.1637 11.3684 55.8727 11.4051 55.6909 11.4418C55.4727 11.5152 55.2546 11.6254 55.1091 11.7722C54.9637 11.919 54.8909 12.1026 54.8909 12.3595C54.8909 12.6532 54.9636 12.8367 55.1455 12.9836C55.3273 13.1304 55.5818 13.2038 55.9091 13.2038C56.2 13.2038 56.4546 13.1304 56.7091 13.0203C56.9636 12.9102 57.1818 12.7633 57.3637 12.6165Z\" fill=\"#020203\"/>\n <path d=\"M63.8363 13.8278H63.0363V13.2772C62.7454 13.4974 62.4909 13.681 62.2363 13.7911C61.9818 13.9012 61.6909 13.9746 61.4 13.9746C60.8909 13.9746 60.4909 13.8278 60.2 13.4974C59.9091 13.167 59.7636 12.7265 59.7636 12.1025V8.94552H60.5636V11.7354C60.5636 11.9924 60.5636 12.2126 60.6 12.3594C60.6363 12.543 60.6727 12.6898 60.7454 12.8C60.8182 12.9101 60.9272 13.0202 61.0363 13.0936C61.1454 13.167 61.3272 13.167 61.5818 13.167C61.8 13.167 62.0182 13.0936 62.2727 12.9835C62.5272 12.8734 62.7454 12.7265 62.9636 12.543V8.90881H63.7636V13.8278H63.8363Z\" fill=\"#020203\"/>\n <path d=\"M69 12.3962C69 12.8367 68.8182 13.2038 68.4545 13.4974C68.0909 13.7911 67.5818 13.9379 66.9636 13.9379C66.6 13.9379 66.2727 13.9012 65.9818 13.7911C65.6909 13.7177 65.4364 13.6076 65.2182 13.4974V12.5797H65.2545C65.5091 12.7633 65.8 12.9468 66.1273 13.0569C66.4545 13.1671 66.7454 13.2405 67.0364 13.2405C67.4 13.2405 67.6909 13.1671 67.8727 13.0569C68.0909 12.9468 68.1636 12.7633 68.1636 12.5063C68.1636 12.3228 68.0909 12.1759 67.9818 12.0658C67.8727 11.9557 67.6545 11.8823 67.3636 11.8088C67.2545 11.7721 67.1091 11.7354 66.9273 11.6987C66.7454 11.662 66.5636 11.6253 66.4182 11.5886C65.9818 11.4785 65.6909 11.2949 65.5091 11.0747C65.3273 10.8544 65.2545 10.5974 65.2545 10.2671C65.2545 10.0835 65.2909 9.86326 65.3636 9.71643C65.4363 9.53288 65.5818 9.38605 65.7273 9.23921C65.8727 9.09238 66.0909 8.98225 66.3454 8.90883C66.6 8.83542 66.8909 8.79871 67.1818 8.79871C67.4727 8.79871 67.7636 8.83542 68.0545 8.90883C68.3454 8.98225 68.6 9.05567 68.7818 9.16579V10.0468H68.7454C68.5273 9.89997 68.2727 9.75314 67.9818 9.64301C67.6909 9.53288 67.4 9.49617 67.1091 9.49617C66.8182 9.49617 66.5636 9.56959 66.3454 9.67972C66.1273 9.78985 66.0545 9.97339 66.0545 10.1936C66.0545 10.3772 66.1273 10.5607 66.2363 10.6341C66.3454 10.7443 66.5636 10.8177 66.8182 10.8911C66.9636 10.9278 67.1454 10.9645 67.3273 11.0012C67.5091 11.0379 67.6545 11.0747 67.8 11.1114C68.1636 11.1848 68.4545 11.3316 68.6727 11.5519C68.8909 11.7721 69 12.0658 69 12.3962Z\" fill=\"#020203\"/>\n </SvgIcon>\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class SelfExclusionRegulationSymbolIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 18 18\">\n <path d=\"M18 9.02118C18 13.9765 13.9859 18 9 18C4.05634 18 0 13.9765 0 8.97882C0.0422535 4.02353 4.05634 0 9 0C13.9859 0 18 4.02353 18 9.02118Z\" fill=\"#E20D18\"/>\n <path d=\"M7.60559 13.5529H4.98587C4.7746 13.5529 4.60559 13.3835 4.60559 13.1717V4.82821C4.60559 4.61645 4.7746 4.44704 4.98587 4.44704H7.60559C7.81686 4.44704 7.98587 4.61645 7.98587 4.82821V13.1717C7.98587 13.3835 7.81686 13.5529 7.60559 13.5529Z\" fill=\"white\"/>\n <path d=\"M13.014 13.5953H10.3943C10.1831 13.5953 10.014 13.4259 10.014 13.2141V4.82821C10.014 4.61645 10.1831 4.44704 10.3943 4.44704H13.014C13.2253 4.44704 13.3943 4.61645 13.3943 4.82821V13.1717C13.3943 13.4259 13.2253 13.5953 13.014 13.5953Z\" fill=\"white\"/>\n </SvgIcon>\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class GamingLimitRegulationIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 91 22\" ratio={91/22}>\n <rect x=\"0.5\" y=\"0.5\" width=\"90\" height=\"21\" rx=\"4.5\" fill=\"white\" stroke=\"black\"/>\n <path d=\"M36.8577 11.7867C36.8577 12.0349 36.7867 12.2831 36.6804 12.4959C36.574 12.7441 36.3967 12.9214 36.184 13.0987C35.9712 13.2759 35.6876 13.4178 35.4039 13.5242C35.1203 13.6305 34.7302 13.666 34.3047 13.666C33.8438 13.666 33.4538 13.6305 33.0992 13.5242C32.7446 13.4532 32.3546 13.3114 32 13.1341V12.1059H32.0709C32.39 12.3541 32.7446 12.5668 33.1701 12.7086C33.5956 12.8505 33.9856 12.9214 34.3402 12.9214C34.872 12.9214 35.2621 12.815 35.5457 12.6377C35.8294 12.4604 35.9712 12.1768 35.9712 11.8577C35.9712 11.574 35.9003 11.3612 35.7585 11.2549C35.6167 11.1485 35.4039 11.0067 35.1203 10.9358C34.9075 10.8648 34.6948 10.8294 34.4466 10.7939C34.1984 10.7585 33.9502 10.723 33.6665 10.6521C33.0992 10.5457 32.7091 10.333 32.4255 10.0493C32.1418 9.76567 32.0355 9.37564 32.0355 8.95015C32.0355 8.41829 32.2482 7.9928 32.7091 7.67368C33.1701 7.35456 33.702 7.17728 34.4111 7.17728C34.8366 7.17728 35.2621 7.21273 35.6167 7.31911C35.9712 7.39002 36.3258 7.49639 36.6095 7.63822V8.63103H36.5385C36.2903 8.41829 35.9712 8.27646 35.5812 8.13463C35.1912 7.9928 34.8011 7.92188 34.3756 7.92188C33.9147 7.92188 33.5601 8.02825 33.3119 8.20554C33.0637 8.38283 32.9219 8.63103 32.9219 8.91469C32.9219 9.16289 32.9928 9.37564 33.1346 9.51747C33.2765 9.65929 33.5247 9.76567 33.8438 9.87204C34.0211 9.9075 34.2693 9.94295 34.6238 10.0139C34.943 10.0848 35.2266 10.1202 35.4748 10.1912C35.9358 10.2975 36.2903 10.5103 36.5385 10.7585C36.7513 10.9712 36.8577 11.3258 36.8577 11.7867Z\" fill=\"#020203\"/>\n <path d=\"M42.3181 11.1485C42.3181 11.5385 42.2472 11.8931 42.1408 12.2122C42.0344 12.5313 41.8926 12.7795 41.6799 13.0277C41.5026 13.2405 41.2898 13.3823 41.0416 13.5241C40.7934 13.6305 40.5098 13.7014 40.2261 13.7014C39.9779 13.7014 39.7652 13.666 39.5524 13.6305C39.3397 13.5596 39.1624 13.4887 38.9496 13.3823V15.3679H38.1696V8.84376H38.9496V9.34017C39.1624 9.16288 39.4106 9.02105 39.6588 8.87922C39.907 8.77285 40.1907 8.70193 40.5098 8.70193C41.0771 8.70193 41.5026 8.91468 41.8217 9.34017C42.1763 9.80111 42.3181 10.4039 42.3181 11.1485ZM41.5026 11.184C41.5026 10.6166 41.3962 10.1911 41.2189 9.90749C41.0416 9.62383 40.7225 9.482 40.3325 9.482C40.1197 9.482 39.8715 9.51746 39.6588 9.62383C39.4106 9.7302 39.1978 9.83657 38.9851 10.0139V12.6732C39.1978 12.7795 39.4106 12.8505 39.5524 12.8859C39.7297 12.9214 39.907 12.9568 40.1197 12.9568C40.5452 12.9568 40.8998 12.815 41.148 12.4959C41.3962 12.2122 41.5026 11.7513 41.5026 11.184Z\" fill=\"#020203\"/>\n <path d=\"M47.5304 11.2903H44.0555C44.0555 11.574 44.091 11.8222 44.1974 12.0349C44.2683 12.2477 44.4101 12.425 44.5519 12.5668C44.6938 12.7086 44.8711 12.815 45.0838 12.8859C45.2966 12.9568 45.5093 12.9923 45.7575 12.9923C46.0766 12.9923 46.3957 12.9214 46.7148 12.815C47.034 12.6732 47.2822 12.5668 47.424 12.425H47.4595V13.2759C47.1758 13.3823 46.9276 13.4887 46.6439 13.5596C46.3603 13.6305 46.0766 13.666 45.7575 13.666C44.9774 13.666 44.3747 13.4532 43.9137 13.0277C43.4882 12.6022 43.24 11.9995 43.24 11.2194C43.24 10.4393 43.4528 9.83657 43.8783 9.37563C44.3037 8.91468 44.8356 8.70193 45.5448 8.70193C46.183 8.70193 46.6794 8.87922 46.9985 9.26925C47.3531 9.62383 47.5304 10.1557 47.5304 10.8648V11.2903ZM46.7858 10.6875C46.7858 10.2621 46.6794 9.94294 46.4666 9.7302C46.2539 9.51745 45.9348 9.37563 45.5093 9.37563C45.0838 9.37563 44.7292 9.51746 44.481 9.76566C44.2328 10.0139 44.091 10.333 44.0555 10.6875H46.7858Z\" fill=\"#020203\"/>\n <path d=\"M49.5869 13.5596H48.8068V7H49.5869V13.5596Z\" fill=\"#020203\"/>\n <path d=\"M55.0119 13.0277C55.0119 13.8433 54.8346 14.4106 54.48 14.8006C54.1254 15.1906 53.5581 15.3679 52.8135 15.3679C52.5653 15.3679 52.3171 15.3679 52.0689 15.3325C51.8207 15.297 51.608 15.2616 51.3597 15.1906V14.3751H51.3952C51.537 14.4106 51.7143 14.4815 51.998 14.5524C52.2816 14.6233 52.5653 14.6588 52.849 14.6588C53.1326 14.6588 53.3454 14.6233 53.5226 14.5524C53.6999 14.4815 53.8418 14.4106 53.9481 14.2687C54.0545 14.1624 54.1254 14.0205 54.1609 13.8787C54.1963 13.7369 54.2318 13.5596 54.2318 13.3469V12.9214C53.9836 13.0986 53.7709 13.2405 53.5581 13.3469C53.3454 13.4532 53.0617 13.4887 52.7426 13.4887C52.1753 13.4887 51.7498 13.2759 51.3952 12.8859C51.0761 12.4959 50.8988 11.8931 50.8988 11.1839C50.8988 10.7939 50.9697 10.4393 51.0761 10.1202C51.1825 9.83657 51.3597 9.58837 51.537 9.37562C51.7143 9.16288 51.9271 9.02105 52.2107 8.91468C52.4589 8.8083 52.7426 8.73739 52.9908 8.73739C53.2744 8.73739 53.4872 8.77285 53.6645 8.8083C53.8418 8.84376 54.0545 8.95013 54.2318 9.05651L54.2673 8.84376H55.0119V13.0277ZM54.2318 12.2831V9.7302C54.0191 9.62382 53.8418 9.55291 53.629 9.51745C53.4517 9.48199 53.2744 9.44654 53.0972 9.44654C52.6717 9.44654 52.3171 9.58837 52.0689 9.87203C51.8207 10.1557 51.6789 10.5812 51.6789 11.1485C51.6789 11.6804 51.7852 12.0704 51.9625 12.354C52.1398 12.6377 52.4589 12.7795 52.8844 12.7795C53.1326 12.7795 53.3454 12.7441 53.5936 12.6377C53.8418 12.5313 54.0191 12.425 54.2318 12.2831Z\" fill=\"#020203\"/>\n <path d=\"M59.5504 9.73019H59.515C59.4086 9.69474 59.2668 9.69474 59.1604 9.65928C59.054 9.65928 58.9122 9.62382 58.7704 9.62382C58.5222 9.62382 58.274 9.69474 58.0612 9.80111C57.8485 9.90748 57.6003 10.0493 57.3875 10.2266V13.5596H56.6429V8.84376H57.423V9.55291C57.7421 9.3047 58.0258 9.12742 58.2385 9.02104C58.4867 8.91467 58.7349 8.87922 58.9831 8.87922C59.1249 8.87922 59.2313 8.87922 59.2668 8.87922C59.3377 8.87922 59.4086 8.91467 59.5504 8.91467V9.73019Z\" fill=\"#020203\"/>\n <path d=\"M64.018 13.5596H63.238V13.0632C63.1671 13.0987 63.0607 13.1696 62.9543 13.2759C62.8479 13.3823 62.7061 13.4178 62.5997 13.4887C62.4579 13.5596 62.3161 13.5951 62.1388 13.666C61.9615 13.7014 61.7488 13.7369 61.536 13.7369C61.1105 13.7369 60.756 13.5951 60.4723 13.3114C60.1886 13.0277 60.0468 12.6732 60.0468 12.2477C60.0468 11.8931 60.1177 11.6094 60.2596 11.3967C60.4014 11.184 60.6141 11.0067 60.8978 10.8648C61.1814 10.723 61.536 10.6521 61.9261 10.6166C62.3161 10.5812 62.777 10.5457 63.238 10.5103V10.4039C63.238 10.2266 63.2025 10.0848 63.1316 9.94295C63.0607 9.83658 62.9898 9.7302 62.8479 9.65929C62.7416 9.58837 62.5997 9.55292 62.4579 9.51746C62.3161 9.44654 62.1388 9.44654 61.9615 9.44654C61.7488 9.44654 61.536 9.482 61.2524 9.51746C61.0042 9.58837 60.7205 9.65929 60.4723 9.76566H60.4368V8.95014C60.5787 8.91468 60.8269 8.87923 61.1105 8.80831C61.3942 8.77285 61.6779 8.7374 61.9615 8.7374C62.2806 8.7374 62.5997 8.77285 62.8125 8.80831C63.0607 8.87923 63.2734 8.95014 63.4507 9.09197C63.628 9.2338 63.7698 9.37563 63.8408 9.58837C63.9471 9.80112 63.9826 10.0493 63.9826 10.3684V13.5596H64.018ZM63.238 12.3895V11.0776C62.9898 11.0776 62.7061 11.113 62.387 11.1485C62.0679 11.184 61.7842 11.2194 61.6069 11.2549C61.3942 11.3258 61.1814 11.4322 61.0396 11.574C60.8978 11.7158 60.8269 11.8931 60.8269 12.1413C60.8269 12.425 60.8978 12.6023 61.0751 12.7441C61.2524 12.8859 61.5006 12.9568 61.8197 12.9568C62.1033 12.9568 62.3515 12.8859 62.5997 12.7795C62.8125 12.6732 63.0252 12.5668 63.238 12.3895ZM61.7488 8.0637H60.8978V7.24818H61.7488V8.0637ZM63.4862 8.0637H62.6352V7.24818H63.4862V8.0637Z\" fill=\"#020203\"/>\n <path d=\"M69.5139 13.5596H68.7339V10.8648C68.7339 10.6521 68.7339 10.4393 68.6984 10.2621C68.663 10.0848 68.6275 9.90749 68.5566 9.80111C68.4857 9.69474 68.3793 9.58837 68.2375 9.55291C68.0956 9.482 67.9183 9.482 67.7056 9.482C67.4929 9.482 67.2801 9.55291 67.0319 9.65929C66.7837 9.76566 66.571 9.90749 66.3582 10.0848V13.5951H65.5782V8.84376H66.3582V9.37563C66.6064 9.16288 66.8546 9.02105 67.1383 8.87922C67.3865 8.77285 67.6701 8.70193 67.9538 8.70193C68.4502 8.70193 68.8402 8.84376 69.1239 9.16288C69.4076 9.482 69.5139 9.90749 69.5139 10.4748V13.5596Z\" fill=\"#020203\"/>\n <path d=\"M74.4779 12.2122C74.4779 12.6377 74.3007 12.9923 73.9461 13.2759C73.5915 13.5596 73.0951 13.7014 72.4923 13.7014C72.1378 13.7014 71.8186 13.666 71.535 13.5596C71.2513 13.4887 71.0031 13.3823 70.7904 13.2759V12.3895H70.8258C71.074 12.5668 71.3577 12.7441 71.6768 12.8504C71.9959 12.9568 72.2796 13.0277 72.5632 13.0277C72.9178 13.0277 73.2015 12.9568 73.3788 12.8504C73.5915 12.7441 73.6624 12.5668 73.6624 12.3186C73.6624 12.1413 73.5915 11.9995 73.4851 11.8931C73.3788 11.7867 73.166 11.7158 72.8824 11.6449C72.776 11.6094 72.6342 11.574 72.4569 11.5385C72.2796 11.5031 72.1023 11.4676 71.9605 11.4322C71.535 11.3258 71.2513 11.1485 71.074 10.9357C70.8967 10.723 70.8258 10.4748 70.8258 10.1557C70.8258 9.9784 70.8613 9.76565 70.9322 9.62382C71.0031 9.44654 71.145 9.30471 71.2868 9.16288C71.4286 9.02105 71.6414 8.91468 71.8896 8.84376C72.1378 8.77285 72.4214 8.73739 72.7051 8.73739C72.9887 8.73739 73.2724 8.77285 73.5561 8.84376C73.8397 8.91468 74.0879 8.98559 74.2652 9.09196V9.94294H74.2297C74.017 9.80111 73.7688 9.65928 73.4851 9.55291C73.2015 9.44654 72.9178 9.41108 72.6342 9.41108C72.3505 9.41108 72.1023 9.48199 71.8896 9.58837C71.6768 9.69474 71.6059 9.87203 71.6059 10.0848C71.6059 10.2621 71.6768 10.4393 71.7832 10.5103C71.8896 10.6166 72.1023 10.6875 72.3505 10.7585C72.4923 10.7939 72.6696 10.8294 72.8469 10.8648C73.0242 10.9003 73.166 10.9357 73.3079 10.9712C73.6624 11.0421 73.9461 11.1839 74.1588 11.3967C74.3716 11.574 74.4779 11.8576 74.4779 12.2122Z\" fill=\"#020203\"/>\n <path d=\"M79.5839 11.2903H76.109C76.109 11.574 76.1445 11.8222 76.2509 12.0349C76.3572 12.2477 76.4636 12.425 76.6054 12.5668C76.7473 12.7086 76.9246 12.815 77.1373 12.8859C77.35 12.9568 77.5628 12.9923 77.811 12.9923C78.1301 12.9923 78.4492 12.9214 78.7683 12.815C79.0875 12.6732 79.3357 12.5668 79.4775 12.425H79.5129V13.2759C79.2293 13.3823 78.9811 13.4887 78.6974 13.5596C78.4138 13.6305 78.1301 13.666 77.811 13.666C77.0309 13.666 76.4282 13.4532 75.9672 13.0277C75.5417 12.6022 75.2935 11.9995 75.2935 11.2194C75.2935 10.4393 75.5063 9.83657 75.9317 9.37563C76.3572 8.91468 76.8891 8.70193 77.5982 8.70193C78.2365 8.70193 78.7329 8.87922 79.052 9.26925C79.3711 9.65928 79.5839 10.1557 79.5839 10.8648V11.2903ZM78.8038 10.6875C78.8038 10.2621 78.6974 9.94294 78.4847 9.7302C78.2719 9.51745 77.9528 9.37563 77.5273 9.37563C77.1018 9.37563 76.7473 9.51746 76.4991 9.76566C76.2509 10.0139 76.109 10.333 76.0736 10.6875H78.8038Z\" fill=\"#020203\"/>\n <path d=\"M83.7678 9.73019H83.7324C83.626 9.69474 83.4842 9.69474 83.3778 9.65928C83.2714 9.65928 83.1296 9.62382 82.9878 9.62382C82.7396 9.62382 82.4914 9.69474 82.2786 9.80111C82.0659 9.90748 81.8177 10.0493 81.6049 10.2266V13.5596H80.8249V8.84376H81.6049V9.55291C81.924 9.3047 82.2077 9.12742 82.4204 9.02104C82.6686 8.91467 82.9168 8.87922 83.1651 8.87922C83.3069 8.87922 83.4133 8.87922 83.4487 8.87922C83.5196 8.87922 83.5905 8.91467 83.7324 8.91467V9.73019H83.7678Z\" fill=\"#020203\"/>\n <path d=\"M16.8341 19.2535C12.1889 19.2535 8.41476 15.4793 8.41476 10.8342C8.41476 6.18903 12.1889 2.41484 16.8341 2.41484C21.4792 2.41484 25.2534 6.18903 25.2534 10.8342C25.2534 15.4793 21.4792 19.2535 16.8341 19.2535Z\" fill=\"white\"/>\n <path d=\"M16.8341 2.82949C21.2719 2.82949 24.8387 6.43778 24.8387 10.8341C24.8387 15.2719 21.2304 18.8387 16.8341 18.8387C12.3963 18.8387 8.82949 15.2304 8.82949 10.8341C8.82949 6.3963 12.3963 2.82949 16.8341 2.82949ZM16.8341 2C11.9816 2 8 5.94008 8 10.8341C8 15.6866 11.9401 19.6682 16.8341 19.6682C21.6866 19.6682 25.6682 15.7281 25.6682 10.8341C25.6267 5.94008 21.6866 2 16.8341 2Z\" fill=\"#009739\"/>\n <path d=\"M14.4286 5.56689L17.6221 10.6268\" stroke=\"#009739\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n <path d=\"M13.8479 13.447L17.6635 10.7926\" stroke=\"#009739\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n <path d=\"M23.5115 20C26.4663 20 28.8617 17.6046 28.8617 14.6498C28.8617 11.6949 26.4663 9.29956 23.5115 9.29956C20.5567 9.29956 18.1613 11.6949 18.1613 14.6498C18.1613 17.6046 20.5567 20 23.5115 20Z\" fill=\"#009739\"/>\n <path d=\"M20.4839 11.9955H21.6037V14.2351L23.3456 11.9955H24.7557L22.765 14.5255L24.8387 17.3043H23.47L21.6037 14.8158V17.3043H20.4839V11.9955Z\" fill=\"white\"/>\n <path d=\"M26.2073 13.8204V14.3181C26.2903 14.1522 26.4147 14.0277 26.5806 13.9033C26.705 13.8204 26.8295 13.7374 26.9539 13.7374C27.0368 13.7374 27.0783 13.7374 27.1612 13.7374V14.8572C27.0783 14.8572 26.9954 14.8157 26.9124 14.8157C26.705 14.8157 26.5391 14.8987 26.4147 15.0231C26.2903 15.189 26.2488 15.3964 26.2488 15.6452V17.1798H25.2119V13.7374H26.2073V13.8204Z\" fill=\"white\"/>\n <path d=\"M9.99081 10.8341H10.9862\" stroke=\"#009739\" strokeMiterlimit=\"10\"strokeLinecap=\"round\"/>\n <path d=\"M16.917 4.90329C16.917 4.51457 16.917 3.90791 16.917 3.90791\" stroke=\"#009739\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n <path d=\"M16.8341 17.9678V16.9725\" stroke=\"#009739\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n </SvgIcon>\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class GamingLimitRegulationSymbolIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 21 18\" ratio={21/18}>\n <path d=\"M8.8341 17.2535C4.18895 17.2535 0.414764 13.4793 0.414764 8.83418C0.414764 4.18903 4.18895 0.414841 8.8341 0.414841C13.4793 0.414841 17.2534 4.18903 17.2534 8.83418C17.2534 13.4793 13.4793 17.2535 8.8341 17.2535Z\" fill=\"white\"/>\n <path d=\"M8.83408 0.829491C13.2719 0.829491 16.8387 4.43778 16.8387 8.83408C16.8387 13.2719 13.2304 16.8387 8.83408 16.8387C4.3963 16.8387 0.829491 13.2304 0.829491 8.83408C0.829491 4.3963 4.3963 0.829491 8.83408 0.829491ZM8.83408 0C3.98156 0 0 3.94008 0 8.83408C0 13.6866 3.94008 17.6682 8.83408 17.6682C13.6866 17.6682 17.6682 13.7281 17.6682 8.83408C17.6267 3.94008 13.6866 0 8.83408 0Z\" fill=\"#009739\"/>\n <path d=\"M6.42856 3.56689L9.6221 8.62678\" stroke=\"#009739\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n <path d=\"M5.84787 11.447L9.66353 8.79263\" stroke=\"#009739\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n <path d=\"M15.5115 18C18.4663 18 20.8617 15.6046 20.8617 12.6498C20.8617 9.69494 18.4663 7.29956 15.5115 7.29956C12.5567 7.29956 10.1613 9.69494 10.1613 12.6498C10.1613 15.6046 12.5567 18 15.5115 18Z\" fill=\"#009739\"/>\n <path d=\"M12.4839 9.99551H13.6037V12.2351L15.3456 9.99551H16.7557L14.765 12.5255L16.8387 15.3043H15.47L13.6037 12.8158V15.3043H12.4839V9.99551V9.99551Z\" fill=\"white\"/>\n <path d=\"M18.2073 11.8204V12.3181C18.2903 12.1522 18.4147 12.0277 18.5806 11.9033C18.705 11.8204 18.8295 11.7374 18.9539 11.7374C19.0368 11.7374 19.0783 11.7374 19.1612 11.7374V12.8572C19.0783 12.8572 18.9954 12.8157 18.9124 12.8157C18.705 12.8157 18.5391 12.8987 18.4147 13.0231C18.2903 13.189 18.2488 13.3964 18.2488 13.6452V15.1798H17.2119V11.7374H18.2073V11.8204Z\" fill=\"white\"/>\n <path d=\"M1.99081 8.83414H2.9862\" stroke=\"#009739\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n <path d=\"M8.91702 2.90329C8.91702 2.51457 8.91702 1.90791 8.91702 1.90791\" stroke=\"#009739\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n <path d=\"M8.83408 15.9678V14.9725\" stroke=\"#009739\" strokeMiterlimit=\"10\" strokeLinecap=\"round\"/>\n </SvgIcon>\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class SelfTestRegulationIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 75 22\" ratio={75/22}>\n <rect x=\"0.5\" y=\"0.5\" width=\"74\" height=\"21\" rx=\"4.5\" fill=\"white\" stroke=\"black\"/>\n <path d=\"M33.1167 12.0047C33.1167 12.2661 33.042 12.5276 32.93 12.7517C32.8179 12.9758 32.6312 13.1998 32.4071 13.3866C32.183 13.5733 31.8842 13.7227 31.5854 13.8348C31.2866 13.9468 30.8758 13.9842 30.4276 13.9842C29.9421 13.9842 29.5313 13.9468 29.1578 13.8348C28.7843 13.7601 28.3735 13.6107 28 13.4239V12.3035H28.0747C28.4108 12.5649 28.7843 12.789 29.2325 12.9384C29.6807 13.0878 30.0915 13.1625 30.465 13.1625C31.0252 13.1625 31.436 13.0505 31.7348 12.8637C32.0336 12.677 32.183 12.3782 32.183 12.042C32.183 11.7433 32.1083 11.5192 31.9589 11.4071C31.8095 11.2951 31.5854 11.1457 31.2866 11.071C31.0626 10.9963 30.8385 10.9589 30.577 10.9216C30.3156 10.8843 30.0542 10.8469 29.7554 10.7722C29.1578 10.6602 28.747 10.4361 28.4482 10.1373C28.1494 9.8385 28.0373 9.42767 28.0373 8.97949C28.0373 8.41927 28.2614 7.97109 28.747 7.63495C29.2325 7.29882 29.7927 7.11208 30.5397 7.11208C30.9879 7.11208 31.436 7.14942 31.8095 7.26147C32.183 7.33617 32.5565 7.44821 32.8553 7.5976V8.64336H32.7806C32.5191 8.41927 32.183 8.26987 31.7722 8.12048C31.3613 7.97109 30.9505 7.89639 30.5023 7.89639C30.0168 7.89639 29.6433 8.00843 29.3819 8.19518C29.0831 8.38192 28.9711 8.64336 28.9711 8.94214C28.9711 9.20358 29.0458 9.42767 29.1951 9.57706C29.3445 9.72646 29.606 9.8385 29.9421 9.95054C30.1289 9.98789 30.3903 10.0252 30.7638 10.0999C31.0999 10.1746 31.3987 10.212 31.6601 10.2867C32.1457 10.3987 32.5191 10.6228 32.7806 10.8843C32.9673 11.183 33.1167 11.5565 33.1167 12.0047Z\" fill=\"#020203\"/>\n <path d=\"M36.0299 14.0215C36.0299 14.619 35.8805 15.0299 35.5817 15.3287C35.2829 15.6274 34.8721 15.7768 34.3866 15.7768C34.2745 15.7768 34.1251 15.7768 33.901 15.7395C33.7143 15.7021 33.5275 15.7021 33.4155 15.6648V14.8805H33.4528C33.5275 14.9178 33.6396 14.9552 33.789 14.9925C33.9384 15.0299 34.0504 15.0672 34.1998 15.0672C34.4239 15.0672 34.5733 15.0299 34.7227 14.9925C34.8347 14.9178 34.9468 14.8431 35.0215 14.7311C35.0962 14.619 35.1335 14.4696 35.1335 14.3203C35.1709 14.1709 35.1709 13.9468 35.1709 13.7227V9.65172H34.1251V8.9421H35.9925V14.0215H36.0299ZM36.1046 8.12044H35.1709V7.26143H36.1046V8.12044Z\" fill=\"#020203\"/>\n <path d=\"M41.6321 13.9094H40.7731V13.3865C40.6984 13.4239 40.5864 13.4986 40.4743 13.6106C40.3623 13.7227 40.2129 13.76 40.1008 13.8347C39.9515 13.9094 39.8021 13.9468 39.6153 14.0215C39.4286 14.0588 39.2045 14.0962 38.9804 14.0962C38.5322 14.0962 38.1587 13.9468 37.86 13.648C37.5612 13.3119 37.4118 12.9384 37.4118 12.4528C37.4118 12.0794 37.4865 11.7806 37.6359 11.5565C37.7853 11.3324 38.0093 11.1456 38.3081 10.9963C38.6069 10.8469 38.9804 10.7722 39.3912 10.7348C39.8021 10.6975 40.2876 10.6601 40.7731 10.6228V10.5107C40.7731 10.324 40.7358 10.1746 40.6611 10.0252C40.5864 9.87581 40.5117 9.80111 40.3623 9.72641C40.2502 9.65172 40.1009 9.61437 39.9515 9.57702C39.8021 9.53967 39.6153 9.53967 39.4286 9.53967C39.2045 9.53967 38.9804 9.57702 38.6816 9.61437C38.4202 9.68907 38.1214 9.76376 37.86 9.87581H37.8226V9.0168C37.972 8.97945 38.2334 8.90475 38.5322 8.86741C38.831 8.83006 39.1298 8.79271 39.4286 8.79271C39.7647 8.79271 40.1009 8.83006 40.3249 8.86741C40.5864 8.9421 40.8105 9.0168 40.9972 9.16619C41.1839 9.31558 41.3333 9.46498 41.408 9.68907C41.4827 9.91316 41.5574 10.1746 41.5574 10.5107V13.9094H41.6321ZM40.7731 12.6769V11.295C40.5117 11.295 40.2129 11.3324 39.8768 11.3697C39.5406 11.4071 39.2792 11.4444 39.0551 11.4818C38.831 11.5565 38.6069 11.6685 38.4575 11.8179C38.3081 11.9673 38.2334 12.1541 38.2334 12.4155C38.2334 12.7143 38.3081 12.901 38.4949 13.0504C38.6816 13.1998 38.9431 13.2745 39.2792 13.2745C39.578 13.2745 39.8394 13.1998 40.1008 13.0878C40.3623 12.9757 40.5864 12.8263 40.7731 12.6769ZM39.2045 8.12044H38.3081V7.26143H39.2045V8.12044ZM41.0719 8.12044H40.1755V7.26143H41.0719V8.12044Z\" fill=\"#020203\"/>\n <path d=\"M44.1718 13.9094H43.3501V7.00001H44.1718V13.9094Z\" fill=\"#020203\"/>\n <path d=\"M50.1849 8.9421L48.1681 13.9094H47.3464L45.367 8.9421H46.2633L47.7946 12.901L49.3259 8.9421H50.1849Z\" fill=\"#020203\"/>\n <path d=\"M53.957 13.8721C53.8076 13.9095 53.6209 13.9468 53.4342 13.9841C53.2474 14.0215 53.098 14.0215 52.9486 14.0215C52.4258 14.0215 52.0523 13.8721 51.7908 13.6107C51.5294 13.3492 51.38 12.901 51.38 12.3035V9.65175H50.8198V8.94213H51.38V7.5229H52.2017V8.94213H53.9197V9.65175H52.2017V11.93C52.2017 12.1914 52.2017 12.3782 52.2017 12.5276C52.2017 12.677 52.239 12.8264 52.3137 12.9384C52.3884 13.0504 52.4631 13.1251 52.5752 13.1998C52.6872 13.2372 52.8739 13.2745 53.098 13.2745C53.2474 13.2745 53.3595 13.2372 53.5089 13.1998C53.6583 13.1625 53.7703 13.1251 53.845 13.0878H53.8823V13.8721H53.957Z\" fill=\"#020203\"/>\n <path d=\"M59.2232 11.5192H55.563C55.563 11.818 55.6004 12.0794 55.7124 12.3035C55.7871 12.5276 55.9365 12.7143 56.0859 12.8637C56.2353 13.0131 56.422 13.1251 56.6461 13.1998C56.8702 13.2745 57.0943 13.3119 57.3557 13.3119C57.6919 13.3119 58.028 13.2372 58.3641 13.1251C58.7003 12.9758 58.9617 12.8637 59.1111 12.7143H59.1485V13.6107C58.8497 13.7227 58.5882 13.8348 58.2894 13.9095C57.9907 13.9842 57.6919 14.0215 57.3557 14.0215C56.5341 14.0215 55.8992 13.7974 55.4136 13.3492C54.9655 12.9011 54.704 12.2661 54.704 11.4445C54.704 10.6228 54.9281 9.98789 55.3763 9.50236C55.8245 9.01684 56.3847 8.79275 57.1317 8.79275C57.8039 8.79275 58.3268 8.97949 58.6629 9.39032C59.0364 9.7638 59.2232 10.324 59.2232 11.071V11.5192ZM58.4015 10.8843C58.4015 10.4361 58.2895 10.0999 58.0654 9.87585C57.8413 9.65176 57.5051 9.50236 57.057 9.50236C56.6088 9.50236 56.2353 9.65176 55.9739 9.9132C55.7124 10.1746 55.563 10.5108 55.5257 10.8843H58.4015Z\" fill=\"#020203\"/>\n <path d=\"M64.1158 12.4529C64.1158 12.9011 63.929 13.2745 63.5556 13.5733C63.1821 13.8721 62.6592 14.0215 62.0243 14.0215C61.6508 14.0215 61.3147 13.9842 61.0159 13.8721C60.7171 13.7974 60.4556 13.6854 60.2316 13.5733V12.6396H60.2689C60.5303 12.8264 60.8291 13.0131 61.1653 13.1251C61.5014 13.2372 61.8002 13.3119 62.099 13.3119C62.4725 13.3119 62.7712 13.2372 62.958 13.1251C63.1821 13.0131 63.2568 12.8264 63.2568 12.5649C63.2568 12.3782 63.1821 12.2288 63.07 12.1167C62.958 12.0047 62.7339 11.93 62.4351 11.8553C62.3231 11.818 62.1737 11.7806 61.9869 11.7433C61.8002 11.7059 61.6134 11.6686 61.464 11.6312C61.0159 11.5192 60.7171 11.3324 60.5303 11.1083C60.3436 10.8843 60.2689 10.6228 60.2689 10.2867C60.2689 10.0999 60.3063 9.87585 60.3809 9.72645C60.4556 9.53971 60.605 9.39032 60.7544 9.24093C60.9038 9.09153 61.1279 8.97949 61.3893 8.90479C61.6508 8.8301 61.9496 8.79275 62.2484 8.79275C62.5471 8.79275 62.8459 8.8301 63.1447 8.90479C63.4435 8.97949 63.7049 9.05419 63.8917 9.16623V10.0626H63.8543C63.6302 9.9132 63.3688 9.7638 63.07 9.65176C62.7712 9.53971 62.4725 9.50236 62.1737 9.50236C61.8749 9.50236 61.6134 9.57706 61.3893 9.68911C61.1653 9.80115 61.0906 9.98789 61.0906 10.212C61.0906 10.3987 61.1653 10.5855 61.2773 10.6602C61.3893 10.7722 61.6134 10.8469 61.8749 10.9216C62.0243 10.9589 62.211 10.9963 62.3978 11.0336C62.5845 11.071 62.7339 11.1083 62.8833 11.1457C63.2568 11.2204 63.5556 11.3698 63.7796 11.5939C64.0037 11.818 64.1158 12.1167 64.1158 12.4529Z\" fill=\"#020203\"/>\n <path d=\"M68 13.8721C67.8506 13.9095 67.6639 13.9468 67.4771 13.9841C67.2904 14.0215 67.141 14.0215 66.9916 14.0215C66.4687 14.0215 66.0952 13.8721 65.8338 13.6107C65.5724 13.3492 65.423 12.901 65.423 12.3035V9.65175H64.8628V8.94213H65.423V7.5229H66.2446V8.94213H67.9627V9.65175H66.2446V11.93C66.2446 12.1914 66.2446 12.3782 66.2446 12.5276C66.2446 12.677 66.282 12.8264 66.3567 12.9384C66.4314 13.0504 66.5061 13.1251 66.6181 13.1998C66.7302 13.2372 66.9169 13.2745 67.141 13.2745C67.2904 13.2745 67.4024 13.2372 67.5518 13.1998C67.7012 13.1625 67.8133 13.1251 67.888 13.0878H67.9253V13.8721H68Z\" fill=\"#020203\"/>\n <path d=\"M14.9368 19.8307C12.6074 19.7883 10.405 18.8566 8.75328 17.2048C7.10151 15.5107 6.2121 13.3083 6.25445 10.9366C6.2968 6.15067 10.2356 2.21185 15.0639 2.21185H15.1486C17.478 2.2542 19.6803 3.18596 21.3321 4.83773C22.9839 6.53185 23.8733 8.7342 23.8309 11.106C23.7886 15.8918 19.8497 19.8307 15.0215 19.8307H14.9368Z\" fill=\"white\"/>\n <path d=\"M15.0215 2V2.42353H15.1062C17.3933 2.46588 19.5533 3.35529 21.1627 5.00706C22.7721 6.65882 23.6192 8.81882 23.6192 11.1059C23.5768 15.8071 19.7227 19.6188 15.0215 19.6188H14.9368C12.6497 19.5765 10.4897 18.6871 8.88033 17.0353C7.27092 15.3835 6.42386 13.2235 6.42386 10.9365C6.46622 6.23529 10.3203 2.42353 15.0215 2.42353V2ZM15.0215 2C10.1086 2 6.08504 5.98118 6.00033 10.8941C5.95798 15.8494 9.93916 19.9576 14.8945 20C14.9368 20 14.9368 20 14.9792 20C19.8921 20 23.9156 16.0188 24.0003 11.1059C24.0427 6.15059 20.0615 2.04235 15.1062 2C15.1062 2 15.0639 2 15.0215 2Z\" fill=\"#020203\"/>\n <path d=\"M21.4168 10.8942C20.4851 3.01652 9.6427 2.84711 8.54153 10.8942\" stroke=\"url(#paint0_linear_204_3043)\" strokeWidth=\"3\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" fill=\"white\"/>\n <path d=\"M13.158 11.1483L16.885 4.45654L16.1227 12.0801C15.8686 12.8848 14.9791 13.3507 14.1744 13.0965C13.3697 12.8424 12.9038 11.953 13.158 11.1483Z\" fill=\"#1E1E1C\"/>\n <defs>\n <linearGradient id=\"paint0_linear_204_3043\" x1=\"22.8611\" y1=\"7.91726\" x2=\"7.09992\" y2=\"7.91726\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#E41913\"/>\n <stop offset=\"0.0974402\" stopColor=\"#EA6516\"/>\n <stop offset=\"0.2148\" stopColor=\"#F3A518\"/>\n <stop offset=\"0.3121\" stopColor=\"#F9CD1A\"/>\n <stop offset=\"0.384\" stopColor=\"#FDE31A\"/>\n <stop offset=\"0.4228\" stopColor=\"#FEEB1A\"/>\n <stop offset=\"0.6231\" stopColor=\"#DFDE20\"/>\n <stop offset=\"1\" stopColor=\"#009245\"/>\n </linearGradient>\n </defs>\n </SvgIcon>\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class SelfTestRegulationSymbolIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 18 18\">\n <path d=\"M8.93681 17.8307C6.60739 17.7883 4.40504 16.8565 2.75328 15.2048C1.10151 13.5107 0.212099 11.3083 0.254452 8.93655C0.296805 4.15067 4.23563 0.211845 9.06386 0.211845H9.14857C11.478 0.254198 13.6803 1.18596 15.3321 2.83773C16.9839 4.53185 17.8733 6.7342 17.8309 9.10596C17.7886 13.8918 13.8497 17.8307 9.02151 17.8307H8.93681Z\" fill=\"white\"/>\n <path d=\"M9.02151 0V0.423529H9.10622C11.3933 0.465882 13.5533 1.35529 15.1627 3.00706C16.7721 4.65882 17.6192 6.81882 17.6192 9.10588C17.5768 13.8071 13.7227 17.6188 9.02151 17.6188H8.9368C6.64975 17.5765 4.48975 16.6871 2.88033 15.0353C1.27092 13.3835 0.423864 11.2235 0.423864 8.93647C0.466217 4.23529 4.32033 0.423529 9.02151 0.423529V0ZM9.02151 0C4.10857 0 0.0850407 3.98118 0.000334811 8.89412C-0.0420181 13.8494 3.93916 17.9576 8.89445 18C8.9368 18 8.9368 18 8.97916 18C13.8921 18 17.9156 14.0188 18.0003 9.10588C18.0427 4.15059 14.0615 0.0423529 9.10622 0C9.10622 0 9.06386 0 9.02151 0Z\" fill=\"#020203\"/>\n <path d=\"M15.4168 8.89417C14.4851 1.01652 3.6427 0.847108 2.54153 8.89417\" stroke=\"url(#paint0_linear_204_3057)\" strokeWidth=\"3\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" fill=\"white\"/>\n <path d=\"M7.15796 9.14831L10.885 2.45654L10.1227 10.0801C9.86855 10.8848 8.97914 11.3507 8.17443 11.0965C7.36973 10.8424 6.90385 9.95301 7.15796 9.14831Z\" fill=\"#1E1E1C\"/>\n <defs>\n <linearGradient id=\"paint0_linear_204_3057\" x1=\"16.8611\" y1=\"5.91726\" x2=\"1.09992\" y2=\"5.91726\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#E41913\"/>\n <stop offset=\"0.0974402\" stopColor=\"#EA6516\"/>\n <stop offset=\"0.2148\" stopColor=\"#F3A518\"/>\n <stop offset=\"0.3121\" stopColor=\"#F9CD1A\"/>\n <stop offset=\"0.384\" stopColor=\"#FDE31A\"/>\n <stop offset=\"0.4228\" stopColor=\"#FEEB1A\"/>\n <stop offset=\"0.6231\" stopColor=\"#DFDE20\"/>\n <stop offset=\"1\" stopColor=\"#009245\"/>\n </linearGradient>\n </defs>\n </SvgIcon>\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class MinimumGamblingAgeRegulationIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 28 22\">\n <rect x=\"0.5\" y=\"0.5\" width=\"27\" height=\"21\" rx=\"4.5\" fill=\"white\" stroke=\"black\"/>\n <path d=\"M18.0508 11.1864H22.7118\" stroke=\"#0A0A0A\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M7.72457 14.4958V7.55096L6 8.80943\" stroke=\"#0A0A0A\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11.4534 12.6314C11.4534 11.6018 12.2881 10.767 13.3178 10.767C14.3475 10.767 15.1822 11.6018 15.1822 12.6314C15.1822 13.6611 14.3475 14.4958 13.3178 14.4958C12.2881 14.4958 11.4534 13.6611 11.4534 12.6314Z\" stroke=\"#0A0A0A\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M11.6865 9.13568C11.6865 8.23471 12.4168 7.50433 13.3178 7.50433C14.2188 7.50433 14.9492 8.23471 14.9492 9.13568C14.9492 10.0366 14.2188 10.767 13.3178 10.767C12.4168 10.767 11.6865 10.0366 11.6865 9.13568Z\" stroke=\"#0A0A0A\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </SvgIcon>\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class PanicButtonRegulationIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 151 30\" ratio={151/30}>\n <rect x=\"0.845947\" y=\"1.28955\" width=\"149\" height=\"28\" rx=\"5.125\" fill=\"white\" stroke=\"#F12727\"/>\n <g clipPath=\"url(#clip0_243_6630)\">\n <path d=\"M20.6197 6.12561H10.1197L4.87024 15.1256L10.1197 24.1256H20.6197L25.8702 15.1256L20.6197 6.12561Z\" fill=\"#F12727\"/>\n <path d=\"M9.64447 17.0545H11.9545V17.8245H8.34247V17.2155L10.2885 15.3675C10.7645 14.9125 10.8485 14.6255 10.8485 14.3525C10.8485 13.9045 10.5405 13.6455 9.93847 13.6455C9.46247 13.6455 9.06347 13.8065 8.79047 14.1565L8.15347 13.6665C8.53147 13.1555 9.21047 12.8545 10.0155 12.8545C11.0795 12.8545 11.7655 13.3935 11.7655 14.2615C11.7655 14.7375 11.6325 15.1715 10.9535 15.8085L9.64447 17.0545ZM16.7452 15.9415V16.7115H15.8772V17.8245H14.9952V16.7115H12.3072V16.0815L14.7222 12.9245H15.6952L13.4202 15.9415H15.0232V14.9545H15.8772V15.9415H16.7452ZM20.9221 12.9245H21.8321V17.8245H20.9221V15.7245H18.3881V17.8245H17.4781V12.9245H18.3881V14.9475H20.9221V12.9245Z\" fill=\"white\"/>\n </g>\n <path d=\"M34.1759 18.3597H37.8884V19.5972H32.0834V18.6184L35.2109 15.6484C35.9759 14.9172 36.1109 14.4559 36.1109 14.0172C36.1109 13.2972 35.6159 12.8809 34.6484 12.8809C33.8834 12.8809 33.2422 13.1397 32.8034 13.7022L31.7797 12.9147C32.3872 12.0934 33.4784 11.6097 34.7722 11.6097C36.4822 11.6097 37.5847 12.4759 37.5847 13.8709C37.5847 14.6359 37.3709 15.3334 36.2797 16.3572L34.1759 18.3597ZM45.5878 16.5709V17.8084H44.1928V19.5972H42.7753V17.8084H38.4553V16.7959L42.3365 11.7222H43.9003L40.244 16.5709H42.8203V14.9847H44.1928V16.5709H45.5878ZM46.4369 17.0547V15.8847H49.5306V17.0547H46.4369ZM52.9255 19.6759C51.9242 19.6759 50.923 19.3834 50.383 19.0009L50.923 17.9322C51.4517 18.2809 52.2617 18.5284 53.0155 18.5284C53.9042 18.5284 54.2755 18.2809 54.2755 17.8647C54.2755 16.7172 50.563 17.7972 50.563 15.4009C50.563 14.2647 51.5867 13.5222 53.2067 13.5222C54.0055 13.5222 54.9167 13.7134 55.4567 14.0397L54.9167 15.1084C54.343 14.7709 53.7692 14.6584 53.1955 14.6584C52.3405 14.6584 51.9355 14.9397 51.9355 15.3334C51.9355 16.5484 55.648 15.4684 55.648 17.8197C55.648 18.9447 54.613 19.6759 52.9255 19.6759ZM60.0765 18.2697L60.4703 19.2709C60.1328 19.5409 59.6265 19.6759 59.1203 19.6759C57.804 19.6759 57.0503 18.9784 57.0503 17.6509V14.7597H56.0603V13.6347H57.0503V12.2622H58.4565V13.6347H60.0653V14.7597H58.4565V17.6172C58.4565 18.2022 58.749 18.5172 59.289 18.5172C59.5815 18.5172 59.8628 18.4384 60.0765 18.2697ZM63.4158 12.6447C63.0333 12.6447 62.7408 12.3634 62.7408 11.9697C62.7408 11.5647 63.0333 11.2834 63.4158 11.2834C63.7983 11.2834 64.0908 11.5647 64.0908 11.9697C64.0908 12.3634 63.7983 12.6447 63.4158 12.6447ZM65.5983 12.6447C65.2158 12.6447 64.9233 12.3634 64.9233 11.9697C64.9233 11.5647 65.2158 11.2834 65.5983 11.2834C65.9808 11.2834 66.2733 11.5647 66.2733 11.9697C66.2733 12.3634 65.9808 12.6447 65.5983 12.6447ZM66.0371 13.5897H67.4433V19.5972H66.1046V18.8322C65.6546 19.3834 64.9458 19.6759 64.1696 19.6759C62.6283 19.6759 61.5821 18.8322 61.5821 17.0209V13.5897H62.9883V16.8297C62.9883 17.9209 63.5058 18.4384 64.3946 18.4384C65.3733 18.4384 66.0371 17.8309 66.0371 16.6272V13.5897ZM72.6933 13.5222C74.1333 13.5222 75.2021 14.3434 75.2021 16.1547V19.5972H73.7958V16.3347C73.7958 15.2659 73.2671 14.7484 72.3671 14.7484C71.3658 14.7484 70.6908 15.3559 70.6908 16.5597V19.5972H69.2846V13.5897H70.6233V14.3659C71.0846 13.8147 71.8158 13.5222 72.6933 13.5222ZM81.5184 11.2497H82.9247V19.5972H81.5747V18.8209C81.1022 19.3947 80.4047 19.6759 79.5834 19.6759C77.8397 19.6759 76.5459 18.4609 76.5459 16.5934C76.5459 14.7259 77.8397 13.5222 79.5834 13.5222C80.3597 13.5222 81.0459 13.7809 81.5184 14.3322V11.2497ZM79.7522 18.4722C80.7647 18.4722 81.5409 17.7409 81.5409 16.5934C81.5409 15.4459 80.7647 14.7147 79.7522 14.7147C78.7397 14.7147 77.9634 15.4459 77.9634 16.5934C77.9634 17.7409 78.7397 18.4722 79.7522 18.4722ZM85.473 12.5997C84.9555 12.5997 84.573 12.2284 84.573 11.7559C84.573 11.2834 84.9555 10.9122 85.473 10.9122C85.9905 10.9122 86.373 11.2609 86.373 11.7222C86.373 12.2172 86.0018 12.5997 85.473 12.5997ZM84.7643 19.5972V13.5897H86.1705V19.5972H84.7643ZM92.64 13.5897H93.9788V18.6859C93.9788 20.8684 92.8425 21.8584 90.7388 21.8584C89.6138 21.8584 88.5 21.5659 87.8138 21.0034L88.4438 19.9459C88.9725 20.3847 89.8275 20.6659 90.66 20.6659C91.9875 20.6659 92.5725 20.0584 92.5725 18.8434V18.5284C92.0775 19.0684 91.3688 19.3272 90.5588 19.3272C88.8375 19.3272 87.5213 18.1572 87.5213 16.4134C87.5213 14.6697 88.8375 13.5222 90.5588 13.5222C91.4025 13.5222 92.145 13.7922 92.64 14.3884V13.5897ZM90.7725 18.1347C91.83 18.1347 92.595 17.4372 92.595 16.4134C92.595 15.4009 91.83 14.7147 90.7725 14.7147C89.7038 14.7147 88.9388 15.4009 88.9388 16.4134C88.9388 17.4372 89.7038 18.1347 90.7725 18.1347ZM101.475 16.6272C101.475 16.7397 101.464 16.9084 101.453 17.0434H96.7388C96.9075 17.9209 97.6388 18.4834 98.685 18.4834C99.36 18.4834 99.8888 18.2697 100.316 17.8309L101.07 18.6972C100.53 19.3384 99.6863 19.6759 98.6513 19.6759C96.6375 19.6759 95.3325 18.3822 95.3325 16.5934C95.3325 14.8047 96.6488 13.5222 98.4375 13.5222C100.193 13.5222 101.475 14.7484 101.475 16.6272ZM98.4375 14.6472C97.5263 14.6472 96.8625 15.2322 96.7275 16.1097H100.136C100.024 15.2434 99.36 14.6472 98.4375 14.6472ZM108.511 19.7097C107.285 19.7097 106.059 19.3272 105.406 18.7647L105.912 17.6284C106.542 18.1347 107.544 18.4947 108.511 18.4947C109.737 18.4947 110.255 18.0559 110.255 17.4709C110.255 15.7722 105.575 16.8859 105.575 13.9609C105.575 12.6897 106.587 11.6097 108.747 11.6097C109.692 11.6097 110.682 11.8572 111.369 12.3072L110.907 13.4434C110.199 13.0272 109.422 12.8247 108.736 12.8247C107.521 12.8247 107.026 13.2972 107.026 13.8934C107.026 15.5697 111.695 14.4784 111.695 17.3697C111.695 18.6297 110.671 19.7097 108.511 19.7097ZM116.34 13.5222C118.095 13.5222 119.389 14.7372 119.389 16.5934C119.389 18.4609 118.095 19.6759 116.34 19.6759C115.575 19.6759 114.9 19.4172 114.416 18.8659V21.7797H113.01V13.5897H114.349V14.3772C114.821 13.8034 115.519 13.5222 116.34 13.5222ZM116.183 18.4722C117.195 18.4722 117.96 17.7409 117.96 16.5934C117.96 15.4459 117.195 14.7147 116.183 14.7147C115.17 14.7147 114.394 15.4459 114.394 16.5934C114.394 17.7409 115.17 18.4722 116.183 18.4722ZM126.37 16.6272C126.37 16.7397 126.359 16.9084 126.348 17.0434H121.634C121.803 17.9209 122.534 18.4834 123.58 18.4834C124.255 18.4834 124.784 18.2697 125.211 17.8309L125.965 18.6972C125.425 19.3384 124.581 19.6759 123.546 19.6759C121.533 19.6759 120.228 18.3822 120.228 16.5934C120.228 14.8047 121.544 13.5222 123.333 13.5222C125.088 13.5222 126.37 14.7484 126.37 16.6272ZM123.333 14.6472C122.421 14.6472 121.758 15.2322 121.623 16.1097H125.031C124.919 15.2434 124.255 14.6472 123.333 14.6472ZM129.06 14.4672C129.465 13.8372 130.196 13.5222 131.197 13.5222V14.8609C131.073 14.8384 130.972 14.8272 130.871 14.8272C129.802 14.8272 129.127 15.4572 129.127 16.6834V19.5972H127.721V13.5897H129.06V14.4672ZM133.729 14.4672C134.134 13.8372 134.865 13.5222 135.866 13.5222V14.8609C135.743 14.8384 135.641 14.8272 135.54 14.8272C134.471 14.8272 133.796 15.4572 133.796 16.6834V19.5972H132.39V13.5897H133.729V14.4672ZM142.652 16.6272C142.652 16.7397 142.641 16.9084 142.629 17.0434H137.916C138.084 17.9209 138.816 18.4834 139.862 18.4834C140.537 18.4834 141.066 18.2697 141.493 17.8309L142.247 18.6972C141.707 19.3384 140.863 19.6759 139.828 19.6759C137.814 19.6759 136.509 18.3822 136.509 16.5934C136.509 14.8047 137.826 13.5222 139.614 13.5222C141.369 13.5222 142.652 14.7484 142.652 16.6272ZM139.614 14.6472C138.703 14.6472 138.039 15.2322 137.904 16.1097H141.313C141.201 15.2434 140.537 14.6472 139.614 14.6472Z\" fill=\"black\"/>\n <defs>\n <clipPath id=\"clip0_243_6630\">\n <rect width=\"21\" height=\"18\" fill=\"white\" transform=\"translate(4.87024 6.12561)\"/>\n </clipPath>\n </defs>\n </SvgIcon>\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class HistoryIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M14.512,15.929c0.192-0.024,0.371-0.126,0.49-0.28l0.539-0.692c0.09-0.143,0.126-0.312,0.105-0.482\n c-0.024-0.192-0.126-0.371-0.279-0.49l-2.225-1.737V6.773c0-0.197-0.077-0.382-0.217-0.521c-0.14-0.141-0.325-0.218-0.523-0.218\n h-0.805c-0.198,0-0.383,0.077-0.522,0.217c-0.141,0.14-0.218,0.325-0.218,0.522v6.59l3.109,2.416\n C14.122,15.898,14.316,15.953,14.512,15.929z\"/>\n <path d=\"M4.471,21.344c1.766,1.423,3.891,2.313,6.144,2.577c2.256,0.26,4.526-0.119,6.571-1.099\n c2.047-0.982,3.765-2.516,4.973-4.436c1.207-1.919,1.843-4.133,1.84-6.403c-0.005-2.357-0.694-4.64-1.992-6.603\n c-1.301-1.965-3.134-3.491-5.299-4.415c-2.164-0.924-4.534-1.192-6.852-0.769C7.539,0.615,5.413,1.697,3.71,3.324L3.38,3.64\n L0.575,0.834C0.53,0.788,0.468,0.755,0.403,0.741C0.336,0.729,0.27,0.735,0.209,0.761C0.148,0.786,0.095,0.829,0.058,0.885\n C0.021,0.94,0.001,1.006,0.001,1.072v7.309c0,0.09,0.035,0.174,0.098,0.237c0.065,0.065,0.149,0.1,0.239,0.1h7.307\n c0.067,0,0.132-0.02,0.187-0.057c0.056-0.037,0.099-0.09,0.124-0.151c0.026-0.062,0.033-0.129,0.02-0.195\n C7.962,8.251,7.931,8.19,7.884,8.145L4.992,5.251l0.351-0.33c1.359-1.277,3.047-2.133,4.881-2.474\n c1.83-0.34,3.716-0.15,5.444,0.555s3.208,1.883,4.281,3.409c1.073,1.525,1.682,3.317,1.761,5.18c0.078,1.864-0.377,3.7-1.318,5.312\n c-0.941,1.61-2.316,2.91-3.98,3.757c-1.66,0.846-3.523,1.196-5.376,1.012c-1.857-0.186-3.611-0.896-5.072-2.055\n c-0.129-0.102-0.29-0.157-0.456-0.157c-0.015,0-0.03,0-0.046,0.002c-0.181,0.012-0.352,0.088-0.479,0.216l-0.568,0.568\n c-0.072,0.073-0.132,0.163-0.168,0.259c-0.037,0.096-0.053,0.199-0.047,0.301c0.005,0.105,0.031,0.205,0.078,0.297\n C4.325,21.198,4.391,21.28,4.471,21.344z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class TransactionHistoryIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M17.333,18.68V9.333h-2.667v9.347h-4L16,24l5.334-5.32H17.333z M8,0L2.666,5.32h4v9.347h2.665V5.32h4.001L8,0z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class SecurityIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M12,0c3.75,0,6.75,3,6.75,6.75v3C20.025,9.75,21,10.725,21,12v9.75c0,1.275-0.975,2.25-2.25,2.25H5.25\n C3.975,24,3,23.025,3,21.75V12c0-1.275,0.975-2.25,2.25-2.25v-3C5.25,3,8.25,0,12,0z M4.5,12v9.75c0,0.45,0.3,0.75,0.75,0.75h13.5\n c0.45,0,0.75-0.3,0.75-0.75V12c0-0.45-0.3-0.75-0.75-0.75H18H6H5.25C4.8,11.25,4.5,11.55,4.5,12z M17.25,9.75v-3\n c0-2.925-2.325-5.25-5.25-5.25S6.75,3.825,6.75,6.75v3H17.25z\"/>\n <path d=\"M12,13.5c1.275,0,2.25,0.975,2.25,2.25c0,0.975-0.6,1.8-1.5,2.1v1.65c0,0.45-0.3,0.75-0.75,0.75s-0.75-0.3-0.75-0.75v-1.65\n c-0.9-0.3-1.5-1.125-1.5-2.1C9.75,14.475,10.725,13.5,12,13.5z M12,16.5c0.45,0,0.75-0.3,0.75-0.75S12.45,15,12,15\n s-0.75,0.3-0.75,0.75S11.55,16.5,12,16.5z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class CompPointsIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M22.815,7.534h-6.91c1.308-0.581,2.556-1.221,3.043-1.73c0.312-0.326,0.554-0.707,0.719-1.132\n c0.164-0.423,0.241-0.866,0.23-1.318c-0.011-0.451-0.109-0.892-0.292-1.307c-0.182-0.414-0.441-0.783-0.769-1.096\n c-0.327-0.313-0.708-0.554-1.131-0.718c-0.421-0.164-0.853-0.241-1.32-0.231c-0.453,0.011-0.892,0.109-1.307,0.291\n c-0.392,0.173-0.743,0.414-1.045,0.717c-0.018,0.016-0.036,0.033-0.053,0.05c-0.614,0.643-1.381,2.507-1.983,4.168\n c-0.601-1.66-1.368-3.525-1.982-4.168C9.383,0.398,8.53,0.021,7.614,0c-0.915-0.01-1.786,0.316-2.45,0.949\n c-0.663,0.633-1.04,1.486-1.062,2.403c-0.021,0.916,0.316,1.786,0.95,2.45c0.487,0.509,1.737,1.15,3.045,1.732H1.185\n c-0.458,0-0.828,0.371-0.828,0.828v4.842c0,0.457,0.371,0.828,0.828,0.828h7.81v8.311H3.535v-6.535H1.878v7.364\n C1.878,23.629,2.249,24,2.706,24h18.588c0.457,0,0.828-0.371,0.828-0.828v-7.364h-1.656v6.535h-5.464v-8.31h7.813\n c0.457,0,0.828-0.371,0.828-0.828V8.363C23.643,7.905,23.272,7.534,22.815,7.534z M15.149,2.239\n c0.011-0.011,0.022-0.021,0.033-0.033c0.162-0.169,0.352-0.303,0.565-0.397c0.215-0.095,0.442-0.146,0.677-0.151\n c0.237-0.01,0.464,0.034,0.682,0.119c0.219,0.085,0.416,0.21,0.585,0.371c0.17,0.163,0.304,0.353,0.398,0.567\n c0.095,0.215,0.146,0.443,0.151,0.677c0.005,0.233-0.035,0.463-0.119,0.681c-0.085,0.22-0.21,0.416-0.372,0.585\n c-0.461,0.482-2.603,1.438-4.571,2.214C13.849,4.914,14.683,2.782,15.149,2.239z M5.759,3.391C5.77,2.916,5.965,2.475,6.308,2.147\n c0.333-0.318,0.766-0.491,1.225-0.491c0.015,0,0.029,0,0.043,0c0.467,0.011,0.92,0.211,1.243,0.549c0,0,0,0,0,0\n c0.46,0.481,1.315,2.665,2,4.667C8.851,6.095,6.711,5.14,6.249,4.658C5.927,4.32,5.748,3.857,5.759,3.391z M2.014,12.376V9.191\n h6.982v3.185H2.014z M10.652,22.344V9.191h2.694v13.153H10.652z M21.986,12.377h-6.985V9.191h6.985V12.377z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class TimerIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M12,24C5.384,24,0,18.618,0,12C0,5.384,5.384,0,12,0c6.617,0,12,5.384,12,12C24,18.618,18.618,24,12,24z M12,2.443\n C6.73,2.443,2.443,6.73,2.443,12S6.73,21.558,12,21.558S21.558,17.27,21.558,12S17.27,2.443,12,2.443z\"/>\n <path d=\"M16.31,15.378c-0.182,0-0.369-0.042-0.545-0.129l-4.312-2.156c-0.413-0.208-0.675-0.631-0.675-1.093V5.533\n c0-0.674,0.547-1.222,1.222-1.222s1.221,0.547,1.221,1.222v5.712l3.636,1.817c0.603,0.302,0.848,1.036,0.547,1.639\n C17.19,15.13,16.76,15.378,16.31,15.378z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class BiometricLoginIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M1.846,8.308V5.846c0-1.061,0.421-2.079,1.172-2.828\n c0.75-0.751,1.767-1.172,2.828-1.172h2.461c0.51,0,0.923-0.414,0.923-0.923C9.23,0.414,8.817,0,8.307,0H5.846\n C4.295,0,2.809,0.616,1.712,1.712C0.615,2.809,0,4.296,0,5.846v2.461c0,0.51,0.414,0.923,0.923,0.923\n C1.433,9.231,1.846,8.817,1.846,8.308z\"/>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M15.693,1.846h2.461c1.061,0,2.079,0.421,2.828,1.172\n c0.751,0.75,1.172,1.767,1.172,2.828v2.461c0,0.51,0.413,0.923,0.923,0.923C23.586,9.231,24,8.817,24,8.308V5.846\n c0-1.551-0.615-3.037-1.712-4.134C21.191,0.616,19.705,0,18.154,0c-1.356,0-2.461,0-2.461,0c-0.51,0-0.923,0.414-0.923,0.923\n C14.77,1.433,15.183,1.846,15.693,1.846z\"/>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0,15.692v2.461c0,1.551,0.615,3.037,1.712,4.134C2.809,23.384,4.295,24,5.846,24\n h2.461c0.51,0,0.923-0.413,0.923-0.923s-0.414-0.923-0.923-0.923H5.846c-1.061,0-2.079-0.421-2.828-1.172\n c-0.751-0.749-1.172-1.767-1.172-2.828c0-1.356,0-2.461,0-2.461c0-0.51-0.414-0.923-0.923-0.923C0.414,14.769,0,15.183,0,15.692z\"\n />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M15.693,24h2.461c1.551,0,3.037-0.615,4.134-1.712\n C23.385,21.191,24,19.704,24,18.154c0-1.356,0-2.461,0-2.461c0-0.51-0.414-0.923-0.923-0.923c-0.51,0-0.923,0.413-0.923,0.923\n v2.461c0,1.061-0.421,2.079-1.172,2.828c-0.749,0.751-1.767,1.172-2.828,1.172c-1.356,0-2.461,0-2.461,0\n c-0.51,0-0.923,0.413-0.923,0.923S15.183,24,15.693,24z\"/>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M15.385,7.693v1.231c0,0.51,0.414,0.923,0.923,0.923\n c0.51,0,0.923-0.414,0.923-0.923V7.693c0-0.51-0.413-0.923-0.923-0.923C15.798,6.77,15.385,7.183,15.385,7.693z\"/>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M6.769,7.693v1.231c0,0.51,0.414,0.923,0.923,0.923s0.923-0.414,0.923-0.923\n V7.693c0-0.51-0.414-0.923-0.923-0.923S6.769,7.183,6.769,7.693z\"/>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M11.691,12.66V9.539c0-0.51,0.414-0.923,0.923-0.923\n c0.509,0,0.923,0.414,0.923,0.923v3.692c0,0.35-0.198,0.67-0.511,0.826l-1.231,0.615c-0.455,0.228-1.01,0.043-1.238-0.413\n c-0.228-0.455-0.043-1.01,0.414-1.238L11.691,12.66z\"/>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M15.655,15.655c0.167-0.167,0.398-0.271,0.652-0.271\n c0.51,0,0.923,0.414,0.923,0.923c0,0.255-0.103,0.485-0.271,0.652c-0.167,0.167,0,0.001-0.001,0.003\n c-2.738,2.738-7.179,2.738-9.917,0c-0.001-0.001-0.001-0.003-0.001-0.003c-0.167-0.167-0.271-0.398-0.271-0.652\n c0-0.509,0.414-0.923,0.923-0.923c0.255,0,0.485,0.103,0.652,0.271c0.167,0.167,0.001,0,0.002,0.001\n c2.017,2.017,5.288,2.017,7.306,0C15.653,15.655,15.655,15.655,15.655,15.655z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class AboutIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M12,24C5.4,24,0,18.6,0,12C0,5.4,5.4,0,12,0c6.6,0,12,5.4,12,12C24,18.6,18.6,24,12,24z M12,2.2c-5.4,0-9.8,4.4-9.8,9.8\n s4.4,9.8,9.8,9.8s9.8-4.4,9.8-9.8S17.4,2.2,12,2.2z\"/>\n <path d=\"M12.1,5.2c-2,0-3.3,1-4.2,2.6l1.3,1.3c0.5-1,1.6-1.9,3-1.9c1.3,0,2.4,1,2.4,2.2v0c0,1.4-1.2,2.5-3.2,2.4l-0.5,0.5l0.1,3.1\n h1.7l0.1-2c1.8-0.3,3.7-1.6,3.7-4v0C16.4,7,14.6,5.2,12.1,5.2z M11.8,19.8c0.7,0,1.2-0.6,1.2-1.2c0-0.6-0.5-1.2-1.2-1.2\n c-0.7,0-1.2,0.6-1.2,1.2C10.6,19.2,11.1,19.8,11.8,19.8z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class GamingHistoryIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M12,0C9.627,0,7.307,0.704,5.333,2.022C3.36,3.341,1.822,5.215,0.913,7.408c-0.908,2.193-1.146,4.606-0.683,6.933\n c0.463,2.328,1.606,4.466,3.284,6.144c1.678,1.678,3.816,2.821,6.144,3.284c2.328,0.463,4.741,0.225,6.933-0.683\n c2.193-0.908,4.067-2.446,5.385-4.42C23.296,16.693,24,14.373,24,12c0-3.183-1.264-6.235-3.515-8.485C18.235,1.264,15.183,0,12,0z\n M21,17.937l-1.386-0.6l-2.27,2.269l0.6,1.385c-1.145,0.759-2.424,1.291-3.77,1.568l-0.562-1.404h-3.21L9.84,22.558\n C8.493,22.286,7.21,21.757,6.063,21l0.6-1.386l-2.27-2.269l-1.386,0.6c-0.758-1.145-1.29-2.424-1.566-3.769l1.404-0.562v-3.21\n L1.442,9.84C1.718,8.495,2.25,7.215,3.009,6.07l1.384,0.6l2.27-2.27l-0.6-1.386c1.145-0.759,2.424-1.291,3.769-1.567l0.562,1.404\n h3.21l0.562-1.404c1.344,0.272,2.624,0.799,3.77,1.553l-0.6,1.385l2.27,2.269l1.385-0.6c0.759,1.145,1.291,2.424,1.567,3.769\n l-1.404,0.562v3.21l1.404,0.562c-0.274,1.346-0.803,2.627-1.56,3.773L21,17.937z\"/>\n <path d=\"M11.994,4.318c-1.518,0-3.002,0.45-4.264,1.294C6.468,6.455,5.484,7.654,4.903,9.057c-0.581,1.403-0.733,2.946-0.437,4.435\n s1.027,2.856,2.101,3.93c1.073,1.073,2.441,1.805,3.93,2.101c1.489,0.296,3.032,0.144,4.435-0.437\n c1.402-0.581,2.601-1.565,3.445-2.827c0.843-1.262,1.293-2.746,1.293-4.264c-0.002-2.035-0.812-3.986-2.251-5.425\n C15.98,5.13,14.029,4.321,11.994,4.318z M15.561,12.033c-0.013,0.58-0.248,1.132-0.658,1.542c-0.41,0.41-0.962,0.646-1.542,0.658\n c-0.222,0-0.442-0.033-0.654-0.099c-0.016,0.341,0.037,0.682,0.154,1.002c0.118,0.321,0.298,0.614,0.531,0.864\n c-0.141,0.282-0.252,0.498-0.252,0.498h-2.293c0,0-0.111-0.216-0.252-0.498c0.233-0.25,0.413-0.543,0.531-0.864\n c0.118-0.32,0.17-0.661,0.154-1.002c-0.212,0.066-0.432,0.099-0.654,0.099c-0.58-0.013-1.132-0.248-1.542-0.658\n c-0.41-0.41-0.646-0.962-0.658-1.542c-0.117-1.926,2.811-3.3,3.359-4.684h0.417c0.553,1.377,3.483,2.758,3.366,4.684H15.561z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class UploadDocumentsIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M22.759,14.345c-0.685,0-1.241,0.556-1.241,1.241v4.781c0,0.307-0.12,0.596-0.335,0.811\n c-0.218,0.218-0.508,0.338-0.815,0.338H3.632c-0.302,0-0.599-0.123-0.811-0.335c-0.218-0.218-0.338-0.508-0.338-0.815v-4.781\n c0-0.685-0.556-1.241-1.241-1.241S0,14.901,0,15.586v4.781c0,0.968,0.377,1.88,1.064,2.57c0.676,0.674,1.612,1.062,2.568,1.062\n h16.736c0.968,0,1.88-0.377,2.57-1.065C23.623,22.247,24,21.335,24,20.367v-4.781C24,14.901,23.444,14.345,22.759,14.345z\"/>\n <path d=\"M6.9,8.096l3.858-3.858v11.349c0,0.685,0.556,1.241,1.241,1.241s1.241-0.556,1.241-1.241V4.237L17.1,8.096\n c0.242,0.242,0.559,0.364,0.878,0.364c0.318,0,0.635-0.121,0.878-0.364c0.485-0.485,0.485-1.27,0-1.755l-5.977-5.977\n c-0.114-0.114-0.252-0.205-0.403-0.268c-0.303-0.126-0.645-0.126-0.949,0c-0.152,0.063-0.289,0.153-0.403,0.268L5.145,6.34\n c-0.485,0.485-0.485,1.27,0,1.755S6.415,8.581,6.9,8.096z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class TippingHistoryIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M15.858,19.699v3.704c0,0.466-0.497,0.741-0.9,0.519l-1.588-0.931l-1.291-0.762l-1.291,0.762L9.2,23.922\n c-0.402,0.222-0.9-0.053-0.9-0.519v-3.704c0-0.455,0.497-0.741,0.9-0.519l1.588,0.931l1.291,0.751l1.291-0.751l1.588-0.931\n C15.36,18.958,15.858,19.243,15.858,19.699z\"/>\n <path d=\"M20.209,8.68c-0.032-1.609-0.466-3.165-1.249-4.53c-0.826-1.45-2.043-2.657-3.503-3.472\n c-1.312-0.794-2.826-0.889-4.054-0.296l-0.127,0.064c-0.085,0.053-0.201,0.106-0.296,0.148c-0.169,0.074-0.349,0.095-0.529,0.074\n C10.017,0.615,9.35,0.573,8.683,0.742L8.577,0.774C5.995,1.61,4.164,3.97,3.91,6.807C3.857,7.4,3.846,7.992,3.867,8.574\n C3.804,8.68,3.751,8.797,3.709,8.913c-0.212,0.593-0.233,1.217-0.074,1.799c0.169,0.656,0.561,1.249,1.133,1.672\n c0.254,0.878,0.646,1.693,1.185,2.413c0.095,0.138,0.191,0.275,0.296,0.402c0.095,0.127,0.201,0.254,0.328,0.37\n c0.064,0.074,0.148,0.159,0.222,0.233c0.328,0.339,0.688,0.624,1.08,0.889c0.148,0.106,0.307,0.201,0.466,0.296\n c0.064,0.032,0.127,0.074,0.191,0.106c0.148,0.085,0.307,0.169,0.466,0.233c0.191,0.095,0.381,0.169,0.582,0.244\n c0.423,0.159,0.868,0.286,1.323,0.36c0.37,0.074,0.741,0.106,1.122,0.127h0.011c0.169-0.011,0.349-0.021,0.519-0.042\n c0.106,0,0.222-0.021,0.328-0.042c0.561-0.095,1.101-0.244,1.619-0.434c0.18-0.074,0.349-0.148,0.519-0.222\n c0.212-0.095,0.423-0.201,0.624-0.318c0.159-0.095,0.318-0.191,0.466-0.296c0.402-0.265,0.773-0.561,1.111-0.9\n c0.201-0.191,0.392-0.402,0.572-0.635c0.677-0.826,1.164-1.768,1.461-2.794c0.582-0.434,0.974-1.058,1.133-1.736\n c0.148-0.635,0.095-1.334-0.191-1.958H20.209z M4.957,7.823c-0.011-0.307,0-0.624,0.032-0.931c0.201-2.36,1.704-4.35,3.842-5.07\n L8.927,1.8c0.497-0.138,1.027-0.106,1.397-0.053c0.37,0.032,0.72-0.021,1.069-0.148c0.085-0.042,0.18-0.095,0.265-0.138\n l0.127-0.064c0.921-0.487,2.085-0.413,3.133,0.212c1.291,0.73,2.371,1.789,3.101,3.08c0.54,0.953,0.9,2.011,1.037,3.101\n c0,0.021,0,0.032,0,0.053c-0.413-0.085-1.207-0.339-2.18-1.09c-0.646-0.508-1.217-1.006-1.651-1.376\n c-0.508-0.445-0.815-0.73-0.826-0.741c-0.116-0.116-0.275-0.169-0.434-0.148c-0.159,0.011-0.296,0.116-0.381,0.243\n c0,0.011-0.074,0.116-0.254,0.307c-0.042,0.053-0.095,0.106-0.159,0.159c-0.519,0.519-1.566,1.376-3.387,2.159\n C8.292,8.013,6.99,8.215,6.016,8.246c-0.434,0.021-0.794,0-1.08-0.032c0-0.127,0-0.265,0.011-0.392H4.957z M19.066,11.041\n c-0.127,0.201-0.307,0.37-0.508,0.508c-0.138,0.095-0.244,0.243-0.307,0.434c-0.381,1.397-1.175,2.614-2.307,3.525\n c-1.133,0.9-2.487,1.408-3.937,1.471c-1.376-0.063-2.699-0.529-3.779-1.376c-0.011-0.011-0.021-0.011-0.032-0.032\n c-0.042-0.021-0.085-0.042-0.116-0.074c-1.133-0.9-1.926-2.117-2.318-3.525c-0.042-0.169-0.148-0.318-0.296-0.423\n c-0.191-0.127-0.349-0.296-0.487-0.476c-0.36-0.508-0.476-1.185-0.254-1.789c0.191,0.021,0.434,0.042,0.699,0.042\n C5.518,9.336,5.624,9.336,5.73,9.336c1.111,0,2.688-0.191,4.498-0.984c2.138-0.931,3.313-1.958,3.863-2.54\n c0.445,0.402,1.217,1.069,2.138,1.789c0.836,0.656,1.566,1.005,2.117,1.175c0.328,0.106,0.603,0.159,0.794,0.169l0.042,0.095\n C19.521,9.696,19.458,10.469,19.066,11.041z\"/>\n <path d=\"M13.88,13.856c-0.487,0.508-1.196,0.794-1.873,0.794c-0.677,0-1.376-0.286-1.873-0.794c-0.212-0.222-0.212-0.55,0-0.773\n c0.212-0.212,0.55-0.201,0.762,0c0.593,0.614,1.63,0.614,2.223,0c0.212-0.201,0.561-0.201,0.762,0\n C14.102,13.305,14.102,13.634,13.88,13.856z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class ReverseWithdrawalIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M9.786,8.292c-0.021-0.568,0.192-1.131,0.622-1.587c0.415-0.441,0.977-0.684,1.583-0.684c0.555,0,1.084,0.21,1.488,0.59\n c0.872,0.821,0.914,2.198,0.09,3.075c-0.251,0.285-0.235,0.716,0.037,0.98c0.134,0.13,0.31,0.202,0.497,0.202\n c0.194,0,0.375-0.076,0.513-0.219c1.28-1.387,1.264-3.543-0.037-4.91c-0.684-0.718-1.608-1.114-2.6-1.114\n c-0.926,0-1.805,0.352-2.475,0.99C8.809,6.277,8.414,7.168,8.39,8.127C8.367,9.085,8.718,9.995,9.38,10.69\n c0.132,0.137,0.318,0.217,0.512,0.217c0,0,0.005,0,0.005,0c0.183,0,0.363-0.075,0.498-0.21c0.133-0.134,0.206-0.312,0.205-0.5\n c0-0.189-0.075-0.366-0.207-0.496C10.024,9.32,9.808,8.819,9.786,8.292z\"/>\n <path d=\"M17.688,8.278c0,0.534,0.435,0.968,0.968,0.968c0.534,0,0.969-0.435,0.969-0.968S19.191,7.31,18.657,7.31\n C18.123,7.31,17.688,7.744,17.688,8.278z\"/>\n <path d=\"M4.182,8.278c0,0.534,0.435,0.968,0.968,0.968c0.534,0,0.969-0.435,0.969-0.968S5.684,7.31,5.15,7.31\n C4.617,7.31,4.182,7.744,4.182,8.278z\"/>\n <path d=\"M9.298,15.138H1.997c-0.315,0-0.573-0.256-0.574-0.571V1.993c0-0.317,0.257-0.574,0.574-0.574h19.94\n c0.317,0,0.577,0.258,0.579,0.574v8.903c0.001,0.391,0.32,0.709,0.712,0.71c0.391,0,0.71-0.319,0.711-0.711V1.992\n C23.935,0.894,23.039,0,21.937,0H1.997C0.899,0,0.003,0.894,0,1.993v12.575c0.003,1.098,0.899,1.992,1.997,1.992h7.302\n c0.19,0,0.369-0.074,0.503-0.209c0.134-0.134,0.208-0.313,0.208-0.503C10.009,15.456,9.69,15.138,9.298,15.138z\"/>\n <path d=\"M23.878,15.515l-3.217-4.73c-0.049-0.073-0.112-0.135-0.186-0.185c-0.118-0.081-0.256-0.123-0.398-0.123\n c-0.234,0-0.452,0.115-0.585,0.309l-3.199,4.725c-0.042,0.046-0.077,0.098-0.107,0.156c-0.085,0.17-0.099,0.363-0.039,0.543\n c0.06,0.181,0.186,0.327,0.356,0.412c0.098,0.049,0.208,0.075,0.318,0.075c0.271,0,0.515-0.15,0.623-0.371l2.043-3.024l0,5.812\n c-0.062,1.817-1.534,3.289-3.351,3.351l-0.12,0.002c-1.88,0-3.403-1.473-3.466-3.346v-6.639c0-0.392-0.319-0.711-0.711-0.711\n s-0.711,0.319-0.711,0.711v6.64c0.005,2.69,2.198,4.88,4.889,4.88h0.004c2.691,0,4.885-2.189,4.893-4.88v-5.447l1.79,2.634\n c0.13,0.196,0.348,0.315,0.591,0.316c0.139-0.001,0.274-0.043,0.389-0.121c0.158-0.106,0.265-0.267,0.302-0.453\n C24.023,15.863,23.985,15.673,23.878,15.515z\"/>\n </g>\n </SvgIcon>;\n }\n}\n","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport class OpenExternalIcon extends React.Component<ISvgIconProps> {\n\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <g fill=\"currentColor\">\n <path d=\"M19.514,10.35v8.805c0,0.197-0.155,0.353-0.354,0.353H4.84c-0.198,0-0.353-0.155-0.353-0.353V4.845\n c0-0.198,0.155-0.353,0.353-0.353h8.812V3.007H4.84C3.825,3.007,3,3.832,3,4.845v14.309c0,1.015,0.825,1.839,1.84,1.839h14.32\n c1.015,0,1.84-0.824,1.84-1.839V10.35H19.514z\"/>\n <polygon points=\"9.776,13.14 10.827,14.191 18.642,6.375 20.917,8.649 20.917,8.634 20.917,3.076 15.344,3.076 17.592,5.324 \t\"/>\n </g>\n </SvgIcon>\n )\n }\n}","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport class WalletIcon extends React.Component<ISvgIconProps> {\n\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <path d=\"M22.433 10.463V8.083c0 -1.24 -1.053 -2.249 -2.348 -2.249h-3.029L11.996 1.523a0.8 0.8 0 0 0 -1.04 0L5.896 5.833H3.912c-2.159 0 -3.913 1.683 -3.913 3.749v9c0 2.068 1.755 3.751 3.913 3.751h16.173c1.293 0 2.347 -1.009 2.347 -2.251v-2.379c0.912 -0.309 1.567 -1.143 1.567 -2.121v-3c0 -0.977 -0.653 -1.811 -1.565 -2.12M11.477 3.087l3.224 2.747H8.252z\n m9.391 16.996c0 0.413 -0.351 0.751 -0.783 0.751H3.912c-1.295 0 -2.348 -1.011 -2.348 -2.251v-9c0 -1.24 1.053 -2.249 2.347 -2.249h16.173c0.432 0 0.784 0.336 0.784 0.749v2.249H18.52c-2.159 0 -3.913 1.683 -3.913 3.751 0 2.067 1.755 3.751 3.913 3.751h2.347z\n m1.565 -4.499c0 0.413 -0.352 0.749 -0.783 0.749H18.52c-1.293 0 -2.347 -1.009 -2.347 -2.249s1.053 -2.251 2.347 -2.251h3.131c0.431 0 0.783 0.337 0.783 0.749z\n M18.52 13.333a0.767 0.767 0 0 0 -0.783 0.751c0 0.413 0.351 0.749 0.783 0.749a0.767 0.767 0 0 0 0.783 -0.749 0.767 0.767 0 0 0 -0.783 -0.751\"\n fill=\"currentColor\"\n />\n </SvgIcon>\n )\n }\n}","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport class RegisterUserIcon extends React.Component<ISvgIconProps> {\n\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 24 24\" >\n <path d=\"M15.54 13.16a0.574 0.574 0 0 0 -0.084 -0.209 0.575 0.575 0 0 0 -0.156 -0.161 8.206 8.206 0 0 0 -2.196 -1.06 4.328 4.328 0 0 0 1.888 -3.58 4.346 4.346 0 0 0 -4.34 -4.34 4.346 4.346 0 0 0 -4.342 4.34c0 1.436 0.702 2.765 1.885 3.578A8.251 8.251 0 0 0 2.4 19.612a0.576 0.576 0 0 0 1.153 0 7.104 7.104 0 0 1 11.096 -5.868 0.574 0.574 0 0 0 0.802 -0.151 0.569 0.569 0 0 0 0.089 -0.208 0.569 0.569 0 0 0 0 -0.224ZM10.651 11.34A3.192 3.192 0 0 1 7.464 8.153a3.192 3.192 0 0 1 3.187 -3.188 3.192 3.192 0 0 1 3.188 3.188A3.192 3.192 0 0 1 10.65 11.34Z\" fill=\"currentColor\" stroke=\"currentColor\" strokeWidth=\"0.48\"/>\n\t <path d=\"M17.604 19.522a0.536 0.536 0 0 1 -0.544 -0.54v-2.909h-2.904a0.536 0.536 0 0 1 -0.545 -0.54c0 -0.306 0.244 -0.556 0.545 -0.556h2.904V12.084a0.548 0.548 0 0 1 1.096 0v2.894h2.896a0.548 0.548 0 0 1 0 1.096H18.156v2.908c0 0.3 -0.248 0.541 -0.552 0.541Z\" fill=\"currentColor\" stroke=\"currentColor\" strokeWidth=\"0.48\"/>\n </SvgIcon>\n )\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface SaveGameIconProps extends ISvgIconProps {\n shouldFill?: boolean;\n}\n\nexport class SaveGameIcon extends React.Component<SaveGameIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} fill={this.props.shouldFill ? \"white\" : \"transparent\"} viewBox=\"0 0 22 22\" >\n <mask id=\"mask0_9821_214528\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"22\" height=\"22\">\n <path d=\"M0 0H22V22H0V0Z\" fill=\"white\" />\n </mask>\n <g mask=\"url(#mask0_9821_214528)\">\n <path d=\"M5.27275 0.999999C4.93541 0.999999 4.61095 1.14033 4.37231 1.39066C4.13364 1.64066 4 1.97967 4 2.33332V20.0887C4 20.592 4.38819 21 4.86864 21H4.87184C5.12957 21 5.37454 20.8927 5.55591 20.702C6.39908 19.8193 8.88727 17.2127 9.91501 16.138C10.2014 15.8363 10.5927 15.6667 11 15.6667C11.4073 15.6667 11.7987 15.8363 12.085 16.138C13.1159 17.216 15.6168 19.8354 16.4505 20.71C16.6286 20.8957 16.8672 21 17.1186 21C17.6055 21 18 20.587 18 20.0773V2.33332C18 1.97967 17.8664 1.64066 17.6277 1.39066C17.3891 1.14033 17.0646 0.999999 16.7272 0.999999H5.27275Z\" stroke=\"white\" strokeWidth=\"2\" strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class PokerChipIcon extends React.Component<ISvgIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 19 18\" fill={'none'}>\n <g clipPath=\"url(#clip0_11018_281868)\">\n <path d=\"M9.29233 7.61963C11.265 7.61963 12.8642 6.05755 12.8642 4.13062C12.8642 2.20369 11.265 0.641602 9.29233 0.641602C7.31964 0.641602 5.72046 2.20369 5.72046 4.13062C5.72046 6.05755 7.31964 7.61963 9.29233 7.61963Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M12.8641 13.6665C14.8368 13.6665 16.436 12.1044 16.436 10.1775C16.436 8.25056 14.8368 6.68848 12.8641 6.68848C10.8914 6.68848 9.29224 8.25056 9.29224 10.1775C9.29224 12.1044 10.8914 13.6665 12.8641 13.6665Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M5.71591 13.6665C7.6886 13.6665 9.28779 12.1044 9.28779 10.1775C9.28779 8.25056 7.6886 6.68848 5.71591 6.68848C3.74322 6.68848 2.14404 8.25056 2.14404 10.1775C2.14404 12.1044 3.74322 13.6665 5.71591 13.6665Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M14.4644 17.354C11.6043 17.354 9.28614 15.0897 9.28614 12.2959C9.28614 15.0897 6.96802 17.354 4.10791 17.354H14.4578H14.4644Z\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_11018_281868\">\n <rect width=\"15.6\" height=\"18\" fill=\"currentColor\" transform=\"translate(1.48999)\"/>\n </clipPath>\n </defs>\n </SvgIcon>\n );\n }\n}\n","import React from \"react\";\nimport {SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class RedRecordCircleIcon extends React.Component {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 8 8\">\n <circle cx=\"4\" cy=\"4\" r=\"4\" fill=\"#F12727\"/>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class LeaveIcon extends React.Component<ISvgIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} fill=\"none\">\n <g stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"square\">\n <path d=\"M15.973 18.375v2.813c0 1.035 -0.839 1.875 -1.873 1.875H2.809c-1.035 0 -1.873 -0.84 -1.873 -1.875V2.812c0 -1.035 0.839 -1.875 1.873 -1.875h11.291c1.035 0 1.873 0.84 1.873 1.875v2.813\" strokeMiterlimit=\"13.33\"/>\n <path d=\"M21.924 11.999H9.227\" strokeLinejoin=\"round\"/>\n <path d=\"M19.581 8.907 22.673 12l-3.092 3.093\" strokeMiterlimit=\"13.33\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class SoundOnIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <g clipPath=\"url(#clip0_10425_165891)\">\n <g filter=\"url(#filter0_d_10425_165891)\">\n <path d=\"M6.36246 15.3301H3.50485C2.58266 15.3301 1.83496 14.5824 1.83496 13.6602V8.34665C1.83496 7.42445 2.58266 6.67676 3.50485 6.67676H6.36246V15.3301Z\" stroke=\"white\" strokeWidth=\"1.66989\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6.36255 15.3296L13.6533 21.168V0.837891L6.36255 6.67625V15.3296Z\" stroke=\"white\" strokeWidth=\"1.66989\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M19 16.9131C19.8946 15.1338 20.399 13.1262 20.399 11.0025C20.399 8.87884 19.8946 6.87204 19.0004 5.09277\" stroke=\"white\" strokeWidth=\"1.66989\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M16.9663 14.5037C17.4001 13.4212 17.6389 12.2393 17.6389 11.0019C17.6389 9.76452 17.4001 8.58348 16.9663 7.50098\" stroke=\"white\" strokeWidth=\"1.66989\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n </g>\n <defs>\n <filter id=\"filter0_d_10425_165891\" x=\"-4\" y=\"-4\" width=\"30\" height=\"30.0029\" filterUnits=\"userSpaceOnUse\" colorInterpolationFilters=\"sRGB\">\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\n <feOffset />\n <feGaussianBlur stdDeviation=\"2\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_10425_165891\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_10425_165891\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_10425_165891\">\n <rect width=\"22\" height=\"22\" fill=\"white\" />\n </clipPath>\n </defs>\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class SoundOffIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <g clipPath=\"url(#clip0_10425_165889)\">\n <g filter=\"url(#filter0_d_10425_165889)\">\n <path d=\"M6.36246 15.3301H3.50485C2.58266 15.3301 1.83496 14.5824 1.83496 13.6602V8.34665C1.83496 7.42445 2.58266 6.67676 3.50485 6.67676H6.36246V15.3301Z\" stroke=\"white\" strokeWidth=\"1.66989\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M6.36255 15.3296L13.6533 21.168V0.837891L6.36255 6.67625V15.3296Z\" stroke=\"white\" strokeWidth=\"1.66989\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M19 16.9131C19.8946 15.1338 20.399 13.1262 20.399 11.0025C20.399 8.87884 19.8946 6.87204 19.0004 5.09277\" stroke=\"white\" strokeWidth=\"1.66989\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M16.9663 14.5037C17.4001 13.4212 17.6389 12.2393 17.6389 11.0019C17.6389 9.76452 17.4001 8.58348 16.9663 7.50098\" stroke=\"white\" strokeWidth=\"1.66989\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M21.0542 20.9648L1.09783 1.00847\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </g>\n </g>\n <defs>\n <filter id=\"filter0_d_10425_165889\" x=\"-4\" y=\"-4\" width=\"30.0542\" height=\"30.0029\" filterUnits=\"userSpaceOnUse\" colorInterpolationFilters=\"sRGB\">\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\n <feOffset />\n <feGaussianBlur stdDeviation=\"2\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_10425_165889\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_10425_165889\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_10425_165889\">\n <rect width=\"22\" height=\"22\" fill=\"white\" />\n </clipPath>\n </defs>\n </SvgIcon>;\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class RetryArrowIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 61 60\" >\n <g clipPath=\"url(#clip0_4810_120940)\">\n <path d=\"M27.5066 0.606313C28.3531 -0.202108 29.7256 -0.202101 30.5721 0.606313L37.611 7.3283C38.0495 7.74711 38.2608 8.30077 38.245 8.8496C38.2559 9.39265 38.0445 9.93912 37.6105 10.3535L30.5717 17.0755C29.7252 17.8839 28.3527 17.8839 27.5061 17.0755C26.6596 16.2671 26.6596 14.9564 27.5061 14.148L31.3807 10.4478C26.9426 10.2696 22.5531 11.4422 18.7753 13.8156C14.9928 16.1919 11.9963 19.6632 10.1711 23.7834C8.346 27.9035 7.77556 32.484 8.53315 36.9361C9.29082 41.3882 11.3419 45.5083 14.4227 48.7668C17.5035 52.0252 21.4731 54.2731 25.8214 55.2213C30.1697 56.1695 34.6977 55.7748 38.8234 54.0879C42.949 52.401 46.4838 49.499 48.9732 45.7549C51.4625 42.0109 52.7927 37.5961 52.7927 33.0779C52.7927 31.8976 53.7346 30.9408 54.8964 30.9408C56.0582 30.9408 57 31.8976 57 33.0779C57 38.4487 55.4188 43.6969 52.4596 48.1475C49.5004 52.5981 45.2985 56.0478 40.3942 58.0531C35.4899 60.0584 30.1073 60.5276 24.9384 59.4004C19.7695 58.2732 15.0506 55.6012 11.3884 51.7277C7.72612 47.8543 5.288 42.9566 4.38736 37.6643C3.48679 32.372 4.16486 26.9269 6.3345 22.0292C8.50406 17.1315 12.0661 13.005 16.5624 10.1802C20.6858 7.58974 25.4221 6.20266 30.2534 6.157L27.5066 3.53386C26.66 2.72544 26.66 1.41473 27.5066 0.606313Z\" fill=\"currentColor\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_4810_120940\">\n <rect width=\"60\" height=\"60\" fill=\"white\" transform=\"matrix(-1 0 0 1 60.5 0)\"/>\n </clipPath>\n </defs>\n </SvgIcon>;\n }\n}\n","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\nexport interface IFilterIconProps extends ISvgIconProps {\n}\n\nexport class ExploreFilledIcon extends React.Component<ISvgIconProps, {}> {\n\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 27 18\" >\n <mask id=\"path-1-inside-1_4793_116827\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.4791 1.58484C11.4001 1.98794 12.2328 2.58684 12.9255 3.34435C12.9532 3.37277 12.9806 3.40142 13.0079 3.43028C13.0353 3.40113 13.0629 3.3722 13.0907 3.34349C13.7828 2.58672 14.6148 1.98844 15.5348 1.58578C16.4549 1.18312 17.4435 0.98469 18.4392 1.00282C19.4348 0.98469 20.4234 1.18312 21.3435 1.58578C22.2635 1.98844 23.0955 2.58672 23.7876 3.34349C24.5027 4.07822 25.0679 4.96002 25.4482 5.93449C25.8285 6.90897 26.0159 7.95548 25.9988 9.00945C26.0166 10.059 25.8295 11.1011 25.4492 12.0707C25.0688 13.0404 24.5034 13.9167 23.7882 14.6451C23.1186 15.3764 22.3183 15.9598 21.4337 16.3616C20.549 16.7633 19.5977 16.9754 18.635 16.9854H18.4386C18.3749 16.9854 18.3111 16.9831 18.2462 16.9808C18.1791 16.9783 18.1107 16.9758 18.04 16.9758C16.1672 16.9038 14.3935 16.0682 13.0907 14.6444C13.0652 14.6183 13.0399 14.5921 13.0147 14.5656C12.9856 14.5964 12.9561 14.6269 12.9264 14.6571C12.2562 15.3892 11.455 15.9732 10.5694 16.3754C9.6839 16.7776 8.73159 16.9899 7.76779 17H7.57289C7.50924 17 7.44552 16.9976 7.38065 16.9952C7.3134 16.9927 7.24493 16.9901 7.17403 16.9901C5.299 16.9184 3.52304 16.0823 2.21844 14.6571C1.50354 13.9269 0.937902 13.0495 0.556474 12.0791C0.175047 11.1088 -0.0140668 10.0661 0.000814788 9.01542C-0.0133298 7.96051 0.176009 6.91361 0.557281 5.93859C0.938554 4.96357 1.50376 4.08088 2.21844 3.34434C2.91121 2.58684 3.74392 1.98794 4.66487 1.58484C5.58581 1.18175 6.57534 0.983072 7.57198 1.00113C8.56863 0.983072 9.55815 1.18175 10.4791 1.58484ZM10.3706 10.2497C10.519 9.85779 10.5896 9.43782 10.578 9.01589C10.5894 8.6011 10.5186 8.18838 10.37 7.80427C10.2215 7.42011 9.99842 7.07311 9.71528 6.78557C9.43847 6.48464 9.1064 6.24665 8.73945 6.08623C8.3725 5.92581 7.9784 5.84634 7.58135 5.85268C7.18289 5.84625 6.78737 5.92563 6.41888 6.08601C6.0504 6.2464 5.71668 6.48443 5.43806 6.78557C5.1528 7.07285 4.9265 7.41908 4.77326 7.80275C4.62001 8.18641 4.54308 8.5993 4.54726 9.01573C4.54284 9.43934 4.61948 9.85952 4.77255 10.251C4.92563 10.6426 5.152 10.9974 5.43806 11.2941C5.71669 11.5952 6.05042 11.8332 6.41891 11.9935C6.78739 12.1538 7.18291 12.2332 7.58135 12.2267C7.97839 12.2331 8.37247 12.1537 8.73943 11.9933C9.10638 11.8329 9.43846 11.595 9.71528 11.2941C9.99916 10.9971 10.2222 10.6416 10.3706 10.2497ZM21.2356 10.2417C21.3838 9.85019 21.4543 9.43064 21.4427 9.00912C21.4541 8.59476 21.3833 8.18248 21.2349 7.79877C21.0865 7.41506 20.8637 7.06844 20.5809 6.78121C20.3044 6.48056 19.9727 6.2428 19.6061 6.08254C19.2395 5.92229 18.8458 5.84291 18.4491 5.84927C18.0511 5.84282 17.656 5.92213 17.2879 6.08235C16.9199 6.24257 16.5865 6.48036 16.3083 6.78121C16.0233 7.06824 15.7973 7.41414 15.6442 7.79741C15.4911 8.18068 15.4142 8.59312 15.4184 9.00912C15.414 9.43226 15.4905 9.85199 15.6435 10.2431C15.7964 10.6342 16.0225 10.9886 16.3083 11.285C16.5865 11.5858 16.9199 11.8236 17.2879 11.9838C17.656 12.1441 18.0511 12.2234 18.4491 12.2169C18.8458 12.2233 19.2395 12.1439 19.6061 11.9836C19.9727 11.8234 20.3044 11.5856 20.5809 11.285C20.8645 10.9883 21.0873 10.6332 21.2356 10.2417Z\" />\n </mask>\n <g filter=\"url(#filter0_i_4793_116827)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.4791 1.58484C11.4001 1.98794 12.2328 2.58684 12.9255 3.34435C12.9532 3.37277 12.9806 3.40142 13.0079 3.43028C13.0353 3.40113 13.0629 3.3722 13.0907 3.34349C13.7828 2.58672 14.6148 1.98844 15.5348 1.58578C16.4549 1.18312 17.4435 0.98469 18.4392 1.00282C19.4348 0.98469 20.4234 1.18312 21.3435 1.58578C22.2635 1.98844 23.0955 2.58672 23.7876 3.34349C24.5027 4.07822 25.0679 4.96002 25.4482 5.93449C25.8285 6.90897 26.0159 7.95548 25.9988 9.00945C26.0166 10.059 25.8295 11.1011 25.4492 12.0707C25.0688 13.0404 24.5034 13.9167 23.7882 14.6451C23.1186 15.3764 22.3183 15.9598 21.4337 16.3616C20.549 16.7633 19.5977 16.9754 18.635 16.9854H18.4386C18.3749 16.9854 18.3111 16.9831 18.2462 16.9808C18.1791 16.9783 18.1107 16.9758 18.04 16.9758C16.1672 16.9038 14.3935 16.0682 13.0907 14.6444C13.0652 14.6183 13.0399 14.5921 13.0147 14.5656C12.9856 14.5964 12.9561 14.6269 12.9264 14.6571C12.2562 15.3892 11.455 15.9732 10.5694 16.3754C9.6839 16.7776 8.73159 16.9899 7.76779 17H7.57289C7.50924 17 7.44552 16.9976 7.38065 16.9952C7.3134 16.9927 7.24493 16.9901 7.17403 16.9901C5.299 16.9184 3.52304 16.0823 2.21844 14.6571C1.50354 13.9269 0.937902 13.0495 0.556474 12.0791C0.175047 11.1088 -0.0140668 10.0661 0.000814788 9.01542C-0.0133298 7.96051 0.176009 6.91361 0.557281 5.93859C0.938554 4.96357 1.50376 4.08088 2.21844 3.34434C2.91121 2.58684 3.74392 1.98794 4.66487 1.58484C5.58581 1.18175 6.57534 0.983072 7.57198 1.00113C8.56863 0.983072 9.55815 1.18175 10.4791 1.58484ZM10.3706 10.2497C10.519 9.85779 10.5896 9.43782 10.578 9.01589C10.5894 8.6011 10.5186 8.18838 10.37 7.80427C10.2215 7.42011 9.99842 7.07311 9.71528 6.78557C9.43847 6.48464 9.1064 6.24665 8.73945 6.08623C8.3725 5.92581 7.9784 5.84634 7.58135 5.85268C7.18289 5.84625 6.78737 5.92563 6.41888 6.08601C6.0504 6.2464 5.71668 6.48443 5.43806 6.78557C5.1528 7.07285 4.9265 7.41908 4.77326 7.80275C4.62001 8.18641 4.54308 8.5993 4.54726 9.01573C4.54284 9.43934 4.61948 9.85952 4.77255 10.251C4.92563 10.6426 5.152 10.9974 5.43806 11.2941C5.71669 11.5952 6.05042 11.8332 6.41891 11.9935C6.78739 12.1538 7.18291 12.2332 7.58135 12.2267C7.97839 12.2331 8.37247 12.1537 8.73943 11.9933C9.10638 11.8329 9.43846 11.595 9.71528 11.2941C9.99916 10.9971 10.2222 10.6416 10.3706 10.2497ZM21.2356 10.2417C21.3838 9.85019 21.4543 9.43064 21.4427 9.00912C21.4541 8.59476 21.3833 8.18248 21.2349 7.79877C21.0865 7.41506 20.8637 7.06844 20.5809 6.78121C20.3044 6.48056 19.9727 6.2428 19.6061 6.08254C19.2395 5.92229 18.8458 5.84291 18.4491 5.84927C18.0511 5.84282 17.656 5.92213 17.2879 6.08235C16.9199 6.24257 16.5865 6.48036 16.3083 6.78121C16.0233 7.06824 15.7973 7.41414 15.6442 7.79741C15.4911 8.18068 15.4142 8.59312 15.4184 9.00912C15.414 9.43226 15.4905 9.85199 15.6435 10.2431C15.7964 10.6342 16.0225 10.9886 16.3083 11.285C16.5865 11.5858 16.9199 11.8236 17.2879 11.9838C17.656 12.1441 18.0511 12.2234 18.4491 12.2169C18.8458 12.2233 19.2395 12.1439 19.6061 11.9836C19.9727 11.8234 20.3044 11.5856 20.5809 11.285C20.8645 10.9883 21.0873 10.6332 21.2356 10.2417Z\" fill=\"url(#paint0_linear_4793_116827)\" fill-opacity=\"0.5\" />\n </g>\n <path d=\"M12.9255 3.34435L12.1876 4.01922L12.1981 4.03071L12.209 4.04188L12.9255 3.34435ZM13.0079 3.43028L12.2804 4.11639L13.0092 4.88915L13.7366 4.1151L13.0079 3.43028ZM13.0907 3.34349L13.8085 4.03978L13.8187 4.02922L13.8287 4.01836L13.0907 3.34349ZM15.5348 1.58578L15.1339 0.669667L15.5348 1.58578ZM18.4392 1.00282L18.4209 2.00266L18.4392 2.00299L18.4574 2.00266L18.4392 1.00282ZM21.3435 1.58578L21.7444 0.669667L21.3435 1.58578ZM23.7876 3.34349L23.0496 4.01836L23.0601 4.02984L23.071 4.04099L23.7876 3.34349ZM25.4482 5.93449L26.3798 5.57093L25.4482 5.93449ZM25.9988 9.00945L24.999 8.99325L24.9987 9.00983L24.999 9.02641L25.9988 9.00945ZM25.4492 12.0707L24.5182 11.7056V11.7056L25.4492 12.0707ZM23.7882 14.6451L23.0747 13.9444L23.0624 13.9569L23.0506 13.9698L23.7882 14.6451ZM21.4337 16.3616L21.0202 15.4511H21.0202L21.4337 16.3616ZM18.635 16.9854V17.9855L18.6454 17.9854L18.635 16.9854ZM18.2462 16.9808L18.21 17.9801H18.21L18.2462 16.9808ZM18.04 16.9758L18.0015 17.9751L18.0208 17.9758H18.04V16.9758ZM13.0907 14.6444L13.8285 13.9694L13.8171 13.9569L13.8053 13.9448L13.0907 14.6444ZM13.0147 14.5656L13.7395 13.8766L13.014 13.1136L12.2893 13.8773L13.0147 14.5656ZM12.9264 14.6571L12.2129 13.9565L12.2007 13.9689L12.1889 13.9818L12.9264 14.6571ZM7.76779 17V18.0001L7.77826 17.9999L7.76779 17ZM7.38065 16.9952L7.3432 17.9945H7.34321L7.38065 16.9952ZM7.17403 16.9901L7.13581 17.9894L7.15491 17.9901H7.17403V16.9901ZM2.21844 14.6571L2.95606 13.9819L2.94473 13.9695L2.93299 13.9575L2.21844 14.6571ZM0.556474 12.0791L-0.374207 12.445H-0.374207L0.556474 12.0791ZM0.000814788 9.01542L1.00071 9.02958L1.00091 9.0158L1.00072 9.00201L0.000814788 9.01542ZM0.557281 5.93859L1.48861 6.30278V6.30278L0.557281 5.93859ZM2.21844 3.34434L2.93612 4.04072L2.9464 4.03012L2.95637 4.01921L2.21844 3.34434ZM4.66487 1.58484L5.06584 2.50093V2.50093L4.66487 1.58484ZM7.57198 1.00113L7.55387 2.00097L7.57198 2.00129L7.5901 2.00097L7.57198 1.00113ZM10.578 9.01589L9.57836 8.98827L9.57759 9.01585L9.57835 9.04344L10.578 9.01589ZM10.3706 10.2497L9.43544 9.89558V9.89558L10.3706 10.2497ZM10.37 7.80427L11.3027 7.44354V7.44354L10.37 7.80427ZM9.71528 6.78557L8.97928 7.46256L8.9908 7.47508L9.00274 7.48721L9.71528 6.78557ZM8.73945 6.08623L9.14002 5.16996L8.73945 6.08623ZM7.58135 5.85268L7.56519 6.85255L7.58126 6.85281L7.59732 6.85256L7.58135 5.85268ZM6.41888 6.08601L6.81797 7.00292L6.81798 7.00292L6.41888 6.08601ZM5.43806 6.78557L6.14765 7.49019L6.16009 7.47766L6.17209 7.4647L5.43806 6.78557ZM4.77326 7.80275L3.8446 7.43181L3.8446 7.43181L4.77326 7.80275ZM4.54726 9.01573L5.54721 9.02616L5.54731 9.01592L5.54721 9.00569L4.54726 9.01573ZM4.77255 10.251L3.84121 10.6152L4.77255 10.251ZM5.43806 11.2941L6.17202 10.6149L6.16509 10.6075L6.15801 10.6001L5.43806 11.2941ZM7.58135 12.2267L7.59747 11.2268L7.58126 11.2266L7.56504 11.2268L7.58135 12.2267ZM8.73943 11.9933L8.33898 11.077L8.33898 11.077L8.73943 11.9933ZM9.71528 11.2941L8.99241 10.6031L8.98581 10.61L8.97935 10.6171L9.71528 11.2941ZM21.4427 9.00912L20.4431 8.9816L20.4423 9.00913L20.4431 9.03667L21.4427 9.00912ZM21.2356 10.2417L20.3004 9.88756L20.3004 9.88756L21.2356 10.2417ZM20.5809 6.78121L19.8449 7.45816L19.8564 7.47067L19.8683 7.48278L20.5809 6.78121ZM19.6061 6.08254L19.2055 6.99882L19.2055 6.99882L19.6061 6.08254ZM18.4491 5.84927L18.4329 6.84914L18.449 6.8494L18.4652 6.84914L18.4491 5.84927ZM17.2879 6.08235L17.6871 6.99925L17.6871 6.99924L17.2879 6.08235ZM16.3083 6.78121L17.018 7.4857L17.0304 7.47318L17.0424 7.46023L16.3083 6.78121ZM15.6442 7.79741L14.7155 7.42648L14.7155 7.42648L15.6442 7.79741ZM15.4184 9.00912L16.4183 9.01948L16.4184 9.00935L16.4183 8.99923L15.4184 9.00912ZM15.6435 10.2431L16.5748 9.87891V9.87891L15.6435 10.2431ZM16.3083 11.285L17.0424 10.6059L17.0354 10.5984L17.0282 10.5909L16.3083 11.285ZM17.2879 11.9838L17.6871 11.0669V11.0669L17.2879 11.9838ZM18.4491 12.2169L18.4652 11.217L18.449 11.2168L18.4329 11.217L18.4491 12.2169ZM20.5809 11.285L19.8581 10.594L19.8514 10.6009L19.8449 10.608L20.5809 11.285ZM13.6635 2.66948C12.8785 1.81115 11.9317 1.12905 10.8801 0.668751L10.0781 2.50093C10.8684 2.84683 11.587 3.36252 12.1876 4.01922L13.6635 2.66948ZM13.7354 2.74417C13.7045 2.71148 13.6734 2.67903 13.6421 2.64681L12.209 4.04188C12.233 4.06652 12.2568 4.09136 12.2804 4.11639L13.7354 2.74417ZM12.373 2.64719C12.3414 2.67971 12.3102 2.71247 12.2792 2.74547L13.7366 4.1151C13.7604 4.08979 13.7843 4.06468 13.8085 4.03978L12.373 2.64719ZM15.1339 0.669667C14.0831 1.12952 13.1371 1.81101 12.3528 2.66861L13.8287 4.01836C14.4286 3.36242 15.1464 2.84735 15.9358 2.50189L15.1339 0.669667ZM18.4574 0.00299042C17.3163 -0.0177922 16.1849 0.20973 15.1339 0.669667L15.9358 2.50189C16.7249 2.15651 17.5706 1.98717 18.4209 2.00266L18.4574 0.00299042ZM21.7444 0.669667C20.6934 0.209731 19.562 -0.0177921 18.4209 0.00299042L18.4574 2.00266C19.3077 1.98717 20.1534 2.15651 20.9425 2.50189L21.7444 0.669667ZM24.5255 2.66862C23.7412 1.81101 22.7952 1.12952 21.7444 0.669667L20.9425 2.50189C21.7319 2.84735 22.4497 3.36242 23.0496 4.01836L24.5255 2.66862ZM26.3798 5.57093C25.9519 4.47447 25.3145 3.4785 24.5041 2.64599L23.071 4.04099C23.691 4.67793 24.1839 5.44556 24.5166 6.29806L26.3798 5.57093ZM26.9987 9.02566C27.0179 7.84289 26.8077 6.66731 26.3798 5.57093L24.5166 6.29806C24.8494 7.15063 25.014 8.06808 24.999 8.99325L26.9987 9.02566ZM26.3801 12.4359C26.8086 11.3437 27.0187 10.1716 26.9987 8.99249L24.999 9.02641C25.0146 9.94632 24.8505 10.8585 24.5182 11.7056L26.3801 12.4359ZM24.5017 15.3457C25.3131 14.5194 25.9516 13.5283 26.3801 12.4359L24.5182 11.7056C24.186 12.5525 23.6936 13.3141 23.0747 13.9444L24.5017 15.3457ZM21.8472 17.2721C22.8571 16.8134 23.767 16.149 24.5257 15.3204L23.0506 13.9698C22.4702 14.6037 21.7795 15.1062 21.0202 15.4511L21.8472 17.2721ZM18.6454 17.9854C19.7486 17.9738 20.8371 17.7308 21.8472 17.2721L21.0202 15.4511C20.261 15.7958 19.4469 15.9769 18.6245 15.9855L18.6454 17.9854ZM18.4386 17.9854H18.635V15.9854H18.4386V17.9854ZM18.21 17.9801C18.2717 17.9823 18.3537 17.9854 18.4386 17.9854V15.9854C18.3961 15.9854 18.3505 15.9839 18.2825 15.9814L18.21 17.9801ZM18.04 17.9758C18.0897 17.9758 18.1403 17.9776 18.21 17.9801L18.2825 15.9814C18.2178 15.9791 18.1317 15.9758 18.04 15.9758V17.9758ZM12.353 15.3195C13.8301 16.9339 15.8529 17.8924 18.0015 17.9751L18.0784 15.9766C16.4815 15.9151 14.9569 15.2026 13.8285 13.9694L12.353 15.3195ZM12.29 15.2547C12.3185 15.2846 12.3472 15.3144 12.3762 15.344L13.8053 13.9448C13.7832 13.9223 13.7613 13.8995 13.7395 13.8766L12.29 15.2547ZM13.64 15.3577C13.6737 15.3234 13.707 15.2888 13.7401 15.2539L12.2893 13.8773C12.2641 13.9039 12.2386 13.9303 12.2129 13.9565L13.64 15.3577ZM10.983 17.2859C11.9938 16.8268 12.9046 16.1618 13.664 15.3324L12.1889 13.9818C11.6077 14.6165 10.9162 15.1196 10.1559 15.4649L10.983 17.2859ZM7.77826 17.9999C8.88246 17.9884 9.97194 17.7451 10.983 17.2859L10.1559 15.4649C9.39586 15.8101 8.58072 15.9914 7.75732 16.0001L7.77826 17.9999ZM7.57289 18H7.76779V16H7.57289V18ZM7.34321 17.9945C7.40485 17.9968 7.48736 18 7.57289 18V16C7.53112 16 7.48618 15.9984 7.41808 15.9959L7.34321 17.9945ZM7.17403 17.9901C7.22327 17.9901 7.27341 17.9919 7.3432 17.9945L7.41809 15.9959C7.3534 15.9935 7.26658 15.9901 7.17403 15.9901V17.9901ZM1.48081 15.3323C2.95987 16.9481 4.98495 17.9071 7.13581 17.9894L7.21224 15.9908C5.61306 15.9297 4.08621 15.2165 2.95606 13.9819L1.48081 15.3323ZM-0.374207 12.445C0.0551769 13.5373 0.693397 14.5288 1.50388 15.3567L2.93299 13.9575C2.31368 13.3249 1.82063 12.5617 1.48716 11.7133L-0.374207 12.445ZM-0.999085 9.00126C-1.01579 10.1808 -0.803562 11.3527 -0.374207 12.445L1.48716 11.7133C1.15366 10.8649 0.987659 9.95132 1.00071 9.02958L-0.999085 9.00126ZM-0.374044 5.5744C-0.802714 6.67063 -1.01496 7.84583 -0.999095 9.02882L1.00072 9.00201C0.988298 8.07519 1.15473 7.15658 1.48861 6.30278L-0.374044 5.5744ZM1.50076 2.64797C0.691605 3.48188 0.054654 4.4781 -0.374044 5.5744L1.48861 6.30278C1.82245 5.44904 2.31592 4.67988 2.93612 4.04072L1.50076 2.64797ZM4.2639 0.668751C3.21227 1.12905 2.26547 1.81115 1.4805 2.66947L2.95637 4.01921C3.55694 3.36252 4.27557 2.84683 5.06584 2.50093L4.2639 0.668751ZM7.5901 0.0012933C6.4481 -0.0193973 5.31572 0.208373 4.2639 0.668751L5.06584 2.50093C5.85591 2.15512 6.70257 1.98554 7.55387 2.00097L7.5901 0.0012933ZM10.8801 0.668751C9.82825 0.208373 8.69587 -0.0193971 7.55387 0.0012933L7.5901 2.00097C8.4414 1.98554 9.28806 2.15512 10.0781 2.50093L10.8801 0.668751ZM9.57835 9.04344C9.58642 9.33615 9.53736 9.6264 9.43544 9.89558L11.3058 10.6038C11.5007 10.0892 11.5928 9.5395 11.5776 8.98834L9.57835 9.04344ZM9.43737 8.165C9.53771 8.42443 9.58618 8.70507 9.57836 8.98827L11.5776 9.0435C11.5927 8.49714 11.4995 7.95233 11.3027 7.44354L9.43737 8.165ZM9.00274 7.48721C9.18797 7.67532 9.33706 7.90564 9.43737 8.165L11.3027 7.44354C11.1059 6.93459 10.8089 6.47091 10.4278 6.08394L9.00274 7.48721ZM8.33889 7.0025C8.5759 7.10611 8.79442 7.26159 8.97928 7.46256L10.4513 6.10859C10.0825 5.70769 9.63691 5.38718 9.14002 5.16996L8.33889 7.0025ZM7.59732 6.85256C7.84991 6.84852 8.10206 6.89896 8.33889 7.0025L9.14002 5.16996C8.64295 4.95266 8.1069 4.84416 7.56538 4.85281L7.59732 6.85256ZM6.81798 7.00292C7.05668 6.89903 7.31071 6.84844 7.56519 6.85255L7.5975 4.85281C7.05507 4.84405 6.51806 4.95223 6.01979 5.1691L6.81798 7.00292ZM6.17209 7.4647C6.35875 7.26295 6.5791 7.1069 6.81797 7.00292L6.01979 5.1691C5.5217 5.3859 5.07461 5.70592 4.70404 6.10645L6.17209 7.4647ZM5.70191 8.17368C5.80635 7.91222 5.95906 7.68012 6.14765 7.49019L4.72847 6.08096C4.34654 6.46559 4.04666 6.92594 3.8446 7.43181L5.70191 8.17368ZM5.54721 9.00569C5.54433 8.71862 5.59744 8.43524 5.70192 8.17368L3.8446 7.43181C3.64257 7.93759 3.54183 8.47998 3.54731 9.02577L5.54721 9.00569ZM5.7039 9.88692C5.59784 9.61563 5.54411 9.32268 5.54721 9.02616L3.54731 9.0053C3.54157 9.556 3.64112 10.1034 3.84121 10.6152L5.7039 9.88692ZM6.15801 10.6001C5.96534 10.4002 5.80994 10.1581 5.7039 9.88692L3.84121 10.6152C4.04132 11.127 4.33866 11.5945 4.71811 11.9882L6.15801 10.6001ZM6.81788 11.0766C6.57899 10.9726 6.35865 10.8166 6.17202 10.6149L4.7041 11.9733C5.07473 12.3738 5.52185 12.6938 6.01993 12.9105L6.81788 11.0766ZM7.56504 11.2268C7.31061 11.231 7.0566 11.1804 6.81788 11.0766L6.01993 12.9105C6.51819 13.1273 7.05521 13.2354 7.59766 13.2266L7.56504 11.2268ZM8.33898 11.077C8.10213 11.1805 7.85001 11.2309 7.59747 11.2268L7.56523 13.2266C8.10676 13.2353 8.64282 13.1268 9.13988 12.9096L8.33898 11.077ZM8.97935 10.6171C8.79452 10.818 8.57601 10.9734 8.33898 11.077L9.13987 12.9096C9.63674 12.6925 10.0824 12.3721 10.4512 11.9712L8.97935 10.6171ZM9.43544 9.89558C9.33353 10.1647 9.18175 10.4051 8.99241 10.6031L10.4381 11.9851C10.8166 11.5892 11.1109 11.1185 11.3058 10.6038L9.43544 9.89558ZM20.4431 9.03667C20.4512 9.32895 20.4022 9.61877 20.3004 9.88756L22.1708 10.5958C22.3655 10.0816 22.4575 9.53233 22.4423 8.98157L20.4431 9.03667ZM20.3023 8.15953C20.4025 8.41859 20.4509 8.69881 20.4431 8.9816L22.4423 9.03664C22.4574 8.49071 22.3642 7.94637 22.1676 7.43801L20.3023 8.15953ZM19.8683 7.48278C20.0532 7.67059 20.2021 7.90057 20.3023 8.15953L22.1676 7.43801C21.9709 6.92956 21.6742 6.46629 21.2935 6.07963L19.8683 7.48278ZM19.2055 6.99882C19.4422 7.10226 19.6604 7.2575 19.8449 7.45816L21.317 6.10425C20.9485 5.70361 20.5032 5.38333 20.0066 5.16627L19.2055 6.99882ZM18.4652 6.84914C18.7173 6.8451 18.9691 6.89544 19.2055 6.99882L20.0066 5.16627C19.5099 4.94913 18.9742 4.84071 18.4331 4.8494L18.4652 6.84914ZM17.6871 6.99924C17.9254 6.89552 18.1789 6.84502 18.4329 6.84914L18.4653 4.8494C17.9233 4.84061 17.3867 4.94874 16.8888 5.16545L17.6871 6.99924ZM17.0424 7.46023C17.2287 7.25882 17.4486 7.10305 17.6871 6.99925L16.8888 5.16545C16.3911 5.3821 15.9444 5.70189 15.5741 6.10218L17.0424 7.46023ZM16.5729 8.16834C16.6772 7.90722 16.8296 7.67541 17.018 7.4857L15.5985 6.07671C15.217 6.46107 14.9174 6.92105 14.7155 7.42648L16.5729 8.16834ZM16.4183 8.99923C16.4155 8.71253 16.4685 8.42954 16.5729 8.16834L14.7155 7.42648C14.5137 7.93182 14.413 8.47371 14.4184 9.01901L16.4183 8.99923ZM16.5748 9.87891C16.4689 9.60807 16.4152 9.31556 16.4183 9.01948L14.4184 8.99877C14.4127 9.54897 14.5122 10.0959 14.7121 10.6072L16.5748 9.87891ZM17.0282 10.5909C16.8358 10.3914 16.6807 10.1497 16.5748 9.87891L14.7121 10.6072C14.9121 11.1186 15.2092 11.5857 15.5883 11.979L17.0282 10.5909ZM17.6871 11.0669C17.4486 10.9631 17.2287 10.8074 17.0424 10.6059L15.5741 11.964C15.9444 12.3643 16.3911 12.6841 16.8888 12.9007L17.6871 11.0669ZM18.4329 11.217C18.1789 11.2211 17.9253 11.1707 17.6871 11.0669L16.8888 12.9007C17.3867 13.1174 17.9233 13.2256 18.4653 13.2168L18.4329 11.217ZM19.2055 11.0673C18.9691 11.1707 18.7173 11.2211 18.4652 11.217L18.4331 13.2168C18.9742 13.2255 19.5099 13.117 20.0066 12.8999L19.2055 11.0673ZM19.8449 10.608C19.6604 10.8087 19.4422 10.9639 19.2055 11.0673L20.0066 12.8999C20.5032 12.6828 20.9485 12.3626 21.317 11.9619L19.8449 10.608ZM20.3004 9.88756C20.1986 10.1563 20.0471 10.3962 19.8581 10.594L21.3038 11.9759C21.6819 11.5804 21.976 11.1101 22.1708 10.5958L20.3004 9.88756Z\" fill=\"currentColor\" mask=\"url(#path-1-inside-1_4793_116827)\" />\n <mask id=\"path-3-inside-2_4793_116827\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.4791 1.58484C11.4001 1.98794 12.2328 2.58684 12.9255 3.34435C12.9532 3.37277 12.9806 3.40142 13.0079 3.43028C13.0353 3.40113 13.0629 3.3722 13.0907 3.34349C13.7828 2.58672 14.6148 1.98844 15.5348 1.58578C16.4549 1.18312 17.4435 0.98469 18.4392 1.00282C19.4348 0.98469 20.4234 1.18312 21.3435 1.58578C22.2635 1.98844 23.0955 2.58672 23.7876 3.34349C24.5027 4.07822 25.0679 4.96002 25.4482 5.93449C25.8285 6.90897 26.0159 7.95548 25.9988 9.00945C26.0166 10.059 25.8295 11.1011 25.4492 12.0707C25.0688 13.0404 24.5034 13.9167 23.7882 14.6451C23.1186 15.3764 22.3183 15.9598 21.4337 16.3616C20.549 16.7633 19.5977 16.9754 18.635 16.9854H18.4386C18.3749 16.9854 18.3111 16.9831 18.2462 16.9808C18.1791 16.9783 18.1107 16.9758 18.04 16.9758C16.1672 16.9038 14.3935 16.0682 13.0907 14.6444C13.0652 14.6183 13.0399 14.5921 13.0147 14.5656C12.9856 14.5964 12.9561 14.6269 12.9264 14.6571C12.2562 15.3892 11.455 15.9732 10.5694 16.3754C9.6839 16.7776 8.73159 16.9899 7.76779 17H7.57289C7.50924 17 7.44552 16.9976 7.38065 16.9952C7.3134 16.9927 7.24493 16.9901 7.17403 16.9901C5.299 16.9184 3.52304 16.0823 2.21844 14.6571C1.50354 13.9269 0.937902 13.0495 0.556474 12.0791C0.175047 11.1088 -0.0140668 10.0661 0.000814788 9.01542C-0.0133298 7.96051 0.176009 6.91361 0.557281 5.93859C0.938554 4.96357 1.50376 4.08088 2.21844 3.34434C2.91121 2.58684 3.74392 1.98794 4.66487 1.58484C5.58581 1.18175 6.57534 0.983072 7.57198 1.00113C8.56863 0.983072 9.55815 1.18175 10.4791 1.58484ZM10.3706 10.2497C10.519 9.85779 10.5896 9.43782 10.578 9.01589C10.5894 8.6011 10.5186 8.18838 10.37 7.80427C10.2215 7.42011 9.99842 7.07311 9.71528 6.78557C9.43847 6.48464 9.1064 6.24665 8.73945 6.08623C8.3725 5.92581 7.9784 5.84634 7.58135 5.85268C7.18289 5.84625 6.78737 5.92563 6.41888 6.08601C6.0504 6.2464 5.71668 6.48443 5.43806 6.78557C5.1528 7.07285 4.9265 7.41908 4.77326 7.80275C4.62001 8.18641 4.54308 8.5993 4.54726 9.01573C4.54284 9.43934 4.61948 9.85952 4.77255 10.251C4.92563 10.6426 5.152 10.9974 5.43806 11.2941C5.71669 11.5952 6.05042 11.8332 6.41891 11.9935C6.78739 12.1538 7.18291 12.2332 7.58135 12.2267C7.97839 12.2331 8.37247 12.1537 8.73943 11.9933C9.10638 11.8329 9.43846 11.595 9.71528 11.2941C9.99916 10.9971 10.2222 10.6416 10.3706 10.2497ZM21.2356 10.2417C21.3838 9.85019 21.4543 9.43064 21.4427 9.00912C21.4541 8.59476 21.3833 8.18248 21.2349 7.79877C21.0865 7.41506 20.8637 7.06844 20.5809 6.78121C20.3044 6.48056 19.9727 6.2428 19.6061 6.08254C19.2395 5.92229 18.8458 5.84291 18.4491 5.84927C18.0511 5.84282 17.656 5.92213 17.2879 6.08235C16.9199 6.24257 16.5865 6.48036 16.3083 6.78121C16.0233 7.06824 15.7973 7.41414 15.6442 7.79741C15.4911 8.18068 15.4142 8.59312 15.4184 9.00912C15.414 9.43226 15.4905 9.85199 15.6435 10.2431C15.7964 10.6342 16.0225 10.9886 16.3083 11.285C16.5865 11.5858 16.9199 11.8236 17.2879 11.9838C17.656 12.1441 18.0511 12.2234 18.4491 12.2169C18.8458 12.2233 19.2395 12.1439 19.6061 11.9836C19.9727 11.8234 20.3044 11.5856 20.5809 11.285C20.8645 10.9883 21.0873 10.6332 21.2356 10.2417Z\" />\n </mask>\n <path d=\"M12.9255 3.34435L12.1876 4.01922L12.1981 4.03071L12.209 4.04188L12.9255 3.34435ZM13.0079 3.43028L12.2804 4.11639L13.0092 4.88915L13.7366 4.1151L13.0079 3.43028ZM13.0907 3.34349L13.8085 4.03978L13.8187 4.02922L13.8287 4.01836L13.0907 3.34349ZM15.5348 1.58578L15.1339 0.669667L15.5348 1.58578ZM18.4392 1.00282L18.4209 2.00266L18.4392 2.00299L18.4574 2.00266L18.4392 1.00282ZM21.3435 1.58578L21.7444 0.669667L21.3435 1.58578ZM23.7876 3.34349L23.0496 4.01836L23.0601 4.02984L23.071 4.04099L23.7876 3.34349ZM25.4482 5.93449L26.3798 5.57093L25.4482 5.93449ZM25.9988 9.00945L24.999 8.99325L24.9987 9.00983L24.999 9.02641L25.9988 9.00945ZM25.4492 12.0707L24.5182 11.7056V11.7056L25.4492 12.0707ZM23.7882 14.6451L23.0747 13.9444L23.0624 13.9569L23.0506 13.9698L23.7882 14.6451ZM21.4337 16.3616L21.0202 15.4511H21.0202L21.4337 16.3616ZM18.635 16.9854V17.9855L18.6454 17.9854L18.635 16.9854ZM18.2462 16.9808L18.21 17.9801H18.21L18.2462 16.9808ZM18.04 16.9758L18.0015 17.9751L18.0208 17.9758H18.04V16.9758ZM13.0907 14.6444L13.8285 13.9694L13.8171 13.9569L13.8053 13.9448L13.0907 14.6444ZM13.0147 14.5656L13.7395 13.8766L13.014 13.1136L12.2893 13.8773L13.0147 14.5656ZM12.9264 14.6571L12.2129 13.9565L12.2007 13.9689L12.1889 13.9818L12.9264 14.6571ZM7.76779 17V18.0001L7.77826 17.9999L7.76779 17ZM7.38065 16.9952L7.3432 17.9945H7.34321L7.38065 16.9952ZM7.17403 16.9901L7.13581 17.9894L7.15491 17.9901H7.17403V16.9901ZM2.21844 14.6571L2.95606 13.9819L2.94473 13.9695L2.93299 13.9575L2.21844 14.6571ZM0.556474 12.0791L-0.374207 12.445H-0.374207L0.556474 12.0791ZM0.000814788 9.01542L1.00071 9.02958L1.00091 9.0158L1.00072 9.00201L0.000814788 9.01542ZM0.557281 5.93859L1.48861 6.30278V6.30278L0.557281 5.93859ZM2.21844 3.34434L2.93612 4.04072L2.9464 4.03012L2.95637 4.01921L2.21844 3.34434ZM4.66487 1.58484L5.06584 2.50093V2.50093L4.66487 1.58484ZM7.57198 1.00113L7.55387 2.00097L7.57198 2.00129L7.5901 2.00097L7.57198 1.00113ZM10.578 9.01589L9.57836 8.98827L9.57759 9.01585L9.57835 9.04344L10.578 9.01589ZM10.3706 10.2497L9.43544 9.89558V9.89558L10.3706 10.2497ZM10.37 7.80427L11.3027 7.44354V7.44354L10.37 7.80427ZM9.71528 6.78557L8.97928 7.46256L8.9908 7.47508L9.00274 7.48721L9.71528 6.78557ZM8.73945 6.08623L9.14002 5.16996L8.73945 6.08623ZM7.58135 5.85268L7.56519 6.85255L7.58126 6.85281L7.59732 6.85256L7.58135 5.85268ZM6.41888 6.08601L6.81797 7.00292L6.81798 7.00292L6.41888 6.08601ZM5.43806 6.78557L6.14765 7.49019L6.16009 7.47766L6.17209 7.4647L5.43806 6.78557ZM4.77326 7.80275L3.8446 7.43181L3.8446 7.43181L4.77326 7.80275ZM4.54726 9.01573L5.54721 9.02616L5.54731 9.01592L5.54721 9.00569L4.54726 9.01573ZM4.77255 10.251L3.84121 10.6152L4.77255 10.251ZM5.43806 11.2941L6.17202 10.6149L6.16509 10.6075L6.15801 10.6001L5.43806 11.2941ZM7.58135 12.2267L7.59747 11.2268L7.58126 11.2266L7.56504 11.2268L7.58135 12.2267ZM8.73943 11.9933L8.33898 11.077L8.33898 11.077L8.73943 11.9933ZM9.71528 11.2941L8.99241 10.6031L8.98581 10.61L8.97935 10.6171L9.71528 11.2941ZM21.4427 9.00912L20.4431 8.9816L20.4423 9.00913L20.4431 9.03667L21.4427 9.00912ZM21.2356 10.2417L20.3004 9.88756L20.3004 9.88756L21.2356 10.2417ZM20.5809 6.78121L19.8449 7.45816L19.8564 7.47067L19.8683 7.48278L20.5809 6.78121ZM19.6061 6.08254L19.2055 6.99882L19.2055 6.99882L19.6061 6.08254ZM18.4491 5.84927L18.4329 6.84914L18.449 6.8494L18.4652 6.84914L18.4491 5.84927ZM17.2879 6.08235L17.6871 6.99925L17.6871 6.99924L17.2879 6.08235ZM16.3083 6.78121L17.018 7.4857L17.0304 7.47318L17.0424 7.46023L16.3083 6.78121ZM15.6442 7.79741L14.7155 7.42648L14.7155 7.42648L15.6442 7.79741ZM15.4184 9.00912L16.4183 9.01948L16.4184 9.00935L16.4183 8.99923L15.4184 9.00912ZM15.6435 10.2431L16.5748 9.87891V9.87891L15.6435 10.2431ZM16.3083 11.285L17.0424 10.6059L17.0354 10.5984L17.0282 10.5909L16.3083 11.285ZM17.2879 11.9838L17.6871 11.0669V11.0669L17.2879 11.9838ZM18.4491 12.2169L18.4652 11.217L18.449 11.2168L18.4329 11.217L18.4491 12.2169ZM20.5809 11.285L19.8581 10.594L19.8514 10.6009L19.8449 10.608L20.5809 11.285ZM13.6635 2.66948C12.8785 1.81115 11.9317 1.12905 10.8801 0.668751L10.0781 2.50093C10.8684 2.84683 11.587 3.36252 12.1876 4.01922L13.6635 2.66948ZM13.7354 2.74417C13.7045 2.71148 13.6734 2.67903 13.6421 2.64681L12.209 4.04188C12.233 4.06652 12.2568 4.09136 12.2804 4.11639L13.7354 2.74417ZM12.373 2.64719C12.3414 2.67971 12.3102 2.71247 12.2792 2.74547L13.7366 4.1151C13.7604 4.08979 13.7843 4.06468 13.8085 4.03978L12.373 2.64719ZM15.1339 0.669667C14.0831 1.12952 13.1371 1.81101 12.3528 2.66861L13.8287 4.01836C14.4286 3.36242 15.1464 2.84735 15.9358 2.50189L15.1339 0.669667ZM18.4574 0.00299042C17.3163 -0.0177922 16.1849 0.20973 15.1339 0.669667L15.9358 2.50189C16.7249 2.15651 17.5706 1.98717 18.4209 2.00266L18.4574 0.00299042ZM21.7444 0.669667C20.6934 0.209731 19.562 -0.0177921 18.4209 0.00299042L18.4574 2.00266C19.3077 1.98717 20.1534 2.15651 20.9425 2.50189L21.7444 0.669667ZM24.5255 2.66862C23.7412 1.81101 22.7952 1.12952 21.7444 0.669667L20.9425 2.50189C21.7319 2.84735 22.4497 3.36242 23.0496 4.01836L24.5255 2.66862ZM26.3798 5.57093C25.9519 4.47447 25.3145 3.4785 24.5041 2.64599L23.071 4.04099C23.691 4.67793 24.1839 5.44556 24.5166 6.29806L26.3798 5.57093ZM26.9987 9.02566C27.0179 7.84289 26.8077 6.66731 26.3798 5.57093L24.5166 6.29806C24.8494 7.15063 25.014 8.06808 24.999 8.99325L26.9987 9.02566ZM26.3801 12.4359C26.8086 11.3437 27.0187 10.1716 26.9987 8.99249L24.999 9.02641C25.0146 9.94632 24.8505 10.8585 24.5182 11.7056L26.3801 12.4359ZM24.5017 15.3457C25.3131 14.5194 25.9516 13.5283 26.3801 12.4359L24.5182 11.7056C24.186 12.5525 23.6936 13.3141 23.0747 13.9444L24.5017 15.3457ZM21.8472 17.2721C22.8571 16.8134 23.767 16.149 24.5257 15.3204L23.0506 13.9698C22.4702 14.6037 21.7795 15.1062 21.0202 15.4511L21.8472 17.2721ZM18.6454 17.9854C19.7486 17.9738 20.8371 17.7308 21.8472 17.2721L21.0202 15.4511C20.261 15.7958 19.4469 15.9769 18.6245 15.9855L18.6454 17.9854ZM18.4386 17.9854H18.635V15.9854H18.4386V17.9854ZM18.21 17.9801C18.2717 17.9823 18.3537 17.9854 18.4386 17.9854V15.9854C18.3961 15.9854 18.3505 15.9839 18.2825 15.9814L18.21 17.9801ZM18.04 17.9758C18.0897 17.9758 18.1403 17.9776 18.21 17.9801L18.2825 15.9814C18.2178 15.9791 18.1317 15.9758 18.04 15.9758V17.9758ZM12.353 15.3195C13.8301 16.9339 15.8529 17.8924 18.0015 17.9751L18.0784 15.9766C16.4815 15.9151 14.9569 15.2026 13.8285 13.9694L12.353 15.3195ZM12.29 15.2547C12.3185 15.2846 12.3472 15.3144 12.3762 15.344L13.8053 13.9448C13.7832 13.9223 13.7613 13.8995 13.7395 13.8766L12.29 15.2547ZM13.64 15.3577C13.6737 15.3234 13.707 15.2888 13.7401 15.2539L12.2893 13.8773C12.2641 13.9039 12.2386 13.9303 12.2129 13.9565L13.64 15.3577ZM10.983 17.2859C11.9938 16.8268 12.9046 16.1618 13.664 15.3324L12.1889 13.9818C11.6077 14.6165 10.9162 15.1196 10.1559 15.4649L10.983 17.2859ZM7.77826 17.9999C8.88246 17.9884 9.97194 17.7451 10.983 17.2859L10.1559 15.4649C9.39586 15.8101 8.58072 15.9914 7.75732 16.0001L7.77826 17.9999ZM7.57289 18H7.76779V16H7.57289V18ZM7.34321 17.9945C7.40485 17.9968 7.48736 18 7.57289 18V16C7.53112 16 7.48618 15.9984 7.41808 15.9959L7.34321 17.9945ZM7.17403 17.9901C7.22327 17.9901 7.27341 17.9919 7.3432 17.9945L7.41809 15.9959C7.3534 15.9935 7.26658 15.9901 7.17403 15.9901V17.9901ZM1.48081 15.3323C2.95987 16.9481 4.98495 17.9071 7.13581 17.9894L7.21224 15.9908C5.61306 15.9297 4.08621 15.2165 2.95606 13.9819L1.48081 15.3323ZM-0.374207 12.445C0.0551769 13.5373 0.693397 14.5288 1.50388 15.3567L2.93299 13.9575C2.31368 13.3249 1.82063 12.5617 1.48716 11.7133L-0.374207 12.445ZM-0.999085 9.00126C-1.01579 10.1808 -0.803562 11.3527 -0.374207 12.445L1.48716 11.7133C1.15366 10.8649 0.987659 9.95132 1.00071 9.02958L-0.999085 9.00126ZM-0.374044 5.5744C-0.802714 6.67063 -1.01496 7.84583 -0.999095 9.02882L1.00072 9.00201C0.988298 8.07519 1.15473 7.15658 1.48861 6.30278L-0.374044 5.5744ZM1.50076 2.64797C0.691605 3.48188 0.054654 4.4781 -0.374044 5.5744L1.48861 6.30278C1.82245 5.44904 2.31592 4.67988 2.93612 4.04072L1.50076 2.64797ZM4.2639 0.668751C3.21227 1.12905 2.26547 1.81115 1.4805 2.66947L2.95637 4.01921C3.55694 3.36252 4.27557 2.84683 5.06584 2.50093L4.2639 0.668751ZM7.5901 0.0012933C6.4481 -0.0193973 5.31572 0.208373 4.2639 0.668751L5.06584 2.50093C5.85591 2.15512 6.70257 1.98554 7.55387 2.00097L7.5901 0.0012933ZM10.8801 0.668751C9.82825 0.208373 8.69587 -0.0193971 7.55387 0.0012933L7.5901 2.00097C8.4414 1.98554 9.28806 2.15512 10.0781 2.50093L10.8801 0.668751ZM9.57835 9.04344C9.58642 9.33615 9.53736 9.6264 9.43544 9.89558L11.3058 10.6038C11.5007 10.0892 11.5928 9.5395 11.5776 8.98834L9.57835 9.04344ZM9.43737 8.165C9.53771 8.42443 9.58618 8.70507 9.57836 8.98827L11.5776 9.0435C11.5927 8.49714 11.4995 7.95233 11.3027 7.44354L9.43737 8.165ZM9.00274 7.48721C9.18797 7.67532 9.33706 7.90564 9.43737 8.165L11.3027 7.44354C11.1059 6.93459 10.8089 6.47091 10.4278 6.08394L9.00274 7.48721ZM8.33889 7.0025C8.5759 7.10611 8.79442 7.26159 8.97928 7.46256L10.4513 6.10859C10.0825 5.70769 9.63691 5.38718 9.14002 5.16996L8.33889 7.0025ZM7.59732 6.85256C7.84991 6.84852 8.10206 6.89896 8.33889 7.0025L9.14002 5.16996C8.64295 4.95266 8.1069 4.84416 7.56538 4.85281L7.59732 6.85256ZM6.81798 7.00292C7.05668 6.89903 7.31071 6.84844 7.56519 6.85255L7.5975 4.85281C7.05507 4.84405 6.51806 4.95223 6.01979 5.1691L6.81798 7.00292ZM6.17209 7.4647C6.35875 7.26295 6.5791 7.1069 6.81797 7.00292L6.01979 5.1691C5.5217 5.3859 5.07461 5.70592 4.70404 6.10645L6.17209 7.4647ZM5.70191 8.17368C5.80635 7.91222 5.95906 7.68012 6.14765 7.49019L4.72847 6.08096C4.34654 6.46559 4.04666 6.92594 3.8446 7.43181L5.70191 8.17368ZM5.54721 9.00569C5.54433 8.71862 5.59744 8.43524 5.70192 8.17368L3.8446 7.43181C3.64257 7.93759 3.54183 8.47998 3.54731 9.02577L5.54721 9.00569ZM5.7039 9.88692C5.59784 9.61563 5.54411 9.32268 5.54721 9.02616L3.54731 9.0053C3.54157 9.556 3.64112 10.1034 3.84121 10.6152L5.7039 9.88692ZM6.15801 10.6001C5.96534 10.4002 5.80994 10.1581 5.7039 9.88692L3.84121 10.6152C4.04132 11.127 4.33866 11.5945 4.71811 11.9882L6.15801 10.6001ZM6.81788 11.0766C6.57899 10.9726 6.35865 10.8166 6.17202 10.6149L4.7041 11.9733C5.07473 12.3738 5.52185 12.6938 6.01993 12.9105L6.81788 11.0766ZM7.56504 11.2268C7.31061 11.231 7.0566 11.1804 6.81788 11.0766L6.01993 12.9105C6.51819 13.1273 7.05521 13.2354 7.59766 13.2266L7.56504 11.2268ZM8.33898 11.077C8.10213 11.1805 7.85001 11.2309 7.59747 11.2268L7.56523 13.2266C8.10676 13.2353 8.64282 13.1268 9.13988 12.9096L8.33898 11.077ZM8.97935 10.6171C8.79452 10.818 8.57601 10.9734 8.33898 11.077L9.13987 12.9096C9.63674 12.6925 10.0824 12.3721 10.4512 11.9712L8.97935 10.6171ZM9.43544 9.89558C9.33353 10.1647 9.18175 10.4051 8.99241 10.6031L10.4381 11.9851C10.8166 11.5892 11.1109 11.1185 11.3058 10.6038L9.43544 9.89558ZM20.4431 9.03667C20.4512 9.32895 20.4022 9.61877 20.3004 9.88756L22.1708 10.5958C22.3655 10.0816 22.4575 9.53233 22.4423 8.98157L20.4431 9.03667ZM20.3023 8.15953C20.4025 8.41859 20.4509 8.69881 20.4431 8.9816L22.4423 9.03664C22.4574 8.49071 22.3642 7.94637 22.1676 7.43801L20.3023 8.15953ZM19.8683 7.48278C20.0532 7.67059 20.2021 7.90057 20.3023 8.15953L22.1676 7.43801C21.9709 6.92956 21.6742 6.46629 21.2935 6.07963L19.8683 7.48278ZM19.2055 6.99882C19.4422 7.10226 19.6604 7.2575 19.8449 7.45816L21.317 6.10425C20.9485 5.70361 20.5032 5.38333 20.0066 5.16627L19.2055 6.99882ZM18.4652 6.84914C18.7173 6.8451 18.9691 6.89544 19.2055 6.99882L20.0066 5.16627C19.5099 4.94913 18.9742 4.84071 18.4331 4.8494L18.4652 6.84914ZM17.6871 6.99924C17.9254 6.89552 18.1789 6.84502 18.4329 6.84914L18.4653 4.8494C17.9233 4.84061 17.3867 4.94874 16.8888 5.16545L17.6871 6.99924ZM17.0424 7.46023C17.2287 7.25882 17.4486 7.10305 17.6871 6.99925L16.8888 5.16545C16.3911 5.3821 15.9444 5.70189 15.5741 6.10218L17.0424 7.46023ZM16.5729 8.16834C16.6772 7.90722 16.8296 7.67541 17.018 7.4857L15.5985 6.07671C15.217 6.46107 14.9174 6.92105 14.7155 7.42648L16.5729 8.16834ZM16.4183 8.99923C16.4155 8.71253 16.4685 8.42954 16.5729 8.16834L14.7155 7.42648C14.5137 7.93182 14.413 8.47371 14.4184 9.01901L16.4183 8.99923ZM16.5748 9.87891C16.4689 9.60807 16.4152 9.31556 16.4183 9.01948L14.4184 8.99877C14.4127 9.54897 14.5122 10.0959 14.7121 10.6072L16.5748 9.87891ZM17.0282 10.5909C16.8358 10.3914 16.6807 10.1497 16.5748 9.87891L14.7121 10.6072C14.9121 11.1186 15.2092 11.5857 15.5883 11.979L17.0282 10.5909ZM17.6871 11.0669C17.4486 10.9631 17.2287 10.8074 17.0424 10.6059L15.5741 11.964C15.9444 12.3643 16.3911 12.6841 16.8888 12.9007L17.6871 11.0669ZM18.4329 11.217C18.1789 11.2211 17.9253 11.1707 17.6871 11.0669L16.8888 12.9007C17.3867 13.1174 17.9233 13.2256 18.4653 13.2168L18.4329 11.217ZM19.2055 11.0673C18.9691 11.1707 18.7173 11.2211 18.4652 11.217L18.4331 13.2168C18.9742 13.2255 19.5099 13.117 20.0066 12.8999L19.2055 11.0673ZM19.8449 10.608C19.6604 10.8087 19.4422 10.9639 19.2055 11.0673L20.0066 12.8999C20.5032 12.6828 20.9485 12.3626 21.317 11.9619L19.8449 10.608ZM20.3004 9.88756C20.1986 10.1563 20.0471 10.3962 19.8581 10.594L21.3038 11.9759C21.6819 11.5804 21.976 11.1101 22.1708 10.5958L20.3004 9.88756Z\" fill=\"currentColor\" mask=\"url(#path-3-inside-2_4793_116827)\" />\n <circle cx=\"18.4329\" cy=\"9.00391\" r=\"3.22266\" fill=\"currentColor\" />\n <circle cx=\"7.56714\" cy=\"9.00391\" r=\"3.22266\" fill=\"currentColor\" />\n <mask id=\"path-7-inside-3_4793_116827\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12.9255 3.34435C12.2328 2.58684 11.4001 1.98794 10.4791 1.58484C9.55816 1.18175 8.56864 0.983072 7.57199 1.00113C6.57534 0.983072 5.58582 1.18175 4.66487 1.58484C3.74392 1.98794 2.91121 2.58684 2.21844 3.34434C1.50377 4.08088 0.938555 4.96357 0.557283 5.93859C0.17601 6.91361 -0.01333 7.96051 0.000814838 9.01542C-0.0140673 10.0661 0.175047 11.1088 0.556476 12.0791C0.937904 13.0495 1.50354 13.9269 2.21844 14.6571C3.52304 16.0823 5.29901 16.9184 7.17403 16.9901C7.24494 16.9901 7.31341 16.9927 7.38066 16.9952C7.44553 16.9976 7.50925 17 7.5729 17H7.7678C8.7316 16.9899 9.68391 16.7776 10.5695 16.3754C11.455 15.9732 12.2562 15.3892 12.9265 14.6571C12.9778 14.6048 13.0283 14.5518 13.0781 14.498C13.1235 14.5469 13.1695 14.5951 13.2161 14.6427C14.5189 16.0666 16.2925 16.9021 18.1653 16.9742C18.236 16.9742 18.3044 16.9766 18.3716 16.9791C18.4365 16.9814 18.5002 16.9837 18.5639 16.9837H18.7603C19.7231 16.9737 20.6744 16.7616 21.559 16.3599C22.4436 15.9581 23.244 15.3747 23.9135 14.6434C24.6287 13.9151 25.1941 13.0387 25.5745 12.0691C25.9549 11.0994 26.142 10.0573 26.1242 9.00777C26.1413 7.9538 25.9539 6.90729 25.5736 5.93281C25.1933 4.95833 24.6281 4.07654 23.9129 3.3418C23.2208 2.58503 22.3889 1.98675 21.4688 1.58409C20.5488 1.18144 19.5602 0.983006 18.5645 1.00114C17.5688 0.983006 16.5802 1.18144 15.6602 1.58409C14.7401 1.98675 13.9082 2.58503 13.2161 3.3418C13.1666 3.39278 13.1179 3.44446 13.0699 3.49682C13.0225 3.44532 12.9744 3.39449 12.9255 3.34435Z\" />\n </mask>\n <path d=\"M10.4791 1.58484L10.8801 0.668751V0.668751L10.4791 1.58484ZM12.9255 3.34435L12.1876 4.01922L12.1981 4.03071L12.209 4.04187L12.9255 3.34435ZM7.57199 1.00113L7.55388 2.00097L7.57199 2.00129L7.59011 2.00097L7.57199 1.00113ZM2.21844 3.34434L2.93612 4.04072L2.94641 4.03012L2.95638 4.01921L2.21844 3.34434ZM0.557283 5.93859L1.48861 6.30278L1.48861 6.30278L0.557283 5.93859ZM0.000814838 9.01542L1.00071 9.02958L1.00091 9.0158L1.00072 9.00201L0.000814838 9.01542ZM0.556476 12.0791L1.48716 11.7133L1.48716 11.7133L0.556476 12.0791ZM2.21844 14.6571L2.95607 13.9819L2.94474 13.9695L2.93299 13.9575L2.21844 14.6571ZM7.17403 16.9901L7.13582 17.9894L7.15492 17.9901H7.17403V16.9901ZM7.38066 16.9952L7.34321 17.9945H7.34322L7.38066 16.9952ZM7.7678 17V18.0001L7.77827 17.9999L7.7678 17ZM12.9265 14.6571L12.2129 13.9565L12.2007 13.9689L12.1889 13.9818L12.9265 14.6571ZM13.0781 14.498L13.8111 13.8178L13.0772 13.0269L12.3442 13.8187L13.0781 14.498ZM13.2161 14.6427L13.9539 13.9677L13.9425 13.9552L13.9306 13.9432L13.2161 14.6427ZM18.1653 16.9742L18.1269 17.9734L18.1461 17.9742H18.1653V16.9742ZM18.3716 16.9791L18.3353 17.9784H18.3353L18.3716 16.9791ZM18.7603 16.9837V17.9838L18.7708 17.9837L18.7603 16.9837ZM21.559 16.3599L21.1455 15.4494L21.559 16.3599ZM23.9135 14.6434L23.2 13.9427L23.1878 13.9552L23.176 13.9681L23.9135 14.6434ZM25.5745 12.0691L26.5054 12.4342L26.5054 12.4342L25.5745 12.0691ZM26.1242 9.00777L25.1243 8.99156L25.1241 9.00815L25.1243 9.02473L26.1242 9.00777ZM25.5736 5.93281L26.5051 5.56924V5.56924L25.5736 5.93281ZM23.9129 3.3418L23.175 4.01667L23.1855 4.02816L23.1963 4.0393L23.9129 3.3418ZM21.4688 1.58409L21.0679 2.5002V2.5002L21.4688 1.58409ZM18.5645 1.00114L18.5463 2.00097L18.5645 2.00131L18.5827 2.00097L18.5645 1.00114ZM15.6602 1.58409L16.0611 2.5002H16.0611L15.6602 1.58409ZM13.2161 3.3418L13.9338 4.0381L13.9441 4.02753L13.954 4.01667L13.2161 3.3418ZM13.0699 3.49682L12.3342 4.17411L13.0714 4.97491L13.807 4.17263L13.0699 3.49682ZM10.0781 2.50093C10.8684 2.84683 11.587 3.36252 12.1876 4.01922L13.6635 2.66947C12.8785 1.81115 11.9317 1.12905 10.8801 0.668751L10.0781 2.50093ZM7.59011 2.00097C8.44141 1.98554 9.28807 2.15512 10.0781 2.50093L10.8801 0.668751C9.82826 0.208373 8.69588 -0.0193971 7.55388 0.0012933L7.59011 2.00097ZM5.06584 2.50093C5.85592 2.15512 6.70258 1.98554 7.55388 2.00097L7.59011 0.0012933C6.44811 -0.0193973 5.31573 0.208373 4.2639 0.668751L5.06584 2.50093ZM2.95638 4.01921C3.55694 3.36252 4.27557 2.84683 5.06584 2.50093L4.2639 0.668751C3.21227 1.12904 2.26547 1.81115 1.4805 2.66947L2.95638 4.01921ZM1.48861 6.30278C1.82246 5.44904 2.31592 4.67989 2.93612 4.04072L1.50076 2.64797C0.691607 3.48188 0.0546554 4.4781 -0.374043 5.5744L1.48861 6.30278ZM1.00072 9.00201C0.988298 8.07519 1.15473 7.15659 1.48861 6.30278L-0.374042 5.5744C-0.802713 6.67063 -1.01496 7.84583 -0.999095 9.02882L1.00072 9.00201ZM1.48716 11.7133C1.15366 10.8649 0.987659 9.95131 1.00071 9.02958L-0.999085 9.00125C-1.01579 10.1808 -0.803561 11.3527 -0.374205 12.445L1.48716 11.7133ZM2.93299 13.9575C2.31368 13.3249 1.82063 12.5617 1.48716 11.7133L-0.374205 12.445C0.0551787 13.5373 0.693399 14.5288 1.50388 15.3567L2.93299 13.9575ZM7.21225 15.9908C5.61306 15.9297 4.08622 15.2165 2.95607 13.9819L1.48081 15.3323C2.95987 16.9481 4.98496 17.9071 7.13582 17.9894L7.21225 15.9908ZM7.4181 15.9959C7.35341 15.9935 7.26659 15.9901 7.17403 15.9901V17.9901C7.22328 17.9901 7.27342 17.9919 7.34321 17.9945L7.4181 15.9959ZM7.5729 16C7.53113 16 7.48621 15.9984 7.41809 15.9959L7.34322 17.9945C7.40485 17.9968 7.48736 18 7.5729 18V16ZM7.7678 16H7.5729V18H7.7678V16ZM10.1559 15.4649C9.39587 15.8101 8.58073 15.9914 7.75733 16.0001L7.77827 17.9999C8.88247 17.9884 9.97195 17.7451 10.983 17.2859L10.1559 15.4649ZM12.1889 13.9818C11.6078 14.6165 10.9162 15.1196 10.1559 15.4649L10.983 17.2859C11.9939 16.8268 12.9046 16.1618 13.664 15.3324L12.1889 13.9818ZM12.3442 13.8187C12.3011 13.8653 12.2573 13.9112 12.2129 13.9565L13.64 15.3577C13.6982 15.2984 13.7556 15.2382 13.812 15.1773L12.3442 13.8187ZM12.3451 15.1782C12.3965 15.2336 12.4486 15.2883 12.5015 15.3423L13.9306 13.9432C13.8903 13.9019 13.8504 13.8601 13.8111 13.8178L12.3451 15.1782ZM12.4783 15.3178C13.9555 16.9322 15.9783 17.8907 18.1269 17.9734L18.2038 15.9749C16.6068 15.9134 15.0822 15.2009 13.9539 13.9677L12.4783 15.3178ZM18.1653 17.9742C18.2151 17.9742 18.2657 17.9759 18.3353 17.9784L18.4078 15.9797C18.3431 15.9774 18.257 15.9742 18.1653 15.9742V17.9742ZM18.3353 17.9784C18.3971 17.9807 18.479 17.9837 18.5639 17.9837V15.9837C18.5214 15.9837 18.4758 15.9822 18.4078 15.9797L18.3353 17.9784ZM18.5639 17.9837H18.7603V15.9837H18.5639V17.9837ZM18.7708 17.9837C19.8739 17.9722 20.9624 17.7291 21.9725 17.2704L21.1455 15.4494C20.3864 15.7941 19.5722 15.9752 18.7499 15.9838L18.7708 17.9837ZM21.9725 17.2704C22.9825 16.8117 23.8924 16.1473 24.6511 15.3187L23.176 13.9681C22.5955 14.602 21.9048 15.1045 21.1455 15.4494L21.9725 17.2704ZM24.627 15.344C25.4385 14.5177 26.077 13.5266 26.5054 12.4342L24.6436 11.7039C24.3113 12.5508 23.8189 13.3125 23.2 13.9427L24.627 15.344ZM26.5054 12.4342C26.9339 11.342 27.1441 10.1699 27.1241 8.99081L25.1243 9.02473C25.1399 9.94463 24.9758 10.8569 24.6436 11.7039L26.5054 12.4342ZM27.1241 9.02398C27.1432 7.8412 26.933 6.66563 26.5051 5.56924L24.642 6.29638C24.9747 7.14895 25.1393 8.06639 25.1243 8.99156L27.1241 9.02398ZM26.5051 5.56924C26.0772 4.47278 25.4398 3.47682 24.6295 2.6443L23.1963 4.0393C23.8163 4.67625 24.3093 5.44388 24.642 6.29638L26.5051 5.56924ZM24.6509 2.66693C23.8665 1.80933 22.9205 1.12784 21.8697 0.667983L21.0679 2.5002C21.8573 2.84567 22.5751 3.36074 23.175 4.01667L24.6509 2.66693ZM21.8697 0.667983C20.8188 0.208047 19.6874 -0.0194762 18.5463 0.00130635L18.5827 2.00097C19.433 1.98549 20.2787 2.15482 21.0679 2.5002L21.8697 0.667983ZM18.5827 0.00130635C17.4417 -0.0194763 16.3102 0.208046 15.2593 0.667983L16.0611 2.5002C16.8503 2.15482 17.696 1.98549 18.5463 2.00097L18.5827 0.00130635ZM15.2593 0.667983C14.2085 1.12784 13.2625 1.80933 12.4782 2.66693L13.954 4.01667C14.5539 3.36074 15.2717 2.84567 16.0611 2.5002L15.2593 0.667983ZM12.4983 2.64551C12.4423 2.70325 12.3871 2.76176 12.3328 2.82101L13.807 4.17263C13.8487 4.12716 13.8909 4.08231 13.9338 4.0381L12.4983 2.64551ZM12.209 4.04187C12.2513 4.08535 12.293 4.12943 12.3342 4.17411L13.8056 2.81954C13.7519 2.76122 13.6974 2.70364 13.6421 2.64682L12.209 4.04187Z\" fill=\"url(#paint1_linear_4793_116827)\" mask=\"url(#path-7-inside-3_4793_116827)\" />\n <defs>\n <filter id=\"filter0_i_4793_116827\" x=\"0\" y=\"1\" width=\"26\" height=\"16\" filterUnits=\"userSpaceOnUse\" colorInterpolationFilters=\"sRGB\">\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"BackgroundImageFix\" result=\"shape\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\n <feOffset />\n <feGaussianBlur stdDeviation=\"1.5\" />\n <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\" />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.55 0\" />\n <feBlend mode=\"normal\" in2=\"shape\" result=\"effect1_innerShadow_4793_116827\" />\n </filter>\n <linearGradient id=\"paint0_linear_4793_116827\" x1=\"3\" y1=\"17\" x2=\"24.5\" y2=\"4\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#9747FF\" />\n <stop offset=\"0.365\" stop-color=\"#FCE403\" />\n <stop offset=\"0.87\" stop-color=\"#7FF800\" />\n </linearGradient>\n <linearGradient id=\"paint1_linear_4793_116827\" x1=\"3\" y1=\"17\" x2=\"24.5\" y2=\"4\" gradientUnits=\"userSpaceOnUse\">\n <stop stop-color=\"#9747FF\" />\n <stop offset=\"0.48\" stop-color=\"#FCE403\" />\n <stop offset=\"0.9\" stop-color=\"#7FF800\" />\n </linearGradient>\n </defs>\n </SvgIcon>\n )\n }\n}","import {ISvgIconProps, SvgIcon} from \"../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport * as React from \"react\";\n\nexport interface IExploreOutlinedIconProps extends ISvgIconProps {\n dotColor?: string;\n}\n\nexport class ExploreOutlinedIcon extends React.Component<IExploreOutlinedIconProps> {\n render() {\n const { dotColor, ...rest } = this.props; \n return (\n <SvgIcon {...rest} viewBox={\"0 0 19 18\"} fill={'none'}>\n <path d=\"M8.10826 6.08478C7.75874 5.86337 7.29004 6.10138 7.29004 6.50072V11.4993C7.29004 11.8986 7.75839 12.1366 8.10826 11.9152L12.0557 9.41594C12.3682 9.21809 12.3682 8.78191 12.0557 8.58406L8.10826 6.08478Z\" fill=\"currentColor\" />\n <path d=\"M7.27321 16.5244L7.01221 17.4983\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M11.5676 0.5L11.3066 1.47387\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M11.3066 16.5244L11.5676 17.4983\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M7.01221 0.5L7.27321 1.47387\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M1.76439 11.0156L0.790527 11.2766\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M17.7881 6.72168L16.8142 6.98269\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M3.78032 14.5078L3.06787 15.2203\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M15.5113 2.77832L14.7988 3.49077\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M2.71235 2.77832L3.4248 3.49077\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M15.5113 15.2203L14.7988 14.5078\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M1.76439 6.98269L0.790527 6.72168\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M17.7883 11.2766L16.8145 11.0156\" stroke={this.props.dotColor ? this.props.dotColor : \"#7FF800\"} strokeMiterlimit=\"10\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </SvgIcon>\n )\n }\n}","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface IExclusiveSideMenuIconProps extends ISvgIconProps {\n\n}\n\nexport class ExclusiveSideMenuIcon extends React.Component<IExclusiveSideMenuIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 21 20\" fill=\"none\">\n <g clipPath=\"url(#clip0_11018_281867)\">\n <path d=\"M11.2588 3.653L12.1468 5.027L12.4595 5.51075L13.0348 5.54L14.6683 5.62175L14.75 7.25525L14.7793 7.8305L15.263 8.14325L16.637 9.03125L15.8915 10.487L15.629 11L15.8915 11.513L16.637 12.9688L15.263 13.8568L14.7793 14.1695L14.75 14.7448L14.6683 16.3783L13.0348 16.46L12.4595 16.4893L12.1468 16.973L11.2588 18.347L9.80304 17.6015L9.29004 17.339L8.77704 17.6015L7.32129 18.347L6.43329 16.973L6.12054 16.4893L5.54529 16.46L3.91179 16.3783L3.83004 14.7448L3.80079 14.1695L3.31704 13.8568L1.94304 12.9688L2.68854 11.513L2.95104 11L2.68854 10.487L1.94304 9.03125L3.31704 8.14325L3.80079 7.8305L3.83004 7.25525L3.91179 5.62175L5.54529 5.54L6.12054 5.51075L6.43329 5.027L7.32129 3.653L8.77704 4.3985L9.29004 4.661L9.80304 4.3985L11.2588 3.653ZM11.651 2.1875L9.29004 3.39725L6.92904 2.1875L5.48904 4.41575L2.83854 4.5485L2.70579 7.19825L0.477539 8.639L1.68729 11L0.477539 13.361L2.70579 14.801L2.83854 17.4508L5.48829 17.5835L6.92829 19.8118L9.29004 18.6027L11.651 19.8125L13.091 17.5842L15.7408 17.4515L15.8735 14.8018L18.1018 13.3617L16.8928 11L18.1025 8.639L15.8743 7.199L15.7415 4.54925L13.0918 4.4165L11.651 2.1875Z\" fill=\"currentColor\"/>\n <path d=\"M9.29013 6.5L10.4159 9.51125L13.6274 9.6515L11.1119 11.6525L11.9706 14.75L9.29013 12.9763L6.60963 14.75L7.46838 11.6525L4.95288 9.6515L8.16438 9.51125L9.29013 6.5Z\" fill=\"currentColor\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport { SvgIcon } from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\nimport { ILiveCasinoNavbarIconProps } from \"./live-casino-navbar-icon-props.interface\";\n\nexport class ItalianSpeakingIcon extends React.Component<ILiveCasinoNavbarIconProps> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M19.3111 0H2.68889C1.19778 0 0 1.12444 0 2.51778V15.1556C0 16.5489 1.19778 17.6733 2.68889 17.6733H4.44889V21.4133C4.44889 21.6333 4.59556 21.8533 4.81556 21.9511C4.91333 22 4.98667 22 5.08444 22C5.23111 22 5.37778 21.9511 5.5 21.8778L11.0489 17.6733H19.3111C20.8022 17.6733 22 16.5489 22 15.1556V2.51778C22 1.12444 20.8022 0 19.3111 0ZM20.7533 15.1311C20.7533 15.8644 20.1178 16.4511 19.3356 16.4511H10.8044C10.6578 16.4511 10.5111 16.5 10.3889 16.5733L5.72 20.1178V17.0378C5.72 16.72 5.42667 16.4511 5.08444 16.4511H2.68889C1.90667 16.4511 1.27111 15.8644 1.27111 15.1311V2.56667C1.27111 1.83333 1.90667 1.24667 2.68889 1.24667H19.36C20.1422 1.24667 20.7778 1.83333 20.7778 2.56667V15.1311H20.7533Z\" fill=\"currentColor\" fill-opacity=\"0.2\" />\n <path d=\"M20.7533 15.1311C20.7533 15.8644 20.1178 16.4511 19.3356 16.4511H10.8044C10.6578 16.4511 10.5111 16.5 10.3889 16.5733L5.72 20.1178V17.0378C5.72 16.72 5.42667 16.4511 5.08444 16.4511H2.68889C1.90667 16.4511 1.27111 15.8644 1.27111 15.1311V2.56667C1.27111 1.83333 1.90667 1.24667 2.68889 1.24667H19.36C20.1422 1.24667 20.7778 1.83333 20.7778 2.56667V15.1311H20.7533Z\" fill=\"currentColor\" fill-opacity=\"0.2\" />\n <path d=\"M19.3111 0H2.68889C1.19778 0 0 1.12444 0 2.51778V15.1556C0 16.5489 1.19778 17.6733 2.68889 17.6733H4.44889V21.4133C4.44889 21.6333 4.59556 21.8533 4.81556 21.9511C4.91333 22 4.98667 22 5.08444 22C5.23111 22 5.37778 21.9511 5.5 21.8778L11.0489 17.6733H19.3111C20.8022 17.6733 22 16.5489 22 15.1556V2.51778C22 1.12444 20.8022 0 19.3111 0ZM20.7533 15.1311C20.7533 15.8644 20.1178 16.4511 19.3356 16.4511H10.8044C10.6578 16.4511 10.5111 16.5 10.3889 16.5733L5.72 20.1178V17.0378C5.72 16.72 5.42667 16.4511 5.08444 16.4511H2.68889C1.90667 16.4511 1.27111 15.8644 1.27111 15.1311V2.56667C1.27111 1.83333 1.90667 1.24667 2.68889 1.24667H19.36C20.1422 1.24667 20.7778 1.83333 20.7778 2.56667V15.1311H20.7533Z\" fill=\"currentColor\" />\n <path d=\"M8.70229 5.20703H7.21118V12.3448H8.70229V5.20703Z\" fill=\"currentColor\" />\n <path d=\"M9.48438 6.47814H11.6355V12.3448H13.1266V6.47814H15.2777V5.20703H9.48438V6.47814Z\" fill=\"currentColor\" />\n </SvgIcon>;\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class AddFundsIcon extends React.Component<ISvgIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 18 18\" fill=\"none\">\n <g>\n <path d=\"M7.72572 16.4219C7.35805 16.4484 6.96862 16.4634 6.5561 16.4634C3.03905 16.4634 1.1203 15.3987 1.1203 14.851C1.1203 14.7149 1.25923 14.4987 1.62679 14.2605C2.70323 14.7533 4.20632 15.0408 5.76301 15.1134C5.7805 15.1145 5.79799 15.1155 5.81549 15.1166C5.9238 15.121 6.03212 15.1243 6.14145 15.1275C6.15569 15.1275 6.16993 15.1275 6.18405 15.1287C6.30762 15.1309 6.43242 15.1331 6.55599 15.1331C6.67316 15.1331 6.79034 15.1309 6.90662 15.1289C6.74235 14.7807 6.60891 14.4151 6.51147 14.0349C5.48504 14.0321 4.50122 13.9319 3.65263 13.7534C3.61103 13.7446 3.56943 13.7358 3.52906 13.7259C3.51157 13.7226 3.49408 13.7183 3.47658 13.7139C2.38265 13.4593 1.65403 13.0959 1.3237 12.7776C1.31933 12.7721 1.31383 12.7677 1.30834 12.7622C1.29847 12.7523 1.28861 12.7414 1.27986 12.7315C1.20215 12.647 1.15517 12.5691 1.13432 12.5033C1.13319 12.4966 1.13106 12.4912 1.12882 12.4846C1.1277 12.4791 1.12658 12.4725 1.12557 12.467C1.12232 12.4517 1.12008 12.4374 1.12008 12.4232C1.12008 12.3946 1.12669 12.3639 1.13981 12.3288L1.1628 12.2761C1.18904 12.2246 1.22951 12.1686 1.28423 12.1093C1.28535 12.107 1.28748 12.106 1.28861 12.1049C1.29959 12.0917 1.31271 12.0797 1.32583 12.0665C1.3357 12.0566 1.34658 12.0467 1.35757 12.0369C1.36631 12.0282 1.37506 12.0205 1.3838 12.0128C1.38593 12.0105 1.3893 12.0084 1.39143 12.0061C1.40567 11.993 1.42092 11.9809 1.4374 11.9676C1.44727 11.96 1.45714 11.9523 1.46689 11.9446C1.48001 11.9337 1.49425 11.9238 1.5095 11.9127C1.52924 11.8974 1.54998 11.8832 1.57184 11.8677C1.57622 11.8655 1.57947 11.8634 1.58283 11.8611C1.59707 11.8512 1.61131 11.8413 1.62656 11.8315C2.62092 12.287 3.97746 12.5669 5.40509 12.6646C5.41171 12.6657 5.41709 12.6657 5.42259 12.6668C5.53303 12.6734 5.64359 12.68 5.75292 12.6855C5.77804 12.6866 5.80214 12.6878 5.82625 12.6888C5.92582 12.6932 6.02539 12.6964 6.12597 12.6987C6.14784 12.6998 6.16869 12.6998 6.19056 12.7008C6.23519 12.7016 6.27925 12.7017 6.32366 12.7024C6.32141 12.6345 6.3185 12.5668 6.3185 12.4985C6.3185 12.195 6.34137 11.8967 6.38376 11.6047C5.49962 11.5955 4.65046 11.5161 3.8955 11.3739C3.88675 11.3727 3.87913 11.3706 3.87038 11.3695C3.80041 11.3563 3.73257 11.342 3.66474 11.3277C3.61439 11.3167 3.56404 11.3069 3.51594 11.2948C3.50932 11.2937 3.50394 11.2925 3.49845 11.2915C2.3979 11.0379 1.66502 10.6736 1.33021 10.3553C1.21752 10.2455 1.15517 10.1467 1.13219 10.0656C1.13106 10.0634 1.12994 10.0612 1.12994 10.059C1.1277 10.0513 1.12669 10.0447 1.12557 10.037C1.12232 10.0227 1.12008 10.0085 1.12008 9.99416C1.12008 9.9063 1.17917 9.78345 1.32135 9.64294C1.33671 9.62753 1.35196 9.61335 1.36833 9.59794C1.37057 9.59681 1.37158 9.59569 1.3727 9.59468C1.41206 9.55845 1.45691 9.52223 1.50726 9.48488C1.52262 9.47385 1.53787 9.46294 1.55323 9.45304C1.55872 9.44978 1.5631 9.44539 1.56859 9.44201C1.57521 9.43763 1.58171 9.43324 1.58833 9.42885C1.60032 9.42008 1.61344 9.41243 1.62656 9.40365C2.61655 9.85691 3.96648 10.1368 5.38648 10.2356C5.41597 10.2378 5.44669 10.2389 5.47618 10.2411C5.56039 10.2466 5.64359 10.2521 5.7278 10.2554C5.77041 10.2576 5.81313 10.2598 5.85574 10.2609C5.9312 10.2643 6.00667 10.2675 6.08224 10.2697C6.12597 10.2708 6.16869 10.2719 6.2113 10.2729C6.31087 10.2752 6.41145 10.2762 6.51102 10.2762H6.59961C6.6439 10.2762 6.68841 10.2754 6.73293 10.275C6.88441 9.88268 7.0747 9.51008 7.29918 9.16121C7.18369 9.1665 7.06741 9.17145 6.94967 9.17426C6.9333 9.17426 6.91794 9.17539 6.90157 9.17539C6.81187 9.17764 6.72104 9.17764 6.63134 9.17865H6.47817C6.38847 9.17753 6.29988 9.17753 6.2113 9.17539C6.19381 9.17539 6.17744 9.17426 6.15883 9.17426C5.36136 9.15446 4.59664 9.07661 3.90963 8.94814C3.88451 8.94375 3.8604 8.93936 3.83528 8.93385C3.78393 8.92395 3.73358 8.91405 3.68324 8.90314C2.47886 8.64956 1.68128 8.2611 1.32796 7.92518C1.31484 7.91201 1.30285 7.89998 1.29074 7.8867C1.28861 7.88445 1.28636 7.88344 1.28524 7.88119C1.20103 7.79006 1.15293 7.70884 1.13207 7.63976C1.13207 7.6365 1.12983 7.63313 1.12983 7.62986C1.12759 7.62221 1.12658 7.61558 1.12546 7.60894C1.12221 7.59465 1.11996 7.58036 1.11996 7.56619C1.11996 7.52558 1.13308 7.47833 1.15932 7.42568C1.15932 7.42568 1.15932 7.42455 1.16044 7.42343C1.16594 7.41139 1.17356 7.39823 1.18231 7.38495C1.18343 7.38281 1.18455 7.38056 1.18556 7.37843C1.21729 7.32791 1.26102 7.27414 1.31899 7.2171C1.33211 7.20394 1.34635 7.18965 1.36059 7.17761C1.36284 7.17536 1.36609 7.1721 1.36822 7.16996C1.39233 7.14803 1.41856 7.12609 1.44592 7.10303C1.44805 7.1019 1.44917 7.10089 1.45142 7.09976C1.46678 7.08773 1.48315 7.07456 1.50064 7.06241C1.50064 7.06129 1.50176 7.06129 1.50277 7.06016C1.52139 7.04588 1.54101 7.03159 1.56186 7.01843C1.57173 7.01291 1.58048 7.00639 1.58922 6.99975C1.60122 6.99098 1.61333 6.98333 1.62645 6.97556C2.61756 7.42995 3.97074 7.70985 5.39399 7.8075C5.41474 7.80975 5.43559 7.81076 5.45521 7.81189C5.54929 7.81841 5.64337 7.82393 5.73744 7.82831C5.77243 7.82944 5.80853 7.83158 5.84464 7.8327C5.92885 7.83596 6.01317 7.83934 6.09738 7.84148C6.13348 7.8426 6.16847 7.84361 6.20345 7.84474C6.32164 7.84699 6.4387 7.848 6.55565 7.848C6.6726 7.848 6.7909 7.84688 6.90785 7.84474C6.94283 7.84361 6.97894 7.84249 7.01392 7.84148C7.09813 7.83923 7.18234 7.83596 7.26666 7.8327C7.30277 7.83158 7.33887 7.82944 7.37498 7.82831C7.46906 7.82393 7.56201 7.81841 7.65609 7.81189C7.67683 7.81076 7.69769 7.80964 7.71731 7.8075C8.00828 7.78736 8.2959 7.7589 8.5788 7.72313C9.63393 6.85766 10.9796 6.33758 12.4442 6.33758C12.6608 6.33758 12.8746 6.34928 13.0853 6.37144V2.71091C13.0858 0.930713 9.80078 0 6.5561 0C3.31142 0 0.0263672 0.930713 0.0263672 2.71091V14.8511C0.0263672 16.6303 3.31153 17.561 6.5561 17.561C7.30198 17.561 8.04932 17.5119 8.75843 17.4146C8.37719 17.1248 8.03026 16.7916 7.72572 16.4219ZM6.5561 1.09755C10.0731 1.09755 11.9919 2.16326 11.9919 2.71091C11.9919 3.25755 10.0731 4.32326 6.5561 4.32326C3.03905 4.32326 1.1203 3.25755 1.1203 2.71091C1.1203 2.16326 3.03905 1.09755 6.5561 1.09755ZM1.1203 5.13878C1.1203 5.13765 1.1203 5.13765 1.1203 5.13765L1.12142 5.12561C1.12142 5.1201 1.12142 5.11459 1.12254 5.10806C1.12366 5.10694 1.12366 5.1048 1.12366 5.10255C1.1379 5.01581 1.20025 4.90388 1.32931 4.77878C1.34792 4.7601 1.36754 4.74255 1.38952 4.72388C1.41464 4.70194 1.44312 4.67888 1.4716 4.65694C1.48035 4.6503 1.48909 4.64378 1.49896 4.63601C1.5252 4.61621 1.55368 4.5954 1.58429 4.57571C1.59304 4.5702 1.60178 4.56368 1.61053 4.55816C1.61602 4.5549 1.62152 4.55153 1.6269 4.54826C2.886 5.12449 4.72716 5.42081 6.55621 5.42081C8.38526 5.42081 10.2274 5.12449 11.4855 4.54826C11.4899 4.55051 11.4943 4.55378 11.4986 4.55591C11.5041 4.55918 11.5106 4.56356 11.5161 4.56694L11.5347 4.5801C11.5511 4.59101 11.5665 4.60204 11.5817 4.61295C11.5927 4.6206 11.6036 4.62836 11.6146 4.63714C11.6321 4.64918 11.6484 4.66121 11.6638 4.67449C11.6748 4.68326 11.6868 4.69316 11.6977 4.70194C11.7064 4.70959 11.7163 4.71735 11.7239 4.72388C11.7436 4.74143 11.7633 4.75898 11.7819 4.77664C11.9121 4.90399 11.9755 5.01705 11.9886 5.10368C11.9886 5.1048 11.9898 5.10694 11.9898 5.10919C11.9909 5.11583 11.9909 5.12123 11.9909 5.12786L11.992 5.13889C11.992 5.14114 11.9909 5.14328 11.9909 5.14654C11.9909 5.15644 11.9898 5.16735 11.9876 5.17838C11.9734 5.26399 11.9099 5.37593 11.7809 5.50103C11.4439 5.81929 10.7099 6.18368 9.60826 6.43725C9.60601 6.43725 9.60276 6.43838 9.60063 6.43838C9.54928 6.45041 9.49557 6.46144 9.44309 6.47348C9.38075 6.48551 9.31728 6.49868 9.2527 6.51083C9.23958 6.51409 9.22646 6.51634 9.21222 6.5196C8.51432 6.65021 7.73648 6.72818 6.92478 6.74674C6.91929 6.74674 6.91278 6.74786 6.90729 6.74786C6.79023 6.75011 6.67428 6.75113 6.5561 6.75113C6.43904 6.75113 6.32197 6.75 6.20603 6.74786C6.19942 6.74786 6.19403 6.74674 6.18742 6.74674C5.37684 6.72806 4.599 6.65021 3.90223 6.5196C3.88585 6.51634 3.87049 6.51296 3.85412 6.51083C3.7929 6.49879 3.73269 6.48664 3.67247 6.47348C2.47785 6.2199 1.68476 5.83583 1.33256 5.50103C1.20238 5.37593 1.14003 5.265 1.12467 5.17838C1.12254 5.16735 1.12142 5.15633 1.12142 5.1453C1.12142 5.14305 1.12142 5.14204 1.1203 5.13979V5.13878Z\" fill=\"currentColor\"/>\n <path d=\"M14.5583 11.9242H12.9811V10.3418C12.9811 10.0311 12.7301 9.7793 12.4204 9.7793C12.1107 9.7793 11.8598 10.0311 11.8598 10.3418V11.9242H10.2823C9.97262 11.9242 9.72168 12.176 9.72168 12.4867C9.72168 12.7974 9.97262 13.0492 10.2823 13.0492H11.8596V14.6316C11.8596 14.9424 12.1106 15.1941 12.4203 15.1941C12.73 15.1941 12.9809 14.9424 12.9809 14.6316V13.0492H14.5581C14.8679 13.0492 15.1188 12.7974 15.1188 12.4867C15.1188 12.176 14.868 11.9242 14.5583 11.9242Z\" fill=\"currentColor\"/>\n <path d=\"M12.4449 6.99805C9.42882 6.99805 6.9751 9.46596 6.9751 12.4994C6.9751 15.533 9.42882 18.0009 12.4449 18.0009C15.4609 18.0009 17.9145 15.5329 17.9145 12.4994C17.9145 9.46596 15.4608 6.99805 12.4449 6.99805ZM12.4449 16.9034C10.0321 16.9034 8.06914 14.9278 8.06914 12.4995C8.06914 10.0713 10.0322 8.09571 12.4449 8.09571C14.8577 8.09571 16.8206 10.0713 16.8206 12.4995C16.8206 14.9278 14.8576 16.9034 12.4449 16.9034Z\" fill=\"currentColor\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import {IThemeIcons} from '../architecture/sections/theme-icons.interface';\nimport {MobileMenuIcon} from './icons/mobile-menu.icon';\nimport {InfoIcon} from './icons/info.icon';\nimport {AddIcon} from './icons/add.icon';\nimport {BackIcon} from './icons/back.icon';\nimport {ForwardIcon} from './icons/forward.icon';\nimport {CloseIcon} from './icons/close.icon';\nimport {ControlCenterIcon} from './icons/control-center.icon';\nimport {HelpIcon} from './icons/help.icon';\nimport {TwoCharsIcon} from './icons/two-chars.icon';\nimport {EarthGlobeIcon} from './icons/earth-globe.icon';\nimport {TopGamesIcon} from './icons/live-arena-navbar/top-games.icon';\nimport {RouletteIcon} from './icons/live-arena-navbar/roulette.icon';\nimport {BlackjackIcon} from './icons/live-arena-navbar/blackjack.icon';\nimport {EliteLoungeIcon} from './icons/live-arena-navbar/elite-lounge.icon';\nimport {PokerIcon} from './icons/live-arena-navbar/poker.icon';\nimport {BaccaratIcon} from './icons/live-arena-navbar/baccarat.icon';\nimport {GameShowsIcon} from './icons/live-arena-navbar/game-shows.icon';\nimport {NewGamesIcon} from './icons/live-arena-navbar/new-games.icon';\nimport {LinkToOfferIcon} from \"./icons/link-to-offer.icon\";\nimport {LinkToOfferCloseIcon} from \"./icons/link-to-offer-close.icon\";\nimport {SourceOfFundsIcon} from \"./icons/source-of-funds.icon\";\nimport {ArrowsUpDownIcon} from \"./icons/arrows-up-down.icon\";\nimport {MegaphoneIcon} from \"./icons/megaphone.icon\";\nimport {ChipIcon} from \"./icons/chip.icon\";\nimport {SettingsIcon} from \"./icons/settings.icon\";\nimport {MuteIcon} from \"./icons/live-arena-tile/mute.icon\";\nimport {UnmuteIcon} from \"./icons/live-arena-tile/unmute.icon\";\nimport {ViewersIcon} from \"./icons/live-arena-tile/viewers.icon\";\nimport {BrokenLinkIcon} from \"./icons/live-arena-tile/broken-link.icon\";\nimport {TimeReminderIcon} from \"./icons/time-reminder.icon\";\nimport {TripleEightExclusiveIcon} from \"./icons/live-arena-navbar/triple-eight-exclusive.icon\";\nimport {PaymentsRedirectIcon} from \"./icons/payments-redirect.icon\";\nimport {LeftArrowIcon} from \"./icons/live-arena-tile/left-arrow.icon\";\nimport {RightArrowIcon} from \"./icons/live-arena-tile/right-arrow.icon\";\nimport {LocationIcon} from \"./icons/location.icon\";\nimport {SearchIcon} from './icons/search.icon';\nimport {BlogIcon} from './icons/side-menu/blog.icon';\nimport {HomeIcon} from './icons/side-menu/home.icon';\nimport {PromotionsIcon} from './icons/side-menu/promotions.icon';\nimport {SlotsIcon} from './icons/side-menu/slots.icon';\nimport {JackpotsIcon} from './icons/side-menu/jackpots.icon';\nimport {LiveCasinoIcon} from './icons/side-menu/live-casino.icon';\nimport {CasinoGamesIcon} from './icons/side-menu/casino-games.icon';\nimport {VipIcon} from './icons/side-menu/vip.icon';\nimport {NewGamesIcon as SideMenuNewGamesIcon} from './icons/side-menu/new-games.icon';\nimport {TripleEightCasinoIcon} from \"./icons/side-menu/888casino.icon\";\nimport {BlackjackIcon as SideMenuBlackjackIcon} from './icons/side-menu/blackjack.icon';\nimport {RouletteIcon as SideMenuRouletteIcon} from './icons/side-menu/roulette.icon';\nimport {GettingStartedIcon} from \"./icons/side-menu/getting-started.icon\";\nimport {BankingIcon} from \"./icons/side-menu/banking.icon\";\nimport {LiveChatIcon} from \"./icons/side-menu/live-chat.icon\";\nimport {DownloadAppIcon} from \"./icons/side-menu/download-app.icon\";\nimport {Club888Icon} from \"./icons/side-menu/club888.icon\";\nimport {PokerCircleIcon} from \"./icons/side-menu/poker-circle.icon\";\nimport {SportCircleIcon} from \"./icons/side-menu/sport-circle.icon\";\nimport {VideoPokerIcon} from \"./icons/side-menu/video-poker.icon\";\nimport {DepositIcon} from \"./icons/side-menu/deposit.icon\";\nimport {FreePlayIcon} from \"./icons/freeplay.icon\";\nimport {NotificationIcon} from \"./icons/notifications.icon\";\nimport {HelpCenterIcon} from \"./icons/help-center.icon\";\nimport {WarningSignIcon} from \"./icons/warning-sign.icon\";\nimport {USAMapIcon} from \"./icons/usa-map.icon\";\nimport {ScratchCardsIcon} from './icons/side-menu/scratch-cards.icon';\nimport {MobileMenuNoSearchIcon} from \"./icons/mobile-menu-no-search.icon\";\nimport {SpeedGamesIcon} from \"./icons/live-arena-navbar/speed-games.icon\";\nimport {FilterIcon} from \"./icons/filter.icon\";\nimport {TempAccountPopupIcon} from \"./icons/temp-account-popup.icon\";\nimport {MobileAppsIcon} from \"./icons/side-menu/mobile-apps.icon\";\nimport {AppHeaderSportIcon} from \"./icons/header-navbar/app-header-sport.icon\";\nimport {AppHeaderPokerIcon} from \"./icons/header-navbar/app-header-poker.icon\";\nimport {AppHeaderLogo888Icon} from \"./icons/header-navbar/app-header-logo-888.icon\";\nimport {AppHeaderCasinoIcon} from \"../definitions/mrgreen/icons/header-navbar/app-header-casino.icon\";\nimport {SelfExclusionRegulationIcon} from \"./icons/header-navbar/regulation-icons/self-exclusion.icon\";\nimport {SelfExclusionRegulationSymbolIcon} from \"./icons/header-navbar/regulation-icons/self-exclusion-symbol.icon\";\nimport {GamingLimitRegulationIcon} from \"./icons/header-navbar/regulation-icons/gaming-limit.icon\";\nimport {GamingLimitRegulationSymbolIcon} from \"./icons/header-navbar/regulation-icons/gaming-limit-symbol.icon\";\nimport {SelfTestRegulationIcon} from \"./icons/header-navbar/regulation-icons/self-test.icon\";\nimport {SelfTestRegulationSymbolIcon} from \"./icons/header-navbar/regulation-icons/self-test-symbol.icon\";\nimport {MinimumGamblingAgeRegulationIcon} from \"./icons/header-navbar/regulation-icons/minimum-gambling-age.icon\";\nimport {PanicButtonRegulationIcon} from \"./icons/header-navbar/regulation-icons/panic-button.icon\";\nimport {HistoryIcon} from './icons/history.icon';\nimport {TransactionHistoryIcon} from './icons/transaction-history.icon';\nimport {SecurityIcon} from './icons/security.icon';\nimport {CompPointsIcon} from './icons/comp-points.icon';\nimport {TimerIcon} from './icons/timer.icon';\nimport {BiometricLoginIcon} from './icons/biometric-login.icon';\nimport {AboutIcon} from './icons/about.icon';\nimport {GamingHistoryIcon} from './icons/gaming-history.icon';\nimport {UploadDocumentsIcon} from './icons/upload-documents.icon';\nimport {TippingHistoryIcon} from './icons/tipping-history.icon';\nimport {ReverseWithdrawalIcon} from './icons/reverse-withdrawal.icon';\nimport {OpenExternalIcon} from './icons/open-external.icon';\nimport {WalletIcon} from './icons/wallet.icon';\nimport {RegisterUserIcon} from './icons/register-user.icon';\nimport {SaveGameIcon} from \"./icons/save-game.icon\";\nimport {PokerChipIcon} from './icons/side-menu/poker-chip.icon';\nimport {SportFootballIcon} from './icons/side-menu/sport-football.icon';\nimport {RedRecordCircleIcon} from './icons/live-arena-tile/red-record-circle.icon';\nimport {LeaveIcon} from './icons/leave.icon';\nimport {SoundOnIcon} from \"./icons/sound-on.icon\";\nimport {SoundOffIcon} from \"./icons/sound-off.icon\";\nimport {RetryArrowIcon} from \"./icons/retry-arrow.icon\";\nimport {ExploreFilledIcon} from './icons/explore-filled.icon';\nimport {ExploreOutlinedIcon} from './icons/explore-outlined.icon';\nimport {ExclusiveSideMenuIcon} from \"./icons/side-menu/exclusive-side-menu.icon\";\nimport { ItalianSpeakingIcon } from './icons/live-arena-navbar/italian-speaking.icon';\nimport {AddFundsIcon} from './icons/add-funds.icon';\n\nexport const ThemeDefaultIcons: IThemeIcons = {\n mobileAppsIcon: MobileAppsIcon,\n mobileMenuNoSearchIcon: MobileMenuNoSearchIcon,\n mobileMenuIcon: MobileMenuIcon,\n addIcon: AddIcon,\n infoIcon: InfoIcon,\n backIcon: BackIcon,\n forwardIcon: ForwardIcon,\n closeIcon: CloseIcon,\n controlCenterIcon: ControlCenterIcon,\n appHeaderPokerIcon: AppHeaderPokerIcon,\n appHeaderSportIcon: AppHeaderSportIcon,\n appHeaderCasinoIcon: AppHeaderCasinoIcon,\n appHeaderLogo888Icon: AppHeaderLogo888Icon,\n helpIcon: HelpIcon,\n twoCharsIcon: TwoCharsIcon,\n earthGlobeIcon: EarthGlobeIcon,\n italianSpeakingIcon: ItalianSpeakingIcon,\n topGamesIcon: TopGamesIcon,\n rouletteIcon: RouletteIcon,\n blackjackIcon: BlackjackIcon,\n eliteLoungeIcon: EliteLoungeIcon,\n pokerIcon: PokerIcon,\n baccaratIcon: BaccaratIcon,\n gameShowsIcon: GameShowsIcon,\n newGamesIcon: NewGamesIcon,\n linkToOfferIcon: LinkToOfferIcon,\n linkToOfferCloseIcon: LinkToOfferCloseIcon,\n sourceOfFundsIcon: SourceOfFundsIcon,\n arrowsUpDownIcon: ArrowsUpDownIcon,\n megaphoneIcon: MegaphoneIcon,\n chipIcon: ChipIcon,\n settingsIcon: SettingsIcon,\n muteIcon: MuteIcon,\n redRecordCircle: RedRecordCircleIcon,\n unmuteIcon: UnmuteIcon,\n viewersIcon: ViewersIcon,\n brokenLinkIcon: BrokenLinkIcon,\n timeSpentReminderClockIcon: TimeReminderIcon,\n tripleEightExclusiveIcon: TripleEightExclusiveIcon,\n paymentsRedirectIcon: PaymentsRedirectIcon,\n leftArrowIcon: LeftArrowIcon,\n rightArrowIcon: RightArrowIcon,\n locationIcon: LocationIcon,\n searchIcon: SearchIcon,\n sideMenuHome: HomeIcon,\n sideMenuBlog: BlogIcon,\n sideMenuPromotions: PromotionsIcon,\n sideMenuSlots: SlotsIcon,\n sideMenuJackpots: JackpotsIcon,\n sideMenuLiveCasino: LiveCasinoIcon,\n sideMenuVip: VipIcon,\n sideMenuNewGames: SideMenuNewGamesIcon,\n sideMenuCasinoGames: CasinoGamesIcon,\n sideMenuExclusive888: TripleEightCasinoIcon,\n sideMenuScratchCards: ScratchCardsIcon,\n sideMenuBlackjack: SideMenuBlackjackIcon,\n sideMenuRoulette: SideMenuRouletteIcon,\n sideMenuGettingStarted: GettingStartedIcon,\n sideMenuBanking: BankingIcon,\n sideMenuLiveChat: LiveChatIcon,\n sideMenuDownloadApp: DownloadAppIcon,\n sideMenuClub888: Club888Icon,\n sideMenuPokerCircle: PokerCircleIcon,\n sideMenuSportCircle: SportCircleIcon,\n sideMenuVideoPoker: VideoPokerIcon,\n sideMenuDeposit: DepositIcon,\n sideMenuPokerChip: PokerChipIcon,\n sideMenuSportFootball: SportFootballIcon,\n notificationIcon: NotificationIcon,\n freeplayIcon: FreePlayIcon,\n helpCenterIcon: HelpCenterIcon,\n warningSignIcon: WarningSignIcon,\n usaMapIcon: USAMapIcon,\n speedGames: SpeedGamesIcon,\n filterIcon: FilterIcon,\n tempAccountPopupIcon: TempAccountPopupIcon,\n selfExclusionRegulationIcon: SelfExclusionRegulationIcon,\n selfExclusionRegulationSymbolIcon: SelfExclusionRegulationSymbolIcon,\n gamingLimitRegulationIcon: GamingLimitRegulationIcon,\n gamingLimitRegulationSymbolIcon: GamingLimitRegulationSymbolIcon,\n selfTestRegulationIcon: SelfTestRegulationIcon,\n selfTestRegulationSymbolIcon: SelfTestRegulationSymbolIcon,\n minimumGamblingAgeRegulationIcon: MinimumGamblingAgeRegulationIcon,\n panicButtonRegulationIcon: PanicButtonRegulationIcon,\n historyIcon: HistoryIcon,\n openBetsIcon: GamingHistoryIcon,\n transactionHistoryIcon: TransactionHistoryIcon,\n securityIcon: SecurityIcon,\n compPointsIcon: CompPointsIcon,\n timerIcon: TimerIcon,\n biometricLoginIcon: BiometricLoginIcon,\n aboutIcon: AboutIcon,\n gamingHistoryIcon: GamingHistoryIcon,\n uploadDocumentsIcon: UploadDocumentsIcon,\n tippingHistoryIcon: TippingHistoryIcon,\n reverseWithdrawalIcon: ReverseWithdrawalIcon,\n openExternal: OpenExternalIcon,\n wallet: WalletIcon,\n registerUser: RegisterUserIcon,\n saveGameIcon: SaveGameIcon,\n leaveIcon: LeaveIcon,\n soundOnIcon: SoundOnIcon,\n soundOffIcon: SoundOffIcon,\n retryArrowIcon: RetryArrowIcon,\n exploreFilledIcon: ExploreFilledIcon,\n exploreOutlinedIcon: ExploreOutlinedIcon,\n exclusiveSideMenuIcon: ExclusiveSideMenuIcon,\n addFundsIcon: AddFundsIcon\n};\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface IInfoIconProps extends ISvgIconProps {\n\n}\n\nexport class InfoIcon extends React.Component<IInfoIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props}>\n <g>\n <path\n fill=\"currentColor\"\n d=\"M14.42,10.69a19.18,19.18,0,0,1-.78,4.16,20.1,20.1,0,0,0-.78,3.86c0,.6.09.91.26.91a6.3,6.3,0,0,0,1.33-.55l.34-.17.49,1-.69.57a10.55,10.55,0,0,1-1.61.94,5,5,0,0,1-2.19.59,2.06,2.06,0,0,1-1.58-.62,2.33,2.33,0,0,1-.58-1.67A17.49,17.49,0,0,1,9.35,16a18,18,0,0,0,.72-3.5,3.88,3.88,0,0,0-.75-2.27l-.26-.35,0-.37A20,20,0,0,1,14,9.05,2.59,2.59,0,0,1,14.42,10.69Zm-3.28-4.8a2,2,0,0,1-.58-1.51,2.19,2.19,0,0,1,.79-1.67A2.65,2.65,0,0,1,13.18,2a2.15,2.15,0,0,1,1.61.58,2,2,0,0,1,.58,1.51,2.16,2.16,0,0,1-.82,1.66,2.72,2.72,0,0,1-1.83.72A2.14,2.14,0,0,1,11.14,5.89Z\"\n />\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../basic-ui-components/icon/svg-icon/svg.icon';\n\n\nexport interface ISearchIconProps extends ISvgIconProps {\n\n}\n\nexport class SearchIcon extends React.Component<ISearchIconProps, {}> {\n render() {\n return (\n <SvgIcon {...this.props} flipOnRTL viewBox=\"0 0 16 16\">\n <g fill=\"none\">\n <path d=\"M6.44299 11.886C3.4369 11.886 0.999987 9.44909 0.999987 6.443C0.999987 3.43691 3.4369 1 6.44299 1C9.44907 1 11.886 3.43691 11.886 6.443C11.886 9.44909 9.44907 11.886 6.44299 11.886Z\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M10.2915 10.292L13.7825 14.049\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"square\" strokeLinejoin=\"round\"/>\n </g>\n </SvgIcon>\n );\n }\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport class SportFootballIcon extends React.Component<ISvgIconProps> {\n render() {\n return (\n <SvgIcon {...this.props} viewBox=\"0 0 19 20\">\n <mask id=\"path-1-outside-1_11018_281863\" maskUnits=\"userSpaceOnUse\" x=\"-0.709961\" y=\"0\" width=\"20\" height=\"20\" fill=\"none\">\n <rect fill=\"currentColor\" x=\"-0.709961\" width=\"20\" height=\"20\"/>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M17.5077 13.7384L17.5325 13.6844C17.6264 13.4714 17.7134 13.2542 17.7935 13.0329V12.9748C17.9535 12.5126 18.0755 12.0379 18.158 11.5557C18.4551 9.83734 18.2484 8.06956 17.5629 6.46651C16.8774 4.86347 15.7425 3.49394 14.2958 2.52385C12.8491 1.55375 11.1526 1.02472 9.41185 1.00085C7.67109 0.976967 5.96077 1.45927 4.48808 2.38931L4.38452 2.4557C4.22711 2.55944 4.0697 2.66733 3.91643 2.77937L3.7963 2.87066C3.66927 2.96748 3.54638 3.06707 3.42763 3.16943L3.26608 3.31051C3.13076 3.43223 2.99268 3.5581 2.85184 3.68812L2.78141 3.77941C2.66267 3.9039 2.54806 4.03115 2.4376 4.16117L2.37132 4.23587C2.23876 4.39355 2.11449 4.55953 1.99022 4.72966L1.95293 4.77946C1.26162 5.75136 0.770725 6.85161 0.508977 8.01584C0.247229 9.18007 0.21988 10.3849 0.428531 11.5598V11.5847C0.507881 12.034 0.621438 12.4765 0.768208 12.9084V12.9582C0.916102 13.3862 1.09612 13.8024 1.30672 14.2031C2.01766 15.5543 3.05887 16.703 4.33309 17.5418C5.60731 18.3807 7.07298 18.8824 8.5932 19H8.71747C8.90803 19 9.09858 19 9.28913 19C9.47968 19 9.67023 19 9.86078 19H9.88977C11.5155 18.8937 13.0821 18.3484 14.4234 17.422C15.7646 16.4956 16.8304 15.2227 17.5077 13.7384ZM10.0265 18.3693C9.89806 18.3693 9.7655 18.3693 9.63709 18.3693C9.50867 18.3693 9.37612 18.3693 9.2477 18.3693C9.04887 18.3693 8.83346 18.3693 8.65948 18.3402C8.3271 18.3159 7.99649 18.2716 7.66945 18.2074L7.802 18.1286C7.86308 18.0927 7.91637 18.045 7.95874 17.9882C8.0011 17.9314 8.03167 17.8666 8.04866 17.7978C8.06565 17.729 8.0687 17.6574 8.05765 17.5874C8.04659 17.5173 8.02164 17.4502 7.98427 17.39L6.35631 14.7882C6.28669 14.6777 6.17914 14.5965 6.05391 14.56L2.8974 13.6803C2.82657 13.6606 2.75244 13.6559 2.67971 13.6665C2.60698 13.6771 2.53724 13.7027 2.47492 13.7417C2.4126 13.7808 2.35905 13.8323 2.31769 13.8932C2.27632 13.954 2.24803 14.0228 2.23462 14.0952L2.16834 14.4189C2.1062 14.3193 2.03993 14.2197 1.98193 14.1118L1.87837 13.9209C1.78724 13.7494 1.70301 13.5738 1.62569 13.3939L1.54698 13.2155C1.46413 13.0163 1.38957 12.8006 1.32329 12.6055L1.26115 12.4064C1.19902 12.1989 1.14517 11.9914 1.0996 11.7798C1.0996 11.7092 1.07475 11.6428 1.05818 11.5723C1.02089 11.3773 0.991898 11.1781 0.967044 10.9789C0.967044 10.9499 0.967044 10.925 0.967044 10.8959L1.22801 11.12C1.33729 11.2129 1.47861 11.2591 1.62154 11.2486C1.69224 11.2422 1.76094 11.2216 1.82356 11.1881C1.88618 11.1546 1.94144 11.1089 1.98607 11.0536L3.91643 8.65515C3.99996 8.554 4.0428 8.42526 4.03656 8.29414L3.87501 5.02428C3.87108 4.95096 3.85214 4.87923 3.81936 4.81356C3.78658 4.74788 3.74066 4.68966 3.68446 4.64252C3.62768 4.59451 3.56147 4.55899 3.4901 4.53826C3.41874 4.51752 3.34383 4.51205 3.27022 4.52219L2.91397 4.56783L3.08795 4.3894C3.21637 4.24831 3.34478 4.10723 3.47734 3.97444C3.60989 3.84166 3.6596 3.80431 3.75488 3.72132C3.85015 3.63833 4.00757 3.50139 4.13598 3.39766L4.43423 3.17358C4.5806 3.06846 4.73111 2.96748 4.88576 2.87066L5.14673 2.71298C5.34832 2.59679 5.55544 2.4889 5.76809 2.38931L5.8675 2.33952L5.63553 2.84161C5.60469 2.90823 5.58798 2.98053 5.58645 3.05394C5.58491 3.12735 5.59859 3.20028 5.62662 3.26813C5.65465 3.33598 5.69641 3.39727 5.74928 3.44813C5.80215 3.499 5.86497 3.53833 5.93378 3.56364L9.00744 4.70062C9.13023 4.74715 9.26576 4.74715 9.38854 4.70062L12.2385 3.57609C12.3042 3.55052 12.364 3.512 12.4146 3.46282C12.4651 3.41363 12.5052 3.35479 12.5326 3.28977C12.5604 3.22414 12.5748 3.15358 12.5748 3.08229C12.5748 3.011 12.5604 2.94044 12.5326 2.87481L12.2012 2.11959H12.2427C12.7145 2.29811 13.1692 2.51894 13.6014 2.77937L13.7091 2.84576C14.1198 3.10102 14.5078 3.39118 14.8689 3.71302L15.0264 3.85411C15.1341 3.9537 15.2376 4.05329 15.337 4.15702L15.453 4.28566C15.54 4.3811 15.627 4.47239 15.7098 4.57198L15.0222 4.48484C14.9486 4.47444 14.8736 4.47979 14.8022 4.50053C14.7308 4.52127 14.6646 4.55694 14.608 4.60518C14.5525 4.65269 14.5074 4.71108 14.4753 4.77673C14.4433 4.84239 14.425 4.91393 14.4216 4.98694L14.2724 8.29414C14.265 8.42472 14.3064 8.5534 14.3884 8.65515L16.3188 11.037C16.3634 11.0923 16.4187 11.138 16.4813 11.1715C16.5439 11.2051 16.6126 11.2256 16.6833 11.232C16.8254 11.2415 16.9659 11.197 17.0768 11.1075L17.6568 10.6096C17.6568 10.6428 17.6568 10.676 17.6568 10.7092C17.6568 10.8129 17.6568 10.9167 17.6236 11.0204C17.6029 11.203 17.5739 11.3856 17.5408 11.564C17.5408 11.647 17.5077 11.7258 17.4911 11.8088C17.4497 12.0025 17.3999 12.1947 17.342 12.3856L17.2715 12.6097C17.2053 12.813 17.1348 13.0246 17.052 13.2072L16.9733 13.3815C16.8987 13.5475 16.82 13.7135 16.7372 13.8753L16.5963 14.1367C16.5259 14.2571 16.4555 14.3774 16.3809 14.4936C16.3064 14.6098 16.2939 14.6347 16.2484 14.7052L16.1199 14.0869C16.1056 14.0161 16.0769 13.9489 16.0356 13.8897C15.9942 13.8304 15.9412 13.7803 15.8797 13.7425C15.818 13.7056 15.7496 13.6815 15.6784 13.6715C15.6073 13.6615 15.5349 13.6659 15.4654 13.6844L12.3172 14.6015C12.192 14.638 12.0844 14.7192 12.0148 14.8297L10.3786 17.4273C10.3405 17.4865 10.3146 17.5528 10.3023 17.6221C10.29 17.6915 10.2916 17.7626 10.307 17.8314C10.3224 17.9001 10.3514 17.9651 10.3921 18.0225C10.4328 18.08 10.4846 18.1287 10.5443 18.1659L10.7307 18.2738H10.6603C10.4504 18.3181 10.2391 18.3499 10.0265 18.3693ZM17.6775 9.77553L16.7579 10.5764L14.9104 8.29414L15.0595 5.14877L16.2649 5.3023C17.1527 6.62758 17.6429 8.17989 17.6775 9.77553ZM11.6213 18.0746L10.9502 17.6597L12.5078 15.17L15.5152 14.3068L15.7347 15.3733C14.6626 16.6629 13.2301 17.6022 11.6213 18.0705V18.0746ZM11.4225 1.89136L11.9113 3.04494L9.17728 4.11968L6.23204 3.02419L6.69598 2.02C8.22403 1.51129 9.86763 1.46367 11.4225 1.88307V1.89136ZM2.38374 5.25666L3.25779 5.14462L3.40692 8.28999L1.55941 10.5722L0.913192 10.0245C0.913192 10.0245 0.913192 10.0245 0.913192 10.0038C0.91116 8.30857 1.42406 6.65289 2.38374 5.25666ZM2.67371 15.116L2.83941 14.2861L5.85922 15.1658L7.41676 17.6555L6.81611 18.029C5.16945 17.5072 3.72312 16.4901 2.67371 15.116ZM11.8243 13.091L13.067 9.49336C13.1044 9.38344 13.1048 9.26427 13.0681 9.1541C13.0315 9.04394 12.9598 8.94884 12.864 8.88337L9.62052 6.65921C9.53236 6.5998 9.42852 6.56807 9.32227 6.56807C9.21601 6.56807 9.11217 6.5998 9.02401 6.65921L5.77637 8.88337C5.68149 8.94861 5.61037 9.043 5.57375 9.15229C5.53714 9.26158 5.53701 9.37984 5.57339 9.48921L6.81611 13.0869C6.85228 13.1912 6.91998 13.2816 7.00981 13.3455C7.09964 13.4095 7.20713 13.4438 7.31734 13.4437H11.3272C11.4338 13.4396 11.5367 13.4033 11.6225 13.3397C11.7082 13.276 11.7728 13.1879 11.8077 13.0869L11.8243 13.091ZM7.37948 12.8255L6.18233 9.35227L9.30155 7.2028L12.4374 9.35227L11.2443 12.8255H7.37948Z\"/>\n </mask>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M17.5077 13.7384L17.5325 13.6844C17.6264 13.4714 17.7134 13.2542 17.7935 13.0329V12.9748C17.9535 12.5126 18.0755 12.0379 18.158 11.5557C18.4551 9.83734 18.2484 8.06956 17.5629 6.46651C16.8774 4.86347 15.7425 3.49394 14.2958 2.52385C12.8491 1.55375 11.1526 1.02472 9.41185 1.00085C7.67109 0.976967 5.96077 1.45927 4.48808 2.38931L4.38452 2.4557C4.22711 2.55944 4.0697 2.66733 3.91643 2.77937L3.7963 2.87066C3.66927 2.96748 3.54638 3.06707 3.42763 3.16943L3.26608 3.31051C3.13076 3.43223 2.99268 3.5581 2.85184 3.68812L2.78141 3.77941C2.66267 3.9039 2.54806 4.03115 2.4376 4.16117L2.37132 4.23587C2.23876 4.39355 2.11449 4.55953 1.99022 4.72966L1.95293 4.77946C1.26162 5.75136 0.770725 6.85161 0.508977 8.01584C0.247229 9.18007 0.21988 10.3849 0.428531 11.5598V11.5847C0.507881 12.034 0.621438 12.4765 0.768208 12.9084V12.9582C0.916102 13.3862 1.09612 13.8024 1.30672 14.2031C2.01766 15.5543 3.05887 16.703 4.33309 17.5418C5.60731 18.3807 7.07298 18.8824 8.5932 19H8.71747C8.90803 19 9.09858 19 9.28913 19C9.47968 19 9.67023 19 9.86078 19H9.88977C11.5155 18.8937 13.0821 18.3484 14.4234 17.422C15.7646 16.4956 16.8304 15.2227 17.5077 13.7384ZM10.0265 18.3693C9.89806 18.3693 9.7655 18.3693 9.63709 18.3693C9.50867 18.3693 9.37612 18.3693 9.2477 18.3693C9.04887 18.3693 8.83346 18.3693 8.65948 18.3402C8.3271 18.3159 7.99649 18.2716 7.66945 18.2074L7.802 18.1286C7.86308 18.0927 7.91637 18.045 7.95874 17.9882C8.0011 17.9314 8.03167 17.8666 8.04866 17.7978C8.06565 17.729 8.0687 17.6574 8.05765 17.5874C8.04659 17.5173 8.02164 17.4502 7.98427 17.39L6.35631 14.7882C6.28669 14.6777 6.17914 14.5965 6.05391 14.56L2.8974 13.6803C2.82657 13.6606 2.75244 13.6559 2.67971 13.6665C2.60698 13.6771 2.53724 13.7027 2.47492 13.7417C2.4126 13.7808 2.35905 13.8323 2.31769 13.8932C2.27632 13.954 2.24803 14.0228 2.23462 14.0952L2.16834 14.4189C2.1062 14.3193 2.03993 14.2197 1.98193 14.1118L1.87837 13.9209C1.78724 13.7494 1.70301 13.5738 1.62569 13.3939L1.54698 13.2155C1.46413 13.0163 1.38957 12.8006 1.32329 12.6055L1.26115 12.4064C1.19902 12.1989 1.14517 11.9914 1.0996 11.7798C1.0996 11.7092 1.07475 11.6428 1.05818 11.5723C1.02089 11.3773 0.991898 11.1781 0.967044 10.9789C0.967044 10.9499 0.967044 10.925 0.967044 10.8959L1.22801 11.12C1.33729 11.2129 1.47861 11.2591 1.62154 11.2486C1.69224 11.2422 1.76094 11.2216 1.82356 11.1881C1.88618 11.1546 1.94144 11.1089 1.98607 11.0536L3.91643 8.65515C3.99996 8.554 4.0428 8.42526 4.03656 8.29414L3.87501 5.02428C3.87108 4.95096 3.85214 4.87923 3.81936 4.81356C3.78658 4.74788 3.74066 4.68966 3.68446 4.64252C3.62768 4.59451 3.56147 4.55899 3.4901 4.53826C3.41874 4.51752 3.34383 4.51205 3.27022 4.52219L2.91397 4.56783L3.08795 4.3894C3.21637 4.24831 3.34478 4.10723 3.47734 3.97444C3.60989 3.84166 3.6596 3.80431 3.75488 3.72132C3.85015 3.63833 4.00757 3.50139 4.13598 3.39766L4.43423 3.17358C4.5806 3.06846 4.73111 2.96748 4.88576 2.87066L5.14673 2.71298C5.34832 2.59679 5.55544 2.4889 5.76809 2.38931L5.8675 2.33952L5.63553 2.84161C5.60469 2.90823 5.58798 2.98053 5.58645 3.05394C5.58491 3.12735 5.59859 3.20028 5.62662 3.26813C5.65465 3.33598 5.69641 3.39727 5.74928 3.44813C5.80215 3.499 5.86497 3.53833 5.93378 3.56364L9.00744 4.70062C9.13023 4.74715 9.26576 4.74715 9.38854 4.70062L12.2385 3.57609C12.3042 3.55052 12.364 3.512 12.4146 3.46282C12.4651 3.41363 12.5052 3.35479 12.5326 3.28977C12.5604 3.22414 12.5748 3.15358 12.5748 3.08229C12.5748 3.011 12.5604 2.94044 12.5326 2.87481L12.2012 2.11959H12.2427C12.7145 2.29811 13.1692 2.51894 13.6014 2.77937L13.7091 2.84576C14.1198 3.10102 14.5078 3.39118 14.8689 3.71302L15.0264 3.85411C15.1341 3.9537 15.2376 4.05329 15.337 4.15702L15.453 4.28566C15.54 4.3811 15.627 4.47239 15.7098 4.57198L15.0222 4.48484C14.9486 4.47444 14.8736 4.47979 14.8022 4.50053C14.7308 4.52127 14.6646 4.55694 14.608 4.60518C14.5525 4.65269 14.5074 4.71108 14.4753 4.77673C14.4433 4.84239 14.425 4.91393 14.4216 4.98694L14.2724 8.29414C14.265 8.42472 14.3064 8.5534 14.3884 8.65515L16.3188 11.037C16.3634 11.0923 16.4187 11.138 16.4813 11.1715C16.5439 11.2051 16.6126 11.2256 16.6833 11.232C16.8254 11.2415 16.9659 11.197 17.0768 11.1075L17.6568 10.6096C17.6568 10.6428 17.6568 10.676 17.6568 10.7092C17.6568 10.8129 17.6568 10.9167 17.6236 11.0204C17.6029 11.203 17.5739 11.3856 17.5408 11.564C17.5408 11.647 17.5077 11.7258 17.4911 11.8088C17.4497 12.0025 17.3999 12.1947 17.342 12.3856L17.2715 12.6097C17.2053 12.813 17.1348 13.0246 17.052 13.2072L16.9733 13.3815C16.8987 13.5475 16.82 13.7135 16.7372 13.8753L16.5963 14.1367C16.5259 14.2571 16.4555 14.3774 16.3809 14.4936C16.3064 14.6098 16.2939 14.6347 16.2484 14.7052L16.1199 14.0869C16.1056 14.0161 16.0769 13.9489 16.0356 13.8897C15.9942 13.8304 15.9412 13.7803 15.8797 13.7425C15.818 13.7056 15.7496 13.6815 15.6784 13.6715C15.6073 13.6615 15.5349 13.6659 15.4654 13.6844L12.3172 14.6015C12.192 14.638 12.0844 14.7192 12.0148 14.8297L10.3786 17.4273C10.3405 17.4865 10.3146 17.5528 10.3023 17.6221C10.29 17.6915 10.2916 17.7626 10.307 17.8314C10.3224 17.9001 10.3514 17.9651 10.3921 18.0225C10.4328 18.08 10.4846 18.1287 10.5443 18.1659L10.7307 18.2738H10.6603C10.4504 18.3181 10.2391 18.3499 10.0265 18.3693ZM17.6775 9.77553L16.7579 10.5764L14.9104 8.29414L15.0595 5.14877L16.2649 5.3023C17.1527 6.62758 17.6429 8.17989 17.6775 9.77553ZM11.6213 18.0746L10.9502 17.6597L12.5078 15.17L15.5152 14.3068L15.7347 15.3733C14.6626 16.6629 13.2301 17.6022 11.6213 18.0705V18.0746ZM11.4225 1.89136L11.9113 3.04494L9.17728 4.11968L6.23204 3.02419L6.69598 2.02C8.22403 1.51129 9.86763 1.46367 11.4225 1.88307V1.89136ZM2.38374 5.25666L3.25779 5.14462L3.40692 8.28999L1.55941 10.5722L0.913192 10.0245C0.913192 10.0245 0.913192 10.0245 0.913192 10.0038C0.91116 8.30857 1.42406 6.65289 2.38374 5.25666ZM2.67371 15.116L2.83941 14.2861L5.85922 15.1658L7.41676 17.6555L6.81611 18.029C5.16945 17.5072 3.72312 16.4901 2.67371 15.116ZM11.8243 13.091L13.067 9.49336C13.1044 9.38344 13.1048 9.26427 13.0681 9.1541C13.0315 9.04394 12.9598 8.94884 12.864 8.88337L9.62052 6.65921C9.53236 6.5998 9.42852 6.56807 9.32227 6.56807C9.21601 6.56807 9.11217 6.5998 9.02401 6.65921L5.77637 8.88337C5.68149 8.94861 5.61037 9.043 5.57375 9.15229C5.53714 9.26158 5.53701 9.37984 5.57339 9.48921L6.81611 13.0869C6.85228 13.1912 6.91998 13.2816 7.00981 13.3455C7.09964 13.4095 7.20713 13.4438 7.31734 13.4437H11.3272C11.4338 13.4396 11.5367 13.4033 11.6225 13.3397C11.7082 13.276 11.7728 13.1879 11.8077 13.0869L11.8243 13.091ZM7.37948 12.8255L6.18233 9.35227L9.30155 7.2028L12.4374 9.35227L11.2443 12.8255H7.37948Z\" fill=\"currentColor\"/>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M17.5077 13.7384L17.5325 13.6844C17.6264 13.4714 17.7134 13.2542 17.7935 13.0329V12.9748C17.9535 12.5126 18.0755 12.0379 18.158 11.5557C18.4551 9.83734 18.2484 8.06956 17.5629 6.46651C16.8774 4.86347 15.7425 3.49394 14.2958 2.52385C12.8491 1.55375 11.1526 1.02472 9.41185 1.00085C7.67109 0.976967 5.96077 1.45927 4.48808 2.38931L4.38452 2.4557C4.22711 2.55944 4.0697 2.66733 3.91643 2.77937L3.7963 2.87066C3.66927 2.96748 3.54638 3.06707 3.42763 3.16943L3.26608 3.31051C3.13076 3.43223 2.99268 3.5581 2.85184 3.68812L2.78141 3.77941C2.66267 3.9039 2.54806 4.03115 2.4376 4.16117L2.37132 4.23587C2.23876 4.39355 2.11449 4.55953 1.99022 4.72966L1.95293 4.77946C1.26162 5.75136 0.770725 6.85161 0.508977 8.01584C0.247229 9.18007 0.21988 10.3849 0.428531 11.5598V11.5847C0.507881 12.034 0.621438 12.4765 0.768208 12.9084V12.9582C0.916102 13.3862 1.09612 13.8024 1.30672 14.2031C2.01766 15.5543 3.05887 16.703 4.33309 17.5418C5.60731 18.3807 7.07298 18.8824 8.5932 19H8.71747C8.90803 19 9.09858 19 9.28913 19C9.47968 19 9.67023 19 9.86078 19H9.88977C11.5155 18.8937 13.0821 18.3484 14.4234 17.422C15.7646 16.4956 16.8304 15.2227 17.5077 13.7384ZM10.0265 18.3693C9.89806 18.3693 9.7655 18.3693 9.63709 18.3693C9.50867 18.3693 9.37612 18.3693 9.2477 18.3693C9.04887 18.3693 8.83346 18.3693 8.65948 18.3402C8.3271 18.3159 7.99649 18.2716 7.66945 18.2074L7.802 18.1286C7.86308 18.0927 7.91637 18.045 7.95874 17.9882C8.0011 17.9314 8.03167 17.8666 8.04866 17.7978C8.06565 17.729 8.0687 17.6574 8.05765 17.5874C8.04659 17.5173 8.02164 17.4502 7.98427 17.39L6.35631 14.7882C6.28669 14.6777 6.17914 14.5965 6.05391 14.56L2.8974 13.6803C2.82657 13.6606 2.75244 13.6559 2.67971 13.6665C2.60698 13.6771 2.53724 13.7027 2.47492 13.7417C2.4126 13.7808 2.35905 13.8323 2.31769 13.8932C2.27632 13.954 2.24803 14.0228 2.23462 14.0952L2.16834 14.4189C2.1062 14.3193 2.03993 14.2197 1.98193 14.1118L1.87837 13.9209C1.78724 13.7494 1.70301 13.5738 1.62569 13.3939L1.54698 13.2155C1.46413 13.0163 1.38957 12.8006 1.32329 12.6055L1.26115 12.4064C1.19902 12.1989 1.14517 11.9914 1.0996 11.7798C1.0996 11.7092 1.07475 11.6428 1.05818 11.5723C1.02089 11.3773 0.991898 11.1781 0.967044 10.9789C0.967044 10.9499 0.967044 10.925 0.967044 10.8959L1.22801 11.12C1.33729 11.2129 1.47861 11.2591 1.62154 11.2486C1.69224 11.2422 1.76094 11.2216 1.82356 11.1881C1.88618 11.1546 1.94144 11.1089 1.98607 11.0536L3.91643 8.65515C3.99996 8.554 4.0428 8.42526 4.03656 8.29414L3.87501 5.02428C3.87108 4.95096 3.85214 4.87923 3.81936 4.81356C3.78658 4.74788 3.74066 4.68966 3.68446 4.64252C3.62768 4.59451 3.56147 4.55899 3.4901 4.53826C3.41874 4.51752 3.34383 4.51205 3.27022 4.52219L2.91397 4.56783L3.08795 4.3894C3.21637 4.24831 3.34478 4.10723 3.47734 3.97444C3.60989 3.84166 3.6596 3.80431 3.75488 3.72132C3.85015 3.63833 4.00757 3.50139 4.13598 3.39766L4.43423 3.17358C4.5806 3.06846 4.73111 2.96748 4.88576 2.87066L5.14673 2.71298C5.34832 2.59679 5.55544 2.4889 5.76809 2.38931L5.8675 2.33952L5.63553 2.84161C5.60469 2.90823 5.58798 2.98053 5.58645 3.05394C5.58491 3.12735 5.59859 3.20028 5.62662 3.26813C5.65465 3.33598 5.69641 3.39727 5.74928 3.44813C5.80215 3.499 5.86497 3.53833 5.93378 3.56364L9.00744 4.70062C9.13023 4.74715 9.26576 4.74715 9.38854 4.70062L12.2385 3.57609C12.3042 3.55052 12.364 3.512 12.4146 3.46282C12.4651 3.41363 12.5052 3.35479 12.5326 3.28977C12.5604 3.22414 12.5748 3.15358 12.5748 3.08229C12.5748 3.011 12.5604 2.94044 12.5326 2.87481L12.2012 2.11959H12.2427C12.7145 2.29811 13.1692 2.51894 13.6014 2.77937L13.7091 2.84576C14.1198 3.10102 14.5078 3.39118 14.8689 3.71302L15.0264 3.85411C15.1341 3.9537 15.2376 4.05329 15.337 4.15702L15.453 4.28566C15.54 4.3811 15.627 4.47239 15.7098 4.57198L15.0222 4.48484C14.9486 4.47444 14.8736 4.47979 14.8022 4.50053C14.7308 4.52127 14.6646 4.55694 14.608 4.60518C14.5525 4.65269 14.5074 4.71108 14.4753 4.77673C14.4433 4.84239 14.425 4.91393 14.4216 4.98694L14.2724 8.29414C14.265 8.42472 14.3064 8.5534 14.3884 8.65515L16.3188 11.037C16.3634 11.0923 16.4187 11.138 16.4813 11.1715C16.5439 11.2051 16.6126 11.2256 16.6833 11.232C16.8254 11.2415 16.9659 11.197 17.0768 11.1075L17.6568 10.6096C17.6568 10.6428 17.6568 10.676 17.6568 10.7092C17.6568 10.8129 17.6568 10.9167 17.6236 11.0204C17.6029 11.203 17.5739 11.3856 17.5408 11.564C17.5408 11.647 17.5077 11.7258 17.4911 11.8088C17.4497 12.0025 17.3999 12.1947 17.342 12.3856L17.2715 12.6097C17.2053 12.813 17.1348 13.0246 17.052 13.2072L16.9733 13.3815C16.8987 13.5475 16.82 13.7135 16.7372 13.8753L16.5963 14.1367C16.5259 14.2571 16.4555 14.3774 16.3809 14.4936C16.3064 14.6098 16.2939 14.6347 16.2484 14.7052L16.1199 14.0869C16.1056 14.0161 16.0769 13.9489 16.0356 13.8897C15.9942 13.8304 15.9412 13.7803 15.8797 13.7425C15.818 13.7056 15.7496 13.6815 15.6784 13.6715C15.6073 13.6615 15.5349 13.6659 15.4654 13.6844L12.3172 14.6015C12.192 14.638 12.0844 14.7192 12.0148 14.8297L10.3786 17.4273C10.3405 17.4865 10.3146 17.5528 10.3023 17.6221C10.29 17.6915 10.2916 17.7626 10.307 17.8314C10.3224 17.9001 10.3514 17.9651 10.3921 18.0225C10.4328 18.08 10.4846 18.1287 10.5443 18.1659L10.7307 18.2738H10.6603C10.4504 18.3181 10.2391 18.3499 10.0265 18.3693ZM17.6775 9.77553L16.7579 10.5764L14.9104 8.29414L15.0595 5.14877L16.2649 5.3023C17.1527 6.62758 17.6429 8.17989 17.6775 9.77553ZM11.6213 18.0746L10.9502 17.6597L12.5078 15.17L15.5152 14.3068L15.7347 15.3733C14.6626 16.6629 13.2301 17.6022 11.6213 18.0705V18.0746ZM11.4225 1.89136L11.9113 3.04494L9.17728 4.11968L6.23204 3.02419L6.69598 2.02C8.22403 1.51129 9.86763 1.46367 11.4225 1.88307V1.89136ZM2.38374 5.25666L3.25779 5.14462L3.40692 8.28999L1.55941 10.5722L0.913192 10.0245C0.913192 10.0245 0.913192 10.0245 0.913192 10.0038C0.91116 8.30857 1.42406 6.65289 2.38374 5.25666ZM2.67371 15.116L2.83941 14.2861L5.85922 15.1658L7.41676 17.6555L6.81611 18.029C5.16945 17.5072 3.72312 16.4901 2.67371 15.116ZM11.8243 13.091L13.067 9.49336C13.1044 9.38344 13.1048 9.26427 13.0681 9.1541C13.0315 9.04394 12.9598 8.94884 12.864 8.88337L9.62052 6.65921C9.53236 6.5998 9.42852 6.56807 9.32227 6.56807C9.21601 6.56807 9.11217 6.5998 9.02401 6.65921L5.77637 8.88337C5.68149 8.94861 5.61037 9.043 5.57375 9.15229C5.53714 9.26158 5.53701 9.37984 5.57339 9.48921L6.81611 13.0869C6.85228 13.1912 6.91998 13.2816 7.00981 13.3455C7.09964 13.4095 7.20713 13.4438 7.31734 13.4437H11.3272C11.4338 13.4396 11.5367 13.4033 11.6225 13.3397C11.7082 13.276 11.7728 13.1879 11.8077 13.0869L11.8243 13.091ZM7.37948 12.8255L6.18233 9.35227L9.30155 7.2028L12.4374 9.35227L11.2443 12.8255H7.37948Z\" stroke=\"currentColor\" strokeWidth=\"0.4\" strokeLinejoin=\"round\" mask=\"url(#path-1-outside-1_11018_281863)\"/>\n </SvgIcon>\n );\n }\n}\n","import {grayColors} from \"../../architecture/gray-colors\";\n\nexport const baseColors = {\n base01: \"#0ea79b\", //brandTeal\n base01Contrast: \"#19322f\", //blackTeal\n base01Dark: \"#8cd1ba\", //softTeal\n base01Light: \"#c3e3c7\", //lightGreen\n\n base02: \"#fcf6d5\", //brandYellow\n base02Contrast: \"#4c1723\", //blackRed\n base02Dark: \"#a4867c\", //tan\n base02Light: \"#eadfc3\", //sepia\n\n base03: \"#bc3554\", //pink\n base03Contrast: \"#fcf6d5\", //brandYellow,\n base03Dark: \"#b01619\", //brick\n base03Light: \"#ff014f\", //red\n\n base04: \"#ffd683\", //peach\n base04Contrast: \"#4c1723\", //blackRed\n base04Dark: \"#ffbe0b\", //papaya\n base04Light: \"#ffff00\", //yellow\n\n\n base05: \"#7aec37\", //inchWorm\n base05Contrast: \"#000000\",\n base05Dark: \"#135823\",\n base05Light: \"#d5ec37\", //pear //#87ee4b\n\n logoBackground: \"#DAEBCD\",\n\n ...grayColors\n}","import {grayColors} from \"../../architecture/gray-colors\";\n\nexport const baseColors = {\n base01: \"#7ff800\", //brandGreen\n base01Contrast: \"#000000\",\n base01Dark: \"#7aec37\", //inchWorm\n base01Light: \"#d2f800\", //limeGreen\n\n base02: \"#fce403\", //turbo\n base02Contrast: \"#000000\",\n base02Dark: \"#ffff00\", //yellow\n base02Light: \"#d5ec37\", //pear\n\n base03: \"#ff014f\", //red\n base03Contrast: \"#ffffff\",\n base03Dark: \"#e00146\",\n base03Light: \"#ff1a61\",\n\n explorePurple: \"#9747FF\",\n\n ...grayColors\n}\n","import {grayColors} from \"../../architecture/gray-colors\";\n\nexport const baseColors = {\n base01: \"#d62a8c\",\n base01Contrast: \"#ffffff\",\n base01Dark: \"#bc257b\",\n base01Light: \"#da3f98\",\n\n base02: \"#310a53\",\n base02Contrast: \"#ffffff\",\n base02Dark: \"#462365\",\n base02Light: \"#6d5c80\",\n\n base03: \"#ff014f\",\n base03Contrast: \"#ffffff\",\n base03Dark: \"#e00146\",\n base03Light: \"#ff1a61\",\n\n\n base04: \"#d5ec37\",\n base04Contrast: \"#180529\",\n base04Dark: \"#7aec37\",\n base04Light: \"#ffff00\",\n\n ...grayColors\n}","import {grayColors} from \"../../architecture/gray-colors\";\n\nexport const baseColors = {\n base01: \"#015536\",\n base01Contrast: \"#262627\",\n base01Dark: \"#05372C\",\n base01Light: \"#41B169\",\n\n base02: \"#047C4C\",\n base02Contrast: \"\",\n base02Dark: \"\",\n base02Light: \"\",\n\n base03: \"#FFFFFF\",\n base03Contrast: \"\",\n base03Dark: \"\",\n base03Light: \"\",\n\n base04: \"linear-gradient(90deg, #F1C141 0%, #F9F19A 48.96%, #F1C141 100%)\",\n base05: \"#F12727\",\n gold: \"#F1C141\",\n yellow: \"#F9F19A\",\n warmWhite: \"#FFFFFFCC\",\n ...grayColors\n}\n","import * as React from \"react\";\nimport {ISvgIconProps, SvgIcon} from \"../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport class AppHeaderCasinoIcon extends React.Component<ISvgIconProps, {}> {\n render() {\n return <SvgIcon {...this.props} viewBox=\"0 0 30 30\">\n <path opacity=\"0.05\" d=\"M0 6.46783C0 4.58281 1.52835 3.05469 3.41338 3.05469C5.38455 3.05469 7.21759 3.05469 8.97646 3.05469C9.29653 3.05469 9.61414 4.76126 9.92969 4.76126C10.3739 4.76126 10.814 3.05469 11.2511 3.05469C13.6007 3.05469 15.8628 3.05469 18.2044 3.05469C18.6705 3.05469 19.1396 4.76126 19.6133 4.76126C20.2382 4.76126 20.8709 3.05469 21.5143 3.05469C23.0586 3.05469 24.6652 3.05469 26.3757 3.05469C28.2607 3.05469 29.7891 4.58281 29.7891 6.46783V23.5336C29.7891 25.4186 28.2609 26.9467 26.3759 26.9467H22.1101C21.7186 26.9467 21.3328 26.8531 20.9848 26.6737C20.2787 26.3096 19.4401 26.3096 18.734 26.6737C18.386 26.8531 18.0001 26.9467 17.6086 26.9467H11.199C10.9288 26.9467 10.6823 26.7923 10.5644 26.5491C10.3073 26.019 9.55206 26.019 9.29501 26.5491C9.17709 26.7923 8.93059 26.9467 8.66033 26.9467H3.41315C1.52812 26.9467 0 25.4186 0 23.5336V6.46783Z\" fill=\"currentColor\"/>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M28.1336 3H21.2212C20.6682 3 20.1843 3.21053 19.8387 3.63158C19.4931 3.21053 19.0092 3 18.4562 3H11.5438C10.9908 3 10.5069 3.21053 10.1613 3.63158C9.81567 3.21053 9.3318 3 8.7788 3H1.86636C0.829493 3 0 3.91228 0 4.96491V25.0351C0 26.0877 0.829493 27 1.86636 27H8.7788C9.3318 27 9.81567 26.7895 10.1613 26.3684C10.5069 26.7895 10.9908 27 11.5438 27H18.4562C19.0092 27 19.4931 26.7895 19.8387 26.3684C20.1843 26.7895 20.6682 27 21.2212 27H28.1336C29.1705 27 30 26.0877 30 25.0351V4.96491C30 3.91228 29.1705 3 28.1336 3ZM8.7788 25.9474H1.86636C1.38249 25.9474 1.03687 25.5263 1.03687 25.0351V4.96491C1.03687 4.47368 1.38249 4.05263 1.86636 4.05263H8.7788C9.26267 4.05263 9.6083 4.47368 9.6083 4.96491V25.0351C9.67742 25.5263 9.26267 25.9474 8.7788 25.9474ZM18.4562 25.9474H11.5438C11.0599 25.9474 10.7143 25.5263 10.7143 25.0351V4.96491C10.7143 4.47368 11.129 4.05263 11.5438 4.05263H18.4562C18.9401 4.05263 19.2857 4.47368 19.2857 4.96491V25.0351C19.2857 25.5263 18.9401 25.9474 18.4562 25.9474ZM28.9631 25.0351C28.9631 25.5263 28.5484 25.9474 28.1336 25.9474H21.2212C20.7373 25.9474 20.3917 25.5263 20.3917 25.0351V4.96491C20.3917 4.47368 20.8065 4.05263 21.2212 4.05263H28.1336C28.6175 4.05263 28.9631 4.47368 28.9631 4.96491V25.0351ZM8.43318 12.4737C8.36406 12.9649 8.15668 13.4561 7.81106 13.7368C7.18894 14.4386 6.42857 15.4912 6.01382 18.0877C5.9447 18.7193 5.6682 19.2105 4.97696 19.2105C4.28571 19.2105 3.87097 18.7895 3.87097 18.2281C3.87097 17.1754 4.56221 16.4035 6.70507 14.0877L7.18894 13.5263L7.11982 13.4561C6.77419 13.7368 6.35945 13.8772 5.9447 13.8772C5.32258 13.9474 4.76959 13.5965 4.28571 13.5965C3.80184 13.5965 3.73272 13.807 3.52535 14.7895H2.5576V11.7719H3.59447L3.73272 12.7544H3.80184C4.00922 12.0526 4.35484 11.7018 4.83871 11.7018C5.73733 11.7018 6.01382 12.8947 6.63594 12.8947H6.70507C6.70507 12.7544 6.70507 12.614 6.70507 12.4737C6.70507 12.2632 6.77419 12.0526 6.91244 11.8421C7.05069 11.7018 7.32719 11.6316 7.53456 11.6316C7.74194 11.6316 8.01843 11.7018 8.15668 11.8421C8.29493 12.0526 8.43318 12.2632 8.43318 12.4737ZM27.7189 12.4035C27.6498 12.8947 27.4424 13.386 27.0968 13.6667C26.4747 14.3684 25.7143 15.4211 25.2995 18.0175C25.2304 18.6491 24.9539 19.1404 24.2627 19.1404C23.5714 19.1404 23.1567 18.7193 23.1567 18.1579C23.1567 17.1053 23.8479 16.3333 25.9908 14.0175L26.4747 13.4561L26.4055 13.386C26.0599 13.6667 25.6452 13.807 25.2304 13.807C24.6083 13.807 24.1244 13.386 23.6406 13.386C23.1567 13.386 23.0876 13.5965 22.8802 14.5789H21.9124V11.5614H22.9493L23.0876 12.5439H23.1567C23.3641 11.8421 23.7097 11.4912 24.1935 11.4912C25.0922 11.4912 25.4378 12.6842 26.0599 12.6842H26.129C26.0599 12.614 26.0599 12.4737 26.0599 12.3333C26.0599 12.1228 26.129 11.9123 26.2673 11.7018C26.4055 11.5614 26.682 11.4912 26.8894 11.4912C27.0968 11.4912 27.3041 11.5614 27.5115 11.7018C27.6498 11.9123 27.7189 12.1228 27.7189 12.4035ZM22.0507 7.14035C22.0507 6.85965 22.2581 6.57895 22.5346 6.57895H26.682C26.9585 6.57895 27.1659 6.78947 27.1659 7.14035C27.1659 7.49123 26.9585 7.70176 26.682 7.70176H22.5346C22.3272 7.63158 22.0507 7.42105 22.0507 7.14035ZM2.76498 7.14035C2.76498 6.85965 2.97235 6.57895 3.24885 6.57895H7.39631C7.67281 6.57895 7.88018 6.78947 7.88018 7.14035C7.88018 7.49123 7.67281 7.70176 7.39631 7.70176H3.24885C2.97235 7.63158 2.76498 7.42105 2.76498 7.14035ZM27.235 22.8597C27.235 23.1404 27.0277 23.4211 26.7512 23.4211H22.6037C22.3272 23.4211 22.1198 23.2105 22.1198 22.8597C22.1198 22.579 22.3272 22.2982 22.6037 22.2982H26.7512C27.0277 22.3684 27.235 22.579 27.235 22.8597ZM18.1106 7.49123C18.0415 7.98246 17.8341 8.47369 17.4885 8.75439C16.8664 9.45614 16.106 10.5088 15.6912 13.1053C15.6221 13.7368 15.3456 14.2281 14.6544 14.2281C13.9631 14.2281 13.5484 13.807 13.5484 13.2456C13.5484 12.193 14.2396 11.4211 16.3825 9.10526L16.8664 8.54386L16.7972 8.47368C16.4516 8.75439 16.0369 8.89474 15.6221 8.89474C15 8.89474 14.5161 8.47368 14.0323 8.47368C13.5484 8.47368 13.4793 8.68421 13.2719 9.66667H12.235V6.64912H13.2719L13.4101 7.63158H13.4793C13.6866 6.92982 14.0323 6.57895 14.5161 6.57895C15.4147 6.57895 15.6912 7.77193 16.3134 7.77193H16.3825C16.3825 7.70175 16.3825 7.5614 16.3825 7.42105C16.3825 7.21053 16.4516 7 16.5899 6.78947C16.7281 6.64912 17.0046 6.57895 17.212 6.57895C17.4194 6.57895 17.6959 6.64912 17.8341 6.78947C17.9724 7 18.1106 7.2807 18.1106 7.49123ZM17.5576 17.1754C17.5576 17.4561 17.3502 17.7368 17.0737 17.7368H12.9263C12.6498 17.7368 12.4424 17.5263 12.4424 17.1754C12.4424 16.8246 12.6498 16.614 12.9263 16.614H17.0737C17.3502 16.614 17.5576 16.8246 17.5576 17.1754ZM7.94931 22.8597C7.94931 23.1404 7.74194 23.4211 7.46544 23.4211H3.24885C2.97235 23.4211 2.76498 23.2105 2.76498 22.8597C2.76498 22.579 2.97235 22.2982 3.24885 22.2982H7.39631C7.67281 22.3684 7.94931 22.579 7.94931 22.8597ZM17.4194 21.5965C17.4885 21.7368 17.4194 21.8772 17.2811 22.0175L16.1751 22.8597L16.5899 24.193C16.659 24.3333 16.5899 24.4737 16.4516 24.614C16.3134 24.6842 16.1751 24.6842 16.0369 24.614L15 23.7018L13.894 24.5439C13.7558 24.614 13.6175 24.614 13.4793 24.5439C13.341 24.4737 13.341 24.2632 13.341 24.1228L13.7558 22.7895L12.6498 21.9474C12.5115 21.8772 12.5115 21.6667 12.5115 21.5263C12.5806 21.386 12.7189 21.3158 12.8571 21.2456H14.1705L14.5853 19.9123C14.6544 19.7719 14.7926 19.6316 14.9309 19.6316C15.0691 19.6316 15.2074 19.7719 15.2765 19.9123L15.6912 21.2456H17.0737C17.212 21.3158 17.3502 21.386 17.4194 21.5965Z\" fill=\"currentColor\"/>\n </SvgIcon>\n }\n}","import {grayColors} from \"../../architecture/gray-colors\";\n\nexport const baseColors = {\n base01: \"#e63422\", //red\n base01Contrast: \"#ffffff\",\n base01Dark: \"#ca2e1e\",\n base01Light: \"#e94838\",\n\n base02: \"#7ff800\", //brandGreen\n base02Contrast: \"#000000\",\n base02Dark: \"#7aec37\", //inchWorm\n base02Light: \"#d2f800\", //limeGreen\n\n base03: \"#fce403\", //turbo\n base03Contrast: \"#000000\",\n base03Dark: \"#ffff00\", //yellow\n base03Light: \"#d5ec37\", //pear\n\n base04: \"#c81503\",\n\n ...grayColors\n};","export function hexToRgba(hex: string, opacity: number = 1): string {\n var c;\n if(/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)){\n c = hex.substring(1).split('');\n if(c.length === 3){\n c = [c[0], c[0], c[1], c[1], c[2], c[2]];\n }\n c = '0x'+c.join('');\n return 'rgba('+[(c>>16)&255, (c>>8)&255, c&255].join(',')+',' + opacity +')';\n }\n throw new Error('Bad color Hex code');\n}","export const FEATURE_DEPOSIT_WIDGET = \"DepositWidget\"; //used only on backend side\nexport const FEATURE_CASHOUT_WIDGET = \"CashoutWidget\"; //used only on backend side\nexport const FEATURE_TRANSACTION_HISTORY_WIDGET = \"TransactionHistoryWidget\";\nexport const FEATURE_NAME_REGISTRATION_WIDGET = \"RegistrationWidget\";\nexport const FEATURE_NAME_CONTROL_CENTER_TOGGLE = \"AbTestingSafeZoneToggle\";\nexport const FEATURE_NAME_ONBOARDING_TOUR = \"OnboardingTourActivated\";\nexport const FEATURE_NAME_VIDEO_LIVE_STREAM = \"LiveStreamEnabled\";\nexport const FEATURE_NAME_STATIC_VIDEO_LIST = \"StaticVideoListEnabled\";\nexport const FEATURE_NAME_VIDEO_SLIDES = \"OrbitExplorer\";\nexport const FEATURE_NAME_MOBILE_HEADER_SEARCH_BUTTON = \"MobileHeaderSearchButton\";\nexport const FEATURE_NAME_WEBAPP_BOTTOM_NAVIGATION = \"WebappBottomNavigation\";\nexport const FEATURE_NAME_AI_SORT_GAME_LIST = \"AbTestingAiSortGamesLists\";\nexport const FEATURE_NAME_PLAYERS_LIKE_YOU_GAMES_LIST_TYPE_ID = \"PlayersLikeYouGamesListTypeId\";\nexport const FEATURE_NAME_SEARCH_GAME_SUGGESTED_BY_AI = \"SearchGameSuggestionByAI\";\nexport const FEATURE_NAME_LIST_ON_TOP = \"ListOnTop\";\n\n\n\nexport const FEATURE_GAME_RECOMMENDATIONS = 'GameRecommendations';\nexport const FEATURE_ROUTE_OVERWRITE = \"AbRouteOverwrite\";\nexport const FEATURE_NAME_BECAUSE_YOU_PLAYED_LIST = \"BecauseYouPlayedListEnabled\";\n\n\nexport const FEATURE_NAME_FREE_TO_PLAY_FLOW = \"FreeToPlayFlow\";\n\nexport const FEATURE_NAME_STATIC_LIVE_ARENA = \"StaticLiveArena\";\n\nexport const FEATURE_NAME_ADD_IN_GAME_FUNDS = \"AddInGameFunds\";\n\nexport const FEATURE_NAME_JACKPOT_BET = \"JackpotBet\";\n\n\n\n","export enum LIST_TYPE_ID {\n STICKINESS = 0,\n BETS = 2,\n ACTIVE_USERS = 1\n}","export const CHANNEL_SOURCE = {\n casinoClient: 'CASINO_CLIENT',\n partyJackpotToaster: 'PARTY_JACKPOT_TOASTER',\n omg: 'OMG',\n myAccount: 'MY_ACCOUNT',\n uploadDocuments: 'UPLOAD_DOCUMENTS',\n registration: 'REGISTRATION',\n pendingPlay: 'PENDING_PLAY',\n pendingAction: 'PENDING_ACTION',\n geoLocationRetry: 'GEO_LOCATION_RETRY',\n geoLocation: 'GEO_LOCATION',\n rich: 'RICH',\n about_popup: 'ABOUT_POPUP',\n cashier: \"CASHIER\",\n uk_acocunt_miration: 'UK_ACCOUNT_MIGRATION'\n}\n\nexport const CHANNEL_ELEMENTS = {\n depositButton: 'deposit_button',\n withdrawButton: 'withdraw_button',\n uploadDocumentsButton: 'upload_documents_button',\n transactionHistoryButton: 'transaction_history_button',\n retryButton: 'retry_button',\n plusButton: 'plus_button',\n urlParam: 'url_param',\n deepLink: 'deep_link',\n floatingIcon: 'floating_icon',\n controlCenterHeaderButton: 'safezone_header_button',\n controlCenterTooltip: 'control_center_tooltip',\n controlCenterUsefulLink: 'safezone_useful_link',\n gamesLimitsLobbyButton: 'games_limits_lobby_button',\n gamesLimitsGameButton: 'games_limits_game_button',\n omgAction: \"omg_action\",\n cashierAction: \"cashier_action\",\n registerButton: \"register_button\"\n}\n\nexport const DISPLAY_MESSAGE_IDS = {\n sofRequired: 100,\n retryCloseDrawerMessage: 101,\n psRedirectFocusDialog: 102,\n timeSpentReminder: 104,\n nightLimitWarning: 105,\n nightLimitKick: 106,\n lugasCooldown: 108,\n lugasActiveOnAnotherOperator: 109,\n lugasLogout: 110,\n loginMessage: 112,\n realityCheckGermany: 113,\n SDNetLossAdvanceWarning: 115,\n SDTimeLimitAdvanceWarning: 116,\n SDNetLossLimitsReached: 117,\n SDTimeLimitsReached: 118,\n SDRealityCheck: 119,\n SDResult: 120,\n SDSetLimitPopUp: 121\n}\n\nexport function getDisplayMessageName(messageId: number): string {\n switch (messageId) {\n case DISPLAY_MESSAGE_IDS.SDSetLimitPopUp:\n return \"SDSetLimitPopUp\";\n case DISPLAY_MESSAGE_IDS.SDNetLossAdvanceWarning:\n return \"SDNetLossAdvanceWarning\";\n case DISPLAY_MESSAGE_IDS.SDTimeLimitAdvanceWarning:\n return \"SDTimeLimitAdvanceWarning\";\n case DISPLAY_MESSAGE_IDS.SDNetLossLimitsReached:\n return \"SDNetLossLimitsReached\";\n case DISPLAY_MESSAGE_IDS.SDTimeLimitsReached:\n return \"SDTimeLimitsReached\";\n case DISPLAY_MESSAGE_IDS.SDRealityCheck:\n return \"SDRealityCheck\";\n case DISPLAY_MESSAGE_IDS.SDResult:\n return \"SDResult\";\n default:\n return \"\";\n }\n}\n\nexport const DISPLAY_MESSAGE_NAMES = {\n DISRUPTIVE_WARNING_MESSAGE_NAME: \"DisruptiveWarningMessage\",\n DISRUPTIVE_KICKOFF_MESSAGE_NAME: \"DisruptiveKickOffMessage\",\n LUGAS_COOLDOWN_MESSAGE_NAME: \"LugasCoolingPeriod\",\n LUGAS_ACTIVE_MESSAGE_NAME: \"LugasParallelPlaying\",\n LUGAS_LOGOUT_MESSAGE_NAME: \"LugasLogout\",\n REALITY_CHECK_GERMANY_MESSAGE_NAME: \"RealityCheck\",\n LOGIN_MESSAGE: \"LoginMessage\"\n}\n\nexport const ACTION_TAKEN_NAMES = {\n CONFIRM_ACTION: \"confirm\",\n CANCEL_ACTION: \"cancel\",\n}\n\n","export enum FP_VOUCHER_TYPES {\n FreeSpin = '1',\n FreePlay = '2',\n FreeJackpotSpin = '3',\n FreeJackpotPlay = '4'\n}\n\nexport const FP_MESSAGE_MODE = {\n POPUP: 'popup',\n EMBEDDED_INTERNAL: 'embedded-internal'\n};\n","export enum GAME_GROUP {\n ARCADE = 209,\n BACCARAT = 11,\n BACKGAMMONN = 40,\n BLACKJACK = 12,\n CARRIBEAN_POKER = 18,\n CRAPS = 10,\n CRAZY_BLACKJACK = 20,\n HEAD_TO_HEAD = 207,\n HI_LO = 202,\n KENO = 16,\n LIVE_CASINO = 201,\n PAI_GOW_POKER = 17,\n POKER = 100,\n POKER_TEMPLATE_GAMES = 206,\n POOLS = 212,\n POWER_VIDEO_POKER = 19,\n ROULETTE = 13,\n ROULETTE_LIKE = 203,\n SCRATCH_CARD = 204,\n SLOT = 14,\n VIDEO_SLOT = 30,\n VIDEO_POKER = 15,\n VIDEO_SLOT_BONUS_GAME = 31,\n CRASH_GAME = 301\n}\n","export enum JackpotInternalId {\n Daily = 8000,\n Twilight = 8001,\n HourlyCaptain8 = 8002,\n MillionaireGenie = 6,\n AgeOfTheGodsFranchises = 200019,\n\n}\n\nexport enum JackpotType {\n Daily = \"Daily\",\n HighNoon = \"HighNoon\",\n Twilight = \"Twilight\",\n Party = \"Party\",\n HourlyCaptain8 = \"HourlyCaptain8\",\n MillionaireGenie = \"MillionaireGenie\",\n AgeOfGods = \"AgeOfTheGodsFranchises\",\n Titan = \"Titan\",\n VegasMillions = \"VegasMillions\",\n JackpotKing = \"JackpotKing\"\n}\n\nexport enum JACKPOT_STATE {\n Cold = 1,\n Regular = 2,\n Hot = 3,\n OffHours = 4 // used only for Hourly Party Jackpots for now\n}\n","const MIGRATION = {\n PLAYER_MIGRATED_COOKIE : \"player_migrated\",\n LOADED_WITH_MIGRATION_TOKEN_SESSION_STORAGE_KEY: \"loadedWithMigrationToken\",\n MIGRATION_SOURCE_QUERY_PARAM: \"utm_source\",\n MIGRATION_SOURCE_QUERY_PARAM_VALUE: 'player_migration',\n MIGRATION_TOKEN_QUERY_PARAM: \"utm_content\",\n BUSINESS_CORRELATION_ID_QUERY_PARAM: \"utm_id\",\n UK_SCV_PLAYER_MIGRATED_COOKIE: \"uk_scv_player_migrated\",\n};\n\nexport default MIGRATION;","\nexport enum GermanyResponsibleGamingButtonPlacement {\n inGame = 0,\n inDetailedHistory = 1,\n inHeader = 2\n}","//This is the cookie name used in unified.\nexport const STATE_OF_RESIDENCE_COOKIE_KEY: string = 'userSelectedState';\n","const TEMP_ACCOUNT_STATUS = {\n APPROVED: 'APPROVED',\n DOCUMENTS_NOT_RECEIVED: 'DOCUMENTS_NOT_RECEIVED',\n PENDING_VERIFICATION: 'PENDING_VERIFICATION'\n};\nexport {TEMP_ACCOUNT_STATUS};","export enum BalanceType {\n CASH = \"cash\",\n BONUS = \"bonus\",\n BOTH = \"both\"\n}\n","export type CyCssClass =\n 'cy-main-screen' |\n 'cy-brand-switch-list' |\n 'cy-brand-switch-list-item' |\n 'cy-menu-link' |\n 'cy-spinner' |\n 'cy-game-iframe' |\n 'cy-single-game-regular-template' |\n 'cy-game-image-container' |\n 'cy-play-real-game-button' |\n 'cy-play-demo-game-button' |\n 'cy-modal' |\n 'cy-modal-content' |\n 'cy-reality-check-options' |\n 'cy-modal-dialog-buttons-area' |\n 'cy-welcome-component' |\n 'cy-balance-box' |\n 'cy-balance-box-amount' |\n 'cy-profile-box' |\n 'cy-cashier-button' |\n 'cy-clock' |\n 'cy-game-window' |\n 'cy-logout-link' |\n 'cy-burger-button' |\n 'cy-profile-box-login-button' |\n 'cy-menu-links-group' |\n 'cy-menu-links-cross-brands-group' |\n 'cy-profile-picture' |\n 'cy-menu-item' |\n 'cy-game-navbar-close-button' |\n 'cy-game-navbar-clock' |\n 'cy-game-stripe-clock' |\n 'cy-game-navbar' |\n 'cy-open-responsible-gaming-button' |\n 'cy-game-navbar-game-name' |\n 'cy-game-navbar-session-id' |\n 'cy-game-navbar-switch-to-real-label' |\n 'cy-game-navbar-switch-to-demo-label' |\n 'cy-game-navbar-game-mode-toggle' |\n \"cy-game-info-page-button\" |\n 'cy-welcome-cashier-button' |\n 'cy-game-navbar-fullscreen-button' |\n 'cy-game-regulation-stripe' |\n 'cy-gambling-session-limit-duration-select' |\n 'cy-gambling-session-limit-loss-limit-select' |\n 'cy-gambling-session-limit-interval-reminder-select' |\n 'cy-gambling-session-limit-restriction-period-select' |\n 'cy-header-regulation-data'|\n 'cy-self-exclusion-link' |\n 'cy-safe-to-play' |\n 'cy-responsible-gaming-button' |\n 'cy-balance-amount-pc' |\n 'cy-header-bankroll-button-mobile' |\n 'cy-mobile-header-bankroll' |\n 'cy-bonus-and-cash-balance' |\n 'cy-cache-balance' |\n 'cy-bonus-balance' |\n 'cy-login-button-text' |\n 'cy-register-button' |\n 'cy-last-login-label' |\n 'cy-main-nav' |\n 'cy-navbar-mobile-wrapper' |\n 'cy-session-timer' |\n 'cy-last-login-value' |\n 'cy-open-game-intermediate-page' |\n 'cy-regulation-game-session-id' |\n 'cy-regulation-participation-ticket-id' |\n 'cy-italy-game-limit-default-amount-option' |\n 'cy-italy-game-limit-other-amount-option' |\n 'cy-italy-game-limit-other-amount-input' |\n 'cy-italy-game-limit-regulatory-value' |\n 'cy-sweden-panic-button' |\n 'cy-sweden-panic-icon' |\n 'cy-sweden-game-limit-button' |\n 'cy-sweden-game-limit-icon' |\n 'cy-sweden-self-test-button' |\n 'cy-sweden-self-test-icon' |\n 'cy-modal-dialog-x-close-button' |\n 'cy-external-link-container' |\n 'cy-cashier-external-link-container' |\n 'cy-new-live-casino' |\n 'cy-live-casino' |\n 'cy-live-casino-widget-container' |\n 'cy-modal-main-title' |\n 'cy-italy-game-limit-message' |\n 'cy-italy-game-limit-message-section' |\n 'cy-italy-game-limit-error-section' |\n 'cy-dk-doga-icon' |\n 'cy-dk-stop-spillen-icon' |\n 'cy-dk-rofus-icon' |\n 'cy-clear-search-box-icon' |\n 'cy-found-games-list-box' |\n 'cy-no-found-games-box' |\n 'cy-found-games-more-box' |\n 'cy-found-games-more' |\n 'cy-search-game-item' |\n 'cy-user-cid' |\n 'cy-close-mobile-menu-icon' |\n 'cy-close-mobile-search-icon' |\n 'cy-game-search-input' |\n 'cy-search-title-box' |\n 'cy-game-search-box' |\n 'cy-suggested-links-suggested-games' |\n 'cy-lobby-header' |\n 'cy-lobby-header-title'|\n 'cy-navbar-right-container' |\n 'cy-homepage-header-arenas-container' |\n 'cy-homepage-top-banner-background' |\n 'cy-homepage-top-banner-divider' |\n 'cy-arena-box' |\n 'cy-header-arena-title' |\n 'cy-new-games-arena-badge' |\n 'cy-party-jackpot-in-game-container' |\n 'cy-party-jackpot-in-game-widget-amount' |\n 'cy-party-jackpot-welcome-popup' |\n 'cy-party-jackpot-welcome-popup-accept-button' |\n 'cy-party-jackpot-welcome-popup-decline-button' |\n 'cy-party-jackpot-welcome-popup-terms-and-conditions' |\n 'cy-reality-check-close-button' |\n 'cy-session-cooldown-popup' |\n 'cy-session-cooldown-remaining' |\n 'cy-game-popup' |\n 'cy-game-popup-not-now-button' |\n 'cy-game-popup-open-real-button' |\n 'cy-game-popup-game-title' |\n 'cy-homepage-arenas-header' |\n 'cy-layout-wrapper-homepage'|\n 'cy-layout-wrapper-miniorbit-homepage' |\n 'cy-lobby-wrapper-miniorbit-arena' |\n 'cy-panic-button-germany' |\n 'cy-tooltip-click-here' |\n 'cy-modal-dialog-content' |\n 'cy-tooltip-box' |\n 'cy-history-more-details' |\n 'cy-details-history-header' |\n 'cy-useful-links-list' |\n 'cy-mini-orbit-useful-links-list' |\n 'cy-tooltip-close' |\n 'cy-remainder-select' |\n 'cy-more-info' |\n 'cy-free-play-indicator-button' |\n 'cy-deposit-button' |\n 'cy-user-menu-close-btn' |\n 'cy-free-play-voucher-container' |\n 'cy-free-play-games-container' |\n 'cy-free-play-game-item' |\n 'cy-drop-down-box' |\n 'cy-gaming-history-record' |\n 'cy-gaming-history-game-name' |\n 'cy-gaming-history-game-image' |\n 'cy-gaming-history-play-date' |\n 'cy-gaming-history-bet-value' |\n 'cy-gaming-history-winning-value' |\n 'cy-gaming-history-bankroll-value' |\n 'cy-gaming-history-free-play-winning' |\n 'cy-gaming-history-free-play-current-amount' |\n 'cy-gaming-history-amount-description' |\n 'cy-gaming-history-amount-value' |\n 'cy-gaming-history-round-id' |\n 'cy-migrated-gaming-history-round-id' |\n 'cy-gaming-history-session-id' |\n 'cy-gaming-history-participation-id' |\n 'cy-gaming-history-days-selector' |\n 'cy-gaming-history-big-win-message' |\n 'cy-gaming-history-loading-trigger' |\n 'cy-tipping-history-record' |\n 'cy-tipping-history-game-name' |\n 'cy-tipping-history-game-image' |\n 'cy-tipping-history-tip-id' |\n 'cy-tipping-history-play-date' |\n 'cy-tipping-history-tip-value' |\n 'cy-tipping-history-bankroll-value' |\n 'cy-tipping-history-days-selector' |\n 'cy-tipping-history-loading-trigger' |\n 'cy-tipping-history-amount-description' |\n 'cy-tipping-history-amount-value' |\n 'cy-skip-intermediate-page' |\n 'cy-orbit-swiper' |\n 'cy-swiper-button-prev' |\n 'cy-swiper-button-next' |\n 'cy-uk-malta-reality-check-title' |\n 'cy-live-casino-grid' |\n 'cy-live-casino-grid-item' |\n 'cy-live-casino-grid-item-infobar-game-seats-count-text' |\n 'cy-live-casino-grid-item-title' |\n 'cy-live-casino-grid-item-bet-interval' |\n 'cy-live-casino-grid-item-infobar-draws' |\n 'cy-live-casino-grid-item-infobar-dealer-name' |\n 'cy-live-casino-grid-item-infobar-bet-behind' |\n 'cy-live-casino-widget-amount' |\n 'cy-live-casino-widget-description' |\n 'cy-live-casino-filter-buttons' |\n 'cy-history-free-play-message' |\n 'cy-user-menu' |\n 'cy-games-list-title' |\n 'cy-games-title-text' |\n 'cy-orbit-swiper-wrapper' |\n 'cy-orbit-swiper-games-list' |\n 'cy-see-all-link' |\n 'cy-recently-played' |\n 'cy-help-mobile-link' |\n 'cy-filter-link' |\n 'cy-open-filters-button' |\n 'cy-apply-filters-button' |\n 'cy-clear-filters-button' |\n 'cy-side-menu' |\n 'cy-mini-orbit-side-menu-open-button' |\n 'cy-right-drawer' |\n 'cy-overlay' |\n 'cy-registration-popup-content' |\n 'cy-vertical-games-list' |\n 'cy-vertical-games-list-close-btn' |\n 'cy-lang-switcher-back' |\n 'cy-language-switcher-dropdown' |\n 'cy-lang-switch-label' |\n 'cy-lang-switch-current-lang' |\n 'cy-toast-container' |\n 'cy-toast' |\n 'cy-modal-dialog' |\n 'cy-modal-dialog-header' |\n 'cy-modal-dialog-consumer-content' |\n 'cy-source-of-funds-open-chat-btn' |\n 'cy-language-switcher-button' |\n 'cy-cms-banner-container' |\n 'cy-temp-account-days-number' |\n 'cy-temp-account-message-body' |\n 'cy-omg-indicator' |\n 'cy-jackpot-widget' |\n 'cy-cgp-red-tiger-widget-click-detector' |\n 'cy-game-jackpot-amount' |\n 'cy-useful-links-section' |\n 'cy-useful-links-item' |\n 'cy-useful-links-li-item' |\n 'cy-useful-links-item-expandable' |\n 'cy-useful-links-item-side-text' |\n 'cy-cgp-about-area' |\n 'cy-lobby-grid-arena' |\n 'cy-link-to-offer-banner-box' |\n 'cy-link-to-offer-wheel-of-fortune' |\n 'cy-link-to-offer-dialog-close-box' |\n 'cy-open-membership-deeplink' |\n 'cy-open-cashier-deeplink' |\n 'cy-link-to-offer-icon-box'|\n 'cy-games-grid-container' |\n 'cy-orbit-swiper-streaming-tile' |\n 'cy-orbit-swiper-streaming-tile-footer' |\n 'cy-cross-brand-link' |\n 'cy-arenas-header-button' |\n 'cy-live-video-item' |\n 'cy-players-like-you' |\n 'cy-because-you-played' |\n 'cy-game-title' |\n 'cy-lists-intersection-observer-target' |\n 'cy-inactivity-timeout-select' |\n 'cy-about-session-balance-amount' |\n 'cy-about-help-link' |\n 'cy-filters-games-list' |\n 'cy-game-net-position-value' |\n 'cy-game-duration-value' |\n 'cy-deposit-widget' |\n 'cy-deposit-widget-init-params' |\n 'cy-payments-redirect-focus' |\n 'cy-uk-tsr-main-text-box' |\n 'cy-withdraw-button' |\n 'cy-cashout-widget' |\n 'cy-cashout-widget-init-params' |\n 'cy-top-picks-list' |\n 'cy-arenas-header' |\n 'cy-logo' |\n 'cy-main-wrapper' |\n 'cy-clock-component' |\n 'cy-game-navbar-free-play-indicator' |\n 'cy-free-play-vouchers-container' |\n 'cy-header-menu-gift-button' |\n 'cy-overlay-content' |\n 'cy-user-menu-user-details' |\n 'cy-state-select-approve-button' |\n 'cy-swiper-buttons' |\n 'cy-burnout-animation-container' |\n 'cy-burnout-gift-button' |\n 'cy-tooltip-container' |\n 'cy-logo-container' |\n 'cy-navbar-container' |\n 'cy-user-profile-messages-indicator' |\n 'cy-free-play-indicator-dot' |\n 'cy-help-widget-app' |\n 'cy-header-help-button' |\n 'cy-form-post-form' |\n 'cy-free-to-play-click-box' |\n 'cy-modal-dialog-link' |\n 'cy-italy-other-limit-radio' |\n 'cy-standard-limit-radio' |\n 'cy-jackpot-widget-collecting-amount' |\n 'cy-jackpot-widget-amount'|\n 'cy-transaction-history-init-params' |\n 'cy-transaction-history-widget' |\n 'cy-netherlands-ksa-button' |\n 'cy-vouchers-previous-button' |\n 'cy-vouchers-next-button' |\n 'cy-voucher-card-face' |\n 'cy-voucher-card-back' |\n 'cy-game-restriction-geo-location-primary-button' |\n 'cy-game-restriction-geo-location-secondary-button' |\n 'cy-header-control-center-button' |\n 'cy-control-center-mini-app' |\n 'cy-control-center-mini-widget-init-params' |\n 'cy-control-center-full-app' |\n 'cy-control-center-full-title' |\n 'cy-control-center-full-widget-init-params' |\n 'cy-header-state-selector-button' |\n 'cy-state-select-dropdown' |\n 'cy-state-select-other-button' |\n 'cy-login-popup-approve-button' |\n 'cy-login-modal-content' |\n 'cy-login-popup-total-stakes' |\n 'cy-login-popup-net-position' |\n 'cy-advanced-filters' |\n 'cy-applied-advanced-filters-indicator' |\n 'cy-applied-advanced-filter-name' |\n 'cy-remove-advanced-filter-x-button' |\n 'cy-close-advanced-filters-x-button' |\n 'cy-mobile-header-search-button' |\n 'cy-daily-deal-box' |\n 'cy-hybrid-embedded-nav-menu' |\n 'cy-hybrid-embedded-nav-menu-list' |\n 'cy-bottom-navbar-menu-item' |\n 'cy-free-play-on-boarding-tooltip' |\n 'cy-control-center-on-boarding-tooltip' |\n 'cy-my-account-external-link-container' |\n 'cy-registration-external-link-container' |\n 'cy-omg-external-link-container' |\n 'cy-forgot-password-external-link-container' |\n 'cy-forgot-username-external-link-container' |\n 'cy-deposit-pending-action-external-link-container' |\n 'cy-transaction-history-pending-action-external-link-container' |\n 'cy-pending-play-external-link-container' |\n 'cy-pending-login-external-link-container' |\n 'cy-rich-external-link-container' |\n 'cy-upload-documents-external-link-container' |\n 'cy-cross-brand-list' |\n 'cy-onboarding-tour' |\n 'cy-biometric-login-toggle' |\n 'cy-game-number-badge' |\n 'cy-search-results-number' |\n 'cy-search-title-text' |\n 'cy-useful-links-sub-items-list' |\n 'cy-useful-links-subitem' |\n 'cy-games-filter-category' |\n 'cy-game-filter-item' |\n 'cy-registration-widget' |\n 'cy-tsr-session-balance-amount' |\n 'cy-tsr-wagered-amount' |\n 'cy-dk-secondary-rg-icon' |\n 'cy-gambling-session-profit-loss' |\n 'cy-gambling-session-total-bets' |\n 'cy-gambling-session-duration' |\n 'cy-last-bet-date' |\n 'cy-game-footer-bar' |\n 'cy-save-games-widget' |\n 'cy-save-games-widget-header' |\n 'cy-vertical-list-game' |\n 'cy-open-session-records' |\n 'cy-open-session-record' |\n 'cy-open-session-record-header' |\n 'cy-open-session-record-session-id' |\n 'cy-open-session-record-game-name' |\n 'cy-open-session-record-content' |\n 'cy-open-session-fields-grid' |\n 'cy-open-session-play-button' |\n 'cy-video-slides-onboarding-overlay' |\n 'cy-video-slides-onboarding-explorer' |\n 'cy-video-slides-arena-swiper' |\n 'cy-video-slides-search-suggestions-container' |\n 'cy-video-slides-filters-container' |\n 'cy-video-slides-filters-preview' |\n 'cy-video-slides-filters-explore-button'|\n 'cy-video-slide-game-title-footer' |\n 'cy-license-status-button' |\n 'cy-license-status-gc-link' |\n 'cy-license-status-rg-link' |\n 'cy-add-funds-button' |\n 'cy-add-funds-amount' |\n 'cy-add-funds-topup-button' |\n 'cy-add-funds-cashier-button' |\n 'cy-game-navbar-mobile' |\n 'cy-idle-recommendation-toast' |\n 'cy-toastify-close-button';\n\n\n\nexport function CyClass(className: CyCssClass): string {\n return className.toString();\n}\n\nexport function CySelector(className: CyCssClass): string {\n return '.' + className.toString();\n}\n\nexport function CySelectors(...classNames: CyCssClass[]): string {\n return classNames.map(clsName => '.' + clsName).join(' ');\n}\n","export enum GameChildishIconMode { \n UseDefaultIcon,\n UseNonChildishIcon,\n UseLessNonChildishIcon,\n PreferNonChildishIcon,\n PreferLessNonChildishIcon\n}\n","import {TimeSpan} from \"@sparkware/app-utils\";\n\nexport enum TSR_TYPE {\n SESSION_TIMER,\n GAME_TIMER\n}\n\nexport type ITimeSpentReminderOptions = ISessionTimeSpentReminderComponentProps | IGameTimeSpentReminderComponentProps;\n\nexport interface ITimeSpentReminderComponentBaseProps {\n playingTime: TimeSpan;\n}\n\ninterface ISessionTimeSpentReminderComponentProps extends ITimeSpentReminderComponentBaseProps {\n timerType: TSR_TYPE.SESSION_TIMER;\n}\n\ninterface IGameTimeSpentReminderComponentProps extends ITimeSpentReminderComponentBaseProps {\n timerType: TSR_TYPE.GAME_TIMER;\n onStopReminders: () => void;\n}\n\nexport interface ITimeSpentReminderWithBalanceComponentProps extends ITimeSpentReminderComponentBaseProps {\n totalNetLoss: number;\n isInGame: boolean;\n amountWagered?: number; // only for Malta currently\n subtitle?: string; // only for Malta currently\n}","import {Check} from \"@sparkware/app-utils\";\n\nfunction hexToDec(h: string) {\n return parseInt(h, 16);\n}\n\nfunction decToHex(n: number) {\n let h = n.toString(16);\n if (h.length === 1) {\n return '0' + h;\n }\n return h;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\n// https://css-tricks.com/converting-color-spaces-in-javascript/\nexport function rgbToHsl(r: number, g: number, b: number) {\n // Make r, g, and b fractions of 1\n r = r / 255;\n g = g / 255;\n b = b / 255;\n\n // Find greatest and smallest channel values\n let cmin = Math.min(r,g,b),\n cmax = Math.max(r,g,b),\n delta = cmax - cmin,\n h = 0,\n s = 0,\n l = 0;\n \n // Calculate hue\n // No difference\n if (delta === 0)\n h = 0;\n // Red is max\n else if (cmax === r)\n h = ((g - b) / delta) % 6;\n // Green is max\n else if (cmax === g)\n h = (b - r) / delta + 2;\n // Blue is max\n else\n h = (r - g) / delta + 4;\n\n h = Math.round(h * 60);\n\n // Make negative hues positive behind 360°\n if (h < 0)\n h += 360;\n \n // Calculate lightness\n l = (cmax + cmin) / 2;\n\n // Calculate saturation\n s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n \n // Multiply l and s by 100\n s = +(s * 100).toFixed(1);\n l = +(l * 100).toFixed(1);\n\n // return \"hsl(\" + h + \",\" + s + \"%,\" + l + \"%)\";\n return {\n hue: h,\n saturation: s,\n lightness: l\n };\n}\n\nexport function hslToRgb(h: number, s: number, l: number) {\n // Must be fractions of 1\n s /= 100;\n l /= 100;\n\n let c = (1 - Math.abs(2 * l - 1)) * s,\n x = c * (1 - Math.abs((h / 60) % 2 - 1)),\n m = l - c/2,\n r = 0,\n g = 0,\n b = 0;\n \n if (0 <= h && h < 60) {\n r = c; g = x; b = 0; \n } else if (60 <= h && h < 120) {\n r = x; g = c; b = 0;\n } else if (120 <= h && h < 180) {\n r = 0; g = c; b = x;\n } else if (180 <= h && h < 240) {\n r = 0; g = x; b = c;\n } else if (240 <= h && h < 300) {\n r = x; g = 0; b = c;\n } else if (300 <= h && h < 360) {\n r = c; g = 0; b = x;\n }\n r = Math.round((r + m) * 255);\n g = Math.round((g + m) * 255);\n b = Math.round((b + m) * 255);\n return {\n red: r,\n green: g,\n blue: b\n };\n}\n\nexport class Color {\n public readonly red: number;\n public readonly gre: number;\n public readonly blu: number;\n public readonly opa: number;\n\n static fromHex(hex: string, opacity?: number) {\n if (hex === \"transparent\") {\n return Color.transparent();\n }\n /**\n * A valid hex can be formed from 3, 4, 6 or 8 characters from 0 to F, case insensitive.\n * The long form (8 characters also contains opacity), 00 (numeric 0) is fully transparent, FF (numeric 255) is fully opaque\n * Short format hex, 3 characters for example #4A9 is the short form for #44AA99\n * Short format hexa, 4 characters for example #4A9B is the short form for #44AA99BB\n */\n if (!/^#?(([A-Fa-f0-9]{3}){1,2}|(([A-Fa-f0-9]{4}){1,2}))$/.test(hex)) {\n throw new Error('Bad color Hex code');\n }\n if (hex[0] === \"#\") hex = hex.substring(1);\n let c: string[] = hex.split('');\n if (c.length === 3) {\n c = [c[0], c[0], c[1], c[1], c[2], c[2]];\n }\n if (c.length === 4) {\n c = [c[0], c[0], c[1], c[1], c[2], c[2], c[3], c[3]];\n }\n const red = hexToDec('' + c[0] + c[1]);\n const gre = hexToDec('' + c[2] + c[3]);\n const blu = hexToDec('' + c[4] + c[5]);\n const opa255 = c.length === 8 ? hexToDec('' + c[6] + c[7]) : 255;\n const opa = (!Check.isNullOrUndefined(opacity)) ? opacity : (Math.round(10000 * opa255 / 255) / 10000);\n return new Color(red, gre, blu, opa);\n }\n\n static transparent() {\n return new Color(127, 127, 127, 0);\n }\n\n constructor(r: number, g: number, b: number, o: number = 1) {\n this.red = clamp(r, 0, 255);\n this.gre = clamp(g, 0, 255);\n this.blu = clamp(b, 0, 255);\n this.opa = clamp(o, 0, 1);\n }\n\n rgb() {\n return 'rgba(' + [this.red, this.gre, this.blu].join(', ') + ')';\n }\n\n rgba() {\n return 'rgba(' + [this.red, this.gre, this.blu, this.opa].join(', ') + ')';\n }\n\n hex(withHashtag = true) {\n return (withHashtag ? '#' : '') + decToHex(this.red) + decToHex(this.gre) + decToHex(this.blu);\n }\n\n hexa(withHashtag = true) {\n return (withHashtag ? '#' : '') + decToHex(this.red) + decToHex(this.gre) + decToHex(this.blu) + decToHex(Math.round(this.opa * 255));\n }\n\n /**\n * I am computing the distance between 2 colors using a simple Euclidian distance in RGB space even if RGB is not perceptually uniform,\n * because I only want to see how dark or how light a color is, to determine if I can lighten or darken it for the hover effect.\n * https://colorjs.io/docs/color-difference.html\n * In RGB space, the greatest distance possible is 441.6729559300637 from white (255, 255, 255) to black (0, 0, 0).\n * \n * So, for the hover effect, if the button is white, I cannot lighen the color white so I will darken it (making it a light gray)\n * \n * Another way of determining how bright or dark a color is, is to convert rgb to hsl space and use lightness\n * which we know is a percentual value (from 0 to 100%)\n * \n * Usage:\n * To compute the distance from black: color.distanceFrom(new Color(0, 0, 0))\n * To compute the distance from white: color.distanceFrom(new Color(255, 255, 255))\n */\n distanceFrom(c: Color) {\n return Math.sqrt(Math.pow(c.red - this.red, 2) + Math.pow(c.gre - this.gre, 2) + Math.pow(c.blu - this.blu, 2));\n }\n\n private adjustColorLightness(amount: number) {\n if (this.opa === 0) {\n if (amount > 0) {\n return new Color(255, 255, 255, amount / 100);\n }\n if (amount < 0) {\n return new Color(0, 0, 0, amount / 100);\n }\n }\n // return new Color(this.red + amount, this.gre + amount, this.blu + amount);\n const hslData = rgbToHsl(this.red, this.gre, this.blu);\n hslData.lightness = clamp(hslData.lightness + amount, 0, 100);\n const rgbData = hslToRgb(hslData.hue, hslData.saturation, hslData.lightness);\n return new Color(rgbData.red, rgbData.green, rgbData.blue, this.opa);\n }\n\n lighten(amount: number) {\n return this.adjustColorLightness(Math.abs(amount));\n }\n\n darken(amount: number) {\n return this.adjustColorLightness(-Math.abs(amount));\n }\n\n private adjustColorSaturation(amount: number) {\n const hslData = rgbToHsl(this.red, this.gre, this.blu);\n hslData.saturation = clamp(hslData.saturation + amount, 0, 100);\n const rgbData = hslToRgb(hslData.hue, hslData.saturation, hslData.lightness);\n return new Color(rgbData.red, rgbData.green, rgbData.blue, this.opa);\n }\n\n saturate(amount: number) {\n return this.adjustColorSaturation(Math.abs(amount));\n }\n\n desaturate(amount: number) {\n return this.adjustColorSaturation(-Math.abs(amount));\n }\n\n private adjustTransparency(amount: number) {\n const opacity = clamp(this.opa + amount, 0, 1);\n return new Color(this.red, this.gre, this.blu, opacity);\n }\n\n fadeIn(amount: number) {\n return this.adjustTransparency(Math.abs(amount));\n }\n \n fadeOut(amount: number) {\n return this.adjustTransparency(-Math.abs(amount));\n }\n}","import { TimeSpan } from \"@sparkware/app-utils\";\n\nexport interface ImagePreloadPromiseResponse {\n error: string | null;\n backgroundUrl: string;\n imageObj: HTMLImageElement;\n}\n\nexport function imagePreload(src: string, timeout?: TimeSpan) {\n timeout = timeout || TimeSpan.fromMinutes(2);\n let timeoutRef: any = null;\n return new Promise<ImagePreloadPromiseResponse>((res, rej) => {\n let image = new Image();\n image.onload = () => {\n clearTimeout(timeoutRef);\n res({error: null, backgroundUrl: src, imageObj: image});\n };\n image.onerror = ()=> {\n clearTimeout(timeoutRef);\n rej({\n error: 'Could not load image on path => ' + src,\n backgroundUrl: src\n });\n };\n timeoutRef = setTimeout(() => {\n rej({\n error: 'Timeout. Could not load image on path => ' + src,\n backgroundUrl: src\n });\n }, timeout.totalMilliseconds);\n image.src = src;\n });\n}\n\nexport function imagePreloadWithDefault(src: string | null | undefined, defaultPath: string) {\n if (src) {\n return imagePreload(src).catch(() => {\n return imagePreload(defaultPath);\n });\n } else {\n return imagePreload(defaultPath);\n }\n}\n","import {\n CasinoStartupConfigurations,\n OrbitStartupConfigurations\n} from '../config-interfaces/casino-startup.configurations';\nimport {ApplicationStartupConfigurations} from '../config-interfaces/application-startup.configurations';\nimport {B2CStartupConfigurations} from '../config-interfaces/b2c-startup.configurations';\nimport {LauncherOverridesReader} from '../launcher-overrides-reader/launcher-overrides-reader';\nimport {LauncherOverrides} from '../config-interfaces/launcher-overrides';\nimport {IWindowService} from '../../services/window/window.service.interface';\nimport {IHttpService} from '../../services/http/http.service.interface';\nimport {ILoggerService} from '../../services/logger/logger.service.interface';\nimport {mockApplicationStartupConfigs} from '../../../utils/automation-helpers';\nimport {ALL_CONFIGS_KEY} from \"../../../app-consts\";\nimport {IConfigurationData} from \"../../services/configurations/configuration-data.interface\";\nimport {IAssetsMap} from \"../../themes/assets/assets-map.interface\";\nimport {IConfigInitializationParams} from \"../../../settings/configs/config-initialization-params.interface\";\nimport {IStorageService} from \"../../services/storage/storage.service.interface\";\nimport {getMiniOrbitName} from \"../../services/mini-orbit/mini-orbit-consts\";\nimport {createDefaultConfigs} from \"../../../settings/configs/default-config\";\n\nconst overrideJson = require('json-override');\n\nexport class ApplicationStartupConfigurationsReader {\n constructor(\n private _window: IWindowService,\n private _launcherOverridesReader: LauncherOverridesReader,\n private _http: IHttpService,\n private _logger: ILoggerService,\n private _storageService: IStorageService) {\n }\n\n private _launcherOverrides: LauncherOverrides | null;\n private _b2cConfigurations: B2CStartupConfigurations;\n private _skinFullName: string;\n\n async readApplicationConfigurations(): Promise<ApplicationStartupConfigurations> {\n this._launcherOverrides = this._launcherOverridesReader.getOverrides();\n this._b2cConfigurations = this._getB2CConfigurations();\n\n let casinoConfigurations = await this._getCasinoConfigurations();\n this._skinFullName = (`${casinoConfigurations.skin}_${casinoConfigurations.skinOverride}`).toLowerCase();\n\n\n const configs: ApplicationStartupConfigurations = {\n orbitServer: casinoConfigurations.sdk.config.ExtraProperties.paths.server,\n skin: casinoConfigurations.skin,\n skinOverride: casinoConfigurations.skinOverride,\n skinFullName: this._skinFullName,\n country: casinoConfigurations.country,\n orbit: casinoConfigurations.orbit,\n sdk: casinoConfigurations.sdk,\n admin: casinoConfigurations.adminConfig,\n b2c: this._b2cConfigurations,\n userSelectedState: casinoConfigurations.userSelectedState,\n useCountryAsState: casinoConfigurations.useCountryAsState,\n assetsMap: casinoConfigurations.assetsMap\n };\n\n return mockApplicationStartupConfigs(configs);\n }\n\n\n private async _getCasinoConfigurations(): Promise<CasinoStartupConfigurations> {\n let casinoConfigurations: CasinoStartupConfigurations = this._window.getGlobalProperty(ALL_CONFIGS_KEY);\n const skin = casinoConfigurations.skin.toLowerCase();\n const skinOverride = casinoConfigurations.skinOverride.toLowerCase();\n const lang = this._b2cConfigurations.language.iso3.toLowerCase();\n\n const {AssetsMap} = await import(/* webpackChunkName: \"assets-map\" */ '../../themes/assets/assets-map');\n\n const assetsMap = new AssetsMap({\n serverOrigin: casinoConfigurations.sdk.config.ExtraProperties.paths.server,\n skin: casinoConfigurations.skin,\n skinOverride: casinoConfigurations.skinOverride,\n language: this._b2cConfigurations.language.iso3,\n miniOrbit: getMiniOrbitName(this._storageService)\n })\n\n\n casinoConfigurations.orbit.config = await this._loadOrbitConfigFile(skin, skinOverride, assetsMap);\n casinoConfigurations.orbit.lang = await this._tryLoadOrbitLanguageOverrideFile(skin, skinOverride, lang);\n casinoConfigurations = await this._applyOrbitConfigsOverrides(casinoConfigurations, assetsMap);\n casinoConfigurations = this._applySdkConfigOverrides(casinoConfigurations);\n casinoConfigurations.assetsMap = assetsMap;\n return casinoConfigurations;\n\n }\n\n private async _loadOrbitConfigFile(skin: string, skinOverride: string, assetsMap: IAssetsMap): Promise<IConfigurationData> {\n try {\n const configModule = await import(`../../../settings/configs/${skin}/overrides/${skinOverride}/config`);\n\n const configInitParams: IConfigInitializationParams = {\n assetsMap: assetsMap\n }\n return configModule.default(configInitParams);\n } catch (err) {\n this._logger.error(`Failed to load orbit configuration file for skin ${skin}/${skinOverride}`, err);\n throw err;\n }\n\n }\n\n private async _tryLoadOrbitLanguageOverrideFile(skin: string, skinOverride: string, languageIso3: string): Promise<OrbitStartupConfigurations[\"lang\"]> {\n try {\n const langOverrideModule = await import(`../../../settings/configs/${skin}/overrides/${skinOverride}/languages/${languageIso3}`);\n return langOverrideModule.default;\n } catch (err) {\n this._logger.debug(`There is no override file for language ${languageIso3} in skin ${skin}/${skinOverride}`, err);\n }\n\n }\n\n\n async _applyOrbitConfigsOverrides(casinoConfigurations: CasinoStartupConfigurations, assetsMap: IAssetsMap): Promise<CasinoStartupConfigurations> {\n casinoConfigurations.orbit.config = overrideJson(createDefaultConfigs({assetsMap: assetsMap}), casinoConfigurations.orbit.config);\n if(this._launcherOverrides && this._launcherOverrides.orbit && this._launcherOverrides.orbit.configs) {\n overrideJson(casinoConfigurations.orbit.config, this._launcherOverrides.orbit.configs);\n }\n return casinoConfigurations;\n }\n\n\n\n private _applySdkConfigOverrides(casinoConfigurations: CasinoStartupConfigurations): CasinoStartupConfigurations {\n\n if(!(casinoConfigurations.sdk && casinoConfigurations.sdk.config)) { // if SDK configs are not here it probably means the app is loaded from a fallback file\n return casinoConfigurations;\n }\n\n overrideJson(casinoConfigurations, {\n sdk: {\n config: (this._launcherOverrides && this._launcherOverrides.sdk) || {}\n }\n });\n\n overrideJson(casinoConfigurations, {\n sdk: {\n config: {\n Language: {\n iso3: this._b2cConfigurations.language.iso3,\n iso2: this._b2cConfigurations.language.iso2\n }\n }\n }\n });\n\n let orbitLang = casinoConfigurations.orbit.lang;\n if(orbitLang && orbitLang.text && orbitLang.text.SDKTexts) {\n overrideJson(casinoConfigurations.sdk.config.Language.text, orbitLang.text.SDKTexts);\n }\n\n return casinoConfigurations;\n }\n\n\n\n\n private _applyB2COverrides(b2cConfigs: B2CStartupConfigurations): B2CStartupConfigurations {\n\n if(this._launcherOverrides?.orbit) {\n let languageIso3Override = this._launcherOverrides.orbit.language;\n let languageIso2Override = this._launcherOverrides.orbit.iso2;\n\n if(languageIso3Override) {\n b2cConfigs.language = {...b2cConfigs.language, iso3: languageIso3Override};\n }\n\n if(languageIso2Override) {\n b2cConfigs.language = {...b2cConfigs.language, iso2: languageIso2Override};\n }\n\n let publicationIdOverride = this._launcherOverrides.orbit.publicationID;\n if(publicationIdOverride) {\n b2cConfigs.publicationId = publicationIdOverride;\n }\n }\n\n\n let segmentsOverrides = this._launcherOverrides?.webData?.segments;\n\n if(segmentsOverrides) {\n b2cConfigs.segments = {...b2cConfigs.segments, ...segmentsOverrides};\n }\n\n return b2cConfigs;\n }\n\n private _getB2CConfigurations() : B2CStartupConfigurations {\n let b2cConfigs = this._window.getGlobalProperty('webData') || {} as B2CStartupConfigurations;\n\n b2cConfigs.language = b2cConfigs.language || {};\n b2cConfigs.language.iso3 = b2cConfigs.language.iso3 || 'eng';\n b2cConfigs.language.iso2 = b2cConfigs.language.iso2 || 'en';\n\n\n if(this._launcherOverrides) {\n return this._applyB2COverrides(b2cConfigs);\n }\n\n return b2cConfigs;\n }\n\n\n\n}\n\n\n\n\n\n\n\n\n\n\n\n\n","import ISdkHooksProvider from './sdk-hooks-provider.interface';\nimport {MINI_CIP_BASE_ROUTE, MINI_CIS_BASE_ROUTE} from '../../services/mini-orbit/mini-orbit-consts';\nimport {Uri} from '../../services/location/uri/uri';\nimport {IServiceFactoryExtended} from '../../services/service-factory-extended.interface';\nimport {IOrbitComponentToSdkAdapterService} from '../../../common/interfaces/orbit-component-to-sdk-adapter/orbit-component-to-sdk-adapter.service.interface';\nimport {ICashierService} from \"../../../common/interfaces/cashier.service.interface\";\nimport {IGameRunnerProxy} from \"../../../common/interfaces/game-runner-proxy.interface\";\nimport {ICasinofiedAnalyticsService} from \"../../../common/interfaces/casinofied-analytics-proxy.interface\";\nimport {IExternalLinksProxy} from \"../../../common/interfaces/external-links-proxy.interface\";\nimport IPlayerMigration from \"../../../common/interfaces/player-migration.interface\";\nimport {IToasterProxy} from '../../../common/interfaces/toaster_proxy_service_interface';\nimport {ILinksNavigationService} from \"../../services/links-navigation/links-navigation.service.interface\";\nimport {ISpinnerService} from \"../../../common/interfaces/spinner.service.interface\";\nimport {IMarketingService} from \"../../services/marketing/marketing.service.interface\";\nimport {IRegulationProxyService} from \"../../services/regulation/regulation-proxy.service.interface\";\nimport {IDialogService} from \"../../services/dialog/dialog.service.interface\";\nimport {ITranslationService} from \"../../services/translation/translation.service.interface\";\nimport {\n IAbTestingFeatureDataProviderService\n} from \"../../services/ab-testing/ab-testing-feature-data-provider.service.interface\";\n\nexport class SdkHooksProvider implements ISdkHooksProvider {\n services: IServiceFactoryExtended;\n\n redirectProxy(url: string): void {\n if (!url) {\n return;\n }\n\n if (this.services) {\n //SDK is using this function to do redirects,\n //but we must do redirect only if the URL is an absolut URL.\n //If is a relative one like /gaming_history/ then we just need to do local routing\n if (this.services.window.isAbsolutUrl(url)) {\n this.services.location.redirect(url);\n } else {\n this.services.location.push(url);\n }\n } else {\n window.location.href = url;\n }\n };\n\n openInNewWindowHook(): (url: string) => void | null {\n if (this.services?.miniOrbit.isEnabled) {\n return this.services.miniOrbit.openUrl;\n } else {\n return null;\n }\n };\n\n isMiniCip(): boolean {\n return this._isMiniOrbit(MINI_CIP_BASE_ROUTE);\n }\n\n isMiniCis(): boolean {\n return this._isMiniOrbit(MINI_CIS_BASE_ROUTE);\n }\n\n private _isMiniOrbit(basePath: string): boolean {\n if (!this.services) {\n return false;\n }\n\n const uri = new Uri(new URL(window.location.href));\n return uri.pathName.getBase().toString().toLowerCase() === basePath;\n }\n\n getGameTypesMappingForSdk(): Record<number, any> {\n if (!this.services) {\n return null;\n }\n\n const mapperData: Record<number, any> = {};\n this.services?.configuration?.usedGameTypesBySite?.forEach(gameType => {\n mapperData[gameType] = {};\n });\n\n return mapperData;\n };\n\n async getHeaderRegulationDataElement(): Promise<HTMLElement | null> {\n return (await this.services?.header)?.getHeaderRegulationDataElement();\n }\n\n resolveGameImagePath(imageFilePath: string): string {\n return this.services?.configuration?.resolveGameImagePath(imageFilePath);\n }\n\n getOrbitComponentToSdkAdapter(): IOrbitComponentToSdkAdapterService {\n return (this.services.orbitComponentInsideSdkProvider as any) as IOrbitComponentToSdkAdapterService;\n }\n\n getCashierService(): ICashierService {\n return this.services.cashier;\n }\n\n async getGameRunnerService(): Promise<IGameRunnerProxy> {\n const gameRunner = await this.services.gameRunner;\n return (gameRunner as any) as IGameRunnerProxy;\n }\n\n getCasinofiedAnalyticsService(): ICasinofiedAnalyticsService {\n return this.services.casinofiedAnalytics;\n }\n\n getSpinnerService(): ISpinnerService {\n return this.services.spinner;\n }\n\n\n getPlayerMigrationService(): IPlayerMigration {\n return this.services.playerMigration;\n }\n\n getExternalLinksProxyService(): Promise<IExternalLinksProxy> {\n return this.services.externalLinks;\n }\n\n getToasterProxyService(): IToasterProxy {\n return this.services.toaster;\n }\n\n getLinksNavigationService(): ILinksNavigationService {\n return this.services.linksNavigation;\n }\n\n getMarketingService(): Promise<IMarketingService> {\n return this.services.marketing;\n }\n\n getRegulationServiceProxy(): IRegulationProxyService {\n return (this.services.regulation as any) as IRegulationProxyService;\n }\n\n getDialogService(): IDialogService {\n return this.services.dialog;\n }\n\n getTranslationService(): ITranslationService {\n return this.services.translation;\n }\n\n getAbTestingFeatureDataProviderService(): IAbTestingFeatureDataProviderService {\n return this.services?.abTestingFeatureDataProvider;\n }\n}","import {IConfigurationEvaluationContext} from '../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IPropertyEvaluator} from '../property-evaluator/property-evaluator.interface';\nimport {Check} from '@sparkware/app-utils';\n\nexport class PropertiesEvaluator {\n constructor(private _propertiesEvaluators: IPropertyEvaluator[]) {\n }\n\n private _config: unknown = null;\n\n evaluate(context: IConfigurationEvaluationContext): any {\n if(Check.isNullOrUndefined(this._config)) {\n let config = {};\n\n this._propertiesEvaluators.forEach(propEvaluator => {\n Object.defineProperty(config, propEvaluator.propertyName, {\n get: () => propEvaluator.evaluate(context),\n set: () => {\n /*TODO - this setter is here because since we upgrade to mobx 6 it throws an error in underscore.ts in mergeDeep function which is called in config_service getConfig. We won't need this when all SDK code will be moved to orbit*/\n },\n configurable: false,\n enumerable: true\n });\n });\n\n this._config = config;\n }\n\n return this._config;\n }\n\n static fromRoot(rootObject: object, context: IConfigurationEvaluationContext): PropertiesEvaluator {\n let rootProps = Object.keys(rootObject).map(propName => context.createPropertyEvaluator(propName, rootObject));\n return new PropertiesEvaluator(rootProps);\n }\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {IValueEvaluator} from '../../value-evaluators/value-evaluator.interface/value-evaluator.interface';\nimport {IStatementEvaluator} from '../statement-evaluator/statement-evaluator.interface';\n\nexport class StatementsEvaluator implements IValueEvaluator {\n constructor(private _statementsEvaluators: IStatementEvaluator[], private _defaultValue: any) {\n }\n\n get defaultValue() {\n return this._defaultValue;\n }\n\n get evaluators(): IStatementEvaluator[] {\n return this._statementsEvaluators\n }\n\n evaluate(context: IConfigurationEvaluationContext): any {\n for(let i = 0, len = this.evaluators.length; i < len; i++) {\n let statementEvaluator = this.evaluators[i];\n let evaluatedValue = statementEvaluator.evaluate(context);\n if(!Check.isNullOrUndefined(evaluatedValue)) {\n return this._applyValueTransformation(context, evaluatedValue);\n }\n }\n\n return this._applyValueTransformation(context, this.defaultValue);\n }\n\n private _applyValueTransformation(context: IConfigurationEvaluationContext, value) {\n return context.parsePropertyValue(value).evaluate(context)\n }\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {PropertiesEvaluator} from '../../properties-evaluator/properties-evaluator';\nimport {IPropertyEvaluator} from '../../property-evaluator/property-evaluator.interface';\nimport {IValueEvaluator} from '../value-evaluator.interface/value-evaluator.interface';\nimport {Check} from '@sparkware/app-utils';\n\nexport class ObjectEvaluator implements IValueEvaluator {\n constructor(private _object: object) {\n }\n\n get obj() {\n return this._object;\n }\n\n private _evaluatedValue: unknown = undefined;\n\n evaluate(context: IConfigurationEvaluationContext): any {\n if(Check.isUndefined(this._evaluatedValue)) {\n let properties: IPropertyEvaluator[] = [];\n\n Object.keys(this.obj).forEach(propertyName => {\n properties.push(context.createPropertyEvaluator(propertyName, this.obj));\n });\n\n let configEvaluator = new PropertiesEvaluator(properties);\n this._evaluatedValue = configEvaluator.evaluate(context);\n }\n\n return this._evaluatedValue;\n }\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IValueEvaluator} from '../value-evaluator.interface/value-evaluator.interface';\n\nexport class ArrayEvaluator implements IValueEvaluator {\n constructor(private _itemsEvaluators: IValueEvaluator[]) {\n }\n\n get evaluators(): IValueEvaluator[] {\n return this._itemsEvaluators;\n }\n\n evaluate(context: IConfigurationEvaluationContext): any {\n return this.evaluators.map((item, index) => item.evaluate(context.createPropertyContext(index.toString())));\n }\n\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IValueEvaluator} from '../value-evaluator.interface/value-evaluator.interface';\nimport {Check} from '@sparkware/app-utils';\n\nexport class SimpleValueEvaluator implements IValueEvaluator {\n constructor(private _value: any) {\n }\n\n get value(): any {\n return this._value;\n }\n\n private _evaluatedValue = undefined;\n\n evaluate(context: IConfigurationEvaluationContext): any {\n if(Check.isUndefined(this._evaluatedValue)) {\n this._evaluatedValue = context.applyValueTransformation(context.getCurrentPropertyPath(), this.value);\n }\n return this._evaluatedValue;\n }\n}\n\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IStatementEvaluator} from './statement-evaluator.interface';\n\n\n\nexport class StatementEvaluator implements IStatementEvaluator {\n constructor(private _statementDefinition: any) {\n }\n\n get definition(): any {\n return this._statementDefinition;\n }\n\n evaluate(context: IConfigurationEvaluationContext): any {\n let rules = (this.definition.rules || []).map(rule => context.createSegmentationRule(rule));\n let logicalOperator = context.createLogicalOperator(this.definition.condition || 'AND', rules);\n if(logicalOperator.evaluate(context)) {\n return this.definition.value;\n }\n return null;\n }\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {ILogicalOperator} from './logical-operator.interface/logical-operator.interface';\nimport {ISegmentationRule} from '../segmentation-rule/segmentation-rule.interface';\n\nexport abstract class BaseLogicalOperator implements ILogicalOperator {\n\n constructor(private _rules: ISegmentationRule[]) {\n\n }\n\n get rules(): ISegmentationRule[] {\n return this._rules;\n }\n\n abstract evaluate(context: IConfigurationEvaluationContext): boolean;\n}\n","import {BaseLogicalOperator} from '../base-logical-operator';\nimport {IConfigurationEvaluationContext} from '../../../configuration-evaluation-context/configuration-evaluation-context.interface';\n\nexport class OrLogicalOperator extends BaseLogicalOperator {\n\n evaluate(context: IConfigurationEvaluationContext): boolean {\n for(let i = 0, len = this.rules.length; i < len; i++) {\n let rule = this.rules[i];\n if(rule.evaluate(context)) {\n return true;\n }\n }\n\n return false;\n }\n}\n","import {BaseLogicalOperator} from '../base-logical-operator';\nimport {IConfigurationEvaluationContext} from '../../../configuration-evaluation-context/configuration-evaluation-context.interface';\n\nexport class AndLogicalOperator extends BaseLogicalOperator {\n\n evaluate(context: IConfigurationEvaluationContext): boolean {\n if(this.rules.length === 0) {\n return false;\n }\n\n for(let i = 0, len = this.rules.length; i < len; i++) {\n let rule = this.rules[i];\n if(!rule.evaluate(context)) {\n return false;\n }\n }\n\n return true;\n }\n}\n","import {IConfigurationEvaluationContext} from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {ISegmentationRule} from './segmentation-rule.interface';\nimport {Check} from '@sparkware/app-utils';\n\n\nexport class SegmentationRule implements ISegmentationRule {\n constructor(private _ruleDefinition: any) {\n }\n\n get definition(): any {\n return this._ruleDefinition;\n }\n evaluate(context: IConfigurationEvaluationContext): boolean {\n if(Check.isArray(this.definition.rules)) {\n let innerRules = this.definition.rules.map(rule => context.createSegmentationRule(rule));\n let logicalOperator = context.createLogicalOperator(this.definition.condition || 'AND', innerRules);\n return logicalOperator.evaluate(context);\n } else {\n let operator = context.createComparisonOperator(this.definition.operator);\n let segmentValue = context.getSegmentValue(this.definition.id);\n return operator.compare(segmentValue, this.definition.value)\n }\n\n }\n}\n\n\n\n\n","import {IComparisonOperator} from './comparison-operator.interface/comparison-operator.interface';\n\nexport abstract class BaseComparisonOperator implements IComparisonOperator {\n\n abstract compare(value1: unknown, value2: unknown): boolean;\n}\n","import {BaseComparisonOperator} from '../base-comparison-operator';\n\nexport class EqualOperator extends BaseComparisonOperator {\n compare(value1: unknown, value2: unknown): boolean {\n if(this._isBooleanAsString(value1) || this._isBooleanAsString(value2)) {\n return value1?.toString() === value2?.toString();\n }\n // eslint-disable-next-line\n return value1 == value2;\n }\n\n private _isBooleanAsString(value: any) {\n if (value === 'true' || value === 'false') {\n return true;\n }\n\n return false;\n }\n}\n","import {BaseComparisonOperator} from '../base-comparison-operator';\nimport {EqualOperator} from '../equal-operator/equal-operator';\n\nexport class NotEqualOperator extends BaseComparisonOperator {\n compare(value1: unknown, value2: unknown) {\n return !(new EqualOperator().compare(value1, value2));\n }\n}\n","import {IConfigurationEvaluationContext} from '../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IComparisonOperator} from '../statements/comparison-operators/comparison-operator.interface/comparison-operator.interface';\nimport {ISegmentationRule} from '../statements/segmentation-rule/segmentation-rule.interface';\nimport {ILogicalOperator} from '../statements/logical-operators/logical-operator.interface/logical-operator.interface';\nimport {IStatementEvaluator} from '../statements/statement-evaluator/statement-evaluator.interface';\nimport {IValueEvaluator} from '../value-evaluators/value-evaluator.interface/value-evaluator.interface';\nimport {IPropertyEvaluator} from '../property-evaluator/property-evaluator.interface';\n\n\nexport class PropertyLevelContext implements IConfigurationEvaluationContext {\n constructor(private _originalContext: IConfigurationEvaluationContext, private _currentPropertyName) {\n\n }\n\n createComparisonOperator(operatorName: string): IComparisonOperator {\n return this._originalContext.createComparisonOperator(operatorName);\n }\n\n createLogicalOperator(logicalOperatorName: string, rules: ISegmentationRule[]): ILogicalOperator {\n return this._originalContext.createLogicalOperator(logicalOperatorName, rules);\n }\n\n createSegmentationRule(ruleDefinition: any): ISegmentationRule {\n return this._originalContext.createSegmentationRule(ruleDefinition);\n }\n\n createStatementEvaluator(statementDefinition: any): IStatementEvaluator {\n return this._originalContext.createStatementEvaluator(statementDefinition);\n }\n\n getSegmentValue(name: string): any {\n return this._originalContext.getSegmentValue(name);\n }\n\n parsePropertyValue(value: any): IValueEvaluator {\n return this._originalContext.parsePropertyValue(value);\n }\n\n\n getCurrentPropertyPath(): string {\n return this._originalContext.getCurrentPropertyPath() + '/' + this._currentPropertyName;\n }\n\n createPropertyContext(propertyName: string): IConfigurationEvaluationContext {\n return new PropertyLevelContext(this, propertyName);\n }\n\n applyValueTransformation(propertyPath: string, value: any): any {\n return this._originalContext.applyValueTransformation(propertyPath, value);\n }\n\n createPropertyEvaluator(propertyName: string, propertyOwner: object): IPropertyEvaluator {\n return this._originalContext.createPropertyEvaluator(propertyName, propertyOwner);\n }\n\n getLauncherGames(): number[] {\n return this._originalContext.getLauncherGames();\n }\n}\n","import {IConfigurationEvaluationContext} from '../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport {IPropertyEvaluator} from './property-evaluator.interface';\nimport {IValueEvaluator} from '../value-evaluators/value-evaluator.interface/value-evaluator.interface';\n\n\n\nexport class PropertyEvaluator implements IPropertyEvaluator {\n constructor(private _propertyName: string, private _valueEvaluator: IValueEvaluator) {\n\n }\n\n get propertyName(): string {\n return this._propertyName;\n }\n\n evaluate(context: IConfigurationEvaluationContext): any {\n\n let propertyContext = context.createPropertyContext(this.propertyName);\n\n try {\n return this._valueEvaluator.evaluate(propertyContext);\n } catch (err) {\n throw new Error(`Failed to evaluate property ${propertyContext.getCurrentPropertyPath()}; ${err}`);\n }\n\n }\n}\n","// BEWARE: In this file there are similar namings. Don't confuse them\n// TODO: Find better namings for interfaces and variables and eliminate implicit any's\ninterface IStatementsDefinition {\n defaultValue: unknown[];\n statements: unknown[];\n}\ninterface IStatementDefinition {\n condition: string;\n value: any,\n rules: unknown[]\n}\n\nexport function createStatementsDefinition(subLists: any): any {\n let statementsDefinition: IStatementsDefinition = {\n defaultValue: [],\n statements: []\n };\n\n if(!subLists) {\n return statementsDefinition;\n }\n\n subLists.forEach(sublist => {\n if (!sublist.Segment) {\n // the sublist with Segment null or undefined is considered to be the default value\n statementsDefinition.defaultValue = sublist.Games;\n } else {\n let statementDefinition: IStatementDefinition = {\n condition: \"AND\",\n value: sublist.Games,\n rules: []\n };\n\n sublist.Segment.forEach(segment => {\n statementDefinition.rules.push(_createStatementsRule(segment));\n });\n\n statementsDefinition.statements.push(statementDefinition);\n }\n });\n\n return statementsDefinition;\n}\n\nfunction _createStatementsRule(segment: any): any {\n return {\n id: segment.name,\n operator: \"=\",\n value:\n segment.value === 1 || segment.value === true || segment.value === \"true\"\n ? true\n : false // Admin sends 1 for true and 2 for false.\n };\n}\n","import { IPropertyEvaluator } from '../../property-evaluator/property-evaluator.interface';\nimport { IConfigurationEvaluationContext } from '../../configuration-evaluation-context/configuration-evaluation-context.interface';\nimport { createStatementsDefinition } from '../../../../../../app-react/services/configurations/create-statements-definition'\n\nexport class GamesIdPropertyEvaluator implements IPropertyEvaluator {\n constructor(private _owner: any, private _adminConfig: any) {\n\n }\n\n get owner(): any {\n return this._owner;\n }\n\n get adminConfig(): any {\n return this._adminConfig;\n }\n\n get propertyName(): string {\n return 'gamesId'\n }\n\n evaluate(context: IConfigurationEvaluationContext): any {\n let propertyContext = context.createPropertyContext(this.propertyName);\n\n let gamesAdminRefKey = this.owner.gamesAdminRefKey;\n\n //F TO DO - log if gamesAdminRefKey is missing\n\n let subLists = this.adminConfig && this.adminConfig.listsv2 && this.adminConfig.listsv2[gamesAdminRefKey];\n\n let gameTypes: number[] = [];\n if (!subLists) {\n //F TO DO - log if sub-lists is missing\n gameTypes = context.parsePropertyValue(this.owner[this.propertyName]).evaluate(propertyContext);\n } else {\n gameTypes = context.parsePropertyValue(createStatementsDefinition(subLists)).evaluate(propertyContext);\n }\n\n let launcherGames = context.getLauncherGames() || [];\n\n if (launcherGames.length === 0) {\n return gameTypes;\n }\n\n return [...launcherGames, ...gameTypes];\n }\n}\n","import {BaseComparisonOperator} from \"../base-comparison-operator\";\n\nexport class IsFalsyOperator extends BaseComparisonOperator {\n compare(value1: unknown, value2: unknown): boolean {\n return !((value1 || '').toString() === (value2 || '').toString());\n }\n}\n","import {BaseComparisonOperator} from '../base-comparison-operator';\nimport {Check} from \"@sparkware/app-utils\";\nimport {ILoggerService} from '../../../../../logger/logger.service.interface';\n\nexport class GreaterThanOperator extends BaseComparisonOperator {\n constructor(private _logger: ILoggerService){\n super();\n }\n\n compare(value1: unknown, value2: unknown): boolean {\n if (!Check.isNumber(value1) || !Check.isNumber(value2)) {\n this._logger.error(`Greater Than Operator: Values should be numbers! value1=${value1}; value2=${value2}`);\n }\n\n return value1 > value2;\n }\n}\n","import {BaseComparisonOperator} from '../base-comparison-operator';\nimport {Check} from \"@sparkware/app-utils\";\nimport {ILoggerService} from '../../../../../logger/logger.service.interface';\n\nexport class LessThanOperator extends BaseComparisonOperator {\n constructor(private _logger: ILoggerService) {\n super();\n }\n\n compare(value1: unknown, value2: unknown): boolean {\n if (!Check.isNumber(value1) || !Check.isNumber(value2)) {\n this._logger.error(`Less Than Operator: Values should be numbers! value1=${value1}; value2=${value2}`);\n }\n return value1 < value2;\n }\n}\n","import {BaseComparisonOperator} from \"../base-comparison-operator\";\nimport {ILoggerService} from \"../../../../../logger/logger.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {EqualOperator} from \"../equal-operator/equal-operator\";\n\nexport class AnyOfOperator extends BaseComparisonOperator {\n constructor(private _logger: ILoggerService){\n super();\n }\n\n compare(value1: unknown, value2: unknown): boolean {\n if(!Check.isArray(value2)) {\n this._logger.error(`Any Of Operator: The second parameter should be an array! value2=${value2}`);\n return new EqualOperator().compare(value1, value2);\n }\n\n return value2.includes(value1);\n }\n}","import {StatementsEvaluator} from '../statements/statements-evaluator/statements-evaluator';\nimport {ObjectEvaluator} from '../value-evaluators/object-evaluator/object-evaluator';\nimport {ArrayEvaluator} from '../value-evaluators/array-evaluator/array-evaluator';\nimport {SimpleValueEvaluator} from '../value-evaluators/simple-value-evaluator/simple-value-evaluator';\nimport {IValueEvaluator} from '../value-evaluators/value-evaluator.interface/value-evaluator.interface';\nimport {IConfigurationEvaluationContext} from './configuration-evaluation-context.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {IStatementEvaluator} from '../statements/statement-evaluator/statement-evaluator.interface';\nimport {StatementEvaluator} from '../statements/statement-evaluator/statement-evaluator';\nimport {ILogicalOperator} from '../statements/logical-operators/logical-operator.interface/logical-operator.interface';\nimport {ISegmentationRule} from '../statements/segmentation-rule/segmentation-rule.interface';\nimport {OrLogicalOperator} from '../statements/logical-operators/or-logical-operator/or-logical-operator';\nimport {AndLogicalOperator} from '../statements/logical-operators/and-logical-operator/and-logical-operator';\nimport {SegmentationRule} from '../statements/segmentation-rule/segmentation-rule';\nimport {IComparisonOperator} from '../statements/comparison-operators/comparison-operator.interface/comparison-operator.interface';\nimport {NotEqualOperator} from '../statements/comparison-operators/not-equal-operator/not-equal-operator';\nimport {EqualOperator} from '../statements/comparison-operators/equal-operator/equal-operator';\nimport {PropertyLevelContext} from '../property-level-context/property-level-context';\nimport {PropertyEvaluator} from '../property-evaluator/property-evaluator';\nimport {IPropertyEvaluator} from '../property-evaluator/property-evaluator.interface';\nimport {GamesIdPropertyEvaluator} from '../special-properties-evaluators/games-id-property-evaluator/games-id-property-evaluator';\nimport {IsFalsyOperator} from \"../statements/comparison-operators/is-falsy-operator/is-falsy-operator\";\nimport {IConfigurationEvaluationDataProvider} from './configuration-evaluation-data-provider.interface';\nimport {GreaterThanOperator} from \"../statements/comparison-operators/greater-than-operator/greater-than-operator\";\nimport {LessThanOperator} from \"../statements/comparison-operators/less-than-operator/less-than-operator\";\nimport {AnyOfOperator} from \"../statements/comparison-operators/any-of-operator/any-of-operator\";\nimport {isInsideAutomation} from '../../../../../utils/automation-helpers';\n\n\nexport class ConfigurationEvaluationContext implements IConfigurationEvaluationContext {\n constructor(private dataProvider: IConfigurationEvaluationDataProvider) {\n\n }\n\n\n\n getSegmentValue(name: string): any {\n return this.dataProvider.getSegmentValue(name);\n }\n\n parsePropertyValue(value: any): IValueEvaluator {\n if(Check.isObject(value)) {\n if(this._hasStatementsOrDefaultValue(value)) {\n return new StatementsEvaluator(this._createStatementsEvaluators(value.statements), value.defaultValue);\n } else {\n return new ObjectEvaluator(value);\n }\n } else if(Check.isArray(value)) {\n return new ArrayEvaluator(value.map(item => this.parsePropertyValue(item)));\n } else {\n return new SimpleValueEvaluator(value);\n }\n }\n\n private _createStatementsEvaluators(statementsDefinitions): IStatementEvaluator[] {\n return (statementsDefinitions || []).map(statementDefinition => this.createStatementEvaluator(statementDefinition))\n }\n\n createStatementEvaluator(statementDefinition: any): IStatementEvaluator {\n return new StatementEvaluator(statementDefinition);\n }\n\n createLogicalOperator(logicalOperatorName: string, rules: ISegmentationRule[]): ILogicalOperator {\n switch (logicalOperatorName.toUpperCase()) {\n case 'OR':\n return new OrLogicalOperator(rules);\n case 'AND':\n return new AndLogicalOperator(rules);\n default: {\n throw new Error(`Unrecognized logical operator ${logicalOperatorName} for statement`);\n }\n }\n }\n\n createSegmentationRule(ruleDefinition: any): ISegmentationRule {\n return new SegmentationRule(ruleDefinition);\n }\n\n createComparisonOperator(operatorName: string): IComparisonOperator {\n switch (operatorName.toLowerCase()) {\n case 'equal':\n case '=':\n return new EqualOperator();\n case 'not_equal':\n case 'not equal':\n case '!=':\n return new NotEqualOperator();\n case 'is_falsy':\n case 'is falsy':\n return new IsFalsyOperator();\n case 'greater_than':\n return new GreaterThanOperator(this.dataProvider.logger);\n case 'less_than':\n return new LessThanOperator(this.dataProvider.logger);\n case \"any_of\":\n return new AnyOfOperator(this.dataProvider.logger);\n default:\n throw new Error(`Can't handle comparison operator ${operatorName}`);\n }\n }\n\n private _hasStatementsOrDefaultValue(obj: unknown): obj is {statements?: unknown, defaultValue?: unknown} {\n if(!Check.isNullOrUndefined(obj['statements'])\n || !Check.isNullOrUndefined(obj['defaultValue'])) {\n return true;\n } else {\n return false;\n }\n }\n\n getCurrentPropertyPath(): string {\n return '';\n }\n\n createPropertyContext(propertyName: string): IConfigurationEvaluationContext {\n return new PropertyLevelContext(this, propertyName);\n }\n\n applyValueTransformation(propertyPath: string, value: any): any {\n return value;\n }\n\n createPropertyEvaluator(propertyName: string, propertyOwner: any): IPropertyEvaluator {\n switch (propertyName) {\n case 'gamesId':\n return new GamesIdPropertyEvaluator(propertyOwner, this.dataProvider.admin);\n case 'gamesSettings':\n let propertyValue = propertyOwner.gamesSettings;\n if (propertyOwner.gamesSettings && propertyOwner.gamesSettings.gamesTags) {\n propertyValue = {...propertyValue, gamesTags: this._mergeGamesFromLauncher(propertyOwner.gamesSettings.gamesTags)}\n } else {\n propertyValue = {...propertyValue, gamesTags: this._mergeGamesFromLauncher(this.dataProvider.admin && this.dataProvider.admin.gamesTags)}\n }\n return new PropertyEvaluator(propertyName, this.parsePropertyValue(propertyValue));\n default:\n return new PropertyEvaluator(propertyName, this.parsePropertyValue(propertyOwner[propertyName]));\n }\n }\n\n\n private _mergeGamesFromLauncher(existingGamesTags: any): any {\n\n const demoSettings = {\n demoCTAAnonymous: {pc: true, mobile: true},\n demoCTAAuthorized: {pc: true, mobile: true},\n intermediatePageAnonymous: {pc: true, mobile: true},\n intermediatePageAuthorized: {pc: true, mobile: true}\n };\n\n existingGamesTags = existingGamesTags || {};\n\n if(isInsideAutomation()) {\n Object.keys(existingGamesTags).forEach(gameType => {\n existingGamesTags[gameType]['demoSettings'] = demoSettings;\n });\n }\n\n let launcherGameTypes = this.getLauncherGames();\n\n launcherGameTypes.forEach(gameType => {\n if(existingGamesTags[gameType]) {\n existingGamesTags[gameType]['demoSettings'] = demoSettings;\n } else {\n existingGamesTags[gameType] = {};\n existingGamesTags[gameType]['demoSettings'] = demoSettings;\n }\n });\n\n return existingGamesTags;\n }\n\n getLauncherGames(): number[] {\n return this.dataProvider.getLauncherGames() || [];\n }\n}\n","export const CGP_OBJECT_NAME = 'CGP';\n\n\n","import {ApplicationStartupConfigurations} from '../config-interfaces/application-startup.configurations';\nimport {LauncherOverridesReader} from '../launcher-overrides-reader/launcher-overrides-reader';\nimport {IConfigurationEvaluationDataProvider} from '../../services/configurations/evaluation/configuration-evaluation-context/configuration-evaluation-data-provider.interface';\nimport {PropertiesEvaluator} from '../../services/configurations/evaluation/properties-evaluator/properties-evaluator';\nimport {\n ConfigurationEvaluationContext\n} from '../../services/configurations/evaluation/configuration-evaluation-context/configuration-evaluation-context';\nimport {ILoggerService} from '../../services/logger/logger.service.interface';\nimport {CGP_OBJECT_NAME} from '../constants';\nimport ISdkHooksProvider from './sdk-hooks-provider.interface';\nimport {IThemeDefinition} from \"../../services/theme/theme-definition.interface\";\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\n\nconst overrideJson = require('json-override');\n\nexport class SdkInitializer {\n constructor(private _applicationConfiguration: ApplicationStartupConfigurations,\n private _sdkHooksProvider: ISdkHooksProvider,\n private _launcherOverridesReader: LauncherOverridesReader,\n private _theme: IThemeDefinition,\n private _logger: ILoggerService) {\n\n }\n\n init(): Promise<void> {\n\n return import(/* webpackChunkName: \"cgp-sdk\" */ '../../../sdk/src/core/api').then(module => module.API).then(API => {\n window['LOG_LEVEL'] = this._applicationConfiguration.sdk.config.Logger.logLevel || 'INFO';\n const sdkApi = new API(this._applicationConfiguration.sdk.config);\n let sdkConfigOverrides: any = this.getSdkConfigOverrides();\n\n return new Promise<void>(resolve => {\n let onInitCompleteCallback = () => {\n window[CGP_OBJECT_NAME] = sdkApi;\n resolve();\n };\n\n sdkApi.initialize(sdkConfigOverrides, onInitCompleteCallback);\n });\n });\n\n }\n\n\n private getSdkConfigOverrides() {\n let sdkConfigOverrides = {\n Country: this.getCountryServiceOverrides(),\n Skin: this.getSkinServiceOverrides(),\n Game: this.getGameServiceOverrides(),\n Integration: this.getIntegrationServiceOverrides(),\n Http2: this.getHttp2ServiceOverrides(),\n JackpotToasters: this.getJackpotToastersServiceOverrides(),\n OrbitComponentRender: this.getOrbitComponentRenderOverrides(),\n CashierProxy: this.getCashierProxyOverrides(),\n GameRunnerProxy: this.getGameRunnerProxyOverrides(),\n CasinofiedAnalyticsProxy: this.getCasinofiedAnalyticsProxyOverrides(),\n ExternalLinksProxy: this.getExternalLinksProxyOverrides(),\n ToasterProxy: this.getToasterProxyOverrides(),\n PlayerMigrationProxy: this.getPlayerMigrationProxyOverrides(),\n LinksNavigationProxy: this.getLinksNavigationProxyOverrides(),\n SpinnerProxy: this.getSpinnerServiceProxyOverrides(),\n Regulation: {\n getOrbitRegulationProxy: () => this._sdkHooksProvider.getRegulationServiceProxy()\n },\n DialogProxy: {\n getDialogService: () => this._sdkHooksProvider.getDialogService()\n },\n TranslationProxy: {\n getTranslationService: () => this._sdkHooksProvider.getTranslationService()\n },\n AbTesting: {\n abTestingFeatureDataProviderService: () => this._sdkHooksProvider.getAbTestingFeatureDataProviderService()\n }\n };\n\n overrideJson(sdkConfigOverrides, this._evaluateSdkConfigsInsideOrbit());\n return sdkConfigOverrides;\n }\n\n private getJackpotToastersServiceOverrides(): any {\n return {\n toasterImage: this._theme.shellTheme.assets.images.jackpot_widget.crown_png.toString()\n\n };\n }\n\n private getCountryServiceOverrides(): any {\n return {\n country: this._applicationConfiguration.country,\n };\n }\n\n private getSkinServiceOverrides(): any {\n return this._applicationConfiguration.orbit?.config?.SDK?.Skin || {};\n }\n\n private _evaluateSdkConfigsInsideOrbit(): any {\n let sdkConfigsInsideOrbit = this._applicationConfiguration.orbit && this._applicationConfiguration.orbit.config && this._applicationConfiguration.orbit.config.SDK;\n if(!sdkConfigsInsideOrbit) {\n return {};\n }\n\n let segments: Record<string, unknown> = {\n env: this._applicationConfiguration.sdk.config.ExtraProperties.env\n };\n\n let configEvaluationDataProvider: IConfigurationEvaluationDataProvider = {\n getSegmentValue: (segmentName => segments[segmentName]),\n getLauncherGames: () => [],\n admin: this._applicationConfiguration.admin,\n logger: this._logger\n };\n\n let context = new ConfigurationEvaluationContext(configEvaluationDataProvider);\n let evaluator = PropertiesEvaluator.fromRoot(sdkConfigsInsideOrbit, context);\n return evaluator.evaluate(context);\n }\n\n private getGameServiceOverrides(): any {\n\n let result: any = {\n resolveGameImagePath: (imageFilePath: string) => this._sdkHooksProvider.resolveGameImagePath(imageFilePath)\n };\n\n return result;\n }\n\n private _waitForMapperCGP = (resolve: (value?: unknown) => void) => {\n let mapperData = this._sdkHooksProvider.getGameTypesMappingForSdk();\n if(mapperData) {\n resolve(mapperData);\n } else {\n setTimeout(() => this._waitForMapperCGP(resolve), 5);\n }\n };\n\n private _gameTypeMapper() {\n return new Promise<any>(resolve => {\n this._waitForMapperCGP(resolve);\n });\n };\n\n private _getHeaderRegulationDataElement() {\n return new Promise<any>(resolve => {\n this._waitForHeaderRegulationDataElement(resolve);\n });\n };\n\n private _waitForHeaderRegulationDataElement = (resolve: (value?: unknown) => void) => {\n this._sdkHooksProvider.getHeaderRegulationDataElement().then(headerRegulationDataElement => {\n this.waitForElement(headerRegulationDataElement, resolve);\n })\n\n };\n\n waitForElement(element: HTMLElement, resolve: (value?: unknown) => void) {\n if(element) {\n resolve(element);\n } else {\n setTimeout(() => this._waitForHeaderRegulationDataElement(resolve), 5);\n }\n }\n\n private getIntegrationServiceOverrides(): any {\n let launcherOverrides = this._launcherOverridesReader.getOverrides();\n\n return {\n gameTypeMapper: this._gameTypeMapper.bind(this),\n proxyLink: (url: string) => this._sdkHooksProvider.redirectProxy(url),\n openInNewWindowHook: () => this._sdkHooksProvider.openInNewWindowHook(),\n isMiniCipFunc: () => this._sdkHooksProvider.isMiniCip(),\n isMiniCisFunc: () => this._sdkHooksProvider.isMiniCis(),\n headerRegulationDataElement: this._getHeaderRegulationDataElement.bind(this),\n CMSSource: launcherOverrides?.orbit?.cmsSource,\n getOrbitMarketingData: async (marketingParams?: MarketingParams) => (await this._sdkHooksProvider.getMarketingService()).getMarketingData(marketingParams)\n };\n }\n\n\n private getHttp2ServiceOverrides(): any {\n let result: any = {};\n let launcherOverrides = this._launcherOverridesReader.getOverrides();\n if(launcherOverrides?.sdk?.api) {\n result.origin = launcherOverrides.sdk.api;\n }\n\n result.skin = this._applicationConfiguration.skin;\n result.skinOverride = this._applicationConfiguration.skinOverride;\n result.useCountryAsState = Boolean(launcherOverrides?.orbit?.useCountryAsState ?? this._applicationConfiguration.useCountryAsState)\n return result;\n }\n\n private getOrbitComponentRenderOverrides(): any {\n return {\n getOrbitComponentToSdkAdapter: () => this._sdkHooksProvider.getOrbitComponentToSdkAdapter()\n }\n }\n\n private getCashierProxyOverrides(): any {\n return {\n getCashierService: () => this._sdkHooksProvider.getCashierService()\n };\n }\n\n private getGameRunnerProxyOverrides(): any {\n return {\n getGameRunnerService: () => this._sdkHooksProvider.getGameRunnerService()\n };\n }\n\n private getCasinofiedAnalyticsProxyOverrides(): any {\n return {\n getCasinofiedAnalyticsService: () => this._sdkHooksProvider.getCasinofiedAnalyticsService()\n };\n }\n\n private getSpinnerServiceProxyOverrides(): any {\n return {\n getSpinnerService: () => this._sdkHooksProvider.getSpinnerService()\n };\n }\n\n\n private getPlayerMigrationProxyOverrides(): any {\n return {\n getPlayerMigrationService: () => this._sdkHooksProvider.getPlayerMigrationService()\n };\n }\n\n private getExternalLinksProxyOverrides() {\n return {\n externalLinksService: () => this._sdkHooksProvider.getExternalLinksProxyService()\n }\n }\n\n private getToasterProxyOverrides() {\n return {\n toasterService: () => this._sdkHooksProvider.getToasterProxyService()\n }\n }\n\n private getLinksNavigationProxyOverrides() {\n return {\n linksNavigation: () => this._sdkHooksProvider.getLinksNavigationService()\n };\n }\n\n}\n\n\n\n","export const QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE:string = 'dontShowEnvironmentPopUpBlockerAgain';","import { QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE } from './qa-environment-pop-up-blocker.service.constants';\nimport { ServiceBase } from './../ServiceBase';\nimport { IQAEnvironmentPopUpBlockerService } from './qa-environment-pop-up-blocker.service.interface';\nconst md5 = require('md5');\n\nexport class QAEnvironmentPopUpBlockerService extends ServiceBase implements IQAEnvironmentPopUpBlockerService {\n\n validatePassword(password) {\n if (md5(password) === this.services.configuration.servicesConfigs.QAEnvironmentPopUp.validationKey) {\n this._setCookie();\n return true;\n }\n return false;\n }\n\n private _setCookie() {\n let expirationDate:Date = new Date();\n expirationDate.setMonth(expirationDate.getMonth() + 3);\n this.services.cookies.createCookie(QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE, 'true', expirationDate);\n }\n\n}","import { Check } from '@sparkware/app-utils';\nimport { observable, action, computed, makeObservable } from 'mobx';\nimport { ServiceBase } from '../ServiceBase';\nimport { IVideoPlayer } from './video-players/video-player.interface';\nimport { IServiceFactoryExtended } from '../service-factory-extended.interface';\nimport { IVideoPlayingService } from './video-playing.service.interface';\nimport {GameInfo} from \"../games/game-info\";\nimport {ISwipeLogicHandler} from \"../arenas/models/swiper-logic-handler/swiper-logic-handler.interface\";\n\nexport abstract class VideoPlayingServiceBase extends ServiceBase implements IVideoPlayingService {\n\n public abstract gaCategory: string;\n\n @observable.ref\n isSupported: boolean = null;\n\n @action.bound\n private _setIsSupported(isSupported: boolean): void {\n this.isSupported = isSupported;\n }\n\n @observable.ref\n isAppVisible: boolean = true;\n\n @action.bound\n private _setIsAppVisible(isAppVisible: boolean): void {\n this.isAppVisible = isAppVisible;\n }\n\n @computed\n get isDisabledPrelogin(): boolean {\n if (this.services.user.isAuthorized) {\n return false;\n }\n\n const currentRegulationCode = this.services.regulation.getRegulationCode();\n const disableForRegulationPreLogin = this.services.configuration.servicesConfigs.LiveVideoStream.disableForRegulationPreLogin[currentRegulationCode];\n return !Check.isNullOrUndefined(disableForRegulationPreLogin) && disableForRegulationPreLogin;\n }\n\n //Swiper Handler for the orbit swiper handling the current playing video.\n //This implementation breaks if in the future there will be > 1 swipers playing the same type of video in the same page.\n //But for now, we need this to swipe to & start the next video after the current one finishes playing.\n private _swiperHandler: ISwipeLogicHandler | null = null;\n\n public setSwiperHandler(value: ISwipeLogicHandler): void {\n this._swiperHandler = value;\n }\n\n public getSwiperHandler(): ISwipeLogicHandler | null {\n return this._swiperHandler;\n }\n\n constructor (services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._init();\n this.services.sdk.events.onAppPaused(() => {\n this._setIsAppVisible(false);\n });\n this.services.sdk.events.onAppResumed(() => {\n this._setIsAppVisible(true);\n });\n services.sdk.events.onGameOpen(() => {\n this.services.user.preferences.sound.setIsMuted(true);\n });\n }\n\n @observable.ref\n bandwidthEstimate: number = 500000;\n @action.bound\n setBandwidthEstimate(value:number): void {\n this.bandwidthEstimate = value;\n }\n\n private _init() {\n const isSupported = this._checkIfSupported();\n\n if (!isSupported) {\n this.services.sdk.structuredLoggingService\n .getLogger()\n .addCategory(this.gaCategory)\n .addAction('VideoStreamNotSupported')\n .info();\n }\n\n this._setIsSupported(isSupported);\n }\n\n protected abstract _checkIfSupported(): boolean;\n\n public abstract getVideoPlayer(gameInfo: GameInfo, videoReference: HTMLVideoElement): IVideoPlayer;\n}","const PAUSABLE_TIMER_STATES = {\n EMPTY: '',\n PAUSED: 'paused',\n COUNTING: 'counting',\n};\n\nexport class PausableTimer {\n private _timerId: number;\n private _remainingTime: number;\n private _startTime: number;\n private _callback: Function;\n private _state: string = PAUSABLE_TIMER_STATES.EMPTY;\n\n constructor(callback: Function, delay: number) {\n this._remainingTime = delay;\n this._callback = callback;\n this.resume();\n }\n\n public pause() {\n if (this._state !== PAUSABLE_TIMER_STATES.PAUSED) {\n let timeElapsed = Date.now() - this._startTime;\n \n this._state = PAUSABLE_TIMER_STATES.PAUSED;\n this._clearTimer();\n this._remainingTime = this._remainingTime - timeElapsed;\n }\n }\n\n public resume() {\n if (this._state !== PAUSABLE_TIMER_STATES.COUNTING) {\n this._state = PAUSABLE_TIMER_STATES.COUNTING;\n this._clearTimer();\n this._startTime = Date.now();\n this._timerId = setTimeout(this._callback, this._remainingTime);\n }\n }\n\n public destroy() {\n this._clearTimer();\n this._timerId = null;\n }\n\n private _clearTimer() {\n if (this._timerId) {\n clearTimeout(this._timerId);\n }\n }\n}","import {Check} from '@sparkware/app-utils';\nimport {IServiceFactoryExtended} from '../../../service-factory-extended.interface';\nimport {PausableTimer} from '../../../../../common/utils/pausable-timer';\nimport {action, makeObservable, observable} from 'mobx';\nimport {IBitrateStats, IBufferingTime, IFramesDropStats, ILogType, IVideoPlayer} from '../video-player.interface';\nimport { OrbitMarketingEventAnalyticsLabel } from \"../../../analytics/analytics.service.interface\";\n\nconst DROP_FRAMES_THRESHOLD: number = 0.2;\n\nexport class VideoLiveStreamBasePlayer implements IVideoPlayer {\n\n private _gameType: number;\n private _videoReference: HTMLVideoElement;\n private _streamSource: string;\n private _playerType: string;\n private _pausableTimer: PausableTimer = null;\n\n private _bufferingStartTime: number;\n private _firstLoadTimeLogged: boolean = false;\n private _isFirstTimePlay: boolean = true;\n private _bufferingTimeValues: number[] = [];\n private _hadPlayStarted: boolean = false;\n private _isVisible: boolean = false;\n private _watchTimeLimitMs: number = 0;\n\n @observable.ref\n hasError: boolean = false;\n\n @action.bound\n _setHasError(value:boolean): void {\n this.hasError = value;\n }\n\n @observable.ref\n isLoading: boolean = true;\n\n @action.bound\n _setIsLoading(value:boolean): void {\n this.isLoading = value;\n }\n\n @observable.ref\n watchTimeLimitReached: boolean = false;\n\n @action.bound\n _setWatchTimeLimitReached(value:boolean): void {\n this.watchTimeLimitReached = value;\n }\n\n @observable.ref\n autoplayAllowed: boolean = true;\n\n @action.bound\n _setAutoplayAllowed(value:boolean): void {\n this.autoplayAllowed = value;\n }\n\n private _getGACategory = (): string => {\n return this._services.liveStreamPlaying.gaCategory;\n }\n\n constructor(playerType:string, gameType:number, videoReference: HTMLVideoElement, streamSource:string, watchTimeLimit: number, private readonly _services: IServiceFactoryExtended) {\n makeObservable(this);\n\n this._playerType = playerType;\n this._videoReference = videoReference;\n this._streamSource = streamSource;\n this._gameType = gameType;\n this._watchTimeLimitMs = watchTimeLimit;\n\n this._pausableTimer = new PausableTimer(() => {\n this.onWatchTimeLimitReached();\n }, watchTimeLimit);\n\n window.addEventListener('offline', this._onGoingOffline);\n this._videoReference.addEventListener('waiting', this._onWaiting);\n this._videoReference.addEventListener('playing', this._onPlaying);\n this._videoReference.addEventListener('canplay', this._onCanPlay);\n this._videoReference.addEventListener('error', this._onError);\n }\n\n get videoReference(): HTMLVideoElement {\n return this._videoReference;\n }\n\n get streamSource(): string {\n return this._streamSource;\n }\n\n play() {\n if (!this.watchTimeLimitReached) {\n this._isVisible = true;\n this._bufferingStartTime = performance.now();\n console.log('LSP play video for ' + this._gameType);\n this._videoReference.play()\n .then(() => {\n this._setAutoplayAllowed(true);\n console.log('LSP set auto-play video for ' + this._gameType);\n })\n .catch(error => {\n if (error.name === 'NotAllowedError') {\n // error triggered when autoplay of video is not allowed\n this._onAutoplayError();\n } else {\n this._onError(error);\n }\n });\n\n if (this._isFirstTimePlay) {\n this._isFirstTimePlay = false;\n this._log('info', 'play');\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'IN_VIEW', OrbitMarketingEventAnalyticsLabel.VideoPlayback, this._gameType.toString());\n }\n }\n }\n\n pause() {\n this._isVisible = false;\n\n console.log('LSP try pause for ' + this._gameType);\n\n // we can pause the video only if had ever started playing. A pause before first time play will cause in an error\n // play() request was interrupted by a call to pause()\n if (this._hadPlayStarted) {\n this._videoReference.pause();\n console.log('LSP pause for ' + this._gameType);\n }\n\n this._pausableTimer.pause();\n this._logAverageBufferingTimeOnPause();\n }\n\n load() {\n this._videoReference.load();\n }\n\n handleError(error: any) {\n this._onError(error);\n }\n\n onWatchTimeLimitReached() {\n this._videoReference.pause();\n this._setWatchTimeLimitReached(true);\n this._logAverageBufferingTimeOnEnd();\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'LIMIT_REACH', `VIDEO_PLAYBACK_LIMIT_${this._watchTimeLimitMs / 1000}`, this._gameType.toString());\n }\n\n destroy() {\n this._pausableTimer.destroy();\n this._pausableTimer = null;\n\n window.removeEventListener('offline', this._onGoingOffline);\n this._videoReference.removeEventListener('waiting', this._onWaiting);\n this._videoReference.removeEventListener('playing', this._onPlaying);\n this._videoReference.removeEventListener('canplay', this._onCanPlay);\n this._videoReference.removeEventListener('error', this._onError);\n this._videoReference = null;\n }\n\n logUIAction(type: ILogType, action: string) {\n this._log(type, action);\n }\n\n protected _onWaiting = () => {\n // Occurs when playback stops because the next frame of a video resource is not available.\n // Example: video had played everything that was loaded and cannot play further until the next sequence is loaded\n if (this.autoplayAllowed) {\n // For some reason, the waiting event is dispatched after catching the 'NotAllowedError'\n // The following code related to loading should execute only when we have a real waiting to load,\n // so only when the playback can start\n this._bufferingStartTime = performance.now();\n this._setIsLoading(true);\n }\n this._pausableTimer.pause();\n }\n\n protected _onPlaying = () => {\n // Occurs when the video playback is first started or when the playback resumes.\n this._hadPlayStarted = true;\n this._logFirstLoadTimeUntilPlay();\n this._setIsLoading(false);\n this._pausableTimer.resume();\n\n console.log('LSP onPlaying event for ' + this._gameType);\n \n if (!this._isVisible) {\n console.log('LSP onPlaying but paused due to not visible for ' + this._gameType);\n this.pause();\n }\n }\n\n private _onCanPlay = () => {\n // Occurs when the video playback resumes.\n // Example: if video was previously paused due to a waiting event, this will let us know that the next sequence is loaded\n // and the video will play further on\n // NOTE: usually the 'playing' event is triggered in the same conditions, but on iOS devices is not so we cannot base on 'playing' event\n // Example: on iOS devices, even if the video is playing, if you press unmute for the first time, a waiting event will be triggered, without\n // having also a 'playing' event trigger. Related bug: #1755199\n this._bufferingTimeValues.push(performance.now() - this._bufferingStartTime);\n this._setIsLoading(false);\n this._pausableTimer.resume();\n console.log('LSP onCanPlay event for ' + this._gameType);\n }\n\n private _onError = (err: ErrorEvent) => {\n this._setHasError(true);\n console.error('Live stream error', err);\n this._log('error', 'VideoStreamError');\n }\n\n private _onAutoplayError = () => {\n console.error('LSP AutoplayNotAllowed error for ' + this._gameType);\n\n this._setAutoplayAllowed(false);\n this._setIsLoading(false);\n this._log('info', 'AutoplayNotAllowed');\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'AUTOPLAY', OrbitMarketingEventAnalyticsLabel.Error, this._gameType.toString());\n }\n\n private _onGoingOffline = () => {\n this._setHasError(true);\n }\n\n private _getBufferAverageTime(): number {\n return this._bufferingTimeValues.reduce((prevValue, currentValue) => {\n return prevValue + currentValue\n }, 0);\n }\n\n private _logAverageBufferingTimeOnPause() {\n const totalBufferTime = this._getBufferAverageTime();\n const customData: IBufferingTime = {\n time: totalBufferTime / this._bufferingTimeValues.length\n };\n\n this._log('info', 'AvgBufferingTime', customData);\n }\n\n private _logAverageBufferingTimeOnEnd() {\n const totalBufferTime = this._getBufferAverageTime();\n const customData: IBufferingTime = {\n time: totalBufferTime / this._bufferingTimeValues.length,\n occurrence: this._bufferingTimeValues.length\n };\n\n this._log('info', 'AvgBufferingData', customData);\n }\n\n private _logFirstLoadTimeUntilPlay() {\n if (!this._firstLoadTimeLogged) {\n const firstLoadTime = performance.now() - this._bufferingStartTime;\n const loadTime: IBufferingTime = {\n time: firstLoadTime\n }\n this._firstLoadTimeLogged = true;\n this._log('info', 'FirstLoad', loadTime);\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'PLAY', OrbitMarketingEventAnalyticsLabel.VideoPlayback, this._gameType.toString());\n }\n }\n\n protected _checkDroppedFPS(droppedFrames: number, decodedFrames: number) {\n if (!this._videoReference.paused) {\n // when video is paused, we do not care about video frames\n // since on paused no frame is rendered\n\n const droppedFramesRatio = droppedFrames/decodedFrames;\n if (droppedFramesRatio > DROP_FRAMES_THRESHOLD) {\n // when dropped frames ratio is greater than the threshold we control\n // we want to log it to Elastic\n\n const framesDropData: IFramesDropStats = {\n droppedFrames: droppedFrames,\n totalFrames: decodedFrames\n }\n this._log('info', 'FpsDrop', framesDropData);\n }\n }\n }\n\n protected _log(type: ILogType, action: string, customData: IBufferingTime | IBitrateStats | IFramesDropStats = null) {\n let structuredLoger = this._services.sdk.structuredLoggingService\n .getLogger()\n .addCategory(this._services.liveStreamPlaying.gaCategory)\n .addAction(action)\n .addLabel(this._playerType)\n .addValue(this._gameType.toString());\n\n if (!Check.isNullOrUndefined(customData)) {\n structuredLoger.addCustomData(customData);\n }\n\n switch (type) {\n case 'error':\n structuredLoger.error();\n break;\n case 'info':\n default:\n structuredLoger.info();\n break;\n }\n }\n}\n","import { Check } from '@sparkware/app-utils';\nimport { IServiceFactoryExtended } from '../../../../service-factory-extended.interface';\nimport { VideoLiveStreamBasePlayer } from '../video-live-stream-player-base';\n\nconst VIDEO_STREAM_MIME_TYPE = 'application/vnd.apple.mpegurl';\n\n/**\n * Intervals used in this class are for fixing #1767947 and #1773060\n * The normal flow is like this:\n * - video element triggers a 'playing' or a 'canplay' event. On this event \n * the loading state is set to false (loading screen is hidden and the watch time counter resumes)\n * - video element triggers a 'waiting' event. On this event the loading state\n * is set to true, so the loading screen appears and the watch time counter is paused.\n * BUT, this events are not triggered also on Android. The 'waiting' event is not triggered but the video freeze so a loading is in progress\n * causing the loading screen to not appear and the watch time to still count how much the user is watching the movie.\n * \n * The solution for this, is to have a setInterval of 100ms and on each tick to check the playhead position against the previous playhead position.\n * If they are the same, it means that the video is loading.\n */\nconst TICK_INTERVAL = 100;\n// const that describe on how many ticks we want to check fps\n// in this case, we want to check FPS on every 1 second \nconst TICK_REPEATS_FOR_FPS_CHECK = 10;\nexport class LiveStreamNativePlayer extends VideoLiveStreamBasePlayer {\n private _tickInterval = null;\n private _previousTime = 0;\n\n private _isVideoPlaybackQualityAvailable: boolean = false;\n private _lastPeriodDroppedFrames: number = 0;\n private _lastPeriodDecodedFrames: number = 0;\n private _tickCount: number = 0;\n\n public static isSupported(videoEl: HTMLVideoElement): boolean {\n const validCanPlayValue = ['probably', 'maybe'];\n const canPlayResultValue = videoEl.canPlayType(VIDEO_STREAM_MIME_TYPE);\n\n return validCanPlayValue.includes(canPlayResultValue);\n }\n\n constructor(services: IServiceFactoryExtended, gameType: number, videoReference: HTMLVideoElement, streamSource:string, watchTimeLimit: number) {\n super('native', gameType, videoReference, streamSource, watchTimeLimit, services);\n\n if (Check.isFunction(videoReference.getVideoPlaybackQuality)) {\n this._isVideoPlaybackQualityAvailable = true;\n }\n }\n\n play() {\n if (Check.isEmpty(this.videoReference.src) || this.videoReference.src !== this.streamSource) {\n this.videoReference.src = this.streamSource;\n }\n if (!this.watchTimeLimitReached) {\n this._setInterval();\n }\n super.play();\n }\n\n pause() {\n this._clearInterval();\n super.pause();\n }\n\n onWatchTimeLimitReached() {\n super.onWatchTimeLimitReached();\n this._clearInterval();\n }\n\n destroy() {\n this._clearInterval();\n this._isVideoPlaybackQualityAvailable = false;\n\n super.destroy();\n }\n\n private _setInterval() {\n if (!this._tickInterval) {\n this._tickInterval = setInterval(this._onTick, TICK_INTERVAL);\n }\n }\n\n private _clearInterval() {\n if (this._tickInterval) {\n clearInterval(this._tickInterval);\n this._tickInterval = null;\n }\n }\n\n private _onTick = () => {\n // if stream didn't buffered anything there is no point in trying to detect loading\n // because is clear that the video is loading\n if (this.videoReference.readyState === 0) {\n return;\n }\n\n const currentTime = this.videoReference.currentTime;\n if (currentTime !== this._previousTime) {\n // video is playing because the playhead is moving\n this._previousTime = currentTime;\n if (this.isLoading) {\n //if loading is already set to false, meaning that the video is playing\n // don't spam the onPlaying\n this._onPlaying();\n }\n } else {\n // video is stalled(loading) because the playhead is not moving\n if (!this.isLoading) {\n //if loading is already set to true, meaning that the video is loading\n // don't spam the onWaiting\n this._onWaiting();\n }\n }\n\n this._tickCount++;\n if (this._tickCount === TICK_REPEATS_FOR_FPS_CHECK) {\n this._tickCount = 0;\n this._checkFPSInterval();\n }\n }\n\n private _checkFPSInterval() {\n // https://developer.mozilla.org/en-US/docs/Web/API/VideoPlaybackQuality\n if (this.videoReference) {\n if (this._isVideoPlaybackQualityAvailable) {\n const videoPlaybackQuality = this.videoReference.getVideoPlaybackQuality();\n this._checkFPS(\n videoPlaybackQuality.droppedVideoFrames,\n videoPlaybackQuality.totalVideoFrames\n );\n } else {\n // HTMLVideoElement doesn't include the webkit types\n this._checkFPS(\n (this.videoReference as any).webkitDroppedFrameCount as number,\n (this.videoReference as any).webkitDecodedFrameCount as number\n );\n }\n }\n }\n\n private _checkFPS(droppedFrames: number, decodedFrames:number) {\n // get dropped and decoded frames from the last period\n const currentDropped = droppedFrames - this._lastPeriodDroppedFrames;\n const currentDecoded = decodedFrames - this._lastPeriodDecodedFrames;\n\n this._checkDroppedFPS(currentDropped, currentDecoded);\n\n this._lastPeriodDroppedFrames = droppedFrames;\n this._lastPeriodDecodedFrames = decodedFrames;\n }\n}\n","import {IServiceFactoryExtended} from '../../../../service-factory-extended.interface';\nimport {VideoLiveStreamBasePlayer} from '../video-live-stream-player-base';\nimport Hls, {Events, ErrorData, FPSDropData, LevelUpdatedData, MediaAttachedData, ManifestParsedData, FragLoadedData, HlsConfig} from 'hls.js';\nimport {IBitrateStats} from '../../video-player.interface';\n\nexport class VideoHlsBasePlayer extends VideoLiveStreamBasePlayer {\n protected _hlsInstance: Hls;\n protected _isManifestParsed: boolean = false;\n private _bitrateStats: IBitrateStats = {\n min: Number.MAX_VALUE,\n max: Number.MIN_VALUE\n }\n\n protected readonly HLS_CONFIG: HlsConfig = {\n ...Hls.DefaultConfig,\n capLevelOnFPSDrop: true\n }\n\n public static isSupported(): boolean {\n return Hls.isSupported();\n }\n\n constructor(protected readonly services: IServiceFactoryExtended, gameType: number, videoReference: HTMLVideoElement, streamSource: string, watchTimeLimit: number) {\n super('HLS', gameType, videoReference, streamSource, watchTimeLimit, services);\n }\n\n onWatchTimeLimitReached() {\n super.onWatchTimeLimitReached();\n this._hlsInstance.stopLoad();\n this._log('info', 'VideoPlayedBitrate', this._bitrateStats);\n }\n\n destroy() {\n this._hlsInstance?.off(Hls.Events.ERROR, this._onHlsError);\n this._hlsInstance?.off(Hls.Events.MEDIA_ATTACHED, this._onMediaAttached);\n this._hlsInstance?.off(Hls.Events.MANIFEST_PARSED, this._onManifestParsed);\n this._hlsInstance?.off(Hls.Events.LEVEL_UPDATED, this._onLevelUpdated);\n this._hlsInstance?.off(Hls.Events.FPS_DROP, this._onFpsDrop);\n this._hlsInstance?.off(Hls.Events.FRAG_LOADED, this._onBandwidthEstimate)\n\n this._hlsInstance?.destroy();\n super.destroy();\n\n }\n\n protected _onHlsError = (event: Events.ERROR, data: ErrorData) => {\n const {fatal} = data;\n if (fatal) {\n this._hlsInstance.destroy();\n this.handleError(data);\n }\n }\n\n protected _onMediaAttached = (event: Events.MEDIA_ATTACHED, data: MediaAttachedData) => {\n this._hlsInstance.loadSource(this.streamSource);\n }\n\n protected _onManifestParsed = (event: Events.MANIFEST_PARSED, data: ManifestParsedData) => {\n super.play();\n this._isManifestParsed = true;\n }\n\n protected _onLevelUpdated = (event: Events.LEVEL_UPDATED, data: LevelUpdatedData) => {\n const updatedBitrate = this._hlsInstance.levels[data.level].bitrate;\n if (updatedBitrate < this._bitrateStats.min) {\n this._bitrateStats.min = updatedBitrate;\n }\n if (updatedBitrate > this._bitrateStats.max) {\n this._bitrateStats.max = updatedBitrate;\n }\n }\n\n protected _onFpsDrop = (event: Events.FPS_DROP, data: FPSDropData) => {\n // fps drop event is triggered on every 'fpsDroppedMonitoringPeriod' interval, only if\n // 'capLevelOnFPSDrop' is set to true. It contains information regarding dropped frames\n // and total frames from the last interval\n // 'capLevelOnFPSDrop' default value is false and 'fpsDroppedMonitoringPeriod' is 5000 ms\n // more regarding configuration https://github.com/video-dev/hls.js/blob/master/docs/API.md\n // fps controller implementation https://github.com/video-dev/hls.js/blob/ca644667584c8128a7620c0df4ef9152c23451e9/src/controller/fps-controller.ts\n\n this._checkDroppedFPS(data.currentDropped, data.currentDecoded);\n }\n\n protected _onBandwidthEstimate = (event: Events.FRAG_LOADED, data: FragLoadedData) => {\n this.services.videoOnDemandPlaying.setBandwidthEstimate(this._hlsInstance.bandwidthEstimate);\n }\n}\n","import Hls from 'hls.js';\nimport {VideoHlsBasePlayer} from './video-player-hls-base';\n\nexport class LiveStreamHlsPlayer extends VideoHlsBasePlayer {\n\n play() {\n if (this._hlsInstance) {\n this._hlsInstance.startLoad();\n super.play();\n } else {\n this._hlsInstance = this._createHlsInstance();\n }\n }\n\n pause() {\n super.pause();\n this._hlsInstance?.stopLoad();\n }\n\n private _createHlsInstance(): Hls {\n const hlsInstance = new Hls(this.HLS_CONFIG);\n\n hlsInstance.on(Hls.Events.ERROR, this._onHlsError);\n hlsInstance.on(Hls.Events.MEDIA_ATTACHED, this._onMediaAttached);\n hlsInstance.on(Hls.Events.LEVEL_UPDATED, this._onLevelUpdated);\n hlsInstance.on(Hls.Events.FPS_DROP, this._onFpsDrop);\n hlsInstance.on(Hls.Events.FRAG_LOADED, this._onBandwidthEstimate);\n hlsInstance.bandwidthEstimate = this.services.videoOnDemandPlaying.bandwidthEstimate;\n\n hlsInstance.on(Hls.Events.MANIFEST_PARSED, this._onManifestParsed);\n\n hlsInstance.attachMedia(this.videoReference);\n\n return hlsInstance;\n }\n}\n","import {VideoPlayingServiceBase} from \"./video-playing-service-base\";\nimport {GameInfo} from \"../games/game-info\";\nimport {IVideoPlayer} from \"./video-players/video-player.interface\";\nimport {LiveStreamNativePlayer} from \"./video-players/live-stream-players/native/video-live-stream-player-native\";\nimport {LiveStreamHlsPlayer} from \"./video-players/live-stream-players/hls/video-live-stream-player-hls\";\n\nexport const LIVE_STREAM_WATCH_TIME_LIMIT: number = 120000;\n\nexport class LiveStreamPlayingService extends VideoPlayingServiceBase {\n\n public gaCategory = \"ORBIT_LIVE_STREAM\";\n\n protected _checkIfSupported() {\n const videoEl = document.createElement('video');\n try {\n if (LiveStreamNativePlayer.isSupported(videoEl)) {\n return true;\n }\n\n return LiveStreamHlsPlayer.isSupported();\n }\n finally {\n try {\n videoEl.src = \"\";\n videoEl.load();\n videoEl.remove();\n } catch (err) {\n this.services.logger.error('LiveStreamPlayingService - Failed to release temp video element', err);\n }\n }\n\n }\n\n getVideoPlayer(gameInfo: GameInfo, videoReference: HTMLVideoElement, dontAutoSwipe?: boolean): IVideoPlayer {\n\n const gameType = gameInfo.gameType;\n const streamSource = gameInfo.videoURL;\n\n if(gameInfo.slideCover){\n videoReference.poster = gameInfo.slideCover;\n }\n\n //In the future, this should be coming from admin as well.\n const watchTimeLimit = LIVE_STREAM_WATCH_TIME_LIMIT;\n\n // We need to check also if not android because Evo live stream games not working on android real device because they use WAF and they don't get referer in android native.\n if (LiveStreamNativePlayer.isSupported(videoReference) && !this.services.device.os.isAndroid) {\n return new LiveStreamNativePlayer(this.services, gameType, videoReference, streamSource, watchTimeLimit);\n }\n\n if (LiveStreamHlsPlayer.isSupported()) {\n return new LiveStreamHlsPlayer(this.services, gameType, videoReference, streamSource, watchTimeLimit);\n }\n\n return null;\n }\n}\n","import {ITranslationService} from \"./translation.service.interface\";\n\nexport class TextTranslation {\n constructor(private readonly translationService: ITranslationService,\n public readonly translationKey: string,\n private readonly _parameters?: any) {\n }\n\n get translation(): string {\n return this.translationService.translate(this.translationKey, this._parameters);\n }\n\n}","import {ITranslationService} from './translation.service.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {Check} from \"@sparkware/app-utils\";\nimport {TextTranslation} from \"./text-translation\";\n\nexport class TranslationService extends ServiceBase implements ITranslationService {\n\n get langData(): any {\n return this.services.language.translatedTexts;\n }\n\n translate(key: string, parameters?: any): string {\n try {\n let translatedPhrase = '';\n\n if (this.langData && key !== '') {\n if (this.langData[key]) {\n translatedPhrase = this.langData[key];\n } else {\n\n this.services.logger.debug(`Missing translation for ${key} in language ${this.services.language.currentLanguage}`);\n\n return key;\n }\n }\n return this._resolveBraces(translatedPhrase, parameters);\n } catch (err) {\n console.log('error in transform function, error message: ', err);\n return '';\n }\n }\n\n getTranslation(key: string, parameters?: any): TextTranslation {\n return new TextTranslation(this, key, parameters);\n }\n\n private _resolveBraces(str: string, value = null) {\n\n if('' === str)\n return str;\n\n if (Check.isObject(value)) {\n Object.keys(value).forEach(key => str = str.replace(`{${key}}`, value[key]));\n }\n else {\n\n let objectKeys = str.match(/[^{]+(?=\\})/g) || []; //array of object keys that have to be replaced (looking for {foo})\n\n for (let objectKey of objectKeys) {\n if (value) {\n str = str.replace(`{${objectKey}}`, value);\n } else {\n //if we didn't get value we will look the key in the config\n str = str.replace(`{${objectKey}}`, this.services.configuration.resolveConfigurationValue(objectKey));\n }\n }\n\n }\n return str;\n\n }\n}\n","export const CURRENCY_SYMBOLS: Record<string, string> = {\n CAD: 'C$',\n NOK: 'Kr.',\n USD: '$',\n EUR: '€',\n GBP: '£',\n DKK: 'Kr.',\n SEK: 'kr',\n RON: 'RON',\n BRL: 'R$'\n};","import {ICurrencyService} from './currency.service.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {CURRENCY_SYMBOLS} from \"./currency-symbol.interface\";\n\nexport class CurrencyService extends ServiceBase implements ICurrencyService {\n\n formatMoney(value: number, withDecimal?: boolean): string {\n return this.services.sdk.formatMoney(value, withDecimal);\n }\n\n // TODO: Check if formatMinMaxBet can be called with undefined/null\n // after switching to strictNullCheck and repair the signature and code\n formatMinMaxBet(minBet: number, maxBet: number): string | null {\n if(minBet && maxBet) {\n return this.formatMoney(minBet, true) + ' - ' + this.formatMoney(maxBet, true);\n } else {\n return null;\n }\n }\n\n get currencyIso3(): string {\n return this.services.sdk.getCurrencyIso3();\n }\n\n get getCurrencySymbol(): string {\n return CURRENCY_SYMBOLS[this.currencyIso3] || this.currencyIso3;\n }\n}\n","import {\n ISendElasticEventOptions,\n IAnalyticsService,\n OrbitUserFlowAnalyticsCategory,\n OrbitUserFlowAnalyticsAction,\n OrbitUserFlowAnalyticsLabel,\n OrbitMarketingEventAnalyticsCategory,\n OrbitMarketingEventAnalyticsLabel,\n OrbitMarketingEventAnalyticsAction,\n OrbitAIFeatureAnalyticsCategory,\n OrbitAIFeatureAnalyticsAction\n} from './analytics.service.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {IElasticEventData, IStructuredLogger} from '../../../common/interfaces/structured-logging-service-interface';\nimport {Check} from \"@sparkware/app-utils\";\n\nexport class AnalyticsService extends ServiceBase implements IAnalyticsService {\n\n sendAnalytics(\n category: string,\n action: string | undefined = undefined,\n label: string | undefined = undefined,\n value: string | undefined = undefined,\n omitStructuredLogger?: boolean\n ) {\n this.services.sdk.sendAnalytics(category, action, label, value, omitStructuredLogger);\n }\n\n\n sendTechnicalEvent(action: string, label?: string, value?: any): void {\n this.sendAnalytics('[Technical-event]', action, label, value);\n }\n\n sendOrbitUserFlowEvent(category: string | OrbitUserFlowAnalyticsCategory, action: OrbitUserFlowAnalyticsAction, label?: string | OrbitUserFlowAnalyticsLabel, value?: any): void {\n try {\n let data:ISendElasticEventOptions ={\n eventType:\"Orbit_User_Flow\",\n category:category,\n action:action,\n label:label,\n value: value\n }\n this.sendElasticInfoEvent(data, true);\n }\n catch (err){\n console.log(\"Error on Orbit sendOrbitUserFlowEvent : \" + err);\n }\n }\n\n sendOrbitMarketingEvent(category: string | OrbitMarketingEventAnalyticsCategory, action: OrbitMarketingEventAnalyticsAction, label?: string | OrbitMarketingEventAnalyticsLabel, value?: any): void {\n try {\n let data:ISendElasticEventOptions ={\n eventType:\"Orbit_Marketing\",\n category:category,\n action:action,\n label:label,\n value:value\n }\n this.sendElasticInfoEvent(data, true);\n }\n catch (err){\n console.log(\"Error on Orbit sendOrbitMarketingEvent : \" + err);\n }\n }\n\n sendOrbitAIFeatureEvent(category: string | OrbitAIFeatureAnalyticsCategory, action: OrbitAIFeatureAnalyticsAction, label?: string, value?: any): void {\n try {\n let data: ISendElasticEventOptions = {\n eventType: \"Orbit_AI_Feature\",\n category: category,\n action: action,\n label: label,\n value: value\n }\n this.sendElasticInfoEvent(data, true);\n } catch (err) {\n console.log(\"Error on Orbit sendOrbitAIFeatureEvent : \" + err);\n }\n }\n\n sendElasticInfoEvent(options: ISendElasticEventOptions, sendToDWH?: boolean) {\n const logger: IStructuredLogger = this.services.sdk.structuredLoggingService\n .getLogger()\n .addCategory(options.category)\n .addAction(options.action)\n .addLabel(options.label)\n .addValue(options.value)\n .addCustomData(options.customData);\n\n if (!Check.isNullOrUndefined(options.appID)) {\n logger.setAppID(options.appID);\n }\n\n if (sendToDWH) {\n logger.setEventType(options.eventType,'Log', 'Analytics');\n }\n else {\n logger.setEventType(options.eventType, 'Log');\n }\n\n logger.info();\n }\n\n getLogger(eventData?: IElasticEventData): IStructuredLogger {\n return this.services.sdk.structuredLoggingService.getLogger(eventData);\n }\n\n getGoogleClientID(): string {\n return this.services.sdk.getGoogleClientID();\n }\n\n async writeWidgetLogs(payload: any): Promise<void> {\n await this.services.sdk.writeWidgetLogs(payload)\n }\n}\n","export const SAVED_GAMES_LOCAL_STORAGE_KEY: string = \"gamesSavedByUser\";","import {GamesMap, IGameImageSize, IGamesService, RecentlyPlayedGames} from './games.service.interface';\nimport {GameInfo} from './game-info';\nimport {action, observable, makeObservable} from 'mobx';\nimport {ServiceBase} from '../ServiceBase';\nimport {Check} from '@sparkware/app-utils';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {SAVED_GAMES_LOCAL_STORAGE_KEY} from \"../../../common/const/saved-games-ls-key_const\";\nimport {SwiperGamesListConfiguration} from \"../configurations/config-data-sections/arenas.configuration\";\n\nexport class GamesService extends ServiceBase implements IGamesService {\n\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n\n makeObservable(this);\n\n this.reaction(\n () => this.services.user.isAuthorized,\n () => {\n this._updateGamesMapPromise = this._updateGamesMap()\n },\n {\n fireImmediately: true\n });\n\n this.services.sdk.events.onRecentlyPlayedGamesUpdated(this._updateRecentlyPlayedGames);\n this._initializeSavedGames();\n }\n\n //This is an in-memory copy of the games saved in local storage. We need it so that components can react to changes in the array of saved games.\n @observable.ref\n savedGameTypes: number[] = [];\n\n @action.bound\n private _setInMemorySavedGames(newSavedGames: number[]): void {\n this.savedGameTypes = newSavedGames\n }\n\n private _initializeSavedGames(): void {\n let localStorageSavedGames = this.services.localStorage.getJson<number[]>(SAVED_GAMES_LOCAL_STORAGE_KEY);\n this._setInMemorySavedGames(Check.isNullOrUndefined(localStorageSavedGames) ? [] : localStorageSavedGames);\n }\n\n @observable.ref\n gamesMap: GamesMap = {};\n @action.bound\n private _setGamesMap(gamesMap: GamesMap): void {\n this.gamesMap = gamesMap;\n }\n\n @observable.ref\n recentlyPlayedGames: RecentlyPlayedGames = {\n isInitialized: false,\n gameTypes: []\n };\n\n @action.bound\n private _updateRecentlyPlayedGames(gameTypes: number[]): void {\n if(!this.recentlyPlayedGames.isInitialized\n || !this.services.sdk.getUtils().arraysAreEqual(this.recentlyPlayedGames.gameTypes, gameTypes)) {\n this.recentlyPlayedGames = {\n isInitialized: true,\n gameTypes: gameTypes\n }\n }\n }\n\n\n\n private async _buildGamesMap(sdkGamesInfo: any): Promise<GamesMap> {\n\n\n let gamesMap: GamesMap = {};\n\n const usedGameTypesBySiteMap = this.services.configuration.usedGameTypesBySite.reduce((accumulator, gt) => {\n accumulator[gt] = true;\n return accumulator;\n }, {});\n\n Object.keys(sdkGamesInfo).forEach(gameType => {\n try {\n // filter only in-layout games\n if (usedGameTypesBySiteMap[gameType]) {\n let sdkInfo = sdkGamesInfo[gameType];\n let generalSettings = this.services.configuration.data.generalSettings;\n let gameTagInfo = (generalSettings && generalSettings.gamesSettings && generalSettings.gamesSettings.gamesTags && generalSettings.gamesSettings.gamesTags[gameType]) || {};\n\n // for now, rawGameData will contain also gameTagInfo properties - which are read by adminClient settings\n // moreover, we'll add a new property on it regarding allowSwitchToDemo\n let rawGameData = Object.assign(sdkInfo, gameTagInfo);\n let gameInfo = new GameInfo(rawGameData, this.services);\n\n gamesMap[gameInfo.gameType] = gameInfo;\n \n }\n } catch(err) {\n this.services.logger.error(`Failed to generate GameInfo for game type ${gameType}`, err);\n }\n\n });\n\n return gamesMap;\n }\n\n\n private _updateGamesMapPromise: Promise<void> = Promise.resolve();\n\n getGamesMapUpdatePromise(): Promise<void> {\n return this._updateGamesMapPromise;\n }\n\n private async _updateGamesMap(): Promise<void> {\n let usedGameTypesBySite = this.services.configuration.usedGameTypesBySite || [];\n if(usedGameTypesBySite.length === 0) {\n this.services.logger.error(`configuration.usedGameTypesBySite returned empty array`);\n return;\n }\n\n const gamesMap = await this._getGamesInfoMap(usedGameTypesBySite);\n\n this._setGamesMap(gamesMap);\n }\n\n async _getGamesInfoMap(gameTypes: number[]): Promise<GamesMap> {\n try {\n let sdkGamesInfo = await this.services.sdk.getGamesInfo(gameTypes);\n \n return await this._buildGamesMap(sdkGamesInfo);\n } catch (err) {\n this.services.logger.error(`sdk.getGamesInfo failed in GamesService.getGamesInfo`, err);\n return {};\n }\n }\n\n async getGamesInfoMap(gameTypes: number[]): Promise<GamesMap> {\n if (!gameTypes || gameTypes.length === 0) {\n return {};\n }\n\n // fill data from cache (if cache found)\n if (Object.keys(this.gamesMap).length > 0) {\n const inCacheGames = gameTypes.filter((gt) => this.gamesMap[gt]);\n const result = inCacheGames.reduce((acc, gt) => {acc[gt] = this.gamesMap[gt]; return acc;}, {});\n return result;\n } else {\n // otherwise fill it from SDK\n return this._getGamesInfoMap(gameTypes);\n }\n }\n\n async getGamesInfoForHistory(gameTypes: number[]): Promise<GamesMap> {\n let sdkGamesInfo = await this.services.sdk.getGamesInfoForHistory(gameTypes);\n\n let gamesMap: GamesMap = {};\n Object.keys(sdkGamesInfo).forEach(gameType => {\n let rawGameData = Object.assign(sdkGamesInfo[gameType], this.gamesMap[gameType]);\n gamesMap[gameType] = new GameInfo(rawGameData, this.services)\n });\n return gamesMap;\n }\n\n async getGamesInfoArray(gameTypes: number[]): Promise<GameInfo[]> {\n let gamesMap = await this.getGamesInfoMap(gameTypes);\n\n const result: GameInfo[] = [];\n for(let i = 0; i < gameTypes.length; i++) {\n const gameType = gameTypes[i];\n if (gamesMap[gameType]) {\n result.push(gamesMap[gameType]);\n }\n }\n return result;\n }\n\n async getGameInfo(gameType: number) {\n const gamesMap = await this.getGamesInfoMap([gameType]);\n if(gamesMap) {\n return gamesMap[gameType];\n } else {\n return null;\n }\n }\n\n async getCorrelatedGames(gameType: number, numberOfGames: number): Promise<number[]> {\n try {\n return await this.services.sdk.getCorrelatedGames(gameType, numberOfGames);\n } catch (err) {\n this.services.logger.error(`Failed to get from SDK the correlated games for game type ${gameType}`, err);\n return [];\n }\n }\n\n getGameImageExpectedSizes(useSquareIcons?: boolean, animated?: boolean): IGameImageSize {\n if (useSquareIcons) {\n if (animated) {\n return {\n width: 210,\n height: 292\n };\n }\n return {\n width: 400,\n height: 555\n };\n }\n\n return {\n width: 210,\n height: 210\n };\n }\n\n saveGame(gameType: number): void {\n if (this.savedGameTypes.indexOf(gameType) >= 0) {\n return;\n }\n\n let newSavedGames: number[] = [gameType, ...this.savedGameTypes].slice(0, this._MAX_SAVED_GAMES);\n this.services.localStorage.setJson(SAVED_GAMES_LOCAL_STORAGE_KEY, newSavedGames);\n this._setInMemorySavedGames(newSavedGames)\n }\n\n removeSavedGame(gameType: number): void {\n let newSavedGames: number[] = this.savedGameTypes.filter(gt => gt !== gameType);\n this.services.localStorage.setJson(SAVED_GAMES_LOCAL_STORAGE_KEY, newSavedGames);\n this._setInMemorySavedGames(newSavedGames)\n }\n\n private _MAX_SAVED_GAMES: number = 10; // Max number of games that can be saved at a given time.\n private _DAILY_INCREMENT_SAVED_COUNTER: number = 2; // The fake counter (per gameType) will increase by this value per day passed since _START_DATE\n private _INFERIOR_THRESHOLD_BASE_COUNTER: number = 100;\n private _SUPERIOR_THRESHOLD_BASE_COUNTER: number = 1000;\n private _START_DATE: Date = new Date('April 12, 2024 00:00:00');\n\n //We generate a number in the _INFERIOR_THRESHOLD_BASE_COUNTER - _SUPERIOR_THRESHOLD_BASE_COUNTER interval based on the gametype.\n // Then, to that number we add _DAILY_INCREMENT_SAVED_COUNTER * (days passed since _START_DATE)\n public generateTimesSavedCounterForGame(gameType: number): number {\n let hash = this.services.tools.getHash(gameType.toString());\n\n let daysSinceStart = Math.round((new Date().getTime() - this._START_DATE.getTime())/ (1000 * 3600 * 24));\n\n let baseHash = Math.abs(hash) % (this._SUPERIOR_THRESHOLD_BASE_COUNTER - this._INFERIOR_THRESHOLD_BASE_COUNTER) + this._INFERIOR_THRESHOLD_BASE_COUNTER;\n\n return baseHash + (daysSinceStart * this._DAILY_INCREMENT_SAVED_COUNTER);\n }\n\n public async showAllSavedGamesDrawer(): Promise<void> {\n const savedGamesSwiperConfig: SwiperGamesListConfiguration = {\n gamesId: this.savedGameTypes,\n display: true,\n title: this.services.translation.translate(\"MY_SAVED_GAMES\"),\n useSquareIcons: true\n };\n\n await (await this.services.verticalGamesList).renderList(savedGamesSwiperConfig);\n }\n}\n","import {AdminArenaConfiguration} from \"../../app-bootstrap/config-interfaces/casino-startup.configurations\";\nimport {createStatementsDefinition} from './create-statements-definition';\nimport {HOME_PAGE_ARENA, NEW_LIVE_CASINO_ARENA_NAME} from '../arenas/arena-consts';\nimport {Check} from \"@sparkware/app-utils\";\n\nenum List_Type {\n Swipers = \"swipers\",\n Grids = \"grids\",\n PopularTables = \"popularTables\"\n}\n\nexport function injectAdminArenas(\n originalConfigData: any,\n adminArenaConfigData: {[key: string]: AdminArenaConfiguration}\n): void {\n\n if (originalConfigData.homePage) {\n originalConfigData.homePage.gamesLists = getAdminArenaLists(\n adminArenaConfigData,\n HOME_PAGE_ARENA,\n List_Type.Swipers\n );\n }\n\n if (originalConfigData.arenas) {\n Object.keys(originalConfigData.arenas).forEach(arenaKey => {\n\n if (arenaKey === 'liveCasino') {\n //TODO - this empty if should be removed once we remove from all Admin DBs the liveCasino OrbitArenaKey\n /*\n originalConfigData.arenas[arenaKey].popularTables = getAdminArenaLists(\n adminArenaConfigData,\n arenaKey,\n List_Type.PopularTables\n );\n */\n } else if (arenaKey === NEW_LIVE_CASINO_ARENA_NAME) {\n originalConfigData.arenas[arenaKey].allGamesGrid = getAdminArenaLists(\n adminArenaConfigData,\n arenaKey,\n List_Type.Grids\n );\n }\n else {\n originalConfigData.arenas[arenaKey].swiperGamesList = getAdminArenaLists(\n adminArenaConfigData,\n arenaKey,\n List_Type.Swipers\n );\n originalConfigData.arenas[arenaKey].allGamesGrid = getAdminArenaLists(\n adminArenaConfigData,\n arenaKey,\n List_Type.Grids\n );\n }\n\n });\n }\n}\n\n\nfunction getAdminArenaLists(\n adminArenaConfigData: {[key: string]: AdminArenaConfiguration},\n arenaKey: string,\n listType: string\n) {\n let adminLists: unknown[] = [];\n if (adminArenaConfigData[arenaKey] && adminArenaConfigData[arenaKey].lists[listType]) {\n adminArenaConfigData[arenaKey].lists[listType].forEach(list => {\n let currentList = list.Metadata ?? {};\n\n currentList.display = Check.isNullOrUndefined(currentList.display) ? true : currentList.display;\n\n let segmentation = createStatementsDefinition(list.SubLists);\n currentList.gamesId = {};\n currentList.gamesId.defaultValue = segmentation.defaultValue;\n currentList.gamesId.statements = segmentation.statements;\n\n adminLists.push(currentList);\n });\n }\n\n return adminLists;\n}\n","import {ConfigurationEvaluationContext} from './evaluation/configuration-evaluation-context/configuration-evaluation-context';\nimport {PropertiesEvaluator} from './evaluation/properties-evaluator/properties-evaluator';\nimport {IConfigurationData} from './configuration-data.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {ServiceBase} from '../ServiceBase';\nimport {IConfigurationService} from './configuration.service.interface';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {NEW_GAMES_ARENA_NAME, NEW_LIVE_CASINO_ARENA_NAME} from '../arenas/arena-consts';\nimport { observable, runInAction, makeObservable } from 'mobx';\nimport {ApplicationStartupConfigurations} from '../../app-bootstrap/config-interfaces/application-startup.configurations';\nimport {IConfigurationEvaluationDataProvider} from './evaluation/configuration-evaluation-context/configuration-evaluation-data-provider.interface';\nimport {injectAdminArenas} from './inject-admin-arenas';\nimport {IServicesConfigurations} from './config-data-sections/services-configurations';\nimport {ListConfiguration, SwiperGamesListConfiguration} from \"./config-data-sections/arenas.configuration\";\n\n\ntype GameTypesMap = {[key: number]: number};\n\nexport class ConfigurationsService extends ServiceBase implements IConfigurationService {\n\n startupConfiguration: ApplicationStartupConfigurations;\n\n constructor(services: IServiceFactoryExtended, startupConfigs: ApplicationStartupConfigurations) {\n super(services);\n\n makeObservable(this);\n\n this.startupConfiguration = startupConfigs;\n\n this._createConfigData();\n }\n\n private _getConfigEvaluationContextServices(): IConfigurationEvaluationDataProvider {\n return {\n admin: this.startupConfiguration.admin,\n getLauncherGames: () => this.services.launcher.getTestedGames(),\n getSegmentValue: (segmentName) => this.services.segmentation.getSegmentValue(segmentName),\n logger: this.services.logger\n };\n }\n\n private _createConfigData(): void {\n let originalConfigData = this.startupConfiguration.orbit.config;\n if (this.startupConfiguration.admin && this.startupConfiguration.admin.arenas) {\n injectAdminArenas(originalConfigData, this.startupConfiguration.admin.arenas);\n }\n\n let context = new ConfigurationEvaluationContext(this._getConfigEvaluationContextServices());\n let configEvaluator = PropertiesEvaluator.fromRoot(originalConfigData, context);\n let data = configEvaluator.evaluate(context);\n this._defineCustomConfigProperty(data,\n 'allGamesTypes',\n () => {\n let gameTypes: number[] = [];\n let gamesTags = (data.generalSettings && data.generalSettings.gamesSettings && data.generalSettings.gamesSettings.gamesTags) || {};\n Object.getOwnPropertyNames(gamesTags).forEach(gt => {\n let gameType = parseInt(gt);\n if (!isNaN(gameType)) {\n gameTypes.push(gameType);\n }\n });\n return gameTypes;\n });\n\n\n runInAction(() => {\n this.data = data as IConfigurationData;\n });\n }\n\n\n private _defineCustomConfigProperty(configData: unknown, propertyName: string, evaluator: () => unknown) {\n Object.defineProperty(configData, propertyName, {\n get: evaluator,\n configurable: false\n });\n\n }\n\n @observable.ref\n data: IConfigurationData;\n\n get userSelectedState(): string {\n return this.startupConfiguration.userSelectedState;\n }\n\n get cmsPublicationId(): number {\n return this.startupConfiguration.b2c.publicationId;\n }\n\n get usedGameTypesBySite(): number[] {\n\n let gameTypesMap = {...this._getUsedGamesByHomePage(), ...this._getUsedGamesByArenas(), ...this._getUsedGameTypesByNewLiveGamesArena()};\n\n return Object.values(gameTypesMap);\n }\n\n private _getUsedGamesByHomePage(): GameTypesMap {\n let result: GameTypesMap = {};\n (this.data.homePage.gamesLists || []).forEach(gamesList => {\n if (gamesList.display) {\n let gamesIds = gamesList.gamesId || [];\n if (Check.isArray(gamesIds)) {\n gamesIds.forEach(gameType => {\n result[gameType] = gameType;\n })\n }\n\n }\n });\n\n return result;\n }\n\n private _getUsedGamesByArenas(): GameTypesMap {\n let result: GameTypesMap = {};\n Object.keys(this.data.arenas).forEach(arenaName => {\n let arenaConfig = this.data.arenas[arenaName];\n // game types from swipers\n (arenaConfig.swiperGamesList || []).forEach(swiperConfig => {\n if (swiperConfig.display) {\n let gamesIds = swiperConfig.gamesId || [];\n if (Check.isArray(gamesIds)) {\n gamesIds.forEach(gameType => {\n result[gameType] = gameType;\n });\n }\n\n }\n });\n\n // game types from all games grid\n (arenaConfig.allGamesGrid || []).forEach(gamesGridConfig => {\n if (gamesGridConfig.display) {\n let gamesIds = gamesGridConfig.gamesId || [];\n if (Check.isArray(gamesIds)) {\n gamesIds.forEach(gameType => {\n result[gameType] = gameType;\n });\n }\n }\n });\n });\n\n return result;\n }\n\n\n private _getUsedGameTypesByNewLiveGamesArena(): GameTypesMap {\n let result: GameTypesMap = {};\n\n let liveCasinoArenaConfig = this.data.arenas[NEW_LIVE_CASINO_ARENA_NAME];\n if (!liveCasinoArenaConfig) {\n return result;\n }\n\n let gamesIds = liveCasinoArenaConfig.arenas && liveCasinoArenaConfig.arenas.gamesId;\n\n if (Check.isArray(gamesIds)) {\n gamesIds.forEach(gameTypeConfig => {\n if (gameTypeConfig.display) {\n result[gameTypeConfig.gameId] = gameTypeConfig.gameId;\n }\n });\n }\n\n\n\n let popularTablesConfig = liveCasinoArenaConfig.popularTables;\n if (Check.isArray(popularTablesConfig)) {\n popularTablesConfig.forEach(tableConfig => {\n let tableGamesIds = tableConfig.gamesId || [];\n if (Check.isArray(tableGamesIds)) {\n tableGamesIds.forEach(gameType => result[gameType] = gameType);\n }\n });\n }\n\n return result;\n }\n\n resolveConfigurationValue(fullPath: string): string {\n let objectValue: any = this.data;\n let fullPathArray = fullPath.split('.');\n\n for (let objectKey of fullPathArray) {\n objectValue = objectValue[objectKey];\n }\n\n return (objectValue as string) || '';\n }\n\n resolveGameImagePath(imageFileName: string): string {\n if (Check.isEmpty(imageFileName)) {\n return '';\n }\n\n let imagesBasePath = this.startupConfiguration.sdk.config.ExtraProperties.paths.gamesImages; //paths.gamesImages is used by cypress environment\n if (imagesBasePath) {\n if (!imagesBasePath.endsWith('/')) {\n imagesBasePath += '/';\n }\n return imagesBasePath + imageFileName;\n } else {\n let serverPath = this.startupConfiguration.sdk.config.ExtraProperties.paths.server;\n if (!serverPath.endsWith('/')) {\n serverPath += '/';\n }\n return serverPath + 'gamesImages/' + imageFileName;\n }\n }\n\n resolveJsFilePath(fileName: string): string {\n if (Check.isEmpty(fileName)) {\n return '';\n }\n let serverPath = this.startupConfiguration.sdk.config.ExtraProperties.paths.server;\n let path = serverPath ? serverPath : this.services.window.origin;\n if (!path.endsWith('/')) {\n path += '/';\n }\n return (path + `js/${fileName}`);\n }\n\n getFontsPath(): string {\n return new URL(this.startupConfiguration.sdk.config.ExtraProperties.paths.server + \"/assets/fonts/\").href;\n }\n\n getGamesListByJackpotId(id: string): SwiperGamesListConfiguration {\n\n const homePageGamesLists = this.data.homePage.gamesLists || [];\n for (let i = 0; i < homePageGamesLists.length; i++) {\n let gamesList = homePageGamesLists[i];\n if (gamesList.jackpotWidget?.jackpotId) {\n let gamesIds = gamesList.gamesId || [];\n if (Check.isArray(gamesIds) && gamesList.jackpotWidget.jackpotId.toString() === id) {\n return gamesList;\n }\n }\n }\n\n return null;\n }\n\n getSelfUpdatedByNewestGamesList(): ListConfiguration {\n const newGameArenaConfig = this.data.arenas[NEW_GAMES_ARENA_NAME];\n if (!newGameArenaConfig) {\n return null;\n }\n\n const gamesLists: ListConfiguration[] = (newGameArenaConfig.swiperGamesList || []).concat(newGameArenaConfig.allGamesGrid || []);\n const firstSelfUpdatedByNewest = gamesLists.find(listConfig => listConfig.display && listConfig.isSelfUpdatedByNewest);\n return firstSelfUpdatedByNewest;\n }\n\n private _getCurrentArenaLists() {\n const arenaType = this.services.routing.currentRoute.data?.arenaType;\n const lists = Check.isNullOrUndefined(arenaType) || arenaType === \"homePage\" ?\n this.data.homePage.gamesLists :\n this.services.configuration.data.arenas[arenaType].swiperGamesList;\n return lists;\n }\n\n getGamesListByTitle(title: string): SwiperGamesListConfiguration {\n const lists = this._getCurrentArenaLists();\n return lists?.find(list => list.title.toUpperCase() === title.toUpperCase());\n }\n\n getGamesListById(id: number): SwiperGamesListConfiguration {\n const lists = this._getCurrentArenaLists();\n return lists?.find(list => list.listId === id);\n }\n\n get servicesConfigs(): IServicesConfigurations {\n return this.services.sdk.getConfigs();\n }\n}\n","import {action, makeObservable, observable} from \"mobx\";\nimport {ISoundUserPreferences} from \"./user-sound-preferences.interface\";\n\nexport class SoundUserPreferences implements ISoundUserPreferences {\n @observable.ref\n isMuted: boolean = true;\n\n @action.bound\n setIsMuted(v: boolean) {\n this.isMuted = v;\n }\n\n @action.bound\n toggle() {\n this.isMuted = !this.isMuted;\n }\n\n constructor() {\n makeObservable(this);\n }\n}\n","import {SoundUserPreferences} from \"./user-sound-preferences\";\nimport {ISoundUserPreferences} from \"./user-sound-preferences.interface\";\n\nexport class UserPreferences {\n sound: ISoundUserPreferences = new SoundUserPreferences();\n}\n","import {IUserService} from './user.service.interface';\nimport {action, observable, makeObservable} from 'mobx';\nimport {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {UserData} from '../sdk/sdk.service.interface';\nimport {Check, TimeSpan} from '@sparkware/app-utils';\nimport {OnOauthStateChangedParams} from '../sdk/sdk-events';\nimport {GetPlatformTokenResponse} from \"../sdk/cgp-sdk.interface\";\nimport {IAutoLoginParams} from '../../../common/interfaces/autologin-params.interface';\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\nimport MIGRATION from \"../../../common/const/migration_consts\";\nimport {NullableString} from '../../../common/types/nullable-types';\nimport {GamesOpenSessionsKind} from \"../games-open-sessions/games-open-sessions-kind.enum\";\nimport {UserPreferences} from './model/user-preferences';\nimport {LocalStorageKeys} from \"../storage/local-storage-keys\";\nimport {IInactivityTimeoutSettings} from \"./model/inactivity-timeout-settings\";\n\nconst AUTOLOGIN_QUERY_PARAM = 'UserInfo';\nconst LAST_LOGIN_QUERY_PARAM = \"LastLogin\";\n\nexport class UserService extends ServiceBase implements IUserService {\n\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._updateUserData({});\n this.services.sdk.events.onOAuthStateChanged(this._updateUserData);\n\n this.reaction(() => this.isAuthorized, (isAuthorized) => {\n if(!isAuthorized) {\n this.services.localStorage.removeItem(LocalStorageKeys.lastLogin);\n }\n }, {\n fireImmediately: true\n })\n }\n\n preferences: UserPreferences = new UserPreferences();\n\n @observable.ref\n isAuthorized: boolean = false;\n @observable.ref\n logoutReason: number = null;\n\n\n @observable.ref\n private _userData: UserData = {};\n\n @action.bound\n private _updateUserData(params: OnOauthStateChangedParams) {\n\n params = params || {};\n\n this.isAuthorized = this.services.sdk.isAuthorized;\n\n if (Check.isNullOrUndefined(params.logoutReason)) {\n this.logoutReason = null;\n } else {\n this.logoutReason = params.logoutReason;\n }\n\n const userData = (this.services.sdk.userData || {}) as UserData;\n\n if (!this.isAuthorized) {\n const playerStatus = this.services.localStorage.getItem('playerStatus');\n this.services.window.scrollTo(0, 0);\n this._userData = {...userData, statusGroupId: (playerStatus ? parseInt(playerStatus) : undefined)};\n } else {\n this._userData = userData;\n this.services.localStorage.setItem('playerStatus', userData.statusGroupId);\n }\n\n this._updateSegments();\n }\n\n @action.bound\n private _updateSegments() {\n this.segments = {\n IsAuthorized: this.isAuthorized,\n statusGroupId: this._userData.statusGroupId || 0,\n IsVIP: this._userData.IsVIP || false,\n GenderId: this._userData.GenderId || null,\n DaysSinceRegistration: this.daysSinceRegistration,\n RegistrationCountry: this.registrationCountry?.toLowerCase()\n }\n }\n\n @observable.ref\n segments = {};\n\n\n get hasActiveChallenges(): boolean {\n return this.services.sdk.activeChallengeCount > 0;\n }\n\n\n get name(): string {\n return this._userData.userName || '';\n }\n\n\n get cid(): string {\n return this._userData.cid || '';\n }\n\n get registrationCountry(): string {\n return this._userData.registrationCountry;\n }\n\n get joinDate(): string {\n return this._userData.joinDate;\n }\n\n private _getLastLoginFromQueryParams(): NullableString {\n let lastLogin = this.services.location.currentUri.queryParams.getParamValue(LAST_LOGIN_QUERY_PARAM)?.trim();\n if(lastLogin) {\n this.services.localStorage.setItem(LocalStorageKeys.lastLogin, lastLogin);\n } else {\n lastLogin = this.services.localStorage.getItem(LocalStorageKeys.lastLogin);\n }\n\n if(!lastLogin) {\n return null;\n }\n\n const seconds = parseInt(lastLogin);\n\n if(Check.isNumber(seconds)) {\n return this.services.regulation.current.formatLastLoginFromUnixTimeStampInSeconds(seconds);\n } else {\n this.services.logger.error(`lastLogin from query params is not a number: ${lastLogin}`);\n return null;\n }\n }\n\n get lastLogin(): NullableString {\n try {\n const lastLoginFromQueryParam = this._getLastLoginFromQueryParams();\n\n if(lastLoginFromQueryParam) {\n return lastLoginFromQueryParam;\n }\n\n if (Check.isNullOrUndefined(this._userData.lastLogin) &&\n Check.isNullOrUndefined(this._userData.lastLoginDateInTimeZone)) {\n return null\n } else { \n return this.services.time.formatLastLogin(this._userData.lastLogin, this._userData.lastLoginDateInTimeZone);\n }\n } catch (err) {\n this.services.logger.error('Failed to parse last login', err);\n return null;\n }\n\n }\n\n get userData() {\n return this._userData;\n }\n\n get isVip(): boolean {\n return (this._userData.statusGroupId > 0 && this._userData.statusGroupId !== 4);\n }\n\n get timeSinceRegistration(): TimeSpan {\n if (!this._userData)\n return null;\n if (!this._userData.timeSinceRegistration)\n return null;\n return TimeSpan.parse(this._userData.timeSinceRegistration);\n }\n\n get daysSinceRegistration(): number {\n if (this.timeSinceRegistration)\n return this.timeSinceRegistration.totalDays;\n\n return Infinity;\n }\n\n get playerRMSStatus(): number {\n return this._userData.playerRMStatus;\n }\n\n get countryName(): string {\n return this.services.sdk.getCountryName();\n }\n\n getAutoLoginToken(): Promise<string> {\n return this.services.sdk.getAutoLoginToken().then(data => data.token);\n }\n\n getPlatformToken(): Promise<GetPlatformTokenResponse> {\n return this.services.sdk.getPlatformToken();\n }\n\n getFirebaseToken(): string {\n return this.services.sdk.getFirebaseToken();\n }\n\n async openLogin(marketingParams?: MarketingParams): Promise<void> {\n await this.services.sdk.openLoginForm(marketingParams);\n }\n\n isDocUploadRequired(): boolean {\n return this.services.sdk.getAccountData()?.IsDocUploadRequired;\n }\n\n logout(): Promise<void> {\n return this.services.sdk.logout();\n }\n\n get genderTitle(): string {\n switch (this._userData.GenderId) {\n case 1:\n return 'MR_TITLE';\n case 2:\n return 'MRS_TITLE';\n default:\n return '';\n }\n }\n\n\n private _isInAutoLogin(): boolean {\n return this.services.sdk.isInAutologin();\n }\n\n waitForAutoLogin(): Promise<void> {\n\n if (!this._isInAutoLogin()) {\n return Promise.resolve();\n }\n\n\n return this.services.sdk.waitForAutologin()\n .then(() => {\n return this._removeAutoLoginTokenFromUrl()\n .catch((err) => {\n this.services.logger.error('Remove auto login token from URL failed!', err);\n });\n\n });\n\n }\n\n async ensureUserIsLoggedIn(initiator: string): Promise<boolean> {\n await this.waitForAutoLogin();\n\n if (!this.isAuthorized) {\n try {\n await this.openLogin();\n } catch (err) {\n this.services.logger.debug(initiator + \" - login cancelled or failed.\", err);\n }\n }\n return this.isAuthorized;\n }\n\n\n private _removeAutoLoginTokenFromUrl(): Promise<void> {\n let paramToBeRemoved: string = AUTOLOGIN_QUERY_PARAM;\n const currentUri = this.services.location.currentUri;\n if (currentUri.queryParams.hasParam(MIGRATION.MIGRATION_TOKEN_QUERY_PARAM)\n && currentUri.queryParams.getParamValue(MIGRATION.MIGRATION_SOURCE_QUERY_PARAM)?.toLowerCase() === MIGRATION.MIGRATION_SOURCE_QUERY_PARAM_VALUE) {\n paramToBeRemoved = MIGRATION.MIGRATION_TOKEN_QUERY_PARAM;\n }\n const urlWithoutToken = currentUri.removeSearchParam(paramToBeRemoved).toString();\n return this.services.location.replace(urlWithoutToken);\n }\n\n\n runAutoLogin(autoLoginParams: IAutoLoginParams): Promise<void> {\n return this.services.sdk.runAutoLogin(autoLoginParams);\n }\n\n panicRestrictUser(): Promise<void> {\n const offset = this.services.time.getTimezoneOffset();\n\n return this.services.api.userController.selfExclusionPanic({\n timezoneOffset: offset,\n productPackage: this.services.sdk.getProductPackageId()\n }).then(() => {\n this.logout();\n }).catch((err) => {\n this.services.sdk.structuredLoggingService\n .getLogger()\n .addCategory(\"PANIC SELF EXCLUSION\")\n .addAction(\"SelfExclusion fails\")\n .addValue(JSON.stringify(err))\n .error();\n this.logout();\n this.services.logger.error('Self Exclusion Panic Failed.', err);\n });\n }\n\n get loginIP(): string | null {\n return this.services.sdk.tokenInfo?.loginIP;\n }\n\n async getOpenSessionsRealMoneyBalance(): Promise<number> {\n if (!this.isAuthorized) {\n return 0;\n }\n\n\n const openSessions = await this.services.api.openSessionsController.getOpenSessions({\n openSessionsKind: GamesOpenSessionsKind.Real\n });\n\n return openSessions.sessionDetails.sum(s => s.Credit);\n\n }\n\n getInactivityTimeoutSettings(): IInactivityTimeoutSettings {\n return this.services.sdk.getInactivityTimeoutSettings();\n }\n\n setInactivityTimeout(timeout: TimeSpan): void {\n this.services.sdk.setInactivityTimeout(timeout);\n }\n\n\n\n getDefaultAccessTokenLifeTime(): TimeSpan {\n try {\n return TimeSpan.parse(this.services.configuration.servicesConfigs.OAuth2.defaultAccessTokenLifeTime)\n } catch (err) {\n this.services.logger.error(`Failed to parse defaultAccessTokenLifeTime ${this.services.configuration.servicesConfigs.OAuth2.defaultAccessTokenLifeTime}`, err);\n return TimeSpan.fromMinutes(60);\n }\n\n }\n}\n","import {ISegmentationAggregatorService} from './segmentation-aggregator.service.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport { action, observable, makeObservable } from 'mobx';\nimport {mediaQueries} from \"../media-query/media-queries\";\nimport {IMediaQueries} from '../media-query/media-queries.interface';\n\nexport class SegmentationAggregatorService extends ServiceBase implements ISegmentationAggregatorService {\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n\n makeObservable(this);\n\n this._subscribeReactions();\n }\n\n private async _subscribeReactions(): Promise<void> {\n const cmsSegmentation = await this.services.cmsSegmentation;\n const progressiveWebApp = await this.services.progressiveWebApp;\n this.reaction(\n () => {\n return {\n userSegments: this.services.user.segments,\n cmsSegments: cmsSegmentation.segments,\n deviceSegments: this.services.device.segments,\n isMobile: this.services.device.isMobile,\n mediaQueryChange: this.services.mediaQuery.lastMediaChange,\n isMiniOrbit: this.services.miniOrbit.isEnabled,\n isPWAInstallable: progressiveWebApp.isPWAInstallable,\n videoSlidesEnabled: this.services.videoSlides.shouldBeDisplayed,\n }\n },\n () => {\n this._updateSegments();\n },\n {\n fireImmediately: true\n });\n }\n\n private async _updateSegments(): Promise<void> {\n const cmsSegmentation = await this.services.cmsSegmentation;\n const extraSegments = await this._getExtraSegments();\n this._setAllSegments({\n ...cmsSegmentation.segments,\n ...this.services.user.segments,\n ...this.services.device.segments,\n ...this._getMediaQuerySegments,\n ...extraSegments});\n }\n\n @observable.ref\n private _allSegments: Record<string, any> = {};\n\n @observable.ref\n segmentsLastUpdate: number = null;\n\n\n @action.bound\n private _setAllSegments(allSegments) {\n this._allSegments = allSegments;\n this.segmentsLastUpdate = Date.now();\n }\n\n getSegmentValue(name: string): any {\n let segmentValue = this._allSegments[name];\n\n if(Check.isUndefined(segmentValue)) {\n this.services.logger.debug(`Segment ${name} doesn't exists in the segments list!`);\n }\n\n return segmentValue;\n }\n\n private get _getMediaQuerySegments() {\n const tempRecords = {};\n (Object.keys(mediaQueries) as (keyof IMediaQueries)[]).forEach(mediaQueryName => {\n tempRecords[mediaQueryName] = this.services.mediaQuery[mediaQueryName];\n });\n return tempRecords;\n }\n\n private async _getExtraSegments() {\n const progressiveWebApp = await this.services.progressiveWebApp;\n return {\n env: this.services.configuration.startupConfiguration.sdk.config.ExtraProperties.env,\n countryCode: this.services.configuration.startupConfiguration.country,\n brandID: this.services.sdk.getBrandID(),\n subBrandID: this.services.sdk.getSubBrandID(),\n regulationID: this.services.regulation.getRegulationCode(),\n iso3: this.services.language.currentLanguage,\n langCode: this.services.language.currentLanguage,\n isMiniOrbit: this.services.miniOrbit.isEnabled,\n isPWAInstallable: progressiveWebApp.isPWAInstallable,\n videoSlidesEnabled: this.services.videoSlides.shouldBeDisplayed,\n };\n }\n\n get isCIS(): boolean {\n return Boolean(this.getSegmentValue('_IsCIS'));\n }\n\n get isCIP(): boolean {\n return Boolean(this.getSegmentValue('_IsCIP'));\n }\n\n}\n","import {ServiceBase} from '../ServiceBase';\nimport {IDeviceService} from './device.service.interface';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {DeviceInfo} from '../sdk/cgp-sdk.interface';\nimport { action, observable, makeObservable } from 'mobx';\nimport Device from \"../../../sdk/src/utils/device/device\";\n\nexport class DeviceService extends ServiceBase implements IDeviceService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._updateDeviceType();\n this.services.dom.subscribeTo.devicechanged(this._updateDeviceType);\n }\n\n private get _sdkDevice(): DeviceInfo {\n return this.services.sdk.device;\n }\n\n @action.bound\n private _updateDeviceType() {\n this.isMobile = this._sdkDevice.isMobile();\n this.isTablet = this._sdkDevice.isTablet();\n\n this.os = this._sdkDevice.os;\n this.browser = this._sdkDevice.browser;\n this.hybrid = this._sdkDevice.hybrid;\n this.feature = this._sdkDevice.feature;\n this.model = this._sdkDevice.model;\n this.isProgressiveWebApp = this._sdkDevice.isProgressiveWebApp;\n\n this.isStandalone = this._sdkDevice.isStandalone;\n\n this.segments = {\n isMobile: this.isMobile,\n deviceType: this.isMobile ? 'mobile' : 'pc',\n isHybrid: this.hybrid.isHybrid,\n isEmbeddedHybrid: this.hybrid.isEmbedded,\n operationSystem: this.os.name,\n tool: Device.isProbablyIPad ? \"tablet\" : '',\n isProgressiveWebApp: this._sdkDevice.isProgressiveWebApp\n };\n }\n\n /** @deprecated */\n @observable.ref\n isMobile: boolean;\n /** @deprecated */\n isTablet: boolean;\n\n os: DeviceInfo[\"os\"];\n browser: DeviceInfo[\"browser\"];\n model: DeviceInfo[\"model\"];\n hybrid: DeviceInfo[\"hybrid\"];\n feature: DeviceInfo[\"feature\"];\n isProgressiveWebApp: DeviceInfo[\"isProgressiveWebApp\"];\n\n isStandalone: boolean;\n\n @observable.ref\n segments: {\n [key: string]: any;\n }\n\n get productPackageId(): number {\n return this.services.sdk.getProductPackageId();\n }\n\n get isMobileWebApp(): boolean {\n return Device.isMobileWebApp;\n }\n\n get isProbablyIOSDevice(): boolean {\n return Device.isProbablyIOSDevice;\n }\n}\n","import {HOME_PAGE_ARENA} from \"../services/arenas/arena-consts\";\n\nexport const SEO_CATEGORIES = {\n HOME: HOME_PAGE_ARENA,\n AI_GAMES_RECOMMENDATIONS: 'AI_GamesDisplayed',\n AI_NEW_GAMES_RECOMMENDATIONS: 'AI_NewGamesDisplayed'\n};\n\n","import {ServiceBase} from '../ServiceBase';\nimport {AiRecommendedGames, IAiEngineService, IAiSortOptions} from './ai-engine.service.interface';\nimport { action, observable, makeObservable } from 'mobx';\nimport {SEO_CATEGORIES} from '../../consts/seo-categories';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {LIST_TYPE_ID} from \"../../../common/const/ai-trending-list-ids-map\";\n\nexport const NO_AI_GAMES_RECOMMENDATIONS: AiRecommendedGames = {\n isInitialized: false,\n gameTypes: [],\n gameTypesMap: {},\n engine: undefined\n};\n\ninterface ITrendingGamesRecommendations {\n gamesByBets: number[];\n gamesByActiveUsers: number[];\n}\n\nexport class AiEngineService extends ServiceBase implements IAiEngineService {\n constructor(services: IServiceFactoryExtended){\n super(services);\n\n makeObservable(this);\n\n this.reaction(() => this.services.user.isAuthorized,\n () => this._onOauthChange(),\n {\n fireImmediately: true\n });\n }\n\n @observable.ref\n aiRecommendedGames: AiRecommendedGames = NO_AI_GAMES_RECOMMENDATIONS;\n\n @observable.ref\n _trendingGamesRecommendations: ITrendingGamesRecommendations | null = null;\n get trendingRecommendedGamesForPlayerByBets(): number[] | null {\n this._loadTrendingRecommendedGamesForPlayer();\n return this._trendingGamesRecommendations?.gamesByBets || null;\n }\n get trendingRecommendedGamesForPlayerByActiveUsers(): number[] | null {\n this._loadTrendingRecommendedGamesForPlayer();\n return this._trendingGamesRecommendations?.gamesByActiveUsers || null;\n }\n\n /**\n * @description: A map where the key is the game type and the value is then game position in the AI recommendation\n */\n @observable.ref\n private _allAiRecommendedGameTypes: Record<number, number>;\n\n\n @action.bound\n private _setAiRecommendedGames(value: AiRecommendedGames) {\n\n let tempGameTypesMap = {};\n\n if (value.gameTypes) {\n value.gameTypes.forEach((gameType, i) => tempGameTypesMap[gameType] = i);\n }\n\n this.aiRecommendedGames = {\n ...value,\n gameTypes: (value.gameTypes || []),\n gameTypesMap: tempGameTypesMap\n };\n }\n\n @action.bound\n private _setTrendingRecommendedGamesForPlayer(trendingRecommendedGamesForPlayer: {[key: number]: number[]}) {\n this._trendingGamesRecommendations = {\n gamesByBets: (trendingRecommendedGamesForPlayer && trendingRecommendedGamesForPlayer[LIST_TYPE_ID.BETS]) || [],\n gamesByActiveUsers: (trendingRecommendedGamesForPlayer && trendingRecommendedGamesForPlayer[LIST_TYPE_ID.ACTIVE_USERS]) || []\n }\n }\n\n @action.bound\n private _setAllAiRecommendedGameTypes(gameTypes: number[]) {\n gameTypes = gameTypes || [];\n // creates a map where the key is the game type and the value is the index of that game type in the array\n this._allAiRecommendedGameTypes = gameTypes.reduce((acc, curr, index) => {\n acc[curr] = index;\n return acc;\n }, {});\n }\n\n private _onOauthChange() {\n this._initalizeTrendingRecommendations();\n this._updateAiRecommendedGames();\n }\n\n _initalizeTrendingRecommendations() {\n if(this.services.user.isAuthorized) {\n this._trendingGamesRecommendations = null;\n }\n }\n\n private async _updateAiRecommendedGames(): Promise<void> {\n let aiRecommendationsData = await this.services.sdk.getAIRecommendations({filterOutRecentlyPlayedGames: true});\n\n this._setAiRecommendedGames({\n gameTypes: aiRecommendationsData.gameTypes,\n engine: aiRecommendationsData.engine,\n gameTypesMap: {},\n isInitialized: true\n });\n aiRecommendationsData = await this.services.sdk.getAIRecommendations({maxGames: 500, filterOutRecentlyPlayedGames: false});\n this._setAllAiRecommendedGameTypes(aiRecommendationsData.gameTypes || []);\n\n this._sendAIRecommendationAnalytics();\n }\n\n private _sendAIRecommendationAnalytics(): void {\n\n let analyticsObject = this.aiRecommendedGames.gameTypes.reduce((result, gameType, index) => {\n result[gameType] = index;\n return result;\n }, {});\n\n this.services.analytics.sendElasticInfoEvent({\n category: SEO_CATEGORIES.AI_GAMES_RECOMMENDATIONS,\n action: JSON.stringify(analyticsObject),\n label: this.aiRecommendedGames.engine,\n eventType:\"Orbit_AI_Feature\"\n }, true);\n }\n\n async getCasinoRecommendedDynamicListsForPlayer(listIDs: string[]): Promise<Record<number, number>> {\n return await this.services.api.insightController.getCasinoRecommendedDynamicListsForPlayer({\n listsIDs: listIDs\n });\n }\n\n sortGames(gameTypes: number[], options?: IAiSortOptions): number[] {\n const allAiRecommendedGameTypes = Check.isEmpty(options?.gamesMapOverride) ? this._allAiRecommendedGameTypes : options?.gamesMapOverride;\n if(!allAiRecommendedGameTypes || Object.keys(allAiRecommendedGameTypes).length === 0) {\n return gameTypes;\n }\n\n const ignoreNumberOfGames = Check.isNumber(options?.ignoreNumberOfGames) ? options.ignoreNumberOfGames : 0;\n let fixedGameTypes = ignoreNumberOfGames > 0 ? gameTypes.slice(0, ignoreNumberOfGames) : [];\n const aiGameTypes = ignoreNumberOfGames > 0 ? gameTypes.slice(ignoreNumberOfGames) : gameTypes;\n\n const originalIndexes = {};\n aiGameTypes.forEach((gt, index) => {\n originalIndexes[gt] = index;\n });\n\n aiGameTypes.sort((gt1, gt2) => {\n let index1 = allAiRecommendedGameTypes[gt1];\n let index2 = allAiRecommendedGameTypes[gt2];\n\n if(Check.isUndefined(index1) && Check.isUndefined(index2)) {\n return (originalIndexes[gt1] < originalIndexes[gt2]) ? -1 : 1;\n }\n\n if(Check.isUndefined(index1)) { //if gt1 is not in the AI recommendations\n return 1;\n } else if(Check.isUndefined(index2)) {\n return -1;\n }\n\n return (index1 < index2) ? -1 : 1; //gt1 goes before gt2 if index1 < index2\n });\n\n // concatenate fixed game types (not sorted) with ai sorted ones\n return fixedGameTypes.concat(aiGameTypes);\n }\n\n getAiEngine(): string | undefined {\n return this.aiRecommendedGames.engine;\n }\n\n getAiEngineForGame(gameType: number): string | undefined {\n return this.aiRecommendedGames.gameTypesMap[gameType] === undefined ? undefined : this.aiRecommendedGames.engine;\n }\n\n private _isLoadTrendingRecommendedGamesForPlayerInProgress = false;\n private async _loadTrendingRecommendedGamesForPlayer(): Promise<void> {\n if(this._isLoadTrendingRecommendedGamesForPlayerInProgress) {\n return;\n }\n\n if(!Check.isNullOrUndefined(this._trendingGamesRecommendations)) {\n return;\n }\n\n this._isLoadTrendingRecommendedGamesForPlayerInProgress = true;\n try {\n const trendingRecommendedGames: { [key: number]: number[] } = await this.services.sdk.getTrendingRecommendedGamesForPlayer(LIST_TYPE_ID.BETS, LIST_TYPE_ID.ACTIVE_USERS);\n this._setTrendingRecommendedGamesForPlayer(trendingRecommendedGames);\n } finally {\n this._isLoadTrendingRecommendedGamesForPlayerInProgress = false;\n }\n\n }\n\n // List Type can be either 1 or 2, when 1 is sorted by bets and 2 is sorted by active_users\n private _getGamesTypesByListTypeID(listTypeId?: LIST_TYPE_ID): number[] {\n\n if(!Check.isNullOrUndefined(listTypeId)) {\n if (listTypeId === LIST_TYPE_ID.BETS) {\n return this.trendingRecommendedGamesForPlayerByBets;\n } else if(listTypeId === LIST_TYPE_ID.ACTIVE_USERS) {\n return this.trendingRecommendedGamesForPlayerByActiveUsers;\n } else {\n this.services.logger.error(`Fail to get ai games order from api. wrong listTypeId: ${listTypeId}`);\n }\n }\n\n return [];\n }\n\n sortGamesByAI(gamesTypesArray: number[], listTypeId: LIST_TYPE_ID) {\n const aiGamesByScore = this._getGamesTypesByListTypeID(listTypeId);\n if(!aiGamesByScore) {\n return gamesTypesArray;\n }\n \n return gamesTypesArray.sort((first,second) => {\n const firstGamePlace = aiGamesByScore.indexOf(first);\n const secondGamePlace = aiGamesByScore.indexOf(second);\n if(firstGamePlace === -1 || secondGamePlace === -1) {\n if(firstGamePlace === -1) {\n return secondGamePlace === -1 ? 0 : 1;\n } else {\n return -1;\n }\n }\n\n return firstGamePlace - secondGamePlace;\n });\n\n }\n}\n\n\n","import {IRunningGameHandler} from '../games/running-game-handler.interface';\nimport {IAutoLoginParams} from '../../../common/interfaces/autologin-params.interface';\nimport {BalanceType} from \"../../../common/const/wallet_balance_type\";\nimport IStructuredLoggingService from \"../../../common/interfaces/structured-logging-service-interface\";\nimport {IGeoLocationInfo} from \"../../../common/interfaces/geo-location-info.interface\";\nimport {GamingHistoryRecordRawData} from \"../gaming-history/gaming-history.service.interfce\";\nimport {ISdkHybridService} from \"../hybrid/hybrid.service.interface\";\nimport {ILegacyRegulation} from \"../regulation/legacy-regulation.interface\";\nimport {NullableString, UndefinedString} from \"../../../common/types/nullable-types\";\nimport ISdkGnwpService from \"../../../sdk/src/services/gnwp/gnwp_service_interface\";\nimport {IScriptLoaderService} from \"../scrip-loader/script-loader.service.interface\";\nimport IStateOfResidence from \"../../../common/interfaces/state-of-residence.interface\";\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\nimport {GNWP_SOURCES} from \"../gnwp/gnwp-consts\";\nimport {LoadScriptOptions} from \"../../../common/interfaces/load-script-options\";\nimport {IGameRestriction} from \"../restrictions/game-restriction.interface\";\nimport {DateFormattedToRegulationOffset} from \"../time/time.service.interface\";\nimport {IInactivityTimeoutSettings} from \"../user/model/inactivity-timeout-settings\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {GameRawData} from \"./gme-raw-data.type\";\n\n\nexport interface ITokenInfo {\n readonly loginIP: string;\n}\n\nexport interface CmsUserSignature {\n readonly message: string;\n readonly signature: string;\n}\n\nexport interface DateAndTimeFormat {\n date: string;\n time: string;\n dateTime: string;\n dateTimeHistory: string;\n}\n\ninterface OnEventParams {\n eventName: string;\n callback: Function;\n context: any;\n}\n\ninterface SendAnalyticsParams {\n category: string;\n action: string;\n label: string;\n value: string;\n omitStructuredLogger?: boolean\n}\n\ninterface GetAIListResponse {\n aiGameTypesArray: number[];\n aiEngine: string;\n}\n\n\n\n\nexport const CGP_EVENTS_NAMES = {\n ON_BEFORE_OAUTH_STATE_CHANGE: 'ON_BEFORE_OAUTH_STATE_CHANGE',\n OAUTH_STATE_CHANGE: 'OAUTH_STATE_CHANGE',\n RECENTLY_PLAYED_GAMES_UPDATED: 'RECENTLY_PLAYED_GAMES_UPDATED',\n AUTOLOGIN_SUCCESS: 'AUTOLOGIN_SUCCESS',\n AUTOLOGIN_FAILED: 'AUTOLOGIN_FAILED',\n DEEPLINK_RECEIVED: 'DEEPLINK_RECEIVED',\n GAME_OPEN: 'GAME_OPEN',\n CLOSE_GAME: 'CLOSE_GAME',\n LOGIN_FORM_OPEN: 'LOGIN_FORM_OPEN',\n LOGIN_FORM_CLOSE: 'LOGIN_FORM_CLOSE',\n TOKEN_LIFETIME_EXPIRED: 'TOKEN_LIFETIME_EXPIRED',\n LIVE_TABLES_UPDATE: 'LIVE_TABLES_UPDATE',\n GAME_POPUP_SHOW: 'GAME_POPUP_SHOW',\n BALANCE_UPDATED: 'BALANCE_UPDATED',\n REGISTRATION_COMPLETED: 'REGISTRATION_COMPLETED',\n APP_RESUMED: 'APP_RESUMED',\n APP_PAUSED: 'APP_PAUSED',\n EXTERNAL_LINK_CLOSED: 'EXTERNAL_LINK_CLOSED',\n TOUCH_ID_STATE_CHANGED: 'TOUCH_ID_STATE_CHANGED',\n OMG_DISPLAYED: 'OMG_DISPLAYED',\n SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED: 'SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED',\n LIVE_GAME_SWITCHED: 'LIVE_GAME_SWITCHED',\n PROMOTIONS_CHANGED: 'PROMOTIONS_CHANGED',\n DEPOSIT_WIDGET_CLOSED: 'DEPOSIT_WIDGET_CLOSED',\n};\n\n\nexport interface DeviceInfo {\n os: {\n name: string;\n version: number;\n isMobileOS: boolean;\n isIOS: boolean;\n isAndroid: boolean;\n isPC: boolean;\n isMacOS: boolean;\n };\n browser: {\n name: string;\n version: number;\n isSafari: boolean;\n isChrome: boolean;\n isFirefox: boolean;\n };\n model: {\n isIphone: boolean;\n isIpad: boolean;\n deviceType: string | undefined;\n };\n hybrid: {\n isHybrid: boolean;\n isEmbedded: boolean;\n inCasino: boolean;\n inPoker: boolean;\n inSport: boolean;\n };\n feature: {\n isTouch: boolean;\n };\n isProgressiveWebApp: boolean;\n isStandalone: boolean;\n\n /** @deprecated */\n isMobile(): boolean;\n /** @deprecated */\n isTablet(): boolean;\n\n}\n\nexport interface CGPEventSubscription {\n off();\n}\n\n\nexport interface GetAutoLoginTokenResponse {\n token: string;\n}\n\nexport interface GetPlatformTokenResponse {\n token: string;\n}\n\nexport interface IDailyDealCampaign {\n MarketingCampaignId: string;\n}\n\nexport interface IAppFlayerData {\n appsflyerid: string,\n appname: string,\n deviceid: string,\n afinstall: string,\n}\n\nexport interface ISkinSerialData extends IAppFlayerData {\n [key: string]: any;\n}\n\nexport interface CgpSkinInfo {\n getBrandName(): string;\n getPlatformSystemID(): number;\n getClientPlatform(): string;\n getVersion(): string;\n getCulture(): string;\n getMinimumAge(): number;\n getSerialData(marketingData: any): Promise<ISkinSerialData>;\n getDefaultHybridSerial(): string;\n}\n\nexport interface ISdkUtils {\n getGuid(): string\n arraysAreEqual(arr1: any[], arr2: any[]): boolean;\n}\n\nexport interface ISdkRegulationService {\n isUSRegulation(): boolean;\n getRegulationCode(): number;\n getSessionCooldownConfig(): {featureEnabled: boolean; cooldownTime: string};\n shouldShowPlayerLimitsToaster(): boolean;\n getErrorMessage(errorCode: number): NullableString;\n isLoginPopupEnabled(): boolean;\n}\n\nexport interface IOpenHistoryGameRequest {\n historyRecordData: GamingHistoryRecordRawData;\n gameType: number,\n gameName: string,\n gameRoundId: string,\n gameRoundDate: string;\n}\n\nexport interface IDateFormattedToRegulationOffset {\n date: Date;\n isUTC: boolean;\n}\n\nexport interface ICgpSdk {\n countPlayerChallenges(): number;\n getRegulationDateAndTimeFormat(): DateAndTimeFormat;\n device(): DeviceInfo;\n displayHybrid?: () => void;\n isHybridEmbeddedGame(gameType: number): boolean;\n openHybridLink(url: string): void;\n format$$$(value: number, withDecimal: boolean);\n getBalance();\n getAIList(maxGames: number, filterOutRecentlyPlayedGames: boolean, numberOfRecentlyPlayedGameToFilterOut: number): Promise<GetAIListResponse>;\n getAINewGamesList(maxGames: number, filterOutRecentlyPlayedGames: boolean, numberOfRecentlyPlayedGameToFilterOut: number): Promise<GetAIListResponse>;\n getAutoLoginToken(): Promise<GetAutoLoginTokenResponse>;\n getPlatformToken(): Promise<GetPlatformTokenResponse>;\n getFirebaseToken(): string;\n getBrandID(): number;\n getCorrelatedGames(gameType: number, numberOfGames: number): Promise<number[]>;\n getExternalBrandCallbackURL(): string;\n getExternalBrandCallbackURLMethod(): string;\n getGamesInfo(gameTypes: number[]): Promise<GameRawData>;\n getGamesThemes(): Record<number, string>;\n getGamesVendors(): Record<number, string>;\n getGamesCompanies(): Record<number, string>;\n getGamesInfoForHistory(gameTypes: number[]): Promise<GameRawData>;\n getGRSEnvironments(): Promise<any>;\n getSourceSubBrandName(): string;\n getSubBrandID(): number;\n dateAndTimeFormat(): DateAndTimeFormat;\n getUserData(): any;\n getSessionId(): string;\n getUserSegments(): CmsUserSignature;\n isAuthorized(): boolean;\n isLoginFromRegistration(): boolean;\n structuredLoggingService(): IStructuredLoggingService;\n isVIP(): boolean;\n logout(): Promise<void>;\n menuActionExecute(key: string): void;\n onEvent(params: OnEventParams): CGPEventSubscription;\n routeChanged(): void;\n openGame(options: any): Promise<IRunningGameHandler>;\n openLoginForm(marketingParams?: MarketingParams): Promise<void>;\n sendAnalytics(params: SendAnalyticsParams);\n setAutoLoginToken(autologinToken: any): void;\n startLiveTableFeeds(): void;\n stopLiveTableFeeds(): void;\n getCurrentServerDate(): Date;\n formatToRegulationOffset(date: UndefinedString, dateFormattedToRegulation: UndefinedString): IDateFormattedToRegulationOffset;\n getDailyDealCampaigns(): Promise<IDailyDealCampaign[]>;\n getBankroll(balanceType: BalanceType, plainNumber?: boolean): string | number;\n\n getJackpotsById(): unknown;\n getJackpotsByGameType(): unknown;\n\n getProductPackage(): number;\n\n getSkin(): CgpSkinInfo;\n runAutoLogin(autoLoginParams: IAutoLoginParams): Promise<void>;\n\n getUtils(): ISdkUtils;\n onOrbitInitComplete(): void;\n\n getEnvironment(): string;\n pushDataToDataLayer(data: {}): void;\n getCountryName(): string;\n getCountryIso3(): string;\n getSupportedStates(): IStateOfResidence[];\n getWrongLocationDetectionPath(): string;\n getTrendingRecommendedGamesForPlayer(listTypeId: number[]): Promise<{[key: number]: number[]}>;\n\n getRegulationService(): ISdkRegulationService;\n\n waitForAutologin(): Promise<void>;\n httpPost<TResponse>(url: string, requestData: unknown): Promise<TResponse>;\n httpGet<TResponse>(url: string, requestData: unknown): Promise<TResponse>;\n getConfigs(): any;\n loadScript(options: LoadScriptOptions): Promise<void>;\n getRefreshToken(): string;\n getCurrencyIso3(): string;\n getGoogleClientID(): string;\n isInAutologin(): boolean;\n fireDepositWidgetClosed(): void;\n fireFreeToPlayWidgetClosed(): void;\n getToken(): ITokenInfo | null;\n isDepositWidgetSupportedByHybrid(): boolean;\n getGeoLocationInfo(): Promise<IGeoLocationInfo | null>;\n getDownloadAppLink(): string;\n promptPushNotificationPermissionRequest(): void;\n openPopUpOnSecondWebView(content: string, timeout: number): void;\n closePopUpOnSecondWebView(): void;\n readonly hybrid: ISdkHybridService;\n readonly currentRegulation: ILegacyRegulation;\n getCurrentBrowserTabId(): string;\n setOrbitActiveOverlayExists(value: boolean): void;\n readonly gnwp: ISdkGnwpService;\n readonly scriptLoader: IScriptLoaderService;\n startAutoRetryGeoProcess(): Promise<void>;\n extractTokenProperty(tokenProperty: string): NullableString;\n updateTokenProperty(tokenProperty: string, value: NullableString): void;\n isLoginPopupEnabled(): boolean;\n getAccountData(): any;\n getTempAccountGnwpSource(): GNWP_SOURCES;\n isPlayerMessagesConnected(): boolean;\n getGameRestriction(gameType: number, gameGroupId: number, vendorId: number): IGameRestriction;\n getCurrentDate(): Date;\n convertToRegulationTimeZone(date: Date): DateFormattedToRegulationOffset;\n format(date: any, mask?: string, utc?: boolean): string;\n getInactivityTimeoutSettings(): IInactivityTimeoutSettings;\n setInactivityTimeout(timeout: TimeSpan): void;\n createUserActivityDetactor(params): void;\n writeWidgetLogs(payload: any): Promise<void>;\n}\n","import {CGP_EVENTS_NAMES, CGPEventSubscription, ICgpSdk} from './cgp-sdk.interface';\nimport { LiveTables } from '../live-table-feeds-service/live-table-feeds.service.interface';\nimport {TimeSpan} from '@sparkware/app-utils';\nimport {CLIENT_EVENTS, SYSTEM_EVENTS} from \"../../../sdk/src/events/events\";\nimport {\n IFreePlayVoucherData,\n IFreePlayVoucherDelta\n} from \"../../../common/interfaces/free-play/free-play-voucher-data.interface\";\nimport {\n INetPositionGameTypeData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/netposition_handler.interfaces\";\nimport {IJackpotDataById} from '../../../sdk/src/services/live_feeds/jackpots/jackpot_feeds_service_interface';\nimport {\n IGamblingSessionUpdateData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/gambling-session_handler_interfaces\";\nimport {\n IGamblingSessionActionData, IOMGParsedData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/messages_handler_interfaces\";\nimport {GNWP_SOURCES} from \"../gnwp/gnwp-consts\";\n\nexport interface OnShowGamePopupCallbackParams {\n gameType?: number,\n gamePopupApprovedCallback: () => void\n}\n\nexport interface OnGameOpenParams {\n gameType: number;\n isReal: boolean;\n}\n\nexport interface OnGameCloseParams {\n gameType: number;\n isReal: boolean;\n isGamePlayed: boolean;\n showNextGameSuggestion: boolean;\n}\n\nexport interface OnPlayerActionParams {\n actionName: string;\n options?: any;\n}\n\nexport interface OnOauthStateChangedParams {\n loginType?: number;\n logoutReason?: number;\n kickReason?: number;\n fromRegistration?: boolean;\n}\n\nexport interface IGeoRestrictionsUpdateEventParams {\n KickReasonId?: string;\n TroubleshooterRetry?: boolean;\n DetailedMessages?: string[];\n}\n\nexport interface IPeriodicGeoUpdateEventParams {\n mobileNumber: string;\n licenseKey: string;\n licenseWebKey: string;\n locationTransactionId: string;\n}\n\nexport class SdkEvents {\n constructor(private CGP: ICgpSdk) {\n\n }\n\n onOAuthStateChanged(callback: (params: OnOauthStateChangedParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.OAUTH_STATE_CHANGE,\n callback: callback,\n context: this\n });\n }\n\n onBeforeOAuthStateChanged(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.ON_BEFORE_OAUTH_STATE_CHANGE,\n callback: callback,\n context: this\n });\n }\n\n onDeepLinkReceived(callback: (deepLinkObject: any) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.DEEPLINK_RECEIVED,\n callback: callback,\n context: this\n });\n }\n\n onShowGamePopup(callback: (args: OnShowGamePopupCallbackParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.GAME_POPUP_SHOW,\n callback: callback,\n context: this\n });\n }\n\n onGameOpen(callback: (params: OnGameOpenParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.GAME_OPEN,\n callback: callback,\n context: this\n });\n }\n\n onGameClose(callback: (params?: OnGameCloseParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.CLOSE_GAME,\n callback: callback,\n context: this\n });\n }\n\n\n onPlayerAction(callback: (eventData: OnPlayerActionParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.PLAYER_ACTION,\n callback: (data) => callback(data || {} as OnPlayerActionParams),\n context: this\n });\n }\n\n onRecentlyPlayedGamesUpdated(callback: (gameTypes: number[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.RECENTLY_PLAYED_GAMES_UPDATED,\n callback: callback,\n context: this\n });\n }\n\n onLoginFormOpen(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.LOGIN_FORM_OPEN,\n callback: callback,\n context: this\n });\n }\n\n onLoginFormClosed(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.LOGIN_FORM_CLOSE,\n callback: callback,\n context: this\n });\n }\n\n onTokenLifetimeExpired(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.TOKEN_LIFETIME_EXPIRED,\n callback: callback,\n context: this\n });\n }\n\n onLiveTableFeedsUpdate(callback: (tablesData: LiveTables) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.LIVE_TABLES_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n\n onJackpotsByIdUpdate(callback: (jackpots: unknown) => void) {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LIVE_FEEDS_JACKPOTS_BY_ID_UPDATED,\n callback,\n context: this\n });\n }\n\n onJackpotsAmountsByGameUpdate(callback: (jackpots: Record<string, number>) => void) {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LIVE_FEEDS_JACKPOT_AMOUNTS_BY_GAME_UPDATED,\n callback,\n context: this\n });\n }\n\n onJackpotsAmountsByIdUpdate(callback: (jackpots: Record<string, IJackpotDataById>) => void) {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LIVE_FEEDS_JACKPOTS_BY_ID_UPDATED,\n callback,\n context: this\n });\n }\n\n onBalanceUpdated(callback: () => void) {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.BALANCE_UPDATED,\n callback,\n context: this\n });\n }\n\n onSessionTimerUpdate(callback: (data: {sessionTime: TimeSpan}) => void) {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_TIMER_UPDATE,\n callback,\n context: this\n });\n }\n\n onRealityCheckOpened(callback: () => void) {\n return this.CGP.onEvent({\n eventName: CLIENT_EVENTS.REALITY_CHECK_OPENED,\n callback,\n context: this\n });\n }\n\n onRealityCheckClosed(callback: () => void) {\n return this.CGP.onEvent({\n eventName: CLIENT_EVENTS.REALITY_CHECK_CLOSED,\n callback,\n context: this\n });\n }\n\n\n onRegistrationCompleted(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.REGISTRATION_COMPLETED,\n callback,\n context: this\n });\n }\n\n onAppResumed(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.APP_RESUMED,\n callback: callback,\n context: this\n });\n }\n\n onAppPaused(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.APP_PAUSED,\n callback: callback,\n context: this\n });\n }\n\n onExternalLinkClosed(callback: (linkSource: string) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.EXTERNAL_LINK_CLOSED,\n callback: callback,\n context: this\n });\n }\n\n onDepositWidgetClosed(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.DEPOSIT_WIDGET_CLOSED,\n callback: callback,\n context: this\n });\n }\n\n onCashierOrDepositWidgetClosed(callback: () => void): CGPEventSubscription {\n const subscriptions: CGPEventSubscription[] = [];\n subscriptions.push(this.onDepositWidgetClosed(() => {\n callback();\n }))\n\n subscriptions.push(this.onExternalLinkClosed((linkSource) => {\n if (GNWP_SOURCES.CASHIER === linkSource) {\n callback();\n }\n }));\n\n return {\n off: () => {\n subscriptions.forEach(s => s.off);\n }\n };\n }\n\n onTouchIDActiveStateChanged(callback: (state: boolean) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.TOUCH_ID_STATE_CHANGED,\n callback: callback,\n context: this\n });\n }\n\n onOmgDisplayed(callback: (state: unknown) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.OMG_DISPLAYED,\n callback,\n context: this\n });\n }\n\n onBurnoutMessageReceived(callback: (state: unknown) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED,\n callback,\n context: this\n });\n }\n\n onLiveGameSwitched(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.LIVE_GAME_SWITCHED,\n callback: callback,\n context: this\n });\n }\n\n onPromotionsChanged(callback: (data: {Cid: number, IsPromotionDisplayedInClient: boolean, IndicationInClientPromotionsIds: number[]}) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: CGP_EVENTS_NAMES.PROMOTIONS_CHANGED,\n callback: callback,\n context: this\n });\n }\n\n onFreeToPlayWidgetClosed(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.FREE_TO_PLAY_WIDGET_CLOSED,\n callback: callback,\n context: this\n });\n }\n\n onPostMessage(callback: (message: MessageEvent) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.POST_MESSAGE_ARRIVE,\n callback: callback,\n context: this\n });\n }\n\n onHybridPostMessage(callback: (message: MessageEvent) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.HYBRID_POST_MESSAGE_ARRIVE,\n callback: callback,\n context: this\n });\n }\n\n onFreePlayBatchAdded(callback: (data: IFreePlayVoucherData[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_FREE_PLAY_BATCH_ADDED,\n callback: callback,\n context: this\n });\n }\n\n onFreePlayBatchUpdated(callback: (data: IFreePlayVoucherDelta[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_FREE_PLAY_BATCH_UPDATED,\n callback: callback,\n context: this\n });\n }\n\n onFreePlayBatchRemoved(callback: (voucherIds: string[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_FREE_PLAY_BATCH_REMOVED,\n callback: callback,\n context: this\n });\n }\n\n\n onHybridEmbeddedGameLoadingIndicatorUpdateV1(callback: (percentage: number | string) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LOADING_INDICATOR_EMBEDDED_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n onHybridEmbeddedGameLoadingIndicatorUpdateV2(callback: (eventData: {statusBar: number | string; numberOfPackages: string}) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LOADING_INDICATOR_EMBEDDED_UPDATE_V2,\n callback: callback,\n context: this\n });\n }\n\n onFirebaseGotNewToken(callback: (eventData: {token: string}) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.FIREBASE_GOT_NEW_TOKEN,\n callback: callback,\n context: this\n });\n }\n\n onNetPositionUpdated(callback: (gamesTypesData: INetPositionGameTypeData[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_NET_POSITION_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n onLoginSessionResumed(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.LOGIN_SESSION_RESUMED,\n callback: callback,\n context: this\n });\n }\n\n onUserApprovedPostLoginPopup(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.USER_APPROVE_GAME_POPUP,\n callback: callback,\n context: this\n });\n }\n\n onFirebaseOmgReceived(callback: (omgData: IOMGParsedData) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_OMG_RECEIVED,\n callback: callback,\n context: this\n });\n }\n\n onReceivedToaster(callback: (params: any[]) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SESSION_EVENT_RECEIVED_TOASTER,\n callback: callback,\n context: this\n });\n }\n\n onSecondWebViewClose(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.SECOND_WEB_VIEW_CLOSE,\n callback: callback,\n context: this\n });\n }\n\n onRestrictionsChanged(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.RESTRICTIONS_CHANGED,\n callback: callback,\n context: this\n });\n }\n\n onPlayerMessagesConnected(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.PLAYER_MESSAGES_STRATEGY_READY,\n callback: callback,\n context: this\n });\n }\n\n onGeoRestrictionsUpdate(callback: (params: IGeoRestrictionsUpdateEventParams) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.GEO_RESTRICTIONS_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n onGeoPeriodicUpdate(callback: (params: IPeriodicGeoUpdateEventParams) => void ): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.GEO_PERIODIC_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n onHybridGeoLocationResponse(callback: (result: string) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.GEO_HYBRID_GET_LOCATION_RES,\n callback: callback,\n context: this\n });\n }\n\n onGamblingSessionUpdate(callback: (sessionData: IGamblingSessionUpdateData) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.GAMBLING_SESSION_UPDATE,\n callback: callback,\n context: this\n });\n }\n\n onGamblingSessionAction(callback: (sessionData: IGamblingSessionActionData) => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.GAMBLING_SESSION_ACTION,\n callback: callback,\n context: this\n });\n }\n\n onServerTimeUpdated(callback: () => void): CGPEventSubscription {\n return this.CGP.onEvent({\n eventName: SYSTEM_EVENTS.TIME_UPDATED_FROM_SERVER,\n callback: callback,\n context: this\n });\n }\n\n\n}\n","import Event from \"../../../sdk/src/utils/event\";\nimport {CLIENT_EVENTS, SYSTEM_EVENTS} from \"../../../sdk/src/events/events\";\nimport {GNWP_SOURCES} from \"../gnwp/gnwp-consts\";\nimport {IOmgHandlerHook} from \"../external-links/handlers/omg/omg-handler.hook.interface\";\n\nexport class SdkEventsTrigger {\n gameOpen(eventData: {gameType: number; isReal: boolean}): void {\n Event.fire(SYSTEM_EVENTS.GAME_OPEN, {\n gametype: eventData.gameType,\n gameType: eventData.gameType,\n isReal: eventData.isReal\n });\n }\n\n gameClosed(eventData: {gameType: number; isReal: boolean; isGamePlayed: boolean; showNextGameSuggestion: boolean}): void {\n Event.fire(SYSTEM_EVENTS.CLOSE_GAME, {\n gametype: eventData.gameType,\n gameType: eventData.gameType,\n isReal: eventData.isReal,\n isGamePlayed: eventData.isGamePlayed,\n showNextGameSuggestion: eventData.showNextGameSuggestion\n });\n }\n\n keepAlive(): void {\n Event.fire(SYSTEM_EVENTS.EXTEND_USER_TIME_TO_LIVE);\n }\n\n liveGameSwitched(): void {\n Event.fire(SYSTEM_EVENTS.LIVE_GAME_SWITCHED);\n }\n\n hybridGameLoadingIndicatorClosed(): void {\n Event.fire(SYSTEM_EVENTS.LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X);\n }\n\n updateMarketingParams(marketingParams: any): void {\n Event.fire(SYSTEM_EVENTS.INCOMING_MARKETING_DATA, marketingParams);\n }\n\n\n navigateToGameInWebView(url: string): void {\n Event.fire(SYSTEM_EVENTS.WEB_VIEW_NAVIGATE_GAME, url);\n }\n\n gameSequenceFinishedSuccess(): void {\n Event.fire(SYSTEM_EVENTS.GAME_SEQUENCE_FINISH, true);\n }\n\n showHybridAlert(message: string): void {\n Event.fire(SYSTEM_EVENTS.HYBRID_ALERT, message);\n }\n\n locationPopupClosed(): void {\n Event.fire(SYSTEM_EVENTS.LOCATION_POPUP_CLOSED);\n }\n\n registrationCompleted(params: {UserInfo: string, SourceProductPackage: string}) {\n Event.fire(SYSTEM_EVENTS.REGISTRATION_COMPLETED, params);\n }\n\n externalLinkClosed(params: {gnwpSource: GNWP_SOURCES}): void {\n Event.fire(SYSTEM_EVENTS.EXTERNAL_LINK_CLOSED, params.gnwpSource)\n }\n\n omgDisplayed(omgHook: IOmgHandlerHook): void {\n Event.fire(SYSTEM_EVENTS.OMG_DISPLAYED, omgHook)\n }\n\n closeAllSecondWebViews(): void {\n Event.fire(SYSTEM_EVENTS.SECOND_WEB_VIEW_CLOSE_ALL);\n }\n\n closeNyxSecondWebView(): void {\n Event.fire(SYSTEM_EVENTS.SECOND_WEB_VIEW_CLOSE_NYX);\n }\n\n openUrlInSecondWebView(url: string): void {\n Event.fire(SYSTEM_EVENTS.SECOND_WEB_VIEW_NAVIGATE_SPORT, url);\n }\n\n closeModifyBimetricDialog(): void {\n Event.fire(SYSTEM_EVENTS.TOUCH_ID_STATE_CHANGED);\n }\n\n onInitScreenShow(): void {\n Event.fire(SYSTEM_EVENTS.TOUCH_ID_INIT_SCREEN_SHOW);\n }\n\n enableHybridGeoLocation(enabled: boolean): void {\n Event.fire(SYSTEM_EVENTS.GEO_HYBRID_UPDATE_ENABLE, enabled);\n }\n\n hybridGeoLocation(geoParams: {license: string;\n sessionKey: string;\n userId: string\n phone: string;\n reason: string;\n identifierType: string }): void {\n Event.fire(SYSTEM_EVENTS.GEO_HYBRID_GET_LOCATION, geoParams);\n }\n\n realityCheckOpen(): void {\n Event.fire(CLIENT_EVENTS.REALITY_CHECK_OPENED)\n }\n\n realityCheckClosed(): void {\n Event.fire(CLIENT_EVENTS.REALITY_CHECK_CLOSED);\n }\n\n exploreSwipe(): void {\n Event.fire(SYSTEM_EVENTS.EXPLORE_SWIPE);\n }\n\n messageClosed(): void {\n Event.fire(SYSTEM_EVENTS.MESSAGE_CLOSE);\n }\n}","import {\n AIRecommendations,\n ISdkService,\n OpenGameOptions,\n UserData, IGetAiRecommendationsOptions\n} from './sdk.service.interface';\nimport {action, computed, observable, makeObservable} from 'mobx';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {\n DeviceInfo,\n GetAutoLoginTokenResponse,\n ICgpSdk,\n CgpSkinInfo,\n GetPlatformTokenResponse,\n ISdkUtils,\n ISdkRegulationService,\n IDateFormattedToRegulationOffset, DateAndTimeFormat, CmsUserSignature, ITokenInfo\n} from './cgp-sdk.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {IRunningGameHandler} from '../games/running-game-handler.interface';\nimport {SdkEvents} from './sdk-events';\nimport {Check, TimeSpan} from '@sparkware/app-utils';\nimport {CGP_OBJECT_NAME} from '../../app-bootstrap/constants';\nimport {IAutoLoginParams} from '../../../common/interfaces/autologin-params.interface';\nimport {BalanceType} from '../../../common/const/wallet_balance_type';\nimport IStructuredLoggingService from \"../../../common/interfaces/structured-logging-service-interface\";\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\nimport {IGeoLocationInfo} from \"../../../common/interfaces/geo-location-info.interface\";\nimport {ISdkHybridService} from \"../hybrid/hybrid.service.interface\";\nimport {ILegacyRegulation} from \"../regulation/legacy-regulation.interface\";\nimport {SdkEventsTrigger} from \"./sdk-events-trigger\";\nimport ISdkGnwpService from \"../../../sdk/src/services/gnwp/gnwp_service_interface\";\nimport {IScriptLoaderService} from \"../scrip-loader/script-loader.service.interface\";\nimport IStateOfResidence from \"../../../common/interfaces/state-of-residence.interface\";\nimport {GNWP_SOURCES} from \"../gnwp/gnwp-consts\";\nimport {NullableString, UndefinedString} from '../../../common/types/nullable-types';\nimport {LoadScriptOptions} from \"../../../common/interfaces/load-script-options\";\nimport {IGameRestriction} from \"../restrictions/game-restriction.interface\";\nimport {DateFormattedToRegulationOffset} from \"../time/time.service.interface\";\nimport {IInactivityTimeoutSettings} from \"../user/model/inactivity-timeout-settings\";\nimport {SdkOverlayZIndex} from \"../../../common/interfaces/sdk-overlay-z-index\";\nimport {ExternalLinksZIndexes} from \"../external-links/external-links-z-indexes\";\nimport {GameRawData} from \"./gme-raw-data.type\";\n\n\n\nexport class SdkService extends ServiceBase implements ISdkService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n\n //setTimeout to avoid circular dependency\n //SdkService (constructor)\n // => OAuth2AnonymousState (_onRunAutologin)\n // => OAuth2BackendProxy (_loginMethod is calling isMigrationEnabledFromConfig from PlayerMigrationService)\n // => PlayerMigrationService (isMigrationEnabledFromConfig)\n // => ConfigurationService (servicesConfigs is calling SdkService.getConfigs())\n // => SdkService - and here because the call was initiated in the SdkConstructor the ServiceFactory will execute again teh SdkService constructor.\n setTimeout(() => {\n this._updateLocalStorageAccordingToCookie();\n });\n\n\n this._displayHybrid();\n\n this.reaction(() => this.services.location.currentUri,\n () => {\n if (this.services.location.hasNavigationHistory) {\n this.CGP.routeChanged();\n }\n });\n }\n\n private _displayHybrid() {\n //F TO DO why is this here and not in the SDK ?\n if (Check.isFunction(this.CGP.displayHybrid)) {\n this.CGP.displayHybrid();\n }\n }\n\n private _events: SdkEvents = null;\n\n get events(): SdkEvents {\n if (!this._events) {\n this._events = new SdkEvents(this.CGP);\n }\n\n return this._events;\n }\n\n\n private get CGP(): ICgpSdk {\n return this.services.window.getGlobalProperty(CGP_OBJECT_NAME) as ICgpSdk;\n }\n\n\n get isAuthorized(): boolean {\n return this.CGP.isAuthorized();\n }\n\n get isLoginFromRegistration(): boolean {\n return this.CGP.isLoginFromRegistration();\n }\n\n get getCGPMaxOverlayZIndex(): number {\n return 9002;\n }\n\n get structuredLoggingService(): IStructuredLoggingService {\n return this.CGP.structuredLoggingService();\n }\n\n get dateAndTimeFormat(): DateAndTimeFormat {\n return this.CGP.getRegulationDateAndTimeFormat();\n }\n\n get userData(): UserData {\n let rawUserData = this.CGP.getUserData();\n let rawAccountData = (rawUserData && rawUserData.accountData) || {};\n\n\n return {\n userName: rawUserData?.userName,\n firstName: rawAccountData.FirstName,\n lastName: rawAccountData.LastName,\n IsVIP: this.CGP.isVIP(),\n statusGroupId: rawAccountData.StatusGroupId,\n GenderId: rawAccountData.genderID,\n timeSinceRegistration: rawAccountData.TimeSinceRegistration,\n cid: rawUserData?.cid,\n playerRMStatus: rawAccountData.PlayerRMStatus,\n sessionId: this.CGP.getSessionId(),\n registrationCountry: rawAccountData.RegistrationCountry,\n joinDate: rawAccountData.JoinDate,\n isFTD: !Check.isNullOrUndefined(rawAccountData.FTDSubBrand),\n IsPromotionPermitted: rawAccountData.IsPromotionPermitted,\n taxId: rawAccountData.TaxId,\n lastLogin: rawAccountData.LastLogin,\n lastLoginDateInTimeZone: rawAccountData.LastLoginDateInTimeZone,\n mobileNumber: rawAccountData.MobileNumber\n };\n }\n\n\n @observable.ref\n isSdkReady: boolean = true;\n\n @action.bound\n private _setIsSdkReady(value: boolean) {\n this.isSdkReady = value;\n }\n\n getAIRecommendations(options?: IGetAiRecommendationsOptions): Promise<AIRecommendations> {\n return this.CGP.getAIList(options?.maxGames, options?.filterOutRecentlyPlayedGames, options?.numberOfRecentlyPlayedGameToFilterOut).then(data => {\n return {\n gameTypes: data.aiGameTypesArray || [],\n engine: data.aiEngine\n };\n });\n }\n\n getTrendingRecommendedGamesForPlayer(...listTypeIds: number[]): Promise<{[key: number]: number[]}> {\n return this.CGP.getTrendingRecommendedGamesForPlayer(listTypeIds);\n }\n\n getAINewRecommendations(options?: IGetAiRecommendationsOptions): Promise<AIRecommendations> {\n return this.CGP.getAINewGamesList(options?.maxGames, options?.filterOutRecentlyPlayedGames, options?.numberOfRecentlyPlayedGameToFilterOut).then(data => {\n return {\n gameTypes: data.aiGameTypesArray || [],\n engine: data.aiEngine\n };\n });\n }\n\n getCurrentServerDate(): Date {\n return this.CGP.getCurrentServerDate();\n }\n\n formatToRegulationOffset(date: UndefinedString, dateFormattedToRegulation: UndefinedString): IDateFormattedToRegulationOffset {\n return this.CGP.formatToRegulationOffset(date, dateFormattedToRegulation);\n }\n\n sendAnalytics(category: string, action: string = null, label: string = null, value: string = null, omitStructuredLogger: boolean = null) {\n try {\n this.CGP.sendAnalytics({\n category: category,\n action: action,\n label: label,\n value: value,\n omitStructuredLogger: omitStructuredLogger\n });\n } catch (ex) {\n this.services.logger.error(`SdkService failed to sendAnalytics: ${ex}`);\n }\n }\n\n getCmsUserSignature(): CmsUserSignature {\n return this.CGP.getUserSegments();\n }\n\n formatMoney(value: number, withDecimal: boolean = false): string {\n return this.CGP.format$$$(value, withDecimal);\n }\n\n get device(): DeviceInfo {\n return this.CGP.device();\n }\n\n waitForAutologin(): Promise<void> {\n return this.CGP.waitForAutologin();\n }\n\n async openGame(options: OpenGameOptions): Promise<IRunningGameHandler> {\n\n let openGameOptions: any = {...options};\n if (!options.showRegister) {\n openGameOptions.navbar = { //F TO DO - do we realy need this navbar option ?\n login: {\n showRegister: false\n }\n }\n }\n\n return await this.CGP.openGame(openGameOptions);\n\n }\n\n async openLoginForm(marketingParams?: MarketingParams): Promise<void> {\n\n await this.CGP.openLoginForm(marketingParams);\n }\n\n getGamesInfoForHistory(gameTypes: number[]): Promise<GameRawData> {\n return this.CGP.getGamesInfoForHistory(gameTypes);\n }\n\n getGamesInfo(gameTypes: number[]): Promise<GameRawData> {\n return this.CGP.getGamesInfo(gameTypes);\n }\n\n getGamesThemes(): Record<number, string> {\n return this.CGP.getGamesThemes();\n }\n\n getGamesVendors(): Record<number, string> {\n return this.CGP.getGamesVendors();\n }\n\n getGamesCompanies(): Record<number, string> {\n return this.CGP.getGamesCompanies();\n }\n\n getAutoLoginToken(): Promise<GetAutoLoginTokenResponse> {\n return this.CGP.getAutoLoginToken();\n }\n\n getPlatformToken(): Promise<GetPlatformTokenResponse> {\n return this.CGP.getPlatformToken();\n }\n\n getFirebaseToken(): string {\n return this.CGP.getFirebaseToken();\n }\n\n getCorrelatedGames(gameType: number, numberOfGames: number = 3): Promise<number[]> {\n return this.CGP.getCorrelatedGames(gameType, numberOfGames);\n }\n\n logout(): Promise<void> {\n return this.CGP.logout();\n }\n\n getBrandID(): number {\n return this.CGP.getBrandID();\n }\n\n getSubBrandID(): number {\n return this.CGP.getSubBrandID();\n }\n\n getRegulationService(): ISdkRegulationService {\n return this.CGP.getRegulationService();\n }\n\n isHybridEmbeddedGame(gameType: number): boolean {\n return this.CGP.isHybridEmbeddedGame(gameType);\n }\n\n openHybridLink(url: string): void {\n this.CGP.openHybridLink(url);\n }\n\n private _updateLocalStorageAccordingToCookie() {\n try {\n let autologinCookie = this.services.cookies.getCookie('orbit_autologin_token');\n\n if (autologinCookie) {\n this.CGP.setAutoLoginToken(autologinCookie);\n }\n } catch (err) {\n this.services.logger.error('update local storage according to cookie failed. Error: ' + err);\n } finally {\n // Remove cookie\n this.services.cookies.removeCookie('orbit_autologin_token');\n }\n\n }\n\n getGRSEnvironmentUrls(): Promise<any> {\n return this.CGP.getGRSEnvironments();\n }\n\n @computed\n get activeChallengeCount(): number {\n return this.CGP.countPlayerChallenges();\n }\n\n executeMenuAction(id: string): void {\n this.CGP.menuActionExecute(id);\n }\n\n menuActionExecute(key: string): void {\n return this.CGP.menuActionExecute(key);\n }\n\n\n startLiveTableFeeds(): void {\n if (Check.isFunction(this.CGP.startLiveTableFeeds)) {\n this.CGP.startLiveTableFeeds();\n } else {\n //TODO - to be removed in the future\n (this.CGP as any).startEvolutionLiveFeeds();\n }\n }\n\n stopLiveTableFeeds(): void {\n if (Check.isFunction(this.CGP.stopLiveTableFeeds)) {\n this.CGP.stopLiveTableFeeds();\n } else {\n //TODO - to be removed in the future\n (this.CGP as any).stopEvolutionLiveFeeds();\n }\n }\n\n getDailyDealCampaigns() {\n return this.CGP.getDailyDealCampaigns();\n }\n\n getJackpotsById() {\n return this.CGP.getJackpotsById();\n }\n\n getJackpotsByGameType() {\n return this.CGP.getJackpotsByGameType();\n }\n\n getBankroll(balanceType: BalanceType, plainNumber?: boolean) {\n return this.CGP.getBankroll(balanceType, plainNumber);\n }\n\n runAutoLogin(autoLoginParams: IAutoLoginParams) {\n return this.CGP.runAutoLogin(autoLoginParams);\n }\n\n\n getProductPackageId(): number {\n return this.CGP.getProductPackage();\n }\n\n getSkin(): CgpSkinInfo {\n return {\n getPlatformSystemID: () => this.CGP.getSkin().getPlatformSystemID(),\n getClientPlatform: () => this.CGP.getSkin().getClientPlatform(),\n getVersion: () => this.CGP.getSkin().getVersion(),\n getCulture: () => this.CGP.getSkin().getCulture(),\n getBrandName: () => this.CGP.getSkin().getBrandName(),\n getMinimumAge: () => this.CGP.getSkin().getMinimumAge(),\n getSerialData: (marketingData: any)=> this.CGP.getSkin().getSerialData(marketingData),\n getDefaultHybridSerial: () => this.CGP.getSkin().getDefaultHybridSerial()\n };\n }\n\n getUtils(): ISdkUtils {\n return this.CGP.getUtils();\n };\n\n fireOrbitInitComplete(): void {\n this.CGP.onOrbitInitComplete();\n }\n\n getEnvironment(): string {\n return this.CGP.getEnvironment();\n }\n\n pushDataToDataLayer(data: {}): void {\n this.CGP.pushDataToDataLayer(data);\n }\n\n getCountryName() {\n return this.CGP.getCountryName();\n }\n\n getCountryIso3(): string {\n return this.CGP.getCountryIso3();\n }\n\n getSupportedStates(): IStateOfResidence[] {\n return this.CGP.getSupportedStates();\n }\n\n getWrongLocationDetectionPath(): string {\n return this.CGP.getWrongLocationDetectionPath();\n }\n\n httpPost<TResponse>(url: string, requestData: unknown): Promise<TResponse> {\n return this.CGP.httpPost<TResponse>(url, requestData);\n }\n\n httpGet<TResponse>(url: string, requestData: unknown): Promise<TResponse> {\n return this.CGP.httpGet<TResponse>(url, requestData);\n }\n\n getConfigs(): any {\n return this.CGP.getConfigs();\n }\n\n loadScript(options: LoadScriptOptions): Promise<void> {\n return this.CGP.loadScript(options);\n }\n\n getRefreshToken(): string {\n return this.CGP.getRefreshToken();\n }\n\n getCurrencyIso3(): string {\n return this.CGP.getCurrencyIso3();\n }\n\n get overlayZIndex(): SdkOverlayZIndex {\n return {\n OMG: ExternalLinksZIndexes.Omg,\n GAME_FRAME: ExternalLinksZIndexes.GameFrame\n };\n }\n\n getGoogleClientID(): string {\n return this.CGP.getGoogleClientID();\n }\n\n isInAutologin(): boolean {\n return this.CGP.isInAutologin();\n }\n\n fireDepositWidgetClosed(): void {\n this.CGP.fireDepositWidgetClosed();\n } \n \n fireFreeToPlayWidgetClosed(): void {\n this.CGP.fireFreeToPlayWidgetClosed();\n }\n\n get tokenInfo(): ITokenInfo | null {\n return this.CGP.getToken() || null;\n }\n\n getGeoLocationInfo(): Promise<IGeoLocationInfo | null> {\n return this.CGP.getGeoLocationInfo();\n }\n\n getDownloadAppLink(): string {\n return this.CGP.getDownloadAppLink();\n }\n\n isDepositWidgetSupportedByHybrid(): boolean {\n return this.CGP.isDepositWidgetSupportedByHybrid();\n }\n\n promptPushNotificationPermissionRequest() {\n return this.CGP.promptPushNotificationPermissionRequest();\n }\n\n openPopUpOnSecondWebView(content: string, timeout: number): void {\n this.CGP.openPopUpOnSecondWebView(content, timeout);\n }\n\n closePopUpOnSecondWebView(): void {\n this.CGP.closePopUpOnSecondWebView();\n }\n\n get hybrid(): ISdkHybridService {\n return this.CGP.hybrid;\n }\n\n get currentRegulation(): ILegacyRegulation {\n return this.CGP.currentRegulation;\n }\n\n eventsTrigger: SdkEventsTrigger = new SdkEventsTrigger();\n\n getCurrentBrowserTabId(): string {\n return this.CGP.getCurrentBrowserTabId();\n }\n\n\n setOrbitActiveOverlayExists(value: boolean): void {\n this.CGP.setOrbitActiveOverlayExists(value);\n }\n\n get gnwp(): ISdkGnwpService {\n return this.CGP.gnwp;\n }\n\n get scriptLoader(): IScriptLoaderService {\n return this.CGP.scriptLoader;\n }\n\n startAutoRetryGeoProcess(): Promise<void> {\n return this.CGP.startAutoRetryGeoProcess();\n }\n\n extractTokenProperty(tokenProperty: string) {\n return this.CGP.extractTokenProperty(tokenProperty);\n }\n\n updateTokenProperty(tokenProperty: string, value: NullableString): void {\n this.CGP.updateTokenProperty(tokenProperty, value);\n }\n\n isLoginPopupEnabled(): boolean {\n return this.CGP.isLoginPopupEnabled();\n }\n\n getAccountData(): any {\n return this.CGP.getAccountData();\n }\n\n getTempAccountGnwpSource(): GNWP_SOURCES {\n return this.CGP.getTempAccountGnwpSource();\n }\n\n\n get isPlayerMessagesConnected(): boolean {\n return this.CGP.isPlayerMessagesConnected();\n }\n\n getGameRestriction(gameType: number, gameGroupId: number, vendorId: number): IGameRestriction {\n return this.CGP.getGameRestriction(gameType, gameGroupId, vendorId);\n }\n\n getCurrentDate(): Date {\n return this.CGP.getCurrentDate();\n }\n\n convertToRegulationTimeZone(date: Date): DateFormattedToRegulationOffset {\n return this.CGP.convertToRegulationTimeZone(date);\n }\n\n format(date: any, mask?: string, utc?: boolean): string {\n return this.CGP.format(date, mask, utc);\n }\n getInactivityTimeoutSettings(): IInactivityTimeoutSettings {\n return this.CGP.getInactivityTimeoutSettings();\n }\n\n setInactivityTimeout(timeout: TimeSpan): void {\n this.CGP.setInactivityTimeout(timeout)\n }\n\n createUserActivityDetactor(params){\n return this.CGP.createUserActivityDetactor(params);\n }\n\n async writeWidgetLogs(payload: any): Promise<void> {\n await this.CGP.writeWidgetLogs(payload);\n }\n}","import React from 'react';\nimport {IGamesFilterStrategy} from \"../games-filter-strategy.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GamesMap} from \"../../../games/games.service.interface\";\nimport {Nullable} from \"../../../../../common/types/nullable-types\";\nimport {IFilterIndicatorRenderingOptions} from \"../../games-filter.service.interface\";\nimport {IGameFilterDefinition} from '../../filters-definitions/game-filter-definition.interface';\n\nexport class NoGamesFilterStrategy implements IGamesFilterStrategy {\n constructor(private readonly services: IServiceFactoryExtended) {\n }\n\n getFiltersForGame(gameType: number): string[] {\n return null;\n }\n get filteredGamesMap(): GamesMap {\n return this.services.games.gamesMap;\n }\n readonly isFilteringAvailable: boolean = false;\n\n renderMobileFiltersIndicator(): React.ReactElement {\n return null;\n }\n\n renderFiltersIndicator(): Nullable<IFilterIndicatorRenderingOptions> {\n return null;\n }\n\n showFiltersEditor(): void {\n }\n\n dispose(): void {\n }\n\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number {\n return 0;\n }\n\n isValidFilter(filterId: string): boolean {\n return false;\n }\n\n getFiltersDefinitions(filtersIds: string[]): Record<string, IGameFilterDefinition> {\n return {};\n }\n}","import {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nexport const GAMES_FILTERS_STORAGE_KEY = 'orbitGamesFiltersData';\n\nexport class GamesFiltersStorage {\n constructor(private readonly services: IServiceFactoryExtended) {\n this._savedFilters = this.services.localStorage.getJson(GAMES_FILTERS_STORAGE_KEY) || {};\n }\n\n private _savedFilters: Record<string, string[]> = {};\n\n saveFiltersForCurrentArena(filterIds: string[]): void {\n const arenaType = this.services.routing.currentRoute.data?.arenaType;\n if(arenaType) {\n this._savedFilters[arenaType] = filterIds;\n this.services.localStorage.setJson(GAMES_FILTERS_STORAGE_KEY, this._savedFilters);\n }\n }\n\n clearAllSavedFilters(): void {\n this._savedFilters = {};\n this.services.localStorage.removeItem(GAMES_FILTERS_STORAGE_KEY);\n }\n\n getSavedFiltersForCurrentArena(): string[] {\n const arenaType = this.services.routing.currentRoute.data?.arenaType;\n if(arenaType) {\n return this._savedFilters[arenaType] ?? []\n }\n return [];\n }\n}","import {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {\n IGamesFilterService,\n IFilterIndicatorRenderingOptions\n} from './games-filter.service.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {IGamesFilterStrategy} from \"./strategies/games-filter-strategy.interface\";\nimport {GameInfo} from \"../games/game-info\";\nimport React from \"react\";\nimport {action, computed, makeObservable, observable} from \"mobx\";\nimport {Nullable} from \"../../../common/types/nullable-types\";\nimport {NoGamesFilterStrategy} from \"./strategies/no-filter/no-games-filter.strategy\";\nimport {IArenaViewModel} from '../arenas/models/arenas/arena-view-model.interface';\nimport {GamesFiltersStorage} from \"./games-filters-storage\";\nimport {IGameFilterDefinition} from './filters-definitions/game-filter-definition.interface';\n\nconst FILTERS_HASH_NAME = '#filters=';\n\nexport class GamesFilterService extends ServiceBase implements IGamesFilterService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n this._currentFilteringStrategy = new NoGamesFilterStrategy(this.services);\n this._gamesFilterStorage = new GamesFiltersStorage(services);\n this.reaction(() => this.services.routing.currentRoute, () => {\n this._setCurrentStrategy(this.services.arenas.getCurrentArena());\n }, {\n fireImmediately: true\n });\n\n this.reaction(() => this.services.location.currentUri, () => {\n if (!this.services.location.currentUri.hash?.toString()) {\n const savedFilters = this._gamesFilterStorage.getSavedFiltersForCurrentArena();\n if (savedFilters.length > 0) {\n this.applyFilters(savedFilters);\n }\n } else if (this.isCurrentUrlHashWithFilters) {\n const savedFiltersForCurrentArena = this._gamesFilterStorage.getSavedFiltersForCurrentArena();\n if (savedFiltersForCurrentArena.toString() !== this.currentAppliedFiltersIds.toString()) {\n this._gamesFilterStorage.saveFiltersForCurrentArena(this.currentAppliedFiltersIds);\n }\n }\n }, {\n fireImmediately: true\n });\n\n this.reaction(() => this.services.user.isAuthorized, () => {\n if (!this.services.user.isAuthorized) {\n this._gamesFilterStorage.clearAllSavedFilters();\n }\n }, {\n fireImmediately: true\n });\n }\n\n private readonly _gamesFilterStorage: GamesFiltersStorage;\n\n @action.bound\n private _setCurrentStrategy(currentArena: IArenaViewModel) {\n if (this._currentFilteringStrategy) {\n this._currentFilteringStrategy.dispose();\n }\n\n if (currentArena) {\n this._currentFilteringStrategy = currentArena.getGamesFilteringStrategy();\n } else {\n this._currentFilteringStrategy = new NoGamesFilterStrategy(this.services);\n }\n }\n\n private get isCurrentUrlHashWithFilters() {\n const hash = this.services.location.currentUri.hash?.toString();\n if (!hash) {\n return false;\n }\n\n return hash.toLowerCase().startsWith(FILTERS_HASH_NAME)\n }\n\n get filteredGamesMap(): Record<string, GameInfo> {\n return this._currentFilteringStrategy.filteredGamesMap;\n }\n\n @computed\n get currentAppliedFiltersIds(): string[] {\n const urlHash = this.services.location.currentUri.hash?.value;\n if (urlHash) {\n let params = urlHash.split('=');\n if (params[0]?.toLowerCase() === 'filters') {\n return params[1].split(',');\n }\n }\n\n return [];\n }\n\n async applyFilters(filterIds: string[]): Promise<void> {\n this.services.window.scrollTo(0, 0);\n if (filterIds.length > 0) {\n await this.services.location.push(FILTERS_HASH_NAME + filterIds.join(','));\n this._gamesFilterStorage.saveFiltersForCurrentArena(filterIds);\n } else {\n await this.clearFilters();\n }\n }\n\n async clearFilters(): Promise<void> {\n if (this.isFilterOn) {\n this._gamesFilterStorage.saveFiltersForCurrentArena([]);\n await this.services.location.push(this.services.location.currentUri.getUrlWithoutHash());\n }\n }\n\n @observable.ref\n private _currentFilteringStrategy: IGamesFilterStrategy;\n\n\n\n get isFilterOn(): boolean {\n return this.currentAppliedFiltersIds.length > 0;\n }\n\n get isFilteringAvailable(): boolean {\n return this._currentFilteringStrategy.isFilteringAvailable;\n }\n\n isFilterApplied(filterId: string): boolean {\n return this.currentAppliedFiltersIds.includes(filterId);\n }\n\n isValidFilter(filterId: string): boolean {\n return this._currentFilteringStrategy.isValidFilter(filterId);\n }\n\n renderMobileFiltersIndicator(): React.ReactElement {\n return this._currentFilteringStrategy.renderMobileFiltersIndicator();\n }\n\n renderFiltersIndicator(): Nullable<IFilterIndicatorRenderingOptions> {\n return this._currentFilteringStrategy.renderFiltersIndicator();\n }\n\n showFiltersEditor(): void {\n this._currentFilteringStrategy.showFiltersEditor();\n }\n\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number {\n return this._currentFilteringStrategy.getNumberOfGamesBeforeUserApply(filterIDS);\n }\n\n public getFiltersForGame(gameType: number): string[] {\n return this._currentFilteringStrategy.getFiltersForGame(gameType);\n }\n\n getFiltersDefinitions(filtersIds: string[]): Record<string, IGameFilterDefinition> {\n return this._currentFilteringStrategy.getFiltersDefinitions(filtersIds);\n }\n}\n","import {RedTigerJackpotWidgetConfiguration} from './red-tiger-jackpot-widget.configuration';\nimport {JackpotWidgetConfiguration} from './jackpot-widget.configuration';\nimport {LinkToOfferConfiguration} from \"./link-to-offer.configuration\";\nimport {NullableUndefined} from \"../../../../common/types/nullable-types\";\nimport {\n CategoryDefinitionId\n} from \"../../games-filter/filters-categories-definitions/filter-category-definition.interface\";\nimport {GAME_GROUP} from \"../../../../common/const/game_groups_consts\";\nimport { TitanJackpotWidgetConfiguration } from './titan-jackpot-widget.configuration';\n\nexport interface InfoSideBarConfiguration {\n readonly infoImage: string;\n readonly infoTitle: string;\n readonly infoText: string;\n}\n\nexport enum ApiListType {\n TOP_PICKS = \"TOP_PICKS\",\n NEW_GAMES = \"NEW_GAMES\",\n PLAYERS_LIKE_YOU = \"PLAYERS_LIKE_YOU\",\n RECENTLY_PLAYED = \"RECENTLY_PLAYED\",\n STATIC_VIDEO = \"STATIC_VIDEO\",\n LIVE_CASINO_VIDEO = \"LIVE_CASINO_VIDEO\",\n BECAUSE_YOU_PLAYED = \"BECAUSE_YOU_PLAYED\",\n VIDEO_SLIDES_LIVE = \"VIDEO_SLIDES_LIVE\",\n VIDEO_SLIDES_STATIC = \"VIDEO_SLIDES_STATIC\",\n}\n\nexport interface ListConfiguration {\n readonly title: string;\n readonly display: boolean;\n readonly gamesId: number[];\n readonly isSelfUpdatedByNewest?: boolean;\n readonly forceRoundIcons?: boolean;\n}\n\n\n\nexport interface SeoSectionConfiguration {\n display: boolean;\n componentID: string;\n templateID: string;\n}\n\nexport interface HeaderArenaConfiguration {\n display: boolean;\n title: string;\n image: string;\n link: string;\n}\n\nexport type AnimatedTopImageEngine = \"pixi\" | \"lottie\";\nexport interface AnimatedTopImageConfiguration {\n url: string;\n engine?: AnimatedTopImageEngine;\n}\n\nexport interface ArenaCommonConfiguration {\n topImage: string;\n animatedTopImage?: AnimatedTopImageConfiguration;\n title: string;\n seoSection: SeoSectionConfiguration;\n}\n\nexport interface IVideoSlidesFilter {\n translationKey: string;\n category: string; // to be replaced with CategoryDefinitionId when actual filtering logic is done\n id: string; // to be replaced with CategoryDefinitionId when actual filtering logic is done\n icon?: string;\n}\n\n\nexport type VideoSlideCategory = \"videoStream\" | \"liveStream\" | \"banner\";\nexport interface IVideoSlidesRuleConfig {\n category: VideoSlideCategory;\n slidesChunkSize: number;\n}\n\nexport interface VideoSlidesArenaConfiguration extends ArenaCommonConfiguration{\n filters: IVideoSlidesFilter[];\n slidesRules: IVideoSlidesRuleConfig[];\n promotionalBanners?: CasinoArenaPromotionalBannerConfiguration[];\n header?: VideoSlidesArenaHeaderConfiguration;\n swiperAnimation: SwiperAnimationConfig;\n}\n\nexport interface SwiperAnimationConfig{\n triggerDelay: number;\n individualAnimationDuration: number; \n animationAppearances: number; \n}\n\nexport interface VideoSlidesArenaHeaderConfiguration {\n licenseStatus?: {\n text: string;\n display: boolean;\n },\n minimumGamblingAge?: {\n display: boolean;\n }\n}\nexport interface CasinoArenaPromotionalBannerConfiguration {\n templateID: string;\n componentID: string;\n displayListPlace?: number;\n displayRowPlace?: number;\n displayTablePlace?: number;\n bannerAdminPlaceholderId?: string\n}\n\nexport interface VideoSlidesFilterWidgetConfiguration {\n displayListPlace?: number;\n advancedFilterIdList: string[];\n}\n\nexport interface CasinoArenaConfiguration extends ArenaCommonConfiguration {\n promotionalBanner?: CasinoArenaPromotionalBannerConfiguration;\n videoSlidesFilterPreview?: VideoSlidesFilterWidgetConfiguration;\n linkToOffer?: LinkToOfferConfiguration;\n filters: NullableUndefined<string[]>;\n advancedFilters?: {\n categories: {\n id: CategoryDefinitionId;\n }[];\n };\n infoSideBar: InfoSideBarConfiguration;\n swiperGamesList: SwiperGamesListConfiguration[];\n allGamesGrid: ArenaGamesGridConfiguration[];\n orderListsByAI?: boolean;\n arenaType?: string;\n}\n\nexport interface SwiperGamesListConfiguration extends ListConfiguration {\n readonly title: string;\n readonly display: boolean;\n readonly gamesId: number[];\n readonly gamesAdminRefKey?: string;\n readonly templateType?: string;\n readonly redTigerWidget?: RedTigerJackpotWidgetConfiguration;\n readonly titanJackpotWidget?: TitanJackpotWidgetConfiguration;\n readonly jackpotWidget?: JackpotWidgetConfiguration;\n readonly titleIconClassName?: string;\n readonly useSquareIcons?: boolean;\n readonly showNumberBadge?: boolean;\n readonly useAISortedList?: boolean;\n readonly ignoreNumberOfGamesInAISorting?: number;\n readonly forceListInLayout?: boolean;\n readonly seeAll?: string;\n readonly hasExploreButton?: boolean;\n readonly listId?: number; // should be mandatory??\n readonly shouldInjectUsernameInTitle?: boolean;\n readonly apiListType?: ApiListType;\n readonly allowedGameGroups?: GAME_GROUP[];\n}\n\nexport interface LiveCasinoHeaderConfiguration {\n display: boolean;\n gameId: number;\n image: string;\n}\n\nexport interface LiveCasinoPromotionalBannerConfiguration {\n displayTablePlace: number;\n displayRowPlace: number;\n componentID: string;\n templateID: string;\n bannerAdminPlaceholderId?: string;\n}\n\nexport interface LiveCasinoConfiguration extends ArenaCommonConfiguration {\n promotionalBanner: LiveCasinoPromotionalBannerConfiguration;\n linkToOffer?: LinkToOfferConfiguration\n arenas: {\n gamesId: LiveCasinoHeaderConfiguration[];\n },\n popularTables: LiveCasinoPopularTableConfiguration[];\n customLayout: string;\n}\n\nexport interface NewLiveCasinoConfiguration extends ArenaCommonConfiguration {\n promotionalBanner: LiveCasinoPromotionalBannerConfiguration;\n arenas: HeaderFilterConfiguration[],\n allGamesGrid: ArenaGamesGridConfiguration[];\n customLayout: string;\n useAISortedList: boolean;\n linkToOffer?: LinkToOfferConfiguration;\n}\n\nexport interface LiveCasinoPopularTableConfiguration {\n title: string;\n gamesId: number[];\n useAISortedList?: boolean;\n ignoreNumberOfGamesInAISorting?: number;\n}\n\nexport interface ArenaGamesGridConfiguration extends ListConfiguration {\n readonly listId: number;\n readonly title: string;\n readonly display: boolean;\n readonly useAISortedList?: boolean;\n readonly ignoreNumberOfGamesInAISorting?: number;\n readonly gamesId: number[];\n readonly templateType?: string;\n readonly gamesAdminRefKey?: string;\n readonly useSquareIcons?: boolean;\n}\n\nexport interface HeaderFilterConfiguration {\n display: boolean;\n title: string;\n image: string;\n filter: string;\n seoPage: string;\n isActiveTabDefault?: boolean;\n maxGamesToShow?: number;\n banners?: {\n promotionalBanner: {\n templateID: string,\n componentID: string,\n bannerAdminPlaceholderId?: string\n }\n }\n}\n\nexport type ArenaConfiguration = CasinoArenaConfiguration & LiveCasinoConfiguration & NewLiveCasinoConfiguration & VideoSlidesArenaConfiguration;\n\nexport type ArenasConfiguration = {[key: string]: ArenaConfiguration};\n\n","import styled from 'styled-components';\nimport {GameBox} from '../../../single-game/regular-template/boxes/game/game.box';\nimport { CssRule } from '../../../../themes/architecture/css-helpers/css-rule';\n\n\nexport const GamePlaceHolderDefaultBox = styled(GameBox)`\n ${CssRule.For.mobile.embededHybrid.build()} & , ${CssRule.For.mobile.miniOrbit.build()} & {\n display: none;\n }\n`;","import {GamePlaceHolderDefaultBox} from './game-placeholder.default.box';\n\nexport const GamePlaceHolderBox = GamePlaceHolderDefaultBox;","import styled from 'styled-components';\nimport {GameImageBox as BaseGameImageBox} from '../../../single-game/common/boxes/game-image/game-image.box';\n\nexport const GameImageDefaultBox = styled(BaseGameImageBox)`\n cursor: default;\n`;\n","import {GameImageDefaultBox} from './game-image.default.box';\n\nexport const GameImageBox = GameImageDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {GamePlaceHolderBox} from './boxes/placeholder/game-placeholder.box';\nimport {GameImageBox} from './boxes/game-image/game-image.box';\nimport {GameImageContainerBox} from '../single-game/regular-template/boxes/game-image-container/game-image-container.box';\nimport {observer} from 'mobx-react';\nimport {GAME_IMAGE_CONTAINER, SWIPER_MODE} from '../single-game/css-constants';\nimport classNames from 'classnames';\n\nexport interface SingleGamePlaceholderComponentProps {\n isInsideSwiper: boolean\n}\n\nexport const SingleGamePlaceholderComponent = observer(\n class SingleGamePlaceholderComponent extends OrbitComponent<SingleGamePlaceholderComponentProps> {\n render() {\n return (\n <GamePlaceHolderBox className={classNames('cy-game-placeholder', {[SWIPER_MODE]: this.props.isInsideSwiper})}>\n <GameImageContainerBox className={GAME_IMAGE_CONTAINER}>\n <GameImageBox src={this.services.theme.currentTheme.assets.images.empty_image_gif.toString()}></GameImageBox>\n </GameImageContainerBox>\n </GamePlaceHolderBox>\n );\n }\n }\n);\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const SwiperWrapperBox = styledBox(\"SwiperWrapperBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const SwiperGamesListBox = styledBox(\"SwiperGamesListBox\")\n","import styled from 'styled-components';\n\nexport const SwiperDefaultBox = styled.div`\n /** This overflow hidden solves a problem with live video streaming on right-to-left languages\n Without it, the IntersectionObserver does not work correctly and a weird behavior happens:\n The first video flicker like it is intersecting and transforms from scale(0.7) to scale(1) but in that process it loses intersection (ratio>0.99) and transforms back\n And again and again, an infinite flicker */\n overflow: hidden;\n`;","import {SwiperDefaultBox} from './swiper.default.box';\n\nexport const SwiperBox = SwiperDefaultBox;","import React, {useEffect, useRef} from 'react';\nimport {observer} from 'mobx-react';\nimport {SingleGameComponent} from '../single-game/single-game.component';\nimport {SingleGamePlaceholderComponent} from '../single-game-placeholder/single-game-placeholder.component';\nimport classNames from 'classnames';\nimport {SwiperWrapperBox} from './boxes/swiper-wrapper/swiper-wrapper.box';\nimport {SwiperGamesListBox} from './boxes/swiper-games-list/swiper-games-list.box';\nimport {SwiperBox} from './boxes/swiper/swiper.box';\nimport {SingleGameSkeletonComponent} from '../single-game/single-game-skeleton.component';\nimport {CyClass} from '../../../common/cy-classes';\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\n\nexport interface OrbitSwiperComponentProps {\n viewModel: ISwiperListViewModel;\n numberOfPlaceholders?: number;\n skipIntermediatePage?: boolean;\n showNumberBadge?: boolean;\n className?: string;\n listPosition: number;\n lastGameType?: number;\n onGameBringInCentralView?: (gameIndex: number) => void;\n}\n\nexport const OrbitSwiperComponent: React.FC<OrbitSwiperComponentProps> = observer((props) => {\n const services = useServices();\n const _swiperGameListElementRef = useRef<HTMLDivElement | null>(null);\n const _swiperWrapperElementRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n props.viewModel.swipeLogicHandler.setElement(_swiperGameListElementRef.current);\n\n return () => {\n props.viewModel.swipeLogicHandler.setElement(null);\n }\n\n }, [props.viewModel.swipeLogicHandler]);\n\n\n const _shouldUseSquareIcons = () => {\n return props.viewModel.shouldUseSquareIcons();\n }\n\n const _renderOneGame = (gameType: number, gameIndex: number, isLastGameType?: boolean) => {\n return <SingleGameComponent\n key={gameType}\n gameType={gameType}\n seoCategory={props.viewModel.arenaName}\n disableGameInfoHover={false}\n listTitle={props.viewModel.title.translationKey}\n listPosition={props.listPosition}\n AdminListID={props.viewModel.listId}\n AIListTypeID={props.viewModel.listTypeId}\n skipIntermediatePage={props.skipIntermediatePage}\n templateType={props.viewModel.templateType}\n intersectionTarget={_swiperWrapperElementRef.current}\n gameIndex={gameIndex}\n showNumberBadge={props.showNumberBadge}\n isInsideSwiper={true}\n useSquareIcons={_shouldUseSquareIcons()}\n aiEngineName={props.viewModel.aiEngine}\n hasTwoLinesTitle={props.viewModel.showGameTitleOnMultipleLines}\n isLastGametype={isLastGameType}\n onBringInCentralView={props.onGameBringInCentralView}\n />;\n }\n\n const _renderPlaceholders = () => {\n\n if (props.viewModel.numberOfGamesSkeletons > 0) {\n return null;\n }\n\n let placeHolders: React.ReactNode[] = [];\n let numberOfPlaceholders = props.numberOfPlaceholders || 0;\n\n for (let i = 0; i < numberOfPlaceholders; i++) {\n placeHolders.push(<SingleGamePlaceholderComponent key={'game_placeholder_' + i} isInsideSwiper={true}/>);\n }\n\n return placeHolders;\n }\n\n const _renderGamesSkeletons = () => {\n\n let numSkeletons = props.viewModel.numberOfGamesSkeletons;\n\n let skeletons = [];\n\n for (let i = 1; i <= numSkeletons; i++) {\n skeletons.push(\n <SingleGameSkeletonComponent\n key={'skeleton_' + i}\n templateType={props.viewModel.templateType}\n useSquareIcons={_shouldUseSquareIcons()}\n />\n );\n }\n\n return skeletons;\n }\n\n const _renderGames = () => {\n\n const gameTypes = props.viewModel.gameTypes;\n if (gameTypes.length > 0) {\n return gameTypes.map((gameType, index) => {\n return _renderOneGame(gameType, index, gameType === props.lastGameType)\n });\n }\n return _renderGamesSkeletons();\n }\n\n\n if (!props.viewModel.isVisible) {\n return null;\n }\n\n return (\n <SwiperBox className={classNames(CyClass('cy-orbit-swiper'), props.className)}>\n\n {props.viewModel.renderListHeader()}\n\n <SwiperWrapperBox className={classNames('cy-orbit-swiper-wrapper', props.viewModel.templateType)}\n ref={_swiperWrapperElementRef}>\n <SwiperGamesListBox className='cy-orbit-swiper-games-list' ref={_swiperGameListElementRef}\n isTouchDevice={services.device.feature.isTouch}>\n {props.viewModel.renderSpecialWidgets()}\n {_renderGames()}\n {_renderPlaceholders()}\n </SwiperGamesListBox>\n {props.viewModel.renderListNavigation()}\n </SwiperWrapperBox>\n\n {props.viewModel.renderListFooter()}\n\n </SwiperBox>\n );\n\n});\n\n","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {observer} from 'mobx-react';\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\n\ninterface RecentlyPlayedComponentProps {\n viewModel: ISwiperListViewModel;\n listPosition: number\n}\n\nexport const RecentlyPlayedComponent = observer(\n class RecentlyPlayedComponent extends OrbitComponent<RecentlyPlayedComponentProps> {\n\n render() {\n const viewModel = this.props.viewModel;\n let numberOfPlaceholders = Math.max(0, 6 - viewModel.gameTypes.length);\n\n return (\n <OrbitSwiperComponent viewModel={viewModel} className='cy-recently-played'\n numberOfPlaceholders={numberOfPlaceholders}\n listPosition={this.props.listPosition}\n skipIntermediatePage={true}\n />\n );\n }\n }\n);\n\n\n","import React from \"react\";\nimport {IGamesListRenderer} from \"./games-list-renderer.interface\";\nimport {IGamesListViewModel} from \"./games-list-view-model.interface\";\nimport {IArenaToGamesListAdapter} from \"../arenas/arena-to-games-list-adapter.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport { computed, makeObservable } from \"mobx\";\nimport {TextTranslation} from \"../../../translation/text-translation\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IAiSortOptions} from \"../../../ai-engine/ai-engine.service.interface\";\n\nexport abstract class GamesListBaseModel implements IGamesListRenderer, IGamesListViewModel {\n constructor(protected readonly arena: IArenaToGamesListAdapter) {\n makeObservable(this);\n }\n\n abstract get listId(): number;\n abstract get title(): TextTranslation;\n abstract get forceInLayout(): boolean;\n abstract get templateType(): string;\n\n protected abstract get _forceRoundIcons(): boolean;\n protected abstract get _useSquareIcons(): boolean;\n protected abstract get _isAISorted(): boolean;\n protected abstract get _numberOfGamesToBeIgnoredInAISorting(): number | undefined;\n protected abstract _shouldBeDisplayed(): boolean;\n protected abstract _renderList(listPosition: number): React.ReactElement | null;\n protected abstract _getGameTypes(): number[];\n abstract renderListHeader(): React.ReactElement;\n\n protected get services(): IServiceFactoryExtended {\n return this.arena.services;\n }\n\n get arenaName(): string {\n return this.arena.arenaName;\n }\n\n get listKey(): string {\n return `${this.arena.arenaName}_${this.title.translationKey}_${this.listId}`;\n }\n\n get aiEngine(): string {\n if(this.arena.aiEngine) {\n return this.arena.aiEngine;\n }\n\n if(this._isAISorted) {\n return this.services.aiEngine.getAiEngine();\n }\n\n return \"\";\n }\n get maxGamesToShowInList(): number {\n return this.arena.maxGamesToShowInList;\n }\n\n @computed\n get isVisible(): boolean {\n return this._shouldBeDisplayed();\n }\n\n @computed\n get gameTypes(): number[] {\n return this._applyGameTypesTransformations(this._getGameTypes());\n }\n\n protected _applyGameTypesTransformations(gameTypes: number[]): number[] {\n return this._reduceGameTypes(\n this._sortGameTypes(\n this._distinctGameTypes(gameTypes)));\n }\n\n protected _sortGameTypes(gameTypes: number[]): number[] {\n let aiSortingOptions: IAiSortOptions = {ignoreNumberOfGames: this._numberOfGamesToBeIgnoredInAISorting};\n\n if (!Check.isEmpty(this.arena.sortingGametypesMapOverride)) {\n aiSortingOptions.gamesMapOverride = this.arena.sortingGametypesMapOverride;\n }\n\n if(this._isAISorted) {\n return this.services.aiEngine.sortGames(gameTypes, aiSortingOptions);\n }\n\n return gameTypes;\n }\n\n protected _reduceGameTypes(gameTypes: number[]): number[] {\n return gameTypes.filter(gt => this.services.gamesFilter.filteredGamesMap[gt])\n .slice(0, this.maxGamesToShowInList);\n }\n\n protected _distinctGameTypes(gameTypes: number[]): number[] {\n return [...new Set(gameTypes)];\n }\n\n shouldUseSquareIcons(): boolean {\n if(this._forceRoundIcons){\n return false;\n }\n\n return this.services.theme.shouldUseSquareIcons || this._useSquareIcons;\n }\n\n render(listPosition: number): React.ReactElement | null {\n return this._renderList(listPosition);\n }\n\n}","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ListTitleIconBox = styledBox('ListTitleIconBox');\n","import styled from 'styled-components';\nimport { flexFixedSizeItem } from '../../../../themes/architecture/css-helpers/flex';\n\nexport const JackpotWidgetDefaultBox = styled.div`\n ${flexFixedSizeItem}\n margin: 1rem 1rem 3rem;\n align-self: stretch;\n max-width: 24rem;\n width: calc(100% / 6);\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n width: calc(100% / 5);\n margin: 1rem 1.5rem 0;\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: calc(100% / 3);\n margin: 1rem 1.5rem 0;\n }\n`;\n","import {JackpotWidgetDefaultBox} from './jackpot-widget-wrapper.default.box';\n\nexport const JackpotWidgetWrapperBox = JackpotWidgetDefaultBox;\n","import styled from 'styled-components';\nimport { flexFixedSizeItem } from '../../../../themes/architecture/css-helpers/flex';\n\nexport const RedTigerWidgetDefaultBox = styled.div`\n ${flexFixedSizeItem}\n margin: 1rem 1rem 3rem;\n align-self: stretch;\n max-width: 24rem;\n width: calc(100% / 6);\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 1rem 1.5rem 0;\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n width: calc(100% / 5);\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: calc(100% / 3);\n }\n`;\n","import {RedTigerWidgetDefaultBox} from './red-tiger-widget.default.box';\n\nexport const RedTigerWidgetBox = RedTigerWidgetDefaultBox;\n","import styled from 'styled-components';\n\n\nexport const RedTigerWidgetHitAreaDefaultBox = styled.div`\n cursor: pointer;\n width: 100%;\n height: 100%;\n`;\n","import styled from 'styled-components';\nimport { RedTigerWidgetHitAreaDefaultBox } from './red-tiger-widget-hit-area.default.box';\n\n\nexport const RedTigerWidgetHitAreaCasino777Box = styled(RedTigerWidgetHitAreaDefaultBox)`\n cursor: default;\n`;","import { styledByTheme } from './../../../../themes/architecture/styled-by-theme';\nimport { RedTigerWidgetHitAreaDefaultBox } from './red-tiger-widget-hit-area.default.box';\nimport { RedTigerWidgetHitAreaCasino777Box } from './red-tiger-widget-hit-area.casino777.box';\n\nexport const RedTigerWidgetHitAreaBox = styledByTheme(RedTigerWidgetHitAreaDefaultBox)\n .forCasino777(RedTigerWidgetHitAreaCasino777Box)\n .apply();","import styled from 'styled-components';\n\n\nexport const RedTigerWidgetFrameContainerDefaultBox = styled.iframe`\n pointer-events: none;\n width: 100%;\n height: 100%;\n border-radius: 10px;\n`;\n","import { styledByTheme } from './../../../../themes/architecture/styled-by-theme';\nimport { RedTigerWidgetFrameContainerDefaultBox } from './red-tiger-widget-frame-container.default.box';\n\nexport const RedTigerWidgetFrameContainerBox = styledByTheme(RedTigerWidgetFrameContainerDefaultBox)\n .apply();","import React from 'react';\nimport { OrbitComponent } from '../base-components/orbit-component/orbit-component';\nimport { RedTigerJackpotWidgetConfiguration } from '../../services/configurations/config-data-sections/red-tiger-jackpot-widget.configuration';\nimport { observer } from 'mobx-react';\nimport { RedTigerWidgetBox } from './boxes/widget/red-tiger-widget.box';\nimport { RedTigerWidgetHitAreaBox } from './boxes/hitArea/red-tiger-widget-hit-area.box';\nimport { RedTigerWidgetFrameContainerBox } from './boxes/frameContainer/red-tiger-widget-frame-container.box';\nimport { CyClass } from '../../../common/cy-classes';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface RedTigerWidgedComponentProps extends ComponentServicesPick<'redTiger'>{\n widgetConfig?: RedTigerJackpotWidgetConfiguration;\n}\n\nconst ComponentBody = observer(class extends OrbitComponent<RedTigerWidgedComponentProps> {\n \n private _onWidgetClick = () => {\n this.props.redTiger.redirectToWidgetActionLink(this.props.widgetConfig.actionLink);\n }\n \n private _logMissingProps() {\n if (!this.props.widgetConfig.actionLink) {\n // actionLink is optional. For example on 777 we don't have it\n this.services.logger.info('Missing actionLink parameter for RedTigerWidgetComponent');\n }\n\n if (!this.props.widgetConfig.parameters?.skin) {\n this.services.logger.warning('Missing skin parameter for RedTigerWidgetComponent');\n }\n\n if (!this.props.widgetConfig.parameters?.jackpotId) {\n this.services.logger.warning('Missing jackpotId parameter for RedTigerWidgetComponent');\n }\n }\n\n render() {\n if(!this.props.widgetConfig?.display) {\n return null;\n }\n this._logMissingProps();\n\n return (\n <RedTigerWidgetBox className='cy-red-tiger-widget'>\n <RedTigerWidgetHitAreaBox className={CyClass('cy-cgp-red-tiger-widget-click-detector')} onClick={this._onWidgetClick}>\n <RedTigerWidgetFrameContainerBox frameBorder='0' scrolling='no' src={this.props.redTiger.getWidgetUrl(this.props.widgetConfig.parameters)} className={CyClass('cy-jackpot-widget')}></RedTigerWidgetFrameContainerBox>\n </RedTigerWidgetHitAreaBox>\n </RedTigerWidgetBox>\n );\n }\n }\n);\n\nexport const RedTigerWidgetComponent = withServices(ComponentBody, [\"redTiger\"]);","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ListTitleTextBox = styledBox('ListTitleTextBox');","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ListTitleBox = styledBox('ListTitleBox');\n","import React, {PropsWithChildren} from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {FlexGrowItemBox} from '../../themes/architecture/css-helpers/flex';\nimport {observer} from 'mobx-react';\nimport classNames from \"classnames\";\nimport {ListTitleBox} from './boxes/list-title/list-title.box';\n\nexport interface GameListTitleComponentProps extends PropsWithChildren {\n className?: string;\n title: React.ReactElement;\n}\n\nexport const GameListTitleComponent = observer(\n class GameListTitleComponent extends OrbitComponent<GameListTitleComponentProps> {\n\n render() {\n\n const cssClasses = classNames('cy-games-list-title', this.props.className);\n\n return (\n <ListTitleBox className={cssClasses}>\n {this.props.title}\n {this.services.mediaQuery.mAndAbove ? <FlexGrowItemBox /> : null}\n {this.props.children}\n </ListTitleBox>\n );\n }\n }\n);\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const SwiperButtonsBox = styledBox(\"SwiperButtonsBox\");","import styled, { css } from \"styled-components\";\n\nexport const SwiperButtonBox = styled.div<{isTouchDevice?: boolean}>`\n margin: 0 0.5rem;\n\n ${({isTouchDevice}) => isTouchDevice ? css`\n display: none;\n ` : null}\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const ExploreButtonBox = styledBox(\"ExploreButtonBox\");\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {SwiperButtonsBox} from './boxes/wrapper/swiper-buttons.box';\nimport {SwiperButtonBox} from './boxes/button/swiper-button.box';\nimport { Button } from '../../../basic-ui-components/button/base/button.component';\nimport {ISwipeLogicHandler} from \"../../../services/arenas/models/swiper-logic-handler/swiper-logic-handler.interface\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {ExploreButtonBox} from './boxes/explore-button/explore-button.box';\n\nexport interface OrbitSwiperButtonsProps {\n analyticsAction: string;\n swiper: ISwipeLogicHandler;\n seeAllButtonUrl: string;\n seoCategory: string;\n hasExploreButton?: boolean;\n}\n\n\n\nexport const OrbitSwiperButtons = observer(class OrbitSwiperButtons extends OrbitComponent<OrbitSwiperButtonsProps> {\n\n\n private onSwiperButtonPrevClick = () => {\n this.props.swiper.movePrevious();\n };\n\n private onSwiperButtonNextClick = () => {\n this.props.swiper.moveNext();\n };\n\n private _renderMoveNextAndPreviousButtons() {\n\n if (!this.props.swiper.allowNext && !this.props.swiper.allowPrevious) {\n return null;\n }\n\n const isTouchDevice = this.services.device.feature.isTouch; // device has touch\n\n return (<>\n <SwiperButtonBox isTouchDevice={isTouchDevice}>\n <Button\n preset=\"flatStroked\"\n sizeVariant=\"xs\"\n noRemUnits\n icon={{Component: this.services.theme.currentTheme.icons.backIcon}}\n className=\"cy-swiper-button-prev\"\n onClick={this.onSwiperButtonPrevClick}\n disabled={!this.props.swiper.allowPrevious}\n />\n </SwiperButtonBox>\n\n <SwiperButtonBox isTouchDevice={isTouchDevice}>\n <Button\n preset=\"flatStroked\"\n sizeVariant=\"xs\"\n noRemUnits\n icon={{Component: this.services.theme.currentTheme.icons.forwardIcon, reverseOnRTL: true}}\n className=\"cy-swiper-button-next\"\n onClick={this.onSwiperButtonNextClick}\n disabled={!this.props.swiper.allowNext}\n />\n </SwiperButtonBox>\n </>);\n\n }\n\n private _shouldReplaceSeeAllWithExplore(): boolean {\n return this.services.device.isMobile && Boolean(this.props.hasExploreButton);\n }\n\n private seeAllClickHandler = () => {\n this.services.analytics.sendElasticInfoEvent({eventType:\"CGP_Game_Click\",category: this.props.seoCategory, action: 'See_All', label: this.props.analyticsAction}, true);\n\n const url = this.props.seeAllButtonUrl;\n this.services.location.push(url);\n };\n\n private _renderSeeAllButton() {\n if(this.props.seeAllButtonUrl.length === 0 || this.services.miniOrbit.isEnabled) {\n return null;\n }\n\n const translationKey: string = this._shouldReplaceSeeAllWithExplore() ? \"EXPLORE\" : \"SEE_ALL\";\n const ButtonBox = this._shouldReplaceSeeAllWithExplore() ? ExploreButtonBox : Button;\n\n return <SwiperButtonBox>\n <ButtonBox\n preset=\"flatStroked\"\n sizeVariant=\"xs\"\n noRemUnits\n onClick={this.seeAllClickHandler}\n className=\"cy-see-all-link\"\n >\n {this.services.translation.translate(translationKey)}\n </ButtonBox>\n </SwiperButtonBox>;\n }\n\n render() {\n\n return (\n <SwiperButtonsBox className={CyClass('cy-swiper-buttons')}>\n {this._renderMoveNextAndPreviousButtons()}\n {this._renderSeeAllButton()}\n </SwiperButtonsBox>\n );\n }\n});\n\n\n","import { action, computed, observable, makeObservable } from 'mobx';\nimport {IServiceFactory} from '../../../service-factory.interface';\nimport {IGamesListViewModel} from \"../lists/games-list-view-model.interface\";\nimport {ISwipeLogicHandler} from \"./swiper-logic-handler.interface\";\nimport { ResizeObserver } from '@juggle/resize-observer';\n\nexport class SwipeLogicHandler implements ISwipeLogicHandler {\n\n private _resizeObserver: ResizeObserver | null = null;\n constructor(private services: IServiceFactory,\n private readonly _gamesListViewModel: IGamesListViewModel) {\n makeObservable(this);\n\n this._isRTLLanguage = this.services.language.isRTLLanguage;\n }\n\n @observable.ref\n private _element: HTMLElement = null;\n\n @observable.ref\n private _currentTranslateAmount: number = 0;\n\n @action.bound\n setElement(element: HTMLElement | null) {\n this._unsubscribe();\n if(element) {\n this._element = element;\n this._setScrollWidth(element.scrollWidth);\n this._currentTranslateAmount = this.services.window.getElementHorizontalTranslationAmount(this._element as Element);\n this._subscribe();\n } else {\n this.resetScrollPosition();\n this._element = null;\n }\n }\n\n @action.bound\n resetScrollPosition() {\n this._currentTranslateAmount = 0;\n if (this._element) {\n this._element['style'].transform = `translate3d(0px, 0, 0)`;\n }\n }\n\n private _subscribe() {\n\n if(!this._resizeObserver) {\n this._resizeObserver = new ResizeObserver(() => {\n this._setScrollWidth(this._element.scrollWidth);\n })\n }\n\n this._resizeObserver.observe(this._element);\n\n if(this.services.device.isMobile && this._element) {\n this._element.addEventListener(\"scroll\", this._onMobileSwipe);\n }\n }\n\n private _unsubscribe() {\n\n if(this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n\n if(this.services.device.isMobile && this._element) {\n this._element.removeEventListener(\"scroll\", this._onMobileSwipe);\n }\n }\n\n private readonly _isRTLLanguage : boolean;\n\n\n get allowPrevious(): boolean {\n if (this._element) {\n return Math.abs(this._currentTranslateAmount) >= 1;\n }\n\n return false;\n }\n\n get allowNext(): boolean {\n if (this._element) {\n return Math.abs(this._currentTranslateAmount) < this._maximumTranslationAmount - 1;\n }\n\n return false;\n }\n\n\n private get _width(): number {\n return this.services.window.getElementWidth(this._element);\n }\n\n\n @action.bound\n private _setScrollWidth(value: number): void {\n this._scrollWidth = value;\n }\n\n @observable.ref\n private _scrollWidth = 0;\n\n\n @computed\n private get _maximumTranslationAmount(): number {\n if(this._element) {\n return this._scrollWidth - this._width;\n }\n\n return 0;\n }\n\n private _isSwiperOnTheMove = false;\n\n @action.bound\n private _slide(computeIncrement: (absoluteCurrentTranslationAmount: number) => number) {\n if(this._isSwiperOnTheMove) {\n return;\n }\n\n this._isSwiperOnTheMove = true;\n\n try {\n let currentTranslateAmount = this.services.window.getElementHorizontalTranslationAmount(this._element);\n let increment = computeIncrement(Math.abs(currentTranslateAmount));\n\n if(this._isRTLLanguage) {\n increment = -1 * increment;\n }\n\n let translateAmount = currentTranslateAmount + increment;\n\n this._element['style'].transform = `translate3d(${translateAmount}px, 0, 0)`;\n this._currentTranslateAmount = translateAmount;\n\n if (this.services.user.isVip) {\n this._sendAnalytics();\n }\n } finally {\n this._isSwiperOnTheMove = false;\n }\n }\n\n private _sendAnalytics() {\n this.services.analytics.sendElasticInfoEvent({eventType:\"CGP_Game_Click\",category: this._gamesListViewModel.arenaName, action: 'Swipe', label: this._gamesListViewModel.title.translationKey}, true);\n }\n\n\n moveNext(): void {\n if(this.allowNext) {\n this._slide((absoluteCurrentTranslationAmount) => -1 * Math.min(this._width, this._maximumTranslationAmount - absoluteCurrentTranslationAmount));\n }\n\n }\n\n movePrevious(): void {\n if(this.allowPrevious) {\n this._slide((absoluteCurrentTranslationAmount) => Math.min(this._width, absoluteCurrentTranslationAmount));\n }\n }\n\n private _mobileScrollingTimeout: any;\n private _onMobileSwipe = () => {\n //Clear the timeout on every scroll to prevent form the scroll(swipe) event to fire multiple times. (debounce)\n clearTimeout(this._mobileScrollingTimeout);\n // Set a timeout to fire after the scrolling as end\n this._mobileScrollingTimeout = setTimeout(() => {\n this._sendAnalytics();\n }, 100);\n };\n}","import React, { useMemo, useRef } from 'react';\nimport {observer } from 'mobx-react';\nimport {PlayerEvents, DotLottieCommonPlayer} from '@dotlottie/react-player';\nimport {useServices } from '../../react-hooks/use-services.hook';\nimport {TitanJackpotWidgetConfiguration } from '../../services/configurations/config-data-sections/titan-jackpot-widget.configuration';\nimport {DotLottiePlayer} from '../lottie-player/dot-lottie-player.component';\n\nconst ANIMATION_PAUSE_INTERVAL = 3000;\n\nconst MINOR_JACKPOT_FRAME = 10;\nconst MAJOR_JACKPOT_FRAME = 90;\nconst MEGA_JACKPOT_FRAME = 180;\n\nconst ANIMATION_FRAME_STOPS = [MINOR_JACKPOT_FRAME, MAJOR_JACKPOT_FRAME, MEGA_JACKPOT_FRAME];\n\ninterface ITitanAnimationComponentProps {\n widgetConfig: TitanJackpotWidgetConfiguration;\n}\n\nexport const TitanJackpotAnimationComponent: React.FC<ITitanAnimationComponentProps> = observer((props) => {\n let lottieRef = useRef<DotLottieCommonPlayer>(null);\n\n let animationCounter = 0;\n\n const services = useServices();\n\n const styles = useMemo(() => ({ borderRadius: 10, display: 'grid' }), []);\n\n const updateAnimationCounter = (): void => {\n animationCounter++;\n }\n\n const getTitanJackpotIndex = (): number => {\n return animationCounter % props.widgetConfig?.jackpotIds.length;\n }\n\n const getCurrentJackpotId = (): string => {\n const index: number = getTitanJackpotIndex();\n\n return String(props.widgetConfig.jackpotIds[index]);\n }\n\n const handleEnterFrame = (currentFrame: number): void => {\n if (Math.round(currentFrame) === ANIMATION_FRAME_STOPS[getTitanJackpotIndex()]) {\n lottieRef.current.pause();\n\n services.titanJackpot.updateJackpotHandler(getCurrentJackpotId());\n\n setTimeout(() => {\n lottieRef.current.play();\n }, ANIMATION_PAUSE_INTERVAL);\n\n updateAnimationCounter();\n }\n };\n\n const onEventHandler = (event: PlayerEvents, params: unknown) => {\n /**\n * Intercept any event from PlayerEvents in here\n * Example: Listen for player ready\n * if (event === PlayerEvents.Ready) { do stuff here }\n * Listening for frame change\n * if (event === PlayerEvents.Frame) {\n */\n if (event === PlayerEvents.Frame) {\n handleEnterFrame((params as Record<string, number>).frame)\n }\n }\n\n return (\n <DotLottiePlayer\n onEvent={onEventHandler}\n src={services.theme.currentTheme.assets.lottie_json.titan_jackpot_json.toString()}\n ref={lottieRef}\n autoplay\n loop\n style={styles}\n />\n )\n});\n","import styled from \"styled-components\";\n\nexport const TitanJackpotAmountBox = styled.div`\n position: absolute;\n top: calc(69%);\n\n text-align: center;\n \n // Text should be yellow on all brands, according to product.\n color: #fce403;\n ${({theme}) => theme.font.presets.ultra};\n font-size: 1.8em;\n width: 100%;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 1.3em; \n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 1.1em;\n }\n`;","import React from 'react';\nimport { observer } from \"mobx-react\";\nimport { TitanJackpotAmountBox } from './boxes/titan-jackpot-amount-container.box'\nimport { useServices } from '../../react-hooks/use-services.hook';\n\nexport const TitanJackpotAmountComponent: React.FC = observer(() => {\n const services = useServices();\n\n return (\n <TitanJackpotAmountBox>\n {services.currency.formatMoney(services.titanJackpot.jackpotHandler?.jackpotAmount)}\n </TitanJackpotAmountBox>\n )\n});","import React from 'react';\nimport { observer } from \"mobx-react\";\nimport { TitanJackpotWidgetConfiguration } from \"../../services/configurations/config-data-sections/titan-jackpot-widget.configuration\";\nimport { JackpotWidgetAspectRatioBox } from '../jackpot-widget/boxes/aspect-ratio/jackpot-widget-aspect-ratio.box';\nimport { JackpotWidgetBgBox } from '../jackpot-widget/boxes/bg/jackpot-widget-bg.box';\nimport { JackpotWidgetBox } from '../jackpot-widget/boxes/jackpot-widget.box';\nimport { JACKPOT_WIDGET_LAYOUT } from '../jackpot-widget/jackpot-widget.component';\nimport { JackpotType } from '../../../common/const/jackpot_map_ids';\nimport { TitanJackpotAnimationComponent } from './titan-jackpot-animation.component';\nimport { TitanJackpotAmountComponent } from './titan-jackpot-amount.component';\nimport { JackpotWidgetClockLabelSkeletonBox } from '../jackpot-widget/skeleton/boxes/footer/jackpot-widget-clock-label-skeleton.box';\nimport { JackpotWidgetCollectingLabelSkeletonBox } from '../jackpot-widget/skeleton/boxes/footer/jackpot-widget-collecting-label-skeleton.box';\nimport { JackpotWidgetFooterSkeletonBox } from '../jackpot-widget/skeleton/boxes/footer/jackpot-widget-footer-container-skeleton.box';\nimport { JackpotWidgetAmountSkeletonBox } from '../jackpot-widget/skeleton/boxes/jackpot-widget-amount-skeleton.box';\nimport { Check } from '@sparkware/app-utils';\nimport { useServices } from '../../react-hooks/use-services.hook';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\n\ninterface TitanJackpotWidgetComponentProps extends ComponentServicesPick<'jackpots'> {\n WrapperBox?: React.ComponentType;\n widgetConfig?: TitanJackpotWidgetConfiguration;\n onClick?: () => void;\n}\n\nconst ComponentBody: React.FC<TitanJackpotWidgetComponentProps> = observer((props) => {\n const services = useServices();\n\n const WrapperBox = props.WrapperBox || React.Fragment;\n\n const getJackpotWidgetLayout = (): JACKPOT_WIDGET_LAYOUT => {\n const isMobileTablet = services.mediaQuery.mAndAbove && services.mediaQuery.lAndBelow;\n\n return isMobileTablet ? JACKPOT_WIDGET_LAYOUT.PORTRAIT_TALL : JACKPOT_WIDGET_LAYOUT.PORTRAIT;\n }\n\n const isJackpotHandlerReady = (): boolean => {\n if (!props.widgetConfig?.jackpotIds?.length) {\n return false;\n }\n\n return props.widgetConfig.jackpotIds.every(jkpId => {\n const jackpotHandler = props.jackpots.currentJackpotsById[String(jkpId)];\n return !Check.isNullOrUndefined(jackpotHandler?.jackpotData);\n })\n }\n\n const renderTitanJackpotContent = (): React.ReactNode => {\n return isJackpotHandlerReady() ?\n <>\n <TitanJackpotAnimationComponent widgetConfig={props.widgetConfig} />\n <TitanJackpotAmountComponent />\n </> :\n <>\n <JackpotWidgetAmountSkeletonBox />\n <JackpotWidgetFooterSkeletonBox>\n <JackpotWidgetCollectingLabelSkeletonBox />\n <JackpotWidgetClockLabelSkeletonBox />\n </JackpotWidgetFooterSkeletonBox>\n </>;\n\n }\n\n if (!props.widgetConfig?.display) {\n return null;\n }\n\n return (\n <WrapperBox>\n <JackpotWidgetAspectRatioBox layout={getJackpotWidgetLayout()}>\n <JackpotWidgetBox onClick={() => props.onClick()} isClickable={!!props.onClick} className=\"cy-jackpot-widget\">\n <JackpotWidgetBgBox shouldRenderSkeleton={!isJackpotHandlerReady()} jackpotType={JackpotType.Titan} layout={getJackpotWidgetLayout()}>\n {renderTitanJackpotContent()}\n </JackpotWidgetBgBox>\n </JackpotWidgetBox>\n </JackpotWidgetAspectRatioBox>\n </WrapperBox>\n );\n});\n\nexport const TitanJackpotWidgetComponent = withServices(ComponentBody, ['jackpots']);","import React from 'react';\nimport {GamesListBaseModel} from \"./games-list-base.model\";\nimport {\n ApiListType,\n SwiperGamesListConfiguration\n} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport {IArenaToGamesListAdapter} from \"../arenas/arena-to-games-list-adapter.interface\";\nimport {EXCLUSIVES_LIST_ICON, JACKPOTS_ITEM} from \"../../../../themes/css-global-classes\";\nimport {TextTranslation} from \"../../../translation/text-translation\";\nimport {ListTitleIconBox} from \"../../../../components/game-list-title/boxes/list-title-icon/list-title-icon.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {JackpotWidgetComponent} from \"../../../../components/jackpot-widget/jackpot-widget.component\";\nimport {JackpotWidgetWrapperBox} from \"../../../../components/orbit-swiper/boxes/jackpot-widget-wrapper/jackpot-widget-wrapper.box\";\nimport {RedTigerWidgetComponent} from \"../../../../components/red-tiger-widget/red-tiger-widget.component\";\nimport {ISwiperListViewModel} from \"./swiper-list-view-model.interface\";\nimport {JACKPOT_WIDGET, RED_TIGER_JACKPOT} from \"../../../../components/game-list-title/constants\";\nimport {ListTitleTextBox} from \"../../../../components/game-list-title/boxes/list-title-text/list-title-text.box\";\nimport {GameListTitleComponent} from \"../../../../components/game-list-title/game-list-title.component\";\nimport classNames from \"classnames\";\nimport {OrbitSwiperButtons} from \"../../../../components/orbit-swiper/orbit-swiper-buttons/orbit-swiper-buttons\";\nimport {SwipeLogicHandler} from \"../swiper-logic-handler/swipe-logic-handler\";\nimport {ISwipeLogicHandler} from \"../swiper-logic-handler/swiper-logic-handler.interface\";\nimport { JackpotType } from '../../../../../common/const/jackpot_map_ids';\nimport { TitanJackpotWidgetComponent } from '../../../../components/titan-jackpot-widget/titan-jackpot-widget.component';\n\nexport abstract class SwiperListBaseModel extends GamesListBaseModel implements ISwiperListViewModel {\n\n constructor(protected readonly listConfiguration: SwiperGamesListConfiguration, arena: IArenaToGamesListAdapter) {\n super(arena);\n }\n \n get listId(): number {\n return this.listConfiguration.listId;\n }\n\n get apiListType(): ApiListType | undefined {\n return this.listConfiguration.apiListType;\n }\n\n get title(): TextTranslation {\n return this.services.translation.getTranslation(this.listConfiguration.title, this._getTitleTranslationParams());\n }\n\n get swipeLogicHandler() {\n return this._swipeLogicHandler;\n }\n\n get showGameTitleOnMultipleLines() {\n const widgetConfig = this.listConfiguration.jackpotWidget;\n\t\tif (!widgetConfig || !widgetConfig.display) {\n\t\t\treturn false;\n\t\t}\n\n return widgetConfig.jackpotType === JackpotType.HourlyCaptain8;\n }\n\n protected _swipeLogicHandler: ISwipeLogicHandler = new SwipeLogicHandler(this.services, this);\n\n protected _getTitleTranslationParams(): object | string | undefined {\n return this.listConfiguration.shouldInjectUsernameInTitle ? this.services.user.name : undefined;\n }\n\n protected get _numberOfGamesToBeIgnoredInAISorting(): number | undefined {\n return this.listConfiguration.ignoreNumberOfGamesInAISorting;\n }\n\n get listTypeId(): number | null {\n return null;\n }\n\n get showNumberBadge(): boolean | undefined {\n return this.listConfiguration.showNumberBadge;\n }\n\n protected get _seeAllUrl(): string {\n const seeAllConfig = this.listConfiguration.seeAll || '';\n\n /**\n * We used to support SeeAll Button as an object, from 6.6.21 we've changed that to string, this is backward compatibility\n * Task https://dev.azure.com/888holdings/GamingNDL/_workitems/edit/1737512\n */\n if (Check.isObject(seeAllConfig)) {\n return (seeAllConfig as any).url || '';\n }\n\n return seeAllConfig;\n }\n\n protected get _isAISorted(): boolean {\n return this.listConfiguration.useAISortedList;\n }\n\n protected _shouldBeDisplayed(): boolean {\n return !this.services.gamesFilter.isFilterOn;\n }\n\n protected _getGameTypes(): number[] {\n const gameTypes = this.listConfiguration.gamesId || [];\n if (this.services.gamesFilter.isFilterOn) {\n return [];\n }\n\n return gameTypes;\n }\n\n\n protected _getNumberOfGamesSkeletons(): number {\n if (this.listConfiguration.jackpotWidget) {\n return 4;\n }\n\n if (this.listConfiguration.templateType === JACKPOTS_ITEM) {\n return 2;\n }\n\n return 6;\n }\n\n get numberOfGamesSkeletons(): number {\n return this._getNumberOfGamesSkeletons();\n }\n\n protected _reduceGameTypes(gameTypes: number[]): number[] {\n gameTypes = super._reduceGameTypes(gameTypes);\n return this._reduceGameTypesForJackpotsItemTemplateInHomePage(gameTypes);\n }\n\n private _reduceGameTypesForJackpotsItemTemplateInHomePage(gameTypes: number[]): number[] {\n if (!this.services.device.isMobile) {\n return gameTypes;\n }\n if (this.listConfiguration.templateType !== JACKPOTS_ITEM) {\n return gameTypes;\n }\n if (!this.services.location.isHomePage) {\n return gameTypes;\n }\n return gameTypes.slice(0, 6);\n }\n\n get forceInLayout(): boolean {\n return this.listConfiguration.forceListInLayout;\n }\n\n private get _isJackpotWidgetHost(): boolean {\n return Boolean(this.listConfiguration.jackpotWidget?.display);\n }\n\n private get _isRedTigerJackpotWidgetHost(): boolean {\n return Boolean(this.listConfiguration.redTigerWidget?.display);\n }\n\n get templateType(): string {\n return this.listConfiguration.templateType;\n }\n\n protected get _forceRoundIcons(): boolean {\n return this.listConfiguration.forceRoundIcons;\n }\n \n protected get _useSquareIcons(): boolean {\n return this.listConfiguration.useSquareIcons;\n }\n\n protected _renderJackpotWidget() {\n let onClickHandler = null;\n if(this.services.location.isHomePage) {\n onClickHandler = () => this.services.location.push('/jackpots/');\n }\n\n return (<JackpotWidgetComponent\n widgetConfig={this.listConfiguration.jackpotWidget}\n seoCategory=\"List_Widget\"\n WrapperBox={JackpotWidgetWrapperBox}\n onClick={onClickHandler}\n />)\n }\n\n protected _renderRedTigerWidget() {\n return (\n <RedTigerWidgetComponent\n widgetConfig={this.listConfiguration.redTigerWidget}\n />\n );\n }\n\n protected _renderTitanJackpotWidget() {\n let onClickHandler = null;\n if(this.services.location.isHomePage) {\n onClickHandler = () => this.services.location.push('/jackpots/');\n }\n\n return (\n <TitanJackpotWidgetComponent \n widgetConfig={this.listConfiguration.titanJackpotWidget}\n WrapperBox={JackpotWidgetWrapperBox}\n onClick={onClickHandler}\n />\n );\n }\n\n renderSpecialWidgets(): React.ReactElement | null {\n return (\n <>\n {this._renderJackpotWidget()}\n {this._renderRedTigerWidget()}\n {this._renderTitanJackpotWidget()}\n </>\n );\n }\n\n renderListHeader(): React.ReactElement {\n return (\n <GameListTitleComponent title={this._renderHeaderIconAndText()}\n className={classNames(...this._getTitleCssClasses())}>\n {this._renderSwiperButtons()}\n </GameListTitleComponent>\n )\n }\n\n protected _renderSwiperButtons() {\n return <OrbitSwiperButtons\n analyticsAction={this.title.translationKey}\n swiper={this.swipeLogicHandler}\n seeAllButtonUrl={this._seeAllUrl}\n seoCategory={this.arenaName}\n hasExploreButton={this.listConfiguration.hasExploreButton}\n />;\n }\n\n\n _getTitleCssClasses(): string[] {\n const cssClasses: string[] = [this.listConfiguration.titleIconClassName];\n if(this._isJackpotWidgetHost) {\n cssClasses.push(JACKPOT_WIDGET);\n }\n\n if(this._isRedTigerJackpotWidgetHost) {\n cssClasses.push(RED_TIGER_JACKPOT)\n }\n\n return cssClasses;\n }\n\n _renderHeaderIconAndText(): React.ReactElement {\n return (\n <ListTitleTextBox className=\"cy-games-title-text\">\n {this._renderHeaderIcon()}\n {this._renderHeaderText()}\n </ListTitleTextBox>\n )\n }\n\n protected _renderHeaderIcon(): React.ReactElement | null {\n if (this._isJackpotWidgetHost || this.listConfiguration.titleIconClassName === EXCLUSIVES_LIST_ICON) {\n return <ListTitleIconBox/>;\n }\n\n return null;\n }\n\n protected _renderHeaderText(): string | React.ReactElement {\n return this.title.translation\n }\n\n renderListNavigation(): React.ReactElement | null {\n return null;\n }\n\n renderListFooter(): React.ReactElement | null {\n return null;\n }\n}\n","import {SwiperListBaseModel} from \"./swiper-list-base.model\";\n\nexport abstract class ApiListBaseModel extends SwiperListBaseModel {\n protected get _isAISorted(): boolean {\n return false;\n }\n\n protected _applyGameGroupFiltering(gameTypes: number[]): number[] {\n const allowedGameGroups = this.listConfiguration.allowedGameGroups;\n if (!allowedGameGroups || allowedGameGroups.length === 0) {\n return gameTypes;\n }\n\n return gameTypes.filter(gameType => {\n return allowedGameGroups.includes(this.services.games.gamesMap[gameType]?.gameGroupId);\n });\n }\n}","import React from \"react\";\nimport {RecentlyPlayedComponent} from \"../../../../../components/recently-played/recently-played.component\";\nimport {ApiListBaseModel} from \"../api-list-base.model\";\n\n\nexport class RecentlyPlayedListModel extends ApiListBaseModel {\n\n protected _shouldBeDisplayed(): boolean {\n if(!this.services.user.isAuthorized || this.services.games.recentlyPlayedGames.isInitialized) {\n return super._shouldBeDisplayed() && this.gameTypes.length > 1;\n }\n return super._shouldBeDisplayed();\n }\n\n protected _getGameTypes(): number[] {\n if (!this.services.games.recentlyPlayedGames.gameTypes) {\n return [];\n }\n\n let gameTypes = this.services.games.recentlyPlayedGames.gameTypes;\n return this._applyGameGroupFiltering(gameTypes);\n }\n\n _renderList(listPosition: number): React.ReactElement | null {\n return (<RecentlyPlayedComponent key={this.listKey} viewModel={this} listPosition={listPosition} />);\n }\n}","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {observer} from 'mobx-react';\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\n\n\ninterface TopPicksComponentProps {\n viewModel: ISwiperListViewModel;\n listPosition: number;\n}\n\nexport const TopPicksComponent = observer(class TopPicksComponent extends OrbitComponent<TopPicksComponentProps> {\n\n render() {\n\n const viewModel = this.props.viewModel;\n\n return (\n <OrbitSwiperComponent viewModel={viewModel} className={'ai-games-list cy-top-picks-list'} listPosition={this.props.listPosition}/>\n );\n }\n});\n\n\n","import React from \"react\";\nimport {TopPicksComponent} from \"../../../../../components/ai-list/top-picks.component\";\nimport {ApiListBaseModel} from \"../api-list-base.model\";\n\nexport class TopPicksListModel extends ApiListBaseModel {\n\n protected _shouldBeDisplayed(): boolean {\n if(!this.services.aiEngine.aiRecommendedGames.isInitialized) {\n return super._shouldBeDisplayed();\n }\n\n return super._shouldBeDisplayed() && this._getGameTypes().length > 0;\n }\n\n protected _getGameTypes(): number[] {\n return this.services.aiEngine.aiRecommendedGames?.gameTypes || [];\n }\n\n protected _getTitleTranslationParams() {\n return this.services.user.userData.firstName;\n }\n\n get aiEngine(): string {\n return this.services.aiEngine.aiRecommendedGames?.engine || '';\n }\n\n _renderList(listPosition: number): React.ReactElement | null {\n return (<TopPicksComponent key={this.listKey} viewModel={this} listPosition={listPosition}/>);\n }\n}","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {observer} from 'mobx-react';\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\n\ninterface AiNewGamesListComponentProps {\n viewModel: ISwiperListViewModel;\n listPosition: number;\n}\n\nexport const AiNewGamesListComponent = observer(\n class AiNewGamesListComponent extends OrbitComponent<AiNewGamesListComponentProps> {\n render() {\n const viewModel = this.props.viewModel;\n return (\n <OrbitSwiperComponent\n viewModel={viewModel}\n className={'ai-games-list'}\n listPosition={this.props.listPosition}\n />\n )\n }\n\n }\n);\n\n\n","import React from \"react\";\nimport {AiNewGamesListComponent} from \"../../../../../components/ai-new-games-list/ai-new-games-list.component\";\nimport {SwiperListBaseModel} from \"../swiper-list-base.model\";\nimport {SwiperGamesListConfiguration} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {IArenaToGamesListAdapter} from \"../../arenas/arena-to-games-list-adapter.interface\";\nimport {Check} from \"@sparkware/app-utils\";\n\nexport class NewGamesListModel extends SwiperListBaseModel {\n constructor(protected readonly listConfiguration: SwiperGamesListConfiguration,\n arena: IArenaToGamesListAdapter) {\n super(listConfiguration, arena);\n }\n\n protected _shouldBeDisplayed(): boolean {\n if(Check.isNullOrUndefined(this.services.aiNewEngine.aiNewRecommendedGames)) {\n return super._shouldBeDisplayed();\n }\n\n return super._shouldBeDisplayed() && this.gameTypes.length > 0;\n }\n\n protected _getGameTypes(): number[] {\n return this.services.aiNewEngine.aiNewRecommendedGames?.gameTypes || [];\n }\n\n protected _getTitleTranslationParams() {\n return this.services.user.name;\n }\n\n get aiEngine(): string {\n return this.services.aiNewEngine.aiNewRecommendedGames?.engine || '';\n }\n\n _renderList(listPosition: number): React.ReactElement | null {\n return <AiNewGamesListComponent key={this.listKey} viewModel={this} listPosition={listPosition}/>;\n }\n}","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {observer} from 'mobx-react';\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\n\ninterface PlayersLikeYouComponentProps {\n viewModel: ISwiperListViewModel;\n listPosition: number;\n}\n\nexport const PlayersLikeYouComponent = observer(\n class PlayersLikeYouComponent extends OrbitComponent<PlayersLikeYouComponentProps> {\n\n render() {\n\n const viewModel = this.props.viewModel;\n\n return (\n <div className={CyClass('cy-players-like-you')}>\n <OrbitSwiperComponent\n viewModel={viewModel}\n listPosition={this.props.listPosition}\n showNumberBadge={this.props.viewModel.showNumberBadge}\n skipIntermediatePage={true}\n />\n </div>\n );\n }\n }\n);\n\n\n","import React from \"react\";\nimport {LIST_TYPE_ID} from \"../../../../../../common/const/ai-trending-list-ids-map\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {PlayersLikeYouComponent} from \"../../../../../components/players-like-you/players-like-you.component\";\nimport {ApiListBaseModel} from \"../api-list-base.model\";\n\nconst NUMBER_OF_TRENDING_RECOMMENDATIONS = 10;\n\nexport class PlayersLikeYouListModel extends ApiListBaseModel {\n\n protected _shouldBeDisplayed(): boolean {\n if(Check.isNullOrUndefined(this._computeGameTypes())) {\n return super._shouldBeDisplayed();\n }\n\n return super._shouldBeDisplayed() && this.gameTypes.length > 0;\n }\n\n get listTypeId(): number {\n if(Check.isNullOrUndefined(this.services.abTestingFeatureDataProvider.playersLikeYouGamesListTypeId)) {\n return LIST_TYPE_ID.ACTIVE_USERS;\n }\n\n return parseInt(this.services.abTestingFeatureDataProvider.playersLikeYouGamesListTypeId);\n }\n\n protected _getTitleTranslationParams() {\n let topCount = NUMBER_OF_TRENDING_RECOMMENDATIONS;\n\n if(0 < this.gameTypes.length && this.gameTypes.length < topCount) {\n topCount = this.gameTypes.length;\n }\n\n return {\n topNumber: topCount,\n countryName: this.services.user.countryName || this.services.translation.translate(\"YOUR_COUNTRY\")\n }\n }\n\n protected _getGameTypes(): number[] {\n return this._computeGameTypes() || [];\n }\n\n protected get _useSquareIcons(): boolean {\n return true;\n }\n\n private _computeGameTypes(): number[] | null {\n if(this.listTypeId === LIST_TYPE_ID.ACTIVE_USERS) {\n return this.services.aiEngine.trendingRecommendedGamesForPlayerByActiveUsers;\n } else {\n return this.services.aiEngine.trendingRecommendedGamesForPlayerByBets\n }\n }\n\n get maxGamesToShowInList(): number {\n return NUMBER_OF_TRENDING_RECOMMENDATIONS;\n }\n\n _renderList(listPosition: number): React.ReactElement | null {\n return (\n <PlayersLikeYouComponent key={this.listKey} viewModel={this} listPosition={listPosition}/>\n );\n }\n}","import React from \"react\";\nimport {OrbitSwiperComponent} from \"../../../../../components/orbit-swiper/orbit-swiper.component\";\nimport {SwiperListBaseModel} from \"../swiper-list-base.model\";\n\nexport class StaticSwiperListModel extends SwiperListBaseModel {\n\n protected _shouldBeDisplayed(): boolean {\n return super._shouldBeDisplayed() && this.gameTypes.length > 0;\n }\n\n _renderList(listPosition: number): React.ReactElement | null {\n const listConfig = this.listConfiguration;\n\n\n return (\n <OrbitSwiperComponent\n viewModel={this}\n key={this.listKey}\n listPosition={listPosition}\n showNumberBadge={listConfig.showNumberBadge}\n />\n );\n }\n}","import React from 'react';\nimport {SingleGameComponent} from '../../single-game/single-game.component';\nimport {observer} from 'mobx-react';\nimport {OrbitComponentWithState} from '../../base-components/orbit-component-with-state/orbit-component-with-state';\n\nexport interface GamesGridBatchComponentProps {\n batchIndex: number;\n gameTypes: number[];\n aiEngine: string;\n seoCategory: string;\n skipIntermediatePage: boolean;\n disableGameInfoHover: boolean;\n listTitleTranslationKey: string;\n templateType?: string;\n useSquareIcons?: boolean;\n}\n\nexport interface GamesGridBatchComponentState {\n isResolved: boolean;\n}\n\nconst NUMBER_OF_GAMES_IN_BATCH = 20;\n\nexport const GamesGridBatchComponent = observer(\n class GamesGridBatchComponent extends OrbitComponentWithState<GamesGridBatchComponentProps, GamesGridBatchComponentState> {\n\n state = {\n isResolved: false\n };\n\n private _renderOneGame(gameType: number, gameIndex: number) {\n\n\n return (\n <SingleGameComponent key={gameType}\n aiEngineName={this.props.aiEngine}\n gameType={gameType}\n gameIndex={gameIndex}\n seoCategory={this.props.seoCategory}\n listTitle={this.props.listTitleTranslationKey}\n templateType={this.props.templateType}\n skipIntermediatePage={this.props.skipIntermediatePage}\n useSquareIcons={this.props.useSquareIcons}\n disableGameInfoHover={this.props.disableGameInfoHover}/>\n );\n }\n\n private _intersectionObserver: IntersectionObserver | null;\n\n private _intersectionObserverCallback = (entries: IntersectionObserverEntry[]) => {\n if (entries[0].intersectionRatio > 0 || entries[0].isIntersecting) {\n this._destroyIntersectionObserver();\n this.setState({\n isResolved: true\n });\n }\n };\n\n private _createIntersectionObserver(element: HTMLElement) {\n\n this._destroyIntersectionObserver(); // just in case this is called twice for this component we want to discard the existing intersection observer and create a new one\n\n this._intersectionObserver = new IntersectionObserver(this._intersectionObserverCallback, {\n rootMargin: '400px',\n threshold: 0.1\n });\n\n this._intersectionObserver.observe(element);\n }\n\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this._destroyIntersectionObserver();\n }\n\n private _destroyIntersectionObserver() {\n if (this._intersectionObserver) {\n this._intersectionObserver.disconnect();\n this._intersectionObserver = null;\n }\n }\n\n private _captureThresholdElement = (element: HTMLElement | null) => {\n if (element) {\n this._createIntersectionObserver(element)\n }\n };\n\n private _renderNextBatch() {\n const nextBatchGameTypes = this.props.gameTypes.slice(NUMBER_OF_GAMES_IN_BATCH);\n if(nextBatchGameTypes.length === 0) {\n return null;\n }\n\n const propsForNextBatch = {\n ...this.props,\n batchIndex: this.props.batchIndex + 1,\n gameTypes: nextBatchGameTypes\n };\n\n return (<GamesGridBatchComponent key={`Batch_${propsForNextBatch.batchIndex}`} {...propsForNextBatch}/>);\n }\n\n private _renderCurrentBatch() {\n const batchIndexOffset = this.props.batchIndex * NUMBER_OF_GAMES_IN_BATCH;\n const currentBatchGameTypes = this.props.gameTypes.slice(0, NUMBER_OF_GAMES_IN_BATCH);\n return (\n <>\n {currentBatchGameTypes.map((gameType, index) => this._renderOneGame(gameType, batchIndexOffset + index))}\n {this._renderNextBatch()}\n </>\n );\n }\n\n render() {\n\n if(this.props.batchIndex === 0 || this.state.isResolved) {\n return this._renderCurrentBatch();\n }\n\n return (\n <div style={{width: '100%', height: '10px'}} ref={this._captureThresholdElement}></div>\n )\n }\n }\n);\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const GamesGridBox = styledBox('GamesGridBox');\n","import styled from 'styled-components';\n\nexport const NoGamesFoundMessageDefaultBox = styled.p`\n font-size: 1.2rem;\n margin: 15px 0;\n min-height: 300px;\n color: ${props => props.theme.colors.textLight};\n`;","import {NoGamesFoundMessageDefaultBox} from './no-games-found-message.default.box';\n\nexport const NoGamesFoundMessageBox = NoGamesFoundMessageDefaultBox;","import styled from \"styled-components\";\nimport {CGP_GAME_OPEN} from \"../../../themes/css-global-classes\";\n\nexport const GamesGridContainerBox = styled.div`\n .${CGP_GAME_OPEN} & {\n display: none;\n }\n`;","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {GamesGridBatchComponent} from './games-grid-batch/games-grid-batch.component';\nimport {GamesGridBox} from './boxes/games-grid/games-grid.box';\nimport {NoGamesFoundMessageBox} from './boxes/no-games-found-message/no-games-found-message.box';\nimport classNames from 'classnames';\nimport {GRID_GAMES_LIST} from '../single-game/css-constants';\nimport {GamesGridContainerBox} from \"./boxes/games-grid-container.box\";\nimport {IGamesListViewModel} from \"../../services/arenas/models/lists/games-list-view-model.interface\";\n\nexport interface GamesGridComponentProps {\n viewModel: IGamesListViewModel;\n skipIntermediatePage: boolean;\n disableGameInfoHover: boolean;\n useSquareIcons?: boolean;\n}\n\nexport const GamesGridComponent = observer(class GamesGridComponent extends OrbitComponent<GamesGridComponentProps> {\n\n private _renderTitle() {\n\n if(!this.props.disableGameInfoHover && this.services.gamesFilter.isFilterOn) {\n return null;\n }\n return this.props.viewModel.renderListHeader();\n }\n\n private _renderGames(gameTypes: number[]) {\n return (\n\n <GamesGridBox className={classNames('cy-games-grid', GRID_GAMES_LIST)}>\n <GamesGridBatchComponent batchIndex={0}\n gameTypes={gameTypes}\n aiEngine={this.props.viewModel.aiEngine}\n templateType={this.props.viewModel.templateType}\n seoCategory={this.props.viewModel.arenaName}\n listTitleTranslationKey={this.props.viewModel.title.translationKey}\n skipIntermediatePage={this.props.skipIntermediatePage}\n useSquareIcons={this.props.useSquareIcons}\n disableGameInfoHover={this.props.disableGameInfoHover} />\n </GamesGridBox>\n );\n }\n\n private _renderNoGames() {\n if(this.services.gamesFilter.isFilterOn) {\n return (\n <NoGamesFoundMessageBox>{this.services.translation.translate('YOUR_SEARCH_DID_NOT_MATCH_ANY_GAMES')}</NoGamesFoundMessageBox>\n )\n } else {\n return null;\n }\n }\n\n private _renderContent() {\n let gameTypes = this.props.viewModel.gameTypes;\n if(gameTypes.length === 0) {\n return this._renderNoGames();\n }\n return (\n <>\n {this._renderTitle()}\n {this._renderGames(gameTypes)}\n </>\n );\n }\n\n\n render() {\n return (\n <GamesGridContainerBox className={'cy-games-grid-container'}>\n {this._renderContent()}\n </GamesGridContainerBox>\n );\n }\n});\n","import React from \"react\";\nimport {GamesListBaseModel} from \"../games-list-base.model\";\nimport {GamesGridComponent} from \"../../../../../components/games-grid/games-grid.component\";\nimport {ArenaGamesGridConfiguration} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {IArenaToGamesListAdapter} from \"../../arenas/arena-to-games-list-adapter.interface\";\nimport {TextTranslation} from \"../../../../translation/text-translation\";\nimport {GameListTitleComponent} from \"../../../../../components/game-list-title/game-list-title.component\";\nimport {ListTitleTextBox} from \"../../../../../components/game-list-title/boxes/list-title-text/list-title-text.box\";\n\nexport class GamesGridListModel extends GamesListBaseModel {\n constructor(protected readonly gridConfig: ArenaGamesGridConfiguration,\n arena: IArenaToGamesListAdapter) {\n super(arena)\n }\n\n protected _getGameTypes(): number[] {\n return this.gridConfig.gamesId || [];\n }\n\n protected get _isAISorted(): boolean {\n return this.gridConfig.useAISortedList;\n }\n\n\n protected _shouldBeDisplayed(): boolean {\n return true;\n //return this.gridConfig.display;\n }\n\n protected get _numberOfGamesToBeIgnoredInAISorting(): number | undefined {\n return undefined;\n }\n\n get listId(): number {\n return this.gridConfig.listId;\n }\n\n get title(): TextTranslation {\n return this.services.translation.getTranslation(this.gridConfig.title);\n }\n\n get maxGamesToShowInList(): number {\n return this._getGameTypes().length; // for grids we show all games\n }\n\n get forceInLayout(): boolean {\n return true;\n }\n\n get templateType(): string {\n return this.gridConfig.templateType;\n }\n\n protected get _forceRoundIcons(): boolean {\n return this.gridConfig.forceRoundIcons;\n }\n \n protected get _useSquareIcons(): boolean {\n return this.gridConfig.useSquareIcons;\n }\n\n private get _shouldSquareIconsBeUsed(): boolean {\n return this.shouldUseSquareIcons();\n }\n\n renderListHeader(): React.ReactElement {\n const title = (\n <ListTitleTextBox className=\"cy-games-title-text\">\n {this.title.translation}\n </ListTitleTextBox>\n );\n\n return (\n <GameListTitleComponent title={title}/>\n );\n }\n\n protected _renderList(listPosition: number): React.ReactElement | null {\n return (\n <GamesGridComponent key={this.listKey}\n viewModel={this}\n skipIntermediatePage={false}\n disableGameInfoHover={false}\n useSquareIcons={this._shouldSquareIconsBeUsed} />\n );\n }\n\n\n}","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {observer} from 'mobx-react';\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ISwiperListViewModel} from \"../../services/arenas/models/lists/swiper-list-view-model.interface\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface BecauseYouPlayedComponentProps extends ComponentServicesPick<'gameRunner'>{\n viewModel: ISwiperListViewModel;\n listPosition: number;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent<BecauseYouPlayedComponentProps> {\n\n componentDidMount() {\n super.componentDidMount();\n\n this.reaction(() => this.props.gameRunner.lastPlayedGame.correlatedGamesForLastPlayedRealGame,\n (correlatedGames) => {\n this.props.viewModel.swipeLogicHandler.resetScrollPosition();\n }\n );\n }\n\n render() {\n const viewModel = this.props.viewModel;\n\n return (\n <div className={CyClass('cy-because-you-played')}>\n <OrbitSwiperComponent\n viewModel={viewModel}\n listPosition={this.props.listPosition}\n skipIntermediatePage={true}\n />\n </div>\n );\n }\n}\n\nexport const BecauseYouPlayedComponent = withServices(ComponentBody, ['gameRunner']);","import React from \"react\";\nimport { BecauseYouPlayedComponent } from \"../../../../../components/because-you-played/because-you-played.component\";\nimport { SwiperGamesListConfiguration } from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport { IArenaToGamesListAdapter } from \"../../arenas/arena-to-games-list-adapter.interface\";\nimport {ApiListBaseModel} from \"../api-list-base.model\";\n\nexport class BecauseYouPlayedPlayedListModel extends ApiListBaseModel {\n constructor(protected readonly listConfiguration: SwiperGamesListConfiguration, arena: IArenaToGamesListAdapter) {\n super(listConfiguration, arena);\n this.services.gameRunner.then(gameRunner => {\n gameRunner.lastPlayedGame.listenForLastPlayedRealGame();\n })\n\n }\n\n protected _shouldBeDisplayed(): boolean {\n return super._shouldBeDisplayed() &&\n this.gameTypes.length > 0;\n }\n\n protected _getTitleTranslationParams(): object | string | undefined {\n const lastPlayedGames = this.services.becauseYouPlayed.currentBecauseYouPlayedGames[0];\n if (lastPlayedGames) {\n return {\n gameName: lastPlayedGames.title\n }\n }\n\n return super._getTitleTranslationParams();\n }\n\n protected _getGameTypes(): number[] {\n return this.services.becauseYouPlayed.currentBecauseYouPlayedGames.map(gInfo => gInfo.gameType);\n }\n\n\n\n protected _renderList(listPosition: number): React.ReactElement<any, string | React.JSXElementConstructor<any>> {\n return (\n <BecauseYouPlayedComponent key={this.listKey} viewModel={this} listPosition={listPosition} />\n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const LiveStreamingListTitleDefaultBox = styled.div`\n color: ${({theme}) => theme.colors.textLight.toString()};\n`;\n","import {LiveStreamingListTitleDefaultBox} from \"./live-streaming-list-title.default.box\";\n\nexport const LiveStreamingListTitleBox = LiveStreamingListTitleDefaultBox;\n","import styled from \"styled-components\";\n\nexport const LiveStreamingTitleIconDefaultBox = styled.div`\n padding: 0 4px;\n margin-right: 1rem;\n border-radius: 2px;\n letter-spacing: 0;\n\n color: ${({theme}) => theme.colors.background.toString()};\n background: ${({theme}) => theme.colors.brandPrimary.toString()};\n\n animation: FlashingAnimation 2s ease infinite;\n\n @keyframes FlashingAnimation {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n","import {LiveStreamingTitleIconDefaultBox} from \"./live-streaming-title-icon.default.box\";\n\nexport const LiveStreamingTitleIconBox = LiveStreamingTitleIconDefaultBox;\n","import {IServiceFactory} from \"../../../service-factory.interface\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport {ISwipeLogicHandlerMoveNextOptions, ISwipeLogicHandler} from \"./swiper-logic-handler.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {ISwiperListViewModel} from \"../lists/swiper-list-view-model.interface\";\n\nexport class LiveStreamSwipeLogicHandler implements ISwipeLogicHandler {\n\n private _element: HTMLElement = null;\n private _touchStartX = 0;\n private _swipeDirection = 0;\n private _touchDragThreshold = 25;\n private _swipeTransitionCss = \"transform 0.5s ease-in-out\";\n\n constructor(private readonly _services: IServiceFactory, private readonly _gamesListViewModel: ISwiperListViewModel) {\n makeObservable(this);\n }\n\n @observable.ref\n allowNext: boolean = true;\n @observable.ref\n allowPrevious: boolean = true;\n\n private _subscribe() {\n this._unsubscribe();\n this._element.addEventListener(\"transitionend\", this._handleTransitionEnd);\n this._element.addEventListener(\"touchstart\", this._handleTouchStart);\n this._element.addEventListener(\"touchend\", this._handleTouchEnd);\n }\n\n private _unsubscribe() {\n if (this._element) {\n this._element.removeEventListener(\"transitionend\", this._handleTransitionEnd);\n this._element.removeEventListener(\"touchstart\", this._handleTouchStart);\n this._element.removeEventListener(\"touchend\", this._handleTouchEnd);\n }\n }\n\n private _handleTouchStart = (event: TouchEvent) => {\n this._touchStartX = event.changedTouches[0].clientX;\n }\n\n private _handleTouchEnd = (event: TouchEvent) => {\n\n const dragDistance = Math.abs(event.changedTouches[0].clientX - this._touchStartX);\n\n if (dragDistance < this._touchDragThreshold) return;\n\n if (event.changedTouches[0].clientX < this._touchStartX) {\n this.moveNext();\n } else {\n this.movePrevious();\n }\n }\n\n private _handleTransitionEnd = (event: TransitionEvent) => {\n\n /** this._element is the swiper element and\n * if any element inside has any kind of transitions on their transform css property...\n * their \"transitionend\" events will also be catched here\n * So we check the event target because\n * we want to run this handler only for events that have this._element as target */\n if (event.propertyName === \"transform\" && event.target === this._element) {\n\n if (this._swipeDirection < 0) {\n\n this._element.append(this._element.firstElementChild);\n\n this._element.style.transition = \"none\";\n this._element.style.transform = \"translateX(0)\";\n }\n\n this._setIsNavigationAllowed(true);\n }\n };\n\n @action.bound\n private _setIsNavigationAllowed(allowed: boolean) {\n this.allowNext = allowed;\n this.allowPrevious = allowed;\n }\n\n setElement(element: HTMLElement | null): void {\n this._unsubscribe();\n if (element) {\n this._element = element;\n this._element.style.overflow = \"initial\";\n this._subscribe();\n } else {\n this._element = null;\n }\n }\n\n moveNext(options?: ISwipeLogicHandlerMoveNextOptions): void {\n\n if (!this.allowNext) return;\n\n options = {\n moveOnVideoFinished: false,\n ...options\n };\n\n this._reportSwipeToAnalytics(true, options.moveOnVideoFinished);\n\n this._swipeDirection = -1;\n this._element.style.transition = this._swipeTransitionCss;\n const translateAmount = (this._services.mediaQuery.xlAndAbove ? 33.33 : 100) * (this._services.language.isRTLLanguage ? 1 : -1);\n this._element.style.transform = \"translateX(\" + translateAmount + \"%)\";\n this._setIsNavigationAllowed(false);\n }\n\n movePrevious(): void {\n\n if (!this.allowPrevious) return;\n\n this._reportSwipeToAnalytics(false);\n\n this._swipeDirection = 1;\n\n this._element.style.transition = \"none\";\n this._element.prepend(this._element.lastElementChild);\n const translateAmount = (this._services.mediaQuery.xlAndAbove ? 33.33 : 100) * (this._services.language.isRTLLanguage ? 1 : -1);\n this._element.style.transform = \"translateX(\" + translateAmount + \"%)\";\n\n this._setIsNavigationAllowed(false);\n\n requestAnimationFrame(() => {\n this._element.style.transition = this._swipeTransitionCss;\n this._element.style.transform = \"translateX(0)\";\n });\n }\n\n resetScrollPosition(): void {\n this._element.style.transform = \"translateX(0)\";\n }\n\n private _currentGameIndex: NullableNumber = null;\n setCurrentGameIndex(gameIndex: number): void {\n this._currentGameIndex = gameIndex;\n }\n\n private _reportSwipeToAnalytics(swipeToLeft:boolean, isAutoSwipe:boolean=false): void {\n try {\n\n if(Check.isNullOrUndefined(this._currentGameIndex)) {\n return;\n }\n\n let nextGame;\n if(swipeToLeft === true){\n nextGame = (this._currentGameIndex + 1) % this._gamesListViewModel.gameTypes.length;\n }\n else {\n nextGame = (this._currentGameIndex>0) ? (this._currentGameIndex-1) : (this._gamesListViewModel.gameTypes.length-1);\n }\n\n let swipeFromGameId = this._gamesListViewModel.gameTypes[this._currentGameIndex];\n\n this._services.analytics.sendElasticInfoEvent({\n eventType:\"CGP_GENERIC_EVENT\",\n category: this._gamesListViewModel.arenaName,\n label: 'SWIPE',\n action: \"LIVE_CASINO_VIDEO\",\n customData: {\n swipeFromGameId:swipeFromGameId,\n swipeFromGameIndex:this._currentGameIndex,\n swipeToGameId:this._gamesListViewModel.gameTypes[nextGame],\n isAutoSwipe:isAutoSwipe\n }\n }, true);\n }\n catch (err){\n console.log(\"SWIPE analytics report failed : \" + err);\n }\n }\n\n}\n","import styled from \"styled-components\";\nimport { CssRule } from \"../../../../themes/architecture/css-helpers/css-rule\";\n\ninterface LiveStreamingNavigationProps {\n isActive: boolean;\n}\n\nconst LiveStreamingNavigationCommonBox = styled.div<LiveStreamingNavigationProps>`\n position: absolute;\n top: 35%;\n width: 3rem;\n height: 3rem;\n opacity: ${({isActive}) => isActive ? \"1\" : \"0.25\"};\n cursor: pointer;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n /* On PC, one tile is a third of the swiper, but the ones not in center are scaled to 0.7 */\n /* So ... height is 100 * 0.7 */\n height: 70%;\n /* top is 100 * (1-0.7) / 2 */\n top: 15%;\n /* 23.331 is 33.33*0.7 */\n width: 23.331%;\n }\n`;\n\nexport const VideoListNavigationPrevButtonDefaultBox = styled(LiveStreamingNavigationCommonBox)`\n left: 1rem;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n /* On PC, one tile is a third of the swiper, but the ones not in center are scaled to 0.7 */\n /* left is 33.33*(1-0.7)/2 */\n left: 5%;\n }\n`;\n\nexport const VideoListNavigationNextButtonDefaultBox = styled(LiveStreamingNavigationCommonBox)`\n right: 1rem;\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n /* On PC, one tile is a third of the swiper, but the ones not in center are scaled to 0.7 */\n /* right is 33.33*(1-0.7)/2 */\n right: 5%;\n }\n`;\n\nconst VideoCutCommonBox = styled.div`\n position: absolute;\n height: 80%;\n width: 2px;\n top: 10%;\n`;\n\nexport const VideoListLeftCutDefaultBox = styled(VideoCutCommonBox)`\n left: 8%;\n margin-left: -6px;\n\n ${CssRule.For.RTL.build()} & {\n left: unset;\n margin-left: 0px;\n right: 8%;\n margin-right: 6px;\n }\n`;\nexport const VideoListRightCutDefaultBox = styled(VideoCutCommonBox)`\n right: 8%;\n margin-right: 11px;\n\n ${CssRule.For.RTL.build()} & {\n right: unset;\n margin-right: 0px;\n left: 8%;\n margin-left: -11px;\n }\n`;\n","import {VideoListNavigationPrevButtonDefaultBox, VideoListNavigationNextButtonDefaultBox, VideoListLeftCutDefaultBox, VideoListRightCutDefaultBox} from \"./video-navigation.default.box\";\n\nexport const VideoListNavigationPrevButtonBox = VideoListNavigationPrevButtonDefaultBox;\nexport const VideoListNavigationNextButtonBox = VideoListNavigationNextButtonDefaultBox;\n\nexport const VideoListLeftCutBox = VideoListLeftCutDefaultBox;\nexport const VideoListRightCutBox = VideoListRightCutDefaultBox;\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {OrbitSwiperComponent} from '../orbit-swiper/orbit-swiper.component';\nimport {IVideoListViewModel} from \"../../services/arenas/models/lists/video-list/video-list-view-model.interface\";\n\n\ninterface VideoListComponentProps {\n viewModel: IVideoListViewModel;\n listPosition: number;\n}\n\nexport const VideoListComponent = observer(class VideoListComponent extends OrbitComponent<VideoListComponentProps> {\n\n // For static video list we need to know the final gametype(from UI perspective)\n // For the final gametype, once video finishes, we don't auto swipe to the next one(= first one).\n private _getLastGameType(): number {\n let gameTypes = this.props.viewModel.gameTypes;\n let index = this.services.mediaQuery.xlAndAbove ? 0 : (gameTypes.length - 1);\n return gameTypes[index];\n }\n\n private _onGameBringInCentralView = (gameIndex: number) => {\n this.props.viewModel.setCurrentGameIndex(gameIndex);\n }\n\n render() {\n const viewModel = this.props.viewModel;\n return (\n <OrbitSwiperComponent\n viewModel={viewModel}\n listPosition={this.props.listPosition}\n lastGameType={this._getLastGameType()}\n onGameBringInCentralView={this._onGameBringInCentralView}\n />\n );\n }\n});\n","import {SwiperListBaseModel} from \"../swiper-list-base.model\";\nimport {LiveStreamSwipeLogicHandler} from \"../../swiper-logic-handler/live-stream-swipe-logic-handler\";\nimport {Check} from \"@sparkware/app-utils\";\nimport React from \"react\";\nimport {\n VideoListLeftCutBox, VideoListNavigationNextButtonBox,\n VideoListNavigationPrevButtonBox, VideoListRightCutBox\n} from \"../../../../../components/live-streaming-tile/video-common-components/video-navigation/video-navigation.box\";\nimport {VideoListComponent} from \"../../../../../components/video-list-component/video-list.component\";\nimport {IVideoListViewModel} from \"./video-list-view-model.interface\";\n\nexport abstract class DefaultVideoListModel extends SwiperListBaseModel implements IVideoListViewModel {\n protected _swipeLogicHandler: LiveStreamSwipeLogicHandler = new LiveStreamSwipeLogicHandler(this.services, this);\n\n protected get _isAISorted(): boolean {\n return false;\n }\n\n protected _getGameTypesOffsetFromLocalStorage(): number {\n let storedValue = this.services.localStorage.getItem(this._offsetStorageKey);\n\n return Check.isNullOrUndefined(storedValue) ? 0 : parseInt(storedValue);\n }\n\n protected _offsetStorageKey: string = 'orbit-video-list-gametype-offset' + this.listConfiguration.listId;\n\n /**\n * This must be static. Because the ListFactory.createSwiper will be called several times, and that will create a new instance of this class.\n * (For every live casino video list and every time the list changes and maybe when the ai changes the list sorting)\n * So if this is not \"static\" at every instance creation _gameTypesOffset will be initialized with \"undefined\"\n * and when calling _getGameTypes the cycling will run again for every new instance.\n * And we want to do this only once after page load\n */\n protected static _gameTypesOffsets: Record<string, number> = {};\n\n protected _cycleGamesAndIncrementOffset(baseArray: number[]) {\n if(Check.isNullOrUndefined(DefaultVideoListModel._gameTypesOffsets[this._offsetStorageKey])) {\n DefaultVideoListModel._gameTypesOffsets[this._offsetStorageKey] = this._getGameTypesOffsetFromLocalStorage();\n let newOffset = (DefaultVideoListModel._gameTypesOffsets[this._offsetStorageKey] + 1) % (this.listConfiguration.gamesId.length);\n this.services.localStorage.setItem(this._offsetStorageKey, newOffset);\n }\n\n return baseArray.splice(DefaultVideoListModel._gameTypesOffsets[this._offsetStorageKey]).concat(baseArray);\n }\n\n get gameTypes(): number[] {\n // gameTypes is a getter and in javascript I cannot call \"super.gameTypes\"\n let gTypes = this._applyGameTypesTransformations(this._getGameTypes());\n\n if (this.services.mediaQuery.xlAndAbove && gTypes.length > 2) {\n let lastGame = gTypes.pop();\n gTypes.unshift(lastGame);\n }\n return gTypes;\n }\n\n renderListNavigation(): React.ReactElement | null {\n\n const PrevIcon = this.services.theme.currentTheme.icons.leftArrowIcon;\n const NextIcon = this.services.theme.currentTheme.icons.rightArrowIcon;\n\n return (\n <React.Fragment>\n {this.services.mediaQuery.xlAndAbove ?\n <VideoListLeftCutBox>\n <svg width=\"20\" height=\"100%\" viewBox=\"0 0 20 357\">\n <defs>\n <filter id=\"Rectangle_1662\" x=\"0\" y=\"0\" width=\"20\" height=\"357\" filterUnits=\"userSpaceOnUse\">\n <feOffset dx=\"4\" dy=\"3\" />\n <feGaussianBlur stdDeviation=\"3\" result=\"blur\"/>\n <feFlood/>\n <feComposite operator=\"in\" in2=\"blur\"/>\n <feComposite in=\"SourceGraphic\"/>\n </filter>\n </defs>\n <g transform=\"matrix(1, 0, 0, 1, 0, 0)\" filter=\"url(#Rectangle_1662)\">\n <rect id=\"Rectangle_1662-2\" data-name=\"Rectangle 1662\" width=\"2\" height=\"339\" transform=\"translate(5 6)\" fill=\"#262626\"/>\n </g>\n </svg>\n </VideoListLeftCutBox>\n : null}\n <VideoListNavigationPrevButtonBox isActive={this.swipeLogicHandler.allowPrevious} onClick={() => this.swipeLogicHandler.movePrevious()}>\n <PrevIcon size={3} style={{position: \"absolute\", top: \"40%\", left: \"35%\"}} />\n </VideoListNavigationPrevButtonBox>\n <VideoListNavigationNextButtonBox isActive={this.swipeLogicHandler.allowNext} onClick={() => this.swipeLogicHandler.moveNext()}>\n <NextIcon size={3} style={{position: \"absolute\", top: \"40%\", right: \"35%\"}} />\n </VideoListNavigationNextButtonBox>\n {this.services.mediaQuery.xlAndAbove ?\n <VideoListRightCutBox>\n <svg width=\"20\" height=\"100%\" viewBox=\"0 0 20 357\">\n <defs>\n <filter id=\"Rectangle_1663\" x=\"0\" y=\"0\" width=\"20\" height=\"357\" filterUnits=\"userSpaceOnUse\">\n <feOffset dx=\"-4\" dy=\"3\" />\n <feGaussianBlur stdDeviation=\"3\" result=\"blur\"/>\n <feFlood/>\n <feComposite operator=\"in\" in2=\"blur\"/>\n <feComposite in=\"SourceGraphic\"/>\n </filter>\n </defs>\n <g transform=\"matrix(1, 0, 0, 1, 0, 0)\" filter=\"url(#Rectangle_1663)\">\n <rect id=\"Rectangle_1663-2\" data-name=\"Rectangle 1663\" width=\"2\" height=\"339\" transform=\"translate(13 6)\" fill=\"#262626\"/>\n </g>\n </svg>\n </VideoListRightCutBox>\n : null}\n </React.Fragment>\n );\n }\n\n\n\n _renderList(listPosition: number): React.ReactElement | null {\n return (\n <VideoListComponent\n key={this.listKey}\n viewModel={this}\n listPosition={listPosition}\n />\n );\n }\n\n setCurrentGameIndex(gameIndex: number): void {\n this._swipeLogicHandler.setCurrentGameIndex(gameIndex);\n }\n}\n","import React from \"react\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {LiveStreamingListTitleBox} from \"../../../../../components/live-streaming-tile/live-streaming-specific-components/live-streaming-list-title/live-streaming-list-title.box\";\nimport {LiveStreamingTitleIconBox} from \"../../../../../components/live-streaming-tile/live-streaming-specific-components/live-streaming-title-icon/live-streaming-title-icon.box\";\nimport {DefaultVideoListModel} from \"./default-video-list.model\";\nimport {LIVE_STREAMING_ITEM} from \"../../../../../themes/css-global-classes\";\n\nexport class LiveStreamingVideoListModel extends DefaultVideoListModel {\n\n get templateType(): string {\n return LIVE_STREAMING_ITEM;\n }\n\n private _isLiveStreamDisabled = () => {\n // live stream should be rendered on mobile only, excepting CIP8, if is enable from AB and\n // if user is authorized or if is not authorized only if is not disabled prelogin\n return this.services.miniOrbit.isEnabled ||\n !this.services.abTestingFeatureDataProvider.videoLiveStream.isEnabled ||\n this.services.liveStreamPlaying.isDisabledPrelogin\n };\n\n protected _shouldBeDisplayed(): boolean {\n if(this._isLiveStreamDisabled()) {\n return false;\n }\n\n return super._shouldBeDisplayed() && this.gameTypes.length > 0;\n }\n\n get maxGamesToShowInList(): number {\n return 20;\n }\n\n protected _getGameTypes(): number[] {\n\n if(!Check.isNullOrUndefined(this.services.liveStreamPlaying.isSupported)\n && !this.services.liveStreamPlaying.isSupported) {\n return [];\n }\n\n let baseArray = [...this.listConfiguration.gamesId];\n let gameTypes = this._cycleGamesAndIncrementOffset(baseArray);\n\n gameTypes = gameTypes.filter((gt) => this.services.games.gamesMap[gt]?.hasVideoURL);\n\n if(this.services.liveTableFeeds.tablesData.length === 0) {\n return gameTypes;\n } else {\n return gameTypes.filter(gType => this.services.liveTableFeeds.openTablesIds.find(tableId => tableId === gType.toString()));\n }\n }\n\n get numberOfGamesSkeletons(): number {\n return this._getNumberOfGamesSkeletons();\n }\n\n protected _getNumberOfGamesSkeletons(): number {\n if(Check.isNullOrUndefined(this.services.liveStreamPlaying.isSupported) || this.services.liveTableFeeds.tablesData.length === 0) {\n return 1;\n }\n\n return 0;\n }\n\n protected _renderHeaderIcon(): React.ReactElement | null {\n return (\n <LiveStreamingTitleIconBox>{this.services.translation.translate(\"LIVE\")}</LiveStreamingTitleIconBox>\n );\n }\n\n protected _renderHeaderText(): string | React.ReactElement {\n return (\n <LiveStreamingListTitleBox>\n {this.title.translation}\n </LiveStreamingListTitleBox>\n );\n }\n\n}\n","import {DefaultVideoListModel} from \"./default-video-list.model\";\nimport {STATIC_VIDEO_ITEM} from \"../../../../../themes/css-global-classes\";\nimport {SwiperGamesListConfiguration} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {IArenaToGamesListAdapter} from \"../../arenas/arena-to-games-list-adapter.interface\";\n\nexport class StaticVideoListModel extends DefaultVideoListModel {\n\n constructor(listConfiguration: SwiperGamesListConfiguration, arena: IArenaToGamesListAdapter) {\n super(listConfiguration, arena);\n\n this.services.staticVideoPlaying.setSwiperHandler(this.swipeLogicHandler);\n }\n\n get templateType(): string {\n return STATIC_VIDEO_ITEM;\n }\n\n private _isStaticVideoListDisabled = () => {\n return (\n this.services.miniOrbit.isEnabled ||\n this.services.staticVideoPlaying.isDisabledPrelogin ||\n !this.services.abTestingFeatureDataProvider.staticVideoList.isEnabled\n );\n };\n\n protected _shouldBeDisplayed(): boolean {\n if(this._isStaticVideoListDisabled()) {\n return false;\n }\n\n return super._shouldBeDisplayed() && this.gameTypes.length > 0;\n }\n\n get maxGamesToShowInList(): number {\n return 4;\n }\n\n protected _getGameTypes(): number[] {\n\n let baseArray = [...this.listConfiguration.gamesId];\n let gameTypes = this._cycleGamesAndIncrementOffset(baseArray);\n\n gameTypes = gameTypes.filter((gt) => this.services.games.gamesMap[gt]?.hasVideoURL);\n\n return gameTypes;\n }\n\n get numberOfGamesSkeletons(): number {\n return this._getNumberOfGamesSkeletons();\n }\n\n protected _getNumberOfGamesSkeletons(): number {\n return 1;\n }\n}\n","import {\n ApiListType, ArenaGamesGridConfiguration,\n SwiperGamesListConfiguration\n} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport {IGamesListModel} from \"./games-list-model.interface\";\nimport {RecentlyPlayedListModel} from \"./recently-played/recently-played-list.model\";\nimport {TopPicksListModel} from \"./top-picks/top-picks-list.model\";\nimport {NewGamesListModel} from \"./new-games/new-games-list.model\";\nimport {PlayersLikeYouListModel} from \"./players-like-you/players-like-you-list.model\";\nimport {StaticSwiperListModel} from \"./static-swiper/static-swiper-list.model\";\nimport {IArenaToGamesListAdapter} from \"../arenas/arena-to-games-list-adapter.interface\";\nimport {GamesGridListModel} from \"./games-grid/games-grid-list.model\";\nimport { BecauseYouPlayedPlayedListModel } from \"./because-you-played/because-you-played-list.model\";\nimport {LiveStreamingVideoListModel} from \"./video-list/live-streaming-video-list.model\";\nimport {StaticVideoListModel} from \"./video-list/static-video-list.model\";\n\n\nexport class ListFactory {\n\n constructor(private readonly arena: IArenaToGamesListAdapter) {\n }\n createSwiper(swiperConfig: SwiperGamesListConfiguration): IGamesListModel {\n\n switch (swiperConfig.apiListType) {\n case ApiListType.RECENTLY_PLAYED:\n return new RecentlyPlayedListModel(swiperConfig, this.arena);\n case ApiListType.TOP_PICKS:\n return new TopPicksListModel(swiperConfig, this.arena);\n case ApiListType.NEW_GAMES:\n return new NewGamesListModel(swiperConfig, this.arena);\n case ApiListType.PLAYERS_LIKE_YOU:\n return new PlayersLikeYouListModel(swiperConfig, this.arena);\n case ApiListType.LIVE_CASINO_VIDEO: // maybe rename this to LIVE_STREAMING_VIDEO,but it'd also need admin updated\n return new LiveStreamingVideoListModel(swiperConfig, this.arena);\n case ApiListType.STATIC_VIDEO:\n return new StaticVideoListModel(swiperConfig, this.arena);\n case ApiListType.BECAUSE_YOU_PLAYED:\n return new BecauseYouPlayedPlayedListModel(swiperConfig, this.arena);\n\n default:\n return new StaticSwiperListModel(swiperConfig, this.arena);\n\n }\n }\n\n createGrid(gridConfig: ArenaGamesGridConfiguration) {\n return new GamesGridListModel(gridConfig, this.arena);\n }\n}\n","import {BannerComponent} from \"../../../../../components/banner/banner.component\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport {BannerConfig} from \"../../arenas/arena-base.model\";\n\nexport class PromotionalBannerModel {\n constructor(private readonly services: IServiceFactoryExtended,\n public readonly arenaName: string,\n private readonly _bannerConfig: BannerConfig | null) {\n\n }\n private _getBannerMinHeightInPixels(listPosition: number, numberOfListsInCurrentArena: number, bannerConfig: BannerConfig | null) {\n if (!bannerConfig) {\n return 0;\n }\n\n const shouldRenderBanner = listPosition === bannerConfig.position\n || (numberOfListsInCurrentArena < bannerConfig.position && listPosition === numberOfListsInCurrentArena);\n if (!shouldRenderBanner) {\n return 0;\n }\n\n if (this.services.mediaQuery.sAndBelow) {\n return 142;\n }\n\n return 223;\n }\n\n render(listPosition: number, numberOfListsInCurrentArena: number): React.ReactElement {\n const bannerMinHeight = this._getBannerMinHeightInPixels(listPosition, numberOfListsInCurrentArena, this._bannerConfig);\n if (bannerMinHeight === 0) {\n return null;\n }\n\n return (\n <BannerComponent\n key={`${this.arenaName}_ARENA_PROMOTIONAL_BANNER_${listPosition}`}\n showPlaceholder={false}\n templateID={this._bannerConfig.templateID}\n componentID={this._bannerConfig.componentID}\n fallbackUrl={this._bannerConfig.fallbackUrl}\n minHeight={bannerMinHeight + 'px'}\n bannerAdminPlaceholderId={this._bannerConfig.bannerAdminPlaceholderId}\n />\n );\n }\n}","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n\nexport const VideoSlidesFilterItemPreviewFooterBox = styledBox(\"VideoSlidesFilterItemPreviewFooterBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterItemPreviewFooterTextBox = styledBox(\"VideoSlidesFilterItemPreviewFooterTextBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterItemPreviewBox = styledBox(\"VideoSlidesFilterItemPreviewBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterItemPreviewPlayerBox = styledBox(\"VideoSlidesFilterItemPreviewPlayerBox\");","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from '../../../../react-hooks/use-services.hook';\nimport {Nullable} from \"../../../../../common/types/nullable-types\";\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport {VideoSlidesFilterItemPreviewFooterBox} from \"./footer/video-slides-filter-item-preview-footer.box\";\nimport {VideoSlidesFilterItemPreviewFooterTextBox} from \"./footer-text/video-slides-filter-item-preview-footer-text.box\";\nimport {VideoSlidesFilterItemPreviewBox} from \"./container/video-slides-filter-item-preview.box\";\nimport {IGameFilterDefinition} from \"../../../../services/games-filter/filters-definitions/game-filter-definition.interface\";\nimport {VideoSlidesFilterItemPreviewPlayerBox} from \"./player/video-slides-filter-item-preview-player.box\";\n\ninterface VideoSlidesFilterItemPreviewProps {\n filterId: string;\n filterCount: number;\n}\n\nexport const VideoSlidesFilterItemPreviewComponent: React.FC<VideoSlidesFilterItemPreviewProps> = observer((props) => {\n const services = useServices();\n const filtersMap: Record<string, IGameFilterDefinition> = services.gamesFilter.getFiltersDefinitions([props.filterId]);\n\n const gameType: Nullable<GameInfo> = services.videoSlides.firstGameForFilter(props.filterId);\n\n const _onClick = () => {\n services.analytics.sendOrbitUserFlowEvent('navigation', 'videoSlidesOpenFromList', props.filterId);\n services.videoSlides.navigateToFilter(props.filterId);\n }\n\n if (!gameType) {\n return null;\n }\n\n return (\n <VideoSlidesFilterItemPreviewBox\n filterCount={props.filterCount}\n onClick={_onClick} >\n {/* For the video element I cannot conditionally render it for this.props.isInCenterStage because when the video reaches end and the user\n swipes right/left it renders again and starts again */}\n <VideoSlidesFilterItemPreviewPlayerBox\n gameInfo={gameType}\n muted={true}\n onError={() => {}} //TODO we will have a task for videoPlayer\n onLoading={() => {}}\n onWatchTimeLimitReached={() => {}}\n isInCenterStage={true}\n inViewport={true}\n display={true}\n videoPlayingService={services.videoOnDemandPlaying}\n loop={true}\n />\n <VideoSlidesFilterItemPreviewFooterBox>\n <VideoSlidesFilterItemPreviewFooterTextBox>\n {filtersMap[props.filterId]?.text ?? props.filterId}\n </VideoSlidesFilterItemPreviewFooterTextBox>\n </VideoSlidesFilterItemPreviewFooterBox>\n </VideoSlidesFilterItemPreviewBox>\n )\n\n})","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterListPreviewBox = styledBox(\"VideoSlidesFilterListPreviewBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterListPreviewHeaderBox = styledBox(\"VideoSlidesFilterListPreviewHeaderBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterListPreviewTitleBox = styledBox(\"VideoSlidesFilterListPreviewTitleBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesFilterListPreviewContentBox = styledBox(\"VideoSlidesFilterListPreviewContentBox\");","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {VideoSlidesFilterItemPreviewComponent} from \"./item/video-slides-filter-item-preview.component\"\nimport styled, {css} from \"styled-components\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {VideoSlidesFilterListPreviewBox} from \"./list/container/video-slides-filter-list-preview.box\";\nimport {VideoSlidesFilterListPreviewHeaderBox} from \"./list/header/video-slides-filter-list-preview-header.box\";\nimport {VideoSlidesFilterListPreviewTitleBox} from \"./list/title/video-slides-filter-list-preview-title.box\";\nimport {VideoSlidesFilterListPreviewContentBox} from \"./list/content/video-slides-filter-list-preview-content.box\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {ExploreButtonBox} from \"../../orbit-swiper/orbit-swiper-buttons/boxes/explore-button/explore-button.box\";\n\nexport const SwiperButtonBox = styled.div<{isTouchDevice?: boolean}>`\n ${({isTouchDevice}) => isTouchDevice ? css`\n display: none;\n ` : null}\n`;\n\n\ninterface VideoSlidesFilterPreviewProps {\n hasHeaderButton: boolean;\n height: string;\n filterIdList: string[];\n}\nexport const VideoSlidesFilterListPreviewComponent: React.FC<VideoSlidesFilterPreviewProps> = observer((props) => {\n const services = useServices();\n let ExploreOutlinedIcon = services.theme.currentTheme.icons.exploreOutlinedIcon;\n const btnOnClick = () => {\n services.analytics.sendOrbitUserFlowEvent('navigation', 'videoSlidesOpenSeeAllBtn');\n services.linksNavigation.navigateLink({linkId: 'videoSlideExploreLink'});\n }\n return (\n <VideoSlidesFilterListPreviewBox className={CyClass('cy-video-slides-filters-preview')}>\n <VideoSlidesFilterListPreviewHeaderBox>\n <ExploreOutlinedIcon size={2.2} style={{marginRight: \"10px\", color: services.theme.currentTheme.colors.brandPrimary}} dotColor={services.theme.currentTheme.colors.brandPrimary} />\n <VideoSlidesFilterListPreviewTitleBox>\n {services.translation.translate(\"VIDEO_SLIDES_FILTER_PREVIEW_TITLE\")}\n </VideoSlidesFilterListPreviewTitleBox>\n <SwiperButtonBox>\n <ExploreButtonBox\n className={CyClass('cy-video-slides-filters-explore-button')}\n preset=\"flatStroked\"\n sizeVariant=\"xs\"\n noRemUnits\n onClick={btnOnClick}>\n {services.translation.translate(\"EXPLORE\")}\n </ExploreButtonBox>\n </SwiperButtonBox>\n </VideoSlidesFilterListPreviewHeaderBox>\n <VideoSlidesFilterListPreviewContentBox>\n {props.filterIdList.map(filterId => (\n <VideoSlidesFilterItemPreviewComponent\n key={\"VideoSlidesFilter\" + filterId}\n filterId={filterId}\n filterCount={props.filterIdList.length} />)\n )}\n </VideoSlidesFilterListPreviewContentBox>\n </VideoSlidesFilterListPreviewBox>\n )\n});\n","\nimport {Check} from \"@sparkware/app-utils\";\nimport {Nullable} from \"../../../../../../common/types/nullable-types\";\nimport {VideoSlidesFilterListPreviewComponent} from \"../../../../../components/video-slides/filter-preview/video-slides-filter-list-preview.component\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport {VideoSlidesFilterConfig} from \"../../arenas/arena-base.model\";\n\nexport class VideoSlidesFilterPreviewModel {\n constructor(private readonly services: IServiceFactoryExtended, public readonly arenaName: string,\n private readonly _videoSlidesFilterConfig: Nullable<VideoSlidesFilterConfig>) {\n }\n\n private _shouldRenderVideoSlidesFilter(listPosition: number): boolean {\n if (!Check.isNullOrUndefined(this._videoSlidesFilterConfig) &&\n this.services.videoSlides.shouldBeDisplayed &&\n listPosition === this._videoSlidesFilterConfig.position) {\n return true;\n }\n\n return false;\n }\n\n render(listPosition: number): React.ReactElement {\n if (!this._shouldRenderVideoSlidesFilter(listPosition)) {return null}\n\n return (<VideoSlidesFilterListPreviewComponent filterIdList={this._videoSlidesFilterConfig.filterIds} hasHeaderButton={false} height=\"15\" />)\n }\n}","import {Nullable} from \"../../../../../common/types/nullable-types\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {BannerConfig, VideoSlidesFilterConfig} from \"../arenas/arena-base.model\";\nimport {PromotionalBannerModel} from \"./promotional-banner/promotional-banner.model\";\nimport {ISwiperExtraContentViewModel} from \"./swiper-extra-content-view-model.interface\";\nimport {VideoSlidesFilterPreviewModel} from \"./video-slides-filter-preview/video-slides-filter-preview.model\";\n\n\nexport class SwiperExtraContentModel implements ISwiperExtraContentViewModel {\n constructor(public readonly services: IServiceFactoryExtended,\n public readonly arenaName: string,\n readonly bannerConfig: BannerConfig | null,\n readonly videoSlidesFilterConfig: Nullable<VideoSlidesFilterConfig>) {\n this._promotionalBanner = new PromotionalBannerModel(this.services, this.arenaName, this.bannerConfig);\n this._videoSlidesFilter = new VideoSlidesFilterPreviewModel(this.services, this.arenaName, this.videoSlidesFilterConfig);\n\n }\n\n private _promotionalBanner: PromotionalBannerModel;\n private _videoSlidesFilter: VideoSlidesFilterPreviewModel;\n renderExtraContent(listPosition: number, numberOfListsInCurrentArena: number): React.ReactElement {\n return (\n <>\n {this._promotionalBanner.render(listPosition, numberOfListsInCurrentArena)}\n {this._videoSlidesFilter.render(listPosition)}\n </>\n )\n }\n\n}","import { ArenaFiltersConfigurationMap, IArenaViewModel } from \"./arena-view-model.interface\";\nimport {\n ArenaGamesGridConfiguration,\n SwiperGamesListConfiguration\n} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport { action, computed, observable, reaction, makeObservable } from \"mobx\";\nimport { IArenaToGamesListAdapter } from \"./arena-to-games-list-adapter.interface\";\nimport { IServiceFactoryExtended } from \"../../../service-factory-extended.interface\";\nimport { IGamesListModel } from \"../lists/games-list-model.interface\";\nimport React from \"react\";\nimport { ListFactory } from \"../lists/list-factory\";\nimport { Check } from \"@sparkware/app-utils\";\nimport { ListsSortOrderStorage } from \"../lists-sort-order-storage\";\nimport { IGamesListRenderer } from \"../lists/games-list-renderer.interface\";\nimport { BannerComponent } from \"../../../../components/banner/banner.component\";\nimport { GameInfo } from \"../../../games/game-info\";\nimport { IGamesFilterStrategy } from \"../../../games-filter/strategies/games-filter-strategy.interface\";\nimport {Nullable, NullableString} from \"../../../../../common/types/nullable-types\";\nimport {SwiperExtraContentModel} from \"../swiper-extra-content/swiper-extra-content.model\";\n\n\nexport type BannerConfig = { position: number; templateID: string; componentID: string; fallbackUrl?: NullableString, bannerAdminPlaceholderId: string };\nexport type VideoSlidesFilterConfig = { position: number; filterIds: string[] }\nexport abstract class ArenaBaseModel implements IArenaToGamesListAdapter, IArenaViewModel {\n constructor(public readonly arenaName: string,\n public readonly services: IServiceFactoryExtended,\n private readonly _postLoginListsSortOrderStorage: ListsSortOrderStorage) {\n makeObservable(this);\n\n this._listFactory = new ListFactory(this);\n this._swiperExtraContentHandler = new SwiperExtraContentModel(this.services,\n this.arenaName,\n this._getPromotionalBannerConfig(),\n this._getVideoSlidesFilterConfig())\n\n reaction(() => [this.services.user.isAuthorized, this.services.routing.currentRoute],\n async () => {\n await this._updateAIEngineSwipersSortOrder();\n }, {\n fireImmediately: true\n });\n }\n\n private _swiperExtraContentHandler: SwiperExtraContentModel;\n private _listFactory: ListFactory;\n abstract get maxSwipersToShow(): number;\n abstract get maxGamesToShowInList(): number;\n protected abstract _getSwipersConfigurations(): SwiperGamesListConfiguration[];\n protected abstract _getGridsConfigurations(): ArenaGamesGridConfiguration[];\n protected abstract _getPromotionalBannerConfig(): BannerConfig | null;\n protected abstract _getVideoSlidesFilterConfig(): Nullable<VideoSlidesFilterConfig>;\n abstract renderArena(): React.ReactElement | null;\n abstract filterGamesByArenaType(gameInfos: GameInfo[]): GameInfo[];\n abstract get filtersConfigurationMap(): ArenaFiltersConfigurationMap;\n abstract getGamesFilteringStrategy(): IGamesFilterStrategy;\n\n protected _getBannerMinHeightInPixels(listPosition: number, bannerConfig: BannerConfig | null) {\n if (!bannerConfig) {\n return 0;\n }\n\n const shouldRenderBanner = listPosition === bannerConfig.position\n || (this.allLists.length < bannerConfig.position && listPosition === this.allLists.length);\n if (!shouldRenderBanner) {\n return 0;\n }\n\n if (this.services.mediaQuery.sAndBelow) {\n return 142;\n }\n\n return 223;\n }\n protected _renderPromotionalBanner(listPosition: number): React.ReactElement | null {\n const bannerConfig = this._getPromotionalBannerConfig();\n const bannerMinHeight = this._getBannerMinHeightInPixels(listPosition, bannerConfig);\n if (bannerMinHeight === 0) {\n return null;\n }\n\n return (\n <BannerComponent\n key={`${this.arenaName}_ARENA_PROMOTIONAL_BANNER_${listPosition}`}\n showPlaceholder={false}\n templateID={bannerConfig.templateID}\n componentID={bannerConfig.componentID}\n fallbackUrl={bannerConfig.fallbackUrl}\n minHeight={bannerMinHeight + 'px'}\n bannerAdminPlaceholderId={bannerConfig.bannerAdminPlaceholderId}\n />\n );\n }\n\n protected get useAdvancedFilters(): boolean {\n return this.services.configuration.servicesConfigs.Filters.useAdvancedFilters;\n }\n\n protected get _isUsingExternalAIForSwipersSorting(): boolean {\n return false;\n }\n\n protected _getSwiperIdToPutOnTop(): number[] | null {\n return null;\n }\n\n get aiEngine(): string {\n return \"\";\n }\n\n get sortingGametypesMapOverride(): Record<number, number> | null {\n return null;\n }\n\n @observable.ref\n private _aiEngineListsSortOrder: Record<number, number> = null;\n\n @action.bound\n private _setAiEngineListsSortOrder(value: Record<number, number>): void {\n this._aiEngineListsSortOrder = value;\n }\n private async _updateAIEngineSwipersSortOrder(): Promise<void> {\n if (this._isUsingExternalAIForSwipersSorting) {\n return;\n }\n if (this._aiEngineListsSortOrder) {\n return;\n }\n\n if (!this.services.user.isAuthorized) {\n return;\n }\n\n if (this.services.routing.currentRoute.data?.arenaType === this.arenaName) {\n const listsIDs = this._getSwipersConfigurations().filter(sw => !Check.isNullOrUndefined(sw.listId))\n .map(sw => sw.listId.toString());\n if (listsIDs.length === 0) {\n return;\n }\n\n this._setAiEngineListsSortOrder(await this.services.aiEngine.getCasinoRecommendedDynamicListsForPlayer(listsIDs));\n }\n }\n\n private _movePreferredSwiperOnTop(swipers: IGamesListModel[]) {\n const listsIdsToPutOnTop = this._getSwiperIdToPutOnTop();\n\n if (Check.isNullOrUndefined(listsIdsToPutOnTop)) {\n return swipers;\n }\n\n // Reverse lists order, otherwise it will put last wanted on top list at first position\n listsIdsToPutOnTop.reverse();\n\n listsIdsToPutOnTop.forEach(id => {\n if (!Check.isNumber(id)) return;\n\n const listIndex = swipers.findIndex((list) => list.listId === id);\n\n if (listIndex > 0) {\n swipers.splice(0, 0, swipers.splice(listIndex, 1)[0]);\n }\n });\n\n return swipers;\n }\n\n\n protected _sortSwipersByAI(originalSwipers: IGamesListModel[]): IGamesListModel[] {\n const scores = this._aiEngineListsSortOrder;\n if (!scores) {\n return originalSwipers;\n }\n\n const notForcedInLayoutSortedSwipers = originalSwipers.filter(s => !s.forceInLayout)\n .sort((s1, s2) => (scores[s2.listId] || 0) - (scores[s1.listId] || 0));\n\n let sortedSwipersConfigs: IGamesListModel[] = [];\n originalSwipers.forEach(gameList => {\n if (gameList.forceInLayout) {\n sortedSwipersConfigs.push(gameList)\n } else {\n let mappedGameList = notForcedInLayoutSortedSwipers.shift();\n if (mappedGameList) {\n sortedSwipersConfigs.push(mappedGameList)\n }\n }\n });\n\n return sortedSwipersConfigs;\n }\n\n\n\n @computed\n public get allLists(): IGamesListModel[] {\n const result = this._createAllLists();\n this._sendGameListsAnalytics(result);\n return result;\n }\n\n @computed\n get allArenaGamesForFiltering(): GameInfo[] {\n let gameTypes: number[] = [];\n this._getGridsConfigurations().forEach(g => {\n gameTypes = [\n ...gameTypes,\n ...g.gamesId\n ]\n });\n\n //use Set here to make a list of distinct game types\n return [...new Set(gameTypes)].map(gameType => this.services.games.gamesMap[gameType]).filter(gameInfo => gameInfo);\n }\n\n\n get filteredGamesCount(): number {\n let gameTypes: number[] = [];\n\n for (let list of this.allLists) {\n gameTypes = [\n ...gameTypes,\n ...list.gameTypes\n ]\n }\n\n return [...new Set(gameTypes)].length;\n }\n\n get listsCount(): number {\n return this.allLists.length;\n }\n\n protected _createAllLists(): IGamesListModel[] {\n return this._appendGrids(\n this._limitTheNumberOfSwipers(\n this._saveSwipersPostLoginSortOrder(\n this._sortSwipersByPostLoginOrder(\n this._movePreferredSwiperOnTop(\n this._sortSwipersByAI(\n this._createSwipers()))))));\n }\n\n private _limitTheNumberOfSwipers(swipers: IGamesListModel[]): IGamesListModel[] {\n\n if (swipers.length <= this.maxSwipersToShow) {\n return swipers;\n }\n let result: IGamesListModel[] = [];\n\n let maxNumberOfSwipers = this.maxSwipersToShow;\n for (let i = 0; i < swipers.length; i++) {\n const list = swipers[i];\n if (maxNumberOfSwipers > 0 || list.forceInLayout) {\n result.push(list);\n }\n\n if (list.isVisible) {\n maxNumberOfSwipers--;\n }\n\n }\n\n return result;\n }\n\n renderList(listPosition: number): React.ReactElement | null {\n let position = listPosition;\n\n for (let list of this.allLists) {\n if (list.isVisible) {\n position--;\n }\n if (position === 0) {\n return this._renderListAndBanner(listPosition, list);\n }\n }\n\n return null;\n }\n\n protected _renderListAndBanner(listPosition: number, list: IGamesListRenderer) {\n return (\n <React.Fragment key={list.listKey}>\n {list.render(listPosition)}\n {this._swiperExtraContentHandler.renderExtraContent(listPosition, this.allLists.length)}\n </React.Fragment>\n )\n }\n\n getNextBatchSize(currentListPosition: number): number {\n if (currentListPosition > this.allLists.length) {\n return 0;\n }\n\n return 2;\n }\n\n protected _saveSwipersPostLoginSortOrder(swipers: IGamesListModel[]): IGamesListModel[] {\n if (this.services.user.isAuthorized) {\n this._postLoginListsSortOrderStorage.saveSortOrder(this.arenaName, swipers);\n }\n return swipers;\n }\n\n protected _sortSwipersByPostLoginOrder(swipers: IGamesListModel[]): IGamesListModel[] {\n if (this.services.user.isAuthorized) {\n return swipers;\n }\n\n return this._postLoginListsSortOrderStorage.sortLists(this.arenaName, swipers);\n }\n\n protected _createSwipers(): IGamesListModel[] {\n const configs = this._getSwipersConfigurations();\n const lists: IGamesListModel[] = [];\n\n configs.forEach((listConfig) => {\n lists.push(this._createSwiper(listConfig));\n });\n\n return lists;\n }\n\n protected _appendGrids(lists: IGamesListModel[]) {\n this._getGridsConfigurations().forEach(gridConfig => {\n lists.push(this._createGrid(gridConfig));\n });\n return lists;\n }\n\n protected _createGrid(gridConfig: ArenaGamesGridConfiguration) {\n return this._listFactory.createGrid(gridConfig);\n }\n\n protected _createSwiper(swiperConfig: SwiperGamesListConfiguration): IGamesListModel {\n return this._listFactory.createSwiper(swiperConfig);\n }\n\n protected _sendGameListsAnalytics(lists: IGamesListModel[]): IGamesListModel[] {\n if (!this.services.user.isAuthorized) {\n return lists;\n }\n\n if (!this._isUsingExternalAIForSwipersSorting) {\n return lists;\n }\n\n const analyticsObject = {\n category: 'AI_ListsDisplayed',\n action: lists.map(list => list.title).join(','),\n label: \"ML888\"\n };\n\n this.services.analytics.sendAnalytics(analyticsObject.category, analyticsObject.action, analyticsObject.label);\n\n return lists;\n }\n}","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../themes/architecture/styled-by-device\";\n\nconst MobileBox = styled.div<{isBottomNavbarEnabled: boolean}>`\n position: fixed;\n z-index:15;\n bottom: ${props => props.isBottomNavbarEnabled? 'calc(env(safe-area-inset-bottom) + 64px)' : '34px'};\n\n right: 3px;\n \n cursor: pointer;\n \n display: grid;\n grid-template-rows: 45px 30px;\n justify-items: center; \n`;\n\nconst PcBox = styled(MobileBox)`\n transform: scale(1.2);\n right: 20px;\n`;\n\nexport const DailyDealContainerBox = styledByDevice(PcBox, MobileBox);\n","import styled, {keyframes} from \"styled-components\";\n\n\nconst glowRotateAnimation = keyframes`\n 0% {\n transform: rotate(0deg);\n }\n 20%, 25% {\n transform: rotate(90deg);\n } \n 45%, 50% {\n transform: rotate(180deg);\n } \n 70%, 75% {\n transform: rotate(270deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n `;\n\nexport const DailyDealChestGlowBox = styled.div`\n\n background: url(${({theme}) => theme.assets.images.daily_deal.daily_deal_chest_glow_png.toString()}) center no-repeat;\n position: relative;\n bottom: 25px;\n \n grid-column: 1;\n grid-row: 1;\n \n height: 106px;\n width: 106px; \n z-index: -1;\n \n transform: rotate(30deg);\n animation: ${glowRotateAnimation} 4s infinite;\n`;\n","import styled, {keyframes} from \"styled-components\";\n\nconst chestScaleAnimation = keyframes`\n 0% { \n transform: scale(1);\n }\n 40%, 50% { \n transform: scale(1.2);\n }\n 100% { \n transform: scale(1);\n }\n `;\n\n\nexport const DailyDealChestBox = styled.img` \n \n grid-column: 1;\n grid-row: 1;\n \n position: relative;\n height: 50px;\n \n animation: ${chestScaleAnimation} 2s infinite;\n`;\n","import styled from \"styled-components\";\n\nexport const DailyDealTextStripBox = styled.span`\n background: url(${({theme}) => theme.assets.images.daily_deal.daily_deal_chest_text_strip_svg.toString()}) center no-repeat;\n background-size: cover;\n \n display: block;\n \n width: 120px;\n height: 30px;\n \n color: ${({theme}) => theme.colors.textLight};\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n \n padding: 2.5px 10px 0;\n text-align: center;\n font-size: 13px;\n line-height: 19px; \n}\n`;\n","import styled from \"styled-components\";\n\nexport const DailyDealChestHaloBox = styled.div`\n\n background: url(${({theme}) => theme.assets.images.daily_deal.daily_deal_chest_halo_png.toString()}) center no-repeat;\n position: relative;\n bottom: 15px;\n \n grid-column: 1;\n grid-row: 1;\n \n height: 90px;\n width: 83px; \n z-index: -1;\n`;\n","import React from 'react';\nimport { observer } from 'mobx-react';\nimport {DailyDealContainerBox} from \"./boxes/daily-deal-container.box\";\nimport {DailyDealChestGlowBox} from \"./boxes/daily-deal-chest-glow.box\";\nimport {DailyDealChestBox} from \"./boxes/daily-deal-chest.box\";\nimport {DailyDealTextStripBox} from \"./boxes/daily-deal-text-strip.box\";\nimport {DailyDealChestHaloBox} from \"./boxes/daily-deal-chest-halo.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface DailyDealComponentProps extends ComponentServicesPick<'dailyDeal' | 'bottomNavigationBar'> {\n \n}\n\nconst ComponentBody: React.FC<DailyDealComponentProps> = observer((props) => {\n const services = useServices();\n const _onDailyDealClick = async () => {\n services.analytics.sendAnalytics('Daily_Deal', 'Click', services.arenas.getCurrentArena().arenaName);\n props.dailyDeal.visitDailyDeal();\n }\n\n if (!props.dailyDeal.dailyDealCampaignId) {\n return null;\n }\n\n return (\n <DailyDealContainerBox isBottomNavbarEnabled={props.bottomNavigationBar.isBottomNavigationEnabled}\n onClick={_onDailyDealClick}\n className={CyClass('cy-daily-deal-box')}>\n <DailyDealChestGlowBox />\n <DailyDealChestHaloBox />\n <DailyDealTextStripBox> {services.translation.translate(\"DAILY_DEAL_WIDGET_STRIP\") } </DailyDealTextStripBox>\n <DailyDealChestBox src={services.theme.currentTheme.assets.images.daily_deal.daily_deal_chest_png.toString()} alt=\"DailyDeal Chest!\"/>\n </DailyDealContainerBox>\n );\n \n})\nexport const DailyDealComponent = withServices(ComponentBody, ['dailyDeal', 'bottomNavigationBar']);","import {styledBox} from \"../../themes/architecture/styled-box\";\n\nexport const LayoutWrapperBox = styledBox('LayoutWrapperBox');\n","import { styledBox } from \"../../../themes/architecture/styled-box\";\n\n\nexport const HomePageHeaderArenasBox = styledBox('HomePageHeaderArenasBox')","import React from 'react';\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {HomePageHeaderArenasBox} from './boxes/home-page-header-arenas-container.box';\n\nexport const HomePageHeaderArenasComponent = observer(class HomePageHeaderArenasComponent extends OrbitComponent {\n\n render() {\n const headerArenas = this.services.homepage.getHeaderArenasMenuItems();\n\n if (headerArenas.length === 0) {\n return null;\n }\n return (\n <HomePageHeaderArenasBox className={CyClass('cy-homepage-header-arenas-container')} headerArenasStyle={this.services.homepage.headerArenasStyle}>\n {headerArenas.map((menuItemRenderer, index) => menuItemRenderer.renderMenuItem({itemIndex: index, totalItemsCount: headerArenas.length}))}\n </HomePageHeaderArenasBox>\n );\n }\n});\n","import styled, {css} from \"styled-components\";\nimport { IBannerContainerBoxProps } from \"../../cms-banner/banner-container/banner-container.default.box\";\n\nexport const HomepageTopBannerBackgroundBox = styled.div<IBannerContainerBoxProps>`\n width: 100%;\n position: absolute;\n background-image: url(\"${props => props.theme.assets.images.top_banner_placeholder_gif.toString()}\");\n ${props => props.minHeight && css`\n min-height: calc(${props.minHeight} + 1px);\n `};\n`;\n","import styled from \"styled-components\";\n\nexport const HomepageTopBannerDividerBox = styled.div`\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n box-sizing: border-box;\n display: block;\n width: calc(100% - 14px);\n background-color: ${props => props.theme.colors.boxBorderLight};\n border-top: 3px solid ${props => props.theme.colors.boxBorder};\n margin: 4px 7px 7px;\n }\n`;\n","import styled, { css } from \"styled-components\";\nimport { CssRule } from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const LinkToOfferBoxBase = styled.div<{shouldAnimate: boolean, hasCircle: boolean, isHybridEmbedded: boolean, isBottomNavBarEnabled?: boolean}>`\n background-size: contain;\n height: 50px;\n width: 50px;\n position: fixed;\n bottom: ${props => props.isHybridEmbedded || props.isBottomNavBarEnabled? 'calc(env(safe-area-inset-bottom) + 75px)' : '50px'};\n right: 55px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 3;\n ${CssRule.For.mobile.build()} & {\n right: 40px;\n }\n ${props => props.hasCircle? css`\n background-repeat: no-repeat;\n background-color: ${props => props.theme.colors.brandPrimary};\n border-radius: 50%;\n ` : '' }\n`;","import styled, {css, keyframes, DefaultTheme} from \"styled-components\";\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\nimport {LinkToOfferBoxBase} from \"../link-to-offer-base/link-to-offer-box-base\";\n\n\nconst linkToOfferIconKeyframes = (props: {theme: DefaultTheme}) => keyframes`\n 0% {\n transform: scale(0.9);\n box-shadow: 0 0 0 0 ${hexToRgba(props.theme.colors.brandPrimary, 0.5)};\n }\n 60% {\n transform: scale(1);\n }\n 80% {\n transform: scale(1);\n box-shadow: 0 0 0 35px ${hexToRgba(props.theme.colors.brandPrimary, 0)};\n }\n 100% {\n transform: scale(0.9);\n box-shadow: 0 0 0 0 ${hexToRgba(props.theme.colors.brandPrimary, 0)};\n }\n`;\n\nexport const LinkToOfferIconDefaultBox = styled(LinkToOfferBoxBase)`\n color: ${({theme}) => theme.colors.textDark};\n ${props => props.shouldAnimate ? css`animation: ${linkToOfferIconKeyframes} 1.2s infinite` : ''};\n`;\n","import {LinkToOfferIconDefaultBox} from \"./link-to-offer-icon.default.box\";\n\nexport const LinkToOfferIconBox = LinkToOfferIconDefaultBox;\n","import styled from \"styled-components\";\nimport {LinkToOfferBoxBase} from \"../link-to-offer-base/link-to-offer-box-base\";\n\nexport const LinkToOfferDialogCloseDefaultBox = styled(LinkToOfferBoxBase)<{zIndex?: number}>`\n color: ${({theme}) => theme.colors.textDark};\n z-index: ${props => props.zIndex ?? 201};\n`;\n","import {LinkToOfferDialogCloseDefaultBox} from \"./link-to-offer-dialog-close.default.box\";\n\nexport const LinkToOfferDialogCloseBox = LinkToOfferDialogCloseDefaultBox;\n","import React from 'react';\nimport { OrbitComponent } from '../base-components/orbit-component/orbit-component';\nimport {observer} from \"mobx-react\";\nimport {LinkToOfferIconBox} from \"./boxes/link-to-offer-icon/link-to-offer-icon.box\";\nimport {LinkToOfferDialogCloseBox} from \"./boxes/link-to-offer-dialog-close/link-to-offer-dialog-close.box\";\nimport {LinkToOfferConfiguration} from \"../../services/configurations/config-data-sections/link-to-offer.configuration\";\nimport {IOffer, IShowOfferOptions} from '../../services/player-offerings/player-offerings.service.interface';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\nexport interface LinkToOfferComponentProps extends ComponentServicesPick<'bottomNavigationBar'> {\n linkToOfferConfig: LinkToOfferConfiguration;\n}\n\n\nconst ComponentBody = observer(\n class LinkToOfferComponent extends OrbitComponent<LinkToOfferComponentProps> {\n\n componentDidMount() {\n super.componentDidMount();\n this.services.playerOfferings.setWelcomeOfferConfig(this.props.linkToOfferConfig?.welcomeBonus ?? null);\n }\n\n render() {\n if (this.services.playerOfferings.hasOpenedPopup) {\n let CloseIconComponent = this.services.theme.currentTheme.icons.linkToOfferCloseIcon;\n\n return (\n <LinkToOfferDialogCloseBox className={'cy-link-to-offer-dialog-close-box'}\n onClick={() => {this._onCloseDialog()}}\n shouldAnimate={false}\n hasCircle={true}\n zIndex={this.services.playerOfferings.isHighPriorityOffer ? this.services.dialog.getMaxCGPOverlayZIndex() + 2: null}\n isHybridEmbedded={this.services.device.hybrid.isEmbedded}\n >\n <CloseIconComponent size={2} sizeIsHeight />\n </LinkToOfferDialogCloseBox>\n );\n }\n\n const currentOffer = this.services.playerOfferings.currentLinkToOffer;\n if(!currentOffer) {\n return null;\n }\n\n return (\n <LinkToOfferIconBox className={'cy-link-to-offer-icon-box'}\n onClick={() => {this._onLinkToOfferClicked(currentOffer)}}\n shouldAnimate={currentOffer.shouldUseLinkToOfferAnimation()}\n hasCircle={currentOffer.shouldUseLinkToOfferAnimation()}\n isHybridEmbedded={this.services.device.hybrid.isEmbedded}\n isBottomNavBarEnabled={this.props.bottomNavigationBar.isBottomNavigationEnabled}\n >\n { currentOffer.render() }\n </LinkToOfferIconBox>\n );\n }\n\n\n private _onLinkToOfferClicked(offer: IOffer): void {\n\n this.services.analytics.sendOrbitMarketingEvent(offer.analyticsCategory, 'Open_Floating_Button', this.services.routing.currentRoute.data.arenaType);\n\n const options: IShowOfferOptions = {\n onPopupClosed: () => {\n this.services.analytics.sendOrbitMarketingEvent(offer.analyticsCategory, 'Close_Floating_Button', this.services.routing.currentRoute.data.arenaType);\n }\n };\n this.services.playerOfferings.showOfferPopup(offer, options);\n }\n\n private _onCloseDialog = () => {\n if (this.services.playerOfferings.hasOpenedPopup) {\n this.services.playerOfferings.closeCurrentPopup();\n }\n };\n }\n);\n\nexport const LinkToOfferComponent = withServices(ComponentBody, ['bottomNavigationBar']);\n\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {CmsBannerComponent} from '../cms-banner/cms-banner.component';\nimport {DailyDealComponent} from \"../daily-deal/daily-deal.component\";\nimport {RoutedComponent} from '../base-components/routed-component/routed.component';\nimport {LayoutWrapperBox} from \"../../basic-components/layout-wrapper/layout-wrapper.box\";\nimport {MOVE_TOP} from \"../../themes/css-global-classes\";\nimport classNames from \"classnames\";\nimport {HomePageHeaderArenasComponent} from \"../home-page-header-arenas/home-page-header-arenas.component\";\nimport {HomepageTopBannerBackgroundBox} from \"./boxes/home-page-top-banner-background.box\";\nimport {HomepageTopBannerDividerBox} from './boxes/home-page-top-banner-divider-line';\nimport {CyClass} from '../../../common/cy-classes';\nimport {LinkToOfferComponent} from \"../link-to-offer/link-to-offer.component\";\nimport {ArenaGamesListsComponent} from \"../arena-games-lists/arena-games-lists.component\";\nimport {HOME_PAGE_ARENA} from \"../../services/arenas/arena-consts\";\nimport {FreeToPlayAnimatedIconComponent} from \"../free-to-play-animated-icon/free-to-play-animated-icon.component\";\nimport {BannerComponent} from \"../banner/banner.component\";\n\nexport const HomePageComponent = observer(class HomePageComponent extends RoutedComponent<{}> {\n\n private _renderTopBanner() {\n const topBannerProps = this.services.homepage.getTopBannerProps();\n\n return (\n <>\n <HomepageTopBannerBackgroundBox key=\"HOME_PAGE_TOP_BANNER_BACKGROUND\" minHeight={topBannerProps.minHeight} className={CyClass('cy-homepage-top-banner-background')}/>\n <BannerComponent key={'HOME_PAGE_TOP_BANNER'} {...topBannerProps}/>\n {this.services.homepage.headerArenasStyleIsSmallTiles && !this.services.homepage.useAdminBanner? <HomepageTopBannerDividerBox key=\"HOME_PAGE_TOP_BANNER_DIVIDER\" className={CyClass('cy-homepage-top-banner-divider')}/> : null}\n </>\n );\n }\n\n private _renderHomePageArenaHeaders() {\n if(this.services.device.hybrid.isEmbedded) {\n return null;\n }\n\n return <HomePageHeaderArenasComponent key={'HOME_PAGE_ARENAS_HEADERS'} />;\n }\n\n private _renderSeoBanner() {\n if(this.services.device.hybrid.isEmbedded) {\n return null;\n }\n let bannerConfig = this.services.configuration.data.homePage.seoSection;\n if(!bannerConfig.display) {\n return null;\n }\n return (\n <CmsBannerComponent key={'HOME_PAGE_SEO_BANNER'}\n className={'seo-section'}\n showPlaceholder={false}\n componentID={bannerConfig.componentID}\n templateID={bannerConfig.templateID}/>\n );\n }\n\n private _renderLinkToOffer() {\n return (\n <>\n <LinkToOfferComponent key=\"HOME_PAGE_LINK_TO_OFFER\"\n linkToOfferConfig={this.services.configuration.data.homePage.linkToOffer}/>\n <FreeToPlayAnimatedIconComponent/>\n </>\n );\n }\n\n render() {\n const className = classNames('cy-layout-wrapper-homepage', {\n [MOVE_TOP]: this.services.homepage.headerArenasStyleIsBigTiles\n });\n\n return (\n <>\n {this._renderTopBanner()}\n <LayoutWrapperBox className={className} key=\"HOME_PAGE_LAYOUT_WRAPPER\">\n {this._renderHomePageArenaHeaders()}\n <ArenaGamesListsComponent key={\"HOME_PAGE_LISTS\"} arenaName={HOME_PAGE_ARENA}/>\n <DailyDealComponent />\n </LayoutWrapperBox>\n {this._renderSeoBanner()}\n {this._renderLinkToOffer()}\n </>\n );\n }\n});","\nexport interface IUserGameOrientationService {\n readonly gameGroup: IUserGameOrientation;\n}\n\nexport enum GAME_ORIENTATION_IDS{\n SLOTS = 5003,\n BLACKJACK = 5001,\n ROULETTE = 5002,\n LIVE_BLACKJACK = 5009,\n LIVE_ROULETTE = 5010,\n LIVE_CASINO = 6003,\n CASINO_SKILL = 6001,\n CASINO_SOFT = 6002,\n CASINO_MIXT = 8001\n}\n\nexport interface IUserGameOrientation{\n groupId?: number;\n groupName: string;\n}","import {GameInfo} from \"../../games/game-info\";\n\nexport enum ApplyGameFilterResult {\n IncludeGame,\n ExcludeGame,\n NotApplicable\n}\n\nexport interface IGameFilterEvaluator {\n applyFilter(gameInfo: GameInfo, selectedFiltersIDs?: string[]): ApplyGameFilterResult;\n}","import {ApplyGameFilterResult, IGameFilterEvaluator} from \"./game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../games/game-info\";\n\nclass OrGameFiltersEvaluator implements IGameFilterEvaluator {\n constructor(...evaluators: IGameFilterEvaluator[]) {\n this._evaluators = evaluators;\n }\n\n private readonly _evaluators: IGameFilterEvaluator[];\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n let result: ApplyGameFilterResult = ApplyGameFilterResult.NotApplicable;\n for(let evaluator of this._evaluators) {\n const r = evaluator.applyFilter(gameInfo);\n if(r === ApplyGameFilterResult.IncludeGame) {\n return r;\n } else if(r !== ApplyGameFilterResult.NotApplicable) {\n result = r;\n }\n }\n return result;\n }\n}\n\nexport function OR(...evaluators: IGameFilterEvaluator[]): OrGameFiltersEvaluator {\n return new OrGameFiltersEvaluator(...evaluators);\n}","import {ApplyGameFilterResult, IGameFilterEvaluator} from \"./game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../games/game-info\";\n\nexport class AndGameFiltersEvaluator implements IGameFilterEvaluator {\n constructor(...evaluators: IGameFilterEvaluator[]) {\n this._evaluators = evaluators;\n }\n\n private readonly _evaluators: IGameFilterEvaluator[];\n\n applyFilter(gameInfo: GameInfo, filterIDS?: string[]): ApplyGameFilterResult {\n let result = ApplyGameFilterResult.NotApplicable;\n for(let evaluator of this._evaluators) {\n const r = evaluator.applyFilter(gameInfo, filterIDS);\n if(r === ApplyGameFilterResult.ExcludeGame) {\n return r;\n } else if(r !== ApplyGameFilterResult.NotApplicable) {\n result = r;\n }\n }\n\n return result;\n }\n}\n\nexport function AND(...evaluators: IGameFilterEvaluator[]): IGameFilterEvaluator {\n return new AndGameFiltersEvaluator(...evaluators);\n}","import {CategoryDefinitionId, IFilterCategoryDefinition} from \"./filter-category-definition.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {ApplyGameFilterResult, IGameFilterEvaluator} from \"../evaluators/game-filter-evaluator.interface\";\nimport {OR} from \"../evaluators/or-game-filters-evaluator\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {AND} from \"../evaluators/and-game-filters-evaluator\";\n\nexport abstract class FilterCategoryDefinitionBase implements IFilterCategoryDefinition {\n constructor(protected readonly services: IServiceFactoryExtended) {\n this.availableFilters = this._loadAvailableFilters();\n }\n\n abstract get id(): CategoryDefinitionId;\n abstract get title(): string;\n protected abstract _loadAvailableFilters(): IGameFilterDefinition[];\n\n readonly availableFilters: IGameFilterDefinition[];\n\n get hasItsOwnFiltersOrder(): boolean {\n return false;\n }\n\n protected _getAppliedSubFiltersForFilter(filter: IGameFilterDefinition, appliedSubFilters: IGameFilterDefinition[]): IGameFilterDefinition[] {\n if (filter.subFilters.length === 0) {\n return [];\n }\n\n const result: IGameFilterDefinition[] = [];\n\n for (let appliedSubFilter of appliedSubFilters) {\n const subFilter = filter.subFilters.find(sf => sf.id === appliedSubFilter.id);\n if (subFilter) {\n result.push(subFilter);\n }\n }\n\n return result;\n\n }\n\n applyFilters(gameInfo: GameInfo, appliedFilters: IGameFilterDefinition[], appliedSubFilters: IGameFilterDefinition[]): ApplyGameFilterResult {\n\n const filterEvaluators: IGameFilterEvaluator[] = [];\n\n for (let filter of appliedFilters) {\n const appliedSubFiltersForCurrentFilter = this._getAppliedSubFiltersForFilter(filter, appliedSubFilters);\n if (appliedSubFiltersForCurrentFilter.length > 0) {\n filterEvaluators.push(AND(filter, OR(...appliedSubFiltersForCurrentFilter)));\n } else {\n filterEvaluators.push(filter)\n }\n }\n\n return OR(...filterEvaluators).applyFilter(gameInfo);\n }\n\n get isMultiSelect(): boolean {\n return true;\n }\n\n getFiltersForGame(gameInfo: GameInfo): string[] {\n const result: string[] = [];\n this.availableFilters.forEach(filter => {\n filter.getFiltersForGame(gameInfo).forEach(filterId => {\n result.push(filterId);\n })\n });\n\n return result;\n }\n}","import {IGameFilterDefinition} from \"./game-filter-definition.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../evaluators/game-filter-evaluator.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nexport abstract class GameFilterDefinitionBase implements IGameFilterDefinition {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n abstract get id(): string;\n abstract get text(): string;\n abstract applyFilter(gameInfo: GameInfo): ApplyGameFilterResult;\n get subFilters(): IGameFilterDefinition[] {\n return [];\n }\n\n getFiltersForGame(gameInfo: GameInfo): string[] {\n if (this.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame) {\n return [this.id];\n }\n else {\n return [];\n }\n }\n}","import {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\n\nexport class HighVolatilityFilterDefinition extends GameFilterDefinitionBase {\n get id(): string {\n return 'high-volatility';\n }\n\n get text(): string {\n return this.services.translation.translate('HIGH_VOLATILITY');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(gameInfo.hasHighVolatility) {\n return ApplyGameFilterResult.IncludeGame;\n }\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\n\nexport class LowVolatilityFilterDefinition extends GameFilterDefinitionBase {\n get id(): string {\n return 'low-volatility';\n }\n\n get text(): string {\n return this.services.translation.translate('LOW_VOLATILITY');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(gameInfo.hasLowVolatility) {\n return ApplyGameFilterResult.IncludeGame;\n }\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\n\nexport class MediumVolatilityFilterDefinition extends GameFilterDefinitionBase {\n get id(): string {\n return 'medium-volatility';\n }\n\n get text(): string {\n return this.services.translation.translate('MEDIUM_VOLATILITY');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if (gameInfo.hasMediumVolatility) {\n return ApplyGameFilterResult.IncludeGame;\n }\n \n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {HighVolatilityFilterDefinition} from \"../filters-definitions/volatility/high-volatility.filter-definition\";\nimport {LowVolatilityFilterDefinition} from \"../filters-definitions/volatility/low-volatility.filter-definition\";\nimport {MediumVolatilityFilterDefinition} from \"../filters-definitions/volatility/medium-volatility.filter-definition\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\n\nexport class VolatilityFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n\n public get hasItsOwnFiltersOrder() {\n return true;\n }\n\n get id(): CategoryDefinitionId {\n return 'volatility';\n }\n\n get title(): string{\n return this.services.translation.translate('VOLATILITY');\n }\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n return [\n new HighVolatilityFilterDefinition(this.services),\n new MediumVolatilityFilterDefinition(this.services),\n new LowVolatilityFilterDefinition(this.services)\n ];\n }\n\n get isMultiSelect(): boolean {\n return false;\n }\n\n}","import {GameFilterDefinitionBase} from \"./game-filter-definition-base\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../evaluators/game-filter-evaluator.interface\";\n\nexport abstract class GameFeatureFilterDefinitionBase extends GameFilterDefinitionBase {\n\n abstract get id(): string;\n abstract get text(): string;\n protected abstract _shouldIncludeGame(gameInfo: GameInfo): boolean;\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(this._shouldIncludeGame(gameInfo)) {\n return ApplyGameFilterResult.IncludeGame;\n }\n \n return ApplyGameFilterResult.ExcludeGame;\n }\n\n\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {Check} from \"@sparkware/app-utils\";\n\nexport class OneToTwentyFiveFilterDefinition extends GameFeatureFilterDefinitionBase {\n\n get id(): string {\n return \"one-to-twenty-five\";\n }\n\n get text(): string {\n return this.services.translation.translate('1-25_LINES');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return Check.isNumber(gameInfo.numberOfLines) && gameInfo.numberOfLines >= 1 && gameInfo.numberOfLines <= 24;\n }\n}","import {GameInfo} from \"../../../games/game-info\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\n\nexport class TwentyFivePlusFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"twenty-five-plus\";\n }\n\n get text(): string {\n return this.services.translation.translate('25_PLUS_LINES');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return Check.isNumber(gameInfo.numberOfLines) && gameInfo.numberOfLines >= 25;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class NewGameFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"new\";\n }\n\n get text(): string {\n return this.services.translation.translate('NEW');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.isNewGame;\n }\n\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class LowStakeFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"lowStakes\";\n }\n\n get text(): string {\n return this.services.translation.translate('LOW_STAKES');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasLowStakes;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HighStakeFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"highStakes\";\n }\n\n get text(): string {\n return this.services.translation.translate('HIGH_STAKES');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasHighStakes;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class BonusGameFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"bonus\";\n }\n\n get text(): string {\n return this.services.translation.translate('BONUS');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasBonusGames;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class FreeSpinsFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"freeSpins\";\n }\n\n get text(): string {\n return this.services.translation.translate('FREE_SPINS');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasFreeSpins;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasSideBetsFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"side-bets\";\n }\n\n get text(): string {\n return this.services.translation.translate('SIDE_BETS');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasSideBets;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class IsMultiHandFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"multi-hand\";\n }\n\n get text(): string {\n return this.services.translation.translate('MULTIHAND');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.isMultiHand;\n }\n}","import {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {\n OneToTwentyFiveFilterDefinition\n} from \"../filters-definitions/game-features/one-to-twenty-five.filter-definition\";\nimport {\n TwentyFivePlusFilterDefinition\n} from \"../filters-definitions/game-features/twenty-five-plus.filter-definition\";\nimport {NewGameFilterDefinition} from \"../filters-definitions/game-features/new-game.filter-definition\";\nimport {LowStakeFilterDefinition} from \"../filters-definitions/game-features/low-stake.filter-definition\";\nimport {HighStakeFilterDefinition} from \"../filters-definitions/game-features/high-stake.filter-definition\";\nimport {BonusGameFilterDefinition} from \"../filters-definitions/game-features/bonus-game.filter-definition\";\nimport {FreeSpinsFilterDefinition} from \"../filters-definitions/game-features/free-spins.filter-definition\";\nimport {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\nimport {HasSideBetsFilterDefinition} from \"../filters-definitions/game-features/has-side-bets.filter-definition\";\nimport {IsMultiHandFilterDefinition} from \"../filters-definitions/game-features/is-multi-hand.filter-definition\";\n\nexport class GameFeaturesFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n get title(): string {\n return this.services.translation.translate('GAME_FEATURES');\n }\n\n get id(): CategoryDefinitionId {\n return 'features';\n }\n\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n return [\n new OneToTwentyFiveFilterDefinition(this.services),\n new TwentyFivePlusFilterDefinition(this.services),\n new NewGameFilterDefinition(this.services),\n new LowStakeFilterDefinition(this.services),\n new HighStakeFilterDefinition(this.services),\n new BonusGameFilterDefinition(this.services),\n new FreeSpinsFilterDefinition(this.services),\n new HasSideBetsFilterDefinition(this.services),\n new IsMultiHandFilterDefinition(this.services),\n ];\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasDailyJackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-daily-jackpot\";\n }\n\n get text(): string {\n return this.services.translation.translate('THE_DAILY_JACKPOT');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasDailyJackpot;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasTwilightJackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-twilight-jackpot\";\n }\n\n get text(): string {\n return this.services.translation.translate('TWILIGHT_JACKPOT');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasTwilightJackpot;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasCaptain8JackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-captain8-jackpot\";\n }\n\n get text(): string {\n return 'Captain8 Jackpot';\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasCaptain8tJackpot;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasRedTigerJackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-red-tiger-jackpot\";\n }\n\n get text(): string {\n return 'Red Tiger Jackpot';\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasRedTigerJackpot;\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {IGameFilterDefinition} from \"../game-filter-definition.interface\";\nimport {HasDailyJackpotFilterDefinition} from \"./has-dailight-jackpot.filter-definition\";\nimport {HasTwilightJackpotFilterDefinition} from \"./has-twilight-jackpot.filter-definition\";\nimport {HasCaptain8JackpotFilterDefinition} from \"./has-captain8-jackpot.filter-definition\";\nimport {HasRedTigerJackpotFilterDefinition} from \"./has-red-tiger-jackpot.filter-definition\";\n\nexport class HasJackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-jackpot\";\n }\n\n get text(): string {\n return this.services.translation.translate('JACKPOT');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return gameInfo.hasJackpot;\n }\n\n get subFilters(): IGameFilterDefinition[] {\n return [\n new HasDailyJackpotFilterDefinition(this.services),\n new HasTwilightJackpotFilterDefinition(this.services),\n new HasCaptain8JackpotFilterDefinition(this.services),\n new HasRedTigerJackpotFilterDefinition(this.services)\n ]\n }\n}","import {GameFeatureFilterDefinitionBase} from \"../game-feature-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\n\nexport class HasNoJackpotFilterDefinition extends GameFeatureFilterDefinitionBase {\n get id(): string {\n return \"has-no-jackpot\";\n }\n\n get text(): string {\n return this.services.translation.translate('NO_JACKPOT');\n }\n\n protected _shouldIncludeGame(gameInfo: GameInfo): boolean {\n return !gameInfo.hasJackpot;\n }\n}","import {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {HasJackpotFilterDefinition} from \"../filters-definitions/jackpot/has-jackpot.filter-definition\";\nimport {HasNoJackpotFilterDefinition} from \"../filters-definitions/jackpot/has-no-jackpot.filter-definition\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\n\nexport class HasJackpotFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n\n get id(): CategoryDefinitionId {\n return 'hasJackpot';\n }\n\n get title(): string{\n return this.services.translation.translate('JACKPOTS');\n }\n\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n return [\n new HasJackpotFilterDefinition(this.services),\n new HasNoJackpotFilterDefinition(this.services)\n ];\n }\n\n get isMultiSelect(): boolean {\n return false;\n }\n}\n","import {IGameFilterDefinition} from '../game-filter-definition.interface';\nimport {GameInfo} from '../../../games/game-info';\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameVendorDefinition} from '../../../game-vendor/game-vendor-definition.ts/game-vendor-definition';\n\nexport class VendorFilterDefinition implements IGameFilterDefinition {\n constructor(public readonly id: string,\n public readonly vendors: GameVendorDefinition[],\n private readonly _text?: string) {\n\n }\n\n getFiltersForGame(gameInfo: GameInfo): string[] {\n if (this.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame) {\n return [this.id];\n }\n else {\n return [];\n }\n }\n\n get text(): string {\n if (this._text) {\n return this._text;\n }\n return this.vendors[0].name;\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if (this.vendors?.some(vendor => vendor?.id === gameInfo.vendorId)) {\n return ApplyGameFilterResult.IncludeGame;\n }\n return ApplyGameFilterResult.ExcludeGame;\n }\n\n readonly subFilters: IGameFilterDefinition[] = [];\n}\n","import {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {VendorFilterDefinition} from \"../filters-definitions/vendor/vendor.filter-definition\";\nimport {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {GameVendorId} from \"../../game-vendor/game-vendor-id.enum\";\n\nexport class GameVendorFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n\n get id(): CategoryDefinitionId {\n return 'vendors';\n }\n\n get title(): string {\n return this.services.translation.translate('GAME_STUDIOS');\n }\n\n get hasItsOwnFiltersOrder(): boolean {\n return !Check.isEmpty(this.services.configuration.data.generalSettings.filters?.advancedFilters?.preferredVendorFilters);\n }\n\n public getAllPreferredVendorsFilters(): VendorFilterDefinition[] {\n return [\n new VendorFilterDefinition(\"vendor_888\", [this.services.gamesVendor.getVendor(GameVendorId.V_888)], this.services.translation.translate(\"BRAND_EXCLUSIVE_FILTER\", {brandName: this.services.configuration.data.generalSettings.filters?.exclusiveFilterBrandName ?? \"888\"})),\n new VendorFilterDefinition(\"vendor_ags\", [this.services.gamesVendor.getVendor(GameVendorId.V_AGS)]),\n new VendorFilterDefinition(\"vendor_amatic\", [this.services.gamesVendor.getVendor(GameVendorId.V_Amatic)]),\n new VendorFilterDefinition(\"vendor_authentic\", [this.services.gamesVendor.getVendor(GameVendorId.V_Authentic)]),\n new VendorFilterDefinition(\"vendor_ainsworth\", [this.services.gamesVendor.getVendor(GameVendorId.V_Ainsworth)]),\n new VendorFilterDefinition(\"vendor_blueprint\", [this.services.gamesVendor.getVendor(GameVendorId.V_Blueprint)]),\n new VendorFilterDefinition(\"vendor_darwin\", [this.services.gamesVendor.getVendor(GameVendorId.V_Darwin)]),\n new VendorFilterDefinition(\"vendor_egt\", [this.services.gamesVendor.getVendor(GameVendorId.V_EGT)]),\n new VendorFilterDefinition(\"vendor_elk\", [this.services.gamesVendor.getVendor(GameVendorId.V_Elk)]),\n new VendorFilterDefinition(\"vendor_evolution\", [this.services.gamesVendor.getVendor(GameVendorId.V_Evolution)]),\n new VendorFilterDefinition(\"vendor_eyecon\", [this.services.gamesVendor.getVendor(GameVendorId.V_Eyecon)]),\n new VendorFilterDefinition(\"vendor_gamesglobal\", [this.services.gamesVendor.getVendor(GameVendorId.V_GamesGlobal)]),\n new VendorFilterDefinition(\"vendor_gamingrealms\", [this.services.gamesVendor.getVendor(GameVendorId.V_GamingRealms)]),\n new VendorFilterDefinition(\"vendor_gamomat\", [this.services.gamesVendor.getVendor(GameVendorId.V_Gamomat)]),\n new VendorFilterDefinition(\"vendor_greentube\", [this.services.gamesVendor.getVendor(GameVendorId.V_Greentube)]),\n new VendorFilterDefinition(\"vendor_h5\", [this.services.gamesVendor.getVendor(GameVendorId.V_H5)]),\n new VendorFilterDefinition(\"vendor_habanero\", [this.services.gamesVendor.getVendor(GameVendorId.V_Habanero)]),\n new VendorFilterDefinition(\"vendor_igt\", [this.services.gamesVendor.getVendor(GameVendorId.V_IGT)]),\n new VendorFilterDefinition(\"vendor_inspired\", [this.services.gamesVendor.getVendor(GameVendorId.V_Inspired)]),\n new VendorFilterDefinition(\"vendor_isoftbet\", [this.services.gamesVendor.getVendor(GameVendorId.V_iSoftBet)]),\n new VendorFilterDefinition(\"vendor_lightningbox\", [this.services.gamesVendor.getVendor(GameVendorId.V_LightningBox)]),\n new VendorFilterDefinition(\"vendor_lnw\", [this.services.gamesVendor.getVendor(GameVendorId.V_LNW), this.services.gamesVendor.getVendor(GameVendorId.V_LNW2)], \"LNW\"),\n new VendorFilterDefinition(\"vendor_merkur\", [this.services.gamesVendor.getVendor(GameVendorId.V_Merkur)]),\n new VendorFilterDefinition(\"vendor_mga\", [this.services.gamesVendor.getVendor(GameVendorId.V_MGA)]),\n new VendorFilterDefinition(\"vendor_netent\", [this.services.gamesVendor.getVendor(GameVendorId.V_NetEnt)]),\n new VendorFilterDefinition(\"vendor_nextgen_bigtime\", [this.services.gamesVendor.getVendor(GameVendorId.V_NextGenBigTime)], `Big Time`), //TODO ?\n new VendorFilterDefinition(\"vendor_nextgen_chanceinteractive\", [this.services.gamesVendor.getVendor(GameVendorId.V_NextGenChanceInteractive)], `Reel Play`),\n new VendorFilterDefinition(\"vendor_nolimitcity\", [this.services.gamesVendor.getVendor(GameVendorId.V_NoLimitCity)]),\n new VendorFilterDefinition(\"vendor_playngo\", [this.services.gamesVendor.getVendor(GameVendorId.V_PlayNGo)], `Play'n GO`),\n new VendorFilterDefinition(\"vendor_playtech\", [this.services.gamesVendor.getVendor(GameVendorId.V_PlayTech)], `Playtech`),\n new VendorFilterDefinition(\"vendor_pragmatic\", [this.services.gamesVendor.getVendor(GameVendorId.V_Pragmatic)]),\n new VendorFilterDefinition(\"vendor_quickspin\", [this.services.gamesVendor.getVendor(GameVendorId.V_Quickspin)]),\n new VendorFilterDefinition(\"vendor_redrake\", [this.services.gamesVendor.getVendor(GameVendorId.V_RedRake)]),\n new VendorFilterDefinition(\"vendor_redtiger\", [this.services.gamesVendor.getVendor(GameVendorId.V_RedTiger)]),\n new VendorFilterDefinition(\"vendor_rubyplay\", [this.services.gamesVendor.getVendor(GameVendorId.V_RubyPlay)]),\n new VendorFilterDefinition(\"vendor_sigma\", [this.services.gamesVendor.getVendor(GameVendorId.V_Sigma)]),\n new VendorFilterDefinition(\"vendor_skywind\", [this.services.gamesVendor.getVendor(GameVendorId.V_Skywind)]),\n new VendorFilterDefinition(\"vendor_spribe\", [this.services.gamesVendor.getVendor(GameVendorId.V_Spribe)]),\n new VendorFilterDefinition(\"vendor_thunderkick\", [this.services.gamesVendor.getVendor(GameVendorId.V_Thunderkick)]),\n new VendorFilterDefinition(\"vendor_wizard\", [this.services.gamesVendor.getVendor(GameVendorId.V_Wizard)]),\n new VendorFilterDefinition(\"vendor_wmg\", [this.services.gamesVendor.getVendor(GameVendorId.V_WMG)]),\n new VendorFilterDefinition(\"vendor_yggdrasil\", [this.services.gamesVendor.getVendor(GameVendorId.V_Yggdrasil)]),\n new VendorFilterDefinition(\"vendor_everi\", [this.services.gamesVendor.getVendor(GameVendorId.V_Everi)]),\n new VendorFilterDefinition(\"vendor_push_gaming\", [this.services.gamesVendor.getVendor(GameVendorId.V_PushGaming)], `Push Gaming`),\n new VendorFilterDefinition(\"vendor_edict\", [this.services.gamesVendor.getVendor(GameVendorId.V_Edict)], this.services.translation.translate(\"BRAND_EDICT_FILTER\", {brandName: \"Edict\"})),\n new VendorFilterDefinition(\"vendor_gamevy\", [this.services.gamesVendor.getVendor(GameVendorId.V_Gamevy)]),\n new VendorFilterDefinition(\"vendor_wazdan\", [this.services.gamesVendor.getVendor(GameVendorId.V_Wazdan)]),\n new VendorFilterDefinition(\"vendor_playson\", [this.services.gamesVendor.getVendor(GameVendorId.V_Playson)]),\n new VendorFilterDefinition(\"vendor_realistic\", [this.services.gamesVendor.getVendor(GameVendorId.V_Realistic)]),\n new VendorFilterDefinition(\"vendor_1x2\", [this.services.gamesVendor.getVendor(GameVendorId.V_1x2)]),\n new VendorFilterDefinition(\"vendor_spinomenal\", [this.services.gamesVendor.getVendor(GameVendorId.V_Spinomenal)]),\n new VendorFilterDefinition(\"vendor_hacksaw\", [this.services.gamesVendor.getVendor(GameVendorId.V_Hacksaw)]),\n new VendorFilterDefinition(\"vendor_stake_logic\", [this.services.gamesVendor.getVendor(GameVendorId.V_Stakelogic)]),\n new VendorFilterDefinition(\"vendor_net_gaming\", [this.services.gamesVendor.getVendor(GameVendorId.V_NetGaming)]),\n new VendorFilterDefinition(\"vendor_pg_soft\", [this.services.gamesVendor.getVendor(GameVendorId.V_PGSoft)]),\n new VendorFilterDefinition(\"vendor_booming\", [this.services.gamesVendor.getVendor(GameVendorId.V_Booming)]),\n new VendorFilterDefinition(\"vendor_live5\", [this.services.gamesVendor.getVendor(GameVendorId.V_Live5)]),\n new VendorFilterDefinition(\"vendor_reevo\", [this.services.gamesVendor.getVendor(GameVendorId.V_Reevo)])\n ];\n }\n\n private _getPreferredVendorFiltersForCurrentSkin(): VendorFilterDefinition[] {\n const preferredVendorsFiltersIds = this.services.configuration.data.generalSettings.filters?.advancedFilters?.preferredVendorFilters ?? [];\n if (preferredVendorsFiltersIds.length === 0) {\n return [...this.getAllPreferredVendorsFilters()];\n }\n\n const allPreferredVendorsFiltersMap = this.getAllPreferredVendorsFilters().toDictionary(f => f.id);\n const result: VendorFilterDefinition[] = [];\n for (let filterId of preferredVendorsFiltersIds) {\n const filter = allPreferredVendorsFiltersMap[filterId];\n if (filter) {\n result.push(filter)\n } else {\n this.services.logger.error(`There is no definition for game vendor filter with id ${filterId}`)\n }\n }\n\n return result;\n }\n\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n const filters = this._getPreferredVendorFiltersForCurrentSkin();\n let preferredVendorsIds: number[] = filters.selectMany(f => f.vendors?.map(vendor => vendor?.id));\n const otherVendorsIds: number[] = [];\n\n const allVendorsIds = Object.keys(this.services.sdk.getGamesVendors()).map(id => parseInt(id));\n for (let vendorId of allVendorsIds) {\n if (!preferredVendorsIds.includes(vendorId)) {\n otherVendorsIds.push(vendorId);\n }\n }\n\n if (otherVendorsIds.length > 0) {\n filters.push(new VendorFilterDefinition('vendor_others', otherVendorsIds.map(vendorId => this.services.gamesVendor.getVendor(vendorId)), this.services.translation.translate('OTHER')));\n }\n\n\n return filters;\n }\n\n}\n","import {GameFilterDefinitionBase} from \"./game-filter-definition-base\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../evaluators/game-filter-evaluator.interface\";\n\nexport abstract class GameGroupFilterDefinitionBase extends GameFilterDefinitionBase {\n protected abstract get gameGroupsIdsToFilterFor(): number[];\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(this.gameGroupsIdsToFilterFor.includes(gameInfo.gameGroupId)) {\n return ApplyGameFilterResult.IncludeGame;\n }\n\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class BaccaratFilterDefinition extends GameGroupFilterDefinitionBase {\n get id(): string {\n return \"baccarat\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.BACCARAT];\n }\n\n get text(): string {\n return this.services.translation.translate('BACCARAT');\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class BlackjackFilterDefinition extends GameGroupFilterDefinitionBase {\n\n get id(): string {\n return \"blackjack\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.BLACKJACK];\n }\n\n get text(): string {\n return this.services.translation.translate('BLACKJACK');\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class CrapsFilterDefinition extends GameGroupFilterDefinitionBase {\n get id(): string {\n return \"craps\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.CRAPS];\n }\n\n get text(): string {\n return this.services.translation.translate('CRAPS')\n }\n}\n","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class KenoFilterDefinition extends GameGroupFilterDefinitionBase {\n get id(): string {\n return \"keno\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.KENO];\n }\n\n get text(): string {\n return this.services.translation.translate('KENO');\n }\n}","import {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\n\nexport class LiveEliteLungeFilterDefinition extends GameFilterDefinitionBase {\n get id(): string {\n return \"live-elite-lounge\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_ELITE_LOUNGE');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(gameInfo.isEliteLounge) {\n return ApplyGameFilterResult.IncludeGame;\n }\n\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\n\nexport class LiveEliteLoungeOrExclusiveFilterDefinition extends GameFilterDefinitionBase {\n get id(): string {\n return \"live-elite-lounge-or-exclusive\";\n }\n\n get text(): string {\n return this.services.translation.translate('EXCLUSIVE');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(gameInfo.isEliteLounge || gameInfo.isExclusiveGame) {\n return ApplyGameFilterResult.IncludeGame;\n }\n\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport abstract class LiveGameFilterDefinitionBase extends GameFilterDefinitionBase {\n\n protected abstract get textToSearchInSubgroupName(): string;\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if (gameInfo.gameGroupId !== GAME_GROUP.LIVE_CASINO || !gameInfo.subGroupName) {\n return ApplyGameFilterResult.ExcludeGame;\n }\n\n const subgroupName = gameInfo.subGroupName.toLowerCase();\n if (subgroupName && subgroupName.indexOf(this.textToSearchInSubgroupName) !== -1) {\n return ApplyGameFilterResult.IncludeGame;\n }\n\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {LiveGameFilterDefinitionBase} from \"./live-game-filter-definition-base\";\n\nexport class LiveGameShowsFilterDefinition extends LiveGameFilterDefinitionBase {\n get id(): string {\n return \"live-game-shows\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_GAME_SHOWS');\n }\n\n protected get textToSearchInSubgroupName(): string {\n return \"shows\";\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class PokerFilterDefinition extends GameGroupFilterDefinitionBase {\n\n get id(): string {\n return \"poker\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.VIDEO_POKER, GAME_GROUP.CARRIBEAN_POKER, GAME_GROUP.POKER, GAME_GROUP.PAI_GOW_POKER, GAME_GROUP.POWER_VIDEO_POKER, GAME_GROUP.POKER_TEMPLATE_GAMES];\n }\n\n get text(): string {\n return this.services.translation.translate('POKER');\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class RouletteFilterDefinition extends GameGroupFilterDefinitionBase {\n get id(): string {\n return \"roulette\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.ROULETTE, GAME_GROUP.ROULETTE_LIKE];\n }\n\n get text(): string {\n return this.services.translation.translate('ROULETTE');\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class ScratchcardsFilterDefinition extends GameGroupFilterDefinitionBase {\n get id(): string {\n return \"scratchCards\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.SCRATCH_CARD];\n }\n\n get text(): string {\n return this.services.translation.translate('SCRATCHCARDS');\n }\n}","import {GameGroupFilterDefinitionBase} from \"../game-group-filter-definition-base\";\nimport {GAME_GROUP} from \"../../../../../common/const/game_groups_consts\";\n\nexport class SlotsFilterDefinition extends GameGroupFilterDefinitionBase {\n\n get id(): string {\n return \"slots\";\n }\n\n protected get gameGroupsIdsToFilterFor(): number[] {\n return [GAME_GROUP.VIDEO_SLOT, GAME_GROUP.SLOT];\n }\n\n get text(): string {\n return this.services.translation.translate('SLOT_GAMES');\n }\n\n}","import {IGameFilterDefinition} from \"../game-filter-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\n\nexport class OtherGameGroupFilterDefinition implements IGameFilterDefinition {\n constructor(protected readonly services: IServiceFactoryExtended, private gameTypesFilterDefinitions: IGameFilterDefinition[]) {\n }\n getFiltersForGame(gameInfo: GameInfo): string[] {\n if (this.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame) {\n return [this.id];\n }\n else {\n return [];\n }\n }\n\n get id(): string {\n return \"other-game-group\";\n }\n\n readonly subFilters: IGameFilterDefinition[] = [];\n\n get text(): string {\n return this.services.translation.translate('OTHER');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n const categoriesInCurrentArena = this.gameTypesFilterDefinitions;\n for(let category of categoriesInCurrentArena) {\n if(category.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame) {\n return ApplyGameFilterResult.ExcludeGame;\n }\n }\n \n return ApplyGameFilterResult.IncludeGame;\n }\n\n}","import {LiveGameFilterDefinitionBase} from \"./live-game-filter-definition-base\";\n\nexport class LiveBaccaratFilterDefinition extends LiveGameFilterDefinitionBase {\n get id(): string {\n return \"live-baccarat\";\n }\n\n protected get textToSearchInSubgroupName(): string {\n return \"baccarat\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_BACCARAT');\n }\n}","import {LiveGameFilterDefinitionBase} from \"./live-game-filter-definition-base\";\n\nexport class LiveBlackjackFilterDefinition extends LiveGameFilterDefinitionBase {\n\n get id(): string {\n return \"live-blackjack\";\n }\n\n protected get textToSearchInSubgroupName(): string {\n return \"blackjack\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_BLACKJACK');\n }\n}","import {LiveGameFilterDefinitionBase} from \"./live-game-filter-definition-base\";\n\nexport class LivePokerFilterDefinition extends LiveGameFilterDefinitionBase {\n\n get id(): string {\n return \"live-poker\";\n }\n\n protected get textToSearchInSubgroupName(): string {\n return \"poker\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_POKER');\n }\n}","import {LiveGameFilterDefinitionBase} from \"./live-game-filter-definition-base\";\n\nexport class LiveRouletteFilterDefinition extends LiveGameFilterDefinitionBase {\n get id(): string {\n return \"live-roulette\";\n }\n\n protected get textToSearchInSubgroupName(): string {\n return \"roulette\";\n }\n\n get text(): string {\n return this.services.translation.translate('LIVE_ROULETTE');\n }\n}","import {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\n\nexport class ItalianTablesFilterDefinition extends GameFilterDefinitionBase {\n get id(): string {\n return \"italian-tables\";\n }\n\n get text(): string {\n return this.services.translation.translate('ITALIAN_GAMES');\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if(gameInfo.isItalianTable) {\n return ApplyGameFilterResult.IncludeGame;\n }\n\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","import {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {BaccaratFilterDefinition} from \"../filters-definitions/game-group/baccarat.filter-definition\";\nimport {BlackjackFilterDefinition} from \"../filters-definitions/game-group/blackjack.filter-definition\";\nimport {CrapsFilterDefinition} from \"../filters-definitions/game-group/craps.filter-definition\";\nimport {KenoFilterDefinition} from \"../filters-definitions/game-group/keno.filter-definition\";\nimport {LiveEliteLungeFilterDefinition} from \"../filters-definitions/game-group/live-elite-lunge.filter-definition\";\nimport {\n LiveEliteLoungeOrExclusiveFilterDefinition\n} from \"../filters-definitions/game-group/live-elite-lounge-or-exclusive.filter-definition\";\nimport {LiveGameShowsFilterDefinition} from \"../filters-definitions/game-group/live-game-shows.filter-definition\";\nimport {PokerFilterDefinition} from \"../filters-definitions/game-group/poker.filter-definition\";\nimport {RouletteFilterDefinition} from \"../filters-definitions/game-group/roulette.filter-definition\";\nimport {ScratchcardsFilterDefinition} from \"../filters-definitions/game-group/scratchcards.filter-definition\";\nimport {SlotsFilterDefinition} from \"../filters-definitions/game-group/slots.filter-definition\";\nimport {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\nimport {OtherGameGroupFilterDefinition} from \"../filters-definitions/game-group/other-game-group.filter-definition\";\nimport {LiveBaccaratFilterDefinition} from \"../filters-definitions/game-group/live-baccarat.filter-definition\";\nimport {LiveBlackjackFilterDefinition} from \"../filters-definitions/game-group/live-blackjack.filter-definition\";\nimport {LivePokerFilterDefinition} from \"../filters-definitions/game-group/live-poker.filter-definition\";\nimport {LiveRouletteFilterDefinition} from \"../filters-definitions/game-group/live-roulette.filter-definition\";\nimport { ItalianTablesFilterDefinition } from \"../filters-definitions/game-group/italian-tables.filter-definition\";\n\nexport class GameGroupFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n\n get id(): CategoryDefinitionId {\n return 'gameGroups';\n }\n\n get title(): string{\n return this.services.translation.translate('GAME_CATEGORIES');\n }\n\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n const filters: IGameFilterDefinition[] = [\n new ItalianTablesFilterDefinition(this.services),\n new SlotsFilterDefinition(this.services),\n new RouletteFilterDefinition(this.services),\n new BlackjackFilterDefinition(this.services),\n new PokerFilterDefinition(this.services),\n new ScratchcardsFilterDefinition(this.services),\n new BaccaratFilterDefinition(this.services),\n new CrapsFilterDefinition(this.services),\n new KenoFilterDefinition(this.services),\n new LiveBaccaratFilterDefinition(this.services),\n new LiveBlackjackFilterDefinition(this.services),\n new LiveRouletteFilterDefinition(this.services),\n new LivePokerFilterDefinition(this.services),\n new LiveGameShowsFilterDefinition(this.services),\n new LiveEliteLungeFilterDefinition(this.services),\n new LiveEliteLoungeOrExclusiveFilterDefinition(this.services),\n ];\n return filters.concat(new OtherGameGroupFilterDefinition(this.services, filters));\n }\n\n\n}","import {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameThemeDefinition} from \"../../../game-theme/game-theme-definition/game-theme-definition\";\n\nexport class GameThemeFilterDefinition extends GameFilterDefinitionBase {\n constructor(public readonly id: string,\n protected readonly services: IServiceFactoryExtended,\n private _gameThemeDefinition: GameThemeDefinition,\n linkedThemeIds?: number[]) {\n super(services);\n this._themeIds = [this._gameThemeDefinition.id, ...(linkedThemeIds || [])]\n }\n\n private readonly _themeIds: number[];\n\n get text(): string {\n return this._gameThemeDefinition.name;\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n for(let themeId of gameInfo.themeIds) {\n if(this._themeIds.includes(themeId)) {\n return ApplyGameFilterResult.IncludeGame;\n }\n }\n return ApplyGameFilterResult.ExcludeGame;\n }\n}","export enum GameThemeId {\n Adventure = 1,\n AncientCivilization = 2,\n Wildlife = 3,\n ClassicStyle = 4,\n Asian = 5,\n TableGames = 7,\n MoviesAndMusic = 8,\n Fruit = 12,\n MoneyAndLeisure = 15,\n ComicsAndCartoons = 16,\n Irish = 19,\n Arcade = 25,\n DiamondsAndGems = 26,\n FantasyAndFolklore = 28,\n Seasonal = 29,\n Egyptian = 30,\n FarmAndPets = 35,\n Sports = 47,\n LiveCasino = 54,\n Arabic = 58,\n GreekMythology = 63,\n NA = 64,\n SpaceAndSciFi = 72,\n ScratchCards = 76,\n Fish = 77,\n Mexican = 82,\n Xmas = 93,\n Bingo = 94,\n ClassicStyleModernized = 95,\n AztecIncaMayan = 96,\n Crime = 97,\n WildWest = 98,\n CandyAndSweets = 99,\n GoldMining = 100,\n VikingsAndNordicMythology = 101,\n }","import {FilterCategoryDefinitionBase} from \"./filter-category-definition-base\";\nimport {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {GameThemeFilterDefinition} from \"../filters-definitions/theme/game-theme.filter-definition\";\nimport {CategoryDefinitionId} from \"./filter-category-definition.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {GameThemeId} from \"../../game-theme/game-theme-id.enum\";\n\nexport class GameThemeFiltersCategoryDefinition extends FilterCategoryDefinitionBase {\n\n get id(): CategoryDefinitionId {\n return 'themes';\n }\n\n get title(): string {\n return this.services.translation.translate('THEMES');\n }\n\n get hasItsOwnFiltersOrder(): boolean {\n return !Check.isEmpty(this.services.configuration.data.generalSettings.filters?.advancedFilters?.preferredThemeFilters);\n }\n\n private _getPreferredThemeFilters(): GameThemeFilterDefinition[] {\n return [\n new GameThemeFilterDefinition(\"theme_adventure\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Adventure)),\n new GameThemeFilterDefinition(\"theme_ancient-civilization\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.AncientCivilization)),\n new GameThemeFilterDefinition(\"theme_wildlife\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Wildlife)),\n new GameThemeFilterDefinition(\"theme_classic_style\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.ClassicStyle), [GameThemeId.ClassicStyleModernized]),\n new GameThemeFilterDefinition(\"theme_asian\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Asian)),\n new GameThemeFilterDefinition(\"theme_arabic\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Arabic)),\n new GameThemeFilterDefinition(\"theme_comics_and_cartoons\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.ComicsAndCartoons)),\n new GameThemeFilterDefinition(\"theme_diamonds_and_gems\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.DiamondsAndGems)),\n new GameThemeFilterDefinition(\"theme_egyptian\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Egyptian)),\n new GameThemeFilterDefinition(\"theme_fantasy_and_folklore\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.FantasyAndFolklore)),\n new GameThemeFilterDefinition(\"theme_farm_and_pets\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.FantasyAndFolklore)),\n new GameThemeFilterDefinition(\"theme_fish\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Fish)),\n new GameThemeFilterDefinition(\"theme_fruit_and_candy\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Fruit)),\n new GameThemeFilterDefinition(\"theme_greek_mythology\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.GreekMythology)),\n new GameThemeFilterDefinition(\"theme_irish\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Irish)),\n new GameThemeFilterDefinition(\"theme_money_and_leisure\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.MoneyAndLeisure)),\n new GameThemeFilterDefinition(\"theme_movies_and_music\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.MoviesAndMusic)),\n new GameThemeFilterDefinition(\"theme_seasonal\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Seasonal)),\n new GameThemeFilterDefinition(\"theme_space_and_sci-fi\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.SpaceAndSciFi)),\n new GameThemeFilterDefinition(\"theme_crime\", this.services, this.services.gamesTheme.getGameThemeDefinition(GameThemeId.Crime))\n ];\n }\n\n\n protected _loadAvailableFilters(): IGameFilterDefinition[] {\n const preferredThemeFilters = this.services.configuration.data.generalSettings.filters?.advancedFilters?.preferredThemeFilters;\n if (Check.isEmpty(preferredThemeFilters)) {\n return this._getPreferredThemeFilters();\n }\n\n const themesDictionary = this._getPreferredThemeFilters().toDictionary(f => f.id);\n\n const result: IGameFilterDefinition[] = [];\n for (let filterId of preferredThemeFilters) {\n const filter = themesDictionary[filterId];\n if (filter) {\n result.push(filter);\n } else {\n this.services.logger.error(`There is no filter definition for filter with ID ${filterId}`);\n }\n }\n\n return result;\n\n }\n}","import {IFilterCategoryDefinitionFactory} from \"./filter-category-definition-factory.interface\";\nimport {CategoryDefinitionId, IFilterCategoryDefinition} from \"./filter-category-definition.interface\";\nimport {VolatilityFiltersCategoryDefinition} from \"./volatility.filters-category-definition\";\nimport {GameFeaturesFiltersCategoryDefinition} from \"./game-features.filters-category-definition\";\nimport {HasJackpotFiltersCategoryDefinition} from \"./has-jackpot.filters-category-definition\";\nimport {GameVendorFiltersCategoryDefinition} from \"./game-vendor.filters-category-definition\";\nimport {GameGroupFiltersCategoryDefinition} from \"./game-group.filters-category-definition\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nimport {GameThemeFiltersCategoryDefinition} from \"./game-theme.filters-category-definition\";\n\nexport class FilterCategoryDefinitionFactory implements IFilterCategoryDefinitionFactory {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n\n private readonly _allCategories: Record<string, IFilterCategoryDefinition> = {\n \"volatility\": new VolatilityFiltersCategoryDefinition(this.services),\n \"features\": this.createGameFeaturesCategoryDefinition(),\n \"hasJackpot\": new HasJackpotFiltersCategoryDefinition(this.services),\n \"themes\": new GameThemeFiltersCategoryDefinition(this.services),\n \"vendors\" : this.createVendorsCategoryDefinition(),\n \"gameGroups\": this.createGameGroupCategoryDefinition(),\n };\n\n createCategoryDefinition(categoryDefinitionId: CategoryDefinitionId): IFilterCategoryDefinition | null {\n if (categoryDefinitionId in this._allCategories) {\n return this._allCategories[categoryDefinitionId];\n } else {\n this.services.logger.error(`There is no filters category definition for id ${categoryDefinitionId}`);\n return null;\n }\n }\n \n\n createVendorsCategoryDefinition(): IFilterCategoryDefinition {\n return new GameVendorFiltersCategoryDefinition(this.services);\n }\n\n createGameGroupCategoryDefinition(): IFilterCategoryDefinition {\n return new GameGroupFiltersCategoryDefinition(this.services);\n }\n\n createGameFeaturesCategoryDefinition(): IFilterCategoryDefinition {\n return new GameFeaturesFiltersCategoryDefinition(this.services);\n }\n\n getAllCategoryDefinitions(): IFilterCategoryDefinition[] {\n return Object.values(this._allCategories);\n }\n}\n","import React from 'react';\nimport {DisposableObject} from \"../../../../utils/disposable-object\";\nimport {IGamesFilterStrategy} from \"./games-filter-strategy.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {computed, observable, runInAction, makeObservable} from \"mobx\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {Nullable} from \"../../../../common/types/nullable-types\";\nimport {GamesMap} from \"../../games/games.service.interface\";\nimport {IArenaGameFiltersCategory} from \"../arena-filters/categories/arena-game-filters-category.interface\";\nimport {IArenaGameFilter} from \"../arena-filters/filters/arena-game-filter.interface\";\nimport {ApplyGameFilterResult, IGameFilterEvaluator} from \"../evaluators/game-filter-evaluator.interface\";\nimport {IFilterIndicatorRenderingOptions} from \"../games-filter.service.interface\";\nimport {FilterCategoryDefinitionFactory} from '../filters-categories-definitions/filter-category-definition-factory';\nimport {IGameFilterDefinition} from '../filters-definitions/game-filter-definition.interface';\n\nexport abstract class GamesFilterStrategyBase extends DisposableObject implements IGamesFilterStrategy {\n\n constructor(protected readonly services: IServiceFactoryExtended) {\n super();\n makeObservable(this);\n\n this.addReaction(() => this.services.location.currentUri, () => {\n //We use set timeout in order to avoid a circular dependency error.\n //Because this reaction is with fireImmediately=true it executes in this constructor, but this constructor is called from the GamesFilterService constructor\n //and the code inside this._filterGames is trying to access methods and properties from GamesFilterService and the Lazy class will throw an error in this case.\n setTimeout(() => {\n runInAction(() => {\n try {\n this.filteredGamesMap = this._filterGames();\n if (this.services.gamesFilter.isFilterOn && !this._isInFilterAnalyticsReporting) {\n this._reportApplyFiltersByDeepLink();\n }\n } finally {\n this._isInFilterAnalyticsReporting = false;\n }\n });\n });\n\n }, {\n fireImmediately: true\n });\n\n this.addReaction(() => this.services.games.gamesMap, () => {\n //We use set timeout in order to avoid a circular dependency error.\n //Because this reaction is with fireImmediately=true it executes in this constructor, but this constructor is called from the GamesFilterService constructor\n //and the code inside this._filterGames is trying to access methods and properties from GamesFilterService and the Lazy class will throw an error in this case.\n setTimeout(() => {\n runInAction(() => {\n this.filteredGamesMap = this._filterGames();\n });\n });\n\n }, {\n fireImmediately: true\n });\n }\n protected _factory = new FilterCategoryDefinitionFactory(this.services);\n\n isValidFilter(filterId: string): boolean {\n return this.currentFilters.some(filter => filter.id === filterId);\n }\n\n private _isInFilterAnalyticsReporting = false;\n beginFilterAnalyticsReporting(): void {\n this._isInFilterAnalyticsReporting = true;\n }\n\n protected abstract _createFiltersCategories(): IArenaGameFiltersCategory[];\n abstract renderMobileFiltersIndicator(): React.ReactElement;\n abstract renderFiltersIndicator(): Nullable<IFilterIndicatorRenderingOptions>;\n protected abstract _reportApplyFiltersByDeepLink(): void;\n\n abstract showFiltersEditor(): void;\n protected abstract _createEvaluator(): IGameFilterEvaluator | null;\n\n @observable.ref\n filteredGamesMap: Record<string, GameInfo> = {};\n\n private _filtersCategories: Nullable<IArenaGameFiltersCategory[]> = null;\n public get filtersCategories(): IArenaGameFiltersCategory[] {\n if (!this._filtersCategories) {\n this._filtersCategories = this._createFiltersCategories();\n }\n return this._filtersCategories;\n }\n\n\n @computed\n public get currentFilters(): IArenaGameFilter[] {\n const result: IArenaGameFilter[] = [];\n this.filtersCategories.forEach(category => {\n category.availableFilters.forEach(f => result.push(f));\n });\n\n return result;\n }\n\n get isFilteringAvailable(): boolean {\n return this.currentFilters.length > 0;\n }\n\n protected _filterGames(): GamesMap {\n\n const gamesMap = this.services.games.gamesMap;\n\n if (!this.currentFilters.some(f => f.isApplied)) {\n return gamesMap;\n }\n\n const evaluator = this._createEvaluator();\n\n const result: GamesMap = {};\n\n for (let game of Object.values(this.services.games.gamesMap)) {\n const filterResult = evaluator.applyFilter(game);\n if (ApplyGameFilterResult.IncludeGame === filterResult) {\n result[game.gameType] = game;\n }\n }\n\n return result;\n }\n\n public getFiltersForGame(gameType: number): string[] {\n\n\n const gameInfo = this.services.games.gamesMap[gameType];\n if (!gameInfo) {\n return [];\n }\n const allCategories = this._factory.getAllCategoryDefinitions();\n const result: string[] = []\n allCategories.forEach(category => {\n category.getFiltersForGame(gameInfo).forEach(filterId => {\n result.push(filterId);\n })\n })\n\n return result;\n }\n\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number {\n return 0;\n }\n\n getFiltersDefinitions(filtersIds: string[]): Record<string, IGameFilterDefinition> {\n let result: Record<string, IGameFilterDefinition> = {};\n\n for (let categoryDefinition of this._factory.getAllCategoryDefinitions()) {\n for (let filterDefinition of categoryDefinition.availableFilters) {\n if (filterDefinition.subFilters.length > 0) {\n for (let subFilter of filterDefinition.subFilters.filter(subF => filtersIds.includes(subF.id))) {\n result[subFilter.id] = subFilter;\n }\n }\n if (filtersIds.includes(filterDefinition.id)) {\n result[filterDefinition.id] = filterDefinition;\n }\n }\n }\n\n return result;\n }\n}","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const FilterCategoriesListContainerBox = styledBox(\"FilterCategoriesListContainerBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const FilterCategoryBox = styledBox(\"FilterCategoryBox\");\n","import styled from \"styled-components\";\n\nexport const FilterCategoryContentBox = styled.div`\n display: block;\n transition: all 0.2s ease-in;\n overflow: hidden;\n height: 100%;\n`;","import styled from \"styled-components\";\n\nexport const FilterItemBox = styled.div<{disabled: boolean}>`\n display: flex;\n align-items: center;\n padding: 18px 15px;\n cursor: ${props => props.disabled ? \"auto\" : \"pointer\"};\n`","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const FilterInputBox = styledBox(\"FilterInputBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const FilterItemTitleBox = styledBox(\"FilterItemTitleBox\");\n","import styled from \"styled-components\";\n\nexport const SubFiltersBox = styled.div`\n margin-left: 5rem;\n`","import styled from \"styled-components\";\n\nexport const FilterItemContainerBox = styled.div<{disabled: boolean}>`\n display: flex;\n flex-direction: column;\n opacity: ${props => props.disabled ? \"0.5\" : \"1\"};\n`\n","import React from 'react';\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {FilterItemBox} from \"./boxes/filter-Item.box\";\nimport {FilterInputBox} from \"./boxes/input/filter-input.box\";\nimport {FilterItemTitleBox} from \"./boxes/filter-item-title.box\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\nimport {observer} from \"mobx-react\";\nimport {SubFiltersBox} from \"./boxes/sub-filters.box\";\nimport {FilterItemContainerBox} from \"./boxes/filter-item-container.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nexport type FilterInputType = 'checkbox' | 'radio';\n\ninterface FilterCategoryItemComponentProps {\n inputType: FilterInputType;\n filter: IArenaGameFilterEditorViewModel;\n filterCategoryId: string;\n}\n\nexport const FilterCategoryItemComponent = observer(\n class FilterCategoryItemComponent extends OrbitComponent<FilterCategoryItemComponentProps> {\n\n private _onFilterToggle = () => {\n if (this.props.filter.disabled) {\n return;\n }\n this.props.filter.toggleFilter();\n }\n\n private _renderSubFilters() {\n const subFilters = this.props.filter.subFilters;\n if(subFilters.length === 0) {\n return null;\n }\n\n return (\n <SubFiltersBox>\n {subFilters.map(sf => (<FilterCategoryItemComponent key={sf.id}\n filterCategoryId={this.props.filterCategoryId}\n filter={sf}\n inputType=\"checkbox\"/>))}\n </SubFiltersBox>\n )\n }\n\n render() {\n const filter = this.props.filter;\n const inputType = this.props.inputType;\n\n return (\n <FilterItemContainerBox disabled={filter.disabled} className={CyClass('cy-game-filter-item')}>\n <FilterItemBox onClick={this._onFilterToggle} disabled={filter.disabled}>\n <FilterInputBox type={inputType} name={`${this.props.filterCategoryId}-option`} checked={Boolean(filter.on)} readOnly disabled={filter.disabled}/>\n <FilterItemTitleBox isChecked={filter.on}>\n {filter.text}\n {filter.gamesCount > 0 && ` (${filter.gamesCount})`}\n </FilterItemTitleBox>\n </FilterItemBox>\n {this._renderSubFilters()}\n </FilterItemContainerBox>\n\n );\n }\n }\n);","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {\n IArenaGameFiltersCategoryEditorViewModel\n} from \"../../../../services/games-filter/arena-filters/categories/arena-game-filters-category-editor-view-model.interface\";\nimport {FilterCategoryContentBox} from \"./boxes/filter-category-content.box\";\nimport {observer} from \"mobx-react\";\nimport {FilterCategoryItemComponent} from \"./filter-category-item.component\";\n\ninterface FilterCategoryContentComponentProps {\n category: IArenaGameFiltersCategoryEditorViewModel;\n isOpen: boolean;\n}\n\n\nexport const FilterCategoryContentComponent = observer(\n class FilterCategoryContentComponent extends OrbitComponent<FilterCategoryContentComponentProps> {\n\n _renderFilters(category: IArenaGameFiltersCategoryEditorViewModel) {\n\n\n return <>\n {category.visibleFilters.map(filterToRender => (<FilterCategoryItemComponent key={filterToRender.id}\n filter={filterToRender}\n inputType={category.isMultiSelect ? 'checkbox' : 'radio'}\n filterCategoryId={category.id}/>))}\n </>;\n }\n\n render() {\n if(!this.props.isOpen) {\n return null;\n }\n\n return (\n <FilterCategoryContentBox>\n {this._renderFilters(this.props.category)}\n </FilterCategoryContentBox>\n )\n }\n }\n);","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const FilterTitleContainerBox = styledBox(\"FilterTitleContainerBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const FilterTitleBox = styledBox(\"FilterTitleBox\");","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const FilterPreviewBox = styledBox(\"FilterPreviewBox\");\n","import React from 'react';\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {FilterTitleContainerBox} from \"./boxes/title-category/filter-title-container.box\";\nimport {FilterTitleBox} from \"./boxes/title/filter-title.box\";\nimport {FilterPreviewBox} from \"./boxes/preview/filter-preview.box\";\nimport {\n IArenaGameFiltersCategoryEditorViewModel\n} from \"../../../../services/games-filter/arena-filters/categories/arena-game-filters-category-editor-view-model.interface\";\nimport {observer} from \"mobx-react\";\n\ninterface FilterCategoryHeaderComponentProps {\n category: IArenaGameFiltersCategoryEditorViewModel;\n isOpen: boolean;\n onCategoryToggle: (category: IArenaGameFiltersCategoryEditorViewModel) => void;\n}\n\n\nexport const FilterCategoryHeaderComponent = observer(\n class FilterCategoryHeaderComponent extends OrbitComponent<FilterCategoryHeaderComponentProps> {\n private _onClickHandler = () => {\n this.props.onCategoryToggle(this.props.category);\n }\n\n\n render() {\n const activeFiltersTexts = this.props.category.getVisibleAppliedFilters().map(f => f.text);\n return (\n <FilterTitleContainerBox onClick={this._onClickHandler} >\n <FilterTitleBox isOpen={this.props.isOpen}>\n {this.props.category.title}\n </FilterTitleBox>\n\n <FilterPreviewBox isVisible={!this.props.isOpen && activeFiltersTexts.length > 0}>\n ({activeFiltersTexts.join(', ')})\n </FilterPreviewBox>\n </FilterTitleContainerBox>\n )\n }\n }\n);","import React from 'react';\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {IArenaGameFiltersCategoryEditorViewModel} from '../../../../services/games-filter/arena-filters/categories/arena-game-filters-category-editor-view-model.interface';\nimport {observer} from 'mobx-react';\nimport {FilterCategoryBox} from \"./boxes/filter-category.box\";\nimport {FilterCategoryContentComponent} from \"./filter-category-content.component\";\nimport {FilterCategoryHeaderComponent} from \"./filter-category-header.component\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\ninterface IFilterCategoryComponentProps {\n category: IArenaGameFiltersCategoryEditorViewModel;\n onCategoryToggle: (category: IArenaGameFiltersCategoryEditorViewModel) => void;\n isOpen: boolean;\n}\n\nexport const FilterCategoryComponent = observer(\n class FilterCategoryComponent extends OrbitComponent<IFilterCategoryComponentProps> {\n\n render() {\n const {category, isOpen} = this.props;\n return (\n <FilterCategoryBox className={CyClass('cy-games-filter-category')}>\n <FilterCategoryHeaderComponent category={category} isOpen={isOpen} onCategoryToggle={this.props.onCategoryToggle}/>\n <FilterCategoryContentComponent category={category} isOpen={isOpen}/>\n </FilterCategoryBox>\n );\n }\n }\n);\n","import React from 'react';\nimport {OrbitComponentWithState} from '../../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport {FilterCategoriesListContainerBox} from \"./boxes/filter-categories-list-container.box\";\nimport {FilterCategoryComponent} from '../filter-category/filter-category.component';\nimport {IAdvancedStrategyFiltersEditorViewModel} from '../../../../services/games-filter/strategies/advanced-filter/advanced-strategy-filters-editor-view-model.interface';\nimport {IArenaGameFiltersCategoryEditorViewModel} from '../../../../services/games-filter/arena-filters/categories/arena-game-filters-category-editor-view-model.interface';\nimport {observer} from 'mobx-react';\n\nexport interface IFilterCategoriesListComponentProps {\n filtersEditor: IAdvancedStrategyFiltersEditorViewModel;\n}\n\ninterface IFilterCategoriesListComponentState {\n openFilterCategory: IArenaGameFiltersCategoryEditorViewModel | null;\n}\n\nexport const FilterCategoriesListComponent = observer(\n class FilterCategoriesListComponent extends OrbitComponentWithState<IFilterCategoriesListComponentProps, IFilterCategoriesListComponentState> {\n\n state: IFilterCategoriesListComponentState = {\n openFilterCategory: null\n }\n\n _onCategoryToggle = (category: IArenaGameFiltersCategoryEditorViewModel) => {\n let openFilterCategoryState = this.state.openFilterCategory;\n\n // if user clicked on new category emulate close current category first\n if (openFilterCategoryState && category.id !== openFilterCategoryState.id) {\n openFilterCategoryState = null;\n }\n\n this.setState({openFilterCategory: openFilterCategoryState ? null : category});\n }\n\n\n render() {\n return (\n <FilterCategoriesListContainerBox>\n\n\n {this.props.filtersEditor.visibleCategories.map(category => (<FilterCategoryComponent key={category.title}\n category={category}\n onCategoryToggle={this._onCategoryToggle}\n isOpen={this.state.openFilterCategory?.id === category.id}/>))}\n </FilterCategoriesListContainerBox>\n )\n }\n }\n);","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const AdvancedGamesFilterBox = styledBox(\"AdvancedGamesFilterBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const AdvancedGamesFilterFooterBox = styledBox(\"AdvancedGamesFilterFooterBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const AdvancedGamesFilterHeaderBox = styledBox(\"AdvancedGamesFilterHeaderBox\");","import styled from \"styled-components\";\nimport {Button} from \"../../../../../basic-ui-components/button/base/button.component\";\nimport {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\n\nexport const AdvancedGamesFilterButtonBox = styled(Button)`\n min-width: 140px;\n`\n\nconst AdvancedGamesFilterButtonSIBox = styled(AdvancedGamesFilterButtonBox)`\n background-color: transparent; \n`\n\nexport const AdvancedGamesFilterButtonStyleBox = styledByTheme(AdvancedGamesFilterButtonBox)\n .forSI(AdvancedGamesFilterButtonSIBox)\n .forSICis(AdvancedGamesFilterButtonSIBox)\n .apply();","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const FilterByBox = styledBox('FilterByBox');\n","import styled from \"styled-components\";\nimport {flexGrowItem} from \"../../../../themes/architecture/css-helpers/flex\";\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\n\nexport const FilterCategoriesListBox = styled.div`\n ${flexGrowItem};\n flex-basis: 1%; /* We need it so this area will not take all the places(including the sticky buttons) */\n overflow-y: auto;\n background-color: ${({theme}) => hexToRgba(theme.colors.backgroundMiddleDark, 0.25)};\n padding-inline: 15px;\n`;","import React from 'react';\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {\n IAdvancedStrategyFiltersEditorViewModel\n} from \"../../../services/games-filter/strategies/advanced-filter/advanced-strategy-filters-editor-view-model.interface\";\nimport {FilterCategoriesListComponent} from './filter-categories-list/filter-categories-list.component';\nimport {AdvancedGamesFilterBox} from \"./boxes/filter/advanced-games-filter.box\";\nimport {AdvancedGamesFilterFooterBox} from \"./boxes/filter-footer/advanced-games-filter-footer.box\";\nimport {AdvancedGamesFilterHeaderBox} from \"./boxes/filter-header/advanced-games-filter-header.box\";\nimport {\n AdvancedGamesFilterButtonBox,\n AdvancedGamesFilterButtonStyleBox\n} from \"./boxes/filter-button/advanced-games-filter-button.box\";\nimport {FilterByBox} from \"./filter-categories-list/boxes/filter-by.box\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {FilterCategoriesListBox} from \"./boxes/filter-categories-list.box\";\n\n\ninterface AdvancedGamesFilterComponentProps {\n filtersEditor: IAdvancedStrategyFiltersEditorViewModel;\n}\n\nexport const AdvancedGamesFilterComponent = observer(\n class AdvancedGamesFilterComponent extends OrbitComponent<AdvancedGamesFilterComponentProps> {\n\n private _onApply = async () => {\n await this.props.filtersEditor.applyFilters();\n (await this.services.drawer).right.back();\n }\n\n private _onCancel = () => {\n this.props.filtersEditor.closeFilters();\n }\n\n private _onClearAll = async () => {\n await this.props.filtersEditor.clearFilters();\n }\n\n componentDidMount() {\n super.componentDidMount();\n this.props.filtersEditor.openFilters();\n }\n\n\n render() {\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n const numberOfGamesIfUserApply: number = this.props.filtersEditor.getNumberOfGamesBeforeUserApply();\n const numberOfSelectedFilters: number = this.props.filtersEditor.getAppliedFiltersIds().length;\n\n return (\n <AdvancedGamesFilterBox className={CyClass('cy-advanced-filters')}>\n <AdvancedGamesFilterHeaderBox>\n <FilterByBox>\n {this.services.translation.translate('FILTER_BY')}\n </FilterByBox>\n <div onClick={this._onCancel} className={CyClass('cy-close-advanced-filters-x-button')} style={{cursor: \"pointer\"}}>\n <CloseIcon />\n </div>\n </AdvancedGamesFilterHeaderBox>\n <FilterCategoriesListBox>\n <FilterCategoriesListComponent filtersEditor={this.props.filtersEditor}/>\n </FilterCategoriesListBox>\n <AdvancedGamesFilterFooterBox>\n <AdvancedGamesFilterButtonStyleBox preset=\"secondary\" onClick={this._onClearAll} className={CyClass('cy-clear-filters-button')}>\n {this.services.translation.translate('CLEAR_ALL')}\n </AdvancedGamesFilterButtonStyleBox>\n\n <AdvancedGamesFilterButtonBox preset=\"primary\" onClick={this._onApply} className={CyClass('cy-apply-filters-button')}>\n {this.services.translation.translate('APPLY') + (numberOfSelectedFilters> 0 ? ` (${numberOfGamesIfUserApply})` : '')}\n </AdvancedGamesFilterButtonBox>\n </AdvancedGamesFilterFooterBox>\n\n </AdvancedGamesFilterBox>\n )\n }\n }\n);","import React from 'react';\nimport {IDrawerContent} from \"../../../drawer/drawer.service.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {\n AdvancedGamesFilterComponent\n} from \"../../../../components/filters/advanced-filtering/advanced-games-filter.component\";\nimport {AdvancedStrategyFiltersEditor} from \"./advanced-strategy-filters-editor\";\n\nexport class AdvancedGamesFilterDrawerRenderer implements IDrawerContent {\n\n constructor(private readonly services: IServiceFactoryExtended,\n private readonly filtersEditor: AdvancedStrategyFiltersEditor) {\n this.id = this.services.tools.getGuid();\n }\n\n readonly id: string;\n readonly isMinimized: boolean = false;\n readonly minOverlayZIndex: number | null = null;\n supportsCloseIntent: boolean = false;\n readonly title: string = '';\n isBlurBackground: boolean = true;\n\n onClose(): void {\n }\n\n onOverlayClicked(): void {\n }\n\n render(): React.ReactNode {\n return (\n <AdvancedGamesFilterComponent filtersEditor={this.filtersEditor}/>\n );\n }\n}","import { action, observable, runInAction, makeObservable } from \"mobx\";\nimport {IArenaGameFilterEditorViewModel} from \"./arena-game-filter-editor-view-model.interface\";\nimport {IArenaGameFilter} from \"./arena-game-filter.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {ArenaGameFiltersCategoryEditor} from \"../categories/arena-game-filters-category-editor\";\n\nexport class ArenaGameFilterEditor implements IArenaGameFilterEditorViewModel {\n constructor(protected readonly arenaGameFilter: IArenaGameFilter,\n protected readonly categoryEditor?: ArenaGameFiltersCategoryEditor) {\n makeObservable(this);\n\n this._on = arenaGameFilter.isApplied;\n }\n\n get id(): string {\n return this.arenaGameFilter.id;\n }\n\n get text(): string {\n return this.arenaGameFilter.text;\n }\n\n @observable.ref\n protected _on: boolean = false;\n get on(): boolean {\n return this._on;\n }\n\n set on(value: boolean) {\n this._setOn(value);\n }\n\n protected _resetOtherFiltersInTheCategory(): void {\n this.categoryEditor.visibleFilters.forEach(f => {\n if(f.id !== this.id) {\n f.on = false;\n }\n })\n }\n\n protected _setOn(value: boolean): void {\n\n if(value && this.categoryEditor && !this.categoryEditor.isMultiSelect) {\n this._resetOtherFiltersInTheCategory();\n }\n\n runInAction(() => this._on = value);\n }\n\n get disabled(): boolean {\n return false;\n }\n\n @action.bound\n toggleFilter(): void {\n this.on = !this.on;\n }\n\n get shouldBeDisplayed(): boolean {\n return !this.arenaGameFilter.isAdhocFilter;\n }\n\n get gamesCount(): NullableNumber {\n return this.arenaGameFilter.gamesCount;\n }\n\n\n private _subFilters: ArenaGameSubFilterEditor[] | null = null;\n get subFilters(): ArenaGameSubFilterEditor[] {\n if(!this._subFilters) {\n this._subFilters = this.arenaGameFilter.subFilters.map(sf => new ArenaGameSubFilterEditor(this, sf));\n }\n return this._subFilters;\n }\n}\n\n\nexport class ArenaGameSubFilterEditor extends ArenaGameFilterEditor {\n constructor(private readonly parent: ArenaGameFilterEditor,\n arenaGameFilter: IArenaGameFilter) {\n super(arenaGameFilter)\n }\n\n get on(): boolean {\n return this._on && this.parent.on;\n }\n\n set on(value: boolean) {\n this._setOn(value);\n }\n\n get disabled(): boolean {\n return !this.parent.on;\n }\n}","import {ArenaGameFilterEditor} from \"../filters/arena-game-filter-editor\";\nimport {IArenaGameFiltersCategoryEditorViewModel} from \"./arena-game-filters-category-editor-view-model.interface\";\nimport {IArenaGameFiltersCategory} from \"./arena-game-filters-category.interface\";\nimport { computed, makeObservable } from \"mobx\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {IArenaGameFilterEditorViewModel} from \"../filters/arena-game-filter-editor-view-model.interface\";\nimport {CategoryDefinitionId} from \"../../filters-categories-definitions/filter-category-definition.interface\";\n\nexport class ArenaGameFiltersCategoryEditor implements IArenaGameFiltersCategoryEditorViewModel {\n constructor(private readonly arenaGameFilterCategory: IArenaGameFiltersCategory) {\n makeObservable(this);\n\n this._filters = arenaGameFilterCategory.availableFilters.map(f => new ArenaGameFilterEditor(f, this));\n }\n\n private readonly _filters: ArenaGameFilterEditor[];\n @computed\n get visibleFilters(): ArenaGameFilterEditor[] {\n return this._filters.filter(f => f.shouldBeDisplayed);\n }\n\n get id(): CategoryDefinitionId {\n return this.arenaGameFilterCategory.id;\n }\n\n get title(): string {\n return this.arenaGameFilterCategory.title;\n }\n\n getAppliedFiltersIds(): string[] {\n return this._getAllAppliedFilters().map(f => f.id);\n }\n\n get gamesCount(): NullableNumber {\n return this.arenaGameFilterCategory.gamesCount;\n }\n\n get isMultiSelect(): boolean {\n return this.arenaGameFilterCategory.isMultiSelect;\n }\n\n private _getAllAppliedFilters(): ArenaGameFilterEditor[] {\n const result: ArenaGameFilterEditor[] = [];\n\n for(let filter of this._filters) {\n if(filter.on) {\n result.push(filter);\n for(let subFilter of filter.subFilters) {\n if(subFilter.on) {\n result.push(subFilter)\n }\n }\n }\n }\n return result;\n }\n\n\n getVisibleAppliedFilters(): IArenaGameFilterEditorViewModel[] {\n return this._getAllAppliedFilters().filter(f => f.shouldBeDisplayed);\n }\n\n}","import {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\nexport interface IReportApplyFiltersParams {\n appliedFilters: Record<string, string[]>; // the key is the filters category and the value is an array of applied filters from that category\n gamesCount: number;\n}\n\ninterface IFilterEventData {\n action: string;\n label: string;\n actionData?: string;\n}\n\nexport class AdvancedFiltersAnalytics {\n constructor(private readonly services: IServiceFactoryExtended) {\n\n }\n\n private _getLocation() {\n let location = this.services.location.currentUri.pathName.toString()\n if(location !== '/' && location.endsWith('/')) {\n location = location.substring(0, location.length - 1)\n }\n\n return location;\n }\n\n private _sendEvent(filterEventData: IFilterEventData): void {\n this.services.analytics.sendOrbitUserFlowEvent('advanced-filters', filterEventData.action, filterEventData.label, filterEventData.actionData);\n }\n\n reportOpenFilters(): void {\n this._sendEvent({\n action: 'open',\n label: this._getLocation()\n });\n }\n\n reportCloseFilters(): void {\n this._sendEvent({\n action: 'close',\n label: this._getLocation()\n });\n }\n\n reportClearFilters(): void {\n this._sendEvent({\n action: 'clear',\n label: this._getLocation()\n });\n }\n\n reportApplyFiltersByDeepLink(params: IReportApplyFiltersParams): void {\n this._sendEvent({\n action: 'deeplink',\n label: this._getLocation(),\n actionData: JSON.stringify(params)\n });\n }\n\n reportApplyFiltersByButton(params: IReportApplyFiltersParams): void {\n this._sendEvent({\n action: 'apply',\n label: this._getLocation(),\n actionData: JSON.stringify(params)\n });\n }\n\n reportRemoveFilter(filterID: string): void {\n this._sendEvent({\n action: 'remove',\n label: filterID\n });\n }\n}","import {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {ArenaGameFiltersCategoryEditor} from \"../../arena-filters/categories/arena-game-filters-category-editor\";\nimport {IAdvancedStrategyFiltersEditorViewModel} from \"./advanced-strategy-filters-editor-view-model.interface\";\nimport {IArenaGameFiltersCategory} from \"../../arena-filters/categories/arena-game-filters-category.interface\";\nimport {AdvancedFiltersAnalytics} from \"./advanced-filters-analytics\";\nimport {IAdvancedFiltersEditorToStrategyAdapter} from \"./advanced-filters-editor-to-strategy-adapter\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../arena-filters/filters/arena-game-filter-editor-view-model.interface\";\n\n\n\n\nexport class AdvancedStrategyFiltersEditor implements IAdvancedStrategyFiltersEditorViewModel {\n constructor(private readonly strategy: IAdvancedFiltersEditorToStrategyAdapter,\n private readonly services: IServiceFactoryExtended) {\n\n this._categories = this.filtersCategories.map(c => new ArenaGameFiltersCategoryEditor(c));\n this.analyticsReporter = new AdvancedFiltersAnalytics(this.services);\n }\n\n readonly analyticsReporter: AdvancedFiltersAnalytics;\n\n get filtersCategories(): IArenaGameFiltersCategory[] {\n return this.strategy.filtersCategories;\n }\n\n private _categories: ArenaGameFiltersCategoryEditor[];\n get visibleCategories(): ArenaGameFiltersCategoryEditor[] {\n return this._categories.filter(c => c.visibleFilters.length > 0);\n }\n\n public getAppliedFiltersIds(): string[] {\n let result: string[] = [];\n\n this._categories.forEach(c => {\n result = [\n ...result,\n ...c.getAppliedFiltersIds()\n ];\n\n });\n return result;\n }\n\n\n\n getNumberOfGamesBeforeUserApply(): number {\n return this.services.gamesFilter.getNumberOfGamesBeforeUserApply(this.getAppliedFiltersIds());\n }\n\n openFilters(): void {\n this.analyticsReporter.reportOpenFilters();\n }\n\n private async _executeWithAnalyticsReporting(action: () => Promise<void>) {\n this.strategy.beginFilterAnalyticsReporting();\n await action();\n }\n\n async applyFilters(): Promise<void> {\n if(this.getAppliedFiltersIds().toString() !== this.services.gamesFilter.currentAppliedFiltersIds.toString()) {\n await this._executeWithAnalyticsReporting(async () => {\n await this.services.gamesFilter.applyFilters(this.getAppliedFiltersIds());\n this.analyticsReporter.reportApplyFiltersByButton(this.strategy.getApplyFilterReportingParameters());\n })\n\n }\n }\n\n async removeFilter(filter: IArenaGameFilterEditorViewModel): Promise<void> {\n filter.on = false;\n await this._executeWithAnalyticsReporting(async () => {\n await this.services.gamesFilter.applyFilters(this.getAppliedFiltersIds());\n this.analyticsReporter.reportRemoveFilter(filter.id);\n });\n }\n\n async closeFilters() : Promise<void> {\n (await this.services.drawer).right.back();\n this.analyticsReporter.reportCloseFilters();\n }\n\n async clearFilters(): Promise<void> {\n if(this.services.gamesFilter.isFilterOn) {\n await this._executeWithAnalyticsReporting(async () => {\n await this.services.gamesFilter.clearFilters();\n this.analyticsReporter.reportClearFilters();\n });\n }\n (await this.services.drawer).right.back();\n\n\n }\n}","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const FiltersMobileButtonBox = styledBox('FiltersMobileButtonBox');","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {FiltersMobileButtonBox} from \"../../../filters/filters-games-list-mobile/boxes/menu-button/filters-mobile-button.box\";\nimport {Link} from \"../../../raw-components/link/link\";\nimport React from \"react\";\nimport classNames from \"classnames\";\nimport {ACTIVE} from \"../../../../themes/css-global-classes\";\nimport {observer} from \"mobx-react\";\n\nexport const FiltersMobileButtonComponent = observer(class FiltersMobileButtonComponent extends OrbitComponent<{}> {\n\n private _openPopup = () => {\n this.services.gamesFilter.showFiltersEditor();\n };\n\n render(){\n if(!this.services.gamesFilter.isFilteringAvailable) {\n return null;\n }\n\n if(this.services.arenas.shouldHideFiltersButtonMobile()) {\n return null;\n }\n\n const FilterIcon = this.services.theme.currentTheme.icons.filterIcon;\n\n return (\n <Link box={FiltersMobileButtonBox} className={classNames('cy-open-filters-button', {[ACTIVE] : this.services.gamesFilter.isFilterOn})} onClick={this._openPopup}>\n <FilterIcon size={1.6} className={'cy-filter-icon'} />\n </Link>\n )\n }\n});","import styled, {css} from \"styled-components\";\nimport {flexAdaptiveSizeItem} from \"../../../../themes/architecture/css-helpers/flex\";\n\nexport const IndicatorContainerBox = styled.div<{alignAppliedFiltersToCenter: boolean}>`\n display: flex;\n flex-direction: row;\n align-items: center;\n font-size: 14px;\n ${({alignAppliedFiltersToCenter}) => alignAppliedFiltersToCenter ? css`align-self: flex-start` : ''};\n max-width: 100%;\n ${props => props.theme.font.presets.medium};\n ${flexAdaptiveSizeItem}\n`;\n","import styled from \"styled-components\";\nimport {grayColors} from \"../../../../../../themes/architecture/gray-colors\";\nimport {hexToRgba} from \"../../../../../../themes/hex-to-rgba\";\n\nexport const AppliedFilterIndicatorBox = styled.span`\n display: flex;\n flex-direction: row;\n align-items: center;\n border: 2px solid ${hexToRgba(grayColors.gray183 ,0.3)};\n border-radius: 4px;\n padding: 0 12px;\n line-height: 3rem;\n margin-left: 2px;\n`","import styled from \"styled-components\";\n\nexport const AppliedFiltersBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n flex-wrap: wrap;\n row-gap: 5px;\n\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n overflow: -moz-scrollbars-none;\n overflow-x: auto;\n &::-webkit-scrollbar {\n display: none;\n }\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n flex-wrap: nowrap;\n margin-top: 1rem;\n margin-bottom: 1rem;\n &:empty {\n margin-top: 0;\n margin-bottom: 0;\n }\n }\n`","import styled from \"styled-components\";\nimport {XCloseButtonBox} from \"../../../../../../basic-ui-components/x-close-button/x-close-button.box\";\n\nexport const RemoveFilterButtonBox = styled(XCloseButtonBox)`\n width: 14px;\n height: 14px;\n`","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const AppliedFilterNameBox = styledBox(\"AppliedFilterNameBox\")\n","import styled from \"styled-components\";\n\nexport const AppliedFilterContainerBox = styled.div`\n margin-right: 8px;\n &:last-child: {\n margin-right: 0;\n }\n`","import React from 'react';\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {\n IAdvancedStrategyFiltersEditorViewModel\n} from \"../../../../../services/games-filter/strategies/advanced-filter/advanced-strategy-filters-editor-view-model.interface\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\nimport {IndicatorContainerBox} from \"../../boxes/indicator-container.box\";\nimport {BlankHorizontalSeparatorBox} from \"../../../../../basic-components/blank-separator/blank-horizontal-separator.box\";\nimport {FiltersMobileButtonComponent} from \"../../../../header/top-header-left/filters/filters-mobile-button.component\";\nimport {AppliedFilterIndicatorBox} from \"./boxes/applied-filter-indicator.box\";\nimport {AppliedFiltersBox} from \"./boxes/applied-filters.box\";\nimport {RemoveFilterButtonBox} from \"./boxes/remove-filter-button.box\";\nimport {AppliedFilterNameBox} from \"./boxes/applied-filter-name.box\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {AppliedFilterContainerBox} from \"./boxes/applied-filters-container.box\";\n\ninterface AdvancedGamesFilteringPcIndicatorComponentProps {\n filtersEditor: IAdvancedStrategyFiltersEditorViewModel;\n showFiltersButton?: boolean;\n alignAppliedFiltersToCenter?: boolean;\n}\n\nexport const AppliedFiltersIndicatorForAdvancedFilteringComponent = observer(\n class AppliedFiltersIndicatorForAdvancedFilteringComponent extends OrbitComponent<AdvancedGamesFilteringPcIndicatorComponentProps> {\n static defaultProps: Partial<AdvancedGamesFilteringPcIndicatorComponentProps> = {\n showFiltersButton:true,\n alignAppliedFiltersToCenter: true\n };\n\n private _onRemoveFilter = async (filter: IArenaGameFilterEditorViewModel) => {\n await this.props.filtersEditor.removeFilter(filter);\n }\n\n private _renderOneAppliedFilter(filter: IArenaGameFilterEditorViewModel) {\n return (\n <AppliedFilterContainerBox key={filter.id} className={CyClass('cy-applied-advanced-filter-name')}>\n <BlankHorizontalSeparatorBox/>\n <AppliedFilterIndicatorBox>\n <AppliedFilterNameBox>\n {filter.text}\n </AppliedFilterNameBox>\n <BlankHorizontalSeparatorBox/>\n <RemoveFilterButtonBox onClick={() => this._onRemoveFilter(filter)} className={CyClass('cy-remove-advanced-filter-x-button')}/>\n </AppliedFilterIndicatorBox>\n\n </AppliedFilterContainerBox>\n\n )\n }\n\n private _getAppliedFilters(): IArenaGameFilterEditorViewModel[] {\n const filters: IArenaGameFilterEditorViewModel[] = [];\n this.props.filtersEditor.visibleCategories.forEach(category => {\n category.getVisibleAppliedFilters().forEach(f => {\n if(f.on) {\n filters.push(f);\n }\n\n })\n });\n return filters;\n }\n\n private _renderAppliedFilters() {\n\n return (\n <AppliedFiltersBox>\n {this._getAppliedFilters().map(filter => this._renderOneAppliedFilter(filter))}\n </AppliedFiltersBox>\n )\n }\n\n render() {\n return (\n <IndicatorContainerBox alignAppliedFiltersToCenter={this.props.alignAppliedFiltersToCenter} className={CyClass('cy-applied-advanced-filters-indicator')}>\n <BlankHorizontalSeparatorBox multiplier={2}/>\n {this.props.showFiltersButton && <FiltersMobileButtonComponent/>}\n\n {this._renderAppliedFilters()}\n\n </IndicatorContainerBox>\n );\n }\n }\n);","import {IArenaGameFiltersCategory} from \"./arena-game-filters-category.interface\";\nimport {\n CategoryDefinitionId,\n IFilterCategoryDefinition\n} from \"../../filters-categories-definitions/filter-category-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport { computed, makeObservable } from \"mobx\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {IArenaGameFilter} from \"../filters/arena-game-filter.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\n\nexport abstract class ArenaGameFiltersCategoryBase implements IArenaGameFiltersCategory {\n constructor(protected readonly categoryDefinition: IFilterCategoryDefinition,\n protected readonly services: IServiceFactoryExtended) {\n makeObservable(this);\n }\n\n abstract get availableFilters(): IArenaGameFilter[];\n abstract get gamesCount(): NullableNumber;\n\n\n get id(): CategoryDefinitionId {\n return this.categoryDefinition.id;\n }\n\n get title(): string {\n return this.categoryDefinition.title;\n }\n\n get isMultiSelect(): boolean {\n return this.categoryDefinition.isMultiSelect;\n }\n\n @computed\n private get _appliedFilters(): IArenaGameFilter[] {\n return this.availableFilters.filter(f => f.isApplied);\n }\n\n @computed\n private get _appliedSubFilters(): IArenaGameFilter[] {\n return this.availableFilters.selectMany(f => f.subFilters.filter(sf => sf.isApplied));\n }\n\n applyFilter(gameInfo: GameInfo, selectedFiltersIDs: string[] = null): ApplyGameFilterResult {\n let filters = this._appliedFilters;\n let subFilters = this._appliedSubFilters;\n\n // selectedFiltersIDs is the filters user select but still not apply. we need it to show the user the number of games that will shown to him before click.\n if(selectedFiltersIDs) {\n filters = this.availableFilters.filter(f => selectedFiltersIDs.includes(f.id));\n subFilters = this.availableFilters.selectMany(f => f.subFilters.filter(sf => selectedFiltersIDs.includes(sf.id)));\n }\n\n if(filters.length === 0 && subFilters.length === 0) {\n return ApplyGameFilterResult.NotApplicable;\n }\n\n return this.categoryDefinition.applyFilters(gameInfo,\n filters.map(arenaFilter => arenaFilter.filterDefinition),\n subFilters.map(subFilter => subFilter.filterDefinition));\n }\n\n isGameIncludedInThisCategory(gameInfo: GameInfo): boolean {\n return this.availableFilters.some(f => f.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame);\n }\n\n get allAppliedFiltersAndSubFilters(): IArenaGameFilter[] {\n return [\n ...this._appliedFilters,\n ...this._appliedSubFilters\n ];\n }\n\n}","import {IArenaGameFilter} from \"./arena-game-filter.interface\";\nimport {IGameFilterDefinition} from \"../../filters-definitions/game-filter-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\n\nexport abstract class ArenaGameFilterBase implements IArenaGameFilter {\n constructor(public readonly filterDefinition: IGameFilterDefinition,\n protected readonly services: IServiceFactoryExtended) {\n }\n\n abstract get subFilters(): IArenaGameFilter[];\n\n readonly isAdhocFilter = false;\n\n\n get id(): string {\n return this.filterDefinition.id;\n }\n\n get text(): string {\n return this.filterDefinition.text;\n }\n\n\n get isApplied(): boolean {\n return this.services.gamesFilter.isFilterApplied(this.filterDefinition.id);\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n return this.filterDefinition.applyFilter(gameInfo);\n }\n\n get gamesCount(): NullableNumber {\n return null;\n }\n\n\n}","import {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport { computed, makeObservable } from \"mobx\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {ArenaGameFilterBase} from \"./arena-game-filter-base\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {IArenaGameFilter} from \"./arena-game-filter.interface\";\nimport {IGameFilterDefinition} from \"../../filters-definitions/game-filter-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\nexport class DynamicArenaGameFilter extends ArenaGameFilterBase {\n constructor(filterDefinition: IGameFilterDefinition,\n services: IServiceFactoryExtended) {\n super(filterDefinition, services);\n\n makeObservable(this);\n }\n\n @computed\n get games(): GameInfo[] {\n const currentArenaGames = this.services.arenas.getCurrentArena().allArenaGamesForFiltering;\n return currentArenaGames.filter(gameInfo => this.filterDefinition.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame)\n }\n\n get gamesCount(): NullableNumber {\n return this.games.length;\n }\n\n @computed\n get subFilters(): IArenaGameFilter[] {\n return this.filterDefinition.subFilters.map(sf => new DynamicArenaGameFilter(sf, this.services))\n .filter(f => f.gamesCount > 0)\n .sort((f1, f2) => f2.gamesCount - f1.gamesCount);\n }\n}","import {ArenaGameFiltersCategoryBase} from \"./arena-game-filters-category-base\";\nimport { computed, makeObservable } from \"mobx\";\nimport {DynamicArenaGameFilter} from \"../filters/dynamic-arena-game-filter\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {IGameFilterDefinition} from \"../../filters-definitions/game-filter-definition.interface\";\nimport {IFilterCategoryDefinition} from \"../../filters-categories-definitions/filter-category-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\n\nexport class DynamicArenaGameFiltersCategory extends ArenaGameFiltersCategoryBase {\n constructor(categoryDefinition: IFilterCategoryDefinition,\n services: IServiceFactoryExtended) {\n super(categoryDefinition, services);\n\n makeObservable(this);\n }\n\n protected _createArenaGameFilter(filterDefinition: IGameFilterDefinition): DynamicArenaGameFilter {\n return new DynamicArenaGameFilter(filterDefinition, this.services);\n }\n\n /**\n * Restrict available filters to only those that have applicable games in the current arena\n */\n @computed\n get availableFilters(): DynamicArenaGameFilter[] {\n if(this.categoryDefinition.hasItsOwnFiltersOrder) {\n return this._getAvailableFilters();\n } else {\n return this._getAvailableFilters().sort((f1, f2) => f2.gamesCount - f1.gamesCount);\n }\n }\n\n protected _getAvailableFilters(): DynamicArenaGameFilter[]{\n return this.categoryDefinition.availableFilters\n .map(f => this._createArenaGameFilter(f))\n .filter(f => f.gamesCount > 0);\n }\n\n @computed\n get gamesCount(): NullableNumber {\n const uniqueGameTypes = new Set();\n this.availableFilters.forEach(f => {\n f.games.forEach(game => uniqueGameTypes.add(game.gameType))\n });\n return uniqueGameTypes.size;\n }\n}","import React from 'react';\nimport {GamesFilterStrategyBase} from \"../games-filter-strategy-base\";\nimport {AdvancedGamesFilterDrawerRenderer} from \"./advanced-games-filter-drawer-renderer\";\nimport {AdvancedStrategyFiltersEditor} from \"./advanced-strategy-filters-editor\";\nimport {IArenaGameFiltersCategory} from \"../../arena-filters/categories/arena-game-filters-category.interface\";\nimport {ApplyGameFilterResult, IGameFilterEvaluator} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {AND} from \"../../evaluators/and-game-filters-evaluator\";\nimport {\n FiltersMobileButtonComponent\n} from \"../../../../components/header/top-header-left/filters/filters-mobile-button.component\";\nimport {Nullable} from \"../../../../../common/types/nullable-types\";\nimport {\n IFilterIndicatorRenderingOptions,\n FilterIndicatorRenderingLocation\n} from \"../../games-filter.service.interface\";\nimport {\n AppliedFiltersIndicatorForAdvancedFilteringComponent\n} from \"../../../../components/filters/advanced-filtering/indicators/pc-indicator/applied-filters-pc-indicator-for-advanced-filtering.component\";\nimport {DynamicArenaGameFiltersCategory} from \"../../arena-filters/categories/dynamic-arena-game-filters-category\";\nimport {Check} from '@sparkware/app-utils';\nimport {IFilterCategoryDefinition} from '../../filters-categories-definitions/filter-category-definition.interface';\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {AdvancedFiltersAnalytics, IReportApplyFiltersParams} from \"./advanced-filters-analytics\";\nimport {GamesMap} from \"../../../games/games.service.interface\";\nimport {IAdvancedFiltersEditorToStrategyAdapter} from \"./advanced-filters-editor-to-strategy-adapter\";\n\nexport class AdvancedGamesFilterStrategy extends GamesFilterStrategyBase implements IAdvancedFiltersEditorToStrategyAdapter {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this._analyticsReporter = new AdvancedFiltersAnalytics(this.services);\n }\n\n private readonly _analyticsReporter: AdvancedFiltersAnalytics;\n\n protected _createFiltersCategories(): IArenaGameFiltersCategory[] {\n const arenaName = this.services.routing.currentRoute.data?.arenaType;\n if (!arenaName) {\n return [];\n }\n\n const categories = this.services.configuration.data.arenas[arenaName]?.advancedFilters?.categories;\n if (!Check.isArray(categories)) {\n return [];\n }\n \n const filters: IArenaGameFiltersCategory[] = [];\n categories.forEach(category => {\n if (category?.id) {\n const filterCategoryDef = this._factory.createCategoryDefinition(category.id);\n if(filterCategoryDef) {\n filters.push(this._createArenaGameFiltersCategory(filterCategoryDef));\n } else {\n this.services.logger.error(`There is no filter category definition for id ${category.id}`);\n }\n }\n });\n\n return filters;\n }\n\n protected _createArenaGameFiltersCategory(filterCategoryDef: IFilterCategoryDefinition): IArenaGameFiltersCategory {\n return new DynamicArenaGameFiltersCategory(filterCategoryDef, this.services);\n }\n\n protected _createEvaluator(): IGameFilterEvaluator | null {\n return AND(...this.filtersCategories);\n }\n\n private _createFiltersEditor() {\n return new AdvancedStrategyFiltersEditor(this, this.services);\n }\n\n getApplyFilterReportingParameters(): IReportApplyFiltersParams {\n const appliedFilters: Record<string, string[]> = {};\n this.filtersCategories.forEach(category => {\n const appliedFiltersInCategory = category.allAppliedFiltersAndSubFilters;\n if(appliedFiltersInCategory.length > 0) {\n appliedFilters[category.id] = appliedFiltersInCategory.map(f => f.id);\n }\n })\n const gamesCount = this.services.arenas.getCurrentArena().filteredGamesCount;\n return {\n gamesCount: gamesCount,\n appliedFilters: appliedFilters\n };\n }\n\n protected _reportApplyFiltersByDeepLink(): void {\n\n this._analyticsReporter.reportApplyFiltersByDeepLink(this.getApplyFilterReportingParameters());\n\n }\n\n renderMobileFiltersIndicator(): React.ReactElement {\n if(this.services.mediaQuery.lAndBelow) {\n return (<FiltersMobileButtonComponent/>);\n } else {\n return null;\n }\n }\n\n renderFiltersIndicator(): Nullable<IFilterIndicatorRenderingOptions> {\n if(this.services.mediaQuery.lAndBelow) {\n return {\n location: FilterIndicatorRenderingLocation.BelowArenaTitle,\n reactElement: (<AppliedFiltersIndicatorForAdvancedFilteringComponent showFiltersButton={false} filtersEditor={this._createFiltersEditor()}/>)\n }\n } else {\n return {\n location: FilterIndicatorRenderingLocation.NextToArenaTitle,\n reactElement: (<AppliedFiltersIndicatorForAdvancedFilteringComponent filtersEditor={this._createFiltersEditor()}/>)\n };\n }\n }\n\n async showFiltersEditor(): Promise<void> {\n (await this.services.drawer).right.push(new AdvancedGamesFilterDrawerRenderer(this.services, this._createFiltersEditor()));\n }\n\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number {\n let gamesToShowIfUserApply = this._filterGamesBeforeApplyClicked(filterIDS);\n return Object.keys(gamesToShowIfUserApply).length;\n }\n\n private _filterGamesBeforeApplyClicked(filterIDS: string[]): GamesMap {\n const currentArenaGames = this.services.arenas.getCurrentArena().allArenaGamesForFiltering;\n\n if(!this.currentFilters.some(f => filterIDS.includes(f.id))) {\n return currentArenaGames;\n }\n\n const evaluator = this._createEvaluator();\n\n const result: GamesMap = {};\n\n for(let game of Object.values(currentArenaGames)) {\n const filterResult = evaluator.applyFilter(game, filterIDS);\n if(ApplyGameFilterResult.IncludeGame === filterResult) {\n result[game.gameType] = game;\n }\n }\n\n return result;\n }\n\n}","import React from \"react\";\nimport {ArenaBaseModel, VideoSlidesFilterConfig} from \"../arena-base.model\";\nimport {\n ArenaGamesGridConfiguration,\n SwiperGamesListConfiguration\n} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport {IGamesListModel} from \"../../lists/games-list-model.interface\";\nimport {ListsSortOrderStorage} from \"../../lists-sort-order-storage\";\nimport {HomePageComponent} from \"../../../../../components/home-page/home-page.component\";\nimport {HOME_PAGE_ARENA, NEW_GAMES_ARENA_NAME} from \"../../../arena-consts\";\nimport {GAME_ORIENTATION_IDS} from \"../../../../user-game-orientation/user-game-orientation.service.interface\";\nimport { reaction } from \"mobx\";\nimport {GameInfo} from \"../../../../games/game-info\";\nimport {ArenaFiltersConfigurationMap} from \"../arena-view-model.interface\";\nimport {IGamesFilterStrategy} from \"../../../../games-filter/strategies/games-filter-strategy.interface\";\nimport {Nullable} from \"../../../../../../common/types/nullable-types\";\nimport {AdvancedGamesFilterStrategy} from \"../../../../games-filter/strategies/advanced-filter/advanced-games-filter.strategy\";\n\nexport class HomePageArenaModel extends ArenaBaseModel {\n\n constructor(services: IServiceFactoryExtended, postLoginListsSortOrderStorage: ListsSortOrderStorage) {\n super(HOME_PAGE_ARENA, services, postLoginListsSortOrderStorage);\n\n reaction(\n () => this.services.routing.currentRoute,\n (currentRoute) => {\n if (currentRoute.routeDefinition.data?.arenaType === NEW_GAMES_ARENA_NAME) {\n this.services.homepage.resetNewAddedGames();\n }\n }, {\n fireImmediately: true\n }\n );\n }\n\n get maxSwipersToShow(): number {\n return 40;\n }\n\n get maxGamesToShowInList(): number {\n return 18\n }\n\n get aiEngine(): string {\n return \"\";\n }\n\n renderArena(): React.ReactElement | null {\n return (<HomePageComponent/>);\n }\n\n protected _getSwiperIdToPutOnTop(): number[] | null {\n //REQUIREMENT 1886942 - exclude live casino orientation players\n const gameGroupOrientation = this.services.userGameOrientation.gameGroup;\n if (gameGroupOrientation?.groupId && gameGroupOrientation?.groupId === GAME_ORIENTATION_IDS.LIVE_CASINO ) {\n return\n }\n\n return this.services.abTestingFeatureDataProvider.listOnTop;\n }\n\n protected _sortSwipersByAI(swipers: IGamesListModel[]): IGamesListModel[] {\n if(this._isUsingExternalAIForSwipersSorting) {\n return swipers;\n }\n\n return super._sortSwipersByAI(swipers);\n }\n\n protected _getSwipersConfigurations(): SwiperGamesListConfiguration[] {\n return this.services.configuration.data.homePage.gamesLists || [];\n }\n protected _getGridsConfigurations(): ArenaGamesGridConfiguration[] {\n return []\n }\n\n protected _getPromotionalBannerConfig() {\n const bannerConfig = this.services.configuration.data.homePage.promotionalBanner;\n if(!bannerConfig || this.services.miniOrbit.isEnabled) {\n return null;\n }\n\n return {\n position: bannerConfig.displayPlace + 1,\n templateID: bannerConfig.templateID,\n componentID: bannerConfig.componentID,\n bannerAdminPlaceholderId: bannerConfig.bannerAdminPlaceholderId\n };\n }\n\n protected _getVideoSlidesFilterConfig(): Nullable<VideoSlidesFilterConfig> {\n const videoSlideFilterConfig = this.services.configuration.data.homePage.videoSlidesFilter;\n if(!videoSlideFilterConfig) {\n return null;\n }\n\n return {\n position: videoSlideFilterConfig.position,\n filterIds: videoSlideFilterConfig.filterIds\n }\n }\n\n filterGamesByArenaType(gamesInfo: GameInfo[]): GameInfo[] {\n return gamesInfo;\n }\n\n get allArenaGamesForFiltering(): GameInfo[] {\n return [];\n }\n\n get filtersConfigurationMap(): ArenaFiltersConfigurationMap {\n return {};\n }\n\n getGamesFilteringStrategy(): IGamesFilterStrategy {\n return new AdvancedGamesFilterStrategy(this.services);\n }\n}","import styled from 'styled-components';\nimport { Image } from '../../../../../../raw-components/image/image';\n\n//info-image default\nexport const ArenaPictureDefaultBox = styled(Image)`\n display: block;\n min-height: 20rem;\n\n width: 372px;\n height: 200px;\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n width: 282px;\n height: 175px;\n }\n`;\n\n","import {ArenaPictureDefaultBox} from './arena-picture.default.box';\n\nexport const ArenaPictureBox = ArenaPictureDefaultBox;","import styled from 'styled-components';\n\n//info-title default\nexport const ArenaTitleDefaultBox = styled.div`\n font-size: 1.5rem;\n color: ${props => props.theme.colors.textLight};\n font-weight: 600;\n padding-top: 3rem;\n padding-left: 0.5rem;\n`;","import {ArenaTitleDefaultBox} from './arena-title.default.box';\n\n\nexport const ArenaTitleBox = ArenaTitleDefaultBox;","import styled from 'styled-components';\n\nexport const ArenaDescriptionTextDefaultBox = styled.div`\n font-size: 1.4rem;\n ${({theme}) => theme.font.presets.regular};\n color: ${props => props.theme.colors.textMiddleDark};\n font-weight: 300;\n line-height: normal;\n padding-top: 1rem;\n`;","import {ArenaDescriptionTextDefaultBox} from './arena-description-text.default.box';\n\nexport const ArenaDescriptionTextBox = ArenaDescriptionTextDefaultBox;","import styled, {keyframes} from 'styled-components';\nimport {STICKY} from '../../../../../themes/css-global-classes';\n\nconst lobbyInfoKeyframes = keyframes`\n 0%{\n transform: translate(0, 13rem);\n }\n 25%{\n transform: translate(0, 15rem);\n }\n 50%{\n transform: translate(0, 18rem);\n }\n 100%{\n transform: translate(0, 22rem);\n }\n`;\n\nexport const LobbyGameInfoDefaultBox = styled.div`\n position: absolute;\n right: 0;\n top: 0;\n width: 375px;\n margin-right: 2.5rem;\n \n\n &.${STICKY} {\n position: fixed;\n animation: ${lobbyInfoKeyframes} 0.5s ease-in-out forwards;\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n width: 285px;\n }\n\n`;\n","import {LobbyGameInfoDefaultBox} from './lobby-game-info.default.box';\n\nexport const LobbyGameInfoBox = LobbyGameInfoDefaultBox;","import React from 'react';\nimport {observer} from 'mobx-react';\nimport classNames from 'classnames';\nimport { OrbitComponentWithState } from '../../../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport { AspectRatioContainerComponent } from '../../../../raw-components/aspect-ratio-container/aspect-ratio-container.component';\nimport {ArenaPictureBox} from './boxes/arena-picture/arena-picture.box';\nimport {ArenaTitleBox} from './boxes/arena-title/arena-title.box';\nimport {ArenaDescriptionTextBox} from './boxes/arena-description-text/arena-description-text.box';\nimport {LobbyGameInfoBox} from '../../boxes/lobby-game-info/lobby-game-info.box';\nimport {STICKY} from '../../../../../themes/css-global-classes';\n\nexport interface ArenaInfoPreviewComponentProps {\n isSticky?: boolean;\n arenaInfo: {\n previewImage: string;\n title: string;\n description: string;\n }\n}\n\nexport interface ArenaInfoPreviewComponentState {\n arenaPictureLoading: boolean;\n}\n\nexport const ArenaInfoPreviewComponent = observer(\n class ArenaInfoPreviewComponent extends OrbitComponentWithState<ArenaInfoPreviewComponentProps, ArenaInfoPreviewComponentState> {\n state: ArenaInfoPreviewComponentState = {\n arenaPictureLoading: false\n }\n\n render() {\n\n\n let title = this.services.translation.translate(this.props.arenaInfo.title);\n\n return (\n <LobbyGameInfoBox className={classNames('cy-arena-info-preview', {[STICKY]: this.props.isSticky})}>\n <AspectRatioContainerComponent\n width={372}\n height={200}\n isLoading={this.state.arenaPictureLoading}\n useBGColorDuringLoadAnimation\n >\n <ArenaPictureBox\n src={this.props.arenaInfo.previewImage}\n alt={title}\n width={372}\n height={200}\n lazy\n onLoadStart={() => {\n this.setState({arenaPictureLoading: true});\n }}\n onSettled={() => {\n this.setState({arenaPictureLoading: false});\n }}\n />\n </AspectRatioContainerComponent>\n <ArenaTitleBox>\n {title}\n </ArenaTitleBox>\n <ArenaDescriptionTextBox>\n {this.services.translation.translate(this.props.arenaInfo.description)}\n </ArenaDescriptionTextBox>\n </LobbyGameInfoBox>\n );\n }\n }\n);\n\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../../../../base-components/orbit-component/orbit-component';\nimport {SectionTitleBox} from '../../../../common/boxes/section-title/section-title.box';\n\n\nexport interface PcGamePreviewTitleComponentProps {\n gameTitle: string;\n}\n\nexport const PcGamePreviewTitleComponent = observer(\n class PcGamePreviewTitleComponent extends OrbitComponent<PcGamePreviewTitleComponentProps> {\n\n //className={`game-title general-title game-preview`}\n render() {\n return (\n <SectionTitleBox>\n {this.props.gameTitle}\n </SectionTitleBox>\n );\n }\n }\n);","import React from 'react';\nimport {TrailerOrStripeImageComponent} from '../../../common/trailer-or-stripe-image/trailer-or-stripe-image.component';\nimport {GamePreviewInfoContainerComponent} from '../../../common/game-info-container/game-preview-info-container.component';\nimport {observer} from 'mobx-react';\nimport {PcGamePreviewTitleComponent} from './title/pc-game-preview-title.component';\nimport {LobbyGameInfoBox} from '../../boxes/lobby-game-info/lobby-game-info.box';\nimport classNames from 'classnames';\nimport {STICKY} from '../../../../../themes/css-global-classes';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {ComponentServicesPick} from \"../../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../../react-hooks/with-services\";\n\n\nexport interface GameInfoPreviewComponentProps extends ComponentServicesPick<'lobbyGameInfoPreview'>{\n isSticky?: boolean;\n gameInfo: GameInfo;\n}\n\nconst ComponentBody: React.FC<GameInfoPreviewComponentProps> = observer((props) => {\n const _onMouseEnter = () => {\n props.lobbyGameInfoPreview.pinCurrentGamePreview();\n };\n\n const _onMouseLeave = () => {\n props.lobbyGameInfoPreview.unPinCurrentGamePreview();\n };\n\n let gameInfo = props.gameInfo;\n return (\n <LobbyGameInfoBox className={classNames('cy-game-info-preview', gameInfo.gameCategoryClassName, {[STICKY]: props.isSticky})}\n onMouseEnter={_onMouseEnter}\n onMouseLeave={_onMouseLeave}>\n <TrailerOrStripeImageComponent gameInfo={gameInfo}/>\n <GamePreviewInfoContainerComponent gameInfo={gameInfo} gameTitleComponent={<PcGamePreviewTitleComponent gameTitle={gameInfo.title} />}/>\n </LobbyGameInfoBox>\n );\n})\n\nexport const GameInfoPreviewComponent = withServices(ComponentBody, ['lobbyGameInfoPreview']);\n\n\n","import React, {useEffect} from 'react';\nimport {ArenaInfoPreviewComponent} from './parts/arena-info-preview/arena-info-preview.component';\nimport {GameInfoPreviewComponent} from './parts/game-info-preview/game-info-preview.component';\nimport {observer} from 'mobx-react';\nimport {IStickyHandler} from '../../sticky-handler/sticky-handler.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\n\nexport interface LobbyGamesInfoComponentProps extends ComponentServicesPick<'lobbyGameInfoPreview'>{\n stickyHandler?: IStickyHandler;\n arenaInfo: {\n previewImage: string;\n title: string;\n description: string;\n }\n}\n\nconst ComponentBody: React.FC<LobbyGamesInfoComponentProps> = observer((props) => {\n const services = useServices();\n useEffect(() => {\n if(!services.device.isMobile) {\n props.lobbyGameInfoPreview.enableGamePreview();\n }\n \n return () => {\n if(!services.device.isMobile) {\n props.lobbyGameInfoPreview.disableGamePreview();\n }\n }\n \n }, [props.lobbyGameInfoPreview, services.device.isMobile]);\n\n\n if (services.device.isMobile) {\n return null;\n }\n\n let enabledOnPC = services.configuration.data.generalSettings?.gamesPreviewConfig?.enabledOnPC;\n if(Check.isNullOrUndefined(enabledOnPC)) {\n enabledOnPC = true;\n }\n\n if(!enabledOnPC) {\n return null;\n }\n\n if (props.lobbyGameInfoPreview.currentPreviewedGame) {\n return (<GameInfoPreviewComponent isSticky={props.stickyHandler?.isSticky} gameInfo={props.lobbyGameInfoPreview.currentPreviewedGame}/>);\n } else {\n return (<ArenaInfoPreviewComponent isSticky={props.stickyHandler?.isSticky} arenaInfo={props.arenaInfo}/>);\n }\n \n})\n\nexport const PcGameInfoPreviewComponent = withServices(ComponentBody, ['lobbyGameInfoPreview']);\n","import styled from \"styled-components\";\nimport {LOBBY_PAGE} from \"../../../themes/css-global-classes\";\n\nexport const SeoBreadcrumbsContainerBox = styled.div`\n .${LOBBY_PAGE} &{\n @media ${({theme}) => theme.mediaQuery.mAndAbove} {\n margin-top: 55px;\n }\n }\n`;","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {SeoSectionConfiguration} from '../../../services/configurations/config-data-sections/arenas.configuration';\nimport {CmsBannerComponent} from '../../cms-banner/cms-banner.component';\nimport {SeoBreadcrumbsContainerBox} from \"./seo-breadcrumbs-container.box\";\n\nexport interface SeoBreadCrumbsComponentProps {\n arenaName: string;\n config: SeoSectionConfiguration;\n}\n\nexport class SeoBreadCrumbsComponent extends OrbitComponent<SeoBreadCrumbsComponentProps> {\n render() {\n if(!this.props.config.display || this.services.device.hybrid.isEmbedded) {\n return null;\n }\n\n return (\n <SeoBreadcrumbsContainerBox className={'cy-seo-breadcrumbs'}>\n <CmsBannerComponent componentID={this.props.config.componentID}\n templateID={this.props.config.templateID}\n showPlaceholder={false}/>\n </SeoBreadcrumbsContainerBox>\n\n )\n }\n}\n","export const ARENA_TYPES = {\n WIDE_ARENA: \"wide-arena\"\n};\n\n","import React from 'react';\nimport classNames from \"classnames\";\nimport {\n ArenaConfiguration,\n} from '../../../services/configurations/config-data-sections/arenas.configuration';\nimport {TopImageComponent} from '../../top-image/top-image.component';\nimport {LobbyHeaderComponent} from '../../lobby-header/lobby-header.component';\nimport {PcGameInfoPreviewComponent} from '../../lobby-game-info-preview/pc-game-info-preview/pc-game-info-preview.component';\nimport {observer} from 'mobx-react';\nimport {SeoBreadCrumbsComponent} from '../seo-bread-crumbs/seo-bread-crumbs.component';\nimport {IStickyHandler} from \"../../sticky-handler/sticky-handler.interface\";\nimport {ARENA_TYPES} from \"./casino-arena.template-types\";\nimport {LOBBY_PAGE} from '../../../themes/css-global-classes';\nimport {LobbyWrapperBox} from \"../../../basic-components/lobby-wrapper/lobby-wrapper.box\";\nimport {LobbyGridBox} from \"../../../basic-components/lobby-grid/lobby-grid.box\";\nimport {LinkToOfferComponent} from \"../../link-to-offer/link-to-offer.component\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {ArenaGamesListsComponent} from \"../../arena-games-lists/arena-games-lists.component\";\nimport {DailyDealComponent} from \"../../daily-deal/daily-deal.component\";\nimport {FreeToPlayAnimatedIconComponent} from '../../free-to-play-animated-icon/free-to-play-animated-icon.component';\n\n\nexport interface LobbyArenaComponentProps {\n arenaName: string;\n}\n\nexport const CasinoArenaComponent = observer(\n class CasinoArenaComponent extends OrbitComponent<LobbyArenaComponentProps> {\n\n private _stickyHandler: IStickyHandler;\n\n private get stickyHandler(): IStickyHandler {\n if (!this._stickyHandler) {\n this._stickyHandler = this.services.stickyHandlerFactory.createStickyHandler();\n }\n return this._stickyHandler;\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this.services.dom.body.classList.remove(LOBBY_PAGE);\n this.stickyHandler.dispose();\n }\n\n private get config(): ArenaConfiguration {\n return this.services.arenas.getArenaConfig(this.props.arenaName);\n }\n\n\n private _renderLinkToOffer() {\n return (\n <>\n <LinkToOfferComponent linkToOfferConfig={this.config.linkToOffer} />\n <FreeToPlayAnimatedIconComponent />\n </>\n );\n }\n\n\n\n render() {\n\n let sideBarInfo = {\n title: \"\",\n description: \"\",\n previewImage: \"\"\n };\n\n if (this.config.infoSideBar) {\n sideBarInfo = {\n title: this.config.infoSideBar.infoTitle,\n description: this.config.infoSideBar.infoText,\n previewImage: this.config.infoSideBar.infoImage\n };\n }\n\n return (\n <>\n <TopImageComponent image={this.config.topImage} animatedBanner={this.config.animatedTopImage} altText={this.config.title} />\n <LobbyHeaderComponent\n stickyHandler={this.stickyHandler}\n showSearchIcon={true}\n title={this.config.title}\n arenaFiltersRenderingOptions={this.services.gamesFilter.renderFiltersIndicator()}>\n </LobbyHeaderComponent>\n\n <LobbyWrapperBox className={'cy-lobby-wrapper-arena'}>\n <LobbyGridBox className={classNames('cy-lobby-grid-arena')}>\n <ArenaGamesListsComponent key={this.props.arenaName} arenaName={this.props.arenaName} />\n </LobbyGridBox>\n {\n (this.config.arenaType !== ARENA_TYPES.WIDE_ARENA) && <PcGameInfoPreviewComponent stickyHandler={this.stickyHandler} arenaInfo={sideBarInfo} />\n }\n {this._renderLinkToOffer()}\n <DailyDealComponent />\n </LobbyWrapperBox>\n\n <SeoBreadCrumbsComponent arenaName={this.props.arenaName} config={this.config.seoSection} />\n </>\n );\n }\n }\n);","import {ArenaFiltersConfigurationMap} from \"./arenas/arena-view-model.interface\";\nimport {NullableUndefined} from \"../../../../common/types/nullable-types\";\n\nexport function filtersConfigurationToMap(filtersConfiguration: NullableUndefined<string[]>): ArenaFiltersConfigurationMap {\n return (filtersConfiguration ?? []).toDictionary(filterId => filterId, \n (filterId, index) => {\n return {\n filterId: filterId,\n index: index\n }\n });\n }\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n\nexport const FilterLinkIconBox = styledBox('FilterLinkIconBox');\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const FilterLinkBox = styledBox('FilterLinkBox');\n","import React from 'react';\nimport {Link} from '../../raw-components/link/link';\nimport {FilterLinkIconBox} from \"./boxes/icon/filter-link-icon.box\";\nimport {ACTIVE} from \"../../../themes/css-global-classes\";\nimport classNames from \"classnames\";\nimport {observer} from \"mobx-react\";\nimport {FilterLinkBox} from \"./boxes/filter-link.box\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\n\nexport interface FilterLinkComponentProps {\n filter: IArenaGameFilterEditorViewModel,\n onChange: (filter: IArenaGameFilterEditorViewModel) => void;\n}\n\nexport const FilterLinkComponent = observer(\n class FilterLinkComponent extends OrbitComponent<FilterLinkComponentProps> {\n\n private _onFilterClick = () => {\n this.props.onChange(this.props.filter);\n };\n\n render() {\n return (\n <Link box={FilterLinkBox} className={classNames('cy-filter-link',{[ACTIVE]: this.props.filter.on})} onClick={this._onFilterClick}>\n <FilterLinkIconBox className={'cy-filter-link-icon'}></FilterLinkIconBox>\n {this.props.filter.text}\n </Link>\n );\n }\n }\n);\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../themes/architecture/styled-by-device\";\nimport {CssRule} from \"../../../themes/architecture/css-helpers/css-rule\";\n\nconst CommonStyles = styled.div`\n display: flex;\n flex-direction: row;\n margin: 0;\n`;\n\nconst PCBox = CommonStyles;\n\nconst MobileBox = styled(CommonStyles)`\n margin: 10px auto;\n display: grid;\n grid-template-columns: repeat(3, 130px);\n grid-gap: 10px;\n justify-content: center;\n \n ${CssRule.For.mobile.landscape.build()} & {\n grid-template-columns: repeat(5, 130px);\n }\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n grid-template-columns: repeat(3, 100px);\n \n ${CssRule.For.mobile.landscape.build()} & {\n grid-template-columns: repeat(5, 100px);\n }\n }\n`;\n\n\nexport const FiltersGamesListDefaultBox = styledByDevice(PCBox, MobileBox);","import {FiltersGamesListDefaultBox} from \"./filters-games-list.default.box\";\n\nexport const FiltersGamesListBox = FiltersGamesListDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {FilterLinkComponent} from '../filter-link/filter-link.component';\nimport {FiltersGamesListBox} from \"./filters-games-list.box\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\n\nexport interface FilterLinkListComponentProps {\n filters: IArenaGameFilterEditorViewModel[];\n onToggle: (filter: IArenaGameFilterEditorViewModel) => void\n}\nexport class FilterLinkListComponent extends OrbitComponent<FilterLinkListComponentProps> {\n\n private _toggleHandler = (filter: IArenaGameFilterEditorViewModel) => {\n this.props.onToggle(filter);\n };\n\n private _renderOneFilter(filter: IArenaGameFilterEditorViewModel) {\n return (\n <FilterLinkComponent key={filter.id} filter={filter} onChange={this._toggleHandler} />\n );\n }\n\n render() {\n return (\n <FiltersGamesListBox className={'cy-filters-games-list'}>\n {this.props.filters.map(filter => this._renderOneFilter(filter))}\n </FiltersGamesListBox>\n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const FiltersGamesMobilePopupBox = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n background: ${props => props.theme.colors.background};\n z-index: 1;\n`;","import styled from \"styled-components\";\n\nexport const FiltersMobileButtonsDefaultBox = styled.div`\n padding-bottom: 3rem;\n margin-top: auto;\n`;","import {FiltersMobileButtonsDefaultBox} from \"./filters-mobile-buttons.default.box\";\n\nexport const FiltersMobileButtonsBox = FiltersMobileButtonsDefaultBox;","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {FilterLinkListComponent} from '../filter-link-list/filter-link-list.component';\nimport {FiltersGamesMobilePopupBox} from \"./boxes/popup/filters-games-mobile-popup.box\";\nimport {FiltersMobileButtonsBox} from \"./boxes/popup/menu/filters-mobile-buttons.box\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\nimport { ModalDialogActionsComponent } from '../../modal-dialog/modal-dialog-actions.component';\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\nimport {\n ISimpleStrategyFiltersEditorViewModel\n} from \"../../../services/games-filter/strategies/simple-games-filter/simple-strategy-filters-editor-view-model.interface\";\n\n\nexport interface FiltersGamesListMobileComponentProps {\n dialogHandler: IModalDialogHandler;\n filtersEditor: ISimpleStrategyFiltersEditorViewModel;\n}\n\nexport const FiltersGamesListMobileComponent = observer(\n class FiltersGamesListMobileComponent extends OrbitComponent<FiltersGamesListMobileComponentProps> {\n\n\n private _closePopup = () => {\n this.props.dialogHandler.close();\n };\n\n private _applyFilters = async () => {\n await this.props.filtersEditor.applyFilters();\n const checkedFiltersIds = this.props.filtersEditor.visibleFilters.filter(f => f.on).map(f => f.id);\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",this.services.routing.currentRoute.data.arenaType, checkedFiltersIds.join(','));\n this._closePopup();\n };\n\n private _clearFilters = async () => {\n this.props.filtersEditor.visibleFilters.forEach(f => {\n f.on = false;\n });\n\n await this._applyFilters();\n\n };\n\n private _renderPopupButtons() {\n return (<FiltersMobileButtonsBox className={'cy-filters-games-buttons'}>\n <ModalDialogActionsComponent\n primaryAction={{\n className: 'cy-apply-filters-button',\n text: this.services.translation.translate('APPLY'),\n onClick: this._applyFilters\n }}\n secondaryAction={{\n className: 'cy-clear-filters-button',\n text: this.services.translation.translate('CLEAR_ALL'),\n onClick: this._clearFilters\n }}\n buttonsOnSeparateLines={this.services.mediaQuery.lAndBelow} />\n </FiltersMobileButtonsBox>);\n }\n\n private _onToggleFilter = (filter: IArenaGameFilterEditorViewModel) => {\n filter.toggleFilter();\n }\n\n render() {\n\n if (this.props.filtersEditor.visibleFilters.length === 0) {\n return null;\n }\n\n return (\n <FiltersGamesMobilePopupBox className={'cy-filters-games-mobile'}>\n <FilterLinkListComponent filters={this.props.filtersEditor.visibleFilters} onToggle={this._onToggleFilter}/>\n {this._renderPopupButtons()}\n </FiltersGamesMobilePopupBox>\n )\n }\n }\n);\n\n","import {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {ArenaGameFilterEditor} from \"../../arena-filters/filters/arena-game-filter-editor\";\nimport {ISimpleStrategyFiltersEditorViewModel} from \"./simple-strategy-filters-editor-view-model.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IArenaGameFiltersCategory} from \"../../arena-filters/categories/arena-game-filters-category.interface\";\n\nexport class SimpleStrategyFiltersEditor implements ISimpleStrategyFiltersEditorViewModel {\n constructor(private readonly filtersCategories: IArenaGameFiltersCategory[],\n private readonly services: IServiceFactoryExtended) {\n this._filters = this._createFiltersEditor();\n }\n\n private readonly _filters: ArenaGameFilterEditor[];\n\n get visibleFilters(): ArenaGameFilterEditor[] {\n return this._filters.filter(f => f.shouldBeDisplayed);\n }\n\n private _createFiltersEditor(): ArenaGameFilterEditor[] {\n const result: ArenaGameFilterEditor[] = [];\n\n this.filtersCategories.forEach(c => {\n c.availableFilters.forEach(f => {\n result.push(new ArenaGameFilterEditor(f));\n });\n });\n\n return this._sortFilters(result);\n }\n\n private _sortFilters(filters: ArenaGameFilterEditor[]): ArenaGameFilterEditor[] {\n\n //sorting the filters by the order in which they were defined in config.json\n const filtersConfigurations = this.services.arenas.getCurrentArena().filtersConfigurationMap;\n\n if(Check.isEmpty(filtersConfigurations)) {\n return filters;\n }\n\n return filters.sort((f1, f2) => filtersConfigurations[f1.id]?.index - filtersConfigurations[f2.id]?.index);\n }\n\n async applyFilters(): Promise<void> {\n await this.services.gamesFilter.applyFilters(this._filters.filter(f => f.on).map(f => f.id));\n }\n\n}","import {GameInfo} from '../../../games/game-info';\nimport {IArenaGameFiltersCategory} from \"../../arena-filters/categories/arena-game-filters-category.interface\";\nimport { computed, makeObservable } from \"mobx\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {GameFilterDefinitionBase} from \"../game-filter-definition-base\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\n/**\n * This class is used to apply a filter that does something like this:\n * Show all games that doesn't fall in any of the other available games filters categories for the current arena\n */\n\nexport class OtherFilterDefinition extends GameFilterDefinitionBase {\n constructor(services: IServiceFactoryExtended, private readonly allOthersCategories: IArenaGameFiltersCategory[]) {\n super(services);\n\n makeObservable(this);\n }\n\n get id(): string {\n return 'other';\n }\n\n get text(): string {\n return this.services.translation.translate('OTHER');\n }\n\n @computed\n get currentArenaCategories(): IArenaGameFiltersCategory[] {\n return this.allOthersCategories.filter(c => c.availableFilters.length > 0);\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n const categoriesInCurrentArena = this.currentArenaCategories;\n for(let category of categoriesInCurrentArena) {\n if(category.isGameIncludedInThisCategory(gameInfo)) {\n return ApplyGameFilterResult.ExcludeGame;\n }\n }\n\n return ApplyGameFilterResult.IncludeGame;\n }\n\n}\n","import {IArenaGameFiltersCategory} from \"../arena-filters/categories/arena-game-filters-category.interface\";\nimport {CategoryDefinitionId, IFilterCategoryDefinition} from \"./filter-category-definition.interface\";\nimport {IGameFilterDefinition} from \"../filters-definitions/game-filter-definition.interface\";\nimport {OtherFilterDefinition} from \"../filters-definitions/other/other.filter-definition\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../evaluators/game-filter-evaluator.interface\";\n\nexport class OtherFiltersCategoryDefinition implements IFilterCategoryDefinition {\n\n constructor(otherAvailableCategories: IArenaGameFiltersCategory[],\n private readonly services: IServiceFactoryExtended) {\n this.availableFilters = [\n new OtherFilterDefinition(services, otherAvailableCategories)\n ];\n }\n getFiltersForGame(gameInfo: GameInfo): string[] {\n throw new Error(\"Method not implemented.\");\n }\n\n readonly id: CategoryDefinitionId = null;\n\n applyFilters(gameInfo: GameInfo, filters: IGameFilterDefinition[]): ApplyGameFilterResult {\n return this.availableFilters[0].applyFilter(gameInfo);\n }\n\n get title(): string {\n return this.services.translation.translate('OTHER');\n }\n\n readonly availableFilters: IGameFilterDefinition[];\n\n get isMultiSelect(): boolean {\n return false;\n }\n\n readonly hasItsOwnFiltersOrder = false;\n}","import {ArenaGameFilterBase} from \"./arena-game-filter-base\";\nimport {IArenaGameFilter} from \"./arena-game-filter.interface\";\n\nexport class StaticArenaGameFilter extends ArenaGameFilterBase{\n get subFilters(): IArenaGameFilter[] {\n return [];\n }\n}\n","import {Check} from \"@sparkware/app-utils\";\nimport {StaticArenaGameFilter} from \"../filters/static-arena-game-filter\";\nimport {ArenaGameFiltersCategoryBase} from \"./arena-game-filters-category-base\";\nimport { computed, makeObservable } from \"mobx\";\nimport {IArenaGameFilter} from \"../filters/arena-game-filter.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {IFilterCategoryDefinition} from \"../../filters-categories-definitions/filter-category-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\nexport class StaticArenaGameFiltersCategory extends ArenaGameFiltersCategoryBase {\n constructor(categoryDefinition: IFilterCategoryDefinition,\n services: IServiceFactoryExtended) {\n super(categoryDefinition, services);\n\n makeObservable(this);\n }\n\n /**\n * Restrict available filters to only those that are defined in config.json for current arena\n */\n @computed\n get availableFilters(): IArenaGameFilter[] {\n return this._createFiltersForCurrentArena();\n }\n private _createFiltersForCurrentArena(): IArenaGameFilter[] {\n\n const currentArenaFiltersConfigurations = this.services.arenas.getCurrentArena().filtersConfigurationMap;\n if(Check.isEmpty(currentArenaFiltersConfigurations)) {\n return [];\n }\n\n return this.categoryDefinition.availableFilters\n .filter(f => currentArenaFiltersConfigurations[f.id])\n .map(f => new StaticArenaGameFilter(f, this.services));\n }\n\n get gamesCount(): NullableNumber {\n return null;\n }\n}","import styled from \"styled-components\";\n\nexport const FiltersGameListPcDefaultBox = styled.div`\n width:100%;\n padding-left: 4rem;\n padding-right: 4rem;\n padding-top: 1rem;\n`;","import {FiltersGameListPcDefaultBox} from \"./filters-game-list-pc.default.box\";\n\nexport const FiltersGameListPcBox = FiltersGameListPcDefaultBox;","import React from 'react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {FilterLinkListComponent} from '../filter-link-list/filter-link-list.component';\nimport {FiltersGameListPcBox} from \"./boxes/filters-game-list-pc.box\";\nimport {\n IArenaGameFilterEditorViewModel\n} from \"../../../services/games-filter/arena-filters/filters/arena-game-filter-editor-view-model.interface\";\nimport {\n ISimpleStrategyFiltersEditorViewModel\n} from \"../../../services/games-filter/strategies/simple-games-filter/simple-strategy-filters-editor-view-model.interface\";\n\n\ninterface FiltersGamesListPcComponentProps {\n filtersEditor: ISimpleStrategyFiltersEditorViewModel;\n}\nexport const FiltersGamesListPcComponent = observer(\n class FiltersGamesListPcComponent extends OrbitComponent<FiltersGamesListPcComponentProps> {\n\n\n private _toggleFilter = async (filter: IArenaGameFilterEditorViewModel) => {\n filter.toggleFilter();\n await this.props.filtersEditor.applyFilters();\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",this.services.routing.currentRoute.data.arenaType, filter.id);\n };\n\n render() {\n\n if(this.props.filtersEditor.visibleFilters.length === 0) {\n return null;\n }\n\n return (\n <FiltersGameListPcBox className={'cy-filters-game-list-pc'}>\n <FilterLinkListComponent filters={this.props.filtersEditor.visibleFilters} onToggle={this._toggleFilter} />\n </FiltersGameListPcBox>\n );\n }\n }\n);\n","import {IArenaGameFilter} from \"./arena-game-filter.interface\";\nimport {IGameFilterDefinition} from \"../../filters-definitions/game-filter-definition.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {NullableNumber} from \"../../../../../common/types/nullable-types\";\n\nexport class AdhocArenaGameFilter implements IArenaGameFilter {\n constructor(public readonly filterDefinition: IGameFilterDefinition,\n private readonly services: IServiceFactoryExtended) {\n }\n\n readonly isAdhocFilter = true;\n\n get id(): string {\n return this.filterDefinition.id;\n }\n\n get text(): string {\n return this.filterDefinition.text;\n }\n\n get isApplied(): boolean {\n return this.services.gamesFilter.isFilterApplied(this.id);\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n return this.filterDefinition.applyFilter(gameInfo);\n }\n \n readonly gamesCount: NullableNumber = null;\n\n readonly subFilters: IArenaGameFilter[] = [];\n}","import {IGameFilterDefinition} from '../game-filter-definition.interface';\nimport {GameInfo} from '../../../games/game-info';\nimport {removeSpaces} from \"../../../../../utils/string-helpers\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\n\nexport class CompanyFilterDefinitions implements IGameFilterDefinition {\n constructor(public readonly id: string,\n private readonly _companyName: string) {\n\n }\n getFiltersForGame(gameInfo: GameInfo): string[] {\n throw new Error('Method not implemented.');\n }\n\n get text(): string {\n return this._companyName;\n }\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n if (removeSpaces(gameInfo.companyName.toLowerCase()) === removeSpaces(this._companyName.toLowerCase())) {\n return ApplyGameFilterResult.IncludeGame;\n }\n return ApplyGameFilterResult.ExcludeGame;\n }\n\n readonly subFilters: IGameFilterDefinition[] = [];\n\n}\n","import {IArenaGameFiltersCategory} from \"./arena-game-filters-category.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {Nullable, NullableNumber} from \"../../../../../common/types/nullable-types\";\nimport {AdhocArenaGameFilter} from \"../filters/adhoc-arena-game-filter\";\nimport {CompanyFilterDefinitions} from \"../../filters-definitions/company/company.filter-definitions\";\nimport { computed, makeObservable } from \"mobx\";\nimport {ApplyGameFilterResult} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {AND} from \"../../evaluators/and-game-filters-evaluator\";\nimport {CategoryDefinitionId} from \"../../filters-categories-definitions/filter-category-definition.interface\";\nimport {\n GameVendorFiltersCategoryDefinition\n} from \"../../filters-categories-definitions/game-vendor.filters-category-definition\";\nimport {IArenaGameFilter} from \"../filters/arena-game-filter.interface\";\n\nexport class AdhocArenaGamesFiltersCategory implements IArenaGameFiltersCategory {\n constructor(private readonly services: IServiceFactoryExtended) {\n makeObservable(this);\n }\n\n readonly id: CategoryDefinitionId = 'adHoc';\n readonly title: string = 'Ad hoc filters';\n readonly gamesCount: NullableNumber = null;\n\n\n applyFilter(gameInfo: GameInfo): ApplyGameFilterResult {\n\n if(this.availableFilters.length === 0) {\n return ApplyGameFilterResult.NotApplicable;\n }\n\n return AND(...this.availableFilters).applyFilter(gameInfo);\n }\n\n\n isGameIncludedInThisCategory(gameInfo: GameInfo): boolean {\n return this.applyFilter(gameInfo) === ApplyGameFilterResult.IncludeGame;\n }\n\n @computed\n get availableFilters(): AdhocArenaGameFilter[] {\n return this._createDynamicFilters();\n }\n\n get allAppliedFiltersAndSubFilters(): IArenaGameFilter[] {\n return this.availableFilters.filter(f => f.isApplied);\n }\n\n private _createDynamicFilters(): AdhocArenaGameFilter[] {\n const result: AdhocArenaGameFilter[] = [];\n\n\n\n const currentArenaFiltersConfigurations = this.services.arenas.getCurrentArena().filtersConfigurationMap;\n\n for(let appliedFilterId of this.services.gamesFilter.currentAppliedFiltersIds) {\n if(!currentArenaFiltersConfigurations[appliedFilterId]) {\n const dynamicFilterDefinition = this._createDynamicFilterById(appliedFilterId);\n if(dynamicFilterDefinition) {\n result.push(dynamicFilterDefinition);\n }\n }\n }\n\n return result;\n }\n\n private _createDynamicFilterById(filterId: string): Nullable<AdhocArenaGameFilter> {\n const parts = filterId.split('_');\n if(parts.length < 2) {\n return null;\n }\n\n switch (parts[0]) {\n case 'vendor':\n const vendorsCategory = new GameVendorFiltersCategoryDefinition(this.services);\n const filter = vendorsCategory.getAllPreferredVendorsFilters().find(f => f.id === filterId) ?? null;\n if(filter) {\n return new AdhocArenaGameFilter(filter, this.services)\n } else {\n return null;\n }\n\n case 'company':\n return new AdhocArenaGameFilter(new CompanyFilterDefinitions(filterId, parts[1]), this.services);\n default:\n return null;\n\n }\n }\n\n get isMultiSelect(): boolean {\n return false;\n }\n}","import React from 'react';\nimport {\n FiltersGamesListMobileComponent\n} from \"../../../../components/filters/filters-games-list-mobile/filters-games-list-mobile.component\";\nimport {SimpleStrategyFiltersEditor} from \"./simple-strategy-filters-editor\";\nimport {GamesFilterStrategyBase} from \"../games-filter-strategy-base\";\nimport {OtherFiltersCategoryDefinition} from \"../../filters-categories-definitions/other.filters-category-definition\";\nimport {StaticArenaGameFiltersCategory} from \"../../arena-filters/categories/static-arena-game-filters-category\";\nimport {IArenaGameFiltersCategory} from \"../../arena-filters/categories/arena-game-filters-category.interface\";\nimport {Lazy} from \"../../../../../utils/lazy\";\nimport {IGameFilterEvaluator} from \"../../evaluators/game-filter-evaluator.interface\";\nimport {OR} from \"../../evaluators/or-game-filters-evaluator\";\nimport {AND} from \"../../evaluators/and-game-filters-evaluator\";\nimport {\n FiltersMobileButtonComponent\n} from \"../../../../components/header/top-header-left/filters/filters-mobile-button.component\";\nimport {\n IFilterIndicatorRenderingOptions,\n FilterIndicatorRenderingLocation\n} from \"../../games-filter.service.interface\";\nimport {\n FiltersGamesListPcComponent\n} from \"../../../../components/filters/filters-games-list-pc/filters-games-list-pc.component\";\nimport {Nullable} from \"../../../../../common/types/nullable-types\";\nimport {AdhocArenaGamesFiltersCategory} from \"../../arena-filters/categories/adhoc-arena-games-filters-category\";\n\nexport class SimpleGamesFilterStrategy extends GamesFilterStrategyBase {\n\n private _vendorCategory = new Lazy(() => new StaticArenaGameFiltersCategory(this._factory.createVendorsCategoryDefinition(), this.services));\n private _groupCategory = new Lazy(() => new StaticArenaGameFiltersCategory(this._factory.createGameGroupCategoryDefinition(), this.services));\n private _featuresCategory = new Lazy(() => new StaticArenaGameFiltersCategory(this._factory.createGameFeaturesCategoryDefinition(), this.services));\n private _othersCategory = new Lazy(() => new StaticArenaGameFiltersCategory(new OtherFiltersCategoryDefinition([this._vendorCategory.value, this._groupCategory.value, this._featuresCategory.value], this.services), this.services));\n private _adhocCategory = new Lazy(() => new AdhocArenaGamesFiltersCategory(this.services));\n\n protected _createFiltersCategories(): IArenaGameFiltersCategory[] {\n return [\n this._vendorCategory.value,\n this._groupCategory.value,\n this._featuresCategory.value,\n this._othersCategory.value,\n this._adhocCategory.value\n ];\n }\n\n protected _createEvaluator(): IGameFilterEvaluator | null {\n return OR(AND(this._vendorCategory.value,\n this._groupCategory.value,\n this._featuresCategory.value,\n this._adhocCategory.value),\n this._othersCategory.value);\n }\n\n private _createFiltersEditor(): SimpleStrategyFiltersEditor {\n return new SimpleStrategyFiltersEditor(this.filtersCategories, this.services);\n }\n\n showFiltersEditor(): void {\n this.services.dialog.showModal((dialogHandler) => <FiltersGamesListMobileComponent dialogHandler={dialogHandler} filtersEditor={this._createFiltersEditor()}/>, {\n title: this.services.translation.translate('FILTER'),\n mobileCenterHeader: true,\n applyMaxHeight: true\n });\n }\n\n renderMobileFiltersIndicator(): React.ReactElement {\n if(this.services.mediaQuery.lAndBelow) {\n return (<FiltersMobileButtonComponent/>);\n } else {\n return null;\n }\n\n }\n\n renderFiltersIndicator(): Nullable<IFilterIndicatorRenderingOptions> {\n if(this.services.mediaQuery.lAndBelow) {\n return null;\n } else {\n return {\n location: FilterIndicatorRenderingLocation.BelowArenaTitle,\n reactElement: (<FiltersGamesListPcComponent filtersEditor={this._createFiltersEditor()}/>)\n };\n }\n }\n\n protected _reportApplyFiltersByDeepLink(): void {\n // we don't report analytics for simple filters\n }\n\n getNumberOfGamesBeforeUserApply(filterIDS: string[]): number {\n return 0;\n }\n}","import React from \"react\";\nimport {ArenaBaseModel, VideoSlidesFilterConfig} from \"../arena-base.model\";\nimport {\n ArenaConfiguration, ArenaGamesGridConfiguration,\n SwiperGamesListConfiguration\n} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {CasinoArenaComponent} from \"../../../../../components/arena-host/casino-arena/casino-arena.component\";\nimport {GameInfo} from \"../../../../games/game-info\";\nimport {\n CASINO_GAMES_ARENA_NAME,\n EXCLUSIVE_ARENA_NAME,\n JACKPOTS_ARENA_NAME,\n SLOTS_ARENA_NAME\n} from \"../../../arena-consts\";\nimport {computed, makeObservable} from \"mobx\";\nimport {ArenaFiltersConfigurationMap} from \"../arena-view-model.interface\";\nimport {filtersConfigurationToMap} from \"../../filters-configuration-to-map\";\nimport {IGamesFilterStrategy} from \"../../../../games-filter/strategies/games-filter-strategy.interface\";\nimport {\n AdvancedGamesFilterStrategy\n} from \"../../../../games-filter/strategies/advanced-filter/advanced-games-filter.strategy\";\nimport {\n SimpleGamesFilterStrategy\n} from \"../../../../games-filter/strategies/simple-games-filter/simple-games-filter.strategy\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport {ListsSortOrderStorage} from \"../../lists-sort-order-storage\";\n\nexport class CasinoLobbyArenaModel extends ArenaBaseModel {\n constructor(arenaName: string,\n services: IServiceFactoryExtended,\n postLoginListsSortOrderStorage: ListsSortOrderStorage) {\n super(arenaName, services, postLoginListsSortOrderStorage);\n\n makeObservable(this);\n }\n\n get maxSwipersToShow(): number {\n return 20;\n }\n\n get maxGamesToShowInList(): number {\n return 30;\n }\n\n private get config(): ArenaConfiguration {\n return this.services.configuration.data.arenas[this.arenaName]\n }\n\n protected _getSwipersConfigurations(): SwiperGamesListConfiguration[] {\n return this.config.swiperGamesList || [];\n }\n\n protected _getGridsConfigurations(): ArenaGamesGridConfiguration[] {\n return this.config.allGamesGrid || [];\n }\n\n renderArena(): React.ReactElement | null {\n return <CasinoArenaComponent key={this.arenaName} arenaName={this.arenaName} />;\n }\n\n protected _getPromotionalBannerConfig() {\n const bannerConfig = this.config.promotionalBanner;\n if (!bannerConfig) {\n return null;\n }\n\n if (this.services.device.hybrid.isEmbedded) {\n return null;\n }\n\n return {\n position: bannerConfig.displayListPlace || 2,\n templateID: bannerConfig.templateID,\n componentID: bannerConfig.componentID,\n bannerAdminPlaceholderId: bannerConfig.bannerAdminPlaceholderId\n }\n }\n \n protected _getVideoSlidesFilterConfig(): VideoSlidesFilterConfig | null {\n const videoSlideFilterConfig = this.config.videoSlidesFilterPreview;\n if(!videoSlideFilterConfig) {\n return null;\n }\n\n return {\n position: videoSlideFilterConfig.displayListPlace,\n filterIds: videoSlideFilterConfig.advancedFilterIdList\n }\n }\n\n filterGamesByArenaType(gamesInfo: GameInfo[]): GameInfo[] {\n switch (this.arenaName) {\n case SLOTS_ARENA_NAME:\n case JACKPOTS_ARENA_NAME:\n return gamesInfo.filter(g => g.isVideoSlot);\n case EXCLUSIVE_ARENA_NAME:\n return gamesInfo.filter(g => g.isVideoSlot || g.isCasinoGame);\n case CASINO_GAMES_ARENA_NAME:\n return gamesInfo.filter(g => g.isCasinoGame);\n\n default:\n return gamesInfo.filter(g => !g.isLiveCasino);\n }\n }\n @computed\n get filtersConfigurationMap(): ArenaFiltersConfigurationMap {\n return filtersConfigurationToMap(this.config.filters);\n }\n\n getGamesFilteringStrategy(): IGamesFilterStrategy {\n if (this.useAdvancedFilters) {\n return new AdvancedGamesFilterStrategy(this.services);\n }\n return new SimpleGamesFilterStrategy(this.services);\n }\n}\n","import React from \"react\";\nimport {ArenaFiltersConfigurationMap, IArenaViewModel} from \"../arena-view-model.interface\";\nimport {GameInfo} from \"../../../../games/game-info\";\nimport {IGamesFilterStrategy} from \"../../../../games-filter/strategies/games-filter-strategy.interface\";\nimport {NoGamesFilterStrategy} from \"../../../../games-filter/strategies/no-filter/no-games-filter.strategy\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\n\nexport class VoidArenaModel implements IArenaViewModel {\n constructor(private readonly services: IServiceFactoryExtended) {\n }\n get arenaName(): string {\n return 'voidArena';\n }\n\n get listsCount(): number {\n return 0;\n }\n\n renderArena(): React.ReactElement | null {\n return null;\n }\n\n renderList(listPosition: number): React.ReactElement | null {\n return null;\n }\n\n getNextBatchSize(currentListPosition: number): number {\n return 0;\n }\n\n filterGamesByArenaType(gamesInfo: GameInfo[]): GameInfo[] {\n return [];\n }\n\n readonly allArenaGamesForFiltering: GameInfo[] = [];\n\n readonly filteredGamesCount: number = 0;\n\n readonly filtersConfigurationMap: ArenaFiltersConfigurationMap = {};\n getGamesFilteringStrategy(): IGamesFilterStrategy {\n return new NoGamesFilterStrategy(this.services);\n }\n}","import {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IGamesListModel} from \"./lists/games-list-model.interface\";\n\nconst POST_LOGIN_LISTS_ORDER_KEY = \"cgp-post-login-lists-order\";\n\ninterface IPostLoginListsOrder {\n lists: Record<string, string[]>;\n}\n\nexport class ListsSortOrderStorage {\n constructor(private readonly services: IServiceFactoryExtended) {\n }\n\n private _createEmptyListsOrder(): IPostLoginListsOrder {\n return {\n lists: {}\n };\n }\n\n private _listsSavedOrder: IPostLoginListsOrder = null;\n private _getSavedListsOrder(): IPostLoginListsOrder {\n if(!this._listsSavedOrder) {\n this._listsSavedOrder = this.services.localStorage.getJson(POST_LOGIN_LISTS_ORDER_KEY) || this._createEmptyListsOrder();\n }\n return this._listsSavedOrder;\n }\n\n saveSortOrder(arenaName: string, lists: IGamesListModel[]): void {\n const listsOrder = this._getSavedListsOrder();\n listsOrder.lists[arenaName] = lists.map(list => list.title.translationKey);\n this.services.localStorage.setJson(POST_LOGIN_LISTS_ORDER_KEY, listsOrder);\n }\n\n sortLists(arenaName: string, lists: IGamesListModel[]): IGamesListModel[] {\n const arenaListsOrder = this._getSavedListsOrder().lists[arenaName] || [];\n if(arenaListsOrder.length === 0) {\n return lists;\n }\n\n const listsOrderMap = arenaListsOrder.reduce<Record<string, number>>((map, listTitle, index) => {\n map[listTitle] = index;\n return map;\n }, {});\n\n\n return lists.sort((l1, l2) => (listsOrderMap[l1.title.translationKey] || 0) - (listsOrderMap[l2.title.translationKey] || 0));\n\n }\n}","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoFilterButtonLabelBox = styledBox(\"LiveCasinoFilterButtonLabelBox\");\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoArenaNavbarButtonBox = styledBox(\"LiveCasinoArenaNavbarButtonBox\");\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {observer} from \"mobx-react\";\n// import {LiveCasinoFilterButtonIconBox} from \"./boxes/live-casino-filter-button-icon/live-casino-filter-button-icon.box\";\nimport {LiveCasinoFilterButtonLabelBox} from \"./boxes/live-casino-filter-button-label/live-casino-filter-button-label.box\";\nimport {ACTIVE} from \"../../../../themes/css-global-classes\";\nimport {LiveCasinoArenaNavbarButtonBox} from \"./boxes/live-casino-arena-navbar-button/live-casino-arena-navbar-button.box\";\nimport {Link} from \"../../../raw-components/link/link\";\nimport {LiveCasinoArenaNavbarButtonWrapperBox} from \"./boxes/live-casino-arena-navbar-button/wrapper/live-casino-arena-navbar-button-wrapper.box\";\n\nexport interface LiveCasinoArenaNavbarButtonProps {\n labelTranslationKey: string;\n filter: string;\n isActiveTab: boolean;\n seoPage: string;\n onClick: () => void;\n};\n\nexport const LiveCasinoArenaNavbarButton = observer(\n class LiveCasinoArenaNavbarButton extends OrbitComponent<LiveCasinoArenaNavbarButtonProps> {\n\n private buttonIconMap = new Map([\n [\"ITALIAN_GAMES\", this.services.theme.currentTheme.icons.italianSpeakingIcon],\n [\"TOP_EVO_GAMES\", this.services.theme.currentTheme.icons.topGamesIcon],\n [\"ROULETTE\", this.services.theme.currentTheme.icons.rouletteIcon],\n [\"POKER_GAMES\", this.services.theme.currentTheme.icons.pokerIcon],\n [\"BLACKJACK\", this.services.theme.currentTheme.icons.blackjackIcon],\n [\"BACCARAT\", this.services.theme.currentTheme.icons.baccaratIcon],\n [\"ELITE_LOUNGE\", this.services.theme.currentTheme.icons.eliteLoungeIcon],\n [\"GAME_SHOWS\", this.services.theme.currentTheme.icons.gameShowsIcon],\n [\"NEW_GAMES\", this.services.theme.currentTheme.icons.newGamesIcon],\n [\"EXCLUSIVE\", this.services.theme.currentTheme.icons.tripleEightExclusiveIcon],\n [\"SPEED_GAMES\", this.services.theme.currentTheme.icons.speedGames]\n ]);\n\n private _getButtonIcon() {\n return this.buttonIconMap.get(this.props.labelTranslationKey);\n }\n\n private _getLabelTranslationKey(): string {\n //this if is a duplicate with the one in live-casino-arena-grid.component.tsx\n // in the future we should look for a way to refactor this for_you logic and have it come from the admin somehow, have only one source of truth\n let currentTranslationKey = this.props.labelTranslationKey;\n if (this.services.user.isAuthorized && currentTranslationKey === \"TOP_EVO_GAMES\") {\n currentTranslationKey = \"FOR_YOU_GAMES\";\n }\n\n return currentTranslationKey;\n }\n\n onFilterClicked(isActive: boolean) {\n if (!isActive) {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\", \"Live Tab\", this._getLabelTranslationKey());\n this.props && this.props.onClick();\n }\n }\n\n render() {\n let IconComponent = this._getButtonIcon();\n return <LiveCasinoArenaNavbarButtonWrapperBox>\n <Link box={LiveCasinoArenaNavbarButtonBox}\n href={this.props.seoPage}\n className={\n classNames(\n 'cy-live-casino-filter-button' + (this.props.filter ? ('-' + this.props.filter) : ''),\n {[ACTIVE]: this.props.isActiveTab})\n }\n onClick={() => this.onFilterClicked(this.props.isActiveTab)}\n >\n <IconComponent size={this.services.mediaQuery.lAndBelow ? 2 : 2.2} sizeIsHeight backdropOpacity={this.props.isActiveTab ? 0.2 : 0}/>\n <LiveCasinoFilterButtonLabelBox\n className={classNames({[ACTIVE]: this.props.isActiveTab})}\n >\n {this.services.translation.translate(this._getLabelTranslationKey())}\n </LiveCasinoFilterButtonLabelBox>\n </Link>\n </LiveCasinoArenaNavbarButtonWrapperBox>;\n }\n }\n);\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {NewLiveCasinoConfiguration} from '../../../services/configurations/config-data-sections/arenas.configuration';\nimport {TopImageComponent} from '../../top-image/top-image.component';\nimport {SeoBreadCrumbsComponent} from '../seo-bread-crumbs/seo-bread-crumbs.component';\nimport {LiveCasinoArenaNavbar} from \"./live-casino-arena-navbar/live-casino-arena-navbar.component\";\nimport {LiveCasinoArenaGrid} from \"./live-casino-arena-grid/live-casino-arena-grid.component\";\nimport {OrbitComponentWithState} from '../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport {IStickyHandler} from \"../../sticky-handler/sticky-handler.interface\";\nimport {LiveCasinoArenaNavbarButton} from \"./live-casino-arena-navbar/live-casino-arena-navbar-button.component\";\nimport {LIVE_CASINO_PAGE_WRAPPER} from '../../../themes/css-global-classes';\nimport {LinkToOfferComponent} from \"../../link-to-offer/link-to-offer.component\";\nimport {DailyDealComponent} from \"../../daily-deal/daily-deal.component\";\nimport {FreeToPlayAnimatedIconComponent} from '../../free-to-play-animated-icon/free-to-play-animated-icon.component';\n\nexport interface NewLiveCasinoArenaComponentProps {\n configs: NewLiveCasinoConfiguration;\n arenaName: string;\n}\n\nexport interface INewLiveCasinoArenaComponentState {\n}\n\nconst SEO_CATEGORY = 'LIVE_CASINO_NEW';\n\nexport const NewLiveCasinoArenaComponent = observer(\n class NewLiveCasinoArenaComponent extends OrbitComponentWithState<NewLiveCasinoArenaComponentProps, INewLiveCasinoArenaComponentState> {\n\n private _stickyHandler: IStickyHandler;\n private _topImageRef = React.createRef<HTMLDivElement>();\n\n componentDidMount() {\n super.componentDidMount();\n }\n\n private get stickyHandler(): IStickyHandler {\n if (!this._stickyHandler && this._topImageRef?.current) {\n this._stickyHandler = this.services.stickyHandlerFactory.createStickyHandler();\n } else {\n return this.services.stickyHandlerFactory.createStickyHandler();\n }\n\n return this._stickyHandler;\n }\n\n private _renderLinkToOffer() {\n return (\n <>\n <LinkToOfferComponent linkToOfferConfig={this.props.configs.linkToOffer} />\n <FreeToPlayAnimatedIconComponent />\n </>\n );\n }\n\n render() {\n return (\n <div className={`${LIVE_CASINO_PAGE_WRAPPER} cy-new-live-casino`}>\n\n <TopImageComponent image={this.props.configs.topImage} topImageRef={this._topImageRef} animatedBanner={this.props.configs.animatedTopImage} />\n\n {\n this.services.liveTableFeeds.isNavbarVisible && <LiveCasinoArenaNavbar\n title={this.props.configs.title}\n configs={this.services.liveTableFeeds.liveArenaTabsConfiguration}\n stickyHandler={this.stickyHandler}\n FilterButtonComponent={LiveCasinoArenaNavbarButton}\n />\n }\n\n <LiveCasinoArenaGrid\n seoCategory={SEO_CATEGORY}\n promotionalBannerConfig={this.props.configs.promotionalBanner}\n useAISortedList={this.props.configs.useAISortedList} />\n\n <SeoBreadCrumbsComponent arenaName={this.props.arenaName} config={this.props.configs.seoSection} />\n\n {this._renderLinkToOffer()}\n <DailyDealComponent />\n </div>\n );\n\n\n }\n }\n);\n","import {ArenaFiltersConfigurationMap, IArenaViewModel} from \"../arena-view-model.interface\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport React from \"react\";\nimport {OrbitSuspense} from \"../../../../../components/base-components/orbit-suspense/orbit-suspense\";\nimport {NewLiveCasinoArenaComponent} from \"../../../../../components/arena-host/new-live-casino-arena/new-live-casino-arena.component\";\nimport {GameInfo} from \"../../../../games/game-info\";\nimport {filtersConfigurationToMap} from \"../../filters-configuration-to-map\";\nimport {ArenaConfiguration} from \"../../../../configurations/config-data-sections/arenas.configuration\";\nimport {IGamesFilterStrategy} from \"../../../../games-filter/strategies/games-filter-strategy.interface\";\nimport {\n SimpleGamesFilterStrategy\n} from \"../../../../games-filter/strategies/simple-games-filter/simple-games-filter.strategy\";\n\nexport class NewLiveCasinoArenaModel implements IArenaViewModel {\n constructor(public readonly arenaName: string,\n private readonly services: IServiceFactoryExtended) {\n }\n\n get listsCount(): number {\n return 0;\n }\n\n renderList(listPosition: number): React.ReactElement | null {\n return null;\n }\n\n getNextBatchSize(currentListPosition: number): number {\n return 0;\n }\n\n get configs(): ArenaConfiguration {\n return this.services.configuration.data.arenas[this.arenaName];\n }\n\n renderArena(): React.ReactElement | null {\n return (\n <OrbitSuspense>\n <NewLiveCasinoArenaComponent key={this.arenaName}\n arenaName={this.arenaName}\n configs={this.configs}/>\n </OrbitSuspense>\n );\n }\n\n filterGamesByArenaType(gamesInfo: GameInfo[]): GameInfo[] {\n return gamesInfo.filter(g => g.isLiveCasino);\n }\n\n get allArenaGamesForFiltering(): GameInfo[] {\n return [];\n }\n\n readonly filteredGamesCount: number = 0;\n\n get filtersConfigurationMap(): ArenaFiltersConfigurationMap {\n return filtersConfigurationToMap(this.configs.filters);\n }\n\n getGamesFilteringStrategy(): IGamesFilterStrategy {\n return new SimpleGamesFilterStrategy(this.services);\n }\n\n}","import {CasinoLobbyArenaModel} from \"../casino-lobby/casino-lobby-arena.model\";\nimport {Check} from \"@sparkware/app-utils\";\n\nexport class NewLiveCasinoArenaAbModel extends CasinoLobbyArenaModel {\n get sortingGametypesMapOverride(): Record<number, number> | null {\n return Check.isEmpty(this.services.liveTableFeeds.aiSortingGamesMap) ? null : this.services.liveTableFeeds.aiSortingGamesMap;\n }\n}","import styled, {css} from \"styled-components\";\nimport {HEADER_Z_INDEX} from \"../../../header/header-consts\";\n\ninterface IBottomStickyNavbarContainerBoxProps {\n shouldElevate: boolean;\n}\n\n\nexport const BottomNavigationBarContainerDefaultBox = styled.div<IBottomStickyNavbarContainerBoxProps>`\n position: fixed;\n bottom: 0;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: calc(100% - env(safe-area-inset-right) - env(safe-area-inset-left));\n }\n \n touch-action: none;\n z-index: ${HEADER_Z_INDEX};\n\n ${props => props.shouldElevate && css`\n z-index: 115;\n `}\n`;\n","import {BottomNavigationBarContainerDefaultBox} from \"./bottom-navigation-bar-container.default.box\";\n\nexport const BottomNavigationBarContainerBox = BottomNavigationBarContainerDefaultBox;\n","import styled from \"styled-components\";\n\nexport const BottomNavigationBarMenuItemsListDefaultBox = styled.div`\n display: flex;\n padding-top: 5px;\n position: relative;\n`;\n","import {BottomNavigationBarMenuItemsListDefaultBox} from \"./bottom-navigation-bar-menu-items-list.default.box\";\n\nexport const BottomNavigationBarMenuItemsListBox = BottomNavigationBarMenuItemsListDefaultBox;\n","import React from \"react\";\nimport {BottomNavigationBarMenuItemsListBox} from \"./boxes/menu-items-list/bottom-navigation-bar-menu-items-list.box\";\nimport {IMenuItemRenderer} from \"../../services/menu-items-common/renderer/menu-item.renderer.interface\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface BottomNavigationBarMenuItemsListComponentProps extends ComponentServicesPick<'bottomNavigationBar'> {\n\n}\nconst ComponentBody: React.FC<BottomNavigationBarMenuItemsListComponentProps> = observer((props) => {\n\n const _renderMenuItem = (menuItem: IMenuItemRenderer) => {\n\n return (\n <React.Fragment key={menuItem.key}>\n {menuItem.renderMenuItem()}\n </React.Fragment>\n );\n }\n\n const menuItems = props.bottomNavigationBar.getMenuItems();\n\n if(menuItems.length === 0) {\n return null;\n }\n return (\n <React.Fragment>\n <BottomNavigationBarMenuItemsListBox className={CyClass('cy-hybrid-embedded-nav-menu-list')}>\n {menuItems.map(menuItem => _renderMenuItem(menuItem))}\n </BottomNavigationBarMenuItemsListBox>\n </React.Fragment>\n );\n});\n\n\nexport const BottomNavigationBarMenuItemsListComponent = withServices(ComponentBody, [\"bottomNavigationBar\"]);","import styled from \"styled-components\";\n\nconst BottomNavigationBarMenuItemsContainerDefaultBox = styled.div`\n padding-bottom: calc(env(safe-area-inset-bottom) + 6px);\n background-color: ${props => props.theme.colors.backgroundDark};\n`;\n\nexport const BottomNavigationBarMenuItemsContainerBox = BottomNavigationBarMenuItemsContainerDefaultBox;\n","import React, {useCallback, useEffect, useRef} from 'react';\nimport {observer} from 'mobx-react';\nimport {BottomNavigationBarContainerBox} from \"./boxes/container/bottom-navigation-bar-container.box\";\nimport {BottomNavigationBarMenuItemsListComponent} from \"./bottom-navigation-bar-menu-items-list.component\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport classNames from 'classnames';\nimport {HYBRID_EMBEDDED_NAV_MENU} from \"./bottom-navigation-bar-consts\";\nimport {BottomNavigationBarMenuItemsContainerBox} from \"./boxes/container/bottom-navbar-menu-item-container.box\";\nimport {useServices} from '../../react-hooks/use-services.hook';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {FlexFixedSizeItemBox} from '../../themes/architecture/css-helpers/flex';\n\ninterface BottomNavigationBarComponentProps extends ComponentServicesPick<'bottomNavigationBar'> {\n isInVideoSlidesArena?: boolean;\n}\n\nconst ComponentBody: React.FC<BottomNavigationBarComponentProps> = observer((props) => {\n const services = useServices();\n const spacerBoxRef = useRef<HTMLDivElement | null>(null);\n\n if (!props.bottomNavigationBar.isBottomNavigationEnabled && !Boolean(props.isInVideoSlidesArena)) {\n return null;\n }\n\n const captureBottomNavbarBox = useCallback((r: HTMLDivElement | null) => {\n props.bottomNavigationBar.setBottomNavBarRef(r);\n }, [props.bottomNavigationBar]);\n\n // instead of using \"bottomNavbarHeight\" directly in render (return statement) so the component will respond to observable changes\n // i do this useEffect to avoid unnecessary rerenders and maybe recreation of elements ref.\n useEffect(() => {\n const spacerHeight = props.bottomNavigationBar.bottomNavbarHeight + 'px';\n if (spacerBoxRef.current) {\n spacerBoxRef.current.style.height = spacerHeight;\n }\n }, [props.bottomNavigationBar.bottomNavbarHeight]);\n\n return (\n <>\n <FlexFixedSizeItemBox ref={spacerBoxRef} style={{marginBottom: \"env(safe-area-inset-bottom)\", height: \"5rem\"}} />\n <BottomNavigationBarContainerBox\n shouldElevate={services.spinner.isSpinning}\n ref={captureBottomNavbarBox}\n className={classNames(HYBRID_EMBEDDED_NAV_MENU, CyClass('cy-hybrid-embedded-nav-menu'))}\n >\n <BottomNavigationBarMenuItemsContainerBox>\n <BottomNavigationBarMenuItemsListComponent />\n </BottomNavigationBarMenuItemsContainerBox>\n </BottomNavigationBarContainerBox>\n </>\n );\n});\n\nexport const BottomNavigationBarComponent = withServices(ComponentBody, ['bottomNavigationBar']);","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesArenaBox = styledBox(\"VideoSlidesArenaBox\");\n ","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesArenaHeaderBox = styledBox(\"VideoSlidesArenaHeaderBox\");","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesArenaFiltersIndicatorBox = styledBox(\"VideoSlidesArenaFiltersIndicatorBox\");","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlideFilterButtonBox = styledBox('VideoSlideFilterButtonBox');\n","import styled from \"styled-components\";\n\nexport const VideoSlideFilterButtonIconBox = styled.div`\n margin-right: 6px;\n`","import React, {useRef} from 'react';\nimport {observer} from \"mobx-react\";\nimport {useServices} from '../../../../../../react-hooks/use-services.hook';\nimport {FlexGrowItemBox} from '../../../../../../themes/architecture/css-helpers/flex';\nimport {VideoSlideFilterButtonBox} from \"./video-slide-filter-button/video-slide-filter-button.box\";\nimport {VideoSlideFilterButtonIconBox} from \"./video-slide-filter-button-icon.box\";\nimport {ISvgIconProps} from \"../../../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IVideoSlidesFilterViewModel} from '../../../../../../services/video-slides/models/video-slides-filter-editor/video-slides-filter-view-model.interface';\n\ninterface VideoSlidesHeaderFilterButtonComponentProps {\n videoSlidesFilterEditor: IVideoSlidesFilterViewModel;\n textTranslationKey: string;\n isActive?: boolean;\n icon?: React.ComponentType<ISvgIconProps>;\n\n}\n\nexport const VideoSlidesHeaderFilterButtonComponent: React.FC<VideoSlidesHeaderFilterButtonComponentProps> = observer((props) => {\n const services = useServices();\n let filterButtonRef = useRef(null);\n\n React.useEffect(() => {\n if (filterButtonRef.current && props.videoSlidesFilterEditor.on) {\n setTimeout(() => {\n filterButtonRef.current?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center'\n });\n \n }, 300);\n }\n }, [props.videoSlidesFilterEditor.on]);\n\n const renderIcon = () => {\n if (Check.isEmpty(props.icon)) {\n return null;\n }\n\n let Icon = props.icon;\n let iconStyle: React.CSSProperties = props.videoSlidesFilterEditor.on ? {color: services.theme.currentTheme.colors.brandPrimary} : {};\n return (\n <VideoSlideFilterButtonIconBox>\n <Icon size={2} style={iconStyle} />\n </VideoSlideFilterButtonIconBox>\n );\n };\n\n const getClassName = () => `cy-videos-slides-filter-${props.videoSlidesFilterEditor.on ? 'active' : 'disabled'}`;\n\n const onClickHandler = async () => {\n await props.videoSlidesFilterEditor.applyFilter();\n }\n\n return (\n <FlexGrowItemBox ref={filterButtonRef}>\n <VideoSlideFilterButtonBox\n className={getClassName()}\n isActive={props.videoSlidesFilterEditor.on}\n onClick={onClickHandler} \n >\n {renderIcon()}\n {services.translation.translate(props.textTranslationKey)}\n </VideoSlideFilterButtonBox>\n </FlexGrowItemBox>\n );\n})","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {VideoSlidesArenaFiltersIndicatorBox} from './boxes/video-slides-arena-filters-indicator.box';\nimport {useServices} from '../../../../../../react-hooks/use-services.hook';\nimport {\n VideoSlidesHeaderFilterButtonComponent\n} from \"../video-slides-header-filter-button/video-slides-header-filter-button.component\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IVideoSlidesFilterViewModel} from '../../../../../../services/video-slides/models/video-slides-filter-editor/video-slides-filter-view-model.interface';\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\n\nexport const VideoSlidesArenaFiltersIndicator: React.FC = observer(() => {\n const services = useServices();\n\n const renderSingleFilter = (videoSlidesFilter: IVideoSlidesFilterViewModel) => {\n if (!videoSlidesFilter.shouldBeDisplayed) {\n return null;\n }\n\n return <VideoSlidesHeaderFilterButtonComponent\n key={videoSlidesFilter.title}\n videoSlidesFilterEditor={videoSlidesFilter}\n textTranslationKey={videoSlidesFilter.title}\n icon={Check.isNullOrUndefined(videoSlidesFilter.icon) ? null : services.theme.currentTheme.icons[videoSlidesFilter.icon]}\n />\n }\n\n return (\n <VideoSlidesArenaFiltersIndicatorBox className={CyClass('cy-video-slides-filters-container')}>\n {services.videoSlides.videoSlidesFilters.map(filterConfig => renderSingleFilter(filterConfig))}\n </VideoSlidesArenaFiltersIndicatorBox>\n );\n})","import styled from \"styled-components\";\nimport {RegulatoryDataComponent} from \"../../../../header/top-header-left/regulatory-data/regulatory-data.component\";\n\nexport const VideoSlideRegulatoryDataBox = styled(RegulatoryDataComponent)`\n position: static;\n`","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const VideoSlidesUserMenuButtonBox = styledBox('VideoSlidesUserMenuButtonBox');\n\n\n\n","import styled from \"styled-components\";\nimport {HEADER_Z_INDEX} from \"../../../../../header/header-consts\";\n\nexport const VideoSlidesArenaRegulatoryDataBox = styled.div`\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: space-between;\n z-index: ${HEADER_Z_INDEX + 1};\n`","import styled from \"styled-components\";\n\nexport const LicenseStatusBox = styled.div`\n cursor: pointer;\n text-decoration: underline;\n white-space: nowrap;\n color: ${props => props.theme.colors.textLight};\n padding-top: calc(env(safe-area-inset-top) + 0.5rem);\n`","import styled from \"styled-components\";\n\nexport const LicenseTextLinkBox = styled.span`\n text-decoration: underline;\n color: ${props => props.theme.colors.textLight};\n font-size: 1.5rem;\n cursor: pointer;\n`","import React from 'react';\nimport {observer} from \"mobx-react-lite\";\nimport {useServices} from \"../../../../../../react-hooks/use-services.hook\";\nimport {LicenseTextLinkBox} from \"../../boxes/regulatory/license-status/license-text-link.box\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\n\nexport const VideoSlidesLicensePopupContentComponent: React.FC = observer(() => {\n const services = useServices();\n\n /** Takes the str string and replaces the first occurrence of substr with the first React Element in the reactElements array,\n the second occurrence of substr with the second React Element in the reactElements array and so on\n This kind of logic is needed when we have a large text (which needs to be translated) which also needs to contain links and stylized pieces of text.\n **/\n\n const replaceWithReactElement = (str: string, substr: string, reactElements: React.ReactElement[]): (string | React.ReactElement)[] => {\n\n if (reactElements.length === 0) {\n return [str];\n }\n\n const parts = str.split(substr);\n let elArrIndex = 0;\n\n return parts.reduce((acc, part, index) => {\n acc.push(part);\n\n if (index < parts.length - 1) {\n acc.push(React.cloneElement(reactElements[elArrIndex], { key: index }));\n if (elArrIndex < reactElements.length - 1) {\n elArrIndex++;\n }\n }\n\n return acc;\n }, []);\n }\n\n return (\n <>\n {\n replaceWithReactElement(\n services.translation.translate(\"UK_LICENSE_TEXT\"),\n \"#UK-LICENSE-PAGE-LINK#\",\n [\n <LicenseTextLinkBox\n onClick={() => services.linksNavigation.openGamblingCommissionLink()}\n className={CyClass('cy-license-status-gc-link')}\n >\n {services.translation.translate('UK_LICENSE_GC_PAGE_LINK')}\n </LicenseTextLinkBox>,\n <LicenseTextLinkBox\n onClick={() => services.linksNavigation.openResponsibleGaming()}\n className={CyClass('cy-license-status-rg-link')}\n >\n {services.translation.translate('UK_LICENSE_RG_PAGE_LINK')}\n </LicenseTextLinkBox>\n ]\n )\n }\n </>\n );\n})","import React from 'react';\nimport {observer} from \"mobx-react-lite\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {HeaderWelcomeButtonsForAuthorizedUserMobileViewComponent} from \"../../../header/welcome-buttons/authorized-user/mobile-view/header-welcome-buttons-for-authorized-user-mobile-view.component\";\nimport {VideoSlidesArenaHeaderBox} from \"./boxes/video-slides-arena-header.box\";\nimport {VideoSlidesArenaFiltersIndicator} from './components/video-slides-arena-filters-indicator/video-slides-arena-filters-indicator.component';\nimport {VideoSlideRegulatoryDataBox} from './boxes/video-slide-regulatory-data.box';\nimport {\n VideoSlidesUserMenuButtonBox\n} from \"./components/video-slides-header-filter-button/video-slides-user-menu-button/video-slides-user-menu-button.box\";\nimport {VideoSlidesArenaRegulatoryDataBox} from './boxes/regulatory/video-slides-arena-regulatory-data.box';\nimport {VideoSlidesArenaHeaderConfiguration} from '../../../../services/configurations/config-data-sections/arenas.configuration';\nimport {Check} from '@sparkware/app-utils';\nimport {DialogButtonClickHandleResultEnum} from \"./../../../../services/dialog/dialog.service.interface\";\nimport {LicenseStatusBox} from \"./boxes/regulatory/license-status/license-status.box\";\nimport {\n VideoSlidesLicensePopupContentComponent\n} from \"./components/video-slides-license-popup-content/video-slides-license-popup-content.component\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {MinimumGamblingAgeComponent} from '../../../responsible-gambling/minimum-gambling-age/minimum-gambling-age.component';\n\nexport const VideoSlidesHeaderArena: React.FC = observer(() => {\n const services = useServices();\n\n const renderHeaderWelcomeButtonsForAuthorizedUserMobile = () => {\n if (services.user.isAuthorized) {\n return (\n <VideoSlidesUserMenuButtonBox>\n <HeaderWelcomeButtonsForAuthorizedUserMobileViewComponent />\n </VideoSlidesUserMenuButtonBox>\n );\n }\n }\n\n const renderLicenseStatus = () => {\n const videoSlidesArenaHeaderConfiguration: VideoSlidesArenaHeaderConfiguration = services.configuration.data.arenas.videoSlidesArena.header;\n if (Check.isNullOrUndefined(videoSlidesArenaHeaderConfiguration?.licenseStatus) || videoSlidesArenaHeaderConfiguration?.licenseStatus.display === false) {\n return null;\n }\n\n return (\n <LicenseStatusBox onClick={_showLicenseStatusDialog} className={CyClass('cy-license-status-button')}>\n {services.translation.translate(videoSlidesArenaHeaderConfiguration?.licenseStatus.text)}\n </LicenseStatusBox>\n );\n }\n\n const renderMinimumGamblingAge = () => {\n const videoSlidesArenaHeaderConfiguration: VideoSlidesArenaHeaderConfiguration = services.configuration.data.arenas.videoSlidesArena.header;\n if (Check.isNullOrUndefined(videoSlidesArenaHeaderConfiguration?.minimumGamblingAge) || videoSlidesArenaHeaderConfiguration?.minimumGamblingAge.display === false) {\n return null;\n }\n\n return <MinimumGamblingAgeComponent />\n }\n\n const _showLicenseStatusDialog = () => {\n const WarningIcon = services.theme.currentTheme.icons.warningSignIcon;\n services.dialog.showSimpleTextModal({\n title: services.translation.translate(\"UK_LICENSE_STATUS\"),\n text: <VideoSlidesLicensePopupContentComponent/>,\n showEmptyTitle: true,\n icon: <WarningIcon style={{display: \"inline\"}} size={5.6} />,\n disableFullscreenMobile: true,\n buttons: [\n {\n text: services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n }\n\n\n return (\n <>\n <VideoSlidesArenaRegulatoryDataBox>\n <VideoSlideRegulatoryDataBox attachToHeaderService={true} />\n {renderLicenseStatus()}\n {renderMinimumGamblingAge()}\n </VideoSlidesArenaRegulatoryDataBox>\n <VideoSlidesArenaHeaderBox>\n <VideoSlidesArenaFiltersIndicator />\n {renderHeaderWelcomeButtonsForAuthorizedUserMobile()}\n </VideoSlidesArenaHeaderBox>\n </>\n );\n})","import styled from \"styled-components\";\n\n\nexport const SparkSwiperBox = styled.div`\n width: 100%;\n height: 100%;\n overflow: hidden;\n position: relative;\n`\n","import styled from \"styled-components\";\n\nexport const SparkSwiperSlideBox = styled.div`\n width: 100%;\n height: 100%;\n position: absolute;\n`","import React, {CSSProperties, useCallback, useEffect, useRef} from 'react';\nimport {observer} from \"mobx-react\";\nimport {SparkSwiperSlideBox} from \"./boxes/spark-swiper-slide.box\";\nimport {ISparkSwiperSlideController} from \"./models/spark-swiper-slide-controller.interface\";\nimport {SPARK_SWIPE_DELTA_THRESHOLD} from \"./spark-swiper-consts\";\nimport {ISparkSwiperController} from \"./models/spark-swiper-controller.interface\";\n\ninterface SparkSwiperSlideComponentProps {\n slideController: ISparkSwiperSlideController;\n swiperController: ISparkSwiperController;\n touchMoveDelta: number;\n animationStarted: boolean;\n onTransitionEnd?: () => void;\n}\nexport const SparkSwiperSlideComponent: React.FC<SparkSwiperSlideComponentProps> = observer((props) => {\n const elementRef = useRef<HTMLDivElement>();\n const {swiperController, slideController, touchMoveDelta, animationStarted} = props;\n\n const deltaSign = Math.sign(touchMoveDelta);\n\n const computeTranslate = useCallback((indexOffset: number) => {\n const percentage = indexOffset * 100;\n\n if (animationStarted) {\n if(Math.abs(touchMoveDelta) > SPARK_SWIPE_DELTA_THRESHOLD) {\n if(slideController.itemIndex === 0 && slideController.isActiveSlide && deltaSign === 1) {\n // when the first slide is the active one and the user try to move up (previous; deltaSign === 1)\n // then we return to 0% translation.\n // if we don't do this then the below `translateY(${percentage + deltaSign * 100}%)` will be translateY(100%) because percentage will be 0 since we are on the active slide (indexOffset === 0)\n // and then on the next rerender will revert to 0% and the animation will look strange (go to 100% and then back to 0%)\n return `translateY(${percentage}%)`;\n } else if(slideController.itemIndex === swiperController.maxItemIndex && slideController.isActiveSlide && deltaSign === -1) {\n // when the last slide is the active one and the user try to move down (next; deltaSign === -1)\n // then we return to 0% translation.\n // if we don't do this then the below `translateY(${percentage + deltaSign * 100}%)` will be translateY(-100%) because percentage will be 0 since we are on the active slide (indexOffset === 0)\n // and then on the next rerender will revert to 0% and the animation will look strange (go to -100% and then back to 0%)\n return `translateY(${percentage}%)`;\n }\n // animate to the next/prev slide\n return `translateY(${percentage + deltaSign * 100}%)`;\n }\n // Not enough swipe, animate to the original point\n return `translateY(${percentage}%)`;\n }\n\n if(touchMoveDelta === 0) {\n return `translateY(${percentage}%)`;\n }\n\n return `translateY(calc(${percentage}% + ${touchMoveDelta}px))`;\n\n }, [touchMoveDelta, animationStarted, deltaSign, swiperController.maxItemIndex, slideController.itemIndex, slideController.isActiveSlide]);\n\n useEffect(() => {\n if(elementRef.current) {\n if(animationStarted) {\n elementRef.current.style.transition = 'transform 0.25s ease-in-out';\n } else {\n elementRef.current.style.transition = 'unset';\n }\n elementRef.current.style.transform = computeTranslate(slideController.itemIndexOffset);\n }\n }, [slideController.itemIndexOffset, computeTranslate, animationStarted]);\n\n const styles: CSSProperties = {\n transform: computeTranslate(slideController.itemIndexOffset)\n };\n\n return (\n <SparkSwiperSlideBox className={slideController.key}\n key={slideController.key}\n ref={elementRef}\n style={styles}\n onTransitionEnd={props.onTransitionEnd}>\n {slideController.renderSlideContent()}\n </SparkSwiperSlideBox>\n )\n})","export const SPARK_SWIPE_DELTA_THRESHOLD = 75","import React, {useCallback, useEffect, useRef, useState} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {SparkSwiperBox} from \"./boxes/spark-swiper.box\";\nimport {ISparkSwiperSlideController} from \"./models/spark-swiper-slide-controller.interface\";\nimport {ISparkSwiperController} from \"./models/spark-swiper-controller.interface\";\nimport {SparkSwiperSlideComponent} from \"./spark-swiper-slide.component\";\nimport {SPARK_SWIPE_DELTA_THRESHOLD} from \"./spark-swiper-consts\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\n\ninterface SparkSwiperComponentProps {\n swiperController: ISparkSwiperController;\n}\n\nexport const SparkSwiperComponent: React.FC<SparkSwiperComponentProps> = observer((props) => {\n const swiperController = props.swiperController;\n const swiperElementRef = useRef<HTMLDivElement | null>(null);\n const touchStartY = useRef(0);\n const [touchMoveDelta, setTouchMoveDelta] = useState(0);\n const [animationStarted, setAnimationStarted] = useState(false);\n const services = useServices();\n\n const onTransitionEndHandler = () => {\n if (touchMoveDelta < -1 * SPARK_SWIPE_DELTA_THRESHOLD) {\n swiperController.moveNext();\n services.videoSlides.fireExplorerSwipeEvent();\n } else if (touchMoveDelta > SPARK_SWIPE_DELTA_THRESHOLD) {\n swiperController.movePrevious();\n services.videoSlides.fireExplorerSwipeEvent();\n }\n setAnimationStarted(false);\n setTouchMoveDelta(0);\n };\n\n const onTouchStartHandler = (event: any) => {\n if (swiperController.sparkSwiperSwipeAnimation.isAnimatedSwipingInProgress) {\n swiperController.sparkSwiperSwipeAnimation.stopAnimatedSwiping();\n }\n event.preventDefault()\n touchStartY.current = event.touches[0].clientY;\n }\n\n const onTouchMoveHandler = useCallback((event: any) => {\n event.preventDefault();\n\n const deltaY = event.touches[0].clientY - touchStartY.current;\n setTouchMoveDelta(deltaY);\n }, [])\n\n const onTouchEndHandler = (event: any) => {\n const deltaY = event.changedTouches[0].clientY - touchStartY.current;\n setTouchMoveDelta(deltaY);\n setAnimationStarted(true);\n };\n\n useEffect(() => {\n const swiper = swiperElementRef.current;\n if (swiper) {\n swiper.addEventListener('touchmove', onTouchMoveHandler, {passive: false});\n }\n\n return () => {\n if (swiper) {\n swiper.removeEventListener('touchmove', onTouchMoveHandler);\n }\n\n };\n }, [onTouchMoveHandler]);\n\n\n\n const renderOneSlide = (slideController: ISparkSwiperSlideController) => {\n return (\n <SparkSwiperSlideComponent key={slideController.key}\n slideController={slideController}\n swiperController={swiperController}\n touchMoveDelta={touchMoveDelta}\n animationStarted={animationStarted}\n onTransitionEnd={slideController.itemIndexOffset === 0 ? onTransitionEndHandler : undefined} />\n );\n }\n\n return (\n <SparkSwiperBox ref={swiperElementRef}\n onTouchStart={onTouchStartHandler}\n onTouchEnd={onTouchEndHandler}\n >\n {swiperController.slides.map(renderOneSlide)}\n </SparkSwiperBox>\n )\n})","import styled from \"styled-components\";\n\nexport const VideoSlidesOnboardingOverlayBox = styled.div`\n position: absolute;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.8);\n z-index: 100;\n`;\n","import styled from \"styled-components\";\n\nexport const SwipingUserTipBox = styled.div`\n position: absolute;\n top: 40%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n","import styled from \"styled-components\";\n\nexport const VideoSlidesTipTextBox = styled.div`\n margin-top: 50px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n font-size: 2rem;\n font-weight: 600;\n text-align: center;\n width: 80vw;\n\n p:first-of-type {\n font-weight: 800;\n margin-bottom: 0;\n font-size: 2.5rem;\n }\n`;\n","import {observer} from \"mobx-react\";\nimport React, {TouchEvent, useRef} from \"react\";\nimport {VideoSlidesOnboardingOverlayBox} from \"./boxes/video-slides-onboarding-overlay.box\";\nimport {DotLottiePlayer} from \"../../../lottie-player/dot-lottie-player.component\";\nimport {DotLottieCommonPlayer} from \"@dotlottie/react-player\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {SwipingUserTipBox} from \"./boxes/swiping-user-tip.box\";\nimport { VideoSlidesTipTextBox } from \"./boxes/video-slides-tip-text.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\n\ninterface VideoSlidesOnboardingComponentProps {\n onDismiss: () => void;\n}\n\nexport const VideoSlidesOnboardingComponent: React.FC<VideoSlidesOnboardingComponentProps> = observer((props) => {\n let lottieRef = useRef<DotLottieCommonPlayer>(null);\n let services = useServices();\n\n\n const touchStartY = useRef(0);\n const touchEndY = useRef(0);\n\n const dismiss = () => {\n services.videoSlides.onBoardingWasShown = true;\n props.onDismiss();\n services.analytics.sendOrbitUserFlowEvent('videoSlides', 'dismiss', 'onBoarding');\n }\n\n\n const handleTouchStart = (e: TouchEvent<HTMLDivElement>) => {\n touchStartY.current = e.touches[0].clientY;\n };\n\n const handleSwipe = () => {\n const deltaY = touchStartY.current - touchEndY.current;\n if (deltaY > 40) {\n //Swiped up;\n dismiss();\n }\n };\n\n const handleTouchEnd = (e: TouchEvent<HTMLDivElement>) => {\n touchEndY.current = e.changedTouches[0].clientY;\n handleSwipe();\n };\n\n\n\n\n return (\n <VideoSlidesOnboardingOverlayBox onClick={dismiss}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n className={CyClass('cy-video-slides-onboarding-overlay')}\n >\n <SwipingUserTipBox>\n <DotLottiePlayer\n style={{width: \"150px\", height: \"150px\"}}\n ref={lottieRef}\n src={services.theme.currentTheme.assets.lottie_json.explore_swipe_gesture_lottie.toString()}\n autoplay={true}\n loop={true}\n />\n <VideoSlidesTipTextBox>\n <p>{services.translation.translate(\"VIDEO_SLIDES_ONBOARDING_MAIN_TEXT\")}</p>\n <p>{services.translation.translate(\"VIDEO_SLIDES_ONBOARDING_SECONDARY_TEXT\")}</p>\n </VideoSlidesTipTextBox>\n </SwipingUserTipBox>\n </VideoSlidesOnboardingOverlayBox>\n );\n})","import styled from \"styled-components\";\n\nexport const VideoSlidesArenaSwiperBox = styled.div`\n width: 100%;\n height: 100%;\n`","import React, {useEffect, useState} from 'react';\nimport {observer} from \"mobx-react\";\nimport {SparkSwiperComponent} from \"../../../spark-swiper/spark-swiper.component\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {\n VideoSlidesOnboardingComponent\n} from \"../../../video-slides/parts/on-boarding/video-slides-onboarding.component\";\nimport {VideoSlidesArenaSwiperBox} from \"./video-slides-arena-swiper.box\";\nimport {VIDEO_SLIDES_ARENA_SWIPER_ID} from \"../video-slides-arena.consts\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nexport const VideoSlidesArenaSwiperComponent: React.FC = observer(() => {\n const services = useServices();\n const [showOnBoarding, setShowOnBoarding] = useState(!services.videoSlides.onBoardingWasShown);\n\n const swiperController = services.videoSlides.swiperController;\n\n useEffect(() => {\n if (showOnBoarding) {\n services.analytics.sendOrbitUserFlowEvent('videoSlides', 'show', 'onBoarding');\n }\n\n if (swiperController.sparkSwiperSwipeAnimation.isAnimatedSwipingInProgress) {\n swiperController.sparkSwiperSwipeAnimation.stopAnimatedSwiping();\n }\n }, [showOnBoarding, services.analytics, swiperController.sparkSwiperSwipeAnimation]);\n\n const dismissOnBoarding = () => {\n swiperController.sparkSwiperSwipeAnimation.startAnimatedSwiping();\n setShowOnBoarding(false);\n }\n\n\n const renderOnBoarding = () => {\n if (showOnBoarding) {\n\n return (\n <VideoSlidesOnboardingComponent onDismiss={dismissOnBoarding} />\n )\n }\n return null;\n }\n\n return (\n <VideoSlidesArenaSwiperBox id={VIDEO_SLIDES_ARENA_SWIPER_ID} className={CyClass('cy-video-slides-arena-swiper')}>\n {renderOnBoarding()}\n <SparkSwiperComponent swiperController={swiperController} />\n </VideoSlidesArenaSwiperBox>\n\n )\n});","export const VIDEO_SLIDES_ARENA_SWIPER_ID = 'video-slides-arena-swiper';","import React, {useEffect} from 'react';\nimport {observer} from \"mobx-react-lite\";\nimport {reaction} from \"mobx\";\nimport {BottomNavigationBarComponent} from \"../../bottom-navigation-bar/bottom-navigation-bar.component\";\nimport {VideoSlidesArenaBox} from \"./boxes/video-slides-arena.box\";\n//import {VideoSlidesContentArena} from \"./video-slides-arena-content/video-slides-arena-content.component\";\nimport {VideoSlidesHeaderArena} from \"./video-slides-arena-header/video-slides-arena-header.component\";\nimport {useServices} from '../../../react-hooks/use-services.hook';\nimport {VideoSlidesArenaSwiperComponent} from \"./video-slides-arena-swiper/video-slides-arena-swiper.component\";\nimport {DialogButtonClickHandleResultEnum} from \"../../../services/dialog/dialog.service.interface\";\n\nexport const VideoSlidesArena: React.FC = observer(() => {\n const services = useServices();\n\n useEffect(() => {\n const showVideoSlidesNotAvailablePopup = () => {\n services.dialog.showSimpleTextModal({\n disableFullscreenMobile: true,\n title: services.translation.translate('EXPLORER_NOT_AVAILABLE_TITLE'),\n text: services.translation.translate('EXPLORER_NOT_AVAILABLE_TEXT'),\n iconSvg: services.theme.currentTheme.icons.infoIcon,\n buttons: [\n {\n text: services.translation.translate('CLOSE'),\n buttonPreset: 'primary',\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }]\n });\n };\n\n const reactionDispose = reaction(() => services.videoSlides.shouldBeDisplayed,\n (shouldBeDisplayed) => {\n if (!shouldBeDisplayed) {\n services.location.goHome().then(() => showVideoSlidesNotAvailablePopup())\n }\n }, {\n fireImmediately: true\n })\n\n return () => {\n reactionDispose();\n }\n }, [services.location, services.videoSlides.shouldBeDisplayed, services.dialog, services.theme, services.translation]);\n\n return (\n <VideoSlidesArenaBox>\n <VideoSlidesHeaderArena />\n <VideoSlidesArenaSwiperComponent/>\n <BottomNavigationBarComponent isInVideoSlidesArena={true} />\n </VideoSlidesArenaBox>\n );\n})","import styled from \"styled-components\";\n\nexport const WelcomeUserBox = styled.div`\n text-align: center;\n`;\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const WelcomeGreetingBox = styledBox('WelcomeGreetingBox');\n","import React from 'react';\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {WelcomeUserBox} from \"./boxes/welcome-user.box\";\nimport {WelcomeGreetingBox} from \"./boxes/welcome-greeting.box\";\n\nexport const WelcomeUser = observer(class WelcomeUser extends OrbitComponent {\n render() {\n const {translation} = this.services;\n\n return (\n <WelcomeUserBox className=\"cy-welcome-user-menu-title\">\n <WelcomeGreetingBox>{translation.translate(\"MY_ACCOUNT\")}</WelcomeGreetingBox>\n </WelcomeUserBox>\n );\n }\n\n});\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const IndicatorBox = styledBox(\"IndicatorBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const IndicatorIconBox = styledBox(\"IndicatorIconBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const IndicatorBadgeBox = styledBox(\"IndicatorBadgeBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const IndicatorTextBox = styledBox(\"IndicatorTextBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const IndicatorIconWrapperBox = styledBox(\"IndicatorIconWrapperBox\");","import React from \"react\";\nimport {IndicatorBox} from \"./boxes/indicator.box\";\nimport {IndicatorIconBox} from \"./boxes/indicator-icon.box\";\nimport {IndicatorBadgeBox} from \"./boxes/indicator-badge.box\";\nimport {IndicatorTextBox} from \"./boxes/indicator-text.box\";\nimport {IndicatorLayout} from \"./consts/indicator-layout\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {IndicatorIconWrapperBox} from \"./boxes/indicator-icon-wrapper.box\";\nimport {ISvgIconProps} from \"../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport interface ProfileBoxMessagesIndicatorProps {\n /**\n * Normally, we should only receive numberOfAwaitingMessages, and when that's greater than 0, then the indicator is active\n * and the bubble shows the number.\n * But for challenges, we have only the information whether the user has active challenges or not.\n * So we accept both data, both are optional.\n * If both are missing, the button is inactive. If both are present, numberOfAwaitingMessages takes precedence and hasAwaitingMessages is ignored.\n * If hasAwaitingMessages is true and numberOfAwaitingMessages is undefined, the button is active but the badge is supressed\n */\n numberOfAwaitingMessages?: number;\n hasAwaitingMessages?: boolean;\n\n onClick: React.MouseEventHandler;\n displayLayout?: IndicatorLayout;\n iconComponent: React.ComponentType<ISvgIconProps>;\n className: string;\n text: string;\n}\n\nexport class ProfileBoxMessagesIndicator extends OrbitComponent<ProfileBoxMessagesIndicatorProps> {\n render() {\n const indicatorActive = this.indicatorIsActive();\n const IconComponent = this.props.iconComponent;\n\n return (\n <IndicatorBox displayLayout={this.props.displayLayout} className={this.props.className} onClick={this.onClick}>\n <IndicatorIconWrapperBox active={this.numberOfMessagesIsDefinedAndGreaterThanZero()}>\n <IndicatorIconBox displayLayout={this.props.displayLayout} active={indicatorActive}>\n {IconComponent ? <IconComponent size={3.5}/> : null}\n {this.numberOfMessagesIsDefinedAndGreaterThanZero() ?\n <IndicatorBadgeBox displayLayout={this.props.displayLayout} className={CyClass('cy-user-profile-messages-indicator')}>{this.props.numberOfAwaitingMessages}</IndicatorBadgeBox>\n : null}\n </IndicatorIconBox>\n </IndicatorIconWrapperBox>\n <IndicatorTextBox displayLayout={this.props.displayLayout} active={indicatorActive}>\n {this.props.text}\n </IndicatorTextBox>\n </IndicatorBox>\n );\n }\n\n private onClick = (e: React.MouseEvent) => {\n if (!this.indicatorIsActive()) {\n return;\n }\n this.props.onClick(e);\n }\n\n private numberOfMessagesIsDefinedAndGreaterThanZero() {\n return this.props.numberOfAwaitingMessages !== undefined && this.props.numberOfAwaitingMessages > 0;\n }\n\n private indicatorIsActive() {\n return this.numberOfMessagesIsDefinedAndGreaterThanZero() || !!this.props.hasAwaitingMessages;\n }\n\n}\n","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport { ProfileBoxMessagesIndicator } from \"../profile-box-messages-indicator.component\";\nimport { IndicatorLayout } from \"../consts/indicator-layout\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface OmgIndicatorProps extends ComponentServicesPick<'omg'> {\n displayLayout?: IndicatorLayout;\n}\n\nconst ComponentBody: React.FC<OmgIndicatorProps> = observer((props) => {\n const services = useServices();\n \n const onClickHandler = async () => {\n await (await services.menuItemActionFactory).getMenuItemAction('pushNotificationsPermissionsRequest').execute();\n services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", \"Open_OMG\");\n // Open OMG\n await props.omg.openOmgAwaitingMessages();\n (await services.userMenu).closeMenu();\n \n }\n \n return (\n <ProfileBoxMessagesIndicator\n displayLayout={props.displayLayout}\n numberOfAwaitingMessages = {props.omg.numberOfAwaitingMessages}\n className = {CyClass('cy-omg-indicator')}\n iconComponent = {services.theme.currentTheme.icons.notificationIcon}\n text = {services.translation.translate('OMG_INDICATOR')}\n onClick={onClickHandler}\n />\n );\n})\nexport const OmgIndicator = withServices(ComponentBody, ['omg']);","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport { ProfileBoxMessagesIndicator } from \"../profile-box-messages-indicator.component\";\nimport {\n TOOLTIP_TARGET_FREE_PLAY_INDICATOR\n} from \"../../../services/tooltip/on-boarding-tooltip/on-boarding-tooltip-target-selectors\";\n\nexport const FreePlayIndicatorComponent = observer(class extends OrbitComponent {\n\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", \"Open_Rewards\");\n (await this.services.userMenu).openRewards();\n }\n\n public render() {\n return (\n <ProfileBoxMessagesIndicator\n numberOfAwaitingMessages={this.services.freePlay.userVouchersToDisplayInUI.length}\n className = {TOOLTIP_TARGET_FREE_PLAY_INDICATOR}\n iconComponent = {this.services.theme.currentTheme.icons.freeplayIcon}\n text = {this.services.translation.translate('FREEPLAY_INDICATOR')}\n onClick={this._onClickHandler}\n />\n );\n }\n});\n","import React from \"react\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {LoyaltyBarWrapperComponent} from \"./loyalty-bar-wrapper.component\";\nimport {UserMenuSectionBox} from \"../user-menu/user-menu/boxes/section/user-menu-section.box\";\n\nexport const LoyaltyBar = observer(class LoyaltyBar extends OrbitComponent {\n\n render() {\n const showLoyaltyConfig = this.services.configuration.data.drawer.showLoyalty;\n if (!showLoyaltyConfig || !showLoyaltyConfig.display)\n return null;\n\n return (\n <UserMenuSectionBox noVerticalPadding noHorizontalPadding>\n <div style={{padding: \"0 1rem 0 0\"}}>\n <LoyaltyBarWrapperComponent />\n </div>\n </UserMenuSectionBox>\n );\n }\n});\n","import React from \"react\";\nimport { OrbitComponent } from \"../base-components/orbit-component/orbit-component\";\nimport { UserData } from \"../../services/sdk/sdk.service.interface\";\nimport { Check } from \"@sparkware/app-utils\";\nimport {observer} from \"mobx-react\";\n\nexport interface UserInfoComponentProps {\n className?: string;\n useSpanWrapper?: boolean;\n selectedUserInfo: keyof UserData;\n}\n\n@observer\nexport class UserInfo extends OrbitComponent<UserInfoComponentProps> {\n render() {\n let shownData = this.services.user.userData[this.props.selectedUserInfo];\n if (Check.isNullOrUndefined(shownData)) {\n return null;\n }\n if (this.props.useSpanWrapper || this.props.className) {\n return <span className={this.props.className}>\n {shownData}\n </span>;\n } else {\n return shownData;\n }\n }\n}\n","import styled from \"styled-components\";\n\nexport const UserInfoLabelBox = styled.span`\n margin: 0 1rem 0 0;\n`;\n","import styled from \"styled-components\";\n\nexport const UserMenuNameBox = styled.div`\n color: ${({theme}) => theme.colors.textContrast};\n font-size: 1.6rem;\n font-weight: 700;\n text-align: center;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n text-align: left;\n }\n`;","import styled from \"styled-components\";\n\nexport const UserMenuSupportIdBox = styled.div`\n color: ${({theme}) => theme.colors.textMiddleDark};\n font-size: 1.2rem;\n font-weight: 600;\n text-align: center;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n text-align: left;\n }\n`;","import React from 'react';\nimport {UserInfo} from \"../user-info/user-info.component\";\nimport {UserInfoLabelBox} from \"../user-info/user-info-label.box\";\nimport {UserMenuSectionBox} from '../user-menu/user-menu/boxes/section/user-menu-section.box';\nimport {useServices} from '../../react-hooks/use-services.hook';\nimport {UserMenuNameBox} from './boxes/user-menu-name.box';\nimport {UserMenuSupportIdBox} from './boxes/user-menu-support-id.box';\nimport {FlexContainerBox, FlexFixedSizeItemBox, FlexGrowItemBox, FlexShrinkItemBox} from \"../../themes/architecture/css-helpers/flex\";\nimport {UserData} from '../../services/sdk/sdk.service.interface';\nimport {ITranslationService} from '../../services/translation/translation.service.interface';\nimport {Image} from '../raw-components/image/image';\n\nexport const UserDetails: React.FC = () => {\n let services = useServices();\n const {showUserTitle, showFirstName, showLastName} = services.configuration.data.drawer.welcomeMessage;\n const avatarUrl = services.configuration.data.generalSettings.avatarUrl.sideMenu.regular;\n\n function _renderUserTitle(isEnabled: boolean, translator: ITranslationService) {\n if(!isEnabled)\n return null;\n\n const userGenderTitle = this.services.user.genderTitle;\n return <span>{translator.translate(userGenderTitle)}</span>\n }\n\n function _renderUserInfo(infoType: keyof UserData, isEnabled: boolean) {\n if(!isEnabled)\n return null;\n\n return <UserInfo className=\"cy-user-name\" selectedUserInfo={infoType} />;\n }\n\n function _renderLeftPart() {\n let smallViewport = services.mediaQuery.lAndBelow;\n if (smallViewport) {\n return <FlexFixedSizeItemBox style={{marginRight: \"1.6rem\"}}>\n <div style={{position: \"relative\", width: \"5rem\", height: \"5rem\"}} >\n <div style={{position: \"absolute\", width: \"7rem\", height: \"7rem\", top: \"-1rem\", left: \"-1rem\"}}>\n <Image src={avatarUrl} alt=\"\" />\n </div>\n </div>\n </FlexFixedSizeItemBox>;\n } else {\n return <FlexShrinkItemBox flexShrink={100} flexBasis=\"1.2rem\"></FlexShrinkItemBox>;\n }\n }\n\n const RightArrowIcon = services.theme.currentTheme.icons.forwardIcon;\n\n const onClickHandler = async () => {\n (await services.userMenu).launchMyAccount();\n }\n\n return (\n <UserMenuSectionBox className=\"cy-user-menu-user-details\" onClick={onClickHandler}>\n <FlexContainerBox alignItems=\"center\" style={{cursor: \"pointer\"}}>\n { _renderLeftPart() }\n <FlexGrowItemBox>\n <UserMenuNameBox>\n {_renderUserTitle(showUserTitle, services.translation)}\n {_renderUserInfo('firstName', showFirstName)}\n {_renderUserInfo('lastName', showLastName)}\n </UserMenuNameBox>\n <UserMenuSupportIdBox>\n <UserInfoLabelBox>{services.translation.translate('SUPPORT_ID_MESSAGE')}</UserInfoLabelBox>\n <UserInfo className=\"user-cid cy-user-cid\" selectedUserInfo=\"cid\" />\n </UserMenuSupportIdBox>\n </FlexGrowItemBox>\n <FlexFixedSizeItemBox>\n <RightArrowIcon size={1.2} />\n </FlexFixedSizeItemBox>\n </FlexContainerBox>\n </UserMenuSectionBox>\n );\n};\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {UsefulLinksListComponent} from './parts/useful-links-list/useful-links-list.component';\nimport {CyClass} from '../../../common/cy-classes';\nimport {UserMenuSectionBox} from '../user-menu/user-menu/boxes/section/user-menu-section.box';\n\nexport const UsefulLinks: React.FC = observer(() => {\n return (\n <UsefulLinksListComponent linksGroupWrapperBox={UserMenuSectionBox} linksGroupWrapperClassName={CyClass('cy-useful-links-section')} />\n );\n});\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const BonusAndCashBalanceBox = styledBox(\"BonusAndCashBalanceBox\");\n","import styled from \"styled-components\";\n\nexport const BalanceInnerBox = styled.div`\n display: flex;\n justify-content: space-between;\n padding: 0 0 0.5rem;\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const BalanceLabelInnerBox = styledBox(\"BalanceLabelInnerBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const BalanceValueBonusAndCashBox = styledBox(\"BalanceValueBonusAndCashBox\");\n","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {BonusAndCashBalanceBox} from \"./boxes/bonus-and-cash-balance.box\";\nimport {BalanceInnerBox} from \"./boxes/balance-inner.box\";\nimport {BalanceLabelInnerBox} from \"./boxes/balance-label-inner.box\";\nimport { BalanceValue } from \"../balance-value.component\";\nimport { BalanceValueBonusAndCashBox } from \"../balance-value-boxes/balance-value-bonus-and-cash.box\";\nimport { BalanceType } from \"../../../../common/const/wallet_balance_type\";\nimport {CyClass} from '../../../../common/cy-classes';\n\nexport class BonusAndCashBalance extends OrbitComponent {\n render() {\n const translator = this.services.translation;\n\n return (\n <BonusAndCashBalanceBox className={CyClass('cy-bonus-and-cash-balance')}>\n <BalanceInnerBox>\n <BalanceLabelInnerBox>{translator.translate('CASH_BALANCE')}</BalanceLabelInnerBox>\n <BalanceValue balanceType={BalanceType.CASH} WrapperComponent={BalanceValueBonusAndCashBox} className={CyClass('cy-cache-balance')} />\n </BalanceInnerBox>\n <BalanceInnerBox>\n <BalanceLabelInnerBox>{translator.translate('BONUS_BALANCE')}</BalanceLabelInnerBox>\n <BalanceValue balanceType={BalanceType.BONUS} WrapperComponent={BalanceValueBonusAndCashBox} className={CyClass('cy-bonus-balance')} />\n </BalanceInnerBox>\n </BonusAndCashBalanceBox>\n );\n }\n}\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const BalanceButtonsGroupBox = styledBox('BalanceButtonsGroupBox')","import React from \"react\";\nimport { Button } from \"../../../basic-ui-components/button/base/button.component\";\nimport { BalanceButtonsGroupBox } from \"./boxes/balance-buttons-group.box\";\nimport { ButtonWrapperBox } from \"./boxes/button-wrapper.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {observer} from \"mobx-react\";\n\nexport const UserBalanceButtons: React.FC = observer(() => {\n const services = useServices();\n const translator = services.translation;\n\n const openDeposit = async () => {\n (await services.userMenu).launchDeposit();\n }\n\n const openWithdraw = async () => {\n (await services.userMenu).launchWithdraw();\n }\n\n return (\n <BalanceButtonsGroupBox>\n <ButtonWrapperBox className=\"cy-deposit-button\">\n <Button preset=\"special\" onClick={openDeposit} fullWidth>\n {translator.translate('DEPOSIT')}\n </Button>\n </ButtonWrapperBox>\n <ButtonWrapperBox className=\"cy-withdraw-button\">\n <Button preset=\"info\" onClick={openWithdraw} fullWidth>\n {translator.translate('WITHDRAW')}\n </Button>\n </ButtonWrapperBox>\n </BalanceButtonsGroupBox>\n );\n})\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const UserMenuBalanceLabelBox = styledBox('UserMenuBalanceLabelBox');","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const BalanceValuePrimaryBox = styledBox(\"BalanceValuePrimaryBox\");\n","import React from 'react';\nimport {useServices} from '../../react-hooks/use-services.hook';\nimport {BonusAndCashBalance} from \"./bonus-and-cash-balance/bonus-and-cash-balance.component\";\nimport {UserBalanceButtons} from \"./balance-box-buttons/user-balance-buttons.component\";\nimport {UserMenuBalanceLabelBox} from \"./boxes/user-menu-balance-label.box\";\nimport { BalanceValue } from './balance-value.component';\nimport { BalanceValuePrimaryBox } from './balance-value-boxes/balance-value-primary.box';\nimport {CyClass} from '../../../common/cy-classes';\nimport {UserMenuSectionBox} from '../user-menu/user-menu/boxes/section/user-menu-section.box';\nimport {FlexContainerBox} from '../../themes/architecture/css-helpers/flex';\nimport {UserMenuSeparatorBox} from '../user-menu/user-menu-items/boxes/separator/user-menu-separator.box';\nimport {SpacerBox} from '../../basic-ui-components/layout/spacer.box';\n\nexport const UserBalance: React.FC = () => {\n const services = useServices();\n return <UserMenuSectionBox className={CyClass(\"cy-balance-box\")}>\n <FlexContainerBox alignItems='center' justifyContent='space-between'>\n <UserMenuBalanceLabelBox>{services.translation.translate('BALANCE')}</UserMenuBalanceLabelBox>\n <BalanceValue className={CyClass('cy-balance-box-amount')} WrapperComponent={BalanceValuePrimaryBox} />\n </FlexContainerBox>\n <UserMenuSeparatorBox />\n <BonusAndCashBalance />\n <FlexContainerBox></FlexContainerBox>\n <UserBalanceButtons />\n <SpacerBox height='1rem' />\n </UserMenuSectionBox>;\n};\n","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface UserMenuItemsContainerComponentProps extends ComponentServicesPick<'userMenu'> {\n}\n\n\nconst ComponentBody: React.FC<UserMenuItemsContainerComponentProps> = observer((props) => {\n\n const menuItems = props.userMenu.userMenuItems;\n\n return (\n <>\n {menuItems.map(menuItem => <React.Fragment key={menuItem.key}>{menuItem.renderMenuItem()}</React.Fragment>)}\n </>\n );\n});\n\nexport const UserMenuItemsContainerComponent = withServices(ComponentBody, [\"userMenu\"]);","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const MiniControlCenterBox = styledBox('MiniControlCenterBox');","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {MiniControlCenterBox} from \"./boxes/mini-control-center.box\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {CONTROL_CENTER_CONTAINERS_ID} from \"../../../services/control-center/control-center.service.interface\";\nimport {AreaType, ControlCenterCloseSource, ControlCenterOpenSource} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\nimport {ICasinofiedApplication} from \"../../../services/casinofied/app-launcher/apps/casinofied-application.interface\";\nimport {UserMenuSectionBox} from \"../user-menu/boxes/section/user-menu-section.box\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface MiniControlCenterComponentProps extends ComponentServicesPick<'userMenu'>{\n \n}\n@observer\nclass ComponentBody extends OrbitComponent<MiniControlCenterComponentProps> {\n private iApplication: ICasinofiedApplication | null = null;\n private appLoadingInProgress = false;\n private cancelLoadingApp = false;\n private businessCorrelationID: string;\n private closeControlCenterReason: ControlCenterCloseSource;\n\n componentDidMount() {\n super.componentDidMount();\n this.businessCorrelationID = this.services.tools.getGuid();\n if (this.services.controlCenter.isEnabled && this.props.userMenu.isOpen) {\n this.loadControlCenterMini();\n }\n }\n\n componentDidUpdate() {\n if (this.services.controlCenter.isEnabled) {\n if (!this.props.userMenu.isOpen) {\n // so, the userMenu has closed. good. If we have an app, dispose of it\n if (this.iApplication) {\n this.disposeApplication();\n } else if (this.appLoadingInProgress) {\n // but what if the user closed the menu before the app finished loading?\n this.cancelLoadingApp = true;\n }\n }\n if (!this.iApplication && this.props.userMenu.isOpen) {\n this.loadControlCenterMini();\n }\n }\n }\n\n componentWillUnmount() {\n this.disposeApplication();\n }\n\n async loadControlCenterMini(): Promise<void> {\n this.closeControlCenterReason = ControlCenterCloseSource.ClientPage;\n this.appLoadingInProgress = true;\n await (await this.services.appLauncher).openControlCenterMini({\n businessCorrelationID: this.businessCorrelationID,\n channel: {\n area: AreaType.UserArea,\n element: CHANNEL_ELEMENTS.controlCenterHeaderButton,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n source: ControlCenterOpenSource.UserArea\n }\n }).then((app) => {\n this.iApplication = app;\n this.appLoadingInProgress = false;\n if (this.cancelLoadingApp) {\n this.cancelLoadingApp = false;\n this.disposeApplication();\n }\n }).finally(() => {\n this.appLoadingInProgress = false;\n this.cancelLoadingApp = false;\n });\n }\n disposeApplication() {\n if (this.iApplication) {\n this.iApplication.close({\n channel: {\n area: AreaType.UserArea,\n source: CHANNEL_SOURCE.casinoClient\n },\n reason: this.closeControlCenterReason\n });\n this.iApplication = null;\n }\n }\n\n controlCenterBoxClickHandler = () => {\n this.closeControlCenterReason = ControlCenterCloseSource.MiniSafeZone;\n }\n\n render() {\n if (!this.services.controlCenter.isEnabled) {\n return null;\n }\n /* Normally why do I care if userMenu.isOpen ? After all, this component is rendered inside the userMenu and will be visible only if isOpen.\n Yes, BUT control center want's to be \"closed\" and \"opened\" with every close/open of the userMenu. So I add a class depending on\n this.props.userMenu.isOpen to trigger a componentDidMount and the magic will happen there */\n return (\n <UserMenuSectionBox>\n <MiniControlCenterBox\n id={CONTROL_CENTER_CONTAINERS_ID.CONTROL_CENTER_MINI_CONTAINER_ID}\n className={\"cy-mini-control-center \" + (this.props.userMenu.isOpen ? \"cy-mini-control-center-open\" : \"cy-mini-control-center-closed\")}\n onClick={this.controlCenterBoxClickHandler}\n />\n </UserMenuSectionBox>\n );\n }\n}\n\n\nexport const MiniControlCenterComponent = withServices(ComponentBody, ['userMenu']);","import styled from \"styled-components\";\n\nexport const UserMenuScrollWrapperBox = styled.div`\n flex: 1;\n padding: 1rem 0.75rem 1rem 1rem;\n overflow-y: auto;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 0;\n }\n\n &::-webkit-scrollbar {\n width: 5px;\n }\n\n &::-webkit-scrollbar-track {\n background: rgba(255, 255, 255, 0.1);\n }\n\n &::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.5);\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.8);\n }\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ProfileMessagesBox = styledBox(\"ProfileMessagesBox\");\n","import styled from \"styled-components\";\n\nexport const UserMenuFakeIOSPaddingBox = styled.div`\n display: block;\n height: 100px;\n width: 10px;\n`;\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const LogOutLinkBox = styledBox('LogOutLinkBox');\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport { LogOutLinkBox } from './boxes/log-out-link.box';\nimport {CyClass} from '../../../common/cy-classes';\nimport {useServices} from '../../react-hooks/use-services.hook';\nimport {UserMenuSectionBox} from '../user-menu/user-menu/boxes/section/user-menu-section.box';\n\nexport const UserMenuLogout: React.FC = observer(() => {\n const services = useServices();\n const translator = services.translation;\n const onClickHandler = async () => {\n (await services.userMenu).doLogout();\n }\n\n return <UserMenuSectionBox className={CyClass('cy-useful-links-section')}>\n <LogOutLinkBox className={`${CyClass('cy-logout-link')} ${CyClass('cy-useful-links-item')} ${CyClass('cy-useful-links-li-item')}`}\n onClick={onClickHandler}>\n {translator.translate(\"LOGOUT\")}\n </LogOutLinkBox>\n </UserMenuSectionBox>;\n});\n","import styled from \"styled-components\";\n\nexport const UserMenuAppVersionBox = styled.div`\n font-size: 1.2rem;\n font-weight: 400;\n text-align: center;\n color: ${props => props.theme.colors.text};\n`;\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {useServices} from '../../react-hooks/use-services.hook';\nimport {UserMenuSeparatorBox} from '../user-menu/user-menu-items/boxes/separator/user-menu-separator.box';\nimport {SpacerBox} from '../../basic-ui-components/layout/spacer.box';\nimport {UserMenuLogout} from '../user-menu-logout/user-menu-logout.component';\nimport {UserMenuAppVersionBox} from './boxes/user-menu-app-version.box';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface UserMenuFooterProps extends ComponentServicesPick<'clientDevice'> {\n\n}\nconst ComponentBody: React.FC<UserMenuFooterProps> = observer((props) => {\n const services = useServices();\n const translator = services.translation;\n\n return (<>\n <SpacerBox height={\"1rem\"} />\n <UserMenuAppVersionBox>\n {translator.translate(\"ABOUT_CLIENT_VERSION_TITLE\")}\n <br />\n {props.clientDevice.clientVersion}\n </UserMenuAppVersionBox>\n \n <SpacerBox height={\"1rem\"} />\n <UserMenuSeparatorBox />\n <UserMenuLogout />\n </>);\n\n});\n\nexport const UserMenuFooter = withServices(ComponentBody, ['clientDevice']);","import styled from 'styled-components';\n\nexport const SaveGamesWidgetBox = styled.div`\n background-color: ${props => props.theme.colors.background};\n margin-top: 1rem;\n padding: 0;\n width: 100%;\n line-height: 3.75rem;\n\n align-items: center;\n\n display: flex;\n flex-direction: column;\n \n border-radius: 5px;\n max-width: 100%;\n\n`;\n","import styled from 'styled-components';\n\nexport const SaveGamesWidgetGamesContainerBox = styled.div`\n display: grid;\n grid-template-columns: 10rem 10rem 10rem;\n column-gap: 1rem;\n row-gap: 1rem;\n padding: 0.5rem 0;\n`;\n","import styled from 'styled-components';\n\nexport const SaveGamesWidgetGamesTitleBox = styled.div`\n text-align: center;\n line-height: normal;\n width: 100%;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n direction: initial;\n padding: 4px 0;\n color: ${({theme}) => theme.colors.textContrast};\n`;\n","import styled from 'styled-components';\n\nexport const SaveGamesWidgetHeaderBox = styled.div`\n align-items: center;\n font-size: 1.4rem;\n display: flex;\n width: 100%;\n color: ${({theme}) => theme.colors.textContrast};\n\n & span:last-of-type {\n margin-left: auto;\n margin-right: 1rem;\n display: flex;\n align-items: center;\n cursor: pointer;\n }\n \n & span:first-of-type {\n margin: 0 1rem;\n }\n`;\n","import React from \"react\";\nimport {SaveGamesWidgetHeaderBox} from \"./boxes/save-games-widget-header.box\";\nimport {observer} from \"mobx-react\";\nimport {withServices} from \"../../../react-hooks/with-services\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\n\ninterface SaveGamesWidgetHeaderComponentProps extends ComponentServicesPick<'userMenu'> {\n}\n\nconst ComponentBody: React.FC<SaveGamesWidgetHeaderComponentProps> = observer((props) => {\n\n const services = useServices();\n\n const _onClick = () => {\n services.games.showAllSavedGamesDrawer();\n props.userMenu.closeMenu();\n };\n\n const RightArrowIcon = services.theme.currentTheme.icons.rightArrowIcon;\n const SavedGamesIcon = services.theme.currentTheme.icons.saveGameIcon;\n\n return (\n <SaveGamesWidgetHeaderBox className={\"cy-save-games-widget-header\"} ref={props.userMenu.saveWidgetRef}>\n <span>\n <SavedGamesIcon size={2}/>\n </span>\n <span>\n {services.translation.translate(\"MY_SAVED_GAMES\")}\n </span>\n <span onClick={() => _onClick()}>\n {services.translation.translate(\"ALL\")}\n <RightArrowIcon size={1.5}/>\n </span>\n </SaveGamesWidgetHeaderBox>\n );\n});\n\nexport const SaveGamesWidgetHeaderComponent = withServices(ComponentBody, [\"userMenu\"]);","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {SaveGamesWidgetBox} from \"./boxes/save-games-widget.box\";\nimport {SaveGamesWidgetGamesContainerBox} from \"./boxes/save-games-widget-games-container.box\";\nimport {GameImageComponent} from \"../../single-game/common/parts/game-image/game-image.component\";\nimport {GameItemImgWrapperBox} from \"../../game-item/boxes/game-item-img-wrapper.box\";\nimport {SaveGamesWidgetGamesTitleBox} from \"./boxes/save-games-widget-games-title.box\";\nimport {SaveGamesWidgetHeaderComponent} from \"./save-games-widget-header.component\";\nimport {observer} from \"mobx-react\";\n\n\nexport const SaveGamesWidgetComponent = observer(class SaveGamesWidgetComponent extends OrbitComponent<{}> {\n\n private _onGameClick(gameType: number) {\n this.services.games.gamesMap[gameType]?.open({\n isRealMode: true,\n listTitle: \"SAVED_GAMES_WIDGET\"\n });\n }\n\n render() {\n if (this.services.games.savedGameTypes.length === 0) {\n return null;\n }\n\n if (!this.services.configuration.data.drawer.saveGamesWidget?.display) {\n return null;\n }\n\n return (\n <SaveGamesWidgetBox className={'cy-save-games-widget'}>\n <SaveGamesWidgetHeaderComponent/>\n <SaveGamesWidgetGamesContainerBox>\n {this.services.games.savedGameTypes.slice(0,6).map(gt => this.services.games.gamesMap[gt]).map(gi =>\n !gi ? null :\n <div>\n <GameItemImgWrapperBox fixedWidth className={`cy-saved-game-${gi.gameType}`} onClick={() => this._onGameClick(gi.gameType)}>\n <GameImageComponent gameInfo={gi} useLazyLoading={true} useSquareIcons disableAnimation/>\n </GameItemImgWrapperBox>\n <SaveGamesWidgetGamesTitleBox>\n {gi.title}\n </SaveGamesWidgetGamesTitleBox>\n </div>\n )}\n </SaveGamesWidgetGamesContainerBox>\n </SaveGamesWidgetBox>\n );\n }\n});\n","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {OmgIndicator} from \"../../profile-box-messages-indicator/indicators/omg-indicator.component\";\nimport {FreePlayIndicatorComponent} from \"../../profile-box-messages-indicator/indicators/freeplay-indicator.component\";\nimport {LoyaltyBar} from \"../../loyalty-bar/loyalty-bar.component\";\nimport {UserDetails} from \"../../user-details/user-details.component\";\nimport {observer} from \"mobx-react\";\nimport {UsefulLinks} from \"../../useful-links/useful-links.component\";\nimport {UserBalance} from \"../../balance-box/user-balance.component\";\nimport {UserMenuItemsContainerComponent} from \"../user-menu-items/user-menu-items-container.component\";\nimport {MiniControlCenterComponent} from \"../mini-control-center/mini-control-center.component\";\nimport {UserMenuScrollWrapperBox} from \"./boxes/user-menu-scroll-wrapper.box\";\nimport { ProfileMessagesBox } from \"../../profile-box/boxes/profile-box-messages/profile-messages.box\";\nimport {UserMenuFakeIOSPaddingBox} from \"./boxes/user-menu-fake-ios-padding.box\";\nimport {UserMenuFooter} from \"../../user-menu-footer/user-menu-footer.component\";\nimport {FlexContainerBox, FlexFixedSizeItemBox, FlexGrowItemBox} from \"../../../themes/architecture/css-helpers/flex\";\nimport {SaveGamesWidgetComponent} from \"../save-games-widget/save-games-widget.component\";\n\nexport const UserMenuMobile = observer(class UserMenuMobile extends OrbitComponent {\n\n render() {\n // NB: the PC layout has the profile-box-messages, loyalty bar, and\n // dynamics boxes in the SideMenu, whereas the mobile layout has them\n // here in the pop-out menu.\n\n return (\n <UserMenuScrollWrapperBox>\n <FlexContainerBox direction=\"column\" style={{height: \"100%\"}}>\n <FlexGrowItemBox>\n <UserDetails />\n <UserBalance />\n <ProfileMessagesBox className=\"cy-profile-box-messages\">\n <OmgIndicator />\n <FreePlayIndicatorComponent />\n </ProfileMessagesBox>\n <LoyaltyBar />\n <UserMenuItemsContainerComponent />\n <MiniControlCenterComponent/>\n <UsefulLinks />\n <SaveGamesWidgetComponent />\n </FlexGrowItemBox>\n <FlexFixedSizeItemBox>\n <UserMenuFooter />\n </FlexFixedSizeItemBox>\n </FlexContainerBox>\n {this.services.device.os.isIOS && <UserMenuFakeIOSPaddingBox />}\n </UserMenuScrollWrapperBox>\n );\n }\n});\n","import styled from \"styled-components\";\n\nexport const UserMenuClosePCButtonBox = styled.div`\n position: absolute;\n top: 50%;\n right: 0.5rem;\n transform: translateY(-50%);\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const UserMenuCloseIconBox = styledBox('UserMenuCloseIconBox');","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const UserMenuHeaderBox = styledBox('UserMenuHeaderBox');","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {UserDetails} from \"../../user-details/user-details.component\";\nimport {UsefulLinks} from \"../../useful-links/useful-links.component\";\nimport {WelcomeUser} from \"../../welcome-user/welcome-user.component\";\nimport {UserBalance} from \"../../balance-box/user-balance.component\";\nimport { UserMenuClosePCButtonBox } from \"../close-button/boxes/user-menu-close-pc-button.box\";\nimport { UserMenuCloseIconBox } from \"../close-button/boxes/close-icon/user-menu-close-icon.box\";\nimport {MiniControlCenterComponent} from \"../mini-control-center/mini-control-center.component\";\nimport {UserMenuHeaderBox} from \"./boxes/header/user-menu-header.box\";\nimport {UserMenuScrollWrapperBox} from \"./boxes/user-menu-scroll-wrapper.box\";\nimport {UserMenuFooter} from \"../../user-menu-footer/user-menu-footer.component\";\nimport {FlexContainerBox, FlexFixedSizeItemBox, FlexGrowItemBox} from \"../../../themes/architecture/css-helpers/flex\";\nimport {SaveGamesWidgetComponent} from \"../save-games-widget/save-games-widget.component\";\n\ninterface IUserMenuPcProps {\n closeMenu: () => void;\n}\n\nexport class UserMenuPc extends OrbitComponent<IUserMenuPcProps> {\n\n private _renderUserMenuHeader() {\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n return (\n <UserMenuHeaderBox className=\"cy-user-menu-header-box\">\n <WelcomeUser/>\n <UserMenuClosePCButtonBox>\n <UserMenuCloseIconBox className=\"cy-user-menu-close-btn\" onClick={this.props.closeMenu}>\n <CloseIcon size={1.4} />\n </UserMenuCloseIconBox>\n </UserMenuClosePCButtonBox>\n </UserMenuHeaderBox>\n );\n }\n\n render() {\n return (\n <>\n {this._renderUserMenuHeader()}\n <UserMenuScrollWrapperBox>\n <FlexContainerBox direction=\"column\" style={{height: \"100%\"}}>\n <FlexGrowItemBox>\n <UserDetails />\n <UserBalance />\n <MiniControlCenterComponent/>\n <UsefulLinks />\n <SaveGamesWidgetComponent />\n </FlexGrowItemBox>\n <FlexFixedSizeItemBox>\n <UserMenuFooter />\n </FlexFixedSizeItemBox>\n </FlexContainerBox>\n </UserMenuScrollWrapperBox>\n </>\n );\n }\n}\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const MobileMenuHeaderBox = styledBox(\"MobileMenuHeaderBox\");","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const MobileBackBox = styledBox(\"MobileBackBox\");\n","import styled from \"styled-components\";\n\nexport const MobileBackLabelBox = styled.span`\n padding-top: 2px;\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const UserMenuRootBox = styledBox('UserMenuRootBox');\n","import styled from \"styled-components\";\n\nexport const UserMenuWrapperDefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n padding-bottom: env(safe-area-inset-bottom, 0);\n\n &:hover {\n overflow-y: auto;\n }\n`","import {UserMenuWrapperDefaultBox} from \"./user-menu-wrapper.default.box\";\n\nexport const UserMenuWrapperBox = UserMenuWrapperDefaultBox;","import styled from \"styled-components\";\n\nexport const UserMenuHolderDefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 0 0 0.5rem 0;\n overflow: hidden;\n \n /*\n .cgp-rtl & {\n padding: 0.5rem 0 0.5rem 0.25rem;\n }\n */\n`","import {UserMenuHolderDefaultBox} from \"./user-menu-holder.default.box\";\n\nexport const UserMenuHolderBox = UserMenuHolderDefaultBox;","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {WelcomeUser} from \"../welcome-user/welcome-user.component\";\nimport {UserMenuMobile} from \"./user-menu/user-menu-mobile.component\";\nimport {UserMenuPc} from \"./user-menu/user-menu-pc.component\";\nimport { UserMenuCloseIconBox } from \"./close-button/boxes/close-icon/user-menu-close-icon.box\";\nimport { MobileMenuHeaderBox } from \"../main-nav/boxes/mobile/mobile-menu-header.box\";\nimport { FlexGrowItemBox, FlexContainerBox } from \"../../themes/architecture/css-helpers/flex\";\nimport { MobileBackBox } from \"../main-nav/boxes/mobile/back/mobile-back.box\";\nimport { MobileBackLabelBox } from \"../main-nav/boxes/mobile/back/mobile-back-label.box\";\n\nimport {FreePlayContainerComponent} from \"../free-play/free-play-container.component\";\nimport {UserMenuRootBox} from \"./user-menu/boxes/root/user-menu-root.box\";\nimport {UserMenuWrapperBox} from \"./user-menu/boxes/wrapper/user-menu-wrapper.box\";\nimport {UserMenuHolderBox} from \"./user-menu/boxes/holder/user-menu-holder.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport classNames from \"classnames\";\nimport {USER_MENU_OPEN} from \"../../themes/css-global-classes\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface UserMenuProps extends ComponentServicesPick<'userMenu'> {\n \n}\n\nconst ComponentBody = observer(class extends OrbitComponent<UserMenuProps> {\n\n private holderRef = React.createRef<HTMLDivElement>();\n\n private _renderUserMenuHeader() {\n\n if (this.services.device.isMobile) {\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n return (\n <MobileMenuHeaderBox>\n <FlexGrowItemBox flexBasis=\"20%\">\n {this._renderMobileBackButton()}\n </FlexGrowItemBox>\n <FlexGrowItemBox flexBasis=\"60%\">\n <WelcomeUser />\n </FlexGrowItemBox>\n <FlexGrowItemBox flexBasis=\"20%\">\n <FlexContainerBox justifyContent=\"flex-end\">\n <UserMenuCloseIconBox className=\"cy-user-menu-close-btn\" onClick={this._closeMenu}>\n <CloseIcon size={2} />\n </UserMenuCloseIconBox>\n </FlexContainerBox>\n </FlexGrowItemBox>\n </MobileMenuHeaderBox>\n );\n }\n\n return null;\n }\n\n render() {\n if(!this.services.user.isAuthorized) {\n return null;\n }\n\n const cssClasses = classNames(CyClass('cy-user-menu'), {\n [USER_MENU_OPEN]: this.props.userMenu.isOpen\n });\n\n return (\n <UserMenuRootBox className={cssClasses} zIndex={this.props.userMenu.zIndex}>\n <UserMenuWrapperBox>\n {this._renderUserMenuHeader()}\n <UserMenuHolderBox ref={this.holderRef}>\n {this._renderMenuContents()}\n </UserMenuHolderBox>\n </UserMenuWrapperBox>\n </UserMenuRootBox>\n );\n }\n\n private _renderMobileBackButton() {\n if(!this.services.device.isMobile)\n return null;\n if(!this.props.userMenu.isRewardsInfo)\n return null;\n\n const BackIcon = this.services.theme.currentTheme.icons.backIcon;\n return (\n <MobileBackBox className=\"cy-rewards-mobile-back-icon\" onClick={this._closeMenu}>\n <BackIcon />\n <MobileBackLabelBox>{this.services.translation.translate(\"BACK\")}</MobileBackLabelBox>\n </MobileBackBox>\n );\n }\n\n private _renderMenuContents() {\n if(this.props.userMenu.isRewardsInfo) {\n return (<FreePlayContainerComponent/>);\n } else if(this.services.device.isMobile) {\n return <UserMenuMobile/>;\n } else {\n return <UserMenuPc closeMenu={this._closeMenu}/>;\n }\n }\n\n private _closeMenu = () => {\n if (this.holderRef.current) {\n this.holderRef.current.scrollTop = 0;\n }\n this.props.userMenu.closeMenu();\n }\n});\n\n\nexport const UserMenu = withServices(ComponentBody, ['userMenu']);","import styled, {css} from \"styled-components\";\nimport { CssRule } from \"../../../../themes/architecture/css-helpers/css-rule\";\n\n\n// To prevent bugs like BUG #1810621 we should add the scrollbar width to the drawer width\nconst DRAWER_WIDTH = 375;\nconst SCROLLBAR_WIDTH = 17; // varies in each browser but none should be larger than 17px\nexport const DrawerBodyDefaultBox = styled.div<{zIndex: number, isBlurBackground?: boolean}>`\n display: flex;\n flex-direction: column;\n position: fixed;\n right: 0;\n top: 0;\n width: ${DRAWER_WIDTH + SCROLLBAR_WIDTH}px;\n height: 100%;\n transform: translateX(100%);\n transition: transform 0.25s ease;\n z-index: ${props => props.zIndex};\n\n ${({isBlurBackground}) => isBlurBackground ? css`\n backdrop-filter: blur(15px);\n ` : css`\n background: ${props => props.theme.colors.backgroundDark};\n `};\n \n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);\n width: 100vw;\n }\n\n &.open {\n transform: translateX(0%);\n ${CssRule.For.RTL.build()} & {\n left: 0;\n right: auto;\n }\n &::before {\n content: \"\";\n position: absolute;\n width: 50px;\n height: 100%;\n left: -50px;\n background: linear-gradient(90deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5));\n\n ${CssRule.For.RTL.build()} & {\n background: linear-gradient(90deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n right: -50px;\n left: auto\n }\n \n pointer-events: none;\n }\n }\n`;","import {DrawerBodyDefaultBox} from \"./drawer-body.default.box\";\n\nexport const DrawerBodyBox = DrawerBodyDefaultBox;\n","import styled from 'styled-components';\ninterface IDrawerContentBoxProps {\n visible: boolean;\n}\nexport const DrawerContentBox = styled.div<IDrawerContentBoxProps>`\n display: ${props => props.visible ? 'block' : 'none'};\n width: 100%;\n height: 100%;\n overflow-y: auto;\n`;\n","import styled from 'styled-components';\n\nexport const SpinnerDefaultBox = styled.div<{isMigrationSpinner?: boolean}>`\n position: fixed;\n height: 100%;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: ${props => props.isMigrationSpinner ? 99999 : 110};\n background-color: ${props => props.theme.colors.backgroundDark};\n`;\n","import {SpinnerDefaultBox} from './spinner.default.box';\n\nexport const SpinnerBox = SpinnerDefaultBox;","import styled from 'styled-components';\n\n\nexport const SpinnerBrandDefaultBox = styled.div`\n width: 180px;\n height: 180px;\n position: relative;\n \n`;","import {SpinnerBrandDefaultBox} from './spinner-brand.default.box';\n\nexport const SpinnerBrandBox = SpinnerBrandDefaultBox;","import styled, {keyframes} from 'styled-components';\n\nconst spinnerAnimationKeyframes = keyframes`\n 0% {\n transform: rotate(0);\n animation-timing-function: cubic-bezier(.55, .055, .675, .19)\n }\n 50% {\n transform: rotate(180deg);\n animation-timing-function: cubic-bezier(.215, .61, .355, 1)\n }\n to {\n transform: rotate(360deg)\n }\n`;\n\nexport const SpinnerBackgroundDefaultBox = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 0;\n background-image: url(\"${props => props.theme.assets.images.SpriteSheetPC1920_png.toString()}\");\n background-position: -1063px -318px;\n animation: ${spinnerAnimationKeyframes} 1s infinite;\n image-rendering: pixelated;\n animation-direction: normal;\n animation-play-state: running;\n animation-duration: 1s;\n mix-blend-mode: screen;\n`;","import {SpinnerBackgroundDefaultBox} from \"./spinner-background.default.box\";\nimport styled from \"styled-components\";\n\nexport const SpinnerBackgroundCasino777Box = styled(SpinnerBackgroundDefaultBox)`\n background-position: -1039px -70px;\n width: 250px;\n height: 215px;\n animation: none;\n`;","import {SpinnerBackgroundDefaultBox} from \"./spinner-background.default.box\";\nimport styled from \"styled-components\";\n\nexport const SpinnerBackgroundCIPBox = styled(SpinnerBackgroundDefaultBox)`\n background-position: -1253px -318px;\n border-radius: 50%;\n`;","import styled from \"styled-components\";\nimport {SpinnerBackgroundDefaultBox} from \"./spinner-background.default.box\";\n\nexport const SpinnerBackgroundCISBox = styled(SpinnerBackgroundDefaultBox)`\n background-position: -1253px -318px;\n border-radius: 50%;\n`;","import {SpinnerBackgroundDefaultBox} from \"./spinner-background.default.box\";\nimport styled from \"styled-components\";\n\nexport const SpinnerBackgroundMrGreenBox = styled(SpinnerBackgroundDefaultBox)`\n background-position: -1060px -320px;\n`;\n","import {SpinnerBackgroundDefaultBox} from './spinner-background.default.box';\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {SpinnerBackgroundCasino777Box} from \"./spinner-background.casino777.box\";\nimport {SpinnerBackgroundCIPBox} from \"./spinner-background.cip.box\";\nimport {SpinnerBackgroundCISBox} from \"./spinner-background.cis.box\";\nimport {SpinnerBackgroundMrGreenBox} from \"./spinner-background.mrgreen.box\";\n\nexport const SpinnerBackgroundBox = styledByTheme(SpinnerBackgroundDefaultBox)\n .forCasino777(SpinnerBackgroundCasino777Box)\n .forCip(SpinnerBackgroundCIPBox)\n .forWsopCip(SpinnerBackgroundCIPBox)\n .forCis(SpinnerBackgroundCISBox)\n .forMrGreen(SpinnerBackgroundMrGreenBox)\n .apply();","import React from 'react';\nimport {SpinnerBox} from \"../spinner/boxes/spinner/spinner.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {SpinnerBrandBox} from \"../spinner/boxes/spinner-brand/spinner-brand.box\";\nimport {SpinnerBackgroundBox} from \"../spinner/boxes/spinner-background/spinner-background.box\";\nimport {observer} from \"mobx-react\";\n\nexport const DrawerSpinnerComponent: React.FC = observer(() => {\n return (\n <SpinnerBox className={CyClass('cy-spinner')}>\n <SpinnerBrandBox className='cy-spinner-brand'>\n <SpinnerBackgroundBox className='cy-spinner-background'/>\n </SpinnerBrandBox>\n </SpinnerBox>\n );\n});","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport classNames from \"classnames\";\nimport {observer} from \"mobx-react\";\nimport {DrawerBodyBox} from \"./boxes/body/drawer-body.box\";\nimport {DrawerContentBox} from './boxes/content/drawer-content.box';\nimport {DrawerSpinnerComponent} from \"./drawer-spinner.component\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\n\nexport interface RightDrawerComponentProps extends ComponentServicesPick<'drawer' | 'dom'> {\n className?: string;\n}\n\nconst ComponentBody: React.FC<RightDrawerComponentProps> = observer((props) => {\n const rightDrawer = props.drawer.right;\n const renderContent = () => {\n const lastVisibleDrawerItemIndex = rightDrawer.getLastVisibleDrawerItemIndex();\n const isSpinnerVisible = rightDrawer.isSpinnerVisible;\n return rightDrawer.currentContent.map((content, index) => {\n return (\n <DrawerContentBox key={content.id} id={content.id} visible={index === lastVisibleDrawerItemIndex && !isSpinnerVisible}>\n {content.render()}\n </DrawerContentBox>\n )\n });\n }\n\n const renderSpinner = () => {\n if(rightDrawer.isSpinnerVisible) {\n return (\n <DrawerSpinnerComponent/>\n )\n }\n\n return null;\n }\n\n const renderDrawer = () => {\n let zIndex = rightDrawer.getOverlayZIndex();\n let isBlurBackground = rightDrawer.hasBlurBackground;\n\n return (\n\n <DrawerBodyBox zIndex={zIndex} isBlurBackground={isBlurBackground} className={classNames(props.className, {\n open: rightDrawer.isOpen\n })}>\n {renderContent()}\n {renderSpinner()}\n </DrawerBodyBox>\n );\n }\n\n return ReactDOM.createPortal(renderDrawer(), props.dom.body);\n\n})\n\n\nexport const RightDrawerComponent = withServices(ComponentBody, [\"drawer\", \"dom\"]);","import {ArenaFiltersConfigurationMap, IArenaViewModel} from \"../arena-view-model.interface\";\nimport {GameInfo} from \"../../../../games/game-info\";\nimport {IGamesFilterStrategy} from \"../../../../games-filter/strategies/games-filter-strategy.interface\";\nimport {VIDEO_SLIDES_ARENA} from \"../../../arena-consts\";\nimport {VideoSlidesArena} from \"../../../../../components/arena-host/video-slides-arena/video-slides-arena.component\";\nimport {UserMenu} from \"../../../../../components/user-menu/user-menu.component\";\nimport React from \"react\";\nimport {IServiceFactoryExtended} from \"../../../../service-factory-extended.interface\";\nimport {RightDrawerComponent} from \"../../../../../components/drawer/drawer.component\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {AdvancedGamesFilterStrategy} from \"../../../../games-filter/strategies/advanced-filter/advanced-games-filter.strategy\";\n\n\nexport default class VideoSlidesArenaModel implements IArenaViewModel {\n constructor(private readonly services: IServiceFactoryExtended) {\n }\n\n readonly filteredGamesCount: number;\n readonly filtersConfigurationMap: ArenaFiltersConfigurationMap;\n readonly listsCount: number;\n maxGamesToShowInList: number;\n\n get allArenaGamesForFiltering(): GameInfo[] {\n return this.services.videoSlides.allGamesInArena;\n }\n\n readonly arenaName: string = VIDEO_SLIDES_ARENA;\n\n\n filterGamesByArenaType(gamesInfo: GameInfo[]): GameInfo[] {\n return [];\n }\n\n getGamesFilteringStrategy(): IGamesFilterStrategy {\n return new AdvancedGamesFilterStrategy(this.services);\n }\n\n getNextBatchSize(currentListPosition: number): number {\n return 0;\n }\n\n renderArena(): React.ReactElement | null {\n return (\n <>\n <VideoSlidesArena />\n <UserMenu />\n <RightDrawerComponent key=\"right-drawer\" className={CyClass('cy-right-drawer')} />\n </>\n );\n }\n\n renderList(listPosition: number): React.ReactElement | null {\n return undefined;\n }\n\n}","import {ServiceBase} from '../ServiceBase';\nimport {IArenasService} from './arenas.service.interface';\nimport {\n HOME_PAGE_ARENA,\n NEW_LIVE_CASINO_AB_ARENA_NAME,\n NEW_LIVE_CASINO_ARENA_NAME, VIDEO_SLIDES_ARENA\n} from './arena-consts';\nimport {\n ArenaConfiguration\n} from \"../configurations/config-data-sections/arenas.configuration\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {IArenaViewModel} from \"./models/arenas/arena-view-model.interface\";\nimport {HomePageArenaModel} from \"./models/arenas/home-page/home-page-arena.model\";\nimport {CasinoLobbyArenaModel} from \"./models/arenas/casino-lobby/casino-lobby-arena.model\";\nimport {VoidArenaModel} from \"./models/arenas/void-arena/void-arena.model\";\nimport {ListsSortOrderStorage} from \"./models/lists-sort-order-storage\";\nimport {NewLiveCasinoArenaModel} from \"./models/arenas/new-live-casino/new-live-casino-arena.model\";\nimport {NewLiveCasinoArenaAbModel} from \"./models/arenas/new-live-casino-ab/new-live-casino-arena-ab.model\";\nimport VideoSlidesArenaModel from \"./models/arenas/video-slides/video-slides-arena.model\";\n\n\nexport class ArenasService extends ServiceBase implements IArenasService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this._postLoginListsSortOrderStorage = new ListsSortOrderStorage(services);\n this._loadArenas();\n }\n\n private _arenas: Record<string, IArenaViewModel> = {};\n private readonly _postLoginListsSortOrderStorage: ListsSortOrderStorage;\n\n private _loadArenas(): void {\n this._arenas[HOME_PAGE_ARENA] = this._createArena(HOME_PAGE_ARENA);\n const arenasConfigs = this.services.configuration.data.arenas;\n for (let arenaName in arenasConfigs) {\n this._arenas[arenaName] = this._createArena(arenaName);\n }\n }\n\n getArena(arenaName: string): IArenaViewModel {\n return this._arenas[arenaName] || new VoidArenaModel(this.services);\n }\n\n private _createArena(arenaName: string): IArenaViewModel | null {\n switch (arenaName) {\n case NEW_LIVE_CASINO_AB_ARENA_NAME:\n return new NewLiveCasinoArenaAbModel(arenaName, this.services, this._postLoginListsSortOrderStorage);\n case HOME_PAGE_ARENA:\n return new HomePageArenaModel(this.services, this._postLoginListsSortOrderStorage);\n case NEW_LIVE_CASINO_ARENA_NAME:\n return new NewLiveCasinoArenaModel(arenaName, this.services);\n case VIDEO_SLIDES_ARENA:\n return new VideoSlidesArenaModel(this.services);\n default:\n return new CasinoLobbyArenaModel(arenaName, this.services, this._postLoginListsSortOrderStorage);\n }\n }\n\n getCurrentArena(): IArenaViewModel {\n const arenaName = this.services.routing.currentRoute.data?.arenaType;\n if (!arenaName) {\n return new VoidArenaModel(this.services);\n }\n return this.getArena(arenaName)\n\n }\n\n getArenaConfig(arenaType: string): ArenaConfiguration {\n return this.services.configuration.data.arenas[arenaType];\n }\n\n shouldHideFiltersButtonMobile(): boolean {\n const arenasWithoutFilterButton: string[] = [NEW_LIVE_CASINO_ARENA_NAME];\n const currentRoute = this.services.routing.currentRoute;\n return arenasWithoutFilterButton.includes(currentRoute?.data?.arenaType);\n }\n}\n","import {LanguageSwitcherItemConfiguration} from '../../../app-bootstrap/config-interfaces/b2c-startup.configurations';\nimport {IServiceFactoryExtended} from '../../service-factory-extended.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {ILanguageSwitcherItem} from './language-switcher-item.interface';\n\nexport class LanguageSwitcherItem implements ILanguageSwitcherItem {\n constructor(private _config: LanguageSwitcherItemConfiguration, private services: IServiceFactoryExtended) {\n }\n\n get title(): string {\n return this._config.title;\n }\n\n get url(): string {\n return this._config.url;\n }\n\n get isCurrent(): boolean {\n return false;\n }\n\n async makeCurrent(): Promise<void> {\n this.services.analytics.sendOrbitUserFlowEvent('Navigation','Language', this.title);\n\n this._executeOnClickJs();\n let url = this._config.url;\n\n if(this.services.device.hybrid.isEmbedded) {\n this.services.window.openSelf(url);\n } else {\n await this._createCookie();\n\n await this.services.user.logout();\n if(this._config.sendFunnelParameters) {\n url = (await this.services.marketing).appendSCutToUrl(url);\n }\n this.services.window.openSelf(url);\n\n }\n }\n\n private _createCookie(): Promise<void> {\n if(this.services.user.isAuthorized) {\n return this.services.user.getAutoLoginToken()\n .then(token => {\n this.services.cookies.createDomainCookie('orbit_autologin_token', token);\n }).catch(() => {\n this.services.logger.error('Failed to get autologin token in order to switch language');\n });\n } else {\n return Promise.resolve();\n }\n }\n\n private _executeOnClickJs(): void {\n try {\n\n\n if (!this._config.onClickJs) {\n return;\n }\n\n if (!Check.isString(this._config.onClickJs)) {\n this.services.logger.error(`onClickJs is not a string for language switcher item ${this.title}`);\n return;\n }\n\n if (this._config.onClickJs.length > 50) {\n this.services.logger.error(`Too long callback method for language switcher item ${this.title} click event: ${this._config.onClickJs.substring(0, 50)} ...`);\n return;\n }\n\n // eslint-disable-next-line\n let func = new Function(this._config.onClickJs);\n func();\n }\n catch (err) {\n this.services.logger.error(`Failed to execute onClickJs for language swithcer item ${this.title}; onClickJs: ${this._config.onClickJs}`, err);\n }\n }\n}\n\n\n","import {IServiceFactoryExtended} from '../../service-factory-extended.interface';\nimport {ILanguageSwitcherItem} from './language-switcher-item.interface';\n\nexport class LanguageSwitcherSection {\n constructor(private _services: IServiceFactoryExtended, private _title: string, private _fallbackTitleKey: string, private _items: ILanguageSwitcherItem[]) {\n\n }\n\n get title(): string {\n if(this._title) {\n return this._title;\n }\n\n return this._services.translation.translate(this._fallbackTitleKey);\n }\n\n get items(): ILanguageSwitcherItem[] {\n return this._items;\n }\n}\n","import {ILanguageSwitcherItem} from './language-switcher-item.interface';\n\nexport class SelectedLanguageSwitcherItem implements ILanguageSwitcherItem {\n constructor(private _title: string) {\n\n }\n get isCurrent(): boolean {\n return true;\n }\n get title(): string {\n return this._title;\n }\n\n get url(): string {\n return '';\n }\n\n makeCurrent(): void {\n }\n\n}\n","import {ServiceBase} from '../ServiceBase';\nimport {ILanguageData, ILanguageService} from './language.service.interface';\nimport {action, observable, makeObservable, runInAction} from 'mobx';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {TranslatedText} from './translated-text';\n\nimport {LanguageSwitcherStructure} from './language-switcher/language-switcher-structure';\nimport {LanguageSwitcherItem} from './language-switcher/language-switcher-item';\nimport {LanguageSwitcherSection} from './language-switcher/language-switcher-section';\nimport {SelectedLanguageSwitcherItem} from './language-switcher/selected-language-switcher-item';\nimport {ILanguageSwitcherItem} from './language-switcher/language-switcher-item.interface';\nimport {\n LanguageSwitcherConfiguration,\n LanguageSwitcherItemConfiguration, LanguageSwitcherSectionConfiguration\n} from '../../app-bootstrap/config-interfaces/b2c-startup.configurations';\nimport {isInsideAutomation} from \"../../../utils/automation-helpers\";\n\nexport class LanguageService extends ServiceBase implements ILanguageService {\n constructor(private _defaultLanguageData: ILanguageData, services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._loadLanguageData();\n\n let fireReactionImmediately = false;\n if (this._isLanguageSwitcherEnabled) {\n this._setLanguageSwitcher(this.services.configuration.startupConfiguration.b2c.languageSwitcher);\n if (this.languageSwitcher.isEmpty) {\n fireReactionImmediately = true;\n }\n } else {\n this._setLanguageSwitcher(null);\n }\n this.reaction(\n () => {\n return {\n uri: this.services.location.currentUri,\n config: this._isLanguageSwitcherEnabled\n };\n },\n ({uri, config}) => {\n if (Boolean(config)) {\n this._updateLanguageSwitcher(uri.pathName.toString());\n } else {\n this._setLanguageSwitcher(null);\n }\n },\n {\n fireImmediately: fireReactionImmediately\n }\n );\n\n\n }\n\n private get _isLanguageSwitcherEnabled(): boolean {\n return Boolean(this.services.configuration.data.languageSwitcher?.display)\n }\n\n\n private _lastUrlWithoutTheFragmentQueriedForLanguageSwitcher = '';\n\n public get isRTLLanguage(): boolean {\n return this.services.dom.getElementsByTagName('html')[0].classList.contains('cgp-rtl');\n }\n\n get currentLanguage(): string {\n return this.services.configuration.startupConfiguration.b2c.language.iso3;\n }\n\n get currentLanguageIso2(): string {\n return this.services.configuration.startupConfiguration.b2c.language.iso2;\n }\n\n\n private _getDefaultTexts(): TranslatedText {\n return this._defaultLanguageData.text || {};\n }\n\n\n private _loadLanguageData(): void {\n let textOverrides = this.services.configuration.startupConfiguration.orbit.lang?.text;\n let translatedTexts = {...this._getDefaultTexts(), ...textOverrides};\n\n this._setTranslatedTexts(translatedTexts);\n }\n\n\n @observable.ref\n translatedTexts: TranslatedText = {};\n\n @action.bound\n private _setTranslatedTexts(data: TranslatedText): void {\n this.translatedTexts = data;\n }\n\n @observable.ref\n languageSwitcher: LanguageSwitcherStructure;\n\n\n private _extractLanguageSwitcherFromConfig(langSwitcherConfig: LanguageSwitcherConfiguration) {\n let languagesSection = this._extractLangSwitcherSection(langSwitcherConfig && langSwitcherConfig.languages, langSwitcherConfig && langSwitcherConfig.languageSettings, 'CHOOSE_LANG');\n\n let countriesSection = this._extractLangSwitcherSection(langSwitcherConfig && langSwitcherConfig.countries, langSwitcherConfig && langSwitcherConfig.countrySettings, 'CHOOSE_COUNTRY')\n\n return {\n languagesSection: languagesSection,\n countriesSection: countriesSection,\n isEmpty: languagesSection.items.length === 0 && countriesSection.items.length === 0\n };\n }\n\n @action.bound\n private _setLanguageSwitcher(langSwitcherConfig: LanguageSwitcherConfiguration): void {\n this.languageSwitcher = this._extractLanguageSwitcherFromConfig(langSwitcherConfig);\n }\n\n private _extractLangSwitcherSection(itemsConfig: LanguageSwitcherItemConfiguration[], sectionConfig: LanguageSwitcherSectionConfiguration, fallbackTitleKey: string): LanguageSwitcherSection {\n itemsConfig = itemsConfig || [];\n sectionConfig = sectionConfig || {title: '', current: ''};\n\n let items: ILanguageSwitcherItem[] = [];\n\n if (sectionConfig.current && itemsConfig.length > 0) {\n items.push(new SelectedLanguageSwitcherItem(sectionConfig.current));\n }\n\n itemsConfig.forEach(cfg => {\n items.push(new LanguageSwitcherItem(cfg, this.services));\n });\n\n return new LanguageSwitcherSection(this.services,\n sectionConfig.title,\n fallbackTitleKey,\n items);\n\n }\n\n async _updateLanguageSwitcher(url: string): Promise<void> {\n if (!this._isLanguageSwitcherEnabled) {\n return;\n }\n\n if (this._lastUrlWithoutTheFragmentQueriedForLanguageSwitcher === url) {\n return;\n }\n\n\n if(this.services.device.hybrid.isEmbedded && !isInsideAutomation()) {\n if(this.languageSwitcher.isEmpty) {\n this._setLanguageSwitcher(this._getLanguageSwitcherConfigForHybridEmbedded());\n }\n return;\n }\n\n\n this._lastUrlWithoutTheFragmentQueriedForLanguageSwitcher = url;\n\n try {\n const config = await (await this.services.cmsApi).getLanguageSwitcherConfiguration(url);\n if (config) {\n const langSwitcher = this._extractLanguageSwitcherFromConfig(config);\n if (!langSwitcher.isEmpty) {\n runInAction(() => {\n this.languageSwitcher = langSwitcher;\n });\n }\n } else {\n if (this.languageSwitcher.isEmpty && this.services.configuration.startupConfiguration.sdk.config.ExtraProperties.env !== \"prod\") {\n this._setLanguageSwitcher(this._getLanguageSwitcherConfigForTestEnvironments());\n }\n }\n } catch (err) {\n this.services.logger.error('Failed to get language switcher from API', err);\n if (this.languageSwitcher.isEmpty && this.services.configuration.startupConfiguration.sdk.config.ExtraProperties.env !== \"prod\") {\n this._setLanguageSwitcher(this._getLanguageSwitcherConfigForTestEnvironments());\n }\n }\n }\n\n\n private _getLanguageSwitcherConfigForTestEnvironments(): LanguageSwitcherConfiguration {\n return this.services.theme.themeCustomizer.getLanguageSwitcherConfigForTestEnvironments();\n }\n\n\n private _getLanguageSwitcherConfigForHybridEmbedded(): LanguageSwitcherConfiguration {\n return {\n languages: [\n {title: \"English\", url: \"?langID=eng\"},\n {title: \"简体ä¸æ–‡\", url: \"?langID=chi\"},\n {title: \"Deutsch\", url: \"?langID=ger\"},\n {title: \"Español\", url: \"?langID=spa\"},\n {title: \"Suomi\", url: \"?langID=fin\"},\n {title: \"Français\", url: \"?langID=fre\"},\n {title: \"日本語\", url: \"?langID=jpn\"},\n {title: \"РуÑÑкий\", url: \"?langID=rus\"},\n {title: \"ภาษาไทย\", url: \"?langID=tha\"},\n {title: \"Portuguese\", url: \"?langID=por\"}\n ],\n countries: [],\n languageSettings: { \"title\": \"\", \"current\": \"\" },\n countrySettings: {\"title\": \"\"}\n }\n\n }\n}\n","import { action, observable, makeObservable, reaction, IReactionDisposer } from 'mobx';\nimport {IStickyHandler} from './sticky-handler.interface';\nimport {DomEventSubscription} from '../../../utils/event-listener-registration';\nimport {IServiceFactory} from \"../../services/service-factory.interface\";\n\nexport class StickyHandler implements IStickyHandler {\n private _onScrollSubscription: DomEventSubscription;\n private _onHeaderHeightReactionDisposer: IReactionDisposer\n private _scrollTopMinValue: number = -1;\n private _elementRef: HTMLElement | null = null;\n\n constructor(private services: IServiceFactory, el?: HTMLElement) {\n makeObservable(this);\n this.updateElement(el);\n this._onHeaderHeightReactionDisposer = reaction(() => this.services.header.headerHeight, (headerHeight) => {\n this._scrollTopMinValue = headerHeight;\n }, {\n fireImmediately: true\n });\n\n this._onScrollSubscription = this.services.window.subscribeTo.scroll(this.onWindowScroll);\n }\n\n updateElement(el: HTMLElement | null): void {\n this._elementRef = el;\n }\n\n @observable.ref\n private _isSticky: boolean = false;\n get isSticky(): boolean {\n return this._isSticky;\n }\n\n @action.bound\n private _setIsSticky(value: boolean): void {\n this._isSticky = value;\n }\n\n private onWindowScroll = () => {\n if (this._scrollTopMinValue < 0) {\n this._setIsSticky(false);\n } else {\n if (this._elementRef) {\n const topElementPosition = this._elementRef.getBoundingClientRect().top;\n this._setIsSticky(this._scrollTopMinValue >= topElementPosition);\n } else {\n this._setIsSticky(this.services.window.scrollY > this._scrollTopMinValue);\n }\n }\n };\n\n dispose() {\n if (this._onScrollSubscription) {\n this._onScrollSubscription.dispose();\n }\n this._onHeaderHeightReactionDisposer();\n this._elementRef = null;\n }\n\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {StickyHandler} from \"../../components/sticky-handler/sticky-handler\";\nimport {IStickyHandler} from \"../../components/sticky-handler/sticky-handler.interface\";\n\nexport class StickyHandlerFactoryService extends ServiceBase{\n\n createStickyHandler(el?: HTMLElement): IStickyHandler{\n return new StickyHandler(this.services, el);\n }\n\n}\n","import {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {CGPEventSubscription} from '../sdk/cgp-sdk.interface';\nimport {OnGameOpenParams} from '../sdk/sdk-events';\nimport {OpenGameParameters} from '../games/game-info';\nimport { action, IReactionDisposer, observable, reaction, makeObservable } from 'mobx';\nimport {Uri} from '../location/uri/uri';\nimport {IGameRouteHandlerService} from \"./game-route-handler.service.interface\";\n\n\nexport class GameRouteHandlerService extends ServiceBase implements IGameRouteHandlerService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._subscribeToGameEvents();\n\n this._subscribeToUriAndGamesMapChanges(true);\n }\n\n\n\n private _onGameOpenSubscription: CGPEventSubscription;\n private _onGameCloseSubscription: CGPEventSubscription;\n private _currentUriAndGamesMapReaction: IReactionDisposer | null = null;\n\n\n private _subscribeToUriAndGamesMapChanges(isFirstSubscription: boolean) {\n this._currentUriAndGamesMapReaction = reaction(() => {\n return {\n uri: this.services.location.currentUri\n }\n },\n (data) => {\n if (this._isOpenGameUri(data.uri)) {\n this._tryOpenGameFromUrl();\n } else {\n this.services.gameRunner.then(gameRunner => {\n gameRunner.currentRunningGame?.closeGame({\n shouldSuggestNextGame: false\n });\n })\n\n }\n }, {fireImmediately: isFirstSubscription});\n }\n\n private _unsubscribeFromUriAndGamesMapChanges() {\n if(this._currentUriAndGamesMapReaction) {\n this._currentUriAndGamesMapReaction();\n this._currentUriAndGamesMapReaction = null;\n }\n }\n\n\n private _subscribeToGameEvents() {\n this._onGameOpenSubscription = this.services.sdk.events.onGameOpen(this._onGameOpen.bind(this));\n this._onGameCloseSubscription = this.services.sdk.events.onGameClose(this._onGameClose.bind(this));\n }\n\n private _unsubscribeFromGameEvents() {\n if(this._onGameOpenSubscription) {\n this._onGameOpenSubscription.off();\n }\n\n if(this._onGameCloseSubscription) {\n this._onGameCloseSubscription.off();\n }\n }\n\n private _getOpenGameFragment(gameType: number, isReal: boolean) {\n return `#page/game/${gameType}/real/${isReal ? '1' : '0'}`;\n }\n\n private _isOpenGameUri(uri: Uri): boolean {\n if(uri.hash.value.startsWith('page/game')) {\n return true;\n } else {\n return false;\n }\n }\n\n private _shouldSkipNextCloseGameRedirect: boolean = false;\n\n private _previousUri: Uri | null = null;\n private _onGameOpen(eventParams: OnGameOpenParams): void {\n\n if(!this._isOpenGameUri(this.services.location.currentUri)) {\n this._previousUri = this.services.location.currentUri;\n }\n\n this._unsubscribeFromUriAndGamesMapChanges();\n this.services.location.push(this._getOpenGameFragment(eventParams.gameType, eventParams.isReal)).finally(() => this._subscribeToUriAndGamesMapChanges(false));\n }\n\n private _onGameClose(): void {\n if(this._shouldSkipNextCloseGameRedirect){\n this._shouldSkipNextCloseGameRedirect = false;\n return;\n }\n\n let urlToGoBack = this._previousUri ? this._previousUri.toString() : this.services.location.currentUri.pathName.toString();\n this.services.location.push(urlToGoBack);\n }\n\n @observable.ref\n lastAttemptToOpenGameFromUrl: number;\n @action.bound\n private _setLastAttemptToOpenGameFromUrl() {\n this.lastAttemptToOpenGameFromUrl = Date.now();\n }\n\n private _isOpenGameFromUrlInProgress = false;\n async _tryOpenGameFromUrl() {\n if(this._isOpenGameFromUrlInProgress) {\n return;\n }\n\n let hash = this.services.location.currentUri.hash;\n\n if(hash.isEmpty) {\n return;\n }\n\n let currentFragment = hash.value;\n\n let fragmentParts = currentFragment.split('/');\n\n if((fragmentParts[0] || '').toLowerCase() !== 'page'\n || (fragmentParts[1] || '').toLowerCase() !== 'game') {\n return;\n }\n let gameType = fragmentParts[2];\n let gameMode = fragmentParts[4];\n\n let gameInfo = await this.services.games.getGameInfo(parseInt(gameType));\n if(!gameInfo) {\n this._onGameClose();\n this._setLastAttemptToOpenGameFromUrl();\n return;\n }\n\n let openGameParams: OpenGameParameters = {\n isRealMode: gameMode === '1'\n };\n\n this._isOpenGameFromUrlInProgress = true;\n this._unsubscribeFromGameEvents();\n try {\n await gameInfo.open(openGameParams);\n }\n catch (err) {\n this._onGameClose();\n this.services.logger.error(`Failed to open game from URL: ${this.services.location.currentUri.toString()}`, err);\n }\n finally {\n this._isOpenGameFromUrlInProgress = false;\n this._subscribeToGameEvents();\n this._setLastAttemptToOpenGameFromUrl();\n }\n }\n\n redirectToHistory(): void {\n this._shouldSkipNextCloseGameRedirect = true;\n this.services.linksNavigation.openGamingHistoryPage();\n }\n\n}\n","import {LauncherOverrides} from '../config-interfaces/launcher-overrides';\nimport {IStorageService} from '../../services/storage/storage.service.interface';\nimport {ILoggerService} from '../../services/logger/logger.service.interface';\nimport {LAUNCHER_DATA_STORAGE_KEY} from \"../../../app-consts\";\nconst overrideJson = require('json-override');\n\nexport class LauncherOverridesReader {\n constructor(private _storage: IStorageService, private _logger: ILoggerService) {\n\n }\n\n private _getLauncherOverrides() {\n\n try {\n let cgp_client: any = this._storage.getJson(LAUNCHER_DATA_STORAGE_KEY);\n if(cgp_client) {\n return cgp_client.clientData;\n }\n } catch (err) {\n this._logger.error('Failed to read cgp_client from local storage', err);\n }\n\n return null;\n }\n\n private _getOrbitSpecificConfigOverrides() {\n try {\n let orbitSpecificOverrides = this._storage.getJson('orbitConfigOverrides');\n if(orbitSpecificOverrides) {\n return orbitSpecificOverrides;\n }\n } catch (err) {\n this._logger.error('Failed to get orbitConfigOverrides from local storage', err);\n }\n\n\n return null;\n }\n\n getOverrides() : LauncherOverrides | null {\n let launcherOverrides: LauncherOverrides = this._getLauncherOverrides();\n let orbitSpecificOverrides = this._getOrbitSpecificConfigOverrides();\n\n\n if(launcherOverrides || orbitSpecificOverrides) {\n launcherOverrides = (launcherOverrides || {}) as LauncherOverrides;\n\n if(orbitSpecificOverrides) {\n launcherOverrides.orbit = launcherOverrides.orbit || {};\n launcherOverrides.orbit.configs = launcherOverrides.orbit.configs || {};\n overrideJson(launcherOverrides.orbit.configs, orbitSpecificOverrides);\n }\n\n return launcherOverrides;\n }\n\n return null;\n }\n}\n\n\n\n\n","import {ILauncherService} from './launcher.service.interface';\nimport {LauncherOverrides} from '../../app-bootstrap/config-interfaces/launcher-overrides';\nimport {Check} from '@sparkware/app-utils';\nimport {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {LauncherOverridesReader} from '../../app-bootstrap/launcher-overrides-reader/launcher-overrides-reader';\n\nexport class LauncherService extends ServiceBase implements ILauncherService{\n\n private _launcherOverrides: LauncherOverrides;\n\n\n constructor(services: IServiceFactoryExtended){\n super(services);\n let launcherOverridesReader = new LauncherOverridesReader(this.services.localStorage, this.services.logger);\n this._launcherOverrides = launcherOverridesReader.getOverrides() || {};\n\n }\n\n getCMSOrigin(): string | undefined {\n return this._launcherOverrides.orbit && this._launcherOverrides.orbit.cmsSource;\n }\n\n getTestedGames(): number[] {\n\n let gameTypes = this._launcherOverrides.orbit && this._launcherOverrides.orbit.addedGameTypesFromSdm;\n if(!gameTypes) {\n return [];\n }\n\n if(Check.isNumber(gameTypes)) { // it means that the launcher gave us a single game\n return [gameTypes];\n }\n\n if(Check.isString(gameTypes)) {\n return gameTypes.split(',').map(gt => parseInt(gt)).filter(gt => Check.isNumber(gt));\n }\n\n if(Check.isArray(gameTypes)) {\n return gameTypes.map(gt => parseInt(String(gt))).filter(gt => Check.isNumber(gt));\n }\n\n return [];\n }\n\n getSegmentsOverride(): Record<string, boolean> {\n return this._launcherOverrides?.webData?.segments || {};\n }\n}\n","import {ServiceBase} from '../ServiceBase';\nimport {action, observable, makeObservable, computed} from 'mobx';\nimport {Check} from '@sparkware/app-utils';\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {ISpinnerService} from \"../../../common/interfaces/spinner.service.interface\";\n\nexport type SPINNER_TYPE = \"REGULAR_SPINNER\" | \"MIGRATION_SPINNER\";\n\ninterface ActiveSpinnerInfo {\n startTime: number | null;\n spinnerType: SPINNER_TYPE | null;\n}\n\nexport class SpinnerService extends ServiceBase implements ISpinnerService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n }\n\n @computed\n get isSpinning(): boolean {\n return !Check.isNullOrUndefined(this._activeSpinner?.startTime);\n }\n\n @computed\n public get isTheRegularSpinnerActive(): boolean {\n return this.activeSpinnerType === \"REGULAR_SPINNER\";\n }\n\n @computed\n public get isTheMigrationSpinnerActive(): boolean {\n return this.activeSpinnerType === \"MIGRATION_SPINNER\";\n }\n\n @computed\n private get activeSpinnerType(): SPINNER_TYPE | null {\n return this._activeSpinner?.spinnerType || null;\n }\n\n @observable.ref\n private _activeSpinner: ActiveSpinnerInfo | null = null;\n\n @action.bound\n startSpinner(isMigrationSpinner?: boolean): void {\n\n if (this.isSpinning) {\n this.stopSpinner();\n }\n\n this._activeSpinner = {\n spinnerType: isMigrationSpinner ? \"MIGRATION_SPINNER\" : \"REGULAR_SPINNER\",\n startTime: this.services.time.performanceNow()\n };\n }\n\n @action.bound\n stopSpinner() {\n if(this.isSpinning) {\n this._activeSpinner = null;\n }\n }\n}","import {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {ICrossBrandsService, ICrossSpecificNavigationInfo} from \"./cross-brands.service.interface\";\nimport _ from \"../../../sdk/src/utils/underscore\";\nimport {LocalStorageKeys} from \"../storage/local-storage-keys\";\n\nexport class CrossBrandsService extends ServiceBase implements ICrossBrandsService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n const specificNavigationInfo = this._extractSpecificNavigationFromCurrentUrl();\n if(specificNavigationInfo) {\n this.services.localStorage.setJson(LocalStorageKeys.crossBrandSpecificNavigationInfo, specificNavigationInfo);\n } else {\n this.services.localStorage.removeItem(LocalStorageKeys.crossBrandSpecificNavigationInfo);\n }\n\n this.services.sdk.events.onTokenLifetimeExpired(this._onTokenLifetimeExpired.bind(this));\n }\n\n private _onTokenLifetimeExpired(): void {\n const crossBrandNavigationInfo = this.crossBackSpecificNavigation;\n if(crossBrandNavigationInfo && crossBrandNavigationInfo.callbackMethod === 'redirect') {\n this.services.location.redirect(crossBrandNavigationInfo.callbackUrl + '?ActionId=201');\n }\n }\n\n get crossBackSpecificNavigation(): ICrossSpecificNavigationInfo | null {\n return this.services.localStorage.getJson<ICrossSpecificNavigationInfo>(LocalStorageKeys.crossBrandSpecificNavigationInfo);\n }\n\n get isCrossFromOtherBrand(): boolean {\n return Boolean(this.crossBackSpecificNavigation);\n }\n\n get isCrossFromPoker(): boolean {\n return this.isCrossFromOtherBrand && this.services.segmentation.isCIP;\n }\n\n get isCrossFromSport(): boolean {\n return this.isCrossFromOtherBrand && this.services.segmentation.isCIS;\n }\n\n private _extractSpecificNavigationFromCurrentUrl(): ICrossSpecificNavigationInfo | null {\n const specificNavigationParamValue = this.services.location.currentUri.queryParams.getParamValue('specificNavigation');\n if(!specificNavigationParamValue) {\n return null;\n }\n\n if(specificNavigationParamValue.startsWith('http')) {\n return {\n callbackUrl: specificNavigationParamValue\n };\n }\n\n const specificNavigationXml = _.parseXml(specificNavigationParamValue);\n if(!specificNavigationXml) {\n return null;\n }\n\n let callbackUrl: string;\n let callbackMethod: string;\n let xmlElement = specificNavigationXml.getElementsByTagName(\"CallBackURL\");\n if (xmlElement && xmlElement.length > 0) {\n callbackUrl = xmlElement.item(0).textContent;\n }\n\n xmlElement = specificNavigationXml.getElementsByTagName(\"callbackMethod\");\n if (xmlElement && xmlElement.length > 0) {\n callbackMethod = xmlElement.item(0).textContent;\n }\n\n if(callbackUrl) {\n return {\n callbackUrl: callbackUrl,\n callbackMethod: callbackMethod\n };\n }\n }\n}\n","import React from 'react';\nimport {OrbitSuspense} from '../../base-components/orbit-suspense/orbit-suspense';\nimport {RouteDefinition} from '../../../services/routing-configuration/route-definition/route-definition';\nimport {\n CASINO_GAMES_ARENA_NAME,\n CIP_ALL_GAMES_ARENA_NAME, HOME_PAGE_ARENA, JACKPOTS_ARENA_NAME, NEW_GAMES_ARENA_NAME,\n NEW_LIVE_CASINO_ARENA_NAME, PROGRESSIVE_SLOTS_ARENA_NAME,\n SLOTS_ARENA_NAME, VIDEO_POKER_ARENA_NAME\n} from '../../../services/arenas/arena-consts';\nimport {GamingHistoryType} from \"../../../services/gaming-history/gaming-history-type\";\nimport {\n CASINO_GAMES_PAGE, CHALLENGE_PAGE, GAMES_OPEN_SESSIONS_PAGE,\n GAMING_HISTORY_PAGE,\n HOME_PAGE,\n JACKPOTS_PAGE, NEW_GAMES_PAGE,\n NEW_LIVE_CASINO_PAGE, PROGRESSIVE_VIDEO_SLOTS_PAGE, SESSION_HISTORY_PAGE,\n SLOTS_PAGE, VIDEO_POKER_PAGE\n} from '../../../themes/css-global-classes';\nimport {MINI_CIP_BASE_ROUTE, MINI_CIS_BASE_ROUTE} from '../../../services/mini-orbit/mini-orbit-consts';\nimport {LaboratoryShowcase} from \"../../laboratory-showcase/laboratory-showcase.component\";\n\n\nconst MiniOrbitPageComponent = React.lazy(\n () => import(\"../mini-orbit-page.component\").then(({MiniOrbitPageComponent}) => ({default: MiniOrbitPageComponent}))\n);\nconst MiniOrbitHomePageComponent = React.lazy(\n () => import(\"../homepage/mini-orbit-homepage.component\").then(({MiniOrbitHomePageComponent}) => ({default: MiniOrbitHomePageComponent}))\n);\nconst MiniOrbitArenaHostComponent = React.lazy(\n () => import(\"../arenas/mini-orbit-arena-host.component\").then(({MiniOrbitArenaHostComponent}) => ({default: MiniOrbitArenaHostComponent}))\n);\nconst GamingHistoryComponent = React.lazy(\n () => import(\"../../gaming-history/gaming-history.component\").then(({GamingHistoryComponent}) => ({default: GamingHistoryComponent}))\n);\n\nconst GamesOpenSessionsPageComponent = React.lazy(\n () => import('../../games-open-sessions/games-open-sessions-page.component').then(({GamesOpenSessionsPageComponent}) => ({default: GamesOpenSessionsPageComponent}))\n);\n\nconst RichPageComponent = React.lazy(\n () => import('../../rich-page/rich-page.component').then(({RichPageComponent}) => ({default: RichPageComponent}))\n);\n\nexport const MINI_ORBIT_ROUTING_DEFINITION: Array<RouteDefinition> = [\n {\n paths: [`${MINI_CIP_BASE_ROUTE}`, `${MINI_CIS_BASE_ROUTE}`],\n exact: true,\n data: {arenaType: HOME_PAGE_ARENA},\n cssSelectors: HOME_PAGE,\n render: () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense>\n <MiniOrbitHomePageComponent/>\n </OrbitSuspense>} />\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/slots`, `${MINI_CIS_BASE_ROUTE}/slots`],\n exact: true,\n data: {arenaType: SLOTS_ARENA_NAME},\n cssSelectors: SLOTS_PAGE,\n render: () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense>\n <MiniOrbitArenaHostComponent arenaName={SLOTS_ARENA_NAME}/>\n </OrbitSuspense>} />\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/new-games`, `${MINI_CIS_BASE_ROUTE}/new-games`],\n exact: true,\n data: {arenaType: NEW_GAMES_ARENA_NAME},\n cssSelectors: NEW_GAMES_PAGE,\n render: () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense>\n <MiniOrbitArenaHostComponent arenaName={NEW_GAMES_ARENA_NAME}/>\n </OrbitSuspense>} />\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/video-poker`, `${MINI_CIS_BASE_ROUTE}/video-poker`],\n exact: true,\n data: {arenaType: VIDEO_POKER_ARENA_NAME},\n cssSelectors: VIDEO_POKER_PAGE,\n render: () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense>\n <MiniOrbitArenaHostComponent arenaName={VIDEO_POKER_ARENA_NAME}/>\n </OrbitSuspense>} />\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/progressive-video-slots`, `${MINI_CIS_BASE_ROUTE}/progressive-video-slots`],\n exact: true,\n data: {arenaType: PROGRESSIVE_SLOTS_ARENA_NAME},\n cssSelectors: PROGRESSIVE_VIDEO_SLOTS_PAGE,\n render: () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense>\n <MiniOrbitArenaHostComponent arenaName={PROGRESSIVE_SLOTS_ARENA_NAME}/>\n </OrbitSuspense>} />\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/casino-games`, `${MINI_CIS_BASE_ROUTE}/casino-games`],\n exact: true,\n data: {arenaType: CASINO_GAMES_ARENA_NAME},\n cssSelectors: CASINO_GAMES_PAGE,\n render: () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense>\n <MiniOrbitArenaHostComponent arenaName={CASINO_GAMES_ARENA_NAME}/>\n </OrbitSuspense>} />\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/jackpots`, `${MINI_CIS_BASE_ROUTE}/jackpots`],\n exact: true,\n data: {arenaType: JACKPOTS_ARENA_NAME},\n cssSelectors: JACKPOTS_PAGE,\n render: () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense>\n <MiniOrbitArenaHostComponent arenaName={JACKPOTS_ARENA_NAME}/>\n </OrbitSuspense>} />\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/live-casino`, `${MINI_CIS_BASE_ROUTE}/live-casino`],\n exact: true,\n data: {arenaType: NEW_LIVE_CASINO_ARENA_NAME},\n cssSelectors: NEW_LIVE_CASINO_PAGE,\n render: () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense>\n <MiniOrbitArenaHostComponent arenaName={NEW_LIVE_CASINO_ARENA_NAME}/>\n </OrbitSuspense>} />\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/gaming-history`, `${MINI_CIS_BASE_ROUTE}/gaming-history`],\n exact: true,\n cssSelectors: GAMING_HISTORY_PAGE,\n render: () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense>\n <GamingHistoryComponent historyType={GamingHistoryType.UserHistory} redirectHomeIfUnauthorized={true} showMoreDetails={true}/>\n </OrbitSuspense>} />\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/session-history`, `${MINI_CIS_BASE_ROUTE}/session-history`],\n exact: true,\n cssSelectors: SESSION_HISTORY_PAGE,\n render: () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense>\n <GamingHistoryComponent historyType={GamingHistoryType.SessionHistory} redirectHomeIfUnauthorized={true} showMoreDetails={true}/>\n </OrbitSuspense>} />\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/open-bets`, `${MINI_CIS_BASE_ROUTE}/open-bets`],\n exact: true,\n cssSelectors: GAMES_OPEN_SESSIONS_PAGE,\n render: () => <OrbitSuspense key={GAMES_OPEN_SESSIONS_PAGE}>\n <MiniOrbitPageComponent content={\n <GamesOpenSessionsPageComponent />\n }/>\n\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/cipallgames`, `${MINI_CIS_BASE_ROUTE}/cipallgames`],\n exact: true,\n data: {arenaType: CIP_ALL_GAMES_ARENA_NAME},\n render: () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense>\n <MiniOrbitArenaHostComponent arenaName={CIP_ALL_GAMES_ARENA_NAME}/>\n </OrbitSuspense>} />\n </OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/challenge`, `${MINI_CIS_BASE_ROUTE}/challenge`],\n exact: true,\n cssSelectors: CHALLENGE_PAGE,\n render: () => <OrbitSuspense><RichPageComponent/></OrbitSuspense>\n },\n {\n paths: [`${MINI_CIP_BASE_ROUTE}/laboratory`, `${MINI_CIS_BASE_ROUTE}/laboratory`],\n exact: true,\n render: () => <OrbitSuspense><LaboratoryShowcase /></OrbitSuspense>\n },\n];","import React from 'react';\nimport {OrbitSuspense} from '../../components/base-components/orbit-suspense/orbit-suspense';\nimport {IRoutingConfigurationService} from './routing-configuration.service.interface';\nimport {RoutingConfiguration} from './configuration/routing-configuration';\nimport {ServiceBase} from '../ServiceBase';\nimport {GamingHistoryType} from '../gaming-history/gaming-history-type';\nimport {MINI_ORBIT_ROUTING_DEFINITION} from '../../components/mini-orbit/routing/mini-orbit-routing-definition';\nimport {\n BLACKJACK_PAGE,\n CASINO_GAMES_PAGE,\n CHALLENGE_PAGE,\n EXCLUSIVE_888_GAMES_PAGE,\n GAMING_HISTORY_PAGE,\n HOME_PAGE,\n INSTANT_WIN_GAMES_PAGE,\n JACKPOTS_PAGE,\n NEW_GAMES_PAGE,\n NEW_LIVE_CASINO_PAGE,\n PROGRESSIVE_VIDEO_SLOTS_PAGE,\n ROULETTE_PAGE,\n SCRATCH_CARDS_PAGE,\n SESSION_HISTORY_PAGE,\n SLOTS_PAGE,\n VIDEO_POKER_PAGE,\n VIRTUAL_SPORTS_PAGE,\n TIPPING_HISTORY_PAGE,\n NEW_LIVE_AB_CASINO_PAGE,\n GAMES_OPEN_SESSIONS_PAGE\n} from '../../themes/css-global-classes';\nimport {\n BLACKJACK_ARENA_NAME,\n CASINO_GAMES_ARENA_NAME,\n EXCLUSIVE_ARENA_NAME,\n HOME_PAGE_ARENA,\n INSTANT_WIN_GAMES_ARENA_NAME,\n JACKPOTS_ARENA_NAME,\n NEW_LIVE_CASINO_AB_ARENA_NAME,\n NEW_GAMES_ARENA_NAME,\n NEW_LIVE_CASINO_ARENA_NAME,\n PROGRESSIVE_SLOTS_ARENA_NAME,\n ROULETTE_ARENA_NAME,\n SCRATCH_CARDS_ARENA_NAME,\n SLOTS_ARENA_NAME,\n VIDEO_POKER_ARENA_NAME,\n VIRTUAL_SPORT_ARENA_NAME,\n VIDEO_SLIDES_ARENA\n} from '../arenas/arena-consts';\nimport {CmsBannerComponent} from \"../../components/cms-banner/cms-banner.component\";\nimport {BannerComponent} from \"../../components/banner/banner.component\";\n\nconst ArenaHostComponent = React.lazy(\n () => import(\"../../components/arena-host/arena-host.component\").then(({ArenaHostComponent}) => ({default: ArenaHostComponent}))\n);\n\nconst CmsPageComponent = React.lazy(\n () => import('../../components/cms-page/cms-page.component').then(({CmsPageComponent}) => ({default: CmsPageComponent}))\n);\nconst GamingHistoryPageComponent = React.lazy(\n () => import('../../components/gaming-history/gaming-history-page.component').then(({GamingHistoryPageComponent}) => ({default: GamingHistoryPageComponent}))\n);\n\nconst GamesOpenSessionsPageComponent = React.lazy(\n () => import('../../components/games-open-sessions/games-open-sessions-page.component').then(({GamesOpenSessionsPageComponent}) => ({default: GamesOpenSessionsPageComponent}))\n);\n\nconst TippingHistoryPageComponent = React.lazy(\n () => import('../../components/tipping-history/tipping-history-page.component').then(({TippingHistoryPageComponent}) => ({default: TippingHistoryPageComponent}))\n);\n\nconst RichPageComponent = React.lazy(\n () => import('../../components/rich-page/rich-page.component').then(({RichPageComponent}) => ({default: RichPageComponent}))\n);\nconst LaboratoryShowcase = React.lazy(\n () => import('../../components/laboratory-showcase/laboratory-showcase.component').then(({LaboratoryShowcase}) => ({default: LaboratoryShowcase}))\n);\n\nexport class RoutingConfigurationService extends ServiceBase implements IRoutingConfigurationService {\n getRoutingConfiguration(): RoutingConfiguration {\n return {\n fallbackRoute: {\n render: () => <OrbitSuspense><CmsPageComponent/></OrbitSuspense>\n },\n routes: [\n {\n paths: ['/'],\n exact: true,\n data: {arenaType: HOME_PAGE_ARENA},\n cssSelectors: HOME_PAGE,\n render: () =>\n <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/slots', '/video-slots', '/slot-machines', '/slot-machine', '/spillemaskiner', '/spelautomater', '/casino-games/online-slots', '/spielautomaten', '/gokkasten', '/online-slots'],\n exact: true,\n data: {arenaType: SLOTS_ARENA_NAME},\n cssSelectors: SLOTS_PAGE,\n render: () =>\n <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/new-games', '/nieuwe-spellen', '/new', '/neue-slots/', '/nya-spel/', '/nye-spil'],\n exact: true,\n data: {arenaType: NEW_GAMES_ARENA_NAME},\n cssSelectors: NEW_GAMES_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/progressive-video-slots'],\n exact: true,\n data: {arenaType: PROGRESSIVE_SLOTS_ARENA_NAME},\n cssSelectors: PROGRESSIVE_VIDEO_SLOTS_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/casino-games/online-roulette', '/roulette', '/ruleta', '/roleta'],\n exact: true,\n data: {arenaType: ROULETTE_ARENA_NAME},\n cssSelectors: ROULETTE_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/virtual-sports'],\n exact: true,\n data: {arenaType: VIRTUAL_SPORT_ARENA_NAME},\n cssSelectors: VIRTUAL_SPORTS_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/casino-games/online-blackjack', '/blackjack'],\n exact: true,\n data: {arenaType: BLACKJACK_ARENA_NAME},\n cssSelectors: BLACKJACK_PAGE,\n render: () =><OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/casino-games/jackpots', '/jackpots', '/jackpot'],\n exact: true,\n data: {arenaType: JACKPOTS_ARENA_NAME},\n cssSelectors: JACKPOTS_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/casino-games/instant-win-games', '/instant-win-games'],\n exact: true,\n data: {arenaType: INSTANT_WIN_GAMES_ARENA_NAME},\n cssSelectors: INSTANT_WIN_GAMES_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/casino-games/all-games','/casino-games', '/jocuri-casino', '/jogos', '/card-table-games', '/juegos-de-casino', '/giochi-da-casino', '/casino-spil', '/casinospel', '/casino-spellen', '/table-games', '/bordsspel', '/bordspil'],\n exact: true,\n data: {arenaType: CASINO_GAMES_ARENA_NAME},\n cssSelectors: CASINO_GAMES_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/gaming-history'],\n exact: true,\n cssSelectors: GAMING_HISTORY_PAGE,\n render: () => <OrbitSuspense key='gaming-history'>\n <GamingHistoryPageComponent key={GamingHistoryType.UserHistory} historyType={GamingHistoryType.UserHistory} redirectHomeIfUnauthorized={true} showMoreDetailsLink={true}/>\n </OrbitSuspense>\n },\n {\n paths: ['/tipping-history'],\n exact: true,\n cssSelectors: TIPPING_HISTORY_PAGE,\n render: () => <OrbitSuspense key='tipping-history'>\n <TippingHistoryPageComponent redirectHomeIfUnauthorized={true}/>\n </OrbitSuspense>\n },\n {\n paths: ['/session-history'],\n exact: true,\n cssSelectors: SESSION_HISTORY_PAGE,\n render: () => <OrbitSuspense key={'session-history'}>\n <GamingHistoryPageComponent key={GamingHistoryType.SessionHistory} historyType={GamingHistoryType.SessionHistory} redirectHomeIfUnauthorized={true} showMoreDetailsLink={false}/>\n </OrbitSuspense>\n },\n {\n paths: ['/open-bets'],\n exact: true,\n cssSelectors: GAMES_OPEN_SESSIONS_PAGE,\n render: () => <OrbitSuspense key={GAMES_OPEN_SESSIONS_PAGE}>\n <GamesOpenSessionsPageComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/challenge'],\n data: {preventNotifications : true},\n exact: true,\n cssSelectors: CHALLENGE_PAGE,\n render: () => <OrbitSuspense><RichPageComponent/></OrbitSuspense>\n },\n {\n paths: ['/live-casino', '/cazinou-live', '/ruleta-en-vivo', '/live-dealer'],\n exact: true,\n data: {arenaType: NEW_LIVE_CASINO_ARENA_NAME},\n cssSelectors: NEW_LIVE_CASINO_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/live-casino/new/'],\n exact: true,\n data: {arenaType: NEW_LIVE_CASINO_ARENA_NAME},\n cssSelectors: NEW_LIVE_CASINO_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/live-casino-arena'],\n exact: true,\n data: {arenaType: NEW_LIVE_CASINO_AB_ARENA_NAME},\n cssSelectors: NEW_LIVE_CASINO_PAGE + ' ' + NEW_LIVE_AB_CASINO_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/video-poker'],\n exact: true,\n data: {arenaType: VIDEO_POKER_ARENA_NAME},\n cssSelectors: VIDEO_POKER_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/scratch-cards', '/rubbellose', '/reveal-games'],\n exact: true,\n data: {arenaType: SCRATCH_CARDS_ARENA_NAME},\n cssSelectors: SCRATCH_CARDS_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/888-exclusive-games', '/888-exklusive-spiele', '/888-exclusieve-spellen', '/si-exclusive-games/', '/exklusive-spiele', '/exklusiva-spel', '/eksklusive-spil/', '/exclusive-games'],\n exact: true,\n data: {arenaType: EXCLUSIVE_ARENA_NAME},\n cssSelectors: EXCLUSIVE_888_GAMES_PAGE,\n render: () => <OrbitSuspense>\n <ArenaHostComponent />\n </OrbitSuspense>\n },\n {\n paths: ['/laboratory/'],\n exact: true,\n render: () => <OrbitSuspense><LaboratoryShowcase /></OrbitSuspense>\n },\n {\n paths: ['/banner-test/'],\n exact: true,\n render: () => (<OrbitSuspense>\n <CmsBannerComponent key={'TEST_Banner'}\n showPlaceholder={true}\n componentID={\"509045\"}\n templateID={\"392012\"}/>\n <BannerComponent key={'TEST_Banner'}\n showPlaceholder={true}\n componentID={\"509045\"}\n templateID={\"392012\"}\n bannerAdminPlaceholderId={\"AA6ACFAF-DE6E-45C5-8DB4-2166C5116507\"}/>\n </OrbitSuspense>)\n },\n {\n paths: ['/video-slides'],\n exact: true,\n data: {standalone: true, arenaType: VIDEO_SLIDES_ARENA},\n render: () => <OrbitSuspense><ArenaHostComponent /></OrbitSuspense>\n },\n ...MINI_ORBIT_ROUTING_DEFINITION\n ]\n }\n }\n}\n","import {RouteBase} from './route-base';\n\nexport class OrbitRoute extends RouteBase {\n\n /**\n * Overrides base class\n * @return {boolean}\n * @private\n */\n protected _isOrbitRoute(): boolean {\n return true;\n }\n}\n","import {IRoutingService} from './routing.service.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport { action, observable, makeObservable } from 'mobx';\nimport {IRoute} from './route/route.interface';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {Uri} from '../location/uri/uri';\nimport {OrbitRoute} from './route/orbit-route';\nimport {FallbackRoute} from './route/fallback-route';\nimport {UriPath} from '../location/uri-path/uri-path';\nimport {tryMatchPath} from './routing-utils';\nimport {Check} from \"@sparkware/app-utils\";\nimport {RouteDefinition} from \"../routing-configuration/route-definition/route-definition\";\nimport {FEATURE_ROUTE_OVERWRITE} from \"../../../common/const/ab-testing-names\";\n\n//https://reacttraining.com/react-router/web/api/match\n\nexport class RoutingService extends ServiceBase implements IRoutingService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this.reaction(() => this.services.location.currentUri,\n (uri) => this._updateCurrentRoute(uri),\n {\n fireImmediately: true\n });\n\n this.reaction(\n () => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (isAuthorized) {\n\n let featureData = this.services.abTestingFeatureDataProvider.getFeature(FEATURE_ROUTE_OVERWRITE);\n\n if (Check.isNullOrUndefined(featureData)) {\n let abChangeRoute = this.services.localStorage.getJson('orbit_AbRouteOverwrite');\n if (!Check.isNullOrUndefined(abChangeRoute)) {\n this.services.localStorage.removeItem('orbit_AbRouteOverwrite');\n }\n }\n\n let routeChangeData = featureData && featureData.Properties && featureData.Properties.routeschange;\n\n if (!Check.isNullOrUndefined(routeChangeData)) {\n this.services.localStorage.setItem('orbit_AbRouteOverwrite', routeChangeData);\n }\n }\n\n this._doRedirect(this.currentRoute?.routeDefinition);\n }\n );\n }\n\n @observable.ref\n currentRoute: IRoute;\n\n private _currentPathName: UriPath = null;\n\n @action.bound\n private _updateCurrentRoute(uri: Uri): void {\n if (this._currentPathName?.equals(uri.pathName)) {\n return;\n }\n\n let routingConfiguration = this.services.routingConfiguration.getRoutingConfiguration();\n let match = tryMatchPath(uri.pathName.toString(), routingConfiguration.routes);\n\n if (match) {\n let didRedirect = this._doRedirect(match.routeDefinition);\n if (didRedirect) {\n return;\n }\n this._removeCurrentRouteCssSelectors();\n this.currentRoute = new OrbitRoute(this._overrideArenaType(match.routeDefinition), match.routeParams);\n this._addCurrentRouteCssSelectors();\n } else {\n if (this.services.miniOrbit.isEnabled) {\n this.currentRoute = new FallbackRoute(this.services.miniOrbit.fallbackRouteRender);\n } else {\n this.currentRoute = new FallbackRoute(routingConfiguration.fallbackRoute.render);\n }\n }\n this._currentPathName = uri.pathName;\n\n // We need this timeout to fix the following iOS bug(pages are not scrolled to the top upon navigation):\n // https://dev.azure.com/888holdings/GamingNDL/_workitems/edit/2072775\n // Probably happens because the route change here + scrollTo happen before the new page component loads.\n \n setTimeout(() => this.services.window.scrollTo(0, 0), 300);\n }\n\n private _overrideArenaType(routeDefinition: RouteDefinition): RouteDefinition {\n try {\n let routesToArenaTypesMapping = this.services.configuration.data.arenasRoutingOverride?.routesToArenaTypesMapping;\n if (routesToArenaTypesMapping) {\n for (const path of routeDefinition.paths) {\n if (routesToArenaTypesMapping[path]) {\n routeDefinition.data.arenaType = routesToArenaTypesMapping[path];\n return routeDefinition;\n }\n }\n }\n return routeDefinition;\n } catch (e) {\n this.services.logger.error('Error while overriding arenaType in routing service!', e);\n return routeDefinition;\n }\n }\n\n private _removeCurrentRouteCssSelectors() {\n this._getCurrentRouteCssSelectors().forEach(selector => {\n this.services.dom.body.classList.remove(selector);\n });\n }\n\n private _addCurrentRouteCssSelectors() {\n this._getCurrentRouteCssSelectors().forEach(selector => {\n this.services.dom.body.classList.add(selector);\n });\n }\n\n private _getCurrentRouteCssSelectors(): string[] {\n if (!this.currentRoute?.routeDefinition?.cssSelectors) {\n return [];\n }\n\n return this.currentRoute.routeDefinition.cssSelectors.split(' ').filter(selector => selector);\n\n }\n\n isOrbitRoute(path: UriPath): boolean {\n let match = tryMatchPath(path.toString(), this.services.routingConfiguration.getRoutingConfiguration().routes);\n if (match) {\n return true;\n } else {\n return false;\n }\n }\n\n private _cleanUpOldAbTestData(): void {\n let abChangeRoute = this.services.localStorage.getJson('orbit_abChangeRoute');\n if (!Check.isNullOrUndefined(abChangeRoute)) {\n // This cleanup is done to delete the local storage data remaining from the previous AB Test\n // TODO: Remove this after some time\n this.services.localStorage.removeItem('orbit_abChangeRoute');\n }\n }\n\n _doRedirect(routeDefinition: RouteDefinition): boolean {\n try {\n\n this._cleanUpOldAbTestData();\n\n let abChangeRoute = this.services.localStorage.getJson('orbit_AbRouteOverwrite');\n\n for (let index = 0; index < routeDefinition.paths?.length; index++) {\n let currentPathName = routeDefinition.paths[index]?.toLowerCase();\n if (abChangeRoute && abChangeRoute[currentPathName]) {\n this.services.location.push(abChangeRoute[currentPathName]);\n return true;\n }\n }\n return false;\n } catch (err) {\n this.services.logger.error('Routing service: doRedirect failed. Error: ' + err);\n return false;\n }\n }\n}\n","import {ServiceBase} from '../ServiceBase';\nimport {IOverlayService} from './overlay.service.interface';\nimport { action, computed, observable, runInAction, makeObservable } from 'mobx';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {IOverlayConsumer, IOverlaySubscription} from \"./overlay-consumer.interface\";\n//import {LoginFormOverlayController} from \"./login-form-overlay-controller\";\nimport {Check} from \"@sparkware/app-utils\";\n\n\nexport class OverlayService extends ServiceBase implements IOverlayService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n //this._loginFormOverlayController = new LoginFormOverlayController(services);\n //this.registerConsumer(this._loginFormOverlayController);\n this.reaction(\n () => this.isOpen,\n (isOpen) => {\n if(isOpen) {\n this.disableScrolling();\n } else {\n this.enableScrolling();\n }\n this.services.sdk.setOrbitActiveOverlayExists(isOpen);\n }\n );\n }\n\n //private readonly _loginFormOverlayController: LoginFormOverlayController;\n\n @observable\n private _overlayConsumers: IOverlayConsumer[] = [];\n\n registerConsumer(consumer: IOverlayConsumer): IOverlaySubscription {\n runInAction(() => {\n this._overlayConsumers.push(consumer);\n });\n\n return {\n unsubscribe: () => {\n const index = this._overlayConsumers.findIndex(c => c === consumer);\n if(index >= 0) {\n runInAction(() => {\n this._overlayConsumers.splice(index, 1);\n })\n }\n }\n }\n }\n\n\n get zIndex(): number | undefined {\n const zIndexes = this._overlayConsumers.filter(c => c.needsOverlay)\n .map(c => c.getOverlayZIndex())\n .filter(zIndex => !Check.isNullOrUndefined(zIndex));\n if(zIndexes.length === 0) {\n return undefined;\n }\n\n return Math.max(...zIndexes);\n }\n\n countCurrentConsumers(predicate: (consumer: IOverlayConsumer) => boolean): number {\n let count = 0;\n for(let c of this._overlayConsumers) {\n if(predicate(c)) {\n count++;\n }\n }\n return count;\n }\n\n\n @computed\n get isOpen(): boolean {\n //We do map here to iterate over all consumer in this way isOpen will be dependent on all observables in the _overlayConsumers\n return this._overlayConsumers.map(c => c.needsOverlay)\n .some(needsOverlay => needsOverlay);\n }\n\n\n @action.bound\n closeOverlay(): void {\n this._overlayConsumers.forEach(c => c.onOverlayClicked());\n }\n\n disableScrolling(): void {\n this.services.dom.disableScrolling();\n\n }\n enableScrolling(): void {\n if(!this.isOpen) {\n this.services.dom.enableScrolling();\n }\n\n }\n}\n","import {DateFormattedToRegulationOffset, ITimeService} from './time.service.interface';\nimport {ServiceBase} from \"../ServiceBase\";\nimport DateFormatter from \"../../../sdk/src/utils/date_formatter\";\nimport {CGPEventSubscription, IDateFormattedToRegulationOffset} from '../sdk/cgp-sdk.interface';\nimport {UndefinedString} from '../../../common/types/nullable-types';\n\nexport class TimeService extends ServiceBase implements ITimeService {\n now(): number {\n return Date.now();\n }\n\n performanceNow(): number {\n return performance.now();\n }\n\n getCurrentDate(): Date {\n return new Date();\n }\n\n getCurrentServerDate(): Date {\n return this.services.sdk.getCurrentServerDate();\n }\n\n formatLastLogin(date: UndefinedString, dateFormattedToRegulation: UndefinedString): string {\n const lastLogin = this._formatToRegulationOffset(date, dateFormattedToRegulation);\n const formattedText = this._lastLoginFormattedText(lastLogin.date + 'Z', lastLogin.isUTC)\n return formattedText;\n }\n\n private _formatToRegulationOffset(date: UndefinedString, dateFormattedToRegulation: UndefinedString): IDateFormattedToRegulationOffset {\n return this.services.sdk.formatToRegulationOffset(date, dateFormattedToRegulation);\n }\n\n private _lastLoginFormattedText(lastLogin: Date | string, isUtc: boolean): string {\n return DateFormatter.format(lastLogin.toString(), this._getRegulationDateTimeFormat(), isUtc);\n }\n\n private _getRegulationDateTimeFormat(): string {\n return this.services.sdk.dateAndTimeFormat.dateTime || this.getDateTimeHistoryFormat();\n }\n\n getDateFormat(): string {\n return this.services.sdk.dateAndTimeFormat.date;\n }\n\n getTimeFormat(): string {\n return this.services.sdk.dateAndTimeFormat.time;\n }\n\n getDateTimeFormat(): string {\n return this.services.sdk.dateAndTimeFormat.dateTime;\n }\n\n getDateTimeHistoryFormat(): string {\n return this.services.sdk.dateAndTimeFormat.dateTimeHistory;\n }\n\n getTimezoneOffset(): number {\n return (new Date().getTimezoneOffset() / 60) * (-1);\n }\n\n formatHistoryRecordDateTime(date: Date | string, isUtc: boolean): string {\n return DateFormatter.format(date.toString(), this.getDateTimeHistoryFormat(), isUtc);\n }\n\n onServerTimeUpdated(callBack: () => void): CGPEventSubscription {\n return this.services.sdk.events.onServerTimeUpdated(callBack);\n }\n\n convertToRegulationTimeZone(date: Date): DateFormattedToRegulationOffset {\n return this.services.sdk.convertToRegulationTimeZone(date);\n }\n\n format(date: any, mask?: string, utc?: boolean): string {\n return this.services.sdk.format(date, mask, utc);\n }\n}","import {ServiceBase} from '../ServiceBase';\nimport { action, observable, reaction, makeObservable } from 'mobx';\nimport {SEO_CATEGORIES} from '../../consts/seo-categories';\nimport {\n AiNewRecommendedGames,\n IAiNewGamesEngineService\n} from \"./ai-new-games.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nexport class AiNewGamesEngineService extends ServiceBase implements IAiNewGamesEngineService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n reaction(() => this.services.user.isAuthorized,\n () => {\n this._aiNewRecommendedGamesData = null;\n });\n }\n\n @observable.ref\n _aiNewRecommendedGamesData: AiNewRecommendedGames | null = null;\n private _isAINewRecommendedGamesUpdateInProgress = false;\n\n get aiNewRecommendedGames(): AiNewRecommendedGames | null {\n if (Check.isNullOrUndefined(this._aiNewRecommendedGamesData)) {\n this._updateAiNewRecommendedGames();\n }\n return this._aiNewRecommendedGamesData;\n }\n\n @action.bound\n private _setAiNewRecommendedGames(value: AiNewRecommendedGames) {\n\n let tempGameTypesMap = {};\n\n if (value.gameTypes) {\n value.gameTypes.forEach((gameType, i) => tempGameTypesMap[gameType] = i);\n }\n\n this._aiNewRecommendedGamesData = {...value, gameTypes: (value.gameTypes || []), gameTypesMap: tempGameTypesMap};\n }\n\n private async _updateAiNewRecommendedGames(): Promise<void> {\n if(this._isAINewRecommendedGamesUpdateInProgress) {\n return;\n }\n this._isAINewRecommendedGamesUpdateInProgress = true;\n try {\n if(this.services.user.isAuthorized) {\n let aiRecommendationsData = await this.services.sdk.getAINewRecommendations({filterOutRecentlyPlayedGames: true});\n this._setAiNewRecommendedGames({\n gameTypes: aiRecommendationsData?.gameTypes || [],\n engine: aiRecommendationsData?.engine\n });\n } else {\n // we need this setTimeout because _updateAiNewRecommendedGames is called from aiNewRecommendedGames getter\n // which in turn might be called from a computed observable and this doesn't like to mobx\n setTimeout(() => {\n this._setAiNewRecommendedGames({\n gameTypes: [],\n engine: ''\n });\n })\n\n }\n\n this._sendAINewRecommendationAnalytics();\n } finally {\n this._isAINewRecommendedGamesUpdateInProgress = false;\n }\n\n }\n\n private _sendAINewRecommendationAnalytics(): void {\n if(!this.aiNewRecommendedGames) {\n return;\n }\n\n let analyticsObject = this.aiNewRecommendedGames.gameTypes.reduce((result, gameType, index) => {\n result[gameType] = index;\n return result;\n }, {});\n\n\n this.services.analytics.sendElasticInfoEvent({\n category: SEO_CATEGORIES.AI_NEW_GAMES_RECOMMENDATIONS,\n action: JSON.stringify(analyticsObject),\n label: this.aiNewRecommendedGames.engine,\n eventType:\"Orbit_AI_Feature\"\n }, true);\n }\n}\n","import React from 'react';\nimport {IThemeCustomizer, IThemeService} from './theme.service.interface';\nimport {OrbitTheme} from '../../themes/architecture/orbit-theme.interface';\nimport { action, observable, makeObservable } from 'mobx';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {IThemeDefinition} from \"./theme-definition.interface\";\nimport {SDK_CSS_OVERRIDE} from \"../../themes/css-global-classes\";\nimport {StandardThemeCustomizer} from \"./standard-theme-customizer\";\nimport {ThemeName} from \"../../themes/architecture/theme-names\";\nimport {IThemeBoxes} from \"./theme-boxes.interface\";\n\nexport class ThemeService extends ServiceBase implements IThemeService {\n\n constructor(services: IServiceFactoryExtended, themeDefinition: IThemeDefinition, defaultBoxes: IThemeBoxes) {\n super(services);\n\n makeObservable(this);\n this._boxes = {\n ...defaultBoxes,\n ...themeDefinition.themeBoxes\n }\n\n this._setCurrentTheme(themeDefinition);\n this.services.dom.body.classList.add(SDK_CSS_OVERRIDE)\n }\n\n\n\n @observable.ref\n private _currentThemeDefinition: IThemeDefinition | null;\n\n get themeName(): ThemeName {\n return this._currentThemeDefinition.themeName;\n }\n\n get currentTheme(): OrbitTheme | null {\n return this._currentThemeDefinition?.shellTheme;\n }\n\n private readonly _boxes: IThemeBoxes;\n get boxes(): IThemeBoxes{\n return this._boxes;\n }\n\n get mainContentTheme(): OrbitTheme {\n return this._currentThemeDefinition.mainContentTheme;\n }\n\n get popupsTheme(): OrbitTheme {\n return this._currentThemeDefinition.popupsTheme;\n }\n\n get toastersTheme(): OrbitTheme {\n return this._currentThemeDefinition.toastersTheme;\n }\n\n get shouldUseSquareIcons(): boolean {\n return this.services.device.hybrid.isEmbedded || Boolean(this._currentThemeDefinition.useSquareIconsForGames);\n }\n\n get themeCustomizer(): IThemeCustomizer {\n const createThemeCustomizer = this._currentThemeDefinition.createThemeCustomizer;\n if (createThemeCustomizer) {\n return createThemeCustomizer(this.services);\n }\n return new StandardThemeCustomizer(this.services);\n }\n\n @action.bound\n private _setCurrentTheme(themeDefinition: IThemeDefinition) {\n this._currentThemeDefinition = themeDefinition;\n }\n\n renderGlobalStyles(): React.ReactNode {\n return this.currentTheme.globalStyles;\n }\n\n}\n\n","import {IMiniOrbitCommunicationAdapter} from '../mini-orbit-communication-adapter.interface';\nimport {IServiceFactoryExtended} from '../../../service-factory-extended.interface';\nimport {IAutoLoginParams} from '../../../../../common/interfaces/autologin-params.interface';\nimport {IDepositWidgetAppLaunchInfo} from \"@sparkware/uc-sdk-core/lib/apps/deposit/deposit-widget.interfaces\";\n\nexport class VoidCommunicationAdapter implements IMiniOrbitCommunicationAdapter {\n constructor(private services: IServiceFactoryExtended) {\n }\n\n onUserKicked(logoutReason: number): Promise<IAutoLoginParams>{\n return Promise.resolve(null);\n }\n\n openUrlInExternalBrowser = (url: string): void => {\n this.services.logger.error('You are not suppose to call MiniOrbitService.openUrl because orbit is not in the mini mode');\n this.services.window.open(url);\n };\n\n onSiteLoaded(): void { }\n onAutologinSuccess(): void { }\n onAutologinFailed(): void { }\n openControlCenter(): void { }\n openDeposit(data: IDepositWidgetAppLaunchInfo): Promise<void> { return Promise.reject() };\n\n}\n","import React from 'react';\nimport {OrbitSuspense} from '../../components/base-components/orbit-suspense/orbit-suspense';\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IMiniOrbitService} from \"./mini-orbit.service.interface\";\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {\n ArenasHeaderButtonConfig,\n MiniOrbitConfiguration\n} from '../configurations/config-data-sections/mini-orbit.configuration';\nimport {Check} from '@sparkware/app-utils';\nimport {RouteRender} from '../routing-configuration/route-definition/route-definition';\nimport {UriPath} from '../location/uri-path/uri-path';\nimport {IControlCenterData, IMiniOrbitCommunicationAdapter} from './adapters/mini-orbit-communication-adapter.interface';\nimport {VoidCommunicationAdapter} from './adapters/void/void-communication-adapter';\nimport {MINI_CIP_BASE_ROUTE, MINI_CIS_BASE_ROUTE} from './mini-orbit-consts';\nimport {IDepositWidgetAppLaunchInfo} from \"@sparkware/uc-sdk-core/lib/apps/deposit/deposit-widget.interfaces\";\nimport {LOGOUT_REASONS} from \"../../../sdk/src/services/oauth/oauth_const\";\n\nconst CmsPageComponent = React.lazy(\n () => import('../../components/cms-page/cms-page.component').then(({CmsPageComponent}) => ({default: CmsPageComponent}))\n);\nconst MiniOrbitPageComponent = React.lazy(\n () => import('../../components/mini-orbit/mini-orbit-page.component').then(({MiniOrbitPageComponent}) => ({default: MiniOrbitPageComponent}))\n);\nconst MiniOrbitFreePlayDetails = React.lazy(\n () => import('../../components/user-menu/freeplay-details/freeplay-details.component').then(({MiniOrbitFreePlayDetails}) => ({default: MiniOrbitFreePlayDetails}))\n);\n\nexport class MiniOrbitService extends ServiceBase implements IMiniOrbitService {\n private _communicationAdapter: IMiniOrbitCommunicationAdapter;\n private _onKickUserCount = 0;\n\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this._communicationAdapter = new VoidCommunicationAdapter(services);\n this._currentMiniOrbitConfig = this._extractCurrentMiniOrbitConfig();\n if (this.isEnabled) {\n this.services.splash.onSplashRemoved(() => this._communicationAdapter.onSiteLoaded());\n this._reportAutologinResult();\n\n this.services.location.enableBasePathOverride(); // this will make the LocationService to prepend /cip to any navigation\n this._communicationAdapter = this.services.miniOrbitCommunicationAdapterFactory.createAdapter(this._currentMiniOrbitConfig.basePath);\n this.reaction(() => this.services.user.logoutReason,\n async (logoutReason) => {\n if(logoutReason === LOGOUT_REASONS.CLIENT_SIDE_LOGOUT) {\n //when we get this reason basically it means that we did a logout before an autologin (see oauth2_service.js runAutologin method), which in mini orbit is the only way to do the login.\n return;\n }\n // Every time an auto login happens if the user was already logged (having a valid token in the local storage) a logout is first executed.\n // So by calling _communicationAdapter.onUserKicked immediately after the user is logged out it will trigger another auto login\n // and we will end up with an infinite reloading of the app.\n // For this reason we wait for the auto login to complete and if after this the user is still not logged in then we call onUserKicked.\n if(!this.services.user.isAuthorized) {\n try {\n await this.services.user.waitForAutoLogin();\n } catch (err) {\n this.services.logger.error('Mini orbit: Waiting for auto login to complete failed!', err);\n }\n\n if(!this.services.user.isAuthorized) {\n this._onKickUserCount++;\n this.services.analytics.sendAnalytics('mini_orbit', 'onuserkicked', this._currentMiniOrbitConfig.basePath, this._onKickUserCount);\n this._communicationAdapter.onUserKicked(logoutReason).then(response => {\n if(response?.token)\n {\n this.services.user.runAutoLogin(response);\n }\n });\n }\n }\n });\n }\n }\n\n\n private async _reportAutologinResult() {\n try {\n await this.services.user.waitForAutoLogin();\n this._communicationAdapter.onAutologinSuccess();\n } catch (err) {\n this._communicationAdapter.onAutologinFailed();\n }\n\n };\n\n\n private _extractCurrentMiniOrbitConfig() {\n const currentLocationBasePath = this.services.location.currentUri.pathName.getBase().toString().toLowerCase();\n\n const miniOrbitConfigSection = this.services.configuration.data.miniOrbit;\n if (!Check.isObject(miniOrbitConfigSection)) {\n return null;\n }\n\n const basePaths = Object.keys(miniOrbitConfigSection);\n\n for (let i = 0; i < basePaths.length; i++) {\n const basePath = basePaths[i];\n if (basePath?.toLowerCase() === currentLocationBasePath) {\n let miniOrbitConfig = miniOrbitConfigSection[basePath];\n miniOrbitConfig.basePath = basePath;\n return miniOrbitConfig;\n }\n }\n\n return null;\n }\n\n private readonly _currentMiniOrbitConfig: MiniOrbitConfiguration = null;\n\n get currentMiniOrbitConfig(): MiniOrbitConfiguration {\n return this._currentMiniOrbitConfig;\n }\n\n get isEnabled(): boolean {\n\n if(this.services.device.os.isPC)\n return false;\n\n if (this._currentMiniOrbitConfig) {\n return true;\n }\n return false;\n }\n\n get isCip(): boolean {\n if(this.isEnabled) {\n return this._currentMiniOrbitConfig.basePath.toLowerCase() === MINI_CIP_BASE_ROUTE;\n }\n\n return false;\n }\n\n get isCis(): boolean {\n if(this.isEnabled) {\n return this._currentMiniOrbitConfig.basePath.toLowerCase() === MINI_CIS_BASE_ROUTE;\n }\n\n return false;\n }\n\n get fallbackRouteRender(): RouteRender {\n return () => <OrbitSuspense>\n <MiniOrbitPageComponent content={<OrbitSuspense><CmsPageComponent/></OrbitSuspense>} />\n </OrbitSuspense>;\n }\n\n getCurrentMiniOrbitArenaConfig(): ArenasHeaderButtonConfig {\n let miniOrbitArenas = this.currentMiniOrbitConfig?.arenasHeaderButtons;\n\n return miniOrbitArenas && miniOrbitArenas.find(arena => this.services.location.currentUri.pathName.equals(new UriPath(arena.link)));\n }\n\n openUrl = (url: string): void => {\n this._communicationAdapter.openUrlInExternalBrowser(url);\n }\n\n openControlCenter(data: IControlCenterData): void {\n this._communicationAdapter.openControlCenter(data);\n }\n\n openDeposit(data: IDepositWidgetAppLaunchInfo): Promise<void> {\n return this._communicationAdapter.openDeposit(data);\n }\n\n openFreePlays = () => {\n if(this.services.user.isAuthorized) {\n this.services.dialog.showModal(() => <OrbitSuspense>\n <MiniOrbitFreePlayDetails/>\n </OrbitSuspense>, {\n title: ' '\n });\n }\n };\n}\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const DialogConsumerContentBox = styledBox(\"DialogConsumerContentBox\");\n","import styled from 'styled-components';\nimport {FORCE_CENTRALIZATION, FORCE_TRANSPARENT_BACKGROUND} from '../../css-classes';\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\n\nexport const DialogOverlayDefaultBox = styled.div<{transparentBackgroundOpacity: number; isHidden: boolean; isIOS?: boolean}>`\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n \n display: ${props => props.isHidden ? \"none\" : \"flex\"};\n flex-direction: column;\n align-items: center;\n box-sizing: border-box;\n \n background-color: ${props => hexToRgba(props.theme.colors.background, 0.85)};\n \n &.${FORCE_TRANSPARENT_BACKGROUND} {\n background-color: rgba(0, 0, 0, ${props => props.transparentBackgroundOpacity});\n }\n\n justify-content: center;\n padding-top: env(safe-area-inset-top);\n padding-bottom: env(safe-area-inset-bottom);\n padding-left: env(safe-area-inset-left);\n padding-right: env(safe-area-inset-right);\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n justify-content: flex-start;\n\n &.${FORCE_CENTRALIZATION} {\n align-items: center;\n justify-content: center;\n }\n }\n`;\n","import {DialogOverlayDefaultBox} from \"./dialog-overlay.default.box\";\nimport styled from \"styled-components\";\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\n\nexport const DialogOverlayMrGreenBox= styled(DialogOverlayDefaultBox)`\n background-color: ${props => hexToRgba(props.theme.colors.backgroundContrast, 0.85)};\n`;","import {DialogOverlayDefaultBox} from './dialog-overlay.default.box';\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {DialogOverlayMrGreenBox} from \"./dialog-overlay.mrgreen.box\";\n\nexport const DialogOverlayBox = styledByTheme(DialogOverlayDefaultBox)\n .forMrGreen(DialogOverlayMrGreenBox)\n .apply();","import styled, {keyframes, css} from 'styled-components';\nimport {\n APPLY_ANIMATION,\n APPLY_BORDERS, APPLY_MAX_HEIGHT, APPLY_MODAL_CLOSING_ANIMATION,\n DISABLE_FULLSCREEN_MOBILE,\n FORCE_FULLSCREEN_TABLET,\n FORCE_TRANSPARENT_BACKGROUND, FORCE_TRANSPARENT_CONTENT_BACKGROUND,\n} from '../../css-classes';\nimport {styledByDevice} from '../../../../themes/architecture/styled-by-device';\nimport { CssRule } from '../../../../themes/architecture/css-helpers/css-rule';\nimport {MODAL_DIALOG_ANIMATION_DURATION} from \"./dialog-overlay-constants\";\n\n\n\nconst showDialogKeyframes = keyframes`\n 0% {\n transform: scale(0.9) translateY(-40%) translateZ(1000px) perspective(600px) rotateX(80deg);\n }\n\n 100% {\n transform: scale(1) translateY(0) translateZ(1000px) perspective(600px) rotateX(0);\n }\n`;\n\nconst closeDialogKeyFrames = keyframes`\n 0% {\n transform: scale(1) translateY(0) translateZ(1000px) perspective(600px) rotateX(0);\n\n }\n\n 100% {\n transform: scale(0.9) translateY(-40%) translateZ(1000px) perspective(600px) rotateX(80deg);\n }\n`;\n\nconst showDialogAnimation = css`\n animation: ${showDialogKeyframes} ${MODAL_DIALOG_ANIMATION_DURATION}ms ease-in-out forwards;\n`;\n\nconst closeDialogAnimation = css`\n animation: ${closeDialogKeyFrames} ${MODAL_DIALOG_ANIMATION_DURATION}ms ease-in-out forwards;\n`;\n\nconst applyBorders = css`\n &.${APPLY_BORDERS} {\n border-width: 2px;\n border-style: solid;\n border-color: ${({theme}) => theme.colors.modalDialogBorder};\n border-radius: 10px;\n }\n`;\n\nconst applyMaxHeight = css`\n &.${APPLY_MAX_HEIGHT} {\n max-height: 80%;\n }\n`;\n\nconst DefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 0;\n background-color: ${props => props.theme.colors.background};\n &.${FORCE_TRANSPARENT_CONTENT_BACKGROUND}{\n background-color: transparent;\n }\n max-height: 100%;\n`;\n\nconst PcBox = styled(DefaultBox)`\n ${applyBorders}\n ${applyMaxHeight}\n &.${APPLY_ANIMATION} {\n ${showDialogAnimation};\n }\n &.${APPLY_MODAL_CLOSING_ANIMATION} {\n ${closeDialogAnimation}\n }\n`;\n\nconst MobileBox = styled(DefaultBox)`\n height: 100%;\n width: 100%;\n .${FORCE_TRANSPARENT_BACKGROUND} & {\n height: auto;\n }\n ${CssRule.For.mobile.tablet.build()} & {\n :not(.${FORCE_FULLSCREEN_TABLET}) {\n height: auto;\n width: auto;\n ${applyBorders}\n ${applyMaxHeight}\n }\n }\n .${DISABLE_FULLSCREEN_MOBILE} & {\n height: auto;\n width: auto;\n max-width: calc(100% - 2rem);\n max-height: calc(100% - 2rem);\n ${applyBorders}\n ${applyMaxHeight}\n }\n\n &.${APPLY_ANIMATION} {\n ${CssRule.For.mobile.tablet.build()} & {\n ${showDialogAnimation};\n }\n .${DISABLE_FULLSCREEN_MOBILE} & {\n ${showDialogAnimation};\n }\n }\n\n &.${APPLY_MODAL_CLOSING_ANIMATION} {\n ${CssRule.For.mobile.tablet.build()} & {\n ${closeDialogAnimation};\n }\n .${DISABLE_FULLSCREEN_MOBILE} & {\n ${closeDialogAnimation};\n }\n }\n`;\n\nexport const DialogOverlayContentDefaultBox = styledByDevice(PcBox, MobileBox);","export const MODAL_DIALOG_ANIMATION_DURATION: number = 400;","import {DialogOverlayContentDefaultBox} from './dialog-overlay-content.default.box';\n\nexport const DialogOverlayContentBox = DialogOverlayContentDefaultBox;","import styled from 'styled-components';\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const DialogIconWrapperDefaultBox = styled.div`\n text-align: center;\n color: ${({theme}) => theme.colors.brandPrimary };\n margin: 2em auto;\n \n @media ${({theme}) => theme.mediaQuery.veryLowHeight} {\n ${CssRule.For.mobile.landscape.build()} & {\n margin: 0 auto;\n }\n }\n`;\n","import {DialogIconWrapperDefaultBox} from './dialog-icon-wrapper.default.box';\n\nexport const DialogIconWrapperBox = DialogIconWrapperDefaultBox;\n","import React from 'react';\nimport {IServiceFactory} from '../../services/service-factory.interface';\nimport {\n IModalDialogHandler,\n ShowModalOptions\n} from '../../services/dialog/dialog.service.interface';\nimport {DialogConsumerContentBox} from './boxes/consumer-content/dialog-consumer-content.box';\nimport {DialogHeaderComponent} from './parts/header/dialog-header.component';\nimport {DialogOverlayBox} from './boxes/overlay/dialog-overlay.box';\nimport {DialogOverlayContentBox} from './boxes/overlay-content/dialog-overlay-content.box';\nimport {DialogIconWrapperBox} from './boxes/icon-wrapper/dialog-icon-wrapper.box';\nimport classNames from 'classnames';\nimport {\n APPLY_ANIMATION,\n APPLY_BORDERS, APPLY_MAX_HEIGHT,\n MOBILE_CENTERED_HEADER,\n DISABLE_FULLSCREEN_MOBILE,\n FORCE_CENTRALIZATION,\n FORCE_TRANSPARENT_BACKGROUND,\n FORCE_TRANSPARENT_CONTENT_BACKGROUND,\n FORCE_FULLSCREEN_TABLET, APPLY_MODAL_CLOSING_ANIMATION\n} from './css-classes';\nimport {MODAL_DIALOG} from '../../themes/css-global-classes';\nimport {observer} from 'mobx-react';\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ThemeProvider} from \"styled-components\";\n\nexport interface ModalDialogComponentProps {\n services: IServiceFactory;\n dialogHandler: IModalDialogHandler;\n renderContent: (dialogHandler: IModalDialogHandler) => React.ReactNode;\n dialogOptions: ShowModalOptions;\n}\n\nexport const ModalDialogComponent = observer(\n class ModalDialogComponent extends React.Component<ModalDialogComponentProps,{}> {\n\n\n private _onCloseButtonClickHandler = () => {\n this.props.dialogHandler.close(true, true);\n };\n\n render() {\n const overlayClasses = classNames(CyClass('cy-modal-dialog'), CyClass('cy-modal'), MODAL_DIALOG, {\n [FORCE_TRANSPARENT_BACKGROUND]: this.props.dialogOptions.forceTransparentBackground,\n [FORCE_CENTRALIZATION]: this.props.dialogOptions.forceCentralization,\n [DISABLE_FULLSCREEN_MOBILE]: this.props.dialogOptions.disableFullscreenMobile,\n [APPLY_ANIMATION]: this.props.dialogOptions.showOpenAndCloseAnimation,\n [FORCE_FULLSCREEN_TABLET]: this.props.dialogOptions.forceFullscreenTablet\n });\n\n const additionalHeaderClass = this.props.dialogOptions.headerClass || '';\n\n const headerClasses = classNames(CyClass('cy-modal-dialog-header'), CyClass('cy-modal-main-title'), additionalHeaderClass, {\n [MOBILE_CENTERED_HEADER]: this.props.dialogOptions.mobileCenterHeader\n });\n\n const contentClasses = classNames(CyClass('cy-modal-dialog-content'), {\n [APPLY_BORDERS]: !this.props.dialogOptions.hideBorders,\n [APPLY_ANIMATION]: this.props.dialogOptions.showOpenAndCloseAnimation,\n [DISABLE_FULLSCREEN_MOBILE]: this.props.dialogOptions.disableFullscreenMobile,\n [FORCE_TRANSPARENT_BACKGROUND]: this.props.dialogOptions.forceTransparentBackground,\n [FORCE_TRANSPARENT_CONTENT_BACKGROUND]: this.props.dialogOptions.forceTransparentContentBackground,\n [APPLY_MAX_HEIGHT]: this.props.dialogOptions.applyMaxHeight,\n [FORCE_FULLSCREEN_TABLET]: this.props.dialogOptions.forceFullscreenTablet,\n [APPLY_MODAL_CLOSING_ANIMATION]: this.props.dialogHandler.shouldApplyClosingAnimation\n });\n\n const dialogHeaderComponent = this.props.dialogOptions.hideDialogHeader ? (<></>) : (\n <DialogHeaderComponent\n className={headerClasses}\n title={this.props.dialogOptions.title}\n hideCloseButton={this.props.dialogOptions.hideCloseButton}\n onCloseButtonClick={this._onCloseButtonClickHandler}\n renderExtraButtons={this.props.dialogOptions.renderExtraHeaderButtons}/>\n );\n const transparentBackgroundOpacity = this.props.dialogOptions.transparentBackgroundOpacity || 0.80;\n const DialogIcon = this.props.dialogOptions.icon;\n const isIOS = this.props.services.device.isProbablyIOSDevice;\n return (\n <ThemeProvider theme={this.props.services.theme.popupsTheme}>\n <DialogOverlayBox transparentBackgroundOpacity={transparentBackgroundOpacity}\n className={overlayClasses}\n isHidden={this.props.dialogHandler.isHidden}\n style={{zIndex: this.props.dialogHandler.zIndex}}\n isIOS={isIOS}>\n <DialogOverlayContentBox className={contentClasses}>\n {dialogHeaderComponent}\n <DialogConsumerContentBox\n useAutoHeight={this.props.dialogOptions.useAutoHeight}\n overflow={this.props.dialogOptions.overflow}\n className={classNames(CyClass('cy-modal-dialog-consumer-content'), CyClass('cy-modal-content'))}\n noPadding={this.props.dialogOptions.noDefaultContentPadding}\n disableFullscreenMobile={this.props.dialogOptions.disableFullscreenMobile}\n >\n {DialogIcon && <DialogIconWrapperBox>\n <DialogIcon style={{display: \"inline\"}} size={5.6}/>\n </DialogIconWrapperBox>}\n {this.props.renderContent(this.props.dialogHandler)}\n </DialogConsumerContentBox>\n </DialogOverlayContentBox>\n </DialogOverlayBox>\n </ThemeProvider>\n );\n }\n }\n);","import styled from \"styled-components\";\n\nexport const SimpleMessageDialogBox = styled.div`\n display: flex;\n flex-direction: column;\n max-height: 80vh;\n max-height: 80dvh;\n\n @media ${props => props.theme.mediaQuery.sAndAbove} {\n min-width: 300px;\n min-height: 200px;\n max-width: 600px;\n }\n\n @media ${props => props.theme.mediaQuery.mAndAbove} {\n min-width: 500px;\n }\n`","import styled from \"styled-components\";\n\nexport const SimpleMessageDialogSingleLineContentBox = styled.div`\n display: flex;\n flex-direction: column; \n text-align: center;\n flex-grow: 1;\n width: 100%;\n font-size: 1.5rem;\n color: ${props => props.theme.colors.text};\n white-space: pre-line;\n overflow-y: auto;\n`","import styled from \"styled-components\";\n\nexport const SimpleMessageDialogButtonsContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n padding: 20px 20px 0 20px;\n width: 100%;\n\n @media ${props => props.theme.mediaQuery.sAndBelow} {\n flex-direction: column;\n align-items: flex-start;\n padding: 20px;\n\n }\n`","import styled from \"styled-components\";\nimport {Button} from \"../../../../../basic-ui-components/button/base/button.component\";\nimport {CssRule} from \"../../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const SimpleMessageDialogButtonBox = styled(Button)<{buttonWidthProportionOnPC: number}>`\n margin-right: 40px;\n ${CssRule.For.RTL.build()} & {\n margin-right: 0;\n margin-left: 40px;\n }\n width: ${props => 100/props.buttonWidthProportionOnPC}%;\n &:last-of-type {\n margin-right: 0;\n ${CssRule.For.RTL.build()} & {\n margin-left: 0;\n }\n }\n\n\n @media ${props => props.theme.mediaQuery.sAndBelow} {\n width: 100%;\n &:last-of-type {\n margin-right: 0;\n margin-top: 20px;\n ${CssRule.For.RTL.build()} & {\n margin-left: 0;\n }\n }\n }\n`","import {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {\n DialogButtonClickHandleResultEnum,\n IModalDialogHandler,\n ISimpleTextModalButtonOptions\n} from \"../../../../services/dialog/dialog.service.interface\";\nimport {SimpleMessageDialogButtonBox} from \"./boxes/simple-message-dialog-button.box\";\nimport React from \"react\";\n\ninterface SimpleMessageButtonComponentProps {\n buttonOptions: ISimpleTextModalButtonOptions;\n numberOfButtons: number;\n dialogHandler: IModalDialogHandler;\n}\n\nexport const SimpleMessageButtonComponent = observer(\n class SimpleMessageButtonComponent extends OrbitComponent<SimpleMessageButtonComponentProps> {\n private _onClickHandler = async () => {\n const button = this.props.buttonOptions;\n const result = await button.onClick();\n if(result === DialogButtonClickHandleResultEnum.CloseDialogAndContinue) {\n this.props.dialogHandler.close();\n }\n }\n render() {\n const button = this.props.buttonOptions;\n return (\n <SimpleMessageDialogButtonBox key={button.text}\n preset={button.buttonPreset}\n onClick={this._onClickHandler}\n buttonWidthProportionOnPC={Math.max(2, this.props.numberOfButtons)}> {/* On PC in general we don't want a button to have 100% width */}\n {button.text}\n </SimpleMessageDialogButtonBox>\n )\n }\n }\n);","import styled from \"styled-components\";\n\nexport const SimpleMessageDialogIconContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n width: 100%;\n padding: 10px;\n color: ${({theme}) => theme.colors.brandPrimary };\n`","import styled from \"styled-components\";\nimport {SimpleMessageDialogSingleLineContentBox} from \"./simple-message-dialog-single-line-content.box\";\n\nexport const SimpleMessageDialogMultiLineContentBox = styled(SimpleMessageDialogSingleLineContentBox)` \n text-align: justify;\n overflow-y: auto;\n max-height: 450px;\n`","import React from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {SimpleMessageDialogBox} from \"./boxes/simple-message-dialog.box\";\nimport {\n IModalDialogHandler,\n ISimpleTextModalButtonOptions\n} from \"../../../../services/dialog/dialog.service.interface\";\nimport {SimpleMessageDialogSingleLineContentBox} from \"./boxes/simple-message-dialog-single-line-content.box\";\nimport {SimpleMessageDialogButtonsContainerBox} from \"./boxes/simple-message-dialog-buttons-container.box\";\nimport {observer} from \"mobx-react\";\nimport {SimpleMessageButtonComponent} from \"./simple-message-dialog-button.component\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {SimpleMessageDialogIconContainerBox} from \"./boxes/simple-message-dialog-icon-container.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {Image} from \"../../../raw-components/image/image\";\nimport {ISvgIconProps} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\nimport {SimpleMessageDialogMultiLineContentBox} from \"./boxes/simple-message-dialog-multi-line-content.box\";\n\ninterface SimpleMessageDialogComponentProps {\n text: string | string[] | React.ReactElement;\n /** @deprecated Do not send an icon as a string url or as react element. Use an svg icon in the iconSvg prop */\n icon?: string | React.ReactNode;\n iconSvg?: React.ComponentType<ISvgIconProps>;\n buttons: ISimpleTextModalButtonOptions[];\n dialogHandler: IModalDialogHandler;\n}\n\nexport const SimpleMessageDialogComponent = observer(\n class SimpleMessageDialogComponent extends OrbitComponent<SimpleMessageDialogComponentProps> {\n\n private _renderIcon() {\n if(!this.props.icon) {\n return null;\n }\n\n if(Check.isString(this.props.icon)) {\n return <SimpleMessageDialogIconContainerBox>\n <Image src={this.props.icon}/>\n </SimpleMessageDialogIconContainerBox>;\n }\n\n return <SimpleMessageDialogIconContainerBox>\n {this.props.icon}\n </SimpleMessageDialogIconContainerBox>;\n }\n\n private _renderText() {\n if(!this.props.text) {\n return null;\n }\n\n if(Check.isString(this.props.text) || React.isValidElement(this.props.text)) {\n return (\n <SimpleMessageDialogSingleLineContentBox>\n {this.props.text}\n </SimpleMessageDialogSingleLineContentBox>\n );\n }\n\n if(this.props.text.length === 1) {\n return (\n <SimpleMessageDialogSingleLineContentBox>\n {this.props.text[0]}\n </SimpleMessageDialogSingleLineContentBox>\n );\n }\n\n return (\n <SimpleMessageDialogMultiLineContentBox>\n <ul>\n {this.props.text.map(line => <li key={line}>{line}</li>)}\n </ul>\n </SimpleMessageDialogMultiLineContentBox>\n )\n }\n render() {\n return (\n <SimpleMessageDialogBox>\n {this._renderIcon()}\n <SimpleMessageDialogSingleLineContentBox>\n {this._renderText()}\n </SimpleMessageDialogSingleLineContentBox>\n <SimpleMessageDialogButtonsContainerBox className={CyClass('cy-modal-dialog-buttons-area')}>\n {this.props.buttons.map(button => (<SimpleMessageButtonComponent key={button.text}\n buttonOptions={button}\n numberOfButtons={this.props.buttons.length}\n dialogHandler={this.props.dialogHandler} />))}\n </SimpleMessageDialogButtonsContainerBox>\n </SimpleMessageDialogBox>\n );\n }\n }\n);","import React from 'react';\nimport {ServiceBase} from '../ServiceBase';\nimport {\n IDialogService,\n IModalDialogHandler,\n ISimpleTextModalOptions,\n ShowModalOptions\n} from './dialog.service.interface';\nimport {ModalDialogComponent} from '../../components/modal-dialog/modal-dialog.component';\nimport {Check} from '@sparkware/app-utils';\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {action, makeObservable, observable, runInAction} from 'mobx';\nimport {CGP_OVERLAY_OPEN} from \"../../themes/css-global-classes\";\n\nimport {namedSetTimeout} from \"../../../common/utils/time-functions\";\nimport {\n SimpleMessageDialogComponent\n} from \"../../components/modal-dialog/standard-dialogs/simple-message/simple-message-dialog.component\";\nimport {\n MODAL_DIALOG_ANIMATION_DURATION\n} from \"../../components/modal-dialog/boxes/overlay-content/dialog-overlay-constants\";\n\nconst DIALOG_CONTENT = '.cy-modal-dialog-content';\nconst ANALYTICS_CATEGORY = 'Dialog_Service';\n\ninterface IOpenDialog {\n dialogHandler: ModalDialogHandler;\n dialogComponent: React.ReactNode;\n}\n\nexport class DialogService extends ServiceBase implements IDialogService {\n\n constructor(services:IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._setCloseAllDialogsHook();\n this.services.deepLink.then(deepLink => {\n this.reaction(() => deepLink.lastTimeDeepLinkWasExecuted,\n ()=> this.closeAllDialogs()\n );\n })\n\n this.reaction(() => this.hasOpenDialogs, (hasOpenDialogs) => {\n if (hasOpenDialogs) {\n this._disableScroll();\n } else {\n this._enableScroll();\n }\n })\n }\n\n private _setCloseAllDialogsHook(): void {\n this.services.sdk.events.onGameOpen(this.closeAllDialogs.bind(this));\n\n this.reaction(() => [\n this.services.user.isAuthorized,\n this.services.routing.currentRoute\n ],\n ()=> this.closeAllDialogs()\n );\n }\n\n @observable.ref\n private _currentOpenModalDialogs: IOpenDialog[] = [];\n\n @action.bound\n private _setCurrentOpenModalDialogs(newDialogs: IOpenDialog[]): void {\n this._currentOpenModalDialogs = newDialogs;\n }\n\n public get currentDialogs(): React.ReactNode[] {\n return this._currentOpenModalDialogs.map(dialog => dialog.dialogComponent);\n }\n\n private _onDialogCloseHook = (closedHandler: ModalDialogHandler) => {\n\n this._setCurrentOpenModalDialogs(this._currentOpenModalDialogs.filter(dialog => dialog.dialogHandler.zIndex !== closedHandler.zIndex));\n this.services.gameRunner.then(gameRunner => {\n gameRunner.currentRunningGame?.gameCommunicationChannel.resumeGamePlay();\n })\n };\n\n private _enableScroll() {\n this.services.dom.body.classList.remove(CGP_OVERLAY_OPEN);\n }\n\n private _disableScroll() {\n this.services.dom.body.classList.add(CGP_OVERLAY_OPEN);\n }\n\n private _getNextZIndex(isHighPriority?: boolean, forceZOrder?:number): number {\n\n if(forceZOrder) {\n return forceZOrder;\n }\n\n const zIndexes = this._currentOpenModalDialogs.map(dialog => dialog.dialogHandler.zIndex);\n\n if(zIndexes.length === 0) {\n return isHighPriority ? this.services.sdk.getCGPMaxOverlayZIndex + 1 : 200;\n }\n\n if(isHighPriority) {\n return Math.max(...zIndexes, this.services.sdk.getCGPMaxOverlayZIndex) + 1;\n } else {\n return Math.max(...zIndexes) + 1;\n }\n }\n\n get hasOpenDialogs(): boolean {\n return !Check.isEmpty(this._currentOpenModalDialogs.filter(d => !d.dialogHandler.isHidden));\n }\n\n countDialogs(opts: {includeHidden: boolean;}): number {\n if (opts.includeHidden) {\n return this._currentOpenModalDialogs.length;\n }\n return this._currentOpenModalDialogs.filter(d => !d.dialogHandler.isHidden).length;\n }\n\n closeAllDialogs() {\n const dialogsToClose = this._currentOpenModalDialogs.filter(dialog => !dialog.dialogHandler.shouldBeClosedOnlyByUser)\n dialogsToClose.forEach((dialog)=> {\n dialog.dialogHandler.destroy();\n });\n\n this._setCurrentOpenModalDialogs(this._currentOpenModalDialogs.filter(dialog => dialog.dialogHandler.shouldBeClosedOnlyByUser));\n }\n\n showModal(renderContent: (dialogHandler: IModalDialogHandler) => React.ReactNode, options?: ShowModalOptions): IModalDialogHandler {\n const modalZIndex = this._getNextZIndex(options?.isHighPriority,options?.forceZOrder);\n\n options = {\n hideCloseButton: false,\n hideBorders: false,\n showOpenAndCloseAnimation: false,\n ...options\n };\n\n const dialogHandler = new ModalDialogHandler(modalZIndex, this.services, this._onDialogCloseHook, options);\n\n\n const executeDialogShow = () => {\n const isHybrid = this.services.device.hybrid.isHybrid;\n\n if(isHybrid && options?.showPopupAboveSecondWebViewHybrid){\n // check this option.\n this.services.sdk.openPopUpOnSecondWebView(DIALOG_CONTENT, 1000);\n }\n\n const dialogComponent = (<ModalDialogComponent key={dialogHandler.zIndex}\n services={this.services}\n dialogHandler={dialogHandler}\n renderContent={renderContent}\n dialogOptions={options}/>);\n\n this._setCurrentOpenModalDialogs([\n ...this._currentOpenModalDialogs,\n {\n dialogHandler: dialogHandler,\n dialogComponent: dialogComponent\n }\n ]);\n }\n\n\n this.services.gameRunner.then(gameRunner => {\n\n if(gameRunner.currentRunningGame && modalZIndex > gameRunner.gameFrameZIndex) {\n\n return gameRunner.currentRunningGame.executeAnimationCompleteAction({\n execute: async ()=> {\n this.services.analytics.sendOrbitUserFlowEvent(ANALYTICS_CATEGORY, 'stopCurrentGameAutoplay', `modalZIndex: ${modalZIndex}`);\n if(gameRunner.currentRunningGame) { //We check for currentRunningGame because it possible that meanwhile the game to be closed and there is no current running game.\n try {\n await gameRunner.currentRunningGame.gameCommunicationChannel.stopAutoplay();\n } catch (err) {\n this.services.logger.error(`Failed to send stopAutoplay for game ${gameRunner.currentRunningGame.gameInfo.gameType}`);\n }\n\n }\n executeDialogShow();\n }\n })\n } else {\n executeDialogShow();\n }\n\n });\n\n return dialogHandler;\n }\n\n getMaxCGPOverlayZIndex(): number {\n return this.services.sdk.getCGPMaxOverlayZIndex;\n }\n\n getCurrentMaxZIndex(): number {\n if(this._currentOpenModalDialogs.length === 0) {\n return 0;\n }\n return Math.max(...this._currentOpenModalDialogs.map(dlg => dlg.dialogHandler.zIndex))\n }\n\n showSimpleTextModal(options: ISimpleTextModalOptions): IModalDialogHandler {\n return this.showModal(dialogHandler => (<SimpleMessageDialogComponent\n dialogHandler={dialogHandler}\n text={options.text}\n buttons={options.buttons || []}\n icon={options.icon}\n />), {\n title: options.title || (options.showEmptyTitle ? ' ' : ''),\n icon: options.iconSvg,\n mobileCenterHeader: true,\n hideCloseButton: options.hideCloseButton,\n isHighPriority: true,\n disableFullscreenMobile: Check.isNullOrUndefined(options.disableFullscreenMobile) ? true : options.disableFullscreenMobile,\n forceCentralization: true,\n showPopupAboveSecondWebViewHybrid: Boolean(options.showPopupAboveSecondWebViewHybrid),\n onClosedByXButton: options.onClosedByXButton,\n onClosed: options.onClosed,\n shouldBeClosedOnlyByUser: options.shouldBeClosedOnlyByUser\n });\n }\n}\n\n\nclass ModalDialogHandler implements IModalDialogHandler {\n constructor(zIndex: number,\n private _services,\n private _onCloseHook: (handler: ModalDialogHandler) => void,\n private _options: ShowModalOptions) {\n makeObservable(this);\n\n this.isHidden = Boolean(this._options.createAsHidden);\n this._zIndex = zIndex;\n }\n\n\n private _isClosed = false;\n\n public get shouldBeClosedOnlyByUser(): boolean {\n return this._options.shouldBeClosedOnlyByUser;\n }\n\n @observable.ref\n private _zIndex: number;\n\n get zIndex(): number {\n return this._zIndex;\n }\n\n set zIndex(value: number) {\n runInAction(() => {\n this._zIndex = value;\n });\n }\n\n @observable.ref\n isHidden: boolean = false;\n\n display(): void {\n runInAction(() => {\n this.isHidden = false;\n });\n\n if(this._options.onDisplay) {\n this._options.onDisplay();\n }\n }\n\n hide(): void {\n runInAction(() => {\n this.isHidden = true;\n });\n\n if(this._options.onHide) {\n this._options.onHide();\n }\n }\n\n @observable.ref\n public shouldApplyClosingAnimation: boolean = false;\n\n @action.bound\n close(isClosedWithXButton: boolean = false): void {\n if(this._isClosed) {\n return;\n }\n\n\n this.shouldApplyClosingAnimation = this._options.showOpenAndCloseAnimation;\n if(this.shouldApplyClosingAnimation) {\n namedSetTimeout('DIALOG_CLOSE_ANIMATION_TIMER', ()=> this._applyCallbackAndCloseDialog(isClosedWithXButton), 0.9 * MODAL_DIALOG_ANIMATION_DURATION);\n } else {\n this._applyCallbackAndCloseDialog(isClosedWithXButton)\n }\n\n }\n\n destroy(): void {\n this._applyCallbackAndCloseDialog(true);\n }\n\n private _applyCallbackAndCloseDialog = (isClosedWithXButton: boolean): void => {\n this._isClosed = true;\n\n if(isClosedWithXButton && this._options.onClosedByXButton) {\n try {\n this._options.onClosedByXButton();\n } catch (err) {\n this._services.logger.error(`onClosedByXButton dialog handler failed! Debug info: ${this._options?.debugInfo} | Dialog title: ${this._options?.title}`, this._options.onClosedByXButton, err);\n }\n }\n\n if(this._options.onClosed) {\n try {\n this._options.onClosed();\n } catch (err) {\n this._services.logger.error(`onClosed dialog handler failed! Debug info: ${this._options?.debugInfo} | Dialog title: ${this._options?.title}`, this._options.onClosed, err);\n }\n }\n\n this._onCloseHook(this);\n\n if(this._options?.showPopupAboveSecondWebViewHybrid){\n this._services.sdk.closePopUpOnSecondWebView();\n }\n\n this._services.sdk.eventsTrigger.messageClosed();\n }\n}","import {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {ServiceBase} from '../ServiceBase';\nimport {IHeadLinkTag, IPWAManifestIcon, IManifestProperties, IPWAManifestService} from \"./pwa-manifest.service.interface\";\nimport {LINK_REL_APPLE_ICON, LINK_MANIFEST_HEAD_SELECTOR} from \"./pwa-manifest-constants\";\n\nexport class PWAManifestService extends ServiceBase implements IPWAManifestService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this._init();\n }\n\n private get _orbitExtraProperties() {\n return this.services.configuration.startupConfiguration.sdk.config.ExtraProperties;\n }\n\n private _isPwaEnabled() {\n if (!this._orbitExtraProperties.pwaEnabled)\n return false;\n\n if (!this._orbitExtraProperties.paths.pwaResources) {\n this.services.logger.error(\"pwaResources is not defined even if pwaEnabled is true\");\n return false;\n }\n\n return true;\n }\n\n public get manifestUrl(): string | null {\n if (!this._isPwaEnabled())\n return null;\n\n return this._orbitExtraProperties.paths.pwaResources + '/manifest.json';\n }\n\n private _init() {\n if (this._isPwaEnabled()) {\n this._setManifestHrefInHead();\n\n if (this.services.device.os.isIOS) {\n this._initIOS();\n }\n }\n }\n\n // on IOS device, add link tags for icons from manifest\n private _initIOS() {\n if (this.manifestUrl) {\n this._addManifestIOSIconsInHead();\n } else {\n this.services.logger.error(\"Couldn't get manifest url\");\n }\n }\n\n private _addManifestIOSIconsInHead(): void {\n this._loadManifestJSON().then((manifestJson) => {\n const manifestIcons = manifestJson.icons || [];\n manifestIcons.forEach(iconInfo => this._addLinkTagToHead(LINK_REL_APPLE_ICON, iconInfo));\n });\n }\n\n private _addLinkTagToHead(rel: string, iconInfo: IPWAManifestIcon): void {\n const linkDOM = (this.services.dom.createElement('link') as IHeadLinkTag);\n linkDOM.rel = rel;\n linkDOM.href = this._orbitExtraProperties.paths.pwaResources + '/' + iconInfo.src;\n\n if (iconInfo.sizes) {\n linkDOM.sizes = iconInfo.sizes;\n }\n\n this.services.dom.head.append(linkDOM);\n }\n\n private _loadManifestJSON(): Promise<IManifestProperties> {\n return this.services.http.get(this.manifestUrl)\n .catch(err => {\n this.services\n .logger.error(`Error in loading manifest, manifest url: ${this.manifestUrl}`, err);\n return Promise.reject();\n });\n }\n\n private _setManifestHrefInHead() {\n const linkTag = (this.services.dom.querySelector(LINK_MANIFEST_HEAD_SELECTOR) as IHeadLinkTag);\n\n if (linkTag) {\n linkTag.href = this.manifestUrl;\n }\n }\n}\n","export const LINK_MANIFEST_HEAD_SELECTOR = 'link#manifest-placeholder';\nexport const LINK_REL_APPLE_ICON = \"apple-touch-icon\";","import {IControlCenterData, IMiniOrbitCommunicationAdapter} from '../mini-orbit-communication-adapter.interface';\nimport {IServiceFactoryExtended} from '../../../service-factory-extended.interface';\nimport {Check} from '@sparkware/app-utils';\nimport {IAutoLoginParams} from '../../../../../common/interfaces/autologin-params.interface';\nimport {IDepositWidgetAppLaunchInfo} from \"@sparkware/uc-sdk-core/lib/apps/deposit/deposit-widget.interfaces\";\nimport {ActionID, IPerformActionTopicPayload} from \"@sparkware/uc-sdk-core\";\n\nexport const POKER_COMMUNCATION_OBJECT_NAME = 'pokerNativeInterface';\n\nexport class PokerCommunicationAdapter implements IMiniOrbitCommunicationAdapter {\n constructor(private services: IServiceFactoryExtended) {\n\n }\n\n private get _pokerCommunicationObject(): any {\n const adapter = this.services.window.getGlobalProperty(POKER_COMMUNCATION_OBJECT_NAME);\n if(!adapter) {\n this.services.logger.error(`${POKER_COMMUNCATION_OBJECT_NAME} adapter is not defined`);\n }\n return adapter;\n }\n\n onUserKicked(logoutReason: number|null): Promise<IAutoLoginParams>{\n if(this._pokerSupportsSoftLogin)\n {\n return this._pokerCommunicationObject?.onUserKicked(logoutReason);\n }\n else\n {\n this._pokerCommunicationObject?.kickUser();\n return Promise.resolve(null);\n }\n }\n\n openUrlInExternalBrowser = (url: string): void => {\n this._pokerCommunicationObject?.openUrlInExternalBrowser(url);\n };\n\n private get _pokerSupportsSoftLogin():boolean\n {\n return Check.isFunction(this._pokerCommunicationObject?.onUserKicked);\n };\n\n onSiteLoaded(): void {\n try {\n if(Check.isFunction(this._pokerCommunicationObject?.onSiteLoaded)) {\n this._pokerCommunicationObject.onSiteLoaded();\n } else {\n this.services.logger.warning(`${POKER_COMMUNCATION_OBJECT_NAME}.onSiteLoaded is missing`);\n }\n }catch (e) {\n this.services.logger.error(\"PokerCommunicationAdapter onSiteLoaded error : \"+e);\n }\n }\n\n onAutologinSuccess(): void{\n try {\n if(Check.isFunction(this._pokerCommunicationObject?.onAutologinSuccess)) {\n this._pokerCommunicationObject.onAutologinSuccess();\n } else {\n this.services.logger.warning(`${POKER_COMMUNCATION_OBJECT_NAME}.onAutologinSuccess is missing`);\n }\n }catch (e) {\n this.services.logger.error(\"PokerCommunicationAdapter onAutologinSuccess error : \"+e);\n }\n\n }\n\n onAutologinFailed(): void{\n if(Check.isFunction(this._pokerCommunicationObject?.onAutologinFailed)) {\n this._pokerCommunicationObject.onAutologinFailed();\n } else {\n this.services.logger.warning(`${POKER_COMMUNCATION_OBJECT_NAME}.onAutologinFailed is missing`);\n }\n }\n\n openControlCenter(data: IControlCenterData): void {\n this._pokerCommunicationObject?.performUCAction(JSON.stringify(data));\n }\n\n openDeposit(data: IDepositWidgetAppLaunchInfo): Promise<void> {\n const performUCActionData: IPerformActionTopicPayload<IDepositWidgetAppLaunchInfo> = {\n actionID: ActionID.deposit,\n launchInfo: data,\n correlationID: this.services.tools.getGuid()\n }\n\n this._pokerCommunicationObject?.performUCAction(JSON.stringify(performUCActionData));\n return Promise.resolve();\n }\n}\n","import {IAutoLoginParams} from \"../../../../../common/interfaces/autologin-params.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {IControlCenterData, IMiniOrbitCommunicationAdapter} from \"../mini-orbit-communication-adapter.interface\";\nimport {reaction} from \"mobx\";\nimport {IDepositWidgetAppLaunchInfo} from \"@sparkware/uc-sdk-core/lib/apps/deposit/deposit-widget.interfaces\";\nimport {ActionID, IPerformActionTopicPayload} from \"@sparkware/uc-sdk-core\";\n\nexport const SPORT_COMMUNCATION_OBJECT_NAME = 'sportNativeInterface';\nexport const SPORT_MINI_ORBIT_COMMUNICATION = 'sport_mini_orbit_communication';\n\nexport class SportCommunicationAdapter implements IMiniOrbitCommunicationAdapter {\n constructor(private services: IServiceFactoryExtended) {\n\n //we trigger this call to overcome NYX - Push Gaming vendor issue when closing game (not redirecting to iframe -> thus onGameClose event not fired)\n this._showCasinoNavbar(true)\n\n this._subscribe();\n\n this.services.appLauncher.then(appLauncher => {\n reaction(\n () => appLauncher.isThereRunningApps,\n (isThereRunningApps) => {\n this._showCasinoNavbar(!isThereRunningApps)\n }\n );\n });\n }\n\n private _subscribe(): void {\n this.services.sdk.events.onGameOpen(() => this._showCasinoNavbar(false));\n this.services.sdk.events.onGameClose(() => this._showCasinoNavbar(true));\n }\n\n private get _sportCommunicationObject(): any {\n const adapter = this.services.window.getGlobalProperty(SPORT_COMMUNCATION_OBJECT_NAME);\n if (!adapter) {\n this.services.logger.error(`${SPORT_COMMUNCATION_OBJECT_NAME} adapter is not defined`);\n this.services.analytics.sendTechnicalEvent(SPORT_MINI_ORBIT_COMMUNICATION, \"adapter is not defined\", SPORT_COMMUNCATION_OBJECT_NAME);\n }\n return adapter;\n }\n\n private _showCasinoNavbar = (status: boolean): void => {\n this._sportCommunicationObject?.showCasinoNavbar(status);\n };\n\n openUrlInExternalBrowser = (url: string): void => {\n this._sportCommunicationObject?.openExternalLink(url);\n };\n\n onUserKicked(logoutReason: number): Promise<IAutoLoginParams> {\n return new Promise<IAutoLoginParams>((resolve, reject) => {\n const cleanUp = () => {\n delete this._sportCommunicationObject.onUserKickedSuccessCallback;\n delete this._sportCommunicationObject.onUserKickedErrorCallback;\n }\n\n this._sportCommunicationObject.onUserKickedSuccessCallback = (params: IAutoLoginParams) => {\n resolve(params);\n cleanUp();\n };\n\n this._sportCommunicationObject.onUserKickedErrorCallback = (error) => {\n reject(error);\n cleanUp();\n };\n\n try {\n this._sportCommunicationObject.onUserKicked(logoutReason)\n } catch (error) {\n reject(error);\n cleanUp();\n }\n });\n }\n\n openControlCenter = (data: IControlCenterData): void => {\n this._sportCommunicationObject?.performUCAction(JSON.stringify(data));\n };\n\n openDeposit = (data: IDepositWidgetAppLaunchInfo): Promise<void> => {\n const performUCActionData: IPerformActionTopicPayload<IDepositWidgetAppLaunchInfo> = {\n actionID: ActionID.deposit,\n launchInfo: data,\n correlationID: this.services.tools.getGuid()\n }\n\n this._sportCommunicationObject?.performUCAction(JSON.stringify(performUCActionData));\n return Promise.resolve();\n };\n\n onSiteLoaded(): void {}\n onAutologinSuccess(): void {}\n onAutologinFailed(): void {}\n}","import {IMiniOrbitCommunicationAdapterFactoryService} from './mini-orbit-communication-adapter-factory.service.interface';\nimport {IMiniOrbitCommunicationAdapter} from '../adapters/mini-orbit-communication-adapter.interface';\nimport {PokerCommunicationAdapter} from '../adapters/poker/poker-communication-adapter';\nimport {ServiceBase} from '../../ServiceBase';\nimport {VoidCommunicationAdapter} from '../adapters/void/void-communication-adapter';\nimport {MINI_CIP_BASE_ROUTE, MINI_CIS_BASE_ROUTE} from '../mini-orbit-consts';\nimport {SportCommunicationAdapter} from '../adapters/sport/sport-communication-adapter';\n\nexport class MiniOrbitCommunicationAdapterFactoryService extends ServiceBase implements IMiniOrbitCommunicationAdapterFactoryService{\n createAdapter(basePath: string): IMiniOrbitCommunicationAdapter {\n switch(basePath?.toLowerCase()) {\n case MINI_CIP_BASE_ROUTE:\n return new PokerCommunicationAdapter(this.services);\n case MINI_CIS_BASE_ROUTE:\n return new SportCommunicationAdapter(this.services);\n default:\n return new VoidCommunicationAdapter(this.services);\n }\n }\n}","import {\n\tArenaGamesGridConfiguration,\n\tHeaderFilterConfiguration\n} from \"../configurations/config-data-sections/arenas.configuration\";\n\nexport interface ILiveTableFeedsService {\n\treadonly liveArenaTabsConfiguration: LiveTableTabConfiguration[];\n\treadonly currentArenaTabConfiguration: LiveTableTabConfiguration | null;\n\treadonly tablesData: LiveTablesArray;\n\treadonly openTablesIds: string[];\n\treadonly aiSortingGamesMap: Record<number, number> | undefined;\n\tsetCurrentArenaTab(tabId: string): Promise<void>;\n\tgetTableInfo(tableId: number): ILiveTableInfo;\n\tgetLiveGames(): number[];\n\tmoveGamesThatOpenSoonToTheEnd(gamesIds: number[]): number[];\n\tupdateAiRecommendedLiveGames(): void;\n\tgetIsLiveSlotGroup(subGameGroup: string): boolean;\n\tisNavbarVisible: boolean;\n}\n\nexport class LiveTableTabConfiguration {\n\tconstructor(public readonly gridConfiguration: ArenaGamesGridConfiguration,\n\t\tpublic readonly headerConfiguration: HeaderFilterConfiguration) {\n\t}\n}\n\n\nexport interface ILiveTableInfo {\n\tGameId: number;\n\tName: string;\n\tMinBet: number;\n\tMaxBet: number;\n\tBetBehind: boolean;\n\tIsOpen: boolean;\n\tSeats: number,\n\tSeatsTaken: number[],\n\tPlayers: number;\n\tDealer: string;\n\tRouletteLast5Numbers?: string[];\n\tOperationHoursType: string; // type of operation hours - full or partially\n\tOperationHoursStartTime?: string; // if not full time - operation hours start time\n\tOperationHoursEndTime?: string; // if not full time - operation hours end time\n\tTableImage: string\n}\n\nexport type LiveTables = { [key: string]: ILiveTableInfo };\nexport type LiveTablesArray = { tableId: string, tableInfo: ILiveTableInfo }[];\n","import {memoize as _memoize} from 'lodash';\n\nconst keyResolver = (...args: unknown[]) => JSON.stringify(args);\n\nconst memoize: (<T, A = unknown, B = unknown, C = unknown, D = unknown>(func: (a?: A, b?: B, c?: C, d?: D) => T) => (a?: A, b?: B, c?: C, d?: D) => T) = (func) => _memoize(func, keyResolver);\n\nexport default memoize;","export enum SUB_GAME_GROUP {\n LIVE_BLACKJACK = \"Live Blackjack\",\n LIVE_ROULETTE = \"Live Roulette\",\n LIVE_BACCART = \"Live Baccarat\",\n LIVE_POKER = \"Live Poker\",\n LIVE_SLOT = \"Live Slot\",\n LIVE_GAME_SHOWS = \"Live Game Shows\"\n}","import {ServiceBase} from '../ServiceBase';\nimport {action, observable, computed, runInAction, makeObservable} from 'mobx';\nimport {\n LiveTables,\n LiveTablesArray,\n ILiveTableInfo,\n ILiveTableFeedsService,\n LiveTableTabConfiguration\n} from './live-table-feeds.service.interface';\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {CGPEventSubscription} from '../sdk/cgp-sdk.interface';\nimport {arraysEqual} from '../../../utils/array-helper';\nimport {IAiSortOptions} from \"../ai-engine/ai-engine.service.interface\";\nimport memoize from \"../../../utils/memoize\";\nimport {NEW_LIVE_CASINO_ARENA_NAME} from '../arenas/arena-consts';\nimport {NullableString} from \"../../../common/types/nullable-types\";\nimport { SUB_GAME_GROUP } from '../../../common/const/sub_game_group_consts';\n\nexport interface IAiRecommendedLiveGames {\n engine?: string;\n gameTypes: number[];\n gameTypesMap?: Record<number, number>;\n}\n\nexport interface IGetLiveGamesOptions {\n useAISortedList?: boolean;\n numberOfSortingExemptGames?: number;\n}\n\nconst GAME_MAX_TIME_TO_OPEN = 3600000;\nconst ARENA_WITHOUT_FILTER = 'ARENA_WITHOUT_FILTER';\n\n\nexport class LiveTableFeedsService extends ServiceBase implements ILiveTableFeedsService {\n\n private _startTime: number;\n private _liveTableUpdateSubscription: CGPEventSubscription;\n\n constructor(props) {\n super(props);\n\n makeObservable(this);\n\n this.reaction(() => this.services.routing.currentRoute, () => {\n this._stop();\n });\n\n this.reaction(() => this.services.user.isAuthorized,\n () => this.services.liveTableFeeds.updateAiRecommendedLiveGames(),\n {fireImmediately: true});\n\n const liveArenaConfig = this.services.configuration.data.arenas[NEW_LIVE_CASINO_ARENA_NAME];\n if (liveArenaConfig) {\n if (liveArenaConfig.arenas.find(headerConfig => headerConfig.title === ARENA_WITHOUT_FILTER)) {\n this._isNavbarVisible = false;\n }\n\n this.liveArenaTabsConfiguration = liveArenaConfig.allGamesGrid\n .map(grid => {\n let headerConfiguration = liveArenaConfig.arenas.find(headerConfig => headerConfig.title === grid.title);\n if (headerConfiguration) {\n return new LiveTableTabConfiguration(grid, headerConfiguration)\n } else {\n return null;\n }\n })\n .filter(grid => !Check.isNull(grid));\n }\n }\n\n liveArenaTabsConfiguration: LiveTableTabConfiguration[] = [];\n\n private _isNavbarVisible = true;\n get isNavbarVisible() {\n return this._isNavbarVisible;\n }\n\n @computed\n get currentArenaTabConfiguration(): LiveTableTabConfiguration | null {\n const currentAppliedFilter = this._getCurrentAppliedFilter();\n if (!currentAppliedFilter) {\n return this.liveArenaTabsConfiguration[0] ?? null;\n }\n\n const tabConfig = this.liveArenaTabsConfiguration.find(tab => tab.headerConfiguration?.filter?.toLowerCase() === currentAppliedFilter?.toLowerCase()) ?? null;\n\n if (tabConfig) {\n return tabConfig;\n }\n\n return this.liveArenaTabsConfiguration[0] ?? null;\n }\n\n private _getCurrentAppliedFilter(): NullableString {\n const urlHash = this.services.location.currentUri.hash?.value;\n if (urlHash) {\n let params = urlHash.split('=');\n return params[1];\n }\n\n return null;\n }\n\n async setCurrentArenaTab(tabId: string): Promise<void> {\n if (tabId) {\n await this.services.location.push(`#filters=${tabId}`);\n }\n }\n\n @observable.ref\n private _liveCasinoRecommendedGames: IAiRecommendedLiveGames = null;\n\n @action.bound\n private _setLiveCasinoRecommendedGames(value: IAiRecommendedLiveGames) {\n\n let tempGameTypesMap = {};\n\n if (value.gameTypes) {\n value.gameTypes.forEach((gameType, i) => tempGameTypesMap[gameType] = i);\n }\n\n this._liveCasinoRecommendedGames = {...value, gameTypes: (value.gameTypes || []), gameTypesMap: tempGameTypesMap};\n }\n\n private _getLiveCasinoGameRecommendationsForPlayer = memoize(() => this.services.api.insightController.getLiveCasinoGameRecommendationsForPlayer({\n engineType: 1\n }));\n\n @observable.ref\n private _tablesData: LiveTablesArray = [];\n\n private _previousOpenTablesIds: string[] = [];\n @computed\n public get openTablesIds(): string[] {\n const currentOpenTablesIds = this._tablesData\n .filter(tableData => !Check.isEmpty(tableData.tableInfo) && tableData.tableInfo.IsOpen)\n .map(tableData => tableData.tableId);\n if (!arraysEqual(this._previousOpenTablesIds, currentOpenTablesIds)) {\n // update observer only if there is a difference between openTablesIds.\n // we don't want to cause useless reactions and re-renders\n this._previousOpenTablesIds = currentOpenTablesIds;\n }\n\n return this._previousOpenTablesIds;\n }\n\n async updateAiRecommendedLiveGames() {\n if (this.services.user.isAuthorized) {\n\n const aiRecommendationsData = await this._getLiveCasinoGameRecommendationsForPlayer();\n\n this._setLiveCasinoRecommendedGames({\n gameTypes: aiRecommendationsData.GameTypes,\n engine: aiRecommendationsData.Engine\n });\n }\n }\n\n get tablesData(): LiveTablesArray {\n\n // Check if the live feeds service needs to boot\n if (Check.isNullOrUndefined(this._liveTableUpdateSubscription)) {\n this._start();\n }\n\n return this._tablesData;\n }\n\n private _start() {\n this._startTime = this.services.time.performanceNow();\n this._liveTableUpdateSubscription = this.services.sdk.events.onLiveTableFeedsUpdate(this._onLiveFeedsUpdate.bind(this));\n this.services.sdk.startLiveTableFeeds();\n }\n\n private _stop() {\n if (this._liveTableUpdateSubscription) {\n this._liveTableUpdateSubscription.off();\n this._liveTableUpdateSubscription = null;\n }\n\n this.services.sdk.stopLiveTableFeeds();\n }\n\n public getTableInfo(tableId): ILiveTableInfo {\n let tableData = this.tablesData.find(tableData => tableData.tableId === tableId.toString());\n return tableData ? tableData.tableInfo : null;\n }\n\n private _updateOpenTimeToLocal(tableInfo: ILiveTableInfo): ILiveTableInfo {\n if (tableInfo?.IsOpen === true || Check.isNullOrUndefined(tableInfo?.OperationHoursStartTime)) {\n return tableInfo;\n }\n\n tableInfo.OperationHoursStartTime = this._convertTimeToLocalTimeZone(tableInfo?.OperationHoursStartTime);\n return tableInfo;\n }\n\n private _verifyRouletteLastNumbers(tableInfo: ILiveTableInfo): ILiveTableInfo {\n let rouletteLastNumbers = tableInfo.RouletteLast5Numbers;\n if (Check.isNullOrUndefined(rouletteLastNumbers)) {\n return tableInfo;\n }\n\n let rouletteLast5NumbersConverted = [];\n if (rouletteLastNumbers && rouletteLastNumbers.length === 0) {\n rouletteLast5NumbersConverted = rouletteLastNumbers;\n } else {\n // all the cells in the array should be number.\n rouletteLast5NumbersConverted = rouletteLastNumbers.map(cell => {\n // Should not start with 0 and should be number\n if (cell?.startsWith('0') && cell.length > 1 && cell !== '00') {\n return null;\n } else {\n if (cell !== '00') {\n return isNaN(Number(cell)) ? null : cell;\n }\n\n return cell;\n }\n });\n\n rouletteLast5NumbersConverted = rouletteLast5NumbersConverted.filter(cell => !Check.isNullOrUndefined(cell));\n\n // If not all cells are numbers should remove the last roulette numbers property.\n if (rouletteLast5NumbersConverted.length > 0) {\n // Take only last 5 numbers(defense if we got more)\n rouletteLast5NumbersConverted = rouletteLast5NumbersConverted.slice(0, 5);\n } else {\n rouletteLast5NumbersConverted = [];\n }\n }\n tableInfo.RouletteLast5Numbers = rouletteLast5NumbersConverted;\n return tableInfo;\n }\n\n\n private _onLiveFeedsUpdate = (data: LiveTables) => {\n // we shallow clone the data because SDK always sends the same instance\n\n runInAction(() => {\n this._tablesData = Object.keys(data).map(tableId => ({\n tableId,\n tableInfo: {...this._manipulateFeedData(data[tableId])}\n }));\n });\n\n\n if (!Check.isNullOrUndefined(this._startTime)) {\n this._sendEvent();\n this._startTime = null;\n }\n }\n\n private _manipulateFeedData(tableInfo: ILiveTableInfo): ILiveTableInfo {\n if (!Check.isNullOrUndefined(tableInfo)) {\n tableInfo = this._updateOpenTimeToLocal(tableInfo);\n tableInfo = this._verifyRouletteLastNumbers(tableInfo);\n }\n\n return tableInfo;\n }\n\n private _sendEvent(): void {\n let evoLiveFeedResponseTime = this.services.splash.computeSplashTimeInSeconds(this._startTime);\n this.services.analytics.sendTechnicalEvent('LIVE_TABLES_CALL', 'LIVE_TABLES_RESPONSE_TIME', evoLiveFeedResponseTime);\n }\n\n private _convertTimeToLocalTimeZone(timeUTC: string): string {\n return TimeSpan.parse(timeUTC).toLocalTime().toHoursAndMinutesString();\n }\n\n get aiSortingGamesMap(): Record<number, number> | undefined {\n return this._liveCasinoRecommendedGames?.gameTypesMap;\n }\n\n public getLiveGames(): number[] {\n if (Check.isEmpty(this.tablesData)) {\n return [];\n }\n let tabConfig = this.currentArenaTabConfiguration;\n\n let filteredGameIds = tabConfig.gridConfiguration.gamesId.filter((gameID) => {\n const gameInfo = this.services.games.gamesMap[gameID];\n if (!gameInfo) {\n return false;\n }\n\n if (!Check.isEmpty(this.getTableInfo(gameID))) {\n return true;\n }\n\n if (Check.isEmpty(gameInfo?.gameArenaIcon)) {\n return false;\n }\n\n return !Check.isEmpty(this.tablesData);\n\n });\n\n let liveGames: IGetLiveGamesOptions = {\n useAISortedList: tabConfig.gridConfiguration.useAISortedList,\n numberOfSortingExemptGames: tabConfig.gridConfiguration.ignoreNumberOfGamesInAISorting\n }\n if (this._shouldSortGames(liveGames?.useAISortedList)) {\n const sortingOptions: IAiSortOptions = {\n gamesMapOverride: this._liveCasinoRecommendedGames?.gameTypesMap,\n ignoreNumberOfGames: Check.isNumber(liveGames?.numberOfSortingExemptGames) ? liveGames?.numberOfSortingExemptGames : 0\n\n };\n\n if (Check.isNullOrUndefined(tabConfig.headerConfiguration.maxGamesToShow)) {\n return this.services.aiEngine.sortGames(filteredGameIds, sortingOptions)\n } else {\n return this.services.aiEngine.sortGames(filteredGameIds, sortingOptions).slice(0, tabConfig.headerConfiguration.maxGamesToShow);\n }\n }\n\n try {\n filteredGameIds = this.moveGamesThatOpenSoonToTheEnd(filteredGameIds);\n\n if (Check.isNullOrUndefined(tabConfig.headerConfiguration.maxGamesToShow)) {\n return filteredGameIds;\n } else {\n return filteredGameIds.slice(0, tabConfig.headerConfiguration.maxGamesToShow);\n }\n\n } catch (error) {\n this.services.logger.error(\"Failed to reduce to max games\", error);\n return filteredGameIds;\n }\n }\n\n private _shouldSortGames(useAISortedList: boolean = false): boolean {\n return (useAISortedList || this.services.abTestingAiSortGamesLists.arenaHasAiSorting(\"newLiveCasino\"))\n && !Check.isEmpty(this._liveCasinoRecommendedGames?.gameTypes);\n }\n\n private _isGameOpenSoon(startTime: string): boolean {\n let currentDate = this.services.time.getCurrentDate();\n let timeToOpen = TimeSpan.parse(startTime).totalMilliseconds - TimeSpan.parse(currentDate.getHours() + ':' + currentDate.getMinutes()).totalMilliseconds;\n return timeToOpen <= GAME_MAX_TIME_TO_OPEN && timeToOpen > 0;\n }\n\n moveGamesThatOpenSoonToTheEnd(gamesID: number[]): number[] {\n let closeGamesArr: number[] = [];\n for (let index = 0; index < gamesID.length; index++) {\n let currentGame = gamesID[index];\n let tableInfo = this.getTableInfo(currentGame);\n if (!Check.isEmpty(tableInfo) && !tableInfo.IsOpen) {\n delete gamesID[index];\n\n // Not show games that not open soon.\n if (tableInfo.OperationHoursStartTime) {\n if (this._isGameOpenSoon(tableInfo.OperationHoursStartTime)) {\n closeGamesArr.push(currentGame);\n }\n }\n }\n }\n\n gamesID = gamesID.filter(game => !Check.isNullOrUndefined(game));\n return gamesID.concat(closeGamesArr);\n }\n \n getIsLiveSlotGroup(subGameGroup: string): boolean {\n return subGameGroup === SUB_GAME_GROUP.LIVE_SLOT;\n };\n}\n","import {Check} from \"@sparkware/app-utils\";\nimport {IAbTestingFeature} from \"./ab-testing-feature-data-provider.service.interface\";\n\nexport const abTestingFeatureIsValid = (featureObject: IAbTestingFeature, featureProperties: string[]): any => {\n\n if (Check.isNullOrUndefined(featureObject) || Check.isNullOrUndefined(featureObject.Properties)) {\n return false;\n }\n\n for (let i = 0; i < featureProperties.length; i++) {\n if (Check.isNullOrUndefined(featureObject.Properties[featureProperties[i]])) {\n return false;\n }\n }\n\n return true;\n};\n\nexport function getAbFeaturePropertyValue(featureObject: IAbTestingFeature, propertyName: string): any {\n const properties = featureObject.Properties;\n if(!properties) {\n return null;\n }\n\n return properties[propertyName?.toLowerCase()];\n\n}\n\nexport function isAbFeaturePropertyValueTrue(featureObject: IAbTestingFeature, propertyName: string): boolean {\n return getAbFeaturePropertyValue(featureObject, propertyName)?.toLowerCase() === 'true'\n}","import {FeatureToggleStatusEnum, IFeatureToggleViewModel} from \"./feature-toggle.view-model.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {abTestingFeatureIsValid, getAbFeaturePropertyValue} from \"./ab-testing-feature-check\";\nimport {Lazy} from \"../../../utils/lazy\";\nimport {IAbTestingStrategy} from \"./strategies/ab-testing-strategy.interface\";\nimport {IAbTestingFeature} from \"./ab-testing-feature-data-provider.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\n\n/**\n * Custom options for FeatureToggleModel\n */\nexport interface IFeatureToggleModelOptions {\n /**\n * Provide a custom method to evaluate if the feature is enabled by A/B.\n * When provided FeatureToggleModel will use this one instead of using the default featureToggle === true.\n * @param featureData\n */\n isFeatureEnabledByAB?: (featureData: IAbTestingFeature) => boolean;\n getFeatureToggleStatusPerRegulation?: () => Record<number, FeatureToggleStatusEnum>;\n}\n\n\nexport class FeatureToggleModel implements IFeatureToggleViewModel {\n\n constructor(private readonly abFeatureName: string,\n private readonly getFeatureToggleStatus: () => FeatureToggleStatusEnum,\n private readonly getCurrentAbStrategy: () => IAbTestingStrategy,\n private readonly services: IServiceFactoryExtended,\n private readonly options?: IFeatureToggleModelOptions) {\n }\n\n protected get currentAbStrategy(): IAbTestingStrategy {\n return this.getCurrentAbStrategy();\n }\n\n public getFeatureABData(): IAbTestingFeature | null {\n return this.currentAbStrategy.getFeature(this.abFeatureName);\n }\n\n protected _getAbFeatureToggleValue(): boolean {\n const featureData = this.getFeatureABData();\n if(!featureData) {\n return false;\n }\n\n if(this.options?.isFeatureEnabledByAB) {\n return this.options.isFeatureEnabledByAB(featureData);\n }\n\n const featureTogglePropertyName = \"featuretoggle\";\n if (abTestingFeatureIsValid(featureData, [featureTogglePropertyName])) {\n return getAbFeaturePropertyValue(featureData, featureTogglePropertyName)?.toLowerCase() === \"true\";\n } else {\n this.services.logger.error(`Wrong ${featureTogglePropertyName} property name for ${this.abFeatureName} feature`);\n }\n\n return false;\n }\n\n private get isAbEnabled(): boolean {\n return this._getAbFeatureToggleValue();\n }\n\n get isEnabled(): boolean {\n\n let toggleStatus: FeatureToggleStatusEnum | null = null;\n\n if(this.options?.getFeatureToggleStatusPerRegulation) {\n const toggleStatusPerRegulation = this.options.getFeatureToggleStatusPerRegulation();\n toggleStatus = toggleStatusPerRegulation[this.services.regulation.getRegulationCode()];\n }\n\n if(Check.isNullOrUndefined(toggleStatus)) {\n toggleStatus = this.getFeatureToggleStatus();\n }\n\n switch (toggleStatus) {\n case FeatureToggleStatusEnum.Disabled:\n return false;\n case FeatureToggleStatusEnum.Enabled:\n return true;\n case FeatureToggleStatusEnum.EnabledByAB:\n return this.isAbEnabled;\n default:\n this.services.logger.error(`Invalid feature toggle config value ${toggleStatus} for ${this.abFeatureName}`);\n return false;\n\n }\n }\n}\n\nexport class FeatureToggleModelLazy extends Lazy<FeatureToggleModel> {\n\n}","import {IAbTestingStrategy} from \"../ab-testing-strategy.interface\";\nimport {NullableString} from \"../../../../../common/types/nullable-types\";\nimport {IAbTestingFeature} from \"../../ab-testing-feature-data-provider.service.interface\";\n\n\nexport class VoidAbTestingStrategy implements IAbTestingStrategy {\n readonly anonymousPlayerId: NullableString = null;\n\n getFeature(featureName: string): IAbTestingFeature | null {\n return null;\n }\n\n waitForLoadTestData(): Promise<void> {\n return Promise.resolve();\n }\n\n}","export const AB_TESTING_DATA_FOR_AUTHORIZED_USER_STORAGE_KEY = \"cgp_ABTestingDataForUser\";\nexport const AB_TESTING_ANONYMOUS_PLAYER_ID_STORAGE_KEY = \"cgp_ABTestingAnonymousPlayerId\";","import {IAbTestingStrategy} from \"./ab-testing-strategy.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {NullableString} from \"../../../../common/types/nullable-types\";\nimport {\n AB_TESTING_ANONYMOUS_PLAYER_ID_STORAGE_KEY,\n AB_TESTING_DATA_FOR_AUTHORIZED_USER_STORAGE_KEY\n} from \"../ab-testing-local-storage-keys\";\nimport {IAbTestingData, IAbTestingFeature} from \"../ab-testing-feature-data-provider.service.interface\";\n\nexport const EmptyAbTestData: IAbTestingData = {\n ErrorDescription: \"\",\n Features: {},\n AnonymousPlayerId: null\n}\n\nexport abstract class AbTestingBaseStrategy implements IAbTestingStrategy {\n constructor(protected readonly services: IServiceFactoryExtended) {\n\n }\n\n abstract getFeature(featureName: string): IAbTestingFeature | null;\n abstract waitForLoadTestData(): Promise<void>;\n\n get anonymousPlayerId(): NullableString {\n return this.services.localStorage.getItem(AB_TESTING_ANONYMOUS_PLAYER_ID_STORAGE_KEY);\n }\n\n protected set anonymousPlayerId(value: NullableString) {\n if(value) {\n this.services.localStorage.setItem(AB_TESTING_ANONYMOUS_PLAYER_ID_STORAGE_KEY, value);\n } else {\n this.services.localStorage.removeItem(AB_TESTING_ANONYMOUS_PLAYER_ID_STORAGE_KEY);\n }\n }\n\n protected _readAuthorizedTestDataFromLocalStorage(): IAbTestingData {\n return this.services.localStorage.getJson<IAbTestingData>(AB_TESTING_DATA_FOR_AUTHORIZED_USER_STORAGE_KEY) ?? EmptyAbTestData;\n }\n\n protected _findFeature(featureName: string, testData: IAbTestingData): IAbTestingFeature | null {\n if(!featureName || !testData || !testData.Features) {\n return null;\n }\n\n\n const feature = testData.Features[featureName.toLowerCase()];\n if(!feature) {\n return null;\n }\n\n if(!feature.Properties) {\n return null;\n }\n\n if(Object.keys(feature.Properties).length === 0) {\n return null;\n }\n\n return feature;\n }\n\n}","import {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {makeObservable, observable} from \"mobx\";\nimport {\n AB_TESTING_DATA_FOR_AUTHORIZED_USER_STORAGE_KEY\n} from \"../../ab-testing-local-storage-keys\";\nimport {AbTestingBaseStrategy} from \"../ab-testing-base.strategy\";\nimport {IAbTestingData, IAbTestingFeature} from \"../../ab-testing-feature-data-provider.service.interface\";\n\n\n\n\nexport class AbTestingForAuthorizedUserStrategy extends AbTestingBaseStrategy {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this._testData = this._readTestData();\n this.services.localStorage.setJson(AB_TESTING_DATA_FOR_AUTHORIZED_USER_STORAGE_KEY, this._testData);\n if(this._testData.AnonymousPlayerId) {\n this.anonymousPlayerId = this._testData.AnonymousPlayerId;\n }\n\n makeObservable(this);\n }\n\n @observable.ref\n private readonly _testData: IAbTestingData;\n\n getFeature(featureName: string): IAbTestingFeature | null {\n return this._findFeature(featureName, this._testData);\n }\n\n waitForLoadTestData(): Promise<void> {\n return Promise.resolve();\n }\n\n private _readTestData(): IAbTestingData {\n const testDataJson = this.services.sdk.extractTokenProperty('abTestingData');\n if(testDataJson) {\n return this._parseTestDataJson(testDataJson);\n } else {\n return this._readAuthorizedTestDataFromLocalStorage();\n }\n }\n\n private _parseTestDataJson(json: string): IAbTestingData {\n try {\n const testData: IAbTestingData = JSON.parse(json);\n\n if(testData.ErrorDescription) {\n this.services.logger.error('Error received from A/B testing service', testData.ErrorDescription);\n }\n return {\n ErrorDescription: testData.ErrorDescription,\n AnonymousPlayerId: testData.AnonymousPlayerId,\n Features: testData.Features ?? {}\n };\n\n } catch (err) {\n this.services.logger.error('Failed to parse A/B testing data', err, json);\n return this._readAuthorizedTestDataFromLocalStorage();\n }\n }\n\n}","import {AbTestingBaseStrategy, EmptyAbTestData} from \"../ab-testing-base.strategy\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {makeObservable, observable, runInAction} from \"mobx\";\nimport {ABTestingController_GetTestsForAnonymousPlayerRequest} from \"../../../api/api.service\";\nimport {IAbTestingData, IAbTestingFeature} from \"../../ab-testing-feature-data-provider.service.interface\";\n\nexport class AbTestingForAnonymousUserStrategy extends AbTestingBaseStrategy {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this._anonymousTestData = EmptyAbTestData;\n this._storedAuthorizedTestData = this._readAuthorizedTestDataFromLocalStorage();\n\n this._loadAnonymousTestDataPromise = this._loadAnonymousTestData();\n\n makeObservable(this);\n }\n\n @observable.ref\n private _anonymousTestData: IAbTestingData;\n\n private readonly _storedAuthorizedTestData: IAbTestingData;\n\n private readonly _loadAnonymousTestDataPromise: Promise<void>;\n\n waitForLoadTestData(): Promise<void> {\n return this._loadAnonymousTestDataPromise;\n }\n\n private async _loadAnonymousTestData(): Promise<void> {\n\n try {\n\n if(!this.services.configuration.servicesConfigs.AbTesting.isAnonymousPlayerSupportEnabled) {\n return;\n }\n\n const request: ABTestingController_GetTestsForAnonymousPlayerRequest = {\n brandId: this.services.sdk.getBrandID(),\n subBrandId: this.services.sdk.getSubBrandID(),\n countryCode: this.services.sdk.getCountryIso3(),\n isMobile: this.services.device.os.isMobileOS\n };\n\n if(this.anonymousPlayerId) {\n request.anonymousPlayerId = this.anonymousPlayerId;\n }\n\n const response = await this.services.api.aBTestingController.getTestsForAnonymousPlayer(request);\n\n runInAction(() => {\n this.anonymousPlayerId = response.AnonymousPlayerId;\n this._anonymousTestData = {\n Features: response.Features ?? {},\n ErrorDescription: null,\n AnonymousPlayerId: response.AnonymousPlayerId\n }\n });\n } catch (err) {\n this.services.logger.error('Failed to load anonymous user A/B testing data', err);\n }\n\n }\n\n getFeature(featureName: string): IAbTestingFeature | null {\n let feature = this._findFeature(featureName, this._anonymousTestData);\n if(feature) {\n return feature;\n }\n\n return this._findFeature(featureName, this._storedAuthorizedTestData);\n }\n\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {\n IAbTestingAiSortData,\n IAbTestingFeature,\n IAbTestingFeatureDataProviderService\n} from \"./ab-testing-feature-data-provider.service.interface\";\nimport {\n abTestingFeatureIsValid,\n isAbFeaturePropertyValueTrue\n} from \"./ab-testing-feature-check\";\nimport {\n FEATURE_CASHOUT_WIDGET,\n FEATURE_DEPOSIT_WIDGET,\n FEATURE_NAME_AI_SORT_GAME_LIST,\n FEATURE_NAME_CONTROL_CENTER_TOGGLE,\n FEATURE_NAME_FREE_TO_PLAY_FLOW,\n FEATURE_NAME_LIST_ON_TOP,\n FEATURE_NAME_MOBILE_HEADER_SEARCH_BUTTON,\n FEATURE_NAME_ONBOARDING_TOUR,\n FEATURE_NAME_PLAYERS_LIKE_YOU_GAMES_LIST_TYPE_ID,\n FEATURE_NAME_REGISTRATION_WIDGET,\n FEATURE_NAME_SEARCH_GAME_SUGGESTED_BY_AI,\n FEATURE_NAME_STATIC_VIDEO_LIST,\n FEATURE_NAME_STATIC_LIVE_ARENA,\n FEATURE_NAME_VIDEO_LIVE_STREAM,\n FEATURE_NAME_VIDEO_SLIDES,\n FEATURE_NAME_WEBAPP_BOTTOM_NAVIGATION,\n FEATURE_TRANSACTION_HISTORY_WIDGET, FEATURE_NAME_ADD_IN_GAME_FUNDS, FEATURE_NAME_JACKPOT_BET\n} from \"../../../common/const/ab-testing-names\";\nimport {makeObservable, observable} from 'mobx';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {Check} from \"@sparkware/app-utils\";\nimport {FeatureToggleModel, FeatureToggleModelLazy, IFeatureToggleModelOptions} from \"./feature-toggle.model\";\nimport {FeatureToggleStatusEnum} from \"./feature-toggle.view-model.interface\";\nimport {IAbTestingStrategy} from \"./strategies/ab-testing-strategy.interface\";\nimport {VoidAbTestingStrategy} from \"./strategies/void/void-ab-testing.strategy\";\nimport {AbTestingForAuthorizedUserStrategy} from \"./strategies/authorized/ab-testing-for-authorized-user.strategy\";\nimport {AbTestingForAnonymousUserStrategy} from \"./strategies/anonymous/ab-testing-for-anonymous-user.strategy\";\nimport {NullableString} from \"../../../common/types/nullable-types\";\n\nexport class AbTestingFeatureDataProviderService extends ServiceBase implements IAbTestingFeatureDataProviderService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (isAuthorized) {\n this._currentAbTestingStrategy = new AbTestingForAuthorizedUserStrategy(this.services);\n } else {\n this._currentAbTestingStrategy = new AbTestingForAnonymousUserStrategy(this.services);\n }\n }, {\n fireImmediately: true\n });\n }\n\n @observable.ref\n private _currentAbTestingStrategy: IAbTestingStrategy = new VoidAbTestingStrategy();\n\n get anonymousPlayerId(): NullableString {\n return this._currentAbTestingStrategy.anonymousPlayerId;\n }\n\n private async _getFeatureToggleAsync(featureToggleLazy: FeatureToggleModelLazy): Promise<FeatureToggleModel> {\n await this._currentAbTestingStrategy.waitForLoadTestData();\n return featureToggleLazy.value;\n }\n\n getFeature(featureName: string): IAbTestingFeature | null {\n return this._currentAbTestingStrategy.getFeature(featureName);\n }\n\n waitForLoadTestData(): Promise<void> {\n return this._currentAbTestingStrategy.waitForLoadTestData();\n }\n\n\n private _createFeatureToggle(abFeatureName: string, getToggleStatus: () => FeatureToggleStatusEnum, options?: IFeatureToggleModelOptions): FeatureToggleModel {\n return new FeatureToggleModel(abFeatureName, getToggleStatus, () => this._currentAbTestingStrategy, this.services, options);\n }\n\n\n private _createFeatureToggleLazy(abFeatureName: string, getToggleStatus: () => FeatureToggleStatusEnum, options?: IFeatureToggleModelOptions): FeatureToggleModelLazy {\n return new FeatureToggleModelLazy(() => {\n return this._createFeatureToggle(abFeatureName, getToggleStatus, options)\n })\n }\n\n private _depositWidget = this._createFeatureToggleLazy(FEATURE_DEPOSIT_WIDGET, () => this.services.configuration.servicesConfigs.AppLauncher.apps.PAYMENTS_DEPOSIT.featureToggle);\n get depositWidget(): FeatureToggleModel {\n return this._depositWidget.value;\n }\n\n private _cashOutWidget = this._createFeatureToggleLazy(FEATURE_CASHOUT_WIDGET, () => this.services.configuration.servicesConfigs.AppLauncher.apps.PAYMENTS_CASHOUT.featureToggle);\n get cashoutWidget(): FeatureToggleModel {\n return this._cashOutWidget.value;\n }\n\n private _transactionHistoryWidget = this._createFeatureToggleLazy(FEATURE_TRANSACTION_HISTORY_WIDGET, () => this.services.configuration.servicesConfigs.AppLauncher.apps.PAYMENTS_PLAYER_TRANSACTIONS_HISTORY.featureToggle);\n get transactionHistoryWidget(): FeatureToggleModel {\n return this._transactionHistoryWidget.value;\n }\n\n private _registrationWidget = this._createFeatureToggleLazy(FEATURE_NAME_REGISTRATION_WIDGET, () => this.services.configuration.servicesConfigs.AppLauncher.apps.FUNNEL_REGISTRATION.featureToggle);\n public async registrationWidgetAsync(): Promise<FeatureToggleModel> {\n return await this._getFeatureToggleAsync(this._registrationWidget);\n }\n\n private _controlCenter = this._createFeatureToggleLazy(FEATURE_NAME_CONTROL_CENTER_TOGGLE,\n () => this.services.configuration.servicesConfigs.AppLauncher.apps.RG_CONTROL_CENTER_FULL.featureToggle, {\n isFeatureEnabledByAB: (featureData: IAbTestingFeature) => isAbFeaturePropertyValueTrue(featureData, \"enablesafezone\"),\n getFeatureToggleStatusPerRegulation: () => this.services.configuration.servicesConfigs.AppLauncher.apps.RG_CONTROL_CENTER_FULL.featureToggleForRegulation\n });\n get controlCenter(): FeatureToggleModel {\n return this._controlCenter.value;\n }\n\n private _onboardingTour = this._createFeatureToggleLazy(FEATURE_NAME_ONBOARDING_TOUR,\n () => this.services.configuration.data.onboardingTour?.featureToggle ?? FeatureToggleStatusEnum.Disabled);\n get onboardingTour(): FeatureToggleModel {\n return this._onboardingTour.value;\n }\n\n private _videoLiveStream = this._createFeatureToggleLazy(FEATURE_NAME_VIDEO_LIVE_STREAM,\n () => FeatureToggleStatusEnum.EnabledByAB)\n get videoLiveStream(): FeatureToggleModel {\n return this._videoLiveStream.value;\n }\n\n private _staticVideoList = this._createFeatureToggleLazy(FEATURE_NAME_STATIC_VIDEO_LIST,\n () => FeatureToggleStatusEnum.EnabledByAB) /*So far this is a pure A/B only feature*/\n get staticVideoList(): FeatureToggleModel {\n return this._staticVideoList.value;\n }\n\n private _videoSlides = this._createFeatureToggleLazy(FEATURE_NAME_VIDEO_SLIDES,\n () => this.services.configuration.servicesConfigs.VideoSlides.featureToggle);\n get videoSlides(): FeatureToggleModel {\n return this._videoSlides.value;\n }\n\n private _freeToPlayFlow = this._createFeatureToggleLazy(FEATURE_NAME_FREE_TO_PLAY_FLOW,\n () => FeatureToggleStatusEnum.EnabledByAB);\n get freeToPlayFlow(): FeatureToggleModel {\n return this._freeToPlayFlow.value;\n }\n\n private _mobileHeaderSearchButton = this._createFeatureToggleLazy(FEATURE_NAME_MOBILE_HEADER_SEARCH_BUTTON, () => FeatureToggleStatusEnum.EnabledByAB);\n get mobileHeaderSearchButton(): FeatureToggleModel {\n return this._mobileHeaderSearchButton.value;\n }\n\n private _webappBottomNavigation = this._createFeatureToggleLazy(FEATURE_NAME_WEBAPP_BOTTOM_NAVIGATION,\n () => this.services.configuration.data.bottomNavigationBar?.webAppFeatureToggle ?? FeatureToggleStatusEnum.Disabled);\n get webappBottomNavigation(): FeatureToggleModel {\n return this._webappBottomNavigation.value;\n }\n\n private _addInGameFunds = this._createFeatureToggleLazy(FEATURE_NAME_ADD_IN_GAME_FUNDS,\n () => this.services.configuration.servicesConfigs.Game.enableAddInGameFunds);\n get addInGameFunds(): FeatureToggleModel {\n return this._addInGameFunds.value;\n }\n\n private _jackpotBet = this._createFeatureToggleLazy(FEATURE_NAME_JACKPOT_BET,\n () => FeatureToggleStatusEnum.EnabledByAB);\n get jackpotBet(): FeatureToggleModel {\n return this._jackpotBet.value;\n }\n\n get aiSortGamesLists(): IAbTestingAiSortData {\n\n const aiSortGamesListsFeatureData = this.getFeature(FEATURE_NAME_AI_SORT_GAME_LIST);\n\n const result: IAbTestingAiSortData = {arenas: []};\n if (abTestingFeatureIsValid(aiSortGamesListsFeatureData, [\"arenas\"]) && Check.isString(aiSortGamesListsFeatureData.Properties.arenas)) {\n try {\n result.arenas = JSON.parse(aiSortGamesListsFeatureData.Properties.arenas.replace(/'/g, '\"'));\n } catch (err) {\n this.services.logger.error(`Failed to parse AB Test data for feature \"${FEATURE_NAME_AI_SORT_GAME_LIST}\"`, err);\n }\n }\n return result;\n }\n\n get playersLikeYouGamesListTypeId(): NullableString {\n const abTestingPlayersLikeYouGamesListTypeIdAIData = this.getFeature(FEATURE_NAME_PLAYERS_LIKE_YOU_GAMES_LIST_TYPE_ID);\n\n if (abTestingPlayersLikeYouGamesListTypeIdAIData) {\n if (abTestingFeatureIsValid(abTestingPlayersLikeYouGamesListTypeIdAIData, [\"listid\"])) {\n return abTestingPlayersLikeYouGamesListTypeIdAIData.Properties?.listid?.toLowerCase() ?? null;\n }\n }\n\n return null;\n }\n\n get searchGameSuggestionByAI(): string | null {\n const abTestingSearchGameSuggestionByAI = this.getFeature(FEATURE_NAME_SEARCH_GAME_SUGGESTED_BY_AI);\n if (abTestingSearchGameSuggestionByAI) {\n if (abTestingFeatureIsValid(abTestingSearchGameSuggestionByAI, [\"aitype\"])) {\n return abTestingSearchGameSuggestionByAI.Properties?.aitype?.toLowerCase();\n }\n }\n\n return null;\n }\n\n get listOnTop(): number[] | null {\n const abTestingListOnTopData = this.getFeature(FEATURE_NAME_LIST_ON_TOP);\n if (abTestingListOnTopData) {\n if (abTestingFeatureIsValid(abTestingListOnTopData, [\"listid\"])) {\n let listId = abTestingListOnTopData.Properties?.listid;\n const splidedList = listId.split(',');\n\n listId = splidedList.map((id: string) => parseInt(id));\n\n return listId\n }\n }\n\n return null;\n }\n\n private _staticLiveArena = this._createFeatureToggleLazy(FEATURE_NAME_STATIC_LIVE_ARENA,\n () => FeatureToggleStatusEnum.EnabledByAB);\n get staticLiveArena(): FeatureToggleModel {\n return this._staticLiveArena.value;\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport { IControlCenterService } from \"./control-center.service.interface\";\nexport class ControlCenterService extends ServiceBase implements IControlCenterService {\n get isEnabled(): boolean {\n if(this.services.user.isAuthorized) {\n return this.services.abTestingFeatureDataProvider.controlCenter.isEnabled;\n } else {\n return false;\n }\n }\n}","import { ServiceBase } from \"../ServiceBase\";\nimport { IWalletProxyService } from \"./wallet-proxy.service.interface\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { BalanceType } from \"../../../common/const/wallet_balance_type\";\nimport {GameInfo} from \"../games/game-info\";\n\nexport class WalletProxyService extends ServiceBase implements IWalletProxyService {\n\n @observable\n public bankroll: Record<BalanceType, string> = {\n [BalanceType.CASH]: '',\n [BalanceType.BONUS]: '',\n [BalanceType.BOTH]: '',\n };\n\n @observable\n public plainNumberBankroll: Record<BalanceType, number> = {\n [BalanceType.CASH]: 0,\n [BalanceType.BONUS]: 0,\n [BalanceType.BOTH]: 0,\n };\n\n get totalBankroll(): number {\n return this.plainNumberBankroll[BalanceType.BOTH] || 0;\n }\n\n get cashBankroll(): number {\n return this.plainNumberBankroll[BalanceType.CASH] || 0;\n }\n\n get bonusBankroll(): number {\n return this.plainNumberBankroll[BalanceType.BONUS] || 0;\n }\n\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n\n makeObservable(this);\n\n this.subscribe();\n this.fetchAllData();\n }\n\n @action.bound\n private setBankroll(bankroll: string, plainNumber: number, bType: BalanceType) {\n this.bankroll[bType] = bankroll;\n this.plainNumberBankroll[bType] = plainNumber;\n }\n\n /**\n * When the BALANCE_UPDATED from CGP is fired, the bankroll balance must pe updated\n */\n private subscribe() {\n this.services.sdk.events.onBalanceUpdated(() => {\n this.fetchAllData();\n });\n this.services.sdk.events.onOAuthStateChanged(async (params) => {\n this.fetchAllData();\n (await this.services.loginPopup).showLoginGamePopupOnAuthStateChange(params)\n })\n }\n\n private fetchAllData() {\n for (const bankrollType of Object.values(BalanceType)) {\n const {bankroll, plainNumber} = this._getData(bankrollType);\n this.setBankroll(bankroll, plainNumber, bankrollType);\n }\n }\n\n // retrieve bankroll data from Wallet\n private _getData(bankrollType: BalanceType): {bankroll: string, plainNumber: number} {\n let bankroll = '';\n let plainNumber: number = NaN;\n\n if (this.services.user.isAuthorized) {\n bankroll = this.services.sdk.getBankroll(bankrollType) as string;\n plainNumber = this.services.sdk.getBankroll(bankrollType, true) as number;\n }\n return {bankroll, plainNumber};\n }\n\n computeGameMaxLimit(gameInfo: GameInfo): number {\n if(gameInfo.allowWithdrawOnlyFromReal) {\n return this.cashBankroll;\n } else {\n return this.totalBankroll;\n }\n }\n\n}\n","import {MenuItemConfigReaderBase} from \"../menu-items-common/menu-item-config-reader/menu-item-config-reader-base\";\nimport {MenuItemsConfiguration} from \"../configurations/config-data-sections/menu-items.configuration\";\nimport {\n MenuItemAnalyticsCategoryAndLabel\n} from \"../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {OrbitUserFlowAnalyticsCategory, OrbitUserFlowAnalyticsLabel} from \"../analytics/analytics.service.interface\";\n\n\nexport class HomepageHeaderArenasMenuItemConfigReader extends MenuItemConfigReaderBase {\n\n protected _getMenuItemsConfigOverrides(): MenuItemsConfiguration | undefined {\n return this.services.configuration.data.homePage.menuItemsOverride;\n }\n\n protected _getAnalyticsCategoryAndLabel(): MenuItemAnalyticsCategoryAndLabel {\n return {\n category: OrbitUserFlowAnalyticsCategory.Navigation,\n label: OrbitUserFlowAnalyticsLabel.HomePageHeaderArenas\n }\n }\n}","import styled from \"styled-components\";\n\nconst DefaultBox = styled.div<{headerArenasStyleIsMenu?: boolean;}>`\n position: absolute;\n top: ${({headerArenasStyleIsMenu}) => headerArenasStyleIsMenu ? \"0.2rem\" : 0};\n right: ${({headerArenasStyleIsMenu}) => headerArenasStyleIsMenu ? \"0.6rem\" : 0};\n padding: 0 0.5rem;\n background: ${({theme}) => theme.components.header.colors.indicatorBadge.backgroundInGridLayout.toString()};\n color: ${({theme}) => theme.colors.textLight.toString()};\n border-radius: 2rem;\n font-size: 0.9em;\n font-weight: 700;\n transform: translate(100%, -50%);\n`;\n\nexport const HomepageHeaderArenaBadgeDefaultBox = DefaultBox;\n","import styled from \"styled-components\";\nimport { HomepageHeaderArenaBadgeDefaultBox } from \"./home-page-header-arena-badge.default.box\";\nimport { baseColors} from '../../../../themes/definitions/si/base-colors';\n\nexport const HomepageHeaderArenaBadgeSIBox = styled(HomepageHeaderArenaBadgeDefaultBox)`\n font-size: 1.8rem;\n background-color: ${baseColors.base03Dark};\n padding: 0 0.7rem;\n box-shadow: 0 0 1px 1px ${props => props.theme.colors.background};\n border-radius: 0.5rem;\n transform: translate(50%, 10px);\n z-index: 1;\n`;\n","import styled from \"styled-components\";\nimport { HomepageHeaderArenaBadgeDefaultBox } from \"./home-page-header-arena-badge.default.box\";\n\nexport const HomepageHeaderArenaBadgeMrGreenBox = styled(HomepageHeaderArenaBadgeDefaultBox)`\n font-size: 1.2rem;\n top: ${({headerArenasStyleIsMenu}) => headerArenasStyleIsMenu ? \"-0.3rem\" : 0};\n color: ${({theme}) => theme.colors.textContrast};\n padding: 0.1rem 0.37rem;\n box-shadow: ${({theme}) => theme.components.header.colors.indicatorBadge.backgroundInGridLayout.toString()} 0px 0px 4px;\n min-width: 20px;\n`;\n","import { styledByTheme } from \"../../../../themes/architecture/styled-by-theme\";\nimport { HomepageHeaderArenaBadgeDefaultBox } from \"./home-page-header-arena-badge.default.box\";\nimport { HomepageHeaderArenaBadgeSIBox } from \"./home-page-header-arena-badge.si.box\";\nimport { HomepageHeaderArenaBadgeMrGreenBox } from \"./home-page-header-arena-badge.mrgreen.box\";\n\nexport const HomepageHeaderArenaBadgeBox = styledByTheme(HomepageHeaderArenaBadgeDefaultBox)\n .forSI(HomepageHeaderArenaBadgeSIBox)\n .forMrGreen(HomepageHeaderArenaBadgeMrGreenBox).apply();\n","import styled from \"styled-components\";\n\nexport const HomepageHeaderArenaMenuItemDefaultBox = styled.div`\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n position: relative;\n margin: 0rem 3rem;\n padding-left: 3.6rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 0rem 1.5rem;\n padding-left: 2rem;\n\n padding-top: 0.3rem;\n padding-bottom: 0.3rem;\n }\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaMenuItemDefaultBox} from \"./home-page-header-arena-menu-item.default.box\";\nimport {baseColors} from \"../../../../../themes/definitions/mrgreen/base-colors\";\n\nexport const HomepageHeaderArenaMenuItemMrGreenBox = styled(HomepageHeaderArenaMenuItemDefaultBox)`\n color: ${({theme}) => theme.colors.textContrast};\n &:hover {\n color: ${baseColors.white};\n }\n`;\n","import {HomepageHeaderArenaMenuItemDefaultBox} from \"./home-page-header-arena-menu-item.default.box\";\nimport { styledByTheme } from \"../../../../../themes/architecture/styled-by-theme\";\nimport {HomepageHeaderArenaMenuItemMrGreenBox} from \"./home-page-header-arena-menu-item.mrgreen.box\";\n\nexport const HomepageHeaderArenaMenuItemBox = styledByTheme(HomepageHeaderArenaMenuItemDefaultBox)\n .forMrGreen(HomepageHeaderArenaMenuItemMrGreenBox)\n .apply();\n","import styled from \"styled-components\";\n\nexport const HomepageHeaderArenaMenuItemIconDefaultBox = styled.div`\n position: absolute;\n left: 0;\n top: 1px;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n top: 3px;\n }\n`;\n","import {HomepageHeaderArenaMenuItemIconDefaultBox} from \"./home-page-header-arena-menu-item-icon.default.box\";\nimport { styledByTheme } from \"../../../../../themes/architecture/styled-by-theme\";\n\nexport const HomepageHeaderArenaMenuItemIconBox = styledByTheme(HomepageHeaderArenaMenuItemIconDefaultBox).apply();\n","import styled from \"styled-components\";\n\nexport const HomepageHeaderArenaMenuItemNameDefaultBox = styled.div`\n position: relative;\n display: inline;\n font-size: 1.8rem;\n letter-spacing: 1px;\n padding-left: 1.2rem;\n ${({theme}) => theme.font.presets.body}\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 1.4rem;\n padding-left: 0.5rem;\n }\n`;\n","import {HomepageHeaderArenaMenuItemNameDefaultBox} from \"./home-page-header-arena-menu-item-name.default.box\";\nimport { styledByTheme } from \"../../../../../themes/architecture/styled-by-theme\";\n\nexport const HomepageHeaderArenaMenuItemNameBox = styledByTheme(HomepageHeaderArenaMenuItemNameDefaultBox)\n .apply();\n","import styled, { css } from \"styled-components\";\n\ninterface HomepageHeaderArenaTileBoxProps {\n useSmallHeaderArenas: boolean;\n totalItemsCount: number;\n}\n\nexport const HomepageHeaderArenaTileDefaultBox = styled.div<HomepageHeaderArenaTileBoxProps>`\n display: inline-block;\n width: 20%;\n ${props => props.useSmallHeaderArenas ? css`max-width: 290px` : \"\"};\n transition: transform 0.4s ease-in-out;\n\n &:hover {\n transform: scale(1.05);\n }\n\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n max-width: ${({totalItemsCount}) => 100 / totalItemsCount}%;\n &::after {\n content: \"\";\n position: absolute;\n bottom: 5px;\n left: 0;\n width: 100%;\n height: 15px;\n background-image: url(${props => props.theme.assets.images.arena_shaddow_png.toString()});\n background-repeat: no-repeat;\n background-position: center;\n transform: translateY(100%);\n z-index: 0;\n }\n }\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 22%;\n ${props => props.useSmallHeaderArenas ? css`max-width: 210px` : \"\"};\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n width: ${props => !props.useSmallHeaderArenas ? \"45%\" : \"31%\"};\n ${props => props.useSmallHeaderArenas ? css`min-width: 100px;`: \"\"};\n }\n\n`;\n","import styled, { css } from \"styled-components\";\nimport {HomepageHeaderArenaTileDefaultBox} from \"./home-page-header-arena-tile.default.box\";\n\nexport const HomepageHeaderArenaTileSIBox = styled(HomepageHeaderArenaTileDefaultBox)`\n ${props => props.useSmallHeaderArenas ? css`max-width: 252px` : \"\"};\n padding-right: 1rem;\n padding-left: 1rem;\n &::after {\n display: none;\n }\n\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n ${props => props.useSmallHeaderArenas ? css`max-width: 210px` : \"\"};\n }\n\n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n ${props => props.useSmallHeaderArenas ? css`min-width: 100px;`: \"\"};\n }\n\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaTileDefaultBox} from \"./home-page-header-arena-tile.default.box\";\n\nexport const HomepageHeaderArenaTileCasino777Box = styled(HomepageHeaderArenaTileDefaultBox)`\n @media ${({theme}) => theme.mediaQuery.xlAndAbove} {\n max-width: min(${({totalItemsCount}) => 100 / totalItemsCount}%, 220px);\n }\n\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaTileDefaultBox} from \"./home-page-header-arena-tile.default.box\";\n\nexport const HomepageHeaderArenaTileCasino888Box = styled(HomepageHeaderArenaTileDefaultBox)`\n padding-right: 1rem;\n padding-left: 1rem;\n padding-top: 1rem;\n &::after {\n display: none;\n }\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaTileDefaultBox} from \"./home-page-header-arena-tile.default.box\";\n\nexport const HomepageHeaderArenaTileWsopBox = styled(HomepageHeaderArenaTileDefaultBox)`\n padding-right: 1rem;\n padding-left: 1rem;\n padding-top: 1rem;\n &::after {\n display: none;\n }\n`;\n","import {HomepageHeaderArenaTileDefaultBox} from \"./home-page-header-arena-tile.default.box\";\nimport {HomepageHeaderArenaTileSIBox} from \"./home-page-header-arena-tile.si.box\";\nimport { styledByTheme } from \"../../../../../themes/architecture/styled-by-theme\";\nimport {HomepageHeaderArenaTileCasino777Box} from \"./home-page-header-arena-tile.casino777.box\";\nimport {HomepageHeaderArenaTileCasino888Box} from \"./home-page-header-arena-tile.casino888.box\";\nimport {HomepageHeaderArenaTileWsopBox} from \"./home-page-header-arena-tile.wsop.box\";\n\nexport const HomepageHeaderArenaTileBox = styledByTheme(HomepageHeaderArenaTileDefaultBox)\n .forCasino888(HomepageHeaderArenaTileCasino888Box)\n .forSI(HomepageHeaderArenaTileSIBox)\n .forCasino777(HomepageHeaderArenaTileCasino777Box)\n .forWsop(HomepageHeaderArenaTileWsopBox)\n .apply();\n","import styled from \"styled-components\";\nimport {HeaderArenasStyle} from \"../../../../../themes/architecture/sections/theme-layout.interface\";\n\ninterface HomepageHeaderArenaSkeletonDefaultBoxProps {\n isLoading: boolean;\n tilesSize: HeaderArenasStyle.BigTiles | HeaderArenasStyle.SmallTiles;\n}\n\nexport const HomepageHeaderArenaSkeletonDefaultBox = styled.div<HomepageHeaderArenaSkeletonDefaultBoxProps>`\n\n display: ${({isLoading}) => isLoading ? \"block\" : \"none\"};\n\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n\n &::before {\n position: absolute;\n content: \"\";\n top: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"4rem\" : \"2rem\"};\n left: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"2rem\" : \"1rem\"};\n right: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"2rem\" : \"1rem\"};\n bottom: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"3rem\" : \"1rem\"};\n background: radial-gradient(rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0.1));\n border-radius: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"40%\" : \"16px\"};\n \n animation: LoadingAnimation linear 1s 5;\n }\n\n @keyframes LoadingAnimation {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaSkeletonDefaultBox} from \"./home-page-header-arena-skeleton.default.box\";\n\nexport const HomepageHeaderArenaSkeletonSIBox = styled(HomepageHeaderArenaSkeletonDefaultBox)`\n &::before {\n top: 0;\n left: 0;\n right: 0; \n bottom: 0;\n border-radius: 0;\n }\n`;","import styled from \"styled-components\";\nimport {HeaderArenasStyle} from \"../../../../../themes/architecture/sections/theme-layout.interface\";\nimport {HomepageHeaderArenaSkeletonDefaultBox} from \"./home-page-header-arena-skeleton.default.box\";\n\nexport const HomepageHeaderArenaSkeletonCasino888Box = styled(HomepageHeaderArenaSkeletonDefaultBox)`\n top: 50%;\n left: 50%;\n max-width: 219px;\n max-height: 186px;\n transform: translate(-50%, -50%);\n &::before {\n top: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"4rem\" : 0};\n left: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"2rem\" : 0};\n right: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"2rem\" : 0};\n bottom: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"3rem\" : 0};\n border-radius: ${({tilesSize}) => tilesSize === HeaderArenasStyle.BigTiles ? \"40%\" : \"16px\"};\n }\n`;","import {HomepageHeaderArenaSkeletonDefaultBox} from \"./home-page-header-arena-skeleton.default.box\";\nimport {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\nimport {HomepageHeaderArenaSkeletonSIBox} from \"./home-page-header-arena-skeleton.si.box\";\nimport {HomepageHeaderArenaSkeletonCasino888Box} from \"./home-page-header-arena-skeleton.casino888.box\";\n\nexport const HomepageHeaderArenaSkeletonBox = styledByTheme(HomepageHeaderArenaSkeletonDefaultBox)\n .forCasino888(HomepageHeaderArenaSkeletonCasino888Box)\n .forSI(HomepageHeaderArenaSkeletonSIBox)\n .apply();\n","import styled from \"styled-components\";\n\nexport const HomePageHeaderArenaRatioImageWrapperDefaultBox = styled.div`\n width: 100%;\n`;","import styled from \"styled-components\";\nimport {HomePageHeaderArenaRatioImageWrapperDefaultBox} from \"./home-page-header-arena-ratio-image-wrapper.default.box\";\n\nexport const HomePageHeaderArenaRatioImageWrapperCasino888Box = styled(HomePageHeaderArenaRatioImageWrapperDefaultBox)`\n max-width: 219px;\n margin: 0 auto;\n`;","import {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\nimport {HomePageHeaderArenaRatioImageWrapperCasino888Box} from \"./home-page-header-arena-ratio-image-wrapper.caisno888.box\";\nimport {HomePageHeaderArenaRatioImageWrapperDefaultBox} from \"./home-page-header-arena-ratio-image-wrapper.default.box\";\n\nexport const HomePageHeaderArenaRatioImageWrapperBox = styledByTheme(HomePageHeaderArenaRatioImageWrapperDefaultBox)\n .forCasino888(HomePageHeaderArenaRatioImageWrapperCasino888Box)\n .apply()","import React from \"react\";\nimport {Image, ImageProps} from \"../raw-components/image/image\";\nimport {OrbitComponentWithState} from \"../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {AspectRatioContainerComponent} from '../raw-components/aspect-ratio-container/aspect-ratio-container.component';\nimport {HomepageHeaderArenaSkeletonBox} from './boxes/tiles/skeleton/home-page-header-arena-skeleton.box';\nimport { ByThemeRegistry } from \"../../themes/architecture/by-theme-registry\";\nimport {HeaderArenasStyle} from \"../../themes/architecture/sections/theme-layout.interface\";\nimport {HomePageHeaderArenaRatioImageWrapperBox} from \"./boxes/tiles/ratio-image-wrapper/home-page-header-arena-ratio-image-wrapper.box\";\n\ninterface HomePageHeaderArenaTileComponentState {\n isLoading: boolean;\n}\n\nexport class HomePageHeaderArenaTileComponent extends OrbitComponentWithState<ImageProps, HomePageHeaderArenaTileComponentState> {\n private aspectRatioSizes: ByThemeRegistry<{width: number; height: number;}> = new ByThemeRegistry({width: 295, height: 275});\n\n constructor(props: ImageProps) {\n super(props);\n\n this.state = {\n isLoading: true\n };\n this.aspectRatioSizes.forCasino888({width: 219, height: 186});\n this.aspectRatioSizes.forWsop({width: 219, height: 186});\n this.aspectRatioSizes.forSI({width: 252, height: 150});\n this.aspectRatioSizes.forCasino777({width: 260, height: 244});\n }\n\n private _handleDoneLoading() {\n this.setState({ isLoading: false });\n }\n\n render() {\n return (\n <HomePageHeaderArenaRatioImageWrapperBox>\n <AspectRatioContainerComponent\n {...this.aspectRatioSizes.getRegistryItem(this.services.theme.themeName)}\n >\n <HomepageHeaderArenaSkeletonBox\n isLoading={this.state.isLoading}\n tilesSize={this.services.homepage.headerArenasStyleIsBigTiles ? HeaderArenasStyle.BigTiles : HeaderArenasStyle.SmallTiles}\n />\n {/* I have added width:100% and height:100% because lighthouse reports that images that has no width and height set and might affect the cls */}\n {/* But I don't think it affects the layout of the page. */}\n <Image {...this.props} onLoad={() => this._handleDoneLoading()} style={{...this.props.style, width: \"100%\", height: \"100%\"}}/>\n </AspectRatioContainerComponent>\n </HomePageHeaderArenaRatioImageWrapperBox>\n );\n }\n}","import styled from \"styled-components\";\n\nexport const HomepageHeaderArenaNameDefaultBox = styled.div`\n position: relative;\n font-size: 1.4rem;\n text-transform: uppercase;\n text-align: center;\n letter-spacing: 1px;\n color: ${props => props.theme.colors.textLight};\n margin: 0 auto;\n width: fit-content;\n z-index: 1;\n padding-top: 1rem;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 0.5rem;\n font-size: 0.9rem;\n }\n`;\n","import styled from \"styled-components\";\nimport {HomepageHeaderArenaNameDefaultBox} from \"./home-page-header-arena-name.default.box\";\n\nexport const HomepageHeaderArenaNameSIBox = styled(HomepageHeaderArenaNameDefaultBox)`\n width: auto;\n color: ${({theme}) => theme.colors.brandPrimaryContrast};\n background-color: ${({theme}) => theme.colors.brandSecondaryContrast};\n border-bottom: 5px solid ${({theme}) => theme.colors.brandSecondaryLight};\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n ${({theme}) => theme.font.presets.secondary};\n font-size: 2.9rem;\n line-height: 1.2;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 2rem;\n }\n`;\n","import {HomepageHeaderArenaNameDefaultBox} from \"./home-page-header-arena-name.default.box\";\nimport {HomepageHeaderArenaNameSIBox} from \"./home-page-header-arena-name.si.box\";\nimport { styledByTheme } from \"../../../../../themes/architecture/styled-by-theme\";\n\nexport const HomepageHeaderArenaNameBox = styledByTheme(HomepageHeaderArenaNameDefaultBox)\n .forSI(HomepageHeaderArenaNameSIBox)\n .apply();\n","import styled from \"styled-components\";\n\nexport const HomepageHeaderArenaLinkDefaultBox = styled.a`\n position: relative;\n width: 100%;\n`;\n","import {HomepageHeaderArenaLinkDefaultBox} from \"./home-page-header-arena-link.default.box\";\n\nexport const HomepageHeaderArenaLinkBox = HomepageHeaderArenaLinkDefaultBox;\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {MenuItemComponentProps} from \"../../services/menu-items-common/menu-item-component-props.interface\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport classNames from 'classnames';\nimport {HomepageHeaderArenaBadgeBox} from './boxes/home-page-header-arena-badge/home-page-header-arena-badge.box';\nimport {HomepageHeaderArenaMenuItemBox} from './boxes/menu/menu-item/home-page-header-arena-menu-item.box';\nimport {Link} from '../raw-components/link/link';\nimport {CyClass} from '../../../common/cy-classes';\nimport {HomepageHeaderArenaMenuItemIconBox} from './boxes/menu/icon-box/home-page-header-arena-menu-item-icon.box';\nimport {HomepageHeaderArenaMenuItemNameBox} from './boxes/menu/menu-item-name/home-page-header-arena-menu-item-name.box';\nimport {HomepageHeaderArenaTileBox} from './boxes/tiles/tile/home-page-header-arena-tile.box';\nimport {HomePageHeaderArenaTileComponent} from './home-page-header-arena-tile.component';\nimport {HomepageHeaderArenaNameBox} from './boxes/tiles/name/home-page-header-arena-name.box';\nimport {HomepageHeaderArenaLinkBox} from './boxes/home-page-header-arena-link/home-page-header-arena-link.box';\nimport {SeoConfiguration} from '../../services/configurations/config-data-sections/seo.configuration';\nimport {ISendElasticEventOptions} from '../../services/analytics/analytics.service.interface';\n\ninterface HomePageHeaderArenaMenuItemComponentProps extends MenuItemComponentProps, ComponentServicesPick<'homepage' | 'location' | 'mediaQuery' | 'device' | 'theme' | 'configuration' | 'translation' | 'analytics'> {\n itemIndex: number;\n totalItemsCount: number;\n}\nconst ComponentBody: React.FC<HomePageHeaderArenaMenuItemComponentProps> = observer((props) => {\n const menuItem = props.menuItem;\n\n const menuButtonIconMap = new Map([\n [\"liveCasinoMenuItem\", props.theme.currentTheme.icons.sideMenuLiveCasino],\n [\"slotsMenuItem\", props.theme.currentTheme.icons.sideMenuSlots],\n [\"newGamesMenuItem\", props.theme.currentTheme.icons.sideMenuNewGames],\n [\"jackpotsMenuItem\", props.theme.currentTheme.icons.sideMenuJackpots],\n [\"exclusive888arenaMenuItem\", props.theme.currentTheme.icons.sideMenuExclusive888],\n [\"scratchCardsMenuItem\", props.theme.currentTheme.icons.sideMenuScratchCards],\n [\"casinoMenuItem\", props.theme.currentTheme.icons.sideMenuCasinoGames]\n ]);\n function _getButtonIcon(label: string) {\n const iconKey = label.trim().replace(/(-|\\s)/g, \"_\");\n return menuButtonIconMap.has(iconKey) ? menuButtonIconMap.get(iconKey)! : props.theme.currentTheme.icons.sideMenuExclusive888;\n }\n function _getSeo(prop: keyof SeoConfiguration[\"categories\"][\"images\"], placeholder: string, dynamic: string) {\n\n let seoValue = '';\n let seoConfig = props.configuration.data.seo;\n \n if (seoConfig && seoConfig.categories && seoConfig.categories.images && seoConfig.categories.images[prop]) {\n seoValue = seoConfig.categories.images[prop];\n }\n \n return props.translation.translate(seoValue, {\n [placeholder]: dynamic\n });\n }\n\n const handleLinkClick = async () => {\n let data: ISendElasticEventOptions = {\n eventType: \"Orbit_AI_Feature\",\n category: 'Game Grid',\n action: 'Home',\n label: `${props.menuItem.key}_${props.itemIndex}`\n } \n props.analytics.sendElasticInfoEvent(data, true);\n\n await props.menuItem.execute();\n }\n\n let href = props.menuItem.getLinkUrl() ?? \"\";\n if(href) {\n href = props.location.buildFullUri(href).toString();\n }\n\n const hasNewGamesIndication = menuItem.key === \"newGamesMenuItem\" && props.homepage.newAddedGames > 0;\n const newGamesIndication = hasNewGamesIndication ?\n <HomepageHeaderArenaBadgeBox className={CyClass('cy-new-games-arena-badge')} headerArenasStyleIsMenu={props.homepage.headerArenasStyleIsMenu}>\n {props.homepage.newAddedGames > 10 ? '10+' : props.homepage.newAddedGames}\n </HomepageHeaderArenaBadgeBox>\n : null;\n\n if (props.homepage.headerArenasStyleIsMenu) {\n const Icon = _getButtonIcon(menuItem.key);\n return <Link href={href} enableTap={props.device.isMobile} key={menuItem.key}>\n <HomepageHeaderArenaMenuItemBox\n className={classNames(menuItem.key, CyClass('cy-arena-box'))}\n onClick={handleLinkClick}\n >\n <HomepageHeaderArenaMenuItemIconBox>\n <Icon size={props.mediaQuery.xlAndAbove ? 3.6 : 2} />\n {newGamesIndication}\n </HomepageHeaderArenaMenuItemIconBox>\n <HomepageHeaderArenaMenuItemNameBox>\n <span className={CyClass('cy-header-arena-title')}>\n { props.menuItem.text }\n </span>\n </HomepageHeaderArenaMenuItemNameBox>\n </HomepageHeaderArenaMenuItemBox>\n </Link>\n }\n\n return (\n <HomepageHeaderArenaTileBox\n key={menuItem.key}\n className={classNames(menuItem.key, CyClass('cy-arena-box'))}\n onClick={handleLinkClick}\n useSmallHeaderArenas={props.homepage.headerArenasStyleIsSmallTiles}\n totalItemsCount={props.totalItemsCount}\n >\n {/* We need this href only for SEO*/}\n <Link href={href} enableTap={props.device.isMobile} box={HomepageHeaderArenaLinkBox}>\n <HomePageHeaderArenaTileComponent\n // OBSERVATION: I'm using here menuItem.icon as is, directly in src attribute because it's a path to an image.\n // If something more complex is needed, see implementation from generic side menu item where a check for menuItem.iconSource is made and\n // and also get (from lodash) is used to be able to set in config just the relative image path and not the whole thing\n src={menuItem.icon}\n enableTap={props.device.isMobile}\n lazy={true}\n className={'arena-img'}\n fallbackSrc={props.configuration.data.generalSettings.gamesSettings.homePageArenaDefaultPlaceHolder}\n alt={_getSeo('alt', 'categoryName', menuItem.text)}\n title={_getSeo('title', 'categoryName', menuItem.text)}\n />\n <HomepageHeaderArenaNameBox>\n <span className={CyClass('cy-header-arena-title')}>\n { props.menuItem.text }\n </span>\n {newGamesIndication}\n </HomepageHeaderArenaNameBox>\n </Link>\n </HomepageHeaderArenaTileBox>\n );\n});\n\nexport const HomePageHeaderArenaMenuItemComponent = withServices(ComponentBody, ['homepage', 'location', 'mediaQuery', 'device', 'theme', 'configuration', 'translation', 'analytics']);","import React from 'react';\nimport {HomePageHeaderArenaMenuItemComponent} from '../../../components/home-page-header-arenas/home-page-header-arena-menu-item.component';\nimport {IRenderMenuItemOptions} from \"../../menu-items-common/renderer/menu-item.renderer.interface\";\nimport {MenuItemRendererBase} from \"../../menu-items-common/renderer/menu-item-renderer-base\";\n\nexport class GenericHomepageHeaderArenaMenuItemRenderer extends MenuItemRendererBase {\n protected _createReactElement(options?: IRenderMenuItemOptions): React.ReactElement {\n return (<HomePageHeaderArenaMenuItemComponent\n key={this.key}\n menuItem={this}\n itemIndex={options.itemIndex}\n totalItemsCount={options.totalItemsCount}\n />);\n }\n}","import {IHomepageService} from \"./homepage.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {GAME_ORIENTATION_IDS} from \"../user-game-orientation/user-game-orientation.service.interface\";\nimport { Check } from \"@sparkware/app-utils\";\nimport {BannerComponentProps} from \"../../components/banner/banner.component\";\nimport {HeaderArenasStyle} from \"../../themes/architecture/sections/theme-layout.interface\";\nimport {HomepageHeaderArenasMenuItemConfigReader} from \"./homepage-header-arenas-menu-item-config-reader\";\nimport {MenuItemKey} from \"../configurations/config-data-sections/generated-config-const\";\nimport {IMenuItemRenderer} from \"../menu-items-common/renderer/menu-item.renderer.interface\";\nimport {IMenuItemActionFactoryService} from \"../menu-item-action-factory/menu-item-action-factory.service.interface\";\nimport {GenericHomepageHeaderArenaMenuItemRenderer} from \"./menu-items/generic-homepage-header-arena-menu-item.renderer\";\n\nexport const NEW_ADDED_GAMES_LOCAL_STORAGE_KEY = \"new_added_games\";\n\nenum ARENA_IDS {\n SLOTS = \"slotsMenuItem\",\n JACKPOTS = \"jackpotsMenuItem\",\n BLACKJACK = \"blackjackMenuItem\",\n ROULETTE = \"rouletteMenuItem\",\n CASINO_GAMES = \"casinoMenuItem\",\n LIVE_CASINO = \"liveCasinoMenuItem\",\n SCRATCH_CARDS = \"scratchCardsMenuItem\",\n EXCLUSIVE888 = \"exclusive888arenaMenuItem\",\n VIDEO_POKER = \"videoPokerMenuItem\",\n GAME_SHOWS = \"gameShowsMenuItem\",\n NEW_GAMES = \"newGamesMenuItem\"\n}\n\nconst USER_GROUP_TO_HEADER_ARENAS_MAPPING = {\n [GAME_ORIENTATION_IDS.SLOTS]: [ARENA_IDS.SLOTS, ARENA_IDS.JACKPOTS, ARENA_IDS.NEW_GAMES, ARENA_IDS.EXCLUSIVE888, ARENA_IDS.LIVE_CASINO, ARENA_IDS.GAME_SHOWS],\n [GAME_ORIENTATION_IDS.BLACKJACK]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.BLACKJACK, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.CASINO_GAMES, ARENA_IDS.JACKPOTS],\n [GAME_ORIENTATION_IDS.ROULETTE]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.ROULETTE, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.CASINO_GAMES, ARENA_IDS.JACKPOTS],\n [GAME_ORIENTATION_IDS.LIVE_BLACKJACK]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.BLACKJACK, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.CASINO_GAMES, ARENA_IDS.JACKPOTS],\n [GAME_ORIENTATION_IDS.LIVE_ROULETTE]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.ROULETTE, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.CASINO_GAMES, ARENA_IDS.JACKPOTS],\n [GAME_ORIENTATION_IDS.LIVE_CASINO]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.ROULETTE, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.CASINO_GAMES, ARENA_IDS.JACKPOTS],\n [GAME_ORIENTATION_IDS.CASINO_SKILL]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.CASINO_GAMES, ARENA_IDS.NEW_GAMES, ARENA_IDS.SLOTS, ARENA_IDS.JACKPOTS, ARENA_IDS.VIDEO_POKER],\n [GAME_ORIENTATION_IDS.CASINO_SOFT]: [ARENA_IDS.SLOTS, ARENA_IDS.JACKPOTS, ARENA_IDS.NEW_GAMES, ARENA_IDS.GAME_SHOWS, ARENA_IDS.EXCLUSIVE888, ARENA_IDS.SCRATCH_CARDS],\n [GAME_ORIENTATION_IDS.CASINO_MIXT]: [ARENA_IDS.LIVE_CASINO, ARENA_IDS.SLOTS,ARENA_IDS.NEW_GAMES, ARENA_IDS.JACKPOTS, ARENA_IDS.EXCLUSIVE888, ARENA_IDS.CASINO_GAMES]\n};\n\nexport class HomepageService extends ServiceBase implements IHomepageService {\n\n constructor(services: IServiceFactoryExtended, private readonly menuItemActionFactory: IMenuItemActionFactoryService) {\n super(services);\n\n makeObservable(this);\n\n this._menuItemConfigReader = new HomepageHeaderArenasMenuItemConfigReader(services);\n\n this._setHeaderArenas(this.services.configuration.data.homePage.headerArenasOrder);\n\n this.reaction(() => this.services.userGameOrientation.gameGroup,\n (group) => {\n if (group?.groupId) {\n this._orderHeaderArenas(group.groupId)\n }\n },\n {\n fireImmediately: true\n });\n\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (isAuthorized) {\n this._updateNewAddedGames();\n } else {\n this._setNewAddedGames(0);\n }\n },\n {\n fireImmediately: true\n });\n }\n\n private readonly _menuItemConfigReader: HomepageHeaderArenasMenuItemConfigReader;\n\n @observable.ref\n private _newAddedGames: number = 0;\n\n get newAddedGames(): number {\n return this._newAddedGames;\n }\n\n @action.bound\n _setNewAddedGames(newGamesCount: number) {\n this._newAddedGames = newGamesCount;\n }\n\n @observable.ref\n headerArenas: MenuItemKey[] = [];\n\n @action.bound\n private _setHeaderArenas(arenas: MenuItemKey[]): void {\n this.headerArenas = arenas;\n }\n\n private _orderHeaderArenas(id: number): void {\n\n let arenasNames = USER_GROUP_TO_HEADER_ARENAS_MAPPING[id];\n if (!arenasNames) {\n this.services.logger.error(`User orientation id ${id} is missing from mapping.`);\n return;\n }\n\n this._setHeaderArenas(arenasNames);\n }\n\n\n private async _updateNewAddedGames() {\n\n const selfUpdatedByNewestGamesList = this.services.configuration.getSelfUpdatedByNewestGamesList();\n if (!selfUpdatedByNewestGamesList || !Check.isArray(selfUpdatedByNewestGamesList.gamesId)) {\n this._setNewAddedGames(0);\n return;\n }\n\n //take only in-layout games\n const gamesInfo = await this.services.games.getGamesInfoArray(selfUpdatedByNewestGamesList.gamesId);\n const seenGames = this._getNewAddedGamesFromLocalStorage();\n\n const newGames: {[gameType: number] : number} = {};\n gamesInfo.reduce((newGames, gi) => {\n const gt = gi.gameType;\n if (gt && !seenGames[gt]) {\n newGames[gt] = gt;\n }\n return newGames;\n }, newGames);\n\n this._setNewAddedGames(Object.keys(newGames).length);\n }\n\n resetNewAddedGames() {\n if (this.services.user.isAuthorized) {\n this._resetNewAddedGames();\n }\n }\n\n private _resetNewAddedGames() {\n\n const selfUpdatedByNewestGamesList = this.services.configuration.getSelfUpdatedByNewestGamesList();\n if (!selfUpdatedByNewestGamesList || !Check.isArray(selfUpdatedByNewestGamesList.gamesId)) {\n return;\n }\n\n this._setNewAddedGamesFromLocalStorage(selfUpdatedByNewestGamesList.gamesId);\n this._setNewAddedGames(0);\n }\n\n private _getNewAddedGamesFromLocalStorage() : {[gameType: number] : number} {\n const result: {[gameType: number] : number} = {};\n try {\n const storedValue = this.services.localStorage.getItem(this._getNewAddedGamesLocalStorageKey()) as string;\n if (!Check.isString(storedValue)) {\n return result;\n }\n storedValue.split(';').forEach(gameType => {\n result[gameType] = gameType;\n });\n return result;\n } catch(err) {\n this.services.logger.error(`Failed to parse ${this._getNewAddedGamesLocalStorageKey()} from local storage! Error details: `, err);\n return result;\n }\n }\n\n private _setNewAddedGamesFromLocalStorage(newGames: number[]) {\n const gamesList = newGames.join(';')\n this.services.localStorage.setItem(this._getNewAddedGamesLocalStorageKey(), gamesList);\n }\n\n private _getNewAddedGamesLocalStorageKey(): string {\n return `${NEW_ADDED_GAMES_LOCAL_STORAGE_KEY}_${this.services.user.cid}`;\n }\n\n // mini top banner means a smaller banner + arena icons which not overlap with banner content (and also smaller on PC)\n get useMiniTopBanner(): boolean {\n return !Check.isEmpty(this.services.configuration.data.homePage.topBanner.miniTopBannerComponentID);\n }\n\n get useAdminBanner(): boolean {\n const bannerAdminIDFromConfig = this.services.configuration.data.homePage.topBanner.bannerAdminPlaceholderId;\n return !Check.isEmpty(bannerAdminIDFromConfig);\n }\n\n get headerArenasStyle() {\n const preferredStyle = this.services.theme.currentTheme.layout.headerArenasStyle;\n // if the preferred style is Menu (for MrGreen) or SmallTiles (this should never come from here) we return it directly,\n // but if it is null (the default) or BigTiles (also should never come from here) we have to check if we should use SmallTiles (from AB testing or something)\n // or we should leave the default BigTiles\n if (preferredStyle === HeaderArenasStyle.Menu || preferredStyle === HeaderArenasStyle.SmallTiles) {\n return preferredStyle;\n }\n if (this.useMiniTopBanner || this.useAdminBanner) {\n return HeaderArenasStyle.SmallTiles;\n } else {\n return HeaderArenasStyle.BigTiles;\n }\n }\n\n get headerArenasStyleIsBigTiles() {\n return this.headerArenasStyle === HeaderArenasStyle.BigTiles;\n }\n\n get headerArenasStyleIsSmallTiles() {\n return this.headerArenasStyle === HeaderArenasStyle.SmallTiles;\n }\n\n get headerArenasStyleIsMenu() {\n return this.headerArenasStyle === HeaderArenasStyle.Menu;\n }\n\n private _getMiniBannerComponentID() {\n return this.services.configuration.data.homePage.topBanner.miniTopBannerComponentID;\n }\n\n getTopBannerProps(): BannerComponentProps {\n const topBannerConfig = this.services.configuration.data.homePage.topBanner;\n const minHeight = this.services.theme.themeCustomizer.getHomePageTopBannerHeight();\n const componentID = this.useMiniTopBanner ? this._getMiniBannerComponentID() : topBannerConfig.componentID;\n return {\n showPlaceholder: true,\n minHeight: minHeight,\n componentID: componentID,\n templateID: topBannerConfig.templateID,\n bannerAdminPlaceholderId: topBannerConfig.bannerAdminPlaceholderId\n }\n }\n\n private _getMenuItem(key: MenuItemKey): IMenuItemRenderer {\n let customMenuItem = this.services.regulation.current.menuItems.getHomepageHeaderArenaMenuItem(key, this._menuItemConfigReader, this.menuItemActionFactory);\n if(customMenuItem) {\n return customMenuItem;\n }\n\n return new GenericHomepageHeaderArenaMenuItemRenderer(key, this._menuItemConfigReader, this.services, this.menuItemActionFactory);\n }\n\n getHeaderArenasMenuItems(): IMenuItemRenderer[] {\n return this.headerArenas.map(key => this._getMenuItem(key))\n .filter(menuItem => menuItem.display);\n }\n}\n","import styled from \"styled-components\";\n\nexport const SessionCooldownPopupDefaultBox = styled.div`\n display: flex;\n padding: 2rem;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n user-select: none;\n pointer-events: none;\n`;\n","import {SessionCooldownPopupDefaultBox} from \"./session-cooldown-popup.default.box\";\n\nexport const SessionCooldownPopupBox = SessionCooldownPopupDefaultBox;\n","import styled from \"styled-components\";\nimport { DialogTextBox } from \"../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const SessionCooldownPopupTextDefaultBox = styled(DialogTextBox)`\n font-size: 1.8rem;\n`;\n","import {SessionCooldownPopupTextDefaultBox} from \"./session-cooldown-popup-text.default.box\";\n\nexport const SessionCooldownPopupTextBox = SessionCooldownPopupTextDefaultBox;\n","import styled from \"styled-components\";\nimport { DialogHighlightedTextBox } from \"../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const SessionCooldownPopupTimerDefaultBox = styled(DialogHighlightedTextBox)`\n font-size: 4rem;\n`;\n","import {SessionCooldownPopupTimerDefaultBox} from \"./session-cooldown-popup-timer.default.box\";\n\nexport const SessionCooldownPopupTimerBox = SessionCooldownPopupTimerDefaultBox;\n","import styled from \"styled-components\";\nimport { DialogTextBox } from \"../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const SessionCooldownPopupTimerRemainingDefaultBox = styled(DialogTextBox)`\n font-size: 2rem;\n`;\n","import {SessionCooldownPopupTimerRemainingDefaultBox} from \"./session-cooldown-popup-timer-remaining.default.box\";\n\nexport const SessionCooldownPopupTimerRemainingBox = SessionCooldownPopupTimerRemainingDefaultBox;\n","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {SessionCooldownPopupBox} from \"./boxes/session-cooldown.popup.box\";\nimport {SessionCooldownPopupTextBox} from \"./boxes/session-cooldown-popup-text.box\";\nimport {SessionCooldownPopupTimerBox} from \"./boxes/session-cooldown-popup-timer.box\";\nimport {SessionCooldownPopupTimerRemainingBox} from \"./boxes/session-cooldown-popup-timer-remaining.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\n\nexport interface ISessionCooldownPopupComponentProps {\n getRemainingTime: () => TimeSpan;\n}\n\nexport const SessionCooldownPopupComponent: React.FC<ISessionCooldownPopupComponentProps> = observer((props) => {\n const services = useServices();\n const remainingTime = props.getRemainingTime();\n\n const prependZero = (value: number) => {\n return value.toString().padStart(2, '0');\n }\n\n return (\n <SessionCooldownPopupBox className={CyClass(\"cy-session-cooldown-popup\")}>\n <SessionCooldownPopupTimerBox className={CyClass('cy-session-cooldown-remaining')}>\n {prependZero(remainingTime.minutes)}:{prependZero(remainingTime.seconds)}\n </SessionCooldownPopupTimerBox>\n <SessionCooldownPopupTimerRemainingBox>\n {services.translation.translate(\"SESSION_COOLDOWN_POPUP_REMAINING\")}\n </SessionCooldownPopupTimerRemainingBox>\n <SessionCooldownPopupTextBox>\n {services.translation.translate(\"SESSION_COOLDOWN_POPUP_INFO_TEXT\")}\n </SessionCooldownPopupTextBox>\n </SessionCooldownPopupBox>\n );\n\n})\n","import React from \"react\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {makeObservable, observable, runInAction} from \"mobx\";\nimport {IModalDialogHandler} from \"../dialog/dialog.service.interface\";\nimport {CGPEventSubscription} from \"../sdk/cgp-sdk.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {SessionCooldownPopupComponent} from \"../../components/session-cooldown-popup/session-cooldown-popup.component\";\nimport {ISessionCooldownService} from \"./session-cooldown.service.interface\";\nimport {NullableNumber} from \"../../../common/types/nullable-types\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {namedSetInterval} from \"../../../common/utils/time-functions\";\n\nexport const COOL_DOWN_EXPIRATION_DATE_STORAGE_KEY: string = \"orbit-session-cooldown-expiration-date\";\n\nexport class SessionCooldownService extends ServiceBase implements ISessionCooldownService {\n\n private _sessionCoolDownConfig = this.services.regulation.getSessionCooldownConfig();\n\n @observable.ref\n private _remainingTime: TimeSpan = TimeSpan.fromMilliseconds(0);\n\n private _dialogHandler: IModalDialogHandler | null = null;\n private _realityCheckOpenedEventHandler: CGPEventSubscription = null;\n private _realityCheckClosedEventHandler: CGPEventSubscription = null;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n if (this._sessionCoolDownConfig.featureEnabled) {\n this.reaction(\n () => this.services.user.isAuthorized,\n isAuthorized => {\n if(isAuthorized) {\n this._onUserLogin();\n } else {\n this._onUserLogout()\n }\n },\n {\n fireImmediately: true\n }\n );\n }\n }\n\n private get coolDownExpirationDate(): NullableNumber {\n const storedExpirationDate = this.services.localStorage.getItem(COOL_DOWN_EXPIRATION_DATE_STORAGE_KEY);\n if(storedExpirationDate) {\n return parseInt(storedExpirationDate);\n }\n\n return null;\n }\n\n private set coolDownExpirationDate(value: NullableNumber) {\n if(Check.isNullOrUndefined(value)) {\n this.services.localStorage.removeItem(COOL_DOWN_EXPIRATION_DATE_STORAGE_KEY);\n } else {\n this.services.localStorage.setItem(COOL_DOWN_EXPIRATION_DATE_STORAGE_KEY, value);\n }\n }\n\n private get isInCoolDown(): boolean {\n const expirationDate = this.coolDownExpirationDate;\n if(Check.isNullOrUndefined(expirationDate)) {\n return false;\n }\n\n return this.services.time.now() < expirationDate;\n }\n\n private async _onUserLogin(): Promise<void> {\n if(this.isInCoolDown) {\n this._showCoolDownDialog();\n }\n\n this._realityCheckClosedEventHandler = this.services.sdk.events.onRealityCheckClosed(() => {\n this.coolDownExpirationDate = this.services.time.now() + this._sessionCoolDownConfig.cooldownTime.totalMilliseconds;\n this._showCoolDownDialog();\n\n });\n\n this._realityCheckOpenedEventHandler = this.services.sdk.events.onRealityCheckOpened(async () => {\n this._closeCoolDownDialog();\n this.coolDownExpirationDate = null;\n await this._setCoolDownRestriction();\n });\n }\n\n private _onUserLogout() {\n\n this._closeCoolDownDialog();\n\n this._realityCheckClosedEventHandler?.off();\n this._realityCheckClosedEventHandler = null;\n\n this._realityCheckOpenedEventHandler?.off();\n this._realityCheckOpenedEventHandler = null;\n\n this.coolDownExpirationDate = null;\n }\n\n private async _setCoolDownRestriction(): Promise<void> {\n try {\n await this.services.api.restrictionsController.setCoolDownRestriction({\n CoolDownTimeInSeconds: this._sessionCoolDownConfig.cooldownTime.totalSeconds\n });\n } catch (err){\n this.services.logger.error('Failed to set cool down restriction', err);\n }\n\n }\n\n private _updateRemainingTime(): void {\n runInAction(() => {\n if(this.isInCoolDown) {\n this._remainingTime = TimeSpan.fromMilliseconds(this.coolDownExpirationDate - this.services.time.now());\n } else {\n this.coolDownExpirationDate = null;\n this._remainingTime = TimeSpan.fromMilliseconds(0);\n }\n });\n }\n\n private _countDownTimerRef: any = null;\n private _startCountDownTimer(): void {\n this._updateRemainingTime();\n this._countDownTimerRef = namedSetInterval('COOL_DOWN_COUNT_DOWN_TIMER',() => {\n this._updateRemainingTime();\n\n if(this.isInCoolDown) {\n this._preventCoolDownByPass(); //this is for the case when a smart user removes the dialog from DOM using dev tools\n } else {\n this._closeCoolDownDialog();\n }\n }, 1000);\n }\n\n private _stopCountDownTimer(): void {\n if(this._countDownTimerRef) {\n clearInterval(this._countDownTimerRef);\n this._countDownTimerRef = null;\n }\n }\n\n private _showCoolDownDialog(): void {\n\n this.services.dialog.showModal((dialogHandler) => {\n this._dialogHandler = dialogHandler;\n return <SessionCooldownPopupComponent getRemainingTime={() => this._remainingTime} />\n }, {\n title: this.services.translation.translate(\"SESSION_COOLDOWN_POPUP_TITLE\"),\n isHighPriority: true,\n hideCloseButton: true,\n shouldBeClosedOnlyByUser: true\n });\n\n this.services.analytics.sendElasticInfoEvent({\n eventType:\"Lugas\",\n category:\"SESSION_COOLDOWN_POPUP\",\n action:\"SHOW_POPUP\"\n }, false);\n\n this._startCountDownTimer();\n\n\n }\n\n private _closeCoolDownDialog(): void {\n this._stopCountDownTimer();\n if(this._dialogHandler) {\n this._dialogHandler.close();\n this._dialogHandler = null;\n this.services.analytics.sendElasticInfoEvent({\n eventType:\"Lugas\",\n category:\"SESSION_COOLDOWN_POPUP\",\n action:\"HIDE_POPUP\"\n }, false);\n\n }\n\n }\n\n private _preventCoolDownByPass(): void {\n const elem = document.getElementsByClassName(CyClass('cy-session-cooldown-popup'));\n if (elem.length === 0) {\n this.services.analytics.sendElasticInfoEvent({\n eventType:\"Lugas\",\n category:\"SESSION_COOLDOWN_POPUP\",\n action:\"POPUP_MANIPULATED\"\n }, false);\n this._stopCountDownTimer();\n this.services.window.reload();\n }\n }\n\n\n}\n","import { action, observable, makeObservable } from \"mobx\";\n\ninterface IMediaQueryData {\n matches: boolean;\n media: string;\n}\n\nexport class MediaQueryListener {\n @observable.ref\n isMatched: boolean;\n\n private mediaQueryList: MediaQueryList;\n\n constructor(public media: string, private onChangeConstructorParam: (matches: boolean) => void) {\n makeObservable(this);\n\n this.mediaQueryList = window.matchMedia(media);\n\n if (this.mediaQueryList.addEventListener) {\n this.mediaQueryList.addEventListener(\"change\", this.onChangeEventListener);\n } else if (this.mediaQueryList.addListener) {\n this.mediaQueryList.addListener(this.onChangeEventListener);\n } else if (this.mediaQueryList.onchange) {\n this.mediaQueryList.onchange = this.onChangeEventListener;\n } else {\n throw new Error(\"Cannot subscribe to MediaQueryList change event\");\n }\n this.onChangeEventListener(this.mediaQueryList);\n }\n\n @action.bound\n onChangeEventListener = (mQueryEventData: IMediaQueryData) => {\n let dataWillChange = this.isMatched !== mQueryEventData.matches;\n this.isMatched = mQueryEventData.matches;\n if (this.onChangeConstructorParam && dataWillChange) {\n this.onChangeConstructorParam(mQueryEventData.matches);\n }\n };\n\n dispose() {\n if (this.mediaQueryList.removeEventListener) {\n this.mediaQueryList.removeEventListener(\"change\", this.onChangeEventListener);\n } else if (this.mediaQueryList.removeListener) {\n this.mediaQueryList.removeListener(this.onChangeEventListener);\n } else if (this.mediaQueryList.onchange) {\n this.mediaQueryList.onchange = undefined;\n }\n }\n}\n","import { ServiceBase } from '../ServiceBase';\nimport { IServiceFactoryExtended } from '../service-factory-extended.interface';\nimport { MediaQueryListener } from \"./media-query-listener\";\nimport { mediaQueries } from \"./media-queries\";\nimport { IMediaQueryService, IMediaQueriesGeneric } from \"./media-queries.interface\";\nimport {action, makeObservable, observable} from 'mobx';\n\ntype IMediaListeners = IMediaQueriesGeneric<MediaQueryListener>;\n\nexport class MediaQueryService extends ServiceBase implements IMediaQueryService {\n private mediaQueryListeners: IMediaListeners;\n\n @observable.ref\n public lastMediaChange = new Date();\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n makeObservable(this);\n\n const tempRecords = {};\n (Object.keys(mediaQueries) as (keyof IMediaListeners)[]).forEach(mediaType => {\n tempRecords[mediaType] = new MediaQueryListener(mediaQueries[mediaType], this.updateLastMediaChange.bind(this));\n });\n this.mediaQueryListeners = tempRecords as IMediaListeners;\n }\n\n @action.bound\n updateLastMediaChange() {\n this.lastMediaChange = new Date();\n }\n\n get xs() {\n return this.mediaQueryListeners.xs.isMatched;\n }\n get sAndBelow() {\n return this.mediaQueryListeners.sAndBelow.isMatched;\n }\n get sExact() {\n return this.mediaQueryListeners.sExact.isMatched;\n }\n get sAndAbove() {\n return this.mediaQueryListeners.sAndAbove.isMatched;\n }\n get mAndBelow() {\n return this.mediaQueryListeners.mAndBelow.isMatched;\n }\n get mExact() {\n return this.mediaQueryListeners.mExact.isMatched;\n }\n get mAndAbove() {\n return this.mediaQueryListeners.mAndAbove.isMatched;\n }\n get lAndBelow() {\n return this.mediaQueryListeners.lAndBelow.isMatched;\n }\n get lExact() {\n return this.mediaQueryListeners.lExact.isMatched;\n }\n get lAndAbove() {\n return this.mediaQueryListeners.lAndAbove.isMatched;\n }\n get xlAndBelow() {\n return this.mediaQueryListeners.xlAndBelow.isMatched;\n }\n get xlExact() {\n return this.mediaQueryListeners.xlExact.isMatched;\n }\n get xlAndAbove() {\n return this.mediaQueryListeners.xlAndAbove.isMatched;\n }\n get xxl() {\n return this.mediaQueryListeners.xxl.isMatched;\n }\n get portrait() {\n return this.mediaQueryListeners.portrait.isMatched;\n }\n get landscape() {\n return this.mediaQueryListeners.landscape.isMatched;\n }\n get lowHeight() {\n return this.mediaQueryListeners.lowHeight.isMatched;\n }\n get veryLowHeight() {\n return this.mediaQueryListeners.veryLowHeight.isMatched;\n }\n\n get hover() {\n return this.mediaQueryListeners.hover.isMatched;\n }\n get hoverNone() {\n return this.mediaQueryListeners.hoverNone.isMatched;\n }\n\n get anyHover() {\n return this.mediaQueryListeners.anyHover.isMatched;\n }\n get anyHoverNone() {\n return this.mediaQueryListeners.anyHoverNone.isMatched;\n }\n\n get pointer() {\n return this.mediaQueryListeners.pointer.isMatched;\n }\n get pointerFine() {\n return this.mediaQueryListeners.pointerFine.isMatched;\n }\n get pointerCoarse() {\n return this.mediaQueryListeners.pointerCoarse.isMatched;\n }\n get pointerNone() {\n return this.mediaQueryListeners.pointerNone.isMatched;\n }\n\n get anyPointer() {\n return this.mediaQueryListeners.anyPointer.isMatched;\n }\n get anyPointerFine() {\n return this.mediaQueryListeners.anyPointerFine.isMatched;\n }\n get anyPointerCoarse() {\n return this.mediaQueryListeners.anyPointerCoarse.isMatched;\n }\n get anyPointerNone() {\n return this.mediaQueryListeners.anyPointerNone.isMatched;\n }\n}\n","import {IToolsService} from \"./tools.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport { v4 as uuidv4 } from 'uuid';\n\nexport class ToolsService extends ServiceBase implements IToolsService{\n getGuid(): string {\n return uuidv4();\n }\n\n isGuid(testedValue: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(testedValue);\n }\n\n getHash(value: object | string): number {\n let hash = 0;\n \n const strValue = JSON.stringify(value);\n if (strValue.length === 0)\n return hash;\n\n for (let i = 0; i < strValue.length; i++) {\n let char = strValue.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n\n return hash;\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {IUserGameOrientation, IUserGameOrientationService} from \"./user-game-orientation.service.interface\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {Check} from \"@sparkware/app-utils\";\n\nconst GAME_GROUP_COOKIE = \"GameGroup\";\n\nexport class UserGameOrientationService extends ServiceBase implements IUserGameOrientationService {\n\n @observable.ref\n public gameGroup: IUserGameOrientation = null;\n\n constructor(services: IServiceFactoryExtended){\n super(services);\n\n makeObservable(this);\n\n this._updateUserGameOrientation();\n\n this.reaction( () => this.services.user.isAuthorized,\n (isAuthorized) => isAuthorized && this._updateUserGameOrientation()\n )\n }\n\n @action.bound\n private _setUserOrientation(orientation:IUserGameOrientation) {\n this.gameGroup = orientation;\n }\n\n private async _updateUserGameOrientation(): Promise<void> {\n const userGameOrientationEnableConfig = this.services.configuration.servicesConfigs.User.enableUserGameOrientation;\n const enabled = Check.isNullOrUndefined(userGameOrientationEnableConfig) ? false : userGameOrientationEnableConfig;\n if(!enabled) {\n return;\n }\n\n const gameGroupCookie = this.services.cookies.getCookie(GAME_GROUP_COOKIE);\n if (gameGroupCookie){\n this._setUserOrientation(JSON.parse(gameGroupCookie));\n }\n\n if(this.services.user.isAuthorized) {\n let gameOrientation: IUserGameOrientation = await this.services.api.userController.getUserGameOrientation();\n if (gameOrientation?.groupId) {\n this._setUserOrientation(gameOrientation);\n this._setGameOrientationCookie(gameOrientation);\n }\n }\n }\n\n private _setGameOrientationCookie(orientation:IUserGameOrientation){\n let expirationDate:Date = new Date();\n expirationDate.setDate(expirationDate.getDate() + 1);\n this.services.cookies.createCookie(GAME_GROUP_COOKIE,JSON.stringify(orientation), expirationDate);\n }\n}","import {IServiceFactoryExtended} from '../service-factory-extended.interface';\n\nexport class ApiControllerBase {\n constructor(private _services: IServiceFactoryExtended) {\n }\n\n protected _getRoutePrefix() {\n return '';\n }\n\n private _buildApiRoute(route: string) {\n let url = `${this._getRoutePrefix()}${route}`;\n if(url.startsWith('/')) {\n return url;\n }\n return '/' + url;\n }\n\n protected _isUSRegulation() {\n return this._services.regulation.isUSRegulation();\n }\n\n\n protected _httpPost<TResponse>(route: string, requestData?: unknown): Promise<TResponse> {\n return this._services.sdk.httpPost(this._buildApiRoute(route), requestData);\n }\n\n protected _httpGet<TResponse>(route: string, requestData?: unknown): Promise<TResponse> {\n return this._services.sdk.httpGet(this._buildApiRoute(route), requestData);\n }\n}","import {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {ApiControllerBase} from './api-controller-base';\n\nexport type BonusManagerController_GetEligiblePromotionCodesResponse = Array<string>;\n\nexport class BonusManagerController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/bonusManager/'\n\t}\n\tgetEligiblePromotionCodes(): Promise<BonusManagerController_GetEligiblePromotionCodesResponse> {\n\t\treturn this._httpPost('getEligiblePromotionCodes');\n\t}\n\n}\n\nexport type FeatureToggleManagementController_SetFeatureCounterRequest = {\n\tFeatureID: number;\n};\n\nexport type FeatureToggleManagementController_GetFeaturesDataForCIDResponse = Array<{\n\tFeatureID: number;\n\tDisplayCount: number;\n}>;\n\nexport class FeatureToggleManagementController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/featureToggleManagement/'\n\t}\n\tsetFeatureCounter(request: FeatureToggleManagementController_SetFeatureCounterRequest): Promise<void> {\n\t\treturn this._httpPost('setFeatureCounter', request);\n\t}\n\n\tgetFeaturesDataForCID(): Promise<FeatureToggleManagementController_GetFeaturesDataForCIDResponse> {\n\t\treturn this._httpPost('getFeaturesData');\n\t}\n\n}\n\nexport type GamblingSessionController_StartGamblingSessionRequest = {\n\tcorrelationId: string;\n\tlossLimitAmount: number;\n\tsessionDurationLimitInSeconds: number;\n\treminderIntervalInSeconds: number;\n\trestrictionPeriodInSeconds: number;\n};\n\nexport type GamblingSessionController_StartGamblingSessionResponse = {\n\tgamblingSessionId: string;\n\terrorCode: number;\n\tsessionRestrictionExpirationDate?: number;\n};\n\nexport type GamblingSessionController_CreateGamblingSessionResponse = {\n\tgamblingSessionId: string;\n\terrorCode: number;\n};\n\nexport class GamblingSessionController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/gamblingSession/'\n\t}\n\tstartGamblingSession(clientRequest: GamblingSessionController_StartGamblingSessionRequest): Promise<GamblingSessionController_StartGamblingSessionResponse> {\n\t\treturn this._httpPost('start', clientRequest);\n\t}\n\n\tcreateGamblingSession(): Promise<GamblingSessionController_CreateGamblingSessionResponse> {\n\t\treturn this._httpPost('create');\n\t}\n\n}\n\nexport type ABTestingController_GetTestsForAnonymousPlayerRequest = {\n\tanonymousPlayerId?: string;\n\tbrandId: number;\n\tsubBrandId: number;\n\tcountryCode: string;\n\tisMobile: boolean;\n};\n\nexport type ABTestingController_GetTestsForAnonymousPlayerResponse = {\n\tFeatures: Record<string, {\n\t\tTestId: number;\n\t\tGroupName: string;\n\t\tFeatureName: string;\n\t\tProperties: Record<string, any>;\n\t}>;\n\tAnonymousPlayerId: string;\n};\n\nexport class ABTestingController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/abTesting/'\n\t}\n\tgetTestsForAnonymousPlayer(request: ABTestingController_GetTestsForAnonymousPlayerRequest): Promise<ABTestingController_GetTestsForAnonymousPlayerResponse> {\n\t\treturn this._httpPost('getTestsForAnonymousPlayer', request);\n\t}\n\n}\n\nexport type InsightController_GetLiveCasinoGameRecommendationsForPlayerRequest = {\n\tengineType: number;\n};\n\nexport type InsightController_GetLiveCasinoGameRecommendationsForPlayerResponse = {\n\tEngine: string;\n\tGameTypes: Array<number>;\n\tErrorCode: number;\n\tErrorDescription: string;\n};\n\nexport type InsightController_GetCasinoRecommendedDynamicListsForPlayerRequest = {\n\tlistsIDs: Array<string>;\n};\n\nexport type InsightController_GetCasinoRecommendedDynamicListsForPlayerResponse = Record<number, number>;\n\nexport class InsightController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/insight/'\n\t}\n\tgetLiveCasinoGameRecommendationsForPlayer(request: InsightController_GetLiveCasinoGameRecommendationsForPlayerRequest): Promise<InsightController_GetLiveCasinoGameRecommendationsForPlayerResponse> {\n\t\treturn this._httpPost('getLiveCasinoGameRecommendationsForPlayer', request);\n\t}\n\n\tgetCasinoRecommendedDynamicListsForPlayer(req: InsightController_GetCasinoRecommendedDynamicListsForPlayerRequest): Promise<InsightController_GetCasinoRecommendedDynamicListsForPlayerResponse> {\n\t\treturn this._httpPost('getCasinoRecommendedDynamicLists', req);\n\t}\n\n}\n\nexport type LocationController_DetectUserIpRequest = {\n\tPreviousIpAddress?: string;\n\tPreviousIpAddresses: Array<string>;\n};\n\nexport type LocationController_DetectUserIpResponse = {\n\tCurrentIpAddress: string;\n};\n\nexport type LocationController_DetectUserIpV2Request = {\n\tPreviousIpAddresses: string;\n};\n\nexport type LocationController_DetectUserIpV2Response = {\n\tEncryptedIpAddress: string;\n\tChangeDetected: boolean;\n\tPreviousIP: string;\n\tCurrentIP: string;\n};\n\nexport class LocationController extends ApiControllerBase {\n\tgetCountryByIP(): Promise<any> {\n\t\treturn this._httpPost('cgpapi/location/GetCountryByIP');\n\t}\n\n\tgetCountryByIPOld(): Promise<any> {\n\t\treturn this._httpPost('api/GetCountryByIP');\n\t}\n\n\tdetectUserIp(request: LocationController_DetectUserIpRequest): Promise<LocationController_DetectUserIpResponse> {\n\t\treturn this._httpPost('cgpapi/location/ipDetection', request);\n\t}\n\n\tdetectUserIpV2(request: LocationController_DetectUserIpV2Request): Promise<LocationController_DetectUserIpV2Response> {\n\t\treturn this._httpPost('cgpapi/location/v2/ipDetection', request);\n\t}\n\n}\n\nexport type NetPositionController_InitializeNetPositionForGameTypeRequest = {\n\tGameType: number;\n};\n\nexport type NetPositionController_InitializeNetPositionForGameTypeResponse = {\n\tcode: number;\n\tmessage: string;\n\tresponse_time: number;\n\tErrorCode: number;\n\tErrorDescription: string;\n};\n\nexport class NetPositionController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/netPosition/'\n\t}\n\tinitializeNetPositionForGameType(request: NetPositionController_InitializeNetPositionForGameTypeRequest): Promise<NetPositionController_InitializeNetPositionForGameTypeResponse> {\n\t\treturn this._httpPost('initialize', request);\n\t}\n\n}\n\nexport type OMGController_GetAwaitingMessagesResponse = {\n\tMessagesDetails: string;\n\tMessagesJSON: any;\n};\n\nexport class OMGController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/omg/'\n\t}\n\tgetAwaitingMessages(): Promise<OMGController_GetAwaitingMessagesResponse> {\n\t\treturn this._httpPost('GetAwaitingMessages');\n\t}\n\n}\n\nexport type OpenSessionsController_GetOpenSessionsRequest = {\n\trealGameTypes?: Array<number>;\n\tfreePlayGameTypes?: Array<number>;\n\topenSessionsKind: number;\n};\n\nexport type OpenSessionsController_GetOpenSessionsResponse = {\n\tsessionDetails: Array<{\n\t\tCredit: number;\n\t\tGameTypeID: number;\n\t\tSessionID: string;\n\t\tFreePlayID?: string;\n\t\tTotalBets?: number;\n\t\tTotalWins?: number;\n\t\tUpdatedGameSessionLimit?: number;\n\t\tIntervalReminderInMinutes?: number;\n\t\tRequestedTimeLimitInMinutes?: number;\n\t\tGameStartDate?: string;\n\t\tRestrictionPeriodInMinutes?: number;\n\t\tRegulationAdditionalData: any;\n\t}>;\n};\n\nexport class OpenSessionsController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/openSessions/'\n\t}\n\tgetOpenSessions(request: OpenSessionsController_GetOpenSessionsRequest): Promise<OpenSessionsController_GetOpenSessionsResponse> {\n\t\treturn this._httpPost('getOpenSessions', request);\n\t}\n\n}\n\nexport type RestrictionRulerController_GetRestrictionActionsRequest = {\n\tRequestedAction: string;\n};\n\nexport type RestrictionRulerController_GetRestrictionActionsResponse = {\n\tactions: Array<{\n\t\ttype: string;\n\t\tactionData: any;\n\t\torderId: number;\n\t}>;\n\tErrorCode: number;\n\tErrorDescription: string;\n};\n\nexport type RestrictionRulerController_NotifyRestrictionActionPerformedRequest = {\n\trestrictionRuleActionType: string;\n\tactionData: string;\n};\n\nexport class RestrictionRulerController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/restrictionRuler/'\n\t}\n\tgetRestrictionActions(request: RestrictionRulerController_GetRestrictionActionsRequest): Promise<RestrictionRulerController_GetRestrictionActionsResponse> {\n\t\treturn this._httpPost('getRestrictionActions', request);\n\t}\n\n\tnotifyRestrictionActionPerformed(clientRequest: RestrictionRulerController_NotifyRestrictionActionPerformedRequest): Promise<void> {\n\t\treturn this._httpPost('notifyRestrictionActionPerformed', clientRequest);\n\t}\n\n}\n\nexport type RestrictionsController_GetAnonymousRestrictionsRequest = {\n\tBrandId: number;\n\tSubBrandId: number;\n\tClientVersion: string;\n\tProductPackage: number;\n\tFakeClientIP: string;\n};\n\nexport type RestrictionsController_GetAnonymousRestrictionsResponse = {\n\tRestrictionsByAction: Array<{\n\t\tExtensionData: {\n\t\t};\n\t\tActionId: number;\n\t\tActionName: string;\n\t\tEntities: Array<{\n\t\t\tExtensionData: {\n\t\t\t};\n\t\t\tDisplayId: boolean;\n\t\t\tEntityId: number;\n\t\t\tEntityName: string;\n\t\t\tValues: Array<{\n\t\t\t\tExtensionData: {\n\t\t\t\t};\n\t\t\t\tCreationDate: string;\n\t\t\t\tExpirationDate?: string;\n\t\t\t\tReasonId: number;\n\t\t\t\tSecondsToExpire?: number;\n\t\t\t\tTimingPeriodEndTimeUtc: string;\n\t\t\t\tTimingPeriodStartTimeUtc: string;\n\t\t\t\tValue: string;\n\t\t\t}>;\n\t\t}>;\n\t}>;\n};\n\nexport type RestrictionsController_SetCoolDownRestrictionRequest = {\n\tCoolDownTimeInSeconds: number;\n\tFakeClientIP?: string;\n};\n\nexport class RestrictionsController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/restrictions/'\n\t}\n\tgetAnonymousRestrictions(request: RestrictionsController_GetAnonymousRestrictionsRequest): Promise<RestrictionsController_GetAnonymousRestrictionsResponse> {\n\t\treturn this._httpPost('anonymousRestrictions', request);\n\t}\n\n\tsetCoolDownRestriction(request: RestrictionsController_SetCoolDownRestrictionRequest): Promise<string> {\n\t\treturn this._httpPost('setCoolDownRestriction', request);\n\t}\n\n}\n\nexport type ThirdPartyFreePlayController_GetAllVouchersResponse = {\n\tFreePlayBonusList: Array<{\n\t\tCompanyID: number;\n\t\tCurrencyCode: string;\n\t\tCurrentWinningAmount: number;\n\t\tCreationDate?: string;\n\t\tExpirationDate: string;\n\t\tFreePlayID: string;\n\t\tFreePlayTypeID: number;\n\t\tGameTypesIDs: Array<number>;\n\t\tAwardedFreePlayAmount: number;\n\t\tBonusStatus: number;\n\t\tFreeSpinsInfo?: {\n\t\t\tBetPerSpin: number;\n\t\t\tNumberOfAwardedFreeSpins: number;\n\t\t\tNumberOfFreeSpinsLeft: number;\n\t\t};\n\t\tVoucherInfo?: {\n\t\t\tRemainingFreePlayAmount: number;\n\t\t};\n\t\tNumberOfAwardedFreeSpins: number;\n\t\tNumberOfFreeSpinsLeft: number;\n\t\tBetPerSpin: number;\n\t}>;\n};\n\nexport class ThirdPartyFreePlayController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/freeplay/3rdparty/'\n\t}\n\tgetAllVouchers(): Promise<ThirdPartyFreePlayController_GetAllVouchersResponse> {\n\t\treturn this._httpPost('GetAllVouchers');\n\t}\n\n}\n\nexport type UserEligibilityController_DepositWidgetEligibilityRequest = {\n\tLoginCountry: string;\n\tStateID?: number;\n};\n\nexport type UserEligibilityController_DepositWidgetEligibilityResponse = {\n\tisEligible: boolean;\n\tineligibleReason: string;\n\terrorID: number;\n\terrorDescription: string;\n\thasErrors: boolean;\n};\n\nexport type UserEligibilityController_CashoutWidgetEligibilityRequest = {\n\tLoginCountry: string;\n\tStateID?: number;\n};\n\nexport type UserEligibilityController_CashoutWidgetEligibilityResponse = {\n\tisEligible: boolean;\n\tineligibleReason: string;\n\terrorID: number;\n\terrorDescription: string;\n\thasErrors: boolean;\n};\n\nexport type UserEligibilityController_TransactionHistoryWidgetEligibilityRequest = {\n\tLoginCountry: string;\n\tStateID?: number;\n};\n\nexport type UserEligibilityController_TransactionHistoryWidgetEligibilityResponse = {\n\tisEligible: boolean;\n\tineligibleReason: string;\n\terrorID: number;\n\terrorDescription: string;\n\thasErrors: boolean;\n};\n\nexport class UserEligibilityController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/userEligibility/'\n\t}\n\tdepositWidgetEligibility(request: UserEligibilityController_DepositWidgetEligibilityRequest): Promise<UserEligibilityController_DepositWidgetEligibilityResponse> {\n\t\treturn this._httpPost('depositWidget', request);\n\t}\n\n\tcashoutWidgetEligibility(request: UserEligibilityController_CashoutWidgetEligibilityRequest): Promise<UserEligibilityController_CashoutWidgetEligibilityResponse> {\n\t\treturn this._httpPost('cashoutWidget', request);\n\t}\n\n\ttransactionHistoryWidgetEligibility(request: UserEligibilityController_TransactionHistoryWidgetEligibilityRequest): Promise<UserEligibilityController_TransactionHistoryWidgetEligibilityResponse> {\n\t\treturn this._httpPost('transactionHistoryWidget', request);\n\t}\n\n}\n\nexport type GameController_GetGameTokenRequest = {\n\tgameTypeId: number;\n\tregulationId: number;\n\tisMobile: boolean;\n\tisHybridEmbedded: boolean;\n\tcurrentRoute: string;\n\tcurrencyCode: string;\n\tlanguageCode: string;\n\trefreshToken: string;\n\tproductPackage: number;\n\tGrsData?: string;\n\tWrapperState?: string;\n\tisSupportHTML5?: boolean;\n\tisSupportFlash?: boolean;\n\tGameState?: string;\n\tAdditionalState?: string;\n\tPreloaderState?: string;\n\tGameTechnology?: string;\n\tGrsEnvironment?: string;\n\trealityCheckIntervalInMinutes?: number;\n\tsessionTimerInSeconds?: number;\n\tgameRoundId?: string;\n\tgameRoundDate?: string;\n\treconnectionGameSessionId?: string;\n\trequestedGameLimitAmount?: number;\n\trequestedTimeLimitInMinutes?: number;\n\trestrictionPeriodInMinutes?: number;\n\tintervalReminderInMinutes?: number;\n\tFakeClientIP?: string;\n\tuseEvolutionNewIntegration?: boolean;\n\tuseAdapter?: boolean;\n\tvendorEnvironment?: string;\n\tisFreePlay?: boolean;\n\tusePariplayAdapterIntegration?: boolean;\n\tusePlayNGoNewAdapterIntegration?: boolean;\n\tjackpotAmount?: number;\n};\n\nexport type GameController_GetGameTokenResponse = {\n\tToken: string;\n\tUserHasPendingActions: boolean;\n\tRestrictions: Array<{\n\t\tExtensionData: {\n\t\t};\n\t\tActionId: number;\n\t\tRestrictedEntities: Array<{\n\t\t\tExtensionData: {\n\t\t\t};\n\t\t\tEntityTypeId: number;\n\t\t\tReasonId: number;\n\t\t\tRestrictedValues: Array<string>;\n\t\t\tSecondsToExpire: number;\n\t\t}>;\n\t}>;\n\tNightLimitExpirationDate?: string;\n\tLugasActiveOnAnotherOperator: boolean;\n\tLugasCooldown: boolean;\n};\n\nexport type GameController_OpenRealGameRequest = {\n\tgameTypeId: number;\n\tregulationId: number;\n\tisMobile: boolean;\n\tisHybridEmbedded: boolean;\n\tcurrentRoute: string;\n\tcurrencyCode: string;\n\tlanguageCode: string;\n\trefreshToken: string;\n\tproductPackage: number;\n\tGrsData?: string;\n\tWrapperState?: string;\n\tisSupportHTML5?: boolean;\n\tisSupportFlash?: boolean;\n\tGameState?: string;\n\tAdditionalState?: string;\n\tPreloaderState?: string;\n\tGameTechnology?: string;\n\tGrsEnvironment?: string;\n\trealityCheckIntervalInMinutes?: number;\n\tsessionTimerInSeconds?: number;\n\tgameRoundId?: string;\n\tgameRoundDate?: string;\n\treconnectionGameSessionId?: string;\n\trequestedGameLimitAmount?: number;\n\trequestedTimeLimitInMinutes?: number;\n\trestrictionPeriodInMinutes?: number;\n\tintervalReminderInMinutes?: number;\n\tFakeClientIP?: string;\n\tuseEvolutionNewIntegration?: boolean;\n\tuseAdapter?: boolean;\n\tvendorEnvironment?: string;\n\tisFreePlay?: boolean;\n\tusePariplayAdapterIntegration?: boolean;\n\tusePlayNGoNewAdapterIntegration?: boolean;\n\tjackpotAmount?: number;\n};\n\nexport type GameController_OpenAnonymousGameRequest = {\n\tgameTypeId: number;\n\tregulationId: number;\n\tisMobile: boolean;\n\tisHybridEmbedded: boolean;\n\tcurrentRoute: string;\n\tcurrencyCode: string;\n\tlanguageCode: string;\n\trefreshToken: string;\n\tproductPackage: number;\n\tGrsData?: string;\n\tWrapperState?: string;\n\tisSupportHTML5?: boolean;\n\tisSupportFlash?: boolean;\n\tGameState?: string;\n\tAdditionalState?: string;\n\tPreloaderState?: string;\n\tGameTechnology?: string;\n\tGrsEnvironment?: string;\n\trealityCheckIntervalInMinutes?: number;\n\tsessionTimerInSeconds?: number;\n\tgameRoundId?: string;\n\tgameRoundDate?: string;\n\treconnectionGameSessionId?: string;\n\trequestedGameLimitAmount?: number;\n\trequestedTimeLimitInMinutes?: number;\n\trestrictionPeriodInMinutes?: number;\n\tintervalReminderInMinutes?: number;\n\tFakeClientIP?: string;\n\tuseEvolutionNewIntegration?: boolean;\n\tuseAdapter?: boolean;\n\tvendorEnvironment?: string;\n\tisFreePlay?: boolean;\n\tusePariplayAdapterIntegration?: boolean;\n\tusePlayNGoNewAdapterIntegration?: boolean;\n\tjackpotAmount?: number;\n};\n\nexport type GameController_OpenGameHistoryRequest = {\n\tgameTypeId: number;\n\tregulationId: number;\n\tisMobile: boolean;\n\tisHybridEmbedded: boolean;\n\tcurrentRoute: string;\n\tcurrencyCode: string;\n\tlanguageCode: string;\n\trefreshToken: string;\n\tproductPackage: number;\n\tGrsData?: string;\n\tWrapperState?: string;\n\tisSupportHTML5?: boolean;\n\tisSupportFlash?: boolean;\n\tGameState?: string;\n\tAdditionalState?: string;\n\tPreloaderState?: string;\n\tGameTechnology?: string;\n\tGrsEnvironment?: string;\n\trealityCheckIntervalInMinutes?: number;\n\tsessionTimerInSeconds?: number;\n\tgameRoundId?: string;\n\tgameRoundDate?: string;\n\treconnectionGameSessionId?: string;\n\trequestedGameLimitAmount?: number;\n\trequestedTimeLimitInMinutes?: number;\n\trestrictionPeriodInMinutes?: number;\n\tintervalReminderInMinutes?: number;\n\tFakeClientIP?: string;\n\tuseEvolutionNewIntegration?: boolean;\n\tuseAdapter?: boolean;\n\tvendorEnvironment?: string;\n\tisFreePlay?: boolean;\n\tusePariplayAdapterIntegration?: boolean;\n\tusePlayNGoNewAdapterIntegration?: boolean;\n\tjackpotAmount?: number;\n};\n\nexport type GameController_GetGameSessionDataRequest = {\n\tgameTypeId: number;\n\tuseFreePlayUtilities?: boolean;\n};\n\nexport type GameController_GetGameSessionDataResponse = {\n\tTransactionId: string;\n\tGameSessionId: string;\n\tLimitPercentageReminder: boolean;\n\tOriginalGameLimit: number;\n\tRequestedTimeLimit: number;\n\tSessionStartDate: string;\n\tTotalBets: number;\n\tTotalWins: number;\n\tUpdatedGameSessionLimit: number;\n\tRegulationData: any;\n\tPlayerBalance: number;\n};\n\nexport type GameController_IncreaseGameSessionLimitRequest = {\n\ttransactionId: string;\n\tamount: number;\n\tticketId: number;\n};\n\nexport class GameController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/game/'\n\t}\n\tgetGameToken(openGameParams: GameController_GetGameTokenRequest): Promise<GameController_GetGameTokenResponse> {\n\t\treturn this._httpPost('GetGameToken', openGameParams);\n\t}\n\n\topenRealGame(openGameParams: GameController_OpenRealGameRequest): Promise<any> {\n\t\treturn this._httpPost('OpenRealGame', openGameParams);\n\t}\n\n\topenAnonymousGame(openGameParams: GameController_OpenAnonymousGameRequest): Promise<any> {\n\t\treturn this._httpPost('OpenAnonymousGame', openGameParams);\n\t}\n\n\topenGameHistory(openGameParams: GameController_OpenGameHistoryRequest): Promise<any> {\n\t\treturn this._httpPost('OpenGameHistory', openGameParams);\n\t}\n\n\tgetGameSessionData(request: GameController_GetGameSessionDataRequest): Promise<GameController_GetGameSessionDataResponse> {\n\t\treturn this._httpPost('GetGameSessionData', request);\n\t}\n\n\tincreaseGameSessionLimit(request: GameController_IncreaseGameSessionLimitRequest): Promise<any> {\n\t\treturn this._httpPost('increaseGameSessionLimit', request);\n\t}\n\n}\n\nexport type HistoryController_GetHistoryRequest = {\n\tpageNumber: number;\n\tpageSize?: number;\n\tfromLastDays: number;\n\trequestKey?: string;\n\tminDate?: string;\n\tmaxDate?: string;\n};\n\nexport type HistoryController_GetHistoryResponse = {\n\tGameHistoryData: Array<{\n\t\tAdditionalData: any;\n\t\tAmountCurrencyISOCode: string;\n\t\tAvailableMoneyPerOffering: number;\n\t\tAllowedPlatformType: string;\n\t\tBetAmount: number;\n\t\tDate: string;\n\t\tTimeSincePlay: string;\n\t\tDateInTimeZone?: string;\n\t\tFreePlayCurrentAmount?: number;\n\t\tFreePlayWinningAmount?: number;\n\t\tGameId: string;\n\t\tGameTypeId: number;\n\t\tOriginalWinningsAmount?: number;\n\t\tProductPackageID: number;\n\t\tProfitAmount: number;\n\t\tSubBrandId?: number;\n\t\tVatBetFee: number;\n\t\tVendorName: string;\n\t\tVendorId: number;\n\t\tFreePlayReachedMaxWinCap?: boolean;\n\t\tCompanyName: string;\n\t\tGameGroupId: number;\n\t\tIsSupportDetailedHistory: boolean;\n\t\tIsBigWin: boolean;\n\t}>;\n\tPagingData: Array<{\n\t\tRequestKey: string;\n\t\tPageNumber: number;\n\t\tMinDate: string;\n\t\tMaxDate: string;\n\t}>;\n};\n\nexport type HistoryController_GetMigratedHistoryRequest = {\n\tlimit?: number;\n\toffset: number;\n\tfromLastDays: number;\n};\n\nexport type HistoryController_GetMigratedHistoryResponse = {\n\tGameHistoryData: Array<{\n\t\tCurrency: string;\n\t\tAvailableMoneyPerOffering: number;\n\t\tAllowedPlatformType: string;\n\t\tBetAmount: number;\n\t\tDate: string;\n\t\tTimeSincePlay: string;\n\t\tGameId: string;\n\t\tGameTypeId: string;\n\t\tGameName: string;\n\t\tProductPackageID: number;\n\t\tProfitAmount: number;\n\t\tSubBrandId?: number;\n\t\tGameGroupId: number;\n\t}>;\n\tPagingData: {\n\t\tPageNumber: number;\n\t\tPageSize: number;\n\t};\n};\n\nexport type HistoryController_GetTippingHistoryRequest = {\n\tfromLastDays: number;\n\tminDate?: string;\n\tmaxDate?: string;\n};\n\nexport type HistoryController_GetTippingHistoryResponse = {\n\tTipHistory: Array<{\n\t\tGameTypeID: number;\n\t\tTipID: number;\n\t\tTipDateTime: string;\n\t\tTipAmount: number;\n\t\tAvailableBalanceAfterAction: number;\n\t\tCurrencyCode: string;\n\t}>;\n\tMinDate: string;\n\tMaxDate: string;\n};\n\nexport type HistoryController_GetGameSessionHistoryRequest = {\n\tpageNumber: number;\n\tpageSize?: number;\n\tfromLastDays: number;\n\trequestKey?: string;\n\tminDate?: string;\n\tmaxDate?: string;\n};\n\nexport type HistoryController_GetGameSessionHistoryResponse = {\n\tGameHistoryData: Array<{\n\t\tCurrencyCodeISO3: string;\n\t\tGameGroupId?: number;\n\t\tGameSessionId: string;\n\t\tGameTypeId?: number;\n\t\tSessionEndDateTime: string;\n\t\tSessionBalance: number;\n\t\tTotalBets: number;\n\t\tTotalWins: number;\n\t\tVendorName: string;\n\t\tVendorId: number;\n\t\tCompanyName: string;\n\t}>;\n\tPagingData: Array<{\n\t\tRequestKey: string;\n\t\tPageNumber: number;\n\t\tMinDate: string;\n\t\tMaxDate: string;\n\t}>;\n};\n\nexport class HistoryController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/history/'\n\t}\n\tgetHistory(req: HistoryController_GetHistoryRequest): Promise<HistoryController_GetHistoryResponse> {\n\t\treturn this._httpPost('getGammingHistory', req);\n\t}\n\n\tgetMigratedHistory(req: HistoryController_GetMigratedHistoryRequest): Promise<HistoryController_GetMigratedHistoryResponse> {\n\t\treturn this._httpPost('getMigratedGammingHistory', req);\n\t}\n\n\tgetTippingHistory(req: HistoryController_GetTippingHistoryRequest): Promise<HistoryController_GetTippingHistoryResponse> {\n\t\treturn this._httpPost('getTippingHistory', req);\n\t}\n\n\tgetGameSessionHistory(req: HistoryController_GetGameSessionHistoryRequest): Promise<HistoryController_GetGameSessionHistoryResponse> {\n\t\treturn this._httpPost('getSessionHistory', req);\n\t}\n\n}\n\nexport type UserController_GetRealityCheckDataResponse = {\n\tWagerAmount?: number;\n\tTotalNetLoss?: number;\n\tErrorDescription: string;\n};\n\nexport type UserController_UpdateRealityCheckReminderRequest = {\n\trealityCheckIntervalMin: number;\n};\n\nexport type UserController_ValidateGeoLocationRequest = {\n\tgeoLocationEncryptedResponse: string;\n\tisPeriodicFlow: boolean;\n\terrorCode?: string;\n\terrorMsg?: string;\n\tfailedLocationReason?: number;\n};\n\nexport type UserController_ValidateGeoLocationResponse = {\n\tNextIntervalInSeconds?: number;\n};\n\nexport type UserController_InitGeoRetryResponse = {\n\tGeoComplyLicense: string;\n\tGeoComplyWebLicense: string;\n\tLocationTransactionToken: string;\n\tExtensionData: {\n\t};\n\tErrorCode: number;\n\tErrorDescription: string;\n};\n\nexport type UserController_GetUserGameOrientationResponse = {\n\tgroupId?: number;\n\tgroupName: string;\n};\n\nexport type UserController_SelfExclusionPanicRequest = {\n\ttimezoneOffset: number;\n\tproductPackage: number;\n};\n\nexport type UserController_SelfExclusionPanicResponse = {\n\terrorID: number;\n\terrorDescription: string;\n\thasErrors: boolean;\n};\n\nexport type UserController_GetPlayerLimitsResponse = {\n\tdisplayableLimits: Array<{\n\t\tlimitName: string;\n\t\tlimitPeriods: Array<{\n\t\t\tvalue: number;\n\t\t\ttypeId: number;\n\t\t\tunit: string;\n\t\t\tcurrency: string;\n\t\t}>;\n\t}>;\n\tErrorCode: number;\n\tErrorDescription: string;\n};\n\nexport type UserController_GetPendingActionsRequest = {\n\tpackageId?: number;\n\teventTypeId?: number;\n\tplayModeId?: number;\n};\n\nexport type UserController_GetPendingActionsResponse = {\n\tPendingActions: Array<{\n\t\tId: number;\n\t\tPlayModeId: number;\n\t\tPriority?: number;\n\t\tReasonId: number;\n\t\tEventTypeId: number;\n\t\tEventTypeName: string;\n\t}>;\n};\n\nexport type UserController_GetLastBetActivityRequest = {\n\tcorrelationId: string;\n};\n\nexport type UserController_GetLastBetActivityResponse = {\n\tLastBetActivity?: number;\n};\n\nexport class UserController extends ApiControllerBase {\n\tprotected _getRoutePrefix() {\n\t\treturn '/cgpapi/user/'\n\t}\n\tgetRealityCheckData(): Promise<UserController_GetRealityCheckDataResponse> {\n\t\treturn this._httpPost('realityCheckData');\n\t}\n\n\tupdateRealityCheckReminder(request: UserController_UpdateRealityCheckReminderRequest): Promise<any> {\n\t\treturn this._httpPost('updateRealityCheckData', request);\n\t}\n\n\tvalidateGeoLocation(request: UserController_ValidateGeoLocationRequest): Promise<UserController_ValidateGeoLocationResponse> {\n\t\treturn this._httpPost('validateGeoLocation', request);\n\t}\n\n\tinitGeoRetry(): Promise<UserController_InitGeoRetryResponse> {\n\t\treturn this._httpPost('initGeoRetry');\n\t}\n\n\tgetUserGameOrientation(): Promise<UserController_GetUserGameOrientationResponse> {\n\t\treturn this._httpPost('getUserGameOrientation');\n\t}\n\n\tselfExclusionPanic(request: UserController_SelfExclusionPanicRequest): Promise<UserController_SelfExclusionPanicResponse> {\n\t\treturn this._httpPost('selfExclusionPanic', request);\n\t}\n\n\tgetPlayerLimits(): Promise<UserController_GetPlayerLimitsResponse> {\n\t\treturn this._httpPost('getPlayerLimits');\n\t}\n\n\tgetPendingActions(request: UserController_GetPendingActionsRequest): Promise<UserController_GetPendingActionsResponse> {\n\t\treturn this._httpPost('getPendingActions', request);\n\t}\n\n\tgetLastBetActivity(request: UserController_GetLastBetActivityRequest): Promise<UserController_GetLastBetActivityResponse> {\n\t\treturn this._httpPost('getLastBetActivity', request);\n\t}\n\n}\n\nexport class ApiService extends ServiceBase {\n\tconstructor(services: IServiceFactoryExtended) {\n\t\tsuper(services);\n\t\tthis.bonusManagerController = new BonusManagerController(services);\n\t\tthis.featureToggleManagementController = new FeatureToggleManagementController(services);\n\t\tthis.gamblingSessionController = new GamblingSessionController(services);\n\t\tthis.aBTestingController = new ABTestingController(services);\n\t\tthis.insightController = new InsightController(services);\n\t\tthis.locationController = new LocationController(services);\n\t\tthis.netPositionController = new NetPositionController(services);\n\t\tthis.oMGController = new OMGController(services);\n\t\tthis.openSessionsController = new OpenSessionsController(services);\n\t\tthis.restrictionRulerController = new RestrictionRulerController(services);\n\t\tthis.restrictionsController = new RestrictionsController(services);\n\t\tthis.thirdPartyFreePlayController = new ThirdPartyFreePlayController(services);\n\t\tthis.userEligibilityController = new UserEligibilityController(services);\n\t\tthis.gameController = new GameController(services);\n\t\tthis.historyController = new HistoryController(services);\n\t\tthis.userController = new UserController(services);\n\t}\n\treadonly bonusManagerController: BonusManagerController;\n\treadonly featureToggleManagementController: FeatureToggleManagementController;\n\treadonly gamblingSessionController: GamblingSessionController;\n\treadonly aBTestingController: ABTestingController;\n\treadonly insightController: InsightController;\n\treadonly locationController: LocationController;\n\treadonly netPositionController: NetPositionController;\n\treadonly oMGController: OMGController;\n\treadonly openSessionsController: OpenSessionsController;\n\treadonly restrictionRulerController: RestrictionRulerController;\n\treadonly restrictionsController: RestrictionsController;\n\treadonly thirdPartyFreePlayController: ThirdPartyFreePlayController;\n\treadonly userEligibilityController: UserEligibilityController;\n\treadonly gameController: GameController;\n\treadonly historyController: HistoryController;\n\treadonly userController: UserController;\n}\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\n\nconst TsrWithDropdownDefaultBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n font-size: 1.25rem;\n ${({theme}) => theme.font.presets.body};\n color: ${({theme}) => theme.colors.textMiddleDark};\n\n`;\n\nconst PcBox = styled(TsrWithDropdownDefaultBox)`\n width: 25vw;\n`;\n\nconst MobileBox = styled(TsrWithDropdownDefaultBox)`\n width: 82vw;\n @media ${({theme}) => `${theme.mediaQuery.landscape}`} {\n width: 56vw;\n }\n`;\n\nexport const TsrWithDropdownBox = styledByDevice(PcBox, MobileBox);","import styled from \"styled-components\";\n\nexport const TsrWithDropdownOptionSelectorBox = styled.div`\n max-width: 289px;\n margin: 0.5rem auto 0;\n\n @media ${({theme}) => `${theme.mediaQuery.lAndBelow} and ${theme.mediaQuery.landscape}`} {\n margin-bottom: 2rem;\n }\n`;","import styled from \"styled-components\";\nimport {DialogTextBox, dialogHighlightedTextMixin} from \"../../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const TsrWithDropdownMainTextDefaultBox = styled(DialogTextBox)`\n display: flex;\n\n > span:nth-of-type(2) {\n ${dialogHighlightedTextMixin}\n margin-left: 5px;\n }\n\n @media ${({theme}) => `${theme.mediaQuery.lAndBelow} and ${theme.mediaQuery.portrait}`} {\n flex-direction: column;\n\n > span:nth-of-type(2) {\n margin: 1rem 0 0 0;\n }\n }\n`;\n","import styled from \"styled-components\";\nimport {TsrWithDropdownMainTextDefaultBox} from \"./tsr-with-dropdown-main-text.default.box\";\n\nexport const TsrWithDropdownMainTextCasino777Box = styled(TsrWithDropdownMainTextDefaultBox)`\n > span:nth-of-type(2) {\n color: ${props => props.theme.colors.brandPrimary};\n }\n`","import {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {TsrWithDropdownMainTextDefaultBox} from \"./tsr-with-dropdown-main-text.default.box\";\nimport {TsrWithDropdownMainTextCasino777Box} from \"./tsr-with-dropdown-main-text.casino777.box\";\n\nexport const TsrWithDropdownMainTextBox = styledByTheme(TsrWithDropdownMainTextDefaultBox).forCasino777(TsrWithDropdownMainTextCasino777Box).apply();\n","import styled from \"styled-components\";\n\nexport const TsrWithDropdownSelectorContainerBox = styled.div`\n margin-top: 1.5rem;\n width: 100%;\n`;","import React, {ReactNode} from 'react';\nimport {TsrWithDropdownBox} from \"./boxes/tsr-with-dropdown.box\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {OrbitComponentWithState} from \"../../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {Select} from \"../../../basic-ui-components/form/select.component\";\nimport {TsrWithDropdownOptionSelectorBox} from \"./boxes/tsr-with-dropdown-option-selector.box\";\nimport {TsrWithDropdownMainTextBox} from \"./boxes/tsr-with-dropdown-main-text.box\";\nimport {TsrWithDropdownSelectorContainerBox} from \"./boxes/tsr-with-dropdown-selector-container.box\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\nimport {DISPLAY_MESSAGE_IDS} from \"../../../../common/const/casinofied-analytics-consts\";\nimport { TSR_TYPE, ITimeSpentReminderOptions } from '../../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/time-spent-reminder-options';\nimport {ModalDialogActionsComponent} from \"../../modal-dialog/modal-dialog-actions.component\";\nimport { DialogTextBox } from '../../modal-dialog/boxes/text/dialog-text.box';\nimport { AppIdentifiers, AreaType, ControlCenterOpenSource } from '@sparkware/uc-sdk-core';\nimport {ControlCenterDeeplink} from '@sparkware/uc-sdk-core';\nimport {observer} from \"mobx-react\";\n\nenum UK_TSR_OPTIONS {\n UK_TSR_RESUME_GAME_OPT = \"UK_TSR_RESUME_GAME_OPT\",\n UK_TSR_CONTINUE_OPT = \"UK_TSR_CONTINUE_OPT\",\n UK_TSR_STOP_REMINDERS_OPT = \"UK_TSR_STOP_REMINDERS_OPT\",\n UK_TSR_REVIEW_REMINDERS_OPT = \"UK_TSR_REVIEW_REMINDERS_OPT\",\n UK_TSR_HISTORY_OPT = \"UK_TSR_HISTORY_OPT\",\n UK_TSR_CLOSE_GAME_OPT = \"UK_TSR_CLOSE_GAME_OPT\",\n UK_TSR_LOGOUT_OPT = \"UK_TSR_LOGOUT_OPT\"\n}\n\nconst ELASTIC_CATEGORY: string = \"Client_RealityCheck_Detail\";\n\nconst TRACKING_UK_TSR_OPTION_NAMES: Record<UK_TSR_OPTIONS, string> = {\n [UK_TSR_OPTIONS.UK_TSR_RESUME_GAME_OPT]: \"ResumeGame\",\n [UK_TSR_OPTIONS.UK_TSR_CONTINUE_OPT]: \"Continue\",\n [UK_TSR_OPTIONS.UK_TSR_STOP_REMINDERS_OPT]: \"StopReminders\",\n [UK_TSR_OPTIONS.UK_TSR_REVIEW_REMINDERS_OPT]: \"ReviewReminders\",\n [UK_TSR_OPTIONS.UK_TSR_HISTORY_OPT]: \"ViewHistory\",\n [UK_TSR_OPTIONS.UK_TSR_CLOSE_GAME_OPT]: \"CloseGame\",\n [UK_TSR_OPTIONS.UK_TSR_LOGOUT_OPT]: \"LogOut\"\n};\n\nconst TSR_OPTIONS_BY_TYPE: Record<TSR_TYPE, UK_TSR_OPTIONS[]> = {\n [TSR_TYPE.SESSION_TIMER]: [\n UK_TSR_OPTIONS.UK_TSR_CONTINUE_OPT,\n UK_TSR_OPTIONS.UK_TSR_REVIEW_REMINDERS_OPT,\n UK_TSR_OPTIONS.UK_TSR_HISTORY_OPT,\n UK_TSR_OPTIONS.UK_TSR_LOGOUT_OPT\n ],\n [TSR_TYPE.GAME_TIMER]: [\n UK_TSR_OPTIONS.UK_TSR_RESUME_GAME_OPT,\n UK_TSR_OPTIONS.UK_TSR_STOP_REMINDERS_OPT,\n UK_TSR_OPTIONS.UK_TSR_HISTORY_OPT,\n UK_TSR_OPTIONS.UK_TSR_CLOSE_GAME_OPT\n ]\n};\n\nexport type ITimeSpentReminderComponentProps = ITimeSpentReminderOptions & TimeSpentReminderComponentBaseProps;\nexport interface TimeSpentReminderComponentBaseProps {\n dialogHandler: IModalDialogHandler;\n}\n\n\ninterface TimeSpentReminderComponentState {\n selectedOption: UK_TSR_OPTIONS;\n}\n\n@observer\nexport class TimeSpentReminderWithDropdownComponent extends OrbitComponentWithState<ITimeSpentReminderComponentProps, TimeSpentReminderComponentState> {\n\n private _businessCorrelationId: string;\n\n constructor(props: ITimeSpentReminderComponentProps) {\n super(props);\n\n this.state = {\n selectedOption: UK_TSR_OPTIONS.UK_TSR_RESUME_GAME_OPT\n };\n }\n\n componentDidMount() {\n super.componentDidMount();\n this._businessCorrelationId = this.services.tools.getGuid();\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: this._businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.timeSpentReminder,\n displayMessageName: 'TimeSpentReminder'\n });\n }\n\n private _renderLoggedInText = (): ReactNode => {\n const playingTimeWithoutUnits = this.props.playingTime.toHoursAndMinutesString();\n //Temporary hack to also display 'h' and 'm', should probably modify TimeSpan class to support this\n const playingTime = `${playingTimeWithoutUnits.substring(0, 2)}h${playingTimeWithoutUnits.substring(2)}m`;\n return (\n <TsrWithDropdownMainTextBox className={\"cy-uk-tsr-main-text-box\"}>\n <span>{this.services.translation.translate('TSR_SESSION_TIME_TEXT')}</span>\n <span>{playingTime}</span>\n </TsrWithDropdownMainTextBox>\n );\n };\n\n private _renderSelectorContainer = (): ReactNode => {\n return (\n <TsrWithDropdownSelectorContainerBox className={'cy-reality-check-options'}>\n <DialogTextBox>{this.services.translation.translate('TSR_SUBTEXT')}</DialogTextBox>\n {this._renderSelect()}\n <ModalDialogActionsComponent primaryAction={{\n text: this.services.translation.translate('TSR_CONFIRM'),\n onClick: this._executeAction\n }} />\n </TsrWithDropdownSelectorContainerBox>\n );\n };\n\n private _renderSelect = (): ReactNode => {\n return (\n <TsrWithDropdownOptionSelectorBox>\n <Select\n className={'cy-drop-down-box'}\n value={this.state.selectedOption}\n onChange={e => this._updateSelection(e.target.value as UK_TSR_OPTIONS)}\n width=\"100%\"\n >\n {Object.values(TSR_OPTIONS_BY_TYPE[this.props.timerType]).map(tsrOption =>\n <option value={tsrOption}\n key={tsrOption}>\n {this.services.translation.translate(tsrOption)}\n </option>\n )}\n </Select>\n </TsrWithDropdownOptionSelectorBox>\n );\n };\n\n private _updateSelection = (selection: UK_TSR_OPTIONS): void => {\n return this.setState({\n selectedOption: selection\n });\n };\n\n private _actionAlreadyTriggered:boolean = false;//used to prevent multiple clicks on the action button.\n private _executeAction = async () => {\n if(this._actionAlreadyTriggered) {\n return;\n }\n this._actionAlreadyTriggered = true;\n\n const closeCurrentGame = async () => {\n await (await this.services.gameRunner).closeCurrentGame({\n shouldSuggestNextGame: false\n });\n }\n\n this._sendActionDataTracking();\n switch (this.state.selectedOption) {\n case UK_TSR_OPTIONS.UK_TSR_RESUME_GAME_OPT:\n case UK_TSR_OPTIONS.UK_TSR_CONTINUE_OPT:\n this._closeDialogBox();\n break;\n case UK_TSR_OPTIONS.UK_TSR_HISTORY_OPT:\n this._closeDialogBox();\n this.services.gameRouteHandler.redirectToHistory();\n break;\n case UK_TSR_OPTIONS.UK_TSR_CLOSE_GAME_OPT:\n this._closeDialogBox();\n closeCurrentGame();\n break;\n case UK_TSR_OPTIONS.UK_TSR_LOGOUT_OPT:\n this._closeDialogBox();\n await closeCurrentGame();\n this.services.user.logout();\n break;\n case UK_TSR_OPTIONS.UK_TSR_REVIEW_REMINDERS_OPT:\n this._closeDialogBox();\n closeCurrentGame();\n this._onReviewReminders();\n\n break;\n case UK_TSR_OPTIONS.UK_TSR_STOP_REMINDERS_OPT:\n this._onStopFurtherReminders();\n this._closeDialogBox();\n break;\n }\n };\n\n private _onReviewReminders = async () => {\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this._businessCorrelationId,\n channel: {\n area: AreaType.button,\n element: UK_TSR_OPTIONS.UK_TSR_REVIEW_REMINDERS_OPT,\n source: AppIdentifiers.CasinoClient\n },\n appSpecificParameters: {\n deeplink: ControlCenterDeeplink.TimeSpentReminderPage,\n source: ControlCenterOpenSource.Lobby\n }\n });\n }\n\n private _onStopFurtherReminders = (): void => {\n if (this.props.timerType === TSR_TYPE.GAME_TIMER) {\n if (Check.isFunction(this.props.onStopReminders)) {\n this.props.onStopReminders();\n } else {\n console.error(\"Time Spent Reminder: invalid callback to stop further reminders\");\n }\n }\n };\n\n private _closeDialogBox = (): void => {\n this.props.dialogHandler.close();\n };\n\n private _sendActionDataTracking = (): void => {\n const action = TRACKING_UK_TSR_OPTION_NAMES[this.state.selectedOption];\n\n this._sendActionDataToElastic(action);\n\n this.services.casinofiedAnalytics.messageActionTaken({\n actionType: action,\n businessCorrelationID: this._businessCorrelationId\n });\n };\n\n private _sendActionDataToElastic = (action: string): void => {\n const logger = this.services.analytics.getLogger({\n CGPEventCategory: ELASTIC_CATEGORY,\n CGPEventAction: action\n });\n\n logger.setTarget('casino-realityCheck');\n logger.info();\n };\n\n render() {\n return (\n <TsrWithDropdownBox>\n {this._renderLoggedInText()}\n {this._renderSelectorContainer()}\n </TsrWithDropdownBox>\n );\n }\n}","import React from \"react\";\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {GeoModalWrapperBox} from '../boxes/geo-modal-wrapper.box';\nimport {IModalDialogHandler} from '../../../services/dialog/dialog.service.interface';\nimport {CyClass} from '../../../../common/cy-classes';\nimport { ModalDialogActionsComponent } from \"../../modal-dialog/modal-dialog-actions.component\";\nimport { DialogTextBox, DialogHighlightedTextBox } from \"../../modal-dialog/boxes/text/dialog-text.box\";\n\ninterface IGeoPermissionsPopupComponentProps {\n onOkPressed: () => any;\n dialogHandler: IModalDialogHandler;\n headerText1?: string;\n headerText2?: string;\n}\n\nexport class GeoPermissionsPopupComponent extends OrbitComponent<IGeoPermissionsPopupComponentProps> {\n\n private _onOkPressed = () => {\n this.services.analytics.sendOrbitUserFlowEvent('Client_Message', 'GeoPermissionsPopupComponent', 'APPROVE');\n this.props.onOkPressed();\n this._closeDialogBox();\n };\n\n private _closeDialogBox = () => {\n this.props.dialogHandler && this.props.dialogHandler.close();\n };\n\n render() {\n\n const {headerText1,headerText2} = this.props;\n\n return (\n <GeoModalWrapperBox>\n {headerText1 && <DialogHighlightedTextBox>{headerText1}</DialogHighlightedTextBox>}\n {headerText2 && <DialogTextBox>{headerText2}</DialogTextBox>}\n <ModalDialogActionsComponent primaryAction={{\n text: this.services.translation.translate(\"GEO_PERMISSIONS_BUTTON\"),\n onClick: this._onOkPressed,\n className: CyClass('cy-state-select-approve-button')\n }} />\n </GeoModalWrapperBox>\n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const TsrWithBalanceBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n font-size: 1.5rem;\n ${({theme}) => theme.font.presets.body};\n\n p:nth-child(odd) {\n color: ${({theme}) => theme.colors.brandSecondary}\n }\n\n svg {\n margin: 1rem 0;\n }\n\n width: 25vw;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 82vw;\n }\n @media ${({theme}) => theme.mediaQuery.lAndBelow + \" and \" + theme.mediaQuery.landscape} {\n width: 56vw;\n }\n`;\n","import {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {\n ITimeSpentReminderWithBalanceComponentProps\n} from \"../../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/time-spent-reminder-options\";\nimport {TimeSpentReminderComponentBaseProps} from \"../with-dropdown/time-spent-reminder-with-dropdown.component\";\nimport React, {ReactNode} from \"react\";\nimport {TsrWithBalanceBox} from \"./boxes/tsr-with-balance.box\";\nimport { DialogTextBox, DialogHighlightedTextBox } from \"../../modal-dialog/boxes/text/dialog-text.box\";\nimport { ModalDialogActionsComponent } from \"../../modal-dialog/modal-dialog-actions.component\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {observer} from \"mobx-react\";\n\nexport type TimeSpentReminderWithBalanceProps = ITimeSpentReminderWithBalanceComponentProps & TimeSpentReminderComponentBaseProps;\n\n\n@observer\nexport class TimeSpentReminderWithBalanceComponent extends OrbitComponent<TimeSpentReminderWithBalanceProps> {\n\n private _executeContinueButtonAction = async () => {\n\n this.props.dialogHandler.close();\n\n const gameRunner = await this.services.gameRunner\n let analyticsAction = 'continue_in_lobby';\n\n if(gameRunner.currentRunningGame) {\n analyticsAction = 'continue_in_game';\n await gameRunner.currentRunningGame.gameCommunicationChannel.resumeGamePlay();\n }\n\n\n this.services.analytics.sendAnalytics('reality_check_message', analyticsAction);\n };\n\n private _executeCloseGameButtonAction = async () => {\n this.services.analytics.sendAnalytics('reality_check_message', 'close_game');\n\n await (await this.services.gameRunner).closeCurrentGame({\n shouldSuggestNextGame: false\n });\n\n\n this.props.dialogHandler.close();\n };\n\n private _getFormattedSessionBalance = (): string => {\n let balanceAbsoluteValue = Math.abs(this.props.totalNetLoss);\n return this.services.currency.formatMoney(balanceAbsoluteValue, true);\n };\n\n private _getFormattedPlayingTime = (): string => {\n const playingTimeWithoutUnits = this.props.playingTime.toHoursAndMinutesString();\n //Temporary hack to also display 'h' and 'm', should probably modify TimeSpan class to support this\n return `${playingTimeWithoutUnits.substring(0, 2)}h${playingTimeWithoutUnits.substring(2)}m`;\n };\n\n private _getSessionBalanceText = (): string => {\n const translationKey = this.props.totalNetLoss < 0 ? \"TSR_WINNINGS_TEXT\" : \"TSR_LOSSES_TEXT\";\n return this.services.translation.translate(translationKey);\n };\n\n private _renderWageredAmount = (): ReactNode => {\n if (Check.isNullOrUndefined(this.props.amountWagered)) {\n return null;\n }\n\n return (\n <>\n <DialogTextBox>{this.services.translation.translate(\"TSR_WAGERED_AMOUNT\")}</DialogTextBox>\n <DialogHighlightedTextBox className={CyClass(\"cy-tsr-wagered-amount\")}>\n {this.services.currency.formatMoney(this.props.amountWagered, true)}\n </DialogHighlightedTextBox>\n </>\n );\n }\n\n private _renderSubtitle = (): ReactNode => {\n if (Check.isNullOrUndefined(this.props.subtitle)) {\n return null;\n }\n\n return (\n <DialogHighlightedTextBox>\n {this.services.translation.translate(this.props.subtitle)}\n </DialogHighlightedTextBox>\n )\n }\n\n private _renderTotalSessionBalance = (): ReactNode => {\n return (\n <>\n <DialogTextBox>\n {this._getSessionBalanceText()}\n </DialogTextBox>\n <DialogHighlightedTextBox className={CyClass(\"cy-tsr-session-balance-amount\")}>\n {this._getFormattedSessionBalance()}\n </DialogHighlightedTextBox>\n </>\n );\n }\n\n render() {\n return (\n <TsrWithBalanceBox>\n {this._renderSubtitle()}\n <DialogTextBox>{this.services.translation.translate(\"TSR_SESSION_TIME_TEXT\")}</DialogTextBox>\n <DialogHighlightedTextBox>{this._getFormattedPlayingTime()}</DialogHighlightedTextBox>\n {this._renderTotalSessionBalance()}\n {this._renderWageredAmount()}\n <ModalDialogActionsComponent primaryAction={{\n onClick: this._executeContinueButtonAction,\n text: this.services.translation.translate('TSR_CONFIRM')\n }} secondaryAction={this.props.isInGame ? {\n onClick: this._executeCloseGameButtonAction,\n text: this.services.translation.translate('TSR_CLOSE_GAME')\n } : null} buttonsOnSeparateLines={this.services.mediaQuery.lAndBelow && !this.services.mediaQuery.veryLowHeight}/>\n </TsrWithBalanceBox>\n );\n }\n}\n\n","import styled from \"styled-components\";\n\nexport const TempAccountPopupBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n ${({theme}) => theme.font.presets.body};\n\n svg {\n margin: 1rem 0;\n }\n \n padding: 0 2rem;\n\n width: 35vw;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: auto;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const TempAccountDaysLeftNumberBox = styled.span`\n font-weight: 900;\n`;","import styled from \"styled-components\";\n\nexport const TempAccountDaysLeftTextBox = styled.div`\n color: ${props => props.theme.colors.brandPrimary};\n text-align: center;\n font-weight: 600;\n font-size: 2.5rem;\n`;","import {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {\n ITempAccountPopupProps\n} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/temp-account-popup-params\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {DialogTextBox} from \"../modal-dialog/boxes/text/dialog-text.box\";\nimport {TempAccountPopupBox} from \"./boxes/temp-account-popup.box\";\nimport {TempAccountDaysLeftNumberBox} from \"./boxes/temp-account-days-left-number.box\";\nimport {ModalDialogActionsComponent} from \"../modal-dialog/modal-dialog-actions.component\";\nimport {TempAccountDaysLeftTextBox} from \"./boxes/temp-account-days-left-text.box\";\nimport {TEMP_ACCOUNT_STATUS} from \"../../../common/const/temp_account_status\";\nimport {GNWP_SOURCES} from \"../../services/gnwp/gnwp-consts\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface TempAccountPopupComponentPropsWithServices extends ITempAccountPopupProps, ComponentServicesPick<'gnwp'> {\n\n}\n\nclass ComponentBody extends OrbitComponent<TempAccountPopupComponentPropsWithServices> {\n\n componentDidMount() {\n super.componentDidMount();\n this.services.analytics.getLogger({\n eventName: 'TEMP_ACCOUNT_MESSAGE_SHOWN',\n }).info();\n }\n\n private _renderDaysLeft = (): React.ReactNode => {\n if (Check.isNullOrUndefined(this.props.daysLeft)) {\n return null;\n }\n\n const daysLeft = this.props.daysLeft < 0 ? 0 : this.props.daysLeft;\n const text = this.services.translation.translate('temp_account_days_left');\n\n return <TempAccountDaysLeftTextBox>\n <TempAccountDaysLeftNumberBox className={\"cy-temp-account-days-number\"}>{daysLeft}</TempAccountDaysLeftNumberBox> {text}\n </TempAccountDaysLeftTextBox>;\n }\n\n private _buttonCallBack = () => {\n if (this.props.status === TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED) {\n\n if (this.props.gnwp.getTempAccountGnwpSource() === GNWP_SOURCES.DOCUMENT_UPLOAD) {\n this.services.externalLinks.then(externalLinks => externalLinks.openUploadDocumentFromMyAccount());\n } else {\n this.services.cashier.openUploadDocumentsFromCashier();\n }\n\n this.services.analytics.sendAnalytics('temp_account_message', 'upload_docs');\n\n } else if (this.props.status === TEMP_ACCOUNT_STATUS.PENDING_VERIFICATION) {\n this.services.analytics.sendAnalytics('temp_account_message', 'close_main_btn');\n }\n\n this.props.dialogHandler.close();\n }\n\n private _getButtonText = (): string => {\n if (this.props.status === TEMP_ACCOUNT_STATUS.DOCUMENTS_NOT_RECEIVED) {\n return this.services.translation.translate(\"temp_account_upload_btn\");\n }\n\n return this.services.translation.translate(\"OK\");\n }\n\n render(){\n return (\n <TempAccountPopupBox>\n {this._renderDaysLeft()}\n <DialogTextBox className={\"cy-temp-account-message-body\"}>{this.props.bodyText}</DialogTextBox>\n <ModalDialogActionsComponent primaryAction={{\n onClick: this._buttonCallBack,\n text: this._getButtonText()\n }}/>\n {this.props.footerText ? <DialogTextBox>{this.props.footerText}</DialogTextBox> : null}\n </TempAccountPopupBox>\n );\n }\n}\n\nexport const TempAccountPopupComponent = withServices(ComponentBody, ['gnwp']);","import styled from \"styled-components\";\n\nconst InitBiometricFooterSectionDefaultBox = styled.div`\n font-size: 1.25rem;\n color: ${({theme}) => theme.colors.textMiddleDark};\n`;\n\nexport const InitBiometricFooterSectionBox = InitBiometricFooterSectionDefaultBox;","import styled from \"styled-components\";\n\nexport const InitBiometricDialogDefaultBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n ${({theme}) => theme.font.presets.body}\n \n padding-top: 3rem;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 0;\n }\n`;\n\nexport const InitBiometricDialogBox = InitBiometricDialogDefaultBox;","import styled from \"styled-components\";\n\nconst InitBiometricSectionDefaultBox = styled.div`\n margin-bottom: 1rem;\n margin-top: 5rem;\n font-size: 1.6rem;\n color: ${({theme}) => theme.colors.textLight};\n \n > :nth-child(2n+1) {\n font-size: 1.4rem;\n color: ${({theme}) => theme.colors.textMiddleDark};\n }\n`;\n\nexport const InitBiometricSectionBox = InitBiometricSectionDefaultBox;","import styled from \"styled-components\";\n\nconst HelpOptionDefaultBox = styled.div`\n font-size: 1.25rem;\n color: ${({theme}) => theme.colors.textMiddleDark};\n cursor: pointer;\n`;\n\nexport const HelpOptionBox = HelpOptionDefaultBox;","import React, {useState} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {IInitBiometricDialogOptions} from \"../../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/init-biometric.component-props\";\nimport {ModalDialogActionsComponent} from \"../../modal-dialog/modal-dialog-actions.component\";\nimport {InitBiometricFooterSectionBox} from \"./boxes/init-biometric-footer-section.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {InitBiometricDialogBox} from \"./boxes/init-biometric-dialog.box\";\nimport {InitBiometricSectionBox} from \"./boxes/init-biometric-info-section.box\";\nimport {HelpOptionBox} from \"./boxes/help-option.box\";\n\nexport const InitBiometricDialogComponent: React.FC<IInitBiometricDialogOptions> = observer((props) => {\n const services = useServices();\n const [isHelpOptionVisible, setHelpOptionVisible] = useState(false);\n\n \n const _toggleHelpOptionVisible = () => {\n setHelpOptionVisible(!isHelpOptionVisible);\n }\n\n const _buttonCallBack = async () => {\n try {\n await services.hybrid.getTouchIDFeaturer().getTokenFromSrv();\n services.analytics.sendOrbitUserFlowEvent('Client_TouchID', 'Activation');\n } catch (err) {\n services.logger.error('Failed to init touch ID feature', err);\n }\n\n props.dialogHandler.close();\n }\n\n const _getButtonText = (): string => {\n return services.translation.translate('TOUCH_ID_INIT_SCREEN_ENABLE_BUTTON');\n }\n\n const _renderHelpText = () => {\n if (!isHelpOptionVisible) {\n return null;\n }\n\n return (\n <InitBiometricFooterSectionBox>\n <ol dangerouslySetInnerHTML={{__html: services.translation.translate(\"TOUCH_ID_INFO\")}}/>\n </InitBiometricFooterSectionBox>\n );\n };\n\n\n\n\n\n\n return (\n <InitBiometricDialogBox>\n <InitBiometricSectionBox>\n <div>\n {services.translation.translate('TOUCH_ID_CAPTION')}\n </div>\n </InitBiometricSectionBox>\n <ModalDialogActionsComponent primaryAction={{\n onClick: _buttonCallBack,\n text: _getButtonText()\n }} />\n <InitBiometricSectionBox>\n <div>\n {services.translation.translate('TOUCH_ID_SUB_CAPTION')}\n </div>\n </InitBiometricSectionBox>\n <HelpOptionBox onClick={() => _toggleHelpOptionVisible()}>\n {services.translation.translate(\"TERMS_AND_CONDITIONS\")}\n </HelpOptionBox>\n {_renderHelpText()}\n </InitBiometricDialogBox>\n );\n\n})","import styled from \"styled-components\";\n\nexport const LoginToastDefaultBox = styled.div`\n display:flex;\n`\n\nexport const LoginToastBox = LoginToastDefaultBox;","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const StandardToastTitleBox = styledBox('StandardToastTitleBox');\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const StandardToastMessageBox = styledBox('StandardToastMessageBox');\n","import styled from \"styled-components\";\n\nexport const LoginToastResponsibleGamingLinkDefaultBox = styled.a`\n color: ${props => props.theme.colors.brandPrimary};\n text-decoration-line: underline;\n`\n\nexport const LoginToastResponsibleGamingLinkBox = LoginToastResponsibleGamingLinkDefaultBox;","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const StandardToastImageBox = styledBox('StandardToastImageBox');","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {LoginToastBox} from \"./boxes/login-toast.box\";\nimport {FlexContainerBox, FlexFixedSizeItemBox, FlexGrowItemBox} from \"../../themes/architecture/css-helpers/flex\";\nimport {StandardToastTitleBox} from \"../toaster/toasts-content/boxes/standard-toast-title/standard-toast-title.box\";\nimport {StandardToastMessageBox} from \"../toaster/toasts-content/boxes/standard-toast-message/standard-toast-message.box\";\nimport {ILoginToastProps} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/login-toast.component-props\";\nimport {LoginToastResponsibleGamingLinkBox} from \"./boxes/login-toast-message/login-toast-responsible-gaming-link.box\";\nimport {StandardToastImageBox} from \"../toaster/toasts-content/boxes/standard-toast-image/standard-toast-image.box\";\n\ninterface ILoginToastComponentProps {\n contentProps: ILoginToastProps;\n}\nexport const LoginToastComponent: React.FC<ILoginToastComponentProps> = observer((props) => {\n const services = useServices();\n\n const DefaultIcon = services.theme.currentTheme.icons.infoIcon;\n const renderImage = () => {\n return <StandardToastImageBox><DefaultIcon size={3} /></StandardToastImageBox>;\n }\n\n return (\n <LoginToastBox>\n <FlexContainerBox alignItems=\"center\">\n <FlexFixedSizeItemBox>\n {renderImage()}\n </FlexFixedSizeItemBox>\n </FlexContainerBox>\n <FlexGrowItemBox flexBasis=\"150px\">\n <StandardToastTitleBox>\n {props.contentProps.title}\n </StandardToastTitleBox>\n <StandardToastMessageBox>\n {props.contentProps.contentText}\n </StandardToastMessageBox>\n <LoginToastResponsibleGamingLinkBox onClick={() => services.linksNavigation.openResponsibleGaming()}>\n {services.translation.translate('RESPONSIBLE_GAMBLING')}\n </LoginToastResponsibleGamingLinkBox>\n </FlexGrowItemBox>\n </LoginToastBox>\n )\n})","import React, {ReactElement} from 'react';\nimport {ServiceBase} from '../ServiceBase';\nimport {\n IGermanyResponsibleGamingButtonOptions,\n IOrbitComponentInSdk,\n IOrbitDialogInSdk\n} from '../../../common/interfaces/orbit-component-to-sdk-adapter/orbit-component-to-sdk-adapter.service.interface';\nimport {\n ITimeSpentReminderWithBalanceComponentProps,\n ITimeSpentReminderOptions\n} from '../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/time-spent-reminder-options';\nimport {\n ResponsibleGamingButtonsGermanyComponent\n} from \"../../components/responsible-gambling/responsible-gaming-buttons/regulations/germany/responsible-gaming-buttons-germany.component\";\nimport {action, observable, makeObservable} from 'mobx';\nimport {IOrbitComponentsInsideSdkProvider, IComponentRenderedInsideSdk} from './orbit-components-inside-sdk-provider.interface';\nimport {TimeSpentReminderWithDropdownComponent} from \"../../components/time-spent-reminder/with-dropdown/time-spent-reminder-with-dropdown.component\";\nimport {\n DialogButtonClickHandleResultEnum,\n ShowModalOptions\n} from \"../dialog/dialog.service.interface\";\nimport {GeoPermissionsPopupComponent} from \"../../components/geo/geo-permission-popup/geo-permission-popup.component\";\nimport {IStatePopupDisplayParams} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/state-popup-display-params\";\nimport {IGeoPermissionPopupOptions} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/geo-permission-popup.component-props\";\nimport {TimeSpentReminderWithBalanceComponent} from \"../../components/time-spent-reminder/with-balance/time-spent-reminder-with-balance.component\";\nimport {\n IIntrusiveMessagePopupDisplayParams\n} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/intrusive-message-popup-display-params\";\nimport {DISPLAY_MESSAGE_IDS, DISPLAY_MESSAGE_NAMES} from \"../../../common/const/casinofied-analytics-consts\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {TempAccountPopupComponent} from \"../../components/temp-account-popup/temp-account-popup.component\";\nimport {\n ITempAccountShowPopupOptions\n} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/temp-account-popup-params\";\nimport {InitBiometricDialogComponent} from '../../components/biometric-dialog/init-biometric-dialog/init-biometric-dialog.component';\nimport {LoginToastComponent} from '../../components/login-toast/login-toast.component';\nimport {ILoginToastDef} from '../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/login-toast.component-props';\nimport {ExternalLinksZIndexes} from \"../external-links/external-links-z-indexes\";\n\nexport class OrbitComponentToSdkAdapterService extends ServiceBase implements IOrbitComponentsInsideSdkProvider {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n }\n\n renderGermanyResponsibleGamingButtons(element: HTMLElement, options?: IGermanyResponsibleGamingButtonOptions): IOrbitComponentInSdk {\n return this._renderComponent(element,\n <ResponsibleGamingButtonsGermanyComponent key={'GermanyResponsibleGamingButtons'} placement={options?.placement} />);\n }\n\n showLocationPopup(props: IStatePopupDisplayParams): Promise<void> {\n return this.services.stateOfResidenceIdentifier.displayStateSelectorPopup(props);\n }\n\n showGeoPermissionPopup(props: IGeoPermissionPopupOptions) {\n return this.services.dialog.showModal(dialogHandler =>\n <GeoPermissionsPopupComponent\n dialogHandler={dialogHandler}\n onOkPressed={props.onOkPressed}\n headerText1={this.services.translation.translate(\"GEO_PERMISSIONS_POPUP_TOP_TEXT\")}\n headerText2={this.services.translation.translate(\"GEO_PERMISSIONS_POPUP_MIDDLE_TEXT\")}\n\n />, {\n title: this.services.translation.translate(\"GEO_PERMISSIONS_POPUP_TITLE\"),\n icon: this.services.theme.currentTheme.icons.locationIcon,\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n forceZOrder: ExternalLinksZIndexes.TouchID - 1,\n onClosed: props.onMessageClosed,\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: true,\n }\n );\n }\n\n private _getTimeSpentReminderDialogOptions(headerClass?: string): ShowModalOptions {\n return {\n title: this.services.translation.translate(\"TSR_TITLE\"),\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n onClosed: null,\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: true,\n headerClass: headerClass,\n showPopupAboveSecondWebViewHybrid: true,\n icon: this.services.theme.currentTheme.icons.timeSpentReminderClockIcon\n };\n }\n\n showTempAccountPopup(options: ITempAccountShowPopupOptions): IOrbitDialogInSdk {\n return this.services.dialog.showModal(dialogHandler => <TempAccountPopupComponent\n bodyText={options.bodyText}\n daysLeft={options.daysLeft}\n status={options.status}\n footerText={options.footerText}\n dialogHandler={dialogHandler}\n />, {\n onClosedByXButton: () => this.services.analytics.sendAnalytics('temp_account_message', 'close'),\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n shouldBeClosedOnlyByUser: true,\n title: this.services.translation.translate('temp_account_title'),\n icon: this.services.theme.currentTheme.icons.tempAccountPopupIcon\n });\n }\n\n showTimeSpentReminderWithDropdown(options: ITimeSpentReminderOptions): IOrbitDialogInSdk {\n\n const dialogOptions = this._getTimeSpentReminderDialogOptions('cy-uk-malta-reality-check-title');\n\n return this.services.dialog.showModal(dialogHandler => <TimeSpentReminderWithDropdownComponent\n {...options}\n dialogHandler={dialogHandler} />\n , dialogOptions);\n }\n\n showTimeSpentReminderWithBalance(options: ITimeSpentReminderWithBalanceComponentProps): IOrbitDialogInSdk {\n\n const dialogOptions = this._getTimeSpentReminderDialogOptions();\n\n return this.services.dialog.showModal(dialogHandler => <TimeSpentReminderWithBalanceComponent\n {...options}\n dialogHandler={dialogHandler} />\n , dialogOptions);\n }\n\n\n showIntrusiveMessagePopup(params: IIntrusiveMessagePopupDisplayParams): IOrbitDialogInSdk {\n\n const businessCorrelationId = this.services.tools.getGuid();\n\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.nightLimitWarning,\n displayMessageName: DISPLAY_MESSAGE_NAMES.DISRUPTIVE_WARNING_MESSAGE_NAME,\n correlationID: params.correlationId\n });\n\n const WarningIcon = this.services.theme.currentTheme.icons.warningSignIcon;\n return this.services.dialog.showSimpleTextModal({\n buttons: [\n {\n buttonPreset: \"primary\",\n text: params.buttonText,\n onClick: async () => {\n this.services.casinofiedAnalytics.messageActionTaken({\n displayMessageName: DISPLAY_MESSAGE_NAMES.DISRUPTIVE_WARNING_MESSAGE_NAME,\n actionType: 'Confirmation',\n correlationID: params.correlationId,\n businessCorrelationID: businessCorrelationId\n });\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ],\n hideCloseButton: true,\n text: params.text,\n title: params.title.toLowerCase(),\n icon: <WarningIcon style={{display: \"inline\"}} size={5.6} />,\n disableFullscreenMobile: true,\n showPopupAboveSecondWebViewHybrid: true\n })\n }\n\n showDefaultKickPopup(popupTextKey: string): IOrbitDialogInSdk {\n const WarningIcon = this.services.theme.currentTheme.icons.warningSignIcon;\n return this.services.dialog.showSimpleTextModal({\n buttons: [\n {\n buttonPreset: \"primary\",\n text: this.services.translation.translate('OK'),\n onClick: async () => {\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ],\n text: this.services.translation.translate(popupTextKey),\n title: this.services.translation.translate('generic_notification_popup_title').toLowerCase(),\n icon: <WarningIcon style={{display: \"inline\"}} size={5.6} />,\n disableFullscreenMobile: true,\n showPopupAboveSecondWebViewHybrid: true\n });\n }\n\n showDisconnectPopup(): IOrbitDialogInSdk {\n if (this.services.miniOrbit.isEnabled) {\n return; //We don't show the disconnected popup on our side for miniOrbits\n }\n\n const WarningIcon = this.services.theme.currentTheme.icons.warningSignIcon;\n return this.services.dialog.showSimpleTextModal({\n buttons: [\n {\n buttonPreset: \"primary\",\n text: this.services.translation.translate('OK'),\n onClick: async () => {\n this.services.analytics.sendOrbitUserFlowEvent('InactivityTimeoutPopUp', 'OK', 'PostDisconnect');\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ],\n text: this.services.translation.translate('MDP_INACTIVITY_DISCONNECTED_TEXT'),\n title: this.services.translation.translate('generic_notification_popup_title').toLowerCase(),\n icon: <WarningIcon style={{display: \"inline\"}} size={5.6} />,\n disableFullscreenMobile: true,\n showPopupAboveSecondWebViewHybrid: true,\n onClosedByXButton: async () => {\n this.services.analytics.sendOrbitUserFlowEvent('InactivityTimeoutPopUp', 'Close', 'PostDisconnect');\n }\n });\n }\n\n @observable.ref\n currentRenderedComponents: IComponentRenderedInsideSdk[] = [];\n\n @action.bound\n private _setCurrentRenderedComponents(currentRenderedComponents: IComponentRenderedInsideSdk[]) {\n this.currentRenderedComponents = currentRenderedComponents;\n }\n\n private _unmountComponent(element: HTMLElement) {\n const index = this.currentRenderedComponents.findIndex(item => item.element === element);\n if (index >= 0) {\n this._setCurrentRenderedComponents([...this.currentRenderedComponents.splice(index, 1)])\n }\n }\n\n private _renderComponent(element: HTMLElement, component: ReactElement): IOrbitComponentInSdk {\n\n this._setCurrentRenderedComponents([\n ...this.currentRenderedComponents,\n {\n component: component,\n element: element\n }\n ]);\n\n return {\n unmount: () => {\n this._unmountComponent(element)\n }\n }\n }\n\n showAboutDialog(): Promise<void> {\n return this.services.regulation.current.components.showAboutDialog()\n }\n\n showInitBiometricDialog(): IOrbitDialogInSdk {\n return this.services.dialog.showModal(dialogHandler => <InitBiometricDialogComponent\n dialogHandler={dialogHandler}\n />, {\n title: this.services.translation.translate('TOUCH_ID_AUTO_SCREEN'),\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n shouldBeClosedOnlyByUser: true,\n mobileCenterHeader: true,\n onClosed: () => this.services.sdk.eventsTrigger.onInitScreenShow(),\n });\n }\n\n\n showLoginMessageToast(toastConfig: ILoginToastDef): void {\n this.services.toaster.showCustomToast({\n id: toastConfig.id || \"login_message_toast\",\n toastOptions: toastConfig.toastOptions,\n onToastClosed: toastConfig.onToastClosed,\n renderContent: (handler) => {return <LoginToastComponent contentProps={toastConfig.contentProps} />}\n })\n }\n\n}","import {ServiceBase} from '../../ServiceBase';\nimport {IServiceFactoryExtended} from '../../service-factory-extended.interface';\nimport {IMessageBrokerService} from './message-broker.service.interface';\nimport {ILogger, IMessageBroker, MessageBroker} from '@sparkware/uc-sdk-core';\nimport {STANDARD_TOPIC_HEADER} from './message-broker.consts';\nimport { ILoggerService } from '../../logger/logger.service.interface';\n\nexport class MessageBrokerLogger implements ILogger{\n constructor(private _logger: ILoggerService) {\n }\n\n debug(message: string, ...optionalParams: any[]): void {\n this._logger.debug(message, optionalParams);\n }\n\n warn(message: string, ...optionalParams: any[]): void {\n this._logger.warning(message, optionalParams);\n }\n\n error(message: string, ...optionalParams: any[]): void {\n this._logger.error(message, optionalParams);\n }\n\n info(message: string, ...optionalParams: any[]): void {\n this._logger.info(message, optionalParams);\n }\n\n table(message: any, ...optionalParams: any[]):void {\n this._logger.info(message, optionalParams);\n }\n\n log(message: any, ...optionalParams: any[]): void {\n this._logger.info(message, optionalParams);\n }\n}\n\nexport class MessageBrokerService extends ServiceBase implements IMessageBrokerService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this.channels = new MessageBroker(new MessageBrokerLogger(services.logger));\n this.reaction(() => this.services.user.isAuthorized ,\n (isAuthorized) => {\n if(isAuthorized) {\n this.channels.identity.topics.loginSuccess.publish(STANDARD_TOPIC_HEADER, {} as any);\n } else {\n this.channels.identity.topics.logoutSuccess.publish(STANDARD_TOPIC_HEADER, {} as any);\n }\n });\n }\n\n readonly channels: IMessageBroker;\n}","import {IActionHandler} from \"./action-handler.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nexport abstract class ActionHandlerBase<TPayload, TResult = void> implements IActionHandler<TPayload, TResult> {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n\n abstract handle(payload: TPayload): Promise<TResult>;\n}","import {\n AppIdentifiers, IOpenBankingActionPayload,\n IOpenBankingSpecificParams,\n ProductPackageToID\n} from \"@sparkware/uc-sdk-core\";\nimport {\n getCasinofiedCommonAppContextParams,\n getCasinofiedDeviceInfo,\n getCasinofiedGeoInfoParams\n} from \"../../casinofied-helper-functions\";\nimport {ActionHandlerBase} from \"../action-handler-base\";\n\n\nexport class OpenBankingActionHandler extends ActionHandlerBase<IOpenBankingActionPayload> {\n async handle(payload: IOpenBankingActionPayload): Promise<void> {\n const openBakingSpecificParams: IOpenBankingSpecificParams = (payload.launchInfo.appSpecificParameters || {}) as IOpenBankingSpecificParams;\n if(openBakingSpecificParams.url) {\n this.services.casinofiedAnalytics.openAppRequest({\n correlationID: payload.correlationID,\n launchInfo: payload.launchInfo,\n appID: AppIdentifiers.OpenBanking,\n });\n\n const geoInfo = await getCasinofiedGeoInfoParams(this.services);\n this.services.casinofiedAnalytics.appInitRequest({\n correlationID: payload.correlationID,\n applicationContext: {\n launchInfo: payload.launchInfo,\n appID: AppIdentifiers.OpenBanking,\n productPackageToID: ProductPackageToID.PAYMENTS_DEPOSIT,\n ...getCasinofiedCommonAppContextParams(this.services)\n\n },\n deviceInfo: getCasinofiedDeviceInfo(this.services),\n geoInfo: geoInfo,\n userInfo: {\n userMode: 'authenticated',\n regulationTypeID: this.services.regulation.getRegulationCode(),\n token: ''\n },\n messageBrokerChannels: this.services.messageBroker.channels\n });\n\n await this.services.linksNavigation.openUrl({\n url: openBakingSpecificParams.url,\n openMode: \"newTab\"\n });\n\n } else {\n this.services.logger.error(`OPEN_BANKING action didn't received the URL from ${payload.launchInfo?.sourceAppID}`);\n }\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n AppIdentifiers,\n IPerformActionPayloadBase,\n ProductPackageToID\n} from \"@sparkware/uc-sdk-core\";\nimport {\n getCasinofiedCommonAppContextParams,\n getCasinofiedDeviceInfo,\n getCasinofiedGeoInfoParams\n} from \"../../casinofied-helper-functions\";\n\nexport class UploadDocumentsFromCashierActionHandler extends ActionHandlerBase<IPerformActionPayloadBase> {\n async handle(payload: IPerformActionPayloadBase): Promise<void> {\n this.services.casinofiedAnalytics.openAppRequest({\n correlationID: payload.correlationID,\n launchInfo: payload.launchInfo,\n appID: AppIdentifiers.UploadDocuments,\n });\n\n const geoInfo = await getCasinofiedGeoInfoParams(this.services);\n\n this.services.casinofiedAnalytics.appInitRequest({\n correlationID: payload.correlationID,\n applicationContext: {\n launchInfo: payload.launchInfo,\n appID: AppIdentifiers.UploadDocuments,\n productPackageToID: this.services.device.os.isMobileOS ? ProductPackageToID.FULL_CASHIER_MOBILE : ProductPackageToID.FULL_CASHIER_PC, //TODO - this product package should be clarified when we will use the old cashier or the verify id standalone\n ...getCasinofiedCommonAppContextParams(this.services),\n },\n deviceInfo: getCasinofiedDeviceInfo(this.services),\n geoInfo: geoInfo,\n userInfo: {\n userMode: 'authenticated',\n regulationTypeID: this.services.regulation.getRegulationCode(),\n token: ''\n },\n messageBrokerChannels: this.services.messageBroker.channels\n });\n\n return this.services.cashier.openUploadDocumentsFromCashier();\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IDepositActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenDepositActionHandler extends ActionHandlerBase<IDepositActionPayload> {\n async handle(payload: IDepositActionPayload): Promise<void> {\n await this.services.cashier.openDeposit({\n channel: payload.launchInfo?.channel,\n launchInfo: payload.launchInfo\n });\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IWithdrawActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenWithdrawActionHandler extends ActionHandlerBase<IWithdrawActionPayload> {\n async handle(payload: IWithdrawActionPayload): Promise<void> {\n await this.services.cashier.openWithdraw({\n channel: payload.launchInfo?.channel,\n launchInfo: payload.launchInfo\n });\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenLinkActionData, IOpenLinkActionPayload} from \"@sparkware/uc-sdk-core\";\nimport {NavigationLinkOpenMode} from \"../../../configurations/config-data-sections/navigation-link.configuration\";\n\nexport class OpenLinkActionHandler extends ActionHandlerBase<IOpenLinkActionPayload> {\n async handle(payload: IOpenLinkActionPayload): Promise<void> {\n const actionData = payload.actionData as IOpenLinkActionData;\n if(!actionData?.url) {\n this.services.logger.error('No url provided for openLink action');\n return;\n }\n\n let openMode: NavigationLinkOpenMode = 'newTab';\n if(!actionData.openExternally) {\n openMode = 'redirect';\n }\n\n await this.services.linksNavigation.openUrl({\n url: actionData.url?.trim(),\n openMode: openMode\n });\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {AppIdentifiers, IOpenChatActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenChatActionHandler extends ActionHandlerBase<IOpenChatActionPayload> {\n async handle(payload: IOpenChatActionPayload): Promise<void> {\n await this.services.messageBroker.channels.navigation.topics.openApp.publish({\n publisher: payload.launchInfo.sourceAppID.toString()\n }, {\n appID: AppIdentifiers.CRChat,\n launchInfo: payload.launchInfo,\n correlationID: payload.correlationID\n });\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n AppIdentifiers,\n IOpenEmailActionPayload,\n ProductPackageToID,\n IOpenEmailActionData, IOpenOnlineHelpActionData, IPerformActionPayloadBase\n} from \"@sparkware/uc-sdk-core\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IFormSubmitParams} from \"../../../dom/dom.service.interface\";\nimport {\n getCasinofiedCommonAppContextParams,\n getCasinofiedDeviceInfo,\n getCasinofiedGeoInfoParams\n} from \"../../casinofied-helper-functions\";\n\nexport abstract class OpenLinkWithFormPostActionHandler<TPayload extends IPerformActionPayloadBase> extends ActionHandlerBase<TPayload> {\n\n protected abstract _getAppIdentifier(): AppIdentifiers;\n protected abstract _getProductPackageId(): ProductPackageToID;\n\n async handle(payload: TPayload): Promise<void> {\n\n this._sendAnalytics(payload);\n\n if (!this.services.user.isAuthorized || this.services.device.hybrid.isHybrid) {\n return this._performFormPost(payload);\n }\n\n return this.services.user.getPlatformToken().then(platformToken => {\n return this._performFormPost(payload, platformToken.token);\n });\n }\n\n private _shouldOpenInSameWindow(): boolean {\n return !this.services.device.hybrid.isHybrid && this.services.device.isMobile;\n }\n\n protected abstract _getSpecificActionData(payload: TPayload): IOpenEmailActionData | IOpenOnlineHelpActionData;\n\n private _performFormPost(payload: TPayload, token?: string): Promise<void> {\n\n const actionData = this._getSpecificActionData(payload);\n\n const formPostExtraParams = {\n relatedAccountCid: actionData.relatedAccountCid?.toString(),\n registrationCategory: actionData.registrationCategory?.toString(),\n correlationId: actionData.correlationId\n };\n\n if (!Check.isNullOrUndefined(token)) {\n Object.defineProperty(formPostExtraParams, \"t\", {\n value: token,\n enumerable: true\n });\n }\n\n const formSubmitParams: IFormSubmitParams = {\n url: actionData.url,\n method: \"post\",\n extraParams: formPostExtraParams\n };\n\n if (this._shouldOpenInSameWindow()) {\n formSubmitParams.target = '_self';\n }\n\n this.services.dom.submitForm(formSubmitParams);\n\n return Promise.resolve();\n }\n\n\n\n private async _sendAnalytics(payload: TPayload): Promise<void> {\n const appId = this._getAppIdentifier()\n const productPackageToID = this._getProductPackageId();\n\n this.services.casinofiedAnalytics.openAppRequest({\n correlationID: payload.correlationID,\n launchInfo: payload.launchInfo,\n appID: appId,\n });\n\n const geoInfo = await getCasinofiedGeoInfoParams(this.services);\n this.services.casinofiedAnalytics.appInitRequest({\n correlationID: payload.correlationID,\n applicationContext: {\n launchInfo: payload.launchInfo,\n appID: appId,\n productPackageToID: productPackageToID,\n ...getCasinofiedCommonAppContextParams(this.services)\n },\n deviceInfo: getCasinofiedDeviceInfo(this.services),\n geoInfo: geoInfo,\n userInfo: {\n userMode: this.services.user.isAuthorized ? 'authenticated' : 'anonymous',\n regulationTypeID: this.services.regulation.getRegulationCode(),\n token: ''\n },\n messageBrokerChannels: this.services.messageBroker.channels\n });\n }\n}\n\nexport class OpenEmailActionHandler extends OpenLinkWithFormPostActionHandler<IOpenEmailActionPayload> {\n protected _getAppIdentifier(): AppIdentifiers {\n return AppIdentifiers.OpenEmail;\n }\n\n\n protected _getProductPackageId(): ProductPackageToID {\n return ProductPackageToID.OPEN_EMAIL\n }\n\n protected _getSpecificActionData(payload: IOpenEmailActionPayload): IOpenEmailActionData {\n return payload.actionData;\n }\n}\n","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n AppIdentifiers,\n ControlCenterDeeplink,\n ControlCenterOpenSource,\n IOpenControlCenterFullActionPayload\n} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenControlCenterFullActionHandler extends ActionHandlerBase<IOpenControlCenterFullActionPayload> {\n async handle(payload: IOpenControlCenterFullActionPayload): Promise<void> {\n if(!await this.services.user.ensureUserIsLoggedIn('OpenControlCenterFullActionHandler')) {\n throw new Error('User canceled the login');\n }\n\n (await this.services.userMenu).closeMenu();\n\n this.services.messageBroker.channels.navigation.topics.openApp.publish({\n publisher: payload.launchInfo.sourceAppID.toString()\n }, {\n appID: AppIdentifiers.ControlCenterFull,\n launchInfo: {\n ...payload.launchInfo,\n appSpecificParameters: {\n source: ControlCenterOpenSource.Lobby,\n deeplink: ControlCenterDeeplink.Main,\n ...payload.launchInfo?.appSpecificParameters\n }\n },\n correlationID: payload.correlationID\n });\n }\n}\n","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n ClientPageType,\n IOpenClientPageActionPayload\n} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenClientPageActionHandler extends ActionHandlerBase<IOpenClientPageActionPayload> {\n async handle(payload: IOpenClientPageActionPayload): Promise<void> {\n switch(payload.actionData.clientPageType) {\n case ClientPageType.rgPolicy:\n await this.services.linksNavigation.openResponsibleGaming();\n break;\n case ClientPageType.onlineHelp:\n // TODO: Implement\n throw new Error(`Client page ${payload.actionData.clientPageType} is not supported yet`);\n default:\n throw new Error(`Client page ${payload.actionData.clientPageType} is not supported`);\n }\n }\n}\n","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {ILogoutActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class LogoutActionHandler extends ActionHandlerBase<ILogoutActionPayload> {\n async handle(payload: ILogoutActionPayload): Promise<void> {\n return this.services.user.logout();\n }\n}\n","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {AppIdentifiers, IOpenHelpCenterActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenHelpCenterActionHandler extends ActionHandlerBase<IOpenHelpCenterActionPayload> {\n async handle(payload: IOpenHelpCenterActionPayload): Promise<void> {\n await this.services.messageBroker.channels.navigation.topics.openApp.publish({\n publisher: payload.launchInfo?.sourceAppID.toString()\n }, {\n appID: AppIdentifiers.CRHelpCenter,\n launchInfo: payload.launchInfo,\n correlationID: payload.correlationID\n });\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {ILoginActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class LoginActionHandler extends ActionHandlerBase<ILoginActionPayload> {\n async handle(payload: ILoginActionPayload): Promise<void> {\n if(!await this.services.user.ensureUserIsLoggedIn('LoginActionHandler')) {\n throw new Error('User canceled the login');\n }\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IRegistrationActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class RegistrationActionHandler extends ActionHandlerBase<IRegistrationActionPayload> {\n async handle(payload: IRegistrationActionPayload): Promise<void> {\n await (await this.services.externalLinks).openMembership({\n channel: payload.launchInfo?.channel,\n businessCorrelationID: payload.launchInfo?.businessCorrelationID,\n promoCode: payload.actionData?.promoCode,\n marketingParams: {\n wtc: payload.actionData?.wtc,\n dl: payload.actionData?.dl\n }\n })\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {ITransactionHistoryActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class TransactionHistoryActionHandler extends ActionHandlerBase<ITransactionHistoryActionPayload> {\n async handle(payload: ITransactionHistoryActionPayload): Promise<void> {\n await this.services.cashier.openTransactionHistory({\n channel: payload.launchInfo?.channel,\n launchInfo: payload.launchInfo\n })\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenCashierActionPayload} from \"@sparkware/uc-sdk-core\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\n\nexport class OpenCashierActionHandler extends ActionHandlerBase<IOpenCashierActionPayload> {\n async handle(payload: IOpenCashierActionPayload): Promise<void> {\n await this.services.cashier.openCashier({\n sessionType: CIPropRead.getNumericProperty('sessionType', payload.launchInfo?.appSpecificParameters)\n || CIPropRead.getNumericProperty('TabId', payload.launchInfo?.appSpecificParameters),\n channel: payload.launchInfo?.channel,\n PromCode: CIPropRead.getStringProperty('PromoCode', payload.launchInfo?.appSpecificParameters)\n });\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenChallengesActionPayload} from \"@sparkware/uc-sdk-core\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenChallengesActionHandler extends ActionHandlerBase<IOpenChallengesActionPayload> {\n async handle(payload: IOpenChallengesActionPayload): Promise<void> {\n await (await this.services.externalLinks).openMyAccount({\n tabId: MyAccountTab.LCChallenges\n });\n }\n\n}","import {INavigateClientPageActionPayload} from \"@sparkware/uc-sdk-core\";\nimport {ActionHandlerBase} from \"../action-handler-base\";\n\nexport class NavigateClientPageActionHandler extends ActionHandlerBase<INavigateClientPageActionPayload> {\n async handle(payload: INavigateClientPageActionPayload): Promise<void> {\n await this.services.location.push(payload.actionData.url)\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenMyAccountActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenMyAccountActionHandler extends ActionHandlerBase<IOpenMyAccountActionPayload> {\n async handle(payload: IOpenMyAccountActionPayload): Promise<void> {\n await (await this.services.externalLinks).openMyAccount({\n tabId: payload.actionData?.tabId\n });\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenRichActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenRichActionHandler extends ActionHandlerBase<IOpenRichActionPayload> {\n async handle(payload: IOpenRichActionPayload): Promise<void> {\n await (await this.services.externalLinks).openRichPage({\n campaignId: payload.actionData?.CampaignId?.toString()\n });\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenControlCenterMiniActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenControlCenterMiniActionHandler extends ActionHandlerBase<IOpenControlCenterMiniActionPayload> {\n async handle(payload: IOpenControlCenterMiniActionPayload): Promise<void> {\n if(await this.services.user.ensureUserIsLoggedIn('OpenControlCenterMiniActionHandler')) {\n (await this.services.userMenu).openMenu();\n }\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {ActionID, AreaType, IDeepLink, IOpenCasinoGameActionPayload} from \"@sparkware/uc-sdk-core\";\nimport { OrbitAIFeatureAnalyticsCategory } from \"../../../analytics/analytics.service.interface\";\n\nexport class OpenCasinoGameActionHandler extends ActionHandlerBase<IOpenCasinoGameActionPayload> {\n async handle(payload: IOpenCasinoGameActionPayload): Promise<void> {\n\n const gameType = payload.actionData.gameType;\n\n if(payload.actionData.isReal) {\n await this.services.user.ensureUserIsLoggedIn('OpenCasinoGameActionHandler');\n }\n\n await this.services.games.getGamesMapUpdatePromise();\n\n const gameInfo = await this.services.games.getGameInfo(gameType);\n\n if(!gameInfo) {\n this.services.logger.error(`Game type ${gameType} was not found!`);\n\n if (this._shouldOpenGameInWebApp(gameType)) {\n\n const unifiedDeepLink: IDeepLink = {\n area: AreaType.button,\n actions: [\n {\n actionID: ActionID.openCasinoGame,\n actionData: payload.actionData\n }\n ]\n };\n\n // open webApp deeplink with this game\n this.services.sdk.openHybridLink(`/#deeplink=${encodeURIComponent(JSON.stringify(unifiedDeepLink))}`);\n return;\n }\n\n this.services.analytics.sendOrbitAIFeatureEvent(OrbitAIFeatureAnalyticsCategory.CorrelatedGamePopUp, 'Game_Unavailable', gameType.toString());\n await this._suggestCorrelatedGame(gameType);\n return;\n }\n\n await gameInfo.open({\n isRealMode: payload.actionData.isReal\n });\n }\n\n\n private _shouldOpenGameInWebApp(gameType: number) {\n return this.services.device.hybrid.isEmbedded &&\n !this.services.sdk.isHybridEmbeddedGame(gameType) &&\n !this.services.regulation.shouldPreventOpenGameOnMobileWeb();\n }\n\n private async _suggestCorrelatedGame(gameType: number) {\n let suggestedGameType: number;\n const correlatedGames = await this.services.games.getCorrelatedGames(gameType, 10) || [];\n\n if(correlatedGames?.length > 0) {\n const gamesInfoArray = await this.services.games.getGamesInfoArray(correlatedGames) || [];\n\n if (gamesInfoArray?.length > 0) {\n suggestedGameType = gamesInfoArray[0].gameType;\n }\n }\n\n if (!suggestedGameType) {\n this.services.logger.error(`No correlated in layout games are found for game type ${gameType}, getCorrelatedGames: ${correlatedGames.join(';')}!`);\n\n const suggestedAIGameTypes = this.services.aiEngine.aiRecommendedGames?.gameTypes || [];\n\n if (suggestedAIGameTypes.length === 0) {\n this.services.logger.debug(`No correlated in ai suggested games are found for game type ${gameType}`);\n return;\n }\n const randomGameIndex = Math.floor(Math.random() * Math.min(10, suggestedAIGameTypes.length));\n suggestedGameType = suggestedAIGameTypes[randomGameIndex];\n\n //Check if the chosen GameType is allowed in the game layout\n if (!(await this.services.games.getGameInfo(suggestedGameType))) {\n return;\n }\n }\n\n const gamePopup = await this.services.gamePopup;\n\n await gamePopup.showSuggestedGame(suggestedGameType, this.services.translation.translate(\"GAME_POPUP_GAME_UNAVAILABLE\"), this.services.translation.translate(\"GAME_POPUP_MAY_LIKE\"));\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {IOpenForgotPasswordActionPayload} from \"@sparkware/uc-sdk-core\";\n\nexport class OpenForgotYourPasswordActionHandler extends ActionHandlerBase<IOpenForgotPasswordActionPayload> {\n async handle(payload: IOpenForgotPasswordActionPayload): Promise<void> {\n await (await this.services.externalLinks).openForgotPassword();\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {AreaType, CasinoFreeToPlayGameStage, IOpenCasinoFreeToPlayActionPayload} from \"@sparkware/uc-sdk-core\";\nimport {ISendElasticEventOptions} from \"../../../analytics/analytics.service.interface\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\n\nexport class OpenCasinoFreeToPlayActionHandler extends ActionHandlerBase<IOpenCasinoFreeToPlayActionPayload> {\n async handle(payload: IOpenCasinoFreeToPlayActionPayload): Promise<void> {\n if(!await this.services.user.ensureUserIsLoggedIn('OpenCasinoFreeToPlayActionHandler')) {\n throw new Error('User is not logged in');\n }\n\n await this.services.freeToPlay.waitForEligibility();\n\n if (!this.services.freeToPlay.isPromotionEligible) {\n throw new Error('Free to play is not enabled or user is not eligible!');\n }\n\n const gameStage = payload.launchInfo?.appSpecificParameters?.gameStage ?? CasinoFreeToPlayGameStage.MiniArena;\n\n this._sendAnalytics(gameStage);\n\n await this.services.freeToPlay.showPromotion({\n channel: {\n area: AreaType.externalClick,\n source: CHANNEL_SOURCE.casinoClient,\n element: CHANNEL_ELEMENTS.deepLink,\n ...payload.launchInfo?.channel\n },\n appSpecificParameters: {\n gameStage: gameStage\n }\n });\n }\n\n private _sendAnalytics(gameStage: CasinoFreeToPlayGameStage) {\n try {\n let options: ISendElasticEventOptions = {\n action: \"CLICK\",\n category: \"Deep_link\",\n eventType: \"bonus_widget\",\n value: gameStage.toString(),\n appID: \"F2P\",\n customData: {\n location: this.services.location.isHomePage ? 'homepage' : this.services.location.currentUri.pathName.toString(),\n segmentation: this.services.user.playerRMSStatus\n }\n };\n this.services.analytics.sendElasticInfoEvent(options, true);\n }\n catch (err){\n console.log(\"F2P Deep_link analytics report failed with error: \"+ err);\n }\n }\n\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n AppIdentifiers,\n IOpenOnlineHelpActionPayload,\n ProductPackageToID,\n} from \"@sparkware/uc-sdk-core\";\nimport {\n getCasinofiedCommonAppContextParams,\n getCasinofiedDeviceInfo,\n getCasinofiedGeoInfoParams\n} from \"../../casinofied-helper-functions\";\n\n\nexport class OpenOnlineHelpActionHandler extends ActionHandlerBase<IOpenOnlineHelpActionPayload> {\n async handle(payload: IOpenOnlineHelpActionPayload): Promise<void> {\n\n try {\n this._sendAnalytics(payload);\n } catch (e) {\n this.services.logger.error(\"Failed to send open online action handler analytics\");\n }\n\n const relatedAccountCid = payload.actionData.relatedAccountCid?.toString();\n const registrationCategory = payload.actionData.registrationCategory?.toString();\n const correlationId = payload.actionData.correlationId;\n const url = `${payload.actionData.url?.trim()}?relatedAccountCid=${relatedAccountCid}®istrationCategory=${registrationCategory}&correlationId=${correlationId}`;\n\n return this.services.linksNavigation.openUrl({\n url: url,\n openMode: 'newTab'\n });\n }\n\n private async _sendAnalytics(payload: IOpenOnlineHelpActionPayload): Promise<void> {\n const appId = this._getAppIdentifier()\n const productPackageToID = this._getProductPackageId();\n\n this.services.casinofiedAnalytics.openAppRequest({\n correlationID: payload.correlationID,\n launchInfo: payload.launchInfo,\n appID: appId,\n });\n\n const geoInfo = await getCasinofiedGeoInfoParams(this.services);\n this.services.casinofiedAnalytics.appInitRequest({\n correlationID: payload.correlationID,\n applicationContext: {\n launchInfo: payload.launchInfo,\n appID: appId,\n productPackageToID: productPackageToID,\n ...getCasinofiedCommonAppContextParams(this.services)\n },\n deviceInfo: getCasinofiedDeviceInfo(this.services),\n geoInfo: geoInfo,\n userInfo: {\n userMode: this.services.user.isAuthorized ? 'authenticated' : 'anonymous',\n regulationTypeID: this.services.regulation.getRegulationCode(),\n token: ''\n },\n messageBrokerChannels: this.services.messageBroker.channels\n });\n }\n\n\n protected _getAppIdentifier(): AppIdentifiers {\n return AppIdentifiers.OpenOnlineHelp;\n }\n\n protected _getProductPackageId(): ProductPackageToID {\n return ProductPackageToID.OPEN_ONLINE_HELP\n }\n}","import {ActionHandlerBase} from \"../action-handler-base\";\nimport {\n AdditionalActionName,\n AuthenticationServiceType,\n IAutoLoginActionPayLoad,\n ProductPackageToID\n} from \"@sparkware/uc-sdk-core\";\n\nexport class AutologinActionHandler extends ActionHandlerBase<IAutoLoginActionPayLoad> {\n async handle(payload: IAutoLoginActionPayLoad): Promise<void> {\n\n if(payload.actionData.authenticationServiceType === AuthenticationServiceType.Registration) {\n this.services.sdk.eventsTrigger.registrationCompleted({\n UserInfo: payload.actionData.securityCode,\n SourceProductPackage: ProductPackageToID.REGISTRATION.toString()\n });\n await this.services.user.waitForAutoLogin();\n } else {\n await this.services.user.runAutoLogin({\n brandId: this.services.sdk.getBrandID(),\n token: payload.actionData.securityCode,\n sourceProductPackage: this.services.sdk.getProductPackageId(),\n sourceSubBrand: this.services.sdk.getSubBrandID()\n });\n }\n\n switch (payload.actionData.additionalAction.name) {\n case AdditionalActionName.openCashier:\n await this.services.cashier.openDeposit({\n channel: payload.launchInfo?.channel,\n launchInfo: payload.launchInfo,\n PromCode: payload.actionData.additionalAction.properties?.promoCode\n });\n break;\n case AdditionalActionName.openIdentityVerification:\n await (await this.services.externalLinks).openUploadDocumentFromMyAccount();\n break;\n }\n }\n}","import {ServiceBase} from '../../ServiceBase';\nimport {IServiceFactoryExtended} from '../../service-factory-extended.interface';\nimport {OpenBankingActionHandler} from \"./handlers/open-banking.action-handler\";\nimport {UploadDocumentsFromCashierActionHandler} from \"./handlers/upload-documents-from-cashier.action-handler\";\nimport {OpenDepositActionHandler} from \"./handlers/open-deposit.action-handler\";\nimport {OpenWithdrawActionHandler} from \"./handlers/open-withdraw.action-handler\";\nimport {OpenLinkActionHandler} from \"./handlers/open-link.action-handler\";\nimport {OpenChatActionHandler} from \"./handlers/open-chat.action-handler\";\nimport {OpenEmailActionHandler} from \"./handlers/open-link-with-form-post.action-handler\";\nimport {OpenControlCenterFullActionHandler} from \"./handlers/open-control-center-full.action-handler\";\nimport {OpenClientPageActionHandler} from \"./handlers/open-client-page.action-handler\";\nimport {LogoutActionHandler} from \"./handlers/logout.action-handler\";\nimport {OpenHelpCenterActionHandler} from \"./handlers/open-help-center.action-handler\";\nimport {LoginActionHandler} from \"./handlers/login.action-handler\";\nimport {RegistrationActionHandler} from \"./handlers/registration.action-handler\";\nimport {TransactionHistoryActionHandler} from \"./handlers/transaction-history.action-handler\";\nimport {OpenCashierActionHandler} from \"./handlers/open-cashier.action-handler\";\nimport {OpenChallengesActionHandler} from \"./handlers/open-challenges.action-handler\";\nimport {NavigateClientPageActionHandler} from \"./handlers/navigate-client-page.action-handler\";\nimport {OpenMyAccountActionHandler} from \"./handlers/open-my-account.action-handler\";\nimport {OpenRichActionHandler} from \"./handlers/open-rich.action-handler\";\nimport {OpenControlCenterMiniActionHandler} from \"./handlers/open-control-center-mini.action-handler\";\nimport {OpenCasinoGameActionHandler} from \"./handlers/open-casino-game.action-handler\";\nimport {OpenForgotYourPasswordActionHandler} from \"./handlers/open-forgot-your-password.action-handler\";\nimport {OpenCasinoFreeToPlayActionHandler} from \"./handlers/open-casino-free-to-play.action-handler\";\nimport {OpenOnlineHelpActionHandler} from \"./handlers/open-online-help.action-handler\";\nimport {AutologinActionHandler} from \"./handlers/autologin.action-handler\";\n\nexport class CasinofiedActionHandlerService extends ServiceBase {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n const actions = services.messageBroker.channels.performAction.topics;\n\n actions.login.registerResolver(payload => {\n return new LoginActionHandler(this.services).handle(payload);\n });\n\n actions.register.registerResolver(payload => {\n return new RegistrationActionHandler(this.services).handle(payload);\n })\n\n actions.openBanking.registerResolver(payload => {\n return new OpenBankingActionHandler(this.services).handle(payload);\n });\n\n actions.uploadDocumentsFromCashier.registerResolver((payload) => {\n return new UploadDocumentsFromCashierActionHandler(this.services).handle(payload);\n });\n\n actions.deposit.registerResolver((payload) => {\n return new OpenDepositActionHandler(this.services).handle(payload);\n });\n\n actions.withdraw.registerResolver((payload) => {\n return new OpenWithdrawActionHandler(this.services).handle(payload);\n });\n\n actions.transactionHistory.registerResolver(payload => {\n return new TransactionHistoryActionHandler(this.services).handle(payload);\n });\n\n actions.openCashier.registerResolver(payload => {\n return new OpenCashierActionHandler(this.services).handle(payload);\n });\n\n actions.openMyAccount.registerResolver(payload => {\n return new OpenMyAccountActionHandler(this.services).handle(payload);\n });\n\n actions.openChallenges.registerResolver(payload => {\n return new OpenChallengesActionHandler(this.services).handle(payload);\n });\n\n actions.navigateClientPage.registerResolver(payload => {\n return new NavigateClientPageActionHandler(this.services).handle(payload);\n });\n\n actions.openLink.registerResolver(payload => {\n return new OpenLinkActionHandler(this.services).handle(payload);\n });\n\n actions.openChat.registerResolver(payload => {\n return new OpenChatActionHandler(this.services).handle(payload);\n });\n\n actions.openEmail.registerResolver(payload => {\n return new OpenEmailActionHandler(this.services).handle(payload);\n });\n\n actions.openOnlineHelp.registerResolver(payload => {\n return new OpenOnlineHelpActionHandler(this.services).handle(payload);\n });\n\n actions.openControlCenterFull.registerResolver(payload => {\n return new OpenControlCenterFullActionHandler(this.services).handle(payload);\n });\n\n actions.openControlCenterMini.registerResolver(payload => {\n return new OpenControlCenterMiniActionHandler(this.services).handle(payload);\n });\n\n actions.openClientPage.registerResolver(payload => {\n return new OpenClientPageActionHandler(this.services).handle(payload);\n });\n\n actions.logout.registerResolver(payload => {\n return new LogoutActionHandler(this.services).handle(payload);\n });\n\n actions.openHelp.registerResolver(payload => {\n return new OpenHelpCenterActionHandler(this.services).handle(payload);\n });\n\n actions.openRich.registerResolver(payload => {\n return new OpenRichActionHandler(this.services).handle(payload);\n });\n\n actions.openCasinoGame.registerResolver(payload => {\n return new OpenCasinoGameActionHandler(this.services).handle(payload);\n });\n\n actions.openForgotPassword.registerResolver(payload => {\n return new OpenForgotYourPasswordActionHandler(this.services).handle(payload);\n });\n\n actions.openCasinoFreeToPlay.registerResolver(payload => {\n return new OpenCasinoFreeToPlayActionHandler(this.services).handle(payload);\n });\n\n actions.autoLogin.registerResolver(payload => {\n return new AutologinActionHandler(this.services).handle(payload);\n });\n }\n}\n","import React from 'react';\nimport {ServiceBase} from '../ServiceBase';\nimport {\n IFloatingBubbleContent,\n IFloatingBubbleHandler,\n IFloatingBubblesService\n} from './floating-bubbles.service.interface';\nimport { action, observable, runInAction, makeObservable } from 'mobx';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport {Check} from '@sparkware/app-utils';\n\nexport class FloatingBubblesService extends ServiceBase implements IFloatingBubblesService {\n @observable.ref\n bubbles: IFloatingBubbleContent[] = [];\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n }\n\n @action.bound\n addBubble(content: IFloatingBubbleContent): IFloatingBubbleHandler {\n content = new BubbleContentDecorator(content, this.services);\n this.bubbles = [...this.bubbles, content];\n return {\n remove: () => {\n const bubbleToRemoveIndex = this.bubbles.findIndex(b => b.id === content.id);\n if(bubbleToRemoveIndex >= 0) {\n runInAction(() => {\n this.bubbles.splice(bubbleToRemoveIndex, 1);\n this.bubbles = [...this.bubbles];\n });\n }\n }\n\n };\n }\n}\n\n\nclass BubbleContentDecorator implements IFloatingBubbleContent {\n constructor(private readonly _originalBubble: IFloatingBubbleContent, private readonly _services: IServiceFactoryExtended) {\n this._id = this._services.tools.getGuid();\n }\n\n\n private readonly _id: string;\n\n get id(): string {\n return this._originalBubble.id || this._id;\n }\n\n get isVisible(): boolean {\n if(Check.isNullOrUndefined(this._originalBubble.isVisible)) {\n return true;\n }\n return this._originalBubble.isVisible;\n }\n\n render(): React.ReactNode {\n return this._originalBubble.render();\n }\n\n}","import styled from \"styled-components\";\n\nexport const SourceOfFundsBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n padding: 0 5rem;\n text-align: center;\n ${({theme}) => theme.font.presets.body};\n font-size: 1.5rem;\n color: ${({theme}) => theme.colors.textLight};\n max-width: 60rem;\n`;","import React from \"react\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {SourceOfFundsBox} from \"./boxes/source-of-funds.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport { DialogTextBox } from \"../modal-dialog/boxes/text/dialog-text.box\";\nimport { ModalDialogActionsComponent } from \"../modal-dialog/modal-dialog-actions.component\";\n\ninterface SourceOfFundsPopupComponentProps{\n messageRow1:string;\n messageRow2:string;\n openChatLabel:string;\n dialogHandler: IModalDialogHandler;\n}\n\nexport class SourceOfFundsPopupComponent extends OrbitComponent<SourceOfFundsPopupComponentProps>{\n\n _closeDialog = () => {\n this.props.dialogHandler.close();\n }\n\n render(){\n return (\n <SourceOfFundsBox>\n <DialogTextBox>{this.props.messageRow1}</DialogTextBox>\n <DialogTextBox>{this.props.messageRow2}</DialogTextBox>\n <ModalDialogActionsComponent primaryAction={{\n text: this.props.openChatLabel,\n onClick: this._closeDialog,\n className: CyClass('cy-source-of-funds-open-chat-btn')\n }} />\n </SourceOfFundsBox>\n )\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {\n IRestrictionRulerService,\n LOGIN_ACTION,\n SHOW_MESSAGE_ACTION_TYPE,\n SOF_MESSAGE_ID\n} from \"./restriction-ruler.service.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {\n RestrictionRulerController_GetRestrictionActionsResponse,\n RestrictionRulerController_NotifyRestrictionActionPerformedRequest\n} from \"../api/api.service\";\nimport {SourceOfFundsPopupComponent} from \"../../components/source-of-funds/source-of-funds-popup.component\";\nimport React from \"react\";\nimport {AppIdentifiers, AreaType, ChatOpenMode} from '@sparkware/uc-sdk-core';\nimport {DISPLAY_MESSAGE_IDS} from \"../../../common/const/casinofied-analytics-consts\";\n\n\nexport class RestrictionRulerService extends ServiceBase implements IRestrictionRulerService{\n constructor(services: IServiceFactoryExtended) {\n super(services);\n if(!this.services.miniOrbit.isEnabled) {\n this.reaction( () => this.services.user.isAuthorized,\n (isAuthorized) => {\n const currentRegulationCode = this.services.regulation.getRegulationCode();\n const enableSOF = this.services.configuration.servicesConfigs.RestrictionRuler.enableSOF;\n if (isAuthorized && !this.services.sdk.isLoginFromRegistration && enableSOF && enableSOF[currentRegulationCode]){\n this._executeRestrictionRulerActions()\n }\n\n },\n {fireImmediately: true}\n )\n }\n\n }\n\n private async _executeRestrictionRulerActions() {\n try {\n let restrictionRulerResponse: RestrictionRulerController_GetRestrictionActionsResponse = await this.services.api.restrictionRulerController.getRestrictionActions(\n {\n RequestedAction: LOGIN_ACTION\n });\n\n this._showSourceOfFundsMessage(restrictionRulerResponse);\n\n } catch (error) {\n this.services.logger.error('Restriction Ruler Service Get Restriction Actions: ', error);\n }\n\n }\n private async _notifyRestrictionActionPerformed(businessCorrelationID: string, actionType: string, actionData: any) {\n\n let request: RestrictionRulerController_NotifyRestrictionActionPerformedRequest = {\n restrictionRuleActionType: actionType,\n actionData: JSON.stringify(actionData || {})\n\n };\n await this.services.api.restrictionRulerController.notifyRestrictionActionPerformed(request);\n await (await this.services.appLauncher).openChat({\n businessCorrelationID: businessCorrelationID,\n appSpecificParameters: {\n openMode: ChatOpenMode.SOF\n },\n channel: {\n area: AreaType.Message,\n source: AppIdentifiers.CasinoClient,\n element: 'sof_required'\n }\n });\n }\n\n private _showSourceOfFundsMessage(restrictionRulerResponse: RestrictionRulerController_GetRestrictionActionsResponse){\n\n let showMessageActions = (restrictionRulerResponse.actions ?? []).filter(action => action.type === SHOW_MESSAGE_ACTION_TYPE && action.actionData?.messageId === SOF_MESSAGE_ID);\n if (showMessageActions.length === 0) {\n return;\n }\n const businessCorrelationID = this.services.tools.getGuid();\n const action = showMessageActions[0];\n\n\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationID,\n displayMessageID: DISPLAY_MESSAGE_IDS.sofRequired //TODO - what should be the value for displayMessageID ?\n });\n\n\n this.services.dialog.showModal(dialogHandler =>\n <SourceOfFundsPopupComponent\n dialogHandler={dialogHandler}\n messageRow1={this.services.translation.translate('SOURCE_OF_FUNDS_MESSAGE1')}\n messageRow2={this.services.translation.translate('SOURCE_OF_FUNDS_MESSAGE2')}\n openChatLabel={this.services.translation.translate('SOURCE_OF_FUNDS_OPEN_CHAT_BTN')}/>,\n {\n icon: this.services.theme.currentTheme.icons.sourceOfFundsIcon,\n isHighPriority: true,\n hideCloseButton: true,\n title: this.services.translation.translate('SOURCE_OF_FUNDS_TITLE'),\n mobileCenterHeader: true,\n forceCentralization: true,\n disableFullscreenMobile: true,\n forceTransparentBackground: true,\n onClosed: () => this._notifyRestrictionActionPerformed(businessCorrelationID, action.type, action.actionData)\n }\n )\n }\n}\n","export interface IRestrictionRulerService {\n\n}\n\nexport const LOGIN_ACTION = 'LOGIN';\nexport const SHOW_MESSAGE_ACTION_TYPE = 'SHOW_MESSAGE';\nexport const SOF_MESSAGE_ID = 'SOF';\n","import {\n AppIdentifiers,\n IAppClosedTopicPayload,\n IDivHostedAppInitParameters,\n IOpenAppData,\n IAppLaunchInfo\n} from '@sparkware/uc-sdk-core';\nimport {ServiceBase} from '../../ServiceBase';\nimport {IElasticEventData, IStructuredLogger} from '../../../../common/interfaces/structured-logging-service-interface';\nimport {IServiceFactoryExtended} from '../../service-factory-extended.interface';\nimport {getCasinofiedDeviceInfo} from \"../casinofied-helper-functions\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {\n IActionHandlerEventParams,\n IAnalyticsDisplayMessage, ICasinofiedAnalyticsService,\n IMessageActionTakenEventParams\n} from \"../../../../common/interfaces/casinofied-analytics-proxy.interface\";\n\nexport interface IAppInitResultReportingDetails {\n errorCode?: number;\n errorDescription?: string;\n loadingTime?: number;\n}\n\nexport class CasinofiedAnalyticsService extends ServiceBase implements ICasinofiedAnalyticsService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n services.sdk.events.onBeforeOAuthStateChanged(() => {\n if (services.user.isAuthorized) { //user is about to logout\n this._sessionClosed();\n }\n\n });\n\n this.reaction(() => services.user.isAuthorized, (isAuthorized) => {\n this._sequentialNumber = 0;\n if (isAuthorized) {\n this._authenticationResult();\n }\n });\n\n this.services.window.subscribeTo.focusLost(() => this._userMinimizedClient());\n this.services.window.subscribeTo.focusGained(() => this._userResumedClient());\n // Later we should switch to visibilityChange which covers even more cases, but it's not supported below Safari 14:\n // https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon#sending_analytics_at_the_end_of_a_session\n this.services.window.subscribeTo.pageHide(() => this._userClosedClient());\n this.services.sdk.events.onLoginSessionResumed(() => this._loginSessionResumed());\n }\n\n private get _sequentialNumber(): number {\n const value = this.services.localStorage.getItem('analytics_sequential_number');\n if (Check.isNullOrUndefined(value)) {\n return 0;\n }\n return parseInt(value);\n\n }\n\n private set _sequentialNumber(value: number) {\n this.services.localStorage.setItem('analytics_sequential_number', value);\n }\n\n\n private _createLogger(eventName: string, eventData?: IElasticEventData): IStructuredLogger {\n return this.services.analytics.getLogger(eventData)\n .setEventType(eventName, 'Log', 'Analytics')\n .setAppID(AppIdentifiers.CasinoClient)\n .setSequentialNumber(this._sequentialNumber);\n }\n\n private _createMessageId(): string {\n this._sequentialNumber++;\n const cid = this.services.user.cid;\n const playerSessionId = this.services.user.userData.sessionId;\n return `${cid}_${playerSessionId}_${AppIdentifiers.CasinoClient}_${this._sequentialNumber}`;\n }\n\n async openAppRequest(openAppData: IOpenAppData): Promise<void> {\n try {\n const eventName = 'uc_open_app_request';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n targetAppID: openAppData.appID,\n subBrandID: this.services.sdk.getSubBrandID(),\n sequentialCorrelationID: await this._extractSequentialCorrelationID(openAppData.launchInfo),\n launchInfo: {\n channel: openAppData.launchInfo?.channel,\n sourceAppID: openAppData.launchInfo?.sourceAppID,\n sourceAppVersion: openAppData.launchInfo?.sourceAppVersion,\n trigger: openAppData.launchInfo?.trigger\n }\n }\n });\n logger.setCorrelationId(openAppData.launchInfo?.businessCorrelationID)\n .setBusinessCorrelationID(openAppData.launchInfo?.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.openAppRequest failed`, err);\n }\n\n }\n\n async appInitRequest(appInitParams: IDivHostedAppInitParameters): Promise<void> {\n try {\n const eventName = 'uc_app_init_request';\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n targetAppID: appInitParams.applicationContext.appID,\n subBrandID: appInitParams.applicationContext.subBrandID,\n currencyCode: appInitParams.applicationContext.currencyCode,\n language: appInitParams.applicationContext.languageCode,\n sequentialCorrelationID: await this._extractSequentialCorrelationID(appInitParams.applicationContext.launchInfo),\n productPackageFromID: appInitParams.applicationContext.productPackageFromID,\n productPackageToID: appInitParams.applicationContext.productPackageToID,\n launchInfo: {\n channel: appInitParams.applicationContext.launchInfo.channel,\n sourceAppID: appInitParams.applicationContext.launchInfo.sourceAppID,\n sourceAppVersion: appInitParams.applicationContext.launchInfo.sourceAppVersion,\n trigger: appInitParams.applicationContext.launchInfo.trigger,\n appSpecificParameters: appInitParams.applicationContext.launchInfo.appSpecificParameters,\n openingMode: appInitParams.applicationContext.launchInfo.openingMode,\n },\n userInfo: {\n userMode: appInitParams.userInfo.userMode,\n regulationTypeID: appInitParams.userInfo.regulationTypeID,\n isVip: appInitParams.userInfo.isVIP,\n isFTD: appInitParams.userInfo.isFTD,\n isPromotionPermitted: appInitParams.userInfo.isPromotionPermitted,\n RMS: appInitParams.userInfo.RMS,\n },\n timeZoneUTCOffset: appInitParams.geoInfo.timeZoneUTCOffset,\n deviceInfo: {\n deviceTypeID: appInitParams.deviceInfo.deviceType,\n os: appInitParams.deviceInfo.OS,\n isHybrid: appInitParams.deviceInfo.isHybrid,\n isNative: appInitParams.deviceInfo.isNative,\n browserType: appInitParams.deviceInfo.browserType,\n resolution: this._getResolution()\n //proxyType\n }\n }\n });\n\n logger.setCorrelationId(appInitParams.applicationContext.launchInfo.businessCorrelationID)\n .setBusinessCorrelationID(appInitParams.applicationContext.launchInfo.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.appInitRequest failed`, err);\n }\n }\n\n async appInitResult(appInitParams: IDivHostedAppInitParameters, appInitResultReportingDetails?: IAppInitResultReportingDetails): Promise<void> {\n appInitResultReportingDetails = {\n errorCode: 0,\n errorDescription: '',\n ...appInitResultReportingDetails\n }\n const getLaunchInfo = () => {\n try {\n return {\n channel: appInitParams.applicationContext.launchInfo.channel,\n sourceAppID: appInitParams.applicationContext.launchInfo.sourceAppID,\n sourceAppVersion: appInitParams.applicationContext.launchInfo.sourceAppVersion,\n trigger: appInitParams.applicationContext.launchInfo.trigger,\n appSpecificParameters: appInitParams.applicationContext.launchInfo.appSpecificParameters,\n openingMode: appInitParams.applicationContext.launchInfo.openingMode,\n };\n } catch (err) {\n return null;\n }\n }\n\n try {\n const eventName = 'uc_app_init_result';\n const logger = this._createLogger(eventName, {\n [eventName]: Object.assign({\n messageID: this._createMessageId(),\n subBrandID: appInitParams.applicationContext.subBrandID,\n sequentialCorrelationID: await this._extractSequentialCorrelationID(appInitParams.applicationContext.launchInfo),\n isOk: appInitResultReportingDetails.errorCode === 0,\n errorCode: appInitResultReportingDetails.errorCode,\n errorDescription: appInitResultReportingDetails.errorDescription,\n targetAppID: appInitParams.applicationContext.appID,\n launchInfo: getLaunchInfo()\n }, Check.isNullOrUndefined(appInitResultReportingDetails.loadingTime) ? {} : {loadingTime: appInitResultReportingDetails.loadingTime})//add duration if it exists\n });\n\n logger.setCorrelationId(appInitParams.applicationContext.launchInfo?.businessCorrelationID)\n .setBusinessCorrelationID(appInitParams.applicationContext.launchInfo?.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.appInitResult failed`, err);\n }\n\n }\n\n private async _extractSequentialCorrelationID(launchInfo: IAppLaunchInfo): Promise<number> {\n if (!launchInfo?.businessCorrelationID) {\n return 1;\n } else {\n return (await this.services.appLauncher).getSequentialCorrelationIdHandler(launchInfo.businessCorrelationID)?.getCurrentValue() ?? 1\n }\n }\n\n appClosed(appClosedParams: IAppClosedTopicPayload) {\n try {\n\n\n const eventName = 'uc_app_closed';\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n sequentialCorrelationID: 1,\n targetAppID: appClosedParams.appID,\n appCloseReason: appClosedParams.closeReason, //TODO - what values should be here for closeReason\n channel: appClosedParams.launchInfo?.channel\n }\n });\n\n logger.setCorrelationId(appClosedParams.launchInfo?.businessCorrelationID)\n .setBusinessCorrelationID(appClosedParams.launchInfo?.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.appClosed failed`, err);\n }\n }\n\n appDisposed(appID: string, businessCorrelationID: string, target: string): void {\n try {\n const eventName = 'uc_app_disposed';\n const logger = this._createLogger(eventName, {\n [eventName]: {\n subBrandID: this.services.sdk.getSubBrandID(),\n targetAppID: appID\n }\n });\n\n logger.setCorrelationId(businessCorrelationID)\n .setBusinessCorrelationID(businessCorrelationID)\n .info(target);\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.appDisposed failed`, err);\n }\n }\n\n messageDisplay(params: IAnalyticsDisplayMessage): void {\n try {\n const eventName = 'uc_app_message_displayed';\n const extraDataEventName = 'extraData';\n\n const eventData = {\n [eventName]: {\n targetAppID: AppIdentifiers.CasinoClient,\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n displayMessageID: params.displayMessageID,\n sequentialCorrelationID: 1,\n displayMessageName: params.displayMessageName\n }\n }\n\n if (params.extraData) {\n eventData[extraDataEventName] = {\n totalStakes: params.extraData.totalStakes,\n netPosition: params.extraData.netPosition,\n totalWins: params.extraData.totalWins,\n totalLosses: params.extraData.totalLosses,\n bankrollCurr: params.extraData.bankrollCurr,\n amountBankroll: params.extraData.amountBankroll\n }\n }\n\n const logger = this._createLogger(eventName, eventData);\n\n logger.setCorrelationId(params.correlationID || params.businessCorrelationID)\n .setBusinessCorrelationID(params.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.messageDisplay failed`, err);\n }\n }\n\n private _getResolution() {\n return window.screen.width * window.devicePixelRatio + \"x\" + window.screen.height * window.devicePixelRatio;\n }\n\n private _authenticationResult(): void {\n try {\n const eventName = 'uc_authentication_result';\n const deviceInfo = getCasinofiedDeviceInfo(this.services);\n const logger = this._createLogger(eventName, {\n [eventName]: {\n isOk: true,\n errorCode: 0,\n errorDescription: \"\",\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n deviceInfo: {\n deviceTypeID: deviceInfo.deviceType,\n os: deviceInfo.OS,\n isHybrid: deviceInfo.isHybrid,\n isNative: deviceInfo.isNative,\n browserType: deviceInfo.browserType,\n resolution: this._getResolution()\n }\n }\n });\n\n logger.info();\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService._authenticationResult failed`, err);\n }\n }\n\n private _sessionClosed(): void {\n try {\n const eventName = 'uc_session_closed';\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n closingReasonID: 1\n }\n });\n\n logger.info();\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService._sessionClosed failed`, err);\n }\n }\n\n actionHandler(params: IActionHandlerEventParams): void {\n try {\n const eventName = 'uc_action_handler_result';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n sequentialCorrelationID: 1,\n actionName: params.actionName,\n actionHandlerStep: params.actionHandlerStep,\n actionResult: params.actionResult\n }\n });\n\n logger.setCorrelationId(params.businessCorrelationID)\n .setBusinessCorrelationID(params.businessCorrelationID)\n .info();\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.actionHandler failed`, err);\n }\n\n }\n\n messageActionTaken(params: IMessageActionTakenEventParams) {\n try {\n const eventName = 'uc_app_message_action_taken';\n\n const eventData: any = {\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n actionType: params.actionType,\n displayMessageName: params.displayMessageName,\n extraData: params.extraData\n }\n\n if(params.extraData) {\n eventData.extraData = params.extraData;\n }\n\n\n const logger: IElasticEventData = this._createLogger(eventName, {\n [eventName]: eventData\n });\n\n if (params.sendLogLevelOnly) {\n logger.setEventType(eventName, 'Log');\n }\n\n logger.setCorrelationId(params.correlationID || params.businessCorrelationID)\n .setBusinessCorrelationID(params.businessCorrelationID)\n .info();\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.messageActionTaken failed`, err);\n }\n }\n\n reportDuration(loadSubject: string, duration: number, appId: string): void {\n try {\n const eventName = 'uc_app_duration_report';\n const logger = this._createLogger(eventName, {\n [eventName]: {\n messageID: this._createMessageId(),\n subBrandID: this.services.sdk.getSubBrandID(),\n loadSubject: loadSubject,\n loadingTime: duration,\n targetAppID: appId\n }\n });\n logger.info();\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.reportDuration failed`, err);\n }\n }\n\n private _userClosedClient() {\n try {\n if (!this.services.user.isAuthorized) {\n return;\n }\n const eventName = 'clientStateChanged';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n subBrandID: this.services.sdk.getSubBrandID(),\n messageID: this._createMessageId(),\n clientStateID: 3,\n clientStateName: \"Closed\"\n }\n });\n\n logger.info();\n logger.info(\"nts-deposit-logs\");\n\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.userClosedClient failed`, err);\n }\n }\n\n private _userMinimizedClient() {\n try {\n if (!this.services.user.isAuthorized) {\n return;\n }\n const eventName = 'clientStateChanged';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n subBrandID: this.services.sdk.getSubBrandID(),\n messageID: this._createMessageId(),\n clientStateID: 2,\n clientStateName: \"Background\"\n }\n });\n\n logger.info();\n logger.info(\"nts-deposit-logs\");\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.userMinimizedClient failed`, err);\n }\n }\n\n private _userResumedClient() {\n try {\n if (!this.services.user.isAuthorized) {\n return;\n }\n const eventName = 'clientStateChanged';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n subBrandID: this.services.sdk.getSubBrandID(),\n messageID: this._createMessageId(),\n clientStateID: 1,\n clientStateName: \"Foreground\"\n }\n });\n\n logger.info();\n logger.info(\"nts-deposit-logs\");\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService.userResumedClient failed`, err);\n }\n }\n\n private _loginSessionResumed() {\n try {\n if (!this.services.user.isAuthorized) {\n return;\n }\n const eventName = 'clientStateChanged';\n\n const logger = this._createLogger(eventName, {\n [eventName]: {\n subBrandID: this.services.sdk.getSubBrandID(),\n messageID: this._createMessageId(),\n clientStateID: 4,\n clientStateName: \"SessionResumed\"\n }\n });\n\n logger.info();\n\n } catch (err) {\n this.services.logger.error(`CasinofiedAnalyticsService._loginSessionResumed failed`, err);\n }\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {IAbTestingAiSortGamesListsService, } from \"./ab-testing-ai-sort-games-lists.service.interface\";\n\n/*\n * Token structure for this feature:\n *\n * \"AbTestingAiSortGamesLists\": {\n * \"Properties\": {\n * \"arenas\": [\"homePage\", \"slots\"]\n * }\n * }\n *\n */\n\nexport class AbTestingAiSortGamesListsService extends ServiceBase implements IAbTestingAiSortGamesListsService {\n\n public arenaHasAiSorting(arenaName: string): boolean {\n return this.services.abTestingFeatureDataProvider.aiSortGamesLists.arenas.indexOf(arenaName) !== -1;\n }\n}\n","import { Check } from '@sparkware/app-utils';\nimport {CashierSessionType} from \"@sparkware/uc-sdk-core\";\n\nexport function isDepositSessionType(sessionType: number | string | null | undefined): boolean {\n if(Check.isNullOrUndefined(sessionType)) {\n return true;\n }\n\n sessionType = sessionType.toString();\n return sessionType === CashierSessionType.QuickDeposit.toString()\n || sessionType === CashierSessionType.FullCashier.toString()\n || sessionType === CashierSessionType.Deposit.toString();\n}\n\nexport function isCashoutSessionType(sessionType: number | string | null | undefined): boolean {\n // cashout should be open only when session type is defined and only if is withdrawal\n if(Check.isNullOrUndefined(sessionType)) {\n return false;\n }\n\n sessionType = sessionType.toString();\n return sessionType === CashierSessionType.Withdraw.toString();\n}","import {\n ICashierService,\n OpenCashierOptions,\n OpenDepositOptions,\n OpenTransactionHistoryOptions,\n OpenWithdrawOptions\n} from \"../../../common/interfaces/cashier.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {AppIdentifiers, CashierSessionType, ProductPackageToID} from \"@sparkware/uc-sdk-core\";\nimport {isCashoutSessionType, isDepositSessionType} from \"../../../common/utils/cashier-util\";\nimport {IActionHandlerEventParams} from \"../../../common/interfaces/casinofied-analytics-proxy.interface\";\nimport {\n UserEligibilityController_CashoutWidgetEligibilityRequest,\n UserEligibilityController_CashoutWidgetEligibilityResponse,\n UserEligibilityController_DepositWidgetEligibilityRequest,\n UserEligibilityController_DepositWidgetEligibilityResponse,\n UserEligibilityController_TransactionHistoryWidgetEligibilityRequest,\n UserEligibilityController_TransactionHistoryWidgetEligibilityResponse\n} from \"../api/api.service\";\nimport {IGeoLocationInfo} from \"../../../common/interfaces/geo-location-info.interface\";\nimport {\n PendingActionResultEnum\n} from \"../external-links/handlers/pending-action/pending-action.external-link-handler.interface\";\nimport {DialogButtonClickHandleResultEnum} from \"../dialog/dialog.service.interface\";\nimport {FeatureToggleStatusEnum, IFeatureToggleViewModel} from \"../ab-testing/feature-toggle.view-model.interface\";\n\n\ninterface IEligibilityCheckResult {\n blockedByPendingAction: boolean;\n isEligible: boolean;\n businessCorrelationID: string;\n abCheckActionHandlerEventData?: IActionHandlerEventParams;\n eligibilityActionHandlerEventData?: IActionHandlerEventParams;\n}\n\ntype UnifiedCashierWidgetEligibilityResponse =\n UserEligibilityController_TransactionHistoryWidgetEligibilityResponse |\n UserEligibilityController_DepositWidgetEligibilityResponse |\n UserEligibilityController_CashoutWidgetEligibilityResponse;\n\ntype UnifiedCashierWidgetEligibilityRequest =\n UserEligibilityController_TransactionHistoryWidgetEligibilityRequest |\n UserEligibilityController_DepositWidgetEligibilityRequest |\n UserEligibilityController_CashoutWidgetEligibilityRequest;\n\ntype INTSEligibilityCallback = (request: UnifiedCashierWidgetEligibilityRequest) => Promise<UnifiedCashierWidgetEligibilityResponse>;\n\nexport class CashierService extends ServiceBase implements ICashierService {\n\n getProductPackage(): ProductPackageToID {\n if (this.services.device.os.isMobileOS) {\n return ProductPackageToID.FULL_CASHIER_MOBILE;\n } else {\n return ProductPackageToID.FULL_CASHIER_PC;\n }\n }\n\n private _reportEligibilityEvents(eligibilityResult: IEligibilityCheckResult): void {\n if (eligibilityResult.abCheckActionHandlerEventData) {\n this.services.casinofiedAnalytics.actionHandler(eligibilityResult.abCheckActionHandlerEventData);\n }\n\n if (eligibilityResult.eligibilityActionHandlerEventData) {\n this.services.casinofiedAnalytics.actionHandler(eligibilityResult.eligibilityActionHandlerEventData);\n }\n }\n\n\n async isEligibleForDepositWidget(): Promise<boolean> {\n const eligibility = await this._getDepositWidgetEligibility();\n return eligibility.isEligible;\n }\n\n async isCashierInRedirectMode(): Promise<boolean> {\n return this.services.device.os.isMobileOS && !(await this.isEligibleForDepositWidget());\n }\n\n private async _evaluateNTSEligibility(appName: AppIdentifiers, ntsEligibilityCallback: INTSEligibilityCallback): Promise<UnifiedCashierWidgetEligibilityResponse> {\n try {\n let geoInfo: IGeoLocationInfo;\n try {\n geoInfo = await this.services.sdk.getGeoLocationInfo();\n }\n catch (geoError) {\n this.services.logger.error(`Failed to get geo info for ${appName} Widget Eligibility`, geoError);\n }\n return await ntsEligibilityCallback({\n LoginCountry: this.services.sdk.getCountryIso3(),\n StateID: geoInfo?.stateId\n });\n } catch (err) {\n this.services.logger.error(`Failed to call ${appName} Widget Eligibility`, err);\n return {\n isEligible: false,\n ineligibleReason: \"error\",\n errorDescription: `Failed to query NTS ${appName} eligibility`,\n errorID: 1,\n hasErrors: true\n }\n }\n }\n\n private async _getWidgetEligibility(appName: AppIdentifiers,\n analyticsActionName: string,\n checkPendingActions: () => Promise<PendingActionResultEnum>,\n getFeatureToggle: () => IFeatureToggleViewModel,\n ntsEligibilityCallback: INTSEligibilityCallback): Promise<IEligibilityCheckResult> {\n\n\n if (this.services.miniOrbit.isEnabled) {\n // In mini orbit, cashier is handled directly by the app.\n // For example, in poker, cashier is opened directly by the poker app\n return {\n isEligible: false,\n businessCorrelationID: \"\",\n blockedByPendingAction: false\n };\n }\n\n const widgetConfigs = this.services.configuration.servicesConfigs.AppLauncher.apps[appName];\n\n if (widgetConfigs.featureToggle === FeatureToggleStatusEnum.Disabled) {\n return {\n isEligible: false,\n businessCorrelationID: \"\",\n blockedByPendingAction: false\n };\n }\n\n const featureToggle = getFeatureToggle();\n\n if(this.services.configuration.servicesConfigs.PendingActions.enableExplicitCheck && featureToggle.isEnabled) {\n const pendingActionResult = await checkPendingActions();\n if(pendingActionResult !== PendingActionResultEnum.ContinueCurrentFlow) {\n return {\n isEligible: false,\n blockedByPendingAction: true,\n businessCorrelationID: \"\"\n }\n }\n }\n\n\n const businessCorrelationID = this.services.tools.getGuid();\n\n let abCheckActionHandlerEventData: IActionHandlerEventParams | null = null;\n let featureABData = featureToggle.getFeatureABData();\n if(featureABData) {\n abCheckActionHandlerEventData = {\n businessCorrelationID: businessCorrelationID,\n actionName: analyticsActionName,\n actionHandlerStep: 'ab_test_step',\n actionResult: {\n featureName: featureABData.FeatureName,\n testGroup: featureABData.GroupName,\n testID: featureABData.TestId\n }\n };\n }\n\n\n let ntsEligibility = await this._evaluateNTSEligibility(appName, ntsEligibilityCallback);\n const eligibilityActionHandlerEventData: IActionHandlerEventParams = {\n businessCorrelationID: businessCorrelationID,\n actionName: analyticsActionName,\n actionHandlerStep: 'eligibility_check_step',\n actionResult: {\n isEligible: ntsEligibility.isEligible,\n ineligibleReason: ntsEligibility.ineligibleReason,\n errorCode: ntsEligibility.errorID,\n errorMessage: ntsEligibility.errorDescription,\n hasError: Boolean(ntsEligibility.errorID)\n }\n };\n\n return {\n isEligible: featureToggle.isEnabled && ntsEligibility.isEligible,\n businessCorrelationID: businessCorrelationID,\n abCheckActionHandlerEventData: abCheckActionHandlerEventData,\n eligibilityActionHandlerEventData: eligibilityActionHandlerEventData,\n blockedByPendingAction: false\n };\n }\n\n private async _getDepositWidgetEligibility(): Promise<IEligibilityCheckResult> {\n //On mini orbit, we want Sport/Poker to open Deposit widget, so Eligibility checks are performed by them.\n if (this.services.miniOrbit.isEnabled) {\n return Promise.resolve(\n {\n isEligible: true,\n businessCorrelationID: this.services.tools.getGuid(),\n blockedByPendingAction: false\n }\n );\n }\n\n return this._getWidgetEligibility(\n AppIdentifiers.UnifiedCashier,\n 'deposit',\n async () => await (await this.services.externalLinks).openDepositPendingAction(),\n () => this.services.abTestingFeatureDataProvider.depositWidget,\n (params: UnifiedCashierWidgetEligibilityRequest) => this.services.api.userEligibilityController.depositWidgetEligibility(params)\n );\n }\n\n private async _getCashOutWidgetEligibility(): Promise<IEligibilityCheckResult> {\n return this._getWidgetEligibility(\n AppIdentifiers.UnifiedCashout,\n 'withdraw',\n () => Promise.resolve(PendingActionResultEnum.ContinueCurrentFlow),\n () => this.services.abTestingFeatureDataProvider.cashoutWidget,\n (params: UnifiedCashierWidgetEligibilityRequest) => this.services.api.userEligibilityController.cashoutWidgetEligibility(params)\n );\n }\n\n private async _getTransactionHistoryWidgetEligibility(): Promise<IEligibilityCheckResult> {\n return this._getWidgetEligibility(\n AppIdentifiers.TransactionHistory,\n 'transaction_history',\n async () => await (await this.services.externalLinks).openTransactionHistoryPendingAction(),\n () => this.services.abTestingFeatureDataProvider.transactionHistoryWidget,\n (params: UnifiedCashierWidgetEligibilityRequest) => this.services.api.userEligibilityController.transactionHistoryWidgetEligibility(params)\n );\n }\n\n\n async openDeposit(options: OpenDepositOptions): Promise<void> {\n\n if(!await this.services.user.ensureUserIsLoggedIn('CashierService.openDeposit')) {\n return;\n }\n\n const depositEligibility = await this._getDepositWidgetEligibility();\n\n if(depositEligibility.blockedByPendingAction) {\n return;\n }\n\n this._reportEligibilityEvents(depositEligibility);\n\n if (depositEligibility.isEligible) {\n await (await this.services.appLauncher).openDepositWidget({\n businessCorrelationID: depositEligibility.businessCorrelationID || this.services.tools.getGuid(),\n channel: options.channel,\n appSpecificParameters: {\n promoCode: options?.PromCode\n },\n ...options.launchInfo\n });\n } else {\n await this.openOldCashier({\n sessionType: CashierSessionType.QuickDeposit,\n ...options\n });\n }\n }\n\n async openWithdraw(options: OpenWithdrawOptions): Promise<void> {\n if(!await this.services.user.ensureUserIsLoggedIn('CashierService.openWithdraw')) {\n return;\n }\n\n const cashOutWidgetEligibility = await this._getCashOutWidgetEligibility();\n\n if(cashOutWidgetEligibility.blockedByPendingAction) {\n return;\n }\n\n this._reportEligibilityEvents(cashOutWidgetEligibility);\n\n if(this.services.configuration.servicesConfigs.AppLauncher.apps.PAYMENTS_CASHOUT.redirectToVerificationModuleForNonEligible) {\n\n if(cashOutWidgetEligibility.eligibilityActionHandlerEventData?.actionResult?.hasError) {\n this.services.dialog.showSimpleTextModal({\n text: this.services.regulation.getGeneralErrorMessage(),\n showEmptyTitle: true,\n buttons: [\n {\n text: this.services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n return;\n }\n\n if(!cashOutWidgetEligibility.isEligible) {\n await (await this.services.externalLinks).openUploadDocumentFromMyAccount();\n return;\n }\n }\n\n if (cashOutWidgetEligibility.isEligible) {\n await (await this.services.appLauncher).openCashoutWidget({\n businessCorrelationID: cashOutWidgetEligibility.businessCorrelationID || this.services.tools.getGuid(),\n channel: options.channel,\n sequentialCorrelationID: 1,\n ...options.launchInfo\n });\n } else {\n await this.openOldCashier({\n sessionType: CashierSessionType.CashOutDepositHistory,\n ...options\n });\n }\n }\n\n async openTransactionHistory(options: OpenTransactionHistoryOptions): Promise<void> {\n if(!await this.services.user.ensureUserIsLoggedIn('CashierService.openTransactionHistory')) {\n return;\n }\n\n const transactionHistoryWidgetEligibility = await this._getTransactionHistoryWidgetEligibility();\n\n if(transactionHistoryWidgetEligibility.blockedByPendingAction) {\n return;\n }\n\n this._reportEligibilityEvents(transactionHistoryWidgetEligibility);\n\n if (transactionHistoryWidgetEligibility.isEligible) {\n await (await this.services.appLauncher).openTransactionHistoryWidget({\n businessCorrelationID: transactionHistoryWidgetEligibility.businessCorrelationID || this.services.tools.getGuid(),\n channel: options.channel,\n ...options.launchInfo\n });\n } else {\n await this.openOldCashier({\n sessionType: CashierSessionType.TransactionHistory,\n ...options\n });\n }\n }\n\n async openCashier(options: OpenCashierOptions = {}): Promise<void> {\n if(!await this.services.user.ensureUserIsLoggedIn('CashierService.openCashier')) {\n return;\n }\n\n if (isDepositSessionType(options.sessionType)) {\n const depositEligibility = await this._getDepositWidgetEligibility();\n if(depositEligibility.blockedByPendingAction) {\n return;\n }\n\n this._reportEligibilityEvents(depositEligibility);\n if (depositEligibility.isEligible) {\n await (await this.services.appLauncher).openDepositWidget({\n businessCorrelationID: depositEligibility.businessCorrelationID || this.services.tools.getGuid(),\n channel: options.channel,\n appSpecificParameters: {\n promoCode: options?.PromCode || \"\"\n }\n });\n return;\n }\n } else if (isCashoutSessionType(options.sessionType)) {\n const cashOutEligibility = await this._getCashOutWidgetEligibility();\n if(cashOutEligibility.blockedByPendingAction) {\n return;\n }\n\n this._reportEligibilityEvents(cashOutEligibility);\n if (cashOutEligibility.isEligible) {\n await (await this.services.appLauncher).openCashoutWidget({\n businessCorrelationID: cashOutEligibility.businessCorrelationID || this.services.tools.getGuid(),\n channel: options.channel,\n });\n return;\n }\n }\n\n await this._openCashierExternalLink(options);\n }\n\n async openOldCashier(options: OpenCashierOptions = {}): Promise<void> {\n if(!await this.services.user.ensureUserIsLoggedIn('CashierService.openOldCashier')) {\n return;\n }\n await this._openCashierExternalLink(options);\n }\n\n private async _openCashierExternalLink(options: OpenCashierOptions = {}): Promise<void> {\n await (await this.services.externalLinks).openCashier(options);\n }\n\n async openUploadDocumentsFromCashier(): Promise<void> {\n return this._openCashierExternalLink({\n sessionType: CashierSessionType.VerifyId\n });\n }\n\n}","import {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {DisposableObject} from \"../../../../utils/disposable-object\";\n\nexport abstract class ExternalLinkHandlerBase extends DisposableObject {\n constructor(protected readonly services: IServiceFactoryExtended) {\n super()\n }\n\n\n protected _openInNewTab(url: string): void {\n if(this.services.device.hybrid.isHybrid) {\n this.services.hybrid.openExternalLink(url);\n } else {\n this.services.window.openInNewTab(url);\n }\n }\n}","import styled from \"styled-components\";\n\n\nexport const ExternalLinkIframeContainerBox = styled.div<{maxWidth: number; maxHeight: number; isMobileOS: boolean}>`\n position: relative;\n max-width: ${props => props.maxWidth + 'px'};\n max-height: ${props => props.maxHeight + 'px'};\n\n width: ${props => props.isMobileOS ? 'calc(100vw - env(safe-area-inset-left) - env(safe-area-inset-right))' : 'calc(100vw - 30px)'};\n height: ${props => props.isMobileOS ? '100%' : 'calc(100vh - 30px)'};\n box-sizing: border-box;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n max-width: unset;\n max-height: unset;\n overflow-y: auto;\n }\n`\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ExternalLinkCloseButtonWrapperBox = styledBox('ExternalLinkCloseButtonWrapperBox');","import styled from \"styled-components\";\n\nexport const ExternalLinkIframeBox = styled.iframe`\n width: 100%;\n height: 100%;\n`","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport Device from \"../../../sdk/src/utils/device/device\";\nimport classNames from \"classnames\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ExternalLinkIframeBox} from \"./boxes/external-link-iframe.box\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\n\ninterface ExternalLinkIframeComponentProps {\n id: string;\n httpVerb: 'GET' | 'POST';\n scrolling?: \"auto\" | 'no';\n url: string;\n onIframeCreated: (element: HTMLIFrameElement) => void;\n className?: string;\n}\n\nexport const ExternalLinkIframeComponent: React.FC<ExternalLinkIframeComponentProps> = observer((props) => {\n const services = useServices();\n \n const captureIframeElementRef = (element: HTMLIFrameElement) => {\n if(props.httpVerb === 'POST') {\n services.dom.performFormPostForUrl(props.url, {\n target: props.id\n });\n }\n\n props.onIframeCreated(element);\n }\n\n return (\n <ExternalLinkIframeBox id={props.id}\n name={props.id}\n src={props.httpVerb === 'POST' ? '' : props.url}\n ref={captureIframeElementRef}\n frameBorder=\"0\"\n scrolling={props.scrolling ?? \"auto\"}\n allow={Device.browser.getIframeAllowAttributeValue()}\n allowFullScreen={true}\n className={classNames(props.className, CyClass('cy-external-link-container'))}/>\n );\n});","import React from 'react';\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ExternalLinkIframeContainerBox} from \"./boxes/external-link-iframe-container.box\";\nimport {ExternalLinkCloseButtonWrapperBox} from \"./boxes/external-link-close-button-wrapper.box\";\nimport {ExternalLinkIframeComponent} from \"./external-link-iframe.component\";\n\n\ninterface ExternalLinkIframeInModalDialogComponentProps {\n url: string;\n dialogHandler: IModalDialogHandler;\n maxWidth: () => number;\n maxHeight: () => number;\n onIframeCreated: (element: HTMLIFrameElement) => void;\n hideCloseButton: boolean;\n id: string;\n scrolling?: \"auto\" | 'no';\n iframeClassName?: string;\n httpVerb: 'GET' | 'POST';\n}\n\n\n@observer\nexport class ExternalLinkIframeInModalDialogComponent extends OrbitComponent<ExternalLinkIframeInModalDialogComponentProps> {\n private _onCloseClick = () => {\n this.props.dialogHandler.close();\n }\n\n private _renderCloseButton = () => {\n if (this.services.device.os.isMobileOS || this.props.hideCloseButton) {\n return null;\n }\n\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n\n return (\n <ExternalLinkCloseButtonWrapperBox className={CyClass('cy-modal-dialog-x-close-button')}\n onClick={this._onCloseClick}>\n <CloseIcon size={1.6}/>\n </ExternalLinkCloseButtonWrapperBox>\n );\n }\n\n render() {\n return (\n <ExternalLinkIframeContainerBox maxWidth={this.props.maxWidth()}\n maxHeight={this.props.maxHeight()}\n isMobileOS={this.services.device.os.isMobileOS}>\n\n {this._renderCloseButton()}\n\n <ExternalLinkIframeComponent id={this.props.id}\n httpVerb={this.props.httpVerb}\n url={this.props.url}\n scrolling={this.props.scrolling}\n className={this.props.iframeClassName}\n onIframeCreated={this.props.onIframeCreated}/>\n </ExternalLinkIframeContainerBox>\n );\n }\n}","import React from 'react';\nimport {ExternalLinkIframeInModalDialogComponent} from \"../../../components/external-links/external-link-iframe-in-modal-dialog.component\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IModalDialogHandler} from \"../../dialog/dialog.service.interface\";\nimport { observable, runInAction, makeObservable } from \"mobx\";\nimport {NullableNumber} from \"../../../../common/types/nullable-types\";\nimport {ExternalLinksZIndexes} from \"../external-links-z-indexes\";\nimport {ExternalLinkIframeComponent} from \"../../../components/external-links/external-link-iframe.component\";\n\nexport interface ExternalLinkIframeRendererOptions {\n maxWidth: number;\n maxHeight: number;\n zIndex: number;\n shouldBeClosedOnlyByUser?: boolean;\n onClosed: () => Promise<void>;\n hideCloseButton: boolean;\n analyticsAction: string;\n httpVerb: 'GET' | 'POST';\n createAsHidden?: boolean;\n iframeScrolling?: \"auto\" | \"no\";\n iframeExtraCssClass?: string;\n}\n\nexport class ExternalLinkIframeRenderer {\n constructor(private readonly services: IServiceFactoryExtended,\n private readonly _options: ExternalLinkIframeRendererOptions) {\n makeObservable(this);\n\n this._id = services.tools.getGuid();\n }\n dispose(): void {\n this._dialogHandler?.close();\n }\n\n display(): void {\n this._dialogHandler?.display();\n }\n\n @observable.ref\n private _customMaxWidth: NullableNumber = null;\n @observable.ref\n private _customMaxHeight: NullableNumber = null;\n setMaxSize(maxWidth: number, maxHeight: number): void {\n runInAction(() => {\n this._customMaxWidth = maxWidth;\n this._customMaxHeight = maxHeight;\n });\n }\n\n getMaxWidth = (): number => {\n return this._customMaxWidth ?? this._options.maxWidth;\n }\n getMaxHeight = (): number => {\n return this._customMaxHeight ?? this._options.maxHeight;\n }\n\n\n private readonly _id: string;\n\n private _dialogHandler: IModalDialogHandler | null = null;\n @observable.ref\n iframeElementRef: HTMLIFrameElement | null = null;\n\n\n private _onIframeCreated = (iframeElement: HTMLIFrameElement | null) => {\n runInAction(() => {\n this.iframeElementRef = iframeElement;\n });\n };\n\n showInModalDialog(url: string): Promise<void> {\n return new Promise<void>((resolve) => {\n\n this.services.dialog.showModal((dialogHandler) => {\n this._dialogHandler = dialogHandler;\n return (\n <ExternalLinkIframeInModalDialogComponent id={this._id}\n url={url}\n maxWidth={this.getMaxWidth}\n maxHeight={this.getMaxHeight}\n hideCloseButton={this._options.hideCloseButton}\n onIframeCreated={this._onIframeCreated}\n dialogHandler={dialogHandler}\n scrolling={this._options.iframeScrolling}\n iframeClassName={this._options.iframeExtraCssClass}\n httpVerb={this._options.httpVerb}/>\n )\n }, {\n disableFullscreenMobile: false,\n hideCloseButton: true,\n noDefaultContentPadding: true,\n isHighPriority: true,\n hideBorders: this.services.mediaQuery.lAndBelow,\n forceZOrder: this._options.zIndex,\n shouldBeClosedOnlyByUser: this._options.shouldBeClosedOnlyByUser,\n overflow: 'unset',\n createAsHidden: this._options.createAsHidden,\n forceFullscreenTablet: true,\n onClosedByXButton: () => {\n this.services.analytics.sendTechnicalEvent(this._options.analyticsAction, 'CloseBtnClicked');\n },\n onClosed: () => {\n this._options.onClosed().then(() => resolve());\n }\n });\n });\n }\n\n renderAsReactElement(url: string): React.ReactElement {\n return (\n <ExternalLinkIframeComponent id={this._id}\n httpVerb={this._options.httpVerb}\n url={url}\n scrolling={this._options.iframeScrolling}\n className={this._options.iframeExtraCssClass}\n onIframeCreated={this._onIframeCreated}/>\n );\n }\n\n\n updateZIndex(zIndex: ExternalLinksZIndexes): void {\n this._dialogHandler.zIndex = zIndex;\n }\n\n get isHidden(): boolean {\n if(this._dialogHandler) {\n return this._dialogHandler.isHidden;\n }\n\n return false;\n }\n\n}","import {ExternalLinkHandlerBase} from \"./external-link-handler-base\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {\n ExternalLinkIframeRenderer,\n ExternalLinkIframeRendererOptions\n} from \"../renderers/external-link-iframe.renderer\";\nimport {GNWP_SOURCES} from \"../../gnwp/gnwp-consts\";\nimport {\n NullableUndefinedNumber,\n NullableUndefinedString, UndefinedNumber,\n UndefinedString\n} from \"../../../../common/types/nullable-types\";\nimport {\n AreaType,\n ControlCenterDeeplink,\n ControlCenterOpenSource,\n IChannel,\n IControlCenterFullSpecificParams\n} from \"@sparkware/uc-sdk-core\";\nimport {isCashoutSessionType, isDepositSessionType} from \"../../../../common/utils/cashier-util\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../common/const/casinofied-analytics-consts\";\nimport {OpenCashierOptions, OpenDepositOptions} from \"../../../../common/interfaces/cashier.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {CIPropRead} from \"../../../../utils/case-insensitive-property-reader\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\n\nexport type ExternalLinkInIframeRendererParams = Omit<ExternalLinkIframeRendererOptions, 'onClosed'>;\n\nexport abstract class ExternalLinkInIframeHandlerBase extends ExternalLinkHandlerBase {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this.addSdkEventSubscription(this.services.sdk.events.onPostMessage(this._handlePostMessage));\n }\n\n protected abstract _onPostMessageReceived(message: MessageEvent): Promise<void>;\n protected abstract _getGnwpSource(): GNWP_SOURCES;\n\n protected _parseMessageData(message: MessageEvent): any {\n if(Check.isString(message.data)) {\n try {\n return JSON.parse(message.data);\n } catch (err) {\n this.services.logger.error(`Failed to parse external link post message data: ${message.data}`, err);\n }\n\n }\n\n return message.data;\n }\n\n protected _extractActionId(message: MessageEvent): NullableUndefinedString {\n return CIPropRead.getStringProperty('actionId', this._parseMessageData(message));\n }\n\n protected _extractUrl(message: MessageEvent): NullableUndefinedString {\n return CIPropRead.getStringProperty('url', this._parseMessageData(message));\n }\n\n protected _extractGameId(message: MessageEvent): NullableUndefinedNumber {\n return CIPropRead.getNumericProperty('gameId', this._parseMessageData(message));\n }\n\n protected _extractPromoCode(message: MessageEvent): NullableUndefinedString {\n return CIPropRead.getStringProperty(\"PromCode\", this._parseMessageData(message))\n || CIPropRead.getStringProperty(\"promoCode\", this._parseMessageData(message));\n }\n\n protected _extractCashierTabId(message: MessageEvent): UndefinedNumber {\n return CIPropRead.getNumericProperty(\"TabId\", this._parseMessageData(message)) ?? undefined;\n }\n\n protected _extractMyAccountTabId(message: MessageEvent): MyAccountTab | undefined {\n return CIPropRead.getNumericProperty(\"TabId\", this._parseMessageData(message)) ?? undefined;\n }\n\n\n private _handlePostMessage = async (message: MessageEvent) => {\n if(message.source !== this._renderer?.iframeElementRef?.contentWindow) {\n return;\n }\n\n this._sendAnalytics(message);\n await this._onPostMessageReceived(message);\n }\n\n protected _sendAnalytics(message: MessageEvent): void {\n const action = `ExternalLink ${this._getGnwpSource()}`;\n if(message.data) {\n this.services.analytics.sendTechnicalEvent(action, `PostMessage: ${JSON.stringify(message.data)}`);\n } else {\n this.services.analytics.sendTechnicalEvent(action);\n }\n }\n\n protected _renderer: ExternalLinkIframeRenderer | null = null;\n protected _getRenderer(paramsOverride?: Partial<ExternalLinkInIframeRendererParams>): ExternalLinkIframeRenderer {\n if(!this._renderer) {\n this._renderer = new ExternalLinkIframeRenderer(this.services, {\n ...this._getIframeRendererParams(),\n ...paramsOverride,\n onClosed: this._onExternalLinkClosed\n });\n }\n\n return this._renderer;\n }\n\n protected abstract _getIframeRendererParams(): ExternalLinkInIframeRendererParams;\n\n protected _onExternalLinkClosed = async () => {\n this.services.sdk.eventsTrigger.externalLinkClosed({\n gnwpSource: this._getGnwpSource()\n });\n this.dispose();\n }\n\n protected _closeExternalLinkDialog = () => {\n this._renderer?.dispose();\n this._renderer = null;\n }\n\n protected async _showExternalLinkDialog(url: string, paramsOverride?: Partial<ExternalLinkInIframeRendererParams>): Promise<void> {\n this.services.sdk.eventsTrigger.closeAllSecondWebViews();\n await this._getRenderer(paramsOverride).showInModalDialog(url);\n }\n\n protected _renderExternalLinkIframe(url: string, paramsOverride?: Partial<ExternalLinkInIframeRendererParams>) {\n return this._getRenderer(paramsOverride).renderAsReactElement(url);\n }\n\n protected async _redirect(url: string): Promise<void> {\n if(this._getIframeRendererParams().httpVerb === 'POST') {\n this.services.dom.performFormPostForUrl(url, {\n target: '_self'\n });\n } else {\n await this.services.location.redirect(url);\n }\n }\n\n protected _openInNewTab(url: string): void {\n if(this._getIframeRendererParams().httpVerb === 'POST') {\n this.services.dom.performFormPostForUrl(url, {\n target: '_blank'\n });\n } else {\n super._openInNewTab(url);\n }\n }\n\n protected async _openQuickDeposit(options: {promCode: UndefinedString; channel: IChannel}): Promise<void> {\n this._closeExternalLinkDialog();\n const openDepositOptions: OpenDepositOptions = {\n channel: options.channel\n };\n\n if(options.promCode) {\n openDepositOptions.PromCode = options.promCode\n }\n\n await this.services.cashier.openDeposit(openDepositOptions);\n }\n\n protected async _openCashier(options: {\n tabId: UndefinedNumber;\n promCode: NullableUndefinedString;\n channel: {\n area: AreaType;\n element?: string;\n source: string;\n }\n }): Promise<void> {\n\n this._closeExternalLinkDialog();\n\n let channelElement = options.channel.element;\n\n if(!channelElement) {\n if (isDepositSessionType(options.tabId)) {\n channelElement = CHANNEL_ELEMENTS.depositButton;\n } else if (isCashoutSessionType(options.tabId)) {\n channelElement = CHANNEL_ELEMENTS.withdrawButton;\n }\n }\n\n const params: OpenCashierOptions = {\n channel: {\n source: options.channel.source,\n element: channelElement,\n area: options.channel.area\n }\n }\n\n if(options.promCode) {\n params.PromCode = options.promCode;\n }\n\n if(options.tabId) {\n params.sessionType = options.tabId;\n }\n\n await this.services.cashier.openCashier(params);\n }\n\n protected async _redirectToURL(message:MessageEvent):Promise<void>{\n if('redirectclient' === this._getParsedData('message', message)?.toLowerCase()) {\n const url = this._getParsedData('url', message);\n if(url) {\n if(this.services.device.hybrid.isHybrid)\n {\n this.services.hybrid.openExternalLink(url);\n }\n else\n {\n await this.services.location.redirect(url)\n }\n }\n }\n }\n\n private _getParsedData(propName:string, message: MessageEvent<any>):string{\n return CIPropRead.getStringProperty(propName, this._parseMessageData(message));\n }\n\n protected _extractChannel(message: MessageEvent): IChannel {\n const parsedChannelData = CIPropRead.getShallowLowercasedObject('channel', this._parseMessageData(message)) || {};\n const {area = AreaType.FullCashier, element = CHANNEL_ELEMENTS.cashierAction, source = CHANNEL_SOURCE.cashier} = parsedChannelData;\n return {\n area:area,\n element: element,\n source: source\n };\n }\n\n protected _extractAppSpecificParameters(message: MessageEvent): IControlCenterFullSpecificParams {\n const parsedAppSpecificParamsData = CIPropRead.getShallowLowercasedObject('appSpecificParameters', this._parseMessageData(message)) || {};\n const {deeplink = ControlCenterDeeplink.Main, source = ControlCenterOpenSource.Cashier} = parsedAppSpecificParamsData;\n return {\n deeplink: deeplink,\n source: source\n };\n }\n}","import {\n IOpenRegistrationOptions,\n IRegistrationExternalLinkHandler, REGISTRATION_DATA_KEY\n} from \"./registration.external-link-handler.interface\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {NullableUndefinedString} from \"../../../../../common/types/nullable-types\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport Store from \"../../../../../sdk/src/utils/store\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {IRegistrationGnwpRequest} from \"../../../gnwp/gnwp.service.interface\";\n\n\n\nconst MEMBERSHIP_POST_ACTIONS = {\n PLAY: '1',\n DEPOSIT: '2',\n BACK: '3',\n CASHIER_UPLOAD_DOCUMENTS: '7',\n REGISTRATION_COMPLETED: '8',\n OPEN_BANK_ID: '64',\n DOWNLOAD_APP: '68',\n STORE_REGISTRATION_COOKIES_DATA: '69',\n SHOW_LOGIN: '73',\n MY_ACCOUNT_UPLOAD_DOCUMENTS: '75',\n REDIRECT_CLIENT: '77',\n CONTROL_CENTER: '101'\n};\n\nexport class RegistrationExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IRegistrationExternalLinkHandler {\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.MEMBERSHIP;\n }\n\n\n async openRegistration(options?: IOpenRegistrationOptions): Promise<void> {\n if (this.services.user.isAuthorized) {\n throw new Error('openRegistration should not be called for authorized user');\n }\n\n\n if (await this._shouldOpenRegistrationWidget()) {\n await this._openRegistrationWidget(options)\n } else {\n await this._openRegistrationFromExternalLink(options);\n }\n }\n\n private async _shouldOpenRegistrationWidget(): Promise<boolean> {\n const registrationWidgetFeatureToggle = await this.services.abTestingFeatureDataProvider.registrationWidgetAsync();\n return registrationWidgetFeatureToggle.isEnabled;\n }\n\n private async _openRegistrationWidget(options?: IOpenRegistrationOptions): Promise<void> {\n await (await this.services.appLauncher).openRegistrationWidget(options);\n }\n\n private async _openRegistrationFromExternalLink(options?: IOpenRegistrationOptions): Promise<void> {\n const url = await this._getGnwpUrl(options);\n await this._showExternalLinkDialog(url);\n }\n\n protected async _getGnwpUrl(options: IOpenRegistrationOptions): Promise<string> {\n let marketingData = (await this.services.marketing).getMarketingData(options.marketingParams);\n const gnwpRequest: IRegistrationGnwpRequest = {\n marketingData: marketingData,\n };\n\n if(options.promoCode) {\n gnwpRequest.promoCode = options.promoCode;\n }\n\n gnwpRequest.enableNativeAppDownload = this.services.regulation.shouldEnforceHybridAppForMobileWeb();\n\n return await (await this.services.gnwp).getRegistrationUrl(gnwpRequest);\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1008,\n maxHeight: 730,\n zIndex: ExternalLinksZIndexes.Membership,\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: this._shouldHideCloseButton,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n iframeExtraCssClass: CyClass('cy-registration-external-link-container')\n };\n }\n\n protected get _shouldHideCloseButton(): boolean {\n return false;\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise<void> {\n const actionId = this._extractActionId(message);\n if (!actionId) {\n return;\n }\n\n switch (actionId) {\n case MEMBERSHIP_POST_ACTIONS.PLAY:\n case MEMBERSHIP_POST_ACTIONS.BACK:\n this._closeExternalLinkDialog();\n break;\n case MEMBERSHIP_POST_ACTIONS.DEPOSIT:\n await this._openCashier({\n tabId: undefined,\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.registration,\n area: AreaType.StraightToCashier,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n break;\n case MEMBERSHIP_POST_ACTIONS.CASHIER_UPLOAD_DOCUMENTS:\n await this._openUploadDocumentsFromCashier();\n break;\n case MEMBERSHIP_POST_ACTIONS.SHOW_LOGIN:\n await this._openLoginForm();\n break;\n case MEMBERSHIP_POST_ACTIONS.REGISTRATION_COMPLETED:\n const messageData = this._parseMessageData(message);\n await this._onRegistrationCompleted({\n UserInfo: CIPropRead.getStringProperty('UserInfo', messageData),\n SourceProductPackage: CIPropRead.getStringProperty('SourceProductPackage', messageData)\n });\n break;\n case MEMBERSHIP_POST_ACTIONS.STORE_REGISTRATION_COOKIES_DATA:\n const registrationCookiesData = CIPropRead.getProperty('StoreRegistrationCookiesData', this._parseMessageData(message));\n if (registrationCookiesData) {\n await this._storeRegistrationCookie(registrationCookiesData);\n }\n break;\n case MEMBERSHIP_POST_ACTIONS.MY_ACCOUNT_UPLOAD_DOCUMENTS:\n await this._openUploadDocumentsFromMyAccount();\n break;\n case MEMBERSHIP_POST_ACTIONS.OPEN_BANK_ID:\n const url = CIPropRead.getStringProperty('AppUrl', this._parseMessageData(message));\n if (url) {\n await this._openBankId(url);\n } else {\n this.services.logger.error('Registration try to open bank ID with empty URL');\n }\n break;\n case MEMBERSHIP_POST_ACTIONS.DOWNLOAD_APP:\n await this._openDownloadAppPage();\n break;\n case MEMBERSHIP_POST_ACTIONS.REDIRECT_CLIENT:\n await this._redirectToURL(message)\n break;\n case MEMBERSHIP_POST_ACTIONS.CONTROL_CENTER:\n this._openControlCenter();\n break;\n default:\n this.services.logger.debug(`Received unknown actionId ${actionId} from Registration`);\n }\n }\n\n protected async _openLoginForm(): Promise<void> {\n this._closeExternalLinkDialog();\n await this.services.user.openLogin();\n }\n\n protected async _onRegistrationCompleted(params: {UserInfo: string, SourceProductPackage: string}): Promise<void> {\n this.services.sdk.eventsTrigger.registrationCompleted(params);\n }\n\n protected async _openUploadDocumentsFromCashier(): Promise<void> {\n this._closeExternalLinkDialog();\n await this.services.cashier.openUploadDocumentsFromCashier();\n }\n\n protected async _openUploadDocumentsFromMyAccount(): Promise<void> {\n this._closeExternalLinkDialog();\n await (await this.services.externalLinks).openUploadDocumentFromMyAccount();\n }\n\n protected async _openBankId(url: NullableUndefinedString): Promise<void> {\n (await this.services.externalLinks).openBankId(url)\n }\n\n protected async _openDownloadAppPage(): Promise<void> {\n await this.services.location.redirect(this.services.sdk.getDownloadAppLink());\n }\n\n protected async _storeRegistrationCookie(registrationCookiesData: any): Promise<void> {\n Store.set(REGISTRATION_DATA_KEY, JSON.stringify(registrationCookiesData));\n }\n\n protected async _openControlCenter(): Promise<void> {\n await (await this.services.appLauncher).openControlCenterFull({\n channel: {\n source: CHANNEL_SOURCE.uk_acocunt_miration,\n area: AreaType.UserArea,\n },\n businessCorrelationID: this.services.tools.getGuid()\n })\n }\n}","import {\n IMyAccountExternalLinkHandler,\n IOpenMyAccountOptions\n} from \"./my-account.external-link-handler.interface\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {NullableUndefinedNumber, NullableUndefinedString} from \"../../../../../common/types/nullable-types\";\nimport {OpenRichPageOptions} from \"../../external-links.service.interface\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nconst MY_ACCOUNT_POST_ACTIONS = {\n GAME: '1',\n CASHIER: '6',\n QUICK_DEPOSIT: '7',\n CASINO: '22',\n SPORT: '24',\n EXTERNAL_URL: '27',\n CLOSE: 'CloseMe',\n RICH: '56',\n INTERNAL_URL: '32'\n}\n\n\nexport class MyAccountExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IMyAccountExternalLinkHandler {\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.MY_ACCOUNT;\n }\n\n async openMyAccount(options?: IOpenMyAccountOptions): Promise<void> {\n\n if(!await this.services.user.ensureUserIsLoggedIn('MyAccountExternalLinkHandler')) {\n return;\n }\n\n if(options?.tabId === MyAccountTab.UploadDocuments) {\n await (await this.services.externalLinks).openUploadDocumentFromMyAccount();\n return;\n }\n\n const url = await this._getGnwpUrl(options);\n await this._showExternalLinkDialog(url);\n\n }\n\n\n protected async _getGnwpUrl(options?: IOpenMyAccountOptions): Promise<string> {\n return await (await this.services.gnwp).getMyAccountUrl({\n tabId: options?.tabId,\n });\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 940,\n maxHeight: 658,\n zIndex: ExternalLinksZIndexes.MyAccount,\n hideCloseButton: false,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n iframeExtraCssClass: CyClass('cy-my-account-external-link-container')\n };\n }\n\n protected async _onPostMessageReceived(message:MessageEvent): Promise<void> {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n switch (actionId) {\n case MY_ACCOUNT_POST_ACTIONS.QUICK_DEPOSIT:\n await this._openQuickDeposit({\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.myAccount,\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n break;\n case MY_ACCOUNT_POST_ACTIONS.CASHIER:\n await this._openCashier({\n tabId: this._extractCashierTabId(message),\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.myAccount,\n area: AreaType.Header\n }\n });\n break;\n case MY_ACCOUNT_POST_ACTIONS.GAME:\n await this._openGame( {\n gameType: this._extractGameId(message),\n originDeepLinkID: CIPropRead.getNumericProperty('originDeepLinkID',\n CIPropRead.getProperty('origininformation', this._parseMessageData(message)))\n });\n break;\n case MY_ACCOUNT_POST_ACTIONS.RICH:\n await this._openRichPage({\n campaignId: CIPropRead.getStringProperty('campaignID', this._parseMessageData(message))\n });\n break;\n case MY_ACCOUNT_POST_ACTIONS.SPORT:\n await this._openSport();\n break;\n case MY_ACCOUNT_POST_ACTIONS.CASINO:\n case MY_ACCOUNT_POST_ACTIONS.CLOSE:\n this._closeExternalLinkDialog();\n break;\n case MY_ACCOUNT_POST_ACTIONS.INTERNAL_URL:\n const internalUrl = this._extractUrl(message);\n if(internalUrl) {\n await this._openInternalUrl(internalUrl)\n } else {\n this.services.logger.error('My Account redirect to internal url failed because no URL provided');\n }\n\n break;\n case MY_ACCOUNT_POST_ACTIONS.EXTERNAL_URL:\n const externalUrl = this._extractUrl(message)\n if(externalUrl) {\n await this._openExternalUrl(externalUrl);\n } else {\n this.services.logger.error('My Account redirect to external url failed because no URL provided');\n }\n break;\n default:\n this.services.logger.debug(`Received unknown actionId ${actionId} from My account`);\n\n }\n }\n\n protected async _openGame(options: {gameType: NullableUndefinedNumber, originDeepLinkID: NullableUndefinedNumber}): Promise<void> {\n this._closeExternalLinkDialog();\n if(!options.gameType) {\n this.services.logger.debug('My account sent open game event with undefined game type');\n return;\n }\n\n const gameInfo = await this.services.games.getGameInfo(options.gameType);\n\n if(!gameInfo) {\n this.services.logger.debug(`Can't open game ${options.gameType} from My Account because is not in the layout`);\n return;\n }\n\n await gameInfo.open({\n isRealMode: true,\n referrerId: options.originDeepLinkID,\n });\n }\n\n protected async _openRichPage(options: OpenRichPageOptions): Promise<void> {\n this._closeExternalLinkDialog();\n await (await this.services.externalLinks).openRichPage(options);\n }\n\n protected async _openSport(): Promise<void> {\n this._closeExternalLinkDialog();\n await this.services.linksNavigation.openSport();\n }\n\n protected async _openInternalUrl(internalUrl: NullableUndefinedString): Promise<void> {\n this._closeExternalLinkDialog();\n if(internalUrl) {\n await this.services.linksNavigation.openUrl({\n url: internalUrl,\n openMode: \"clientSideNavigation\"\n });\n } else {\n this.services.logger.error('My account asked to open internal url but no url was provided in the post message');\n }\n }\n\n protected async _openExternalUrl(externalUrl: NullableUndefinedString): Promise<void> {\n this._closeExternalLinkDialog();\n if(externalUrl) {\n await this.services.linksNavigation.openUrl({\n url: externalUrl,\n openMode: \"newTab\"\n });\n } else {\n this.services.logger.error('My account asked to open external url but no url was provided in the post message');\n }\n\n }\n\n}\n","import {ICashierExternalLinkHandler} from \"./cashier.external-link-handler.interface\";\nimport {OpenCashierOptions} from \"../../../../../common/interfaces/cashier.service.interface\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nexport enum CASHIER_POST_ACTIONS {\n OPEN_CONTROL_CENTER = '101'\n}\n\nexport class CashierExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements ICashierExternalLinkHandler {\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.CASHIER;\n }\n\n private get _isOnHybrid(): boolean {\n return this.services.device.hybrid.inCasino || this.services.device.hybrid.isEmbedded;\n }\n\n private get _isOnMacSafari(): boolean {\n return this.services.device.os.isMacOS && this.services.device.browser.isSafari && !this.services.device.isProbablyIOSDevice;\n }\n\n private get _isMobileOS(): boolean {\n return this.services.device.os.isMobileOS || this.services.device.isProbablyIOSDevice;\n }\n\n async openCashier(options?: OpenCashierOptions): Promise<void> {\n if(!await this.services.user.ensureUserIsLoggedIn('Cashier')) {\n return;\n }\n\n const url = await this._getGnwpUrl(options);\n\n if(this._isOnHybrid) {\n this.services.hybrid.openExternalLink(url);\n } else if(this._isOnMacSafari) {\n this._openInNewTab(url);\n } else if(this._isMobileOS) {\n await this._redirect(url);\n } else {\n await this._showExternalLinkDialog(url);\n }\n }\n\n protected async _getGnwpUrl(options?: OpenCashierOptions): Promise<string> {\n return await (await this.services.gnwp).getCashierUrl({\n target: this._isMobileOS ? 1 : 2, //1 - redirect, 2 = iframe\n sessionType: options?.sessionType,\n promCode: options?.PromCode\n });\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1017,\n maxHeight: 686,\n zIndex: ExternalLinksZIndexes.Cashier,\n hideCloseButton: false,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n iframeExtraCssClass: CyClass('cy-cashier-external-link-container')\n };\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise<void> {\n\n if(CIPropRead.getStringProperty('state', this._parseMessageData(message.data))?.toLowerCase() === 'backtogame') {\n this._closeExternalLinkDialog();\n return;\n }\n\n const actionId = this._extractActionId(message);\n\n switch (actionId) {\n case CASHIER_POST_ACTIONS.OPEN_CONTROL_CENTER:\n this._openControlCenter(message);\n break;\n default:\n this.services.logger.debug('CashierExternalLinkHandler: Unknown actionId', actionId);\n break;\n }\n\n }\n\n private async _openControlCenter(message):Promise<void> {\n this._closeExternalLinkDialog();\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: this._extractChannel(message),\n appSpecificParameters: this._extractAppSpecificParameters(message)\n });\n }\n\n\n}","import {IOmgExternalLinkHandler} from \"./omg.external-link-handler.interface\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {IOpenMyAccountOptions} from \"../my-account/my-account.external-link-handler.interface\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType, ControlCenterOpenSource} from \"@sparkware/uc-sdk-core\";\nimport {\n NullableUndefinedNumber,\n NullableUndefinedString\n} from \"../../../../../common/types/nullable-types\";\nimport {IOpenOmgOptions} from \"../../external-links.service.interface\";\nimport {IOmgHandlerHook} from \"./omg-handler.hook.interface\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nconst OMG_POST_ACTIONS = {\n SHOW_ME: 'ShowMe',\n CLOSE_ME: 'CloseMe',\n OPEN_REAL_GAME: '1',\n CASHIER: '6',\n QUICK_DEPOSIT: '7',\n MY_ACCOUNT: '21',\n SPORT: '24',\n EXTERNAL_LINK: '27',\n INTERNAL_URL: '32',\n OPEN_DEMO_GAME: '36',\n RICH: '56',\n CONTROL_CENTER: '101'\n}\n\nexport class OmgExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IOmgExternalLinkHandler, IOmgHandlerHook {\n\n\n async openOmg(options: IOpenOmgOptions): Promise<void> {\n if(!this.services.user.isAuthorized) {\n this.services.logger.error(`Attempt to open OMG messages for unauthorized user`);\n return;\n }\n\n\n\n\n\n const url = await this._getGnwpUrl(options);\n await this._showExternalLinkDialog(url, {\n zIndex: options.zIndex\n });\n\n this._showMeTimeout = setTimeout(() => {\n if(this._renderer?.isHidden) {\n //this is for fixing bug https://dev.azure.com/888holdings/GamingNDL/_workitems/edit/2234307\n //When we open an OMG it is open in a hidden dialog and is shown when the OMG sends showMe event.\n //If the OMG doesn't send showMe event and the user opens another one and another one etc. the dialogs keeps accumulating into the DOM.\n this._closeExternalLinkDialog();\n }\n }, 20000);\n }\n\n private _showMeTimeout: any = null;\n\n protected async _getGnwpUrl(options: IOpenOmgOptions): Promise<string> {\n return await (await this.services.gnwp).getOmgUrl({\n openedWithinGame: options.openedWithinGame,\n messages: options.messages\n });\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.OMG;\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1024,\n maxHeight: 768,\n httpVerb: 'POST',\n zIndex: ExternalLinksZIndexes.OmgBehindTheGame,\n hideCloseButton: true,\n analyticsAction: this._getGnwpSource(),\n createAsHidden: true,\n iframeScrolling: this.services.device.os.isMobileOS ? \"no\" : \"auto\",\n iframeExtraCssClass: CyClass('cy-omg-external-link-container')\n };\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise<void> {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n\n switch (actionId) {\n case OMG_POST_ACTIONS.SHOW_ME:\n clearTimeout(this._showMeTimeout);\n const showMeMessageData = this._parseMessageData(message);\n const width = CIPropRead.getNumericProperty(\"Width\", showMeMessageData);\n const height = CIPropRead.getNumericProperty(\"Height\", showMeMessageData);\n this._onShowMe(width, height);\n this.services.sdk.eventsTrigger.omgDisplayed(this);\n break;\n case OMG_POST_ACTIONS.CLOSE_ME:\n this._closeExternalLinkDialog();\n break;\n case OMG_POST_ACTIONS.MY_ACCOUNT:\n await this._openMyAccount({\n tabId: this._extractMyAccountTabId(message)\n })\n break;\n case OMG_POST_ACTIONS.CASHIER:\n await this._openCashier({\n tabId: this._extractCashierTabId(message),\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.omg,\n area: AreaType.OMG,\n element: OMG_POST_ACTIONS.CASHIER\n }\n });\n break;\n case OMG_POST_ACTIONS.QUICK_DEPOSIT:\n await this._openQuickDeposit({\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.omg,\n area: AreaType.OMG,\n element: OMG_POST_ACTIONS.CASHIER\n }\n });\n break;\n case OMG_POST_ACTIONS.OPEN_REAL_GAME:\n await this._openRealGame(CIPropRead.getNumericProperty('GameId', this._parseMessageData(message)) ?? undefined)\n break;\n case OMG_POST_ACTIONS.OPEN_DEMO_GAME:\n await this._openDemoGame(CIPropRead.getNumericProperty('GameId', this._parseMessageData(message)) ?? undefined)\n break;\n case OMG_POST_ACTIONS.SPORT:\n await this._openSport();\n break;\n case OMG_POST_ACTIONS.EXTERNAL_LINK:\n await this._openExternalUrl(this._extractUrl(message));\n break;\n case OMG_POST_ACTIONS.INTERNAL_URL:\n await this._openInternalUrl(this._extractUrl(message));\n break;\n\n case OMG_POST_ACTIONS.RICH:\n await this._openRichPage(CIPropRead.getStringProperty('campaignID', this._parseMessageData(message)));\n break;\n\n case OMG_POST_ACTIONS.CONTROL_CENTER:\n await this._openControlCenter();\n break;\n\n default:\n this.services.logger.debug(`Received unknown actionId ${actionId} from OMG`);\n }\n }\n\n\n protected _onShowMe(width: NullableUndefinedNumber, height: NullableUndefinedNumber): void {\n width = width ?? 0;\n height = height ?? 0;\n\n if(width > 0 && height > 0) {\n this._renderer?.setMaxSize(width, height);\n }\n this._renderer?.display();\n }\n\n protected async _openMyAccount(options?: IOpenMyAccountOptions): Promise<void> {\n this._closeExternalLinkDialog();\n await (await this.services.externalLinks).openMyAccount(options);\n }\n\n private async _openGame(gameType: NullableUndefinedNumber, isReal: boolean): Promise<void> {\n this._closeExternalLinkDialog();\n if(!gameType) {\n this.services.logger.error(`OMG open real game sent undefined game type`);\n return;\n }\n\n const gameInfo = await this.services.games.getGameInfo(gameType);\n\n if(!gameInfo) {\n this.services.logger.error(`OMG try to open ${isReal ? 'real' : 'demo'} game ${gameType} but this game is not in the layout`);\n return;\n }\n\n await gameInfo.open({\n isRealMode: isReal\n });\n }\n\n protected async _openRealGame(gameType: NullableUndefinedNumber): Promise<void> {\n await this._openGame(gameType, true);\n }\n\n protected async _openDemoGame(gameType: NullableUndefinedNumber): Promise<void> {\n await this._openGame(gameType, false);\n }\n\n protected async _openSport(): Promise<void> {\n this._closeExternalLinkDialog();\n await this.services.linksNavigation.openSport();\n }\n\n protected async _openExternalUrl(externalUrl: NullableUndefinedString): Promise<void> {\n this._closeExternalLinkDialog();\n if(externalUrl) {\n await this.services.linksNavigation.openUrl({\n url: externalUrl,\n openMode: \"newTab\"\n });\n } else {\n this.services.logger.error('OMG asked to open external URL but no url was provided in the post message');\n }\n\n }\n\n protected async _openInternalUrl(internalUrl: NullableUndefinedString): Promise<void> {\n this._closeExternalLinkDialog();\n if(internalUrl) {\n await this.services.linksNavigation.openUrl({\n url: internalUrl,\n openMode: \"clientSideNavigation\"\n });\n } else {\n this.services.logger.error('OMG asked to open internal url but no url was provided in the post message');\n }\n }\n\n protected async _openRichPage(campaignId: NullableUndefinedString): Promise<void> {\n this._closeExternalLinkDialog();\n\n if(!campaignId) {\n this.services.logger.error(`OMG attempt to open RICH page with an empty campaignId`);\n return;\n }\n\n await (await this.services.externalLinks).openRichPage({\n campaignId: campaignId\n });\n }\n\n protected async _openControlCenter(): Promise<void> {\n this._closeExternalLinkDialog();\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: AreaType.OMG,\n element: CHANNEL_ELEMENTS.omgAction,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n source: ControlCenterOpenSource.OMG\n }\n });\n }\n\n\n bringToFront(): void {\n this._renderer?.updateZIndex(ExternalLinksZIndexes.Omg);\n }\n\n}","import {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\n\nexport abstract class ForgotCredentialsExternalLinkHandlerBase extends ExternalLinkInIframeHandlerBase {\n protected async _onPostMessageReceived(message: MessageEvent): Promise<void> {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n\n switch (actionId) {\n case '3':\n if('close' === CIPropRead.getStringProperty('message', this._parseMessageData(message))?.toString()?.toLowerCase()) {\n this._closeExternalLinkDialog();\n }\n break;\n case '73':\n await this._openLoginForm();\n break;\n case '77':\n await this._redirectToURL(message);\n break;\n }\n }\n\n protected async _openLoginForm(): Promise<void> {\n this._closeExternalLinkDialog();\n await this.services.user.openLogin();\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1008,\n maxHeight: 702,\n zIndex: ExternalLinksZIndexes.MyAccount,\n hideCloseButton: false,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource()\n };\n }\n}","import {IForgotUserNameExternalLinkHandler} from \"./forgot-user-name.external-link-handler.interface\";\nimport {ForgotCredentialsExternalLinkHandlerBase} from \"../forgot-credentials-external-link-handler-base\";\nimport {GNWP_SOURCES} from \"../../../../gnwp/gnwp-consts\";\nimport {ExternalLinkInIframeRendererParams} from \"../../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\nexport class ForgotUserNameExternalLinkHandler extends ForgotCredentialsExternalLinkHandlerBase implements IForgotUserNameExternalLinkHandler {\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.FORGOT_USERNAME;\n }\n\n async openForgotUserName(): Promise<void> {\n const url = await this._getGnwpUrl();\n await this._showExternalLinkDialog(url);\n }\n\n protected async _getGnwpUrl(): Promise<string> {\n return await (await this.services.gnwp).getForgotUserNameUrl();\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n ...super._getIframeRendererParams(),\n iframeExtraCssClass: CyClass('cy-forgot-username-external-link-container')\n };\n }\n\n}","import {ForgotCredentialsExternalLinkHandlerBase} from \"../forgot-credentials-external-link-handler-base\";\nimport {IForgotPasswordExternalLinkHandler} from \"./forgot-password.external-link-handler.interface\";\nimport {GNWP_SOURCES} from \"../../../../gnwp/gnwp-consts\";\nimport {ExternalLinkInIframeRendererParams} from \"../../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\nexport class ForgotPasswordExternalLinkHandler extends ForgotCredentialsExternalLinkHandlerBase implements IForgotPasswordExternalLinkHandler {\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.FORGOT_PASSWORD;\n }\n\n async openForgotPassword(): Promise<void> {\n const url = await this._getGnwpUrl();\n await this._showExternalLinkDialog(url);\n }\n\n protected async _getGnwpUrl(): Promise<string> {\n return await (await this.services.gnwp).getForgotPasswordUrl();\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n ...super._getIframeRendererParams(),\n iframeExtraCssClass: CyClass('cy-forgot-password-external-link-container')\n };\n }\n}","import {IPendingLoginExternalLinkHandler} from \"./pending-login.external-link-handler.interface\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {IOpenPendingLoginOptions} from \"../../external-links.service.interface\";\nimport {NullableUndefinedNumber, NullableUndefinedString} from \"../../../../../common/types/nullable-types\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {\n AreaType,\n ControlCenterDeeplink,\n ControlCenterOpenSource,\n IChannel,\n IControlCenterFullSpecificParams\n} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\n\ninterface ITokenAndOriginInformation {\n token: NullableUndefinedString;\n sourceProductPackage: NullableUndefinedNumber\n}\n\nexport class PendingLoginExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IPendingLoginExternalLinkHandler {\n\n async openPendingLogin(options: IOpenPendingLoginOptions): Promise<void> {\n const url = await this._getGnwpUrl(options);\n await this._showExternalLinkDialog(url);\n }\n\n protected async _getGnwpUrl(options: IOpenPendingLoginOptions): Promise<string> {\n return await (await this.services.gnwp).getPendingLoginUrl({\n token: options.token\n });\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.PENDING_LOGIN;\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1014,\n maxHeight: 702,\n zIndex: ExternalLinksZIndexes.PendingAction,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n hideCloseButton: false,\n iframeExtraCssClass: CyClass('cy-pending-login-external-link-container')\n };\n }\n\n //we need to cache the autologin promise because pending login can send us for example '101' and 'pending' one after the other\n //so in order NOT to start 2 parallel autologin we will execute only the first one and all the other will wait for the same promise\n private _autologinPromise: null | Promise<void> = null;\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise<void> {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n\n\n\n const createAutologinPromise = async () => {\n try {\n if (!this.services.user.isAuthorized) {\n let options = this._extractTokenAndOriginInformation(message);\n if(options.token) {\n try {\n await this.services.user.runAutoLogin(options);\n } finally {\n this._autologinPromise = null;\n }\n\n }\n }\n } catch(e) {\n this.services.logger.error(\"Failed to autologin on pending login action with action ID 7\", e);\n }\n }\n\n const runAutologin = async () => {\n if(!this._autologinPromise) {\n this._autologinPromise = createAutologinPromise();\n }\n\n await this._autologinPromise;\n }\n\n switch (actionId.toLowerCase()) {\n case 'pending':\n this._closeExternalLinkDialog();\n await runAutologin();\n break;\n case '73':\n await this._openLoginForm();\n break;\n case '75':\n await this._openUploadDocuments(this._extractTokenAndOriginInformation(message));\n break;\n case '101': // ControlCenter\n await runAutologin();\n const channel = this._extractChannel(message);\n const appSpecificParameters = this._extractAppSpecificParameters(message);\n await this._openControlCenter({channel: channel, appSpecificParameters: appSpecificParameters});\n break;\n case '7':\n this._closeExternalLinkDialog();\n\n await runAutologin();\n\n await this._openQuickDeposit({\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.pendingAction,\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n break;\n }\n }\n\n protected _extractTokenAndOriginInformation(message: MessageEvent): ITokenAndOriginInformation {\n const messageData = this._parseMessageData(message);\n const token = CIPropRead.getStringProperty('Token', messageData);\n if(!token) {\n return {\n token: null,\n sourceProductPackage: null\n };\n }\n\n const originInformation = CIPropRead.getProperty('originInformation', messageData);\n const sourceProductPackage = CIPropRead.getNumericProperty('originProductPackageID', originInformation);\n\n return {\n token: token,\n sourceProductPackage: sourceProductPackage\n };\n\n }\n\n protected async _openLoginForm(): Promise<void> {\n this._closeExternalLinkDialog();\n await this.services.user.openLogin();\n }\n\n protected async _openUploadDocuments(options: ITokenAndOriginInformation): Promise<void> {\n this._closeExternalLinkDialog();\n\n if(options.token) {\n await this.services.user.runAutoLogin({\n token: options.token,\n sourceProductPackage: options.sourceProductPackage\n });\n await (await this.services.externalLinks).openUploadDocumentFromMyAccount();\n } else {\n this.services.logger.error(`Received open upload documents event from pending login but they didn't provide a token`)\n }\n }\n\n //todo duplicate code with pending-action.external-link-handler.ts -need to be shared\n protected async _openControlCenter(options: {channel: IChannel; appSpecificParameters: Partial<IControlCenterFullSpecificParams>;}): Promise<void> {\n this._closeExternalLinkDialog();\n await (await this.services.appLauncher).openControlCenterFull({\n channel: {\n source: CHANNEL_SOURCE.pendingAction,\n area: AreaType.button,\n ...options.channel\n },\n businessCorrelationID: this.services.tools.getGuid(),\n appSpecificParameters: {\n source: ControlCenterOpenSource.Lobby,\n isIncreaseLimitsDisabled: true,\n deeplink: ControlCenterDeeplink.Main,\n ...options.appSpecificParameters\n }\n })\n }\n\n}","import {IMyAccountUploadDocumentsExternalLinkHandler} from \"./my-account-upload-documents.external-link-handler.interface\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\n\nexport class MyAccountUploadDocumentsExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IMyAccountUploadDocumentsExternalLinkHandler {\n\n async openUploadDocumentsFromMyAccount(): Promise<void> {\n if(!await this.services.user.ensureUserIsLoggedIn('Upload documents')) {\n return;\n }\n\n const url = await this._getGnwpUrl();\n await this._showExternalLinkDialog(url);\n }\n\n protected async _getGnwpUrl(): Promise<string> {\n return (await this.services.gnwp).getUploadDocumentsUrl();\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.DOCUMENT_UPLOAD;\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 940,\n maxHeight: 658,\n zIndex: ExternalLinksZIndexes.MyAccount,\n hideCloseButton: this._hideCloseButton,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n iframeExtraCssClass: CyClass('cy-upload-documents-external-link-container')\n };\n }\n\n protected get _hideCloseButton(): boolean {\n return false;\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise<void> {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n\n switch (actionId) {\n case 'CloseMe':\n this._closeExternalLinkDialog();\n break;\n case '6':\n await this._openCashier({\n tabId: this._extractCashierTabId(message),\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.uploadDocuments,\n area: AreaType.Header\n }\n });\n break;\n case '7':\n await this._openQuickDeposit({\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.uploadDocuments,\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n break;\n }\n }\n\n\n\n}","import {IGameLimitsExternalLinkHandler} from \"./game-limits.external-link-handler.interface\";\nimport {ControlCenterDeeplink} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {ExternalLinkHandlerBase} from \"../external-link-handler-base\";\nimport {IOpenGameLimitsOptions} from \"../../external-links.service.interface\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\n\nexport class GameLimitsExternalLinkHandler extends ExternalLinkHandlerBase implements IGameLimitsExternalLinkHandler{\n async openGameLimits(options:IOpenGameLimitsOptions): Promise<void> {\n if(this.services.abTestingFeatureDataProvider.controlCenter.isEnabled) {\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: options.channelArea,\n element: options.channelElement,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n deeplink: ControlCenterDeeplink.Main,\n source: options.source\n }\n });\n }else\n {\n await (await this.services.externalLinks).openMyAccount({\n tabId: MyAccountTab.ResponsibleGaming\n });\n }\n\n }\n}","import {ExternalLinkHandlerBase} from \"../external-link-handler-base\";\nimport {IContactUsExternalLinkHandler} from \"./contact-us.external-link-handler.interface\";\n\nexport class ContactUsExternalLinkHandler extends ExternalLinkHandlerBase implements IContactUsExternalLinkHandler {\n async openContactUs(): Promise<void> {\n const url = await this._getGnwpUrl();\n this._openInNewTab(url);\n }\n\n protected async _getGnwpUrl(): Promise<string> {\n return await (await this.services.gnwp).getContactUsUrl();\n }\n}","import {IRichExternalLinkHandler} from \"./rich.external-link-handler.interface\";\nimport React from \"react\";\nimport {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {GNWP_SOURCES} from \"../../../gnwp/gnwp-consts\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\nimport {CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {OpenRichPageOptions} from \"../../external-links.service.interface\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nconst RICH_POST_ACTIONS = {\n OPEN_REAL_GAME: '1',\n OPEN_ANONYMOUS_GAME: '36',\n CASHIER: '6',\n SPORT: '24',\n EXTERNAL_URL: '27',\n REMOVE_DAILY_DEAL_INDICATION: '64',\n};\n\n\nexport class RichExternalLinkHandler extends ExternalLinkInIframeHandlerBase implements IRichExternalLinkHandler {\n\n async openRichPage(options: OpenRichPageOptions): Promise<void> {\n if(!options.campaignId) {\n throw new Error('Rich campaignId parameter was not provided');\n }\n\n const url = this.services.configuration.servicesConfigs.Integration.rich?.richPageUrl;\n if(!url) {\n throw new Error('Rich page url was not configured');\n }\n\n await this.services.location.push(url.replace('{campaignid}', options.campaignId));\n }\n\n async renderRichPageContent(): Promise<React.ReactElement> {\n const url = await this._getGnwpUrl();\n return this._renderExternalLinkIframe(url);\n }\n protected async _getGnwpUrl(): Promise<string> {\n const campaignId = parseInt(this.services.location.currentUri.queryParams.getParamValue('campaignid'));\n return await (await this.services.gnwp).getRichPageUrl({\n marketingCampaignId: campaignId\n });\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.RICH;\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1008,\n maxHeight: 702,\n zIndex: ExternalLinksZIndexes.MyAccount,\n hideCloseButton: false,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n iframeExtraCssClass: CyClass('cy-rich-external-link-container')\n };\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise<void> {\n const actionId = this._extractActionId(message);\n if(!actionId) {\n return;\n }\n\n switch (actionId) {\n case RICH_POST_ACTIONS.EXTERNAL_URL:\n await this._redirectToExternalUrl(CIPropRead.getStringProperty('Url', this._parseMessageData(message)));\n break;\n case RICH_POST_ACTIONS.CASHIER:\n await this._openCashier({\n tabId: this._extractCashierTabId(message),\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.rich,\n area: AreaType.button\n }\n });\n break;\n case RICH_POST_ACTIONS.OPEN_REAL_GAME:\n await this._openRealGame(CIPropRead.getNumericProperty('GameId', this._parseMessageData(message)));\n break;\n case RICH_POST_ACTIONS.OPEN_ANONYMOUS_GAME:\n await this._openDemoGame(CIPropRead.getNumericProperty('GameId', this._parseMessageData(message)));\n break;\n case RICH_POST_ACTIONS.SPORT:\n await this._openSport();\n break;\n case RICH_POST_ACTIONS.REMOVE_DAILY_DEAL_INDICATION:\n (await this.services.dailyDeal).removeDailyDealIndicator();\n break;\n\n }\n }\n\n protected async _redirectToExternalUrl(url: string) {\n await this.services.location.redirect(url)\n }\n\n protected async _openRealGame(gameType: number): Promise<void> {\n const gameInfo = await this.services.games.getGameInfo(gameType);\n if(!gameInfo) {\n this.services.logger.error(`RICH page is trying to open game ${gameType} in real mode but this game is not in the layout`);\n return;\n }\n\n await gameInfo.open({\n isRealMode: true\n });\n }\n\n protected async _openDemoGame(gameType: number): Promise<void> {\n const gameInfo = await this.services.games.getGameInfo(gameType);\n if(!gameInfo) {\n this.services.logger.error(`RICH page is trying to open game ${gameType} in demo mode but this game is not in the layout`);\n return;\n }\n\n await gameInfo.open({\n isRealMode: false\n });\n }\n\n protected async _openSport(): Promise<void> {\n await this.services.linksNavigation.openSport();\n }\n}","import {ExternalLinkHandlerBase} from \"../external-link-handler-base\";\nimport {IHelpExternalLinkHandler} from \"./help.external-link-handler.interface\";\n\nexport class HelpExternalLinkHandler extends ExternalLinkHandlerBase implements IHelpExternalLinkHandler {\n async openHelpPage(): Promise<void> {\n await this.services.linksNavigation.navigateLink({\n linkId: \"helpLink\"\n });\n }\n}","import {\n ExternalLinkInIframeHandlerBase,\n ExternalLinkInIframeRendererParams\n} from \"../external-link-in-iframe-handler-base\";\nimport {\n IPendingActionExternalLinkHandler, PendingActionData, PendingActionReasonEnum,\n PendingActionResultEnum\n} from \"./pending-action.external-link-handler.interface\";\nimport {ExternalLinksZIndexes} from \"../../external-links-z-indexes\";\nimport {CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {\n AreaType,\n ControlCenterDeeplink,\n ControlCenterOpenSource,\n IChannel,\n IControlCenterFullSpecificParams\n} from \"@sparkware/uc-sdk-core\";\nimport {Nullable, NullableUndefinedString} from \"../../../../../common/types/nullable-types\";\nimport {UserController_GetPendingActionsRequest} from \"../../../api/api.service\";\nimport {CIPropRead} from \"../../../../../utils/case-insensitive-property-reader\";\n\nconst PENDING_ACTION_POST_MESSAGE = {\n ControlCenter: '101',\n Pending: 'pending',\n MyAccount: '21'\n};\n\n\nexport abstract class PendingActionExternalLinkHandler<TOptions> extends ExternalLinkInIframeHandlerBase implements IPendingActionExternalLinkHandler<TOptions> {\n\n private _pendingActionResult: PendingActionResultEnum = PendingActionResultEnum.BlockCurrentFlow;\n private _currentPendingAction: Nullable<PendingActionData> = null;\n\n protected abstract _createPendingActionsRequest(): UserController_GetPendingActionsRequest;\n protected abstract _getGnwpUrl(pendingActionData: PendingActionData, options?: TOptions): Promise<string>;\n\n async openPendingAction(options?: TOptions): Promise<PendingActionResultEnum> {\n return await this._executePendingActions(options);\n }\n\n protected async _getUserPendingActions(request: UserController_GetPendingActionsRequest): Promise<PendingActionData[]> {\n if(!this.services.user.isAuthorized) {\n return [];\n }\n\n try {\n const response = await this.services.api.userController.getPendingActions(request);\n //sort pending actions ascending by priority\n return response.PendingActions.sort((pa1, pa2) => {\n const priority1 = pa1.Priority ?? 99999999;\n const priority2 = pa2.Priority ?? 99999999;\n return priority1 - priority2;\n });\n } catch (err) {\n this.services.logger.error(`Failed to get user pending actions for ${this.services.user.cid}`, err);\n return [];\n }\n\n }\n\n protected async _executePendingActions(options?: TOptions, previousPendingAction?: PendingActionData): Promise<PendingActionResultEnum> {\n\n const pendingActions = await this._getUserPendingActions(this._createPendingActionsRequest());\n\n if(pendingActions.length === 0) {\n return PendingActionResultEnum.ContinueCurrentFlow;\n }\n\n if(pendingActions.some(pa => pa.Id === previousPendingAction?.Id)) {\n //it means that the pending action that we just show is still present, so we return BlockCurrentFlow to avoid entering an infinite loop\n return PendingActionResultEnum.BlockCurrentFlow;\n }\n\n await this._showPendingAction(pendingActions[0], options);\n\n if(this._pendingActionResult !== PendingActionResultEnum.ContinueCurrentFlow) {\n return this._pendingActionResult;\n }\n\n return this._executePendingActions(options, pendingActions[0]);\n }\n\n protected _getPendingActionIframeRendererSpecificParams(pendingActionData: PendingActionData): ExternalLinkInIframeRendererParams {\n let specificParams: Partial<ExternalLinkInIframeRendererParams> = {};\n if(pendingActionData.ReasonId === PendingActionReasonEnum.GamingCautionInteraction) {\n specificParams.hideCloseButton = true;\n specificParams.maxWidth = 700;\n specificParams.maxHeight = 500;\n }\n\n return {\n ...this._getIframeRendererParams(),\n ...specificParams\n };\n }\n\n protected async _showPendingAction(pendingActionData: PendingActionData, options?: TOptions): Promise<void> {\n this._pendingActionResult = PendingActionResultEnum.BlockCurrentFlow;\n this._currentPendingAction = pendingActionData;\n const url = await this._getGnwpUrl(pendingActionData, options);\n await this._showExternalLinkDialog(url, this._getPendingActionIframeRendererSpecificParams(pendingActionData));\n }\n\n protected get _hideCloseButton(): boolean {\n return false;\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n maxWidth: 1014,\n maxHeight: 702,\n zIndex: ExternalLinksZIndexes.PendingAction,\n httpVerb: 'POST',\n analyticsAction: this._getGnwpSource(),\n hideCloseButton: this._hideCloseButton\n };\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise<void> {\n const actionId = this._extractActionId(message);\n\n if(!actionId) {\n return;\n }\n\n const msgData = this._parseMessageData(message);\n\n switch (actionId.toLowerCase()) {\n case PENDING_ACTION_POST_MESSAGE.ControlCenter:\n const channel = CIPropRead.getProperty('Channel', msgData);\n const appSpecificParameters = CIPropRead.getProperty('AppSpecificParameters', msgData);\n\n await this._openControlCenter({channel: channel, appSpecificParameters: appSpecificParameters});\n break;\n case PENDING_ACTION_POST_MESSAGE.MyAccount:\n this._closeExternalLinkDialog();\n await (await this.services.externalLinks).openMyAccount({\n tabId: this._extractMyAccountTabId(message)\n });\n break;\n case PENDING_ACTION_POST_MESSAGE.Pending:\n await this._onPending(CIPropRead.getStringProperty('Token', msgData));\n break;\n }\n }\n\n protected async _openControlCenter(options: {channel: IChannel; appSpecificParameters: Partial<IControlCenterFullSpecificParams>;}): Promise<void> {\n this._closeExternalLinkDialog();\n await (await this.services.appLauncher).openControlCenterFull({\n channel: {\n source: CHANNEL_SOURCE.pendingAction,\n area: AreaType.button,\n ...options.channel\n },\n businessCorrelationID: this.services.tools.getGuid(),\n appSpecificParameters: {\n source: ControlCenterOpenSource.Lobby,\n isIncreaseLimitsDisabled: true,\n deeplink: ControlCenterDeeplink.Main,\n ...options.appSpecificParameters\n }\n })\n }\n\n protected async _onPending(token: NullableUndefinedString): Promise<void> {\n if(token) {\n //if we have a token it means that the pending action was resolved, so we can continue the current flow\n this._pendingActionResult = PendingActionResultEnum.ContinueCurrentFlow;\n }\n this._closeExternalLinkDialog();\n\n }\n\n\n}","export enum PlatformEventTypeEnum {\n Deposit = 1,\n Play = 21,\n OpenApp = 63\n \n /*\n Fund Transfer = 2,\n Registration = 3,\n Compensation = 4,\n GroupCompensation = 5,\n Grant Following Bonus = 6,\n Followed Delayed Bonus = 7,\n Login = 8,\n UpdateAccountStatus = 9,\n GrantBonus = 10,\n CancelBonus = 11,\n CancelDeposit = 12,\n Cashout = 13,\n CancelCashout = 14,\n UpdateAddress = 15,\n CheckAccountStatus = 16,\n SessionDetails = 17,\n CloseTournaments = 18,\n EnterGame = 19,\n LeaveGame = 20,\n\n Purchase = 26,\n Invite A Friend = 55,\n Brag = 56,\n Share = 57,\n Got = 58,\n Played total X times = 59,\n Played game X times = 60,\n Player input - Mouse click = 61,\n */\n}","import {PendingActionExternalLinkHandler} from \"../pending-action.external-link-handler\";\nimport {GNWP_SOURCES} from \"../../../../gnwp/gnwp-consts\";\nimport {UserController_GetPendingActionsRequest} from \"../../../../api/api.service\";\nimport {ProductPackageToID} from \"@sparkware/uc-sdk-core\";\nimport {PlatformEventTypeEnum} from \"../../../../../../common/enums/platform-event-type.enum\";\nimport {PendingActionData} from \"../pending-action.external-link-handler.interface\";\nimport {ExternalLinkInIframeRendererParams} from \"../../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\n\nexport class DepositPendingActionExternalLinkHandler extends PendingActionExternalLinkHandler<undefined> {\n protected _createPendingActionsRequest(): UserController_GetPendingActionsRequest {\n return {\n packageId: ProductPackageToID.PAYMENTS_DEPOSIT,\n eventTypeId: PlatformEventTypeEnum.OpenApp,\n playModeId: 2 //real\n }\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.PENDING_APP;\n }\n\n protected async _getGnwpUrl(pendingActionData: PendingActionData): Promise<string> {\n return await (await this.services.gnwp).getPendingAppUrl({\n pendingActionTargetProductPackageId: ProductPackageToID.PAYMENTS_DEPOSIT,\n eventTypeId: pendingActionData.EventTypeId,\n eventTypeName: pendingActionData.EventTypeName\n });\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n ...super._getIframeRendererParams(),\n iframeExtraCssClass: CyClass('cy-deposit-pending-action-external-link-container')\n };\n }\n\n}","import {PendingActionExternalLinkHandler} from \"../pending-action.external-link-handler\";\nimport {GNWP_SOURCES} from \"../../../../gnwp/gnwp-consts\";\nimport {UserController_GetPendingActionsRequest} from \"../../../../api/api.service\";\nimport {ProductPackageToID} from \"@sparkware/uc-sdk-core\";\nimport {PlatformEventTypeEnum} from \"../../../../../../common/enums/platform-event-type.enum\";\nimport {PendingActionData} from \"../pending-action.external-link-handler.interface\";\nimport {ExternalLinkInIframeRendererParams} from \"../../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\nexport class TransactionHistoryPendingActionExternalLinkHandler extends PendingActionExternalLinkHandler<undefined> {\n protected _createPendingActionsRequest(): UserController_GetPendingActionsRequest {\n return {\n packageId: ProductPackageToID.PAYMENTS_PLAYER_TRANSACTIONS_HISTORY,\n eventTypeId: PlatformEventTypeEnum.OpenApp,\n playModeId: 2 //real\n }\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.PENDING_APP;\n }\n\n protected async _getGnwpUrl(pendingActionData: PendingActionData): Promise<string> {\n return await (await this.services.gnwp).getPendingAppUrl({\n pendingActionTargetProductPackageId: ProductPackageToID.PAYMENTS_PLAYER_TRANSACTIONS_HISTORY,\n eventTypeId: pendingActionData.EventTypeId,\n eventTypeName: pendingActionData.EventTypeName\n });\n }\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n ...super._getIframeRendererParams(),\n iframeExtraCssClass: CyClass('cy-transaction-history-pending-action-external-link-container')\n };\n }\n}","import {PendingActionExternalLinkHandler} from \"../pending-action.external-link-handler\";\nimport {UserController_GetPendingActionsRequest} from \"../../../../api/api.service\";\nimport {GNWP_SOURCES} from \"../../../../gnwp/gnwp-consts\";\nimport {\n PendingActionData,\n PendingActionResultEnum\n} from \"../pending-action.external-link-handler.interface\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {PlatformEventTypeEnum} from \"../../../../../../common/enums/platform-event-type.enum\";\nimport {IOpenRealGamePlayPendingActionOptions} from \"./real-game-play-pending-action.external-link-handler.interface\";\nimport {ExternalLinkInIframeRendererParams} from \"../../external-link-in-iframe-handler-base\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\n\n\n\n\nexport class RealGamePlayPendingActionExternalLinkHandler extends PendingActionExternalLinkHandler<IOpenRealGamePlayPendingActionOptions> {\n\n async openPendingAction(options?: IOpenRealGamePlayPendingActionOptions): Promise<PendingActionResultEnum> {\n if(options?.token) { //if we have a token it means we are on the old flow when we indirectly get a pending action as a response from platform getToken\n const url = await (await this.services.gnwp).getPendingPlayUrl({\n token: options?.token\n });\n await this._showExternalLinkDialog(url);\n } else {\n return super.openPendingAction(options);\n }\n\n }\n\n protected _createPendingActionsRequest(): UserController_GetPendingActionsRequest {\n return {\n eventTypeId: PlatformEventTypeEnum.Play,\n playModeId: 2 //1 = Demo, 2 = Real\n }\n }\n\n protected _getGnwpSource(): GNWP_SOURCES {\n return GNWP_SOURCES.PENDING_PLAY;\n }\n\n protected async _getGnwpUrl(pendingActionData: PendingActionData, options?: IOpenRealGamePlayPendingActionOptions): Promise<string> {\n return await (await this.services.gnwp).getPendingPlayUrl({\n token: options?.token\n });\n }\n\n protected async _onPostMessageReceived(message: MessageEvent): Promise<void> {\n const actionId = this._extractActionId(message);\n\n if(!actionId) {\n return;\n }\n\n switch (actionId.toLowerCase()) {\n case '7':\n await this._openQuickDeposit({\n promCode: this._extractPromoCode(message),\n channel: {\n source: CHANNEL_SOURCE.pendingPlay,\n area: AreaType.PendingAction,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n break;\n default:\n await super._onPostMessageReceived(message);\n break;\n }\n\n return super._onPostMessageReceived(message);\n }\n\n\n protected _getIframeRendererParams(): ExternalLinkInIframeRendererParams {\n return {\n ...super._getIframeRendererParams(),\n iframeExtraCssClass: CyClass('cy-pending-play-external-link-container')\n };\n }\n}","import {IExternalLinksHandlersFactory} from \"./external-links-handlers-factory.interface\";\nimport {IRegistrationExternalLinkHandler} from \"../handlers/registration/registration.external-link-handler.interface\";\nimport {RegistrationExternalLinkHandler} from \"../handlers/registration/registration.external-link-handler\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMyAccountExternalLinkHandler} from \"../handlers/my-account/my-account.external-link-handler.interface\";\nimport {MyAccountExternalLinkHandler} from \"../handlers/my-account/my-account.external-link-handler\";\nimport {ICashierExternalLinkHandler} from \"../handlers/cashier/cashier.external-link-handler.interface\";\nimport {CashierExternalLinkHandler} from \"../handlers/cashier/cashier.external-link-handler\";\nimport {IOmgExternalLinkHandler} from \"../handlers/omg/omg.external-link-handler.interface\";\nimport {OmgExternalLinkHandler} from \"../handlers/omg/omg.external-link-handler\";\nimport {\n IForgotUserNameExternalLinkHandler\n} from \"../handlers/forgot-credentials/forgot-user-name/forgot-user-name.external-link-handler.interface\";\nimport {\n ForgotUserNameExternalLinkHandler\n} from \"../handlers/forgot-credentials/forgot-user-name/forgot-user-name.external-link-handler\";\nimport {\n IForgotPasswordExternalLinkHandler\n} from \"../handlers/forgot-credentials/forgot-password/forgot-password.external-link-handler.interface\";\nimport {\n ForgotPasswordExternalLinkHandler\n} from \"../handlers/forgot-credentials/forgot-password/forgot-password.external-link-handler\";\nimport {\n IPendingLoginExternalLinkHandler\n} from \"../handlers/pending-login/pending-login.external-link-handler.interface\";\nimport {PendingLoginExternalLinkHandler} from \"../handlers/pending-login/pending-login.external-link-handler\";\nimport {\n IMyAccountUploadDocumentsExternalLinkHandler\n} from \"../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport {MyAccountUploadDocumentsExternalLinkHandler} from \"../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler\";\nimport {IGameLimitsExternalLinkHandler} from \"../handlers/game-limits/game-limits.external-link-handler.interface\";\nimport {GameLimitsExternalLinkHandler} from \"../handlers/game-limits/game-limits.external-link-handler\";\nimport {IContactUsExternalLinkHandler} from \"../handlers/contact-us/contact-us.external-link-handler.interface\";\nimport {ContactUsExternalLinkHandler} from \"../handlers/contact-us/contact-us.external-link-handler\";\nimport {IRichExternalLinkHandler} from \"../handlers/rich/rich.external-link-handler.interface\";\nimport {RichExternalLinkHandler} from \"../handlers/rich/rich.external-link-handler\";\nimport {IHelpExternalLinkHandler} from \"../handlers/help/help.external-link-handler.interface\";\nimport {HelpExternalLinkHandler} from \"../handlers/help/help.external-link-handler\";\nimport {\n IPendingActionExternalLinkHandler\n} from \"../handlers/pending-action/pending-action.external-link-handler.interface\";\nimport {\n DepositPendingActionExternalLinkHandler\n} from \"../handlers/pending-action/deposit/deposit-pending-action.external-link-handler\";\nimport {\n TransactionHistoryPendingActionExternalLinkHandler\n} from \"../handlers/pending-action/transaction-history/transaction-history-pending-action.external-link-handler\";\nimport {\n RealGamePlayPendingActionExternalLinkHandler\n} from \"../handlers/pending-action/real-game-play/real-game-play-pending-action.external-link-handler\";\nimport {\n IOpenRealGamePlayPendingActionOptions\n} from \"../handlers/pending-action/real-game-play/real-game-play-pending-action.external-link-handler.interface\";\n\n\nexport class ExternalLinksHandlersFactory implements IExternalLinksHandlersFactory {\n constructor(protected readonly services: IServiceFactoryExtended) {\n\n }\n get registration(): IRegistrationExternalLinkHandler {\n return new RegistrationExternalLinkHandler(this.services);\n }\n\n get myAccount(): IMyAccountExternalLinkHandler {\n return new MyAccountExternalLinkHandler(this.services);\n }\n\n get cashier(): ICashierExternalLinkHandler {\n return new CashierExternalLinkHandler(this.services);\n }\n\n get omg(): IOmgExternalLinkHandler {\n return new OmgExternalLinkHandler(this.services);\n }\n\n get forgotUserName(): IForgotUserNameExternalLinkHandler {\n return new ForgotUserNameExternalLinkHandler(this.services);\n }\n\n get forgotPassword(): IForgotPasswordExternalLinkHandler {\n return new ForgotPasswordExternalLinkHandler(this.services);\n }\n\n get pendingLogin(): IPendingLoginExternalLinkHandler {\n return new PendingLoginExternalLinkHandler(this.services);\n }\n\n get realGamePlayPendingAction(): IPendingActionExternalLinkHandler<IOpenRealGamePlayPendingActionOptions> {\n return new RealGamePlayPendingActionExternalLinkHandler(this.services);\n }\n\n get depositPendingAction(): IPendingActionExternalLinkHandler<undefined> {\n return new DepositPendingActionExternalLinkHandler(this.services);\n }\n\n get transactionHistoryPendingAction(): IPendingActionExternalLinkHandler<undefined> {\n return new TransactionHistoryPendingActionExternalLinkHandler(this.services);\n }\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new MyAccountUploadDocumentsExternalLinkHandler(this.services);\n }\n get gameLimits(): IGameLimitsExternalLinkHandler {\n return new GameLimitsExternalLinkHandler(this.services);\n }\n\n get contactUs(): IContactUsExternalLinkHandler {\n return new ContactUsExternalLinkHandler(this.services);\n }\n\n get rich(): IRichExternalLinkHandler {\n return new RichExternalLinkHandler(this.services);\n }\n\n get help(): IHelpExternalLinkHandler {\n return new HelpExternalLinkHandler(this.services);\n }\n}","import {\n GameModeEnum,\n IGameContextViewModel\n} from \"../../../services/game-runner/interfaces/game-context/game-context-view-model.interface\";\nimport {IServiceFactory} from \"../../../services/service-factory.interface\";\nimport {UndefinedString} from \"../../../../common/types/nullable-types\";\n\nexport class HeaderWelcomeButtonsAnalyticsSender {\n constructor(private readonly action: string,\n private readonly services: IServiceFactory,\n private readonly gameContext: IGameContextViewModel | undefined) {\n }\n\n sendAnalytics() {\n let category = 'Client_LoginButtons';\n let label: UndefinedString = undefined;\n if(this.gameContext) {\n category = this.gameContext.gameMode === GameModeEnum.Demo ? 'Client_GameFrame_Anonymous' : 'Client_GameFrame_Real';\n label = this.gameContext.gameInfo.gameType + '_' + this.gameContext.gameInfo.title.replace(/ /g, '');\n }\n\n this.services.analytics.sendAnalytics(category, this.action, label);\n }\n}","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {Button} from \"../../../../basic-ui-components/button/base/button.component\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {getButtonSizeVariant} from \"../../welcome-buttons/header-welcome-buttons-helpers\";\nimport {HeaderWelcomeButtonsAnalyticsSender} from \"../../welcome-buttons/header-welcome-buttons-analytics-sender\";\nimport {HeaderWelcomeLoginButtonComponentProps} from \"./header-login-button.component.props\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface HeaderLoginButtonComponentWithServiceProps extends HeaderWelcomeLoginButtonComponentProps, ComponentServicesPick<'header'> {\n}\n\n\n@observer\nexport class ComponentBody extends OrbitComponent<HeaderLoginButtonComponentWithServiceProps> {\n\n private _onClick = async () => {\n if(this.services.regulation.shouldEnforceHybridAppForMobileWeb()) {\n new HeaderWelcomeButtonsAnalyticsSender('DownloadApp', this.services, this.props.gameContext).sendAnalytics();\n this.services.specificDialogs.enforceHybridAppModal();\n } else {\n new HeaderWelcomeButtonsAnalyticsSender('login', this.services, this.props.gameContext).sendAnalytics();\n await this.services.user.openLogin({\n dl: \"19519\"\n });\n }\n }\n\n\n render() {\n\n return (\n <Button\n preset={this.props.preset ?? \"secondary\"}\n sizeVariant={getButtonSizeVariant(this.services)}\n onClick={this._onClick}\n className={CyClass(\"cy-login-button-text\")}\n skeleton={this.props.header.skeleton}\n >\n { this.services.translation.translate(\"Login\") }\n </Button>\n )\n }\n}\nexport const HeaderLoginButtonComponent = withServices(ComponentBody, [\"header\"]);","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {Button} from \"../../../../basic-ui-components/button/base/button.component\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {getButtonSizeVariant} from \"../../welcome-buttons/header-welcome-buttons-helpers\";\nimport {HeaderWelcomeButtonsAnalyticsSender} from \"../../welcome-buttons/header-welcome-buttons-analytics-sender\";\nimport {HeaderWelcomeRegisterButtonComponentProps} from \"./header-register-button.component.props\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\n\ninterface HeaderRegisterButtonComponentWithServicesProps extends HeaderWelcomeRegisterButtonComponentProps, ComponentServicesPick<'cmsSegmentation' | 'header'> {\n\n}\n\n@observer\nclass ComponentBody extends OrbitComponent<HeaderRegisterButtonComponentWithServicesProps> {\n private _onClick = async () => {\n new HeaderWelcomeButtonsAnalyticsSender('Register', this.services, this.props.gameContext).sendAnalytics();\n await (await this.services.externalLinks).openMembership( {\n channel: {\n area: AreaType.Header,\n source: CHANNEL_SOURCE.casinoClient,\n element: CHANNEL_ELEMENTS.registerButton\n },\n marketingParams: {dl: \"19518\"}\n });\n }\n\n render() {\n if(this.props.cmsSegmentation.isCisOrCip || !this.services.configuration.data.generalSettings.showRegisterButton) {\n return null;\n }\n return (\n <Button\n preset={this.props.preset ?? \"special\"}\n sizeVariant={getButtonSizeVariant(this.services)}\n onClick={this._onClick}\n className={CyClass(\"cy-register-button\")}\n skeleton={this.props.header.skeleton}\n >\n { this.props.text ?? this.services.translation.translate(\"SIGN_UP\") }\n </Button>\n );\n }\n}\n\nexport const HeaderRegisterButtonComponent = withServices(ComponentBody, ['cmsSegmentation', 'header']);","import styled from \"styled-components\";\n\nconst AboutDefaultBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n ${({theme}) => theme.font.presets.body};\n padding-top: 3rem;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding-top: 0;\n }\n`;\n\nexport const AboutBox = AboutDefaultBox;","import styled from \"styled-components\";\n\nconst AboutInfoSectionDefaultBox = styled.div`\n margin-bottom: 1rem;\n \n font-size: 1.6rem;\n color: ${({theme}) => theme.colors.textLight};\n \n > :nth-child(2n+1) {\n font-size: 1.4rem;\n color: ${({theme}) => theme.colors.textMiddleDark};\n }\n`;\n\nexport const AboutInfoSectionBox = AboutInfoSectionDefaultBox;","import styled from \"styled-components\";\n\nconst AboutFooterSectionDefaultBox = styled.div`\n font-size: 1.25rem;\n color: ${({theme}) => theme.colors.brandPrimary};\n text-decoration: underline;\n cursor: pointer;\n`;\n\nexport const AboutFooterSectionBox = AboutFooterSectionDefaultBox;","import {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {AboutBox} from \"./boxes/about.box\";\nimport {AboutInfoSectionBox} from \"./boxes/about-info-section.box\";\nimport {AboutFooterSectionBox} from \"./boxes/about-footer-section.box\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport { CHANNEL_SOURCE } from \"../../../common/const/casinofied-analytics-consts\";\nimport { CyClass } from \"../../../common/cy-classes\";\n\nexport interface AboutComponentProps {\n fiscalCode?: string;\n openSessionsBalance?: number;\n}\n\ninterface AboutComponentInternalProps extends AboutComponentProps {\n dialogHandler: IModalDialogHandler;\n clientVersion: string;\n}\n\nexport class AboutComponent extends OrbitComponent<AboutComponentInternalProps> {\n\n componentDidMount() {\n super.componentDidMount();\n this.services.analytics.sendOrbitUserFlowEvent(\"Client_About\", \"Open\");\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n this.services.analytics.sendOrbitUserFlowEvent(\"Client_About\", \"Close\");\n }\n\n private _handleHelpTextClick = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Client_About\", \"Help\");\n this.props.dialogHandler.close();\n await (await this.services.appLauncher).openHelpCenter({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n source: CHANNEL_SOURCE.about_popup,\n area: AreaType.button,\n }\n });\n }\n\n private _renderHelpText = () => {\n if (this.services.miniOrbit.isEnabled) {\n return null;\n }\n\n return (\n <AboutFooterSectionBox onClick={this._handleHelpTextClick} className={CyClass('cy-about-help-link')}>\n {this.services.translation.translate(\"ABOUT_HELP_SUPPORT\")}\n </AboutFooterSectionBox>\n );\n };\n\n private _renderAboutInfoSection(sectionTitleKey: string, value: string, valueClass?: string) {\n if (!Check.isEmpty(value)) {\n return (\n <AboutInfoSectionBox>\n <div>{this.services.translation.translate(sectionTitleKey)}</div>\n <div className={valueClass || ''}>{value}</div>\n </AboutInfoSectionBox>\n );\n }\n return null;\n }\n\n render() {\n const openSessionBalance = Check.isNullOrUndefined(this.props.openSessionsBalance) ? undefined : this.services.currency.formatMoney(this.props.openSessionsBalance);\n return (\n <AboutBox className={\"cy-cgp-about-area\"}>\n {this._renderAboutInfoSection(\"ABOUT_SUPPORT_ID_TITLE\", this.services.user.cid)}\n {this._renderAboutInfoSection(\"ABOUT_FISCAL_CODE_TITLE\", this.props.fiscalCode)}\n {this._renderAboutInfoSection(\"ABOUT_OPEN_SESSION_TITLE\", openSessionBalance, CyClass(\"cy-about-session-balance-amount\"))}\n {this._renderAboutInfoSection(\"ABOUT_CLIENT_VERSION_TITLE\", this.props.clientVersion)}\n {this._renderHelpText()}\n </AboutBox>\n );\n }\n}","import styled from \"styled-components\";\n\nexport const LastLoginLabelDefaultBox = styled.div`\n font-size: 1.2rem;\n font-weight: 500;\n padding-bottom: 0.5rem;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n display: inline-block;\n padding-right: 0.5rem;\n font-size: 1rem;\n padding-bottom: 0rem;\n }\n`;\n\nexport const LastLoginLabelBox = LastLoginLabelDefaultBox;","import styled from \"styled-components\";\n\nexport const LastLoginValueDefaultBox = styled.div`\n font-size: 1rem;\n font-weight: 500;\n white-space: nowrap;\n`;\n\nexport const LastLoginValueBox = LastLoginValueDefaultBox;","import {Check} from \"@sparkware/app-utils\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {LastLoginLabelBox} from \"./boxes/last-login-label.box\";\nimport {LastLoginValueBox} from \"./boxes/last-login-value.box\";\n \nexport const LastLoginComponent: React.FC = observer(() => {\n const services = useServices();\n if (Check.isNull(services.user.lastLogin)) {\n return null\n }\n\n return (\n <div>\n <LastLoginLabelBox className={CyClass('cy-last-login-label')}>\n {services.translation.translate('LAST_LOGIN_TITLE')}\n </LastLoginLabelBox>\n <LastLoginValueBox className={CyClass('cy-last-login-value')}>\n {services.user.lastLogin}\n </LastLoginValueBox>\n </div>\n )\n})","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LiveCasinoGridItemBetIntervalBox = styledBox('LiveCasinoGridItemBetIntervalBox');\n","import styled from 'styled-components';\n\nexport const LiveCasinoGridItemBetIntervalMinWrapperBox = styled.span`\n padding-inline-end: 4px;\n`;\n","import React from 'react';\nimport { observer } from \"mobx-react\";\nimport { useServices } from \"../../../../../react-hooks/use-services.hook\";\nimport { LiveCasinoGridItemBetIntervalBox } from \"../boxes/bet-interval/live-casino-grid-item-bet-interval.box\";\nimport { LiveCasinoGridItemBetIntervalMinWrapperBox } from \"../boxes/bet-interval/live-casino-grid-item-bet-interval-min-wrapper.box\";\nimport { Check } from \"@sparkware/app-utils\";\nimport {LiveCasinoMinMaxBetComponentProps} from \"./live-casino-min-max-bet.component.props\";\n\nexport const LiveCasinoMinMaxBet: React.FC<LiveCasinoMinMaxBetComponentProps> = observer((props) => {\n const services = useServices();\n\n const tableInfo = props.liveTable;\n let minBet: number;\n let maxBet: number;\n\n if (Check.isEmpty(tableInfo) || (tableInfo.MinBet === undefined || tableInfo.MaxBet === undefined)) {\n minBet = props.gameInfo.minBet;\n maxBet = props.gameInfo.maxBet;\n } else {\n minBet = tableInfo.MinBet;\n maxBet = tableInfo.MaxBet;\n }\n\n if (!minBet || !maxBet) {\n services.logger.info(`format$$$ invalid input for gameType => ${props.gameInfo.gameType} ${minBet}-${maxBet}`);\n return;\n }\n\n const renderMinBet = (minBet: number) => {\n return (\n <>\n {props.isHideMaxBet && <LiveCasinoGridItemBetIntervalMinWrapperBox>\n {services.translation.translate('MIN_BET')}\n </LiveCasinoGridItemBetIntervalMinWrapperBox>}\n {services.currency.formatMoney(minBet, true)}\n </>\n );\n };\n\n\n return (\n <LiveCasinoGridItemBetIntervalBox className='cy-live-casino-grid-item-bet-interval'>\n <span>\n {\n (services.device.isMobile || props.isHideMaxBet) ?\n renderMinBet(minBet) :\n services.currency.formatMinMaxBet(minBet, maxBet)\n }\n </span>\n </LiveCasinoGridItemBetIntervalBox>\n );\n});","import React from 'react';\nimport { IRegulationComponents } from \"./regulation-components.interface\";\nimport {\n HeaderWelcomeLoginButtonComponentProps\n} from \"../../components/header/buttons/login-button/header-login-button.component.props\";\nimport {\n HeaderWelcomeRegisterButtonComponentProps\n} from \"../../components/header/buttons/register-button/header-register-button.component.props\";\nimport {\n HeaderLoginButtonComponent\n} from \"../../components/header/buttons/login-button/header-login-button.component\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport {\n HeaderRegisterButtonComponent\n} from \"../../components/header/buttons/register-button/header-register-button.component\";\nimport { AboutComponent, AboutComponentProps } from \"../../components/about-component/about.component\";\nimport { MinimumGamblingAgeComponent } from \"../../components/responsible-gambling/minimum-gambling-age/minimum-gambling-age.component\";\nimport { LastLoginComponent } from '../../components/clock-and-last-login-box/last-login/last-login.component';\nimport { LiveCasinoMinMaxBet } from '../../components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/live-casino-min-max-bet.component';\nimport {\n LiveCasinoMinMaxBetComponentProps\n} from \"../../components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/live-casino-min-max-bet.component.props\";\n\nexport class RegulationComponentsCommon implements IRegulationComponents {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n\n renderHeaderLoginButton(props: HeaderWelcomeLoginButtonComponentProps): React.ReactElement {\n return (\n <HeaderLoginButtonComponent {...props} />\n );\n }\n\n renderHeaderRegisterButton(props: HeaderWelcomeRegisterButtonComponentProps): React.ReactElement {\n return (\n <HeaderRegisterButtonComponent {...props} />\n );\n }\n\n renderHeaderRegulationIcons() {\n return null;\n }\n\n renderHeaderMinimumGamblingAge() {\n return (<MinimumGamblingAgeComponent />);\n }\n\n renderLastLoginComponent() {\n return (<LastLoginComponent />);\n }\n\n renderLiveCasinoMinMaxBet(props: LiveCasinoMinMaxBetComponentProps) {\n return (\n <LiveCasinoMinMaxBet {...props} />\n );\n }\n\n protected _getAboutDialogProps(): Promise<AboutComponentProps> {\n return Promise.resolve({});\n }\n\n showAboutDialog(): Promise<void> {\n return this._getAboutDialogProps().then(props => {\n return new Promise<void>(resolve => {\n this.services.dialog.showModal(dialogHandler => <AboutComponent\n {...props}\n clientVersion={this.services.sdk.getSkin().getVersion()}\n dialogHandler={dialogHandler}\n />, {\n title: this.services.translation.translate(\"ABOUT_TITLE\"),\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n onClosed: () => resolve()\n });\n })\n })\n\n\n }\n\n}","import {IRegulationMenuItemFactory} from \"./regulation-menu-item-factory.interface\";\nimport {MenuItemKey} from \"../../configurations/config-data-sections/generated-config-const\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IMenuItemRenderer} from \"../renderer/menu-item.renderer.interface\";\nimport {IMenuItemConfigReader} from \"../menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IMenuItemActionFactoryService} from \"../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\nexport class RegulationMenuItemFactoryBase implements IRegulationMenuItemFactory {\n constructor(protected readonly services: IServiceFactoryExtended) {\n }\n\n getSideMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n\n getCrossBrandsAboveSearchItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n getBottomNavBarMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n\n getUsefulLinksMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n\n getUserMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n\n getAppHeaderMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n\n getHomepageHeaderArenaMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n return null;\n }\n\n}","import {INavigateLinkOptions} from \"../links-navigation.service.interface\";\n\nexport enum RegulationNavigationHookContinuationMode {\n Continue,\n Block\n}\n\nexport interface IRegulationLinkNavigationHookResult {\n continuationMode: RegulationNavigationHookContinuationMode;\n options?: INavigateLinkOptions\n}\n\nexport interface IRegulationLinkNavigationHook {\n navigateLink(options: INavigateLinkOptions): Promise<IRegulationLinkNavigationHookResult>;\n}","import {\n IRegulationLinkNavigationHook,\n IRegulationLinkNavigationHookResult,\n RegulationNavigationHookContinuationMode\n} from \"./regulation-link-navigation-hook.interface\";\nimport {INavigateLinkOptions} from \"../links-navigation.service.interface\";\n\nexport class RegulationNavigationHookBase implements IRegulationLinkNavigationHook {\n async navigateLink(options: INavigateLinkOptions): Promise<IRegulationLinkNavigationHookResult> {\n return {\n continuationMode: RegulationNavigationHookContinuationMode.Continue\n };\n }\n\n}","import {IGameRealityCheckInterval, IRegulation} from \"./regulation.service.interface\";\nimport {ILegacyRegulation} from \"./legacy-regulation.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {REGULATION_NAMES} from \"../../../sdk/src/services/regulation/regulation_const\";\nimport {NullableString} from \"../../../common/types/nullable-types\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {ExternalLinksHandlersFactory} from \"../external-links/handlers-factory/external-links-handlers-factory\";\nimport {IRegulationComponents} from \"./regulation-components.interface\";\nimport {RegulationComponentsCommon} from \"./regulation-components-common\";\nimport {IRegulationMenuItemFactory} from \"../menu-items-common/regulations-specific/regulation-menu-item-factory.interface\";\nimport {RegulationMenuItemFactoryBase} from \"../menu-items-common/regulations-specific/regulation-menu-item-factory-base\";\nimport {\n IRegulationLinkNavigationHook\n} from \"../links-navigation/regulation-hooks/regulation-link-navigation-hook.interface\";\nimport {RegulationNavigationHookBase} from \"../links-navigation/regulation-hooks/regulation-navigation-hook-base\";\nimport { GameChildishIconMode } from \"../../../common/enums/game-childish-icon-mode.enum\";\nimport {GameInfo} from \"../games/game-info\";\n\nexport class LegacyRegulationWrapper implements IRegulation {\n constructor(protected readonly legacyRegulation: ILegacyRegulation,\n public readonly regulationType: number,\n protected services: IServiceFactoryExtended) {\n }\n get name(): string {\n return REGULATION_NAMES[this.regulationType];\n }\n\n get responsibleGamingAge(): number {\n return this.services.sdk.getSkin().getMinimumAge();\n }\n\n getRealityCheckIntervalExpectedByTheGame(): IGameRealityCheckInterval {\n return this.legacyRegulation.getRealityCheckIntervalExpectedByTheGame();\n }\n\n getAgeResponsibleGamingLabel(): NullableString {\n return this.legacyRegulation.getAgeResponsibleGamingLabel();\n }\n\n async disableRealityCheck(): Promise<void> {\n await this.legacyRegulation.updateRealityCheckInterval(0);\n }\n\n showNightLimitMessage(nightLimitExpirationDate: Date) {\n this.legacyRegulation.showNightLimitMessage(nightLimitExpirationDate);\n }\n\n get postLoginActionsArePassed(): boolean {\n return this.legacyRegulation.postLoginActionsArePassed();\n }\n\n logoutUser(): Promise<void> {\n return this.services.user.logout();\n }\n\n get externalLinks(): IExternalLinksHandlersFactory {\n return new ExternalLinksHandlersFactory(this.services);\n }\n\n get components(): IRegulationComponents {\n return new RegulationComponentsCommon(this.services);\n }\n\n get menuItems(): IRegulationMenuItemFactory {\n return new RegulationMenuItemFactoryBase(this.services);\n }\n\n get linksNavigationHook(): IRegulationLinkNavigationHook {\n return new RegulationNavigationHookBase();\n }\n\n get gameIconAnimationsAllowed(): boolean {\n return this.legacyRegulation.gameIconAnimationsAllowed();\n }\n\n getChildishIconMode(): GameChildishIconMode {\n return this.legacyRegulation.getChildishIconMode();\n }\n\n get isGamblingSessionEnabled(): boolean {\n return false;\n }\n\n formatLastLoginFromUnixTimeStampInSeconds(lastLoginUnixTimeStampInSeconds: number): NullableString {\n return null;\n }\n\n openInactivitySettings(): void {\n\n }\n\n async showRealityCheckMessage(): Promise<void> {\n\n }\n\n get shouldShowExitGamePopup(): boolean {\n return true;\n }\n\n computeGameMaxLimitInCents(gameInfo: GameInfo): number {\n return this.services.walletProxy.computeGameMaxLimit(gameInfo);\n }\n\n computeGameMinLimitInCents(gameInfo: GameInfo): number {\n return 0;\n }\n}","import React from 'react';\nimport {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {ResponsibleGamingButtonsGermanyComponent} from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/germany/responsible-gaming-buttons-germany.component\";\nimport {GermanyResponsibleGamingButtonPlacement} from \"../../../../../common/const/responsible-gaming\";\n\nexport class GermanyRegulationComponents extends RegulationComponentsCommon {\n renderHeaderRegulationIcons() {\n return (\n <ResponsibleGamingButtonsGermanyComponent placement={GermanyResponsibleGamingButtonPlacement.inHeader}/>\n );\n }\n}","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogBox = styled.div`\n display: grid;\n width: 100%;\n grid-template-columns: 1fr 1fr;\n gap: 20px;\n color: ${props => props.theme.colors.textMiddleDark};\n font-size: 1.4rem;\n`","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogHeaderBox = styled.div`\n grid-column: 1 / -1;\n display: flex;\n align-items: center;\n justify-content: center;\n align-content: center;\n text-align: center;\n`","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogFooterBox = styled.div`\n grid-column: 1 / -1;\n display: flex;\n align-items: center;\n justify-content: center;\n align-content: center;\n text-align: center;\n`","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogFieldLabelBox = styled.div`\n ${props => props.theme.font.presets.bold}\n @media ${({theme}) => theme.mediaQuery.sAndBelow } {\n font-size: 1.2rem;\n }\n`","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogFieldValueBox = styled.div`\n color: ${props => props.theme.colors.brandPrimary};\n align-self: flex-end;\n justify-self: flex-end;\n ${props => props.theme.font.presets.bold}\n`","import styled from \"styled-components\";\n\nexport const GermanyRealityCheckDialogButtonsBox = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 20px;\n grid-column: 1/-1;\n`","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {GermanyRealityCheckDialogBox} from \"./boxes/germany.reality-check-dialog.box\";\nimport {GermanyRealityCheckDialogHeaderBox} from \"./boxes/germany.reality-check-dialog-header.box\";\nimport {GermanyRealityCheckDialogFooterBox} from \"./boxes/germany.reality-check-dialog-footer.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {GermanyRealityCheckDialogFieldLabelBox} from \"./boxes/germany.reality-check-dialog-field-label.box\";\nimport {GermanyRealityCheckDialogFieldValueBox} from \"./boxes/germany.reality-check-dialog-field-value.box\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\nimport {GermanyRealityCheckDialogButtonsBox} from \"./boxes/germany.reality-check-dialog-buttons.box\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {DISPLAY_MESSAGE_NAMES} from \"../../../../common/const/casinofied-analytics-consts\";\n\n\ninterface GermanyRealityCheckDialogComponentProps extends ComponentServicesPick<'gameRunner'>{\n dialogHandler: IModalDialogHandler;\n businessCorrelationId: string;\n totalNetLoss: number;\n}\n\n\n\nconst ComponentBody: React.FC<GermanyRealityCheckDialogComponentProps> = observer((props) => {\n const services = useServices();\n\n const isGameRunning = Boolean(props.gameRunner.currentRunningGame);\n\n const sendAnalytics = (action: string) => {\n services.analytics.sendAnalytics('reality_check_message', action);\n }\n\n const sendMessageActionTaken = () => {\n services.casinofiedAnalytics.messageActionTaken({\n businessCorrelationID: props.businessCorrelationId,\n displayMessageName: DISPLAY_MESSAGE_NAMES.REALITY_CHECK_GERMANY_MESSAGE_NAME,\n actionType: \"Confirmation\"\n });\n }\n\n const onCloseGame = async () => {\n\n sendAnalytics('close_game');\n\n sendMessageActionTaken();\n\n await props.gameRunner.currentRunningGame?.closeGame({\n shouldSuggestNextGame: false\n });\n\n props.dialogHandler.close();\n }\n\n const onContinue = async () => {\n if(isGameRunning) {\n sendAnalytics('continue_in_game')\n } else {\n sendAnalytics('continue_in_lobby')\n }\n\n sendMessageActionTaken();\n\n props.dialogHandler.close();\n }\n\n\n const renderContinueButton = () => {\n return (\n <Button preset=\"primary\" onClick={onContinue} className={CyClass('cy-reality-check-close-button')}>\n {services.translation.translate('REALITY_CHECK_DIALOG_CONTINUE_BUTTON')}\n </Button>\n )\n }\n\n const renderButtons = () => {\n if(isGameRunning) {\n return (\n <>\n <Button preset=\"secondary\" onClick={onCloseGame}>\n {services.translation.translate('CLOSE_GAME')}\n </Button>\n\n {renderContinueButton()}\n\n </>\n )\n }\n\n return renderContinueButton()\n\n\n }\n\n const formatSessionTime = () => {\n const sessionTime = services.sessionTimer.currentSessionTimer;\n return sessionTime.hours.toString().padStart(2, '0') + 'h:' + sessionTime.minutes.toString().padStart(2, '0') + 'm';\n }\n\n return (\n <GermanyRealityCheckDialogBox>\n <GermanyRealityCheckDialogHeaderBox>\n {services.translation.translate('REALITY_CHECK_DIALOG_HEADER_TEXT')}\n </GermanyRealityCheckDialogHeaderBox>\n\n <GermanyRealityCheckDialogFieldLabelBox>\n {services.translation.translate('REALITY_CHECK_DIALOG_SESSION_TIMER_LABEL')}\n </GermanyRealityCheckDialogFieldLabelBox>\n\n <GermanyRealityCheckDialogFieldValueBox>\n {formatSessionTime()}\n </GermanyRealityCheckDialogFieldValueBox>\n\n <GermanyRealityCheckDialogFieldLabelBox>\n {\n props.totalNetLoss >= 0\n ? services.translation.translate('REALITY_CHECK_DIALOG_SESSION_LOSSES_LABEL')\n : services.translation.translate('REALITY_CHECK_DIALOG_SESSION_WINNINGS_LABEL')\n }\n </GermanyRealityCheckDialogFieldLabelBox>\n\n <GermanyRealityCheckDialogFieldValueBox>\n {services.currency.formatMoney(Math.abs(props.totalNetLoss))}\n </GermanyRealityCheckDialogFieldValueBox>\n\n <GermanyRealityCheckDialogFooterBox>\n {services.translation.translate('REALITY_CHECK_DIALOG_THANK_YOU_MESSAGE')}\n </GermanyRealityCheckDialogFooterBox>\n\n <GermanyRealityCheckDialogButtonsBox className={CyClass('cy-modal-dialog-buttons-area')}>\n {renderButtons()}\n </GermanyRealityCheckDialogButtonsBox>\n </GermanyRealityCheckDialogBox>\n )\n})\n\nexport const GermanyRealityCheckDialogComponent = withServices(ComponentBody, ['gameRunner']);","import {LegacyRegulationWrapper} from '../legacy-regulation-wrapper'\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {GermanyRegulationComponents} from \"./components/germany.regulation-components\";\nimport {\n GermanyRealityCheckDialogComponent\n} from \"../../../components/reality-check/germany/germany.reality-check-dialog.component\";\nimport {DISPLAY_MESSAGE_IDS, DISPLAY_MESSAGE_NAMES} from \"../../../../common/const/casinofied-analytics-consts\";\n\nexport class GermanyRegulation extends LegacyRegulationWrapper {\n\n async logoutUser(): Promise<void> {\n await this.services.specificDialogs.showConfirmLugasCoolingOffLogout({\n onAccept: async () => super.logoutUser(),\n onReject: async () => {},\n });\n }\n\n get components(): IRegulationComponents {\n return new GermanyRegulationComponents(this.services);\n }\n\n async showRealityCheckMessage(): Promise<void> {\n const gameRunner = await this.services.gameRunner;\n if (!gameRunner.shouldShowRealityCheckMessage) {\n return;\n }\n\n const businessCorrelationId = this.services.tools.getGuid();\n\n let totalNetLoss = 0;\n\n try {\n totalNetLoss = (await this.services.api.userController.getRealityCheckData()).TotalNetLoss;\n } catch (err) {\n this.services.logger.error('Failed to get germany reality check data', err);\n }\n\n return new Promise<void>(resolve => {\n\n this.services.casinofiedAnalytics.messageDisplay({\n displayMessageID: DISPLAY_MESSAGE_IDS.realityCheckGermany,\n displayMessageName: DISPLAY_MESSAGE_NAMES.REALITY_CHECK_GERMANY_MESSAGE_NAME,\n businessCorrelationID: businessCorrelationId\n });\n\n\n this.services.sdk.eventsTrigger.realityCheckOpen();\n\n this.services.dialog.showModal((dialogHandler) => (\n <GermanyRealityCheckDialogComponent dialogHandler={dialogHandler}\n businessCorrelationId={businessCorrelationId}\n totalNetLoss={totalNetLoss}/>), {\n title: this.services.translation.translate('REALITY_CHECK_DIALOG_TITLE'),\n hideCloseButton: true,\n showPopupAboveSecondWebViewHybrid: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n isHighPriority: true,\n shouldBeClosedOnlyByUser: true,\n onClosed: () => {\n this.services.sdk.eventsTrigger.realityCheckClosed();\n resolve();\n }\n })\n })\n }\n}","import {RegistrationExternalLinkHandler} from \"../../registration.external-link-handler\";\nimport {IOpenRegistrationOptions} from \"../../registration.external-link-handler.interface\";\n\nexport class MichiganRegistrationExternalLinkHandler extends RegistrationExternalLinkHandler {\n async openRegistration(options?: IOpenRegistrationOptions): Promise<void> {\n try {\n await this.services.stateOfResidenceIdentifier.displayStateSelectorPopup();\n } catch (err) {\n this.services.logger.debug('State selector popup canceled', err);\n return;\n }\n\n return await super.openRegistration(options);\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/registration.external-link-handler.interface\";\nimport {\n MichiganRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/regulations/michigan/michigan.registration.external-link-handler\";\n\nexport class MichiganExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n get registration(): IRegistrationExternalLinkHandler {\n return new MichiganRegistrationExternalLinkHandler(this.services);\n }\n}","import styled from \"styled-components\";\n\nexport const SessionTimerLabelDefaultBox = styled.div`\n padding-bottom: 0.5rem;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n display: inline-block;\n padding-right: 0.5rem;\n padding-bottom: 0;\n }\n`;\n\nexport const SessionTimerLabelBox = SessionTimerLabelDefaultBox;","import styled from \"styled-components\";\n\nexport const SessionTimerValueDefaultBox = styled.div`\n white-space: nowrap;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n display: inline-block;\n }\n`;\n\nexport const SessionTimerValueBox = SessionTimerValueDefaultBox;","import styled from \"styled-components\";\n\nexport const SessionTimerBox = styled.div`\n font-size: 1.2rem;\n font-weight: 500;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n font-size: 1rem;\n }\n`","import React from 'react';\nimport {reaction} from \"mobx\";\nimport {observer} from \"mobx-react\";\nimport {useEffect, useState} from \"react\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {SessionTimerLabelBox} from \"./boxes/session-timer-label.box\";\nimport {SessionTimerValueBox} from \"./boxes/session-timer-value.box\";\nimport {SessionTimerBox} from \"./boxes/session-timer.box\";\n\nexport const SessionTimerComponent: React.FC<{className?: string}> = observer((props) => {\n const services = useServices();\n const [sessionTimer, setSessionTimer] = useState(services.sessionTimer.currentSessionTimer);\n\n if (!sessionTimer) {\n return null;\n }\n\n const hours = Math.floor(sessionTimer.totalHours);\n const minutes = Math.floor(sessionTimer.minutes);\n\n useEffect(() => {\n const reactionDispose = reaction(() => services.sessionTimer.currentSessionTimer,\n (currentSessionTimer) => {\n if (sessionTimer?.totalMinutes !== currentSessionTimer?.totalMinutes) {\n setSessionTimer(currentSessionTimer);\n }\n });\n\n return () => {\n reactionDispose();\n }\n }, [services.sessionTimer.currentSessionTimer, sessionTimer?.totalMinutes]);\n\n return (\n <SessionTimerBox className={props.className}>\n {!services.device.os.isMobileOS &&\n <SessionTimerLabelBox>\n {services.translation.translate('SESSION_TIMER_TITLE')}:\n </SessionTimerLabelBox>\n\n }\n <SessionTimerValueBox className={CyClass('cy-session-timer')}>\n {`${hours.toString().padStart(2, '0')} : ${minutes.toString().padStart(2, '0')}`}\n </SessionTimerValueBox>\n </SessionTimerBox>\n )\n})","import styled from \"styled-components\";\n\nexport const LastLoginAndSessionTimerBox = styled.div`\n display: flex;\n gap: 10px;\n\n @media ${({ theme }) => theme.mediaQuery.mAndBelow} {\n align-items: center;\n height: 100%;\n }\n\n @media ${({ theme }) => theme.mediaQuery.lAndAbove} {\n flex-direction: column;\n }\n`;\n\nexport const LastLoginAndSessionTimerDefaultBox = LastLoginAndSessionTimerBox;","import styled from \"styled-components\";\n\nexport const LastLoginContainerBox = styled.div`\n @media ${({ theme }) => theme.mediaQuery.mAndBelow} {\n padding-inline-end: 10px;\n border-inline-end: 1px solid ${props => props.theme.colors.textMiddleDark};\n }\n\n @media ${({ theme }) => theme.mediaQuery.lAndAbove} {\n padding-block-end: 10px;\n border-block-end: 1px solid ${props => props.theme.colors.textMiddleDark};\n }\n`;\n\nexport const LastLoginContainerDefaultBox = LastLoginContainerBox;","import { observer } from \"mobx-react\";\nimport { LastLoginComponent } from \"../last-login/last-login.component\"\nimport { SessionTimerComponent } from \"../session-timer/session-timer.component\"\nimport { LastLoginAndSessionTimerBox } from \"./boxes/last-login-and-session-timer.box\"\nimport { LastLoginContainerBox } from \"./boxes/last-login-container.box\";\n\nexport const LastLoginAndSessionTimerComponent: React.FC = observer(() => {\n return (\n <LastLoginAndSessionTimerBox>\n <LastLoginContainerBox>\n <LastLoginComponent />\n </LastLoginContainerBox>\n <SessionTimerComponent />\n </LastLoginAndSessionTimerBox>\n )\n});","import { TimeSpan } from \"@sparkware/app-utils\";\nimport { observer } from \"mobx-react\";\nimport React, { useState, useEffect } from 'react';\nimport { namedSetTimeout } from \"../../../../common/utils/time-functions\";\nimport { DEFAULT_SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL } from \"../../../services/regulation/regulation-const\";\nimport { LastLoginComponent } from \"../last-login/last-login.component\";\nimport { SessionTimerComponent } from \"../session-timer/session-timer.component\";\nimport { LastLoginAndSessionTimerComponent } from \"../last-login-and-session-timer/last-login-and-session-timer.component\";\n\ninterface LastLoginSessionTimerSwitcherComponentProps {\n switchToSessionTimerInterval?: TimeSpan;\n showLastLoginForever?: boolean\n}\nexport const LastLoginSessionTimerSwitcherComponent: React.FC<LastLoginSessionTimerSwitcherComponentProps> = observer((props) => {\n const [renderSessionTimer, setRenderSessionTimer] = useState(false);\n\n useEffect(() => {\n const timerId = namedSetTimeout('SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL', () => {\n setRenderSessionTimer(true);\n }, props.switchToSessionTimerInterval || TimeSpan.fromMinutes(DEFAULT_SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL));\n\n return () => {\n clearTimeout(timerId);\n };\n }, [props.switchToSessionTimerInterval]);\n\n if (props.showLastLoginForever && renderSessionTimer) {\n return (<LastLoginAndSessionTimerComponent />)\n } else if (renderSessionTimer) {\n return <SessionTimerComponent />\n } else {\n return <LastLoginComponent />\n }\n})","export const DEFAULT_SWITCH_TO_SESSION_TIMER_WAIT_INTERVAL = 1;","import React from 'react';\nimport {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {\n HeaderWelcomeRegisterButtonComponentProps\n} from \"../../../../components/header/buttons/register-button/header-register-button.component.props\";\nimport {MinimumGamblingAgeComponent} from \"../../../../components/responsible-gambling/minimum-gambling-age/minimum-gambling-age.component\";\nimport { LastLoginSessionTimerSwitcherComponent } from '../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component';\n\nexport class MichiganRegulationComponents extends RegulationComponentsCommon {\n\n\n renderHeaderRegisterButton(props: HeaderWelcomeRegisterButtonComponentProps): React.ReactElement {\n const specificProps: Partial<HeaderWelcomeRegisterButtonComponentProps> = {};\n if(this.services.regulation.shouldEnforceHybridAppForMobileWeb()) {\n specificProps.text = this.services.translation.translate(\"JOIN_NOW\");\n }\n return super.renderHeaderRegisterButton({\n ...props,\n ...specificProps\n });\n }\n\n renderHeaderMinimumGamblingAge() {\n return(<MinimumGamblingAgeComponent/>);\n }\n\n renderLastLoginComponent() {\n return (<LastLoginSessionTimerSwitcherComponent />)\n }\n}","import {\n GenericSideMenuItemComponent\n} from \"../../../../../components/side-menu-rework/side-menu-items/generic-side-menu-item.component\";\nimport styled from \"styled-components\";\n\n\nexport const MichiganSportSideMenuItemComponent = styled(GenericSideMenuItemComponent)`\n border: 2px solid rgba(112, 115, 114, 0.5) !important;\n border-radius: 10px;\n margin: 0;\n overflow: hidden;\n`;","import React from 'react';\nimport {MenuItemRendererBase} from \"../../../menu-items-common/renderer/menu-item-renderer-base\";\nimport {\n IMenuItemConfigReader\n} from \"../../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {IRenderMenuItemOptions} from \"../../../menu-items-common/renderer/menu-item.renderer.interface\";\nimport {MichiganSportSideMenuItemComponent} from \"./components/michigan.sport-side-menu-item.component\";\nimport {\n IMenuItemActionFactoryService\n} from \"../../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\nexport class MichiganSportSideMenuItemRenderer extends MenuItemRendererBase {\n constructor( configReader: IMenuItemConfigReader,\n services: IServiceFactoryExtended,\n menuItemActionFactory: IMenuItemActionFactoryService) {\n super('sportCrossBrandMenuItem', configReader, services, menuItemActionFactory);\n }\n\n protected _createReactElement(options?: IRenderMenuItemOptions): React.ReactElement {\n return (<MichiganSportSideMenuItemComponent key={this.key} menuItem={this}/>);\n }\n}","import {\n RegulationMenuItemFactoryBase\n} from \"../../menu-items-common/regulations-specific/regulation-menu-item-factory-base\";\nimport {MenuItemKey} from \"../../configurations/config-data-sections/generated-config-const\";\nimport {IMenuItemRenderer} from \"../../menu-items-common/renderer/menu-item.renderer.interface\";\nimport {MichiganSportSideMenuItemRenderer} from \"./side-menu/michigan.sport-side-menu-item.renderer\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IMenuItemActionFactoryService} from \"../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\nexport class MichiganMenuItemFactory extends RegulationMenuItemFactoryBase {\n getSideMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n switch (key) {\n case \"sportCrossBrandMenuItem\":\n return new MichiganSportSideMenuItemRenderer(configReader, this.services, menuItemActionFactory);\n default:\n return super.getSideMenuItem(key, configReader, menuItemActionFactory);\n }\n\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {\n MichiganExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/michigan/michigan.external-links-handlers-factory\";\nimport {MichiganRegulationComponents} from \"./components/michigan.regulation-components\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {\n IRegulationMenuItemFactory\n} from \"../../menu-items-common/regulations-specific/regulation-menu-item-factory.interface\";\nimport {MichiganMenuItemFactory} from \"../../menu-item-regulation-specific/michigan/michigan.menu-item-factory\";\n\nexport class MichiganRegulation extends LegacyRegulationWrapper {\n get externalLinks(): IExternalLinksHandlersFactory {\n return new MichiganExternalLinksHandlersFactory(this.services);\n }\n\n get components(): IRegulationComponents {\n return new MichiganRegulationComponents(this.services);\n }\n\n get menuItems(): IRegulationMenuItemFactory {\n return new MichiganMenuItemFactory(this.services);\n }\n}\n","import React from 'react';\nimport {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {\n HeaderWelcomeLoginButtonComponentProps\n} from \"../../../../components/header/buttons/login-button/header-login-button.component.props\";\nimport {ButtonPreset} from \"../../../../basic-ui-components/button/base/button-props.interface\";\nimport {\n HeaderWelcomeRegisterButtonComponentProps\n} from \"../../../../components/header/buttons/register-button/header-register-button.component.props\";\nimport {OntarioResponsibleGamingButtonsComponent} from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/ontario/ontario.responsible-gaming-buttons.component\";\nimport { LastLoginSessionTimerSwitcherComponent } from '../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component';\n\nexport class OntarioRegulationComponents extends RegulationComponentsCommon {\n renderHeaderLoginButton(props: HeaderWelcomeLoginButtonComponentProps): React.ReactElement {\n const buttonPreset: ButtonPreset = this.services.regulation.shouldEnforceHybridAppForMobileWeb()\n ? \"special\"\n : \"secondary\";\n return super.renderHeaderLoginButton({\n ...props,\n preset: buttonPreset\n });\n }\n\n renderHeaderRegisterButton(props: HeaderWelcomeRegisterButtonComponentProps): React.ReactElement {\n const buttonPreset: ButtonPreset = this.services.regulation.shouldEnforceHybridAppForMobileWeb()\n ? \"secondary\"\n : \"special\";\n return super.renderHeaderRegisterButton({\n ...props,\n preset: buttonPreset\n });\n }\n\n renderHeaderRegulationIcons() {\n return (\n <OntarioResponsibleGamingButtonsComponent isShownInHeader={true}/>\n );\n }\n\n renderLastLoginComponent() {\n return (<LastLoginSessionTimerSwitcherComponent />)\n }\n}","import {RegistrationExternalLinkHandler} from \"../../registration.external-link-handler\";\nimport {IOpenRegistrationOptions} from \"../../registration.external-link-handler.interface\";\n\nexport class OntarioRegistrationExternalLinkHandler extends RegistrationExternalLinkHandler {\n protected get _shouldHideCloseButton(): boolean {\n return true;\n }\n\n async openRegistration(options?: IOpenRegistrationOptions): Promise<void> {\n try {\n await this.services.stateOfResidenceIdentifier.displayStateSelectorPopup();\n } catch (err) {\n this.services.logger.debug('State selector popup canceled', err);\n return;\n }\n\n return super.openRegistration(options);\n }\n}","import {MyAccountUploadDocumentsExternalLinkHandler} from \"../../my-account-upload-documents.external-link-handler\";\n\nexport class OntarioMyAccountUploadDocumentsExternalLinkHandler extends MyAccountUploadDocumentsExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/registration.external-link-handler.interface\";\nimport {\n OntarioRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/regulations/ontario/ontario.registration.external-link-handler\";\nimport {\n IMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport {\n OntarioMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/regulations/ontario/ontario.my-account-upload-documents.external-link-handler\";\n\nexport class OntarioExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n get registration(): IRegistrationExternalLinkHandler {\n return new OntarioRegistrationExternalLinkHandler(this.services);\n }\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new OntarioMyAccountUploadDocumentsExternalLinkHandler(this.services);\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {OntarioRegulationComponents} from \"./components/ontario.regulation-components\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {\n OntarioExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/ontario/ontario.external-links-handlers-factory\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\n\nexport class OntarioRegulation extends LegacyRegulationWrapper {\n get components(): IRegulationComponents {\n return new OntarioRegulationComponents(this.services);\n }\n\n get externalLinks(): IExternalLinksHandlersFactory {\n return new OntarioExternalLinksHandlersFactory(this.services);\n }\n}","import {RegistrationExternalLinkHandler} from \"../../registration.external-link-handler\";\n\nexport class NetherlandsRegistrationExternalLinkHandler extends RegistrationExternalLinkHandler {\n protected get _shouldHideCloseButton(): boolean {\n return true;\n }\n}","import {MyAccountUploadDocumentsExternalLinkHandler} from \"../../my-account-upload-documents.external-link-handler\";\n\nexport class NetherlandsMyAccountUploadDocumentsExternalLinkHandler extends MyAccountUploadDocumentsExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import {RealGamePlayPendingActionExternalLinkHandler} from \"../real-game-play-pending-action.external-link-handler\";\n\nexport class NetherlandsRealGamePlayPendingActionExternalLinkHandler extends RealGamePlayPendingActionExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/registration.external-link-handler.interface\";\nimport {\n NetherlandsRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/regulations/netherlands/netherlands.registration.external-link-handler\";\nimport {\n IMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport {\n NetherlandsMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/regulations/netherlands/netherlands.my-account-upload-documents.external-link-handler\";\nimport {\n IPendingActionExternalLinkHandler\n} from \"../../../handlers/pending-action/pending-action.external-link-handler.interface\";\nimport {\n NetherlandsRealGamePlayPendingActionExternalLinkHandler\n} from \"../../../handlers/pending-action/real-game-play/netherlands/netherlands.real-game-play-pending-action.external-link-handler\";\nimport {\n IOpenRealGamePlayPendingActionOptions\n} from \"../../../handlers/pending-action/real-game-play/real-game-play-pending-action.external-link-handler.interface\";\n\nexport class NetherlandsExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n get registration(): IRegistrationExternalLinkHandler {\n return new NetherlandsRegistrationExternalLinkHandler(this.services);\n }\n\n get realGamePlayPendingAction(): IPendingActionExternalLinkHandler<IOpenRealGamePlayPendingActionOptions> {\n return new NetherlandsRealGamePlayPendingActionExternalLinkHandler(this.services);\n }\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new NetherlandsMyAccountUploadDocumentsExternalLinkHandler(this.services)\n }\n}","import {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {NetherlandsMinimumGamblingAgeComponent} from \"../../../../components/responsible-gambling/minimum-gambling-age/regulations/netherlands/netherlands.minimum-gambling-age.component\";\nimport {NetherlandsSelfTestButtonComponent} from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/netherlands/self-test-button/netherlands.self-test-button.component\";\nimport { LastLoginSessionTimerSwitcherComponent } from '../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component';\n\nexport class NetherlandsRegulationComponents extends RegulationComponentsCommon {\n renderHeaderMinimumGamblingAge() {\n return(<NetherlandsMinimumGamblingAgeComponent isShownInHeader={true}/>);\n }\n\n renderHeaderRegulationIcons() {\n return (\n <NetherlandsSelfTestButtonComponent/>\n );\n }\n\n renderLastLoginComponent() {\n return (<LastLoginSessionTimerSwitcherComponent />)\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport { IExternalLinksHandlersFactory } from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {\n NetherlandsExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/netherlands/netherlands.external-links-handlers-factory\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {NetherlandsRegulationComponents} from \"./components/netherlands.regulation-components\";\n\nexport class NetherlandsRegulation extends LegacyRegulationWrapper {\n get externalLinks(): IExternalLinksHandlersFactory {\n return new NetherlandsExternalLinksHandlersFactory(this.services);\n }\n\n get components(): IRegulationComponents {\n return new NetherlandsRegulationComponents(this.services);\n }\n}","import {RegistrationExternalLinkHandler} from \"../../registration.external-link-handler\";\n\nexport class NewJerseyRegistrationExternalLinkHandler extends RegistrationExternalLinkHandler {\n protected get _shouldHideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/registration.external-link-handler.interface\";\nimport {\n NewJerseyRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/regulations/new-jersey/new-jersey.registration.external-link-handler\";\n\nexport class NewJerseyExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n get registration(): IRegistrationExternalLinkHandler {\n return new NewJerseyRegistrationExternalLinkHandler(this.services);\n }\n}","import styled from \"styled-components\";\n\nexport const USSafeToPlayButtonBox = styled.div`\n background-image: url(\"${props => props.theme.assets.images.regulation_specific.us.nj_us_flag_svg.toString()}\");\n height: 25px;\n width:37px;\n background-size: contain;\n background-repeat: no-repeat;\n margin-right: 10px;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n height: 20px;\n width:30px;\n }\n`","import styled from \"styled-components\";\n\nexport const USSafeToPlayContainerBox = styled.div`\n display: flex;\n align-items: center;\n cursor: pointer;\n`","import styled from \"styled-components\";\n\nexport const USSafeToPlayLabelBox = styled.span`\n font-size: 12px;\n margin-right: 8px;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n font-size: 11px;\n }\n`","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\nimport {USSafeToPlayButtonBox} from \"../boxes/us.safe-to-play.box\";\nimport {USSafeToPlayContainerBox} from \"../boxes/us.safe-to-play-container.box\";\nimport {USSafeToPlayLabelBox} from \"../boxes/us.safe-to-play-label.box\";\n\nexport const USSafeToPlayComponent = observer(\n class USFlagComponent extends OrbitComponent {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_nj_flag_icon');\n await this.services.linksNavigation.openSafeToPlay();\n }\n render() {\n return (\n <USSafeToPlayContainerBox className={CyClass('cy-safe-to-play')} onClick={this._onClickHandler}>\n <USSafeToPlayLabelBox>\n {this.services.translation.translate('NJ_JERSEY_COUNTRY_NAME')}\n </USSafeToPlayLabelBox>\n <USSafeToPlayButtonBox />\n </USSafeToPlayContainerBox>\n );\n }\n }\n);","import styled from \"styled-components\";\n\n\nexport const USResponsibleGamingButtonsBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`","import styled from \"styled-components\";\n\nexport const USResponsibleGamingBox = styled.div`\n background-image: url(\"${props => props.theme.assets.images.regulation_specific.us.nj_rg_icon_svg.toString()}\");\n height: 30px;\n width:90px;\n background-size: contain;\n background-repeat: no-repeat;\n \n @media ${({theme}) => theme.mediaQuery.sAndBelow} {\n height: 25px;\n width:70px;\n }\n`","import React from \"react\";\nimport {OrbitComponent} from \"../../../../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../../../common/cy-classes\";\nimport {USResponsibleGamingBox} from \"../boxes/us.responsible-gaming.box\";\n\nexport const USResponsibleGamingComponent = observer(\n class USResponsibleGamingComponent extends OrbitComponent {\n private _onClickHandler = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", 'Icon_nj_resp_game_icon');\n await this.services.linksNavigation.openResponsibleGaming();\n }\n render() {\n return (\n <USResponsibleGamingBox className={CyClass('cy-responsible-gaming-button')}\n onClick={this._onClickHandler}/>\n );\n }\n }\n);","import {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {USSafeToPlayComponent} from \"./safe-to-play/us.safe-to-play.component\";\nimport {USResponsibleGamingButtonsBox} from \"./boxes/us.responsible-gaming-buttons.box\";\nimport {USResponsibleGamingComponent} from \"./responsible-gaming/us.responsible-gaming.component\";\n\nexport const USResponsibleGamingButtonsComponent = observer(class DenmarkResponsibleGamingButtonsComponent extends OrbitComponent {\n render() {\n const usFlag = this.services.configuration.data.header.responsibleIcons.usFlag;\n return (\n <USResponsibleGamingButtonsBox>\n {usFlag && usFlag.display && <USSafeToPlayComponent/>}\n <USResponsibleGamingComponent/>\n </USResponsibleGamingButtonsBox>\n );\n }\n});","import { RegulationComponentsCommon } from \"../../regulation-components-common\";\nimport { USResponsibleGamingButtonsComponent } from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/us/us.responsible-gaming-buttons.component\";\nimport { TimeSpan } from \"@sparkware/app-utils\";\nimport { LastLoginSessionTimerSwitcherComponent } from \"../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component\";\n\nexport class NewJerseyRegulationComponents extends RegulationComponentsCommon {\n renderHeaderRegulationIcons() {\n return (\n <USResponsibleGamingButtonsComponent />\n );\n }\n\n renderLastLoginComponent() {\n return (<LastLoginSessionTimerSwitcherComponent\n showLastLoginForever={true}\n switchToSessionTimerInterval={TimeSpan.fromSeconds(10)}\n />)\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {\n NewJerseyExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/new-jersey/new-jersey.external-links-handlers-factory\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {NewJerseyRegulationComponents} from \"./components/new-jersey.regulation-components\";\nimport {DialogButtonClickHandleResultEnum} from \"../../dialog/dialog.service.interface\";\nimport {NullableString} from \"../../../../common/types/nullable-types\";\n\nexport class NewJerseyRegulation extends LegacyRegulationWrapper {\n get externalLinks(): IExternalLinksHandlersFactory {\n return new NewJerseyExternalLinksHandlersFactory(this.services);\n }\n\n get components(): IRegulationComponents {\n return new NewJerseyRegulationComponents(this.services);\n }\n async logoutUser(): Promise<void>{\n await super.logoutUser();\n this.services.dialog.showSimpleTextModal({\n title: this.services.translation.translate('NJ_LOGOUT_MESSAGE_TITLE'),\n text: this.services.translation.translate('NJ_LOGOUT_MESSAGE_TEXT'),\n shouldBeClosedOnlyByUser: true,\n buttons: [\n {\n text: this.services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async ()=> {\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ]\n })\n }\n\n formatLastLoginFromUnixTimeStampInSeconds(lastLoginUnixTimeStampInSeconds: number): NullableString {\n const date = new Date(lastLoginUnixTimeStampInSeconds * 1000);\n\n const options: Intl.DateTimeFormatOptions = {\n timeZone: 'America/New_York',\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: true\n };\n\n return new Intl.DateTimeFormat('en-US', options).format(date);\n\n }\n}","import {RegistrationExternalLinkHandler} from \"../../registration.external-link-handler\";\n\nexport class UkRegistrationExternalLinkHandler extends RegistrationExternalLinkHandler {\n protected get _shouldHideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/registration.external-link-handler.interface\";\nimport {\n UkRegistrationExternalLinkHandler\n} from \"../../../handlers/registration/regulations/uk/uk.registration.external-link-handler\";\n\nexport class UkExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n get registration(): IRegistrationExternalLinkHandler {\n return new UkRegistrationExternalLinkHandler(this.services);\n }\n}","import { RegulationComponentsCommon } from \"../../regulation-components-common\";\nimport {\n LiveCasinoMinMaxBetComponentProps\n} from \"../../../../components/arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/live-casino-min-max-bet.component.props\";\n\nexport class UKRegulationComponents extends RegulationComponentsCommon {\n renderLiveCasinoMinMaxBet(props: LiveCasinoMinMaxBetComponentProps): React.ReactElement {\n // if slot game - turn on isHideMaxBet flag\n const isLiveSlot = this.services.liveTableFeeds.getIsLiveSlotGroup(props.gameInfo.subGroupName);\n return super.renderLiveCasinoMinMaxBet({\n ...props,\n isHideMaxBet: isLiveSlot\n });\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {\n UkExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/uk/uk.external-links-handlers-factory\";\nimport { UKRegulationComponents } from \"./components/uk.regulation-components\";\nimport { IRegulationComponents } from \"../regulation-components.interface\";\n\nexport class UkRegulation extends LegacyRegulationWrapper {\n get components(): IRegulationComponents {\n return new UKRegulationComponents(this.services);\n }\n \n get externalLinks(): IExternalLinksHandlersFactory {\n return new UkExternalLinksHandlersFactory(this.services);\n }\n\n get shouldShowExitGamePopup(): boolean {\n return false;\n }\n}","import {MyAccountUploadDocumentsExternalLinkHandler} from \"../../my-account-upload-documents.external-link-handler\";\n\nexport class ItalyMyAccountUploadDocumentsExternalLinkHandler extends MyAccountUploadDocumentsExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport {\n ItalyMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/regulations/italy/italy.my-account-upload-documents.external-link-handler\";\n\nexport class ItalyExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new ItalyMyAccountUploadDocumentsExternalLinkHandler(this.services)\n }\n}","import {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {AboutComponentProps} from \"../../../../components/about-component/about.component\";\n\nexport class ItalyRegulationComponents extends RegulationComponentsCommon {\n protected async _getAboutDialogProps(): Promise<AboutComponentProps> {\n const props = await super._getAboutDialogProps();\n return {\n ...props,\n fiscalCode: this.services.user.userData.taxId\n };\n }\n}","import React from 'react';\nimport {MenuItemRendererBase} from \"../../../menu-items-common/renderer/menu-item-renderer-base\";\n\nimport {IRenderMenuItemOptions} from \"../../../menu-items-common/renderer/menu-item.renderer.interface\";\nimport {\n IMenuItemConfigReader\n} from \"../../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {\n IMenuItemActionFactoryService\n} from \"../../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\n/**\n * This class is for demonstrating how to override menu items per regulation. It should be removed when we will have a real case\n */\nexport class ItalyTestMenuItemRenderer extends MenuItemRendererBase {\n constructor( configReader: IMenuItemConfigReader,\n services: IServiceFactoryExtended,\n menuItemActionFactory: IMenuItemActionFactoryService) {\n super('testRegulationSpecificMenuItem', configReader, services, menuItemActionFactory);\n }\n\n\n protected _createReactElement(options?: IRenderMenuItemOptions): React.ReactElement {\n return (\n <div key={this.key} style={{backgroundColor: \"red\", color: 'black'}} onClick={() => this.execute()}>\n {this.text}\n </div>\n )\n }\n\n}","import {RegulationMenuItemFactoryBase} from \"../../menu-items-common/regulations-specific/regulation-menu-item-factory-base\";\nimport {MenuItemKey} from \"../../configurations/config-data-sections/generated-config-const\";\nimport {IMenuItemRenderer} from \"../../menu-items-common/renderer/menu-item.renderer.interface\";\nimport {ItalyTestMenuItemRenderer} from \"./side-menu/italy.test-menu-item.renderer\";\nimport {IMenuItemConfigReader} from \"../../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {IMenuItemActionFactoryService} from \"../../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\n/**\n * This class is for demonstrating how to override menu items per regulation. It should be removed when we will have a real case\n */\nexport class ItalyMenuItemFactory extends RegulationMenuItemFactoryBase {\n getSideMenuItem(key: MenuItemKey, configReader: IMenuItemConfigReader, menuItemActionFactory: IMenuItemActionFactoryService): IMenuItemRenderer | null {\n switch (key) {\n case \"testRegulationSpecificMenuItem\":\n return new ItalyTestMenuItemRenderer(configReader, this.services, menuItemActionFactory);\n default:\n return super.getSideMenuItem(key, configReader, menuItemActionFactory);\n }\n\n }\n}","import styled from \"styled-components\";\n\nexport const InactivityTimeoutSettingsBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 20px;\n min-height: 150px;\n font-size: 14px;\n ${props => props.theme.font.presets.bold};\n`","import styled from \"styled-components\";\nimport {Select} from \"../../../basic-ui-components/form/select.component\";\n\nexport const DropDownBox = styled(Select)`\n font-size: 14px;\n`","import React, {ChangeEvent, useState} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {InactivityTimeoutSettingsBox} from \"./boxes/inactivity-timeout-settings.box\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {DropDownBox} from \"./boxes/drop-down.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {ModalDialogActionsComponent} from \"../modal-dialog/modal-dialog-actions.component\";\n\n\ninterface InactivityTimeoutSettingsComponentProps {\n dialogHandler: IModalDialogHandler;\n analyticsCategory: string;\n}\n\n//inactivity_timeout_settings_title\n\nexport const InactivityTimeoutSettingsComponent: React.FC<InactivityTimeoutSettingsComponentProps> = observer((props) => {\n const services = useServices();\n\n const currentSettings = services.user.getInactivityTimeoutSettings();\n\n const [currentSelectedValue, setCurrentSelectedValue] = useState(currentSettings.possibleSessionTimeoutValues.find(v => v.totalMinutes === currentSettings.currentSessionTimeout.totalMinutes) ?? currentSettings.possibleSessionTimeoutValues[0]\n ?? services.user.getDefaultAccessTokenLifeTime());\n\n\n const sendAnalytics = (action: string, label?: string) => {\n services.analytics.sendAnalytics(props.analyticsCategory, action, label);\n }\n\n const renderOption = (timeSpan: TimeSpan) => {\n\n return (\n <option key={timeSpan.totalMinutes} value={timeSpan.totalMinutes}>\n {services.translation.translate('INACTIVITY_TIMEOUT_SETTINGS_MINUTES', {\n minutes: timeSpan.totalMinutes\n })}\n </option>\n )\n }\n\n\n const onChange = (event: ChangeEvent<HTMLSelectElement>) => {\n setCurrentSelectedValue(TimeSpan.fromMinutes(parseInt(event.target.value)));\n }\n\n const onClick = () => {\n services.user.setInactivityTimeout(currentSelectedValue);\n if(currentSelectedValue.totalMinutes !== currentSettings.currentSessionTimeout.totalMinutes) {\n sendAnalytics('changed', currentSelectedValue.totalMinutes.toString());\n }\n props.dialogHandler.close();\n\n }\n\n\n return (\n <InactivityTimeoutSettingsBox>\n <div>{services.translation.translate('INACTIVITY_TIMEOUT_SETTINGS_LABEL')}</div>\n <DropDownBox value={currentSelectedValue.totalMinutes} onChange={onChange} hasError={false} width={\"100%\"} className={CyClass('cy-inactivity-timeout-select')}>\n {currentSettings.possibleSessionTimeoutValues.map(renderOption)}\n </DropDownBox>\n\n <ModalDialogActionsComponent primaryAction={{\n onClick: onClick,\n text:services.translation.translate('OK')\n }} />\n\n </InactivityTimeoutSettingsBox>\n );\n});","import React from 'react';\nimport {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {\n ItalyExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/italy/italy.external-links-handlers-factory\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {ItalyRegulationComponents} from \"./components/italy.regulation-components\";\nimport {\n IRegulationMenuItemFactory\n} from \"../../menu-items-common/regulations-specific/regulation-menu-item-factory.interface\";\nimport {ItalyMenuItemFactory} from \"../../menu-item-regulation-specific/italy/italy.menu-item-factory\";\nimport {\n InactivityTimeoutSettingsComponent\n} from \"../../../components/inactivity-timeout-settings/inactivity-timeout-settings.component\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {ITALY_MAX_GAME_LIMIT_AMOUNT_IN_CENTS} from \"./italy-regulation-constants\";\n\n\n\nexport class ItalyRegulation extends LegacyRegulationWrapper {\n get externalLinks(): IExternalLinksHandlersFactory {\n return new ItalyExternalLinksHandlersFactory(this.services);\n }\n\n get components(): IRegulationComponents {\n return new ItalyRegulationComponents(this.services);\n }\n\n get menuItems(): IRegulationMenuItemFactory {\n return new ItalyMenuItemFactory(this.services);\n }\n\n openInactivitySettings(): void {\n const analyticsCategory = 'italy_inactivity_window';\n\n this.services.analytics.sendAnalytics(analyticsCategory, 'open');\n\n this.services.dialog.showModal((dialogHandler) => {\n return (\n <InactivityTimeoutSettingsComponent dialogHandler={dialogHandler} analyticsCategory={analyticsCategory}/>\n );\n }, {\n title: this.services.translation.translate('INACTIVITY_TIMEOUT_SETTINGS_TITLE'),\n mobileCenterHeader: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n onClosedByXButton: () => {\n this.services.analytics.sendAnalytics(analyticsCategory, 'closed');\n }\n })\n }\n\n computeGameMaxLimitInCents(gameInfo: GameInfo): number {\n return Math.min(ITALY_MAX_GAME_LIMIT_AMOUNT_IN_CENTS, this.services.walletProxy.computeGameMaxLimit(gameInfo));\n }\n\n computeGameMinLimitInCents(gameInfo: GameInfo): number {\n return 100;\n }\n}","import {MyAccountUploadDocumentsExternalLinkHandler} from \"../../my-account-upload-documents.external-link-handler\";\n\nexport class RomaniaMyAccountUploadDocumentsExternalLinkHandler extends MyAccountUploadDocumentsExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import {ExternalLinksHandlersFactory} from \"../../external-links-handlers-factory\";\nimport {\n IMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport {\n RomaniaMyAccountUploadDocumentsExternalLinkHandler\n} from \"../../../handlers/my-account-upload-documents/regulations/romania/romania.my-account-upload-documents.external-link-handler\";\n\nexport class RomaniaExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new RomaniaMyAccountUploadDocumentsExternalLinkHandler(this.services)\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {\n IExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/external-links-handlers-factory.interface\";\nimport {\n RomaniaExternalLinksHandlersFactory\n} from \"../../external-links/handlers-factory/regulations/romania/romania.external-links-handlers-factory\";\n\nexport class RomaniaRegulation extends LegacyRegulationWrapper {\n get externalLinks(): IExternalLinksHandlersFactory {\n return new RomaniaExternalLinksHandlersFactory(this.services);\n }\n}","import {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {AboutComponentProps} from \"../../../../components/about-component/about.component\";\n\nexport class PortugalRegulationComponents extends RegulationComponentsCommon {\n protected async _getAboutDialogProps(): Promise<AboutComponentProps> {\n const props = await super._getAboutDialogProps();\n const sessionBalance = await this.services.user.getOpenSessionsRealMoneyBalance();\n return {\n ...props,\n openSessionsBalance: sessionBalance\n };\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {PortugalRegulationComponents} from \"./components/portugal.regulation-components\";\nimport {IRegulationComponents} from \"../regulation-components.interface\";\n\nexport class PortugalRegulation extends LegacyRegulationWrapper {\n get components(): IRegulationComponents {\n return new PortugalRegulationComponents(this.services);\n }\n}","import React from \"react\";\nimport {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {AboutComponentProps} from \"../../../../components/about-component/about.component\";\nimport {SwedenMinimumGamblingAgeComponent} from \"../../../../components/responsible-gambling/minimum-gambling-age/regulations/sweden/sweden.minimum-gambling-age.component\";\nimport {SwedenResponsibleGamingButtonsComponent} from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/sweden/sweden.responsible-gaming-buttons.component\";\nimport { LastLoginSessionTimerSwitcherComponent } from \"../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component\";\n\nexport class SwedenRegulationComponents extends RegulationComponentsCommon {\n protected async _getAboutDialogProps(): Promise<AboutComponentProps> {\n const props = await super._getAboutDialogProps();\n const sessionBalance = await this.services.user.getOpenSessionsRealMoneyBalance();\n return {\n ...props,\n openSessionsBalance: sessionBalance\n };\n }\n\n renderHeaderMinimumGamblingAge() {\n return (<SwedenMinimumGamblingAgeComponent isShownInHeader={true} />);\n }\n\n renderHeaderRegulationIcons() {\n return (\n <SwedenResponsibleGamingButtonsComponent useIconsOnly={false} isShownInHeader={true} />\n );\n }\n\n renderLastLoginComponent() {\n return (<LastLoginSessionTimerSwitcherComponent />)\n }\n}","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport { IRegulationComponents } from \"../regulation-components.interface\";\nimport {SwedenRegulationComponents} from \"./components/sweden.regulation-components\";\n\nexport class SwedenRegulation extends LegacyRegulationWrapper {\n get components(): IRegulationComponents {\n return new SwedenRegulationComponents(this.services);\n }\n}","import {MyAccountUploadDocumentsExternalLinkHandler} from \"../../my-account-upload-documents.external-link-handler\";\n\nexport class DenmarkMyAccountUploadDocumentsExternalLinkHandler extends MyAccountUploadDocumentsExternalLinkHandler {\n protected get _hideCloseButton(): boolean {\n return true;\n }\n}","import { IMyAccountUploadDocumentsExternalLinkHandler } from \"../../../handlers/my-account-upload-documents/my-account-upload-documents.external-link-handler.interface\";\nimport { DenmarkMyAccountUploadDocumentsExternalLinkHandler } from \"../../../handlers/my-account-upload-documents/regulations/denmark/denmark.my-account-upload-documents.external-link-handler\";\nimport { ExternalLinksHandlersFactory } from \"../../external-links-handlers-factory\";\n\nexport class DenmarkExternalLinksHandlersFactory extends ExternalLinksHandlersFactory {\n\n get myAccountUploadDocuments(): IMyAccountUploadDocumentsExternalLinkHandler {\n return new DenmarkMyAccountUploadDocumentsExternalLinkHandler(this.services);\n }\n}","import React from \"react\";\nimport {RegulationComponentsCommon} from \"../../regulation-components-common\";\nimport {DenmarkResponsibleGamingButtonsComponent} from \"../../../../components/responsible-gambling/responsible-gaming-buttons/regulations/denmark/denmark.responsible-gaming-buttons.component\";\nimport { LastLoginSessionTimerSwitcherComponent } from \"../../../../components/clock-and-last-login-box/last-login-session-timer-switcher/last-login-session-timer-switcher.component\";\n\nexport class DenmarkRegulationComponents extends RegulationComponentsCommon {\n renderHeaderRegulationIcons() {\n return (\n <DenmarkResponsibleGamingButtonsComponent/>\n );\n }\n\n renderLastLoginComponent() {\n return (<LastLoginSessionTimerSwitcherComponent />)\n }\n}","import { IExternalLinksHandlersFactory } from '../../external-links/handlers-factory/external-links-handlers-factory.interface';\nimport { DenmarkExternalLinksHandlersFactory } from '../../external-links/handlers-factory/regulations/denmark/denmark.external-links-handlers-factory';\nimport {LegacyRegulationWrapper} from '../legacy-regulation-wrapper'\nimport {IRegulationComponents} from \"../regulation-components.interface\";\nimport {DenmarkRegulationComponents} from \"./components/denmark.regulation-components\";\n\nexport class DenmarkRegulation extends LegacyRegulationWrapper {\n\n get components(): IRegulationComponents {\n return new DenmarkRegulationComponents(this.services);\n }\n\n get externalLinks(): IExternalLinksHandlersFactory {\n return new DenmarkExternalLinksHandlersFactory(this.services);\n }\n}","import {IModalDialogHandler} from \"../dialog/dialog.service.interface\";\n\nexport interface IConfirmLugasCoolingOffLogoutDialogOptions {\n onAccept: () => Promise<void>;\n onReject: () => Promise<void>;\n}\n\nexport enum DialogResult {\n Accepted,\n Rejected\n}\n\nexport interface ISpecificDialogsService {\n enforceHybridAppModal(analyticsOnClick?: {\n category: string;\n action?: string;\n label?: string;\n value?: any;\n omitStructuredLogger?: boolean;}\n ): IModalDialogHandler;\n showLugasCooldownPopup(): IModalDialogHandler;\n showLugasActivePopup(): IModalDialogHandler;\n showConfirmLugasCoolingOffLogout(options: IConfirmLugasCoolingOffLogoutDialogOptions): Promise<DialogResult>;\n showLoginPopup(confirmClicked: ()=> void): Promise<IModalDialogHandler>;\n showModifyBiometricDialog(): IModalDialogHandler;\n showLogoutGamblingSessionSummary(): Promise<DialogResult>;\n}\n","import {LegacyRegulationWrapper} from \"../legacy-regulation-wrapper\";\nimport {DialogResult} from \"../../specific-dialogs/specific-dialogs.service.interface\";\n\nexport class SpainRegulation extends LegacyRegulationWrapper {\n async logoutUser(): Promise<void> {\n const dialogResult = await this.services.specificDialogs.showLogoutGamblingSessionSummary();\n if(dialogResult === DialogResult.Accepted) {\n await super.logoutUser();\n }\n }\n\n get isGamblingSessionEnabled(): boolean {\n return true;\n }\n}","import {TimeSpan} from '@sparkware/app-utils';\nimport {ServiceBase} from '../ServiceBase';\nimport {IRegulation, IRegulationService} from './regulation.service.interface';\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {LegacyRegulationWrapper} from \"./legacy-regulation-wrapper\";\nimport {NullableString} from \"../../../common/types/nullable-types\";\nimport {CGP_ERROR_CODES} from \"../../../sdk/src/exceptions/cgp_error_codes\";\nimport { observable, makeObservable } from \"mobx\";\nimport {REGULATION_CODE_TYPES} from '../../../sdk/src/services/regulation/regulation_const';\nimport {GermanyRegulation} from './germany/germany.regulation'\nimport {MichiganRegulation} from \"./michigan/michigan.regulation\";\nimport {OntarioRegulation} from \"./ontario/ontario.regulation\";\nimport {NetherlandsRegulation} from \"./netherland/netherlands.regulation\";\nimport {NewJerseyRegulation} from \"./new-jersey/new-jersey.regulation\";\nimport {UkRegulation} from \"./uk/uk.regulation\";\nimport {ItalyRegulation} from \"./italy/italy.regulation\";\nimport {RomaniaRegulation} from \"./romania/romania.regulation\";\nimport {PortugalRegulation} from \"./portugal/portugal.regulation\";\nimport {SwedenRegulation} from \"./sweden/sweden.regulation\";\nimport {DenmarkRegulation} from \"./denmark/denmark.regulation\";\nimport {SpainRegulation} from \"./spain/spain.regulation\";\nimport {IRegulationProxyService} from \"./regulation-proxy.service.interface\";\n\n\nexport class RegulationService extends ServiceBase implements IRegulationService, IRegulationProxyService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this.reaction(() => this.services.user.isAuthorized,\n () => {\n this.current = this._createRegulation();\n }, {\n fireImmediately: true\n });\n }\n getRegulationCode(): number {\n return this.services.sdk.getRegulationService().getRegulationCode();\n }\n\n isUSRegulation(): boolean {\n return this.services.sdk.getRegulationService().isUSRegulation();\n }\n\n getSessionCooldownConfig(): {featureEnabled: boolean; cooldownTime: TimeSpan} {\n\n const sessionCooldownConfig = this.services.sdk.getRegulationService().getSessionCooldownConfig();\n\n return {\n ...sessionCooldownConfig,\n cooldownTime: TimeSpan.parse(sessionCooldownConfig.cooldownTime)\n };\n }\n\n @observable.ref\n current: IRegulation;\n\n\n shouldShowPlayerLimitsToaster(): boolean {\n return this.services.sdk.getRegulationService().shouldShowPlayerLimitsToaster();\n }\n\n shouldEnforceHybridAppForMobileWeb(): boolean {\n return this.services.device.isMobileWebApp && this.services.configuration.servicesConfigs.Skin.enforceHybridAppForMobileWeb;\n }\n\n shouldPreventOpenGameOnMobileWeb(): boolean {\n return this.services.configuration.servicesConfigs.Skin.preventOpenGameOnMobileWeb;\n }\n\n\n getErrorMessage(errorCode: number): NullableString {\n return this.services.sdk.getRegulationService().getErrorMessage(errorCode);\n }\n\n getGeneralErrorMessage(): string {\n return this.getErrorMessage(CGP_ERROR_CODES.GENERAL_ERROR);\n }\n\n logoutUser(): Promise<void>{\n return this.current.logoutUser();\n }\n\n isLoginPopupEnabled(): boolean {\n return this.services.sdk.getRegulationService().isLoginPopupEnabled();\n }\n\n private _createRegulation(): IRegulation {\n const regulationCode = this.getRegulationCode();\n const legacyRegulation = this.services.sdk.currentRegulation;\n switch (regulationCode) {\n case REGULATION_CODE_TYPES.GERMANY:\n return new GermanyRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.MICHIGAN:\n return new MichiganRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.CANADA_ONTARIO:\n return new OntarioRegulation(legacyRegulation, regulationCode, this.services)\n case REGULATION_CODE_TYPES.NETHERLANDS:\n return new NetherlandsRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.NJ:\n return new NewJerseyRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.UK:\n return new UkRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.ITALY:\n return new ItalyRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.ROMANIA:\n return new RomaniaRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.PORTUGAL:\n return new PortugalRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.SWEDEN:\n return new SwedenRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.DK:\n return new DenmarkRegulation(legacyRegulation, regulationCode, this.services);\n case REGULATION_CODE_TYPES.SPAIN:\n return new SpainRegulation(legacyRegulation, regulationCode, this.services);\n default:\n return new LegacyRegulationWrapper(legacyRegulation, regulationCode, this.services);\n }\n }\n\n showRealityCheckMessage(): Promise<void> {\n return this.current.showRealityCheckMessage();\n }\n\n get shouldShowExitGamePopup(): boolean {\n return true;\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {CGPEventSubscription} from \"../sdk/cgp-sdk.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {GNWP_SOURCES} from \"../gnwp/gnwp-consts\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nenum LIMIT_NAMES {\n DEPOSIT_LIMIT = \"DepositLimit\",\n PLAYTIME_LIMIT = \"PlayTimeLimit\",\n BANKROLL_LIMIT = \"BankrollLimit\"\n}\n\ninterface ILimitPeriod {\n unit?: string;\n value?: number;\n typeId?: number;\n currency?: string;\n}\n\nexport class LimitsToasterService extends ServiceBase {\n\n private _limitsData: {\n [k in LIMIT_NAMES]: ILimitPeriod[];\n } = {\n DepositLimit: [],\n PlayTimeLimit: [],\n BankrollLimit: []\n };\n\n private _subscriptions: CGPEventSubscription[] = [];\n\n private _activeLimitToasters: number = 0;\n private _toasterDisplayDurationSec: number = 3;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this.reaction(() => this.services.user.isAuthorized, async () => {\n await this._getPlayerLimits();\n this._showLimitsToaster();\n\n }, {\n fireImmediately: true\n });\n\n this.services.sdk.events.onExternalLinkClosed (async (link: string) => {\n if (link === GNWP_SOURCES.MY_ACCOUNT) {\n await this._getPlayerLimits();\n }\n });\n\n this.services.sdk.events.onLiveGameSwitched(() => {\n this._showLimitsToaster();\n });\n }\n\n private _subscribe() {\n if (this._subscriptions.length === 0) {\n this._subscriptions.push(this.services.sdk.events.onGameClose(this._showLimitsToaster));\n this._subscriptions.push(this.services.sdk.events.onBeforeOAuthStateChanged(this._handleUserLogout));\n }\n }\n\n private _unsubscribe() {\n\n this._subscriptions.forEach(subscription => {\n subscription.off();\n });\n\n this._subscriptions = [];\n }\n\n private _getPlayerLimits = async () => {\n\n await this.services.user.waitForAutoLogin();\n\n if (!this.services.user.isAuthorized) {\n return;\n }\n\n if (!this.services.regulation.shouldShowPlayerLimitsToaster()) {\n return;\n }\n\n try {\n const limitsDataRaw = await this.services.api.userController.getPlayerLimits();\n\n const depositLimitRaw = limitsDataRaw.displayableLimits.find(limit => limit.limitName === LIMIT_NAMES.DEPOSIT_LIMIT);\n this._limitsData.DepositLimit = (depositLimitRaw && depositLimitRaw.limitPeriods) || [];\n\n const playTimeLimitRaw = limitsDataRaw.displayableLimits.find(limit => limit.limitName === LIMIT_NAMES.PLAYTIME_LIMIT);\n this._limitsData.PlayTimeLimit = (playTimeLimitRaw && playTimeLimitRaw.limitPeriods) || [];\n\n const bankrollLimitRaw = limitsDataRaw.displayableLimits.find(limit => limit.limitName === LIMIT_NAMES.BANKROLL_LIMIT);\n this._limitsData.BankrollLimit = (bankrollLimitRaw && bankrollLimitRaw.limitPeriods) || [];\n\n this._subscribe();\n\n } catch(error) {\n this.services.logger.error(\"LimitsToasterService: Failed to get the player limits.\", error);\n }\n }\n\n private _handleUserLogout = () => {\n if (this.services.user.isAuthorized) {\n this._showLimitsToaster();\n this._unsubscribe();\n }\n }\n\n private _getIntervalLabelFromType(typeId: number): string {\n switch (typeId) {\n case 1:\n return this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_DAILY_LABEL\");\n case 2:\n return this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_WEEKLY_LABEL\");\n case 3:\n return this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_MONTHLY_LABEL\");\n default:\n return \"\";\n }\n }\n\n private _getFormatedTimeUnit(value: number, unit: string): string {\n\n if (unit === \"min\") {\n // value is always in minutes and in increments of 60 minutes\n return `${value / 60} ${this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_HOUR_LABEL\")}`;\n }\n\n return `${value} ${this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_HOUR_LABEL\")}`;\n }\n\n private _getFormatedDepositLimitForType(typeId: number): string {\n\n let formatedString = \"\";\n const period = this._limitsData.DepositLimit.find(period => period.typeId === typeId);\n\n if (period) {\n formatedString = `${this._getIntervalLabelFromType(typeId)}: ${this.services.currency.formatMoney(period.value, true)}`;\n }\n\n return formatedString;\n }\n\n private _getFormatedPlayTimeLimitForType(typeId: number): string {\n\n let formatedString = \"\";\n const period = this._limitsData.PlayTimeLimit.find(period => period.typeId === typeId);\n\n if (period) {\n formatedString = `${this._getIntervalLabelFromType(typeId)}: ${this._getFormatedTimeUnit(period.value, period.unit)}`;\n }\n\n return formatedString;\n }\n\n private _getFormatedWithSeparators(limits: string[]): string {\n\n let text = \"\";\n\n limits = limits.filter(limit => limit !== \"\");\n\n limits.forEach((limit, i) => {\n\n text += limit;\n\n if (limits[i + 1]) {\n text += \" / \";\n }\n });\n\n return text;\n }\n\n private _displayDepositLimits() {\n\n if (this._limitsData.DepositLimit.length === 0) {\n return null;\n }\n\n return `${this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_DEPOSIT_LABEL\")} - ${this._getFormatedWithSeparators([this._getFormatedDepositLimitForType(1), this._getFormatedDepositLimitForType(2), this._getFormatedDepositLimitForType(3)])}`;\n }\n\n private _displayPlayTimeLimits() {\n\n if (this._limitsData.PlayTimeLimit.length === 0) {\n return null;\n }\n\n return `${this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_PLAY_TIME_LABEL\")} - ${this._getFormatedWithSeparators([this._getFormatedPlayTimeLimitForType(1), this._getFormatedPlayTimeLimitForType(2), this._getFormatedPlayTimeLimitForType(3)])}`;\n }\n\n private _displayBankrollLimits() {\n\n if (this._limitsData.BankrollLimit.length === 0) {\n return null;\n }\n\n return `${this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_BANKROLL_LABEL\")} - ${this.services.currency.formatMoney(this._limitsData.BankrollLimit[0].value, true)}`;\n }\n\n private _getFormatedLimitsText() {\n const texts = [];\n const depositLimit = this._displayDepositLimits();\n if (depositLimit) {\n texts.push(depositLimit);\n }\n const playTimeLimit = this._displayPlayTimeLimits();\n if (playTimeLimit) {\n texts.push(playTimeLimit);\n }\n const bankrollLimit = this._displayBankrollLimits();\n if (bankrollLimit) {\n texts.push(bankrollLimit);\n }\n return texts;\n }\n\n private _showLimitsToaster = () => {\n\n const hasData = this._limitsData.DepositLimit.length > 0 || this._limitsData.PlayTimeLimit.length > 0 || this._limitsData.BankrollLimit.length > 0;\n\n if (!this.services.regulation.shouldShowPlayerLimitsToaster() || this._activeLimitToasters > 0 || !hasData) {\n return;\n }\n\n // using timeout because there's an issue with the toaster, it won't show if it\n // is displayed while the layout is still loading eg: user logs out or on autologin\n setTimeout(() => {\n this.services.toaster.showStandardToast({\n toastOptions: {\n timeout: TimeSpan.fromSeconds(this._toasterDisplayDurationSec)\n },\n contentProps: {\n title: this.services.translation.translate(\"PLAYER_LIMITS_TOASTER_TITLE\"),\n message: this._getFormatedLimitsText(),\n },\n onToastClosed: () => {\n this._activeLimitToasters--;\n }\n });\n }, 1000);\n this._activeLimitToasters++;\n }\n\n dispose() {\n super.dispose();\n this._unsubscribe();\n }\n}\n","import {\n action,\n IReactionDisposer,\n observable,\n reaction,\n runInAction,\n makeObservable,\n} from \"mobx\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {IPlayerBurnoutService} from \"./player-burnout.service.interface\";\nimport {CGPEventSubscription} from \"../sdk/cgp-sdk.interface\";\n// import { IMessageDataJson } from \"../../../common/interfaces/firebase-messages-handler\";\nimport {IOmgHandlerHook} from \"../external-links/handlers/omg/omg-handler.hook.interface\";\nimport {GameModeEnum} from \"../game-runner/interfaces/game-context/game-context-view-model.interface\";\nimport {ExternalLinksZIndexes} from \"../external-links/external-links-z-indexes\";\n\nexport class PlayerBurnoutService extends ServiceBase implements IPlayerBurnoutService {\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n\n makeObservable(this);\n\n this.reaction(() => this.services.user.isAuthorized,\n this._onAuthStateChange,\n { fireImmediately: true }\n );\n }\n\n @observable.ref\n public renderAnimation = false;\n\n @observable\n private _currentlyDisplayedOmg: IOmgHandlerHook[] = [];\n\n private _burnoutMessageEventSubscription: CGPEventSubscription | null = null;\n private _omgDisplayedEventSubscription: CGPEventSubscription | null = null;\n private _currentRunningGameReaction: IReactionDisposer | null = null;\n\n\n private _onAuthStateChange = (isAuthorized: boolean) => {\n if (isAuthorized) {\n this._subscribe();\n } else {\n this._unsubscribe();\n // Actually I want to remove the floating button if any exists\n this.setRenderAnimation(false);\n }\n }\n\n private get _isRealMoneyPrize(): boolean {\n return this.services.configuration.servicesConfigs.PlayerBurnout.isRealMoneyPrize;\n }\n\n private _subscribe() {\n this._burnoutMessageEventSubscription = this.services.sdk.events.onBurnoutMessageReceived(this._onBurnoutMessageReceivedEvent);\n this.services.gameRunner.then(gameRunner => {\n this._currentRunningGameReaction = reaction(() => gameRunner.currentRunningGame,\n (currentRunningGame) => {\n this._clearCurrentDisplayOmg();\n if(currentRunningGame) {\n if(currentRunningGame.gameMode === GameModeEnum.Real && !this._isRealMoneyPrize) {\n this._omgDisplayedEventSubscription = this.services.sdk.events.onOmgDisplayed(this._onOmgDisplayedEvent);\n }\n } else {\n this.setRenderAnimation(false);\n this._omgDisplayedEventSubscription?.off();\n this._omgDisplayedEventSubscription = null;\n }\n });\n })\n\n }\n\n private _unsubscribe() {\n this._clearCurrentDisplayOmg();\n\n this._burnoutMessageEventSubscription?.off();\n this._omgDisplayedEventSubscription?.off();\n\n this._burnoutMessageEventSubscription = null;\n this._omgDisplayedEventSubscription = null;\n\n if(this._currentRunningGameReaction) {\n this._currentRunningGameReaction();\n this._currentRunningGameReaction = null;\n }\n }\n\n @action.bound\n private _onOmgDisplayedEvent = (omgHook: IOmgHandlerHook) => {\n this._currentlyDisplayedOmg[0] = omgHook;\n\n };\n\n private _clearCurrentDisplayOmg(): void {\n runInAction(() => {\n this._currentlyDisplayedOmg = [];\n });\n }\n\n private _onBurnoutMessageReceivedEvent = (/* dataJson: IMessageDataJson */) => {\n // At any moment we can have only one animation/gift button on the screen.\n // So if a burnout message is received and I need to show the animation but there is another gift button already on the screen\n // then I need to remove the previous one and then reshow the animation\n // Product management is assuring me this will not happen but I need to be sure\n if (this.renderAnimation === true) {\n this.setRenderAnimation(false);\n setTimeout(() => {\n this.setRenderAnimation(true);\n }, 200);\n } else {\n this.setRenderAnimation(true);\n }\n };\n\n public onSafeUnmountNotice() {\n this.setRenderAnimation(false);\n }\n\n @action.bound\n private setRenderAnimation(val: boolean) {\n this.renderAnimation = val;\n }\n\n public showOmg = () => {\n if(this._currentlyDisplayedOmg.length > 0) {\n this._currentlyDisplayedOmg[0].bringToFront();\n this._clearCurrentDisplayOmg();\n }\n }\n\n public checkIfOmgDisplayed = () => {\n return this._currentlyDisplayedOmg.length > 0;\n }\n\n public getBurnoutAnimationZIndex() {\n return ExternalLinksZIndexes.BurnOutAnimation;\n }\n}\n","import React from 'react';\nimport { CmsBannerId } from \"../../../cms/cms-banners/cm-banner-id/cms-banner-id\";\nimport { OfferConfiguration } from \"../../../configurations/config-data-sections/link-to-offer.configuration\";\nimport { IServiceFactory } from \"../../../service-factory.interface\";\nimport {IOffer} from \"../../player-offerings.service.interface\";\n\n\nexport abstract class OfferBase implements IOffer {\n\n constructor(protected services: IServiceFactory, protected offerConfig: OfferConfiguration) {\n }\n\n abstract render(): React.ReactNode;\n\n abstract shouldUseLinkToOfferAnimation(): boolean;\n\n isHighPriorityOffer(): boolean {\n return false;\n }\n \n async shouldBeVisible(): Promise<boolean> {\n return Boolean(this.offerConfig?.display);\n }\n\n get bannerId(): CmsBannerId {\n return new CmsBannerId(this.offerConfig.componentID, this.offerConfig.templateID, null);\n }\n\n private _offerShown: boolean = false;\n\n private _getSessionStageKey() {\n return `offer_${this.id}_shown`;\n }\n\n get offerShown() {\n try {\n //TODO: change this code when sessionStorage service is added\n const isShown = window.sessionStorage.getItem(this._getSessionStageKey());\n return isShown === \"true\";\n }\n catch (err) {\n this.services.logger.error(`get offerShown error`, err);\n return this._offerShown;\n }\n }\n\n set offerShown(offerShown: boolean) {\n try {\n this._offerShown = offerShown;\n //TODO: change this code when sessionStorage service is added\n window.sessionStorage.setItem(this._getSessionStageKey(), offerShown? \"true\" : \"false\");\n }\n catch (err) {\n this.services.logger.error(`set offerShown error`, err);\n }\n }\n\n abstract readonly id: string;\n abstract readonly analyticsCategory: string;\n}\n","import React from 'react';\nimport { OfferConfiguration } from '../../../configurations/config-data-sections/link-to-offer.configuration';\nimport { OfferBase } from \"./offer-base\";\n\nexport class WelcomeOffer extends OfferBase {\n id = \"welcomeBonus\";\n analyticsCategory = \"Conversion\";\n\n updateConfig(offerConfig: OfferConfiguration) {\n this.offerConfig = offerConfig;\n }\n\n async shouldBeVisible(): Promise<boolean> {\n const cStatus = (await this.services.cmsSegmentation).isCstatus; // can be null\n return !this.services.user.isAuthorized && (cStatus === false) && !this.services.miniOrbit.isEnabled && await super.shouldBeVisible();\n }\n \n shouldUseLinkToOfferAnimation(): boolean {\n return true;\n }\n\n render(): React.ReactNode {\n let IconComponent = this.services.theme.currentTheme.icons.linkToOfferIcon;\n return (\n <IconComponent size={4} sizeIsHeight />\n );\n }\n}\n","import styled from \"styled-components\";\n\nconst WOFShellBox = styled.div`\n position: relative;\n background: url(${({theme}) => theme.assets.images.wheel_of_fortune.shell_svg.toString()}) no-repeat center;\n background-size: cover;\n \n padding: 8px;\n height: 50px;\n width: 50px;\n`;\n\nexport default WOFShellBox;","import styled, {keyframes, css} from \"styled-components\";\n\ninterface WOFColorsBoxProps {\n showSpin: boolean;\n}\n\nconst rotateBackward = keyframes`\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(-180deg);\n }\n`;\n\nconst rotateStarting = keyframes`\n from {\n transform: rotate(-180deg);\n }\n\n to {\n transform: rotate(0deg);\n }\n`;\n\nconst rotateFullRotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n`;\n\nconst rotateFinish = keyframes`\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(2880deg);\n }\n`;\n\n\nconst WOFColorsBox = styled.div<WOFColorsBoxProps>`\n position: relative;\n top: 5px;\n background: url(${({theme}) => theme.assets.images.wheel_of_fortune.colors_svg.toString()}) no-repeat center;\n background-size: cover;\n\n animation-delay: 5s, 7s, 7.25s, 7.25s, 8.45s;\n animation-duration: 2s, 0.25s, 0.25s, 7s;\n animation-iteration-count: 1, 1, 4, 1, 1;\n animation-timing-function: ease, ease-in, linear, cubic-bezier(0, 0, 0.35, 1.16);\n animation-fill-mode: forwards, forwards, forwards, forwards, forwards;\n\n ${({showSpin}) => showSpin && css`\n animation-name: ${rotateBackward}, ${rotateStarting}, ${rotateFullRotation}, ${rotateFinish};\n `}\n \n\n z-index: -1;\n height: 100%;\n width: 100%;\n`;\n\nexport default WOFColorsBox;","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../themes/architecture/styled-by-device\";\n\nconst MobileBox = styled.div`\n position: relative;\n z-index: 10;\n top:-5px;\n transform: scale(1.5);\n`;\n\nconst PcBox = styled(MobileBox)`\n transform: scale(1.7);\n`;\n\nconst WOFWrapperBox = styledByDevice(PcBox, MobileBox);\n\nexport default WOFWrapperBox;","import React from \"react\";\nimport {observer} from \"mobx-react\"\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport WOFShellBox from './boxes/wheel-of-fortune-shell.box';\nimport WOFColorsBox from \"./boxes/wheel-of-fortune-colors.box\";\nimport WOFWrapperBox from \"./boxes/wheel-of-fortune-wrapper.box\";\nimport { CyClass } from \"../../../common/cy-classes\";\n\nexport const WheelOfFortuneComponent = observer(class WheelOfFortuneComponent extends OrbitComponent {\n render() {\n const showSpin = this.services.playerOfferings.enableWheelOfFortuneAnimation;\n return (\n <WOFWrapperBox className={CyClass(\"cy-link-to-offer-wheel-of-fortune\")}>\n <WOFShellBox>\n <WOFColorsBox showSpin={showSpin} />\n </WOFShellBox>\n </WOFWrapperBox>\n )\n }\n});\n","import React from 'react';\nimport { WheelOfFortuneComponent } from '../../../../components/wheel-of-fortune/wheel-of-fortune.component';\nimport { OfferBase } from \"./offer-base\";\n\nexport class WheelOfFortuneOffer extends OfferBase {\n id = \"wheelOfFortune\";\n analyticsCategory = \"CRM\";\n\n async shouldBeVisible(): Promise<boolean> {\n return this.services.playerOfferings.hasWheelOfFortunePromotion && !this.services.miniOrbit.isEnabled && await super.shouldBeVisible() && !this.offerShown;\n }\n\n shouldUseLinkToOfferAnimation(): boolean {\n return false;\n }\n \n render() {\n return <WheelOfFortuneComponent/>\n }\n}\n","import styled from \"styled-components\";\nimport { CssRule } from \"../../../../themes/architecture/css-helpers/css-rule\";\nimport {styledByDevice} from \"../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.div`\n width: 450px;\n`;\n\nexport const PcBox = styled(DefaultBox)`\n @media ${({theme}) => theme.mediaQuery.xlAndBelow} {\n width: 390px;\n }\n`;\n\nexport const MobileBox = styled(DefaultBox)`\n width: 100%;\n ${CssRule.For.mobile.tablet.build()} & {\n width: 450px;\n }\n`;\n\nexport const LinkToOfferBannerDefaultBox = styledByDevice(PcBox, MobileBox);","import {LinkToOfferBannerDefaultBox} from \"./link-to-offer-banner.default.box\";\n\nexport const LinkToOfferBannerBox = LinkToOfferBannerDefaultBox;\n","import React from 'react';\nimport { OfferBase } from \"./offer-base\";\n\nexport class RegistrationOffer extends OfferBase {\n id = \"RegistrationOffer\";\n analyticsCategory = \"NotUsed\";\n\n async shouldBeVisible(): Promise<boolean> {\n const cStatus = (await this.services.cmsSegmentation).isCstatus; // can be null\n return this.services.playerOfferings.isRegistrationOfferEnabled &&\n !this.services.miniOrbit.isEnabled &&\n (cStatus === false) &&\n this.services.device.isMobile &&\n this.services.mediaQuery.portrait &&\n await super.shouldBeVisible();\n }\n \n shouldUseLinkToOfferAnimation(): boolean {\n return false;\n }\n\n isHighPriorityOffer(): boolean {\n return true;\n }\n\n render(): React.ReactNode {\n return null;\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {IOffer, IPlayerOfferingsService, IShowOfferOptions} from \"./player-offerings.service.interface\";\nimport { action, observable, makeObservable } from \"mobx\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {BalanceType} from \"../../../common/const/wallet_balance_type\";\nimport { OfferConfiguration } from \"../configurations/config-data-sections/link-to-offer.configuration\";\nimport { WelcomeOffer } from \"./player-offerings/offers/welcome-offer\";\nimport { WheelOfFortuneOffer } from \"./player-offerings/offers/wheel-of-fortune-offer\";\nimport React from \"react\";\nimport { IModalDialogHandler } from \"../dialog/dialog.service.interface\";\nimport { LinkToOfferBannerBox } from \"../../components/link-to-offer/boxes/link-to-offer-banner/link-to-offer-banner.box\";\nimport { CmsBannerComponent } from \"../../components/cms-banner/cms-banner.component\";\nimport { namedSetTimeout } from \"../../../common/utils/time-functions\";\nimport { RegistrationOffer } from \"./player-offerings/offers/registration-offer\";\nimport { OnGameCloseParams, OnGameOpenParams } from \"../sdk/sdk-events\";\nimport { removeSpecialCharacters } from \"../../../utils/string-helpers\";\nimport { OrbitMarketingEventAnalyticsCategory, OrbitMarketingEventAnalyticsLabel } from \"../analytics/analytics.service.interface\";\n\nconst ANIMATE_WHEEL_BALANCE_THRESHOLD = 500; // 500 = 5.00(Dollars/Euros/GBPs)\n\n\n\n\nexport class PlayerOfferingsService extends ServiceBase implements IPlayerOfferingsService {\n\n @observable.ref\n enableWheelOfFortuneAnimation: boolean = false;\n\n @observable.ref\n private _hasWheelOfFortunePromotion: boolean = false;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._subscribe();\n }\n\n get isWheelOfFortuneEnabled() {\n const isEnabledFromConfig = this.services.configuration.servicesConfigs.PlayerOfferings.isWheelOfFortuneEnabled;\n const hasWheelOfFortuneConfigSection = !Check.isNullOrUndefined(this.services.configuration.data.wheelOfFortune);\n return isEnabledFromConfig && hasWheelOfFortuneConfigSection;\n }\n\n get isRegistrationOfferEnabled(): boolean {\n const isEnabledFromConfig = this.services.configuration.servicesConfigs.PlayerOfferings.isRegistrationOfferEnabled;\n const hasRegistrationOfferConfigSection = !Check.isNullOrUndefined(this.services.configuration.data.registrationOffer);\n return isEnabledFromConfig && hasRegistrationOfferConfigSection;\n }\n\n @action.bound\n private _setWOFEnableAnimation(enableAnimation: boolean) {\n this.enableWheelOfFortuneAnimation = enableAnimation;\n }\n\n\n @action.bound\n private _setHasWheelOfFortunePromotion(hasWheelOfFortunePromotion: boolean) {\n this._hasWheelOfFortunePromotion = hasWheelOfFortunePromotion;\n }\n\n private _subscribe() {\n this.reaction(() => ({\n isAuthorized: this.services.user.isAuthorized,\n userBalance: this.services.walletProxy.plainNumberBankroll[BalanceType.BOTH]\n }),\n ({isAuthorized, userBalance}) => {\n if (this.isWheelOfFortuneEnabled) {\n if (isAuthorized && Check.isNumber(userBalance) && userBalance < ANIMATE_WHEEL_BALANCE_THRESHOLD) {\n this._setWOFEnableAnimation(true);\n } else if(!isAuthorized){\n this._setWOFEnableAnimation(false);\n }\n }\n },\n {fireImmediately: true}\n );\n\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (!isAuthorized) {\n this._hasWheelOfFortunePromotion = false;\n this._resetShownFlagForAllOffers();\n } else {\n this._updateWheelOfFortuneAvailability();\n }\n }, { fireImmediately: true }\n );\n\n this.services.cmsSegmentation.then(cmsSegmentation => {\n this.reaction(\n () => { return {\n segments: cmsSegmentation.segments,\n }},\n async () => {\n await this._updateOfferToShow();\n }, { fireImmediately: true }\n );\n })\n\n this.reaction(\n () => { return {\n isAuthorized: this.services.user.isAuthorized,\n hasWheelOfFortunePromotion: this.hasWheelOfFortunePromotion,\n welcomeOfferConfig: this._welcomeOfferConfig,\n currentPopup: this.currentPopup\n }},\n async () => {\n await this._updateOfferToShow();\n }, { fireImmediately: true }\n );\n\n this.services.sdk.events.onPromotionsChanged(data => {\n if (this.services.user.isAuthorized &&\n this.services.user.cid.toString() === data.Cid.toString() &&\n Check.isBoolean(data.IsPromotionDisplayedInClient)) {\n //this data.IsPromotionDisplayedInClient info seems to be wrong\n //this._setHasWheelOfFortunePromotion(data.IsPromotionDisplayedInClient);\n //so use API instead\n this._updateWheelOfFortuneAvailability();\n }\n });\n\n if (this.isRegistrationOfferEnabled) {\n this.services.gameRunner.then(gameRunner => {\n gameRunner.lastPlayedGame.listenForLastOpenDemoGame();\n })\n\n this.services.sdk.events.onGameClose((data: OnGameCloseParams) => {\n if (!data.isReal && !this.hasOpenedPopup && !this._preventShowingRegistrationPopupThisDemoSession) {\n this._showRegistrationPopup();\n }\n });\n\n this.services.sdk.events.onGameOpen((data: OnGameOpenParams) => {\n if (!data.isReal) {\n this.closeCurrentPopup();\n this._preventShowingRegistrationPopupThisDemoSession = false;\n this._initPopupTimer();\n }\n });\n }\n\n this.reaction(\n () => { return {\n currentOffer: this.currentLinkToOffer,\n currentRoute: this.services.routing.currentRoute\n }},\n async (data) => {\n if(data.currentOffer) {\n const shouldBeVisible = await data.currentOffer.shouldBeVisible();\n if (shouldBeVisible && data.currentRoute.isOrbitRoute && data.currentRoute.data?.arenaType) {\n this.services.analytics.sendOrbitMarketingEvent(data.currentOffer.analyticsCategory, 'View_Floating_Button', data.currentRoute.data.arenaType);\n }\n }\n\n },\n { fireImmediately: true }\n );\n }\n\n @observable.ref\n currentLinkToOffer: IOffer | null = null;\n\n @action.bound\n private _setCurrentLinkOffer(offer: IOffer): void {\n this.currentLinkToOffer = offer;\n }\n\n\n @observable.ref\n _welcomeOfferConfig: OfferConfiguration | null = null;\n\n @action.bound\n setWelcomeOfferConfig(config: OfferConfiguration | null): void {\n this._welcomeOfferConfig = config;\n }\n\n private _allOffers: IOffer[] = [];\n private _getAllOffers(): IOffer[] {\n if (this._allOffers.length > 0) {\n //find welcome offer to update the config\n const welcomeOffer = this._allOffers.find(offer => offer instanceof WelcomeOffer) as WelcomeOffer;\n if (welcomeOffer) {\n welcomeOffer.updateConfig(this._welcomeOfferConfig);\n } else {\n //make sure the welcome offer is in the list\n if (this._welcomeOfferConfig) {\n this._allOffers.push(new WelcomeOffer(this.services, this._welcomeOfferConfig));\n }\n }\n return this._allOffers;\n }\n\n // order of this insertions matter!\n if (this.isWheelOfFortuneEnabled && this.services.configuration.data.wheelOfFortune) {\n this._allOffers.push(new WheelOfFortuneOffer(this.services, this.services.configuration.data.wheelOfFortune));\n }\n if (this._welcomeOfferConfig) {\n this._allOffers.push(new WelcomeOffer(this.services, this._welcomeOfferConfig));\n }\n\n return this._allOffers;\n }\n\n private _resetShownFlagForAllOffers() {\n return this._allOffers.forEach(offer => { offer.offerShown = false; });\n }\n\n async _updateOfferToShow() {\n\n //offer to show is first visible one\n\n const offers = this._getAllOffers();\n let selectedOffer: IOffer = null;\n for (const offer of offers) {\n if (await offer.shouldBeVisible()) {\n try {\n // make sure we have banner content\n const cmsBanners = await this.services.cmsBanners;\n const hasBannerContent = await cmsBanners.loadBanner(offer.bannerId);\n if (hasBannerContent) {\n selectedOffer = offer;\n break;\n }\n } catch {\n //we just continue to next available offer if we failed to load CMS banner\n }\n\n }\n }\n\n this._setCurrentLinkOffer(selectedOffer);\n }\n\n private async _fetchUserHasWheelOfFortune() {\n try {\n const promoCodes = await this.services.api.bonusManagerController.getEligiblePromotionCodes();\n return Check.isArray(promoCodes) && promoCodes.length >= 1;\n }\n catch (err) {\n // we might receive an error like LimitReached (122), which anyway means that we don't have any promotion codes\n return false;\n }\n }\n\n private _updateWheelOfFortuneAvailability() {\n if (this.isWheelOfFortuneEnabled) {\n this._fetchUserHasWheelOfFortune().then(hasWheelOfFortune => {\n //make sure user is still authenticated when we set this response\n if (this.services.user.isAuthorized) {\n this._setHasWheelOfFortunePromotion(hasWheelOfFortune);\n }\n });\n }\n }\n\n get hasWheelOfFortunePromotion(): boolean {\n return this._hasWheelOfFortunePromotion;\n }\n\n private _shownOffer: IOffer = null;\n\n showOfferPopup(offer: IOffer, options: IShowOfferOptions): void {\n this.closeCurrentPopup();\n this._shownOffer = offer;\n this._shownOffer.offerShown = true;\n\n const dialogHandler = this.services.dialog.showModal(() => {\n return this._renderBanner(offer);\n }, {\n title: ' ',\n onClosed: () => {\n this.closeCurrentPopup();\n options?.onPopupClosed && options?.onPopupClosed();\n },\n hideCloseButton: true,\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n hideDialogHeader: true,\n applyMaxHeight: true,\n isHighPriority: options.isHighPriority ?? false,\n noDefaultContentPadding: true,\n showOpenAndCloseAnimation: true\n });\n\n this._setCurrentPopup(dialogHandler);\n }\n\n private _renderBanner(offer: IOffer) {\n return (\n <LinkToOfferBannerBox className={'cy-link-to-offer-banner-box'}>\n <CmsBannerComponent key={`LINK_TO_OFFER_BANNER_${offer.id}`}\n templateID={offer.bannerId.templateID}\n componentID={offer.bannerId.componentID}\n showPlaceholder={false}/>\n </LinkToOfferBannerBox>\n );\n }\n\n @observable.ref\n currentPopup: IModalDialogHandler | null = null;\n\n @action.bound\n private _setCurrentPopup(currentPopup: IModalDialogHandler): void {\n this.currentPopup = currentPopup;\n }\n\n get hasOpenedPopup(): boolean {\n return !Check.isNullOrUndefined(this.currentPopup);\n }\n\n get isHighPriorityOffer(): boolean {\n return this._shownOffer?.isHighPriorityOffer() ?? false;\n }\n\n private _registrationPopupTimerId = 0;\n private _preventShowingRegistrationPopupThisDemoSession: boolean = false;\n\n private _initPopupTimer() {\n this._registrationPopupTimerId = namedSetTimeout('REGISTRATION_POPUP_TIMER', async () => {\n await this._showRegistrationPopup();\n this._preventShowingRegistrationPopupThisDemoSession = true;\n }, 60 * 1000);\n }\n\n private async _showRegistrationPopup() {\n const offer = new RegistrationOffer(this.services, this.services.configuration.data.registrationOffer);\n\n const cmsBanners = await this.services.cmsBanners;\n const hasBannerContent = await cmsBanners.loadBanner(offer.bannerId);\n if (!hasBannerContent) {\n this.services.logger.error(`Could not show registration offer, CMS content not available!`, {...this.services.configuration.data.registrationOffer});\n return;\n }\n\n if (!await offer.shouldBeVisible()) {\n return;\n }\n\n this.services.analytics.sendOrbitMarketingEvent(OrbitMarketingEventAnalyticsCategory.Conversion, 'Show', OrbitMarketingEventAnalyticsLabel.DemoRegPopup);\n\n const options: IShowOfferOptions = {\n onPopupClosed: () => {\n this.services.gameRunner.then(gameRunner => {\n const gameTitle = removeSpecialCharacters(gameRunner.lastPlayedGame.lastOpenDemoGame?.title ?? '');\n this.services.analytics.sendOrbitMarketingEvent(OrbitMarketingEventAnalyticsCategory.Conversion, `${gameTitle}_Close`, OrbitMarketingEventAnalyticsLabel.DemoRegPopup);\n })\n\n },\n isHighPriority: true\n };\n this.showOfferPopup(offer, options);\n }\n\n closeCurrentPopup() {\n if (this._registrationPopupTimerId) {\n clearTimeout(this._registrationPopupTimerId);\n this._registrationPopupTimerId = 0;\n }\n\n if (this.currentPopup) {\n this.currentPopup.close();\n this._setCurrentPopup(null);\n this._shownOffer = null;\n }\n };\n}\n","import { IPixiAppCreateOptions, IPixiAppCreationResult } from \"./pixi-app.service.interface\";\n\n/**\n * PixiSpine must load after pixi.js / pixi.js-legacy but before \"new PIXI.Application\"\n * Because PixiSpine alter/mutates the internal structure of PIXI\n */\nasync function loadPixi() {\n const PIXI = await import(\"pixi.js-legacy\");\n // const PIXI = await import(\"pixi.js\");\n // const PixiSpine = await import(\"pixi-spine\");\n const PixiSpine = await import(\"@pixi-spine/all-3.8\");\n return {PIXI, PixiSpine};\n}\n\nexport async function createPixiApplication(options: IPixiAppCreateOptions): Promise<IPixiAppCreationResult> {\n const {PIXI, PixiSpine} = await loadPixi();\n let app = new PIXI.Application({\n backgroundAlpha: 0,\n width: options.width,\n height: options.height,\n antialias: true,\n forceCanvas: !!options.force2DCanvasContext\n });\n\n const dispose = () => {\n try {\n app.view.removeEventListener(\"webglcontextlost\", contextLostHandler, false);\n app.stop();\n app.destroy(true, true);\n app = undefined;\n } catch (err) {\n console.error('Failed to dispose pixi application', err);\n }\n\n };\n\n const contextLostHandler = (_e: WebGLContextEvent) => {\n if (options.onContextLost) {\n options.onContextLost();\n }\n if (options.selfDestroyOnContextLost) {\n dispose();\n }\n };\n\n app.view.addEventListener(\"webglcontextlost\", contextLostHandler, false);\n\n return {app, canvas: app.view, dispose, PixiSpine};\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {IPixiAppService, IPixiAppCreateOptions, IPixiAppCreationResult, Application, Loader, Dict, LoaderResource} from \"./pixi-app.service.interface\";\nimport {createPixiApplication} from \"./pixi-app-creator\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\n/**\n * This service will manage pixi applications.\n *\n */\nexport class PixiAppService extends ServiceBase implements IPixiAppService {\n private _pixiAppCreatorWithWebGlManager: (options: IPixiAppCreateOptions) => Promise<IPixiAppCreationResult>;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this._pixiAppCreatorWithWebGlManager = this.services.webGlContextManager.makeCreator<IPixiAppCreateOptions, IPixiAppCreationResult>(createPixiApplication);\n }\n public createPixiApp(options: IPixiAppCreateOptions) {\n if (options.force2DCanvasContext) {\n return createPixiApplication(options);\n }\n return this._pixiAppCreatorWithWebGlManager(options);\n }\n\n public loadResources(pixiApp: Application, resourcesUrls: {name: string, jsonUrl: string}[]) {\n return new Promise<{loader: Loader; resources: Dict<LoaderResource>;}>((res, rej) => {\n resourcesUrls.forEach(({name, jsonUrl}) => {\n pixiApp.loader.add(name, jsonUrl);\n });\n pixiApp.loader.load(async (loader, resources) => {\n /* This happens for example if we use \"@pixi-spine/runtime-3.8\" library instead of \"pixi-spine\" or \"@pixi-spine/all-3.8\" */\n /* Also it happens if the json is not well formatted according to specs (RFC-8259, ECMA-404) (https://www.json.org/json-en.html , https://en.wikipedia.org/wiki/JSON).\n For example, all members have to be quoted, or else is not a JSON but an object. Ex: NOT OK: {key: \"value\"} / OK: {\"key\": \"value\"}\n I like to use this validator+formatter: https://elmah.io/tools/json-formatter/ */\n /* Otherwise, this shouldn't happen normally, but since the member is optional in typings, better safe than sorry */\n resourcesUrls.forEach(({name, jsonUrl}) => {\n if (!resources[name].spineData) {\n rej(\"Error occured. Could not load the animation:\"+jsonUrl);\n }\n });\n res({loader, resources});\n });\n });\n }\n}\n","import { IGameAnimatedIconsManagerService, IGameAnimatedIconRegistrationResult } from \"./game-animated-icons-manager.service.interface\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { shuffle } from \"../../../utils/array-helper\";\nimport {\n AnimatedIconBaseService,\n AnimatedIconObservableTarget,\n AnimatedIconUnloadReason, IAnimatedIconRequestOptions\n} from \"../pixi-app/animated-icon-base-service.service\";\nimport {SetTimeoutType} from \"../../../common/types/set-timeout-type\";\nimport {AnimationStatus} from \"../pixi-app/pixi-spine-animation\";\n\nconst MAX_ANIMATED_ICONS = 2;\n\n/**\n * This service will manage game animated icons loaded with pixi-spine.\n *\n */\nexport class GameAnimatedIconsManagerService extends AnimatedIconBaseService implements IGameAnimatedIconsManagerService {\n private intersectionObserver: IntersectionObserver | null = null;\n private observedTargets = new Map<Element, AnimatedIconObservableTarget>();\n private isGameOpened: boolean = false;\n private animatedIconsAllowed: boolean = true;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n this.intersectionObserver = new IntersectionObserver(this.intersectionCallback, {\n threshold: 0.7\n });\n /**\n * When the game opens, the content is not visible so stop all animations\n */\n services.sdk.events.onGameOpen(() => {\n this.isGameOpened = true;\n this.observedTargets.forEach((observedTarget) => {\n if (observedTarget.animationDisposer) {\n observedTarget.animationDisposer(AnimatedIconUnloadReason.GAME_OPEN);\n }\n });\n });\n /**\n * When the game opens, the content is visible so load animations\n */\n services.sdk.events.onGameClose(() => {\n this.isGameOpened = false;\n this.selectAndLoadAnimations();\n });\n\n this.reaction(() => this.services.user.isAuthorized, () => {\n this.animatedIconsAllowed = this.services.regulation.current.gameIconAnimationsAllowed;\n if (this.animatedIconsAllowed) {\n this.selectAndLoadAnimations();\n }\n }, {\n fireImmediately: true\n });\n }\n\n private intersectionCallback = (entries: IntersectionObserverEntry[], observer: IntersectionObserver) => {\n entries.forEach((entry) => {\n if (!this.observedTargets.has(entry.target)) {\n // should throw error ?\n return;\n }\n const observedTarget = this.observedTargets.get(entry.target);\n if (entry.isIntersecting) {\n // mark the observedTarget as eligible for receiving animation\n observedTarget.inViewport = true;\n } else {\n // unmark the observedTarget as eligible targets\n observedTarget.inViewport = false;\n // destroy the animation if it exists\n if (observedTarget.animationDisposer) {\n observedTarget.animationDisposer(AnimatedIconUnloadReason.VIEWPORT_EXIT);\n }\n }\n });\n this.selectAndLoadAnimations();\n };\n\n /**\n * Method to register the game animated icon so it can be managed by this.\n */\n public register(options: IAnimatedIconRequestOptions): IGameAnimatedIconRegistrationResult {\n this.observedTargets.set(options.wrapper, options);\n this.intersectionObserver.observe(options.wrapper);\n\n return {\n unregister: () => {\n if (this.observedTargets.has(options.wrapper)) {\n const observedTarget = this.observedTargets.get(options.wrapper)\n this.observedTargets.delete(options.wrapper);\n this.intersectionObserver.unobserve(options.wrapper);\n if (observedTarget.animationDisposer) {\n observedTarget.animationDisposer(AnimatedIconUnloadReason.REQUESTED);\n }\n }\n }\n };\n }\n private debounceTimeout: SetTimeoutType;\n private selectionRunning: boolean = false;\n private selectionRunAgainNeeded: boolean = false;\n private selectAndLoadAnimations = () => {\n if (!this.animatedIconsAllowed) {\n return;\n }\n // we cannot run the selection twice in paralel, it has to be sequential\n if (this.selectionRunning) {\n this.selectionRunAgainNeeded = true;\n return;\n }\n // avoid choking the CPU with too many subsequent tasks, debounce\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n this.debounceTimeout = setTimeout(async () => {\n this.selectionRunning = true;\n\n // When a game is opened, we don't load any animation\n if (!this.isGameOpened) {\n let alreadyRunningAnimationCount = 0;\n let eligibleTargets: AnimatedIconObservableTarget[] = [];\n // count already running animations and count eligible targets\n this.observedTargets.forEach((observedTarget) => {\n if (observedTarget.animation && (observedTarget.animation.status === AnimationStatus.Running || observedTarget.animation.status === AnimationStatus.Loading)) {\n alreadyRunningAnimationCount++;\n } else if (observedTarget.inViewport) {\n eligibleTargets.push(observedTarget);\n }\n });\n\n // if we are not already running the maximum allowed animations we take as much as we can from the eligibles targets\n if (alreadyRunningAnimationCount > MAX_ANIMATED_ICONS) {\n this.services.logger.error(\"There are more animated icons running (\"+alreadyRunningAnimationCount+\") than MAX_ANIMATED_ICONS (\"+MAX_ANIMATED_ICONS+\")\");\n } else if (alreadyRunningAnimationCount < MAX_ANIMATED_ICONS) {\n let remainingSlots = MAX_ANIMATED_ICONS - alreadyRunningAnimationCount;\n shuffle(eligibleTargets);\n for (let i=0; i<Math.min(eligibleTargets.length, remainingSlots); i++) {\n const observedTarget = eligibleTargets[i];\n this.loadAnimatedIcon(observedTarget, \"gameAnimatedIconResource\");\n }\n }\n }\n\n this.debounceTimeout = undefined;\n this.selectionRunning = false;\n if (this.selectionRunAgainNeeded) {\n this.selectionRunAgainNeeded = false;\n this.selectAndLoadAnimations();\n }\n }, 400);\n }\n}\n","import { ServiceBase } from \"../ServiceBase\";\nimport { IWebGLContextManagerService, TResultBase } from \"./webgl-context-manager.service.interface\";\n\n/**\n * In a web page the browser limits the number of WebGLs contexts.\n * There may be from 8 to 16 contexts, and when that limit is reached, old contexts are lost.\n * In order to prevent that, all functions that create a WebGL context, like \"new PIXI.Application\" should be decorated with this service\n * and creation will take place only when this service considers there are enough resources.\n */\nexport class WebGLContextManagerService extends ServiceBase implements IWebGLContextManagerService {\n private _activeContexts = 0;\n\n public makeCreator<TOptions, TResult extends TResultBase>(creatorFn: (options: TOptions) => Promise<TResult>): (options: TOptions) => Promise<TResult> {\n return async (options: TOptions) => {\n /* The most restrictive browsers (Chrome, Safari and Opera on mobile devices) allow a maximum of 8 webgl context instances\n The limit here is 7 because one webgl context is reserved for the game iframe */\n if (this._activeContexts >= 7) {\n return Promise.reject(\"Too many WebGL contexts\");\n }\n this._activeContexts++;\n try {\n const result: TResult = await creatorFn(options);\n const onContextLost = () => {\n this._activeContexts--;\n }\n result.canvas.addEventListener(\"webglcontextlost\", onContextLost);\n return {\n ...result,\n dispose: () => {\n result.canvas.removeEventListener(\"webglcontextlost\", onContextLost);\n /* In PC, pixi will create an WebGL 2 context but on mobile (at least on Chrome) it will create a WebGL 1 context */\n /* We need to check if the context was lost because we can call dispose on a canvas that already lost it's context\n and the activeContext count was already decremented. So destroying the canvas and animation objects so should not\n decrement it again */\n const webGl2Context = result.canvas.getContext(\"webgl2\");\n const webGl1Context = result.canvas.getContext(\"webgl\");\n const isWebGlContextLost = webGl2Context ? webGl2Context.isContextLost() : ( webGl1Context ? webGl1Context.isContextLost() : true);\n if (!isWebGlContextLost) {\n this._activeContexts--;\n }\n result.dispose()\n }\n };\n } catch (e) {\n this._activeContexts--;\n throw e;\n }\n };\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {ITooltipsProvider} from \"./tooltips-provider.interface\";\nimport {IOverlayConsumer} from \"../overlay/overlay-consumer.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {makeObservable, observable} from \"mobx\";\nimport {ITooltipModel} from \"./tooltip-base/tooltip-model.interface\";\n\nexport abstract class TooltipBaseService extends ServiceBase implements ITooltipsProvider, IOverlayConsumer {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n makeObservable(this);\n services.overlay.registerConsumer(this);\n }\n\n @observable\n protected _toolTips: ITooltipModel[] = [];\n get toolTips(): ITooltipModel[] {\n return this._toolTips;\n }\n\n onOverlayClicked() {\n //nothing to do here\n }\n\n getOverlayZIndex(): number | undefined {\n const toolTips = this._toolTips.filter(t => {\n //we use separate variables to make sure that this method depends on all the observable involved in the condition\n const showOverlay = t.showOverlay;\n const shouldDisplay = t.shouldDisplay();\n return showOverlay && shouldDisplay;\n });\n\n if(toolTips.length === 0) {\n return undefined;\n }\n\n return Math.max(...toolTips.map(t => t.zIndex)) - 1;\n }\n\n get needsOverlay(): boolean {\n const toolTips = this._toolTips.filter(t => {\n //we use separate variables to make sure that this method depends on all the observable involved in the condition\n const showOverlay = t.showOverlay;\n const shouldDisplay = t.shouldDisplay();\n return showOverlay && shouldDisplay;\n });\n return toolTips.length > 0;\n }\n\n}","import {beforeWrite, ModifierArguments} from \"@popperjs/core\";\nimport {Options} from \"@popperjs/core/lib/modifiers/computeStyles\";\n\n\nexport const stickOnTopTooltipModifier = {\n name: 'stickOnTop',\n enabled: true,\n phase: 'beforeWrite',\n requiresIfExists: ['offset'],\n fn(data: ModifierArguments<Options>) {\n const {styles, modifiersData} = data.state;\n\n //This custom modifier was created in order to fix a wrong tooltip position - when placement is TOP\n styles.popper = {\n top: Math.round(modifiersData.popperOffsets.y) + 'px',\n left: Math.round(modifiersData.popperOffsets.x) + 'px'\n };\n }\n};\n\nexport const stickToBottomTooltipModifier = {\n name: \"stickToBottom\",\n enabled: true,\n phase: beforeWrite,\n fn: function(data: ModifierArguments<Options>) {\n const popperWidth = data.state.rects.popper.width;\n const popperHeight = data.state.rects.popper.height;\n const {styles, elements} = data.state;\n\n data.options.adaptive = false;\n\n data.state.strategy = \"fixed\";\n data.state.placement = \"bottom\";\n\n styles.popper = {\n top: (window.innerHeight - popperHeight - 10) + \"px\",\n left: (document.documentElement.clientWidth - popperWidth) / 2 + 'px'\n };\n\n styles.arrow = {\n bottom: '-7px',\n left: (popperWidth - elements.arrow.clientWidth) / 2 + 'px',\n top: 'auto'\n };\n }\n};\n\nexport const offsetTooltipModifier = {\n name: 'offset',\n options: {\n offset: [10, 17]\n },\n};\n\nexport const flipTooltipModifier = {\n name: \"flip\",\n options: {\n padding: 5\n }\n};\n\nexport const preventOverflowTooltipModifier = {\n name: \"preventOverflow\",\n options: {\n padding: 5\n }\n};\n","import {ITooltipModel} from \"./tooltip-model.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {makeObservable, observable, runInAction} from \"mobx\";\nimport {DomEventSubscription} from \"../../../../utils/event-listener-registration\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {createPopper} from \"@popperjs/core\";\nimport {flipTooltipModifier, offsetTooltipModifier, preventOverflowTooltipModifier} from \"./tooltip-modifiers\";\nimport React from \"react\";\nimport {namedSetTimeout} from \"../../../../common/utils/time-functions\";\nimport {v4 as uuidv4} from \"uuid\";\nimport {ITooltipOptions, ITooltipStyling} from \"./tooltip-options.interface\";\n\nexport abstract class TooltipBaseModel<TOptions extends ITooltipOptions> implements ITooltipModel {\n constructor(protected readonly services: IServiceFactoryExtended,\n protected readonly options: TOptions) {\n\n makeObservable(this);\n\n this.id = uuidv4();\n }\n\n private _onDocumentClickHandler = (event: any) => {\n if(this.options.closeOnClickOutside && this.tooltipContainer && !this.tooltipContainer.contains(event.target)) {\n this.closeTooltip();\n }\n }\n\n readonly id: string;\n\n private _domEventSubscription: DomEventSubscription[] = [];\n\n private _autoCloseTimeout: any = null;\n protected _popperInstance: any = null;\n\n protected abstract _getElementToAttach(): HTMLElement | null;\n\n\n @observable.ref\n tooltipContainer: HTMLElement | null;\n\n shouldDisplay(): boolean {\n return true;\n }\n\n\n onToolTipRendered(tooltipContainer: HTMLElement): void {\n\n runInAction(() => {\n this.tooltipContainer = tooltipContainer;\n });\n\n if(this.options.onTooltipRendered) {\n this.options.onTooltipRendered();\n }\n\n if(!Check.isNullOrUndefined(this.options.timeout)) {\n this._autoCloseTimeout = namedSetTimeout('TOOLTIP_CLOSE_TIMER', () => this.closeTooltip(), this.options.timeout.totalMilliseconds);\n }\n\n if(this.options.closeOnClickOutside) {\n this._domEventSubscription.push(this.services.dom.subscribeTo.click(this._onDocumentClickHandler));\n }\n }\n\n get hasOwnStyle(): boolean {\n return Boolean(this.options.hasOwnStyle);\n }\n\n get zIndex(): number {\n if(Check.isNullOrUndefined(this.options.zIndex)) {\n return 203;\n }\n\n if(this.options.showOverlay) {\n return this.options.zIndex + 1;\n }\n\n return this.options.zIndex;\n }\n\n get animated(): boolean {\n if(Check.isNullOrUndefined(this.options.animated)) {\n return true;\n }\n\n return this.options.animated;\n }\n\n get hasGlow(): boolean {\n if(Check.isNullOrUndefined(this.options.hasGlow)) {\n return true;\n }\n\n return this.options.hasGlow;\n }\n\n get shouldShowCloseButton(): boolean {\n return Boolean(this.options.showCloseButton);\n }\n\n get invertCloseButtonColors(): boolean {\n return Boolean(this.options.invertCloseButtonColors);\n }\n\n\n get styling(): ITooltipStyling | undefined {\n return this.options.styling;\n }\n\n get showOverlay(): boolean {\n return Boolean(this.options.showOverlay);\n }\n\n private _createTooltipPopper(elementToAttach: HTMLElement) {\n\n return createPopper(elementToAttach, this.tooltipContainer, {\n placement: this.options.placement || 'auto',\n strategy: this.options.strategy || \"fixed\",\n modifiers: [\n preventOverflowTooltipModifier,\n flipTooltipModifier,\n offsetTooltipModifier,\n ...(this.options.modifiers || [])\n ]\n });\n }\n\n render(): string | React.ReactElement | null {\n if(!this.tooltipContainer) {\n return null;\n }\n\n let elementToAttach = this._getElementToAttach();\n if(!elementToAttach) {\n elementToAttach = this.services.dom.body;\n }\n\n if(this._popperInstance) {\n this._destroyPopperInstance();\n }\n\n this._popperInstance = this._createTooltipPopper(elementToAttach);\n\n return this.options.renderContent();\n\n }\n\n private _destroyPopperInstance(): void {\n if(this._popperInstance) {\n this._popperInstance.destroy();\n this._popperInstance = null;\n }\n }\n\n private _unsubscribeFromDomEvents(): void {\n this._domEventSubscription.forEach(ev => ev.dispose());\n this._domEventSubscription = [];\n }\n\n private _clearAutoCloseTimeout(): void {\n if(this._autoCloseTimeout) {\n clearTimeout(this._autoCloseTimeout);\n this._autoCloseTimeout = null;\n }\n }\n\n private _dispose(): void {\n this._clearAutoCloseTimeout();\n\n this._destroyPopperInstance();\n\n this._unsubscribeFromDomEvents();\n\n runInAction(() => {\n this.tooltipContainer = null;\n });\n }\n\n closeTooltip(): void {\n this._dispose();\n \n if(this.options.onTooltipClosed) {\n this.options.onTooltipClosed();\n }\n }\n\n}","import {TooltipBaseModel} from \"../tooltip-base/tooltip-base.model\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {IRegularTooltipsContainer} from \"./regular-tooltips-container.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IRegularTooltipOptions} from \"./regular-tooltip-options.interface\";\nimport {makeObservable} from \"mobx\";\n\n\nexport class RegularTooltipModel extends TooltipBaseModel<IRegularTooltipOptions> {\n\n constructor(tooltipsContainer: IRegularTooltipsContainer,\n services: IServiceFactoryExtended,\n options: IRegularTooltipOptions) {\n super(services, options);\n\n makeObservable(this);\n this.tooltipsContainer = tooltipsContainer;\n\n }\n\n readonly tooltipsContainer: IRegularTooltipsContainer;\n\n protected _getElementToAttach(): HTMLElement | null {\n if(Check.isString(this.options.attachTo)) {\n return this.services.dom.querySelector(this.options.attachTo) as HTMLElement;\n }\n\n return this.options.attachTo;\n }\n\n closeTooltip(): void {\n super.closeTooltip();\n this.tooltipsContainer.removeTooltip(this);\n }\n}\n\n\n\n","import {action, makeObservable, runInAction} from \"mobx\";\nimport {ITooltipViewModel} from \"../tooltip-base/tooltip-view-model.interface\";\nimport {ITooltipModel} from \"../tooltip-base/tooltip-model.interface\";\nimport {IRegularTooltipsContainer} from \"./regular-tooltips-container.interface\";\nimport {TooltipBaseService} from \"../tooltip-base.service\";\nimport {RegularTooltipModel} from \"./regular-tooltip.model\";\nimport {IRegularTooltipsService} from \"./regular-tooltips.service.interface\";\nimport {IRegularTooltipOptions} from \"./regular-tooltip-options.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nexport class RegularTooltipsService extends TooltipBaseService implements IRegularTooltipsService, IRegularTooltipsContainer {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n makeObservable(this);\n }\n\n removeTooltip(tooltip: ITooltipModel): void {\n const index = this.toolTips.findIndex(t => t.id === tooltip.id);\n if(index >= 0) {\n runInAction(() => {\n this.toolTips.splice(index, 1);\n });\n }\n }\n\n protected _setDefaultTooltipOptions(options: IRegularTooltipOptions): IRegularTooltipOptions {\n options = {\n showOverlay: true,\n showCloseButton: false,\n closeOnClickOutside: true,\n animated: true,\n ...options};\n\n return options;\n }\n\n @action.bound\n showTooltip(options: IRegularTooltipOptions): ITooltipViewModel {\n options = this._setDefaultTooltipOptions(options);\n const tooltipModel = new RegularTooltipModel(this, this.services, options);\n this.toolTips.push(tooltipModel);\n return tooltipModel;\n\n }\n}\n","import {action, observable, runInAction, makeObservable} from \"mobx\";\nimport {\n HistoryController_GetGameSessionHistoryRequest,\n HistoryController_GetHistoryRequest,\n} from \"../../../api/api.service\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {IHistoryPaginatorViewModel} from \"./history-paginator-view-model.interface\";\nimport {IHistoryPageInfo, IHistoryServerResponseBase} from \"./history-server-response-base.interface\";\nimport {NextHistoryPageRequest} from \"../../gaming-history.service.interfce\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {IHistoryRecordViewModel} from \"../record/history-record-view-model.interface\";\nimport {GamesMap} from \"../../../games/games.service.interface\";\nimport {IRegulatedCompanyModel} from \"../../../companies/regulated-company-model.interface\";\nimport {Nullable} from \"../../../../../common/types/nullable-types\";\n\nexport abstract class HistoryPaginatorBaseModel<THistoryRecordData,\n TServerResponse extends IHistoryServerResponseBase<THistoryRecordData>,\n TRecordModel extends IHistoryRecordViewModel> implements IHistoryPaginatorViewModel {\n constructor(protected readonly services: IServiceFactoryExtended, private readonly pageSize: number) {\n makeObservable(this);\n this._migratedHistoryPaginator = this._createMigratedHistoryPaginator();\n }\n\n protected abstract _getNextPage(request: NextHistoryPageRequest): Promise<TServerResponse>;\n protected abstract _getGameTypeFromRecord(recordData: THistoryRecordData): number;\n protected abstract _getRoundIdFromRecord(recordData: THistoryRecordData): string;\n protected abstract _createRecordModel(gameInfo: GameInfo, company: IRegulatedCompanyModel, recordData: THistoryRecordData): TRecordModel;\n protected abstract _createMigratedHistoryPaginator(): IHistoryPaginatorViewModel;\n\n private readonly _migratedHistoryPaginator: Nullable<IHistoryPaginatorViewModel>;\n\n get daysIntervals(): number[] {\n return [30, 60, 90];\n }\n\n private _numberOfHistoryDays: number = 30;\n @action.bound\n setNumberOfHistoryDays(numberOfDays: number): void {\n if (numberOfDays === this._numberOfHistoryDays) {\n return;\n }\n this._migratedHistoryPaginator.setNumberOfHistoryDays(numberOfDays)\n this._numberOfHistoryDays = numberOfDays;\n this._resetPaging();\n this.loadNextPage();\n }\n\n @action.bound\n private _resetPaging(): void {\n this._records = [];\n this._pages = null;\n this._nextPageIndex = 0;\n }\n\n @observable.ref\n private _pages: IHistoryPageInfo[] | null = null;\n\n\n @observable.ref\n private _nextPageIndex = 0;\n\n\n get hasMoreSelfRecords(): boolean {\n if (!this._pages) {\n return true;\n }\n return this._nextPageIndex < this._pages.length;\n }\n\n get hasMoreRecords(): boolean {\n return this.hasMoreSelfRecords || this._migratedHistoryPaginator.hasMoreRecords\n }\n\n @observable.ref\n private _isLoading: boolean = false;\n get isLoading(): boolean {\n return this._isLoading || this._migratedHistoryPaginator.isLoading;\n }\n\n @action.bound\n private _setIsLoading(value: boolean): void {\n this._isLoading = value;\n }\n\n @observable.ref\n _records: IHistoryRecordViewModel[] = [];\n get records(): IHistoryRecordViewModel[] {\n return [\n ...this._records,\n ...this._migratedHistoryPaginator.records\n ]\n }\n\n private _createNextPageRequest(): HistoryController_GetHistoryRequest & HistoryController_GetGameSessionHistoryRequest {\n if (this._nextPageIndex === 0) {\n return {\n fromLastDays: this._numberOfHistoryDays,\n pageSize: this.pageSize,\n pageNumber: 1\n };\n }\n\n const nextPage = this._pages[this._nextPageIndex];\n return {\n fromLastDays: this._numberOfHistoryDays,\n pageNumber: this._nextPageIndex + 1,\n pageSize: this.pageSize,\n requestKey: nextPage.RequestKey,\n minDate: nextPage.MinDate,\n maxDate: nextPage.MaxDate\n };\n\n\n }\n\n\n\n private async _getGamesInfo(serverResponse: TServerResponse): Promise<GamesMap> {\n const result: GamesMap = {};\n const notInLayoutGames: number[] = [];\n\n serverResponse.GameHistoryData.forEach(record => {\n const gameType = this._getGameTypeFromRecord(record);\n const gameInfo = this.services.games.gamesMap[gameType];\n if (gameInfo) {\n result[gameInfo.gameType] = gameInfo;\n } else {\n notInLayoutGames.push(gameType);\n }\n });\n\n if (notInLayoutGames.length > 0) {\n const gamesMap = await this.services.games.getGamesInfoForHistory(notInLayoutGames);\n Object.keys(gamesMap).forEach(gameType => {\n result[gameType] = gamesMap[gameType];\n });\n }\n\n return result;\n }\n\n\n\n async loadNextPage(): Promise<void> {\n\n if (this.isLoading) {\n return;\n }\n\n /*\n if (!this.hasMoreSelfRecords) {\n if (this._migrationPaginator.hasMoreRecords) {\n await this._migrationPaginator.loadNextPage();\n return;\n }\n return;\n }\n */\n\n this._setIsLoading(true);\n\n try {\n const request = this._createNextPageRequest()\n const serverResponse = await this._getNextPage(request);\n const gamesMap = await this._getGamesInfo(serverResponse);\n\n const newRecords: TRecordModel[] = [];\n\n for (let recordData of serverResponse.GameHistoryData) {\n const gameType = this._getGameTypeFromRecord(recordData);\n const gameInfo = gamesMap[gameType];\n if (gameInfo) {\n const company = await (await this.services.companies).getRegulatedCompany(gameInfo.companyName);\n newRecords.push(this._createRecordModel(gameInfo, company, recordData));\n } else {\n this.services.logger.error(`Could not get game info for game type ${this._getRoundIdFromRecord(recordData)} in history!`);\n }\n }\n\n\n runInAction(() => {\n if (this._nextPageIndex === 0) {\n this._pages = serverResponse.PagingData;\n }\n this._records = [\n ...this.records,\n ...newRecords\n ];\n\n this._nextPageIndex++;\n });\n\n if(!this.hasMoreSelfRecords) {\n await this._migratedHistoryPaginator.loadNextPage();\n }\n\n } finally {\n this._setIsLoading(false);\n }\n }\n}","import {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {\n IHistoryRecordAmountViewModel, IHistoryRecordIdViewModel,\n IHistoryRecordViewModel\n} from \"./history-record-view-model.interface\";\nimport {IRegulatedCompanyModel} from \"../../../companies/regulated-company-model.interface\";\n\nexport abstract class HistoryRecordBaseModel<TRawRecordData> implements IHistoryRecordViewModel {\n constructor(protected readonly services: IServiceFactoryExtended,\n protected readonly gameInfo: GameInfo,\n protected readonly company: IRegulatedCompanyModel,\n protected readonly recordData: TRawRecordData) {\n\n }\n\n abstract get date(): string;\n abstract get ids(): IHistoryRecordIdViewModel[];\n abstract get bigWinMessage(): string | null;\n abstract get amounts(): IHistoryRecordAmountViewModel[];\n abstract get freePlayMessage(): string | null;\n abstract get detailsHistoryNotAllowedOnCurrentPlatformMessage(): string | null;\n abstract openDetailHistory(): Promise<any>;\n\n protected abstract _isDetailHistorySupported(): boolean;\n\n get gameName(): string {\n return this.gameInfo.title;\n }\n\n get gameImage(): string {\n return this.gameInfo.gameImageInHistoryPage;\n }\n\n get getGameImagePlaceHolderUrl(): string {\n return this.gameInfo.getGameImagePlaceHolderUrl(this.services.theme.shouldUseSquareIcons);\n }\n\n protected _formatValue(value: number): string {\n return this.services.currency.formatMoney(value);\n }\n\n protected get translation() {\n return this.services.translation;\n }\n\n get supportsDetailHistory(): boolean {\n return this._isDetailHistorySupported();\n }\n\n get canPlayGame(): boolean {\n return Boolean(this.services.games.gamesMap[this.gameInfo.gameType]);\n }\n\n async playGame(): Promise<void> {\n if(!this.canPlayGame) {\n return;\n }\n await this.gameInfo.open({\n isRealMode: true,\n showIntermediatePage: false,\n });\n\n this.services.analytics.sendOrbitUserFlowEvent('Client_GamingHistory', 'open_game', this.gameInfo.title, this.gameInfo.gameType);\n\n }\n}","import {HistoryRecordBaseModel} from \"./history-record-base.model\";\nimport {GamingHistoryRecordRawData} from \"../../gaming-history.service.interfce\";\nimport {IHistoryRecordAmountViewModel, IHistoryRecordIdViewModel} from \"./history-record-view-model.interface\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {GameModeEnum} from \"../../../game-runner/interfaces/game-context/game-context-view-model.interface\";\n\nexport class UserGamingHistoryRecordModel extends HistoryRecordBaseModel<GamingHistoryRecordRawData> {\n get date(): string {\n if(this.recordData.DateInTimeZone) {\n return this.services.time.formatHistoryRecordDateTime(this.recordData.DateInTimeZone, true);\n } else {\n return this.services.time.formatHistoryRecordDateTime(this.recordData.Date, false);\n }\n }\n\n get ids(): IHistoryRecordIdViewModel[] {\n if(this._gameSessionID && this._participationTicketID) {\n return [\n {\n text: this.translation.translate('GAME_SESSION_ID', {sessionID: this._gameSessionID}),\n cyClass: CyClass('cy-gaming-history-session-id')\n },\n {\n text: this.translation.translate('GAME_PARTICIPATION_ID', {participationID: this._participationTicketID}),\n cyClass: CyClass('cy-gaming-history-participation-id')\n }\n ]\n }\n return [\n {\n text: this.recordData.GameId,\n cyClass: CyClass('cy-gaming-history-round-id')\n }\n ];\n }\n\n protected _isDetailHistorySupported(): boolean {\n return this.recordData.IsSupportDetailedHistory\n && this._isDetailHistoryAllowedOnCurrentPlatform()\n && this.company.supportsHistoryMoreDetails(this.recordData);\n }\n\n get bigWinMessage(): string | null {\n if(!this.recordData.IsBigWin) {\n return null;\n }\n\n return this.translation.translate('GAMING_HISTORY_BIG_WIN_TAX_INDICATION')\n }\n\n private get _isFreePlayRound(): boolean {\n return !Check.isNullOrUndefined(this.recordData.FreePlayCurrentAmount)\n || !Check.isNullOrUndefined(this.recordData.FreePlayWinningAmount);\n }\n\n private _getRealMoneyAmounts(): IHistoryRecordAmountViewModel[] {\n return [\n {\n description: this.translation.translate('GAMING_HISTORY_BET'),\n value: this._formatValue(this.recordData.BetAmount),\n cyClass: CyClass('cy-gaming-history-bet-value')\n },\n {\n description: Check.isNullOrUndefined(this.recordData.OriginalWinningsAmount)\n ? this.translation.translate('GAMING_HISTORY_WINNINGS')\n : this.translation.translate('GAMING_HISTORY_WINNINGS_BONUS_CAP'),\n value: this._formatValue(this.recordData.ProfitAmount),\n cyClass: CyClass('cy-gaming-history-winning-value')\n },\n {\n description: this.translation.translate('GAMING_HISTORY_BANKROLL'),\n value: this._formatValue(this.recordData.AvailableMoneyPerOffering),\n cyClass: CyClass('cy-gaming-history-bankroll-value')\n }\n ];\n }\n\n private _getFreePlayAmounts(): IHistoryRecordAmountViewModel[] {\n const amounts = [\n {\n description: this.translation.translate('GAMING_HISTORY_FREE_PLAY_BET'),\n value: this._formatValue(this.recordData.BetAmount),\n cyClass: CyClass('cy-gaming-history-bet-value')\n },\n {\n description: this.translation.translate('GAMING_HISTORY_FREE_PLAY_WINNINGS'),\n value: this._formatValue(this.recordData.ProfitAmount),\n cyClass: CyClass('cy-gaming-history-winning-value')\n },\n {\n description: this.translation.translate('GAMING_HISTORY_FREE_PLAY_REWARD_WINNINGS'),\n value: this._formatValue(this.recordData.FreePlayWinningAmount),\n cyClass: CyClass('cy-gaming-history-free-play-winning')\n }\n ];\n\n if(!Check.isNullOrUndefined(this.recordData.FreePlayCurrentAmount)) {\n amounts.push({\n description: this.translation.translate('GAMING_HISTORY_FREE_PLAY_REWARD_BANKROLL'),\n value: this._formatValue(this.recordData.FreePlayCurrentAmount),\n cyClass: CyClass('cy-gaming-history-free-play-current-amount')\n });\n }\n\n return amounts;\n }\n\n get amounts(): IHistoryRecordAmountViewModel[] {\n if(this._isFreePlayRound) {\n return this._getFreePlayAmounts();\n } else {\n return this._getRealMoneyAmounts();\n }\n }\n\n get freePlayMessage(): string | null {\n if(this._isFreePlayRound) {\n return this.translation.translate('GAMING_HISTORY_FREE_PLAY_INDICATION')\n }\n\n return null;\n }\n\n private get _gameSessionID(): string | null {\n return this.recordData.AdditionalData?.AAMSGameSessionID || null\n }\n\n private get _participationTicketID(): string | null {\n return this.recordData.AdditionalData?.AAMSParticipationTicketID || null\n }\n\n private _isDetailHistoryAllowedOnCurrentPlatform(): boolean {\n switch (this.recordData.AllowedPlatformType?.toLowerCase()) {\n case 'all':\n return true;\n case 'mobile':\n return this.services.device.os.isMobileOS;\n case 'pc':\n return !this.services.device.os.isMobileOS;\n default:\n return false;\n }\n }\n\n get detailsHistoryNotAllowedOnCurrentPlatformMessage(): string | null {\n if(this._isDetailHistoryAllowedOnCurrentPlatform()) {\n return null;\n }\n\n if(this.services.device.os.isMobileOS) {\n return this.translation.translate('GAMING_HISTORY_MORE_DETAILS_NOT_AVAILABLE_MOBILE');\n } else {\n return this.translation.translate('GAMING_HISTORY_MORE_DETAILS_NOT_AVAILABLE_PC');\n }\n }\n\n async openDetailHistory(): Promise<void> {\n if(!this.supportsDetailHistory) {\n return;\n }\n\n await (await this.services.gameRunner).openGame({\n gameMode: GameModeEnum.History,\n gameInfo: this.gameInfo,\n historyGameParams: {\n gameRoundId: this.recordData.GameId,\n gameRoundDate: this.recordData.Date,\n gameRoundDateInTimeZone: this.recordData.DateInTimeZone\n }\n });\n }\n}","import {MigratedGamingHistoryRecordRawData} from \"../../gaming-history.service.interfce\";\nimport {IHistoryRecordAmountViewModel, IHistoryRecordIdViewModel, IHistoryRecordViewModel} from \"./history-record-view-model.interface\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\n\nexport class MigratedGamingHistoryRecordModel implements IHistoryRecordViewModel {\n constructor(protected readonly services: IServiceFactoryExtended,\n protected readonly recordData: MigratedGamingHistoryRecordRawData) {\n\n }\n\n get date(): string {\n //return this.recordData.TimeSincePlay.toString() // this.services.time.formatHistoryRecordDateTime(this.recordData.TimeSincePlay, false);\n return this.services.time.formatHistoryRecordDateTime(this.recordData.Date, false);\n }\n\n get ids(): IHistoryRecordIdViewModel[] {\n return [\n {\n text: this.recordData.GameId,\n cyClass: CyClass('cy-migrated-gaming-history-round-id')\n }\n ];\n }\n\n \n get bigWinMessage(): string | null {\n return null;\n }\n\n private _getRealMoneyAmounts(): IHistoryRecordAmountViewModel[] {\n return [\n {\n description: this.translation.translate('GAMING_HISTORY_BET'),\n value: this._formatValue(this.recordData.BetAmount),\n cyClass: CyClass('cy-gaming-history-bet-value')\n },\n {\n description: this.translation.translate('GAMING_HISTORY_WINNINGS'),\n value: this._formatValue(this.recordData.ProfitAmount),\n cyClass: CyClass('cy-gaming-history-winning-value')\n },\n {\n description: this.translation.translate('GAMING_HISTORY_BANKROLL'),\n value: this._formatValue(this.recordData.AvailableMoneyPerOffering),\n cyClass: CyClass('cy-gaming-history-bankroll-value')\n }\n ];\n }\n\n get amounts(): IHistoryRecordAmountViewModel[] {\n return this._getRealMoneyAmounts();\n }\n \n get freePlayMessage(): string | null {\n return null;\n }\n\n get detailsHistoryNotAllowedOnCurrentPlatformMessage(): string | null {\n return null;\n }\n\n get gameName(): string {\n return this.recordData.GameName;\n }\n\n get gameImage(): string {\n return \"\";\n }\n\n get getGameImagePlaceHolderUrl(): string {\n if (this.services.theme.shouldUseSquareIcons) {\n return this.services.theme.currentTheme.assets.images.placeholder_game_icon_sq_png.toString();\n }\n return this.services.theme.currentTheme.assets.images.placeholder_game_icon_png.toString();\n }\n\n get supportsDetailHistory(): boolean {\n return false;\n }\n\n async openDetailHistory(): Promise<void> {\n \n }\n\n private _formatValue(value: number): string {\n return this.services.currency.formatMoney(value);\n }\n\n private get translation() {\n return this.services.translation;\n }\n}","import {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {IHistoryPaginatorViewModel} from \"./history-paginator-view-model.interface\";\nimport {action, observable, makeObservable, runInAction} from \"mobx\";\nimport {IHistoryRecordViewModel} from \"../record/history-record-view-model.interface\";\nimport {HistoryController_GetMigratedHistoryRequest} from \"../../../api/api.service\";\nimport {MigratedGamingHistoryRecordRawData} from \"../../gaming-history.service.interfce\";\nimport {MigratedGamingHistoryRecordModel} from \"../record/migrated-gaming-history-record.model\";\n\nexport class MigratedGamingHistoryPaginatorModel implements IHistoryPaginatorViewModel {\n\n constructor(protected readonly services: IServiceFactoryExtended) {\n makeObservable(this);\n }\n\n get daysIntervals(): number[] {\n return [30, 60, 90];\n }\n\n private _numberOfHistoryDays: number = 30;\n @action.bound\n setNumberOfHistoryDays(numberOfDays: number): void {\n this._numberOfHistoryDays = numberOfDays;\n this.records = []\n this._hasMoreRecords = true;\n this.isLoading = false\n }\n\n @observable.ref\n isLoading: boolean = false;\n\n @action.bound\n private _setIsLoading(value: boolean): void {\n this.isLoading = value;\n }\n\n @observable.ref\n private _hasMoreRecords: boolean = true;\n get hasMoreRecords(): boolean {\n return this._hasMoreRecords;\n }\n\n @observable.ref\n records: IHistoryRecordViewModel[] = [];\n\n async loadNextPage(): Promise<void> {\n if (this.isLoading) {\n return;\n }\n\n this._setIsLoading(true);\n\n const newRecords: IHistoryRecordViewModel[] = [];\n\n try {\n const serverResponse = await this.services.api.historyController.getMigratedHistory(this._createMigratedRequest());\n\n for (let recordData of serverResponse.GameHistoryData) {\n newRecords.push(this._createRecordModel(recordData));\n }\n\n runInAction(() => {\n this.records = [\n ...this.records,\n ...newRecords\n ];\n });\n } catch (err) {\n this.services.logger.error(`Failed to retrieve migrated history`, err);\n } finally {\n runInAction(() =>\n this._hasMoreRecords = false\n )\n this._setIsLoading(false);\n }\n }\n\n private _createMigratedRequest(): HistoryController_GetMigratedHistoryRequest {\n return {\n offset: 1,\n limit: 1,\n fromLastDays: this._numberOfHistoryDays,\n };\n }\n\n protected _createRecordModel(recordData: MigratedGamingHistoryRecordRawData): IHistoryRecordViewModel {\n return new MigratedGamingHistoryRecordModel(this.services, recordData);\n }\n}","import {IHistoryRecordViewModel} from \"../record/history-record-view-model.interface\";\nimport {IHistoryPaginatorViewModel} from \"./history-paginator-view-model.interface\";\n\nexport class VoidGamingHistoryPaginatorModel implements IHistoryPaginatorViewModel {\n\n get daysIntervals(): number[] \n {\n return [];\n }\n\n setNumberOfHistoryDays(numberOfDays: number): void {}\n get isLoading(): boolean {\n return false;\n }\n get hasMoreRecords(): boolean {\n return false;\n }\n get records(): IHistoryRecordViewModel[] {\n return []\n }\n async loadNextPage(): Promise<void> {\n }\n}","import {HistoryPaginatorBaseModel} from \"./history-paginator-base.model\";\nimport {HistoryController_GetHistoryResponse} from \"../../../api/api.service\";\nimport {GamingHistoryRecordRawData, NextHistoryPageRequest} from \"../../gaming-history.service.interfce\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {UserGamingHistoryRecordModel} from \"../record/user-gaming-history-record.model\";\nimport {IRegulatedCompanyModel} from \"../../../companies/regulated-company-model.interface\";\nimport {IHistoryPaginatorViewModel} from \"./history-paginator-view-model.interface\";\nimport {MigratedGamingHistoryPaginatorModel} from \"./migrated-gaming-history-paginator.model\";\nimport {VoidGamingHistoryPaginatorModel} from \"./void-gaming-history-paginator.model\";\n\nexport class UserGamingHistoryPaginatorModel extends HistoryPaginatorBaseModel<GamingHistoryRecordRawData, HistoryController_GetHistoryResponse, UserGamingHistoryRecordModel> {\n\n\n\n protected async _getNextPage(request: NextHistoryPageRequest): Promise<HistoryController_GetHistoryResponse> {\n return await this.services.api.historyController.getHistory(request);\n }\n protected _getGameTypeFromRecord(record: GamingHistoryRecordRawData): number {\n return record.GameTypeId;\n }\n protected _createRecordModel(gameInfo: GameInfo, company: IRegulatedCompanyModel, recordData: GamingHistoryRecordRawData): UserGamingHistoryRecordModel {\n return new UserGamingHistoryRecordModel(this.services, gameInfo, company, recordData)\n }\n\n protected _getRoundIdFromRecord(recordData: GamingHistoryRecordRawData): string {\n return recordData.GameId;\n }\n\n protected _createMigratedHistoryPaginator(): IHistoryPaginatorViewModel {\n if (this.services.configuration.servicesConfigs.MigratedHistory.enableGamingHistoryMigration) {\n return new MigratedGamingHistoryPaginatorModel(this.services);\n }\n return new VoidGamingHistoryPaginatorModel();\n }\n}","import {HistoryRecordBaseModel} from \"./history-record-base.model\";\nimport {SessionHistoryRecordRawData} from \"../../gaming-history.service.interfce\";\nimport {\n IHistoryRecordAmountViewModel,\n IHistoryRecordIdViewModel\n} from \"./history-record-view-model.interface\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\n\nexport class SessionGamingHistoryRecordModel extends HistoryRecordBaseModel<SessionHistoryRecordRawData> {\n get amounts(): IHistoryRecordAmountViewModel[] {\n return [\n {\n description: this.translation.translate('HISTORY_GAME_SESSION_TOTAL_BETS'),\n value: this._formatValue(this.recordData.TotalBets),\n cyClass: CyClass('cy-gaming-history-bet-value')\n },\n {\n description: this.translation.translate('HISTORY_GAME_SESSION_TOTAL_WINNINGS'),\n value: this._formatValue(this.recordData.TotalWins),\n cyClass: CyClass('cy-gaming-history-winning-value')\n },\n {\n description: this.translation.translate('HISTORY_GAME_SESSION_BALANCE'),\n value: this._formatValue(this.recordData.SessionBalance),\n cyClass: CyClass('cy-gaming-history-bankroll-value')\n }\n ];\n }\n\n get bigWinMessage(): string | null {\n return null;\n }\n\n get date(): string {\n return this.services.time.formatHistoryRecordDateTime(this.recordData.SessionEndDateTime, false);\n }\n\n get freePlayMessage(): string | null {\n return null;\n }\n\n get ids(): IHistoryRecordIdViewModel[] {\n return [\n {\n text: this.recordData.GameSessionId,\n cyClass: CyClass('cy-gaming-history-session-id')\n }\n ];\n }\n\n protected _isDetailHistorySupported(): boolean {\n return false;\n }\n\n get detailsHistoryNotAllowedOnCurrentPlatformMessage(): string | null {\n return null;\n }\n\n async openDetailHistory(): Promise<void> {\n // for session history details history is not allowed so nothing to do there\n }\n}","import {HistoryPaginatorBaseModel} from \"./history-paginator-base.model\";\nimport {NextHistoryPageRequest, SessionHistoryRecordRawData} from \"../../gaming-history.service.interfce\";\nimport {\n HistoryController_GetGameSessionHistoryResponse\n} from \"../../../api/api.service\";\nimport {SessionGamingHistoryRecordModel} from \"../record/session-gaming-history-record.model\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {IRegulatedCompanyModel} from \"../../../companies/regulated-company-model.interface\";\nimport {IHistoryPaginatorViewModel} from \"./history-paginator-view-model.interface\";\nimport {VoidGamingHistoryPaginatorModel} from \"./void-gaming-history-paginator.model\";\n\n\nexport class SessionGamingHistoryPaginatorModel extends HistoryPaginatorBaseModel<SessionHistoryRecordRawData, HistoryController_GetGameSessionHistoryResponse, SessionGamingHistoryRecordModel> {\n protected _createRecordModel(gameInfo: GameInfo, company: IRegulatedCompanyModel, recordData: SessionHistoryRecordRawData): SessionGamingHistoryRecordModel {\n return new SessionGamingHistoryRecordModel(this.services, gameInfo, company, recordData);\n }\n\n protected _getGameTypeFromRecord(recordData: SessionHistoryRecordRawData): number {\n return recordData.GameTypeId;\n }\n\n\n protected async _getNextPage(request: NextHistoryPageRequest): Promise<HistoryController_GetGameSessionHistoryResponse> {\n return await this.services.api.historyController.getGameSessionHistory(request);\n }\n\n protected _getRoundIdFromRecord(recordData: SessionHistoryRecordRawData): string {\n return recordData.GameSessionId;\n }\n\n protected _createMigratedHistoryPaginator(): IHistoryPaginatorViewModel {\n return new VoidGamingHistoryPaginatorModel();\n }\n}","import {\n IGamingHistoryService\n} from \"./gaming-history.service.interfce\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IHistoryPaginatorViewModel} from \"./models/paginator/history-paginator-view-model.interface\";\nimport {UserGamingHistoryPaginatorModel} from \"./models/paginator/user-gaming-history-paginator.model\";\nimport {GamingHistoryType} from \"./gaming-history-type\";\nimport {SessionGamingHistoryPaginatorModel} from \"./models/paginator/session-gaming-history-paginator.model\";\n\nexport class GamingHistoryService extends ServiceBase implements IGamingHistoryService {\n\n getGamingHistory(historyType: GamingHistoryType, maxPageSize: number = 50): IHistoryPaginatorViewModel {\n switch (historyType) {\n case GamingHistoryType.SessionHistory:\n return new SessionGamingHistoryPaginatorModel(this.services, maxPageSize);\n default:\n return new UserGamingHistoryPaginatorModel(this.services, maxPageSize);\n }\n }\n}\n\n","import { IServiceFactoryExtended } from '../service-factory-extended.interface';\nimport { ServiceBase } from '../ServiceBase';\nimport { IBecauseYouPlayedService } from './because-you-played.service.interface';\nimport { observable, action, makeObservable } from 'mobx';\nimport {GameInfo} from '../games/game-info';\nimport {Check} from \"@sparkware/app-utils\";\nimport {NullableUndefinedNumber} from \"../../../common/types/nullable-types\";\nimport {ALL_ARENAS} from '../arenas/arena-consts';\n\nconst BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY = \"because_you_played_last_played_real_game\";\n\ninterface ILastPlayedGames {\n lastPlayedGame?: number; //last played game in general\n lastPlayedGameByArena: Record<string, number>; // key is arena name, value last played gameType on that arena\n}\n\n\nexport class BecauseYouPlayedService extends ServiceBase implements IBecauseYouPlayedService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this._lastPlayedGames = this._getLastPlayedGamesFromLocalStorage();\n if(!this._lastPlayedGames.lastPlayedGameByArena) {\n this._lastPlayedGames.lastPlayedGameByArena = this._createDefaultPlayedGameByArenaObject();\n }\n\n this.services.gameRunner.then(gameRunner => {\n this.reaction(() => { return {\n lastPlayedRealGame: gameRunner.lastPlayedGame.lastPlayedRealGame,\n } },\n async (data) => {\n if (this.services.user.isAuthorized) {\n if (data.lastPlayedRealGame) {\n this._setLastPlayedGame(data.lastPlayedRealGame);\n await this._updateCurrentBecauseYouPlayedGames();\n }\n }\n }\n );\n })\n\n\n\n this.reaction(() => this.services.routing.currentRoute, \n async () => {\n await this._updateCurrentBecauseYouPlayedGames();\n }, {\n fireImmediately: true\n }\n );\n }\n\n _createDefaultPlayedGameByArenaObject(): Record<string, number> {\n return ALL_ARENAS.reduce((accumulator, currentValue) => {\n accumulator[currentValue] = 0;\n return accumulator;\n }, {});\n }\n\n private _getLastPlayedGamesFromLocalStorage(): ILastPlayedGames {\n const lastPlayedGameType = parseInt(this.services.localStorage.getItem(BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY));\n if(Check.isNumber(lastPlayedGameType)) {\n //This is for backward compatibility. Initially in local storage under the key BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY there was only a game type\n return {\n lastPlayedGame: lastPlayedGameType,\n lastPlayedGameByArena: this._createDefaultPlayedGameByArenaObject()\n };\n } else {\n return this.services.localStorage.getJson(BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY) || this._createEmptyLastPlayedGamesList();\n }\n }\n\n private _lastPlayedGames: ILastPlayedGames;\n\n private _setLastPlayedGame(gameInfo: GameInfo): void {\n Object.keys(this._lastPlayedGames.lastPlayedGameByArena).forEach(arenaName => {\n const arena = this.services.arenas.getArena(arenaName);\n if (0 < arena.filterGamesByArenaType([gameInfo]).length) {\n this._lastPlayedGames.lastPlayedGameByArena[arenaName] = gameInfo.gameType;\n }\n });\n\n const currentArena = this.services.arenas.getCurrentArena();\n this._lastPlayedGames.lastPlayedGameByArena[currentArena.arenaName] = gameInfo.gameType;\n this._lastPlayedGames.lastPlayedGame = gameInfo.gameType;\n\n\n this.services.localStorage.setJson(BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY, this._lastPlayedGames);\n }\n\n private _createEmptyLastPlayedGamesList(): ILastPlayedGames {\n return {\n lastPlayedGameByArena: this._createDefaultPlayedGameByArenaObject()\n };\n }\n\n @observable.ref\n currentBecauseYouPlayedGames: GameInfo[] = [];\n\n @action.bound\n private _setCurrentBecauseYouPlayedGames(gamesInfo: GameInfo[]): void {\n this.currentBecauseYouPlayedGames = gamesInfo;\n }\n\n private _getLastPlayedGameTypeForArena(arenaName: string): NullableUndefinedNumber {\n let lastGamePlayedGameTypeForArena = this._lastPlayedGames.lastPlayedGameByArena[arenaName];\n\n if(lastGamePlayedGameTypeForArena) {\n return lastGamePlayedGameTypeForArena;\n }\n\n return this._lastPlayedGames.lastPlayedGame;\n }\n\n private async _updateCurrentBecauseYouPlayedGames(): Promise<void> {\n const currentArena = this.services.arenas.getCurrentArena();\n\n let lastGamePlayedForCurrentArena = this._getLastPlayedGameTypeForArena(currentArena.arenaName);\n\n //reset data first since we are currently changed the route, some data can be seen from previous route\n this._setCurrentBecauseYouPlayedGames([]);\n\n if(!lastGamePlayedForCurrentArena) {\n return;\n }\n\n const correlatedGames = await this.services.games.getCorrelatedGames(lastGamePlayedForCurrentArena, 50);\n let gamesInfo = (await this.services.games.getGamesInfoArray([lastGamePlayedForCurrentArena, ...correlatedGames])) || [];\n gamesInfo = currentArena.filterGamesByArenaType(gamesInfo);\n\n if (gamesInfo.length > 1 && gamesInfo.find(g => g.gameType === lastGamePlayedForCurrentArena)) {\n this._setCurrentBecauseYouPlayedGames(gamesInfo);\n }\n }\n}\n","import {Check} from \"@sparkware/app-utils\";\n\nexport class VersionNumber {\n constructor(public readonly major: number, public readonly minor: number, public readonly revision: number) {\n }\n\n static tryParse(version: string): VersionNumber | null {\n if(!version) {\n return null;\n }\n\n const parts = version.split('.');\n if(parts.length !== 3) {\n return null;\n }\n\n const major = parseInt(parts[0]);\n if(!Check.isNumber(major)) {\n return null;\n }\n\n const minor = parseInt(parts[1]);\n if(!Check.isNumber(minor)) {\n return null;\n }\n\n const revision = parseInt(parts[2]);\n if(!Check.isNumber(revision)) {\n return null;\n }\n\n return new VersionNumber(major, minor, revision);\n }\n\n toString(): string {\n return `${this.major}.${this.minor}.${this.revision}`;\n }\n\n static parse(version: string): VersionNumber {\n const v = VersionNumber.tryParse(version);\n if(v) {\n return v;\n }\n\n throw new Error(`Invalid version number ${version}`)\n }\n\n equals(otherVersion: VersionNumber): boolean {\n if(!otherVersion) {\n return false;\n }\n\n return this.major === otherVersion.major && this.minor === otherVersion.minor && this.revision === otherVersion.revision;\n }\n\n isSmallerThan(otherVersion: VersionNumber): boolean {\n if(!otherVersion) {\n return false;\n }\n\n if(this.major < otherVersion.major) {\n return true;\n } else if(this.major > otherVersion.major) {\n return false;\n }\n\n if(this.minor < otherVersion.minor) {\n return true;\n } else if(this.minor > otherVersion.minor) {\n return false;\n }\n\n if(this.revision < otherVersion.revision) {\n return true;\n } else {\n return false;\n }\n }\n\n isGreaterThan(otherVersion: VersionNumber): boolean {\n return !this.isSmallerThan(otherVersion);\n }\n\n\n}","import {\n IExecuteWaitForHybridGameStepOptions,\n IHybridTouchIdFeature,\n IMarketingObject, IOrbitHybridService,\n NyxHybridParams\n} from \"./hybrid.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {Nullable, NullableUndefinedString} from \"../../../common/types/nullable-types\";\nimport {VersionNumber} from \"../../../utils/version-number\";\nimport {Check} from \"@sparkware/app-utils\";\n\n\nexport class HybridService extends ServiceBase implements IOrbitHybridService {\n prepareGameUrl(gameType: number, gameUrl: string, pathname: string = ''): string {\n return this.services.sdk.hybrid.prepareGameUrl(gameType, gameUrl, pathname);\n }\n\n getCompiledGameVersion(gameType: number): NullableUndefinedString {\n return this.services.sdk.hybrid.getCompiledGameVersion(gameType);\n }\n\n async executeWaitForHybridGameStep(options: IExecuteWaitForHybridGameStepOptions): Promise<void> {\n await this.services.sdk.hybrid.executeWaitForHybridGameStep(options);\n }\n\n navigateToOnDemandStandalone(gameType: number, companyName: string, url: string): boolean {\n return this.services.sdk.hybrid.navigateToOnDemandStandalone(gameType, companyName, url);\n }\n isNativeSupportSecondWebView(): boolean {\n return this.services.sdk.hybrid.isNativeSupportSecondWebView();\n }\n\n isOnDemandHtmlGame(gameType: number): boolean {\n return this.services.sdk.hybrid.isOnDemandHtmlGame(gameType);\n }\n\n isOnDemandStandalone(gameType: number, companyName: string): boolean {\n return this.services.sdk.hybrid.isOnDemandStandalone(gameType, companyName);\n }\n\n getOnDemandOrigin(): string {\n return this.services.sdk.hybrid.getOnDemandOrigin();\n }\n\n isSchemeSupported() : boolean {\n return this.services.sdk.hybrid.isSchemeSupported()\n }\n\n isLocalGameLauncherSupported() : boolean {\n return this.services.sdk.hybrid.isLocalGameLauncherSupported()\n }\n\n setGamescheme(gameschcme: string){\n this.services.sdk.hybrid.setGamescheme(gameschcme);\n }\n\n showAlert(message: string): void {\n this.services.sdk.eventsTrigger.showHybridAlert(message);\n }\n\n openExternalLink(url: string): void {\n this.services.sdk.hybrid.openExternalLink(url);\n }\n\n isNyxIframeSupported(): boolean {\n return this.services.sdk.hybrid.isNyxIframeSupported();\n }\n\n getNyxLocalHostUrl(params: NyxHybridParams, gameType:string): Promise<string> {\n return this.services.sdk.hybrid.getNyxLocalHostUrl(params, gameType);\n }\n\n closeSecondWebView(): void {\n return this.services.sdk.hybrid.closeSecondWebView();\n }\n\n getInfoForDisplay(): Promise<string> {\n return this.services.sdk.hybrid.getInfoForDisplay();\n }\n\n openMail(body: string): void {\n this.services.sdk.hybrid.openMail(body);\n }\n\n getTouchIDFeaturer(): IHybridTouchIdFeature {\n return this.services.sdk.hybrid.getTouchIDFeaturer();\n }\n\n isDeviceTouchEnable(): Promise<boolean> {\n return this.services.sdk.hybrid.isDeviceTouchEnable();\n }\n\n isOpenSettingSupported(): Promise<boolean> {\n return this.services.sdk.hybrid.isOpenSettingSupported();\n }\n openTouchIdSettings(): Promise<boolean> {\n return this.services.sdk.hybrid.openTouchIdSettings();\n }\n\n isDebugMode(): boolean {\n return this.services.sdk.hybrid.isDebugMode();\n }\n\n clearToken(): void {\n return this.services.sdk.hybrid.clearToken();\n }\n\n async displayWebView(timeout: number): Promise<void> {\n await this.services.sdk.hybrid.displayWebView(timeout);\n }\n\n getAppMareketingData(): IMarketingObject {\n return this.services.sdk.hybrid.getAppMareketingData();\n }\n async getLexisNexisSession(marketingData: any): Promise<any> {\n return await this.services.sdk.hybrid.getLexisNexisSession(marketingData);\n }\n\n getAFInstall(): string {\n return this.services.sdk.hybrid.getAFInstall();\n }\n\n getAppVersion(): Nullable<VersionNumber> {\n\n let versionString = this.services.sdk.hybrid.getVersion()?.toString();\n if(Check.isEmpty(versionString)) {\n return null;\n }\n\n versionString = versionString.split('-')[0];\n\n return VersionNumber.tryParse(versionString);\n }\n}","import { Check } from '@sparkware/app-utils';\nimport { IServiceFactoryExtended } from '../../../service-factory-extended.interface';\nimport { observable, action, makeObservable } from 'mobx';\nimport { IVideoPlayer, ILogType, IBufferingTime, IBitrateStats, IFramesDropStats } from '../video-player.interface';\nimport { OrbitMarketingEventAnalyticsLabel } from \"../../../analytics/analytics.service.interface\";\n\nconst DROP_FRAMES_THRESHOLD: number = 0.2;\n\nexport class StaticVideoPlayer implements IVideoPlayer {\n\n private _gameType: number;\n private _videoReference: HTMLVideoElement;\n private _streamSource: string;\n\n private _playerType: string;\n\n private _bufferingStartTime: number;\n private _firstLoadTimeLogged: boolean = false;\n private _isFirstTimePlay: boolean = true;\n private _bufferingTimeValues: number[] = [];\n private _hadPlayStarted: boolean = false;\n private _isVisible: boolean = false;\n\n @observable.ref\n hasError: boolean = false;\n\n @action.bound\n _setHasError(value:boolean): void {\n this.hasError = value;\n }\n\n @observable.ref\n isLoading: boolean = false;\n @action.bound\n _setIsLoading(value:boolean): void {\n this.isLoading = value;\n }\n\n watchTimeLimitReached: boolean = false;\n\n @observable.ref\n autoplayAllowed: boolean = true;\n\n @action.bound\n _setAutoplayAllowed(value:boolean): void {\n this.autoplayAllowed = value;\n }\n\n constructor(playerType:string, gameType:number, videoReference: HTMLVideoElement, streamSource:string, posterImage: string | null,\n private readonly _services: IServiceFactoryExtended, private readonly _dontAutoSwipe?: boolean) {\n makeObservable(this);\n\n this._playerType = playerType;\n this._videoReference = videoReference;\n this._streamSource = streamSource;\n\n this._gameType = gameType;\n\n window.addEventListener('offline', this._onGoingOffline);\n // this._videoReference.addEventListener('waiting', this._onWaiting);\n this._videoReference.addEventListener('playing', this._onPlaying);\n this._videoReference.addEventListener('canplay', this._onCanPlay);\n this._videoReference.addEventListener('error', this._onError);\n this._videoReference.addEventListener('ended', this._onEnded);\n if (posterImage) {\n this._videoReference.poster = posterImage;\n }\n\n //this._videoReference.loop = true;\n }\n\n private _onEnded = () => {\n if (this._dontAutoSwipe) {\n return;\n }\n this._services.staticVideoPlaying.getSwiperHandler()?.moveNext({\n moveOnVideoFinished: true\n });\n };\n\n get videoReference(): HTMLVideoElement {\n return this._videoReference;\n }\n\n get streamSource(): string {\n return this._streamSource;\n }\n\n // get posterImageLoadPromise(): Promise<ImagePreloadPromiseResponse> | null {\n // return this._posterImageLoadPromise;\n // }\n\n play() {\n\n if (Check.isEmpty(this.videoReference.src) || this.videoReference.src !== this.streamSource) {\n this.videoReference.src = this.streamSource;\n }\n\n this._isVisible = true;\n this._bufferingStartTime = performance.now();\n this._videoReference.play()\n .then(() => {\n this._setAutoplayAllowed(true);\n })\n .catch(error => {\n if (error.name === 'NotAllowedError') {\n // error triggered when autoplay of video is not allowed\n this._onAutoplayError();\n } else {\n this._onError(error);\n }\n });\n if (this._isFirstTimePlay) {\n this._isFirstTimePlay = false;\n this._log('info', 'play');\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'IN_VIEW', OrbitMarketingEventAnalyticsLabel.VideoPlayback, this._gameType.toString());\n }\n }\n\n pause() {\n this._isVisible = false;\n\n // we can pause the video only if had ever started playing. A pause before first time play will cause in an error\n // play() request was interrupted by a call to pause()\n if (this._hadPlayStarted) {\n this._videoReference.pause();\n }\n\n this._logAverageBufferingTimeOnPause();\n }\n\n load() {\n this._videoReference.load();\n }\n\n handleError(error: any) {\n this._onError(error);\n }\n\n destroy() {\n window.removeEventListener('offline', this._onGoingOffline);\n this._videoReference.removeEventListener('waiting', this._onWaiting);\n this._videoReference.removeEventListener('playing', this._onPlaying);\n this._videoReference.removeEventListener('canplay', this._onCanPlay);\n this._videoReference.removeEventListener('error', this._onError);\n }\n\n logUIAction(type: ILogType, action: string) {\n this._log(type, action);\n }\n\n protected _onWaiting = () => {\n // Occurs when playback stops because the next frame of a video resource is not available.\n // Example: video had played everything that was loaded and cannot play further until the next sequence is loaded\n if (this.autoplayAllowed) {\n // For some reason, the waiting event is dispatched after catching the 'NotAllowedError'\n // The following code related to loading should execute only when we have a real waiting to load,\n // so only when the playback can start\n this._bufferingStartTime = performance.now();\n this._setIsLoading(true);\n }\n }\n\n protected _onPlaying = () => {\n // Occurs when the video playback is first started or when the playback resumes.\n this._hadPlayStarted = true;\n this._logFirstLoadTimeUntilPlay();\n this._setIsLoading(false);\n\n if (!this._isVisible) {\n this.pause();\n }\n }\n\n private _getGACategory = (): string => {\n return this._services.staticVideoPlaying.gaCategory;\n }\n\n private _onCanPlay = () => {\n // Occurs when the video playback resumes.\n // Example: if video was previously paused due to a waiting event, this will let us know that the next sequence is loaded\n // and the video will play further on\n // NOTE: usually the 'playing' event is triggered in the same conditions, but on iOS devices is not so we cannot base on 'playing' event\n // Example: on iOS devices, even if the video is playing, if you press unmute for the first time, a waiting event will be triggered, without\n // having also a 'playing' event trigger. Related bug: #1755199\n this._bufferingTimeValues.push(performance.now() - this._bufferingStartTime);\n this._setIsLoading(false);\n }\n\n private _onError = (err: ErrorEvent) => {\n this._setHasError(true);\n console.error('Live stream error', err);\n this._log('error', 'VideoStreamError');\n }\n\n private _onAutoplayError = () => {\n this._setAutoplayAllowed(false);\n this._setIsLoading(false);\n this._log('info', 'AutoplayNotAllowed');;\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'AUTOPLAY', OrbitMarketingEventAnalyticsLabel.Error, this._gameType.toString());\n }\n\n private _onGoingOffline = () => {\n this._setHasError(true);\n }\n\n private _getBufferAverageTime(): number {\n return this._bufferingTimeValues.reduce((prevValue, currentValue) => {\n return prevValue + currentValue\n }, 0);\n }\n\n private _logAverageBufferingTimeOnPause() {\n const totalBufferTime = this._getBufferAverageTime();\n const customData: IBufferingTime = {\n time: totalBufferTime / this._bufferingTimeValues.length\n };\n\n this._log('info', 'AvgBufferingTime', customData);\n }\n\n private _logAverageBufferingTimeOnEnd() {\n const totalBufferTime = this._getBufferAverageTime();\n const customData: IBufferingTime = {\n time: totalBufferTime / this._bufferingTimeValues.length,\n occurrence: this._bufferingTimeValues.length\n };\n\n this._log('info', 'AvgBufferingData', customData);\n }\n\n private _logFirstLoadTimeUntilPlay() {\n if (!this._firstLoadTimeLogged) {\n const firstLoadTime = performance.now() - this._bufferingStartTime;\n const loadTime: IBufferingTime = {\n time: firstLoadTime\n }\n this._firstLoadTimeLogged = true;\n this._log('info', 'FirstLoad', loadTime);\n this._services.analytics.sendOrbitMarketingEvent(this._getGACategory(), 'PLAY', OrbitMarketingEventAnalyticsLabel.VideoPlayback, this._gameType.toString());\n }\n }\n\n protected _checkDroppedFPS(droppedFrames: number, decodedFrames: number) {\n if (!this._videoReference.paused) {\n // when video is paused, we do not care about video frames\n // since on paused no frame is rendered\n\n const droppedFramesRatio = droppedFrames/decodedFrames;\n if (droppedFramesRatio > DROP_FRAMES_THRESHOLD) {\n // when dropped frames ratio is greater than the threshold we control\n // we want to log it to Elastic\n\n const framesDropData: IFramesDropStats = {\n droppedFrames: droppedFrames,\n totalFrames: decodedFrames\n }\n this._log('info', 'FpsDrop', framesDropData);\n }\n }\n }\n\n protected _log(type: ILogType, action: string, customData: IBufferingTime | IBitrateStats | IFramesDropStats = null) {\n let structuredLoger = this._services.sdk.structuredLoggingService\n .getLogger()\n .addCategory(this._getGACategory())\n .addAction(action)\n .addLabel(this._playerType)\n .addValue(this._gameType.toString());\n\n if (!Check.isNullOrUndefined(customData)) {\n structuredLoger.addCustomData(customData);\n }\n\n switch (type) {\n case 'error':\n structuredLoger.error();\n break;\n case 'info':\n default:\n structuredLoger.info();\n break;\n }\n }\n}\n","import {VideoPlayingServiceBase} from \"./video-playing-service-base\";\nimport {GameInfo} from \"../games/game-info\";\nimport {IVideoPlayer} from \"./video-players/video-player.interface\";\nimport {StaticVideoPlayer} from \"./video-players/static-video-player/static-video-player\";\n\nexport class StaticVideoPlayingService extends VideoPlayingServiceBase {\n\n public gaCategory = \"VIDEO-LIST\";\n\n protected _checkIfSupported() {\n return true;\n }\n\n getVideoPlayer(gameInfo: GameInfo, videoReference: HTMLVideoElement, dontAutoSwipe?: boolean): IVideoPlayer {\n\n const gameType = gameInfo.gameType;\n\n const streamSource = gameInfo.videoURL;\n const posterImage = gameInfo.videoThumbnailUrl;\n\n // Maybe add check like in live stream player: if ! player.supported, return null.\n return new StaticVideoPlayer('StaticVideoPlayer', gameType, videoReference, streamSource, posterImage, this.services, dontAutoSwipe);\n\n }\n}\n","\nimport {StorageServiceBase} from \"./storage-service-base\";\nimport {ILoggerService} from \"../logger/logger.service.interface\";\n\nexport class SessionStorageService extends StorageServiceBase {\n constructor(logger: ILoggerService) {\n super(sessionStorage, logger);\n }\n}","import {ICookiesService} from \"./cookies.service.interface\";\n\nexport class CookiesService implements ICookiesService {\n constructor() {\n const now = new Date();\n now.setFullYear(now.getFullYear() + 1);\n const expirationDate = now.toUTCString();\n document.cookie = 'lastproduct=casino;expires=' + expirationDate + ';path=/';\n }\n\n createCookie(name: string, value: string, expiration_date?:Date): void {\n let expirationDate;\n if (expiration_date) {\n expirationDate = expiration_date.toUTCString()\n } else {\n let now = new Date();\n now.setFullYear(now.getFullYear() + 1);\n expirationDate = now.toUTCString();\n }\n document.cookie = name + '=' + value + ';expires=' + expirationDate+ ';path=/';\n }\n\n createDomainCookie(name: string, value: string): void {\n let now = new Date();\n now.setFullYear(now.getFullYear() + 1);\n document.cookie = name + '=' + value + ';domain=.' + this.getDomain() + ';expires=' + now.toUTCString() + ';path=/';\n }\n\n getCookie(name: string) {\n let match = document.cookie.match(new RegExp(name + '=([^;]+)'));\n if (match) {\n return match[1];\n }\n }\n\n removeCookie(name: string): void {\n document.cookie = name + \"=;expires=Thu, 01 Jan 1970 00:00:00 UTC;domain=.\" + this.getDomain() + \";\";\n }\n\n private getDomain() {\n // use hostname not host because host includes the port (ex: localhost:7070) while hostname doesn't\n const hostnameParts = window.location.hostname.split(\".\");\n if (hostnameParts.length === 1) {\n // that is localhost\n return hostnameParts[0];\n }\n // uk domains: example.co.uk\n if (\n hostnameParts.length >= 3 &&\n hostnameParts[hostnameParts.length - 1] === \"uk\" &&\n hostnameParts[hostnameParts.length - 2] === \"co\"\n ) {\n return hostnameParts.slice(-3).join(\".\");\n }\n return hostnameParts.slice(-2).join(\".\");\n }\n}","import {IFreePlayGameViewModel} from \"./free-play-game-view-model.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {IFreePlayVoucherModel} from \"../vouchers/free-play-voucher.model.interface\";\nimport {Check} from \"@sparkware/app-utils\";\n\nexport class FreePlayGameModel implements IFreePlayGameViewModel {\n constructor(private readonly voucher: IFreePlayVoucherModel,\n public readonly gameInfo: GameInfo) {\n }\n\n get hasEnoughBalanceToBet(): boolean {\n return this.voucher.currentBalance > 0\n && (Check.isNullOrUndefined(this.gameInfo.minBet) || this.gameInfo.minBet <= this.voucher.currentBalance)\n }\n async play(): Promise<void> {\n\n await this.gameInfo.open({\n isRealMode: true,\n freePlayParams: {\n freePlayId: this.voucher.id,\n freePlayType: this.voucher.freePlayType\n }\n });\n\n }\n\n}","import {IFreePlayVoucherModel} from \"./free-play-voucher.model.interface\";\nimport {\n IFreePlayVoucherData,\n IFreePlayVoucherDelta\n} from \"../../../../common/interfaces/free-play/free-play-voucher-data.interface\";\nimport { computed, observable, runInAction, makeObservable } from \"mobx\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {FreePlayGameModel} from \"../free-play-game/free-play-game.model\";\nimport {NullableNumber, NullableString, NullableUndefinedDate} from \"../../../../common/types/nullable-types\";\nimport {FP_VOUCHER_TYPES} from \"../../../../common/const/free_play_consts\";\n\nexport abstract class VoucherBaseModel implements IFreePlayVoucherModel {\n constructor(voucherData: IFreePlayVoucherData,\n protected readonly services: IServiceFactoryExtended) {\n makeObservable(this);\n\n this._voucherData = voucherData;\n }\n\n abstract get voucherName(): string;\n abstract get voucherInGameTitle(): string;\n abstract get voucherDescription(): string;\n abstract get backgroundImageUrl(): string;\n abstract get iconUrl(): string;\n protected abstract _formatVoucherAmount(amount: number): string;\n\n\n @observable.ref\n protected _voucherData: IFreePlayVoucherData;\n\n dispose() {\n }\n\n get id(): string {\n return this._voucherData.ID;\n }\n\n get freePlayType(): FP_VOUCHER_TYPES {\n return this._voucherData.FreePlayTypeId;\n }\n\n get isThirdPartyVoucher(): boolean {\n return Boolean(this._voucherData.CompanyID);\n }\n\n @computed\n get freePlayGames(): FreePlayGameModel[] {\n const gamesDictionary = this._voucherData.GameTypeIDList\n .map(gameType => this.services.games.gamesMap[gameType])\n .filter(gameInfo => Boolean(gameInfo))\n .toDictionary(game => game.gameType);\n\n\n\n const sortedGamesTypes = this.services.aiEngine.sortGames(Object.keys(gamesDictionary)\n .map(gt => parseInt(gt)));\n\n return sortedGamesTypes.map(gameType => new FreePlayGameModel(this, gamesDictionary[gameType]))\n .filter(fpg => {\n if(this.isThirdPartyVoucher) {\n //for 3rd party vouchers we don't filter the games based on the voucher available amount and game minimum bet here.\n //This is done in the VoucherForUiDisplayModel because we want to hide these only in UI but still be available on the open game flow\n return true;\n } else {\n //we do that only for 888 games\n return fpg.hasEnoughBalanceToBet;\n }\n });\n }\n\n hasGame(gameType: number): boolean {\n return Boolean(this.freePlayGames.find(g => g.gameInfo.gameType === gameType));\n }\n\n get creationDate(): NullableUndefinedDate {\n return this._voucherData.CreationDate;\n }\n get expirationDate(): Date {\n return this._voucherData.ExpirationDate;\n }\n\n private get isExpired(): boolean {\n return this._voucherData.ExpirationDate.getTime() < this.services.time.now();\n }\n\n get isValid(): boolean {\n return !this.isExpired && this.freePlayGames.length > 0;\n }\n\n updateVoucherData(newVoucherData: IFreePlayVoucherDelta): void {\n if(newVoucherData.ID !== this.id) {\n throw new Error('New voucher ID and existing voucher ID does not match');\n }\n runInAction(() => {\n this._voucherData = {\n ...this._voucherData,\n ...newVoucherData\n }\n });\n }\n\n get originalAmount(): NullableNumber {\n return this._voucherData.OriginAmount ?? null;\n }\n\n get currentBalance(): number {\n return this._voucherData.CurrentBalance ?? 0;\n }\n\n get formattedOriginalAmount(): NullableString {\n if(Check.isNullOrUndefined(this._voucherData.OriginAmount)) {\n return null;\n }\n\n return this._formatVoucherAmount(this._voucherData.OriginAmount);\n }\n\n get formattedCurrentBalance(): string {\n return this._formatVoucherAmount(this._voucherData.CurrentBalance);\n }\n\n get timeToExpiration(): TimeSpan {\n\n /*\n \"FREE_PLAY_EXPIRES_IN_TIME\": \"Expires in {expiration}\",\n \"FREE_PLAY_EXPIRES_IN_EXPIRED\": \"Expired\",\n \"FREE_PLAY_EXPIRES_IN_DAY\": \"Expires in {expiration} days\",\n */\n\n return TimeSpan.fromMilliseconds(this._voucherData.ExpirationDate.getTime() - this.services.time.now());\n }\n\n get isCloseToExpiration(): boolean {\n return this.timeToExpiration.totalDays <= 1;\n }\n\n get expirationMessage(): string {\n if(this.isExpired) {\n return this.services.translation.translate('FREE_PLAY_EXPIRES_IN_EXPIRED');\n }\n\n const timeToExpirationRoundedToSeconds = TimeSpan.fromSeconds(Math.floor(this.timeToExpiration.totalSeconds));\n\n if(this.isCloseToExpiration) {\n return this.services.translation.translate('FREE_PLAY_EXPIRES_IN_TIME', {expiration:timeToExpirationRoundedToSeconds.toString({useTotalHours: true})});\n }\n\n return this.services.translation.translate('FREE_PLAY_EXPIRES_IN_DAY', {expiration: Math.floor(timeToExpirationRoundedToSeconds.totalDays).toString()});\n }\n}","import {VoucherBaseModel} from \"../voucher-base.model\";\n\nexport class FreePlayVoucherModel extends VoucherBaseModel {\n get voucherName(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_NAME_FPV');\n }\n\n get voucherDescription(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_DESC_FPV');\n }\n\n get voucherInGameTitle(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_TITLE_FPV');\n }\n\n protected _formatVoucherAmount(amount: number): string {\n return this.services.currency.formatMoney(amount, true);\n }\n\n get backgroundImageUrl(): string {\n return this.services.theme.currentTheme.assets.images.free_play.freeplay_bg_type_fp_png.toString();\n }\n\n get iconUrl(): string {\n return this.services.theme.currentTheme.assets.images.free_play.freeplay_type_fp_png.toString();\n }\n\n}","import {VoucherBaseModel} from \"../voucher-base.model\";\n\nexport class JackpotFreePlayVoucherModel extends VoucherBaseModel {\n\n get voucherName(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_NAME_JPFPV');\n }\n\n\n get voucherDescription(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_DESC_JPFPV');\n }\n\n get voucherInGameTitle(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_TITLE_JPFPV');\n }\n\n protected _formatVoucherAmount(amount: number): string {\n return this.services.currency.formatMoney(amount, true);\n }\n\n get backgroundImageUrl(): string {\n return this.services.theme.currentTheme.assets.images.free_play.freeplay_bg_type_jfp_png.toString();\n }\n\n get iconUrl(): string {\n return this.services.theme.currentTheme.assets.images.free_play.freeplay_type_jfp_png.toString();\n }\n\n}","import {VoucherBaseModel} from \"../voucher-base.model\";\n\nexport class FreeSpinsVoucherModel extends VoucherBaseModel {\n get voucherName(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_NAME_FSV');\n }\n\n\n get voucherDescription(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_DESC_FSV');\n }\n\n get voucherInGameTitle(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_TITLE_FSV');\n }\n\n protected _formatVoucherAmount(amount: number): string {\n return (amount / this._voucherData.SpinBetAmount).toString();\n }\n\n get backgroundImageUrl(): string {\n return this.services.theme.currentTheme.assets.images.free_play.freeplay_bg_type_fs_png.toString();\n }\n\n get iconUrl(): string {\n return this.services.theme.currentTheme.assets.images.free_play.freeplay_type_fs_png.toString();\n }\n}","import {VoucherBaseModel} from \"../voucher-base.model\";\n\nexport class JackpotFreeSpinsVoucherModel extends VoucherBaseModel {\n\n get voucherName(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_NAME_JPFSV');\n }\n\n\n get voucherDescription(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_DESC_JPFSV');\n }\n\n get voucherInGameTitle(): string {\n return this.services.translation.translate('FREE_PLAY_VOUCHER_TITLE_JPFSV');\n }\n\n protected _formatVoucherAmount(amount: number): string {\n return (amount / this._voucherData.SpinBetAmount).toString();\n }\n\n get backgroundImageUrl(): string {\n return this.services.theme.currentTheme.assets.images.free_play.freeplay_bg_type_jfs_png.toString();\n }\n\n get iconUrl(): string {\n return this.services.theme.currentTheme.assets.images.free_play.freeplay_type_jfs_png.toString();\n }\n\n}","import {IFreePlayVoucherData} from \"../../../../common/interfaces/free-play/free-play-voucher-data.interface\";\nimport {IFreePlayVoucherModel} from \"../vouchers/free-play-voucher.model.interface\";\nimport {FP_VOUCHER_TYPES} from \"../../../../common/const/free_play_consts\";\nimport {FreePlayVoucherModel} from \"../vouchers/free-play/free-play-voucher.model\";\nimport {JackpotFreePlayVoucherModel} from \"../vouchers/jackpot-free-play/jackpot-free-play-voucher.model\";\nimport {FreeSpinsVoucherModel} from \"../vouchers/free-spins/free-spins-voucher.model\";\nimport {JackpotFreeSpinsVoucherModel} from \"../vouchers/jackpot-free-spins/jackpot-free-spins-voucher.model\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {DisposableObject} from \"../../../../utils/disposable-object\";\n\nexport class VouchersProviderBase extends DisposableObject {\n constructor(protected readonly services: IServiceFactoryExtended) {\n super();\n }\n\n protected _createVoucherModel(voucherData: IFreePlayVoucherData): IFreePlayVoucherModel | null {\n switch (voucherData.FreePlayTypeId) {\n case FP_VOUCHER_TYPES.FreePlay:\n return new FreePlayVoucherModel(voucherData, this.services);\n case FP_VOUCHER_TYPES.FreeJackpotPlay:\n return new JackpotFreePlayVoucherModel(voucherData, this.services);\n case FP_VOUCHER_TYPES.FreeSpin:\n return new FreeSpinsVoucherModel(voucherData, this.services);\n case FP_VOUCHER_TYPES.FreeJackpotSpin:\n return new JackpotFreeSpinsVoucherModel(voucherData, this.services);\n default:\n this.services.logger.error(`Invalid voucher type ${voucherData.FreePlayTypeId}`);\n return null;\n }\n }\n}","import {IFreePlayVouchersProvider} from \"../free-play-vouchers.provider.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport { observable, runInAction, makeObservable } from \"mobx\";\nimport {\n IFreePlayVoucherData,\n IFreePlayVoucherDelta\n} from \"../../../../../common/interfaces/free-play/free-play-voucher-data.interface\";\nimport {IFreePlayVoucherModel} from \"../../vouchers/free-play-voucher.model.interface\";\nimport {VouchersProviderBase} from \"../vouchers-provider-base\";\n\nexport class Tripe8FreePlayVouchersProvider extends VouchersProviderBase implements IFreePlayVouchersProvider {\n constructor(services: IServiceFactoryExtended) {\n super(services)\n\n makeObservable(this);\n\n this.addSdkEventSubscription(this.services.sdk.events.onFreePlayBatchAdded(this._onFreePlayBatchAddedHandler));\n this.addSdkEventSubscription(this.services.sdk.events.onFreePlayBatchUpdated(this._onFreePlayBatchUpdatedHandler));\n this.addSdkEventSubscription(this.services.sdk.events.onFreePlayBatchRemoved(this._onFreePlayBatchRemovedHandler));\n }\n dispose() {\n super.dispose();\n\n this.vouchers.forEach(voucher => voucher.dispose());\n this.vouchers = [];\n }\n\n @observable\n vouchers: IFreePlayVoucherModel[] = [];\n\n private _findVoucher(voucherId: string): IFreePlayVoucherModel | null {\n return this.vouchers.find(v => v.id === voucherId.toString()) || null;\n }\n\n private _onFreePlayBatchAddedHandler = (vouchers: IFreePlayVoucherData[]) => {\n runInAction(() => {\n vouchers.forEach(voucherData => {\n const existingVoucher = this._findVoucher(voucherData.ID);\n if(existingVoucher) {\n existingVoucher.updateVoucherData(voucherData);\n } else {\n const voucherModel = this._createVoucherModel(voucherData);\n if(voucherModel) {\n this.vouchers.push(voucherModel);\n }\n }\n });\n });\n }\n\n private _onFreePlayBatchUpdatedHandler = (vouchers: IFreePlayVoucherDelta[]) => {\n runInAction(() => {\n vouchers.forEach(voucherData => {\n const existingVoucher = this._findVoucher(voucherData.ID);\n if(existingVoucher) {\n existingVoucher.updateVoucherData(voucherData);\n } else {\n this.services.logger.warning(`Received voucher update event for a voucher that is not in the list! voucher ID = ${voucherData.ID}`);\n }\n });\n });\n }\n\n private _onFreePlayBatchRemovedHandler = (voucherIds: string[]) => {\n runInAction(() => {\n voucherIds.forEach(id => {\n const index = this.vouchers.findIndex(v => v.id === id);\n if(index >= 0) {\n this.vouchers[index].dispose();\n this.vouchers.splice(index, 1);\n }\n });\n });\n }\n\n async refreshVouchers(): Promise<void> {\n //No need to refresh vouchers for 888. They are coming through firebase\n }\n}","import {IFreePlayVoucherViewModel} from \"./vouchers/free-play-voucher-view-model.interface\";\n\nexport enum FreePlayStatus {\n Created = 1,\n Active = 5,\n Canceled = 9,\n Expired = 10,\n Finished = 16\n}\n\nexport interface IFreePlayService {\n readonly userVouchersSortedByCreationDate: IFreePlayVoucherViewModel[];\n readonly userVouchersSortedByExpirationDate: IFreePlayVoucherViewModel[];\n readonly userVouchersToDisplayInUI: IFreePlayVoucherViewModel[];\n readonly hasVouchers: boolean;\n findVoucherById(id: string): IFreePlayVoucherViewModel | null\n getGameVouchersSortedByCreationDate(gameType: number): IFreePlayVoucherViewModel[];\n refreshVouchers(): Promise<void>;\n registerActionToExecuteWhenFreePlayIsAvailable(action: () => Promise<void>): void;\n}","import { IFreePlayVouchersProvider } from \"../free-play-vouchers.provider.interface\";\nimport { IFreePlayVoucherModel } from \"../../vouchers/free-play-voucher.model.interface\";\nimport { observable, runInAction, makeObservable } from \"mobx\";\nimport { IServiceFactoryExtended } from \"../../../service-factory-extended.interface\";\nimport { VouchersProviderBase } from \"../vouchers-provider-base\";\nimport { GNWP_SOURCES } from \"../../../gnwp/gnwp-consts\";\nimport { Check } from \"@sparkware/app-utils\";\nimport { ThirdPartyFreePlayController_GetAllVouchersResponse } from \"../../../api/api.service\";\nimport { IFreePlayVoucherData } from \"../../../../../common/interfaces/free-play/free-play-voucher-data.interface\";\nimport { FP_VOUCHER_TYPES } from \"../../../../../common/const/free_play_consts\";\nimport { FreePlayStatus } from \"../../free-play.service.interface\";\nimport { NullableUndefinedDate, NullableUndefinedString } from \"../../../../../common/types/nullable-types\";\n\nenum THIRD_PARTY_BONUS_TYPE {\n FreePlay = 1,\n Voucher = 2\n}\n\ntype BackendBonusData = ThirdPartyFreePlayController_GetAllVouchersResponse['FreePlayBonusList'][number];\n\nexport class ThirdPartyVouchersProvider extends VouchersProviderBase implements IFreePlayVouchersProvider {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this.refreshVouchers();\n\n this.addSdkEventSubscription(this.services.sdk.events.onGameClose(async () => {\n await this.refreshVouchers();\n }));\n\n this.addSdkEventSubscription(this.services.sdk.events.onExternalLinkClosed(async (source) => {\n if (source === GNWP_SOURCES.CASHIER || source === GNWP_SOURCES.MY_ACCOUNT || source === GNWP_SOURCES.OMG) {\n await this.refreshVouchers();\n }\n }));\n\n this.addSdkEventSubscription(this.services.sdk.events.onDepositWidgetClosed(async () => {\n await this.refreshVouchers();\n }));\n\n this.addSdkEventSubscription(this.services.sdk.events.onFreeToPlayWidgetClosed(async () => {\n await this.refreshVouchers();\n }));\n }\n\n @observable\n vouchers: IFreePlayVoucherModel[] = [];\n\n private _setVouchers(newVouchers: IFreePlayVoucherModel[]): void {\n runInAction(() => {\n this.vouchers = newVouchers;\n });\n }\n\n dispose() {\n super.dispose();\n\n this.vouchers.forEach(voucher => voucher.dispose());\n this.vouchers = [];\n }\n\n async refreshVouchers(): Promise<void> {\n const response = await this.services.api.thirdPartyFreePlayController.getAllVouchers();\n if (Check.isEmpty(response.FreePlayBonusList)) {\n this._setVouchers([]);\n return;\n }\n\n const voucherModels: IFreePlayVoucherModel[] = [];\n\n for (let bonusDataFromBackend of response.FreePlayBonusList) {\n if (bonusDataFromBackend.BonusStatus === FreePlayStatus.Active) {\n const clientVoucherData = await this._convertBackendBonusDataToClientVoucherData(bonusDataFromBackend);\n if (clientVoucherData) {\n const voucherModel = this._createVoucherModel(clientVoucherData);\n if (voucherModel) {\n voucherModels.push(voucherModel);\n }\n }\n }\n\n }\n\n this._setVouchers(voucherModels);\n\n }\n\n private async _convertBackendBonusDataToClientVoucherData(bonusDataFromBackend: BackendBonusData): Promise<IFreePlayVoucherData | null> {\n if (Check.isEmpty(bonusDataFromBackend.CurrencyCode)) {\n this.services.logger.error(`Third party voucher with ID ${bonusDataFromBackend.FreePlayID} is missing currency code`);\n return null;\n }\n\n if (bonusDataFromBackend.CurrencyCode !== this.services.currency.currencyIso3) {\n this.services.logger.error(`Third party voucher with ID ${bonusDataFromBackend.FreePlayID} has currency code ${bonusDataFromBackend.CurrencyCode} which is different from user currency code ${this.services.currency.currencyIso3}`);\n return null;\n }\n\n switch (bonusDataFromBackend.FreePlayTypeID) {\n case THIRD_PARTY_BONUS_TYPE.FreePlay:\n return this._convertFreePlay(bonusDataFromBackend);\n case THIRD_PARTY_BONUS_TYPE.Voucher:\n return this._convertVoucher(bonusDataFromBackend);\n default:\n this.services.logger.error(`Unknown third party free play type ${bonusDataFromBackend.FreePlayTypeID}`);\n return null;\n }\n }\n\n private async _getGamesMaxBets(gameTypes: number[]): Promise<number[]> {\n const gamesInfo = await this.services.games.getGamesInfoArray(gameTypes);\n\n return gamesInfo.filter(gInfo => !Check.isNullOrUndefined(gInfo?.maxBet))\n .map(gInfo => gInfo.maxBet);\n }\n\n\n private _parseVoucherCreationDate(creationDate: NullableUndefinedString): NullableUndefinedDate {\n if (creationDate) {\n return new Date(creationDate);\n } else {\n return null;\n }\n }\n\n private async _convertFreePlay(bonusDataFromBackend: BackendBonusData): Promise<IFreePlayVoucherData | null> {\n if (!bonusDataFromBackend.FreeSpinsInfo) {\n this.services.logger.error(`Missing FreeSpinsInfo for third party voucher with ID ${bonusDataFromBackend.FreePlayID}`);\n return null;\n }\n\n let spinBetAmount = bonusDataFromBackend.FreeSpinsInfo.BetPerSpin;\n if (!spinBetAmount) {\n const maxBets = await this._getGamesMaxBets(bonusDataFromBackend.GameTypesIDs);\n if (maxBets.length === 0) {\n spinBetAmount = 0;\n } else {\n spinBetAmount = Math.max(...maxBets);\n }\n }\n return {\n ID: bonusDataFromBackend.FreePlayID,\n CurrentBalance: bonusDataFromBackend.FreeSpinsInfo.NumberOfFreeSpinsLeft * spinBetAmount,\n Winnings: bonusDataFromBackend.CurrentWinningAmount,\n FreePlayTypeId: FP_VOUCHER_TYPES.FreeSpin,\n OriginAmount: bonusDataFromBackend.FreeSpinsInfo.NumberOfAwardedFreeSpins * spinBetAmount,\n CreationDate: this._parseVoucherCreationDate(bonusDataFromBackend.CreationDate),\n ExpirationDate: new Date(bonusDataFromBackend.ExpirationDate),\n SpinBetAmount: spinBetAmount,\n GameTypeIDList: bonusDataFromBackend.GameTypesIDs,\n CompanyID: bonusDataFromBackend.CompanyID\n };\n }\n\n private async _convertVoucher(bonusDataFromBackend: BackendBonusData): Promise<IFreePlayVoucherData | null> {\n if (!bonusDataFromBackend.VoucherInfo) {\n this.services.logger.error(`Missing VoucherInfo for third party voucher with ID ${bonusDataFromBackend.FreePlayID}`);\n return null;\n }\n\n return {\n ID: bonusDataFromBackend.FreePlayID,\n CurrentBalance: bonusDataFromBackend.VoucherInfo.RemainingFreePlayAmount,\n Winnings: bonusDataFromBackend.CurrentWinningAmount,\n FreePlayTypeId: FP_VOUCHER_TYPES.FreePlay,\n OriginAmount: bonusDataFromBackend.AwardedFreePlayAmount,\n CreationDate: this._parseVoucherCreationDate(bonusDataFromBackend.CreationDate),\n ExpirationDate: new Date(bonusDataFromBackend.ExpirationDate),\n SpinBetAmount: 0,\n GameTypeIDList: bonusDataFromBackend.GameTypesIDs,\n CompanyID: bonusDataFromBackend.CompanyID\n };\n\n }\n}","import { FP_VOUCHER_TYPES } from \"../../../../common/const/free_play_consts\";\nimport { IFreePlayVoucherDelta } from \"../../../../common/interfaces/free-play/free-play-voucher-data.interface\";\nimport { IFreePlayGameViewModel } from \"../free-play-game/free-play-game-view-model.interface\";\nimport {IFreePlayVoucherModel} from \"./free-play-voucher.model.interface\";\n\nexport class VoucherForUiDisplayModel implements IFreePlayVoucherModel {\n constructor(private readonly innerVoucher: IFreePlayVoucherModel) {\n\n }\n\n get isValid(): boolean {\n return this.innerVoucher.isValid && this.freePlayGames.length > 0;\n }\n updateVoucherData(voucherData: IFreePlayVoucherDelta): void {\n this.innerVoucher.updateVoucherData(voucherData);\n }\n hasGame(gameType: number): boolean {\n return Boolean(this.freePlayGames.find(g => g.gameInfo.gameType === gameType));\n }\n dispose(): void {\n this.innerVoucher.dispose()\n }\n get creationDate(): Date {\n return this.innerVoucher.creationDate;\n }\n get expirationDate(): Date {\n return this.innerVoucher.expirationDate;\n }\n get id(): string {\n return this.innerVoucher.id\n }\n get freePlayType(): FP_VOUCHER_TYPES {\n return this.innerVoucher.freePlayType;\n }\n get originalAmount(): number {\n return this.innerVoucher.originalAmount;\n }\n get formattedOriginalAmount(): string {\n return this.innerVoucher.formattedOriginalAmount;\n }\n get currentBalance(): number {\n return this.innerVoucher.currentBalance;\n }\n get formattedCurrentBalance(): string {\n return this.innerVoucher.formattedCurrentBalance;\n }\n get isCloseToExpiration(): boolean {\n return this.innerVoucher.isCloseToExpiration;\n }\n get expirationMessage(): string {\n return this.innerVoucher.expirationMessage;\n }\n get voucherName(): string {\n return this.innerVoucher.voucherName;\n }\n get voucherInGameTitle(): string {\n return this.innerVoucher.voucherInGameTitle;\n }\n get voucherDescription(): string {\n return this.innerVoucher.voucherDescription;\n }\n get freePlayGames(): IFreePlayGameViewModel[] {\n //When displaying the voucher in user menu or anywhere in the UI, for both 3rd party and 888 vouchers we filter the games based on the voucher remaining amount and game minimum bet\n return this.innerVoucher.freePlayGames.filter(fpg => fpg.hasEnoughBalanceToBet);\n }\n get backgroundImageUrl(): string {\n return this.innerVoucher.backgroundImageUrl;\n }\n get iconUrl(): string {\n return this.innerVoucher.iconUrl;\n }\n get isThirdPartyVoucher(): boolean {\n return this.innerVoucher.isThirdPartyVoucher;\n }\n}","import { ServiceBase } from \"../ServiceBase\";\nimport { IFreePlayService } from \"./free-play.service.interface\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { IFreePlayVouchersProvider } from \"./providers/free-play-vouchers.provider.interface\";\nimport { action, observable, makeObservable, computed, runInAction } from \"mobx\";\nimport { IFreePlayVoucherModel } from \"./vouchers/free-play-voucher.model.interface\";\nimport { Tripe8FreePlayVouchersProvider } from \"./providers/888/888-free-play-vouchers.provider\";\nimport { ThirdPartyVouchersProvider } from \"./providers/3rdparty/third-party-vouchers.provider\";\nimport { VoucherForUiDisplayModel } from \"./vouchers/voucher-for-ui-display.model\";\n\nexport class FreePlayService extends ServiceBase implements IFreePlayService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n this.reaction(() => this.hasVouchers,\n async () => {\n await this._executeActionsWhenFreePlayIsAvailable();\n });\n\n this.reaction(() => this._actionsToExecuteWhenFreePlayIsAvailable.length,\n async () => {\n await this._executeActionsWhenFreePlayIsAvailable();\n });\n\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (isAuthorized) {\n this._setVoucherProviders([\n new Tripe8FreePlayVouchersProvider(this.services),\n new ThirdPartyVouchersProvider(this.services)\n ]);\n } else {\n this._setVoucherProviders([]);\n }\n }, {\n fireImmediately: true\n });\n }\n\n @observable\n private _actionsToExecuteWhenFreePlayIsAvailable: Array<() => Promise<void>> = [];\n\n registerActionToExecuteWhenFreePlayIsAvailable(action: () => Promise<void>): void {\n runInAction(() => {\n this._actionsToExecuteWhenFreePlayIsAvailable.push(action);\n })\n }\n\n\n @observable.ref\n private _vouchersProviders: IFreePlayVouchersProvider[] = [];\n\n\n @action.bound\n private _setVoucherProviders(newProviders: IFreePlayVouchersProvider[]): void {\n this._vouchersProviders.forEach(vp => vp.dispose());\n this._vouchersProviders = newProviders;\n }\n\n get hasVouchers(): boolean {\n return this.userActiveVouchers.length > 0;\n }\n\n @computed\n get userVouchers(): IFreePlayVoucherModel[] {\n let allVouchers: IFreePlayVoucherModel[] = [];\n\n this._vouchersProviders.forEach(provider => {\n allVouchers = [\n ...allVouchers,\n ...provider.vouchers\n ];\n });\n\n return allVouchers;\n }\n\n //This is on purpose not market as computed, because isValid is based on isExpired and we want isExpired to be reevaluated on each call\n get userActiveVouchers(): IFreePlayVoucherModel[] {\n return this.userVouchers.filter(v => v.isValid);\n }\n\n get userVouchersSortedByCreationDate(): IFreePlayVoucherModel[] {\n\n return [...this.userActiveVouchers]\n .sort((v1, v2) => {\n let diff = (v1.creationDate?.getTime() ?? 0) - (v2.creationDate?.getTime() ?? 0);\n if (diff !== 0) {\n return diff;\n }\n return v1.expirationDate.getTime() - v2.expirationDate.getTime();\n });\n }\n\n get userVouchersSortedByExpirationDate(): IFreePlayVoucherModel[] {\n return [...this.userActiveVouchers]\n .sort((v1, v2) => v1.expirationDate.getTime() - v2.expirationDate.getTime());\n }\n\n get userVouchersToDisplayInUI(): IFreePlayVoucherModel[] {\n return this.userVouchersSortedByExpirationDate\n .map(v => new VoucherForUiDisplayModel(v))\n .filter(v => v.isValid);\n }\n\n findVoucherById(id: string): IFreePlayVoucherModel | null {\n return this.userActiveVouchers.find(v => v.id === id) || null;\n }\n\n getGameVouchersSortedByCreationDate(gameType: number): IFreePlayVoucherModel[] {\n return this.userVouchersSortedByCreationDate.filter(voucher => voucher.hasGame(gameType));\n }\n\n async refreshVouchers(): Promise<void> {\n await Promise.all(this._vouchersProviders.map(p => p.refreshVouchers()))\n }\n\n async _executeActionsWhenFreePlayIsAvailable(): Promise<void> {\n if (this.hasVouchers) {\n for (let action of this._actionsToExecuteWhenFreePlayIsAvailable) {\n await action();\n }\n\n this._actionsToExecuteWhenFreePlayIsAvailable = [];\n }\n }\n}","import {IRestrictionsService} from \"./restrictions.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IGameRestriction} from \"./game-restriction.interface\";\nimport {GameInfo} from \"../games/game-info\";\n\nexport class RestrictionsService extends ServiceBase implements IRestrictionsService {\n getGenericRestrictionMessage(): string {\n return this.services.translation.translate('100200');\n }\n\n getGameRestriction(gameInfo: GameInfo): IGameRestriction {\n return this.services.sdk.getGameRestriction(gameInfo.gameType, gameInfo.gameGroupId, gameInfo.vendorId);\n }\n}","import {IFreeToPlayService, IFreeToPlayShowOptions} from \"./free-to-play.service.interface\";\nimport {AnimatedIconBaseService, AnimatedIconObservableTarget} from \"../pixi-app/animated-icon-base-service.service\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { observable, action, makeObservable } from \"mobx\";\n\nexport class FreeToPlayService extends AnimatedIconBaseService implements IFreeToPlayService {\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n\n makeObservable(this);\n\n this.reaction(\n () => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (isAuthorized) {\n if (this._isEnabled() ) {\n this._checkEligibilityPromise = this._checkEligibility();\n }\n } else {\n this._checkEligibilityPromise = Promise.resolve();\n this._setIsPromotionEligible(false);\n }\n }, {\n fireImmediately: true\n }\n );\n }\n\n private _checkEligibilityPromise: Promise<void> = Promise.resolve();\n\n private async _checkEligibility() {\n let shouldShowPromotion = false;\n if (this.services.user.isAuthorized) {\n try {\n shouldShowPromotion = !(await this.services.crm.isPromotionRestricted());\n }\n catch (err) {\n this.services.logger.error('isPromotionRestricted failed', err);\n }\n }\n\n this._setIsPromotionEligible(shouldShowPromotion);\n }\n\n waitForEligibility(): Promise<void> {\n return this._checkEligibilityPromise;\n }\n\n @observable.ref\n private _isPromotionEligible: boolean = false;\n\n @action.bound\n private _setIsPromotionEligible(isEligible: boolean) {\n this._isPromotionEligible = isEligible;\n }\n\n\n get isPromotionEligible(): boolean {\n return this._isPromotionEligible;\n }\n\n get shouldShowIcon(): boolean {\n return this._shouldShowIcon();\n }\n\n @observable.ref\n private _isPromotionOpened: boolean = false;\n\n get isPromotionOpened(): boolean {\n return this._isPromotionOpened;\n }\n\n @action.bound\n setIsPromotionOpened(isOpened: boolean) {\n this._isPromotionOpened = isOpened;\n }\n\n loadFreeToPlayAnimation(options: AnimatedIconObservableTarget) {\n this.loadAnimatedIcon(options, \"freeToPlayAnimatedIcon\");\n }\n\n private _isEnabled(): boolean {\n return this.services.configuration.servicesConfigs.AppLauncher.apps.CASINO_BONUS_GAME_WIDGET.enabled;\n }\n\n private _shouldShowIcon(): boolean {\n return this.services.configuration.servicesConfigs.AppLauncher.apps.CASINO_BONUS_GAME_WIDGET.shouldShowIcon;\n }\n\n async showPromotion(options: IFreeToPlayShowOptions): Promise<void> {\n options.appSpecificParameters = options.appSpecificParameters || {};\n\n Object.assign(options.appSpecificParameters, {\n publicationID: this.services.configuration.cmsPublicationId,\n //TODO - get dynamic when needed\n templateID: \"392012\",\n domain: (await this.services.cmsApi).apiOrigin\n });\n\n await (await this.services.appLauncher).openFreeToPlayBonusGames({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: options.channel,\n appSpecificParameters: options.appSpecificParameters\n });\n }\n}\n","import {IScriptLoaderService} from \"./script-loader.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {LoadScriptOptions} from \"../../../common/interfaces/load-script-options\";\n\nexport class ScriptLoaderService extends ServiceBase implements IScriptLoaderService {\n async loadScript(options: LoadScriptOptions): Promise<void> {\n await this.services.sdk.scriptLoader.loadScript(options);\n }\n\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {ISessionTimerService} from \"./session-timer.service.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {observable, runInAction, makeObservable} from \"mobx\";\n\nexport class SessionTimerService extends ServiceBase implements ISessionTimerService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n services.sdk.events.onSessionTimerUpdate(this._onSessionTimerUpdate);\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (!isAuthorized) {\n this.currentSessionTimer = null;\n }\n });\n }\n\n private _onSessionTimerUpdate = (eventData: {sessionTime: TimeSpan}) => {\n runInAction(() => {\n this.currentSessionTimer = eventData.sessionTime;\n });\n }\n\n @observable.ref\n currentSessionTimer: TimeSpan | null = null;\n\n}","export enum ReasonIsNotEligible\n{\n Ok = 0,\n NoPromotionsFound = 101,\n NoSegmentationFound = 102,\n PromotionRestricted = 103,\n FTD0 = 104,\n NotDepositedInLast30Days = 105,\n SpinAlreadyUsedToday = 106\n}\n\nexport interface CheckEligibilityResponse {\n isEligible: boolean;\n nextEligibleDate: string;\n reasonIsNotEligible: ReasonIsNotEligible;\n isLastEligibleDay: boolean;\n nextEligibilitySeconds: number;\n segmentationId: number;\n}\n\nexport interface ICrmSdkLib {\n initCrm(params: {userToken: string}): Promise<void>;\n onConnectedToFirebase(params: {fbToken: string}): Promise<void>;\n onDisconnectedFromFirebase(): void;\n checkEligibility(): Promise<CheckEligibilityResponse>;\n}\n","import { ServiceBase } from \"../ServiceBase\";\nimport { ICrmService } from \"./crm.service.interface\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport {ICrmSdkLib, ReasonIsNotEligible, CheckEligibilityResponse} from \"../../../common/interfaces/crm-sdk-lib.interface\";\n\nexport class CrmService extends ServiceBase implements ICrmService {\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n this._initService();\n }\n\n\n private _initService() {\n if (!this.isEnabled) {\n return;\n }\n\n this.services.sdk.events.onFirebaseGotNewToken((eventData) => {\n this._connect(eventData.token);\n });\n\n this.reaction(() => this.services.user.isAuthorized, (isAuth) => {\n if (isAuth) {\n this._initCrm();\n } else {\n this._disconnect();\n }\n }, {\n fireImmediately: true\n });\n }\n \n get isEnabled(): boolean {\n return this.services.configuration.servicesConfigs.CrmSdk.enabled && \n !!this.services.configuration.servicesConfigs.CrmSdk.libUrl;\n }\n\n private _sdkLib: null | ICrmSdkLib = null;\n private _initCrmPromise: Promise<void> | null = null;\n\n private async _loadLib() {\n if (!this._sdkLib) {\n await this.services.scriptLoader.loadScript({\n url: this.services.configuration.servicesConfigs.CrmSdk.libUrl\n })\n this._sdkLib = this.services.window.getGlobalProperty('platformCrmSdk');\n }\n }\n\n private async _initCrm() {\n //prevent calling sdkLib.initCrm twice in this session\n if (this._initCrmPromise) {\n return this._initCrmPromise;\n }\n\n const executeInitCrm = async () => {\n try {\n const platformToken = await this.services.sdk.getPlatformToken();\n if (!platformToken?.token) {\n throw new Error(\"Cannot retrieve platform token!\");\n }\n\n await this._loadLib();\n const res = await this._sdkLib.initCrm({\n userToken: platformToken.token\n });\n this.services.logger.info('crmSdk.initCrm() succeeded', res);\n } catch (err) {\n this.services.logger.error('crmSdk.initCrm() failed', err);\n throw err;\n }\n }\n\n this._initCrmPromise = executeInitCrm();\n \n this._initCrmPromise.catch(() => {\n // try again next time if something failed\n this._initCrmPromise = null;\n });\n return this._initCrmPromise;\n };\n\n private async _connect(fbToken: string) {\n try {\n await this._initCrm();\n await this._sdkLib.onConnectedToFirebase({\n fbToken: fbToken\n });\n this.services.logger.info('crmSdk.onConnectedToFirebase() succeeded');\n } catch (err) {\n this.services.logger.error('crmSdk.onConnectedToFirebase() failed', err);\n throw err;\n }\n }\n\n private async _disconnect() {\n this._initCrmPromise = null;\n if (this._sdkLib) {\n try {\n await this._sdkLib.onDisconnectedFromFirebase();\n this.services.logger.info('crmSdk.onDisconnectedFromFirebase() succeeded');\n } catch (err) {\n this.services.logger.error('crmSdk.onDisconnectedFromFirebase() failed', err);\n throw err;\n }\n }\n }\n\n async _getEligibility(): Promise<CheckEligibilityResponse> {\n try {\n await this._initCrm();\n const eligibility = await this._sdkLib.checkEligibility();\n this.services.logger.info('crmSdk.checkEligibility() response', eligibility);\n return eligibility;\n } catch(err) {\n this.services.logger.error('crmSdk.checkEligibility() failed', err);\n throw err;\n }\n }\n\n async isPromotionRestricted(): Promise<boolean> {\n if (!this.services.user.isAuthorized){\n this.services.logger.warning('Promotion safe check - must be a logged in user - failed')\n return false\n }\n\n const eligibility = await this._getEligibility();\n const doNotShowPromotionReasons = [ReasonIsNotEligible.PromotionRestricted, /*ReasonIsNotEligible.NoSegmentationFound*/];\n // In case user is fully eligible - meaning he did not play today and deposited in last 30 days and not vip\n // they return isEligible = true\n // This condition says if he's fully eligible or he is not fully eligible but reason is different than promotion permitted\n const shouldShowPromotion = eligibility.isEligible || !doNotShowPromotionReasons.includes(eligibility.reasonIsNotEligible);\n return !shouldShowPromotion;\n }\n}\n","import styled from 'styled-components';\n\nexport const LugasActiveDialogBoxLine = styled.div`\n margin:30px 5px 5px;\n border-bottom: 2px solid ${({theme}) => theme.colors.boxBorderLighter};\n`;","\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport { DialogTextBox, DialogDimmedTextBox } from \"../modal-dialog/boxes/text/dialog-text.box\";\nimport {ModalDialogActionsComponent} from \"../modal-dialog/modal-dialog-actions.component\";\nimport { LugasActiveDialogBoxLine } from \"./boxes/line-box\";\n\ninterface ILugasActivePopupComponentProps {\n dialogHandler: IModalDialogHandler;\n}\n\n export class LugasActivePopupComponent extends OrbitComponent<ILugasActivePopupComponentProps> {\n\n private _onOkPressed = () => {\n this.props.dialogHandler && this.props.dialogHandler.close();\n };\n\n render() {\n return (\n <div className={CyClass('cy-modal-content')}>\n <DialogTextBox>{this.services.translation.translate(\"LUGAS_ACTIVE_TEXT_1\")}</DialogTextBox>\n <LugasActiveDialogBoxLine/>\n <DialogDimmedTextBox>{this.services.translation.translate(\"LUGAS_ACTIVE_TEXT_2\")}</DialogDimmedTextBox>\n <ModalDialogActionsComponent\n primaryAction={{\n text: this.services.translation.translate(\"LUGAS_OK_BTN\"),\n onClick: this._onOkPressed,\n className: CyClass('cy-state-select-approve-button')\n }}\n />\n </div>\n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const LoginPopupBox = styled.div`\n @media ${({theme}) => theme.mediaQuery.lAndAbove } {\n min-width: 400px;\n }\n \n min-width: 300px;\n\n`;","import styled from \"styled-components\";\nimport {DialogTextBox} from \"../../modal-dialog/boxes/text/dialog-text.box\";\n\nexport const LoginPopupDialogText = styled(DialogTextBox)`\n margin: 0;\n`;","import React from \"react\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {DialogBoldTextBox, DialogTextBox} from \"../modal-dialog/boxes/text/dialog-text.box\";\nimport {ModalDialogActionsComponent} from \"../modal-dialog/modal-dialog-actions.component\";\nimport {LoginPopupBox} from \"./boxes/login-popup.box\";\nimport {LoginPopupDialogText} from \"./boxes/login-popup-dialog-text.box\";\nimport {ILoginPopupData} from \"../../services/login-popup/login-popup.service.interface\";\nimport {observer} from \"mobx-react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface ILoginPopupComponentProps extends ComponentServicesPick<'loginPopup'>{\n dialogHandler: IModalDialogHandler;\n onApprove: ()=> void\n}\n\nconst ComponentBody: React.FC<ILoginPopupComponentProps> = observer((props) => {\n const services = useServices();\n const _onOkPressed = () => {\n props.onApprove && props.onApprove();\n props.dialogHandler && props.dialogHandler.close();\n };\n\n const data: ILoginPopupData = props.loginPopup.getLoginPopupData();\n let totalStakesText: string;\n let netPositionText: string;\n\n // No available data\n if(!data || data.BankrollCurr === 'NA') {\n totalStakesText = services.translation.translate(\"LOGIN_POPUP_NO_AVAILABLE_DATA\");\n netPositionText = services.translation.translate(\"LOGIN_POPUP_NO_AVAILABLE_DATA\");\n } else {\n totalStakesText = services.currency.formatMoney(data.TotalStakes);\n netPositionText = services.currency.formatMoney(data.NetPosition);\n }\n\n return (\n <LoginPopupBox className={CyClass('cy-login-modal-content')}>\n <DialogBoldTextBox>{services.translation.translate(\"LOGIN_POPUP_TOP_TEXT\")}</DialogBoldTextBox>\n <LoginPopupDialogText>{services.translation.translate(\"LOGIN_POPUP_TOTAL_BETS_TEXT\")}</LoginPopupDialogText>\n <LoginPopupDialogText className={CyClass('cy-login-popup-total-stakes')}>{totalStakesText}</LoginPopupDialogText>\n <DialogTextBox>{services.translation.translate(\"LOGIN_POPUP_NET_POSITION_TEXT\")}</DialogTextBox>\n <LoginPopupDialogText className={CyClass('cy-login-popup-net-position')}>{netPositionText}</LoginPopupDialogText>\n\n <ModalDialogActionsComponent\n primaryAction={{\n text: services.translation.translate(\"OK\"),\n onClick: _onOkPressed,\n className: CyClass('cy-state-select-approve-button')\n }}\n />\n </LoginPopupBox>\n );\n \n})\n\nexport const LoginPopupComponent = withServices(ComponentBody, ['loginPopup']);","import styled from 'styled-components';\n\nexport const ToggleSwitchCheckboxBox = styled.input.attrs({type: 'checkbox'})`\n visibility: hidden;\n position: absolute;\n top: 0;\n left: 0;\n`;","import styled from 'styled-components';\n\nexport const ToggleSwitchSliderBox = styled.span<{checked: boolean}>`\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: ${props => (props.checked ? props.theme.colors.brandPrimary : '#ccc')};\n transition: background-color 0.4s;\n border-radius: 34px;\n\n &:before {\n position: absolute;\n content: '';\n height: 16px;\n width: 16px;\n left: 2px;\n bottom: 2px;\n background-color: white;\n transition: transform 0.4s;\n border-radius: 50%;\n transform: ${props => (props.checked ? 'translateX(20px)' : 'translateX(0)')};\n }\n`;","import styled from 'styled-components';\n\n\nexport const ToggleSwitchBox = styled.label`\n display: inline-block;\n position: relative;\n width: 40px;\n height: 20px;\n margin: 0px 10px;\n`;","import React from \"react\";\nimport {OrbitComponent} from \"../../../components/base-components/orbit-component/orbit-component\";\nimport {ToggleSwitchCheckboxBox} from \"./boxes/checkbox/toggle-switch-checkbox.box\";\nimport {ToggleSwitchSliderBox} from \"./boxes/slider/toggle-switch-slider.box\";\nimport {ToggleSwitchBox} from \"./boxes/toggle-switch.box\";\n\nexport interface ToggleSwitchComponentProps {\n onToggle: (checked: boolean) => void;\n checked: boolean;\n className?: string;\n}\nexport class ToggleSwitchComponent extends OrbitComponent<ToggleSwitchComponentProps> {\n\n render() {\n return (<ToggleSwitchBox className={this.props.className}>\n <ToggleSwitchCheckboxBox\n checked={this.props.checked}\n onChange={(e) => this.props.onToggle(e.target.checked)}/>\n <ToggleSwitchSliderBox checked={this.props.checked}/>\n </ToggleSwitchBox>)\n }\n}","import styled from \"styled-components\";\n\nexport const ModifyBiometricDialogBox = styled.div`\n display:flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n ${({theme}) => theme.font.presets.body};\n\n svg {\n margin: 1rem 0;\n }\n \n padding: 0 2rem;\n\n width: 35vw;\n \n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: auto;\n }\n`;\n","import styled from \"styled-components\";\n\nconst ModifyBiometricSectionDefaultBox = styled.div`\n margin-bottom: 1rem;\n \n font-size: 1.6rem;\n color: ${({theme}) => theme.colors.textLight};\n \n > :nth-child(2n+1) {\n font-size: 1.4rem;\n color: ${({theme}) => theme.colors.textMiddleDark};\n }\n`;\n\nexport const ModifyBiometricSectionBox = ModifyBiometricSectionDefaultBox;","import styled from \"styled-components\";\n\nexport const ModifyBiometricToogleSectionBox = styled.div`\n display:flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n text-align: center;\n background-color: ${props => props.theme.colors.backgroundDark};\n width: 80%;\n padding: 10px;\n margin: 10px 0px;\n border-radius: 10px;\n`;\n","import React, {useEffect, useState} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {ToggleSwitchComponent} from \"../../../basic-ui-components/form/toggle-switch/toggle-switch.component\";\nimport {ModifyBiometricDialogBox} from \"./boxes/modify-biometric-dialog.box\";\nimport {ModifyBiometricSectionBox} from \"./boxes/modify-biometric-info-section/modify-biometric-info-section.box\";\nimport {ModifyBiometricToogleSectionBox} from \"./boxes/modify-biometric-toggle-section/modify-biometric-toggle-section.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\n\nexport interface IModifyBiometricDialogOptions {\n dialogHandler: IModalDialogHandler;\n}\nexport const ModifyBiometricDialogComponent: React.FC<IModifyBiometricDialogOptions> = observer((props) => {\n const services = useServices();\n const [isFeatureOn, setIsFeatureOn] = useState(false);\n\n useEffect(() => {\n const _updateTouchEnable = async () => {\n try {\n const isEnabled = await services.hybrid.isDeviceTouchEnable();\n\n if (isEnabled) {\n const isFeatureOn = await services.hybrid.getTouchIDFeaturer().getTokenAndCheckEnable();\n setIsFeatureOn(isFeatureOn);\n }\n } catch (err) {\n services.logger.error('Failed to modify touch ID feature', err);\n }\n }\n _updateTouchEnable();\n }, [services.analytics, services.hybrid, services.logger]);\n\n const _buttonCallBack = async (selectToggle: boolean) => {\n let strToggle = 'Menu toggle on';\n try {\n if (selectToggle) {\n await services.hybrid.isDeviceTouchEnable();\n const isDeviceTouchEnabled = services.hybrid.getTouchIDFeaturer().getModel().isDeviceTouchEnable();\n if (isDeviceTouchEnabled) {\n await services.hybrid.getTouchIDFeaturer().getTokenFromSrv();\n setIsFeatureOn(selectToggle)\n }\n else {\n const isOpenSettingSupported = await services.hybrid.isOpenSettingSupported();\n if (isOpenSettingSupported) {\n await services.hybrid.openTouchIdSettings();\n }\n else {\n services.logger.warning('The OS settings cannot be opened.');\n props.dialogHandler.close();\n }\n }\n\n } else {\n setIsFeatureOn(false);\n services.hybrid.clearToken();\n strToggle = 'Menu toggle off';\n }\n } catch (err) {\n services.logger.error('Failed to modify touch ID feature', err);\n props.dialogHandler.close();\n }\n\n services.analytics.sendOrbitUserFlowEvent ('Client_TouchID', strToggle);\n }\n\n return (\n <ModifyBiometricDialogBox>\n <ModifyBiometricSectionBox>\n {services.translation.translate('TOUCH_ID_CAPTION')}\n </ModifyBiometricSectionBox>\n <ModifyBiometricToogleSectionBox>\n <div>{services.translation.translate('TOUCH_ID_AUTO_SCREEN')}</div>\n <ToggleSwitchComponent checked={isFeatureOn} onToggle={(e) => _buttonCallBack(e)} className={CyClass('cy-biometric-login-toggle')} />\n </ModifyBiometricToogleSectionBox>\n </ModifyBiometricDialogBox>\n );\n});","export enum GamblingSessionStatus {\n Inactive = 0,\n Active = 1,\n Expired = 2,\n Restricted = 3\n}\n\nexport interface IGamblingSessionUpdateData {\n readonly gamblingSessionId: string;\n readonly sessionStatus: GamblingSessionStatus;\n readonly sessionActivationTime?: number;\n readonly sessionTotalBets: number;\n readonly sessionTotalWins: number;\n readonly updateCounter?: number;\n readonly restrictionExpirationDate?: number;\n}\n\nexport interface IGamblingSessionUpdateEvent {\n id: string;\n data: IGamblingSessionUpdateData;\n}\n\n","import {\n DialogResult,\n IConfirmLugasCoolingOffLogoutDialogOptions,\n ISpecificDialogsService\n} from \"./specific-dialogs.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {DialogButtonClickHandleResultEnum, IModalDialogHandler} from \"../dialog/dialog.service.interface\";\nimport {LugasActivePopupComponent} from \"../../components/lugas/lugas-active-popup.component\";\nimport React from \"react\";\nimport {\n ACTION_TAKEN_NAMES,\n DISPLAY_MESSAGE_IDS,\n DISPLAY_MESSAGE_NAMES\n} from \"../../../common/const/casinofied-analytics-consts\";\nimport {InfoIcon} from \"../../themes/defaults/icons/info.icon\";\nimport {LoginPopupComponent} from \"../../components/login-popup/login-popup.component\";\nimport {ILoginPopupData} from \"../login-popup/login-popup.service.interface\";\nimport {\n ModifyBiometricDialogComponent\n} from \"../../components/biometric-dialog/modify-biometric-dialog/modify-biometric-dialog.component\";\nimport {\n GamblingSessionStatus\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/gambling-session_handler_interfaces\";\nimport {GamblingSessionLogoutDialog} from \"../../components/gambling-session/logout/gambling-session-logout-dialog.component\";\nimport {GamblingSessionData} from \"../gambling-session/gambling-session.service.interface\";\nimport {ExternalLinksZIndexes} from \"../external-links/external-links-z-indexes\";\n\nexport class SpecificDialogsService extends ServiceBase implements ISpecificDialogsService {\n enforceHybridAppModal(analyticsOnClick?: {\n category: string;\n action?: string;\n label?: string;\n value?: any;\n omitStructuredLogger?: boolean;\n }\n ) {\n let DownloadAppIcon = this.services.theme.currentTheme.icons.sideMenuDownloadApp;\n return this.services.dialog.showSimpleTextModal({\n title: this.services.translation.translate('ENFORCE_HYBRID_APP_TITLE'),\n text: this.services.translation.translate('ENFORCE_HYBRID_APP_TEXT'),\n iconSvg: DownloadAppIcon,\n buttons: [\n {\n text: this.services.translation.translate('ENFORCE_HYBRID_APP_CONTINUE_BUTTON'),\n buttonPreset: 'primary',\n onClick: async () => {\n if (analyticsOnClick) {\n const {category, action, label, value, omitStructuredLogger} = analyticsOnClick;\n this.services.analytics.sendAnalytics(category, action, label, value, omitStructuredLogger);\n }\n await (await this.services.externalLinks).openDownloadApp();\n return DialogButtonClickHandleResultEnum.KeepDialogOpen;\n }\n }\n ]\n });\n }\n\n showLugasCooldownPopup(): IModalDialogHandler {\n const businessCorrelationId = this.services.tools.getGuid();\n const reportConfirmClicked = () => {\n this.services.casinofiedAnalytics.messageActionTaken({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n actionType: ACTION_TAKEN_NAMES.CONFIRM_ACTION,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_COOLDOWN_MESSAGE_NAME\n })\n }\n const ret = this.services.dialog.showSimpleTextModal({\n buttons: [\n {\n buttonPreset: \"primary\",\n text: this.services.translation.translate('LUGAS_OK_BTN'),\n onClick: async () => {\n reportConfirmClicked();\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ],\n text: this.services.translation.translate('LUGAS_COOLDOWN_TEXT'),\n title: this.services.translation.translate('LUGAS_COOLDOWN_TITLE'),\n iconSvg: this.services.theme.currentTheme.icons.warningSignIcon,\n disableFullscreenMobile: true,\n showPopupAboveSecondWebViewHybrid: true,\n onClosedByXButton: reportConfirmClicked,\n })\n\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.lugasCooldown,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_COOLDOWN_MESSAGE_NAME\n })\n\n return ret;\n }\n\n showLugasActivePopup(): IModalDialogHandler {\n const businessCorrelationId = this.services.tools.getGuid();\n const reportConfirmClicked = () => {\n this.services.casinofiedAnalytics.messageActionTaken({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n actionType: ACTION_TAKEN_NAMES.CONFIRM_ACTION,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_ACTIVE_MESSAGE_NAME\n })\n }\n const ret = this.services.dialog.showModal(dialogHandler =>\n <LugasActivePopupComponent\n dialogHandler={dialogHandler}\n />,\n {\n title: this.services.translation.translate('LUGAS_ACTIVE_TITLE'),\n icon: this.services.theme.currentTheme.icons.warningSignIcon,\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n forceZOrder: ExternalLinksZIndexes.TouchID - 1,\n shouldBeClosedOnlyByUser: true,\n onClosed: reportConfirmClicked\n }\n );\n\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.lugasActiveOnAnotherOperator,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_ACTIVE_MESSAGE_NAME\n })\n\n return ret;\n }\n\n async showConfirmLugasCoolingOffLogout(options: IConfirmLugasCoolingOffLogoutDialogOptions): Promise<DialogResult> {\n const translation = this.services.translation;\n return new Promise<DialogResult>((resolve, reject) => {\n const businessCorrelationId = this.services.tools.getGuid();\n const reportClick = (action) => {\n this.services.casinofiedAnalytics.messageActionTaken({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n actionType: action,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_LOGOUT_MESSAGE_NAME\n })\n }\n this.services.dialog.showSimpleTextModal({\n title: translation.translate('LUGAS_COOLING_OFF_LOGOUT_TITLE_LOGOUT'),\n text: translation.translate('LUGAS_COOLING_OFF_LOGOUT_MESSAGE'),\n icon: (<InfoIcon />),\n hideCloseButton: false,\n buttons: [\n {\n text: this.services.translation.translate('CANCEL'),\n buttonPreset: 'primary',\n onClick: async () => {\n try {\n await options.onReject();\n reportClick(ACTION_TAKEN_NAMES.CANCEL_ACTION);\n resolve(DialogResult.Rejected);\n } catch (err) {\n reject(err);\n }\n\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n },\n {\n text: translation.translate('LOGOUT'),\n buttonPreset: 'info',\n onClick: async () => {\n try {\n await options.onAccept();\n reportClick(ACTION_TAKEN_NAMES.CONFIRM_ACTION);\n resolve(DialogResult.Accepted);\n } catch (err) {\n reject(err);\n }\n\n return DialogButtonClickHandleResultEnum.CloseDialogAndContinue;\n }\n }\n ]\n })\n\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.lugasLogout,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LUGAS_LOGOUT_MESSAGE_NAME\n })\n\n })\n }\n\n async showLoginPopup(confirmClicked: () => void): Promise<IModalDialogHandler> {\n const businessCorrelationId = this.services.tools.getGuid();\n const reportConfirmClicked = () => {\n confirmClicked && confirmClicked();\n\n this.services.casinofiedAnalytics.messageActionTaken({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n actionType: ACTION_TAKEN_NAMES.CONFIRM_ACTION,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LOGIN_MESSAGE\n })\n }\n\n const ret = this.services.dialog.showModal(dialogHandler =>\n <LoginPopupComponent\n onApprove={reportConfirmClicked}\n dialogHandler={dialogHandler}\n />,\n {\n title: this.services.translation.translate(\"LOGIN_POPUP_TITLE\"),\n icon: this.services.theme.currentTheme.icons.warningSignIcon,\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n forceZOrder: ExternalLinksZIndexes.TouchID - 1,\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: true\n }\n );\n\n const data: ILoginPopupData = (await this.services.loginPopup).getLoginPopupData();\n const amountBankroll = this.services.walletProxy.totalBankroll;\n this.services.casinofiedAnalytics.messageDisplay({\n businessCorrelationID: businessCorrelationId,\n correlationID: businessCorrelationId,\n displayMessageID: DISPLAY_MESSAGE_IDS.loginMessage,\n displayMessageName: DISPLAY_MESSAGE_NAMES.LOGIN_MESSAGE,\n extraData: {\n totalStakes: data.TotalStakes,\n netPosition: data.NetPosition,\n totalWins: data.TotalWins,\n totalLosses: data.TotalLosses,\n bankrollCurr: data.BankrollCurr,\n amountBankroll: amountBankroll\n }\n })\n\n return ret;\n }\n\n showModifyBiometricDialog(): IModalDialogHandler {\n return this.services.dialog.showModal(dialogHandler => <ModifyBiometricDialogComponent\n dialogHandler={dialogHandler}\n />, {\n title: this.services.translation.translate('TOUCH_ID_AUTO_SCREEN'),\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n shouldBeClosedOnlyByUser: true,\n mobileCenterHeader: true,\n onClosedByXButton: () => this.services.sdk.eventsTrigger.closeModifyBimetricDialog(),\n });\n }\n\n async showLogoutGamblingSessionSummary(): Promise<DialogResult> {\n if(!this.services.gamblingSession.isEnabled || !this.services.gamblingSession.isInitialized) {\n //If the gambling session is not enabled then no point to show the popup.\n //Also if the gambling session was not initialized (meaning we didn't get the initial firebase message from platform) also we don't show the popup\n return Promise.resolve(DialogResult.Accepted);\n }\n\n const gamblingSessionData = await this.services.gamblingSession.getGamblingSessionState();\n\n if(gamblingSessionData.sessionStatus !== GamblingSessionStatus.Active) {\n return DialogResult.Accepted;\n }\n\n return await this._showGamblingSessionSummaryPopup(gamblingSessionData);\n\n }\n\n private _showGamblingSessionSummaryPopup(data: GamblingSessionData): Promise<DialogResult> {\n // const currencyService = this.services.currency;\n const analytics = this.services.gamblingSession.analytics;\n\n analytics.reportLogoutMessageShown();\n\n return new Promise<DialogResult>(resolve => {\n\n this.services.dialog.showModal((dialogHandler) => (\n <GamblingSessionLogoutDialog\n dialogHandler={dialogHandler}\n sessionDuration={data.sessionDuration}\n totalBets={data.sessionTotalBets}\n totalWins={data.sessionTotalWins}\n onLogout={() => {\n analytics.reportLogoutMessageActionTaken('Logout');\n dialogHandler.close();\n resolve(DialogResult.Accepted);\n\n }}\n onCancel={() => {\n analytics.reportLogoutMessageActionTaken('Cancel');\n dialogHandler.close();\n resolve(DialogResult.Rejected);\n }}\n />\n ), {\n title: this.services.translation.translate(\"GAMBLING_SESSION_LOGOUT_DIALOG_TITLE\"),\n noDefaultContentPadding: true,\n isHighPriority: true,\n mobileCenterHeader: true,\n onClosedByXButton: () => {\n analytics.reportLogoutMessageActionTaken('Cancel');\n resolve(DialogResult.Rejected);\n }\n });\n\n })\n }\n}","import {ITippingHistoryRecordViewModel, ITippingHistoryViewModel, ITippingHistoryRecordAmountViewModel} from \"./tipping-history-view-model.interface\";\nimport { observable, action, makeObservable } from \"mobx\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {GamesMap} from \"../../games/games.service.interface\";\nimport {HistoryController_GetTippingHistoryRequest, HistoryController_GetTippingHistoryResponse} from \"../../api/api.service\";\nimport {CyClass} from \"../../../../common/cy-classes\";\n\nexport class TippingHistoryBaseModel implements ITippingHistoryViewModel {\n constructor(protected readonly services: IServiceFactoryExtended) {\n makeObservable(this);\n }\n\n get daysIntervals(): number[] {\n return [30, 60, 90];\n }\n\n private _numberOfHistoryDays: number = 30;\n\n @observable.ref\n isLoading: boolean = false;\n\n @action.bound\n private _setIsLoading(value: boolean): void {\n this.isLoading = value;\n }\n\n @observable.ref\n records: ITippingHistoryRecordViewModel[] = [];\n\n @action.bound\n private _setRecords(value: ITippingHistoryRecordViewModel[]): void {\n this.records = value;\n }\n\n reset() {\n this._setIsLoading(false);\n this._setRecords([]);\n }\n\n @action.bound\n setNumberOfHistoryDays(numberOfDays: number): void {\n if(numberOfDays === this._numberOfHistoryDays) {\n return;\n }\n this._numberOfHistoryDays = numberOfDays;\n this.reset();\n this.loadAllRecords();\n }\n\n private async _getGamesInfo(serverResponse: HistoryController_GetTippingHistoryResponse): Promise<GamesMap> {\n const result: GamesMap = {};\n const notInLayoutGames: number[] = [];\n\n serverResponse.TipHistory.forEach(record => {\n const gameType = record.GameTypeID;\n const gameInfo = this.services.games.gamesMap[gameType];\n if(gameInfo) {\n result[gameInfo.gameType] = gameInfo;\n } else {\n notInLayoutGames.push(gameType);\n }\n });\n\n if(notInLayoutGames.length > 0) {\n const gamesMap = await this.services.games.getGamesInfoForHistory(notInLayoutGames);\n Object.keys(gamesMap).forEach(gameType => {\n result[gameType] = gamesMap[gameType];\n });\n }\n\n return result;\n }\n\n private _getAmounts(recordData: HistoryController_GetTippingHistoryResponse['TipHistory'][0]): ITippingHistoryRecordAmountViewModel[] {\n return [\n {\n description: this.services.translation.translate('TIPPING_HISTORY_AMOUNT'),\n value: this.services.currency.formatMoney(recordData.TipAmount),\n cyClass: CyClass('cy-tipping-history-tip-value')\n },\n {\n description: this.services.translation.translate('CASH_BALANCE'),\n value: this.services.currency.formatMoney(recordData.AvailableBalanceAfterAction),\n cyClass: CyClass('cy-tipping-history-bankroll-value')\n }\n ];\n }\n\n\n async loadAllRecords(): Promise<void> {\n if(this.isLoading) {\n return;\n }\n\n this._setIsLoading(true);\n\n try {\n const request: HistoryController_GetTippingHistoryRequest = {\n fromLastDays: this._numberOfHistoryDays,\n };\n \n const serverResponse = await this.services.api.historyController.getTippingHistory(request);\n const gamesMap = await this._getGamesInfo(serverResponse);\n const newRecords: ITippingHistoryRecordViewModel[] = [];\n\n\n for(let recordData of serverResponse.TipHistory) {\n const gameType = recordData.GameTypeID;\n const gameInfo = gamesMap[gameType];\n\n if (gameInfo) {\n newRecords.push({\n tipId: recordData.TipID?.toString(),\n gameTypeId: recordData.GameTypeID,\n gameName: gameInfo.title,\n gameImage: gameInfo.getGameImage({squareIcon: this.services.theme.shouldUseSquareIcons}),\n imagePlaceHolderUrl: gameInfo.getGameImagePlaceHolderUrl(this.services.theme.shouldUseSquareIcons),\n tipDate: new Date(recordData.TipDateTime),\n amounts: this._getAmounts(recordData)\n });\n } else {\n this.services.logger.error(`Could not get game info for game type ${gameType} in tipping history!`);\n }\n }\n\n this._setRecords(newRecords);\n } finally {\n this._setIsLoading(false);\n }\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {ITippingHistoryService} from \"./tipping-history.service.interface\";\nimport {ITippingHistoryViewModel} from \"./models/tipping-history-view-model.interface\";\nimport {TippingHistoryBaseModel} from \"./models/tipping-history-view-model\";\n\nexport class TippingHistoryService extends ServiceBase implements ITippingHistoryService {\n getTippingHistory(): ITippingHistoryViewModel {\n return new TippingHistoryBaseModel(this.services);\n }\n}\n","import {\n ILoyaltyIndicatorOptions,\n ILoyaltyIndicatorViewModel,\n ILoyaltyInitInfo,\n ILoyaltyStyle\n} from \"./loyalty-indicator-view-model.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {CGPEventSubscription} from \"../../sdk/cgp-sdk.interface\";\nimport {MyAccountTab} from \"@sparkware/uc-sdk-core\";\n\nexport class LoyaltyIndicatorModel implements ILoyaltyIndicatorViewModel {\n constructor(private readonly services: IServiceFactoryExtended, private readonly options: ILoyaltyIndicatorOptions) {\n const LoyaltyIndicatorConstructor = this.services.window.getGlobalProperty('rlpfweb').LoyaltyIndication;\n\n const loyaltyInitInfo: ILoyaltyInitInfo = this._createLoyaltyInfo();\n\n this._loyaltyRef = new LoyaltyIndicatorConstructor(loyaltyInitInfo);\n\n this._loyaltyRef.addEventListener('onloyaltydetailsclick', this._clickHandler);\n\n this.subscription = this.services.sdk.events.onFirebaseGotNewToken(({token}) => this.options.firebaseToken !== token)\n\n }\n\n private _createLoyaltyInfo(): ILoyaltyInitInfo {\n return {\n UserInfo: this.options.platformToken,\n FirebaseToken: this.options.firebaseToken,\n CID: this.services.user.cid,\n LanguageCode: this.services.language.currentLanguage,\n ClientContext: {\n BrandId: this.services.sdk.getBrandID(),\n ClientPlatform: this.services.sdk.getSkin().getClientPlatform(),\n ClientVersion: this.services.sdk.getSkin().getVersion(),\n ProductPackage: this.services.sdk.getProductPackageId(),\n SubBrandId: this.services.sdk.getBrandID(),\n },\n Logger: this.services.window.console,\n Style: this._createLoyaltyStyle()\n }\n }\n\n private _createLoyaltyStyle(): ILoyaltyStyle {\n\n let loyaltyStyleParams: ILoyaltyStyle = {\n BackgroundColor:\"transparent\",\n ShowBoxShadow: false,\n ShowUnderline:false,\n FontSize: 16,\n ArrowSize: 9,\n //Font: this.services.theme.currentTheme.font.family.body,\n ProgressBarHeight: 4,\n ArrowColor: \"#7b7b7b\",\n LOLArrowContainerRigh:\"5px\", \n\n }\n if (this.services.mediaQuery.lAndBelow) {\n let mobileParams: ILoyaltyStyle = {\n ...loyaltyStyleParams,\n LOLArrowContainerLeft:\"10px\",\n }\n return mobileParams; \n }\n else {\n let pcloyaltyStyle: ILoyaltyStyle = {\n ...loyaltyStyleParams,\n FontSize: 12,\n ArrowSize: 8,\n LOLContentPaddingLeft: 0,\n LOLArrowContainerRigh: \"-3px\",\n TextColor: \"#717171\",\n ProgressBarBackgroundColor: this.services.theme.currentTheme.colors.backgroundMiddleDark,\n ProgressBarBorderRadius: 8,\n LOLArrowTop: \"-3px\",\n }\n return pcloyaltyStyle\n }\n }\n\n private _clickHandler = async () => {\n await (await this.services.externalLinks).openMyAccount({\n tabId: MyAccountTab.LCChallenges\n });\n }\n\n private _loyaltyRef;\n private subscription: CGPEventSubscription;\n\n dispose(): void {\n this.subscription?.off();\n //this._loyaltyRef?.removeEventListener('onloyaltydetailsclick', this._clickHandler) //TO DO Verify with debugger if removeEventListener exist\n this._loyaltyRef?.Terminate();\n }\n\n} ","import {ServiceBase} from \"../ServiceBase\";\nimport {ILoyaltyService} from \"./loyalty-indicator.service.interface\"\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {ILoyaltyIndicatorViewModel} from \"./models/loyalty-indicator-view-model.interface\";\nimport {LoyaltyIndicatorModel} from \"./models/loyalty-indicator.model\";\nimport {Nullable} from \"../../../common/types/nullable-types\";\nimport {Check} from \"@sparkware/app-utils\";\n\nexport class LoyaltyService extends ServiceBase implements ILoyaltyService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (!isAuthorized) {\n if (this._loadLoyaltyPromise) {\n this._loadLoyaltyPromise.then(model => {\n model.dispose();\n });\n this._loadLoyaltyPromise = null;\n }\n }\n }\n )\n }\n\n private _loadLoyaltyPromise: Nullable<Promise<ILoyaltyIndicatorViewModel>> = null;\n async init(): Promise<void> {\n if (this._loadLoyaltyPromise) {\n return;\n }\n\n this._loadLoyaltyPromise = this._loadLoyalty();\n \n // clear cache promise\n this._loadLoyaltyPromise.catch((err) => {\n this._loadLoyaltyPromise = null;\n throw err;\n });\n\n }\n\n private async _loadLoyalty() {\n await this._loadLoyaltyScript();\n const fireBaseToken = await this._getFirebaseToken();\n const platformToken = await this.services.user.getPlatformToken();\n\n return new LoyaltyIndicatorModel(this.services, {\n platformToken: platformToken.token,\n firebaseToken: fireBaseToken,\n });\n }\n\n private _loadLoyaltyScriptPromise: Nullable<Promise<void>> = null;\n private _loadLoyaltyScript(): Promise<void> {\n if (!this._loadLoyaltyScriptPromise) {\n if(Check.isEmpty(this.services.configuration.servicesConfigs.Loyalty.scriptLink)){\n return Promise.resolve();\n }\n this._loadLoyaltyScriptPromise = this.services.scriptLoader.loadScript({\n url: this.services.configuration.servicesConfigs.Loyalty.scriptLink\n });\n }\n\n return this._loadLoyaltyScriptPromise;\n }\n\n private async _getFirebaseToken(): Promise<string> {\n const fireBaseToken = this.services.sdk.getFirebaseToken();\n if (fireBaseToken) {\n return Promise.resolve(fireBaseToken);\n }\n\n return new Promise<string>((resolve, reject) => {\n const timeout = setTimeout(() => {\n subscription.off();\n reject('onFirebaseGotNewToken timeout');\n }, 10000);\n\n const subscription = this.services.sdk.events.onFirebaseGotNewToken(({token}) => {\n subscription.off();\n clearTimeout(timeout);\n resolve(token);\n })\n })\n }\n}","import styled from \"styled-components\";\n\nexport const StatePopupWrapperBox = styled.div`\n max-width: 560px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-content: center;\n align-items: center;\n\n width: 25vw;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n width: 82vw;\n }\n @media ${({theme}) => theme.mediaQuery.lAndBelow + \" and \" + theme.mediaQuery.landscape} {\n width: 56vw;\n }\n`;\n","import React from \"react\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {StatePopupWrapperBox} from \"./boxes/state-popup-wrapper.box\";\nimport {IModalDialogHandler} from \"../../services/dialog/dialog.service.interface\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport { ModalDialogActionsComponent } from \"../modal-dialog/modal-dialog-actions.component\";\nimport { DialogTextBox } from \"../modal-dialog/boxes/text/dialog-text.box\";\n\nexport interface IStatePopupComponentProps {\n onStateSelect: (stateID?: string) => any;\n onStateNotInListClick?: () => any;\n dialogHandler: IModalDialogHandler;\n}\n\nexport class StatePopupComponent extends OrbitComponent<IStatePopupComponentProps> {\n\n private _onStateConfirmation = () => {\n this.props.onStateSelect();\n this._closeDialogBox();\n };\n\n private _onStateNotInListClick = () => {\n this.props.onStateNotInListClick();\n this._closeDialogBox();\n };\n\n private _closeDialogBox = () => {\n this.props.dialogHandler && this.props.dialogHandler.close();\n };\n\n private _getStateName = (): string => {\n return this.services.configuration.data.statePopup.stateName || '';\n }\n\n render() {\n\n return (\n <StatePopupWrapperBox>\n <DialogTextBox>{this.services.translation.translate(\"STATE_POPUP_HEADER\", {THE_STATE: this._getStateName()})}</DialogTextBox>\n <ModalDialogActionsComponent primaryAction={{\n text: this.services.translation.translate(\"STATE_POPUP_CONFIRM\"),\n onClick: this._onStateConfirmation,\n className: CyClass('cy-state-select-approve-button')\n }} linkAction={{\n onClick: this._onStateNotInListClick,\n text: this.services.translation.translate(\"STATE_POPUP_OUTSIDE_TEXT\", {THE_STATE: this._getStateName()})\n }} />\n </StatePopupWrapperBox>\n );\n }\n}\n","import styled from \"styled-components\";\n\nexport const StatePopupErrorMessageBox = styled.div`\n color: ${({theme}) => theme.colors.danger};\n margin: 0.5rem auto 0;\n font-size: 1.6rem;\n font-weight: 700;\n`;\n","import styled from \"styled-components\";\n\nexport const StatePopupSelectWrapperBox = styled.div`\n width: 100%;\n max-width: 289px;\n margin: 0.5rem auto 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n","import React from \"react\";\nimport {StatePopupWrapperBox} from \"./boxes/state-popup-wrapper.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport { ModalDialogActionsComponent } from \"../modal-dialog/modal-dialog-actions.component\";\nimport { DialogTextBox } from \"../modal-dialog/boxes/text/dialog-text.box\";\nimport {OrbitComponentWithState} from \"../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {IStatePopupComponentProps} from \"./state-popup.component\";\nimport {StatePopupErrorMessageBox} from \"./boxes/state-popup-error-message.box\";\nimport {StatePopupSelectWrapperBox} from \"./boxes/state-popup-select-wrapper.box\";\nimport {Select} from \"../../basic-ui-components/form/select.component\";\n\ninterface IStatePopupWithDropdownComponentState {\n currentStateID: string;\n shouldShowError: boolean;\n}\n\nexport class StatePopupWithDropdownComponent extends OrbitComponentWithState<IStatePopupComponentProps, IStatePopupWithDropdownComponentState> {\n\n constructor(props) {\n super(props);\n this.state = {\n currentStateID: this._defaultOption,\n shouldShowError: false\n };\n }\n\n componentDidMount() {\n super.componentDidMount();\n this.setState({\n currentStateID: this.services.stateOfResidenceIdentifier.getUserSelectedState() || this._defaultOption\n });\n }\n\n private readonly _defaultOption = \"DEFAULT_OPTION\";\n\n private _onStateConfirmation = () => {\n if (this.state.currentStateID === this._defaultOption) {\n this.setState({\n shouldShowError: true\n });\n return;\n }\n\n this.props.onStateSelect(this.state.currentStateID);\n this._closeDialogBox();\n };\n\n private _onStateNotInListClick = () => {\n this.props.onStateNotInListClick();\n };\n\n private _closeDialogBox = () => {\n this.props.dialogHandler && this.props.dialogHandler.close();\n };\n\n private _updateSelection = (selection: string): void => {\n return this.setState({\n currentStateID: selection,\n shouldShowError: selection === this._defaultOption\n });\n };\n\n private _renderStateSelector() {\n if (!this.services.stateOfResidenceIdentifier.isOneSiteEnabled()) {\n return null;\n }\n\n return (\n <Select onChange={e => this._updateSelection(e.target.value)}\n value={this.state.currentStateID}\n width=\"100%\"\n className={\"cy-state-select-dropdown\"}>\n {this._renderOptions()}\n </Select>\n );\n }\n\n private _renderOptions = (): JSX.Element[] => {\n const defaultOption = <option key={this._defaultOption} value={this._defaultOption} hidden={true}>\n {this.services.translation.translate(\"STATE_POPUP_DEFAULT_OPTION\")}\n </option>;\n\n const stateOptions = this.services.stateOfResidenceIdentifier.getSupportedStates().map(sr =>\n <option key={sr.ID} value={sr.ID}>\n {sr.Name}\n </option>\n );\n\n return [defaultOption, ...stateOptions];\n }\n\n private _renderErrorMessage = () => {\n if (!this.state.shouldShowError) {\n return null;\n }\n\n return <StatePopupErrorMessageBox>\n {this.services.translation.translate(\"STATE_POPUP_NO_STATE_SELECTED\")}\n </StatePopupErrorMessageBox>;\n }\n\n render() {\n\n return (\n <StatePopupWrapperBox>\n <DialogTextBox>{this.services.translation.translate(\"CHOOSE_CONFIRM_STATE\")}</DialogTextBox>\n <StatePopupSelectWrapperBox>\n {this._renderStateSelector()}\n {this._renderErrorMessage()}\n </StatePopupSelectWrapperBox>\n <ModalDialogActionsComponent primaryAction={{\n text: this.services.translation.translate(\"STATE_POPUP_CONFIRM\"),\n onClick: this._onStateConfirmation,\n className: CyClass('cy-state-select-approve-button')\n }} linkAction={{\n onClick: this._onStateNotInListClick,\n text: this.services.translation.translate(\"STATE_POPUP_OTHER_STATE\"),\n className: CyClass('cy-state-select-other-button')\n }} />\n </StatePopupWrapperBox>\n );\n }\n}\n//text: this.services.translation.translate(\"STATE_POPUP_OUTSIDE_TEXT\", {THE_STATE: stateName})","import {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {IStatePopupComponentProps, StatePopupComponent} from \"../../components/state-popup/state-popup.component\";\nimport React from \"react\";\nimport {StatePopupWithDropdownComponent} from \"../../components/state-popup/state-popup-with-dropdown.component\";\nimport {CGP_STATE_POPUP_LOCAL_STORAGE_KEY} from \"./state-popup-strategies-consts\";\n\nexport interface StatePopupStrategy {\n shouldDisplayStatePopup(forceDisplay?: boolean): boolean;\n onStateConfirmation(stateID?: string): void;\n onOtherStateClick(): void;\n getComponent(): React.ComponentType<IStatePopupComponentProps>;\n getPopupTitle(): string;\n}\n\nexport class RegularStatePopupStrategy implements StatePopupStrategy {\n private _popupDisplayedLocalStorageKey = CGP_STATE_POPUP_LOCAL_STORAGE_KEY;\n\n constructor(private services: IServiceFactoryExtended) {\n }\n\n onOtherStateClick(): void {\n this.services.analytics.sendOrbitUserFlowEvent('Client_Message', 'Confirm_Location_Click', 'OUTSIDE_ONTARIO_LINK');\n this.services.location.push(this.services.sdk.getWrongLocationDetectionPath());\n }\n\n onStateConfirmation(stateID?: string): void {\n this.services.analytics.sendOrbitUserFlowEvent('Client_Message', 'Confirm_Location_Click', 'APPROVE');\n this.services.localStorage.setItem(this._popupDisplayedLocalStorageKey, true);\n }\n\n shouldDisplayStatePopup(forceDisplay?: boolean): boolean {\n return forceDisplay || Boolean(!this.services.localStorage.getItem(this._popupDisplayedLocalStorageKey));\n }\n\n getComponent(): React.ComponentType<IStatePopupComponentProps> {\n return StatePopupComponent;\n }\n\n getPopupTitle(): string {\n return this.services.translation.translate(\"STATE_POPUP_TITLE\");\n }\n}\n\nexport class OneSiteStatePopupStrategy implements StatePopupStrategy {\n constructor(private services: IServiceFactoryExtended, private _shouldShowLoginFormSessionStorageKey: string) {\n }\n\n onOtherStateClick(): void {\n this.services.analytics.sendOrbitUserFlowEvent('Client_Message', 'Confirm_Location_Click', 'OTHER_STATE_CLICK');\n this.services.location.redirect(this.services.sdk.getWrongLocationDetectionPath());\n }\n\n onStateConfirmation(stateID?: string): void {\n //Product will probably want different reporting for one site one app flow\n this.services.analytics.sendOrbitUserFlowEvent('Client_Message', 'Confirm_Location_Click', 'APPROVE');\n if (stateID) {\n this.services.stateOfResidenceIdentifier.saveStateInCookie(stateID);\n this.services.sessionStorage.setItem(this._shouldShowLoginFormSessionStorageKey, true);\n this.services.window.reload();\n }\n }\n\n shouldDisplayStatePopup(forceDisplay?: boolean): boolean {\n return forceDisplay || !Boolean(this.services.stateOfResidenceIdentifier.getStateFromCookie());\n }\n\n getComponent(): React.ComponentType<IStatePopupComponentProps> {\n return StatePopupWithDropdownComponent;\n }\n\n getPopupTitle(): string {\n //Product will probably want a different title for the one site flow popup.\n return this.services.translation.translate(\"STATE_POPUP_TITLE\");\n }\n}","export const CGP_STATE_POPUP_LOCAL_STORAGE_KEY = 'cgp_state-popup';","import {ServiceBase} from \"../ServiceBase\";\nimport {IStateOfResidenceIdentifier} from \"./state-of-residence-identifier.interface\";\nimport React from \"react\";\nimport IStateOfResidence from \"../../../common/interfaces/state-of-residence.interface\";\nimport {\n IStatePopupDisplayParams\n} from \"../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/state-popup-display-params\";\nimport {OneSiteStatePopupStrategy, RegularStatePopupStrategy, StatePopupStrategy} from \"./state-popup-strategies\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {STATE_OF_RESIDENCE_COOKIE_KEY} from \"../../../common/const/state-of-residence-cookie_const\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nexport class StateOfResidenceIdentifierService extends ServiceBase implements IStateOfResidenceIdentifier {\n\n private _statePopupStrategy: StatePopupStrategy = null;\n private _shouldShowLoginFormSessionStorageKey: string = \"shouldShowLoginFormOnInit\";\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n if (this.services.location.currentUri.queryParams.hasParam(this._cookieKey)){\n this._onReceivedUserStateQueryParam(this.services.location.currentUri.queryParams.getParamValue(this._cookieKey));\n }\n\n /* We need this because, otherwise, we have a circular dependency between services:\n This service wants to open the login form, but then the login form checks whether it should\n display the state popup beforehand, that check is also done here in this service.\n */\n setTimeout(this._displayLoginForm, 0);\n }\n\n private _onReceivedUserStateQueryParam = (userSelectedState: string) => {\n this.saveStateInCookie(userSelectedState);\n const urlWithoutUserState = this.services.location.currentUri.removeSearchParam(this._cookieKey).toString();\n this.services.location.replace(urlWithoutUserState).catch((err) => {\n this.services.logger.error('Remove userSelectedState query param from URL failed!', err);\n });\n }\n\n private _displayLoginForm = async () => {\n if (this.services.sessionStorage.getItem(this._shouldShowLoginFormSessionStorageKey)) {\n this.services.sessionStorage.removeItem(this._shouldShowLoginFormSessionStorageKey);\n await this.services.user.waitForAutoLogin();\n if (!this.services.user.isAuthorized) {\n await this.services.user.openLogin();\n }\n }\n }\n\n get statePopupStrategy(): StatePopupStrategy {\n if (!Check.isNullOrUndefined(this._statePopupStrategy)) {\n return this._statePopupStrategy;\n }\n\n if (this.isOneSiteEnabled()){\n this._statePopupStrategy = new OneSiteStatePopupStrategy(this.services, this._shouldShowLoginFormSessionStorageKey);\n } else {\n this._statePopupStrategy = new RegularStatePopupStrategy(this.services);\n }\n\n return this._statePopupStrategy;\n }\n\n async displayStateSelectorPopup(props: IStatePopupDisplayParams = {}): Promise<void> {\n\n (await this.services.sideMenu).closeMobileMenu();\n\n return new Promise((resolve, reject) => {\n if (!this.statePopupStrategy.shouldDisplayStatePopup(props.forceDisplay)) {\n return resolve();\n }\n\n const StatePopup = this.statePopupStrategy.getComponent();\n\n this.services.dialog.showModal(dialogHandler =>\n <StatePopup\n dialogHandler={dialogHandler}\n onStateSelect={(stateID)=> {\n this.statePopupStrategy.onStateConfirmation(stateID);\n return resolve();\n }}\n onStateNotInListClick={()=> {\n this.statePopupStrategy.onOtherStateClick();\n reject();\n }}\n />, {\n title: this.statePopupStrategy.getPopupTitle(),\n icon: this.services.theme.currentTheme.icons.locationIcon,\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n mobileCenterHeader: true,\n isHighPriority: true,\n onClosed: () => {\n this.services.sdk.eventsTrigger.locationPopupClosed();\n return reject();\n },\n shouldBeClosedOnlyByUser: true\n });\n });\n }\n\n private _cookieKey = STATE_OF_RESIDENCE_COOKIE_KEY;\n\n saveStateInCookie(stateID: string): void {\n this.removeStateCookie();\n this.services.cookies.createCookie(this._cookieKey, stateID);\n }\n\n removeStateCookie(): void {\n if (this.services.cookies.getCookie(this._cookieKey)) {\n this.services.cookies.createCookie(this._cookieKey, '');\n }\n }\n\n //The active state can come either from the cookie(chosen by user in the dropdown)\n //Or from the server, in case site infra detects it by IP.\n getUserSelectedState(): string {\n return this.getStateFromCookie() || this.services.configuration.userSelectedState || \"\";\n }\n\n getStateFromCookie(): string {\n return this.services.cookies.getCookie(this._cookieKey) || \"\";\n }\n\n getSupportedStates(): IStateOfResidence[] {\n return this.services.sdk.getSupportedStates();\n }\n\n isOneSiteEnabled(): boolean {\n return this.services.configuration.data?.oneSite?.isEnabled && this.getSupportedStates().length > 0;\n }\n\n shouldDisplayStateSelectorButton(): boolean {\n return this.isOneSiteEnabled() && !this.services.user.isAuthorized;\n }\n\n appendUserSelectedStateToLink(sourceLink: string): string {\n const userSelectedState = this.getStateFromCookie();\n if (this.isOneSiteEnabled() && !Check.isEmpty(userSelectedState)){\n const url = new URL(sourceLink);\n url.searchParams.append(STATE_OF_RESIDENCE_COOKIE_KEY, userSelectedState);\n return url.href;\n }\n return sourceLink;\n }\n}\n\n","import {IOnboardingStep} from \"../onboarding-tour.service.interface\";\n\nexport class OnboardingWelcomeStep implements IOnboardingStep {\n mainText = \"ONBOARDING_WELCOME_STEP_MAIN_TEXT\";\n secondaryText = \"ONBOARDING_WELCOME_STEP_SECONDARY_TEXT\";\n get targets() {\n return [];\n }\n}\n","export interface PointDefinition {\n readonly x: number;\n readonly y: number;\n}\n\nexport interface SegmentDefinition {\n readonly A: PointDefinition;\n readonly B: PointDefinition;\n}\n\nexport class Segment implements SegmentDefinition {\n constructor(public readonly A: PointDefinition, public readonly B: PointDefinition) {}\n\n private _quadLength: number;\n get quadLength() {\n if (!this._quadLength) {\n this._quadLength = GeometryHelper.quadraticDistanceBetweenPoints(this.A, this.B);\n }\n return this._quadLength;\n }\n\n private _length: number;\n get length() {\n if (!this._length) {\n this._length = Math.sqrt(this._quadLength);\n }\n return this._length;\n }\n\n private _slope: number;\n get slope() {\n if (!this._slope) {\n this._slope = GeometryHelper.slope(this.A, this.B);\n }\n return this._slope;\n }\n\n private _slopePerpendicular: number;\n get slopePerpendicular() {\n if (!this._slopePerpendicular) {\n this._slopePerpendicular = GeometryHelper.slopePerpendicular(this.A, this.B);\n }\n return this._slopePerpendicular;\n }\n\n private _centerPoint: PointDefinition;\n get centerPoint(): PointDefinition {\n if (!this._centerPoint) {\n this._centerPoint = GeometryHelper.getPointInSegment(this.A, this.B, 0.5);\n // this._centerPoint = {\n // x: (this.A.x + this.B.x)/2,\n // y: (this.A.y + this.B.y)/2\n // };\n }\n return this._centerPoint;\n }\n}\n\nexport interface CircleDefinition {\n readonly center: PointDefinition;\n readonly radius: number;\n}\nexport class Circle implements CircleDefinition {\n constructor(public readonly center: PointDefinition, public readonly radius: number) {}\n translate(dx: number, dy: number) {\n let centerPoint = {\n x: this.center.x + dx,\n y: this.center.y + dy\n };\n return new Circle(centerPoint, this.radius);\n }\n scale(ratio: number, freeTerm: number = 0) {\n let newRadius: number = this.radius * ratio + freeTerm;\n return new Circle(this.center, Math.max(0, newRadius));\n }\n scaleWith(amount: number) {\n return this.scale(1, amount);\n }\n scaleBy(amount: number) {\n return this.scale(amount);\n }\n}\n\nexport class GeometryHelper {\n static slope(A: PointDefinition, B: PointDefinition) {\n if (A.x === B.x) {\n // the line is vertical, the slope is infinite\n return Infinity;\n }\n if (A.y === B.y) {\n // the line is horizontal, the slope is 0.\n // I'm returning 0 because the formula might return -0 and while this may be valid JS is not valid math\n return 0;\n }\n return (B.y - A.y)/(B.x - A.x);\n }\n static slopePerpendicular(A: PointDefinition, B: PointDefinition) {\n if (A.y === B.y) {\n // the line is horizontal, the slope is 0, so the perpendicular line will have the slope Infinity\n return Infinity;\n }\n if (A.x === B.x) {\n // the line is vertical, the slope is infinite, so the perpendicular line will have the slope 0\n // I'm returning 0 because the formula might return -0 and while this may be valid JS is not valid math\n return 0;\n }\n return (A.x - B.x)/(B.y - A.y);\n }\n\n /**\n * normalize == true means that we force the radians to be between [0, 2*Math.PI)\n * If you don't want normalization call the function with the second parameter \"false\"\n *\n * Observations:\n * For normalization between [0, 2*Math.PI) use Math.floor at the factor computation\n * For normalization between [-Math.PI, Math.PI) use Math.round at the factor computation\n */\n static degreesToRadians(degrees: number, normalize: boolean = true) {\n if (normalize) {\n let factor = Math.floor(degrees / 360);\n degrees = degrees - factor * 360;\n }\n return degrees * (Math.PI / 180);\n }\n\n /**\n * normalize == true means that we force the radians to be between [0, 360)\n * If you don't want normalization call the function with the second parameter \"false\"\n *\n * Observation.\n * For normalization between [0, 360) use Math.floor at the factor computation\n * For normalization between [-180, 180) use Math.round at the factor computation\n */\n static radiansToDegrees(radians: number, normalize: boolean = true) {\n let degrees = radians * (180 / Math.PI);\n if (!normalize) {\n return degrees;\n }\n let factor = Math.floor(degrees / 360);\n return degrees - factor * 360;\n }\n\n /**\n *\n */\n static slopeToAngle(slope: number, resultInDegrees: boolean = true) {\n let radians = Math.atan(slope);\n return resultInDegrees ? GeometryHelper.radiansToDegrees(radians) : radians;\n }\n\n static quadraticDistanceBetweenPoints(A: PointDefinition, B: PointDefinition) {\n return Math.pow(A.x - B.x, 2) + Math.pow(A.y - B.y, 2);\n }\n\n static distanceBetweenPoints(A: PointDefinition, B: PointDefinition) {\n return Math.sqrt(GeometryHelper.quadraticDistanceBetweenPoints(A, B));\n }\n\n /**\n * In a segment OA of lenght d, get the point D that is between O and A, at a distance of d1 from O and d - d1 from A\n */\n static getIntermediateCoordinate(x1: number, x2: number, ratio: number): number {\n return x1 + ((x2 - x1)*ratio);\n }\n /**\n * In a segment OA of lenght d, get the point D that is between O and A, at a distance of d1 from O and d - d1 from A\n */\n static getPointInSegment(O: PointDefinition, A: PointDefinition, ratio: number): PointDefinition {\n let x = GeometryHelper.getIntermediateCoordinate(O.x, A.x, ratio);\n let y = GeometryHelper.getIntermediateCoordinate(O.y, A.y, ratio);\n return {x, y};\n }\n\n static getCenterOfDOMRect(r: DOMRect): PointDefinition {\n // same as getIntermediateCoordinate or getPointInSegment with ratio 0.5 (1/2) but it does 2 mathematic operations instead of 4\n // the equivalent is getIntermediateCoordinate(r.left, r.left + r.width, 0.5)\n // probably an unnecessary optimization but anyway\n return {\n x: r.left + r.width/2,\n y: r.top + r.height/2\n };\n }\n\n /**\n * In romanian is \"cercul circumscris dreptunghiului\" I hope google translate did a good job here\n */\n static getCircleCircumscribedToTheRectangle(r: DOMRect): Circle {\n let center = GeometryHelper.getCenterOfDOMRect(r);\n return new Circle(center, GeometryHelper.distanceBetweenPoints(center, {x: r.left, y: r.top}));\n }\n}\n\nif (!window[\"GeometryHelper\"]) {\n window[\"GeometryHelper\"] = GeometryHelper;\n}\n","import {CySelector} from \"../../../../common/cy-classes\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {GeometryHelper} from \"../geometry.helper\";\nimport {IOnboardingStep} from \"../onboarding-tour.service.interface\";\n\nexport class OnboardingMainMenuStep implements IOnboardingStep {\n constructor(private _services: IServiceFactoryExtended) {}\n mainText = \"ONBOARDING_MENU_STEP_MAIN_TEXT\";\n secondaryText = \"ONBOARDING_MENU_STEP_SECONDARY_TEXT\";\n get targets() {\n if (this._services.mediaQuery.lAndBelow) {\n let targetElement = document.querySelector(CySelector(\"cy-burger-button\"));\n if (!targetElement) {\n return [];\n }\n let rectangle = targetElement.getBoundingClientRect();\n let _target = GeometryHelper.getCircleCircumscribedToTheRectangle(rectangle);\n _target = _target.scaleWith(20);\n return [_target];\n } else {\n let allMenuItems = document.querySelectorAll(CySelector(\"cy-menu-item\"));\n if (allMenuItems.length === 0) {\n return [];\n }\n if (allMenuItems.length <= 2) {\n return [GeometryHelper.getCircleCircumscribedToTheRectangle(allMenuItems[allMenuItems.length - 1].getBoundingClientRect())];\n }\n let secondMenuItem = allMenuItems[1];\n let lastMenuItem = allMenuItems[allMenuItems.length - 1];\n if (this._services.mediaQuery.xlAndBelow || this._services.mediaQuery.lowHeight) {\n if (allMenuItems[2]) {\n secondMenuItem = allMenuItems[2];\n }\n }\n return [\n GeometryHelper.getCircleCircumscribedToTheRectangle(lastMenuItem.getBoundingClientRect()),\n GeometryHelper.getCircleCircumscribedToTheRectangle(secondMenuItem.getBoundingClientRect())\n ]\n }\n }\n}","import {CySelector} from \"../../../../common/cy-classes\";\nimport {remToPx} from \"../../../../utils/rem-to-px\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {GeometryHelper} from \"../geometry.helper\";\nimport {IOnboardingStep} from \"../onboarding-tour.service.interface\";\n\nexport class OnboardingUserMenuStep implements IOnboardingStep {\n constructor(private _services: IServiceFactoryExtended) {}\n mainText = \"ONBOARDING_USER_AREA_MAIN_TEXT\";\n secondaryText = \"ONBOARDING_USER_AREA_SECONDARY_TEXT\";\n get targets() {\n if (!this._services.user.isAuthorized) {\n return [];\n }\n let targetSelector = this._services.mediaQuery.lAndBelow ? CySelector(\"cy-welcome-component\") : CySelector(\"cy-profile-picture\");\n let targetElement = document.querySelector(targetSelector);\n if (!targetElement) {\n return [];\n }\n let rectangle = targetElement.getBoundingClientRect();\n let _target = GeometryHelper.getCircleCircumscribedToTheRectangle(rectangle);\n if (this._services.mediaQuery.xlAndAbove && this._services.user.isAuthorized) {\n let translateYAmount = remToPx(6); // translate 6rem, but I need the value in px\n _target = _target.scale(1.5).translate(0, translateYAmount);\n }\n return [_target];\n }\n}\n","export function remToPx(rem: number = 1) {\n return rem * parseFloat(getComputedStyle(document.documentElement).fontSize);\n}\n","export enum FeatureId {\n \"OnboardingTour\"= 1\n}","import {observable, action, makeObservable} from \"mobx\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport { DomEventSubscription } from '../../../utils/event-listener-registration';\nimport {IOnboardingStep, IOnboardingTourService} from \"./onboarding-tour.service.interface\";\nimport {OnboardingWelcomeStep} from \"./steps/welcome.step\";\nimport {OnboardingMainMenuStep} from \"./steps/main-menu.step\";\nimport {OnboardingUserMenuStep} from \"./steps/user-menu.step\";\nimport {FeatureId} from \"../features-toggle-management/FeatureId\";\n\nexport class OnboardingTourService extends ServiceBase implements IOnboardingTourService {\n private _onScrollSubscription: DomEventSubscription | null = null;\n\n readonly steps: IOnboardingStep[] = [];\n @observable.ref\n isOpened = false;\n @observable.ref\n stepIndex = 0;\n @observable.ref\n isThereRunningApps = true;\n\n private get isEnabledAccordingToRegistrationTime() {\n if(this.services.configuration.data.onboardingTour?.enabledAccordingToRegistrationTime) {\n return this.services.user.daysSinceRegistration < 30;\n }\n return true;\n }\n\n\n private get enabled(): boolean {\n return this.services.abTestingFeatureDataProvider.onboardingTour.isEnabled\n && this.isEnabledAccordingToRegistrationTime\n && this.steps.length > 0;\n }\n\n\n\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n\n try {\n let configSteps = this.services.configuration.data.onboardingTour?.stepIds || [];\n this.steps = configSteps.map((configStepKey) => this.getStepInstance(configStepKey));\n } catch (e) {\n this.services.logger.error('Failed to configure onboarding tour steps', e);\n }\n\n this.services.appLauncher.then(appLauncher => {\n this.reaction(() => appLauncher.isThereRunningApps, (isThereRunningApps) => {\n this.isThereRunningApps = isThereRunningApps;\n }, {\n fireImmediately: true\n });\n })\n\n\n\n this.reaction(\n () => this.services.user.isAuthorized,\n (authorized) => this._onOauthChange(authorized),\n {\n fireImmediately: true\n }\n );\n\n }\n private _onOauthChange = async (authorized: boolean) => {\n this._removeScrollSubscription();\n\n if(!authorized || !this.enabled) {\n return;\n }\n\n const shouldShowFeature = await this.services.featuresToggleManagement.shouldShowFeature(FeatureId.OnboardingTour);\n if (shouldShowFeature) {\n // set a scroll event listener because the onboarding should be shown as soon as the user start's scrolling\n this._onScrollSubscription = this.services.window.subscribeTo.scroll(this._onWindowScroll);\n }\n };\n\n private _removeScrollSubscription = () => {\n // remove scroll event listener\n if (this._onScrollSubscription) {\n this._onScrollSubscription.dispose();\n this._onScrollSubscription = null;\n }\n };\n private _onWindowScroll = () => {\n // Check if this.services.routing.currentRoute?.data?.arenaType because we show onboarding only for home page and arenas\n if (this.services.routing.currentRoute?.data?.arenaType && this.services.window.scrollY > 200) {\n this.open();\n }\n };\n\n @action\n open() {\n if (!this.enabled) {\n return;\n }\n // Set that onboarding was shown\n this.services.featuresToggleManagement.updateFeatureCounter(FeatureId.OnboardingTour);\n\n // Remove scroll subscription\n this._removeScrollSubscription();\n // reset step index is for testing purposes\n this.stepIndex = 0;\n this.isOpened = true;\n }\n @action\n close() {\n this.isOpened = false;\n }\n\n @action\n nextStep() {\n this.stepIndex = Math.min(this.stepIndex + 1, this.steps.length - 1);\n return this.stepIndex;\n }\n\n private getStepInstance(configStepKey: string) {\n switch (configStepKey) {\n case \"welcomeStep\":\n return new OnboardingWelcomeStep();\n case \"mainMenuStep\":\n return new OnboardingMainMenuStep(this.services);\n case \"userMenuStep\":\n return new OnboardingUserMenuStep(this.services);\n default:\n throw new Error(`No step for this key ${configStepKey}`);\n }\n }\n\n // This code is very similar to the display getter from on-boarding-tooltip.model.ts difference is that one counts all overlay consumers except himself.\n // That's why this display will return true after on-boarding-tooltip.model.ts.\n // But because those two cases are particular and specific I choose not to extract this method in a more generic one.\n get allClearToDisplayOnboarding(): boolean {\n const orbitOverlayConsumersCount = this.services.overlay.countCurrentConsumers(consumer => {\n return consumer.needsOverlay;\n });\n const areRunningApps = this.isThereRunningApps;\n const hasDialogs = this.services.dialog.countDialogs({includeHidden: true}) > 0;\n\n //The reason we put the values in those variables is to make sure that this display getter depends on all these observables.\n return !(areRunningApps\n || hasDialogs\n || orbitOverlayConsumersCount > 0);\n }\n}\n","import {INyxService} from \"./nyx.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\n\nexport class NyxService extends ServiceBase implements INyxService {\n get useNewIntegration(): boolean {\n if(this.services.device.hybrid.isEmbedded) {\n return this.services.hybrid.isNyxIframeSupported() && this.services.configuration.servicesConfigs.NYX.useNewIntegration;\n } else {\n return this.services.configuration.servicesConfigs.NYX.useNewIntegration;\n }\n }\n}","import {TooltipBaseModel} from \"../tooltip-base/tooltip-base.model\";\nimport {action, makeObservable, observable, reaction, runInAction} from \"mobx\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IOnBoardingTooltipsContainer} from \"./on-boarding-tooltips-container.interface\";\nimport {IOnBoardingTooltipOptions} from \"./on-boarding-tooltip-options.interface\";\nimport {Check} from \"@sparkware/app-utils\";\n\n\nexport abstract class OnBoardingTooltipModel extends TooltipBaseModel<IOnBoardingTooltipOptions> {\n constructor(protected readonly onBoardingTooltipSContainer: IOnBoardingTooltipsContainer,\n services: IServiceFactoryExtended,\n options: IOnBoardingTooltipOptions) {\n super(services, options);\n makeObservable(this);\n this._loadPersistedValuesFromLocalStorage();\n\n reaction(() => this.services.user.isAuthorized, (isAuthorized) => {\n if(!isAuthorized) {\n this.sessionDisplayCount = 0;\n }\n }, {\n fireImmediately: true\n });\n\n this.services.appLauncher.then(appLauncher => {\n reaction(() => appLauncher.isThereRunningApps, (isThereRunningApps) => {\n this._isThereRunningApps = isThereRunningApps;\n }, {\n fireImmediately: true\n })\n });\n\n this.services.gameRunner.then(gameRunner => {\n reaction(() => gameRunner.currentRunningGame, (currentRunningGame) => {\n this._isGameRunning = Boolean(currentRunningGame);\n }, {\n fireImmediately: true\n })\n });\n }\n\n @observable.ref\n private _isThereRunningApps = true;\n\n @observable.ref\n private _isGameRunning = true;\n\n protected abstract _getElementToAttach(): HTMLElement | null;\n \n shouldDisplay(): boolean {\n const orbitOverlayConsumersCount = this.services.overlay.countCurrentConsumers(consumer => {\n if(consumer === this.onBoardingTooltipSContainer) {\n return false;\n }\n\n return consumer.needsOverlay;\n });\n\n const isOnBoardingTooltipsEnabled = this.onBoardingTooltipSContainer.isOnBoardingEnabled;\n const isAuthorized = this.services.user.isAuthorized;\n const areRunningApps = this._isThereRunningApps;\n const areOpenDialogs = this.services.dialog.hasOpenDialogs;\n const isOrbitRoute = this.services.routing.isOrbitRoute(this.services.location.currentUri.pathName);\n const currentRoutePreventsNotifications = Boolean(this.services.routing.currentRoute.data?.preventNotifications);\n const isGameRunning = this._isGameRunning;\n const hasOpenToasters = this.services.toaster.hasOpenToasters;\n const isOnboardingTourOpen = this.services.onboardingTour.isOpened;\n\n //The reason we put the values in those variables is to make sure that this method depends on all these observables.\n\n return isOnBoardingTooltipsEnabled\n && isAuthorized\n && isOrbitRoute\n && orbitOverlayConsumersCount === 0\n && !areRunningApps\n && !areOpenDialogs\n && !currentRoutePreventsNotifications\n && !this._hasReachedMaximumDisplayCount\n && !this._wasDisplayedOnCurrentSession\n && !isGameRunning\n && !hasOpenToasters\n && !isOnboardingTourOpen;\n }\n\n\n closeTooltip(): void {\n super.closeTooltip();\n this.totalDisplayCount++;\n this.sessionDisplayCount++;\n }\n\n onToolTipRendered(tooltipContainer: HTMLElement): void {\n super.onToolTipRendered(tooltipContainer);\n }\n\n @action\n private _loadPersistedValuesFromLocalStorage(): void {\n let storageValue = this.services.localStorage.getItem(this._totalDisplayCountLocalStorageKey);\n if(storageValue) {\n this._totalDisplayCount = parseInt(storageValue);\n }\n\n storageValue = this.services.localStorage.getItem(this._sessionDisplayCountLocalStorageKey);\n if(storageValue) {\n this._sessionDisplayCount = parseInt(storageValue);\n }\n }\n\n private get _totalDisplayCountLocalStorageKey(): string {\n return `${this.options.localStorageKey}.totalDisplayCount`;\n }\n\n private get _sessionDisplayCountLocalStorageKey(): string {\n return `${this.options.localStorageKey}.sessionDisplayCount`;\n }\n\n @observable.ref\n private _totalDisplayCount: number = 0;\n get totalDisplayCount(): number {\n if(Check.isNullOrUndefined(this.options.maximumDisplayCount)) {\n return 0;\n }\n\n return this._totalDisplayCount;\n\n }\n set totalDisplayCount(value: number) {\n if(!Check.isNullOrUndefined(this.options.maximumDisplayCount)) {\n runInAction(() => this._totalDisplayCount = value);\n this.services.localStorage.setItem(this._totalDisplayCountLocalStorageKey, value);\n }\n }\n\n @observable.ref\n private _sessionDisplayCount: number = 0;\n\n get sessionDisplayCount(): number {\n return this._sessionDisplayCount;\n }\n\n set sessionDisplayCount(value: number) {\n runInAction(() => this._sessionDisplayCount = value);\n this.services.localStorage.setItem(this._sessionDisplayCountLocalStorageKey, value);\n }\n\n\n protected get _hasReachedMaximumDisplayCount(): boolean {\n if(Check.isNullOrUndefined(this.options.maximumDisplayCount)) {\n return false;\n }\n return this.totalDisplayCount >= this.options.maximumDisplayCount;\n }\n\n protected get _wasDisplayedOnCurrentSession(): boolean {\n return this.sessionDisplayCount >= 1;\n }\n\n\n}","import styled, {css} from \"styled-components\";\n\nexport const IconTitleTextTooltipContainerBox = styled.div<{showCursor: boolean}>`\n display: flex;\n align-content: center;\n align-items: center;\n ${props => props.showCursor ? css`cursor: pointer` : ''}\n `;","import styled from \"styled-components\";\nimport {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\n\nconst IconTitleTextTooltipTextContainerDefaultBox = styled.div`\n display: flex;\n flex-direction: column;\n\n ${({theme}) => theme.font.presets.bold};\n font-size: 12px;\n `;\n\nconst IconTitleTextTooltipTextContainerMrGreenBox = styled(IconTitleTextTooltipTextContainerDefaultBox)`\n color: ${({theme}) => theme.colors.brandSecondaryContrast};\n font-weight: 400;\n `;\n\nexport const IconTitleTextTooltipTextContainerBox = styledByTheme(IconTitleTextTooltipTextContainerDefaultBox)\n .forMrGreen(IconTitleTextTooltipTextContainerMrGreenBox)\n .apply();","import styled from \"styled-components\";\n\nexport const IconTitleTextTooltipTitleDefaultBox = styled.div`\n color: ${props => props.theme.colors.brandPrimary};\n ${({theme}) => theme.font.presets.bold};\n font-size: 12px;\n`;","import styled from \"styled-components\";\nimport {IconTitleTextTooltipTitleDefaultBox} from \"./title.default.box\";\n\nexport const IconTitleTextTooltipTitleMrGreenBox = styled(IconTitleTextTooltipTitleDefaultBox)`\n color: ${props => props.theme.colors.brandPrimaryDark};\n`;","import {styledByTheme} from \"../../../../../themes/architecture/styled-by-theme\";\nimport {IconTitleTextTooltipTitleDefaultBox} from \"./title.default.box\";\nimport {IconTitleTextTooltipTitleMrGreenBox} from \"./title.mrgreen.box\";\n\nexport const IconTitleTextTooltipTitleBox = styledByTheme(IconTitleTextTooltipTitleDefaultBox)\n .forMrGreen(IconTitleTextTooltipTitleMrGreenBox)\n .apply();","import styled from \"styled-components\";\n\nexport const IconTitleTextTooltipIconBox = styled.img`\n height: 30px;\n width: 30px;\n `;\n ","import styled from \"styled-components\";\n\nexport const SeparatorDefaultBox = styled.div`\n height: 38px;\n width: 2.5px;\n margin: 0 9px;\n background-repeat: no-repeat;\n background: ${props => `radial-gradient(closest-side at 50% 50%,${props.theme.colors.brandPrimary} 0%,${props.theme.colors.brandPrimary}70 85%,${props.theme.colors.brandPrimary}00 100%)`};\n `;\n","import styled from \"styled-components\";\nimport { SeparatorDefaultBox } from \"./separator.default.box\";\n\nexport const Separator777Box = styled(SeparatorDefaultBox)`\n width: 2px;\n`;\n","import styled from \"styled-components\";\nimport { SeparatorDefaultBox } from \"./separator.default.box\";\n\nexport const SeparatorMrGreenBox = styled(SeparatorDefaultBox)`\n background: ${props => props.theme.colors.brandSecondaryLight};\n width: 1px;\n`;\n","import { styledByTheme } from \"../../../../../../themes/architecture/styled-by-theme\";\nimport { Separator777Box } from \"./separator.777.box\";\nimport { SeparatorDefaultBox } from \"./separator.default.box\";\nimport {SeparatorMrGreenBox} from \"./seperator.mrgreen.box\";\n\nexport const SeparatorBox = styledByTheme(SeparatorDefaultBox)\n .forCasino777(Separator777Box)\n .forMrGreen(SeparatorMrGreenBox)\n .apply();\n\n\n","import styled from \"styled-components\";\n\nexport const IconContainerDefaultBox = styled.div``","import styled from \"styled-components\";\nimport {IconContainerDefaultBox} from \"./icon-container.default.box\";\n\nexport const IconContainerMrgreenBox = styled(IconContainerDefaultBox)`\n color: ${props => props.theme.colors.brandPrimaryDark};\n`","import {styledByTheme} from \"../../../../../../themes/architecture/styled-by-theme\";\nimport {IconContainerDefaultBox} from \"./icon-container.default.box\";\nimport {IconContainerMrgreenBox} from \"./icon-container.mrgreen.box\";\n\nexport const IconContainerBox = styledByTheme(IconContainerDefaultBox).forMrGreen(IconContainerMrgreenBox).apply();","import React, {ReactNode} from \"react\";\nimport {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {IconTitleTextTooltipContainerBox} from \"./boxes/container.box\";\nimport {IconTitleTextTooltipTextContainerBox} from \"./boxes/text-container.box\";\nimport {IconTitleTextTooltipTitleBox} from \"./boxes/title.box\";\nimport {IconTitleTextTooltipIconBox} from \"./boxes/icon.box\";\nimport { Check } from \"@sparkware/app-utils\";\nimport { SeparatorBox } from \"./boxes/separator/separator.box\";\nimport {observer} from \"mobx-react\";\nimport {IconContainerBox} from \"./boxes/icon-container/icon-container.box\";\n\ninterface IconHeaderTextTooltipProps {\n icon: string | ReactNode;\n title?: string;\n text: string | ReactNode;\n onClick?: () => any;\n className?: string;\n}\n\n@observer\nexport class IconTitleTextTooltip extends OrbitComponent<IconHeaderTextTooltipProps> {\n render() {\n const icon = Check.isString(this.props.icon) ? \n <IconTitleTextTooltipIconBox src={this.props.icon.toString()} alt=\"Rewards\" /> :\n this.props.icon;\n\n return (\n <IconTitleTextTooltipContainerBox showCursor={Boolean(this.props.onClick)}\n onClick={this.props.onClick}\n className={this.props.className}>\n <IconContainerBox>\n {icon}\n </IconContainerBox>\n <SeparatorBox/>\n <IconTitleTextTooltipTextContainerBox className=\"icon-title-text-tooltip-text-container\">\n {this.props.title && <IconTitleTextTooltipTitleBox className=\"title\">{this.props.title}</IconTitleTextTooltipTitleBox>}\n {this.props.text}\n </IconTitleTextTooltipTextContainerBox>\n </IconTitleTextTooltipContainerBox>\n );\n }\n}\n","import {OnBoardingTooltipModel} from \"../on-boarding-tooltip.model\";\n\nimport {IOnBoardingTooltipsContainer} from \"../on-boarding-tooltips-container.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {IconTitleTextTooltip} from \"../../../../components/tooltip/tooltips/icon-title-text/icon-title-text.tooltip\";\nimport React from \"react\";\nimport {\n TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE,\n TOOLTIP_TARGET_FREE_PLAY_INDICATOR,\n TOOLTIP_TARGET_GIFT_MINI_ORBIT_INDICATOR\n} from \"../on-boarding-tooltip-target-selectors\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {makeObservable} from \"mobx\";\n\nexport class FreePlayOnBoardingTooltipModel extends OnBoardingTooltipModel {\n\n constructor(tooltipsContainer: IOnBoardingTooltipsContainer,\n services: IServiceFactoryExtended) {\n\n super(tooltipsContainer, services, {\n renderContent: () => (<IconTitleTextTooltip icon={services.theme.currentTheme.assets.images.tooltip.gift_svg.toString()}\n title={services.translation.translate(\"CONGRATS\")}\n text={services.translation.translate(\"YOUR_FP_ARE_WAITING\")}\n onClick={this._onTooltipClicked}\n className={CyClass('cy-free-play-on-boarding-tooltip')}/>),\n timeout: TimeSpan.fromSeconds(7),\n localStorageKey: 'free_play_on_boarding_tooltip',\n maximumDisplayCount: 5,\n showOverlay: true,\n showCloseButton: false,\n closeOnClickOutside: true,\n animated: true,\n });\n makeObservable(this);\n }\n\n shouldDisplay(): boolean {\n //we use separate variables to make sure that this method depends on all the observable involved in the condition\n const hasVouchers = this.services.freePlay.hasVouchers;\n const commonConditions = super.shouldDisplay();\n\n return hasVouchers && commonConditions;\n\n }\n\n protected _getElementToAttach(): HTMLElement| null {\n const mobileElement = this.services.dom.querySelector(`.${TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE}`) as HTMLElement;\n\n if(mobileElement) {\n return mobileElement;\n }\n\n const pcElement = this.services.dom.querySelector(`.${TOOLTIP_TARGET_FREE_PLAY_INDICATOR}`) as HTMLElement;\n\n if(pcElement) {\n return pcElement;\n }\n\n // mini-orbit\n return this.services.dom.querySelector(`.${TOOLTIP_TARGET_GIFT_MINI_ORBIT_INDICATOR}`) as HTMLElement;\n }\n\n onToolTipRendered(tooltipContainer: HTMLElement) {\n super.onToolTipRendered(tooltipContainer);\n this.services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"Show\", \"FP_Bubble\");\n }\n\n\n private _onTooltipClicked = async () => {\n this.closeTooltip();\n if (this.services.miniOrbit.isEnabled) {\n this.services.miniOrbit.openFreePlays()\n } else {\n (await this.services.userMenu).openRewards();\n }\n this.services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"Click\", \"FP_Bubble\");\n }\n}","import { styledBox } from \"../../../../../themes/architecture/styled-box\";\n\nexport const IconContainerBox = styledBox('IconContainerBox');","import styled from \"styled-components\";\n\nexport const IOSAddToHomeShareIconBox = styled.img`\n width: 10px;\n height: 15px;\n margin: 0 5px;\n `;\n","import styled from \"styled-components\";\nimport { IconTitleTextTooltipTextContainerBox } from \"../../icon-title-text/boxes/text-container.box\";\n\nexport const MessageBodyContainerBox = styled(IconTitleTextTooltipTextContainerBox)`\n ${({theme}) => theme.font.presets.regular};\n `;\n\n export const MessageBodyBoldContainerBox = styled.span`\n ${({theme}) => theme.font.presets.bold};\n `;\n","import {OrbitComponent} from \"../../../base-components/orbit-component/orbit-component\";\nimport {IconTitleTextTooltip} from \"../icon-title-text/icon-title-text.tooltip\";\nimport { IconContainerBox } from \"./boxes/icon-container.box\";\nimport {IOSAddToHomeShareIconBox} from \"./boxes/ios-add-to-home-share-icon.box\";\nimport { MessageBodyContainerBox, MessageBodyBoldContainerBox } from \"./boxes/message-body-container.box\";\n\nexport interface IosAddToHomeScreenComponentProps {\n brandName: string;\n\n onClicked();\n}\n\nexport class IosAddToHomeScreenComponent extends OrbitComponent<IosAddToHomeScreenComponentProps> {\n\n render() {\n const translationService = this.services.translation;\n\n const logoIcon = this.services.theme.currentTheme.assets.images.ios_add_to_home_screen_logo_png.toString();\n const iosShareIcon = this.services.theme.currentTheme.assets.images.ios_share_svg.toString();\n\n const body = <MessageBodyContainerBox>\n {translationService.translate(\"PWA_QUICK_LAUNCH\", {BRAND: this.props.brandName})}\n <div>\n {translationService.translate(\"PWA_TAP\")}\n <IOSAddToHomeShareIconBox src={iosShareIcon} alt=\"Share\"/>\n <MessageBodyBoldContainerBox>\n {translationService.translate(\"PWA_ADD_TO_HOME_SCREEN\")}\n </MessageBodyBoldContainerBox>\n </div>\n </MessageBodyContainerBox>;\n\n const icon = <IconContainerBox src={logoIcon.toString()} alt=\"Add to home screen\" />;\n\n return <IconTitleTextTooltip\n icon={icon}\n text={body}\n onClick={this.props.onClicked}\n />\n }\n}\n","import {OnBoardingTooltipModel} from \"../on-boarding-tooltip.model\";\nimport {IOnBoardingTooltipsContainer} from \"../on-boarding-tooltips-container.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport React from \"react\";\nimport {stickToBottomTooltipModifier} from \"../../tooltip-base/tooltip-modifiers\";\nimport {\n IosAddToHomeScreenComponent\n} from \"../../../../components/tooltip/tooltips/ios-add-to-home/ios-add-to-home.component\";\nimport {makeObservable, observable, reaction} from \"mobx\";\nimport {OrbitUserFlowAnalyticsCategory} from \"../../../analytics/analytics.service.interface\";\n\nexport class IosPwaOnBoardingTooltipModel extends OnBoardingTooltipModel {\n constructor(tooltipsContainer: IOnBoardingTooltipsContainer,\n services: IServiceFactoryExtended) {\n\n super(tooltipsContainer, services, {\n renderContent: () => (<IosAddToHomeScreenComponent\n brandName={services.sdk.getSkin().getBrandName()}\n onClicked={this._onToolTipClick} />),\n localStorageKey: 'ios-pwa_on_boarding_tooltip',\n maximumDisplayCount: 2,\n styling: {\n textColor: \"black\",\n backgroundColor: \"white\",\n borderColor: \"transparent\"\n },\n modifiers: [stickToBottomTooltipModifier],\n placement: \"bottom\",\n showCloseButton: true,\n invertCloseButtonColors: true,\n closeOnClickOutside: true,\n showOverlay: false,\n hasGlow: false,\n\n });\n\n makeObservable(this);\n\n this.services.gameRunner.then(gameRunner => {\n reaction(() => gameRunner.currentRunningGame,\n (currentRunningGame) => {\n if(currentRunningGame) {\n this._openGameCount++;\n }\n });\n });\n\n\n reaction(() => this.services.user.isAuthorized ,\n () => {\n this._openGameCount = 0;\n });\n }\n\n\n @observable.ref\n private _openGameCount: number = 0;\n\n protected _getElementToAttach(): HTMLElement | null {\n return this.services.dom.body;\n }\n\n shouldDisplay(): boolean {\n const commonConditions = super.shouldDisplay();\n const isDeviceEligible = this._isDeviceEligible;\n return this._openGameCount > 0\n && isDeviceEligible\n && commonConditions;\n }\n\n private get _isDeviceEligible(): boolean {\n const device = this.services.device;\n\n // we must show tooltip on iPhone Safari and not standalone which means shortcut app opened browser\n if (!device.model.isIphone)\n return false;\n if (!device.browser.isSafari)\n return false;\n if (device.isStandalone)\n return false;\n\n const extraProps = this.services.configuration.startupConfiguration.sdk.config.ExtraProperties;\n if (!extraProps.pwaEnabled)\n return false;\n if (device.hybrid.isHybrid)\n return false;\n\n if (this.services.miniOrbit.isEnabled)\n return false;\n\n return true;\n }\n\n private _onToolTipClick = () => {\n this.closeTooltip();\n }\n\n closeTooltip() {\n super.closeTooltip();\n this.services.analytics.sendOrbitUserFlowEvent(OrbitUserFlowAnalyticsCategory.PWA, 'Banner_Prompt', 'Closed');\n }\n\n onToolTipRendered(tooltipContainer: HTMLElement) {\n super.onToolTipRendered(tooltipContainer);\n this.services.analytics.sendOrbitUserFlowEvent(OrbitUserFlowAnalyticsCategory.PWA, 'Banner_Prompt', 'SHOW');\n\n }\n}","import {OnBoardingTooltipModel} from \"../on-boarding-tooltip.model\";\nimport {IOnBoardingTooltipsContainer} from \"../on-boarding-tooltips-container.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {IconTitleTextTooltip} from \"../../../../components/tooltip/tooltips/icon-title-text/icon-title-text.tooltip\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {makeObservable} from \"mobx\";\nimport React from \"react\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../../../common/const/casinofied-analytics-consts\";\nimport {\n TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON,\n TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE\n} from \"../on-boarding-tooltip-target-selectors\";\n\nexport class ControlCenterOnBoardingTooltipModel extends OnBoardingTooltipModel {\n constructor(tooltipsContainer: IOnBoardingTooltipsContainer,\n services: IServiceFactoryExtended) {\n\n super(tooltipsContainer, services, {\n renderContent: () => {\n const Icon = services.theme.currentTheme.icons.controlCenterIcon\n return (<IconTitleTextTooltip icon={<Icon/>}\n title={services.translation.translate(\"SAFE_ZONE\")}\n text={services.translation.translate(\"CONTROL_CENTER_ONBOARDING_TOOLTIP_TEXT\")}\n onClick={this._onTooltipClicked}\n className={CyClass('cy-control-center-on-boarding-tooltip')}/>);\n },\n timeout: TimeSpan.fromSeconds(7),\n localStorageKey: 'control_center_on_boarding_tooltip',\n maximumDisplayCount: 2,\n showOverlay: true,\n showCloseButton: false,\n closeOnClickOutside: true,\n animated: true,\n });\n\n makeObservable(this);\n }\n\n shouldDisplay(): boolean {\n const commonConditions = super.shouldDisplay();\n const isControlCenterEnabled = this.services.controlCenter.isEnabled;\n const isMiniOrbit = this.services.miniOrbit.isEnabled;\n const isControlCenterOnBoardingTooltipEnabled = this.services.configuration.servicesConfigs.OnBoardingTooltips.enabledForControlCenter;\n return commonConditions && isControlCenterEnabled && !isMiniOrbit && isControlCenterOnBoardingTooltipEnabled;\n }\n\n protected _getElementToAttach(): HTMLElement | null {\n const element = this.services.dom.querySelector(`.${TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE}`) as HTMLElement;\n\n if(element) {\n return element;\n }\n\n return this.services.dom.querySelector(`.${TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON}`) as HTMLElement;\n\n }\n\n onToolTipRendered(tooltipContainer: HTMLElement) {\n super.onToolTipRendered(tooltipContainer);\n this.services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"Show\", \"CC_Bubble\");\n }\n\n private _onTooltipClicked = async () => {\n this.closeTooltip();\n this.services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"Click\", \"CC_Bubble\");\n if(this.services.mediaQuery.lAndBelow) {\n (await this.services.userMenu).openMenu();\n } else {\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.controlCenterTooltip,\n source: CHANNEL_SOURCE.casinoClient\n }\n });\n }\n }\n}","import styled from \"styled-components\";\n\nexport const ExplorerOnboardingTooltipContainerBox = styled.div<{bottom: number}>`\n padding: 2rem 0;\n position: fixed;\n bottom: ${props => props.bottom + 'px'};\n left: 0;\n background: linear-gradient(180deg, #171717 0%, #000000 100%);\n width: 100vw;\n border-top-left-radius: 10px;\n border-top-right-radius: 10px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n \n opacity: 0;\n animation: fadeIn 0.5s forwards; \n\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n .explorer-menu-onboarding-button-container {\n width: 80%;\n font-size: 1.5rem;\n }\n`;","import styled from \"styled-components\";\n\nexport const ExplorerOnboardingTooltipTitleContainerBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n\n .explorer-menu-onboarding-title-text {\n font-size: 2.5rem;\n font-weight: 700;\n padding: 0 1rem;\n }\n\n .explorer-menu-onboarding-title-new-box {\n background-color: ${props => props.theme.colors.exploreHighlight};\n border-radius: 16px;\n padding: 2px 8px;\n font-size: 1.5rem;\n text-align: center;\n height: fit-content;\n }\n`;","import styled from \"styled-components\";\n\nexport const ExplorerOnboardingTooltipXButtonBox = styled.button`\n margin: 0 2rem 1rem auto;\n background-image: url(\"${props => props.theme.assets.images.close_modal_dialog_png.toString()}\");\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center;\n height: 18px;\n width: 18px;\n`;","import React, {useRef} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {ExplorerOnboardingTooltipContainerBox} from \"./boxes/explorer-onboarding-tooltip-container.box\";\nimport {Button} from \"../../../../basic-ui-components/button/base/button.component\";\nimport {DotLottiePlayer} from \"../../../lottie-player/dot-lottie-player.component\";\nimport {DotLottieCommonPlayer} from \"@dotlottie/react-player\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\nimport {ExplorerOnboardingTooltipTitleContainerBox} from \"./boxes/explorer-onboarding-tooltip-title-container.box\";\nimport {ExplorerOnboardingTooltipXButtonBox} from \"./boxes/explorer-onboarding-tooltip-x-button.box\";\n\ninterface ExplorerOnboardingTooltipProps extends ComponentServicesPick<'bottomNavigationBar'> {\n closeTooltipCallback: () => void;\n}\n\nconst ComponentBody: React.FC<ExplorerOnboardingTooltipProps> = observer((props) => {\n const services = useServices();\n let lottieRef = useRef<DotLottieCommonPlayer>(null);\n let ExplorerIcon = services.theme.currentTheme.icons.exploreOutlinedIcon;\n\n const navigateToExplorer = () => {\n\n //If in the future we want the 'NEW' badge to disappear from the menu after the menu is clicked, uncomment the next line\n //services.videoSlides.setShownExplorerMenuBadgeCurrentSession();\n\n props.closeTooltipCallback();\n\n services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"CTA_Click\", \"TT_Bubble\");\n\n services.linksNavigation.navigateLink({\n linkId: 'videoSlideExploreLink'\n });\n\n }\n\n const renderLottiePlayer = () => {\n return (\n <DotLottiePlayer\n style={{width: \"75px\", height: \"100%\", padding: \"2em 0\"}}\n ref={lottieRef}\n src={services.theme.currentTheme.assets.lottie_json.explore_swipe_phone_gesture_lottie.toString()}\n autoplay={true}\n loop={true}\n rendererSettings={{\n preserveAspectRatio: 'xMidYMid slice', // Scales the animation\n }}\n />\n );\n }\n\n const renderTitleSection = () => {\n return (\n <ExplorerOnboardingTooltipTitleContainerBox>\n <ExplorerIcon size={3.7}/>\n <span className={'explorer-menu-onboarding-title-text'}>\n {services.translation.translate('EXPLORE')}\n </span>\n <span className={'explorer-menu-onboarding-title-new-box'}>\n {services.translation.translate('EXPLORER_BADGE_NEW')}\n </span>\n </ExplorerOnboardingTooltipTitleContainerBox>\n );\n }\n\n const renderMainSection = () => {\n return (\n <div className={'explorer-menu-onboarding-button-container'}>\n <p>\n {services.translation.translate('ONBOARDING_BOTTOM_NAV_BAR_EXPLORE_MAIN_TEXT')}\n </p>\n <Button preset={'primary'} fullWidth onClick={navigateToExplorer}>\n {services.translation.translate('ONBOARDING_BOTTOM_NAV_BAR_EXPLORE_SECONDARY_TEXT')}\n </Button>\n </div>\n );\n }\n\n const _xButtonClicked = () => {\n services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"X_Click\", \"TT_Bubble\");\n\n props.closeTooltipCallback();\n }\n\n return (\n <ExplorerOnboardingTooltipContainerBox bottom={props.bottomNavigationBar.bottomNavbarHeight - 0.5}>\n <ExplorerOnboardingTooltipXButtonBox onClick={_xButtonClicked}/>\n {renderTitleSection()}\n {renderLottiePlayer()}\n {renderMainSection()}\n </ExplorerOnboardingTooltipContainerBox>\n );\n})\n\nexport const ExplorerOnboardingTooltip = withServices(ComponentBody, ['bottomNavigationBar']);","import {OnBoardingTooltipModel} from \"../on-boarding-tooltip.model\";\nimport {IOnBoardingTooltipsContainer} from \"../on-boarding-tooltips-container.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {makeObservable, observable, reaction, runInAction} from \"mobx\";\nimport {DomEventSubscription} from \"../../../../../utils/event-listener-registration\";\nimport {\n ExplorerOnboardingTooltip\n} from \"../../../../components/tooltip/tooltips/explorer-onboarding-tooltip/explorer-onboarding.tooltip\";\nimport {ITooltipStyling} from \"../../tooltip-base/tooltip-options.interface\";\nimport {stickOnTopTooltipModifier} from \"../../tooltip-base/tooltip-modifiers\";\n\nexport class VideoSlidesExplorerOnBoardingTooltipModel extends OnBoardingTooltipModel {\n private _onScrollSubscription: DomEventSubscription | null = null;\n\n get styling(): ITooltipStyling | undefined {\n return {\n backgroundColor: 'transparent',\n borderColor: 'transparent'\n }\n }\n\n constructor(tooltipsContainer: IOnBoardingTooltipsContainer,\n services: IServiceFactoryExtended) {\n\n super(tooltipsContainer, services, {\n renderContent: () => {\n return (\n <ExplorerOnboardingTooltip closeTooltipCallback={this.closeTooltip.bind(this)}/>\n )\n },\n placement: \"bottom\",\n modifiers: [stickOnTopTooltipModifier],\n localStorageKey: 'video_slides_onboarding_explorer_tooltip',\n maximumDisplayCount: 1,\n hasGlow: false,\n showOverlay: true,\n showCloseButton: false,\n closeOnClickOutside: true,\n animated: true,\n hasOwnStyle: true,\n });\n\n makeObservable(this);\n\n reaction(() => this.services.user.isAuthorized, (isAuthorized) => {\n if (isAuthorized && !this._onScrollSubscription) {\n // set a scroll event listener because the onboarding should be shown after user start's scrolling, once authenticated\n this._onScrollSubscription = this.services.window.subscribeTo.scroll(this._onWindowScroll);\n }\n }, {\n fireImmediately: true\n });\n }\n\n @observable.ref\n scrollDetected: boolean = false;\n\n private _onWindowScroll = () => {\n // Check if this.services.routing.currentRoute?.data?.arenaType because we show onboarding only for home page and arenas\n if (this.services.routing.currentRoute?.isOrbitRoute && this.services.window.scrollY > 200) {\n runInAction(() => {\n this.scrollDetected = true;\n });\n }\n };\n\n private _removeScrollSubscription = () => {\n // remove scroll event listener\n if (this._onScrollSubscription) {\n this._onScrollSubscription.dispose();\n this._onScrollSubscription = null;\n }\n };\n\n shouldDisplay(): boolean {\n const commonConditions = super.shouldDisplay();\n const videoSlidesShouldBeDisplayed = this.services.videoSlides.shouldBeDisplayed;\n const isFirstLoginAfterRegistration = this.services.sdk.isLoginFromRegistration;\n\n return !isFirstLoginAfterRegistration && commonConditions && videoSlidesShouldBeDisplayed && this.scrollDetected;\n }\n\n protected _getElementToAttach(): HTMLElement | null {\n return null;\n }\n\n onToolTipRendered(tooltipContainer: HTMLElement): void {\n super.onToolTipRendered(tooltipContainer);\n\n this._removeScrollSubscription();\n\n this.services.analytics.sendOrbitUserFlowEvent(\"Tooltip\", \"Show\", \"TT_Bubble\");\n }\n}","import {TooltipBaseService} from \"../tooltip-base.service\";\nimport {IOnBoardingTooltipsService} from \"./on-boarding-tooltips.service.interface\";\nimport {IOnBoardingTooltipsContainer} from \"./on-boarding-tooltips-container.interface\";\nimport {ITooltipModel} from \"../tooltip-base/tooltip-model.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {FreePlayOnBoardingTooltipModel} from \"./free-play/free-play.on-boarding-tooltip.model\";\nimport {makeObservable, observable, runInAction} from \"mobx\";\nimport {IosPwaOnBoardingTooltipModel} from \"./pwa/ios-pwa.on-boarding-tooltip.model\";\nimport {ControlCenterOnBoardingTooltipModel} from \"./control-center/control-center.on-boarding-tooltip.model\";\nimport {SetTimeoutType} from \"../../../../common/types/set-timeout-type\";\nimport {VideoSlidesExplorerOnBoardingTooltipModel} from \"./video-slides-explorer/video-slides-explorer.on-boarding-tooltip.model\";\n\nexport class OnBoardingTooltipsService extends TooltipBaseService implements IOnBoardingTooltipsService, IOnBoardingTooltipsContainer {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n makeObservable(this);\n this._migrateOldStorageKeys();\n\n runInAction(() => {\n this._toolTips.push(new ControlCenterOnBoardingTooltipModel(this, services));\n this._toolTips.push(new FreePlayOnBoardingTooltipModel(this, services));\n this._toolTips.push(new VideoSlidesExplorerOnBoardingTooltipModel(this, services));\n this._toolTips.push(new IosPwaOnBoardingTooltipModel(this, services));\n });\n\n let enableOnBoardingTooltipsTimer: SetTimeoutType;\n this.reaction(() => this.services.user.isAuthorized, (isAuthorized) => {\n if(isAuthorized) {\n //We use this timeout to give the chance to toasters to appear before.\n //For example on Sweden after login we show a toaster, but because we load the iziToast library async this will make\n //the toaster to appear after on boarding tooltips, but we want to give precedence to the toaster over the tooltip.\n // We don't use iziToast enymore, would that still be relevant??\n enableOnBoardingTooltipsTimer = setTimeout(() => {\n runInAction(() => {\n this.isOnBoardingEnabled = true;\n });\n }, 3000);\n } else {\n clearTimeout(enableOnBoardingTooltipsTimer);\n runInAction(() => {\n this.isOnBoardingEnabled = false;\n });\n }\n }, {\n fireImmediately: true\n })\n\n\n }\n\n @observable.ref\n isOnBoardingEnabled: boolean = false;\n\n get toolTips(): ITooltipModel[] {\n //we use filter and not find because we want this getter to depend on all observables in the _toolTips array\n const visibleTooltips = this._toolTips.filter(tt => tt.shouldDisplay());\n if(visibleTooltips.length > 0) {\n return [visibleTooltips[0]];\n }\n return [];\n }\n\n private _migrateOldStorageKeys(): void {\n let storedValue = this.services.localStorage.getItem('orbit_free_play_tooltip_is_displayed_in_session');\n if(storedValue) {\n this.services.localStorage.setItem('free_play_on_boarding_tooltip.sessionDisplayCount', storedValue === 'true' ? 1 : 0);\n this.services.localStorage.removeItem('orbit_free_play_tooltip_is_displayed_in_session');\n }\n\n storedValue = this.services.localStorage.getItem('orbit_free_play_tooltip_displayed_number');\n if(storedValue) {\n this.services.localStorage.setItem('free_play_on_boarding_tooltip.totalDisplayCount', storedValue);\n this.services.localStorage.removeItem('orbit_free_play_tooltip_displayed_number');\n }\n\n storedValue = this.services.localStorage.getItem('orbit-pwa-ios-shown-install-tooltip-count');\n if(storedValue) {\n this.services.localStorage.setItem('ios-pwa_on_boarding_tooltip.totalDisplayCount', storedValue);\n this.services.localStorage.removeItem('orbit-pwa-ios-shown-install-tooltip-count');\n }\n\n }\n}","import {ServiceBase} from '../ServiceBase';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport IPlayerMigration from \"../../../common/interfaces/player-migration.interface\";\nimport MIGRATION from \"../../../common/const/migration_consts\";\nimport {Check} from \"@sparkware/app-utils\";\n\nexport type ClientVisitAnalyticsParams = {\n migrationToken?: string;\n businessCorrelationId?: string;\n}\n\nexport class PlayerMigrationService extends ServiceBase implements IPlayerMigration {\n\n private _businessCorrIdQueryParamName: string = MIGRATION.BUSINESS_CORRELATION_ID_QUERY_PARAM;\n private _businessCorrelationId: string;\n\n public get businessCorrelationId(): string {\n if (!this._businessCorrelationId) {\n this._businessCorrelationId = this.services.tools.getGuid();\n }\n return this._businessCorrelationId;\n }\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n if (this.services.location.currentUri.queryParams.hasParam(this._businessCorrIdQueryParamName)){\n this._onReceivedBusinessCorrIdQueryParam(this.services.location.currentUri.queryParams.getParamValue(this._businessCorrIdQueryParamName));\n }\n\n //on hybrid, the sendAnalytics method is called directly from migration_hybrid_feature.js\n if (this.isMigrationEnabledFromConfig && !this.services.device.hybrid.isHybrid) {\n this.sendClientVisitAnalytics();\n }\n }\n\n private _onReceivedBusinessCorrIdQueryParam = (businessCorrelationId: string) => {\n\n if (!this.services.tools.isGuid(businessCorrelationId)) {\n //There are scenarios when the id we receive in the url is not a valid guid, if this is the case we ignore it and create a new one.\n businessCorrelationId = this.services.tools.getGuid();\n }\n\n this._businessCorrelationId = businessCorrelationId;\n }\n\n public sendClientVisitAnalytics(params?: ClientVisitAnalyticsParams): void {\n const data = {\n \"MIGRATION_EVENT\": {\n \"EventCategory\": \"Visitor\",\n \"EventAction\": \"Enter\",\n \"EventActionData\": {\n \"System\": this.services.device.hybrid.isHybrid ? \"888 app\" : \"888 web\",\n \"Source\": (!Check.isEmpty(params?.migrationToken) || this.hasClientBeenLoadedWithMigrationToken()) ? \"MRG_Redirect\" : \"Visitor\",\n \"Orientation\": \"Casino\",\n \"TokenIncluded\": (!Check.isEmpty(params?.migrationToken) || this.hasClientBeenLoadedWithMigrationToken()),\n \"MigrationCompletionIndication\": this.isPlayerMigrated\n }\n }\n };\n\n const logger = this.services.analytics.getLogger(data);\n\n logger.setBusinessCorrelationID(params?.businessCorrelationId || this.businessCorrelationId);\n logger.setEventType('MIGRATION_EVENT', 'Log', 'Analytics');\n logger.info();\n }\n\n public get isPlayerMigrated(): boolean {\n return this.services.cookies.getCookie(MIGRATION.PLAYER_MIGRATED_COOKIE) === \"true\";\n }\n\n private hasClientBeenLoadedWithMigrationToken(): boolean {\n return this.services.sessionStorage.getItem(MIGRATION.LOADED_WITH_MIGRATION_TOKEN_SESSION_STORAGE_KEY)?.toLowerCase() === \"true\";\n }\n\n public get isMigrationEnabledFromConfig(): boolean {\n return this.services.configuration.servicesConfigs.PlayerMigration.enabledForBrand[this.services.sdk.getBrandID()];\n }\n}\n","import {ToastHandler} from \"./toast-handler\";\n\nexport class ToastQueue {\n private _queue: ToastHandler[] = [];\n\n addToQueue(handler: ToastHandler) {\n // Behavior 1: Add to queue only if the ID doesn't exists\n let existingToast = this._queue.find((t) => t.toastId === handler.toastId);\n if (!existingToast) {\n this._queue.push(handler);\n }\n // OR\n // Behavior 2: Remove the existing one if exists and add the new one AT THE END OF THE LIST (update)\n // let existingToastIndex = this._queue.findIndex((t) => t.toastId === handler.toastId);\n // if (existingToastIndex !== -1) {\n // this._queue.splice(existingToastIndex, 1);\n // }\n // this._queue.push(handler);\n // OR\n // Behavior 3: Remove the existing one if exists and add the new one AT THE ORIGINAL POSITION (update)\n // let existingToastIndex = this._queue.findIndex((t) => t.toastId === handler.toastId);\n // if (existingToastIndex !== -1) {\n // this._queue.splice(existingToastIndex, 1, handler);\n // }\n // OR\n // Behavior 4: Just add to queue, no checking\n // this._queue.push(handler);\n }\n\n processQueue = () => {\n while (this._queue.length > 0) {\n const toastHandler = this._queue.shift();\n toastHandler.show();\n }\n }\n\n clearQueue() {\n this._queue = [];\n }\n}","import styled from \"styled-components\";\n\nexport const StandardToastImageBox = styled.div`\n color: ${({theme}) => theme.colors.brandPrimary};\n max-width: 10rem;\n max-height: 10rem;\n margin-right: 4px;\n`;\n","import React from 'react';\nimport {Check} from \"@sparkware/app-utils\";\nimport {PropsWithChildren, useCallback, useEffect} from \"react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {onToastButtonClickedAnalytics, onToastOpenedAnalytics} from \"../../../services/toaster/toast-helpers/toast-analytics.helper\";\nimport {IToastHandler} from \"../../../services/toaster/toaster.service.interface\";\nimport {FlexContainerBox, FlexFixedSizeItemBox, FlexGrowItemBox} from \"../../../themes/architecture/css-helpers/flex\";\nimport {StandardToastImageDefaultBox} from \"./boxes/standard-toast-image/standard-toast-image.default.box\";\nimport {StandardToastMessageBox} from \"./boxes/standard-toast-message/standard-toast-message.box\";\nimport {StandardToastTitleBox} from \"./boxes/standard-toast-title/standard-toast-title.box\";\nimport { StandardToastImageBox } from './boxes/standard-toast-image.box';\nimport {IStandardToastContentProps} from \"./standard-toast.component.props\";\nimport {DEFAULT_TOAST_IMAGE} from \"../../../services/toaster/taoster-service-consts\";\n\n\n\ninterface IStandardToastContentInternalProps {\n handler: IToastHandler;\n}\n\nexport const StandardToastContent: React.FC<PropsWithChildren<IStandardToastContentProps & IStandardToastContentInternalProps>> = (props) => {\n const services = useServices();\n const {button, handler} = props;\n const onClick = useCallback(() => {\n onToastButtonClickedAnalytics(services, handler.toastId);\n button.onClick(handler.close);\n }, [services, button, handler]);\n\n const DefaultIcon = services.theme.currentTheme.icons.infoIcon;\n const renderImage = () => {\n if (!props.image) {\n return null;\n }\n if (props.image === DEFAULT_TOAST_IMAGE) {\n return <StandardToastImageDefaultBox><DefaultIcon size={3} /></StandardToastImageDefaultBox>;\n } else {\n return <StandardToastImageBox><img src={props.image} alt=\"\" /></StandardToastImageBox>; \n }\n }\n\n // I put the analytics inside an useEffect because I want to make sure it is run once, at mount, not every rerender\n // handler shouldn't change so it shouldn't rerun at component update\n useEffect(() => {\n onToastOpenedAnalytics(services, handler.toastId);\n }, [handler, services]);\n\n return <div>\n <FlexContainerBox alignItems=\"center\">\n <FlexFixedSizeItemBox>\n {renderImage()}\n </FlexFixedSizeItemBox>\n <FlexGrowItemBox flexBasis=\"150px\">\n <StandardToastTitleBox>{props.title}</StandardToastTitleBox>\n { Check.isArray(props.message) ?\n props.message.map(m => <StandardToastMessageBox>{m}</StandardToastMessageBox>) :\n <StandardToastMessageBox>{props.message}</StandardToastMessageBox> }\n { button ? <Button preset=\"primary\" sizeVariant=\"s\" fullWidth onClick={onClick} margin=\"1rem 0 0 auto\">{button.text}</Button> : null }\n </FlexGrowItemBox>\n </FlexContainerBox>\n </div>;\n}\n","import {IServiceFactory} from \"../../service-factory.interface\";\nimport {OrbitMarketingEventAnalyticsCategory} from \"../../analytics/analytics.service.interface\";\n\nexport function onToastButtonClickedAnalytics(services: IServiceFactory, toastId: string | number) {\n const cid = services.user.cid || 'annonymous';\n services.analytics.sendOrbitMarketingEvent(OrbitMarketingEventAnalyticsCategory.Communications, toastId + '_CTA_Click', cid + '_' + Date.now().toString());\n}\n\nexport function onToastOpenedAnalytics(services: IServiceFactory, toastId: string | number) {\n const cid = services.user.cid || 'annonymous';\n services.analytics.sendOrbitMarketingEvent(OrbitMarketingEventAnalyticsCategory.Communications, toastId + '_Show', cid + '_' + Date.now().toString());\n}","export const DEFAULT_TOAST_IMAGE = \"DEFAULT_TOAST_IMAGE\";","import {Id, toast, ToastOptions} from \"react-toastify\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {addToastClassName} from \"./toast-helpers/toast-classnames.helper\";\nimport {IToastHandler, IToastDefinition, ToastCloseReason} from \"./toaster.service.interface\";\nimport {IReactionDisposer, when} from \"mobx\";\n\nexport class ToastHandler implements IToastHandler {\n public readonly toastId: Id;\n /**\n * reason can be:\n * ToastCloseReason.CloseButton if the toast was closed by the X button\n * undefined if was autoclosed by itself\n * or anything passed to handler.close (including undefined)\n */\n private closeReason: ToastCloseReason | string | undefined = undefined;\n constructor(private readonly services: IServiceFactoryExtended, private readonly options: IToastDefinition) {\n this.toastId = options.id ? options.id : this.services.tools.getGuid();\n }\n\n private _displayReactionDisposer: IReactionDisposer | null = null;\n show(): void {\n if(this.options.displayCondition) {\n this._displayReactionDisposer = when(() => this.options.displayCondition(),\n () => {\n this._displayReactionDisposer = null;\n this._displayToast();\n });\n } else {\n this._displayToast();\n }\n }\n\n private _displayToast(): void {\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n let autoClose: number | false = false;\n if (this.options.toastOptions?.timeout && this.options.toastOptions.timeout.totalMilliseconds > 0) {\n autoClose = this.options.toastOptions.timeout.totalMilliseconds;\n }\n const toastOptions: ToastOptions<ToastHandler> = {\n // if autoClose is undefined it defaults to 5000ms, so instead of using autoClose I use timeout and if is missing (undefined) or null or 0 it defaults to false\n autoClose,\n hideProgressBar: this.options.toastOptions?.hideProgressBar,\n // If I don't use addToastClassName than this class name will override the one I set in ToastContainerDefaultBox\n className: addToastClassName(this.options.toastOptions?.className),\n // I need to pass a custom close Button that mimics the default one because react-toastify does not provide me with a mechanism to tell why the\n // toast was closed, so I need to patch this\n // If we'll ever use react-toastify theming add classes like Toastify__close-button--light to this\n closeButton: (this.options.toastOptions?.closeButton === false) ? false : () => <button aria-label=\"close\" className=\"Toastify__close-button cy-toastify-close-button\" type=\"button\" onClick={() => {\n this.close(ToastCloseReason.CloseButton)\n }}><CloseIcon size={2} /></button>,\n toastId: this.toastId,\n data: this\n };\n toast<ToastHandler>(this.options.renderContent(this), toastOptions);\n }\n\n private _destroyReactions(): void {\n if(this._hideReactionDisposer) {\n this._hideReactionDisposer();\n this._hideReactionDisposer = null;\n }\n\n if(this._displayReactionDisposer) {\n this._displayReactionDisposer();\n this._displayReactionDisposer = null;\n }\n }\n\n close = (closeReason?: ToastCloseReason | string) => {\n if (closeReason) {\n this.closeReason = closeReason;\n }\n this._destroyReactions();\n toast.dismiss(this.toastId);\n }\n\n private _hideReactionDisposer: IReactionDisposer | null = null;\n onToastShown() {\n if (this.options.onToastShown) {\n this.options.onToastShown();\n }\n\n if(this.options.displayCondition) {\n this._hideReactionDisposer = when(() => !this.options.displayCondition(),\n () => {\n this._hideReactionDisposer = null;\n this.close();\n });\n }\n\n }\n onToastClosed() {\n this._destroyReactions();\n\n if (this.options.onToastClosed) {\n this.options.onToastClosed(this.closeReason);\n }\n }\n}","import { toast, ToastItem } from \"react-toastify\";\nimport { ServiceBase } from \"../ServiceBase\";\nimport { IToasterService, IToastDefinition, IStandardToastDefinition } from \"./toaster.service.interface\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { action, makeObservable, observable, runInAction } from \"mobx\";\nimport { ToastQueue } from \"./toasts-queue\";\nimport { StandardToastContent } from \"../../components/toaster/toasts-content/standard-toast.component\";\nimport { ToastHandler } from \"./toast-handler\";\n\nexport class ToasterService extends ServiceBase implements IToasterService {\n private _toastQueue: ToastQueue = new ToastQueue();\n\n private _pendingToasts: ToastHandler[] = [];\n\n /** use observable instead of observable.ref because the ref remains the same, instead i push and splice data from this array */\n @observable\n private _activeToasts: ToastHandler[] = [];\n\n private get _allToasts(): ToastHandler[] {\n return [\n ...this._pendingToasts,\n ...this._activeToasts\n ];\n }\n\n @observable.ref\n private isAppVisible = true;\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n // I want to clear the queue of toasts when the authorized state is changed but not on initial load so no fireImmediately\n this.reaction(() => this.services.user.isAuthorized, () => {\n this._toastQueue.clearQueue();\n });\n\n this.reaction(() => this.services.user.isAuthorized, (isAuthorized) => {\n if (isAuthorized) {\n // this call will have an actual efect only at app init, otherwise the queue is cleared at authorized state change\n this._toastQueue.processQueue();\n } else {\n this.removeAllToasts();\n }\n }, {\n fireImmediately: true\n });\n\n\n\n this.services.sdk.events.onAppPaused(() => {\n this._setIsAppVisible(false);\n });\n this.services.sdk.events.onAppResumed(() => {\n this._setIsAppVisible(true);\n this._toastQueue.processQueue();\n });\n\n toast.onChange((payload: ToastItem<ToastHandler>) => {\n switch (payload.status) {\n case \"added\":\n // new toast added\n runInAction(() => {\n const pendingToastIndex = this._pendingToasts.findIndex(t => t.toastId === payload.data.toastId);\n if (pendingToastIndex >= 0) {\n this._pendingToasts.splice(pendingToastIndex, 1);\n }\n this._activeToasts.push(payload.data);\n });\n payload.data.onToastShown();\n break;\n case \"updated\":\n // toast updated\n break;\n case \"removed\":\n // toast has been removed\n runInAction(() => {\n const idx = this._activeToasts.findIndex((handler) => handler.toastId === payload.data.toastId);\n if (idx >= 0) {\n this._activeToasts.splice(idx, 1);\n }\n });\n payload.data.onToastClosed();\n break;\n }\n });\n makeObservable(this);\n }\n\n get hasOpenToasters(): boolean {\n return this._activeToasts.length > 0;\n }\n\n @action\n private _setIsAppVisible(isAppVisible: boolean): void {\n this.isAppVisible = isAppVisible;\n }\n\n showAckStandardToast(def: IStandardToastDefinition) {\n return this.showStandardToast({\n ...def,\n contentProps: {\n ...def.contentProps,\n button: def.contentProps.button ? def.contentProps.button : {\n text: this.services.translation.translate('OK'),\n onClick: (closeToast) => {\n closeToast();\n }\n }\n }\n });\n }\n\n showStandardToast(def: IStandardToastDefinition) {\n const { contentProps, ...partiaToastDef } = def;\n return this.showCustomToast({\n ...partiaToastDef,\n renderContent: (handler) => <StandardToastContent {...def.contentProps} handler={handler} />\n });\n }\n\n\n showCustomToast(options: IToastDefinition) {\n\n if (this._allToasts.find(t => t.toastId === options.id)) {\n return;\n }\n\n const toast = new ToastHandler(this.services, options);\n this._pendingToasts.push(toast);\n\n if (options.toastOptions?.timeout && options.toastOptions?.timeout.totalMilliseconds > 0 && !this.isAppVisible) {\n this._toastQueue.addToQueue(toast);\n // this.logger.debug('TOASTER :: SAVED TO LOCAL STORAGE ', toasterParams);\n return;\n }\n toast.show();\n return toast;\n }\n\n\n removeAllToasts() {\n toast.dismiss();\n this._pendingToasts.forEach(t => t.onToastClosed());\n this._pendingToasts = [];\n }\n}","import {FeatureId} from \"./FeatureId\";\n\nexport const FeaturesMaxDisplayCountMap: Record<FeatureId, number> = {\n [FeatureId.OnboardingTour] : 1\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {FeaturesMaxDisplayCountMap} from \"./FeaturesMaxDisplayCountMap\";\nimport {\n FeatureToggleManagementData,\n IFeaturesToggleManagementService\n} from \"./features-toggle-management.service.interface\";\nimport {FeatureId} from \"./FeatureId\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {FeatureToggleManagementController_SetFeatureCounterRequest} from \"../api/api.service\";\n\nexport class FeaturesToggleManagementService extends ServiceBase implements IFeaturesToggleManagementService {\n private _featuresDisplayCount : Partial<Record<FeatureId, number>> = {};\n private _serverCallPromise = Promise.resolve();\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this.reaction(() => this.services.user.isAuthorized,\n () => {\n if(this.services.user.isAuthorized) {\n this._serverCallPromise = this._readFeatureToggleDataFromServer();\n } else {\n this._resetData();\n }\n }, {\n fireImmediately: true\n });\n }\n\n public async shouldShowFeature(featureID: number): Promise<boolean> {\n if(!this.services.user.isAuthorized) {\n // this service not support anonymous users. it's only checks if for specific cid it not shown max times\n return false;\n }\n\n // We still not got answer from the server\n if(Check.isEmpty(this._featuresDisplayCount)) {\n if(!this._serverCallPromise) {\n this._serverCallPromise = this._readFeatureToggleDataFromServer();\n }\n\n try{\n await this._serverCallPromise;\n } catch(err){\n this.services.logger.warning('Fail to read FeatureToggleDataFromServer. err:' + err);\n return false;\n }\n }\n\n return (this._featuresDisplayCount[featureID] ?? 0) < this._getMaxDisplays(featureID)\n }\n\n public async updateFeatureCounter(featureID: number): Promise<void> {\n let displayCount = (this._featuresDisplayCount[featureID] ?? 0) + 1;\n\n const request: FeatureToggleManagementController_SetFeatureCounterRequest = {\n FeatureID: featureID\n };\n\n this._featuresDisplayCount[featureID] = displayCount;\n await this.services.api.featureToggleManagementController.setFeatureCounter(request);\n }\n\n private _getMaxDisplays(featureID: FeatureId) {\n if(FeaturesMaxDisplayCountMap[featureID]) {\n return FeaturesMaxDisplayCountMap[featureID];\n }\n\n // Default is 1.\n return 1;\n }\n\n private async _readFeatureToggleDataFromServer(): Promise<void> {\n try {\n const featuresData = await this.services.api.featureToggleManagementController.getFeaturesDataForCID();\n if (featuresData) {\n this._convertFeatureToggleManagementDataArrayToRecord(featuresData);\n }\n } catch(err){\n this.services.logger.error(\"Fail to read feature toggle data from token.\", err);\n }\n }\n\n private _convertFeatureToggleManagementDataArrayToRecord(featuresToggleData: FeatureToggleManagementData[]) {\n this._featuresDisplayCount = featuresToggleData.reduce((record, obj) => {\n record[obj.FeatureID] = obj.DisplayCount;\n return record;\n }, {});\n }\n\n private _resetData() {\n this._serverCallPromise = Promise.resolve();\n this._featuresDisplayCount = {};\n }\n}\n","import {\n NavigationLinkAdvancedConfiguration, NavigationLinkAdvancedCrossBackMode,\n NavigationLinkAdvancedOpenMode, NavigationLinkBasicOpenMode,\n NavigationLinkBuilderStrategy,\n} from \"../configurations/config-data-sections/navigation-link.configuration\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {isAbsolutUrl} from \"../../../utils/url-utils\";\nimport {MarketingParams} from \"../../../common/interfaces/marketing-params.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {LinkNavigationId} from \"../configurations/config-data-sections/generated-config-const\";\nimport {UriPath} from \"../location/uri-path/uri-path\";\n\nexport class LinkConfigurationParser {\n constructor(public readonly linkId: LinkNavigationId,\n private readonly services: IServiceFactoryExtended) {\n const config = services.configuration.data.links[linkId];\n if(!config) {\n throw new Error(`Missing configuration for ${linkId} link`);\n }\n\n if(Check.isString(config)) {\n this.linkConfiguration = {\n url: config\n };\n } else {\n this.linkConfiguration = config;\n }\n\n }\n\n private readonly linkConfiguration: NavigationLinkAdvancedConfiguration;\n\n get url(): string {\n return this.linkConfiguration.url ?? \"\";\n }\n\n private _getMiniOrbitDefaultOpenMode(): NavigationLinkBasicOpenMode {\n if(this.urlBuilderStrategy === \"useGNWP\") {\n return \"newTab\";\n }\n\n if(isAbsolutUrl(this.url)) {\n const urlBuilder = new URL(this.url);\n if(urlBuilder.origin.toLowerCase() === this.services.window.origin.toLowerCase()) {\n return \"redirect\";\n } else {\n return \"newTab\";\n }\n } else {\n if(this.services.routing.isOrbitRoute(new UriPath(this.url))) {\n return \"clientSideNavigation\";\n } else {\n return \"redirect\";\n }\n }\n }\n\n get openMode(): NavigationLinkAdvancedOpenMode {\n if(!this.linkConfiguration.openMode) {\n if(this.urlBuilderStrategy === \"useGNWP\" || isAbsolutUrl(this.url)) {\n return {\n pc: \"newTab\",\n mobile: \"newTab\",\n hybrid: \"newTab\",\n miniOrbit: this._getMiniOrbitDefaultOpenMode()\n }\n } else {\n return {\n pc: \"clientSideNavigation\",\n mobile: \"clientSideNavigation\",\n hybrid: \"clientSideNavigation\",\n miniOrbit: this._getMiniOrbitDefaultOpenMode()\n }\n }\n\n }\n\n if(Check.isString(this.linkConfiguration.openMode)) {\n return {\n pc: this.linkConfiguration.openMode,\n mobile: this.linkConfiguration.openMode,\n hybrid: this.linkConfiguration.openMode,\n miniOrbit: this._getMiniOrbitDefaultOpenMode()\n }\n }\n\n return {\n pc: this.linkConfiguration.openMode.pc ?? \"newTab\",\n mobile: this.linkConfiguration.openMode.mobile ?? \"newTab\",\n hybrid: this.linkConfiguration.openMode.hybrid ?? \"newTab\",\n miniOrbit: this.linkConfiguration.openMode.miniOrbit ?? this._getMiniOrbitDefaultOpenMode()\n }\n }\n\n get crossBackMode(): NavigationLinkAdvancedCrossBackMode {\n if(!this.linkConfiguration.crossBackMode) {\n if(isAbsolutUrl(this.url)) {\n return {\n pc: \"redirect\",\n mobile: \"redirect\",\n hybrid: \"redirect\"\n }\n } else {\n return {\n pc: \"clientSideNavigation\",\n mobile: \"clientSideNavigation\",\n hybrid: \"clientSideNavigation\",\n }\n }\n\n }\n\n if(Check.isString(this.linkConfiguration.crossBackMode)) {\n return {\n pc: this.linkConfiguration.crossBackMode,\n mobile: this.linkConfiguration.crossBackMode,\n hybrid: this.linkConfiguration.crossBackMode,\n }\n }\n\n return {\n pc: this.linkConfiguration.crossBackMode.pc ?? \"redirect\",\n mobile: this.linkConfiguration.crossBackMode.mobile ?? \"redirect\",\n hybrid: this.linkConfiguration.crossBackMode.hybrid ?? \"redirect\",\n\n }\n }\n\n\n get urlBuilderStrategy(): NavigationLinkBuilderStrategy {\n if(this.linkConfiguration.urlBuilderStrategy) {\n return this.linkConfiguration.urlBuilderStrategy;\n }\n\n if(this.services.user.isAuthorized) {\n if(this._supportsGnwp) {\n return \"useGNWP\";\n } else {\n return \"useUrl\";\n }\n }\n\n return \"useUrl\";\n }\n\n get shouldAppendSCutToUrl(): boolean {\n if(Check.isNullOrUndefined(this.linkConfiguration.shouldAppendSCutToUrl)) {\n return isAbsolutUrl(this.url);\n }\n\n return this.linkConfiguration.shouldAppendSCutToUrl;\n }\n\n private get _supportsGnwp(): boolean {\n switch (this.linkId) {\n case \"pokerLink\":\n case \"sportLink\":\n case \"chatLink\":\n case \"helpLink\":\n return true;\n default:\n return false;\n }\n }\n\n async getGnwpUrl(marketingParams: MarketingParams): Promise<string> {\n const gnwp = await this.services.gnwp;\n switch (this.linkId) {\n case \"pokerLink\":\n return await gnwp.getPokerUrl({\n marketingParams: marketingParams\n });\n case \"sportLink\":\n return await gnwp.getSportUrl({\n marketingParams: marketingParams\n });\n case \"chatLink\":\n return await gnwp.getLiveChatUrl({\n marketingParams: marketingParams\n });\n case \"helpLink\":\n return await gnwp.getHelpPageUrl();\n default:\n throw new Error(`Link ${this.linkId} does not support GNWP`);\n }\n }\n\n get isCrossBackToPokerOrSport(): boolean {\n return (this.linkId === \"pokerLink\" && this.services.crossBrands.isCrossFromPoker)\n || (this.linkId === \"sportLink\" && this.services.crossBrands.isCrossFromSport);\n }\n}","import {ILinksNavigationService, INavigateLinkOptions, IOpenUrlOptions} from \"./links-navigation.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {NavigationLinkBasicOpenMode} from \"../configurations/config-data-sections/navigation-link.configuration\";\nimport {LinkConfigurationParser} from \"./link-configuration-parser\";\nimport {isAbsolutUrl} from \"../../../utils/url-utils\";\nimport {LinkNavigationId} from \"../configurations/config-data-sections/generated-config-const\";\nimport {RegulationNavigationHookContinuationMode} from \"./regulation-hooks/regulation-link-navigation-hook.interface\";\n\n\nexport class LinksNavigationService extends ServiceBase implements ILinksNavigationService {\n\n getLinkUrl(linkId: LinkNavigationId): string {\n return new LinkConfigurationParser(linkId, this.services).url;\n }\n\n private _openBlankWindow(openMode: NavigationLinkBasicOpenMode): Window | null {\n if(openMode === \"newTab\" && !this.services.device.hybrid.isHybrid && !this.services.miniOrbit.isEnabled) {\n // We do this because we try to avoid browser popup blockers.\n try {\n return this.services.window.createBlankWindow();\n } catch (err) {\n this.services.logger.error('Failed to create blank window', err);\n return null;\n }\n\n }\n return null;\n }\n\n async navigateLink(options: INavigateLinkOptions): Promise<void> {\n const hookResponse = await this.services.regulation.current.linksNavigationHook.navigateLink(options);\n if(hookResponse.continuationMode !== RegulationNavigationHookContinuationMode.Continue) {\n return;\n }\n\n options = hookResponse.options ?? options;\n\n const config = new LinkConfigurationParser(options.linkId, this.services);\n\n const openMode = this._getLinkOpenMode(config);\n\n let blankBrowserTab = this._openBlankWindow(openMode);\n\n let link = await this._buildLink(config, options);\n\n if(options.linkHash) {\n let linkHash = options.linkHash;\n if(!linkHash.startsWith('#')) {\n linkHash = '#' + linkHash;\n }\n link = link + linkHash;\n }\n\n await this._navigateToUrl(link, openMode, blankBrowserTab);\n }\n\n\n async openUrl(options: IOpenUrlOptions): Promise<void> {\n\n let openMode: NavigationLinkBasicOpenMode;\n if(options.openMode) {\n openMode = options.openMode\n } else {\n if(isAbsolutUrl(options.url)) {\n openMode = \"newTab\";\n } else {\n openMode = \"clientSideNavigation\";\n }\n }\n\n await this._navigateToUrl(options.url, openMode, this._openBlankWindow(openMode));\n }\n\n private _openInNewTabForMiniOrbit(url: string): void {\n this.services.miniOrbit.openUrl(url);\n }\n\n private _openInNewTabForHybrid(url: string): void {\n this.services.hybrid.openExternalLink(url);\n }\n\n private _openInNewTabForWebApp(url: string, blankBrowserTab: Window | null) {\n if(!isAbsolutUrl(url)) {\n const urlBuilder = new URL(this.services.window.origin);\n urlBuilder.pathname = url;\n url = urlBuilder.href;\n }\n\n if (blankBrowserTab) {\n blankBrowserTab.location = url;\n } else {\n this.services.window.openInNewTab(url);\n }\n }\n\n private async _redirectForMiniOrbit(url: string): Promise<void> {\n this.services.sdk.eventsTrigger.closeNyxSecondWebView();\n await this.services.location.redirect(url);\n }\n\n private async _redirectForHybrid(url: string): Promise<void> {\n this.services.sdk.eventsTrigger.closeNyxSecondWebView();\n await this.services.location.redirect(url);\n }\n\n private async _navigateToUrl(url: string, openMode: NavigationLinkBasicOpenMode, blankBrowserTab: Window | null): Promise<void> {\n switch (openMode) {\n case \"clientSideNavigation\":\n await this.services.location.push(url.toLowerCase());\n break;\n case \"newTab\":\n if(this.services.miniOrbit.isEnabled) {\n this._openInNewTabForMiniOrbit(url);\n } else if(this.services.device.hybrid.isHybrid) {\n this._openInNewTabForHybrid(url);\n } else {\n this._openInNewTabForWebApp(url, blankBrowserTab);\n }\n break;\n case \"redirect\":\n if(this.services.miniOrbit.isEnabled) {\n await this._redirectForMiniOrbit(url);\n } else if(this.services.device.hybrid.isHybrid) {\n await this._redirectForHybrid(url);\n } else {\n await this.services.location.redirect(url);\n }\n break;\n case \"secondWebView\":\n this.services.sdk.eventsTrigger.openUrlInSecondWebView(url);\n break;\n default:\n throw new Error(`Unsupported external brand open mode ${openMode}`)\n\n }\n }\n\n protected async _buildDirectLink(config: LinkConfigurationParser): Promise<string> {\n\n let directLink = config.url;\n\n if(this._getLinkOpenMode(config) !== \"clientSideNavigation\") {\n\n if(!isAbsolutUrl(directLink)) {\n const urlBuilder = new URL(this.services.window.origin);\n urlBuilder.pathname = directLink;\n directLink = urlBuilder.href;\n }\n\n if(config.shouldAppendSCutToUrl) {\n directLink = (await this.services.marketing).appendSCutToUrl(directLink);\n }\n\n directLink = this.services.stateOfResidenceIdentifier.appendUserSelectedStateToLink(directLink);\n }\n\n return directLink;\n }\n\n protected async _buildLink(config: LinkConfigurationParser, options: INavigateLinkOptions): Promise<string> {\n\n if(this._isCrossBackToPokerOrSport(config)) {\n const {token} = await this.services.user.getPlatformToken();\n return `${this.services.crossBrands.crossBackSpecificNavigation.callbackUrl!}?UserInfo=${token}`;\n }\n\n if(config.urlBuilderStrategy === \"useUrl\") {\n return await this._buildDirectLink(config);\n } else {\n return await config.getGnwpUrl(options.marketingParams);\n }\n }\n\n private _isCrossBackToPokerOrSport(config: LinkConfigurationParser): boolean {\n if(!this.services.user.isAuthorized) {\n return false;\n }\n\n return config.isCrossBackToPokerOrSport;\n }\n\n private _getCrossBackMode(config: LinkConfigurationParser): NavigationLinkBasicOpenMode {\n if(this.services.device.hybrid.isHybrid) {\n return config.crossBackMode.hybrid;\n }\n\n if(this.services.device.os.isMobileOS) {\n return config.crossBackMode.mobile;\n }\n\n return config.crossBackMode.pc;\n }\n\n protected _getLinkOpenMode(config: LinkConfigurationParser): NavigationLinkBasicOpenMode {\n\n\n if(this._isCrossBackToPokerOrSport(config)) {\n return this._getCrossBackMode(config);\n }\n\n if(this.services.miniOrbit.isEnabled) {\n return config.openMode.miniOrbit;\n }\n\n if(this.services.device.hybrid.isHybrid) {\n return config.openMode.hybrid;\n }\n\n if(this.services.device.os.isMobileOS) {\n return config.openMode.mobile;\n }\n\n return config.openMode.pc;\n }\n\n\n async openPoker(): Promise<void> {\n await this.navigateLink({\n linkId: \"pokerLink\"\n });\n }\n\n async openSport(): Promise<void> {\n await this.navigateLink({\n linkId: \"sportLink\"\n });\n }\n\n async openResponsibleGaming(): Promise<void> {\n await this.navigateLink({\n linkId: \"responsibleGamingLink\"\n });\n }\n\n async openSecondaryResponsibleGaming(): Promise<void> {\n await this.navigateLink({\n linkId: \"secondaryResponsibleGamingLink\"\n });\n }\n\n async openGamingHistoryPage(): Promise<void> {\n await this.navigateLink({\n linkId: \"gamingHistoryLink\"\n });\n }\n\n async openSelfExclusion(): Promise<void> {\n await this.navigateLink({\n linkId: \"selfExclusionLink\"\n });\n }\n\n async openSelfTest(): Promise<void> {\n await this.navigateLink({\n linkId: \"selfTestLink\"\n });\n }\n\n async openSafeToPlay(): Promise<void> {\n await this.navigateLink({\n linkId: \"safeToPlayLink\"\n });\n }\n\n async openGamblingCommissionLink(): Promise<void> {\n await this.navigateLink({\n linkId: \"gamblingCommissionLink\"\n });\n }\n}","export enum TOAST_TYPES {\n\tTIMED = 'timed_toaster',\n\tACKNOWLEDGE = 'acknowledge_toaster',\n\tACTION = 'action_toaster'\n};\n\nexport interface IUCCToasterParams {\n\tType?: TOAST_TYPES;\n\tMessageID: string | number;\n\tGameTypeID?: string | number;\n\tTitle: string;\n\tSubTitle: string;\n\tDurationInSec: number;\n\tMobileImage: string;\n\tPCImage: string;\n\tIconImagePath: string;\n\tcustomUIConfig: string;\n\tResponseTopicPath: string;\n\tMetaDataParams: string | null;\n\tanalyticsData: {\n\t\tcategory: string;\n\t\taction: string;\n\t\tlabel?: string;\n\t};\n\tLangIso3: string;\n\tclose: boolean;\n\tbuttonText: string;\n\tcallback: () => void;\n\tlayout: number;\n}\n\nexport interface IFirebaseToasterService {}\n","\nexport function safeJsonStringify(jsonObject) {\n try {\n return JSON.stringify(jsonObject);\n } catch(err) {\n return \"\";\n }\n}\n\nexport function safeJsonParse(jsonStr: string, defaultWhenException?: any): any {\n try {\n return JSON.parse(jsonStr);\n } catch(err) {\n return defaultWhenException || \"\";\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {CGPEventSubscription} from \"../sdk/cgp-sdk.interface\";\nimport {IFirebaseToasterService, IUCCToasterParams, TOAST_TYPES} from \"./firebase-toaster.service.interface\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {safeJsonParse} from \"../../../utils/json-helper\";\nimport {GameInfo} from \"../games/game-info\";\nimport {GameModeEnum} from \"../game-runner/interfaces/game-context/game-context-view-model.interface\";\nimport {IStandardToastDefinition} from \"./toaster.service.interface\";\n\nexport class FirebaseToasterService extends ServiceBase implements IFirebaseToasterService {\n private _receivedToasterEvent: CGPEventSubscription;\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this.reaction(() => this.services.user.isAuthorized, (isAuthorized) => {\n if(isAuthorized) {\n this._receivedToasterEvent = this.services.sdk.events.onReceivedToaster(this.onToastMessageReceived);\n } else {\n this._receivedToasterEvent?.off();\n }\n }, {\n fireImmediately: true\n });\n\n // makeObservable(this);\n }\n\n /**\n * Translates the parameters received through firebase to what the wrapper uses ( shorter property names mostly )\n * @param params (Array) -> Message parameters received from firebase\n */\n private onToastMessageReceived = async (params: IUCCToasterParams[]) => {\n // this was added for qa as an alternative to firebase ( in case of firebase received messages, this condition is redundant )\n if (!this.services.user.isAuthorized) {\n this.services.logger.debug('TOASTER [onToastMessageReceived] :: NOT LOGGED IN, QUITTING');\n return;\n }\n\n for (let i = 0; i < params.length; i++) {\n // translate firebase message params to toast data\n const config = params[i];\n\n // let's see if the toast is about a game\n const metaData = Check.isNullOrUndefined(config.MetaDataParams) ? {} : safeJsonParse(config.MetaDataParams, {});\n const gameTypeIDRaw = metaData.GameTypeID || config.GameTypeID;\n let gameInfo: GameInfo | undefined = undefined;\n if (!Check.isNullOrUndefined(gameTypeIDRaw)) {\n const GameTypeIDInt = parseInt(gameTypeIDRaw);\n if (isNaN(GameTypeIDInt) ) {\n throw new Error(\"We got a game type id but it could not be converted to string\");\n }\n gameInfo = await this.services.games.getGameInfo(GameTypeIDInt);\n }\n\n const timeout: number = config.DurationInSec || 0;\n\n // we build the toast data. some of the data is for the content, some for analytics\n const toastData: IStandardToastDefinition = {\n id: config.MessageID,\n // type: config.Type,\n // IToastOptions\n toastOptions: {\n timeout: TimeSpan.fromSeconds(timeout)\n },\n // IStandardToastContentProps\n contentProps: {\n title: config.Title,\n message: config.SubTitle,\n button: undefined,\n image: (this.services.mediaQuery.mAndBelow ? config.MobileImage : config.PCImage) || config.IconImagePath,\n },\n onToastShown: () => {\n if (!Check.isEmpty(config.analyticsData)) {\n this.services.analytics.sendAnalytics(config.analyticsData?.category, config.analyticsData?.action, config.analyticsData?.label);\n }\n }\n // showImageByDefault: config.ShowDefaultImage,\n\n // TODO: This data seems unused. Verify this\n // customUIConfig: config.customUIConfig,\n // responseTopicPath: config.ResponseTopicPath,\n // close: config.close,\n // layout: config.layout,\n };\n\n\n if (gameInfo) {\n // toastData.type = TOAST_TYPES.ACTION;\n toastData.contentProps.button = {\n text: config.buttonText || this.services.translation.translate(\"PLAY\"),\n onClick: (closeToast) => {\n if(gameInfo) {\n this.services.gameRunner.then(gameRunner => {\n gameRunner.openGame({gameInfo, gameMode: GameModeEnum.Real});\n })\n\n }\n closeToast();\n }\n };\n } else if (config.buttonText && config.callback) {\n toastData.contentProps.button = {\n text: config.buttonText,\n onClick: (closeToast) => {\n config.callback();\n closeToast();\n },\n };\n } else if (config.Type === TOAST_TYPES.ACKNOWLEDGE || (!config.Type && !timeout)) {\n // we show by default an OK button if Type is Ackowledge or if Type and timeout are not set\n toastData.contentProps.button = {\n text: this.services.translation.translate(\"OK\"),\n onClick: (closeToast) => {\n closeToast();\n },\n };\n }\n\n this.services.toaster.showStandardToast(toastData);\n }\n }\n\n}","import { makeObservable, observable, runInAction} from \"mobx\";\nimport { IJackpotHandler } from \"../jackpots/jackpot-handler/jackpot-handler.interface\";\nimport { IJackpotData } from \"../jackpots/jackpots.service.interface\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { ServiceBase } from \"../ServiceBase\";\nimport { ITitanJackpotService } from \"./titan-jackpot.service.interface\";\n\nexport class TitanJackpotService extends ServiceBase implements ITitanJackpotService {\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n \n makeObservable(this);\n }\n\n @observable.ref\n jackpotHandler: IJackpotHandler;\n\n\n public updateJackpotHandler(jackpotId: string): void {\n this.services.jackpots.then(jackpots => {\n runInAction(() => {\n this.jackpotHandler = jackpots.currentJackpotsById[jackpotId];\n\n const jackpotData = (this.jackpotHandler?.jackpotData || {}) as IJackpotData;\n\n this.jackpotHandler.forceGradual(jackpotData);\n })\n })\n\n } \n}","import {removeSpecialCharacters} from \"../../../../utils/string-helpers\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\nexport class GameThemeDefinition {\n constructor(public readonly id: number,\n private readonly _translationKey: string,\n private readonly services: IServiceFactoryExtended) {\n this.name = this.services.translation.translate(_translationKey);\n }\n\n public readonly name: string;\n\n isMatch(regEx: RegExp): boolean {\n return Boolean(removeSpecialCharacters(this.name).match(regEx) || removeSpecialCharacters(this._translationKey).match(regEx));\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {GameThemeDefinition} from \"./game-theme-definition/game-theme-definition\";\nimport {GameThemeId} from \"./game-theme-id.enum\";\nimport {IGamesThemeService} from \"./games-theme.service.interface\";\n\nexport class GamesThemeService extends ServiceBase implements IGamesThemeService {\n\n private _allThemes: GameThemeDefinition[] = [\n new GameThemeDefinition(GameThemeId.Adventure, \"Adventure\", this.services),\n new GameThemeDefinition(GameThemeId.AncientCivilization, \"Ancient Civilization\", this.services),\n new GameThemeDefinition(GameThemeId.Wildlife, \"Wildlife\", this.services),\n new GameThemeDefinition(GameThemeId.ClassicStyle, \"Classic Style\", this.services),\n new GameThemeDefinition(GameThemeId.Asian, \"Asian\", this.services),\n new GameThemeDefinition(GameThemeId.TableGames, \"Table Games\", this.services),\n new GameThemeDefinition(GameThemeId.MoviesAndMusic, \"Movies and Music\", this.services),\n new GameThemeDefinition(GameThemeId.Fruit, \"Fruit and Candy\", this.services),\n new GameThemeDefinition(GameThemeId.MoneyAndLeisure, \"Money and Leisure\", this.services),\n new GameThemeDefinition(GameThemeId.ComicsAndCartoons, \"Comics and Cartoons\", this.services),\n new GameThemeDefinition(GameThemeId.Irish, \"Irish\", this.services),\n new GameThemeDefinition(GameThemeId.Arcade, \"Arcade\", this.services),\n new GameThemeDefinition(GameThemeId.DiamondsAndGems, \"Diamonds and Gems\", this.services),\n new GameThemeDefinition(GameThemeId.FantasyAndFolklore, \"Fantasy and Folklore\", this.services),\n new GameThemeDefinition(GameThemeId.Seasonal, \"Seasonal\", this.services),\n new GameThemeDefinition(GameThemeId.Egyptian, \"Egyptian\", this.services),\n new GameThemeDefinition(GameThemeId.FarmAndPets, \"Farm and Pets\", this.services),\n new GameThemeDefinition(GameThemeId.Sports, \"Sports\", this.services),\n new GameThemeDefinition(GameThemeId.LiveCasino, \"Live Casino\", this.services),\n new GameThemeDefinition(GameThemeId.Arabic, \"Arabic\", this.services),\n new GameThemeDefinition(GameThemeId.GreekMythology, \"Greek Mythology\", this.services),\n new GameThemeDefinition(GameThemeId.NA, \"N/A\", this.services),\n new GameThemeDefinition(GameThemeId.SpaceAndSciFi, \"Space and Sci-fi\", this.services),\n new GameThemeDefinition(GameThemeId.ScratchCards, \"Scratch Cards\", this.services),\n new GameThemeDefinition(GameThemeId.Fish, \"Fish\", this.services),\n new GameThemeDefinition(GameThemeId.Mexican, \"Mexican\", this.services),\n new GameThemeDefinition(GameThemeId.Xmas, \"Xmas\", this.services),\n new GameThemeDefinition(GameThemeId.Bingo, \"Bingo\", this.services),\n new GameThemeDefinition(GameThemeId.ClassicStyleModernized, \"Classic Style Modernized\", this.services),\n new GameThemeDefinition(GameThemeId.AztecIncaMayan, \"Aztec Inca Mayan\", this.services),\n new GameThemeDefinition(GameThemeId.Crime, \"Crime\", this.services),\n new GameThemeDefinition(GameThemeId.WildWest, \"Wild West\", this.services),\n new GameThemeDefinition(GameThemeId.CandyAndSweets, \"Candy And Sweets\", this.services),\n new GameThemeDefinition(GameThemeId.GoldMining, \"Gold Mining\", this.services),\n new GameThemeDefinition(GameThemeId.VikingsAndNordicMythology, \"Vikings And Nordic Mythology\", this.services),\n ]\n\n findThemes(regEx: RegExp): number[] {\n const foundThemes: number[] = [];\n\n this._allThemes.forEach(theme => {\n if (theme.isMatch(regEx)) {\n foundThemes.push(theme.id)\n }\n })\n\n return foundThemes;\n }\n\n getGameThemeDefinition(gameThemeId: number): GameThemeDefinition {\n return this._allThemes.find(gameThemeDefinition => gameThemeDefinition.id === gameThemeId);\n }\n}","import {removeSpecialCharacters} from \"../../../../utils/string-helpers\";\n\nexport class GameVendorDefinition {\n constructor(public readonly id: number,\n public readonly name: string,\n public readonly tags?: string[]) {\n }\n\n isMatch(regEx: RegExp): boolean {\n return this._nameIsMatch(regEx) || this._anyTagIsMatch(regEx);\n }\n\n private _nameIsMatch(regEx: RegExp): boolean {\n return Boolean(removeSpecialCharacters(this.name).match(regEx));\n }\n\n private _anyTagIsMatch(regEx: RegExp): boolean {\n return this.tags?.reduce((prevResult, currentTag) => {\n if (Boolean(removeSpecialCharacters(currentTag).match(regEx))) {\n return true;\n }\n return prevResult;\n }, false);\n }\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {GameVendorDefinition} from \"./game-vendor-definition.ts/game-vendor-definition\";\nimport {GameVendorId} from \"./game-vendor-id.enum\";\nimport {IGamesVendorService} from \"./games-vendor.service.interface\";\n\nexport class GamesVendorService extends ServiceBase implements IGamesVendorService {\n\n private _allVendors: GameVendorDefinition[] = [\n new GameVendorDefinition(GameVendorId.V_888, \"888\"),\n new GameVendorDefinition(GameVendorId.V_AGS, \"AGS\"),\n new GameVendorDefinition(GameVendorId.V_Amatic, \"Amatic\"),\n new GameVendorDefinition(GameVendorId.V_Authentic, \"Authentic\"),\n new GameVendorDefinition(GameVendorId.V_Ainsworth, \"Ainsworth\"),\n new GameVendorDefinition(GameVendorId.V_Blueprint, \"Blueprint\"),\n new GameVendorDefinition(GameVendorId.V_Darwin, \"Darwin\"),\n new GameVendorDefinition(GameVendorId.V_EGT, \"Amusnet\", [\"EGT\"]),\n new GameVendorDefinition(GameVendorId.V_Elk, \"Elk\"),\n new GameVendorDefinition(GameVendorId.V_Evolution, \"Evolution\"),\n new GameVendorDefinition(GameVendorId.V_Eyecon, \"Eyecon\"),\n new GameVendorDefinition(GameVendorId.V_GamesGlobal, \"Games Global\"),\n new GameVendorDefinition(GameVendorId.V_GamingRealms, \"Gaming Realms\"),\n new GameVendorDefinition(GameVendorId.V_Gamomat, \"Gamomat\"),\n new GameVendorDefinition(GameVendorId.V_Greentube, \"Greentube\"),\n new GameVendorDefinition(GameVendorId.V_H5, \"H5\"),\n new GameVendorDefinition(GameVendorId.V_Habanero, \"Habanero\"),\n new GameVendorDefinition(GameVendorId.V_IGT, \"IGT\"),\n new GameVendorDefinition(GameVendorId.V_Inspired, \"Inspired\"),\n new GameVendorDefinition(GameVendorId.V_iSoftBet, \"iSoftBet\"),\n new GameVendorDefinition(GameVendorId.V_LightningBox, \"Lightning Box\"),\n new GameVendorDefinition(GameVendorId.V_LNW, \"LNW\"),\n new GameVendorDefinition(GameVendorId.V_LNW2, \"LNW2\"),\n new GameVendorDefinition(GameVendorId.V_Merkur, \"Merkur\"),\n new GameVendorDefinition(GameVendorId.V_MGA, \"MGA\"),\n new GameVendorDefinition(GameVendorId.V_Netent, \"Netent\"),\n new GameVendorDefinition(GameVendorId.V_NetEnt, \"NetEnt\"),\n new GameVendorDefinition(GameVendorId.V_NextGenBigTime, \"Next_Gen Big Time\"),\n new GameVendorDefinition(GameVendorId.V_NextGenChanceInteractive, \"NextGen_Chance Interactive\"),\n new GameVendorDefinition(GameVendorId.V_NoLimitCity, \"Nolimit City\"),\n new GameVendorDefinition(GameVendorId.V_PlayNGo, \"Play N Go\"),\n new GameVendorDefinition(GameVendorId.V_PlayTech, \"PlayTech\"),\n new GameVendorDefinition(GameVendorId.V_Pragmatic, \"Pragmatic\"),\n new GameVendorDefinition(GameVendorId.V_Quickspin, \"Quickspin\"),\n new GameVendorDefinition(GameVendorId.V_RedRake, \"Red Rake\"),\n new GameVendorDefinition(GameVendorId.V_RedTiger, \"Red Tiger\"),\n new GameVendorDefinition(GameVendorId.V_RubyPlay, \"Ruby Play\"),\n new GameVendorDefinition(GameVendorId.V_Sigma, \"Sigma\"),\n new GameVendorDefinition(GameVendorId.V_Skywind, \"Skywind\"),\n new GameVendorDefinition(GameVendorId.V_Spribe, \"Spribe\"),\n new GameVendorDefinition(GameVendorId.V_Thunderkick, \"Thunderkick\"),\n new GameVendorDefinition(GameVendorId.V_Wizard, \"Wizard\"),\n new GameVendorDefinition(GameVendorId.V_WMG, \"WMG\"),\n new GameVendorDefinition(GameVendorId.V_Yggdrasil, \"Yggdrasil\"),\n new GameVendorDefinition(GameVendorId.V_Everi, \"Everi\"),\n new GameVendorDefinition(GameVendorId.V_PushGaming, \"Push Gaming\"),\n new GameVendorDefinition(GameVendorId.V_GoldenRace, \"GoldenRace\"),\n new GameVendorDefinition(GameVendorId.V_CTXM, \"CTXM\"),\n new GameVendorDefinition(GameVendorId.V_vsGaming, \"vsGaming\"),\n new GameVendorDefinition(GameVendorId.V_Electracade, \"Electracade\"),\n new GameVendorDefinition(GameVendorId.V_Rival, \"Rival\"),\n new GameVendorDefinition(GameVendorId.V_Dynamite, \"Dynamite\"),\n new GameVendorDefinition(GameVendorId.V_Ashgaming, \"Ashgaming\"),\n new GameVendorDefinition(GameVendorId.V_Crypto, \"Crypto\"),\n new GameVendorDefinition(GameVendorId.V_BlueSq, \"BlueSq\"),\n new GameVendorDefinition(GameVendorId.V_Bellfruit, \"Bellfruit\"),\n new GameVendorDefinition(GameVendorId.V_Sportech, \"Sportech\"),\n new GameVendorDefinition(GameVendorId.V_WagerWorks, \"Wager Works\"),\n new GameVendorDefinition(GameVendorId.V_Betlow, \"Betlow\"),\n new GameVendorDefinition(GameVendorId.V_Fremantle, \"Fremantle\"),\n new GameVendorDefinition(GameVendorId.V_Gamesq, \"Gamesq\"),\n new GameVendorDefinition(GameVendorId.V_DSL, \"DSL\"),\n new GameVendorDefinition(GameVendorId.V_Ponsbic, \"Ponsbic\"),\n new GameVendorDefinition(GameVendorId.V_Endemol, \"Endemol\"),\n new GameVendorDefinition(GameVendorId.V_Mazooma, \"Mazooma\"),\n new GameVendorDefinition(GameVendorId.V_Genesis, \"Genesis\"),\n new GameVendorDefinition(GameVendorId.V_RevolverGaming, \"Revolver Gaming\"),\n new GameVendorDefinition(GameVendorId.V_Kambi, \"Kambi\"),\n new GameVendorDefinition(GameVendorId.V_Ingenuity, \"Ingenuity\"),\n new GameVendorDefinition(GameVendorId.V_UniversalStudios, \"Universal Studios\"),\n new GameVendorDefinition(GameVendorId.V_BallyWulff, \"Bally Wulff\"),\n new GameVendorDefinition(GameVendorId.V_Skilzz, \"Skilzz\"),\n new GameVendorDefinition(GameVendorId.V_NorthernLight, \"Northern Light\"),\n new GameVendorDefinition(GameVendorId.V_Gamevy, \"Gamevy\"),\n new GameVendorDefinition(GameVendorId.V_Playson, \"Playson\"),\n new GameVendorDefinition(GameVendorId.V_Spectate, \"Spectate\"),\n new GameVendorDefinition(GameVendorId.V_PGSoft, \"PGSoft\"),\n new GameVendorDefinition(GameVendorId.V_RFranco, \"RFranco\"),\n new GameVendorDefinition(GameVendorId.V_4theplayer, \"4theplayer\"),\n new GameVendorDefinition(GameVendorId.V_Realistic, \"Realistic\"),\n new GameVendorDefinition(GameVendorId.V_Oryx, \"Oryx\"),\n new GameVendorDefinition(GameVendorId.V_ReelPlay, \"Reel Play\"),\n new GameVendorDefinition(GameVendorId.V_Hacksaw, \"Hacksaw\"),\n new GameVendorDefinition(GameVendorId.V_1x2, \"1x2\"),\n new GameVendorDefinition(GameVendorId.V_Leap, \"Leap\"),\n new GameVendorDefinition(GameVendorId.V_Core, \"Core\"),\n new GameVendorDefinition(GameVendorId.V_ReelNRG, \"ReelNRG\"),\n new GameVendorDefinition(GameVendorId.V_IronDog, \"IronDog\"),\n new GameVendorDefinition(GameVendorId.V_Endorphina, \"Endorphina\"),\n new GameVendorDefinition(GameVendorId.V_Betsoft, \"Betsoft\"),\n new GameVendorDefinition(GameVendorId.V_Playzido, \"Playzido\"),\n new GameVendorDefinition(GameVendorId.V_PlayzidoOthers, \"Playzido Others\"),\n new GameVendorDefinition(GameVendorId.V_TomHorn, \"Tom Horn\"),\n new GameVendorDefinition(GameVendorId.V_NeoGames, \"Neo Games\"),\n new GameVendorDefinition(GameVendorId.V_BFGames, \"BFGames\"),\n new GameVendorDefinition(GameVendorId.V_Kalamba, \"Kalamba\"),\n new GameVendorDefinition(GameVendorId.V_GiveMe, \"Give Me\"),\n new GameVendorDefinition(GameVendorId.V_GoldenHero, \"Golden Hero\"),\n new GameVendorDefinition(GameVendorId.V_2by2, \"2by2\"),\n new GameVendorDefinition(GameVendorId.V_PlankGaming, \"Plank Gaming\"),\n new GameVendorDefinition(GameVendorId.V_BulletproofGames, \"Bulletproof Games\"),\n new GameVendorDefinition(GameVendorId.V_Wazdan, \"Wazdan\"),\n new GameVendorDefinition(GameVendorId.V_PlayzidoReelplay, \"Playzido Reelplay\"),\n new GameVendorDefinition(GameVendorId.V_Gong, \"Gong\"),\n new GameVendorDefinition(GameVendorId.V_DWG, \"DWG\"),\n new GameVendorDefinition(GameVendorId.V_TripleCherry, \"Triple Cherry\"),\n new GameVendorDefinition(GameVendorId.V_Spearhead, \"Spearhead\"),\n new GameVendorDefinition(GameVendorId.V_Spinomenal, \"Spinomenal\"),\n new GameVendorDefinition(GameVendorId.V_CIRSA, \"CIRSA\"),\n new GameVendorDefinition(GameVendorId.V_Funfair, \"Funfair\"),\n new GameVendorDefinition(GameVendorId.V_GreenJade, \"GreenJade\"),\n new GameVendorDefinition(GameVendorId.V_NazionaleElectronica, \"Nazionale Electronica\"),\n new GameVendorDefinition(GameVendorId.V_Booming, \"Booming\"),\n new GameVendorDefinition(GameVendorId.V_Betixon, \"Betixon\"),\n new GameVendorDefinition(GameVendorId.V_NetGaming, \"Net Gaming\"),\n new GameVendorDefinition(GameVendorId.V_BGaming, \"BGaming\"),\n new GameVendorDefinition(GameVendorId.V_BlueHorn, \"Blue Horn\"),\n new GameVendorDefinition(GameVendorId.V_SpinPlay, \"Spin Play\"),\n new GameVendorDefinition(GameVendorId.V_Arcadia, \"Arcadia\"),\n new GameVendorDefinition(GameVendorId.V_Stakelogic, \"Stakelogic\"),\n new GameVendorDefinition(GameVendorId.V_Live5, \"Live5\"),\n new GameVendorDefinition(GameVendorId.V_Swintt, \"Swintt\"),\n new GameVendorDefinition(GameVendorId.V_Edict, \"Edict\"),\n new GameVendorDefinition(GameVendorId.V_GameArt, \"Game Art\"),\n new GameVendorDefinition(GameVendorId.V_LadyLuck, \"Lady Luck\"),\n new GameVendorDefinition(GameVendorId.V_SmartSoft, \"SmartSoft\"),\n new GameVendorDefinition(GameVendorId.V_Spinberry, \"Spinberry\"),\n new GameVendorDefinition(GameVendorId.V_TopSpin, \"Top Spin\"),\n new GameVendorDefinition(GameVendorId.V_eZugi, \"eZugi\"),\n new GameVendorDefinition(GameVendorId.V_IndigoMagic, \"Indigo Magic\"),\n new GameVendorDefinition(GameVendorId.V_AtomicLabs, \"Atomic Labs\"),\n new GameVendorDefinition(GameVendorId.V_Bluberi, \"Bluberi\"),\n new GameVendorDefinition(GameVendorId.V_RAW, \"RAW\"),\n new GameVendorDefinition(GameVendorId.V_Reevo, \"Reevo\"),\n new GameVendorDefinition(GameVendorId.V_WhiteHat, \"White Hat\"),\n new GameVendorDefinition(GameVendorId.V_EGTDigital, \"EGT Digital\")\n ];\n\n findVendors(regEx: RegExp): number[] {\n const foundVendors: number[] = [];\n\n this._allVendors.forEach(theme => {\n if (theme.isMatch(regEx)) {\n foundVendors.push(theme.id)\n }\n })\n\n return foundVendors;\n }\n getVendor(gameVendorId: number): GameVendorDefinition {\n return this._allVendors.find(gameThemeDefinition => gameThemeDefinition.id === gameVendorId);\n }\n}","import {IPlayerMessagesService} from \"./player-messages.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {delay} from \"../../../utils/delay\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nexport class PlayerMessagesService extends ServiceBase implements IPlayerMessagesService {\n\n waitForPlayerMessagesReady(): Promise<void> {\n if(this.services.sdk.isPlayerMessagesConnected) {\n return Promise.resolve();\n }\n\n return new Promise<void>(resolve => {\n const subscription = this.services.sdk.events.onPlayerMessagesConnected(async () => {\n subscription?.off();\n await delay(TimeSpan.fromSeconds(1));\n resolve();\n })\n });\n }\n\n}","import {observable, makeObservable} from \"mobx\";\nimport {IVideoSlidesFilter as IVideoSlidesFilterConfig} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport {IServiceFactory} from \"../../../service-factory.interface\";\nimport {IVideoSlidesFilterViewModel} from \"./video-slides-filter-view-model.interface\";\n\nexport class VideoSlidesFilterModel implements IVideoSlidesFilterViewModel {\n constructor(protected readonly services: IServiceFactory, protected readonly videoSlidesFilterConfig: IVideoSlidesFilterConfig) {\n makeObservable(this);\n this.icon = this.videoSlidesFilterConfig.icon;\n }\n\n get id(): string {\n return this.videoSlidesFilterConfig.id;\n }\n\n get title(): string {\n return this.videoSlidesFilterConfig.translationKey\n }\n icon?: string;\n\n @observable.ref\n protected _on: boolean = false;\n get on(): boolean {\n return this.services.gamesFilter.isFilterApplied(this.videoSlidesFilterConfig.id);\n }\n\n get shouldBeDisplayed(): boolean {\n let isValidFilterForCurrentArena = this.services.gamesFilter.isValidFilter(this.videoSlidesFilterConfig.id);\n //let hasGamesForCurrentFilter = this.services.gamesFilter.getNumberOfGamesBeforeUserApply([this.videoSlidesFilterConfig.id]) > 0\n return isValidFilterForCurrentArena;\n }\n\n async applyFilter(): Promise<void> {\n await this.services.gamesFilter.applyFilters([this.videoSlidesFilterConfig.id]);\n }\n\n}","export enum VideoTypeEnum {\n VideoStream,\n LiveStream\n}","import {IVideoResolution} from \"../../video/models/video-player.view-model.interface\";\n\nexport type SlideType = 'LiveStream' | 'VideoStream' | 'Promotion';\n\nexport enum VideoSlidesAnalyticsEventEnum {\n\n /**\n * Reported when the slide becomes active (becomes the current slide)\n */\n SlideActivated = 'SlideActivated',\n\n /**\n * Reported when the slide becomes inactive active.\n */\n SlideDeactivated = 'SlideDeactivated',\n\n /**\n * Send when the video started playing\n */\n PlayVideoStarted = \"PlayVideoStarted\",\n\n /**\n * Reported when the user click on the play game button from a video slide.\n */\n PlayGame = \"PlayGame\",\n\n /**\n * Reported when the user bookmark a game using the bookmark button.\n */\n BookGame = \"BookGame\",\n\n /**\n * Reported when a bookmark for a game is removed\n */\n RemoveBookedGame = \"RemoveBookedGame\",\n\n /**\n * Reported when the user mutes the video sound\n */\n Mute = \"Mute\",\n\n /**\n * Reported when the user unmutes the video sound\n */\n Unmute = \"Unmute\",\n\n /**\n * Reported when the user click on the retry play button and this attempt was successful.\n */\n RetryPlayVideoSuccess = \"RetryPlayVideoSuccess\",\n\n /**\n * Reported when an attempt to retry a failed video also fails.\n */\n RetryPlayVideoError = 'RetryPlayVideoError',\n\n /**\n * Reported when the video is paused due to the application browser tab becomes inactive.\n */\n PauseVideoOnAppSleep = \"PauseVideoOnAppSleep\",\n\n /**\n * Triggered when resuming a video play was successful. Resume play happens for example when the user comes back on a previously inactive browser tab.\n */\n ResumePlayVideoSuccess = \"ResumePlayVideoSuccess\",\n\n /**\n * Reported when there is an error while resuming a video play that was paused previously because of the browser tab becoming inactive.\n */\n ResumePlayVideoError = 'ResumePlayVideoError',\n\n /**\n * Reported when there was an error playing a video\n */\n PlayVideoError = 'PlayVideoError',\n\n /**\n * Reported when there was an error in the preload stage of the video.\n */\n PreloadVideoError = 'PreloadVideoError',\n\n /**\n * Reported when there was an error loading the video poster\n */\n VideoPosterLoadError = 'VideoPosterLoadError',\n\n /**\n * Reported when there are more than 15 dropped video frames.\n */\n DroppedVideoFrames = 'DroppedVideoFrames',\n\n /**\n * Reported when the watch time reach 2 minutes for a live stream video.\n */\n VideoWatchTimeLimitReached = 'VideoWatchTimeLimitReached',\n\n /**\n * Reported when the video resolution changed.\n */\n VideoResolutionChanged = 'VideoResolutionChanged',\n\n /**\n * Reported when the video player does buffering but only if the buffering time is more than 1 second.\n */\n Buffering = \"Buffering\",\n\n\n}\n\nexport interface IVideoSlidesAnalyticsData {\n eventName: VideoSlidesAnalyticsEventEnum;\n\n /**\n * Can be 'LiveStream' | 'VideoStream' | 'Promotion'\n */\n slideType: SlideType;\n\n /**\n * The ID of the game that is shown in the current slide\n */\n gameType: number;\n\n /**\n * The name of the game that is shown in the current slide\n */\n gameName: string;\n\n /**\n * The video total duration time.\n */\n videoDuration?: number;\n\n /**\n * How long the user watched this video on this session. If for example the user watches 10 seconds and swipe to the next video then 10 seconds will be reported.\n * But if then swipe back and watch another 5 seconds and swipe again to the next slide then 15 seconds will be reported.\n */\n videoWatchTime: number;\n\n /**\n * How much time the user spend on the current slide from the moment the slide was activated until the slide was deactivated.\n * Reported only with the SlideDeactivated event.\n */\n slideActiveTime?: number;\n\n /**\n * It is true when the videoWatchTime reach 2 minutes for a live stream video.\n */\n watchTimeLimitReached: boolean;\n\n /**\n * The error name for the events that reports errors\n */\n errorName: string;\n\n /**\n * The error message for the events that reports errors\n */\n errorMessage: string;\n\n /**\n * True if video sound is muted\n */\n isMuted: boolean;\n\n /**\n * True if video is in the playing mode\n */\n isPlaying: boolean;\n\n /**\n * The number of dropped frames. It is reported only if droppedFrames > 15\n */\n droppedFrames?: number;\n\n /**\n * The video resolution before the resolution change occurred. It is reported only with the VideoResolutionChanged event\n */\n previousResolution?: IVideoResolution;\n\n /**\n * Current video resolution.\n */\n currentResolution: IVideoResolution;\n\n /**\n * Current filter ID selected by the user in the video-slides page\n */\n currentFilter: string;\n\n /**\n * The total number of slides for the current applied filter\n */\n slidesCount: number;\n\n /**\n * The index position of the slide. This value can be between 0 and slidesCount - 1\n */\n realSlideIndex: number;\n\n /**\n * The video slides swiper is a circular (infinite) swiper. This means that the swiping down never ends.\n * This value can be higher than slidesCount - 1 and when it is higher it means that the user swiped at least once through all the available slides.\n */\n virtualSlideIndex: number;\n\n /**\n * The direction of the swipe.\n * -1 => Go to previous\n * 1 => Go to next slide\n */\n swipeDirection: number;\n\n /**\n * Reported when the video player does buffering.\n * It is reported along with the Buffering event only if the buffering time is higher than 1 second.\n */\n bufferingTime: number;\n}","import {VideoSlidesFilterModel} from \"./video-slides-filter.model\";\n\nexport class ForYouVideoSlidesFilter extends VideoSlidesFilterModel {\n get on(): boolean {\n return this.services.gamesFilter.currentAppliedFiltersIds.length < 1;\n }\n\n get shouldBeDisplayed(): boolean {\n return true;\n }\n\n async applyFilter(): Promise<void> {\n await this.services.gamesFilter.clearFilters();\n }\n}","import {IVideoSlidesRuleConfig} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {ISlideRuleModel} from \"./slide-rule-model.interface\";\n\nexport abstract class SlideRuleBaseModel implements ISlideRuleModel {\n constructor(private readonly ruleConfig: IVideoSlidesRuleConfig,\n private readonly games: GameInfo[],\n protected readonly services: IServiceFactoryExtended) {\n }\n\n protected abstract createVideoSlideRenderer(gameInfo: GameInfo): ISlideRenderer;\n\n private _currentIndex = 0;\n\n appendToChunk(currentChunkContent: ISlideRenderer[]): ISlideRenderer[] {\n\n const slice = this.games.slice(this._currentIndex, this._currentIndex + this.ruleConfig.slidesChunkSize)\n .map(gameInfo => this.createVideoSlideRenderer(gameInfo))\n\n this._currentIndex += this.ruleConfig.slidesChunkSize;\n\n return [\n ...currentChunkContent,\n ...slice\n ];\n }\n\n}","import {IVideoAnalyticsReporter} from \"../../video/models/analytics/video-analytics-reporter.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {IVideoPlayerViewModel, IVideoResolution} from \"../../video/models/video-player.view-model.interface\";\nimport {VideoTypeEnum} from \"../../video/models/video-type.enum\";\nimport {\n IVideoSlidesAnalyticsData,\n SlideType,\n VideoSlidesAnalyticsEventEnum\n} from \"./video-slides-analytics-data.interface\";\nimport {IStructuredLogger} from \"../../../../common/interfaces/structured-logging-service-interface\";\nimport {IVideoSwiperSlideController} from \"../models/video-swiper-slide-controller.interface\";\nimport {SwipeDirectionEnum} from \"../../../components/spark-swiper/models/spark-swiper-slide-controller.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nexport class VideoSlidesAnalyticsReporter implements IVideoAnalyticsReporter {\n constructor(private readonly gameInfo: GameInfo,\n private readonly videoType: VideoTypeEnum,\n private readonly videoSlideController: IVideoSwiperSlideController,\n private readonly services: IServiceFactoryExtended) {\n }\n\n private get slideType(): SlideType {\n if(this.videoType === VideoTypeEnum.VideoStream) {\n return 'VideoStream';\n } else {\n return 'LiveStream';\n }\n }\n\n private get videoPlayer(): IVideoPlayerViewModel {\n return this.videoSlideController.videoPlayer;\n }\n\n private _roundTime(seconds: number): number {\n return Math.round(seconds * 100) / 100;\n }\n\n private _createLogger(eventData: Partial<IVideoSlidesAnalyticsData>): IStructuredLogger {\n\n const videoPlayer = this.videoPlayer;\n\n eventData = {\n slideType: this.slideType,\n gameType: this.gameInfo.gameType,\n gameName: this.gameInfo.title,\n videoWatchTime: this._roundTime(videoPlayer.watchTime.totalSeconds),\n isMuted: videoPlayer.isMuted,\n isPlaying: videoPlayer.isPlaying,\n currentResolution: videoPlayer.resolution,\n watchTimeLimitReached: videoPlayer.watchTimeLimitReached,\n virtualSlideIndex: this.videoSlideController.itemIndex,\n realSlideIndex: this.videoSlideController.realIndex,\n slidesCount: this.services.videoSlides.swiperController.getItemsCount(),\n currentFilter: this.services.videoSlides.currentAppliedFilter.id,\n ...eventData\n };\n\n if(this.videoType !== VideoTypeEnum.LiveStream) {\n eventData.videoDuration = this._roundTime(videoPlayer.videoDurationInSeconds);\n }\n\n return this.services.analytics.getLogger({\n videoSlides: {\n ...eventData\n }\n }).setCorrelationId(this.services.tools.getGuid())\n .setEventType('videoSlides', 'Log', 'Analytics');\n }\n\n reportPlayStarted(): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.PlayVideoStarted\n }).info();\n }\n\n reportRetryPlaySuccess() {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.RetryPlayVideoSuccess\n }).info();\n }\n\n reportResumePlaySuccess() {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.ResumePlayVideoSuccess\n }).info();\n }\n\n reportPauseOnAppSleep() {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.PauseVideoOnAppSleep\n }).info();\n }\n\n private _reportError(eventName: VideoSlidesAnalyticsEventEnum, error: any): void {\n this._createLogger({\n eventName: eventName,\n errorName: error.name ?? \"\",\n errorMessage: error.message ?? \"\"\n }).info();\n }\n\n reportPreloadError(error: any): void {\n this._reportError(VideoSlidesAnalyticsEventEnum.PreloadVideoError, error);\n }\n\n reportPlayError(error: any): void {\n this._reportError(VideoSlidesAnalyticsEventEnum.PlayVideoError, error);\n }\n\n reportRetryPlayError(error: any): void {\n this._reportError(VideoSlidesAnalyticsEventEnum.RetryPlayVideoError, error);\n }\n\n reportResumePlayError(error: any): void {\n this._reportError(VideoSlidesAnalyticsEventEnum.ResumePlayVideoError, error);\n }\n\n reportPosterLoadFailure(error: any): void {\n this._reportError(VideoSlidesAnalyticsEventEnum.VideoPosterLoadError, error);\n }\n\n reportDroppedFrames(droppedVideoFrames: number): void {\n if(droppedVideoFrames < 15 ) {\n return;\n }\n\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.DroppedVideoFrames,\n droppedFrames: droppedVideoFrames\n }).info();\n }\n\n reportWatchTimeLimitReached(): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.VideoWatchTimeLimitReached,\n }).info();\n }\n\n reportSlideActivated(swipeDirection: SwipeDirectionEnum): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.SlideActivated,\n swipeDirection: swipeDirection\n }).info();\n }\n\n\n reportSlideDeactivated(params: {swipeDirection: SwipeDirectionEnum; slideActiveTime: TimeSpan}): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.SlideDeactivated,\n swipeDirection: params.swipeDirection,\n slideActiveTime: this._roundTime(params.slideActiveTime.totalSeconds)\n }).info();\n }\n\n reportVideoResolutionChanged(previousResolution: IVideoResolution, currentResolution: IVideoResolution): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.VideoResolutionChanged,\n previousResolution: previousResolution,\n currentResolution: currentResolution\n }).info();\n }\n\n reportBufferingTime(bufferingTime: TimeSpan): void {\n if(bufferingTime.totalSeconds > 1) {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.Buffering,\n bufferingTime: bufferingTime.totalSeconds\n }).info();\n }\n }\n\n reportPlayGame(): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.PlayGame\n }).info();\n }\n\n reportBookedGame(): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.BookGame\n }).info();\n }\n\n reportRemoveBookedGame(): void {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.RemoveBookedGame\n }).info();\n }\n\n reportMute() {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.Mute\n }).info();\n }\n\n reportUnmute() {\n this._createLogger({\n eventName: VideoSlidesAnalyticsEventEnum.Unmute\n }).info();\n }\n}","import React from 'react';\nimport {IAfterActivateSlideRendererContext, IBeforeDeactivateSlideRendererContext,\n ISlideRenderer\n} from \"../video-slides.service.interface\";\nimport {IVideoSwiperSlideController} from \"../models/video-swiper-slide-controller.interface\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {VideoSlidesAnalyticsReporter} from \"../analytics/video-slides-analytics-reporter\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {VideoTypeEnum} from \"../../video/models/video-type.enum\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\n\nexport abstract class VideoSlideBaseRenderer implements ISlideRenderer {\n\n constructor(protected readonly gameInfo: GameInfo, protected readonly videoType: VideoTypeEnum, protected readonly services: IServiceFactoryExtended) {\n\n }\n\n protected abstract _renderVideoSlide(context: IVideoSwiperSlideController, uniqueKey: string): React.ReactElement;\n\n private _analyticsReporter: VideoSlidesAnalyticsReporter | null = null;\n\n\n render(context: IVideoSwiperSlideController): React.ReactElement {\n this._analyticsReporter = new VideoSlidesAnalyticsReporter(this.gameInfo, this.videoType, context, this.services);\n context.videoPlayer.attachAnalyticsReporter(this._analyticsReporter);\n return this._renderVideoSlide(context, `${this.gameInfo.gameType}_${context.itemIndex}`);\n }\n\n private _slideActivationTime: number = Date.now();\n onAfterActivated(context: IAfterActivateSlideRendererContext): void {\n this._slideActivationTime = Date.now();\n this._analyticsReporter?.reportSlideActivated(context.swipeDirection);\n }\n\n onBeforeDeactivate(context: IBeforeDeactivateSlideRendererContext): void {\n this._analyticsReporter?.reportSlideDeactivated({\n swipeDirection: context.swipeDirection,\n slideActiveTime: TimeSpan.fromMilliseconds( Date.now() - this._slideActivationTime)\n });\n }\n\n protected _playGame = async () => {\n\n this._analyticsReporter?.reportPlayGame();\n\n await this.gameInfo.open({\n isRealMode: true\n });\n }\n\n protected _onBookGame = () => {\n this._analyticsReporter?.reportBookedGame();\n }\n\n protected _onRemoveBookedGame = () => {\n this._analyticsReporter?.reportRemoveBookedGame();\n }\n}","import styled from \"styled-components\";\n\nexport const LiveStreamSlidePlayerContainer = styled.div`\n position: relative;\n`;","import styled from \"styled-components\";\n\nexport const VideoPlayerBox = styled.div`\n position: relative;\n width: 100%; \n height: 100%;\n`","import styled from \"styled-components\";\n\nexport const VideoElementContainerBox = styled.div`\n width: 100%;\n height: 100%;\n`\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {VideoPlayButtonBox} from \"./boxes/video-play-button.box\";\nimport {IVideoPlayerViewModel} from \"../../../services/video/models/video-player.view-model.interface\";\nimport {NullableUndefinedString} from \"../../../../common/types/nullable-types\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\ninterface VideoPlayButtonComponentProps {\n videoPlayer: IVideoPlayerViewModel;\n src: string;\n poster: NullableUndefinedString;\n watchTimeLimit: TimeSpan | undefined;\n}\nexport const VideoPlayButtonComponent: React.FC<VideoPlayButtonComponentProps> = observer((props) => {\n const onClickHandler = async () => {\n await props.videoPlayer.play(props.src, {\n poster: props.poster,\n watchTimeLimit: props.watchTimeLimit\n });\n }\n\n if(!props.videoPlayer.isPaused || props.videoPlayer.watchTimeLimitReached) {\n return null;\n }\n\n return (\n <VideoPlayButtonBox onClick={onClickHandler}/>\n )\n});\n\n","import styled from \"styled-components\";\n\nexport const VideoErrorTitleBox = styled.span`\n margin: 2rem 0.5rem;\n font-size: 1.6em;\n font-weight: 600;\n text-align: center;\n`;","import styled from \"styled-components\";\nimport {hexToRgba} from \"../../../../themes/hex-to-rgba\";\n\nexport const VideoErrorContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: 1.4em;\n position: fixed;\n height: 100%;\n width: 100%;\n right: 0;\n left: 0;\n top: 0;\n bottom: 0;\n background: ${({theme}) => hexToRgba(theme.colors.background.toString(), 0.7)};\n`;","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {VideoErrorTitleBox} from \"./boxes/video-error-title.box\";\nimport {VideoErrorContainerBox} from \"./boxes/video-error-container.box\";\nimport {IVideoPlayerViewModel} from \"../../../services/video/models/video-player.view-model.interface\";\n\ninterface VideoErrorComponentProps {\n videoPlayer: IVideoPlayerViewModel;\n}\n\nexport const VideoErrorComponent: React.FC<VideoErrorComponentProps> = observer((props) => {\n const services = useServices();\n\n if(!props.videoPlayer.hasError || props.videoPlayer.watchTimeLimitReached) {\n return null;\n }\n\n let RetryArrowIcon = services.theme.currentTheme.icons.retryArrowIcon;\n\n const onClickHandler = async () => {\n await props.videoPlayer.retryPlay();\n }\n\n return (\n <VideoErrorContainerBox onClick={onClickHandler}>\n <RetryArrowIcon size={7}/>\n <VideoErrorTitleBox>\n {services.translation.translate(\"VIDEO_SLIDES_ERROR_MAIN_TEXT\")}\n </VideoErrorTitleBox>\n </VideoErrorContainerBox>\n )\n});","import styled from \"styled-components\";\n\nexport const VideoWatchTimeLimitReachedBox = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 1.5rem;\n ${({theme}) => theme.font.presets.regular};\n color: ${({theme}) => theme.colors.textLight};\n background: rgba(0,0,0,0.5);\n`","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {IVideoPlayerViewModel} from \"../../../services/video/models/video-player.view-model.interface\";\nimport {VideoWatchTimeLimitReachedBox} from \"./boxes/video-watch-time-limit-reached.box\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\n\ninterface VideoWatchTimeLimitReachedComponentProps {\n videoPlayer: IVideoPlayerViewModel;\n}\nexport const VideoWatchTimeLimitReachedComponent: React.FC<VideoWatchTimeLimitReachedComponentProps> = observer((props) => {\n const services = useServices();\n\n if(!props.videoPlayer.watchTimeLimitReached) {\n return null;\n }\n\n return (\n <VideoWatchTimeLimitReachedBox>\n {services.translation.translate('LIVE_STREAM_WATCH_TIME_REACHED')}\n </VideoWatchTimeLimitReachedBox>\n )\n})","import {IVideoPlayerViewModel} from \"../../services/video/models/video-player.view-model.interface\";\nimport React, {useEffect, useRef} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {VideoPlayerBox} from \"./boxes/video-player.box\";\nimport {VideoElementContainerBox} from \"./boxes/video-element-container.box\";\nimport {VideoPlayButtonComponent} from \"./play-button/video-play-button.component\";\nimport {VideoErrorComponent} from \"./error/video-error.component\";\nimport {VideoTypeEnum} from \"../../services/video/models/video-type.enum\";\nimport {NullableUndefinedString} from \"../../../common/types/nullable-types\";\nimport {VideoWatchTimeLimitReachedComponent} from \"./watch-limit/video-watch-time-limit-reached.component\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\n\ninterface VideoPlayerComponentProps {\n videoPlayer: IVideoPlayerViewModel;\n src: string;\n isActive: boolean;\n videoType: VideoTypeEnum;\n poster: NullableUndefinedString;\n}\nexport const VideoPlayerComponent: React.FC<VideoPlayerComponentProps> = observer((props) => {\n\n const videoElementContainerRef = useRef<HTMLDivElement | null>(null);\n const {videoPlayer, src, isActive, videoType, poster} = props;\n\n const watchTimeLimit = videoType === VideoTypeEnum.LiveStream ? TimeSpan.fromMinutes(2) : undefined\n\n useEffect(() => {\n videoPlayer.attach(videoElementContainerRef.current);\n\n return () => {\n videoPlayer.detach();\n }\n\n }, [videoPlayer]);\n\n useEffect(() => {\n let pauseTimerRef: any = null;\n if(isActive) {\n videoPlayer.play(src, {\n poster: poster,\n watchTimeLimit: watchTimeLimit\n });\n } else {\n videoPlayer.preload(src, {\n poster: poster\n }).then(() => {\n pauseTimerRef = setTimeout(async () => {\n if(!isActive) {\n await videoPlayer.pause();\n }\n }, videoType === VideoTypeEnum.LiveStream ? 2000 : 5000);\n });\n }\n\n return () => {\n if(pauseTimerRef) {\n clearTimeout(pauseTimerRef);\n pauseTimerRef = null;\n }\n }\n\n }, [videoPlayer, src, isActive, poster, videoType, watchTimeLimit]);\n\n return (\n <VideoPlayerBox >\n <VideoElementContainerBox ref={videoElementContainerRef}/>\n <VideoPlayButtonComponent videoPlayer={props.videoPlayer}\n src={props.src}\n poster={props.poster}\n watchTimeLimit={watchTimeLimit}/>\n <VideoErrorComponent videoPlayer={props.videoPlayer}/>\n <VideoWatchTimeLimitReachedComponent videoPlayer={props.videoPlayer}/>\n </VideoPlayerBox>\n );\n})","import styled, {keyframes} from \"styled-components\";\n\nconst VideoSlidePlayerSkeletonAnimation = keyframes`\n 0% {\n background-color: #474747;\n }\n 100% {\n background-color: #333333;\n } \n`;\n\nexport const VideoSlidePlayerSkeletonBox = styled.div`\n height: 33%;\n \n animation: ${VideoSlidePlayerSkeletonAnimation} 1.5s linear infinite;\n`;","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {GameInfo} from '../../../../../../services/games/game-info';\nimport {FlexGrowItemBox} from '../../../../../../themes/architecture/css-helpers/flex';\nimport {LiveStreamSlidePlayerContainer} from '../../../live-stream/player/boxes/live-stream-slide-player-container.box';\nimport {IVideoPlayerViewModel} from \"../../../../../../services/video/models/video-player.view-model.interface\";\nimport {VideoPlayerComponent} from \"../../../../../video-player/video-player.component\";\nimport {VideoSlidePlayerSkeletonBox} from \"../../../../parts/skeleton/video-slide-player-skeleton.box\";\nimport {VideoTypeEnum} from \"../../../../../../services/video/models/video-type.enum\";\n\n\ninterface VideoStreamSlidePlayerComponentProps {\n gameInfo: GameInfo;\n videoPlayer: IVideoPlayerViewModel;\n isActive: boolean;\n}\n\nexport const VideoStreamSlidePlayerComponent: React.FC<VideoStreamSlidePlayerComponentProps> = observer((props) => {\n\n const showSkeleton = props.videoPlayer.isLoading && !props.videoPlayer.isPosterLoaded && !props.videoPlayer.hasError;\n\n return ( \n <>\n <FlexGrowItemBox />\n {showSkeleton && <VideoSlidePlayerSkeletonBox/>}\n <LiveStreamSlidePlayerContainer style={{display: showSkeleton ? 'none' : 'block'}} className={`cy-video-slide-game-${props.gameInfo.gameType}`}>\n <VideoPlayerComponent videoPlayer={props.videoPlayer}\n src={props.gameInfo.videoSlideUrl}\n isActive={props.isActive}\n videoType={VideoTypeEnum.VideoStream}\n poster={props.gameInfo.slideCover}/>\n </LiveStreamSlidePlayerContainer>\n <FlexGrowItemBox />\n </>\n )\n});\n","import styled, { css, keyframes } from \"styled-components\";\n\nconst ONBOARDING_ANIMATION_WITH_BOUNCE = keyframes`\n 0% {\n transform: translateY(0px);\n }\n 40% {\n transform: translateY(-70px); \n }\n 80% {\n transform: translateY(20px); \n }\n 90% {\n transform: translateY(-10px); \n }\n 100% {\n transform: translateY(0px); \n }\n`;\n\nexport const VideoSlideLayoutBox = styled.div<{\n onboardingMovement: boolean;\n individualAnimationDuration: number;\n animationAppearances: number;\n}>`\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n\n ${props =>\n props.onboardingMovement\n ? css`\n animation: ${ONBOARDING_ANIMATION_WITH_BOUNCE}\n ${props.individualAnimationDuration}s ease-out\n ${props.animationAppearances} alternate;\n `\n : null}\n`;\n","import styled from \"styled-components\";\n\nexport const ThinProgressBarContainerBox = styled.div<{isVisible: boolean}>`\n display: flex;\n align-items: center;\n width: 100%;\n height: 12px;\n overflow: hidden;\n position: relative;\n visibility: ${props => props.isVisible ? 'visible' : 'hidden'};\n`;\n\n","import styled from \"styled-components\";\n\nexport const ThinProgressBarBox = styled.div`\n @keyframes loadingAnimation {\n 0% {\n left: -100%;\n }\n 100% {\n left: 100%;\n }\n }\n \n width: 100%;\n height: 4px;\n\n background-image: linear-gradient(90deg,\n rgba(255, 255, 255, 0) 0%,\n rgba(255, 255, 255, 0.8) 20%,\n rgba(255, 255, 255, 1) 50%,\n rgba(255, 255, 255, 0.8) 80%,\n rgba(255, 255, 255, 0) 100%);\n \n position: absolute;\n animation: loadingAnimation 0.8s linear infinite;\n border-radius: 50px;\n`;\n\n\n","import {observer} from 'mobx-react';\nimport React from 'react';\nimport {ThinProgressBarContainerBox} from './boxes/thin-progress-bar-container.box';\nimport {ThinProgressBarBox} from \"./boxes/thin-progress-bar.box\";\n\ninterface ThinProgressBarComponentProps {\n show: boolean;\n}\n\nexport const ThinProgressBarComponent: React.FC<ThinProgressBarComponentProps> = observer((props) => {\n\n return (\n <ThinProgressBarContainerBox isVisible={props.show}>\n <ThinProgressBarBox />\n </ThinProgressBarContainerBox>\n );\n});\n\n","import styled from \"styled-components\";\n\nexport const VideoSlideLayoutProgressIndicatorBox = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n height: 10px;\n`","import styled from \"styled-components\";\n\nexport const VideoSlideLayoutChildrenContainerBox = styled.div`\n width: 100%;\n flex-grow: 1;\n`","import React, {PropsWithChildren} from 'react';\nimport {observer} from \"mobx-react\";\nimport {VideoSlideLayoutBox} from './boxes/video-slide-layout.box';\nimport {ThinProgressBarComponent} from \"../../progress-bar/thin/thin-progress-bar.component\";\nimport {VideoSlideLayoutProgressIndicatorBox} from \"./boxes/video-slide-layout-progress-indicator.box\";\nimport {VideoSlideLayoutChildrenContainerBox} from \"./boxes/video-slide-layout-children-container.box\";\nimport {useServices} from '../../../react-hooks/use-services.hook';\n\ninterface VideoSlideLayoutComponentProps extends PropsWithChildren {\n showProgressIndicator: boolean;\n}\nexport const VideoSlideLayoutComponent: React.FC<VideoSlideLayoutComponentProps> = observer((props) => {\n const services = useServices();\n const sparkSwiperSwipeAnimation = services.videoSlides.swiperController.sparkSwiperSwipeAnimation;\n\n return (\n <VideoSlideLayoutBox\n onboardingMovement={sparkSwiperSwipeAnimation.isAnimatedSwipingInProgress}\n animationAppearances={sparkSwiperSwipeAnimation.animationAppearances}\n individualAnimationDuration={sparkSwiperSwipeAnimation.individualAnimationDuration}>\n <VideoSlideLayoutChildrenContainerBox>\n {props.children}\n </VideoSlideLayoutChildrenContainerBox>\n\n <VideoSlideLayoutProgressIndicatorBox>\n <ThinProgressBarComponent show={props.showProgressIndicator} />\n </VideoSlideLayoutProgressIndicatorBox>\n\n </VideoSlideLayoutBox>\n )\n})","import React, {PropsWithChildren} from 'react';\nimport {observer} from \"mobx-react\";\nimport {FlexContainerBox} from '../../../../themes/architecture/css-helpers/flex';\n\nexport const VideoSlideContentLayoutComponent: React.FC<PropsWithChildren> = observer((props) => {\n\n return (\n <FlexContainerBox direction='column' style={{height: \"100%\"}}>\n {props.children}\n </FlexContainerBox>\n )\n})","import styled from \"styled-components\";\nimport {CssRule} from \"../../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const VideoSlideFooterLayoutBox = styled.div`\n display: flex;\n flex-direction: row;\n position: absolute;\n bottom: 0;\n align-items: start;\n width: 100%;\n padding: 0px 16px 32px 16px;\n align-items: stretch;\n\n\n ${CssRule.For.mobile.embededHybrid.build()} & {\n bottom: 1rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const VideoSlideGameTitleLayoutBox = styled.div`\n text-overflow: ellipsis;\n width: 90%;\n font-size: 1.6rem;\n color: ${({theme}) => theme.colors.textLight.toString()};\n line-height: 1.1;\n text-shadow: 0px 0px 4px rgba(0, 0, 0, 0.5);\n @media ${({theme}) => theme.mediaQuery.xlAndAbove } {\n font-size: 1.3rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const SaveGameButtonContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n span {\n margin-top: 0.5rem;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const SaveGameButtonTitleBox = styled.span`\n line-height: 1;\n text-shadow: 0px 0px 4px rgba(0, 0, 0, 0.5);\n`\n\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {SaveGameButtonContainerBox} from \"./save-game-button-container.box\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\nimport {SaveGameButtonTitleBox} from './boxes/save-game-button-title.box';\nimport {SvgSizeUnit} from '../../../../basic-ui-components/icon/svg-icon/svg.icon';\n\nexport interface SaveGameButtonComponentWithServicesProps extends ComponentServicesPick<'games' | 'notifications' | 'theme'> {\n gameType: number;\n onBookGame: () => void;\n onRemoveBookedGame: () => void;\n}\n\nconst ComponentBody :React.FC<SaveGameButtonComponentWithServicesProps> = observer((props) => {\n\n const [isSaved, setIsSaved] = React.useState(props.games.savedGameTypes.indexOf(props.gameType) >= 0);\n\n const toggleSaveGame = (): void => {\n if (isSaved) {\n props.games.removeSavedGame(props.gameType);\n props.onRemoveBookedGame();\n } else {\n props.games.saveGame(props.gameType);\n props.notifications.showGameSavedNotification();\n props.onBookGame();\n }\n\n setIsSaved((wasSaved) => !wasSaved);\n };\n\n const SavedGamesIcon = props.theme.currentTheme.icons.saveGameIcon;\n\n const getCyClass = () => `cy-save-game-button-${isSaved ? 'filled' : 'empty'}`;\n\n return (\n <SaveGameButtonContainerBox onClick={toggleSaveGame} className={getCyClass()}>\n <SavedGamesIcon shouldFill={isSaved} sizeUnit={SvgSizeUnit.Px} size={22} />\n <SaveGameButtonTitleBox>\n {props.games.generateTimesSavedCounterForGame(props.gameType) + Number(isSaved)}\n </SaveGameButtonTitleBox>\n </SaveGameButtonContainerBox>\n );\n});\n\nexport const SaveGameButtonComponent = withServices(ComponentBody, [\"games\", 'notifications', \"theme\"]);\n\n","import styled from \"styled-components\";\n\n\nexport const VideoSlidesSoundIconBox = styled.div`\n color: ${props => props.theme.colors.buttonLight};\n display: flex;\n justify-content: center;\n width: 40px;\n margin-bottom: 24px;\n\n &:focus {\n outline: none;\n }\n \n svg:focus {\n outline: none;\n }\n`;","import {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport React from \"react\";\nimport {\n VideoSlidesSoundIconBox\n} from \"./boxes/video-slides-sound-icon.box\";\n\nimport {SvgSizeUnit} from \"../../../../basic-ui-components/icon/svg-icon/svg.icon\";\n\nexport const VideoSlidesSoundButtonComponent: React.FC<{}> = observer(() => {\n const services = useServices();\n const sound = services.user.preferences.sound;\n\n const SoundOnIcon = services.theme.currentTheme.icons.soundOnIcon;\n const SoundOffIcon = services.theme.currentTheme.icons.soundOffIcon;\n\n const handleClick = () => {\n sound.toggle();\n };\n\n return (\n <VideoSlidesSoundIconBox onClick={handleClick}>\n {sound.isMuted ? <SoundOffIcon sizeUnit={SvgSizeUnit.Px} size={22} /> : <SoundOnIcon sizeUnit={SvgSizeUnit.Px} size={22} />}\n </VideoSlidesSoundIconBox>\n )\n});\n","import styled from \"styled-components\";\n\nexport const VideoSlideFooterLeftContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`","import styled from \"styled-components\";\n\nexport const VideoSlideFooterRightContainerBox = styled.div`\n display: flex;\n flex-direction: column;\n width: 22px;\n justify-content: flex-end;\n align-items: center;\n -webkit-tap-highlight-color: transparent;\n`;","import React, {PropsWithChildren} from 'react';\nimport {observer} from \"mobx-react\";\nimport {VideoSlideFooterLayoutBox} from './boxes/video-slide-footer-layout.box';\nimport {GameInfo} from '../../../../services/games/game-info';\nimport {useServices} from '../../../../react-hooks/use-services.hook';\nimport {VideoSlideGameTitleLayoutBox} from './boxes/game-title/video-slide-footer-game-title-layout.box';\nimport {Button} from '../../../../basic-ui-components/button/base/button.component';\nimport {SaveGameButtonComponent} from \"../../parts/save-game-button/save-game-button.component\";\nimport {\n VideoSlidesSoundButtonComponent\n} from \"../../parts/sound-button/video-slides-sound-button.component\";\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {VideoSlideFooterLeftContainerBox} from './boxes/left/video-slide-footer-left-container.box';\nimport {VideoSlideFooterRightContainerBox} from './boxes/right/video-slide-footer-right-container.box';\n\n\ninterface StandardVideoSlideFooterProps extends PropsWithChildren {\n gameInfo: GameInfo;\n secondaryText: React.ReactElement;\n onPlayGameClick: () => void;\n onBookGame: () => void;\n onRemoveBookedGame: () => void;\n}\n\nexport const VideoSlideFooterLayoutComponent: React.FC<StandardVideoSlideFooterProps> = observer((props) => {\n const services = useServices();\n const tableInfo = services.liveTableFeeds.getTableInfo(props.gameInfo.gameType);\n const _renderGameTitle = () => {\n\n let title = props.gameInfo?.title || \"\\xa0\";\n\n if (tableInfo?.Name?.length > 0) {\n title = tableInfo.Name;\n }\n\n return (\n <VideoSlideGameTitleLayoutBox className={CyClass('cy-video-slide-game-title-footer')}>\n {title}\n </VideoSlideGameTitleLayoutBox>\n );\n }\n\n\n return (\n <VideoSlideFooterLayoutBox>\n <VideoSlideFooterLeftContainerBox>\n {_renderGameTitle()}\n {props.secondaryText}\n <div>\n <Button\n margin={\"8px 0px 0px 0px\"}\n preset=\"primary\"\n onClick={props.onPlayGameClick}\n sizeVariant=\"s\"\n fullWidth={false}>\n {services.translation.translate(\"PLAY_NOW\")}\n </Button>\n </div>\n </VideoSlideFooterLeftContainerBox>\n <VideoSlideFooterRightContainerBox>\n <VideoSlidesSoundButtonComponent />\n <SaveGameButtonComponent gameType={props.gameInfo.gameType} onBookGame={props.onBookGame} onRemoveBookedGame={props.onRemoveBookedGame} />\n </VideoSlideFooterRightContainerBox>\n </VideoSlideFooterLayoutBox>\n )\n})","import styled from \"styled-components\";\n\n\nexport const VideoSlidesStreamBettingRangeDefaultBox = styled.div`\n font-size: 1.2rem;\n color: ${({theme}) => theme.colors.brandPrimary.toString()};\n line-height: 1;\n font-size: 1.3rem;\n`;\n","import {VideoSlidesStreamBettingRangeDefaultBox} from \"./video-slides-stream-betting-range-default.box\";\n\nexport const VideoSlidesStreamBettingRangeBox = VideoSlidesStreamBettingRangeDefaultBox;\n","import styled from \"styled-components\";\n\nexport const VideoSlideStreamFooterDefaultBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-top: 12px;\n flex-grow: 1;\n`;","import {VideoSlideStreamFooterDefaultBox} from \"./video-slides-stream-footer-default.box\";\n\nexport const VideoSlideStreamFooterBox = VideoSlideStreamFooterDefaultBox;","import styled from \"styled-components\";\n\nexport const VideoSlidesStreamJackpotContainerDefaultBox = styled.div`\n display: flex;\n flex-direction: row;\n font-size: 1.2rem;\n margin-top: 5px;\n`;","import {VideoSlidesStreamJackpotContainerDefaultBox} from \"./video-slides-stream-jackpot-container-default.box\"\n\nexport const VideoSlidesStreamJackpotContainerBox = VideoSlidesStreamJackpotContainerDefaultBox;","import styled from \"styled-components\";\n\nexport const VideoSlidesStreamJackpotValueDefaultBox = styled.span`\n color: ${({theme}) => theme.colors.brandPrimary.toString()};\n margin-left: 0.5rem;\n`;","import {VideoSlidesStreamJackpotValueDefaultBox} from \"./video-slides-stream-jackpot-value-default.box\";\n\nexport const VideoSlidesStreamJackpotValueBox = VideoSlidesStreamJackpotValueDefaultBox;","import {Check} from \"@sparkware/app-utils\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {GameInfo} from \"../../../../services/games/game-info\";\nimport {TableSeatsComponent} from \"../../../arena-host/new-live-casino-arena/live-casino-arena-grid/shared-components/table-seats.component\";\nimport {GameJackpotComponent} from \"../../../game-jackpot/game-jackpot.component\";\nimport {VideoSlidesStreamBettingRangeBox} from \"./boxes/betting-range/video-slides-stream-betting-range.box\";\nimport {VideoSlideStreamFooterBox} from \"./boxes/footer-container/video-slides-stream-footer.box\";\nimport {VideoSlidesStreamJackpotContainerBox} from \"./boxes/jackpot/video-slides-stream-jackpot-container.box\";\nimport {VideoSlidesStreamJackpotValueBox} from \"./boxes/jackpot/video-slides-stream-jackpot-value.box\";\n\nexport type VideoSlideStreamFooterType = \"jackpot\" | \"bets\";\n\ninterface VideoSlideStreamFooterTypeProps {\n gameInfo: GameInfo;\n type: VideoSlideStreamFooterType;\n}\nexport const VideoSlideStreamFooterComponent: React.FC<VideoSlideStreamFooterTypeProps> = observer((props) => {\n const services = useServices();\n const tableInfo = services.liveTableFeeds.getTableInfo(props.gameInfo.gameType);\n const _renderSecondaryText = () => {\n switch (props.type) {\n case \"bets\":\n return _renderMinMaxBet();\n case \"jackpot\":\n return _renderJackpot();\n default:\n return null;\n }\n }\n\n\n const _renderMinMaxBet = () => {\n let minBet: number;\n let maxBet: number;\n\n if (Check.isNullOrUndefined(tableInfo?.MinBet) || Check.isNullOrUndefined(tableInfo?.MaxBet)) {\n minBet = props.gameInfo.minBet;\n maxBet = props.gameInfo.maxBet;\n } else {\n minBet = tableInfo.MinBet;\n maxBet = tableInfo.MaxBet;\n }\n\n return (\n <VideoSlidesStreamBettingRangeBox>\n {services.currency.formatMinMaxBet(minBet, maxBet)}\n </VideoSlidesStreamBettingRangeBox>\n );\n }\n\n const renderTableSeats = () => {\n if (!props.gameInfo.isLiveCasino) {\n return null;\n }\n\n\n return (<TableSeatsComponent isLiveStreamOverlay tableInfo={tableInfo} />)\n }\n\n const _renderJackpot = () => {\n if (!props.gameInfo.hasJackpot) {\n return null;\n }\n\n return (\n <VideoSlidesStreamJackpotContainerBox>\n <span>\n {services.translation.translate(\"JACKPOT\")}\n </span>\n <VideoSlidesStreamJackpotValueBox>\n <GameJackpotComponent gameType={props.gameInfo.gameType} />\n {renderTableSeats()}\n </VideoSlidesStreamJackpotValueBox>\n </VideoSlidesStreamJackpotContainerBox>\n );\n }\n\n return (\n <VideoSlideStreamFooterBox>\n {_renderSecondaryText()}\n <TableSeatsComponent isLiveStreamOverlay tableInfo={tableInfo} />\n </VideoSlideStreamFooterBox>\n )\n})\n\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {GameInfo} from '../../../../services/games/game-info';\nimport {VideoStreamSlidePlayerComponent} from './parts/player/video-stream-slide-player.component';\nimport {VideoSlideLayoutComponent} from '../../layout/video-slide-layout.component';\nimport {VideoSlideContentLayoutComponent} from '../../layout/content/video-slide-content-layout.component';\nimport {VideoSlideFooterLayoutComponent} from '../../layout/footer/video-slide-footer-layout.component';\nimport {IVideoPlayerViewModel} from \"../../../../services/video/models/video-player.view-model.interface\";\nimport {VideoSlideStreamFooterComponent} from '../../parts/video-slides-stream-footer/video-slides-stream-footer.component';\n\n\ninterface VideoStreamSlideComponentProps {\n gameInfo: GameInfo;\n videoPlayer: IVideoPlayerViewModel;\n isActive: boolean;\n onPlayGameClick: () => void;\n onBookGame: () => void;\n onRemoveBookedGame: () => void;\n}\n\nexport const VideoStreamSlideComponent: React.FC<VideoStreamSlideComponentProps> = observer((props) => {\n return (\n <VideoSlideLayoutComponent showProgressIndicator={props.videoPlayer.isBuffering}>\n <VideoSlideContentLayoutComponent>\n <VideoStreamSlidePlayerComponent gameInfo={props.gameInfo} videoPlayer={props.videoPlayer} isActive={props.isActive}/>\n </VideoSlideContentLayoutComponent>\n <VideoSlideFooterLayoutComponent\n gameInfo={props.gameInfo}\n onPlayGameClick={props.onPlayGameClick}\n onBookGame={props.onBookGame}\n onRemoveBookedGame={props.onRemoveBookedGame}\n secondaryText={<VideoSlideStreamFooterComponent gameInfo={props.gameInfo} type={\"bets\"} />}\n />\n </VideoSlideLayoutComponent>\n )\n})\n","import React from 'react';\nimport {VideoSlideBaseRenderer} from './video-slide-base.renderer';\nimport {IVideoSwiperSlideController} from \"../models/video-swiper-slide-controller.interface\";\nimport {\n VideoStreamSlideComponent\n} from \"../../../components/video-slides/slides-types/video-stream/video-stream-slide.component\";\nimport {GameInfo} from \"../../games/game-info\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport {VideoTypeEnum} from \"../../video/models/video-type.enum\";\n\nexport class VideoStreamGameSlideRenderer extends VideoSlideBaseRenderer {\n\n constructor(gameInfo: GameInfo, services: IServiceFactoryExtended) {\n super(gameInfo, VideoTypeEnum.VideoStream, services)\n }\n\n protected _renderVideoSlide(context: IVideoSwiperSlideController, uniqueKey: string): React.ReactElement {\n return (\n <VideoStreamSlideComponent\n key={uniqueKey}\n gameInfo={this.gameInfo}\n videoPlayer={context.videoPlayer}\n isActive={context.isActiveSlide}\n onPlayGameClick={this._playGame}\n onBookGame={this._onBookGame}\n onRemoveBookedGame={this._onRemoveBookedGame}\n />\n );\n }\n}\n","import {SlideRuleBaseModel} from \"./slide-rule-base.model\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\nimport {VideoStreamGameSlideRenderer} from \"../../video-slides-renderers/video-stream-game-slide.renderer\";\n\nexport class VideoStreamSlideRuleModel extends SlideRuleBaseModel {\n protected createVideoSlideRenderer(gameInfo: GameInfo): ISlideRenderer {\n return new VideoStreamGameSlideRenderer(gameInfo, this.services);\n }\n}","import styled from \"styled-components\";\n\nexport const LiveStreamSlideStatusBadgeBox = styled.div`\n display: inline-flex;\n padding: 4px 12px;\n align-items: center;\n gap: 6px;\n border-radius: 32px;\n background: rgba(255, 255, 255, 0.40);\n\n backdrop-filter: blur(2.5px);\n`;","import styled from \"styled-components\";\n\nexport const LiveStreamSlideStatusDetailsBox = styled.div`\n font-family: 888;\n font-size: 12px;\n font-style: normal;\n font-weight: 600;\n line-height: 22px;\n`;","import styled, {keyframes} from \"styled-components\";\n\nconst LiveStreamSlideStatusIconAnimation = keyframes`\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n } \n`;\n\nexport const LiveStreamSlideStatusIconBox = styled.div`\n animation: ${LiveStreamSlideStatusIconAnimation} 2s ease infinite;\n`;\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {useServices} from '../../../../../react-hooks/use-services.hook';\nimport {GameInfo} from '../../../../../services/games/game-info';\nimport {FlexGrowItemBox} from '../../../../../themes/architecture/css-helpers/flex';\nimport {\n VideoOverlayItemBox\n} from '../../../../live-streaming-tile/video-common-components/video-overlay-item/video-overlay-item.box';\nimport {LiveStreamSlideStatusBadgeBox} from './boxes/status-badge/live-stream-slide-status-badge.box';\nimport {LiveStreamSlideStatusDetailsBox} from './boxes/status-details/live-stream-slide-status-details.box';\nimport {LiveStreamSlidePlayerContainer} from './boxes/live-stream-slide-player-container.box';\nimport {IVideoPlayerViewModel} from \"../../../../../services/video/models/video-player.view-model.interface\";\nimport {VideoPlayerComponent} from \"../../../../video-player/video-player.component\";\nimport {VideoSlidePlayerSkeletonBox} from \"../../../parts/skeleton/video-slide-player-skeleton.box\";\nimport {VideoTypeEnum} from \"../../../../../services/video/models/video-type.enum\";\nimport {LiveStreamSlideStatusIconBox} from './boxes/status-icon/live-stream-slide-status-icon.box';\n\ninterface LiveStreamSlidePlayerProps {\n gameInfo: GameInfo;\n videoPlayer: IVideoPlayerViewModel;\n isActive: boolean;\n}\nexport const LiveStreamSlidePlayerComponent: React.FC<LiveStreamSlidePlayerProps> = observer((props) => {\n const services = useServices();\n\n\n\n const _renderTopLeft = () => {\n const _padding = \"1rem\";\n const RedRecordCircle = services.theme.currentTheme.icons.redRecordCircle;\n\n return (\n <VideoOverlayItemBox transparent style={{position: \"absolute\", top: _padding, left: _padding}}>\n <LiveStreamSlideStatusBadgeBox>\n <LiveStreamSlideStatusIconBox>\n <RedRecordCircle size={0.8}/>\n </LiveStreamSlideStatusIconBox>\n <LiveStreamSlideStatusDetailsBox>{services.translation.translate(\"VIDEO_SLIDES_LIVE_STREAMING\")}</LiveStreamSlideStatusDetailsBox>\n </LiveStreamSlideStatusBadgeBox>\n </VideoOverlayItemBox>\n );\n }\n\n const showSkeleton = props.videoPlayer.isLoading && !props.videoPlayer.hasError;\n\n return (\n <>\n <FlexGrowItemBox/>\n {showSkeleton && <VideoSlidePlayerSkeletonBox />}\n <LiveStreamSlidePlayerContainer style={{display: showSkeleton ? 'none' : 'block'}}>\n <VideoPlayerComponent videoPlayer={props.videoPlayer}\n src={props.gameInfo.videoURL}\n isActive={props.isActive}\n videoType={VideoTypeEnum.LiveStream}\n poster={props.gameInfo.slideCover}/>\n {_renderTopLeft()}\n </LiveStreamSlidePlayerContainer>\n <FlexGrowItemBox/>\n </>\n )\n});\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {GameInfo} from '../../../../services/games/game-info';\nimport {LiveStreamSlidePlayerComponent} from './player/live-stream-slide-player.component';\nimport {VideoSlideLayoutComponent} from '../../layout/video-slide-layout.component';\nimport {VideoSlideContentLayoutComponent} from '../../layout/content/video-slide-content-layout.component';\nimport {VideoSlideFooterLayoutComponent} from '../../layout/footer/video-slide-footer-layout.component';\nimport {IVideoPlayerViewModel} from \"../../../../services/video/models/video-player.view-model.interface\";\nimport {VideoSlideStreamFooterComponent} from '../../parts/video-slides-stream-footer/video-slides-stream-footer.component';\n\n\ninterface LiveStreamSlideComponentProps {\n gameInfo: GameInfo;\n videoPlayer: IVideoPlayerViewModel;\n isActive: boolean;\n onPlayGameClick: () => void;\n onBookGame: () => void;\n onRemoveBookedGame: () => void;\n}\nexport const LiveStreamSlideComponent: React.FC<LiveStreamSlideComponentProps> = observer((props) => {\n\n return (\n <VideoSlideLayoutComponent showProgressIndicator={props.videoPlayer.isBuffering}>\n <VideoSlideContentLayoutComponent>\n <LiveStreamSlidePlayerComponent gameInfo={props.gameInfo} videoPlayer={props.videoPlayer} isActive={props.isActive}/>\n </VideoSlideContentLayoutComponent>\n <VideoSlideFooterLayoutComponent\n gameInfo={props.gameInfo}\n onPlayGameClick={props.onPlayGameClick}\n onBookGame={props.onBookGame}\n onRemoveBookedGame={props.onRemoveBookedGame}\n secondaryText={<VideoSlideStreamFooterComponent gameInfo={props.gameInfo} type={\"bets\"}/>}\n />\n </VideoSlideLayoutComponent>\n )\n}) ","import React from 'react';\nimport {VideoSlideBaseRenderer} from './video-slide-base.renderer';\nimport {IVideoSwiperSlideController} from \"../models/video-swiper-slide-controller.interface\";\nimport {\n LiveStreamSlideComponent\n} from '../../../components/video-slides/slides-types/live-stream/live-stream-slide.component';\nimport {GameInfo} from \"../../games/game-info\";\nimport {VideoTypeEnum} from \"../../video/models/video-type.enum\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\n\n\nexport class LiveStreamGameSlideRenderer extends VideoSlideBaseRenderer {\n\n constructor(gameInfo: GameInfo, services: IServiceFactoryExtended) {\n super(gameInfo, VideoTypeEnum.LiveStream, services)\n }\n\n protected _renderVideoSlide(context: IVideoSwiperSlideController, uniqueKey: string): React.ReactElement {\n return (\n <LiveStreamSlideComponent\n key={uniqueKey}\n gameInfo={this.gameInfo}\n videoPlayer={context.videoPlayer}\n isActive={context.isActiveSlide}\n onPlayGameClick={this._playGame}\n onBookGame={this._onBookGame}\n onRemoveBookedGame={this._onRemoveBookedGame}\n />\n );\n }\n}\n","import {SlideRuleBaseModel} from \"./slide-rule-base.model\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\nimport {LiveStreamGameSlideRenderer} from \"../../video-slides-renderers/live-stream-game-slide.renderer\";\n\nexport class LiveStreamVideoSlideRuleModel extends SlideRuleBaseModel {\n protected createVideoSlideRenderer(gameInfo: GameInfo): ISlideRenderer {\n return new LiveStreamGameSlideRenderer(gameInfo, this.services);\n }\n}","import styled from \"styled-components\";\n\nexport const PromotionSlideBox = styled.div`\n display:grid;\n grid-template-rows:1fr auto 1fr;\n height:100%;\n`\n\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {PromotionSlideBox} from './boxes/promotion-slide.box';\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {CasinoArenaPromotionalBannerConfiguration} from \"../../../../services/configurations/config-data-sections/arenas.configuration\";\nimport {BannerComponent} from \"../../../banner/banner.component\";\nimport {Check} from '@sparkware/app-utils';\n\ninterface PromotionSlideComponentProps {\n\n}\nlet componentIndex = 0;\nexport const PromotionSlideComponent: React.FC<PromotionSlideComponentProps> = observer(() => {\n const services = useServices();\n const videoSlidesPromotionalBanners = services.configuration.data.arenas.videoSlidesArena.promotionalBanners;\n\n //check that banners are configured, and with at least 1 banner, in order to avoid 0 % 0 = NaN\n if(!videoSlidesPromotionalBanners?.length){\n return null;\n }\n\n const promotionalBannerIndex = componentIndex % videoSlidesPromotionalBanners.length;\n const bannerConfig: CasinoArenaPromotionalBannerConfiguration = videoSlidesPromotionalBanners[promotionalBannerIndex];\n\n const currentComponentIndex = componentIndex++;\n\n if(Check.isNullOrUndefined(bannerConfig)){\n return null;\n }\n\n return <PromotionSlideBox>\n <div style={{gridRowStart:2, gridRowEnd:3}}>\n <BannerComponent key={`Promotions_${currentComponentIndex}`}\n className={'vertical-swiper-banner'}\n showPlaceholder={false}\n componentID={bannerConfig.componentID}\n templateID={bannerConfig.templateID}\n bannerAdminPlaceholderId={bannerConfig.bannerAdminPlaceholderId}\n />\n </div>\n </PromotionSlideBox>\n})","import React from 'react';\nimport {\n PromotionSlideComponent\n} from \"../../../components/video-slides/slides-types/promotion/promotion-slide.component\";\nimport {IAfterActivateSlideRendererContext, IBeforeDeactivateSlideRendererContext,\n ISlideRenderer\n} from \"../video-slides.service.interface\";\n\nexport class PromotionSlideRenderer implements ISlideRenderer {\n constructor(private readonly _uniqueKey: string) {\n\n }\n\n onBeforeDeactivate(context: IBeforeDeactivateSlideRendererContext): void {\n\n }\n onAfterActivated(context: IAfterActivateSlideRendererContext): void {\n \n }\n\n get uniqueKey(): string {\n return this._uniqueKey;\n }\n\n isLoading = false;\n\n render(): React.ReactElement {\n return <PromotionSlideComponent key={this.uniqueKey} />\n }\n\n}","import {ISlideRuleModel} from \"./slide-rule-model.interface\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\nimport {IServiceFactory} from \"../../../service-factory.interface\";\nimport {PromotionSlideRenderer} from \"../../video-slides-renderers/promotion-slide.renderer\";\n\nexport class BannerSlideRuleModel implements ISlideRuleModel {\n\n constructor(private readonly services: IServiceFactory) {\n }\n\n appendToChunk(currentChunkContent: ISlideRenderer[]): ISlideRenderer[] {\n if(currentChunkContent.length > 0) {\n return [\n ...currentChunkContent,\n new PromotionSlideRenderer(this.services.tools.getGuid())\n ];\n }\n\n return currentChunkContent;\n\n }\n\n}","import {IVideoSlidesRuleConfig} from \"../../../configurations/config-data-sections/arenas.configuration\";\nimport {IServiceFactoryExtended} from \"../../../service-factory-extended.interface\";\nimport {GameInfo} from \"../../../games/game-info\";\nimport {ISlideRuleModel} from \"./slide-rule-model.interface\";\nimport {VideoStreamSlideRuleModel} from \"./video-stream-slide-rule.model\";\nimport {LiveStreamVideoSlideRuleModel} from \"./live-stream-video-slide-rule.model\";\nimport {BannerSlideRuleModel} from \"./banner-slide-rule.model\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\n\nexport class SlidesRulesHandler {\n constructor(private readonly services: IServiceFactoryExtended,\n slidesRulesConfig: IVideoSlidesRuleConfig[],\n gamesWithVideoStream: GameInfo[],\n gamesWithLiveStream: GameInfo[]) {\n\n slidesRulesConfig.forEach(ruleConfig => {\n switch (ruleConfig.category) {\n case \"videoStream\":\n this._rules.push(new VideoStreamSlideRuleModel(ruleConfig, gamesWithVideoStream, services));\n break;\n case \"liveStream\":\n this._rules.push(new LiveStreamVideoSlideRuleModel(ruleConfig, gamesWithLiveStream, services));\n break;\n case \"banner\":\n this._rules.push(new BannerSlideRuleModel(services));\n break;\n default:\n this.services.logger.error(`Can't handle slide rule category ${ruleConfig.category}`);\n\n }\n })\n }\n\n private readonly _rules: ISlideRuleModel[] = [];\n\n createRenderers(): ISlideRenderer[] {\n let result: ISlideRenderer[] = [];\n let shouldContinue = true;\n\n do {\n\n let currentChunk: ISlideRenderer[] = [];\n\n this._rules.forEach(rule => {\n currentChunk = rule.appendToChunk(currentChunk);\n });\n\n result = [ ...result,\n ...currentChunk\n ]\n\n shouldContinue = currentChunk.length > 0;\n\n } while (shouldContinue);\n\n return result;\n }\n\n}","import React from \"react\";\nimport {ISparkSwiperSlideController, SwipeDirectionEnum} from \"./spark-swiper-slide-controller.interface\";\n\nimport {computed, makeObservable} from \"mobx\";\nimport {ISparkSwiperController} from \"./spark-swiper-controller.interface\";\n\n\n\nexport abstract class SparkSwiperSlideController implements ISparkSwiperSlideController {\n constructor(private readonly id: string,\n protected readonly controller: ISparkSwiperController) {\n makeObservable(this);\n\n }\n\n abstract renderSlideContent(): React.ReactElement;\n abstract onBeforeDeactivate(swipeDirection: SwipeDirectionEnum): void;\n abstract onAfterActivated(swipeDirection: SwipeDirectionEnum): void;\n\n\n get key(): string {\n return `slide-ctrl-${this.id}`;\n }\n\n\n get isActiveSlide(): boolean {\n return this.itemIndexOffset === 0;\n }\n\n\n @computed\n get itemIndex(): number {\n const selfPosition = this.controller.findSlidePosition(this);\n const currentSlideIndex = this.controller.getCurrentItemIndex();\n let middleSlideControllerPosition = this.controller.middleSlidePosition;\n if(currentSlideIndex > this.controller.maxItemIndex - middleSlideControllerPosition) {\n // it means that we are closed to the end of the list and the middle slide controller is not actually in the middle and basically the middle slide controller moves at the beginning of the list\n middleSlideControllerPosition += middleSlideControllerPosition - (this.controller.maxItemIndex - currentSlideIndex);\n }\n // when selfPosition > currentSlideIndex + (selfPosition - middleSlideControllerPosition)\n // it means that we are at the beginning of the slides list (currentSlideIndex is 0 or 1 assuming we have 2 slides before and 2 slides after the active one)\n return Math.max(selfPosition, currentSlideIndex + (selfPosition - middleSlideControllerPosition));\n }\n\n @computed\n get itemIndexOffset(): number {\n return this.itemIndex - this.controller.getCurrentItemIndex();\n }\n}\n\n","import React from \"react\";\n\nexport enum SwipeDirectionEnum {\n Backward = -1,\n Initial = 0,\n Forward = 1\n}\n\nexport interface ISparkSwiperSlideController {\n readonly key: string;\n readonly itemIndex: number;\n readonly itemIndexOffset: number;\n readonly isActiveSlide: boolean;\n renderSlideContent(): React.ReactElement;\n onBeforeDeactivate(swipeDirection: SwipeDirectionEnum): void;\n onAfterActivated(swipeDirection: SwipeDirectionEnum): void;\n\n}","import {SparkSwiperSlideController} from \"../../../../components/spark-swiper/models/spark-swiper-slide-controller\";\nimport {IVideoPlayerViewModel} from \"../../../video/models/video-player.view-model.interface\";\nimport React from \"react\";\nimport {IVideoSwiperSlideController} from \"../video-swiper-slide-controller.interface\";\nimport {ISparkSwiperController} from \"../../../../components/spark-swiper/models/spark-swiper-controller.interface\";\nimport {VideoSlidesService} from \"../../video-slides.service\";\nimport {SwipeDirectionEnum} from \"../../../../components/spark-swiper/models/spark-swiper-slide-controller.interface\";\nimport {ISlideRenderer} from \"../../video-slides.service.interface\";\n\nexport class VideoSlidesSwiperSlideController extends SparkSwiperSlideController implements IVideoSwiperSlideController {\n\n constructor(id: string,\n controller: ISparkSwiperController,\n private readonly videoSlides: VideoSlidesService) {\n super(id, controller);\n this.videoPlayer = videoSlides.createVideoPlayer();\n }\n\n public readonly videoPlayer: IVideoPlayerViewModel\n\n get realIndex(): number {\n return this.itemIndex % this.videoSlides.slidesRenderers.length;\n }\n\n private _executeForRenderer<T>(action: (renderer: ISlideRenderer) => T): T | null {\n const renderer = this.videoSlides.slidesRenderers[this.realIndex];\n if(renderer) {\n return action(renderer);\n } else {\n //we can reach here if we have a bug in the spark swiper, but if this happens we don't want to crash the whole app because of this.\n this.videoSlides.logger.error(`Invalid video slides renderer index ${this.realIndex} | renderersCount = ${this.videoSlides.slidesRenderers.length}`);\n return null;\n }\n }\n\n renderSlideContent(): React.ReactElement {\n return this._executeForRenderer(renderer => renderer.render(this));\n }\n\n onBeforeDeactivate(swipeDirection: SwipeDirectionEnum) {\n this._executeForRenderer(renderer => renderer.onBeforeDeactivate({\n swipeDirection: swipeDirection\n }))\n }\n\n onAfterActivated(swipeDirection: SwipeDirectionEnum) {\n this._executeForRenderer(renderer => renderer.onAfterActivated({\n swipeDirection: swipeDirection\n }));\n }\n\n}","import {action, makeObservable, observable} from \"mobx\";\nimport {SwiperAnimationConfig} from \"../../../../services/configurations/config-data-sections/arenas.configuration\";\n\nexport class SparkSwiperSwipeAnimationModel {\n private triggerDelay: number;\n public individualAnimationDuration: number;\n public animationAppearances: number;\n private delayTimeoutRef?: any;\n\n @observable.ref\n public isAnimatedSwipingInProgress: boolean = false;\n\n constructor(swiperAnimationConfig: SwiperAnimationConfig) {\n this.triggerDelay = swiperAnimationConfig.triggerDelay;\n this.individualAnimationDuration = swiperAnimationConfig.individualAnimationDuration;\n this.animationAppearances = swiperAnimationConfig.animationAppearances;\n makeObservable(this);\n }\n\n @action\n public startAnimatedSwiping() {\n this.delayTimeoutRef = setTimeout(() => {\n this.isAnimatedSwipingInProgress = true;\n }, this.triggerDelay);\n }\n\n @action\n public stopAnimatedSwiping() {\n this.isAnimatedSwipingInProgress = false;\n this._clearTimers();\n }\n\n private _clearTimers() {\n if (this.delayTimeoutRef) {\n clearTimeout(this.delayTimeoutRef);\n }\n\n }\n}","import {computed, makeObservable, observable, runInAction} from \"mobx\";\nimport {ISparkSwiperController, ISparkSwiperControllerOptions} from \"./spark-swiper-controller.interface\";\nimport {ISparkSwiperSlideController, SwipeDirectionEnum} from \"./spark-swiper-slide-controller.interface\";\nimport {ISparkSwiperDataFeeder} from \"./spark-swiper-data-feeder.interface\";\nimport {SparkSwiperSwipeAnimationModel} from \"./animation/spark-swiper-swipe-animation.model\";\n\n\nexport class SparkSwiperController implements ISparkSwiperController {\n constructor(private readonly dataFeeder: ISparkSwiperDataFeeder, options?: Partial<ISparkSwiperControllerOptions>) {\n this._options = {\n middleSlideControllerPosition: 2,\n swiperAnimationConfig: {\n animationAppearances: options.swiperAnimationConfig.animationAppearances,\n individualAnimationDuration: options.swiperAnimationConfig.individualAnimationDuration,\n triggerDelay: options.swiperAnimationConfig.triggerDelay\n },\n ...options\n };\n this.sparkSwiperSwipeAnimation = new SparkSwiperSwipeAnimationModel(this._options.swiperAnimationConfig); \n makeObservable(this);\n }\n \n\n private readonly _options: ISparkSwiperControllerOptions;\n readonly sparkSwiperSwipeAnimation : SparkSwiperSwipeAnimationModel; \n \n getCurrentItemIndex(): number {\n return this.dataFeeder.getCurrentItemIndex();\n }\n\n private setCurrentItemIndex(index: number): void {\n this.dataFeeder.setCurrentItemIndex(index);\n }\n\n getItemsCount(): number {\n return this.dataFeeder.getItemsCount();\n }\n\n get maxItemIndex(): number {\n return this.dataFeeder.getMaxItemIndex();\n }\n\n\n get middleSlidePosition(): number {\n return Math.min(this._options.middleSlideControllerPosition, Math.floor(this.getItemsCount()/2));\n }\n\n\n findSlidePosition(slideController: ISparkSwiperSlideController): number {\n return this.slides.findIndex(s => s === slideController);\n }\n\n private _generateSlidesControllers(): ISparkSwiperSlideController[] {\n const maxSlides = this._options.middleSlideControllerPosition * 2;\n const result: ISparkSwiperSlideController[] = [];\n for(let i = 0; i <= maxSlides; i++) {\n result.push(this.dataFeeder.createSlideController(i.toString(), this));\n }\n\n return result;\n }\n\n\n\n @observable.ref\n private _slidesControllers: ISparkSwiperSlideController[] | null = null;\n\n\n @computed\n get slides(): ISparkSwiperSlideController[] {\n\n const itemsCount = this.getItemsCount();\n\n if(itemsCount === 0) {\n return [];\n }\n\n if(!this._slidesControllers) {\n this._slidesControllers = this._generateSlidesControllers();\n }\n\n if(itemsCount < this._slidesControllers.length) {\n return this._slidesControllers.slice(0, itemsCount)\n }\n\n return this._slidesControllers;\n }\n\n private get activeSlideController(): ISparkSwiperSlideController {\n return this.slides.find(s => s.isActiveSlide);\n }\n\n moveNext(): void {\n if(this.getCurrentItemIndex() < this.maxItemIndex) {\n\n this.activeSlideController.onBeforeDeactivate(SwipeDirectionEnum.Forward);\n\n runInAction(() => {\n this.setCurrentItemIndex(this.getCurrentItemIndex() + 1);\n if(this.getCurrentItemIndex() > this.middleSlidePosition && this.getCurrentItemIndex() <= this.maxItemIndex - this.middleSlidePosition) {\n this._rotateSlideController(0, this.slides.length - 1);\n }\n\n this.activeSlideController.onAfterActivated(SwipeDirectionEnum.Forward);\n\n });\n }\n }\n\n movePrevious(): void {\n if(this.getCurrentItemIndex() > 0) {\n this.activeSlideController.onBeforeDeactivate(SwipeDirectionEnum.Backward);\n runInAction(() => {\n this.setCurrentItemIndex(this.getCurrentItemIndex() - 1);\n if(this.getCurrentItemIndex() >= this.middleSlidePosition && this.getCurrentItemIndex() < this.maxItemIndex - this.middleSlidePosition) {\n this._rotateSlideController(this.slides.length - 1, 0);\n }\n this.activeSlideController.onAfterActivated(SwipeDirectionEnum.Backward);\n });\n }\n }\n\n private _rotateSlideController(from: number, to: number) {\n\n //console.error(`move from ${from} to ${to}`);\n const cloned = [...this._slidesControllers];\n const moved = this.slides[from];\n cloned.splice(from, 1);\n cloned.splice(to, 0, moved);\n this._slidesControllers = cloned;\n\n }\n}","import {ISparkSwiperDataFeeder} from \"../../../../components/spark-swiper/models/spark-swiper-data-feeder.interface\";\nimport {VideoSlidesService} from \"../../video-slides.service\";\nimport {makeObservable, observable, reaction, runInAction} from \"mobx\";\nimport {ISparkSwiperController} from \"../../../../components/spark-swiper/models/spark-swiper-controller.interface\";\nimport {\n ISparkSwiperSlideController\n} from \"../../../../components/spark-swiper/models/spark-swiper-slide-controller.interface\";\nimport {VideoSlidesSwiperSlideController} from \"./video-slides-swiper-slide.controller\";\nimport {Lazy} from \"../../../../../utils/lazy\";\nimport {SparkSwiperController} from \"../../../../components/spark-swiper/models/spark-swiper-controller\";\n\nexport class VideoSlidesSwiper implements ISparkSwiperDataFeeder {\n constructor(private videoSlides: VideoSlidesService) {\n\n makeObservable(this);\n\n reaction(() => [this.videoSlides.currentAppliedFilter, this.videoSlides.slidesRenderers],\n () => {\n \n if(this.videoSlides.slidesRenderers.length === 0) {\n this._currentSlideIndex = 0;\n } else {\n this._currentSlideIndex = this._getCurrentIndexFromLocalStorage() % this.videoSlides.slidesRenderers.length;\n }\n\n\n }, {\n fireImmediately: true\n })\n }\n\n private _getCurrentIndexFromLocalStorage(): number {\n\n const currentFilter = this.videoSlides.currentAppliedFilter;\n if (!currentFilter) {\n return 0;\n }\n\n const storageData = this.videoSlides.getStorageData();\n\n const now = Date.now();\n\n if(!storageData.lastIndexPerFilterUpdateTime || now > storageData.lastIndexPerFilterUpdateTime + 24 * 3600 * 1000) {\n // if more than 24 hours passed since last visit we reset the index\n storageData.lastIndexPerFilter = {}\n storageData.lastIndexPerFilterUpdateTime = now;\n this.videoSlides.setStorageData(storageData);\n return 0;\n }\n\n return this.videoSlides.getStorageData().lastIndexPerFilter[currentFilter.id] ?? 0;\n }\n\n\n @observable.ref\n private _currentSlideIndex: number = 0;\n\n getCurrentItemIndex(): number {\n return this._currentSlideIndex;\n }\n\n setCurrentItemIndex(value: number) {\n runInAction(() => {\n this._currentSlideIndex = value;\n });\n\n const filter = this.videoSlides.currentAppliedFilter;\n if (filter) {\n const storageData = this.videoSlides.getStorageData()\n storageData.lastIndexPerFilter[filter.id] = value;\n storageData.lastIndexPerFilterUpdateTime = Date.now()\n this.videoSlides.setStorageData(storageData);\n }\n\n }\n\n getMaxItemIndex(): number {\n return Number.MAX_SAFE_INTEGER;\n //return this.getItemsCount() - 1; // if you want the swiper not to be circular anymore uncomment this line and comment the one above\n }\n\n\n getItemsCount(): number {\n return this.videoSlides.slidesRenderers.length;\n }\n\n createSlideController(id: string, swiperController: ISparkSwiperController): ISparkSwiperSlideController {\n return new VideoSlidesSwiperSlideController(id,\n swiperController,\n this.videoSlides);\n }\n\n private _swiperController = new Lazy<ISparkSwiperController>(() => new SparkSwiperController(this, {swiperAnimationConfig: this.videoSlides.config.swiperAnimation}))\n get swiperController(): ISparkSwiperController {\n return this._swiperController.value;\n }\n}","import {action, computed, makeObservable, observable} from \"mobx\";\nimport {GameInfo} from \"../games/game-info\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {ISlideRenderer, IVideoSlidesService, IVideoSlideStoredData} from \"./video-slides.service.interface\";\nimport {\n ApiListType,\n ArenaConfiguration,\n IVideoSlidesFilter,\n SwiperGamesListConfiguration\n} from \"../configurations/config-data-sections/arenas.configuration\";\nimport {VIDEO_SLIDES_ARENA} from \"../arenas/arena-consts\";\nimport {VideoSlidesFilterModel} from \"./models/video-slides-filter-editor/video-slides-filter.model\";\nimport {ForYouVideoSlidesFilter} from \"./models/video-slides-filter-editor/for-you-video-slides-filter\";\nimport {SlidesRulesHandler} from \"./models/rules/slides-rules-handler\";\nimport {Nullable} from \"../../../common/types/nullable-types\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {ISparkSwiperController} from \"../../components/spark-swiper/models/spark-swiper-controller.interface\";\nimport {VideoSlidesSwiper} from \"./models/swiper/video-slides-swiper\";\nimport {LocalStorageKeys} from \"../storage/local-storage-keys\";\nimport {IVideoPlayerViewModel} from \"../video/models/video-player.view-model.interface\";\nimport {ILoggerService} from \"../logger/logger.service.interface\";\n\ntype AIConfigSlides = Pick<SwiperGamesListConfiguration, \"useAISortedList\" | \"ignoreNumberOfGamesInAISorting\">;\n\n\nexport class VideoSlidesService extends ServiceBase implements IVideoSlidesService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this._videoSlidesFilters = this._createVideoSlidesFilters();\n this._loadGameTypes();\n\n makeObservable(this);\n\n this._swiper = new VideoSlidesSwiper(this);\n }\n\n private readonly _swiper: VideoSlidesSwiper;\n\n private _isVideoSlidesEnabled(): boolean {\n return this.services.abTestingFeatureDataProvider.videoSlides.isEnabled;\n }\n\n private _isStrictlyMobileDevice(): boolean {\n return this.services.device.model.deviceType === \"mobile\";\n }\n\n get shouldBeDisplayed(): boolean {\n return (\n !this.services.miniOrbit.isEnabled &&\n this._isStrictlyMobileDevice() &&\n this.services.user.isAuthorized &&\n this._isVideoSlidesEnabled());\n }\n\n @observable.ref\n private _gamesIdsWithStaticVideos: number[] = [];\n\n @observable.ref\n private _gamesIdsWithLiveStreamVideos: number[] = [];\n\n @action.bound\n public setShownExplorerMenuBadgeCurrentSession() {\n this._shouldShowExplorerMenuBadge = false;\n this._setExplorerMenuBadgeShownLS();\n }\n\n @observable\n private _shouldShowExplorerMenuBadge: boolean = !this._getExplorerMenuBadgeShownFromLS();\n\n get shouldShowExplorerMenuBadge(): boolean {\n return this._shouldShowExplorerMenuBadge;\n }\n\n private _getExplorerMenuBadgeShownFromLS(): boolean {\n return this.services.localStorage.getJson(LocalStorageKeys.explorerMenuBadgeShown);\n }\n\n private _setExplorerMenuBadgeShownLS() {\n this.services.localStorage.setItem(LocalStorageKeys.explorerMenuBadgeShown, true);\n }\n\n public get config(): ArenaConfiguration {\n return this.services.configuration.data.arenas[VIDEO_SLIDES_ARENA];\n }\n\n private _getGamesInfo(gameTypes: number[], condition: (gameInfo: GameInfo) => boolean): GameInfo[] {\n const gamesMap = this.services.games.gamesMap;\n return gameTypes.reduce((accumulator, currentGameType) => {\n const gameInfo = gamesMap[currentGameType];\n if (gameInfo && condition(gameInfo)) {\n accumulator.push(gameInfo);\n }\n return accumulator;\n }, []);\n }\n\n\n @computed\n private get gamesWithStaticVideos(): GameInfo[] {\n let gameTypes = this._gamesIdsWithStaticVideos;\n if (this._getAIConfigForStaticSlides()?.useAISortedList) {\n gameTypes = this.services.aiEngine.sortGames(gameTypes, {\n ignoreNumberOfGames: this._getAIConfigForStaticSlides()?.ignoreNumberOfGamesInAISorting\n });\n }\n return this._getGamesInfo(gameTypes, gameInfo => Boolean(gameInfo.videoSlideUrl));\n }\n\n @computed\n private get gamesWithLiveStreamVideos(): GameInfo[] {\n let gameTypes = this._gamesIdsWithLiveStreamVideos;\n if (this._getAIConfigForLivestreamSlides()?.useAISortedList) {\n gameTypes = this.services.aiEngine.sortGames(gameTypes, {\n ignoreNumberOfGames: this._getAIConfigForLivestreamSlides()?.ignoreNumberOfGamesInAISorting\n });\n }\n return this._getGamesInfo(gameTypes, gameInfo => Boolean(gameInfo.videoURL));\n }\n\n @computed\n get allGamesInArena(): GameInfo[] {\n return [\n ...this.gamesWithStaticVideos,\n ...this.gamesWithLiveStreamVideos\n ];\n }\n\n\n private _filterGamesInfo(gamesInfo: GameInfo[]): GameInfo[] {\n const filteredGamesMap = this.services.gamesFilter.filteredGamesMap;\n return gamesInfo.filter(gInfo => Boolean(filteredGamesMap[gInfo.gameType]));\n }\n\n\n @computed\n get slidesRenderers(): ISlideRenderer[] {\n const gamesWithStaticVideos = this._filterGamesInfo(this.gamesWithStaticVideos);\n const gamesWithLiveStreamVideos = this._filterGamesInfo(this.gamesWithLiveStreamVideos);\n const rulesHandler = new SlidesRulesHandler(this.services, this.config.slidesRules, gamesWithStaticVideos, gamesWithLiveStreamVideos);\n return rulesHandler.createRenderers();\n }\n\n\n private readonly _videoSlidesFilters: VideoSlidesFilterModel[] = [];\n get videoSlidesFilters(): VideoSlidesFilterModel[] {\n return this._videoSlidesFilters;\n }\n\n @computed\n get currentAppliedFilter(): VideoSlidesFilterModel {\n return this.videoSlidesFilters.find(f => f.on);\n }\n\n private _createVideoSlidesFilters(): VideoSlidesFilterModel[] {\n const filters: IVideoSlidesFilter[] = this.config?.filters ?? [];\n return [\n new ForYouVideoSlidesFilter(this.services, {id: \"forYou\", category: \"forYou\", translationKey: \"For You\", icon: \"exploreOutlinedIcon\"}),\n ...filters.map((filter) => new VideoSlidesFilterModel(this.services, filter))\n ];\n }\n\n\n private _getAIConfigForStaticSlides(): AIConfigSlides {\n let ignoreNumberOfGamesInAISorting = 0;\n let useAISortedList = false;\n\n let listConfig = this.config.swiperGamesList?.findFirst(swiperConfig => swiperConfig.apiListType === ApiListType.VIDEO_SLIDES_STATIC);\n if (listConfig?.ignoreNumberOfGamesInAISorting) {\n ignoreNumberOfGamesInAISorting = listConfig.ignoreNumberOfGamesInAISorting;\n }\n\n if (listConfig?.useAISortedList) {\n useAISortedList = listConfig.useAISortedList;\n }\n\n return {\n useAISortedList, ignoreNumberOfGamesInAISorting\n };\n }\n\n private _getAIConfigForLivestreamSlides(): AIConfigSlides {\n let ignoreNumberOfGamesInAISorting = 0;\n let useAISortedList = false;\n\n let listConfig = this.config.swiperGamesList?.findFirst(swiperConfig => swiperConfig.apiListType === ApiListType.VIDEO_SLIDES_LIVE ||\n swiperConfig.apiListType === ApiListType.LIVE_CASINO_VIDEO); // This is just for backwards compatibility until we align admin and client version\n\n if (listConfig?.ignoreNumberOfGamesInAISorting) {\n ignoreNumberOfGamesInAISorting = listConfig.ignoreNumberOfGamesInAISorting;\n }\n\n if (listConfig?.useAISortedList) {\n useAISortedList = listConfig.useAISortedList;\n }\n\n return {\n useAISortedList, ignoreNumberOfGamesInAISorting\n };\n }\n\n private _loadGameTypes(): void {\n this.config.swiperGamesList?.forEach(swiperList => {\n switch (swiperList.apiListType) {\n case ApiListType.VIDEO_SLIDES_STATIC:\n this._gamesIdsWithStaticVideos = swiperList.gamesId;\n break;\n case ApiListType.VIDEO_SLIDES_LIVE:\n case ApiListType.LIVE_CASINO_VIDEO: //To rm the latter after Admin is updated in prod.\n this._gamesIdsWithLiveStreamVideos = swiperList.gamesId;\n break;\n default:\n // //this will be changed to a dedicated new API List type\n // this._gamesIdsWithStaticVideos = swiperList.gamesId;\n break;\n }\n });\n }\n\n firstGameForFilter(filterId: string): Nullable<GameInfo> {\n let foundGame: Nullable<GameInfo> = null;\n this.allGamesInArena.some(currentGame => {\n const filterListForCurrentGame = this.services.gamesFilter.getFiltersForGame(currentGame.gameType);\n let shouldStopSearching = false;\n if (!Check.isNullOrUndefined(filterListForCurrentGame)) {\n shouldStopSearching = filterListForCurrentGame.some(filterForCurrentGame => {\n if (filterForCurrentGame === filterId) {\n foundGame = currentGame;\n return true;\n }\n return false;\n });\n\n }\n return shouldStopSearching;\n })\n\n return foundGame;\n }\n\n navigateToFilter(filterId?: string): void {\n if (Check.isNullOrUndefined(filterId)) {\n this.services.location.push(`/video-slides`);\n } else {\n this.services.location.push(`/video-slides#filters=${filterId}`);\n }\n }\n\n get onBoardingWasShown(): boolean {\n return this.getStorageData().onBoardingShown;\n }\n\n set onBoardingWasShown(value: boolean){\n\n this.setStorageData({\n onBoardingShown: value\n });\n }\n\n get swiperController(): ISparkSwiperController {\n return this._swiper.swiperController;\n }\n\n private _storageData: IVideoSlideStoredData | null = null;\n getStorageData(): IVideoSlideStoredData {\n if(!this._storageData) {\n this._storageData = {\n lastIndexPerFilter: {},\n onBoardingShown: false,\n ...this.services.localStorage.getJson<IVideoSlideStoredData>(LocalStorageKeys.videoSlides)\n };\n }\n return this._storageData;\n\n }\n setStorageData(data: Partial<IVideoSlideStoredData>) {\n this._storageData = {\n ...this.getStorageData(),\n ...data\n };\n this.services.localStorage.setJson(LocalStorageKeys.videoSlides, this._storageData);\n }\n\n createVideoPlayer(): IVideoPlayerViewModel {\n return this.services.video.createVideoStreamingPlayer();\n }\n\n get logger(): ILoggerService {\n return this.services.logger;\n }\n\n fireExplorerSwipeEvent(): void {\n this.services.sdk.eventsTrigger.exploreSwipe();\n }\n}\n\n\n\n","import {GameStepsExecutionResultEnum} from \"../game-runner/interfaces/game-step/game-run-step.interface\";\nimport {\n GamblingSessionStatus,\n IGamblingSessionUpdateData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/gambling-session_handler_interfaces\";\nimport {IGamblingSessionAnalytics} from \"./gambling-session-analytics.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {GameInfo} from \"../games/game-info\";\n\n\nexport enum GamblingSessionManagerErrorCodes {\n OK = 0,\n GeneralError = 1,\n GamblingSessionAlreadyExist = 71,\n UserInRestrictionPeriod = 72\n\n}\n\nexport class GamblingSessionData {\n constructor(private readonly data: IGamblingSessionUpdateData) {\n }\n\n get gamblingSessionId(): string {\n return this.data.gamblingSessionId;\n }\n get sessionStatus(): GamblingSessionStatus {\n return this.data.sessionStatus;\n }\n\n get sessionActivationTime(): Date | null {\n const sessionActivationTime = this.data.sessionActivationTime ?? 0;\n if(sessionActivationTime > 0) {\n return new Date(sessionActivationTime * 1000); // sessionActivationTime comes in epoch time\n }\n\n return null;\n }\n get sessionDuration(): TimeSpan | null {\n const startDate = this.sessionActivationTime;\n if(startDate) {\n return TimeSpan.fromMilliseconds(Date.now() - startDate.getTime());\n }\n\n return null;\n }\n get sessionTotalBets(): number {\n return this.data.sessionTotalBets;\n }\n get sessionTotalWins(): number {\n return this.data.sessionTotalWins;\n }\n\n get restrictionExpirationDate(): Date | null {\n if(this.data.restrictionExpirationDate) {\n return new Date(this.data.restrictionExpirationDate * 1000); // restrictionExpirationDate comes in epoch time\n }\n\n return null;\n }\n\n //readonly updateCounter?: number;\n}\n\nexport interface IGamblingSessionService {\n readonly isEnabled: boolean;\n readonly isInitialized: boolean;\n getGamblingSessionState(): Promise<GamblingSessionData>;\n startGamblingSession(gameInfo: GameInfo, isFreePlay: boolean): Promise<GameStepsExecutionResultEnum>;\n readonly analytics: IGamblingSessionAnalytics;\n}\n\n","import {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {DISPLAY_MESSAGE_IDS, getDisplayMessageName} from \"../../../common/const/casinofied-analytics-consts\";\nimport {\n IGamblingSessionActionData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/messages_handler_interfaces\";\nimport {IGamblingSessionAnalytics} from \"./gambling-session-analytics.interface\";\nimport {IGamblingSessionLimitsSetup} from \"./gambling-session-limits-setup.interface\";\nimport {IAnalyticsMessageExtraData} from \"../../../common/interfaces/casinofied-analytics-proxy.interface\";\n\nexport class GamblingSessionAnalytics implements IGamblingSessionAnalytics {\n constructor(private readonly services: IServiceFactoryExtended) {\n\n }\n\n private get userBankroll(): number {\n return this.services.walletProxy.totalBankroll;\n }\n\n\n private get userBankrollCurrency(): string {\n return this.services.currency.currencyIso3;\n }\n\n reportSetLimitPopupShown(correlationId: string): void {\n this.services.casinofiedAnalytics.messageDisplay({\n displayMessageID: DISPLAY_MESSAGE_IDS.SDSetLimitPopUp,\n displayMessageName: \"SDSetLimitPopUp\",\n businessCorrelationID: correlationId,\n correlationID: correlationId\n })\n }\n\n reportConfirmSetLimitPopup(correlationId: string, limits: IGamblingSessionLimitsSetup, errorCode: number, gamblingSessionId: string): void {\n this.services.casinofiedAnalytics.messageActionTaken({\n displayMessageName: getDisplayMessageName(DISPLAY_MESSAGE_IDS.SDSetLimitPopUp),\n actionType: \"Set\",\n businessCorrelationID: correlationId,\n correlationID: correlationId,\n extraData: {\n sessionRequestedNetLossAmountLimit: limits.lossLimitAmount,\n sessionRequestedTimeLimitInSeconds: limits.sessionDurationLimit.totalSeconds,\n sessionRequestedTimeReminderInSeconds: limits.reminderInterval.totalSeconds,\n sessionRequestedRestrictionInSeconds: limits.restrictionPeriod.totalSeconds,\n gamblingSessionId: gamblingSessionId,\n errorCode: errorCode\n }\n });\n }\n\n reportCancelSetLimitPopup(correlationId: string): void {\n this.services.casinofiedAnalytics.messageActionTaken({\n displayMessageName: getDisplayMessageName(DISPLAY_MESSAGE_IDS.SDSetLimitPopUp),\n actionType: \"Cancel\",\n businessCorrelationID: correlationId,\n correlationID: correlationId\n });\n }\n\n private _reportPopupShown(messageId: number, data: IGamblingSessionActionData) {\n this.services.casinofiedAnalytics.messageDisplay({\n displayMessageID: messageId,\n displayMessageName: getDisplayMessageName(messageId),\n businessCorrelationID: data.correlationID,\n correlationID: data.correlationID,\n extraData: {\n bankrollCurr: this.userBankrollCurrency,\n amountBankroll: this.userBankroll,\n messageTypeSource: data.messageType,\n sessionDurationInSeconds: data.sessionDurationInSeconds,\n totalStakes: data.sessionTotalBets,\n totalWins: data.sessionTotalWins,\n gamblingSessionId: data.gamblingSessionId\n }\n });\n }\n\n reportNetLossAdvancedWarningShown(data: IGamblingSessionActionData): void {\n this._reportPopupShown(\n DISPLAY_MESSAGE_IDS.SDNetLossAdvanceWarning,\n data\n )\n }\n\n reportTimeLimitAdvancedWarningShown(data: IGamblingSessionActionData): void {\n this._reportPopupShown(\n DISPLAY_MESSAGE_IDS.SDTimeLimitAdvanceWarning,\n data\n )\n }\n\n reportNetLossLimitReachedShown(data: IGamblingSessionActionData): void {\n this._reportPopupShown(\n DISPLAY_MESSAGE_IDS.SDNetLossLimitsReached,\n data\n )\n }\n\n reportTimeLimitReachedShown(data: IGamblingSessionActionData): void {\n this._reportPopupShown(\n DISPLAY_MESSAGE_IDS.SDTimeLimitsReached,\n data\n )\n }\n\n reportRealityCheckShow(data: IGamblingSessionActionData): void {\n this._reportPopupShown(\n DISPLAY_MESSAGE_IDS.SDRealityCheck ,\n data\n )\n }\n\n reportMessageConfirmed(messageId: number, data: IGamblingSessionActionData) {\n this.services.casinofiedAnalytics.messageActionTaken({\n displayMessageName: getDisplayMessageName(messageId),\n actionType: 'Confirm',\n businessCorrelationID: data.correlationID,\n correlationID: data.correlationID,\n extraData: {\n messageTypeSource: data.messageType,\n gamblingSessionId: data.gamblingSessionId\n }\n });\n }\n\n private async _getAnalyticsExtraData(): Promise<Partial<IAnalyticsMessageExtraData>> {\n const sessionData = await this.services.gamblingSession.getGamblingSessionState();\n return {\n amountBankroll: this.userBankroll,\n bankrollCurr: this.userBankrollCurrency,\n totalStakes: sessionData.sessionTotalBets,\n totalWins: sessionData.sessionTotalWins,\n netPosition: sessionData.sessionTotalBets - sessionData.sessionTotalWins\n }\n }\n\n async reportLogoutMessageShown(): Promise<void> {\n const correlationId = this.services.tools.getGuid();\n const extraData = await this._getAnalyticsExtraData();\n this.services.casinofiedAnalytics.messageDisplay({\n displayMessageID: DISPLAY_MESSAGE_IDS.SDResult,\n displayMessageName: getDisplayMessageName(DISPLAY_MESSAGE_IDS.SDResult),\n businessCorrelationID: correlationId,\n correlationID: correlationId,\n extraData: extraData\n })\n }\n\n async reportLogoutMessageActionTaken(actionType: 'Cancel' | 'Logout'): Promise<void> {\n const correlationId = this.services.tools.getGuid();\n const extraData = await this._getAnalyticsExtraData();\n this.services.casinofiedAnalytics.messageActionTaken({\n displayMessageName: getDisplayMessageName(DISPLAY_MESSAGE_IDS.SDResult),\n actionType: actionType,\n businessCorrelationID: correlationId,\n correlationID: correlationId,\n extraData: extraData\n });\n }\n\n}","import {ServiceBase} from \"../ServiceBase\";\nimport {\n GamblingSessionData,\n GamblingSessionManagerErrorCodes,\n IGamblingSessionService\n} from \"./gambling-session.service.interface\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nimport {makeObservable, observable, runInAction} from \"mobx\";\nimport {GameStepsExecutionResultEnum} from \"../game-runner/interfaces/game-step/game-run-step.interface\";\nimport {GamblingSessionSetupComponent} from \"../../components/gambling-session/setup/gambling-session-setup.component\";\nimport {DialogButtonClickHandleResultEnum, IModalDialogHandler} from \"../dialog/dialog.service.interface\";\n\nimport {\n GamblingSessionStatus,\n IGamblingSessionUpdateData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/gambling-session_handler_interfaces\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {CGPEventSubscription} from \"../sdk/cgp-sdk.interface\";\nimport {Nullable, NullableString} from \"../../../common/types/nullable-types\";\nimport {\n GamblingSessionActionType,\n IGamblingSessionActionData\n} from \"../../../sdk/src/services/player_messages_service/firebase/handlers/messages_handler_interfaces\";\nimport {\n GamblingSessionLimitReachedComponent,\n LimitType\n} from \"../../components/gambling-session/limit-reached/gambling-session-limit-reached.component\";\nimport {IToastHandler} from \"../toaster/toaster.service.interface\";\nimport {GamblingSessionAnalytics} from \"./gambling-session-analytics\";\nimport {IGamblingSessionLimitsSetup} from \"./gambling-session-limits-setup.interface\";\nimport {DISPLAY_MESSAGE_IDS} from \"../../../common/const/casinofied-analytics-consts\";\nimport {GameInfo} from \"../games/game-info\";\n\n\nexport class GamblingSessionService extends ServiceBase implements IGamblingSessionService {\n\n constructor(services: IServiceFactoryExtended) {\n super(services);\n\n this._gamblingSessionStatePromise = this._createInitialGamblingSessionStatePromise();\n this.analytics = new GamblingSessionAnalytics(services);\n\n makeObservable(this);\n\n if (this.isEnabled) {\n this.services.sdk.events.onGamblingSessionAction(this._onGamblingSessionActionHandler);\n this.reaction(() => this.services.user.isAuthorized,\n (isAuthorized) => {\n if (!isAuthorized) {\n\n this._onGamblingSessionUpdateSubscription?.off();\n if (this._initialPromiseResolver) {\n //resolve the current promise in case it was hanging around\n this._initialPromiseResolver(new GamblingSessionData(this._createDefaultGamblingSessionData()));\n this._initialPromiseResolver = null;\n }\n\n this._advancedWarningLossLimitToast?.close();\n this._advancedWarningLossLimitToast = null;\n this._advancedWarningTimeLimitToast?.close();\n this._advancedWarningTimeLimitToast = null;\n this._intervalReminderDialog?.close();\n this._intervalReminderDialog = null;\n\n //when the user logs out we reinitialize the promise so if he login again to start all over fresh\n this._gamblingSessionStatePromise = this._createInitialGamblingSessionStatePromise();\n\n }\n });\n }\n\n }\n\n readonly analytics: GamblingSessionAnalytics;\n\n @observable.ref\n private _gamblingSessionStatePromise: Promise<GamblingSessionData>;\n private _onGamblingSessionUpdateSubscription: Nullable<CGPEventSubscription> = null;\n\n //we use this to resolve the promise in case of logout so it will not hang forever;\n private _initialPromiseResolver: Nullable<((value: GamblingSessionData | PromiseLike<GamblingSessionData>) => void)> = null;\n\n\n private _advancedWarningLossLimitToast: IToastHandler | null = null;\n private _advancedWarningTimeLimitToast: IToastHandler | null = null;\n private _intervalReminderDialog: IModalDialogHandler | null = null;\n\n get isEnabled(): boolean {\n return this.services.regulation.current.isGamblingSessionEnabled;\n }\n\n get isInitialized(): boolean {\n //if _initialPromiseResolver is null it means that the initial gambling session promise was resolved, so we got the initial firebase message event;\n return !Boolean(this._initialPromiseResolver);\n }\n\n\n\n private _createInitialGamblingSessionStatePromise(): Promise<GamblingSessionData> {\n if(!this.isEnabled) {\n return Promise.resolve(new GamblingSessionData(this._createDefaultGamblingSessionData()));\n }\n\n //we initialize this promise even if the user is not logged in to make sure that when he actually login we don't miss the onGamblingSessionUpdate event\n return new Promise<GamblingSessionData>(resolve => {\n this._initialPromiseResolver = resolve;\n //here we are listening for the first onGamblingSessionUpdate event\n this._onGamblingSessionUpdateSubscription = this.services.sdk.events.onGamblingSessionUpdate(sessionData => {\n //once we get it we resolve the current promise\n resolve(new GamblingSessionData(sessionData));\n\n //unsubscribe from the firebase gambling session update event\n this._onGamblingSessionUpdateSubscription.off();\n\n //we set _gamblingSessionStatePromiseCleaner to null because now our promise is resolved so no need to clean it when the user logout\n this._initialPromiseResolver = null;\n\n runInAction(() => {\n this._gamblingSessionStatePromise = Promise.resolve(new GamblingSessionData(sessionData));\n });\n\n //Then we start listening for subsequent onGamblingSessionUpdate events to update total bets/wins in the game regulation strip\n //or showing this info in different popups\n this._onGamblingSessionUpdateSubscription = this.services.sdk.events.onGamblingSessionUpdate(sessionData => {\n runInAction(() => {\n this._gamblingSessionStatePromise = Promise.resolve(new GamblingSessionData(sessionData));\n });\n });\n });\n })\n }\n\n\n private _createDefaultGamblingSessionData(): IGamblingSessionUpdateData {\n return {\n sessionStatus: GamblingSessionStatus.Inactive,\n sessionTotalBets: 0,\n sessionTotalWins: 0,\n gamblingSessionId: \"\",\n updateCounter: -1\n };\n }\n\n private _onGamblingSessionActionHandler = (data: IGamblingSessionActionData) => {\n switch (data.messageType) {\n case GamblingSessionActionType.AdvancedWarningNetLossLimit:\n\n this._advancedWarningLossLimitToast?.close();\n\n this.analytics.reportNetLossAdvancedWarningShown(data);\n\n this._advancedWarningLossLimitToast = this.services.toaster.showAckStandardToast({\n contentProps: {\n title: this.services.translation.translate(\"ATTENTION\"),\n message: this.services.translation.translate(\"GAMBLING_SESSION_ADVANCED_WARN_LOSS_LIMIT_TOAST\"),\n button: {\n text: this.services.translation.translate(\"OK\"),\n onClick: closeToast => closeToast()\n }\n },\n onToastClosed: () => {\n this._advancedWarningLossLimitToast = null;\n this.analytics.reportMessageConfirmed(DISPLAY_MESSAGE_IDS.SDNetLossAdvanceWarning, data);\n }\n });\n break;\n case GamblingSessionActionType.AdvancedWarningTimeLimit:\n this._advancedWarningTimeLimitToast?.close();\n\n this.analytics.reportTimeLimitAdvancedWarningShown(data);\n\n this._advancedWarningTimeLimitToast = this.services.toaster.showAckStandardToast({\n contentProps: {\n title: this.services.translation.translate(\"ATTENTION\"),\n message: this.services.translation.translate(\"GAMBLING_SESSION_ADVANCED_WARN_TIME_LIMIT_TOAST\"),\n button: {\n text: this.services.translation.translate(\"OK\"),\n onClick: closeToast => closeToast()\n }\n },\n onToastClosed: () => {\n this._advancedWarningTimeLimitToast = null;\n this.analytics.reportMessageConfirmed(DISPLAY_MESSAGE_IDS.SDTimeLimitAdvanceWarning, data);\n }\n });\n break;\n case GamblingSessionActionType.TimeLimitReached:\n this.analytics.reportTimeLimitReachedShown(data);\n this.services.dialog.showModal(dialogHandler => (\n <GamblingSessionLimitReachedComponent dialogHandler={dialogHandler}\n limitType={LimitType.Time}\n sessionLimitTimestamp={this._formatUTCDate(new Date(data.messageTimeStamp))}\n sessionDuration={TimeSpan.fromSeconds(data.sessionDurationInSeconds)}\n totalBets={data.sessionTotalBets}\n totalWins={data.sessionTotalWins}/>),\n {\n title: this.services.translation.translate(\"GAMBLING_SESSION_TIME_LIMIT_REACHED_TITLE\"),\n noDefaultContentPadding: true,\n isHighPriority: true,\n onClosed: () => {\n this.analytics.reportMessageConfirmed(DISPLAY_MESSAGE_IDS.SDTimeLimitsReached, data);\n }\n });\n break;\n case GamblingSessionActionType.LossLimitReached:\n this.analytics.reportNetLossLimitReachedShown(data);\n this.services.dialog.showModal(dialogHandler => (\n <GamblingSessionLimitReachedComponent dialogHandler={dialogHandler}\n limitType={LimitType.Loss}\n sessionLimitTimestamp={this._formatUTCDate(new Date(data.messageTimeStamp))}\n sessionDuration={TimeSpan.fromSeconds(data.sessionDurationInSeconds)}\n totalBets={data.sessionTotalBets}\n totalWins={data.sessionTotalWins}/>),\n {\n title: this.services.translation.translate(\"GAMBLING_SESSION_LOSS_LIMIT_REACHED_TITLE\"),\n noDefaultContentPadding: true,\n isHighPriority: true,\n onClosed: () => {\n this.analytics.reportMessageConfirmed(DISPLAY_MESSAGE_IDS.SDNetLossLimitsReached, data);\n }\n });\n break;\n case GamblingSessionActionType.TimeReminder:\n this._intervalReminderDialog?.close();\n this.analytics.reportRealityCheckShow(data);\n this._intervalReminderDialog = this.services.dialog.showModal(dialogHandler => (\n <GamblingSessionLimitReachedComponent\n dialogHandler={dialogHandler}\n limitType={LimitType.IntervalReminder}\n sessionLimitTimestamp={this._formatUTCDate(new Date(data.messageTimeStamp))}\n sessionDuration={TimeSpan.fromSeconds(data.sessionDurationInSeconds)}\n totalBets={data.sessionTotalBets}\n totalWins={data.sessionTotalWins}\n />\n ), {\n title: this.services.translation.translate(\"GAMBLING_SESSION_INTERVAL_REMINDER_TITLE\"),\n noDefaultContentPadding: true,\n isHighPriority: true,\n onClosed: () => {\n this.analytics.reportMessageConfirmed(DISPLAY_MESSAGE_IDS.SDRealityCheck, data);\n }\n });\n break;\n }\n }\n\n private _formatDate(date: Date): string {\n return this.services.time.formatHistoryRecordDateTime(date, false);\n }\n\n private _formatUTCDate(date: Date): string {\n return this.services.time.formatHistoryRecordDateTime(new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000), false);\n }\n\n getGamblingSessionState(): Promise<GamblingSessionData> {\n if(this.isInitialized) {\n return this._gamblingSessionStatePromise;\n }\n\n return new Promise<GamblingSessionData>((resolve, reject) => {\n let hasTimedOut = false;\n const timeoutRef = setTimeout(() => {\n hasTimedOut = true;\n reject('Firebase gambling session update timed out');\n }, TimeSpan.parse(this.services.configuration.servicesConfigs.GamblingSession.firebaseTimeout).totalMilliseconds);\n\n this._gamblingSessionStatePromise.then(currentState => {\n if(!hasTimedOut) {\n clearTimeout(timeoutRef);\n resolve(currentState);\n }\n }).catch(err => {\n if(!hasTimedOut) {\n clearTimeout(timeoutRef);\n reject(err);\n }\n });\n });\n }\n\n private _showGamblingSessionRestrictedMessage(restrictionExpirationDate: Date): void {\n this.services.dialog.showSimpleTextModal({\n title: this.services.translation.translate('generic_notification_popup_title'),\n text: this.services.translation.translate('GAMBLING_SESSION_SELF_RESTRICTION_MESSAGE', {restrictionExpirationDate: this._formatDate(restrictionExpirationDate)}),\n buttons: [\n {\n text: this.services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n }\n\n async startGamblingSession(gameInfo: GameInfo, isFreePlay: boolean): Promise<GameStepsExecutionResultEnum> {\n\n const currentState = await this.getGamblingSessionState();\n if(isFreePlay) {\n if(currentState.sessionStatus === GamblingSessionStatus.Expired\n || (currentState.sessionStatus === GamblingSessionStatus.Restricted && currentState.restrictionExpirationDate.getTime() < Date.now())){\n const response = await this.services.api.gamblingSessionController.createGamblingSession();\n switch (response.errorCode) {\n case GamblingSessionManagerErrorCodes.OK:\n case GamblingSessionManagerErrorCodes.GamblingSessionAlreadyExist:\n return GameStepsExecutionResultEnum.Continue;\n default:\n this._showGeneralErrorMessage();\n return GameStepsExecutionResultEnum.Cancel;\n\n }\n } else if(currentState.sessionStatus === GamblingSessionStatus.Restricted && currentState.restrictionExpirationDate.getTime() > Date.now()) {\n //Theoretically we should never reach here because the game will be stopped by the RestrictionsGameStep and the message will be shown there.\n this._showGamblingSessionRestrictedMessage(currentState.restrictionExpirationDate);\n return GameStepsExecutionResultEnum.Cancel;\n }\n\n return GameStepsExecutionResultEnum.Continue;\n }\n\n if(currentState.sessionStatus === GamblingSessionStatus.Active) {\n return GameStepsExecutionResultEnum.Continue;\n } else if(currentState.sessionStatus === GamblingSessionStatus.Restricted && currentState.restrictionExpirationDate.getTime() > Date.now()) {\n //Theoretically we should never reach here because the game will be stopped by the RestrictionsGameStep and the message will be shown there.\n this._showGamblingSessionRestrictedMessage(currentState.restrictionExpirationDate);\n return GameStepsExecutionResultEnum.Cancel;\n } else {\n const correlationId = this.services.tools.getGuid();\n return await this._showGamblingSessionSetupDialog(await this._getLastBetActivity(correlationId), correlationId);\n }\n }\n\n private async _getLastBetActivity(correlationId: string): Promise<NullableString> {\n try {\n const response = await this.services.api.userController.getLastBetActivity({\n correlationId: correlationId\n });\n\n if(response.LastBetActivity) {\n return this._formatDate(new Date(response.LastBetActivity));\n }\n\n return null;\n } catch (err) {\n this.services.logger.error('Failed to get last bet activity', err);\n return null;\n }\n\n }\n\n private _showGeneralErrorMessage(): void {\n this.services.dialog.showSimpleTextModal({\n text: this.services.regulation.getGeneralErrorMessage(),\n showEmptyTitle: true,\n buttons: [\n {\n text: this.services.translation.translate('OK'),\n buttonPreset: 'primary',\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n }\n\n private _showGamblingSessionSetupDialog(lastBetActivity: NullableString, correlationId: string): Promise<GameStepsExecutionResultEnum> {\n\n this.analytics.reportSetLimitPopupShown(correlationId);\n\n return new Promise<GameStepsExecutionResultEnum>((resolve, reject) => {\n\n const onSetLimits = async (limits: IGamblingSessionLimitsSetup) => {\n try {\n const response = await this.services.api.gamblingSessionController.startGamblingSession({\n correlationId: correlationId,\n lossLimitAmount: limits.lossLimitAmount,\n sessionDurationLimitInSeconds: limits.sessionDurationLimit.totalSeconds,\n reminderIntervalInSeconds: limits.reminderInterval.totalSeconds,\n restrictionPeriodInSeconds: limits.restrictionPeriod?.totalSeconds ?? 0,\n });\n\n this.analytics.reportConfirmSetLimitPopup(correlationId, limits, response.errorCode, response.gamblingSessionId);\n\n switch (response.errorCode) {\n case GamblingSessionManagerErrorCodes.OK:\n resolve(GameStepsExecutionResultEnum.Continue);\n break;\n case GamblingSessionManagerErrorCodes.GamblingSessionAlreadyExist:\n this.services.dialog.showSimpleTextModal({\n title: this.services.translation.translate('generic_notification_popup_title'),\n text: this.services.translation.translate('GAMBLING_SESSION_LIMITS_ALREADY_SET'),\n onClosed: () => resolve(GameStepsExecutionResultEnum.Continue),\n hideCloseButton: true,\n buttons: [\n {\n text: this.services.translation.translate('OK'),\n buttonPreset: \"primary\",\n onClick: async () => DialogButtonClickHandleResultEnum.CloseDialogAndContinue\n }\n ]\n });\n break;\n default:\n this._showGeneralErrorMessage();\n resolve(GameStepsExecutionResultEnum.Cancel);\n break;\n }\n } catch (err) {\n this.services.logger.error('Failed to start gambling session', err);\n reject(err);\n }\n }\n\n this.services.dialog.showModal(dialog => (<GamblingSessionSetupComponent dialogHandler={dialog}\n lastBetActivity={lastBetActivity}\n onSetLimits={onSetLimits}/>), {\n title: this.services.translation.translate('GAMBLING_SESSION_SETUP_TITLE'),\n noDefaultContentPadding: true,\n isHighPriority: true,\n mobileCenterHeader: true,\n onClosedByXButton: () => {\n this.analytics.reportCancelSetLimitPopup(correlationId);\n resolve(GameStepsExecutionResultEnum.Cancel)\n }\n });\n });\n }\n\n}","import {Check} from \"@sparkware/app-utils\";\nimport {ILazy} from \"./lazy.interface\";\n\nexport class LazyAsync<T> implements ILazy<T> {\n constructor(private _valueFactory: () => Promise<T>) {\n }\n\n readonly isLazy = true;\n\n private _promisedValue: Promise<T> = undefined;\n private _resolvedValue: T = undefined;\n private _initializing = false;\n private _initValue(): void {\n if(this._initializing) {\n throw new Error('Lazy circular dependency detected: ' + this._valueFactory)\n }\n if(Check.isUndefined(this._promisedValue)) {\n this._initializing = true;\n try {\n this._promisedValue = this._valueFactory().then(instance => {\n this._resolvedValue = instance;\n return this._resolvedValue;\n });\n }\n finally {\n this._initializing = false;\n }\n\n }\n }\n\n get value(): Promise<T> {\n this._initValue();\n return this._promisedValue;\n }\n\n tryGetResolvedValue(): T | Promise<T> {\n if(this._resolvedValue) {\n return this._resolvedValue;\n }\n return this.value;\n }\n\n forceInit(): void {\n this._initValue();\n }\n}\n","export class ServicesGroupLoader {\n async loadGroup1() {\n return await import(/*webpackChunkName: \"services-group1\" */'./services.group1');\n }\n\n async loadGroup2() {\n return await import(/*webpackChunkName: \"services-group2\" */'./services.group2');\n }\n\n async loadGroup3() {\n return await import(/*webpackChunkName: \"services-group3\" */'./services.group3');\n }\n\n async loadGroup4() {\n return await import(/*webpackChunkName: \"services-group4\" */'./services.group4');\n }\n\n async loadGroup5() {\n return await import(/*webpackChunkName: \"services-group5\" */'./services.group5');\n }\n}","import styled from 'styled-components';\n\nexport const SnackbarNotificationComponentBox = styled.div<{bottomOffset?: number}>`\n background-color: ${props => props.theme.colors.snackbarNotificationBg || props.theme.colors.brandPrimaryContrast};\n color: ${props => props.theme.colors.textContrast};\n \n z-index: 100;\n position: fixed;\n bottom: ${props => props.bottomOffset + 'px'};\n left: 50%;\n transform: translate(-50%, -50%);\n \n font-size: 1.4rem;\n \n border-radius: 4px;\n padding: 12px 18px;\n \n display: flex;\n width: min(95%, 700px);\n ${({theme}) => theme.font.presets.regular};\n \n \n & span:first-of-type {\n flex-grow: 1;\n }\n \n & span:last-of-type {\n cursor: pointer;\n ${({theme}) => theme.font.presets.body};\n\n }\n\n animation: fadeInAnimation ease 0.5s;\n animation-fill-mode: forwards; \n \n @keyframes fadeInAnimation {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n`;","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const SnackbarNotificationTitleBox = styledBox(\"SnackbarNotificationTitleBox\");","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {ThemeProvider} from \"styled-components\";\nimport {SnackbarNotificationComponentBox} from \"./snackbar-notification.component.box\";\nimport {SnackbarNotificationParams} from \"../../services/notifications/notifications.service\";\nimport {HYBRID_EMBEDDED_NAV_MENU} from \"../bottom-navigation-bar/bottom-navigation-bar-consts\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {SnackbarNotificationTitleBox} from './box/snackbar-notification-title.box';\n\nexport interface SnackbarNotificationComponentWithServicesProps extends ComponentServicesPick<'dom' | 'theme'>, SnackbarNotificationParams {\n\n}\n\nconst ComponentBody: React.FC<SnackbarNotificationComponentWithServicesProps> = observer((props) => {\n\n const getBottomOffset = (): number => {\n const bottomMenu = props.dom.querySelector(`.${HYBRID_EMBEDDED_NAV_MENU}`);\n return bottomMenu ? bottomMenu?.getBoundingClientRect().height : 80;\n }\n\n return (\n <ThemeProvider theme={props.theme.popupsTheme}>\n <SnackbarNotificationComponentBox bottomOffset={getBottomOffset()}>\n <SnackbarNotificationTitleBox>\n {props.text}\n </SnackbarNotificationTitleBox>\n <SnackbarNotificationTitleBox onClick={props.onCtaClick}>\n {props.ctaText}\n </SnackbarNotificationTitleBox>\n </SnackbarNotificationComponentBox>\n </ThemeProvider>\n );\n});\n\nexport const SnackbarNotificationComponent = withServices(ComponentBody, [\"dom\", \"theme\"]);","import React from 'react';\nimport {ServiceBase} from \"../ServiceBase\";\nimport {INotificationsService} from \"./notifications.service.interface\";\nimport {action, makeObservable, observable} from \"mobx\";\nimport {\n SnackbarNotificationComponent\n} from \"../../components/notifications/snackbar-notification.component\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nexport interface SnackbarNotificationParams {\n text: string;\n ctaText: string;\n onCtaClick: () => void;\n}\n\nexport interface DisplaySnackBarOptions extends SnackbarNotificationParams {\n displayTimeMs: number;\n}\n\ntype ActiveNotification = {\n id: number;\n value: React.ReactNode;\n}\n\nexport class NotificationsService extends ServiceBase implements INotificationsService {\n\n private static readonly SAVE_GAME_NOTIFICATION_DISPLAY_TIME_MS: number = 3000;\n\n constructor(services:IServiceFactoryExtended) {\n super(services);\n\n makeObservable(this);\n }\n\n @observable.ref\n private _currentNotifications: ActiveNotification[] = [];\n\n @action.bound\n private _setCurrentNotifications(newNotifications: ActiveNotification[]): void {\n this._currentNotifications = newNotifications;\n }\n\n public get currentNotificationsComponents(): React.ReactNode[] {\n return this._currentNotifications.map(dialog => dialog.value);\n }\n\n public showGameSavedNotification(): void {\n this.showNotification({\n text: this.services.translation.translate(\"GAME_SAVED_NOTIFICATION_TEXT\"),\n ctaText: this.services.translation.translate(\"GAME_SAVED_NOTIFICATION_CTA\"),\n displayTimeMs: NotificationsService.SAVE_GAME_NOTIFICATION_DISPLAY_TIME_MS,\n onCtaClick: async () => {\n const userMenuService = await this.services.userMenu;\n userMenuService.openSaveGameWidget();\n }\n });\n }\n\n private showNotification(newNotificationOptions: DisplaySnackBarOptions) {\n const id: number = Date.now();\n setTimeout(() => this.removeNotification(id), newNotificationOptions.displayTimeMs);\n this._setCurrentNotifications([\n ...this._currentNotifications,\n {\n id: id,\n value: <SnackbarNotificationComponent\n text={newNotificationOptions.text}\n ctaText={newNotificationOptions.ctaText}\n onCtaClick={newNotificationOptions.onCtaClick}\n />\n }\n ]);\n }\n\n private removeNotification(id: number): void {\n this._setCurrentNotifications(this._currentNotifications.filter(cn => cn.id !== id));\n }\n}\n","\nimport Hls from 'hls.js';\nimport {VideoHlsBasePlayer} from './video-player-hls-base';\n\nexport class VideoOnDemandHlsPlayer extends VideoHlsBasePlayer {\n load() {\n if (this._hlsInstance) {\n this._hlsInstance.startLoad();\n } else {\n this._hlsInstance = this._createHlsInstance();\n this._hlsInstance.attachMedia(this.videoReference);\n }\n }\n\n play() {\n if (this._hlsInstance) {\n this._hlsInstance.startLoad();\n super.play();\n } else {\n this._hlsInstance = this._createHlsInstance();\n this._hlsInstance.on(Hls.Events.MANIFEST_PARSED, this._onManifestParsed);\n this._hlsInstance.attachMedia(this.videoReference);\n }\n }\n\n pause() {\n super.pause();\n this._hlsInstance?.stopLoad();\n }\n\n onWatchTimeLimitReached() {\n\n }\n\n private _createHlsInstance(): Hls {\n const hlsInstance = new Hls(this.HLS_CONFIG);\n\n hlsInstance.on(Hls.Events.ERROR, this._onHlsError);\n hlsInstance.on(Hls.Events.MEDIA_ATTACHED, this._onMediaAttached);\n hlsInstance.on(Hls.Events.LEVEL_UPDATED, this._onLevelUpdated);\n hlsInstance.on(Hls.Events.FPS_DROP, this._onFpsDrop);\n hlsInstance.on(Hls.Events.FRAG_LOADED, this._onBandwidthEstimate)\n hlsInstance.bandwidthEstimate = this.services.videoOnDemandPlaying.bandwidthEstimate;\n return hlsInstance;\n }\n}\n","import {LiveStreamNativePlayer} from './video-live-stream-player-native';\n\nexport class VideoOnDemandNativePlayer extends LiveStreamNativePlayer {\n load() {\n super.play();\n super.pause();\n this.rewind();\n }\n\n onWatchTimeLimitReached() {\n\n }\n\n private rewind() {\n this.videoReference.currentTime = 0;\n }\n}\n","import {VideoPlayingServiceBase} from \"./video-playing-service-base\";\nimport {GameInfo} from \"../games/game-info\";\nimport {IVideoPlayer} from \"./video-players/video-player.interface\";\nimport {VideoOnDemandHlsPlayer} from \"./video-players/live-stream-players/hls/video-on-demand-player-hls\";\nimport {VideoOnDemandNativePlayer} from \"./video-players/live-stream-players/native/video-on-demand-player-native\";\n\nexport const VIDEO_ON_DEMAND_WATCH_TIME_LIMIT: number = 1200000;\n\nexport class VideoOnDemandPlayingService extends VideoPlayingServiceBase {\n\n public gaCategory = \"VIDEO-ON-DEMAND\";\n\n protected _checkIfSupported() {\n const videoEl = document.createElement('video');\n try {\n if (VideoOnDemandNativePlayer.isSupported(videoEl)) {\n return true;\n }\n\n return VideoOnDemandHlsPlayer.isSupported();\n } finally {\n try {\n videoEl.src = \"\";\n videoEl.load();\n videoEl.remove();\n } catch (err) {\n this.services.logger.error('VideoOnDemandPlayingService - Failed to release temp video element', err);\n }\n }\n\n }\n\n getVideoPlayer(gameInfo: GameInfo, videoReference: HTMLVideoElement, dontAutoSwipe?: boolean): IVideoPlayer {\n\n const gameType = gameInfo.gameType;\n const streamSource = gameInfo.videoSlideUrl;\n\n if(gameInfo.slideCover){\n videoReference.poster = gameInfo.slideCover;\n }\n\n //Still under discussion whether VOD should have or not watch time limit.\n const watchTimeLimit = VIDEO_ON_DEMAND_WATCH_TIME_LIMIT;\n\n // We need to check also if not android because Evo live stream games not working on android real device because they use WAF and they don't get referer in android native.\n if (!this.services.device.os.isAndroid && VideoOnDemandNativePlayer.isSupported(videoReference)) {\n return new VideoOnDemandNativePlayer(this.services, gameType, videoReference, streamSource, watchTimeLimit);\n }\n \n if (VideoOnDemandHlsPlayer.isSupported()) {\n return new VideoOnDemandHlsPlayer(this.services, gameType, videoReference, streamSource, watchTimeLimit);\n }\n\n return null;\n }\n}\n","import {MenuItemsConfiguration} from \"../configurations/config-data-sections/menu-items.configuration\";\nimport {MenuItemConfigReaderBase} from \"../menu-items-common/menu-item-config-reader/menu-item-config-reader-base\";\nimport {\n MenuItemAnalyticsCategoryAndLabel\n} from \"../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {OrbitUserFlowAnalyticsCategory, OrbitUserFlowAnalyticsLabel} from \"../analytics/analytics.service.interface\";\n\n\nexport class CrossBrandsMenuItemConfigReader extends MenuItemConfigReaderBase {\n\n protected _getMenuItemsConfigOverrides(): MenuItemsConfiguration | undefined {\n return this.services.configuration.data.header.menuItemsOverride;\n }\n\n protected _getAnalyticsCategoryAndLabel(): MenuItemAnalyticsCategoryAndLabel {\n return {\n category: OrbitUserFlowAnalyticsCategory.Navigation,\n label: OrbitUserFlowAnalyticsLabel.AppHeader\n };\n }\n}\n\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const AppHeaderCrossBrandItemBox = styledBox('AppHeaderCrossBrandItemBox');","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const AppHeaderCrossBrandTextBox = styledBox('AppHeaderCrossBrandTextBox');","import {Check} from \"@sparkware/app-utils\";\nimport {PropsWithChildren} from \"react\";\nimport {MenuItemComponentProps} from \"../../../../../services/menu-items-common/menu-item-component-props.interface\";\nimport {IMenuItemRenderer} from \"../../../../../services/menu-items-common/renderer/menu-item.renderer.interface\";\nimport {OrbitComponent} from \"../../../../base-components/orbit-component/orbit-component\";\nimport {AppHeaderCrossBrandItemBox} from \"../boxes/app-header-cross-brand-item/app-header-cross-brand-item.box\";\nimport {AppHeaderCrossBrandTextBox} from \"../boxes/app-header-cross-brand-text/app-header-cross-brand-text.box\";\n\ninterface GenericCrossBrandsMenuLinkComponentProps extends MenuItemComponentProps {\n className?: string;\n}\n\nexport class GenericCrossBrandsMenuItemComponent extends OrbitComponent<PropsWithChildren<GenericCrossBrandsMenuLinkComponentProps>> {\n private _onBrandClick = () => {\n\n const isAuth = this.services.user.isAuthorized;\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Header\", \"Cross_\" + (isAuth ? \"Casino_\" : \"\") + this.props.menuItem.text);\n \n this.props.menuItem.execute();\n };\n\n \n private _renderIcon = () => {\n const brandConfig: IMenuItemRenderer = this.props.menuItem;\n\n if (Check.isEmpty(brandConfig?.icon)) {\n return null;\n }\n\n const Icon = this.services.theme.currentTheme.icons[brandConfig.icon];\n\n if (Check.isNullOrUndefined(Icon)) {\n return null;\n }\n\n return <Icon className={`cy-cross-brand-link-icon`} size={3} text={''} title={brandConfig.iconAltText ?? '' } />;\n };\n\n\n render() {\n const {key, text} = this.props.menuItem;\n return <AppHeaderCrossBrandItemBox\n menuItemKey={key}\n className={`cy-cross-brand-link ${key}`}\n onClick={() => this._onBrandClick()}\n >\n {this._renderIcon()}\n <AppHeaderCrossBrandTextBox>\n {text}\n </AppHeaderCrossBrandTextBox>\n </AppHeaderCrossBrandItemBox>;\n }\n}\n","import React from 'react';\nimport {GenericCrossBrandsMenuItemComponent} from \"../../../components/header/top-header-left/cross-brand/cross-brands-items/generic-cross-brands-menu-item.component\";\nimport {MenuItemRendererBase} from \"../../menu-items-common/renderer/menu-item-renderer-base\";\nimport {IRenderMenuItemOptions} from \"../../menu-items-common/renderer/menu-item.renderer.interface\";\n\nexport class GenericCrossBrandsMenuItemRenderer extends MenuItemRendererBase {\n protected _createReactElement(options?: IRenderMenuItemOptions): React.ReactElement {\n return (<GenericCrossBrandsMenuItemComponent key={this.key} menuItem={this} />);\n }\n}","import { action, observable, makeObservable } from 'mobx';\nimport { ResizeObserver } from '@juggle/resize-observer';\n\nimport {ServiceBase} from '../ServiceBase';\nimport {IHeaderService} from './header.service.interface';\nimport {IServiceFactoryExtended} from '../service-factory-extended.interface';\nimport { DomEventSubscription } from '../../../utils/event-listener-registration';\nimport {IMenuItemRenderer} from '../menu-items-common/renderer/menu-item.renderer.interface';\nimport {CrossBrandsMenuItemConfigReader} from '../cross-brands/cross-brands-item-config-reader';\nimport {GenericCrossBrandsMenuItemRenderer} from './menu-items/generic-cross-brands-menu-item.renderer';\nimport {MenuItemKey} from '../configurations/config-data-sections/generated-config-const';\nimport {IMenuItemActionFactoryService} from \"../menu-item-action-factory/menu-item-action-factory.service.interface\";\n\nexport class HeaderService extends ServiceBase implements IHeaderService {\n private _headerResizeObserver: ResizeObserver | null = null;\n private _onScrollSubscription: DomEventSubscription | null = null;\n private _headerElement: HTMLElement | null = null;\n private _headerRegulationDataElement: HTMLElement | null = null;\n\n @observable.ref\n _headerHeight: number = 0;\n @observable.ref\n headerRegulationHeight: number = 0;\n\n @observable.ref\n public skeleton: boolean = true;\n @action.bound\n public deactivateSkeleton(): void {\n this.skeleton = false;\n }\n\n private readonly menuItemConfigReader: CrossBrandsMenuItemConfigReader;\n \n constructor(services: IServiceFactoryExtended, private readonly menuItemActionFactory: IMenuItemActionFactoryService) {\n super(services);\n makeObservable(this);\n this._headerResizeObserver = new ResizeObserver(this._onHeaderResize);\n this._onScrollSubscription = this.services.window.subscribeTo.scroll(this._onWindowScroll);\n\n this.menuItemConfigReader = new CrossBrandsMenuItemConfigReader(services);\n }\n\n get headerHeight(): number {\n return this._headerHeight + this.headerRegulationHeight;\n }\n\n @action\n private computeHeaderHeight() {\n this._headerHeight = this._headerElement?.offsetHeight || 0;\n }\n\n @action\n private computeRegulationHeaderHeight() {\n this.headerRegulationHeight = this._headerRegulationDataElement?.offsetHeight || 0;\n }\n\n private _onHeaderResize = () => {\n this.computeHeaderHeight();\n this.computeRegulationHeaderHeight();\n };\n\n private _onWindowScroll = () => {\n this.computeHeaderHeight();\n this.computeRegulationHeaderHeight();\n };\n\n @action\n setHeaderElement(headerElement: HTMLElement): void {\n if(this._headerElement) {\n this._headerResizeObserver.unobserve(this._headerElement);\n }\n this._headerElement = headerElement;\n this.computeHeaderHeight();\n if (headerElement){\n this._headerResizeObserver.observe(headerElement);\n }\n }\n\n @action\n setHeaderRegulationDataElement(headerRegulationDataElement: HTMLElement): void {\n if(this._headerRegulationDataElement) {\n this._headerResizeObserver.unobserve(this._headerRegulationDataElement);\n }\n this._headerRegulationDataElement = headerRegulationDataElement;\n this.computeRegulationHeaderHeight();\n if (headerRegulationDataElement){\n this._headerResizeObserver.observe(headerRegulationDataElement);\n }\n }\n\n getHeaderRegulationDataElement(): HTMLElement | null {\n return this._headerRegulationDataElement;\n }\n\n private menuItemKeyIsCrossBrand(k: MenuItemKey): k is \"sportCrossBrandMenuItem\" | \"pokerCrossBrandMenuItem\" {\n return k === \"sportCrossBrandMenuItem\" || k === \"pokerCrossBrandMenuItem\";\n }\n getCrossBrandsMenuItems(): IMenuItemRenderer[] {\n return this.services.configuration.data.header.cross_brand.filter(k => {\n return this.menuItemKeyIsCrossBrand(k);\n }).map(crossBrandKey => {\n return this.getCrossBrandItemRenderer(crossBrandKey);\n }).filter(menuItem => {\n return menuItem.display;\n });\n }\n private getCrossBrandItemRenderer(crossBrandKey: MenuItemKey) {\n let menuItemRenderer = this.services.regulation.current.menuItems.getAppHeaderMenuItem(crossBrandKey, this.menuItemConfigReader, this.menuItemActionFactory);\n if(menuItemRenderer) {\n return menuItemRenderer;\n }\n return new GenericCrossBrandsMenuItemRenderer(crossBrandKey, this.menuItemConfigReader, this.services, this.menuItemActionFactory);\n }\n\n dispose(): void {\n this._headerResizeObserver.disconnect();\n this._headerResizeObserver = null;\n this._onScrollSubscription.dispose();\n this._onScrollSubscription = null;\n }\n}\n","import {ServiceBase} from \"../ServiceBase\";\nimport {IMenuItemActionFactoryService} from \"./menu-item-action-factory.service.interface\";\nimport {CustomMenuItemActionConstructorDefinition, IMenuItemAction} from \"./menu-item-action.interface\";\nimport {MenuItemKey} from \"../configurations/config-data-sections/generated-config-const\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {IMenuItemConfigReader} from \"../menu-items-common/menu-item-config-reader/menu-item-config-reader.interface\";\nimport {LinkNavigationAction} from \"./link-navigation.action\";\nimport {\n MenuItemDefaultConfigReader\n} from \"../menu-items-common/menu-item-config-reader/menu-item-default-config-reader\";\n\nexport class MenuItemActionFactoryService extends ServiceBase implements IMenuItemActionFactoryService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n let actionsModules = require.context('./custom-actions', true, /.+\\.action\\.(ts|tsx)$/);\n this._customActionsModules = actionsModules.keys()\n .map(actionsModules)\n .map((module: any) => {\n const ActionConstructor: CustomMenuItemActionConstructorDefinition = module.default;\n const actionInstance = new ActionConstructor(new MenuItemDefaultConfigReader(this.services), this.services)\n return {\n actionKey: actionInstance.key,\n actionConstructor: ActionConstructor\n };\n }).toDictionary(item => item.actionKey, item => item.actionConstructor);\n }\n\n private readonly _customActionsModules: Record<MenuItemKey, CustomMenuItemActionConstructorDefinition>;\n\n getMenuItemAction(key: MenuItemKey, configReader?: IMenuItemConfigReader): IMenuItemAction {\n\n configReader = configReader ?? new MenuItemDefaultConfigReader(this.services);\n\n const CustomActionConstructor = this._customActionsModules[key];\n if(CustomActionConstructor) {\n return new CustomActionConstructor(configReader, this.services);\n }\n\n return new LinkNavigationAction(key, configReader, this.services);\n }\n}","export class VideoElementContainer {\n constructor(private _videoElement: HTMLVideoElement) {\n }\n\n private _containerElement: HTMLElement | null = null;\n\n get isAttached(): boolean {\n return Boolean(this._containerElement);\n }\n\n attach(containerElement: HTMLElement): void {\n if(!containerElement) {\n throw new Error('containerElement for video cannot be null or undefined');\n }\n\n if(this._containerElement) {\n this.detach();\n }\n\n this._containerElement = containerElement;\n\n this._containerElement.appendChild(this._videoElement);\n\n }\n\n public detach(): void {\n if(this._containerElement) {\n this._containerElement.removeChild(this._videoElement);\n this._containerElement = null;\n }\n }\n\n destroy(): void {\n this.detach();\n this._videoElement = null;\n }\n}","import {action, makeObservable, observable} from \"mobx\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nexport class VideoWatchTimeHandler {\n constructor() {\n this._watchStartTime = 0\n this._watchTimeMilliseconds = 0;\n makeObservable(this);\n }\n\n private _watchStartTime: number = 0;\n\n @observable.ref\n private _watchTimeMilliseconds: number;\n\n get watchTime(): TimeSpan {\n return TimeSpan.fromMilliseconds(this._watchTimeMilliseconds);\n }\n\n @action.bound\n updateWatchTime(): void {\n if (this._watchStartTime) {\n const currentTime = Date.now();\n this._watchTimeMilliseconds += (currentTime - this._watchStartTime);\n this._watchStartTime = currentTime;\n }\n }\n\n onPlayStarted(): void {\n this._watchStartTime = Date.now();\n }\n\n onPlayStopped(): void {\n this.updateWatchTime();\n this._watchStartTime = 0;\n }\n\n}","import {IVideoResolution} from \"../video-player.view-model.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nexport interface IVideoAnalyticsReporter {\n\n reportPlayStarted(): void;\n reportRetryPlaySuccess(): void;\n reportResumePlaySuccess(): void;\n reportPreloadError(error: any): void;\n reportPauseOnAppSleep(): void;\n reportPlayError(error: any): void;\n reportRetryPlayError(error: any): void;\n reportResumePlayError(error: any): void;\n reportDroppedFrames(droppedVideoFrames: number): void;\n reportWatchTimeLimitReached(): void;\n reportPosterLoadFailure(error: any): void;\n reportVideoResolutionChanged(previousResolution: IVideoResolution, currentResolution: IVideoResolution): void;\n reportBufferingTime(bufferingTime: TimeSpan): void;\n reportMute(): void;\n reportUnmute(): void;\n}\n\nexport function isVideoFatalError(error: any): boolean {\n if(!error) {\n return false;\n }\n\n switch (error.name) {\n case 'NotAllowedError':\n //If we get NotAllowedError it means that we can't autoplay the video. but it doesn't mean is a fatal error. The user can still play the video by click on play button\n return false;\n case 'AbortError':\n return !(error.message && error.message.indexOf('The play() request was interrupted') >= 0); //usually these are not fatal errors.\n\n default:\n return true;\n }\n}","import {makeObservable, observable, runInAction} from \"mobx\";\nimport {VideoWatchTimeHandler} from \"./video-watch-time-handler\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {isVideoFatalError, IVideoAnalyticsReporter} from \"./analytics/video-analytics-reporter.interface\";\nimport {IVideoResolution} from \"./video-player.view-model.interface\";\n\n\nexport class VideoEventsController {\n constructor(private readonly videoElement: HTMLVideoElement,\n private readonly getAnalyticsReporter: () => IVideoAnalyticsReporter) {\n\n this.videoElement.addEventListener('playing', this._onPlaying);\n this.videoElement.addEventListener('canplay', this._onCanPlay);\n this.videoElement.addEventListener('stalled', this._onStalled);\n this.videoElement.addEventListener('waiting', this._onWaiting);\n this.videoElement.addEventListener('error', this._onError);\n this.videoElement.addEventListener('emptied', this._onEmptied);\n this.videoElement.addEventListener('pause', this._onPause);\n this.videoElement.addEventListener('timeupdate', this._onTimeUpdate);\n this.videoElement.addEventListener('ended', this._onEnded);\n this.videoElement.addEventListener('resize', this._onResize);\n window.addEventListener('offline', this._onGoingOffline);\n\n\n this._watchTimeHandler = new VideoWatchTimeHandler();\n\n makeObservable(this);\n }\n\n destroy(): void {\n this.videoElement.removeEventListener('playing', this._onPlaying);\n this.videoElement.removeEventListener('canplay', this._onCanPlay);\n this.videoElement.removeEventListener('stalled', this._onStalled);\n this.videoElement.removeEventListener('waiting', this._onWaiting);\n this.videoElement.removeEventListener('error', this._onError);\n this.videoElement.removeEventListener('emptied', this._onEmptied);\n this.videoElement.removeEventListener('pause', this._onPause);\n this.videoElement.removeEventListener('timeupdate', this._onTimeUpdate);\n this.videoElement.removeEventListener('ended', this._onEnded);\n this.videoElement.removeEventListener('resize', this._onResize);\n window.removeEventListener('offline', this._onGoingOffline);\n\n }\n\n private get analyticsReporter(): IVideoAnalyticsReporter {\n return this.getAnalyticsReporter();\n }\n\n private _bufferingStartTime: number | null = null;\n\n @observable.ref\n private _watchTimeHandler: VideoWatchTimeHandler;\n\n get watchTime(): TimeSpan {\n return this._watchTimeHandler.watchTime;\n }\n\n resetWatchTime(): void {\n runInAction(() => {\n this._watchTimeHandler = new VideoWatchTimeHandler();\n })\n }\n\n @observable.ref\n private _isLoading: boolean = true;\n get isLoading(): boolean {\n return this._isLoading;\n }\n\n\n @observable.ref\n private _isBuffering: boolean = false;\n get isBuffering(): boolean {\n return this._isBuffering;\n }\n\n @observable.ref\n private _hasError: boolean = false;\n get hasError(): boolean {\n return this._hasError || this._isOffline;\n }\n\n @observable.ref\n private _isOffline: boolean = false;\n\n\n @observable.ref\n private _isPlaying: boolean = false;\n get isPlaying(): boolean {\n return this._isPlaying;\n }\n\n @observable.ref\n private _isPaused: boolean = false;\n get isPaused(): boolean {\n return this._isPaused;\n }\n\n private _onEmptied = () => {\n runInAction(() => {\n this._previousResolution = null;\n this._isLoading = true;\n this._hasError = false;\n this._onBufferingStopped();\n this._isPlaying = false;\n this._isPaused = false;\n this.resetWatchTime();\n this._lastReportedDroppedFrames = 0;\n });\n }\n\n private _onPlaying = () => {\n runInAction(() => {\n this._hasError = false;\n this._isLoading = false;\n this._onBufferingStopped();\n this._isPlaying = true;\n this._isPaused = false;\n this._isOffline = false;\n this._watchTimeHandler.onPlayStarted();\n })\n }\n\n private _onBufferingStarted(): void {\n runInAction(() => {\n this._isBuffering = true;\n if(Check.isNullOrUndefined(this._bufferingStartTime)) {\n this._bufferingStartTime = Date.now();\n }\n })\n }\n\n private _onBufferingStopped(): void {\n if(this._isBuffering && !Check.isNullOrUndefined(this._bufferingStartTime)) {\n this.analyticsReporter.reportBufferingTime(TimeSpan.fromMilliseconds(Date.now() - this._bufferingStartTime));\n }\n\n runInAction(() => {\n this._isBuffering = false;\n this._bufferingStartTime = null;\n })\n }\n\n private _onStalled = () => {\n runInAction(() => {\n this._hasError = false;\n this._isLoading = false;\n this._onBufferingStarted();\n this._isPlaying = false;\n this._isPaused = false;\n this._watchTimeHandler.onPlayStopped();\n })\n }\n\n private _onWaiting = () => {\n runInAction(() => {\n this._hasError = false;\n //this._isLoading - on purpose not set.\n this._onBufferingStarted();\n this._isPlaying = false;\n this._isPaused = false;\n this._watchTimeHandler.onPlayStopped();\n })\n }\n\n private _onCanPlay = () => {\n runInAction(() => {\n this._hasError = false;\n this._isPaused = false;\n })\n }\n\n\n\n\n private _onError = (event: Event) => {\n\n const error = (event as any).target?.error;\n if(Check.isNullOrUndefined(error)) {\n // some time we get the error event when we pause the video while the video is loading.\n // In this case the error is null, and we will ignore this case.\n return;\n }\n\n let hasError: boolean = isVideoFatalError(error);\n\n runInAction(() => {\n\n this._hasError = hasError;\n this._isLoading = false;\n this._onBufferingStopped();\n this._isPlaying = false;\n this._isPaused = false;\n this._watchTimeHandler.onPlayStopped();\n });\n\n if(hasError) {\n this.analyticsReporter.reportPlayError(error);\n }\n }\n\n private _onPause = () => {\n runInAction(() => {\n this._hasError = false;\n this._isLoading = false;\n this._isBuffering = false;\n this._isPlaying = false;\n this._isPaused = true;\n this._watchTimeHandler.onPlayStopped();\n });\n }\n\n private _lastReportedDroppedFrames: number = 0;\n private _onTimeUpdate = () => {\n if(this._isPlaying) {\n this._watchTimeHandler.updateWatchTime();\n }\n\n const playbackQuality = this.videoElement.getVideoPlaybackQuality();\n\n if(playbackQuality.droppedVideoFrames > 0 && this._lastReportedDroppedFrames !== playbackQuality.droppedVideoFrames) {\n this._lastReportedDroppedFrames = playbackQuality.droppedVideoFrames;\n this.analyticsReporter.reportDroppedFrames(playbackQuality.droppedVideoFrames);\n }\n }\n\n private _onEnded = () => {\n this._watchTimeHandler.updateWatchTime();\n }\n\n private _previousResolution: IVideoResolution | null = null;\n private _onResize = () => {\n // on iOS, when the video is loaded for the first time we get a \"resize\" event with width=0 and height=0.\n // since there is no value in this event trigger, we choose to ignore it\n if (this.videoElement.videoWidth === 0 || this.videoElement.videoHeight === 0) {\n return;\n }\n\n const newResolution: IVideoResolution = {\n width: this.videoElement.videoWidth,\n height: this.videoElement.videoHeight\n };\n\n if(this._previousResolution && (this._previousResolution.width !== newResolution.width || this._previousResolution.height !== newResolution.height)) {\n this.analyticsReporter.reportVideoResolutionChanged(this._previousResolution, newResolution);\n }\n\n this._previousResolution = newResolution;\n }\n\n private _onGoingOffline = () => {\n runInAction(() => {\n this._isOffline = true;\n })\n }\n\n\n}","import {\n IVideoPlayerViewModel,\n IVideoPlayOptions,\n IVideoPreloadOptions,\n IVideoResolution\n} from \"./video-player.view-model.interface\";\nimport {VideoElementContainer} from \"./video-element-container\";\nimport {IVideoPlayerStrategy} from \"./video-player.strategy.interface\";\nimport {IServiceFactoryExtended} from \"../../service-factory-extended.interface\";\nimport React, {CSSProperties} from \"react\";\nimport {CGPEventSubscription} from \"../../sdk/cgp-sdk.interface\";\nimport {IReactionDisposer, makeObservable, observable, reaction, runInAction} from \"mobx\";\nimport {VideoEventsController} from \"./video-events-controller\";\nimport {NullableUndefinedString} from \"../../../../common/types/nullable-types\";\nimport {imagePreload} from \"../../../../common/utils/image-preload\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\nimport {VideoConsoleAnalyticsReporter} from \"./analytics/video-console-analytics-reporter\";\nimport {isVideoFatalError, IVideoAnalyticsReporter} from \"./analytics/video-analytics-reporter.interface\";\n\nexport abstract class VideoPlayerBaseModel implements IVideoPlayerViewModel {\n\n constructor(protected readonly services: IServiceFactoryExtended) {\n this._videoElement = this._createVideoElement();\n this._videoElementContainer = new VideoElementContainer(this._videoElement);\n this._analyticsReporter = VideoPlayerBaseModel.DefaultAnalyticsReporter;\n this._eventsController = new VideoEventsController(this._videoElement, () => this._analyticsReporter);\n\n this._sdkEventsSubscriptions.push(this.services.sdk.events.onAppPaused(this._onAppPaused));\n this._reactions.push(reaction(() => services.video.isSoundMuted, (isMuted) => {\n if (isMuted) {\n this.mute();\n } else {\n this.unmute();\n }\n }));\n\n this._reactions.push(reaction(\n () => this.watchTimeLimitReached,\n async (watchLimitReached) => {\n if (watchLimitReached) {\n await this.pause();\n this._analyticsReporter.reportWatchTimeLimitReached();\n }\n }));\n\n makeObservable(this);\n\n }\n\n private static DefaultAnalyticsReporter: IVideoAnalyticsReporter = new VideoConsoleAnalyticsReporter();\n\n private _videoElement: HTMLVideoElement;\n private _sdkEventsSubscriptions: CGPEventSubscription[] = [];\n private _reactions: IReactionDisposer[] = [];\n private _videoElementContainer: VideoElementContainer;\n private _src: string = \"\";\n private _analyticsReporter: IVideoAnalyticsReporter;\n\n @observable.ref\n private _watchTimeLimit: TimeSpan | undefined = undefined;\n\n\n\n protected abstract _createPlayerStrategy(): IVideoPlayerStrategy;\n\n\n protected get videoElement(): HTMLVideoElement {\n return this._videoElement;\n }\n\n private _eventsController: VideoEventsController;\n\n attachAnalyticsReporter(reporter: IVideoAnalyticsReporter): void {\n this._analyticsReporter = reporter;\n }\n\n protected _createVideoElement(): HTMLVideoElement {\n const videoElement = document.createElement('video');\n videoElement.playsInline = true;\n videoElement.muted = this.services.video.isSoundMuted;\n videoElement.autoplay = false;\n videoElement.loop = true;\n videoElement.preload = \"auto\";\n videoElement.style.width = '100%';\n videoElement.style.height = '100%';\n return videoElement;\n }\n\n private _playStrategy: IVideoPlayerStrategy | null = null;\n protected get playStrategy(): IVideoPlayerStrategy {\n\n if(!this._videoElementContainer.isAttached) {\n throw new Error('Cannot create play strategy before the player is attached to the DOM. Call the attach method first');\n }\n\n if(!this._playStrategy) {\n this._playStrategy = this._createPlayerStrategy();\n }\n\n return this._playStrategy;\n }\n\n get resolution(): IVideoResolution {\n return {\n width: this.videoElement.videoWidth,\n height: this.videoElement.videoHeight\n };\n }\n\n @observable.ref\n private _isPosterLoaded: boolean = false;\n get isPosterLoaded(): boolean {\n return this._isPosterLoaded;\n }\n\n private set isPosterLoaded(value: boolean) {\n runInAction(() => {\n this._isPosterLoaded = value;\n })\n\n }\n\n get isLoading(): boolean {\n return this._eventsController.isLoading;\n }\n\n get isBuffering(): boolean {\n return this._eventsController.isBuffering;\n }\n\n get hasError(): boolean {\n return this._eventsController.hasError;\n }\n\n get isPlaying(): boolean {\n return this._eventsController.isPlaying;\n }\n get isPaused(): boolean {\n return this._eventsController.isPaused;\n }\n \n get isMuted(): boolean {\n return this.videoElement.muted;\n }\n\n private _onAppPaused = () => {\n if(this._videoElementContainer.isAttached && this.playStrategy.isPlaying) {\n this.playStrategy.pause();\n this._analyticsReporter.reportPauseOnAppSleep();\n const appResumeSubscription = this.services.sdk.events.onAppResumed(async () => {\n appResumeSubscription.off();\n const subscriptionIndex = this._sdkEventsSubscriptions.findIndex(s => s === appResumeSubscription);\n if(subscriptionIndex >= 0) {\n this._sdkEventsSubscriptions.splice(subscriptionIndex, 1);\n }\n\n await this.resume();\n });\n\n this._sdkEventsSubscriptions.push(appResumeSubscription);\n }\n }\n\n\n attach(containerElement: HTMLElement, videoElementStyles?: CSSProperties): void {\n if(videoElementStyles) {\n this.applyVideoElementStyles(videoElementStyles);\n }\n this._videoElementContainer.attach(containerElement);\n }\n\n detach(): void {\n this._videoElementContainer.detach();\n }\n\n applyVideoElementStyles(styles: React.CSSProperties) {\n Object.keys(styles).forEach(styleProp => {\n this._videoElement.style[styleProp] = styles[styleProp];\n });\n }\n\n\n destroy(): void {\n this._videoElementContainer.destroy();\n this._eventsController.destroy();\n\n this._sdkEventsSubscriptions.forEach(sdkEvent => {\n sdkEvent.off();\n });\n this._sdkEventsSubscriptions = [];\n\n this._reactions.forEach(r => r());\n this._reactions = [];\n\n this._playStrategy?.destroy();\n this._playStrategy = null;\n\n this._videoElement.src = \"\";\n this._videoElement.load();\n this._videoElement = null;\n }\n\n setPoster(poster: NullableUndefinedString): void {\n if(poster) {\n if(poster !== this._videoElement.poster) {\n this._videoElement.poster = \"\";\n this.isPosterLoaded = false;\n imagePreload(poster)\n .then(() => {\n this._videoElement.poster = poster;\n this.isPosterLoaded = true;\n })\n .catch((err) => {\n this._analyticsReporter.reportPosterLoadFailure(err);\n });\n }\n } else {\n this._videoElement.poster = \"\";\n this.isPosterLoaded = false;\n }\n }\n\n private _resetWatchTime(src: string): void {\n if(this._src !== src) {\n this._eventsController.resetWatchTime();\n this._src = src;\n }\n }\n\n get watchTime(): TimeSpan {\n return this._eventsController.watchTime;\n }\n\n get videoDurationInSeconds(): number {\n return this.videoElement.duration\n }\n\n get watchTimeLimitReached(): boolean {\n if(this._watchTimeLimit) {\n return this.watchTime.totalMilliseconds >= this._watchTimeLimit.totalMilliseconds;\n } else {\n return false;\n }\n }\n\n async preload(src: string, options: IVideoPreloadOptions): Promise<void> {\n try {\n\n this._resetWatchTime(src);\n\n if(this.watchTimeLimitReached) {\n return;\n }\n\n if(!this._videoElement.muted) {\n this._videoElement.muted = true;\n }\n\n this.setPoster(options.poster);\n\n await this.playStrategy.preload(src);\n } catch (err){\n if(isVideoFatalError(err)) {\n this._analyticsReporter.reportPreloadError(err);\n throw err;\n }\n }\n\n }\n\n async play(src: string, options: IVideoPlayOptions): Promise<void> {\n try {\n\n this._resetWatchTime(src);\n\n runInAction(() => {\n this._watchTimeLimit = options.watchTimeLimit\n });\n\n if(this.watchTimeLimitReached) {\n return;\n }\n\n this.setPoster(options.poster);\n\n await this.playStrategy.play(src);\n\n if (this._videoElement.muted && !this.services.video.isSoundMuted) {\n this._videoElement.muted = false;\n }\n\n this._analyticsReporter.reportPlayStarted();\n\n } catch (err) {\n if(isVideoFatalError(err)) {\n this._analyticsReporter.reportPlayError(err);\n throw err;\n }\n }\n }\n\n\n async retryPlay(): Promise<void> {\n try {\n await this.playStrategy.retryPlay();\n\n if(this._videoElement.muted && !this.services.video.isSoundMuted) {\n this._videoElement.muted = false;\n }\n\n this._analyticsReporter.reportRetryPlaySuccess();\n } catch (err) {\n this._analyticsReporter.reportRetryPlayError(err);\n throw err;\n }\n\n }\n\n async pause(): Promise<void> {\n this.playStrategy.pause();\n }\n\n async resume(): Promise<void> {\n try {\n await this.playStrategy.resume();\n this._analyticsReporter.reportResumePlaySuccess();\n } catch (err) {\n this._analyticsReporter.reportResumePlayError(err);\n throw err;\n }\n }\n\n\n mute(): void {\n this.videoElement.muted = true;\n this._analyticsReporter.reportMute();\n }\n\n unmute() {\n this.videoElement.muted = false;\n this._analyticsReporter.reportUnmute();\n }\n}\n\n","import {IVideoAnalyticsReporter} from \"./video-analytics-reporter.interface\";\nimport {IVideoResolution} from \"../video-player.view-model.interface\";\nimport {TimeSpan} from \"@sparkware/app-utils\";\n\nexport class VideoConsoleAnalyticsReporter implements IVideoAnalyticsReporter {\n\n reportPlayStarted(): void {\n console.log(`video: Play started`);\n }\n\n reportRetryPlaySuccess() {\n console.log(`video: Retry play success`);\n }\n\n reportResumePlaySuccess() {\n console.log(`video: Resume play success`);\n }\n\n reportPauseOnAppSleep() {\n console.log(`video: Pause on app sleep`);\n }\n\n reportPreloadError(error: any) {\n console.error(`video: Preload error: Name = ${error.name} | Message = ${error.message}`, error);\n }\n\n reportPlayError(error: any): void {\n console.error(`video: Play error: Name = ${error.name} | Message = ${error.message}`, error);\n }\n\n reportRetryPlayError(error:any) {\n console.error(`video: retry play error`, error);\n }\n\n reportResumePlayError(error: any): void {\n console.error(`video: resume play error`, error);\n }\n\n reportDroppedFrames(droppedVideoFrames: number): void {\n if(droppedVideoFrames > 15) {\n console.log(`video: dropped frames: ${droppedVideoFrames}`);\n }\n }\n\n reportWatchTimeLimitReached(): void {\n console.log(`video: watch time limit reached`);\n }\n\n reportPosterLoadFailure(error: any): void {\n console.log('video: poster load failure:', error);\n }\n\n reportVideoResolutionChanged(previousResolution: IVideoResolution, currentResolution: IVideoResolution): void {\n console.log(`video: resolution changed: ${previousResolution.width} x ${previousResolution.height} => ${currentResolution.width} x ${currentResolution.height}`);\n }\n\n reportBufferingTime(bufferingTime: TimeSpan): void {\n if(bufferingTime.totalSeconds > 1) {\n console.log('video: buffering time:', bufferingTime.totalSeconds);\n }\n }\n\n reportMute() {\n console.log('video: muted');\n }\n\n reportUnmute() {\n console.log('video: unmuted');\n }\n}","import {\n IVideoPlayerStrategy\n} from \"../../video-player.strategy.interface\";\n\nexport class NativeVideoStreamingStrategy implements IVideoPlayerStrategy {\n\n constructor(private videoElement: HTMLVideoElement) {\n }\n\n get isPlaying(): boolean {\n return !this.videoElement.paused;\n }\n\n private _updateSrc(src: string): boolean {\n if(this.videoElement.src !== src) {\n this.videoElement.src = src;\n return true;\n } else {\n return false;\n }\n }\n\n async preload(src: string): Promise<void> {\n if(this._updateSrc(src)) {\n this.videoElement.load();\n }\n }\n\n async play(src: string): Promise<void> {\n this._updateSrc(src);\n await this.videoElement.play();\n }\n\n async retryPlay(): Promise<void> {\n const src = this.videoElement.src;\n this.videoElement.src = \"\";\n this.videoElement.load();\n await this.play(src);\n }\n\n pause(): void {\n if(this.isPlaying) {\n this.videoElement.pause();\n }\n }\n\n async resume(): Promise<void> {\n if(this.videoElement.src && !this.isPlaying) {\n await this.videoElement.play();\n }\n }\n\n destroy(): void {\n this.videoElement = null;\n }\n\n}","import {\n IVideoPlayerStrategy\n} from \"../../video-player.strategy.interface\";\nimport Hls, {ErrorData, Events} from \"hls.js\";\nimport {NullableString} from \"../../../../../../common/types/nullable-types\";\n\n\nexport class HlsVideoStreamingStrategy implements IVideoPlayerStrategy {\n\n\n constructor(private videoElement: HTMLVideoElement) {\n this._hlsInstance = new Hls({\n ...Hls.DefaultConfig,\n capLevelOnFPSDrop: true\n });\n\n this._hlsInstance.attachMedia(this.videoElement);\n\n }\n\n private _hlsInstance: Hls;\n private _src: NullableString = null;\n\n get isPlaying(): boolean {\n return !this.videoElement.paused;\n }\n\n private _loadVideoManifest(src: string): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n let eventsSubscriptions: Array<() => void> = [];\n\n const clearEvents = () => {\n eventsSubscriptions.forEach(unsubscribe => unsubscribe());\n eventsSubscriptions = [];\n }\n const parseManifestHandler = () => {\n clearEvents();\n resolve();\n }\n\n const onHslError = (event: Events.ERROR, data: ErrorData) => {\n clearEvents();\n reject(data)\n };\n\n this._hlsInstance.on(Hls.Events.MANIFEST_PARSED, parseManifestHandler);\n eventsSubscriptions.push(() => this._hlsInstance.off(Hls.Events.MANIFEST_PARSED, parseManifestHandler));\n\n this._hlsInstance.on(Hls.Events.ERROR, onHslError);\n eventsSubscriptions.push(() => this._hlsInstance.off(Hls.Events.ERROR, onHslError));\n\n this._hlsInstance.loadSource(src);\n })\n }\n\n async preload(src: string): Promise<void> {\n if(this._src !== src) {\n this._src = src;\n await this._loadVideoManifest(this._src);\n } else {\n this._hlsInstance.startLoad();\n }\n }\n\n async play(src: string): Promise<void> {\n await this.preload(src);\n await this.videoElement.play();\n }\n\n async retryPlay(): Promise<void> {\n const src = this._src;\n this._src = \"\";\n await this.play(src);\n }\n\n pause() {\n if(this.isPlaying) {\n this.videoElement.pause();\n }\n\n this._hlsInstance.stopLoad();\n }\n\n async resume(): Promise<void> {\n if(this._src && !this.isPlaying) {\n await this.play(this._src)\n }\n }\n\n destroy() {\n this._hlsInstance.detachMedia();\n this._hlsInstance.destroy();\n this._hlsInstance = null;\n this.videoElement = null;\n }\n\n}","import {VideoPlayerBaseModel} from \"../video-player-base.model\";\nimport {IVideoPlayerStrategy} from \"../video-player.strategy.interface\";\nimport {NativeVideoStreamingStrategy} from \"./strategies/native-video-streaming.strategy\";\nimport {HlsVideoStreamingStrategy} from \"./strategies/hls-video-streaming.strategy\";\n\n\n\nexport class VideoStreamingPlayerModel extends VideoPlayerBaseModel {\n protected _createPlayerStrategy(): IVideoPlayerStrategy {\n if(!this.services.device.os.isAndroid && this.services.video.isNativeStreamingSupported(this.videoElement)) {\n return new NativeVideoStreamingStrategy(this.videoElement);\n }\n\n return new HlsVideoStreamingStrategy(this.videoElement);\n }\n\n}","import {IVideoService} from \"./video.service.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {IVideoPlayerViewModel} from \"./models/video-player.view-model.interface\";\nimport {VideoStreamingPlayerModel} from \"./models/video-streaming/video-streaming-player.model\";\nimport Hls from \"hls.js\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\n\nconst VIDEO_STREAM_MIME_TYPE = 'application/vnd.apple.mpegurl';\n\nexport class VideoService extends ServiceBase implements IVideoService {\n constructor(services: IServiceFactoryExtended) {\n super(services);\n const videoElement = document.createElement('video');\n this.isStreamingSupported = this.isNativeStreamingSupported(videoElement) || Hls.isSupported();\n }\n\n\n get isSoundMuted(): boolean {\n return this.services.user.preferences.sound.isMuted;\n }\n\n toggleSound(): void {\n this.services.user.preferences.sound.toggle();\n }\n\n\n isNativeStreamingSupported(videoElement: HTMLVideoElement): boolean {\n const validCanPlayValue = ['probably', 'maybe'];\n const canPlayResultValue = videoElement.canPlayType(VIDEO_STREAM_MIME_TYPE);\n\n return validCanPlayValue.includes(canPlayResultValue);\n }\n\n readonly isStreamingSupported: boolean;\n\n\n createVideoStreamingPlayer(): IVideoPlayerViewModel {\n return new VideoStreamingPlayerModel(this.services);\n }\n\n\n}","import styled from 'styled-components';\n\nexport const IdleRecommendationToasterBox = styled.div`\n padding-left: 15px;\n`;","import styled from 'styled-components';\nimport { CssRule } from '../../../themes/architecture/css-helpers/css-rule';\n\nexport const IdleRecommendationHeaderBox = styled.div`\n padding-bottom: 10px;\n letter-spacing: 0.8px;\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n ${CssRule.For.iPhoneVer5.build()} {\n font-size: 1rem;\n }\n }\n`;","import styled from 'styled-components';\n\nexport const IdleRecommendationHeaderTitleWrapperBox = styled.div`\n ${({theme}) => theme.font.presets.body};\n text-align: center;\n`;\n","import styled from 'styled-components';\n\nexport const IdleRecommendationGameDetailsBox = styled.div`\n letter-spacing: 0.5px;\n`;\n","import styled from 'styled-components';\nimport {styledByTheme} from '../../../themes/architecture/styled-by-theme';\n\nconst IdleRecommendationToasterBackgroundDefaultBox = styled.div`\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 78%;\n z-index: -1;\n background-image: url(${({theme}) => '\"' + theme.assets.images.idle_recomm_toaster_bg_png + '\"'});\n &::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: radial-gradient(rgba(2,0,36,0) 30%, rgb(35, 35, 35) 75%);\n // background: radial-gradient(circle, rgba(0,0,0,0) 30%, rgb(35, 35, 35) 100%);\n }\n`;\n\nconst IdleRecommendationToasterBackgroundMrGreenBox = styled(IdleRecommendationToasterBackgroundDefaultBox)`\n background-image: none;\n &::before {\n background: radial-gradient(rgba(2,0,36,0) 30%, rgb(255, 255, 255) 75%);\n }\n`\n\nexport const IdleRecommendationToasterBackgroundBox = styledByTheme(IdleRecommendationToasterBackgroundDefaultBox)\n .forMrGreen(IdleRecommendationToasterBackgroundMrGreenBox)\n .apply();","import { OrbitComponent } from '../base-components/orbit-component/orbit-component';\nimport { GameItemComponent } from '../game-item/game-item.component';\nimport { IdleRecommendationsComponentProps } from '../../../common/interfaces/orbit-component-to-sdk-adapter/components-props/idle-recommendations.component-props';\nimport { IdleRecommendationToasterBox } from './boxes/idle-recommendation-toaster.box';\nimport { IdleRecommendationHeaderBox } from './boxes/idle-recommendation-header.box';\nimport { IdleRecommendationHeaderTitleWrapperBox } from './boxes/idle-recommendation-header-title-wrapper.box';\nimport { IdleRecommendationGameDetailsBox } from './boxes/idle-recommendation-game-details.box';\nimport { IdleRecommendationToasterBackgroundBox } from './boxes/idle-recommendation-toaster-background.box';\nimport { StandardToastTitleBox } from '../toaster/toasts-content/boxes/standard-toast-title/standard-toast-title.box';\nimport { StandardToastMessageBox } from '../toaster/toasts-content/boxes/standard-toast-message/standard-toast-message.box';\n\nexport class IdleRecommendationComponent extends OrbitComponent<IdleRecommendationsComponentProps> {\n render() {\n return <IdleRecommendationToasterBox>\n <IdleRecommendationHeaderBox>\n <IdleRecommendationHeaderTitleWrapperBox>\n <StandardToastTitleBox>{this.services.translation.translate('IDLE_RECOMMENDATIONS_TITLE')}</StandardToastTitleBox>\n <StandardToastMessageBox>{this.services.translation.translate('IDLE_RECOMMENDATIONS_SECOND_TITLE')}</StandardToastMessageBox>\n </IdleRecommendationHeaderTitleWrapperBox>\n </IdleRecommendationHeaderBox>\n <IdleRecommendationGameDetailsBox>\n <GameItemComponent\n gameType={this.props.gameType}\n onClickHandler={this.props.onPlayRecommendedGameHandler}\n />\n\n <IdleRecommendationToasterBackgroundBox className=\"toaster-background-image\" />\n </IdleRecommendationGameDetailsBox>\n </IdleRecommendationToasterBox>;\n }\n}\n","import { Check, TimeSpan } from \"@sparkware/app-utils\";\nimport { ServiceBase } from \"../ServiceBase\";\nimport { IIdleRecommendationsService, IIdleRecommendationsServiceParams, IIdleRecomToastDef } from \"./idle-recommendations.service.interface\";\nimport { IServiceFactoryExtended } from \"../service-factory-extended.interface\";\nimport { GameInfo } from \"../games/game-info\";\nimport { IdleRecommendationComponent } from \"../../components/idle-recommendation/idle-recommendation.component\";\nimport { makeObservable, observable } from \"mobx\";\nimport { CyClass } from \"../../../common/cy-classes\";\n\n\nconst ACTIVITY_DETECTION_INTERVAL: TimeSpan = TimeSpan.fromSeconds(1);\nconst IDLE_RECOMMENDATIONS_LOCAL_STORAGE_KEY: string = 'idleRecommendationsData';\n\nexport class IdleRecommendationsService extends ServiceBase implements IIdleRecommendationsService {\n static CLASS = 'IdleRecommendationsService';\n\n private _idleDetectionInterval: TimeSpan;\n private _numberOfAppearancesInSession: number;\n private _maxAppearancesAllowedPerSession: number;\n private _idleDetectionSubscription: ReturnType<typeof setInterval>;\n private _userActivityDetector: any;\n private _isIdleRecToasterDisplayed: boolean;\n private _displayInterval: TimeSpan;\n private _recommendedGameType: string | null = null;\n private _toasterDisposer: (() => void) | null = null;\n\n @observable.ref\n private _isThereRunningApps = true;\n\n constructor(services: IServiceFactoryExtended, params?: IIdleRecommendationsServiceParams) {\n super(services);\n\n makeObservable(this);\n\n this.toggleFeatureOn(params);\n\n this.services.appLauncher.then(appLauncher => {\n this.reaction(() => appLauncher.isThereRunningApps, (isThereRunningApps) => {\n this._isThereRunningApps = isThereRunningApps;\n }, { fireImmediately: true })\n });\n\n this.reaction(() => this.services.user.isAuthorized,\n () => {\n if (!this.services.user.isAuthorized) {\n this._resetAppearancesInSession();\n }\n this._startIdleDetection();\n }, {\n fireImmediately: true\n });\n }\n\n\n public showToast(toastConfig: IIdleRecomToastDef) {\n return this.services.toaster.showCustomToast({\n id: toastConfig.id || \"idle_recommendation_toast\",\n toastOptions: {\n ...toastConfig.toastOptions,\n className: CyClass('cy-idle-recommendation-toast')\n },\n renderContent: (handler) => {\n return <IdleRecommendationComponent key={'IdleRecommendation'} {...toastConfig.contentProps} />\n },\n onToastShown: toastConfig.onToastShown,\n onToastClosed: toastConfig.onToastClosed,\n displayCondition: () => !this._isThereRunningApps,\n });\n }\n\n toggleFeatureOn(params) {\n this._idleDetectionInterval = params?.idleDetectionInterval ? TimeSpan.parse(params.idleDetectionInterval) : TimeSpan.parse(this.services.configuration.servicesConfigs.IdleRecommendations.idleDetectionInterval);\n this._maxAppearancesAllowedPerSession = params?.maxAppearancesPerSession ? params.maxAppearancesPerSession : this.services.configuration.servicesConfigs.IdleRecommendations.maxAppearancesPerSession;\n this._numberOfAppearancesInSession = this._getNoOfAppearancesInSessionFromLocalStorage();\n this._displayInterval = params?.displayInterval ? TimeSpan.parse(params.displayInterval) : TimeSpan.parse(this.services.configuration.servicesConfigs.IdleRecommendations.displayInterval);\n this._subscribe();\n this._stopIdleDetection(); // Just to be on the safe side\n this._startIdleDetection();\n }\n\n private _subscribe() {\n this.services.appLauncher.then(appLauncher => {\n if (appLauncher.isThereRunningApps) {\n this._startIdleDetection();\n }\n });\n\n this.services.sdk.events.onGameClose(this._resetIdleDetectionTimer.bind(this));\n this.services.sdk.events.onGameOpen(this._closeToasterWhenOpeningAnotherGame.bind(this));\n }\n\n private _startIdleDetection() {\n if (this.services.user.isAuthorized) {\n this._startUserIdleDetection();\n this._startUserActivityDetection();\n } else {\n this._stopIdleDetection();\n }\n }\n\n private _disposeIdleDetectionTimer() {\n if (this._idleDetectionSubscription) {\n clearInterval(this._idleDetectionSubscription)\n }\n }\n\n private _resetIdleDetectionTimer() {\n this._disposeIdleDetectionTimer();\n this._startUserIdleDetection();\n }\n\n private _startUserIdleDetection() {\n this._idleDetectionSubscription = setInterval(() => {\n this._showIdleRecommendationToaster();\n }, this._idleDetectionInterval.totalMilliseconds);\n }\n\n private _stopIdleDetection() {\n this._disposeIdleDetectionTimer();\n if (this._userActivityDetector) this._userActivityDetector.dispose();\n this._isIdleRecToasterDisplayed = false;\n }\n\n private _closeToasterWhenOpeningAnotherGame() {\n if (this._isIdleRecToasterDisplayed && this._toasterDisposer) {\n this._onCloseAnalytics = this._openedAnotherGameWhileIdleIsActiveAnalytics;\n this._toasterDisposer();\n this._toasterDisposer = null;\n }\n }\n\n private _startUserActivityDetection() {\n this._userActivityDetector = this.services.sdk.createUserActivityDetactor({\n userActivityDetectionInterval: ACTIVITY_DETECTION_INTERVAL,\n onUserActivityCallback: this._resetIdleDetectionTimer.bind(this),\n })\n }\n\n // We have two different types of close analytics: one for clicking the idle rec's X btn and one for launching a game (NOT the one in idle) while the idle is active.\n private _defaultOnCloseAnalytics = () => {\n this._sendAnalytics({ action: 'click_close_button', label: this._recommendedGameType });\n };\n\n private _openedAnotherGameWhileIdleIsActiveAnalytics = () => {\n this._sendAnalytics({ action: 'launched_other_game', label: this._recommendedGameType });\n };\n\n private _openedRecommendedGameAnalytics = () => {\n this._sendAnalytics({ action: 'click_play', label: this._recommendedGameType });\n };\n\n private _onCloseAnalytics = this._defaultOnCloseAnalytics;\n\n private _onOpened() {\n this._isIdleRecToasterDisplayed = true;\n }\n\n private _onClosed() {\n this._isIdleRecToasterDisplayed = false;\n this._resetIdleDetectionTimer();\n this._onCloseAnalytics();\n }\n\n private async _showIdleRecommendationToaster() {\n if (!this.services.configuration.servicesConfigs.IdleRecommendations.featureToggle) {\n return;\n }\n\n if (\n this._isIdleRecToasterDisplayed ||\n Boolean((await this.services.gameRunner)?.currentRunningGame) ||\n this.services.overlay.isOpen ||\n this.services.dialog.hasOpenDialogs\n ) {\n return;\n }\n\n if (this.services.arenas.getCurrentArena()?.arenaName === 'videoSlidesArena') {\n return;\n }\n\n if (this._numberOfAppearancesInSession >= this._maxAppearancesAllowedPerSession) {\n this.services.logger.debug(`IdleRecommendations toaster not displayed - max appearances per session - ${this._maxAppearancesAllowedPerSession} reached`);\n return;\n }\n\n this._getRecentlyPlayedGame()\n .then(recentlyPlayedGame => this._getRecommendedGameBasedOnCorrelation(recentlyPlayedGame))\n .then(recomGameType => {\n this._recommendedGameType = recomGameType;\n return this._getRecommendedGameInfo(recomGameType);\n })\n .then(recomGameTypeInfo => this._showToaster(recomGameTypeInfo));\n }\n\n private async _showToaster(gameInfo: GameInfo): Promise<void> {\n this._onCloseAnalytics = this._defaultOnCloseAnalytics;\n\n const toasterHandler = this.showToast({\n toastOptions: {\n timeout: TimeSpan.fromSeconds(this._displayInterval.totalSeconds),\n hideProgressBar: true,\n },\n contentProps: {\n gameType: gameInfo.gameType,\n onPlayRecommendedGameHandler: () => {\n if (this._isIdleRecToasterDisplayed && this._toasterDisposer) {\n this._onCloseAnalytics = this._openedRecommendedGameAnalytics;\n this._toasterDisposer();\n this._toasterDisposer = null;\n }\n gameInfo.open({ isRealMode: true });\n }\n },\n onToastShown: () => {\n this._onOpened();\n this._increaseAppearancesInSession();\n this._sendAnalytics({ action: 'view', label: this._recommendedGameType, value: 1 + this._numberOfAppearancesInSession });\n },\n onToastClosed: () => {\n this._onClosed();\n }\n });\n this._toasterDisposer = toasterHandler?.close;\n }\n\n private async _getRecentlyPlayedGame(): Promise<number> {\n const recentlyGamesPlayed = this.services.games.recentlyPlayedGames.gameTypes\n if (recentlyGamesPlayed.length === 0) {\n const aiGameTypesArray = this.services.aiNewEngine.aiNewRecommendedGames?.gameTypes\n\n if (Check.isArray(aiGameTypesArray) && aiGameTypesArray.length > 0) {\n return aiGameTypesArray[Math.floor(Math.random() * aiGameTypesArray.length)];\n } else {\n this.services.logger.debug(`IdleRecommendations toaster - not displayed because we didnt get any ai list game`);\n return Promise.reject(false);\n }\n } else {\n return recentlyGamesPlayed[0];\n }\n }\n\n private async _getRecommendedGameBasedOnCorrelation(recentlyGamePlayed: number): Promise<any> {\n const correlatedGames = await this.services.games.getCorrelatedGames(recentlyGamePlayed, 6);\n if (Check.isArray(correlatedGames) && correlatedGames.length === 0) {\n this.services.logger.debug(`IdleRecommendations toaster - not displayed because we didnt get correlated games for gameType ${recentlyGamePlayed}`);\n return Promise.reject('IdleRecommendations toaster - not displayed because we didnt get correlated games');\n }\n return correlatedGames[Math.floor(Math.random() * correlatedGames.length)];\n }\n\n private async _getRecommendedGameInfo(gameType: number): Promise<GameInfo> {\n const gameDataInfo = await this.services.games.getGameInfo(gameType);\n if (!gameDataInfo) {\n this.services.logger.debug(`IdleRecommendations toaster - not displayed because we didnt get game infos for gameType: ' ${gameType}`);\n return Promise.reject(false);\n }\n return gameDataInfo;\n }\n\n private _setIdleRecommendationDataInLocalStorage(): void {\n this.services.localStorage.setItem(IDLE_RECOMMENDATIONS_LOCAL_STORAGE_KEY, JSON.stringify({ noOfAppearancesInSession: this._numberOfAppearancesInSession || 0 }))\n }\n\n private _getNoOfAppearancesInSessionFromLocalStorage(): number {\n let { noOfAppearancesInSession } = this.services.localStorage.getJson(IDLE_RECOMMENDATIONS_LOCAL_STORAGE_KEY) || 0\n if (!Check.isNumber(noOfAppearancesInSession)) {\n noOfAppearancesInSession = 0\n }\n\n return noOfAppearancesInSession\n }\n\n private _resetAppearancesInSession(): void {\n this._numberOfAppearancesInSession = 0;\n this._setIdleRecommendationDataInLocalStorage();\n }\n\n private _increaseAppearancesInSession(): void {\n this._numberOfAppearancesInSession++;\n this._setIdleRecommendationDataInLocalStorage();\n }\n\n private _sendAnalytics(analyticsData): void {\n this.services.analytics.sendOrbitAIFeatureEvent(\n 'idleRecommendations', // Category\n analyticsData?.action,\n analyticsData?.label,\n analyticsData?.value\n );\n }\n}","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n\nexport const AccordionContentBox = styledBox('AccordionContentBox');","import {observer} from \"mobx-react\";\nimport {AccordionContentBox} from \"./boxes/accordion-content.box\";\n\ninterface AccordionContentProps {\n content: React.ReactElement;\n isOpen: boolean;\n}\nexport const AccordionContentComponent: React.FC<AccordionContentProps> = observer((props) => {\n return (\n <AccordionContentBox isOpen={props.isOpen}>\n {props.content}\n </AccordionContentBox>\n )\n})","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n\nexport const AccordionHeaderBox = styledBox('AccordionHeaderBox');","import {observer} from \"mobx-react\";\nimport {CollapseIndicatorBox} from \"../../../../basic-components/collapse-indicator/collapse-indicator.box\";\nimport {AccordionHeaderBox} from \"./boxes/accordion-header.box\";\n\ninterface AccordionHeaderProps {\n title?: React.ReactElement;\n isOpen: boolean;\n isTitleCentered: boolean;\n toggleIsOpen: () => void;\n}\nexport const AccordionHeaderComponent: React.FC<AccordionHeaderProps> = observer((props) => {\n return (\n <AccordionHeaderBox isTitleCentered={props.isTitleCentered} onClick={props.toggleIsOpen}>\n {props.title}\n <CollapseIndicatorBox isOpen={props.isOpen} />\n </AccordionHeaderBox>\n )\n})","import {observer} from \"mobx-react\";\nimport {useState} from \"react\";\nimport {AccordionContentComponent} from \"./components/content/accordion-content.component\";\nimport {AccordionHeaderComponent} from \"./components/header/accordion-header.component\";\n\ninterface AccordionProps {\n title?: React.ReactElement;\n isTitleCentered: boolean;\n content: React.ReactElement;\n}\nexport const AccordionComponent: React.FC<AccordionProps> = observer((props) => {\n const [isOpen, setIsOpen] = useState(false)\n\n const toggleIsOpen = () => {\n setIsOpen(!isOpen)\n }\n\n return (\n <div>\n <AccordionHeaderComponent\n title={props.title}\n isOpen={isOpen}\n isTitleCentered={props.isTitleCentered} \n toggleIsOpen={toggleIsOpen}\n />\n <AccordionContentComponent content={props.content} isOpen={isOpen}/>\n </div>\n )\n})","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const OptInJackpotBetDialogBox = styledBox('OptInJackpotBetDialogBox');","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const OptInAccordionComponentBox = styledBox('OptInAccordionComponentBox');","import {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../../react-hooks/use-services.hook\";\nimport {OptInAccordionComponentBox} from \"./boxes/opt-in-accordion-content.box\";\n\nexport const OptInAccordionContentComponent: React.FC = observer((props) => {\n const services = useServices();\n return (\n <OptInAccordionComponentBox>\n {services.translation.translate('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nisl dui, fringilla euismod nibh id, lobortis sollicitudin mi. Aliquam bibendum erat eget risus sollicitudin posuere. Duis pulvinar vel lorem non porttitor. Sed dapibus ultrices porttitor. Ut fringilla ut dolor sed tempor. Nunc laoreet imperdiet turpis, in volutpat sapien venenatis et. Aliquam ac placerat libero, tincidunt volutpat odio. Cras et est eros. Vestibulum dictum auctor metus, ut auctor magna fringilla id. Nunc ornare congue risus eu lobortis. Sed vitae urna et leo egestas faucibus in vitae nulla. Curabitur libero lacus, malesuada sit amet luctus id, ullamcorper vel massa. Morbi ac aliquet tortor, egestas convallis lorem. Aenean et nisl mi.Morbi auctor lorem eget aliquam ultricies. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum volutpat metus nisi, eu rhoncus lacus ultricies in. Nulla mollis tincidunt velit, a rutrum justo bibendum quis. Donec vel molestie diam. In mattis lacus et tellus blandit, in laoreet tortor faucibus. Nullam lectus ante, luctus at lorem in, aliquam malesuada nibh. Maecenas mollis placerat ex, eu sagittis metus tincidunt quis. Ut eu placerat ipsum, vitae iaculis lacus. Sed varius condimentum mi condimentum vestibulum. Mauris lobortis tortor lectus, at semper leo luctus sit amet.Quisque eget diam nisl. Donec hendrerit arcu vel est pulvinar commodo. Duis at purus tincidunt, porta metus vel, porta metus. Nunc sed mauris vitae erat ullamcorper auctor. Suspendisse aliquet vehicula sagittis. Pellentesque elementum mollis lectus in aliquam. Etiam blandit auctor rhoncus. Duis vestibulum condimentum eleifend. Vestibulum luctus dapibus pretium. Aliquam tempor tempor magna, ut commodo massa viverra non. Donec aliquam dui quis felis ornare, id pretium quam egestas. Vivamus cursus vulputate vehicula.Vivamus consequat nibh et tortor ultrices dignissim. Praesent rhoncus quam libero, ut finibus eros aliquam in. Etiam eget urna vel mi porta congue. Nam felis arcu, eleifend at sapien eget, tristique hendrerit nisl. In neque odio, porttitor et turpis ac, condimentum facilisis ligula. Mauris consequat scelerisque nunc non dignissim. Aliquam erat volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nunc placerat leo nec cursus malesuada. Sed ut laoreet libero. Suspendisse id tellus id enim elementum laoreet.Donec sit amet erat efficitur, accumsan nisl sed, malesuada elit. Curabitur tincidunt dignissim nunc ac imperdiet. Nulla sem velit, vehicula id condimentum ut, molestie et lectus. Praesent euismod pharetra vulputate. In sed magna imperdiet, commodo nisl quis, volutpat velit. Duis ullamcorper, ipsum consequat maximus efficitur, risus velit accumsan nunc, pellentesque facilisis mi turpis nec risus. In hendrerit nisl sed arcu finibus dictum. Ut at dolor id elit auctor dapibus vitae in dolor. Mauris quis vulputate lorem. Donec placerat velit sed finibus fringilla. Fusce malesuada dapibus nibh, et rhoncus nibh tempus sed. Aliquam at nisl pellentesque, tempor nisl non, semper eros.')}\n </OptInAccordionComponentBox>\n )\n})","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const OptInDialogHeaderBox = styledBox('OptInDialogHeaderBox');","import {observer} from \"mobx-react\";\nimport {CyClass} from \"../../../../../../common/cy-classes\";\nimport {useServices} from \"../../../../../react-hooks/use-services.hook\";\nimport {IModalDialogHandler} from \"../../../../../services/dialog/dialog.service.interface\";\nimport {DialogCloseButtonBox} from \"../../../../modal-dialog/boxes/close-button/dialog-close-button.box\";\nimport {OptInDialogHeaderBox} from \"./boxes/opt-in-dialog-header.box\";\n\ninterface OptInDialogHeaderProps {\n dialogHandler: IModalDialogHandler;\n}\nexport const OptInDialogHeaderComponent: React.FC<OptInDialogHeaderProps> = observer((props) => {\n const services = useServices();\n let JackpotIconIcon = services.theme.currentTheme.icons.blackjackIcon;\n return (\n <OptInDialogHeaderBox>\n <div style={{display: \"flex\", justifyContent: \"end\"}}>\n <DialogCloseButtonBox className={CyClass('cy-modal-dialog-x-close-button')} onClick={() => props.dialogHandler.close()} />\n </div>\n <div style={{display: \"flex\", flexDirection: \"column\", alignItems: \"center\"}}>\n <JackpotIconIcon size={6.2} style={{marginRight: \"10px\", color: services.theme.currentTheme.colors.brandPrimary}} />\n {services.translation.translate('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nisl dui, fringilla euismod nibh id, lobortis sollicitudin mi.')}\n </div>\n </OptInDialogHeaderBox>\n )\n})","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const OptInAccordionTitleBox = styledBox('OptInAccordionTitleBox');","import {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {OptInAccordionTitleBox} from \"./boxes/opt-in-accordion-title.box\";\n\nexport const OptInAccordionTitleComponent: React.FC = observer((props) => {\n const services = useServices();\n return (\n <OptInAccordionTitleBox>\n {services.translation.translate('Jacpot Rules')}\n </OptInAccordionTitleBox>\n )\n})","import {observer} from \"mobx-react\";\nimport {Button} from \"../../../basic-ui-components/button/base/button.component\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {IModalDialogHandler} from \"../../../services/dialog/dialog.service.interface\";\nimport {AccordionComponent} from \"../../accordion/accordion.component\";\nimport {OptInJackpotBetDialogBox} from \"../boxes/opt-in-jackpot-bet-dialog/opt-in-jackpot-bet-dialog.box\";\nimport {OptInAccordionContentComponent} from \"./components/opt-in-accordion-content/opt-in-accordion-content.component\";\nimport {OptInDialogHeaderComponent} from \"./components/opt-in-dialog-header/opt-in-dialog-header.component\";\nimport {OptInAccordionTitleComponent} from \"./opt-in-accordion-title/opt-in-accordion-title.component\";\n\nexport interface IOptInJackpotBetDialogOptions {\n dialogHandler: IModalDialogHandler;\n}\nexport const OptInJackpotBetDialogComponent: React.FC<IOptInJackpotBetDialogOptions> = observer((props) => {\n const services = useServices();\n const close = () => {\n services.jackpotBet.toggleJackpotBet();\n props.dialogHandler.close();\n }\n return (\n <OptInJackpotBetDialogBox>\n <OptInDialogHeaderComponent dialogHandler={props.dialogHandler} />\n <div style={{padding: \"2rem\"}}>\n <AccordionComponent\n title={<OptInAccordionTitleComponent />}\n content={<OptInAccordionContentComponent />}\n isTitleCentered={true}\n />\n <Button\n preset=\"primary\"\n margin=\"0px 0px 2rem 0px\"\n fullWidth\n className={'cy-opt-in-jackpot-bet-button'}\n >\n {services.translation.translate('JOIN_JACKPOT_BET')}\n </Button>\n <Button\n preset=\"secondary\"\n margin=\"0px 0px 2rem 0px\"\n fullWidth\n className={'cy-opt-out-jackpot-bet-button'}\n onClick={close}\n >\n {services.translation.translate('PLAY_WITHOUT_JACKPOT_BET')}\n </Button>\n\n </div>\n </OptInJackpotBetDialogBox>\n )\n})","import {action, makeObservable, observable} from \"mobx\";\nimport {OptInJackpotBetDialogComponent} from \"../../components/jackpot-bet/opt-in/opt-in-jackpot-bet-dialog.component\";\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\nimport {ServiceBase} from \"../ServiceBase\";\nimport {DialogResult} from \"../specific-dialogs/specific-dialogs.service.interface\";\nimport {LocalStorageKeys} from \"../storage/local-storage-keys\";\nimport {IJackpotBetService} from \"./jackpot-bet.service.interface\";\n\nexport class JackpotBetService extends ServiceBase implements IJackpotBetService {\n constructor(serviceFactory: IServiceFactoryExtended) {\n super(serviceFactory);\n makeObservable(this);\n\n this._isJackpotBetOn = this.services.localStorage.getJson(LocalStorageKeys.isJackpotBetOn);\n }\n\n @observable.ref\n private _isJackpotBetOn: boolean;\n get isJackpotBetOn(): boolean {\n return this._isJackpotBetOn;\n }\n\n @action.bound\n toggleJackpotBet(): void {\n this._isJackpotBetOn = !this._isJackpotBetOn;\n this.services.localStorage.setItem(LocalStorageKeys.isJackpotBetOn, true);\n }\n\n showOptInJackpotBetDialog(): Promise<DialogResult> {\n if(!this._isJackpotBetEnabled)\n {\n return Promise.resolve(DialogResult.Accepted)\n }\n\n return new Promise<DialogResult>(resolve => {\n this.services.dialog.showModal(dialogHandler => <OptInJackpotBetDialogComponent\n dialogHandler={dialogHandler}\n />, {\n title: this.services.translation.translate('JACKPOT_BET'),\n hideDialogHeader: true,\n forceTransparentBackground: true,\n disableFullscreenMobile: true,\n forceCentralization: true,\n shouldBeClosedOnlyByUser: true,\n mobileCenterHeader: true,\n noDefaultContentPadding: true,\n });\n })\n }\n\n private _isJackpotBetEnabled(): boolean {\n return this.services.abTestingFeatureDataProvider.jackpotBet.isEnabled;\n }\n}","import { IQAEnvironmentPopUpBlockerService } from './qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.service.interface';\nimport { QAEnvironmentPopUpBlockerService } from './qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.service';\nimport { LiveStreamPlayingService } from './video-live-stream/live-stream-playing.service';\nimport { IVideoPlayingService } from './video-live-stream/video-playing.service.interface';\nimport {ITranslationService} from './translation/translation.service.interface';\nimport {TranslationService} from './translation/translation.service';\nimport {IGamesService} from './games/games.service.interface';\nimport {ILoggerService} from './logger/logger.service.interface';\nimport {ICurrencyService} from './currency/currency.service.interface';\nimport {CurrencyService} from './currency/currency.service';\nimport {IAnalyticsService} from './analytics/analytics.service.interface';\nimport {AnalyticsService} from './analytics/analytics.service';\nimport {ILobbyGameInfoPreviewService} from './lobby-game-info-preview/lobby-game-info-preview.service.interface';\nimport {GamesService} from './games/games.service';\nimport {IConfigurationService} from './configurations/configuration.service.interface';\nimport {ConfigurationsService} from './configurations/configurations.service';\nimport {Lazy} from '../../utils/lazy';\nimport {IUserService} from './user/user.service.interface';\nimport {UserService} from './user/user.service';\nimport {ISegmentationAggregatorService} from './segmentation-aggregator/segmentation-aggregator.service.interface';\nimport {SegmentationAggregatorService} from './segmentation-aggregator/segmentation-aggregator.service';\nimport {ILauncherService} from './launcher/launcher.service.interface';\nimport {IClientDeviceService} from './client-device/client-device.service.interface';\nimport {IDeviceService} from './device/device.service.interface';\nimport {DeviceService} from './device/device.service';\nimport {IWindowService} from './window/window.service.interface';\nimport {IAiEngineService} from './ai-engine/ai-engine.service.interface';\nimport {AiEngineService} from './ai-engine/ai-engine.service';\nimport {IHttpService} from './http/http.service.interface';\nimport {IDeepLinkService} from './deep-link/deep-link.service.interface';\nimport {ISdkService} from './sdk/sdk.service.interface';\nimport {SdkService} from './sdk/sdk.service';\nimport {IServiceFactoryExtended} from './service-factory-extended.interface';\nimport {IGamesFilterService} from './games-filter/games-filter.service.interface';\nimport {GamesFilterService} from './games-filter/games-filter.service';\nimport {IUserMenuService} from \"./user-menu/user-menu.service.interface\";\nimport {IArenasService} from './arenas/arenas.service.interface';\nimport {ArenasService} from './arenas/arenas.service';\nimport {IDomService} from './dom/dom.service.interface';\nimport {ISiteMapService} from './sitemap/sitemap.service.interface';\nimport {IMarketingService} from './marketing/marketing.service.interface';\nimport {ILanguageData, ILanguageService} from './language/language.service.interface';\nimport {LanguageService} from './language/language.service';\nimport {ISideMenuService} from './side-menu/side-menu.service.interface';\nimport {IGameSearchService} from './game-search/game-search.service.interface';\nimport {IExternalLinksService} from './external-links/external-links.service.interface';\nimport {ICmsApiService} from './cms/cms-api/cms-api.service.interface';\nimport {ICmsBannersService} from './cms/cms-banners/cms-banners.service.interface';\nimport {IStorageService} from './storage/storage.service.interface';\nimport {ICmsPagesService} from './cms/cms-pages/cms-pages.service.interface';\nimport {ICmsSegmentationService} from './cms/cms-segmentation/cms-segmentation.service.interface';\nimport {IDeepLinkActionsFactoryService} from './deep-link/deep-link-action-factory/deep-link-actions-factory.service.inteface';\nimport {IDeepLinkParserService} from './deep-link/legacy/deep-link-parsers/deep-link-parser.service.interface';\nimport {IStickyHandlerFactoryService} from \"./sticky-handler-factory/sticky-handler-factory.service.interface\";\nimport {StickyHandlerFactoryService} from \"./sticky-handler-factory/sticky-handler-factory.service\";\nimport {IGamePreviewFeaturesSelectorService} from './game-preview-features-selector/game-preview-features-selector.service.interface';\nimport {GameRouteHandlerService} from './game-route-handler/game-route-handler.service';\nimport {LauncherService} from './launcher/launcher.service';\nimport {SpinnerService} from './spinner/spinner.service';\nimport {CrossBrandsService} from './cross-brands/cross-brands.service';\nimport {ILocationService} from './location/location.service.interface';\nimport {LocationService} from './location/location.service';\nimport {IRoutingConfigurationService} from './routing-configuration/routing-configuration.service.interface';\nimport {RoutingConfigurationService} from './routing-configuration/routing-configuration.service';\nimport {IRoutingService} from './routing/routing.service.interface';\nimport {RoutingService} from './routing/routing.service';\nimport {IOverlayService} from './overlay/overlay.service.interface';\nimport {OverlayService} from './overlay/overlay.service';\nimport {ApplicationStartupConfigurations} from '../app-bootstrap/config-interfaces/application-startup.configurations';\nimport {SplashService} from './splash/splash.service';\nimport {ISplashService} from './splash/splash-service.interface';\nimport {ITimeService} from './time/time.service.interface';\nimport {TimeService} from './time/time.service';\nimport {IAiNewGamesEngineService} from \"./ai-new-games-engine/ai-new-games.service.interface\";\nimport {AiNewGamesEngineService} from \"./ai-new-games-engine/ai-new-games.service\";\nimport {IThemeService} from './theme/theme.service.interface';\nimport {ThemeService} from './theme/theme.service';\nimport {MiniOrbitService} from './mini-orbit/mini-orbit.service';\nimport {IMiniOrbitService} from \"./mini-orbit/mini-orbit.service.interface\";\nimport {DialogButtonClickHandleResultEnum, IDialogService} from './dialog/dialog.service.interface';\nimport {DialogService} from './dialog/dialog.service';\nimport {IHeaderService} from './header/header.service.interface';\nimport { IProgressiveWebAppService } from './progressive-web-app/progressive-web-app.service.interface';\nimport { IPWAManifestService } from './manifest/pwa-manifest.service.interface';\nimport { PWAManifestService } from './manifest/pwa-manifest.service';\nimport {IMiniOrbitCommunicationAdapterFactoryService} from './mini-orbit/adapter-factory/mini-orbit-communication-adapter-factory.service.interface';\nimport {MiniOrbitCommunicationAdapterFactoryService} from './mini-orbit/adapter-factory/mini-orbit-communication-adapter-factory.service';\n\nimport { ILiveTableFeedsService } from './live-table-feeds-service/live-table-feeds.service.interface';\nimport { LiveTableFeedsService } from './live-table-feeds-service/live-table-feeds.service';\nimport {IDrawerService} from './drawer/drawer.service.interface';\nimport { IDailyDealService } from './daily-deal/daily-deal.service.interface';\nimport { IJackpotsService } from './jackpots/jackpots.service.interface';\nimport { IAbTestingFeatureDataProviderService } from './ab-testing/ab-testing-feature-data-provider.service.interface';\nimport { AbTestingFeatureDataProviderService } from './ab-testing/ab-testing-feature-data-provider.service';\nimport {IControlCenterService} from \"./control-center/control-center.service.interface\";\nimport {ControlCenterService} from \"./control-center/control-center.service\";\nimport { IWalletProxyService } from './wallet-proxy/wallet-proxy.service.interface';\nimport { WalletProxyService } from './wallet-proxy/wallet-proxy.service';\nimport { SdkHooksProvider } from '../app-bootstrap/sdk-initializer/sdk-hooks-provider';\nimport {IGamePopupService} from \"./game-popup/game-popup.service.interface\";\nimport {IHomepageService} from \"./homepage/homepage.service.interface\";\nimport {HomepageService} from \"./homepage/homepage.service\";\nimport {IAnalyticsDataLayerService} from \"./analytics/analytics-data-layer.service.interface\";\nimport {SessionCooldownService} from \"./session-cooldown/session-cooldown.service\";\nimport {ISessionCooldownService} from \"./session-cooldown/session-cooldown.service.interface\";\nimport { IMediaQueryService } from './media-query/media-queries.interface';\nimport { MediaQueryService } from './media-query/media-query.service';\n\nimport {IToolsService} from \"./tools/tools.service.interface\";\nimport {ToolsService} from \"./tools/tools.service\";\nimport {IVerticalGamesListService} from \"./vertical-games-list/vertical-games-list.service.interface\";\nimport {IUserGameOrientationService} from \"./user-game-orientation/user-game-orientation.service.interface\";\nimport {UserGameOrientationService} from \"./user-game-orientation/user-game-orientation.service\";\nimport {ApiService} from './api/api.service';\n\nimport {OrbitComponentToSdkAdapterService} from './orbit-component-to-sdk-adapter/orbit-component-to-sdk-adapter.service';\nimport {IOrbitComponentsInsideSdkProvider} from './orbit-component-to-sdk-adapter/orbit-components-inside-sdk-provider.interface';\nimport { IOmgService } from './omg-proxy/omg.service.interface';\nimport {IMessageBrokerService} from './casinofied/message-broker/message-broker.service.interface';\nimport {MessageBrokerService} from './casinofied/message-broker/message-broker.service';\nimport {ICasinofiedAppLauncherService} from './casinofied/app-launcher/casinofied-app-launcher.service.interface';\nimport {CasinofiedActionHandlerService} from './casinofied/action-handler/casinofied-action-handler.service';\nimport {IFloatingBubblesService} from './floating-bubbles/floating-bubbles.service.interface';\nimport {FloatingBubblesService} from './floating-bubbles/floating-bubbles.service';\nimport {IRestrictionRulerService} from \"./restriction-ruler/restriction-ruler.service.interface\";\nimport {RestrictionRulerService} from \"./restriction-ruler/restriction-ruler.service\";\nimport { IRedTigerService } from './red-tiger/red-tiger.service.interface';\nimport {CasinofiedAnalyticsService} from './casinofied/analytics-publisher/casinofied-analytics.service';\nimport {IAbTestingAiSortGamesListsService} from \"./ab-testing-ai-sort/ab-testing-ai-sort-games-lists.service.interface\";\nimport {AbTestingAiSortGamesListsService} from \"./ab-testing-ai-sort/ab-testing-ai-sort-games-lists.service\";\nimport {ICashierService} from \"../../common/interfaces/cashier.service.interface\";\nimport {CashierService} from \"./cashier/cashier.service\";\nimport { IRegulationService } from './regulation/regulation.service.interface';\nimport { RegulationService } from './regulation/regulation.service';\nimport {LimitsToasterService} from './limits-toaster/limits-toaster.service';\nimport { PlayerBurnoutService } from './burnout/player-burnout.service';\nimport { IPlayerBurnoutService } from './burnout/player-burnout.service.interface';\nimport { IPlayerOfferingsService } from './player-offerings/player-offerings.service.interface';\nimport { PlayerOfferingsService } from './player-offerings/player-offerings.service';\nimport { PixiAppService } from './pixi-app/pixi-app.service';\nimport { IPixiAppService } from './pixi-app/pixi-app.service.interface';\nimport { IGameAnimatedIconsManagerService } from './game-animated-icons-manager/game-animated-icons-manager.service.interface';\nimport { GameAnimatedIconsManagerService } from './game-animated-icons-manager/game-animated-icons-manager.service';\nimport { IWebGLContextManagerService } from './webgl-context-manager/webgl-context-manager.service.interface';\nimport { WebGLContextManagerService } from './webgl-context-manager/webgl-context-manager.service';\nimport {IExitPopupService} from \"./exit-popup/exit-popup.service.interface\";\nimport {RegularTooltipsService} from \"./tooltip/regular-tooltip/regular-tooltips.service\";\nimport {IRegularTooltipsService} from \"./tooltip/regular-tooltip/regular-tooltips.service.interface\";\nimport {GamingHistoryService} from \"./gaming-history/gaming-history.service\";\nimport {IGamingHistoryService} from \"./gaming-history/gaming-history.service.interfce\";\nimport {ICompaniesService} from \"./companies/companies.service.interface\";\nimport { IBecauseYouPlayedService } from './because-you-played/because-you-played.service.interface';\nimport { BecauseYouPlayedService } from './because-you-played/because-you-played.service';\nimport {IGameRunnerService} from \"./game-runner/game-runner.service.interface\";\nimport {IOrbitHybridService} from \"./hybrid/hybrid.service.interface\";\nimport {HybridService} from \"./hybrid/hybrid.service\";\nimport {StaticVideoPlayingService} from \"./video-live-stream/static-video-playing.service\";\nimport {SessionStorageService} from \"./storage/session-storage.service\";\nimport {ICookiesService} from \"./storage/cookies.service.interface\";\nimport {CookiesService} from \"./storage/cookies.service\";\nimport {IFreePlayService} from \"./free-play/free-play.service.interface\";\nimport {FreePlayService} from \"./free-play/free-play.service\";\nimport {IRestrictionsService} from \"./restrictions/restrictions.service.interface\";\nimport {RestrictionsService} from \"./restrictions/restrictions.service\";\nimport {IFreeToPlayService} from \"./free-to-play/free-to-play.service.interface\";\nimport {FreeToPlayService} from \"./free-to-play/free-to-play.service\";\nimport {IThemeDefinition} from \"./theme/theme-definition.interface\";\nimport {IGnwpService} from \"./gnwp/gnwp.service.interface\";\nimport {IScriptLoaderService} from \"./scrip-loader/script-loader.service.interface\";\nimport {ScriptLoaderService} from \"./scrip-loader/script-loader.service\";\nimport {IAdminBannerService} from \"./admin-banner/admin-banner-service.interface\";\nimport {ISessionTimerService} from \"./session-timer/session-timer.service.interface\";\nimport {SessionTimerService} from \"./session-timer/session-timer.service\";\nimport {ICasinofiedAnalyticsService} from \"../../common/interfaces/casinofied-analytics-proxy.interface\";\nimport {IGeoLocationService} from \"./geo-location/geo-location.service.interface\";\nimport { ICrmService } from './crm/crm.service.interface';\nimport { CrmService } from './crm/crm.service';\nimport {ISpecificDialogsService} from './specific-dialogs/specific-dialogs.service.interface';\nimport {SpecificDialogsService} from './specific-dialogs/specific-dialogs.service';\nimport {ITippingHistoryService} from './tipping-history/tipping-history.service.interface';\nimport {TippingHistoryService} from './tipping-history/tipping-history.service';\nimport {LoyaltyService} from './loyalty-indicator/loyalty-indicator.service';\nimport {ILoyaltyService} from './loyalty-indicator/loyalty-indicator.service.interface';\nimport {StateOfResidenceIdentifierService} from \"./state-of-residence-identifier/state-of-residence-identifier.service\";\nimport {IStateOfResidenceIdentifier} from \"./state-of-residence-identifier/state-of-residence-identifier.interface\";\nimport {ILoginPopupService} from \"./login-popup/login-popup.service.interface\";\nimport {IOnboardingTourService} from './onboarding-tour/onboarding-tour.service.interface';\nimport {OnboardingTourService} from './onboarding-tour/onboarding-tour.service';\nimport {INyxService} from \"./nyx/nyx.service.interface\";\nimport {NyxService} from \"./nyx/nyx.service\";\nimport {IOnBoardingTooltipsService} from \"./tooltip/on-boarding-tooltip/on-boarding-tooltips.service.interface\";\nimport {OnBoardingTooltipsService} from \"./tooltip/on-boarding-tooltip/on-boarding-tooltips.service\";\nimport {PlayerMigrationService} from \"./player-migration/player-migration.service\";\nimport IPlayerMigration from \"../../common/interfaces/player-migration.interface\";\nimport {IToasterService} from \"./toaster/toaster.service.interface\";\nimport {ToasterService} from \"./toaster/toaster.service\";\nimport {IFeaturesToggleManagementService} from \"./features-toggle-management/features-toggle-management.service.interface\";\nimport {FeaturesToggleManagementService} from \"./features-toggle-management/features-toggle-management.service\";\nimport {ICrossBrandsService} from \"./cross-brands/cross-brands.service.interface\";\nimport {ILinksNavigationService} from \"./links-navigation/links-navigation.service.interface\";\nimport {LinksNavigationService} from \"./links-navigation/links-navigation.service\";\nimport {IMenuItemActionFactoryService} from \"./menu-item-action-factory/menu-item-action-factory.service.interface\";\nimport {\n IBottomNavigationBarService\n} from \"./bottom-navigation-bar/bottom-navigation-bar.service.interface\";\nimport {IGameRouteHandlerService} from \"./game-route-handler/game-route-handler.service.interface\";\nimport {FirebaseToasterService} from \"./toaster/firebase-toaster.service\";\nimport {ISpinnerService} from \"../../common/interfaces/spinner.service.interface\";\nimport { ITitanJackpotService } from './titan-jackpot/titan-jackpot.service.interface';\nimport { TitanJackpotService } from './titan-jackpot/titan-jackpot.service';\nimport {GamesThemeService} from './game-theme/games-theme.service';\nimport {IGamesThemeService} from './game-theme/games-theme.service.interface';\nimport {GamesVendorService} from './game-vendor/games-vendor.service';\nimport {IGamesVendorService} from './game-vendor/games-vendor.service.interface';\nimport {PlayerMessagesService} from \"./player-messages/player-messages.service\";\nimport {IPlayerMessagesService} from \"./player-messages/player-messages.service.interface\";\nimport {VideoSlidesService} from './video-slides/video-slides.service';\nimport {IVideoSlidesService} from './video-slides/video-slides.service.interface';\nimport {IWebVitalsService} from \"./web-vitals/web-vitals.service.interface\";\nimport {IGamblingSessionService} from \"./gambling-session/gambling-session.service.interface\";\nimport {GamblingSessionService} from \"./gambling-session/gambling-session.service\";\nimport {LazyAsync} from \"../../utils/lazy-async\";\nimport {ILazy} from \"../../utils/lazy.interface\";\nimport {IServiceProvider} from \"./service-factory.interface\";\nimport {ServicesGroupLoader} from \"../services-groups/services-group-loader\";\nimport {IThemeBoxes} from \"./theme/theme-boxes.interface\";\nimport {INotificationsService} from \"./notifications/notifications.service.interface\";\nimport {NotificationsService} from \"./notifications/notifications.service\";\nimport {VideoOnDemandPlayingService} from './video-live-stream/video-on-demand-playing.service';\nimport {VersionNumber} from \"../../utils/version-number\";\nimport {Nullable, NullableString} from \"../../common/types/nullable-types\";\nimport {HeaderService} from './header/header.service';\nimport {MenuItemActionFactoryService} from './menu-item-action-factory/menu-item-action-factory.service';\nimport {IGamesOpenSessionService} from \"./games-open-sessions/games-open-session.service.interface\";\nimport {IVideoService} from \"./video/video.service.interface\";\nimport {VideoService} from \"./video/video.service\";\nimport { IIdleRecommendationsService } from './idle-recommendations/idle-recommendations.service.interface';\nimport { IdleRecommendationsService } from './idle-recommendations/idle-recommendations.service';\nimport {IJackpotBetService} from './jackpot-bet/jackpot-bet.service.interface';\nimport {JackpotBetService} from './jackpot-bet/jackpot-bet.service';\n\n\n\n\nexport class ServiceFactory implements IServiceFactoryExtended, IServiceProvider {\n readonly splash: ISplashService;\n readonly logger: ILoggerService;\n readonly localStorage: IStorageService;\n readonly window: IWindowService;\n readonly dom: IDomService;\n readonly http: IHttpService;\n readonly sdkHooksProvider: SdkHooksProvider;\n readonly _groupsLoader: ServicesGroupLoader;\n constructor(sdkHooksProvider: SdkHooksProvider,\n logger: ILoggerService,\n localStorage: IStorageService,\n windowService: IWindowService,\n domService: IDomService,\n httpService: IHttpService,\n themeDefinition: IThemeDefinition,\n themeDefaultBoxes: IThemeBoxes,\n private _appStartupConfigs: ApplicationStartupConfigurations,\n private _languageData: ILanguageData) {\n\n this._groupsLoader = new ServicesGroupLoader();\n sdkHooksProvider.services = this;\n\n this.logger = logger;\n this.splash = new SplashService(() => {\n this.hybrid.displayWebView(200);\n });\n\n this.localStorage = localStorage;\n this.window = windowService;\n this.dom = domService;\n this.http = httpService;\n this._themeDefinition = themeDefinition;\n this._themeDefaultBoxes = themeDefaultBoxes;\n\n this._sdk.forceInit();\n this._configuration.forceInit();\n this._featuresToggleManagement.forceInit();\n this._userService.forceInit();\n this._abTestingFeatureDataProvider.forceInit();\n this._spinner.forceInit();\n this._location.forceInit();\n this._routing.forceInit();\n this._segmentation.forceInit();\n\n this._deepLink.forceInit();\n\n this._cmsPages.forceInit();\n this._marketing.forceInit();\n\n this._siteMap.forceInit();\n this._games.forceInit();\n\n this._gamesFilter.forceInit();\n\n this._gameRouteHandler.forceInit();\n\n this._aiEngine.forceInit();\n this._aiNewEngine.forceInit();\n\n //this._lobbyGameInfoPreview.forceInit();\n\n this._crossBrands.forceInit();\n this._userMenu.forceInit();\n //this._externalLinks.forceInit();\n this._theme.forceInit();\n this._miniOrbit.forceInit();\n this._pwaManifest.forceInit();\n this._progressiveWebApp.forceInit();\n //this._drawerService.forceInit();\n this._controlCenter.forceInit();\n this._gamePopup.forceInit();\n this._homepageService.forceInit();\n this._jackpots.forceInit();\n this._sessionCooldown.forceInit();\n this._userGameOrientationService.forceInit();\n\n this._appLauncher.forceInit();\n this._actionHandler.forceInit();\n this._restrictionRuler.forceInit();\n this._casinofiedAnalytics.forceInit();\n this._limitsToaster.forceInit();\n this._exitPopup.forceInit();\n\n this._sideMenu.forceInit();\n this._regularToolTip.forceInit();\n this._gameSearch.forceInit();\n this._gameRunner.forceInit();\n this._freePlay.forceInit();\n this._adminBanner.forceInit();\n this._sessionTimer.forceInit();\n\n this._crm.forceInit();\n\n this._stateOfResidenceIdentifier.forceInit();\n this._walletProxy.forceInit();\n this._loginPopup.forceInit();\n this._omg.forceInit();\n this._dailyDeal.forceInit();\n this._onboardingTour.forceInit();\n this._onBoardingTooltip.forceInit();\n\n this._playerMigration.forceInit();\n this._toaster.forceInit();\n this._firebaseToaster.forceInit();\n this._cookies.forceInit();\n if(this.configuration.servicesConfigs.GeoLocation.enable) {\n this._geoLocation.forceInit();\n }\n\n this._gamblingSession.forceInit();\n\n this.sdk.fireOrbitInitComplete();\n\n this._idleRecommendations.forceInit();\n\n setTimeout(() => this._forceUpgradeHybridOnIos());\n }\n\n //TODO - this should be removed when we are sure that there are no more users with older version\n private _forceUpgradeHybridOnIos(): void {\n\n if(!(this.device.os.isIOS && this.device.hybrid.isHybrid)) {\n return;\n }\n\n if(this.miniOrbit.isEnabled) {\n return;\n }\n\n const currentHybridVersion = this.hybrid.getAppVersion();\n if(!currentHybridVersion) {\n return;\n }\n\n let expectedHybridVersion: Nullable<VersionNumber> = null;\n let appStoreUrl: NullableString = null;\n\n if(this.sdk.getBrandID() === 81) { //888 sweden\n expectedHybridVersion = new VersionNumber(2, 8, 3971451701);\n appStoreUrl = 'https://apps.apple.com/se/app/888-casino-spela-online/id1436816261';\n } else if(this.sdk.getBrandID() === 92) { //MrGreen sweden\n expectedHybridVersion = new VersionNumber(2, 8, 3971451702);\n appStoreUrl = 'https://apps.apple.com/se/app/mr-green-casino-blackjack/id1664477817';\n }\n\n if(!expectedHybridVersion) {\n return;\n }\n\n if(currentHybridVersion.isSmallerThan(expectedHybridVersion)) {\n this.analytics.sendTechnicalEvent('UpgradeIosVersion', 'popupShow', currentHybridVersion.toString())\n this.dialog.showSimpleTextModal({\n title: 'Vi har uppgraderat vÃ¥r app',\n text: 'Klicka nedan för att hämta den senaste versionen och logga in',\n hideCloseButton: true,\n disableFullscreenMobile: false,\n buttons: [\n {\n text: 'Uppdatera app',\n buttonPreset: this.sdk.getBrandID() === 92 ? 'special' : 'primary',\n onClick: async () => {\n this.analytics.sendTechnicalEvent('UpgradeIosVersion', 'buttonClick', currentHybridVersion.toString())\n this.hybrid.openExternalLink(appStoreUrl);\n return DialogButtonClickHandleResultEnum.KeepDialogOpen;\n }\n }\n ]\n })\n }\n\n }\n\n getServiceByName(name: string): unknown | Promise<unknown> {\n let serviceInstance: unknown = this[`_${name}`];\n if(!serviceInstance) {\n serviceInstance = this[name];\n }\n\n if(serviceInstance) {\n if((serviceInstance as ILazy).isLazy) {\n return (serviceInstance as ILazy).tryGetResolvedValue();\n } else {\n return serviceInstance;\n }\n }\n\n throw new Error(`tryGetResolvedAsyncService called with an invalid service name: ${name}`);\n\n }\n\n private _externalLinks = new LazyAsync<IExternalLinksService>(async () => {\n const {ExternalLinksService} = await import(/* webpackChunkName: \"service-external-links\" */ './external-links/external-links.service');\n return new ExternalLinksService(this);\n });\n public get externalLinks(): Promise<IExternalLinksService> {\n return this._externalLinks.value;\n }\n\n private _userMenu = new LazyAsync<IUserMenuService>(async () => {\n const {UserMenuService} = await import(/*webpackChunkName: \"service-user-menu\"*/ \"./user-menu/user-menu.service\");\n return new UserMenuService(this, this.menuItemActionFactory);\n });\n public get userMenu(): Promise<IUserMenuService> {\n return this._userMenu.value;\n }\n\n private _crossBrands = new Lazy<ICrossBrandsService>(() => new CrossBrandsService(this));\n public get crossBrands(): ICrossBrandsService {\n return this._crossBrands.value;\n }\n\n private _verticalGamesList = new LazyAsync<IVerticalGamesListService>(async () => {\n const {VerticalGamesListService} = await import(/*webpackChunkName: \"service-vertical-games-list\" */ './vertical-games-list/vertical-games-list.service');\n return new VerticalGamesListService(this);\n });\n public get verticalGamesList(): Promise<IVerticalGamesListService> {\n return this._verticalGamesList.value;\n }\n\n private _lobbyGameInfoPreview = new LazyAsync<ILobbyGameInfoPreviewService>(async () => {\n const {LobbyGameInfoPreviewService} = await this._groupsLoader.loadGroup5();\n return new LobbyGameInfoPreviewService(this);\n });\n public get lobbyGameInfoPreview(): Promise<ILobbyGameInfoPreviewService> {\n return this._lobbyGameInfoPreview.value;\n }\n\n private _gamePreviewFeaturesSelector = new LazyAsync<IGamePreviewFeaturesSelectorService>(async () => {\n const {GamePreviewFeaturesSelectorService} = await this._groupsLoader.loadGroup5();\n return new GamePreviewFeaturesSelectorService(this);\n });\n get gamePreviewFeaturesSelector(): Promise<IGamePreviewFeaturesSelectorService> {\n return this._gamePreviewFeaturesSelector.value;\n }\n\n private _aiEngine = new Lazy<IAiEngineService>(() => new AiEngineService(this));\n public get aiEngine(): IAiEngineService {\n return this._aiEngine.value;\n }\n\n private _aiNewEngine = new Lazy<IAiNewGamesEngineService>(() => new AiNewGamesEngineService(this));\n public get aiNewEngine(): IAiNewGamesEngineService {\n return this._aiNewEngine.value;\n }\n\n private _deepLink = new LazyAsync<IDeepLinkService>(async () => {\n const {DeepLinkService} = await this._groupsLoader.loadGroup3();\n return new DeepLinkService(this);\n });\n public get deepLink(): Promise<IDeepLinkService> {\n return this._deepLink.value;\n }\n\n private _gameRouteHandler = new Lazy<IGameRouteHandlerService>(() => new GameRouteHandlerService(this));\n public get gameRouteHandler(): IGameRouteHandlerService {\n return this._gameRouteHandler.value;\n }\n\n private _gamesFilter = new Lazy<IGamesFilterService>(() => new GamesFilterService(this));\n public get gamesFilter(): IGamesFilterService {\n return this._gamesFilter.value;\n }\n\n private _becauseYouPlayed = new Lazy<IBecauseYouPlayedService>(() => new BecauseYouPlayedService(this));\n public get becauseYouPlayed(): IBecauseYouPlayedService {\n return this._becauseYouPlayed.value;\n }\n\n private _games = new Lazy<IGamesService>(() => new GamesService(this));\n public get games(): IGamesService {\n return this._games.value;\n }\n\n private _siteMap = new LazyAsync<ISiteMapService>(async () => {\n const {SiteMapService} = await this._groupsLoader.loadGroup4();\n return new SiteMapService(this);\n });\n public get siteMap(): Promise<ISiteMapService> {\n return this._siteMap.value;\n }\n\n private _marketing = new LazyAsync<IMarketingService>(async () => {\n const {MarketingService} = await this._groupsLoader.loadGroup4();\n return new MarketingService(this);\n });\n public get marketing(): Promise<IMarketingService> {\n return this._marketing.value;\n }\n\n private _cmsPages = new LazyAsync<ICmsPagesService>(async () => {\n const {CmsPagesService} = await this._groupsLoader.loadGroup1();\n return new CmsPagesService(this);\n });\n public get cmsPages(): Promise<ICmsPagesService> {\n return this._cmsPages.value;\n }\n\n private _configuration = new Lazy<IConfigurationService>(() => new ConfigurationsService(this, this._appStartupConfigs));\n public get configuration(): IConfigurationService {\n return this._configuration.value;\n }\n\n private _spinner = new Lazy<ISpinnerService>(() => new SpinnerService(this));\n public get spinner(): ISpinnerService {\n return this._spinner.value;\n }\n\n private _webVitals = new LazyAsync<IWebVitalsService>(async () => {\n const {WebVitalsService} = await import(/* webpackChunkName: \"service-web-vitals\" */ './web-vitals/web-vitals.service');\n return new WebVitalsService(this);\n });\n public get webVitals(): Promise<IWebVitalsService> {\n return this._webVitals.value;\n }\n\n private _location = new Lazy<ILocationService>(() => new LocationService(window, this.localStorage, (action: string, label?: string, value?: any) => this.analytics.sendTechnicalEvent(action, label, value)));\n public get location(): ILocationService {\n return this._location.value;\n }\n\n private _routing = new Lazy<IRoutingService>(() => new RoutingService(this));\n public get routing(): IRoutingService {\n return this._routing.value;\n }\n\n private _regulation = new Lazy<IRegulationService>(() => new RegulationService(this));\n public get regulation(): IRegulationService {\n return this._regulation.value;\n }\n\n private _segmentation = new Lazy<ISegmentationAggregatorService>(() => new SegmentationAggregatorService(this));\n public get segmentation(): ISegmentationAggregatorService {\n return this._segmentation.value;\n }\n\n private _liveTableFeeds = new Lazy<ILiveTableFeedsService>(() => new LiveTableFeedsService(this));\n public get liveTableFeeds(): ILiveTableFeedsService {\n return this._liveTableFeeds.value;\n }\n\n private _translation = new Lazy<ITranslationService>(() => new TranslationService(this));\n public get translation(): ITranslationService {\n return this._translation.value;\n }\n\n private _currencyService = new Lazy<ICurrencyService>(() => new CurrencyService(this));\n\n public get currency(): ICurrencyService {\n return this._currencyService.value;\n }\n\n private _analyticsService = new Lazy<IAnalyticsService>(() => new AnalyticsService(this));\n\n public get analytics(): IAnalyticsService {\n return this._analyticsService.value;\n }\n\n private _analyticsDataLayerService = new LazyAsync<IAnalyticsDataLayerService>(async () => {\n const {AnalyticsDataLayerService} = await import(/*webpackChunkName: \"service-analytics-data-layer\" */ './analytics/analytics-data-layer.service');\n return new AnalyticsDataLayerService(this);\n });\n\n public get analyticsDataLayer(): Promise<IAnalyticsDataLayerService> {\n return this._analyticsDataLayerService.value;\n }\n\n private _userService = new Lazy<IUserService>(() => new UserService(this));\n\n get user(): IUserService {\n return this._userService.value;\n }\n\n\n private _homepageService = new Lazy<IHomepageService>(() => new HomepageService(this, this.menuItemActionFactory));\n get homepage(): IHomepageService {\n return this._homepageService.value;\n }\n\n private _userGameOrientationService = new Lazy<IUserGameOrientationService>(() => new UserGameOrientationService(this));\n\n get userGameOrientation(): IUserGameOrientationService {\n return this._userGameOrientationService.value;\n }\n\n private _cmsApi = new LazyAsync<ICmsApiService>(async () => {\n const {CmsApiService} = await this._groupsLoader.loadGroup1();\n return new CmsApiService(this);\n });\n get cmsApi(): Promise<ICmsApiService> {\n return this._cmsApi.value;\n }\n\n private _cmsBanners = new LazyAsync<ICmsBannersService>(async () => {\n const {CmsBannersService} = await this._groupsLoader.loadGroup1();\n return new CmsBannersService(this);\n });\n get cmsBanners(): Promise<ICmsBannersService> {\n return this._cmsBanners.value;\n }\n\n private _launcher = new Lazy<ILauncherService>(() => new LauncherService(this));\n get launcher(): ILauncherService {\n return this._launcher.value;\n }\n\n private _clientDevice = new LazyAsync<IClientDeviceService>(async () => {\n const {ClientDeviceService} = await import(/*webpackChunkName: \"service-client-device\" */ './client-device/client-device.service');\n return new ClientDeviceService(this);\n });\n get clientDevice(): Promise<IClientDeviceService> {\n return this._clientDevice.value;\n }\n\n private _device = new Lazy<IDeviceService>(() => new DeviceService(this));\n get device(): IDeviceService {\n return this._device.value;\n }\n\n private _deepLinkParser = new LazyAsync<IDeepLinkParserService>(async () => {\n const {DeepLinkParserService} = await this._groupsLoader.loadGroup3();\n return new DeepLinkParserService(this);\n });\n get deepLinkParser(): Promise<IDeepLinkParserService> {\n return this._deepLinkParser.value;\n }\n\n private _deepLinkActionsFactory = new LazyAsync<IDeepLinkActionsFactoryService>(async () => {\n const {DeepLinkActionsFactoryService} = await this._groupsLoader.loadGroup3();\n return new DeepLinkActionsFactoryService(this);\n });\n get deepLinkActionsFactory(): Promise<IDeepLinkActionsFactoryService> {\n return this._deepLinkActionsFactory.value;\n }\n\n private _sdk: Lazy<ISdkService> = new Lazy<ISdkService>(() => new SdkService(this));\n get sdk(): ISdkService {\n return this._sdk.value;\n }\n\n private _arenas = new Lazy<IArenasService>(() => new ArenasService(this));\n get arenas(): IArenasService {\n return this._arenas.value;\n }\n\n private _language = new Lazy<ILanguageService>(() => new LanguageService(this._languageData, this));\n get language(): ILanguageService {\n return this._language.value;\n }\n\n private _sideMenu = new LazyAsync<ISideMenuService>(async () => {\n const {SideMenuService} = await import(/* webpackChunkName: \"service-side-menu\" */ './side-menu/side-menu.service');\n\n return new SideMenuService(this, this.menuItemActionFactory);\n });\n get sideMenu(): Promise<ISideMenuService> {\n return this._sideMenu.value;\n }\n\n private _gameSearch = new LazyAsync<IGameSearchService>(async () => {\n const {GameSearchService} = await import(/* webpackChunkName: \"service-game-search\" */ './game-search/game-search.service')\n return new GameSearchService(this, this.menuItemActionFactory);\n });\n get gameSearch(): Promise<IGameSearchService> {\n return this._gameSearch.value;\n }\n\n private _gamePopup = new LazyAsync<IGamePopupService>(async () => {\n const {GamePopupService} = await import(/* webpackChunkName: \"service-game-popup\"*/ './game-popup/game-popup.service');\n return new GamePopupService(this);\n });\n get gamePopup(): Promise<IGamePopupService> {\n return this._gamePopup.value;\n }\n\n\n private _cmsSegmentation = new LazyAsync<ICmsSegmentationService>(async () => {\n const {CmsSegmentationService} = await this._groupsLoader.loadGroup1();\n return new CmsSegmentationService(this);\n });\n get cmsSegmentation(): Promise<ICmsSegmentationService> {\n return this._cmsSegmentation.value;\n }\n\n private _stickyHandlerFactory = new Lazy<IStickyHandlerFactoryService>(() => new StickyHandlerFactoryService(this));\n get stickyHandlerFactory(): IStickyHandlerFactoryService {\n return this._stickyHandlerFactory.value;\n }\n\n private _exitPopup = new LazyAsync<IExitPopupService>(async () => {\n const {ExitPopupService} = await this._groupsLoader.loadGroup2();\n return new ExitPopupService(this);\n });\n get exitPopup(): Promise<IExitPopupService> {\n return this._exitPopup.value;\n }\n\n private _routingConfiguration = new Lazy<IRoutingConfigurationService>(() => new RoutingConfigurationService(this));\n get routingConfiguration(): IRoutingConfigurationService {\n return this._routingConfiguration.value;\n }\n\n private _overlay = new Lazy<IOverlayService>(() => new OverlayService(this));\n get overlay(): IOverlayService {\n return this._overlay.value;\n }\n\n private _time = new Lazy<ITimeService>(() => new TimeService(this));\n get time(): ITimeService {\n return this._time.value;\n }\n\n private _abTestingFeatureDataProvider = new Lazy<IAbTestingFeatureDataProviderService>(() => new AbTestingFeatureDataProviderService(this));\n get abTestingFeatureDataProvider(): IAbTestingFeatureDataProviderService {\n return this._abTestingFeatureDataProvider.value;\n }\n\n private _abTestingAiSort = new Lazy<IAbTestingAiSortGamesListsService>(() => new AbTestingAiSortGamesListsService(this));\n\n get abTestingAiSortGamesLists(): IAbTestingAiSortGamesListsService {\n return this._abTestingAiSort.value;\n }\n\n\n private readonly _themeDefinition: IThemeDefinition ;\n private readonly _themeDefaultBoxes: IThemeBoxes;\n private _theme = new Lazy<IThemeService>(() => new ThemeService(this, this._themeDefinition, this._themeDefaultBoxes));\n get theme(): IThemeService {\n return this._theme.value;\n }\n\n private _miniOrbit = new Lazy<IMiniOrbitService>(() => new MiniOrbitService(this));\n public get miniOrbit(): IMiniOrbitService {\n return this._miniOrbit.value;\n }\n\n private _notifications = new Lazy<INotificationsService>(() => new NotificationsService(this));\n public get notifications(): INotificationsService {\n return this._notifications.value;\n }\n\n private _dialog = new Lazy<IDialogService>(() => new DialogService(this));\n public get dialog(): IDialogService {\n return this._dialog.value;\n }\n\n private _header = new Lazy<IHeaderService>(() => new HeaderService(this, this.menuItemActionFactory));\n public get header(): IHeaderService {\n return this._header.value;\n }\n\n private _pwaManifest = new Lazy<IPWAManifestService>(() => new PWAManifestService(this));\n public get manifest(): IPWAManifestService {\n return this._pwaManifest.value;\n }\n\n private _progressiveWebApp = new LazyAsync<IProgressiveWebAppService>(async () => {\n const {ProgressiveWebAppService} = await import(/* webpackChunkName: \"service-progressive-web-app\" */ './progressive-web-app/progressive-web-app.service');\n return new ProgressiveWebAppService(this);\n });\n public get progressiveWebApp(): Promise<IProgressiveWebAppService> {\n return this._progressiveWebApp.value;\n }\n\n private _miniOrbitCommunicationAdapterFactory = new Lazy<IMiniOrbitCommunicationAdapterFactoryService>(() => new MiniOrbitCommunicationAdapterFactoryService(this));\n public get miniOrbitCommunicationAdapterFactory(): IMiniOrbitCommunicationAdapterFactoryService {\n return this._miniOrbitCommunicationAdapterFactory.value;\n }\n\n\n //import {DrawerService} from './drawer/drawer.service';\n\n private _drawer = new LazyAsync<IDrawerService>(async () => {\n const {DrawerService} = await import(/* webpackChunkName: \"service-drawer\" */ './drawer/drawer.service');\n return new DrawerService(this)\n });\n\n public get drawer(): Promise<IDrawerService> {\n return this._drawer.value;\n }\n\n private _dailyDeal = new LazyAsync<IDailyDealService>(async () => {\n const {DailyDealService} = await import(/* webpackChunkName: \"service-daily-deal\" */ './daily-deal/daily-deal.service')\n return new DailyDealService(this);\n });\n public get dailyDeal(): Promise<IDailyDealService> {\n return this._dailyDeal.value;\n }\n\n private _omg = new LazyAsync<IOmgService>(async () => {\n const {OmgService} = await import(/* webpackChunkName: \"service-omg\" */ './omg-proxy/omg.service');\n return new OmgService(this);\n });\n public get omg(): Promise<IOmgService> {\n return this._omg.value;\n }\n\n private _jackpots = new LazyAsync<IJackpotsService>(async () => {\n const {JackpotsService} = await import(/* webpackChunkName: \"service-jackpots\" */ './jackpots/jackpots.service');\n return new JackpotsService(this);\n });\n public get jackpots(): Promise<IJackpotsService> {\n return this._jackpots.value;\n }\n\n\n private _walletProxy = new Lazy<IWalletProxyService>(() => new WalletProxyService(this));\n public get walletProxy(): IWalletProxyService {\n return this._walletProxy.value;\n }\n\n private _controlCenter = new Lazy<IControlCenterService>(() => new ControlCenterService(this));\n public get controlCenter(): IControlCenterService {\n return this._controlCenter.value;\n }\n\n private _tools = new Lazy<IToolsService>(() => new ToolsService(this));\n public get tools(): IToolsService {\n return this._tools.value;\n }\n\n private _sessionCooldown = new Lazy<ISessionCooldownService>(() => new SessionCooldownService(this));\n public get sessionCooldown(): ISessionCooldownService {\n return this._sessionCooldown.value;\n }\n\n private _mediaQuery = new Lazy<IMediaQueryService>(() => new MediaQueryService(this));\n public get mediaQuery(): IMediaQueryService {\n return this._mediaQuery.value;\n }\n\n private _api = new Lazy<ApiService>(() => new ApiService(this));\n public get api(): ApiService {\n return this._api.value;\n }\n\n private _orbitComponentToSdkAdapter = new Lazy<IOrbitComponentsInsideSdkProvider>(() => new OrbitComponentToSdkAdapterService(this));\n\n public get orbitComponentInsideSdkProvider(): IOrbitComponentsInsideSdkProvider {\n return this._orbitComponentToSdkAdapter.value;\n }\n\n private _messageBroker = new Lazy<IMessageBrokerService>(() => new MessageBrokerService(this));\n public get messageBroker(): IMessageBrokerService {\n return this._messageBroker.value;\n }\n\n private _appLauncher = new LazyAsync<ICasinofiedAppLauncherService>(async () => {\n const {CasinofiedAppLauncherService} = await import(/* webpackChunkName: \"service-casinofied-app-launcher\"*/ './casinofied/app-launcher/casinofied-app-launcher.service');\n return new CasinofiedAppLauncherService(this);\n\n });\n public get appLauncher(): Promise<ICasinofiedAppLauncherService> {\n return this._appLauncher.value;\n }\n\n // No need to expose this service as public member. It is not consumed by any other service or component\n private _actionHandler = new Lazy<CasinofiedActionHandlerService>(() => new CasinofiedActionHandlerService(this));\n\n private _floatingBubbles = new Lazy<IFloatingBubblesService>(() => new FloatingBubblesService(this));\n public get floatingBubbles(): IFloatingBubblesService {\n return this._floatingBubbles.value;\n }\n\n private _restrictionRuler = new Lazy<IRestrictionRulerService>(() => new RestrictionRulerService(this));\n public get restrictionRuler(): IRestrictionRulerService {\n return this._restrictionRuler.value;\n }\n\n private _redTiger = new LazyAsync<IRedTigerService>(async () => {\n const { RedTigerService } = await import(/*webpackChunkName: \"service-red-tiger\"*/ './red-tiger/red-tiger.service');\n return new RedTigerService(this);\n });\n public get redTiger(): Promise<IRedTigerService> {\n return this._redTiger.value;\n }\n\n private _casinofiedAnalytics = new Lazy<ICasinofiedAnalyticsService>(() => new CasinofiedAnalyticsService(this));\n public get casinofiedAnalytics(): ICasinofiedAnalyticsService {\n return this._casinofiedAnalytics.value;\n }\n\n private _liveStreamPlaying = new Lazy<IVideoPlayingService>(() => new LiveStreamPlayingService(this));\n public get liveStreamPlaying(): IVideoPlayingService {\n return this._liveStreamPlaying.value;\n }\n\n private _staticVideoPlaying = new Lazy<IVideoPlayingService>(() => new StaticVideoPlayingService(this));\n public get staticVideoPlaying(): IVideoPlayingService {\n return this._staticVideoPlaying.value;\n }\n\n private _videoOnDemandPlaying = new Lazy<IVideoPlayingService>(() => new VideoOnDemandPlayingService(this));\n public get videoOnDemandPlaying(): IVideoPlayingService {\n return this._videoOnDemandPlaying.value;\n }\n\n private _cashier: Lazy<ICashierService> = new Lazy<ICashierService>(() => new CashierService(this));\n get cashier(): ICashierService {\n return this._cashier.value;\n }\n\n private _playerOfferings: Lazy<IPlayerOfferingsService> = new Lazy<IPlayerOfferingsService>(() => new PlayerOfferingsService(this));\n get playerOfferings(): IPlayerOfferingsService {\n return this._playerOfferings.value;\n }\n\n private _qaEnvironmentPopUpBlockerService = new Lazy<IQAEnvironmentPopUpBlockerService>(() => new QAEnvironmentPopUpBlockerService(this));\n public get qaEnvironmentPopUpBlockerService(): IQAEnvironmentPopUpBlockerService {\n return this._qaEnvironmentPopUpBlockerService.value;\n }\n\n private _limitsToaster = new Lazy<LimitsToasterService>(() => new LimitsToasterService(this));\n public get limitsToaster(): LimitsToasterService {\n return this._limitsToaster.value;\n }\n\n private _burnoutService = new Lazy<IPlayerBurnoutService>(() => new PlayerBurnoutService(this));\n public get burnoutService(): IPlayerBurnoutService {\n return this._burnoutService.value;\n }\n\n private _pixiAppService = new Lazy<IPixiAppService>(() => new PixiAppService(this));\n public get pixiApp(): IPixiAppService {\n return this._pixiAppService.value;\n }\n\n private _gameAnimatedIconsManagerService = new Lazy<IGameAnimatedIconsManagerService>(() => new GameAnimatedIconsManagerService(this));\n public get gameAnimatedIconsManager(): IGameAnimatedIconsManagerService {\n return this._gameAnimatedIconsManagerService.value;\n }\n\n private _webGlContextManagerService = new Lazy<IWebGLContextManagerService>(() => new WebGLContextManagerService(this));\n public get webGlContextManager(): IWebGLContextManagerService {\n return this._webGlContextManagerService.value;\n }\n\n private _regularToolTip = new Lazy<IRegularTooltipsService>(() => new RegularTooltipsService(this));\n public get regularTooltips(): IRegularTooltipsService {\n return this._regularToolTip.value;\n }\n\n private _onBoardingTooltip = new Lazy<IOnBoardingTooltipsService>(() => new OnBoardingTooltipsService(this));\n public get onBoardingTooltips(): IOnBoardingTooltipsService {\n return this._onBoardingTooltip.value;\n }\n\n\n\n private _gamingHistory = new Lazy<IGamingHistoryService>(() => new GamingHistoryService(this));\n public get gamingHistory(): IGamingHistoryService {\n return this._gamingHistory.value;\n }\n\n private _tippingHistory = new Lazy<ITippingHistoryService>(() => new TippingHistoryService(this));\n public get tippingHistory(): ITippingHistoryService {\n return this._tippingHistory.value;\n }\n\n private _companies = new LazyAsync<ICompaniesService>(async () => {\n const {CompaniesService} = await import(/* webpackChunkName: \"service-companies\"*/ './companies/companies.service');\n return new CompaniesService(this)\n });\n public get companies(): Promise<ICompaniesService> {\n return this._companies.value;\n }\n\n private _freeToPlayService = new Lazy<IFreeToPlayService>(() => new FreeToPlayService(this));\n public get freeToPlay(): IFreeToPlayService {\n return this._freeToPlayService.value;\n }\n\n private _gameRunner = new LazyAsync<IGameRunnerService>(async () => {\n const {GameRunnerService} = await import(/* webpackChunkName: \"service-game-runner\" */ './game-runner/game-runner.service');\n return new GameRunnerService(this);\n });\n public get gameRunner(): Promise<IGameRunnerService> {\n return this._gameRunner.value;\n }\n\n private _hybrid = new Lazy<IOrbitHybridService>(() => new HybridService(this));\n public get hybrid(): IOrbitHybridService {\n return this._hybrid.value;\n }\n\n private _sessionStorage = new Lazy<IStorageService>(() => new SessionStorageService(this.logger));\n public get sessionStorage(): IStorageService {\n return this._sessionStorage.value;\n }\n\n private _cookies = new Lazy<ICookiesService>(() => new CookiesService());\n public get cookies(): ICookiesService {\n return this._cookies.value;\n }\n\n private _freePlay = new Lazy<IFreePlayService>(() => new FreePlayService(this));\n public get freePlay(): IFreePlayService {\n return this._freePlay.value;\n }\n\n private _restrictions = new Lazy<IRestrictionsService>(() => new RestrictionsService(this));\n public get restrictions(): IRestrictionsService {\n return this._restrictions.value;\n }\n\n private _gnwp = new LazyAsync<IGnwpService>(async () => {\n const {GnwpService} = await import(/*webpackChunkName: \"service-gnwp\" */ './gnwp/gnwp.service');\n return new GnwpService(this);\n });\n public get gnwp(): Promise<IGnwpService> {\n return this._gnwp.value;\n }\n\n private _scriptLoader = new Lazy<IScriptLoaderService>(() => new ScriptLoaderService(this));\n public get scriptLoader(): IScriptLoaderService {\n return this._scriptLoader.value;\n }\n\n private _adminBanner = new LazyAsync<IAdminBannerService>(async () => {\n const {AdminBannerService} = await import(/*webpackChunkName: \"service-adm-banner\" */ './admin-banner/admin-banner.service');\n return new AdminBannerService(this);\n });\n get adminBanner(): Promise<IAdminBannerService> {\n return this._adminBanner.value;\n }\n\n private _sessionTimer = new Lazy<ISessionTimerService>(() => new SessionTimerService(this));\n get sessionTimer(): ISessionTimerService {\n return this._sessionTimer.value;\n }\n\n private _geoLocation = new LazyAsync<IGeoLocationService>(async () => {\n const {GeoLocationService} = await import(/*webpackChunkName: \"service-geolocation\" */ './geo-location/geo-location.service');\n return new GeoLocationService(this)\n });\n get geoLocation(): Promise<IGeoLocationService> {\n return this._geoLocation.value;\n }\n\n private _crm = new Lazy<ICrmService>(() => new CrmService(this));\n get crm(): ICrmService {\n return this._crm.value;\n }\n\n private _specificDialogs = new Lazy<ISpecificDialogsService>(() => new SpecificDialogsService(this));\n get specificDialogs(): ISpecificDialogsService {\n return this._specificDialogs.value\n }\n\n private _stateOfResidenceIdentifier = new Lazy<IStateOfResidenceIdentifier>(() => new StateOfResidenceIdentifierService(this));\n get stateOfResidenceIdentifier(): IStateOfResidenceIdentifier {\n return this._stateOfResidenceIdentifier.value;\n }\n\n private _loyaltyIndicator = new Lazy<ILoyaltyService>(() => new LoyaltyService(this));\n get loyaltyIndicator(): ILoyaltyService {\n return this._loyaltyIndicator.value\n }\n\n private _loginPopup = new LazyAsync<ILoginPopupService>(async () => {\n const {LoginPopupService} = await this._groupsLoader.loadGroup2();\n return new LoginPopupService(this);\n });\n get loginPopup(): Promise<ILoginPopupService> {\n return this._loginPopup.value;\n }\n\n private _onboardingTour = new Lazy<IOnboardingTourService>(() => new OnboardingTourService(this));\n get onboardingTour(): IOnboardingTourService {\n return this._onboardingTour.value;\n }\n\n private _nyx = new Lazy<INyxService>(() => new NyxService(this));\n get nyx(): INyxService {\n return this._nyx.value;\n }\n\n private _playerMigration = new Lazy<IPlayerMigration>(() => new PlayerMigrationService(this));\n get playerMigration(): IPlayerMigration {\n return this._playerMigration.value;\n }\n\n private _toaster = new Lazy<IToasterService>(() => new ToasterService(this));\n get toaster(): IToasterService {\n return this._toaster.value;\n }\n\n private _idleRecommendations = new Lazy<IIdleRecommendationsService>(() => new IdleRecommendationsService(this));\n get idleRecommendations(): IIdleRecommendationsService {\n return this._idleRecommendations.value;\n }\n\n private _featuresToggleManagement = new Lazy<IFeaturesToggleManagementService>(() => new FeaturesToggleManagementService(this));\n get featuresToggleManagement(): IFeaturesToggleManagementService {\n return this._featuresToggleManagement.value;\n }\n\n private _linksNavigation = new Lazy<ILinksNavigationService>(() => new LinksNavigationService(this));\n get linksNavigation(): ILinksNavigationService {\n return this._linksNavigation.value;\n }\n\n private _menuItemActionFactory = new Lazy<IMenuItemActionFactoryService>(() => new MenuItemActionFactoryService(this));\n get menuItemActionFactory(): IMenuItemActionFactoryService {\n return this._menuItemActionFactory.value;\n }\n\n private _bottomNavigationBar = new LazyAsync<IBottomNavigationBarService>(async () => {\n const {BottomNavigationBarService} = await import(/*webpackChunkName: \"service-bottom-nav-bar\"*/ \"./bottom-navigation-bar/bottom-navigation-bar.service\");\n return new BottomNavigationBarService(this, this.menuItemActionFactory);\n });\n get bottomNavigationBar(): Promise<IBottomNavigationBarService> {\n return this._bottomNavigationBar.value;\n }\n\n private _titanJackpot = new Lazy<ITitanJackpotService>(() => new TitanJackpotService(this))\n get titanJackpot(): ITitanJackpotService {\n return this._titanJackpot.value;\n }\n\n private _firebaseToaster = new Lazy<FirebaseToasterService>(() => new FirebaseToasterService(this));\n\n private _gamesTheme = new Lazy<IGamesThemeService>(() => new GamesThemeService(this))\n get gamesTheme(): IGamesThemeService {\n return this._gamesTheme.value;\n }\n\n private _gamesVendor = new Lazy<IGamesVendorService>(() => new GamesVendorService(this))\n get gamesVendor(): IGamesVendorService {\n return this._gamesVendor.value;\n }\n\n private _playerMessages = new Lazy<IPlayerMessagesService>(() => new PlayerMessagesService(this))\n get playerMessages(): IPlayerMessagesService {\n return this._playerMessages.value;\n }\n private _videoSlides = new Lazy<IVideoSlidesService>(() => new VideoSlidesService(this))\n get videoSlides(): IVideoSlidesService {\n return this._videoSlides.value;\n }\n\n\n private _gamblingSession = new Lazy<IGamblingSessionService>(() => new GamblingSessionService(this))\n get gamblingSession(): IGamblingSessionService {\n return this._gamblingSession.value;\n }\n\n private _openSessions = new LazyAsync<IGamesOpenSessionService>(async () => {\n const {GamesOpenSessionService} = await import(/*webpackChunkName: \"service-open-sessions\" */ \"./games-open-sessions/games-open-session.service\");\n return new GamesOpenSessionService(this);\n });\n\n get openSessions(): Promise<IGamesOpenSessionService> {\n return this._openSessions.value;\n }\n\n private _video = new Lazy<IVideoService>(() => new VideoService(this))\n get video(): IVideoService {\n return this._video.value;\n }\n\n private _jackpotBet = new Lazy<IJackpotBetService>(() => new JackpotBetService(this))\n get jackpotBet(): IJackpotBetService {\n return this._jackpotBet.value;\n }\n}","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\n\nexport const LogoContainerBox = styledBox('LogoContainerBox');\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const LogoImageBox = styledBox('LogoImageBox');","import React from \"react\";\nimport {Link} from \"../../raw-components/link/link\";\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {LogoContainerBox} from \"./boxes/logo-container/logo-container.box\";\nimport {LogoImageBox} from \"./boxes/logo-image/default-logo-icon/logo-image.box\";\n\nexport interface LogoBoxProps {\n isNavigation?: boolean,\n withAnalytics?: boolean,\n onClick?: React.MouseEventHandler\n}\n\nexport const LogoBox = observer(class LogoBox extends OrbitComponent<LogoBoxProps> {\n\n private _handleClick(e: React.MouseEvent) {\n\n if(this.props.withAnalytics) {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", \"Logo\");\n }\n\n if(this.props.onClick) {\n this.props.onClick(e);\n }\n\n this.services.location.goHome();\n }\n\n private _getLogoImageURL() {\n return this.services.configuration.data.generalSettings.logoURL;\n }\n\n private _getLogoAlt(): string {\n let configOverride = this.services.configuration.data.generalSettings.logoAltOverride;\n return configOverride ? configOverride : `${this.services.theme.themeName.forClient} logo`;\n }\n\n\n render(): React.ReactNode {\n return (\n <LogoContainerBox className=\"cy-logo-container\">\n <Link href={this.services.location.currentUri.origin}\n // href is for SEO purposes, not necessarily to be executed by a browser\n onClick={(e) => this._handleClick(e)}>\n <LogoImageBox src={this._getLogoImageURL()}\n isVip={this.services.user.isVip}\n alt={this._getLogoAlt()}\n width={39}\n height={30}\n className=\"logo cy-logo\"\n />\n </Link>\n </LogoContainerBox>\n );\n }\n});\n\n\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ProfilePictureBox = styledBox(\"ProfilePictureBox\");","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ProfileUserNameBox = styledBox(\"ProfileUserNameBox\");\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ProfilePictureImageBox = styledBox(\"ProfilePictureImageBox\");\n","import React from 'react';\nimport {OrbitComponentWithState} from \"../../base-components/orbit-component-with-state/orbit-component-with-state\";\nimport {Link} from \"../../raw-components/link/link\";\nimport {UserInfo} from '../../user-info/user-info.component';\nimport {observer} from \"mobx-react\";\nimport {CyClass} from '../../../../common/cy-classes';\nimport {ProfilePictureBox} from \"./boxes/profile-picture.box\";\nimport {ProfileUserNameBox} from \"./boxes/profile-user-name.box\";\nimport {ProfilePictureImageBox} from './boxes/profile-picture-image.box';\n\nexport interface ProfilePictureProps {\n marketingDl: string,\n}\n\nexport interface ProfilePictureState {\n avatarState: string,\n}\n\nconst avatarState = {\n regular: 'regular',\n hover: 'hover',\n pressed: 'pressed',\n};\n\nexport const ProfilePicture = observer(\n class ProfilePicture extends OrbitComponentWithState<ProfilePictureProps, ProfilePictureState> {\n state = {\n avatarState: 'regular',\n };\n\n render() {\n return (\n <ProfilePictureBox>\n <Link className={`${CyClass('cy-profile-picture')}`}\n onClick={this._openUserMenu}>\n <ProfilePictureImageBox src={this._getAvatarUrl()}\n alt={`${this.services.theme.themeName.forClient} player`}\n onMouseEnter={() => this._updateAvatarState(avatarState.hover)}\n onMouseLeave={() => this._updateAvatarState(avatarState.regular)}\n onMouseDown={() => this._updateAvatarState(avatarState.pressed)}\n onMouseUp={() => this._updateAvatarState(avatarState.regular)}\n />\n </Link>\n {this._renderUserName()}\n </ProfilePictureBox>\n )\n }\n\n private _getAvatarUrl() {\n const config = this.services.configuration.data.generalSettings.avatarUrl;\n return config.sideMenu[this.state.avatarState] || config.sideMenu[avatarState.regular]\n }\n\n private _updateAvatarState(newState: string) {\n this.setState({avatarState: newState || avatarState.regular});\n }\n\n private _renderUserName() {\n if (!this.services.user.isAuthorized)\n return null;\n\n return <ProfileUserNameBox>\n <UserInfo selectedUserInfo=\"firstName\" />\n </ProfileUserNameBox>;\n }\n\n private _openUserMenu = async () => {\n if (!this.services.user.isAuthorized) {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", 'Avatar_Login');\n await this.services.user.openLogin( {dl: this.props.marketingDl});\n return;\n }\n\n const userMenu = await this.services.userMenu;\n\n if (!userMenu.isOpen) {\n userMenu.openMenu();\n return;\n }\n\n if (userMenu.isRewardsInfo) {\n userMenu.closeMenu();\n userMenu.openMenu();\n } else {\n userMenu.closeMenu();\n }\n }\n }\n);\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ProfileMessagesDividerBox = styledBox(\"ProfileMessagesDividerBox\");\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ProfileButtonsBox = styledBox(\"ProfileButtonsBox\");\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ProfileCashierButtonBox = styledBox(\"ProfileCashierButtonBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const ProfileCashierAddButtonBox = styledBox(\"ProfileCashierAddButtonBox\")\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const ProfileWrapperBox = styledBox(\"ProfileWrapperBox\");\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {ProfilePicture} from \"./profile-picture/profile-picture.component\";\nimport {Button} from '../../basic-ui-components/button/base/button.component';\nimport {OmgIndicator} from \"../profile-box-messages-indicator/indicators/omg-indicator.component\";\nimport {FreePlayIndicatorComponent} from \"../profile-box-messages-indicator/indicators/freeplay-indicator.component\";\nimport {ProfileMessagesDividerBox} from \"./boxes/profile-messages-divider.box\";\nimport { BalanceValue } from '../balance-box/balance-value.component';\nimport {ProfileButtonsBox} from \"./boxes/profile-buttons.box\";\nimport {ProfileCashierButtonBox} from \"./boxes/profile-cashier-button/profile-cashier-button.box\";\nimport {ProfileCashierAddButtonBox} from \"./boxes/profile-cashier-button/profile-cashier-add-button/profile-cashier-add-button.box\";\nimport {ProfileWrapperBox} from \"./boxes/profile-wrapper.box\";\nimport {ProfileMessagesBox} from \"./boxes/profile-box-messages/profile-messages.box\"\nimport classNames from 'classnames';\nimport {CyClass} from '../../../common/cy-classes';\nimport {CHANNEL_ELEMENTS, CHANNEL_SOURCE} from \"../../../common/const/casinofied-analytics-consts\";\nimport {AreaType} from \"@sparkware/uc-sdk-core\";\n\nconst MARKETING_DL = '19520';\n\nexport const ProfileBox = observer(class ProfileBox extends OrbitComponent<{}> {\n\n render() {\n\n return (\n <ProfileWrapperBox className={classNames(CyClass('cy-profile-box'))}>\n <ProfilePicture marketingDl={MARKETING_DL} />\n <ProfileButtonsBox className=\"cy-profile-box-buttons\">\n {this._renderLogin()}\n {this._renderCashier()}\n </ProfileButtonsBox>\n {this._renderProfileBoxMessages()}\n </ProfileWrapperBox>\n );\n }\n\n private _renderProfileBoxMessages() {\n return (\n <ProfileMessagesBox className=\"cy-profile-box-messages\">\n <OmgIndicator />\n <ProfileMessagesDividerBox />\n <FreePlayIndicatorComponent />\n </ProfileMessagesBox>\n );\n }\n\n private _renderLogin() {\n\n if(this.services.user.isAuthorized) return null;\n\n return (\n <div className={CyClass('cy-profile-box-login-button')}>\n <Button\n preset=\"secondary\"\n sizeVariant=\"m\"\n margin=\"0 auto\"\n onClick={this._openLogin}\n >{this.services.translation.translate(\"Login\")}</Button>\n </div>\n );\n }\n\n private _renderCashier() {\n if (!this.services.user.isAuthorized) {\n return null;\n }\n\n const AddIcon = this.services.theme.currentTheme.icons.addIcon;\n return (\n <ProfileCashierButtonBox className={classNames(CyClass('cy-cashier-button'))} onClick={this._openCashier}>\n <BalanceValue className={classNames(CyClass('cy-balance-box-amount'))} />\n <ProfileCashierAddButtonBox>\n <AddIcon />\n </ProfileCashierAddButtonBox>\n </ProfileCashierButtonBox>\n );\n }\n\n private _openLogin = async () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", 'CTA_Login');\n await this.services.user.openLogin( {dl: MARKETING_DL});\n }\n\n private _openCashier = async () => {\n (await this.services.userMenu).closeMenu();\n\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", 'Open_Cashier');\n await this.services.cashier.openDeposit({\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.NavigationMenu,\n element: CHANNEL_ELEMENTS.plusButton\n }\n });\n\n }\n});\n","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {Link} from \"../../raw-components/link/link\";\nimport {Image} from \"../../raw-components/image/image\";\n\nexport const StoreButton = observer(class StoreButton extends OrbitComponent<{}> {\n render(): React.ReactNode {\n return (\n <div style={{textAlign: \"center\"}}>\n <Link href={this.services.configuration.data.sideMenu.store_button.appLink}\n preventDefaultOnClick={false}\n onClick={() => this._sendAnalytics()}>\n <Image src={this._getImageSource()} width={200} />\n </Link>\n </div>\n );\n }\n\n private _sendAnalytics() {\n if(this.services.device.os.isIOS) {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"App\", \"Open_AppStore\");\n } else {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"App\", \"Open_GooglePlay\");\n }\n }\n\n private _getImageSource(): string {\n\n if(this.services.device.os.isIOS) {\n return this.services.theme.currentTheme.assets.images.store.store_button_ios_svg.toString();\n } else if(this.services.device.os.isAndroid) {\n return this.services.theme.currentTheme.assets.images.store.store_button_android_png.toString();\n } else {\n return \"\";\n }\n }\n});\n","import styled from \"styled-components\";\n\nexport const MenuLinksGroupsContainerBox = styled.section`\n display: flex;\n flex-direction: column;\n`;\n","import styled from \"styled-components\";\n\nexport const SideMenuContainerBox = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n`;\n","import styled from \"styled-components\";\nimport {styledByTheme} from \"../../../themes/architecture/styled-by-theme\";\n\nexport const MobileMenuItemContainerDefaultBox = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n align-content: center;\n margin: 0rem 1.2rem;\n background-color: ${({theme}) => theme.colors.background};\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 0rem 1.6rem;\n }\n \n \n position: relative;\n margin-top: 1px;\n &:before {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n left: 0;\n width: 100%;\n\n box-sizing: content-box;\n height: 1px;\n background-color: ${({theme}) => theme.colors.backgroundDark};\n box-shadow: 0px 0.35px 0px 0px ${({theme}) => theme.colors.boxBorderContrast};\n margin-bottom: 1px;\n }\n\n &:first-child {\n margin-top: 0;\n &::before {\n display: none;\n }\n }\n\n`\n\nexport const MobileMenuItemContainerCasino777Box = styled(MobileMenuItemContainerDefaultBox)`\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n margin: 0 1rem;\n padding: 0 1rem;\n }\n &:before {\n display: none;\n }\n`;\n\nexport const MobileMenuItemContainerMrGreenBox = styled(MobileMenuItemContainerDefaultBox)`\n background-color: transparent;\n &:before {\n display: none;\n }\n`;\n\nexport const MobileMenuItemContainerBox = styledByTheme(MobileMenuItemContainerDefaultBox)\n .forCasino777(MobileMenuItemContainerCasino777Box)\n .forMrGreen(MobileMenuItemContainerMrGreenBox)\n .apply();","import styled from \"styled-components\";\nimport {styledByTheme} from \"../../../themes/architecture/styled-by-theme\";\n\nconst MobileMenuItemLinkDefaultBox = styled.div`\n display: flex;\n align-items: center;\n flex-grow: 1;\n padding: 1.5rem 0;\n ${({theme}) => theme.font.presets.regular}\n\n font-size: 1.5rem;\n font-weight: 400;\n line-height: 1;\n color: ${props => props.theme.colors.textLight};\n background-color: ${props => props.theme.colors.background};\n`;\n\nconst MobileMenuItemLinkCasino777Box = styled(MobileMenuItemLinkDefaultBox)`\n color: ${props => props.theme.colors.text};\n ${({theme}) => theme.font.presets.body}\n`;\n\nconst MobileMenuItemLinkCasinoMrGreenBox = styled(MobileMenuItemLinkDefaultBox)`\n background-color: transparent;\n`;\n\nexport const MobileMenuItemLinkBox = styledByTheme(MobileMenuItemLinkDefaultBox)\n .forCasino777(MobileMenuItemLinkCasino777Box)\n .forMrGreen(MobileMenuItemLinkCasinoMrGreenBox)\n .apply();\n","import React from \"react\";\nimport {MobileMenuItemContainerBox} from \"../boxes/mobile-menu-item-container.box\";\nimport {MobileMenuItemLinkBox} from \"../boxes/mobile-menu-item-link.box\";\nimport {AppIdentifiers, AreaType} from \"@sparkware/uc-sdk-core\";\nimport { GenericSideMenuItemIconBox } from \"../../side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-icon.box\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface MobileHelpCenterMenuItemComponentProps extends ComponentServicesPick<'sideMenu'> {\n \n}\n\nexport const ComponentBody: React.FC<MobileHelpCenterMenuItemComponentProps> = observer((props) => {\n const services = useServices();\n const _mobileHelpButtonHandler = async () => {\n services.analytics.sendOrbitUserFlowEvent(\"Navigation\",'Header', 'Help');\n if(services.configuration.servicesConfigs.AppLauncher.apps.CR_HELP_CENTER.enabled) {\n await props.sideMenu.closeMobileMenu();\n } else {\n (await services.userMenu).closeMenu();\n }\n\n await (await services.appLauncher).openHelpCenter({\n businessCorrelationID: services.tools.getGuid(),\n channel: {\n area: AreaType.HamburgerMenu,\n element: AppIdentifiers.CRHelpCenter,\n source: AppIdentifiers.CasinoClient\n }\n });\n }\n\n const _renderText = () => {\n if (services.configuration.servicesConfigs.AppLauncher.apps.CR_HELP_CENTER.enabled) {\n return services.translation.translate(\"HELP_CENTER\")\n } else {\n return services.translation.translate(\"HELP\")\n }\n }\n\n const HelpIcon = services.theme.currentTheme.icons.helpCenterIcon;\n return (\n <MobileMenuItemContainerBox className=\"cy-menu-item\">\n <GenericSideMenuItemIconBox>\n <HelpIcon size={2} />\n </GenericSideMenuItemIconBox>\n <MobileMenuItemLinkBox className=\"cy-help-mobile-link\" onClick={_mobileHelpButtonHandler}>\n {_renderText()}\n </MobileMenuItemLinkBox>\n </MobileMenuItemContainerBox>\n );\n});\n\nexport const MobileHelpCenterMenuItemComponent = withServices(ComponentBody, ['sideMenu']);","import styled from \"styled-components\";\n\nexport const MobileLangSwitcherMenuItemSelectedLangBox = styled.span`\n display: block;\n margin: 0 0 0 auto;\n ${({theme}) => theme.font.presets.regular};\n font-weight: 300;\n font-size: 1.6rem;\n line-height: 1;\n text-transform: uppercase;\n color: ${props => props.theme.colors.textActive};\n\n`","import styled from \"styled-components\";\nimport {MobileMenuItemContainerBox} from \"../../boxes/mobile-menu-item-container.box\";\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const MobileLangSwitcherContainerBox = styled(MobileMenuItemContainerBox)`\n &::after {\n content: \"\";\n background-image: url(\"${props => props.theme.assets.images.SpriteSheetPC1920_png.toString()}\");\n background-position: -780px -654px;\n background-repeat: no-repeat;\n width: 1.5rem;\n height: 1.5rem;\n margin: 0 1rem;\n ${CssRule.For.RTL.build()} & {\n transform: scaleX(-1);\n }\n }\n \n \n`","import styled from \"styled-components\";\nimport {MobileMenuItemLinkBox} from \"./mobile-menu-item-link.box\";\n\nexport const MobileLanguageMenuItemBox = styled(MobileMenuItemLinkBox)`\n padding-left: 4.4rem;\n`","import classNames from \"classnames\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport React from \"react\";\nimport {MobileLangSwitcherMenuItemSelectedLangBox} from \"./boxes/mobile-lang-switcher-menu-item-selected-lang.box\";\nimport {MobileLangSwitcherContainerBox} from \"./boxes/mobile-lang-switcher-container.box\";\nimport {MobileLanguageMenuItemBox} from \"../boxes/mobile-language-menu-item.box\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface MobileLangSwitcherMenuItemComponentProps extends ComponentServicesPick<'sideMenu'> {\n\n}\n\nconst ComponentBody: React.FC<MobileLangSwitcherMenuItemComponentProps> = observer((props) => {\n const services = useServices();\n return (\n <MobileLangSwitcherContainerBox className=\"cy-menu-item\" onClick={() => props.sideMenu.openMobileLanguageSwitcher()}>\n <MobileLanguageMenuItemBox className={CyClass('cy-lang-switch-label')}>\n {services.translation.translate(\"LANGUAGES\")}\n </MobileLanguageMenuItemBox>\n <MobileLangSwitcherMenuItemSelectedLangBox className={classNames(CyClass('cy-lang-switch-current-lang'))}>\n {services.language.currentLanguage}\n </MobileLangSwitcherMenuItemSelectedLangBox>\n </MobileLangSwitcherContainerBox>\n );\n})\n\nexport const MobileLangSwitcherMenuItemComponent = withServices(ComponentBody, ['sideMenu']);","import styled from \"styled-components\";\nimport {styledByTheme} from \"../../../themes/architecture/styled-by-theme\";\n\nconst SideMenuHorizontalLineDefaultBox = styled.div`\n width: 100%;\n height: 2px;\n margin-top: 2rem;\n margin-bottom: 3.8rem;\n padding: 0 1rem;\n background-color: ${props => props.theme.colors.horizontalLineBackgroundColor};\n background-image: ${props => props.theme.colors.horizontalLineBackgroundImage};\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow } {\n margin-bottom: 3rem;\n }\n \n`\n\n\nconst SideMenuHorizontalLineMrGreenBox = styled(SideMenuHorizontalLineDefaultBox)`\n margin-top: 0;\n`\n\nexport const SideMenuHorizontalLineBox = styledByTheme(SideMenuHorizontalLineDefaultBox)\n .forMrGreen(SideMenuHorizontalLineMrGreenBox)\n .apply();","import styled from \"styled-components\";\n\nexport const MobileMenuItemsContainerBox = styled.div`\n`;\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {Button} from '../../../../basic-ui-components/button/base/button.component';\n\nexport const StateSelectorButtonComponent = observer(class StateSelectorButtonComponent extends OrbitComponent {\n\n handleClick(){\n //this.services.analytics.sendAnalytics(\"Navigation\", \"Header\", \"State Selector\");\n this.services.stateOfResidenceIdentifier.displayStateSelectorPopup({\n forceDisplay: true\n });\n }\n\n render() {\n let icon;\n let currentState = this.services.stateOfResidenceIdentifier.getUserSelectedState();\n if (currentState) {\n icon = <this.services.theme.currentTheme.icons.twoCharsIcon text={currentState.toUpperCase()} sizeIsHeight/>\n } else {\n icon = <this.services.theme.currentTheme.icons.usaMapIcon style={{color: this.services.theme.currentTheme.colors.brandPrimary}}/>;\n }\n\n return (\n <Button\n className={\"cy-header-state-selector-button\"}\n preset=\"flatStroked\"\n onClick={this.handleClick.bind(this)}\n margin=\"0.4rem 0.4rem\"\n sizeVariant={this.services.device.isMobile ? \"xs\" : \"m\"}\n >\n {icon}\n </Button>\n );\n }\n});\n","import {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport React from \"react\";\nimport {MobileMenuItemContainerBox} from \"../boxes/mobile-menu-item-container.box\";\nimport {MobileMenuItemLinkBox} from \"../boxes/mobile-menu-item-link.box\";\nimport { GenericSideMenuItemIconBox } from \"../../side-menu-rework/side-menu-items/boxes/link/generic/generic-side-menu-item-icon.box\";\nimport {\n StateSelectorButtonComponent\n} from \"../../header/top-header-right/state-selector-button/state-selector-button.component\";\n\nexport class MobileStateSelectorMenuItemComponent extends OrbitComponent {\n\n private _openStateSelectorPopup = () => {\n this.services.stateOfResidenceIdentifier.displayStateSelectorPopup({\n forceDisplay: true\n });\n }\n\n render() {\n const LocationIcon = this.services.theme.currentTheme.icons.locationIcon;\n return (\n <MobileMenuItemContainerBox className=\"cy-menu-item\">\n <GenericSideMenuItemIconBox>\n <LocationIcon size={2} />\n </GenericSideMenuItemIconBox>\n <MobileMenuItemLinkBox className=\"cy-help-mobile-link\" onClick={this._openStateSelectorPopup}>\n {this.services.translation.translate(\"STATE_SELECTOR_MENU_ITEM\")}\n </MobileMenuItemLinkBox>\n <StateSelectorButtonComponent/>\n </MobileMenuItemContainerBox>\n );\n }\n}","import styled from \"styled-components\";\n\nexport const RelatedSitesWrapperBox = styled.div<{headerHeight?: number;}>`\n height: ${({headerHeight}) => headerHeight ? (headerHeight + \"px\") : \"auto\"};\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n border-bottom: 1px solid ${({theme}) => theme.colors.boxBorder};\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n height: auto;\n display: block;\n border-bottom: none;\n margin: 1rem 0;\n }\n`;\n","import styled from \"styled-components\";\n\nexport const RelatedSiteLinkBox = styled.div`\n padding: 0 1rem;\n color: ${({theme}) => theme.colors.text};\n &:hover {\n color: ${({theme}) => theme.colors.textHover};\n }\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n padding: 1rem 1.9rem;\n color: ${({theme}) => theme.colors.textLight};\n text-decoration: none;\n border-radius: 5px;\n font-size: 1.5rem;\n line-height: 1.5rem;\n ${({theme}) => theme.font.presets.regular};\n }\n`;\n\nexport const RelatedSiteLink = styled.a`\n display: flex;\n align-items: center;\n color: ${({theme}) => theme.colors.text};\n &:hover {\n color: ${({theme}) => theme.colors.textHover};\n }\n @media ${({theme}) => theme.mediaQuery.lAndBelow} {\n color: ${({theme}) => theme.colors.textLight};\n }\n`;\n","import React from 'react';\nimport {IHeaderRelatedSite} from \"../../../../services/configurations/config-data-sections/header.configuration\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {RelatedSiteLink, RelatedSiteLinkBox} from \"./boxes/related-site-link.box\";\nimport {Link} from \"../../../raw-components/link/link\";\n\ninterface RelatedSiteComponentProps {\n config: IHeaderRelatedSite;\n}\nexport const RelatedSiteComponent: React.FC<RelatedSiteComponentProps> = observer((props) => {\n const services = useServices();\n const url = services.linksNavigation.getLinkUrl(props.config.linkId)\n const Icon = services.theme.currentTheme.icons.openExternal;\n return (\n <RelatedSiteLinkBox key={props.config.linkId}>\n <Link\n href={url}\n box={RelatedSiteLink}\n onClick={async () => {\n await services.linksNavigation.navigateLink({\n linkId: props.config.linkId\n });\n }}\n >\n {services.mediaQuery.lAndBelow ? <Icon size={2} style={{margin: \"0 2rem 0 0\"}} /> : null}\n {props.config.text}\n </Link>\n </RelatedSiteLinkBox>\n );\n});","import React from 'react';\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {RelatedSitesWrapperBox} from \"./boxes/related-sites-wrapper.box\";\nimport {RelatedSiteComponent} from \"./related-site.component\";\n\ninterface RelatedSiteComponentProps {\n headerHeight?: number;\n}\n\nexport const RelatedSitesComponent: React.FC<RelatedSiteComponentProps> = observer((props) => {\n const services = useServices();\n let relatedSites = services.configuration.data.header.related_sites;\n if (Check.isEmpty(relatedSites)) {\n return null;\n }\n\n return (\n <RelatedSitesWrapperBox headerHeight={props.headerHeight}>\n {relatedSites.map((relatedSiteConfig) => <RelatedSiteComponent key={relatedSiteConfig.linkId} config={relatedSiteConfig}/>)}\n </RelatedSitesWrapperBox>\n );\n});","import styled from \"styled-components\";\n\nexport const CrossBrandsItemsAboveSearchBox = styled.div<{totalItems: number}>`\n display: grid;\n grid-template-columns: repeat(${({totalItems}) => totalItems}, 1fr);\n grid-column-gap: 1.5rem;\n column-gap: 1.5rem;\n margin: 1rem 0 0;\n`;","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {observer} from \"mobx-react\";\nimport {CrossBrandsItemsAboveSearchBox} from \"./boxes/cross-brands-items-above-search.box\";\nimport {CyClass} from '../../../../common/cy-classes';\nimport {MenuItemKey} from \"../../../services/configurations/config-data-sections/generated-config-const\";\nimport classNames from \"classnames\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\nexport interface SideMenuItemsAboveSearchProps extends ComponentServicesPick<'sideMenu'>{\n menuItemKeys: MenuItemKey[];\n className?: string;\n}\n\n@observer\nclass ComponentBody extends OrbitComponent<SideMenuItemsAboveSearchProps> {\n \n private menuItemKeyIsCrossBrand(k: MenuItemKey): k is \"sportCrossBrandMenuItem\" | \"pokerCrossBrandMenuItem\" {\n return k === \"sportCrossBrandMenuItem\" || k === \"pokerCrossBrandMenuItem\";\n }\n\n render() {\n const menuItems = this.props.menuItemKeys.filter(k => {\n return this.menuItemKeyIsCrossBrand(k);\n }).map(key => this.props.sideMenu.getCrossBrandAboveSearchItemRenderer(key))\n .filter(menuItem => menuItem.display);\n\n if (menuItems.length === 0) {\n return null;\n }\n\n return (\n <CrossBrandsItemsAboveSearchBox className={classNames(CyClass('cy-menu-links-group'), CyClass('cy-menu-links-cross-brands-group'))} totalItems={menuItems.length}>\n {\n menuItems.map(menuItem => (\n <React.Fragment key={menuItem.key}>\n {menuItem.renderMenuItem()}\n </React.Fragment>)\n )\n }\n </CrossBrandsItemsAboveSearchBox>\n )\n }\n}\n\nexport const CrossBrandsItemsAboveSearch = withServices(ComponentBody, ['sideMenu'])","import React from \"react\";\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from \"mobx-react\";\nimport {SideMenuItemsListBox} from \"../side-menu-rework/side-menu-items/boxes/side-menu-items-list.box\";\nimport {SideMenuLinksGroup} from \"../side-menu-rework/side-menu-links-group/side-menu-links-group.component\";\nimport {GameSearchComponent} from \"../game-search/game-search.component\";\nimport {StoreButton} from \"./store-button/store-button.component\";\nimport {InsideOrbitMenuContainerComponent} from \"../inside-orbit-menu-container/inside-orbit-menu-container.component\";\nimport {isInsideAutomation} from '../../../utils/automation-helpers';\nimport {MenuLinksGroupsContainerBox} from \"./boxes/menu-links-groups-container.box\";\nimport {SideMenuContainerBox} from \"./boxes/side-menu-container.box\";\nimport {CyClass} from '../../../common/cy-classes';\nimport {MobileHelpCenterMenuItemComponent} from \"./mobile-help-menu-item/mobile-help-center-menu-item.component\";\nimport {\n MobileLangSwitcherMenuItemComponent\n} from \"./mobile-lang-switcher-menu-item/mobile-lang-switcher-menu-item.component\";\nimport {SideMenuHorizontalLineBox} from \"./horizontal-ruler/side-menu-horizontal-line.box\";\nimport {MobileMenuItemsContainerBox} from \"./boxes/mobile-menu-items-container.box\";\nimport {\n MobileStateSelectorMenuItemComponent\n} from \"./mobile-state-selector-menu-item/mobile-state-selector-menu-item.component\";\nimport {RelatedSitesComponent} from \"../main-nav/boxes/related-sites/related-sites.component\";\nimport {MenuItemKey} from \"../../services/configurations/config-data-sections/generated-config-const\";\nimport {CrossBrandsItemsAboveSearch} from \"../side-menu-rework/side-menu-above-search-group/cross-brands-items-above-search.component\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface SideMenuProps extends ComponentServicesPick<'gameSearch'> {\n\n}\n\nconst ComponentBody = observer(class extends OrbitComponent<SideMenuProps> {\n\n render() {\n const linkBlocks = this.services.configuration.data.sideMenu.menuLinksBlockOrder;\n const aboveSearchItems = this.services.configuration.data.sideMenu.crossBrandAboveSearch;\n\n return (\n <SideMenuContainerBox className=\"cy-side-menu\">\n { !Check.isEmpty(aboveSearchItems) ? \n <CrossBrandsItemsAboveSearch key={aboveSearchItems.join(',')} menuItemKeys={aboveSearchItems} />\n : null }\n {this.services.device.isMobile ? <GameSearchComponent className={CyClass('cy-menu-links-group')} /> : null}\n\n <MenuLinksGroupsContainerBox>\n {linkBlocks.map(keys => this._renderSideMenuSection(...keys))}\n\n {this._renderMobileMenuElements()}\n </MenuLinksGroupsContainerBox>\n </SideMenuContainerBox>\n );\n }\n\n /* Renders the QA button container for mobile only.Can't put it in header on mobile since it overlaps with 888logo on portrait mode */\n private _renderInsideOrbitMenuContainerMobile(): React.ReactNode {\n if (!this.services.device.isMobile) {\n return null;\n }\n if (isInsideAutomation()) {\n return null;\n }\n return <InsideOrbitMenuContainerComponent />\n\n }\n\n private _renderSideMenuSection(...keys: MenuItemKey[]): React.ReactNode {\n\n if (this.services.device.isMobile && this.props.gameSearch.isSearchBoxOpened) {\n return null;\n }\n\n return <SideMenuLinksGroup key={keys.join(',')} menuItemKeys={keys} />\n }\n\n private _renderMobileMenuElements(): React.ReactNode {\n if (!this.services.device.isMobile || this.props.gameSearch.isSearchBoxOpened) {\n return null;\n }\n\n return (\n <MobileMenuItemsContainerBox className=\"cy-menu-links-group\" >\n {this._renderBottomMenuSection()}\n {this._renderRelatedSitesLinks()}\n {this._renderInsideOrbitMenuContainerMobile()}\n {this._renderStoreButton()}\n </MobileMenuItemsContainerBox>\n );\n }\n\n private _renderMobileStateSelector = () => {\n if (!this.services.stateOfResidenceIdentifier.shouldDisplayStateSelectorButton()) {\n return null;\n }\n return <MobileStateSelectorMenuItemComponent />;\n }\n\n private _renderBottomMenuSection(): React.ReactNode {\n // Section which contains: language switcher, help menu, state selector.\n const shouldDisplayHelpLink = this.services.configuration.data.sideMenu?.helpLinkMobile?.display;\n const shouldDisplayLanguageSwitcher = !this.services.language.languageSwitcher.isEmpty;\n const shouldDisplayStateSelector = this.services.stateOfResidenceIdentifier.isOneSiteEnabled();\n\n if (!shouldDisplayHelpLink && !shouldDisplayLanguageSwitcher && !shouldDisplayStateSelector) {\n return null;\n }\n\n return (\n <SideMenuItemsListBox>\n {this._renderMobileHelp()}\n {this._renderMobileLangSwitcher()}\n {this._renderMobileStateSelector()}\n </SideMenuItemsListBox>\n )\n }\n\n\n private _renderMobileHelp(): React.ReactElement {\n if (this.services.configuration.data.sideMenu.helpLinkMobile?.display) {\n return (\n <MobileHelpCenterMenuItemComponent />\n );\n }\n return null;\n }\n\n private _renderMobileLangSwitcher(): React.ReactNode {\n if (this.services.language.languageSwitcher.isEmpty) {\n return null;\n }\n return (\n <MobileLangSwitcherMenuItemComponent />\n );\n }\n\n private _renderRelatedSitesLinks() {\n if (this.services.mediaQuery.lAndAbove) {\n return null;\n }\n\n return (\n <RelatedSitesComponent/>\n );\n }\n\n private _renderStoreButton(): React.ReactNode {\n if (!this.services.configuration.data.sideMenu.store_button.display) {\n return null;\n }\n\n return (\n <React.Fragment>\n <SideMenuHorizontalLineBox />\n <StoreButton />\n </React.Fragment>\n );\n }\n});\n\nexport const SideMenu = withServices(ComponentBody, ['gameSearch']);","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const LanguageSwitcherDropdownBox = styledBox(\"LanguageSwitcherDropdownBox\");\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.ul`\n width: 100%;\n margin: 0;\n padding: 0;\n list-style-type: none;\n`;\n\nconst PcBox = styled(DefaultBox)`\n display: flex;\n flex-wrap: wrap;\n`;\n\nconst MobileBox = styled(DefaultBox)`\n margin: 1rem 0;\n padding: 0.5rem 0;\n border-radius: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n`;\n\nexport const LanguageSwitcherListDefaultBox = styledByDevice(PcBox, MobileBox);\n\n","import {LanguageSwitcherListDefaultBox} from \"./language-switcher-section-list.default.box\";\n\nexport const LanguageSwitcherListBox = LanguageSwitcherListDefaultBox;\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.h4`\n margin: 0;\n font-size: 1.4rem;\n color: ${props => props.theme.colors.textLight};\n`;\n\nconst PcBox = styled(DefaultBox)`\n padding: 0.5rem 0;\n ${({theme}) => theme.font.presets.bold};\n`;\nconst MobileBox = styled(DefaultBox)`\n padding: 0;\n ${({theme}) => theme.font.presets.medium};\n`;\n\nexport const LanguageSwitcherTitleDefaultBox = styledByDevice(PcBox, MobileBox);\n","import {LanguageSwitcherTitleDefaultBox} from \"./language-switcher-section-title.default.box\";\n\nexport const LanguageSwitcherTitleBox = LanguageSwitcherTitleDefaultBox;\n","import styled from \"styled-components\";\nimport {styledByDevice} from \"../../../../../../themes/architecture/styled-by-device\";\n\nconst DefaultBox = styled.li`\n input[type=radio] {\n display: none;\n }\n`;\n\nconst PcBox = styled(DefaultBox)`\n width: 50%;\n margin: 0.2rem 0;\n`;\n\nconst MobileBox = styled(DefaultBox)`\n margin: 0 1rem;\n border-top: 1px solid ${props => props.theme.colors.boxBorderLight};\n border-bottom: 1px solid ${props => props.theme.colors.boxBorderDark};\n\n &:first-child {\n border-top: none;\n }\n\n &:last-child {\n border-bottom: none;\n }\n`;\n\n\nexport const LanguageSwitcherListItemDefaultBox = styledByDevice(PcBox, MobileBox);\n","import {LanguageSwitcherListItemDefaultBox} from \"./language-switcher-section-list-item.default.box\";\n\nexport const LanguageSwitcherListItemBox = LanguageSwitcherListItemDefaultBox;\n","import {styledBox} from \"../../../../../../../themes/architecture/styled-box\";\n\nexport const LanguageSwitcherItemLabelBox = styledBox(\"LanguageSwitcherItemLabelBox\");\n","import styled, {css} from \"styled-components\";\nimport {styledByDevice} from \"../../../../../../../themes/architecture/styled-by-device\";\n\nexport interface LanguageSwitcherItemCheckboxProps {\n isChecked: boolean;\n}\n\nconst DefaultBox = styled.div<LanguageSwitcherItemCheckboxProps>``;\n\nconst PcBox = styled(DefaultBox)`\n display: none;\n`;\n\nconst MobileBox = styled(DefaultBox)`\n width: 25px;\n height: 25px;\n margin: 0 1rem 0 0;\n background-color: ${props => props.theme.colors.background};\n border-radius: 50%;\n\n ${props => props.isChecked && css`\n background-image: url(${props => props.theme.assets.images.SpriteSheetPC1920_png.toString()});\n background-position: -394px -521px;\n `}\n`;\n\nexport const LanguageSwitcherItemCheckboxDefaultBox = styledByDevice(PcBox, MobileBox);\n","import {LanguageSwitcherItemCheckboxDefaultBox} from \"./language-switcher-item-checkbox.default.box\";\n\nexport const LanguageSwitcherItemCheckboxBox = LanguageSwitcherItemCheckboxDefaultBox;\n","import React from 'react';\nimport {Link} from '../../raw-components/link/link';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../../base-components/orbit-component/orbit-component';\nimport {ILanguageSwitcherItem} from '../../../services/language/language-switcher/language-switcher-item.interface';\nimport {LanguageSwitcherSection} from '../../../services/language/language-switcher/language-switcher-section';\nimport {LanguageSwitcherListBox} from \"./boxes/section-list/language-switcher-section-list.box\";\nimport {LanguageSwitcherTitleBox} from \"./boxes/section-title/language-switcher-section-title.box\";\nimport {LanguageSwitcherListItemBox} from \"./boxes/section-list/section-list-item/language-switcher-section-list-item.box\";\nimport {LanguageSwitcherItemLabelBox} from \"./boxes/section-list/section-list-item/section-list-item-label/language-switcher-item-label.box\";\nimport {LanguageSwitcherItemCheckboxBox} from \"./boxes/section-list/section-list-item/section-list-item-checkbox/language-switcher-item-checkbox.box\";\n\nexport interface LanguageMenuComponentProps {\n section: LanguageSwitcherSection;\n}\n\nexport const LanguageSwitcherSectionComponent = observer(\n class LanguageSwitcherSectionComponent extends OrbitComponent<LanguageMenuComponentProps> {\n\n private _selectItem = (item: ILanguageSwitcherItem) => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"Lang_Switcher\", item.title);\n\n item.makeCurrent();\n };\n\n private _renderOneItem(item: ILanguageSwitcherItem) {\n\n let htmlId = item.title.toLowerCase() + '-lang';\n return (\n <LanguageSwitcherListItemBox key={htmlId} onClick={() => this._selectItem(item)} className=\"cy-language-switcher-list\">\n <input type={'radio'} id={htmlId} name={'lang'}/>\n <LanguageSwitcherItemLabelBox isSelected={item.isCurrent} className=\"cy-language-switcher-item\">\n <LanguageSwitcherItemCheckboxBox isChecked={item.isCurrent} className=\"cy-language-item-checkbox\"/>\n {item.url ? <Link href={item.url}>{item.title}</Link>\n : <span>{item.title}</span>}\n </LanguageSwitcherItemLabelBox>\n </LanguageSwitcherListItemBox>\n );\n }\n\n render() {\n\n if(this.props.section.items.length === 0) {\n return null;\n }\n\n return (\n <>\n <LanguageSwitcherTitleBox>{this.props.section.title}</LanguageSwitcherTitleBox>\n <LanguageSwitcherListBox>\n {this.props.section.items.map(item => this._renderOneItem(item))}\n </LanguageSwitcherListBox>\n </>\n );\n }\n }\n);\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {LanguageSwitcherSection} from '../../services/language/language-switcher/language-switcher-section';\nimport {LanguageSwitcherDropdownBox} from \"./boxes/language-switcher-dropdown.box\";\nimport {LanguageSwitcherSectionComponent} from './language-switcher-section/language-switcher-section.component';\nimport {CyClass} from '../../../common/cy-classes';\nimport {DividerBox} from '../../basic-ui-components/layout/divider/divider.box';\n\nexport interface ILanguageSwitcherDropdownProps {\n isOpen: boolean;\n}\n\nexport const LanguageSwitcherDropdownComponent = observer(\n class LanguageSwitcherDropdownComponent extends OrbitComponent<ILanguageSwitcherDropdownProps> {\n\n private _renderSection(section: LanguageSwitcherSection) {\n\n if(section.items.length === 0) {\n return null;\n }\n\n return <LanguageSwitcherSectionComponent section={section}/>;\n }\n\n render() {\n\n let languageSwitcher = this.services.language.languageSwitcher;\n\n if (languageSwitcher.isEmpty) {\n return null;\n }\n\n return (\n <LanguageSwitcherDropdownBox isOpen={this.props.isOpen} className={CyClass('cy-language-switcher-dropdown')}>\n {this._renderSection(languageSwitcher.languagesSection)}\n {(this.services.mediaQuery.lAndAbove && languageSwitcher.languagesSection.items.length && languageSwitcher.countriesSection.items.length) ?\n <DividerBox marginTop='1rem' marginBottom='1rem' className=\"cy-language-switcher-separator\" />\n : null}\n {this._renderSection(languageSwitcher.countriesSection)}\n </LanguageSwitcherDropdownBox>\n );\n }\n }\n);\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const MainNavCanvasBox = styledBox(\"MainNavCanvasBox\");","import styled from \"styled-components\";\nimport {CssRule} from \"../../../themes/architecture/css-helpers/css-rule\";\nimport {DRAGGING, OPEN_MENU} from \"../../../themes/css-global-classes\";\n\nexport interface MainNavBoxProps {\n zIndex: number;\n}\n\nexport const MainNavBox = styled.div<MainNavBoxProps>`\n position: sticky;\n top: 0;\n display: flex;\n flex-direction: column;\n height: 100vh;\n margin: 0 auto 0 0;\n transition: transform 0.2s ease-in-out;\n z-index: ${props => props.zIndex};\n min-width: 23rem;\n\n @media ${({theme}) => theme.mediaQuery.lAndBelow } {\n height: 100%;\n position: fixed;\n top: 0;\n bottom: 0;\n transform: translateX(-100%);\n ${CssRule.For.RTL.build()} & {\n transform: translateX(100%);\n }\n\n &.${OPEN_MENU} {\n transform: translateX(0);\n /* We need to duplicate din rule for selector specificity */\n ${CssRule.For.RTL.build()} & {\n transform: translateX(0);\n }\n overflow: hidden;\n\n\n @media ${({theme}) => theme.mediaQuery.landscape} {\n padding-left: env(safe-area-inset-left);\n padding-right: env(safe-area-inset-right);\n }\n }\n\n\n &.${DRAGGING} {\n transition: none;\n }\n\n\n /*\n .cgp-landscape.cgp-ios & {\n &.open-menu {\n padding-left: env(safe-area-inset-left);\n }\n }\n\n .cgp-landscape.cgp-ios.cgp-rtl & {\n &.open-menu {\n padding-right: env(safe-area-inset-right);\n }\n }\n */\n}\n`","import styled from \"styled-components\";\n\nexport const MainNavContentWrapperBox = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n color: ${props => props.theme.colors.text};\n`","import styled from \"styled-components\";\n\nexport const MainNavMenuBox = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 0 1.5rem;\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n\n &::-webkit-scrollbar {\n width: 5px;\n }\n\n &::-webkit-scrollbar-track {\n background: rgba(255, 255, 255, 0.1);\n }\n\n &::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.5);\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.8);\n }\n`","import React, {useEffect, useRef} from \"react\";\nimport {observer} from \"mobx-react\";\nimport {LogoBox} from \"../user-menu/logo-box/logo-box.component\";\nimport {ProfileBox} from \"../profile-box/profile-box.component\";\nimport {SideMenu} from \"../side-menu/side-menu.component\";\nimport {ClockAndLastLoginBoxComponent} from \"../clock-and-last-login-box/clock-and-last-login-box.component\";\nimport {LanguageSwitcherDropdownComponent} from \"../language-switcher-dropdown/language-switcher-dropdown.component\";\nimport {CyClass} from '../../../common/cy-classes';\nimport {DRAGGING, OPEN_MENU} from \"../../themes/css-global-classes\";\nimport {MobileMenuHeaderBox} from \"./boxes/mobile/mobile-menu-header.box\";\nimport {MobileBackBox} from \"./boxes/mobile/back/mobile-back.box\";\nimport {MobileBackLabelBox} from \"./boxes/mobile/back/mobile-back-label.box\";\nimport { FlexGrowItemBox } from \"../../themes/architecture/css-helpers/flex\";\nimport {MainNavCanvasBox} from \"./boxes/main-nav-canvas/main-nav-canvas.box\";\nimport {MainNavBox} from \"./boxes/main-nav.box\";\nimport {MainNavContentWrapperBox} from \"./boxes/main-nav-content-wrapper.box\";\nimport {MainNavMenuBox} from \"./boxes/main-nav-menu.box\";\nimport classNames from \"classnames\";\nimport {RelatedSitesComponent} from \"./boxes/related-sites/related-sites.component\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {reaction} from \"mobx\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface MainNavProps extends ComponentServicesPick<'sideMenu' | 'gameSearch' | 'header'> {\n \n}\n\nconst ComponentBody: React.FC<MainNavProps> = observer((props) => {\n const services = useServices();\n const mainNavRef = useRef<HTMLDivElement>();\n const dragProperties = useRef({isDragging:false, initialPointerX:0, initialNavMenuTransform: 0});\n\n useEffect(() => {\n const r = reaction(() => props.gameSearch.isSearchBoxOpened,\n (isSearchBoxOpened) => {\n if (isSearchBoxOpened && mainNavRef.current) {\n mainNavRef.current.scrollTop = 0;\n }\n })\n return () => r();\n }, [props.gameSearch]);\n\n const _renderRelatedSitesLinks = () => {\n if (services.mediaQuery.lAndBelow) {\n return null;\n }\n\n return (\n <RelatedSitesComponent headerHeight={props.header.headerHeight}/>\n );\n }\n\n const _onLogoClick = async () => {\n (await services.userMenu).closeMenu();\n };\n\n const _renderLogo = () => {\n if (!services.device.isMobile) {\n return (\n <LogoBox\n onClick={_onLogoClick}\n isNavigation={true}\n withAnalytics={true}\n />\n );\n }\n }\n\n const _renderProfileBox = () => {\n if (!services.device.isMobile) {\n return <ProfileBox/>;\n }\n }\n\n const _hideMobileMenu = () => {\n services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", 'Close_Burger');\n props.gameSearch.closeSearchResult();\n props.sideMenu.closeMobileMenu();\n }\n \n const _renderMobileMenuHeader = () => {\n const BackIcon = services.theme.currentTheme.icons.backIcon;\n let backButtonHandler = () => _hideMobileMenu();\n let backButtonUseLabel = false;\n let backButtonCyClass = \"cy-close-mobile-menu-icon\";\n if (props.gameSearch.isSearchBoxOpened) {\n backButtonHandler = () => props.gameSearch.closeSearchResult();\n backButtonUseLabel = true;\n backButtonCyClass = \"cy-close-mobile-search-icon\";\n }\n if (props.sideMenu.isMobileLanguageSwitcher) {\n backButtonHandler = () => props.sideMenu.closeMobileLanguageSwitcher();\n backButtonUseLabel = true;\n backButtonCyClass = CyClass('cy-lang-switcher-back');\n }\n\n if (services.mediaQuery.lAndBelow) {\n return (\n <MobileMenuHeaderBox>\n <FlexGrowItemBox flexBasis=\"33%\">\n <MobileBackBox className={backButtonCyClass} onClick={backButtonHandler}>\n <BackIcon />\n { backButtonUseLabel ?\n <MobileBackLabelBox>{services.translation.translate(\"BACK\")}</MobileBackLabelBox>\n : null }\n </MobileBackBox>\n </FlexGrowItemBox>\n <FlexGrowItemBox flexBasis=\"33%\">\n <LogoBox onClick={() => _hideMobileMenu()}/>\n </FlexGrowItemBox>\n <FlexGrowItemBox flexBasis=\"33%\"/>\n </MobileMenuHeaderBox>\n );\n }\n\n return null;\n }\n\n const _onDrag = (e: React.TouchEvent<HTMLDivElement>) => {\n\n const isMobile = services.device.isMobile;\n\n if(isMobile && mainNavRef?.current) {\n const isRTL = services.language.isRTLLanguage;\n const pointerX = e.touches[0].clientX;\n\n if (!dragProperties.current.isDragging) {\n dragProperties.current.isDragging = true;\n dragProperties.current.initialNavMenuTransform = services.window.getElementHorizontalTranslationAmount(mainNavRef.current);\n dragProperties.current.initialPointerX = pointerX;\n\n //Prevent main nav from animate, we want it to move along with pointer without animation\n mainNavRef.current.classList.add(DRAGGING);\n }\n\n //min/max (depending on RTL direction) to prevent from dragging to the opposite direction\n const pointerXDelta = Math.abs(Math[(isRTL ? 'max' : 'min')](pointerX, dragProperties.current.initialPointerX) - dragProperties.current.initialPointerX) * (isRTL ? -1 : 1);\n\n mainNavRef.current.style.transform = `translateX(${dragProperties.current.initialNavMenuTransform - pointerXDelta}px)`;\n }\n }\n\n const _onStopDragging = () => {\n if(dragProperties.current.isDragging) {\n const isRTL = services.language.isRTLLanguage;\n\n const windowSize = isRTL ? services.window.innerWidth : 0;\n\n //Close after 1/4 of menu is outside viewport\n const minMainNavXToAutoClose = Math.round(mainNavRef.current.clientWidth * (1/4));\n const currentMainNavXPosition = Math.abs(windowSize - mainNavRef.current.getBoundingClientRect()[isRTL ? 'right' : 'left']);\n\n //Let the main nav animate again\n mainNavRef.current.classList.remove(DRAGGING);\n dragProperties.current.isDragging = false;\n\n // The main nav is in position where it should auto close\n if (currentMainNavXPosition > minMainNavXToAutoClose) {\n props.sideMenu.closeMobileMenu();\n }\n\n //Remove dragging X position to let it open or close by logic\n mainNavRef.current.style.removeProperty(\"transform\");\n }\n }\n\n\n const cssClasses = classNames(\"cy-main-nav\", {\n [OPEN_MENU]: props.sideMenu.isMobileMenuOpen\n });\n\n return (\n <MainNavBox className={cssClasses} ref={mainNavRef} onTouchMove={_onDrag.bind(this)} onTouchEnd={_onStopDragging.bind(this)} zIndex={props.sideMenu.zIndex}>\n <MainNavCanvasBox>\n {_renderMobileMenuHeader()}\n\n <MainNavContentWrapperBox>\n {_renderRelatedSitesLinks()}\n {_renderLogo()}\n <MainNavMenuBox>\n {_renderProfileBox()}\n <SideMenu />\n </MainNavMenuBox>\n {services.mediaQuery.lAndBelow ? null : <ClockAndLastLoginBoxComponent/>}\n <LanguageSwitcherDropdownComponent isOpen={props.sideMenu.isMobileLanguageSwitcher}/>\n </MainNavContentWrapperBox>\n </MainNavCanvasBox>\n </MainNavBox>\n );\n \n})\n\nexport const MainNav = withServices(ComponentBody, ['sideMenu', 'gameSearch', 'header']);","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {Button} from '../../../../basic-ui-components/button/base/button.component';\nimport {AppIdentifiers, AreaType} from \"@sparkware/uc-sdk-core\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\n\nexport const HelpButtonComponent: React.FC = observer(() => {\n const services = useServices();\n\n const handleClick = async () => {\n services.analytics.sendOrbitUserFlowEvent(\"Navigation\", \"Header\", \"Help\");\n await (await services.appLauncher).openHelpCenter({\n businessCorrelationID: services.tools.getGuid(),\n channel: {\n area: AreaType.PCHeader,\n element: AppIdentifiers.CRHelpCenter,\n source: AppIdentifiers.CasinoClient\n }\n });\n }\n\n return (\n <Button\n className={\"cy-header-help-button\"}\n preset=\"flatStroked\"\n icon={{Component: services.theme.currentTheme.icons.helpIcon}}\n onClick={handleClick}\n margin=\"0 0.4rem\"\n />\n );\n});\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const AppHeaderCrossBrandListBox = styledBox('AppHeaderCrossBrandListBox');\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {AppHeaderCrossBrandListBox} from \"./boxes/app-header-cross-brand-list/app-header-cross-brand-list.box\";\nimport {CyClass} from \"../../../../../common/cy-classes\";\nimport {IMenuItemRenderer} from '../../../../services/menu-items-common/renderer/menu-item.renderer.interface';\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface AppHeaderCrossBrandsComponentProps extends ComponentServicesPick<'header'> {\n\n}\n\nconst ComponentBody: React.FC<AppHeaderCrossBrandsComponentProps> = observer((props) => {\n const _renderCrossBrandLinks = (sites: IMenuItemRenderer[]) => {\n return (\n <React.Fragment>\n {sites.map(menuItem => <React.Fragment key={menuItem.key}>\n {menuItem.renderMenuItem()}\n </React.Fragment>)}\n </React.Fragment>\n );\n }\n\n let crossBrandsMenuItems = props.header.getCrossBrandsMenuItems();\n if (crossBrandsMenuItems.length === 0) {\n return null;\n }\n return (\n <AppHeaderCrossBrandListBox className={CyClass('cy-cross-brand-list')}>\n {_renderCrossBrandLinks(crossBrandsMenuItems)}\n </AppHeaderCrossBrandListBox>\n );\n\n})\nexport const AppHeaderCrossBrandsComponent = withServices(ComponentBody, ['header']);","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const BurgerMenuContainerBox = styledBox('BurgerMenuContainerBox');\n","import React from 'react';\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {BurgerMenuContainerBox} from \"./boxes/container/burger-menu-container.box\";\nimport {ComponentServicesPick} from \"../../../../services/component-services-pick\";\nimport {observer} from \"mobx-react\";\nimport {useServices} from \"../../../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../../../react-hooks/with-services\";\n\ninterface MobileBurgerMenuComponentProps extends ComponentServicesPick<'sideMenu'>{\n \n}\n\nconst ComponentBody: React.FC<MobileBurgerMenuComponentProps> = observer((props) => {\n const services = useServices();\n const _clickHandler = () => {\n services.analytics.sendOrbitUserFlowEvent(\"Navigation\",\"NavBar\", \"Open_Burger\");\n props.sideMenu.openMobileMenu();\n };\n\n const _getIcon = () => {\n if (services.abTestingFeatureDataProvider.mobileHeaderSearchButton.isEnabled) {\n return services.theme.currentTheme.icons.mobileMenuNoSearchIcon;\n }\n return services.theme.currentTheme.icons.mobileMenuIcon;\n }\n\n const MobileMenuIcon = _getIcon();\n return (\n <BurgerMenuContainerBox onClick={_clickHandler}>\n <MobileMenuIcon className={`${CyClass('cy-burger-button')}`} size={1.8} sizeIsHeight />\n </BurgerMenuContainerBox>\n );\n\n})\n\nexport const MobileBurgerMenuComponent = withServices(ComponentBody, ['sideMenu']);\n","import styled from \"styled-components\";\n\nexport const HeaderLanguageSwitcherBox = styled.div`\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {OrbitComponentWithState} from '../../../base-components/orbit-component-with-state/orbit-component-with-state';\nimport {LanguageSwitcherDropdownComponent} from '../../../language-switcher-dropdown/language-switcher-dropdown.component';\nimport {HeaderLanguageSwitcherBox} from '../../boxes/language-switcher/header-language-switcher.box';\nimport { Button } from '../../../../basic-ui-components/button/base/button.component';\nimport {CyClass} from '../../../../../common/cy-classes';\nimport {SetTimeoutType} from \"../../../../../common/types/set-timeout-type\";\n\nexport interface LanguageSwitcherComponentProps {}\n\nexport interface LanguageSwitcherComponentState {\n readonly isOpen: boolean\n}\n\nexport const HeaderLanguageSwitcherComponent = observer(\n class HeaderLanguageSwitcherComponent extends OrbitComponentWithState<LanguageSwitcherComponentProps, LanguageSwitcherComponentState> {\n private _timer: SetTimeoutType;\n\n constructor(props: LanguageSwitcherComponentProps) {\n super(props);\n\n this.state = {\n isOpen: false\n }\n }\n\n private _toggleDropdown = () => {\n this._clearCollapseTimeout();\n this.setState({...this.state, isOpen: !this.state.isOpen});\n };\n\n private _colapseDropdown = () => {\n this.setState({...this.state, isOpen: false});\n };\n\n private _startCollapseTimeout = () => {\n this._timer = setTimeout(this._colapseDropdown, 300);\n };\n\n private _clearCollapseTimeout = () => {\n clearTimeout(this._timer);\n };\n\n render() {\n\n if(this.services.device.isMobile || this.services.language.languageSwitcher.isEmpty) {\n return null;\n }\n\n return (\n <HeaderLanguageSwitcherBox\n onMouseEnter={() => this._clearCollapseTimeout()}\n onMouseLeave={() => this._startCollapseTimeout()}\n >\n <Button\n preset=\"flatStroked\"\n icon={{Component: this.services.theme.currentTheme.icons.earthGlobeIcon, size: \"large\"}}\n active={this.state.isOpen}\n onClick={() => this._toggleDropdown()}\n margin=\"0 0.4rem\"\n className={CyClass(\"cy-language-switcher-button\")}\n />\n <LanguageSwitcherDropdownComponent isOpen={this.state.isOpen}/>\n </HeaderLanguageSwitcherBox>\n );\n }\n }\n);\n\n\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const DepositHeaderButtonBox = styledBox('DepositHeaderButtonBox');\n","import React from 'react';\nimport {OrbitComponent} from '../../../base-components/orbit-component/orbit-component';\nimport {DepositHeaderButtonBox} from './boxes/deposit-header-button.box';\nimport {AreaType} from '@sparkware/uc-sdk-core';\nimport {CHANNEL_SOURCE, CHANNEL_ELEMENTS} from '../../../../../common/const/casinofied-analytics-consts';\nimport {Image} from '../../../raw-components/image/image';\n\nexport class DepositHeaderButtonComponent extends OrbitComponent {\n private onClick = () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Header\", \"Click\", \"DepositButton\");\n\n this.services.cashier.openDeposit({\n channel: {\n source: CHANNEL_SOURCE.casinoClient,\n area: AreaType.UserArea,\n element: CHANNEL_ELEMENTS.depositButton\n }\n });\n };\n render() {\n return <DepositHeaderButtonBox onClick={this.onClick}>\n <Image src={this.services.theme.currentTheme.assets.images.deposit_header_icon_svg.toString()} />\n </DepositHeaderButtonBox>;\n }\n}","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const NavbarSeparatorBox = styledBox('NavbarSeparatorBox');\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const HeaderNavbarContainerBox = styledBox('HeaderNavbarContainerBox');","import styled from \"styled-components\";\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const HeaderNavbarLeftContainerDefaultBox = styled.div`\n display: flex;\n margin: 0 auto 0 0;\n align-items: center;\n ${CssRule.For.RTL.build()} & {\n margin: 0 0 0 auto;\n }\n`;\n","import {HeaderNavbarLeftContainerDefaultBox} from \"./header-navbar-left-container.default.box\";\n\nexport const HeaderNavbarLeftContainerBox = HeaderNavbarLeftContainerDefaultBox;\n","import styled from \"styled-components\";\nimport {CssRule} from \"../../../../themes/architecture/css-helpers/css-rule\";\n\nexport const HeaderNavbarRightContainerDefaultBox = styled.div`\n display: flex;\n margin: 0 0 0 auto;\n align-items: center;\n ${CssRule.For.RTL.build()} & {\n margin: 0 auto 0 0;\n }\n`;\n","import {HeaderNavbarRightContainerDefaultBox} from \"./header-navbar-right-container.default.box\";\n\nexport const HeaderNavbarRightContainerBox = HeaderNavbarRightContainerDefaultBox;\n","import {styledBox} from \"../../../../../../themes/architecture/styled-box\";\n\nexport const BurgerMenuWrapperBox = styledBox('BurgerMenuWrapperBox');\n","import React, { Fragment } from 'react';\nimport { LogoBox } from \"../user-menu/logo-box/logo-box.component\";\nimport { observer } from 'mobx-react';\nimport { Button } from '../../basic-ui-components/button/base/button.component';\nimport { OrbitComponent } from '../base-components/orbit-component/orbit-component';\nimport { GameSearchComponent } from '../game-search/game-search.component';\nimport { HeaderConfiguration } from '../../services/configurations/config-data-sections/header.configuration';\nimport { HelpButtonComponent } from './top-header-right/help-button/help-button.component';\nimport { AppHeaderCrossBrandsComponent } from './top-header-left/cross-brand/app-header-cross-brands.component';\nimport { RegulatoryDataComponent } from \"./top-header-left/regulatory-data/regulatory-data.component\";\nimport { MobileBurgerMenuComponent } from './top-header-left/mobile-burger-menu/mobile-burger-menu.component';\nimport { HeaderWelcomeButtonsComponent } from './welcome-buttons/header-welcome-buttons.component';\nimport { HeaderLanguageSwitcherComponent } from './top-header-right/language-switcher/header-language-switcher.component';\nimport { InsideOrbitMenuContainerComponent } from \"../inside-orbit-menu-container/inside-orbit-menu-container.component\";\nimport { DepositHeaderButtonComponent } from \"./top-header-right/deposit/deposit-header-button.component\";\nimport { NavbarSeparatorBox } from \"./boxes/navbar-separator/navbar-separator.box\";\nimport { HeaderNavbarContainerBox } from \"./boxes/header-navbar-container/header-navbar-container.box\";\nimport { HeaderNavbarLeftContainerBox } from \"./boxes/navbar-left-container/header-navbar-left-container.box\";\nimport { HeaderNavbarRightContainerBox } from \"./boxes/navbar-right-container/header-navbar-right-container.box\";\nimport { Image } from \"../raw-components/image/image\";\nimport { StateSelectorButtonComponent } from \"./top-header-right/state-selector-button/state-selector-button.component\";\nimport { AreaType, ControlCenterOpenSource } from '@sparkware/uc-sdk-core';\nimport { CHANNEL_ELEMENTS, CHANNEL_SOURCE } from '../../../common/const/casinofied-analytics-consts';\nimport { SearchIcon } from \"../../themes/defaults/icons/search.icon\";\nimport {\n TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON\n} from \"../../services/tooltip/on-boarding-tooltip/on-boarding-tooltip-target-selectors\";\nimport { ComponentServicesPick } from \"../../services/component-services-pick\";\nimport { withServices } from \"../../react-hooks/with-services\";\nimport { BurgerMenuWrapperBox } from './top-header-left/mobile-burger-menu/boxes/wrapper/burger-menu-wrapper.box';\n\ninterface HeaderComponentProps extends ComponentServicesPick<'header'> {\n\n}\n\n@observer\nexport class ComponentBody extends OrbitComponent<HeaderComponentProps> {\n\n private get _headerConfig(): HeaderConfiguration {\n return this.services.configuration.data.header;\n }\n\n private _captureHeaderRef = (element: HTMLElement | null) => {\n this.props.header.setHeaderElement(element || null);\n };\n\n private _renderInsideOrbitMenuContainerPC() {\n return <InsideOrbitMenuContainerComponent />;\n }\n\n private _renderDesktopSearchInput() {\n\n if (this._headerConfig?.header_buttons?.search?.display !== true) {\n return null;\n }\n\n return <GameSearchComponent />;\n }\n\n private _renderDesktopControlCenterButton() {\n\n if (!this.services.controlCenter.isEnabled) {\n return null;\n }\n\n return (\n <Button\n preset=\"flatStroked\"\n icon={{ Component: this.services.theme.currentTheme.icons.controlCenterIcon }}\n onClick={async () => {\n (await this.services.userMenu).closeMenu();\n await (await this.services.appLauncher).openControlCenterFull({\n businessCorrelationID: this.services.tools.getGuid(),\n channel: {\n area: AreaType.Header,\n element: CHANNEL_ELEMENTS.controlCenterHeaderButton,\n source: CHANNEL_SOURCE.casinoClient\n },\n appSpecificParameters: {\n source: ControlCenterOpenSource.Lobby\n }\n });\n }}\n margin=\"0 0.4rem\"\n tooltip={this.services.translation.translate('SAFE_GAMBLING_TOOLTIP')}\n className={TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON}\n />\n );\n }\n\n private _renderDesktopHelpButton() {\n if (this._headerConfig?.header_buttons?.help?.display !== true) {\n return null;\n }\n\n return <HelpButtonComponent />;\n }\n\n private _renderDesktopStateSelectorButton() {\n\n if (!this.services.stateOfResidenceIdentifier.shouldDisplayStateSelectorButton()) {\n return null;\n }\n\n return <StateSelectorButtonComponent />;\n }\n\n private _renderDesktopLanguageSwitcher() {\n if (this._headerConfig?.header_buttons?.languages?.display !== true || this.services.language.languageSwitcher.isEmpty) {\n return null;\n }\n\n return <HeaderLanguageSwitcherComponent />;\n }\n\n private _handleSearchClick = async () => {\n this.services.analytics.sendOrbitUserFlowEvent('Navigation', 'NavBar', 'Search_Open');\n await (await this.services.gameSearch).openSearchResult();\n }\n\n private _renderMobileSearchButton() {\n if (!this.services.abTestingFeatureDataProvider.mobileHeaderSearchButton.isEnabled) {\n return null;\n }\n\n return <>\n <NavbarSeparatorBox className=\"cy-navbar-separator\" />\n <div className={\"cy-mobile-header-search-button\"} onClick={this._handleSearchClick}>\n <SearchIcon />\n </div>\n </>\n }\n\n private _renderMobileNavbar() {\n // Do not wrap these 3 components (or a combination of 2) into a wrapper. This will break sticky positioning\n // RegulatoryDataComponent and HeaderNavbarContainerBox have sticky positioning while CrossBrandsComponent if it gets rendered has not\n // CrossBrandsComponent is used here only for MrGreen\n return (\n <>\n <RegulatoryDataComponent attachToHeaderService={true} />\n <AppHeaderCrossBrandsComponent />\n <HeaderNavbarContainerBox className=\"cy-navbar-container\"\n stickyOffset={this.props.header.headerRegulationHeight}\n ref={this._captureHeaderRef}\n useSafeAreaTop={false}>\n <HeaderNavbarLeftContainerBox className=\"cy-navbar-left-container\">\n <BurgerMenuWrapperBox>\n <MobileBurgerMenuComponent />\n </BurgerMenuWrapperBox>\n <NavbarSeparatorBox className=\"cy-navbar-separator\" />\n <LogoBox withAnalytics={true} />\n {this._renderMobileSearchButton()}\n </HeaderNavbarLeftContainerBox>\n <HeaderNavbarRightContainerBox className=\"cy-navbar-right-container\">\n {this._renderDeposit()}\n <HeaderWelcomeButtonsComponent />\n </HeaderNavbarRightContainerBox>\n </HeaderNavbarContainerBox>\n </>\n );\n }\n\n private _renderSecondLogo() {\n if (!this._headerConfig?.secondaryLogoUrl) {\n return null;\n }\n\n return (\n <Image src={this._headerConfig?.secondaryLogoUrl} />\n );\n }\n\n private _renderRelevantComponent(componentIDs: string[]) {\n let elements: Array<{ component: React.ReactElement | null; componentID: string }> = [];\n if (!componentIDs) {\n return null;\n }\n\n for (let index = 0; index < componentIDs.length; index++) {\n const currentComponentID = componentIDs[index];\n switch (currentComponentID) {\n case \"app-language-switcher\":\n elements.push({\n component: this._renderDesktopLanguageSwitcher(),\n componentID: currentComponentID\n });\n break;\n case \"app-help-button\":\n elements.push({\n component: this._renderDesktopHelpButton(),\n componentID: currentComponentID\n });\n break;\n case \"app-safezone\":\n elements.push({\n component: this._renderDesktopControlCenterButton(),\n componentID: currentComponentID\n });\n break;\n case \"state-selection-button\":\n elements.push({\n component: this._renderDesktopStateSelectorButton(),\n componentID: currentComponentID\n });\n break;\n case \"app-responsible-icons\":\n elements.push({\n component: this._renderResponsibleIcons(),\n componentID: currentComponentID\n });\n break;\n case \"app-secondLogo\":\n elements.push({\n component: this._renderSecondLogo(),\n componentID: currentComponentID\n });\n break;\n case \"search-box-form\":\n elements.push({\n component: this._renderDesktopSearchInput(),\n componentID: currentComponentID\n });\n break;\n case \"state-cross-brand\":\n elements.push({\n component: this._renderCrossBrand(),\n componentID: currentComponentID\n });\n break;\n }\n }\n\n elements = elements.filter(function (el) {\n return el.component != null;\n });\n\n if (elements.length === 0) {\n return null;\n }\n\n return (\n elements.map((element, index) => {\n return (\n <Fragment key={element.componentID}>\n {element.component}\n {index !== (elements.length - 1) && <NavbarSeparatorBox />}\n </Fragment>\n )\n })\n );\n }\n\n private _renderResponsibleIcons() {\n if (!this._headerConfig?.responsibleIcons?.display === true) {\n return null;\n }\n return <RegulatoryDataComponent attachToHeaderService={false} />;\n }\n\n private _renderDesktopLeftNavbar() {\n return (\n <HeaderNavbarLeftContainerBox className=\"cy-navbar-left-container\">\n {this._renderRelevantComponent(this._headerConfig?.top_header_left)}\n </HeaderNavbarLeftContainerBox>\n );\n }\n\n private _renderCrossBrand() {\n return <AppHeaderCrossBrandsComponent />;\n }\n\n private _renderDeposit() {\n if (!this.services.user.isAuthorized) {\n return null;\n }\n\n if (!this.services.mediaQuery.sAndBelow) {\n return null;\n }\n\n let depositHeaderButtonEnabledFromConfig = this._headerConfig?.header_buttons?.deposit === true;\n\n if (depositHeaderButtonEnabledFromConfig) {\n return <DepositHeaderButtonComponent />;\n }\n\n return null;\n }\n\n private _renderDesktopRightNavbar() {\n return (\n <HeaderNavbarRightContainerBox className=\"cy-navbar-right-container\">\n {this._renderInsideOrbitMenuContainerPC()}\n {this._renderRelevantComponent(this._headerConfig?.top_header_right)}\n\n <HeaderWelcomeButtonsComponent />\n </HeaderNavbarRightContainerBox>\n );\n }\n\n render() {\n setTimeout(() => {\n this.props.header.deactivateSkeleton();\n }, 1500);\n\n if (this.services.device.isMobile) {\n return this._renderMobileNavbar();\n }\n\n return (\n <HeaderNavbarContainerBox className=\"cy-navbar-container\"\n stickyOffset={0}\n ref={this._captureHeaderRef}\n useSafeAreaTop={true}>\n {this._renderDesktopLeftNavbar()}\n {this._renderDesktopRightNavbar()}\n </HeaderNavbarContainerBox>\n\n );\n }\n}\n\n\nexport const HeaderComponent = withServices(ComponentBody, ['header'], { renderSkeleton: () => null })","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const OverlayComponentBox = styledBox(\"OverlayComponentBox\");\n","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {OverlayComponentBox} from \"./boxes/overlay.component.box\";\nimport {CyClass} from '../../../common/cy-classes';\n\nexport const OverlayComponent = observer(class OverlayComponent extends OrbitComponent {\n\n private _onClickHandler = () => {\n this.services.overlay.closeOverlay();\n };\n\n render() {\n return <OverlayComponentBox\n className={CyClass('cy-overlay')}\n onClick={this._onClickHandler}\n show={this.services.overlay.isOpen}\n zIndex={this.services.overlay.zIndex}\n />;\n }\n});\n","import styled from 'styled-components';\n\ninterface ISpinnerLogoDefaultBoxProps {\n isRTL?: boolean;\n}\n\nexport const SpinnerLogoDefaultBox = styled.div<ISpinnerLogoDefaultBoxProps>`\n position: absolute;\n top: 50px;\n left: 50px;\n bottom: 0;\n right: 0;\n z-index: 5;\n background-image: url(\"${props => props.theme.assets.images.SpriteSheetPC1920_png.toString()}\");\n width: 80px;\n height: 80px;\n background-position: -823px -352px;\n`;","import styled from \"styled-components\";\nimport {SpinnerLogoDefaultBox} from \"./spinner-logo.default.box\";\n\nexport const SpinnerLogoCasino777Box = styled(SpinnerLogoDefaultBox)`\n top: 0;\n left: 0;\n width: 250px;\n height: 215px;\n animation: LoadingAnimation 1s steps(3) infinite;\n background-position: -1103px -452px;\n\n @keyframes LoadingAnimation {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(${({isRTL}) => isRTL ? '-72%' : '72%'});\n }\n }\n`;\n","import styled from \"styled-components\";\nimport {SpinnerLogoDefaultBox} from \"./spinner-logo.default.box\";\n\nexport const SpinnerLogoCIPBox = styled(SpinnerLogoDefaultBox)`\n background-position: -915px -352px;\n`;\n","import styled from \"styled-components\";\nimport {SpinnerLogoDefaultBox} from \"./spinner-logo.default.box\";\n\nexport const SpinnerLogoWSOPBox = styled(SpinnerLogoDefaultBox)`\n top: 45px;\n left: 45px;\n width: 90px;\n height: 90px;\n background-position: -823px -348px;\n`;\n","import styled from \"styled-components\";\nimport {SpinnerLogoDefaultBox} from \"./spinner-logo.default.box\";\n\nexport const SpinnerLogoCISBox = styled(SpinnerLogoDefaultBox)`\n background-position: -915px -352px;\n`;\n","import {SpinnerLogoDefaultBox} from './spinner-logo.default.box';\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {SpinnerLogoCasino777Box} from \"./spinner-logo.casino777.box\";\nimport {SpinnerLogoCIPBox} from \"./spinner-logo.cip.box\";\nimport {SpinnerLogoWSOPBox} from \"./spinner-logo.wsop.box\";\nimport {SpinnerLogoCISBox} from \"./spinner-logo.cis.box\";\n\n//TODO: change accordingly when we have the spritesheet with 888sport spinner logo\nexport const SpinnerLogoBox = styledByTheme(SpinnerLogoDefaultBox)\n .forCasino777(SpinnerLogoCasino777Box)\n .forCip(SpinnerLogoCIPBox)\n .forWsopCip(SpinnerLogoWSOPBox)\n .forWsop(SpinnerLogoWSOPBox)\n .forCis(SpinnerLogoCISBox)\n .apply();","import styled from \"styled-components\";\n\nexport const SpinnerSubtextDefaultBox = styled.div`\n font-size: 2rem;\n position: relative;\n top: 200px;\n text-align: center;\n`;","import {SpinnerSubtextDefaultBox} from \"./spinner-subtext.default.box\";\n\nexport const SpinnerSubtextBox = SpinnerSubtextDefaultBox;","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {SpinnerBox} from \"./boxes/spinner/spinner.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport {SpinnerBrandBox} from \"./boxes/spinner-brand/spinner-brand.box\";\nimport {SpinnerBackgroundBox} from \"./boxes/spinner-background/spinner-background.box\";\nimport {SpinnerLogoBox} from \"./boxes/spinner-logo/spinner-logo.box\";\nimport {SpinnerSubtextBox} from \"./boxes/spinner-subtext/spinner-subtext.box\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport classNames from 'classnames';\n\ninterface SpinnerContentComponentProps {\n isMigrationSpinner: boolean;\n className?: string;\n}\n\nexport const SpinnerContentComponent: React.FC<SpinnerContentComponentProps> = observer((props) => {\n const services = useServices();\n\n const renderSubText = () => {\n if (props.isMigrationSpinner) {\n return (\n <SpinnerSubtextBox>{services.translation.translate('LOGGING_IN')}</SpinnerSubtextBox>\n );\n }\n return null;\n }\n\n return (\n <SpinnerBox isMigrationSpinner={props.isMigrationSpinner} className={classNames(props.className, CyClass('cy-spinner'))}>\n <SpinnerBrandBox className='cy-spinner-brand'>\n <SpinnerBackgroundBox className='cy-spinner-background'/>\n <SpinnerLogoBox className='cy-spinner-logo' isRTL={services.language.isRTLLanguage} />\n {renderSubText()}\n </SpinnerBrandBox>\n </SpinnerBox>\n );\n})","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {SpinnerContentComponent} from \"./spinner-content.component\";\n\n\n\n@observer\nexport class SpinnerComponent extends OrbitComponent {\n\n render() {\n\n if (!this.services.spinner.isSpinning) {\n return null;\n }\n\n return (\n <SpinnerContentComponent isMigrationSpinner={this.services.spinner.isTheMigrationSpinnerActive}/>\n )\n }\n}\n","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const BreadcrumbsBox = styledBox('BreadcrumbsBox');\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {useServices} from \"../../react-hooks/use-services.hook\";\nimport {withServices} from \"../../react-hooks/with-services\";\nimport {BreadcrumbsBox} from \"./boxes/breadcrumbs.box\";\n\ninterface BreadcrumbsComponentProps extends ComponentServicesPick<'siteMap' | 'cmsPages'>{\n \n}\n\nconst ComponentBody: React.FC<BreadcrumbsComponentProps> = observer((props) => {\n const services = useServices();\n if(!services.configuration.data.generalSettings.showBreadcrumbs\n || services.device.hybrid.isEmbedded\n || services.location.isHomePage\n || props.cmsPages.currentPage) {\n return null;\n }\n\n return (\n <BreadcrumbsBox itemScope={true} itemType={'http://schema.org/BreadcrumbList'}>\n {props.siteMap.breadcrumbs.map((bcrumb, index) => bcrumb.render(index + 1))}\n </BreadcrumbsBox>\n );\n});\n\nexport const BreadcrumbsComponent = withServices(ComponentBody, ['siteMap', 'cmsPages']);\n","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport {CmsBannerComponent} from '../cms-banner/cms-banner.component';\nimport {BreadcrumbsComponent} from \"../breadcrumbs/breadcrumbs.component\";\n\n\n\nexport const AppFooterComponent = observer(class AppFooterComponent extends OrbitComponent<{}> {\n render() {\n const footerConfiguration = this.services.configuration.data && this.services.configuration.data.footer;\n\n if(!footerConfiguration) {\n return null;\n }\n\n return (\n <>\n <BreadcrumbsComponent key={`BREAD_CRUMBS`}/>\n <CmsBannerComponent componentID={footerConfiguration.componentID}\n templateID={footerConfiguration.templateID}\n fallbackUrl={this.services.theme.currentTheme.assets.fallbackCMSComponent.defaultFooter_html.toString()}\n showPlaceholder={false}/>\n </>\n );\n }\n});\n","import styled from \"styled-components\";\n\nexport interface RouterOutletBoxProps {\n minHeight: string;\n}\n\nexport const RouterOutletDefaultBox = styled.div<RouterOutletBoxProps>`\n background-color: ${props => props.theme.colors.background};\n min-height: ${props => props.minHeight};\n \n`","import styled from \"styled-components\";\nimport {RouterOutletDefaultBox} from \"./router-outlet.default.box\";\n\nexport const RouterOutletCasino777Box = styled(RouterOutletDefaultBox)`\n background: ${props => `linear-gradient(${props.theme.colors.brandPrimaryDark}, ${props.theme.colors.brandSecondary}, ${props.theme.colors.brandPrimaryDark})`};\n`","import styled from \"styled-components\";\nimport {RouterOutletDefaultBox} from \"./router-outlet.default.box\";\nimport {baseColors} from \"../../../themes/definitions/casino888/base-colors\";\n\nexport const RouterOutletCasino888Box = styled(RouterOutletDefaultBox)`\n background-color: ${baseColors.gray013};\n background-image: linear-gradient(180deg, #1A1A1A 74.08%, #282828 100%);\n background-attachment: fixed;\n`","import styled from \"styled-components\";\nimport {RouterOutletDefaultBox} from \"./router-outlet.default.box\";\nimport {baseColors} from \"../../../themes/definitions/harrahs/base-colors\";\n\nexport const RouterOutletHarrahsBox = styled(RouterOutletDefaultBox)`\n\n background-color: radial-gradient(ellipse at center, ${baseColors.base02Dark} 0%, ${baseColors.black} 100%);\n`","import styled from \"styled-components\";\nimport {RouterOutletDefaultBox} from \"./router-outlet.default.box\";\n\nexport const RouterOutletSIBox = styled(RouterOutletDefaultBox)`\n background-image: url(\"${props => props.theme.assets.images.texture_png.toString()}\");\n`","import {styledByTheme} from \"../../../themes/architecture/styled-by-theme\";\nimport {RouterOutletDefaultBox} from \"./router-outlet.default.box\";\nimport {RouterOutletCasino777Box} from \"./router-outlet.casino777.box\";\nimport {RouterOutletCasino888Box} from \"./router-outlet.casino888.box\";\nimport {RouterOutletHarrahsBox} from \"./router-outlet.harrahs.box\";\nimport {RouterOutletSIBox} from \"./router-outlet.si.box\";\n\n\nexport const RouterOutletBox = styledByTheme(RouterOutletDefaultBox)\n .forCasino888(RouterOutletCasino888Box)\n .forCasino777(RouterOutletCasino777Box)\n .forHarrahs(RouterOutletHarrahsBox)\n .forSI(RouterOutletSIBox)\n .apply();","import {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\nimport React from \"react\";\nimport {ThemeProvider} from \"styled-components\";\nimport {RouterOutletBox} from \"./boxes/router-outlet.box\";\n\nexport const RouterOutletComponent = observer(class RouterOutletComponent extends OrbitComponent<{}> {\n render() {\n if(this.services.miniOrbit.isEnabled) { // Bug 1865301: CGP - CIP8 - iOS - The page cannot be scrolled vertically (Merged PR 34037: Improve CLS)\n return this.services.routing.currentRoute?.render() || null;\n }\n\n return (\n <ThemeProvider theme={this.services.theme.mainContentTheme}>\n <RouterOutletBox minHeight={this.services.window.innerHeight + 'px'}>\n {this.services.routing.currentRoute?.render() || null}\n </RouterOutletBox>\n\n </ThemeProvider>\n )\n\n }\n});\n","import styled from 'styled-components';\n\nexport const FloatingBubblesContainerBox = styled.div`\n position: fixed;\n bottom: 30%;\n right: 16px;\n z-index: 10;\n \n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n right: 0px;\n }\n`;\n","import styled from 'styled-components';\n\nexport interface IFloatingBubbleBoxProps {\n isVisible: boolean;\n}\n\nexport const FloatingBubbleBox = styled.div<IFloatingBubbleBoxProps>`\n display: ${props => props.isVisible ? 'block' : 'none'};\n`;\n","import React from 'react';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {FloatingBubblesContainerBox} from './boxes/floating-bubbles-container.box';\nimport {FloatingBubbleBox} from './boxes/floating-bubble.box';\nimport {observer} from 'mobx-react';\n\nexport const FloatingBubblesComponent = observer(class FloatingBubblesComponent extends OrbitComponent {\n render() {\n const bubbles = this.services.floatingBubbles.bubbles;\n if(bubbles.length === 0) {\n return null;\n }\n\n return (<FloatingBubblesContainerBox className='cy-floating-bubbles'>\n {bubbles.map(bubble => <FloatingBubbleBox key={bubble.id} id={bubble.id} isVisible={bubble.isVisible} />)}\n </FloatingBubblesContainerBox>)\n }\n});","import {styledBox} from \"../../../themes/architecture/styled-box\";\n\nexport const MainWrapperBox = styledBox('MainWrapperBox');","import styled from \"styled-components\";\nimport {PointDefinition} from \"../../../../services/onboarding-tour/geometry.helper\";\n\nexport function radialGradientModel(radius: number, positionCoordinates: PointDefinition, opacity: number = 0) {\n return `radial-gradient(circle at ${positionCoordinates.x}px ${positionCoordinates.y}px, rgba(0, 0, 0, ${opacity}) ${radius}px, rgba(0, 0, 0, 1) ${radius}px)`;\n}\n\nexport interface IMaskCutoutProps {\n positionCoordinates: {\n x: number;\n y: number;\n };\n radius: number;\n opacity: number;\n zIndex: number;\n}\n\nexport const MaskCutoutBox = styled.div<IMaskCutoutProps>`\n z-index: ${({zIndex}) => zIndex};\n position: fixed;\n top: 0;\n height: 100%;\n width: 100%;\n right: 0;\n mask-image: ${(props) => radialGradientModel(props.radius, props.positionCoordinates, props.opacity)};\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const MaskFabricBox = styledBox(\"MaskFabricBox\");\n","import {PointDefinition, GeometryHelper, Segment} from \"./geometry.helper\";\n\n/**\n * You won't find this anywhere on the internet. The rotate function given to gradientTransform can get 3 parameters\n * First is the angle in degrees. Second and third define the point of rotation.\n * Values are 0 0 for top left, 0 1 for left bottom, 1 1 for right bottom, 1 0 for top right.\n * Default is 0 0. The center is 0.5 0.5.\n * Example, to rotate a gradient with 35 degrees around the center: gradientTransform=\"rotate(35 0.5 0.5)\"\n *\n * Otherwise you can define an already rotated gradient like on answer in this stackoverflow\n * but i think this only works for squares\n * https://stackoverflow.com/questions/9025678/how-to-get-a-rotated-linear-gradient-svg-for-use-as-a-background-image\n *\n * Other resources: https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Gradients\n */\nexport function gradientTransformRotateProp(startingPoint: PointDefinition, targetPoint: PointDefinition) {\n return `rotate(${gradientRotationAngle(startingPoint, targetPoint)} 0.5 0.5)`;\n}\nfunction gradientRotationAngle(startingPoint: PointDefinition, targetPoint: PointDefinition) {\n let angle = GeometryHelper.slopeToAngle(GeometryHelper.slope(startingPoint, targetPoint));\n if (startingPoint.x > targetPoint.x || (startingPoint.x === targetPoint.x && startingPoint.y > targetPoint.y)) {\n angle += 180;\n }\n return angle;\n}\nexport function computeSpotlightSVGPath(startingPoint: PointDefinition, targetPoint: PointDefinition, spotlightRadius: number) {\n let extendedSpotlightRadius = spotlightRadius + 6;\n // if the distance between the starting point and the target point is smaller than the spotlight diameter (spotlightradius x 2)\n // then we don't bother with the calculus, we just make a circle.\n // We keep this path as a default in case something breaks at computation.\n // This is how you draw a circle as a path\n // https://www.smashingmagazine.com/2019/03/svg-circle-decomposition-paths/\n // https://codepen.io/jakob-e/pen/bgBegJ\n let dPathProp = `M ${targetPoint.x - extendedSpotlightRadius} ${targetPoint.y} a ${extendedSpotlightRadius} ${extendedSpotlightRadius} 0 0 0 ${extendedSpotlightRadius * 2} 0 a ${extendedSpotlightRadius} ${extendedSpotlightRadius} 0 0 0 -${extendedSpotlightRadius * 2} 0 Z`;\n\n if (GeometryHelper.distanceBetweenPoints(startingPoint, targetPoint) > extendedSpotlightRadius * 1.2) {\n try {\n let OA = new Segment(startingPoint, targetPoint);\n // we need to determine the coordinates of point D, intersection of T1T2 and OA\n // square length of segment OD\n let quadExtendedSpotlightRadius = Math.pow(extendedSpotlightRadius, 2);\n // oa_od_ratio id the length of segment OD divided to the length of the segment OA\n let oa_od_ratio = quadExtendedSpotlightRadius / OA.quadLength;\n // using oa_od_ratio we get the distance from the axis OA (more specific the distance from D) where the tangents line touches the circle\n let dt_length = Math.sqrt(quadExtendedSpotlightRadius*(1 - oa_od_ratio));\n // also, using the same oa_od_ratio we compute the coordinates of point D\n let D = GeometryHelper.getPointInSegment(targetPoint, startingPoint, oa_od_ratio);\n // using the slope perpendicular to the axis of the spotlight, given a point on that axis (D) get the 2 points that are at a given distance\n let [T1, T2] = getThePointsAtGivenDistanceFromAReferencePointInTheDirectionOfASlope(D, dt_length, OA.slopePerpendicular);\n [T1, T2] = orderPoints(T1, T2, startingPoint, D);\n // the final shape should be: starting from the startingPoint draw a line to T1, then a arc of a circle to T2 (radius is spotlight)\n // then close the shape with a line back to the startingPoint\n dPathProp = `M ${startingPoint.x} ${startingPoint.y} L ${T1.x} ${T1.y} A ${extendedSpotlightRadius} ${extendedSpotlightRadius} 0 1 0 ${T2.x} ${T2.y} Z`;\n } catch (e) {\n throw e;\n }\n }\n // IMPORTANT: The syntax for an arc path is \"A rx ry x-axis-rotation large-arc-flag sweep-flag x y\"\n // or \"a rx ry x-axis-rotation large-arc-flag sweep-flag dx dy\" as explained here\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths#arcs\n // apparently the inner circle must have an opposite sweep-flag for the fill property to work correctly.\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule\n // fillRule=\"evenodd\" changes the behavior but for good measure I take the direction drawing into account\n dPathProp += ` M ${targetPoint.x - spotlightRadius} ${targetPoint.y} a ${spotlightRadius} ${spotlightRadius} 0 0 1 ${spotlightRadius * 2} 0 a ${spotlightRadius} ${spotlightRadius} 0 0 1 -${spotlightRadius * 2} 0 Z`\n\n return dPathProp;\n}\n\nfunction getThePointsAtGivenDistanceFromAReferencePointInTheDirectionOfASlope(reference: PointDefinition, distance: number, slope: number) {\n let C: PointDefinition = {x: 0, y: 0}, D: PointDefinition = {x: 0, y: 0};\n if (slope === Infinity) {\n C = {\n x: reference.x,\n y: reference.y - distance\n };\n D = {\n x: reference.x,\n y: reference.y + distance\n };\n return [C, D];\n }\n\n let temp1 = Math.sqrt(Math.pow(distance, 2)/(Math.pow(slope, 2) + 1));\n let Cx = reference.x - temp1;\n C = {\n x: Cx,\n y: (Cx - reference.x)*slope + reference.y\n };\n let Dx = reference.x + temp1;\n D = {\n x: Dx,\n y: (Dx - reference.x)*slope + reference.y\n };\n return [C, D];\n}\n\n/**\n * The points C and D where calculated and are at the same distance from the line OA.\n * One point is on a side of the line OA and the other on the other side.\n * We need to know which one is on the left of OA considering the direction of the OA line is from O towards A\n * The function returns [C, D] if C is on the left and D is on the right and [D, C] otherwise\n */\nfunction orderPoints(Cc: PointDefinition, Dd: PointDefinition, O: PointDefinition, A: PointDefinition) {\n let C = {x: Cc.x, y: Cc.y};\n let D = {x: Dd.x, y: Dd.y};\n if (A.x > O.x) {\n if (A.y > O.y) {\n // first point has x < A.x and y > A.y\n // the second point has x > A.x and y < A.y\n if (C.x < A.x && C.y > A.y && D.x > A.x && D.y < A.y) {\n return [C, D];\n }\n if (D.x < A.x && D.y > A.y && C.x > A.x && C.y < A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (1). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n } else if (A.y < O.y) {\n // first point has x > A.x and y > A.y\n // the second point has x < A.x and y < A.y\n if (C.x > A.x && C.y > A.y && D.x < A.x && D.y < A.y) {\n return [C, D];\n }\n if (D.x > A.x && D.y > A.y && C.x < A.x && C.y < A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (2). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n } else if (A.y === O.y) {\n // first point has y > A.y\n // the second point has y < A.y\n if (C.y > A.y && D.y < A.y) {\n return [C, D];\n }\n if (D.y > A.y && C.y < A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (7). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n }\n } else if (A.x < O.x) {\n if (A.y > O.y) {\n // first point has x < A.x and y < A.y\n // the second point has x > A.x and y > A.y\n if (C.x < A.x && C.y < A.y && D.x > A.x && D.y > A.y) {\n return [C, D];\n }\n if (D.x < A.x && D.y < A.y && C.x > A.x && C.y > A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (4). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n } else if (A.y < O.y) {\n // first point has x > A.x and y < A.y\n // the second point has x < A.x and y > A.y\n if (C.x > A.x && C.y < A.y && D.x < A.x && D.y > A.y) {\n return [C, D];\n }\n if (D.x > A.x && D.y < A.y && C.x < A.x && C.y > A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (3). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n } else if (A.y === O.y) {\n // first point has y < A.y\n // the second point has y > A.y\n if (C.y < A.y && D.y > A.y) {\n return [C, D];\n }\n if (D.y < A.y && C.y > A.y) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (8). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n }\n } else if (A.x === O.x) {\n if (A.y > O.y) {\n // first point has x < A.x\n // the second point has x > A.x\n if (C.x < A.x && D.x > A.x) {\n return [C, D];\n }\n if (D.x < A.x && C.x > A.x) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (5). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n } else if (A.y < O.y) {\n // first point has x > A.x\n // the second point has x < A.x\n if (C.x > A.x && D.x < A.x) {\n return [C, D];\n }\n if (D.x > A.x && C.x < A.x) {\n return [D, C];\n }\n throw Error(`Points provided are invalid (6). C: ${C.x}, ${C.y}. D: ${D.x}, ${D.y}. O: ${O.x}, ${O.y}. A: ${A.x}, ${A.y}.`);\n }\n }\n}\n","import styled from \"styled-components\";\n\nexport const SpotlightRaySvgBox = styled.svg<{zIndex: number;}>`\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: ${({zIndex}) => zIndex};\n pointer-events: none;\n`;\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const GradientStopSvgBox = styledBox(\"GradientStopSvgBox\");","import React from \"react\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {MaskCutoutBox, radialGradientModel} from \"./boxes/mask-cutout.box\";\nimport {MaskFabricBox} from \"./boxes/mask-fabric/mask-fabric.box\";\nimport {observer} from \"mobx-react\";\nimport {observable, runInAction, action, makeObservable} from \"mobx\";\nimport {PointDefinition, GeometryHelper, Circle, CircleDefinition} from \"../../../services/onboarding-tour/geometry.helper\";\nimport {computeSpotlightSVGPath, gradientTransformRotateProp} from \"../../../services/onboarding-tour/onboarding-spotlight.helper\";\nimport {SpotlightRaySvgBox} from \"./boxes/spotlight-svg.box\";\nimport {GradientStopSvgBox} from \"./boxes/gradient-stop-svg/gradient-stop-svg.box\";\n\nexport type ISpotlightTarget = CircleDefinition;\n\ninterface ISpotlightAnimationTarget extends ISpotlightTarget {\n opacity: number;\n}\n\ninterface IOnboardingSpotlightComponentProps {\n zIndex: number;\n originPoint: PointDefinition;\n target: ISpotlightTarget | undefined;\n show: boolean;\n}\n\n@observer\nexport class OnboardingSpotlightComponent extends OrbitComponent<IOnboardingSpotlightComponentProps> {\n private maskElement: HTMLElement | null = null;\n private svgPathElement: SVGPathElement | null = null;\n private svgGradientElement: SVGLinearGradientElement | null = null;\n\n /**\n * Current target means where the spotlight is oriented in the present, and the target from props where it should be heading.\n * The animation takes place in between currentTarget and props.target and at the end, currentTarget get the value of props.target\n * If both are the same, no animation is currently running\n */\n @observable\n private currentTarget: ISpotlightTarget | undefined = undefined;\n @observable\n private scrollDisabled = false;\n\n // spotlightHome is for the first time the spotlight appears and for when it disappears\n // it defines the target from where it appears and where it disappear to\n // todo: use memoization\n private spotlightHome(P: PointDefinition): ISpotlightAnimationTarget {\n return {\n center: {\n x: P.x,\n y: P.y - 5\n },\n radius: 3,\n opacity: 0\n }\n };\n\n private animationPromise: Promise<void> = Promise.resolve();\n\n constructor(props: IOnboardingSpotlightComponentProps) {\n super(props);\n makeObservable(this);\n }\n\n @action\n setCurrentTarget(t: ISpotlightTarget | undefined) {\n if (!t) {\n this.currentTarget = undefined;\n } else {\n let tt: ISpotlightTarget = new Circle({x: t.center.x, y: t.center.y}, t.radius);\n this.currentTarget = tt;\n }\n }\n\n componentDidMount() {\n this.services.dom.disableScrolling();\n runInAction(() => {\n this.scrollDisabled = true;\n });\n }\n\n componentDidUpdate(prevProps: Readonly<IOnboardingSpotlightComponentProps>, prevState: Readonly<{}>, snapshot?: any): void {\n if (prevProps.target !== this.props.target) {\n this.scheduleAnimation(this.props.target);\n }\n }\n\n componentWillUnmount() {\n this.services.dom.enableScrolling();\n }\n\n captureMaskElement = (e: HTMLElement | null) => {\n this.maskElement = e;\n };\n captureSvgPathElement = (e: SVGPathElement | null) => {\n this.svgPathElement = e;\n };\n captureSvgGradientElement = (e: SVGLinearGradientElement | null) => {\n this.svgGradientElement = e;\n };\n\n render() {\n if (!this.scrollDisabled) {\n return null;\n }\n let currentTarget = !this.currentTarget ? this.spotlightHome(this.props.originPoint) : { ...this.currentTarget, opacity: 1};\n let zIndex = this.props.zIndex;\n\n return (<>\n <MaskCutoutBox ref={this.captureMaskElement} positionCoordinates={currentTarget.center} radius={currentTarget.radius} opacity={1 - currentTarget.opacity} zIndex={zIndex}>\n <MaskFabricBox show={this.props.show}></MaskFabricBox>\n </MaskCutoutBox>\n <SpotlightRaySvgBox viewBox={`0 0 ${window.innerWidth} ${window.innerHeight}`} zIndex={zIndex+1}>\n <defs>\n <linearGradient ref={this.captureSvgGradientElement} id=\"grad1\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\" gradientTransform={gradientTransformRotateProp(this.props.originPoint, currentTarget.center)}>\n <GradientStopSvgBox offset=\"0%\" stopOpacity={0} />\n <GradientStopSvgBox offset=\"100%\" stopOpacity={1} />\n </linearGradient>\n </defs>\n <path\n ref={this.captureSvgPathElement} fill=\"url(#grad1)\" fillRule=\"evenodd\"\n style={{opacity: currentTarget.opacity}}\n d={computeSpotlightSVGPath(this.props.originPoint, currentTarget.center, currentTarget.radius)}\n />\n </SpotlightRaySvgBox>\n </>);\n }\n\n private scheduleAnimation = (t: ISpotlightTarget) => {\n this.animationPromise = this.animationPromise.then(() => {\n return this.animateToPoint(t);\n })\n }\n\n private animateToPoint(target: ISpotlightTarget | undefined) {\n if (!this.maskElement || !this.svgPathElement) {\n throw Error(\"No elements to animate\");\n }\n let currentTarget = !this.currentTarget ? this.spotlightHome(this.props.originPoint) : { ...this.currentTarget, opacity: 1};\n let nextTarget = target ? {...target, opacity: 1} : this.spotlightHome(this.props.originPoint);\n let animationPromise = animateFromAToB((ratio) => {\n let intermediatePoint = GeometryHelper.getPointInSegment(currentTarget.center, nextTarget.center, ratio);\n let intermediateOpacity = GeometryHelper.getIntermediateCoordinate(currentTarget.opacity, nextTarget.opacity, ratio);\n let intermediateRadius = GeometryHelper.getIntermediateCoordinate(currentTarget.radius, nextTarget.radius, ratio);\n return {\n center: intermediatePoint,\n radius: intermediateRadius,\n opacity: intermediateOpacity\n };\n }, (intermediate) => {\n this.maskElement.style.webkitMaskImage = radialGradientModel(intermediate.radius, intermediate.center, 1 - intermediate.opacity);\n this.maskElement.style.maskImage = radialGradientModel(intermediate.radius, intermediate.center, 1- intermediate.opacity);\n\n this.svgGradientElement.setAttribute(\"gradientTransform\", gradientTransformRotateProp(this.props.originPoint, intermediate.center));\n\n this.svgPathElement.setAttribute(\"d\", computeSpotlightSVGPath(this.props.originPoint, intermediate.center, intermediate.radius));\n this.svgPathElement.style.opacity = intermediate.opacity.toString();\n }).catch(() => {\n // the animation is a \"best-effort\". if it fails due to failing of intermediate point computations we ignore it ...\n return;\n }).finally(() => {\n // and set the target. That will rerender the component with the target\n this.setCurrentTarget(target);\n });\n return animationPromise;\n }\n\n}\n\n/**\n *\n * @param intermediateDataComputer a function given a ratio (number between 0 and 1) that will modify the parameters that need to be animated\n * @param duration number. A number representing miliseconds to know how much time has passed since the last repaint of the screen\n */\nfunction animateFromAToB(intermediateDataComputer: (ratio: number) => ISpotlightAnimationTarget, effectsCallback: (p: ISpotlightAnimationTarget) => void, duration: number = 300) {\n return new Promise<void>((resolve, reject) => {\n let animationDone = false;\n let startTimestamp: number | undefined;\n let previousTimestamp: number| undefined;\n let tween = (timestamp: number) => {\n if (startTimestamp === undefined) {\n startTimestamp = timestamp;\n }\n const elapsed = timestamp - startTimestamp;\n if (previousTimestamp !== timestamp) {\n const ratio = Math.min(elapsed / duration, 1);\n\n try {\n let intermediatePoint = intermediateDataComputer(ratio);\n effectsCallback(intermediatePoint);\n } catch (e) {\n startTimestamp = undefined;\n previousTimestamp = undefined;\n reject();\n }\n\n if (ratio === 1) {\n animationDone = true;\n }\n }\n previousTimestamp = timestamp;\n if (!animationDone) {\n window.requestAnimationFrame(tween);\n } else {\n startTimestamp = undefined;\n previousTimestamp = undefined;\n resolve();\n }\n }\n\n window.requestAnimationFrame(tween);\n });\n}","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const OnboardingDialogLogoBox = styledBox(\"OnboardingDialogLogoBox\");\n","import styled from \"styled-components\";\n\nexport const OnboardingDialogMainTextBox = styled.div`\n font-size: 2.6rem;\n line-height: 3rem;\n ${({theme}) => theme.font.presets.bold}\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n font-size: 2rem;\n line-height: 1.3;\n }\n`;\n","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const OnboardingDialogSecondaryTextBox = styledBox(\"OnboardingDialogSecondaryTextBox\")\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const OnboardingDialogNextBox = styledBox(\"OnboardingDialogNextBox\");\n","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const OnboardingDialogStepIndicatorBox = styledBox(\"OnboardingDialogStepIndicatorBox\");\n","import styled from \"styled-components\";\n\nexport const OnboardingDialogContentBox = styled.div`\n min-height: 15.4rem;\n max-height: 20%;\n @media ${({theme}) => theme.mediaQuery.mAndBelow} {\n min-height: 12.8rem;\n }\n`;","import styled from \"styled-components\";\n\nexport const OnboardingDialogCloseBox = styled.div`\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n cursor: pointer;\n`;","import {styledBox} from \"../../../../../themes/architecture/styled-box\";\n\nexport const OnboardingDialogBox = styledBox(\"OnboardingDialogBox\");\n","import {PropsWithChildren} from \"react\";\nimport {GeometryHelper, PointDefinition} from \"../../../services/onboarding-tour/geometry.helper\";\nimport {OrbitComponent} from \"../../base-components/orbit-component/orbit-component\";\nimport {OnboardingDialogLogoBox} from \"./boxes/onboarding-dialog-log/onboarding-dialog-logo.box\";\nimport {OnboardingDialogMainTextBox} from \"./boxes/onboarding-dialog-main-text.box\";\nimport {OnboardingDialogSecondaryTextBox} from \"./boxes/onboarding-dialog-secondary-text.box\";\nimport {FlexContainerBox, FlexGrowItemBox} from \"../../../themes/architecture/css-helpers/flex\";\nimport {OnboardingDialogNextBox} from \"./boxes/onboarding-dialog-next/onboarding-dialog-next.box\";\nimport {OnboardingDialogStepIndicatorBox} from \"./boxes/onboarding-dialog-step-indicator/onboarding-dialog-step-indicator.box\";\nimport {OnboardingDialogContentBox} from \"./boxes/onboarding-dialog-content.box\";\nimport {IOnboardingStep} from \"../../../services/onboarding-tour/onboarding-tour.service.interface\";\nimport {Image} from \"../../raw-components/image/image\";\nimport {DomEventSubscription} from \"../../../../utils/event-listener-registration\";\nimport {OnboardingDialogCloseBox} from \"./boxes/onboarding-dialog-close.box\";\nimport {imagePreload} from \"../../../../common/utils/image-preload\";\nimport {CyClass} from \"../../../../common/cy-classes\";\nimport {OnboardingDialogBox} from \"./boxes/onboarding-dialog/onboarding-dialog.box\";\n\ninterface IOnboardingDialogComponentProps {\n step: IOnboardingStep;\n stepIndex: number;\n stepsTotal: number;\n zIndex: number;\n closing?: boolean;\n show: boolean;\n onLogoCoordinatesUpdate(centerCoordinates: PointDefinition | undefined): void;\n onNext(): void;\n onDone(): void;\n onClose(): void;\n}\n\nexport class OnboardingDialogComponent extends OrbitComponent<PropsWithChildren<IOnboardingDialogComponentProps>> {\n private logoRef: HTMLElement | null = null;\n private resizeSubscription: DomEventSubscription | null = null;\n componentDidMount() {\n this.resizeSubscription = this.services.window.subscribeTo.resize(this.onLogoCoordinatesUpdate);\n this.services.analytics.sendOrbitUserFlowEvent(\"Onboarding\", \"Show\", (this.props.stepIndex + 1).toString());\n }\n\n componentDidUpdate(prevProps: IOnboardingDialogComponentProps) {\n if (this.props.stepIndex !== prevProps.stepIndex) {\n this.services.analytics.sendOrbitUserFlowEvent(\"Onboarding\", \"Show\", (this.props.stepIndex + 1).toString());\n }\n if (this.props.stepIndex + 1 === this.props.stepsTotal) {\n imagePreload(this.services.theme.currentTheme.assets.images.onboarding.onboarding_logo_closing_png.toString());\n }\n }\n\n componentWillUnmount(): void {\n this.resizeSubscription.dispose();\n }\n\n render() {\n const CloseIcon = this.services.theme.currentTheme.icons.closeIcon;\n const imgAssets = this.services.theme.currentTheme.assets.images.onboarding;\n\n const logoUrlString = this.props.closing ? imgAssets.onboarding_logo_closing_png.toString() : imgAssets.onboarding_logo_png.toString();\n return <OnboardingDialogBox className={CyClass('cy-onboarding-tour')} zIndex={this.props.zIndex} show={this.props.show} delay={this.props.show ? 300 : 0}>\n <OnboardingDialogContentBox>\n <OnboardingDialogLogoBox ref={this.onLogoRefCapture} zIndex={this.props.zIndex+2}>\n <Image src={logoUrlString} />\n </OnboardingDialogLogoBox>\n <OnboardingDialogCloseBox onClick={this.onClose}>\n <CloseIcon size={1.8} />\n </OnboardingDialogCloseBox>\n <OnboardingDialogMainTextBox>{this.services.translation.translate(this.props.step.mainText)}</OnboardingDialogMainTextBox>\n <OnboardingDialogSecondaryTextBox>{this.services.translation.translate(this.props.step.secondaryText)}</OnboardingDialogSecondaryTextBox>\n </OnboardingDialogContentBox>\n <FlexContainerBox alignItems=\"center\">\n {Array(this.props.stepsTotal).fill(this.props.stepIndex).map((sIdx, idx) => <OnboardingDialogStepIndicatorBox key={idx} activeStep={sIdx === idx} />)}\n <FlexGrowItemBox />\n {\n this.props.stepIndex === this.props.stepsTotal - 1 ?\n <OnboardingDialogNextBox onClick={this.onDone}>{this.services.translation.translate(\"DONE\")}</OnboardingDialogNextBox> :\n <OnboardingDialogNextBox onClick={this.props.onNext}>{this.services.translation.translate(\"NEXT\")}</OnboardingDialogNextBox>\n }\n </FlexContainerBox>\n {this.props.children}\n </OnboardingDialogBox>;\n }\n\n private onLogoRefCapture = (el: HTMLDivElement | null) => {\n this.logoRef = el;\n this.onLogoCoordinatesUpdate();\n };\n private onLogoCoordinatesUpdate = () => {\n if (this.logoRef) {\n // compute the center of the div coordinates\n let r = this.logoRef.getBoundingClientRect();\n let c = GeometryHelper.getCenterOfDOMRect(r);\n this.props.onLogoCoordinatesUpdate(c);\n } else {\n this.props.onLogoCoordinatesUpdate(undefined)\n }\n };\n private onClose = () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Onboarding\", \"Click_Close\", (this.props.stepIndex + 1).toString());\n this.props.onClose();\n }\n private onDone = () => {\n this.services.analytics.sendOrbitUserFlowEvent(\"Onboarding\", \"Click_Done\", (this.props.stepIndex + 1).toString());\n this.props.onDone()\n }\n}","import React from \"react\";\nimport { observer } from \"mobx-react\";\nimport {action, makeObservable, observable} from \"mobx\";\nimport { ThemeProvider } from \"styled-components\";\nimport { OrbitComponent } from \"../base-components/orbit-component/orbit-component\";\nimport {ISpotlightTarget, OnboardingSpotlightComponent} from \"../onboarding-tour/spotlight/onboarding-spotlight.component\";\nimport {OnboardingDialogComponent} from \"../onboarding-tour/dialog/onboarding-dialog.component\";\nimport {PointDefinition} from \"../../services/onboarding-tour/geometry.helper\";\n\n@observer\nexport class OnboardingTour extends OrbitComponent {\n private targetTimeout = null;\n @observable.ref\n private target: ISpotlightTarget | undefined = undefined;\n @observable.ref\n private spotlightOriginPoint: PointDefinition;\n /**\n * When `closing` is set to true it means the routine of closing the onboarding (animation of closing the spotlight, fade out animation, unmount) is in progress.\n */\n @observable.ref\n private closing = false;\n /**\n * `show` is needed because the fade in/out animations. At closing of the onboarding, we need to fade out (show=false) and after that we can unmount (services.onboardingTour.isOpened=false)\n */\n @observable.ref\n private show = true;\n\n constructor(props) {\n super(props);\n makeObservable(this);\n }\n\n @action\n private closeOnboarding = () => {\n // closing is set to true that means the mr green avatar picture is changed\n this.closing = true;\n // and the spotlight closes (the target is set to undefined)\n this.setTarget(undefined);\n setTimeout(() => {\n // after 400 ms fade out the dialog and overlay\n this.show = false;\n }, 400);\n setTimeout(() => {\n // after 800 ms we can unmount the onboarding (the fade out animation takes 300 ms)\n this.services.onboardingTour.close();\n this.closing = false;\n }, 800);\n }\n\n @action\n private setSpotlightOriginPoint(o: PointDefinition | undefined) {\n this.spotlightOriginPoint = o || {\n x: Math.round(window.innerWidth / 2),\n y: Math.round(window.innerHeight * (2/3))\n };\n }\n private onLogoCoordinatesUpdate = (c: PointDefinition | undefined) => {\n this.setSpotlightOriginPoint(c);\n };\n\n @action\n private nextStep = () => {\n // before calling services.onboardingTour.nextStep() i want to cleanup any target spotlight timeouts\n if (this.targetTimeout) {\n clearTimeout(this.targetTimeout);\n this.targetTimeout = null;\n }\n this.services.analytics.sendOrbitUserFlowEvent(\"Onboarding\", \"Click_Next\", (this.services.onboardingTour.stepIndex + 1).toString());\n // call next step and get the index\n let newStepIndex = this.services.onboardingTour.nextStep();\n // get the new step\n let step = this.services.onboardingTour.steps[newStepIndex];\n this.setTargetAndScheduleNextOfTheSameStep(step.targets, 0);\n };\n\n private setTargetAndScheduleNextOfTheSameStep(allTargets: ISpotlightTarget[], index: number) {\n if (allTargets.length > index && allTargets[index]) {\n this.setTarget(allTargets[index]);\n }\n if (allTargets.length > index + 1) {\n this.targetTimeout = setTimeout(() => {\n this.setTargetAndScheduleNextOfTheSameStep(allTargets, index+1);\n }, 400);\n }\n }\n\n @action\n private setTarget(t: ISpotlightTarget | undefined) {\n this.target = t;\n }\n\n render() {\n if (!this.services.onboardingTour.isOpened) {\n return null;\n }\n if (!this.services.onboardingTour.allClearToDisplayOnboarding) {\n return null;\n }\n let stepIndex = this.services.onboardingTour.stepIndex;\n let step = this.services.onboardingTour.steps[stepIndex];\n return (<ThemeProvider theme={this.services.theme.mainContentTheme}>\n <OnboardingSpotlightComponent zIndex={1000} originPoint={this.spotlightOriginPoint} target={this.target} show={this.show} />\n <OnboardingDialogComponent\n zIndex={1000}\n onLogoCoordinatesUpdate={this.onLogoCoordinatesUpdate}\n onNext={this.nextStep}\n onDone={this.closeOnboarding}\n onClose={this.closeOnboarding}\n step={step}\n stepIndex={stepIndex}\n stepsTotal={this.services.onboardingTour.steps.length}\n closing={this.closing}\n show={this.show}\n />\n </ThemeProvider>);\n }\n}","import React from 'react';\nimport {MainNav} from '../main-nav/main-nav.component';\nimport {observer} from \"mobx-react\";\nimport {UserMenu} from '../user-menu/user-menu.component';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {HeaderComponent} from '../header/header.component';\nimport {RightDrawerComponent} from '../drawer/drawer.component';\nimport {OverlayComponent} from '../overlay/overlay.component';\nimport {SpinnerComponent} from '../spinner/spinner.component';\nimport {AppFooterComponent} from '../app-footer/app-footer.component';\nimport {MainScreenComponent} from '../../basic-components/main-screen/main-screen.component';\nimport {RouterOutletComponent} from '../router-outlet/router-outlet.component';\nimport {BottomNavigationBarComponent} from '../bottom-navigation-bar/bottom-navigation-bar.component';\nimport {CyClass} from '../../../common/cy-classes';\nimport {FloatingBubblesComponent} from '../floating-bubbles/floating-bubbles.component';\nimport {MainWrapperBox} from \"./boxes/main-wrapper.box\";\nimport { OrbitSuspense } from '../base-components/orbit-suspense/orbit-suspense';\nimport { QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE } from '../../services/qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.service.constants';\nimport {OnboardingTour} from '../onboarding-tour/onboarding-tour.component';\n\nconst QAEnvironmentPopUpBlocker = React.lazy(\n () => import(\"../qa-environment-pop-up-blocker/qa-environment-pop-up-blocker.component\").then(({QAEnvironmentPopUpBlocker}) => ({default: QAEnvironmentPopUpBlocker}))\n );\n\nexport const ContainerComponent = observer(class ContainerComponent extends OrbitComponent<{}> {\n\n componentDidMount() {\n try {\n this._showQAEnvironmentPopUpBlocker();\n } catch (error) {\n console.error(error);\n }\n }\n\n private _showQAEnvironmentPopUpBlocker() {\n if (this.services.configuration.servicesConfigs.QAEnvironmentPopUp.enabled) {\n const qaEnvironmentPopUpBlockerCookie = this.services.cookies.getCookie(QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE);\n const queryParams = new URLSearchParams(this.services.window.location.search);\n\n if (!qaEnvironmentPopUpBlockerCookie && queryParams.get(\"shouldIgnoreQApopup\" ) !== 'true') {\n this.services.dialog.showModal((dialogHandler) =>\n <OrbitSuspense>\n <QAEnvironmentPopUpBlocker\n dialogHandler={dialogHandler}\n />\n </OrbitSuspense>,\n {\n title: 'QA Environment',\n shouldBeClosedOnlyByUser: true,\n hideCloseButton: true,\n isHighPriority: true\n })\n }\n }\n }\n\n private _renderRightDrawer() {\n // The key=\"right-drawer\" is very important here because this will prevent react from completely destroy this drawer DOM element when the app is rerendered\n // We need his behavior for apps that supports minimization like the proactive chat.\n // When the user resize the window and apps goes from PC to Mobile view then the entire app is rerender and if we don't put the key attribute the drawer div is removed and another one is created so we loose the chat minimization state.\n return <RightDrawerComponent key=\"right-drawer\" className={CyClass('cy-right-drawer')}/>\n }\n\n private _renderFullOrbitMobileLayout() {\n return (\n <>\n <SpinnerComponent/>\n <OverlayComponent/>\n <MainNav/>\n\n <MainWrapperBox className={'cy-main-wrapper'}>\n <HeaderComponent/>\n\n <MainScreenComponent>\n <RouterOutletComponent/>\n <AppFooterComponent/>\n </MainScreenComponent>\n\n <UserMenu/>\n <BottomNavigationBarComponent/>\n </MainWrapperBox>\n <FloatingBubblesComponent/>\n\n {this._renderRightDrawer()}\n <OnboardingTour />\n </>\n );\n }\n\n private _renderFullOrbitPcLayout() {\n return (<>\n <SpinnerComponent/>\n <OverlayComponent/>\n <MainNav/>\n\n <MainWrapperBox className={'cy-main-wrapper'}>\n <UserMenu/>\n <HeaderComponent/>\n <MainScreenComponent>\n <FloatingBubblesComponent/>\n <RouterOutletComponent/>\n <AppFooterComponent/>\n </MainScreenComponent>\n </MainWrapperBox>\n {this._renderRightDrawer()}\n <BottomNavigationBarComponent/>\n <OnboardingTour />\n </>);\n }\n\n\n private _renderFullOrbit() {\n\n if (this.services.device.isMobile) {\n return this._renderFullOrbitMobileLayout();\n } else {\n return this._renderFullOrbitPcLayout();\n }\n }\n\n private _renderMiniOrbit() {\n return (\n <>\n <OverlayComponent/>\n <MainWrapperBox className={'cy-main-wrapper'}>\n <RouterOutletComponent/>\n </MainWrapperBox>\n </>\n );\n }\n\n render() {\n if(this.services.miniOrbit.isEnabled) {\n return this._renderMiniOrbit();\n } else {\n return this._renderFullOrbit();\n }\n }\n});\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\n\nexport const ModalDialogsContainerComponent = observer(class ModalDialogsContainerComponent extends OrbitComponent {\n render() {\n const currentDialogs = this.services.dialog.currentDialogs.map(dialogComponent => ReactDOM.createPortal(dialogComponent, this.services.dom.body));\n if(currentDialogs.length === 0) {\n return null;\n }\n return (<>\n {currentDialogs}\n </>);\n }\n});","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {observer} from 'mobx-react';\n\nexport const OrbitComponentsRenderedInsideSdkContainer = observer(class OrbitComponentsRenderedInsideSdkContainer extends OrbitComponent {\n render() {\n const componentsPortals = this.services.orbitComponentInsideSdkProvider.currentRenderedComponents.map(item => ReactDOM.createPortal(item.component, item.element))\n if(componentsPortals.length === 0) {\n return null;\n }\n\n return (<>\n {componentsPortals}\n </>);\n }\n});","import { observer } from \"mobx-react\";\nimport React from \"react\";\nimport { OrbitComponent } from \"../base-components/orbit-component/orbit-component\";\nimport { BurnoutAnimationWrapper } from \"./burnout-animation/burnout-animation-wrapper.component\";\n\nexport const PlayerBurnoutLayerComponent = observer(class PlayerBurnoutLayerComponent extends OrbitComponent {\n render() {\n if (!this.services.burnoutService.renderAnimation) {\n return null;\n }\n return <BurnoutAnimationWrapper\n checkOmg={this.services.burnoutService.checkIfOmgDisplayed}\n showOmg={this.services.burnoutService.showOmg}\n onSafeUnmountNotice={this.services.burnoutService.onSafeUnmountNotice}\n />;\n }\n});\n","import styled from \"styled-components\";\n\nexport interface ITooltipArrowBoxProps {\n borderColor?: string;\n}\n\nexport const TooltipArrowDefaultBox = styled.div<ITooltipArrowBoxProps>`\n &, &:before {\n position: absolute;\n width: 12px;\n height: 12px;\n background: inherit;\n }\n\n visibility: hidden;\n \n &:before {\n visibility: visible;\n content: ''; \n transform: rotate(45deg);\n border-top: 1px solid ${({borderColor, theme}) => borderColor ? borderColor : theme.colors.boxBorderContrast};\n border-left: 1px solid ${({borderColor, theme}) => borderColor ? borderColor : theme.colors.boxBorderContrast};\n }\n`;","import styled from \"styled-components\";\nimport {TooltipArrowDefaultBox} from \"./tooltip-arrow.default\";\n\nexport const TooltipArrow777Box = styled(TooltipArrowDefaultBox)`\n &:before {\n border-top: 1px solid ${({borderColor}) => borderColor ? borderColor : 'gray'};\n border-left: 1px solid ${({borderColor}) => borderColor ? borderColor : 'gray'};\n } \n`;","import styled from \"styled-components\";\nimport {TooltipArrowDefaultBox} from \"./tooltip-arrow.default\";\n\nexport const TooltipArrowMrGreenBox = styled(TooltipArrowDefaultBox)`\n &:before {\n border-top: 1px solid ${({borderColor, theme}) => borderColor ? borderColor : theme.colors.brandPrimaryContrast};\n border-left: 1px solid ${({borderColor, theme}) => borderColor ? borderColor : theme.colors.brandPrimaryContrast};\n } \n`;","import {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport {TooltipArrowDefaultBox} from \"./tooltip-arrow.default\";\nimport {TooltipArrow777Box} from \"./tooltip-arrow.777\";\nimport {TooltipArrowMrGreenBox} from \"./tooltip-arrow.mrgreen.box\";\n\nexport const TooltipArrowBox = styledByTheme(TooltipArrowDefaultBox)\n .forCasino777(TooltipArrow777Box)\n .forMrGreen(TooltipArrowMrGreenBox)\n .apply();","import styled, { css } from \"styled-components\";\n\nexport const TooltipCloseButtonBox = styled.div<{invertColors?: boolean}>`\n\n position: absolute;\n right: 10px;\n top: 10px;\n\n width: 10px;\n height: 10px;\n \n cursor: pointer;\n \n background-image: url(\"${props => props.theme.assets.images.close_modal_dialog_png.toString()}\");\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center center; \n\n &:hover {\n opacity: 0.5;\n }\n\n \n ${({invertColors}) => invertColors? css`filter: invert(100%);` : ''}\n `;","import styled, {css} from \"styled-components\";\n\nexport interface ITooltipContainerBoxStylingProps {\n backgroundColor?: string;\n textColor?: string;\n borderColor?: string;\n hasGlow?: boolean;\n}\n\ninterface ITooltipContainerBoxProps extends ITooltipContainerBoxStylingProps {\n active: boolean;\n zIndex: number;\n animated: boolean;\n}\n\nfunction activate(isActive: boolean, isAnimated: boolean) {\n if(!isActive) {\n return css`display: none;`\n }\n\n if(isAnimated) {\n return css`animation: TooltipAppearAnimation 1s ease-in;`\n }\n\n return css`display: flex;`\n}\n\nexport const TooltipContainerDefaultBox = styled.div<ITooltipContainerBoxProps>`\n @keyframes TooltipAppearAnimation {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n \n display: flex;\n ${props => activate(props.active, props.animated)}\n \n min-width: 330px;\n min-height: 80px;\n \n align-items: center;\n\n z-index: ${props =>props.zIndex};\n \n background: ${({backgroundColor, theme}) => backgroundColor ? backgroundColor : theme.colors.background};\n color: ${({textColor, theme}) => textColor ? textColor : theme.colors.textLight};\n \n border-color: ${({borderColor, theme}) => borderColor ? borderColor : theme.colors.boxBorderContrast};\n border-width: 1px;\n border-style: solid;\n border-radius: 15px;\n\n ${({hasGlow}) => hasGlow ? css`box-shadow: 0 0 12px 1px ${props => props.theme.colors.brandPrimary};` : null}\n \n padding: 5px;\n \n //Arrow spacing configuration\n &[data-popper-placement^='top'] > #tool-tip-container-arrow {\n bottom: -7px;\n &:before { transform: rotate(225deg) };\n }\n \n &[data-popper-placement^='bottom'] > #tool-tip-container-arrow {\n top: -7px;\n &:before { transform: rotate(45deg) };\n }\n \n &[data-popper-placement^='left'] > #tool-tip-container-arrow {\n right: -7px; \n &:before { transform: rotate(135deg) }; //180 - 45\n }\n \n &[data-popper-placement^='right'] > #tool-tip-container-arrow {\n left: -7px; \n &:before { transform: rotate(315deg) }; //360 - 45\n }\n`;","import {TooltipContainerDefaultBox} from \"./tooltip-container.default\";\nimport {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\n\nexport const TooltipContainerBox = styledByTheme(TooltipContainerDefaultBox)\n .apply();","import styled, { css } from \"styled-components\";\n\nexport const TooltipGlowDefaultBox = styled.div<{bottom?: boolean}>`\n position: absolute;\n\n ${({bottom}) => bottom ? css`\n bottom: 0;\n right: 20px;\n background-position-y: 8px;\n ` : css`\n top: 0;\n left: 20px;\n background-position-y: -8px;\n `}\n\n width: 90px;\n height: 16px;\n\n background-image: ${props => `radial-gradient(closest-side at 50% 50%,${props.theme.colors.brandPrimary}C0 0%, ${props.theme.colors.brandPrimary}60 50%, ${props.theme.colors.brandPrimary}00 100%)`};\n background-repeat: no-repeat;\n`;\n","import styled from \"styled-components\";\nimport { TooltipGlowDefaultBox } from \"./tooltip-glow.default\";\n\n\nexport const TooltipGlow777Box = styled(TooltipGlowDefaultBox)`\n display: none;\n`;\n","import styled from \"styled-components\";\nimport { TooltipGlowDefaultBox } from \"./tooltip-glow.default\";\n\n\nexport const TooltipGlowMrGreenBox = styled(TooltipGlowDefaultBox)`\n display: none;\n`;\n","import {styledByTheme} from \"../../../../themes/architecture/styled-by-theme\";\nimport { TooltipGlow777Box } from \"./tooltip-glow.777\";\nimport { TooltipGlowDefaultBox } from \"./tooltip-glow.default\";\nimport {TooltipGlowMrGreenBox} from \"./tooltip-glow.mrgreen.box\";\n\nexport const TooltipGlowBox = styledByTheme(TooltipGlowDefaultBox)\n .forCasino777(TooltipGlow777Box)\n .forMrGreen(TooltipGlowMrGreenBox)\n .forMrGreenCip(TooltipGlowMrGreenBox)\n .forMrGreenCis(TooltipGlowMrGreenBox)\n .apply();","import styled from \"styled-components\";\n\nexport const TooltipContentBox = styled.div`\n padding: 10px;\n max-height: 640px;\n overflow-y: auto;\n `;","import styled from \"styled-components\";\n\nexport const ToolTipLightWeightContainerBox = styled.div<{zIndex: number}>`\n z-index: ${props => props.zIndex};\n`;","import React from 'react';\nimport {observer} from 'mobx-react';\nimport ReactDOM from \"react-dom\";\nimport {OrbitComponent} from '../base-components/orbit-component/orbit-component';\nimport {TooltipArrowBox} from \"./boxes/tooltip-arrow/tooltip-arrow.box\";\nimport {TooltipCloseButtonBox} from \"./boxes/tooltip-close-button.box\";\nimport {TooltipContainerBox} from \"./boxes/tooltip-container/tooltip-container.box\";\nimport {CyClass} from \"../../../common/cy-classes\";\nimport { TooltipGlowBox } from './boxes/tooltip-glow/tooltip-glow.box';\nimport { TooltipContentBox } from './boxes/tooltip-content.box';\nimport {ITooltipViewModel} from \"../../services/tooltip/tooltip-base/tooltip-view-model.interface\";\nimport {ITooltipsProvider} from \"../../services/tooltip/tooltips-provider.interface\";\nimport {ThemeProvider} from 'styled-components';\nimport {ToolTipLightWeightContainerBox} from \"./boxes/tooltip-container/tooltip-lightweight-container.box\";\n\ninterface ToolTipComponentProps {\n toolTip: ITooltipViewModel;\n}\n\nexport const ToolTipComponent = observer(class ToolTipComponent extends OrbitComponent<ToolTipComponentProps> {\n\n private _captureElementRef = (element: HTMLDivElement) => {\n if(element) {\n this.props.toolTip.onToolTipRendered(element);\n }\n }\n\n render() {\n const currentTooltip = this.props.toolTip;\n if(!currentTooltip.shouldDisplay()) {\n return null;\n }\n\n const content = currentTooltip?.render();\n\n // Some tooltips (the new explorer onboarding one, for example) have their own specific style and do not use the general one with glow/arrow etc\n //In this case, the content component is responsible with the styling.\n if (currentTooltip.hasOwnStyle) {\n return ReactDOM.createPortal(\n <ThemeProvider theme={this.services.theme.popupsTheme}>\n <ToolTipLightWeightContainerBox ref={this._captureElementRef} zIndex={currentTooltip?.zIndex || 0}>\n {content}\n </ToolTipLightWeightContainerBox>\n </ThemeProvider>\n , this.services.dom.body);\n }\n\n const hasGlow = Boolean(currentTooltip?.hasGlow);\n\n return ReactDOM.createPortal(\n <ThemeProvider theme={this.services.theme.popupsTheme}>\n <TooltipContainerBox\n className={CyClass('cy-tooltip-container')}\n ref={this._captureElementRef}\n zIndex={currentTooltip?.zIndex || 0}\n active={Boolean(currentTooltip)}\n animated={Boolean(currentTooltip?.animated)}\n hasGlow={hasGlow}\n {...currentTooltip?.styling}>\n\n {hasGlow && <TooltipGlowBox/>}\n\n {currentTooltip?.shouldShowCloseButton && <TooltipCloseButtonBox onClick={() => currentTooltip.closeTooltip()} invertColors={currentTooltip.invertCloseButtonColors}/>}\n\n <TooltipContentBox>\n {content}\n </TooltipContentBox>\n\n <TooltipArrowBox\n id=\"tool-tip-container-arrow\"\n data-popper-arrow=\"\"\n {...currentTooltip?.styling}\n />\n\n {hasGlow && <TooltipGlowBox bottom/>}\n\n </TooltipContainerBox>\n </ThemeProvider>\n , this.services.dom.body);\n }\n});\n\ninterface ToolTipContainerComponentProps {\n toolTipsProvider: () => ITooltipsProvider;\n}\n\n@observer\nexport class ToolTipContainerComponent extends OrbitComponent<ToolTipContainerComponentProps> {\n \n render() {\n const toolTips = this.props.toolTipsProvider().toolTips;\n return (\n <>\n {toolTips.map(t => <ToolTipComponent key={t.id} toolTip={t}/>)}\n </>\n )\n }\n}","import styled from \"styled-components\";\n\nexport const GameLoadingIndicatorRootBox = styled.div<{isHidden: boolean; zIndex: number}>`\n position: fixed;\n display: ${props => props.isHidden ? 'none' : 'flex'};\n flex-direction: column;\n justify-content: center;\n align-content: center;\n align-items: center;\n z-index: ${props => props.zIndex};\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: ${props => props.theme.colors.backgroundDark};\n color: ${props => props.theme.colors.textLight};\n`","import React from \"react\";\nimport {observer} from \"mobx-react\";\nimport {GameLoadingIndicatorRootBox} from \"./boxes/game-loading-indicator-root.box\";\nimport {ComponentServicesPick} from \"../../../services/component-services-pick\";\nimport {withServices} from \"../../../react-hooks/with-services\";\n\ninterface GameLoadingIndicatorComponentProps extends ComponentServicesPick<'gameRunner'> {\n\n}\n\nconst ComponentBody: React.FC<GameLoadingIndicatorComponentProps> = observer((props) => {\n const loadingIndicator = props.gameRunner.gameLoadingIndicator;\n\n if(!loadingIndicator) {\n return null;\n }\n\n return (\n <GameLoadingIndicatorRootBox isHidden={loadingIndicator.isHidden} zIndex={props.gameRunner.gameFrameZIndex}>\n {loadingIndicator.render()}\n </GameLoadingIndicatorRootBox>\n );\n})\n\nexport const GameLoadingIndicatorComponent = withServices(ComponentBody, ['gameRunner']);","import {observer} from \"mobx-react\";\nimport {GameLoadingIndicatorComponent} from \"../game-window/loading-indicators/game-loading-indicator.component\";\nimport React from \"react\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\ninterface CurrentGameContainerComponentProps extends ComponentServicesPick<'gameRunner'> {\n\n}\n\nconst ComponentBody: React.FC<CurrentGameContainerComponentProps> = observer((props) => {\n if(props.gameRunner.gameLoadingIndicator) {\n return (<GameLoadingIndicatorComponent/>);\n }\n\n const currentRunningGame = props.gameRunner.currentRunningGame;\n if(!currentRunningGame) {\n return null;\n }\n\n return currentRunningGame.renderGame();\n})\n\nexport const CurrentGameContainerComponent = withServices(ComponentBody, ['gameRunner']);","import styled from 'styled-components';\n\n/**\n * This component overrides default react-toastify's css variables\n * https://fkhadra.github.io/react-toastify/how-to-style#override-css-variables\n * React toastify comes with 3 predefined themes, light, dark and colored (which is actually a blank theme)\n * All of theme can be customized using these variables and if we need more we'll use other techniques from this page: https://fkhadra.github.io/react-toastify/how-to-style\n * Variables that are set with their default value (as they come from react-toastify) ARE COMMENTED\n */\nexport const ToasterStyleWrapper = styled.div`\n // use html & instead of :root\n html & {\n /* general toast styles */\n --toastify-toast-width: 388px;\n /* --toastify-toast-background: #fff; */\n /* --toastify-toast-min-height: 64px; */\n /* --toastify-toast-max-height: 800px; */\n --toastify-font-family: ${({theme}) => theme.font.presets.regular};\n /* --toastify-z-index: 9999; */\n\n /* Colors used by the toaster */\n /* these seem to be the backgrounds */\n --toastify-color-light: ${({theme}) => theme.colors.backgroundDark}; /* <-- TODO: this should be a light color and the light theme should be used for 777 for the rest the dark theme */\n --toastify-color-dark: ${({theme}) => theme.colors.backgroundDark};\n /* this seems to be text colors and they are set sometimes as icon colors and progress bar colors */\n /* --toastify-color-info: #3498db; */\n /* --toastify-color-success: #07bc0c; */\n /* --toastify-color-warning: #f1c40f; */\n /* --toastify-color-error: #e74c3c; */\n /* I don't know where this is used */\n /* --toastify-color-transparent: rgba(255, 255, 255, 0.7); */\n\n /* colors used for icons */\n /* --toastify-icon-color-info: var(--toastify-color-info); */\n /* --toastify-icon-color-success: var(--toastify-color-success); */\n /* --toastify-icon-color-warning: var(--toastify-color-warning); */\n /* --toastify-icon-color-error: var(--toastify-color-error); */\n\n /* text colors for light and dark themes */\n --toastify-text-color-light: ${({theme}) => theme.colors.textLight};\n --toastify-text-color-dark: ${({theme}) => theme.colors.textLight};\n\n /* Used only for colored theme */\n /* --toastify-text-color-info: #fff; */\n /* --toastify-text-color-success: #fff; */\n /* --toastify-text-color-warning: #fff; */\n /* --toastify-text-color-error: #fff; */\n\n /* --toastify-spinner-color: #616161; */\n /* --toastify-spinner-color-empty-area: #e0e0e0; */\n\n /* Used when no type (info, success, warning, error) is provided */\n --toastify-color-progress-light: ${({theme}) => theme.colors.brandPrimary};\n /* Used when no type (info, success, warning, error) is provided */\n --toastify-color-progress-dark: ${({theme}) => theme.colors.brandPrimary};\n /* Used when type (info, success, warning, error) IS provided */\n /* --toastify-color-progress-info: var(--toastify-color-info); */\n /* --toastify-color-progress-success: var(--toastify-color-success); */\n /* --toastify-color-progress-warning: var(--toastify-color-warning); */\n /* --toastify-color-progress-error: var(--toastify-color-error); */\n\n /* used to control the opacity of the progress trail */\n --toastify-color-progress-bgo: 1;\n }\n`;","import {styledBox} from \"../../../../themes/architecture/styled-box\";\n\nexport const ToastContainerBox = styledBox(\"ToastContainerBox\");","import {ThemeProvider} from \"styled-components\";\nimport {OrbitComponent} from \"../base-components/orbit-component/orbit-component\";\nimport {ToasterStyleWrapper} from './boxes/toaster-styles-wrapper.box';\nimport {ToastContainerBox} from './boxes/toast-container/toast-container.box';\nimport 'react-toastify/dist/ReactToastify.css';\n\nexport class ToasterComponent extends OrbitComponent {\n render() {\n return (<ThemeProvider theme={this.services.theme.toastersTheme}>\n <ToasterStyleWrapper>\n <ToastContainerBox\n position={this.services.mediaQuery.mAndBelow ? \"top-center\" : (this.services.language.isRTLLanguage ? \"bottom-left\" : \"bottom-right\")}\n closeOnClick={false}\n rtl={this.services.language.isRTLLanguage}\n autoClose={5000}\n hideProgressBar={false}\n newestOnTop={false}\n pauseOnFocusLoss\n draggable\n pauseOnHover\n /* Because I am wrapping ToastContainer in a styled component, we won't be able to use the theme prop to set \"dark\", \"light\" or \"colored\".\n * Theme will be set by the styled-components library to OrbitTheme.\n * However, when dispatching a toast we can specify the theme in the options parameter: toast.custom(<SomeCustomContent />, {theme: \"dark\"});\n * default is \"light\" */\n // theme=\"light\"\n />\n </ToasterStyleWrapper>\n </ThemeProvider>);\n }\n}\n","import React from 'react';\nimport {observer} from 'mobx-react';\nimport ReactDOM from \"react-dom\";\nimport {ComponentServicesPick} from \"../../services/component-services-pick\";\nimport {withServices} from \"../../react-hooks/with-services\";\n\nexport interface SnackbarNotificationContainerComponentProps extends ComponentServicesPick<'notifications' | 'dom'> {\n\n}\n\nconst ComponentBody :React.FC<SnackbarNotificationContainerComponentProps> = observer((props) => {\n\n if(props.notifications.currentNotificationsComponents.length === 0) {\n return null;\n }\n\n return (\n <>\n {props.notifications.currentNotificationsComponents.map(notification => ReactDOM.createPortal(notification, props.dom.body))}\n </>\n );\n});\n\nexport const SnackbarNotificationContainerComponent = withServices(ComponentBody, [\"notifications\", \"dom\"]);","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { ServiceFactory } from '../../services/service-factory';\nimport { ContainerComponent } from '../container/container.component';\nimport { observer } from 'mobx-react';\nimport { ModalDialogsContainerComponent } from '../modal-dialog/modal-dialogs-container.component';\nimport { OrbitComponentsRenderedInsideSdkContainer } from '../sdk/orbit-components-rendered-inside-sdk-container';\nimport { OrbitContextProvider } from '../../orbit-context';\nimport { StyleSheetManager, ThemeProvider } from 'styled-components';\nimport RtlPlugin from 'stylis-plugin-rtl';\nimport { PlayerBurnoutLayerComponent } from '../burnout/player-burnout-layer.component';\nimport { ToolTipContainerComponent } from \"../tooltip/tooltip-container.component\";\n\nimport { CurrentGameContainerComponent } from \"../current-game-container/current-game-container.component\"; // Pagination module\nimport { ToasterComponent } from '../toaster/toaster.component';\nimport { SnackbarNotificationContainerComponent } from \"../notifications/snackbar-notification-container.component\";\n\nexport interface AppComponentProps {\n services: ServiceFactory,\n}\n\nexport const AppComponent = observer(class AppComponent extends React.Component<AppComponentProps, {}> {\n\n componentDidMount() {\n this.props.services.splash.removeSplash();\n\n const splashTime = this.props.services.splash.splashTime;\n this.props.services.logger.info(`Splash time: ${splashTime} seconds`);\n this.props.services.webVitals.then(webVitals => webVitals.init());\n\n if (isNaN(splashTime)) return;\n this.props.services.analytics.sendTechnicalEvent('splash-time-splash_main',\n this.props.services.location.currentUri.pathName.toString(),\n splashTime);\n }\n\n\n render() {\n return (\n <OrbitContextProvider value={{ services: this.props.services }}>\n <StyleSheetManager disableCSSOMInjection={true} stylisPlugins={this.props.services.language.isRTLLanguage ? [RtlPlugin] : []}>\n <ThemeProvider theme={this.props.services.theme.currentTheme}>\n {this.props.services.theme.renderGlobalStyles()}\n {this.props.services.routing.currentRoute?.data?.standalone ?\n this.props.services.arenas.getCurrentArena().renderArena() :\n <ContainerComponent />\n }\n <CurrentGameContainerComponent />\n <ModalDialogsContainerComponent />\n <SnackbarNotificationContainerComponent />\n <ToolTipContainerComponent key={'REGULAR_TOOLTIPS'} toolTipsProvider={() => this.props.services.regularTooltips} />\n <ToolTipContainerComponent key={'ON_BOARDING_TOOLTIPS'} toolTipsProvider={() => this.props.services.onBoardingTooltips} />\n <PlayerBurnoutLayerComponent />\n <ToasterComponent />\n <OrbitComponentsRenderedInsideSdkContainer />\n </ThemeProvider>\n </StyleSheetManager>\n </OrbitContextProvider>\n )\n }\n});\n\n\nexport function renderApp(services: ServiceFactory): void {\n const root = ReactDOM.createRoot(\n document.getElementById('orbit-container') as HTMLElement\n );\n\n root.render(\n <AppComponent services={services} />\n );\n}\n","import {IStorageService} from './storage.service.interface';\nimport {ILoggerService} from '../logger/logger.service.interface';\n\nexport class InMemoryLocalStorageService implements IStorageService {\n\n constructor(private _logger: ILoggerService) {\n\n }\n\n _localStorageData = {};\n _cookies = {};\n\n\n setItem(key:string, value:any): void {\n this._localStorageData[key] = value;\n }\n\n getItem(key: string): any {\n return this._localStorageData[key];\n }\n\n removeItem(key: string): void {\n delete this._localStorageData[key];\n }\n\n setJson(key: string, value: object): void {\n this._localStorageData[key] = JSON.stringify(value);\n }\n\n getJson(key: string): any {\n var value = this.getItem(key);\n if(!value) {\n return value;\n }\n\n return JSON.parse(value);\n }\n\n createCookie(name: string, value: string): void {\n this._cookies[name] = value;\n }\n\n createDomainCookie(name: string, value: string): void {\n this._cookies[name] = value;\n }\n\n\n getCookie(name: string) {\n return this._cookies[name];\n }\n\n removeCookie(name: string): void {\n try {\n if(this._cookies[name]) {\n delete this._cookies[name];\n }\n } catch (err) {\n this._logger.error('InMemoryLocalStorageService.removeCookie failed', err);\n }\n }\n}\n","import {LauncherOverridesReader} from '../launcher-overrides-reader/launcher-overrides-reader';\nimport {ILoggerService} from '../../services/logger/logger.service.interface';\nimport {isInsideAutomation} from '../../../utils/automation-helpers';\nimport {IB2CConfiguration} from '../../services/configurations/config-data-sections/b2c.configuration';\nimport {Undefined} from '../../../common/types/nullable-types';\n\nexport class B2CFrameworkLoader {\n constructor(private _launcherOverridesReader: LauncherOverridesReader, private readonly b2cConfig: Undefined<IB2CConfiguration>, private _languageIso2: string, private _logger: ILoggerService) {\n let overrides = this._launcherOverridesReader.getOverrides();\n this._cmsSource = overrides && overrides.orbit && overrides.orbit.cmsSource;\n if (this._cmsSource && !this._cmsSource.endsWith('/')) {\n this._cmsSource += '/'\n }\n }\n\n private readonly _cmsSource: string;\n\n private _buildFilePath(fileName: string): string {\n return `https://storage.googleapis.com/cw-prod/${fileName}`;\n }\n\n private _createTagId(url: string): string {\n const urlParts = url?.split('/');\n if (urlParts.length > 0) {\n const fileName = urlParts[urlParts.length - 1]\n return `b2c_file_${fileName}`;\n }\n return '';\n }\n\n //Important Note - this function also responsible load the b2c scripts/CSS in the AOD app\n async loadB2CFramework(): Promise<void> {\n\n try {\n if (isInsideAutomation()) {\n return;\n }\n\n\n if (!this._cmsSource) {\n return;\n }\n\n if (this.b2cConfig?.jsFiles) {\n const customJsFiles: string[] = this.b2cConfig?.jsFiles || [];\n const customCssFiles: string[] = this.b2cConfig?.cssFiles || [];\n\n if (customJsFiles.length > 0 || customCssFiles.length > 0) {\n customJsFiles.forEach(jsFile => {\n this._loadScriptTag(this._createTagId(jsFile), jsFile);\n });\n customCssFiles.forEach(cssFile => {\n this._loadStyleTag(this._createTagId(cssFile), cssFile);\n });\n }\n\n } else {\n this._loadStyleTag('b2c_main_css', this._buildFilePath('main.css'));\n this._loadScriptTag('b2c_jquery-lib.js', this._buildFilePath('jquery-lib.js'));\n this._loadScriptTag('b2c_main_js', this._buildFilePath('lib.js'));\n this._loadScriptTag('b2c_lib_js', this._buildFilePath('main.js'));\n }\n\n } catch (err) {\n this._logger.error('Failed to load B2C framework', err);\n }\n }\n\n private _loadScriptTag(id: string, url: string): Promise<void> {\n return new Promise((resolve, reject) => {\n var scriptTag = document.createElement('script');\n scriptTag.id = id;\n scriptTag.src = url;\n scriptTag.onload = () => {\n resolve();\n };\n scriptTag.onerror = (err) => {\n this._logger.error(`Failed to load B2C script from ${url}`, err);\n reject(err);\n };\n document.head.appendChild(scriptTag);\n });\n\n\n };\n\n private _loadStyleTag(id: string, url: string): void {\n var styleTag = document.createElement('link');\n styleTag.id = id;\n styleTag['href'] = url;\n styleTag['rel'] = 'stylesheet';\n styleTag['type'] = 'text/css';\n styleTag.onerror = (err) => {\n this._logger.error(`Failed to load B2C stylesheet from ${url}`, err);\n };\n\n document.head.appendChild(styleTag);\n }\n}\n","import {IWindowService} from '../services/window/window.service.interface';\nimport {IStorageService} from \"../services/storage/storage.service.interface\";\nimport {getMiniOrbitName} from '../services/mini-orbit/mini-orbit-consts';\nimport {IThemeDefinition} from \"../services/theme/theme-definition.interface\";\nimport {IAssetsMap} from \"./assets/assets-map.interface\";\nimport {IThemeInitializationParams} from \"./architecture/theme-initialization-params\";\n\n\n\n\n\nfunction getThemeName(themeName: string, windowService: IWindowService, storageService: IStorageService): string {\n\n const miniOrbitName = getMiniOrbitName(storageService)\n\n if(miniOrbitName) {\n return `${themeName}/${miniOrbitName}`.toLowerCase();\n }\n return themeName;\n}\n\nexport async function selectTheme(options: {\n themeName: string;\n assetsMap: IAssetsMap,\n serverPath: string;\n skinFullName: string;\n window: IWindowService;\n storage: IStorageService;\n }): Promise<IThemeDefinition> {\n\n const themeName = getThemeName(options.themeName, options.window, options.storage);\n const themeDefinitionModule = await import(/* webpackChunkName: \"theme-definition\" */ `./definitions/${themeName}/theme.definition`)\n\n const themeInitParams: IThemeInitializationParams = {\n assetsMap: options.assetsMap\n };\n\n return themeDefinitionModule.default(themeInitParams);\n}\n\n\n","import { IContentAdapterCasinoGamesInfoResponse } from \"@sparkware/uc-sdk-core\";\nimport {GameRawData} from \"./services/sdk/gme-raw-data.type\";\n\nexport const B2C_APP_ID: string = \"B2C\";\n\n\nexport interface IUserInfo {\n readonly isAuthorized: boolean;\n}\n\nexport interface ISiteInfo {\n readonly brandId: number;\n readonly subBrandId: number;\n}\n\nexport interface IClientInfo {\n readonly fullVersion: string;\n}\n\n\nexport interface IOrbitApi {\n readonly version: string;\n readonly userInfo: IUserInfo;\n readonly siteInfo: ISiteInfo;\n readonly clientInfo: IClientInfo;\n\n deepLink(deepLinkObject: any, navigate?: any): any;\n\n bannerAdminDeepLink(action: string, id: string): any;\n\n getMarketingData(marketingParams): any;\n\n sendAnalytics(cat?, action?, label?, value?): void;\n\n showPwaPrompt(): any;\n\n isPwaInstallable(): any;\n\n subscribeOnAuthChange(callback: () => void): void;\n\n getGamesInfo(gameTypes: number[]): Promise<IContentAdapterCasinoGamesInfoResponse>;\n\n getGamesWithoutBonus(): Promise<GameRawData>;\n\n getRefreshToken(): string;\n}\n","import {\n ContentAdapterEvents,\n IContentAdapter, IContentAdapterCasinoGameInfo,\n IContentAdapterCasinoGamesInfoResponse, IContentAdapterClientInfo, IContentAdapterElasticEventData,\n IContentAdapterEvents, IContentAdapterUserInfo, IDeepLink\n} from \"@sparkware/uc-sdk-core\";\nimport {IServiceFactoryExtended} from \"./services/service-factory-extended.interface\";\nimport {Check} from \"@sparkware/app-utils\";\nimport {B2C_APP_ID} from \"./orbit-api.interface\";\nimport {UndefinedString} from \"../common/types/nullable-types\";\n\nexport const CONTENT_ADAPTER_OBJECT_NAME = 'contentAdapter';\n\nexport class B2CAdapter implements IContentAdapter {\n constructor(private readonly _services: IServiceFactoryExtended) {\n this.events = new ContentAdapterEvents(_services.messageBroker.channels)\n }\n\n readonly events: IContentAdapterEvents;\n\n async getCasinoGames(gameTypes: number[]): Promise<IContentAdapterCasinoGamesInfoResponse> {\n gameTypes = gameTypes || [];\n\n let foundGames = {};\n let missingGames = [];\n if (gameTypes.length === 0) {\n return {\n foundGames,\n missingGames,\n };\n }\n\n let gamesMap = this._services.games.gamesMap;\n if (Check.isEmpty(gamesMap)) {\n gamesMap = await this._services.games.getGamesInfoMap(gameTypes);\n }\n\n gameTypes.forEach(gameType => {\n const gameInfo = gamesMap[gameType];\n if (gameInfo) {\n foundGames[gameType] = {\n gameType: gameInfo.gameType,\n title: gameInfo.title,\n gameGroup: gameInfo.gameGroup,\n gameImage: gameInfo.getGameImage(),\n gameImageAlt: gameInfo.getImageSeoAlt()\n };\n } else {\n missingGames.push(gameType);\n }\n });\n\n return {\n foundGames,\n missingGames\n };\n }\n\n async getCasinoGamesWithoutBonus(): Promise<Record<number, IContentAdapterCasinoGameInfo>> {\n const gamesTypes = this._services.configuration.usedGameTypesBySite;\n\n if(gamesTypes?.length > 0){\n const gamesInfo = await this._services.sdk.getGamesInfo(gamesTypes);\n\n return Object.keys(gamesInfo)\n .filter(gameType => gamesInfo[gameType].allowWithdrawOnlyFromReal === true)\n .reduce((acc, gameType) => {\n acc[gameType] = gamesInfo[gameType];\n return acc;\n }, {});\n }\n\n return {};\n }\n\n async getClientInfo(): Promise<IContentAdapterClientInfo> {\n return {\n brandId: this._services.sdk.getBrandID(),\n subBrandId: this._services.sdk.getSubBrandID(),\n languageIso2: this._services.language.currentLanguageIso2,\n productPackageId: this._services.sdk.getProductPackageId(),\n systemId: this._services.sdk.getSkin().getPlatformSystemID(),\n features: {},\n cms: {\n footerComponentId: parseInt(this._services.configuration.data.footer.componentID),\n },\n device: {\n isHybrid: this._services.device.hybrid.isHybrid,\n isIOS: this._services.device.os.isIOS,\n isMobile: this._services.device.os.isMobileOS\n },\n environment: this._services.configuration.startupConfiguration.sdk.config.ExtraProperties.env\n };\n }\n\n \n\n async getUserInfo(): Promise<IContentAdapterUserInfo> {\n const userService = this._services.user;\n const isAuthorized = userService.isAuthorized;\n\n let abTestGroup: UndefinedString = undefined;\n if(this._services.sdk.getCmsUserSignature().message) {\n try {\n abTestGroup = JSON.parse(this._services.sdk.getCmsUserSignature().message).B2CABTest;\n } catch (err) {\n this._services.logger.error('Failed to get B2C A/B test group name', err);\n }\n\n }\n\n if(isAuthorized) {\n return {\n isAuthorized: isAuthorized,\n abTestGroup: abTestGroup,\n userData: {\n isPromotionPermitted: userService.userData.IsPromotionPermitted,\n\n }\n }\n }\n\n return {\n isAuthorized: false,\n abTestGroup: abTestGroup\n };\n }\n\n\n async openDeepLink(deepLink: IDeepLink): Promise<void> {\n const deepLinkService = await this._services.deepLink;\n await deepLinkService.executeDeepLink(deepLink);\n }\n\n sendElasticInfoEvent(data: IContentAdapterElasticEventData): boolean {\n let {eventType, category, action, label, value, customData, sendToDWH, appId} = data;\n appId = appId ?? B2C_APP_ID;\n sendToDWH = sendToDWH ?? true;\n\n if (!Check.isString(eventType) ||\n (!Check.isNullOrUndefined(category) && !Check.isString(category)) ||\n (!Check.isNullOrUndefined(action) && !Check.isString(action)) ||\n (!Check.isNullOrUndefined(label) && !Check.isString(label))) {\n return false;\n }\n\n const MAX_FIELD_SIZE = 100;\n eventType = (eventType?.length > MAX_FIELD_SIZE) ? eventType.slice(0, MAX_FIELD_SIZE) : eventType;\n category = (category?.length > MAX_FIELD_SIZE) ? category.slice(0, MAX_FIELD_SIZE) : category;\n action = (action?.length > MAX_FIELD_SIZE) ? action.slice(0, MAX_FIELD_SIZE) : action;\n label = (label?.length > MAX_FIELD_SIZE) ? label.slice(0, MAX_FIELD_SIZE) : label;\n\n if (Check.isNullOrUndefined(customData)) {\n this._services.analytics.sendElasticInfoEvent({ eventType, category, action, label, value, customData, appID: appId }, sendToDWH);\n return true;\n }\n\n if (Check.isString(customData)) {\n customData = (customData.length > MAX_FIELD_SIZE) ? customData.slice(0, MAX_FIELD_SIZE) : customData;\n this._services.analytics.sendElasticInfoEvent({ eventType, category, action, label, value, customData: appId ? { [appId + \"_data\"]: customData } : customData, appID: appId, }, sendToDWH);\n return true;\n } else if (Check.isObject(customData)) {\n const MAX_FIELDS_COUNT = 10;\n let fieldsCount: number = 0;\n for (const prop in customData) {\n if (!Check.isString(customData[prop])) {\n return false; //only allowing string values in the customData fields - dismissing the event otherwise\n }\n if (customData[prop].length > MAX_FIELD_SIZE) {\n customData[prop] = customData[prop].slice(0, MAX_FIELD_SIZE);//truncate string to max 100 chars\n }\n fieldsCount++;\n }\n if (fieldsCount > MAX_FIELDS_COUNT) {\n return false; //too many custom fields, event dismissed\n }\n this._services.analytics.sendElasticInfoEvent({ eventType, category, action, label, value, customData: appId ? { [appId + \"_data\"]: customData } : customData, appID: appId}, sendToDWH);\n return true;\n }\n\n return false;\n }\n\n async isPwaInstallable(): Promise<boolean> {\n return (await this._services.progressiveWebApp).isPWAInstallable;\n }\n\n async showPwaPrompt(): Promise<void> {\n await (await this._services.progressiveWebApp).prompt();\n }\n}","import { ORBIT_VERSION } from '../orbit-version';\nimport { Check } from '@sparkware/app-utils';\nimport {\n B2C_APP_ID,\n IClientInfo,\n IOrbitApi,\n ISiteInfo,\n IUserInfo\n} from './orbit-api.interface';\nimport { IServiceFactoryExtended } from './services/service-factory-extended.interface';\nimport { IContentAdapter, IContentAdapterCasinoGamesInfoResponse } from \"@sparkware/uc-sdk-core\";\nimport { CONTENT_ADAPTER_OBJECT_NAME } from \"./b2c-adapter\";\nimport { MarketingParams } from \"../common/interfaces/marketing-params.interface\";\nexport class OrbitApi implements IOrbitApi {\n constructor(private _services: IServiceFactoryExtended) {\n }\n\n get version() {\n\n return ORBIT_VERSION;\n }\n\n private get _b2cContentAdapter(): IContentAdapter {\n return window[CONTENT_ADAPTER_OBJECT_NAME] as IContentAdapter;\n }\n\n get userInfo(): IUserInfo {\n return {\n isAuthorized: this._services.user.isAuthorized\n };\n }\n get siteInfo(): ISiteInfo {\n return {\n brandId: this._services.sdk.getBrandID(),\n subBrandId: this._services.sdk.getSubBrandID()\n }\n }\n\n get clientInfo(): IClientInfo {\n return {\n fullVersion: this._services.sdk.getSkin().getVersion()\n }\n }\n\n /**\n * Will return an array of gameTypes which has allowWithdrawOnlyFromReal === true\n */\n async getGamesWithoutBonus() {\n return await this._b2cContentAdapter.getCasinoGamesWithoutBonus();\n }\n\n async deepLink(deepLinkObject: any, navigate?: any): Promise<void> {\n const deepLinkService = await this._services.deepLink;\n await deepLinkService.executeDeepLink(deepLinkObject, navigate);\n }\n\n bannerAdminDeepLink(action: string, id: string): any {\n const deepLinkObject = {\n action: action,\n id: id\n };\n\n return this.deepLink(deepLinkObject);\n }\n\n async getMarketingData(marketingParams: MarketingParams): Promise<any> {\n if (Check.isString(marketingParams)) {\n try {\n marketingParams = JSON.parse(marketingParams);\n } catch (err) {\n this._services.logger.error(`Failed to parse marketing params: ${marketingParams}`, err);\n }\n }\n\n return (await this._services.marketing).getMarketingData(marketingParams);\n }\n\n sendAnalytics(category?: string, action?: string, label?: string, value?: string) {\n this._services.analytics.sendAnalytics(category, action, label, value);\n }\n\n sendElasticInfoEvent(eventType: string, category: string, action: string, label: string, value?: string, customData: Object = null, sendToDWH: boolean = true, appID: string = B2C_APP_ID): boolean {\n return this._b2cContentAdapter.sendElasticInfoEvent({\n eventType: eventType,\n category: category,\n action: action,\n label: label,\n value: value,\n customData: customData,\n sendToDWH: sendToDWH,\n appId: appID\n });\n }\n\n showPwaPrompt() {\n return this._b2cContentAdapter.showPwaPrompt();\n }\n\n isPwaInstallable() {\n return this._b2cContentAdapter.isPwaInstallable();\n }\n\n subscribeOnAuthChange(callback: (isAuthorized) => void) {\n this._services.sdk.events.onOAuthStateChanged(() => {\n const isAuthorized = this._services.user.isAuthorized\n callback && callback(isAuthorized)\n })\n }\n\n async getGamesInfo(gameTypes: number[]): Promise<IContentAdapterCasinoGamesInfoResponse> {\n return await this._b2cContentAdapter.getCasinoGames(gameTypes);\n }\n\n getRefreshToken(): string {\n return this._services.sdk.getRefreshToken();\n }\n\n}\n","import {configure} from 'mobx'\nimport {\n ApplicationStartupConfigurationsReader\n} from './app-react/app-bootstrap/application-startup-configurations-reader/application-startup-configurations-reader';\nimport {SdkHooksProvider} from './app-react/app-bootstrap/sdk-initializer/sdk-hooks-provider';\nimport {SdkInitializer} from './app-react/app-bootstrap/sdk-initializer/sdk-initializer';\nimport {ServiceFactory} from './app-react/services/service-factory';\nimport {renderApp} from './app-react/components/app/app.component';\nimport {LauncherOverridesReader} from './app-react/app-bootstrap/launcher-overrides-reader/launcher-overrides-reader';\nimport {InMemoryLocalStorageService} from './app-react/services/storage/in-memory-local-storage.service';\nimport {LocalStorageService} from './app-react/services/storage/local-storage.service';\nimport {IStorageService} from './app-react/services/storage/storage.service.interface';\nimport {ILoggerService} from './app-react/services/logger/logger.service.interface';\nimport {ConsoleLoggerService} from './app-react/services/logger/console-logger.service';\nimport {WindowService} from './app-react/services/window/window.service';\nimport {HttpService} from './app-react/services/http/http.service';\nimport {DomService} from './app-react/services/dom/dom.service';\nimport engLang from './settings/languages/eng';\n\nimport {B2CFrameworkLoader} from './app-react/app-bootstrap/b2c-framework-loader/b2c-framework-loader';\nimport {selectTheme} from './app-react/themes/select-theme';\nimport {ILanguageData} from './app-react/services/language/language.service.interface';\nimport {ALL_CONFIGS_KEY} from \"./app-consts\";\nimport {OrbitApi} from \"./app-react/orbit-api\";\nimport {B2CAdapter, CONTENT_ADAPTER_OBJECT_NAME} from \"./app-react/b2c-adapter\";\n\n\nconfigure({\n enforceActions: 'observed'\n});\n\n\nlet createStorage = function(logger: ILoggerService): IStorageService {\n try {\n let lsData = '__orbit_check_local_storage__';\n localStorage.setItem(lsData, lsData);\n localStorage.removeItem(lsData);\n return new LocalStorageService(logger);\n }\n catch (e) {\n logger.error('localStorage is not available!');\n return new InMemoryLocalStorageService(logger);\n }\n\n};\n\n\nasync function getLanguageData(languageIso3: string, logger: ILoggerService): Promise<ILanguageData> {\n try {\n let languageDataModule = await import(/*webpackChunkName: \"language\" */`./settings/languages/${languageIso3.toLowerCase()}`);\n return languageDataModule.default;\n } catch (err) {\n logger.error(`Failed to load language ${languageIso3}`, err);\n return engLang;\n }\n\n}\n\n\n\nexport async function startApplication(): Promise<void> {\n let windowService = new WindowService();\n let domService = new DomService();\n let httpService = new HttpService();\n let loggerService = new ConsoleLoggerService(windowService.getGlobalProperty(ALL_CONFIGS_KEY)?.sdk?.debug);\n let storageService = createStorage(loggerService);\n\n let sdkHooksProvider = new SdkHooksProvider();\n let launcherOverridesReader = new LauncherOverridesReader(storageService, loggerService);\n\n\n\n let configurationsReader = new ApplicationStartupConfigurationsReader(\n windowService,\n launcherOverridesReader,\n httpService,\n loggerService,\n storageService);\n\n\n let appConfigs = await configurationsReader.readApplicationConfigurations();\n\n const languageData = await getLanguageData(appConfigs.b2c.language.iso3, loggerService);\n\n let themeDefinition = await selectTheme({\n themeName: process.env.REACT_APP_THEME_NAME || appConfigs.orbit.config.theme.name,\n assetsMap: appConfigs.assetsMap,\n skinFullName: appConfigs.skinFullName,\n serverPath: appConfigs.orbitServer,\n window: windowService,\n storage: storageService\n });\n\n const {ThemeDefaultBoxes} = await import(/*webpackChunkName: \"theme-default-boxes\" */ \"./app-react/services/theme/theme-default-boxes\");\n\n\n await new B2CFrameworkLoader(launcherOverridesReader, appConfigs.orbit.config.b2c, appConfigs.b2c.language.iso2, loggerService).loadB2CFramework();\n\n await new SdkInitializer(appConfigs, sdkHooksProvider, launcherOverridesReader, themeDefinition, loggerService).init();\n\n const services = new ServiceFactory(sdkHooksProvider, loggerService, storageService, windowService, domService, httpService, themeDefinition, ThemeDefaultBoxes, appConfigs, languageData);\n\n window['orbit'] = new OrbitApi(services);\n window[CONTENT_ADAPTER_OBJECT_NAME] = new B2CAdapter(services);\n\n window['getMarketingData'] = function (dl, promo) {\n return window['orbit'].getMarketingData(dl, promo);\n };\n\n renderApp(services);\n}\n","/**\n * System event symbols, used internally for identifying events uniquely.\n */\nconst SYSTEM_EVENTS = {\n ON_INIT_COMPLETE : 'ON_INIT_COMPLETE',\n ON_ORBIT_INIT_COMPLETE : 'ON_ORBIT_INIT_COMPLETE',\n RUN_AUTOLOGIN : 'RUN_AUTOLOGIN',\n RUN_AUTOLOGIN_TOUCH_ID : 'RUN_AUTOLOGIN_TOUCH_ID',\n MESSAGE_CLOSE : 'MESSAGE_CLOSE',\n ON_BEFORE_OAUTH_STATE_CHANGE : 'ON_BEFORE_OAUTH_STATE_CHANGE',\n OAUTH_STATE_CHANGE : 'OAUTH_STATE_CHANGE',\n AUTOLOGIN_SUCCESS : 'AUTOLOGIN_SUCCESS',\n AUTOLOGIN_FAILED : 'AUTOLOGIN_FAILED',\n SUCCESSFULLY_LOGIN_RESPONSE : 'SUCCESSFULLY_LOGIN_RESPONSE',\n ON_RUN_AUTOLOGIN : 'ON_RUN_AUTOLOGIN',\n FAIL_LOGIN_RESPONSE : 'FAIL_LOGIN_RESPONSE',\n CLOSE_GAME : 'CLOSE_GAME',\n LOGIN_FORM_OPEN : 'LOGIN_FORM_OPEN',\n LOGIN_FORM_CLOSE : 'LOGIN_FORM_CLOSE',\n GET_NEW_TOUCH_TOKEN : 'GET_NEW_TOUCH_TOKEN',\n SCREEN_CHANGE_STATE : 'SCREEN_CHANGE_STATE',\n POST_MESSAGE_ARRIVE : 'POST_MESSAGE_ARRIVE',\n HYBRID_POST_MESSAGE_ARRIVE : 'HYBRID_POST_MESSAGE_ARRIVE',\n EXTEND_USER_TIME_TO_LIVE : 'EXTEND_USER_TIME_TO_LIVE',\n SCREEN_RESIZE_CHANGED : 'SCREEN_RESIZE_CHANGED',\n GAME_OPEN : 'GAME_OPEN',\n FULL_SCREEN_CHANGE : 'FULL_SCREEN_CHANGE',\n EXTERNAL_LINK_OPEN : 'EXTERNAL_LINK_OPEN',\n EXTERNAL_LINK_CLOSED : 'EXTERNAL_LINK_CLOSED',\n EXTERNAL_LINK_OPENED : 'EXTERNAL_LINK_OPENED',\n APP_RESUMED : 'APP_RESUMED',\n APP_PAUSED : 'APP_PAUSED',\n LOGIN_SESSION_RESUMED : \"LOGIN_SESSION_RESUMED\",//triggered on page refresh, autologin (continue other's client session), open app or resume app with successful refresh token\n ANALYTIC_TRIGGER_ACTIVATED : 'ANALYTIC_TRIGGER_ACTIVATED',\n ANALYTIC_DATA_LAYER_UPDATE : 'ANALYTIC_DATA_LAYER_UPDATE',\n ANALYTICS_EXPERIMENT_ACTIVATED: 'ANALYTICS_EXPERIMENT_ACTIVATED',\n ANALYTICS_OPTIMIZE_TRIGGER : 'ANALYTICS_OPTIMIZE_TRIGGER',\n INCOMING_MARKETING_DATA : 'INCOMING_MARKETING_DATA',\n INCOMING_MARKETING_FLOW : 'INCOMING_MARKETING_FLOW',\n PLAYER_ACTION: 'PLAYER_ACTION',\n\n BALANCE_UPDATED: 'BALANCE_UPDATED',\n CURRENCY_UPDATED: 'CURRENCY_UPDATED',\n RECENTLY_PLAYED_GAMES_UPDATED: 'RECENTLY_PLAYED_GAMES_UPDATED',\n LIVE_FEEDS_TOTAL_JACKPOTS_UPDATED: 'LIVE_FEEDS_TOTAL_JACKPOTS_UPDATED',\n LIVE_FEEDS_JACKPOT_AMOUNTS_BY_GAME_UPDATED: 'LIVE_FEEDS_JACKPOT_AMOUNTS_BY_GAME_UPDATED',\n LIVE_FEEDS_JACKPOTS_BY_ID_UPDATED: 'LIVE_FEEDS_JACKPOTS_BY_ID_UPDATED',\n OAUTH_REMOVE_FROM_LOCAL_STORAGE: 'SYSTEM_EVENTS.OAUTH_REMOVE_FROM_LOCAL_STORAGE',\n LOCAL_STORAGE_CHANGED: 'LOCAL_STORAGE_CHANGED',\n ELEMENT_CREATED: 'ELEMENT_CREATED',\n BEGIN_LOGIN_AFTER_REGISTRATION: 'BEGIN_LOGIN_AFTER_REGISTRATION',\n LOGIN_COMPLETED_AFTER_REGISTERATION: 'LOGIN_COMPLETED_AFTER_REGISTERATION',\n LOGIN_FAILED_AFTER_REGISTRATION: 'LOGIN_FAILED_AFTER_REGISTRATION',\n REGISTRATION_COMPLETED: 'REGISTRATION_COMPLETED',\n HYBRID_ALERT: 'HYBRID_ALERT',\n HYBRID_OPEN_MAIL: 'HYBRID_OPEN_MAIL',\n HYBRID_UPDATE_INFO_KEY : 'HYBRID_UPDATE_INFO_KEY',\n NYX_GAME_REVEALED: 'NYX_GAME_REVEALED',\n FIREBASE_GOT_NEW_TOKEN: 'FIREBASE_GOT_NEW_TOKEN',\n TOUCH_ID_GET_TOKEN_FROM_SRV: 'TOUCH_ID_GET_TOKEN_FROM_SRV',\n TOUCH_ID_INIT_SCREEN_SHOW: 'TOUCH_ID_INIT_SCREEN_SHOW',\n TOUCH_ID_TRY_AGAIN_SKIP: 'TOUCH_ID_TRY_AGAIN_SKIP',\n TOUCH_ID_CHECK_TOKEN_ENABLE: 'TOUCH_ID_CHECK_TOKEN_ENABLE',\n TOUCH_ID_TOKEN_ENABLE_RES: 'TOUCH_ID_TOKEN_ENABLE_RES',\n TOUCH_ID_CLEAR_TOKEN: 'TOUCH_ID_CLEAR_TOKEN',\n TOUCH_ID_NATIVE_CANCEL: 'TOUCH_ID_NATIVE_CANCEL',\n TOUCH_ID_LOGIN_ERROR: 'TOUCH_ID_LOGIN_ERROR',\n TOUCH_ID_AUTO_LOGIN: 'TOUCH_ID_AUTO_LOGIN',\n TOUCH_ID_STATE_CHANGED: 'TOUCH_ID_STATE_CHANGED',\n WEB_VIEW_NAVIGATE_GAME: 'WEB_VIEW_NAVIGATE_GAME',\n WEB_VIEW_NAVIGATE_DEPOSIT_WIDGET: 'WEB_VIEW_NAVIGATE_DEPOSIT_WIDGET',\n WEB_VIEW_NAVIGATE_MIT_ID: 'WEB_VIEW_NAVIGATE_MIT_ID',\n WEB_VIEW_NAVIGATE_SPID: 'WEB_VIEW_NAVIGATE_SPID',\n WEB_VIEW_NAVIGATE_CASHIER: 'WEB_VIEW_NAVIGATE_CASHIER',\n SECOND_WEB_VIEW_OLD_CALL: 'SECOND_WEB_VIEW_OLD_CALL',\n SECOND_WEB_VIEW_CLOSE: 'SECOND_WEB_VIEW_CLOSE',\n SECOND_WEB_VIEW_OPEN: 'SECOND_WEB_VIEW_OPEN',\n SECOND_WEB_VIEW_CLOSE_ALL: 'SECOND_WEB_VIEW_CLOSE_ALL',\n SECOND_WEB_VIEW_CLOSE_NYX: 'SECOND_WEB_VIEW_CLOSE_NYX',\n FABRIC_ADD_EVENT : 'FABRIC_ADD_EVENT',\n ADD_TAG_OPEN_APP_VER : 'ADD_TAG_OPEN_APP_VER',\n ADD_TAG : 'ADD_TAG',\n REM_TAG : 'REM_TAG',\n DEEPLINK_RECEIVED: 'DEEPLINK_RECEIVED',\n ROUTE_CHANGED: 'ROUTE_CHANGED',\n RESTRICTIONS_CHANGED: 'RESTRICTIONS_CHANGED',\n SESSION_TIMER_UPDATE: 'SESSION_TIMER_UPDATE',\n WINDOW_FOCUS_GAIN: 'WINDOW_FOCUS_GAINED',\n WINDOW_FOCUS_LOSS: 'WINDOW_FOCUS_LOST',\n GEO_HYBRID_UPDATE_ENABLE : 'GEO_HYBRID_UPDATE_ENABLE',\n GEO_HYBRID_GT_CB : 'GEO_HYBRID_GT_CB',\n GEO_HYBRID_GET_LOCATION : 'GEO_HYBRID_GET_LOCATION',\n GEO_HYBRID_GET_LOCATION_RES : 'GEO_HYBRID_GET_LOCATION_RES',\n GEO_RESTRICTIONS_UPDATE: 'GEO_RESTRICTIONS_UPDATE',\n GEO_PERIODIC_UPDATE: 'GEO_PERIODIC_UPDATE',\n SESSION_EVENT_KICK: 'SESSION_EVENT_KICK',\n SESSION_EVENT_WALLET: 'SESSION_EVENT_WALLET',\n SESSION_EVENT_OMG_RECEIVED: 'SESSION_EVENT_OMG_RECEIVED',\n SESSION_EVENT_FREE_PLAY_REMOVED: 'SESSION_EVENT_FREE_PLAY_REMOVED',\n SESSION_EVENT_FREE_PLAY_BATCH_ADDED: 'SESSION_EVENT_FREE_PLAY_BATCH_ADDED',\n SESSION_EVENT_FREE_PLAY_BATCH_UPDATED: 'SESSION_EVENT_FREE_PLAY_BATCH_UPDATED',\n SESSION_EVENT_FREE_PLAY_BATCH_REMOVED: 'SESSION_EVENT_FREE_PLAY_BATCH_REMOVED',\n\tSESSION_EVENT_NET_POSITION_UPDATE: 'SESSION_EVENT_NET_POSITION_UPDATE',\n SESSION_EVENT_RECEIVED_TOASTER: 'SESSION_EVENT_RECEIVED_TOASTER',\n SESSION_EVENT_UPDATERESTRICTION_RECEIVED: 'SESSION_EVENT_UPDATERESTRICTION_RECEIVED',\n SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED: 'SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED',\n SECOND_WEB_VIEW_NAVIGATE_SPORT: 'SECOND_WEB_VIEW_NAVIGATE_SPORT',\n TIME_UPDATED_FROM_SERVER: 'TIME_UPDATED_FROM_SERVER',\n ON_BROWSER_PAGE_HIDE: 'ON_BROWSER_PAGE_HIDE',\n\tTOKEN_LIFETIME_EXPIRED: 'TOKEN_LIFETIME_EXPIRED',\n\tLIVE_TABLES_UPDATE: 'LIVE_TABLES_UPDATE',\n LOADING_INDICATOR_EMBEDDED_UPDATE: 'LOADING_INDICATOR_EMBEDDED_UPDATE',\n LOADING_INDICATOR_EMBEDDED_UPDATE_V2: 'LOADING_INDICATOR_EMBEDDED_UPDATE_V2',\n LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X: 'LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X',\n GAME_SEQUENCE_FINISH: 'GAME_SEQUENCE_FINISH',\n GAME_POPUP_SHOW: 'GAME_POPUP_SHOW',\n USER_APPROVE_GAME_POPUP: 'USER_APPROVE_GAME_POPUP',\n BONUS_ABUSE_PARKING_MONEY : 'BONUS_ABUSE_PARKING_MONEY',\n SHOW_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW : 'SHOW_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW',\n CLOSE_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW : 'CLOSE_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW',\n DEPOSIT_WIDGET_CLOSED : 'DEPOSIT_WIDGET_CLOSED',\n FREE_TO_PLAY_WIDGET_CLOSED : 'FREE_TO_PLAY_WIDGET_CLOSED',\n LOCATION_POPUP_OPEN : 'LOCATION_POPUP_OPEN',\n LOCATION_POPUP_CLOSED : 'LOCATION_POPUP_CLOSED',\n PLAYER_MESSAGES_STRATEGY_READY: 'PLAYER_MESSAGES_STRATEGY_READY',\n OMG_DISPLAYED: 'OMG_DISPLAYED',\n LIVE_GAME_SWITCHED: 'LIVE_GAME_SWITCHED',\n PROMOTIONS_CHANGED: 'PROMOTIONS_CHANGED',\n ODR_CLEAR_ALL_GAMES: 'ODR_CLEAR_ALL_GAMES',\n SERIAL_UPDATE: 'SERIAL_UPDATE',\n APPS_FLAYER_READY : 'APPS_FLAYER_READY',\n DEEP_LINK_READY: 'DEEP_LINK_READY',\n GAMBLING_SESSION_UPDATE: 'GAMBLING_SESSION_UPDATE',\n GAMBLING_SESSION_ACTION: 'GAMBLING_SESSION_ACTION',\n EXPLORE_SWIPE: 'EXPLORE_SWIPE'\n};\n\n/**\n * Client event symbols, used internally for identifying events uniquely.\n */\nconst CLIENT_EVENTS = {\n MENU_CLICKED: 'MENU_CLICKED',\n LOGIN_BUTTON_CLICKED: 'LOGIN_BUTTON_CLICKED',\n REALITY_CHECK_OPENED: 'REALITY_CHECK_OPENED',\n REALITY_CHECK_CLOSED: 'REALITY_CHECK_CLOSED'\n};\n\nconst USER_EVENTS = {\n ON_CLICK: 'click',\n ON_DOUBLE_CLICK: 'dblclick',\n ON_SUBMIT: 'submit',\n ON_MOUSE_MOVE: 'mousemove',\n ON_MOUSE_DOWN: 'mousedown',\n ON_KEY_PRESS: 'keypress',\n ON_DOM_MOUSE_SCROLL: 'DOMMouseScroll',\n ON_MOUSE_WHEEL: 'mousewheel',\n ON_TOUCH_START: 'touchstart',\n ON_TOUCH_MOVE: 'touchmove',\n ON_TOUCH_END: 'touchend',\n ON_MSPOINTER_MOVE: 'MSPointerMove',\n ON_RESIZE: 'resize',\n ON_FOCUS: 'focus',\n ON_CHANGE: 'change',\n ON_BLUR: 'blur'\n};\n\nconst USER_ACTIVITY_EVENTS_ALL = [\n SYSTEM_EVENTS.MESSAGE_CLOSE,\n SYSTEM_EVENTS.FULL_SCREEN_CHANGE,\n SYSTEM_EVENTS.APP_RESUMED,\n SYSTEM_EVENTS.PLAYER_ACTION,\n SYSTEM_EVENTS.BALANCE_UPDATED,\n\tSYSTEM_EVENTS.EXTEND_USER_TIME_TO_LIVE,\n SYSTEM_EVENTS.GAME_OPEN,\n SYSTEM_EVENTS.CLOSE_GAME,\n SYSTEM_EVENTS.EXPLORE_SWIPE\n];\n\n/**\n * we need this because app resume in hybrid poker nj happen every few minutes because they save the screen open.\n * so the user will ever have inactivity kick.\n * @type {[string,string,string,string,string,string,string,string,string,string]}\n */\nconst USER_ACTIVITY_EVENTS_FOR_HYBRID = [\n SYSTEM_EVENTS.MESSAGE_CLOSE,\n SYSTEM_EVENTS.FULL_SCREEN_CHANGE,\n SYSTEM_EVENTS.PLAYER_ACTION,\n SYSTEM_EVENTS.BALANCE_UPDATED,\n SYSTEM_EVENTS.EXTEND_USER_TIME_TO_LIVE,\n SYSTEM_EVENTS.GAME_OPEN,\n SYSTEM_EVENTS.CLOSE_GAME,\n SYSTEM_EVENTS.POST_MESSAGE_ARRIVE,\n SYSTEM_EVENTS.EXPLORE_SWIPE\n];\n\nexport {SYSTEM_EVENTS, CLIENT_EVENTS, USER_EVENTS, USER_ACTIVITY_EVENTS_ALL, USER_ACTIVITY_EVENTS_FOR_HYBRID};","export const CGP_ERROR_CODES = {\n GENERAL_ERROR_SUPPORT: 100000,\n RESTRICTED_COUNTRY: 100105,\n INVALID_CREDENTIALS: 110,\n LOGIN_RESTRICTION: 100115,\n INVALID_REFRESH_TOKEN: 100120,\n CAPTCHA_REQUIRED: 170,\n TOUCH_ID_CHANGE_PASS: 100300,\n TOUCH_ID_EXPIRE: 100305,\n GENERAL_ERROR: 900000,\n OPENING_GAME_ERROR: 100205,\n UNSUPPORTED_ANONYMOUS: 100210,\n TIME_LIMIT_REACHED_DAILY: 100155,\n TIME_LIMIT_REACHED_WEEKLY: 100180,\n TIME_LIMIT_REACHED_MONTHLY: 100181,\n\n TOKEN_NOT_VALID: 20,\n PENDING_ACTION_REQUIRED: 50,\n INVALID_GRANT: 'invalid_grant'\n};\n\n\nexport function isRefreshTokenError(errorCode: string): boolean {\n errorCode = errorCode?.toString();\n return errorCode === CGP_ERROR_CODES.INVALID_REFRESH_TOKEN.toString() || errorCode === CGP_ERROR_CODES.INVALID_GRANT;\n}\n","import GenericRestrictionValue from \"../restrictions/values/generic_restriction_value\";\n\nexport const PLATFORM_TYPES = {\n\tALL: 'All',\n\tMOBILE: 'Mobile',\n\tPC: 'PC',\n\tNONE: 'None',\n};\n\nexport type RegulationApprovalValues = [boolean, boolean] | boolean;\nexport type RegulationApprovalsType = boolean | Record<number, RegulationApprovalValues> | undefined;\n\nexport enum VOLATILITY_LIMITS {\n Low = 40.45142,\n Medium = 44.16644\n}\n\nexport enum GAME_VOLATILITY {\n\tNone = -1,\n Low = 0,\n Medium = 1,\n High = 2\n};\n\nexport interface ILocalizedGameInfo {\n\tgameType: number;\n\texternalGameCode: string;\n\texternalGameSubType: string;\n\ttitle: string;\n\thasJackpot: boolean;\n\tvendorId: number;\n\tvendorName: string;\n\tcompanyId?: number;\n\tcompanyName: string;\n\tgameGroup: string;\n\tsubGroupName: string;\n\tgameGroupId: number;\n\tisAnonymousSupported: boolean;\n\tnumberOfLines?: number;\n\thasFreeSpins: boolean;\n\tallowedPlatformType: string;\n\thasSideBets: boolean;\n\tisMultiHand: boolean;\n\tmaxBetPerSpot?: number;\n\tnumberOfDecks?: number;\n\thasBonusGames: boolean;\n\tminBet: any;\n\tmaxBet: any;\n\tapprovals: RegulationApprovalsType;\n\trestriction?: GenericRestrictionValue;\n\tisCurrentPlatformAllowed?: boolean;\n\tisEliteLounge: boolean;\n\tallowWithdrawOnlyFromReal: boolean;\n\tmaxBetPerBrand?: number;\n\treadonly showSwitchGameMode?: boolean;\n\treadonly gameThemes: number[];\n\treadonly volatility: GAME_VOLATILITY;\n readonly isChildish?: boolean;\n readonly hasNonChildishIcon?: boolean;\n readonly hasLessNonChildishIcon?: boolean;\n}\n\nexport type GAMES_INFO = { [key: number]: ILocalizedGameInfo };\n\nexport default interface IGamesInformationService {\n\tgetGamesInfoWithoutAnyFiltering(gameTypes: number[]): Promise<GAMES_INFO>;\n\tgetGamesInfo(gameTypes: number[], overrideUnfilteredGames?: boolean): Promise<GAMES_INFO>;\n\tisGameAllowedAndExistsInHybrid(gameInfo: ILocalizedGameInfo): boolean;\n\tgetAllGameTypes(): Promise<number[]>;\n\tgetGamesSubTypesMappings(gameSubTypes?: string[]): { [key: string]: number };\n\tgetAllGamesInfo(): Promise<GAMES_INFO>;\n\tgetDiagnosticMessages(): string;\n\tisVideoSlotOrVideoPokerOrScratchCardsGameGroup(gameGroupId: number): boolean;\n\tisVideoSlotOrSlotsGameGroup(gameGroupId: number): boolean;\n\tisRouletteOrBlackjackOrBaccarat(gameGroupId: number): boolean;\n isLiveGamesGroup(gameGroupId: number): boolean;\n\treadonly themes: {[key: number]: string};\n\treadonly vendors: {[key: number]: string};\n\treadonly companies: {[key: number]: string};\n}\n","const TOKEN_PROPERTIES = {\n OAUTH_STORAGE_KEY: 'oAuth2',\n OAUTH_EXPIRE_KEY_IN_STORAGE: 'oAuth2.expireIn',\n OAUTH_LAST_REFRESH_TOKEN_TIMESTAMP: 'oAuth2.lastLoginTimeStamp',\n OAUTH_LAST_USER_DATA: 'oAuth2.userData',\n OAUTH_LAST_SESSION_DATA: 'oAuth2.lastSession',\n OAUTH_HAS_REMEMBER_ME: 'oAuth2.hasRememberMe',\n OAUTH_LAST_TIME_ACTIVITY: 'oAuth2.lastTimeActivity',\n OAUTH_CUSTOM_SESSION_TIMEOUT: 'oAuth2.customSessionTimeout',\n OAUTH_ACCESS_TOKEN: 'oAuth2.access_token',\n OAUTH_TOKEN_FIELDS_OVERRIDES: 'oAuth2.tokenFieldsOverrides',\n};\nconst GRANT_TYPES = {\n PASSWORD: 'password',\n REFRESH_TOKEN: 'refresh_token',\n AUTOLOGIN: 'autologin'\n};\nconst OAUTH2_CSS = {\n AUTHORIZED_USER_CLASS: 'cgp-authorized-user'\n};\n\nconst HTTP = {\n OK: 200\n};\nconst OAUTH_TOKEN_ERRORS = {\n INVALID_GRANT: 'invalid_grant'\n};\nconst LOGIN_TYPE = {\n NEW_LOGIN: 1,\n AUTOLOGIN: 3\n};\n\nconst ID_VERIFICATION_STATUS = {\n AGE_VERIFIED: 1,\n ADDRESS_VERIFIDED: 1\n};\n\nconst LOGOUT_REASONS = {\n EXPLICIT_LOGOUT: 1,\n USER_IDLE: 2,\n AUTOLOGIN_FAILED: 3,\n REFRESH_TOKEN_FAILED: 4,\n ACCESS_TOKEN_REMOVED: 5,\n USER_KICKED: 6,\n CLIENT_SIDE_LOGOUT: 7,\n\n};\n\nexport { TOKEN_PROPERTIES, HTTP, GRANT_TYPES, OAUTH2_CSS, OAUTH_TOKEN_ERRORS, LOGIN_TYPE, ID_VERIFICATION_STATUS, LOGOUT_REASONS };\n\n\n","import {IMessageData, MESSAGE_ANIMATION_TYPE, MESSAGE_DISPLAY_MODE, PLATFORM_MESSAGE_TYPE} from \"../firebase_const\";\n\nexport enum MESSAGE_TYPE {\n ADDED= \"added\",\n REMOVED=\"removed\",\n}\n\nexport type OpenWithinGameType = '0' | '1';\n\nexport interface IOMGParsedData{\n MessageDataJson: string;\n Messages: string;\n OmgType: string;\n OpenedWithinGame: OpenWithinGameType;\n}\n\nexport interface IReceivedMessage<TMessage extends IMessageData = IMessageData> {\n data: TMessage;\n id: string;\n type: MESSAGE_TYPE;\n}\n\nexport interface IMessageDataJson {\n DisplayMode: MESSAGE_DISPLAY_MODE;\n AnimationType: MESSAGE_ANIMATION_TYPE;\n}\n\nexport enum GamblingSessionActionType {\n LossLimitReached = 0,\n TimeLimitReached = 1,\n TimeReminder = 2,\n AdvancedWarningNetLossLimit = 3,\n AdvancedWarningTimeLimit = 4\n}\n\nexport interface IGamblingSessionActionEvent {\n PlatformMessagesType: PLATFORM_MESSAGE_TYPE;\n MessageDataJson: string;\n\n}\n\nexport interface IGamblingSessionActionDataReceivedFromPlatform {\n MessageType: GamblingSessionActionType;\n SessionTotalWins: number;\n SessionTotalBets: number;\n SessionDurationInSeconds: number;\n MessageTimeStamp: string;\n SessionId: string;\n CorrelationID: string;\n}\n\nexport interface IGamblingSessionActionData {\n messageType: GamblingSessionActionType;\n sessionTotalWins: number;\n sessionTotalBets: number;\n sessionDurationInSeconds: number;\n messageTimeStamp: string;\n gamblingSessionId: string;\n correlationID: string;\n}\n\nexport interface IGamblingSessionActionMessage extends IReceivedMessage<IGamblingSessionActionEvent> {\n\n}\n\n","\nconst REGULATION_CODE_TYPES = {\n COM: 0,\n ITALY: 1,\n SPAIN: 2,\n NEVADA: 3,\n GIB: 4,\n NJ: 7,\n DK: 8,\n ROMANIA: 9,\n GERMANY: 12,\n PORTUGAL: 14,\n SWEDEN: 15,\n MALTA: 16,\n SH: 18,\n MICHIGAN: 19,\n CANADA_ONTARIO: 21,\n NETHERLANDS: 22,\n UK: 255\n};\n\n\nconst REGULATION_NAMES = {\n [REGULATION_CODE_TYPES.ITALY]: 'Italy',\n [REGULATION_CODE_TYPES.SPAIN]: 'Spain',\n [REGULATION_CODE_TYPES.NEVADA]: 'Nevada',\n [REGULATION_CODE_TYPES.GIB]: 'Gibraltar',\n [REGULATION_CODE_TYPES.NJ]: 'NewJersey',\n [REGULATION_CODE_TYPES.DK]: 'Denmark',\n [REGULATION_CODE_TYPES.PORTUGAL]: 'Portugal',\n [REGULATION_CODE_TYPES.SWEDEN]: 'Sweden',\n [REGULATION_CODE_TYPES.UK]: 'UK',\n [REGULATION_CODE_TYPES.MALTA]: 'Malta',\n [REGULATION_CODE_TYPES.ROMANIA]: 'Romania',\n [REGULATION_CODE_TYPES.GERMANY]: 'Germany',\n [REGULATION_CODE_TYPES.CANADA_ONTARIO]: 'Ontario',\n [REGULATION_CODE_TYPES.NETHERLANDS]: 'Netherlands',\n [REGULATION_CODE_TYPES.MICHIGAN]: 'Michigan'\n};\n\n\nconst REGULATION_SUFFIX = {\n [REGULATION_CODE_TYPES.COM]: 'com',\n [REGULATION_CODE_TYPES.ITALY]: 'it',\n [REGULATION_CODE_TYPES.SPAIN]: 'es',\n [REGULATION_CODE_TYPES.NEVADA]: 'nev',\n [REGULATION_CODE_TYPES.GIB]: 'gib',\n [REGULATION_CODE_TYPES.NJ]: 'nj',\n [REGULATION_CODE_TYPES.DK]: 'dk',\n [REGULATION_CODE_TYPES.PORTUGAL]: 'pt',\n [REGULATION_CODE_TYPES.SWEDEN]: 'sw',\n [REGULATION_CODE_TYPES.UK]: 'uk',\n [REGULATION_CODE_TYPES.MALTA]: 'mt',\n [REGULATION_CODE_TYPES.ROMANIA]: 'ro',\n [REGULATION_CODE_TYPES.CANADA_ONTARIO]: 'ont',\n [REGULATION_CODE_TYPES.NETHERLANDS]: 'nl',\n [REGULATION_CODE_TYPES.MICHIGAN]: 'mi'\n};\n\nconst REGULATION_STATUS_ID_MAP = {\n APPROVED_FOR_REGULATION: 0,\n PENDING_VERIFICATION : 1,\n PENDING_DOCUMENTS: 2\n};\n\nconst BRANDS = {\n COM : 0,\n NJ888 : 73,\n SPAIN: 58,\n CANADA: 87,\n MICHIGAN: 91,\n MRGREEN_SE: 92,\n MRGREEN_GER: 93,\n MRGREEN_DK: 94,\n};\n\n\nexport {REGULATION_CODE_TYPES, REGULATION_NAMES, REGULATION_SUFFIX, BRANDS, REGULATION_STATUS_ID_MAP};\n","/**\n * Created by andreyna on 7/25/2016.\n */\n\n/*\n * DateFormatter based on DateFormat of Steven Levithan <stevenlevithan.com>\n * Date Format 1.2.3\n * (c) 2007-2009 Steven Levithan <stevenlevithan.com>\n * MIT license\n *\n * Accepts a date, a mask, or a date and a mask.\n * Returns a formatted version of the given date.\n * The date defaults to the current date/time.\n * The mask defaults to dateFormat.masks.default.\n *\n * Url: http://blog.stevenlevithan.com/archives/date-time-format\n */\n\nclass DateFormatter {\n\n private _token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|[LloSZ]|\"[^\"]*\"|'[^']*'/g;\n\n private _timezone = /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g;\n\n private _timezoneClip = /[^-+\\dA-Z]/g;\n\n // Some common format strings\n private _masks = {\n \"default\": \"ddd mmm dd yyyy HH:MM:ss\",\n shortDate: \"m/d/yy\",\n mediumDate: \"mmm d, yyyy\",\n longDate: \"mmmm d, yyyy\",\n fullDate: \"dddd, mmmm d, yyyy\",\n shortTime: \"h:MM TT\",\n mediumTime: \"h:MM:ss TT\",\n longTime: \"h:MM:ss TT Z\",\n isoDate: \"yyyy-mm-dd\",\n isoTime: \"HH:MM:ss\",\n isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\",\n shortTime12: \"h:MM TT\",\n shortTime24: \"HH:MM\"\n }\n\n // Internationalization strings\n private _i18n = {\n dayNames: [\n \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\",\n \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"\n ],\n monthNames: [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n ]\n }\n\n\n /*\n * Samples:\n * format(\"longTime\");\n * format(\"UTC:h:MM:ss TT Z\");\n * format(now, \"dddd, mmmm dS, yyyy, h:MM:ss TT\")\n * format(\"Jun 9 2007\", \"fullDate\");\n *\n * Default formats:\n * -------------------------------------------------------------------------\n * Name\tMask Example\n * -------------------------------------------------------------------------\n * default \tddd mmm dd yyyy HH:MM:ss\tSat Jun 09 2007 17:46:21\n * shortDate \tm/d/yy\t6/9/07\n * mediumDate \tmmm d, yyyy\tJun 9, 2007\n * longDate \tmmmm d, yyyy\tJune 9, 2007\n * fullDate \tdddd, mmmm d, yyyy\tSaturday, June 9, 2007\n * shortTime\t h:MM TT\t5:46 PM\n * mediumTime\t h:MM:ss TT\t5:46:21 PM\n * longTime\t h:MM:ss TT Z\t5:46:21 PM EST\n * isoDate\t yyyy-mm-dd\t2007-06-09\n * isoTime\t HH:MM:ss\t17:46:21\n * isoDateTime\t yyyy-mm-dd'T'HH:MM:ss\t2007-06-09T17:46:21\n * isoUtcDateTime\tUTC:yyyy-mm-dd'T'HH:MM:ss'Z'\t2007-06-09T22:46:21Z\n * -------------------------------------------------------------------------\n *\n * -------------------------------------------------------------------------\n * Masks:\n * -------------------------------------------------------------------------\n * Mask\t Description\n * -------------------------------------------------------------------------\n * d\t\t\tDay of the month as digits; no leading zero for single-digit days.\n * dd\t\t\tDay of the month as digits; leading zero for single-digit days.\n * ddd\t\t\tDay of the week as a three-letter abbreviation.\n * dddd\t\t\tDay of the week as its full name.\n * m\t\t\tMonth as digits; no leading zero for single-digit months.\n * mm\t\t\tMonth as digits; leading zero for single-digit months.\n * mmm\t\t\tMonth as a three-letter abbreviation.\n * mmmm\t\t\tMonth as its full name.\n * yy\t\t\tYear as last two digits; leading zero for years less than 10.\n * yyyy\t\t\tYear represented by four digits.\n * h\t\t\tHours; no leading zero for single-digit hours (12-hour clock).\n * hh\t\t\tHours; leading zero for single-digit hours (12-hour clock).\n * H\t\t\tHours; no leading zero for single-digit hours (24-hour clock).\n * HH\t\t\tHours; leading zero for single-digit hours (24-hour clock).\n * M\t\t\tMinutes; no leading zero for single-digit minutes. Uppercase M unlike CF timeFormat's m to avoid conflict with months.\n * MM\t\t\tMinutes; leading zero for single-digit minutes. Uppercase MM unlike CF timeFormat's mm to avoid conflict with months.\n * s\t\t\tSeconds; no leading zero for single-digit seconds.\n * ss\t\t\tSeconds; leading zero for single-digit seconds.\n * l or L\t\tMilliseconds. l gives 3 digits. L gives 2 digits.\n * t\t\t\tLowercase, single-character time marker string: a or p.\n * tt\t\t\tLowercase, two-character time marker string: am or pm.\n * T\t\t\tUppercase, single-character time marker string: A or P. Uppercase T unlike CF's t to allow for user-specified casing.\n * TT\t\t\tUppercase, two-character time marker string: AM or PM. Uppercase TT unlike CF's tt to allow for user-specified casing.\n * Z\t\t\tUS timezone abbreviation, e.g. EST or MDT. With non-US timezones or in the Opera browser, the GMT/UTC offset is returned, e.g. GMT-0500.\n * o\t\t\tGMT/UTC timezone offset, e.g. -0500 or +0230.\n * S\t\t\tThe date's ordinal suffix (st, nd, rd, or th). Works well with d.\n * '…' or \"…\"\tLiteral character sequence. Surrounding quotes are removed.\n * UTC\t\t\tMust be the first four characters of the mask. Converts the date from local time to UTC/GMT/Zulu time before applying the mask. The \"UTC:\" prefix is removed.\n */\n format(date: any, mask?: string, utc?: boolean): string {\n // You can't provide utc if you skip other args (use the \"UTC:\" mask prefix)\n if (arguments.length === 1 && Object.prototype.toString.call(date) === \"[object String]\" && !/\\d/.test(date)) {\n mask = date;\n date = undefined;\n }\n\n // Passing date through Date applies Date.parse, if necessary\n date = date ? new Date(date) : new Date();\n if (isNaN(date)) {\n throw SyntaxError(\"invalid date\");\n }\n\n mask = String(this._masks[mask] || mask || this._masks[\"default\"]);\n\n // Allow setting the utc argument via the mask\n if (mask.slice(0, 4) === \"UTC:\") {\n mask = mask.slice(4);\n utc = true;\n }\n\n let _ = utc ? \"getUTC\" : \"get\",\n d = date[_ + \"Date\"](),\n D = date[_ + \"Day\"](),\n m = date[_ + \"Month\"](),\n y = date[_ + \"FullYear\"](),\n H = date[_ + \"Hours\"](),\n M = date[_ + \"Minutes\"](),\n s = date[_ + \"Seconds\"](),\n L = date[_ + \"Milliseconds\"](),\n o = utc ? 0 : date.getTimezoneOffset(),\n flags = {\n d: d,\n dd: this._pad(d),\n ddd: this._i18n.dayNames[D],\n dddd: this._i18n.dayNames[D + 7],\n m: m + 1,\n mm: this._pad(m + 1),\n mmm: this._i18n.monthNames[m],\n mmmm: this._i18n.monthNames[m + 12],\n yy: String(y).slice(2),\n yyyy: y,\n h: H % 12 || 12,\n hh: this._pad(H % 12 || 12),\n H: H,\n HH: this._pad(H),\n M: M,\n MM: this._pad(M),\n s: s,\n ss: this._pad(s),\n l: this._pad(L, 3),\n L: this._pad(L > 99 ? Math.round(L / 10) : L),\n t: H < 12 ? \"a\" : \"p\",\n tt: H < 12 ? \"am\" : \"pm\",\n T: H < 12 ? \"A\" : \"P\",\n TT: H < 12 ? \"AM\" : \"PM\",\n Z: utc ? \"UTC\" : (String(date).match(this._timezone) || [\"\"]).pop().replace(this._timezoneClip, \"\"),\n o: (o > 0 ? \"-\" : \"+\") + this._pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),\n S: [\"th\", \"st\", \"nd\", \"rd\"][d % 10 > 3 ? 0 : ((d % 100 - d % 10) !== 10 ? 1 : 0) * d % 10]\n };\n\n return mask.replace(this._token, ($0) => {\n return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);\n });\n }\n\n private _pad(val: number, len: number = 2): string {\n let valAsString = String(val);\n while (valAsString.length < len) {\n valAsString = \"0\" + valAsString;\n }\n return valAsString;\n }\n\n formatCurrentDateToUtc(): string {\n return this.format(new Date(), 'UTC:yyyy-mm-dd\\'T\\'HH:MM:ss\\'Z\\'');\n }\n\n formatUtc(date: Date): string {\n return this.format(date, 'UTC:yyyy-mm-dd\\'T\\'HH:MM:ss\\'Z\\'');\n }\n}\n\nexport default new DateFormatter();","export interface SystemEventSubscription {\n off(): void;\n}\n\n/**\n * Event based module, publish / subscribe with hierarchical events and notifications.\n *\n * Usage:\n * Event.on('test_one_event', function() {\n * console.log('test 1 event fired');\n * console.log(arguments);\n * });\n *\n * Event.once('test_two_event', function() {\n * console.log('test 2 event fired, once.');\n * console.log(arguments);\n * });\n *\n * var three = Event.on('test_three_event', function() {\n * console.log('test 3 event fired');\n * });\n *\n * Event.fire('test_one_event', {eventID: 1}); // fires ok\n * Event.fire('test_two_event', {eventID: 2}); // fires ok\n * Event.fire('test_two_event', {eventID: 3}); // didnt trigger the event since it was unsubscribed (subscribed once only)\n * three.off(); // will remove the test_three_event\n * Event.fire('test_three_event', {eventID: 4}); // didnt trigger, was remove line above.\n *\n *\n */\nclass Event {\n /**\n * @constructor\n */\n constructor() {\n this._subscriptions = {};\n }\n\n private _subscriptions: any;\n\n /**\n * Attach a callback to an EventName\n */\n on(name: string | string[], callback: Function, context?: any): SystemEventSubscription {\n\n if(!(name)) {\n throw new Error('The name argument for Event.on is required');\n }\n\n if(!callback) {\n throw new Error('The callback argument name for Event.on is required');\n }\n\n context = context || this;\n\n // allows to subscribe multiple events for the same callback as single events. Clears the syntax on the other end.\n if (Array.isArray(name)) {\n let cleanFunctions: SystemEventSubscription[] = [];\n for (let eventIdx = 0, len = name.length, eventName; eventIdx < len; eventIdx++) {\n eventName = name[eventIdx];\n cleanFunctions.push(this.on(eventName, callback, context));\n }\n\n // Quit after done.\n return {\n off: () => cleanFunctions.forEach(subscription => subscription.off())\n };\n }\n\n if ('undefined' === typeof this._subscriptions[name]) {\n this._subscriptions[name] = [];\n }\n\n this._subscriptions[name].push({\n callback: callback,\n context: context\n });\n\n // return back a clean remove function with the params encapsulated\n return ((eName, eCallback, eContext): SystemEventSubscription => {\n return {\n off: () => {\n this.off(eName, eCallback, eContext);\n }\n };\n })(name, callback, context);\n }\n\n\n /**\n * Attach a callback to an name, but once only. Will disapear after first execution.\n *\n */\n once(name: string | string[], callback: Function, context?: any): SystemEventSubscription {\n context = context || this;\n var self = this,\n onceCallback: any = function() {\n self.off(name, onceCallback, context);\n callback.apply(this, arguments);\n };\n\n // preserve the original callback to allow subscribe once method to be removed later if needed.\n onceCallback._originalCallback = callback;\n\n return this.on(name, onceCallback, context);\n }\n\n\n /**\n * Notify subscriptions by calling their name\n */\n fire(name: string, params: any = {}) {\n let subscriptions = this.getAllSubscriptions();\n //clone the subscriptions array\n let events = [].concat(subscriptions[name] || []);\n\n events.forEach(event => {\n try {\n event.callback.call(event.context, params);\n } catch (ex) {\n console.error(ex);\n }\n });\n }\n\n\n /**\n * Remove a specific name callback from the stack.\n *\n * Used mostly internally.. but not only. A diffrent \".off\" is binded when you \".on\" and a referance to this \".off\"\n * is set.\n */\n off(name: string | string[], callback: Function, context: any): void {\n if (Array.isArray(name)) {\n name.forEach(eventName => this.off(eventName, callback, context));\n return;\n }\n context = context || this;\n\n let events = this._subscriptions[name],\n matchCallback = cb => {\n return cb === callback || cb._originalCallback === callback;\n };\n if (events === undefined) {\n return;\n }\n\n for (let eventIdx = events.length - 1; 0 <= eventIdx; eventIdx--) {\n let event = events[eventIdx];\n\n // TODO: make this code typesafe so that we can use '==='\n // eslint-disable-next-line\n if (matchCallback(event.callback) && event.context == context) {\n events.splice(eventIdx, 1);\n }\n }\n\n // if no callbacks left remove the event name from the tree completly.\n if (0 === events.length) {\n delete this._subscriptions[name];\n }\n }\n\n\n /**\n * Removes all the subscriptions by reseting the queue.\n *\n *\n * @returns {Object} this - an instance of the current running Event object.\n * @public\n */\n removeAllSubscriptions(): void {\n this._subscriptions = [];\n }\n\n\n /**\n * Get all the active subscriptions tree\n */\n getAllSubscriptions(): any {\n return this._subscriptions;\n }\n\n\n /**\n * Detach events that the object subscribe to.\n */\n detachEvents(events: any[]): void {\n // Remove reference events.\n if (!events) {\n return;\n }\n\n events.forEach((event) => {\n if (Array.isArray(event)) {\n event.forEach((cleanFn) => {\n cleanFn.off();\n });\n } else {\n event.off();\n }\n });\n }\n}\n\nexport default new Event();","import {FeatureToggleStatusEnum} from \"../../app-react/services/ab-testing/feature-toggle.view-model.interface\";\nimport {IConfigInitializationParams} from \"./config-initialization-params.interface\";\n\n\nexport const createDefaultConfigs = (params: IConfigInitializationParams) => {\n const {assetsMap} = params;\n return {\n \"seo\": {\n \"categories\": {\n \"images\": {\n \"alt\": \"SEO_IMAGE_CATEGORIES_ALT\",\n \"title\": \"SEO_IMAGE_CATEGORIES_TITLE\"\n }\n },\n \"games\": {\n \"images\": {\n \"alt\": \"SEO_IMAGE_GAME_TITLE\"\n }\n }\n },\n \"header\": {\n \"menuItemsOverride\": {\n \"pokerCrossBrandMenuItem\": {\n \"display\": true,\n \"text\": \"poker\",\n \"menuItemIcon\": \"appHeaderPokerIcon\",\n \"menuItemIconAltText\": \"CROSS_POKER_ICON_ALT_TEXT\",\n },\n \"sportCrossBrandMenuItem\": {\n \"display\": true,\n \"text\": \"sport\",\n \"menuItemIcon\": \"appHeaderSportIcon\",\n },\n \"casinoCrossBrandMenuItem\": {\n \"display\": true\n }\n },\n \"header_buttons\": {\n \"languages\": {\n \"display\": false\n },\n \"help\": {\n \"display\": true\n },\n \"search\": {\n \"display\": true\n }\n },\n \"top_header_right\": [\n \"state-cross-brand\",\n \"app-safezone\",\n \"state-selection-button\",\n \"app-help-button\",\n \"app-language-switcher\"\n ],\n \"top_header_left\": [\n \"search-box-form\",\n \"app-responsible-icons\"\n ],\n \"cross_brand\": {\n \"defaultValue\": [],\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"pc\"\n }\n ],\n \"value\": [\"pokerCrossBrandMenuItem\", \"sportCrossBrandMenuItem\"]\n }\n ]\n }\n },\n \"adminBanner\": {\n \"enabled\": false\n },\n \"onboardingTour\": {\n \"featureToggle\": FeatureToggleStatusEnum.Enabled,\n \"enabledAccordingToRegistrationTime\": true,\n \"stepIds\": [\n \"welcomeStep\",\n \"mainMenuStep\",\n \"userMenuStep\"\n ]\n },\n \"SDK\": {\n \"debug\": false,\n \"Analytics\": {\n \"GTMContainerID\": \"GTM-PQ2ZJ7J\",\n \"UATrackingID\": \"UA-66227773-1\",\n \"awaitForDataLayer\": \"true\"\n }\n },\n \"generalSettings\": {\n \"showRegisterButton\": true,\n \"gamesPreviewConfig\": {\n \"enabledOnPC\": false,\n \"shouldDisplayJackpot\": true\n }\n },\n \"miniOrbit\": {\n \"/cip\": {\n \"arenasHeaderButtons\": [\n {\n \"title\": \"LOBBY\",\n \"link\": \"/cip\",\n \"icon\": assetsMap.images.mini_orbit.arenas_header_buttons.my_casino_icon_png.toString()\n },\n {\n \"title\": \"SLOTS\",\n \"link\": \"/cip/slots\",\n \"icon\": assetsMap.images.mini_orbit.arenas_header_buttons.slots_icon_png.toString()\n },\n {\n \"title\": \"JACKPOTS\",\n \"link\": \"/cip/jackpots\",\n \"icon\": assetsMap.images.mini_orbit.arenas_header_buttons.jackpots_icon_png.toString()\n },\n {\n \"title\": \"LIVE_CASINO\",\n \"link\": \"/cip/live-casino\",\n \"icon\": assetsMap.images.mini_orbit.arenas_header_buttons.live_icon_png.toString()\n },\n {\n \"title\": \"CASINO_GAMES\",\n \"link\": \"/cip/casino-games\",\n \"icon\": assetsMap.images.mini_orbit.arenas_header_buttons.casino_games_icon_png.toString()\n }\n ]\n },\n \"/cis\": {\n \"arenasHeaderButtons\": [\n {\n \"title\": \"LOBBY\",\n \"link\": \"/cis\",\n \"icon\": assetsMap.images.mini_orbit.arenas_header_buttons.my_casino_icon_png.toString()\n },\n {\n \"title\": \"SLOTS\",\n \"link\": \"/cis/slots\",\n \"icon\": assetsMap.images.mini_orbit.arenas_header_buttons.slots_icon_png.toString()\n },\n {\n \"title\": \"CASINO_GAMES\",\n \"link\": \"/cis/casino-games\",\n \"icon\": assetsMap.images.mini_orbit.arenas_header_buttons.casino_games_icon_png.toString()\n },\n {\n \"title\": \"LIVE_CASINO\",\n \"link\": \"/cis/live-casino\",\n \"icon\": assetsMap.images.mini_orbit.arenas_header_buttons.live_icon_png.toString()\n },\n {\n \"title\": \"JACKPOTS\",\n \"link\": \"/cis/jackpots\",\n \"icon\": assetsMap.images.mini_orbit.arenas_header_buttons.jackpots_icon_png.toString()\n }\n ]\n }\n },\n \"theme\": {\n \"name\": \"casino888\"\n },\n \"arenas\": {\n \"slots\": {\n \"promotionalBanner\": {\n \"displayListPlace\": 4\n },\n \"advancedFilters\": {\n \"categories\": [\n {\n \"id\": \"volatility\",\n \"excludedFilters\": []\n },\n {\n \"id\": \"features\"\n },\n {\n \"id\": \"hasJackpot\"\n },\n {\n \"id\": \"themes\"\n },\n {\n \"id\": \"vendors\"\n }\n ]\n }\n },\n \"casinoGames\": {\n \"advancedFilters\": {\n \"categories\": [\n {\n \"id\": \"gameGroups\"\n },\n {\n \"id\": \"features\"\n },\n {\n \"id\": \"hasJackpot\"\n },\n {\n \"id\": \"vendors\"\n }\n ]\n }\n },\n \"videoSlidesArena\": {\n \"advancedFilters\": {\n \"categories\": [\n {\n \"id\": \"gameGroups\"\n },\n {\n \"id\": \"features\"\n },\n {\n \"id\": \"hasJackpot\"\n },\n {\n \"id\": \"vendors\"\n },\n {\n \"id\": \"themes\"\n }\n ]\n },\n \"slidesRules\": [\n {\n \"category\": \"videoStream\",\n \"slidesChunkSize\": 8\n },\n {\n \"category\": \"liveStream\",\n \"slidesChunkSize\": 2\n },\n {\n \"category\": \"banner\",\n \"slidesChunkSize\": 1\n },\n ],\n \"filters\": [\n {\n \"translationKey\": \"FREE_SPINS\",\n \"category\": \"features\",\n \"id\": \"freeSpins\",\n },\n {\n \"translationKey\": \"Fish\",\n \"category\": \"themes\",\n \"id\": \"theme_fish\",\n },\n {\n \"translationKey\": \"JACKPOT\",\n \"category\": \"hasJackpot\",\n \"id\": \"has-jackpot\",\n },\n {\n \"translationKey\": \"888 Exclusive\",\n \"category\": \"vendor\",\n \"id\": \"vendor_888\",\n },\n {\n \"translationKey\": \"Pragmatic\",\n \"category\": \"vendors\",\n \"id\": \"vendor_pragmatic\",\n },\n {\n \"translationKey\": \"Games Global\",\n \"category\": \"vendors\",\n \"id\": \"vendor_gamesglobal\",\n },\n {\n \"translationKey\": \"Blueprint\",\n \"category\": \"vendors\",\n \"id\": \"vendor_blueprint\",\n },\n {\n \"translationKey\": \"Greek Mythology\",\n \"category\": \"themes\",\n \"id\": \"theme_greek_mythology\",\n }\n ],\n \"swiperAnimation\": {\n \"triggerDelay\": 3000,\n \"individualAnimationDuration\": 1.5,\n \"animationAppearances\": 1\n }\n },\n \"exclusive888Games\": {\n \"advancedFilters\": {\n \"categories\": [\n {\n \"id\": \"volatility\"\n },\n {\n \"id\": \"gameGroups\"\n },\n {\n \"id\": \"features\"\n },\n {\n \"id\": \"hasJackpot\"\n },\n {\n \"id\": \"themes\"\n }\n ]\n }\n },\n \"newLiveCasinoAB\": {\n \"advancedFilters\": {\n \"categories\": [\n {\n \"id\": \"vendors\"\n },\n {\n \"id\": \"hasJackpot\"\n }\n ]\n }\n }\n },\n \"homePage\": {\n \"menuItemsOverride\": {\n \"liveCasinoMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage.livecasino_header_arena_icon_png.toString()\n },\n \"slotsMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage.slots_header_arena_icon_png.toString()\n },\n \"newGamesMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage.newgames_header_arena_icon_png.toString()\n },\n \"jackpotsMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage.jackpots_header_arena_icon_png.toString()\n },\n \"exclusive888arenaMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage._888exclusive_header_arena_icon_png.toString()\n },\n \"casinoMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage.casinogames_header_arena_icon_png.toString()\n },\n \"rouletteMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage.roulette_header_arena_icon_png.toString()\n },\n \"blackjackMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage.blackjack_header_arena_icon_png.toString()\n },\n \"scratchCardsMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage.scratchcards_header_arena_icon_png.toString()\n },\n \"videoPokerMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage.videopoker_header_arena_icon_png.toString()\n },\n \"gameShowsMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage.livegameshows_header_arena_icon_png.toString()\n },\n \"progressiveVideoSlotsMenuItem\": {\n \"menuItemIcon\": assetsMap.images.arenas.HomePage.progressive_slots_arena_icon_png.toString()\n }\n },\n },\n \"links\": {\n //Orbit links\n \"homeLink\": \"/\",\n \"jackpotsLink\": \"/jackpots/\",\n \"slotsLink\": \"/slots/\",\n \"progressiveVideoSlotsLink\": \"/progressive-video-slots/\",\n \"newGamesLink\": \"/new-games/\",\n \"exclusive888arenaLink\": \"/888-exclusive-games/\",\n \"casinoGamesLink\": \"/casino-games/\",\n \"liveCasinoLink\": \"/live-casino/\",\n \"gameShowsLink\": \"/live-casino/#filters=live-game-shows\",\n \"scratchCardsLink\": \"/scratch-cards/\",\n \"rouletteLink\": \"/roulette/\",\n \"blackjackLink\": \"/blackjack/\",\n \"videoPokerLink\": \"/video-poker/\",\n \"virtualSportsLink\": \"/virtual-sports/\",\n \"instantWinGamesLink\": \"/instant-win-games/\",\n \"gamingHistoryLink\": \"/gaming-history/\",\n \"gamingSessionHistoryLink\": \"/session-history/\",\n \"tippingHistoryLink\": \"/tipping-history/\",\n \"openBetsLink\": \"/open-bets\",\n \"videoSlideExploreLink\": \"/video-slides/\",\n\n //B2C links\n \"promotionsLink\": \"/promotions/\",\n \"promotionsCISLink\": \"\",\n \"promotionsCIPLink\": \"\",\n \"vipClubLink\": \"/vipcasinoclub/\",\n \"vipLink\": \"/vip/\",\n \"gettingStartedLink\": \"/getting-started/\",\n \"bankingLink\": \"/banking/\",\n \"blogLink\": \"\",\n\n //Brands links\n \"casinoLink\": \"\",\n \"pokerLink\": \"\",\n \"sportLink\": \"\",\n \"888clubLink\": \"\",\n \"888SiteLink\": \"\",\n \"sicomLink\": \"\",\n \"sitixLink\": \"\",\n \"sishopLink\": \"\",\n\n //Responsible gaming links\n \"responsibleGamingLink\": {\n \"url\": \"\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n \"secondaryResponsibleGamingLink\": {\n \"url\": \"\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n \"gameCareLink\": {\n \"url\": \"https://www.gamcare.org.uk/\",\n \"shouldAppendSCutToUrl\": false\n },\n \"beGambleAwareLink\": {\n \"url\": \"https://www.begambleaware.org/\",\n \"shouldAppendSCutToUrl\": false\n },\n \"safeToPlayLink\": {\n \"url\": \"/safe-to-play/\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n \"selfExclusionLink\": {\n \"url\": \"\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n \"selfTestLink\": {\n \"url\": \"\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n\n //Mobile app links\n \"downloadAppLink\": \"\",\n \"mobileAppsLink\": \"\",\n\n //other links\n \"chatLink\": {\n \"urlBuilderStrategy\": \"useGNWP\"\n },\n \"helpLink\": {\n \"urlBuilderStrategy\": \"useGNWP\"\n },\n \"gamblingCommissionLink\": {\n \"url\": \"https://www.gamblingcommission.gov.uk/public-register/business/detail/39028\",\n \"shouldAppendSCutToUrl\": false,\n \"openMode\": \"newTab\"\n },\n },\n \"menuItems\": {\n \"signUpMenuItem\": {\n \"text\": \"SIGN_UP\",\n \"dl\": \"19518\"\n },\n \"loyaltyIndicatorMenuItem\": {\n \"display\": false\n },\n \"myClubMenuItem\": {\n \"text\": \"MY_CLUB\",\n \"menuItemIcon\": \"sideMenuClub888\"\n },\n \"888clubMenuItem\": {\n \"text\": \"888CLUB\",\n \"linkId\": \"888clubLink\",\n \"menuItemIcon\": \"sideMenuClub888\"\n },\n \"homeMenuItem\": {\n \"text\": \"HOME\",\n \"linkId\": \"homeLink\",\n \"menuItemIcon\": \"sideMenuHome\"\n },\n \"jackpotsMenuItem\": {\n \"text\": \"INFO_TITLE_ARENA_JACKPOTS\",\n \"linkId\": \"jackpotsLink\",\n \"menuItemIcon\": \"sideMenuJackpots\"\n },\n \"slotsMenuItem\": {\n \"text\": \"SLOTS\",\n \"linkId\": \"slotsLink\",\n \"menuItemIcon\": \"sideMenuSlots\"\n },\n \"newGamesMenuItem\": {\n \"text\": \"INFO_TITLE_ARENA_NEW_GAMES\",\n \"linkId\": \"newGamesLink\",\n \"menuItemIcon\": \"sideMenuNewGames\"\n },\n \"exclusive888arenaMenuItem\": {\n \"text\": \"EXCLUSIVE\",\n \"linkId\": \"exclusive888arenaLink\",\n \"menuItemIcon\": \"sideMenuExclusive888\"\n },\n \"casinoMenuItem\": {\n \"text\": \"CASINO_GAMES\",\n \"linkId\": \"casinoGamesLink\",\n \"menuItemIcon\": \"sideMenuCasinoGames\"\n },\n \"liveCasinoMenuItem\": {\n \"text\": \"LIVE_CASINO\",\n \"linkId\": \"liveCasinoLink\",\n \"menuItemIcon\": \"sideMenuLiveCasino\"\n },\n \"gameShowsMenuItem\": {\n \"text\": \"GAME_SHOWS\",\n \"linkId\": \"gameShowsLink\"\n },\n \"progressiveVideoSlotsMenuItem\": {\n \"text\": \"PROGRESSIVE_SLOTS\",\n \"linkId\": \"progressiveVideoSlotsLink\"\n },\n \"scratchCardsMenuItem\": {\n \"text\": \"SCRATCHCARDS\",\n \"linkId\": \"scratchCardsLink\",\n \"menuItemIcon\": \"sideMenuScratchCards\"\n },\n \"rouletteMenuItem\": {\n \"text\": \"ROULETTE\",\n \"linkId\": \"rouletteLink\",\n \"menuItemIcon\": \"sideMenuRoulette\"\n },\n \"blackjackMenuItem\": {\n \"text\": \"BLACKJACK\",\n \"linkId\": \"blackjackLink\",\n \"menuItemIcon\": \"sideMenuBlackjack\"\n },\n \"videoPokerMenuItem\": {\n \"text\": \"VIDEO_POKER\",\n \"linkId\": \"videoPokerLink\",\n \"menuItemIcon\": \"sideMenuVideoPoker\"\n },\n \"vipMenuItem\": {\n \"text\": \"VIP\",\n \"linkId\": \"vipLink\",\n \"menuItemIcon\": \"sideMenuVip\"\n },\n \"vipClubMenuItem\": {\n \"text\": \"VIP_CLUB\",\n \"linkId\": \"vipClubLink\",\n \"menuItemIcon\": \"sideMenuVip\"\n },\n \"gettingStartedMenuItem\": {\n \"text\": \"GETTING_STARTED\",\n \"linkId\": \"gettingStartedLink\",\n \"menuItemIcon\": \"sideMenuGettingStarted\"\n },\n \"bankingMenuItem\": {\n \"text\": \"BANKING\",\n \"linkId\": \"bankingLink\",\n \"menuItemIcon\": \"sideMenuBanking\"\n },\n \"depositMenuItem\": {\n \"text\": \"DEPOSIT_SIDE_MENU\",\n \"menuItemIcon\": \"sideMenuDeposit\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"IsAuthorized\",\n \"operator\": \"equal\",\n \"value\": true\n },\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"promotionsMenuItem\": {\n \"text\": \"PROMOTIONS\",\n \"linkId\": \"promotionsLink\",\n \"menuItemIcon\": \"sideMenuPromotions\"\n },\n \"promotionsCIPMenuItem\": {\n \"text\": \"PROMOTIONS\",\n \"linkId\": \"promotionsCIPLink\",\n \"menuItemIcon\": \"sideMenuPromotions\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"_IsCIP\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"promotionsCISMenuItem\": {\n \"text\": \"PROMOTIONS\",\n \"linkId\": \"promotionsCISLink\",\n \"menuItemIcon\": \"sideMenuPromotions\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"_IsCIS\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"historyMenuItem\": {\n \"text\": \"HISTORY\",\n \"menuItemIcon\": \"historyIcon\"\n },\n \"gamingHistoryMenuItem\": {\n \"text\": \"GAMING_HISTORY\",\n \"linkId\": \"gamingHistoryLink\",\n \"menuItemIcon\": \"gamingHistoryIcon\"\n },\n \"gamingSessionHistoryMenuItem\": {\n \"text\": \"MENU_ITEM_GAMING_SESSION_HISTORY\",\n \"linkId\": \"gamingSessionHistoryLink\",\n \"menuItemIcon\": \"gamingHistoryIcon\"\n },\n \"casinoCrossBrandMenuItem\": {\n \"text\": \"casino\",\n \"linkId\": \"casinoLink\",\n \"menuItemIcon\": \"appHeaderCasinoIcon\",\n \"display\": false\n },\n \"pokerCrossBrandMenuItem\": {\n \"text\": \"888POKER\",\n \"linkId\": \"pokerLink\",\n \"menuItemIcon\": \"sideMenuPokerChip\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"sportCrossBrandMenuItem\": {\n \"text\": \"888SPORT\",\n \"linkId\": \"sportLink\",\n \"menuItemIcon\": \"sideMenuSportFootball\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"blogMenuItem\": {\n \"text\": \"BLOG\",\n \"linkId\": \"blogLink\",\n \"menuItemIcon\": \"sideMenuBlog\"\n },\n \"chatMenuItem\": {\n \"text\": \"LIVE_CHAT\",\n \"linkId\": \"chatLink\",\n \"menuItemIcon\": \"sideMenuLiveChat\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"_IsChatEligible\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"installPWAMenuItem\": {\n \"text\": \"PWA_ADD_TO_HOME_SCREEN\",\n \"menuItemIcon\": \"sideMenuDownloadApp\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"isPWAInstallable\",\n \"operator\": \"equal\",\n \"value\": true\n },\n {\n \"id\": \"operationSystem\",\n \"operator\": \"equal\",\n \"value\": \"android\"\n },\n {\n \"id\": \"_IsUkOrIrl\",\n \"operator\": \"equal\",\n \"value\": \"false\"\n },\n {\n \"id\": \"_IsAppBannerUKorIRL\",\n \"operator\": \"equal\",\n \"value\": \"false\"\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"downloadAppMenuItem\": {\n \"text\": \"DOWNLOAD_APP\",\n \"linkId\": \"downloadAppLink\",\n \"menuItemIcon\": \"sideMenuDownloadApp\"\n },\n \"mobileAppsMenuItem\": {\n \"text\": \"DOWNLOAD_APP\",\n \"linkId\": \"mobileAppsLink\",\n \"menuItemIcon\": \"mobileAppsIcon\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n },\n {\n \"id\": \"isHybrid\",\n \"operator\": \"equal\",\n \"value\": false\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"transactionHistoryMenuItem\": {\n \"text\": \"TRANSACTION_HISTORY\",\n \"menuItemIcon\": \"transactionHistoryIcon\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"cashierUploadDocumentsMenuItem\": {\n \"text\": \"UPLOAD_DOCUMENTS\",\n \"menuItemIcon\": \"uploadDocumentsIcon\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"tippingHistoryMenuItem\": {\n \"text\": \"TIPPING_HISTORY\",\n \"menuItemIcon\": \"tippingHistoryIcon\",\n \"linkId\": \"tippingHistoryLink\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"helpCenterMenuItem\": {\n \"text\": \"HELP_CENTER\",\n \"menuItemIcon\": \"helpCenterIcon\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n },\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"gameCareMenuItem\": {\n \"text\": \"\",\n \"imageOnlyRendering\": true,\n \"linkId\": \"gameCareLink\",\n \"menuItemIconSource\": \"themeImages\",\n \"menuItemIcon\": assetsMap.images.responsible_gambling.gamecare_logo_png.toString(),\n \"menuItemIconAltText\": \"GameCare\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"beGambleAwareMenuItem\": {\n \"text\": \"\",\n \"imageOnlyRendering\": true,\n \"linkId\": \"beGambleAwareLink\",\n \"menuItemIconSource\": \"themeImages\",\n \"menuItemIcon\": assetsMap.images.responsible_gambling.begambleaeare_logo_png.toString(),\n \"menuItemIconAltText\": \"BeGambleAware.org\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"controlCenterMenuItem\": {\n \"text\": \"SAFE_ZONE\",\n \"menuItemIconSource\": \"themeIcons\",\n \"menuItemIcon\": \"controlCenterIcon\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"deviceType\",\n \"operator\": \"equal\",\n \"value\": \"mobile\"\n },\n {\n \"id\": \"regulationID\",\n \"operator\": \"equal\",\n \"value\": 255\n },\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"equal\",\n \"value\": false\n }\n ],\n \"value\": true\n }\n ]\n }\n },\n \"timeSpentReminderMenuItem\": {\n \"text\": \"TSR_MENU_LINK_LABEL\",\n \"menuItemIcon\": \"timerIcon\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"AND\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"equal\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"compPointsMenuItem\": {\n \"text\": \"COMP_POINTS\",\n \"menuItemIcon\": \"compPointsIcon\",\n \"display\": {\n \"defaultValue\": true,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"_IsCIP\",\n \"operator\": \"=\",\n \"value\": true\n },\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"reverseWithdrawalMenuItem\": {\n \"text\": \"REVERSE_WITHDRAWAL\",\n \"menuItemIcon\": \"reverseWithdrawalIcon\",\n \"display\": {\n \"defaultValue\": false,\n \"statements\": [\n {\n \"condition\": \"OR\",\n \"rules\": [\n {\n \"id\": \"isMiniOrbit\",\n \"operator\": \"=\",\n \"value\": true\n }\n ],\n \"value\": false\n }\n ]\n }\n },\n \"touchIdMenuItem\": {\n \"text\": \"MENU_ITEM_TOUCH_ID\",\n \"menuItemIcon\": \"biometricLoginIcon\"\n },\n \"inactivityTimeoutSettingsMenuItem\": {\n \"text\": \"MENU_ITEM_INACTIVITY_TIMEOUT_SETTINGS\",\n \"menuItemIcon\": \"timerIcon\"\n },\n \"aboutDialogMenuItem\": {\n \"text\": \"MENU_ITEM_ABOUT\",\n \"menuItemIcon\": \"aboutIcon\"\n },\n \"hybridInfoMenuItem\": {\n \"text\": \"MENU_ITEM_HYBRID_INFO\"\n },\n \"pushNotificationsPermissionsRequest\": {\n \"text\": \"\",\n \"display\": false,\n },\n \"testRegulationSpecificMenuItem\": { //this menu item is here for demo purposes\n \"text\": \"Temp test\",\n \"display\": false\n },\n \"logoutMenuItem\": {\n \"text\": \"LOGOUT\"\n },\n \"openBetsMenuItem\": {\n \"text\": \"OPEN_BETS\",\n \"menuItemIcon\": \"openBetsIcon\",\n \"linkId\": \"openBetsLink\",\n \"display\": true\n },\n \"videoSlideExploreMenuItem\": {\n \"text\": \"EXPLORE\",\n \"menuItemIcon\": \"exploreOutlinedIcon\",\n \"linkId\": \"videoSlideExploreLink\",\n \"display\": false\n }\n\n },\n \"bottomNavigationBar\": {\n \"webAppFeatureToggle\": FeatureToggleStatusEnum.Enabled,\n \"menuItemsOrder\": [\n \"homeMenuItem\",\n \"liveCasinoMenuItem\",\n \"videoSlideExploreMenuItem\",\n \"slotsMenuItem\",\n \"casinoMenuItem\",\n \"depositMenuItem\"\n ]\n },\n \"drawer\": {\n \"userMenuItems\": [],\n \"saveGamesWidget\": {\n \"display\": false\n }\n }\n };\n}","export default {\n \"iso3\": \"eng\",\n \"iso2\": \"en\",\n \"text\": {\n \"100200\": \"We're sorry, this game seems to be restricted in your area.\",\n \"GAME_SAVED_NOTIFICATION_TEXT\": \"Saved to profile!\",\n \"GAME_SAVED_NOTIFICATION_CTA\": \"See Items\",\n \"MY_SAVED_GAMES\": \"My Saved Games\",\n \"ALL\": \"ALL\",\n \"CURRENT_LANGUAGE\": \"English\",\n \"CIP8_TITLE\": \"888CASINO GAMES\",\n \"Login\": \"LOG IN\",\n \"WITHDRAW\": \"WITHDRAW\",\n \"CASHIER\": \"Cashier\",\n \"Search\": \"Search your game...\",\n \"REWARDS\": \"Rewards\",\n \"HOME\": \"Home\",\n \"888_COM\": \"888.com\",\n \"888_POKER\": \"poker\",\n \"888_CASINO\": \"casino\",\n \"888_BINGO\": \"bingo\",\n \"888_SPORT\": \"sport\",\n \"SIGN_UP\": \"SIGN UP\",\n \"DEPOSIT_SIDE_MENU\": \"Deposit\",\n \"MY_ACCOUNT\": \"My Account\",\n \"BALANCE\": \"Current Balance\",\n \"MINI_ORBIT_BALANCE\": \"Balance:\",\n \"LOGOUT\": \"Log out\",\n \"GREETING_MORNING\": \"Good Morning\",\n \"GREETING_AFTERNOON\": \"Good Afternoon\",\n \"GREETING_EVENING\": \"Good Evening\",\n \"GREETING_NIGHT\": \"Good Night\",\n \"GREETING_DEFAULT\": \"Hello\",\n \"MRS_TITLE\": \"Mrs.\",\n \"MR_TITLE\": \"Mr.\",\n \"SLOTS\": \"Slots\",\n \"LOBBY\": \"Lobby\",\n \"SLOTS_JACKPOTS\": \"Slots & Jackpots\",\n \"CARD_TABLE_GAMES\": \"Card & Table Games\",\n \"ALL_SDM_GAMES\": \"All SDM Games\",\n \"CASINO_GAMES\": \"Casino Games\",\n \"LIVE_CASINO\": \"Live Casino\",\n \"888_EXCLUSIVE_GAMES\": \"888 Exclusive Games\",\n \"PROMOTIONS\": \"Promotions\",\n \"888SPORT\": \"Sport\",\n \"VIP_CLUB\": \"VIP Club\",\n \"PWA_INSTALL\": \"Install App\",\n \"PWA_ADD_TO_HOME_SCREEN\": \"Add to Home Screen\",\n \"PWA_TAP\": \"Tap\",\n \"PWA_QUICK_LAUNCH\": \"Quick launch {BRAND}\",\n \"GETTING_STARTED\": \"Getting Started\",\n \"BANKING\": \"Banking\",\n \"VIP\": \"VIP\",\n \"BLOG\": \"Blog\",\n \"TODAY_WINNERS\": \"Today’s Winners\",\n \"SUPPORT_ID_MESSAGE\": \"Support ID\",\n \"DEPOSIT\": \"DEPOSIT\",\n \"CHOOSE_LANG\": \"Choose your language:\",\n \"CHOOSE_COUNTRY\": \"Choose your country:\",\n \"SIGN_IN_PLAY\": \"SIGN IN & PLAY\",\n \"NEW\": \"New\",\n \"JACKPOT\": \"Jackpot\",\n \"BRAND_EXCLUSIVE_FILTER\": \"{brandName} Exclusive\",\n \"EXCLUSIVE\": \"888 Exclusive\",\n \"SI_EXCLUSIVE\": \"SI Exclusive\",\n \"1-25_LINES\": \"1-25 lines\",\n \"25_PLUS_LINES\": \"25+ lines\",\n \"INFO_TITLE_ARENA_888_EXCLUSIVE_GAMES\": \"Exclusive Games\",\n \"INFO_TEXT_ARENA_888_EXCLUSIVE_GAMES\": \"888casino is home to an exclusive selection of online casino games. Play the hottest online slots from Section8, and enjoy fantastic casino games like online Roulette, online Blackjack and Video Poker. Our exclusive casino games also include Baccarat, Keno, and instant win games. Let’s get ready for some casino fun!\",\n \"INFO_TITLE_ARENA_SLOTS\": \"Online Slots\",\n \"INFO_TITLE_ARENA_VIDEO_SLOTS\": \"Video Slots\",\n \"INFO_TEXT_ARENA_SLOTS\": \"Choose from over 1000 of the best quality slot games, anywhere online. Enjoy a wide variety of features such as Bonus Games, Expanding Wilds, Free Spins and Huge Jackpots. Hunt for treasure in ancient Egypt, uncover the Leprechaun’s coveted pot o’ gold or spin for big wins on classic fruit machines. Whatever tickles your fancy, we’ve got it!\",\n \"INFO_TITLE_ARENA_CASINO\": \"Casino Games\",\n \"INFO_TEXT_ARENA_CASINO\": \"The cards are shuffled, the wheel is spinning and your seat is waiting. Play only the very best card and table games online. Choose from a variety of Roulette games including European, American, Low, High and Super Stakes. Prefer Blackjack? Play multiple hands at the same time. From Texas Hold’em to Caribbean, be sure to find your poker preference!\",\n \"INFO_TITLE_ARENA_ROULETTE\": \"Roulette Online\",\n \"INFO_TEXT_ARENA_ROULETTE\": \"Try to hit your lucky numbers at one of 888casino’s premier online roulette tables. Choose from our wide variety of top roulette game styles including European, American and French. Whether you’re a High Roller or prefer low stakes, there’s a roulette game for you. There’s nothing like the thrill of waiting for that ball to land when you play roulette!\",\n \"INFO_TITLE_ARENA_NEW_GAMES\": \"New Games\",\n \"INFO_TEXT_ARENA_NEW_GAMES\": \" \",\n \"INFO_TITLE_ARENA_BLACKJACK\": \"Online Blackjack\",\n \"INFO_TEXT_ARENA_BLACKJACK\": \"The cards are shuffled and your seat is waiting for some of the best online blackjack games you’ll find! Play blackjack at 888casino on your own terms with Super Stakes, Side Bets and more. One hand of blackjack not enough for you? Play our Multihand Blackjack game for three chances to hit 21, at the same time!\",\n \"INFO_TITLE_ARENA_VIDEO_POKER\": \"Video Poker Online\",\n \"INFO_TEXT_ARENA_VIDEO_POKER\": \"If you think you’re a real poker pro then you’ve come to the right casino! Go for that elusive Royal Flush in our various types of video poker games. If you’re into 5-card draw or prefer the ever-popular Texas Hold’em then you’re sure to find your new favourite online video poker game at 888casino.\",\n \"INFO_TITLE_ARENA_SCRATCH_CARDS\": \"Scratch Cards Online\",\n \"INFO_TEXT_ARENA_SCRATCH_CARDS\": \"There’s nothing like a quick win on one of 888casino’s exciting scratch card games. Ideal for some strategy-free fun, pick an online scratch card in the theme of your choice. Reveal your Irish riches or discover pharaoh’s fortune, it’s up to you. Simply choose the amount you want to bet and see if you’re a scratch card winner!\",\n \"INFO_TITLE_ARENA_JACKPOTS\": \"Jackpots\",\n \"INFO_TEXT_ARENA_JACKPOTS\": \"Jackpot games are bubbling over with unbelievably huge cash prizes. Play with our slots games and you’re in lots of joy and fun. These include daily jackpots, progressive jackpots, and pooled jackpots, you are one click away from the absolute perfect play; enjoy jackpot slots games like Millionaire Genie, Mermaid’s Millions, or Noche De Los Muertos. Click it to pick it. Spin it to try your luck to win it. The fun starts NOW!\",\n \"INFO_TITLE_ARENA_ALL_GAMES\": \"All Games\",\n \"VIRTUAL_SPORTS\": \"Virtual Sports\",\n \"INFO_TITLE_ARENA_VIRTUAL_SPORTS\": \"Virtual Sports\",\n \"INFO_TEXT_ARENA_VIRTUAL_SPORTS\": \"Virtual Sports brings you a wide variety of computer-generated sports games that you’ll be able to bet on. So, whether football's your thing, or darts, or anything else, you can be sure to find what you're looking for. Enter the world of virtual betting today.\",\n \"PROMO_ELIGIBLE_GAMES\": \"Promo Eligible Games\",\n \"NETENT_SLOTS\": \"NETENT SLOTS\",\n \"BONUS\": \"Bonus\",\n \"FREE_SPINS\": \"Free Spins\",\n \"CLEAR_ALL\": \"Clear All\",\n \"FILTER\": \"Filter\",\n \"APPLY\": \"Apply\",\n \"ROULETTE\": \"Roulette\",\n \"ELITE_LOUNGE\": \"Elite Lounge\",\n \"BLACKJACK\": \"Blackjack\",\n \"PROGRESSIVE_SLOTS\": \"Progressive Slots\",\n \"BACCARAT\": \"Baccarat\",\n \"POKER\": \"Poker\",\n \"KENO\": \"Keno\",\n \"CRAPS\": \"Craps\",\n \"HIGH_LIMIT\": \"High Limit\",\n \"LANGUAGES\": \"Languages\",\n \"HELP\": \"Help\",\n \"LIVE_CHAT\": \"Live Chat\",\n \"DEMO\": \"Demo\",\n \"PLAY\": \"Play\",\n \"NOT_NOW\": \"Not now\",\n \"MAYBE_LATER\": \"Maybe later\",\n \"NO_THANKS\": \"No, thanks\",\n \"LETS_PLAY\": \"Let's Play!\",\n \"GOT_IT\": \"GOT IT!\",\n \"LIMITS\": \"Limits\",\n \"LIVE\": \"Live\",\n \"SEE_ALL\": \"See All\",\n \"WINNING_IN_THE_LAST_30_DAYS\": \"Winning in the last 30 days\",\n \"TOTAL_JACKPOTS\": \"Total Jackpots\",\n \"TOP_GAMES\": \"TOP SLOT GAMES\",\n \"TOP_PROGRESSIVES\": \"TOP PROGRESSIVES\",\n \"LIVE_CASINO_TABLES\": \"SELECTED LIVE TABLES\",\n \"TOP_CASINO_GAMES\": \"TOP CASINO GAMES\",\n \"JACKPOTS\": \"JACKPOTS\",\n \"RECENTLY_PLAYED\": \"Recently Played\",\n \"BECAUSE_YOU_PLAYED\": \"Because You Played {gameName}\",\n \"MINIMUM_BET\": \"Min Bet\",\n \"MAXIMUM_BET\": \"Max Bet\",\n \"PAYLINES\": \"Paylines\",\n \"BONUS_GAME\": \"Bonus game\",\n \"MAX_PER_SPOT\": \"Max Per Spot\",\n \"MULTIPLAYER\": \"Multiplayer\",\n \"DECKS\": \"Decks\",\n \"SIDE_BETS\": \"Side Bets\",\n \"ABOUT\": \"About\",\n \"GAME_JACKPOT\": \"Game Jackpot\",\n \"SLOT_GAMES\": \"Slot Games\",\n \"CARD_AND_TABLE_GAMES\": \"Card & Table Games\",\n \"JACKPOT_GAMES\": \"Jackpot Games\",\n \"JACKPOT_CENTRAL\": \"Jackpot Central\",\n \"OTHER\": \"Other\",\n \"POKER_GAMES\": \"Poker Games\",\n \"YOUR_SEARCH_DID_NOT_MATCH_ANY_GAMES\": \"Your search did not match any games\",\n \"PREMIER_ONLINE_LIVE_CASINO\": \"Premier live casino\",\n \"All_SLOTS\": \"All Slots\",\n \"All_CARD_AND_TABLE_GAMES\": \"All Card & Table Games\",\n \"USEFUL_LINKS\": \"Useful links\",\n \"PRIVACY_POLICY\": \"Privacy Policy\",\n \"USER_AGREEMENT\": \"User Agreement\",\n \"RESPONSIBLE_GAMBLING\": \"Responsible Gambling\",\n \"SAFE_ZONE\": \"Control Center\",\n \"CONTACT\": \"Contact Us\",\n \"COMP_POINTS\": \"Comp Points\",\n \"HISTORY\": \"History\",\n \"GAMING_HISTORY\": \"Gaming History\",\n \"TIPPING_HISTORY\": \"Tipping History\",\n \"TIPPING_HISTORY_AMOUNT\": \"Tip Amount\",\n \"CASHIER_HISTORY\": \"Cashier History\",\n \"GAMING_SESSION_HISTORY\": \"Session History\",\n \"MY_CHALLENGES\": \"My Challenges\",\n \"SCRATCHCARDS\": \"Scratch cards\",\n \"QUICK_LINKS_TITLE\": \"QUICK LINKS\",\n \"NO_SEARCH_RESULTS\": \"No Search Results Found...\",\n \"SEARCH_YOUR_GAME\": \"Find Games, Themes, Studios\",\n \"SEARCH_RESULTS_TITLE\": \"TOP SEARCH RESULTS\",\n \"SUGGESTED_GAMES\": \"SUGGESTED GAMES\",\n \"SUGGESTED_CATEGORIES\": \"SUGGESTED CATEGORIES\",\n \"BACK\": \"Back\",\n \"HIT_THE_JACKPOT\": \"Hit The Jackpot\",\n \"OUR_JACKPOTS\": \"OUR JACKPOTS\",\n \"MY_CLUB\": \"My Club\",\n \"LOW_ROLLERS\": \"Low Rollers\",\n \"CASH_BALANCE\": \"Cash\",\n \"BONUS_BALANCE\": \"Bonus\",\n \"YOU_MAY_LIKE\": \"YOU MAY LIKE\",\n \"TOP_PICKS_FOR\": \"TOP PICKS FOR {USERNAME}\",\n \"888CLUB\": \"888club\",\n \"888POKER\": \"Poker\",\n \"BACK_TO_888POKER\": \"Back to 888poker\",\n \"BACK_TO_888SPORT\": \"Back to 888sport\",\n \"VIDEO_POKER_GAMES\": \"Video Poker Games\",\n \"VIDEO_POKER\": \"Video Poker\",\n \"SEO_IMAGE_CATEGORIES_TITLE\": \"Best {categoryName} experience at 888casino\",\n \"SEO_IMAGE_CATEGORIES_ALT\": \"online casino - {categoryName}\",\n \"SEO_IMAGE_GAME_TITLE\": \"{gameName} {categoryName}\",\n \"TOP_NETENT_SLOTS\": \"TOP NETENT SLOTS\",\n \"PLAY_50_FREESPINS\": \"PLAY 50 FREESPINS\",\n \"HOLIDAY_GAMES\": \"HOLIDAY GAMES\",\n \"ORIGINALS\": \"888 Originals\",\n \"RELATED_GAMES\": \"BECAUSE YOU PICKED: {gameName}\",\n \"DAILY_JACKPOT_GAMES\": \"Daily Jackpot Games\",\n \"TOP_EXCLUSIVE_SLOTS\": \"Top Exclusive Slots\",\n \"TOP_10_IN_YOUR_COUNTRY\": \"Top 10 in your country\",\n \"NEW_GAMES_LIST_TITLE\": \"New Online Casino Games\",\n \"NEW_GAMES\": \"New Games\",\n \"DAILY_JACKPOT\": \"Daily Jackpot\",\n \"PROGRESSIVE_JACKPOT\": \"Progressive Jackpot\",\n \"777_JUKEBOX\": \"777 Jukebox\",\n \"RETRO_SLOTS\": \"Retro Slots\",\n \"SELECTED_LIVE_CASINO_TABLES\": \"Selected Live Casino Tables\",\n \"BLACKJACK_GAMES\": \"Blackjack Games\",\n \"ROULETTE_GAMES\": \"Roulette Games\",\n \"DROP_THE_JACKPOT\": \"Drop The Jackpot\",\n \"777_LIVE\": \"777 Live\",\n \"ROULETTE_&_BLACKJACK\": \"Roulette & Blackjack\",\n \"SCRATCH_CARDS\": \"Scratch Cards\",\n \"CLASSIC_SLOTS\": \"Classic Slots\",\n \"777_FAVORITES\": \"777 Favorites\",\n \"FEATURED\": \"Featured\",\n \"LOW_VOLATILITY\": \"Low Volatility\",\n \"HIGH_VOLATILITY\": \"High Volatility\",\n \"IN_HOUSE_SLOTS\": \"In House Slots\",\n \"MORE_GAMES\": \"More Games\",\n \"ALL_JACKPOTS\": \"All Jackpots\",\n \"ONLINE_JACKPOTS\": \"Online Jackpots\",\n \"All_GAMES\": \"All Games\",\n \"POPULAR_GAMES_TITLE\": \"Popular Games\",\n \"MORE\": \"More\",\n \"HOMEPAGE-SPOOKY_SPINS\": \"Spooky Spins\",\n \"THE_DAILY_JACKPOT\": \"888 Daily Jackpot\",\n \"HIGH_NOON_JACKPOT\": \"High Noon Jackpot\",\n \"TWILIGHT_JACKPOT\": \"Twilight Jackpot\",\n \"POWER8_JACKPOT\": \"POWER 8 JACKPOT\",\n \"RED_TIGER_DAILY_JACKPOT\": \"Red Tiger's Daily Jackpot\",\n \"RED_TIGER_HOURLY_JACKPOT\": \"Red Tiger Hourly Jackpot\",\n \"PROGRESSIVE_JACKPOTS\": \"Progressive Jackpots\",\n \"INSTANT_GAMES\": \"Instant Win Games\",\n \"INSTANT_WIN_GAMES_ARENA\": \"Instant Win Games\",\n \"ALL_INSTANT_WIN_GAMES\": \"All Instant Win Games\",\n \"INFO_TITLE_ARENA_INSTANT_WIN_GAMES\": \"Instant Win Games\",\n \"INFO_TEXT_ARENA_INSTANT_WIN_GAMES\": \"Instant Win Games are so much FUN! Get ready to scratch & match with the best scratch cards under the sun. We’ve got many games for you to enjoy like Volcano Eruption, Panda Mania, and Merlin’s Millions. Short on time? No worries, try our Keno and Bingo games, or sizzling-hot new games like Chicken Extreme, 7-UP, and Epic Gems. It’s a party and you’re invited. Instant Win Games are really easy to play. No skills needed – just play & win!\",\n \"MEGAWAYS_TITLE\": \"Megaways™\",\n \"TRENDING_SLOTS\": \"TRENDING SLOTS\",\n \"EXCLUSIVE_LIVE_TABLES\": \"EXCLUSIVE LIVE TABLES\",\n \"BLACKJACK_AND_ROULETTE_GAMES\": \"BLACKJACK & ROULETTE GAMES\",\n \"ALL_888_EXCLUSIVE_GAMES\": \"ALL 888 EXCLUSIVE GAMES\",\n \"LIVE_ARENA_TABLE_IS_CLOSED_MESSAGE\": \"Table Opens at\",\n \"LIVE_CASINO_TABLE_FULL_PC\": \"Table Full\",\n \"LIVE_CASINO_TABLE_FULL_MOBILE\": \"Full\",\n \"GAME_SHOWS\": \"Game Shows\",\n \"TOP_EVO_GAMES\": \"Top Games\",\n \"FOR_YOU_GAMES\": \"For You\",\n \"AB_TEST_AI_LIST_TITLE_D1_V1\": \"Top Rated Games for {USERNAME}\",\n \"AB_TEST_AI_LIST_TITLE_D1_V2\": \"Recommended games for {USERNAME}\",\n \"AB_TEST_AI_LIST_TITLE_D3_V1\": \"Selected Games for {USERNAME}\",\n \"AB_TEST_AI_LIST_TITLE_D3_V2\": \"Chosen Games for {USERNAME}\",\n \"AB_TEST_AI_LIST_TITLE_D3_V3\": \"Exclusive games for {USERNAME}\",\n \"AB_TEST_AI_LIST_TITLE_D3_V4\": \"Recommended games for you\",\n \"LETS_PLAY_MONOPOLY\": \"Let's play Monopoly\",\n \"TOP_TRENDING_SLOTS\": \"Top Trending Slots\",\n \"TOP_PAYING_SLOTS\": \"Top Paying Slots\",\n \"RECENTLY_ADDED\": \"Recently Added\",\n \"TOP_SLOTS\": \"Top Slots\",\n \"REAL_MONEY_GAME\": \"This game can be played with cash balance only.\",\n \"CANT_CONNECT_ERROR_TITLE\": \"Can't connect\",\n \"CANT_CONNECT_ERROR_MESSAGE\": \"Sorry, something went wrong on our end.\",\n \"RETRY\": \"Retry\",\n \"TRANSACTION_HISTORY\": \"Transaction History\",\n \"UPLOAD_DOCUMENTS\": \"Upload Documents\",\n \"BRAND_NEW\": \"Brand New\",\n \"HOTTEST_NEW_GAMES\": \"Hottest new games\",\n \"SINCE_LAST_MONTH\": \"Since Last Month\",\n \"FROM_LAST_MONTH\": \"From Last Month\",\n \"SAFE_GAMBLING_TOOLTIP\": \"Safer Gambling Tools & Information\",\n \"PLAYER_LIMITS_TOASTER_TITLE\": \"Your Limits\",\n \"PLAYER_LIMITS_TOASTER_DAILY_LABEL\": \"Daily\",\n \"PLAYER_LIMITS_TOASTER_WEEKLY_LABEL\": \"Weekly\",\n \"PLAYER_LIMITS_TOASTER_MONTHLY_LABEL\": \"Monthly\",\n \"PLAYER_LIMITS_TOASTER_DEPOSIT_LABEL\": \"Deposit\",\n \"PLAYER_LIMITS_TOASTER_PLAY_TIME_LABEL\": \"Play Time\",\n \"PLAYER_LIMITS_TOASTER_BANKROLL_LABEL\": \"Bankroll\",\n \"PLAYER_LIMITS_TOASTER_HOUR_LABEL\": \"hour\",\n \"GAME_POPUP_TITLE\": \"Welcome back\",\n \"GAME_POPUP_SUB_TITLE\": \"Suggested game\",\n \"GAME_POPUP_DESCRIPTION\": \"Your 888slots activity:\",\n \"GAME_POPUP_GAME_UNAVAILABLE\": \"Sorry, this game is unavailable\",\n \"GAME_POPUP_MAY_LIKE\": \"You may also like\",\n \"PARTY_JACKPOT_WELCOME_POPUP_TITLE\": \"HOORAY! You’re about to play a {partyJackpotName} game!\",\n \"PARTY_JACKPOT_WELCOME_POPUP_TITLE_ALL_LIVE_CASINO\": \"LUCKY YOU!\",\n \"PARTY_JACKPOT_WELCOME_POPUP_SUB_TITLE_ALL_LIVE_CASINO\": \"All Live Casino games are part of our HOT NEW jackpot!\",\n \"PARTY_JACKPOT_WELCOME_POPUP_DESCRIPTION\": \"The Jackpot can be won on any cash balance bet.\\nAll Party Jackpot prizes are bonuses, which are instantly credited to your account.\",\n \"PARTY_JACKPOT_WELCOME_POPUP_DESCRIPTION_REAL\": \"Any real money bet on a Party Jackpot game could win a cash prize!\\nThe Party Jackpot will pay daily!\",\n \"PARTY_JACKPOT_WELCOME_POPUP_DESCRIPTION_REAL_HOURLY\": \"Any real money bet on a Party Jackpot game could win a cash prize!\\nThe Party Jackpot will pay hourly between {startHour} to {endHour}\",\n \"PARTY_JACKPOT_WELCOME_POPUP_DESCRIPTION_REAL_HOURLY_ALL_LIVE_CASINO\": \"Real money bets on any Live Casino game could win the jackpot!\\nThe Live Casino Jackpot must pay every hour, {startHour} - {endHour}, and is fully funded by us.\",\n \"PARTY_JACKPOT_WELCOME_POPUP_BOTTOM_NOTE\": \"Bonus: wager 30x (varies by game type), 90 day expiry, wins capped at $500, valid for selected games\",\n \"PARTY_JACKPOT_WELCOME_POPUP_BOTTOM_NOTE_REAL\": \"Funded players only\",\n \"PARTY_JACKPOT_WELCOME_POPUP_TERMS_AND_CONDITIONS_APPLY\": \"T&C Apply.\",\n \"PARTY_JACKPOT_WIN_TOASTER_TITLE\": \"The {jackpotName} just dropped at {winAmount}!\",\n \"PARTY_JACKPOT_WIN_TOASTER_SUBTITLE\": \"Didn’t win? No worries!\\n This jackpot drops every hour, {startHour}-{endHour}.\",\n \"PARTY_JACKPOT_WIN_POPUP_YOU_WON\": \"YOU WON THE {jackpotName}\",\n \"PARTY_JACKPOT_WIN_POPUP_AWESOME\": \"AWESOME!\",\n \"PARTY_JACKPOT_OUT_OF_CASH_TOASTER_TITLE\": \"Top up to play the Live Casino Jackpot\",\n \"PARTY_JACKPOT_OUT_OF_CASH_TOASTER_SUBTITLE\": \"The Live Casino Jackpot can only be won with real money\",\n \"JACKPOT-WIDGET-MUST-PAY\": \"Must Pay within:\",\n \"JACKPOT-WIDGET-DROPS-SOON\": \"DROPS SOON!\",\n \"JACKPOT-WIDGET-STARTS-SOON\": \"STARTS SOON\",\n \"JACKPOT-WIDGET-NEXT-JACKPOT\": \"Launching Next Jackpot\",\n \"JACKPOT-WIDGET-LAST-WIN\": \"Last win\",\n \"IN-GAME-WIDGET-STARTS-SOON\": \"Starts Soon\",\n \"FREEPLAY_INDICATOR\": \"FreePlay\",\n \"OMG_INDICATOR\": \"Notifications\",\n \"USER_LIKE_YOU\": \"TOP {topNumber} IN {countryName}\",\n \"YOUR_COUNTRY\": \"Your country\",\n \"SOURCE_OF_FUNDS_TITLE\": \"Important Info Needed\",\n \"SOURCE_OF_FUNDS_MESSAGE1\": \"Hi, welcome back!\",\n \"SOURCE_OF_FUNDS_MESSAGE2\": \"We just need some info from you. It won't take long at all!\",\n \"SOURCE_OF_FUNDS_OPEN_CHAT_BTN\": \"LET'S CHAT\",\n \"CLOSE\": \"Close\",\n \"LIVE_STREAM_WATCH_TIME_REACHED\": \"Ready to dive in and play?\",\n \"LIVE_STREAM_VIDEO_LOADING\": \"Loading…\",\n \"PLAY_NOW\": \"PLAY NOW\",\n \"CASINO\": \"CASINO\",\n \"UK_TSR_CONTINUE_OPT\": \"Continue\",\n \"UK_TSR_REVIEW_REMINDERS_OPT\": \"Review reminders\",\n \"UK_TSR_LOGOUT_OPT\": \"Logout\",\n \"UK_TSR_RESUME_GAME_OPT\": \"Resume Game\",\n \"UK_TSR_STOP_REMINDERS_OPT\": \"Stop all game time reminders\",\n \"UK_TSR_HISTORY_OPT\": \"View History\",\n \"UK_TSR_CLOSE_GAME_OPT\": \"Close Game\",\n \"TSR_SUBTEXT\": \"What would you like to do?\",\n \"PAYMENTS_REDIRECT_FOCUS_TITLE\": \"Deposit in process\",\n \"PAYMENTS_REDIRECT_FOCUS_TEXT\": \"Your {mftName} screen is still open\",\n \"PAYMENTS_REDIRECT_FOCUS_CTA\": \"Continue\",\n \"VOLATILE_SLOTS\": \"Volatile Slots\",\n \"VOLATILE_GAMES\": \"Volatile Games\",\n \"HIGH_VOLATILITY_SLOTS\": \"High Volatility Slots\",\n \"LOW_VOLATILITY_SLOTS\": \"Low Volatility Slots\",\n \"STATE_POPUP_TITLE\": \"Verify Your Location\",\n \"STATE_POPUP_HEADER\": \"Please confirm that you're located in {THE_STATE}\",\n \"STATE_POPUP_OUTSIDE_TEXT\": \"I'm located outside of {THE_STATE}\",\n \"STATE_POPUP_CONFIRM\": \"Confirm\",\n \"BURNOUT_MESSAGE_LINE_1\": \"SURPRISE!\",\n \"BURNOUT_MESSAGE_LINE_2\": \"YOU GOT A BONUS!\",\n \"CONGRATS\": \"Congrats!\",\n \"YOUR_FP_ARE_WAITING\": \"Your FreePlay are waiting for you here\",\n \"EXIT_POPUP_TITLE\": \"We thought you’d like\",\n \"DONT_SHOW_AGAIN_TEXT\": \"Don't show again\",\n \"DAILY_DEAL_WIDGET_STRIP\": \"I GIORNALIERI\",\n \"GAMING_HISTORY_NO_RECORDS\": \"We were unable to locate any history records of your games\",\n \"GAMING_HISTORY_LAST_PAGE\": \"No more history records found.\",\n \"GAMING_HISTORY_BET\": \"Bet\",\n \"GAMING_HISTORY_WINNINGS\": \"Winnings\",\n \"GAMING_HISTORY_WINNINGS_BONUS_CAP\": \"Winnings*\",\n \"GAMING_HISTORY_BANKROLL\": \"Bankroll\",\n \"GAMING_HISTORY_MORE_DETAILS\": \"More Details\",\n \"GAMING_HISTORY_MORE_DETAILS_NOT_AVAILABLE_PC\": \"Available only on Mobile devices\",\n \"GAMING_HISTORY_MORE_DETAILS_NOT_AVAILABLE_MOBILE\": \"Available only on PC\",\n \"GAMING_HISTORY_FREE_PLAY_BET\": \"Bet*\",\n \"GAMING_HISTORY_FREE_PLAY_WINNINGS\": \"Winnings*\",\n \"GAMING_HISTORY_FREE_PLAY_REWARD_WINNINGS\": \"Reward winnings\",\n \"GAMING_HISTORY_FREE_PLAY_REWARD_BANKROLL\": \"Reward bankroll\",\n \"GAMING_HISTORY_FREE_PLAY_INDICATION\": \"*Played with rewards\",\n \"GAMING_HISTORY_FREE_PLAY_MAX_CUP_INDICATION\": \"*Maximum win\",\n \"GAMING_HISTORY_BIG_WIN_TAX_INDICATION\": \"Pending IRS form W-2G completion\",\n \"GAMING_HISTORY_DAYS_INTERVAL\": \"Last {numberOfDays} Days\",\n \"GAME_PARTICIPATION_ID\": \"Participation ID: {participationID}\",\n \"GAME_SESSION_ID\": \"Session ID: {sessionID}\",\n \"HISTORY_GAME_SESSION_TOTAL_BETS\": \"Total bets\",\n \"HISTORY_GAME_SESSION_TOTAL_WINNINGS\": \"Total wins\",\n \"HISTORY_GAME_SESSION_BALANCE\": \"Session Balance\",\n \"FILTER_GROUP_VENDOR_TYPE\": \"Vendor Name\",\n \"GAME_WINDOW_VENDOR_SESSION_ID\": \"Session ID: {sessionID}\",\n \"GAME_WINDOW_MODE_REAL_LABEL\": \"Real Money\",\n \"GAME_WINDOW_MODE_DEMO_LABEL\": \"Demo\",\n \"FREE_PLAY_VOUCHER_NAME_FPV\": \"FreePlay\",\n \"FREE_PLAY_VOUCHER_NAME_FSV\": \"Free Spins\",\n \"FREE_PLAY_VOUCHER_NAME_JPFPV\": \"Jackpot FreePlay\",\n \"FREE_PLAY_VOUCHER_NAME_JPFSV\": \"Jackpot Spins\",\n \"FREE_PLAY_VOUCHER_BALANCE_PREFIX\": \"Remaining:\",\n \"FREE_PLAY_VOUCHER_TITLE_FPV\": \"FreePlay Reward\",\n \"FREE_PLAY_VOUCHER_TITLE_FSV\": \"Free Spins Reward\",\n \"FREE_PLAY_VOUCHER_TITLE_JPFPV\": \"Jackpot FreePlay Reward\",\n \"FREE_PLAY_VOUCHER_TITLE_JPFSV\": \"Jackpot Spins Reward\",\n \"FREE_PLAY_VOUCHER_DESC_FPV\": \"Free play money to use on selected games in whichever way you wish!\",\n \"FREE_PLAY_VOUCHER_DESC_FSV\": \"Free Spins with pre-defined values to use on selected games!\",\n \"FREE_PLAY_VOUCHER_DESC_JPFPV\": \"Jackpot-only FreePlay money to use on selected games in whichever way you wish!\",\n \"FREE_PLAY_VOUCHER_DESC_JPFSV\": \"Jackpot-only Free Spins with pre-defined values to use on selected games!\",\n \"FREE_PLAY_VOUCHER_REWARD_AMOUNT\": \"{amount} {fp_voucher_name}\",\n \"FREE_PLAY_VOUCHER_REWARD_BALANCE\": \"{fp_voucher_remaining_prefix} {balance}\",\n \"FREE_PLAY_EXPIRES_IN_TIME\": \"Expires in {expiration}\",\n \"FREE_PLAY_EXPIRES_IN_EXPIRED\": \"Expired\",\n \"FREE_PLAY_EXPIRES_IN_DAY\": \"Expires in {expiration} days\",\n \"FREE_PLAY_MESSAGE_VOUCHER_TITLE_GOOD_LUCK\": \"Good Luck!\",\n \"FREE_PLAY_MESSAGE_LIST_TITLE\": \"You have rewards waiting for you. Good Luck!\",\n \"FREE_PLAY_MESSAGE_SELECTED_GAME_TITLE\": \"This game can also be played with the following rewards:\",\n \"FREE_PLAY_MESSAGE_GAMES_LIST_TITLE\": \"You can use this reward in the game(s) below.\",\n \"FREE_PLAY_MESSAGE_NO_VOUCHERS\": \"You have no rewards available\",\n \"FREE_PLAY_MESSAGE_BACK_TO_VOUCHERS\": \"Back\",\n \"FREE_PLAY_SHOW_MORE\": \"Show More\",\n \"FREE_PLAY_SHOW_LESS\": \"Show Less\",\n \"FREE_PLAY_USE_NOW_BUTTON\": \"Use Now\",\n \"FREE_PLAY_USE_LATER_BUTTON\": \"Use Later\",\n \"FREE_PLAY_SUGGESTION_DIALOG_TITLE\": \"You have rewards in this game!\",\n \"IDLE_RECOMMENDATIONS_TITLE\": \"Looking for your next game?\",\n \"IDLE_RECOMMENDATIONS_SECOND_TITLE\": \"What about\",\n \"BONUS_ABUSE_PREVENTION_TITLE\": \"Disconnected Game\",\n \"BONUS_ABUSE_PREVENTION_MESSAGE\": \"It looks like there's a game that was disconnected... Please complete {gameName} before you can start playing {newGameName}.\",\n \"BONUS_ABUSE_PREVENTION_NOT_NOW_BTN\": \"Not Now\",\n \"BONUS_ABUSE_PREVENTION_COMPLETE_BTN\": \"Complete Game\",\n \"OPEN_GAME_FROM_CHALLENGES\": \"Challenges can’t be completed using rewards.\",\n \"CANCEL\": \"Cancel\",\n \"YES\": \"Yes\",\n \"NO\": \"No\",\n \"ONE_GAME_PER_SESSION_DIALOG_TITLE\": \"Open Game\",\n \"ONE_GAME_PER_SESSION_DIALOG_MESSAGE\": \"It looks like there's a game that's still open....\\nWould you like to close {oldGameName} and start playing {newGameName}?\",\n \"GAMES_OF_THE_WEEK\": \"Games Of The Week\",\n \"THE_FISH_MARKET\": \"The Fish Market\",\n \"LETS_PLAY_POKER\": \"Lets Play Poker!\",\n \"HYBRID_EMBEDDED_GAME_LOADING_SLOW_CONNECTION_TOASTER_TITLE\": \"Slow connection\",\n \"HYBRID_EMBEDDED_GAME_LOADING_SLOW_CONNECTION_TOASTER_SUBTITLE\": \"We've detected a slow network connection. Opening the game may take a little longer than expected.\",\n \"HYBRID_EMBEDDED_GAME_LOADING_SPINNER_LABEL\": \"Connecting...\",\n \"HYBRID_EMBEDDED_GAME_LOADING_PACKAGES_PROGRESS\": \"Preparing game {packagesStatus}\",\n \"HELP_CENTER\": \"Help Centre\",\n \"GEO_PERMISSIONS_POPUP_TITLE\": \"Location Check\",\n \"GEO_PERMISSIONS_POPUP_TOP_TEXT\": \"Allow location verification\",\n \"GEO_PERMISSIONS_POPUP_MIDDLE_TEXT\": \"We need your location to verify that playing is allowed in your province\",\n \"GEO_PERMISSIONS_BUTTON\": \"OK\",\n \"ABOUT_HELP_SUPPORT\": \"For any support queries, please visit our online help\",\n \"ABOUT_TITLE\": \"Your Account Details\",\n \"ABOUT_FISCAL_CODE_TITLE\": \"Fiscal Code\",\n \"ABOUT_SUPPORT_ID_TITLE\": \"ID for support\",\n \"ABOUT_CLIENT_VERSION_TITLE\": \"Client Version\",\n \"ABOUT_OPEN_SESSION_TITLE\": \"Open session balance\",\n \"GEO_PLUGIN_INSTALLATION_MSG_TITLE\": \"Location check\",\n \"GEO_PLUGIN_INSTALLATION_MSG_HEADER_1\": \"Verify Your Location.\",\n \"GEO_PLUGIN_INSTALLATION_MSG_HEADER_2\": \"This site is dedicated for players in USA permitted states.\",\n \"GEO_PLUGIN_INSTALLATION_MSG_HEADER_3\": \"To verify your location and start playing, please install the\",\n \"GEO_PLUGIN_INSTALLATION_MSG_HEADER_4\": \"GeoComply plugin:\",\n \"GEO_PLUGIN_INSTALLATION_MSG_BODY_1\": \"Click the Download Plugin button below\",\n \"GEO_PLUGIN_INSTALLATION_MSG_BODY_2\": \"Open the file from the download bar\",\n \"GEO_PLUGIN_INSTALLATION_MSG_BODY_3\": \"Click Run to install the file\",\n \"GEO_PLUGIN_INSTALLATION_MSG_FOOTER\": \"Need to redownload the plugin?\",\n \"GEO_PLUGIN_DOWNLOAD_BUTTON\": \"DOWNLOAD\",\n \"GEO_FREEZE_POPUP_TOP_TEXT\": \"We're confirming your location.\",\n \"GEO_FREEZE_POPUP_MIDDLE_TEXT\": \"It should only take a few seconds. This window will close automatically after confirmation.\",\n \"GEO_DIALOG_STANDARD_TITLE\": \"Location Verification\",\n \"GEO_GAME_RESTRICTION_TOP_TEXT\": \"Verify your location\",\n \"GEO_GAME_RESTRICTION_MIDDLE_TEXT\": \"That action requires location verification. To verify your location, please log out and retry. If the problem persists, please contact us.\",\n \"GEO_RETRY_GAME_RESTRICTION_MIDDLE_TEXT\": \"That action requires location verification. To verify your location please retry. If the problem persists, please contact us.\",\n \"ENFORCE_HYBRID_APP_TITLE\": \"Download the app\",\n \"ENFORCE_HYBRID_APP_TEXT\": \"To log in from your mobile device please download the app.\",\n \"ENFORCE_HYBRID_APP_CONTINUE_BUTTON\": \"GET THE APP\",\n \"ONE_HOUR\": \"1 hour\",\n \"X_HOURS\": \"{x} hours\",\n \"ONE_MINUTE\": \"1 minute\",\n \"X_MINUTES\": \"{x} minutes\",\n \"ONE_DAY\": \"1 day\",\n \"X_DAYS\": \"{x} days\",\n \"ONE_WEEK\": \"1 week\",\n \"ONE_MONTH\": \"1 month\",\n \"SELECT\": \"Please select\",\n \"DONT_WANT_TO_BE_BLOCKED\": \"I don't want to be blocked\",\n \"GAMBLING_SESSION_SETUP_TITLE\": \"Start your session\",\n \"GAMBLING_SESSION_MESSAGE\": \"Note: The session applies to all Casino games and Poker Cash games only\",\n \"GAMBLING_SESSION_WARN_MESSAGE\": \"LIMITS ARE RESET ONCE REACHED OR UPON RE-LOGIN\",\n \"GAMBLING_SESSION_START\": \"Start Session\",\n \"GAMBLING_SESSION_LAST_BET\": \"Last bet: {lastBetDate}\",\n \"GAMBLING_SESSION_TIME_LIMIT_REQUIRED_ERROR\": \"Session Time Limit not set\",\n \"GAMBLING_SESSION_LOSS_LIMIT_REQUIRED_ERROR\": \"Session Loss Limit not set\",\n \"GAMBLING_SESSION_LIMIT_REGULATORY_TEXT\": \"We support and promote {responsibleGamblingLink} and make available the tools to support sustainable play. Excessive gambling can have a negative effect on your life, leading to addiction, financial difficulties and breakdown of relationships.\",\n \"GAMBLING_SESSION_LIMIT_RESPONSIBLE_GAMING_LINK\": \"safer gambling\",\n \"GAMBLING_SESSION_REMINDER_INTERVAL_DROP_DOWN_LABEL\": \"Session Reminders\",\n \"GAMBLING_SESSION_LOSS_LIMIT_VALUE\": \"{percent}% of bankroll ({loss})\",\n \"GAMBLING_SESSION_LOSS_LIMIT_DROP_DOWN_LABEL\": \"Session Loss limit\",\n \"GAMBLING_SESSION_LIMIT_RESTRICTION_PERIOD_VALUE\": \"Be blocked for {time}\",\n \"GAMBLING_SESSION_LIMIT_RESTRICTION_BLOCK_CONFIRMATION_TEXT\": \"You have chosen to be blocked for {time}. This means that once your game session ends, you will not be able to play again for the time period you have selected.\",\n \"GAMBLING_SESSION_LIMIT_RESTRICTION_BLOCK_CONFIRMATION_QUESTION\": \"Are you sure?\",\n \"GAMBLING_SESSION_RESTRICTION_PERIOD_DROP_DOWN_LABEL\": \"When my session ends\",\n \"GAMBLING_SESSION_LIMIT_TIME_LOSS_CONFIRMATION_TEXT\": \"Note that you have set your maximum playing time at {time}.\",\n \"GAMBLING_SESSION_LIMIT_TIME_LOSS_CONFIRMATION_QUESTION\": \"Do you want to continue?\",\n \"GAMBLING_SESSION_TIME_LIMIT_DROP_DOWN_LABEL\": \"Session Time Limit\",\n \"GAMBLING_SESSION_TIME_LIMIT_REACHED_TITLE\": \"Time limit reached\",\n \"GAMBLING_SESSION_LOSS_LIMIT_REACHED_TITLE\": \"Loss limit reached\",\n \"GAMBLING_SESSION_INTERVAL_REMINDER_TITLE\": \"Game Time Reminders\",\n \"GAMBLING_SESSION_TIME_LIMIT_REACHED_TEXT\": \"At {gamblingSessionLimitTimestamp} you have reached your time limit in this session\",\n \"GAMBLING_SESSION_LOSS_LIMIT_REACHED_TEXT\": \"At {gamblingSessionLimitTimestamp} you have reached your loss limit in this session\",\n \"GAMBLING_SESSION_INTERVAL_REMINDER_TEXT\": \"At {gamblingSessionLimitTimestamp} you have reached your Game Time Reminders in this session.\",\n \"GAMBLING_SESSION_DATA_DURATION\": \"Session Duration:\",\n \"GAMBLING_SESSION_DATA_WIN_LOSS_SUMMARY\": \"Win / Loss Summary:\",\n \"GAMBLING_SESSION_DATA_TOTAL_BETS\": \"Total bets:\",\n \"GAMBLING_SESSION_ADVANCED_WARN_LOSS_LIMIT_TOAST\": \"Your Loss Limit is about to be reached\",\n \"GAMBLING_SESSION_ADVANCED_WARN_TIME_LIMIT_TOAST\": \"Your Time Limit is about to be reached\",\n \"GAMBLING_SESSION_LOGOUT_DIALOG_TITLE\": \"Logout. Session summary\",\n \"GAMBLING_SESSION_SELF_RESTRICTION_MESSAGE\": \"You have imposed a restriction on yourself to play additional casino games until {restrictionExpirationDate}.\",\n \"GAMBLING_SESSION_LIMITS_ALREADY_SET\": \"Session limits already set\",\n \"ATTENTION\": \"Attention!\",\n \"TOTAL_BANKROLL\": \"Full Bankroll:\",\n \"GAME_SESSION_BALANCE\": \"Session balance:\",\n \"TOTAL_WINS\": \"Total win amounts:\",\n \"TOTAL_BETS\": \"Total bet amounts:\",\n \"GAME_SESSION_SUMMARY_DIALOG_TITLE\": \"Session has ended\",\n \"GAME_SESSION_SUMMARY_DIALOG_MESSAGE\": \"Your session for {game_name} has ended\\n\\nTotal bets {total_bets_amount}\\n\\nTotal wins {total_wins_amount}\",\n \"OK\": \"OK\",\n \"NJ_LOGOUT_MESSAGE_TITLE\": \"Logout\",\n \"NJ_LOGOUT_MESSAGE_TEXT\": \"If you or someone you know has a gambling problem and wants help,\\ncall 1-800-Gambler.\",\n \"INSUFFICIENT_FUNDS_TITLE\": \"Insufficient balance\",\n \"INSUFFICIENT_FUNDS_MESSAGE\": \"Your current balance is not sufficient for this game. To continue playing, you must first make a deposit to the cashier.\",\n \"OPEN_CASHIER\": \"Open Cashier\",\n \"GAME_LIMIT_REAL_MONEY_WARNING_MESSAGE\": \"This game can be played with cash balance only.\",\n \"SUGGEST_REAL_MODE_DIALOG_TITLE\": \"Demo Game\",\n \"SUGGEST_REAL_MODE_DIALOG_TEXT\": \"Please note that {game_name} will be opened in demo mode.<br><br>To play in real money mode, please register or log in.\",\n \"PLAY_DEMO\": \"Play Demo\",\n \"GAME_NET_POSITION_LABEL\": \"Game Balance\",\n \"GAME_DURATION_LABEL\": \"Game Duration\",\n \"GAME_LIMIT_TITLE\": \"Choose the money in the game\",\n \"REGULATORY_LIMIT_LABEL\": \"Regulatory limit\",\n \"OTHER_LIMIT_LABEL\": \"Other\",\n \"GAME_LIMIT_INSUFFICIENT_FUNDS\": \"Amount is more than the total available\",\n \"GAME_LIMIT_VALUE_ERROR\": \"Invalid amount. Please try again\",\n \"GAME_LIMIT_REGULATION_ERROR\": \"The maximum amount is {regulationLimit}. Please try again.\",\n \"GAME_LIMIT_MIN_BET_ERROR\": \"Amount below table minimum. Please try again\",\n \"ADD_FUNDS_TOTAL_BALANCE\": \"Total balance\",\n \"ADD_FUNDS_OTHER_AMOUNT\": \"Other amount\",\n \"ADD_FUNDS_TOP_UP\": \"Add Funds\",\n \"ADD_FUNDS_GAME_HEADER_BUTTON\": \"Add Funds\",\n \"ADD_FUNDS_GAME_NAVBAR_BUTTON\": \"Add Funds\",\n \"ADD_FUNDS_BLOCKED_TITLE\": \"Add Funds\",\n \"ADD_FUNDS_BLOCKED_MESSAGE\": \"It is not possible to add more funds.\\n YOu have reached the limit of 1000€ for this game session\",\n \"AGE_ACKNOWLEDGE_POPUP_TITLE\": \"Acknowledgement\",\n \"AGE_ACKNOWLEDGE_POPUP_MESSAGE\": \"Persons under the age of 21 are not permitted to engage in interactive gaming.\\nPlease confirm that you are over 21 years old\",\n \"AGE_ACKNOWLEDGE_POPUP_CONFIRM_BUTTON\": \"Confirm\",\n \"AGE_ACKNOWLEDGE_POPUP_DECLINE_BUTTON\": \"Decline\",\n \"STATE_POPUP_DEFAULT_OPTION\": \"Select...\",\n \"STATE_POPUP_NO_STATE_SELECTED\": \"You must choose a state!\",\n \"CHOOSE_CONFIRM_STATE\": \"Please confirm that you're located in\",\n \"STATE_POPUP_OTHER_STATE\": \"I don't see my state\",\n \"STATE_SELECTOR_MENU_ITEM\": \"State Selector\",\n \"LUGAS_COOLING_OFF_LOGOUT_MESSAGE\": \"By logging out you will not be able to play any game for 5:00 mins.\",\n \"LUGAS_ACTIVE_TITLE\": \"Notification\",\n \"LUGAS_ACTIVE_TEXT_1\": \"It looks like you're currently playing on a different site. Per local regulations, please log out to continue here.\",\n \"LUGAS_ACTIVE_TEXT_2\": \"888 receives this information from the German system used to enforce regulations.\",\n \"LUGAS_COOLDOWN_TITLE\": \"Please wait\",\n \"LUGAS_COOLDOWN_TEXT\": \"According to Germany regulation there’s a five minute cool down period after logging out from another operator.\",\n \"LUGAS_OK_BTN\": \"OK\",\n \"LIVE_ROULETTE\": \"Live Roulette\",\n \"LIVE_BLACKJACK\": \"Live Blackjack\",\n \"LIVE_BACCARAT\": \"Live Baccarat\",\n \"LIVE_POKER\": \"Live Poker\",\n \"LIVE_GAME_SHOWS\": \"Live Game Shows\",\n \"LIVE_ELITE_LOUNGE\": \"Live Elite Lounge\",\n \"JOIN_NOW\": \"JOIN NOW\",\n \"Adventure\": \"Adventure\",\n \"Ancient Civilization\": \"Ancient Civilization\",\n \"Arabic\": \"Arabic\",\n \"Asian\": \"Asian\",\n \"Classic Style\": \"Classic Style\",\n \"Comics and Cartoons\": \"Comics and Cartoons\",\n \"Diamonds and Gems\": \"Diamonds and Gems\",\n \"Egyptian\": \"Egyptian\",\n \"Fantasy and Folklore\": \"Fantasy and Folklore\",\n \"Farm and Pets\": \"Farm and Pets\",\n \"Fish\": \"Fish\",\n \"Fruit and Candy\": \"Fruit and Candy\",\n \"Greek Mythology\": \"Greek Mythology\",\n \"Irish\": \"Irish\",\n \"Money and Leisure\": \"Money and Leisure\",\n \"Movies and Music\": \"Movies and Music\",\n \"Seasonal\": \"Seasonal\",\n \"Space and Sci-fi\": \"Space and Sci-fi\",\n \"Wildlife\": \"Wildlife\",\n \"GAME_STUDIOS\": \"Game studios\",\n \"THEMES\": \"Themes\",\n \"GAME_FEATURES\": \"Features\",\n \"GAME_CATEGORIES\": \"Categories\",\n \"FILTER_BY\": \"Filter by\",\n \"NO_JACKPOT\": \"No Jackpot\",\n \"HIGH_STAKES\": \"High Stakes\",\n \"LOW_STAKES\": \"Low Stakes\",\n \"MULTIHAND\": \"Multihand\",\n \"MEDIUM_VOLATILITY\": \"Medium Volatility\",\n \"VOLATILITY\": \"Volatility\",\n \"ONBOARDING_WELCOME_STEP_MAIN_TEXT\": \"More games. Bigger jackpots. Personalized experience.\",\n \"ONBOARDING_WELCOME_STEP_SECONDARY_TEXT\": \"Ready to explore your new home?\",\n \"ONBOARDING_MENU_STEP_MAIN_TEXT\": \"This magic menu will take you straight to ALL the fun\",\n \"ONBOARDING_MENU_STEP_SECONDARY_TEXT\": \"Jackpots, slots, LIVE tables & promotions\",\n \"ONBOARDING_USER_AREA_MAIN_TEXT\": \"Control Your Account In One Place\",\n \"ONBOARDING_USER_AREA_SECONDARY_TEXT\": \"Account ID, transaction history, bonus overview & more\",\n \"NEXT\": \"Next\",\n \"DONE\": \"Done\",\n \"SPEED_GAMES\": \"Speed Games\",\n \"generic_notification_popup_title\": \"Notification\",\n \"MDP_INACTIVITY_DISCONNECTED_TEXT\": \"You have been disconnected due to inactivity.\",\n \"RICH_USER_NOT_LOGGED_IN\": \"To view your challenges please log in\",\n \"CONTROL_CENTER_ONBOARDING_TOOLTIP_TEXT\": \"Set your limits, see your activity stats, and more in the Control Center!\",\n \"temp_account_title\": \"Account Verification\",\n \"temp_account_days_left\": \"Days Left\",\n \"temp_account_upload_btn\": \"UPLOAD DOCUMENTS\",\n \"MENU_ITEM_ABOUT\": \"About\",\n \"MENU_ITEM_GAMING_SESSION_HISTORY\": \"Session History\",\n \"MENU_ITEM_TOUCH_ID\": \"Biometric Login\",\n \"MENU_ITEM_INACTIVITY_TIMEOUT_SETTINGS\": \"Settings\",\n \"MENU_ITEM_HYBRID_INFO\": \"Info\",\n \"MENU_ITEM_CASHIER_VERIFY_ID\": \"Identity Verification\",\n \"NJ_JERSEY_COUNTRY_NAME\": \"NEW JERSEY\",\n \"FEATURED_GAMES\": \"Featured Games\",\n \"LIVE_BACCARAT_BONANZA\": \"Live Baccarat Bonanza\",\n \"TOP_HOLLYWOOD_SLOTS\": \"Top Hollywood slots\",\n \"THE_WILD_WEST\": \"The Wild West\",\n \"TREASURES_OF_EGYPT\": \"Treasures Of Egypt\",\n \"GRID_SLOTS\": \"Grid Slots\",\n \"SECRETS_OF_THE_GREEK_MYTHOLOGY\": \"Secrets of the Greek mythology\",\n \"DIAMONDS_ARE_FOREVER\": \"Diamonds Are forever\",\n \"LUCK_OF_THE_IRISH\": \"Luck of the Irish\",\n \"LIVE_CASINO_PAGE\": \"Live Casino page\",\n \"NEW_LIVE_CASINO_GAMES\": \"New Live Casino Games\",\n \"TOP_LIVE_TABLE_GAMES\": \"Top Live Table Games\",\n \"ARCADE_GAMES\": \"Arcade Games\",\n \"8_HOURS_JACKPOT\": \"8 hours jackpot\",\n \"VEGAS_SLOTS\": \"Vegas Slots\",\n \"MUSIC_TO_MY_EARS\": \"Music to my ears\",\n \"GENIES_JACKPOT\": \"Genie's Jackpot\",\n \"BIG_PLAYTECH_JACKPOTS\": \"Big Playtech Jackpots\",\n \"ASIAN_GEMS\": \"Asian Gems\",\n \"CANDY_SHOP\": \"Candy Shop\",\n \"kick_reason_general\": \"You’ve been logged out.\",\n \"kick_reason_20\": \"You’ve been logged out because you signed in from another location.\",\n \"kick_reason_21\": \"We have detected that you are \\nattempting to login from outside the state of New Jersey. This conduct is in violation of New Jersey state law N.J.S.A 5:12-95.23a. You should immediately cease and desist from attempting to login from outside of New Jersey. We have retained your user information and future attempts could result in an enforcement action.\",\n \"kick_reason_23\": \"We are unable to confirm you are \\nlocated in the State of New Jersey which is a legal requirement for online wagering. Please check your Wi-Fi card is enabled, please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_24\": \"We have detected that you are \\naccessing the internet through a proxy, VPN, or other service which has the ability to misrepresent the geographic location of a device. While your use of this service may be inadvertent, we are not able to confirm your location legal requirement for online wagering. Please contact customer support. so we can help you resolve this problem.\",\n \"kick_reason_25\": \"We have detected that you are \\nattempting to login from outside the state of New Jersey. This conduct is in violation of New Jersey state law N.J.S.A 5:12-95.23a. You should immediately cease and desist from attempting to login from outside of New Jersey. We have retained your user information and future attempts could result in an enforcement action.\",\n \"kick_reason_26\": \"We are unable to confirm you are \\nlocated in the State of New Jersey which is a legal requirement for online wagering. This appears to be a technical problem. Please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_27\": \"To bet we must verify that you are located in {stateName}. Please {downloadPluginLink} and install this plugin that will allow us to verify your location based on your Wi-Fi connection.\",\n \"kick_reason_28\": \"To bet on real money we must \\nupdate the plugin that enables us to verify your location. Click {installPlugin} to install.\",\n \"kick_reason_29\": \"We are unable to confirm you are located in the State of New Jersey which is a legal requirement for online wagering. This appears to be a technical problem. Please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_30\": \"You have reached your daily game time limit. Once the time limit expires, you will be able to enjoy our games again.\",\n \"kick_reason_31\": \"We are unable to confirm you are located in the State of New Jersey which is a legal requirement for online wagering. This appears to be a technical problem. Please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_32\": \"We are unable to confirm you are located in the State of New Jersey which is a legal requirement for online wagering. This appears to be a technical problem. Please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_33\": \"Unfortunately the network you are currently connected to does not allow us to verify that you are in New Jersey. Please connect to a different network and try again.\",\n \"kick_reason_34\": \"We are unable to confirm you are located in the State of New Jersey which is a legal requirement for online wagering. This appears to be a technical problem. Please contact customer support so we can help you resolve this problem.\",\n \"kick_reason_35\": \"According to the New Jersey state regulation we are required to determine your exact location. Please enable your device location services.\",\n \"kick_reason_36\": \"Your device is running software \\nwhich may be utilized to bypass geolocation checks which are required by New Jersey law. While your use of this software may be inadvertent, we are not able to confirm your location legal requirement for online wagering. Please contact customer support. so we can help you resolve this problem.\",\n \"kick_reason_50\": \"The game you are trying to open is currently not available.\",\n \"kick_reason_51\": \"According to legal requirements you are required to perform some actions on your account. Please login again to complete them.\",\n \"kick_reason_live_casino\": \"We couldn't verify your location. You can finish a game round but not perform an additional bet or game action.\",\n \"TOUCH_ID_SUB_CAPTION\": \"This feature will be enabled on your next login\",\n \"TOUCH_ID_CAPTION\": \"You can log in faster using the Touch/Face ID features on your device.\",\n \"TERMS_AND_CONDITIONS\": \"Terms And Conditions\",\n \"TOUCH_ID_INIT_SCREEN_ENABLE_BUTTON\": \"ENABLE NOW\",\n \"TOUCH_ID_AUTO_SCREEN\": \"LOGIN WITH TOUCH/FACE ID\",\n \"TOUCH_ID_INFO\": \"<li>Enabling Touch/Face ID feature on this device will allow anyone whose fingerprint is saved on this device to gain full access to your 888 account. You should not proceed to set up this feature if any fingerprint in addition to your own are stored on this device.</li><li>By using Touch/Face ID to access your 888 account, you agree that you are solely responsible for all transactions on your account, regardless if such transactions are made by a third party or any person with a fingerprint saved on this device.</li><li>In addition, you agree that the operator of the application and its affiliates (together the \\\"888 Group\\\") shall not be liable to you for any consequences arising from using Touch/Face ID to access your 888 account. The 888 Group shall not be held responsible for any loss, liability, damage, expenses or costs incurred through the use of this feature.</li><li>For each 888 application which you have on your device, only one of your accounts can be configured to login with Touch/Face ID at any point in time.</li><li>You will be required to login using your password when Touch/Face ID authentication fails or expires.</li><li>888 Group does not store your fingerprint on its servers and does not handle or support Touch/Face ID technology.</li>\",\n \"TABLE_GAMES\": \"Table Games\",\n \"ARCADE\": \"Arcade\",\n \"SPORTS\": \"Sports\",\n \"MEXICAN\": \"Mexican\",\n \"BINGO\": \"Bingo\",\n \"CLASSIC_STYLE_MODERNIZED\": \"Classic Style Modernized\",\n \"AZTEC_INCA_MAYAN\": \"Aztec Inca Mayan\",\n \"CRIME\": \"Crime\",\n \"WILD_WEST\": \"Wild West\",\n \"CANDY_AND_SWEETS\": \"Candy And Sweets\",\n \"GOLD_MINING\": \"Gold Mining\",\n \"VIKINGS_AND_NORDIC_MYTHOLOGY\": \"Vikings And Nordic Mythology\",\n \"XMAS\": \"Xmas\",\n \"JACKPOT_WIDGET_TITLE\": \"\",\n \"LAST_LOGIN_TITLE\": \"Last login:\",\n \"SESSION_TIMER_TITLE\": \"Session time\",\n \"LIVE_SLOTS\": \"Live Slots\",\n \"THE_BOOK_SHELF\": \"The Book Shelf\",\n \"LUCKYTAP_GAMES\": \"LuckyTap Games\",\n \"TSR_WAGERED_AMOUNT\": \"Your wagered amount\",\n \"TSR_SUBTITLE_MALTA\": \"Stay in control of your game!\",\n \"TSR_WINNINGS_TEXT\": \"Your total winnings\",\n \"TSR_LOSSES_TEXT\": \"Your total losses\",\n \"TSR_CLOSE_GAME\": \"Close game\",\n \"TSR_TITLE\": \"Time Spent Reminder\",\n \"TSR_MENU_LINK_LABEL\": \"Time Spent Reminder\",\n \"TSR_CONFIRM\": \"OK\",\n \"TSR_SESSION_TIME_TEXT\": \"You have been logged in for:\",\n \"EXIT\": \"Exit\",\n \"EXIT_GAME_POPUP_TITLE\": \"exit game\",\n \"EXIT_GAME_POPUP_TEXT\": \"Are you sure you want to exit game?\",\n \"CROSS_POKER_ICON_ALT_TEXT\": \"Online Poker\",\n \"OPEN_SESSION_STATUS_LABEL\": \"Status\",\n \"OPEN_SESSION_STATUS_PENDING\": \"Pending\",\n \"OPEN_BETS\": \"Open Bets\",\n \"MIN_BET\": \"Min\",\n \"CONTINUE_GAME\": \"Continue Game\",\n \"OPEN_BETS_NO_RECORDS\": \"We were unable to locate any history records of your open games\",\n \"VIDEO_SLIDES_FILTER_PREVIEW_TITLE\": \"Explore our categories\",\n \"VIDEO_SLIDES_LIVE_STREAMING\": \"LIVE Streaming\",\n \"VIDEO_SLIDES_ONBOARDING_MAIN_TEXT\": \"Swipe\",\n \"VIDEO_SLIDES_ONBOARDING_SECONDARY_TEXT\": \"To see more games\",\n \"VIDEO_SLIDES_ERROR_MAIN_TEXT\": \"Error loading the video. Tap to retry\",\n \"EXPLORE\": \"Explore\",\n \"ONBOARDING_BOTTOM_NAV_BAR_EXPLORE_MAIN_TEXT\": \"Casino like never before!\",\n \"ONBOARDING_BOTTOM_NAV_BAR_EXPLORE_SECONDARY_TEXT\": \"GO EXPLORE\",\n \"INACTIVITY_TIMEOUT_SETTINGS_TITLE\": \"Inactivity Timeout Settings\",\n \"INACTIVITY_TIMEOUT_SETTINGS_MINUTES\": \"{minutes} MIN.\",\n \"INACTIVITY_TIMEOUT_SETTINGS_LABEL\": \"Set the amount of idle time before you are logged out\",\n \"REALITY_CHECK_DIALOG_SESSION_TIMER_LABEL\": \"You have been logged in for:\",\n \"REALITY_CHECK_DIALOG_SESSION_WINNINGS_LABEL\": \"Your total winnings are:\",\n \"REALITY_CHECK_DIALOG_SESSION_LOSSES_LABEL\": \"Your total losses:\",\n \"REALITY_CHECK_DIALOG_TITLE\": \"Reminder\",\n \"REALITY_CHECK_DIALOG_CONTINUE_BUTTON\": \"Continue\",\n \"CLOSE_GAME\": \"Close Game\",\n \"BONUS_ABUSE_PARKING_MONEY_TITLE\": \"Bonus Availability\",\n \"LOGGED_IN_CASHIER_BTN\": \"Cashier\",\n \"BONUS_ABUSE_PARKING_MONEY_TEXT_POKER_WITH_REAL_MONEY\": \"You have an open registration to a future poker tournament that must be completed before your bonus balance becomes available for game play.\\n\\nIn the meantime,\\n•You have {RealMoneyBalance} cash to play with. You can adjust your bet and play now.\\n•You can deposit and play with cash. \\n\\nHow would you like to proceed?\",\n \"BONUS_ABUSE_PARKING_MONEY_TEXT_POKER_WITHOUT_REAL_MONEY\": \"You have an open registration to a future poker tournament that must be completed before your bonus balance becomes available for game play.\\n\\nIn the meantime,\\n•You can deposit and play with cash. \\n\\nHow would you like to proceed?\",\n \"BONUS_ABUSE_PARKING_MONEY_TEXT_SPORT_WITH_REAL_MONEY\": \"You have open sports bets that must be settled before your bonus balance becomes available for game play.\\n\\nIn the meantime,\\n•You have {RealMoneyBalance} cash to play with. You can adjust your bet and play now.\\n•You can deposit and play with cash. \\n\\nHow would you like to proceed?\",\n \"BONUS_ABUSE_PARKING_MONEY_TEXT_SPORT_WITHOUT_REAL_MONEY\": \"You have open sports bets that must be settled before your bonus balance becomes available for game play.\\n\\nIn the meantime,\\n•You can deposit and play with cash. \\n\\nHow would you like to proceed?\",\n \"BONUS_ABUSE_PARKING_MONEY_TEXT_POKER_AND_SPORT_WITH_REAL_MONEY\": \"You have open cash bets on sport and poker that must be settled before your bonus balance becomes available for game play.\\n\\nIn the meantime,\\n•You have {RealMoneyBalance} cash to play with. You can adjust your bet and play now.\\n•You can deposit and play with cash. \\n\\nHow would you like to proceed?\",\n \"BONUS_ABUSE_PARKING_MONEY_TEXT_POKER_AND_SPORT_WITHOUT_REAL_MONEY\": \"You have open cash bets on sport and poker that must be settled before your bonus balance becomes available for game play.\\n\\nIn the meantime,\\n•You can deposit and play with cash. \\n\\nHow would you like to proceed?\",\n \"HYBRID_VERSION_MESSAGE_UPGRADE_BUTTON\": \"Upgrade\",\n \"HYBRID_VERSION_MESSAGE_NOT_NOW_BUTTON\": \"Not Now\",\n \"HYBRID_VERSION_MESSAGE_TITLE\": \"A new version is available!\",\n \"HYBRID_VERSION_MESSAGE_BODY\": \"A newer version of our casino app is available. Upgrade now to enjoy the latest features!\",\n \"GENERIC_NOTIFICATION_POPUP_TITLE\": \"Notification\",\n \"RESTRICTION_FOR_USE_TITLE\": \"Restricted Country\",\n \"RESTRICTION_FOR_USE_TEXT\": \"Due to regulations, this app cannot be used from your country of residence.\",\n \"INACTIVITY_IDLE_POPUP_TEXT\": \"Due to inactivity, you will be disconnected in {timer} minutes.\\n Click OK to continue playing.\",\n \"HYBRID_VERSION_NOT_AVAILABLE_TITLE\": \"INFO\",\n \"HYBRID_VERSION_NOT_AVAILABLE\": \"Play on the new Ontario app. \\n There's a new app dedicated for Ontario players!\",\n \"HYBRID_VERSION_NOT_AVAILABLE_DOWNLOAD\": \"GET THE APP\",\n \"NIGHT_LIMIT_TITLE\": \"Safer Gambling Message\",\n \"NIGHT_LIMIT_SOFT_KICK_TEXT\": \"We see that your activity hasn't slowed down. Please understand we are committed to ensuring your experience here is not just fun but also safe. \\n\\nA temporary restriction has been placed on your account so you will not be able to continue playing for the next {hours} hours.\\n\\nWe've sent you an email with more information about the restriction and the available responsible gaming tools and controls.\",\n \"NIGHT_LIMIT_CTA\": \"GOT IT\",\n \"NIGHT_LIMIT_OPEN_GAME_TEXT\": \"The temporary restriction is still active and will be removed on {date} starting from {hour}.\",\n \"UK_LICENSE_STATUS\": \"Licensed status\",\n \"UK_LICENSE_TEXT\": `Copyright 2024, the 888 Group. All rights reserved.\n 888 Holdings plc is listed on the London Stock Exchange.\n Virtual Global Digital Services Limited and VDSL (International) Limited are licensed and regulated to offer online gaming services under the laws of Gibraltar (Remote Gaming License Numbers 112 and 113) and make no representation as to legality of such services in other jurisdictions.\n In the event that you have registered from Canada, our services are provided by VDSL (International) Limited.\n Our services in the UK are operated by 888 UK Limited, a company incorporated in Gibraltar. 888 UK Limited is licensed and regulated in Great Britain by the #UK-LICENSE-PAGE-LINK# under the account number 39028.\n Our services in European Single Market member states (except for states in which our services are provided under a local license) are operated by Virtual Digital Services Limited, a company incorporated in Malta which is part of the European Union.\n Virtual Digital Services Limited operates under the auspices of a gaming license provided under the laws of Malta - MGA/CRP/543/2018 issued on the 11/10/2019.\n Our betting products are operated in Ireland by 888 (Ireland) Limited, a company incorporated in Malta, which is licensed and regulated by Ireland's Revenue Commissioners.\n The address of our Gibraltar based companies is: 601-701 Europort, Gibraltar.\n The address of our Malta based companies is: Level 7, Tagliaferro Business Centre, 14, High Street, Sliema SLM 1549, Malta\n Gambling can be addictive, please play responsibly. For more information on support tools, please visit our #UK-LICENSE-PAGE-LINK#`,\n \"UK_LICENSE_GC_PAGE_LINK\": \"Gambling Commission\",\n \"UK_LICENSE_RG_PAGE_LINK\": \"Responsible Gambling Page\",\n \"EXPLORER_BADGE_NEW\": \"NEW\",\n \"EXPLORER_NOT_AVAILABLE_TITLE\": \"Stay Tuned!\",\n \"EXPLORER_NOT_AVAILABLE_TEXT\": \"Thanks for checking this out! This feature is being gradually introduced on mobile, so it might not be available to everyone just yet. Keep an eye out for updates!\",\n \"JACKPOT_BET\": \"Jackpot bet\",\n \"JOIN_JACKPOT_BET\": \"Join the pot\",\n \"PLAY_WITHOUT_JACKPOT_BET\": \"Play without joining\",\n\n }\n}","import {NullableUndefinedNumber, NullableUndefinedString} from \"../common/types/nullable-types\";\nimport {Check} from \"@sparkware/app-utils\";\n\n/**\n * A helper class to get a property value from an object using a case-insensitive match by property name\n * CI = Case-Insensitive\n */\nexport class CIPropRead {\n static getProperty(propertyName: string, propertyOwner: any): any {\n if(!propertyOwner) {\n return null;\n }\n propertyName = propertyName.toLowerCase();\n for(let propName of Object.keys(propertyOwner)) {\n if(propName.toLowerCase() === propertyName) {\n return propertyOwner[propName];\n }\n }\n\n return null;\n }\n\n static getShallowLowercasedObject(propertyName: string, propertyOwner: any): any {\n const value = CIPropRead.getProperty(propertyName, propertyOwner);\n if(Check.isObject(value)) {\n return Object.keys(value).reduce((accumulator, key) => {\n accumulator[key.toLowerCase()] = value[key];\n return accumulator;\n }, {});\n }\n\n return value;\n }\n\n static getNumericProperty(propertyName: string, propertyOwner: any): NullableUndefinedNumber {\n const value = parseInt(CIPropRead.getProperty(propertyName, propertyOwner));\n if(Check.isNumber(value)) {\n return value;\n }\n\n return null;\n }\n\n static getStringProperty(propertyName: string, propertyOwner: any): NullableUndefinedString {\n const value = CIPropRead.getProperty(propertyName, propertyOwner)?.toString();\n if(Check.isString(value)) {\n return value;\n }\n return null;\n }\n}","import {TimeSpan} from \"@sparkware/app-utils\";\nimport {namedSetTimeout} from \"../common/utils/time-functions\";\n\nexport function delay(interval: TimeSpan): Promise<void> {\n return new Promise<void>((resolve) => {\n namedSetTimeout('DELAY_TIMER', () => resolve(), interval);\n });\n}","import {IReactionDisposer, IReactionOptions, IReactionPublic, reaction as mobxReaction} from \"mobx\";\nimport {\n IGameEventSubscription\n} from \"../app-react/services/game-runner/interfaces/game-communication/game-communication-channel.interface\";\nimport {CGPEventSubscription} from \"../app-react/services/sdk/cgp-sdk.interface\";\nimport {TimeIntervalName} from \"../common/utils/time-interval-names\";\nimport {Check, TimeSpan} from \"@sparkware/app-utils\";\nimport {namedSetInterval, namedSetTimeout} from \"../common/utils/time-functions\";\nimport {\n TimerSubscriptionRef\n} from \"../app-react/services/companies/game-session-behaviors/common/game-session-behavior-base\";\nimport {DomEventSubscription} from \"./event-listener-registration\";\n\nexport class DisposableObject {\n private _reactions: IReactionDisposer[] = [];\n addReaction<T, FireImmediately extends boolean = false>(expression: (r: IReactionPublic) => T, effect: (arg: T, prev: FireImmediately extends true ? T | undefined : T, r: IReactionPublic) => void, opts?: IReactionOptions<T, FireImmediately>): void {\n this._reactions.push(mobxReaction(expression, effect, opts));\n }\n\n private _gameEventsSubscription: IGameEventSubscription[] = [];\n protected addGameEventSubscription(subscription: IGameEventSubscription): IGameEventSubscription {\n this._gameEventsSubscription.push(subscription);\n\n return {\n unsubscribe: () => {\n const index = this._gameEventsSubscription.findIndex(s => s === subscription);\n if(index >= 0) {\n this._gameEventsSubscription[index].unsubscribe();\n this._gameEventsSubscription.splice(index, 1);\n }\n }\n }\n }\n\n private _sdkEventsSubscriptions: CGPEventSubscription[] = [];\n protected addSdkEventSubscription(subscription: CGPEventSubscription): void {\n this._sdkEventsSubscriptions.push(subscription);\n }\n\n private _intervals: number[] = [];\n protected addInterval(handler: () => void, interval: TimeSpan | number = 0, name?: TimeIntervalName): TimerSubscriptionRef {\n const ref = name ? namedSetInterval(name, handler, interval) : window.setInterval(handler, Check.isNumber(interval) ? interval : interval.totalMilliseconds);\n this._intervals.push(ref);\n return {\n clear: () => {\n clearInterval(ref);\n const index = this._intervals.findIndex(i => i === ref);\n if(index >= 0) {\n this._intervals.splice(index, 1);\n }\n }\n }\n }\n\n private _timeouts: number[] = [];\n protected addTimeout(handler: () => void, interval: TimeSpan | number = 0, name?: TimeIntervalName): TimerSubscriptionRef {\n const ref = name ? namedSetTimeout(name, handler, interval) : window.setTimeout(handler, Check.isNumber(interval) ? interval : interval.totalMilliseconds);\n this._timeouts.push(ref);\n return {\n clear: () => {\n clearTimeout(ref);\n const index = this._timeouts.findIndex(t => t === ref);\n if(index >= 0) {\n this._timeouts.splice(index, 1);\n }\n }\n }\n }\n\n private _domEventsSubscriptions: DomEventSubscription[] = [];\n protected addDomEventSubscription(subscription: DomEventSubscription): DomEventSubscription {\n this._domEventsSubscriptions.push(subscription);\n return subscription;\n }\n\n dispose(): void {\n this._reactions.forEach(r => r());\n this._reactions = [];\n this._gameEventsSubscription.forEach(s => s.unsubscribe());\n this._gameEventsSubscription = [];\n this._intervals.forEach(i => clearInterval(i));\n this._intervals = [];\n this._timeouts.forEach(t => clearTimeout(t));\n this._timeouts = [];\n this._sdkEventsSubscriptions.forEach(s => s.off());\n this._sdkEventsSubscriptions = [];\n this._domEventsSubscriptions.forEach(s => s.dispose());\n this._domEventsSubscriptions = [];\n\n }\n}","var map = {\n\t\"./about-dialog.action.ts\": 28813,\n\t\"./cashier-upload-documents.action.ts\": 94167,\n\t\"./chat.action.ts\": 65407,\n\t\"./com-points.action.ts\": 15060,\n\t\"./control-center.action.ts\": 9626,\n\t\"./deposit.action.ts\": 57695,\n\t\"./explore-navigation.action.ts\": 9089,\n\t\"./help-center.action.ts\": 56260,\n\t\"./hybrid-info.action.ts\": 94938,\n\t\"./inactivity-timeout-settings.action.ts\": 4903,\n\t\"./install-pwa.action.ts\": 42967,\n\t\"./loyalty-indicator.action.ts\": 21651,\n\t\"./my-club.action.ts\": 10361,\n\t\"./push-notifications-permissions-request.action.ts\": 34985,\n\t\"./reverse-withdrawal.action.ts\": 22783,\n\t\"./sign-up.action.ts\": 15818,\n\t\"./test-regulation-specific.action.ts\": 70351,\n\t\"./time-spent-reminder.action.ts\": 84482,\n\t\"./touch-id.action.ts\": 79176,\n\t\"./transaction-history.action.ts\": 94258\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 69861;","var map = {\n\t\"./casino777/theme.definition\": [\n\t\t33661,\n\t\t562,\n\t\t230,\n\t\t4166,\n\t\t4123,\n\t\t634,\n\t\t5120,\n\t\t9221,\n\t\t7528\n\t],\n\t\"./casino888/cip/theme.definition\": [\n\t\t18180,\n\t\t562,\n\t\t6598,\n\t\t1755,\n\t\t3126,\n\t\t337\n\t],\n\t\"./casino888/cis/theme.definition\": [\n\t\t96541,\n\t\t562,\n\t\t6598,\n\t\t1755,\n\t\t3126,\n\t\t4730\n\t],\n\t\"./casino888/theme.definition\": [\n\t\t67021,\n\t\t562,\n\t\t6598,\n\t\t1755,\n\t\t5601,\n\t\t3731\n\t],\n\t\"./harrahs/theme.definition\": [\n\t\t96036,\n\t\t562,\n\t\t1755,\n\t\t9221,\n\t\t6216,\n\t\t6540\n\t],\n\t\"./mrgreen/cip/theme.definition\": [\n\t\t27586,\n\t\t562,\n\t\t6598,\n\t\t230,\n\t\t5629,\n\t\t7496,\n\t\t1175,\n\t\t6078,\n\t\t933\n\t],\n\t\"./mrgreen/cis/theme.definition\": [\n\t\t25498,\n\t\t562,\n\t\t6598,\n\t\t230,\n\t\t5629,\n\t\t7496,\n\t\t1175,\n\t\t6078,\n\t\t3742\n\t],\n\t\"./mrgreen/theme.definition\": [\n\t\t81055,\n\t\t562,\n\t\t6598,\n\t\t230,\n\t\t5629,\n\t\t4166,\n\t\t4123,\n\t\t6001,\n\t\t7496,\n\t\t634,\n\t\t2688,\n\t\t6551\n\t],\n\t\"./si/cis/theme.definition\": [\n\t\t59180,\n\t\t562,\n\t\t230,\n\t\t5629,\n\t\t4166,\n\t\t6001,\n\t\t6446,\n\t\t1722,\n\t\t5696\n\t],\n\t\"./si/theme.definition\": [\n\t\t7404,\n\t\t562,\n\t\t230,\n\t\t4166,\n\t\t4123,\n\t\t6001,\n\t\t6446,\n\t\t9965,\n\t\t8505\n\t],\n\t\"./wsop/cip/theme.definition\": [\n\t\t44712,\n\t\t562,\n\t\t6598,\n\t\t1755,\n\t\t3843\n\t],\n\t\"./wsop/theme.definition\": [\n\t\t28953,\n\t\t562,\n\t\t6598,\n\t\t1755,\n\t\t5601,\n\t\t6216,\n\t\t3258\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 51592;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./777/overrides/com/config\": [\n\t\t37354,\n\t\t7354\n\t],\n\t\"./777/overrides/com/config.ts\": [\n\t\t37354,\n\t\t7354\n\t],\n\t\"./777/overrides/uk/config\": [\n\t\t79207,\n\t\t9207\n\t],\n\t\"./777/overrides/uk/config.ts\": [\n\t\t79207,\n\t\t9207\n\t],\n\t\"./888casino/overrides/ca/config\": [\n\t\t95599,\n\t\t5599\n\t],\n\t\"./888casino/overrides/ca/config.ts\": [\n\t\t95599,\n\t\t5599\n\t],\n\t\"./888casino/overrides/ca/languages/eng\": [\n\t\t78209,\n\t\t8209\n\t],\n\t\"./888casino/overrides/ca/languages/eng.ts\": [\n\t\t78209,\n\t\t8209\n\t],\n\t\"./888casino/overrides/com/config\": [\n\t\t81250,\n\t\t1250\n\t],\n\t\"./888casino/overrides/com/config.ts\": [\n\t\t81250,\n\t\t1250\n\t],\n\t\"./888casino/overrides/dk/config\": [\n\t\t176,\n\t\t176\n\t],\n\t\"./888casino/overrides/dk/config.ts\": [\n\t\t176,\n\t\t176\n\t],\n\t\"./888casino/overrides/es/config\": [\n\t\t7879,\n\t\t7879\n\t],\n\t\"./888casino/overrides/es/config.ts\": [\n\t\t7879,\n\t\t7879\n\t],\n\t\"./888casino/overrides/es/languages/spa\": [\n\t\t55483,\n\t\t5483\n\t],\n\t\"./888casino/overrides/es/languages/spa.ts\": [\n\t\t55483,\n\t\t5483\n\t],\n\t\"./888casino/overrides/ger/config\": [\n\t\t7503,\n\t\t7503\n\t],\n\t\"./888casino/overrides/ger/config.ts\": [\n\t\t7503,\n\t\t7503\n\t],\n\t\"./888casino/overrides/ger/languages/ger\": [\n\t\t52763,\n\t\t2763\n\t],\n\t\"./888casino/overrides/ger/languages/ger.ts\": [\n\t\t52763,\n\t\t2763\n\t],\n\t\"./888casino/overrides/it/config\": [\n\t\t53876,\n\t\t3876\n\t],\n\t\"./888casino/overrides/it/config.ts\": [\n\t\t53876,\n\t\t3876\n\t],\n\t\"./888casino/overrides/nj/config\": [\n\t\t32683,\n\t\t2683\n\t],\n\t\"./888casino/overrides/nj/config.ts\": [\n\t\t32683,\n\t\t2683\n\t],\n\t\"./888casino/overrides/nj/languages/eng\": [\n\t\t16421,\n\t\t6421\n\t],\n\t\"./888casino/overrides/nj/languages/eng.ts\": [\n\t\t16421,\n\t\t6421\n\t],\n\t\"./888casino/overrides/nl/config\": [\n\t\t50377,\n\t\t377\n\t],\n\t\"./888casino/overrides/nl/config.ts\": [\n\t\t50377,\n\t\t377\n\t],\n\t\"./888casino/overrides/pt/config\": [\n\t\t5451,\n\t\t5451\n\t],\n\t\"./888casino/overrides/pt/config.ts\": [\n\t\t5451,\n\t\t5451\n\t],\n\t\"./888casino/overrides/pt/languages/por\": [\n\t\t58716,\n\t\t8716\n\t],\n\t\"./888casino/overrides/pt/languages/por.ts\": [\n\t\t58716,\n\t\t8716\n\t],\n\t\"./888casino/overrides/ro/config\": [\n\t\t58822,\n\t\t8822\n\t],\n\t\"./888casino/overrides/ro/config.ts\": [\n\t\t58822,\n\t\t8822\n\t],\n\t\"./888casino/overrides/se/config\": [\n\t\t2515,\n\t\t2515\n\t],\n\t\"./888casino/overrides/se/config.ts\": [\n\t\t2515,\n\t\t2515\n\t],\n\t\"./888casino/overrides/uk/config\": [\n\t\t41663,\n\t\t1663\n\t],\n\t\"./888casino/overrides/uk/config.ts\": [\n\t\t41663,\n\t\t1663\n\t],\n\t\"./config-initialization-params.interface\": [\n\t\t8571,\n\t\t8571\n\t],\n\t\"./config-initialization-params.interface.ts\": [\n\t\t8571,\n\t\t8571\n\t],\n\t\"./default-config\": [\n\t\t81174\n\t],\n\t\"./default-config.ts\": [\n\t\t81174\n\t],\n\t\"./harrahs/overrides/nj/config\": [\n\t\t78683,\n\t\t8683\n\t],\n\t\"./harrahs/overrides/nj/config.ts\": [\n\t\t78683,\n\t\t8683\n\t],\n\t\"./harrahs/overrides/nj/languages/eng\": [\n\t\t14005,\n\t\t4005\n\t],\n\t\"./harrahs/overrides/nj/languages/eng.ts\": [\n\t\t14005,\n\t\t4005\n\t],\n\t\"./mrgreen/overrides/com/config\": [\n\t\t18745,\n\t\t8745\n\t],\n\t\"./mrgreen/overrides/com/config.ts\": [\n\t\t18745,\n\t\t8745\n\t],\n\t\"./mrgreen/overrides/com/languages/eng\": [\n\t\t39903,\n\t\t9903\n\t],\n\t\"./mrgreen/overrides/com/languages/eng.ts\": [\n\t\t39903,\n\t\t9903\n\t],\n\t\"./mrgreen/overrides/com/languages/fre\": [\n\t\t22160,\n\t\t2160\n\t],\n\t\"./mrgreen/overrides/com/languages/fre.ts\": [\n\t\t22160,\n\t\t2160\n\t],\n\t\"./mrgreen/overrides/com/languages/ger\": [\n\t\t96097,\n\t\t6097\n\t],\n\t\"./mrgreen/overrides/com/languages/ger.ts\": [\n\t\t96097,\n\t\t6097\n\t],\n\t\"./mrgreen/overrides/com/languages/spa\": [\n\t\t82389,\n\t\t2389\n\t],\n\t\"./mrgreen/overrides/com/languages/spa.ts\": [\n\t\t82389,\n\t\t2389\n\t],\n\t\"./mrgreen/overrides/dk/config\": [\n\t\t18465,\n\t\t8465\n\t],\n\t\"./mrgreen/overrides/dk/config.ts\": [\n\t\t18465,\n\t\t8465\n\t],\n\t\"./mrgreen/overrides/dk/languages/dan\": [\n\t\t46640,\n\t\t6640\n\t],\n\t\"./mrgreen/overrides/dk/languages/dan.ts\": [\n\t\t46640,\n\t\t6640\n\t],\n\t\"./mrgreen/overrides/ger/config\": [\n\t\t14056,\n\t\t4056\n\t],\n\t\"./mrgreen/overrides/ger/config.ts\": [\n\t\t14056,\n\t\t4056\n\t],\n\t\"./mrgreen/overrides/ger/languages/ger\": [\n\t\t65518,\n\t\t5518\n\t],\n\t\"./mrgreen/overrides/ger/languages/ger.ts\": [\n\t\t65518,\n\t\t5518\n\t],\n\t\"./mrgreen/overrides/se/config\": [\n\t\t9554,\n\t\t9554\n\t],\n\t\"./mrgreen/overrides/se/config.ts\": [\n\t\t9554,\n\t\t9554\n\t],\n\t\"./mrgreen/overrides/se/languages/swe\": [\n\t\t17627,\n\t\t7627\n\t],\n\t\"./mrgreen/overrides/se/languages/swe.ts\": [\n\t\t17627,\n\t\t7627\n\t],\n\t\"./si/overrides/mi/config\": [\n\t\t71380,\n\t\t1380\n\t],\n\t\"./si/overrides/mi/config.ts\": [\n\t\t71380,\n\t\t1380\n\t],\n\t\"./si/overrides/mi/languages/eng\": [\n\t\t5992,\n\t\t5992\n\t],\n\t\"./si/overrides/mi/languages/eng.ts\": [\n\t\t5992,\n\t\t5992\n\t],\n\t\"./wsop/overrides/nj/config\": [\n\t\t96639,\n\t\t6639\n\t],\n\t\"./wsop/overrides/nj/config.ts\": [\n\t\t96639,\n\t\t6639\n\t],\n\t\"./wsop/overrides/nj/languages/eng\": [\n\t\t81009,\n\t\t1009\n\t],\n\t\"./wsop/overrides/nj/languages/eng.ts\": [\n\t\t81009,\n\t\t1009\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 11608;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./777/overrides/com/config\": [\n\t\t37354,\n\t\t7354\n\t],\n\t\"./777/overrides/uk/config\": [\n\t\t79207,\n\t\t9207\n\t],\n\t\"./888casino/overrides/ca/config\": [\n\t\t95599,\n\t\t5599\n\t],\n\t\"./888casino/overrides/com/config\": [\n\t\t81250,\n\t\t1250\n\t],\n\t\"./888casino/overrides/dk/config\": [\n\t\t176,\n\t\t176\n\t],\n\t\"./888casino/overrides/es/config\": [\n\t\t7879,\n\t\t7879\n\t],\n\t\"./888casino/overrides/ger/config\": [\n\t\t7503,\n\t\t7503\n\t],\n\t\"./888casino/overrides/it/config\": [\n\t\t53876,\n\t\t3876\n\t],\n\t\"./888casino/overrides/nj/config\": [\n\t\t32683,\n\t\t2683\n\t],\n\t\"./888casino/overrides/nl/config\": [\n\t\t50377,\n\t\t377\n\t],\n\t\"./888casino/overrides/pt/config\": [\n\t\t5451,\n\t\t5451\n\t],\n\t\"./888casino/overrides/ro/config\": [\n\t\t58822,\n\t\t8822\n\t],\n\t\"./888casino/overrides/se/config\": [\n\t\t2515,\n\t\t2515\n\t],\n\t\"./888casino/overrides/uk/config\": [\n\t\t41663,\n\t\t1663\n\t],\n\t\"./harrahs/overrides/nj/config\": [\n\t\t78683,\n\t\t8683\n\t],\n\t\"./mrgreen/overrides/com/config\": [\n\t\t18745,\n\t\t8745\n\t],\n\t\"./mrgreen/overrides/dk/config\": [\n\t\t18465,\n\t\t8465\n\t],\n\t\"./mrgreen/overrides/ger/config\": [\n\t\t14056,\n\t\t4056\n\t],\n\t\"./mrgreen/overrides/se/config\": [\n\t\t9554,\n\t\t9554\n\t],\n\t\"./si/overrides/mi/config\": [\n\t\t71380,\n\t\t1380\n\t],\n\t\"./wsop/overrides/nj/config\": [\n\t\t96639,\n\t\t6639\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 44041;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./ara\": [\n\t\t27984,\n\t\t4307\n\t],\n\t\"./ara.ts\": [\n\t\t27984,\n\t\t4307\n\t],\n\t\"./chi\": [\n\t\t81956,\n\t\t913\n\t],\n\t\"./chi.ts\": [\n\t\t81956,\n\t\t913\n\t],\n\t\"./dan\": [\n\t\t6737,\n\t\t7127\n\t],\n\t\"./dan.ts\": [\n\t\t6737,\n\t\t7127\n\t],\n\t\"./dut\": [\n\t\t37795,\n\t\t9925\n\t],\n\t\"./dut.ts\": [\n\t\t37795,\n\t\t9925\n\t],\n\t\"./eng\": [\n\t\t98822\n\t],\n\t\"./eng.ts\": [\n\t\t98822\n\t],\n\t\"./fin\": [\n\t\t10491,\n\t\t2222\n\t],\n\t\"./fin.ts\": [\n\t\t10491,\n\t\t2222\n\t],\n\t\"./fre\": [\n\t\t20277,\n\t\t5020\n\t],\n\t\"./fre.ts\": [\n\t\t20277,\n\t\t5020\n\t],\n\t\"./ger\": [\n\t\t80928,\n\t\t1626\n\t],\n\t\"./ger.ts\": [\n\t\t80928,\n\t\t1626\n\t],\n\t\"./gre\": [\n\t\t29242,\n\t\t6008\n\t],\n\t\"./gre.ts\": [\n\t\t29242,\n\t\t6008\n\t],\n\t\"./ita\": [\n\t\t8002,\n\t\t8806\n\t],\n\t\"./ita.ts\": [\n\t\t8002,\n\t\t8806\n\t],\n\t\"./jpn\": [\n\t\t56250,\n\t\t4563\n\t],\n\t\"./jpn.ts\": [\n\t\t56250,\n\t\t4563\n\t],\n\t\"./nor\": [\n\t\t31825,\n\t\t1169\n\t],\n\t\"./nor.ts\": [\n\t\t31825,\n\t\t1169\n\t],\n\t\"./por\": [\n\t\t72967,\n\t\t7383\n\t],\n\t\"./por.ts\": [\n\t\t72967,\n\t\t7383\n\t],\n\t\"./rum\": [\n\t\t64134,\n\t\t181\n\t],\n\t\"./rum.ts\": [\n\t\t64134,\n\t\t181\n\t],\n\t\"./rus\": [\n\t\t21000,\n\t\t4955\n\t],\n\t\"./rus.ts\": [\n\t\t21000,\n\t\t4955\n\t],\n\t\"./spa\": [\n\t\t25620,\n\t\t9128\n\t],\n\t\"./spa.ts\": [\n\t\t25620,\n\t\t9128\n\t],\n\t\"./swe\": [\n\t\t59791,\n\t\t6330\n\t],\n\t\"./swe.ts\": [\n\t\t59791,\n\t\t6330\n\t],\n\t\"./tha\": [\n\t\t9801,\n\t\t9724\n\t],\n\t\"./tha.ts\": [\n\t\t9801,\n\t\t9724\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 11434;\nmodule.exports = webpackAsyncContext;"],"names":["BlankHorizontalSeparatorBox","styled","span","_templateObject","_taggedTemplateLiteral","flexFixedSizeItem","props","_props$multiplier","PC_HORIZONTAL_SPACE_BETWEEN_ITEMS","multiplier","theme","mediaQuery","lAndBelow","_props$multiplier2","MOBILE_HORIZONTAL_SPACE_BETWEEN_ITEMS","CollapseIndicatorBox","styledBox","GameIconWrapperBox","div","_ref","xs","GameIconBox","Image","assets","images","games_icons_background","BGGameBlack_png","toString","LobbyGridBox","LobbyWrapperBox","MainScreenComponent","observer","OrbitComponent","render","_jsx","className","concat","MAIN_SCREEN","CyClass","children","this","arguments","length","undefined","ColorSetWanted","ButtonBox","button","disabled","rounded","layout","border","radius","margin","css","_templateObject2","font","presets","ultra","noRemUnits","hasIcon","hasLabel","height","iconSize","strokeWidth","lateralPadding","fullWidth","width","labelOverflow","_templateObject3","colorSet","text","bg","elevated","shadow","bgGradient","_templateObject4","textGradient","_templateObject5","_ref2","hover","Hover","_templateObject6","_templateObject7","_templateObject8","_templateObject9","Active","_templateObject10","_templateObject11","_templateObject12","_templateObject13","hoverSet","setKey","active","normal","ButtonLabelBox","ButtonIconWrapperBox","reverseOnRTL","CssRule","For","RTL","build","ButtonLabelPaddingBox","hoverColor","hex","hoverAdjustAmount","color","Color","fromHex","distanceFrom","darken","hexa","lighten","e","console","log","activeColor","activeAdjustAmount","computeColorSet","defaultDisabled","Check","isNumber","hoverBgGradient","_objectSpread","gradient","clrs","split","i","hexHoverClr","substring","join","hoverGradient","defaultHover","activeBgGradient","hexActiveClr","activeGradient","defaultActive","ButtonSkeletonBox","iconOnly","ButtonIcon","_props$options","IconComponent","options","sizeUnit","SvgSizeUnit","Em","size","Button","withTheme","_stroke","_rounded","_ref3","_elevated","preset","icon","stroke","sizeVariant","tooltip","onClick","onMouseEnter","onMouseLeave","otherProps","_objectWithoutProperties","_excluded","presetValues","baseUIComponents","themePresetDefaults","defaults","colors","disabledColorSet","iconPlacement","placement","strokeValues","sizeVariantValues","iconSizeValue","fontSize","skeleton","_jsxs","title","Component","FlexShrinkItemBox","flexShrink","flexBasis","style","CurrencyAmountValueBox","CurrencyAmountErrorMessageBox","danger","visible","CurrencyAmountInputBox","boxBorderContrast","CurrencyAmountCurrencyBox","CurrencyAmountInputValueBox","input","attrs","type","placeholder","textLight","CurrencyAmountInput","currencySymbol","value","cyClass","onChange","ev","target","Boolean","errorMessage","errorCyClass","RadioInputBox","backgroundDark","boxBorderLighter","brandPrimary","SelectWrapperBox","SelectBox","select","_ref4","regular","backgroundMiddleDark","_ref5","hasError","SelectBoxArrow","Select","_this$props","passThroughProps","selectWidth","ArrowIcon","services","currentTheme","icons","rightArrowIcon","Svg","svg","flipOnRTL","SvgIcon","React","_this$props$viewBox","Rem","defaultSize","Px","Percent","ratio","sizeIsHeight","viewBox","display","version","xmlns","fill","DividerBox","SpacerBox","XCloseButtonBox","close_modal_dialog_png","SwiperWindowComponent","arena","renderList","windowPosition","useIsInViewPort","ref","opt","isIntersecting","setIntersecting","useState","useEffect","intersectionObserverInit","threshold","intersectionThreshold","root","document","getElementById","intersectionRoot","IntersectionObserver","entry","intersectionRatio","intersectionObserverHandler","current","observe","disconnect","err","error","ArenaGamesListsComponent","useServices","listsCount","setListsCount","hasMoreLists","setHasMoreLists","intersectionSpyRef","useRef","isIntersectionSpyInViewport","arenas","getArena","arenaName","reactionDispose","reaction","user","isAuthorized","getBoundingClientRect","top","window","innerHeight","loadNextBatch","nextBatch","getNextBatchSize","range","Array","from","x","map","listWindowPosition","LiveCasinoGridItemBox","fluidWidth","mAndAbove","xlAndAbove","sAndBelow","LiveCasinoGridItemInfoItemBox","LiveCasinoGridItemInfobarIconBox","LiveCasinoGridItemThumbnailImageBox","filterBlur","ITEM_WRAPPER_BOX","RED","GREEN","LiveCasinoGridItemInfobarDefaultBox","hexToRgba","components","newLiveCasino","gridItem","infobarBackground","backgroundContrast","LiveCasinoGridItemInfobarCasino777Box","background","LiveCasinoGridItemInfobarMrGreenBox","horizontalLineBackgroundColor","LiveCasinoGridItemInfobarBox","styledByTheme","forCasino777","forMrGreen","apply","LiveCasinoGridItemClosedMessageBox","LiveCasinoGridItemThumbnailOverlayBox","LiveCasinoGridItemThumbnailBox","LiveCasinoGridItemWrapperBox","LiveCasinoGridItemTitleBox","LiveCasinoGridItemBetBehindButtonBox","LiveCasinoGridItemJackpotBox","LiveCasinoGridItemOpenAtBox","ComponentBody","_class","constructor","_openGame","gameInfo","openGameParams","isRealMode","pageName","seoCategory","gameIndex","listTitle","open","_renderDealerName","tableInfo","liveTable","isMobilePhone","device","isMobile","isTablet","isEmpty","isNullOrUndefined","Dealer","alt","src","live_arena","dealer_icon_png","_renderSeatsCount","TableSeatsComponent","_renderRouletteDraws","RouletteDrawsComponent","_renderJackpot","jpValue","jackpots","getGameJackpot","gameType","currency","formatMoney","_renderBetBehindButton","tableIsFull","Seats","SeatsTaken","BetBehind","_renderGameInfobar","IsOpen","FlexGrowItemBox","_renderGameIsClosed","_this$props$liveTable","translation","translate","OperationHoursStartTime","_renderGameThumbnailImage","gameTitle","gameImage","TableImage","gameArenaIcon","imageRandom","Math","random","Name","addQueryParam","lazy","_renderGameThumbnail","liveCasinoMinMaxBetProps","regulation","renderLiveCasinoMinMaxBet","_renderGameTitle","_this$props$gameInfo","_renderGameItem","classNames","captureGameElementRef","logger","LiveCasinoArenaGridItem","withServices","LiveCasinoGridBox","LiveCasinoGridItemSkeletonBox","LiveCasinoGridItemSkeletonTitleBox","wrapperBorder","backgroundLight","LiveCasinoGridItemSkeletonWrapperBox","LiveCasinoArenaGrid","_dec","observable","_dec2","_dec3","action","bound","_class2","super","_gameElementRef","_gridElementRef","_initializerDefineProperty","_descriptor","_descriptor2","_numberOfGames","_captureGameElementRef","gameElement","_computeNumberOfGamesInARow","_captureGridElementRef","gridElement","makeObservable","liveTabConfigs","liveTableFeeds","currentArenaTabConfiguration","_setCMSBannerPosition","_this$props$promotion","cmsBannerPositionFromConfig","_numberOfGamesPerRow","promotionalBannerConfig","displayRowPlace","_cmsBannerPosition","round","Number","_renderPromotionalBanner","_this$liveTabConfigs","_this$liveTabConfigs$","_this$liveTabConfigs$2","promotionalBanner","headerConfiguration","banners","BannerComponent","templateID","componentID","bannerAdminPlaceholderId","showPlaceholder","_renderGridSkeleton","skeletons","push","_renderAbGameInfo","tableId","key","abTestingFeatureDataProvider","staticLiveArena","isEnabled","SingleGameComponent","games","gamesMap","useSquareIcons","disableGameInfoHover","getTableInfo","_renderGridItem","_this$services$liveTa","gridConfiguration","shouldRenderPromoBanner","_renderGames","gameIds","getLiveGames","componentDidMount","os","isPC","fireImmediately","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","Object","getOwnPropertyDescriptor","LiveCasinoGridItemDrawsBox","LiveCasinoGridItemDrawBox","ROULETTE_NUMBERS_MAP","red","green","_getDrawColor","drawValue","includes","RouletteLast5Numbers","drawColor","_isTableFull","_this$props$tableInfo","Players","_getTableIsFullText","_getTableIsFullTranslationKey","_getPlayersCountFormated","_getSeatsIconSource","seat_icon_dark_png","seat_icon_png","_this$props$tableInfo2","isLiveStreamOverlay","LiveCasinoArenaNavbarButtonWrapperBox","LiveCasinoFilterButtonsBox","STICKY_NAVBAR","LiveCasinoNavbarBox","stickyHandler","dispose","FilterButtonComponent","ThemeProvider","mainContentTheme","isSticky","stickOffset","header","headerHeight","LobbyHeaderTitleContainerBox","LobbyHeaderTitleBox","flex","configs","tabConfig","_tabConfig$headerConf","_tabConfig$headerConf2","_services$liveTableFe","_services$liveTableFe2","_services$liveTableFe3","gamesId","labelTranslationKey","filter","async","setCurrentArenaTab","tabId","_onFilterClicked","seoPage","isActiveTab","toLowerCase","LiveCasinoArenaNavbar","ButtonWrapperBox","BalanceValue","bankroll","walletProxy","balanceType","numberIndex","search","symbolIndex","balance","slice","min","WrapperComponent","defaultProps","BalanceType","BOTH","moneyColor","AdminBannerBox","bannerSegmentation","setBannerSegmentation","adminBanner","getSegmentationsForAdminBanner","then","segmentation","JSON","stringify","bannerConfig","getConfigForAdminBanner","config","AdminBannerComponent","adminBannerEnabled","BannerContainerBox","minHeight","CmsBannerComponent","OrbitSuspense","Suspense","fallback","RoutedComponent","HYBRID_EMBEDDED_NAV_MENU","AnimationDismissType","FLOATING_BUTTON_DURATION_IN_SECONDS","NATIVE_ANIMATION_FRAME_WIDTH","BurnoutAnimationContainer","viewportHeight","zIndex","animationEnded","dismissType","FadeOut","BurnoutAnimationBox","burnout","burnout_animation_last_frame_png","FloatingButton","lAndAbove","CongratulationsTextBox","brandSecondary","animationWidth","_ref6","_ref7","show","_ref8","DisposableBurnoutAnimationDependencies","DisposableObject","addTimeout","handler","timeout","ExitAnimationDurationByDismissType","BurnoutAnimation","_dec4","_dec5","_dec6","lastFrameCache","pixiBurnoutAnimation","disposableDependencies","_descriptor3","_animationElement","_animationWidth","_viewportHeight","_onPauseHandler","captureAnimationDivElement","el","createAnimation","paused","startAnimation","componentDidUpdate","prevProps","componentWillUnmount","status","AnimationStatus","Loading","Running","start","attachToDOM","PixiSpineAnimation","force2DCanvasContext","name","jsonUrl","burnout_animation_json","currentAnimationTrackEntry","spineAnimations","imagePreload","response","imageObj","pause","timeScale","spineAnimation","state","addListener","runAnimation","setAnimation","addAnimation","listener","event","stringValue","setShowCongratsText","complete","setDismissType","getExitAnimation","markAnimationEnding","onExitAnimationEnd","_dismissType","position","_hasAnimationEnded","v","_showCongratsText","BurnoutFab","onMount","removeButton","BurnoutFabContainer","BurnoutFabInner","disappearAnimation","keyframes","pulseAnimation","shadowAppear","_ref9","BurnoutAnimationWrapper","checkOmg","_descriptor4","_descriptor5","_descriptor6","_onMountFAB","analytics","sendElasticInfoEvent","eventType","category","_renderFAB","_showButton","onClickFAB","_removeButtonAnimation","burnoutService","getBurnoutAnimationZIndex","_animationEnded","recheckOmg","retryOnFail","onSafeUnmountNotice","showOmg","runInAction","FAB_DISAPPEAR_DURATION_IN_SECONDS","ClockLastLoginBox","LastLoginBox","ClockAndLastLoginBoxComponent","configuration","data","ClockAndLastLoginBox","ClockComponent","format","time","getTimeFormat","_renderLastLoginComponent","lastLoginDisplay","renderLastLoginComponent","ClockComponentBox","dateTimeFormat","getDateTimeFormat","getFormattedTime","useCallback","currentDate","getCurrentServerDate","getCurrentDate","currentDateInRegulationTimeZone","convertToRegulationTimeZone","date","isUTC","dateTime","setDateTime","updateTime","subscription","onServerTimeUpdated","off","interval","namedSetInterval","clearInterval","Box","box","LOBBY_PAGE","NEW_LIVE_AB_CASINO_PAGE","bannerId","CmsBannerId","fallbackUrl","cmsBanners","loadBanner","bannerDefinition","bannersMap","EmptyBannerDefinition","renderSkeleton","EmptyBannerComponent","EmptyBannerContainerBox","hybrid","isEmbedded","FreePlayContainerBox","VouchersSwiperBox","VoucherSwiperArrowContainerBox","isPrev","free_play","fp_left_arrow_png","fp_right_arrow_png","SwiperComponent","Swiper","VouchersSwiperComponent","prevElement","nextElement","_vouchers","freePlay","userVouchersToDisplayInUI","dir","language","isRTLLanguage","slidesPerView","centeredSlides","pagination","clickable","navigation","nextEl","prevEl","modules","Pagination","Navigation","onBeforeInit","swiper","params","onActiveIndexChange","onCurrentVoucherIndexChanged","activeIndex","SwiperSlide","isActive","VoucherCardComponent","voucher","id","VoucherGamesListBox","VouchersSwiperTitleBox","VouchersSwiperBackgroundBox","fp_vouchers_bg_png","VouchersGamesListTitleBox","FreePlayContainerComponent","_renderVoucherGames","currentVoucher","currentVoucherIndex","freePlayGames","voucherGame","GameItemComponent","freePlayType","onClickHandler","play","marginBottom","_onCurrentVoucherChangedHandler","voucherIndex","VoucherCardBox","showCursor","xlExact","xxl","lowHeight","VoucherCardSideBox","VoucherCardFaceBox","backSideShown","VoucherCardFaceContentBox","VoucherCardSideFooterBox","VoucherCardFaceFooterBox","VoucherCardFaceIconContainerBox","VoucherCardFaceDetailsBox","VoucherCardFaceOriginalAmountBox","VoucherCardFaceVoucherNameBox","bold","VoucherCardFaceCurrentAmountContainerBox","VoucherCardFaceIconBox","iconUrl","VoucherCardFaceCurrentAmountBox","VoucherCardSideToggleButtonBox","VoucherCardSideFooterContentBox","VoucherCardFaceHeaderBox","isCloseToExpiration","VoucherCardFaceHeaderComponent","OrbitComponentWithState","_expirationTimer","expirationMessage","setInterval","setState","VoucherCardFaceComponent","_renderOriginalAmount","formattedOriginalAmount","formattedCurrentBalance","_renderCurrentAmount","InfoIcon","infoIcon","backgroundImageUrl","voucherName","onToggleSide","VoucherCardBackBox","VoucherCardBackHeaderBox","VoucherCardBackContentBox","VoucherCardBackFooterBox","VoucherCardBackComponent","CloseIcon","closeIcon","voucherDescription","_onToggleSide","showBackSide","_onCardSideClickHandler","FreeToPlayAnimatedIconBox","FreeToPlayClickBox","FreeToPlayIconPositionBox","iconRequestOptions","timings","delay","themeCustomizer","getFreeToPlayAnimation","iconObservableTarget","_openBonusWheel","_sendAnalytics","gameStage","freeToPlayFlow","CasinoFreeToPlayGameStage","DailyWish","MiniArena","element","CHANNEL_ELEMENTS","deepLink","floatingIcon","freeToPlay","showPromotion","channel","area","AreaType","source","CHANNEL_SOURCE","casinoClient","appSpecificParameters","_captureElementRefForIcon","wrapper","animationDisposer","AnimatedIconUnloadReason","REQUESTED","requestOptions","loadFreeToPlayAnimation","isPromotionEligible","shouldShowIcon","isPromotionOpened","shouldOffsetIcon","bottomNavigationBar","bottomNavbarHeight","isHybrid","isAndroid","bind","appID","customData","location","isHomePage","currentUri","pathName","playerRMSStatus","FreeToPlayAnimatedIconComponent","GamblingSessionMessageBaseBox","LimitType","GamblingSessionLimitReachedComponent","mainTextKey","limitType","Loss","Time","GamblingSessionLimitSummaryBox","gamblingSessionLimitTimestamp","sessionLimitTimestamp","GamblingSessionInfoComponent","sessionDuration","totalWins","totalBets","dialogHandler","close","GamblingSessionLogoutDialog","ModalDialogActionsComponent","primaryAction","onLogout","secondaryAction","onCancel","buttonsOnSeparateLines","GamblingSessionInfoWrapperBox","GamblingSessionInfoTextBox","dialogTextMixin","GamblingSessionInfoValueBox","dialogHighlightedTextMixin","_Fragment","toHoursAndMinutesString","GamblingSessionLimitsBox","sAndAbove","DropDownsGroupBox","LossLimitDropDownComponent","_onItemSelectedHandler","onItemSelected","cancel","_getLossLimits","totalBankroll","translateLossLimit","percent","lossAmount","loss","parseCommaSeparatedNumbers","servicesConfigs","Regulation","Spain","LossLimitPercentages","p","floor","lossLimit","DropDownComponent","label","items","nullItemText","TranslationsHelper","minutes","hours","days","week","month","TimeLimitDropDownComponent","Promise","resolve","acceptSelection","_parseMaxDurations","dialog","showSimpleTextModal","hideCloseButton","_translateTimeSpan","TimeSpan","fromMinutes","buttons","buttonPreset","sendAnalytics","DialogButtonClickHandleResultEnum","CloseDialogAndContinue","_translations","timeSpan","totalMinutes","totalHours","isMobileOS","MaxDurationsInMinutesForMobile","MaxDurationsInMinutesForPC","_getDropDownItems","totalSeconds","IntervalReminderDropDownComponent","_getReminderIntervals","IntervalReminderInMinutes","val","RestrictionPeriodsDropDownComponent","totalDays","cancelSelection","overrideValueOnCancel","fromSeconds","RestrictionPeriodsInMinutes","FooterBox","DropDownsSeparatorBox","GAMBLING_SESSION_LIMITS_RESPONSIBLE_GAMING_LINK","RegulatoryTextBox","textMiddleDark","GamblingSessionMessageBox","GamblingSessionWarnMessageBox","buttonWarning","GamblingSessionSetupComponent","_onAfterValidationEnabled","_performValidation","intervalReminder","selectedLimits","reminderInterval","onSetLimits","lossLimitAmount","sessionDurationLimit","restrictionPeriod","_onContinue","isValidationEnabled","_onTimeLimitSelected","_onGameLimitSelected","_onIntervalReminderSelected","_onRestrictionPeriodSelected","_captureRegulatoryTextElement","linkElement","querySelector","addEventListener","linksNavigation","openResponsibleGaming","lossLimitsErrorMessage","timeLimitsErrorMessage","errorMessages","_getRegulatoryText","responsibleGamingLinkText","responsibleGamblingLink","dangerouslySetInnerHTML","__html","lastBetActivity","lastBetDate","DropDownContainerBox","ErrorMessageBox","DropDownLabelBox","_onChange","eventData","parseInt","selectionResult","isUndefined","selectedOption","_renderErrorMessage","_this$state$selectedO","splice","item","GameItemImgWrapperBox","fixedWidth","iPhoneVer5","GameItemContainerBox","hide","GameItemFpThumbBox","freePlayBgImage","FP_VOUCHER_TYPES","FreeSpin","freeplay_type_fs_png","FreePlay","freeplay_type_fp_png","FreeJackpotSpin","freeplay_type_jfs_png","FreeJackpotPlay","freeplay_type_jfp_png","GameItemDelimiterBox","vertical_line_glow_png","GameItemDetailsWrapperBox","GameItemTitleBox","GameItemJackpotBox","GameItemButtonsAreaBox","playBtnText","GameImageComponent","shouldUseSquareIcons","GameJackpotComponent","GameJackpotBox","GameJackpotValueBox","jackpotValue","JACKPOT_WIDGET","RED_TIGER_JACKPOT","SearchTitleBox","NumberOfResultsBox","SearchBoxTitleComponent","_renderNumberOfResults","numberOfResults","SearchGamesListBox","SearchNoGamesFoundBox","SearchGameItemBox","SearchMatchBox","searchText","removeSpecialCharacters","gameSearch","currentSearchText","gameName","nameOfTheGame","index","indexOf","beforeHighlightText","highlightText","numberOfSpecialCharacters","afterHighlightText","HighlightSearchListItemComponent","SearchTextWrapperBox","SearchGameImageBox","closeSearchResult","userMenu","closeMenu","sideMenu","closeMobileMenu","searchSuggestion","executeAction","useLazyLoading","SearchGameItemComponent","SuggestedGamesComponent","_renderGame","suggestedCategory","MoreGamesBox","shouldDisplay","_props$gameSearch$sea","_props$gameSearch$sea2","_props$gameSearch$sea3","_props$gameSearch$sea4","hasMoreItems","loadedGamesCount","searchResult","_renderFoundGames","gamesToRender","suggestedGame","onLoadMore","suggestedGames","FoundGamesComponent","SearchResultItemBox","li","SlotsSearchLinkBox","LiveSearchLinkBox","CardAndTableSearchLinkBox","RegularSearchLinkBox","sendOrbitUserFlowEvent","OrbitUserFlowAnalyticsCategory","Search","iconStyle","GAMES_CATEGORIES","SLOTS","LIVE","CARD_AND_TABLE","_renderSearchLinkBox","linkIconClass","SearchResultItemComponent","SearchLinksListBox","ul","boxBorderLight","SuggestedLinksComponent","_renderSuggestedCategory","_renderSuggestedCategories","SearchFormResultsBox","SearchFormResultsWrapperBox","SuggestedVideoSlidesFilterListPreviewTitleBox","SuggestedVideoSlidesFilterItemPreviewBox","SuggestedVideoSlidesFilterItemPreviewPlayerBox","SuggestedVideoSlidesFilterItemPreviewFooterBox","SuggestedVideoSlidesFilterItemPreviewFooterTextBox","SuggestedVideoSlidesFilterItemPreviewComponent","filterCount","videoSlidesFilterPreviewSuggestion","muted","onError","onLoading","onWatchTimeLimitReached","isInCenterStage","inViewport","videoPlayingService","videoOnDemandPlaying","loop","SuggestedVideoSlidesFilterListPreviewHeaderBox","SuggestedVideoSlidesFilterListPreviewBox","SuggestedVideoSlidesFilterListPreviewContentBox","SuggestedVideoSlidesFilterListPreviewComponent","ExploreOutlinedIcon","exploreOutlinedIcon","marginRight","loadedGames","setLoadedGames","r","isSearchBoxOpened","_onLoadMore","OrbitUserFlowAnalyticsLabel","ShowMore","moreItems","isHybridAndroid","isIOS","portrait","searchResultComponentRef","isSearchInProgress","miniOrbit","suggestedCategories","videoSlides","shouldBeDisplayed","suggestedVideoSlidesFilterListPreview","SearchResultComponent","SearchClearIconBox","SearchInputMobileBox","SearchInputAreaBox","_timeoutRef","clearTimeout","onChangeHandler","setTimeout","searchInputRef","blur","autoComplete","openSearchResult","SearchInputArea","SearchIconBox","_showResetSearchIcon","SearchIcon","searchIcon","_onResetSearchTextHandler","focus","SearchInputMobileComponent","SearchInputPCComponent","SearchInputFormBox","GameSearchBox","_onUpdate","scrollTo","_props$gameSearch$sea5","removeEventListener","searchComponentRef","GameSearchComponent","GeoModalWrapperBox","landscape","HEADER_Z_INDEX","RegulatoryDataBox","DefaultBox","PcBox","xlAndBelow","MobileBox","GamblingWarningBox","styledByDevice","GamblingWarningComponent","gamblingMessageConfig","gambling_message","Link","href","preventDefaultOnClick","Mobilebox","ResponsibleGamingIconsBox","ResponsibleIconsComponent","_renderAgeButton","ageButtonConfig","renderHeaderMinimumGamblingAge","_renderResponsibleIcons","renderHeaderRegulationIcons","responsibleIconsConfig","responsibleIcons","ageButton","RegulatoryDataComponent","_captureHeaderUpperRef","attachToHeaderService","setHeaderRegulationDataElement","_headerConfig","_renderMobileLastLogin","_getRegulatoryContent","isCis","MobileContainerBox","UserIconBox","post_login_mobile_svg","UserBankrollBox","FreePlayDotIndicatorBox","_props$gameRunner$cur","_props$gameRunner$cur2","gameRunner","currentRunningGame","totalUserBankroll","openMenu","TOOLTIP_TARGET_HEADER_BANKROLL_BUTTON_MOBILE","hasVouchers","HeaderWelcomeButtonsForAuthorizedUserMobileViewComponent","getButtonSizeVariant","getButtonsSeparator","AnonymousButtonsContainerBox","HeaderWelcomeButtonsForAnonymousUserComponent","separator","renderHeaderRegisterButton","gameContext","renderHeaderLoginButton","PCContainerBox","HeaderCashierButtonComponent","_onCashierClick","cashier","openCashier","sessionType","CashierSessionType","FullCashier","Header","depositButton","HeaderWelcomeButtonsForAuthorizedUserPcViewComponent","HeaderWelcomeButtonsForAuthorizedUserComponent","HeaderWelcomeButtonsBox","HeaderWelcomeButtonsComponent","InsideOrbitMenuContainerComponent","isInsideAutomation","textAlign","INSIDE_ORBIT_MENU_CONTAINER","JackpotWidgetAspectRatioBox","JACKPOT_WIDGET_LAYOUT","LANDSCAPE","LANDSCAPE_WIDE","PORTRAIT_TALL","PORTRAIT","handlePaddingTop","JackpotWidgetBgBox","handleBackgroundImage","shouldRenderSkeleton","jackpotImages","getJackpotWidgetImagesByType","jackpotType","backgroundLandscape","JackpotWidgetBox","jackpot_widget","JackpotType","Daily","daily","background_png","logo","logo_png","HighNoon","high_noon","Twilight","twilight","Party","party","HourlyCaptain8","hourly_captain8","background_landscape_png","MillionaireGenie","millionaire_genie","AgeOfGods","age_of_gods","Titan","titan","JackpotKing","jackpot_king","VegasMillions","vegas_millions","JackpotWidgetLogoBox","JackpotWidgetAmountBox","JackpotWidgetFooterBox","JackpotWidgetClockLabelBox","JackpotWidgetClockBox","updateClockInterval","clockInit","jackpotData","mustHitTime","clearClockInterval","updateClock","serverDate","warning","mustHitDate","remainingTimeMilis","getTime","remainingTimeTimeSp","fromMilliseconds","max","clockValue","useTotalHours","widgetWidth","themeType","getThemeType","isDaily","JackpotWidgetClockComponent","JackpotWidgetAmountLabelBox","JackpotWidgetCollectingLabelBox","JackpotWidgetCollectingAmountBox","animationProps","JackpotWidgetBorderShine","bottom","rtl","startPos","BorderShineWidth","endPos","borderShineKeyframes","JackpotWidgetRadialShine","RadialShineWidth","radialShineKeyframes","JackpotWidgetAmountContainer","handleTitleBoxFontSize","mAndBelow","JackpotTitleDefaultBox","JackpotTitleMrGreenBox","brandSecondaryLight","forMrGreenCip","forMrGreenCis","_onWidgetClick","_this$services$routin","_this$services$routin2","_this$props$widgetCon","routing","currentRoute","arenaType","widgetConfig","_this$props$seoCatego","listInfo","getGamesListByJackpotId","jackpotId","sendOrbitMarketingEvent","_isWidgetClickable","aspectRatioBox","resizeObserverInstance","disposer","_captureJackpotWidgetAspectRatioBoxRef","refEl","ResizeObserver","setWidgetWidth","oldRefEl","unobserve","_setImagesReady","readyState","imagesReady","_isJackpotHandlerReady","_this$props$widgetCon2","_this$props$widgetCon3","JackpotInternalId","jackpotHandler","currentJackpotsById","_shouldRenderSkeleton","_jackpotType","_this$props$widgetCon4","_this$props$widgetCon5","all","_getCountDownTimerTranslationKey","jackpotState","translationKey","JACKPOT_STATE","Hot","OffHours","Regular","_getJackpotWidgetLayout","isMobileTablet","_getAmountDisplayed","lastWinAmount","Cold","jackpotAmount","_this$props$widgetCon6","_getJackpotWidgetImag","String","startGradual","WrapperBox","isDailyJPWidget","isClickable","JackpotWidgetAmountSkeletonBox","JackpotWidgetFooterSkeletonBox","JackpotWidgetCollectingLabelSkeletonBox","JackpotWidgetClockLabelSkeletonBox","JackpotTitleBox","entries","elementRectangle","JackpotWidgetComponent","JackpotWidgetFooterElementSkeletonBox","LaboratoryShowcasePageWrapperBox","GeoLocationBrowserApiTestComponent","_onGetGeo","navigator","geolocation","getCurrentPosition","_data$coords","_data$coords2","latitude","coords","longitude","code","message","TextareaBox","textarea","Label","ShowcaseConfigurationBox","ShowcaseContentContainerBox","BASE_CONTENT","showProgressBar","showDefaultImage","showDefaultButton","BASE_BUTTON","closeToast","ToasterShowcase","toasterOpt","setToasterOpt","onChangeInput","checked","field","resize","rows","htmlFor","showToaster","customizeToasterOptions","contentProps","image","toastOptions","toaster","showStandardToast","closeToasters","removeAllToasts","GamblingSessionDialog","GamblingSessionSetupDialogShowcase","dialogType","setDialogType","Setup","limits","alert","IntervalReminder","LimitReached","Logout","toggleOpen","showModal","isHighPriority","mobileCenterHeader","noDefaultContentPadding","ONBOARDING_TOUR_ALREADY_SHOWN","OnboardingTourShowcase","openOnboarding","onboardingTour","localStorage","getItem","removeItem","reload","BurnoutAnimationScenario","BurnoutAnimationShowcase","_scenario","GotOMG","NotYetOMG","scenario","marginBlockEnd","toggleRenderAnimation","_renderAnimation","togglePauseAnimation","_paused","PixiSpineShowcase","_this","_forceCanvas","_runAnimationASAP","_animationIndex","_animationList","spineJsonUrl","animated_icons_poc","millionaire_genie_megaways","genie_megaways_v1_json","genie_megaways_v2_json","genie_megaways_v3_json","genie_megaways_v4_json","_pixiAppDestroyers","addPixiAnimation","_pixiAppRootEl","iconPixiAnimation","def","loaderResources","burnoutAnimationResource","animationsRan","availableAnimations","spineData","animations","a","animationSchedule","removePixiAnimation","appDestroyer","shift","pop","capturePixiAppRootEl","defaultChecked","animationDef","BgBox","ThemeSwitcher","guid","tools","getGuid","setTheme","FlexContainerBox","alignItems","th","TextInputBox","ButtonWrapper","ButtonsShowcase","_dec7","_dec8","_dec9","_dec10","_dec11","_dec12","_dec13","_dec14","_dec15","_descriptor7","_descriptor8","_descriptor9","_descriptor10","_descriptor11","_descriptor12","_descriptor13","_descriptor14","_descriptor15","iconComponent","_iconComponent","settingsIcon","withIcon","component","addIcon","backIcon","iconSizeVariant","buttonLabel","ThemedBox","fontPreset","body","TypographyColorAndPresetShowcase","textColor","boxBorder","step","parseFloat","ShowcaseDropdownComponent","optionsTemplate","values","toUpperCase","fieldName","caption","defaultValue","currentValue","selectedIndex","onChanged","showTextAreaBox","onValueChanged","showBooleanDropDownBox","PopoupsShowcase","_dialogHandler","_onUpdateFieldNameValue","_popupOptions","_onUpdateContentValue","_contentText","popupBody","DialogTextBox","_this$_dialogHandler","_this$_dialogHandler2","linkAction","_this$_dialogHandler3","onClosed","AvailableSizes","IconsShowcase","getIconSizeProps","inputSize","Rem2","Rem4","Rem6","Rem12","Default","flexWrap","keys","ThemeDefaultIcons","specialProps","animated","TheIcon","MQBox","mq","MediaQueryShowcase","Value","renderUserAgentString","padding","paddingRight","userAgent","renderClientHints","clientDevice","detected","clientHintsAvailable","model","architecture","platform","platformVersion","bitness","mobile","brands","brand","uaFullVersion","renderDeviceDetectionData","Device","browser","viewport","ClientHintsShowcase","ShowcaseWrapperBox","ShowcaseLabelBox","ShowcaseContentWrapperBox","LaboratoryShowcaseContainerComponent","showcase","isOpen","setIsOpen","showcaseDisabled","toggleIsOpen","renderer","SimpleMessageDialogShowcase","WarningIcon","warningSignIcon","showEmptyTitle","disableFullscreenMobile","AddFundsDialogShowcaseComponent","_openFundsDialog","AddFundsDialogComponent","onAddFunds","number","maxLimitInCents","minLimitInCents","forceCentralization","onClosedByXButton","_openLimitsReachedDialog","iconSvg","JackpotBetDialogShowcase","jackpotBet","showOptInJackpotBetDialog","SHOWCASES","LaboratoryShowcase","VideoBox","VideoContainerBox","VideoComponent","_videoPlayerRef$curre10","_videoPlayerRef$curre11","videoPlayerRef","videoElementRef","reactionsRef","isAppVisible","createVideoPlayer","getVideoPlayer","isLastGameType","videoPlayer","videoElement","destroy","poster","load","loadVideo","_videoPlayerRef$curre","playVideo","_videoPlayerRef$curre2","pauseVideo","_videoPlayerRef$curre3","retryPlay","_videoPlayerRef$curre4","reactions","_videoPlayerRef$curre5","_videoPlayerRef$curre6","isLoading","_videoPlayerRef$curre7","watchTimeLimitReached","forEach","isVideoOnDemand","handlePlayVideoClick","_videoPlayerRef$curre8","logUIAction","gaCategory","videoIsLoading","videoWatchTimeLimitReached","displayVideo","playsInline","renderPlayerControls","_videoPlayerRef$curre9","_videoElementRef$curr","autoplayAllowed","VideoPlayButtonBox","VideoOverlayItemBox","transparent","capsule","VideoTileFooterBox","VideoTileBox","boxBorderDark","SectionTitleBox","CellValueBoolBox","check_png","CellValueTextBox","CellTitleBox","GameFeatureCellComponent","_renderNoInfo","_renderCheckbox","_renderDescription","_renderValue","PreviewFeatureType","check","TableContainerBox","GameFeaturesTableComponent","_renderGameInfoTableRow","cells","reduce","acc","curr","cell","features","chunks","splitArrayToChunks","cellSpacing","chunk","GameJackpotPreviewBox","JackpotAmountPreviewBox","GameJackpotPreviewComponent","GamePreviewInfoContainerBox","_renderJackpotPreview","_generalSettings$game","hasJackpot","generalSettings","shouldRenderJackpotPreview","gamesPreviewConfig","shouldDisplayJackpot","gameTitleComponent","gamePreviewFeaturesSelector","getPreviewFeatures","GamePreviewInfoContainerComponent","StripeImageBox","GameStripeImageComponent","imageSrc","stripImage","stripeImageFallback","fallbackSrc","TrailerBox","GameTrailerComponent","autoPlay","TrailerOrStripeImageComponent","hasVideoTrailer","LIVE_CASINO_PAGE_WRAPPER","LobbyHeaderDefaultBox","STICKY","GAMING_HISTORY_PAGE","SESSION_HISTORY_PAGE","GAMES_OPEN_SESSIONS_PAGE","LobbyHeaderSiBox","baseColors","gray023","LobbyHeaderMrGreenBox","gray033","black","LobbyHeaderWsopBox","LobbyHeaderBox","forSI","forWsop","LobbyHeaderLineBox","LobbyHeaderButtonsContainerBox","LobbyHeaderButtonsBox","lobbyHeaderClasses","updateElement","_renderFiltersIndicatorNextToTheTitle","renderingOptions","gamesFilter","renderFiltersIndicator","FilterIndicatorRenderingLocation","NextToArenaTitle","reactElement","showSearchIcon","renderMobileFiltersIndicator","_renderFiltersIndicatorUnderTheTitle","BelowArenaTitle","LobbyHeaderComponent","Player","DotLottiePlayer","default","LoyaltyBarWrapperComponent","loyaltyIndicator","init","DialogCloseButtonBox","modalDialog","closeButtonSize","veryLowHeight","DialogBoldTextBox","DialogHighlightedTextBox","DialogDimmedTextBox","textContrast","DialogTitleBox","APPLY_BORDERS","APPLY_ANIMATION","MOBILE_CENTERED_HEADER","FORCE_TRANSPARENT_BACKGROUND","FORCE_TRANSPARENT_CONTENT_BACKGROUND","DISABLE_FULLSCREEN_MOBILE","FORCE_CENTRALIZATION","APPLY_MAX_HEIGHT","FORCE_FULLSCREEN_TABLET","APPLY_MODAL_CLOSING_ANIMATION","ButtonsWrapperDefaultBox","flexColumnContainerMixin","flexRowReverseContainerMixin","flexGrowItem","ButtonSpacerDefaultBox","LinkActionBox","LinkWrapperDefaultBox","useWarningPreset","DialogHeaderBox","HeaderButtonsContainerBox","DialogHeaderComponent","_renderTitle","_renderCloseButton","onCloseButtonClick","_renderExtraButtons","renderExtraButtons","_renderButtons","_renderContent","AspectRatioBox","expectedWidth","expectedHeight","AspectRatioContentBox","useBGColorDuringLoadAnimation","AspectRatioContainerComponent","_onClick","preventDefault","openUrl","_getAnchorProps","result","buildFullUri","itemProp","customProps","_renderAnchor","anchorRef","enableTap","TapHandler","enabled","elementRef","RadioInputLabelBox","AmountSpan","LimitsRadioButtons","setSelectedOption","DefaultLimit","customAmountTextInputValue","setCustomAmountTextInputValue","amountInCents","setAmountInCents","setErrorMessage","_minLimitCents","_maxLimitCents","validate","_amountInCents","_selectedOption","errMsg","onCashierClick","openDeposit","cashierAction","onCustomAmountChange","targetValue","test","CustomLimit","onTotalLimitSelected","as","getCurrencySymbol","onAddFundsClick","_props$analytics","amountToAdd","MinimumGamblingAgeIconDefaultBox","img","isWide","isShownInHeader","MinimumGamblingAgeDefaultBox","disableClick","hoverNone","MinimumGamblingAgeBox","MinimumGamblingAgeIconSiBox","MinimumGamblingAgeIconBox","MinimumGamblingAgeComponent","_onClickHandler","_this$services$config","_this$services$config2","_getIconType","_this$services$config3","_this$services$config4","iconType","_getIcon","age","responsibleGamingAge","responsible_gambling","age_18plus_wide_png","age_21plus_flat_svg","age_18plus_flat_svg","age_18plus_capsule_svg","age_21plus_round_svg","age_18plus_round_svg","_this$props$iconBox","_this$props$isShownIn","_this$services$config5","_this$services$config6","url","IconBox","iconBox","NetherlandsMinimumGamblingAgeLabelBox","NetherlandsMinimumGamblingAgeComponent","SwedenMinimumGamblingAgeIconBox","SwedenMinimumGamblingAgeComponent","DenmarkResponsibleGamingButtonsBox","DenmarkResponsibleGamingButtonBaseBox","imageUrl","DenmarkSafeToPlayButtonBox","DenmarkSafeToPlayButtonComponent","_clickHandler","openSafeToPlay","regulation_specific","denmark","safe_to_play_png","DenmarkSelfExclusionButtonBox","DenmarkSelfExclusionButtonComponent","openSelfExclusion","self_exclusion_png","DenmarkSelfTestButtonBox","DenmarkSelfTestButtonComponent","openSelfTest","self_test_png","DenmarkSecondaryResponsibleGamingButtonBox","DenmarkSecondaryResponsibleGamingButtonComponent","openSecondaryResponsibleGaming","responsible_gaming_svg","DenmarkResponsibleGamingButtonsComponent","_renderSelfExclusionButtons","hideSelfExclusionLinks","_renderSecondaryResponsibleGamblingIcon","PanicButtonSVGIconClassName","PanicButtonBox","PanicButtonTooltipBox","textDark","ACTIVE","PanicButtonPopupBox","PanicButtonPopupTimeBox","PanicButtonPopupOkBox","PanicButtonPopupComponent","_closeDialog","_getTime","now","Date","getHours","getMinutes","textMessage1","textMessage2","textMessage3","TooltipClickHereBox","PanicButtonTooltipCloseBox","PanicButtonMobileOverlayBox","PanicButtonTooltipWrapperBox","ResponsibleGamingButtonsGermanyComponent","isTooltipVisible","setIsTooltipVisible","_restrictUser","panicRestrictUser","shouldBeClosedOnlyByUser","catch","_closeToolTip","stopPropagation","_getTooltipBox","PanicButtonIcon","panicButtonRegulationIcon","NetherlandsSelfTestButtonBox","NetherlandsSelfTestButtonComponent","d","OntarioResponsibleGamingButtonsBox","OntarioSafeToPlayButtonBox","ontario","safe_to_play_icon_svg","OntarioSafeToPlayButtonComponent","OntarioResponsibleGamingButtonsComponent","SwedenResponsibleGamingButtonsBox","SwedenResponsibleGamingButtonSBGIconClassName","SwedenResponsibleGamingButtonBaseBox","useIconsOnly","SwedenSelfExclusionButtonBox","SwedenSelfExclusionButtonComponent","SelfExclusionIcon","selfExclusionRegulationIcon","SelfExclusionSymbolIcon","selfExclusionRegulationSymbolIcon","SwedenGamingLimitsButtonBox","SwedenGamingLimitsButtonComponent","externalLinks","openGameLimits","channelArea","channelElement","gamesLimitsGameButton","ControlCenterOpenSource","RgPolicy","GamingLimitIcon","gamingLimitRegulationIcon","GamingLimitSymbolIcon","gamingLimitRegulationSymbolIcon","SwedenSelfTestButtonBox","SwedenSelfTestButtonComponent","SelfTestIcon","selfTestRegulationIcon","SelfTestSymbolIcon","selfTestRegulationSymbolIcon","SwedenResponsibleGamingButtonsComponent","spaceMultiplier","GenericSideMenuItemIconCommonBox","GenericSideMenuItemIconDefaultBox","textActive","GenericSideMenuItemIconCasino777Box","backgroundActive","GenericSideMenuItemIconHarrahsBox","GenericSideMenuItemIconWsopBox","logoBackground","GenericSideMenuItemIconSIBox","GenericSideMenuItemIconMrGreenBox","GenericSideMenuItemIconBox","forHarrahs","GenericSideMenuItemLabelBox","GenericSideMenuItemDefaultBox","textHover","GenericSideMenuItemCasino777Box","GenericSideMenuItemHarrahsBox","GenericSideMenuItemWsopBox","_ref10","_ref11","GenericSideMenuItemBox","SideMenuItemsListDefaultBox","SideMenuItemsListHarrahsWsopBox","SideMenuItemsListMrGreenBox","SideMenuItemsListBox","GenericSideMenuImageBox","GenericSideMenuItemPreIconDefaultBox","GenericSideMenuItemPreIconSIBox","GenericSideMenuItemPreIconBox","GenericSideMenuItemComponent","menuItem","execute","_renderIcon","iconSource","_this$props$menuItem$","Icon","iconAltText","_this$props$menuItem$2","imageURI","_this$props$menuItem$3","_renderMenuItemContent","imageOnlyRendering","isMatchToCurrentUrl","withArrow","forwardIcon","_this$props$menuItem$4","getLinkUrl","SideMenuItemContainerComponent","decodeURI","encodeURI","SideMenuItemContainerDefaultBox","SideMenuItemContainerCasino777Box","SideMenuItemContainerMrGreenBox","SideMenuItemContainerSiBox","SideMenuItemContainerBox","menuItems","menuItemKeys","getMenuItem","listStyleType","renderMenuItem","SideMenuLinksGroup","GameImageBox","GameImageDefaultBox","commonGameImageCssMixin","GAME_BOX_JACKPOT_TEMPLATE","squareIcon","GameImageAnimatedBox","GameImageAnimatedComponent","animatedImageWrapper","pixiAnimationRegistration","_captureAnimatedImageElementRef","unregister","loadPixiAnimatedIcon","gameAnimatedIconsManager","register","animationJsonUrl","animationTiming","onAnimationLoad","onAnimationWillUnload","_loadAnimatedIconTimeout","onSettled","loadingAnimation","disableAnimation","attemptLoadAnimatedIcon","getGameImage","_shouldUseSquareIcons","animatedIcon","getAnimatedImageTimings","hideStaticImage","onAnimationIconStateChange","seoAlt","getImageSeoAlt","imgUrl","useLazyLoad","getGameImageExpectedSizes","SINGLE_GAME_IMAGE","getGameImagePlaceHolderUrl","onLoadStart","onLoad","GAME_BOX","TWO_LINES_TITLE","MULTIPLE_LINES_TITLE","ENABLE_HOVER_ANIMATION","SWIPER_MODE","GAME_IMAGE_CONTAINER","GRID_GAMES_LIST","GameDetailsContainerBox","GameImageContainerBox","GameBox","AmountContainerBox","isCasinoGameIcon","isSquareIcon","empty_image_gif","BGGameBlackSquare_png","BGcardandtable_png","getPlaceholderBackground","ORBIT_TAP","GameImageContainerDefaultBox","common","BasePcBox","BaseMobileBox","GameImageContainerCasino777Box","GameTitleDefaultBox","GameTitleCasino777Box","GameTitleCipBox","GameTitleSIBox","GameTitleMrGreenBox","light","GameTitleBox","forCip","forWsopCip","forSICis","HOME_PAGE","squareGameIcon","GameDefaultBox","GameCasino777Box","GameCisBox","forCis","SkeletonAnimatedButton","borderRadius","SkeletonAnimatedRectangle","left","right","VideoTileSkeletonbox","DummyTextBox","DummyTextBoxAbsolute","DummyTextBoxRelative","small","SingleGameSkeletonComponent","_getPlaceholderImageUrl","placeholder_game_icon_sq_png","placeholder_game_icon_png","_renderRegularGameSkeleton","_renderJackpotGameSkeleton","JackpotGameBox","JackpotGameImageContainerBox","JackpotGameDetailsContainerBox","_renderVideoSkeleton","templateType","JACKPOTS_ITEM","LIVE_STREAMING_ITEM","STATIC_VIDEO_ITEM","GameBadgeBox","GameBadgeFlipperWrapper","GameBadgeFlippeInner","GameBadgeFlipperFront","GameBadgeFlipperBack","GameBadgeFliperComponent","badgeUrl","flipBadgeUrl","GameImageContainerComponent","_handleImageDoneLoading","gameItemImageRef","allowTap","onOpenRealGame","isCardOrTableGame","playRealGameButton","MinMaxBetAmountDefaultBox","dangerLight","MinMaxBetAmountCasino777Box","MinMaxBetAmountSIBox","MinMaxBetAmountMrGreenBox","MinMaxBetAmountCisBox","MinMaxBetAmountBox","InfoPageButtonComponent","onOpenInfoPage","GameButtonsBox","PlayDemoButtonComponent","onOpenAnonymousGame","JackpotAmountDefaultBox","JackpotAmountCasino777Box","JackpotAmountSiBox","JackpotAmountMrgreenBox","JackpotAmountBox","GameInfoContainerBox","TwoRowsGameTitleContainerBox","GameDetailsContainerComponent","hasInfoPage","setHasInfoPage","titleRef","_allowHoverDetails","allowHoverDetails","allowDemoButtonInSingleGame","titleElement","titleHeight","offsetHeight","maxElSize","getComputedStyle","getPropertyValue","maxHeight","classList","add","_renderAmount","formattedMinBaxBets","formatMinMaxBet","minBet","maxBet","allowMinMaxBet","_renderMinBaxBet","_hasDetails","hasDetails","hasTwoLinesTitle","PlayRealButtonDefaultBox","SpriteSheetPC1920_png","PlayRealButtonCasino777Box","PlayRealButtonCasino888Box","rgba","PlayRealButtonBox","forCasino888","GameNumberBadgeBox","SingleGameRegularTemplateComponent","stateActiveTimeout","_renderPlayRealGameButton","anyHoverNone","_renderGameNumberBadge","showNumberBadge","CssClassNameBuilder","_classes","append","_len","classes","_key","isString","isArray","c","Error","medium","secondary","base04Dark","SingleGameJackpotTemplateComponent","LiveGameContainerBox","SingleGameLiveTemplateComponent","tableConfig","VideoSoundButtonBox","VideoSoundButtonComponent","preferences","sound","isMuted","MuteIcon","muteIcon","UnmuteIcon","unmuteIcon","_handleClick","toggle","VideoTileOverlayComponent","_padding","_renderTopRight","videoPlaying","_renderBottomLeft","bottomLeftComponent","_renderBottomRight","bottomRightComponent","VideoTileOverlayBox","VideoTileStaticImageOverlayBox","VideoTileSkeletonContainerBox","VideoRetryScreenTileBox","VideoRetryScreenIconBox","VideoRetryScreenTitleBox","VideoRetryScreenTextBox","VideoRetryScreenComponent","_retryAndSetError","retryFn","setHasError","BrokenLinkIcon","brokenLinkIcon","VideoThumbnailImageComponent","_getImageSource","videoThumbnailUrl","VideoTileBettingRangeBox","VideoTileGameTitleBox","VideoTileFooterSectionBox","VideoListJackpotValueBox","VideoListJackpotContainerBox","VideoTileFooterComponent","_tableInfo","_renderMinMaxBet","_this$_tableInfo","_this$_tableInfo2","MinBet","MaxBet","_this$_tableInfo3","_this$_tableInfo3$Nam","_renderSecondaryText","onClickPlay","VideoTileComponent","_posterImageLoadPromise","_retryFn","onPosterImageLoaded","setPosterImageLoaded","_onPlayClickHandler","OrbitMarketingEventAnalyticsLabel","Click","_hasError","_posterImageLoaded","setIsVideoLoading","_isVideoLoading","firstTimeLoadingDone","_isFirstTimeLoading","setIsWatchTimeLimitReached","_isWatchTimeLimitReached","_renderPlayerOverlay","statusText","_renderRetryScreen","_renderPlayer","_renderVideoThumbnailImage","_renderTileOverlayComponent","videoItemType","VIDEO_ITEM_TYPE","STATIC","_renderFooter","_renderSkeleton","_renderStaticImageOverlay","VideoItemContainerBox","stepBackStyle","SingleGameVideoTemplate","_inSwiperIntersectionObserver","_viewportIntersectionObserver","_videoContainerElement","_captureVideoContainerRef","_inSwiperIntersectionObserverCallback","setIsInCenterStage","_viewportIntersectionObserverCallback","setInViewport","_getVideoPlayingService","LIVE_STREAM","liveStreamPlaying","staticVideoPlaying","_triggerOnBringInCentralView","_inViewport","_isInCenterStage","onBringInCentralView","_createSwiperIntersectionObserver","intersectionObserverOptions","rootMargin","_destroySwiperIntersectionObserver","_createViewportIntersectionObserver","_destroyViewportIntersectionObserver","intersectionTarget","isLastGametype","animatedIconState","openInRealMode","listPosition","AdminListID","AIListTypeID","aiEngine","aiEngineName","showIntermediatePage","skipIntermediatePage","openRealGame","openAnonymousGame","openInfoPage","infoPageUrl","getInfoPageURL","_allowPreview","lobbyGameInfoPreview","allowGamePreview","setAnimatedIconState","setGamePreview","clearGamePreview","builder","isInsideSwiper","toCssClass","gameGroup","gameCategoryClassName","companyName","_buildComponentClasses","LIVE_CASINO_ITEM","str","replace","StandardToastImageDefaultBox","TopBannerDefaultBox","NEW_LIVE_CASINO_PAGE","TIPPING_HISTORY_PAGE","TopBanner777Box","TopBannerSIBox","TopBannerMrGreenBox","TopBannerCasino888Box","TopBannerBox","TopBannerImageBox","PCBox","TopBannerLogoImageDefaultBox","TopBannerLogoImageBox","h1","TopBannerTitleDefaultBox","TopBannerTitleCasino777Box","TopBannerTitleBox","TopBannerLiveLogoDefaultBox","TopBannerLiveLogoCasino777Box","TopBannerLiveLogoBox","AnimatedTopImageWrapper","AnimatedTopImageScrollHandler","LottieTopImageWrapper","LottieAnimatedTopImageComponent","styles","useMemo","autoplay","PixiAnimatedTopImageComponent","_reactionDisposer","_bannerPixiAnimation","_startAnimation","_stopAnimation","_createAnimation","defautSkinConfiguration","scale","pixiApp","slotsAnimatedBannerResource","setSkinByName","setSlotsToSetupPose","screen","y","set","AnimatedTopImageComponent","imageAnimationConfig","engine","TopImageComponent","_renderLogoAndTitle","srcLogo","casino_live_logo_mobile_png","casino_live_logo_png","isFilterOn","topImageRef","animatedBanner","altText","fetchPriority","UsefulLinksListBox","LinksGroupWrapperBox","linksGroupWrapperBox","usefulLinksMenuItems","list","linksGroupWrapperClassName","onBeforeClick","onItemClick","showSeparator","UsefulLinksListComponent","UserMenuSeparatorBox","UserMenuSectionBox","useContext","OrbitContext","createServicesToInjectMap","accumulator","serviceName","serviceInstance","servicesNamesToInject","componentProps","serviceProvider","servicesToInject","setServicesToInject","servicesNames","getServiceByName","getServicesToInject","unresolvedServices","servicesMap","instance","getUnresolvedServices","resolvedServiceInstance","srv","resolveServicesToInject","resolvedServices","ServiceBase","_serviceFactory","_reactions","expression","effect","opts","mobxReaction","FeatureToggleStatusEnum","OrbitMarketingEventAnalyticsCategory","OrbitAIFeatureAnalyticsCategory","NEW_LIVE_CASINO_ARENA_NAME","NEW_LIVE_CASINO_AB_ARENA_NAME","CIP_ALL_GAMES_ARENA_NAME","SLOTS_ARENA_NAME","CASINO_GAMES_ARENA_NAME","JACKPOTS_ARENA_NAME","EXCLUSIVE_ARENA_NAME","SCRATCH_CARDS_ARENA_NAME","VIDEO_POKER_ARENA_NAME","INSTANT_WIN_GAMES_ARENA_NAME","BLACKJACK_ARENA_NAME","VIRTUAL_SPORT_ARENA_NAME","ROULETTE_ARENA_NAME","PROGRESSIVE_SLOTS_ARENA_NAME","NEW_GAMES_ARENA_NAME","HOME_PAGE_ARENA","VIDEO_SLIDES_ARENA","ALL_ARENAS","of","getCasinofiedDeviceInfo","hybridTestData","getAppMareketingData","deviceType","getCasinofiedDeviceType","inCasino","OS","isNative","browserType","appsFlyerId","AppsFlyerID","deviceId","DeviceID","appId","AppID","afInstall","getAFInstall","firebaseAppId","FirebaseAppID","firebaseAppInstanceId","FirebaseAppInstanceID","getCasinofiedCommonUserInfo","_services$user$userDa","_services$user$userDa2","_services$user$userDa3","_services$user$userDa4","userInfo","userMode","regulationTypeID","getRegulationCode","isFTD","userData","isVIP","isVip","isPromotionPermitted","IsPromotionPermitted","RMS","userFirstName","firstName","userLastName","lastName","cid","getCasinofiedGeoInfoParams","_services$sdk$getCoun","_geoLocationInfo$stat","geoLocationInfo","sdk","getGeoLocationInfo","country","getCountryIso3","timeZoneUTCOffset","getTimezoneOffset","loginIp","loginIP","ISP","isp","proxyType","stateID","stateId","stateName","getCasinofiedCommonAppContextParams","productPackageFromID","getProductPackageId","brandID","getBrandID","subBrandID","getSubBrandID","languageCode","currentLanguage","locale","getSkin","getCulture","currencyCode","currencyIso3","gaClientID","getGoogleClientID","clientThemeName","themeName","forWidgets","DeviceType","Tablet","SmartPhone","PC","STANDARD_TOPIC_HEADER","publisher","AppIdentifiers","CasinoClient","_componentID","_templateID","_fallbackFileUrl","isMatch","componentId","templateId","_areEqual","val1","val2","_this$_fallbackFileUr","fallbackFileName","isValidCmsId","CONTROL_CENTER_CONTAINERS_ID","CONTROL_CENTER_BI_EVENTS","MINI_OPEN","MINI_READY","MINI_CLOSE_INTERNAL","MINI_CLOSE_EXTERNAL","FULL_OPEN","FULL_READY","FULL_CLOSE_EXTERNAL","CATEGORY_MINI","CATEGORY_FULL","ExternalLinksZIndexes","PendingActionResultEnum","PendingActionTypeEnum","PendingActionReasonEnum","PendingActionIdEnum","REGISTRATION_DATA_KEY","GameModeEnum","GameStepsExecutionResultEnum","GameVendorId","GamesOpenSessionsKind","GameInfoButtonBox","TitleComponent","setInfoPageUrl","_openGameInfo","_closeInfoMobile","_props$dialogHandler","infoBTN_png","ContainerBox","PlayButtonsBox","GameIconAndPlayButtonsComponent","_openRealGame","_openDemoGame","_renderDemoButton","allowDemoButtonInIntermediatePage","gameImageInsideIntermediatePage","IntermediatePageBox","StripeImageAndButtonsBox","GradientBox","WarningImageBox","WarningTextBox","WarningMessageBox","RealMoneyOnlyWarningComponent","only_real_money_game_warning_png","OpenGameIntermediatePageComponent","_renderOnlyRealMoneyWarning","allowWithdrawOnlyFromReal","isCalledFromIntermediatePage","gameInfoComparerByTitle","game1","game2","GameInfo","_rawGameData","defineProperty","get","allowSwitchGameMode","_isMobile","_isAuthorized","numberOfLines","isNewGame","_hasCustomFilter","isExclusiveGame","isItalianTable","filterName","filtersList","findIndex","hasBonusGames","numberOfDecks","isMultiHand","hasFreeSpins","subGroupName","isEliteLounge","isChildish","hasSideBets","maxBetPerSpot","hasLowStakes","hasHighStakes","ClassicSlots","isAllowedCategory","isLiveCasino","isAnonymousSupported","demoSettings","demoCTAAnonymous","pc","demoCTAAuthorized","infoPageURL","siteMap","isUrlInSiteMap","debug","videoURL","hasVideoURL","gameGroupId","gameCategory","isVideoSlot","isScratchCards","vendorId","vendorName","_getDefaultGameImage","_this$_rawGameData","hybrid_icon","animated_square","getAnimatedJsonUrl","_getResolvedGameImagePath","animated_round","_shouldUseLessNonChildishIcon","gameChildishMode","GameChildishIconMode","UseLessNonChildishIcon","PreferLessNonChildishIcon","_getImageForChildishGame","_this$_rawGameData2","getChildishIconMode","UseDefaultIcon","hybrid_less_non_childish_icon","hybrid_non_childish_icon","PreferNonChildishIcon","less_non_childish_icon","non_childish_icon","getBackgroundImage","_this$_rawGameData3","_this$_rawGameData3$i","pngImagePath","endsWith","animatedImageTimings","_this$_rawGameData4","_this$_rawGameData4$i","gameImageInHistoryPage","badge","flipBadge","_this$_rawGameData5","_this$_rawGameData5$i","video_thumbnail","slideCover","_this$_rawGameData6","_this$_rawGameData6$i","slide_cover","videoSlideUrl","_this$_rawGameData7","_this$_rawGameData7$i","slideVideo","hls_manifest","_getBadgeUrl","badgeName","_CIPropRead$getProper","CIPropRead","getProperty","badges","maxBetPerBrand","useSquareIcon","seoValue","seo","categoryName","imagePath","resolveGameImagePath","strip_mobile","strip_pc","preview_default_images","default_game_strip_slots_mobile_png","default_game_strip_card_and_table_mobile_png","default_game_strip_live_mobile_png","default_game_strip_slots_png","default_game_strip_card_and_table_png","default_game_strip_live_png","multiplayer","isClassicSlot","hasHighVolatility","volatility","GAME_VOLATILITY","High","hasLowVolatility","Low","hasMediumVolatility","Medium","hasDailyJackpot","hasTwilightJackpot","hasCaptain8tJackpot","hasRedTigerJackpot","shouldShowIntermediatePage","_demoSettings$interme","_demoSettings$interme2","intermediatePageAuthorized","intermediatePageAnonymous","isDemoModeSupported","_demoSettings$demoCTA","_demoSettings$demoCTA2","_showIntermediatePage","_shouldRedirectToMembership","_openMembership","closeGame","_sendOpenGameAnalytics","gameController","marketingParams","eventsTrigger","updateMarketingParams","openGame","gameMode","Real","freePlayParams","skipFreePlaySuggestion","referrerId","Demo","_gameController","shouldSuggestNextGame","cmsSegmentation","isCstatus","dialogContentRenderer","Conversion","PreGamePopUp","openMembership","InGame","registerButton","dl","_replaceUnderscore","isAllWordsMatch","words","match","_this$_rawGameData8","_this$_rawGameData8$i","arena_icon","restriction","restrictions","getGameRestriction","GAME_GROUP","VIDEO_SLOT","SLOT","isCrashGame","CRASH_GAME","isCasinoGame","BACCARAT","BLACKJACK","CARRIBEAN_POKER","CRAPS","KENO","POKER","POKER_TEMPLATE_GAMES","ROULETTE","SCRATCH_CARD","VIDEO_POKER","isVideoPoker","isBlackJack","isRoulette","LIVE_CASINO","isBaccarat","ROULETTE_LIKE","ARCADE","POWER_VIDEO_POKER","PAI_GOW_POKER","CRAZY_BLACKJACK","externalGameCode","themeIds","_this$_rawGameData$ga","gameThemes","requiresAnimationCompleteActionsDelay","supportsStopAutoplay","computed","GamingHistoryType","GNWP_SOURCES","MediaType","MediaOrientation","MediaPointer","MediaQueryBuilder","_rules","_mediaType","mediaType","m","minWidth","w","maxWidth","h","orientation","o","t","anyHover","pointer","precision","anyPointer","rules","unshift","xsMax","sMax","mMax","lMax","xlMax","mediaQueries","sExact","mExact","lExact","Portrait","Landscape","pointerFine","Fine","pointerCoarse","Coarse","pointerNone","None","anyPointerFine","anyPointerCoarse","anyPointerNone","AboutDialogAction","MenuItemActionBase","configReader","orbitComponentInsideSdkProvider","showAboutDialog","CashierUploadDocumentsAction","openUploadDocumentsFromCashier","ChatAction","appLauncher","openChat","businessCorrelationID","openMode","ChatOpenMode","Chat","NavigationMenu","ComPointsAction","openMyAccount","MyAccountTab","ComPoints","ControlCenterAction","openControlCenterFull","UserArea","controlCenterUsefulLink","DepositAction","ExploreNavigationAction","LinkNavigationAction","setShownExplorerMenuBadgeCurrentSession","HelpCenterAction","openContactUs","CRHelpCenter","HybridInfoAction","hybridInfo","getInfoForDisplay","openMail","InactivityTimeoutSettingsAction","openInactivitySettings","InstallPwaAction","progressiveWebApp","prompt","LoyaltyIndicatorAction","MyClubAction","LCChallenges","PushNotificationsPermissionsRequestAction","promptPushNotificationPermissionRequest","ReverseWithdrawalAction","openOldCashier","ReverseWithdrawal","SignUpAction","TestRegulationSpecificAction","TimeSpentReminderAction","deeplink","ControlCenterDeeplink","TimeSpentReminderPage","TouchIdAction","specificDialogs","showModifyBiometricDialog","TransactionHistoryAction","openTransactionHistory","transactionHistoryButton","linkId","promotionsLinks","navigateLink","linkHash","link","currentPath","candidate","UriPath","linkRoot","toArray","_config","closeSecondWebView","drawer","closeDrawer","activeMenuItemKey","getMenuItemConfig","MenuItemConfigReaderBase","menuItemConfig","menuItemsOverrides","_getMenuItemsConfigOverrides","menuItemConfigOverride","Proxy","prop","categoryAndLabel","_getAnalyticsCategoryAndLabel","overridePropValue","MenuItemDefaultConfigReader","MenuItemRendererBase","menuItemActionFactory","_lastRenderOptions","menuItemAction","getMenuItemAction","_createReactElement","_this$_lastRenderOpti","sideText","_this$config$imageOnl","_shouldDisplay","_this$config$display","_this$config$menuItem","menuItemIconSource","menuItemIcon","menuItemIconAltText","AnimatedIconBaseService","loadAnimatedIcon","resourceName","animation","onContextLost","CONTEXT_LOST","animationToPlay","animationName","reason","pixiAppCreateOptions","resourcesUrls","canvasCss","pixiAppDisposer","_spineAnimations","_loaderResources","disposeActions","_signalAborted","_status","Idle","initPromise","Disposed","_disposeInternal","disposeAction","resource","autoUpdate","_initialize","Aborted","app","disposePixiApp","PixiSpine","canvas","createPixiApp","resources","loadResources","Failed","getOwnPropertyNames","styleKey","resUrl","Spine","stage","addChild","renderDisposer","view","appendChild","ITALY_MAX_GAME_LIMIT_AMOUNT_IN_CENTS","LocalStorageKeys","StandardThemeCustomizer","getHomePageTopBannerHeight","homepage","headerArenasStyleIsSmallTiles","f2p","freeToPlay_json","getLanguageSwitcherConfigForTestEnvironments","CypressToastClassNames","ToastClassNames","toastClassNames","addToastClassName","ToastCloseReason","TOOLTIP_TARGET_FREE_PLAY_INDICATOR","TOOLTIP_TARGET_GIFT_MINI_ORBIT_INDICATOR","TOOLTIP_TARGET_CONTROL_CENTER_PC_BUTTON","TOOLTIP_TARGET_BOTTOM_NAV_BAR_INDICATOR","ByThemeRegistry","_default","_registry","getRegistryItem","forClient","override","ThemeName","Casino777","Casino888","Casino888Cip","WsopCip","Casino888Cis","Harrahs","Wsop","SI","SICis","MrGreen","MrGreenCis","MrGreenCip","negateNextRule","formatRule","rule","not","desktop","ipad","notMobileOs","lowRes","tablet","embededHybrid","EMBEDDED_HYBRID","iPhoneVer10","realMobile","MINI_ORBIT","flexRowContainerMixin","flexAlignItemsMixin","flexCenterAlignItemsMixin","flexAdaptiveSizeItem","FlexFixedSizeItemBox","_templateObject14","_templateObject15","direction","justifyContent","grayColors","gray013","gray043","gray053","gray063","gray073","gray083","gray093","gray103","gray113","gray123","gray133","gray143","gray153","gray163","gray173","gray183","gray193","gray203","gray213","gray223","gray233","gray243","gray253","white","HeaderArenasStyle","boxName","themeBoxes","boxes","forwardedRef","ComponentDefinition","StyledByTheme","defaultComponent","ClientThemeName","WSOP","MobileMenuIcon","fillRule","clipRule","AddIcon","points","BackIcon","ForwardIcon","transform","ControlCenterIcon","HelpIcon","TextTag","TwoCharsIcon","trim","substr","textAnchor","EarthGlobeIcon","TopGamesIcon","backdropOpacity","fillOpacity","strokeMiterlimit","strokeLinejoin","clipPath","RouletteIcon","strokeLinecap","BlackjackIcon","EliteLoungeIcon","PokerIcon","BaccaratIcon","GameShowsIcon","NewGamesIcon","LinkToOfferIcon","LinkToOfferCloseIcon","SourceOfFundsIcon","ArrowsUpDownIcon","MegaphoneIcon","ChipIcon","SettingsIcon","x2","y2","x1","y1","ViewersIcon","cx","cy","TimeReminderIcon","TripleEightExclusiveIcon","PaymentsRedirectIcon","opacity","LeftArrowIcon","RightArrowIcon","pinAnimation","PinGroup","g","MaskPinPath","path","CirclesGroup","smallCircleAnimation","SmallCirclePath","LocationIcon","mask","BlogIcon","HomeIcon","PromotionsIcon","SlotsIcon","JackpotsIcon","LiveCasinoIcon","CasinoGamesIcon","VipIcon","TripleEightCasinoIcon","GettingStartedIcon","BankingIcon","LiveChatIcon","DownloadAppIcon","Club888Icon","PokerCircleIcon","SportCircleIcon","VideoPokerIcon","DepositIcon","FreePlayIcon","NotificationIcon","HelpCenterIcon","WarningSignIcon","USAMapIcon","ScratchCardsIcon","MobileMenuNoSearchIcon","SpeedGamesIcon","FilterIcon","TempAccountPopupIcon","MobileAppsIcon","AppHeaderSportIcon","AppHeaderPokerIcon","AppHeaderLogo888Icon","SelfExclusionRegulationIcon","rx","SelfExclusionRegulationSymbolIcon","GamingLimitRegulationIcon","GamingLimitRegulationSymbolIcon","SelfTestRegulationIcon","gradientUnits","stopColor","offset","SelfTestRegulationSymbolIcon","MinimumGamblingAgeRegulationIcon","PanicButtonRegulationIcon","HistoryIcon","TransactionHistoryIcon","SecurityIcon","CompPointsIcon","TimerIcon","BiometricLoginIcon","AboutIcon","GamingHistoryIcon","UploadDocumentsIcon","TippingHistoryIcon","ReverseWithdrawalIcon","OpenExternalIcon","WalletIcon","RegisterUserIcon","SaveGameIcon","shouldFill","maskUnits","PokerChipIcon","RedRecordCircleIcon","LeaveIcon","SoundOnIcon","filterUnits","colorInterpolationFilters","floodOpacity","in","stdDeviation","in2","operator","mode","SoundOffIcon","RetryArrowIcon","ExploreFilledIcon","k2","k3","dotColor","rest","ExclusiveSideMenuIcon","ItalianSpeakingIcon","AddFundsIcon","mobileAppsIcon","mobileMenuNoSearchIcon","mobileMenuIcon","controlCenterIcon","appHeaderPokerIcon","appHeaderSportIcon","appHeaderCasinoIcon","AppHeaderCasinoIcon","appHeaderLogo888Icon","helpIcon","twoCharsIcon","earthGlobeIcon","italianSpeakingIcon","topGamesIcon","rouletteIcon","blackjackIcon","eliteLoungeIcon","pokerIcon","baccaratIcon","gameShowsIcon","newGamesIcon","linkToOfferIcon","linkToOfferCloseIcon","sourceOfFundsIcon","arrowsUpDownIcon","megaphoneIcon","chipIcon","redRecordCircle","viewersIcon","timeSpentReminderClockIcon","tripleEightExclusiveIcon","paymentsRedirectIcon","leftArrowIcon","locationIcon","sideMenuHome","sideMenuBlog","sideMenuPromotions","sideMenuSlots","sideMenuJackpots","sideMenuLiveCasino","sideMenuVip","sideMenuNewGames","SideMenuNewGamesIcon","sideMenuCasinoGames","sideMenuExclusive888","sideMenuScratchCards","sideMenuBlackjack","SideMenuBlackjackIcon","sideMenuRoulette","SideMenuRouletteIcon","sideMenuGettingStarted","sideMenuBanking","sideMenuLiveChat","sideMenuDownloadApp","sideMenuClub888","sideMenuPokerCircle","sideMenuSportCircle","sideMenuVideoPoker","sideMenuDeposit","sideMenuPokerChip","sideMenuSportFootball","SportFootballIcon","notificationIcon","freeplayIcon","helpCenterIcon","usaMapIcon","speedGames","filterIcon","tempAccountPopupIcon","minimumGamblingAgeRegulationIcon","historyIcon","openBetsIcon","transactionHistoryIcon","securityIcon","compPointsIcon","timerIcon","biometricLoginIcon","aboutIcon","gamingHistoryIcon","uploadDocumentsIcon","tippingHistoryIcon","reverseWithdrawalIcon","openExternal","wallet","registerUser","saveGameIcon","leaveIcon","soundOnIcon","soundOffIcon","retryArrowIcon","exploreFilledIcon","exclusiveSideMenuIcon","addFundsIcon","base01","base01Contrast","base01Dark","base01Light","base02","base02Contrast","base02Dark","base02Light","base03","base03Contrast","base03Dark","base03Light","base04","base04Contrast","base04Light","base05","base05Contrast","base05Dark","base05Light","explorePurple","gold","yellow","warmWhite","FEATURE_DEPOSIT_WIDGET","FEATURE_CASHOUT_WIDGET","FEATURE_TRANSACTION_HISTORY_WIDGET","FEATURE_NAME_REGISTRATION_WIDGET","FEATURE_NAME_CONTROL_CENTER_TOGGLE","FEATURE_NAME_ONBOARDING_TOUR","FEATURE_NAME_VIDEO_LIVE_STREAM","FEATURE_NAME_STATIC_VIDEO_LIST","FEATURE_NAME_VIDEO_SLIDES","FEATURE_NAME_MOBILE_HEADER_SEARCH_BUTTON","FEATURE_NAME_WEBAPP_BOTTOM_NAVIGATION","FEATURE_NAME_AI_SORT_GAME_LIST","FEATURE_NAME_PLAYERS_LIKE_YOU_GAMES_LIST_TYPE_ID","FEATURE_NAME_SEARCH_GAME_SUGGESTED_BY_AI","FEATURE_NAME_LIST_ON_TOP","FEATURE_GAME_RECOMMENDATIONS","FEATURE_ROUTE_OVERWRITE","FEATURE_NAME_FREE_TO_PLAY_FLOW","FEATURE_NAME_STATIC_LIVE_ARENA","FEATURE_NAME_ADD_IN_GAME_FUNDS","FEATURE_NAME_JACKPOT_BET","LIST_TYPE_ID","partyJackpotToaster","omg","myAccount","uploadDocuments","registration","pendingPlay","pendingAction","geoLocationRetry","geoLocation","rich","about_popup","uk_acocunt_miration","withdrawButton","uploadDocumentsButton","retryButton","plusButton","urlParam","controlCenterHeaderButton","controlCenterTooltip","gamesLimitsLobbyButton","omgAction","DISPLAY_MESSAGE_IDS","sofRequired","retryCloseDrawerMessage","psRedirectFocusDialog","timeSpentReminder","nightLimitWarning","nightLimitKick","lugasCooldown","lugasActiveOnAnotherOperator","lugasLogout","loginMessage","realityCheckGermany","SDNetLossAdvanceWarning","SDTimeLimitAdvanceWarning","SDNetLossLimitsReached","SDTimeLimitsReached","SDRealityCheck","SDResult","SDSetLimitPopUp","getDisplayMessageName","messageId","DISPLAY_MESSAGE_NAMES","DISRUPTIVE_WARNING_MESSAGE_NAME","DISRUPTIVE_KICKOFF_MESSAGE_NAME","LUGAS_COOLDOWN_MESSAGE_NAME","LUGAS_ACTIVE_MESSAGE_NAME","LUGAS_LOGOUT_MESSAGE_NAME","REALITY_CHECK_GERMANY_MESSAGE_NAME","LOGIN_MESSAGE","ACTION_TAKEN_NAMES","CONFIRM_ACTION","CANCEL_ACTION","PLAYER_MIGRATED_COOKIE","LOADED_WITH_MIGRATION_TOKEN_SESSION_STORAGE_KEY","MIGRATION_SOURCE_QUERY_PARAM","MIGRATION_SOURCE_QUERY_PARAM_VALUE","MIGRATION_TOKEN_QUERY_PARAM","BUSINESS_CORRELATION_ID_QUERY_PARAM","UK_SCV_PLAYER_MIGRATED_COOKIE","GermanyResponsibleGamingButtonPlacement","STATE_OF_RESIDENCE_COOKIE_KEY","TEMP_ACCOUNT_STATUS","APPROVED","DOCUMENTS_NOT_RECEIVED","PENDING_VERIFICATION","CySelector","TSR_TYPE","hexToDec","decToHex","n","clamp","rgbToHsl","b","cmin","cmax","delta","s","l","abs","toFixed","hue","saturation","lightness","hslToRgb","blue","gre","blu","opa255","opa","rgb","sqrt","pow","adjustColorLightness","amount","hslData","rgbData","adjustColorSaturation","saturate","desaturate","adjustTransparency","fadeIn","fadeOut","timeoutRef","res","rej","onload","backgroundUrl","onerror","totalMilliseconds","overrideJson","require","ApplicationStartupConfigurationsReader","_window","_launcherOverridesReader","_http","_logger","_storageService","_launcherOverrides","_b2cConfigurations","_skinFullName","readApplicationConfigurations","getOverrides","_getB2CConfigurations","casinoConfigurations","_getCasinoConfigurations","skin","skinOverride","orbitServer","ExtraProperties","paths","server","skinFullName","orbit","admin","adminConfig","b2c","userSelectedState","useCountryAsState","assetsMap","mockApplicationStartupConfigs","getGlobalProperty","ALL_CONFIGS_KEY","lang","iso3","AssetsMap","serverOrigin","getMiniOrbitName","_loadOrbitConfigFile","_tryLoadOrbitLanguageOverrideFile","_applyOrbitConfigsOverrides","_applySdkConfigOverrides","configModule","configInitParams","languageIso3","createDefaultConfigs","Language","iso2","orbitLang","SDKTexts","_applyB2COverrides","b2cConfigs","_this$_launcherOverri","_this$_launcherOverri2","_this$_launcherOverri3","languageIso3Override","languageIso2Override","publicationIdOverride","publicationID","publicationId","segmentsOverrides","webData","segments","SdkHooksProvider","redirectProxy","isAbsolutUrl","redirect","openInNewWindowHook","_this$services","isMiniCip","_isMiniOrbit","MINI_CIP_BASE_ROUTE","isMiniCis","MINI_CIS_BASE_ROUTE","basePath","Uri","URL","getBase","getGameTypesMappingForSdk","_this$services2","_this$services2$confi","_this$services2$confi2","mapperData","usedGameTypesBySite","getHeaderRegulationDataElement","_await$this$services$","_this$services3","imageFilePath","_this$services4","_this$services4$confi","getOrbitComponentToSdkAdapter","getCashierService","getGameRunnerService","getCasinofiedAnalyticsService","casinofiedAnalytics","getSpinnerService","spinner","getPlayerMigrationService","playerMigration","getExternalLinksProxyService","getToasterProxyService","getLinksNavigationService","getMarketingService","marketing","getRegulationServiceProxy","getDialogService","getTranslationService","getAbTestingFeatureDataProviderService","_this$services5","PropertiesEvaluator","_propertiesEvaluators","evaluate","context","propEvaluator","propertyName","fromRoot","rootObject","rootProps","propName","createPropertyEvaluator","StatementsEvaluator","_statementsEvaluators","_defaultValue","evaluators","len","evaluatedValue","_applyValueTransformation","parsePropertyValue","ObjectEvaluator","_object","_evaluatedValue","obj","properties","configEvaluator","ArrayEvaluator","_itemsEvaluators","createPropertyContext","SimpleValueEvaluator","_value","applyValueTransformation","getCurrentPropertyPath","StatementEvaluator","_statementDefinition","definition","createSegmentationRule","createLogicalOperator","condition","BaseLogicalOperator","OrLogicalOperator","AndLogicalOperator","SegmentationRule","_ruleDefinition","innerRules","createComparisonOperator","segmentValue","getSegmentValue","compare","BaseComparisonOperator","EqualOperator","value1","value2","_isBooleanAsString","NotEqualOperator","PropertyLevelContext","_originalContext","_currentPropertyName","operatorName","logicalOperatorName","ruleDefinition","createStatementEvaluator","statementDefinition","propertyPath","propertyOwner","getLauncherGames","PropertyEvaluator","_propertyName","_valueEvaluator","propertyContext","createStatementsDefinition","subLists","statementsDefinition","statements","sublist","Segment","Games","segment","_createStatementsRule","GamesIdPropertyEvaluator","_owner","_adminConfig","owner","gamesAdminRefKey","listsv2","gameTypes","launcherGames","IsFalsyOperator","GreaterThanOperator","LessThanOperator","AnyOfOperator","ConfigurationEvaluationContext","dataProvider","isObject","_hasStatementsOrDefaultValue","_createStatementsEvaluators","statementsDefinitions","propertyValue","gamesSettings","gamesTags","_mergeGamesFromLauncher","existingGamesTags","SdkInitializer","_applicationConfiguration","_sdkHooksProvider","_theme","_waitForMapperCGP","_waitForHeaderRegulationDataElement","headerRegulationDataElement","waitForElement","module","API","Logger","logLevel","sdkApi","sdkConfigOverrides","getSdkConfigOverrides","initialize","onInitCompleteCallback","Country","getCountryServiceOverrides","Skin","getSkinServiceOverrides","Game","getGameServiceOverrides","Integration","getIntegrationServiceOverrides","Http2","getHttp2ServiceOverrides","JackpotToasters","getJackpotToastersServiceOverrides","OrbitComponentRender","getOrbitComponentRenderOverrides","CashierProxy","getCashierProxyOverrides","GameRunnerProxy","getGameRunnerProxyOverrides","CasinofiedAnalyticsProxy","getCasinofiedAnalyticsProxyOverrides","ExternalLinksProxy","getExternalLinksProxyOverrides","ToasterProxy","getToasterProxyOverrides","PlayerMigrationProxy","getPlayerMigrationProxyOverrides","LinksNavigationProxy","getLinksNavigationProxyOverrides","SpinnerProxy","getSpinnerServiceProxyOverrides","getOrbitRegulationProxy","DialogProxy","TranslationProxy","AbTesting","abTestingFeatureDataProviderService","_evaluateSdkConfigsInsideOrbit","toasterImage","shellTheme","crown_png","_this$_applicationCon","_this$_applicationCon2","_this$_applicationCon3","SDK","sdkConfigsInsideOrbit","env","configEvaluationDataProvider","segmentName","_gameTypeMapper","_getHeaderRegulationDataElement","_launcherOverrides$or","launcherOverrides","gameTypeMapper","proxyLink","isMiniCipFunc","isMiniCisFunc","CMSSource","cmsSource","getOrbitMarketingData","getMarketingData","_launcherOverrides$sd","_launcherOverrides$or2","_launcherOverrides$or3","api","origin","externalLinksService","toasterService","QA_ENVIRONMENT_POP_UP_BLOCKER_COOKIE","md5","QAEnvironmentPopUpBlockerService","validatePassword","password","QAEnvironmentPopUp","validationKey","_setCookie","expirationDate","setMonth","getMonth","cookies","createCookie","VideoPlayingServiceBase","_setIsSupported","isSupported","_setIsAppVisible","isDisabledPrelogin","currentRegulationCode","disableForRegulationPreLogin","LiveVideoStream","setSwiperHandler","_swiperHandler","getSwiperHandler","_init","events","onAppPaused","onAppResumed","onGameOpen","setIsMuted","setBandwidthEstimate","bandwidthEstimate","_checkIfSupported","structuredLoggingService","getLogger","addCategory","addAction","info","PAUSABLE_TIMER_STATES","PausableTimer","callback","_timerId","_remainingTime","_startTime","_callback","_state","resume","timeElapsed","_clearTimer","VideoLiveStreamBasePlayer","_setHasError","_setIsLoading","_setWatchTimeLimitReached","_setAutoplayAllowed","playerType","videoReference","streamSource","watchTimeLimit","_services","_gameType","_videoReference","_streamSource","_playerType","_pausableTimer","_bufferingStartTime","_firstLoadTimeLogged","_isFirstTimePlay","_bufferingTimeValues","_hadPlayStarted","_isVisible","_watchTimeLimitMs","_getGACategory","_onWaiting","performance","_onPlaying","_logFirstLoadTimeUntilPlay","_onCanPlay","_onError","_log","_onAutoplayError","_onGoingOffline","VideoPlayback","_logAverageBufferingTimeOnPause","handleError","_logAverageBufferingTimeOnEnd","_getBufferAverageTime","prevValue","occurrence","loadTime","_checkDroppedFPS","droppedFrames","decodedFrames","framesDropData","totalFrames","structuredLoger","addLabel","addValue","addCustomData","LiveStreamNativePlayer","videoEl","canPlayResultValue","canPlayType","_tickInterval","_previousTime","_isVideoPlaybackQualityAvailable","_lastPeriodDroppedFrames","_lastPeriodDecodedFrames","_tickCount","_onTick","currentTime","_checkFPSInterval","isFunction","getVideoPlaybackQuality","_setInterval","_clearInterval","videoPlaybackQuality","_checkFPS","droppedVideoFrames","totalVideoFrames","webkitDroppedFrameCount","webkitDecodedFrameCount","currentDropped","currentDecoded","VideoHlsBasePlayer","Hls","_hlsInstance","_isManifestParsed","_bitrateStats","MAX_VALUE","MIN_VALUE","HLS_CONFIG","DefaultConfig","capLevelOnFPSDrop","_onHlsError","fatal","_onMediaAttached","loadSource","_onManifestParsed","_onLevelUpdated","updatedBitrate","levels","level","bitrate","_onFpsDrop","_onBandwidthEstimate","stopLoad","_this$_hlsInstance","_this$_hlsInstance2","_this$_hlsInstance3","_this$_hlsInstance4","_this$_hlsInstance5","_this$_hlsInstance6","_this$_hlsInstance7","ERROR","MEDIA_ATTACHED","MANIFEST_PARSED","LEVEL_UPDATED","FPS_DROP","FRAG_LOADED","LiveStreamHlsPlayer","startLoad","_createHlsInstance","hlsInstance","on","attachMedia","LiveStreamPlayingService","createElement","remove","dontAutoSwipe","TextTranslation","translationService","_parameters","TranslationService","langData","translatedTexts","parameters","translatedPhrase","_resolveBraces","getTranslation","objectKeys","objectKey","resolveConfigurationValue","CURRENCY_SYMBOLS","CAD","NOK","USD","EUR","GBP","DKK","SEK","RON","BRL","CurrencyService","withDecimal","getCurrencyIso3","AnalyticsService","omitStructuredLogger","sendTechnicalEvent","sendOrbitAIFeatureEvent","sendToDWH","setAppID","setEventType","writeWidgetLogs","payload","SAVED_GAMES_LOCAL_STORAGE_KEY","GamesService","serviceFactory","_updateGamesMapPromise","_MAX_SAVED_GAMES","_DAILY_INCREMENT_SAVED_COUNTER","_INFERIOR_THRESHOLD_BASE_COUNTER","_SUPERIOR_THRESHOLD_BASE_COUNTER","_START_DATE","_updateGamesMap","onRecentlyPlayedGamesUpdated","_updateRecentlyPlayedGames","_initializeSavedGames","_setInMemorySavedGames","newSavedGames","savedGameTypes","localStorageSavedGames","getJson","_setGamesMap","recentlyPlayedGames","isInitialized","getUtils","arraysAreEqual","_buildGamesMap","sdkGamesInfo","usedGameTypesBySiteMap","gt","sdkInfo","gameTagInfo","rawGameData","assign","getGamesMapUpdatePromise","_getGamesInfoMap","getGamesInfo","getGamesInfoMap","getGamesInfoForHistory","getGamesInfoArray","getGameInfo","getCorrelatedGames","numberOfGames","saveGame","setJson","removeSavedGame","generateTimesSavedCounterForGame","hash","getHash","daysSinceStart","showAllSavedGamesDrawer","savedGamesSwiperConfig","verticalGamesList","List_Type","getAdminArenaLists","adminArenaConfigData","arenaKey","listType","adminLists","lists","_list$Metadata","currentList","Metadata","SubLists","ConfigurationsService","startupConfigs","startupConfiguration","_createConfigData","_getConfigEvaluationContextServices","launcher","getTestedGames","originalConfigData","homePage","gamesLists","Swipers","swiperGamesList","allGamesGrid","Grids","injectAdminArenas","_defineCustomConfigProperty","isNaN","configData","evaluator","cmsPublicationId","gameTypesMap","_getUsedGamesByHomePage","_getUsedGamesByArenas","_getUsedGameTypesByNewLiveGamesArena","gamesList","gamesIds","arenaConfig","swiperConfig","gamesGridConfig","liveCasinoArenaConfig","gameTypeConfig","gameId","popularTablesConfig","popularTables","tableGamesIds","fullPath","objectValue","fullPathArray","imageFileName","imagesBasePath","gamesImages","serverPath","resolveJsFilePath","fileName","getFontsPath","homePageGamesLists","_gamesList$jackpotWid","jackpotWidget","getSelfUpdatedByNewestGamesList","newGameArenaConfig","find","listConfig","isSelfUpdatedByNewest","_getCurrentArenaLists","getGamesListByTitle","getGamesListById","listId","getConfigs","SoundUserPreferences","UserPreferences","UserService","_updateUserData","onOAuthStateChanged","lastLogin","logoutReason","_userData","setItem","statusGroupId","playerStatus","_updateSegments","_this$registrationCou","IsAuthorized","IsVIP","GenderId","DaysSinceRegistration","daysSinceRegistration","RegistrationCountry","registrationCountry","hasActiveChallenges","activeChallengeCount","userName","joinDate","_getLastLoginFromQueryParams","_this$services$locati","queryParams","getParamValue","seconds","formatLastLoginFromUnixTimeStampInSeconds","lastLoginFromQueryParam","lastLoginDateInTimeZone","formatLastLogin","timeSinceRegistration","parse","Infinity","playerRMStatus","countryName","getCountryName","getAutoLoginToken","token","getPlatformToken","getFirebaseToken","openLogin","openLoginForm","isDocUploadRequired","_this$services$sdk$ge","getAccountData","IsDocUploadRequired","logout","genderTitle","_isInAutoLogin","isInAutologin","waitForAutoLogin","waitForAutologin","_removeAutoLoginTokenFromUrl","ensureUserIsLoggedIn","initiator","_currentUri$queryPara","paramToBeRemoved","hasParam","MIGRATION","urlWithoutToken","removeSearchParam","runAutoLogin","autoLoginParams","userController","selfExclusionPanic","timezoneOffset","productPackage","_this$services$sdk$to","tokenInfo","getOpenSessionsRealMoneyBalance","openSessionsController","getOpenSessions","openSessionsKind","sessionDetails","sum","Credit","getInactivityTimeoutSettings","setInactivityTimeout","getDefaultAccessTokenLifeTime","OAuth2","defaultAccessTokenLifeTime","SegmentationAggregatorService","_subscribeReactions","userSegments","cmsSegments","deviceSegments","mediaQueryChange","lastMediaChange","isMiniOrbit","isPWAInstallable","videoSlidesEnabled","extraSegments","_getExtraSegments","_setAllSegments","_getMediaQuerySegments","allSegments","_allSegments","segmentsLastUpdate","tempRecords","mediaQueryName","countryCode","regulationID","langCode","isCIS","isCIP","DeviceService","feature","isProgressiveWebApp","isStandalone","_updateDeviceType","dom","subscribeTo","devicechanged","_sdkDevice","isEmbeddedHybrid","operationSystem","tool","isProbablyIPad","productPackageId","isMobileWebApp","isProbablyIOSDevice","SEO_CATEGORIES","NO_AI_GAMES_RECOMMENDATIONS","AiEngineService","_isLoadTrendingRecommendedGamesForPlayerInProgress","_onOauthChange","trendingRecommendedGamesForPlayerByBets","_this$_trendingGamesR","_loadTrendingRecommendedGamesForPlayer","_trendingGamesRecommendations","gamesByBets","trendingRecommendedGamesForPlayerByActiveUsers","_this$_trendingGamesR2","gamesByActiveUsers","_setAiRecommendedGames","tempGameTypesMap","aiRecommendedGames","_setTrendingRecommendedGamesForPlayer","trendingRecommendedGamesForPlayer","BETS","ACTIVE_USERS","_setAllAiRecommendedGameTypes","_allAiRecommendedGameTypes","_initalizeTrendingRecommendations","_updateAiRecommendedGames","aiRecommendationsData","getAIRecommendations","filterOutRecentlyPlayedGames","maxGames","_sendAIRecommendationAnalytics","analyticsObject","getCasinoRecommendedDynamicListsForPlayer","listIDs","insightController","listsIDs","sortGames","allAiRecommendedGameTypes","gamesMapOverride","ignoreNumberOfGames","fixedGameTypes","aiGameTypes","originalIndexes","sort","gt1","gt2","index1","index2","getAiEngine","getAiEngineForGame","trendingRecommendedGames","getTrendingRecommendedGamesForPlayer","_getGamesTypesByListTypeID","listTypeId","sortGamesByAI","gamesTypesArray","aiGamesByScore","first","second","firstGamePlace","secondGamePlace","CGP_EVENTS_NAMES","SdkEvents","CGP","onEvent","eventName","onBeforeOAuthStateChanged","onDeepLinkReceived","onShowGamePopup","onGameClose","onPlayerAction","SYSTEM_EVENTS","PLAYER_ACTION","onLoginFormOpen","onLoginFormClosed","onTokenLifetimeExpired","onLiveTableFeedsUpdate","onJackpotsByIdUpdate","LIVE_FEEDS_JACKPOTS_BY_ID_UPDATED","onJackpotsAmountsByGameUpdate","LIVE_FEEDS_JACKPOT_AMOUNTS_BY_GAME_UPDATED","onJackpotsAmountsByIdUpdate","onBalanceUpdated","onSessionTimerUpdate","SESSION_TIMER_UPDATE","onRealityCheckOpened","CLIENT_EVENTS","REALITY_CHECK_OPENED","onRealityCheckClosed","REALITY_CHECK_CLOSED","onRegistrationCompleted","onExternalLinkClosed","onDepositWidgetClosed","DEPOSIT_WIDGET_CLOSED","onCashierOrDepositWidgetClosed","subscriptions","linkSource","CASHIER","onTouchIDActiveStateChanged","onOmgDisplayed","onBurnoutMessageReceived","onLiveGameSwitched","onPromotionsChanged","onFreeToPlayWidgetClosed","FREE_TO_PLAY_WIDGET_CLOSED","onPostMessage","POST_MESSAGE_ARRIVE","onHybridPostMessage","HYBRID_POST_MESSAGE_ARRIVE","onFreePlayBatchAdded","SESSION_EVENT_FREE_PLAY_BATCH_ADDED","onFreePlayBatchUpdated","SESSION_EVENT_FREE_PLAY_BATCH_UPDATED","onFreePlayBatchRemoved","SESSION_EVENT_FREE_PLAY_BATCH_REMOVED","onHybridEmbeddedGameLoadingIndicatorUpdateV1","LOADING_INDICATOR_EMBEDDED_UPDATE","onHybridEmbeddedGameLoadingIndicatorUpdateV2","LOADING_INDICATOR_EMBEDDED_UPDATE_V2","onFirebaseGotNewToken","FIREBASE_GOT_NEW_TOKEN","onNetPositionUpdated","SESSION_EVENT_NET_POSITION_UPDATE","onLoginSessionResumed","LOGIN_SESSION_RESUMED","onUserApprovedPostLoginPopup","USER_APPROVE_GAME_POPUP","onFirebaseOmgReceived","SESSION_EVENT_OMG_RECEIVED","onReceivedToaster","SESSION_EVENT_RECEIVED_TOASTER","onSecondWebViewClose","SECOND_WEB_VIEW_CLOSE","onRestrictionsChanged","RESTRICTIONS_CHANGED","onPlayerMessagesConnected","PLAYER_MESSAGES_STRATEGY_READY","onGeoRestrictionsUpdate","GEO_RESTRICTIONS_UPDATE","onGeoPeriodicUpdate","GEO_PERIODIC_UPDATE","onHybridGeoLocationResponse","GEO_HYBRID_GET_LOCATION_RES","onGamblingSessionUpdate","GAMBLING_SESSION_UPDATE","onGamblingSessionAction","GAMBLING_SESSION_ACTION","TIME_UPDATED_FROM_SERVER","SdkEventsTrigger","gameOpen","Event","fire","GAME_OPEN","gametype","isReal","gameClosed","CLOSE_GAME","isGamePlayed","showNextGameSuggestion","keepAlive","EXTEND_USER_TIME_TO_LIVE","liveGameSwitched","LIVE_GAME_SWITCHED","hybridGameLoadingIndicatorClosed","LOADING_INDICATOR_EMBEDDED_CLOSED_BY_X","INCOMING_MARKETING_DATA","navigateToGameInWebView","WEB_VIEW_NAVIGATE_GAME","gameSequenceFinishedSuccess","GAME_SEQUENCE_FINISH","showHybridAlert","HYBRID_ALERT","locationPopupClosed","LOCATION_POPUP_CLOSED","registrationCompleted","REGISTRATION_COMPLETED","externalLinkClosed","EXTERNAL_LINK_CLOSED","gnwpSource","omgDisplayed","omgHook","OMG_DISPLAYED","closeAllSecondWebViews","SECOND_WEB_VIEW_CLOSE_ALL","closeNyxSecondWebView","SECOND_WEB_VIEW_CLOSE_NYX","openUrlInSecondWebView","SECOND_WEB_VIEW_NAVIGATE_SPORT","closeModifyBimetricDialog","TOUCH_ID_STATE_CHANGED","onInitScreenShow","TOUCH_ID_INIT_SCREEN_SHOW","enableHybridGeoLocation","GEO_HYBRID_UPDATE_ENABLE","hybridGeoLocation","geoParams","GEO_HYBRID_GET_LOCATION","realityCheckOpen","realityCheckClosed","exploreSwipe","EXPLORE_SWIPE","messageClosed","MESSAGE_CLOSE","SdkService","_events","_updateLocalStorageAccordingToCookie","_displayHybrid","hasNavigationHistory","routeChanged","displayHybrid","isLoginFromRegistration","getCGPMaxOverlayZIndex","dateAndTimeFormat","getRegulationDateAndTimeFormat","rawUserData","getUserData","rawAccountData","accountData","FirstName","LastName","StatusGroupId","genderID","TimeSinceRegistration","PlayerRMStatus","sessionId","getSessionId","JoinDate","FTDSubBrand","taxId","TaxId","LastLogin","LastLoginDateInTimeZone","mobileNumber","MobileNumber","_setIsSdkReady","isSdkReady","getAIList","numberOfRecentlyPlayedGameToFilterOut","aiGameTypesArray","listTypeIds","getAINewRecommendations","getAINewGamesList","formatToRegulationOffset","dateFormattedToRegulation","ex","getCmsUserSignature","getUserSegments","format$$$","openGameOptions","showRegister","navbar","login","getGamesThemes","getGamesVendors","getGamesCompanies","getRegulationService","isHybridEmbeddedGame","openHybridLink","autologinCookie","getCookie","setAutoLoginToken","removeCookie","getGRSEnvironmentUrls","getGRSEnvironments","countPlayerChallenges","executeMenuAction","menuActionExecute","startLiveTableFeeds","startEvolutionLiveFeeds","stopLiveTableFeeds","stopEvolutionLiveFeeds","getDailyDealCampaigns","getJackpotsById","getJackpotsByGameType","getBankroll","plainNumber","getProductPackage","getPlatformSystemID","getClientPlatform","getVersion","getBrandName","getMinimumAge","getSerialData","marketingData","getDefaultHybridSerial","fireOrbitInitComplete","onOrbitInitComplete","getEnvironment","pushDataToDataLayer","getSupportedStates","getWrongLocationDetectionPath","httpPost","requestData","httpGet","loadScript","getRefreshToken","overlayZIndex","OMG","Omg","GAME_FRAME","GameFrame","fireDepositWidgetClosed","fireFreeToPlayWidgetClosed","getToken","getDownloadAppLink","isDepositWidgetSupportedByHybrid","openPopUpOnSecondWebView","content","closePopUpOnSecondWebView","currentRegulation","getCurrentBrowserTabId","setOrbitActiveOverlayExists","gnwp","scriptLoader","startAutoRetryGeoProcess","extractTokenProperty","tokenProperty","updateTokenProperty","isLoginPopupEnabled","getTempAccountGnwpSource","isPlayerMessagesConnected","utc","createUserActivityDetactor","NoGamesFilterStrategy","isFilteringAvailable","getFiltersForGame","filteredGamesMap","showFiltersEditor","getNumberOfGamesBeforeUserApply","filterIDS","isValidFilter","filterId","getFiltersDefinitions","filtersIds","GAMES_FILTERS_STORAGE_KEY","GamesFiltersStorage","_savedFilters","saveFiltersForCurrentArena","filterIds","clearAllSavedFilters","getSavedFiltersForCurrentArena","_this$_savedFilters$a","FILTERS_HASH_NAME","GamesFilterService","_gamesFilterStorage","_currentFilteringStrategy","_setCurrentStrategy","getCurrentArena","isCurrentUrlHashWithFilters","currentAppliedFiltersIds","savedFilters","applyFilters","currentArena","getGamesFilteringStrategy","_this$services$locati2","startsWith","_this$services$locati3","urlHash","_params$","clearFilters","getUrlWithoutHash","isFilterApplied","ApiListType","GamePlaceHolderBox","BaseGameImageBox","SingleGamePlaceholderComponent","SwiperWrapperBox","SwiperGamesListBox","SwiperBox","OrbitSwiperComponent","_swiperGameListElementRef","_swiperWrapperElementRef","viewModel","swipeLogicHandler","setElement","isVisible","renderListHeader","isTouchDevice","isTouch","renderSpecialWidgets","_renderOneGame","showGameTitleOnMultipleLines","onGameBringInCentralView","lastGameType","_renderGamesSkeletons","numSkeletons","numberOfGamesSkeletons","_renderPlaceholders","placeHolders","numberOfPlaceholders","renderListNavigation","renderListFooter","RecentlyPlayedComponent","GamesListBaseModel","listKey","_isAISorted","maxGamesToShowInList","_shouldBeDisplayed","_applyGameTypesTransformations","_getGameTypes","_reduceGameTypes","_sortGameTypes","_distinctGameTypes","aiSortingOptions","_numberOfGamesToBeIgnoredInAISorting","sortingGametypesMapOverride","Set","_forceRoundIcons","_useSquareIcons","_renderList","ListTitleIconBox","JackpotWidgetWrapperBox","RedTigerWidgetBox","RedTigerWidgetHitAreaDefaultBox","RedTigerWidgetHitAreaCasino777Box","RedTigerWidgetHitAreaBox","RedTigerWidgetFrameContainerDefaultBox","iframe","RedTigerWidgetFrameContainerBox","redTiger","redirectToWidgetActionLink","actionLink","_logMissingProps","frameBorder","scrolling","getWidgetUrl","RedTigerWidgetComponent","ListTitleTextBox","ListTitleBox","GameListTitleComponent","cssClasses","SwiperButtonsBox","SwiperButtonBox","ExploreButtonBox","OrbitSwiperButtons","onSwiperButtonPrevClick","movePrevious","onSwiperButtonNextClick","moveNext","seeAllClickHandler","analyticsAction","seeAllButtonUrl","_renderMoveNextAndPreviousButtons","allowNext","allowPrevious","_shouldReplaceSeeAllWithExplore","hasExploreButton","_renderSeeAllButton","SwipeLogicHandler","_gamesListViewModel","_resizeObserver","_isRTLLanguage","_isSwiperOnTheMove","_mobileScrollingTimeout","_onMobileSwipe","_unsubscribe","_element","_setScrollWidth","scrollWidth","_currentTranslateAmount","getElementHorizontalTranslationAmount","_subscribe","resetScrollPosition","_maximumTranslationAmount","_width","getElementWidth","_scrollWidth","_slide","computeIncrement","currentTranslateAmount","increment","translateAmount","absoluteCurrentTranslationAmount","ANIMATION_FRAME_STOPS","TitanJackpotAnimationComponent","lottieRef","animationCounter","getTitanJackpotIndex","_props$widgetConfig","jackpotIds","handleEnterFrame","currentFrame","titanJackpot","updateJackpotHandler","getCurrentJackpotId","onEventHandler","PlayerEvents","Frame","frame","lottie_json","titan_jackpot_json","TitanJackpotAmountBox","TitanJackpotAmountComponent","_services$titanJackpo","_props$widgetConfig2","getJackpotWidgetLayout","isJackpotHandlerReady","_props$widgetConfig$j","every","jkpId","TitanJackpotWidgetComponent","SwiperListBaseModel","listConfiguration","_swipeLogicHandler","apiListType","_getTitleTranslationParams","shouldInjectUsernameInTitle","ignoreNumberOfGamesInAISorting","_seeAllUrl","seeAllConfig","seeAll","useAISortedList","_getNumberOfGamesSkeletons","_reduceGameTypesForJackpotsItemTemplateInHomePage","forceInLayout","forceListInLayout","_isJackpotWidgetHost","_this$listConfigurati","_isRedTigerJackpotWidgetHost","_this$listConfigurati2","redTigerWidget","forceRoundIcons","_renderJackpotWidget","_renderRedTigerWidget","_renderTitanJackpotWidget","titanJackpotWidget","_renderHeaderIconAndText","_getTitleCssClasses","_renderSwiperButtons","titleIconClassName","_renderHeaderIcon","_renderHeaderText","EXCLUSIVES_LIST_ICON","ApiListBaseModel","_applyGameGroupFiltering","allowedGameGroups","_this$services$games$","RecentlyPlayedListModel","TopPicksComponent","TopPicksListModel","_this$services$aiEngi","_this$services$aiEngi2","AiNewGamesListComponent","NewGamesListModel","aiNewEngine","aiNewRecommendedGames","_this$services$aiNewE","_this$services$aiNewE2","PlayersLikeYouComponent","PlayersLikeYouListModel","_computeGameTypes","playersLikeYouGamesListTypeId","topCount","topNumber","StaticSwiperListModel","GamesGridBatchComponent","isResolved","_intersectionObserver","_intersectionObserverCallback","_destroyIntersectionObserver","_captureThresholdElement","_createIntersectionObserver","listTitleTranslationKey","_renderNextBatch","nextBatchGameTypes","propsForNextBatch","batchIndex","_renderCurrentBatch","batchIndexOffset","currentBatchGameTypes","GamesGridBox","NoGamesFoundMessageBox","GamesGridContainerBox","CGP_GAME_OPEN","GamesGridComponent","_renderNoGames","GamesGridListModel","gridConfig","_shouldSquareIconsBeUsed","lastPlayedGame","correlatedGamesForLastPlayedRealGame","correlatedGames","BecauseYouPlayedComponent","BecauseYouPlayedPlayedListModel","listenForLastPlayedRealGame","lastPlayedGames","becauseYouPlayed","currentBecauseYouPlayedGames","gInfo","LiveStreamingListTitleBox","LiveStreamingTitleIconBox","LiveStreamSwipeLogicHandler","_touchStartX","_swipeDirection","_touchDragThreshold","_swipeTransitionCss","_handleTouchStart","changedTouches","clientX","_handleTouchEnd","_handleTransitionEnd","firstElementChild","transition","_setIsNavigationAllowed","_currentGameIndex","allowed","overflow","moveOnVideoFinished","_reportSwipeToAnalytics","prepend","lastElementChild","requestAnimationFrame","setCurrentGameIndex","swipeToLeft","isAutoSwipe","nextGame","swipeFromGameId","swipeFromGameIndex","swipeToGameId","LiveStreamingNavigationCommonBox","VideoListNavigationPrevButtonDefaultBox","VideoListNavigationNextButtonDefaultBox","VideoCutCommonBox","VideoListLeftCutDefaultBox","VideoListRightCutDefaultBox","VideoListNavigationPrevButtonBox","VideoListNavigationNextButtonBox","VideoListLeftCutBox","VideoListRightCutBox","VideoListComponent","_onGameBringInCentralView","_getLastGameType","DefaultVideoListModel","_offsetStorageKey","_getGameTypesOffsetFromLocalStorage","storedValue","_cycleGamesAndIncrementOffset","baseArray","_gameTypesOffsets","newOffset","gTypes","lastGame","PrevIcon","NextIcon","dx","dy","LiveStreamingVideoListModel","_isLiveStreamDisabled","videoLiveStream","tablesData","gType","openTablesIds","StaticVideoListModel","_isStaticVideoListDisabled","staticVideoList","ListFactory","createSwiper","RECENTLY_PLAYED","TOP_PICKS","NEW_GAMES","PLAYERS_LIKE_YOU","LIVE_CASINO_VIDEO","STATIC_VIDEO","BECAUSE_YOU_PLAYED","createGrid","PromotionalBannerModel","_bannerConfig","_getBannerMinHeightInPixels","numberOfListsInCurrentArena","bannerMinHeight","VideoSlidesFilterItemPreviewFooterBox","VideoSlidesFilterItemPreviewFooterTextBox","VideoSlidesFilterItemPreviewBox","VideoSlidesFilterItemPreviewPlayerBox","VideoSlidesFilterItemPreviewComponent","_filtersMap$props$fil","_filtersMap$props$fil2","filtersMap","firstGameForFilter","navigateToFilter","VideoSlidesFilterListPreviewBox","VideoSlidesFilterListPreviewHeaderBox","VideoSlidesFilterListPreviewTitleBox","VideoSlidesFilterListPreviewContentBox","VideoSlidesFilterListPreviewComponent","btnOnClick","filterIdList","VideoSlidesFilterPreviewModel","_videoSlidesFilterConfig","_shouldRenderVideoSlidesFilter","hasHeaderButton","SwiperExtraContentModel","videoSlidesFilterConfig","_promotionalBanner","_videoSlidesFilter","renderExtraContent","ArenaBaseModel","_postLoginListsSortOrderStorage","_swiperExtraContentHandler","_listFactory","_getPromotionalBannerConfig","_getVideoSlidesFilterConfig","_updateAIEngineSwipersSortOrder","allLists","useAdvancedFilters","Filters","_isUsingExternalAIForSwipersSorting","_getSwiperIdToPutOnTop","_setAiEngineListsSortOrder","_aiEngineListsSortOrder","_getSwipersConfigurations","sw","_movePreferredSwiperOnTop","swipers","listsIdsToPutOnTop","reverse","listIndex","_sortSwipersByAI","originalSwipers","scores","notForcedInLayoutSortedSwipers","s1","s2","sortedSwipersConfigs","gameList","mappedGameList","_createAllLists","_sendGameListsAnalytics","allArenaGamesForFiltering","_getGridsConfigurations","filteredGamesCount","_appendGrids","_limitTheNumberOfSwipers","_saveSwipersPostLoginSortOrder","_sortSwipersByPostLoginOrder","_createSwipers","maxSwipersToShow","maxNumberOfSwipers","_renderListAndBanner","currentListPosition","saveSortOrder","sortLists","_createSwiper","_createGrid","isBottomNavbarEnabled","DailyDealContainerBox","glowRotateAnimation","DailyDealChestGlowBox","daily_deal","daily_deal_chest_glow_png","chestScaleAnimation","DailyDealChestBox","DailyDealTextStripBox","daily_deal_chest_text_strip_svg","DailyDealChestHaloBox","daily_deal_chest_halo_png","dailyDeal","dailyDealCampaignId","isBottomNavigationEnabled","visitDailyDeal","daily_deal_chest_png","DailyDealComponent","LayoutWrapperBox","HomePageHeaderArenasBox","HomePageHeaderArenasComponent","headerArenas","getHeaderArenasMenuItems","headerArenasStyle","menuItemRenderer","itemIndex","totalItemsCount","HomepageTopBannerBackgroundBox","top_banner_placeholder_gif","HomepageTopBannerDividerBox","LinkToOfferBoxBase","isHybridEmbedded","isBottomNavBarEnabled","hasCircle","linkToOfferIconKeyframes","LinkToOfferIconBox","shouldAnimate","LinkToOfferDialogCloseBox","_props$zIndex","_onCloseDialog","playerOfferings","hasOpenedPopup","closeCurrentPopup","_this$props$linkToOff","_this$props$linkToOff2","setWelcomeOfferConfig","linkToOfferConfig","welcomeBonus","CloseIconComponent","isHighPriorityOffer","getMaxCGPOverlayZIndex","currentOffer","currentLinkToOffer","_onLinkToOfferClicked","shouldUseLinkToOfferAnimation","offer","analyticsCategory","onPopupClosed","showOfferPopup","LinkToOfferComponent","HomePageComponent","_renderTopBanner","topBannerProps","getTopBannerProps","useAdminBanner","_renderHomePageArenaHeaders","_renderSeoBanner","seoSection","_renderLinkToOffer","linkToOffer","MOVE_TOP","headerArenasStyleIsBigTiles","GAME_ORIENTATION_IDS","ApplyGameFilterResult","OrGameFiltersEvaluator","_evaluators","applyFilter","NotApplicable","IncludeGame","OR","_len2","_key2","AndGameFiltersEvaluator","ExcludeGame","AND","FilterCategoryDefinitionBase","availableFilters","_loadAvailableFilters","hasItsOwnFiltersOrder","_getAppliedSubFiltersForFilter","appliedSubFilters","subFilters","appliedSubFilter","subFilter","sf","appliedFilters","filterEvaluators","appliedSubFiltersForCurrentFilter","isMultiSelect","GameFilterDefinitionBase","HighVolatilityFilterDefinition","LowVolatilityFilterDefinition","MediumVolatilityFilterDefinition","VolatilityFiltersCategoryDefinition","GameFeatureFilterDefinitionBase","_shouldIncludeGame","OneToTwentyFiveFilterDefinition","TwentyFivePlusFilterDefinition","NewGameFilterDefinition","LowStakeFilterDefinition","HighStakeFilterDefinition","BonusGameFilterDefinition","FreeSpinsFilterDefinition","HasSideBetsFilterDefinition","IsMultiHandFilterDefinition","GameFeaturesFiltersCategoryDefinition","HasDailyJackpotFilterDefinition","HasTwilightJackpotFilterDefinition","HasCaptain8JackpotFilterDefinition","HasRedTigerJackpotFilterDefinition","HasJackpotFilterDefinition","HasNoJackpotFilterDefinition","HasJackpotFiltersCategoryDefinition","VendorFilterDefinition","vendors","_text","_this$vendors","some","vendor","GameVendorFiltersCategoryDefinition","filters","advancedFilters","preferredVendorFilters","getAllPreferredVendorsFilters","gamesVendor","getVendor","V_888","brandName","exclusiveFilterBrandName","V_AGS","V_Amatic","V_Authentic","V_Ainsworth","V_Blueprint","V_Darwin","V_EGT","V_Elk","V_Evolution","V_Eyecon","V_GamesGlobal","V_GamingRealms","V_Gamomat","V_Greentube","V_H5","V_Habanero","V_IGT","V_Inspired","V_iSoftBet","V_LightningBox","V_LNW","V_LNW2","V_Merkur","V_MGA","V_NetEnt","V_NextGenBigTime","V_NextGenChanceInteractive","V_NoLimitCity","V_PlayNGo","V_PlayTech","V_Pragmatic","V_Quickspin","V_RedRake","V_RedTiger","V_RubyPlay","V_Sigma","V_Skywind","V_Spribe","V_Thunderkick","V_Wizard","V_WMG","V_Yggdrasil","V_Everi","V_PushGaming","V_Edict","V_Gamevy","V_Wazdan","V_Playson","V_Realistic","V_1x2","V_Spinomenal","V_Hacksaw","V_Stakelogic","V_NetGaming","V_PGSoft","V_Booming","V_Live5","V_Reevo","_getPreferredVendorFiltersForCurrentSkin","_this$services$config7","preferredVendorsFiltersIds","allPreferredVendorsFiltersMap","toDictionary","f","preferredVendorsIds","selectMany","_f$vendors","otherVendorsIds","allVendorsIds","GameGroupFilterDefinitionBase","gameGroupsIdsToFilterFor","BaccaratFilterDefinition","BlackjackFilterDefinition","CrapsFilterDefinition","KenoFilterDefinition","LiveEliteLungeFilterDefinition","LiveEliteLoungeOrExclusiveFilterDefinition","LiveGameFilterDefinitionBase","subgroupName","textToSearchInSubgroupName","LiveGameShowsFilterDefinition","PokerFilterDefinition","RouletteFilterDefinition","ScratchcardsFilterDefinition","SlotsFilterDefinition","OtherGameGroupFilterDefinition","gameTypesFilterDefinitions","categoriesInCurrentArena","LiveBaccaratFilterDefinition","LiveBlackjackFilterDefinition","LivePokerFilterDefinition","LiveRouletteFilterDefinition","ItalianTablesFilterDefinition","GameGroupFiltersCategoryDefinition","GameThemeFilterDefinition","_gameThemeDefinition","linkedThemeIds","_themeIds","themeId","GameThemeId","GameThemeFiltersCategoryDefinition","preferredThemeFilters","_getPreferredThemeFilters","gamesTheme","getGameThemeDefinition","Adventure","AncientCivilization","Wildlife","ClassicStyle","ClassicStyleModernized","Asian","Arabic","ComicsAndCartoons","DiamondsAndGems","Egyptian","FantasyAndFolklore","Fish","Fruit","GreekMythology","Irish","MoneyAndLeisure","MoviesAndMusic","Seasonal","SpaceAndSciFi","Crime","themesDictionary","FilterCategoryDefinitionFactory","_allCategories","createGameFeaturesCategoryDefinition","createVendorsCategoryDefinition","createGameGroupCategoryDefinition","createCategoryDefinition","categoryDefinitionId","getAllCategoryDefinitions","GamesFilterStrategyBase","_factory","_isInFilterAnalyticsReporting","_filtersCategories","addReaction","_filterGames","_reportApplyFiltersByDeepLink","currentFilters","beginFilterAnalyticsReporting","filtersCategories","_createFiltersCategories","isApplied","_createEvaluator","game","filterResult","allCategories","categoryDefinition","filterDefinition","subF","FilterCategoriesListContainerBox","FilterCategoryBox","FilterCategoryContentBox","FilterItemBox","FilterInputBox","FilterItemTitleBox","SubFiltersBox","FilterItemContainerBox","FilterCategoryItemComponent","_onFilterToggle","toggleFilter","_renderSubFilters","filterCategoryId","inputType","readOnly","isChecked","gamesCount","FilterCategoryContentComponent","_renderFilters","visibleFilters","filterToRender","FilterTitleContainerBox","FilterTitleBox","FilterPreviewBox","FilterCategoryHeaderComponent","onCategoryToggle","activeFiltersTexts","getVisibleAppliedFilters","FilterCategoryComponent","FilterCategoriesListComponent","openFilterCategory","_onCategoryToggle","openFilterCategoryState","filtersEditor","visibleCategories","_this$state$openFilte","AdvancedGamesFilterBox","AdvancedGamesFilterFooterBox","AdvancedGamesFilterHeaderBox","AdvancedGamesFilterButtonBox","AdvancedGamesFilterButtonSIBox","AdvancedGamesFilterButtonStyleBox","FilterByBox","FilterCategoriesListBox","AdvancedGamesFilterComponent","_onApply","back","_onCancel","closeFilters","_onClearAll","openFilters","numberOfGamesIfUserApply","numberOfSelectedFilters","getAppliedFiltersIds","cursor","AdvancedGamesFilterDrawerRenderer","isMinimized","minOverlayZIndex","supportsCloseIntent","isBlurBackground","onClose","onOverlayClicked","ArenaGameFilterEditor","arenaGameFilter","categoryEditor","_subFilters","_on","_setOn","_resetOtherFiltersInTheCategory","isAdhocFilter","ArenaGameSubFilterEditor","parent","ArenaGameFiltersCategoryEditor","arenaGameFilterCategory","_filters","_getAllAppliedFilters","AdvancedFiltersAnalytics","_getLocation","_sendEvent","filterEventData","actionData","reportOpenFilters","reportCloseFilters","reportClearFilters","reportApplyFiltersByDeepLink","reportApplyFiltersByButton","reportRemoveFilter","filterID","AdvancedStrategyFiltersEditor","strategy","analyticsReporter","_categories","_executeWithAnalyticsReporting","getApplyFilterReportingParameters","removeFilter","FiltersMobileButtonBox","FiltersMobileButtonComponent","_openPopup","shouldHideFiltersButtonMobile","IndicatorContainerBox","alignAppliedFiltersToCenter","AppliedFilterIndicatorBox","AppliedFiltersBox","RemoveFilterButtonBox","AppliedFilterNameBox","AppliedFilterContainerBox","AppliedFiltersIndicatorForAdvancedFilteringComponent","_onRemoveFilter","_renderOneAppliedFilter","_getAppliedFilters","_renderAppliedFilters","showFiltersButton","ArenaGameFiltersCategoryBase","_appliedFilters","_appliedSubFilters","selectedFiltersIDs","arenaFilter","isGameIncludedInThisCategory","allAppliedFiltersAndSubFilters","ArenaGameFilterBase","DynamicArenaGameFilter","f1","f2","DynamicArenaGameFiltersCategory","_createArenaGameFilter","_getAvailableFilters","uniqueGameTypes","AdvancedGamesFilterStrategy","_analyticsReporter","categories","filterCategoryDef","_createArenaGameFiltersCategory","_createFiltersEditor","appliedFiltersInCategory","gamesToShowIfUserApply","_filterGamesBeforeApplyClicked","currentArenaGames","HomePageArenaModel","postLoginListsSortOrderStorage","_currentRoute$routeDe","routeDefinition","resetNewAddedGames","renderArena","gameGroupOrientation","userGameOrientation","groupId","listOnTop","displayPlace","videoSlideFilterConfig","videoSlidesFilter","filterGamesByArenaType","gamesInfo","filtersConfigurationMap","ArenaPictureBox","ArenaTitleBox","ArenaDescriptionTextBox","lobbyInfoKeyframes","LobbyGameInfoBox","ArenaInfoPreviewComponent","arenaPictureLoading","arenaInfo","previewImage","description","PcGamePreviewTitleComponent","_onMouseEnter","pinCurrentGamePreview","_onMouseLeave","unPinCurrentGamePreview","GameInfoPreviewComponent","_services$configurati","_services$configurati2","enableGamePreview","disableGamePreview","enabledOnPC","currentPreviewedGame","_props$stickyHandler","_props$stickyHandler2","PcGameInfoPreviewComponent","SeoBreadcrumbsContainerBox","SeoBreadCrumbsComponent","ARENA_TYPES","CasinoArenaComponent","_stickyHandler","stickyHandlerFactory","createStickyHandler","getArenaConfig","sideBarInfo","infoSideBar","infoTitle","infoText","infoImage","topImage","animatedTopImage","arenaFiltersRenderingOptions","filtersConfigurationToMap","filtersConfiguration","FilterLinkIconBox","FilterLinkBox","FilterLinkComponent","_onFilterClick","CommonStyles","FiltersGamesListBox","FilterLinkListComponent","_toggleHandler","onToggle","_renderOneFilter","FiltersGamesMobilePopupBox","FiltersMobileButtonsBox","FiltersGamesListMobileComponent","_closePopup","_applyFilters","checkedFiltersIds","_clearFilters","_onToggleFilter","_renderPopupButtons","SimpleStrategyFiltersEditor","_sortFilters","filtersConfigurations","_filtersConfiguration","_filtersConfiguration2","OtherFilterDefinition","allOthersCategories","currentArenaCategories","OtherFiltersCategoryDefinition","otherAvailableCategories","StaticArenaGameFilter","StaticArenaGameFiltersCategory","_createFiltersForCurrentArena","currentArenaFiltersConfigurations","FiltersGameListPcBox","FiltersGamesListPcComponent","_toggleFilter","AdhocArenaGameFilter","CompanyFilterDefinitions","_companyName","removeSpaces","AdhocArenaGamesFiltersCategory","_createDynamicFilters","appliedFilterId","dynamicFilterDefinition","_createDynamicFilterById","_vendorsCategory$getA","parts","SimpleGamesFilterStrategy","_vendorCategory","Lazy","_groupCategory","_featuresCategory","_othersCategory","_adhocCategory","applyMaxHeight","CasinoLobbyArenaModel","displayListPlace","videoSlidesFilterPreview","advancedFilterIdList","VoidArenaModel","POST_LOGIN_LISTS_ORDER_KEY","ListsSortOrderStorage","_listsSavedOrder","_createEmptyListsOrder","_getSavedListsOrder","listsOrder","arenaListsOrder","listsOrderMap","l1","l2","LiveCasinoFilterButtonLabelBox","LiveCasinoArenaNavbarButtonBox","LiveCasinoArenaNavbarButton","buttonIconMap","Map","_getButtonIcon","_getLabelTranslationKey","currentTranslationKey","onFilterClicked","NewLiveCasinoArenaComponent","_topImageRef","_this$_topImageRef","isNavbarVisible","liveArenaTabsConfiguration","NewLiveCasinoArenaModel","NewLiveCasinoArenaAbModel","aiSortingGamesMap","BottomNavigationBarContainerBox","shouldElevate","BottomNavigationBarMenuItemsListBox","getMenuItems","_renderMenuItem","BottomNavigationBarMenuItemsListComponent","BottomNavigationBarMenuItemsContainerBox","spacerBoxRef","isInVideoSlidesArena","captureBottomNavbarBox","setBottomNavBarRef","spacerHeight","isSpinning","BottomNavigationBarComponent","VideoSlidesArenaBox","VideoSlidesArenaHeaderBox","VideoSlidesArenaFiltersIndicatorBox","VideoSlideFilterButtonBox","VideoSlideFilterButtonIconBox","VideoSlidesHeaderFilterButtonComponent","filterButtonRef","videoSlidesFilterEditor","_filterButtonRef$curr","scrollIntoView","behavior","block","inline","renderIcon","textTranslationKey","VideoSlidesArenaFiltersIndicator","videoSlidesFilters","filterConfig","renderSingleFilter","VideoSlideRegulatoryDataBox","VideoSlidesUserMenuButtonBox","VideoSlidesArenaRegulatoryDataBox","LicenseStatusBox","LicenseTextLinkBox","VideoSlidesLicensePopupContentComponent","replaceWithReactElement","reactElements","elArrIndex","part","openGamblingCommissionLink","VideoSlidesHeaderArena","_showLicenseStatusDialog","renderLicenseStatus","videoSlidesArenaHeaderConfiguration","videoSlidesArena","licenseStatus","renderMinimumGamblingAge","minimumGamblingAge","renderHeaderWelcomeButtonsForAuthorizedUserMobile","SparkSwiperBox","SparkSwiperSlideBox","SparkSwiperSlideComponent","swiperController","slideController","touchMoveDelta","animationStarted","deltaSign","sign","computeTranslate","indexOffset","percentage","isActiveSlide","maxItemIndex","itemIndexOffset","onTransitionEnd","renderSlideContent","SparkSwiperComponent","swiperElementRef","touchStartY","setTouchMoveDelta","setAnimationStarted","onTransitionEndHandler","fireExplorerSwipeEvent","onTouchMoveHandler","deltaY","touches","clientY","passive","onTouchStart","sparkSwiperSwipeAnimation","isAnimatedSwipingInProgress","stopAnimatedSwiping","onTouchEnd","slides","VideoSlidesOnboardingOverlayBox","SwipingUserTipBox","VideoSlidesTipTextBox","VideoSlidesOnboardingComponent","touchEndY","dismiss","onBoardingWasShown","onDismiss","explore_swipe_gesture_lottie","VideoSlidesArenaSwiperBox","VideoSlidesArenaSwiperComponent","showOnBoarding","setShowOnBoarding","dismissOnBoarding","startAnimatedSwiping","VideoSlidesArena","goHome","WelcomeUserBox","WelcomeGreetingBox","WelcomeUser","IndicatorBox","IndicatorIconBox","IndicatorBadgeBox","IndicatorTextBox","IndicatorIconWrapperBox","ProfileBoxMessagesIndicator","indicatorIsActive","indicatorActive","displayLayout","numberOfMessagesIsDefinedAndGreaterThanZero","numberOfAwaitingMessages","hasAwaitingMessages","openOmgAwaitingMessages","OmgIndicator","FreePlayIndicatorComponent","openRewards","LoyaltyBar","showLoyaltyConfig","showLoyalty","noVerticalPadding","noHorizontalPadding","UserInfo","shownData","selectedUserInfo","useSpanWrapper","UserInfoLabelBox","UserMenuNameBox","UserMenuSupportIdBox","UserDetails","showUserTitle","showFirstName","showLastName","welcomeMessage","avatarUrl","_renderUserInfo","infoType","launchMyAccount","translator","userGenderTitle","_renderUserTitle","UsefulLinks","BonusAndCashBalanceBox","BalanceInnerBox","BalanceLabelInnerBox","BalanceValueBonusAndCashBox","BonusAndCashBalance","CASH","BONUS","BalanceButtonsGroupBox","UserBalanceButtons","launchDeposit","launchWithdraw","UserMenuBalanceLabelBox","BalanceValuePrimaryBox","UserBalance","userMenuItems","UserMenuItemsContainerComponent","MiniControlCenterBox","iApplication","appLoadingInProgress","cancelLoadingApp","closeControlCenterReason","controlCenterBoxClickHandler","ControlCenterCloseSource","MiniSafeZone","controlCenter","loadControlCenterMini","disposeApplication","ClientPage","openControlCenterMini","finally","CONTROL_CENTER_MINI_CONTAINER_ID","MiniControlCenterComponent","UserMenuScrollWrapperBox","ProfileMessagesBox","UserMenuFakeIOSPaddingBox","LogOutLinkBox","UserMenuLogout","doLogout","UserMenuAppVersionBox","clientVersion","UserMenuFooter","SaveGamesWidgetBox","SaveGamesWidgetGamesContainerBox","SaveGamesWidgetGamesTitleBox","SaveGamesWidgetHeaderBox","SavedGamesIcon","saveWidgetRef","SaveGamesWidgetHeaderComponent","SaveGamesWidgetComponent","_onGameClick","saveGamesWidget","gi","UserMenuMobile","UserMenuClosePCButtonBox","UserMenuCloseIconBox","UserMenuHeaderBox","UserMenuPc","_renderUserMenuHeader","MobileMenuHeaderBox","MobileBackBox","MobileBackLabelBox","UserMenuRootBox","UserMenuWrapperBox","UserMenuHolderBox","holderRef","_closeMenu","scrollTop","_renderMobileBackButton","USER_MENU_OPEN","_renderMenuContents","isRewardsInfo","UserMenu","DrawerBodyBox","DRAWER_WIDTH","DrawerContentBox","SpinnerBox","isMigrationSpinner","SpinnerBrandBox","spinnerAnimationKeyframes","SpinnerBackgroundDefaultBox","SpinnerBackgroundCasino777Box","SpinnerBackgroundCIPBox","SpinnerBackgroundCISBox","SpinnerBackgroundMrGreenBox","SpinnerBackgroundBox","DrawerSpinnerComponent","rightDrawer","renderContent","lastVisibleDrawerItemIndex","getLastVisibleDrawerItemIndex","isSpinnerVisible","currentContent","ReactDOM","renderDrawer","getOverlayZIndex","hasBlurBackground","RightDrawerComponent","VideoSlidesArenaModel","allGamesInArena","ArenasService","_arenas","_loadArenas","_createArena","arenasConfigs","_currentRoute$data","arenasWithoutFilterButton","LanguageSwitcherItem","isCurrent","makeCurrent","_executeOnClickJs","_createCookie","sendFunnelParameters","appendSCutToUrl","openSelf","createDomainCookie","onClickJs","Function","func","LanguageSwitcherSection","_title","_fallbackTitleKey","_items","SelectedLanguageSwitcherItem","LanguageService","_defaultLanguageData","_lastUrlWithoutTheFragmentQueriedForLanguageSwitcher","_loadLanguageData","fireReactionImmediately","_isLanguageSwitcherEnabled","_setLanguageSwitcher","languageSwitcher","uri","_updateLanguageSwitcher","getElementsByTagName","contains","currentLanguageIso2","_getDefaultTexts","textOverrides","_setTranslatedTexts","_extractLanguageSwitcherFromConfig","langSwitcherConfig","languagesSection","_extractLangSwitcherSection","languages","languageSettings","countriesSection","countries","countrySettings","itemsConfig","sectionConfig","fallbackTitleKey","cfg","cmsApi","getLanguageSwitcherConfiguration","langSwitcher","_getLanguageSwitcherConfigForTestEnvironments","_getLanguageSwitcherConfigForHybridEmbedded","StickyHandler","_onScrollSubscription","_onHeaderHeightReactionDisposer","_scrollTopMinValue","_elementRef","onWindowScroll","_setIsSticky","topElementPosition","scrollY","scroll","_isSticky","StickyHandlerFactoryService","GameRouteHandlerService","_onGameOpenSubscription","_onGameCloseSubscription","_currentUriAndGamesMapReaction","_shouldSkipNextCloseGameRedirect","_previousUri","_isOpenGameFromUrlInProgress","_subscribeToGameEvents","_subscribeToUriAndGamesMapChanges","isFirstSubscription","_isOpenGameUri","_tryOpenGameFromUrl","_gameRunner$currentRu","_unsubscribeFromUriAndGamesMapChanges","_onGameOpen","_onGameClose","_unsubscribeFromGameEvents","_getOpenGameFragment","eventParams","urlToGoBack","_setLastAttemptToOpenGameFromUrl","lastAttemptToOpenGameFromUrl","fragmentParts","redirectToHistory","openGamingHistoryPage","LauncherOverridesReader","_storage","_getLauncherOverrides","cgp_client","LAUNCHER_DATA_STORAGE_KEY","clientData","_getOrbitSpecificConfigOverrides","orbitSpecificOverrides","LauncherService","launcherOverridesReader","getCMSOrigin","addedGameTypesFromSdm","getSegmentsOverride","SpinnerService","_this$_activeSpinner","_activeSpinner","startTime","isTheRegularSpinnerActive","activeSpinnerType","isTheMigrationSpinnerActive","_this$_activeSpinner2","spinnerType","startSpinner","stopSpinner","performanceNow","CrossBrandsService","specificNavigationInfo","_extractSpecificNavigationFromCurrentUrl","crossBrandSpecificNavigationInfo","_onTokenLifetimeExpired","crossBrandNavigationInfo","crossBackSpecificNavigation","callbackMethod","callbackUrl","isCrossFromOtherBrand","isCrossFromPoker","isCrossFromSport","specificNavigationParamValue","specificNavigationXml","_","parseXml","xmlElement","textContent","MiniOrbitPageComponent","MiniOrbitHomePageComponent","MiniOrbitArenaHostComponent","GamingHistoryComponent","GamesOpenSessionsPageComponent","RichPageComponent","MINI_ORBIT_ROUTING_DEFINITION","exact","cssSelectors","SLOTS_PAGE","NEW_GAMES_PAGE","VIDEO_POKER_PAGE","PROGRESSIVE_VIDEO_SLOTS_PAGE","CASINO_GAMES_PAGE","JACKPOTS_PAGE","historyType","UserHistory","redirectHomeIfUnauthorized","showMoreDetails","SessionHistory","CHALLENGE_PAGE","ArenaHostComponent","CmsPageComponent","GamingHistoryPageComponent","TippingHistoryPageComponent","RoutingConfigurationService","getRoutingConfiguration","fallbackRoute","routes","ROULETTE_PAGE","VIRTUAL_SPORTS_PAGE","BLACKJACK_PAGE","INSTANT_WIN_GAMES_PAGE","showMoreDetailsLink","preventNotifications","SCRATCH_CARDS_PAGE","EXCLUSIVE_888_GAMES_PAGE","standalone","OrbitRoute","RouteBase","_isOrbitRoute","RoutingService","_currentPathName","_updateCurrentRoute","_this$currentRoute","featureData","getFeature","abChangeRoute","routeChangeData","Properties","routeschange","_doRedirect","_this$_currentPathNam","equals","routingConfiguration","tryMatchPath","_removeCurrentRouteCssSelectors","_overrideArenaType","routeParams","_addCurrentRouteCssSelectors","FallbackRoute","fallbackRouteRender","routesToArenaTypesMapping","arenasRoutingOverride","_getCurrentRouteCssSelectors","selector","_this$currentRoute2","_this$currentRoute2$r","isOrbitRoute","_cleanUpOldAbTestData","_routeDefinition$path","_routeDefinition$path2","currentPathName","OverlayService","disableScrolling","enableScrolling","registerConsumer","consumer","_overlayConsumers","unsubscribe","zIndexes","needsOverlay","countCurrentConsumers","predicate","count","closeOverlay","TimeService","_formatToRegulationOffset","_lastLoginFormattedText","isUtc","DateFormatter","_getRegulationDateTimeFormat","getDateTimeHistoryFormat","getDateFormat","dateTimeHistory","formatHistoryRecordDateTime","callBack","AiNewGamesEngineService","_isAINewRecommendedGamesUpdateInProgress","_aiNewRecommendedGamesData","_updateAiNewRecommendedGames","_setAiNewRecommendedGames","_sendAINewRecommendationAnalytics","ThemeService","themeDefinition","defaultBoxes","_boxes","_setCurrentTheme","SDK_CSS_OVERRIDE","_currentThemeDefinition","_this$_currentThemeDe","popupsTheme","toastersTheme","useSquareIconsForGames","createThemeCustomizer","renderGlobalStyles","globalStyles","VoidCommunicationAdapter","openUrlInExternalBrowser","onUserKicked","onSiteLoaded","onAutologinSuccess","onAutologinFailed","openControlCenter","reject","MiniOrbitFreePlayDetails","MiniOrbitService","_communicationAdapter","_onKickUserCount","_currentMiniOrbitConfig","openFreePlays","_extractCurrentMiniOrbitConfig","splash","onSplashRemoved","_reportAutologinResult","enableBasePathOverride","miniOrbitCommunicationAdapterFactory","createAdapter","LOGOUT_REASONS","CLIENT_SIDE_LOGOUT","currentLocationBasePath","miniOrbitConfigSection","basePaths","miniOrbitConfig","currentMiniOrbitConfig","isCip","getCurrentMiniOrbitArenaConfig","_this$currentMiniOrbi","miniOrbitArenas","arenasHeaderButtons","DialogConsumerContentBox","DialogOverlayDefaultBox","isHidden","transparentBackgroundOpacity","DialogOverlayMrGreenBox","DialogOverlayBox","showDialogKeyframes","closeDialogKeyFrames","showDialogAnimation","closeDialogAnimation","applyBorders","modalDialogBorder","DialogOverlayContentBox","DialogIconWrapperBox","ModalDialogComponent","_onCloseButtonClickHandler","overlayClasses","MODAL_DIALOG","dialogOptions","forceTransparentBackground","showOpenAndCloseAnimation","forceFullscreenTablet","additionalHeaderClass","headerClass","headerClasses","contentClasses","hideBorders","forceTransparentContentBackground","shouldApplyClosingAnimation","dialogHeaderComponent","hideDialogHeader","renderExtraHeaderButtons","DialogIcon","useAutoHeight","noPadding","SimpleMessageDialogBox","SimpleMessageDialogSingleLineContentBox","SimpleMessageDialogButtonsContainerBox","SimpleMessageDialogButtonBox","buttonWidthProportionOnPC","SimpleMessageButtonComponent","buttonOptions","numberOfButtons","SimpleMessageDialogIconContainerBox","SimpleMessageDialogMultiLineContentBox","SimpleMessageDialogComponent","_renderText","line","DialogService","_onDialogCloseHook","closedHandler","_setCurrentOpenModalDialogs","_currentOpenModalDialogs","gameCommunicationChannel","resumeGamePlay","_setCloseAllDialogsHook","lastTimeDeepLinkWasExecuted","closeAllDialogs","hasOpenDialogs","_disableScroll","_enableScroll","newDialogs","currentDialogs","dialogComponent","CGP_OVERLAY_OPEN","_getNextZIndex","forceZOrder","countDialogs","includeHidden","_options2","_options3","modalZIndex","ModalDialogHandler","executeDialogShow","_options4","showPopupAboveSecondWebViewHybrid","gameFrameZIndex","executeAnimationCompleteAction","stopAutoplay","getCurrentMaxZIndex","dlg","_class3","_onCloseHook","_options","_isClosed","_applyCallbackAndCloseDialog","isClosedWithXButton","_this$_options5","_this$_options","_this$_options2","debugInfo","_this$_options3","_this$_options4","createAsHidden","_zIndex","onDisplay","onHide","namedSetTimeout","PWAManifestService","_orbitExtraProperties","_isPwaEnabled","pwaEnabled","pwaResources","manifestUrl","_setManifestHrefInHead","_initIOS","_addManifestIOSIconsInHead","_loadManifestJSON","manifestJson","iconInfo","_addLinkTagToHead","rel","linkDOM","sizes","head","http","linkTag","POKER_COMMUNCATION_OBJECT_NAME","PokerCommunicationAdapter","_this$_pokerCommunica","_pokerCommunicationObject","adapter","_this$_pokerCommunica2","_this$_pokerCommunica3","_pokerSupportsSoftLogin","kickUser","_this$_pokerCommunica4","_this$_pokerCommunica5","_this$_pokerCommunica6","_this$_pokerCommunica7","_this$_pokerCommunica8","performUCAction","_this$_pokerCommunica9","performUCActionData","actionID","ActionID","deposit","launchInfo","correlationID","SPORT_COMMUNCATION_OBJECT_NAME","SportCommunicationAdapter","_showCasinoNavbar","_this$_sportCommunica","_sportCommunicationObject","showCasinoNavbar","_this$_sportCommunica2","openExternalLink","_this$_sportCommunica3","_this$_sportCommunica4","isThereRunningApps","cleanUp","onUserKickedSuccessCallback","onUserKickedErrorCallback","MiniOrbitCommunicationAdapterFactoryService","LiveTableTabConfiguration","keyResolver","args","_memoize","SUB_GAME_GROUP","LiveTableFeedsService","_liveTableUpdateSubscription","_isNavbarVisible","_getLiveCasinoGameRecommendationsForPlayer","memoize","getLiveCasinoGameRecommendationsForPlayer","engineType","_previousOpenTablesIds","_onLiveFeedsUpdate","_tablesData","_manipulateFeedData","_stop","updateAiRecommendedLiveGames","liveArenaConfig","headerConfig","grid","isNull","_this$liveArenaTabsCo2","_this$liveArenaTabsCo3","currentAppliedFilter","_getCurrentAppliedFilter","_this$liveArenaTabsCo","tab","_tab$headerConfigurat","_tab$headerConfigurat2","_setLiveCasinoRecommendedGames","_liveCasinoRecommendedGames","currentOpenTablesIds","tableData","arraysEqual","GameTypes","Engine","_start","_updateOpenTimeToLocal","_convertTimeToLocalTimeZone","_verifyRouletteLastNumbers","rouletteLastNumbers","rouletteLast5NumbersConverted","evoLiveFeedResponseTime","computeSplashTimeInSeconds","timeUTC","toLocalTime","_this$_liveCasinoReco","filteredGameIds","gameID","liveGames","numberOfSortingExemptGames","_shouldSortGames","_this$_liveCasinoReco2","sortingOptions","maxGamesToShow","moveGamesThatOpenSoonToTheEnd","_this$_liveCasinoReco3","abTestingAiSortGamesLists","arenaHasAiSorting","_isGameOpenSoon","timeToOpen","gamesID","closeGamesArr","currentGame","getIsLiveSlotGroup","subGameGroup","LIVE_SLOT","abTestingFeatureIsValid","featureObject","featureProperties","getAbFeaturePropertyValue","FeatureToggleModel","abFeatureName","getFeatureToggleStatus","getCurrentAbStrategy","currentAbStrategy","getFeatureABData","_getAbFeatureToggleValue","_this$options","isFeatureEnabledByAB","featureTogglePropertyName","_getAbFeatureProperty","isAbEnabled","_this$options2","toggleStatus","getFeatureToggleStatusPerRegulation","Disabled","Enabled","EnabledByAB","FeatureToggleModelLazy","VoidAbTestingStrategy","anonymousPlayerId","featureName","waitForLoadTestData","AB_TESTING_DATA_FOR_AUTHORIZED_USER_STORAGE_KEY","AB_TESTING_ANONYMOUS_PLAYER_ID_STORAGE_KEY","EmptyAbTestData","ErrorDescription","Features","AnonymousPlayerId","AbTestingBaseStrategy","_readAuthorizedTestDataFromLocalStorage","_this$services$localS","_findFeature","testData","AbTestingForAuthorizedUserStrategy","_testData","_readTestData","testDataJson","_parseTestDataJson","json","_testData$Features","AbTestingForAnonymousUserStrategy","_storedAuthorizedTestData","_loadAnonymousTestDataPromise","_anonymousTestData","_loadAnonymousTestData","isAnonymousPlayerSupportEnabled","request","brandId","subBrandId","aBTestingController","getTestsForAnonymousPlayer","_response$Features","AbTestingFeatureDataProviderService","_depositWidget","_createFeatureToggleLazy","AppLauncher","apps","PAYMENTS_DEPOSIT","featureToggle","_cashOutWidget","PAYMENTS_CASHOUT","_transactionHistoryWidget","PAYMENTS_PLAYER_TRANSACTIONS_HISTORY","_registrationWidget","FUNNEL_REGISTRATION","_controlCenter","RG_CONTROL_CENTER_FULL","isAbFeaturePropertyValueTrue","featureToggleForRegulation","_onboardingTour","_videoLiveStream","_staticVideoList","_videoSlides","VideoSlides","_freeToPlayFlow","_mobileHeaderSearchButton","_webappBottomNavigation","webAppFeatureToggle","_addInGameFunds","enableAddInGameFunds","_jackpotBet","_staticLiveArena","_currentAbTestingStrategy","_getFeatureToggleAsync","featureToggleLazy","_createFeatureToggle","getToggleStatus","depositWidget","cashoutWidget","transactionHistoryWidget","registrationWidgetAsync","mobileHeaderSearchButton","webappBottomNavigation","addInGameFunds","aiSortGamesLists","aiSortGamesListsFeatureData","abTestingPlayersLikeYouGamesListTypeIdAIData","_abTestingPlayersLike","_abTestingPlayersLike2","_abTestingPlayersLike3","listid","searchGameSuggestionByAI","abTestingSearchGameSuggestionByAI","_abTestingSearchGameS","_abTestingSearchGameS2","aitype","abTestingListOnTopData","_abTestingListOnTopDa","splidedList","ControlCenterService","WalletProxyService","plainNumberBankroll","cashBankroll","bonusBankroll","subscribe","fetchAllData","setBankroll","bType","loginPopup","showLoginGamePopupOnAuthStateChange","bankrollType","_getData","NaN","computeGameMaxLimit","HomepageHeaderArenasMenuItemConfigReader","menuItemsOverride","HomePageHeaderArenas","HomepageHeaderArenaBadgeDefaultBox","headerArenasStyleIsMenu","indicatorBadge","backgroundInGridLayout","HomepageHeaderArenaBadgeSIBox","HomepageHeaderArenaBadgeMrGreenBox","HomepageHeaderArenaBadgeBox","HomepageHeaderArenaMenuItemDefaultBox","HomepageHeaderArenaMenuItemMrGreenBox","HomepageHeaderArenaMenuItemBox","HomepageHeaderArenaMenuItemIconDefaultBox","HomepageHeaderArenaMenuItemIconBox","HomepageHeaderArenaMenuItemNameDefaultBox","HomepageHeaderArenaMenuItemNameBox","HomepageHeaderArenaTileDefaultBox","useSmallHeaderArenas","arena_shaddow_png","HomepageHeaderArenaTileSIBox","HomepageHeaderArenaTileCasino777Box","HomepageHeaderArenaTileCasino888Box","HomepageHeaderArenaTileWsopBox","HomepageHeaderArenaTileBox","HomepageHeaderArenaSkeletonDefaultBox","tilesSize","BigTiles","HomepageHeaderArenaSkeletonSIBox","HomepageHeaderArenaSkeletonCasino888Box","HomepageHeaderArenaSkeletonBox","HomePageHeaderArenaRatioImageWrapperDefaultBox","HomePageHeaderArenaRatioImageWrapperCasino888Box","HomePageHeaderArenaRatioImageWrapperBox","HomePageHeaderArenaTileComponent","aspectRatioSizes","_handleDoneLoading","SmallTiles","HomepageHeaderArenaNameDefaultBox","HomepageHeaderArenaNameSIBox","brandPrimaryContrast","brandSecondaryContrast","HomepageHeaderArenaNameBox","HomepageHeaderArenaLinkBox","_props$menuItem$getLi","menuButtonIconMap","_getSeo","dynamic","seoConfig","handleLinkClick","newGamesIndication","newAddedGames","iconKey","has","homePageArenaDefaultPlaceHolder","HomePageHeaderArenaMenuItemComponent","GenericHomepageHeaderArenaMenuItemRenderer","ARENA_IDS","USER_GROUP_TO_HEADER_ARENAS_MAPPING","JACKPOTS","EXCLUSIVE888","GAME_SHOWS","CASINO_GAMES","LIVE_BLACKJACK","LIVE_ROULETTE","CASINO_SKILL","CASINO_SOFT","SCRATCH_CARDS","CASINO_MIXT","HomepageService","_menuItemConfigReader","_setHeaderArenas","headerArenasOrder","group","_orderHeaderArenas","_updateNewAddedGames","_setNewAddedGames","_newAddedGames","newGamesCount","arenasNames","selfUpdatedByNewestGamesList","seenGames","_getNewAddedGamesFromLocalStorage","newGames","_resetNewAddedGames","_setNewAddedGamesFromLocalStorage","_getNewAddedGamesLocalStorageKey","useMiniTopBanner","topBanner","miniTopBannerComponentID","bannerAdminIDFromConfig","preferredStyle","Menu","_getMiniBannerComponentID","topBannerConfig","_getMenuItem","customMenuItem","getHomepageHeaderArenaMenuItem","SessionCooldownPopupBox","SessionCooldownPopupTextBox","SessionCooldownPopupTimerBox","SessionCooldownPopupTimerRemainingBox","SessionCooldownPopupComponent","remainingTime","getRemainingTime","prependZero","padStart","COOL_DOWN_EXPIRATION_DATE_STORAGE_KEY","SessionCooldownService","_sessionCoolDownConfig","getSessionCooldownConfig","_realityCheckOpenedEventHandler","_realityCheckClosedEventHandler","_countDownTimerRef","featureEnabled","_onUserLogin","_onUserLogout","coolDownExpirationDate","storedExpirationDate","isInCoolDown","_showCoolDownDialog","cooldownTime","_closeCoolDownDialog","_setCoolDownRestriction","_this$_realityCheckCl","_this$_realityCheckOp","restrictionsController","setCoolDownRestriction","CoolDownTimeInSeconds","_updateRemainingTime","_startCountDownTimer","_preventCoolDownByPass","_stopCountDownTimer","getElementsByClassName","MediaQueryListener","media","onChangeConstructorParam","mediaQueryList","matchMedia","onChangeEventListener","onchange","removeListener","mQueryEventData","dataWillChange","isMatched","matches","MediaQueryService","mediaQueryListeners","updateLastMediaChange","ToolsService","uuidv4","isGuid","testedValue","strValue","charCodeAt","GAME_GROUP_COOKIE","UserGameOrientationService","_updateUserGameOrientation","_setUserOrientation","userGameOrientationEnableConfig","User","enableUserGameOrientation","gameGroupCookie","gameOrientation","getUserGameOrientation","_setGameOrientationCookie","setDate","getDate","ApiControllerBase","_getRoutePrefix","_buildApiRoute","route","_isUSRegulation","isUSRegulation","_httpPost","_httpGet","BonusManagerController","getEligiblePromotionCodes","FeatureToggleManagementController","setFeatureCounter","getFeaturesDataForCID","GamblingSessionController","startGamblingSession","clientRequest","createGamblingSession","ABTestingController","InsightController","req","LocationController","getCountryByIP","getCountryByIPOld","detectUserIp","detectUserIpV2","NetPositionController","initializeNetPositionForGameType","OMGController","getAwaitingMessages","OpenSessionsController","RestrictionRulerController","getRestrictionActions","notifyRestrictionActionPerformed","RestrictionsController","getAnonymousRestrictions","ThirdPartyFreePlayController","getAllVouchers","UserEligibilityController","depositWidgetEligibility","cashoutWidgetEligibility","transactionHistoryWidgetEligibility","GameController","getGameToken","openGameHistory","getGameSessionData","increaseGameSessionLimit","HistoryController","getHistory","getMigratedHistory","getTippingHistory","getGameSessionHistory","UserController","getRealityCheckData","updateRealityCheckReminder","validateGeoLocation","initGeoRetry","getPlayerLimits","getPendingActions","getLastBetActivity","ApiService","bonusManagerController","featureToggleManagementController","gamblingSessionController","locationController","netPositionController","oMGController","restrictionRulerController","thirdPartyFreePlayController","userEligibilityController","historyController","TsrWithDropdownDefaultBox","TsrWithDropdownBox","TsrWithDropdownOptionSelectorBox","TsrWithDropdownMainTextDefaultBox","TsrWithDropdownMainTextCasino777Box","TsrWithDropdownMainTextBox","TsrWithDropdownSelectorContainerBox","UK_TSR_OPTIONS","TRACKING_UK_TSR_OPTION_NAMES","UK_TSR_RESUME_GAME_OPT","UK_TSR_CONTINUE_OPT","UK_TSR_STOP_REMINDERS_OPT","UK_TSR_REVIEW_REMINDERS_OPT","UK_TSR_HISTORY_OPT","UK_TSR_CLOSE_GAME_OPT","UK_TSR_LOGOUT_OPT","TSR_OPTIONS_BY_TYPE","SESSION_TIMER","GAME_TIMER","TimeSpentReminderWithDropdownComponent","_businessCorrelationId","_renderLoggedInText","playingTimeWithoutUnits","playingTime","_renderSelectorContainer","_renderSelect","_executeAction","_updateSelection","timerType","tsrOption","selection","_actionAlreadyTriggered","closeCurrentGame","_sendActionDataTracking","_closeDialogBox","gameRouteHandler","_onReviewReminders","_onStopFurtherReminders","Lobby","onStopReminders","_sendActionDataToElastic","messageActionTaken","actionType","CGPEventCategory","CGPEventAction","setTarget","messageDisplay","displayMessageID","displayMessageName","GeoPermissionsPopupComponent","_onOkPressed","onOkPressed","headerText1","headerText2","TsrWithBalanceBox","TimeSpentReminderWithBalanceComponent","_executeContinueButtonAction","_executeCloseGameButtonAction","_getFormattedSessionBalance","balanceAbsoluteValue","totalNetLoss","_getFormattedPlayingTime","_getSessionBalanceText","_renderWageredAmount","amountWagered","_renderSubtitle","subtitle","_renderTotalSessionBalance","isInGame","TempAccountPopupBox","TempAccountDaysLeftNumberBox","TempAccountDaysLeftTextBox","_renderDaysLeft","daysLeft","_buttonCallBack","DOCUMENT_UPLOAD","openUploadDocumentFromMyAccount","_getButtonText","bodyText","footerText","TempAccountPopupComponent","InitBiometricFooterSectionBox","InitBiometricDialogBox","InitBiometricSectionBox","HelpOptionBox","InitBiometricDialogComponent","isHelpOptionVisible","setHelpOptionVisible","getTouchIDFeaturer","getTokenFromSrv","LoginToastBox","StandardToastTitleBox","StandardToastMessageBox","LoginToastResponsibleGamingLinkBox","StandardToastImageBox","LoginToastComponent","DefaultIcon","contentText","OrbitComponentToSdkAdapterService","renderGermanyResponsibleGamingButtons","_renderComponent","showLocationPopup","stateOfResidenceIdentifier","displayStateSelectorPopup","showGeoPermissionPopup","TouchID","onMessageClosed","_getTimeSpentReminderDialogOptions","showTempAccountPopup","showTimeSpentReminderWithDropdown","showTimeSpentReminderWithBalance","showIntrusiveMessagePopup","businessCorrelationId","correlationId","buttonText","showDefaultKickPopup","popupTextKey","showDisconnectPopup","_setCurrentRenderedComponents","currentRenderedComponents","_unmountComponent","unmount","showInitBiometricDialog","showLoginMessageToast","toastConfig","showCustomToast","onToastClosed","MessageBrokerLogger","optionalParams","warn","_len3","_key3","_len4","_key4","table","_len5","_key5","_len6","_key6","MessageBrokerService","channels","MessageBroker","identity","topics","loginSuccess","publish","logoutSuccess","ActionHandlerBase","OpenBankingActionHandler","handle","openBakingSpecificParams","openAppRequest","OpenBanking","geoInfo","appInitRequest","applicationContext","productPackageToID","ProductPackageToID","deviceInfo","messageBrokerChannels","messageBroker","_payload$launchInfo","sourceAppID","UploadDocumentsFromCashierActionHandler","UploadDocuments","FULL_CASHIER_MOBILE","FULL_CASHIER_PC","OpenDepositActionHandler","OpenWithdrawActionHandler","openWithdraw","OpenLinkActionHandler","_actionData$url","openExternally","OpenChatActionHandler","openApp","CRChat","OpenLinkWithFormPostActionHandler","_performFormPost","platformToken","_shouldOpenInSameWindow","_actionData$relatedAc","_actionData$registrat","_getSpecificActionData","formPostExtraParams","relatedAccountCid","registrationCategory","formSubmitParams","method","extraParams","submitForm","_getAppIdentifier","_getProductPackageId","OpenEmailActionHandler","OpenEmail","OPEN_EMAIL","OpenControlCenterFullActionHandler","ControlCenterFull","Main","OpenClientPageActionHandler","clientPageType","ClientPageType","rgPolicy","onlineHelp","LogoutActionHandler","OpenHelpCenterActionHandler","LoginActionHandler","RegistrationActionHandler","_payload$launchInfo2","_payload$actionData","_payload$actionData2","_payload$actionData3","promoCode","wtc","TransactionHistoryActionHandler","OpenCashierActionHandler","_payload$launchInfo3","_payload$launchInfo4","getNumericProperty","PromCode","getStringProperty","OpenChallengesActionHandler","NavigateClientPageActionHandler","OpenMyAccountActionHandler","OpenRichActionHandler","_payload$actionData$C","openRichPage","campaignId","CampaignId","OpenControlCenterMiniActionHandler","OpenCasinoGameActionHandler","_shouldOpenGameInWebApp","unifiedDeepLink","actions","openCasinoGame","encodeURIComponent","CorrelatedGamePopUp","_suggestCorrelatedGame","shouldPreventOpenGameOnMobileWeb","suggestedGameType","gamesInfoArray","suggestedAIGameTypes","gamePopup","showSuggestedGame","OpenForgotYourPasswordActionHandler","openForgotPassword","OpenCasinoFreeToPlayActionHandler","_payload$launchInfo$a","_payload$launchInfo$a2","waitForEligibility","externalClick","OpenOnlineHelpActionHandler","_payload$actionData$r","_payload$actionData$r2","_payload$actionData$u","OpenOnlineHelp","OPEN_ONLINE_HELP","AutologinActionHandler","_payload$actionData$a","authenticationServiceType","AuthenticationServiceType","Registration","securityCode","SourceProductPackage","REGISTRATION","sourceProductPackage","sourceSubBrand","additionalAction","AdditionalActionName","openIdentityVerification","CasinofiedActionHandlerService","performAction","registerResolver","openBanking","uploadDocumentsFromCashier","withdraw","transactionHistory","openChallenges","navigateClientPage","openLink","openEmail","openOnlineHelp","openClientPage","openHelp","openRich","openCasinoFreeToPlay","autoLogin","FloatingBubblesService","addBubble","BubbleContentDecorator","bubbles","bubbleToRemoveIndex","_originalBubble","_id","SourceOfFundsBox","SourceOfFundsPopupComponent","messageRow1","messageRow2","openChatLabel","RestrictionRulerService","enableSOF","RestrictionRuler","_executeRestrictionRulerActions","restrictionRulerResponse","RequestedAction","_showSourceOfFundsMessage","_notifyRestrictionActionPerformed","restrictionRuleActionType","SOF","Message","_restrictionRulerResp","showMessageActions","_action$actionData","CasinofiedAnalyticsService","_sessionClosed","_sequentialNumber","_authenticationResult","focusLost","_userMinimizedClient","focusGained","_userResumedClient","pageHide","_userClosedClient","_loginSessionResumed","_createLogger","setSequentialNumber","_createMessageId","playerSessionId","openAppData","_openAppData$launchIn","_openAppData$launchIn2","_openAppData$launchIn3","_openAppData$launchIn4","_openAppData$launchIn5","_openAppData$launchIn6","messageID","targetAppID","sequentialCorrelationID","_extractSequentialCorrelationID","sourceAppVersion","trigger","setCorrelationId","setBusinessCorrelationID","appInitParams","openingMode","deviceTypeID","resolution","_getResolution","appInitResult","appInitResultReportingDetails","errorCode","errorDescription","getLaunchInfo","_appInitParams$applic","_appInitParams$applic2","isOk","loadingTime","_await$this$services$2","getSequentialCorrelationIdHandler","getCurrentValue","appClosed","appClosedParams","_appClosedParams$laun","_appClosedParams$laun2","_appClosedParams$laun3","appCloseReason","closeReason","appDisposed","extraDataEventName","extraData","totalStakes","netPosition","totalLosses","bankrollCurr","amountBankroll","devicePixelRatio","closingReasonID","actionHandler","actionName","actionHandlerStep","actionResult","sendLogLevelOnly","reportDuration","loadSubject","duration","clientStateID","clientStateName","AbTestingAiSortGamesListsService","isDepositSessionType","QuickDeposit","Deposit","isCashoutSessionType","Withdraw","CashierService","_reportEligibilityEvents","eligibilityResult","abCheckActionHandlerEventData","eligibilityActionHandlerEventData","isEligibleForDepositWidget","_getDepositWidgetEligibility","isEligible","isCashierInRedirectMode","_evaluateNTSEligibility","appName","ntsEligibilityCallback","_geoInfo","geoError","LoginCountry","StateID","ineligibleReason","errorID","hasErrors","_getWidgetEligibility","analyticsActionName","checkPendingActions","getFeatureToggle","blockedByPendingAction","PendingActions","enableExplicitCheck","ContinueCurrentFlow","featureABData","FeatureName","testGroup","GroupName","testID","TestId","ntsEligibility","UnifiedCashier","openDepositPendingAction","_getCashOutWidgetEligibility","UnifiedCashout","_getTransactionHistoryWidgetEligibility","TransactionHistory","openTransactionHistoryPendingAction","depositEligibility","openDepositWidget","cashOutWidgetEligibility","redirectToVerificationModuleForNonEligible","_cashOutWidgetEligibi","_cashOutWidgetEligibi2","getGeneralErrorMessage","openCashoutWidget","CashOutDepositHistory","openTransactionHistoryWidget","cashOutEligibility","_openCashierExternalLink","VerifyId","ExternalLinkHandlerBase","_openInNewTab","openInNewTab","ExternalLinkIframeContainerBox","ExternalLinkCloseButtonWrapperBox","ExternalLinkIframeBox","ExternalLinkIframeComponent","_props$scrolling","httpVerb","performFormPostForUrl","onIframeCreated","allow","getIframeAllowAttributeValue","allowFullScreen","ExternalLinkIframeInModalDialogComponent","_onCloseClick","iframeClassName","ExternalLinkIframeRenderer","getMaxWidth","_this$_customMaxWidth","_customMaxWidth","getMaxHeight","_this$_customMaxHeigh","_customMaxHeight","_onIframeCreated","iframeElement","iframeElementRef","setMaxSize","showInModalDialog","iframeScrolling","iframeExtraCssClass","renderAsReactElement","updateZIndex","ExternalLinkInIframeHandlerBase","_handlePostMessage","_this$_renderer","_this$_renderer$ifram","_renderer","contentWindow","_onPostMessageReceived","_onExternalLinkClosed","_getGnwpSource","_closeExternalLinkDialog","_this$_renderer2","addSdkEventSubscription","_parseMessageData","_extractActionId","_extractUrl","_extractGameId","_extractPromoCode","_extractCashierTabId","_CIPropRead$getNumeri","_extractMyAccountTabId","_CIPropRead$getNumeri2","_getRenderer","paramsOverride","_getIframeRendererParams","_showExternalLinkDialog","_renderExternalLinkIframe","_redirect","_openQuickDeposit","openDepositOptions","promCode","_openCashier","_redirectToURL","_this$_getParsedData","_getParsedData","_extractChannel","parsedChannelData","getShallowLowercasedObject","_extractAppSpecificParameters","parsedAppSpecificParamsData","Cashier","MEMBERSHIP_POST_ACTIONS","RegistrationExternalLinkHandler","MEMBERSHIP","openRegistration","_shouldOpenRegistrationWidget","_openRegistrationWidget","_openRegistrationFromExternalLink","openRegistrationWidget","_getGnwpUrl","gnwpRequest","enableNativeAppDownload","shouldEnforceHybridAppForMobileWeb","getRegistrationUrl","Membership","_shouldHideCloseButton","actionId","StraightToCashier","_openUploadDocumentsFromCashier","_openLoginForm","messageData","_onRegistrationCompleted","registrationCookiesData","_storeRegistrationCookie","_openUploadDocumentsFromMyAccount","_openBankId","_openDownloadAppPage","_openControlCenter","openBankId","Store","MY_ACCOUNT_POST_ACTIONS","MyAccountExternalLinkHandler","MY_ACCOUNT","getMyAccountUrl","MyAccount","originDeepLinkID","_openRichPage","_openSport","internalUrl","_openInternalUrl","externalUrl","_openExternalUrl","openSport","CASHIER_POST_ACTIONS","CashierExternalLinkHandler","_isOnHybrid","_isOnMacSafari","isMacOS","isSafari","_isMobileOS","getCashierUrl","_CIPropRead$getString","OPEN_CONTROL_CENTER","OMG_POST_ACTIONS","OmgExternalLinkHandler","_showMeTimeout","openOmg","getOmgUrl","openedWithinGame","messages","OmgBehindTheGame","showMeMessageData","_onShowMe","_openMyAccount","_height","_this$_renderer3","bringToFront","_this$_renderer4","ForgotCredentialsExternalLinkHandlerBase","_CIPropRead$getString2","ForgotUserNameExternalLinkHandler","FORGOT_USERNAME","openForgotUserName","getForgotUserNameUrl","ForgotPasswordExternalLinkHandler","FORGOT_PASSWORD","getForgotPasswordUrl","PendingLoginExternalLinkHandler","_autologinPromise","openPendingLogin","getPendingLoginUrl","PENDING_LOGIN","PendingAction","createAutologinPromise","_extractTokenAndOriginInformation","runAutologin","_openUploadDocuments","originInformation","isIncreaseLimitsDisabled","MyAccountUploadDocumentsExternalLinkHandler","openUploadDocumentsFromMyAccount","getUploadDocumentsUrl","_hideCloseButton","GameLimitsExternalLinkHandler","ResponsibleGaming","ContactUsExternalLinkHandler","getContactUsUrl","RICH_POST_ACTIONS","RichExternalLinkHandler","richPageUrl","renderRichPageContent","getRichPageUrl","marketingCampaignId","RICH","_redirectToExternalUrl","removeDailyDealIndicator","HelpExternalLinkHandler","openHelpPage","PENDING_ACTION_POST_MESSAGE","PendingActionExternalLinkHandler","_pendingActionResult","BlockCurrentFlow","_currentPendingAction","openPendingAction","_executePendingActions","_getUserPendingActions","pa1","pa2","_pa1$Priority","_pa2$Priority","Priority","previousPendingAction","pendingActions","_createPendingActionsRequest","pa","Id","_showPendingAction","_getPendingActionIframeRendererSpecificParams","pendingActionData","specificParams","ReasonId","GamingCautionInteraction","msgData","_onPending","PlatformEventTypeEnum","DepositPendingActionExternalLinkHandler","packageId","eventTypeId","OpenApp","playModeId","PENDING_APP","getPendingAppUrl","pendingActionTargetProductPackageId","EventTypeId","eventTypeName","EventTypeName","TransactionHistoryPendingActionExternalLinkHandler","RealGamePlayPendingActionExternalLinkHandler","getPendingPlayUrl","Play","PENDING_PLAY","ExternalLinksHandlersFactory","forgotUserName","forgotPassword","pendingLogin","realGamePlayPendingAction","depositPendingAction","transactionHistoryPendingAction","myAccountUploadDocuments","gameLimits","contactUs","help","HeaderWelcomeButtonsAnalyticsSender","enforceHybridAppModal","_this$props$preset","HeaderLoginButtonComponent","_this$props$text","isCisOrCip","showRegisterButton","HeaderRegisterButtonComponent","AboutBox","AboutInfoSectionBox","AboutFooterSectionBox","AboutComponent","_handleHelpTextClick","openHelpCenter","_renderHelpText","_renderAboutInfoSection","sectionTitleKey","valueClass","openSessionBalance","openSessionsBalance","fiscalCode","LastLoginLabelBox","LastLoginValueBox","LastLoginComponent","LiveCasinoGridItemBetIntervalBox","LiveCasinoGridItemBetIntervalMinWrapperBox","LiveCasinoMinMaxBet","isHideMaxBet","renderMinBet","RegulationComponentsCommon","_getAboutDialogProps","RegulationMenuItemFactoryBase","getSideMenuItem","getCrossBrandsAboveSearchItem","getBottomNavBarMenuItem","getUsefulLinksMenuItem","getUserMenuItem","getAppHeaderMenuItem","RegulationNavigationHookContinuationMode","RegulationNavigationHookBase","continuationMode","Continue","LegacyRegulationWrapper","legacyRegulation","regulationType","REGULATION_NAMES","getRealityCheckIntervalExpectedByTheGame","getAgeResponsibleGamingLabel","disableRealityCheck","updateRealityCheckInterval","showNightLimitMessage","nightLimitExpirationDate","postLoginActionsArePassed","logoutUser","linksNavigationHook","gameIconAnimationsAllowed","isGamblingSessionEnabled","lastLoginUnixTimeStampInSeconds","showRealityCheckMessage","shouldShowExitGamePopup","computeGameMaxLimitInCents","computeGameMinLimitInCents","GermanyRegulationComponents","inHeader","GermanyRealityCheckDialogBox","GermanyRealityCheckDialogHeaderBox","GermanyRealityCheckDialogFooterBox","GermanyRealityCheckDialogFieldLabelBox","GermanyRealityCheckDialogFieldValueBox","GermanyRealityCheckDialogButtonsBox","isGameRunning","sendMessageActionTaken","onCloseGame","onContinue","renderContinueButton","formatSessionTime","sessionTime","sessionTimer","currentSessionTimer","GermanyRealityCheckDialogComponent","GermanyRegulation","showConfirmLugasCoolingOffLogout","onAccept","onReject","shouldShowRealityCheckMessage","TotalNetLoss","MichiganRegistrationExternalLinkHandler","MichiganExternalLinksHandlersFactory","SessionTimerLabelBox","SessionTimerValueBox","SessionTimerBox","SessionTimerComponent","setSessionTimer","LastLoginAndSessionTimerBox","LastLoginContainerBox","LastLoginAndSessionTimerComponent","LastLoginSessionTimerSwitcherComponent","renderSessionTimer","setRenderSessionTimer","timerId","switchToSessionTimerInterval","showLastLoginForever","MichiganRegulationComponents","specificProps","MichiganSportSideMenuItemComponent","MichiganSportSideMenuItemRenderer","MichiganMenuItemFactory","MichiganRegulation","OntarioRegulationComponents","OntarioRegistrationExternalLinkHandler","OntarioMyAccountUploadDocumentsExternalLinkHandler","OntarioExternalLinksHandlersFactory","OntarioRegulation","NetherlandsRegistrationExternalLinkHandler","NetherlandsMyAccountUploadDocumentsExternalLinkHandler","NetherlandsRealGamePlayPendingActionExternalLinkHandler","NetherlandsExternalLinksHandlersFactory","NetherlandsRegulationComponents","NetherlandsRegulation","NewJerseyRegistrationExternalLinkHandler","NewJerseyExternalLinksHandlersFactory","USSafeToPlayButtonBox","us","nj_us_flag_svg","USSafeToPlayContainerBox","USSafeToPlayLabelBox","USSafeToPlayComponent","USResponsibleGamingButtonsBox","USResponsibleGamingBox","nj_rg_icon_svg","USResponsibleGamingComponent","USResponsibleGamingButtonsComponent","usFlag","NewJerseyRegulationComponents","NewJerseyRegulation","Intl","DateTimeFormat","timeZone","year","day","hour","minute","hour12","UkRegistrationExternalLinkHandler","UkExternalLinksHandlersFactory","UKRegulationComponents","isLiveSlot","UkRegulation","ItalyMyAccountUploadDocumentsExternalLinkHandler","ItalyExternalLinksHandlersFactory","ItalyRegulationComponents","ItalyTestMenuItemRenderer","backgroundColor","ItalyMenuItemFactory","InactivityTimeoutSettingsBox","DropDownBox","InactivityTimeoutSettingsComponent","_currentSettings$poss","currentSettings","currentSelectedValue","setCurrentSelectedValue","possibleSessionTimeoutValues","currentSessionTimeout","ItalyRegulation","RomaniaMyAccountUploadDocumentsExternalLinkHandler","RomaniaExternalLinksHandlersFactory","RomaniaRegulation","PortugalRegulationComponents","sessionBalance","PortugalRegulation","SwedenRegulationComponents","SwedenRegulation","DenmarkMyAccountUploadDocumentsExternalLinkHandler","DenmarkExternalLinksHandlersFactory","DenmarkRegulationComponents","DenmarkRegulation","DialogResult","SpainRegulation","showLogoutGamblingSessionSummary","Accepted","RegulationService","_createRegulation","sessionCooldownConfig","shouldShowPlayerLimitsToaster","enforceHybridAppForMobileWeb","preventOpenGameOnMobileWeb","getErrorMessage","CGP_ERROR_CODES","GENERAL_ERROR","regulationCode","REGULATION_CODE_TYPES","GERMANY","MICHIGAN","CANADA_ONTARIO","NETHERLANDS","NJ","UK","ITALY","ROMANIA","PORTUGAL","SWEDEN","DK","SPAIN","LIMIT_NAMES","LimitsToasterService","_limitsData","DepositLimit","PlayTimeLimit","BankrollLimit","_subscriptions","_activeLimitToasters","_toasterDisplayDurationSec","_getPlayerLimits","limitsDataRaw","depositLimitRaw","displayableLimits","limit","limitName","DEPOSIT_LIMIT","limitPeriods","playTimeLimitRaw","PLAYTIME_LIMIT","bankrollLimitRaw","BANKROLL_LIMIT","_handleUserLogout","_showLimitsToaster","hasData","_getFormatedLimitsText","_getIntervalLabelFromType","typeId","_getFormatedTimeUnit","unit","_getFormatedDepositLimitForType","formatedString","period","_getFormatedPlayTimeLimitForType","_getFormatedWithSeparators","_displayDepositLimits","_displayPlayTimeLimits","_displayBankrollLimits","texts","depositLimit","playTimeLimit","bankrollLimit","PlayerBurnoutService","_burnoutMessageEventSubscription","_omgDisplayedEventSubscription","_currentRunningGameReaction","_onAuthStateChange","setRenderAnimation","_onBurnoutMessageReceivedEvent","renderAnimation","_currentlyDisplayedOmg","_clearCurrentDisplayOmg","checkIfOmgDisplayed","_isRealMoneyPrize","PlayerBurnout","isRealMoneyPrize","_this$_omgDisplayedEv","_onOmgDisplayedEvent","_this$_burnoutMessage","_this$_omgDisplayedEv2","BurnOutAnimation","OfferBase","offerConfig","_offerShown","shouldBeVisible","_this$offerConfig","_getSessionStageKey","offerShown","sessionStorage","WelcomeOffer","updateConfig","cStatus","wheel_of_fortune","shell_svg","rotateBackward","rotateStarting","rotateFullRotation","rotateFinish","colors_svg","showSpin","WheelOfFortuneComponent","enableWheelOfFortuneAnimation","WOFWrapperBox","WOFShellBox","WOFColorsBox","WheelOfFortuneOffer","hasWheelOfFortunePromotion","LinkToOfferBannerBox","RegistrationOffer","isRegistrationOfferEnabled","PlayerOfferingsService","_allOffers","_shownOffer","_registrationPopupTimerId","_preventShowingRegistrationPopupThisDemoSession","isWheelOfFortuneEnabled","isEnabledFromConfig","PlayerOfferings","hasWheelOfFortuneConfigSection","wheelOfFortune","hasRegistrationOfferConfigSection","registrationOffer","_setWOFEnableAnimation","enableAnimation","_setHasWheelOfFortunePromotion","_hasWheelOfFortunePromotion","userBalance","_updateWheelOfFortuneAvailability","_resetShownFlagForAllOffers","_updateOfferToShow","welcomeOfferConfig","_welcomeOfferConfig","currentPopup","Cid","isBoolean","IsPromotionDisplayedInClient","listenForLastOpenDemoGame","_showRegistrationPopup","_initPopupTimer","_data$currentRoute$da","_setCurrentLinkOffer","_getAllOffers","welcomeOffer","offers","selectedOffer","_unused","_fetchUserHasWheelOfFortune","promoCodes","hasWheelOfFortune","_options$isHighPriori","_renderBanner","_setCurrentPopup","_this$_shownOffer$isH","_this$_shownOffer","DemoRegPopup","_gameRunner$lastPlaye","_gameRunner$lastPlaye2","lastOpenDemoGame","createPixiApplication","PIXI","loadPixi","Application","backgroundAlpha","antialias","forceCanvas","contextLostHandler","stop","_e","selfDestroyOnContextLost","PixiAppService","_pixiAppCreatorWithWebGlManager","webGlContextManager","makeCreator","loader","GameAnimatedIconsManagerService","intersectionObserver","observedTargets","isGameOpened","animatedIconsAllowed","intersectionCallback","observedTarget","VIEWPORT_EXIT","selectAndLoadAnimations","debounceTimeout","selectionRunning","selectionRunAgainNeeded","alreadyRunningAnimationCount","eligibleTargets","remainingSlots","shuffle","delete","WebGLContextManagerService","_activeContexts","creatorFn","webGl2Context","getContext","webGl1Context","isContextLost","TooltipBaseService","overlay","toolTips","_toolTips","showOverlay","stickOnTopTooltipModifier","phase","requiresIfExists","fn","modifiersData","popper","popperOffsets","stickToBottomTooltipModifier","beforeWrite","popperWidth","rects","popperHeight","elements","adaptive","documentElement","clientWidth","arrow","offsetTooltipModifier","flipTooltipModifier","preventOverflowTooltipModifier","TooltipBaseModel","_onDocumentClickHandler","closeOnClickOutside","tooltipContainer","closeTooltip","_domEventSubscription","_autoCloseTimeout","_popperInstance","onToolTipRendered","onTooltipRendered","click","hasOwnStyle","hasGlow","shouldShowCloseButton","showCloseButton","invertCloseButtonColors","styling","_createTooltipPopper","elementToAttach","createPopper","modifiers","_getElementToAttach","_destroyPopperInstance","_unsubscribeFromDomEvents","_clearAutoCloseTimeout","_dispose","onTooltipClosed","RegularTooltipModel","tooltipsContainer","attachTo","removeTooltip","RegularTooltipsService","_setDefaultTooltipOptions","showTooltip","tooltipModel","HistoryPaginatorBaseModel","pageSize","_migratedHistoryPaginator","_numberOfHistoryDays","_createMigratedHistoryPaginator","daysIntervals","setNumberOfHistoryDays","numberOfDays","_resetPaging","loadNextPage","_records","_pages","_nextPageIndex","hasMoreSelfRecords","hasMoreRecords","_isLoading","records","_createNextPageRequest","fromLastDays","pageNumber","nextPage","requestKey","RequestKey","minDate","MinDate","maxDate","MaxDate","_getGamesInfo","serverResponse","notInLayoutGames","GameHistoryData","record","_getGameTypeFromRecord","_getNextPage","newRecords","recordData","company","companies","getRegulatedCompany","_createRecordModel","_getRoundIdFromRecord","PagingData","HistoryRecordBaseModel","_formatValue","supportsDetailHistory","_isDetailHistorySupported","canPlayGame","playGame","UserGamingHistoryRecordModel","DateInTimeZone","ids","_gameSessionID","_participationTicketID","sessionID","participationID","GameId","IsSupportDetailedHistory","_isDetailHistoryAllowedOnCurrentPlatform","supportsHistoryMoreDetails","bigWinMessage","IsBigWin","_isFreePlayRound","FreePlayCurrentAmount","FreePlayWinningAmount","_getRealMoneyAmounts","BetAmount","OriginalWinningsAmount","ProfitAmount","AvailableMoneyPerOffering","_getFreePlayAmounts","amounts","freePlayMessage","_this$recordData$Addi","AdditionalData","AAMSGameSessionID","_this$recordData$Addi2","AAMSParticipationTicketID","_this$recordData$Allo","AllowedPlatformType","detailsHistoryNotAllowedOnCurrentPlatformMessage","openDetailHistory","History","historyGameParams","gameRoundId","gameRoundDate","gameRoundDateInTimeZone","MigratedGamingHistoryRecordModel","GameName","MigratedGamingHistoryPaginatorModel","_hasMoreRecords","_createMigratedRequest","VoidGamingHistoryPaginatorModel","UserGamingHistoryPaginatorModel","GameTypeId","MigratedHistory","enableGamingHistoryMigration","SessionGamingHistoryRecordModel","TotalBets","TotalWins","SessionBalance","SessionEndDateTime","GameSessionId","SessionGamingHistoryPaginatorModel","GamingHistoryService","getGamingHistory","maxPageSize","BECAUSE_YOU_PLAYED_LAST_REAL_GAME_LOCAL_STORAGE_KEY","BecauseYouPlayedService","_lastPlayedGames","_getLastPlayedGamesFromLocalStorage","lastPlayedGameByArena","_createDefaultPlayedGameByArenaObject","lastPlayedRealGame","_setLastPlayedGame","_updateCurrentBecauseYouPlayedGames","lastPlayedGameType","_createEmptyLastPlayedGamesList","_setCurrentBecauseYouPlayedGames","_getLastPlayedGameTypeForArena","lastGamePlayedGameTypeForArena","lastGamePlayedForCurrentArena","VersionNumber","major","minor","revision","tryParse","otherVersion","isSmallerThan","isGreaterThan","HybridService","prepareGameUrl","gameUrl","pathname","getCompiledGameVersion","executeWaitForHybridGameStep","navigateToOnDemandStandalone","isNativeSupportSecondWebView","isOnDemandHtmlGame","isOnDemandStandalone","getOnDemandOrigin","isSchemeSupported","isLocalGameLauncherSupported","setGamescheme","gameschcme","showAlert","isNyxIframeSupported","getNyxLocalHostUrl","isDeviceTouchEnable","isOpenSettingSupported","openTouchIdSettings","isDebugMode","clearToken","displayWebView","getLexisNexisSession","getAppVersion","_this$services$sdk$hy","versionString","StaticVideoPlayer","posterImage","_dontAutoSwipe","_onEnded","_this$_services$stati","StaticVideoPlayingService","SessionStorageService","StorageServiceBase","CookiesService","setFullYear","getFullYear","toUTCString","cookie","expiration_date","getDomain","RegExp","hostnameParts","hostname","FreePlayGameModel","hasEnoughBalanceToBet","currentBalance","freePlayId","VoucherBaseModel","voucherData","_voucherData","ID","FreePlayTypeId","isThirdPartyVoucher","CompanyID","gamesDictionary","GameTypeIDList","fpg","hasGame","creationDate","CreationDate","ExpirationDate","isExpired","isValid","updateVoucherData","newVoucherData","originalAmount","_this$_voucherData$Or","OriginAmount","_this$_voucherData$Cu","CurrentBalance","_formatVoucherAmount","timeToExpiration","timeToExpirationRoundedToSeconds","expiration","FreePlayVoucherModel","voucherInGameTitle","freeplay_bg_type_fp_png","JackpotFreePlayVoucherModel","freeplay_bg_type_jfp_png","FreeSpinsVoucherModel","SpinBetAmount","freeplay_bg_type_fs_png","JackpotFreeSpinsVoucherModel","freeplay_bg_type_jfs_png","VouchersProviderBase","_createVoucherModel","FreePlayStatus","Tripe8FreePlayVouchersProvider","_onFreePlayBatchAddedHandler","vouchers","existingVoucher","_findVoucher","voucherModel","_onFreePlayBatchUpdatedHandler","_onFreePlayBatchRemovedHandler","voucherIds","voucherId","refreshVouchers","THIRD_PARTY_BONUS_TYPE","ThirdPartyVouchersProvider","_setVouchers","newVouchers","FreePlayBonusList","voucherModels","bonusDataFromBackend","BonusStatus","clientVoucherData","_convertBackendBonusDataToClientVoucherData","CurrencyCode","FreePlayID","FreePlayTypeID","_convertFreePlay","Voucher","_convertVoucher","_getGamesMaxBets","_parseVoucherCreationDate","FreeSpinsInfo","spinBetAmount","BetPerSpin","maxBets","GameTypesIDs","NumberOfFreeSpinsLeft","Winnings","CurrentWinningAmount","NumberOfAwardedFreeSpins","VoucherInfo","RemainingFreePlayAmount","AwardedFreePlayAmount","VoucherForUiDisplayModel","innerVoucher","FreePlayService","_executeActionsWhenFreePlayIsAvailable","_actionsToExecuteWhenFreePlayIsAvailable","_setVoucherProviders","registerActionToExecuteWhenFreePlayIsAvailable","newProviders","_vouchersProviders","vp","userActiveVouchers","userVouchers","allVouchers","provider","userVouchersSortedByCreationDate","v1","v2","_v1$creationDate$getT","_v1$creationDate","_v2$creationDate$getT","_v2$creationDate","diff","userVouchersSortedByExpirationDate","findVoucherById","getGameVouchersSortedByCreationDate","RestrictionsService","getGenericRestrictionMessage","FreeToPlayService","_checkEligibilityPromise","_isEnabled","_checkEligibility","_setIsPromotionEligible","shouldShowPromotion","crm","isPromotionRestricted","_isPromotionEligible","_shouldShowIcon","_isPromotionOpened","setIsPromotionOpened","isOpened","CASINO_BONUS_GAME_WIDGET","domain","apiOrigin","openFreeToPlayBonusGames","ScriptLoaderService","ReasonIsNotEligible","SessionTimerService","_onSessionTimerUpdate","CrmService","_sdkLib","_initCrmPromise","_initService","_connect","isAuth","_initCrm","_disconnect","CrmSdk","libUrl","_loadLib","initCrm","userToken","executeInitCrm","fbToken","onConnectedToFirebase","onDisconnectedFromFirebase","_getEligibility","eligibility","checkEligibility","doNotShowPromotionReasons","PromotionRestricted","reasonIsNotEligible","LugasActiveDialogBoxLine","LugasActivePopupComponent","LoginPopupBox","LoginPopupDialogText","getLoginPopupData","totalStakesText","netPositionText","BankrollCurr","TotalStakes","NetPosition","onApprove","LoginPopupComponent","ToggleSwitchCheckboxBox","ToggleSwitchSliderBox","ToggleSwitchBox","ToggleSwitchComponent","ModifyBiometricDialogBox","ModifyBiometricSectionBox","ModifyBiometricToogleSectionBox","ModifyBiometricDialogComponent","isFeatureOn","setIsFeatureOn","getTokenAndCheckEnable","_updateTouchEnable","strToggle","selectToggle","getModel","GamblingSessionStatus","SpecificDialogsService","analyticsOnClick","openDownloadApp","KeepDialogOpen","showLugasCooldownPopup","reportConfirmClicked","ret","showLugasActivePopup","reportClick","Rejected","showLoginPopup","confirmClicked","TotalLosses","gamblingSession","gamblingSessionData","getGamblingSessionState","sessionStatus","_showGamblingSessionSummaryPopup","reportLogoutMessageShown","sessionTotalBets","sessionTotalWins","reportLogoutMessageActionTaken","TippingHistoryBaseModel","_setRecords","reset","loadAllRecords","TipHistory","GameTypeID","_getAmounts","TipAmount","AvailableBalanceAfterAction","_recordData$TipID","tipId","TipID","gameTypeId","imagePlaceHolderUrl","tipDate","TipDateTime","TippingHistoryService","LoyaltyIndicatorModel","_loyaltyRef","LoyaltyIndicatorConstructor","LoyaltyIndication","loyaltyInitInfo","_createLoyaltyInfo","firebaseToken","FirebaseToken","CID","LanguageCode","ClientContext","BrandId","ClientPlatform","ClientVersion","ProductPackage","SubBrandId","Style","_createLoyaltyStyle","loyaltyStyleParams","BackgroundColor","ShowBoxShadow","ShowUnderline","FontSize","ArrowSize","ProgressBarHeight","ArrowColor","LOLArrowContainerRigh","LOLArrowContainerLeft","LOLContentPaddingLeft","TextColor","ProgressBarBackgroundColor","ProgressBarBorderRadius","LOLArrowTop","_this$subscription","_this$_loyaltyRef","Terminate","LoyaltyService","_loadLoyaltyPromise","_loadLoyaltyScriptPromise","_loadLoyalty","_loadLoyaltyScript","fireBaseToken","_getFirebaseToken","Loyalty","scriptLink","StatePopupWrapperBox","StatePopupComponent","_onStateConfirmation","onStateSelect","_onStateNotInListClick","onStateNotInListClick","_getStateName","statePopup","THE_STATE","StatePopupErrorMessageBox","StatePopupSelectWrapperBox","StatePopupWithDropdownComponent","_defaultOption","currentStateID","shouldShowError","_renderOptions","hidden","sr","getUserSelectedState","_renderStateSelector","isOneSiteEnabled","RegularStatePopupStrategy","_popupDisplayedLocalStorageKey","onOtherStateClick","onStateConfirmation","shouldDisplayStatePopup","forceDisplay","getComponent","getPopupTitle","OneSiteStatePopupStrategy","_shouldShowLoginFormSessionStorageKey","saveStateInCookie","getStateFromCookie","StateOfResidenceIdentifierService","_statePopupStrategy","_onReceivedUserStateQueryParam","urlWithoutUserState","_cookieKey","_displayLoginForm","statePopupStrategy","StatePopup","removeStateCookie","oneSite","shouldDisplayStateSelectorButton","appendUserSelectedStateToLink","sourceLink","searchParams","OnboardingWelcomeStep","mainText","secondaryText","targets","A","B","_quadLength","_length","_slope","_slopePerpendicular","_centerPoint","quadLength","GeometryHelper","quadraticDistanceBetweenPoints","slope","slopePerpendicular","centerPoint","getPointInSegment","Circle","center","freeTerm","newRadius","scaleWith","scaleBy","degreesToRadians","degrees","PI","radiansToDegrees","radians","normalize","slopeToAngle","resultInDegrees","atan","distanceBetweenPoints","getIntermediateCoordinate","O","getCenterOfDOMRect","getCircleCircumscribedToTheRectangle","OnboardingMainMenuStep","targetElement","rectangle","_target","allMenuItems","querySelectorAll","secondMenuItem","lastMenuItem","OnboardingUserMenuStep","targetSelector","translateYAmount","remToPx","FeatureId","OnboardingTourService","isEnabledAccordingToRegistrationTime","enabledAccordingToRegistrationTime","steps","_removeScrollSubscription","authorized","featuresToggleManagement","shouldShowFeature","OnboardingTour","_onWindowScroll","configSteps","stepIds","configStepKey","getStepInstance","updateFeatureCounter","stepIndex","nextStep","allClearToDisplayOnboarding","orbitOverlayConsumersCount","areRunningApps","hasDialogs","NyxService","useNewIntegration","NYX","OnBoardingTooltipModel","onBoardingTooltipSContainer","_loadPersistedValuesFromLocalStorage","sessionDisplayCount","_isThereRunningApps","_isGameRunning","isOnBoardingTooltipsEnabled","isOnBoardingEnabled","areOpenDialogs","currentRoutePreventsNotifications","hasOpenToasters","isOnboardingTourOpen","_hasReachedMaximumDisplayCount","_wasDisplayedOnCurrentSession","totalDisplayCount","storageValue","_totalDisplayCountLocalStorageKey","_totalDisplayCount","_sessionDisplayCountLocalStorageKey","_sessionDisplayCount","localStorageKey","maximumDisplayCount","IconTitleTextTooltipContainerBox","IconTitleTextTooltipTextContainerDefaultBox","IconTitleTextTooltipTextContainerMrGreenBox","IconTitleTextTooltipTextContainerBox","IconTitleTextTooltipTitleDefaultBox","IconTitleTextTooltipTitleMrGreenBox","brandPrimaryDark","IconTitleTextTooltipTitleBox","IconTitleTextTooltipIconBox","SeparatorDefaultBox","Separator777Box","SeparatorMrGreenBox","SeparatorBox","IconContainerDefaultBox","IconContainerMrgreenBox","IconContainerBox","IconTitleTextTooltip","FreePlayOnBoardingTooltipModel","gift_svg","_onTooltipClicked","commonConditions","mobileElement","pcElement","IOSAddToHomeShareIconBox","MessageBodyContainerBox","MessageBodyBoldContainerBox","IosAddToHomeScreenComponent","logoIcon","ios_add_to_home_screen_logo_png","iosShareIcon","ios_share_svg","BRAND","onClicked","IosPwaOnBoardingTooltipModel","_onToolTipClick","borderColor","_openGameCount","isDeviceEligible","_isDeviceEligible","isIphone","PWA","ControlCenterOnBoardingTooltipModel","isControlCenterEnabled","isControlCenterOnBoardingTooltipEnabled","OnBoardingTooltips","enabledForControlCenter","ExplorerOnboardingTooltipContainerBox","ExplorerOnboardingTooltipTitleContainerBox","exploreHighlight","ExplorerOnboardingTooltipXButtonBox","ExplorerIcon","navigateToExplorer","closeTooltipCallback","_xButtonClicked","explore_swipe_phone_gesture_lottie","rendererSettings","preserveAspectRatio","ExplorerOnboardingTooltip","VideoSlidesExplorerOnBoardingTooltipModel","scrollDetected","videoSlidesShouldBeDisplayed","OnBoardingTooltipsService","enableOnBoardingTooltipsTimer","_migrateOldStorageKeys","visibleTooltips","tt","PlayerMigrationService","_businessCorrIdQueryParamName","_onReceivedBusinessCorrIdQueryParam","isMigrationEnabledFromConfig","sendClientVisitAnalytics","migrationToken","hasClientBeenLoadedWithMigrationToken","isPlayerMigrated","_this$services$sessio","PlayerMigration","enabledForBrand","ToastQueue","_queue","processQueue","addToQueue","toastId","clearQueue","StandardToastContent","Communications","onToastButtonClickedAnalytics","onToastOpenedAnalytics","ToastHandler","_displayReactionDisposer","_destroyReactions","toast","_hideReactionDisposer","displayCondition","when","_displayToast","_this$options$toastOp","_this$options$toastOp2","_this$options$toastOp3","_this$options$toastOp4","autoClose","hideProgressBar","closeButton","CloseButton","onToastShown","ToasterService","_allToasts","_pendingToasts","_activeToasts","_toastQueue","pendingToastIndex","idx","showAckStandardToast","partiaToastDef","_options$toastOptions","_options$toastOptions2","FeaturesMaxDisplayCountMap","FeaturesToggleManagementService","_featuresDisplayCount","_serverCallPromise","_readFeatureToggleDataFromServer","_resetData","featureID","_this$_featuresDispla","_getMaxDisplays","_this$_featuresDispla2","displayCount","FeatureID","featuresData","_convertFeatureToggleManagementDataArrayToRecord","featuresToggleData","DisplayCount","LinkConfigurationParser","linkConfiguration","links","_this$linkConfigurati","_getMiniOrbitDefaultOpenMode","urlBuilderStrategy","_this$linkConfigurati2","_this$linkConfigurati3","_this$linkConfigurati4","_this$linkConfigurati5","crossBackMode","_this$linkConfigurati6","_this$linkConfigurati7","_this$linkConfigurati8","_supportsGnwp","shouldAppendSCutToUrl","getGnwpUrl","getPokerUrl","getSportUrl","getLiveChatUrl","getHelpPageUrl","isCrossBackToPokerOrSport","crossBrands","LinksNavigationService","_openBlankWindow","createBlankWindow","_hookResponse$options","hookResponse","_getLinkOpenMode","blankBrowserTab","_buildLink","_navigateToUrl","_openInNewTabForMiniOrbit","_openInNewTabForHybrid","_openInNewTabForWebApp","urlBuilder","_redirectForMiniOrbit","_redirectForHybrid","_buildDirectLink","directLink","_isCrossBackToPokerOrSport","_getCrossBackMode","openPoker","TOAST_TYPES","safeJsonParse","jsonStr","defaultWhenException","FirebaseToasterService","_receivedToasterEvent","onToastMessageReceived","gameTypeIDRaw","MetaDataParams","GameTypeIDInt","DurationInSec","toastData","MessageID","Title","SubTitle","MobileImage","PCImage","IconImagePath","_config$analyticsData","_config$analyticsData2","_config$analyticsData3","analyticsData","Type","ACKNOWLEDGE","_this$_receivedToaste","TitanJackpotService","_this$jackpotHandler","forceGradual","GameThemeDefinition","_translationKey","regEx","GamesThemeService","_allThemes","TableGames","Arcade","FarmAndPets","Sports","LiveCasino","NA","ScratchCards","Mexican","Xmas","Bingo","AztecIncaMayan","WildWest","CandyAndSweets","GoldMining","VikingsAndNordicMythology","findThemes","foundThemes","gameThemeId","gameThemeDefinition","GameVendorDefinition","tags","_nameIsMatch","_anyTagIsMatch","_this$tags","prevResult","currentTag","GamesVendorService","_allVendors","V_Netent","V_GoldenRace","V_CTXM","V_vsGaming","V_Electracade","V_Rival","V_Dynamite","V_Ashgaming","V_Crypto","V_BlueSq","V_Bellfruit","V_Sportech","V_WagerWorks","V_Betlow","V_Fremantle","V_Gamesq","V_DSL","V_Ponsbic","V_Endemol","V_Mazooma","V_Genesis","V_RevolverGaming","V_Kambi","V_Ingenuity","V_UniversalStudios","V_BallyWulff","V_Skilzz","V_NorthernLight","V_Spectate","V_RFranco","V_4theplayer","V_Oryx","V_ReelPlay","V_Leap","V_Core","V_ReelNRG","V_IronDog","V_Endorphina","V_Betsoft","V_Playzido","V_PlayzidoOthers","V_TomHorn","V_NeoGames","V_BFGames","V_Kalamba","V_GiveMe","V_GoldenHero","V_2by2","V_PlankGaming","V_BulletproofGames","V_PlayzidoReelplay","V_Gong","V_DWG","V_TripleCherry","V_Spearhead","V_CIRSA","V_Funfair","V_GreenJade","V_NazionaleElectronica","V_Betixon","V_BGaming","V_BlueHorn","V_SpinPlay","V_Arcadia","V_Swintt","V_GameArt","V_LadyLuck","V_SmartSoft","V_Spinberry","V_TopSpin","V_eZugi","V_IndigoMagic","V_AtomicLabs","V_Bluberi","V_RAW","V_WhiteHat","V_EGTDigital","findVendors","foundVendors","gameVendorId","PlayerMessagesService","waitForPlayerMessagesReady","VideoTypeEnum","VideoSlidesAnalyticsEventEnum","VideoSlidesFilterModel","ForYouVideoSlidesFilter","SlideRuleBaseModel","ruleConfig","_currentIndex","appendToChunk","currentChunkContent","slidesChunkSize","createVideoSlideRenderer","VideoSlidesAnalyticsReporter","videoType","videoSlideController","slideType","VideoStream","_roundTime","videoWatchTime","watchTime","isPlaying","currentResolution","virtualSlideIndex","realSlideIndex","realIndex","slidesCount","getItemsCount","currentFilter","LiveStream","videoDuration","videoDurationInSeconds","reportPlayStarted","PlayVideoStarted","reportRetryPlaySuccess","RetryPlayVideoSuccess","reportResumePlaySuccess","ResumePlayVideoSuccess","reportPauseOnAppSleep","PauseVideoOnAppSleep","_reportError","_error$name","_error$message","errorName","reportPreloadError","PreloadVideoError","reportPlayError","PlayVideoError","reportRetryPlayError","RetryPlayVideoError","reportResumePlayError","ResumePlayVideoError","reportPosterLoadFailure","VideoPosterLoadError","reportDroppedFrames","DroppedVideoFrames","reportWatchTimeLimitReached","VideoWatchTimeLimitReached","reportSlideActivated","swipeDirection","SlideActivated","reportSlideDeactivated","SlideDeactivated","slideActiveTime","reportVideoResolutionChanged","previousResolution","VideoResolutionChanged","reportBufferingTime","bufferingTime","Buffering","reportPlayGame","PlayGame","reportBookedGame","BookGame","reportRemoveBookedGame","RemoveBookedGame","reportMute","Mute","reportUnmute","Unmute","VideoSlideBaseRenderer","_slideActivationTime","_playGame","_this$_analyticsRepor","_onBookGame","_this$_analyticsRepor2","_onRemoveBookedGame","_this$_analyticsRepor3","attachAnalyticsReporter","_renderVideoSlide","onAfterActivated","_this$_analyticsRepor4","onBeforeDeactivate","_this$_analyticsRepor5","LiveStreamSlidePlayerContainer","VideoPlayerBox","VideoElementContainerBox","VideoPlayButtonComponent","isPaused","VideoErrorTitleBox","VideoErrorContainerBox","VideoErrorComponent","VideoWatchTimeLimitReachedBox","VideoWatchTimeLimitReachedComponent","VideoPlayerComponent","videoElementContainerRef","attach","detach","pauseTimerRef","preload","VideoSlidePlayerSkeletonAnimation","VideoSlidePlayerSkeletonBox","VideoStreamSlidePlayerComponent","showSkeleton","isPosterLoaded","ONBOARDING_ANIMATION_WITH_BOUNCE","VideoSlideLayoutBox","onboardingMovement","individualAnimationDuration","animationAppearances","ThinProgressBarContainerBox","ThinProgressBarBox","ThinProgressBarComponent","VideoSlideLayoutProgressIndicatorBox","VideoSlideLayoutChildrenContainerBox","VideoSlideLayoutComponent","showProgressIndicator","VideoSlideContentLayoutComponent","VideoSlideFooterLayoutBox","VideoSlideGameTitleLayoutBox","SaveGameButtonContainerBox","SaveGameButtonTitleBox","isSaved","setIsSaved","toggleSaveGame","onRemoveBookedGame","notifications","showGameSavedNotification","onBookGame","wasSaved","SaveGameButtonComponent","VideoSlidesSoundIconBox","buttonLight","VideoSlidesSoundButtonComponent","handleClick","VideoSlideFooterLeftContainerBox","VideoSlideFooterRightContainerBox","VideoSlideFooterLayoutComponent","_props$gameInfo","_tableInfo$Name","onPlayGameClick","VideoSlidesStreamBettingRangeBox","VideoSlideStreamFooterBox","VideoSlidesStreamJackpotContainerBox","VideoSlidesStreamJackpotValueBox","VideoSlideStreamFooterComponent","VideoStreamSlideComponent","isBuffering","VideoStreamGameSlideRenderer","uniqueKey","VideoStreamSlideRuleModel","LiveStreamSlideStatusBadgeBox","LiveStreamSlideStatusDetailsBox","LiveStreamSlideStatusIconAnimation","LiveStreamSlideStatusIconBox","LiveStreamSlidePlayerComponent","_renderTopLeft","RedRecordCircle","LiveStreamSlideComponent","LiveStreamGameSlideRenderer","LiveStreamVideoSlideRuleModel","PromotionSlideBox","componentIndex","PromotionSlideComponent","videoSlidesPromotionalBanners","promotionalBanners","currentComponentIndex","gridRowStart","gridRowEnd","PromotionSlideRenderer","_uniqueKey","BannerSlideRuleModel","SlidesRulesHandler","slidesRulesConfig","gamesWithVideoStream","gamesWithLiveStream","createRenderers","shouldContinue","currentChunk","SwipeDirectionEnum","SparkSwiperSlideController","controller","selfPosition","findSlidePosition","currentSlideIndex","getCurrentItemIndex","middleSlideControllerPosition","middleSlidePosition","VideoSlidesSwiperSlideController","slidesRenderers","_executeForRenderer","SparkSwiperSwipeAnimationModel","swiperAnimationConfig","triggerDelay","delayTimeoutRef","_clearTimers","SparkSwiperController","dataFeeder","setCurrentItemIndex","getMaxItemIndex","_generateSlidesControllers","maxSlides","createSlideController","itemsCount","_slidesControllers","activeSlideController","Forward","_rotateSlideController","Backward","to","cloned","moved","VideoSlidesSwiper","_swiperController","swiperAnimation","_currentSlideIndex","_getCurrentIndexFromLocalStorage","_this$videoSlides$get","storageData","getStorageData","lastIndexPerFilterUpdateTime","lastIndexPerFilter","setStorageData","MAX_SAFE_INTEGER","GamblingSessionManagerErrorCodes","VideoSlidesService","_swiper","_videoSlidesFilters","_storageData","_createVideoSlidesFilters","_loadGameTypes","_isVideoSlidesEnabled","_isStrictlyMobileDevice","_shouldShowExplorerMenuBadge","_setExplorerMenuBadgeShownLS","shouldShowExplorerMenuBadge","_getExplorerMenuBadgeShownFromLS","explorerMenuBadgeShown","currentGameType","gamesWithStaticVideos","_this$_getAIConfigFor","_gamesIdsWithStaticVideos","_this$_getAIConfigFor2","_getAIConfigForStaticSlides","gamesWithLiveStreamVideos","_this$_getAIConfigFor3","_gamesIdsWithLiveStreamVideos","_this$_getAIConfigFor4","_getAIConfigForLivestreamSlides","_filterGamesInfo","slidesRules","_this$config$filters","_this$config","_this$config$swiperGa","findFirst","VIDEO_SLIDES_STATIC","_this$config$swiperGa2","VIDEO_SLIDES_LIVE","_this$config$swiperGa3","swiperList","foundGame","filterListForCurrentGame","shouldStopSearching","filterForCurrentGame","onBoardingShown","video","createVideoStreamingPlayer","GamblingSessionData","gamblingSessionId","sessionActivationTime","_this$data$sessionAct","startDate","restrictionExpirationDate","GamblingSessionAnalytics","userBankroll","userBankrollCurrency","reportSetLimitPopupShown","reportConfirmSetLimitPopup","sessionRequestedNetLossAmountLimit","sessionRequestedTimeLimitInSeconds","sessionRequestedTimeReminderInSeconds","sessionRequestedRestrictionInSeconds","reportCancelSetLimitPopup","_reportPopupShown","messageTypeSource","messageType","sessionDurationInSeconds","reportNetLossAdvancedWarningShown","reportTimeLimitAdvancedWarningShown","reportNetLossLimitReachedShown","reportTimeLimitReachedShown","reportRealityCheckShow","reportMessageConfirmed","_getAnalyticsExtraData","sessionData","GamblingSessionService","_onGamblingSessionUpdateSubscription","_initialPromiseResolver","_advancedWarningLossLimitToast","_advancedWarningTimeLimitToast","_intervalReminderDialog","_onGamblingSessionActionHandler","_this$_advancedWarnin","_this$_advancedWarnin2","_this$_intervalRemind","GamblingSessionActionType","AdvancedWarningNetLossLimit","AdvancedWarningTimeLimit","TimeLimitReached","_formatUTCDate","messageTimeStamp","LossLimitReached","TimeReminder","_gamblingSessionStatePromise","_createInitialGamblingSessionStatePromise","_this$_onGamblingSess","_this$_advancedWarnin3","_this$_advancedWarnin4","_this$_intervalRemind2","_createDefaultGamblingSessionData","Inactive","updateCounter","_formatDate","hasTimedOut","GamblingSession","firebaseTimeout","currentState","_showGamblingSessionRestrictedMessage","isFreePlay","Expired","Restricted","OK","GamblingSessionAlreadyExist","_showGeneralErrorMessage","Cancel","_showGamblingSessionSetupDialog","_getLastBetActivity","LastBetActivity","_limits$restrictionPe","_limits$restrictionPe2","sessionDurationLimitInSeconds","reminderIntervalInSeconds","restrictionPeriodInSeconds","LazyAsync","_valueFactory","isLazy","_promisedValue","_resolvedValue","_initializing","_initValue","tryGetResolvedValue","forceInit","ServicesGroupLoader","loadGroup1","loadGroup2","loadGroup3","loadGroup4","loadGroup5","SnackbarNotificationComponentBox","snackbarNotificationBg","bottomOffset","SnackbarNotificationTitleBox","getBottomOffset","bottomMenu","onCtaClick","ctaText","SnackbarNotificationComponent","NotificationsService","_setCurrentNotifications","newNotifications","_currentNotifications","currentNotificationsComponents","showNotification","displayTimeMs","SAVE_GAME_NOTIFICATION_DISPLAY_TIME_MS","openSaveGameWidget","newNotificationOptions","removeNotification","cn","VideoOnDemandHlsPlayer","VideoOnDemandNativePlayer","rewind","VideoOnDemandPlayingService","CrossBrandsMenuItemConfigReader","AppHeader","AppHeaderCrossBrandItemBox","AppHeaderCrossBrandTextBox","GenericCrossBrandsMenuItemComponent","_onBrandClick","_brandConfig$iconAltT","brandConfig","menuItemKey","GenericCrossBrandsMenuItemRenderer","HeaderService","deactivateSkeleton","_headerResizeObserver","_headerElement","_headerRegulationDataElement","menuItemConfigReader","_onHeaderResize","computeHeaderHeight","computeRegulationHeaderHeight","_headerHeight","headerRegulationHeight","_this$_headerElement","_this$_headerRegulati","setHeaderElement","headerElement","menuItemKeyIsCrossBrand","k","getCrossBrandsMenuItems","cross_brand","crossBrandKey","getCrossBrandItemRenderer","MenuItemActionFactoryService","_customActionsModules","actionsModules","ActionConstructor","actionKey","actionConstructor","_configReader","CustomActionConstructor","VideoElementContainer","_videoElement","_containerElement","isAttached","containerElement","removeChild","VideoWatchTimeHandler","_watchStartTime","_watchTimeMilliseconds","updateWatchTime","onPlayStarted","onPlayStopped","isVideoFatalError","VideoEventsController","getAnalyticsReporter","_onEmptied","_previousResolution","_onBufferingStopped","_isPlaying","_isPaused","resetWatchTime","_lastReportedDroppedFrames","_isOffline","_watchTimeHandler","_onStalled","_onBufferingStarted","_onPause","_isBuffering","_onTimeUpdate","playbackQuality","_onResize","videoWidth","videoHeight","newResolution","VideoPlayerBaseModel","_sdkEventsSubscriptions","_videoElementContainer","_src","_eventsController","_playStrategy","_onAppPaused","playStrategy","appResumeSubscription","subscriptionIndex","_createVideoElement","DefaultAnalyticsReporter","isSoundMuted","mute","unmute","watchLimitReached","reporter","_createPlayerStrategy","_isPosterLoaded","videoElementStyles","applyVideoElementStyles","styleProp","_this$_playStrategy","sdkEvent","setPoster","_resetWatchTime","_watchTimeLimit","NativeVideoStreamingStrategy","_updateSrc","HlsVideoStreamingStrategy","_loadVideoManifest","eventsSubscriptions","clearEvents","parseManifestHandler","onHslError","detachMedia","VideoStreamingPlayerModel","isNativeStreamingSupported","VideoService","isStreamingSupported","toggleSound","IdleRecommendationToasterBox","IdleRecommendationHeaderBox","IdleRecommendationHeaderTitleWrapperBox","IdleRecommendationGameDetailsBox","IdleRecommendationToasterBackgroundDefaultBox","idle_recomm_toaster_bg_png","IdleRecommendationToasterBackgroundMrGreenBox","IdleRecommendationToasterBackgroundBox","IdleRecommendationComponent","onPlayRecommendedGameHandler","ACTIVITY_DETECTION_INTERVAL","IDLE_RECOMMENDATIONS_LOCAL_STORAGE_KEY","IdleRecommendationsService","_idleDetectionInterval","_numberOfAppearancesInSession","_maxAppearancesAllowedPerSession","_idleDetectionSubscription","_userActivityDetector","_isIdleRecToasterDisplayed","_displayInterval","_recommendedGameType","_toasterDisposer","_defaultOnCloseAnalytics","_openedAnotherGameWhileIdleIsActiveAnalytics","_openedRecommendedGameAnalytics","_onCloseAnalytics","toggleFeatureOn","_resetAppearancesInSession","_startIdleDetection","showToast","idleDetectionInterval","IdleRecommendations","maxAppearancesPerSession","_getNoOfAppearancesInSessionFromLocalStorage","displayInterval","_stopIdleDetection","_resetIdleDetectionTimer","_closeToasterWhenOpeningAnotherGame","_startUserIdleDetection","_startUserActivityDetection","_disposeIdleDetectionTimer","_showIdleRecommendationToaster","userActivityDetectionInterval","onUserActivityCallback","_onOpened","_onClosed","_this$services$arenas","_getRecentlyPlayedGame","recentlyPlayedGame","_getRecommendedGameBasedOnCorrelation","recomGameType","_getRecommendedGameInfo","recomGameTypeInfo","_showToaster","toasterHandler","_increaseAppearancesInSession","recentlyGamesPlayed","recentlyGamePlayed","gameDataInfo","_setIdleRecommendationDataInLocalStorage","noOfAppearancesInSession","CLASS","AccordionContentBox","AccordionContentComponent","AccordionHeaderBox","AccordionHeaderComponent","isTitleCentered","AccordionComponent","OptInJackpotBetDialogBox","OptInAccordionComponentBox","OptInAccordionContentComponent","OptInDialogHeaderBox","OptInDialogHeaderComponent","JackpotIconIcon","flexDirection","OptInAccordionTitleBox","OptInAccordionTitleComponent","OptInJackpotBetDialogComponent","toggleJackpotBet","JackpotBetService","_isJackpotBetOn","isJackpotBetOn","_isJackpotBetEnabled","ServiceFactory","sdkHooksProvider","windowService","domService","httpService","themeDefaultBoxes","_appStartupConfigs","_languageData","_groupsLoader","_externalLinks","ExternalLinksService","_userMenu","UserMenuService","_crossBrands","_verticalGamesList","VerticalGamesListService","_lobbyGameInfoPreview","LobbyGameInfoPreviewService","_gamePreviewFeaturesSelector","GamePreviewFeaturesSelectorService","_aiEngine","_aiNewEngine","_deepLink","DeepLinkService","_gameRouteHandler","_gamesFilter","_becauseYouPlayed","_games","_siteMap","SiteMapService","_marketing","MarketingService","_cmsPages","CmsPagesService","_configuration","_spinner","_webVitals","WebVitalsService","_location","LocationService","_routing","_regulation","_segmentation","_liveTableFeeds","_translation","_currencyService","_analyticsService","_analyticsDataLayerService","AnalyticsDataLayerService","_userService","_homepageService","_userGameOrientationService","_cmsApi","CmsApiService","_cmsBanners","CmsBannersService","_launcher","_clientDevice","ClientDeviceService","_device","_deepLinkParser","DeepLinkParserService","_deepLinkActionsFactory","DeepLinkActionsFactoryService","_sdk","_language","_sideMenu","SideMenuService","_gameSearch","GameSearchService","_gamePopup","GamePopupService","_cmsSegmentation","CmsSegmentationService","_stickyHandlerFactory","_exitPopup","ExitPopupService","_routingConfiguration","_overlay","_time","_abTestingFeatureDataProvider","_abTestingAiSort","_themeDefinition","_themeDefaultBoxes","_miniOrbit","_notifications","_dialog","_header","_pwaManifest","_progressiveWebApp","ProgressiveWebAppService","_miniOrbitCommunicationAdapterFactory","_drawer","DrawerService","_dailyDeal","DailyDealService","_omg","OmgService","_jackpots","JackpotsService","_walletProxy","_tools","_sessionCooldown","_mediaQuery","_api","_orbitComponentToSdkAdapter","_messageBroker","_appLauncher","CasinofiedAppLauncherService","_actionHandler","_floatingBubbles","_restrictionRuler","_redTiger","RedTigerService","_casinofiedAnalytics","_liveStreamPlaying","_staticVideoPlaying","_videoOnDemandPlaying","_cashier","_playerOfferings","_qaEnvironmentPopUpBlockerService","_limitsToaster","_burnoutService","_pixiAppService","_gameAnimatedIconsManagerService","_webGlContextManagerService","_regularToolTip","_onBoardingTooltip","_gamingHistory","_tippingHistory","_companies","CompaniesService","_freeToPlayService","_gameRunner","GameRunnerService","_hybrid","_sessionStorage","_cookies","_freePlay","_restrictions","_gnwp","GnwpService","_scriptLoader","_adminBanner","AdminBannerService","_sessionTimer","_geoLocation","GeoLocationService","_crm","_specificDialogs","_stateOfResidenceIdentifier","_loyaltyIndicator","_loginPopup","LoginPopupService","_nyx","_playerMigration","_toaster","_idleRecommendations","_featuresToggleManagement","_linksNavigation","_menuItemActionFactory","_bottomNavigationBar","BottomNavigationBarService","_titanJackpot","_firebaseToaster","_gamesTheme","_gamesVendor","_playerMessages","_gamblingSession","_openSessions","GamesOpenSessionService","_video","SplashService","GeoLocation","enable","_forceUpgradeHybridOnIos","currentHybridVersion","expectedHybridVersion","appStoreUrl","cmsPages","webVitals","analyticsDataLayer","deepLinkParser","deepLinkActionsFactory","exitPopup","manifest","sessionCooldown","floatingBubbles","restrictionRuler","qaEnvironmentPopUpBlockerService","limitsToaster","regularTooltips","onBoardingTooltips","gamingHistory","tippingHistory","nyx","idleRecommendations","playerMessages","openSessions","LogoContainerBox","LogoImageBox","LogoBox","withAnalytics","_getLogoImageURL","logoURL","_getLogoAlt","configOverride","logoAltOverride","ProfilePictureBox","ProfileUserNameBox","ProfilePictureImageBox","avatarState","ProfilePicture","_openUserMenu","marketingDl","_getAvatarUrl","_updateAvatarState","onMouseDown","onMouseUp","_renderUserName","newState","ProfileMessagesDividerBox","ProfileButtonsBox","ProfileCashierButtonBox","ProfileCashierAddButtonBox","ProfileWrapperBox","MARKETING_DL","ProfileBox","_openLogin","_renderLogin","_renderCashier","_renderProfileBoxMessages","StoreButton","store_button","appLink","store","store_button_ios_svg","store_button_android_png","MenuLinksGroupsContainerBox","section","SideMenuContainerBox","MobileMenuItemContainerDefaultBox","MobileMenuItemContainerCasino777Box","MobileMenuItemContainerMrGreenBox","MobileMenuItemContainerBox","MobileMenuItemLinkDefaultBox","MobileMenuItemLinkCasino777Box","MobileMenuItemLinkCasinoMrGreenBox","MobileMenuItemLinkBox","CR_HELP_CENTER","HamburgerMenu","MobileHelpCenterMenuItemComponent","MobileLangSwitcherMenuItemSelectedLangBox","MobileLangSwitcherContainerBox","MobileLanguageMenuItemBox","openMobileLanguageSwitcher","MobileLangSwitcherMenuItemComponent","SideMenuHorizontalLineDefaultBox","horizontalLineBackgroundImage","SideMenuHorizontalLineMrGreenBox","SideMenuHorizontalLineBox","MobileMenuItemsContainerBox","StateSelectorButtonComponent","MobileStateSelectorMenuItemComponent","_openStateSelectorPopup","RelatedSitesWrapperBox","RelatedSiteLinkBox","RelatedSiteLink","RelatedSiteComponent","RelatedSitesComponent","relatedSites","related_sites","relatedSiteConfig","CrossBrandsItemsAboveSearchBox","totalItems","getCrossBrandAboveSearchItemRenderer","CrossBrandsItemsAboveSearch","_renderMobileStateSelector","linkBlocks","menuLinksBlockOrder","aboveSearchItems","crossBrandAboveSearch","_renderSideMenuSection","_renderMobileMenuElements","_renderInsideOrbitMenuContainerMobile","_renderBottomMenuSection","_renderRelatedSitesLinks","_renderStoreButton","shouldDisplayHelpLink","helpLinkMobile","shouldDisplayLanguageSwitcher","shouldDisplayStateSelector","_renderMobileHelp","_renderMobileLangSwitcher","SideMenu","LanguageSwitcherDropdownBox","LanguageSwitcherListBox","h4","LanguageSwitcherTitleBox","LanguageSwitcherListItemBox","LanguageSwitcherItemLabelBox","LanguageSwitcherItemCheckboxBox","LanguageSwitcherSectionComponent","_selectItem","_renderOneItem","htmlId","isSelected","LanguageSwitcherDropdownComponent","_renderSection","marginTop","MainNavCanvasBox","MainNavBox","OPEN_MENU","DRAGGING","MainNavContentWrapperBox","MainNavMenuBox","mainNavRef","dragProperties","isDragging","initialPointerX","initialNavMenuTransform","_onLogoClick","_hideMobileMenu","isMobileMenuOpen","onTouchMove","isRTL","pointerX","pointerXDelta","_onStopDragging","windowSize","innerWidth","minMainNavXToAutoClose","currentMainNavXPosition","removeProperty","_renderMobileMenuHeader","backButtonHandler","backButtonUseLabel","backButtonCyClass","isMobileLanguageSwitcher","closeMobileLanguageSwitcher","_renderLogo","isNavigation","_renderProfileBox","MainNav","HelpButtonComponent","PCHeader","AppHeaderCrossBrandListBox","crossBrandsMenuItems","sites","AppHeaderCrossBrandsComponent","BurgerMenuContainerBox","openMobileMenu","MobileBurgerMenuComponent","HeaderLanguageSwitcherBox","HeaderLanguageSwitcherComponent","_timer","_toggleDropdown","_clearCollapseTimeout","_colapseDropdown","_startCollapseTimeout","DepositHeaderButtonBox","DepositHeaderButtonComponent","deposit_header_icon_svg","NavbarSeparatorBox","HeaderNavbarContainerBox","HeaderNavbarLeftContainerBox","HeaderNavbarRightContainerBox","BurgerMenuWrapperBox","_captureHeaderRef","_handleSearchClick","_renderInsideOrbitMenuContainerPC","_renderDesktopSearchInput","_this$_headerConfig","_this$_headerConfig$h","_this$_headerConfig$h2","header_buttons","_renderDesktopControlCenterButton","_renderDesktopHelpButton","_this$_headerConfig2","_this$_headerConfig2$","_this$_headerConfig2$2","_renderDesktopStateSelectorButton","_renderDesktopLanguageSwitcher","_this$_headerConfig3","_this$_headerConfig3$","_this$_headerConfig3$2","_renderMobileSearchButton","_renderMobileNavbar","stickyOffset","useSafeAreaTop","_renderDeposit","_renderSecondLogo","_this$_headerConfig4","_this$_headerConfig5","secondaryLogoUrl","_renderRelevantComponent","componentIDs","currentComponentID","_renderCrossBrand","Fragment","_this$_headerConfig6","_this$_headerConfig6$","_renderDesktopLeftNavbar","_this$_headerConfig7","top_header_left","_this$_headerConfig8","_this$_headerConfig8$","_renderDesktopRightNavbar","_this$_headerConfig9","top_header_right","HeaderComponent","OverlayComponentBox","OverlayComponent","SpinnerLogoDefaultBox","SpinnerLogoCasino777Box","SpinnerLogoCIPBox","SpinnerLogoWSOPBox","SpinnerLogoCISBox","SpinnerLogoBox","SpinnerSubtextBox","SpinnerContentComponent","SpinnerComponent","BreadcrumbsBox","showBreadcrumbs","currentPage","itemScope","itemType","breadcrumbs","bcrumb","BreadcrumbsComponent","AppFooterComponent","footerConfiguration","footer","fallbackCMSComponent","defaultFooter_html","RouterOutletDefaultBox","RouterOutletCasino777Box","RouterOutletCasino888Box","RouterOutletHarrahsBox","RouterOutletSIBox","texture_png","RouterOutletBox","RouterOutletComponent","FloatingBubblesContainerBox","FloatingBubbleBox","FloatingBubblesComponent","bubble","MainWrapperBox","radialGradientModel","positionCoordinates","MaskCutoutBox","MaskFabricBox","gradientTransformRotateProp","startingPoint","targetPoint","angle","gradientRotationAngle","computeSpotlightSVGPath","spotlightRadius","extendedSpotlightRadius","dPathProp","OA","quadExtendedSpotlightRadius","oa_od_ratio","dt_length","D","T1","T2","reference","distance","C","temp1","Cx","Dx","getThePointsAtGivenDistanceFromAReferencePointInTheDirectionOfASlope","Cc","Dd","orderPoints","SpotlightRaySvgBox","GradientStopSvgBox","OnboardingSpotlightComponent","spotlightHome","P","maskElement","svgPathElement","svgGradientElement","animationPromise","captureMaskElement","captureSvgPathElement","captureSvgGradientElement","scheduleAnimation","animateToPoint","setCurrentTarget","currentTarget","scrollDisabled","prevState","snapshot","originPoint","gradientTransform","stopOpacity","nextTarget","intermediateDataComputer","effectsCallback","startTimestamp","previousTimestamp","animationDone","tween","timestamp","elapsed","intermediatePoint","animateFromAToB","intermediateOpacity","intermediate","webkitMaskImage","maskImage","setAttribute","OnboardingDialogLogoBox","OnboardingDialogMainTextBox","OnboardingDialogSecondaryTextBox","OnboardingDialogNextBox","OnboardingDialogStepIndicatorBox","OnboardingDialogContentBox","OnboardingDialogCloseBox","OnboardingDialogBox","OnboardingDialogComponent","logoRef","resizeSubscription","onLogoRefCapture","onLogoCoordinatesUpdate","onDone","stepsTotal","onboarding","onboarding_logo_closing_png","imgAssets","logoUrlString","closing","onboarding_logo_png","sIdx","activeStep","onNext","targetTimeout","setSpotlightOriginPoint","spotlightOriginPoint","setTargetAndScheduleNextOfTheSameStep","allTargets","closeOnboarding","newStepIndex","QAEnvironmentPopUpBlocker","ContainerComponent","_showQAEnvironmentPopUpBlocker","qaEnvironmentPopUpBlockerCookie","URLSearchParams","_renderRightDrawer","_renderFullOrbitMobileLayout","_renderFullOrbitPcLayout","_renderFullOrbit","_renderMiniOrbit","ModalDialogsContainerComponent","OrbitComponentsRenderedInsideSdkContainer","componentsPortals","PlayerBurnoutLayerComponent","TooltipArrowDefaultBox","TooltipArrow777Box","TooltipArrowMrGreenBox","TooltipArrowBox","TooltipCloseButtonBox","invertColors","TooltipContainerDefaultBox","activate","isAnimated","TooltipContainerBox","TooltipGlowDefaultBox","TooltipGlow777Box","TooltipGlowMrGreenBox","TooltipGlowBox","TooltipContentBox","ToolTipLightWeightContainerBox","ToolTipComponent","_captureElementRef","toolTip","currentTooltip","ToolTipContainerComponent","toolTipsProvider","GameLoadingIndicatorRootBox","loadingIndicator","gameLoadingIndicator","GameLoadingIndicatorComponent","renderGame","CurrentGameContainerComponent","ToasterStyleWrapper","ToastContainerBox","ToasterComponent","closeOnClick","newestOnTop","pauseOnFocusLoss","draggable","pauseOnHover","notification","SnackbarNotificationContainerComponent","AppComponent","removeSplash","splashTime","_this$props$services$","_this$props$services$2","OrbitContextProvider","StyleSheetManager","disableCSSOMInjection","stylisPlugins","RtlPlugin","InMemoryLocalStorageService","_localStorageData","B2CFrameworkLoader","b2cConfig","_languageIso2","_cmsSource","overrides","_buildFilePath","_createTagId","urlParts","loadB2CFramework","_this$b2cConfig","jsFiles","_this$b2cConfig2","_this$b2cConfig3","customJsFiles","customCssFiles","cssFiles","jsFile","_loadScriptTag","cssFile","_loadStyleTag","scriptTag","styleTag","selectTheme","storageService","miniOrbitName","getThemeName","storage","themeDefinitionModule","themeInitParams","CONTENT_ADAPTER_OBJECT_NAME","B2CAdapter","ContentAdapterEvents","getCasinoGames","foundGames","missingGames","gameImageAlt","getCasinoGamesWithoutBonus","gamesTypes","getClientInfo","languageIso2","systemId","cms","footerComponentId","environment","getUserInfo","userService","abTestGroup","B2CABTest","openDeepLink","deepLinkService","executeDeepLink","_appId","_sendToDWH","_eventType","_category","_action","_label","MAX_FIELD_SIZE","MAX_FIELDS_COUNT","fieldsCount","isPwaInstallable","showPwaPrompt","OrbitApi","ORBIT_VERSION","_b2cContentAdapter","siteInfo","clientInfo","fullVersion","getGamesWithoutBonus","deepLinkObject","navigate","bannerAdminDeepLink","subscribeOnAuthChange","configure","enforceActions","createStorage","lsData","LocalStorageService","startApplication","_windowService$getGlo","_windowService$getGlo2","WindowService","DomService","HttpService","loggerService","ConsoleLoggerService","configurationsReader","appConfigs","languageData","engLang","getLanguageData","process","REACT_APP_THEME_NAME","ThemeDefaultBoxes","promo","renderApp","ON_INIT_COMPLETE","ON_ORBIT_INIT_COMPLETE","RUN_AUTOLOGIN","RUN_AUTOLOGIN_TOUCH_ID","ON_BEFORE_OAUTH_STATE_CHANGE","OAUTH_STATE_CHANGE","AUTOLOGIN_SUCCESS","AUTOLOGIN_FAILED","SUCCESSFULLY_LOGIN_RESPONSE","ON_RUN_AUTOLOGIN","FAIL_LOGIN_RESPONSE","LOGIN_FORM_OPEN","LOGIN_FORM_CLOSE","GET_NEW_TOUCH_TOKEN","SCREEN_CHANGE_STATE","SCREEN_RESIZE_CHANGED","FULL_SCREEN_CHANGE","EXTERNAL_LINK_OPEN","EXTERNAL_LINK_OPENED","APP_RESUMED","APP_PAUSED","ANALYTIC_TRIGGER_ACTIVATED","ANALYTIC_DATA_LAYER_UPDATE","ANALYTICS_EXPERIMENT_ACTIVATED","ANALYTICS_OPTIMIZE_TRIGGER","INCOMING_MARKETING_FLOW","BALANCE_UPDATED","CURRENCY_UPDATED","RECENTLY_PLAYED_GAMES_UPDATED","LIVE_FEEDS_TOTAL_JACKPOTS_UPDATED","OAUTH_REMOVE_FROM_LOCAL_STORAGE","LOCAL_STORAGE_CHANGED","ELEMENT_CREATED","BEGIN_LOGIN_AFTER_REGISTRATION","LOGIN_COMPLETED_AFTER_REGISTERATION","LOGIN_FAILED_AFTER_REGISTRATION","HYBRID_OPEN_MAIL","HYBRID_UPDATE_INFO_KEY","NYX_GAME_REVEALED","TOUCH_ID_GET_TOKEN_FROM_SRV","TOUCH_ID_TRY_AGAIN_SKIP","TOUCH_ID_CHECK_TOKEN_ENABLE","TOUCH_ID_TOKEN_ENABLE_RES","TOUCH_ID_CLEAR_TOKEN","TOUCH_ID_NATIVE_CANCEL","TOUCH_ID_LOGIN_ERROR","TOUCH_ID_AUTO_LOGIN","WEB_VIEW_NAVIGATE_DEPOSIT_WIDGET","WEB_VIEW_NAVIGATE_MIT_ID","WEB_VIEW_NAVIGATE_SPID","WEB_VIEW_NAVIGATE_CASHIER","SECOND_WEB_VIEW_OLD_CALL","SECOND_WEB_VIEW_OPEN","FABRIC_ADD_EVENT","ADD_TAG_OPEN_APP_VER","ADD_TAG","REM_TAG","DEEPLINK_RECEIVED","ROUTE_CHANGED","WINDOW_FOCUS_GAIN","WINDOW_FOCUS_LOSS","GEO_HYBRID_GT_CB","SESSION_EVENT_KICK","SESSION_EVENT_WALLET","SESSION_EVENT_FREE_PLAY_REMOVED","SESSION_EVENT_UPDATERESTRICTION_RECEIVED","SESSION_EVENT_PLAYER_BURNOUT_MESSAGE_RECEIVED","ON_BROWSER_PAGE_HIDE","TOKEN_LIFETIME_EXPIRED","LIVE_TABLES_UPDATE","GAME_POPUP_SHOW","BONUS_ABUSE_PARKING_MONEY","SHOW_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW","CLOSE_POPUP_ABOVE_HYBRID_SECOND_WEB_VIEW","LOCATION_POPUP_OPEN","PROMOTIONS_CHANGED","ODR_CLEAR_ALL_GAMES","SERIAL_UPDATE","APPS_FLAYER_READY","DEEP_LINK_READY","MENU_CLICKED","LOGIN_BUTTON_CLICKED","USER_EVENTS","ON_CLICK","ON_DOUBLE_CLICK","ON_SUBMIT","ON_MOUSE_MOVE","ON_MOUSE_DOWN","ON_KEY_PRESS","ON_DOM_MOUSE_SCROLL","ON_MOUSE_WHEEL","ON_TOUCH_START","ON_TOUCH_MOVE","ON_TOUCH_END","ON_MSPOINTER_MOVE","ON_RESIZE","ON_FOCUS","ON_CHANGE","ON_BLUR","USER_ACTIVITY_EVENTS_ALL","USER_ACTIVITY_EVENTS_FOR_HYBRID","GENERAL_ERROR_SUPPORT","RESTRICTED_COUNTRY","INVALID_CREDENTIALS","LOGIN_RESTRICTION","INVALID_REFRESH_TOKEN","CAPTCHA_REQUIRED","TOUCH_ID_CHANGE_PASS","TOUCH_ID_EXPIRE","OPENING_GAME_ERROR","UNSUPPORTED_ANONYMOUS","TIME_LIMIT_REACHED_DAILY","TIME_LIMIT_REACHED_WEEKLY","TIME_LIMIT_REACHED_MONTHLY","TOKEN_NOT_VALID","PENDING_ACTION_REQUIRED","INVALID_GRANT","isRefreshTokenError","_errorCode","PLATFORM_TYPES","ALL","MOBILE","NONE","VOLATILITY_LIMITS","TOKEN_PROPERTIES","OAUTH_STORAGE_KEY","OAUTH_EXPIRE_KEY_IN_STORAGE","OAUTH_LAST_REFRESH_TOKEN_TIMESTAMP","OAUTH_LAST_USER_DATA","OAUTH_LAST_SESSION_DATA","OAUTH_HAS_REMEMBER_ME","OAUTH_LAST_TIME_ACTIVITY","OAUTH_CUSTOM_SESSION_TIMEOUT","OAUTH_ACCESS_TOKEN","OAUTH_TOKEN_FIELDS_OVERRIDES","GRANT_TYPES","PASSWORD","REFRESH_TOKEN","AUTOLOGIN","OAUTH2_CSS","AUTHORIZED_USER_CLASS","LOGIN_TYPE","NEW_LOGIN","ID_VERIFICATION_STATUS","AGE_VERIFIED","ADDRESS_VERIFIDED","EXPLICIT_LOGOUT","USER_IDLE","REFRESH_TOKEN_FAILED","ACCESS_TOKEN_REMOVED","USER_KICKED","MESSAGE_TYPE","COM","NEVADA","GIB","MALTA","SH","REGULATION_SUFFIX","REGULATION_STATUS_ID_MAP","APPROVED_FOR_REGULATION","PENDING_DOCUMENTS","BRANDS","NJ888","CANADA","MRGREEN_SE","MRGREEN_GER","MRGREEN_DK","_token","_timezone","_timezoneClip","_masks","shortDate","mediumDate","longDate","fullDate","shortTime","mediumTime","longTime","isoDate","isoTime","isoDateTime","isoUtcDateTime","shortTime12","shortTime24","_i18n","dayNames","monthNames","call","SyntaxError","H","M","L","flags","dd","_pad","ddd","dddd","mm","mmm","mmmm","yy","yyyy","hh","HH","MM","ss","T","TT","Z","S","$0","valAsString","formatCurrentDateToUtc","formatUtc","cleanFunctions","eventIdx","eName","eCallback","eContext","once","self","onceCallback","_originalCallback","getAllSubscriptions","cb","removeAllSubscriptions","detachEvents","cleanFn","mini_orbit","arenas_header_buttons","my_casino_icon_png","slots_icon_png","jackpots_icon_png","live_icon_png","casino_games_icon_png","HomePage","livecasino_header_arena_icon_png","slots_header_arena_icon_png","newgames_header_arena_icon_png","jackpots_header_arena_icon_png","_888exclusive_header_arena_icon_png","casinogames_header_arena_icon_png","roulette_header_arena_icon_png","blackjack_header_arena_icon_png","scratchcards_header_arena_icon_png","videopoker_header_arena_icon_png","livegameshows_header_arena_icon_png","progressive_slots_arena_icon_png","gamecare_logo_png","begambleaeare_logo_png","_gameEventsSubscription","_intervals","_timeouts","_domEventsSubscriptions","addGameEventSubscription","addInterval","clear","addDomEventSubscription","webpackContext","webpackContextResolve","__webpack_require__","exports","webpackAsyncContext"],"sourceRoot":""}