iobroker.admin 6.5.2 → 6.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/2251.294e39b4.chunk.js","mappings":"inBAgBA,MAAMA,GAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmThBC,GAASC,IAAU,CACrB,SAAU,CACN,MAAO,OACP,OAAQ,IACR,SAAU,UACd,EACA,cAAe,CAEf,EACA,MAAO,CACH,UAAW,UACX,OAAQ,OACR,QAAS,OACT,MAAO,OACP,OAAQ,MACZ,EAEA,UAAW,CACP,SAAU,WACV,MAAO,OACP,OAAQ,IACR,QAAS,GACT,UAAW,GACX,OAAQ,UACR,QAAS,MACb,EACA,kBAAmB,CACf,QAAS,EACT,WAAY,uBAChB,EAEA,gBAAiB,CACb,OAAQ,EACR,OAAQ,kBACR,aAAc,EACd,MAAO,oBACP,OAAQ,oBACR,SAAU,WACV,QAAS,MACb,EACA,iBAAkB,CACd,WAAY,GACZ,MAAO,GACP,OAAQ,EACZ,EACA,iBAAkB,CACd,SAAU,EACd,EACA,wBAAyB,CACrB,UAAW,SACX,SAAU,WACV,IAAK,EACL,OAAQ,EACR,KAAM,EACN,MAAO,EACP,QAAS,OACT,cAAe,SACf,WAAY,SACZ,eAAgB,QAEpB,EACA,gBAAiB,CACb,QAAS,GACT,OAAQ,SACZ,EACA,oBAAqB,CACjB,SAAU,WACV,OAAQ,IACR,MAAO,CACX,EACA,kBAAmB,CACf,SAAU,WACV,OAAQ,IACR,MAAO,EACP,IAAK,EACT,EACA,MAAO,CACH,OAAQ,eACZ,CACJ,GAEA,MAAMC,WAAoB,WAAU,CAChC,YAAYC,EAAO,CASf,GARA,MAAMA,CAAK,EACX,KAAK,MAAQ,CACT,WAAY,GACZ,SAAU,KACV,YAAa,EACjB,EACA,KAAK,cAAa,aAAU,EAExB,CAAC,OAAO,SAAS,eAAe,8BAA8B,EAAG,CACjE,MAAMC,EAAQ,OAAO,SAAS,cAAc,OAAO,EACnDA,EAAM,aAAa,KAAM,8BAA8B,EACvDA,EAAM,UAAYL,GAClB,OAAO,SAAS,KAAK,YAAYK,CAAK,CAC1C,CACJ,CAEA,OAAOC,EAAe,CAClB,KAAM,CAAE,QAAAC,EAAS,EAAAC,EAAG,SAAAC,CAAS,EAAI,KAAK,MAEhCC,EAAOJ,EAAc,CAAC,EACtBK,GAAS,IAAI,WAEnBA,GAAO,QAAU,IAAM,QAAQ,IAAI,0BAA0B,EAC7DA,GAAO,QAAU,IAAM,QAAQ,IAAI,yBAAyB,EAC5DA,GAAO,OAAS,IAAM,CAClB,IAAIC,GAAM,SAAWF,EAAK,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY,EAM5D,GALIE,KAAQ,YACRA,GAAM,aACCA,GAAI,SAAS,KAAK,IACzBA,GAAM,iBAENF,EAAK,KAAOH,EACZ,OAAO,OAAO,MAAMC,EAAE,oDAAqD,KAAK,MAAMD,EAAU,IAAI,CAAC,CAAC,EAE1G,MAAMM,GAAS,QAAQD,aAAc,KACjC,IAAI,WAAWD,GAAO,MAAM,EACvB,OAAO,CAACG,GAAMC,KAASD,GAAO,OAAO,aAAaC,EAAI,EAAG,EAAE,CAAC,IAErEN,EAASI,EAAM,CACnB,EACAF,GAAO,kBAAkBD,CAAI,CACjC,CAEA,QAAS,CACL,KAAM,CAAE,SAAAM,EAAU,QAAAT,EAAS,QAAAU,EAAS,KAAAC,EAAM,EAAAV,EAAG,eAAAW,GAAgB,OAAAC,GAAQ,MAAAC,GAAO,KAAAC,GAAM,SAAAb,EAAS,EAAI,KAAK,MAC9F,CAAE,WAAAc,GAAY,SAAAC,GAAU,YAAAC,EAAY,EAAI,KAAK,MACnD,OAAO,gBAAC,YACJ,SAAUT,GAAYS,GACtB,IAAI,WACJ,SAAU,GACV,OAAAL,GACA,QAAAb,EACA,YAAa,IAAM,KAAK,SAAS,CAAE,WAAY,UAAW,CAAC,EAC3D,YAAa,IAAM,KAAK,SAAS,CAAE,WAAY,EAAK,CAAC,EACrD,OAAQ,CAACD,GAAeoB,KAAW,CAE/B,GADA,KAAK,SAAS,CAAE,WAAY,EAAM,CAAC,EAC/B,CAACpB,GAAc,OACf,OAAO,MAAOoB,IAAUA,GAAO,CAAC,GAAKA,GAAO,CAAC,EAAE,QAAUA,GAAO,CAAC,EAAE,OAAO,CAAC,GAAKA,GAAO,CAAC,EAAE,OAAO,CAAC,EAAE,SAAYlB,EAAE,kBAAkB,CAAC,MAErI,QAAO,KAAK,OAAOF,EAAa,CAExC,GAEC,CAAC,CAAE,aAAAqB,GAAc,cAAAC,EAAc,IAAM,gBAAC,UACnC,UAAW,gBACPX,EAAQ,UACRM,KAAe,YAAcN,EAAQ,kBACrCA,EAAQ,SACRD,GAAYC,EAAQ,gBACpB,CAACC,GAAQD,EAAQ,aACrB,GACIU,GAAa,CAAC,EAClB,gBAAC,cAAUC,GAAc,CAAC,CAAE,EAC5B,gBAAC,OAAI,UAAW,gBAAWX,EAAQ,gBAAiBI,IAASJ,EAAQ,KAAK,GACpEC,EAOEC,IAAkB,CAACM,IAAe,gBAAC,OAAI,UAAWR,EAAQ,qBACtD,gBAAC,UAAO,CAAC,MAAOT,EAAE,UAAU,GACxB,gBAAC,KAAU,CAAC,KAAK,QAAQ,QAASqB,IAAK,CACnCV,IAAkBA,GAAe,EACjCU,GAAE,gBAAgB,CACtB,GAAG,gBAAC,WAAS,IAAC,CACd,CACJ,CACJ,EAfK,gBAAC,OAAI,UAAWZ,EAAQ,yBACzB,gBAAC,gBAAU,CAAC,UAAWA,EAAQ,iBAAkB,EACjD,gBAAC,OAAI,UAAWA,EAAQ,kBACQT,EAA5Be,KAAe,WAAe,oBACxB,kEAD2C,CACyB,CAClF,EAYHL,GAAQI,IAAQ,gBAAC,OAAI,UAAWL,EAAQ,mBACrC,gBAAC,UAAO,CAAC,MAAOT,EAAE,SAAS,GACvB,gBAAC,KAAU,CAAC,KAAK,QAAQ,QAASqB,IAAK,CAC9BJ,GAGD,KAAK,SAAS,CAAE,SAAUI,GAAE,aAAc,CAAC,EAF3C,KAAK,SAAS,CAAE,YAAa,EAAK,CAAC,EAIvCA,GAAE,gBAAgB,CACtB,GAAG,gBAAC,WAAQ,CAAC,MAAOJ,GAAc,UAAY,UAAW,CACzD,CACJ,EACA,gBAAC,QACG,SAAAD,GACA,YAAW,GACX,KAAM,QAAQA,EAAQ,EACtB,QAAS,IAAM,KAAK,SAAS,CAAE,SAAU,IAAK,CAAC,GAE/C,gBAAC,WAAQ,CAAC,QAAS,IAAM,KAAK,SAAS,CAAE,SAAU,KAAM,YAAa,EAAM,EAAG,IAAM,CAngBjH,UAogBgC,MAAMM,IAAe,YAAK,aAAL,eAAiB,UAAjB,eAA0B,QAC/CrB,GAASqB,GAAa,iBAAiB,EAAE,UAAU,CAAC,CACxD,CAAC,GAAItB,EAAE,SAAS,CAAE,EAClB,gBAAC,WAAQ,CAAC,QAAS,IAAM,KAAK,SAAS,CAAE,SAAU,KAAM,YAAa,EAAM,CAAC,GAAIA,EAAE,UAAU,CAAE,CACnG,CACJ,EACCU,GAAQ,CAACO,GAAc,gBAAC,OAAI,IAAKP,EAAM,UAAWD,EAAQ,MAAO,IAAI,MAAO,GAAK,KAEjFC,GAAQI,IAAQG,GAAc,gBAAC,YAC5B,IAAK,KAAK,WACV,UAAWR,EAAQ,MACnB,IAAKC,EACL,mBAAoB,EACpB,SAAU,EACV,OAAQ,GACR,iBAAkB,GAClB,gBAAiB,GACjB,WAAY,GACZ,iBAAkB,GACtB,EAAK,IACT,CACJ,CACJ,CACJ,CACJ,CAEAf,GAAY,aAAe,CACvB,SAAU,GACV,QAAS,GAAK,KACd,KAAM,KACN,eAAgB,KAChB,OAAQ,CAAE,UAAW,CAAC,CAAE,EACxB,MAAO,GACP,SAAUU,GAAU,QAAQ,IAAIA,CAAM,EACtC,EAAGkB,GAAMA,EACT,KAAM,EACV,EAEA5B,GAAY,UAAY,CACpB,QAAS,WACT,QAAS,WACT,SAAU,SACV,KAAM,SACN,MAAO,SACP,SAAU,SACV,OAAQ,WACR,EAAG,QACP,EAEA,QAAe,cAAWF,EAAM,EAAEE,EAAW,C,8dChiB7C,MAAM6B,GAAY,iGACZC,GAAiB,iEAEjBhC,GAASC,IAAU,CACrB,KAAM,CACF,SAAU,WACV,OAAQ,GACR,MAAO,IACP,UAAW,IACX,WAAYA,EAAM,QAAQ,WAAW,QACrC,UAAA8B,GACA,QAAS,OACT,cAAe,SACf,WAAY,kBACZ,UAAW,CACP,UAAWC,EACf,EACA,aAAc,CACV,gBAAiB,qBACjB,WAAY,CACR,SAAU,WACV,MAAO,EACP,IAAK,GACL,QAAS,WACT,SAAU,GACV,OAAQ,OACR,MAAO,OACP,MAAO,OACX,EACA,UAAW,8CACf,CACJ,EACA,qBAAsB,CAClB,KAAM,CACF,QAAS,CACb,EACA,OAAQ,CACJ,QAAS,EACb,CACJ,EACA,WAAY,CACR,UAAW,GACX,QAAS,OACT,QAAS,gBACT,SAAU,WACV,eAAgB,gBAChB,WAAY,iBAChB,EACA,IAAK,CACD,MAAO,GACP,OAAQ,GACR,OAAQ,SACR,SAAU,WACV,UAAW,CACP,QAAS,KACT,SAAU,WACV,OAAQ,EACR,IAAK,EACL,KAAM,EACN,MAAO,OACP,OAAQ,OACR,WAAY,8CACZ,eAAgB,QAChB,gBAAiB,MACrB,CACJ,EACA,UAAW,CACP,WAAY,WAChB,EAIA,IAAK,CACD,SAAU,WACV,OAAQ,IACR,MAAO,GACP,OAAQ,GACR,MAAO,EACX,EAEA,SAAU,CACN,OAAQ,OACR,SAAU,WACV,MAAO,OACP,OAAQ,EACR,UAAW,OACX,OAAQ,EACR,WAAY,cACZ,eAAgB,gBAChB,QAAS,OACT,cAAe,QACnB,EACA,YAAa,CACT,OAAQ,CACZ,EACA,MAAO,CACH,MAAO,GACP,OAAQ,GACR,QAAS,GACT,OAAQ,UACR,SAAU,WACV,WAAY,OACZ,aAAc,GACd,WAAY,gBACZ,UAAW,CACP,UAAW,eACf,EACA,WAAY,CACR,SAAU,WACV,KAAM,EACN,QAAS,KACT,OAAQ,GACR,MAAO,EACP,gBAAiB,UACjB,UAAW,eACf,EACA,UAAW,CACP,SAAU,WACV,KAAM,EACN,QAAS,KACT,OAAQ,GACR,MAAO,EACP,gBAAiB,UACjB,UAAW,gBACf,CACJ,EACA,YAAa,CACT,WAAY/B,EAAM,QAAQ,WAAW,QACrC,QAAS,GACT,QAAS,OACT,eAAgB,eACpB,EACA,OAAQ,CACJ,QAAS,MACb,EACA,UAAW,CACP,UAAW,SACX,MAAO,OACP,OAAQ,CAGZ,EACA,QAAS,CACL,MAAO,OACP,WAAY,OACZ,SAAU,GACV,cAAe,SACf,YAAa,EACb,WAAY,GACZ,MAAOA,EAAM,QAAQ,OAAS,OAAS,OAAS,MACpD,EACA,YAAa,CACT,UAAW,GACX,WAAY,CAChB,EACA,gBAAiB,CACb,SAAU,OACV,WAAY,EACZ,gBAAiBA,EAAM,QAAQ,WAAW,MAC1C,MAAOA,EAAM,QAAQ,OAAS,OAAS,OAAS,MACpD,EACA,cAAe,CACX,OAAQ,OACR,QAAS,OACT,cAAe,SACf,eAAgB,gBAChB,cAAe,iBACnB,EACA,YAAa,CACT,UAAW,EACf,EACA,YAAa,CACT,QAAS,MACb,EACA,YAAa,CACT,WAAY,CAChB,EACA,aAAc,CACV,QAAS,OACT,eAAgB,gBAChB,WAAY,QAChB,EACA,uBAAwB,CACpB,gBAAiB,0BACrB,EAIA,gCAAiC,CAC7B,gBAAiB,wBACrB,EAIA,gCAAiC,CAC7B,gBAAiB,sBACrB,EAIA,MAAO,CACH,WAAY,UAEZ,SAAU,UACd,EACA,IAAK,CACD,WAAY,SAGhB,EACA,iBAAkB,CACd,KAAM,CACF,QAAS,CACb,EACA,OAAQ,CACJ,QAAS,GACb,CACJ,EACA,QAAS,CACL,MAAO,GACP,OAAQ,OACR,WAAY,2HACZ,OAAQ,EACR,SAAU,WACV,KAAM,GAGV,EACA,oBAAqB,CACjB,KAAM,CACF,KAAM,GACV,EACA,OAAQ,CACJ,KAAM,MACV,CACJ,EACA,YAAa,CACT,UAAW,QACf,EAEA,eAAgB,CACZ,SAAU,SACV,MAAO,EACP,IAAK,EACL,WAAY,EAChB,EACA,MAAO,CACH,OAAQ,SACZ,EACA,YAAa,CACT,MAAO,EACX,EACA,UAAW,CACP,MAAOA,EAAM,QAAQ,QAAQ,IACjC,EACA,sBAAuB,CACnB,QAAS,OACT,WAAY,SACZ,WAAY,CAChB,EACA,iBAAkB,CACd,QAAS,OACT,WAAY,QAChB,EACA,aAAc,CACV,OAAQ,YACR,QAAS,UACT,aAAc,EACd,QAAS,OACT,WAAY,SACZ,OAAQ,UACR,WAAY,kBACZ,UAAW,CACP,WAAY,WAChB,CACJ,EACA,iBAAkB,CACd,OAAQ,GACR,MAAO,GACP,YAAa,EACjB,EACA,MAAO,CACH,gBAAiBgC,EAAA,MACrB,EACA,KAAM,CACF,gBAAiBC,EAAK,QAAL,IACrB,EACA,KAAM,CACF,gBAAiBC,GAAA,MACrB,EACA,MAAO,CACH,gBAAiBC,GAAA,MACrB,EACA,YAAa,CACT,MAAO,GACP,OAAQ,EACZ,EACA,YAAa,CACT,QAAS,MACb,EACA,mBAAoB,CAChB,UAAW,eACf,EACA,SAAU,CACN,UAAW,mCACf,EACA,+BAAgC,CAC5B,KAAM,CACF,MAAO,SACX,EACA,MAAO,CACH,MAAO,SACX,EACA,OAAQ,CACJ,MAAOnC,EAAM,QAAQ,OAAS,OAAS,OAAS,MACpD,CACJ,CAEJ,GAEA,IAAIoC,GAAc,IACdC,GAAa,IACbC,GAAW,MACXC,GAAW,MACXC,GAAc,IAEdC,GAAgB,EAChBC,GAAgB,EAChBC,GAAmB,EAEvB,MAAMC,GAAgB,CAAC,QAAS,QAAS,OAAQ,OAAQ,OAAO,EAEhE,SAASC,GAAgBhB,EAAIiB,EAAM,CAC/B,MAAMC,EAAalB,EAAG,UAAU,MAAM,GAAG,EACnCmB,EAAMD,EAAW,QAAQD,CAAI,EAC/BE,IAAQ,KACRD,EAAW,OAAOC,EAAK,CAAC,EACxBnB,EAAG,UAAYkB,EAAW,KAAK,GAAG,GAEtCA,EAAW,KAAKD,CAAI,EACpB,WAAWG,GAAepB,EAAG,UAAYoB,EAAa,IAAKF,EAAW,KAAK,GAAG,CAAC,CACnF,CAGA,MAAMG,GAAW,CAAC,CACd,IAAAC,EACA,MAAAC,EACA,UAAAC,EACA,QAAAtC,EACA,MAAAuC,EACA,UAAAC,EACA,gBAAAC,EACA,cAAAC,EACA,YAAAC,EACA,OAAAC,EACA,qBAAAC,EACA,WAAAC,GACA,gBAAAC,GACA,WAAAC,GACA,OAAAC,GACA,SAAAC,EACA,YAAAC,EACA,MAAAC,GACA,UAAAC,EACA,KAAAtB,EACA,qBAAAuB,GACA,sBAAAC,GACA,cAAAC,EACA,oBAAAC,GACA,OAAAC,EACA,aAAAC,GACA,EAAApE,CAEJ,IAAM,CACF,KAAM,CAACqE,GAAcC,EAAW,KAAI,YAAS,EAAK,EAC5CC,KAAY,UAAO,EACnBC,KAAa,UAAO,EACpBC,KAAS,UAAO,EAChBC,KAAS,UAAO,EAChBC,KAAY,UAAO,EAEnBC,GAAkB,CAACC,EAAGC,IAAU,CAClC/C,GAAa+C,GAASA,EAAM,MAAQ,KAAO,SAAIA,EAAM,MAAQ,IACzDP,EAAU,UACVA,EAAU,QAAQ,UAAY,GAAGxC,QAAgBD,KACjDS,GAAgBgC,EAAU,QAAS9D,EAAQ,QAAQ,EAE3D,EAEMsE,GAAmB,CAACF,EAAGG,IAAW,CACpClD,GAAckD,GAAUA,EAAO,MAAQ,KAAO,SAAIA,EAAO,MAAQ,IAC7DT,EAAU,UACVA,EAAU,QAAQ,UAAY,GAAGxC,QAAgBD,KACjDS,GAAgBgC,EAAU,QAAS9D,EAAQ,QAAQ,EAE3D,EAEMwE,GAAc,CAACC,EAAOC,IACpB,CAACD,GAASA,EAAM,MAAQ,MAAQA,EAAM,MAAQ,OACvC,KAAOC,EAAO,IAAMA,EAAO,IAC3Bf,GAAa,OAAO,aACpBc,EAAM,IAAI,SAAS,EAAE,QAAQ,IAAK,GAAG,GAAKC,EAAO,IAAMA,EAAO,IAE9DD,EAAM,KAAOC,EAAO,IAAMA,EAAO,IAI1CC,EAAc,CAAC5C,EAAM0C,IAAU,CACjC,IAAIG,GACA7C,EAAK,SAAS,UAAU,EACxBL,IAAgB+C,GAAA,YAAAA,EAAO,MAAO,EACvB1C,EAAK,SAAS,UAAU,EAC/BJ,IAAgB8C,GAAA,YAAAA,EAAO,MAAO,EACvB1C,EAAK,SAAS,aAAa,IAClCH,IAAmB6C,GAAA,YAAAA,EAAO,MAAO,GAErCG,GAAWlD,GAAgBC,GAAiB,KAAOC,GAC/CmC,EAAW,UACPa,IACAb,EAAW,QAAQ,aAAa,QAASxE,EAAE,oCAAoC,CAAC,EAChFwE,EAAW,QAAQ,UAAU,IAAI,SAAS,IAE1CA,EAAW,QAAQ,gBAAgB,OAAO,EAC1CA,EAAW,QAAQ,UAAU,OAAO,SAAS,GAGzD,EAEMc,GAAU,CAACT,EAAGK,IAAU,CAC1BlD,GAAWiD,GAAYC,EAAO,GAAG,EAC7BT,EAAO,UACPA,EAAO,QAAQ,UAAYzC,GAC3BO,GAAgBkC,EAAO,QAAShE,EAAQ,QAAQ,EAExD,EAEM8E,GAAU,CAACV,EAAGK,IAAU,CAC1BjD,GAAWgD,GAAYC,EAAO,GAAG,EAC7BR,EAAO,UACPA,EAAO,QAAQ,UAAYzC,GAC3BM,GAAgBmC,EAAO,QAASjE,EAAQ,QAAQ,EAExD,EAEM+E,GAAa,CAACX,EAAGK,IAAU,CAC7B,GAAIA,EAAM,IAAK,CACX,MAAMO,GAAI,KAAK,MAAMP,EAAM,IAAO,KAAU,EACtCQ,GAAI,KAAK,MAAMR,EAAM,KAAO,KAAO,IAAM,IAAI,EACnDhD,GAAcuD,GAAI,GAAGA,MAAKC,MAAO,GAAGA,KACxC,CACIf,EAAU,UACVA,EAAU,QAAQ,UAAYzC,GAC9BK,GAAgBoC,EAAU,QAASlE,EAAQ,QAAQ,EAE3D,EAEMkF,GAAmBC,GAAiB,CACtC,GAAI,CAACA,EACD,MAAO,GAEX,KAAM,CAAE,OAAAC,CAAO,EAAID,EACnB,IAAIE,GAAQ,EACZ,GAAI,CAACD,GAAU,CAACA,EAAO,OACnB,OAAOC,GAEX,GAAI,OAAO,KAAKD,EAAO,OAAO,UAAU,EAAE,OAAQ,CAC9C,IAAIE,GAAMF,EAAO,OAAO,WACxB,OAAO,KAAKE,EAAG,EAAE,QAAQC,IACrB,OAAO,KAAKD,GAAIC,EAAO,EAAE,SAAS,EAAE,QAAQnB,IAAKiB,IAAO,CAAC,CACjE,CACA,OAAOA,EACX,EAEM,CAACG,GAAWC,EAAY,KAAI,YAAS,CAAE,cAAe,CAAC,EAAG,MAAO,CAAE,CAAC,EAEpEC,GAAe,CAAC3D,EAAM0C,IAAU,CAC/BA,IACCkB,GAAiBlB,EAAM,GAAG,EAC1BmB,GAAuBnB,EAAM,GAAG,EAExC,KAEA,aAAU,IAAM,CACZ,MAAMoB,EAAsBV,GACxBA,GAAiBA,EAAc/C,CAAG,GAAKqD,GAAa,CAAE,cAAeN,EAAc/C,CAAG,EAAG,MAAO8C,GAAiBC,EAAc/C,CAAG,CAAC,CAAE,CAAC,EAE1I,OAAAe,EAAY,4BAA4B0C,CAAmB,EAE3D1C,EAAY,iBAAiBf,CAAG,EAC3B,KAAK+C,GAAiBA,GAAiBA,EAAc/C,CAAG,GAAKqD,GAAa,CAAE,cAAeN,EAAc/C,CAAG,EAAG,MAAO8C,GAAiBC,EAAc/C,CAAG,CAAC,CAAE,CAAC,CAAC,EAElKsB,EAAO,eAAe,GAAGtB,eAAkB+B,EAAe,EAC1DT,EAAO,eAAe,GAAGtB,gBAAmBkC,EAAgB,EAE5DZ,EAAO,eAAe,GAAGtB,QAAWyC,EAAO,EAC3CnB,EAAO,eAAe,GAAGtB,QAAW0C,EAAO,EAC3CpB,EAAO,eAAe,GAAGtB,WAAc2C,EAAU,EAEjDrB,EAAO,eAAe,GAAGtB,aAAgBuC,CAAW,EACpDjB,EAAO,eAAe,GAAGtB,aAAgBuC,CAAW,EACpDjB,EAAO,eAAe,GAAGtB,gBAAmBuC,CAAW,EAEvDjB,EAAO,eAAe,GAAGtB,aAAgBsD,EAAY,EAE9C,IAAM,CACTvC,EAAY,8BAA8B0C,CAAmB,EAC7DnC,EAAO,iBAAiB,GAAGtB,eAAkB+B,EAAe,EAC5DT,EAAO,iBAAiB,GAAGtB,gBAAmBkC,EAAgB,EAE9DZ,EAAO,iBAAiB,GAAGtB,QAAWyC,EAAO,EAC7CnB,EAAO,iBAAiB,GAAGtB,QAAW0C,EAAO,EAC7CpB,EAAO,iBAAiB,GAAGtB,WAAc2C,EAAU,EAEnDrB,EAAO,iBAAiB,GAAGtB,aAAgBuC,CAAW,EACtDjB,EAAO,iBAAiB,GAAGtB,aAAgBuC,CAAW,EACtDjB,EAAO,iBAAiB,GAAGtB,gBAAmBuC,CAAW,EAEzDjB,EAAO,iBAAiB,GAAGtB,aAAgBsD,EAAY,CAC3D,CAEJ,EAAG,CAACtD,EAAKsB,EAAQ1D,CAAO,CAAC,EAEzB,KAAM,CAAC8F,GAASC,EAAU,KAAI,YAAS,EAAK,EAEtC,CAACC,GAAoBC,EAAqB,KAAI,YAAS,EAAK,EAC5D,CAACC,GAAeP,EAAgB,KAAI,YAAS,IAAI,EACjD,CAACQ,GAAqBP,EAAsB,KAAI,YAAS,IAAI,EAE7DQ,IAAoB1D,GAAiBL,IAAUgE,GAAA,wBAAyBhD,EAAWf,CAAS,EAE5FgE,GAAS,IAAM,CACjB,IAAIC,EAAO,CAAC,EACZvC,EAAO,SAAWuC,EAAK,KAAK,QAAQvC,EAAO,QAAQ,WAAW,EAC9DC,EAAO,SAAWsC,EAAK,KAAK,QAAQtC,EAAO,QAAQ,WAAW,EAC9DC,EAAU,SAAWqC,EAAK,KAAK,GAAGhH,EAAE,QAAQ,MAAM2E,EAAU,QAAQ,WAAW,EAC/EqC,EAAK,KAAK,GAAGhH,EAAE,WAAW,MAAM+C,GAAW,EAC3CiE,EAAK,KAAK,GAAGhH,EAAE,WAAW,MAAM8D,GAAW,EAC3CS,EAAU,SAAWyC,EAAK,KAAK,GAAGhH,EAAE,QAAQ,MAAMuE,EAAU,QAAQ,WAAW,EAE/EZ,GAAY,OAAOA,GAAa,UAAY,OAAO,KAAKA,CAAQ,EAAE,IAAIsD,GAClED,EAAK,KAAKhH,EAAEiH,CAAK,EAAI,MAAQxD,GAAWwD,CAAK,EAAIxD,GAAWwD,CAAK,EAAEtD,EAASsD,CAAK,EAAGjH,CAAC,EAAI2D,EAASsD,CAAK,GAAK,KAAK,CAAC,EAEtH,wBAAsBD,EAAK,KAAK;AAAA,CAAI,CAAC,EACrC,OAAO,MAAMhH,EAAE,QAAQ,CAAC,CAC5B,EAEA,IAAIkH,GAAY,GACZC,EACAV,KACAU,EAAanH,EAAE,6BAA8BwC,CAAI,EACjD0E,GAAY,IAGhB,MAAME,EAAcF,GAAY,kBAACG,GAAA,GAC7B,MAAOF,EACP,KAAM,GACN,QAASF,GAAS,CACVR,KACAtC,EAAO,SAAS,GAAGtB,aAAe+D,EAAmB,EACrDF,GAAsB,EAAK,EAEnC,EACA,QAAS,IAAM,CACPD,KACAJ,GAAuBM,EAAa,EACpCD,GAAsB,EAAK,EAEnC,GACCD,IAAsB,kBAAC,cAAW,CAAC,UAAWhG,EAAQ,YAAa,QAAQ,WAAW,MAAO,CAAE,UAAW,CAAE,GACzG,kBAAC,aAAU,KAAET,EAAE,WAAW,CAAE,EAC5B,kBAAC,UACG,QAAQ,WACR,MAAO4G,GACP,UAAS,GACT,SAAUrF,GAAM8E,GAAuB9E,EAAG,OAAO,KAAK,GAErDe,GAAc,IAAIf,GAAM,kBAAC,WAAQ,CAAC,IAAKA,EAAI,MAAOA,CAAA,EAC9CvB,EAAEuB,CAAE,CACT,CAAW,CACf,CACJ,EACCkF,IAAsB,kBAAC,cAAW,CAAC,UAAWhG,EAAQ,YAAa,QAAQ,UAAW,EACnF,kBAAC,iBAAc,KAAET,EAAE,gFAAgF,CAAE,EACrG,kBAAC,iBAAc,KAAEA,EAAE,iEAAiE,EAAE,kBAACsH,EAAA,QAAS,CAAC,UAAW7G,EAAQ,mBAAoB,CAAE,CAC9I,CACJ,EAAiB,KAEjB,OAAO,kBAAC,OAAI,CAAC,IAAKoC,EAAK,UAAW,aAAWpC,EAAQ,KAAMiD,GAASjD,EAAQ,OAAS,EAAE,GAClF2G,GACC/C,IAAgBkC,KAAY,kBAAC,OAAI,UAAW,aAAW9F,EAAQ,SAAW4D,GAAqC,GAAtB5D,EAAQ,WAAgB,GAC/G,kBAAC,cAAW,CAAC,UAAWA,EAAQ,iBAC5B,kBAAC,OAAI,UAAWA,EAAQ,gBACpB,kBAAC,OAAI,UAAWA,EAAQ,MAAO,QAAS,IAAM6D,GAAY,EAAK,EAAG,CACtE,EACClB,CACL,EACA,kBAAC,OAAI,UAAW3C,EAAQ,YACxB,CACJ,EACA,kBAAC,OAAI,UAAW,aAAWA,EAAQ,UAAWqC,EAAQrC,EAAQ,MAAQA,EAAQ,GAAG,GAC5EqC,GAAS,kBAAC,OAAI,UAAWrC,EAAQ,QAAS,CAC/C,EACA,kBAAC,OACG,IAAK+D,EACL,MAAO,CAAE,WAAYxB,GAAS,SAAU,EACxC,UAAW,aACPvC,EAAQ,YACP,CAACyC,GAAmB,CAACJ,IAAUrC,EAAQ,uBACxCyC,GAAmBJ,GAASG,IAAc,IAASxC,EAAQ,gCAC3DyC,GAAmBJ,GAASG,IAAc,IAASxC,EAAQ,+BAC/D,GACA,kBAAC,YAAS,CAAC,UAAWA,EAAQ,IAAK,UAAU,MAAM,MAAOoD,IAAS,mBAAoB,EACvF,kBAAC,OACG,MAAO,CAAE,MAAQb,GAAS,oBAAkBA,EAAO,EAAI,GAAM,SAAU,EACvE,UAAWvC,EAAQ,SACnB,kBAAC,SACG,MAAOT,EAAE,qBAAqB,EAC9B,aAAciG,GAAU,MACxB,MAAM,QACN,UAAWxF,EAAQ,MACnB,QAASY,GAAK,CACVA,EAAE,gBAAgB,EAClB6C,GAAoB,CAAE,CAACrB,CAAG,EAAGoD,GAAU,aAAc,EAAG9B,EAAQtB,CAAG,CACvE,GACFL,CACF,CACJ,EACA,kBAAC,OACG,SAAU,OAAOY,GAAgB,SACjC,WAAY,IAAMoD,GAAW,EAAK,EAClC,YAAa,IAAMA,GAAW,EAAI,EAClC,QAAS,IAAMlC,GAAY,EAAI,EAAG,UAAW7D,EAAQ,IAAK,MAAM,UAAU,aAAW,OACrF,kBAAC8G,GAAA,EAAY,IAAC,CAClB,CACJ,EACA,kBAAC,cAAW,CAAC,UAAW9G,EAAQ,eAI5B,kBAAC,aAAU,CAAC,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,OACxD,kBAAC,OAAI,UAAWA,EAAQ,aAAa,OAAI,kBAAC,OAAI,IAAKgE,EAAQ,UAAWhE,EAAQ,aAAc,KAAM,CAAM,CAC5G,EACA,kBAAC,aAAU,CAAC,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,OACxD,kBAAC,OAAI,UAAWA,EAAQ,aAAa,OAAI,kBAAC,OAAI,IAAKiE,EAAQ,UAAWjE,EAAQ,aAAc,KAAM,CAAM,CAC5G,EACA,kBAAC,aAAU,CAAC,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,OACxD,kBAAC,OAAI,UAAWA,EAAQ,aAAcT,EAAE,QAAQ,EAAE,KAAE,kBAAC,OAAI,IAAK2E,EAAW,UAAWlE,EAAQ,aAAc,OAAQ,CAAM,CAC5H,EACA,kBAAC,aAAU,CAAC,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,MAAM,UAAWA,EAAQ,kBAChFT,EAAE,WAAW,EAAE,mBAAgB,kBAAC,OAAI,UAAW,aAAW6G,IAAoBpG,EAAQ,UAAWA,EAAQ,qBAAqB,GAC1HoG,GACG,kBAAC,UAAO,CAAC,MAAO7G,EAAE,QAAQ,GACtB,kBAAC,OAAI,QAAS+D,GAAsB,UAAWtD,EAAQ,cACnD,kBAAC,cACG,UAAWA,EAAQ,iBACnB,KAAK,SAET,kBAAC+G,GAAA,QAAW,IAAC,CACjB,EAAczE,CAAU,CAC5B,EACAA,CACH,CACT,EACA,kBAAC,aAAU,CAAC,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,KACvD/C,EAAE,WAAW,EAAE,mBAAiB8D,CACrC,EACA,kBAAC,aAAU,CAAC,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,OACxD,kBAAC,OAAI,UAAWrD,EAAQ,aAAcT,EAAE,QAAQ,EAAE,KAAE,kBAAC,OAAI,IAAKuE,EAAW,UAAW9D,EAAQ,aAAc4C,CAAO,CAAM,CAC3H,EACA,kBAAC,OAAI,UAAW5C,EAAQ,aACpB,kBAAC,aAAU,CAAC,UAAW,OAAQ,UAAWA,EAAQ,cAC9C,kBAAC,cAAW,KAAK,QACb,QAAS,IAAMwD,EAAc,EAAI,GAEjC,kBAACwD,EAAA,QAAQ,IAAC,CACd,EACClE,IACG,kBAAC,UAAO,CAAC,MAAOvD,EAAE,oBAAoB,GAClC,kBAAC,WACG,kBAAC,aAAU,CAAC,KAAK,QAAQ,SAAU,CAAC8C,EAAO,QAASkB,EAAA,EAChD,kBAACsD,EAAA,QAAS,CAAC,UAAW7G,EAAQ,mBAAoB,CACtD,CACJ,CACJ,EAEJ,kBAAC,UAAO,CAAC,MAAOT,EAAE,cAAc,GAC5B,kBAAC,WACG,kBAAC,aAAU,CAAC,KAAK,QAAQ,SAAU,CAAC8C,EAAO,QAASzB,GAAK,CACrDA,EAAE,gBAAgB,EAClB8C,EAAO,kBAAkBtB,CAAG,EACvB,MAAMxB,GAAK,OAAO,MAAM,mBAAmBA,GAAG,CAAC,CACxD,GACI,kBAACqG,EAAA,EAAU,IAAC,CAChB,CACJ,CACJ,EACCnE,IAAcoD,IACX,kBAAC,UAAO,CAAC,MAAO,GAAG3G,EAAE,UAAU,KAAK2G,IAAA,EAChC,kBAAC,aAAU,CAAC,KAAK,QAAQ,QAAS,IAAMD,GAAsB,EAAI,GAC9D,kBAAC,SAAM,CAAC,UAAW,aAAWjG,EAAQ,YAAaA,EAAQkG,EAAa,CAAC,GACpEnD,GAAgBmD,EAAa,CAClC,CACJ,CACJ,EAEH,CAAC7D,GAAS,CAACK,EAAgB,kBAAC,UAAO,CAAC,MAAOnD,EAAE,QAAQ,GAClD,kBAAC,aAAU,CAAC,KAAK,QAAQ,QAASsD,CAAA,EAC9B,kBAACqE,GAAA,QAAU,IAAC,CAChB,CACJ,EAAa,kBAAC,OAAI,UAAWlH,EAAQ,YAAa,EAElD,kBAAC,UAAO,CAAC,MAAOT,EAAE,MAAM,GACpB,kBAAC,aAAU,CAAC,KAAK,QAAQ,QAAS,IAAM+G,GAAO,GAC3C,kBAAC,UAAQ,IAAC,CACd,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,EAEAnE,GAAS,UAAY,CACjB,EAAG,SACH,aAAc,WACd,cAAe,QACnB,EAEA,UAAe,cAAWnD,EAAM,EAAEmD,EAAQ,ECxtB1C,MAAM,GAAY,iGACZ,GAAiB,iEAEjB,GAASlD,IAAU,CACrB,KAAM,CACF,SAAU,WACV,OAAQ,EACR,WAAYA,EAAM,QAAQ,WAAW,QACrC,UAAS,GAET,SAAU,SACV,WAAY,8BACZ,UAAW,CACP,UAAW,EACf,CACJ,EACA,WAAY,CACR,YAAa,EACb,UAAW,GACX,MAAO,OACP,SAAU,IACV,QAAS,OACT,QAAS,gBACT,SAAU,WACV,eAAgB,gBAChB,WAAY,iBAChB,EACA,IAAK,CACD,MAAO,GACP,OAAQ,GACR,OAAQ,SACR,SAAU,WACV,UAAW,CACP,QAAS,KACT,SAAU,WACV,OAAQ,EACR,IAAK,EACL,KAAM,EACN,MAAO,OACP,OAAQ,OACR,WAAY,8CACZ,eAAgB,QAChB,gBAAiB,MACrB,CACJ,EACA,SAAU,CACN,OAAQ,IACR,gBAAiB,2BAEjB,MAAO,OACP,OAAQ,EACR,UAAW,OACX,OAAQ,EACR,WAAY,cACZ,eAAgB,gBAChB,QAAS,OACT,cAAe,QACnB,EACA,YAAa,CACT,OAAQ,CACZ,EACA,WAAY,CACR,UAAW,YACf,EACA,oBAAqB,CACjB,KAAM,CACF,OAAQ,CACZ,EACA,OAAQ,CACJ,OAAQ,GACZ,CACJ,EACA,YAAa,CACT,WAAYA,EAAM,QAAQ,WAAW,QACrC,QAAS,GACT,QAAS,OACT,eAAgB,eACpB,EACA,OAAQ,CACJ,QAAS,MACb,EACA,MAAO,CACH,UAAW,SACX,MAAO,EACP,OAAQ,MAKZ,EACA,KAAM,CACF,MAAO,OACP,WAAY,OACZ,SAAU,GACV,YAAa,EACb,UAAW,SACX,MAAOA,EAAM,QAAQ,OAAS,OAAS,OAAS,OAChD,WAAY,SACZ,SAAU,SACV,aAAc,UAClB,EACA,cAAe,CACX,OAAQ,OACR,QAAS,OACT,MAAO,OAEP,eAAgB,gBAChB,QAAS,kBACT,WAAY,QAChB,EACA,YAAa,CAET,WAAY,OACZ,QAAS,MACb,EACA,aAAc,CACV,QAAS,OACT,eAAgB,eACpB,EACA,YAAa,CACT,MAAO,EACX,EACA,MAAO,CACH,WAAY,UACZ,SAAU,WACV,SAAU,QACd,EACA,QAAS,CACL,MAAO,GACP,OAAQ,GACR,WAAY,qHACZ,OAAQ,EACR,SAAU,WACV,IAAK,GAET,EACA,oBAAqB,CACjB,KAAM,CACF,IAAK,GACT,EACA,OAAQ,CACJ,IAAK,MACT,CACJ,EACA,IAAK,CACD,WAAY,SAEhB,EACA,iBAAkB,CACd,KAAM,CACF,QAAS,CACb,EACA,OAAQ,CACJ,QAAS,EACb,CACJ,EACA,KAAM,CACF,KAAM,EACN,WAAY,SACZ,SAAU,SACV,aAAc,UAClB,EAEA,gBAAiB,CACb,SAAU,OACV,WAAY,EACZ,eAAgB,SAChB,QAAS,OACT,OAAQ,OACR,SAAU,UAEd,EACA,aAAc,CACV,OAAQ,oBACZ,EACA,YAAa,CACT,QAAS,OAAQ,OAAQ,UACzB,aAAc,CACV,gBAAiB,qBACjB,WAAY,CACR,SAAU,WACV,MAAO,EACP,IAAK,GACL,QAAS,WACT,SAAU,GACV,OAAQ,OACR,MAAO,OACP,MAAO,OACX,EACA,UAAW,8CACf,CACJ,EACA,qBAAsB,CAClB,KAAM,CACF,QAAS,CACb,EACA,OAAQ,CACJ,QAAS,EACb,CACJ,EACA,aAAc,CACV,SAAU,WACV,SAAU,QACd,EACA,wCAAyC,CACrC,WAAY,CACR,QAAS,iBACb,CACJ,EACA,uCAAwC,CACpC,UAAW,CACP,QAAS,iBACb,CACJ,EACA,uCAAwC,CACpC,UAAW,CACP,QAAS,iBACb,CACJ,EACA,uCAAwC,CACpC,YAAa,CACT,cAAe,QACnB,CACJ,EACA,MAAO,CACH,IAAK,EACT,EACA,UAAW,CACP,MAAOA,EAAM,QAAQ,QAAQ,IACjC,EACA,sBAAuB,CACnB,QAAS,OACT,WAAY,QAChB,EACA,iBAAkB,CACd,QAAS,OACT,WAAY,QAChB,EACA,aAAc,CACV,OAAQ,YACR,QAAS,UACT,aAAc,EACd,QAAS,OACT,WAAY,SACZ,OAAQ,UACR,WAAY,kBACZ,UAAW,CACP,WAAY,WAChB,CACJ,EACA,iBAAkB,CACd,OAAQ,GACR,MAAO,GACP,YAAa,EACjB,EACA,MAAO,CACH,gBAAiBgC,EAAA,MACrB,EACA,KAAM,CACF,gBAAiBC,EAAK,QAAL,IACrB,EACA,KAAM,CACF,gBAAiBC,GAAA,MACrB,EACA,MAAO,CACH,gBAAiBC,GAAA,MACrB,EACA,YAAa,CACT,MAAO,GACP,OAAQ,EACZ,EACA,YAAa,CACT,QAAS,MACb,EACA,mBAAoB,CAChB,UAAW,eACf,EACA,SAAU,CACN,UAAW,mCACf,EACA,+BAAgC,CAC5B,KAAM,CACF,MAAO,SACX,EACA,MAAO,CACH,MAAO,SACX,EACA,OAAQ,CACJ,MAAOnC,EAAM,QAAQ,OAAS,OAAS,OAAS,MACpD,CACJ,CACJ,GAEA,IAAI,GAAc,IACd,GAAa,IACb,GAAW,MACX,GAAW,MACX,GAAc,IAEd,GAAgB,EAChB,GAAgB,EAChB,GAAmB,EAEvB,MAAMkI,MAAc,cAAYlI,IAAW,CACvC,MAAO,CACH,MAAO,GACP,IAAK,GACL,QAAS,OACb,CACJ,EAAE,EAAE,OAAK,EAEH,GAAgB,CAAC,QAAS,QAAS,OAAQ,OAAQ,OAAO,EAEhE,SAAS,GAAgB6B,EAAIiB,EAAM,CAC/B,MAAMC,EAAalB,EAAG,UAAU,MAAM,GAAG,EACnCmB,EAAMD,EAAW,QAAQD,CAAI,EAC/BE,IAAQ,KACRD,EAAW,OAAOC,EAAK,CAAC,EACxBnB,EAAG,UAAYkB,EAAW,KAAK,GAAG,GAEtCA,EAAW,KAAKD,CAAI,EAEpB,WAAWG,GAAepB,EAAG,UAAYoB,EAAa,IAAKF,EAAW,KAAK,GAAG,CAAC,CACnF,CAEA,MAAMoF,GAAU,CAAC,CACb,IAAAhF,EACA,MAAAC,EACA,UAAAC,EACA,QAAAtC,EACA,MAAAuC,EACA,cAAAG,EACA,YAAAC,EACA,OAAAC,EACA,qBAAAC,EACA,WAAAC,EACA,gBAAAC,EACA,WAAAC,GACA,OAAAC,GACA,YAAAE,GACA,SAAAD,GACA,MAAAE,EACA,UAAAC,EACA,KAAAtB,GACA,qBAAAuB,EACA,sBAAAC,EACA,cAAAC,GACA,oBAAAC,GACA,OAAAC,EACA,aAAAC,GACA,EAAApE,CACJ,IAAM,CACF,KAAM,CAACqE,GAAcC,CAAW,KAAI,YAAS,EAAK,EAC5C,CAACiC,GAASC,EAAU,KAAI,YAAS,EAAK,EAEtCjC,KAAY,UAAO,EACnBC,KAAa,UAAO,EACpBC,KAAS,UAAO,EAChBC,KAAS,UAAO,EAChBC,KAAY,UAAO,EAEnBC,GAAkB,CAACC,EAAGC,IAAU,CAClC,GAAaA,GAASA,EAAM,MAAQ,KAAO,SAAIA,EAAM,MAAQ,IACzDP,EAAU,UACVA,EAAU,QAAQ,UAAY,GAAG,QAAgB,KACjD,GAAgBA,EAAU,QAAS9D,EAAQ,QAAQ,EAE3D,EAEMsE,GAAmB,CAACF,EAAGG,IAAW,CACpC,GAAcA,GAAUA,EAAO,MAAQ,KAAO,SAAIA,EAAO,MAAQ,IAC7DT,EAAU,UACVA,EAAU,QAAQ,UAAY,GAAG,QAAgB,KACjD,GAAgBA,EAAU,QAAS9D,EAAQ,QAAQ,EAE3D,EAEMwE,GAAc,CAACC,EAAOC,IACpB,CAACD,GAASA,EAAM,MAAQ,MAAQA,EAAM,MAAQ,OACvC,KAAOC,EAAO,IAAMA,EAAO,IAC3Bf,GAAa,OAAO,aACpBc,EAAM,IAAI,SAAS,EAAE,QAAQ,IAAK,GAAG,GAAKC,EAAO,IAAMA,EAAO,IAE9DD,EAAM,KAAOC,EAAO,IAAMA,EAAO,IAI1CC,EAAc,CAAC5C,EAAM0C,IAAU,CACjC,IAAIG,EACA7C,EAAK,SAAS,UAAU,EACxB,IAAgB0C,GAAA,YAAAA,EAAO,MAAO,EACvB1C,EAAK,SAAS,UAAU,EAC/B,IAAgB0C,GAAA,YAAAA,EAAO,MAAO,EACvB1C,EAAK,SAAS,aAAa,IAClC,IAAmB0C,GAAA,YAAAA,EAAO,MAAO,GAGrCG,EAAW,GAAgB,GAAiB,KAAO,GAE/Cb,EAAW,UACPa,GACAb,EAAW,QAAQ,aAAa,QAASxE,EAAE,oCAAoC,CAAC,EAChFwE,EAAW,QAAQ,UAAU,IAAI,SAAS,IAE1CA,EAAW,QAAQ,gBAAgB,OAAO,EAC1CA,EAAW,QAAQ,UAAU,OAAO,SAAS,GAGzD,EAEMc,GAAU,CAACT,EAAGK,IAAU,CAC1B,GAAWD,GAAYC,EAAO,GAAG,EAC7BT,EAAO,UACPA,EAAO,QAAQ,UAAY,GAC3B,GAAgBA,EAAO,QAAShE,EAAQ,QAAQ,EAExD,EAEM8E,GAAU,CAACV,EAAGK,IAAU,CAC1B,GAAWD,GAAYC,EAAO,GAAG,EAC7BR,EAAO,UACPA,EAAO,QAAQ,UAAY,GAC3B,GAAgBA,EAAO,QAASjE,EAAQ,QAAQ,EAExD,EAEM+E,GAAa,CAACX,EAAGK,IAAU,CAC7B,GAAIA,GAASA,EAAM,IAAK,CACpB,MAAMO,EAAI,KAAK,MAAMP,EAAM,IAAO,KAAU,EACtCQ,EAAI,KAAK,MAAMR,EAAM,KAAO,KAAO,IAAM,IAAI,EACnD,GAAcO,EAAI,GAAGA,KAAKC,KAAO,GAAGA,IACxC,CACIf,EAAU,UACVA,EAAU,QAAQ,UAAY,GAC9B,GAAgBA,EAAU,QAASlE,EAAQ,QAAQ,EAE3D,EAEMkF,GAAmBC,GAAiB,CACtC,GAAI,CAACA,EACD,MAAO,GAEX,KAAM,CAAE,OAAAC,CAAO,EAAID,EACnB,IAAIE,EAAQ,EACZ,GAAI,CAACD,GAAU,CAACA,EAAO,OACnB,OAAOC,EAEX,GAAI,OAAO,KAAKD,EAAO,OAAO,UAAU,EAAE,OAAQ,CAC9C,IAAIE,EAAMF,EAAO,OAAO,WACxB,OAAO,KAAKE,CAAG,EAAE,QAAQC,IACrB,OAAO,KAAKD,EAAIC,EAAO,EAAE,SAAS,EAAE,QAAQnB,IAAKiB,GAAO,CAAC,CACjE,CAEA,OAAOA,CACX,EAEM,CAACG,GAAWC,EAAY,KAAI,YAAS,CAAE,cAAe,CAAC,EAAG,MAAO,CAAE,CAAC,EAEpEC,GAAe,CAAC3D,EAAM0C,IAAU,CAC9BA,IACAkB,GAAiBlB,EAAM,GAAG,EAC1BmB,GAAuBnB,EAAM,GAAG,EAExC,KAEA,aAAU,IAAM,CACZ,MAAMoB,EAAsBV,GACxBA,GAAiBA,EAAc/C,CAAG,GAAKqD,GAAa,CAAE,cAAeN,EAAc/C,CAAG,EAAG,MAAO8C,GAAiBC,EAAc/C,CAAG,CAAC,CAAE,CAAC,EAE1I,OAAAe,GAAY,4BAA4B0C,CAAmB,EAE3D1C,GAAY,iBAAiBf,CAAG,EAC3B,KAAK+C,GAAiB,CACnBA,GAAiBA,EAAc/C,CAAG,GAAKqD,GAAa,CAAE,cAAeN,EAAc/C,CAAG,EAAG,MAAO8C,GAAiBC,EAAc/C,CAAG,CAAC,CAAE,CAAC,CAC1I,CAAC,EAELsB,EAAO,eAAe,GAAGtB,eAAkB+B,EAAe,EAC1DT,EAAO,eAAe,GAAGtB,gBAAmBkC,EAAgB,EAE5DZ,EAAO,eAAe,GAAGtB,QAAWyC,EAAO,EAC3CnB,EAAO,eAAe,GAAGtB,QAAW0C,EAAO,EAC3CpB,EAAO,eAAe,GAAGtB,WAAc2C,EAAU,EAEjDrB,EAAO,eAAe,GAAGtB,aAAgBuC,CAAW,EACpDjB,EAAO,eAAe,GAAGtB,aAAgBuC,CAAW,EACpDjB,EAAO,eAAe,GAAGtB,gBAAmBuC,CAAW,EAEvDjB,EAAO,eAAe,GAAGtB,aAAgBsD,EAAY,EAE9C,IAAM,CACTvC,GAAY,8BAA8B0C,CAAmB,EAC7DnC,EAAO,iBAAiB,GAAGtB,eAAkB+B,EAAe,EAC5DT,EAAO,iBAAiB,GAAGtB,gBAAmBkC,EAAgB,EAE9DZ,EAAO,iBAAiB,GAAGtB,QAAWyC,EAAO,EAC7CnB,EAAO,iBAAiB,GAAGtB,QAAW0C,EAAO,EAC7CpB,EAAO,iBAAiB,GAAGtB,WAAc2C,EAAU,EAEnDrB,EAAO,iBAAiB,GAAGtB,aAAgBuC,CAAW,EACtDjB,EAAO,iBAAiB,GAAGtB,aAAgBuC,CAAW,EACtDjB,EAAO,iBAAiB,GAAGtB,gBAAmBuC,CAAW,EAEzDjB,EAAO,iBAAiB,GAAGtB,aAAgBsD,EAAY,CAC3D,CAEJ,EAAG,CAACtD,EAAKsB,EAAQ1D,CAAO,CAAC,EAGzB,KAAM,CAACgG,GAAoBC,EAAqB,KAAI,YAAS,EAAK,EAC5D,CAACC,GAAeP,EAAgB,KAAI,YAAS,IAAI,EACjD,CAACQ,GAAqBP,EAAsB,KAAI,YAAS,IAAI,EAE7DQ,IAAoB1D,GAAiBL,IAAUgE,GAAA,wBAAyBhD,EAAWf,CAAS,EAE5FgE,GAAS,IAAM,CACjB,IAAIC,EAAO,CAAC,EACZvC,EAAO,SAAcuC,EAAK,KAAK,QAAQvC,EAAO,QAAQ,WAAW,EACjEC,EAAO,SAAcsC,EAAK,KAAK,QAAQtC,EAAO,QAAQ,WAAW,EACjEC,EAAU,SAAWqC,EAAK,KAAK,GAAGhH,EAAE,QAAQ,MAAM2E,EAAU,QAAQ,WAAW,EAC/EqC,EAAK,KAAK,GAAGhH,EAAE,WAAW,MAAM+C,GAAW,EAC3CiE,EAAK,KAAK,GAAGhH,EAAE,WAAW,MAAM8D,GAAW,EAC3CS,EAAU,SAAWyC,EAAK,KAAK,GAAGhH,EAAE,QAAQ,MAAMuE,EAAU,QAAQ,WAAW,EAE/EZ,IAAY,OAAOA,IAAa,UAAY,OAAO,KAAKA,EAAQ,EAAE,IAAIsD,GAClED,EAAK,KAAK,GAAGhH,EAAEiH,CAAK,MAAMxD,GAAWwD,CAAK,EAAIxD,GAAWwD,CAAK,EAAEtD,GAASsD,CAAK,EAAGjH,CAAC,EAAI2D,GAASsD,CAAK,GAAK,MAAM,CAAC,EAEpH,wBAAsBD,EAAK,KAAK;AAAA,CAAI,CAAC,EACrC,OAAO,MAAMhH,EAAE,QAAQ,CAAC,CAC5B,EAEA,IAAIkH,GAAY,GACZC,GACAV,KACAU,GAAanH,EAAE,6BAA8BwC,EAAI,EACjD0E,GAAY,IAGhB,MAAME,GAAcF,GAAY,kBAACG,GAAA,GAC7B,MAAOF,GACP,KAAM,GACN,QAAStC,GAAK,CACN4B,KACAtC,EAAO,SAAS,GAAGtB,aAAgB+D,EAAmB,EACtDF,GAAsB,EAAK,EAEnC,EACA,QAAS7B,GAAK,CACN4B,KACAJ,GAAuBM,EAAa,EACpCD,GAAsB,EAAK,EAEnC,GACCD,IAAsB,kBAAC,cAAW,CAAC,UAAWhG,EAAQ,YAAa,QAAQ,UAAW,EACnF,kBAAC,aAAU,KAAET,EAAE,WAAW,CAAE,EAC5B,kBAAC,UACG,QAAQ,WACR,MAAO4G,GACP,UAAS,GACT,SAAUrF,GACN8E,GAAuB9E,EAAG,OAAO,KAAK,GAEzC,GAAc,IAAIA,GAAM,kBAAC,WAAQ,CAAC,IAAKA,EAAI,MAAOA,CAAA,EAC9CvB,EAAEuB,CAAE,CACT,CAAW,CACf,CACJ,EACCkF,IAAsB,kBAAC,cAAW,CAAC,UAAWhG,EAAQ,YAAa,QAAQ,UAAW,EACnF,kBAAC,iBAAc,KAAET,EAAE,gFAAgF,CAAE,EACrG,kBAAC,iBAAc,KAAEA,EAAE,iEAAiE,EAAE,kBAACsH,EAAA,QAAS,CAAC,UAAW7G,EAAQ,mBAAoB,CAAE,CAC9I,CACJ,EAAiB,KAEjB,OAAO,kBAAC,OACJ,MAAO,CAAE,OAAQ,aAAauC,GAAS,YAAa,aAAc,CAAE,EACpE,WAAYyD,GAAqB,KAAO,IAAMD,GAAW,EAAK,EAC9D,YAAaC,GAAqB,KAAO,IAAMD,GAAW,EAAI,EAC9D,YAAaC,GAAqB,KAAO,IAAMD,GAAW,EAAI,EAC9D,IAAK3D,EAAK,UAAW,aAAWpC,EAAQ,KAAMiD,GAASjD,EAAQ,OAAS,EAAE,GACzE2G,GACD,kBAAC,OAAI,UAAW,aAAW3G,EAAQ,YAAa,CAACqC,GAASrC,EAAQ,YAAY,EAAG,QAASgG,GAAqB,KAAO,IAAMnC,EAAYwD,GAAQ,CAACA,CAAI,GACjJ,kBAAC,OAAI,UAAWrH,EAAQ,cACpB,kBAAC,OAAI,UAAW,aAAWA,EAAQ,MAAOqC,EAAQrC,EAAQ,MAAQA,EAAQ,GAAG,EAAG,EAC/EqC,GAAS,kBAAC,OAAI,UAAWrC,EAAQ,QAAS,CAC/C,EACA,kBAAC,OACG,IAAK+D,EACL,MAAO,CAAE,WAAYxB,GAAS,SAAU,EACxC,UAAWvC,EAAQ,YACnB,kBAACmH,GAAA,CACG,MAAO5H,EAAE,qBAAqB,EAC9B,aAAciG,GAAU,MACxB,MAAM,QACN,QAAS5E,GAAK,CACVA,EAAE,gBAAgB,EAClB6C,GAAoB,CAAE,CAACrB,CAAG,EAAGoD,GAAU,aAAc,EAAG9B,EAAQtB,CAAG,CACvE,GAEA,kBAAC,YAAS,CAAC,UAAWpC,EAAQ,IAAK,UAAU,MAAM,MAAOoD,GAAS,mBAAoB,CAC3F,EACA,kBAAC,OAAI,MAAO,CAAE,MAAQb,GAAS,oBAAkBA,EAAO,EAAI,GAAM,SAAU,EAAG,UAAWvC,EAAQ,MAC7F+B,EACL,CACJ,EACA,kBAAC,cAAW,CAAC,UAAW/B,EAAQ,eAI5B,kBAAC,aAAU,CAAC,UAAW,aAAWA,EAAQ,KAAMA,EAAQ,SAAS,EAAG,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,OAChH,kBAAC,OAAI,IAAKgE,CAAA,EAAS,KAAM,CAC7B,EACA,kBAAC,aAAU,CAAC,UAAW,aAAWhE,EAAQ,KAAMA,EAAQ,SAAS,EAAG,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,OAChH,kBAAC,OAAI,IAAKiE,CAAA,EAAS,KAAM,CAC7B,EACA,kBAAC,aAAU,CAAC,UAAW,aAAWjE,EAAQ,KAAMA,EAAQ,SAAS,EAAG,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,OAChH,kBAAC,OAAI,IAAKkE,CAAA,EAAY,KAAM,CAChC,EACA,kBAAC,aAAU,CAAC,UAAW,aAAWlE,EAAQ,KAAMA,EAAQ,UAAU,EAAG,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,OACjH,kBAAC,OAAI,UAAW,aAAWoG,IAAoBpG,EAAQ,UAAWA,EAAQ,qBAAqB,GAC1FoG,GACG,kBAAC,UAAO,CAAC,MAAO7G,EAAE,QAAQ,GACtB,kBAAC,OACG,QAASqB,GAAK,CACVA,EAAE,gBAAgB,EAClB0C,EAAqB,CACzB,EACA,UAAWtD,EAAQ,cAEnB,kBAAC,cACG,UAAWA,EAAQ,iBACnB,KAAK,SAEL,kBAAC+G,GAAA,QAAW,IAAC,CACjB,EAAczE,CAClB,CACJ,EACAA,CACH,CACT,EACA,kBAAC,aAAU,CAAC,UAAW,aAAWtC,EAAQ,KAAMA,EAAQ,UAAU,EAAG,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,KAChHqD,CACL,EACA,kBAAC,aAAU,CAAC,UAAW,aAAWrD,EAAQ,KAAMA,EAAQ,SAAS,EAAG,QAAQ,QAAQ,MAAM,gBAAgB,UAAU,OAChH,kBAAC,OAAI,IAAK8D,CAAA,EAAYlB,CAAO,CACjC,EACA,kBAAC,OAAI,UAAW5C,EAAQ,aACpB,kBAAC,aAAU,CAAC,UAAW,OAAQ,UAAWA,EAAQ,cAC9C,kBAAC,cAAW,KAAK,QACb,QAASY,GAAK,CACVA,EAAE,gBAAgB,EAClB4C,GAAc,EAAI,CACtB,GAEA,kBAACwD,EAAA,QAAQ,IAAC,CACd,EAEClE,GACG,kBAAC,UAAO,CAAC,MAAOvD,EAAE,oBAAoB,GAClC,kBAAC,WACG,kBAAC,aAAU,CAAC,KAAK,QAAQ,SAAU,CAAC8C,EAAO,QAASzB,GAAK,CACrD2C,EAAsB,EACtB3C,EAAE,gBAAgB,CACtB,GACI,kBAACiG,EAAA,QAAS,CAAC,UAAW7G,EAAQ,mBAAoB,CACtD,CACJ,CACJ,EAEJ,kBAAC,UAAO,CAAC,MAAOT,EAAE,cAAc,GAC5B,kBAAC,WACG,kBAAC,aAAU,CAAC,KAAK,QAAQ,SAAU,CAAC8C,EAAO,QAASzB,GAAK,CACrDA,EAAE,gBAAgB,EAClB8C,EAAO,kBAAkBtB,CAAG,EACvB,MAAMxB,GAAK,OAAO,MAAM,mBAAmBA,GAAG,CAAC,CACxD,GACI,kBAACqG,EAAA,EAAU,IAAC,CAChB,CACJ,CACJ,EACCnE,GAAcoD,GACX,kBAAC,UAAO,CAAC,MAAO,GAAG3G,EAAE,UAAU,KAAK2G,IAAA,EAChC,kBAAC,aAAU,CAAC,KAAK,QAAQ,QAASoB,GAAS,CACvCA,EAAM,gBAAgB,EACtBrB,GAAsB,EAAI,CAC9B,GACI,kBAAC,SAAM,CAAC,UAAW,aAAWjG,EAAQ,YAAaA,EAAQkG,EAAa,CAAC,GACpEnD,EAAgBmD,EAAa,CAClC,CACJ,CACJ,EAAa,kBAAC,OAAI,UAAWlG,EAAQ,YAAa,EAEtD,kBAAC,UAAO,CAAC,MAAOT,EAAE,QAAQ,GACtB,kBAAC,YACG,kBAAC,cACG,KAAK,QACL,SAAU8C,GAASK,EACnB,MAAOL,GAASK,EAAgBnD,EAAE,0CAA0C,EAAI,GAChF,QAASqB,GAAK,CACViC,EAAqB,EACrBjC,EAAE,gBAAgB,CACtB,GAEA,kBAACsG,GAAA,QAAU,IAAC,CAChB,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,GACEtD,IAAgBkC,KAAY,OAAOnD,GAAgB,UACjD,kBAAC,OAAI,UAAW,aAAW3C,EAAQ,SAAW4D,GAAqC5D,EAAQ,WAA9BA,EAAQ,WAAgC,EAAG,QAASY,GAAKA,EAAE,gBAAgB,GACpI,kBAAC,cAAW,CAAC,UAAWZ,EAAQ,iBAC3B2C,EACD,kBAAC,UAAO,CAAC,MAAOpD,EAAE,MAAM,GACpB,kBAAC,aAAU,CAAC,KAAK,QAAQ,QAAS,IAAM+G,GAAO,EAAG,MAAO,CAAE,SAAU,WAAY,IAAK,EAAG,MAAO,CAAE,GAC9F,kBAAC,UAAQ,IAAC,CACd,CACJ,CACJ,EACA,kBAAC,OAAI,UAAWtG,EAAQ,YACxB,CACJ,CACR,CACJ,EAEAoH,GAAQ,UAAY,CAChB,EAAG,SACH,aAAc,WACd,cAAe,QACnB,EAEA,UAAe,cAAW,EAAM,EAAEA,EAAO,E,mHC5tBzC,MAAM,GAASnI,IAAU,CACrB,MAAO,CACH,OAAQ,mBACZ,EACA,GAAI,CACA,UAAW,QACf,EACA,OAAQ,CACJ,OAAQ,mBACZ,EACA,OAAQ,CACJ,UAAW,GACX,WAAYA,EAAM,QAAQ,CAAC,CAC/B,EACA,YAAa,CACT,MAAO,MACX,EACA,aAAc,CACV,QAAS,eACT,MAAO,EACX,EACA,SAAU,CACN,MAAO,GACX,EACA,UAAW,CACP,UAAW,EACf,EACA,iBAAkB,CACd,SAAU,OACV,QAAS,MACb,EACA,cAAe,CACX,MAAO,IACP,SAAU,GACd,EACA,SAAU,CACN,MAAO,OACP,SAAU,IACV,OAAQ,OACR,QAAS,MACb,EACA,YAAa,CACT,UAAW,EACf,EACA,UAAW,CACP,SAAU,GACd,EACA,UAAW,CACP,MAAO,MACX,EACA,KAAM,CACF,QAAS,MACb,EACA,MAAO,CACH,MAAO,OACP,OAAQ,OACR,QAAS,MACT,OAAQ,UACR,SAAU,WACV,IAAK,GACL,WAAY,gBACZ,UAAW,CACP,UAAW,eACf,EACA,WAAY,CACR,SAAU,WACV,KAAM,MACN,QAAS,KACT,OAAQ,OACR,MAAO,MACP,gBAAiB,UACjB,UAAW,eACf,EACA,UAAW,CACP,SAAU,WACV,KAAM,MACN,QAAS,KACT,OAAQ,OACR,MAAO,MACP,gBAAiB,UACjB,UAAW,gBACf,CACJ,EACA,MAAO,CACH,MAAO,EACX,EACA,oBAAqB,CACjB,SAAU,WACV,OAAQ,IACR,MAAO,CACX,EACA,YAAa,CACT,QAAS,UACb,CACJ,GAEA,MAAMsI,WAAiB,WAAU,CAC7B,YAAYpI,EAAO,CACf,MAAMA,CAAK,EAEX,KAAK,MAAQ,CACT,KAAM,KAAK,UAAU,KAAK,MAAM,IAAK,KAAM,CAAC,EAC5C,MAAO,GACP,QAAS,GACT,KAAM,OAAO,eAAiB,OAAO,cAAc,SAAS,KAAK,MAAM,YAAc,OAAS,UAAU,GAAK,QACjH,EAEA,KAAK,YAAc,KAAK,UAAU,KAAK,MAAM,IAAK,KAAM,CAAC,CAC7D,CAEA,cAAcqH,EAAO,CACjBA,EAAQA,GAAS,KAAK,MAAM,KAC5B,GAAI,CACA,MAAMlB,EAAM,KAAK,MAAMkB,CAAK,EAC5B,OAAAlB,EAAI,IAAM,KAAK,MAAM,IAAI,IAClBA,CACX,OAAS1E,EAAP,CACE,OAAO,IACX,CACJ,CAEA,SAAS4F,EAAO,CACZ,MAAMgB,EAAW,CAAE,KAAMhB,CAAM,EACzBiB,EAAO,KAAK,cAAcjB,CAAK,EACjCiB,GACAD,EAAS,QAAU,KAAK,cAAgB,KAAK,UAAUC,EAAM,KAAM,CAAC,EAChE,KAAK,MAAM,QACXD,EAAS,MAAQ,KAGrBA,EAAS,MAAQ,GAErB,KAAK,SAASA,CAAQ,CAC1B,CAEA,UAAW,CACP,GAAI,CACA,MAAMlC,EAAM,KAAK,MAAM,KAAK,MAAM,IAAI,EACtCA,EAAI,IAAM,KAAK,MAAM,IAAI,IACzB,KAAK,MAAM,QAAQA,CAAG,CAC1B,OAASlF,EAAP,CAEF,CACJ,CACA,cAAcqH,EAAM1F,EAAMyE,EAAO,CAC7BiB,EAAK,OAAO1F,CAAI,EAAIyE,EACpB,KAAK,SAAS,KAAK,UAAUiB,EAAM,KAAM,CAAC,CAAC,CAC/C,CACA,iBAAiBA,EAAM1F,EAAM,CACzB,OAAO0F,EAAK,OAAO1F,CAAI,EACvB,KAAK,SAAS,KAAK,UAAU0F,EAAM,KAAM,CAAC,CAAC,CAC/C,CACA,aAAaC,EAASC,EAAI,CACtB,KAAM,CAAE,EAAApI,EAAG,QAAAS,CAAQ,EAAI,KAAK,MAC5B,OAAO,gBAAC,OACJ,UAAWA,EAAQ,aACnB,gBAAC4H,EAAA,GACG,UAAW5H,EAAQ,UACnB,QAAQ,YACR,MAAM,YACN,QAAS2H,EACT,UAAW,gBAACE,GAAA,QAAO,IAAC,GACtBtI,EAAE,OAASmI,CAAO,CAAE,CAC1B,CACJ,CACA,gBAAgBA,EAASC,EAAI,CACzB,KAAM,CAAE,EAAApI,EAAG,QAAAS,CAAQ,EAAI,KAAK,MAC5B,OAAO,gBAAC8H,EAAA,EAAO,CAAC,MAAOvI,EAAE,UAAYmI,CAAO,GAAG,gBAAC,OAAI,UAAW1H,EAAQ,MAAO,QAAS2H,CAAA,CAAI,CAAE,CACjG,CACA,kBAAmB,CACf,GAAI,CACA,MAAMF,EAAO,KAAK,MAAM,KAAK,MAAM,IAAI,EACjC1H,EAAW,GACX,CAAE,QAAAC,EAAS,EAAAT,CAAE,EAAI,KAAK,MAC5B,OAAO,gBAAC,OAAI,UAAWS,EAAQ,kBAC3B,gBAAC,OAAI,UAAWA,EAAQ,eACnB,OAAOyH,EAAK,OAAO,OAAU,YAC1B,gBAACM,EAAA,GACG,QAAQ,WACR,SAAAhI,EACA,MAAOR,EAAE,OAAO,EAChB,UAAW,aAAWS,EAAQ,YAAaA,EAAQ,SAAS,EAC5D,UAAS,GACT,MAAOyH,EAAK,OAAO,MACnB,SAAW3G,GAAO,KAAK,cAAc2G,EAAM,QAAS3G,EAAG,OAAO,KAAK,EACvE,EACA,KAAK,aAAa,QAAS,IAAM,KAAK,cAAc2G,EAAM,QAAS,EAAE,CAAC,EAEzE,OAAOA,EAAK,OAAO,OAAU,YAC1B,gBAAC,OAAI,UAAWzH,EAAQ,MACpB,gBAAC+H,EAAA,GACG,QAAQ,WACR,SAAAhI,EACA,UAAW,aAAWC,EAAQ,YAAaA,EAAQ,KAAK,EACxD,MAAOT,EAAE,OAAO,EAChB,KAAK,QACL,MAAOkI,EAAK,OAAO,MACnB,SAAU3G,GAAM,KAAK,cAAc2G,EAAM,QAAS3G,EAAG,OAAO,KAAK,EAAG,EACvE,KAAK,gBAAgB,QAAS,IAAM,KAAK,iBAAiB2G,EAAM,OAAO,CAAC,CAC7E,EACA,KAAK,aAAa,QAAS,IAAM,KAAK,cAAcA,EAAM,QAAS,EAAE,CAAC,CAE9E,EACC,OAAOA,EAAK,OAAO,MAAS,YACzB,gBAAC,OAAI,UAAWzH,EAAQ,UACpB,gBAACd,GAAA,GACG,SAAAa,EACA,KAAI,GACJ,QAAS,IAAM,KACf,KAAM0H,EAAK,OAAO,KAClB,eAAgB,IAAM,KAAK,cAAcA,EAAM,OAAQ,EAAE,EACzD,SAAW7H,GAAW,KAAK,cAAc6H,EAAM,OAAQ7H,CAAM,EAC7D,EAAAL,CAAA,CACJ,EACC,KAAK,gBAAgB,OAAQ,IAAM,KAAK,iBAAiBkI,EAAM,MAAM,CAAC,CAC3E,EACA,gBAAC,OAAI,UAAWzH,EAAQ,UACnB,KAAK,aAAa,OAAQ,IAAM,KAAK,cAAcyH,EAAM,OAAQ,EAAE,CAAC,CACzE,CAER,CACJ,OAAS,EAAP,CACE,OAAO,gBAAC,WAAK,KAAK,MAAM,EAAE,oBAAoB,CAAE,CACpD,CACJ,CAEA,QAAS,CAGL,OAAO,gBAACO,GAAA,GACJ,QAAS,CAAE,MAAO,KAAK,MAAM,QAAQ,MAAO,EAC5C,KAAM,GACN,SAAS,KACT,UAAW,KAAK,MAAM,OAAS,UAAY,KAAK,MAAM,OAAS,UAC/D,WAAY,GACZ,QAAS,IAAM,KAAK,MAAM,QAAQ,EAClC,kBAAgB,0BAChB,mBAAiB,iCAEjB,gBAACC,GAAA,EAAW,CAAC,GAAG,2BAA2B,KAAK,MAAM,EAAE,oBAAoB,EAAE,KAAE,gBAAC,QAAK,UAAW,KAAK,MAAM,QAAQ,IAAK,KAAK,MAAM,IAAI,GAAI,CAAO,EACnJ,gBAACC,GAAA,EAAa,KAEN,KAAK,iBAAiB,CAE9B,EACA,gBAACC,GAAA,EAAa,KACV,gBAACP,EAAA,EAAM,CAAC,QAAQ,YAAY,SAAU,KAAK,MAAM,OAAS,CAAC,KAAK,MAAM,QAAS,QAAS,IAAM,KAAK,SAAS,EAAG,MAAM,UAAU,UAAW,gBAAC,WAAS,IAAC,GAAK,KAAK,MAAM,EAAE,OAAO,CAAE,EAChL,gBAACA,EAAA,EAAM,CAAC,QAAQ,YAAY,QAAS,IAAM,KAAK,MAAM,QAAQ,EAAG,MAAM,OAAO,UAAW,gBAAC,WAAS,IAAC,GAAK,KAAK,MAAM,EAAE,QAAQ,CAAE,CACpI,CACJ,CACJ,CACJ,CAEAL,GAAS,UAAY,CACjB,QAAS,WACT,OAAQ,WACR,IAAK,WACL,WAAY,SACZ,QAAS,oBACT,WAAY,WACZ,QAAS,WAET,EAAG,QACP,EAEA,UAAe,cAAW,EAAM,EAAEA,EAAQ,E,4hBCzQ1C,MAAMa,MAAY,cAAWnJ,IAAU,CACnC,KAAM,CAEF,MAAO,OACP,OAAQ,OACR,QAAS,OACT,cAAe,SACf,SAAU,OACV,QAAS,EACb,EACA,MAAO,CACH,SAAU,GACd,EACA,eAAgB,CACZ,QAAS,OACT,SAAU,QACd,EAMA,GAAI,CACA,WAAY,IACZ,SAAU,GACV,OAAQ,QACZ,EACA,GAAI,CACA,QAAS,WACT,SAAU,GACV,WAAY,IACZ,aAAc,EACd,WAAY,UACZ,MAAOA,EAAM,QAAQ,OAAS,OAAS,QAAU,OACrD,EACA,IAAK,CACD,QAAS,EACT,OAAO,EACP,SAAU,GACV,WAAY,IACZ,aAAc,EACd,WAAY,UACZ,MAAOA,EAAM,QAAQ,OAAS,OAAS,QAAU,OACrD,EACA,aAAc,CACV,SAAU,GACV,OAAQ,SACR,QAAS,CACL,eAAgB,OAChB,MAAO,SACX,CACJ,EACA,kBAAmB,CACf,SAAU,GACV,MAAO,OACX,EACA,mBAAoB,CAChB,SAAU,EACd,EACA,OAAQ,CACJ,MAAO,SACP,QAAS,CACL,eAAgB,OAChB,MAAO,SACX,CACJ,EACA,IAAK,CACD,WAAY,WACZ,WAAY,UACZ,QAAS,GACT,aAAc,EACd,SAAU,UACd,EACA,WAAY,CACR,MAAO,QACP,SAAU,WACV,MAAO,GACP,IAAK,CACT,EACA,QAAS,CACL,MAAO,WACX,EACA,iBAAiB,CACb,WAAY,UACZ,aAAc,EACd,iCAAkC,CAC9B,OAAQ,CACZ,CACJ,EACA,iBAAiB,CACb,QAAS,OACT,cAAe,QACnB,EACA,KAAM,CACF,gBAAiBA,EAAM,QAAQ,OAAS,OAAS,UAAY,UAC7D,QAAS,aACb,EACA,gBAAiB,CACb,MAAO,GACP,OAAQ,EACZ,CACJ,EAAE,EAEF,SAASoJ,GAAc9B,EAAM+B,EAAQC,EAAa,CAC9C,MAAMC,EAAQjC,EAAK,MAAM;AAAA,CAAI,EAC7B,IAAIkC,EAAW,CAAC,EACZC,EAAQ,GACZ,QAASC,EAAI,EAAGA,EAAIH,EAAM,OAAQG,IAAK,CACnC,MAAMC,EAAOJ,EAAMG,CAAC,EAAE,YAAY,EAC9BC,EAAK,WAAW,IAAI,IACpBF,EAAQE,EAAK,SAASN,EAAO,YAAY,CAAC,IAAM,CAACC,GAAe,CAACK,EAAK,SAASL,EAAY,YAAY,CAAC,IAGvGG,GACDD,EAAS,KAAKD,EAAMG,CAAC,CAAC,CAE9B,CAEA,OAAOF,EAAS,KAAK;AAAA,CAAI,CAC7B,CAEA,MAAMI,GAAqB,CAAC,CAAE,OAAAnF,EAAQ,OAAAoF,EAAQ,MAAA7J,EAAO,QAAA8J,EAAS,QAAAC,CAAQ,IAAM,CACxE,MAAMhJ,EAAUoI,GAAU,EACpB,CAACa,EAAQC,CAAS,KAAI,YAAS,IAAI,EACnC,CAACC,EAAUC,CAAW,KAAI,YAAS,EAAE,EACrC,CAACC,EAAIC,EAAK,KAAI,YAAS,EAAE,EAEzBC,GAAsBhD,GAAQ,CAChC,wBAAsBA,CAAI,EAC1B,OAAO,MAAM,SAAO,QAAQ,CAAC,CACjC,KAEA,aAAU,IAAM,EACX,CAAC4C,GAAY,CAACE,IAAO3F,EAAO,iBAAiBoF,CAAM,EAC/C,KAAKjJ,GAAQ,CACVA,EAAK,UAAYA,EAAK,WAAasJ,GAAYC,EAAYvJ,EAAK,QAAQ,EACxEA,EAAK,IAAMA,EAAK,KAAOwJ,GAAMC,GAAMzJ,EAAK,EAAE,EAE1C,MAAM,yEAAyE,mBAAiB,yBAAyB,EACpH,KAAK2J,GAAYA,EAAS,KAAK,CAAC,EAChC,KAAKC,GAAW,CACb,IAAIC,GAAM7J,EAAK,IAAMwJ,EACjBM,GAAa9J,EAAK,UAAYsJ,GAAU,QAAQ,MAAO,GAAG,EAC1DO,KAAQ,QACRD,EAAUpB,GAAcoB,EAAS,QAAS,SAAS,EAEnDA,EAAUpB,GAAcoB,EAAS,UAAW,OAAO,EAEvDA,EAAUA,EAAQ,QAAQ,sBAAuB,MAAME,GAAW,EAClEF,EAAUA,EAAQ,QAAQ,mBAAoB,MAAME,GAAW,EAC/DF,EAAUA,EAAQ,QAAQ,WAAYV,CAAO,EAC7CU,EAAUA,EAAQ,MAAM,WAAW,EACnC,MAAMG,EAAQ,CAAC,EACfH,EAAQ,QAAQI,IAAW,CACvB,GAAIA,GAAQ,SAAS,KAAK,EAAG,CACzB,GAAI,CAACC,GAAQvD,CAAI,EAAIsD,GAAQ,MAAM,KAAK,EACpCE,GAAQ,GACRD,GAAO,WAAW,QAAQ,IAC1BA,GAASA,GAAO,QAAQ,cAAe,EAAE,EACzCC,GAAQ,IAEZD,GAASA,GAAO,QAAQ,QAAS,EAAE,EAAE,QAAQ,MAAO,EAAE,EAClDC,GACAH,EAAM,KAAK,kBAAC,aAAU,CAAC,IAAK,IAAIA,EAAM,SAAU,QAAS,IAAML,GAAoBO,EAAM,GAAG,kBAACE,EAAA,QAAQ,IAAC,CAAE,CAAa,EAErHJ,EAAM,KAAK,kBAAChC,EAAA,GACR,IAAK,IAAIgC,EAAM,SACf,QAAQ,YACR,QAAS,IAAML,GAAoBO,EAAM,EACzC,UAAW,kBAACE,EAAA,QAAQ,IAAC,GACvB,SAAO,mBAAmB,CAAE,CAAS,EAE3CJ,EAAM,KAAKrD,CAAI,CACnB,MACIqD,EAAM,KAAKC,EAAO,CAE1B,CAAC,EAEDX,EAAUU,CAAK,CACnB,CAAC,CACT,CAAC,EACA,MAAMhJ,GACH,OAAO,MAAM,sCAAsCkI,OAAYlI,GAAG,CAAC,CAC/E,EAAG,CAACuI,EAAUE,EAAI3F,EAAQqF,EAASD,CAAM,CAAC,EAE1C,MAAMmB,GAAe,IAAM,oCAAGhB,EAAO,IAAI,CAAC1C,EAAMoC,IAAM,OAAOpC,GAAS,SAAWA,EAAO,kBAAC,MACrF,IAAK,KAAKoC,IACV,WAAY,CACR,GAAK,IAAkB,CAAlB,SAAC,MAAAuB,CAhNlB,EAgNiB,EAAU/K,GAAA,GAAV,EAAU,CAAT,SAAoB,yBAAC,aAAU,CAAC,UAAWa,EAAQ,gBAAiB,QAAS,IAAMuJ,GAAoBpK,GAAM,SAAS,CAAC,CAAC,GAAG,kBAAC6K,EAAA,QAAQ,IAAC,CAAE,GAE7I,EAAI,IAAkB,CAAlB,SAAC,MAAAE,CAlNjB,EAkNgB,EAAU/K,GAAA,GAAV,EAAU,CAAT,SAAoB,yBAAC,QAAE,MAAO,CAAE,MAAO,SAAU,GAAOA,EAAK,CAAE,GACpE,KAAO,IAA+C,CAA/C,SAAC,MAAA+K,EAAM,OAAAC,GAAQ,UAAAC,GAAW,SAAAC,CAnN7C,EAmNmB,EAAuClL,GAAA,GAAvC,EAAuC,CAAtC,OAAM,SAAQ,YAAW,aAAwB,yBAAC,WAAK,UAAWa,EAAQ,MAAUb,EAAK,EAAIkL,CAAS,EAClH,GAEC9D,CACL,CAAgB,CAAE,EAEZ+D,GAAa,IAAM,kBAAC,OAAI,CAAC,UAAWtK,EAAQ,MAC9C,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,+KAA+K,CAAE,EAE/N,kBAAC,MAAG,UAAWA,EAAQ,IAAK,SAAO,uCAAuC,CAAE,EAC5E,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,mFAAmF,EAAE,IAAC,kBAAC,KAAE,KAAK,uFAAuF,OAAO,UAAS,OAAK,EAAI,GAAC,EAC7P,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,sGAAsG,CAAE,EACrJqJ,IAAO,SAAW,oCACf,kBAAC,MAAG,UAAWrJ,EAAQ,IAAK,SAAO,6BAA6B,CAAE,EAClE,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,gCAAgC,CAAE,EAEhF,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,kEAAkE,CAAE,EAClH,kBAAC,OAAI,UAAWA,EAAQ,KACR,kBAAC,aAAU,CAAC,KAAK,QAAQ,QAAS,IAAM,CACpC,OAAO,MAAM,SAAO,QAAQ,CAAC,EAC7BuJ,GACI;AAAA;AAAA;AAAA;AAAA,UAKJ,CACJ,EAAG,UAAWvJ,EAAQ,YAClB,kBAACgK,EAAA,QAAQ,IAAC,CACd,EACA,kBAAC,OAAI,UAAWhK,EAAQ,mBAAmB,YAAU,EACrD,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,UAAQ,EACnD,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,YAAU,EACrD,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,SAAO,EAClD,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,kBAAgB,EAC3D,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,WAAS,CACxD,EACZ,kBAAC,OAAI,UAAW,aAAWA,EAAQ,kBAAkB,GAAI,SAAO,0GAA0G,CAAE,EAC5K,kBAAC,OAAI,UAAW,aAAWA,EAAQ,kBAAkB,GAAI,SAAO,sGAAsG,CAAE,EACxK,kBAAC,OAAI,UAAWA,EAAQ,KACR,kBAAC,cACG,KAAK,QACL,QAAS,IAAM,CACX,OAAO,MAAM,SAAO,QAAQ,CAAC,EAC7BuJ,GAAoB,+CAA+C,CACvE,EACA,UAAWvJ,EAAQ,YAEnB,kBAACgK,EAAA,QAAQ,IAAC,CACd,EACA,kBAAC,OAAI,UAAWhK,EAAQ,mBAAmB,+CAA6C,CAC5F,EACZ,kBAAC,OAAI,UAAW,aAAWA,EAAQ,kBAAkB,GAAI,SAAO,oDAAoD,CAAE,EAEtH,kBAAC,MAAG,UAAWA,EAAQ,IAAK,SAAO,kCAAkC,CAAE,EACvE,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,uHAAuH,CAAE,EAEvK,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,kEAAkE,CAAE,EAClH,kBAAC,OAAI,UAAWA,EAAQ,KACR,kBAAC,aAAU,CAAC,KAAK,QAAQ,QAAS,IAAM,CACpC,OAAO,MAAM,SAAO,QAAQ,CAAC,EAC7BuJ,GACI,MAAMJ,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAQtB,CACJ,EAAG,UAAWnJ,EAAQ,YAClB,kBAACgK,EAAA,QAAQ,IAAC,CACd,EACA,kBAAC,OAAI,UAAWhK,EAAQ,mBAAmB,MAAImJ,GAAY,eAAgB,EAC3E,kBAAC,OAAI,UAAWnJ,EAAQ,mBAAmB,YAAU,EACrD,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,UAAQ,EACnD,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,SAAO,EAClD,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,YAAU,EACrD,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,kBAAgB,EAC3D,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,WAAS,CACxD,EAEZ,kBAAC,OAAI,UAAW,aAAWA,EAAQ,kBAAkB,GAAI,SAAO,0GAA0G,CAAE,EAC5K,kBAAC,OAAI,UAAW,aAAWA,EAAQ,kBAAkB,GAAI,SAAO,+LAA+L,CAAE,CACrQ,EACCqJ,IAAO,SAAW,oCACf,kBAAC,MAAG,UAAWrJ,EAAQ,IAAK,SAAO,SAAS,CAAE,EAC9C,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,qIAAqI,EAAE,kBAAC,KAAE,KAAK,wCAAwC,OAAO,UAAS,uCAAqC,EAAK,SAAO,uLAAuL,CAAE,EAE/d,kBAAC,MAAG,UAAWA,EAAQ,IAAK,SAAO,8BAA8B,CAAE,EACnE,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,mNAAmN,CAAE,EACnQ,kBAAC,OAAI,UAAWA,EAAQ,KACR,kBAAC,cACG,KAAK,QACL,QAAS,IAAM,CACX,OAAO,MAAM,SAAO,QAAQ,CAAC,EAC7BuJ,GACI,OAAOJ,GAAY,gBAAgB,QAAQ,MAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAO1D,CACJ,EAEA,UAAWnJ,EAAQ,YAEnB,kBAACgK,EAAA,QAAQ,IAAC,CACd,EACA,kBAAC,OAAI,UAAWhK,EAAQ,mBAAmB,OAAKmJ,GAAY,gBAAgB,QAAQ,MAAO,IAAI,EAAE,IAAGA,EAAyD,KAA9C,SAAO,mCAAmC,CAAS,EAClK,kBAAC,OAAI,UAAWnJ,EAAQ,mBAAmB,YAAU,EACrD,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,YAAU,SAAO,8BAA8B,CAAE,EAC5F,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,cAAY,SAAO,mCAAmC,CAAE,EACnG,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,YAAU,EACrD,kBAAC,OAAI,UAAWA,EAAQ,mBAAmB,kBAAgB,CAC/D,EACZ,kBAAC,OAAI,UAAW,aAAWA,EAAQ,kBAAkB,GAAI,SAAO,uIAAuI,CAAE,CAC7M,EACA,kBAAC,YAAS,CAAC,MAAO,CAAE,WAAY,EAAG,GAC/B,kBAAC,oBACG,UAAWA,EAAQ,iBACnB,WAAY,kBAACuK,GAAA,QAAc,IAAC,GAE5B,kBAAC,MAAG,UAAWvK,EAAQ,KAAM,SAAO,mCAAmC,CAAE,CAC7E,EACA,kBAAC,oBACG,UAAWA,EAAQ,kBACnB,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,oEAAoE,CAAE,EACpH,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,6NAA6N,CAAE,EAE7Q,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,4KAA4K,CAAE,EAE5N,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,wGAAwG,CAAE,EAExJ,kBAAC,OAAI,UAAWA,EAAQ,oBAAqB,SAAO,mDAAmD,CAAE,EACzG,kBAAC,OAAI,UAAWA,EAAQ,KACR,kBAAC,cACG,KAAK,QACL,QAAS,IAAM,CACX,OAAO,MAAM,SAAO,QAAQ,CAAC,EAC7BuJ,GACI,MAAMF,IAAO,SAAWF,GAAY,gBAAgB,QAAQ,MAAO,IAAI,EAAKA,GAAY;AAAA,uDAE5F,CACJ,EACA,UAAWnJ,EAAQ,YAEnB,kBAACgK,EAAA,QAAQ,IAAC,CACd,EACA,kBAAC,OAAI,UAAWhK,EAAQ,mBAAmB,MAAIqJ,IAAO,SAAWF,GAAY,gBAAgB,QAAQ,MAAO,IAAI,EAAKA,GAAY,eAAiB,EAClJ,kBAAC,OAAI,UAAWnJ,EAAQ,mBAAmB,wDAAsD,CACrG,EACZ,kBAAC,OAAI,UAAWA,EAAQ,oBAAqB,SAAO,yEAAyE,CAAE,EAC/H,kBAAC,OAAI,UAAWA,EAAQ,cAAe,SAAO,uFAAuF,CAAE,CAC3I,CACJ,CACJ,EAEA,OAAO,kBAACgI,GAAA,GACA,QAAS,IAAMgB,EAAQ,EACvB,KAAM,GACN,QAAS,CAAE,MAAOhJ,EAAQ,KAAM,GAEhC,kBAAC,cAAW,KAAE,SAAO,oCAAoC,CAAE,EAC3D,kBAACkI,GAAA,EAAa,CAAC,UAAWe,EAAS,KAAOjJ,EAAQ,eAAgB,SAAQ,IACrEiJ,EAASgB,GAAa,EAAIK,GAAW,CAC1C,EACA,kBAACnC,GAAA,EAAa,KACV,kBAACP,EAAA,GACG,QAAQ,YACR,QAAS,IAAM,CACX,OAAO,KAAK,8EAA+E,QAAQ,EACnGoB,EAAQ,CACZ,EACA,MAAM,OACN,UAAW,kBAACwB,GAAA,QAAe,IAAC,GAE3B,SAAO,sBAAsB,CAClC,EACA,kBAAC5C,EAAA,GACG,QAAQ,YACR,QAAS,IAAMoB,EAAQ,EACvB,MAAM,UACN,UAAW,kBAACyB,GAAA,QAAS,IAAC,GAErB,SAAO,IAAI,CAChB,CACJ,CACJ,CACR,EAEA5B,GAAmB,UAAY,CAC3B,OAAQ,WACR,OAAQ,WACR,MAAO,WACP,QAAS,WACT,QAAS,QACb,EAEA,OAAeA,G,2IClZf,MAAM,GAAS5J,IAAU,CACrB,MAAO,CACH,OAAW,OACX,UAAW,OACX,SAAW,OACX,SAAW,OACX,QAAWA,EAAM,QAAQ,CAAC,CAC9B,EACA,YAAa,CACT,MAAO,eAAeA,EAAM,QAAQ,CAAC,KACrC,aAAcA,EAAM,QAAQ,CAAC,EAC7B,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAYA,EAAM,QAAQ,CAAC,CAC/B,EACA,IAAK,CACD,MAAO,IACP,YAAaA,EAAM,QAAQ,CAAC,CAChC,CACJ,GAEA,MAAMyL,WAA2B,WAAU,CACvC,YAAYvL,EAAO,CACf,MAAMA,CAAK,EAEX,MAAMwL,EAAW,KAAK,MAAM,UAAY,CAAC,EAEzC,KAAK,MAAQ,CACT,cAAuBA,EAAS,eAAyB,EACzD,SAAuBA,EAAS,UAAyB,GACzD,mBAAuBA,EAAS,oBAAyB,KACzD,kBAAuBA,EAAS,mBAAyB,IACzD,sBAAuBA,EAAS,uBAAyB,IACzD,QAAuBA,EAAS,SAAyB,GACzD,mBAAuBA,EAAS,oBAAyB,GACzD,aAAuBA,EAAS,cAAyB,IACzD,cAAuBA,EAAS,eAAyB,EAC7D,EAEA,KAAK,YAAW,aAAU,CAC9B,CAEA,mBAAoB,CAChB,KAAK,SAAS,SAAW,KAAK,SAAS,QAAQ,MAAM,CACzD,CAEA,UAAW,CACP,KAAK,MAAM,SAAS,CAChB,cAAuB,KAAK,MAAM,cAClC,SAAuB,KAAK,MAAM,SAClC,mBAAuB,KAAK,MAAM,mBAClC,kBAAuB,KAAK,MAAM,kBAClC,QAAuB,KAAK,MAAM,QAClC,sBAAuB,KAAK,MAAM,sBAClC,QAAuB,KAAK,MAAM,QAClC,mBAAuB,KAAK,MAAM,mBAClC,aAAuB,KAAK,MAAM,aAClC,cAAuB,KAAK,MAAM,aACtC,CAAC,CACL,CAEA,QAAS,CACL,OAAO,gBAACC,GAAA,EAAK,CAAC,UAAY,KAAK,MAAM,QAAQ,KAAM,EAC/C,gBAACC,EAAA,GAAI,CAAC,KAAI,GAAC,UAAY,KAAK,MAAM,QAAQ,YAAa,EACnD,gBAACA,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACtB,gBAACA,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC9C,EAAA,GACG,QAAQ,WACR,MAAQ,KAAK,MAAM,EAAE,WAAW,EAChC,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,UAAY,KAAK,MAAM,YAAY,QAAQ,eAAgB,EAAE,EAChF,SAAW,GAAK,KAAK,SAAU,CAAC,SAAU,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACjF,WAAa,KAAK,MAAM,EAAE,sFAAsF,EACpH,CACJ,EACA,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC9C,EAAA,GACG,QAAQ,WACR,MAAQ,KAAK,MAAM,EAAE,2BAA2B,EAChD,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,kBACnB,KAAK,SACL,IAAM,IACN,SAAW,GAAK,KAAK,SAAU,CAAC,kBAAmB,SAAS,EAAE,OAAO,MAAO,EAAE,CAAE,EAAG,IAAM,KAAK,SAAS,CAAC,EACxG,WAAa,KAAK,MAAM,EAAE,kHAAkH,EAChJ,CACJ,EACA,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC9C,EAAA,GACG,QAAQ,WACR,MAAQ,KAAK,MAAM,EAAE,qCAAqC,EAC1D,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,mBACnB,KAAK,SACL,IAAM,IACN,SAAW,GAAK,KAAK,SAAU,CAAC,mBAAoB,SAAS,EAAE,OAAO,MAAO,EAAE,CAAE,EAAG,IAAM,KAAK,SAAS,CAAC,EACzG,WAAa,KAAK,MAAM,EAAE,0FAA0F,EACxH,CACJ,EACA,gBAAC8C,EAAA,GAAI,CAAC,KAAI,GAAC,UAAY,KAAK,MAAM,QAAQ,WAAY,EAClD,gBAACC,EAAA,GACG,QACI,gBAACC,GAAA,GACG,QAAU,KAAK,MAAM,QACrB,SAAW,GAAK,KAAK,SAAU,CAAE,QAAS,EAAE,OAAO,OAAQ,EAAG,IAAM,KAAK,SAAS,CAAC,EACvF,EAEJ,MAAQ,KAAK,MAAM,EAAE,cAAc,EACvC,EACA,gBAAC,WAAM,KAAK,MAAM,EAAE,mFAAmF,CAAG,CAC9G,EACA,gBAACF,EAAA,GAAI,CAAC,KAAI,GAAC,UAAY,KAAK,MAAM,QAAQ,WAAY,EAClD,gBAACC,EAAA,GACG,QACI,gBAACC,GAAA,GACG,QAAU,KAAK,MAAM,mBACrB,SAAW,GAAK,KAAK,SAAU,CAAC,mBAAoB,EAAE,OAAO,OAAQ,EAAG,IAAM,KAAK,SAAS,CAAC,EACjG,EAEJ,MAAQ,KAAK,MAAM,EAAE,wBAAwB,EACjD,EACA,gBAAC,WAAM,KAAK,MAAM,EAAE,uDAAuD,CAAG,CAClF,EACA,gBAACF,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC9C,EAAA,GACG,QAAQ,WACR,MAAQ,KAAK,MAAM,EAAE,+BAA+B,EACpD,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,cACnB,KAAK,SACL,SAAW,GAAK,KAAK,SAAU,CAAC,cAAe,SAAS,EAAE,OAAO,MAAO,EAAE,CAAE,EAAG,IAAM,KAAK,SAAS,CAAC,EACpG,WAAa,KAAK,MAAM,EAAE,IAAI,EAClC,CACJ,EACA,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACN,gBAACA,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,MAAM,UAAY,KAAK,MAAM,QAAQ,WAAY,EACvE,gBAACA,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC9C,EAAA,GACG,QAAQ,WACR,MAAQ,KAAK,MAAM,EAAE,sCAAsC,EAC3D,UAAY,KAAK,MAAM,QAAQ,IAC/B,MAAQ,KAAK,MAAM,aACnB,KAAK,SACL,SAAW,GAAK,KAAK,SAAU,CAAC,aAAc,SAAS,EAAE,OAAO,MAAO,EAAE,CAAE,EAAG,IAAM,KAAK,SAAS,CAAC,EACnG,WAAa,KAAK,MAAM,EAAE,IAAI,EAClC,CACJ,EACA,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC9C,EAAA,GACG,QAAQ,WACR,MAAQ,KAAK,MAAM,EAAE,oCAAoC,EACzD,UAAY,KAAK,MAAM,QAAQ,IAC/B,MAAQ,KAAK,MAAM,cACnB,KAAK,SACL,SAAW,GAAK,KAAK,SAAU,CAAC,cAAe,SAAS,EAAE,OAAO,MAAO,EAAE,CAAE,EAAG,IAAM,KAAK,SAAS,CAAC,EACpG,WAAa,KAAK,MAAM,EAAE,IAAI,EAClC,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CAEA2C,GAAmB,UAAY,CAC3B,EAAG,SACH,SAAU,oBACV,SAAU,sBACV,YAAa,UACjB,EAEA,UAAeM,GAAA,SAAU,KAAE,cAAW,EAAM,EAAEN,EAAkB,CAAC,E,UC3KjE,MAAM,GAASzL,IAAU,CACrB,MAAO,CACH,OAAW,OACX,UAAW,OACX,SAAW,OACX,SAAW,OACX,QAAWA,EAAM,QAAQ,CAAC,CAC9B,EACA,YAAa,CACT,MAAO,eAAeA,EAAM,QAAQ,CAAC,KACrC,aAAcA,EAAM,QAAQ,CAAC,EAC7B,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAYA,EAAM,QAAQ,CAAC,CAC/B,EACA,IAAK,CACD,MAAO,IACP,YAAaA,EAAM,QAAQ,CAAC,CAChC,CACJ,GAEA,MAAMgM,WAA8B,WAAU,CAC1C,YAAY9L,EAAO,CACf,MAAMA,CAAK,EAEX,MAAMwL,EAAW,KAAK,MAAM,UAAY,CAAC,EAEzC,KAAK,MAAQ,CACT,QAAWA,EAAS,SAAY,GAChC,OAAWA,EAAS,QAAY,GAChC,SAAW,EACf,EAEAA,EAAS,UAAY,KAAK,MAAM,OAAO,QAAQA,EAAS,QAAQ,EAC3D,KAAKO,GACF,KAAK,SAAS,CAAE,SAAUA,CAAU,CAAC,CAAC,EAE9C,KAAK,YAAW,aAAU,CAC9B,CAEA,mBAAoB,CAChB,KAAK,SAAS,SAAW,KAAK,SAAS,QAAQ,MAAM,CACzD,CAEA,UAAW,CACP,MAAM1D,EAAW,CACb,QAAS,KAAK,MAAM,QACpB,OAAS,KAAK,MAAM,MACxB,EAEI,KAAK,MAAM,SACX,KAAK,MAAM,OAAO,QAAQ,KAAK,MAAM,QAAQ,EACxC,KAAK2D,GAAe,CACjB3D,EAAS,SAAW2D,EACpB,KAAK,MAAM,SAAS3D,CAAQ,CAChC,CAAC,EAEL,KAAK,MAAM,SAASA,CAAQ,CAEpC,CAEA,QAAS,CACL,OAAO,gBAACoD,GAAA,EAAK,CAAC,UAAY,KAAK,MAAM,QAAQ,KAAM,EAC/C,gBAAC,QAAK,UAAY,KAAK,MAAM,QAAQ,KAAO,WAAU,GAAC,aAAa,OAChE,gBAACC,EAAA,GAAI,CAAC,KAAI,GAAC,UAAY,KAAK,MAAM,QAAQ,YAAa,EACnD,gBAACA,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACtB,gBAACA,EAAA,GAAI,CAAC,KAAI,GAAC,UAAY,KAAK,MAAM,QAAQ,WAAY,EAClD,gBAACC,EAAA,GACG,QACI,gBAACC,GAAA,GACG,QAAU,KAAK,MAAM,QACrB,SAAW,GAAK,KAAK,SAAU,CAAE,QAAS,EAAE,OAAO,OAAQ,EAAG,IAAM,KAAK,SAAS,CAAC,EACvF,EAEJ,MAAQ,KAAK,MAAM,EAAE,yBAAyB,EAClD,EACA,gBAAC,WAAM,KAAK,MAAM,EAAE,wIAAwI,CAAE,CAClK,EACA,gBAACF,EAAA,GAAI,CAAC,KAAI,GAAC,UAAY,KAAK,MAAM,QAAQ,WAAY,EAClD,gBAACC,EAAA,GACG,QACI,gBAACC,GAAA,GACG,QAAU,KAAK,MAAM,OACrB,SAAW,GAAK,KAAK,SAAU,CAAC,OAAQ,EAAE,OAAO,OAAQ,EAAG,IAAM,KAAK,SAAS,CAAC,EACrF,EAEJ,MAAQ,KAAK,MAAM,EAAE,eAAe,EACxC,EACA,gBAAC,WAAM,KAAK,MAAM,EAAE,0CAA0C,CAAG,CACrE,EACE,KAAK,MAAM,OAAS,gBAACF,EAAA,GAAI,CAAC,KAAI,IAC5B,gBAAC9C,EAAA,GACG,QAAQ,WACR,MAAQ,KAAK,MAAM,EAAE,qBAAqB,EAC1C,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,SACnB,KAAK,WACL,WAAY,CACR,aAAc,eACd,KAAM,CACF,aAAc,KAClB,CACJ,EACA,aAAa,MACb,SAAW,GAAK,KAAK,SAAU,CAAC,SAAU,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACrF,CACJ,EAAU,IACd,CACJ,CACJ,CACJ,CACJ,CACJ,CAEAkD,GAAsB,UAAY,CAC9B,EAAG,SACH,SAAU,oBACV,SAAU,sBACV,OAAQ,UACZ,EAEA,UAAeD,GAAA,SAAU,KAAE,cAAW,EAAM,EAAEC,EAAqB,CAAC,E,6FChHpE,MAAM,GAAShM,IAAU,CACrB,MAAO,CACH,OAAW,OACX,UAAW,OACX,SAAW,OACX,SAAW,OACX,QAAWA,EAAM,QAAQ,CAAC,CAC9B,EACA,YAAa,CACT,MAAO,IACP,aAAcA,EAAM,QAAQ,CAAC,EAC7B,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAYA,EAAM,QAAQ,CAAC,CAC/B,EACA,WAAY,CACR,gBAAiB,0BACjB,OAAQ,8BACR,aAAcA,EAAM,QAAQ,CAAC,CACjC,EACA,iBAAkB,CACd,WAAY,oBACZ,MAAO,OACP,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAY,EACZ,cAAe,EACf,UAAW,GACX,WAAY,EAChB,EACA,QAAS,CACL,QAAS,EACT,SAAU,GACV,MAAOA,EAAM,QAAQ,OAAS,OAAS,UAAY,SACvD,CACJ,GAEMmM,GAAwB,CAC1B,aAAc,CACV,WAAY,EACZ,sBAAuB,IAC3B,EACA,WAAY,CACR,WAAY,IACZ,oBAAqB,GACzB,CACJ,EAEA,MAAMC,WAA4B,WAAU,CACxC,YAAYlM,EAAO,CACf,MAAMA,CAAK,EAEX,MAAMwL,EAAa,KAAK,MAAM,UAAY,CAAC,EAC3CA,EAAS,QAAUA,EAAS,SAAW,CACnC,UAAW,GACX,gBAAiB,IACjB,gBAAiB,GACjB,GAAI,EACJ,OAAQ,CACZ,EACAA,EAAS,OAAUA,EAAS,QAAU,CAClC,SAAU,GACV,MAAO,GACP,MAAO,GACP,OAAQ,IACR,KAAM,EACV,EACAA,EAAS,aAAeA,EAAS,cAAgBS,GACjDT,EAAS,aAAa,aAAeA,EAAS,aAAa,cAAgBS,GAAsB,aACjGT,EAAS,aAAa,WAAaA,EAAS,aAAa,YAAcS,GAAsB,WAE7F,KAAK,MAAQ,CACT,KAAyBT,EAAS,MAA2B,OAC7D,KAAyB,MAAM,QAAQA,EAAS,IAAI,EAAIA,EAAS,KAAK,KAAK,GAAG,EAAKA,EAAS,MAAQ,YACpG,KAAyBA,EAAS,MAA2B,KAC7D,YAAyBA,EAAS,aAA2B,GAC7D,QAAyBA,EAAS,SAA2B,GAC7D,eAAyBA,EAAS,gBAA2B,IAC7D,kBAAyBA,EAAS,mBAA2B,IAC7D,kBAAyBA,EAAS,QAAQ,WAAmBA,EAAS,MAAQ,GAC9E,wBAAyBA,EAAS,QAAQ,iBAAmB,IAC7D,wBAAyBA,EAAS,QAAQ,iBAAmB,GAC7D,WAAyBA,EAAS,QAAQ,IAAmB,EAC7D,eAAyBA,EAAS,QAAQ,QAAmB,EAC7D,gBAAyBA,EAAS,OAAO,UAAoB,GAC7D,aAAyBA,EAAS,OAAO,OAAoB,GAC7D,aAAyBA,EAAS,OAAO,OAAoB,GAC7D,cAAyBA,EAAS,OAAO,QAAoB,IAC7D,YAAyBA,EAAS,OAAO,MAAoB,GAC7D,qCAAsCA,EAAS,aAAa,aAAa,YAAc,EACvF,gDAAiDA,EAAS,aAAa,aAAa,uBAAyB,KAC7G,mCAAoCA,EAAS,aAAa,WAAW,YAAc,IACnF,4CAA6CA,EAAS,aAAa,WAAW,qBAAuB,IACrG,OAAyB,MAAM,QAAQA,EAAS,IAAI,IAAMA,EAAS,MAAQ,IAAI,MAAM,QAAQ,IAAMA,EAAS,MAAQ,IAAI,SAAS,GAAG,EAEpI,IAAyB,CAAC,UAAW,WAAW,EAChD,QAAyB,GACzB,kBAAyB,GACzB,cAAyB,GACzB,eAAyBA,EAAS,MAA2B,MACjE,EAEA,KAAK,YAAW,aAAU,EAE1B,KAAK,MAAM,OAAO,eAAe,KAAK,MAAM,WAAW,EAClD,KAAKW,GAAQ,CACV,MAAMC,EAAM,CAAC,GAAGD,CAAI,EACpB,CAACC,EAAI,SAAS,SAAS,GAAKA,EAAI,KAAK,SAAS,EAC9C,CAACA,EAAI,SAAS,WAAW,GAAKA,EAAI,KAAK,WAAW,EAClD,IAAIC,EAAS,KAAK,MAAM,KAAK,MAAM,QAAQ,IAAM,KAAK,MAAM,MAAQ,IAAI,SAAS,GAAG,EAChF,CAACA,GAAU,CAACD,EAAI,SAASA,CAAG,IAC5BC,EAAS,IAEb,KAAK,SAAS,CAAE,IAAAD,EAAK,QAAS,GAAO,OAAAC,CAAO,CAAC,CACjD,CAAC,CACT,CAEA,mBAAoB,CAChB,KAAK,SAAS,SAAW,KAAK,SAAS,QAAQ,MAAM,CACzD,CAEA,UAAW,CACP,MAAMb,EAAW,CACb,KAAqB,KAAK,MAAM,KAChC,KAAqB,KAAK,MAAM,KAChC,KAAqB,SAAS,KAAK,MAAM,KAAM,EAAE,EACjD,YAAqB,KAAK,MAAM,YAChC,eAAqB,SAAS,KAAK,MAAM,eAAgB,EAAE,EAC3D,kBAAqB,SAAS,KAAK,MAAM,kBAAmB,EAAE,EAC9D,QAAqB,KAAK,MAAM,QAChC,QAAS,CACL,UAAiB,KAAK,MAAM,mBAAqB,KACjD,gBAAiB,SAAS,KAAK,MAAM,wBAAyB,EAAE,EAChE,gBAAiB,SAAS,KAAK,MAAM,wBAAyB,EAAE,EAChE,GAAiB,SAAS,KAAK,MAAM,WAAY,EAAE,EACnD,OAAiB,SAAS,KAAK,MAAM,eAAgB,EAAE,CAC3D,EACA,OAAQ,CACJ,SAAiB,KAAK,MAAM,gBAC5B,MAAiB,SAAS,KAAK,MAAM,aAAc,EAAE,EACrD,MAAiB,SAAS,KAAK,MAAM,aAAc,EAAE,EACrD,OAAiB,SAAS,KAAK,MAAM,cAAe,EAAE,EACtD,KAAiB,KAAK,MAAM,WAChC,EACA,aAAc,CACV,aAAc,CACV,WAAY,SAAS,KAAK,MAAM,qCAAsC,EAAE,EACxE,sBAAuB,SAAS,KAAK,MAAM,gDAAiD,EAAE,CAClG,EACA,WAAY,CACR,WAAY,SAAS,KAAK,MAAM,mCAAoC,EAAE,EACtE,oBAAqB,SAAS,KAAK,MAAM,4CAA6C,EAAE,CAC5F,CACJ,CACJ,EAEIA,EAAS,aAAa,aAAa,WAAa,IAChDA,EAAS,aAAa,aAAa,WAAa,GAGhDA,EAAS,aAAa,aAAa,sBAAwB,IAC3DA,EAAS,aAAa,aAAa,sBAAwB,GAG3DA,EAAS,aAAa,WAAW,WAAa,IAC9CA,EAAS,aAAa,WAAW,WAAa,GAG9CA,EAAS,aAAa,WAAW,oBAAsB,IACvDA,EAAS,aAAa,WAAW,oBAAsB,GAG3D,KAAK,MAAM,SAASA,CAAQ,CAChC,CAEA,eAAgB,CACZ,OAAI,KAAK,MAAM,kBACJ,gBAAC,WACJ,MAAO,KAAK,MAAM,EAAE,gBAAgB,EACpC,KAAM,KAAK,MAAM,EAAE,gBAAgB,EACnC,QAASvF,GAAU,CACf,GAAIA,EAAQ,CACR,IAAIqG,EAEA,KAAK,MAAM,gBAAkB,QAC7BA,EAAO,KAEPA,EAAO,KAEX,KAAK,SAAS,CAAC,KAAM,KAAK,MAAM,cAAe,kBAAmB,GAAO,KAAAA,CAAI,EACzE,IAAM,KAAK,SAAS,CAAC,CAC7B,MACI,KAAK,SAAS,CAAC,kBAAmB,EAAK,CAAC,CAEhD,EACJ,EAEO,IAEf,CAEA,QAAS,CACL,OAAO,gBAACb,GAAA,EAAK,CAAC,UAAY,KAAK,MAAM,QAAQ,KAAM,EAC9C,KAAK,cAAc,EACpB,gBAACC,EAAA,GAAI,CAAC,KAAI,GAAC,UAAW,aAAW,KAAK,MAAM,QAAQ,aAAc,KAAK,MAAM,QAAQ,UAAU,GAC3F,gBAAC,MAAG,UAAW,KAAK,MAAM,QAAQ,iBAAkB,MAAO,KAAK,MAAM,EAAE,0DAA0D,GAAI,KAAK,MAAM,EAAE,aAAa,CAAE,EAClK,gBAAC,KAAE,UAAW,KAAK,MAAM,QAAQ,SAAU,KAAK,MAAM,EAAE,oBAAoB,CAAE,EAC9E,gBAACA,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACtB,gBAACA,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC/C,EAAA,EAAO,CAAC,MAAO,KAAK,MAAM,EAAE,gBAAgB,GACzC,gBAAC4D,GAAA,EAAW,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,QAAQ,YAC5D,gBAACC,GAAA,EAAU,KAAE,KAAK,MAAM,EAAE,MAAM,CAAE,EAClC,gBAACC,GAAA,GACG,QAAQ,WACR,MAAO,KAAK,MAAM,KAClB,SAAU,GAAK,CACX,GAAI,EAAE,OAAO,QAAU,KAAK,MAAM,eAC9B,KAAK,SAAS,CAAE,cAAe,EAAE,OAAO,MAAO,kBAAmB,EAAK,CAAC,MACrE,CACH,IAAIH,EAEA,EAAE,OAAO,QAAU,QACnBA,EAAO,KAEPA,EAAO,KAEX,KAAK,SAAS,CAAC,KAAM,EAAE,OAAO,MAAO,KAAAA,CAAI,EAC7C,IAAM,KAAK,SAAS,CAAC,CACrB,CACJ,GAEA,gBAACI,EAAA,EAAQ,CAAC,MAAM,SAAQ,YAAU,EAClC,gBAACA,EAAA,EAAQ,CAAC,MAAM,QAAQ,KAAK,MAAM,EAAE,MAAM,CAAE,EAC7C,gBAACA,EAAA,EAAQ,CAAC,MAAM,SAAQ,OAAK,CACjC,CACJ,CACJ,CACJ,EAEA,gBAAChB,EAAA,GAAI,CAAC,KAAI,GAAC,MAAO,CAAE,YAAa,CAAE,GAC/B,gBAACC,EAAA,GACG,QACI,gBAACgB,GAAA,GACG,QAAS,KAAK,MAAM,OACpB,SAAU,GAAK,KAAK,SAAS,CAAE,OAAQ,EAAE,OAAO,OAAQ,EAAG,IAAM,KAAK,SAAS,CAAC,EACpF,EAEJ,MAAO,KAAK,MAAM,EAAE,uCAAuC,EAC/D,CACJ,EAEA,gBAACjB,EAAA,GAAI,CAAC,KAAI,IACL,KAAK,MAAM,OACR,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,KAClB,KAAK,OACL,SAAU,GAAK,KAAK,SAAS,CAAE,KAAM,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC5E,MAAO,KAAK,MAAM,EAAE,iBAAiB,EACrC,WAAY,KAAK,MAAM,EAAE,sDAAsD,EACnF,EAEA,gBAAC2D,GAAA,EAAW,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,QAAQ,YAC5D,gBAACC,GAAA,EAAU,KAAE,KAAK,MAAM,EAAE,iBAAiB,CAAE,EAC7C,gBAACC,GAAA,GACG,QAAQ,WACR,MAAO,KAAK,MAAM,KAClB,SAAU,GAAK,KAAK,SAAS,CAAE,KAAM,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,GAE1E,KAAK,MAAM,IAAI,IAAIG,GAAM,gBAACF,EAAA,EAAQ,CAAC,IAAKE,EAAI,MAAOA,CAAA,EAAKA,IAAO,UAAY,YAAa,KAAK,MAAM,EAAE,eAAe,KAAQA,CAAG,CAAW,CAChJ,CACJ,CAER,EAEA,gBAAClB,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,KAClB,KAAK,SACL,IAAK,EACL,IAAK,MACL,SAAU,GAAK,KAAK,SAAS,CAAE,KAAM,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC5E,MAAO,KAAK,MAAM,EAAE,MAAM,EAC9B,CACJ,EAEC,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACnE,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,QAClB,WAAY,KAAK,MAAM,EAAE,sDAAsD,EAC/E,SAAU,GAAK,KAAK,SAAS,CAAE,QAAS,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC/E,MAAO,KAAK,MAAM,EAAE,gBAAgB,EACxC,CACJ,EAAU,KAEV,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,kBAClB,KAAK,WACL,WAAY,KAAK,MAAM,EAAE,UAAU,EACnC,WAAY,CACR,aAAc,eACd,KAAM,CACF,aAAc,KAClB,CACJ,EACA,aAAa,MACb,SAAU,GAAK,KAAK,SAAS,CAAE,kBAAmB,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACzF,MAAO,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,EAAE,gBAAgB,EAAI,KAAK,MAAM,EAAE,qBAAqB,EAC5G,CACJ,CACJ,CACJ,EACA,gBAAC8C,EAAA,GAAI,CAAC,KAAI,GAAC,UAAW,KAAK,MAAM,QAAQ,cACrC,gBAACA,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACrB,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,QAAU,gBAACA,EAAA,GAAI,CAAC,KAAI,IACnE,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,eAClB,WAAY,KAAK,MAAM,EAAE,IAAI,EAC7B,KAAK,SACL,IAAK,IACL,SAAU,GAAK,KAAK,SAAS,CAAE,eAAgB,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACtF,MAAO,KAAK,MAAM,EAAE,iBAAiB,EACzC,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACpE,gBAACa,GAAA,EAAW,CAAC,UAAU,WAAW,QAAQ,WAAW,UAAW,KAAK,MAAM,QAAQ,aAC/E,gBAACM,GAAA,EAAS,KACN,gBAAClB,EAAA,GACG,QACI,gBAACC,GAAA,GACG,QAAS,KAAK,MAAM,YACpB,SAAU,GAAK,KAAK,SAAU,CAAE,YAAa,EAAE,OAAO,OAAQ,EAAG,IAAM,KAAK,SAAS,CAAC,EAC1F,EAEJ,MAAO,KAAK,MAAM,EAAE,eAAe,EACvC,CACJ,EACA,gBAACkB,GAAA,EAAc,KAAE,KAAK,MAAM,EAAE,+EAA+E,CAAE,CACnH,CACJ,EAAU,KAET,KAAK,MAAM,OAAS,OAAS,gBAACpB,EAAA,GAAI,CAAC,KAAI,IACpC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,kBAClB,WAAY,KAAK,MAAM,EAAE,yDAAyD,EAClF,KAAK,SACL,IAAK,IACL,SAAU,GAAK,KAAK,SAAS,CAAE,kBAAmB,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACzF,MAAO,KAAK,MAAM,EAAE,qBAAqB,EAC7C,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACtC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,wBAClB,KAAK,SACL,WAAY,KAAK,MAAM,EAAE,2CAA2C,EACpE,SAAU,GAAK,KAAK,SAAS,CAAE,wBAAyB,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC/F,MAAO,KAAK,MAAM,EAAE,qBAAqB,EAC7C,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACtC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,wBAClB,KAAK,SACL,WAAY,KAAK,MAAM,EAAE,sCAAsC,EAC/D,SAAU,GAAK,KAAK,SAAS,CAAE,wBAAyB,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC/F,MAAO,KAAK,MAAM,EAAE,qBAAqB,EAC7C,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACtC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,WAClB,KAAK,SACL,WAAY,KAAK,MAAM,EAAE,oBAAoB,EAC7C,SAAU,GAAK,KAAK,SAAS,CAAE,WAAY,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAClF,MAAO,KAAK,MAAM,EAAE,WAAW,EACnC,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACtC,gBAACa,GAAA,EAAW,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,QAAQ,YAC5D,gBAACC,GAAA,EAAU,KAAE,KAAK,MAAM,EAAE,eAAe,CAAE,EAC3C,gBAACC,GAAA,GACG,QAAQ,WACR,MAAO,KAAK,MAAM,eAClB,SAAU,GAAK,KAAK,SAAS,CAAE,eAAgB,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,GAEtF,gBAACC,EAAA,EAAQ,CAAC,MAAO,GAAG,MAAI,EACxB,gBAACA,EAAA,EAAQ,CAAC,MAAO,GAAG,MAAI,EACxB,gBAACA,EAAA,EAAQ,CAAC,MAAO,GAAG,MAAI,CAC5B,EACA,gBAACI,GAAA,EAAc,KAAE,KAAK,MAAM,EAAE,oBAAoB,CAAE,CACxD,CACJ,EAAU,KAET,KAAK,MAAM,OAAS,QAAU,gBAACpB,EAAA,GAAI,CAAC,KAAI,IACrC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,qCAClB,KAAK,SACL,WAAY,CAAE,IAAK,CAAE,EACrB,WAAY,KAAK,MAAM,EAAE,iFAAiF,EAC1G,SAAU,GAAK,KAAK,SAAS,CAAE,qCAAsC,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC5G,MAAO,KAAK,MAAM,EAAE,2BAA2B,EACnD,CACJ,EAAU,KAET,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACrC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAO,KAAK,MAAM,gDAClB,KAAK,SACL,WAAY,CAAE,IAAK,CAAE,EACrB,WAAY,KAAK,MAAM,EAAE,uGAAuG,EAChI,SAAU,GAAK,KAAK,SAAS,CAAE,gDAAiD,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACvH,MAAO,KAAK,MAAM,EAAE,wCAAwC,EAChE,CACJ,EAAU,KAET,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACrC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,mCAClB,KAAK,SACL,WAAY,CAAE,IAAK,CAAE,EACrB,WAAY,KAAK,MAAM,EAAE,8DAA8D,EACvF,SAAU,GAAK,KAAK,SAAS,CAAE,mCAAoC,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC1G,MAAO,KAAK,MAAM,EAAE,wBAAwB,EAChD,CACJ,EAAU,KAET,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACrC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,4CAClB,KAAK,SACL,WAAY,CAAE,IAAK,CAAE,EACrB,WAAY,KAAK,MAAM,EAAE,4HAA4H,EACrJ,SAAU,GAAK,KAAK,SAAS,CAAE,4CAA6C,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACnH,MAAO,KAAK,MAAM,EAAE,8BAA8B,EACtD,CACJ,EAAU,KAET,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACnE,gBAACa,GAAA,EAAW,CAAC,UAAU,WAAW,QAAQ,WAAW,UAAW,KAAK,MAAM,QAAQ,aAC/E,gBAACM,GAAA,EAAS,KACN,gBAAClB,EAAA,GACG,QACI,gBAACC,GAAA,GACG,QAAS,KAAK,MAAM,gBACpB,SAAU,GAAK,KAAK,SAAU,CAAE,gBAAiB,EAAE,OAAO,OAAQ,EAAG,IAAM,KAAK,SAAS,CAAC,EAC9F,EAEJ,MAAO,KAAK,MAAM,EAAE,sBAAsB,EAC9C,CACJ,EACA,gBAACkB,GAAA,EAAc,KAAE,KAAK,MAAM,EAAE,2DAA2D,CAAE,CAC/F,CACJ,EAAU,MAER,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,UAAY,CAAC,KAAK,MAAM,gBAAkB,gBAACpB,EAAA,GAAI,CAAC,KAAI,IACpG,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,aAClB,KAAK,SACL,WAAY,KAAK,MAAM,EAAE,2GAA2G,EACpI,SAAU,GAAK,KAAK,SAAS,CAAE,aAAc,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACpF,MAAO,KAAK,MAAM,EAAE,iBAAiB,EACzC,CACJ,EAAU,MAER,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,UAAY,CAAC,KAAK,MAAM,gBAAkB,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACpG,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,aAClB,KAAK,SACL,WAAY,KAAK,MAAM,EAAE,yHAAyH,EAClJ,SAAU,GAAK,KAAK,SAAS,CAAE,aAAc,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACpF,MAAO,KAAK,MAAM,EAAE,cAAc,EACtC,CACJ,EAAU,MAER,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,UAAY,CAAC,KAAK,MAAM,gBAAkB,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACpG,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,cAClB,KAAK,SACL,WAAY,KAAK,MAAM,EAAE,kGAAkG,EAC3H,SAAU,GAAK,KAAK,SAAS,CAAE,cAAe,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACrF,MAAO,KAAK,MAAM,EAAE,WAAW,EACnC,CACJ,EAAU,MAER,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,UAAY,CAAC,KAAK,MAAM,gBAAkB,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACpG,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,YAClB,WAAY,KAAK,MAAM,EAAE,mHAAmH,EAC5I,SAAU,GAAK,KAAK,SAAS,CAAE,YAAa,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACnF,MAAO,KAAK,MAAM,EAAE,MAAM,EAC9B,CACJ,EAAU,IACd,CACJ,CACJ,CACJ,CACJ,CAEAsD,GAAoB,UAAY,CAC5B,EAAG,SACH,SAAU,oBACV,SAAU,sBACV,YAAa,UACjB,EAEA,UAAe,aAAU,KAAE,cAAW,EAAM,EAAEA,EAAmB,CAAC,E,sBC7hBlE,MAAM,GAASpM,IAAU,CACrB,MAAO,CACH,OAAW,OACX,UAAW,OACX,SAAW,OACX,SAAW,OACX,QAAWA,EAAM,QAAQ,CAAC,CAC9B,EACA,YAAa,CACT,MAAO,IACP,aAAcA,EAAM,QAAQ,CAAC,EAC7B,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAYA,EAAM,QAAQ,CAAC,CAC/B,EACA,WAAY,CACR,gBAAiB,0BACjB,OAAQ,8BACR,aAAcA,EAAM,QAAQ,CAAC,CACjC,EACA,iBAAkB,CACd,WAAY,oBACZ,MAAO,OACP,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAY,EACZ,cAAe,EACf,UAAW,GACX,WAAY,EAChB,EACA,QAAS,CACL,QAAS,EACT,SAAU,GACV,MAAOA,EAAM,QAAQ,OAAS,OAAS,UAAY,SACvD,CACJ,GAEM,GAAwB,CAC1B,aAAc,CACV,WAAY,EACZ,sBAAuB,IAC3B,EACA,WAAY,CACR,WAAY,IACZ,oBAAqB,GACzB,CACJ,EAEA,MAAM,WAA4B,WAAU,CACxC,YAAYE,EAAO,CACf,MAAMA,CAAK,EAEX,MAAMwL,EAAa,KAAK,MAAM,UAAY,CAAC,EAC3CA,EAAS,QAAUA,EAAS,SAAW,CACnC,UAAW,GACX,gBAAiB,IACjB,gBAAiB,GACjB,GAAI,EACJ,OAAQ,CACZ,EACAA,EAAS,OAAUA,EAAS,QAAU,CAClC,SAAU,GACV,MAAO,GACP,MAAO,GACP,OAAQ,IACR,KAAM,EACV,EACAA,EAAS,aAAeA,EAAS,cAAgB,GACjDA,EAAS,aAAa,aAAeA,EAAS,aAAa,cAAgB,GAAsB,aACjGA,EAAS,aAAa,WAAaA,EAAS,aAAa,YAAc,GAAsB,WAE7F,KAAK,MAAQ,CACT,KAAyBA,EAAS,MAA2B,OAC7D,KAAyB,MAAM,QAAQA,EAAS,IAAI,EAAIA,EAAS,KAAK,KAAK,GAAG,EAAKA,EAAS,MAAQ,YACpG,KAAyBA,EAAS,MAA2B,IAC7D,eAAyBA,EAAS,gBAA2B,IAC7D,kBAAyBA,EAAS,mBAA2B,IAC7D,QAAyBA,EAAS,SAA2B,GAC7D,kBAAyBA,EAAS,QAAQ,WAAmBA,EAAS,MAAQ,GAC9E,wBAAyBA,EAAS,QAAQ,iBAAmB,IAC7D,wBAAyBA,EAAS,QAAQ,iBAAmB,GAC7D,WAAyBA,EAAS,QAAQ,IAAmB,EAC7D,eAAyBA,EAAS,QAAQ,QAAmB,EAC7D,gBAAyBA,EAAS,OAAO,UAAoB,GAC7D,aAAyBA,EAAS,OAAO,OAAoB,GAC7D,aAAyBA,EAAS,OAAO,OAAoB,GAC7D,cAAyBA,EAAS,OAAO,QAAoB,IAC7D,YAAyBA,EAAS,OAAO,MAAoB,GAC7D,qCAAsCA,EAAS,aAAa,aAAa,YAAc,EACvF,gDAAiDA,EAAS,aAAa,aAAa,uBAAyB,KAC7G,mCAAoCA,EAAS,aAAa,WAAW,YAAc,IACnF,4CAA6CA,EAAS,aAAa,WAAW,qBAAuB,IACrG,OAAyB,MAAM,QAAQA,EAAS,IAAI,IAAMA,EAAS,MAAQ,IAAI,MAAM,QAAQ,IAAMA,EAAS,MAAQ,IAAI,SAAS,GAAG,EAEpI,IAAyB,CAAC,UAAW,WAAW,EAChD,QAAyB,GACzB,kBAAyB,GACzB,cAAyB,GACzB,eAAyBA,EAAS,MAA2B,MACjE,EAEA,KAAK,YAAW,aAAU,EAE1B,KAAK,MAAM,OAAO,eAAe,KAAK,MAAM,WAAW,EAClD,KAAKW,GAAQ,CACV,MAAMC,EAAM,CAAC,GAAGD,CAAI,EACpB,CAACC,EAAI,SAAS,SAAS,GAAKA,EAAI,KAAK,SAAS,EAC9C,CAACA,EAAI,SAAS,WAAW,GAAKA,EAAI,KAAK,WAAW,EAClD,KAAK,SAAS,CAAE,IAAAA,EAAK,QAAS,EAAM,CAAC,CACzC,CAAC,CACT,CAEA,mBAAoB,CAChB,KAAK,SAAS,SAAW,KAAK,SAAS,QAAQ,MAAM,CACzD,CAEA,UAAW,CACP,MAAMZ,EAAW,CACb,KAAqB,KAAK,MAAM,KAChC,KAAqB,KAAK,MAAM,KAChC,KAAqB,SAAS,KAAK,MAAM,KAAM,EAAE,EACjD,YAAqB,KAAK,MAAM,YAChC,eAAqB,SAAS,KAAK,MAAM,eAAgB,EAAE,EAC3D,kBAAqB,SAAS,KAAK,MAAM,kBAAmB,EAAE,EAC9D,QAAqB,KAAK,MAAM,QAChC,QAAS,CACL,UAAiB,KAAK,MAAM,mBAAqB,KACjD,gBAAiB,SAAS,KAAK,MAAM,wBAAyB,EAAE,EAChE,gBAAiB,SAAS,KAAK,MAAM,wBAAyB,EAAE,EAChE,GAAiB,SAAS,KAAK,MAAM,WAAY,EAAE,EACnD,OAAiB,SAAS,KAAK,MAAM,eAAgB,EAAE,CAC3D,EACA,OAAQ,CACJ,SAAiB,KAAK,MAAM,gBAC5B,MAAiB,SAAS,KAAK,MAAM,aAAc,EAAE,EACrD,MAAiB,SAAS,KAAK,MAAM,aAAc,EAAE,EACrD,OAAiB,SAAS,KAAK,MAAM,cAAe,EAAE,EACtD,KAAiB,KAAK,MAAM,WAChC,EACA,aAAc,CACV,aAAc,CACV,WAAY,SAAS,KAAK,MAAM,qCAAsC,EAAE,EACxE,sBAAuB,SAAS,KAAK,MAAM,gDAAiD,EAAE,CAClG,EACA,WAAY,CACR,WAAY,SAAS,KAAK,MAAM,mCAAoC,EAAE,EACtE,oBAAqB,SAAS,KAAK,MAAM,4CAA6C,EAAE,CAC5F,CACJ,CACJ,EAEIA,EAAS,aAAa,aAAa,WAAa,IAChDA,EAAS,aAAa,aAAa,WAAa,GAGhDA,EAAS,aAAa,aAAa,sBAAwB,IAC3DA,EAAS,aAAa,aAAa,sBAAwB,GAG3DA,EAAS,aAAa,WAAW,WAAa,IAC9CA,EAAS,aAAa,WAAW,WAAa,GAG9CA,EAAS,aAAa,WAAW,oBAAsB,IACvDA,EAAS,aAAa,WAAW,oBAAsB,GAG3D,KAAK,MAAM,SAASA,CAAQ,CAChC,CAEA,eAAgB,CACZ,OAAI,KAAK,MAAM,kBACJ,gBAAC,YACJ,MAAO,KAAK,MAAM,EAAE,gBAAgB,EACpC,KAAM,KAAK,MAAM,EAAE,gBAAgB,EACnC,QAASvF,GAAU,CACf,GAAIA,EAAQ,CACR,IAAIqG,EAEA,KAAK,MAAM,gBAAkB,QAC7BA,EAAO,KAEPA,EAAO,IAEX,KAAK,SAAS,CAAC,KAAM,KAAK,MAAM,cAAe,kBAAmB,GAAO,KAAAA,CAAI,EACzE,IAAM,KAAK,SAAS,CAAC,CAC7B,MACI,KAAK,SAAS,CAAC,kBAAmB,EAAK,CAAC,CAEhD,EACJ,EAEO,IAEf,CAEA,QAAS,CACL,OAAO,gBAACb,GAAA,EAAK,CAAC,UAAY,KAAK,MAAM,QAAQ,KAAM,EAC9C,KAAK,cAAc,EACpB,gBAACC,EAAA,GAAI,CAAC,KAAI,GAAC,aAAY,YAAK,KAAK,MAAM,QAAQ,aAAc,KAAK,MAAM,QAAQ,UAAU,CAAE,EACxF,gBAAC,MAAG,UAAW,KAAK,MAAM,QAAQ,iBAAkB,MAAO,KAAK,MAAM,EAAE,0DAA0D,GAAI,KAAK,MAAM,EAAE,aAAa,CAAE,EAClK,gBAAC,KAAE,UAAW,KAAK,MAAM,QAAQ,SAAU,KAAK,MAAM,EAAE,oBAAoB,CAAE,EAC9E,gBAACA,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACtB,gBAACA,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC/C,EAAA,EAAO,CAAC,MAAO,KAAK,MAAM,EAAE,gBAAgB,GACzC,gBAAC4D,GAAA,EAAW,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,QAAQ,YAC5D,gBAACC,GAAA,EAAU,KAAG,KAAK,MAAM,EAAE,MAAM,CAAG,EACpC,gBAACC,GAAA,GACG,QAAQ,WACR,MAAQ,KAAK,MAAM,KACnB,SAAW,GAAK,CACZ,GAAI,EAAE,OAAO,QAAU,KAAK,MAAM,eAC9B,KAAK,SAAS,CAAE,cAAe,EAAE,OAAO,MAAO,kBAAmB,EAAK,CAAC,MACrE,CACH,IAAIH,EAEA,EAAE,OAAO,QAAU,QACnBA,EAAO,KAEPA,EAAO,IAEX,KAAK,SAAS,CAAC,KAAM,EAAE,OAAO,MAAO,KAAAA,CAAI,EACrC,IAAM,KAAK,SAAS,CAAC,CAC7B,CACJ,GAEA,gBAACI,EAAA,EAAQ,CAAC,MAAM,SAAQ,YAAU,EAClC,gBAACA,EAAA,EAAQ,CAAC,MAAM,QAAS,KAAK,MAAM,EAAE,MAAM,CAAG,EAC/C,gBAACA,EAAA,EAAQ,CAAC,MAAM,SAAQ,OAAK,CACjC,CACJ,CACJ,CACJ,EAEA,gBAAChB,EAAA,GAAI,CAAC,KAAI,GAAC,MAAO,CAAC,YAAa,CAAC,GAC7B,gBAACC,EAAA,GACG,QACI,gBAACgB,GAAA,GACG,QAAS,KAAK,MAAM,OACpB,SAAU,GAAK,KAAK,SAAS,CAAE,OAAQ,EAAE,OAAO,OAAQ,EAAG,IAAM,KAAK,SAAS,CAAC,EACpF,EAEJ,MAAO,KAAK,MAAM,EAAE,uCAAuC,EAC/D,CACJ,EAEA,gBAACjB,EAAA,GAAI,CAAC,KAAI,IACL,KAAK,MAAM,OACR,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,KAClB,KAAK,OACL,SAAU,GAAK,KAAK,SAAS,CAAC,KAAM,EAAE,OAAO,KAAK,EAAG,IAAM,KAAK,SAAS,CAAC,EAC1E,MAAO,KAAK,MAAM,EAAE,iBAAiB,EACrC,WAAY,KAAK,MAAM,EAAE,sDAAsD,EACnF,EAEA,gBAAC2D,GAAA,EAAW,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,QAAQ,YAC5D,gBAACC,GAAA,EAAU,KAAE,KAAK,MAAM,EAAE,iBAAiB,CAAE,EAC7C,gBAACC,GAAA,GACG,QAAQ,WACR,MAAO,KAAK,MAAM,KAClB,SAAU,GAAK,KAAK,SAAS,CAAC,KAAM,EAAE,OAAO,KAAK,EAAG,IAAM,KAAK,SAAS,CAAC,GAEzE,KAAK,MAAM,IAAI,IAAIG,GAAM,gBAACF,EAAA,GAAS,IAAKE,EACL,MAAOA,CAAA,EAAKA,IAAO,UAAY,YAAY,KAAK,MAAM,EAAE,eAAe,KAAOA,CAAG,CAAW,CACpI,CACJ,CAER,EAEA,gBAAClB,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,KACnB,KAAK,SACL,IAAM,EACN,IAAM,MACN,SAAW,GAAK,KAAK,SAAS,CAAE,KAAM,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC7E,MAAQ,KAAK,MAAM,EAAE,MAAM,EAC/B,CACJ,EAEE,KAAK,MAAM,OAAS,OAAS,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACrC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,QACnB,WAAa,KAAK,MAAM,EAAE,sDAAsD,EAChF,SAAW,GAAK,KAAK,SAAS,CAAE,QAAS,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAChF,MAAQ,KAAK,MAAM,EAAE,gBAAgB,EACzC,CACJ,EAAU,KAEV,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,kBACnB,KAAK,WACL,WAAa,KAAK,MAAM,EAAE,UAAU,EACpC,WAAY,CACR,aAAc,eACd,KAAM,CACF,aAAc,KAClB,CACJ,EACA,aAAa,MACb,SAAW,GAAK,KAAK,SAAS,CAAE,kBAAmB,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC1F,MAAQ,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,EAAE,gBAAgB,EAAI,KAAK,MAAM,EAAE,qBAAqB,EAC7G,CACJ,CACJ,CACJ,EACA,gBAAC8C,EAAA,GAAI,CAAC,KAAI,GAAC,UAAY,KAAK,MAAM,QAAQ,YAAa,EACnD,gBAACA,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACpB,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,QAAU,gBAACA,EAAA,GAAI,CAAC,KAAI,IACpE,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,eACnB,WAAa,KAAK,MAAM,EAAE,IAAI,EAC9B,KAAK,SACL,IAAM,IACN,SAAW,GAAK,KAAK,SAAS,CAAE,eAAgB,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACvF,MAAQ,KAAK,MAAM,EAAE,iBAAiB,EAC1C,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,OAAS,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACrC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,kBACnB,WAAa,KAAK,MAAM,EAAE,yDAAyD,EACnF,KAAK,SACL,IAAM,IACN,SAAW,GAAK,KAAK,SAAS,CAAE,kBAAmB,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC1F,MAAQ,KAAK,MAAM,EAAE,qBAAqB,EAC9C,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACtC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,wBACnB,KAAK,SACL,WAAa,KAAK,MAAM,EAAE,2CAA2C,EACrE,SAAW,GAAK,KAAK,SAAS,CAAE,wBAAyB,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAChG,MAAQ,KAAK,MAAM,EAAE,qBAAqB,EAC9C,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACtC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,wBACnB,KAAK,SACL,WAAa,KAAK,MAAM,EAAE,sCAAsC,EAChE,SAAW,GAAK,KAAK,SAAS,CAAE,wBAAyB,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAChG,MAAQ,KAAK,MAAM,EAAE,qBAAqB,EAC9C,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACtC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,WACnB,KAAK,SACL,WAAa,KAAK,MAAM,EAAE,oBAAoB,EAC9C,SAAW,GAAK,KAAK,SAAS,CAAE,WAAY,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACnF,MAAQ,KAAK,MAAM,EAAE,WAAW,EACpC,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACtC,gBAACa,GAAA,EAAW,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,QAAQ,YAC5D,gBAACC,GAAA,EAAU,KAAG,KAAK,MAAM,EAAE,eAAe,CAAG,EAC7C,gBAACC,GAAA,GACG,QAAQ,WACR,MAAQ,KAAK,MAAM,eACnB,SAAW,GAAK,KAAK,SAAS,CAAE,eAAgB,EAAE,OAAO,KAAK,EAAG,IAAM,KAAK,SAAS,CAAC,GAEtF,gBAACC,EAAA,EAAQ,CAAC,MAAO,GAAG,MAAI,EACxB,gBAACA,EAAA,EAAQ,CAAC,MAAO,GAAG,MAAI,EACxB,gBAACA,EAAA,EAAQ,CAAC,MAAO,GAAG,MAAI,CAC5B,EACA,gBAACI,GAAA,EAAc,KAAG,KAAK,MAAM,EAAE,oBAAoB,CAAG,CAC1D,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAACpB,EAAA,GAAI,CAAC,KAAI,IACtC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,qCACnB,KAAK,SACL,WAAY,CAAC,IAAK,CAAC,EACnB,WAAa,KAAK,MAAM,EAAE,iFAAiF,EAC3G,SAAW,GAAK,KAAK,SAAS,CAAE,qCAAsC,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC7G,MAAQ,KAAK,MAAM,EAAE,2BAA2B,EACpD,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACtC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,gDACnB,KAAK,SACL,WAAY,CAAC,IAAK,CAAC,EACnB,WAAa,KAAK,MAAM,EAAE,uGAAuG,EACjI,SAAW,GAAK,KAAK,SAAS,CAAE,gDAAiD,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACxH,MAAQ,KAAK,MAAM,EAAE,wCAAwC,EACjE,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACtC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,mCACnB,KAAK,SACL,WAAY,CAAC,IAAK,CAAC,EACnB,WAAa,KAAK,MAAM,EAAE,8DAA8D,EACxF,SAAW,GAAK,KAAK,SAAS,CAAE,mCAAoC,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC3G,MAAQ,KAAK,MAAM,EAAE,wBAAwB,EACjD,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACtC,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,4CACnB,KAAK,SACL,WAAY,CAAC,IAAK,CAAC,EACnB,WAAa,KAAK,MAAM,EAAE,4HAA4H,EACtJ,SAAW,GAAK,KAAK,SAAS,CAAE,4CAA6C,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACpH,MAAQ,KAAK,MAAM,EAAE,8BAA8B,EACvD,CACJ,EAAU,KAER,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,QAAU,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACpE,gBAACa,GAAA,EAAW,CAAC,UAAU,WAAW,UAAY,KAAK,MAAM,QAAQ,YAAc,QAAQ,YACnF,gBAACM,GAAA,EAAS,KACN,gBAAClB,EAAA,GACG,QACI,gBAACC,GAAA,GACG,QAAU,KAAK,MAAM,gBACrB,SAAW,GAAK,KAAK,SAAU,CAAE,gBAAiB,EAAE,OAAO,OAAQ,EAAG,IAAM,KAAK,SAAS,CAAC,EAC/F,EAEJ,MAAQ,KAAK,MAAM,EAAE,sBAAsB,EAC/C,CACJ,EACA,gBAACkB,GAAA,EAAc,KAAG,KAAK,MAAM,EAAE,2DAA2D,CAAG,CACjG,CACJ,EAAU,MAEP,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,UAAY,CAAC,KAAK,MAAM,gBAAkB,gBAACpB,EAAA,GAAI,CAAC,KAAI,IACrG,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,aACnB,KAAK,SACL,WAAa,KAAK,MAAM,EAAE,2GAA2G,EACrI,SAAW,GAAK,KAAK,SAAS,CAAE,aAAc,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACrF,MAAQ,KAAK,MAAM,EAAE,iBAAiB,EAC1C,CACJ,EAAU,MAEP,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,UAAY,CAAC,KAAK,MAAM,gBAAkB,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACrG,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,aACnB,KAAK,SACL,WAAa,KAAK,MAAM,EAAE,yHAAyH,EACnJ,SAAW,GAAK,KAAK,SAAS,CAAE,aAAc,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACrF,MAAQ,KAAK,MAAM,EAAE,cAAc,EACvC,CACJ,EAAU,MAEP,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,UAAY,CAAC,KAAK,MAAM,gBAAkB,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACrG,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,cACnB,KAAK,SACL,WAAa,KAAK,MAAM,EAAE,kGAAkG,EAC5H,SAAW,GAAK,KAAK,SAAS,CAAE,cAAe,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACtF,MAAQ,KAAK,MAAM,EAAE,WAAW,EACpC,CACJ,EAAU,MAEP,KAAK,MAAM,OAAS,QAAU,KAAK,MAAM,OAAS,UAAY,CAAC,KAAK,MAAM,gBAAkB,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACzG,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAY,KAAK,MAAM,QAAQ,YAC/B,MAAQ,KAAK,MAAM,YACnB,WAAa,KAAK,MAAM,EAAE,mHAAmH,EAC7I,SAAW,GAAK,KAAK,SAAS,CAAE,YAAa,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EACpF,MAAQ,KAAK,MAAM,EAAE,MAAM,EAC/B,CACJ,EAAU,IACV,CACJ,CACJ,CACJ,CACJ,CAEA,GAAoB,UAAY,CAC5B,EAAG,SACH,SAAU,oBACV,SAAU,sBACV,YAAa,UACjB,EAEA,UAAeiD,GAAA,SAAU,KAAE,cAAW,EAAM,EAAE,EAAmB,CAAC,E,spGC/flE,MAAM,GAAS/L,IAAU,CACrB,MAAO,CACH,OAAQ,OACR,UAAW,OACX,SAAU,OACV,SAAU,SACV,QAASA,EAAM,QAAQ,CAAC,CAC5B,EACA,aAAc,CACV,OAAQ,eAAiBA,EAAM,OAAO,QAAQ,UAAY,MAC1D,MAAO,OACP,SAAU,MACd,EACA,YAAa,CACT,MAAO,IACP,aAAcA,EAAM,QAAQ,CAAC,EAC7B,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAYA,EAAM,QAAQ,CAAC,CAC/B,EACA,UAAW,CACP,SAAU,WACV,IAAK,EACL,MAAOA,EAAM,QAAQ,CAAC,CAC1B,EACA,UAAW,CACP,YAAaA,EAAM,QAAQ,CAAC,CAChC,EACA,WAAY,CACR,OAAQ,EACZ,EACA,YAAa,CACT,OAAQ,GACR,YAAaA,EAAM,QAAQ,CAAC,CAChC,CACJ,GAEA,MAAMiN,WAAwB,WAAU,CACpC,YAAY/M,EAAO,CACf,MAAMA,CAAK,EAEX,MAAMwL,EAAW,KAAK,MAAM,UAAY,CAAC,EACzCA,EAAS,UAAYA,EAAS,WAAa,CAAC,EAC5C,OAAO,KAAKA,EAAS,SAAS,EAAE,QAAQwB,GAAM,CAC1C,GAAIxB,EAAS,UAAUwB,CAAE,EAAE,OAAS,OAAQ,CACxC,IAAIC,EAAa,OAAOzB,EAAS,UAAUwB,CAAE,EAAE,SAAY,SAAYxB,EAAS,UAAUwB,CAAE,EAAE,QAAQ,SAAS,GAAG,EAAI,GAAOxB,EAAS,UAAUwB,CAAE,EAAE,QAAQ,SAAS,GAAG,EAAI,GAAK,EAAM,EACvLxB,EAAS,UAAUwB,CAAE,EAAE,SAAW,SAASxB,EAAS,UAAUwB,CAAE,EAAE,QAAS,EAAE,GAAK,GAAKC,EACvFzB,EAAS,UAAUwB,CAAE,EAAE,MAAQxB,EAAS,UAAUwB,CAAE,EAAE,OAAS,GAC/DxB,EAAS,UAAUwB,CAAE,EAAE,SAAWxB,EAAS,UAAUwB,CAAE,EAAE,UAAY,CACzE,MAAWxB,EAAS,UAAUwB,CAAE,EAAE,OAAS,UACvCxB,EAAS,UAAUwB,CAAE,EAAE,MAAQxB,EAAS,UAAUwB,CAAE,EAAE,OAAS,GAC/DxB,EAAS,UAAUwB,CAAE,EAAE,KAAOxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,GAC7DxB,EAAS,UAAUwB,CAAE,EAAE,KAAOxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,EAC7DxB,EAAS,UAAUwB,CAAE,EAAE,KAAOxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,GAC7DxB,EAAS,UAAUwB,CAAE,EAAE,SAAWxB,EAAS,UAAUwB,CAAE,EAAE,UAAY,GACrExB,EAAS,UAAUwB,CAAE,EAAE,WAAaxB,EAAS,UAAUwB,CAAE,EAAE,YAAc,GACzExB,EAAS,UAAUwB,CAAE,EAAE,SAAWxB,EAAS,UAAUwB,CAAE,EAAE,UAAY,GACrExB,EAAS,UAAUwB,CAAE,EAAE,IAAMxB,EAAS,UAAUwB,CAAE,EAAE,KAAO,IACpDxB,EAAS,UAAUwB,CAAE,EAAE,OAAS,QACvCxB,EAAS,UAAUwB,CAAE,EAAE,MAAQxB,EAAS,UAAUwB,CAAE,EAAE,OAAS,GAC/DxB,EAAS,UAAUwB,CAAE,EAAE,KAAOxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,GAC7DxB,EAAS,UAAUwB,CAAE,EAAE,KAAOxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,EAC7DxB,EAAS,UAAUwB,CAAE,EAAE,KAAOxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,IAC7DxB,EAAS,UAAUwB,CAAE,EAAE,KAAOxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,OAC7DxB,EAAS,UAAUwB,CAAE,EAAE,IAAMxB,EAAS,UAAUwB,CAAE,EAAE,KAAO,IACpDxB,EAAS,UAAUwB,CAAE,EAAE,OAAS,UACvCxB,EAAS,UAAUwB,CAAE,EAAE,OAASxB,EAAS,UAAUwB,CAAE,EAAE,QAAU,GACjExB,EAAS,UAAUwB,CAAE,EAAE,MAAQxB,EAAS,UAAUwB,CAAE,EAAE,OAAS,GAC/DxB,EAAS,UAAUwB,CAAE,EAAE,OAASxB,EAAS,UAAUwB,CAAE,EAAE,QAAU,GACjExB,EAAS,UAAUwB,CAAE,EAAE,IAAMxB,EAAS,UAAUwB,CAAE,EAAE,KAAO,IACpDxB,EAAS,UAAUwB,CAAE,EAAE,OAAS,QACvCxB,EAAS,UAAUwB,CAAE,EAAE,MAAQxB,EAAS,UAAUwB,CAAE,EAAE,OAAS,GAC/DxB,EAAS,UAAUwB,CAAE,EAAE,UAAYxB,EAAS,UAAUwB,CAAE,EAAE,WAAa,GACvExB,EAAS,UAAUwB,CAAE,EAAE,OAASxB,EAAS,UAAUwB,CAAE,EAAE,QAAU,GACjExB,EAAS,UAAUwB,CAAE,EAAE,IAAMxB,EAAS,UAAUwB,CAAE,EAAE,KAAO,GAEnE,CAAC,EAED,KAAK,MAAQ,CACT,MAAOxB,EAAS,OAAS,OACzB,QAASA,EAAS,SAAW,EAC7B,SAAUA,EAAS,UAAY,GAC/B,UAAWA,EAAS,WAAa,CAAC,EAClC,SAAU,CAAC,CACf,EAEA,KAAK,YAAW,aAAU,CAC9B,CAEA,mBAAoB,CAChB,KAAK,SAAS,SAAW,KAAK,SAAS,QAAQ,MAAM,CACzD,CAEA,UAAW,CACP,MAAMA,EAAW,CACb,MAAO,KAAK,MAAM,MAClB,QAAS,SAAS,KAAK,MAAM,QAAS,EAAE,EACxC,SAAU,KAAK,MAAM,SACrB,UAAW,CAAC,CAChB,EAEA,OAAO,KAAK,KAAK,MAAM,SAAS,EAAE,QAAQwB,GAAM,CAC5CxB,EAAS,UAAUwB,CAAE,EAAI,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,UAAUA,CAAE,CAAC,CAAC,EAExE,KAAK,MAAM,UAAUA,CAAE,EAAE,OAAS,QAClCxB,EAAS,UAAUwB,CAAE,EAAE,QAAU,SAASxB,EAAS,UAAUwB,CAAE,EAAE,QAAS,EAAE,GAAK,KAC7ExB,EAAS,UAAUwB,CAAE,EAAE,UAEvBxB,EAAS,UAAUwB,CAAE,EAAE,QAAUxB,EAAS,UAAUwB,CAAE,EAAE,QAAQ,SAAS,EAAI,KAEjFxB,EAAS,UAAUwB,CAAE,EAAE,SAAW,SAASxB,EAAS,UAAUwB,CAAE,EAAE,SAAU,EAAE,GAAK,MAC5E,KAAK,MAAM,UAAUA,CAAE,EAAE,OAAS,UACzC,CAACxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,OAAOxB,EAAS,UAAUwB,CAAE,EAAE,KAC9D,CAACxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,OAAOxB,EAAS,UAAUwB,CAAE,EAAE,KAC9D,CAACxB,EAAS,UAAUwB,CAAE,EAAE,YAAc,OAAOxB,EAAS,UAAUwB,CAAE,EAAE,WACpE,CAACxB,EAAS,UAAUwB,CAAE,EAAE,UAAY,OAAOxB,EAAS,UAAUwB,CAAE,EAAE,SAClE,CAACxB,EAAS,UAAUwB,CAAE,EAAE,KAAO,OAAOxB,EAAS,UAAUwB,CAAE,EAAE,KACtD,KAAK,MAAM,UAAUA,CAAE,EAAE,OAAS,QACzCxB,EAAS,UAAUwB,CAAE,EAAE,KAAOxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,GAC7DxB,EAAS,UAAUwB,CAAE,EAAE,KAAO,SAASxB,EAAS,UAAUwB,CAAE,EAAE,KAAM,EAAE,GAAK,GAC3ExB,EAAS,UAAUwB,CAAE,EAAE,KAAOxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,IAC7DxB,EAAS,UAAUwB,CAAE,EAAE,KAAOxB,EAAS,UAAUwB,CAAE,EAAE,MAAQ,GAC7DxB,EAAS,UAAUwB,CAAE,EAAE,IAAMxB,EAAS,UAAUwB,CAAE,EAAE,KAAO,IACpD,KAAK,MAAM,UAAUA,CAAE,EAAE,OAAS,WACzCxB,EAAS,UAAUwB,CAAE,EAAE,OAASxB,EAAS,UAAUwB,CAAE,EAAE,QAAU,GACjExB,EAAS,UAAUwB,CAAE,EAAE,MAAQxB,EAAS,UAAUwB,CAAE,EAAE,OAAS,OAC/DxB,EAAS,UAAUwB,CAAE,EAAE,OAASxB,EAAS,UAAUwB,CAAE,EAAE,QAAU,GACjExB,EAAS,UAAUwB,CAAE,EAAE,IAAMxB,EAAS,UAAUwB,CAAE,EAAE,KAAO,GAEnE,CAAC,EAED,KAAK,MAAM,SAASxB,CAAQ,CAChC,CAEA,SAASwB,EAAI,CACT,MAAME,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjE,OAAOA,EAAUF,CAAE,EACnB,KAAK,SAAS,CAAE,UAAAE,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,CAEA,cAActK,EAAM,CAChB,OAAO,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IACb,gBAACC,EAAA,GACG,UAAW,KAAK,MAAM,QAAQ,YAC9B,QACI,gBAACC,GAAA,GACG,QAAS,KAAK,MAAM,UAAUhJ,CAAI,EAAE,QACpC,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,QAAUnB,EAAE,OAAO,QACnC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACJ,EAEJ,MAAO,KAAK,MAAM,EAAE,SAAS,EACjC,CACJ,CACJ,CAEA,eAAetK,EAAM,CACjB,OAAO,KAAK,MAAM,UAAUA,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAClD,gBAACa,GAAA,EAAW,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,QAAQ,YAC5D,gBAACC,GAAA,EAAU,KAAE,KAAK,MAAM,EAAE,OAAO,CAAE,EACnC,gBAACC,GAAA,GACG,QAAQ,WACR,MAAO,KAAK,MAAM,UAAU7J,CAAI,EAAE,OAAS,IAC3C,YAAa,IAAM,KAAK,MAAM,UAAUA,CAAI,EAAE,OAAS,KAAK,MAAM,EAAE,SAAS,EAC7E,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,MAAQnB,EAAE,OAAO,QAAU,IAAM,GAAKA,EAAE,OAAO,MAC/D,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,GAEA,gBAACR,EAAA,EAAQ,CAAC,MAAM,KAAK,KAAK,MAAM,EAAE,SAAS,CAAE,EAC7C,gBAACA,EAAA,EAAQ,CAAC,MAAM,SAAQ,OAAK,EAC7B,gBAACA,EAAA,EAAQ,CAAC,MAAM,SAAQ,OAAK,EAC7B,gBAACA,EAAA,EAAQ,CAAC,MAAM,QAAO,MAAI,EAC3B,gBAACA,EAAA,EAAQ,CAAC,MAAM,QAAO,MAAI,EAC3B,gBAACA,EAAA,EAAQ,CAAC,MAAM,SAAQ,OAAK,CACjC,EACA,gBAACI,GAAA,EAAc,KAAE,KAAK,MAAM,EAAE,wFAAwF,CAAE,CAC5H,CACJ,EAAU,IACd,CAEA,aAAalK,EAAM,CACf,OAAO,gBAACuK,GAAA,EAAS,CAAC,IAAKvK,EAAM,SAAU,KAAK,MAAM,SAAS,SAASA,CAAI,EAAG,SAAU,IAAM,CACvF,MAAMwK,EAAW,CAAC,GAAG,KAAK,MAAM,QAAQ,EAClCtK,EAAMsK,EAAS,QAAQxK,CAAI,EAC7BE,IAAQ,GACRsK,EAAS,KAAKxK,CAAI,EAElBwK,EAAS,OAAOtK,EAAK,CAAC,EAG1B,KAAK,SAAS,CAAE,SAAAsK,CAAS,CAAC,CAC9B,GACI,gBAACC,GAAA,EAAgB,CAAC,WAAY,gBAACjC,GAAA,QAAc,IAAC,EAAI,MAAO,CAAE,SAAU,WAAY,WAAY,0BAA2B,GACpH,gBAAC,KAAU,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,EACvD,gBAACkC,GAAA,EAAU,CAAC,UAAW,KAAK,MAAM,QAAQ,SAAU1K,CAAK,EACzD,gBAAC2K,GAAA,EAAG,CAAC,KAAK,QAAQ,UAAW,KAAK,MAAM,QAAQ,UAAW,QAAS,IAAM,KAAK,SAAS3K,CAAI,GAAG,gBAAC,WAAU,IAAC,CAAE,CACjH,EACA,gBAAC4K,GAAA,EAAgB,KACb,gBAAC9B,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACrB,KAAK,cAAc9I,CAAI,EACvB,KAAK,eAAeA,CAAI,EACxB,KAAK,MAAM,UAAUA,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,KAClC,WAAY,KAAK,MAAM,EAAE,iDAAiD,EAC1E,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,KAAOnB,EAAE,OAAO,MAChC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,WAAW,EACnC,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,KAClC,KAAK,SACL,WAAY,KAAK,MAAM,EAAE,8FAA+F,EACxH,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,KAAOnB,EAAE,OAAO,MAChC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,MAAM,EAC9B,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAACa,GAAA,EAAW,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,QAAQ,YAC5D,gBAACC,GAAA,EAAU,KAAE,KAAK,MAAM,EAAE,UAAU,CAAE,EACtC,gBAACC,GAAA,GACG,QAAQ,WACR,MAAO,KAAK,MAAM,UAAU7J,CAAI,EAAE,SAClC,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,SAAWnB,EAAE,OAAO,MACpC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,GAEA,gBAACR,EAAA,EAAQ,CAAC,MAAM,QAAO,MAAI,EAC3B,gBAACA,EAAA,EAAQ,CAAC,MAAM,QAAO,MAAI,EAC3B,gBAACA,EAAA,EAAQ,CAAC,MAAM,QAAO,MAAI,EAC3B,gBAACA,EAAA,EAAQ,CAAC,MAAM,gBAAe,cAAY,CAC/C,CACJ,CACJ,EAAU,KACT,KAAK,MAAM,UAAU9J,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,KAClC,WAAY,KAAK,MAAM,EAAE,kFAAkF,EAC3G,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,KAAOnB,EAAE,OAAO,MAChC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,MAAM,EAC9B,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,SAClC,WAAY,KAAK,MAAM,EAAE,2CAA2C,EACpE,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,SAAWnB,EAAE,OAAO,MACpC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,UAAU,EAClC,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,UAClC,WAAY,KAAK,MAAM,EAAE,0EAA0E,EACnG,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,UAAYnB,EAAE,OAAO,MACrC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,UAAU,EAClC,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,WAClC,WAAY,KAAK,MAAM,EAAE,wDAAwD,EACjF,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,WAAanB,EAAE,OAAO,MACtC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,aAAa,EACrC,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,SAClC,WAAY,KAAK,MAAM,EAAE,uDAAuD,EAChF,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,SAAWnB,EAAE,OAAO,MACpC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,kBAAkB,EAC1C,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,IAClC,WAAY,KAAK,MAAM,EAAE,2GAA2G,EACpI,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,IAAMnB,EAAE,OAAO,MAC/B,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,kBAAkB,EAC1C,CACJ,EAAU,IACd,CACJ,CACJ,CACJ,CAEA,WAAWtK,EAAM,CACb,OAAO,gBAACuK,GAAA,EAAS,CAAC,IAAKvK,EAAM,SAAU,KAAK,MAAM,SAAS,SAASA,CAAI,EAAG,SAAU,IAAM,CACvF,MAAMwK,EAAW,CAAC,GAAG,KAAK,MAAM,QAAQ,EAClCtK,EAAMsK,EAAS,QAAQxK,CAAI,EAC7BE,IAAQ,GACRsK,EAAS,KAAKxK,CAAI,EAElBwK,EAAS,OAAOtK,EAAK,CAAC,EAG1B,KAAK,SAAS,CAAE,SAAAsK,CAAS,CAAC,CAC9B,GACI,gBAACC,GAAA,EAAgB,CAAC,MAAO,CAAE,WAAY,0BAA2B,EAAG,WAAY,gBAACjC,GAAA,QAAc,IAAC,GAC7F,gBAAC,KAAQ,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,EACrD,gBAACkC,GAAA,EAAU,CAAC,UAAW,KAAK,MAAM,QAAQ,SAAU1K,CAAK,EACzD,gBAAC2K,GAAA,EAAG,CAAC,KAAK,QAAQ,UAAW,KAAK,MAAM,QAAQ,UAAW,QAAS,IAAM,KAAK,SAAS3K,CAAI,GAAG,gBAAC,WAAU,IAAC,CAAE,CACjH,EACA,gBAAC4K,GAAA,EAAgB,KACb,gBAAC9B,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACrB,KAAK,cAAc9I,CAAI,EACvB,KAAK,eAAeA,CAAI,EACxB,KAAK,MAAM,UAAUA,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,SAClC,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,SAAWnB,EAAE,OAAO,MACpC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,WAAW,EACnC,CACJ,EAAU,KAET,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,QAClC,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,QAAUnB,EAAE,OAAO,MACnC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,gBAAgB,EACxC,CACJ,EAAU,KAET,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,QAClC,KAAK,SACL,WAAY,KAAK,MAAM,EAAE,IAAI,EAC7B,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,QAAUnB,EAAE,OAAO,MACnC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,0BAA0B,EAClD,CACJ,EAAU,KAET,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,SAClC,KAAK,SACL,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,SAAWnB,EAAE,OAAO,MACpC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,yBAAyB,EACjD,CACJ,EAAU,IACd,CACJ,CACJ,CACJ,CAEA,WAAWtK,EAAM,CACb,OAAO,gBAACuK,GAAA,EAAS,CAAC,IAAKvK,EAAM,SAAU,KAAK,MAAM,SAAS,SAASA,CAAI,EAAG,SAAU,IAAM,CACvF,MAAMwK,EAAW,CAAC,GAAG,KAAK,MAAM,QAAQ,EAClCtK,EAAMsK,EAAS,QAAQxK,CAAI,EAC7BE,IAAQ,GACRsK,EAAS,KAAKxK,CAAI,EAElBwK,EAAS,OAAOtK,EAAK,CAAC,EAG1B,KAAK,SAAS,CAAE,SAAAsK,CAAS,CAAC,CAC9B,GACI,gBAACC,GAAA,EAAgB,CAAC,WAAY,gBAACjC,GAAA,QAAc,IAAC,EAAI,MAAO,CAAE,SAAU,WAAY,WAAY,0BAA2B,GACpH,gBAAC,WAAQ,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,EACrD,gBAACkC,GAAA,EAAU,CAAC,UAAW,KAAK,MAAM,QAAQ,SAAU1K,CAAK,EACzD,gBAAC2K,GAAA,EAAG,CAAC,KAAK,QAAQ,UAAW,KAAK,MAAM,QAAQ,UAAW,QAAS,IAAM,KAAK,SAAS3K,CAAI,GAAG,gBAAC,WAAU,IAAC,CAAE,CACjH,EACA,gBAAC4K,GAAA,EAAgB,KACb,gBAAC9B,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACrB,KAAK,cAAc9I,CAAI,EACvB,KAAK,eAAeA,CAAI,EACxB,KAAK,MAAM,UAAUA,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,KAClC,WAAY,KAAK,MAAM,EAAE,0CAA0C,EACnE,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,KAAOnB,EAAE,OAAO,MAChC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,MAAM,EAC9B,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,KAClC,KAAK,SACL,WAAY,KAAK,MAAM,EAAE,0CAA0C,EACnE,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,KAAOnB,EAAE,OAAO,MAChC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,MAAM,EAC9B,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,KAClC,WAAY,KAAK,MAAM,EAAE,yCAAyC,EAClE,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,KAAOnB,EAAE,OAAO,MAChC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,MAAM,EAC9B,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,KAClC,WAAY,KAAK,MAAM,EAAE,sEAAsE,EAC/F,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,KAAOnB,EAAE,OAAO,MAChC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,MAAM,EAC9B,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAACC,EAAA,GACG,UAAW,KAAK,MAAM,QAAQ,YAC9B,QACI,gBAACC,GAAA,GACG,QAAS,KAAK,MAAM,UAAUhJ,CAAI,EAAE,IACpC,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,IAAMnB,EAAE,OAAO,QAC/B,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACJ,EAEJ,MAAO,KAAK,MAAM,EAAE,KAAK,EAC7B,CACJ,EAAU,IACd,CACJ,CACJ,CACJ,CAEA,aAAatK,EAAM,CACf,OAAO,gBAACuK,GAAA,EAAS,CAAC,IAAKvK,EAAM,SAAU,KAAK,MAAM,SAAS,SAASA,CAAI,EAAG,SAAU,IAAM,CACvF,MAAMwK,EAAW,CAAC,GAAG,KAAK,MAAM,QAAQ,EAClCtK,EAAMsK,EAAS,QAAQxK,CAAI,EAC7BE,IAAQ,GACRsK,EAAS,KAAKxK,CAAI,EAElBwK,EAAS,OAAOtK,EAAK,CAAC,EAG1B,KAAK,SAAS,CAAE,SAAAsK,CAAS,CAAC,CAC9B,GACI,gBAACC,GAAA,EAAgB,CAAC,WAAY,gBAACjC,GAAA,QAAc,IAAC,EAAI,MAAO,CAAE,SAAU,WAAY,WAAY,0BAA2B,GACpH,gBAAC,WAAU,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,EACvD,gBAACkC,GAAA,EAAU,CAAC,UAAW,KAAK,MAAM,QAAQ,SAAU1K,CAAK,EACzD,gBAAC2K,GAAA,EAAG,CAAC,KAAK,QAAQ,UAAW,KAAK,MAAM,QAAQ,UAAW,QAAS,IAAM,KAAK,SAAS3K,CAAI,GAAG,gBAAC,WAAU,IAAC,CAAE,CACjH,EACA,gBAAC4K,GAAA,EAAgB,KACb,gBAAC9B,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACrB,KAAK,cAAc9I,CAAI,EACvB,KAAK,MAAM,UAAUA,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,OAClC,WAAY,KAAK,MAAM,EAAE,8IAA8I,EACvK,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,OAASnB,EAAE,OAAO,MAClC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,WAAW,EACnC,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAACC,EAAA,GACG,UAAW,KAAK,MAAM,QAAQ,YAC9B,QACI,gBAACC,GAAA,GACG,QAAS,KAAK,MAAM,UAAUhJ,CAAI,EAAE,OACpC,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,OAASnB,EAAE,OAAO,QAClC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACJ,EAEJ,MAAO,KAAK,MAAM,EAAE,QAAQ,EAChC,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,IAClC,WAAY,KAAK,MAAM,EAAE,mDAAmD,EAC5E,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,IAAMnB,EAAE,OAAO,MAC/B,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,KAAK,EAC7B,CACJ,EAAU,IACd,CACJ,CACJ,CACJ,CAEA,UAAUtK,EAAM,CACZ,OAAO,gBAACuK,GAAA,EAAS,CAAC,IAAKvK,EAAM,SAAU,KAAK,MAAM,SAAS,SAASA,CAAI,EAAG,SAAU,IAAM,CACvF,MAAMwK,EAAW,CAAC,GAAG,KAAK,MAAM,QAAQ,EAClCtK,EAAMsK,EAAS,QAAQxK,CAAI,EAC7BE,IAAQ,GACRsK,EAAS,KAAKxK,CAAI,EAElBwK,EAAS,OAAOtK,EAAK,CAAC,EAG1B,KAAK,SAAS,CAAE,SAAAsK,CAAS,CAAC,CAC9B,GACI,gBAACC,GAAA,EAAgB,CAAC,WAAY,gBAACjC,GAAA,QAAc,IAAC,EAAI,MAAO,CAAE,SAAU,WAAY,WAAY,0BAA2B,GACpH,gBAAC,OAAI,UAAW,KAAK,MAAM,QAAQ,YAAa,IAAK,GAAS,IAAI,KAAM,GACxE,gBAACkC,GAAA,EAAU,CAAC,UAAW,KAAK,MAAM,QAAQ,SAAU1K,CAAK,EACzD,gBAAC2K,GAAA,EAAG,CAAC,KAAK,QAAQ,UAAW,KAAK,MAAM,QAAQ,UAAW,QAAS,IAAM,KAAK,SAAS3K,CAAI,GAAG,gBAAC,WAAU,IAAC,CAAE,CACjH,EACA,gBAAC4K,GAAA,EAAgB,KACb,gBAAC9B,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACrB,KAAK,cAAc9I,CAAI,EACvB,KAAK,eAAeA,CAAI,EACxB,KAAK,MAAM,UAAUA,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,UAClC,WAAY,KAAK,MAAM,EAAE,qIAAqI,EAC9J,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,UAAYnB,EAAE,OAAO,MACrC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,YAAY,EACpC,CACJ,EAAU,KACT,KAAK,MAAM,UAAUtK,CAAI,EAAE,QAAU,gBAAC8I,EAAA,GAAI,CAAC,KAAI,IAC5C,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,UAAUhG,CAAI,EAAE,OAClC,WAAY,KAAK,MAAM,EAAE,8BAA8B,EACvD,SAAUnB,GAAK,CACX,MAAMyL,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAE,OAASnB,EAAE,OAAO,MAClC,KAAK,SAAS,CAAE,UAAAyL,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,EACA,MAAO,KAAK,MAAM,EAAE,SAAS,EACjC,CACJ,EAAU,IACd,CACJ,CACJ,CACJ,CAEA,IAAIO,EAAM,CACN,GAAIA,IAAS,OAAQ,CACjB,IAAIjE,EAAI,EAGR,KAAO,OAAO,KAAK,KAAK,MAAM,SAAS,EAAE,KAAKwD,GAAMA,IAAOS,EAAOjE,CAAC,GAC/DA,IAEJ,MAAM5G,EAAO6K,EAAOjE,EACd0D,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAI,CACd,KAAA6K,EACA,QAAS,GACT,SAAU,eACV,QAAS,OACT,QAAS,EACT,SAAU,CACd,EACA,KAAK,SAAS,CAAE,UAAAP,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,SAAWO,IAAS,SAAU,CAC1B,IAAIjE,EAAI,EAER,KAAO,OAAO,KAAK,KAAK,MAAM,SAAS,EAAE,KAAKwD,GAAMA,IAAOS,EAAOjE,CAAC,GAC/DA,IAEJ,MAAM5G,EAAO6K,EAAOjE,EACd0D,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAI,CACd,KAAA6K,EACA,QAAS,GAET,KAAM,YACN,KAAM,EACN,SAAU,OACV,KAAM,GACN,SAAU,GACV,UAAW,WACX,WAAY,GACZ,SAAU,GACV,IAAK,EACT,EACA,KAAK,SAAS,CAAE,UAAAP,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,SAAWO,IAAS,OAAQ,CACxB,IAAIjE,EAAI,EAER,KAAO,OAAO,KAAK,KAAK,MAAM,SAAS,EAAE,KAAKwD,GAAMA,IAAOS,EAAOjE,CAAC,GAC/DA,IAEJ,MAAM5G,EAAO6K,EAAOjE,EACd0D,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAI,CACd,KAAA6K,EACA,QAAS,GAET,KAAM,YACN,KAAM,GACN,KAAM,IACN,KAAM,OACN,IAAK,EACT,EACA,KAAK,SAAS,CAAE,UAAAP,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,SAAWO,IAAS,SAAU,CAC1B,IAAIjE,EAAI,EAER,KAAO,OAAO,KAAK,KAAK,MAAM,SAAS,EAAE,KAAKwD,GAAMA,IAAOS,EAAOjE,CAAC,GAC/DA,IAEJ,MAAM5G,EAAO6K,EAAOjE,EACd0D,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAI,CACd,KAAA6K,EACA,QAAS,GAET,OAAQ,YACR,MAAO,OACP,OAAQ,GACR,IAAK,EACT,EACA,KAAK,SAAS,CAAE,UAAAP,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,SAAWO,IAAS,MAAO,CACvB,IAAIjE,EAAI,EAER,KAAO,OAAO,KAAK,KAAK,MAAM,SAAS,EAAE,KAAKwD,GAAMA,IAAOS,EAAOjE,CAAC,GAC/DA,IAEJ,MAAM5G,EAAO6K,EAAOjE,EACd0D,EAAY,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,SAAS,CAAC,EACjEA,EAAUtK,CAAI,EAAI,CACd,KAAA6K,EACA,QAAS,GAET,MAAO,OACP,UAAW,iBACX,OAAQ,EACZ,EACA,KAAK,SAAS,CAAE,UAAAP,CAAU,EAAG,IAAM,KAAK,SAAS,CAAC,CACtD,CACJ,CAEA,QAAS,CACL,OAAO,gBAACzB,GAAA,EAAK,CAAC,UAAW,KAAK,MAAM,QAAQ,OACxC,gBAACC,EAAA,GAAI,CAAC,KAAI,GAAC,UAAW,KAAK,MAAM,QAAQ,cACrC,gBAACA,EAAA,GAAI,CAAC,UAAS,GAAC,UAAU,UACtB,gBAACA,EAAA,GAAI,CAAC,KAAI,IACN,gBAACa,GAAA,EAAW,CAAC,UAAW,KAAK,MAAM,QAAQ,YAAa,QAAQ,YAC5D,gBAACC,GAAA,EAAU,KAAE,KAAK,MAAM,EAAE,OAAO,CAAE,EACnC,gBAACC,GAAA,GACG,QAAQ,WACR,MAAO,KAAK,MAAM,MAClB,SAAU,GAAK,KAAK,SAAS,CAAE,MAAO,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,GAE7E,gBAACC,EAAA,EAAQ,CAAC,MAAM,SAAQ,OAAK,EAC7B,gBAACA,EAAA,EAAQ,CAAC,MAAM,SAAQ,OAAK,EAC7B,gBAACA,EAAA,EAAQ,CAAC,MAAM,QAAO,MAAI,EAC3B,gBAACA,EAAA,EAAQ,CAAC,MAAM,QAAO,MAAI,EAC3B,gBAACA,EAAA,EAAQ,CAAC,MAAM,SAAQ,OAAK,CACjC,CACJ,CACJ,EACA,gBAAChB,EAAA,GAAI,CAAC,KAAI,IACN,gBAAC9C,EAAA,GACG,QAAQ,WACR,UAAW,KAAK,MAAM,QAAQ,YAC9B,MAAO,KAAK,MAAM,QAClB,WAAY,KAAK,MAAM,EAAE,oBAAoB,EAC7C,KAAK,SACL,SAAU,GAAK,KAAK,SAAS,CAAE,QAAS,EAAE,OAAO,KAAM,EAAG,IAAM,KAAK,SAAS,CAAC,EAC/E,MAAO,KAAK,MAAM,EAAE,wBAAwB,EAChD,CACJ,EACA,gBAAC8C,EAAA,GAAI,CAAC,KAAI,IACN,gBAACC,EAAA,GACG,UAAW,KAAK,MAAM,QAAQ,YAC9B,QACI,gBAACC,GAAA,GACG,QAAS,KAAK,MAAM,SACpB,SAAU,GAAK,KAAK,SAAS,CAAE,SAAU,EAAE,OAAO,OAAQ,EAAG,IAAM,KAAK,SAAS,CAAC,EACtF,EAEJ,MAAO,KAAK,MAAM,EAAE,mBAAmB,EAC3C,CACJ,EACC,OAAO,KAAK,KAAK,MAAM,SAAS,EAAE,IAAIoB,GAAM,CACzC,OAAQ,KAAK,MAAM,UAAUA,CAAE,EAAE,KAAM,CACnC,IAAK,SACD,OAAO,KAAK,aAAaA,CAAE,EAE/B,IAAK,OACD,OAAO,KAAK,WAAWA,CAAE,EAE7B,IAAK,OACD,OAAO,KAAK,WAAWA,CAAE,EAE7B,IAAK,SACD,OAAO,KAAK,aAAaA,CAAE,EAE/B,IAAK,MACD,OAAO,KAAK,UAAUA,CAAE,EAE5B,QACI,OAAO,IACf,CACJ,CAAC,CACL,CACJ,EACA,gBAACU,GAAA,EAAO,KACJ,gBAACjF,EAAA,EAAM,CAAC,MAAM,OAAO,UAAW,KAAK,MAAM,QAAQ,UAAW,QAAQ,YAAY,QAAS,IAAM,KAAK,IAAI,MAAM,EAAG,UAAW,gBAAC,WAAQ,IAAC,GAAI,gBAAC,KAAQ,CAAC,UAAW,KAAK,MAAM,QAAQ,WAAY,EAAG,KAAK,MAAM,EAAE,UAAU,CAAE,EAC5N,gBAACA,EAAA,EAAM,CAAC,MAAM,OAAO,UAAW,KAAK,MAAM,QAAQ,UAAW,QAAQ,YAAY,QAAS,IAAM,KAAK,IAAI,QAAQ,EAAG,UAAW,gBAAC,WAAQ,IAAC,GAAI,gBAAC,KAAU,CAAC,UAAW,KAAK,MAAM,QAAQ,WAAY,EAAG,KAAK,MAAM,EAAE,QAAQ,CAAE,EAC9N,gBAACA,EAAA,EAAM,CAAC,MAAM,OAAO,UAAW,KAAK,MAAM,QAAQ,UAAW,QAAQ,YAAY,QAAS,IAAM,KAAK,IAAI,MAAM,EAAG,UAAW,gBAAC,WAAQ,IAAC,GAAI,gBAAC,WAAQ,CAAC,UAAW,KAAK,MAAM,QAAQ,WAAY,EAAG,KAAK,MAAM,EAAE,UAAU,CAAE,EAC5N,gBAACA,EAAA,EAAM,CAAC,MAAM,OAAO,UAAW,KAAK,MAAM,QAAQ,UAAW,QAAQ,YAAY,QAAS,IAAM,KAAK,IAAI,QAAQ,EAAG,UAAW,gBAAC,WAAQ,IAAC,GAAI,gBAAC,WAAU,CAAC,UAAW,KAAK,MAAM,QAAQ,WAAY,EAAG,KAAK,MAAM,EAAE,YAAY,CAAE,EAClO,gBAACA,EAAA,EAAM,CAAC,MAAM,OAAO,UAAW,KAAK,MAAM,QAAQ,UAAW,QAAQ,YAAY,QAAS,IAAM,KAAK,IAAI,KAAK,EAAG,UAAW,gBAAC,WAAQ,IAAC,GAAI,gBAAC,OAAI,IAAK,GAAS,UAAW,KAAK,MAAM,QAAQ,WAAY,IAAI,KAAM,GAAG,KAAK,MAAM,EAAE,SAAS,CAAE,CACjP,CACJ,CACJ,CACJ,CAEAsE,GAAgB,UAAY,CACxB,EAAG,SACH,SAAU,oBACV,SAAU,sBACV,YAAa,UACjB,EAEA,UAAelB,GAAA,SAAU,KAAE,cAAW,EAAM,EAAEkB,EAAe,CAAC,E,6FCh1B9D,MAAM,GAASjN,IAAU,CACrB,MAAO,CACH,OAAW,OACX,UAAW,OACX,SAAW,OACX,SAAW,OACX,QAAWA,EAAM,QAAQ,CAAC,CAC9B,EACA,MAAO,CACH,MAAO,OACP,OAAQ,EACZ,EACA,gBAAiB,CACb,MAAO,OACP,OAAQ,eAAiB,GAAK,MAC9B,OAAQ,qBACZ,EACA,MAAO,CACH,OAAQ,mBACZ,CAEJ,GAEA,MAAM6N,WAA4B,WAAU,CACxC,YAAY3N,EAAO,CACf,MAAMA,CAAK,EAEX,KAAK,MAAQ,CACT,SAAU,KAAK,UAAU,KAAK,MAAM,UAAY,CAAC,EAAG,KAAM,CAAC,EAC3D,MAAO,EACX,CACJ,CAEA,OAAO,yBAAyBA,EAAOsF,EAAO,CAC1C,OAAO,IACX,CAEA,eAAesI,EAAQC,EAAQ,CAC3BD,EAAO,MAAM,CACjB,CAEA,SAASvG,EAAO,CACZ,MAAMgB,EAAW,CAAC,SAAUhB,CAAK,EACjC,GAAI,CACA,MAAMmE,EAAW,KAAK,MAAMnE,CAAK,EAE7B,KAAK,MAAM,QACXgB,EAAS,MAAQ,IAGrB,KAAK,SAASA,EAAU,IAAM,KAAK,MAAM,SAASmD,CAAQ,CAAC,CAC/D,OAAQ/J,EAAN,CACE4G,EAAS,MAAQ,GACjB,KAAK,SAASA,CAAQ,CAC1B,CACJ,CAEA,QAAS,CACL,OAAO,iBAACoD,GAAA,EAAK,CAAC,UAAY,KAAK,MAAM,QAAQ,KAAM,EAC/C,iBAAC,OAAI,UAAY,KAAK,MAAM,QAAQ,KAAM,EAAI,KAAK,MAAM,EAAE,gBAAgB,CAAG,EAC9E,iBAAC,OAAI,aAAY,YAAK,KAAK,MAAM,QAAQ,gBAAiB,KAAK,MAAM,OAAS,KAAK,MAAM,QAAQ,KAAK,CAAE,EACpG,iBAAC,MACG,KAAK,OACL,MAAM,OACN,OAAO,OACP,MAAQ,KAAK,MAAM,YAAc,OAAS,kBAAoB,SAC9D,MAAQ,KAAK,MAAM,SACnB,SAAWqC,GAAY,KAAK,SAASA,CAAQ,EAC7C,KAAK,oBACL,SAAU,GACV,WAAY,CACR,0BAA2B,GAC3B,yBAA0B,GAC1B,eAAgB,EACpB,EACA,YAAa,CAAE,gBAAiB,EAAK,EACzC,CACJ,CACJ,CACJ,CACJ,CAEAH,GAAoB,UAAY,CAC5B,EAAG,SACH,SAAU,oBACV,SAAU,sBACV,UAAW,UACf,EAEA,UAAe9B,GAAA,SAAU,KAAE,cAAW,EAAM,EAAE8B,EAAmB,CAAC,EC7ElE,MAAM,GAAS7N,IAAU,CACrB,QAAS,CACL,OAAQ,IACR,SAAU,QACd,EACA,SAAU,CACN,MAAO,OACP,OAAQ,eAAeA,EAAM,OAAO,QAAQ,eAC5C,SAAU,MACd,EACA,SAAU,CACN,MAAOA,EAAM,QAAQ,OAAS,OAAS,kBAAoB,iBAC/D,CACJ,GAEA,MAAMiO,WAA2B,WAAU,CACvC,YAAY/N,EAAO,CACf,MAAMA,CAAK,EACX,KAAK,MAAQ,CACT,WAAY,EACZ,WAAY,CAAC,EACb,YAAa,KAAK,MAAM,YACxB,MAAO,KAAK,MAAM,MAClB,QAAS,GACT,YAAa,GACb,YAAa,GAEb,OAAQ,KACR,iBAAkB,KAClB,QAAS,KACT,OAAQ,KACR,IAAK,KACL,QAAS,KACT,OAAQ,EACZ,CACJ,CAEA,mBAAoB,CAChB,KAAK,YAAY,KAAK,MAAM,WAAW,CAC3C,CAEA,qBAAsB,CAClB,OAAI,KAAK,MAAM,YACJ,kBAACgO,GAAA,SACJ,KAAM,KAAK,MAAM,EAAE,0BAA0B,EAC7C,QAAS/H,GACL,KAAK,SAAS,CAAC,YAAa,EAAK,EAAG,IAChCA,GAAU,KAAK,MAAM,QAAQ,CAAC,EAC1C,EAEO,IAEf,CAEA,qBAAsB,CAClB,OAAI,KAAK,MAAM,YACJ,kBAAC+H,GAAA,SACJ,MAAO,KAAK,MAAM,EAAE,gBAAgB,EACpC,KAAM,oCAAE,kBAAC,WAAK,KAAK,MAAM,EAAE,6DAA6D,CAAE,EAC1F,kBAAC,WAAK,KAAK,MAAM,EAAE,2EAA2E,CAAE,CAAM,EACtG,GAAI,KAAK,MAAM,EAAE,SAAS,EAC1B,OAAQ,KAAK,MAAM,EAAE,YAAY,EACjC,QAAS/H,GACL,KAAK,SAAS,CAAC,YAAa,EAAK,EAAG,IAAM,CAClCA,GACA,KAAK,MAAM,OAAO,kBAAkB,KAAK,MAAM,WAAW,EACrD,KAAK,IACF,WAAW,IACP,OAAO,SAAS,OAAO,EAAK,EAAG,GAAG,CAAC,EAC1C,MAAMxE,GAAK,OAAO,MAAM,mBAAmBA,GAAG,CAAC,EAGxD,KAAK,MAAM,QAAQ,CACvB,CAAC,EACT,EAEO,IAEf,CAEA,YAAYwM,EAAM,CACd,KAAK,MAAM,OAAO,iBAAiBA,GAAQ,KAAK,MAAM,WAAW,EAC5D,KAAKzC,GAAY,CACVA,GAAYA,EAAS,SACrB,OAAOA,EAAS,OAAO,eACvB,KAAK,iBAAmB,KAAK,MAAM,KAAK,UAAUA,EAAS,MAAM,CAAC,EAClEA,EAAS,OAAO,QAAU,GAC1B,KAAK,SAASA,EAAS,MAAM,EAErC,CAAC,CACT,CAEA,OAAOyC,EAAM,CACT,MAAMzC,EAAW,CACb,OAAQ,KAAK,MAAM,OACnB,iBAAkB,KAAK,MAAM,iBAC7B,QAAS,KAAK,MAAM,QACpB,OAAQ,KAAK,MAAM,OACnB,IAAK,KAAK,MAAM,IAChB,QAAS,KAAK,MAAM,OACxB,EAGM0C,EAAc,OAAO,OAAO,CAAC,EAAG,KAAK,iBAAkB1C,CAAQ,EAErE,KAAK,SAAS,CAAE,OAAQ,EAAK,EAAG,IAAM,CAClC,KAAK,MAAM,OAAO,kBAAkByC,GAAQ,KAAK,MAAM,YAAaC,CAAW,EAC1E,KAAK,IAAM,CACR,KAAK,iBAAmB,KAAK,MAAM,KAAK,UAAU1C,CAAQ,CAAC,EAE3D,KAAK,SAAS,CAAE,WAAY,CAAC,EAAG,YAAa,GAAM,OAAQ,EAAM,CAAC,CACtE,CAAC,EACA,MAAMvK,GAAS,CACZ,OAAO,MAAM,yBAA2BA,CAAK,EAC7C,KAAK,SAAS,CAAE,OAAQ,EAAM,CAAC,CACnC,CAAC,CACT,CAAC,CACL,CAEA,eAAe2B,EAAM4I,EAAU,CAC3B,MAAM2C,EAAa,CAAC,GAAG,KAAK,MAAM,UAAU,EACtCC,EAAU,KAAK,UAAU,KAAK,iBAAiBxL,CAAI,CAAC,IAAM,KAAK,UAAU4I,CAAQ,EAEjF1I,EAAMqL,EAAW,QAAQvL,CAAI,EAC/BwL,GAAWtL,IAAQ,GACnBqL,EAAW,KAAKvL,CAAI,EACb,CAACwL,GAAWtL,IAAQ,IAC3BqL,EAAW,OAAOrL,EAAK,CAAC,EAG5B,KAAK,SAAS,CAAC,CAACF,CAAI,EAAG4I,EAAU,WAAA2C,CAAU,CAAC,CAChD,CAEA,cAAe,CACX,MAAMvL,EAAO,SACb,OAAO,kBAAC,IACJ,SAAU,KAAK,MAAMA,CAAI,EACzB,EAAG,KAAK,MAAM,EACd,YAAa,KAAK,MAAM,YACxB,SAAU4I,GACN,KAAK,eAAe5I,EAAM4I,CAAQ,EAC1C,CACJ,CAEA,iBAAkB,CACd,MAAM5I,EAAO,mBACb,OAAO,kBAAC,IACJ,SAAU,KAAK,MAAMA,CAAI,EACzB,EAAG,KAAK,MAAM,EACd,OAAQ,KAAK,MAAM,OACnB,YAAa,KAAK,MAAM,YACxB,SAAU4I,GACN,KAAK,eAAe5I,EAAM4I,CAAQ,EAC1C,CACJ,CAEA,eAAgB,CACZ,MAAM5I,EAAO,UACb,OAAO,kBAAC,IACJ,SAAU,KAAK,MAAMA,CAAI,EACzB,EAAG,KAAK,MAAM,EACd,OAAQ,KAAK,MAAM,OACnB,YAAa,KAAK,MAAM,YACxB,SAAU4I,GACN,KAAK,eAAe5I,EAAM4I,CAAQ,EAC1C,CACJ,CAEA,cAAe,CACX,MAAM5I,EAAO,SACb,OAAO,kBAACyL,GAAA,CACJ,SAAU,KAAK,MAAMzL,CAAI,EACzB,EAAG,KAAK,MAAM,EACd,OAAQ,KAAK,MAAM,OACnB,YAAa,KAAK,MAAM,YACxB,SAAU4I,GACN,KAAK,eAAe5I,EAAM4I,CAAQ,EAC1C,CACJ,CAEA,WAAY,CACR,MAAM5I,EAAO,MACb,OAAO,kBAAC,IACJ,SAAU,KAAK,MAAMA,CAAI,EACzB,EAAG,KAAK,MAAM,EACd,OAAQ,KAAK,MAAM,OACnB,YAAa,KAAK,MAAM,YACxB,SAAU4I,GACN,KAAK,eAAe5I,EAAM4I,CAAQ,EAC1C,CACJ,CAEA,eAAgB,CACZ,MAAM5I,EAAO,UACb,OAAO,kBAAC,IACJ,SAAU,KAAK,MAAMA,CAAI,EACzB,EAAG,KAAK,MAAM,EACd,UAAW,KAAK,MAAM,UACtB,SAAU4I,GACN,KAAK,eAAe5I,EAAM4I,CAAQ,EAC1C,CACJ,CAEA,QAAS,CACL,OAAO,kBAAC3C,GAAA,GACJ,UAAW,KAAK,MAAM,QAAQ,OAC9B,KAAM,GACN,QAAS,IAAM,GACf,UAAS,GACT,SAAS,KACT,kBAAgB,8BAEf,kBAACC,GAAA,EAAW,CAAC,GAAG,8BAA8B,KAAK,MAAM,EAAE,oBAAoB,EAAE,KAAG,KAAK,MAAM,iBAAmB,KAAK,MAAM,WAAY,EAC1I,kBAACC,GAAA,EAAa,CAAC,UAAW,KAAK,MAAM,QAAQ,SACzC,kBAACuF,GAAA,EAAM,CAAC,SAAS,UACb,kBAACC,GAAA,GACG,MAAO,KAAK,MAAM,WAClB,SAAU,CAACpG,EAAOqG,IAAW,KAAK,SAAS,CAAE,WAAYA,CAAO,CAAC,EACjE,aAAW,cACX,eAAe,aAEf,kBAACC,GAAA,EAAG,CAAC,MAAO,KAAK,MAAM,EAAE,QAAQ,EAAG,GAAI,aAAc,gBAAe,oBAAqB,QAAS,CAAE,SAAU,KAAK,MAAM,QAAQ,QAAS,EAAG,EAC9I,kBAACA,GAAA,GAAI,MAAO,KAAK,MAAM,EAAE,YAAY,EAAG,GAAI,gBAAkB,QAAS,CAAE,SAAU,KAAK,MAAM,QAAQ,QAAS,EAC1G,gBAAe,oBAAqB,EACzC,kBAACA,GAAA,EAAG,CAAC,MAAO,KAAK,MAAM,EAAE,SAAS,EAAG,GAAI,cAAe,gBAAe,oBAAsB,QAAS,CAAE,SAAU,KAAK,MAAM,QAAQ,QAAS,EAAG,EACjJ,kBAACA,GAAA,EAAG,CAAC,MAAO,KAAK,MAAM,EAAE,QAAQ,EAAG,GAAI,aAAc,gBAAe,oBAAsB,QAAS,CAAE,SAAU,KAAK,MAAM,QAAQ,QAAS,EAAG,EAC/I,kBAACA,GAAA,EAAG,CAAC,MAAO,KAAK,MAAM,EAAE,KAAK,EAAG,GAAI,UAAW,gBAAe,oBAAsB,QAAS,CAAE,SAAU,KAAK,MAAM,QAAQ,QAAS,EAAG,EACzI,kBAACA,GAAA,EAAG,CAAC,MAAO,KAAK,MAAM,EAAE,SAAS,EAAG,GAAI,cAAe,gBAAe,oBAAsB,QAAS,CAAE,SAAU,KAAK,MAAM,QAAQ,QAAS,EAAG,CACrJ,CACJ,EACC,KAAK,MAAM,QAAU,kBAACC,GAAA,EAAc,IAAC,EAAK,KAC1C,CAAC,KAAK,MAAM,SAAW,KAAK,MAAM,aAAe,EAC9C,kBAAC,OAAI,UAAW,KAAK,MAAM,QAAQ,UAAW,KAAK,aAAa,CAAE,EAAS,KAC9E,CAAC,KAAK,MAAM,SAAW,KAAK,MAAM,aAAe,EAC9C,kBAAC,OAAI,UAAW,KAAK,MAAM,QAAQ,UAAW,KAAK,gBAAgB,CAAE,EAAS,KACjF,CAAC,KAAK,MAAM,SAAW,KAAK,MAAM,aAAe,EAC9C,kBAAC,OAAI,UAAW,KAAK,MAAM,QAAQ,UAAW,KAAK,cAAc,CAAE,EAAS,KAC/E,CAAC,KAAK,MAAM,SAAW,KAAK,MAAM,aAAe,EAC9C,kBAAC,OAAI,UAAW,KAAK,MAAM,QAAQ,UAAW,KAAK,aAAa,CAAE,EAAS,KAC9E,CAAC,KAAK,MAAM,SAAW,KAAK,MAAM,aAAe,EAC9C,kBAAC,OAAI,UAAW,KAAK,MAAM,QAAQ,UAAW,KAAK,UAAU,CAAE,EAAS,KAC3E,CAAC,KAAK,MAAM,SAAW,KAAK,MAAM,aAAe,EAC9C,kBAAC,OAAI,UAAW,KAAK,MAAM,QAAQ,UAAW,KAAK,cAAc,CAAE,EAAS,KAC/E,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,CAC9B,EACA,kBAAC1F,GAAA,EAAa,KACV,kBAACP,EAAA,GACG,QAAQ,YACR,SAAU,CAAC,KAAK,MAAM,WAAW,QAAU,KAAK,MAAM,OACtD,QAAS,IAAM,KAAK,OAAO,EAC3B,MAAM,UACN,UAAW,kBAACkG,GAAA,QAAS,IAAC,GACxB,KAAK,MAAM,EAAE,cAAc,CAAE,EAC/B,kBAAClG,EAAA,GACG,QAAQ,YACR,MAAM,OACN,SAAU,KAAK,MAAM,OACrB,QAAS,IAAM,KAAK,MAAM,WAAW,OAAS,KAAK,SAAS,CAAC,YAAa,EAAI,CAAC,EAAI,KAAK,MAAM,QAAQ,EACtG,UAAW,kBAAC6C,GAAA,QAAS,IAAC,GACxB,KAAK,MAAM,WAAW,OAAS,KAAK,MAAM,EAAE,QAAQ,EAAI,KAAK,MAAM,EAAE,OAAO,CAC9E,CACJ,CACJ,CACJ,CACJ,CAEAyC,GAAmB,UAAY,CAC3B,EAAG,SACH,YAAa,WACb,gBAAiB,WACjB,MAAO,UACP,KAAM,WACN,OAAQ,WACR,UAAW,WACX,QAAS,mBACb,EAEA,UAAelC,GAAA,SAAU,KAAE,cAAW,EAAM,EAAEkC,EAAkB,CAAC,E,wBClSjE,MAAMa,WAA4B,WAAU,CACxC,YAAY5O,EAAO,CACf,MAAMA,CAAK,EAEX,KAAK,MAAQ,CACT,SAAU,KACV,MAAO,KACP,SAAU,EACd,EAEA,KAAK,SAAW,GAEhB,KAAK,YAAc,cAAgB,EAEnC,KAAK,KAAO,GAAG,OAAO,SAAS,aAAa,OAAO,SAAS,OAAO,OAAO,SAAS,UACvF,CAEA,YAAY6O,EAAU,CACd,KAAK,WAAaA,IAClB,KAAK,SAAWA,EAChB,KAAK,MAAM,WAAWA,CAAQ,EAEtC,CAEA,mBAAoB,CAEhB,KAAK,MAAM,OAAO,aAAa,EAAE,KAAK,aAAc,KAAK,MAAM,OAAQ,oBAAqB,CACxF,QAAS,KAAK,MAAM,QACpB,cAAe,SAAS,KAAK,MAAM,cAAc,MAAM,GAAG,EAAE,IAAI,EAAG,EAAE,CACzE,EAAG5I,GAAU,CACLA,EAAO,QACP,KAAK,YAAY,EAAI,EACrB,KAAK,UAAY,YAAY,IAAM,KAAK,YAAY,EAAG,GAAI,EAE3D,KAAK,aAAe,WAAW,IAAM,CACjC,KAAK,aAAe,KACpB,KAAK,SAAS,CAAE,SAAU,EAAM,CAAC,CACrC,EAAG,GAAK,IAER,KAAK,SAAS,CAAE,MAAO,SAAO,eAAe,EAAG,SAAU,EAAM,CAAC,EACjE,KAAK,YAAY,EAAK,EAE9B,CAAC,CACL,CAEA,sBAAuB,CACnB,KAAK,WAAa,cAAc,KAAK,SAAS,EAC9C,KAAK,UAAY,KAEjB,KAAK,cAAgB,aAAa,KAAK,YAAY,EACnD,KAAK,aAAe,IACxB,CAEA,aAAc,CAQV,MAAM,KAAK,IAAI,EACV,KAAK6I,GAAOA,EAAI,KAAK,CAAC,EACtB,KAAKzE,GAAY,CAEVA,GAAYA,EAAS,SACrBA,EAAS,OAASA,EAAS,OAAO,OAAOZ,GAAQA,EAAK,KAAK,CAAC,GAE5DY,GAAY,CAACA,EAAS,SAAWA,EAAS,SAAWA,EAAS,QAC9DA,EAAS,OAAO,KAAK,EAAE,EACvBA,EAAS,OAAO,KAAK,qDAAqD,EAC1EA,EAAS,OAAO,KAAK,SAAO,+CAAgD,KAAK,MAAM,OAAO,CAAC,GACxFA,GAAA,MAAAA,EAAU,SACjBA,EAAS,OAAO,QAAQ,EAAE,EAC1BA,EAAS,OAAO,QAAQ,qDAAqD,EAC7EA,EAAS,OAAO,QAAQ,SAAO,kCAAmC,KAAK,MAAM,OAAO,CAAC,GAEzF,KAAK,SAAS,CAAE,SAAAA,EAAU,MAAO,IAAK,EAAG,IAAM,CACvCA,GAAY,CAACA,EAAS,SACtB,KAAK,YAAY,EAAK,EACtB,KAAK,WAAa,cAAc,KAAK,SAAS,EAC9C,KAAK,UAAY,MACVA,GAAA,MAAAA,EAAU,SACjB,KAAK,YAAY,EAAI,EAIrB,KAAK,YAAY,SACjB,WAAW,IAAM,KAAK,YAAY,QAAQ,UAAY,KAAK,YAAY,QAAQ,aAAc,GAAG,CAExG,CAAC,CACL,CAAC,EACA,MAAM,GAAK,CACH,KAAK,MAAM,UACZ,KAAK,SAAS,CAAE,MAAO,EAAE,SAAS,CAAE,EAAG,IAAM,KAAK,YAAY,EAAK,CAAC,CAE5E,CAAC,CACT,CAEA,QAAS,CAnHb,cAoHQ,OAAO,kBAACxB,GAAA,GACJ,QAAS,CAACpH,EAAGsN,IAAW,CAChBA,IAAW,iBAAmBA,IAAW,iBACzC,KAAK,MAAM,QAAQ,CAE3B,EACA,KAAM,GACN,SAAS,KACT,UAAS,IAET,kBAACjG,GAAA,EAAW,KAAE,SAAO,2BAA2B,CAAE,EAClD,kBAACC,GAAA,EAAa,CAAC,MAAO,CAAE,OAAQ,IAAK,QAAS,SAAU,SAAU,QAAS,IACrE,CAAC,KAAK,MAAM,UAAY,KAAK,MAAM,SAAS,UAAY,CAAC,KAAK,MAAM,MAAQ,kBAAC,iBAAc,IAAC,EAAK,KAClG,KAAK,MAAM,UAAY,KAAK,MAAM,MAAQ,kBAAC,YACxC,IAAK,KAAK,YACV,MAAO,CACH,MAAO,OACP,OAAQ,OACR,OAAQ,OACR,WAAY,KAAK,MAAM,YAAc,OAAS,OAAS,OACvD,MAAO,KAAK,MAAM,YAAc,OAAS,OAAS,OAClD,UAAW,aACX,WAAY,kHACZ,QAAQ,OAAK,MAAM,WAAX,QAAqB,QAAU,kBAClC,KAAK,MAAM,OAAU,KAAK,MAAM,UAAY,CAAC,KAAK,MAAM,SAAS,SAAW,CAAC,KAAK,MAAM,SAAS,QAAW,gBAAkB,MACvI,EACA,MAAO,KAAK,MAAM,MAAQ,KAAK,MAAM,MACjC,KAAK,MAAM,SAAS,QAAU,KAAK,MAAM,SAAS,OAAO,OACrD,KAAK,MAAM,SAAS,OAAO,KAAK;AAAA,CAAI,EAAI,KAAK,MAAM,SAAS,OAAO,KAAK;AAAA,CAAI,EACpF,SAAQ,GACZ,EAAK,IACT,EACA,kBAACC,GAAA,EAAa,KACV,kBAACP,EAAA,GACG,QAAQ,YACR,SAAU,KAAK,MAAM,UAAa,CAAC,KAAK,MAAM,SAAS,OAAK,MAAM,WAAX,cAAqB,SAC5E,QAAS,IAAM,CAxJnC,IAAAuG,GAyJ4BA,EAAA,KAAK,MAAM,WAAX,MAAAA,EAAqB,SACrB,OAAO,SAAS,OAAO,EAE3B,KAAK,MAAM,QAAQ,CACvB,EACA,OAAO,OAAK,MAAM,WAAX,QAAqB,QAAU,UAAY,OAClD,WAAW,OAAK,MAAM,WAAX,QAAqB,QAAU,kBAAC,WAAU,IAAC,EAAK,kBAAC1D,GAAA,QAAS,IAAC,IAErE,OAAK,MAAM,WAAX,QAAqB,QAAU,SAAO,QAAQ,EAAI,SAAO,OAAO,CACrE,CACJ,CACJ,CACJ,CACJ,CAEAsD,GAAoB,UAAY,CAC5B,OAAQ,sBACR,OAAQ,sBACR,QAAS,oBACT,QAAS,sBACT,cAAe,sBACf,WAAY,oBACZ,UAAW,UACf,EAEA,OAAeA,G,2WC/If,MAAM,GAAS,KAAO,CAClB,KAAM,CACF,SAAU,CACd,EACA,MAAO,CACH,QAAS,OACT,SAAU,OACV,eAAgB,QACpB,EACA,iBAAkB,CACd,OAAQ,GACR,QAAS,OACT,OAAQ,CACZ,EACA,mBAAoB,CAChB,MAAO,IACP,YAAa,GACb,SAAU,GACV,WAAY,IACZ,UAAW,QACf,EACA,cAAe,CACX,KAAM,EACN,SAAU,GACV,WAAY,IACZ,UAAW,QACf,EACA,oBAAqB,CACjB,MAAO,IACP,SAAU,GACV,WAAY,IACZ,UAAW,QACf,EACA,aAAc,CACV,MAAO,GACX,EACA,QAAS,CACL,QAAS,OACT,KAAM,EACN,QAAS,QACb,EACA,KAAM,CACF,WAAY,MAChB,EACA,YAAa,CACT,QAAS,OACT,SAAU,OACV,MAAO,MACX,EACA,YAAa,CACT,YAAa,MACjB,EACA,iBAAkB,CACd,QAAS,OACT,SAAU,SACV,WAAY,SACZ,OAAQ,EACZ,EACA,GAAI,CACA,WAAY,EACZ,cAAe,EACf,YAAa,GACb,aAAc,CAClB,EACA,OAAQ,CACJ,QAAS,OACT,SAAU,SACV,KAAM,EACN,WAAY,SACZ,YAAa,CACjB,EACA,wCAAyC,CACrC,WAAY,CACR,QAAS,iBACb,CACJ,EACA,uCAAwC,CACpC,UAAW,CACP,QAAS,iBACb,CACJ,EACA,uCAAwC,CACpC,UAAW,CACP,QAAS,iBACb,CACJ,EACA,aAAc,CACV,SAAU,GACV,QAAS,GACT,QAAS,OACb,CACJ,GAEA,IAAIK,GAAY,CAAC,EAEjB,MAAMpL,GAAa,CACf,OAAUqL,GAAA,gBACV,gBAAiBA,GAAA,gBACjB,IAAOA,GAAA,YACP,MAASA,GAAA,cACT,YAAaA,GAAA,cACb,YAAaA,GAAA,aACjB,EAEMC,GAAwB,CAACnC,EAAI5M,EAAGS,EAASuO,IAAc,CACzD,MAAMrL,EAAWqL,EAAYA,EAAUpC,CAAE,EAAI,KAC7C,OAAKjJ,EAID,OAAOA,GAAa,SACbA,EAGJ,CACH,kBAAC,MAAG,UAAWlD,EAAQ,IAEfkD,GAAY,OAAOA,GAAa,SAAW,OAAO,KAAKA,CAAQ,EAAE,IAAIsD,GACjE,kBAAC,MAAG,IAAKA,CAAA,EACL,kBAAC,QAAK,UAAWxG,EAAQ,OACrB,kBAAC,QAAK,UAAWA,EAAQ,MAAOT,EAAEiH,CAAK,EAAE,IAAE,EACzCxD,GAAWwD,CAAK,EAAIxD,GAAWwD,CAAK,EAAEtD,EAASsD,CAAK,EAAGjH,CAAC,EAAI2D,EAASsD,CAAK,GAAK,IACrF,CACJ,CAAK,EAAI,kBAACgI,GAAA,EAAQ,IAAC,CAE/B,EACA,kBAAC,OAAI,UAAWxO,EAAQ,aACpB,kBAAC,OAAI,UAAWA,EAAQ,aACnBkD,GAAY,OAAOA,GAAa,SAAW,OAAO,KAAKA,CAAQ,EAAE,IAAI,CAACsD,EAAOiI,IAAQA,EAAM,GACxF,kBAAC,OAAI,UAAWzO,EAAQ,iBAAkB,IAAKwG,CAAA,EAC3C,kBAAC,QAAK,UAAW,aAAiBxG,EAAQ,KAAMA,EAAQ,MAAM,GAAIT,EAAEiH,CAAK,EAAE,IAAE,EAC3ExD,GAAWwD,CAAK,EAAIxD,GAAWwD,CAAK,EAAEtD,EAASsD,CAAK,EAAGjH,CAAC,EAAI2D,EAASsD,CAAK,GAAK,IACrF,CAAM,EAAI,kBAACgI,GAAA,EAAQ,IAAC,CAC5B,EACA,kBAAC,OAAI,UAAWxO,EAAQ,aACnBkD,GAAY,OAAOA,GAAa,SAAW,OAAO,KAAKA,CAAQ,EAAE,IAAI,CAACsD,EAAOiI,IAAQA,EAAM,GAAKA,EAAM,IACnG,kBAAC,OAAI,UAAWzO,EAAQ,iBAAkB,IAAKwG,CAAA,EAC3C,kBAAC,QAAK,UAAW,aAAiBxG,EAAQ,KAAMA,EAAQ,MAAM,GAAIT,EAAEiH,CAAK,EAAE,IAAE,EAC3ExD,GAAWwD,CAAK,EAAIxD,GAAWwD,CAAK,EAAEtD,EAASsD,CAAK,EAAGjH,CAAC,EAAI2D,EAASsD,CAAK,GAAK,IACrF,CAAM,EAAI,kBAACgI,GAAA,EAAQ,IAAC,CAC5B,EACA,kBAAC,OAAI,UAAWxO,EAAQ,aACnBkD,GAAY,OAAOA,GAAa,UAAY,OAAO,KAAKA,CAAQ,EAAE,IAAI,CAACsD,EAAOiI,IAAQA,EAAM,IACzF,kBAAC,OACG,UAAWzO,EAAQ,iBAAkB,IAAKwG,CAAA,EACzCtD,GAAY,OAAOA,GAAa,SAC7B,oCACI,kBAAC,QAAK,UAAW,aAAiBlD,EAAQ,KAAMA,EAAQ,MAAM,GAAIT,EAAEiH,CAAK,EAAE,IAAE,EAC3ExD,GAAWwD,CAAK,EAAIxD,GAAWwD,CAAK,EAAEtD,EAASsD,CAAK,EAAGjH,CAAC,EAAI2D,EAASsD,CAAK,GAAK,IACrF,EAEA,kBAACgI,GAAA,EAAQ,IAAC,CAElB,CAAM,CACd,CACJ,CACJ,EAjDW,CAAC,kBAACA,GAAA,EAAQ,IAAC,CAAE,CAkD5B,EAEMzL,GAAkB2L,GAChBA,IAAU,QACH,kBAACC,EAAA,EAAa,IAAC,EACfD,IAAU,OACV,kBAACE,GAAA,QAAQ,IAAC,EACVF,IAAU,OACV,kBAACG,GAAA,QAAW,IAAC,EACbH,IAAU,QACV,kBAACI,GAAA,QAAS,IAAC,EAEf,KAIX,MAAMC,WAAc,WAAU,CAC1B,YAAY5P,EAAO,CACf,MAAMA,CAAK,EAmBf,YAAI,CAAC6P,EAAMC,EAAMC,KACTD,IAAS,QAAaC,IAAS,QAAa,CAACd,GAAU,GAAGY,KAAQC,KAAQC,GAAM,EAChFd,GAAU,GAAGY,KAAQC,KAAQC,GAAM,EAAI,KAAK,MAAM,EAAEF,EAAMC,EAAMC,CAAI,EAEpED,IAAS,QAAa,CAACb,GAAU,GAAGY,KAAQC,GAAM,EAClDb,GAAU,GAAGY,KAAQC,GAAM,EAAI,KAAK,MAAM,EAAED,EAAMC,CAAI,EAC9Cb,GAAUY,CAAI,IACtBZ,GAAUY,CAAI,EAAI,KAAK,MAAM,EAAEA,CAAI,GAGhCC,IAAS,QAAaC,IAAS,OAAYd,GAAU,GAAGY,KAAQC,KAAQC,GAAM,EAAKD,IAAS,OAAYb,GAAU,GAAGY,KAAQC,GAAM,EAAIb,GAAUY,CAAI,EAC/J,EAeD,uBAAe,CAACG,EAAOC,IAAW,CAC9B,MAAMC,EAAWF,EAAM,IAAI7J,GACnB8J,EAAO9J,EAAI,GAAG,EACP,KAAK,MAAM,OAAO,YAAYA,EAAI,IAAK,KAAM,KAAK,MAAM,aAAa,EACvE,MAAMlF,IACH,QAAQ,MAAM,2BAA6BA,CAAK,EAChDA,EAAM,SAAS,EAAE,SAAS,SAAS,GAAK,KAAK,SAAS,CAAE,0BAA2B,EAAK,CAAC,EAClFA,EACV,EACA,KAAKP,IACD,CAAE,GAAIyF,EAAI,IAAK,KAAAzF,CAAK,EAAE,EAExB,CAAE,GAAIyF,EAAI,IAAK,KAAM,SAAU,CAE7C,EAED,OAAO,IAAI,QAAQgK,GACf,QAAQ,IAAID,CAAQ,EACf,KAAKE,GAAW,CACb,MAAMC,EAAa,CAAC,EACpBD,EAAQ,QAAQtB,GAAOuB,EAAWvB,EAAI,EAAE,EAAIA,EAAI,IAAI,EACpDqB,EAAQE,CAAU,CACtB,CAAC,CAAC,CACd,CAAC,EAED,mBAAW,IACA,KAAK,MAAM,OAAO,SAAS,GAAM,GAAO,KAAK,MAAM,aAAa,EAClE,KAAKL,GAAS,KAAK,MAAM,OAAO,cAAc,KAAK,MAAM,YAAa,CAAE,OAAQ,EAAM,EAAG,GAAO,KAAK,MAAM,aAAa,EACpH,KAAWM,GAAc,yBACtB,MAAMpN,EAAQ,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,KAAK,CAAC,EAEzD,QAAS4C,EAAI,EAAGA,EAAIkK,EAAM,OAAQlK,IAAK,CACnC,IAAIyK,EAAa,MAAM,KAAK,MAAM,OAAO,SAAS,GAAGP,EAAMlK,CAAC,EAAE,WAAW,EACzE5C,EAAM8M,EAAMlK,CAAC,EAAE,GAAG,EAAKyK,EAAqB,CAAC,CAACA,EAAW,IAArB,EACxC,CAEA,MAAMnB,EAAY,MAAM,KAAK,aAAaY,EAAO9M,CAAK,EAChDmF,EAAW,CAAE,MAAAnF,EAAO,MAAA8M,EAAO,UAAAZ,EAAW,WAAAkB,CAAW,EACnD,KAAK,MAAM,YAAcN,EAAM,QAAU,IACzC3H,EAAS,WAAa,IAE1B,KAAK,SAASA,CAAQ,CAC1B,CAAC,GACA,MAAM5G,GAAK,CACR,OAAO,MAAM,yBAA2BA,CAAC,EACzCA,EAAE,SAAS,EAAE,SAAS,SAAS,GAAK,KAAK,SAAS,CAAE,0BAA2B,EAAK,CAAC,CACzF,CAAC,CAAC,CACb,EAED,sBAAc,CAACkI,EAAQxD,IAAQ,CAC3B,MAAM6J,EAAQ,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,KAAK,CAAC,EACnD9M,EAAQ,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,KAAK,CAAC,EAEpD,MAAM,QAAQyG,CAAM,IACrBA,EAAS,CAAE,GAAIA,EAAQ,IAAAxD,EAAK,KAAMA,EAAM,UAAY,QAAS,GAGjE,QAAQ,IAAIwD,EAAO,IAAUxB,GAAS,yBAClC,MAAMqI,EAAcR,EAAM,KAAK/B,GAAQA,EAAK,MAAQ9F,EAAM,EAAE,EAC5D,GAAIqI,EAAa,CACb,MAAMC,EAAQT,EAAM,QAAQQ,CAAW,EACnCrI,EAAM,IAEN6H,EAAMS,CAAK,EAAItI,EAAM,IAGrB6H,EAAM,OAAOS,EAAO,CAAC,CAE7B,KAAO,CACH,MAAMnL,EAAQ,MAAM,KAAK,MAAM,OAAO,SAAS6C,EAAM,GAAK,QAAQ,EAClEjF,EAAMiF,EAAM,EAAE,EAAI7C,EAAQA,EAAM,IAAM,GAEtC0K,EAAM,KAAK7H,EAAM,GAAG,CACxB,CACJ,CAAC,EAAC,EACG,KAAK,IAAM,CACR,MAAME,EAAW,CAAE,MAAA2H,EAAO,MAAA9M,CAAM,EAE5B,KAAK,MAAM,YAAc8M,EAAM,QAAU,IACzC3H,EAAS,WAAa,IAG1B,KAAK,SAASA,CAAQ,CAC1B,CAAC,CACT,CAAC,EAED,2BAAmB5E,GAAU,CACzB,IAAIP,EAAQ,KAAK,MAAM,KAAK,UAAU,KAAK,MAAM,KAAK,CAAC,EACnDkL,EAAU,GAEd3K,EAAO,QAAQ0E,GAAS,CAChBA,EAAM,OAAS,SACXjF,EAAMiF,EAAM,EAAE,IAAM,SACpB,OAAOjF,EAAMiF,EAAM,EAAE,EACrBiG,EAAU,IAEN,CAAC,CAAClL,EAAMiF,EAAM,EAAE,GAAQ,CAAC,CAACA,EAAM,QACxCjF,EAAMiF,EAAM,EAAE,EAAIA,EAAM,MACxBiG,EAAU,GAElB,CAAC,EAEDA,GAAW,KAAK,SAAS,CAAE,MAAAlL,CAAM,CAAC,CACtC,CAAC,EAiCD,iCAAyB,IAChB,KAAK,MAAM,WAAW,WAIpB,kBAAC,IACJ,IAAK,KAAK,MAAM,MAAM,KAAK,MAAM,WAAW,KAAK,EACjD,OAAQ,KAAK,MAAM,OACnB,WAAY,KAAK,MAAM,WAAW,WAClC,EAAG,KAAK,EACR,WAAY,KAAK,MAAM,WACvB,QAASiD,GAAO,CACZ,KAAK,SAAS,CAAE,WAAY,CACxB,MAAO,EACP,WAAY,EAChB,CAAC,CAAC,EACEA,GACA,KAAK,MAAM,OAAO,UAAUA,EAAI,IAAKA,CAAG,EACnC,KAAKlB,GAAK,KAAK,YAAY,CAAC,EAC5B,MAAMxD,GAAK,MAAM,wBAA0BA,CAAC,CAAC,CAE1D,EACJ,EApBW,IAqBd,EAED,sCAA8B,IACrB,KAAK,MAAM,0BAGL,kBAACiP,GAAA,GACJ,cAAe,KAAK,MAAM,cAC1B,EAAG,KAAK,EACR,QAAeC,GAAiB,yBAC5B,KAAK,SAAS,CAAE,0BAA2B,EAAM,CAAC,EAC9CA,IACA,KAAK,SAAS,CAAE,cAAAA,CAAc,CAAC,EAC/B,MAAM,KAAK,SAAS,EAE5B,CAAC,CAAD,CACJ,EAZO,IAcd,EAED,gCAAwBnI,GACpB,KAAK,SAAS,CAAE,iBAAkB,GAAO,WAAY,IAAK,EAAGA,CAAE,CAAC,EAEpE,+BAAuB,CAAOoI,EAAYpI,IAAO,yBAC7C,MAAMqI,EAAkB,MAAM,KAAK,MAAM,OAAO,sBAAsB,uBAAuB,EAE7F,KAAK,SAAS,CACV,iBAAkB,GAClB,WAAAD,EACA,gBAAAC,CACJ,EAAGrI,CAAE,CACT,CAAC,CAAD,EAGA,kBAAU,CAACnB,EAAOyJ,EAAM,KAAU,CAC9B,MAAMC,EAAU,KAAK,MAAM,WAAW,eAAe,EAC/C7M,EAAY,KAAK,MAAM,MAAM,KAAKvC,GAAMA,EAAG,OAAO,OAAS,KAAK,MAAM,UAAU,EAAE,OAAO,iBACzFqP,EAAO,CAAC,EAEd,OAAI9M,GAAa6M,GAAWA,EAAQ,MAChC,OAAO,KAAKA,EAAQ,IAAI,EAAE,QAAQnH,GAAW,CACzC,GAAI,EACI,QAAUA,EAAS1F,CAAS,GAAK4M,IACjCE,EAAK,KAAK,CACN,QAAApH,EACA,KAAM,KAAK,MAAM,cAAgBmH,EAAQ,KAAKnH,CAAO,EAAE,GAAKmH,EAAQ,KAAKnH,CAAO,EAAE,KAAK,MAAM,IAAI,GAAKmH,EAAQ,KAAKnH,CAAO,EAAE,EAChI,CAAC,CAET,OAASnI,EAAP,CAEE,QAAQ,KAAK,mBAAmBmI,WAAiB1F,IAAY,CACjE,CACJ,CAAC,EAGE8M,CACX,CAAC,EA4BD,6BAAqB,IACZ,KAAK,MAAM,iBAIT,kBAACC,GAAA,GACJ,KAAM,GACN,QAAS,KAAK,MAAM,WACpB,cAAe,KAAK,MAAM,WAAW,eAAe,EACpD,EAAG,KAAK,EACR,WAAY,KAAK,MAAM,gBAAkB,KAAK,EAAE,cAAc,EAAI,KAAK,EAAE,mBAAmB,EAC5F,kBAAiB,GACjB,KAAM,KAAK,QAAQ,EACnB,kBAAmB,KAAK,MAAM,kBAC9B,cAAe,KAAK,MAAM,cAC1B,SAAU,IAAY,yBAClB,MAAML,EAAa,KAAK,MAAM,WAC9B,KAAK,sBAAsB,IACvB,KAAK,SAAS,CAAE,aAAcA,CAAW,CAAC,CAAC,CACnD,CAAC,EACD,QAAS,IAAM,KAAK,sBAAsB,EAC9C,EAnBW,IAoBd,EApTG,KAAK,MAAQ,CACT,UAAW,OAAO,eAAiB,OAAO,cAAc,QAAQ,gBAAgB,IAAM,OACtF,MAAO,CAAC,EACR,MAAO,CAAC,EACR,WAAY,CAAC,EACb,UAAW,CAAC,EACZ,YAAa,OAAO,eAAiB,OAAO,cAAc,QAAQ,kBAAkB,GAAK,GACzF,0BAA2B,GAC3B,cAAeF,GAAA,mBAA6C,EAC5D,WAAY,GACZ,aAAc,GACd,iBAAkB,KAClB,WAAY,CAAE,MAAO,EAAG,WAAY,EAAG,EACvC,mBAAoB,CAAE,MAAO,EAAG,WAAY,EAAG,CACnD,CACJ,CAeA,mBAAoB,CAChB,KAAK,SAAS,EACT,KAAK,IAAM,CACR,KAAK,MAAM,YAAY,gBAAgB,KAAK,WAAW,EACvD,KAAK,MAAM,YAAY,qBAAqB,KAAK,gBAAgB,CACrE,CAAC,CACT,CAEA,sBAAuB,CACnB,KAAK,MAAM,YAAY,kBAAkB,KAAK,WAAW,EACzD,KAAK,MAAM,YAAY,uBAAuB,KAAK,gBAAgB,CACvE,CA2GA,WAAY,CACR,MAAMQ,EAAQ,KAAK,YAAY,EAC1B,OAAOvP,GAAM,KAAK,MAAM,WAAaA,EAAG,KAAK,YAAY,EAAE,SAAS,KAAK,MAAM,WAAW,YAAY,CAAC,EAAI,EAAI,EAC/G,IAAIA,GAAM,KAAK,MAAM,SAAWA,EAAG,WAAaA,EAAG,SAAS,EAEjE,OAAOuP,EAAM,OAASA,EAAQ,KAAK,EAAE,4BAA4B,CACrE,CAEA,4BAA6B,CACzB,OAAK,KAAK,MAAM,mBAAmB,WAI5B,kBAAC,IACJ,YAAa,KAAK,MAAM,mBAAmB,WAC3C,MAAO,KAAK,MAAM,MAClB,UAAW,KAAK,MAAM,UACtB,gBAAiB,KAAK,MAAM,mBAAmB,WAC/C,IAAI,OACJ,QAAS,IAAM,KAAK,SAAS,CAAC,mBAAoB,CAC9C,MAAO,EACP,WAAY,EAChB,CAAC,CAAC,EACF,KAAM,KAAK,MAAM,KAEjB,OAAQ,KAAK,MAAM,OAEnB,EAAG,KAAK,EACZ,EAlBW,IAmBf,CAmFA,oBAAqB,CACjB,OAAK,KAAK,MAAM,aAIZ,KAAK,MAAM,gBACJ,kBAAC,IACJ,OAAQ,KAAK,MAAM,OACnB,OAAQ,KAAK,MAAM,aACnB,QAAS,KAAK,MAAM,WAAW,eAAe,EAAE,QAChD,QAAS,IAAM,KAAK,SAAS,CAAE,aAAc,EAAM,CAAC,EACpD,cAAe,KAAK,MAAM,cAC1B,WAAYC,GAAc,KAAK,MAAM,WAAWA,CAAU,EAC1D,UAAW,KAAK,MAAM,UAC1B,EAGG,kBAAC,IACJ,OAAQ,KAAK,MAAM,OACnB,OAAQ,KAAK,MAAM,aACnB,MAAO,KAAK,MAAM,MAClB,QAAS,KAAK,MAAM,WAAW,eAAe,EAAE,QAChD,QAAS,IAAM,KAAK,SAAS,CAAE,aAAc,EAAM,CAAC,EACxD,EArBW,IAsBf,CA0BA,aAAc,CACV,OAAO,KAAK,MAAM,MAAM,IAAI,CAAC,CACzB,IAAAlO,EACA,OAAQ,CAAE,KAAAL,EAAM,KAAA9B,EAAM,MAAAsC,EAAO,MAAAgO,EAAO,iBAAAC,CAAiB,EACrD,OAAQ,CAAE,GAAI,CAAE,SAAAC,CAAS,CAAE,CAC/B,EAAGhC,IAAK,CA/gBhB,QA+gBoB,OACR,WAAY,KAAK,MAAM,SAAW,kBAAC,IAC/B,aAAc,KAAK,MAAM,aACzB,IAAKrM,EACL,cAAe,IAAM,KAAK,SAAS,CAAE,WAAY,CAAE,MAAOqM,EAAK,WAAY1M,CAAK,CAAE,CAAC,EACnF,sBAAuB,IAAM,KAAK,SAAS,CAAE,mBAAoB,CAAE,MAAO0M,EAAK,WAAY1M,CAAK,CAAC,CAAC,EAClG,YAAa,KAAK,MAAM,YACxB,WAAY,KAAK,MAAM,WACvB,OAAQ,KAAK,MAAM,OACnB,KAAAA,EACA,gBAAAgB,GACA,MAAO,KAAK,MAAM,MAAMX,CAAG,EAC3B,MAAAG,EACA,MAAOtC,EACP,MAAAsQ,EACA,GAAIE,EACJ,qBAAsB,IAAM,KAAK,qBAAqB1O,CAAI,EAC1D,YAAauM,GAAsBlM,EAAK,KAAK,EAAG,KAAK,MAAM,QAAS,KAAK,MAAM,SAAS,EAAE,CAAC,EAC3F,SAAU,KAAK,MAAM,UAAUA,CAAG,EAClC,WAAAY,GACA,YAAW,OAAK,MAAM,WAAW,eAAe,IAArC,cAAwC,UAAW,IAC9D,qBAAsB,IAAM,KAAK,MAAM,eAAe,eAAejB,GAAM,EAC3E,cAAe,KAAK,MAAM,cAAgBK,EAC1C,UAAWoO,EACX,OAAO,QACP,EAAG,KAAK,EACR,IAAApO,EACA,oBAAqB,KAAK,MAAM,oBACpC,EAAK,KACL,UAAY,KAAK,MAAM,SA2BlB,KA3B6B,kBAAC,IAC/B,aAAc,KAAK,MAAM,aACzB,IAAKA,EACL,cAAe,IAAM,KAAK,SAAS,CAAE,WAAY,CAAE,MAAOqM,EAAK,WAAY1M,CAAK,CAAE,CAAC,EACnF,sBAAuB,IAAM,KAAK,SAAS,CAAE,mBAAoB,CAAE,MAAO0M,EAAK,WAAY1M,CAAK,CAAC,CAAC,EAClG,YAAa,KAAK,MAAM,YACxB,WAAY,KAAK,MAAM,WACvB,OAAQ,KAAK,MAAM,OACnB,KAAAA,EACA,MAAO,KAAK,MAAM,MAAMK,CAAG,EAC3B,MAAAG,EACA,MAAOtC,EACP,MAAAsQ,EACA,GAAIE,EACJ,gBAAA1N,GACA,qBAAsB,IAAM,KAAK,qBAAqBhB,CAAI,EAC1D,qBAAsB,IAAM,KAAK,MAAM,eAAe,eAAeA,GAAM,EAC3E,cAAe,KAAK,MAAM,cAAgBK,EAC1C,YAAakM,GAAsBlM,EAAK,KAAK,EAAG,KAAK,MAAM,QAAS,KAAK,MAAM,SAAS,EAAE,CAAC,EAC3F,SAAU,KAAK,MAAM,UAAUA,CAAG,EAClC,WAAAY,GACA,YAAW,OAAK,MAAM,WAAW,eAAe,IAArC,cAAwC,UAAW,IAC9D,UAAWwN,EACX,OAAO,QACP,EAAG,KAAK,EACR,IAAApO,EACA,oBAAqB,KAAK,MAAM,oBACpC,EACA,KAAAL,CACJ,EAAE,CACN,CAEA,QAAS,CACL,KAAM,CACF,QAAA/B,EACA,WAAA8C,CACJ,EAAI,KAAK,MAET,OAAK,KAAK,MAAM,MAAM,OAIf,kBAAC4N,GAAA,EAAY,KACf,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,kBAACC,GAAA,EAAS,KACN,kBAAC7I,EAAA,EAAO,CAAC,MAAO,KAAK,EAAE,kBAAkB,GACrC,kBAAC8I,GAAA,EAAU,CAAC,KAAK,QAAQ,QAAS,IAAM,EACnC,OAAO,eAAiB,OAAO,cAAc,QAAQ,iBAAkB,KAAK,MAAM,SAAW,QAAU,MAAM,EAC9G,KAAK,SAAS,CAAC,SAAU,CAAC,KAAK,MAAM,QAAQ,CAAC,CAClD,GACK,KAAK,MAAM,SAAW,kBAACC,GAAA,EAAc,IAAC,EAAK,kBAACC,GAAA,EAAY,IAAC,CAC9D,CACJ,EACA,kBAAChJ,EAAA,EAAO,CAAC,MAAO,KAAK,EAAE,QAAQ,GAC3B,kBAAC8I,GAAA,EAAU,CAAC,KAAK,QAAQ,QAAS,IAAM,KAAK,YAAY,GACrD,kBAAC7J,GAAA,QAAW,IAAC,CACjB,CACJ,EACA,kBAAC,OAAI,UAAW/G,EAAQ,KAAM,EAC7B,KAAK,MAAM,MAAM,OAAS,EAAI,kBAAC,aAC5B,QAAQ,WACR,MAAO,KAAK,EAAE,QAAQ,EACtB,MAAO,CAAE,OAAQ,OAAQ,EACzB,MAAO,KAAK,MAAM,WAClB,SAAUsH,GAAS,EACd,OAAO,eAAiB,OAAO,cAAc,QAAQ,iBAAkBA,EAAM,OAAO,KAAK,EAC1F,KAAK,SAAS,CAAC,WAAYA,EAAM,OAAO,KAAK,CAAC,CAClD,EACA,WAAY,CACR,aAAc,KAAK,MAAM,WAAa,kBAAC,iBAAc,CAAC,SAAS,OAC3D,kBAACsJ,GAAA,GACG,KAAK,QACL,QAAS,IAAM,EACV,OAAO,eAAiB,OAAO,cAAc,QAAQ,iBAAkB,EAAE,EAC1E,KAAK,SAAS,CAAC,WAAY,EAAE,CAAC,CAClC,GAEA,kBAACnG,GAAA,QAAS,IAAC,CACf,CACJ,EAAoB,IACxB,EACJ,EAAK,KACL,kBAAC,OAAI,UAAWzK,EAAQ,KAAM,CAClC,EACA,kBAAC+Q,GAAA,EAAU,CAAC,SAAS,QACjB,kBAAC,OAAI,UAAW,KAAK,MAAM,SAAW/Q,EAAQ,MAAQ,IACjD,CAAC,KAAK,MAAM,UACT,kBAAC,OAAI,UAAWA,EAAQ,kBACpB,kBAAC,OAAI,UAAWA,EAAQ,oBACnB,KAAK,EAAE,OAAO,CACnB,EACA,kBAAC,OAAI,UAAWA,EAAQ,SAEpB,kBAAC,OAAI,UAAW,aAAiBA,EAAQ,cAAeA,EAAQ,SAAS,GAAG,KAAG,EAC/E,kBAAC,OAAI,UAAW,aAAiBA,EAAQ,cAAeA,EAAQ,SAAS,GAAG,KAAG,EAC/E,kBAAC,OAAI,UAAW,aAAiBA,EAAQ,cAAeA,EAAQ,SAAS,GAAI,KAAK,EAAE,QAAQ,CAAE,EAC9F,kBAAC,OAAI,UAAW,aAAiBA,EAAQ,cAAeA,EAAQ,UAAU,GAAI,KAAK,EAAE,WAAW,EAAE,kBAAC,OAAI,UAAWA,EAAQ,cAAc,eAAa,CAAM,EAC3J,kBAAC,OAAI,UAAW,aAAiBA,EAAQ,cAAeA,EAAQ,UAAU,GAAI,KAAK,EAAE,WAAW,EAAE,kBAAC,OAAI,UAAWA,EAAQ,cAAc,eAAa,CAAM,EAC3J,kBAAC,OAAI,UAAW,aAAiBA,EAAQ,cAAeA,EAAQ,SAAS,GAAI,KAAK,EAAE,QAAQ,CAAE,EAC9F,kBAAC,OAAI,UAAW,aAAiBA,EAAQ,oBAAqB8C,GAAc9C,EAAQ,YAAY,EAAG,CACvG,CACJ,EACH,KAAK,UAAU,CACpB,CACJ,CACJ,EAtEW,kBAAC,iBAAc,IAAC,CAuE/B,CACJ,CAEA+O,GAAM,UAAY,CACd,EAAG,SACH,WAAY,SACZ,OAAQ,WACR,aAAc,WACd,eAAgB,SAChB,YAAa,WACb,oBAAqB,SACrB,MAAO,WACP,cAAe,SACf,kBAAmB,SACnB,YAAa,WACb,cAAe,WACf,WAAY,QAChB,EAEA,UAAe,aAAU,KAAE,cAAW,EAAM,EAAEA,EAAK,CAAC,C","sources":["components/UploadImage.jsx","components/Hosts/HostCard.jsx","components/Hosts/HostRow.jsx","components/Hosts/HostEdit.jsx","dialogs/JsControllerDialog.jsx","components/BaseSettings/BaseSettingsSystem.jsx","components/BaseSettings/BaseSettingsMultihost.jsx","components/BaseSettings/BaseSettingsObjects.jsx","components/BaseSettings/BaseSettingsStates.jsx","components/BaseSettings/BaseSettingsLog.jsx","components/BaseSettings/BaseSettingsPlugins.jsx","dialogs/BaseSettingsDialog.jsx","dialogs/JsControllerUpdater.jsx","tabs/Hosts.jsx"],"sourcesContent":["import { Component, createRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Dropzone from 'react-dropzone';\nimport { Cropper } from 'react-cropper';\n\nimport { withStyles } from '@mui/styles';\nimport { Menu, MenuItem, Tooltip } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\n\nimport IconClose from '@mui/icons-material/Close';\nimport CropIcon from '@mui/icons-material/Crop';\nimport { FaFileUpload as UploadIcon } from 'react-icons/fa';\n\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\n// import 'cropperjs/dist/cropper.css';\nconst cropperStyles = `\n/*!\n * Cropper.js v1.5.12\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2021-06-12T08:00:11.623Z\n */\n\n.cropper-container {\n direction: ltr;\n font-size: 0;\n line-height: 0;\n position: relative;\n -ms-touch-action: none;\n touch-action: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.cropper-container img {\n display: block;\n height: 100%;\n image-orientation: 0deg;\n max-height: none !important;\n max-width: none !important;\n min-height: 0 !important;\n min-width: 0 !important;\n width: 100%;\n}\n\n.cropper-wrap-box,\n.cropper-canvas,\n.cropper-drag-box,\n.cropper-crop-box,\n.cropper-modal {\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.cropper-wrap-box,\n.cropper-canvas {\n overflow: hidden;\n}\n\n.cropper-drag-box {\n background-color: #fff;\n opacity: 0;\n}\n\n.cropper-modal {\n background-color: #000;\n opacity: 0.5;\n}\n\n.cropper-view-box {\n display: block;\n height: 100%;\n outline: 1px solid #39f;\n outline-color: rgba(51, 153, 255, 0.75);\n overflow: hidden;\n width: 100%;\n}\n\n.cropper-dashed {\n border: 0 dashed #eee;\n display: block;\n opacity: 0.5;\n position: absolute;\n}\n\n.cropper-dashed.dashed-h {\n border-bottom-width: 1px;\n border-top-width: 1px;\n height: calc(100% / 3);\n left: 0;\n top: calc(100% / 3);\n width: 100%;\n}\n\n.cropper-dashed.dashed-v {\n border-left-width: 1px;\n border-right-width: 1px;\n height: 100%;\n left: calc(100% / 3);\n top: 0;\n width: calc(100% / 3);\n}\n\n.cropper-center {\n display: block;\n height: 0;\n left: 50%;\n opacity: 0.75;\n position: absolute;\n top: 50%;\n width: 0;\n}\n\n.cropper-center::before,\n.cropper-center::after {\n background-color: #eee;\n content: ' ';\n display: block;\n position: absolute;\n}\n\n.cropper-center::before {\n height: 1px;\n left: -3px;\n top: 0;\n width: 7px;\n}\n\n.cropper-center::after {\n height: 7px;\n left: 0;\n top: -3px;\n width: 1px;\n}\n\n.cropper-face,\n.cropper-line,\n.cropper-point {\n display: block;\n height: 100%;\n opacity: 0.1;\n position: absolute;\n width: 100%;\n}\n\n.cropper-face {\n background-color: #fff;\n left: 0;\n top: 0;\n}\n\n.cropper-line {\n background-color: #39f;\n}\n\n.cropper-line.line-e {\n cursor: ew-resize;\n right: -3px;\n top: 0;\n width: 5px;\n}\n\n.cropper-line.line-n {\n cursor: ns-resize;\n height: 5px;\n left: 0;\n top: -3px;\n}\n\n.cropper-line.line-w {\n cursor: ew-resize;\n left: -3px;\n top: 0;\n width: 5px;\n}\n\n.cropper-line.line-s {\n bottom: -3px;\n cursor: ns-resize;\n height: 5px;\n left: 0;\n}\n\n.cropper-point {\n background-color: #39f;\n height: 5px;\n opacity: 0.75;\n width: 5px;\n}\n\n.cropper-point.point-e {\n cursor: ew-resize;\n margin-top: -3px;\n right: -3px;\n top: 50%;\n}\n\n.cropper-point.point-n {\n cursor: ns-resize;\n left: 50%;\n margin-left: -3px;\n top: -3px;\n}\n\n.cropper-point.point-w {\n cursor: ew-resize;\n left: -3px;\n margin-top: -3px;\n top: 50%;\n}\n\n.cropper-point.point-s {\n bottom: -3px;\n cursor: s-resize;\n left: 50%;\n margin-left: -3px;\n}\n\n.cropper-point.point-ne {\n cursor: nesw-resize;\n right: -3px;\n top: -3px;\n}\n\n.cropper-point.point-nw {\n cursor: nwse-resize;\n left: -3px;\n top: -3px;\n}\n\n.cropper-point.point-sw {\n bottom: -3px;\n cursor: nesw-resize;\n left: -3px;\n}\n\n.cropper-point.point-se {\n bottom: -3px;\n cursor: nwse-resize;\n height: 20px;\n opacity: 1;\n right: -3px;\n width: 20px;\n}\n\n@media (min-width: 768px) {\n .cropper-point.point-se {\n height: 15px;\n width: 15px;\n }\n}\n\n@media (min-width: 992px) {\n .cropper-point.point-se {\n height: 10px;\n width: 10px;\n }\n}\n\n@media (min-width: 1200px) {\n .cropper-point.point-se {\n height: 5px;\n opacity: 0.75;\n width: 5px;\n }\n}\n\n.cropper-point.point-se::before {\n background-color: #39f;\n bottom: -50%;\n content: ' ';\n display: block;\n height: 200%;\n opacity: 0;\n position: absolute;\n right: -50%;\n width: 200%;\n}\n\n.cropper-invisible {\n opacity: 0;\n}\n\n.cropper-bg {\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC');\n}\n\n.cropper-hide {\n display: block;\n height: 0;\n position: absolute;\n width: 0;\n}\n\n.cropper-hidden {\n display: none !important;\n}\n\n.cropper-move {\n cursor: move;\n}\n\n.cropper-crop {\n cursor: crosshair;\n}\n\n.cropper-disabled .cropper-drag-box,\n.cropper-disabled .cropper-face,\n.cropper-disabled .cropper-line,\n.cropper-disabled .cropper-point {\n cursor: not-allowed;\n}\n`;\n\nconst styles = theme => ({\n dropZone: {\n width: '100%',\n height: 100,\n position: 'relative',\n },\n dropZoneEmpty: {\n\n },\n image: {\n objectFit: 'contain',\n margin: 'auto',\n display: 'flex',\n width: '100%',\n height: '100%',\n },\n\n uploadDiv: {\n position: 'relative',\n width: '100%',\n height: 300,\n opacity: 0.9,\n marginTop: 30,\n cursor: 'pointer',\n outline: 'none'\n },\n uploadDivDragging: {\n opacity: 1,\n background: 'rgba(128,255,128,0.1)'\n },\n\n uploadCenterDiv: {\n margin: 5,\n border: '3px dashed grey',\n borderRadius: 5,\n width: 'calc(100% - 10px)',\n height: 'calc(100% - 10px)',\n position: 'relative',\n display: 'flex'\n },\n uploadCenterIcon: {\n paddingTop: 10,\n width: 48,\n height: 48,\n },\n uploadCenterText: {\n fontSize: 16,\n },\n uploadCenterTextAndIcon: {\n textAlign: 'center',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n\n },\n disabledOpacity: {\n opacity: 0.3,\n cursor: 'default'\n },\n buttonRemoveWrapper: {\n position: 'absolute',\n zIndex: 222,\n right: 0\n },\n buttonCropWrapper: {\n position: 'absolute',\n zIndex: 222,\n right: 0,\n top: 50\n },\n error: {\n border: '2px solid red'\n }\n});\n\nclass UploadImage extends Component {\n constructor(props) {\n super(props);\n this.state = {\n uploadFile: false,\n anchorEl: null,\n cropHandler: false,\n };\n this.cropperRef = createRef();\n\n if (!window.document.getElementById('cropper-style-json-component')) {\n const style = window.document.createElement('style');\n style.setAttribute('id', 'cropper-style-json-component');\n style.innerHTML = cropperStyles;\n window.document.head.appendChild(style);\n }\n }\n\n onDrop(acceptedFiles) {\n const { maxSize, t, onChange } = this.props;\n\n const file = acceptedFiles[0];\n const reader = new FileReader();\n\n reader.onabort = () => console.log('file reading was aborted');\n reader.onerror = () => console.log('file reading has failed');\n reader.onload = () => {\n let ext = 'image/' + file.name.split('.').pop().toLowerCase();\n if (ext === 'image/jpg') {\n ext = 'image/jpeg';\n } else if (ext.includes('svg')) {\n ext = 'image/svg+xml';\n }\n if (file.size > maxSize) {\n return window.alert(t('ra_File is too big. Max %sk allowed. Try use SVG.', Math.round(maxSize / 1024)));\n }\n const base64 = `data:${ext};base64,${btoa(\n new Uint8Array(reader.result)\n .reduce((data, byte) => data + String.fromCharCode(byte), ''))}`;\n\n onChange(base64);\n };\n reader.readAsArrayBuffer(file);\n }\n\n render() {\n const { disabled, maxSize, classes, icon, t, removeIconFunc, accept, error, crop, onChange } = this.props;\n const { uploadFile, anchorEl, cropHandler } = this.state;\n return <Dropzone\n disabled={disabled || cropHandler}\n key=\"dropzone\"\n multiple={false}\n accept={accept}\n maxSize={maxSize}\n onDragEnter={() => this.setState({ uploadFile: 'dragging' })}\n onDragLeave={() => this.setState({ uploadFile: true })}\n onDrop={(acceptedFiles, errors) => {\n this.setState({ uploadFile: false });\n if (!acceptedFiles.length) {\n window.alert((errors && errors[0] && errors[0].errors && errors[0].errors[0] && errors[0].errors[0].message) || t('ra_Cannot upload'));\n } else {\n return this.onDrop(acceptedFiles);\n }\n }}\n >\n {({ getRootProps, getInputProps }) => <div\n className={Utils.clsx(\n classes.uploadDiv,\n uploadFile === 'dragging' && classes.uploadDivDragging,\n classes.dropZone,\n disabled && classes.disabledOpacity,\n !icon && classes.dropZoneEmpty\n )}\n {...getRootProps()}>\n <input {...getInputProps()} />\n <div className={Utils.clsx(classes.uploadCenterDiv, error && classes.error)}>\n {!icon ? <div className={classes.uploadCenterTextAndIcon}>\n <UploadIcon className={classes.uploadCenterIcon} />\n <div className={classes.uploadCenterText}>{\n uploadFile === 'dragging' ? t('ra_Drop file here') :\n t('ra_Place your files here or click here to open the browse dialog')}</div>\n </div>\n :\n removeIconFunc && !cropHandler && <div className={classes.buttonRemoveWrapper}>\n <Tooltip title={t('ra_Clear')}>\n <IconButton size=\"large\" onClick={e => {\n removeIconFunc && removeIconFunc();\n e.stopPropagation();\n }}><IconClose />\n </IconButton>\n </Tooltip>\n </div>\n }\n {icon && crop && <div className={classes.buttonCropWrapper}>\n <Tooltip title={t('ra_Crop')}>\n <IconButton size=\"large\" onClick={e => {\n if (!cropHandler) {\n this.setState({ cropHandler: true });\n } else {\n this.setState({ anchorEl: e.currentTarget });\n }\n e.stopPropagation();\n }}><CropIcon color={cropHandler ? 'primary' : 'inherit'} />\n </IconButton>\n </Tooltip>\n <Menu\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={() => this.setState({ anchorEl: null })}\n >\n <MenuItem onClick={() => this.setState({ anchorEl: null, cropHandler: false }, () => {\n const imageElement = this.cropperRef?.current?.cropper;\n onChange(imageElement.getCroppedCanvas().toDataURL());\n })}>{t('ra_Save')}</MenuItem>\n <MenuItem onClick={() => this.setState({ anchorEl: null, cropHandler: false })}>{t('ra_Close')}</MenuItem>\n </Menu>\n </div>}\n {icon && !cropHandler ? <img src={icon} className={classes.image} alt=\"icon\" /> : null}\n\n {icon && crop && cropHandler ? <Cropper\n ref={this.cropperRef}\n className={classes.image}\n src={icon}\n initialAspectRatio={1}\n viewMode={1}\n guides={false}\n minCropBoxHeight={10}\n minCropBoxWidth={10}\n background={false}\n checkOrientation={false}\n /> : null}\n </div>\n </div>}\n </Dropzone>;\n }\n}\n\nUploadImage.defaultProps = {\n disabled: false,\n maxSize: 10 * 1024,\n icon: null,\n removeIconFunc: null,\n accept: { 'image/*': [] },\n error: false,\n onChange: base64 => console.log(base64),\n t: el => el,\n crop: false,\n};\n\nUploadImage.propTypes = {\n classes: PropTypes.object,\n maxSize: PropTypes.number,\n disabled: PropTypes.bool,\n crop: PropTypes.bool,\n error: PropTypes.bool,\n onChange: PropTypes.func,\n accept: PropTypes.object,\n t: PropTypes.func,\n};\n\nexport default withStyles(styles)(UploadImage);\n","import React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Avatar, Badge, Card, CardContent, CardMedia, Fab, FormControl, FormHelperText, IconButton, InputLabel, MenuItem, Select, Tooltip, Typography } from '@mui/material';\n\nimport { withStyles } from '@mui/styles';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport EditIcon from '@mui/icons-material/Edit';\nimport CachedIcon from '@mui/icons-material/Cached';\nimport BuildIcon from '@mui/icons-material/Build';\nimport CopyIcon from '@iobroker/adapter-react-v5/icons/IconCopy';\n\nimport { amber, blue, grey, red } from '@mui/material/colors';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nimport Adapters from '../../tabs/Adapters';\nimport CustomModal from '../CustomModal';\n\nconst boxShadow = '0 2px 2px 0 rgba(0, 0, 0, .14),0 3px 1px -2px rgba(0, 0, 0, .12),0 1px 5px 0 rgba(0, 0, 0, .2)';\nconst boxShadowHover = '0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)';\n\nconst styles = theme => ({\n root: {\n position: 'relative',\n margin: 10,\n width: 300,\n minHeight: 200,\n background: theme.palette.background.default,\n boxShadow,\n display: 'flex',\n flexDirection: 'column',\n transition: 'box-shadow 0.5s',\n '&:hover': {\n boxShadow: boxShadowHover\n },\n '& .warning': {\n backgroundColor: '#de0000 !important',\n '&:before': {\n position: 'absolute',\n right: 0,\n top: -5,\n content: '\"\\u26A0\"',\n fontSize: 25,\n height: '30px',\n width: '30px',\n color: 'black'\n },\n animation: '$warning 2.5s ease-in-out infinite alternate'\n }\n },\n '@keyframes warning': {\n '0%': {\n opacity: 1\n },\n '100%': {\n opacity: 0.7\n }\n },\n imageBlock: {\n minHeight: 60,\n display: 'flex',\n padding: '0 10px 0 10px',\n position: 'relative',\n justifyContent: 'space-between',\n transition: 'background 0.5s',\n },\n img: {\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n }\n },\n installed: {\n background: '#77c7ff8c'\n },\n /*update: {\n background: '#10ff006b'\n },*/\n fab: {\n position: 'absolute',\n bottom: -20,\n width: 40,\n height: 40,\n right: 20,\n },\n\n collapse: {\n height: '100%',\n position: 'absolute',\n width: '100%',\n zIndex: 3,\n marginTop: 'auto',\n bottom: 0,\n transition: 'height 0.3s',\n justifyContent: 'space-between',\n display: 'flex',\n flexDirection: 'column'\n },\n collapseOff: {\n height: 0\n },\n close: {\n width: 20,\n height: 20,\n opacity: 0.9,\n cursor: 'pointer',\n position: 'relative',\n marginLeft: 'auto',\n marginBottom: 10,\n transition: 'all 0.6s ease',\n '&:hover': {\n transform: 'rotate(90deg)'\n },\n '&:before': {\n position: 'absolute',\n left: 9,\n content: '\"\"',\n height: 20,\n width: 3,\n backgroundColor: '#ff4f4f',\n transform: 'rotate(45deg)'\n },\n '&:after': {\n position: 'absolute',\n left: 9,\n content: '\"\"',\n height: 20,\n width: 3,\n backgroundColor: '#ff4f4f',\n transform: 'rotate(-45deg)'\n },\n },\n footerBlock: {\n background: theme.palette.background.default,\n padding: 10,\n display: 'flex',\n justifyContent: 'space-between'\n },\n hidden: {\n display: 'none'\n },\n onOffLine: {\n alignSelf: 'center',\n width: '100%',\n height: 4,\n // borderRadius: 20,\n\n },\n adapter: {\n width: '100%',\n fontWeight: 'bold',\n fontSize: 16,\n verticalAlign: 'middle',\n paddingLeft: 8,\n paddingTop: 16,\n color: theme.palette.mode === 'dark' ? '#333' : '#555'\n },\n cardContent: {\n marginTop: 16,\n paddingTop: 0\n },\n cardContentInfo: {\n overflow: 'auto',\n paddingTop: 0,\n backgroundColor: theme.palette.background.paper,\n color: theme.palette.mode === 'dark' ? '#EEE' : '#111',\n },\n cardContentH5: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n paddingBottom: '10px !important'\n },\n marginTop10: {\n marginTop: 10\n },\n displayFlex: {\n display: 'flex',\n },\n marginLeft5: {\n marginLeft: 5\n },\n enableButton: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center'\n },\n instanceStateNotAlive1: {\n backgroundColor: 'rgba(192, 192, 192, 0.4)'\n },\n /*instanceStateNotAlive2: {\n backgroundColor: 'rgb(192 192 192 / 15%)'\n },*/\n instanceStateAliveNotConnected1: {\n backgroundColor: 'rgba(255, 177, 0, 0.4)'\n },\n /*instanceStateAliveNotConnected2: {\n backgroundColor: 'rgb(255 177 0 / 14%)'\n },*/\n instanceStateAliveAndConnected1: {\n backgroundColor: 'rgba(0, 255, 0, 0.4)'\n },\n /*instanceStateAliveAndConnected2: {\n backgroundColor: 'rgb(0 255 0 / 14%)'\n }*/\n green: {\n background: '#00ce00',\n // border: '1px solid #014a00',\n position: 'relative'\n },\n red: {\n background: '#da0000',\n // border: '1px solid #440202',,\n // animation: '$red 3s ease-in-out infinite alternate'\n },\n '@keyframes red': {\n '0%': {\n opacity: 1\n },\n '100%': {\n opacity: 0.85\n }\n },\n dotLine: {\n width: 50,\n height: '100%',\n background: 'linear-gradient(90deg, rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)',\n zIndex: 2,\n position: 'absolute',\n left: -11,\n // boxShadow: '12px 29px 81px 0px rgb(0 0 0 / 75%)',\n // animation: '$colors 3s ease-in-out infinite'\n },\n '@keyframes colors': {\n '0%': {\n left: -51\n },\n '100%': {\n left: '101%'\n }\n },\n versionDate: {\n alignSelf: 'center'\n },\n\n cardContentDiv: {\n position: 'sticky',\n right: 0,\n top: 0,\n paddingTop: 10\n },\n badge: {\n cursor: 'pointer'\n },\n emptyButton: {\n width: 48,\n },\n greenText: {\n color: theme.palette.success.dark,\n },\n curdContentFlexCenter: {\n display: 'flex',\n alignItems: 'center',\n marginLeft: 4\n },\n wrapperAvailable: {\n display: 'flex',\n alignItems: 'center'\n },\n buttonUpdate: {\n border: '1px solid',\n padding: '0px 7px',\n borderRadius: 5,\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n transition: 'background 0.5s',\n '&:hover': {\n background: '#00800026'\n }\n },\n buttonUpdateIcon: {\n height: 20,\n width: 20,\n marginRight: 10\n },\n debug: {\n backgroundColor: grey[700]\n },\n info: {\n backgroundColor: blue[700]\n },\n warn: {\n backgroundColor: amber[700]\n },\n error: {\n backgroundColor: red[700]\n },\n smallAvatar: {\n width: 24,\n height: 24\n },\n formControl: {\n display: 'flex'\n },\n baseSettingsButton: {\n transform: 'rotate(45deg)',\n },\n newValue: {\n animation: '$newValueAnimation 2s ease-in-out'\n },\n '@keyframes newValueAnimation': {\n '0%': {\n color: '#00f900',\n },\n '80%': {\n color: '#008000',\n },\n '100%': {\n color: theme.palette.mode === 'dark' ? '#fff' : '#000',\n }\n },\n\n});\n\nlet outputCache = '-';\nlet inputCache = '-';\nlet cpuCache = '- %';\nlet memCache = '- %';\nlet uptimeCache = '-';\n\nlet diskFreeCache = 1;\nlet diskSizeCache = 1;\nlet diskWarningCache = 1;\n\nconst arrayLogLevel = ['silly', 'debug', 'info', 'warn', 'error'];\n\nfunction toggleClassName(el, name) {\n const classNames = el.className.split(' ');\n const pos = classNames.indexOf(name);\n if (pos !== -1) {\n classNames.splice(pos, 1);\n el.className = classNames.join(' ');\n }\n classNames.push(name);\n setTimeout(_classNames => el.className = _classNames, 100, classNames.join(' '));\n}\n\n\nconst HostCard = ({\n _id,\n alive,\n available,\n classes,\n color,\n connected,\n connectedToHost,\n isCurrentHost,\n description,\n events,\n executeCommandRemove,\n expertMode,\n getLogLevelIcon,\n formatInfo,\n hidden,\n hostData,\n hostsWorker,\n image,\n installed,\n name,\n openHostUpdateDialog,\n setBaseSettingsDialog,\n setEditDialog,\n showAdaptersWarning,\n socket,\n systemConfig,\n t,\n // title,\n}) => {\n const [openCollapse, setCollapse] = useState(false);\n const refEvents = useRef();\n const refWarning = useRef();\n const refCpu = useRef();\n const refMem = useRef();\n const refUptime = useRef();\n\n const eventsInputFunc = (_, input) => {\n inputCache = input && input.val !== null ? `⇥${input.val}` : '-';\n if (refEvents.current) {\n refEvents.current.innerHTML = `${inputCache} / ${outputCache}`;\n toggleClassName(refEvents.current, classes.newValue);\n }\n };\n\n const eventsOutputFunc = (_, output) => {\n outputCache = output && output.val !== null ? `↦${output.val}` : '-';\n if (refEvents.current) {\n refEvents.current.innerHTML = `${inputCache} / ${outputCache}`;\n toggleClassName(refEvents.current, classes.newValue);\n }\n };\n\n const formatValue = (state, unit) => {\n if (!state || state.val === null || state.val === undefined) {\n return '-' + (unit ? ' ' + unit : '');\n } else if (systemConfig.common.isFloatComma) {\n return state.val.toString().replace('.', ',') + (unit ? ' ' + unit : '');\n } else {\n return state.val + (unit ? ' ' + unit : '');\n }\n };\n\n const warningFunc = (name, state) => {\n let warning;\n if (name.endsWith('diskFree')) {\n diskFreeCache = state?.val || 0;\n } else if (name.endsWith('diskSize')) {\n diskSizeCache = state?.val || 0;\n } else if (name.endsWith('diskWarning')) {\n diskWarningCache = state?.val || 0;\n }\n warning = (diskFreeCache / diskSizeCache) * 100 <= diskWarningCache;\n if (refWarning.current) {\n if (warning) {\n refWarning.current.setAttribute('title', t('Warning: Free space on disk is low'));\n refWarning.current.classList.add('warning');\n } else {\n refWarning.current.removeAttribute('title');\n refWarning.current.classList.remove('warning');\n }\n }\n };\n\n const cpuFunc = (_, state) => {\n cpuCache = formatValue(state, '%');\n if (refCpu.current) {\n refCpu.current.innerHTML = cpuCache;\n toggleClassName(refCpu.current, classes.newValue);\n }\n }\n\n const memFunc = (_, state) => {\n memCache = formatValue(state, '%');\n if (refMem.current) {\n refMem.current.innerHTML = memCache;\n toggleClassName(refMem.current, classes.newValue);\n }\n }\n\n const uptimeFunc = (_, state) => {\n if (state.val) {\n const d = Math.floor(state.val / (3600 * 24));\n const h = Math.floor(state.val % (3600 * 24) / 3600);\n uptimeCache = d ? `${d}d${h}h` : `${h}h`; // TODO translate\n }\n if (refUptime.current) {\n refUptime.current.innerHTML = uptimeCache;\n toggleClassName(refUptime.current, classes.newValue);\n }\n }\n\n const calculateWarning = notifications => {\n if (!notifications) {\n return 0;\n }\n const { result } = notifications;\n let count = 0;\n if (!result || !result.system) {\n return count;\n }\n if (Object.keys(result.system.categories).length) {\n let obj = result.system.categories;\n Object.keys(obj).forEach(nameTab =>\n Object.keys(obj[nameTab].instances).forEach(_ => count++));\n }\n return count;\n };\n\n const [errorHost, setErrorHost] = useState({ notifications: {}, count: 0 });\n\n const logLevelFunc = (name, state) => {\n if(state){\n setLogLevelValue(state.val);\n setLogLevelValueSelect(state.val);\n }\n }\n\n useEffect(() => {\n const notificationHandler = notifications =>\n notifications && notifications[_id] && setErrorHost({ notifications: notifications[_id], count: calculateWarning(notifications[_id]) });\n\n hostsWorker.registerNotificationHandler(notificationHandler);\n\n hostsWorker.getNotifications(_id)\n .then(notifications => notifications && notifications[_id] && setErrorHost({ notifications: notifications[_id], count: calculateWarning(notifications[_id]) }));\n\n socket.subscribeState(`${_id}.inputCount`, eventsInputFunc);\n socket.subscribeState(`${_id}.outputCount`, eventsOutputFunc);\n\n socket.subscribeState(`${_id}.cpu`, cpuFunc);\n socket.subscribeState(`${_id}.mem`, memFunc);\n socket.subscribeState(`${_id}.uptime`, uptimeFunc);\n\n socket.subscribeState(`${_id}.diskFree`, warningFunc);\n socket.subscribeState(`${_id}.diskSize`, warningFunc);\n socket.subscribeState(`${_id}.diskWarning`, warningFunc);\n\n socket.subscribeState(`${_id}.logLevel`, logLevelFunc);\n\n return () => {\n hostsWorker.unregisterNotificationHandler(notificationHandler);\n socket.unsubscribeState(`${_id}.inputCount`, eventsInputFunc);\n socket.unsubscribeState(`${_id}.outputCount`, eventsOutputFunc);\n\n socket.unsubscribeState(`${_id}.cpu`, cpuFunc);\n socket.unsubscribeState(`${_id}.mem`, memFunc);\n socket.unsubscribeState(`${_id}.uptime`, uptimeFunc);\n\n socket.unsubscribeState(`${_id}.diskFree`, warningFunc);\n socket.unsubscribeState(`${_id}.diskSize`, warningFunc);\n socket.unsubscribeState(`${_id}.diskWarning`, warningFunc);\n\n socket.unsubscribeState(`${_id}.logLevel`, logLevelFunc);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_id, socket, classes]);\n\n const [focused, setFocused] = useState(false);\n\n const [openDialogLogLevel, setOpenDialogLogLevel] = useState(false);\n const [logLevelValue, setLogLevelValue] = useState(null);\n const [logLevelValueSelect, setLogLevelValueSelect] = useState(null);\n\n const upgradeAvailable = (isCurrentHost || alive) && Adapters.updateAvailable(installed, available);\n\n const onCopy = () => {\n let text = [];\n refCpu.current && text.push(`CPU: ${refCpu.current.innerHTML}`);\n refMem.current && text.push(`RAM: ${refMem.current.innerHTML}`);\n refUptime.current && text.push(`${t('Uptime')}: ${refUptime.current.innerHTML}`);\n text.push(`${t('Available')}: ${available}`);\n text.push(`${t('Installed')}: ${installed}`);\n refEvents.current && text.push(`${t('Events')}: ${refEvents.current.innerHTML}`);\n\n hostData && typeof hostData === 'object' && Object.keys(hostData).map(value =>\n text.push(t(value) + ': ' + (formatInfo[value] ? formatInfo[value](hostData[value], t) : hostData[value] || '--')));\n\n Utils.copyToClipboard(text.join('\\n'));\n window.alert(t('Copied'));\n };\n\n let showModal = false;\n let titleModal;\n if (openDialogLogLevel) {\n titleModal = t('Edit log level rule for %s', name);\n showModal = true;\n }\n\n const customModal = showModal ? <CustomModal\n title={titleModal}\n open={!0}\n onApply={value => {\n if (openDialogLogLevel) {\n socket.setState(`${_id}.logLevel`,logLevelValueSelect);\n setOpenDialogLogLevel(false);\n }\n }}\n onClose={() => {\n if (openDialogLogLevel) {\n setLogLevelValueSelect(logLevelValue);\n setOpenDialogLogLevel(false);\n }\n }}>\n {openDialogLogLevel && <FormControl className={classes.formControl} variant=\"outlined\" style={{ marginTop: 8 }}>\n <InputLabel>{t('log level')}</InputLabel>\n <Select\n variant=\"standard\"\n value={logLevelValueSelect}\n fullWidth\n onChange={el => setLogLevelValueSelect(el.target.value)}\n >\n {arrayLogLevel.map(el => <MenuItem key={el} value={el}>\n {t(el)}\n </MenuItem>)}\n </Select>\n </FormControl>}\n {openDialogLogLevel && <FormControl className={classes.formControl} variant=\"outlined\" >\n <FormHelperText>{t('Log level will be reset to the saved level after the restart of the controller')}</FormHelperText>\n <FormHelperText>{t('You can set the log level permanently in the base host settings')}<BuildIcon className={classes.baseSettingsButton} /></FormHelperText>\n </FormControl>}\n </CustomModal> : null;\n\n return <Card key={_id} className={Utils.clsx(classes.root, hidden ? classes.hidden : '')}>\n {customModal}\n {(openCollapse || focused) && <div className={Utils.clsx(classes.collapse, !openCollapse ? classes.collapseOff : '')}>\n <CardContent className={classes.cardContentInfo}>\n <div className={classes.cardContentDiv}>\n <div className={classes.close} onClick={() => setCollapse(false)} />\n </div>\n {description}\n </CardContent>\n <div className={classes.footerBlock}>\n </div>\n </div>}\n <div className={Utils.clsx(classes.onOffLine, alive ? classes.green : classes.red)} >\n {alive && <div className={classes.dotLine} />}\n </div>\n <div\n ref={refWarning}\n style={{ background: color || 'inherit' }}\n className={Utils.clsx(\n classes.imageBlock,\n (!connectedToHost || !alive) && classes.instanceStateNotAlive1,\n connectedToHost && alive && connected === false && classes.instanceStateAliveNotConnected1,\n connectedToHost && alive && connected !== false && classes.instanceStateAliveAndConnected1\n )}>\n <CardMedia className={classes.img} component=\"img\" image={image || 'img/no-image.png'} />\n <div\n style={{ color: (color && Utils.invertColor(color, true)) || 'inherit' }}\n className={classes.adapter}>\n <Badge\n title={t('Hosts notifications')}\n badgeContent={errorHost.count}\n color=\"error\"\n className={classes.badge}\n onClick={e => {\n e.stopPropagation();\n showAdaptersWarning({ [_id]: errorHost.notifications }, socket, _id);\n }}\n >{name}\n </Badge>\n </div>\n <Fab\n disabled={typeof description === 'string'}\n onMouseOut={() => setFocused(false)}\n onMouseOver={() => setFocused(true)}\n onClick={() => setCollapse(true)} className={classes.fab} color=\"primary\" aria-label=\"add\">\n <MoreVertIcon />\n </Fab>\n </div>\n <CardContent className={classes.cardContentH5}>\n {/*<Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {t('Title')}: {title}\n </Typography>*/}\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div className={classes.displayFlex}>CPU:<div ref={refCpu} className={classes.marginLeft5}>{'- %'}</div></div>\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div className={classes.displayFlex}>RAM:<div ref={refMem} className={classes.marginLeft5}>{'- %'}</div></div>\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div className={classes.displayFlex}>{t('Uptime')}: <div ref={refUptime} className={classes.marginLeft5}>{'-d -h'}</div></div>\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"div\" className={classes.wrapperAvailable}>\n {t('Available')} js-controller: <div className={Utils.clsx(upgradeAvailable && classes.greenText, classes.curdContentFlexCenter)} >\n {upgradeAvailable ?\n <Tooltip title={t('Update')}>\n <div onClick={openHostUpdateDialog} className={classes.buttonUpdate}>\n <IconButton\n className={classes.buttonUpdateIcon}\n size=\"small\"\n >\n <RefreshIcon />\n </IconButton>{available}</div>\n </Tooltip> :\n available\n }</div>\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {t('Installed')} js-controller: {installed}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div className={classes.displayFlex}>{t('Events')}: <div ref={refEvents} className={classes.marginLeft5}>{events}</div></div>\n </Typography>\n <div className={classes.marginTop10}>\n <Typography component={'span'} className={classes.enableButton}>\n <IconButton size=\"large\"\n onClick={() => setEditDialog(true)}\n >\n <EditIcon />\n </IconButton>\n {expertMode &&\n <Tooltip title={t('Host Base Settings')}>\n <div>\n <IconButton size=\"large\" disabled={!alive} onClick={setBaseSettingsDialog}>\n <BuildIcon className={classes.baseSettingsButton} />\n </IconButton>\n </div>\n </Tooltip>\n }\n <Tooltip title={t('Restart host')}>\n <div>\n <IconButton size=\"large\" disabled={!alive} onClick={e => {\n e.stopPropagation();\n socket.restartController(_id)\n .catch(e => window.alert(`Cannot restart: ${e}`));\n }}>\n <CachedIcon />\n </IconButton>\n </div>\n </Tooltip>\n {expertMode && logLevelValue &&\n <Tooltip title={`${t('loglevel')} ${logLevelValue}`}>\n <IconButton size=\"large\" onClick={() => setOpenDialogLogLevel(true)}>\n <Avatar className={Utils.clsx(classes.smallAvatar, classes[logLevelValue])}>\n {getLogLevelIcon(logLevelValue)}\n </Avatar>\n </IconButton>\n </Tooltip>\n }\n {!alive && !isCurrentHost ? <Tooltip title={t('Remove')}>\n <IconButton size=\"large\" onClick={executeCommandRemove}>\n <DeleteIcon />\n </IconButton>\n </Tooltip> : <div className={classes.emptyButton} />}\n\n <Tooltip title={t('Copy')}>\n <IconButton size=\"large\" onClick={() => onCopy()}>\n <CopyIcon />\n </IconButton>\n </Tooltip>\n </Typography>\n </div>\n </CardContent>\n </Card>;\n}\n\nHostCard.propTypes = {\n t: PropTypes.func,\n systemConfig: PropTypes.object,\n isCurrentHost: PropTypes.bool,\n};\n\nexport default withStyles(styles)(HostCard);","import React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport { Avatar, Badge, CardContent, CardMedia, FormControl, FormHelperText, IconButton, InputLabel, MenuItem, Select, Tooltip, Typography } from '@mui/material';\n\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport BuildIcon from '@mui/icons-material/Build';\nimport EditIcon from '@mui/icons-material/Edit';\nimport CachedIcon from '@mui/icons-material/Cached';\n\nimport { amber, blue, grey, red } from '@mui/material/colors';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nimport CopyIcon from '@iobroker/adapter-react-v5/icons/IconCopy';\n\nimport Adapters from '../../tabs/Adapters';\nimport CustomModal from '../CustomModal';\n\nconst boxShadow = '0 2px 2px 0 rgba(0, 0, 0, .14),0 3px 1px -2px rgba(0, 0, 0, .12),0 1px 5px 0 rgba(0, 0, 0, .2)';\nconst boxShadowHover = '0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)';\n\nconst styles = theme => ({\n root: {\n position: 'relative',\n margin: 7,\n background: theme.palette.background.default,\n boxShadow,\n // display: 'flex',\n overflow: 'hidden',\n transition: 'box-shadow 0.5s,height 0.3s',\n '&:hover': {\n boxShadow: boxShadowHover,\n },\n },\n imageBlock: {\n marginRight: 6,\n minHeight: 60,\n width: '100%',\n maxWidth: 300,\n display: 'flex',\n padding: '0 10px 0 10px',\n position: 'relative',\n justifyContent: 'space-between',\n transition: 'background 0.5s',\n },\n img: {\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n collapse: {\n height: 160,\n backgroundColor: 'rgba(128, 128, 128, 0.1)',\n // position: 'absolute',\n width: '100%',\n zIndex: 3,\n marginTop: 'auto',\n bottom: 0,\n transition: 'height 0.3s',\n justifyContent: 'space-between',\n display: 'flex',\n flexDirection: 'column',\n },\n collapseOff: {\n height: 0,\n },\n collapseOn: {\n animation: '$height 1s',\n },\n '@keyframes height': {\n '0%': {\n height: 0,\n },\n '100%': {\n height: 160,\n },\n },\n footerBlock: {\n background: theme.palette.background.default,\n padding: 10,\n display: 'flex',\n justifyContent: 'space-between',\n },\n hidden: {\n display: 'none',\n },\n onOff: {\n alignSelf: 'center',\n width: 4,\n height: '100%',\n // borderRadius: 20,\n // position: 'absolute',\n // top: 5,\n // right: 5,\n },\n host: {\n width: '100%',\n fontWeight: 'bold',\n fontSize: 16,\n paddingLeft: 8,\n alignSelf: 'center',\n color: theme.palette.mode === 'dark' ? '#ddd' : '#222',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n cardContentH5: {\n height: '100%',\n display: 'flex',\n width: '100%',\n // flexDirection: 'column',\n justifyContent: 'space-between',\n padding: '10px !important',\n alignItems: 'center',\n },\n marginTop10: {\n // marginTop: 10\n marginLeft: 'auto',\n display: 'flex',\n },\n enableButton: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n emptyButton: {\n width: 48,\n },\n green: {\n background: '#00ce00',\n position: 'relative',\n overflow: 'hidden',\n },\n dotLine: {\n width: 10,\n height: 20,\n background: 'linear-gradient( rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)',\n zIndex: 2,\n position: 'absolute',\n top: -21,\n // animation: '$colors 3s ease-in-out infinite'\n },\n '@keyframes colors': {\n '0%': {\n top: -21,\n },\n '100%': {\n top: '101%',\n },\n },\n red: {\n background: '#da0000',\n // animation: '$red 3s ease-in-out infinite alternate'\n },\n '@keyframes red': {\n '0%': {\n opacity: 1,\n },\n '100%': {\n opacity: 0.80,\n },\n },\n flex: {\n flex: 1,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n\n cardContentInfo: {\n overflow: 'auto',\n paddingTop: 0,\n justifyContent: 'center',\n display: 'flex',\n height: '100%',\n position: 'relative',\n // alignItems: 'center'\n },\n cursorNoDrop: {\n cursor: 'no-drop !important',\n },\n wrapperFlex: {\n display: 'flex', cursor: 'pointer',\n '& .warning': {\n backgroundColor: '#de0000 !important',\n '&:before': {\n position: 'absolute',\n right: 0,\n top: -5,\n content: '\"\\u26A0\"',\n fontSize: 25,\n height: '30px',\n width: '30px',\n color: 'black'\n },\n animation: '$warning 2.5s ease-in-out infinite alternate',\n }\n },\n '@keyframes warning': {\n '0%': {\n opacity: 1,\n },\n '100%': {\n opacity: 0.7,\n },\n },\n wrapperColor: {\n position: 'relative',\n overflow: 'hidden',\n },\n '@media screen and (max-width: 1100px)': {\n hidden1100: {\n display: 'none !important',\n },\n },\n '@media screen and (max-width: 800px)': {\n hidden800: {\n display: 'none !important',\n },\n },\n '@media screen and (max-width: 600px)': {\n hidden600: {\n display: 'none !important',\n },\n },\n '@media screen and (max-width: 500px)': {\n wrapperFlex: {\n flexDirection: 'column',\n },\n },\n badge: {\n top: 14,\n },\n greenText: {\n color: theme.palette.success.dark,\n },\n curdContentFlexCenter: {\n display: 'flex',\n alignItems: 'center',\n },\n wrapperAvailable: {\n display: 'flex',\n alignItems: 'center',\n },\n buttonUpdate: {\n border: '1px solid',\n padding: '0px 7px',\n borderRadius: 5,\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n transition: 'background 0.5s',\n '&:hover': {\n background: '#00800026',\n },\n },\n buttonUpdateIcon: {\n height: 20,\n width: 20,\n marginRight: 10,\n },\n debug: {\n backgroundColor: grey[700],\n },\n info: {\n backgroundColor: blue[700],\n },\n warn: {\n backgroundColor: amber[700],\n },\n error: {\n backgroundColor: red[700],\n },\n smallAvatar: {\n width: 24,\n height: 24,\n },\n formControl: {\n display: 'flex',\n },\n baseSettingsButton: {\n transform: 'rotate(45deg)',\n },\n newValue: {\n animation: '$newValueAnimation 2s ease-in-out',\n },\n '@keyframes newValueAnimation': {\n '0%': {\n color: '#00f900',\n },\n '80%': {\n color: '#008000',\n },\n '100%': {\n color: theme.palette.mode === 'dark' ? '#fff' : '#000',\n },\n },\n});\n\nlet outputCache = '-';\nlet inputCache = '-';\nlet cpuCache = '- %';\nlet memCache = '- %';\nlet uptimeCache = '-';\n\nlet diskFreeCache = 1;\nlet diskSizeCache = 1;\nlet diskWarningCache = 1;\n\nconst StyledBadge = withStyles((theme) => ({\n badge: {\n right: -3,\n top: 13,\n padding: '0 4px',\n },\n}))(Badge);\n\nconst arrayLogLevel = ['silly', 'debug', 'info', 'warn', 'error'];\n\nfunction toggleClassName(el, name) {\n const classNames = el.className.split(' ');\n const pos = classNames.indexOf(name);\n if (pos !== -1) {\n classNames.splice(pos, 1);\n el.className = classNames.join(' ');\n }\n classNames.push(name);\n //el.className = classNames.join(' ');\n setTimeout(_classNames => el.className = _classNames, 100, classNames.join(' '));\n}\n\nconst HostRow = ({\n _id,\n alive,\n available,\n classes,\n color,\n isCurrentHost,\n description,\n events,\n executeCommandRemove,\n expertMode,\n getLogLevelIcon,\n formatInfo,\n hidden,\n hostsWorker,\n hostData,\n image,\n installed,\n name,\n openHostUpdateDialog,\n setBaseSettingsDialog,\n setEditDialog,\n showAdaptersWarning,\n socket,\n systemConfig,\n t,\n}) => {\n const [openCollapse, setCollapse] = useState(false);\n const [focused, setFocused] = useState(false);\n\n const refEvents = useRef();\n const refWarning = useRef();\n const refCpu = useRef();\n const refMem = useRef();\n const refUptime = useRef();\n\n const eventsInputFunc = (_, input) => {\n inputCache = input && input.val !== null ? `⇥${input.val}` : '-';\n if (refEvents.current) {\n refEvents.current.innerHTML = `${inputCache} / ${outputCache}`;\n toggleClassName(refEvents.current, classes.newValue);\n }\n };\n\n const eventsOutputFunc = (_, output) => {\n outputCache = output && output.val !== null ? `↦${output.val}` : '-';\n if (refEvents.current) {\n refEvents.current.innerHTML = `${inputCache} / ${outputCache}`;\n toggleClassName(refEvents.current, classes.newValue);\n }\n };\n\n const formatValue = (state, unit) => {\n if (!state || state.val === null || state.val === undefined) {\n return '-' + (unit ? ' ' + unit : '');\n } else if (systemConfig.common.isFloatComma) {\n return state.val.toString().replace('.', ',') + (unit ? ' ' + unit : '');\n } else {\n return state.val + (unit ? ' ' + unit : '');\n }\n };\n\n const warningFunc = (name, state) => {\n let warning;\n if (name.endsWith('diskFree')) {\n diskFreeCache = state?.val || 0;\n } else if (name.endsWith('diskSize')) {\n diskSizeCache = state?.val || 0;\n } else if (name.endsWith('diskWarning')) {\n diskWarningCache = state?.val || 0;\n }\n\n warning = (diskFreeCache / diskSizeCache) * 100 <= diskWarningCache;\n\n if (refWarning.current) {\n if (warning) {\n refWarning.current.setAttribute('title', t('Warning: Free space on disk is low'));\n refWarning.current.classList.add('warning');\n } else {\n refWarning.current.removeAttribute('title');\n refWarning.current.classList.remove('warning');\n }\n }\n };\n\n const cpuFunc = (_, state) => {\n cpuCache = formatValue(state, '%');\n if (refCpu.current) {\n refCpu.current.innerHTML = cpuCache;\n toggleClassName(refCpu.current, classes.newValue);\n }\n }\n\n const memFunc = (_, state) => {\n memCache = formatValue(state, '%');\n if (refMem.current) {\n refMem.current.innerHTML = memCache;\n toggleClassName(refMem.current, classes.newValue);\n }\n }\n\n const uptimeFunc = (_, state) => {\n if (state && state.val) {\n const d = Math.floor(state.val / (3600 * 24));\n const h = Math.floor(state.val % (3600 * 24) / 3600);\n uptimeCache = d ? `${d}d${h}h` : `${h}h`; // TODO translate\n }\n if (refUptime.current) {\n refUptime.current.innerHTML = uptimeCache;\n toggleClassName(refUptime.current, classes.newValue);\n }\n }\n\n const calculateWarning = notifications => {\n if (!notifications) {\n return 0;\n }\n const { result } = notifications;\n let count = 0;\n if (!result || !result.system) {\n return count;\n }\n if (Object.keys(result.system.categories).length) {\n let obj = result.system.categories;\n Object.keys(obj).forEach(nameTab =>\n Object.keys(obj[nameTab].instances).forEach(_ => count++));\n }\n\n return count;\n };\n\n const [errorHost, setErrorHost] = useState({ notifications: {}, count: 0 });\n\n const logLevelFunc = (name, state) => {\n if (state) {\n setLogLevelValue(state.val);\n setLogLevelValueSelect(state.val);\n }\n }\n\n useEffect(() => {\n const notificationHandler = notifications =>\n notifications && notifications[_id] && setErrorHost({ notifications: notifications[_id], count: calculateWarning(notifications[_id]) });\n\n hostsWorker.registerNotificationHandler(notificationHandler);\n\n hostsWorker.getNotifications(_id)\n .then(notifications => {\n notifications && notifications[_id] && setErrorHost({ notifications: notifications[_id], count: calculateWarning(notifications[_id]) });\n });\n\n socket.subscribeState(`${_id}.inputCount`, eventsInputFunc);\n socket.subscribeState(`${_id}.outputCount`, eventsOutputFunc);\n\n socket.subscribeState(`${_id}.cpu`, cpuFunc);\n socket.subscribeState(`${_id}.mem`, memFunc);\n socket.subscribeState(`${_id}.uptime`, uptimeFunc);\n\n socket.subscribeState(`${_id}.diskFree`, warningFunc);\n socket.subscribeState(`${_id}.diskSize`, warningFunc);\n socket.subscribeState(`${_id}.diskWarning`, warningFunc);\n\n socket.subscribeState(`${_id}.logLevel`, logLevelFunc);\n\n return () => {\n hostsWorker.unregisterNotificationHandler(notificationHandler);\n socket.unsubscribeState(`${_id}.inputCount`, eventsInputFunc);\n socket.unsubscribeState(`${_id}.outputCount`, eventsOutputFunc);\n\n socket.unsubscribeState(`${_id}.cpu`, cpuFunc);\n socket.unsubscribeState(`${_id}.mem`, memFunc);\n socket.unsubscribeState(`${_id}.uptime`, uptimeFunc);\n\n socket.unsubscribeState(`${_id}.diskFree`, warningFunc);\n socket.unsubscribeState(`${_id}.diskSize`, warningFunc);\n socket.unsubscribeState(`${_id}.diskWarning`, warningFunc);\n\n socket.unsubscribeState(`${_id}.logLevel`, logLevelFunc);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_id, socket, classes]);\n\n\n const [openDialogLogLevel, setOpenDialogLogLevel] = useState(false);\n const [logLevelValue, setLogLevelValue] = useState(null);\n const [logLevelValueSelect, setLogLevelValueSelect] = useState(null);\n\n const upgradeAvailable = (isCurrentHost || alive) && Adapters.updateAvailable(installed, available);\n\n const onCopy = () => {\n let text = [];\n refCpu.current && text.push(`CPU: ${refCpu.current.innerHTML}`);\n refMem.current && text.push(`RAM: ${refMem.current.innerHTML}`);\n refUptime.current && text.push(`${t('Uptime')}: ${refUptime.current.innerHTML}`);\n text.push(`${t('Available')}: ${available}`);\n text.push(`${t('Installed')}: ${installed}`);\n refEvents.current && text.push(`${t('Events')}: ${refEvents.current.innerHTML}`);\n\n hostData && typeof hostData === 'object' && Object.keys(hostData).map(value =>\n text.push(`${t(value)}: ${formatInfo[value] ? formatInfo[value](hostData[value], t) : hostData[value] || '--'}`));\n\n Utils.copyToClipboard(text.join('\\n'));\n window.alert(t('Copied'));\n };\n\n let showModal = false;\n let titleModal;\n if (openDialogLogLevel) {\n titleModal = t('Edit log level rule for %s', name);\n showModal = true;\n }\n\n const customModal = showModal ? <CustomModal\n title={titleModal}\n open={!0}\n onApply={_ => {\n if (openDialogLogLevel) {\n socket.setState(`${_id}.logLevel`, logLevelValueSelect);\n setOpenDialogLogLevel(false);\n }\n }}\n onClose={_ => {\n if (openDialogLogLevel) {\n setLogLevelValueSelect(logLevelValue);\n setOpenDialogLogLevel(false);\n }\n }}>\n {openDialogLogLevel && <FormControl className={classes.formControl} variant=\"outlined\" >\n <InputLabel>{t('log level')}</InputLabel>\n <Select\n variant=\"standard\"\n value={logLevelValueSelect}\n fullWidth\n onChange={el =>\n setLogLevelValueSelect(el.target.value)}\n >\n {arrayLogLevel.map(el => <MenuItem key={el} value={el}>\n {t(el)}\n </MenuItem>)}\n </Select>\n </FormControl>}\n {openDialogLogLevel && <FormControl className={classes.formControl} variant=\"outlined\" >\n <FormHelperText>{t('Log level will be reset to the saved level after the restart of the controller')}</FormHelperText>\n <FormHelperText>{t('You can set the log level permanently in the base host settings')}<BuildIcon className={classes.baseSettingsButton} /></FormHelperText>\n </FormControl>}\n </CustomModal> : null;\n\n return <div\n style={{ border: `2px solid ${color || 'inherit'}`, borderRadius: 5 }}\n onMouseOut={openDialogLogLevel ? null : () => setFocused(false)}\n onMouseOver={openDialogLogLevel ? null : () => setFocused(true)}\n onMouseMove={openDialogLogLevel ? null : () => setFocused(true)}\n key={_id} className={Utils.clsx(classes.root, hidden ? classes.hidden : '')}>\n {customModal}\n <div className={Utils.clsx(classes.wrapperFlex, !alive && classes.cursorNoDrop)} onClick={openDialogLogLevel ? null : () => setCollapse(bool => !bool)}>\n <div className={classes.wrapperColor}>\n <div className={Utils.clsx(classes.onOff, alive ? classes.green : classes.red)} />\n {alive && <div className={classes.dotLine} />}\n </div>\n <div\n ref={refWarning}\n style={{ background: color || 'inherit' }}\n className={classes.imageBlock}>\n <StyledBadge\n title={t('Hosts notifications')}\n badgeContent={errorHost.count}\n color=\"error\"\n onClick={e => {\n e.stopPropagation();\n showAdaptersWarning({ [_id]: errorHost.notifications }, socket, _id);\n }}\n >\n <CardMedia className={classes.img} component=\"img\" image={image || 'img/no-image.png'} />\n </StyledBadge>\n <div style={{ color: (color && Utils.invertColor(color, true)) || 'inherit' }} className={classes.host}>\n {name}\n </div>\n </div>\n <CardContent className={classes.cardContentH5}>\n {/*<Typography className={Utils.clsx(classes.flex, classes.hidden600)} variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {title}\n </Typography>*/}\n <Typography className={Utils.clsx(classes.flex, classes.hidden800)} variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div ref={refCpu}>{'- %'}</div>\n </Typography>\n <Typography className={Utils.clsx(classes.flex, classes.hidden800)} variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div ref={refMem}>{'- %'}</div>\n </Typography>\n <Typography className={Utils.clsx(classes.flex, classes.hidden800)} variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div ref={refUptime}>{'-/-'}</div>\n </Typography>\n <Typography className={Utils.clsx(classes.flex, classes.hidden1100)} variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div className={Utils.clsx(upgradeAvailable && classes.greenText, classes.curdContentFlexCenter)} >\n {upgradeAvailable ?\n <Tooltip title={t('Update')}>\n <div\n onClick={e => {\n e.stopPropagation();\n openHostUpdateDialog();\n }}\n className={classes.buttonUpdate}\n >\n <IconButton\n className={classes.buttonUpdateIcon}\n size=\"small\"\n >\n <RefreshIcon />\n </IconButton>{available}\n </div>\n </Tooltip> :\n available\n }</div>\n </Typography>\n <Typography className={Utils.clsx(classes.flex, classes.hidden1100)} variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {installed}\n </Typography>\n <Typography className={Utils.clsx(classes.flex, classes.hidden600)} variant=\"body2\" color=\"textSecondary\" component=\"div\">\n <div ref={refEvents}>{events}</div>\n </Typography>\n <div className={classes.marginTop10}>\n <Typography component={'span'} className={classes.enableButton}>\n <IconButton size=\"large\"\n onClick={e => {\n e.stopPropagation();\n setEditDialog(true);\n }}\n >\n <EditIcon />\n </IconButton>\n\n {expertMode &&\n <Tooltip title={t('Host Base Settings')}>\n <div>\n <IconButton size=\"large\" disabled={!alive} onClick={e => {\n setBaseSettingsDialog();\n e.stopPropagation();\n }}>\n <BuildIcon className={classes.baseSettingsButton} />\n </IconButton>\n </div>\n </Tooltip>\n }\n <Tooltip title={t('Restart host')}>\n <div>\n <IconButton size=\"large\" disabled={!alive} onClick={e => {\n e.stopPropagation();\n socket.restartController(_id)\n .catch(e => window.alert(`Cannot restart: ${e}`));\n }}>\n <CachedIcon />\n </IconButton>\n </div>\n </Tooltip>\n {expertMode && logLevelValue ?\n <Tooltip title={`${t('loglevel')} ${logLevelValue}`}>\n <IconButton size=\"large\" onClick={event => {\n event.stopPropagation();\n setOpenDialogLogLevel(true);\n }}>\n <Avatar className={Utils.clsx(classes.smallAvatar, classes[logLevelValue])}>\n {getLogLevelIcon(logLevelValue)}\n </Avatar>\n </IconButton>\n </Tooltip> : <div className={classes.emptyButton} />\n }\n <Tooltip title={t('Remove')}>\n <span>\n <IconButton\n size=\"large\"\n disabled={alive || isCurrentHost}\n title={alive || isCurrentHost ? t('You cannot delete host, when it is alive') : ''}\n onClick={e => {\n executeCommandRemove();\n e.stopPropagation();\n }}\n >\n <DeleteIcon />\n </IconButton>\n </span>\n </Tooltip>\n </Typography>\n </div>\n </CardContent>\n </div>\n {(openCollapse || focused) && typeof description === 'object' &&\n <div className={Utils.clsx(classes.collapse, !openCollapse ? classes.collapseOff : classes.collapseOn)} onClick={e => e.stopPropagation()}>\n <CardContent className={classes.cardContentInfo}>\n {description}\n <Tooltip title={t('Copy')}>\n <IconButton size=\"large\" onClick={() => onCopy()} style={{ position: 'absolute', top: 8, right: 8 }}>\n <CopyIcon />\n </IconButton>\n </Tooltip>\n </CardContent>\n <div className={classes.footerBlock}>\n </div>\n </div>}\n </div>;\n}\n\nHostRow.propTypes = {\n t: PropTypes.func,\n systemConfig: PropTypes.object,\n isCurrentHost: PropTypes.bool,\n};\n\nexport default withStyles(styles)(HostRow);\n","import { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@mui/styles';\n\nimport Dialog from '@mui/material/Dialog';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Button from '@mui/material/Button';\nimport TextField from '@mui/material/TextField';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport IconClose from '@mui/icons-material/Close';\nimport IconCheck from '@mui/icons-material/Check';\nimport AddIcon from '@mui/icons-material/Add';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nimport UploadImage from '../UploadImage';\n\nconst styles = theme => ({\n error: {\n border: '2px solid #FF0000',\n },\n id: {\n fontStyle: 'italic',\n },\n dialog: {\n height: 'calc(100% - 64px)'\n },\n button: {\n marginTop: 20,\n marginLeft: theme.spacing(1),\n },\n funcDivEdit: {\n width: '100%'\n },\n funcEditName: {\n display: 'inline-block',\n width: 85\n },\n funcEdit: {\n width: 400,\n },\n marginTop: {\n marginTop: 20,\n },\n commonTabWrapper: {\n flexFlow: 'wrap',\n display: 'flex'\n },\n commonWrapper: {\n width: 500,\n minWidth: 300\n },\n flexDrop: {\n width: '100%',\n maxWidth: 500,\n margin: 'auto',\n display: 'flex'\n },\n marginBlock: {\n marginTop: 20\n },\n buttonAdd: {\n minWidth: 150\n },\n textField: {\n width: '100%'\n },\n flex: {\n display: 'flex'\n },\n close: {\n width: '20px',\n height: '20px',\n opacity: '0.9',\n cursor: 'pointer',\n position: 'relative',\n top: 20,\n transition: 'all 0.6s ease',\n '&:hover': {\n transform: 'rotate(90deg)'\n },\n '&:before': {\n position: 'absolute',\n left: '9px',\n content: '\"\"',\n height: '20px',\n width: '3px',\n backgroundColor: '#ff4f4f',\n transform: 'rotate(45deg)'\n },\n '&:after': {\n position: 'absolute',\n left: '9px',\n content: '\"\"',\n height: '20px',\n width: '3px',\n backgroundColor: '#ff4f4f',\n transform: 'rotate(-45deg)'\n },\n },\n color: {\n width: 70\n },\n buttonRemoveWrapper: {\n position: 'absolute',\n zIndex: 222,\n right: 0\n },\n tabsPadding: {\n padding: '0px 24px'\n }\n});\n\nclass HostEdit extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n text: JSON.stringify(this.props.obj, null, 2),\n error: false,\n changed: false,\n tab: (window._localStorage || window.localStorage).getItem((this.props.dialogName || 'App') + '.editTab') || 'object',\n };\n\n this.originalObj = JSON.stringify(this.props.obj, null, 2);\n }\n\n prepareObject(value) {\n value = value || this.state.text;\n try {\n const obj = JSON.parse(value);\n obj._id = this.props.obj._id; // do not allow change of id\n return obj;\n } catch (e) {\n return null;\n }\n }\n\n onChange(value) {\n const newState = { text: value };\n const json = this.prepareObject(value);\n if (json) {\n newState.changed = this.originalObj !== JSON.stringify(json, null, 2);\n if (this.state.error) {\n newState.error = false;\n }\n } else {\n newState.error = true;\n }\n this.setState(newState);\n }\n\n onUpdate() {\n try {\n const obj = JSON.parse(this.state.text);\n obj._id = this.props.obj._id; // do not allow change of id\n this.props.onClose(obj);\n } catch (error) {\n // ignore\n }\n }\n setCommonItem(json, name, value) {\n json.common[name] = value;\n this.onChange(JSON.stringify(json, null, 2));\n }\n removeCommonItem(json, name) {\n delete json.common[name]\n this.onChange(JSON.stringify(json, null, 2));\n }\n buttonAddKey(nameKey, cb) {\n const { t, classes } = this.props;\n return <div\n className={classes.marginBlock}>\n <Button\n className={classes.buttonAdd}\n variant=\"contained\"\n color=\"secondary\"\n onClick={cb}\n startIcon={<AddIcon />}\n >{t('Add ' + nameKey)}</Button>\n </div>\n }\n buttonRemoveKey(nameKey, cb) {\n const { t, classes } = this.props;\n return <Tooltip title={t('Remove ' + nameKey)}><div className={classes.close} onClick={cb} /></Tooltip>\n }\n renderCommonEdit() {\n try {\n const json = JSON.parse(this.state.text);\n const disabled = false;\n const { classes, t } = this.props;\n return <div className={classes.commonTabWrapper}>\n <div className={classes.commonWrapper}>\n {typeof json.common.title !== 'undefined' ?\n <TextField\n variant=\"standard\"\n disabled={disabled}\n label={t('title')}\n className={Utils.clsx(classes.marginBlock, classes.textField)}\n fullWidth\n value={json.common.title}\n onChange={(el) => this.setCommonItem(json, 'title', el.target.value)}\n /> :\n this.buttonAddKey('title', () => this.setCommonItem(json, 'title', ''))\n }\n {typeof json.common.color !== 'undefined' ?\n <div className={classes.flex}>\n <TextField\n variant=\"standard\"\n disabled={disabled}\n className={Utils.clsx(classes.marginBlock, classes.color)}\n label={t('Color')}\n type=\"color\"\n value={json.common.color}\n onChange={el => this.setCommonItem(json, 'color', el.target.value)} />\n {this.buttonRemoveKey('color', () => this.removeCommonItem(json, 'color'))}\n </div> :\n this.buttonAddKey('color', () => this.setCommonItem(json, 'color', ''))\n }\n </div>\n {typeof json.common.icon !== 'undefined' ?\n <div className={classes.flexDrop}>\n <UploadImage\n disabled={disabled}\n crop\n maxSize={256 * 1024}\n icon={json.common.icon}\n removeIconFunc={() => this.setCommonItem(json, 'icon', '')}\n onChange={(base64) => this.setCommonItem(json, 'icon', base64)}\n t={t}\n />\n {this.buttonRemoveKey('icon', () => this.removeCommonItem(json, 'icon'))}\n </div> :\n <div className={classes.flexDrop}>\n {this.buttonAddKey('icon', () => this.setCommonItem(json, 'icon', ''))}\n </div>\n }\n </div>\n } catch (e) {\n return <div>{this.props.t('Cannot parse JSON!')}</div>;\n }\n }\n\n render() {\n // const withAlias = this.props.obj._id.startsWith('alias.0') && this.props.obj.type === 'state';\n\n return <Dialog\n classes={{ paper: this.props.classes.dialog }}\n open={!0}\n maxWidth=\"lg\"\n fullWidth={this.state.type !== 'number' && this.state.type !== 'boolean'}\n fullScreen={false}\n onClose={() => this.props.onClose()}\n aria-labelledby=\"edit-value-dialog-title\"\n aria-describedby=\"edit-value-dialog-description\"\n >\n <DialogTitle id=\"edit-value-dialog-title\">{this.props.t('Edit host settings')}: <span className={this.props.classes.id}>{this.props.obj._id}</span></DialogTitle>\n <DialogContent>\n {\n this.renderCommonEdit()\n }\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" disabled={this.state.error || !this.state.changed} onClick={() => this.onUpdate()} color=\"primary\" startIcon={<IconCheck />}>{this.props.t('Write')}</Button>\n <Button variant=\"contained\" onClick={() => this.props.onClose()} color=\"grey\" startIcon={<IconClose />}>{this.props.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nHostEdit.propTypes = {\n classes: PropTypes.object,\n socket: PropTypes.object,\n obj: PropTypes.object,\n expertMode: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n dialogName: PropTypes.string,\n objects: PropTypes.object,\n\n t: PropTypes.func,\n};\n\nexport default withStyles(styles)(HostEdit);\n","/* eslint-disable react/jsx-no-target-blank */\nimport React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactMarkdown from 'react-markdown'\nimport { makeStyles } from '@mui/styles';\n\nimport { Accordion, AccordionDetails, AccordionSummary, Card, DialogTitle, IconButton } from '@mui/material';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport DescriptionIcon from '@mui/icons-material/Description';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport IconCopy from '@iobroker/adapter-react-v5/icons/IconCopy';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n // backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'auto',\n padding: 10,\n },\n paper: {\n maxWidth: 1000,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n // pre: {\n // overflow: 'auto',\n // whiteSpace: 'pre-wrap',\n // margin: 0\n // },\n h1: {\n fontWeight: 500,\n fontSize: 35,\n margin: '10px 0',\n },\n h2: {\n padding: '10px 7px',\n fontSize: 25,\n fontWeight: 300,\n borderRadius: 3,\n background: '#4dabf5',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n },\n h22: {\n padding: 0,\n margin:0,\n fontSize: 25,\n fontWeight: 300,\n borderRadius: 3,\n background: '#4dabf5',\n color: theme.palette.mode === 'dark' ? 'black' : 'white',\n },\n standardText: {\n fontSize: 15,\n margin: '10px 0',\n '& > a': {\n textDecoration: 'none',\n color: '#1e88e5',\n },\n },\n standardTextSmall: {\n fontSize: 12,\n color: 'black',\n },\n standardTextSmall2: {\n fontSize: 12,\n },\n silver: {\n color: 'silver',\n '& > a': {\n textDecoration: 'none',\n color: '#1e88e5',\n },\n },\n pre: {\n whiteSpace: 'pre-wrap',\n background: '#e4e3e3',\n padding: 10,\n borderRadius: 3,\n position: 'relative',\n },\n copyButton: {\n color: 'black',\n position: 'absolute',\n right: 10,\n top: 4,\n },\n comment: {\n color: '#00000078',\n },\n accordionSummary:{\n background: '#4dabf5',\n borderRadius: 3,\n '& .MuiAccordionSummary-content': {\n margin: 0,\n },\n },\n accordionDetails:{\n display: 'flex',\n flexDirection: 'column',\n },\n code: {\n backgroundColor: theme.palette.mode === 'dark' ? '#123456' : '#93bbe7',\n padding: '0 3px 0 3px',\n },\n copyButtonSmall: {\n width: 31,\n height: 16,\n },\n}));\n\nfunction removeChapter(text, remove, mustContain) {\n const lines = text.split('\\n');\n let newLines = [];\n let found = false;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].toLowerCase();\n if (line.startsWith('##')) {\n found = line.includes(remove.toLowerCase()) && (!mustContain || !line.includes(mustContain.toLowerCase()));\n }\n\n if (!found) {\n newLines.push(lines[i]);\n }\n }\n\n return newLines.join('\\n')\n}\n\nconst JsControllerDialog = ({ socket, hostId, theme, version, onClose }) => {\n const classes = useStyles();\n const [readme, setReadme] = useState(null);\n const [location, setLocation] = useState('');\n const [os, setOS] = useState('');\n\n const copyTextToClipboard = text => {\n Utils.copyToClipboard(text);\n window.alert(I18n.t('Copied'));\n };\n\n useEffect(() => {\n (!location || !os) && socket.getHostInfoShort(hostId)\n .then(data => {\n data.location && data.location !== location && setLocation(data.location);\n data.os && data.os !== os && setOS(data.os); // win32, linux, darwin, freebsd, android\n\n fetch(`https://raw.githubusercontent.com/ioBroker/ioBroker.docs/master/admin/${I18n.getLanguage()}/controller-upgrade.md`)\n .then(response => response.text())\n .then(_readme => {\n let _os = data.os || os;\n let _location = (data.location || location).replace(/\\\\/g, '/');\n if (_os === 'win32') {\n _readme = removeChapter(_readme, 'linux', 'windows');\n } else {\n _readme = removeChapter(_readme, 'windows', 'linux');\n }\n _readme = _readme.replace(/cd \\/opt\\/iobroker/g, `cd ${_location}`)\n _readme = _readme.replace(/cd C:\\\\iobroker/g, `cd ${_location}`)\n _readme = _readme.replace(/x\\.y\\.z/g, version)\n _readme = _readme.split('<!-- copy');\n const parts = [];\n _readme.forEach(chapter => {\n if (chapter.includes('-->')) {\n let [button, text] = chapter.split('-->');\n let small = false;\n if (button.startsWith(' small')) {\n button = button.replace(/^ {2}small /, '');\n small = true;\n }\n button = button.replace(/^\\n\\r/, '').replace(/^\\n/, '');\n if (small) {\n parts.push(<IconButton key={`b${parts.length}`} onClick={() => copyTextToClipboard(button)}><IconCopy /></IconButton>);\n } else {\n parts.push(<Button\n key={`b${parts.length}`}\n variant=\"contained\"\n onClick={() => copyTextToClipboard(button)}\n startIcon={<IconCopy />}\n >{I18n.t('Copy to clipboard')}</Button>);\n }\n parts.push(text);\n } else {\n parts.push(chapter);\n }\n });\n\n setReadme(parts);\n });\n })\n .catch(e =>\n window.alert(`Cannot get information about host \"${hostId}\": ${e}`));\n }, [location, os, socket, version, hostId]);\n\n const renderReadme = () => <>{readme.map((text, i) => typeof text === 'object' ? text : <ReactMarkdown\n key={`t_${i}`}\n components={{\n em: ({node, ...props}) => <IconButton className={classes.copyButtonSmall} onClick={() => copyTextToClipboard(props.children[0])}><IconCopy /></IconButton>,\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n a: ({node, ...props}) => <a style={{ color: 'inherit' }} {...props} />,\n code: ({node, inline, className, children, ...props}) => <code className={classes.code} {...props} >{children}</code>,\n }}\n >\n {text}\n </ReactMarkdown>)}</>;\n\n const renderText = () => <Card className={classes.root}>\n <div className={classes.standardText}>{I18n.t('Due to the different hardware and platforms under which ioBroker runs, the js-controller has to be updated manually. Further details can be found in the appropriate section.')}</div>\n\n <h2 className={classes.h2}>{I18n.t('General information for all platforms')}</h2>\n <div className={classes.standardText}>{I18n.t('For an update from js-controller 1.x to 2.x please always read the information at')} <a href=\"https://forum.iobroker.net/topic/26759/js-controller-2-jetzt-f%C3%BCr-alle-im-stable\" target=\"_blank\">forum</a>.</div>\n <div className={classes.standardText}>{I18n.t('Otherwise please update the slaves first with an update of master-slave systems and the master last!')}</div>\n {os !== 'win32' && <>\n <h2 className={classes.h2}>{I18n.t('Linux/macOS (new installer)')}</h2>\n <div className={classes.standardText}>{I18n.t('This is the recommended option')}</div>\n\n <div className={classes.standardText}>{I18n.t('Please execute the following commands in an SSH shell (console):')}</div>\n <pre className={classes.pre}>\n <IconButton size=\"small\" onClick={() => {\n window.alert(I18n.t('Copied'))\n copyTextToClipboard(\n `iob backup\niob stop\niob update\niob upgrade self\niob start`\n );\n }} className={classes.copyButton}>\n <IconCopy />\n </IconButton>\n <div className={classes.standardTextSmall}>iob backup</div>\n <div className={classes.standardTextSmall}>iob stop</div>\n <div className={classes.standardTextSmall}>iob update</div>\n <div className={classes.standardTextSmall}>iob fix</div>\n <div className={classes.standardTextSmall}>iob upgrade self</div>\n <div className={classes.standardTextSmall}>iob start</div>\n </pre>\n <div className={Utils.clsx(classes.standardTextSmall2)}>{I18n.t('or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.')}</div>\n <div className={Utils.clsx(classes.standardTextSmall2)}>{I18n.t('If the upgrade command displays Access Rights / Permission errors, then please use the install fixer')}</div>\n <pre className={classes.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(`curl -sL https://iobroker.net/fix.sh | bash -`);\n }}\n className={classes.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div className={classes.standardTextSmall}>curl -sL https://iobroker.net/fix.sh | bash -</div>\n </pre>\n <div className={Utils.clsx(classes.standardTextSmall2)}>{I18n.t('to fix these issues and upgrade command run again.')}</div>\n\n <h2 className={classes.h2}>{I18n.t('Linux/macOS (manually installed)')}</h2>\n <div className={classes.standardText}>{I18n.t('A manual installation usually takes place under root as user and therefore a \"sudo\" is necessary before the commands.')}</div>\n\n <div className={classes.standardText}>{I18n.t('Please execute the following commands in an SSH shell (console):')}</div>\n <pre className={classes.pre}>\n <IconButton size=\"small\" onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(\n `cd ${location || '/opt/iobroker'}\niob backup\niob stop\niob update\niob fix\niob upgrade self\niob start\n`\n );\n }} className={classes.copyButton}>\n <IconCopy />\n </IconButton>\n <div className={classes.standardTextSmall}>cd {location || '/opt/iobroker'}</div>\n <div className={classes.standardTextSmall}>iob backup</div>\n <div className={classes.standardTextSmall}>iob stop</div>\n <div className={classes.standardTextSmall}>iob fix</div>\n <div className={classes.standardTextSmall}>iob update</div>\n <div className={classes.standardTextSmall}>iob upgrade self</div>\n <div className={classes.standardTextSmall}>iob start</div>\n </pre>\n\n <div className={Utils.clsx(classes.standardTextSmall2)}>{I18n.t('or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.')}</div>\n <div className={Utils.clsx(classes.standardTextSmall2)}>{I18n.t('If the upgrade command displays permissions / permissions errors, fix them. Sometimes \"sudo\" is not enough and you have to run the installation as a real root (previously simply sudo su -).')}</div>\n </>}\n {os === 'win32' && <>\n <h2 className={classes.h2}>{I18n.t('Windows')}</h2>\n <div className={classes.standardText}>{I18n.t('For updating ioBroker on Windows, download the appropriate installer with the desired js-controller version from the download page ')}<a href=\"https://www.iobroker.net/#en/download\" target=\"_blank\">https://www.iobroker.net/#en/download</a>{I18n.t(' and make the update with it. With the Windows Installer, previously manually installed servers or installations from other operating systems can be migrated to Windows and updated.')}</div>\n\n <h2 className={classes.h2}>{I18n.t('Windows (manually installed)')}</h2>\n <div className={classes.standardText}>{I18n.t('A manual installation is done with administrator rights. Please start a cmd.exe command line window as an administrator (right-click on cmd.exe and execute as administrator) and execute the following commands:')}</div>\n <pre className={classes.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(\n `cd ${(location || 'C:\\\\iobroker').replace(/\\//g, '\\\\')}\niob backup\niob stop\niob status\niob update\niob upgrade self\n`\n );\n }}\n\n className={classes.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div className={classes.standardTextSmall}>cd {(location || 'C:\\\\iobroker').replace(/\\//g, '\\\\')} {!location ? I18n.t('(or where ioBroker was installed)') : null}</div>\n <div className={classes.standardTextSmall}>iob backup</div>\n <div className={classes.standardTextSmall}>iob stop {I18n.t('to stop the ioBroker service')}</div>\n <div className={classes.standardTextSmall}>iob status {I18n.t('to check if ioBroker has finished')}</div>\n <div className={classes.standardTextSmall}>iob update</div>\n <div className={classes.standardTextSmall}>iob upgrade self</div>\n </pre>\n <div className={Utils.clsx(classes.standardTextSmall2)}>{I18n.t('Start ioBroker service or reboot computer, then ioBroker should restart and you can be sure that all the old processes were finished.')}</div>\n </>}\n <Accordion style={{ paddingTop: 14 }}>\n <AccordionSummary\n className={classes.accordionSummary}\n expandIcon={<ExpandMoreIcon />}\n >\n <h2 className={classes.h22}>{I18n.t('Emergency Linux / macOS / Windows')}</h2>\n </AccordionSummary>\n <AccordionDetails\n className={classes.accordionDetails}>\n <div className={classes.standardText}>{I18n.t('(manual reinstallation, if somehow nothing works after the update)')}</div>\n <div className={classes.standardText}>{I18n.t('On Windows first please call in the start menu under \"ioBroker\" the command line of the relevant ioBroker instance. The correct directory is then set automatically. On Linux or macOS please go to the ioBroker directory.')}</div>\n\n <div className={classes.standardText}>{I18n.t('Run npm install iobroker.js-controller there. A specific version can be installed using npm install iobroker.js-controller@x.y.z (replace x.y.z with the desired version).')}</div>\n\n <div className={classes.standardText}>{I18n.t('If there are problems with access rights when running on Linux the command has to be changed slightly:')}</div>\n\n <div className={classes.standardTextSmall2}>{I18n.t('For systems created with the new Linux installer:')}</div>\n <pre className={classes.pre}>\n <IconButton\n size=\"small\"\n onClick={() => {\n window.alert(I18n.t('Copied'));\n copyTextToClipboard(\n `cd ${os === 'win32' ? (location || 'C:\\\\iobroker').replace(/\\//g, '\\\\') : (location || '/opt/iobroker')}\nsudo -u iobroker -H npm install iobroker.js-controller`\n );\n }}\n className={classes.copyButton}\n >\n <IconCopy />\n </IconButton>\n <div className={classes.standardTextSmall}>cd {os === 'win32' ? (location || 'C:\\\\iobroker').replace(/\\//g, '\\\\') : (location || '/opt/iobroker')}</div>\n <div className={classes.standardTextSmall}>sudo -u iobroker -H npm install iobroker.js-controller</div>\n </pre>\n <div className={classes.standardTextSmall2}>{I18n.t('For systems installed manually under Linux, prefix sudo or run as root.')}</div>\n <div className={classes.standardText}>{I18n.t('This way is only necessary in very few cases and please consult the forum beforehand!')}</div>\n </AccordionDetails>\n </Accordion>\n </Card>;\n\n return <Dialog\n onClose={() => onClose()}\n open={!0}\n classes={{ paper: classes.paper }}\n >\n <DialogTitle>{I18n.t('js-controller upgrade instructions')}</DialogTitle>\n <DialogContent className={readme ? null : classes.overflowHidden} dividers>\n {readme ? renderReadme() : renderText()}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => {\n window.open('https://github.com/ioBroker/ioBroker.js-controller/blob/master/CHANGELOG.md', '_blank')\n onClose();\n }}\n color=\"grey\"\n startIcon={<DescriptionIcon />}\n >\n {I18n.t('Show whole changelog')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => onClose()}\n color=\"primary\"\n startIcon={<CloseIcon />}\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog>;\n}\n\nJsControllerDialog.propTypes = {\n socket: PropTypes.object,\n hostId: PropTypes.string,\n theme: PropTypes.object,\n version: PropTypes.string,\n onClose: PropTypes.func,\n};\n\nexport default JsControllerDialog;","import { createRef, Component } from 'react';\nimport {withStyles} from '@mui/styles';\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\nimport PropTypes from 'prop-types';\n\nimport Grid from '@mui/material/Grid';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport TextField from '@mui/material/TextField';\nimport Paper from '@mui/material/Paper';\n\nconst styles = theme => ({\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: theme.spacing(1),\n },\n controlItem: {\n width: `calc(100% - ${theme.spacing(2)})`,\n marginBottom: theme.spacing(2),\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n RAM: {\n width: 400,\n marginRight: theme.spacing(1),\n }\n});\n\nclass BaseSettingsSystem extends Component {\n constructor(props) {\n super(props);\n\n const settings = this.props.settings || {};\n\n this.state = {\n memoryLimitMB: settings.memoryLimitMB || 0,\n hostname: settings.hostname || '',\n statisticsInterval: settings.statisticsInterval || 15000,\n checkDiskInterval: settings.checkDiskInterval || 300000,\n instanceStartInterval: settings.instanceStartInterval || 2000,\n compact: settings.compact || false,\n allowShellCommands: settings.allowShellCommands || false,\n memLimitWarn: settings.memLimitWarn || 100,\n memLimitError: settings.memLimitError || 50,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.focusRef.current && this.focusRef.current.focus();\n }\n\n onChange() {\n this.props.onChange({\n memoryLimitMB: this.state.memoryLimitMB,\n hostname: this.state.hostname,\n statisticsInterval: this.state.statisticsInterval,\n checkDiskInterval: this.state.checkDiskInterval,\n noChmod: this.state.noChmod,\n instanceStartInterval: this.state.instanceStartInterval,\n compact: this.state.compact,\n allowShellCommands: this.state.allowShellCommands,\n memLimitWarn: this.state.memLimitWarn,\n memLimitError: this.state.memLimitError,\n });\n }\n\n render() {\n return <Paper className={ this.props.classes.paper }>\n <Grid item className={ this.props.classes.gridSettings }>\n <Grid container direction=\"column\">\n <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('Host name') }\n className={ this.props.classes.controlItem }\n value={ this.state.hostname || this.props.currentHost.replace('system.host.', '') }\n onChange={ e => this.setState( {hostname: e.target.value }, () => this.onChange()) }\n helperText={ this.props.t('You can change the host name, but be aware, that all instances must be assigned anew') }\n />\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('Check disk space interval') }\n className={ this.props.classes.controlItem }\n value={ this.state.checkDiskInterval }\n type=\"number\"\n min={ 1000 }\n onChange={ e => this.setState( {checkDiskInterval: parseInt(e.target.value, 10) }, () => this.onChange()) }\n helperText={ this.props.t('How oft the disk will be checked. Do not set it to low, because it can affect system performance. Value is in ms') }\n />\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('Instance statistics update interval') }\n className={ this.props.classes.controlItem }\n value={ this.state.statisticsInterval }\n type=\"number\"\n min={ 5000 }\n onChange={ e => this.setState( {statisticsInterval: parseInt(e.target.value, 10) }, () => this.onChange()) }\n helperText={ this.props.t('How oft the instance statistics will be updated. Used RAM, CPU and so on. Value is in ms') }\n />\n </Grid>\n <Grid item className={ this.props.classes.controlItem }>\n <FormControlLabel\n control={\n <Checkbox\n checked={ this.state.compact }\n onChange={ e => this.setState( { compact: e.target.checked }, () => this.onChange()) }\n />\n }\n label={ this.props.t('Compact mode') }\n />\n <div>{ this.props.t('When enabled adapter instances can run in one or few processes to save RAM usage.') }</div>\n </Grid>\n <Grid item className={ this.props.classes.controlItem }>\n <FormControlLabel\n control={\n <Checkbox\n checked={ this.state.allowShellCommands }\n onChange={ e => this.setState( {allowShellCommands: e.target.checked }, () => this.onChange()) }\n />\n }\n label={ this.props.t(`Allow shell's commands`) }\n />\n <div>{ this.props.t('Allow execution of sendToHost(\"shell\", \"cli command\")') }</div>\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('Limit RAM size for controller') }\n className={ this.props.classes.controlItem }\n value={ this.state.memoryLimitMB }\n type=\"number\"\n onChange={ e => this.setState( {memoryLimitMB: parseInt(e.target.value, 10) }, () => this.onChange()) }\n helperText={ this.props.t('MB') }\n />\n </Grid>\n <Grid item>\n <Grid container direction=\"row\" className={ this.props.classes.controlItem }>\n <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('Show warning im log if RAM less than') }\n className={ this.props.classes.RAM }\n value={ this.state.memLimitWarn }\n type=\"number\"\n onChange={ e => this.setState( {memLimitWarn: parseInt(e.target.value, 10) }, () => this.onChange()) }\n helperText={ this.props.t('MB') }\n />\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('Show error in log if RAM less than') }\n className={ this.props.classes.RAM }\n value={ this.state.memLimitError }\n type=\"number\"\n onChange={ e => this.setState( {memLimitError: parseInt(e.target.value, 10) }, () => this.onChange()) }\n helperText={ this.props.t('MB') }\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </Paper>;\n }\n}\n\nBaseSettingsSystem.propTypes = {\n t: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n settings: PropTypes.object.isRequired,\n currentHost: PropTypes.string,\n};\n\nexport default withWidth()(withStyles(styles)(BaseSettingsSystem));\n","import { createRef, Component } from 'react';\nimport {withStyles} from '@mui/styles';\nimport PropTypes from 'prop-types';\n\nimport Grid from '@mui/material/Grid';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport TextField from '@mui/material/TextField';\nimport Paper from '@mui/material/Paper';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nconst styles = theme => ({\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: theme.spacing(1),\n },\n controlItem: {\n width: `calc(100% - ${theme.spacing(2)})`,\n marginBottom: theme.spacing(2),\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n RAM: {\n width: 400,\n marginRight: theme.spacing(1),\n }\n});\n\nclass BaseSettingsMultihost extends Component {\n constructor(props) {\n super(props);\n\n const settings = this.props.settings || {};\n\n this.state = {\n enabled: settings.enabled || false,\n secure: settings.secure || true,\n password: '',\n };\n\n settings.password && this.props.socket.decrypt(settings.password)\n .then(plainPass =>\n this.setState({ password: plainPass }));\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.focusRef.current && this.focusRef.current.focus();\n }\n\n onChange() {\n const newState = {\n enabled: this.state.enabled,\n secure: this.state.secure,\n };\n\n if (this.state.password) {\n this.props.socket.encrypt(this.state.password)\n .then(encodedPass => {\n newState.password = encodedPass;\n this.props.onChange(newState);\n });\n } else {\n this.props.onChange(newState);\n }\n }\n\n render() {\n return <Paper className={ this.props.classes.paper }>\n <form className={ this.props.classes.form } noValidate autoComplete=\"off\">\n <Grid item className={ this.props.classes.gridSettings }>\n <Grid container direction=\"column\">\n <Grid item className={ this.props.classes.controlItem }>\n <FormControlLabel\n control={\n <Checkbox\n checked={ this.state.enabled }\n onChange={ e => this.setState( { enabled: e.target.checked }, () => this.onChange()) }\n />\n }\n label={ this.props.t('Allow slave connections') }\n />\n <div>{ this.props.t('When activated this host can be discovered by other iobroker installations in your network to become the master of a multihost system.')}</div>\n </Grid>\n <Grid item className={ this.props.classes.controlItem }>\n <FormControlLabel\n control={\n <Checkbox\n checked={ this.state.secure }\n onChange={ e => this.setState( {secure: e.target.checked }, () => this.onChange()) }\n />\n }\n label={ this.props.t(`With password`) }\n />\n <div>{ this.props.t('Ask password by connection establishment') }</div>\n </Grid>\n { this.state.secure ? <Grid item>\n <TextField\n variant=\"standard\"\n label={ this.props.t('Multi-host password') }\n className={ this.props.classes.controlItem }\n value={ this.state.password }\n type=\"password\"\n inputProps={{\n autoComplete: 'new-password',\n form: {\n autoComplete: 'off',\n },\n }}\n autoComplete=\"off\"\n onChange={ e => this.setState( {password: e.target.value }, () => this.onChange()) }\n />\n </Grid> : null }\n </Grid>\n </Grid>\n </form>\n </Paper>;\n }\n}\n\nBaseSettingsMultihost.propTypes = {\n t: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n settings: PropTypes.object.isRequired,\n socket: PropTypes.object,\n};\n\nexport default withWidth()(withStyles(styles)(BaseSettingsMultihost));\n","import { createRef, Component } from 'react';\nimport { withStyles } from '@mui/styles';\nimport PropTypes from 'prop-types';\n\nimport Grid from '@mui/material/Grid';\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport Select from '@mui/material/Select';\nimport Tooltip from '@mui/material/Tooltip';\nimport TextField from '@mui/material/TextField';\nimport FormGroup from '@mui/material/FormGroup';\nimport MenuItem from '@mui/material/MenuItem';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormControl from '@mui/material/FormControl';\nimport Paper from '@mui/material/Paper';\nimport Switch from '@mui/material/Switch';\n\nimport { Utils, withWidth, Confirm as DialogConfirm } from '@iobroker/adapter-react-v5';\n\nconst styles = theme => ({\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: theme.spacing(1),\n },\n controlItem: {\n width: 400,\n marginBottom: theme.spacing(2),\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n dangerZone: {\n backgroundColor: 'rgba(255, 165, 0, 0.05)',\n border: '2px solid rgba(255, 165, 0)',\n marginBottom: theme.spacing(1),\n },\n dangerZoneHeader: {\n background: 'rgba(255, 165, 0)',\n color: '#FFF',\n paddingLeft: theme.spacing(2),\n paddingTop: 4,\n paddingBottom: 4,\n marginTop: -1,\n marginLeft: -1,\n },\n warning: {\n padding: 8,\n fontSize: 14,\n color: theme.palette.mode === 'dark' ? '#ffa500' : '#b17200',\n },\n});\n\nconst DEFAULT_JSONL_OPTIONS = {\n autoCompress: {\n sizeFactor: 2,\n sizeFactorMinimumSize: 25000,\n },\n throttleFS: {\n intervalMs: 60000,\n maxBufferedCommands: 1000,\n },\n};\n\nclass BaseSettingsObjects extends Component {\n constructor(props) {\n super(props);\n\n const settings = this.props.settings || {};\n settings.options = settings.options || {\n auth_pass: '',\n retry_max_delay: 2000,\n retry_max_count: 19,\n db: 0,\n family: 0,\n };\n settings.backup = settings.backup || {\n disabled: false,\n files: 24,\n hours: 48,\n period: 120,\n path: '',\n };\n settings.jsonlOptions = settings.jsonlOptions || DEFAULT_JSONL_OPTIONS;\n settings.jsonlOptions.autoCompress = settings.jsonlOptions.autoCompress || DEFAULT_JSONL_OPTIONS.autoCompress;\n settings.jsonlOptions.throttleFS = settings.jsonlOptions.throttleFS || DEFAULT_JSONL_OPTIONS.throttleFS;\n\n this.state = {\n type: settings.type || 'file',\n host: Array.isArray(settings.host) ? settings.host.join(',') : (settings.host || '127.0.0.1'),\n port: settings.port || 9001,\n noFileCache: settings.noFileCache || false,\n dataDir: settings.dataDir || '',\n connectTimeout: settings.connectTimeout || 2000,\n writeFileInterval: settings.writeFileInterval || 5000,\n options_auth_pass: settings.options.auth_pass || settings.pass || '',\n options_retry_max_delay: settings.options.retry_max_delay || 2000,\n options_retry_max_count: settings.options.retry_max_count || 19,\n options_db: settings.options.db || 0,\n options_family: settings.options.family || 0,\n backup_disabled: settings.backup.disabled || false,\n backup_files: settings.backup.files || 24,\n backup_hours: settings.backup.hours || 48,\n backup_period: settings.backup.period || 120,\n backup_path: settings.backup.path || '',\n jsonlOptions_autoCompress_sizeFactor: settings.jsonlOptions.autoCompress.sizeFactor || 2,\n jsonlOptions_autoCompress_sizeFactorMinimumSize: settings.jsonlOptions.autoCompress.sizeFactorMinimumSize || 25000,\n jsonlOptions_throttleFS_intervalMs: settings.jsonlOptions.throttleFS.intervalMs || 60000,\n jsonlOptions_throttleFS_maxBufferedCommands: settings.jsonlOptions.throttleFS.maxBufferedCommands || 100,\n textIP: Array.isArray(settings.host) || (settings.host || '').match(/[^.\\d]/) || (settings.host || '').includes(','),\n\n IPs: ['0.0.0.0', '127.0.0.1'],\n loading: true,\n showWarningDialog: false,\n toConfirmType: '',\n originalDBType: settings.type || 'file',\n };\n\n this.focusRef = createRef();\n\n this.props.socket.getIpAddresses(this.props.currentHost)\n .then(_IPs => {\n const IPs = [..._IPs];\n !IPs.includes('0.0.0.0') && IPs.push('0.0.0.0');\n !IPs.includes('127.0.0.1') && IPs.push('127.0.0.1');\n let textIP = this.state.host.match(/[^.\\d]/) || (this.state.host || '').includes(',');\n if (!textIP && !IPs.includes(IPs)) {\n textIP = true;\n }\n this.setState({ IPs, loading: false, textIP });\n })\n }\n\n componentDidMount() {\n this.focusRef.current && this.focusRef.current.focus();\n }\n\n onChange() {\n const settings = {\n type: this.state.type,\n host: this.state.host,\n port: parseInt(this.state.port, 10),\n noFileCache: this.state.noFileCache,\n connectTimeout: parseInt(this.state.connectTimeout, 10),\n writeFileInterval: parseInt(this.state.writeFileInterval, 10),\n dataDir: this.state.dataDir,\n options: {\n auth_pass: this.state.options_auth_pass || null,\n retry_max_delay: parseInt(this.state.options_retry_max_delay, 10),\n retry_max_count: parseInt(this.state.options_retry_max_count, 10),\n db: parseInt(this.state.options_db, 10),\n family: parseInt(this.state.options_family, 10),\n },\n backup: {\n disabled: this.state.backup_disabled,\n files: parseInt(this.state.backup_files, 10),\n hours: parseInt(this.state.backup_hours, 10),\n period: parseInt(this.state.backup_period, 10),\n path: this.state.backup_path,\n },\n jsonlOptions: {\n autoCompress: {\n sizeFactor: parseInt(this.state.jsonlOptions_autoCompress_sizeFactor, 10),\n sizeFactorMinimumSize: parseInt(this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize, 10),\n },\n throttleFS: {\n intervalMs: parseInt(this.state.jsonlOptions_throttleFS_intervalMs, 10),\n maxBufferedCommands: parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands, 10),\n },\n }\n };\n\n if (settings.jsonlOptions.autoCompress.sizeFactor < 2) {\n settings.jsonlOptions.autoCompress.sizeFactor = 2;\n }\n\n if (settings.jsonlOptions.autoCompress.sizeFactorMinimumSize < 0) {\n settings.jsonlOptions.autoCompress.sizeFactorMinimumSize = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.intervalMs < 0) {\n settings.jsonlOptions.throttleFS.intervalMs = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.maxBufferedCommands < 0) {\n settings.jsonlOptions.throttleFS.maxBufferedCommands = 0;\n }\n\n this.props.onChange(settings);\n }\n\n renderWarning() {\n if (this.state.showWarningDialog) {\n return <DialogConfirm\n title={this.props.t('Please confirm')}\n text={this.props.t('switch_db_note')}\n onClose={result => {\n if (result) {\n let port;\n\n if (this.state.toConfirmType === 'redis') {\n port = 6379;\n } else {\n port = 9001;\n }\n this.setState({type: this.state.toConfirmType, showWarningDialog: false, port},\n () => this.onChange());\n } else {\n this.setState({showWarningDialog: false});\n }\n }}\n />\n } else {\n return null;\n }\n }\n\n render() {\n return <Paper className={ this.props.classes.paper }>\n {this.renderWarning()}\n <Grid item className={Utils.clsx(this.props.classes.gridSettings, this.props.classes.dangerZone)}>\n <h3 className={this.props.classes.dangerZoneHeader} title={this.props.t('Invalid settings in these fields could lead to dead host')}>{this.props.t('Danger zone')}</h3>\n <p className={this.props.classes.warning}>{this.props.t('base_settings_hint')}</p>\n <Grid container direction=\"column\">\n <Grid item>\n <Tooltip title={this.props.t('switch_db_note')}>\n <FormControl className={this.props.classes.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Type')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.type}\n onChange={e => {\n if (e.target.value !== this.state.originalDBType) {\n this.setState({ toConfirmType: e.target.value, showWarningDialog: true });\n } else {\n let port;\n\n if (e.target.value === 'redis') {\n port = 6379;\n } else {\n port = 9001;\n }\n this.setState({type: e.target.value, port},\n () => this.onChange());\n }\n }}\n >\n <MenuItem value=\"jsonl\">JSON Lines</MenuItem>\n <MenuItem value=\"file\">{this.props.t('File')}</MenuItem>\n <MenuItem value=\"redis\">Redis</MenuItem>\n </Select>\n </FormControl>\n </Tooltip>\n </Grid>\n\n <Grid item style={{ paddingLeft: 8 }}>\n <FormControlLabel\n control={\n <Switch\n checked={this.state.textIP}\n onChange={e => this.setState({ textIP: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('IP is domain or more than one address')}\n />\n </Grid>\n\n <Grid item>\n {this.state.textIP ?\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.host}\n type=\"text\"\n onChange={e => this.setState({ host: e.target.value }, () => this.onChange())}\n label={this.props.t('Bind IP address')}\n helperText={this.props.t('You can enter more than one address divided by comma')}\n />\n :\n <FormControl className={this.props.classes.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Bind IP address')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.host}\n onChange={e => this.setState({ host: e.target.value }, () => this.onChange())}\n >\n { this.state.IPs.map(ip => <MenuItem key={ip} value={ip}>{ip === '0.0.0.0' ? `0.0.0.0 [${ this.props.t('All addresses') }]` : ip}</MenuItem>) }\n </Select>\n </FormControl>\n }\n </Grid>\n\n <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.port}\n type=\"number\"\n min={1}\n max={65535}\n onChange={e => this.setState({ port: e.target.value }, () => this.onChange())}\n label={this.props.t('Port')}\n />\n </Grid>\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.dataDir}\n helperText={this.props.t('Optional. Always relative to iobroker.js-controller/')}\n onChange={e => this.setState({ dataDir: e.target.value }, () => this.onChange())}\n label={this.props.t('Directory path')}\n />\n </Grid> : null}\n\n <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.options_auth_pass}\n type=\"password\"\n helperText={this.props.t('Optional')}\n inputProps={{\n autoComplete: 'new-password',\n form: {\n autoComplete: 'off',\n },\n }}\n autoComplete=\"off\"\n onChange={e => this.setState({ options_auth_pass: e.target.value }, () => this.onChange())}\n label={this.state.type === 'redis' ? this.props.t('Redis password') : this.props.t('Connection password')}\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid item className={this.props.classes.gridSettings}>\n <Grid container direction=\"column\">\n {this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.connectTimeout}\n helperText={this.props.t('ms')}\n type=\"number\"\n min={200}\n onChange={e => this.setState({ connectTimeout: e.target.value }, () => this.onChange())}\n label={this.props.t('Connect timeout')}\n />\n </Grid> : null}\n\n { this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid item>\n <FormControl component=\"fieldset\" variant=\"standard\" className={this.props.classes.controlItem}>\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.noFileCache}\n onChange={e => this.setState( { noFileCache: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t(`No file cache`)}\n />\n </FormGroup>\n <FormHelperText>{this.props.t('Always read files from disk and do not cache them in RAM. Used for debugging.')}</FormHelperText>\n </FormControl>\n </Grid> : null}\n\n {this.state.type === 'file' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.writeFileInterval}\n helperText={this.props.t('How often the data from RAM will be saved on disk in ms')}\n type=\"number\"\n min={200}\n onChange={e => this.setState({ writeFileInterval: e.target.value }, () => this.onChange())}\n label={this.props.t('Store file interval')}\n />\n </Grid> : null }\n\n { this.state.type === 'redis' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.options_retry_max_delay}\n type=\"number\"\n helperText={this.props.t('Maximum delay between connection attempts')}\n onChange={e => this.setState({ options_retry_max_delay: e.target.value }, () => this.onChange())}\n label={this.props.t('Retry maximum delay')}\n />\n </Grid> : null }\n\n { this.state.type === 'redis' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.options_retry_max_count}\n type=\"number\"\n helperText={this.props.t('Maximum number of connection retries')}\n onChange={e => this.setState({ options_retry_max_count: e.target.value }, () => this.onChange())}\n label={this.props.t('Retry maximum count')}\n />\n </Grid> : null }\n\n { this.state.type === 'redis' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.options_db}\n type=\"number\"\n helperText={this.props.t('Used for sentinels')}\n onChange={e => this.setState({ options_db: e.target.value }, () => this.onChange())}\n label={this.props.t('DB number')}\n />\n </Grid> : null }\n\n { this.state.type === 'redis' ? <Grid item>\n <FormControl className={this.props.classes.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Family number')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.options_family}\n onChange={e => this.setState({ options_family: e.target.value }, () => this.onChange())}\n >\n <MenuItem value={0}>auto</MenuItem>\n <MenuItem value={4}>IPv4</MenuItem>\n <MenuItem value={6}>IPv6</MenuItem>\n </Select>\n <FormHelperText>{this.props.t('Used for sentinels')}</FormHelperText>\n </FormControl>\n </Grid> : null }\n\n {this.state.type === 'jsonl' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.jsonlOptions_autoCompress_sizeFactor}\n type=\"number\"\n inputProps={{ min: 2 }}\n helperText={this.props.t('The JSONL DB is append-only and will contain unnecessary entries after a while.')}\n onChange={e => this.setState({ jsonlOptions_autoCompress_sizeFactor: e.target.value }, () => this.onChange())}\n label={this.props.t('Auto-compress size factor')}\n />\n </Grid> : null}\n\n {this.state.type === 'jsonl' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize}\n type=\"number\"\n inputProps={{ min: 0 }}\n helperText={this.props.t('It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize')}\n onChange={e => this.setState({ jsonlOptions_autoCompress_sizeFactorMinimumSize: e.target.value }, () => this.onChange())}\n label={this.props.t('Auto-compress size factor minimum size')}\n />\n </Grid> : null}\n\n {this.state.type === 'jsonl' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.jsonlOptions_throttleFS_intervalMs}\n type=\"number\"\n inputProps={{ min: 0 }}\n helperText={this.props.t('Write to the database file no more than every X milliseconds')}\n onChange={e => this.setState({ jsonlOptions_throttleFS_intervalMs: e.target.value }, () => this.onChange())}\n label={this.props.t('Minimal write interval')}\n />\n </Grid> : null}\n\n {this.state.type === 'jsonl' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.jsonlOptions_throttleFS_maxBufferedCommands}\n type=\"number\"\n inputProps={{ min: 0 }}\n helperText={this.props.t('Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash')}\n onChange={e => this.setState({ jsonlOptions_throttleFS_maxBufferedCommands: e.target.value }, () => this.onChange())}\n label={this.props.t('Maximum changes before write')}\n />\n </Grid> : null}\n\n {this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid item>\n <FormControl component=\"fieldset\" variant=\"standard\" className={this.props.classes.controlItem}>\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.backup_disabled}\n onChange={e => this.setState( { backup_disabled: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t(`No on-the-fly backup`)}\n />\n </FormGroup>\n <FormHelperText>{this.props.t('By every write the backup of object.json will be created.')}</FormHelperText>\n </FormControl>\n </Grid> : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.backup_files}\n type=\"number\"\n helperText={this.props.t('Minimal number of backup files, after the deletion will be executed according to the backup time settings')}\n onChange={e => this.setState({ backup_files: e.target.value }, () => this.onChange())}\n label={this.props.t('Number of files')}\n />\n </Grid> : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.backup_hours}\n type=\"number\"\n helperText={this.props.t('All backups older than these hours will be deleted, but only if the number of files is greater than of the files number')}\n onChange={e => this.setState({ backup_hours: e.target.value }, () => this.onChange())}\n label={this.props.t('Backup hours')}\n />\n </Grid> : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.backup_period}\n type=\"number\"\n helperText={this.props.t('By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0')}\n onChange={e => this.setState({ backup_period: e.target.value }, () => this.onChange())}\n label={this.props.t('How often')}\n />\n </Grid> : null}\n\n {(this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.backup_path}\n helperText={this.props.t('Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place.')}\n onChange={e => this.setState({ backup_path: e.target.value }, () => this.onChange())}\n label={this.props.t('Path')}\n />\n </Grid> : null}\n </Grid>\n </Grid>\n </Paper>;\n }\n}\n\nBaseSettingsObjects.propTypes = {\n t: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n settings: PropTypes.object.isRequired,\n currentHost: PropTypes.string,\n};\n\nexport default withWidth()(withStyles(styles)(BaseSettingsObjects));\n","import { createRef, Component } from 'react';\nimport {withStyles} from '@mui/styles';\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport Grid from '@mui/material/Grid';\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport Select from '@mui/material/Select';\nimport TextField from '@mui/material/TextField';\nimport MenuItem from '@mui/material/MenuItem';\nimport Tooltip from '@mui/material/Tooltip';\nimport FormControl from '@mui/material/FormControl';\nimport Paper from '@mui/material/Paper';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport Switch from '@mui/material/Switch';\n\nimport DialogConfirm from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport FormGroup from '@mui/material/FormGroup';\n\nconst styles = theme => ({\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: theme.spacing(1),\n },\n controlItem: {\n width: 400,\n marginBottom: theme.spacing(2),\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n dangerZone: {\n backgroundColor: 'rgba(255, 165, 0, 0.05)',\n border: '2px solid rgba(255, 165, 0)',\n marginBottom: theme.spacing(1),\n },\n dangerZoneHeader: {\n background: 'rgba(255, 165, 0)',\n color: '#FFF',\n paddingLeft: theme.spacing(2),\n paddingTop: 4,\n paddingBottom: 4,\n marginTop: -1,\n marginLeft: -1,\n },\n warning: {\n padding: 8,\n fontSize: 14,\n color: theme.palette.mode === 'dark' ? '#ffa500' : '#b17200'\n }\n});\n\nconst DEFAULT_JSONL_OPTIONS = {\n autoCompress: {\n sizeFactor: 2,\n sizeFactorMinimumSize: 25000\n },\n throttleFS: {\n intervalMs: 60000,\n maxBufferedCommands: 1000\n }\n};\n\nclass BaseSettingsObjects extends Component {\n constructor(props) {\n super(props);\n\n const settings = this.props.settings || {};\n settings.options = settings.options || {\n auth_pass: '',\n retry_max_delay: 2000,\n retry_max_count: 19,\n db: 0,\n family: 0,\n };\n settings.backup = settings.backup || {\n disabled: false,\n files: 24,\n hours: 48,\n period: 120,\n path: '',\n };\n settings.jsonlOptions = settings.jsonlOptions || DEFAULT_JSONL_OPTIONS;\n settings.jsonlOptions.autoCompress = settings.jsonlOptions.autoCompress || DEFAULT_JSONL_OPTIONS.autoCompress;\n settings.jsonlOptions.throttleFS = settings.jsonlOptions.throttleFS || DEFAULT_JSONL_OPTIONS.throttleFS;\n\n this.state = {\n type: settings.type || 'file',\n host: Array.isArray(settings.host) ? settings.host.join(',') : (settings.host || '127.0.0.1'),\n port: settings.port || 9000,\n connectTimeout: settings.connectTimeout || 2000,\n writeFileInterval: settings.writeFileInterval || 5000,\n dataDir: settings.dataDir || '',\n options_auth_pass: settings.options.auth_pass || settings.pass || '',\n options_retry_max_delay: settings.options.retry_max_delay || 2000,\n options_retry_max_count: settings.options.retry_max_count || 19,\n options_db: settings.options.db || 0,\n options_family: settings.options.family || 0,\n backup_disabled: settings.backup.disabled || false,\n backup_files: settings.backup.files || 24,\n backup_hours: settings.backup.hours || 48,\n backup_period: settings.backup.period || 120,\n backup_path: settings.backup.path || '',\n jsonlOptions_autoCompress_sizeFactor: settings.jsonlOptions.autoCompress.sizeFactor || 2,\n jsonlOptions_autoCompress_sizeFactorMinimumSize: settings.jsonlOptions.autoCompress.sizeFactorMinimumSize || 25000,\n jsonlOptions_throttleFS_intervalMs: settings.jsonlOptions.throttleFS.intervalMs || 60000,\n jsonlOptions_throttleFS_maxBufferedCommands: settings.jsonlOptions.throttleFS.maxBufferedCommands || 100,\n textIP: Array.isArray(settings.host) || (settings.host || '').match(/[^.\\d]/) || (settings.host || '').includes(','),\n\n IPs: ['0.0.0.0', '127.0.0.1'],\n loading: true,\n showWarningDialog: false,\n toConfirmType: '',\n originalDBType: settings.type || 'file',\n };\n\n this.focusRef = createRef();\n\n this.props.socket.getIpAddresses(this.props.currentHost)\n .then(_IPs => {\n const IPs = [..._IPs];\n !IPs.includes('0.0.0.0') && IPs.push('0.0.0.0');\n !IPs.includes('127.0.0.1') && IPs.push('127.0.0.1');\n this.setState({ IPs, loading: false });\n })\n }\n\n componentDidMount() {\n this.focusRef.current && this.focusRef.current.focus();\n }\n\n onChange() {\n const settings = {\n type: this.state.type,\n host: this.state.host,\n port: parseInt(this.state.port, 10),\n noFileCache: this.state.noFileCache,\n connectTimeout: parseInt(this.state.connectTimeout, 10),\n writeFileInterval: parseInt(this.state.writeFileInterval, 10),\n dataDir: this.state.dataDir,\n options: {\n auth_pass: this.state.options_auth_pass || null,\n retry_max_delay: parseInt(this.state.options_retry_max_delay, 10),\n retry_max_count: parseInt(this.state.options_retry_max_count, 10),\n db: parseInt(this.state.options_db, 10),\n family: parseInt(this.state.options_family, 10),\n },\n backup: {\n disabled: this.state.backup_disabled,\n files: parseInt(this.state.backup_files, 10),\n hours: parseInt(this.state.backup_hours, 10),\n period: parseInt(this.state.backup_period, 10),\n path: this.state.backup_path,\n },\n jsonlOptions: {\n autoCompress: {\n sizeFactor: parseInt(this.state.jsonlOptions_autoCompress_sizeFactor, 10),\n sizeFactorMinimumSize: parseInt(this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize, 10),\n },\n throttleFS: {\n intervalMs: parseInt(this.state.jsonlOptions_throttleFS_intervalMs, 10),\n maxBufferedCommands: parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands, 10),\n },\n }\n };\n\n if (settings.jsonlOptions.autoCompress.sizeFactor < 2) {\n settings.jsonlOptions.autoCompress.sizeFactor = 2;\n }\n\n if (settings.jsonlOptions.autoCompress.sizeFactorMinimumSize < 0) {\n settings.jsonlOptions.autoCompress.sizeFactorMinimumSize = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.intervalMs < 0) {\n settings.jsonlOptions.throttleFS.intervalMs = 0;\n }\n\n if (settings.jsonlOptions.throttleFS.maxBufferedCommands < 0) {\n settings.jsonlOptions.throttleFS.maxBufferedCommands = 0;\n }\n\n this.props.onChange(settings);\n }\n\n renderWarning() {\n if (this.state.showWarningDialog) {\n return <DialogConfirm\n title={this.props.t('Please confirm')}\n text={this.props.t('switch_db_note')}\n onClose={result => {\n if (result) {\n let port;\n\n if (this.state.toConfirmType === 'redis') {\n port = 6379;\n } else {\n port = 9000;\n }\n this.setState({type: this.state.toConfirmType, showWarningDialog: false, port},\n () => this.onChange());\n } else {\n this.setState({showWarningDialog: false});\n }\n }}\n />\n } else {\n return null;\n }\n }\n\n render() {\n return <Paper className={ this.props.classes.paper }>\n {this.renderWarning()}\n <Grid item className={ clsx(this.props.classes.gridSettings, this.props.classes.dangerZone) }>\n <h3 className={this.props.classes.dangerZoneHeader} title={this.props.t('Invalid settings in these fields could lead to dead host')}>{this.props.t('Danger zone')}</h3>\n <p className={this.props.classes.warning}>{this.props.t('base_settings_hint')}</p>\n <Grid container direction=\"column\">\n <Grid item>\n <Tooltip title={this.props.t('switch_db_note')}>\n <FormControl className={this.props.classes.controlItem} variant=\"standard\">\n <InputLabel>{ this.props.t('Type') }</InputLabel>\n <Select\n variant=\"standard\"\n value={ this.state.type }\n onChange={ e => {\n if (e.target.value !== this.state.originalDBType) {\n this.setState({ toConfirmType: e.target.value, showWarningDialog: true });\n } else {\n let port;\n\n if (e.target.value === 'redis') {\n port = 6379;\n } else {\n port = 9000;\n }\n this.setState({type: e.target.value, port},\n () => this.onChange());\n }\n }}\n >\n <MenuItem value=\"jsonl\">JSON Lines</MenuItem>\n <MenuItem value=\"file\">{ this.props.t('File') }</MenuItem>\n <MenuItem value=\"redis\">Redis</MenuItem>\n </Select>\n </FormControl>\n </Tooltip>\n </Grid>\n\n <Grid item style={{paddingLeft: 8}}>\n <FormControlLabel\n control={\n <Switch\n checked={this.state.textIP}\n onChange={e => this.setState({ textIP: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t('IP is domain or more than one address')}\n />\n </Grid>\n\n <Grid item>\n {this.state.textIP ?\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.host}\n type=\"text\"\n onChange={e => this.setState({host: e.target.value}, () => this.onChange())}\n label={this.props.t('Bind IP address')}\n helperText={this.props.t('You can enter more than one address divided by comma')}\n />\n :\n <FormControl className={this.props.classes.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Bind IP address')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.host}\n onChange={e => this.setState({host: e.target.value}, () => this.onChange())}\n >\n {this.state.IPs.map(ip => <MenuItem key={ip}\n value={ip}>{ip === '0.0.0.0' ? `0.0.0.0 [${this.props.t('All addresses')}]` : ip}</MenuItem>)}\n </Select>\n </FormControl>\n }\n </Grid>\n\n <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.port }\n type=\"number\"\n min={ 1 }\n max={ 65535 }\n onChange={ e => this.setState({ port: e.target.value }, () => this.onChange())}\n label={ this.props.t('Port') }\n />\n </Grid>\n\n { this.state.type === 'file' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.dataDir }\n helperText={ this.props.t('Optional. Always relative to iobroker.js-controller/') }\n onChange={ e => this.setState({ dataDir: e.target.value }, () => this.onChange())}\n label={ this.props.t('Directory path') }\n />\n </Grid> : null }\n\n <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.options_auth_pass }\n type=\"password\"\n helperText={ this.props.t('Optional') }\n inputProps={{\n autoComplete: 'new-password',\n form: {\n autoComplete: 'off',\n },\n }}\n autoComplete=\"off\"\n onChange={ e => this.setState({ options_auth_pass: e.target.value }, () => this.onChange())}\n label={ this.state.type === 'redis' ? this.props.t('Redis password') : this.props.t('Connection password') }\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid item className={ this.props.classes.gridSettings }>\n <Grid container direction=\"column\">\n { this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.connectTimeout }\n helperText={ this.props.t('ms') }\n type=\"number\"\n min={ 200 }\n onChange={ e => this.setState({ connectTimeout: e.target.value }, () => this.onChange())}\n label={ this.props.t('Connect timeout') }\n />\n </Grid> : null }\n\n { this.state.type === 'file' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.writeFileInterval }\n helperText={ this.props.t('How often the data from RAM will be saved on disk in ms') }\n type=\"number\"\n min={ 200 }\n onChange={ e => this.setState({ writeFileInterval: e.target.value }, () => this.onChange())}\n label={ this.props.t('Store file interval') }\n />\n </Grid> : null }\n\n { this.state.type === 'redis' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.options_retry_max_delay }\n type=\"number\"\n helperText={ this.props.t('Maximum delay between connection attempts') }\n onChange={ e => this.setState({ options_retry_max_delay: e.target.value }, () => this.onChange())}\n label={ this.props.t('Retry maximum delay') }\n />\n </Grid> : null }\n\n { this.state.type === 'redis' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.options_retry_max_count }\n type=\"number\"\n helperText={ this.props.t('Maximum number of connection retries') }\n onChange={ e => this.setState({ options_retry_max_count: e.target.value }, () => this.onChange())}\n label={ this.props.t('Retry maximum count') }\n />\n </Grid> : null }\n\n { this.state.type === 'redis' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.options_db }\n type=\"number\"\n helperText={ this.props.t('Used for sentinels') }\n onChange={ e => this.setState({ options_db: e.target.value }, () => this.onChange())}\n label={ this.props.t('DB number') }\n />\n </Grid> : null }\n\n { this.state.type === 'redis' ? <Grid item>\n <FormControl className={this.props.classes.controlItem} variant=\"standard\">\n <InputLabel>{ this.props.t('Family number') }</InputLabel>\n <Select\n variant=\"standard\"\n value={ this.state.options_family }\n onChange={ e => this.setState({ options_family: e.target.value}, () => this.onChange())}\n >\n <MenuItem value={0}>auto</MenuItem>\n <MenuItem value={4}>IPv4</MenuItem>\n <MenuItem value={6}>IPv6</MenuItem>\n </Select>\n <FormHelperText>{ this.props.t('Used for sentinels') }</FormHelperText>\n </FormControl>\n </Grid> : null }\n\n { this.state.type === 'jsonl' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.jsonlOptions_autoCompress_sizeFactor }\n type=\"number\"\n inputProps={{min: 2}}\n helperText={ this.props.t('The JSONL DB is append-only and will contain unnecessary entries after a while.') }\n onChange={ e => this.setState({ jsonlOptions_autoCompress_sizeFactor: e.target.value }, () => this.onChange())}\n label={ this.props.t('Auto-compress size factor') }\n />\n </Grid> : null }\n\n { this.state.type === 'jsonl' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize }\n type=\"number\"\n inputProps={{min: 0}}\n helperText={ this.props.t('It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize') }\n onChange={ e => this.setState({ jsonlOptions_autoCompress_sizeFactorMinimumSize: e.target.value }, () => this.onChange())}\n label={ this.props.t('Auto-compress size factor minimum size') }\n />\n </Grid> : null }\n\n { this.state.type === 'jsonl' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.jsonlOptions_throttleFS_intervalMs }\n type=\"number\"\n inputProps={{min: 0}}\n helperText={ this.props.t('Write to the database file no more than every X milliseconds') }\n onChange={ e => this.setState({ jsonlOptions_throttleFS_intervalMs: e.target.value }, () => this.onChange())}\n label={ this.props.t('Minimal write interval') }\n />\n </Grid> : null }\n\n { this.state.type === 'jsonl' ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.jsonlOptions_throttleFS_maxBufferedCommands }\n type=\"number\"\n inputProps={{min: 0}}\n helperText={ this.props.t('Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash') }\n onChange={ e => this.setState({ jsonlOptions_throttleFS_maxBufferedCommands: e.target.value }, () => this.onChange())}\n label={ this.props.t('Maximum changes before write') }\n />\n </Grid> : null }\n\n { this.state.type === 'file' || this.state.type === 'jsonl' ? <Grid item>\n <FormControl component=\"fieldset\" className={ this.props.classes.controlItem } variant=\"standard\">\n <FormGroup>\n <FormControlLabel\n control={\n <Checkbox\n checked={ this.state.backup_disabled }\n onChange={ e => this.setState( { backup_disabled: e.target.checked }, () => this.onChange()) }\n />\n }\n label={ this.props.t(`No on-the-fly backup`) }\n />\n </FormGroup>\n <FormHelperText>{ this.props.t('By every write the backup of object.json will be created.') }</FormHelperText>\n </FormControl>\n </Grid> : null }\n\n { (this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.backup_files }\n type=\"number\"\n helperText={ this.props.t('Minimal number of backup files, after the deletion will be executed according to the backup time settings') }\n onChange={ e => this.setState({ backup_files: e.target.value }, () => this.onChange())}\n label={ this.props.t('Number of files') }\n />\n </Grid> : null }\n\n { (this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.backup_hours }\n type=\"number\"\n helperText={ this.props.t('All backups older than these hours will be deleted, but only if the number of files is greater than of the files number') }\n onChange={ e => this.setState({ backup_hours: e.target.value }, () => this.onChange())}\n label={ this.props.t('Backup hours') }\n />\n </Grid> : null }\n\n { (this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.backup_period }\n type=\"number\"\n helperText={ this.props.t('By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0') }\n onChange={ e => this.setState({ backup_period: e.target.value }, () => this.onChange())}\n label={ this.props.t('How often') }\n />\n </Grid> : null }\n\n { (this.state.type === 'file' || this.state.type === 'jsonl') && !this.state.backup_disabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={ this.props.classes.controlItem }\n value={ this.state.backup_path }\n helperText={ this.props.t('Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place.') }\n onChange={ e => this.setState({ backup_path: e.target.value }, () => this.onChange())}\n label={ this.props.t('Path') }\n />\n </Grid> : null }\n </Grid>\n </Grid>\n </Paper>;\n }\n}\n\nBaseSettingsObjects.propTypes = {\n t: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n settings: PropTypes.object.isRequired,\n currentHost: PropTypes.string,\n};\n\nexport default withWidth()(withStyles(styles)(BaseSettingsObjects));\n","import { createRef, Component } from 'react';\nimport { withStyles } from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport Grid from '@mui/material/Grid';\nimport InputLabel from '@mui/material/InputLabel';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport Select from '@mui/material/Select';\nimport TextField from '@mui/material/TextField';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport Button from '@mui/material/Button';\nimport MenuItem from '@mui/material/MenuItem';\nimport Toolbar from '@mui/material/Toolbar';\nimport FormControl from '@mui/material/FormControl';\nimport Paper from '@mui/material/Paper';\nimport Accordion from '@mui/material/Accordion';\nimport AccordionDetails from '@mui/material/AccordionDetails';\nimport AccordionSummary from '@mui/material/AccordionSummary';\nimport Typography from '@mui/material/Typography';\nimport Fab from '@mui/material/Fab';\n\n//Icons\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport IconPlus from '@mui/icons-material/Add';\nimport IconDelete from '@mui/icons-material/Delete';\nimport IconHttp from '@mui/icons-material/Language';\nimport IconFile from '@mui/icons-material/InsertDriveFile';\nimport IconSyslog from '@mui/icons-material/Computer';\nimport IconStream from '@mui/icons-material/Send';\nimport IconSeq from '../../assets/seq.png';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nconst styles = theme => ({\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n padding: theme.spacing(1),\n },\n gridSettings: {\n height: 'calc(100% - ' + theme.mixins.toolbar.minHeight + 'px)',\n width: '100%',\n overflow: 'auto'\n },\n controlItem: {\n width: 400,\n marginBottom: theme.spacing(2),\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n delButton: {\n position: 'absolute',\n top: 2,\n right: theme.spacing(6),\n },\n addButton: {\n marginRight: theme.spacing(1),\n },\n buttonIcon: {\n height: 24,\n },\n headingIcon: {\n height: 24,\n marginRight: theme.spacing(1),\n }\n});\n\nclass BaseSettingsLog extends Component {\n constructor(props) {\n super(props);\n\n const settings = this.props.settings || {};\n settings.transport = settings.transport || {};\n Object.keys(settings.transport).forEach(id => {\n if (settings.transport[id].type === 'file') {\n let multiplier = typeof settings.transport[id].maxSize === 'string' ? (settings.transport[id].maxSize.includes('k') ? 0.1 : (settings.transport[id].maxSize.includes('g') ? 10 : 1)) : 1;\n settings.transport[id].maxSize = (parseInt(settings.transport[id].maxSize, 10) || 0) * multiplier;\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].maxFiles = settings.transport[id].maxFiles || 0;\n } else if (settings.transport[id].type === 'syslog') {\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].host = settings.transport[id].host || '';\n settings.transport[id].port = settings.transport[id].port || 0;\n settings.transport[id].path = settings.transport[id].path || '';\n settings.transport[id].facility = settings.transport[id].facility || '';\n settings.transport[id].sysLogType = settings.transport[id].sysLogType || '';\n settings.transport[id].app_name = settings.transport[id].app_name || '';\n settings.transport[id].eol = settings.transport[id].eol || '';\n } else if (settings.transport[id].type === 'http') {\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].host = settings.transport[id].host || '';\n settings.transport[id].port = settings.transport[id].port || 0;\n settings.transport[id].path = settings.transport[id].path || '/';\n settings.transport[id].auth = settings.transport[id].auth || 'None';\n settings.transport[id].ssl = settings.transport[id].ssl || false;\n } else if (settings.transport[id].type === 'stream') {\n settings.transport[id].stream = settings.transport[id].stream || '';\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].silent = settings.transport[id].silent || false;\n settings.transport[id].eol = settings.transport[id].eol || '';\n } else if (settings.transport[id].type === 'seq') {\n settings.transport[id].level = settings.transport[id].level || '';\n settings.transport[id].serverUrl = settings.transport[id].serverUrl || '';\n settings.transport[id].apiKey = settings.transport[id].apiKey || '';\n settings.transport[id].eol = settings.transport[id].eol || '';\n }\n });\n\n this.state = {\n level: settings.level || 'info',\n maxDays: settings.maxDays || 7,\n noStdout: settings.noStdout || true,\n transport: settings.transport || {},\n expanded: [],\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount() {\n this.focusRef.current && this.focusRef.current.focus();\n }\n\n onChange() {\n const settings = {\n level: this.state.level,\n maxDays: parseInt(this.state.maxDays, 10),\n noStdout: this.state.noStdout,\n transport: {}\n };\n\n Object.keys(this.state.transport).forEach(id => {\n settings.transport[id] = JSON.parse(JSON.stringify(this.state.transport[id]));\n\n if (this.state.transport[id].type === 'file') {\n settings.transport[id].maxSize = parseInt(settings.transport[id].maxSize, 10) || null;\n if (settings.transport[id].maxSize) {\n // 'k', 'm', or 'g'\n settings.transport[id].maxSize = settings.transport[id].maxSize.toString() + 'm';\n }\n settings.transport[id].maxFiles = parseInt(settings.transport[id].maxFiles, 10) || null;\n } else if (this.state.transport[id].type === 'syslog') {\n !settings.transport[id].port && delete settings.transport[id].port;\n !settings.transport[id].path && delete settings.transport[id].path;\n !settings.transport[id].sysLogType && delete settings.transport[id].sysLogType;\n !settings.transport[id].app_name && delete settings.transport[id].app_name;\n !settings.transport[id].eol && delete settings.transport[id].eol;\n } else if (this.state.transport[id].type === 'http') {\n settings.transport[id].host = settings.transport[id].host || '';\n settings.transport[id].port = parseInt(settings.transport[id].port, 10) || 80;\n settings.transport[id].path = settings.transport[id].path || '/';\n settings.transport[id].auth = settings.transport[id].auth || '';\n settings.transport[id].ssl = settings.transport[id].ssl || false;\n } else if (this.state.transport[id].type === 'stream') {\n settings.transport[id].stream = settings.transport[id].stream || '';\n settings.transport[id].level = settings.transport[id].level || 'info';\n settings.transport[id].silent = settings.transport[id].silent || false;\n settings.transport[id].eol = settings.transport[id].eol || '';\n }\n });\n\n this.props.onChange(settings);\n }\n\n onDelete(id) {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n delete transport[id];\n this.setState({ transport }, () => this.onChange());\n }\n\n renderEnabled(name) {\n return <Grid item>\n <FormControlLabel\n className={this.props.classes.controlItem}\n control={\n <Checkbox\n checked={this.state.transport[name].enabled}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].enabled = e.target.checked;\n this.setState({ transport }, () => this.onChange())\n }}\n />\n }\n label={this.props.t(`Enabled`)}\n />\n </Grid>;\n }\n\n renderLogLevel(name) {\n return this.state.transport[name].enabled ? <Grid item>\n <FormControl className={this.props.classes.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Level')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.transport[name].level || '_'}\n renderValue={() => this.state.transport[name].level || this.props.t('default')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].level = e.target.value === '_' ? '' : e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n >\n <MenuItem value=\"_\">{this.props.t('default')}</MenuItem>\n <MenuItem value=\"silly\">silly</MenuItem>\n <MenuItem value=\"debug\">debug</MenuItem>\n <MenuItem value=\"info\">info</MenuItem>\n <MenuItem value=\"warn\">warn</MenuItem>\n <MenuItem value=\"error\">error</MenuItem>\n </Select>\n <FormHelperText>{this.props.t('Level of messages that this transport should log (default: level set on parent logger)')}</FormHelperText>\n </FormControl>\n </Grid> : null\n }\n\n renderSyslog(name) {\n return <Accordion key={name} expanded={this.state.expanded.includes(name)} onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />} style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}>\n <IconSyslog className={this.props.classes.headingIcon} />\n <Typography className={this.props.classes.heading}>{name}</Typography>\n <Fab size=\"small\" className={this.props.classes.delButton} onClick={() => this.onDelete(name)}><IconDelete /></Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid container direction=\"column\">\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].host}\n helperText={this.props.t('The host running syslogd, defaults to localhost')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].host = e.target.value;\n this.setState({ transport }, () => this.onChange())\n }}\n label={this.props.t('File name')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].port}\n type=\"number\"\n helperText={this.props.t('The port on the host that syslog is running on, defaults to syslogd\\'s default port(514/UDP).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].port = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Port')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <FormControl className={this.props.classes.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Protocol')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.transport[name].protocol}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].protocol = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n >\n <MenuItem value=\"udp4\">udp4</MenuItem>\n <MenuItem value=\"tcp4\">tcp4</MenuItem>\n <MenuItem value=\"unix\">unix</MenuItem>\n <MenuItem value=\"unix-connect\">unix-connect</MenuItem>\n </Select>\n </FormControl>\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].path}\n helperText={this.props.t('The path to the syslog dgram socket (i.e. /dev/log or /var/run/syslog for OS X).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].path = e.target.value;\n this.setState({ transport }, () => this.onChange())\n }}\n label={this.props.t('Path')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].facility}\n helperText={this.props.t('Syslog facility to use (Default: local0).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].facility = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Facility')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].localhost}\n helperText={this.props.t('Host to indicate that log messages are coming from (Default: localhost).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].localhost = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Log name')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].sysLogType}\n helperText={this.props.t('The type of the syslog protocol to use (Default: BSD).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].sysLogType = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('SysLog Type')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].app_name}\n helperText={this.props.t('The name of the application (Default: process.title).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].app_name = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Application name')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].eol}\n helperText={this.props.t('The end of line character to be added to the end of the message (Default: Message without modifications).')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].eol = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('End of line char')}\n />\n </Grid> : null}\n </Grid>\n </AccordionDetails>\n </Accordion>\n }\n\n renderFile(name) {\n return <Accordion key={name} expanded={this.state.expanded.includes(name)} onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}>\n <AccordionSummary style={{ background: 'rgba(128, 128, 128, 0.3)' }} expandIcon={<ExpandMoreIcon />}>\n <IconFile className={this.props.classes.headingIcon} />\n <Typography className={this.props.classes.heading}>{name}</Typography>\n <Fab size=\"small\" className={this.props.classes.delButton} onClick={() => this.onDelete(name)}><IconDelete /></Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid container direction=\"column\">\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].filename}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].filename = e.target.value;\n this.setState({ transport }, () => this.onChange())\n }}\n label={this.props.t('File name')}\n />\n </Grid> : null}\n\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].fileext}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].fileext = e.target.value;\n this.setState({ transport }, () => this.onChange())\n }}\n label={this.props.t('File extension')}\n />\n </Grid> : null}\n\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].maxSize}\n type=\"number\"\n helperText={this.props.t('MB')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].maxSize = e.target.value;\n this.setState({ transport }, () => this.onChange())\n }}\n label={this.props.t('Maximal size of one file')}\n />\n </Grid> : null}\n\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].maxFiles}\n type=\"number\"\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].maxFiles = e.target.value;\n this.setState({ transport }, () => this.onChange())\n }}\n label={this.props.t('Maximal number of files')}\n />\n </Grid> : null}\n </Grid>\n </AccordionDetails>\n </Accordion>\n }\n\n renderHttp(name) {\n return <Accordion key={name} expanded={this.state.expanded.includes(name)} onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />} style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}>\n <IconHttp className={this.props.classes.headingIcon} />\n <Typography className={this.props.classes.heading}>{name}</Typography>\n <Fab size=\"small\" className={this.props.classes.delButton} onClick={() => this.onDelete(name)}><IconDelete /></Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid container direction=\"column\">\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].host}\n helperText={this.props.t('Remote host of the HTTP logging endpoint')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].host = e.target.value;\n this.setState({ transport }, () => this.onChange())\n }}\n label={this.props.t('Host')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].port}\n type=\"number\"\n helperText={this.props.t('Remote port of the HTTP logging endpoint')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].port = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Port')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].path}\n helperText={this.props.t('Remote URI of the HTTP logging endpoint')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].path = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Path')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].auth}\n helperText={this.props.t('An object representing the username and password for HTTP Basic Auth')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].auth = e.target.value;\n this.setState({ transport }, () => this.onChange());\n }}\n label={this.props.t('Auth')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <FormControlLabel\n className={this.props.classes.controlItem}\n control={\n <Checkbox\n checked={this.state.transport[name].ssl}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].ssl = e.target.checked;\n this.setState({ transport }, () => this.onChange())\n }}\n />\n }\n label={this.props.t(`SSL`)}\n />\n </Grid> : null}\n </Grid>\n </AccordionDetails>\n </Accordion>\n }\n\n renderStream(name) {\n return <Accordion key={name} expanded={this.state.expanded.includes(name)} onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />} style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}>\n <IconStream className={this.props.classes.headingIcon} />\n <Typography className={this.props.classes.heading}>{name}</Typography>\n <Fab size=\"small\" className={this.props.classes.delButton} onClick={() => this.onDelete(name)}><IconDelete /></Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid container direction=\"column\">\n {this.renderEnabled(name)}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].stream}\n helperText={this.props.t('any Node.js stream. If an objectMode stream is provided then the entire info object will be written. Otherwise info[MESSAGE] will be written')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].stream = e.target.value;\n this.setState({ transport }, () => this.onChange())\n }}\n label={this.props.t('File name')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <FormControlLabel\n className={this.props.classes.controlItem}\n control={\n <Checkbox\n checked={this.state.transport[name].silent}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].silent = e.target.checked;\n this.setState({ transport }, () => this.onChange())\n }}\n />\n }\n label={this.props.t(`Silent`)}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].eol}\n helperText={this.props.t('Line-ending character to use. (default: os.EOL).)')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].eol = e.target.value;\n this.setState({ transport }, () => this.onChange())\n }}\n label={this.props.t('EOL')}\n />\n </Grid> : null}\n </Grid>\n </AccordionDetails>\n </Accordion>\n }\n\n renderSEQ(name) {\n return <Accordion key={name} expanded={this.state.expanded.includes(name)} onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(name);\n if (pos === -1) {\n expanded.push(name);\n } else {\n expanded.splice(pos, 1);\n }\n\n this.setState({ expanded });\n }}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />} style={{ position: 'relative', background: 'rgba(128, 128, 128, 0.3)' }}>\n <img className={this.props.classes.headingIcon} src={IconSeq} alt=\"seq\" />\n <Typography className={this.props.classes.heading}>{name}</Typography>\n <Fab size=\"small\" className={this.props.classes.delButton} onClick={() => this.onDelete(name)}><IconDelete /></Fab>\n </AccordionSummary>\n <AccordionDetails>\n <Grid container direction=\"column\">\n {this.renderEnabled(name)}\n {this.renderLogLevel(name)}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].serverUrl}\n helperText={this.props.t('The http(s) URL including port of the seq server. If you use HTTPS a real certificate is needed; self signed certs are ot accepted.')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].serverUrl = e.target.value;\n this.setState({ transport }, () => this.onChange())\n }}\n label={this.props.t('Server URL')}\n />\n </Grid> : null}\n {this.state.transport[name].enabled ? <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.transport[name].apiKey}\n helperText={this.props.t('The apiKey of the seq system')}\n onChange={e => {\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name].apiKey = e.target.value;\n this.setState({ transport }, () => this.onChange())\n }}\n label={this.props.t('API key')}\n />\n </Grid> : null}\n </Grid>\n </AccordionDetails>\n </Accordion>\n }\n\n add(type) {\n if (type === 'file') {\n let i = 1;\n\n // eslint-disable-next-line\n while (Object.keys(this.state.transport).find(id => id === type + i)) {\n i++;\n }\n const name = type + i;\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n filename: 'log/iobroker',\n fileext: '.log',\n maxSize: 0,\n maxFiles: 0\n };\n this.setState({ transport }, () => this.onChange());\n } else if (type === 'syslog') {\n let i = 1;\n // eslint-disable-next-line\n while (Object.keys(this.state.transport).find(id => id === type + i)) {\n i++;\n }\n const name = type + i;\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n host: '127.0.0.1',\n port: 0,\n protocol: 'udp4',\n path: '',\n facility: '',\n localhost: 'iobroker',\n sysLogType: '',\n app_name: '',\n eol: '',\n };\n this.setState({ transport }, () => this.onChange())\n } else if (type === 'http') {\n let i = 1;\n // eslint-disable-next-line\n while (Object.keys(this.state.transport).find(id => id === type + i)) {\n i++;\n }\n const name = type + i;\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n host: '127.0.0.1',\n port: 80,\n path: '/',\n auth: 'None',\n ssl: false,\n };\n this.setState({ transport }, () => this.onChange())\n } else if (type === 'stream') {\n let i = 1;\n // eslint-disable-next-line\n while (Object.keys(this.state.transport).find(id => id === type + i)) {\n i++;\n }\n const name = type + i;\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n stream: '/dev/null',\n level: 'info',\n silent: false,\n eol: '',\n };\n this.setState({ transport }, () => this.onChange())\n } else if (type === 'seq') {\n let i = 1;\n // eslint-disable-next-line\n while (Object.keys(this.state.transport).find(id => id === type + i)) {\n i++;\n }\n const name = type + i;\n const transport = JSON.parse(JSON.stringify(this.state.transport));\n transport[name] = {\n type,\n enabled: true,\n\n level: 'info',\n serverUrl: 'http://IP:PORT',\n apiKey: '',\n };\n this.setState({ transport }, () => this.onChange())\n }\n }\n\n render() {\n return <Paper className={this.props.classes.paper}>\n <Grid item className={this.props.classes.gridSettings}>\n <Grid container direction=\"column\">\n <Grid item>\n <FormControl className={this.props.classes.controlItem} variant=\"standard\">\n <InputLabel>{this.props.t('Level')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.level}\n onChange={e => this.setState({ level: e.target.value }, () => this.onChange())}\n >\n <MenuItem value=\"silly\">silly</MenuItem>\n <MenuItem value=\"debug\">debug</MenuItem>\n <MenuItem value=\"info\">info</MenuItem>\n <MenuItem value=\"warn\">warn</MenuItem>\n <MenuItem value=\"error\">error</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n <Grid item>\n <TextField\n variant=\"standard\"\n className={this.props.classes.controlItem}\n value={this.state.maxDays}\n helperText={this.props.t('Every day one file')}\n type=\"number\"\n onChange={e => this.setState({ maxDays: e.target.value }, () => this.onChange())}\n label={this.props.t('Maximum number of days')}\n />\n </Grid>\n <Grid item>\n <FormControlLabel\n className={this.props.classes.controlItem}\n control={\n <Checkbox\n checked={this.state.noStdout}\n onChange={e => this.setState({ noStdout: e.target.checked }, () => this.onChange())}\n />\n }\n label={this.props.t(`No stdout outputs`)}\n />\n </Grid>\n {Object.keys(this.state.transport).map(id => {\n switch (this.state.transport[id].type) {\n case 'syslog':\n return this.renderSyslog(id);\n\n case 'file':\n return this.renderFile(id);\n\n case 'http':\n return this.renderHttp(id);\n\n case 'stream':\n return this.renderStream(id);\n\n case 'seq':\n return this.renderSEQ(id);\n\n default:\n return null;\n }\n })}\n </Grid>\n </Grid>\n <Toolbar>\n <Button color=\"grey\" className={this.props.classes.addButton} variant=\"contained\" onClick={() => this.add('file')} startIcon={<IconPlus />}><IconFile className={this.props.classes.buttonIcon} />{this.props.t('File log')}</Button>\n <Button color=\"grey\" className={this.props.classes.addButton} variant=\"contained\" onClick={() => this.add('syslog')} startIcon={<IconPlus />}><IconSyslog className={this.props.classes.buttonIcon} />{this.props.t('Syslog')}</Button>\n <Button color=\"grey\" className={this.props.classes.addButton} variant=\"contained\" onClick={() => this.add('http')} startIcon={<IconPlus />}><IconHttp className={this.props.classes.buttonIcon} />{this.props.t('HTTP log')}</Button>\n <Button color=\"grey\" className={this.props.classes.addButton} variant=\"contained\" onClick={() => this.add('stream')} startIcon={<IconPlus />}><IconStream className={this.props.classes.buttonIcon} />{this.props.t('Stream log')}</Button>\n <Button color=\"grey\" className={this.props.classes.addButton} variant=\"contained\" onClick={() => this.add('seq')} startIcon={<IconPlus />}><img src={IconSeq} className={this.props.classes.buttonIcon} alt=\"seq\" />{this.props.t('SEQ log')}</Button>\n </Toolbar>\n </Paper>;\n }\n}\n\nBaseSettingsLog.propTypes = {\n t: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n settings: PropTypes.object.isRequired,\n currentHost: PropTypes.string,\n};\n\nexport default withWidth()(withStyles(styles)(BaseSettingsLog));\n","import { Component } from 'react';\nimport {withStyles} from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport AceEditor from 'react-ace';\nimport 'ace-builds/src-min-noconflict/mode-json';\nimport 'ace-builds/src-min-noconflict/worker-json';\nimport 'ace-builds/src-min-noconflict/theme-clouds_midnight';\nimport 'ace-builds/src-min-noconflict/theme-chrome';\nimport 'ace-builds/src-min-noconflict/ext-language_tools';\n\nimport Paper from '@mui/material/Paper';\n\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nconst styles = theme => ({\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'auto',\n padding: theme.spacing(1),\n },\n title: {\n width: '100%',\n height: 32,\n },\n divWithoutTitle: {\n width: '100%',\n height: 'calc(100% - ' + 32 + 'px)',\n border: '2px solid #00000000',\n },\n error: {\n border: '2px solid #FF0000',\n }\n\n});\n\nclass BaseSettingsPlugins extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n settings: JSON.stringify(this.props.settings || {}, null, 2),\n error: false,\n };\n }\n\n static getDerivedStateFromProps(props, state) {\n return null;\n }\n\n editorDidMount(editor, monaco) {\n editor.focus();\n }\n\n onChange(value) {\n const newState = {settings: value};\n try {\n const settings = JSON.parse(value);\n\n if (this.state.error) {\n newState.error = false;\n }\n\n this.setState(newState, () => this.props.onChange(settings));\n } catch(e) {\n newState.error = true;\n this.setState(newState);\n }\n }\n\n render() {\n return <Paper className={ this.props.classes.paper }>\n <div className={ this.props.classes.title }>{ this.props.t('For future use') }</div>\n <div className={ clsx(this.props.classes.divWithoutTitle, this.state.error && this.props.classes.error) }>\n <AceEditor\n mode=\"json\"\n width=\"100%\"\n height=\"100%\"\n theme={ this.props.themeName === 'dark' ? 'clouds_midnight' : 'chrome' }\n value={ this.state.settings }\n onChange={ newValue => this.onChange(newValue) }\n name=\"UNIQUE_ID_OF_DIV1\"\n fontSize={14}\n setOptions={{\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n enableSnippets: true\n }}\n editorProps={{ $blockScrolling: true }}\n />\n </div>\n </Paper>;\n }\n}\n\nBaseSettingsPlugins.propTypes = {\n t: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n settings: PropTypes.object.isRequired,\n themeName: PropTypes.string,\n};\n\nexport default withWidth()(withStyles(styles)(BaseSettingsPlugins));\n","import React, {Component} from 'react';\nimport {withStyles} from '@mui/styles';\nimport PropTypes from 'prop-types';\n\nimport Dialog from '@mui/material/Dialog';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport AppBar from '@mui/material/AppBar';\nimport Tab from '@mui/material/Tab';\nimport Tabs from '@mui/material/Tabs';\nimport Button from '@mui/material/Button';\nimport LinearProgress from '@mui/material/LinearProgress';\n\nimport ConfirmDialog from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport withWidth from '@iobroker/adapter-react-v5/Components/withWidth';\n\nimport BaseSettingsSystem from '../components/BaseSettings/BaseSettingsSystem';\nimport BaseSettingsMultihost from '../components/BaseSettings/BaseSettingsMultihost';\nimport BaseSettingsObjects from '../components/BaseSettings/BaseSettingsObjects';\nimport BaseSettingsStates from '../components/BaseSettings/BaseSettingsStates';\nimport BaseSettingsLog from '../components/BaseSettings/BaseSettingsLog';\nimport BaseSettingsPlugins from '../components/BaseSettings/BaseSettingsPlugins';\n\n// icons\nimport CheckIcon from '@mui/icons-material/Check';\nimport CloseIcon from '@mui/icons-material/Close';\n\nconst styles = theme => ({\n content: {\n height: 500,\n overflow: 'hidden',\n },\n tabPanel: {\n width: '100%',\n height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n overflow: 'auto',\n },\n selected: {\n color: theme.palette.mode === 'dark' ? '#FFF !important' : '#222 !important',\n }\n});\n\nclass BaseSettingsDialog extends Component {\n constructor(props) {\n super(props);\n this.state = {\n currentTab: 0,\n hasChanges: [],\n currentHost: this.props.currentHost,\n hosts: this.props.hosts,\n loading: true,\n confirmExit: false,\n showRestart: false,\n\n system: null,\n multihostService: null,\n objects: null,\n states: null,\n log: null,\n plugins: null,\n saving: false,\n };\n }\n\n componentDidMount() {\n this.getSettings(this.state.currentHost);\n }\n\n renderConfirmDialog() {\n if (this.state.confirmExit) {\n return <ConfirmDialog\n text={this.props.t('Discard unsaved changes?')}\n onClose={result =>\n this.setState({confirmExit: false}, () =>\n result && this.props.onClose())}\n />;\n } else {\n return null;\n }\n }\n\n renderRestartDialog() {\n if (this.state.showRestart) {\n return <ConfirmDialog\n title={this.props.t('Please confirm')}\n text={<><div>{this.props.t('Restart works only if controller started as system service.')}</div>\n <div>{this.props.t('Would you like to restart the controller for your changes to take effect?')}</div></>}\n ok={this.props.t('Restart')}\n cancel={this.props.t('No restart')}\n onClose={result =>\n this.setState({showRestart: false}, () => {\n if (result) {\n this.props.socket.restartController(this.props.currentHost)\n .then(() =>\n setTimeout(() => // reload admin\n window.location.reload(false), 500))\n .catch(e => window.alert(`Cannot restart: ${e}`));\n }\n\n this.props.onClose();\n })}\n />;\n } else {\n return null;\n }\n }\n\n getSettings(host) {\n this.props.socket.readBaseSettings(host || this.state.currentHost)\n .then(settings => {\n if (settings && settings.config) {\n delete settings.config.dataDirComment;\n this.originalSettings = JSON.parse(JSON.stringify(settings.config));\n settings.config.loading = false;\n this.setState(settings.config);\n }\n });\n }\n\n onSave(host) {\n const settings = {\n system: this.state.system,\n multihostService: this.state.multihostService,\n objects: this.state.objects,\n states: this.state.states,\n log: this.state.log,\n plugins: this.state.plugins,\n };\n\n // merge with some new settings, that may be not yet supported by Admin\n const newSettings = Object.assign({}, this.originalSettings, settings);\n\n this.setState({ saving: true }, () => {\n this.props.socket.writeBaseSettings(host || this.state.currentHost, newSettings)\n .then(() => {\n this.originalSettings = JSON.parse(JSON.stringify(settings));\n // ask about restart\n this.setState({ hasChanges: [], showRestart: true, saving: false });\n })\n .catch(error => {\n window.alert('Cannot save settings: ' + error);\n this.setState({ saving: false });\n });\n });\n }\n\n updateSettings(name, settings) {\n const hasChanges = [...this.state.hasChanges];\n const changed = JSON.stringify(this.originalSettings[name]) !== JSON.stringify(settings);\n\n const pos = hasChanges.indexOf(name);\n if (changed && pos === -1) {\n hasChanges.push(name);\n } else if (!changed && pos !== -1) {\n hasChanges.splice(pos, 1);\n }\n\n this.setState({[name]: settings, hasChanges});\n }\n\n renderSystem() {\n const name = 'system';\n return <BaseSettingsSystem\n settings={this.state[name]}\n t={this.props.t}\n currentHost={this.props.currentHost}\n onChange={settings =>\n this.updateSettings(name, settings)}\n />;\n }\n\n renderMultihost() {\n const name = 'multihostService';\n return <BaseSettingsMultihost\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={settings =>\n this.updateSettings(name, settings)}\n />;\n }\n\n renderObjects() {\n const name = 'objects';\n return <BaseSettingsObjects\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={settings =>\n this.updateSettings(name, settings)}\n />;\n }\n\n renderStates() {\n const name = 'states';\n return <BaseSettingsStates\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={settings =>\n this.updateSettings(name, settings)}\n />;\n }\n\n renderLog() {\n const name = 'log';\n return <BaseSettingsLog\n settings={this.state[name]}\n t={this.props.t}\n socket={this.props.socket}\n currentHost={this.props.currentHost}\n onChange={settings =>\n this.updateSettings(name, settings)}\n />;\n }\n\n renderPlugins() {\n const name = 'plugins';\n return <BaseSettingsPlugins\n settings={this.state[name]}\n t={this.props.t}\n themeName={this.props.themeName}\n onChange={settings =>\n this.updateSettings(name, settings)}\n />;\n }\n\n render() {\n return <Dialog\n className={this.props.classes.dialog}\n open={!0}\n onClose={() => false}\n fullWidth\n maxWidth=\"xl\"\n aria-labelledby=\"base-settings-dialog-title\"\n >\n {<DialogTitle id=\"base-settings-dialog-title\">{this.props.t('Host Base Settings')}: {this.props.currentHostName || this.props.currentHost}</DialogTitle>}\n <DialogContent className={this.props.classes.content}>\n <AppBar position=\"static\">\n <Tabs\n value={this.state.currentTab}\n onChange={(event, newTab) => this.setState({ currentTab: newTab })}\n aria-label=\"system tabs\"\n indicatorColor=\"secondary\"\n >\n <Tab label={this.props.t('System')} id={'system-tab'} aria-controls={'simple-tabpanel-0'} classes={{ selected: this.props.classes.selected }} />\n <Tab label={this.props.t('Multi-host')} id={'multihost-tab'} classes={{ selected: this.props.classes.selected }}\n aria-controls={'simple-tabpanel-1'} />\n <Tab label={this.props.t('Objects')} id={'objects-tab'} aria-controls={'simple-tabpanel-3'} classes={{ selected: this.props.classes.selected }} />\n <Tab label={this.props.t('States')} id={'states-tab'} aria-controls={'simple-tabpanel-4'} classes={{ selected: this.props.classes.selected }} />\n <Tab label={this.props.t('Log')} id={'log-tab'} aria-controls={'simple-tabpanel-5'} classes={{ selected: this.props.classes.selected }} />\n <Tab label={this.props.t('Plugins')} id={'plugins-tab'} aria-controls={'simple-tabpanel-6'} classes={{ selected: this.props.classes.selected }} />\n </Tabs>\n </AppBar>\n {this.state.loading ? <LinearProgress /> : null}\n {!this.state.loading && this.state.currentTab === 0 ?\n <div className={this.props.classes.tabPanel}>{this.renderSystem()}</div> : null}\n {!this.state.loading && this.state.currentTab === 1 ?\n <div className={this.props.classes.tabPanel}>{this.renderMultihost()}</div> : null}\n {!this.state.loading && this.state.currentTab === 2 ?\n <div className={this.props.classes.tabPanel}>{this.renderObjects()}</div> : null}\n {!this.state.loading && this.state.currentTab === 3 ?\n <div className={this.props.classes.tabPanel}>{this.renderStates()}</div> : null}\n {!this.state.loading && this.state.currentTab === 4 ?\n <div className={this.props.classes.tabPanel}>{this.renderLog()}</div> : null}\n {!this.state.loading && this.state.currentTab === 5 ?\n <div className={this.props.classes.tabPanel}>{this.renderPlugins()}</div> : null}\n {this.renderConfirmDialog()}\n {this.renderRestartDialog()}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={!this.state.hasChanges.length || this.state.saving}\n onClick={() => this.onSave()}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >{this.props.t('Save & Close')}</Button>\n <Button\n variant=\"contained\"\n color=\"grey\"\n disabled={this.state.saving}\n onClick={() => this.state.hasChanges.length ? this.setState({confirmExit: true}) : this.props.onClose()}\n startIcon={<CloseIcon />}\n >{this.state.hasChanges.length ? this.props.t('Cancel') : this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n }\n}\n\nBaseSettingsDialog.propTypes = {\n t: PropTypes.func,\n currentHost: PropTypes.string,\n currentHostName: PropTypes.string,\n hosts: PropTypes.array,\n lang: PropTypes.string,\n socket: PropTypes.object,\n themeName: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n};\n\nexport default withWidth()(withStyles(styles)(BaseSettingsDialog));","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { LinearProgress }from '@mui/material';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport ReloadIcon from '@mui/icons-material/Refresh';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nclass JsControllerUpdater extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n response: null,\n error: null,\n starting: true,\n };\n\n this.updating = false;\n\n this.textareaRef = React.createRef();\n\n this.link = `${window.location.protocol}//${window.location.host}${window.location.pathname}`;\n }\n\n setUpdating(updating) {\n if (this.updating !== updating) {\n this.updating = updating;\n this.props.onUpdating(updating);\n }\n }\n\n componentDidMount() {\n // send update command to js-controller\n this.props.socket.getRawSocket().emit('sendToHost', this.props.hostId, 'upgradeController', {\n version: this.props.version,\n adminInstance: parseInt(this.props.adminInstance.split('.').pop(), 10),\n }, result => {\n if (result.result) {\n this.setUpdating(true);\n this.intervall = setInterval(() => this.checkStatus(), 1000); // poll every second\n\n this.startTimeout = setTimeout(() => {\n this.startTimeout = null;\n this.setState({ starting: false });\n }, 10000); // give 10 seconds to controller to start update\n } else {\n this.setState({ error: I18n.t('Not updatable'), starting: false });\n this.setUpdating(false);\n }\n });\n }\n\n componentWillUnmount() {\n this.intervall && clearInterval(this.intervall);\n this.intervall = null;\n\n this.startTimeout && clearTimeout(this.startTimeout);\n this.startTimeout = null;\n }\n\n checkStatus() {\n // interface ServerResponse {\n // running: boolean; // If the update is still running\n // stderr: string[];\n // stdout: string[];\n // success?: boolean; // if installation process succeeded\n // }\n\n fetch(this.link)\n .then(res => res.json())\n .then(response => {\n // sometimes stderr has only one empty string in it\n if (response && response.stderr) {\n response.stderr = response.stderr.filter(line => line.trim());\n }\n if (response && !response.running && response.success && response.stdout) {\n response.stdout.push('');\n response.stdout.push('---------------------------------------------------');\n response.stdout.push(I18n.t('js-controller was successfully updated to %s', this.props.version));\n } else if (response?.stdout) {\n response.stdout.unshift('');\n response.stdout.unshift('---------------------------------------------------');\n response.stdout.unshift(I18n.t('updating js-controller to %s...', this.props.version));\n }\n this.setState({ response, error: null }, () => {\n if (response && !response.running) {\n this.setUpdating(false);\n this.intervall && clearInterval(this.intervall);\n this.intervall = null;\n } else if (response?.running) {\n this.setUpdating(true);\n }\n\n // scroll down\n if (this.textareaRef.current) {\n setTimeout(() => this.textareaRef.current.scrollTop = this.textareaRef.current.scrollHeight, 100);\n }\n });\n })\n .catch(e => {\n if (!this.state.starting) {\n this.setState({ error: e.toString() }, () => this.setUpdating(false));\n }\n });\n }\n\n render() {\n return <Dialog\n onClose={(e, reason) => {\n if (reason !== 'escapeKeyDown' && reason !== 'backdropClick') {\n this.props.onClose();\n }\n }}\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n >\n <DialogTitle>{I18n.t('Updating JS-Controller...')}</DialogTitle>\n <DialogContent style={{ height: 400, padding: '0 20px', overflow: 'hidden' }}>\n {(!this.state.response || this.state.response.running) && !this.state.error ? <LinearProgress /> : null}\n {this.state.response || this.state.error ? <textarea\n ref={this.textareaRef}\n style={{\n width: '100%',\n height: '100%',\n resize: 'none',\n background: this.props.themeName === 'dark' ? '#000' : '#fff',\n color: this.props.themeName === 'dark' ? '#EEE' : '#111',\n boxSizing: 'border-box',\n fontFamily: 'Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace',\n border: this.state.response?.success ? '2px solid green' :\n (this.state.error || (this.state.response && !this.state.response.running && !this.state.response.success) ? '2px solid red' : undefined),\n }}\n value={this.state.error ? this.state.error : (\n this.state.response.stderr && this.state.response.stderr.length ?\n this.state.response.stderr.join('\\n') : this.state.response.stdout.join('\\n'))}\n readOnly\n /> : null}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={this.state.starting || (!this.state.error && this.state.response?.running)}\n onClick={() => {\n if (this.state.response?.success) {\n window.location.reload();\n }\n this.props.onClose();\n }}\n color={this.state.response?.success ? 'primary' : 'grey'}\n startIcon={this.state.response?.success ? <ReloadIcon /> : <CloseIcon />}\n >\n {this.state.response?.success ? I18n.t('Reload') : I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nJsControllerUpdater.propTypes = {\n socket: PropTypes.object.isRequired,\n hostId: PropTypes.string.isRequired,\n onClose: PropTypes.func.isRequired,\n version: PropTypes.string.isRequired,\n adminInstance: PropTypes.string.isRequired,\n onUpdating: PropTypes.func.isRequired,\n themeName: PropTypes.string,\n};\n\nexport default JsControllerUpdater;","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport semver from 'semver';\n\nimport { withStyles } from '@mui/styles';\n\nimport IconButton from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport { InputAdornment, LinearProgress, TextField } from '@mui/material';\nimport Skeleton from '@mui/material/Skeleton';\n\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport ViewListIcon from '@mui/icons-material/ViewList';\nimport ViewModuleIcon from '@mui/icons-material/ViewModule';\nimport CloseIcon from '@mui/icons-material/Close';\nimport BugReportIcon from '@mui/icons-material/BugReport';\nimport InfoIcon from '@mui/icons-material/Info';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport ErrorIcon from '@mui/icons-material/Error';\n\nimport { withWidth, Utils as UtilsCommon } from '@iobroker/adapter-react-v5';\n\nimport TabContainer from '../components/TabContainer';\nimport TabContent from '../components/TabContent';\nimport TabHeader from '../components/TabHeader';\nimport HostCard from '../components/Hosts/HostCard';\nimport HostRow from '../components/Hosts/HostRow';\nimport HostEdit from '../components/Hosts/HostEdit';\nimport JsControllerDialog from '../dialogs/JsControllerDialog';\nimport Utils from '../Utils';\nimport BaseSettingsDialog from '../dialogs/BaseSettingsDialog';\nimport SlowConnectionWarningDialog from '../dialogs/SlowConnectionWarningDialog';\nimport AdapterUpdateDialog from '../dialogs/AdapterUpdateDialog';\nimport JsControllerUpdater from '../dialogs/JsControllerUpdater';\n\nconst styles = () => ({\n grow: {\n flexGrow: 1,\n },\n cards: {\n display: 'flex',\n flexFlow: 'wrap',\n justifyContent: 'center',\n },\n tabHeaderWrapper: {\n height: 30,\n display: 'flex',\n margin: 7,\n },\n tabHeaderFirstItem: {\n width: 312,\n paddingLeft: 30,\n fontSize: 14,\n fontWeight: 600,\n alignSelf: 'center',\n },\n tabHeaderItem: {\n flex: 1,\n fontSize: 14,\n fontWeight: 600,\n alignSelf: 'center',\n },\n tabHeaderItemButton: {\n width: 144,\n fontSize: 14,\n fontWeight: 600,\n alignSelf: 'center',\n },\n widthButtons: {\n width: 240,\n },\n tabFlex: {\n display: 'flex',\n flex: 1,\n padding: '0 10px',\n },\n bold: {\n fontWeight: 'bold',\n },\n wrapperInfo: {\n display: 'flex',\n flexFlow: 'wrap',\n width: '100%',\n },\n marginRight: {\n marginRight: 'auto',\n },\n wrapperBlockItem: {\n display: 'flex',\n flexFlow: 'nowrap',\n whiteSpace: 'nowrap',\n margin: 10,\n },\n ul: {\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: 16,\n paddingRight: 8,\n },\n nowrap: {\n display: 'flex',\n flexFlow: 'nowrap',\n flex: 1,\n whiteSpace: 'nowrap',\n marginRight: 5,\n },\n '@media screen and (max-width: 1100px)': {\n hidden1100: {\n display: 'none !important',\n },\n },\n '@media screen and (max-width: 800px)': {\n hidden800: {\n display: 'none !important',\n },\n },\n '@media screen and (max-width: 600px)': {\n hidden600: {\n display: 'none !important',\n },\n },\n jsController: {\n fontSize: 12,\n opacity: 0.4,\n display: 'block',\n },\n});\n\nlet wordCache = {};\n\nconst formatInfo = {\n 'Uptime': Utils.formatSeconds,\n 'System uptime': Utils.formatSeconds,\n 'RAM': Utils.formatRam,\n 'Speed': Utils.formatSpeed,\n 'Disk size': Utils.formatBytes,\n 'Disk free': Utils.formatBytes\n};\n\nconst getHostDescriptionAll = (id, t, classes, hostsData) => {\n const hostData = hostsData ? hostsData[id] : null;\n if (!hostData) {\n return [<Skeleton />];\n }\n\n if (typeof hostData === 'string') {\n return hostData;\n }\n\n return [\n <ul className={classes.ul}>\n {\n hostData && typeof hostData === 'object' ? Object.keys(hostData).map(value =>\n <li key={value}>\n <span className={classes.black}>\n <span className={classes.bold}>{t(value)}: </span>\n {(formatInfo[value] ? formatInfo[value](hostData[value], t) : hostData[value] || '--')}\n </span>\n </li>) : <Skeleton />\n }\n </ul>,\n <div className={classes.wrapperInfo}>\n <div className={classes.marginRight}>\n {hostData && typeof hostData === 'object' ? Object.keys(hostData).map((value, idx) => idx < 5 &&\n <div className={classes.wrapperBlockItem} key={value}>\n <span className={UtilsCommon.clsx(classes.bold, classes.nowrap)}>{t(value)}: </span>\n {(formatInfo[value] ? formatInfo[value](hostData[value], t) : hostData[value] || '--')}\n </div>) : <Skeleton />}\n </div>\n <div className={classes.marginRight}>\n {hostData && typeof hostData === 'object' ? Object.keys(hostData).map((value, idx) => idx > 4 && idx < 10 &&\n <div className={classes.wrapperBlockItem} key={value}>\n <span className={UtilsCommon.clsx(classes.bold, classes.nowrap)}>{t(value)}: </span>\n {(formatInfo[value] ? formatInfo[value](hostData[value], t) : hostData[value] || '--')}\n </div>) : <Skeleton />}\n </div>\n <div className={classes.marginRight}>\n {hostData && typeof hostData === 'object' && Object.keys(hostData).map((value, idx) => idx > 10 &&\n <div\n className={classes.wrapperBlockItem} key={value}>\n {hostData && typeof hostData === 'object' ?\n <>\n <span className={UtilsCommon.clsx(classes.bold, classes.nowrap)}>{t(value)}: </span>\n {(formatInfo[value] ? formatInfo[value](hostData[value], t) : hostData[value] || '--')}\n </>\n :\n <Skeleton />\n }\n </div>)}\n </div>\n </div>\n ];\n}\n\nconst getLogLevelIcon = level => {\n if (level === 'debug') {\n return <BugReportIcon />;\n } else if (level === 'info') {\n return <InfoIcon />;\n } else if (level === 'warn') {\n return <WarningIcon />;\n } else if (level === 'error') {\n return <ErrorIcon />;\n }\n return null;\n};\n\n// every tab should get their data itself from server\nclass Hosts extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n viewMode: (window._localStorage || window.localStorage).getItem('Hosts.viewMode') === 'true',\n alive: {},\n hosts: [],\n repository: {},\n hostsData: {},\n filterText: (window._localStorage || window.localStorage).getItem('Hosts.filterText') || '',\n showSlowConnectionWarning: false,\n readTimeoutMs: SlowConnectionWarningDialog.getReadTimeoutMs(),\n hostUpdate: false,\n updateDialog: false,\n hostUpdateDialog: null,\n editDialog: { index: 0, dialogName: '' },\n baseSettingsDialog: { index: 0, dialogName: '' },\n };\n }\n // cache translations\n t = (word, arg1, arg2) => {\n if (arg1 !== undefined && arg2 !== undefined && !wordCache[`${word} ${arg1} ${arg2}`]) {\n wordCache[`${word} ${arg1} ${arg2}`] = this.props.t(word, arg1, arg2);\n } else\n if (arg1 !== undefined && !wordCache[`${word} ${arg1}`]) {\n wordCache[`${word} ${arg1}`] = this.props.t(word, arg1);\n } else if (!wordCache[word]) {\n wordCache[word] = this.props.t(word);\n }\n\n return arg1 !== undefined && arg2 !== undefined ? wordCache[`${word} ${arg1} ${arg2}`] : (arg1 !== undefined ? wordCache[`${word} ${arg1}`] : wordCache[word]);\n };\n\n componentDidMount() {\n this.readInfo()\n .then(() => {\n this.props.hostsWorker.registerHandler(this.updateHosts);\n this.props.hostsWorker.registerAliveHandler(this.updateHostsAlive);\n });\n }\n\n componentWillUnmount() {\n this.props.hostsWorker.unregisterHandler(this.updateHosts);\n this.props.hostsWorker.unregisterAliveHandler(this.updateHostsAlive);\n }\n\n getHostsData = (hosts, _alive) => {\n const promises = hosts.map(obj => {\n if (_alive[obj._id]) {\n return this.props.socket.getHostInfo(obj._id, null, this.state.readTimeoutMs)\n .catch(error => {\n console.error('Cannot get getHostInfo: ' + error);\n error.toString().includes('timeout') && this.setState({ showSlowConnectionWarning: true });\n return error;\n })\n .then(data =>\n ({ id: obj._id, data }));\n } else {\n return { id: obj._id, data: 'offline' };\n }\n });\n\n return new Promise(resolve =>\n Promise.all(promises)\n .then(results => {\n const _hostsData = {};\n results.forEach(res => _hostsData[res.id] = res.data);\n resolve(_hostsData);\n }));\n };\n\n readInfo = () => {\n return this.props.socket.getHosts(true, false, this.state.readTimeoutMs)\n .then(hosts => this.props.socket.getRepository(this.props.currentHost, { update: false }, false, this.state.readTimeoutMs)\n .then(async repository => {\n const alive = JSON.parse(JSON.stringify(this.state.alive));\n\n for (let h = 0; h < hosts.length; h++) {\n let aliveValue = await this.props.socket.getState(`${hosts[h]._id}.alive`);\n alive[hosts[h]._id] = !aliveValue ? false : !!aliveValue.val;\n }\n\n const hostsData = await this.getHostsData(hosts, alive);\n const newState = { alive, hosts, hostsData, repository };\n if (this.state.filterText && hosts.length <= 2) {\n newState.filterText = '';\n }\n this.setState(newState);\n })\n .catch(e => {\n window.alert('Cannot getRepository: ' + e);\n e.toString().includes('timeout') && this.setState({ showSlowConnectionWarning: true });\n }));\n };\n\n updateHosts = (hostId, obj) => {\n const hosts = JSON.parse(JSON.stringify(this.state.hosts));\n const alive = JSON.parse(JSON.stringify(this.state.alive));\n\n if (!Array.isArray(hostId)) {\n hostId = { id: hostId, obj, type: obj ? 'changed' : 'delete' };\n }\n\n Promise.all(hostId.map(async event => {\n const elementFind = hosts.find(host => host._id === event.id);\n if (elementFind) {\n const index = hosts.indexOf(elementFind);\n if (event.obj) {\n // updated\n hosts[index] = event.obj;\n } else {\n // deleted\n hosts.splice(index, 1);\n }\n } else {\n const state = await this.props.socket.getState(event.id + '.alive');\n alive[event.id] = state ? state.val : false;\n // new\n hosts.push(event.obj);\n }\n }))\n .then(() => {\n const newState = { hosts, alive };\n\n if (this.state.filterText && hosts.length <= 2) {\n newState.filterText = '';\n }\n\n this.setState(newState);\n });\n };\n\n updateHostsAlive = events => {\n let alive = JSON.parse(JSON.stringify(this.state.alive));\n let changed = false;\n\n events.forEach(event => {\n if (event.type === 'delete') {\n if (alive[event.id] !== undefined) {\n delete alive[event.id];\n changed = true;\n }\n } else if ((!!alive[event.id]) !== (!!event.alive)) {\n alive[event.id] = event.alive;\n changed = true;\n }\n });\n\n changed && this.setState({ alive });\n };\n\n getPanels() {\n const items = this.renderHosts()\n .filter(el => this.state.filterText ? el.name.toLowerCase().includes(this.state.filterText.toLowerCase()) : true)\n .map(el => this.state.viewMode ? el.renderCard : el.renderRow);\n\n return items.length ? items : this.t('All items are filtered out');\n }\n\n baseSettingsSettingsDialog() {\n if (!this.state.baseSettingsDialog.dialogName) {\n return null;\n }\n\n return <BaseSettingsDialog\n currentHost={this.state.baseSettingsDialog.dialogName}\n hosts={this.state.hosts}\n themeName={this.props.themeName}\n currentHostName={this.state.baseSettingsDialog.dialogName}\n key=\"base\"\n onClose={() => this.setState({baseSettingsDialog: {\n index: 0,\n dialogName: ''\n }})}\n lang={this.props.lang}\n // showAlert={(message, type) => this.showAlert(message, type)}\n socket={this.props.socket}\n // currentTab={currentTab}\n t={this.t}\n />\n }\n\n renderEditObjectDialog = () => {\n if (!this.state.editDialog.dialogName) {\n return null;\n }\n\n return <HostEdit\n obj={this.state.hosts[this.state.editDialog.index]}\n socket={this.props.socket}\n dialogName={this.state.editDialog.dialogName}\n t={this.t}\n expertMode={this.props.expertMode}\n onClose={obj => {\n this.setState({ editDialog: {\n index: 0,\n dialogName: ''\n }});\n if (obj) {\n this.props.socket.setObject(obj._id, obj)\n .then(_ => this.forceUpdate())\n .catch(e => alert('Cannot write object: ' + e));\n }\n }}\n />;\n };\n\n renderSlowConnectionWarning = () => {\n if (!this.state.showSlowConnectionWarning) {\n return null;\n } else {\n return <SlowConnectionWarningDialog\n readTimeoutMs={this.state.readTimeoutMs}\n t={this.t}\n onClose={async readTimeoutMs => {\n this.setState({ showSlowConnectionWarning: false });\n if (readTimeoutMs) {\n this.setState({ readTimeoutMs });\n await this.readInfo();\n }\n }}\n />;\n }\n };\n\n closeHostUpdateDialog = cb =>\n this.setState({ hostUpdateDialog: false, hostUpdate: null }, cb);\n\n openHostUpdateDialog = async (hostUpdate, cb) => {\n const updateAvailable = await this.props.socket.checkFeatureSupported('CONTROLLER_UI_UPGRADE');\n\n this.setState({\n hostUpdateDialog: true,\n hostUpdate,\n updateAvailable,\n }, cb);\n }\n\n\n getNews = (value, all = false) => {\n const adapter = this.state.repository['js-controller'];\n const installed = this.state.hosts.find(el => el.common.name === this.state.hostUpdate).common.installedVersion;\n const news = [];\n\n if (installed && adapter && adapter.news) {\n Object.keys(adapter.news).forEach(version => {\n try {\n if (semver.gt(version, installed) || all) {\n news.push({\n version,\n news: this.props.noTranslation ? adapter.news[version].en : adapter.news[version][this.props.lang] || adapter.news[version].en,\n });\n }\n } catch (e) {\n // ignore it\n console.warn(`Cannot compare \"${version}\" and \"${installed}\"`);\n }\n });\n }\n\n return news;\n };\n\n renderUpdateDialog() {\n if (!this.state.updateDialog) {\n return null;\n }\n\n if (this.state.updateAvailable) {\n return <JsControllerUpdater\n socket={this.props.socket}\n hostId={this.state.updateDialog}\n version={this.state.repository['js-controller'].version}\n onClose={() => this.setState({ updateDialog: false })}\n adminInstance={this.props.adminInstance}\n onUpdating={isUpdating => this.props.onUpdating(isUpdating)}\n themeName={this.props.themeName}\n />;\n }\n\n return <JsControllerDialog\n socket={this.props.socket}\n hostId={this.state.updateDialog}\n theme={this.props.theme}\n version={this.state.repository['js-controller'].version}\n onClose={() => this.setState({ updateDialog: false })}\n />;\n }\n\n hostUpdateDialogCb = () => {\n if (!this.state.hostUpdateDialog) {\n return null;\n }\n\n return <AdapterUpdateDialog\n open={!0}\n adapter={this.state.hostUpdate}\n adapterObject={this.state.repository['js-controller']}\n t={this.t}\n textUpdate={this.state.updateAvailable ? this.t('Start update') : this.t('Show instructions')}\n rightDependencies\n news={this.getNews()}\n toggleTranslation={this.props.toggleTranslation}\n noTranslation={this.props.noTranslation}\n onUpdate={async () => {\n const hostUpdate = this.state.hostUpdate;\n this.closeHostUpdateDialog(() =>\n this.setState({ updateDialog: hostUpdate }));\n }}\n onClose={() => this.closeHostUpdateDialog()}\n />;\n };\n\n renderHosts() {\n return this.state.hosts.map(({\n _id,\n common: { name, icon, color, title, installedVersion },\n native: { os: { platform } },\n }, idx) => ({\n renderCard: this.state.viewMode ? <HostCard\n systemConfig={this.props.systemConfig}\n key={_id}\n setEditDialog={() => this.setState({ editDialog: { index: idx, dialogName: name } })}\n setBaseSettingsDialog={() => this.setState({ baseSettingsDialog: { index: idx, dialogName: name }})}\n hostsWorker={this.props.hostsWorker}\n expertMode={this.props.expertMode}\n socket={this.props.socket}\n name={name}\n getLogLevelIcon={getLogLevelIcon}\n alive={this.state.alive[_id]}\n color={color}\n image={icon}\n title={title}\n os={platform}\n openHostUpdateDialog={() => this.openHostUpdateDialog(name)}\n description={getHostDescriptionAll(_id, this.t, this.props.classes, this.state.hostsData)[0]}\n hostData={this.state.hostsData[_id]}\n formatInfo={formatInfo}\n available={this.state.repository['js-controller']?.version || '-'}\n executeCommandRemove={() => this.props.executeCommand(`host remove ${name}`)}\n isCurrentHost={this.props.currentHost === _id}\n installed={installedVersion}\n events=\"- / -\"\n t={this.t}\n _id={_id}\n showAdaptersWarning={this.props.showAdaptersWarning}\n /> : null,\n renderRow: !this.state.viewMode ? <HostRow\n systemConfig={this.props.systemConfig}\n key={_id}\n setEditDialog={() => this.setState({ editDialog: { index: idx, dialogName: name } })}\n setBaseSettingsDialog={() => this.setState({ baseSettingsDialog: { index: idx, dialogName: name }})}\n hostsWorker={this.props.hostsWorker}\n expertMode={this.props.expertMode}\n socket={this.props.socket}\n name={name}\n alive={this.state.alive[_id]}\n color={color}\n image={icon}\n title={title}\n os={platform}\n getLogLevelIcon={getLogLevelIcon}\n openHostUpdateDialog={() => this.openHostUpdateDialog(name)}\n executeCommandRemove={() => this.props.executeCommand(`host remove ${name}`)}\n isCurrentHost={this.props.currentHost === _id}\n description={getHostDescriptionAll(_id, this.t, this.props.classes, this.state.hostsData)[1]}\n hostData={this.state.hostsData[_id]}\n formatInfo={formatInfo}\n available={this.state.repository['js-controller']?.version || '-'}\n installed={installedVersion}\n events=\"- / -\"\n t={this.t}\n _id={_id}\n showAdaptersWarning={this.props.showAdaptersWarning}\n /> : null,\n name\n }));\n }\n\n render() {\n const {\n classes,\n expertMode,\n } = this.props;\n\n if (!this.state.hosts.length) {\n return <LinearProgress />;\n }\n\n return <TabContainer>\n {this.renderEditObjectDialog()}\n {this.baseSettingsSettingsDialog()}\n {this.renderSlowConnectionWarning()}\n {this.hostUpdateDialogCb()}\n {this.renderUpdateDialog()}\n <TabHeader>\n <Tooltip title={this.t('Show / hide List')}>\n <IconButton size=\"large\" onClick={() => {\n (window._localStorage || window.localStorage).setItem('Hosts.viewMode', this.state.viewMode ? 'false' : 'true');\n this.setState({viewMode: !this.state.viewMode});\n }}>\n {this.state.viewMode ? <ViewModuleIcon /> : <ViewListIcon />}\n </IconButton>\n </Tooltip>\n <Tooltip title={this.t('Reload')}>\n <IconButton size=\"large\" onClick={() => this.forceUpdate()}>\n <RefreshIcon />\n </IconButton>\n </Tooltip>\n <div className={classes.grow} />\n {this.state.hosts.length > 2 ? <TextField\n variant=\"standard\"\n label={this.t('Filter')}\n style={{ margin: '5px 0' }}\n value={this.state.filterText}\n onChange={event => {\n (window._localStorage || window.localStorage).setItem('Hosts.viewMode', event.target.value);\n this.setState({filterText: event.target.value});\n }}\n InputProps={{\n endAdornment: this.state.filterText ? <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => {\n (window._localStorage || window.localStorage).setItem('Hosts.viewMode', '');\n this.setState({filterText: ''})\n }}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment> : null,\n }}\n /> : null}\n <div className={classes.grow} />\n </TabHeader>\n <TabContent overflow=\"auto\">\n <div className={this.state.viewMode ? classes.cards : ''}>\n {!this.state.viewMode &&\n <div className={classes.tabHeaderWrapper}>\n <div className={classes.tabHeaderFirstItem}>\n {this.t('Name:')}\n </div>\n <div className={classes.tabFlex}>\n {/*<div className={UtilsCommon.clsx(classes.tabHeaderItem, classes.hidden600)}>{t('Title:')}</div>*/}\n <div className={UtilsCommon.clsx(classes.tabHeaderItem, classes.hidden800)}>CPU</div>\n <div className={UtilsCommon.clsx(classes.tabHeaderItem, classes.hidden800)}>RAM</div>\n <div className={UtilsCommon.clsx(classes.tabHeaderItem, classes.hidden800)}>{this.t('Uptime')}</div>\n <div className={UtilsCommon.clsx(classes.tabHeaderItem, classes.hidden1100)}>{this.t('Available')}<div className={classes.jsController}>js-controller</div></div>\n <div className={UtilsCommon.clsx(classes.tabHeaderItem, classes.hidden1100)}>{this.t('Installed')}<div className={classes.jsController}>js-controller</div></div>\n <div className={UtilsCommon.clsx(classes.tabHeaderItem, classes.hidden600)}>{this.t('Events')}</div>\n <div className={UtilsCommon.clsx(classes.tabHeaderItemButton, expertMode && classes.widthButtons)} />\n </div>\n </div>}\n {this.getPanels()}\n </div>\n </TabContent>\n </TabContainer>;\n }\n}\n\nHosts.propTypes = {\n t: PropTypes.func,\n expertMode: PropTypes.bool,\n socket: PropTypes.object,\n systemConfig: PropTypes.object,\n executeCommand: PropTypes.func,\n hostsWorker: PropTypes.object,\n showAdaptersWarning: PropTypes.func,\n theme: PropTypes.object,\n noTranslation: PropTypes.bool,\n toggleTranslation: PropTypes.func,\n currentHost: PropTypes.string,\n adminInstance: PropTypes.string,\n onUpdating: PropTypes.func,\n};\n\nexport default withWidth()(withStyles(styles)(Hosts));"],"names":["cropperStyles","styles","theme","UploadImage","props","style","acceptedFiles","maxSize","t","onChange","file","reader","ext","base64","data","byte","disabled","classes","icon","removeIconFunc","accept","error","crop","uploadFile","anchorEl","cropHandler","errors","getRootProps","getInputProps","e","imageElement","el","boxShadow","boxShadowHover","grey","blue","amber","red","outputCache","inputCache","cpuCache","memCache","uptimeCache","diskFreeCache","diskSizeCache","diskWarningCache","arrayLogLevel","toggleClassName","name","classNames","pos","_classNames","HostCard","_id","alive","available","color","connected","connectedToHost","isCurrentHost","description","events","executeCommandRemove","expertMode","getLogLevelIcon","formatInfo","hidden","hostData","hostsWorker","image","installed","openHostUpdateDialog","setBaseSettingsDialog","setEditDialog","showAdaptersWarning","socket","systemConfig","openCollapse","setCollapse","refEvents","refWarning","refCpu","refMem","refUptime","eventsInputFunc","_","input","eventsOutputFunc","output","formatValue","state","unit","warningFunc","warning","cpuFunc","memFunc","uptimeFunc","d","h","calculateWarning","notifications","result","count","obj","nameTab","errorHost","setErrorHost","logLevelFunc","setLogLevelValue","setLogLevelValueSelect","notificationHandler","focused","setFocused","openDialogLogLevel","setOpenDialogLogLevel","logLevelValue","logLevelValueSelect","upgradeAvailable","Adapters","onCopy","text","value","showModal","titleModal","customModal","CustomModal","Build","MoreVert","Refresh","Edit","Cached","Delete","StyledBadge","HostRow","bool","event","HostEdit","newState","json","nameKey","cb","Button","Add","Tooltip","TextField","Dialog","DialogTitle","DialogContent","DialogActions","useStyles","removeChapter","remove","mustContain","lines","newLines","found","i","line","JsControllerDialog","hostId","version","onClose","readme","setReadme","location","setLocation","os","setOS","copyTextToClipboard","response","_readme","_os","_location","parts","chapter","button","small","IconCopy","renderReadme","node","inline","className","children","renderText","ExpandMore","Description","Close","BaseSettingsSystem","settings","Paper","Grid","FormControlLabel","Checkbox","withWidth","BaseSettingsMultihost","plainPass","encodedPass","DEFAULT_JSONL_OPTIONS","BaseSettingsObjects","_IPs","IPs","textIP","port","FormControl","InputLabel","Select","MenuItem","Switch","ip","FormGroup","FormHelperText","BaseSettingsLog","id","multiplier","transport","Accordion","expanded","AccordionSummary","Typography","Fab","AccordionDetails","type","Toolbar","BaseSettingsPlugins","editor","monaco","newValue","BaseSettingsDialog","Confirm","host","newSettings","hasChanges","changed","BaseSettingsStates","AppBar","Tabs","newTab","Tab","LinearProgress","Check","JsControllerUpdater","updating","res","reason","_a","wordCache","Utils","getHostDescriptionAll","hostsData","Skeleton","idx","level","BugReport","Info","Warning","Error","Hosts","word","arg1","arg2","hosts","_alive","promises","resolve","results","_hostsData","repository","aliveValue","elementFind","index","SlowConnectionWarningDialog","readTimeoutMs","hostUpdate","updateAvailable","all","adapter","news","AdapterUpdateDialog","items","isUpdating","title","installedVersion","platform","TabContainer","TabHeader","IconButton","ViewModule","ViewList","TabContent"],"sourceRoot":""}