{"version":3,"file":"shared.bundle.js","mappings":";oIAMA,QAAiC,oBAAXA,OAA0B,WAC/C,IAAKC,EACJ,IAAIA,EAAS,CAAC,EAKhB,IAAIC,EAAgB,CACnBC,KAAM,OACNC,KAAM,OACNC,UAAW,YACXC,gBAAiB,kBACjBC,WAAY,cAITC,EAAa,CAAC,EAClBA,EAAWN,EAAcC,MAAQ,CAAC,EAClCK,EAAWN,EAAcE,MAAQ,CAAC,EAClCI,EAAWN,EAAcG,WAAa,CAAC,EACvCG,EAAWN,EAAcI,iBAAmB,CAAC,EAC7CE,EAAWN,EAAcK,YAAc,CAAC,EAQxC,IAAIE,EAAgB,SAAuBC,EAAMC,GAGhD,IAAKH,EAAWE,GACf,OAAO,KAGR,IAAK,IAAIE,KAAQD,EAEhB,GAAKA,EAAWE,eAAeD,GAA/B,CAKA,GAAIJ,EAAWE,GAAME,GACpB,OAAO,KAIRJ,EAAWE,GAAME,GAAQD,EAAWC,EARpC,CAUF,EASIE,EAAe,SAAsBJ,EAAME,EAAMG,GAGpD,IAAKP,EAAWE,GACf,KAAM,sCAAwCA,EAAO,OAASA,EAAO,mEAAqEM,GAAWR,GAItJ,IAAK,YAAYS,KAAKL,GACrB,KAAM,mCAAqCA,EAAO,OAASA,EAAO,mGAInE,GAAIJ,EAAWE,GAAME,GACpB,KAAM,mCAAqCA,EAAO,OAASA,EAAO,sBAInEJ,EAAWE,GAAME,GAAQG,CAC1B,EAQIG,EAAe,SAAsBR,EAAME,GAG9C,IAAKJ,EAAWE,GACf,KAAM,sCAAwCA,EAAO,OAASA,EAAO,uEAAyEM,GAAWR,GAI1J,IAAKA,EAAWE,GAAME,GACrB,KAAM,mCAAqCA,EAAO,OAASA,EAAO,+DAAiEI,GAAWR,EAAWE,IAG1J,OAAOF,EAAWE,GAAME,EACzB,EAQIO,EAAQ,OAGRC,EAAW,CACd,KALU,OAMV,IAPS,MAQT,KATU,KAUV,OAXY,IAYZ,OAbY,IAcZ,YAfiB,EAgBjB,MAASD,EACT,KAVU,SAaPE,EAAS,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YAE5H,IAAK,IAAIC,KAAOF,EACf,GAAKA,EAASP,eAAeS,GAA7B,CAGA,IAAIC,EAAMH,EAASE,GA1BF,IA2BbC,GACHH,EAAa,GAAIG,EACjBH,EAAa,GAAIG,GACPA,IAAQJ,EAClBC,EAAY,EAAIG,EAEhBH,EAASE,EAAIE,OAAO,GAAGC,eAAiBF,EAEzCH,EAASE,EAAIG,eAAiBF,EAC9BH,EAASE,EAAIG,cAAgB,KAAOF,CAXpC,CAcD,IAAIG,EAAO,CACVC,OAAQ,EACRC,QAAS,EACTC,UAAW,EACXC,SAAU,EACVC,OAAQ,EACRC,SAAU,EACVC,OAAQ,GAGLC,EAAc,CACjB,EAAK,EACL,EAAK,IAqBFC,EAAS,SAAgBC,GAC5B,OAAOA,aAAgBC,IACxB,EAOIC,EAAS,SAAgBF,EAAMG,GAClC,IACIC,EAAOD,EADGH,EAAKK,SAGnB,OADAL,EAAKM,QAAQN,EAAKO,UAAYH,GACvBJ,CACR,EAEIQ,EAAgB,SAAuBR,EAAMG,GAChD,IAAIM,EAAYC,EAAYV,EAAKW,WAAa,EAAGX,EAAKY,eAGtD,OAFAT,EAAc,SAARA,EAAiBM,EAAYI,KAAKC,IAAI,EAAGD,KAAKE,IAAIN,EAAWN,IACnEH,EAAKM,QAAQH,GACNH,CACR,EAEIgB,EAAW,SAAkBhB,EAAMiB,GAItC,OAHAjB,EAAKgB,SAAS/B,EAAOiC,KAAI,SAAUC,GAClC,OAAOA,EAAE9B,aACV,IAAG+B,QAAQH,IACJjB,CACR,EAqBIqB,EAAa,SAAoBC,GACpC,OAAO,IAAIrB,KAAKA,KAAKsB,MAAQD,EAC9B,EAOIE,EAAW,SAAkBC,EAAGC,GACnC,OAAOD,EAAEE,iBAAmBD,EAAEC,cAC/B,EAOIjB,EAAc,SAAqBO,EAAOW,GAC7C,OAAO,IAAI3B,KAAK2B,EAAMX,EAAO,GAAGV,SACjC,EAEIsB,EAAc,SAAqBC,GAGtC,OAAIA,EAAIC,MAAM,iCACN,IAAI9B,KAAK6B,IAIjBA,IAA6B,IAAtBA,EAAIV,QAAQ,KAAc,IAAM,GAChCY,EAAY,IAAI/B,KAAK6B,IAC7B,EAEIE,EAAc,SAAqBhC,GACtC,OAAO,IAAIC,KAAKD,EAAKiC,UAAuC,IAA3BjC,EAAKkC,oBACvC,EAEIC,EAAe,SAAsBC,EAAcC,GAEtD,OAAOA,EAAWnB,KAAI,SAAUhC,GAE/B,IAAIoD,EAAuBtD,EAASE,GAEhCqD,EAAQ1B,KAAKC,IAAI,EAAGD,KAAK2B,MAAMJ,EAAeE,IAIlD,OAFAF,GAA8BE,EAEvBC,CACR,GACD,EAGIE,EAAW,SAAkBhB,EAAGC,EAAGW,GAGtC,IAAIK,EAAOhB,EAAID,EACXkB,GAAU,EACd,GAAID,EAAO,EAAG,CACbA,EAAOjB,EAAIC,EACX,IAAIkB,EAAO,CAAClB,EAAGD,GACfA,EAAImB,EAAK,GACTlB,EAAIkB,EAAK,GAETD,GAAU,CACX,CAGKN,IACJA,EAAa,CAAC,IAAK,IAAK,MAIzB,IAAIQ,EAASR,EAAWjB,QAAQ,KAC5ByB,GAAU,IAAiC,MAA3BR,EAAWQ,EAAS,IAAyC,MAA3BR,EAAWQ,EAAS,MACzER,EAAWQ,GAAQ3D,IAAM,KAG1B,IAAI4D,OAAS,EACTC,OAAkB,EAClBC,OAAS,EAETC,EAAgBZ,EAAWa,SAAS,KACpCC,EAAiBd,EAAWa,SAAS,MAErCC,GAAkBF,KAErBH,EAAS,IAAI7C,KAAKwB,EAAE2B,UAAYV,GAEhCK,EAAkBM,EAAaP,EAAQrB,GAEvCuB,EAASG,EAAiBtC,KAAK2B,MAAMO,GAAsD,GAAnClC,KAAK2B,MAAMO,EAAkB,IAErFL,EAAOI,EAAOM,UAAYE,EAAUC,EAAQ9B,GAAIuB,GAAQI,WAGzD,IAAII,EAASnB,EAAWnB,KAAI,SAAUhC,GAGrC,GAAY,MAARA,GAAuB,MAARA,EAAa,CAC/B,IAAIuE,EAAS5C,KAAKC,IAAI,EAAGD,KAAK2B,MAAMO,EAAkBjD,EAAYZ,KAElE,OADA6D,GAAmBU,EAAS3D,EAAYZ,GACjCuE,CACR,CAEA,IAAInB,EAAuBtD,EAASE,GAEhCqD,EAAQ1B,KAAKC,IAAI,EAAGD,KAAK2B,MAAME,EAAOJ,IAI1C,OAFAI,GAAcJ,EAEPC,CACR,IAEA,OAAOI,EAAUa,EAAOtC,KAAI,SAAUwC,GACrC,OAAOA,EAAI,GAAKA,EAAIA,CACrB,IAAKF,CACN,EAQIG,EAAW,WACd,IAAK,IAAIC,EAAOC,UAAUC,OAAQC,EAAOC,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAC5EF,EAAKE,GAAQJ,UAAUI,GAIxB,GAAuB,iBAAZF,EAAK,IAAsC,iBAAZA,EAAK,GAAiB,CAC/D,IAAK/E,EAAS+E,EAAK,IAClB,KAAM,IAAMA,EAAK,GAAK,2BAEvB,OAAOA,EAAK,GAAK/E,EAAS+E,EAAK,GAChC,CAGA,OAAIhE,EAAOgE,EAAK,IACRtB,EAASyB,WAAMC,EAAWJ,GAIX,iBAAZA,EAAK,IAAmBC,MAAMI,QAAQL,EAAK,IAC9C5B,EAAa+B,WAAMC,EAAWJ,GAG/B,IACR,EAKIM,EAAQ,WACX,OAAO,IAAIpE,IACZ,EAOIsD,EAAU,SAAevD,GAC5B,OAAO,IAAIC,KAAKD,EAAKoD,UACtB,EAQIE,EAAY,SAAmBtD,EAAMgD,GAExC,OADAhD,EAAKgB,SAAShB,EAAKW,WAAaqC,GACzBhD,CACR,EAQIqD,EAAe,SAAsB5B,EAAGC,GAE3C,IAAI4C,EAAuD,IAArC5C,EAAEd,cAAgBa,EAAEb,gBAAuBc,EAAEf,WAAac,EAAEd,YAC9EmC,EAASQ,EAAUC,EAAQ9B,GAAI6C,GAYnC,QAASA,GARL5C,EAAIoB,EAAS,GAENpB,EAAIoB,IAAWA,EADfQ,EAAUC,EAAQ9B,GAAI6C,EAAiB,KAIvC5C,EAAIoB,IADJQ,EAAUC,EAAQ9B,GAAI6C,EAAiB,GACdxB,IAIrC,EAMIyB,EAAY,SAAWC,GAE1B,MAAO,CACNC,QAAS,WAERD,EAAME,WAAY,EAEdF,EAAMG,OACTC,qBAAqBJ,EAAMG,OAGxBH,EAAMK,eACTL,EAAMK,cAAcC,aAGjBN,EAAMO,iBACTnH,OAAOoH,oBAAoB,SAAUR,EAAMO,iBAGxCP,EAAMS,MAAQT,EAAMS,KAAKC,YAC5BV,EAAMS,KAAKC,WAAWC,YAAYX,EAAMS,KAE1C,EAED,EAQGG,EAAS,SAAWZ,GACvB,IAAIS,EAAOpB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAKwB,SAASC,cAAc,QAClG9G,EAAOqF,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,KAgB/E,OAbAW,EAAMS,KAAOA,EACbT,EAAMe,QAAU,KAChBf,EAAME,WAAY,EAEdO,GAAQzG,IACXgG,EAAMS,KAAKO,UAAUC,IAAI,QAAUjH,GACnCgG,EAAMS,KAAKS,aAAa,YAAalH,IAGlCyG,GAAQA,EAAKU,QAAQC,SACxBpB,EAAMqB,OAASZ,EAAKU,QAAQC,OAAO7D,MAAM,sBAAwB,IAAI,IAAM,QAGrE,CAEN+D,SAAU,SAAkBC,GAC3B,IAAIC,EAAWnC,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,QAI9EW,EAAMS,MAAQT,EAAMS,MAAQT,EAAMS,KAAKC,aAI3B,SAAbc,GAWa,UAAbA,IAE+B,IAA9BD,EAAQE,WAAWnC,OACtBiC,EAAQG,YAAY1B,EAAMS,MAGU,IAA5Bc,EAAQI,SAASrC,QAAgBiC,EAAQE,WAAWnC,OAC3DiC,EAAQK,aAAa5B,EAAMS,KAAMc,EAAQE,WAAWF,EAAQE,WAAWnC,OAAS,IAI/EiC,EAAQK,aAAa5B,EAAMS,KAAMc,EAAQI,SAAS,KAI9B,iBAAbH,GACVD,EAAQK,aAAa5B,EAAMS,KAAMe,IAzB7BD,EAAQE,WAAWnC,QAAUiC,EAAQE,WAAWF,EAAQE,WAAWnC,OAAS,GAAGuC,WAAaC,KAAKC,UACpGR,EAAQK,aAAa5B,EAAMS,KAAMc,EAAQE,WAAWF,EAAQE,WAAWnC,OAAS,IAGhFiC,EAAQG,YAAY1B,EAAMS,MAuB7B,EAGD,EAOGuB,EAAU,SAAWhC,EAAOiC,GAI/B,OAFAjC,EAAMiC,WAAaA,EAEZ,CACNC,cAAe,SAAuBD,GACrCjC,EAAMiC,WAAaA,CACpB,EAED,EASGE,EAAS,SAAWnC,EAAOoC,EAAOC,EAAWC,GAC7C,MAAO,CACHC,KAAM,WAEF,IAAKvC,EAAMwC,MAAO,CACd,GAAIH,EAEcA,EAAUrC,IAGpByC,EAAIzC,GAGZ,OAAO,CACX,CAWA,OARAoC,EAAMpC,EAAOsC,GAGbG,EAAIzC,GAGJA,EAAMwC,OAAQ,GAEP,CACX,EAEP,EAEGC,EAAM,SAASA,EAAIzC,GACnB,IAAKA,EAAMyC,IAAK,CAEZ,IAAKzC,EAAMS,QAAUT,EAAMS,KAAKiC,aAAa,gBAAkB,IAAInF,MAAM,OAErE,YADAyC,EAAMyC,KAAM,GAKhB,IAAIE,EAAQvJ,OAAOwJ,iBAAiB5C,EAAMS,KAAM,MAEhDT,EAAMyC,KAAM,EACZzC,EAAM6C,QAAU,CACZC,gBAAiBC,SAASJ,EAAMK,iBAAiB,aAAc,IAEvE,CAGAhD,EAAM6C,QAAQI,eAAiBjD,EAAMS,KAAKC,WAAWwC,YAGrDlD,EAAM6C,QAAQM,aAAenD,EAAMS,KAAK2C,YAGxC,IAAIC,EAAchH,KAAKE,IAAIF,KAAKC,IAAI,EAAG0D,EAAM6C,QAAQI,eAAiBjD,EAAM6C,QAAQM,aAAenD,EAAM6C,QAAQC,iBAAkB,MAGxHzG,KAAKiH,IAAID,EAAcrD,EAAM6C,QAAQC,kBAGpC,IAEZ9C,EAAM6C,QAAQC,gBAAkBO,EAEhCrD,EAAMS,KAAKkC,MAAMY,SAAWvD,EAAM6C,QAAQC,gBAAkB,KAGxD9C,EAAM6C,QAAQM,aAAenD,EAAM6C,QAAQI,eAAiB,IAC5DO,uBAAsB,WAClB,OAAOf,EAAIzC,EACf,IAER,EAEIyD,EAAU,SAAWzD,GASxB,OAPAA,EAAMwC,OAAQ,EACdxC,EAAM0D,MAAQ,KACd1D,EAAM2D,iBAAmB,EACzB3D,EAAM4D,eAAiB,WACtB,OAAO5D,EAAM2D,kBAAoB,CAClC,EAEO,CACNE,MAAO,WACN7D,EAAMwC,OAAQ,EACdxC,EAAM0D,MAAQ,KACd1D,EAAM2D,iBAAmB,CAC1B,EACAG,OAAQ,SAAgBJ,GAGnBK,GAAM/D,EAAM0D,MAAOA,KAIvB1D,EAAM0D,MAAQA,EACd1D,EAAM2D,mBACN3D,EAAMwC,OAAQ,EACf,EAED,EAMGwB,EAAU,SAAWhE,GAExBA,EAAMO,gBAAkB,WACvBP,EAAMwC,OAAQ,CACf,EAEApJ,OAAO6K,iBAAiB,SAAUjE,EAAMO,gBACxC,EAEG2D,EAA4B,mBAAXC,QAAoD,iBAApBA,OAAOC,SAAwB,SAAUC,GAC5F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAyB,mBAAXF,QAAyBE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOI,UAAY,gBAAkBF,CAC3H,EAiIIG,GA3HiB,WACnB,SAASC,EAAWf,GAClBgB,KAAKhB,MAAQA,CACf,CAEA,SAASiB,EAAeC,GACtB,IAAIC,EAAOC,EAqBX,SAASC,EAAOrK,EAAKsK,GACnB,IACE,IAAIC,EAASL,EAAIlK,GAAKsK,GAClBtB,EAAQuB,EAAOvB,MAEfA,aAAiBe,EACnBS,QAAQC,QAAQzB,EAAMA,OAAO0B,MAAK,SAAUJ,GAC1CD,EAAO,OAAQC,EACjB,IAAG,SAAUA,GACXD,EAAO,QAASC,EAClB,IAEAK,EAAOJ,EAAOK,KAAO,SAAW,SAAUL,EAAOvB,MAErD,CAAE,MAAO6B,GACPF,EAAO,QAASE,EAClB,CACF,CAEA,SAASF,EAAOvL,EAAM4J,GACpB,OAAQ5J,GACN,IAAK,SACH+K,EAAMM,QAAQ,CACZzB,MAAOA,EACP4B,MAAM,IAER,MAEF,IAAK,QACHT,EAAMW,OAAO9B,GACb,MAEF,QACEmB,EAAMM,QAAQ,CACZzB,MAAOA,EACP4B,MAAM,KAKZT,EAAQA,EAAMY,MAGZV,EAAOF,EAAMnK,IAAKmK,EAAMG,KAExBF,EAAO,IAEX,CAEAJ,KAAKgB,QApEL,SAAchL,EAAKsK,GACjB,OAAO,IAAIE,SAAQ,SAAUC,EAASK,GACpC,IAAIG,EAAU,CACZjL,IAAKA,EACLsK,IAAKA,EACLG,QAASA,EACTK,OAAQA,EACRC,KAAM,MAGJX,EACFA,EAAOA,EAAKW,KAAOE,GAEnBd,EAAQC,EAAOa,EACfZ,EAAOrK,EAAKsK,GAEhB,GACF,EAqD0B,mBAAfJ,EAAIgB,SACblB,KAAKkB,YAASjG,EAElB,CAEsB,mBAAXwE,QAAyBA,OAAO0B,gBACzClB,EAAeJ,UAAUJ,OAAO0B,eAAiB,WAC/C,OAAOnB,IACT,GAGFC,EAAeJ,UAAUkB,KAAO,SAAUT,GACxC,OAAON,KAAKgB,QAAQ,OAAQV,EAC9B,EAEAL,EAAeJ,UAAUuB,MAAQ,SAAUd,GACzC,OAAON,KAAKgB,QAAQ,QAASV,EAC/B,EAEAL,EAAeJ,UAAUqB,OAAS,SAAUZ,GAC1C,OAAON,KAAKgB,QAAQ,SAAUV,EAChC,CAYF,CA/GqB,GA2HH,WAChB,SAASe,EAAiBC,EAAQC,GAChC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAM3G,OAAQ4G,IAAK,CACrC,IAAIC,EAAaF,EAAMC,GACvBC,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDC,OAAOC,eAAeR,EAAQG,EAAWzL,IAAKyL,EAChD,CACF,CAEA,OAAO,SAAUM,EAAaC,EAAYC,GAGxC,OAFID,GAAYX,EAAiBU,EAAYlC,UAAWmC,GACpDC,GAAaZ,EAAiBU,EAAaE,GACxCF,CACT,CACF,CAhBkB,IAwBdG,EAAWL,OAAOM,QAAU,SAAUb,GACxC,IAAK,IAAIE,EAAI,EAAGA,EAAI7G,UAAUC,OAAQ4G,IAAK,CACzC,IAAIY,EAASzH,UAAU6G,GAEvB,IAAK,IAAIxL,KAAOoM,EACVP,OAAOhC,UAAUtK,eAAe8M,KAAKD,EAAQpM,KAC/CsL,EAAOtL,GAAOoM,EAAOpM,GAG3B,CAEA,OAAOsL,CACT,EAoCIgB,EAAoB,SAAUC,GAChC,GAAIzH,MAAMI,QAAQqH,GAAM,CACtB,IAAK,IAAIf,EAAI,EAAGgB,EAAO1H,MAAMyH,EAAI3H,QAAS4G,EAAIe,EAAI3H,OAAQ4G,IAAKgB,EAAKhB,GAAKe,EAAIf,GAE7E,OAAOgB,CACT,CACE,OAAO1H,MAAM2H,KAAKF,EAEtB,EAEI1E,EAAO,SAAcvC,EAAOsC,GAC5B,IAAI8E,GAASpH,EAAMiC,YAAc,IAAIoF,SAEjB,UAAhBrH,EAAMqB,OACN+F,EAAME,UAGV,IAAI5D,EAAQlE,MAAMI,QAAQI,EAAM0D,OAAS1D,EAAM0D,MAAM2D,SAAoC,WAAzBnD,EAAQlE,EAAM0D,OAAsB6D,GAAMvH,EAAM0D,OAAS1D,EAAM0D,MAE/H0D,EAAMI,SAAQ,SAAUC,GACpB,IAAKA,EAAKC,UAAW,CAEjB,GADA1H,EAAM8D,OAASxB,EAAQmF,IAClBA,EAAKC,UACN,OAEJD,EAAKC,UAAUpG,SAAStB,EAAMS,KAClC,CACJ,IAEA2G,EAAMO,QAAO,SAAUF,GACnB,YAA0B9H,IAAnB8H,EAAKC,SAChB,IAAGF,SAAQ,SAAUC,GACbjI,MAAMI,QAAQ8D,IAAU1D,EAAM4H,aAE9B5H,EAAM8D,OAAO2D,EAA6B,YAAvBzH,EAAM4H,aAA6C,UAAhB5H,EAAMqB,MAAoBqC,EAAMmE,MAAQnE,EAAMoE,QAAUpE,GACvG+D,EAAK/M,UAA2BiF,IAApB+D,EAAM+D,EAAK/M,KAE9BsF,EAAM8D,OAAO2D,EAAM/D,EAAM+D,EAAK/M,MAG9BsF,EAAM8D,OAAO2D,EAAM/D,EAE3B,IAEA1D,EAAMoH,MAAQA,EAGd/E,EAAUrC,EACd,EAEIqC,EAAY,SAAmBrC,GAC/B,IAAI+H,GAAU,EAQd,OAPA/H,EAAMoH,MAAMO,QAAO,SAAUF,GACzB,YAA0B9H,IAAnB8H,EAAKC,SAChB,IAAGF,SAAQ,SAAUC,GACbA,EAAKC,UAAUnF,SACfwF,GAAU,EAElB,IACOA,CACX,EAgBIC,EAAS,SAAchI,EAAOsC,EAAS2F,GAG1C,IAAIvE,EAAQwE,GAAU1I,MAAMI,QAAQI,EAAM0D,OAAS1D,EAAM0D,OAAS1D,EAAM0D,MAAQ,IAAIyE,MAAM,KAQ1F,GALoB,UAAhBnI,EAAMqB,OACTqC,EAAM4D,UAIHtH,EAAMoI,YAAY9I,OAASoE,EAAMpE,OACpC,KAAOU,EAAMoI,YAAY9I,OAASoE,EAAMpE,QAAQ,CACrCU,EAAMoI,YAAYP,MACxBH,UAAUzH,SACf,CAIDyD,EAAM8D,SAAQ,SAAU9D,EAAO2E,GAE9B,IAAIC,EAAMtI,EAAMoI,YAAYC,GACvBC,IACJA,EAAMtI,EAAMoI,YAAYC,GAASE,GAAgBvI,EAAMiC,YACvDjC,EAAM8D,OAASxB,EAAQgG,GACvBA,EAAIZ,UAAUpG,SAAStB,EAAMS,KAAsB,UAAhBT,EAAMqB,MAAoB,QAAU,QAEzE,IAGAqC,EAAM8D,SAAQ,SAAU9D,EAAO2E,GAC9B,OAAOrI,EAAM8D,OAAO9D,EAAMoI,YAAYC,GAAQ3E,EAC/C,IAEA1D,EAAMoH,MAAQ1D,EAGd8E,EAAYxI,EACb,EAEIwI,EAAc,SAAmBxI,GAEpC,IAAI+H,GAAU,EAMd,OALA/H,EAAMoH,MAAMI,SAAQ,SAAUC,EAAMY,GAC/BrI,EAAMoI,YAAYC,GAAOX,UAAUnF,SACtCwF,GAAU,EAEZ,IACOA,CACR,EAWIU,EAAoC,oBAAb5H,SAA2B,KAAO,WAM5D,IALA,IAAI6H,EAAU,CAAC,SAAU,MAAO,KAAM,KAClCxC,EAAI,EACJyC,EAAID,EAAQpJ,OAEZsJ,EAAe/H,SAASC,cAAc,OAAO6B,MAC1CuD,EAAIyC,EAAGzC,IAEb,GADYwC,EAAQxC,GAAK,cACR0C,EAChB,OAAOF,EAAQxC,GAGjB,OAAO,IACR,CAb6D,GAyBzD2C,EAAW,SAAgB7O,EAAM8O,GACpC,IAAIC,EAAKlI,SAASC,cAAc9G,GAIhC,OAHI8O,IACHC,EAAGD,UAAYA,GAETC,CACR,EAEIC,EAAoB,SAA2BzH,EAAS0H,EAAYC,GACvE,IAAIC,EAAW,IAAIC,kBAAiB,SAAUC,GAC7CJ,EAAWzB,SAAQ,SAAU8B,GACxBD,EAAU1B,QAAO,SAAU4B,GAC9B,OAAON,EAAWvK,SAAS6K,EAASC,cACrC,IAAGlK,QACF4J,EAAG3H,EAAQmB,aAAa4G,GAE1B,GACD,IAEA,OADAH,EAASM,QAAQlI,EAAS,CAAE0H,YAAY,IACjCE,CACR,EAEIO,EAAgB,SAAuBhG,GAC1C,OAAOA,aAAiBiG,WACzB,EAkBIC,EAAe,SAAsBrI,EAASvH,EAAM0J,GACvD,IAAImG,EAAOxK,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,GAG1EkC,EAAQuI,aACZvI,EAAQuI,WAAa,IAGtB,IAAIC,EAAIxI,EAAQuI,WAAWE,MAAK,SAAUD,GACzC,OAAOA,EAAE/P,OAASA,CACnB,IACI+P,EACHA,EAAErG,MAAQA,EAEVnC,EAAQuI,WAAWG,KAAK,CAAEjQ,KAAMA,EAAM0J,MAAOA,EAAOmG,KAAMA,IAG3DK,EAAkB3I,EAASA,EAAQuI,WACpC,EAEII,EAAoB,SAA2B3I,EAASuI,GAC3DvI,EAAQoB,MAAMwH,UAAYL,EAAWpN,KAAI,SAAUqN,GAClD,OAAOA,EAAE/P,KAAO,IAAM+P,EAAErG,MAAQqG,EAAEF,KAAO,GAC1C,IAAGO,KAAK,IACT,EAEIC,EAAY,SAAmB9I,GAElC,IAAI+I,EAAc/I,EAAQgJ,wBAG1B,QAAID,EAAYE,OAAS,MAKrBF,EAAYG,IAAMrR,OAAOsR,QAAUtR,OAAOuR,YAK/C,EAmBIC,EAAS,SAAcC,GACzB,OAAOA,EAAOC,MAChB,EAEIC,EAAQ,CAAC,EAETC,EAAQ,SAAWtH,EAAOvJ,GAC7B,IAAI8Q,EAAM9Q,EAAG+Q,WAOb,OANKH,EAAME,KACVF,EAAME,GAAO,CAAC,GAEVF,EAAME,GAAKvH,KACfqH,EAAME,GAAKvH,GAASvJ,EAAGuJ,IAEjBqH,EAAME,GAAKvH,EAClB,EAEGyH,GAAQ,IAAIC,OAAO,YACnBC,GAAc,IAAID,OAAO,kBACzBE,GAAU,IAAIF,OAAO,aACrBG,GAAU,IAAIH,OAAO,SACrBI,GAAW,IAAIJ,OAAO,UACtBK,GAAa,IAAIL,OAAO,4DACxBM,GAAa,IAAIN,OAAO,wBACxBO,GAAe,IAAIP,OAAO,6BAC1BQ,GAAQ,IAAIR,OAAO,WAEnBS,GAAa,SAAoBhB,GACnC,OAAOA,EAASiB,WAAWjB,IAAW,MAAMxQ,KAAKwQ,GAAU,EAAI,KAAQ,CACzE,EAEIkB,GAAe,SAAsBlB,GACvC,OAAOA,EAAOtN,MAAM,6EAA6Eb,IAAIsP,GACvG,EAEIA,GAAsB,SAA6BnB,GACrD,IAAIoB,EAAQpB,EAAOtN,MAAM,gIAGrBpD,EAAK+R,GAAkBD,EAAM,IAG7BE,OAASxM,EACTR,OAAWQ,EACXyM,OAAOzM,EACP0M,OAAQ1M,EACR2M,OAAW3M,EAsCf,OAnCAsM,EAAMM,MAAM,GAAG5E,QAAO,SAAU6E,GAC9B,YAAuB,IAATA,CAChB,IAAGhF,SAAQ,SAAUgF,GAEfd,GAAWrR,KAAKmS,QACM,IAAbrN,EACTA,EAAW0M,GAAWW,GAEtBH,EAAQR,GAAWW,GAKd,IAAInS,KAAKmS,GACdL,EAASK,EAIF,iBAAiBnS,KAAKmS,GAC3BJ,EAAOI,EAIA,UAAUnS,KAAKmS,KACpBF,EAAWJ,GAAkBM,GAEvC,IAGIF,IACFnN,OAAWQ,EACXyM,OAAOzM,GAIF,CACL3F,KAAMG,EAAGH,KACTyS,WAAYtS,EAAGsS,WACftN,SAAUA,EACViN,KAAMA,EACNC,MAAOA,EACPF,OAAQA,EACRG,SAAUA,EAEd,EAOII,GAAa,SAAoB7B,GACnC,IAAI/Q,EAAO+Q,EAAOtN,MAAM,yDAAyD,GAEjF,MAAO,CACLzD,KAAMA,EACN6S,OAHW9B,EAAO+B,UAAU9S,EAAKwF,QAAQ/B,MAAM,+GAA+Gb,IAAImQ,IAKtK,EAEIC,GAAsB,mBACtBD,GAAkB,SAAyBhC,GAC7C,IAAI/N,EAAS+N,EAAOtN,MAAMuP,IAC1B,MAAO,CACLhQ,OAAQA,EAASgP,WAAWhP,EAAO,IAAM,IAAM,KAC/C4G,MAAOqJ,GAAQlC,EAAOmC,QAAQF,GAAqB,KAEvD,EAKIG,GAAe,GAkBfC,GAA+B,oBAAbrM,SAA2B,SAAU6C,GACzD,OAAO,CACT,EAAI,SAAUA,GACZ,IAAIjD,EAAOpB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAKwB,SAASsM,KACpFC,EAAK/N,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,KAE7E,GAAa,GAATqE,EACF,OAAO,EAGT,GAAI0J,EAAI,CACN,IAAIC,EA3BS,SAAoBD,EAAI3M,GACvC,OAAKwM,GAAaG,GAGXH,GAAaG,GAAIpD,MAAK,SAAUsD,GACrC,OAAOA,EAAEC,KAAK7M,aAAeD,CAC/B,IAJS,IAKX,CAoBmB+M,CAAWJ,EAAI3M,IAAS,CAAC,EAiBxC,OAhBK4M,EAASE,OACZF,EAASE,KAAO1M,SAASC,cAAc,QACvCuM,EAASE,KAAK5K,MAAM8K,QAAU,iDAC9BhN,EAAKiB,YAAY2L,EAASE,OAI5BF,EAASE,KAAK5K,MAAM+K,UAAYhK,EAG3B2J,EAAS1K,QACZ0K,EAAS1K,MAAQvJ,OAAOwJ,iBAAiByK,EAASE,OA9BvC,SAAoBH,EAAIO,GAClCV,GAAaG,KAChBH,GAAaG,GAAM,IAErBH,GAAaG,GAAInD,KAAK0D,EACxB,CA4BIC,CAAWR,EAAIC,GAERtK,SAASsK,EAAS1K,MAAM+K,UAAW,GAC5C,CAGA,IAAIC,EAAU9M,SAASC,cAAc,QAMrC,OALA6M,EAAQhL,MAAM8K,QAAU,4DAA8D/J,EACtFjD,EAAKiB,YAAYiM,GACjBnK,uBAAsB,WACpBmK,EAAQjN,WAAWC,YAAYgN,EACjC,IACO5K,SAAS3J,OAAOwJ,iBAAiB+K,GAASD,UAAW,GAC9D,EAMIX,GAA8B,oBAAblM,SAA2B,SAAUgK,GACxD,OAAOA,CACT,EAAI,SAAUA,GACZ,GAAe,gBAAXA,EACF,MAAO,gBAET,IAAI8C,EAAU9M,SAASC,cAAc,QAMrC,OALA6M,EAAQhL,MAAM8K,QAAU,6CAA+C5C,EACvEhK,SAASsM,KAAKzL,YAAYiM,GAC1BnK,uBAAsB,WACpBmK,EAAQjN,WAAWC,YAAYgN,EACjC,IACOvU,OAAOwJ,iBAAiB+K,GAAS3K,iBAAiB,QAC3D,EAEI6K,GAAW,SAAkBlL,GAC/B,MAAqB,iBAAVA,EACFA,EAGFA,EAAMpF,MAAM,4FACrB,EAqDIuQ,GAAU,SAAiBjD,GAC7B,IAAIoB,EAAQpB,EAAO1C,MAAM,KAAKzL,IAAIkO,GAC9BmD,EA9CgB,SAAyBrT,GAC7C,OAAOA,EAAIoQ,OAAO3C,MAAM,KAAKzL,KAAI,SAAUhC,EAAK2N,GAC9C,OAAOA,EAAQ,EA/NW,SAA+BwC,GAC3D,OAAOA,EAAOjQ,OAAO,GAAGoT,cAAgBnD,EAAO0B,MAAM,EACvD,CA6NuB0B,CAAwBvT,GAAOA,CACpD,IAAG0P,KAAK,GACV,CA0CiB8D,CAAgBjC,EAAM,IACjCvI,EAzCa,SAAsBA,EAAOqK,GAC9C,OAAI1C,GAAYhR,KAAKqJ,GA3OL,SAAmBA,GACnC,MAAwB,iBAAVA,EAA+B,SAAVA,EAAmBA,CACxD,CA0OWyK,CAAYzK,GAGjByH,GAAM9Q,KAAKqJ,GACNX,SAASW,EAAO,IAGrB4H,GAAQjR,KAAKqJ,GACRoI,WAAWpI,GAGhBkI,GAAMvR,KAAKqJ,GAtBQ,KAHnB0K,EA0BW1K,EA1BEnG,MAAM,iBAAiBb,KAAI,SAAU2R,GACpD,OAAOA,EAAIzB,UAAU,EAAGyB,EAAI/O,OAAS,EACvC,KACYA,OAAe8O,EAAK,GAAKA,EA0BjC7C,GAAQlR,KAAK0T,GACXtC,GAAWpR,KAAKqJ,GACXsH,EAAMtH,EAAOgJ,IAEf1B,EAAMtH,EAAOqJ,IAGlBvB,GAASnR,KAAK0T,GACT/C,EAAMtH,EAAOmK,IAGlBlC,GAAatR,KAAK0T,GACN,SAAVrK,EACKA,EAEFsH,EAAMtH,EAAOqI,IAGfrI,EAhDG,IACN0K,CAgDN,CAKcE,CAAarC,EAAM,GAAIA,EAAM,IACzC,OAAK8B,GAAD,MAAarK,EAGV,CACLqK,SAAUA,EACVrK,MAAOA,GAJA,IAMX,EA8BI6K,GAAa,SAAoBxE,GACpC,OAAOA,CACR,EAsBIyE,GAAgB,SAAuBzE,GAC1C,OAAOA,EAAI,GAAK,EAAIA,EAAIA,GAAU,EAAI,EAAIA,GAAKA,EAAlB,CAC9B,EAyII0E,GAAkB,CACrB,cAAeF,GAEf,eAlKgB,SAAoBxE,GACpC,OAAQ,EAAI1N,KAAKqS,IAAI3E,GAAK1N,KAAKsS,GAAK,IAAM,CAC3C,EAiKC,gBA/JiB,SAAqB5E,GACtC,OAAO1N,KAAKuS,IAAI7E,GAAK1N,KAAKsS,GAAK,GAChC,EA8JC,mBA5JmB,SAAuB5E,GAC1C,OAAQ,IAAO1N,KAAKqS,IAAIrS,KAAKsS,GAAK5E,GAAK,EACxC,EA4JC,gBA9IiB,SAAqBA,GACtC,OAAOA,EAAIA,EAAIA,CAChB,EA6IC,iBA3IkB,SAAsBA,GACxC,IAAI8E,EAAK9E,EAAI,EACb,OAAO8E,EAAKA,EAAKA,EAAK,CACvB,EAyIC,oBAvIoB,SAAwB9E,GAC5C,OAAOA,EAAI,GAAM,EAAIA,EAAIA,EAAIA,GAAKA,EAAI,IAAM,EAAIA,EAAI,IAAM,EAAIA,EAAI,GAAK,CACxE,EAuIC,eA3FgB,SAAoBA,GACpC,IAAI+E,EAAa/E,EAAI,EACrB,OAAQ,GAAK1N,KAAK0S,KAAK,EAAID,EAAa/E,GAAK,EAC9C,EAyFC,gBAvFiB,SAAqBA,GACtC,IAAI8E,EAAK9E,EAAI,EACb,OAAO1N,KAAK0S,KAAK,EAAIF,EAAKA,EAC3B,EAqFC,mBAnFmB,SAAuB9E,GAE1C,IAAI+E,EAAiB,EAAJ/E,EACbiF,EAAcF,EAAa,EAE/B,OAAIA,EAAa,GACR,IAAOzS,KAAK0S,KAAK,EAAID,EAAaA,GAAc,GAGlD,IAAOzS,KAAK0S,KAAK,EAAIC,EAAcA,GAAe,EAC1D,EA2EC,eAlKgB,SAAoBjF,GACpC,OAAOA,EAAIA,CACZ,EAiKC,gBA/JiB,SAAqBA,GACtC,OAAOA,GAAK,EAAIA,EACjB,EA8JC,mBAAoByE,GAEpB,gBA7IiB,SAAqBzE,GACtC,OAAOA,EAAIA,EAAIA,EAAIA,CACpB,EA4IC,iBA1IkB,SAAsBA,GACxC,OAAO,KAAMA,EAAIA,EAAIA,EAAIA,CAC1B,EAyIC,oBAvIoB,SAAwBA,GAC5C,OAAOA,EAAI,GAAK,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,IAAMA,EAAIA,EAAIA,EAAIA,CAC3D,EAuIC,eArIgB,SAAoBA,GACpC,OAAU,IAANA,EACI,EAED1N,KAAK4S,IAAI,EAAG,IAAMlF,EAAI,GAC9B,EAiIC,gBA/HiB,SAAqBA,GACtC,OAAU,IAANA,EACI,EAEuB,EAAvB1N,KAAK4S,IAAI,GAAI,GAAKlF,EAC3B,EA2HC,mBAzHmB,SAAuBA,GAE1C,GAAU,IAANA,GAAiB,IAANA,EACd,OAAOA,EAGR,IAAI+E,EAAiB,EAAJ/E,EACbiF,EAAcF,EAAa,EAE/B,OAAIA,EAAa,EACT,GAAMzS,KAAK4S,IAAI,EAAG,GAAKD,GAGxB,IAAyC,EAAjC3S,KAAK4S,IAAI,GAAI,GAAKD,GAClC,EA6GC,eArFgB,SAAoBjF,GACpC,IAAImF,EAAY7P,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,QAEhFyP,EAAa/E,EAAI,EACrB,OAAO+E,EAAaA,IAAeI,EAAY,GAAKJ,EAAaI,EAClE,EAiFC,gBA/EiB,SAAqBnF,GACtC,IAAImF,EAAY7P,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,QAEhFyP,EAAa/E,EAAI,EAAI,EACzB,OAAO+E,EAAaA,IAAeI,EAAY,GAAKJ,EAAaI,GAAa,CAC/E,EA2EC,mBAzEmB,SAAuBnF,GAC1C,IAEI+E,EAAiB,EAAJ/E,EACboF,EAAcL,EAAa,EAC3BM,EAAgB,OAJJ/P,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,SAKpF,OAAIyP,EAAa,EACT,GAAMA,EAAaA,IAAeM,EAAI,GAAKN,EAAaM,GAGzD,IAAOD,EAAcA,IAAgBC,EAAI,GAAKD,EAAcC,GAAK,EACzE,EAgEC,mBA9DoB,SAAwBrF,GAC5C,IAGIuD,EAAI,GAHQjO,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAIhFyP,EAAiB,EAAJ/E,EAEjB,GAAU,IAANA,GAAiB,IAANA,EACd,OAAOA,EAGR,IAAIqF,EAAI9B,GAAK,EAAIjR,KAAKsS,IAAMtS,KAAKgT,KAAK,GACtC,OAAOhT,KAAK4S,IAAI,GAAI,GAAKH,GAAczS,KAAKuS,KAAKE,EAAaM,IAAM,EAAI/S,KAAKsS,IAAMrB,GAAK,CACzF,EAkDC,kBAhDmB,SAAuBvD,GAC1C,IAAI+E,EAAa/E,EAAI,EACrB,GAAI+E,EAAa,EAAI,KACpB,OAAO,OAASA,EAAaA,EACvB,GAAIA,EAAa,EAAI,KAAM,CACjC,IAAIK,EAAcL,EAAa,IAAM,KACrC,OAAO,OAASK,EAAcA,EAAc,GAC7C,CAAO,GAAIL,EAAa,IAAM,KAAM,CACnC,IAAIQ,EAAcR,EAAa,KAAO,KACtC,OAAO,OAASQ,EAAcA,EAAc,KAC7C,CACC,IAAIC,EAAeT,EAAa,MAAQ,KACxC,OAAO,OAASS,EAAeA,EAAe,OAEhD,GAqCA1V,EAAcP,EAAcI,gBAAiB+U,IAU7C,IAAIe,GAAU,SAAiBtG,EAAIuG,GAC/B,IACIrD,EAAO/M,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAKkP,GAG/E,OAAOmB,IAAY,SAAU3F,GACzBb,EAAGkD,EAAKrC,GACZ,GAAG0F,EANYpQ,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAEvEA,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAKpF,EASIqQ,GAAc,SAAqB5L,GACnC,IAAI2L,EAAWpQ,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,KAC/EF,EAAWE,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAC/EgN,EAAQhN,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAGhF,IAAKyE,EACD,OAAO,KAIX,IAAI6L,EAAQ,KACR5F,OAAI,EACJ5J,EAAQ,KA0BZ,OAvBW,SAASyP,EAAKC,GAOrB,GANc,OAAVF,IACAA,EAAQE,IAGZ9F,EAAI8F,EAAKF,EAAQtD,GAETlN,EAGJ,OAFA2E,EAAOiG,GAAK,EAAIA,EAAI5K,EAAW,GAC/BgB,EAAQqD,sBAAsBoM,GACvB,KAGX9L,EAAO,GAEH2L,GACAA,GAER,CAEAG,CAAK7S,MAGE,WACHqD,qBAAqBD,EACzB,CACJ,EAkFI2P,GAAmB,SAA0BhW,GAC7C,IAAK,IAAIsF,EAAOC,UAAUC,OAAQyQ,EAAUvQ,MAAMJ,EAAO,EAAIA,EAAO,EAAI,GAAIK,EAAO,EAAGA,EAAOL,EAAMK,IAC/FsQ,EAAQtQ,EAAO,GAAKJ,UAAUI,GAGlC,IAhFIuQ,EAEA7P,EAEAH,EAOAiQ,EAqEAlG,GAhFAiG,EAAW,IADL,GAGN7P,EAAQ,KAERH,EAAQ,CACRkQ,SAAU,EACV/D,OAAQ,EACRgE,SAAU,EACVC,YAAa,GAoDV,CACHC,YAAa,WACT,OAAOrQ,EAAMmQ,QACjB,EACAF,OArDAA,EAAS,WACT7P,qBAAqBD,EACzB,EAoDImQ,UAlDY,SAAmBpH,EAAI/B,EAAMoJ,EAAIzM,GAE7CmM,IAGW,OAAPM,EACAvQ,EAAMoQ,YAAcjJ,GAGpBnH,EAAMmQ,SAAWhJ,EACjBnH,EAAMoQ,YAAcG,EACpBvQ,EAAMkQ,SAAW,GAIrBlQ,EAAMmM,OAASnM,EAAMmQ,SAErB,IAAIK,EAAO,MACA,SAASZ,EAAKC,GAErB1P,EAAQqD,sBAAsBoM,GAGzBY,IACDA,EAAOX,GAGX,IAAIY,EAAQZ,EAAKW,EAEbC,GAAST,IAMbQ,EAAOX,EAAKY,EAAQT,EAEpBlM,EAAO9D,EAAOiQ,GAEd/G,EAAGlJ,EAAMmQ,UACb,CAEAP,CAAK7S,KACT,IAuBI0G,EAAU,CACVK,OAAQ,KACRmM,OAAQlG,EAAEkG,OACVI,YAAatG,EAAEsG,aAWnB,MARa,WAATvW,EACA2J,EAAQK,OAAS4M,GAAOhR,WAAMC,EAAW,CAACoK,EAAEuG,WAAWjJ,OAAO0I,IAC9C,WAATjW,EACP2J,EAAQK,OAAS6M,GAAOjR,WAAMC,EAAW,CAACoK,EAAEuG,WAAWjJ,OAAO0I,IAC9C,SAATjW,IACP2J,EAAQK,OAAS8M,GAAKlR,WAAMC,EAAW,CAACoK,EAAEuG,WAAWjJ,OAAO0I,KAGzDtM,CACX,EAQIiN,GAAS,SAAgB5M,GACzB,IAAI+M,EAAcxR,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAClFyR,EAAWzR,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAEnF,OAAO,SAAU6J,GAIbpF,EAAOoF,EAHI7J,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,KACtEA,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,MAExD,SAAUW,EAAOiQ,GAElC,IAAIc,EAAW/Q,EAAMoQ,YAAcpQ,EAAMmQ,SACrCa,EAAUhR,EAAMmM,OAA8C,IAApCnM,EAAMoQ,YAAcpQ,EAAMmM,QAGxDnM,EAAMkQ,UAAqD,KAAtCc,EAAUhR,EAAMmM,QAAU4E,GAAgBD,EAG/D9Q,EAAMmQ,UAAYnQ,EAAMkQ,SAAW,EAAI7T,KAAKC,IAAI0D,EAAMkQ,UAAWW,GAAexU,KAAKE,IAAIyD,EAAMkQ,SAAUW,IAGrG7Q,EAAMmM,OAASnM,EAAMoQ,aAAepQ,EAAMmQ,UAAYnQ,EAAMoQ,aAAepQ,EAAMmM,QAAUnM,EAAMoQ,aAAepQ,EAAMmQ,UAAYnQ,EAAMoQ,eACxIH,IACAjQ,EAAMkQ,SAAW,EACjBlQ,EAAMmQ,SAAWnQ,EAAMoQ,YAE/B,GACJ,CACJ,EAEIQ,GAAO,SAAc9M,GACrB,IAAIoM,EAAW7Q,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAEnF,OAAO,SAAU6J,GAIbpF,EAAOoF,EAHI7J,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,KACtEA,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,MAExD,SAAUW,EAAOiQ,GAElCjQ,EAAMkQ,SAAWA,EAGjBlQ,EAAMmQ,UAAYnQ,EAAMkQ,UAGpBlQ,EAAMmM,OAASnM,EAAMoQ,aAAepQ,EAAMmQ,UAAYnQ,EAAMoQ,aAAepQ,EAAMmM,QAAUnM,EAAMoQ,aAAepQ,EAAMmQ,UAAYnQ,EAAMoQ,eACxIH,IACAjQ,EAAMkQ,SAAW,EACjBlQ,EAAMmQ,SAAWnQ,EAAMoQ,YAE/B,GACJ,CACJ,EAUIO,GAAS,SAAgB7M,GACzB,IAAImN,EAAY5R,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,GAChF6R,EAAU7R,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAC9E8R,EAAO9R,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,GAE/E,OAAO,SAAU6J,GAIbpF,EAAOoF,EAHI7J,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,KACtEA,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,MAExD,SAAUW,EAAOiQ,GAElC,IAAImB,IAAMpR,EAAMmQ,SAAWnQ,EAAMoQ,aAAea,EAGhDjR,EAAMkQ,UAAYkB,EAAID,EAGtBnR,EAAMmQ,UAAYnQ,EAAMkQ,SAGxBlQ,EAAMkQ,UAAYgB,EAGdG,GAASrR,EAAMmQ,SAAUnQ,EAAMoQ,YAAapQ,EAAMkQ,YAClDD,IACAjQ,EAAMmQ,SAAWnQ,EAAMoQ,YACvBpQ,EAAMkQ,SAAW,EAEzB,GACJ,CACJ,EAEImB,GAAW,SAAkBlB,EAAUC,EAAaF,GACpD,IAAIoB,EAAcjS,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,KAEtF,OAAOhD,KAAKiH,IAAI6M,EAAWC,GAAekB,GAAejV,KAAKiH,IAAI4M,GAAYoB,CAClF,EAOIC,GAAqB,SAA4BC,GAEpD,IAAIC,EAAgBD,EAAY9U,KAAI,SAAUqN,GAC7C,OAAO2H,GAA2BC,GAAiB5H,EAAE/P,KAAM+P,EAAE0C,WAAY1C,EAAEqC,MAAOrC,EAAEoC,OAAQpC,EAAE5K,SAAU4K,EAAEsC,MAC3G,IAEA,OAAO,SAAU9K,EAASqQ,EAAWnC,GAGpC,IAAK/F,EAAcnI,GAClB,OAAO,EAGR,IAAIxD,EAAQ0T,EAAcnS,OAC1BmS,EAAcjK,SAAQ,SAAUqK,GAC/BA,EAAatQ,EAASqQ,GAAW,eAChC7T,GACc0R,GACbA,EAASlO,EAEX,GACD,GACD,CACD,EAEIoQ,GAAmB,SAA0B3X,EAAMyS,EAAYL,GAClE,IAAI0F,EAAS1F,EAAO9R,EAAahB,EAAcI,gBAAiB0S,GAAQA,EACpE2F,EAAazX,EAAahB,EAAcK,WAAYK,GACxD,OAAO,SAAUuH,EAASqQ,EAAWtE,GACpCyE,EAAWrS,WAAMC,EAAW,CAAC4B,EAAS+L,EAAGsE,EAAWE,GAAQzK,OAAOL,EAAkByF,IACtF,CACD,EAEIiF,GAA6B,SAAoCK,GACpE,IAAI5F,EAAS9M,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,YAC7EF,EAAWE,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAC/EgN,EAAQhN,UAAU,GAGtB,OAAO,SAAUkC,GAChB,IAAIqQ,EAAYvS,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAChFoQ,EAAWpQ,UAAU,IA73BF,SAA4BkC,EAASmC,GAC7DnC,EAAQoB,MAAMqP,gBAAkBtO,CACjC,CA+3BEuO,CAAmB1Q,EAAS4K,GAG5BuD,IAAY,SAAUpC,GACrByE,EAAWxQ,EAASqQ,EAAWtE,EAChC,GAAGmC,EAAUtQ,EAAUkN,EACxB,CACD,EAWI6F,GAAS,SAAWlS,GACvB,IAAImS,EAAO9S,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAehF,OAXAW,EAAMoS,kBAAoB,KAG1BC,GAAarS,EAAOmS,EAAMnS,EAAMS,KAAKU,QAAQwB,OAG7C3C,EAAMK,cAAgB2I,EAAkBhJ,EAAMS,KAAM,CAAC,eAAe,SAAUoK,GAC7EwH,GAAarS,EAAOmS,EAAMtH,EAC3B,IAGO,CACNyH,SAAU,SAAkBC,GAC3BF,GAAarS,EAAOmS,EAAMI,EAC3B,EAED,EAEGF,GAAe,SAAsBrS,EAAOmS,EAAMI,GAGrD,GAAIvS,EAAMoS,oBAAsBG,EAAhC,CAKAvS,EAAMoS,kBAAoBG,EAE1BvS,EAAM2C,MAAQ4P,EAAMC,GAAaL,EA9lBnB,SAAkBtH,GAC/B,OAAOA,EAAO1C,MAAM,KAGnBR,QAAO,SAAUhF,GAChB,OAAOA,EAAMmI,OAAOxL,MACtB,IAGC5C,IAAIoR,IAGJnG,QAAO,SAAUhF,GAChB,OAAiB,OAAVA,CACT,IAGC8P,QAAO,SAAUC,EAAQ/P,GAExB,OADA+P,EAAO/P,EAAMoL,UAAYpL,EAAMe,MACxBgP,CACT,GAAG,CAAC,EACN,CAykBwCC,CAASJ,IAAQJ,EAExD,IAAIS,EAAQ,GACRC,EAAQ,GAER7S,EAAM2C,MAAMmQ,cAAgB9S,EAAM2C,MAAMmQ,aAAaxT,QACxDsT,EAAQ5S,EAAM2C,MAAMmQ,aACpBD,EAAQ7S,EAAM2C,MAAMoQ,eACV/S,EAAM2C,MAAMoP,YAAyC,SAA3B/R,EAAM2C,MAAMoP,YAEhD/R,EAAM2C,MAAMoP,WAAWvK,SAAQ,SAAUuK,GACxC,IAAIiB,EArDyB,SAAmCjB,GAClE,OAAOzX,EAAahB,EAAcK,WAAYoY,EAAW/X,MAAM0F,WAAMC,EAAWqH,EAAkB+K,EAAWtF,YAAc,IAC5H,CAmDcwG,CAA0BlB,GACrCa,EAAQA,EAAMvL,OAAO2L,EAAKJ,OAC1BC,EAAQA,EAAMxL,OAAO2L,EAAKH,MAC3B,IAGGD,GAASC,IACZ7S,EAAM8S,aAAevB,GAAmBqB,GACxC5S,EAAM+S,cAAgBxB,GAAmBsB,GAEzC7S,EAAMkT,sBAAwB3B,GAAmBqB,EAAMlW,IAAIyW,KAC3DnT,EAAMoT,uBAAyB7B,GAAmBsB,EAAMnW,IAAIyW,MAG7DnT,EAAMwC,OAAQ,CA9Bd,CA+BD,EAEI2Q,GAAc,SAAqBpJ,GACtC,IAAIsJ,EAAK9L,GAAMwC,GAGf,OAFAsJ,EAAGlU,SAAW,EACdkU,EAAGhH,MAAQ,EACJgH,CACR,EAEIC,GAAuB,SAA8BC,GACxD,OAAOA,EAAI9K,EAAgB,2BAA6B8K,EAAIC,wBAA0B,CACvF,EAEIC,GAAsB,WACzB,OAAOra,OAAOsa,kBAAoB,CACnC,EAEIC,GAAc,SAAqBC,GAC5BA,EAAOC,WAAW,MACxBC,UAAU,EAAG,EAAGF,EAAOG,MAAOH,EAAOI,OAC1C,EAWIC,GAAQ,CACX,KAAQ,WACP,OAAO,SAAUxT,GAEhB,IAAIT,EAAQ,CAAC,EAOb,OAAOuG,OAAOM,OAAO,CAAC,EAAGjG,EAAOZ,EAAOS,EAAM,QAASgD,EAAQzD,GAAQmC,EAAOnC,GALlE,SAAcA,GACxBA,EAAMS,KAAKS,aAAa,aAAclB,EAAM0D,OA7hCrC,SAAc6J,EAAM7J,GAC9B,IAAIwQ,EAAW3G,EAAK9L,WAAW,GAC1ByS,EAGMxQ,IAAUwQ,EAASC,YAC7BD,EAASC,UAAYzQ,IAHrBwQ,EAAWrT,SAASuT,eAAe1Q,GACnC6J,EAAK7L,YAAYwS,GAInB,CAshCIG,CAAKrU,EAAMS,KAAMT,EAAM0D,MACxB,IAE2F3D,EAAUC,GACtG,CACD,GAIDnG,EAAcP,EAAcE,KAAMya,IAKlC,IA4CIK,GAAsB,SAA6B7T,EAAMwB,EAAYsS,GACxE,OAlrCgB,SAAW9T,EAAMwB,EAAYK,GAC1C,IAAItC,EAAQ,CACR4H,aAAc,MAGlB,GAAInH,GAAQA,EAAKU,QAAQyG,aAAc,CACnC,IACI4M,EAAU/T,EAAKU,QAAQyG,aAC3B5H,EAAM4H,cAA6C,IAFrC,CAAC,OAAQ,WAEMhL,QAAQ4X,GAAkBA,EAAU,IACrE,CAEA,OAAOjO,OAAOM,OAAO,CAAC,EAAGjG,EAAOZ,EAAOS,GAAOuD,EAAQhE,GAAQyD,EAAQzD,GAAQgC,EAAQhC,EAAOiC,GAAaE,EAAOnC,EAAOuC,EAAMF,EAAWC,GAAUvC,EAAUC,GAChK,CAsqCOyU,CAAWhU,EAAMwB,EAAYsS,EACrC,EAEIG,GAA0B,SAAiCjU,EAAMwB,EAAYsS,GAChF,OArnCoB,SAAW9T,EAAMwB,EAAYK,GAEjD,IAAItC,EAAQ,CACXoI,YAAa,IAGd,OAAO7B,OAAOM,OAAO,CAAC,EAAGjG,EAAOZ,EAAOS,GAAOgD,EAAQzD,GAAQgC,EAAQhC,EAAOiC,GAAaE,EAAOnC,EAAOgI,EAAQQ,EAAalG,GAAUvC,EAAUC,GACjJ,CA8mCO2U,CAAelU,EAAMwB,EAAYsS,EACzC,EAEIK,GAAsB,SAA6B5a,EAAMyG,EAAMkC,GAClE,IAAI8E,EAAOnN,EAAahB,EAAcE,KAAMQ,GAC5C,OAAOyN,EAAOA,EArDP,CACNoN,UAAW,CACVC,KAAMxb,EACNgB,aAAcA,GAEfya,MAAO,CACN7H,SAAUA,GACVH,QAASA,IAEViI,OAAQ,CACPC,MAAOtB,GACPF,oBAAqBA,GACrBH,qBAAsBA,IAEvB4B,IAAK,CACJC,QAAS9K,EACT+K,OAAQvM,EACRsB,UAAWP,GAEZyL,UAAW,CACV7F,QAASA,IAEV8F,KAAM,CACL3P,QAASA,IAEVlK,KAAM,CACL8Z,YAAaxY,IAEdyY,KAAM,CACL5U,OAAQA,EACRuB,OAAQA,EACRsB,QAASA,EACTyO,OAAQA,GACRlQ,QAASA,EACTgC,QAASA,EACTjE,UAAWA,IAkBC0H,CAAchH,EAAMkC,GAAS,IAC5C,EAEI8S,GAAQ,SAAeC,EAAKxP,GAC/B,MAAkB,MAAXwP,EAAIxP,IAA6B,MAAfwP,EAAIxP,EAAI,EAClC,EAEI2E,GAAS,SAAgB8K,GAC5B,MAAa,MAANA,GAAmB,MAANA,CACrB,EAEIC,GAAQ,SAAeD,GAC1B,MAAa,MAANA,CACR,EAEIE,GAAS,SAAgBF,GAC5B,MAAa,MAANA,CACR,EAEIG,GAAS,SAAgBH,GAC5B,MAAa,MAANA,CACR,EAEIjS,GAAQ,SAAexE,GAC1B,OAA2B,IAApBA,EAAE4L,OAAOxL,MACjB,EAEI2B,GAAM,SAAa8U,EAAG7W,GACzB,OAAO6W,EAAE9L,KAAK/K,EAAE4L,OACjB,EAEIkL,GAAQ,SAAeD,EAAG7W,GAC7B,OAAIwE,GAAMxE,IACT+B,GAAI8U,EAAG7W,GACA,IAEDA,CACR,EAEI+W,GAAQ,SAAeC,EAAQlX,GAIlC,OAHIkX,EAAO5W,QACVN,EAAOiL,KAAKiM,EAAO5W,OAAS,EAAI4W,EAAO7O,SAAW6O,EAAO,IAEnD,EACR,EAEIC,GAAU,SAASC,EAAMlQ,EAAGwP,EAAKzQ,GAOpC,IALA,IAAI/F,EAAI,GACJ+L,EAAM,GACNoL,EAAQ,KACRC,GAAW,EAERpQ,EAAIwP,EAAIpW,QAAQ,CAGtB,IAAIqW,EAAID,EAAIxP,GAGZ,GAAI2P,GAAOF,GAAI,CAEdW,GAAW,EACX,IAAInc,EAAK,CAAC+E,EAAE4L,QAGZ6K,EAAID,EADJxP,EAAIkQ,EAAMlQ,EAAI,EAAGwP,EAAKvb,IAGtB8Q,EAAIhB,KAAK9P,GACT+E,EAAI,EACL,KAGK,IAAI4W,GAAOH,GAcd,OAZIW,GAAYpX,EAAE4L,OAAOxL,SACxB2L,EAAIhB,KAAK,CAAC/K,EAAE4L,SACZ5L,EAAI,GACJoX,GAAW,GAGR5S,GAAMxE,IACT+B,GAAIgK,EAAK/L,GAGV+L,EAAMgL,GAAMhL,EAAKhG,GAEViB,EAAI,EAQI,OAAVmQ,GAAkBV,IAAMU,EAG3BnX,GAAKyW,EAGGA,IAAMU,GAEbpL,EAAIhB,KAAK/K,GACTA,EAAI,GAEJmX,EAAQ,MAGAxL,GAAO8K,IACdzW,EAAI,GACJmX,EAAQV,GAMJF,GAAMC,EAAKxP,IAEdoQ,GAAW,EAGPpX,EAAE4L,OAAOxL,SACZ2L,EAAIhB,KAAK,CAAC/K,EAAE4L,SACZ5L,EAAI,IAILgH,GAAK,GAGG0P,GAAMD,IAETW,GAAYpX,EAAE4L,OAAOxL,SACxB2L,EAAIhB,KAAK,CAAC/K,EAAE4L,SACZ5L,EAAI,GACJoX,GAAW,GAGZrL,EAAMgL,GAAMhL,EAAKhG,GAGjB/F,EAAI8W,GAAM/Q,EAAQ/F,IAElBA,GAAKyW,EAKVzP,GACD,CACH,CAYA,OAVIoQ,GAAYpX,EAAE4L,OAAOxL,SAAWgX,GAAYpX,EAAE4L,OAAOxL,SAAW2L,EAAI3L,UACvE2L,EAAIhB,KAAK,CAAC/K,EAAE4L,SACZ5L,EAAI,IAGL+W,GAAMhL,EAAKhG,GAGX+Q,GAAM/Q,EAAQ/F,GAEPgH,CACR,EAYIqC,GAAkB,SAASA,EAAgBtG,GAE9C,IAAIsF,EAAQ,CAAC,EAEb,IAAK,IAAI7M,KAAOuH,EAEVA,EAAWhI,eAAeS,KAmB/B6M,EAAM7M,GAfM,SAARA,EAKQ,aAARA,EAKQ,WAARA,EAKSuH,EAAWvH,GAJU,OAApBuH,EAAWvH,GAAgB,KAAO6N,EAAgBtG,EAAWvH,IALzC,OAApBuH,EAAWvH,GAAgB,KAAOuH,EAAWvH,GAAKgC,IAAI6L,GALtDtG,EAAWvH,GAAK6b,aAmB/B,OAFAhP,EAAMG,UAAY,KAEXH,CACR,EAMIiP,GAAoB,CACvB/V,KAAM,KACN/F,IAAK,KACL+M,KAAM,KACNgP,QAAS,KACT/O,UAAW,KACXyC,UAAW,KACX/I,OAAQ,KACRuB,MAAO,KACP+T,OAAQ,KACR/U,SAAU,KACVmH,UAAW,MAGR6N,GAA4B,SAASA,EAA0BC,GAClE,OAAOpX,MAAM2H,KAAKyP,GAGjBla,KAAI,SAAU6Q,GAEd,IAAItL,EAAauQ,GAAagE,GAAmB,CAAE/V,KAAM8M,IAGzD,IAAK,IAAI7S,KAAO6S,EAAKpM,QACfoM,EAAKpM,QAAQlH,eAAeS,SAGF,IAApBuH,EAAWvH,KAGtBuH,EAAWvH,GAAO6S,EAAKpM,QAAQzG,IAmBhC,OAfIuH,EAAWyU,QAGdzU,EAAWyU,OAASC,EAA0BpJ,EAAK5L,UAAUkG,MAG7DrI,MAAM2H,KAAKoG,EAAK5L,UAAU6F,SAAQ,SAAU+F,GAC3CA,EAAK7M,WAAWC,YAAY4M,EAC7B,KAGQA,EAAK5L,SAASrC,SACrB2C,EAAWN,SAAWgV,EAA0BpJ,EAAK5L,WAGhDM,CACR,GACD,EAEI4U,GAA6B,SAASA,EAA2B5U,GAEpE,OAAOA,EAAWvF,KAAI,SAAU4L,GA6C/B,MAzCwB,iBAFxBA,EAAMkK,GAAagE,GAAmBlO,IAEvB7H,KACd6H,EAAI7H,KAAOI,SAASC,cAAcwH,EAAI7H,MAEtC6H,EAAI7H,KAAOI,SAASC,cAAc,QAG/BwH,EAAI6B,YACP7B,EAAI7H,KAAKU,QAAQgJ,UAAY7B,EAAI6B,WAG9B7B,EAAIQ,YACPR,EAAI7H,KAAKqI,UAAYR,EAAIQ,WAGtBR,EAAImO,UACPnO,EAAI7H,KAAKU,QAAQsV,QAAUnO,EAAImO,SAG5BnO,EAAIb,MACPa,EAAI7H,KAAKU,QAAQsG,KAAOa,EAAIb,KACxBa,EAAI3F,QACP2F,EAAI7H,KAAKU,QAAQwB,MAAQ2F,EAAI3F,OAE9B2F,EAAIoO,OAAS,OAGTpO,EAAIlH,SACPkH,EAAI7H,KAAKU,QAAQC,OAASkH,EAAIlH,QAG3BkH,EAAIoO,QACPpO,EAAI7H,KAAKU,QAAQuV,QAAS,EAC1BpO,EAAIoO,OAASG,EAA2BvO,EAAI3G,UAAUkG,OAC5CS,EAAI3G,WACd2G,EAAI3G,SAAWkV,EAA2BvO,EAAI3G,UAC9C2G,EAAI3G,SAAS6F,SAAQ,SAAUsP,GAC9BxO,EAAI7H,KAAKiB,YAAYoV,EAAMrW,KAC5B,MAIK6H,CACR,GACD,EAoBIyO,GAAc,SAAqBC,GAEtC,IAAIC,GAAY,EAEZnT,EAAS,SAAgB7B,EAAYyB,GAExCzB,EAAWkI,UAAUzG,GAAO,SAAU1E,GACrCiD,EAAWyF,UAAU5D,OAAO9E,EAC7B,GAAGgY,GAEEC,IACJA,GAAY,EACZ1U,IAEF,EAEIA,EAAO,SAASA,IACnByU,EAASE,eAAexP,UAAUnF,OAClCiB,sBAAsBjB,EACvB,EAQA,OANwB,SAASgS,EAAkBtS,GAGlD,OAFAA,EAAWyF,UArCqB,SAAqCzF,EAAYsS,GAElF,IAAI7M,OAAY,EAUhB,OARIzF,EAAWyU,OACdhP,EAAYgN,GAAwBzS,EAAWxB,KAAMwB,EAAWyU,OAAQnC,GACnC,iBAApBtS,EAAWwF,KAC5BC,EAAYkN,GAAoB3S,EAAWwF,KAAMxF,EAAWxB,KAAMwB,EAAWU,OA3JxD,SAA0BV,GAChD,OAAOA,EAAWN,UAAYM,EAAWN,SAASrC,MACnD,CA0JY6X,CAAiBlV,KAC3ByF,EAAY4M,GAAoBrS,EAAWxB,KAAMwB,EAAWN,SAAU4S,IAGhE7M,CACR,CAwByB0P,CAA4BnV,EAAYsS,GAC/DtS,EAAWkI,UAAYkN,GAAuBpV,EAAWkI,UAAW6M,GAC7DlT,CACR,CAEOyQ,CAAkByC,EAASE,eACnC,EAKII,GAAe,SAAsBN,GACxC,IAAK,IAAI5X,EAAOC,UAAUC,OAAQiY,EAAQ/X,MAAMJ,EAAO,EAAIA,EAAO,EAAI,GAAIK,EAAO,EAAGA,EAAOL,EAAMK,IAChG8X,EAAM9X,EAAO,GAAKJ,UAAUI,GAG7B,OAAO,SAAU+X,EAAcC,IAE9B,SAASC,EAAQxR,EAAGxC,GAGf6T,EAAMjY,QAAU4G,EACnBuR,EAAS/T,GAIV6T,EAAMrR,GAAGxC,EAAOiU,GAAQD,EAAS,CAACxR,EAAI,IAAK8Q,EAC5C,CAEAU,CAAQ,EAAGF,EACZ,CACD,EAEIG,GAAU,SAAiBxd,GAC9B,IAAIyd,EAAcvY,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,GAClFkU,EAAMlU,UAAU,GAEpB,OAAO,WACN,IAAIE,EAAOC,MAAM2H,KAAKyQ,GAEtB,OADApY,MAAM+E,UAAU0F,KAAKvK,MAAMH,EAAMF,WAC1BlF,EAAGuF,MAAM6T,EAAKhU,EACtB,CACD,EAEI8X,GAAyB,SAAgCxM,EAAQmM,GAGpE,IAAKnM,EACJ,OAAO,SAAUnH,EAAOwF,GACvB,OAAOA,EAAGxF,EACX,EAID,GAAsB,mBAAXmH,EACV,OAAOA,EAKR,IAAI5F,EA3PqB,SAA6B4F,GACtD,IAAI5F,EAAS,GAEb,OADAkR,GAAQ,EAAGtL,EAAQ5F,GACZA,CACR,CAuPc4S,CAAoB,cAAgB,WAAWxd,KAAKwQ,GAAUA,EAAS,KAAOA,GAAU,KACrG,OAAO6M,GAAQzS,EAAQ+R,EACxB,EAEIU,GAAU,SAASA,EAAQzB,EAAOe,GAErC,IAAIc,EAAc7B,EAAMvZ,KAAI,SAAUqb,GAGrC,IAAI/d,EAAO+d,EAAKjQ,QAGZkQ,EAAO1d,EAAahB,EAAcG,UAAWO,IAAS,SAAU0J,EAAOwF,EAAI8N,GAC9E9N,EAAGxF,EACJ,EAGIuU,EAASF,EAAKrb,KAAI,SAAUwb,GAG/B,OAAI1Y,MAAMI,QAAQsY,GAGW,iBAAjBA,EAAU,GACbR,EAAQ,CAACQ,GAAYlB,GAItBU,EAAQQ,EAAWlB,GAGpBmB,GAAYD,EACpB,IAEA,OAAOF,EAAKtY,WAAMC,EAAWqH,EAAkBiR,GAChD,IAEA,OAAOX,GAAa5X,WAAMC,EAAW,CAACqX,GAAU3P,OAAOL,EAAkB8Q,IAC1E,EAEI5L,GAAoB,SAA2BrB,GAClD,IAAI7Q,EAAO6Q,EAAOtN,MAAM,UAAU,GAElC,MAAO,CACNvD,KAAMA,EACNyS,WAHgB2L,GAAavN,EAAO+B,UAAU5S,EAAKsF,SAKrD,EAEI8Y,GAAe,SAAsBvN,GACxC,OAAQA,EAAOtN,MAAM,oDAAsD,IAAIb,IAAIoO,IAAMnD,QAAO,SAAU+N,GACzG,OAAOA,EAAIpW,MACZ,IAAG5C,IAAIyb,GACR,EAEIE,GAAY,SAAmBxN,GAClC,OAAOA,EAAO+B,UAAU,EAAG/B,EAAOvL,OAAS,EAC5C,EAEIgZ,GAAoB,iCACpBC,GAAY,iBACZC,GAAW,eACXC,GAAe,UACfC,GAAiB,SACjBC,GAAW,+BACX/Y,GAAU,QAEVuY,GAAc,SAAqBtN,GAEtC,OAAI0N,GAAUle,KAAKwQ,GACA,SAAXA,EAGJjL,GAAQvF,KAAKwQ,GACTuN,GAAaC,GAAUxN,IAG3ByN,GAAkBje,KAAKwQ,GACnBxN,EAAYwN,GAGhB6N,GAAere,KAAKwQ,GAChBwN,GAAUxN,GAGd2N,GAASne,KAAKwQ,IAAW4N,GAAape,KAAKwQ,GACvCA,EAGJ8N,GAASte,KAAKwQ,GACViB,WAAWjB,GAIZA,CACR,EAEI+N,GAAa,SAAoBlV,GACpC,IAAIuI,GAASvI,EAAQ,IAAInG,MAAM,wEAC/B,MAAO,CACNmG,MAAOoI,WAAWG,EAAM,IACxB4M,MAAO5M,EAAM,GAEf,EAMIuG,GAAe,SAAsBvV,GACxC,IAAIC,EAAImC,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAGzE3E,OAAM,EACN2J,EAAM,CAAC,EAEX,IAAK3J,KAAOuC,EACNA,EAAEhD,eAAeS,KAGtB2J,EAAI3J,QAAyB,IAAXwC,EAAExC,GAAuBuC,EAAEvC,GAAOwC,EAAExC,IAGvD,OAAO2J,CACR,EAKIyU,GAAsB,SAA6BjO,GACtD,IAAIkO,EAAM3f,OACN4f,EAASnO,EAAO1C,MAAM,KAO1B,OANA6Q,EAAOxR,SAAQ,SAAUyR,EAAO5Q,GAC1B0Q,EAAIC,EAAO3Q,MAGhB0Q,EAAMA,EAAIC,EAAO3Q,IAClB,IACO0Q,IAAQ3f,OAAS2f,EAAM,IAC/B,EAKIG,GAAU,SAAiBrO,GAG9B,MAAI,uDAAuDxQ,KAAKwQ,GACxDA,EAAOtN,MAAM,6BAA6BkV,QAAO,SAAUpO,EAAK8U,GACtE,IAAIlN,EAAQkN,EAAQhR,MAAM,KAE1B,OADA9D,EAAI4H,EAAM,IAAMkM,GAAYlM,EAAM,IAC3B5H,CACR,GAAG,CAAC,GAIE8T,GAAYtN,EACpB,EAUIuO,GAAQ,SAAe1V,GAC1B,OAAOX,SAASW,EAAO,GACxB,EAKIoH,GAAO,SAAcD,GACxB,OAAOA,EAAOC,MACf,EA+BIvD,GAAQ,SAAelD,GAC1B,MAAkE,iBAA9C,IAARA,EAAsB,YAAcH,EAAQG,KAA8B,OAARA,EACtEgV,KAAKjD,MAAMiD,KAAKC,UAAUjV,IAE3BA,CACR,EAEI6D,GAAY,SAAmBjB,GAClC,OAAOA,EAAIsF,OACZ,EA6BIxP,GAAM,WACT,OAAO3D,OAAOmc,YAAYxY,KAC3B,EAEI4I,GAAU,SAAiB0I,EAAKkL,EAASC,EAAOzJ,GACnD,IAAI0J,EAAM,IAAIC,eACV3J,GACHA,EAAQ0J,GAETA,EAAIE,KAAK,MAAOtL,GAAK,GACrBoL,EAAIG,OAAS,WACZL,EAAQE,EAAII,SACb,EACIL,IACHC,EAAIK,QAAU,WACbN,EAAMC,EAAKA,EAAIM,OAChB,GAEDN,EAAIO,MACL,EAEIjW,GAAQ,SAAe9G,EAAGC,GAC7B,OAAI+c,GAAShd,GACLid,GAAajd,EAAGC,GAEpBsC,MAAMI,QAAQ3C,GACVkd,GAAYld,EAAGC,GAEhBD,IAAMC,CACd,EAEI+c,GAAW,SAAkB5V,GAChC,OAAOA,IAAQkC,OAAOlC,EACvB,EAEI6V,GAAe,SAAsBjd,EAAGC,GAC3C,IAAK,IAAIgJ,KAAKjJ,EACb,IAAKC,EAAEjD,eAAeiM,IAAMjJ,EAAEiJ,KAAOhJ,EAAEgJ,GACtC,OAAO,EAGT,OAAO,CACR,EAEIiU,GAAc,SAAqBld,EAAGC,GACzC,OAAOD,EAAEqC,QAAUpC,EAAEoC,QAAUrC,EAAEmd,OAAM,SAAUlb,EAAGgH,GACnD,OAAOhH,IAAMhC,EAAEgJ,EAChB,GACD,EAEI9L,GAAa,SAAoBiK,GACpC,OAAOkC,OAAO8T,KAAKhW,GAAK3H,KAAI,SAAU4d,GACrC,MAAO,IAAMA,EAAI,GAClB,IAAGlQ,KAAK,KACT,EAMImQ,GAAO,WACP,SAASA,IACL,IAAIxK,EAAU1Q,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC/EkC,EAAUlC,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAKwB,SAASC,cAAc,QA3hE5F,SAAUkW,EAAUvQ,GACvC,KAAMuQ,aAAoBvQ,GACxB,MAAM,IAAI+T,UAAU,oCAExB,CAwhEQC,CAAe/V,KAAM6V,GAGrB7V,KAAKgW,SAAWlI,GAAa+H,EAAKxK,UAAWA,GAG7CrL,KAAKiW,SAAWpZ,EAChBmD,KAAKkW,OAAS,KACdlW,KAAKmW,UAAY,KACjBnW,KAAKoW,gBAAkB,KACvBpW,KAAKqW,WAAa,KAClBrW,KAAKsW,SAAW,KAChBtW,KAAKuW,SAAW,KAChBvW,KAAKwW,SAAW,KAGhBxW,KAAKyW,SAAW,KAChBzW,KAAK0W,YAAc,KACnB1W,KAAK2W,aAAe,KACpB3W,KAAK4W,WAAa,KAGlB5W,KAAK6W,OACT,CA0LA,OAnLA/W,EAAY+V,EAAM,CAAC,CACf7f,IAAK,gBAMLgJ,MAAO,SAAuBnC,GAC1B,OAAOmD,KAAKiW,WAAapZ,CAC7B,GACD,CACC7G,IAAK,cACLgJ,MAAO,SAAwBhJ,EAAKgJ,GAChCgB,KAAKqW,WAAWrgB,GAAOgJ,CAC3B,GACD,CACChJ,IAAK,eACLgJ,MAAO,WACH,OAAOgB,KAAKqW,UAChB,GACD,CACCrgB,IAAK,cACLgJ,MAAO,SAAqBhJ,GACxB,OAAOgK,KAAKqW,WAAWrgB,EAC3B,GACD,CACCA,IAAK,YACLgJ,MAAO,SAAsBhJ,EAAKP,GAC9BuK,KAAKsW,SAAStgB,GAAOP,CACzB,GACD,CACCO,IAAK,YACLgJ,MAAO,SAAmBhJ,GACtB,OAAOgK,KAAKsW,SAAStgB,EACzB,GACD,CACCA,IAAK,UACLgJ,MAAO,WACHgB,KAAK2W,aAAa3W,MAGlBA,KAAKmW,UAAUva,aAGfoE,KAAKwS,eAAexP,UAAUzH,UAE9ByE,KAAK0W,YAAY1W,KACrB,GACD,CACChK,IAAK,SACLgJ,MAAO,WACEgB,KAAKwS,gBAAmBxS,KAAKwS,eAAexP,YACjDhD,KAAKwS,eAAexP,UAAU7D,QAC9Ba,KAAKwS,eAAexP,UAAUnF,OAC9BmC,KAAKuW,SAASvW,KAAKwS,eAAgBxS,KAAKkW,QAC5C,GAMD,CACClgB,IAAK,QACLgJ,MAAO,WACH,IAAI8X,EAAQ9W,KAsDZ,GAnDAA,KAAKoW,gBAAkBpW,KAAKgW,SAASjT,KACrC/C,KAAK2W,aAAe3W,KAAKgW,SAASe,YAClC/W,KAAK0W,YAAc1W,KAAKgW,SAASgB,WACjChX,KAAKyW,SAAWzW,KAAKgW,SAASiB,QAC9BjX,KAAK4W,WAAa5W,KAAKgW,SAASkB,UAChClX,KAAKkW,OAASlW,KAAKgW,SAAShX,MAC5BgB,KAAKsW,SAAWtW,KAAKgW,SAASmB,QAC9BnX,KAAKqW,WAAarW,KAAKgW,SAASoB,UAChCpX,KAAKwW,SAAWxW,KAAKgW,SAASqB,QAMzBrX,KAAKiW,SAAS3Z,UAAUgb,SAAS,SAClCtX,KAAKiW,SAAS3Z,UAAUC,IAAI,QAIhCyD,KAAKmW,UAAY7R,EAAkBtE,KAAKiW,SAAU,CAAC,eAAe,SAAUjX,GACxE8X,EAAM9X,MAAQA,CAClB,IAGIgB,KAAKoW,gBAAgBra,OAASiE,KAAKiW,WACnCnb,MAAM2H,KAAKzC,KAAKoW,gBAAgBra,KAAKkB,UAAU6F,SAAQ,SAAU+F,GAC7DiO,EAAMb,SAASjZ,YAAY6L,EAC/B,IACA7I,KAAKoW,gBAAgBra,KAAOiE,KAAKiW,UAIhCjW,KAAKoW,gBAAgBrT,MAAS/C,KAAKoW,gBAAgBnZ,WACpD+C,KAAKoW,gBAAgBrT,KAAO,QAIhC/C,KAAKuW,SAAWlE,GAAYrS,MAGT,OAAfA,KAAKhB,OACLgB,KAAKuX,QAAQvX,KAAKhB,OAItBgB,KAAKiW,SAASxZ,QAAQnB,MAAQ,cAG9B0E,KAAKyW,SAASzW,KAAMA,KAAKhB,OAGrBgB,KAAKwW,SAAU,CACf,IAAIa,EAAUlb,SAASC,cAAc,KACrCib,EAAQjT,UAAY,eACpBiT,EAAQG,KAAOxX,KAAKwW,SAAS7M,IAC7B0N,EAAQI,UAAY,EACpBJ,EAAQ/V,OAAS,SACjB+V,EAAQK,IAAM,sBACdL,EAAQM,YAAc3X,KAAKwW,SAASoB,MACpC5X,KAAKiW,SAASjZ,YAAYqa,EAC9B,CACJ,GACD,CACCrhB,IAAK,UACLgJ,MAAO,SAAiBA,GACpBgB,KAAKuW,SAASvW,KAAKwS,eAAgBxT,GAEnCgB,KAAK4W,WAAW5W,KAAMhB,EAC1B,GACD,CACChJ,IAAK,iBAML6hB,IAAK,WACD,OAAO7X,KAAKoW,eAChB,GACD,CACCpgB,IAAK,OACL6hB,IAAK,WACD,OAAO7X,KAAKiW,QAChB,GACD,CACCjgB,IAAK,QACL6hB,IAAK,WACD,OAAO7X,KAAKkW,MAChB,EACA4B,IAAK,SAAgB9Y,GACjBgB,KAAKkW,OAA0B,iBAAVlX,EAAqBwV,GAAQxV,GAASA,EAC3DgB,KAAKuX,QAAQvY,EACjB,IACA,CAAC,CACDhJ,IAAK,UACLgJ,MAAO,WACH,MAAO,CACHoY,UAAWW,KACXZ,QAASa,KACThZ,MAAO,KACP+D,KAAM,KACNkU,QAAS,SAAiB/L,GAAO,EACjCgM,UAAW,SAAmBhM,EAAMlM,GAAQ,EAC5C+X,YAAa,SAAqB7L,GAAO,EACzC8L,WAAY,SAAoB9L,GAAO,EACvCmM,QAAS,CACLO,MAAO,mBACPjO,IAAK,iCAGjB,KAEGkM,CACX,CAtNW,GAwNPoC,GAAwB,SAA+BjZ,EAAOkZ,EAAQC,EAAQC,GACjF,MAAO,CACNR,MAAiB,IAAV5Y,EAAckZ,EAASC,EAC9BC,SAAUpZ,EAAQoZ,EAClBpZ,MAAOA,EAET,EAKIqZ,GAAY,GAUZN,GAAe,WAClB,OAAOX,EACR,EAEIY,GAAa,WAChB,OAAOb,EACR,EAEIC,GAAY,CACfkB,YAAa,QACbC,cAAe,OACfC,aAAc,SACdC,eAAgB,QAChBC,YAAa,QACbC,cAAe,OACfC,WAAY,OACZC,aAAc,MACdC,YAAa,QACbC,cAAe,OACfC,cAAe,UACfC,gBAAiB,SACjBC,cAAe,UACfC,gBAAiB,SACjBC,mBAAoB,eACpBC,qBAAsB,eAGnBlC,GAAU,CACbmC,EAAG,SAAWta,EAAOoY,GACpB,OAAOa,GAAsBjZ,EAAOoY,EAAUmB,cAAenB,EAAUkB,YAAa,GACrF,EACAiB,EAAG,SAAWva,EAAOoY,GACpB,OAAOa,GAAsBjZ,EAAOoY,EAAUqB,eAAgBrB,EAAUoB,aAAc,GACvF,EACAgB,EAAG,SAAWxa,EAAOoY,GACpB,OAAOa,GAAsBjZ,EAAOoY,EAAUuB,cAAevB,EAAUsB,YAAa,GACrF,EACAe,EAAG,SAAWza,EAAOoY,GACpB,OAAOa,GAAsBjZ,EAAOoY,EAAUyB,aAAczB,EAAUwB,WAAY,IACnF,EACAc,EAAG,SAAW1a,EAAOoY,GACpB,OAAOa,GAAsBjZ,EAAOoY,EAAU2B,cAAe3B,EAAU0B,YAAa,GACrF,EACA7gB,EAAG,SAAW+G,EAAOoY,GACpB,OAAOa,GAAsBjZ,EAAOoY,EAAU6B,gBAAiB7B,EAAU4B,cAAe,GACzF,EACAtO,EAAG,SAAW1L,EAAOoY,GACpB,OAAOa,GAAsBjZ,EAAOoY,EAAU+B,gBAAiB/B,EAAU8B,cAAe,GACzF,EACAS,GAAI,SAAY3a,EAAOoY,GACtB,OAAOa,GAAsBjZ,EAAOoY,EAAUiC,qBAAsBjC,EAAUgC,mBAAoB,IACnG,GAGG7U,GAAa,CAChB,MAASiQ,GACT,QAAWJ,GACX,UAAaA,GACb,WAAcA,GACd,YAAeA,IAmEZ9O,GAAO,SAAczI,GACxB,IAAI0D,EAAS8X,GAAUpV,QAAO,SAAUqP,GACvC,OAAOA,EAASsH,cAAc/c,EAC/B,IACA,OAAO0D,EAASA,EAAO,GAAK,IAC7B,EAMImQ,GAAS,WACZ,IAAI7T,EAAUlC,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,QAAKM,EAC9EoQ,EAAU1Q,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,QAAKM,EAUlF,GANI4B,IAAYmI,EAAcnI,KAC7BwO,EAAUxO,EACVA,OAAU5B,IAIP4B,IAAWyI,GAAKzI,GAApB,CAKIwO,GAAWA,EAAQtI,OACtBsI,EAAQtI,KAAOoP,GAA2B,CAAC9G,EAAQtI,OAAO,KAItDsI,GAAWxO,IACfwO,EAlG6B,SAAkCxO,GAChE,IAAIgd,EAAclf,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,CAAC,EACnFmf,EAAcnf,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAGnF8B,EAAUI,EAAQJ,QAElB4O,EAAU,CACb0O,KAAM,CAAC,GAGR,IAAK,IAAIC,KAAQvd,EAEhB,GAAKA,EAAQlH,eAAeykB,GAA5B,CAIA,IAAIC,EAAmBJ,EAAYG,GAC/Bhb,EAAQvC,EAAQud,GAEhBC,IAEHjb,EAAkB,QADlBA,EAAQib,EAAiBjb,IACA6D,GAAMiX,EAAYE,IAAShb,EACpDqM,EAAQ2O,GAAQhb,EARjB,CAgBD,MAJwB,UAApBvC,EAAQ4a,UACXhM,EAAQgM,SAAU,GAGZhM,CACR,CAkEY6O,CAAyBrd,EAAS0H,GA1BtCrC,EAAS,CAAC,EAAG2T,GAAKxK,UAAW,CAAE+L,UAAWlV,EAAS,CAAC,EAAGkV,IAAYD,QAASjV,EAAS,CAAC,EAAGiV,QA8B5Fta,IAGEwO,IACJA,EAAU,CAAC,GAIPA,EAAQtI,OACZsI,EAAQtI,KAAOkP,GAA0B,CAACpV,IAAU,KAKtD,IAAIyV,EAAW,IAAIuD,GAAKxK,EAASxO,GAMjC,OAHAwb,GAAU9S,KAAK+M,GAGRA,CAjCP,CAkCD,EAgBI6H,GAAO,SAAc1kB,GACrB,OAAO,WACH2kB,WAAW3kB,EAAI,EACnB,CACJ,EAEI4kB,GAAQ,WACR,OAAOtjB,KAAKsB,KAChB,EAEIiiB,GAAW,SAAkB9V,GAC7B,IAAI8G,EAAW3Q,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAG/E4f,EAAWzM,GAAa,CAAE0M,WAAW,GAF3B7f,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,CAAC,GAI/E8f,EAAmB,KACnBC,EAAgB,KAChBC,EAAiB,KACjBC,EAAiB,EACjBC,EAAsB,KAEtBC,GAAS,EAETC,EAAQ,KAERC,EAAW,WACX,OAAOF,CACX,EAEIG,EAAY,WACZ,OAAyB,OAAlBP,CACX,EAEIQ,EAAmB,WACnB,OAAO/e,SAASgf,MACpB,EAGIjQ,EAAO,SAASA,IAChB,IAAIkQ,EAAcf,KAEdgB,EAAqBZ,EAAmBW,EAExCE,EAAUhQ,EAAW+P,EAGzBZ,EAAmBW,EAAcE,EAMjC9W,EAHc4W,EAAcV,EAAgBE,EAAiBS,GAM7DN,EAAQX,WAAWlP,EAAMoQ,EAC7B,EAEIrQ,EAAQ,WAEJ+P,IACA3a,IAKA4a,MAKJP,EAAgBL,KAGhBD,YAAW,WACP5V,EAAG,EACP,GAAG,GAGHiW,EAAmBJ,KAAU/O,EAG7BiQ,IAGIL,IACAM,IAKJT,EAAQX,YAAW,WACflP,GACJ,GAAGI,GACP,EAEImQ,EAAO,WAGPC,aAAaX,GACbA,EAAQ,KACRL,EAAgB,KAChBD,EAAmB,KACnBE,EAAiB,KACjBC,EAAiB,EACjBC,EAAsB,KACtBC,GAAS,EAETa,GACJ,EAwBItb,EAAS,WAEJ2a,KAAeC,MAAeC,MAInCJ,GAAS,EAETS,IAEAK,IACJ,EAGIC,EAAQ,WACRH,aAAaX,GACbJ,EAAiBN,KACjBQ,EAAsBJ,EAAmBE,CAC7C,EAGIiB,EAAO,WAEPhB,GAAkBP,KAAUM,EAC5BA,EAAiB,KAGjBF,EAAmBJ,KAAUQ,EAG7BE,EAAQX,YAAW,WACflP,GACJ,GAAG2P,EACP,EAKIW,EAAkB,WAElBK,GACJ,EASIF,EAAoC,WACpCxf,SAASL,oBAAoB,mBAAoBggB,EACrD,EAEIP,EAAqC,WACrCpf,SAASoD,iBAAiB,mBAAoBuc,EAClD,EAEIA,EAAyB,WACrBZ,IACAM,IAfCP,KAELW,GAiBJ,EAYA,OAPIrB,EAASC,WACTvP,IAMG,CACHA,MAAOA,EACPwQ,KAAMtB,GAAKsB,GACXtc,MAAOgb,IArGC,WAERsB,IACAxQ,GACJ,IAkGI8Q,MAAO5B,IA7FC,WAEHc,MAAeC,MAIpBJ,GAAS,EAETa,IAEAE,IACJ,IAmFIxb,OAAQA,EAEhB,EAEI2b,GAAa,SAAoB7V,GAC9B,SAASxQ,KAAKwQ,KACjBA,EAAS,KAAOA,GAElB,IAAIoB,EAAQpB,EAAO1C,MAAM,KACzB,OAAO2D,WAAWG,EAAM,IAAMzR,EAASyR,EAAM,GAAGpR,cAClD,EAEI8lB,GAAS,SAAgBnlB,EAAMqjB,GACjC,OAtxGY,SAAiBrjB,EAAMqjB,GAEpC,OADArjB,EAAKolB,SAAS/B,EAAK,IAAM,EAAGA,EAAK,IAAM,EAAGA,EAAK,IAAM,EAAGA,EAAK,IAAM,GAC5DrjB,CACR,CAmxGSqlB,CAAQrlB,EAAMqjB,EAAK1W,MAAM,KAAKzL,IAAI0c,IAC3C,EAwYI0H,GAAiB,SAAwBtlB,EAAMqP,GAQjD,IAGIkW,EAHQlW,EAAOtN,MAAM,kIAGNkV,QAAO,SAAUpO,EAAKmI,GAkBvC,MAhBI,OAAOnS,KAAKmS,GACdnI,EAAI8C,KAAOwZ,GAAOtc,EAAI8C,KAAMqF,EAAKrE,MAAM,KAAK,IACnC,OAAO9N,KAAKmS,GACrBnI,EAAI2c,KAAOL,GAAOtc,EAAI2c,KAAMxU,EAAKrE,MAAM,KAAK,IAIrC,OAAO9N,KAAKmS,GACjBnI,EAAI4c,KAAOP,GAAWlU,EAAKI,UAAU,IAI9B,2CAA2CvS,KAAKmS,KACrDnI,EAAI2L,SAAW0Q,GAAWlU,IAGzBnI,CACT,GAAG,CACD4c,KAAM,KACNjR,SAAU,KACVxU,KAAM,KACNI,KAAM,KACNslB,MAAM,EACN/Z,KAAMwZ,GAAO5hB,EAAQvD,GAAO,KAC5BwlB,KAAML,GAAO5hB,EAAQvD,GAAO,kBAI9B,GAAIA,EAAOulB,EAAO5Z,MAAQ3L,GAAQulB,EAAOC,KACvC,OAAOD,EAIT,GAAIA,EAAO/Q,SAAW+Q,EAAOC,KAAOD,EAAO5Z,KACzC,OAAO4Z,EAIT,IAAI7iB,EAAO1C,EAAOulB,EAAO5Z,KAOrBvL,EAAOmlB,EAAO/Q,SAAW9R,EAAO6iB,EAAO/Q,SAG3C,OAAoB,OAAhB+Q,EAAOE,MAAiBrlB,GAAQmlB,EAAO/Q,SAAW+Q,EAAOE,MAC3DF,EAAOG,MAAO,EACPH,IAITA,EAAOnlB,KAAOA,EAGdmlB,EAAOvlB,KAAO,IAAIC,KAAKD,EAAKiC,UAAYsjB,EAAOnlB,MAExCmlB,EACT,EAEII,GAAW,SAAkB3lB,EAAMqP,GAErC,MAAI,wFAAwFxQ,KAAKwQ,GAnd9E,SAAwBrP,EAAMqP,GAOjD,IAAIoB,EAAQpB,EAAOtN,MAAM,uJAGzB,GAAI0O,EAAM3M,OAAS,EAAG,CACpB,IAAI8hB,EAAO,GACXnV,EAAMzE,SAAQ,SAAU8F,GACtB8T,EAAOvW,EAAO1C,MAAMmF,GAAG,IAAM,EAC/B,IACA,IAAI4T,EAAOE,EAAKtW,OAAOvN,MAAM,uBACzB2jB,GACFjV,EAAMhC,KAAKiX,EAAK,GAEpB,CAGA,IAAIH,EAAS9U,EAAMwG,QAAO,SAAUpO,EAAKmI,GAqBvC,MAnBI,iCAAiCnS,KAAKmS,KACxCnI,EAAI1I,IAAM,QAAQtB,KAAKmS,GAAQzJ,SAASyJ,EAAM,IAAe,UAATA,EAAmB,EAAIA,GAIzE,MAAMnS,KAAKmS,GACbnI,EAAIwa,KAAO8B,GAAO5hB,EAAQvD,GAAOgR,EAAKI,UAAU,IAIzC,OAAOvS,KAAKmS,GACjBnI,EAAI4c,KAAOP,GAAWlU,EAAKI,UAAU,IAI9B,eAAevS,KAAKmS,KACzBnI,EAAI5H,MAAQ+P,GAGXnI,CACT,GAAG,CACD4c,KAAM,KACNtlB,IAAK,KACLc,MAAO,KACPoiB,KAAM,KACNrjB,KAAM,KACNI,KAAM,KACNslB,MAAM,IAGR,GAAKH,EAAOlC,KA+BL,CAELkC,EAAOlC,KAAK/iB,QAAQ,GACpBilB,EAAOlC,KAAOriB,EAASukB,EAAOlC,KAAMkC,EAAOtkB,OAC3CskB,EAAOlC,KAAO7iB,EAAc+kB,EAAOlC,KAAMkC,EAAOplB,KAEhD,IAAI0lB,EAAQN,EAAOlC,KAAOrjB,EACtB8lB,EAAe,EAYnB,GAXID,EAAQ,IACVC,EAAeD,EAGfN,EAAOlC,KAAK0C,YAAYR,EAAOlC,KAAKziB,cAAgB,GAGpDilB,EAAQN,EAAOlC,KAAOrjB,GAIJ,OAAhBulB,EAAOE,MAAiBK,EAAeP,EAAOE,KAAO,EAEvD,OADAF,EAAOG,MAAO,EACPH,EAGTA,EAAOnlB,KAAOylB,CAChB,KAxDkB,CAGhBN,EAAOlC,KAAO9f,EAAQvD,GACtBulB,EAAOlC,KAAK/iB,QAAQ,GACpBilB,EAAOlC,KAAOriB,EAASukB,EAAOlC,KAAMkC,EAAOtkB,OAC3CskB,EAAOlC,KAAO7iB,EAAc+kB,EAAOlC,KAAMkC,EAAOplB,KAGhD,IAAI6lB,EAAeV,GAAeC,EAAOlC,KAAMhU,GAG/C,GAAI2W,EAAaN,KACf,OAAOH,EAITA,EAAOlC,KAAO9f,EAAQ/B,EAASxB,EAAMulB,EAAOlC,OAAS2C,EAAahmB,KAAOgmB,EAAahmB,KAAOgmB,EAAara,MAG1G,IAAIvL,EAAOmlB,EAAOlC,KAAOrjB,EACrBI,EAAO,IAETmlB,EAAOlC,KAAO9f,EAAQyiB,EAAara,MACnC4Z,EAAOlC,KAAK0C,YAAYR,EAAOlC,KAAKziB,cAAgB,GAGpDR,EAAOmlB,EAAOlC,KAAOrjB,GAGvBulB,EAAOnlB,KAAOA,CAChB,CA6BA,OAFAmlB,EAAOvlB,KAAOuD,EAAQgiB,EAAOlC,MAEtBkC,CACT,CAiWWU,CAAejmB,EAAMqP,GAI1B,QAAQxQ,KAAKwQ,GAnWG,SAAyBrP,EAAMqP,GAcnD,IAAIoB,EAAQpB,EAAOtN,MAAM,iEAGzB,GAAI0O,EAAM3M,OAAS,EAAG,CACpB,IAAI8hB,EAAO,GACXnV,EAAMzE,SAAQ,SAAU8F,GACtB8T,EAAOvW,EAAO1C,MAAMmF,GAAG,IAAM,EAC/B,IACA,IAAI4T,EAAOE,EAAKtW,OAAOvN,MAAM,uBACzB2jB,GACFjV,EAAMhC,KAAKiX,EAAK,GAEpB,CAEA,IAAIH,EAAS9U,EAAMwG,QAAO,SAAUpO,EAAKmI,GAgBvC,MAdI,iCAAiCnS,KAAKmS,KACxCnI,EAAI1I,IAAM,QAAQtB,KAAKmS,GAAQzJ,SAASyJ,EAAM,IAAe,UAATA,EAAmB,EAAIA,GAIzE,MAAMnS,KAAKmS,GACbnI,EAAIwa,KAAO8B,GAAO5hB,EAAQvD,GAAOgR,EAAKI,UAAU,IAIzC,OAAOvS,KAAKmS,KACjBnI,EAAI4c,KAAOP,GAAWlU,EAAKI,UAAU,KAGlCvI,CACT,GAAG,CACD4c,KAAM,KACNtlB,IAAK,KACLkjB,KAAM,KACNrjB,KAAM,KACNI,KAAM,KACNslB,MAAM,IAGR,GAAKH,EAAOlC,KA+BL,CAELkC,EAAOlC,KAAO7iB,EAAc+kB,EAAOlC,KAAMkC,EAAOplB,KAEhD,IAAI+lB,EAASX,EAAOlC,KAAOrjB,EACvB8lB,EAAe,EAgBnB,GAfII,EAAS,IACXJ,EAAeI,EAGfX,EAAOlC,KAAK/iB,QAAQ,GACpBilB,EAAOlC,KAAKriB,SAASukB,EAAOlC,KAAK1iB,WAAa,GAG9CH,EAAc+kB,EAAOlC,KAAMkC,EAAOplB,KAGlC+lB,EAASX,EAAOlC,KAAOrjB,GAIL,OAAhBulB,EAAOE,MAAiBK,EAAeP,EAAOE,KAAO,EAEvD,OADAF,EAAOG,MAAO,EACPH,EAGTA,EAAOnlB,KAAO8lB,CAChB,KA1DkB,CAEhBX,EAAOlC,KAAO7iB,EAAc+C,EAAQvD,GAAOulB,EAAOplB,KAGlD,IAAI6lB,EAAeV,GAAeC,EAAOlC,KAAMhU,GAG/C,GAAI2W,EAAaN,KACf,OAAOH,EAITA,EAAOlC,KAAO9f,EAAQ/B,EAASxB,EAAMulB,EAAOlC,OAAS2C,EAAahmB,KAAOgmB,EAAahmB,KAAOgmB,EAAara,MAG1G,IAAIvL,EAAOmlB,EAAOlC,KAAOrjB,EACrBI,EAAO,IAETmlB,EAAOlC,KAAO9f,EAAQyiB,EAAara,MACnC4Z,EAAOlC,KAAK/iB,QAAQ,GACpBilB,EAAOlC,KAAKriB,SAASukB,EAAOlC,KAAK1iB,WAAa,GAG9CH,EAAc+kB,EAAOlC,KAAMkC,EAAOplB,KAGlCC,EAAOmlB,EAAOlC,KAAOrjB,GAGvBulB,EAAOnlB,KAAOA,CAChB,CA+BA,OAFAmlB,EAAOvlB,KAAOuD,EAAQgiB,EAAOlC,MAEtBkC,CACT,CA+OWY,CAAgBnmB,EAAMqP,GAI3B,6CAA6CxQ,KAAKwQ,GAjPnC,SAAwBrP,EAAMqP,GAgBjD,IAAIoB,EAAQpB,EAAOtN,MAAM,+EAGzB,GAAI0O,EAAM3M,OAAS,EAAG,CACpB,IAAI8hB,EAAO,GACXnV,EAAMzE,SAAQ,SAAU8F,GACtB8T,EAAOvW,EAAO1C,MAAMmF,GAAG,IAAM,EAC/B,IACA,IAAI4T,EAAOE,EAAKtW,OAAOvN,MAAM,uBACzB2jB,GACFjV,EAAMhC,KAAKiX,EAAK,GAEpB,CAGA,IAAIH,EAAS9U,EAAMwG,QAAO,SAAUpO,EAAKmI,GAgBvC,MAdI,6CAA6CnS,KAAKmS,KACpDnI,EAAI1I,IAAMb,EAliCY,SAA+B+P,GAC1D,OAAOA,EAAOjQ,OAAO,GAAGoT,cAAgBnD,EAAO0B,MAAM,EACtD,CAgiCqBqV,CAAsBpV,KAInC,MAAMnS,KAAKmS,GACbnI,EAAIwa,KAAO8B,GAAO5hB,EAAQvD,GAAOgR,EAAKI,UAAU,IAIzC,OAAOvS,KAAKmS,KACjBnI,EAAI4c,KAAOP,GAAWlU,EAAKI,UAAU,KAGlCvI,CACT,GAAG,CACD4c,KAAM,KACNtlB,IAAK,KACLkjB,KAAM,KACNrjB,KAAM,KACNI,KAAM,KACNslB,MAAM,IAIR,GAAKH,EAAOlC,KAuBL,CAELkC,EAAOlC,KAAOnjB,EAAOqlB,EAAOlC,KAAMkC,EAAOplB,KAEzC,IAAIkmB,EAASd,EAAOlC,KAAOrjB,EAO3B,GANIqmB,EAAS,IACXd,EAAOlC,KAAK/iB,QAAQilB,EAAOlC,KAAK9iB,UAAY,GAC5C8lB,EAASd,EAAOlC,KAAOrjB,GAIL,OAAhBulB,EAAOE,MAAiBY,GAAUrnB,EAASsnB,KAAOf,EAAOE,KAE3D,OADAF,EAAOG,MAAO,EACPH,EAGTA,EAAOnlB,KAAOimB,CAChB,KAxCkB,CAEhBd,EAAOlC,KAAOnjB,EAAOqD,EAAQvD,GAAOulB,EAAOplB,KAG3C,IAAI6lB,EAAeV,GAAeC,EAAOlC,KAAMhU,GAG/C,GAAI2W,EAAaN,KACf,OAAOH,EAITA,EAAOlC,KAAO9f,EAAQ/B,EAASxB,EAAMulB,EAAOlC,OAAS2C,EAAahmB,KAAOgmB,EAAahmB,KAAOgmB,EAAara,MAG1G,IAAIvL,EAAOmlB,EAAOlC,KAAOrjB,EAErBI,EAAO,GACTmlB,EAAOlC,KAAK/iB,QAAQilB,EAAOlC,KAAK9iB,UAAY,GAG9CglB,EAAOnlB,KAAOA,CAChB,CAqBA,OAFAmlB,EAAOvlB,KAAOuD,EAAQgiB,EAAOlC,MAEtBkC,CACT,CA2IWgB,CAAevmB,EAAMqP,GAI1B,SAASxQ,KAAKwQ,IAAW,OAAOxQ,KAAKwQ,GA7IvB,SAAuBrP,EAAMqP,GAM/C,IAGIkW,EAHQlW,EAAOtN,MAAM,wDAGNkV,QAAO,SAAUpO,EAAKmI,GAWvC,MATI,QAAQnS,KAAKmS,GACfnI,EAAIwa,KAAO8B,GAAO5hB,EAAQvD,GAAOgR,GAI1B,OAAOnS,KAAKmS,KACjBnI,EAAI4c,KAAOP,GAAWlU,EAAKI,UAAU,KAGlCvI,CACT,GAAG,CACD4c,KAAM,KACNpC,KAAM,KACNrjB,KAAM,KACN0lB,MAAM,EACNtlB,KAAM,OAGJA,EAAOmlB,EAAOlC,KAAOrjB,EASzB,OANII,EAAO,IACTmlB,EAAOlC,KAAK/iB,QAAQilB,EAAOlC,KAAK9iB,UAAY,GAC5CH,EAAOmlB,EAAOlC,KAAOrjB,GAIH,OAAhBulB,EAAOE,MAAiBrlB,GAAQpB,EAASwnB,IAAMjB,EAAOE,MACxDF,EAAOG,MAAO,EACPH,IAGTA,EAAOnlB,KAAOA,EACdmlB,EAAOvlB,KAAOuD,EAAQgiB,EAAOlC,MAEtBkC,EACT,CA+FWkB,CAAczmB,EAAMqP,GAIzB,2CAA2CxQ,KAAKwQ,GAC3CiW,GAAetlB,EAAMqP,GAGvB,IACT,EAwCIqX,GAAkB,SAAyBC,EAAQjZ,IACvC,IAAXiZ,EAMkB,iBAAXA,EAMXrD,YAAW,WACV5V,EAAG,EACJ,GAAG,GAPF4V,YAAW,WACV5V,EAAG7L,EAAY8kB,GAAQ1kB,UAAYoC,IAAQpC,UAC5C,GAAG,GA70HY,SAAoByL,GAEpC,IAAIuQ,EAAM,IAAIC,eAEV3c,EAAMtB,KAAKsB,MACf0c,EAAIE,KAAK,OAAQvgB,OAAOoI,SAAW,YAAczE,GACjD0c,EAAI2I,iBAAiB,eAAgB,aACrC3I,EAAI2I,iBAAiB,gBAAiB,YAEtC3I,EAAIG,OAAS,WACZ,IAAIyI,EAAkC,IAApBtlB,EAAMtB,KAAKsB,OACzBulB,EAAe,IAAI7mB,KAAKge,EAAI8I,kBAAkB,SAClDrZ,EAAG,IAAIzN,KAAK6mB,EAAa7kB,UAAY4kB,GACtC,EAEA5I,EAAIO,MACL,CAqzHEwI,EAAW,SAAUhnB,GACpB0N,EAAG1N,EAAKiC,UAAYoC,IAAQpC,UAC7B,GAYF,EAMIglB,GAA4B,CAC/BC,OAAQ,CAAC,IAAK,IAAK,IAAK,KACxBC,SAAS,EACTR,OAAQ,KACRnS,SAAU,KAOP4S,GAAgB,SAAuB3c,GAC1C,OAAOW,EAAS,CAGf6I,UAAU,EACV3S,OAAQ,KACR4G,MAAO,KACP+b,MAAO,KAGP7F,OAAQ,WAAmB,EAC3BiJ,SAAU,SAAkBnf,GAAQ,GAElCuC,EACJ,EAOI6c,GAAkB,SAAyBC,GAC9C,IAAIhT,EAAU1Q,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAGnF,GAAqB,iBAAV0jB,EACV,KAAM,iEAOP,IAAI/c,GAHJ+J,EAAUyC,GAAa,CAAEqG,MAAO,UAAW7S,OAAQ,EAAGgd,OAAQ,IAAMhT,SAAU,KAAQD,IAGjE/J,OACjBmT,EAAU4J,EAGVE,EAAUL,GAAc,CAC3B5c,OAAQA,EACRkd,QAAS,WAAoB,IA+C9B,OA5CApE,YAAW,WAkCVmE,EAAQxD,MAAQT,IA/BJ,SAAemE,GAK1B,IAHAhK,EAAU4J,EAAQI,EAAUpT,EAAQC,SAAWD,EAAQiT,SAGxChd,EAed,OAZAid,EAAQvf,MAAQqM,EAAQ/J,OAGxBid,EAAQJ,SAASI,EAAQvf,MAAQlJ,EAASuV,EAAQ8I,QAGlDoK,EAAQxD,MAAMU,YAGd8C,EAAQC,UAOTD,EAAQvf,MAAQyV,EAGhB8J,EAAQJ,SAASI,EAAQvf,MAAQlJ,EAASuV,EAAQ8I,OACnD,GAGgC9I,EAAQC,SAAU,CAAEkP,WAAW,IAG/D+D,EAAQxT,UAAW,EACnBwT,EAAQrJ,SAGRqJ,EAAQxD,MAAM9P,OACf,GAAG,GAEIsT,CACR,EAQIG,GAAoB,SAA2BC,GAClD,IAAItT,EAAU1Q,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAGnF,QAAmB,IAARgkB,EACV,KAAM,wDAIPtT,EAAUyC,GAAaiQ,GAA2B1S,GAGlD,IAAI/J,EAASzK,EAAO8nB,GAAOA,EAAMhmB,EAAYgmB,GAGzCJ,EAAUL,GAAc,CAC3BS,IAAKtkB,EAAQiH,GACbkd,QAAS,WAAoB,IAiD9B,OA7CAhB,GAAgBnS,EAAQoS,QAAQ,SAAUrlB,GAEzCmmB,EAAQnmB,OAASA,EAiCjBmmB,EAAQxD,MAAQT,IA/BJ,WAEX,IAAIsE,EAASzmB,EAAWC,GAGxB,GAAIkJ,EAASsd,GAAU,EAetB,OAZAL,EAAQvf,MAAQ,IAAIlE,MAAMuQ,EAAQ2S,OAAOpjB,QAAQikB,KAAK,GAGtDN,EAAQJ,SAASI,EAAQvf,OAGzBuf,EAAQxD,MAAMU,YAGd8C,EAAQC,UAOTD,EAAQvf,MAAQzF,EAASqlB,EAAQtd,EAAQ+J,EAAQ2S,OAAQ3S,EAAQ4S,SAGjEM,EAAQJ,SAASI,EAAQvf,MAC1B,GAGgCqM,EAAQC,SAAU,CAAEkP,WAAW,IAG/D+D,EAAQxT,UAAW,EACnBwT,EAAQrJ,SAGRqJ,EAAQxD,MAAM9P,OACf,IAEOsT,CACR,EAySIO,GAAW,WACb,IAAIjnB,EAAM8C,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAC1E/C,EAAM+C,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAC9E,OAAO,SAAUqE,EAAOwF,GACtB,OAAOA,GAAI4C,WAAWpI,GAASnH,IAAQD,EAAMC,GAC/C,CACD,EA6JGknB,GAAO,SAAcpb,EAAO8Q,EAAS1T,EAAMyD,GAC9CiQ,EAAQ9Q,GAAS5C,EAAK4C,GACtBa,EAAGhB,GAAUiR,GACd,EAmOIuK,GAAa,CAChBC,MAvcW,WACV,OAAO,SAAUjgB,EAAOwF,GACtB,OAAOA,GAAIxF,EAAQ,IAAIkgB,WAAW,GACpC,CACD,EAocAC,KAjBU,SAAWlc,GAClB,IAAImc,EAAczkB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,GAGlF0kB,EAAQpc,EAAS,IAAIyD,OAAO,KAAOzD,EAAS,IAAK,KAAO,KAE5D,OAAO,SAAUjE,EAAOwF,GACpB,IAAI2a,EAAOG,OAAOC,aAAavgB,GAC3BqgB,IACAF,EAAOA,EAAK7W,QAAQ+W,EAAOD,IAE/B5a,EAAG2a,EACP,CACH,EAKAK,MAzEW,SAAW/kB,GACtB,IAAIiN,EAAO/M,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,cAC3EgN,EAAQhN,UAAU,GAGtBF,EAAW0M,GAAW1M,GAEtB,IAAIglB,EAAS7pB,EAAahB,EAAcI,gBAAiB0S,GACrD6D,EAAS,KACTmU,EAAW,KAEf,OAAO,SAAU1gB,EAAOwF,GAYvB,GAVAxF,EAAQoI,WAAWpI,GAEfuM,GACHA,IAOgB,OAAbmU,GAAqB1gB,IAAU0gB,EAGlC,OAFAA,EAAW1gB,OACXwF,EAAGxF,GAIJ,IACIyD,EAAOid,EACPxoB,EAFK8H,EAEOyD,EAEhB8I,EAAST,IAAQ,SAAUlC,GAC1BpE,EAAG/B,EAAOmG,EAAI1R,EACf,IAAG,WACFqU,EAAS,IACV,GAAG9Q,EAAUglB,EAAQ9X,GAErB+X,EAAW1gB,CACZ,CACA,EAiCAA,MAxba,SAAW2gB,GACvB,OAAO,SAAU3gB,EAAOwF,GACtB,OAAOA,EAAGmb,EACZ,CACD,EAqbAC,MAvFW,WACV,OAAO,SAAU5gB,EAAOwF,GACtB,OAAOA,EAAGxF,EACZ,CACD,EAoFA6gB,OAhHY,WACZ,IAAK,IAAInlB,EAAOC,UAAUC,OAAQwK,EAAatK,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAClFqK,EAAWrK,GAAQJ,UAAUI,GAG9B,OAAO,SAAUiE,EAAOwF,GAEvB,IAAIob,EAAQ9kB,MAAMI,QAAQ8D,GAASA,EAAQ,CAACA,GACxC1E,EAAS,GACTwlB,EAAkB1a,EAAWxK,OAEjCglB,EAAM9c,SAAQ,SAAUtI,EAAGgH,GAE1B4D,EAAW5D,EAAIse,GAAiBtlB,GAAG,SAAUulB,GAE5CzlB,EAAOkH,GAAKue,EACRve,IAAMoe,EAAMhlB,OAAS,GACxB4J,EAAGlK,EAEL,GACD,GACD,CACA,EA2FAtC,IArIS,SAAWyN,GACpB,OAAO,SAAUzG,EAAOwF,GAEvB,IAAIlK,EAAS,GACTslB,EAAQ5gB,EAEZ4gB,EAAM9c,SAAQ,SAAUtI,EAAGwlB,GAE1Bva,EAAUjL,GAAG,SAAUulB,GAEtBzlB,EAAO0lB,GAAMD,EAETC,IAAOJ,EAAMhlB,OAAS,GACzB4J,EAAGlK,EAAOqI,SAEZ,GACD,GACD,CACA,EAoHA8C,UA9ee,WACf,IAAK,IAAI/K,EAAOC,UAAUC,OAAQwK,EAAatK,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAClFqK,EAAWrK,GAAQJ,UAAUI,GAG9B,OAAO,SAAUiE,EAAOwF,GAEvB,IAAIlK,EAAS,GACTslB,EAAQ5gB,EAEZoG,EAAWtC,SAAQ,SAAUuC,EAAG7D,GAE/B6D,EAAEua,GAAO,SAAUG,GAElBzlB,EAAOkH,GAAKue,EAERve,IAAM4D,EAAWxK,OAAS,GAC7B4J,EAAqB,IAAlBlK,EAAOM,OAAeN,EAAO,GAAKA,EAEvC,GACD,GACD,CACA,EAydA2lB,MAhLW,WACV,OAAO,SAAUjhB,EAAOwF,GACtB,OAAOA,GAAIxF,EAAQ,IAAIsK,cACzB,CACD,EA6KA4W,MA3KW,WACV,OAAO,SAAUlhB,EAAOwF,GACtB,OAAOA,GAAIxF,EAAQ,IAAI7I,cACzB,CACD,EAwKAyI,IArcS,WACR,OAAO,SAAUI,EAAOwF,GACtB,OAAOA,EAAG7M,KAAKiH,IAAII,GACrB,CACD,EAkcAzC,IA5cW,SAAW+hB,GACrB,OAAO,SAAUtf,EAAOwF,GACtB,OAAOA,EAAGxF,EAAQsf,EACpB,CACD,EAycA6B,SArbc,SAAW7B,GACxB,OAAO,SAAUtf,EAAOwF,GACtB,OAAOA,EAAGxF,EAAQsf,EACpB,CACD,EAkbA8B,QA5ba,SAAW9B,GACvB,OAAO,SAAUtf,EAAOwF,GACtB,OAAOA,EAAGxF,EAAQsf,EACpB,CACD,EAybA+B,IA7dS,WACT,IAAIC,EAAU3lB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,GAC9E4lB,EAAO5lB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,OAC/E,OAAO,SAAUqE,EAAOwF,GACvB,OAAOA,EAAG8b,EAAQ1lB,QAAU,GAAKoE,GAAOpE,OAAkB,SAAT2lB,GAAmB,GAAKD,EAAUthB,GAAO6I,OAAOyY,EAAQ1lB,SAAW,GAAKoE,EAAQshB,GAASpY,UAAU,EAAGoY,EAAQ1lB,QAAUoE,EAC1K,CACA,EAwdAwhB,OAjPY,WACZ,IAAIC,EAAoB9lB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IACxF+lB,EAAqB/lB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IACzFgmB,EAAWhmB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EACnF,OAAO,SAAUqE,EAAOwF,GACvBA,GAAIxF,EAAQ,EAAI,IAAM,IAAMoI,WAAWzP,KAAKiH,IAAII,IAAQ4hB,QAAQD,GAAUrY,QAAQ,MAAM,SAAU2I,EAAGzP,EAAGjJ,GACvG,MAAU,MAAN0Y,EACIwP,EAEDjf,IAAMjJ,EAAEqC,OAAS4G,GAAK,GAAM,EAAIkf,EAAqBzP,EAAIA,CACjE,IACD,CACA,EAsOA3I,QAnba,SAAWuY,EAAQzB,GAC/B,OAAO,SAAUjZ,EAAQ3B,GACvB,OAAOA,GAAI2B,EAAS,IAAImC,QAAQ,IAAI5B,OAAkB,MAAXma,EAAiB,KAAOA,EAASA,EAAQ,KAAMzB,GAC5F,CACD,EAgbA0B,MA9aW,WACV,IAAIH,EAAWhmB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EACnF,OAAO,SAAUqE,EAAOwF,GACtB,OAAOA,EAAGmc,EAAW3hB,EAAM4hB,QAAQD,GAAYhpB,KAAKmpB,MAAM9hB,GAC5D,CACD,EA0aA+hB,KAlaU,WACT,OAAO,SAAU/hB,EAAOwF,GACtB,OAAOA,EAAG7M,KAAKopB,KAAK/hB,GACtB,CACD,EA+ZA1F,MAzaW,WACV,OAAO,SAAU0F,EAAOwF,GACtB,OAAOA,EAAG7M,KAAK2B,MAAM0F,GACvB,CACD,EAsaA8f,SAAUA,GACVkC,WAzOgB,WAChB,IAGItU,EAAIoS,GAHEnkB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EACpEA,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,KAG9E,OAAO,SAAUqE,EAAOwF,GACvBkI,EAAE1N,GAAO,SAAUA,GAClBwF,EAAW,IAARxF,EACJ,GACD,CACA,EAgOAiiB,SAxZc,SAAW3C,GACxB,OAAO,SAAUtf,EAAOwF,GACtB,OAAOA,EAAGxF,EAAQsf,EACpB,CACD,EAqZA4C,OAnZY,SAAW5C,GACtB,OAAO,SAAUtf,EAAOwF,GACtB,OAAOA,EAAGxF,EAAQsf,EACpB,CACD,EAgZA7a,MAxYW,WACV,IAAI0d,EAAYxmB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,GACpF,OAAO,SAAUwL,EAAQ3B,GACvB,OAAOA,GAAI2B,EAAS,IAAI1C,MAAM0d,GAChC,CACD,EAoYAnD,OA/YY,SAAWoD,GACtB,OAAO,SAAUpiB,EAAOwF,GACtB,OAAOA,EAAG4c,EAAS9Y,QAAQ,QAAStJ,GACtC,CACD,EA4YAmZ,OAnYY,SAAWD,EAAQC,GAC9B,OAAO,SAAUnZ,EAAOwF,GACtB,OAAOA,EAAa,IAAVxF,EAAckZ,EAASC,EACnC,CACD,EAgYAkJ,MA9XW,WACV,IAAIxpB,EAAM8C,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAC1E/C,EAAM+C,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAC9E,OAAO,SAAUqE,EAAOwF,GACtB,OAAOA,EAAG7M,KAAKE,IAAIF,KAAKC,IAAIoH,EAAOnH,GAAMD,GAC3C,CACD,EAyXAgL,QAvXa,WACZ,OAAO,SAAU5D,EAAOwF,GACtB,OAAOA,EAAG1J,MAAMI,QAAQ8D,GAASA,EAAM4D,WAAa5D,EAAQ,IAAIyE,MAAM,IAAIb,UAAU8C,KAAK,IAC3F,CACD,EAoXAsG,OAlXc,SAAWG,EAAaC,GACnC,IAAIkV,EAAe3mB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,IAAmBA,UAAU,GAC9E4mB,IAAU5mB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,KAAmBA,UAAU,GAEzE6mB,EAAU,KACV9B,EAAW,KACX+B,EAAa,KACjB,OAAO,SAAUziB,EAAOwF,GAGpB,OAFAxF,EAAQoI,WAAWpI,GAEH,OAAZwiB,GACAA,EAAUxiB,OACVwF,EAAGxF,KAIHsiB,GAA6B,OAAb5B,GAAqB8B,IAAYxiB,IACjDyiB,EAAWlW,SACXkW,EAAa,MAGbF,GAAwB,OAAb7B,GAAqB1gB,EAAQyiB,EAAW9V,cAAgB,GACnE8V,EAAWlW,SACXkW,EAAa,KACb/B,EAAW,KACX8B,EAAUxiB,OACVwF,EAAGxF,KAIFyiB,EAIDA,EAAWriB,OAAOoF,EAAIxF,IAHtByiB,EAAarW,GAAiB,SAAUe,EAAaC,IAC1ChN,OAAOoF,EAAIgd,EAASxiB,QAKnC0gB,EAAW1gB,IACf,CACH,EA4UAiN,OA1Uc,SAAWM,EAAWC,EAASC,GAE7C,IAAIgI,EAAU,KACVgN,EAAa,KAEjB,OAAO,SAAUziB,EAAOwF,GAIvB,GAFAxF,EAAQoI,WAAWpI,GAEH,OAAZyV,EAGH,OAFAA,EAAUzV,OACVwF,EAAGxF,GAICyiB,EAIJA,EAAWriB,OAAOoF,EAAIxF,IAHtByiB,EAAarW,GAAiB,SAAUmB,EAAWC,EAASC,IACjDrN,OAAOoF,EAAIiQ,EAASzV,EAIjC,CACA,EAqTA2I,MA9SW,WACX,IAAI+Z,EAAQ/mB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,MAC5E9C,EAAM8C,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,GAC1E/C,EAAM+C,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,GAG1E8Z,EAAU,KAEd,OAAO,SAAUzV,EAAOwF,GAGvB,IAAKiQ,EAGJ,OAFAA,EAAUjR,GAAUxE,QACpBwF,EAAGhB,GAAUiR,IAIdA,EAAoB,QAAViN,EAAkBjN,EAAQ5M,MAAM4M,EAAQ7Z,OAASoE,EAAMpE,OAAQ6Z,EAAQ7Z,QAAU6Z,EAAQ5M,MAAM,EAAG7I,EAAMpE,QAElH,IAAI+mB,EA33DM,SAAeC,GAG1B,IAFA,IAAIrf,EAAM,GACNf,EAAI,EACDA,EAAIogB,EAAGpgB,IACbe,EAAIgD,KAAK/D,GAEV,OAAOe,CACR,CAo3DgBsf,CAAM7iB,EAAMpE,QAEZ,WAAV8mB,GAp3DQ,SAAiBnpB,GAC9B,IAAK,IAAIiJ,EAAIjJ,EAAEqC,OAAQ4G,EAAGA,IAAK,CAC9B,IAAIsgB,EAAInqB,KAAK2B,MAAM3B,KAAKoqB,SAAWvgB,GAC/B9H,EAAO,CAACnB,EAAEupB,GAAIvpB,EAAEiJ,EAAI,IACxBjJ,EAAEiJ,EAAI,GAAK9H,EAAK,GAChBnB,EAAEupB,GAAKpoB,EAAK,EACb,CACD,CA82DGsoB,CAAQL,GAGK,QAAVD,GACHC,EAAQ/e,WAGI,SAASxD,IACrB2f,GAAK4C,EAAQve,QAASqR,EAASzV,EAAOwF,GAClCmd,EAAQ/mB,QACXwf,WAAWhb,EA/4DF,WACZ,IAAIvH,EAAM8C,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAC1E/C,EAAM+C,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAE9E,OAAO9C,EAAMF,KAAKoqB,UAAYnqB,EAAMC,EACrC,CA04DuBkqB,CAAOlqB,EAAKD,GAEjC,CAEAwH,EACD,CACA,EAyQA8M,KAxOY,SAAWV,GAEvB,IAAIgW,EAAU,KACV9B,EAAW,KACX+B,EAAa,KAEjB,OAAO,SAAUziB,EAAOwF,GAIvB,GAFAxF,EAAQoI,WAAWpI,GAEH,OAAZwiB,EAGH,OAFAA,EAAUxiB,OACVwF,EAAGxF,GAIa,OAAb0gB,GAAqB8B,IAAYxiB,IACpCyiB,EAAWlW,SACXkW,EAAa,MAGTA,EAIJA,EAAWriB,OAAOoF,EAAIxF,IAHtByiB,EAAarW,GAAiB,OAAQI,IAC3BpM,OAAOoF,EAAIgd,EAASxiB,GAKhC0gB,EAAW1gB,CACZ,CACA,EA2MA2W,KA9KU,WACV,IAAK,IAAIjb,EAAOC,UAAUC,OAAQ+a,EAAO7a,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAC5E4a,EAAK5a,GAAQJ,UAAUI,GAGxB,OAAO,SAAUiE,EAAOwF,GACvB,IAAIlK,EAAS,CAAC,EACd0E,EAAM8D,SAAQ,SAAUtI,EAAGgH,GAC1BlH,EAAOqb,EAAKnU,IAAMhH,CACnB,IACAgK,EAAGlK,EACJ,CACA,EAmKAG,SAzLgB,WACf,IAAK,IAAIC,EAAOC,UAAUC,OAAQojB,EAASljB,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAC7EijB,EAAOjjB,GAAQJ,UAAUI,GAG3B,OAAO,SAAUiE,EAAOwF,GACtB,OAAOA,EAAGvL,EAAa+F,EAAOgf,GAChC,CACD,EAkLA9V,UAhHe,SAAWzF,EAAMoJ,GAC/B,OAAO,SAAU7M,EAAOwF,GACtB,OAAOA,GAAIxF,EAAQ,IAAIkJ,UAAUzF,EAAMoJ,GACzC,CACD,EA6GAoW,OAhEY,WACX,IAAK,IAAIvnB,EAAOC,UAAUC,OAAQuc,EAAUrc,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAC9Eoc,EAAQpc,GAAQJ,UAAUI,GAG5B,OAAO,SAAUiE,EAAOwF,EAAI8N,GAC1B,OAAO9N,EAAGxF,EAAMhH,KAAI,SAAUwC,EAAGmJ,GAC/B,OAAO2O,EAAS4P,UAAU/K,EAAQxT,GAA3B2O,CAAmC9X,EAAG8X,EAASyF,eAAgBzF,EACxE,IACF,CACD,GAyDDnd,EAAcP,EAAcG,UAAWiqB,IAEvC,IA+EImD,GAAc,CACjB,EAAK,aACL,EAAK,aACL,EAAK,cAGFC,GAAW,CACd,EAAK,UACL,EAAK,UACL,EAAK,WAGFC,GAAS,CACZ,KAAQ,QACR,EAAK,SACL,EAAK,UAMFC,GAAU,SAAiB7f,EAAMoJ,EAAIjD,GACxC,OAAOnG,GAAQoJ,EAAKpJ,GAAQmG,CAC7B,EAsEI2Z,GAAc,CACjBC,KAlEU,SAAc3lB,EAAS+L,EAAGsE,GACpC,IAAIxF,EAAO/M,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAKmP,GAC3ErH,EAAO9H,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAC3EkR,EAAKlR,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAE7E,GAAIuS,EAAY,EAAG,CAClB,IAAIxT,EAAO,CAACmS,EAAIpJ,GAChBA,EAAO/I,EAAK,GACZmS,EAAKnS,EAAK,EACX,CACAmD,EAAQoB,MAAMwkB,QAAUH,GAAQ7f,EAAMoJ,EAAInE,EAAKkB,GAChD,EAwDC8Z,KAtDU,SAAc7lB,EAAS+L,EAAGsE,GACpC,IAAIxF,EAAO/M,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAKmP,GAC3ErH,EAAO9H,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAC3EkR,EAAKlR,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,OACzEgoB,EAAOhoB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAE/E,GAAIuS,EAAY,EAAG,CAClB,IAAI0V,EAAQ,CAAC/W,EAAIpJ,GACjBA,EAAOmgB,EAAM,GACb/W,EAAK+W,EAAM,EACZ,CACA,IAAIlW,EAAIpG,EAAM7D,EAAMyR,IAChB7O,EAAIiB,EAAMuF,EAAIqI,IAClBhP,EAAarI,EAASslB,GAAYQ,GAAOL,GAAQ5V,EAAE1N,MAAOqG,EAAErG,MAAO0I,EAAKkB,IAAK8D,EAAEyH,OAAS9O,EAAE8O,MAC3F,EAyCC0L,OAvCc,SAAgBhjB,EAAS+L,EAAGsE,GAC1C,IAAIxF,EAAO/M,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAKmP,GAC3ErH,EAAO9H,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAC3EkR,EAAKlR,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,QACzEgoB,EAAOhoB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAE/E,GAAIuS,EAAY,EAAG,CAClB,IAAI2V,EAAQ,CAAChX,EAAIpJ,GACjBA,EAAOogB,EAAM,GACbhX,EAAKgX,EAAM,EACZ,CACA,IAAInW,EAAIpG,EAAM7D,EAAMyR,IAChB7O,EAAIiB,EAAMuF,EAAIqI,IAClBhP,EAAarI,EAASulB,GAASO,GAAOL,GAAQ5V,EAAE1N,MAAOqG,EAAErG,MAAO0I,EAAKkB,IAAK8D,EAAEyH,OAAS9O,EAAE8O,MACxF,EA0BC2O,MAxBW,SAAejmB,EAAS+L,EAAGsE,GACtC,IACIzK,EAAO9H,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAC3EkR,EAAKlR,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAG7E,GAAIuS,EAAY,EAAG,CAClB,IAAI6V,EAAQ,CAAClX,EAAIpJ,GACjBA,EAAOsgB,EAAM,GACblX,EAAKkX,EAAM,EACZ,CACA7d,EAAarI,EAASwlB,GAPX1nB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,QAO3C2nB,GAAQ7f,EAAMoJ,GAVvClR,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAKmP,IAUpBlB,IAC5D,EAeCoa,UAnLe,WACf,IAAIC,EAAQtoB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAE5EuoB,EAAWvoB,UAAU,GAEzB,MAAO,CACNuT,MAAO,CAAC,CAAE5Y,KAAM,OAAQyS,WAAY,CAAC,EAAG,GAAItN,SAAU,IAAOwoB,EAAOtb,MAAOR,GAJ9DxM,UAAU,MAKvBwT,MAAO,CAAC,CAAE7Y,KAAM,OAAQyS,WAAY,CAAC,EAAG,GAAItN,SAAU,IAAOwoB,EAAOtb,MAAOR,GAAW+b,KAEvF,EA2KAC,KAzKU,WACV,IAAIR,EAAOhoB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAC3E0R,EAAW1R,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAC/EsoB,EAAQtoB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAE5EuoB,EAAWvoB,UAAU,GAEzB,MAAO,CACNuT,MAAO,CAAC,CACP5Y,KAAM,OACNyS,WAAY,CAAC,GAAiB,KAAXsE,EAAgB,KAAMsW,GACzCloB,SAAU,IAAOwoB,EACjBtb,MAAOR,GARKxM,UAAU,MAUvBwT,MAAO,CAAC,CACP7Y,KAAM,OACNyS,WAAY,CAAC,KAAM,GAAgB,IAAXsE,EAAgBsW,GACxCloB,SAAU,IAAOwoB,EACjBtb,MAAOR,GAAW+b,KAGpB,EAqJAE,QAnJa,WACb,IAAIT,EAAOhoB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAC3E0R,EAAW1R,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAC/EsoB,EAAQtoB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAE5EuoB,EAAWvoB,UAAU,GAEzB,MAAO,CACNuT,MAAO,CAAC,CACP5Y,KAAM,SACNyS,WAAY,CAAa,IAAXsE,EAAgB,MAAO,OAAQsW,GAC7CloB,SAAU,IAAOwoB,EACjBtb,MAAOR,GARKxM,UAAU,MAUvBwT,MAAO,CAAC,CACP7Y,KAAM,SACNyS,WAAY,CAAC,OAAmB,GAAXsE,EAAgB,MAAOsW,GAC5CloB,SAAU,IAAOwoB,EACjBtb,MAAOR,GAAW+b,KAGpB,EA+HAG,KA7HU,WACV,IAAIjrB,EAASuC,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAC7EsoB,EAAQtoB,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,EAE5EuoB,EAAWvoB,UAAU,GAEzB,MAAO,CACNuT,MAAO,CAAC,CACP5Y,KAAM,QACNyS,WAAY,CAAC3P,EAAQ,GACrBqC,SAAU,IAAOwoB,EACjBtb,MAAOR,GARKxM,UAAU,MAUvBwT,MAAO,CAAC,CACP7Y,KAAM,QACNyS,WAAY,CAAC,EAAG3P,GAChBqC,SAAU,IAAOwoB,EACjBtb,MAAOR,GAAW+b,KAGpB,GA4GD/tB,EAAcP,EAAcK,WAAYstB,IAQxC,IAAIe,GAAM,CAKTC,UAjvBa,WAEb,IAAI/J,EAAI9kB,OACR,QAAiB,IAAN8kB,EACV,OAAO,EAIR,IAAIgK,EAAahK,EAAEiK,KAAOjK,EAAEiK,IAAIC,SAI5BC,IAAWnK,EAAEoK,wBAA0BznB,SAAS0nB,aAIhDC,EAAeN,GAAcC,IAAIC,SAAS,YAAa,iBAM3D,OAAOC,GAAUH,GAAcM,KAHhB,CAAC,mBAAoB,yBAGsB7gB,QAAO,SAAU2F,GAC1E,OAAOA,KAAK4Q,CACb,IAAG5e,MACH,CAwtBWmpB,GAGX1Y,QAAS,CACR2Y,YArjEgB,SAAqBhuB,EAAKgJ,GAC3CoY,GAAUphB,GAAOgJ,CAClB,EAojEEilB,UAljEc,SAAmBjuB,EAAKgJ,GACvCmY,GAAQnhB,GAAOgJ,CAChB,GAsjECklB,OAAQ,CAGP5Y,SAAUgP,GAGVxjB,KAAM,SAAc8B,GACnB,OAAOA,EAAMD,EAAYC,GAAOuC,GACjC,EAGAV,SAAUA,GAMX0pB,KAAM,CAGLljB,QAASA,GAGTmjB,KAAM,SAAcza,EAAKnF,GAGxB,OAAO8V,IAAS,WACfrZ,GAAQ0I,EAAKnF,EACd,GAJe7J,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,IAKpF,GAOD6V,IAAK,CAGJE,OAAQA,GAGRnV,QAn6DY,SAAiBsB,GAE9B,IAAI8G,EA7FgB,SAAwB0U,EAAWxb,GAGvD,IAFA,IAAI2E,EAAI,EACJyC,EAAIoU,EAAUzd,OACX4G,EAAIyC,EAAGzC,IACb,GAAI6W,EAAU7W,GAAGoY,cAAc/c,GAC9B,OAAO2E,EAGT,OAAQ,CACT,CAoFa6iB,CAAehM,GAAWxb,GAEtC,QAAI8G,EAAQ,KAIZ0U,GAAU1U,GAAOpI,UACjB8c,GAAUiM,OAAO3gB,EAAO,IAEjB,EACR,EA05DE+N,MAt/DU,SAAe6S,GAE1B,IAAIC,EACA3nB,OAAU,EACV2E,OAAI,EACJ6W,EAAY,GAMhB,IAFA7W,GADAgjB,EAAWD,EAAQE,iBAAiB,4BACvB7pB,OAEN4G,KACN3E,EAAU2nB,EAAShjB,GACnB6W,EAAU9S,KAAKmL,GAAO7T,IAGvB,OAAOwb,CACR,EAw+DE/S,KAAMA,IAIPjM,MAAO,CACNqrB,KAAM,WACL,IAAK,IAAIhqB,EAAOC,UAAUC,OAAQC,EAAOC,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAC5EF,EAAKE,GAAQJ,UAAUI,GAIxB,GAAuB,iBAAZF,EAAK,IAAsC,iBAAZA,EAAK,GAAiB,CAC/D,IAAImE,EAAQnE,EAAK,GACbsZ,EAAQtZ,EAAK,GAAG1E,cAKpB,OAJA0E,EAAKuI,QACLvI,EAAK,GAAKJ,EAASuE,EAAOmV,GAC1BtZ,EAAK,GAAKA,EAAK,IAAM,CAAC,EACtBA,EAAK,GAAGsZ,MAAQA,EACTiK,GAAgBpjB,WAAMC,EAAWJ,EACzC,CAGA,MAAuB,iBAAZA,EAAK,IAAmBhE,EAAOgE,EAAK,IACvC6jB,GAAkB1jB,WAAMC,EAAWJ,GAGpC,IACR,EACA8pB,GAj/BoB,SAAyBC,GAC9C,IAAIvZ,EAAU1Q,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAGnF,QAAqB,IAAViqB,EACV,KAAM,0DAIPvZ,EAAUyC,GAAaiQ,GAA2B1S,GAGlD,IAAI5I,EAAO5L,EAAO+tB,GAASA,EAAQjsB,EAAYisB,GAG3CrG,EAAUL,GAAc,CAC3B0G,MAAOvqB,EAAQoI,KA8BhB,OA1BA+a,GAAgBnS,EAAQoS,QAAQ,SAAUrlB,GAEzCmmB,EAAQnmB,OAASA,EAcjBmmB,EAAQxD,MAAQT,IAZJ,WAEX,IAAIsE,EAASzmB,EAAWC,GAGxBmmB,EAAQvf,MAAQzF,EAASkJ,EAAMmc,EAAQvT,EAAQ2S,OAAQ3S,EAAQ4S,SAG/DM,EAAQJ,SAASI,EAAQvf,MAC1B,GAGgCqM,EAAQC,SAAU,CAAEkP,WAAW,IAG/D+D,EAAQxT,UAAW,EACnBwT,EAAQrJ,SAGRqJ,EAAQxD,MAAM9P,OACf,IAEOsT,CACR,EAm8BEsG,SA37BmB,SAAwBA,GAC5C,IAAIxZ,EAAU1Q,UAAUC,OAAS,QAAsBK,IAAjBN,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAGnF,GAAwB,iBAAbkqB,EACV,KAAM,6DAOP,IAAIC,GAHJzZ,EAAUyC,GAAa5L,EAAS,CAAC,EAAG6b,GAA2B,CAAE+G,SAAU,OAASzZ,IAG7DyZ,SA3hID,SAA0BC,GAChD,IAAItQ,EAA2C,KAAjC,IAAI1d,MAAOiC,oBACzB,GAAwB,MAApB+rB,EACH,OAAOtQ,EAER,IAAIlN,EAAQwd,EAAgBlsB,MAAM,yBAKlC,OAJmC,MAAlB0O,EAAMnE,SAAmB,EAAI,IAIjB,KAHjB/E,SAASkJ,EAAM,GAAI,IAGkB,IAFnClJ,SAASkJ,EAAM,GAAI,KAEyBkN,CAC3D,CAghImCuQ,CAAiB3Z,EAAQyZ,UAAY,KAGnEvG,EAAUL,GAAc,CAC3B+G,QAAS,KACTC,kBAAmB,KACnBC,wBAAyB,KACzBC,SAAU,SAAkBC,EAAUC,GAAW,EACjDC,SAAU,SAAkBF,GAAW,EACvCG,OAAQ,SAAgBC,GAAY,IAIjCH,OAAWrqB,EACXoqB,EAAW,KAqFf,OAlFA7H,GAAgBnS,EAAQoS,QAAQ,SAAUrlB,GAEzCmmB,EAAQnmB,OAASA,EAsEjBmmB,EAAQxD,MAAQT,IApEJ,WAEX,IAvhIiC9hB,EAuhI7BomB,EAASzmB,EAAWC,GAaxB,GAXiB,OAAb0sB,IACHlG,EApiIe,SAAsB9nB,EAAMsB,GAC9C,OAAO,IAAIrB,KAAKD,EAAKiC,UAAYX,EAClC,CAkiIastB,CAAa9G,EAAQkG,IAI/BO,EAlVwB,SAA8BvuB,EAAM+tB,GAU7D,IARA,IAAIc,EAAUd,EAASphB,MAAM,KAAKzL,IAAIoO,IACrCpO,KAAI,SAAU0S,GACb,OAAO+R,GAAS3lB,EAAM4T,EACxB,IAGIkb,EAAU,KAELpkB,EAAI,EAAGA,EAAImkB,EAAQ/qB,OAAQ4G,IAAK,CACvC,IAAI6a,EAASsJ,EAAQnkB,GAGrB,GAAgB,OAAZokB,GAAoBvJ,EAAOG,KAC7B,OAAO,MAGO,OAAZoJ,GAEwB,OAAjBA,EAAQ1uB,MAAiC,OAAhBmlB,EAAOnlB,MAEhB,OAAhBmlB,EAAOnlB,MAAiBmlB,EAAOnlB,KAAO0uB,EAAQ1uB,QAHvD0uB,EAAUvJ,EAMd,CAGA,OAAOuJ,EAAQ9uB,IACjB,CAqTc+uB,CAAqBjH,EAAQiG,GAGxCtG,EAAQ0G,QAAuB,OAAbI,EAGd9G,EAAQ0G,QAsBX,YAnBiBhqB,IAAbqqB,IACHA,EAAW,MAIZ/G,EAAQvf,MAAQ,IAAIlE,MAAMuQ,EAAQ2S,OAAOpjB,QAAQikB,KAAK,GAGlDN,EAAQ2G,oBACX3G,EAAQ4G,wBAA0B9qB,EAAQkkB,EAAQ2G,oBAInD3G,EAAQ2G,kBAAiC,OAAbG,EAAoB,KAAOhrB,EAAQgrB,QAG/D9G,EAAQiH,OAAOjH,EAAQ4G,wBAA0B9qB,EAAQkkB,EAAQ4G,yBAA2B,MAO7F5G,EAAQ2G,kBAAoB7qB,EAAQgrB,GAInB,OAAbC,GACH/G,EAAQgH,SAASlrB,EAAQgrB,KAIT,OAAbC,QAAkCrqB,IAAbqqB,IAvkIQ9sB,EAukIsC6sB,EAAVC,EAtkItDvsB,YAAcP,EAAEO,cAwkItBwlB,EAAQ6G,SAAS/qB,EAAQgrB,GAAWC,EAAWjrB,EAAQirB,GAAY,MAE/DA,IACH/G,EAAQ4G,wBAA0B9qB,EAAQirB,KAK5CA,EAAWjrB,EAAQgrB,GAGnB9G,EAAQvf,MAAQzF,EAASqlB,EAAQyG,EAAUha,EAAQ2S,OAAQ3S,EAAQ4S,SACnEM,EAAQJ,SAASI,EAAQvf,MAC1B,GAGgCqM,EAAQC,SAAU,CAAEkP,WAAW,IAG/D+D,EAAQxT,UAAW,EACnBwT,EAAQrJ,SAGRqJ,EAAQxD,MAAM9P,OACf,IAEOsT,CACR,GAi1BCuH,OAAQ,CACPvpB,IAAK,SAAanH,EAAME,EAAMG,GAC7B,GAAoB,mBAATL,EAAqB,CAC/B,IAAI2wB,EAAY3wB,EAChB,OAAOI,EAAauwB,EAAUC,WAAW5wB,KAAM2wB,EAAUC,WAAW1wB,KAAMywB,EAC3E,CACA,OAAOvwB,EAAaJ,EAAME,EAAMG,EACjC,IAOEwwB,GAAQ,SAAe7wB,GAC1B,IAAKR,EAAcW,eAAeH,GACjC,MAAO,WAERkuB,GAAIwC,OAt/EgB,SAAwB3f,GAC5C,OAAOA,EAAOmC,QAAQ,OAAO,SAAU4d,GACtC,OAAOA,EAAIhwB,OAAO,GAAGoT,aACtB,GACD,CAk/EY6c,CAAe,OAASvxB,EAAcQ,KAAU,SAAUE,EAAMG,GAC1ED,EAAaZ,EAAcQ,GAAOE,EAAMG,EACzC,CACD,EAEA,IAAK,IAAIL,MAAQR,EACLqxB,GAAM7wB,IAOjB,OAFDT,EAAOyxB,QAAU9C,GAET3uB,EAAOyxB,OACf,CAjsK+C,GAisKxC,KCjsKP,EAAiC,oBAAX1xB,OAA0B,WAC/C,IAAKC,EACJ,IAAIA,EAAS,CAAC,GAIK,WACnB,SAASoL,EAAWf,GAClBgB,KAAKhB,MAAQA,CACf,CAEA,SAASiB,EAAeC,GACtB,IAAIC,EAAOC,EAqBX,SAASC,EAAOrK,EAAKsK,GACnB,IACE,IAAIC,EAASL,EAAIlK,GAAKsK,GAClBtB,EAAQuB,EAAOvB,MAEfA,aAAiBe,EACnBS,QAAQC,QAAQzB,EAAMA,OAAO0B,MAAK,SAAUJ,GAC1CD,EAAO,OAAQC,EACjB,IAAG,SAAUA,GACXD,EAAO,QAASC,EAClB,IAEAK,EAAOJ,EAAOK,KAAO,SAAW,SAAUL,EAAOvB,MAErD,CAAE,MAAO6B,GACPF,EAAO,QAASE,EAClB,CACF,CAEA,SAASF,EAAOvL,EAAM4J,GACpB,OAAQ5J,GACN,IAAK,SACH+K,EAAMM,QAAQ,CACZzB,MAAOA,EACP4B,MAAM,IAER,MAEF,IAAK,QACHT,EAAMW,OAAO9B,GACb,MAEF,QACEmB,EAAMM,QAAQ,CACZzB,MAAOA,EACP4B,MAAM,KAKZT,EAAQA,EAAMY,MAGZV,EAAOF,EAAMnK,IAAKmK,EAAMG,KAExBF,EAAO,IAEX,CAEAJ,KAAKgB,QApEL,SAAchL,EAAKsK,GACjB,OAAO,IAAIE,SAAQ,SAAUC,EAASK,GACpC,IAAIG,EAAU,CACZjL,IAAKA,EACLsK,IAAKA,EACLG,QAASA,EACTK,OAAQA,EACRC,KAAM,MAGJX,EACFA,EAAOA,EAAKW,KAAOE,GAEnBd,EAAQC,EAAOa,EACfZ,EAAOrK,EAAKsK,GAEhB,GACF,EAqD0B,mBAAfJ,EAAIgB,SACblB,KAAKkB,YAASjG,EAElB,CAEsB,mBAAXwE,QAAyBA,OAAO0B,gBACzClB,EAAeJ,UAAUJ,OAAO0B,eAAiB,WAC/C,OAAOnB,IACT,GAGFC,EAAeJ,UAAUkB,KAAO,SAAUT,GACxC,OAAON,KAAKgB,QAAQ,OAAQV,EAC9B,EAEAL,EAAeJ,UAAUuB,MAAQ,SAAUd,GACzC,OAAON,KAAKgB,QAAQ,QAASV,EAC/B,EAEAL,EAAeJ,UAAUqB,OAAS,SAAUZ,GAC1C,OAAON,KAAKgB,QAAQ,SAAUV,EAChC,CAYF,CA/GqB,GAArB,IA2HIR,EAAc,WAChB,SAASuB,EAAiBC,EAAQC,GAChC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAM3G,OAAQ4G,IAAK,CACrC,IAAIC,EAAaF,EAAMC,GACvBC,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDC,OAAOC,eAAeR,EAAQG,EAAWzL,IAAKyL,EAChD,CACF,CAEA,OAAO,SAAUM,EAAaC,EAAYC,GAGxC,OAFID,GAAYX,EAAiBU,EAAYlC,UAAWmC,GACpDC,GAAaZ,EAAiBU,EAAaE,GACxCF,CACT,CACF,CAhBkB,GAoWd,OANJpN,EAAOyxB,QA5UK,SAAW1sB,GACtB,IAAI8W,EAAM9W,EAAK8W,IAEXL,GADUzW,EAAKiX,UAAU7F,QACbpR,EAAKyW,WACjBU,EAAcnX,EAAK3C,KAAK8Z,YACxBwV,EAAY3sB,EAAKoX,KACjB5U,EAASmqB,EAAUnqB,OACnBb,EAAYgrB,EAAUhrB,UACtBoC,EAAS4oB,EAAU5oB,OACnBsB,EAAUsnB,EAAUtnB,QACpByO,EAAS6Y,EAAU7Y,OAGnB8Y,EAAenW,EAAUva,aAAaua,EAAUC,KAAKpb,gBAAiB,kBACtEuxB,EAAcpW,EAAUva,aAAaua,EAAUC,KAAKpb,gBAAiB,iBAErE6I,EAAO,SAAcvC,GAGxB,GAAIA,EAAM4D,iBAAkB,CAG3B5D,EAAMS,KAAK4b,YAAc,GAGzBrc,EAAMkrB,OAAShW,EAAIE,OAAO,OAAQ,oBAClCpV,EAAMS,KAAKiB,YAAY1B,EAAMkrB,QAG7B,IAAIC,EAAYjW,EAAIE,OAAO,OAAQ,yDAC/BgW,EAAelW,EAAIE,OAAO,OAAQ,2DACtCpV,EAAMS,KAAKiB,YAAYypB,GACvBnrB,EAAMS,KAAKiB,YAAY0pB,GAGvBprB,EAAMqrB,WAAanW,EAAIE,OAAO,OAAQ,yBACtCpV,EAAMS,KAAKiB,YAAY1B,EAAMqrB,WAC9B,CAMA,GAHArrB,EAAMkrB,OAAO7O,YAAcrc,EAAM0D,MAG5B1D,EAAM4D,kBAAqBsR,EAAIC,QAAQnV,EAAMS,MAAlD,CASA,IAAI6qB,EAActrB,EAAMurB,MAAMvrB,EAAMurB,MAAMjsB,OAAS,GAQnD,GAPIgsB,IACHA,EAAY3B,SAAU,EACtB2B,EAAYxuB,OAASyY,IACrB+V,EAAYxmB,KAAO9E,EAAM0D,OAItB1D,EAAM4D,iBAAkB,CAG3B,IAAI4nB,EAAoB,IAAIC,EAC5BD,EAAkB1mB,KAAO9E,EAAM0D,MAE/B8nB,EAAkB1uB,OAAS,KAC3B0uB,EAAkB1O,SAAW,EAE7B9c,EAAMS,KAAKmB,aAAa4pB,EAAkB/qB,KAAMT,EAAMS,KAAKirB,YAC3D1rB,EAAMurB,MAAMthB,KAAKuhB,EAClB,CAGA,IAAIG,EAAU,IAAIF,EAclB,GAZAE,EAAQ7uB,OAAS,KACjB6uB,EAAQ7O,SAAW,EACnB6O,EAAQC,gBAAkB,EAC1BD,EAAQhC,SAAU,EAElBgC,EAAQ9mB,MAAQ7E,EAAM0D,MACtBioB,EAAQpH,OAAO,GAGfvkB,EAAMS,KAAKmB,aAAa+pB,EAAQlrB,KAAMT,EAAMS,KAAKirB,YACjD1rB,EAAMurB,MAAMthB,KAAK0hB,IAEZ3rB,EAAM6rB,UAAW,CACrB7rB,EAAM6rB,WAAY,EAElB,IAAIzf,EAAOyI,EAAUva,aAAaua,EAAUC,KAAKpb,gBAAiBsG,EAAM2C,MAAMmpB,aAEnE,SAASlc,IAGnB,IAAImc,EAAiB/rB,EAAMurB,MAAM5jB,QAAO,SAAUqkB,GACjD,OAAQA,EAAK1mB,OAAS0mB,EAAKrC,OAC5B,IAEA,GAA8B,IAA1BoC,EAAezsB,OAAnB,CAMAysB,EAAevkB,SAAQ,SAAUwkB,GAEZ,OAAhBA,EAAKlvB,SACRkvB,EAAKlP,UAAYvH,IAAgByW,EAAKlvB,QAAUkD,EAAM2C,MAAMspB,cAGzDD,EAAKlP,UAAY,IACpBkP,EAAKlP,SAAW,EAChBkP,EAAK1mB,MAAO,GAGb0mB,EAAKJ,gBAAkBxf,EAAK4f,EAAKlP,SAClC,IAIAiP,EAAezkB,UAAUE,SAAQ,SAAUwkB,EAAM3jB,GAEhD,IAAI6jB,EAAeH,EAAe1jB,EAAQ,GAEtC6jB,GAAgBF,EAAKJ,iBAAmBM,EAAaN,kBACxDI,EAAKJ,gBAAkBM,EAAaN,gBANnB,IAQnB,IAEAG,EAAezkB,UAGftH,EAAMurB,MAAM/jB,SAAQ,SAAUwkB,EAAM3jB,GAGnC,IAAI8jB,EAAsB,EAA0C,EAAtC9vB,KAAKiH,IAAI0oB,EAAKJ,gBAAkB,IAC1DQ,EAAwB,GAAKJ,EAAKJ,gBAAkB,IAAM,GAE9DI,EAAKK,YAAcF,EACnBH,EAAKM,cAAgBF,EAGrB,IAAIG,EAAYvsB,EAAMurB,MAAMljB,EAAQ,GAGhCkkB,GAAaP,EAAKJ,gBAAkB,IAAMI,EAAKJ,gBAAkB,IACpEI,EAAKQ,WAAaxB,EAAauB,EAAUX,iBAE3C,IAGAG,EAAevkB,SAAQ,SAAUwkB,EAAM3jB,GAEtC,IAAIiF,EAAI0e,EAAKJ,gBAETte,EAAI,KAAO0e,EAAK1mB,KACnB0mB,EAAKvrB,KAAKkC,MAAM8pB,OAAS,GAAKpkB,EAE9B2jB,EAAKvrB,KAAKkC,MAAM+pB,eAAe,WAGhCV,EAAKzH,QAAY,IAALjX,EACb,IAGA,IAAIqf,EAAiB,EACjB/wB,EAAO,EACXmwB,EAAevkB,SAAQ,SAAUwkB,GAChC,IAAI7N,EAAI9hB,KAAKiH,IAAI0oB,EAAKJ,gBAAkB,IACpCzN,EAAIviB,IACPA,EAAOuiB,EACPwO,EAAiBX,EAAKJ,gBAExB,IAEA,IAAIxc,EAA0B6b,EAAtB0B,EAAiB,GAAiBA,EAAiB,IAAmB,EAAIA,GAAkB,IACpG3sB,EAAMqrB,WAAW1oB,MAAMwkB,QAAU/X,EACjC8F,EAAI/K,UAAUnK,EAAMqrB,WAAY,SAAUjc,GAG1CpP,EAAMurB,MAAM5jB,QAAO,SAAUqkB,GAC5B,OAAOA,EAAK1mB,IACb,IACCiH,MAAM,GAAI,GACV/E,SAAQ,SAAUwkB,GAIlBhsB,EAAMurB,MAAQvrB,EAAMurB,MAAM5jB,QAAO,SAAUgO,GAC1C,OAAOA,IAAMqW,CACd,IAGIA,EAAKvrB,KAAKC,YACbV,EAAMS,KAAKE,YAAYqrB,EAAKvrB,KAE9B,IAEA+C,sBAAsBoM,EAjGtB,MAFC5P,EAAM6rB,WAAY,CAoGpB,CAEAjc,EACD,CA3JA,MALC5P,EAAMurB,MAAM/jB,SAAQ,SAAUwkB,GAC7BA,EAAKlnB,KAAO9E,EAAM0D,MAClBsoB,EAAKnnB,MAAQ7E,EAAM0D,KACpB,GA8JF,EAEI+nB,EAAW,WACd,SAASA,KAxOU,SAAUzU,EAAUvQ,GACvC,KAAMuQ,aAAoBvQ,GACxB,MAAM,IAAI+T,UAAU,oCAExB,CAqOGC,CAAe/V,KAAM+mB,GAGrB/mB,KAAKkoB,MAAQ1X,EAAIE,OAAO,OAAQ,kBAGhC,IAAIvQ,EAAQqQ,EAAIE,OAAO,OAAQ,yDAC3ByX,EAAY3X,EAAIE,OAAO,OAAQ,8BAC/B0X,EAAmB5X,EAAIE,OAAO,OAAQ,gCAC1CyX,EAAUnrB,YAAYorB,GACtB,IAAIT,EAAcnX,EAAIE,OAAO,OAAQ,gCACrCvQ,EAAMnD,YAAYmrB,GAClBhoB,EAAMnD,YAAY2qB,GAElB,IAAIvnB,EAAOoQ,EAAIE,OAAO,OAAQ,uDAC1B2X,EAAW7X,EAAIE,OAAO,OAAQ,6BAC9B4X,EAAkB9X,EAAIE,OAAO,OAAQ,gCACzC2X,EAASrrB,YAAYsrB,GACrB,IAAIV,EAAgBpX,EAAIE,OAAO,OAAQ,kCACnCoX,EAAatX,EAAIE,OAAO,OAAQ,+BACpCtQ,EAAKpD,YAAYqrB,GACjBjoB,EAAKpD,YAAY4qB,GACjBxnB,EAAKpD,YAAY8qB,GAGjB9nB,KAAKkoB,MAAMlrB,YAAYmD,GACvBH,KAAKkoB,MAAMlrB,YAAYoD,GAGvBJ,KAAKuoB,OAASpoB,EACdH,KAAKwoB,MAAQpoB,EACbJ,KAAKyoB,aAAed,EACpB3nB,KAAK0oB,YAAcZ,EACnB9nB,KAAK2oB,eAAiBf,EAGtB5nB,KAAK4oB,UAAYN,EACjBtoB,KAAK6oB,WAAaT,EAGlBpoB,KAAK8oB,YAAc,KACnB9oB,KAAK+oB,WAAa,IACnB,CA+CA,OA7CAjpB,EAAYinB,EAAU,CAAC,CACtB/wB,IAAK,SACLgJ,MAAO,SAAgBgqB,GACtBhpB,KAAKuoB,OAAOtqB,MAAMwH,UAAY,WAAaujB,EAAU,OACrDhpB,KAAKwoB,MAAMvqB,MAAMwH,UAAY,aAAe,IAAMujB,GAAW,MAC9D,GACE,CACFhzB,IAAK,OACL6hB,IAAK,WACJ,OAAO7X,KAAKkoB,KACb,GACE,CACFlyB,IAAK,QACL8hB,IAAK,SAAgB9Y,GACpBgB,KAAK8oB,YAAc9pB,EACnBgB,KAAK6oB,WAAWlR,YAAc3Y,CAC/B,EACA6Y,IAAK,WACJ,OAAO7X,KAAK8oB,WACb,GACE,CACF9yB,IAAK,OACL8hB,IAAK,SAAgB9Y,GACpBgB,KAAK+oB,WAAa/pB,EAClBgB,KAAK4oB,UAAUjR,YAAc3Y,CAC9B,EACA6Y,IAAK,WACJ,OAAO7X,KAAK+oB,UACb,GACE,CACF/yB,IAAK,gBACL8hB,IAAK,SAAgB9Y,GACpBgB,KAAK2oB,eAAe1qB,MAAMwkB,QAAUzjB,CACrC,GACE,CACFhJ,IAAK,aACL8hB,IAAK,SAAgB9Y,GACpBgB,KAAK0oB,YAAYzqB,MAAMwkB,QAAUzjB,CAClC,GACE,CACFhJ,IAAK,cACL8hB,IAAK,SAAgB9Y,GACpBgB,KAAKyoB,aAAaxqB,MAAMwkB,QAAUzjB,CACnC,KAEM+nB,CACR,CA5Fe,GAmGf,OAAO,SAAUhrB,GAEhB,IAAIT,EAAQ,CAEXurB,MAAO,GACPoC,SAAU,KACVC,YAAa,KAEbC,YAAa,KACbC,YAAa,KACbzC,WAAY,KAEZ0C,aAAc,KACdC,UAAW,KAEXnpB,MAAO,KACPC,KAAM,MAGP,OAAOyB,OAAOM,OAAO,CAAC,EAAGjG,EAAOZ,EAAOS,EAAM,QAASgD,EAAQzD,GAAQkS,EAAOlS,EAAO,CACnFisB,aAAc,IACdH,WAAY,oBACT3pB,EAAOnC,EAAOuC,GAAOxC,EAAUC,GACpC,CACA,EAIA3G,EAAOyxB,QAAQJ,WAAa,CAC3B1wB,KAAK,OACLF,KAAK,QAEIT,EAAOyxB,OAClB,CAte+C,GAsexC,KC1eP,EAAKN,OAAOvpB,IAAI,GAChB,qZCFAgtB,EAAA,kBAAAC,CAAA,MAAAnkB,EAAAmkB,EAAA,GAAAnY,EAAAxP,OAAAhC,UAAA+hB,EAAAvQ,EAAA9b,eAAAk0B,EAAA5nB,OAAAC,gBAAA,SAAAuD,EAAAmkB,EAAAnY,GAAAhM,EAAAmkB,GAAAnY,EAAArS,KAAA,EAAAwC,EAAA,mBAAA/B,OAAAA,OAAA,GAAAlH,EAAAiJ,EAAA9B,UAAA,aAAAuR,EAAAzP,EAAAL,eAAA,kBAAAuoB,EAAAloB,EAAAmoB,aAAA,yBAAAC,EAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAxP,OAAAC,eAAAuD,EAAAmkB,EAAA,CAAAxqB,MAAAqS,EAAA3P,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAAyD,EAAAmkB,EAAA,KAAAI,EAAA,aAAAvkB,GAAAukB,EAAA,SAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAhM,EAAAmkB,GAAAnY,CAAA,WAAAwY,EAAAxkB,EAAAmkB,EAAAnY,EAAAuQ,GAAA,IAAApgB,EAAAgoB,GAAAA,EAAA3pB,qBAAAiqB,EAAAN,EAAAM,EAAAvxB,EAAAsJ,OAAA6O,OAAAlP,EAAA3B,WAAAoR,EAAA,IAAA8Y,EAAAnI,GAAA,WAAA6H,EAAAlxB,EAAA,WAAAyG,MAAAgrB,EAAA3kB,EAAAgM,EAAAJ,KAAA1Y,CAAA,UAAA0xB,EAAA5kB,EAAAmkB,EAAAnY,GAAA,WAAAjc,KAAA,SAAAkL,IAAA+E,EAAAhD,KAAAmnB,EAAAnY,GAAA,OAAAhM,GAAA,OAAAjQ,KAAA,QAAAkL,IAAA+E,EAAA,EAAAmkB,EAAAK,KAAAA,EAAA,IAAAnQ,EAAA,iBAAAzV,EAAA,iBAAAyI,EAAA,YAAAhC,EAAA,YAAA4O,EAAA,YAAAwQ,IAAA,UAAAI,IAAA,UAAAC,IAAA,KAAAvhB,EAAA,GAAAghB,EAAAhhB,EAAArQ,GAAA,8BAAAkhB,EAAA5X,OAAAuoB,eAAA5vB,EAAAif,GAAAA,EAAAA,EAAA4Q,EAAA,MAAA7vB,GAAAA,IAAA6W,GAAAuQ,EAAAvf,KAAA7H,EAAAjC,KAAAqQ,EAAApO,GAAA,IAAA8vB,EAAAH,EAAAtqB,UAAAiqB,EAAAjqB,UAAAgC,OAAA6O,OAAA9H,GAAA,SAAA2hB,EAAAllB,GAAA,0BAAAvC,SAAA,SAAA0mB,GAAAI,EAAAvkB,EAAAmkB,GAAA,SAAAnkB,GAAA,YAAArE,QAAAwoB,EAAAnkB,EAAA,gBAAAmlB,EAAAnlB,EAAAmkB,GAAA,SAAAiB,EAAApZ,EAAAoY,EAAAjoB,EAAAjJ,GAAA,IAAA0Y,EAAAgZ,EAAA5kB,EAAAgM,GAAAhM,EAAAokB,GAAA,aAAAxY,EAAA7b,KAAA,KAAAs0B,EAAAzY,EAAA3Q,IAAAoZ,EAAAgQ,EAAA1qB,MAAA,OAAA0a,GAAA,UAAAla,EAAAka,IAAAkI,EAAAvf,KAAAqX,EAAA,WAAA8P,EAAA/oB,QAAAiZ,EAAAgR,SAAAhqB,MAAA,SAAA2E,GAAAolB,EAAA,OAAAplB,EAAA7D,EAAAjJ,EAAA,aAAA8M,GAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAixB,EAAA/oB,QAAAiZ,GAAAhZ,MAAA,SAAA2E,GAAAqkB,EAAA1qB,MAAAqG,EAAA7D,EAAAkoB,EAAA,aAAArkB,GAAA,OAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAA,EAAA0Y,EAAA3Q,IAAA,KAAA+Q,EAAAoY,EAAA,gBAAAzqB,MAAA,SAAAqG,EAAAuc,GAAA,SAAA+I,IAAA,WAAAnB,GAAA,SAAAA,EAAAnY,GAAAoZ,EAAAplB,EAAAuc,EAAA4H,EAAAnY,EAAA,WAAAA,EAAAA,EAAAA,EAAA3Q,KAAAiqB,EAAAA,GAAAA,GAAA,aAAAX,EAAAR,EAAAnY,EAAAuQ,GAAA,IAAA6H,EAAA/P,EAAA,gBAAAlY,EAAAjJ,GAAA,GAAAkxB,IAAA/c,EAAA,MAAAke,MAAA,mCAAAnB,IAAA/e,EAAA,cAAAlJ,EAAA,MAAAjJ,EAAA,OAAAyG,MAAAqG,EAAAzE,MAAA,OAAAghB,EAAAiJ,OAAArpB,EAAAogB,EAAAthB,IAAA/H,IAAA,KAAA0Y,EAAA2Q,EAAAkJ,SAAA,GAAA7Z,EAAA,KAAAyY,EAAAqB,EAAA9Z,EAAA2Q,GAAA,GAAA8H,EAAA,IAAAA,IAAApQ,EAAA,gBAAAoQ,CAAA,cAAA9H,EAAAiJ,OAAAjJ,EAAAoJ,KAAApJ,EAAAqJ,MAAArJ,EAAAthB,SAAA,aAAAshB,EAAAiJ,OAAA,IAAApB,IAAA/P,EAAA,MAAA+P,EAAA/e,EAAAkX,EAAAthB,IAAAshB,EAAAsJ,kBAAAtJ,EAAAthB,IAAA,gBAAAshB,EAAAiJ,QAAAjJ,EAAAuJ,OAAA,SAAAvJ,EAAAthB,KAAAmpB,EAAA/c,EAAA,IAAA9D,EAAAqhB,EAAAT,EAAAnY,EAAAuQ,GAAA,cAAAhZ,EAAAxT,KAAA,IAAAq0B,EAAA7H,EAAAhhB,KAAA8J,EAAAzG,EAAA2E,EAAAtI,MAAAgZ,EAAA,gBAAAta,MAAA4J,EAAAtI,IAAAM,KAAAghB,EAAAhhB,KAAA,WAAAgI,EAAAxT,OAAAq0B,EAAA/e,EAAAkX,EAAAiJ,OAAA,QAAAjJ,EAAAthB,IAAAsI,EAAAtI,IAAA,YAAAyqB,EAAAvB,EAAAnY,GAAA,IAAAuQ,EAAAvQ,EAAAwZ,OAAApB,EAAAD,EAAA9pB,SAAAkiB,GAAA,GAAA6H,IAAApkB,EAAA,OAAAgM,EAAAyZ,SAAA,eAAAlJ,GAAA4H,EAAA9pB,SAAA,SAAA2R,EAAAwZ,OAAA,SAAAxZ,EAAA/Q,IAAA+E,EAAA0lB,EAAAvB,EAAAnY,GAAA,UAAAA,EAAAwZ,SAAA,WAAAjJ,IAAAvQ,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAA8L,EAAA,aAAAtI,EAAA,IAAA9X,EAAAyoB,EAAAR,EAAAD,EAAA9pB,SAAA2R,EAAA/Q,KAAA,aAAAkB,EAAApM,KAAA,OAAAic,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAAkB,EAAAlB,IAAA+Q,EAAAyZ,SAAA,KAAAxR,EAAA,IAAA/gB,EAAAiJ,EAAAlB,IAAA,OAAA/H,EAAAA,EAAAqI,MAAAyQ,EAAAmY,EAAA4B,YAAA7yB,EAAAyG,MAAAqS,EAAAtQ,KAAAyoB,EAAA6B,QAAA,WAAAha,EAAAwZ,SAAAxZ,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,GAAAgM,EAAAyZ,SAAA,KAAAxR,GAAA/gB,GAAA8Y,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAAzE,EAAAyZ,SAAA,KAAAxR,EAAA,UAAAgS,EAAAjmB,GAAA,IAAAmkB,EAAA,CAAA+B,OAAAlmB,EAAA,SAAAA,IAAAmkB,EAAAgC,SAAAnmB,EAAA,SAAAA,IAAAmkB,EAAAiC,WAAApmB,EAAA,GAAAmkB,EAAAkC,SAAArmB,EAAA,SAAAsmB,WAAApmB,KAAAikB,EAAA,UAAAoC,EAAAvmB,GAAA,IAAAmkB,EAAAnkB,EAAAwmB,YAAA,GAAArC,EAAAp0B,KAAA,gBAAAo0B,EAAAlpB,IAAA+E,EAAAwmB,WAAArC,CAAA,UAAAO,EAAA1kB,GAAA,KAAAsmB,WAAA,EAAAJ,OAAA,SAAAlmB,EAAAvC,QAAAwoB,EAAA,WAAAnsB,OAAA,YAAAkrB,EAAAb,GAAA,GAAAA,GAAA,KAAAA,EAAA,KAAAnY,EAAAmY,EAAAjxB,GAAA,GAAA8Y,EAAA,OAAAA,EAAAhP,KAAAmnB,GAAA,sBAAAA,EAAAzoB,KAAA,OAAAyoB,EAAA,IAAAsC,MAAAtC,EAAA5uB,QAAA,KAAA6uB,GAAA,EAAAjoB,EAAA,SAAAT,IAAA,OAAA0oB,EAAAD,EAAA5uB,QAAA,GAAAgnB,EAAAvf,KAAAmnB,EAAAC,GAAA,OAAA1oB,EAAA/B,MAAAwqB,EAAAC,GAAA1oB,EAAAH,MAAA,EAAAG,EAAA,OAAAA,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,SAAAS,EAAAT,KAAAS,CAAA,YAAAsU,UAAAtW,EAAAgqB,GAAA,2BAAAU,EAAArqB,UAAAsqB,EAAAV,EAAAa,EAAA,eAAAtrB,MAAAmrB,EAAAxoB,cAAA,IAAA8nB,EAAAU,EAAA,eAAAnrB,MAAAkrB,EAAAvoB,cAAA,IAAAuoB,EAAA6B,YAAAnC,EAAAO,EAAAT,EAAA,qBAAAF,EAAAwC,oBAAA,SAAA3mB,GAAA,IAAAmkB,EAAA,mBAAAnkB,GAAAA,EAAAzF,YAAA,QAAA4pB,IAAAA,IAAAU,GAAA,uBAAAV,EAAAuC,aAAAvC,EAAAl0B,MAAA,EAAAk0B,EAAAyC,KAAA,SAAA5mB,GAAA,OAAAxD,OAAAqqB,eAAArqB,OAAAqqB,eAAA7mB,EAAA8kB,IAAA9kB,EAAA8mB,UAAAhC,EAAAP,EAAAvkB,EAAAqkB,EAAA,sBAAArkB,EAAAxF,UAAAgC,OAAA6O,OAAA4Z,GAAAjlB,CAAA,EAAAmkB,EAAA4C,MAAA,SAAA/mB,GAAA,OAAAqlB,QAAArlB,EAAA,EAAAklB,EAAAC,EAAA3qB,WAAA+pB,EAAAY,EAAA3qB,UAAAoR,GAAA,0BAAAuY,EAAAgB,cAAAA,EAAAhB,EAAA6C,MAAA,SAAAhnB,EAAAgM,EAAAuQ,EAAA6H,EAAAjoB,QAAA,IAAAA,IAAAA,EAAAhB,SAAA,IAAAjI,EAAA,IAAAiyB,EAAAX,EAAAxkB,EAAAgM,EAAAuQ,EAAA6H,GAAAjoB,GAAA,OAAAgoB,EAAAwC,oBAAA3a,GAAA9Y,EAAAA,EAAAwI,OAAAL,MAAA,SAAA2E,GAAA,OAAAA,EAAAzE,KAAAyE,EAAArG,MAAAzG,EAAAwI,MAAA,KAAAwpB,EAAAD,GAAAV,EAAAU,EAAAZ,EAAA,aAAAE,EAAAU,EAAA/xB,GAAA,0BAAAqxB,EAAAU,EAAA,qDAAAd,EAAA7T,KAAA,SAAAtQ,GAAA,IAAAmkB,EAAA3nB,OAAAwD,GAAAgM,EAAA,WAAAuQ,KAAA4H,EAAAnY,EAAA9L,KAAAqc,GAAA,OAAAvQ,EAAAzO,UAAA,SAAA7B,IAAA,KAAAsQ,EAAAzW,QAAA,KAAAyK,EAAAgM,EAAAlO,MAAA,GAAAkC,KAAAmkB,EAAA,OAAAzoB,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,QAAAA,EAAAH,MAAA,EAAAG,CAAA,GAAAyoB,EAAAa,OAAAA,EAAAN,EAAAlqB,UAAA,CAAAD,YAAAmqB,EAAA5qB,MAAA,SAAAqqB,GAAA,QAAA8C,KAAA,OAAAvrB,KAAA,OAAAiqB,KAAA,KAAAC,MAAA5lB,EAAA,KAAAzE,MAAA,OAAAkqB,SAAA,UAAAD,OAAA,YAAAvqB,IAAA+E,EAAA,KAAAsmB,WAAA7oB,QAAA8oB,IAAApC,EAAA,QAAAnY,KAAA,WAAAA,EAAAnb,OAAA,IAAA0rB,EAAAvf,KAAA,KAAAgP,KAAAya,OAAAza,EAAAxJ,MAAA,WAAAwJ,GAAAhM,EAAA,EAAAoW,KAAA,gBAAA7a,MAAA,MAAAyE,EAAA,KAAAsmB,WAAA,GAAAE,WAAA,aAAAxmB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,YAAAisB,IAAA,EAAArB,kBAAA,SAAA1B,GAAA,QAAA5oB,KAAA,MAAA4oB,EAAA,IAAAnY,EAAA,cAAAmb,EAAA5K,EAAA6H,GAAA,OAAAlxB,EAAAnD,KAAA,QAAAmD,EAAA+H,IAAAkpB,EAAAnY,EAAAtQ,KAAA6gB,EAAA6H,IAAApY,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,KAAAokB,CAAA,SAAAA,EAAA,KAAAkC,WAAA/wB,OAAA,EAAA6uB,GAAA,IAAAA,EAAA,KAAAjoB,EAAA,KAAAmqB,WAAAlC,GAAAlxB,EAAAiJ,EAAAqqB,WAAA,YAAArqB,EAAA+pB,OAAA,OAAAiB,EAAA,UAAAhrB,EAAA+pB,QAAA,KAAAe,KAAA,KAAArb,EAAA2Q,EAAAvf,KAAAb,EAAA,YAAAkoB,EAAA9H,EAAAvf,KAAAb,EAAA,iBAAAyP,GAAAyY,EAAA,SAAA4C,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,WAAAc,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,SAAAxa,GAAA,QAAAqb,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,YAAA9B,EAAA,MAAAkB,MAAA,kDAAA0B,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,KAAAN,OAAA,SAAA9lB,EAAAmkB,GAAA,QAAAnY,EAAA,KAAAsa,WAAA/wB,OAAA,EAAAyW,GAAA,IAAAA,EAAA,KAAAoY,EAAA,KAAAkC,WAAAta,GAAA,GAAAoY,EAAA8B,QAAA,KAAAe,MAAA1K,EAAAvf,KAAAonB,EAAA,oBAAA6C,KAAA7C,EAAAgC,WAAA,KAAAjqB,EAAAioB,EAAA,OAAAjoB,IAAA,UAAA6D,GAAA,aAAAA,IAAA7D,EAAA+pB,QAAA/B,GAAAA,GAAAhoB,EAAAiqB,aAAAjqB,EAAA,UAAAjJ,EAAAiJ,EAAAA,EAAAqqB,WAAA,UAAAtzB,EAAAnD,KAAAiQ,EAAA9M,EAAA+H,IAAAkpB,EAAAhoB,GAAA,KAAAqpB,OAAA,YAAA9pB,KAAAS,EAAAiqB,WAAAnS,GAAA,KAAAvO,SAAAxS,EAAA,EAAAwS,SAAA,SAAA1F,EAAAmkB,GAAA,aAAAnkB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,gBAAA+E,EAAAjQ,MAAA,aAAAiQ,EAAAjQ,KAAA,KAAA2L,KAAAsE,EAAA/E,IAAA,WAAA+E,EAAAjQ,MAAA,KAAAm3B,KAAA,KAAAjsB,IAAA+E,EAAA/E,IAAA,KAAAuqB,OAAA,cAAA9pB,KAAA,kBAAAsE,EAAAjQ,MAAAo0B,IAAA,KAAAzoB,KAAAyoB,GAAAlQ,CAAA,EAAAmT,OAAA,SAAApnB,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAoa,aAAApmB,EAAA,YAAA0F,SAAAsG,EAAAwa,WAAAxa,EAAAqa,UAAAE,EAAAva,GAAAiI,CAAA,kBAAAjU,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAka,SAAAlmB,EAAA,KAAAuc,EAAAvQ,EAAAwa,WAAA,aAAAjK,EAAAxsB,KAAA,KAAAq0B,EAAA7H,EAAAthB,IAAAsrB,EAAAva,EAAA,QAAAoY,CAAA,QAAAmB,MAAA,0BAAA8B,cAAA,SAAAlD,EAAAnY,EAAAuQ,GAAA,YAAAkJ,SAAA,CAAAprB,SAAA2qB,EAAAb,GAAA4B,WAAA/Z,EAAAga,QAAAzJ,GAAA,cAAAiJ,SAAA,KAAAvqB,IAAA+E,GAAAiU,CAAA,GAAAkQ,CAAA,UAAAmD,EAAA/K,EAAAvc,EAAAmkB,EAAAnY,EAAAoY,EAAAlxB,EAAA0Y,GAAA,QAAAzP,EAAAogB,EAAArpB,GAAA0Y,GAAAyY,EAAAloB,EAAAxC,KAAA,OAAA4iB,GAAA,YAAA4H,EAAA5H,EAAA,CAAApgB,EAAAZ,KAAAyE,EAAAqkB,GAAAlpB,QAAAC,QAAAipB,GAAAhpB,KAAA2Q,EAAAoY,EAAA,UAAAmD,EAAAhL,GAAA,sBAAAvc,EAAA,KAAAmkB,EAAA7uB,UAAA,WAAA6F,SAAA,SAAA6Q,EAAAoY,GAAA,IAAAlxB,EAAAqpB,EAAA5mB,MAAAqK,EAAAmkB,GAAA,SAAAqD,EAAAjL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,OAAAlL,EAAA,UAAAkL,EAAAlL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,QAAAlL,EAAA,CAAAiL,OAAA,gBAAAE,EAAAvD,EAAAnY,GAAA,QAAAhM,EAAA,EAAAA,EAAAgM,EAAAzW,OAAAyK,IAAA,KAAAokB,EAAApY,EAAAhM,GAAAokB,EAAA/nB,WAAA+nB,EAAA/nB,aAAA,EAAA+nB,EAAA9nB,cAAA,YAAA8nB,IAAAA,EAAA7nB,UAAA,GAAAC,OAAAC,eAAA0nB,EAAAwD,EAAAvD,EAAAzzB,KAAAyzB,EAAA,WAAAuD,EAAA3nB,GAAA,IAAA7D,EAAA,SAAA6D,EAAAgM,GAAA,aAAA7R,EAAA6F,KAAAA,EAAA,OAAAA,EAAA,IAAAmkB,EAAAnkB,EAAA5F,OAAAwtB,aAAA,YAAAzD,EAAA,KAAAhoB,EAAAgoB,EAAAnnB,KAAAgD,EAAAgM,GAAA,wBAAA7R,EAAAgC,GAAA,OAAAA,EAAA,UAAAsU,UAAA,kEAAAzE,EAAAiO,OAAA4N,QAAA7nB,EAAA,CAAA8nB,CAAA9nB,EAAA,0BAAA7F,EAAAgC,GAAAA,EAAAA,EAAA,GAIA,IAJAgoB,EAAAnY,EAAAhM,EAqI6B+nB,EAjBEC,EA3CCC,EA3BDC,EAlBJC,EAlBNC,EADEC,EAAVC,EAAU,yBATvBnE,EASuB,SAAAmE,KATvB,SAAAp1B,EAAAqpB,GAAA,KAAArpB,aAAAqpB,GAAA,UAAA9L,UAAA,qCASuB8X,CAAA,KAAAD,EAAA,EATvBtc,EASuB,KATvBhM,EASuB,EAAArP,IAAA,OAAAgJ,OAAA0uB,EAAAd,EAAArD,IAAA0C,MACnB,SAAA4B,IAAA,IAAA/W,EAAA,YAAAyS,IAAAM,MAAA,SAAAiE,GAAA,cAAAA,EAAAxB,KAAAwB,EAAA/sB,MAAA,OACIgtB,MAEe5xB,SAASsoB,iBAAiB,+BAEhC3hB,SAAQ,SAAAjG,GAEb,IAAImxB,EAAiBnxB,EAAQmB,aAAa,uBAE1C+vB,MACAA,MACAA,MACAA,MAEAjX,EAAKmX,aAAapxB,EAASmxB,EAC/B,IAAG,wBAAAF,EAAArS,OAAA,GAAAoS,EAAA,KACN,WAhBgB,OAAAH,EAAA1yB,MAAC,KAADL,UAAA,KAAA3E,IAAA,aAAAgJ,OAAAyuB,EAAAb,EAAArD,IAAA0C,MAkBjB,SAAAiC,IAAA,IAAAC,EAAA,YAAA5E,IAAAM,MAAA,SAAAuE,GAAA,cAAAA,EAAA9B,KAAA8B,EAAArtB,MAAA,OACIgtB,MAEe5xB,SAASsoB,iBAAiB,iCAEhC3hB,SAAQ,SAAAjG,GAEb,IAAIwxB,EAAiBxxB,EAAQmB,aAAa,oBAE1C+vB,MACAA,MACAA,MACAA,MAEAI,EAAKG,eAAezxB,EAASwxB,EACjC,IAAG,wBAAAD,EAAA3S,OAAA,GAAAyS,EAAA,KACN,WAhBsB,OAAAT,EAAAzyB,MAAC,KAADL,UAAA,KAAA3E,IAAA,iBAAAgJ,OAAAwuB,EAAAZ,EAAArD,IAAA0C,MAkBvB,SAAAsC,EAA4B1xB,EAASwxB,GAAc,IAAAlK,EAAAqK,EAAAC,EAAAC,EAAAC,EAAA,YAAApF,IAAAM,MAAA,SAAA+E,GAAA,cAAAA,EAAAtC,KAAAsC,EAAA7tB,MAAA,OAElC,OAATojB,EAAO,CAAC,EAACyK,EAAA7tB,KAAA,EAEO8tB,EAAAA,EAAgBC,oBA7CjB,aA6CyD3K,GAAK,OAW/E,GAXEqK,EAAOI,EAAA5D,KAEXnuB,EAAQkyB,UAAYP,EAELryB,SAAS6yB,eAAe,iBAGhCzvB,iBAAiB,SAAS,WAG7BovB,EAAKM,iBACT,IAEsB,QAAlBZ,EAAwB,CAAAO,EAAA7tB,KAAA,SAC8B,OAAhD0tB,EAAYtyB,SAAS6yB,eAAe,aAAYJ,EAAA7tB,KAAA,GAE7B8tB,EAAAA,EAAgBC,oBA3DrB,uBA2DkE3K,GAAK,QAAvFuK,EAAYE,EAAA5D,KAChByD,EAAUM,UAAYL,EAEtBQ,EAAAA,EAAKC,UAAUV,EAAU/lB,IAAI,yBAAAkmB,EAAAnT,OAAA,GAAA8S,EAAA,KAEpC,SAzB0Ba,EAAAC,GAAA,OAAA7B,EAAAxyB,MAAC,KAADL,UAAA,KAAA3E,IAAA,kBAAAgJ,OAAAuuB,EAAAX,EAAArD,IAAA0C,MA2B3B,SAAAqD,IAAA,IAAAC,EAAAd,EAAAC,EAAAc,EAAA,OAAAjG,IAAAM,MAAA,SAAA4F,GAAA,cAAAA,EAAAnD,KAAAmD,EAAA1uB,MAAA,OAK0D,OAHlDwuB,EAAOvvB,KAGLyuB,EAAYtyB,SAAS6yB,eAAe,aAAYS,EAAA1uB,KAAA,EAE7B8tB,EAAAA,EAAgBC,oBA1EjB,kBA0E8D,MAAK,OAAvFJ,EAAYe,EAAAzE,KAChByD,EAAUM,UAAYL,EAEtBQ,EAAAA,EAAKC,UAAUV,EAAU/lB,IAIrB8mB,EAAcrzB,SAAS6yB,eAAe,kBAG1CE,EAAAA,EAAKQ,UAAUF,GAEfA,EAAYjwB,iBAAiB,UAAU,SAAUowB,GAM7C,GAJAA,EAAMC,iBACND,EAAME,kBAGDL,EAAYM,gBAAjB,CAOI,IAAIC,EAAWb,EAAAA,EAAKc,kBAAkBR,GACtCzB,MAEAwB,EAAKU,eAAeF,GAGxBP,EAAYlzB,UAAUC,IAAI,gBAF1B,MATIizB,EAAYlzB,UAAUC,IAAI,gBAalC,IAAG,GAAO,yBAAAkzB,EAAAhU,OAAA,GAAA6T,EAAA,UACb,WAzC2B,OAAA/B,EAAAvyB,MAAC,KAADL,UAAA,KAAA3E,IAAA,iBAAAgJ,OAAAsuB,EAAAV,EAAArD,IAAA0C,MA2C5B,SAAAiE,EAA4BH,GAAQ,IAAAze,EAAA,OAAAiY,IAAAM,MAAA,SAAAsG,GAAA,cAAAA,EAAA7D,KAAA6D,EAAApvB,MAAA,cAAAovB,EAAA7D,KAAA,EAAA6D,EAAApvB,KAAA,EAGVqvB,EAAAA,EAAUC,wBAAwBC,QAAS,cAAa,OAGjB,OAHrDhf,EAAK6e,EAAAnF,KAGT+E,EAASQ,WAAa77B,OAAOoI,SAAS0a,KAAK/T,MAAM,KAAK,GAAG0sB,EAAApvB,KAAA,EAErCyvB,EAAAA,EAAIC,iBAAiB,kBAAmBV,EAAUze,GAAO,GAAO,GAAO,GAAM,OAAtF6e,EAAAnF,KACXkE,EAAAA,EAAKwB,iBAAiB,uCAAwC,KAAM,GACpExB,EAAAA,EAAKyB,WAAW,aAAaR,EAAApvB,KAAA,iBAAAovB,EAAA7D,KAAA,GAAA6D,EAAAS,GAAAT,EAAA,SAE7BjB,EAAAA,EAAK2B,eAAe,kDAAmD,KAAM,GACxD,yBAAAV,EAAA1U,OAAA,GAAAyU,EAAA,mBAE5B,SAf0BY,GAAA,OAAAxD,EAAAtyB,MAAC,KAADL,UAAA,KAAA3E,IAAA,eAAAgJ,OAAAquB,EAAAT,EAAArD,IAAA0C,MAiB3B,SAAA8E,EAA0Bl0B,EAASmxB,GAAc,IAAA7J,EAAA6M,EAAAC,EAAAzC,EAAA,OAAAjF,IAAAM,MAAA,SAAAqH,GAAA,cAAAA,EAAA5E,KAAA4E,EAAAnwB,MAAA,cAAAmwB,EAAAnwB,KAAA,EAC5Bf,KAAKmxB,gBAAe,OAO6D,OAP9FhN,EAAI+M,EAAAlG,KAEJgG,GAAc,EACkB,WAAhChD,EAAe73B,gBACf66B,GAAc,GAGdC,EAAW,CAAE,KAAQ9M,EAAM,eAAkB,GAAFxhB,OAAKqrB,GAAkB,YAAegD,GAAaE,EAAAnwB,KAAA,EAE9E8tB,EAAAA,EAAgBC,oBA3InB,WA2IyDmC,GAAS,OAA/EzC,EAAO0C,EAAAlG,KAEXnuB,EAAQkyB,UAAYP,EAAQ,yBAAA0C,EAAAzV,OAAA,GAAAsV,EAAA,UAC/B,SAbwBK,EAAAC,GAAA,OAAAhE,EAAAryB,MAAC,KAADL,UAAA,KAAA3E,IAAA,gBAAAgJ,OAAAouB,EAAAR,EAAArD,IAAA0C,MAgBzB,SAAAqF,IAAA,IAAAnN,EAAA,OAAAoF,IAAAM,MAAA,SAAA0H,GAAA,cAAAA,EAAAjF,KAAAiF,EAAAxwB,MAAA,cAAAwwB,EAAAxwB,KAAA,EACqByvB,EAAAA,EAAIgB,QAAQ,sBAAqB,OACtB,OADxBrN,EAAIoN,EAAAvG,KACR+C,MAA4BwD,EAAApG,OAAA,SACrBhH,GAAI,wBAAAoN,EAAA9V,OAAA,GAAA6V,EAAA,KACd,WAJyB,OAAAlE,EAAApyB,MAAC,KAADL,UAAA,KArJ9B0W,GAAA0b,EAAAvD,EAAA3pB,UAAAwR,GAAAhM,GAAA0nB,EAAAvD,EAAAnkB,GAAAxD,OAAAC,eAAA0nB,EAAA,aAAA5nB,UAAA,IAAA4nB,GAqJ8B,iWCrJ9BD,EAAA,kBAAAC,CAAA,MAAAnkB,EAAAmkB,EAAA,GAAAnY,EAAAxP,OAAAhC,UAAA+hB,EAAAvQ,EAAA9b,eAAAk0B,EAAA5nB,OAAAC,gBAAA,SAAAuD,EAAAmkB,EAAAnY,GAAAhM,EAAAmkB,GAAAnY,EAAArS,KAAA,EAAAwC,EAAA,mBAAA/B,OAAAA,OAAA,GAAAlH,EAAAiJ,EAAA9B,UAAA,aAAAuR,EAAAzP,EAAAL,eAAA,kBAAAuoB,EAAAloB,EAAAmoB,aAAA,yBAAAC,EAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAxP,OAAAC,eAAAuD,EAAAmkB,EAAA,CAAAxqB,MAAAqS,EAAA3P,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAAyD,EAAAmkB,EAAA,KAAAI,EAAA,aAAAvkB,GAAAukB,EAAA,SAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAhM,EAAAmkB,GAAAnY,CAAA,WAAAwY,EAAAxkB,EAAAmkB,EAAAnY,EAAAuQ,GAAA,IAAApgB,EAAAgoB,GAAAA,EAAA3pB,qBAAAiqB,EAAAN,EAAAM,EAAAvxB,EAAAsJ,OAAA6O,OAAAlP,EAAA3B,WAAAoR,EAAA,IAAA8Y,EAAAnI,GAAA,WAAA6H,EAAAlxB,EAAA,WAAAyG,MAAAgrB,EAAA3kB,EAAAgM,EAAAJ,KAAA1Y,CAAA,UAAA0xB,EAAA5kB,EAAAmkB,EAAAnY,GAAA,WAAAjc,KAAA,SAAAkL,IAAA+E,EAAAhD,KAAAmnB,EAAAnY,GAAA,OAAAhM,GAAA,OAAAjQ,KAAA,QAAAkL,IAAA+E,EAAA,EAAAmkB,EAAAK,KAAAA,EAAA,IAAAnQ,EAAA,iBAAAzV,EAAA,iBAAAyI,EAAA,YAAAhC,EAAA,YAAA4O,EAAA,YAAAwQ,IAAA,UAAAI,IAAA,UAAAC,IAAA,KAAAvhB,EAAA,GAAAghB,EAAAhhB,EAAArQ,GAAA,8BAAAkhB,EAAA5X,OAAAuoB,eAAA5vB,EAAAif,GAAAA,EAAAA,EAAA4Q,EAAA,MAAA7vB,GAAAA,IAAA6W,GAAAuQ,EAAAvf,KAAA7H,EAAAjC,KAAAqQ,EAAApO,GAAA,IAAA8vB,EAAAH,EAAAtqB,UAAAiqB,EAAAjqB,UAAAgC,OAAA6O,OAAA9H,GAAA,SAAA2hB,EAAAllB,GAAA,0BAAAvC,SAAA,SAAA0mB,GAAAI,EAAAvkB,EAAAmkB,GAAA,SAAAnkB,GAAA,YAAArE,QAAAwoB,EAAAnkB,EAAA,gBAAAmlB,EAAAnlB,EAAAmkB,GAAA,SAAAiB,EAAApZ,EAAAoY,EAAAjoB,EAAAjJ,GAAA,IAAA0Y,EAAAgZ,EAAA5kB,EAAAgM,GAAAhM,EAAAokB,GAAA,aAAAxY,EAAA7b,KAAA,KAAAs0B,EAAAzY,EAAA3Q,IAAAoZ,EAAAgQ,EAAA1qB,MAAA,OAAA0a,GAAA,UAAAla,EAAAka,IAAAkI,EAAAvf,KAAAqX,EAAA,WAAA8P,EAAA/oB,QAAAiZ,EAAAgR,SAAAhqB,MAAA,SAAA2E,GAAAolB,EAAA,OAAAplB,EAAA7D,EAAAjJ,EAAA,aAAA8M,GAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAixB,EAAA/oB,QAAAiZ,GAAAhZ,MAAA,SAAA2E,GAAAqkB,EAAA1qB,MAAAqG,EAAA7D,EAAAkoB,EAAA,aAAArkB,GAAA,OAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAA,EAAA0Y,EAAA3Q,IAAA,KAAA+Q,EAAAoY,EAAA,gBAAAzqB,MAAA,SAAAqG,EAAAuc,GAAA,SAAA+I,IAAA,WAAAnB,GAAA,SAAAA,EAAAnY,GAAAoZ,EAAAplB,EAAAuc,EAAA4H,EAAAnY,EAAA,WAAAA,EAAAA,EAAAA,EAAA3Q,KAAAiqB,EAAAA,GAAAA,GAAA,aAAAX,EAAAR,EAAAnY,EAAAuQ,GAAA,IAAA6H,EAAA/P,EAAA,gBAAAlY,EAAAjJ,GAAA,GAAAkxB,IAAA/c,EAAA,MAAAke,MAAA,mCAAAnB,IAAA/e,EAAA,cAAAlJ,EAAA,MAAAjJ,EAAA,OAAAyG,MAAAqG,EAAAzE,MAAA,OAAAghB,EAAAiJ,OAAArpB,EAAAogB,EAAAthB,IAAA/H,IAAA,KAAA0Y,EAAA2Q,EAAAkJ,SAAA,GAAA7Z,EAAA,KAAAyY,EAAAqB,EAAA9Z,EAAA2Q,GAAA,GAAA8H,EAAA,IAAAA,IAAApQ,EAAA,gBAAAoQ,CAAA,cAAA9H,EAAAiJ,OAAAjJ,EAAAoJ,KAAApJ,EAAAqJ,MAAArJ,EAAAthB,SAAA,aAAAshB,EAAAiJ,OAAA,IAAApB,IAAA/P,EAAA,MAAA+P,EAAA/e,EAAAkX,EAAAthB,IAAAshB,EAAAsJ,kBAAAtJ,EAAAthB,IAAA,gBAAAshB,EAAAiJ,QAAAjJ,EAAAuJ,OAAA,SAAAvJ,EAAAthB,KAAAmpB,EAAA/c,EAAA,IAAA9D,EAAAqhB,EAAAT,EAAAnY,EAAAuQ,GAAA,cAAAhZ,EAAAxT,KAAA,IAAAq0B,EAAA7H,EAAAhhB,KAAA8J,EAAAzG,EAAA2E,EAAAtI,MAAAgZ,EAAA,gBAAAta,MAAA4J,EAAAtI,IAAAM,KAAAghB,EAAAhhB,KAAA,WAAAgI,EAAAxT,OAAAq0B,EAAA/e,EAAAkX,EAAAiJ,OAAA,QAAAjJ,EAAAthB,IAAAsI,EAAAtI,IAAA,YAAAyqB,EAAAvB,EAAAnY,GAAA,IAAAuQ,EAAAvQ,EAAAwZ,OAAApB,EAAAD,EAAA9pB,SAAAkiB,GAAA,GAAA6H,IAAApkB,EAAA,OAAAgM,EAAAyZ,SAAA,eAAAlJ,GAAA4H,EAAA9pB,SAAA,SAAA2R,EAAAwZ,OAAA,SAAAxZ,EAAA/Q,IAAA+E,EAAA0lB,EAAAvB,EAAAnY,GAAA,UAAAA,EAAAwZ,SAAA,WAAAjJ,IAAAvQ,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAA8L,EAAA,aAAAtI,EAAA,IAAA9X,EAAAyoB,EAAAR,EAAAD,EAAA9pB,SAAA2R,EAAA/Q,KAAA,aAAAkB,EAAApM,KAAA,OAAAic,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAAkB,EAAAlB,IAAA+Q,EAAAyZ,SAAA,KAAAxR,EAAA,IAAA/gB,EAAAiJ,EAAAlB,IAAA,OAAA/H,EAAAA,EAAAqI,MAAAyQ,EAAAmY,EAAA4B,YAAA7yB,EAAAyG,MAAAqS,EAAAtQ,KAAAyoB,EAAA6B,QAAA,WAAAha,EAAAwZ,SAAAxZ,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,GAAAgM,EAAAyZ,SAAA,KAAAxR,GAAA/gB,GAAA8Y,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAAzE,EAAAyZ,SAAA,KAAAxR,EAAA,UAAAgS,EAAAjmB,GAAA,IAAAmkB,EAAA,CAAA+B,OAAAlmB,EAAA,SAAAA,IAAAmkB,EAAAgC,SAAAnmB,EAAA,SAAAA,IAAAmkB,EAAAiC,WAAApmB,EAAA,GAAAmkB,EAAAkC,SAAArmB,EAAA,SAAAsmB,WAAApmB,KAAAikB,EAAA,UAAAoC,EAAAvmB,GAAA,IAAAmkB,EAAAnkB,EAAAwmB,YAAA,GAAArC,EAAAp0B,KAAA,gBAAAo0B,EAAAlpB,IAAA+E,EAAAwmB,WAAArC,CAAA,UAAAO,EAAA1kB,GAAA,KAAAsmB,WAAA,EAAAJ,OAAA,SAAAlmB,EAAAvC,QAAAwoB,EAAA,WAAAnsB,OAAA,YAAAkrB,EAAAb,GAAA,GAAAA,GAAA,KAAAA,EAAA,KAAAnY,EAAAmY,EAAAjxB,GAAA,GAAA8Y,EAAA,OAAAA,EAAAhP,KAAAmnB,GAAA,sBAAAA,EAAAzoB,KAAA,OAAAyoB,EAAA,IAAAsC,MAAAtC,EAAA5uB,QAAA,KAAA6uB,GAAA,EAAAjoB,EAAA,SAAAT,IAAA,OAAA0oB,EAAAD,EAAA5uB,QAAA,GAAAgnB,EAAAvf,KAAAmnB,EAAAC,GAAA,OAAA1oB,EAAA/B,MAAAwqB,EAAAC,GAAA1oB,EAAAH,MAAA,EAAAG,EAAA,OAAAA,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,SAAAS,EAAAT,KAAAS,CAAA,YAAAsU,UAAAtW,EAAAgqB,GAAA,2BAAAU,EAAArqB,UAAAsqB,EAAAV,EAAAa,EAAA,eAAAtrB,MAAAmrB,EAAAxoB,cAAA,IAAA8nB,EAAAU,EAAA,eAAAnrB,MAAAkrB,EAAAvoB,cAAA,IAAAuoB,EAAA6B,YAAAnC,EAAAO,EAAAT,EAAA,qBAAAF,EAAAwC,oBAAA,SAAA3mB,GAAA,IAAAmkB,EAAA,mBAAAnkB,GAAAA,EAAAzF,YAAA,QAAA4pB,IAAAA,IAAAU,GAAA,uBAAAV,EAAAuC,aAAAvC,EAAAl0B,MAAA,EAAAk0B,EAAAyC,KAAA,SAAA5mB,GAAA,OAAAxD,OAAAqqB,eAAArqB,OAAAqqB,eAAA7mB,EAAA8kB,IAAA9kB,EAAA8mB,UAAAhC,EAAAP,EAAAvkB,EAAAqkB,EAAA,sBAAArkB,EAAAxF,UAAAgC,OAAA6O,OAAA4Z,GAAAjlB,CAAA,EAAAmkB,EAAA4C,MAAA,SAAA/mB,GAAA,OAAAqlB,QAAArlB,EAAA,EAAAklB,EAAAC,EAAA3qB,WAAA+pB,EAAAY,EAAA3qB,UAAAoR,GAAA,0BAAAuY,EAAAgB,cAAAA,EAAAhB,EAAA6C,MAAA,SAAAhnB,EAAAgM,EAAAuQ,EAAA6H,EAAAjoB,QAAA,IAAAA,IAAAA,EAAAhB,SAAA,IAAAjI,EAAA,IAAAiyB,EAAAX,EAAAxkB,EAAAgM,EAAAuQ,EAAA6H,GAAAjoB,GAAA,OAAAgoB,EAAAwC,oBAAA3a,GAAA9Y,EAAAA,EAAAwI,OAAAL,MAAA,SAAA2E,GAAA,OAAAA,EAAAzE,KAAAyE,EAAArG,MAAAzG,EAAAwI,MAAA,KAAAwpB,EAAAD,GAAAV,EAAAU,EAAAZ,EAAA,aAAAE,EAAAU,EAAA/xB,GAAA,0BAAAqxB,EAAAU,EAAA,qDAAAd,EAAA7T,KAAA,SAAAtQ,GAAA,IAAAmkB,EAAA3nB,OAAAwD,GAAAgM,EAAA,WAAAuQ,KAAA4H,EAAAnY,EAAA9L,KAAAqc,GAAA,OAAAvQ,EAAAzO,UAAA,SAAA7B,IAAA,KAAAsQ,EAAAzW,QAAA,KAAAyK,EAAAgM,EAAAlO,MAAA,GAAAkC,KAAAmkB,EAAA,OAAAzoB,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,QAAAA,EAAAH,MAAA,EAAAG,CAAA,GAAAyoB,EAAAa,OAAAA,EAAAN,EAAAlqB,UAAA,CAAAD,YAAAmqB,EAAA5qB,MAAA,SAAAqqB,GAAA,QAAA8C,KAAA,OAAAvrB,KAAA,OAAAiqB,KAAA,KAAAC,MAAA5lB,EAAA,KAAAzE,MAAA,OAAAkqB,SAAA,UAAAD,OAAA,YAAAvqB,IAAA+E,EAAA,KAAAsmB,WAAA7oB,QAAA8oB,IAAApC,EAAA,QAAAnY,KAAA,WAAAA,EAAAnb,OAAA,IAAA0rB,EAAAvf,KAAA,KAAAgP,KAAAya,OAAAza,EAAAxJ,MAAA,WAAAwJ,GAAAhM,EAAA,EAAAoW,KAAA,gBAAA7a,MAAA,MAAAyE,EAAA,KAAAsmB,WAAA,GAAAE,WAAA,aAAAxmB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,YAAAisB,IAAA,EAAArB,kBAAA,SAAA1B,GAAA,QAAA5oB,KAAA,MAAA4oB,EAAA,IAAAnY,EAAA,cAAAmb,EAAA5K,EAAA6H,GAAA,OAAAlxB,EAAAnD,KAAA,QAAAmD,EAAA+H,IAAAkpB,EAAAnY,EAAAtQ,KAAA6gB,EAAA6H,IAAApY,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,KAAAokB,CAAA,SAAAA,EAAA,KAAAkC,WAAA/wB,OAAA,EAAA6uB,GAAA,IAAAA,EAAA,KAAAjoB,EAAA,KAAAmqB,WAAAlC,GAAAlxB,EAAAiJ,EAAAqqB,WAAA,YAAArqB,EAAA+pB,OAAA,OAAAiB,EAAA,UAAAhrB,EAAA+pB,QAAA,KAAAe,KAAA,KAAArb,EAAA2Q,EAAAvf,KAAAb,EAAA,YAAAkoB,EAAA9H,EAAAvf,KAAAb,EAAA,iBAAAyP,GAAAyY,EAAA,SAAA4C,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,WAAAc,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,SAAAxa,GAAA,QAAAqb,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,YAAA9B,EAAA,MAAAkB,MAAA,kDAAA0B,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,KAAAN,OAAA,SAAA9lB,EAAAmkB,GAAA,QAAAnY,EAAA,KAAAsa,WAAA/wB,OAAA,EAAAyW,GAAA,IAAAA,EAAA,KAAAoY,EAAA,KAAAkC,WAAAta,GAAA,GAAAoY,EAAA8B,QAAA,KAAAe,MAAA1K,EAAAvf,KAAAonB,EAAA,oBAAA6C,KAAA7C,EAAAgC,WAAA,KAAAjqB,EAAAioB,EAAA,OAAAjoB,IAAA,UAAA6D,GAAA,aAAAA,IAAA7D,EAAA+pB,QAAA/B,GAAAA,GAAAhoB,EAAAiqB,aAAAjqB,EAAA,UAAAjJ,EAAAiJ,EAAAA,EAAAqqB,WAAA,UAAAtzB,EAAAnD,KAAAiQ,EAAA9M,EAAA+H,IAAAkpB,EAAAhoB,GAAA,KAAAqpB,OAAA,YAAA9pB,KAAAS,EAAAiqB,WAAAnS,GAAA,KAAAvO,SAAAxS,EAAA,EAAAwS,SAAA,SAAA1F,EAAAmkB,GAAA,aAAAnkB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,gBAAA+E,EAAAjQ,MAAA,aAAAiQ,EAAAjQ,KAAA,KAAA2L,KAAAsE,EAAA/E,IAAA,WAAA+E,EAAAjQ,MAAA,KAAAm3B,KAAA,KAAAjsB,IAAA+E,EAAA/E,IAAA,KAAAuqB,OAAA,cAAA9pB,KAAA,kBAAAsE,EAAAjQ,MAAAo0B,IAAA,KAAAzoB,KAAAyoB,GAAAlQ,CAAA,EAAAmT,OAAA,SAAApnB,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAoa,aAAApmB,EAAA,YAAA0F,SAAAsG,EAAAwa,WAAAxa,EAAAqa,UAAAE,EAAAva,GAAAiI,CAAA,kBAAAjU,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAka,SAAAlmB,EAAA,KAAAuc,EAAAvQ,EAAAwa,WAAA,aAAAjK,EAAAxsB,KAAA,KAAAq0B,EAAA7H,EAAAthB,IAAAsrB,EAAAva,EAAA,QAAAoY,CAAA,QAAAmB,MAAA,0BAAA8B,cAAA,SAAAlD,EAAAnY,EAAAuQ,GAAA,YAAAkJ,SAAA,CAAAprB,SAAA2qB,EAAAb,GAAA4B,WAAA/Z,EAAAga,QAAAzJ,GAAA,cAAAiJ,SAAA,KAAAvqB,IAAA+E,GAAAiU,CAAA,GAAAkQ,CAAA,UAAAmD,EAAA/K,EAAAvc,EAAAmkB,EAAAnY,EAAAoY,EAAAlxB,EAAA0Y,GAAA,QAAAzP,EAAAogB,EAAArpB,GAAA0Y,GAAAyY,EAAAloB,EAAAxC,KAAA,OAAA4iB,GAAA,YAAA4H,EAAA5H,EAAA,CAAApgB,EAAAZ,KAAAyE,EAAAqkB,GAAAlpB,QAAAC,QAAAipB,GAAAhpB,KAAA2Q,EAAAoY,EAAA,UAAAmD,EAAAhL,GAAA,sBAAAvc,EAAA,KAAAmkB,EAAA7uB,UAAA,WAAA6F,SAAA,SAAA6Q,EAAAoY,GAAA,IAAAlxB,EAAAqpB,EAAA5mB,MAAAqK,EAAAmkB,GAAA,SAAAqD,EAAAjL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,OAAAlL,EAAA,UAAAkL,EAAAlL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,QAAAlL,EAAA,CAAAiL,OAAA,gBAAAE,EAAAvD,EAAAnY,GAAA,QAAAhM,EAAA,EAAAA,EAAAgM,EAAAzW,OAAAyK,IAAA,KAAAokB,EAAApY,EAAAhM,GAAAokB,EAAA/nB,WAAA+nB,EAAA/nB,aAAA,EAAA+nB,EAAA9nB,cAAA,YAAA8nB,IAAAA,EAAA7nB,UAAA,GAAAC,OAAAC,eAAA0nB,EAAAwD,EAAAvD,EAAAzzB,KAAAyzB,EAAA,WAAAuD,EAAA3nB,GAAA,IAAA7D,EAAA,SAAA6D,EAAAgM,GAAA,aAAA7R,EAAA6F,KAAAA,EAAA,OAAAA,EAAA,IAAAmkB,EAAAnkB,EAAA5F,OAAAwtB,aAAA,YAAAzD,EAAA,KAAAhoB,EAAAgoB,EAAAnnB,KAAAgD,EAAAgM,GAAA,wBAAA7R,EAAAgC,GAAA,OAAAA,EAAA,UAAAsU,UAAA,kEAAAzE,EAAAiO,OAAA4N,QAAA7nB,EAAA,CAAA8nB,CAAA9nB,EAAA,0BAAA7F,EAAAgC,GAAAA,EAAAA,EAAA,GAEA,IAFAgoB,EAAAnY,EAAAhM,EAsViCosB,EAvBMC,EARNC,EAF5BC,EAxG4BC,EATAC,EARAC,EANPC,EAtBSC,EAF9BC,EAhJQC,EAAY,6BAdzB3I,EAcyB,SAAA2I,KAdzB,SAAA55B,EAAAqpB,GAAA,KAAArpB,aAAAqpB,GAAA,UAAA9L,UAAA,qCAcyB8X,CAAA,KAAAuE,EAAA,EAdzB9gB,EAcyB,KAdzBhM,EAcyB,EAAArP,IAAA,kBAAAgJ,MAGrB,WAAyB,IAAA8X,EAAA,KAErBiX,MAEe5xB,SAASsoB,iBAAiB,mCAEhC3hB,SAAQ,SAAAjG,GACQA,EAAQmB,aAAa,uBAA1C,IACIo0B,EAAWv1B,EAAQmB,aAAa,WAChCq0B,EAAmBx1B,EAAQmB,aAAa,kBACxCs0B,EAAkBz1B,EAAQmB,aAAa,kBAGvCu0B,GAAY,EAEC,QAJD11B,EAAQmB,aAAa,oBAKjCu0B,GAAY,GAGhBxE,MACAA,MACAA,MACAA,MACAA,MACAA,MACAA,MAEAjX,EAAK0b,iBAAiB31B,EAAQ6L,GAAI0pB,EAAUC,EAAkBC,EAAiBC,EACnF,IAGqBp2B,SAASsoB,iBAAiB,mCAEhC3hB,SAAQ,SAAAjG,GACnB,IAAI41B,EAAiB51B,EAAQmB,aAAa,uBACtCq0B,EAAmBx1B,EAAQmB,aAAa,kBACxC00B,EAAa71B,EAAQmB,aAAa,mBAElCs0B,GADAD,EAAmBx1B,EAAQmB,aAAa,kBACtBnB,EAAQmB,aAAa,mBACvC20B,EAAe91B,EAAQmB,aAAa,qBAExC+vB,MACAA,MACAA,MACAA,MACAA,MACAA,MACAA,MACAA,MACA,IAAI6E,EAAQ/1B,EAAQmB,aAAa,cACjC+vB,MAEAjX,EAAK+b,uBAAuBh2B,EAAQ6L,GAAI+pB,EAAgBC,EAAYL,EAAkBC,EAAiBK,EA9DtF,eA8D0HC,EAC/I,IAEyBz2B,SAASsoB,iBAAiB,uCAEhC3hB,SAAQ,SAAAjG,GACvB,IAAI41B,EAAiB51B,EAAQmB,aAAa,uBACtCq0B,EAAmBx1B,EAAQmB,aAAa,kBACxC00B,EAAa71B,EAAQmB,aAAa,mBAElCs0B,GADAD,EAAmBx1B,EAAQmB,aAAa,kBACtBnB,EAAQmB,aAAa,mBACvC20B,EAAe91B,EAAQmB,aAAa,qBACpC40B,EAAQ/1B,EAAQmB,aAAa,cAG7B80B,GAAS,EACG,QAFDj2B,EAAQmB,aAAa,iBAGhC80B,GAAS,GAGb/E,MACAA,MACAA,MACAA,MACAA,MACAA,MACAA,MACAA,MACAA,MAEAjX,EAAK+b,uBAAuBh2B,EAAQ6L,GAAI+pB,EAAgBC,EAAYL,EAAkBC,EAAiBK,EA3FlF,mBA2F0HC,EAAOE,EAC1J,IAE6B32B,SAASsoB,iBAAiB,2CAEhC3hB,SAAQ,SAAAjG,GAC3B,IAAI41B,EAAiB51B,EAAQmB,aAAa,uBACtCq0B,EAAmBx1B,EAAQmB,aAAa,kBACxC00B,EAAa71B,EAAQmB,aAAa,mBAElCs0B,GADAD,EAAmBx1B,EAAQmB,aAAa,kBACtBnB,EAAQmB,aAAa,mBACvC20B,EAAe91B,EAAQmB,aAAa,qBACpC40B,EAAQ/1B,EAAQmB,aAAa,cAG7B80B,GAAS,EACG,QAFDj2B,EAAQmB,aAAa,iBAGhC80B,GAAS,GAGb/E,MACAA,MACAA,MACAA,MACAA,MACAA,MACAA,MACAA,MACAA,MAEAjX,EAAK+b,uBAAuBh2B,EAAQ6L,GAAI+pB,EAAgBC,EAAYL,EAAkBC,EAAiBK,EAxH9E,uBAwH0HC,EAAOE,EAC9J,GACJ,GAAC,CAAA98B,IAAA,sBAAAgJ,MAID,WAA6B,IAAAmvB,EAAA,KACzBJ,MACe5xB,SAASsoB,iBAAiB,oCAEhC3hB,SAAQ,SAAAjG,GACb,IAAI41B,EAAiB51B,EAAQmB,aAAa,uBACtC+0B,EAAel2B,EAAQmB,aAAa,qBACpCg1B,EAAsBn2B,EAAQmB,aAAa,wBAC3Ci1B,EAAsBp2B,EAAQmB,aAAa,wBAC3C40B,EAAQ/1B,EAAQmB,aAAa,cAC7Bk1B,EAAOr2B,EAAQmB,aAAa,aAEhC+vB,MACAA,MACAA,MACAA,MACAA,MACAA,MACAA,MACAA,MAEAI,EAAKgF,mBAAmBt2B,EAAQ6L,GAAI+pB,EAAgBM,EAAcC,EAAqBC,EAAqBC,EAAMN,EACtH,GACJ,GAAC,CAAA58B,IAAA,qBAAAgJ,OAAAkzB,EAAAtF,EAAArD,IAAA0C,MAED,SAAA4B,EAAgCuF,EAAWX,EAAgBM,EAAcC,EAAqBC,EAAqBC,EAAMN,GAAK,IAAAS,EAAAlP,EAAAmP,EAAA9E,EAAA,OAAAjF,IAAAM,MAAA,SAAAiE,GAAA,cAAAA,EAAAxB,KAAAwB,EAAA/sB,MAAA,OACtE,GAA9CsyB,EAAYl3B,SAAS6yB,eAAeoE,GAE7B,kBAATF,EAAwB,CAAApF,EAAA/sB,KAAA,gBAAA+sB,EAAA/sB,KAAA,EACPf,KAAKuzB,iBAAiBd,EAAgBQ,EAAqBD,GAAqB,EAxJjF,IAwJ2G,OACzF,OAD9B7O,EAAI2J,EAAA9C,KACJsI,EAAY,CAAE,OAAUnP,GAAM2J,EAAA/sB,KAAA,EAEd8tB,EAAAA,EAAgBC,oBA5JX,uBA4J6DwE,GAAU,OAA5F9E,EAAOV,EAAA9C,KAEXqI,EAAUtE,UAAYP,EAAQV,EAAA/sB,KAAA,wBAAA+sB,EAAA/sB,KAAA,GAGbf,KAAKwzB,UAAUf,EAAgBM,GAAa,QAC2B,OADpF5O,EAAI2J,EAAA9C,KACJsI,EAAY,CAAE,OAAUnP,EAAM,cAAiB6O,EAAqB,MAASJ,GAAO9E,EAAA/sB,KAAA,GAEpE8tB,EAAAA,EAAgBC,oBA7KjB,iBA6K6DwE,GAAU,QAAtF9E,EAAOV,EAAA9C,KAEXqI,EAAUtE,UAAYP,EAAQ,yBAAAV,EAAArS,OAAA,GAAAoS,EAAA,UAGrC,SApB8BuB,EAAAC,EAAAyB,EAAAM,EAAAC,EAAAoC,EAAAC,GAAA,OAAAxB,EAAAl3B,MAAC,KAADL,UAAA,KAAA3E,IAAA,YAAAgJ,OAAAizB,EAAArF,EAAArD,IAAA0C,MAsB/B,SAAAiC,EAAuBuE,EAAgBM,GAAY,IAAA5O,EAAA,OAAAoF,IAAAM,MAAA,SAAAuE,GAAA,cAAAA,EAAA9B,KAAA8B,EAAArtB,MAAA,cAAAqtB,EAAArtB,KAAA,EAC9ByvB,EAAAA,EAAIgB,QAAQ,yCAAD7uB,OAA0C8vB,EAAc,kBAAA9vB,OAAiBowB,IAAe,OACxF,OADxB5O,EAAIiK,EAAApD,KACR+C,MAA4BK,EAAAjD,OAAA,SACrBhH,GAAI,wBAAAiK,EAAA3S,OAAA,GAAAyS,EAAA,KACd,SAJqByF,EAAAC,GAAA,OAAA3B,EAAAj3B,MAAC,KAADL,UAAA,KAAA3E,IAAA,mBAAAgJ,OAAAgzB,EAAApF,EAAArD,IAAA0C,MAMtB,SAAAsC,EAA8BkE,EAAgBJ,EAAkBC,EAAiBK,EAAct5B,GAAK,IAAA8qB,EAAA,OAAAoF,IAAAM,MAAA,SAAA+E,GAAA,cAAAA,EAAAtC,KAAAsC,EAAA7tB,MAAA,cAAA6tB,EAAA7tB,KAAA,EAC/EyvB,EAAAA,EAAIgB,QAAQ,2CAAD7uB,OAA4C8vB,EAAc,sBAAA9vB,OAAqB0vB,EAAgB,qBAAA1vB,OAAoB2vB,EAAe,kBAAA3vB,OAAiBgwB,EAAY,WAAAhwB,OAAUtJ,IAAQ,OAEjL,OAFxB8qB,EAAIyK,EAAA5D,KAER+C,MAA4Ba,EAAAzD,OAAA,SACrBhH,GAAI,wBAAAyK,EAAAnT,OAAA,GAAA8S,EAAA,KACd,SAL4BsF,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,OAAAjC,EAAAh3B,MAAC,KAADL,UAAA,KAAA3E,IAAA,mBAAAgJ,OAAA+yB,EAAAnF,EAAArD,IAAA0C,MAQ7B,SAAAqD,EAA8B8D,EAAWc,EAAU7B,GAAgB,IAAAgB,EAAAlP,EAAAqK,EAAA,OAAAjF,IAAAM,MAAA,SAAA4F,GAAA,cAAAA,EAAAnD,KAAAmD,EAAA1uB,MAAA,OACX,OAA9CsyB,EAAYl3B,SAAS6yB,eAAeoE,GAAU3D,EAAA1uB,KAAA,EACnCf,KAAKm0B,iBAAiBD,EAAU7B,GAAiB,OAA1D,OAAJlO,EAAIsL,EAAAzE,KAAAyE,EAAA1uB,KAAG,EAES8tB,EAAAA,EAAgBC,oBArMf,eAqMyD3K,GAAK,OAA/EqK,EAAOiB,EAAAzE,KAEXqI,EAAUtE,UAAYP,EAAQ,wBAAAiB,EAAAhU,OAAA,GAAA6T,EAAA,UACjC,SAP4B8E,EAAAC,EAAAC,GAAA,OAAAvC,EAAA/2B,MAAC,KAADL,UAAA,KAAA3E,IAAA,mBAAAgJ,OAAA8yB,EAAAlF,EAAArD,IAAA0C,MAS7B,SAAAiE,EAA8BgE,EAAU7B,GAAgB,IAAAlO,EAAA,OAAAoF,IAAAM,MAAA,SAAAsG,GAAA,cAAAA,EAAA7D,KAAA6D,EAAApvB,MAAA,cAAAovB,EAAApvB,KAAA,EACnCyvB,EAAAA,EAAIgB,QAAQ,oBAAD7uB,OAAqBuxB,EAAQ,sBAAAvxB,OAAqB0vB,IAAmB,OACrE,OADxBlO,EAAIgM,EAAAnF,KACR+C,MAA4BoC,EAAAhF,OAAA,SACrBhH,GAAI,wBAAAgM,EAAA1U,OAAA,GAAAyU,EAAA,KACd,SAJ4BqE,EAAAC,GAAA,OAAA1C,EAAA92B,MAAC,KAADL,UAAA,KAAA3E,IAAA,mBAAAgJ,OAAA6yB,EAAAjF,EAAArD,IAAA0C,MAQ7B,SAAA8E,EAA8BqC,EAAWhB,EAAUC,EAAkBC,EAAiBC,GAAS,IAAAhD,EAAAkF,EAAApB,EAAAlP,EAAA5Q,EAAAmhB,EAAAlG,EAAAmG,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAArG,EAAA,YAAApF,IAAAM,MAAA,SAAAqH,GAAA,cAAAA,EAAA5E,KAAA4E,EAAAnwB,MAAA,OASvC,OARhDwuB,EAAOvvB,KAEPy0B,EApNiB,eAsNjBlC,IACAkC,EAtNgB,qBAyNdpB,EAAYl3B,SAAS6yB,eAAeoE,GAAUlC,EAAAnwB,KAAA,EACnCf,KAAKi1B,iBAAiB7C,EAAUC,EAAkBC,GAAgB,OAc5D,OAdnBnO,EAAI+M,EAAAlG,KAIFzX,EAAS,IAAI2hB,gBAAgBxgC,OAAOoI,SAASq4B,QAE/CT,EAAa,KAEbnhB,EAAO6hB,IAAI,WAEXV,EAAanhB,EAAOsE,IAAI,UAI5BsM,EAAKkR,QAAUA,QAAQnE,EAAAnwB,KAAA,GAEH8tB,EAAAA,EAAgBC,oBAAoB2F,EAAetQ,GAAK,QAK3D,GALbqK,EAAO0C,EAAAlG,KAEXqI,EAAUtE,UAAYP,EAGlBmG,EAAS,MAETxQ,EAAKmR,QAASnR,EAAKmR,MAAMC,eAAc,CAAArE,EAAAnwB,KAAA,gBAAAmwB,EAAAnwB,KAAA,GACxByvB,EAAAA,EAAIgB,QAAQ,yCAAD7uB,OAA0CwhB,EAAKmR,MAAMC,iBAAiB,QAAhGZ,EAAMzD,EAAAlG,KAAA,QAuDT,OAlDK4J,EAAwBvB,EAAU5O,iBAAiB,sCAAsC,GAG3FN,EAAKmR,OAASnR,EAAKmR,MAAME,WAAajD,IAEtChD,EAAKkG,UAAUtR,EAAMwQ,EAAQC,GAAuB,EAAOF,IAErDG,EAAW14B,SAAS6yB,eAAe,aAChC/wB,MAAMy3B,QAAU,SAEzBb,EAASt1B,iBAAiB,SAAS,WAC/BgwB,EAAKkG,UAAUtR,EAAMwQ,EAAQC,GAAuB,EAAM,KAC9D,KAGAzQ,EAAKwR,OAASxR,EAAKwR,MAAMH,WAAajD,IAEjCpO,EAAKmR,OAAUnR,EAAKmR,MAAME,UAC3BjG,EAAKqG,UAAUzR,EAAMyQ,GAAuB,EAAOF,IAGjDI,EAAW34B,SAAS6yB,eAAe,aAChC/wB,MAAMy3B,QAAU,SAEzBZ,EAASv1B,iBAAiB,SAAS,WAC/BgwB,EAAKqG,UAAUzR,EAAMyQ,GAAuB,EAAM,KACtD,KAGCrC,IAEKwC,EAAkB54B,SAASsoB,iBAAiB,eAAD9hB,OAAgByvB,EAAQ,OAAM,GAC/ErE,MAGMiH,EAAuB74B,SAASsoB,iBAAiB,eAAD9hB,OAAgByvB,EAAQ,oCAAmC,GACjHrE,MACAiH,EAAqB14B,UAAUC,IAAI,eAG/B4nB,EAAK0R,OAAOC,QAAQz8B,MAAQ,IACL8C,SAAS6yB,eAAe,wBAChC/wB,MAAMy3B,QAAU,QAInCtb,YAAW,WAEPuU,EAAKoH,aAAahB,EACtB,GAAG,MACN7D,EAAAnwB,KAAA,GACKf,KAAKg2B,iBAAiB5D,EAAU,cAAe,uBAAwB,kBAAiB,yBAAAlB,EAAAzV,OAAA,GAAAsV,EAAA,UACjG,SA3F4BkF,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,OAAAxE,EAAA72B,MAAC,KAADL,UAAA,KAAA3E,IAAA,eAAAgJ,MA6F7B,SAAoB+1B,GAChBhH,MACAgH,EAAgBuB,eAAe,CAAEC,SAAU,SAAUC,MAAO,UAAWC,OAAQ,UACnF,GAAC,CAAAzgC,IAAA,mBAAAgJ,OAAA4yB,EAAAhF,EAAArD,IAAA0C,MAED,SAAAqF,EAA8Bc,EAAUC,EAAkBC,GAAe,IAAAnO,EAAA,OAAAoF,IAAAM,MAAA,SAAA0H,GAAA,cAAAA,EAAAjF,KAAAiF,EAAAxwB,MAAA,cAAAwwB,EAAAxwB,KAAA,EACpDyvB,EAAAA,EAAIgB,QAAQ,oBAAD7uB,OAAqByvB,EAAQ,sBAAAzvB,OAAqB0vB,EAAgB,qBAAA1vB,OAAoB2vB,IAAkB,OACxG,OADxBnO,EAAIoN,EAAAvG,KACR+C,MAA4BwD,EAAApG,OAAA,SACrBhH,GAAI,wBAAAoN,EAAA9V,OAAA,GAAA6V,EAAA,KACd,SAJ4BoF,EAAAC,EAAAC,GAAA,OAAAhF,EAAA52B,MAAC,KAADL,UAAA,KAAA3E,IAAA,yBAAAgJ,OAAA2yB,EAAA/E,EAAArD,IAAA0C,MAQ7B,SAAA4K,EAAoCzD,EAAWX,EAAgBC,EAAYL,EAAkBC,EAAiBK,EAAcvR,EAAUwR,EAAOE,GAAM,IAAAO,EAAAlP,EAAA2S,EAAAtI,EAAA,OAAAjF,IAAAM,MAAA,SAAAkN,GAAA,cAAAA,EAAAzK,KAAAyK,EAAAh2B,MAAA,OAC3F,OAA9CsyB,EAAYl3B,SAAS6yB,eAAeoE,GAAU2D,EAAAh2B,KAAA,EACnCf,KAAKg3B,iBAAiBvE,EAAgBC,EAAYL,EAAkBC,EAAiBK,GAAa,OAQzF,OARtBxO,EAAI4S,EAAA/L,MAKJ8L,EAAY,CAAC,GACPlE,MAAQA,EAClBkE,EAAUG,OAAS9S,EACnB2S,EAAUhE,OAASA,EAAOiE,EAAAh2B,KAAA,GAEN8tB,EAAAA,EAAgBC,oBAAoB1N,EAAU0V,GAAU,QAAxEtI,EAAOuI,EAAA/L,KAEXqI,EAAUtE,UAAYP,EAEjBsE,IACDO,EAAU6D,QAAU,WAChBxiC,OAAOoI,SAAS0a,KAAO2M,EAAKgT,SAChC,GACH,yBAAAJ,EAAAtb,OAAA,GAAAob,EAAA,UACJ,SArBkCO,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,OAAAjG,EAAA32B,MAAC,KAADL,UAAA,KAAA3E,IAAA,mBAAAgJ,OAAA0yB,EAAA9E,EAAArD,IAAA0C,MAuBnC,SAAA4L,EAA8BpF,EAAgBC,EAAYL,EAAkBC,EAAiBK,GAAY,IAAAxO,EAAA,OAAAoF,IAAAM,MAAA,SAAAiO,GAAA,cAAAA,EAAAxL,KAAAwL,EAAA/2B,MAAA,cAAA+2B,EAAA/2B,KAAA,EACpFyvB,EAAAA,EAAIgB,QAAQ,0CAAD7uB,OAA2C8vB,EAAc,mBAAA9vB,OAAkB+vB,EAAU,sBAAA/vB,OAAqB0vB,EAAgB,qBAAA1vB,OAAoB2vB,EAAe,kBAAA3vB,OAAiBgwB,IAAe,OAE7L,OAFxBxO,EAAI2T,EAAA9M,KAER+C,MAA4B+J,EAAA3M,OAAA,SACrBhH,GAAI,wBAAA2T,EAAArc,OAAA,GAAAoc,EAAA,KACd,SAL4BE,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,OAAAzG,EAAA12B,MAAC,KAADL,UAAA,KAAA3E,IAAA,mBAAAgJ,OAAAyyB,EAAA7E,EAAArD,IAAA0C,MAO7B,SAAAmM,EAA8BhG,EAAUiG,EAAoBC,EAA6BC,GAAwB,IAAAC,EAAAC,EAAAC,EAAAC,EAAAxU,EAAA,OAAAoF,IAAAM,MAAA,SAAA+O,GAAA,cAAAA,EAAAtM,KAAAsM,EAAA73B,MAAA,OAIxC,OAH/Dy3B,EAAgBr8B,SAAS6yB,eAAeuJ,GACxCE,EAAwBt8B,SAAS6yB,eAAesJ,GAChDI,EAAev8B,SAAS6yB,eAAeqJ,GACvCM,EAAoBx8B,SAAS6yB,eAAe,oBAAmB4J,EAAA73B,KAAA,EAEpDyvB,EAAAA,EAAIgB,QAAQ,yBAAD7uB,OAA0ByvB,IAAW,QAA7DjO,EAAIyU,EAAA5N,QAGJ0N,EAAa3J,UAAY5K,EAAK0U,aAC9BF,EAAkB5J,UAAY5K,EAAK0U,aAC/BL,IACAA,EAAcj5B,iBAAiB,SAAS,SAACu5B,GACM,QAAvCL,EAAsBx6B,MAAMy3B,QAC5B+C,EAAsBx6B,MAAMy3B,QAAU,QAGtC+C,EAAsBx6B,MAAMy3B,QAAU,MAE9C,IAEA8C,EAAcv6B,MAAMy3B,QAAU,UAErC,wBAAAkD,EAAAnd,OAAA,GAAA2c,EAAA,KACJ,SAxB4BW,EAAAC,EAAAC,EAAAC,GAAA,OAAAzH,EAAAz2B,MAAC,KAADL,UAAA,KAAA3E,IAAA,kBAAAgJ,MA0B7B,SAAuBm6B,GACnB,OAAOA,EAAUnhC,KAAI,SAAAohC,GAAK,MAAK,CAC3BC,KAAM,WACNC,KAAM,GAAF32B,OAAK0yB,QAAO,oCAAA1yB,OAAmCy2B,EAAMG,8CACzD3hB,MAAOwhB,EAAMI,SAChB,GACT,GAAC,CAAAxjC,IAAA,YAAAgJ,MAEG,SAAiBmlB,EAAMwQ,EAAQC,EAAuB6E,EAAe/E,GAKjE,IAAIgF,EAAgB,CAChB,CACI,MAAS,GAAF/2B,OAAKwhB,EAAKwV,OACjB,MAAS,GAAFh3B,OAAKwhB,EAAK0R,OAAOA,OAAO+D,WAC/B,KAAQ,+IAEZ,CACI,MAAS,GAAFj3B,OAAKwhB,EAAKwV,OACjB,MAAS,GAAFh3B,OAAKwhB,EAAK0R,OAAOA,OAAO+D,WAC/B,KAAQ,GAAFj3B,OAAKwhB,EAAKmR,MAAME,UACtB,OAAUx1B,KAAK65B,gBAAgBlF,IAEnC,CACI,MAAS,GAAFhyB,OAAKwhB,EAAKwV,OACjB,MAAS,GAAFh3B,OAAKwhB,EAAK0R,OAAOA,OAAO+D,WAC/B,KAAQ,2IAOhB,GAJIH,GACAK,SAASlF,EAAsBlsB,IAAIqxB,SAGnCrF,QAEAoF,SAASlF,GAAuBoF,MAAM,CAClC1qB,OAAQ,OACRD,MAAO,OACP4qB,eAAe,EACfC,SAAUR,QAGb,CAED,IAAIS,EAAiBL,SAASlF,GAAuBoF,MAAM,CACvD1qB,OAAQ,OACRD,MAAO,OACP4qB,eAAe,EACfC,SAAUR,EACVlf,WAAW,EACX4f,cAAe,IAIbC,EAAgBnN,OAAOwH,GAE7ByF,EAAeG,GAAG,SAAS,WAE3B,IAEAH,EAAeG,GAAG,QAAQ,WAE1B,IAEAH,EAAeG,GAAG,gBAAgB,WAG9BH,EAAeG,GAAG,QAAQ,SAAU3K,GAE5BA,EAAMlkB,UAAY,IAElB0uB,EAAeI,KAAKF,GAEpBF,EAAeK,IAAI,QAE3B,GACJ,GACJ,CACJ,GAAC,CAAAxkC,IAAA,YAAAgJ,MAED,SAAiBmlB,EAAMyQ,EAAuB6F,GAC1C,IAAIC,EAAgB,CAAC,CACjB,MAAS,GAAF/3B,OAAKwhB,EAAKwV,OACjB,MAAS,GAAFh3B,OAAKwhB,EAAK0R,OAAOA,OAAO+D,WAC/B,KAAQ,GAAFj3B,OAAKwhB,EAAKwR,MAAMH,YAGtBiF,GACAX,SAASlF,EAAsBlsB,IAAIqxB,SAGvCD,SAASlF,GAAuBoF,MAAM,CAClC1qB,OAAQ,OACRD,MAAO,OACP4qB,eAAe,EACfC,SAAUQ,GAElB,IA1dJrpB,GAAA0b,EAAAvD,EAAA3pB,UAAAwR,GAAAhM,GAAA0nB,EAAAvD,EAAAnkB,GAAAxD,OAAAC,eAAA0nB,EAAA,aAAA5nB,UAAA,IAAA4nB,GA0dK,qRC1dLD,EAAA,kBAAAC,CAAA,MAAAnkB,EAAAmkB,EAAA,GAAAnY,EAAAxP,OAAAhC,UAAA+hB,EAAAvQ,EAAA9b,eAAAk0B,EAAA5nB,OAAAC,gBAAA,SAAAuD,EAAAmkB,EAAAnY,GAAAhM,EAAAmkB,GAAAnY,EAAArS,KAAA,EAAAwC,EAAA,mBAAA/B,OAAAA,OAAA,GAAAlH,EAAAiJ,EAAA9B,UAAA,aAAAuR,EAAAzP,EAAAL,eAAA,kBAAAuoB,EAAAloB,EAAAmoB,aAAA,yBAAAC,EAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAxP,OAAAC,eAAAuD,EAAAmkB,EAAA,CAAAxqB,MAAAqS,EAAA3P,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAAyD,EAAAmkB,EAAA,KAAAI,EAAA,aAAAvkB,GAAAukB,EAAA,SAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAhM,EAAAmkB,GAAAnY,CAAA,WAAAwY,EAAAxkB,EAAAmkB,EAAAnY,EAAAuQ,GAAA,IAAApgB,EAAAgoB,GAAAA,EAAA3pB,qBAAAiqB,EAAAN,EAAAM,EAAAvxB,EAAAsJ,OAAA6O,OAAAlP,EAAA3B,WAAAoR,EAAA,IAAA8Y,EAAAnI,GAAA,WAAA6H,EAAAlxB,EAAA,WAAAyG,MAAAgrB,EAAA3kB,EAAAgM,EAAAJ,KAAA1Y,CAAA,UAAA0xB,EAAA5kB,EAAAmkB,EAAAnY,GAAA,WAAAjc,KAAA,SAAAkL,IAAA+E,EAAAhD,KAAAmnB,EAAAnY,GAAA,OAAAhM,GAAA,OAAAjQ,KAAA,QAAAkL,IAAA+E,EAAA,EAAAmkB,EAAAK,KAAAA,EAAA,IAAAnQ,EAAA,iBAAAzV,EAAA,iBAAAyI,EAAA,YAAAhC,EAAA,YAAA4O,EAAA,YAAAwQ,IAAA,UAAAI,IAAA,UAAAC,IAAA,KAAAvhB,EAAA,GAAAghB,EAAAhhB,EAAArQ,GAAA,8BAAAkhB,EAAA5X,OAAAuoB,eAAA5vB,EAAAif,GAAAA,EAAAA,EAAA4Q,EAAA,MAAA7vB,GAAAA,IAAA6W,GAAAuQ,EAAAvf,KAAA7H,EAAAjC,KAAAqQ,EAAApO,GAAA,IAAA8vB,EAAAH,EAAAtqB,UAAAiqB,EAAAjqB,UAAAgC,OAAA6O,OAAA9H,GAAA,SAAA2hB,EAAAllB,GAAA,0BAAAvC,SAAA,SAAA0mB,GAAAI,EAAAvkB,EAAAmkB,GAAA,SAAAnkB,GAAA,YAAArE,QAAAwoB,EAAAnkB,EAAA,gBAAAmlB,EAAAnlB,EAAAmkB,GAAA,SAAAiB,EAAApZ,EAAAoY,EAAAjoB,EAAAjJ,GAAA,IAAA0Y,EAAAgZ,EAAA5kB,EAAAgM,GAAAhM,EAAAokB,GAAA,aAAAxY,EAAA7b,KAAA,KAAAs0B,EAAAzY,EAAA3Q,IAAAoZ,EAAAgQ,EAAA1qB,MAAA,OAAA0a,GAAA,UAAAla,EAAAka,IAAAkI,EAAAvf,KAAAqX,EAAA,WAAA8P,EAAA/oB,QAAAiZ,EAAAgR,SAAAhqB,MAAA,SAAA2E,GAAAolB,EAAA,OAAAplB,EAAA7D,EAAAjJ,EAAA,aAAA8M,GAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAixB,EAAA/oB,QAAAiZ,GAAAhZ,MAAA,SAAA2E,GAAAqkB,EAAA1qB,MAAAqG,EAAA7D,EAAAkoB,EAAA,aAAArkB,GAAA,OAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAA,EAAA0Y,EAAA3Q,IAAA,KAAA+Q,EAAAoY,EAAA,gBAAAzqB,MAAA,SAAAqG,EAAAuc,GAAA,SAAA+I,IAAA,WAAAnB,GAAA,SAAAA,EAAAnY,GAAAoZ,EAAAplB,EAAAuc,EAAA4H,EAAAnY,EAAA,WAAAA,EAAAA,EAAAA,EAAA3Q,KAAAiqB,EAAAA,GAAAA,GAAA,aAAAX,EAAAR,EAAAnY,EAAAuQ,GAAA,IAAA6H,EAAA/P,EAAA,gBAAAlY,EAAAjJ,GAAA,GAAAkxB,IAAA/c,EAAA,MAAAke,MAAA,mCAAAnB,IAAA/e,EAAA,cAAAlJ,EAAA,MAAAjJ,EAAA,OAAAyG,MAAAqG,EAAAzE,MAAA,OAAAghB,EAAAiJ,OAAArpB,EAAAogB,EAAAthB,IAAA/H,IAAA,KAAA0Y,EAAA2Q,EAAAkJ,SAAA,GAAA7Z,EAAA,KAAAyY,EAAAqB,EAAA9Z,EAAA2Q,GAAA,GAAA8H,EAAA,IAAAA,IAAApQ,EAAA,gBAAAoQ,CAAA,cAAA9H,EAAAiJ,OAAAjJ,EAAAoJ,KAAApJ,EAAAqJ,MAAArJ,EAAAthB,SAAA,aAAAshB,EAAAiJ,OAAA,IAAApB,IAAA/P,EAAA,MAAA+P,EAAA/e,EAAAkX,EAAAthB,IAAAshB,EAAAsJ,kBAAAtJ,EAAAthB,IAAA,gBAAAshB,EAAAiJ,QAAAjJ,EAAAuJ,OAAA,SAAAvJ,EAAAthB,KAAAmpB,EAAA/c,EAAA,IAAA9D,EAAAqhB,EAAAT,EAAAnY,EAAAuQ,GAAA,cAAAhZ,EAAAxT,KAAA,IAAAq0B,EAAA7H,EAAAhhB,KAAA8J,EAAAzG,EAAA2E,EAAAtI,MAAAgZ,EAAA,gBAAAta,MAAA4J,EAAAtI,IAAAM,KAAAghB,EAAAhhB,KAAA,WAAAgI,EAAAxT,OAAAq0B,EAAA/e,EAAAkX,EAAAiJ,OAAA,QAAAjJ,EAAAthB,IAAAsI,EAAAtI,IAAA,YAAAyqB,EAAAvB,EAAAnY,GAAA,IAAAuQ,EAAAvQ,EAAAwZ,OAAApB,EAAAD,EAAA9pB,SAAAkiB,GAAA,GAAA6H,IAAApkB,EAAA,OAAAgM,EAAAyZ,SAAA,eAAAlJ,GAAA4H,EAAA9pB,SAAA,SAAA2R,EAAAwZ,OAAA,SAAAxZ,EAAA/Q,IAAA+E,EAAA0lB,EAAAvB,EAAAnY,GAAA,UAAAA,EAAAwZ,SAAA,WAAAjJ,IAAAvQ,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAA8L,EAAA,aAAAtI,EAAA,IAAA9X,EAAAyoB,EAAAR,EAAAD,EAAA9pB,SAAA2R,EAAA/Q,KAAA,aAAAkB,EAAApM,KAAA,OAAAic,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAAkB,EAAAlB,IAAA+Q,EAAAyZ,SAAA,KAAAxR,EAAA,IAAA/gB,EAAAiJ,EAAAlB,IAAA,OAAA/H,EAAAA,EAAAqI,MAAAyQ,EAAAmY,EAAA4B,YAAA7yB,EAAAyG,MAAAqS,EAAAtQ,KAAAyoB,EAAA6B,QAAA,WAAAha,EAAAwZ,SAAAxZ,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,GAAAgM,EAAAyZ,SAAA,KAAAxR,GAAA/gB,GAAA8Y,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAAzE,EAAAyZ,SAAA,KAAAxR,EAAA,UAAAgS,EAAAjmB,GAAA,IAAAmkB,EAAA,CAAA+B,OAAAlmB,EAAA,SAAAA,IAAAmkB,EAAAgC,SAAAnmB,EAAA,SAAAA,IAAAmkB,EAAAiC,WAAApmB,EAAA,GAAAmkB,EAAAkC,SAAArmB,EAAA,SAAAsmB,WAAApmB,KAAAikB,EAAA,UAAAoC,EAAAvmB,GAAA,IAAAmkB,EAAAnkB,EAAAwmB,YAAA,GAAArC,EAAAp0B,KAAA,gBAAAo0B,EAAAlpB,IAAA+E,EAAAwmB,WAAArC,CAAA,UAAAO,EAAA1kB,GAAA,KAAAsmB,WAAA,EAAAJ,OAAA,SAAAlmB,EAAAvC,QAAAwoB,EAAA,WAAAnsB,OAAA,YAAAkrB,EAAAb,GAAA,GAAAA,GAAA,KAAAA,EAAA,KAAAnY,EAAAmY,EAAAjxB,GAAA,GAAA8Y,EAAA,OAAAA,EAAAhP,KAAAmnB,GAAA,sBAAAA,EAAAzoB,KAAA,OAAAyoB,EAAA,IAAAsC,MAAAtC,EAAA5uB,QAAA,KAAA6uB,GAAA,EAAAjoB,EAAA,SAAAT,IAAA,OAAA0oB,EAAAD,EAAA5uB,QAAA,GAAAgnB,EAAAvf,KAAAmnB,EAAAC,GAAA,OAAA1oB,EAAA/B,MAAAwqB,EAAAC,GAAA1oB,EAAAH,MAAA,EAAAG,EAAA,OAAAA,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,SAAAS,EAAAT,KAAAS,CAAA,YAAAsU,UAAAtW,EAAAgqB,GAAA,2BAAAU,EAAArqB,UAAAsqB,EAAAV,EAAAa,EAAA,eAAAtrB,MAAAmrB,EAAAxoB,cAAA,IAAA8nB,EAAAU,EAAA,eAAAnrB,MAAAkrB,EAAAvoB,cAAA,IAAAuoB,EAAA6B,YAAAnC,EAAAO,EAAAT,EAAA,qBAAAF,EAAAwC,oBAAA,SAAA3mB,GAAA,IAAAmkB,EAAA,mBAAAnkB,GAAAA,EAAAzF,YAAA,QAAA4pB,IAAAA,IAAAU,GAAA,uBAAAV,EAAAuC,aAAAvC,EAAAl0B,MAAA,EAAAk0B,EAAAyC,KAAA,SAAA5mB,GAAA,OAAAxD,OAAAqqB,eAAArqB,OAAAqqB,eAAA7mB,EAAA8kB,IAAA9kB,EAAA8mB,UAAAhC,EAAAP,EAAAvkB,EAAAqkB,EAAA,sBAAArkB,EAAAxF,UAAAgC,OAAA6O,OAAA4Z,GAAAjlB,CAAA,EAAAmkB,EAAA4C,MAAA,SAAA/mB,GAAA,OAAAqlB,QAAArlB,EAAA,EAAAklB,EAAAC,EAAA3qB,WAAA+pB,EAAAY,EAAA3qB,UAAAoR,GAAA,0BAAAuY,EAAAgB,cAAAA,EAAAhB,EAAA6C,MAAA,SAAAhnB,EAAAgM,EAAAuQ,EAAA6H,EAAAjoB,QAAA,IAAAA,IAAAA,EAAAhB,SAAA,IAAAjI,EAAA,IAAAiyB,EAAAX,EAAAxkB,EAAAgM,EAAAuQ,EAAA6H,GAAAjoB,GAAA,OAAAgoB,EAAAwC,oBAAA3a,GAAA9Y,EAAAA,EAAAwI,OAAAL,MAAA,SAAA2E,GAAA,OAAAA,EAAAzE,KAAAyE,EAAArG,MAAAzG,EAAAwI,MAAA,KAAAwpB,EAAAD,GAAAV,EAAAU,EAAAZ,EAAA,aAAAE,EAAAU,EAAA/xB,GAAA,0BAAAqxB,EAAAU,EAAA,qDAAAd,EAAA7T,KAAA,SAAAtQ,GAAA,IAAAmkB,EAAA3nB,OAAAwD,GAAAgM,EAAA,WAAAuQ,KAAA4H,EAAAnY,EAAA9L,KAAAqc,GAAA,OAAAvQ,EAAAzO,UAAA,SAAA7B,IAAA,KAAAsQ,EAAAzW,QAAA,KAAAyK,EAAAgM,EAAAlO,MAAA,GAAAkC,KAAAmkB,EAAA,OAAAzoB,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,QAAAA,EAAAH,MAAA,EAAAG,CAAA,GAAAyoB,EAAAa,OAAAA,EAAAN,EAAAlqB,UAAA,CAAAD,YAAAmqB,EAAA5qB,MAAA,SAAAqqB,GAAA,QAAA8C,KAAA,OAAAvrB,KAAA,OAAAiqB,KAAA,KAAAC,MAAA5lB,EAAA,KAAAzE,MAAA,OAAAkqB,SAAA,UAAAD,OAAA,YAAAvqB,IAAA+E,EAAA,KAAAsmB,WAAA7oB,QAAA8oB,IAAApC,EAAA,QAAAnY,KAAA,WAAAA,EAAAnb,OAAA,IAAA0rB,EAAAvf,KAAA,KAAAgP,KAAAya,OAAAza,EAAAxJ,MAAA,WAAAwJ,GAAAhM,EAAA,EAAAoW,KAAA,gBAAA7a,MAAA,MAAAyE,EAAA,KAAAsmB,WAAA,GAAAE,WAAA,aAAAxmB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,YAAAisB,IAAA,EAAArB,kBAAA,SAAA1B,GAAA,QAAA5oB,KAAA,MAAA4oB,EAAA,IAAAnY,EAAA,cAAAmb,EAAA5K,EAAA6H,GAAA,OAAAlxB,EAAAnD,KAAA,QAAAmD,EAAA+H,IAAAkpB,EAAAnY,EAAAtQ,KAAA6gB,EAAA6H,IAAApY,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,KAAAokB,CAAA,SAAAA,EAAA,KAAAkC,WAAA/wB,OAAA,EAAA6uB,GAAA,IAAAA,EAAA,KAAAjoB,EAAA,KAAAmqB,WAAAlC,GAAAlxB,EAAAiJ,EAAAqqB,WAAA,YAAArqB,EAAA+pB,OAAA,OAAAiB,EAAA,UAAAhrB,EAAA+pB,QAAA,KAAAe,KAAA,KAAArb,EAAA2Q,EAAAvf,KAAAb,EAAA,YAAAkoB,EAAA9H,EAAAvf,KAAAb,EAAA,iBAAAyP,GAAAyY,EAAA,SAAA4C,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,WAAAc,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,SAAAxa,GAAA,QAAAqb,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,YAAA9B,EAAA,MAAAkB,MAAA,kDAAA0B,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,KAAAN,OAAA,SAAA9lB,EAAAmkB,GAAA,QAAAnY,EAAA,KAAAsa,WAAA/wB,OAAA,EAAAyW,GAAA,IAAAA,EAAA,KAAAoY,EAAA,KAAAkC,WAAAta,GAAA,GAAAoY,EAAA8B,QAAA,KAAAe,MAAA1K,EAAAvf,KAAAonB,EAAA,oBAAA6C,KAAA7C,EAAAgC,WAAA,KAAAjqB,EAAAioB,EAAA,OAAAjoB,IAAA,UAAA6D,GAAA,aAAAA,IAAA7D,EAAA+pB,QAAA/B,GAAAA,GAAAhoB,EAAAiqB,aAAAjqB,EAAA,UAAAjJ,EAAAiJ,EAAAA,EAAAqqB,WAAA,UAAAtzB,EAAAnD,KAAAiQ,EAAA9M,EAAA+H,IAAAkpB,EAAAhoB,GAAA,KAAAqpB,OAAA,YAAA9pB,KAAAS,EAAAiqB,WAAAnS,GAAA,KAAAvO,SAAAxS,EAAA,EAAAwS,SAAA,SAAA1F,EAAAmkB,GAAA,aAAAnkB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,gBAAA+E,EAAAjQ,MAAA,aAAAiQ,EAAAjQ,KAAA,KAAA2L,KAAAsE,EAAA/E,IAAA,WAAA+E,EAAAjQ,MAAA,KAAAm3B,KAAA,KAAAjsB,IAAA+E,EAAA/E,IAAA,KAAAuqB,OAAA,cAAA9pB,KAAA,kBAAAsE,EAAAjQ,MAAAo0B,IAAA,KAAAzoB,KAAAyoB,GAAAlQ,CAAA,EAAAmT,OAAA,SAAApnB,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAoa,aAAApmB,EAAA,YAAA0F,SAAAsG,EAAAwa,WAAAxa,EAAAqa,UAAAE,EAAAva,GAAAiI,CAAA,kBAAAjU,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAka,SAAAlmB,EAAA,KAAAuc,EAAAvQ,EAAAwa,WAAA,aAAAjK,EAAAxsB,KAAA,KAAAq0B,EAAA7H,EAAAthB,IAAAsrB,EAAAva,EAAA,QAAAoY,CAAA,QAAAmB,MAAA,0BAAA8B,cAAA,SAAAlD,EAAAnY,EAAAuQ,GAAA,YAAAkJ,SAAA,CAAAprB,SAAA2qB,EAAAb,GAAA4B,WAAA/Z,EAAAga,QAAAzJ,GAAA,cAAAiJ,SAAA,KAAAvqB,IAAA+E,GAAAiU,CAAA,GAAAkQ,CAAA,UAAAmD,EAAA/K,EAAAvc,EAAAmkB,EAAAnY,EAAAoY,EAAAlxB,EAAA0Y,GAAA,QAAAzP,EAAAogB,EAAArpB,GAAA0Y,GAAAyY,EAAAloB,EAAAxC,KAAA,OAAA4iB,GAAA,YAAA4H,EAAA5H,EAAA,CAAApgB,EAAAZ,KAAAyE,EAAAqkB,GAAAlpB,QAAAC,QAAAipB,GAAAhpB,KAAA2Q,EAAAoY,EAAA,UAAAmD,EAAAhL,GAAA,sBAAAvc,EAAA,KAAAmkB,EAAA7uB,UAAA,WAAA6F,SAAA,SAAA6Q,EAAAoY,GAAA,IAAAlxB,EAAAqpB,EAAA5mB,MAAAqK,EAAAmkB,GAAA,SAAAqD,EAAAjL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,OAAAlL,EAAA,UAAAkL,EAAAlL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,QAAAlL,EAAA,CAAAiL,OAAA,gBAAAE,EAAAvD,EAAAnY,GAAA,QAAAhM,EAAA,EAAAA,EAAAgM,EAAAzW,OAAAyK,IAAA,KAAAokB,EAAApY,EAAAhM,GAAAokB,EAAA/nB,WAAA+nB,EAAA/nB,aAAA,EAAA+nB,EAAA9nB,cAAA,YAAA8nB,IAAAA,EAAA7nB,UAAA,GAAAC,OAAAC,eAAA0nB,EAAAwD,EAAAvD,EAAAzzB,KAAAyzB,EAAA,WAAAuD,EAAA3nB,GAAA,IAAA7D,EAAA,SAAA6D,EAAAgM,GAAA,aAAA7R,EAAA6F,KAAAA,EAAA,OAAAA,EAAA,IAAAmkB,EAAAnkB,EAAA5F,OAAAwtB,aAAA,YAAAzD,EAAA,KAAAhoB,EAAAgoB,EAAAnnB,KAAAgD,EAAAgM,GAAA,wBAAA7R,EAAAgC,GAAA,OAAAA,EAAA,UAAAsU,UAAA,kEAAAzE,EAAAiO,OAAA4N,QAAA7nB,EAAA,CAAA8nB,CAAA9nB,EAAA,0BAAA7F,EAAAgC,GAAAA,EAAAA,EAAA,oBAAO,IAAPgoB,EAAAnY,EAAAhM,EAgUIs1B,EAjCAC,EAvICC,EAjIAC,EAvBkBC,EAAVC,EAAU,wBA8YlB,MA9YLxR,EAAuB,SAAAwR,KAAvB,SAAAziC,EAAAqpB,GAAA,KAAArpB,aAAAqpB,GAAA,UAAA9L,UAAA,qCAAuB8X,CAAA,KAAAoN,EAAA,EAAvB3pB,EAAuB,KAAvBhM,EAAuB,EAAArP,IAAA,UAAAgJ,OAAA+7B,EAAAnO,EAAArD,IAAA0C,MACnB,SAAA4B,EAAqBoN,GAAQ,IAAA9lB,EAAAgP,EAAA,OAAAoF,IAAAM,MAAA,SAAAiE,GAAA,cAAAA,EAAAxB,KAAAwB,EAAA/sB,MAAA,cAAA+sB,EAAAxB,KAAA,EAAAwB,EAAA/sB,KAAA,EAEEm6B,MAAM,GAADv4B,OAAI0yB,QAAO,SAAA1yB,OAAQs4B,IAAW,OAA5C,IAAR9lB,EAAQ2Y,EAAA9C,MAEAmQ,GAAI,CAAFrN,EAAA/sB,KAAA,cACN,IAAI6pB,MAAM,8BAADjoB,OAA+BwS,EAASE,SAAS,cAAAyY,EAAA/sB,KAAA,EAGjDoU,EAASimB,OAAM,OAAxB,OAAJjX,EAAI2J,EAAA9C,KAAA8C,EAAA3C,OAAA,SACHhH,GAAI,QAEoB,MAFpB2J,EAAAxB,KAAA,GAAAwB,EAAA8C,GAAA9C,EAAA,SAEoBA,EAAA8C,GAAA,yBAAA9C,EAAArS,OAAA,GAAAoS,EAAA,mBAGtC,SAdmBuB,GAAA,OAAA2L,EAAA//B,MAAC,KAADL,UAAA,KAAA3E,IAAA,aAAAgJ,MAgBpB,SAAkB2K,GACduxB,MAAM,GAADv4B,OAAIgH,IACJjJ,MAAK,SAAAyU,GAAQ,OAAIA,EAASimB,MAAM,IAChC16B,MAAK,SAAAyjB,GACF,OAAOA,CACX,GACR,GAAC,CAAAnuB,IAAA,eAAAgJ,OAAA87B,EAAAlO,EAAArD,IAAA0C,MAED,SAAAiC,EAA0B+M,GAAQ,IAAA9lB,EAAAgP,EAAA,OAAAoF,IAAAM,MAAA,SAAAuE,GAAA,cAAAA,EAAA9B,KAAA8B,EAAArtB,MAAA,cAAAqtB,EAAA9B,KAAA,EAAA8B,EAAArtB,KAAA,EAEHm6B,MAAM,GAADv4B,OAAI0yB,QAAO,SAAA1yB,OAAQs4B,GAAY,CACvDI,QAAS,CACL,eAAgB,gBAEtB,OAJY,IAARlmB,EAAQiZ,EAAApD,MAMAmQ,GAAI,CAAF/M,EAAArtB,KAAA,cACN,IAAI6pB,MAAM,8BAADjoB,OAA+BwS,EAASE,SAAS,cAAA+Y,EAAArtB,KAAA,EAGjDoU,EAASxF,OAAM,OAAxB,OAAJwU,EAAIiK,EAAApD,KAAAoD,EAAAjD,OAAA,SACHhH,GAAI,QAGoB,MAHpBiK,EAAA9B,KAAA,GAAA8B,EAAAwC,GAAAxC,EAAA,SAGoBA,EAAAwC,GAAA,yBAAAxC,EAAA3S,OAAA,GAAAyS,EAAA,mBAGtC,SAnBwBmB,GAAA,OAAAyL,EAAA9/B,MAAC,KAADL,UAAA,KAAA3E,IAAA,UAAAgJ,MAqBzB,SAAei8B,GACXC,MAAM,GAADv4B,OAAI0yB,QAAO,KAAA1yB,OAAIs4B,GAAY,CAC5BI,QAAS,CACL,eAAgB,gBAGnB36B,MAAK,SAAAyU,GAAQ,OAAIA,EAASxF,MAAM,IAChCjP,MAAK,SAAAiP,GACF,OAAOA,CACX,IAAE,OACK,SAAAmF,GAA6B,GAC5C,GAAC,CAAA9e,IAAA,WAAAgJ,MAED,SAAgBi8B,EAAUK,GACtB,IAGI,IAAMC,EAAiB,CACnB1Q,OAAQ,OACRwQ,QAAS,CACL,eAAgB,oBAEpB5yB,KAAMkM,KAAKC,UAAU0mB,IAIzBJ,MAAM,GAADv4B,OAAI0yB,QAAO,KAAA1yB,OAAIs4B,GAAYM,GAC3B76B,MAAK,SAAAyU,GACF,IAAKA,EAASgmB,GACV,MAAM,IAAIvQ,MAAM,8BAADjoB,OAA+BwS,EAASE,SAE3DF,EAASimB,MACb,IACC16B,MAAK,SAAAf,GAAS,OAAOA,CAAK,GACnC,CACA,MAAOmV,GAEH,MAAMA,CACV,CACJ,GAAC,CAAA9e,IAAA,wBAAAgJ,MAED,SAA6Bi8B,EAAUK,GACnC,OAAO,IAAI96B,SAAQ,SAAUC,EAASK,GAClC,IAAI06B,EAAYC,aAAaC,QAAQ,yBACjCC,EAAiBF,aAAaC,QAAQ,4BAE1C,IAAKF,IAAcG,EACf,OAAO76B,EAAO,MAIlB,IAAMy6B,EAAiB,CACnB1Q,OAAQ,OACRwQ,QAAS,CACL,eAAgB,mBAChB,cAAiB,UAAF14B,OAAY64B,KAI/BF,IACAC,EAAe9yB,KAAOkM,KAAKC,UAAU0mB,IAIzCJ,MAAM,GAADv4B,OAAI0yB,QAAO,SAAA1yB,OAAQs4B,GAAYM,GAC/B76B,MAAK,SAAAyU,GAAQ,OAAIA,EAASimB,MAAM,IAChC16B,MAAK,SAAAf,GAEF,OADAouB,MACOttB,EAAQd,EACnB,IAAE,OACK,SAAAmV,GACH,OAAOhU,EAAOgU,EAClB,GACR,GACJ,GAAC,CAAA9e,IAAA,uBAAAgJ,MAED,SAA4Bi8B,GACxB,OAAO,IAAIz6B,SAAQ,SAAUC,EAASK,GAClC,IAAI06B,EAAYC,aAAaC,QAAQ,yBACjCC,EAAiBF,aAAaC,QAAQ,4BAE1C,IAAKF,IAAcG,EACf,OAAO76B,EAAO,MAIlB,IAAMy6B,EAAiB,CACnB1Q,OAAQ,MACRwQ,QAAS,CACL,eAAgB,mBAChB,cAAiB,UAAF14B,OAAY64B,KAKnCN,MAAM,GAADv4B,OAAI0yB,QAAO,SAAA1yB,OAAQs4B,GAAYM,GAC/B76B,MAAK,SAAAyU,GAAQ,OAAIA,EAASimB,MAAM,IAChC16B,MAAK,SAAAf,GAEF,OADAouB,MACOttB,EAAQd,EACnB,IAAE,OACK,SAAAmV,GACH,OAAOhU,EAAOgU,EAClB,GACR,GAEJ,GAAC,CAAA9e,IAAA,4BAAAgJ,OAAA67B,EAAAjO,EAAArD,IAAA0C,MAED,SAAAsC,EAAuC0M,GAAQ,IAAAO,EAAAG,EAAAJ,EAAApmB,EAAAgP,EAAA,OAAAoF,IAAAM,MAAA,SAAA+E,GAAA,cAAAA,EAAAtC,KAAAsC,EAAA7tB,MAAA,OAE0B,GADjEy6B,EAAYC,aAAaC,QAAQ,yBACjCC,EAAiBF,aAAaC,QAAQ,4BAErCF,GAAcG,EAAc,CAAA/M,EAAA7tB,KAAA,eAAA6tB,EAAAzD,OAAA,SACtBrqB,OAAO,OAAK,OAUtB,OANKy6B,EAAiB,CACnB1Q,OAAQ,MACRwQ,QAAS,CACL,eAAgB,mBAChB,cAAiB,UAAF14B,OAAY64B,KAElC5M,EAAAtC,KAAA,EAAAsC,EAAA7tB,KAAA,EAG0Bm6B,MAAM,GAADv4B,OAAI0yB,QAAO,SAAA1yB,OAAQs4B,GAAYM,GAAe,OAA5D,IAARpmB,EAAQyZ,EAAA5D,MAEAmQ,GAAI,CAAFvM,EAAA7tB,KAAA,eACN,IAAI6pB,MAAM,8BAADjoB,OAA+BwS,EAASE,SAAS,eAAAuZ,EAAA7tB,KAAA,GAGjDoU,EAASimB,OAAM,QAAxB,OAAJjX,EAAIyK,EAAA5D,KAAA4D,EAAAzD,OAAA,SACHhH,GAAI,QAEoB,MAFpByK,EAAAtC,KAAA,GAAAsC,EAAAgC,GAAAhC,EAAA,SAEoBA,EAAAgC,GAAA,yBAAAhC,EAAAnT,OAAA,GAAA8S,EAAA,mBAGtC,SA9BqCuC,GAAA,OAAA+J,EAAA7/B,MAAC,KAADL,UAAA,KAAA3E,IAAA,aAAAgJ,MAkCtC,SAAkBi8B,GACd,OAAO,IAAIz6B,SAAQ,SAAUC,EAASK,GAClC,IAAI06B,EAAYC,aAAaC,QAAQ,yBACjCC,EAAiBF,aAAaC,QAAQ,4BAGtCH,EAAiB,CACjB1Q,OAAQ,MACRwQ,QAAS,CACL,eAAgB,qBAIpBG,GAAaG,GAA+B,QAAbH,IAC/BD,EAAiB,CACb1Q,OAAQ,MACRwQ,QAAS,CACL,eAAgB,mBAChB,cAAiB,UAAF14B,OAAY64B,MAMvCN,MAAM,GAADv4B,OAAI0yB,QAAO,SAAA1yB,OAAQs4B,GAAYM,GAC/B76B,MAAK,SAAAyU,GAAQ,OAAIA,EAASimB,MAAM,IAChC16B,MAAK,SAAAf,GAEF,OADAouB,MACOttB,EAAQd,EACnB,IAAE,OACK,SAAAmV,GACH,OAAOhU,EAAOgU,EAClB,GACR,GAEJ,GAAC,CAAA9e,IAAA,cAAAgJ,MAED,SAAmBi8B,EAAUK,EAAShqB,EAAOsqB,EAAYC,GACrD,OAAO,IAAIr7B,SAAQ,SAAUC,EAASK,GAClC,IAAI06B,EAAYC,aAAaC,QAAQ,yBACjCC,EAAiBF,aAAaC,QAAQ,4BAEtCI,GAAO,EAEPN,GAAaG,GAA+B,QAAbH,IAC/BM,GAAO,GAIX,IAAIP,EAAiB,CACjB1Q,OAAQ,OACRwQ,QAAS,CACT,GAGAS,IACAP,EAAeF,QAAuB,cAAI,UAAH14B,OAAa64B,IAGpDlqB,IACAiqB,EAAeF,QAAQ,oBAAsB/pB,GAG7CgqB,GAAWM,EACXL,EAAe9yB,KAAO6yB,EAEjBA,IACLC,EAAe9yB,KAAOkM,KAAKC,UAAU0mB,IAGrCO,IAKAN,EAAeF,QAAQ,gBAAkB,oBAI7CH,MAAM,GAADv4B,OAAI0yB,QAAO,SAAA1yB,OAAQs4B,GAAYM,GAC/B76B,MAAK,SAACyU,GACH,IAAKA,EAASgmB,GAEV,OAAOr6B,EAAOqU,GAElBA,EAASimB,MACb,IACC16B,MAAK,SAAAf,GACF,OAAOc,EAAQd,EACnB,IAAE,OACK,SAAAmV,GACH,OAAOhU,EAAOgU,EAClB,GACR,GACJ,GAKA,CAAA9e,IAAA,kBAAAgJ,OAAA47B,EAAAhO,EAAArD,IAAA0C,MACA,SAAAqD,EAA6B2L,EAAUc,GAAW,IAAAC,EAAAT,EAAApmB,EAAAgP,EAAA,OAAAoF,IAAAM,MAAA,SAAA4F,GAAA,cAAAA,EAAAnD,KAAAmD,EAAA1uB,MAAA,OAa7C,OAZGi7B,EAAUh8B,KAAKi8B,QAAQF,GAGrBR,EAAiB,CACnB1Q,OAAQ,MACRwQ,QAAS,CACL,eAAgB,qBAIpBW,IACAT,EAAeF,QAAuB,cAAI,UAAH14B,OAAaq5B,EAAQR,YAC/D/L,EAAAnD,KAAA,EAAAmD,EAAA1uB,KAAA,EAG0Bm6B,MAAM,GAADv4B,OAAI0yB,QAAO,SAAA1yB,OAAQs4B,GAAYM,GAAe,OAA5D,IAARpmB,EAAQsa,EAAAzE,MAEAmQ,GAAI,CAAF1L,EAAA1uB,KAAA,cACN,IAAI6pB,MAAM,8BAADjoB,OAA+BwS,EAASE,SAAS,cAAAoa,EAAA1uB,KAAA,GAGjDoU,EAASimB,OAAM,QAAxB,OAAJjX,EAAIsL,EAAAzE,KAAAyE,EAAAtE,OAAA,SACHhH,GAAI,QAEoB,MAFpBsL,EAAAnD,KAAA,GAAAmD,EAAAmB,GAAAnB,EAAA,SAEoBA,EAAAmB,GAAA,yBAAAnB,EAAAhU,OAAA,GAAA6T,EAAA,mBAGtC,SA5B2B8B,EAAAC,GAAA,OAAAuJ,EAAA5/B,MAAC,KAADL,UAAA,IAgC5B,CAAA3E,IAAA,mBAAAgJ,OAAA27B,EAAA/N,EAAArD,IAAA0C,MACA,SAAAiE,EAA8B+K,EAAUK,EAAShqB,EAAOsqB,EAAYC,EAAaE,GAAW,IAAAC,EAAAT,EAAApmB,EAAAgP,EAAA,OAAAoF,IAAAM,MAAA,SAAAsG,GAAA,cAAAA,EAAA7D,KAAA6D,EAAApvB,MAAA,OAgCvF,OA9BGi7B,EAAUh8B,KAAKi8B,QAAQF,GAGrBR,EAAiB,CACnB1Q,OAAQ,OACRwQ,QAAS,CACT,GAGAW,IACAT,EAAeF,QAAuB,cAAI,UAAH14B,OAAaq5B,EAAQR,YAG5DlqB,IACAiqB,EAAeF,QAAQ,oBAAsB/pB,GAG7CgqB,GAAWM,EACXL,EAAe9yB,KAAO6yB,EAEjBA,IACLC,EAAe9yB,KAAOkM,KAAKC,UAAU0mB,IAGrCO,IAKAN,EAAeF,QAAQ,gBAAkB,oBAC5ClL,EAAA7D,KAAA,EAAA6D,EAAApvB,KAAA,EAG0Bm6B,MAAM,GAADv4B,OAAI0yB,QAAO,SAAA1yB,OAAQs4B,GAAYM,GAAe,OAA5D,IAARpmB,EAAQgb,EAAAnF,MAEAmQ,GAAI,CAAFhL,EAAApvB,KAAA,gBAAAovB,EAAApvB,KAAA,GACYoU,EAASimB,OAAM,QAAxB,MAAAjL,EAAAnF,KACA,eAAAmF,EAAApvB,KAAA,GAGAoU,EAASimB,OAAM,QAAxB,OAAJjX,EAAIgM,EAAAnF,KAAAmF,EAAAhF,OAAA,SACHhH,GAAI,WAAAgM,EAAA7D,KAAA,GAAA6D,EAAAS,GAAAT,EAAA,SAGU,WAAjB3wB,EAAA2wB,EAAAS,KAAuC,OAAVT,EAAAS,IAAoBT,EAAAS,cAAiBhG,MAAM,CAAAuF,EAAApvB,KAAA,eAAAovB,EAAAS,GAAA,QAI7C,MAAAT,EAAAS,GAAA,yBAAAT,EAAA1U,OAAA,GAAAyU,EAAA,mBAGtC,SArD4BuD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,OAAA6G,EAAA3/B,MAAC,KAADL,UAAA,IAyD7B,CAAA3E,IAAA,UAAAgJ,MACA,SAAe+8B,GACX,IAAIP,EAAYC,aAAaC,QAAQ,yBACjCC,EAAiBF,aAAaC,QAAQ,4BAG1C,GAAKF,GAAcG,GAA+B,QAAbH,EAOhC,CACD,IAAIQ,EAAU,CAAC,EAIf,OAHAA,EAAQR,UAAYA,EACpBQ,EAAQL,eAAiBA,EAElBK,CACX,CAZI,GAAID,EACA,MAAM,IAAInR,MAAM,2BAGpB,OAAO,IASf,IA9YJvZ,GAAA0b,EAAAvD,EAAA3pB,UAAAwR,GAAAhM,GAAA0nB,EAAAvD,EAAAnkB,GAAAxD,OAAAC,eAAA0nB,EAAA,aAAA5nB,UAAA,IAAA4nB,mRCAAD,EAAA,kBAAAC,CAAA,MAAAnkB,EAAAmkB,EAAA,GAAAnY,EAAAxP,OAAAhC,UAAA+hB,EAAAvQ,EAAA9b,eAAAk0B,EAAA5nB,OAAAC,gBAAA,SAAAuD,EAAAmkB,EAAAnY,GAAAhM,EAAAmkB,GAAAnY,EAAArS,KAAA,EAAAwC,EAAA,mBAAA/B,OAAAA,OAAA,GAAAlH,EAAAiJ,EAAA9B,UAAA,aAAAuR,EAAAzP,EAAAL,eAAA,kBAAAuoB,EAAAloB,EAAAmoB,aAAA,yBAAAC,EAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAxP,OAAAC,eAAAuD,EAAAmkB,EAAA,CAAAxqB,MAAAqS,EAAA3P,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAAyD,EAAAmkB,EAAA,KAAAI,EAAA,aAAAvkB,GAAAukB,EAAA,SAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAhM,EAAAmkB,GAAAnY,CAAA,WAAAwY,EAAAxkB,EAAAmkB,EAAAnY,EAAAuQ,GAAA,IAAApgB,EAAAgoB,GAAAA,EAAA3pB,qBAAAiqB,EAAAN,EAAAM,EAAAvxB,EAAAsJ,OAAA6O,OAAAlP,EAAA3B,WAAAoR,EAAA,IAAA8Y,EAAAnI,GAAA,WAAA6H,EAAAlxB,EAAA,WAAAyG,MAAAgrB,EAAA3kB,EAAAgM,EAAAJ,KAAA1Y,CAAA,UAAA0xB,EAAA5kB,EAAAmkB,EAAAnY,GAAA,WAAAjc,KAAA,SAAAkL,IAAA+E,EAAAhD,KAAAmnB,EAAAnY,GAAA,OAAAhM,GAAA,OAAAjQ,KAAA,QAAAkL,IAAA+E,EAAA,EAAAmkB,EAAAK,KAAAA,EAAA,IAAAnQ,EAAA,iBAAAzV,EAAA,iBAAAyI,EAAA,YAAAhC,EAAA,YAAA4O,EAAA,YAAAwQ,IAAA,UAAAI,IAAA,UAAAC,IAAA,KAAAvhB,EAAA,GAAAghB,EAAAhhB,EAAArQ,GAAA,8BAAAkhB,EAAA5X,OAAAuoB,eAAA5vB,EAAAif,GAAAA,EAAAA,EAAA4Q,EAAA,MAAA7vB,GAAAA,IAAA6W,GAAAuQ,EAAAvf,KAAA7H,EAAAjC,KAAAqQ,EAAApO,GAAA,IAAA8vB,EAAAH,EAAAtqB,UAAAiqB,EAAAjqB,UAAAgC,OAAA6O,OAAA9H,GAAA,SAAA2hB,EAAAllB,GAAA,0BAAAvC,SAAA,SAAA0mB,GAAAI,EAAAvkB,EAAAmkB,GAAA,SAAAnkB,GAAA,YAAArE,QAAAwoB,EAAAnkB,EAAA,gBAAAmlB,EAAAnlB,EAAAmkB,GAAA,SAAAiB,EAAApZ,EAAAoY,EAAAjoB,EAAAjJ,GAAA,IAAA0Y,EAAAgZ,EAAA5kB,EAAAgM,GAAAhM,EAAAokB,GAAA,aAAAxY,EAAA7b,KAAA,KAAAs0B,EAAAzY,EAAA3Q,IAAAoZ,EAAAgQ,EAAA1qB,MAAA,OAAA0a,GAAA,UAAAla,EAAAka,IAAAkI,EAAAvf,KAAAqX,EAAA,WAAA8P,EAAA/oB,QAAAiZ,EAAAgR,SAAAhqB,MAAA,SAAA2E,GAAAolB,EAAA,OAAAplB,EAAA7D,EAAAjJ,EAAA,aAAA8M,GAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAixB,EAAA/oB,QAAAiZ,GAAAhZ,MAAA,SAAA2E,GAAAqkB,EAAA1qB,MAAAqG,EAAA7D,EAAAkoB,EAAA,aAAArkB,GAAA,OAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAA,EAAA0Y,EAAA3Q,IAAA,KAAA+Q,EAAAoY,EAAA,gBAAAzqB,MAAA,SAAAqG,EAAAuc,GAAA,SAAA+I,IAAA,WAAAnB,GAAA,SAAAA,EAAAnY,GAAAoZ,EAAAplB,EAAAuc,EAAA4H,EAAAnY,EAAA,WAAAA,EAAAA,EAAAA,EAAA3Q,KAAAiqB,EAAAA,GAAAA,GAAA,aAAAX,EAAAR,EAAAnY,EAAAuQ,GAAA,IAAA6H,EAAA/P,EAAA,gBAAAlY,EAAAjJ,GAAA,GAAAkxB,IAAA/c,EAAA,MAAAke,MAAA,mCAAAnB,IAAA/e,EAAA,cAAAlJ,EAAA,MAAAjJ,EAAA,OAAAyG,MAAAqG,EAAAzE,MAAA,OAAAghB,EAAAiJ,OAAArpB,EAAAogB,EAAAthB,IAAA/H,IAAA,KAAA0Y,EAAA2Q,EAAAkJ,SAAA,GAAA7Z,EAAA,KAAAyY,EAAAqB,EAAA9Z,EAAA2Q,GAAA,GAAA8H,EAAA,IAAAA,IAAApQ,EAAA,gBAAAoQ,CAAA,cAAA9H,EAAAiJ,OAAAjJ,EAAAoJ,KAAApJ,EAAAqJ,MAAArJ,EAAAthB,SAAA,aAAAshB,EAAAiJ,OAAA,IAAApB,IAAA/P,EAAA,MAAA+P,EAAA/e,EAAAkX,EAAAthB,IAAAshB,EAAAsJ,kBAAAtJ,EAAAthB,IAAA,gBAAAshB,EAAAiJ,QAAAjJ,EAAAuJ,OAAA,SAAAvJ,EAAAthB,KAAAmpB,EAAA/c,EAAA,IAAA9D,EAAAqhB,EAAAT,EAAAnY,EAAAuQ,GAAA,cAAAhZ,EAAAxT,KAAA,IAAAq0B,EAAA7H,EAAAhhB,KAAA8J,EAAAzG,EAAA2E,EAAAtI,MAAAgZ,EAAA,gBAAAta,MAAA4J,EAAAtI,IAAAM,KAAAghB,EAAAhhB,KAAA,WAAAgI,EAAAxT,OAAAq0B,EAAA/e,EAAAkX,EAAAiJ,OAAA,QAAAjJ,EAAAthB,IAAAsI,EAAAtI,IAAA,YAAAyqB,EAAAvB,EAAAnY,GAAA,IAAAuQ,EAAAvQ,EAAAwZ,OAAApB,EAAAD,EAAA9pB,SAAAkiB,GAAA,GAAA6H,IAAApkB,EAAA,OAAAgM,EAAAyZ,SAAA,eAAAlJ,GAAA4H,EAAA9pB,SAAA,SAAA2R,EAAAwZ,OAAA,SAAAxZ,EAAA/Q,IAAA+E,EAAA0lB,EAAAvB,EAAAnY,GAAA,UAAAA,EAAAwZ,SAAA,WAAAjJ,IAAAvQ,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAA8L,EAAA,aAAAtI,EAAA,IAAA9X,EAAAyoB,EAAAR,EAAAD,EAAA9pB,SAAA2R,EAAA/Q,KAAA,aAAAkB,EAAApM,KAAA,OAAAic,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAAkB,EAAAlB,IAAA+Q,EAAAyZ,SAAA,KAAAxR,EAAA,IAAA/gB,EAAAiJ,EAAAlB,IAAA,OAAA/H,EAAAA,EAAAqI,MAAAyQ,EAAAmY,EAAA4B,YAAA7yB,EAAAyG,MAAAqS,EAAAtQ,KAAAyoB,EAAA6B,QAAA,WAAAha,EAAAwZ,SAAAxZ,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,GAAAgM,EAAAyZ,SAAA,KAAAxR,GAAA/gB,GAAA8Y,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAAzE,EAAAyZ,SAAA,KAAAxR,EAAA,UAAAgS,EAAAjmB,GAAA,IAAAmkB,EAAA,CAAA+B,OAAAlmB,EAAA,SAAAA,IAAAmkB,EAAAgC,SAAAnmB,EAAA,SAAAA,IAAAmkB,EAAAiC,WAAApmB,EAAA,GAAAmkB,EAAAkC,SAAArmB,EAAA,SAAAsmB,WAAApmB,KAAAikB,EAAA,UAAAoC,EAAAvmB,GAAA,IAAAmkB,EAAAnkB,EAAAwmB,YAAA,GAAArC,EAAAp0B,KAAA,gBAAAo0B,EAAAlpB,IAAA+E,EAAAwmB,WAAArC,CAAA,UAAAO,EAAA1kB,GAAA,KAAAsmB,WAAA,EAAAJ,OAAA,SAAAlmB,EAAAvC,QAAAwoB,EAAA,WAAAnsB,OAAA,YAAAkrB,EAAAb,GAAA,GAAAA,GAAA,KAAAA,EAAA,KAAAnY,EAAAmY,EAAAjxB,GAAA,GAAA8Y,EAAA,OAAAA,EAAAhP,KAAAmnB,GAAA,sBAAAA,EAAAzoB,KAAA,OAAAyoB,EAAA,IAAAsC,MAAAtC,EAAA5uB,QAAA,KAAA6uB,GAAA,EAAAjoB,EAAA,SAAAT,IAAA,OAAA0oB,EAAAD,EAAA5uB,QAAA,GAAAgnB,EAAAvf,KAAAmnB,EAAAC,GAAA,OAAA1oB,EAAA/B,MAAAwqB,EAAAC,GAAA1oB,EAAAH,MAAA,EAAAG,EAAA,OAAAA,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,SAAAS,EAAAT,KAAAS,CAAA,YAAAsU,UAAAtW,EAAAgqB,GAAA,2BAAAU,EAAArqB,UAAAsqB,EAAAV,EAAAa,EAAA,eAAAtrB,MAAAmrB,EAAAxoB,cAAA,IAAA8nB,EAAAU,EAAA,eAAAnrB,MAAAkrB,EAAAvoB,cAAA,IAAAuoB,EAAA6B,YAAAnC,EAAAO,EAAAT,EAAA,qBAAAF,EAAAwC,oBAAA,SAAA3mB,GAAA,IAAAmkB,EAAA,mBAAAnkB,GAAAA,EAAAzF,YAAA,QAAA4pB,IAAAA,IAAAU,GAAA,uBAAAV,EAAAuC,aAAAvC,EAAAl0B,MAAA,EAAAk0B,EAAAyC,KAAA,SAAA5mB,GAAA,OAAAxD,OAAAqqB,eAAArqB,OAAAqqB,eAAA7mB,EAAA8kB,IAAA9kB,EAAA8mB,UAAAhC,EAAAP,EAAAvkB,EAAAqkB,EAAA,sBAAArkB,EAAAxF,UAAAgC,OAAA6O,OAAA4Z,GAAAjlB,CAAA,EAAAmkB,EAAA4C,MAAA,SAAA/mB,GAAA,OAAAqlB,QAAArlB,EAAA,EAAAklB,EAAAC,EAAA3qB,WAAA+pB,EAAAY,EAAA3qB,UAAAoR,GAAA,0BAAAuY,EAAAgB,cAAAA,EAAAhB,EAAA6C,MAAA,SAAAhnB,EAAAgM,EAAAuQ,EAAA6H,EAAAjoB,QAAA,IAAAA,IAAAA,EAAAhB,SAAA,IAAAjI,EAAA,IAAAiyB,EAAAX,EAAAxkB,EAAAgM,EAAAuQ,EAAA6H,GAAAjoB,GAAA,OAAAgoB,EAAAwC,oBAAA3a,GAAA9Y,EAAAA,EAAAwI,OAAAL,MAAA,SAAA2E,GAAA,OAAAA,EAAAzE,KAAAyE,EAAArG,MAAAzG,EAAAwI,MAAA,KAAAwpB,EAAAD,GAAAV,EAAAU,EAAAZ,EAAA,aAAAE,EAAAU,EAAA/xB,GAAA,0BAAAqxB,EAAAU,EAAA,qDAAAd,EAAA7T,KAAA,SAAAtQ,GAAA,IAAAmkB,EAAA3nB,OAAAwD,GAAAgM,EAAA,WAAAuQ,KAAA4H,EAAAnY,EAAA9L,KAAAqc,GAAA,OAAAvQ,EAAAzO,UAAA,SAAA7B,IAAA,KAAAsQ,EAAAzW,QAAA,KAAAyK,EAAAgM,EAAAlO,MAAA,GAAAkC,KAAAmkB,EAAA,OAAAzoB,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,QAAAA,EAAAH,MAAA,EAAAG,CAAA,GAAAyoB,EAAAa,OAAAA,EAAAN,EAAAlqB,UAAA,CAAAD,YAAAmqB,EAAA5qB,MAAA,SAAAqqB,GAAA,QAAA8C,KAAA,OAAAvrB,KAAA,OAAAiqB,KAAA,KAAAC,MAAA5lB,EAAA,KAAAzE,MAAA,OAAAkqB,SAAA,UAAAD,OAAA,YAAAvqB,IAAA+E,EAAA,KAAAsmB,WAAA7oB,QAAA8oB,IAAApC,EAAA,QAAAnY,KAAA,WAAAA,EAAAnb,OAAA,IAAA0rB,EAAAvf,KAAA,KAAAgP,KAAAya,OAAAza,EAAAxJ,MAAA,WAAAwJ,GAAAhM,EAAA,EAAAoW,KAAA,gBAAA7a,MAAA,MAAAyE,EAAA,KAAAsmB,WAAA,GAAAE,WAAA,aAAAxmB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,YAAAisB,IAAA,EAAArB,kBAAA,SAAA1B,GAAA,QAAA5oB,KAAA,MAAA4oB,EAAA,IAAAnY,EAAA,cAAAmb,EAAA5K,EAAA6H,GAAA,OAAAlxB,EAAAnD,KAAA,QAAAmD,EAAA+H,IAAAkpB,EAAAnY,EAAAtQ,KAAA6gB,EAAA6H,IAAApY,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,KAAAokB,CAAA,SAAAA,EAAA,KAAAkC,WAAA/wB,OAAA,EAAA6uB,GAAA,IAAAA,EAAA,KAAAjoB,EAAA,KAAAmqB,WAAAlC,GAAAlxB,EAAAiJ,EAAAqqB,WAAA,YAAArqB,EAAA+pB,OAAA,OAAAiB,EAAA,UAAAhrB,EAAA+pB,QAAA,KAAAe,KAAA,KAAArb,EAAA2Q,EAAAvf,KAAAb,EAAA,YAAAkoB,EAAA9H,EAAAvf,KAAAb,EAAA,iBAAAyP,GAAAyY,EAAA,SAAA4C,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,WAAAc,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,SAAAxa,GAAA,QAAAqb,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,YAAA9B,EAAA,MAAAkB,MAAA,kDAAA0B,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,KAAAN,OAAA,SAAA9lB,EAAAmkB,GAAA,QAAAnY,EAAA,KAAAsa,WAAA/wB,OAAA,EAAAyW,GAAA,IAAAA,EAAA,KAAAoY,EAAA,KAAAkC,WAAAta,GAAA,GAAAoY,EAAA8B,QAAA,KAAAe,MAAA1K,EAAAvf,KAAAonB,EAAA,oBAAA6C,KAAA7C,EAAAgC,WAAA,KAAAjqB,EAAAioB,EAAA,OAAAjoB,IAAA,UAAA6D,GAAA,aAAAA,IAAA7D,EAAA+pB,QAAA/B,GAAAA,GAAAhoB,EAAAiqB,aAAAjqB,EAAA,UAAAjJ,EAAAiJ,EAAAA,EAAAqqB,WAAA,UAAAtzB,EAAAnD,KAAAiQ,EAAA9M,EAAA+H,IAAAkpB,EAAAhoB,GAAA,KAAAqpB,OAAA,YAAA9pB,KAAAS,EAAAiqB,WAAAnS,GAAA,KAAAvO,SAAAxS,EAAA,EAAAwS,SAAA,SAAA1F,EAAAmkB,GAAA,aAAAnkB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,gBAAA+E,EAAAjQ,MAAA,aAAAiQ,EAAAjQ,KAAA,KAAA2L,KAAAsE,EAAA/E,IAAA,WAAA+E,EAAAjQ,MAAA,KAAAm3B,KAAA,KAAAjsB,IAAA+E,EAAA/E,IAAA,KAAAuqB,OAAA,cAAA9pB,KAAA,kBAAAsE,EAAAjQ,MAAAo0B,IAAA,KAAAzoB,KAAAyoB,GAAAlQ,CAAA,EAAAmT,OAAA,SAAApnB,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAoa,aAAApmB,EAAA,YAAA0F,SAAAsG,EAAAwa,WAAAxa,EAAAqa,UAAAE,EAAAva,GAAAiI,CAAA,kBAAAjU,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAka,SAAAlmB,EAAA,KAAAuc,EAAAvQ,EAAAwa,WAAA,aAAAjK,EAAAxsB,KAAA,KAAAq0B,EAAA7H,EAAAthB,IAAAsrB,EAAAva,EAAA,QAAAoY,CAAA,QAAAmB,MAAA,0BAAA8B,cAAA,SAAAlD,EAAAnY,EAAAuQ,GAAA,YAAAkJ,SAAA,CAAAprB,SAAA2qB,EAAAb,GAAA4B,WAAA/Z,EAAAga,QAAAzJ,GAAA,cAAAiJ,SAAA,KAAAvqB,IAAA+E,GAAAiU,CAAA,GAAAkQ,CAAA,UAAAmD,EAAA/K,EAAAvc,EAAAmkB,EAAAnY,EAAAoY,EAAAlxB,EAAA0Y,GAAA,QAAAzP,EAAAogB,EAAArpB,GAAA0Y,GAAAyY,EAAAloB,EAAAxC,KAAA,OAAA4iB,GAAA,YAAA4H,EAAA5H,EAAA,CAAApgB,EAAAZ,KAAAyE,EAAAqkB,GAAAlpB,QAAAC,QAAAipB,GAAAhpB,KAAA2Q,EAAAoY,EAAA,UAAAsD,EAAAvD,EAAAnY,GAAA,QAAAhM,EAAA,EAAAA,EAAAgM,EAAAzW,OAAAyK,IAAA,KAAAokB,EAAApY,EAAAhM,GAAAokB,EAAA/nB,WAAA+nB,EAAA/nB,aAAA,EAAA+nB,EAAA9nB,cAAA,YAAA8nB,IAAAA,EAAA7nB,UAAA,GAAAC,OAAAC,eAAA0nB,EAAAwD,EAAAvD,EAAAzzB,KAAAyzB,EAAA,WAAAuD,EAAA3nB,GAAA,IAAA7D,EAAA,SAAA6D,EAAAgM,GAAA,aAAA7R,EAAA6F,KAAAA,EAAA,OAAAA,EAAA,IAAAmkB,EAAAnkB,EAAA5F,OAAAwtB,aAAA,YAAAzD,EAAA,KAAAhoB,EAAAgoB,EAAAnnB,KAAAgD,EAAAgM,GAAA,wBAAA7R,EAAAgC,GAAA,OAAAA,EAAA,UAAAsU,UAAA,kEAAAzE,EAAAiO,OAAA4N,QAAA7nB,EAAA,CAAA8nB,CAAA9nB,EAAA,0BAAA7F,EAAAgC,GAAAA,EAAAA,EAAA,oBAAO,IAAPgoB,EAAAnY,EAAAhM,EAAAuc,EAwKKsa,EAxKQC,EAAW,oCA2ZnB,MA3ZL3S,EAAwB,SAAA2S,KAAxB,SAAA5jC,EAAAqpB,GAAA,KAAArpB,aAAAqpB,GAAA,UAAA9L,UAAA,qCAAwB8X,CAAA,KAAAuO,EAAA,EAAxB9qB,EAAwB,KAAxBhM,EAAwB,EAAArP,IAAA,aAAAgJ,MACpB,WAGI+uB,MAEAmN,MAAM,GAADv4B,OAAI0yB,QAAO,iCAAA1yB,OAAgCy5B,SAAW,CACvDf,QAAS,CACL,eAAgB,gBAGnB36B,MAAK,SAAAyU,GAAQ,OAAIA,EAASxF,MAAM,IAChCjP,MAAK,SAAAf,GAOF,OANAouB,MAEIpuB,GACA08B,eAAeC,QAAQ,UAAW38B,GAG/BA,CACX,IAAE,OACK,SAAAmV,GAA6B,GAC5C,GAAC,CAAA9e,IAAA,SAAAgJ,MAED,WAAgB,IAAA8X,EAAA,KAGZiX,MAEAmN,MAAM,GAADv4B,OAAI0yB,QAAO,mCAAA1yB,OAAkCy5B,SAAW,CACzDf,QAAS,CACL,eAAgB,gBAGnB36B,MAAK,SAAAyU,GAAQ,OAAIA,EAASxF,MAAM,IAChCjP,MAAK,SAAAf,GACFouB,MAEApuB,EAAMA,EAAI2I,QAAQ,UAAWmzB,aAAaC,QAAQ,wBAElD5kB,EAAKylB,kBAEL,IAAIC,EAAY,GAAH75B,OAAMhD,EAAG,WAAAgD,OAAU85B,mBAAmB/nC,OAAOoI,SAAS0a,OAEnE9iB,OAAOoI,SAAS0a,KAAOglB,CAC3B,IAAE,OACK,SAAA1nB,GAA6B,GAC5C,GAAC,CAAA9e,IAAA,mBAAAgJ,MAED,SAAwB09B,EAAMN,EAASO,GAAa,IAAAxO,EAAA,KAChDJ,MACA,IAAMuN,EAAU,CACZoB,KAAMA,EACNN,QAASA,GAIPb,EAAiB,CACnB1Q,OAAQ,OACRwQ,QAAS,CACL,eAAgB,oBAEpB5yB,KAAMkM,KAAKC,UAAU0mB,IAIzBJ,MAAM,GAADv4B,OAAI0yB,QAAO,8BAA8BkG,GACzC76B,MAAK,SAAAyU,GAAQ,OAAIA,EAASimB,MAAM,IAChC16B,MAAK,SAAAf,GACFouB,MAEAI,EAAKyO,cAAcj9B,GAEnBjL,OAAOoI,SAAS0a,KAAOmlB,CAC3B,IAAE,OACK,SAAA7nB,GAA6B,GAC5C,GAAC,CAAA9e,IAAA,qBAAAgJ,MAED,SAA0B69B,EAAcT,EAASO,GAAa,IAAAhO,EAAA,KAC1DZ,MACA,IAAMuN,EAAU,CACZuB,aAAcH,KACdN,QAASA,GAIPb,EAAiB,CACnB1Q,OAAQ,OACRwQ,QAAS,CACL,eAAgB,oBAEpB5yB,KAAMkM,KAAKC,UAAU0mB,IAIzBJ,MAAM,GAADv4B,OAAI0yB,QAAO,iCAAiCkG,GAC5C76B,MAAK,SAAAyU,GAAQ,OAAIA,EAASimB,MAAM,IAChC16B,MAAK,SAAAf,GACFouB,MAEAY,EAAKiO,cAAcj9B,GAEnBjL,OAAOoI,SAAS0a,KAAOmlB,CAC3B,IAAE,OACK,SAAA7nB,GAEH6Z,EAAKmO,0BACT,GACR,GAAC,CAAA9mC,IAAA,gBAAAgJ,MAED,SAAqB+9B,GACjBtB,aAAaa,QAAQ,wBAAyBS,EAAOC,cACrDvB,aAAaa,QAAQ,sBAAuBS,EAAOE,UAGnD,IAAMC,EAAS,IAAInmC,KAGnBmmC,EAAOC,WAAWD,EAAOE,aAAeL,EAAOM,YAE/C5B,aAAaa,QAAQ,2BAA4BY,GACjDzB,aAAaa,QAAQ,sBAAuBS,EAAOO,eAInD,IAAM/B,EAAiB,CACnB1Q,OAAQ,MACRwQ,QAAS,CACL,eAAgB,mBAChB,cAAiB,UAAF14B,OAAYo6B,EAAOC,gBAK1C9B,MAAM,GAADv4B,OAAI0yB,QAAO,0CAA0CkG,GACrD76B,MAAK,SAAAyU,GAAQ,OAAIA,EAASimB,MAAM,IAChC16B,MAAK,SAAAf,GACFouB,KACJ,IAAE,OACK,SAAAjZ,GACP,GACR,GAAC,CAAA9e,IAAA,kBAAAgJ,MAED,WACIy8B,aAAa8B,WAAW,yBACxB9B,aAAa8B,WAAW,uBACxB9B,aAAa8B,WAAW,4BACxB9B,aAAa8B,WAAW,uBACxBlB,eAAekB,WAAW,UAC9B,GAAC,CAAAvnC,IAAA,qBAAAgJ,MAED,WACI+uB,MACA,IAAIyN,EAAYC,aAAaC,QAAQ,yBACjCC,EAAiBF,aAAaC,QAAQ,4BAErCF,GAAcG,IACf37B,KAAKu8B,kBACLv8B,KAAK88B,4BAIM/lC,KAAK2a,MAAMiqB,GAChB,IAAI5kC,IAKlB,GAAC,CAAAf,IAAA,qBAAAgJ,OAxKL4iB,EAwKK2H,IAAA0C,MAED,SAAA4B,IAAA,IAAA2N,EAAAG,EAAA6B,EAAA,OAAAjU,IAAAM,MAAA,SAAAiE,GAAA,cAAAA,EAAAxB,KAAAwB,EAAA/sB,MAAA,OAG2E,GAFvEgtB,MACMyN,EAAYC,aAAaC,QAAQ,yBACjCC,EAAiBF,aAAaC,QAAQ,4BAEvCF,GAAcG,GAA+B,QAAbH,GAAyC,QAAlBG,EAAwB,CAAA7N,EAAA/sB,KAAA,QAEhD,OADhCf,KAAKu8B,kBACLv8B,KAAK88B,2BAA2BhP,EAAA3C,OAAA,SACzB3qB,QAAQM,OAAO,sBAAoB,OAIxB,GADhB08B,EAAWzmC,KAAK2a,MAAMiqB,KAChB,IAAI5kC,KAENymC,GAAQ,CAAA1P,EAAA/sB,KAAA,SAEd,OAAA+sB,EAAA/sB,KAAA,GACwBf,KAAK68B,eAAc,QAA5B,GAAA/O,EAAA9C,KACC,CAAF8C,EAAA/sB,KAAA,SAEsB,OADhCf,KAAKu8B,kBACLv8B,KAAK88B,2BAA2BhP,EAAA3C,OAAA,SACzB3qB,QAAQM,OAAO,yBAAuB,eAAAgtB,EAAA3C,OAAA,SAI9C3qB,QAAQC,QAAQ,kBAAgB,yBAAAqtB,EAAArS,OAAA,GAAAoS,EAAA,SA3B1CqO,EAxKL,eAAA72B,EAAA,KAAAmkB,EAAA7uB,UAAA,WAAA6F,SAAA,SAAA6Q,EAAAoY,GAAA,IAAAlxB,EAAAqpB,EAAA5mB,MAAAqK,EAAAmkB,GAAA,SAAAqD,EAAAjL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,OAAAlL,EAAA,UAAAkL,EAAAlL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,QAAAlL,EAAA,CAAAiL,OAAA,OAoMK,WA1B8B,OAAAqP,EAAAlhC,MAAC,KAADL,UAAA,KAAA3E,IAAA,oBAAAgJ,MA4B/B,WACI,OAAO,IAAIwB,SAAQ,SAAUC,EAASK,GAClC,IAAI06B,EAAYC,aAAaC,QAAQ,yBACjCC,EAAiBF,aAAaC,QAAQ,4BAG1C,GAAIF,SAA8D,QAAbA,EACjD,OAAO/6B,EAAQ,MAGnB,GAAIk7B,SAA6E,QAAlBA,EAC3D,OAAOl7B,EAAQ,MAGnB,IAAIu7B,EAAU,CAAC,EACfA,EAAQR,UAAYA,EACpBQ,EAAQL,eAAiBA,EAGzB,IAAI8B,EAAUpB,eAAeX,QAAQ,WAErC,GAAI+B,EACA,IAEI,IAAIC,EAAc/oB,KAAKjD,MAAM+rB,GAQ7B,OAAOh9B,EAAQi9B,EACnB,CACA,MAAAC,GAAQ,CAIZ,IAAMpC,EAAiB,CACnB1Q,OAAQ,MACRwQ,QAAS,CACL,eAAgB,mBAChB,cAAiB,UAAF14B,OAAY64B,KAKnCN,MAAM,GAADv4B,OAAI0yB,QAAO,0BAA0BkG,GACrC76B,MAAK,SAAAyU,GAAQ,OAAIA,EAASimB,MAAM,IAChC16B,MAAK,SAAAf,GAMF,OALAouB,MAGAsO,eAAeC,QAAQ,UAAW3nB,KAAKC,UAAUjV,IAE1Cc,EAAQd,EACnB,IAAE,OACK,SAAAmV,GACH,OAAOhU,EAAOgU,EAClB,GACR,GACJ,GAAC,CAAA9e,IAAA,2BAAAgJ,MAED,WACI,IAAI4+B,EAAUvB,eAAeX,QAAQ,WACrChnC,OAAOoI,SAAS0a,KAAO,GAAH7U,OAAMi7B,EAAO,WAAAj7B,OAAUjO,OAAOoI,SAAS0a,KAC/D,GAAC,CAAAxhB,IAAA,kBAAAgJ,MAED,WAAyB,IAAA6+B,EAAA,KAEN1hC,SAASsoB,iBAAiB,gCAEhC3hB,SAAQ,SAAAjG,GACbkxB,MACAA,MACAA,MACAA,MAGA8P,EAAKC,oBAAoBp9B,MAAK,SAAAs7B,GACV,OAAZA,EAEAn/B,EAAQ0C,iBAAiB,SAAS,WAC9B,IAAIq+B,EAAUvB,eAAeX,QAAQ,WACrChnC,OAAOoI,SAAS0a,KAAO,GAAH7U,OAAMi7B,EAAO,WAAAj7B,OAAUjO,OAAOoI,SAAS0a,KAC/D,IAGAqmB,EAAKE,aAAa/B,EAASn/B,EAEnC,GACJ,GACJ,GAAC,CAAA7G,IAAA,eAAAgJ,MAED,SAAoBg9B,EAASn/B,GAEzB,IAAI0yB,EAAOvvB,KAiEX,GA/DA+tB,MACAA,MACAA,MACAA,MAiCoBlxB,EAAQb,WAEd+yB,UAjCS,8wCAmCdzmB,QAAQ,UAAW0zB,EAAQgC,gBAC3B11B,QAAQ,cAAe0zB,EAAQiC,UAC/B31B,QAAQ,aAAc0zB,EAAQkC,WAGZ/hC,SAAS6yB,eAAe,wBAC9BzvB,iBAAiB,SAAS,SAAUowB,GAErDA,EAAMC,iBACN,IAAMuO,EAAehiC,SAAS6yB,eAAe,oBACjCoP,UAAUC,MAAMC,oBAAoBH,GAC1CI,MACV,IAEyBpiC,SAAS6yB,eAAe,sBAE9BzvB,iBAAiB,SAAS,SAAUowB,GAEnDA,EAAMC,iBAENL,EAAKiP,QACT,IAEIxC,EAAQyC,eAAiBzC,EAAQ0C,iBAAkB,CACnD,IAAMC,EAAkBxiC,SAAS6yB,eAAe,mBAE5CO,EAAOvvB,KAEX2+B,EAAgBp/B,iBAAiB,SAAS,SAAUowB,GAChDA,EAAMC,iBAINL,EAAKqP,WAFW,iEAEW,WAE3B,GACJ,IAG4BziC,SAAS6yB,eAAe,uBAChC/wB,MAAMy3B,QAAU,OACxC,CAEA,GAAIsG,EAAQ6C,aAAc,CAEtB,IAAMC,EAAiB3iC,SAAS6yB,eAAe,kBAE3CO,EAAOvvB,KAEX8+B,EAAev/B,iBAAiB,SAAS,SAAUowB,GAC/CA,EAAMC,iBAINL,EAAKqP,WAFW,gEAEW,WAE3B,GAEJ,IAE2BziC,SAAS6yB,eAAe,sBAChC/wB,MAAMy3B,QAAU,OACvC,CACJ,GAEA,CAAA1/B,IAAA,aAAAgJ,MACA,SAAkB2K,EAAKoJ,GACnB,IAAIgsB,EAAS5iC,SAASC,cAAc,UACpC2iC,EAAO3pC,KAAO,kBACd2pC,EAAOC,IAAMr1B,EACbo1B,EAAO7pB,OAASnC,EAIhB5W,SAAS8iC,KAAKjiC,YAAY+hC,EAC9B,IA3ZJ1tB,GAAA0b,EAAAvD,EAAA3pB,UAAAwR,GAAAhM,GAAA0nB,EAAAvD,EAAAnkB,GAAAxD,OAAAC,eAAA0nB,EAAA,aAAA5nB,UAAA,IAAA4nB,uvBCDO,UAAM0V,EAAa,wCAOrB,QAPqB,SAAAA,iGAAAtR,CAAA,KAAAsR,EAAA,MAAAlpC,IAAA,kBAAAgJ,MACtB,WACI,MAAO,WACX,GAAC,CAAAhJ,IAAA,eAAAgJ,MAED,WACI,MAAO,mBACX,OAPsB,mkCCC1BuqB,EAAA,kBAAAC,CAAA,MAAAnkB,EAAAmkB,EAAA,GAAAnY,EAAAxP,OAAAhC,UAAA+hB,EAAAvQ,EAAA9b,eAAAk0B,EAAA5nB,OAAAC,gBAAA,SAAAuD,EAAAmkB,EAAAnY,GAAAhM,EAAAmkB,GAAAnY,EAAArS,KAAA,EAAAwC,EAAA,mBAAA/B,OAAAA,OAAA,GAAAlH,EAAAiJ,EAAA9B,UAAA,aAAAuR,EAAAzP,EAAAL,eAAA,kBAAAuoB,EAAAloB,EAAAmoB,aAAA,yBAAAC,EAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAxP,OAAAC,eAAAuD,EAAAmkB,EAAA,CAAAxqB,MAAAqS,EAAA3P,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAAyD,EAAAmkB,EAAA,KAAAI,EAAA,aAAAvkB,GAAAukB,EAAA,SAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAhM,EAAAmkB,GAAAnY,CAAA,WAAAwY,EAAAxkB,EAAAmkB,EAAAnY,EAAAuQ,GAAA,IAAApgB,EAAAgoB,GAAAA,EAAA3pB,qBAAAiqB,EAAAN,EAAAM,EAAAvxB,EAAAsJ,OAAA6O,OAAAlP,EAAA3B,WAAAoR,EAAA,IAAA8Y,EAAAnI,GAAA,WAAA6H,EAAAlxB,EAAA,WAAAyG,MAAAgrB,EAAA3kB,EAAAgM,EAAAJ,KAAA1Y,CAAA,UAAA0xB,EAAA5kB,EAAAmkB,EAAAnY,GAAA,WAAAjc,KAAA,SAAAkL,IAAA+E,EAAAhD,KAAAmnB,EAAAnY,GAAA,OAAAhM,GAAA,OAAAjQ,KAAA,QAAAkL,IAAA+E,EAAA,EAAAmkB,EAAAK,KAAAA,EAAA,IAAAnQ,EAAA,iBAAAzV,EAAA,iBAAAyI,EAAA,YAAAhC,EAAA,YAAA4O,EAAA,YAAAwQ,IAAA,UAAAI,IAAA,UAAAC,IAAA,KAAAvhB,EAAA,GAAAghB,EAAAhhB,EAAArQ,GAAA,8BAAAkhB,EAAA5X,OAAAuoB,eAAA5vB,EAAAif,GAAAA,EAAAA,EAAA4Q,EAAA,MAAA7vB,GAAAA,IAAA6W,GAAAuQ,EAAAvf,KAAA7H,EAAAjC,KAAAqQ,EAAApO,GAAA,IAAA8vB,EAAAH,EAAAtqB,UAAAiqB,EAAAjqB,UAAAgC,OAAA6O,OAAA9H,GAAA,SAAA2hB,EAAAllB,GAAA,0BAAAvC,SAAA,SAAA0mB,GAAAI,EAAAvkB,EAAAmkB,GAAA,SAAAnkB,GAAA,YAAArE,QAAAwoB,EAAAnkB,EAAA,gBAAAmlB,EAAAnlB,EAAAmkB,GAAA,SAAAiB,EAAApZ,EAAAoY,EAAAjoB,EAAAjJ,GAAA,IAAA0Y,EAAAgZ,EAAA5kB,EAAAgM,GAAAhM,EAAAokB,GAAA,aAAAxY,EAAA7b,KAAA,KAAAs0B,EAAAzY,EAAA3Q,IAAAoZ,EAAAgQ,EAAA1qB,MAAA,OAAA0a,GAAA,UAAAla,EAAAka,IAAAkI,EAAAvf,KAAAqX,EAAA,WAAA8P,EAAA/oB,QAAAiZ,EAAAgR,SAAAhqB,MAAA,SAAA2E,GAAAolB,EAAA,OAAAplB,EAAA7D,EAAAjJ,EAAA,aAAA8M,GAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAixB,EAAA/oB,QAAAiZ,GAAAhZ,MAAA,SAAA2E,GAAAqkB,EAAA1qB,MAAAqG,EAAA7D,EAAAkoB,EAAA,aAAArkB,GAAA,OAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAA,EAAA0Y,EAAA3Q,IAAA,KAAA+Q,EAAAoY,EAAA,gBAAAzqB,MAAA,SAAAqG,EAAAuc,GAAA,SAAA+I,IAAA,WAAAnB,GAAA,SAAAA,EAAAnY,GAAAoZ,EAAAplB,EAAAuc,EAAA4H,EAAAnY,EAAA,WAAAA,EAAAA,EAAAA,EAAA3Q,KAAAiqB,EAAAA,GAAAA,GAAA,aAAAX,EAAAR,EAAAnY,EAAAuQ,GAAA,IAAA6H,EAAA/P,EAAA,gBAAAlY,EAAAjJ,GAAA,GAAAkxB,IAAA/c,EAAA,MAAAke,MAAA,mCAAAnB,IAAA/e,EAAA,cAAAlJ,EAAA,MAAAjJ,EAAA,OAAAyG,MAAAqG,EAAAzE,MAAA,OAAAghB,EAAAiJ,OAAArpB,EAAAogB,EAAAthB,IAAA/H,IAAA,KAAA0Y,EAAA2Q,EAAAkJ,SAAA,GAAA7Z,EAAA,KAAAyY,EAAAqB,EAAA9Z,EAAA2Q,GAAA,GAAA8H,EAAA,IAAAA,IAAApQ,EAAA,gBAAAoQ,CAAA,cAAA9H,EAAAiJ,OAAAjJ,EAAAoJ,KAAApJ,EAAAqJ,MAAArJ,EAAAthB,SAAA,aAAAshB,EAAAiJ,OAAA,IAAApB,IAAA/P,EAAA,MAAA+P,EAAA/e,EAAAkX,EAAAthB,IAAAshB,EAAAsJ,kBAAAtJ,EAAAthB,IAAA,gBAAAshB,EAAAiJ,QAAAjJ,EAAAuJ,OAAA,SAAAvJ,EAAAthB,KAAAmpB,EAAA/c,EAAA,IAAA9D,EAAAqhB,EAAAT,EAAAnY,EAAAuQ,GAAA,cAAAhZ,EAAAxT,KAAA,IAAAq0B,EAAA7H,EAAAhhB,KAAA8J,EAAAzG,EAAA2E,EAAAtI,MAAAgZ,EAAA,gBAAAta,MAAA4J,EAAAtI,IAAAM,KAAAghB,EAAAhhB,KAAA,WAAAgI,EAAAxT,OAAAq0B,EAAA/e,EAAAkX,EAAAiJ,OAAA,QAAAjJ,EAAAthB,IAAAsI,EAAAtI,IAAA,YAAAyqB,EAAAvB,EAAAnY,GAAA,IAAAuQ,EAAAvQ,EAAAwZ,OAAApB,EAAAD,EAAA9pB,SAAAkiB,GAAA,GAAA6H,IAAApkB,EAAA,OAAAgM,EAAAyZ,SAAA,eAAAlJ,GAAA4H,EAAA9pB,SAAA,SAAA2R,EAAAwZ,OAAA,SAAAxZ,EAAA/Q,IAAA+E,EAAA0lB,EAAAvB,EAAAnY,GAAA,UAAAA,EAAAwZ,SAAA,WAAAjJ,IAAAvQ,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAA8L,EAAA,aAAAtI,EAAA,IAAA9X,EAAAyoB,EAAAR,EAAAD,EAAA9pB,SAAA2R,EAAA/Q,KAAA,aAAAkB,EAAApM,KAAA,OAAAic,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAAkB,EAAAlB,IAAA+Q,EAAAyZ,SAAA,KAAAxR,EAAA,IAAA/gB,EAAAiJ,EAAAlB,IAAA,OAAA/H,EAAAA,EAAAqI,MAAAyQ,EAAAmY,EAAA4B,YAAA7yB,EAAAyG,MAAAqS,EAAAtQ,KAAAyoB,EAAA6B,QAAA,WAAAha,EAAAwZ,SAAAxZ,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,GAAAgM,EAAAyZ,SAAA,KAAAxR,GAAA/gB,GAAA8Y,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAAzE,EAAAyZ,SAAA,KAAAxR,EAAA,UAAAgS,EAAAjmB,GAAA,IAAAmkB,EAAA,CAAA+B,OAAAlmB,EAAA,SAAAA,IAAAmkB,EAAAgC,SAAAnmB,EAAA,SAAAA,IAAAmkB,EAAAiC,WAAApmB,EAAA,GAAAmkB,EAAAkC,SAAArmB,EAAA,SAAAsmB,WAAApmB,KAAAikB,EAAA,UAAAoC,EAAAvmB,GAAA,IAAAmkB,EAAAnkB,EAAAwmB,YAAA,GAAArC,EAAAp0B,KAAA,gBAAAo0B,EAAAlpB,IAAA+E,EAAAwmB,WAAArC,CAAA,UAAAO,EAAA1kB,GAAA,KAAAsmB,WAAA,EAAAJ,OAAA,SAAAlmB,EAAAvC,QAAAwoB,EAAA,WAAAnsB,OAAA,YAAAkrB,EAAAb,GAAA,GAAAA,GAAA,KAAAA,EAAA,KAAAnY,EAAAmY,EAAAjxB,GAAA,GAAA8Y,EAAA,OAAAA,EAAAhP,KAAAmnB,GAAA,sBAAAA,EAAAzoB,KAAA,OAAAyoB,EAAA,IAAAsC,MAAAtC,EAAA5uB,QAAA,KAAA6uB,GAAA,EAAAjoB,EAAA,SAAAT,IAAA,OAAA0oB,EAAAD,EAAA5uB,QAAA,GAAAgnB,EAAAvf,KAAAmnB,EAAAC,GAAA,OAAA1oB,EAAA/B,MAAAwqB,EAAAC,GAAA1oB,EAAAH,MAAA,EAAAG,EAAA,OAAAA,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,SAAAS,EAAAT,KAAAS,CAAA,YAAAsU,UAAAtW,EAAAgqB,GAAA,2BAAAU,EAAArqB,UAAAsqB,EAAAV,EAAAa,EAAA,eAAAtrB,MAAAmrB,EAAAxoB,cAAA,IAAA8nB,EAAAU,EAAA,eAAAnrB,MAAAkrB,EAAAvoB,cAAA,IAAAuoB,EAAA6B,YAAAnC,EAAAO,EAAAT,EAAA,qBAAAF,EAAAwC,oBAAA,SAAA3mB,GAAA,IAAAmkB,EAAA,mBAAAnkB,GAAAA,EAAAzF,YAAA,QAAA4pB,IAAAA,IAAAU,GAAA,uBAAAV,EAAAuC,aAAAvC,EAAAl0B,MAAA,EAAAk0B,EAAAyC,KAAA,SAAA5mB,GAAA,OAAAxD,OAAAqqB,eAAArqB,OAAAqqB,eAAA7mB,EAAA8kB,IAAA9kB,EAAA8mB,UAAAhC,EAAAP,EAAAvkB,EAAAqkB,EAAA,sBAAArkB,EAAAxF,UAAAgC,OAAA6O,OAAA4Z,GAAAjlB,CAAA,EAAAmkB,EAAA4C,MAAA,SAAA/mB,GAAA,OAAAqlB,QAAArlB,EAAA,EAAAklB,EAAAC,EAAA3qB,WAAA+pB,EAAAY,EAAA3qB,UAAAoR,GAAA,0BAAAuY,EAAAgB,cAAAA,EAAAhB,EAAA6C,MAAA,SAAAhnB,EAAAgM,EAAAuQ,EAAA6H,EAAAjoB,QAAA,IAAAA,IAAAA,EAAAhB,SAAA,IAAAjI,EAAA,IAAAiyB,EAAAX,EAAAxkB,EAAAgM,EAAAuQ,EAAA6H,GAAAjoB,GAAA,OAAAgoB,EAAAwC,oBAAA3a,GAAA9Y,EAAAA,EAAAwI,OAAAL,MAAA,SAAA2E,GAAA,OAAAA,EAAAzE,KAAAyE,EAAArG,MAAAzG,EAAAwI,MAAA,KAAAwpB,EAAAD,GAAAV,EAAAU,EAAAZ,EAAA,aAAAE,EAAAU,EAAA/xB,GAAA,0BAAAqxB,EAAAU,EAAA,qDAAAd,EAAA7T,KAAA,SAAAtQ,GAAA,IAAAmkB,EAAA3nB,OAAAwD,GAAAgM,EAAA,WAAAuQ,KAAA4H,EAAAnY,EAAA9L,KAAAqc,GAAA,OAAAvQ,EAAAzO,UAAA,SAAA7B,IAAA,KAAAsQ,EAAAzW,QAAA,KAAAyK,EAAAgM,EAAAlO,MAAA,GAAAkC,KAAAmkB,EAAA,OAAAzoB,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,QAAAA,EAAAH,MAAA,EAAAG,CAAA,GAAAyoB,EAAAa,OAAAA,EAAAN,EAAAlqB,UAAA,CAAAD,YAAAmqB,EAAA5qB,MAAA,SAAAqqB,GAAA,QAAA8C,KAAA,OAAAvrB,KAAA,OAAAiqB,KAAA,KAAAC,MAAA5lB,EAAA,KAAAzE,MAAA,OAAAkqB,SAAA,UAAAD,OAAA,YAAAvqB,IAAA+E,EAAA,KAAAsmB,WAAA7oB,QAAA8oB,IAAApC,EAAA,QAAAnY,KAAA,WAAAA,EAAAnb,OAAA,IAAA0rB,EAAAvf,KAAA,KAAAgP,KAAAya,OAAAza,EAAAxJ,MAAA,WAAAwJ,GAAAhM,EAAA,EAAAoW,KAAA,gBAAA7a,MAAA,MAAAyE,EAAA,KAAAsmB,WAAA,GAAAE,WAAA,aAAAxmB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,YAAAisB,IAAA,EAAArB,kBAAA,SAAA1B,GAAA,QAAA5oB,KAAA,MAAA4oB,EAAA,IAAAnY,EAAA,cAAAmb,EAAA5K,EAAA6H,GAAA,OAAAlxB,EAAAnD,KAAA,QAAAmD,EAAA+H,IAAAkpB,EAAAnY,EAAAtQ,KAAA6gB,EAAA6H,IAAApY,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,KAAAokB,CAAA,SAAAA,EAAA,KAAAkC,WAAA/wB,OAAA,EAAA6uB,GAAA,IAAAA,EAAA,KAAAjoB,EAAA,KAAAmqB,WAAAlC,GAAAlxB,EAAAiJ,EAAAqqB,WAAA,YAAArqB,EAAA+pB,OAAA,OAAAiB,EAAA,UAAAhrB,EAAA+pB,QAAA,KAAAe,KAAA,KAAArb,EAAA2Q,EAAAvf,KAAAb,EAAA,YAAAkoB,EAAA9H,EAAAvf,KAAAb,EAAA,iBAAAyP,GAAAyY,EAAA,SAAA4C,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,WAAAc,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,SAAAxa,GAAA,QAAAqb,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,YAAA9B,EAAA,MAAAkB,MAAA,kDAAA0B,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,KAAAN,OAAA,SAAA9lB,EAAAmkB,GAAA,QAAAnY,EAAA,KAAAsa,WAAA/wB,OAAA,EAAAyW,GAAA,IAAAA,EAAA,KAAAoY,EAAA,KAAAkC,WAAAta,GAAA,GAAAoY,EAAA8B,QAAA,KAAAe,MAAA1K,EAAAvf,KAAAonB,EAAA,oBAAA6C,KAAA7C,EAAAgC,WAAA,KAAAjqB,EAAAioB,EAAA,OAAAjoB,IAAA,UAAA6D,GAAA,aAAAA,IAAA7D,EAAA+pB,QAAA/B,GAAAA,GAAAhoB,EAAAiqB,aAAAjqB,EAAA,UAAAjJ,EAAAiJ,EAAAA,EAAAqqB,WAAA,UAAAtzB,EAAAnD,KAAAiQ,EAAA9M,EAAA+H,IAAAkpB,EAAAhoB,GAAA,KAAAqpB,OAAA,YAAA9pB,KAAAS,EAAAiqB,WAAAnS,GAAA,KAAAvO,SAAAxS,EAAA,EAAAwS,SAAA,SAAA1F,EAAAmkB,GAAA,aAAAnkB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,gBAAA+E,EAAAjQ,MAAA,aAAAiQ,EAAAjQ,KAAA,KAAA2L,KAAAsE,EAAA/E,IAAA,WAAA+E,EAAAjQ,MAAA,KAAAm3B,KAAA,KAAAjsB,IAAA+E,EAAA/E,IAAA,KAAAuqB,OAAA,cAAA9pB,KAAA,kBAAAsE,EAAAjQ,MAAAo0B,IAAA,KAAAzoB,KAAAyoB,GAAAlQ,CAAA,EAAAmT,OAAA,SAAApnB,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAoa,aAAApmB,EAAA,YAAA0F,SAAAsG,EAAAwa,WAAAxa,EAAAqa,UAAAE,EAAAva,GAAAiI,CAAA,kBAAAjU,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAka,SAAAlmB,EAAA,KAAAuc,EAAAvQ,EAAAwa,WAAA,aAAAjK,EAAAxsB,KAAA,KAAAq0B,EAAA7H,EAAAthB,IAAAsrB,EAAAva,EAAA,QAAAoY,CAAA,QAAAmB,MAAA,0BAAA8B,cAAA,SAAAlD,EAAAnY,EAAAuQ,GAAA,YAAAkJ,SAAA,CAAAprB,SAAA2qB,EAAAb,GAAA4B,WAAA/Z,EAAAga,QAAAzJ,GAAA,cAAAiJ,SAAA,KAAAvqB,IAAA+E,GAAAiU,CAAA,GAAAkQ,CAAA,UAAAmD,EAAA/K,EAAAvc,EAAAmkB,EAAAnY,EAAAoY,EAAAlxB,EAAA0Y,GAAA,QAAAzP,EAAAogB,EAAArpB,GAAA0Y,GAAAyY,EAAAloB,EAAAxC,KAAA,OAAA4iB,GAAA,YAAA4H,EAAA5H,EAAA,CAAApgB,EAAAZ,KAAAyE,EAAAqkB,GAAAlpB,QAAAC,QAAAipB,GAAAhpB,KAAA2Q,EAAAoY,EAAA,UAAAmD,EAAAhL,GAAA,sBAAAvc,EAAA,KAAAmkB,EAAA7uB,UAAA,WAAA6F,SAAA,SAAA6Q,EAAAoY,GAAA,IAAAlxB,EAAAqpB,EAAA5mB,MAAAqK,EAAAmkB,GAAA,SAAAqD,EAAAjL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,OAAAlL,EAAA,UAAAkL,EAAAlL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,QAAAlL,EAAA,CAAAiL,OAAA,gBAAAE,EAAAvD,EAAAnY,GAAA,QAAAhM,EAAA,EAAAA,EAAAgM,EAAAzW,OAAAyK,IAAA,KAAAokB,EAAApY,EAAAhM,GAAAokB,EAAA/nB,WAAA+nB,EAAA/nB,aAAA,EAAA+nB,EAAA9nB,cAAA,YAAA8nB,IAAAA,EAAA7nB,UAAA,GAAAC,OAAAC,eAAA0nB,EAAAwD,EAAAvD,EAAAzzB,KAAAyzB,EAAA,WAAAuD,EAAA3nB,GAAA,IAAA7D,EAAA,SAAA6D,EAAAgM,GAAA,aAAA7R,EAAA6F,KAAAA,EAAA,OAAAA,EAAA,IAAAmkB,EAAAnkB,EAAA5F,OAAAwtB,aAAA,YAAAzD,EAAA,KAAAhoB,EAAAgoB,EAAAnnB,KAAAgD,EAAAgM,GAAA,wBAAA7R,EAAAgC,GAAA,OAAAA,EAAA,UAAAsU,UAAA,kEAAAzE,EAAAiO,OAAA4N,QAAA7nB,EAAA,CAAA8nB,CAAA9nB,EAAA,0BAAA7F,EAAAgC,GAAAA,EAAAA,EAAA,GACO,IADPgoB,EAAAnY,EAAAhM,EAEqB85B,EADGC,EAAXC,EAAW,wCA0EnB,MA3EL7V,EACwB,SAAA6V,KADxB,SAAA9mC,EAAAqpB,GAAA,KAAArpB,aAAAqpB,GAAA,UAAA9L,UAAA,qCACwB8X,CAAA,KAAAyR,EAAA,EADxBhuB,EACwB,KADxBhM,EACwB,EAAArP,IAAA,OAAAgJ,OAAAogC,EAAAxS,EAAArD,IAAA0C,MACpB,SAAA4B,EAAkByR,EAAWC,GAAe,IAAAC,EAAA,OAAAjW,IAAAM,MAAA,SAAAiE,GAAA,cAAAA,EAAAxB,KAAAwB,EAAA/sB,MAAA,cAAA+sB,EAAA/sB,KAAA,EACvBf,KAAKy/B,mBAAmBF,GAAgB,OAAjD,OAAJC,EAAI1R,EAAA9C,KAAA8C,EAAA/sB,KAAG,EACEf,KAAK0/B,SAASJ,EAAWE,GAAK,cAAA1R,EAAA3C,OAAA,SAAA2C,EAAA9C,MAAA,wBAAA8C,EAAArS,OAAA,GAAAoS,EAAA,UAC9C,SAHgBuB,EAAAC,GAAA,OAAA+P,EAAApkC,MAAC,KAADL,UAAA,KAAA3E,IAAA,WAAAgJ,OAAAmgC,EAAAvS,EAAArD,IAAA0C,MAKjB,SAAAiC,EAAsBoR,EAAWK,GAAQ,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAzW,IAAAM,MAAA,SAAAuE,GAAA,cAAAA,EAAA9B,KAAA8B,EAAArtB,MAAA,cAAAqtB,EAAA9B,KAAA,EAAA8B,EAAArtB,KAAA,EAGJm6B,MAAM,oCAADv4B,OAAqCg9B,EAAQ,YAAAh9B,OAAWs9B,QAAQ,OAA9E,IAAdL,EAAcxR,EAAApD,MACAmQ,GAAI,CAAF/M,EAAArtB,KAAA,cACZ,IAAI6pB,MAAM,mDAADjoB,OAAoDi9B,EAAevqB,SAAS,cAAA+Y,EAAArtB,KAAA,EAEtE6+B,EAAexE,OAAM,OAA9B,GAAVyE,EAAUzR,EAAApD,KAIgB,WAA5BsU,EAAUnpC,cAA0B,CAAAi4B,EAAArtB,KAAA,SAEpC++B,EAAUI,EAAA,GAAQL,GAAazR,EAAArtB,KAAA,wBAAAqtB,EAAArtB,KAAA,GAGCm6B,MAAM,6BAADv4B,OAA8B28B,EAAS,KAAA38B,OAAIg9B,EAAQ,YAAAh9B,OAAWs9B,QAAQ,QAApF,IAAjBF,EAAiB3R,EAAApD,MACAmQ,GAAI,CAAF/M,EAAArtB,KAAA,eACf,IAAI6pB,MAAM,sDAADjoB,OAAuDo9B,EAAkB1qB,SAAS,eAAA+Y,EAAArtB,KAAA,GAEzEg/B,EAAkB3E,OAAM,QAA9C4E,EAAa5R,EAAApD,KAEnB8U,EAAUI,EAAAA,EAAA,GAAQL,GAAeG,GAAgB,QAGtB,OAA/BF,EAAWH,SAAWA,EAASvR,EAAAjD,OAAA,SACxB2U,GAAU,QAEc,MAFd1R,EAAA9B,KAAA,GAAA8B,EAAAwC,GAAAxC,EAAA,SAEcA,EAAAwC,GAAA,yBAAAxC,EAAA3S,OAAA,GAAAyS,EAAA,mBAGtC,SA/BoB4C,EAAAM,GAAA,OAAA+N,EAAAnkC,MAAC,KAADL,UAAA,KAAA3E,IAAA,qBAAAgJ,MAiCrB,SAA0BugC,GAEtB,IAAMY,EAAYjR,EAAAA,EAAKkR,cAAc,QACrC,GAAID,EAGA,OADAjR,EAAAA,EAAKmR,yBAAyB,kBAAmBF,EAAUj4B,UAAU,EAAG,IACjEi4B,EAAUj4B,UAAU,EAAG,GAIlC,GAAIq3B,EAGA,OADArQ,EAAAA,EAAKmR,yBAAyB,kBAAmBd,GAC1CA,EAIX,GAAIrQ,EAAAA,EAAKoR,wBAAwB,mBAAoB,CACjD,IAAIC,EAAerR,EAAAA,EAAKsR,wBAAwB,mBAEhD,MAAwC,SAApCD,EAAaE,oBACN,KAEJF,CACX,CAGA,IAAMG,EAAcC,UAAUhB,UAAYgB,UAAUC,aACpD,OAAIF,EAEOA,EAAYx4B,UAAU,EAAG,GAI7B,IACX,IA3EJmJ,GAAA0b,EAAAvD,EAAA3pB,UAAAwR,GAAAhM,GAAA0nB,EAAAvD,EAAAnkB,GAAAxD,OAAAC,eAAA0nB,EAAA,aAAA5nB,UAAA,IAAA4nB,mRCAAD,EAAA,kBAAAC,CAAA,MAAAnkB,EAAAmkB,EAAA,GAAAnY,EAAAxP,OAAAhC,UAAA+hB,EAAAvQ,EAAA9b,eAAAk0B,EAAA5nB,OAAAC,gBAAA,SAAAuD,EAAAmkB,EAAAnY,GAAAhM,EAAAmkB,GAAAnY,EAAArS,KAAA,EAAAwC,EAAA,mBAAA/B,OAAAA,OAAA,GAAAlH,EAAAiJ,EAAA9B,UAAA,aAAAuR,EAAAzP,EAAAL,eAAA,kBAAAuoB,EAAAloB,EAAAmoB,aAAA,yBAAAC,EAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAxP,OAAAC,eAAAuD,EAAAmkB,EAAA,CAAAxqB,MAAAqS,EAAA3P,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAAyD,EAAAmkB,EAAA,KAAAI,EAAA,aAAAvkB,GAAAukB,EAAA,SAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAhM,EAAAmkB,GAAAnY,CAAA,WAAAwY,EAAAxkB,EAAAmkB,EAAAnY,EAAAuQ,GAAA,IAAApgB,EAAAgoB,GAAAA,EAAA3pB,qBAAAiqB,EAAAN,EAAAM,EAAAvxB,EAAAsJ,OAAA6O,OAAAlP,EAAA3B,WAAAoR,EAAA,IAAA8Y,EAAAnI,GAAA,WAAA6H,EAAAlxB,EAAA,WAAAyG,MAAAgrB,EAAA3kB,EAAAgM,EAAAJ,KAAA1Y,CAAA,UAAA0xB,EAAA5kB,EAAAmkB,EAAAnY,GAAA,WAAAjc,KAAA,SAAAkL,IAAA+E,EAAAhD,KAAAmnB,EAAAnY,GAAA,OAAAhM,GAAA,OAAAjQ,KAAA,QAAAkL,IAAA+E,EAAA,EAAAmkB,EAAAK,KAAAA,EAAA,IAAAnQ,EAAA,iBAAAzV,EAAA,iBAAAyI,EAAA,YAAAhC,EAAA,YAAA4O,EAAA,YAAAwQ,IAAA,UAAAI,IAAA,UAAAC,IAAA,KAAAvhB,EAAA,GAAAghB,EAAAhhB,EAAArQ,GAAA,8BAAAkhB,EAAA5X,OAAAuoB,eAAA5vB,EAAAif,GAAAA,EAAAA,EAAA4Q,EAAA,MAAA7vB,GAAAA,IAAA6W,GAAAuQ,EAAAvf,KAAA7H,EAAAjC,KAAAqQ,EAAApO,GAAA,IAAA8vB,EAAAH,EAAAtqB,UAAAiqB,EAAAjqB,UAAAgC,OAAA6O,OAAA9H,GAAA,SAAA2hB,EAAAllB,GAAA,0BAAAvC,SAAA,SAAA0mB,GAAAI,EAAAvkB,EAAAmkB,GAAA,SAAAnkB,GAAA,YAAArE,QAAAwoB,EAAAnkB,EAAA,gBAAAmlB,EAAAnlB,EAAAmkB,GAAA,SAAAiB,EAAApZ,EAAAoY,EAAAjoB,EAAAjJ,GAAA,IAAA0Y,EAAAgZ,EAAA5kB,EAAAgM,GAAAhM,EAAAokB,GAAA,aAAAxY,EAAA7b,KAAA,KAAAs0B,EAAAzY,EAAA3Q,IAAAoZ,EAAAgQ,EAAA1qB,MAAA,OAAA0a,GAAA,UAAAla,EAAAka,IAAAkI,EAAAvf,KAAAqX,EAAA,WAAA8P,EAAA/oB,QAAAiZ,EAAAgR,SAAAhqB,MAAA,SAAA2E,GAAAolB,EAAA,OAAAplB,EAAA7D,EAAAjJ,EAAA,aAAA8M,GAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAixB,EAAA/oB,QAAAiZ,GAAAhZ,MAAA,SAAA2E,GAAAqkB,EAAA1qB,MAAAqG,EAAA7D,EAAAkoB,EAAA,aAAArkB,GAAA,OAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAA,EAAA0Y,EAAA3Q,IAAA,KAAA+Q,EAAAoY,EAAA,gBAAAzqB,MAAA,SAAAqG,EAAAuc,GAAA,SAAA+I,IAAA,WAAAnB,GAAA,SAAAA,EAAAnY,GAAAoZ,EAAAplB,EAAAuc,EAAA4H,EAAAnY,EAAA,WAAAA,EAAAA,EAAAA,EAAA3Q,KAAAiqB,EAAAA,GAAAA,GAAA,aAAAX,EAAAR,EAAAnY,EAAAuQ,GAAA,IAAA6H,EAAA/P,EAAA,gBAAAlY,EAAAjJ,GAAA,GAAAkxB,IAAA/c,EAAA,MAAAke,MAAA,mCAAAnB,IAAA/e,EAAA,cAAAlJ,EAAA,MAAAjJ,EAAA,OAAAyG,MAAAqG,EAAAzE,MAAA,OAAAghB,EAAAiJ,OAAArpB,EAAAogB,EAAAthB,IAAA/H,IAAA,KAAA0Y,EAAA2Q,EAAAkJ,SAAA,GAAA7Z,EAAA,KAAAyY,EAAAqB,EAAA9Z,EAAA2Q,GAAA,GAAA8H,EAAA,IAAAA,IAAApQ,EAAA,gBAAAoQ,CAAA,cAAA9H,EAAAiJ,OAAAjJ,EAAAoJ,KAAApJ,EAAAqJ,MAAArJ,EAAAthB,SAAA,aAAAshB,EAAAiJ,OAAA,IAAApB,IAAA/P,EAAA,MAAA+P,EAAA/e,EAAAkX,EAAAthB,IAAAshB,EAAAsJ,kBAAAtJ,EAAAthB,IAAA,gBAAAshB,EAAAiJ,QAAAjJ,EAAAuJ,OAAA,SAAAvJ,EAAAthB,KAAAmpB,EAAA/c,EAAA,IAAA9D,EAAAqhB,EAAAT,EAAAnY,EAAAuQ,GAAA,cAAAhZ,EAAAxT,KAAA,IAAAq0B,EAAA7H,EAAAhhB,KAAA8J,EAAAzG,EAAA2E,EAAAtI,MAAAgZ,EAAA,gBAAAta,MAAA4J,EAAAtI,IAAAM,KAAAghB,EAAAhhB,KAAA,WAAAgI,EAAAxT,OAAAq0B,EAAA/e,EAAAkX,EAAAiJ,OAAA,QAAAjJ,EAAAthB,IAAAsI,EAAAtI,IAAA,YAAAyqB,EAAAvB,EAAAnY,GAAA,IAAAuQ,EAAAvQ,EAAAwZ,OAAApB,EAAAD,EAAA9pB,SAAAkiB,GAAA,GAAA6H,IAAApkB,EAAA,OAAAgM,EAAAyZ,SAAA,eAAAlJ,GAAA4H,EAAA9pB,SAAA,SAAA2R,EAAAwZ,OAAA,SAAAxZ,EAAA/Q,IAAA+E,EAAA0lB,EAAAvB,EAAAnY,GAAA,UAAAA,EAAAwZ,SAAA,WAAAjJ,IAAAvQ,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAA8L,EAAA,aAAAtI,EAAA,IAAA9X,EAAAyoB,EAAAR,EAAAD,EAAA9pB,SAAA2R,EAAA/Q,KAAA,aAAAkB,EAAApM,KAAA,OAAAic,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAAkB,EAAAlB,IAAA+Q,EAAAyZ,SAAA,KAAAxR,EAAA,IAAA/gB,EAAAiJ,EAAAlB,IAAA,OAAA/H,EAAAA,EAAAqI,MAAAyQ,EAAAmY,EAAA4B,YAAA7yB,EAAAyG,MAAAqS,EAAAtQ,KAAAyoB,EAAA6B,QAAA,WAAAha,EAAAwZ,SAAAxZ,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,GAAAgM,EAAAyZ,SAAA,KAAAxR,GAAA/gB,GAAA8Y,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAAzE,EAAAyZ,SAAA,KAAAxR,EAAA,UAAAgS,EAAAjmB,GAAA,IAAAmkB,EAAA,CAAA+B,OAAAlmB,EAAA,SAAAA,IAAAmkB,EAAAgC,SAAAnmB,EAAA,SAAAA,IAAAmkB,EAAAiC,WAAApmB,EAAA,GAAAmkB,EAAAkC,SAAArmB,EAAA,SAAAsmB,WAAApmB,KAAAikB,EAAA,UAAAoC,EAAAvmB,GAAA,IAAAmkB,EAAAnkB,EAAAwmB,YAAA,GAAArC,EAAAp0B,KAAA,gBAAAo0B,EAAAlpB,IAAA+E,EAAAwmB,WAAArC,CAAA,UAAAO,EAAA1kB,GAAA,KAAAsmB,WAAA,EAAAJ,OAAA,SAAAlmB,EAAAvC,QAAAwoB,EAAA,WAAAnsB,OAAA,YAAAkrB,EAAAb,GAAA,GAAAA,GAAA,KAAAA,EAAA,KAAAnY,EAAAmY,EAAAjxB,GAAA,GAAA8Y,EAAA,OAAAA,EAAAhP,KAAAmnB,GAAA,sBAAAA,EAAAzoB,KAAA,OAAAyoB,EAAA,IAAAsC,MAAAtC,EAAA5uB,QAAA,KAAA6uB,GAAA,EAAAjoB,EAAA,SAAAT,IAAA,OAAA0oB,EAAAD,EAAA5uB,QAAA,GAAAgnB,EAAAvf,KAAAmnB,EAAAC,GAAA,OAAA1oB,EAAA/B,MAAAwqB,EAAAC,GAAA1oB,EAAAH,MAAA,EAAAG,EAAA,OAAAA,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,SAAAS,EAAAT,KAAAS,CAAA,YAAAsU,UAAAtW,EAAAgqB,GAAA,2BAAAU,EAAArqB,UAAAsqB,EAAAV,EAAAa,EAAA,eAAAtrB,MAAAmrB,EAAAxoB,cAAA,IAAA8nB,EAAAU,EAAA,eAAAnrB,MAAAkrB,EAAAvoB,cAAA,IAAAuoB,EAAA6B,YAAAnC,EAAAO,EAAAT,EAAA,qBAAAF,EAAAwC,oBAAA,SAAA3mB,GAAA,IAAAmkB,EAAA,mBAAAnkB,GAAAA,EAAAzF,YAAA,QAAA4pB,IAAAA,IAAAU,GAAA,uBAAAV,EAAAuC,aAAAvC,EAAAl0B,MAAA,EAAAk0B,EAAAyC,KAAA,SAAA5mB,GAAA,OAAAxD,OAAAqqB,eAAArqB,OAAAqqB,eAAA7mB,EAAA8kB,IAAA9kB,EAAA8mB,UAAAhC,EAAAP,EAAAvkB,EAAAqkB,EAAA,sBAAArkB,EAAAxF,UAAAgC,OAAA6O,OAAA4Z,GAAAjlB,CAAA,EAAAmkB,EAAA4C,MAAA,SAAA/mB,GAAA,OAAAqlB,QAAArlB,EAAA,EAAAklB,EAAAC,EAAA3qB,WAAA+pB,EAAAY,EAAA3qB,UAAAoR,GAAA,0BAAAuY,EAAAgB,cAAAA,EAAAhB,EAAA6C,MAAA,SAAAhnB,EAAAgM,EAAAuQ,EAAA6H,EAAAjoB,QAAA,IAAAA,IAAAA,EAAAhB,SAAA,IAAAjI,EAAA,IAAAiyB,EAAAX,EAAAxkB,EAAAgM,EAAAuQ,EAAA6H,GAAAjoB,GAAA,OAAAgoB,EAAAwC,oBAAA3a,GAAA9Y,EAAAA,EAAAwI,OAAAL,MAAA,SAAA2E,GAAA,OAAAA,EAAAzE,KAAAyE,EAAArG,MAAAzG,EAAAwI,MAAA,KAAAwpB,EAAAD,GAAAV,EAAAU,EAAAZ,EAAA,aAAAE,EAAAU,EAAA/xB,GAAA,0BAAAqxB,EAAAU,EAAA,qDAAAd,EAAA7T,KAAA,SAAAtQ,GAAA,IAAAmkB,EAAA3nB,OAAAwD,GAAAgM,EAAA,WAAAuQ,KAAA4H,EAAAnY,EAAA9L,KAAAqc,GAAA,OAAAvQ,EAAAzO,UAAA,SAAA7B,IAAA,KAAAsQ,EAAAzW,QAAA,KAAAyK,EAAAgM,EAAAlO,MAAA,GAAAkC,KAAAmkB,EAAA,OAAAzoB,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,QAAAA,EAAAH,MAAA,EAAAG,CAAA,GAAAyoB,EAAAa,OAAAA,EAAAN,EAAAlqB,UAAA,CAAAD,YAAAmqB,EAAA5qB,MAAA,SAAAqqB,GAAA,QAAA8C,KAAA,OAAAvrB,KAAA,OAAAiqB,KAAA,KAAAC,MAAA5lB,EAAA,KAAAzE,MAAA,OAAAkqB,SAAA,UAAAD,OAAA,YAAAvqB,IAAA+E,EAAA,KAAAsmB,WAAA7oB,QAAA8oB,IAAApC,EAAA,QAAAnY,KAAA,WAAAA,EAAAnb,OAAA,IAAA0rB,EAAAvf,KAAA,KAAAgP,KAAAya,OAAAza,EAAAxJ,MAAA,WAAAwJ,GAAAhM,EAAA,EAAAoW,KAAA,gBAAA7a,MAAA,MAAAyE,EAAA,KAAAsmB,WAAA,GAAAE,WAAA,aAAAxmB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,YAAAisB,IAAA,EAAArB,kBAAA,SAAA1B,GAAA,QAAA5oB,KAAA,MAAA4oB,EAAA,IAAAnY,EAAA,cAAAmb,EAAA5K,EAAA6H,GAAA,OAAAlxB,EAAAnD,KAAA,QAAAmD,EAAA+H,IAAAkpB,EAAAnY,EAAAtQ,KAAA6gB,EAAA6H,IAAApY,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,KAAAokB,CAAA,SAAAA,EAAA,KAAAkC,WAAA/wB,OAAA,EAAA6uB,GAAA,IAAAA,EAAA,KAAAjoB,EAAA,KAAAmqB,WAAAlC,GAAAlxB,EAAAiJ,EAAAqqB,WAAA,YAAArqB,EAAA+pB,OAAA,OAAAiB,EAAA,UAAAhrB,EAAA+pB,QAAA,KAAAe,KAAA,KAAArb,EAAA2Q,EAAAvf,KAAAb,EAAA,YAAAkoB,EAAA9H,EAAAvf,KAAAb,EAAA,iBAAAyP,GAAAyY,EAAA,SAAA4C,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,WAAAc,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,SAAAxa,GAAA,QAAAqb,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,YAAA9B,EAAA,MAAAkB,MAAA,kDAAA0B,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,KAAAN,OAAA,SAAA9lB,EAAAmkB,GAAA,QAAAnY,EAAA,KAAAsa,WAAA/wB,OAAA,EAAAyW,GAAA,IAAAA,EAAA,KAAAoY,EAAA,KAAAkC,WAAAta,GAAA,GAAAoY,EAAA8B,QAAA,KAAAe,MAAA1K,EAAAvf,KAAAonB,EAAA,oBAAA6C,KAAA7C,EAAAgC,WAAA,KAAAjqB,EAAAioB,EAAA,OAAAjoB,IAAA,UAAA6D,GAAA,aAAAA,IAAA7D,EAAA+pB,QAAA/B,GAAAA,GAAAhoB,EAAAiqB,aAAAjqB,EAAA,UAAAjJ,EAAAiJ,EAAAA,EAAAqqB,WAAA,UAAAtzB,EAAAnD,KAAAiQ,EAAA9M,EAAA+H,IAAAkpB,EAAAhoB,GAAA,KAAAqpB,OAAA,YAAA9pB,KAAAS,EAAAiqB,WAAAnS,GAAA,KAAAvO,SAAAxS,EAAA,EAAAwS,SAAA,SAAA1F,EAAAmkB,GAAA,aAAAnkB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,gBAAA+E,EAAAjQ,MAAA,aAAAiQ,EAAAjQ,KAAA,KAAA2L,KAAAsE,EAAA/E,IAAA,WAAA+E,EAAAjQ,MAAA,KAAAm3B,KAAA,KAAAjsB,IAAA+E,EAAA/E,IAAA,KAAAuqB,OAAA,cAAA9pB,KAAA,kBAAAsE,EAAAjQ,MAAAo0B,IAAA,KAAAzoB,KAAAyoB,GAAAlQ,CAAA,EAAAmT,OAAA,SAAApnB,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAoa,aAAApmB,EAAA,YAAA0F,SAAAsG,EAAAwa,WAAAxa,EAAAqa,UAAAE,EAAAva,GAAAiI,CAAA,kBAAAjU,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAka,SAAAlmB,EAAA,KAAAuc,EAAAvQ,EAAAwa,WAAA,aAAAjK,EAAAxsB,KAAA,KAAAq0B,EAAA7H,EAAAthB,IAAAsrB,EAAAva,EAAA,QAAAoY,CAAA,QAAAmB,MAAA,0BAAA8B,cAAA,SAAAlD,EAAAnY,EAAAuQ,GAAA,YAAAkJ,SAAA,CAAAprB,SAAA2qB,EAAAb,GAAA4B,WAAA/Z,EAAAga,QAAAzJ,GAAA,cAAAiJ,SAAA,KAAAvqB,IAAA+E,GAAAiU,CAAA,GAAAkQ,CAAA,UAAAmD,EAAA/K,EAAAvc,EAAAmkB,EAAAnY,EAAAoY,EAAAlxB,EAAA0Y,GAAA,QAAAzP,EAAAogB,EAAArpB,GAAA0Y,GAAAyY,EAAAloB,EAAAxC,KAAA,OAAA4iB,GAAA,YAAA4H,EAAA5H,EAAA,CAAApgB,EAAAZ,KAAAyE,EAAAqkB,GAAAlpB,QAAAC,QAAAipB,GAAAhpB,KAAA2Q,EAAAoY,EAAA,UAAAmD,EAAAhL,GAAA,sBAAAvc,EAAA,KAAAmkB,EAAA7uB,UAAA,WAAA6F,SAAA,SAAA6Q,EAAAoY,GAAA,IAAAlxB,EAAAqpB,EAAA5mB,MAAAqK,EAAAmkB,GAAA,SAAAqD,EAAAjL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,OAAAlL,EAAA,UAAAkL,EAAAlL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,QAAAlL,EAAA,CAAAiL,OAAA,gBAAAE,EAAAvD,EAAAnY,GAAA,QAAAhM,EAAA,EAAAA,EAAAgM,EAAAzW,OAAAyK,IAAA,KAAAokB,EAAApY,EAAAhM,GAAAokB,EAAA/nB,WAAA+nB,EAAA/nB,aAAA,EAAA+nB,EAAA9nB,cAAA,YAAA8nB,IAAAA,EAAA7nB,UAAA,GAAAC,OAAAC,eAAA0nB,EAAAwD,EAAAvD,EAAAzzB,KAAAyzB,EAAA,WAAAuD,EAAA3nB,GAAA,IAAA7D,EAAA,SAAA6D,EAAAgM,GAAA,aAAA7R,EAAA6F,KAAAA,EAAA,OAAAA,EAAA,IAAAmkB,EAAAnkB,EAAA5F,OAAAwtB,aAAA,YAAAzD,EAAA,KAAAhoB,EAAAgoB,EAAAnnB,KAAAgD,EAAAgM,GAAA,wBAAA7R,EAAAgC,GAAA,OAAAA,EAAA,UAAAsU,UAAA,kEAAAzE,EAAAiO,OAAA4N,QAAA7nB,EAAA,CAAA8nB,CAAA9nB,EAAA,0BAAA7F,EAAAgC,GAAAA,EAAAA,EAAA,oBADO,IACPgoB,EAAAnY,EAAAhM,EAA8Bw7B,EADDC,EAAhBC,EAAgB,yBAC7BvX,EAD6B,SAAAuX,KAC7B,SAAAxoC,EAAAqpB,GAAA,KAAArpB,aAAAqpB,GAAA,UAAA9L,UAAA,qCAD6B8X,CAAA,KAAAmT,EAAA,EAC7B1vB,EAD6B,KAC7BhM,EAD6B,EAAArP,IAAA,gBAAAgJ,OAAA8hC,EAAAlU,EAAArD,IAAA0C,MACzB,SAAA4B,EAA2ByC,GAAO,IAAA0Q,EAAA,OAAAzX,IAAAM,MAAA,SAAAiE,GAAA,cAAAA,EAAAxB,KAAAwB,EAAA/sB,MAAA,OAG9B,GAFMigC,EAAY,kDAAHr+B,OAAqD2tB,GAG/Dn0B,SAAS8kC,cAAc,eAADt+B,OAAgBq+B,EAAS,OAAO,CAAFlT,EAAA/sB,KAAA,eAAA+sB,EAAA3C,OAAA,SAC9C,IAAI3qB,SAAQ,SAACC,EAASK,GACzB,IAAMi+B,EAAS5iC,SAASC,cAAc,UACtC2iC,EAAOC,IAAMgC,EACbjC,EAAO1S,OAAQ,EACf0S,EAAOmC,OAAQ,EACfnC,EAAO7pB,OAASzU,EAChBs+B,EAAO3pB,QAAUtU,EACjB3E,SAAS8iC,KAAKjiC,YAAY+hC,EAC9B,KAAE,cAAAjR,EAAA3C,OAAA,SAGC3qB,QAAQC,WAAS,wBAAAqtB,EAAArS,OAAA,GAAAoS,EAAA,KAC3B,SAjByBuB,GAAA,OAAA0R,EAAA9lC,MAAC,KAADL,UAAA,KAAA3E,IAAA,0BAAAgJ,OAAA6hC,EAAAjU,EAAArD,IAAA0C,MAmB1B,SAAAiC,EAAqCoC,GAAO,IAAA6Q,EAAAC,EAAAzmC,UAAA,OAAA4uB,IAAAM,MAAA,SAAAuE,GAAA,cAAAA,EAAA9B,KAAA8B,EAAArtB,MAAA,OAAoB,OAAlBogC,EAAMC,EAAAxmC,OAAA,QAAAK,IAAAmmC,EAAA,GAAAA,EAAA,GAAG,UAAShT,EAAArtB,KAAA,EAEtDf,KAAKqhC,cAAc/Q,GAAQ,WAG7B57B,OAAO4sC,WAAY,CAAFlT,EAAArtB,KAAA,eAAAqtB,EAAAjD,OAAA,SACV,IAAI3qB,SAAQ,SAACC,EAASK,GACzBpM,OAAO4sC,WAAW/9B,OAAM,WACpB7O,OAAO4sC,WACFC,QAAQjR,EAAS,CAAE6Q,OAAAA,IACnBzgC,KAAKD,GAAS,MACRK,EACf,GACJ,KAAE,aAEI,IAAI8pB,MAAM,6CAA4C,wBAAAwD,EAAA3S,OAAA,GAAAyS,EAAA,UAEnE,SAjBmCmB,GAAA,OAAAwR,EAAA7lC,MAAC,KAADL,UAAA,KAnBxC0W,GAAA0b,EAAAvD,EAAA3pB,UAAAwR,GAAAhM,GAAA0nB,EAAAvD,EAAAnkB,GAAAxD,OAAAC,eAAA0nB,EAAA,aAAA5nB,UAAA,IAAA4nB,GAmBwC,oDCfxC,MAAMgY,EACF,WAAA5hC,CAAYy5B,EAAMzZ,EAAO6hB,EAAOC,EAAKpI,GACjCt5B,KAAKq5B,KAAOA,EACZr5B,KAAK4f,MAAQA,EACb5f,KAAKyhC,MAAQA,EACbzhC,KAAK0hC,IAAMA,EACX1hC,KAAKs5B,KAAOA,CAChB,CACA,OAAAqI,GACI,OAAO3hC,KAAK4f,MAAM/X,MAAM7H,KAAKyhC,MAAOzhC,KAAK0hC,IAC7C,CACA,WAAA/1B,GACI,IAAKi2B,EAAKC,GAAO,CAAC,EAAG,GACrB,IAAK,IAAIrgC,EAAI,EAAGA,EAAIxB,KAAKyhC,MAAOjgC,IACN,OAAlBxB,KAAK4f,MAAMpe,IACXogC,IACAC,EAAM,GAGNA,IAER,MAAO,CAACD,EAAKC,EACjB,CACA,IAAAC,GACI,OAAO9hC,KAAK0hC,IAAM1hC,KAAKyhC,KAC3B,EAGJ,MAAMM,EACF,mBAAAC,CAAoBhsC,GAEpB,EAGJ,MAAMisC,EAAapgC,OAAOhC,UAAU2G,SAC9BrQ,EAAcmpB,OAAOzf,UAAU1J,YAC/B,EAAiB0L,OAAOtM,eAC9B,SAASue,EAAS9U,GACd,MAAwB,iBAAVA,CAClB,CAEA,SAASkjC,EAAWljC,GAChB,MAAwB,mBAAVA,CAClB,CACA,SAASmjC,EAAUlsC,GACf,OAAOA,GAAOisC,EAAWjsC,EAAIyK,KACjC,CACA,SAAS0hC,EAAWnsC,GAChB,OAAOA,GAAOisC,EAAWjsC,EAAI8K,OAASmhC,EAAWjsC,EAAImL,QAAU8gC,EAAWjsC,EAAIiL,OAClF,CAIA,SAAS0T,EAAU5V,GAEf,OAAI8U,EADJ9U,EAAQwV,EAAQxV,IAELA,EACPqjC,EAAMrjC,GACC,GACP9D,EAAQ8D,GACDA,EAAMhH,KAAIsqC,GAAK1tB,EAAU0tB,KAAI58B,KAAK,IACtC4Z,OAAOtgB,EAClB,CACA,SAASujC,EAAatsC,GAElB,OAAIiF,EADJjF,EAAMue,EAAQve,IAEHA,EACP6d,EAAS7d,IAAQA,EAAI2E,OAAS,EACvB,CAAC3E,GAyCLsf,EADSvW,EAvCD/I,IAwCWwJ,OAAOC,YAAYV,EAvClClE,MAAM2H,KAAKxM,GAClBsf,EAAStf,GACF4L,OAAO8T,KAAK1f,GAAK+B,KAAKhC,GAAQ,CAACA,EAAKC,EAAID,MAC5C,GAmCX,IAAoBgJ,CAlCpB,CACA,SAASwjC,EAAQvsC,GAEb,OAAIosC,EADJpsC,EAAMue,EAAQve,IAEH,GACPiF,EAAQjF,GACDA,EACJ,CAACA,EACZ,CACA,SAASue,EAAQxV,GACb,OAAQA,aAAiB+iC,GAAQG,EAAWljC,EAAM9E,SAAY8E,EAAM9E,UAAY8E,CACpF,CACA,SAASyjC,EAASzjC,GAEd,OADAA,EAAQkuB,OAAOluB,GACR8sB,MAAM9sB,GAAS,EAAIA,CAC9B,CACA,SAASiV,EAASjV,GACd,MAAwB,iBAAVA,CAClB,CACA,SAAS0jC,EAAS1jC,GACd,OAAIA,GAASkjC,EAAWljC,EAAM0jC,UACnBA,EAAS1jC,EAAM0jC,YACnB1jC,CACX,CACA,SAASqjC,EAAMrjC,GACX,OAAgB,MAATA,CACX,CAIA,SAAS9D,EAAQ8D,GAEb,MAAkC,mBAA3BijC,EAAW5/B,KAAKrD,EAC3B,CAYA,SAAS2jC,EAAOhjC,EAAKijC,GACjBjjC,EAAMA,GAAO,CAAC,EACd,IAAK,MAAMiW,KAAKjW,EACZ,GAAI,EAAe0C,KAAK1C,EAAKiW,KACQ,IAA7BgtB,EAASjjC,EAAIiW,GAAIA,EAAGjW,GACpB,MAGZ,OAAOA,CACX,CACA,SAASmM,EAAKvJ,GACV,OAAOA,EAAIA,EAAI3H,OAAS,EAC5B,CAOA,SAAS2a,EAASvW,GACd,MAAM5J,SAAc4J,EACpB,OAAiB,OAAVA,IAA4B,WAAT5J,GAA8B,aAATA,EACnD,CACA,SAASysB,EAAM5W,EAAOwQ,EAAMvP,EAAO,GAC/B,MAAM3J,EAAM,GACZ,IAAK,IAAIf,EAAIyJ,EAAOzJ,EAAIia,EAAMja,GAAK0K,EAC/B3J,EAAIgD,KAAK/D,GAEb,OAAOe,CACX,CACA,SAASsgC,EAAS7xB,EAAKpW,EAAQkoC,EAAK,KAChC,OAAOziB,EAAIrP,EAAKpW,EAAQkoC,GAAI,CAAC9xB,EAAK8xB,IAAOA,EAAK9xB,GAClD,CAIA,SAASqP,EAAIrP,EAAKpW,EAAQkoC,EAAIvmC,GAE1B,IAAIqlB,EAAIhnB,GADRoW,EAAMsO,OAAOtO,IACQpW,OACrB,KAAOgnB,KAAM,GACT5Q,EAAMzU,EAAIyU,EAAK8xB,GACnB,OAAO9xB,CACX,CACA,SAAS+xB,EAAS9sC,GACd,OAAOA,CACX,CASA,SAAS+sC,EAAuBzqC,EAAGC,GAC/B,OAAS,MAALD,GAAkB,MAALC,EACN,EACF,MAALD,EACO,EACF,MAALC,IAEJD,EAAIpC,EAAYkM,KAAK9J,KACrBC,EAAIrC,EAAYkM,KAAK7J,KAFT,EAKRD,EAAIC,EACG,EACJ,CACX,CACA,SAASyqC,EAAiBxtC,GACtB,OAAO,YAAaoF,GAAQ,OAAOpF,EAAG4M,KAAKrC,QAASnF,EAAK7C,IAAIwc,GAAW,CAC5E,CACA,SAAS0uB,EAAavzB,GAClB,OAAOA,EAAKrH,QAAQ,2BAA4B,OACpD,CAKA,MAAM66B,EAAQ,kBACd,MAAMC,UAAoBxY,MACtB,WAAAhrB,CAAYiB,EAAKyQ,GAKb+xB,MAAqB,iBAARxiC,EAAmBA,EAAMA,EAAIyiC,SAC1CtjC,KAAKukB,QAAU,GACI,iBAAR1jB,GACPgB,OAAOC,eAAe9B,KAAM,gBAAiB,CAAEhB,MAAO6B,EAAKa,YAAY,IAC3EG,OAAOC,eAAe9B,KAAM,QAAS,CAAEhB,MAAOsS,EAAO5P,YAAY,IACjEG,OAAOC,eAAe9B,KAAMmjC,EAAO,CAAEnkC,MAAO,cAAe0C,YAAY,GAC3E,CACA,MAAAtC,GACIyC,OAAOC,eAAe9B,KAAM,UAAW,CAAEhB,MAAOukC,EAAUvjC,KAAKsR,OAAQ5P,YAAY,IACnF1B,KAAKsjC,QA6Fb,SAAmBE,EAAKlyB,GAChBA,EAAMgoB,OACNkK,GAAO,UAAUlyB,EAAMgoB,QAC3B,MAAOmK,EAAM5B,GAAOvwB,EAAM3F,cAE1B,OADA63B,GAAO,UAAUC,UAAa5B,GAElC,CAnGuB6B,CAAU1jC,KAAKsjC,QAAStjC,KAAKsR,OAC5CtR,KAAK2jC,MAAQ3jC,KAAKsjC,QAAU,KAAOtjC,KAAKukB,QACpC,KAAOvkB,KAAK2jC,MACZ3jC,KAAK4jC,gBACL5jC,KAAK2jC,OAAS,UAAY3jC,KAAK4jC,cAAcD,MACrD,CACA,SAAOE,CAAGlkC,GACN,MAAkE,iBAA1DA,aAAiC,EAASA,EAAIwjC,GAC1D,EAEJ,MAAMW,UAA0BV,EAC5B,WAAAxjC,CAAY0jC,EAAShyB,GACjB+xB,MAAMC,EAAShyB,GACftR,KAAK1K,KAAO,oBACZ+tC,MAAMjkC,QACV,EAEJ,MAAM2kC,UAAmBX,EACrB,WAAAxjC,CAAYiB,EAAKyQ,GACb+xB,MAAMxiC,EAAKyQ,GACXtR,KAAK1K,KAAO,aACZ0K,KAAKsjC,QAAUziC,EAAIyiC,QACnBD,MAAMjkC,QACV,EAEJ,MAAM4kC,UAAoBZ,EACtB,WAAAxjC,CAAYiB,EAAKojC,GACbZ,MAAMxiC,EAAKojC,EAAI3yB,OACftR,KAAK1K,KAAO,cACZ0K,KAAKsjC,QAAUziC,EAAIyiC,QACnBD,MAAMjkC,QACV,CACA,SAAOykC,CAAGlkC,GACN,MAAoB,gBAAbA,EAAIrK,IACf,EAEJ,MAAM4uC,UAAqBd,EACvB,WAAAxjC,CAAYukC,GACRd,MAAMc,EAAO,GAAIA,EAAO,GAAG7yB,OAC3BtR,KAAKmkC,OAASA,EACdnkC,KAAK1K,KAAO,eACZ,MAAMoV,EAAIy5B,EAAOvpC,OAAS,EAAI,IAAM,GACpCoF,KAAKsjC,QAAU,GAAGa,EAAOvpC,eAAe8P,UACxC24B,MAAMjkC,QACV,CACA,SAAOykC,CAAGlkC,GACN,MAAoB,iBAAbA,EAAIrK,IACf,EAEJ,MAAM8uC,UAA+BhB,EACjC,WAAAxjC,CAAYiB,EAAKyQ,GACb+xB,MAAMxiC,EAAKyQ,GACXtR,KAAK1K,KAAO,yBACZ0K,KAAKsjC,QAAUziC,EAAIyiC,QACnBD,MAAMjkC,QACV,EAIJ,MAAMilC,UAAuCzZ,MACzC,WAAAhrB,CAAY0kC,GACRjB,MAAM,uBAAuBiB,KAC7BtkC,KAAK1K,KAAO,iCACZ0K,KAAKskC,aAAeA,CACxB,EAEJ,MAAMC,UAAuB3Z,MACzB,WAAAhrB,CAAY0jC,GACRD,MAAMC,GACNtjC,KAAK1K,KAAO,iBACZ0K,KAAKsjC,QAAUA,EAAU,EAC7B,EAEJ,SAASC,EAAUjyB,GACf,MAAOmyB,EAAM5B,GAAOvwB,EAAM3F,cACpB64B,EAAQlzB,EAAMsO,MAAMnc,MAAM,MAC1Bg+B,EAAQ9pC,KAAKC,IAAI6rC,EAAO,EAAG,GAC3B/B,EAAM/pC,KAAKE,IAAI4rC,EAAO,EAAGe,EAAM5pC,QAcrC,OAbgBinB,EAAM4f,EAAOC,EAAM,GAC9B1pC,KAAIysC,IAGL,IAAI90B,EAAO,GAFW80B,IAAehB,EAAQ,MAAQ,QACzCZ,EAASvjB,OAAOmlB,GAAanlB,OAAOoiB,GAAK9mC,YAErD,MAAM8pC,EAAeD,IAAehB,EAC9B,KAAOZ,EAAS,IAAKhB,EAAMlyB,EAAK/U,QAChC,GAGN,OAFA+U,GAAQ60B,EAAMC,EAAa,GAC3B90B,GAAQ+0B,EACD/0B,CAAI,IAEVjK,KAAK,KAEd,CAaA,MAAMi/B,EAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAQ3Z,SAASC,EAAOzlB,GACZ,MAAMud,EAAOvd,EAAKD,WAAW,GAC7B,OAAOwd,GAAQ,KAAOiI,EAAMjI,MATnB,EAS8BiI,EAAMjI,GACjD,CAIA,SAASmI,EAAOC,EAAWxB,GACvB,IAAKwB,EAAW,CACZ,MAAMtB,EAAyB,mBAAZF,EACbA,IACCA,GAAW,UAAUwB,eAC5B,MAAM,IAAIP,EAAef,EAC7B,CACJ,CACA,SAASuB,EAAYD,EAAWxB,EAAU,cAAc3uB,KAAKC,UAAUkwB,MACnED,GAAQC,EAAWxB,EACvB,CAbAqB,EAAM,KAAOA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,MAAQA,EAAM,OAVnP,EAWdA,EAAM,MAAQA,EAAM,MANA,IAyCpB,MAAMK,UAAkBjD,EACpB,MAAAkD,CAAOjmC,GACH,QAAIA,aAAiBgmC,KAGjBlxB,EADJ9U,EAAQwV,EAAQxV,KACO9D,EAAQ8D,GACH,IAAjBA,EAAMpE,SACb2a,EAASvW,IAC4B,IAA9B6C,OAAO8T,KAAK3W,GAAOpE,OAElC,CACA,EAAAsqC,GACI,OAAO,CACX,CACA,GAAAC,GACI,OAAO,CACX,CACA,EAAAC,GACI,OAAO,CACX,CACA,GAAAC,GACI,OAAO,CACX,CACA,OAAAnrC,GACI,MAAO,EACX,EAeJ,MAAMorC,UAAoBvD,EACtB,WAAAniC,CAAYhF,EAAQ2qC,EAAYC,GAC5BnC,QACArjC,KAAKwB,EAAI,EACTxB,KAAKpF,OAASA,EACdoF,KAAK1K,KAAO,GAAGkwC,KAAYD,GAC/B,CACA,IAAAxkC,GACIf,KAAKwB,GACT,CACA,MAAAikC,GACI,OAAOzlC,KAAKwB,CAChB,CACA,KAAAmC,GACI,OAAO3D,KAAKwB,EAAI,CACpB,CACA,KAAAkkC,GACI,OAAkB,IAAX1lC,KAAKwB,CAChB,CACA,IAAAsK,GACI,OAAO9L,KAAKwB,IAAMxB,KAAKpF,OAAS,CACpC,CACA,MAAA+qC,GACI,OAAO3lC,KAAKpF,OAASoF,KAAKwB,CAC9B,CACA,OAAAokC,GACI,OAAO5lC,KAAKpF,OAASoF,KAAKwB,EAAI,CAClC,CACA,OAAAtH,GACI,OAAOya,KAAKC,UAAU5U,KAC1B,EAGJ,MAAM6lC,UAAkB9D,EACpB,WAAAniC,CAEAkmC,EAAmB,IAAM,IACrBzC,QACArjC,KAAK8lC,iBAAmBA,CAC5B,CAKA,KAAAzC,GACI,OAAOrjC,KAAK8lC,kBAChB,EAGJ,SAASC,EAAazlC,GAClB,OAAQA,GACJ4hC,EAAW5hC,EAAI2kC,SACf/C,EAAW5hC,EAAI4kC,KACfhD,EAAW5hC,EAAI6kC,MACfjD,EAAW5hC,EAAI8kC,KACflD,EAAW5hC,EAAI+kC,IACvB,CAEA,MAAMW,EAAM,IAvHZ,cAAuBjE,EACnB,MAAAkD,CAAOjmC,GACH,OAAOqjC,EAAM7tB,EAAQxV,GACzB,CACA,EAAAkmC,GACI,OAAO,CACX,CACA,GAAAC,GACI,OAAO,CACX,CACA,EAAAC,GACI,OAAO,CACX,CACA,GAAAC,GACI,OAAO,CACX,CACA,OAAAnrC,GACI,OAAO,IACX,GAsGE+rC,EAAgB,CAClB,MAAQ,EACR,OAAS,EACT,IAAOD,EACP,KAAQA,EACR,MAAS,IAAIhB,EACb,MAAS,IA7Eb,cAAwBA,EACpB,MAAAC,CAAOjmC,GACH,OAAc,IAAVA,MAEAqjC,EAAM7tB,EAAQxV,MAEd8U,EAAS9U,GACF,QAAQrJ,KAAKqJ,GACjBqkC,MAAM4B,OAAOjmC,IACxB,IAuEJ,SAASknC,EAAWtmB,GAChB,MAAMumB,EAAO,CAAC,EACd,IAAK,MAAO7wC,EAAM6uB,KAAStiB,OAAOukC,QAAQxmB,GAAQ,CAC9C,IAAI/W,EAAOs9B,EACX,IAAK,IAAI3kC,EAAI,EAAGA,EAAIlM,EAAKsF,OAAQ4G,IAAK,CAClC,MAAMyP,EAAI3b,EAAKkM,GACfqH,EAAKoI,GAAKpI,EAAKoI,IAAM,CAAC,EAClBzP,IAAMlM,EAAKsF,OAAS,GAAKgqC,EAAOtvC,EAAKkM,MACrCqH,EAAKoI,GAAGo1B,cAAe,GAE3Bx9B,EAAOA,EAAKoI,EAChB,CACApI,EAAKsb,KAAOA,EACZtb,EAAK64B,KAAM,CACf,CACA,OAAOyE,CACX,CAiBA,IAAIG,EAAW,WAQX,OAPAA,EAAWzkC,OAAOM,QAAU,SAAkBkD,GAC1C,IAAK,IAAIqF,EAAGlJ,EAAI,EAAGogB,EAAIjnB,UAAUC,OAAQ4G,EAAIogB,EAAGpgB,IAE5C,IAAK,IAAIoH,KADT8B,EAAI/P,UAAU6G,GACOK,OAAOhC,UAAUtK,eAAe8M,KAAKqI,EAAG9B,KAAIvD,EAAEuD,GAAK8B,EAAE9B,IAE9E,OAAOvD,CACX,EACOihC,EAAStrC,MAAMgF,KAAMrF,UAChC,EAEA,SAAS4rC,EAAUC,EAASC,EAAYC,EAAGC,GAEvC,OAAO,IAAKD,IAAMA,EAAIlmC,WAAU,SAAUC,EAASK,GAC/C,SAAS8lC,EAAU5nC,GAAS,IAAMkN,EAAKy6B,EAAU5lC,KAAK/B,GAAS,CAAE,MAAOwqB,GAAK1oB,EAAO0oB,EAAI,CAAE,CAC1F,SAASqd,EAAS7nC,GAAS,IAAMkN,EAAKy6B,EAAiB,MAAE3nC,GAAS,CAAE,MAAOwqB,GAAK1oB,EAAO0oB,EAAI,CAAE,CAC7F,SAAStd,EAAK3L,GAJlB,IAAevB,EAIauB,EAAOK,KAAOH,EAAQF,EAAOvB,QAJ1CA,EAIyDuB,EAAOvB,MAJhDA,aAAiB0nC,EAAI1nC,EAAQ,IAAI0nC,GAAE,SAAUjmC,GAAWA,EAAQzB,EAAQ,KAIjB0B,KAAKkmC,EAAWC,EAAW,CAC7G36B,GAAMy6B,EAAYA,EAAU3rC,MAAMwrC,EAASC,GAAc,KAAK1lC,OAClE,GACJ,CAGA,SAAS+lC,GAAU7wC,GACf,OAAOswC,EAAUvmC,UAAM,OAAQ,GAAQ,YACnC,IAAKoiC,EAAWnsC,GACZ,OAAOA,EACX,IAAI+I,EACA4B,GAAO,EACPG,EAAO,OACX,EAAG,CACC,MAAMzF,EAAQrF,EAAI8K,GAAM/B,GACxB4B,EAAOtF,EAAMsF,KACb5B,EAAQ1D,EAAM0D,MACd+B,EAAO,OACP,IACQqhC,EAAWpjC,KACXA,EAAQ8nC,GAAU9nC,IAClBmjC,EAAUnjC,KACVA,QAAcA,EACtB,CACA,MAAO6B,GACHE,EAAO,QACP/B,EAAQ6B,CACZ,CACJ,QAAUD,GACV,OAAO5B,CACX,GACJ,CAEA,SAAS+nC,GAAY9wC,GACjB,IAAKmsC,EAAWnsC,GACZ,OAAOA,EACX,IAAI+I,EACA4B,GAAO,EACPG,EAAO,OACX,EAAG,CACC,MAAMzF,EAAQrF,EAAI8K,GAAM/B,GAIxB,GAHA4B,EAAOtF,EAAMsF,KACb5B,EAAQ1D,EAAM0D,MACd+B,EAAO,OACHqhC,EAAWpjC,GACX,IACIA,EAAQ+nC,GAAY/nC,EACxB,CACA,MAAO6B,GACHE,EAAO,QACP/B,EAAQ6B,CACZ,CAER,QAAUD,GACV,OAAO5B,CACX,CAEA,MAAMgoC,GAAU,gCAEhB,SAASxvC,GAAYiiB,GACjB,MAAMwtB,EAkBV,SAAoBxtB,GAChB,MAAM/gB,EAAO+gB,EAAE/hB,cACf,QAAkB,EAAPgB,KAAoBA,EAAO,KAAQA,EAAO,KAAQ,GAAKA,GACtE,CArBgBwuC,CAAWztB,GAAK,GAAK,GACjC,MAAO,CAAC,GAAIwtB,EAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACzD,CACA,SAASE,GAAa1tB,GAClB,IAAI2tB,EAAM,EACV,IAAK,IAAI5lC,EAAI,EAAGA,EAAIiY,EAAEhiB,aAAc+J,EAChC4lC,GAAO5vC,GAAYiiB,GAAGjY,GAE1B,OAAO4lC,EAAM3tB,EAAEpiB,SACnB,CACA,SAASgwC,GAAc5tB,EAAG6tB,GAEtB,MAAMjvC,EAAM8uC,GAAa1tB,IAAM6tB,EAAW7tB,EAAEtiB,UAGtCuJ,EAAQ,EADD,IAAI3J,KAAK0iB,EAAE/hB,cAAe,EAAG,GACnBP,SAAWmwC,EAClC,OAAOhoB,OAAO3nB,KAAK2B,OAAOjB,EAAMqI,GAAQ,GAAK,EACjD,CAoBA,MAAM6mC,GAAY,CACd9tB,EAAG,EACH+P,EAAG,EACHge,EAAG,EACHC,EAAG,EACH3lB,EAAG,EACHlM,EAAG,EACH3R,EAAG,EACHyjC,EAAG,EACHzvC,EAAG,EACHshB,EAAG,EACHouB,EAAG,EACHC,EAAG,EACHC,EAAG,GAEDC,GAAgB,IAAIC,IAAI,cAC9B,SAAS/uC,GAAkBygB,EAAGuuB,GAC1B,MAAMC,EAAUtwC,KAAKiH,IAAI6a,EAAEzgB,qBACrB0gB,EAAI/hB,KAAK2B,MAAM2uC,EAAU,IACzBhwC,EAAIgwC,EAAU,GACpB,OAAQxuB,EAAEzgB,oBAAsB,EAAI,IAAM,KACtC6pC,EAASnpB,EAAG,EAAG,MACdsuB,EAAKE,MAAM,KAAO,IAAM,IACzBrF,EAAS5qC,EAAG,EAAG,IACvB,CACA,MAAMkwC,GAAc,CAChB5vC,EAAIkhB,GAAMA,EAAE2uB,sBACZC,EAAI5uB,GAAMA,EAAE6uB,qBACZ9vC,EAAIihB,GAAMA,EAAE8uB,oBACZC,EAAI/uB,GAAMA,EAAEgvB,mBACZx3B,EAAIwI,GAAMA,EAAEivB,iBACZC,EAAIlvB,GAnCR,SAAiBA,GACb,OAAOpb,SAASob,EAAE/hB,cAAc8O,WAAW0B,UAAU,EAAG,GAAI,GAChE,CAiCc0gC,CAAQnvB,GAClBA,EAAIA,GAAMA,EAAEpiB,UACZmyB,EAAI/P,GAAMA,EAAEpiB,UACZmwC,EAAI/tB,GAAMA,EAAEovB,WACZpB,EAAIhuB,GAAM6F,OAAO7F,EAAEovB,WAAa,IAAM,IACtC/mB,EAAIrI,GAAM0tB,GAAa1tB,GACvB7D,EAAI6D,GAAMA,EAAEovB,WACZ5kC,EAAIwV,GAAM6F,OAAO7F,EAAEovB,WAAa,IAAM,IACtCnB,EAAIjuB,GAAMA,EAAEqvB,kBACZ7wC,EAAIwhB,GAAMA,EAAEhiB,WAAa,EACzB8hB,EAAIE,GAAMA,EAAEsvB,aACZC,EAAG,CAACvvB,EAAGuuB,KACH,MAAM34B,EAAQ6d,OAAO8a,EAAK34B,QAAU,EAEpC,OAlgBR,SAAgB2B,EAAKpW,EAAQkoC,EAAK,KAC9B,OAAOziB,EAAIrP,EAAKpW,EAAQkoC,GAAI,CAAC9xB,EAAK8xB,IAAO9xB,EAAM8xB,GACnD,CAggBemG,CADK3pB,OAAO7F,EAAEqvB,mBAAmBjhC,MAAM,EAAGwH,GAC9BA,EAAO,IAAI,EAElCzG,EAAI6Q,GAAOA,EAAEovB,WAAa,GAAK,KAAO,KACtCnC,EAAIjtB,GAAOA,EAAEovB,WAAa,GAAK,KAAO,KACtCK,EAAIzvB,GAhER,SAAiBA,GACb,MAAM3iB,EAAO2iB,EAAEpiB,UACf,GAAI,CAAC,GAAI,GAAI,IAAI2C,SAASlD,GACtB,MAAO,KACX,OAAQA,EAAO,IACX,KAAK,EAAG,MAAO,KACf,KAAK,EAAG,MAAO,KACf,KAAK,EAAG,MAAO,KACf,QAAS,MAAO,KAExB,CAsDcqyC,CAAQ1vB,GAClB/O,EAAI+O,GAAM9hB,KAAKmpB,MAAMrH,EAAE1gB,UAAY,KACnC4uC,EAAIluB,GAAMA,EAAE2jB,aACZ1T,EAAIjQ,GAAMA,EAAEtiB,UAAY,EACxBywC,EAAInuB,GAAM4tB,GAAc5tB,EAAG,GAC3BD,EAAIC,GAAMA,EAAEtiB,SACZ0wC,EAAIpuB,GAAM4tB,GAAc5tB,EAAG,GAC3B6oB,EAAI7oB,GAAMA,EAAE2vB,qBACZC,EAAI5vB,GAAMA,EAAE6vB,qBACZhwB,EAAIG,GAAMA,EAAE/hB,cAAc8O,WAAWqB,MAAM,EAAG,GAC9C0hC,EAAI9vB,GAAMA,EAAE/hB,cACZ8xC,EAAGxwC,GACHywC,EAAG,CAAChwB,EAAGuuB,IAASvuB,EAAEiwB,mBAAqB1wC,GAAkBygB,EAAGuuB,GAC5D,EAAK,IAAM,KACX,EAAK,IAAM,KACX,IAAK,IAAM,KAGf,SAAS2B,GAASlwB,EAAGmwB,GACjB,IAEI/wC,EAFAyB,EAAS,GACTuvC,EAAYD,EAEhB,KAAQ/wC,EAAQmuC,GAAQ8C,KAAKD,IACzBvvC,GAAUuvC,EAAUhiC,MAAM,EAAGhP,EAAM8K,OACnCkmC,EAAYA,EAAUhiC,MAAMhP,EAAM8K,MAAQ9K,EAAM,GAAG+B,QACnDN,GAAU0jB,GAAOvE,EAAG5gB,GAExB,OAAOyB,EAASuvC,CACpB,CACA,SAAS7rB,GAAOvE,EAAG5gB,GACf,MAAO+mB,EAAOmqB,EAAU,GAAI16B,EAAO26B,EAAUC,GAAcpxC,EACrDqxC,EAAU/B,GAAY8B,GAC5B,IAAKC,EACD,OAAOtqB,EACX,MAAMsoB,EAAQ,CAAC,EACf,IAAK,MAAMiC,KAAQJ,EACf7B,EAAMiC,IAAQ,EAClB,IAAIC,EAAM9qB,OAAO4qB,EAAQzwB,EAAG,CAAEyuB,QAAO74B,QAAO26B,cACxCK,EAAUvC,GAAc1S,IAAI6U,GAAc,IAAM,IAChDK,EAAWj7B,GAASk4B,GAAU0C,IAAe,EAhiBrD,IAAoBj5B,EA2iBhB,OAVIk3B,EAAM,KACNkC,EAAMA,EAAI9gC,cACL4+B,EAAM,OAniBCl3B,EAoiBKo5B,EAAjBA,EAniBiB,IAAIp5B,GAAKu5B,MAAKzH,GAAMA,GAAM,KAAOA,GAAM,MACtC9xB,EAAI1H,cAAgB0H,EAAI7a,eAmiB1C+xC,EAAS,EACTmC,EAAU,IACLnC,EAAM,KACXmC,EAAU,KACVnC,EAAM,OACNoC,EAAW,GACRzH,EAASuH,EAAKE,EAAUD,EACnC,CAEA,SAASG,KACL,MAAwB,oBAATC,KAAuBA,KAAKC,oBAAiBzvC,CAChE,CAtCAktC,GAAYzuB,EAAIyuB,GAAY3vC,EAyC5B,MACMmyC,GAA2B,gCAC3BC,GAAa,CACf,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAChE,YAAa,UAAW,WAAY,YAElCC,GAAkBD,GAAW5yC,KAAI1C,GAAQA,EAAKuS,MAAM,EAAG,KACvDijC,GAAW,CACb,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAEhEC,GAAgBD,GAAS9yC,KAAI1C,GAAQA,EAAKuS,MAAM,EAAG,KAQzD,MAAMmjC,GACF,WAAAprC,CAAYqrC,EAAMC,EAAQpmB,GACtB9kB,KAAKkrC,OAASA,EACdlrC,KAAK0qC,eAAiBF,KACtBxqC,KAAKlJ,KAAO,IAAIC,KAAKk0C,GACrBjrC,KAAKmrC,mBAA6BlwC,IAAb6pB,OACJ7pB,IAAb6pB,IACAA,EAAW9kB,KAAKlJ,KAAKkC,qBAEzBgH,KAAKorC,eAAiBt3B,EAASgR,GAAYkmB,GAAWhyC,kBAAkB8rB,EAAU9kB,KAAKlJ,MAAQguB,EAC/F9kB,KAAKqrC,aAAev3B,EAASgR,GAAYA,EAAW,GACpD,MAAMtrB,EA7BI,KA6BIwG,KAAKlJ,KAAKkC,oBAAsBgH,KAAKorC,gBAC7CjxB,EAAOna,KAAKlJ,KAAKiC,UAAYS,EACnCwG,KAAKsrC,YAAc,IAAIv0C,KAAKojB,EAChC,CACA,OAAAphB,GACI,OAAOiH,KAAKsrC,YAAYvyC,SAC5B,CACA,eAAA+vC,GACI,OAAO9oC,KAAKsrC,YAAYxC,iBAC5B,CACA,UAAA1L,GACI,OAAOp9B,KAAKsrC,YAAYlO,YAC5B,CACA,UAAA2L,GACI,OAAO/oC,KAAKsrC,YAAYvC,YAC5B,CACA,QAAAF,GACI,OAAO7oC,KAAKsrC,YAAYzC,UAC5B,CACA,MAAA1xC,GACI,OAAO6I,KAAKsrC,YAAYn0C,QAC5B,CACA,OAAAE,GACI,OAAO2I,KAAKsrC,YAAYj0C,SAC5B,CACA,QAAAI,GACI,OAAOuI,KAAKsrC,YAAY7zC,UAC5B,CACA,WAAAC,GACI,OAAOsI,KAAKsrC,YAAY5zC,aAC5B,CACA,cAAAgxC,CAAewC,EAAQD,GACnB,OAAIA,aAAmC,EAASA,EAAKM,UAC1CvrC,KAAKlJ,KAAK4xC,eAAewC,EAAQD,GAErCjrC,KAAKsrC,YAAY5C,eAAewC,EAAQD,EACnD,CACA,kBAAA3B,CAAmB4B,GACf,OAAOlrC,KAAKsrC,YAAYhC,mBAAmB4B,EAC/C,CACA,kBAAA9B,CAAmB8B,GACf,OAAOlrC,KAAKsrC,YAAYlC,mBAAmB8B,EAC/C,CACA,iBAAAlyC,GACI,OAAOgH,KAAKorC,cAChB,CACA,eAAA1B,GACI,OAAI1pC,KAAKmrC,cACEnrC,KAAKqrC,aACXrrC,KAAK0qC,eAEH1qC,KAAK0qC,iBAAiBc,kBAAkBD,cAF/C,CAGJ,CACA,gBAAA9C,GACI,IAAIgD,EACJ,OAAiD,QAAzCA,EAAKzrC,KAAKge,OAAO,CAAEjmB,MAAO,gBAA8B,IAAP0zC,EAAgBA,EAAKb,GAAW5qC,KAAKvI,WAClG,CACA,iBAAA8wC,GACI,IAAIkD,EACJ,OAAkD,QAA1CA,EAAKzrC,KAAKge,OAAO,CAAEjmB,MAAO,iBAA+B,IAAP0zC,EAAgBA,EAAKZ,GAAgB7qC,KAAKvI,WACxG,CACA,kBAAA6wC,GACI,IAAImD,EACJ,OAAmD,QAA3CA,EAAKzrC,KAAKge,OAAO,CAAE0tB,QAAS,gBAA8B,IAAPD,EAAgBA,EAAKX,GAAS9qC,KAAKsrC,YAAYn0C,SAC9G,CACA,mBAAAixC,GACI,IAAIqD,EACJ,OAAoD,QAA5CA,EAAKzrC,KAAKge,OAAO,CAAE0tB,QAAS,iBAA+B,IAAPD,EAAgBA,EAAKV,GAAc/qC,KAAKsrC,YAAYn0C,SACpH,CACA,KAAAw0C,GACI,OAAQ7f,MAAM9rB,KAAKjH,UACvB,CACA,MAAAilB,CAAO3S,GACH,OAAOrL,KAAK0qC,gBAAkB1qC,KAAK0qC,eAAe1qC,KAAKkrC,OAAQ7/B,GAAS2S,OAAOhe,KAAKsrC,YACxF,CAcA,gCAAOM,CAA0BC,EAAYX,GACzC,MAAMjzC,EAAI4zC,EAAWhzC,MAAM8xC,IAE3B,GAAI1yC,GAAc,MAATA,EAAE,GACP,OAAO,IAAI+yC,IAAY,IAAIj0C,KAAK80C,GAAaX,EAAQ,GAGzD,GAAIjzC,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,GAAI,CAC3B,MAAO,CAAE,CAAE6zC,EAAMC,EAAOC,GAAW/zC,EAC7BG,GAAmB,MAAT0zC,GAAgB,EAAI,IAA4B,GAAtBztC,SAAS0tC,EAAO,IAAW1tC,SAAS2tC,EAAS,KACvF,OAAO,IAAIhB,IAAY,IAAIj0C,KAAK80C,GAAaX,EAAQ9yC,EACzD,CACA,OAAO,IAAI4yC,GAAWa,EAAYX,EACtC,CACA,wBAAOlyC,CAAkBqyC,EAAcv0C,GACnC,MAAMm1C,EAAkBn1C,EAAK4xC,eAAe,QAAS,CAAE6C,SAAUF,IAC3Da,EAAgBp1C,EAAK4xC,eAAe,QAAS,CAAE6C,SAAU,QACzDY,EAAY,IAAIp1C,KAAKk1C,GAE3B,QADgB,IAAIl1C,KAAKm1C,IACLC,GAAa,GACrC,EAGJ,MAAMC,GACF,WAAAxsC,CAAYysC,EAAUhrB,GAClBrhB,KAAKyN,KAAO,EACZzN,KAAKsjC,QAAU,GAAG+I,mBAClBrsC,KAAKqhB,MAAQA,CACjB,CACA,GAAAirB,CAAIjzC,GACAA,EAAQopC,EAASppC,GACjBwrC,EAAO7kC,KAAKyN,KAAOpU,GAAS2G,KAAKqhB,MAAOrhB,KAAKsjC,SAC7CtjC,KAAKyN,MAAQpU,CACjB,CACA,KAAAkzC,CAAMlzC,GAEFwrC,GADAxrC,EAAQopC,EAASppC,KACD2G,KAAKqhB,MAAOrhB,KAAKsjC,QACrC,EAGJ,MAAMkJ,WAAuBhL,EACzB,WAAA5hC,CAAYy5B,GAAOoT,EAAcC,GAAa9sB,EAAO6hB,EAAOC,EAAKiL,EAAUC,EAAWtT,GAClF+J,MAAMhK,EAAMzZ,EAAO6hB,EAAOC,EAAKpI,GAC/Bt5B,KAAK2sC,UAAW,EAChB3sC,KAAK4sC,WAAY,EACjB,MAAMC,EAA6B,MAAxBjtB,EAAM6sB,GACXK,EAA+B,MAA1BltB,EAAM8sB,EAAa,GAC9B,IAAIzoC,EAAI4oC,EAAKJ,EAAe,EAAIA,EAC5Bp7B,EAAIy7B,EAAKJ,EAAa,EAAIA,EAC9B,KAAOzoC,EAAIoN,GA7jBL,EA6jBWszB,EAAM/kB,EAAMV,WAAWjb,KACpCA,IACJ,KAAOoN,EAAIpN,GA/jBL,EA+jBW0gC,EAAM/kB,EAAMV,WAAW7N,EAAI,KACxCA,IACJrR,KAAK+sC,aAAe,CAAC9oC,EAAGoN,GACxBrR,KAAK2sC,SAAWE,GAAMF,EACtB3sC,KAAK4sC,UAAYE,GAAMF,CAC3B,CACA,WAAIpe,GACA,OAAOxuB,KAAK4f,MAAM/X,MAAM7H,KAAK+sC,aAAa,GAAI/sC,KAAK+sC,aAAa,GACpE,EAGJ,MAAMC,WAAiBR,GACnB,WAAA5sC,CAAYggB,EAAO6hB,EAAOC,EAAKr2B,EAASiuB,GACpC,MAAM,YAAE2T,EAAW,aAAEC,EAAY,iBAAEC,EAAgB,kBAAEC,GAAsB/hC,GACpEgiC,EAAYC,GAAY,CAAC7L,EAAQ0L,EAAiBvyC,OAAQ8mC,EAAM0L,EAAkBxyC,QACzFyoC,MAAMkK,GAAUC,IAAK,CAACH,EAAYC,GAAW1tB,EAAO6hB,EAAOC,EAAKuL,EAAaC,EAAc5T,GAC3Ft5B,KAAKytC,UAAY,IAAIC,GAAU9tB,EAAOvU,EAAQsiC,UAAWrU,EAAMt5B,KAAK+sC,cACpE/sC,KAAK1K,KAAO0K,KAAKytC,UAAUG,cAC3B5tC,KAAKytC,UAAU5I,OAAO7kC,KAAK1K,KAAM,yCACjC0K,KAAKytC,UAAUI,WACnB,CACA,QAAIhzC,GACA,OAAOmF,KAAKytC,UAAU7tB,MAAM/X,MAAM7H,KAAKytC,UAAU7kC,EAAG5I,KAAK+sC,aAAa,GAC1E,EAGJ,MAAMe,WAAoBtB,GACtB,WAAA5sC,CAAYggB,EAAO6hB,EAAOC,EAAKr2B,EAASiuB,GACpC,MAAM,eAAEyU,EAAc,gBAAEC,EAAe,oBAAEC,EAAmB,qBAAEC,GAAyB7iC,EACjF8iC,EAAa,CAAC1M,EAAQwM,EAAoBrzC,OAAQ8mC,EAAMwM,EAAqBtzC,QACnFyoC,MAAMkK,GAAUa,OAAQD,EAAYvuB,EAAO6hB,EAAOC,EAAKqM,EAAgBC,EAAiB1U,EAC5F,EAGJ,MAAM+U,WAAkB7M,EACpB,WAAA5hC,CAAYggB,EAAO6hB,EAAOC,EAAKpI,GAC3B+J,MAAMkK,GAAUe,KAAM1uB,EAAO6hB,EAAOC,EAAKpI,GACzCt5B,KAAK4f,MAAQA,EACb5f,KAAKyhC,MAAQA,EACbzhC,KAAK0hC,IAAMA,EACX1hC,KAAKs5B,KAAOA,EACZt5B,KAAK2sC,SAAW,EAChB3sC,KAAK4sC,UAAY,CACrB,CACA,UAAA2B,GACI,OAAOvuC,KAAK4f,MAAM/X,MAAM7H,KAAKyhC,MAAQzhC,KAAK2sC,SAAU3sC,KAAK0hC,IAAM1hC,KAAK4sC,UACxE,EAGJ,MAAM4B,WAAoBhN,EACtB,WAAA5hC,CAAYggB,EAAO6hB,EAAOC,EAAKpI,GAC3B+J,MAAMkK,GAAUrgB,OAAQtN,EAAO6hB,EAAOC,EAAKpI,GAC3Ct5B,KAAK4f,MAAQA,EACb5f,KAAKyhC,MAAQA,EACbzhC,KAAK0hC,IAAMA,EACX1hC,KAAKs5B,KAAOA,EACZt5B,KAAKwuB,QAAUtB,OAAOltB,KAAK2hC,UAC/B,EAGJ,MAAM8M,WAAwBjN,EAC1B,WAAA5hC,CAAYggB,EAAO6hB,EAAOC,EAAKpI,GAC3B+J,MAAMkK,GAAUmB,KAAM9uB,EAAO6hB,EAAOC,EAAKpI,GACzCt5B,KAAK4f,MAAQA,EACb5f,KAAKyhC,MAAQA,EACbzhC,KAAK0hC,IAAMA,EACX1hC,KAAKs5B,KAAOA,EACZt5B,KAAKwuB,QAAUxuB,KAAK2hC,SACxB,EAGJ,MAAMgN,WAAqBnN,EACvB,WAAA5hC,CAAYggB,EAAO6hB,EAAOC,EAAKpI,GAC3B+J,MAAMkK,GAAUqB,QAAShvB,EAAO6hB,EAAOC,EAAKpI,GAC5Ct5B,KAAK4f,MAAQA,EACb5f,KAAKyhC,MAAQA,EACbzhC,KAAK0hC,IAAMA,EACX1hC,KAAKs5B,KAAOA,EACZt5B,KAAK6uC,QAAU7uC,KAAK2hC,UACpB3hC,KAAKwuB,QAAUyX,EAAcjmC,KAAK6uC,QACtC,EAGJ,MAAMC,GAAsB,CACxB,KAAM,EACN,KAAM,EACN,IAAK,EACL,IAAK,EACL,KAAM,EACN,KAAM,EACN,SAAY,EACZ,IAAO,EACP,IAAO,EACP,GAAM,GAEJC,GAAgB,CAClB,KAAM,EACN,KAAM,EACN,IAAK,EACL,IAAK,EACL,KAAM,EACN,KAAM,EACN,SAAY,EACZ,IAAO,EACP,IAAO,EACP,GAAM,GAEV,MAAMC,WAAsBxN,EACxB,WAAA5hC,CAAYggB,EAAO6hB,EAAOC,EAAKpI,GAC3B+J,MAAMkK,GAAU0B,SAAUrvB,EAAO6hB,EAAOC,EAAKpI,GAC7Ct5B,KAAK4f,MAAQA,EACb5f,KAAKyhC,MAAQA,EACbzhC,KAAK0hC,IAAMA,EACX1hC,KAAKs5B,KAAOA,EACZt5B,KAAKkvC,SAAWlvC,KAAK2hC,SACzB,CACA,aAAAwN,GACI,MAAMn5C,EAAMgK,KAAK2hC,UACjB,OAAO3rC,KAAO84C,GAAsBA,GAAoB94C,GAAO,CACnE,EAGJ,MAAMo5C,WAA4B5N,EAC9B,WAAA5hC,CAAY4lC,EAAUjkC,EAAOqe,EAAO6hB,EAAOC,EAAKpI,GAC5C+J,MAAMkK,GAAU8B,eAAgBzvB,EAAO6hB,EAAOC,EAAKpI,GACnDt5B,KAAKwlC,SAAWA,EAChBxlC,KAAKuB,MAAQA,CACjB,EAGJ,MAAM+tC,WAAoB9N,EACtB,WAAA5hC,CAAYtK,EAAMuF,EAAM+kB,EAAO6hB,EAAOC,EAAKpI,GACvC+J,MAAMkK,GAAUgC,OAAQ3vB,EAAO6hB,EAAOC,EAAKpI,GAC3Ct5B,KAAK1K,KAAOA,EACZ0K,KAAKnF,KAAOA,CAChB,EAGJ,MAAM20C,WAAkBhO,EACpB,WAAA5hC,CAAYggB,EAAO6hB,EAAOC,EAAKpsC,EAAM0J,EAAOs6B,GACxC+J,MAAMkK,GAAUkC,KAAM7vB,EAAO6hB,EAAOC,EAAKpI,GACzCt5B,KAAK4f,MAAQA,EACb5f,KAAKyhC,MAAQA,EACbzhC,KAAK0hC,IAAMA,EACX1hC,KAAK1K,KAAOA,EACZ0K,KAAKhB,MAAQA,EACbgB,KAAKs5B,KAAOA,CAChB,EAGJ,MAAMoW,GAAO,aACPC,GAAO,QACPC,GAAa,CACfp3C,EAAG,KACHkU,EAAG,KACHkV,EAAG,KACHvQ,EAAG,KACHhM,EAAG,KACH7K,EAAG,MAEP,SAASq1C,GAAO5+B,GACZ,MAAMyrB,EAAOzrB,EAAEiO,WAAW,GAC1B,OAAIwd,GAAQ,GACDA,EAAO,GACdA,GAAQ,GACDA,EAAO,GACXA,EAAO,EAClB,CAoCA,MAAMoT,WAAoBtO,EACtB,WAAA5hC,CAAYggB,EAAO6hB,EAAOC,EAAKpI,GAC3B+J,MAAMkK,GAAUwC,OAAQnwB,EAAO6hB,EAAOC,EAAKpI,GAC3Ct5B,KAAK4f,MAAQA,EACb5f,KAAKyhC,MAAQA,EACbzhC,KAAK0hC,IAAMA,EACX1hC,KAAKs5B,KAAOA,EACZt5B,KAAKwuB,QA1Cb,SAA4Bxd,GACxB,IAAIo5B,EAAM,GACV,IAAK,IAAI5oC,EAAI,EAAGA,EAAIwP,EAAIpW,OAAS,EAAG4G,IAChC,GAAe,OAAXwP,EAAIxP,GAIR,QAA+BvG,IAA3B20C,GAAW5+B,EAAIxP,EAAI,IACnB4oC,GAAOwF,GAAW5+B,IAAMxP,SAEvB,GAAmB,MAAfwP,EAAIxP,EAAI,GAAY,CACzB,IAAIvL,EAAM,EACN6rB,EAAItgB,EAAI,EACZ,KAAOsgB,GAAKtgB,EAAI,GAAKkuC,GAAK/5C,KAAKqb,EAAI8Q,KAC/B7rB,EAAY,GAANA,EAAW45C,GAAO7+B,EAAI8Q,MAEhCtgB,EAAIsgB,EAAI,EACRsoB,GAAO9qB,OAAOC,aAAatpB,EAC/B,MACK,GAAK05C,GAAKh6C,KAAKqb,EAAIxP,EAAI,IAGvB,CACD,IAAIsgB,EAAItgB,EAAI,EACRvL,EAAM,EACV,KAAO6rB,GAAKtgB,EAAI,GAAKmuC,GAAKh6C,KAAKqb,EAAI8Q,KAC/B7rB,EAAY,EAANA,EAAU45C,GAAO7+B,EAAI8Q,MAE/BtgB,EAAIsgB,EAAI,EACRsoB,GAAO9qB,OAAOC,aAAatpB,EAC/B,MAVIm0C,GAAOp5B,IAAMxP,QAhBb4oC,GAAOp5B,EAAIxP,GA4BnB,OAAO4oC,CACX,CASuB4F,CAAmBhwC,KAAK2hC,UAC3C,EAGJ,MAAMsO,WAAmBzO,EACrB,WAAA5hC,CAAYggB,EAAO6hB,EAAOC,EAAKwO,EAAKC,EAAK7W,GACrC+J,MAAMkK,GAAU6C,MAAOxwB,EAAO6hB,EAAOC,EAAKpI,GAC1Ct5B,KAAK4f,MAAQA,EACb5f,KAAKyhC,MAAQA,EACbzhC,KAAK0hC,IAAMA,EACX1hC,KAAKkwC,IAAMA,EACXlwC,KAAKmwC,IAAMA,EACXnwC,KAAKs5B,KAAOA,CAChB,EAMJ,MAAM+W,WAAuB7D,GACzB,WAAA5sC,CAAYggB,EAAO6hB,EAAOC,EAAKr2B,EAASiuB,GACpC+J,MAAMkK,GAAUC,IAAK,CAAC/L,EAAOC,GAAM9hB,EAAO6hB,EAAOC,GAAK,GAAO,EAAOpI,GACpEt5B,KAAKytC,UAAY,IAAIC,GAAU9tB,EAAOvU,EAAQsiC,UAAWrU,EAAMt5B,KAAK+sC,cACpE/sC,KAAK1K,KAAO0K,KAAKytC,UAAUG,cAC3B5tC,KAAKytC,UAAU5I,OAAO7kC,KAAK1K,KAAM,6BACjC0K,KAAKytC,UAAUI,YACf7tC,KAAKnF,KAAOmF,KAAKytC,UAAU5D,WAC/B,EAQJ,MAAMyG,WAA2B9O,EAC7B,WAAA5hC,CAAY4hB,EAAS+uB,EAAS3wB,EAAO6hB,EAAOC,EAAKpI,GAC7C+J,MAAMkK,GAAUiD,cAAe5wB,EAAO6hB,EAAOC,EAAKpI,GAClDt5B,KAAKwhB,QAAUA,EACfxhB,KAAKuwC,QAAUA,EACfvwC,KAAK4f,MAAQA,EACb5f,KAAKyhC,MAAQA,EACbzhC,KAAK0hC,IAAMA,EACX1hC,KAAKs5B,KAAOA,CAChB,EAGJ,MAAMmX,GAAW,CACbp4C,IAAK,IAAMtB,KAAKsB,OAEpB,SAASq4C,KACL,MAA0B,iBAAXC,QAAuBA,OAAO9/B,aACtB,iBAAXnc,QAAuBA,OAAOmc,aACtC4/B,EACR,CAEA,MAAMG,GACF,WAAAhxC,GACII,KAAK6wC,OAAS,EAClB,CACA,KAAAC,CAAMC,GACF/wC,KAAK6wC,QAAUj8B,EAAUm8B,EAC7B,EAGJ,MAAMC,GACF,WAAApxC,GAGI,MAFAI,KAAK6wC,OAAS,GACd7wC,KAAKixC,OAAS,KACR,IAAIrmB,MAAM,qCACpB,EAGJ,MAAMsmB,GACF,WAAAtxC,GACII,KAAK6wC,OAAS,EAClB,CACA,KAAAC,CAAMC,GAMkB,iBALpBA,EAAOv8B,EAAQu8B,KAKiC,KAAhB/wC,KAAK6wC,OACjC7wC,KAAK6wC,OAASE,EAGd/wC,KAAK6wC,OAASj8B,EAAU5U,KAAK6wC,QAAUj8B,EAAUm8B,EAEzD,EAGJ,MAAMI,GACF,2BAAAC,CAA4BC,EAAWxiC,GACnC,MAAMyiC,EAAU,IAAIN,GAGpB,OAFAxwC,QAAQC,UAAUC,MAAK,IAAMomC,GAAU9mC,KAAKuxC,gBAAgBF,EAAWxiC,EAAKyiC,MACvE5wC,MAAK,IAAM4wC,EAAQ5P,QAAO7gC,GAAOywC,EAAQx8B,MAAMjU,KAC7CywC,EAAQL,MACnB,CACA,gBAACM,CAAgBF,EAAWxiC,EAAKyiC,GACxBA,IACDA,EAAUziC,EAAIm5B,KAAKwJ,eAAiB,IAAIN,GAAuB,IAAIN,IAEvE,MAAMzM,EAAS,GACf,IAAK,MAAMF,KAAOoN,EAAW,CACzBxiC,EAAI4iC,YAAYlF,MAAMmE,KAAiBr4C,OACvC,IAEI,MAAM04C,QAAa9M,EAAIyN,OAAO7iC,EAAKyiC,GAGnC,GADAP,GAAQO,EAAQR,MAAMC,GAClBO,EAAe,OAAKA,EAAkB,SACtC,KACR,CACA,MAAO9nB,GACH,MAAM3oB,EAAMuiC,EAAYS,GAAGra,GAAKA,EAAI,IAAIwa,EAAYxa,EAAGya,GACvD,IAAIp1B,EAAIm5B,KAAK2J,eAGT,MAAM9wC,EAFNsjC,EAAO5+B,KAAK1E,EAGpB,CACJ,CACA,GAAIsjC,EAAOvpC,OACP,MAAM,IAAIspC,EAAaC,GAE3B,OAAOmN,EAAQT,MACnB,EAGJ,MAAMe,GACF,WAAAhyC,CAAYm9B,GACR/8B,KAAK6xC,QAAU,IAAIC,GAAU/U,GACjC,CACA,SAACgV,CAASljC,EAAKmjC,GACXnN,EAAOh2B,EAAK,2CACZ,MAAMojC,EAAW,GACjB,IAAK,MAAM3gC,KAAStR,KAAK6xC,QACrB,GAAIK,GAAgB5gC,GAAQ,CACxB,MAAMD,EAAI4gC,EAAS9uC,MACnB,IAAI5C,EACJ,GAAsC,IAAlCwuC,GAAcz9B,EAAM49B,UACpB3uC,QAAesO,EAAIm5B,KAAK2F,UAAUr8B,EAAM49B,UAAU79B,EAAGxC,OAEpD,CACD,MAAM5K,EAAIguC,EAAS9uC,MACnB5C,QAAesO,EAAIm5B,KAAK2F,UAAUr8B,EAAM49B,UAAUjrC,EAAGoN,EAAGxC,EAC5D,CACAojC,EAAS1sC,KAAKhF,EAClB,MAEI0xC,EAAS1sC,WAAW4sC,GAAU7gC,EAAOzC,EAAKmjC,IAGlD,OAAOC,EAAS,EACpB,CACA,KAAAtG,GACI,QAAS3rC,KAAK6xC,QAAQj3C,MAC1B,EAEJ,SAAUu3C,GAAU7gC,EAAOzC,EAAKmjC,GAAU,GACtC,GAAK1gC,EAEL,MAAI,YAAaA,EACNA,EAAMkd,QACb4jB,GAAsB9gC,SAK9B,UAAkCA,EAAOzC,EAAKmjC,GAC1C,MAAMzwC,EAAQ,GACd,IAAK,MAAMyY,KAAQ1I,EAAM/P,MACrBA,EAAMgE,WAAY4sC,GAAUn4B,EAAMnL,GAAK,IAE3C,IACI,GAAIyC,EAAMk0B,SAAU,CAChB,MAAMA,QAAiB2M,GAAU7gC,EAAMk0B,SAAU32B,EAAKmjC,GACtD,aAAanjC,EAAIwjC,cAAc7M,EAAUjkC,EAC7C,CAEI,aAAasN,EAAIyjC,KAAK/wC,EAE9B,CACA,MAAOioB,GACH,GAAIwoB,GAAsB,mCAAXxoB,EAAEl0B,KACb,OAAO,KACX,MAAM,IAAK8uC,EAAuB5a,EAAGlY,EACzC,CACJ,CAvBqBihC,CAAwBjhC,EAAOzC,EAAKmjC,GACjDQ,GAAalhC,SA0BrB,UAAyBA,EAAOzC,GAC5B,MAAM4jC,QAAYN,GAAU7gC,EAAM4+B,IAAKrhC,GACjC6jC,QAAaP,GAAU7gC,EAAM6+B,IAAKthC,GACxC,OAAOgT,GAAO4wB,GAAMC,EAAO,EAC/B,CA7BqBC,CAAerhC,EAAOzC,QADvC,CAEJ,CAqBA,SAAS+jC,GAAgBthC,GACrB,OAAOA,EAAMkd,OACjB,CAMA,SAAUsjB,GAAU/U,GAChB,MAAM8V,EAAM,GACZ,IAAK,MAAMvhC,KAASyrB,EAChB,GAAImV,GAAgB5gC,GAAQ,CACxB,KAAOuhC,EAAIj4C,QAAUi4C,EAAIA,EAAIj4C,OAAS,GAAGu0C,gBAAkB79B,EAAM69B,uBACvD0D,EAAI1vC,MAEd0vC,EAAIttC,KAAK+L,EACb,YAEUA,EAEd,KAAOuhC,EAAIj4C,cACDi4C,EAAI1vC,KAElB,CAEA,SAAS2vC,GAAS78C,EAAK4Y,GACnB,OAAQkkC,GAAQ98C,EAAK4Y,EACzB,CACA,SAASkkC,GAAQ98C,EAAK4Y,GAElB,OADA5Y,EAAMue,EAAQve,GACV4Y,EAAIm5B,KAAKgL,UACD/8C,GAGO,IAARA,SAA+BA,CAE9C,CAEA,MAAMg9C,GAAmB,CACrB,KAAMhO,GACN,KAAM,CAAChhC,EAAGoN,KAAO4zB,GAAOhhC,EAAGoN,GAC3B,IAAK,CAACpN,EAAGoN,IACD00B,EAAa9hC,GACNA,EAAEihC,GAAG7zB,GACZ00B,EAAa10B,GACNA,EAAE+zB,GAAGnhC,GACTuQ,EAAQvQ,GAAKuQ,EAAQnD,GAEhC,IAAK,CAACpN,EAAGoN,IACD00B,EAAa9hC,GACNA,EAAEmhC,GAAG/zB,GACZ00B,EAAa10B,GACNA,EAAE6zB,GAAGjhC,GACTuQ,EAAQvQ,GAAKuQ,EAAQnD,GAEhC,KAAM,CAACpN,EAAGoN,IACF00B,EAAa9hC,GACNA,EAAEkhC,IAAI9zB,GACb00B,EAAa10B,GACNA,EAAEg0B,IAAIphC,GACVuQ,EAAQvQ,IAAMuQ,EAAQnD,GAEjC,KAAM,CAACpN,EAAGoN,IACF00B,EAAa9hC,GACNA,EAAEohC,IAAIh0B,GACb00B,EAAa10B,GACNA,EAAE8zB,IAAIlhC,GACVuQ,EAAQvQ,IAAMuQ,EAAQnD,GAEjC,SAAY,CAACpN,EAAGoN,IAERnW,EADJ+I,EAAIuQ,EAAQvQ,IAEDA,EAAEsmC,MAAM/oC,GAAMyjC,GAAOzjC,EAAG6P,OAC/B6wB,EAAWj+B,aAA6B,EAASA,EAAE/L,UAC5C+L,EAAE/L,QAAQsc,EAAQnD,KAAO,EAGxC,IAAO,CAAC7W,EAAGqU,IAAQkkC,GAAQv+B,EAAQha,GAAIqU,GACvC,IAAO,CAAC5K,EAAGoN,EAAGxC,IAAQikC,GAASt+B,EAAQvQ,GAAI4K,IAAQikC,GAASt+B,EAAQnD,GAAIxC,GACxE,GAAM,CAAC5K,EAAGoN,EAAGxC,IAAQikC,GAASt+B,EAAQvQ,GAAI4K,IAAQikC,GAASt+B,EAAQnD,GAAIxC,IAE3E,SAASo2B,GAAOiL,EAAKC,GACjB,OAAIpK,EAAamK,GACNA,EAAIjL,OAAOkL,GAClBpK,EAAaoK,GACNA,EAAIlL,OAAOiL,IACtBA,EAAM17B,EAAQ07B,GACdC,EAAM37B,EAAQ27B,GACVj1C,EAAQg1C,GACDh1C,EAAQi1C,IAIvB,SAAqBD,EAAKC,GACtB,OAAID,EAAIt1C,SAAWu1C,EAAIv1C,SAEfs1C,EAAI3F,MAAK,CAACvrC,EAAOwC,KAAOyjC,GAAOjmC,EAAOmxC,EAAI3uC,KACtD,CAR+B0xC,CAAYhD,EAAKC,GAErCD,IAAQC,EACnB,CAOA,MAAM/yC,GACF,WAAAwC,CAAY5J,EAAKgJ,EAAO+B,EAAMurB,GAC1BtsB,KAAKhK,IAAMA,EACXgK,KAAKhB,MAAQA,EACbgB,KAAKe,KAAOA,EACZf,KAAKssB,KAAOA,CAChB,EAEJ,MAAM6mB,GACF,WAAAvzC,CAAYyhB,EAAOygB,EAAO,GACtB9hC,KAAKqhB,MAAQA,EACbrhB,KAAK8hC,KAAOA,EACZ9hC,KAAKsG,MAAQ,CAAC,EACdtG,KAAKi/B,KAAO,IAAI7hC,GAAK,OAAQ,KAAM,KAAM,MACzC4C,KAAKozC,KAAO,IAAIh2C,GAAK,OAAQ,KAAM,KAAM,MACzC4C,KAAKi/B,KAAKl+B,KAAOf,KAAKozC,KACtBpzC,KAAKozC,KAAK9mB,KAAOtsB,KAAKi/B,IAC1B,CACA,KAAA6R,CAAM96C,EAAKgJ,GACP,GAAIgB,KAAKsG,MAAMtQ,GACXgK,KAAKsG,MAAMtQ,GAAKgJ,MAAQA,MAEvB,CACD,MAAM6J,EAAO,IAAIzL,GAAKpH,EAAKgJ,EAAOgB,KAAKi/B,KAAKl+B,KAAMf,KAAKi/B,MACvDj/B,KAAKi/B,KAAKl+B,KAAKurB,KAAOzjB,EACtB7I,KAAKi/B,KAAKl+B,KAAO8H,EACjB7I,KAAKsG,MAAMtQ,GAAO6S,EAClB7I,KAAK8hC,OACL9hC,KAAKqzC,aACT,CACJ,CACA,IAAAC,CAAKt9C,GACD,IAAKgK,KAAKsG,MAAMtQ,GACZ,OACJ,MAAM,MAAEgJ,GAAUgB,KAAKsG,MAAMtQ,GAG7B,OAFAgK,KAAK+5B,OAAO/jC,GACZgK,KAAK8wC,MAAM96C,EAAKgJ,GACTA,CACX,CACA,MAAA+6B,CAAO/jC,GACH,MAAM6S,EAAO7I,KAAKsG,MAAMtQ,GACxB6S,EAAKyjB,KAAKvrB,KAAO8H,EAAK9H,KACtB8H,EAAK9H,KAAKurB,KAAOzjB,EAAKyjB,YACftsB,KAAKsG,MAAMtQ,GAClBgK,KAAK8hC,MACT,CACA,KAAAvxB,GACIvQ,KAAKi/B,KAAKl+B,KAAOf,KAAKozC,KACtBpzC,KAAKozC,KAAK9mB,KAAOtsB,KAAKi/B,KACtBj/B,KAAK8hC,KAAO,EACZ9hC,KAAKsG,MAAQ,CAAC,CAClB,CACA,WAAA+sC,GACQrzC,KAAK8hC,KAAO9hC,KAAKqhB,OACjBrhB,KAAK+5B,OAAO/5B,KAAKozC,KAAK9mB,KAAKt2B,IACnC,EAGJ,SAASu9C,GAAWx3C,EAAMy3C,GACtB,MAAM/lC,EAAOtR,SAASC,cAAc,QACpCqR,EAAK+J,KAAOzb,EACZ,MAAMkjC,EAAO9iC,SAASs3C,qBAAqB,QAAQ,GACnDxU,EAAK/hC,aAAauQ,EAAMwxB,EAAKjY,YAC7B,MAAMzuB,EAAI4D,SAASC,cAAc,KACjC7D,EAAEif,KAAOg8B,EACT,MAAME,EAAWn7C,EAAEif,KAEnB,OADAynB,EAAKhjC,YAAYwR,GACVimC,CACX,CAsDA,IAAIC,GAAkB9xC,OAAO+xC,OAAO,CAClCznB,UAAW,KACX1rB,QAvDF,SAAiB1E,EAAM83C,EAAUC,GAI7B,OAHI/3C,EAAKnB,QAAyB,MAAfkR,EAAK/P,KACpBA,GAAQ,KACAw3C,GAAWx3C,EAAM83C,GAClBvrC,QAAQ,6BAA6B,CAAC0I,EAAKvJ,EAAQ+rC,KAC1D,MAAM1nC,EAAO0nC,EAAK/vC,MAAM,KAAKN,MAC7B,MAAI,SAASxN,KAAKmW,GACPkF,EACJvJ,EAAS+rC,EAAOM,CAAG,GAElC,EA8CEC,SA7CF,SAAkBpqC,GACd,OAAO48B,EAAUvmC,UAAM,OAAQ,GAAQ,YACnC,OAAO,IAAIQ,SAAQ,CAACC,EAASK,KACzB,MAAMiU,EAAM,IAAIC,eAChBD,EAAIG,OAAS,KACLH,EAAIM,QAAU,KAAON,EAAIM,OAAS,IAClC5U,EAAQsU,EAAIi/B,cAGZlzC,EAAO,IAAI8pB,MAAM7V,EAAIk/B,YACzB,EAEJl/B,EAAIK,QAAU,KACVtU,EAAO,IAAI8pB,MAAM,oDAAoD,EAEzE7V,EAAIE,KAAK,MAAOtL,GAChBoL,EAAIO,MAAM,GAElB,GACJ,EA2BE4+B,aA1BF,SAAsBvqC,GAClB,MAAMoL,EAAM,IAAIC,eAGhB,GAFAD,EAAIE,KAAK,MAAOtL,GAAK,GACrBoL,EAAIO,OACAP,EAAIM,OAAS,KAAON,EAAIM,QAAU,IAClC,MAAM,IAAIuV,MAAM7V,EAAIk/B,YAExB,OAAOl/B,EAAIi/B,YACf,EAmBEG,OAlBF,SAAgBN,GACZ,OAAOtN,EAAUvmC,UAAM,OAAQ,GAAQ,YACnC,OAAO,CACX,GACJ,EAeEo0C,WAdF,SAAoBP,GAChB,OAAO,CACX,EAaEQ,QAZF,SAAiBR,GACb,OAAON,GAAWM,EAAU,IAChC,EAWES,IAVU,MAqBZ,SAASlZ,GAAKp8B,EAAOu1C,EAAQ,GACzB,OAAO5/B,KAAKC,UAAU5V,EAAO,KAAMu1C,EACvC,CAsBA,IAAIC,GAAO,CACPC,QAjCJ,SAAuBz1C,EAAO01C,KAAiB75C,GAE3C,OAAIK,EADJ8D,EAAQwV,EAAQxV,KACM8U,EAAS9U,GACpBA,EAAMpE,OAASoE,EAAQ01C,IACpB,IAAV11C,IAAmB,IAAK21C,IAAI95C,GAAOgd,IAAI,kBAEpCk7B,GAAQ/zC,EAAOgB,KAAKukB,SAAWmwB,EAAe11C,EACzD,EA2BI41C,IANQ,CACRA,KAAK,EACLC,QAAS9R,GAKT+R,QAAS1Z,GACT2Z,WAXJ,SAAoB/1C,GAChB,OAAOkuB,OAAOluB,EAClB,EAUIo8B,QACA4Z,QA3BJ,SAAiBh2C,EAAOu1C,EAAQ,GAC5B,MAAMU,EAAY,GAClB,OAAOtgC,KAAKC,UAAU5V,GAAO,SAAUjE,EAAMiE,GACzC,GAAqB,iBAAVA,GAAgC,OAAVA,EAC7B,OAAOA,EAEX,KAAOi2C,EAAUr6C,OAAS,GAAKq6C,EAAUA,EAAUr6C,OAAS,KAAOoF,MAC/Di1C,EAAU9xC,MACd,OAAI8xC,EAAUj7C,SAASgF,GACZ,cACXi2C,EAAU1vC,KAAKvG,GACRA,EACX,GAAGu1C,EACP,GAiBA,MAAMW,GAAY,CACd,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,SAEHC,GAAc,CAChB,QAAS,IACT,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,QAAS,KAEb,SAAS,GAAOnkC,GAGZ,OAFAA,EAAM4D,EAAU5D,GAChBhR,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAI1I,QAAQ,cAAcrQ,GAAKi9C,GAAUj9C,IACpD,CAIA,SAAS,GAAS+Y,GAGd,OAFAA,EAAM4D,EAAU5D,GAChBhR,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAI1I,QAAQ,0BAA0BrQ,GAAKk9C,GAAYl9C,IAClE,CAeA,IAAIo9C,GAA2BxzC,OAAO+xC,OAAO,CAC3CznB,UAAW,KACXmpB,OAAQ,GACRC,WAzBF,SAAoBvkC,GAChB,OAAO,GAAO3O,KAAKrC,KAAMgR,EAC7B,EAwBEwkC,YAlBF,SAAqBxkC,GACjB,OAAO,GAAO3O,KAAKrC,KAAM,GAASqC,KAAKrC,KAAMgR,GACjD,EAiBEykC,cAhBF,SAAuBj7C,GACnB,MAAMwW,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAI1I,QAAQ,UAAW,WAClC,EAaEotC,WAZF,SAAoBl7C,GAChB,MAAMwW,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAI1I,QAAQ,2EAA4E,GACnG,IAWA,MAAMqtC,GACF,WAAA/1C,CAAYkQ,GACR9P,KAAK8P,QAAUA,EACf9P,KAAKs0C,IAAM,GACf,CACA,MAAAH,CAAON,GACH,OAAOtN,EAAUvmC,UAAM,OAAQ,GAAQ,YACnC,OAAOA,KAAKo0C,WAAWP,EAC3B,GACJ,CACA,UAAAO,CAAWP,GACP,OAAQxR,EAAMriC,KAAK8P,QAAQ+jC,GAC/B,CACA,QAAAE,CAASF,GACL,OAAOtN,EAAUvmC,UAAM,OAAQ,GAAQ,YACnC,OAAOA,KAAKk0C,aAAaL,EAC7B,GACJ,CACA,YAAAK,CAAaL,GACT,MAAMrlB,EAAUxuB,KAAK8P,QAAQ+jC,GAC7B,GAAIxR,EAAM7T,GACN,MAAM,IAAI5D,MAAM,WAAWipB,KAC/B,OAAOrlB,CACX,CACA,OAAA6lB,CAAQR,GACJ,MAAM+B,EAAW/B,EAASpwC,MAAMzD,KAAKs0C,KAErC,OADAsB,EAASzyC,MACFyyC,EAASlwC,KAAK1F,KAAKs0C,IAC9B,CACA,OAAA7zC,CAAQo1C,EAAKvc,EAAMwa,GAEf,GADAxa,GAAQwa,EACI,MAAR+B,EACA,OAAOvc,EACX,MAAMsc,EAAWC,EAAIpyC,MAAM,OAC3B,IAAK,MAAMqyC,KAAWxc,EAAK71B,MAAMzD,KAAKs0C,KAClB,MAAZwB,GAA+B,KAAZA,IAEF,OAAZA,GACDF,EAASh7C,OAAS,GAAqB,KAAhBg7C,EAAS,KAChCA,EAASzyC,MAGbyyC,EAASrwC,KAAKuwC,IAEtB,OAAOF,EAASlwC,KAAK1F,KAAKs0C,IAC9B,EAGJ,MAAMyB,GAAiB,CACnBh6C,KAAM,CAAC,KACPi6C,QAAS,CAAC,KACVC,SAAU,CAAC,KACXC,mBAAmB,EACnBC,eAAe,EACfC,kBAAmB,IACnB9vC,WAAOrL,EACPo7C,QAAS,GACT1C,GAAIA,GACJ2C,iBAAiB,EACjBtD,UAAU,EACVuD,WAAY,iCACZrL,OAAQ,GACRgC,cAAc,EACdD,aAAa,EACbe,iBAAiB,EACjBD,gBAAgB,EAChByI,QAAQ,EACRrJ,iBAAkB,KAClBC,kBAAmB,KACnBa,oBAAqB,KACrBC,qBAAsB,KACtBuI,mBAAmB,EACnBC,eAAe,EACfC,iBAAiB,EACjBC,iBAAiB,EACjBC,WAAW,EACXC,QAAS,CAAC,EACVtF,gBAAgB,EAChB7D,UAAWsF,GACXmC,YAAa2B,IACbC,WAAYD,IACZtF,YAAasF,KAEjB,SAASE,GAAU5rC,GACf,IAAIogC,EAAIyL,EAoCqBC,EA7B7B,GANI9rC,EAAQ9V,eAAe,UAClB8V,EAAQ9V,eAAe,cACxB8V,EAAQ4qC,SAAW5qC,EAAQtP,MAC1BsP,EAAQ9V,eAAe,aACxB8V,EAAQ2qC,QAAU3qC,EAAQtP,OAE9BsP,EAAQ9V,eAAe,SAAU,CACjC,IAAI+Q,EAEAA,EADyB,iBAAlB+E,EAAQ/E,MACP+E,EAAQ/E,MAAQ,EAAI,IAAI6sC,GAAI9nC,EAAQ/E,YAASrL,EACvB,iBAAlBoQ,EAAQ/E,MACZ+E,EAAQ/E,MAER+E,EAAQ/E,MAAQ,IAAI6sC,GAAI,WAAQl4C,EAC5CoQ,EAAQ/E,MAAQA,CACpB,CAkBA,OAjBA+E,EAAUxJ,OAAOM,OAAON,OAAOM,OAAON,OAAOM,OAAO,CAAC,EAAG4zC,IAAkB1qC,EAAQ8qC,cAAgB,CAAEG,iBAAiB,GAAU,CAAC,GAAKjrC,IACvHsoC,GAAGU,SAAYhpC,EAAQsoC,GAAGW,MAAQjpC,EAAQ6qC,oBAEpD7qC,EAAQ6qC,mBAAoB,GAEhC7qC,EAAQtP,KAAOq7C,GAAuB/rC,EAAQtP,MAC9CsP,EAAQ4qC,SAAWmB,GAAuB/rC,EAAQ4qC,UAClD5qC,EAAQ2qC,QAAUoB,GAAuB/rC,EAAQ2qC,SACjD3qC,EAAQgsC,aAAehsC,EAAQgsC,eAYR,YADMF,EAX0C9rC,EAAQgsC,cAapE,GACY,SAAnBF,EACO3C,GAAKpZ,MAChByJ,EAAO3C,EAAWiV,GAAiB,wDAC5BA,IAhBF9rC,EAAQ6/B,SACT7/B,EAAQ6/B,OAAkH,QAAxGgM,EAAoC,QAA9BzL,EAAKjB,YAAwC,IAAPiB,OAAgB,EAASA,IAAKD,kBAAkBN,cAA2B,IAAPgM,EAAgBA,EAAK,SAEvJ7rC,EAAQgmC,YACRhmC,EAAQsoC,GAAK,IAAIgC,GAAMtqC,EAAQgmC,WAC/BhmC,EAAQ6qC,mBAAoB,EAC5B7qC,EAAQtP,KAAOsP,EAAQ4qC,SAAW5qC,EAAQ2qC,QAAU,KAEjD3qC,CACX,CASA,SAAS+rC,GAAuBp4C,GAC5B,IAAIs4C,EAAO,GAKX,OAJIp8C,EAAQ8D,KACRs4C,EAAOt4C,GACP8U,EAAS9U,KACTs4C,EAAO,CAACt4C,IACLs4C,CACX,CAsBA,SAAS3K,GAASr7B,EAAOklC,GACrB,IAAKllC,IAAUimC,GAAYjmC,GACvB,OACJ,MAAMkmC,EAAOhB,EAj7CH,EAEO,GAg7CjB,KAAO7R,EAAMrzB,EAAMsO,MAAMV,WAAW5N,EAAMowB,IAAM,EAAIpwB,EAAMs7B,YAAc4K,GACpElmC,EAAMs7B,WACd,CACA,SAASA,GAAUt7B,EAAOklC,GACtB,IAAKllC,IAAUimC,GAAYjmC,GACvB,OACJ,MAAMkmC,EAAOhB,EAx7CH,EAEO,GAu7CjB,KAAO7R,EAAMrzB,EAAMsO,MAAMV,WAAW5N,EAAMmwB,MAAQnwB,EAAMq7B,WAAa6K,GACjElmC,EAAMq7B,WAC+C,OAArDr7B,EAAMsO,MAAM1pB,OAAOob,EAAMmwB,MAAQnwB,EAAMq7B,WACvCr7B,EAAMq7B,UACd,CAEA,MAAMe,GACF,WAAA9tC,CAAYggB,EAAO+tB,EAAYoI,GAAepI,UAAWrU,EAAMzX,GAC3D7hB,KAAK4f,MAAQA,EACb5f,KAAKs5B,KAAOA,EACZt5B,KAAKy3C,YAAc,EACnBz3C,KAAK4I,EAAIiZ,EAAQA,EAAM,GAAK,EAC5B7hB,KAAKgpC,EAAInnB,EAAQA,EAAM,GAAKjC,EAAMhlB,OAClCoF,KAAK03C,OAASxR,EAAWyH,GACzB3tC,KAAK23C,YAAczR,EAAWD,EAClC,CACA,cAAA2R,GACI,OAAO,IAAIhG,GAAW5xC,KAAK63C,uBAC/B,CACA,qBAACA,GACG,KAAO73C,KAAK4I,EAAI5I,KAAKgpC,GAAG,CACpB,MAAMkG,EAAWlvC,KAAK83C,eACtB,GAAI5I,EAAU,OACJA,EACN,QACJ,CACA,MAAM6I,EAAU/3C,KAAKg4C,YACrB,IAAID,EAIJ,aAHUA,CAId,CACJ,CACA,YAAAD,GACI93C,KAAK6tC,YACL,MAAMnM,EAAM1hC,KAAKi4C,UAAUj4C,KAAK03C,QAChC,IAAa,IAAThW,EAEJ,OAAO,IAAIsN,GAAchvC,KAAK4f,MAAO5f,KAAK4I,EAAI5I,KAAK4I,EAAI84B,EAAM1hC,KAAKs5B,KACtE,CACA,SAAA2e,CAAU9R,GACN,IAEI+R,EAFArvC,EAAOs9B,EACP3kC,EAAIxB,KAAK4I,EAEb,KAAOC,EAAK7I,KAAK4f,MAAMpe,KAAOA,EAAIxB,KAAKgpC,GACnCngC,EAAOA,EAAK7I,KAAK4f,MAAMpe,MACnBqH,EAAU,MACVqvC,EAAOrvC,GAEf,OAAKqvC,EAEDA,EAAmB,cAAKtT,EAAO5kC,KAAKm4C,KAAK32C,EAAIxB,KAAK4I,KAC1C,EACLpH,GAHK,CAIhB,CACA,iBAAA42C,GACI,MAAM3W,EAAQzhC,KAAK4I,EACb4Y,EAAUxhB,KAAK43C,iBACrB53C,KAAK6kC,OAAOrjB,EAAQmqB,QAAS,6BAA6B3rC,KAAKq4C,cAC/D,MAAM9H,EAAUvwC,KAAKs4C,cACrB,OAAO,IAAIhI,GAAmB9uB,EAAS+uB,EAASvwC,KAAK4f,MAAO6hB,EAAOzhC,KAAK4I,EAAG5I,KAAKs5B,KACpF,CACA,WAAAgf,GACI,MAAM/H,EAAU,GAChB,OAAa,CACT,MAAMttC,EAASjD,KAAKu4C,aACpB,IAAKt1C,EACD,OAAOstC,EACXA,EAAQhrC,KAAKtC,EACjB,CACJ,CACA,UAAAs1C,GAEI,GADAv4C,KAAK6tC,YACD7tC,KAAK0hC,MACL,OAAO,KACX1hC,KAAK6kC,OAAuB,MAAhB7kC,KAAKszC,OAAgB,8BACjC,MAAMh+C,EAAO0K,KAAKw4C,iBAClB,IAAKljD,EAAKwsC,OAEN,OADA9hC,KAAK6kC,OAAO7kC,KAAK0hC,MAAO,wBACjB,KAEX,MAAM7mC,EAAO,GAEb,GADAmF,KAAK6tC,YACe,MAAhB7tC,KAAKm4C,OACL,EAAG,GACGn4C,KAAK4I,EACP,MAAMtI,EAAMN,KAAKy4C,gBACjBn4C,GAAOzF,EAAK0K,KAAKjF,GACjBN,KAAK6tC,YACL7tC,KAAK6kC,OAAO7kC,KAAK0hC,OAAyB,MAAhB1hC,KAAKm4C,QAAkC,MAAhBn4C,KAAKm4C,QAAgB,IAAM,wBAAwBn4C,KAAKq4C,cAC7G,OAAyB,MAAhBr4C,KAAKm4C,aAEb,GAAoB,MAAhBn4C,KAAKm4C,SAAkBn4C,KAAK0hC,MAEjC,MAAM1hC,KAAK8U,MAAM,kCAErB,OAAO,IAAIw6B,GAAYh6C,EAAKqsC,UAAW9mC,EAAMmF,KAAK4f,MAAOtqB,EAAKmsC,MAAOzhC,KAAK4I,EAAG5I,KAAKs5B,KACtF,CACA,aAAAmf,GACI,MAAMziD,EAAMgK,KAAKg4C,YACjB,IAAKhiD,EACD,OAEJ,GADAgK,KAAK6tC,YACe,MAAhB7tC,KAAKm4C,OACL,OAAOniD,IACTgK,KAAK4I,EACP,MAAM5J,EAAQgB,KAAKg4C,YACnB,MAAO,CAAChiD,EAAI2rC,UAAW3iC,EAC3B,CACA,kBAAA05C,CAAmBrtC,EAAU0qC,IACzB,MAAMhZ,EAAS,GACf,KAAO/8B,KAAK4I,EAAI5I,KAAKgpC,GAAG,CACpB,MAAM13B,EAAQtR,KAAK24C,kBAAkBttC,GACrC0xB,EAAOx3B,KAAK+L,EAChB,CAEA,OApJR,SAAwByrB,EAAQ1xB,GAC5B,IAAIutC,GAAQ,EACZ,IAAK,IAAIp3C,EAAI,EAAGA,EAAIu7B,EAAOniC,OAAQ4G,IAAK,CACpC,MAAM8P,EAAQyrB,EAAOv7B,GAChBq3C,GAAiBvnC,MAEjBsnC,GAAStnC,EAAMq7B,UAChBA,GAAS5P,EAAOv7B,EAAI,GAAI6J,EAAQmrC,QAEhCsC,GAAWxnC,KACQ,QAAfA,EAAMhc,KACNsjD,GAAQ,EACY,WAAftnC,EAAMhc,OACXsjD,GAAQ,KAEXA,GAAStnC,EAAMs7B,WAChBA,GAAU7P,EAAOv7B,EAAI,GAAI6J,EAAQmrC,QAEzC,CACJ,CAgIQuC,CAAehc,EAAQ1xB,GAChB0xB,CACX,CACA,iBAAA4b,CAAkBttC,GACd,MAAM,iBAAE8hC,EAAgB,oBAAEc,GAAwB5iC,EAClD,OAAIrL,KAAKy3C,YAAc,EACZz3C,KAAKg5C,uBAAuB3tC,GACnCrL,KAAKnH,MAAMs0C,GACJntC,KAAKi5C,aAAa5tC,GACzBrL,KAAKnH,MAAMo1C,GACJjuC,KAAKk5C,gBAAgB7tC,GACzBrL,KAAKm5C,cAAc,CAAChM,EAAkBc,GACjD,CACA,aAAAkL,CAAcC,GACV,MAAM3X,EAAQzhC,KAAK4I,EACnB,KAAO5I,KAAK4I,EAAI5I,KAAKgpC,IACboQ,EAAY7O,MAAKv5B,GAAOhR,KAAKnH,MAAMmY,QAErChR,KAAK4I,EAEX,OAAO,IAAIylC,GAAUruC,KAAK4f,MAAO6hB,EAAOzhC,KAAK4I,EAAG5I,KAAKs5B,KACzD,CACA,YAAA2f,CAAa5tC,GACT,MAAM,KAAEiuB,EAAI,MAAE1Z,GAAU5f,KAClByhC,EAAQzhC,KAAK4I,EACnB,IAAyD,IAArD5I,KAAKq5C,gBAAgBhuC,EAAQ+hC,mBAC7B,MAAMptC,KAAK8U,MAAM,OAAO9U,KAAKq4C,SAAS5W,gBAAqBA,GAE/D,MAAMnwB,EAAQ,IAAI07B,GAASptB,EAAO6hB,EAAOzhC,KAAK4I,EAAGyC,EAASiuB,GAG1D,MAFmB,QAAfhoB,EAAMhc,OACN0K,KAAKy3C,WAAahW,GACfnwB,CACX,CACA,eAAA+nC,CAAgBC,EAAWC,GAAgB,GAEvC,IADAv5C,KAAK6tC,YACE7tC,KAAK4I,EAAI5I,KAAKgpC,GACjB,GAAIuQ,GAhlDF,EAglDoBv5C,KAAKw5C,WACvBx5C,KAAKy5C,kBAIT,KADEz5C,KAAK4I,EACH5I,KAAK05C,OAAOJ,GACZ,OAAOt5C,KAAK4I,EAEpB,OAAQ,CACZ,CACA,eAAAswC,CAAgB7tC,EAAU0qC,IACtB,MAAM,KAAEzc,EAAI,MAAE1Z,GAAU5f,MAClB,qBAAEkuC,GAAyB7iC,EAC3Bo2B,EAAQzhC,KAAK4I,EACnB,IAA0D,IAAtD5I,KAAKq5C,gBAAgBnL,GAAsB,GAC3C,MAAMluC,KAAK8U,MAAM,UAAU9U,KAAKq4C,SAAS5W,gBAAqBA,GAElE,OAAO,IAAIqM,GAAYluB,EAAO6hB,EAAOzhC,KAAK4I,EAAGyC,EAASiuB,EAC1D,CACA,sBAAA0f,CAAuB3tC,GACnB,MAAM,iBAAE8hC,EAAgB,kBAAEC,GAAsB/hC,EAC1Co2B,EAAQzhC,KAAK4I,EACnB,IAAI+wC,EAAU35C,KAAK45C,OAAOzM,GAAoBA,EAAiBvyC,OAC/D,KAAOoF,KAAK4I,EAAI5I,KAAKgpC,GACjB,GAAwC,WAApChpC,KAAKw4C,iBAAiB7W,UAI1B,KAAO3hC,KAAK4I,GAAK5I,KAAKgpC,GAAG,CACrB,GAAIhpC,KAAK05C,OAAOtM,GAAoB,CAChC,MAAM1L,EAAM1hC,KAAK4I,EACjB,OAAI64B,IAAUkY,GACV35C,KAAKy3C,YAAc,EACZ,IAAIzK,GAAShtC,KAAK4f,MAAO6hB,EAAOC,EAAKr2B,EAASrL,KAAKs5B,QAG1Dt5B,KAAK4I,EAAI+wC,EACF,IAAItL,GAAUruC,KAAK4f,MAAO6hB,EAAOkY,EAAS35C,KAAKs5B,MAE9D,CACA,GAAIt5B,KAAK05C,OAAOvM,GACZ,MACJntC,KAAK4I,GACT,MAlBI+wC,EAAU35C,KAAK45C,OAAOzM,GAAoBA,EAAiBvyC,OAoBnE,MAAMoF,KAAK8U,MAAM,OAAO9U,KAAKq4C,SAASr4C,KAAKy3C,yBAA0BhW,EACzE,CACA,mBAAAoY,CAAoBxuC,EAAU0qC,IAC1B,MAAMhZ,EAAS,GACf,KAAO/8B,KAAK4I,EAAI5I,KAAKgpC,GAAG,CACpB,MAAM13B,EAAQtR,KAAK85C,mBAAmBzuC,GACtCiG,GAASyrB,EAAOx3B,KAAK+L,EACzB,CACA,OAAOyrB,CACX,CACA,kBAAA+c,CAAmBzuC,GAEf,GADArL,KAAK6tC,YACD7tC,KAAK0hC,MACL,OACJ,MAAMD,EAAQzhC,KAAK4I,EACnB5I,KAAKq5C,gBAAgB,MACrB,MAAM3X,EAAM1hC,KAAK4I,EACjB,OAAO,IAAIynC,GAAerwC,KAAK4f,MAAO6hB,EAAOC,EAAKr2B,EAASrL,KAAKs5B,KACpE,CACA,KAAAxkB,CAAM0uB,EAAKuW,EAAM/5C,KAAK4I,GAClB,OAAO,IAAIk7B,EAAkBN,EAAK,IAAIiL,GAAgBzuC,KAAK4f,MAAOm6B,EAAK/5C,KAAKgpC,EAAGhpC,KAAKs5B,MACxF,CACA,MAAAuL,CAAOmV,EAAMxW,EAAKuW,GACd,IAAKC,EACD,MAAMh6C,KAAK8U,MAAqB,mBAAR0uB,EAAqBA,IAAQA,EAAKuW,EAClE,CACA,QAAA1B,CAAS5W,EAAQzhC,KAAK4I,GAClB,OAAO+L,KAAKC,WAjzDF5D,EAizDqBhR,KAAK4f,MAAM/X,MAAM45B,EAAOzhC,KAAKgpC,GAjzD7CA,EAizDiD,GAhzD7Dh4B,EAAIpW,OAASouC,EAAIh4B,EAAInJ,MAAM,EAAGmhC,EAAI,GAAK,MAAQh4B,IAD1D,IAAkBA,EAAKg4B,CAkzDnB,CAIA,QAAAiR,GACI,OAAOj6C,KAAKw4C,gBAChB,CACA,cAAAA,GACIx4C,KAAK6tC,YACL,MAAMpM,EAAQzhC,KAAK4I,EACnB,MAAQ5I,KAAK0hC,OAASkD,EAAO5kC,KAAKm4C,WAC5Bn4C,KAAK4I,EACX,OAAO,IAAI6lC,GAAgBzuC,KAAK4f,MAAO6hB,EAAOzhC,KAAK4I,EAAG5I,KAAKs5B,KAC/D,CACA,sBAAA4gB,GACI,MAAMxxC,EAAK1I,KAAKw4C,iBAChB,OAAO9vC,EAAGo5B,OAASp5B,OAAKzN,CAC5B,CACA,WAAA2yC,GAGI,OAFA5tC,KAAK6tC,YAEsB,MAAvB7tC,KAAK4f,MAAM5f,KAAK4I,GACT5I,KAAK4f,MAAM/X,MAAM7H,KAAK4I,IAAK5I,KAAK4I,GACpC5I,KAAKw4C,iBAAiB7W,SACjC,CACA,UAAAwY,CAAWC,GACP,MAAMC,EAAS,GACf,OAAa,CACT,MAAMC,EAAOt6C,KAAKu6C,SAASH,GAC3B,IAAKE,EACD,OAAOD,EACXA,EAAO90C,KAAK+0C,EAChB,CACJ,CACA,QAAAC,CAASH,GACLp6C,KAAK6tC,YACe,MAAhB7tC,KAAKm4C,UACHn4C,KAAK4I,EACX,MAAM64B,EAAQzhC,KAAK4I,EACbtT,EAAO0K,KAAKk6C,yBAClB,IAAK5kD,EACD,OACJ,IAAI0J,EACJgB,KAAK6tC,YACL,MAAMyG,EAAMxgC,EAASsmC,GAAeA,EAAeA,EAAc,IAAM,IAKvE,OAJIp6C,KAAKm4C,SAAW7D,MACdt0C,KAAK4I,EACP5J,EAAQgB,KAAKg4C,aAEV,IAAIxI,GAAUxvC,KAAK4f,MAAO6hB,EAAOzhC,KAAK4I,EAAGtT,EAAM0J,EAAOgB,KAAKs5B,KACtE,CACA,SAAAuQ,GACI,OAAO7pC,KAAK4f,MAAM/X,MAAM7H,KAAK4I,EAAG5I,KAAKgpC,EACzC,CACA,OAAAwR,CAAQtuC,EAAO,GACXlM,KAAK4I,GAAKsD,CACd,CACA,GAAAw1B,GACI,OAAO1hC,KAAK4I,GAAK5I,KAAKgpC,CAC1B,CACA,IAAAsK,GACI,OAAOtzC,KAAK4f,MAAM5f,KAAK4I,IAC3B,CACA,MAAAgxC,CAAOlY,GACH,KAAO1hC,KAAK4I,EAAI5I,KAAKgpC,GAEjB,KADEhpC,KAAK4I,EACH5I,KAAK05C,OAAOhY,GACZ,OAAO1hC,KAAK4I,EAEpB,OAAQ,CACZ,CACA,SAAAovC,GACIh4C,KAAK6tC,YACL,MAAMpM,EAAQzhC,KAAK4I,EACb48B,EAAWxlC,KAAKy6C,eAAiBz6C,KAAKy5C,cAAgBz5C,KAAK06C,aAAe16C,KAAK26C,aAC/Ep5C,EAAQvB,KAAK46C,gBAAgBpV,GACnC,OAAKjkC,EAAM3G,OAEJ,IAAIw0C,GAAoB5J,EAAUjkC,EAAOvB,KAAK4f,MAAO6hB,EAAOzhC,KAAK4I,GAD7D48B,CAEf,CACA,cAAAqV,GACI76C,KAAK6tC,YACL,MAAMpM,EAAQzhC,KAAK4I,EACbrH,EAAQvB,KAAK46C,iBACnB,GAAKr5C,EAAM3G,OAEX,OAAO,IAAIw0C,QAAoBn0C,EAAWsG,EAAOvB,KAAK4f,MAAO6hB,EAAOzhC,KAAK4I,EAC7E,CACA,cAAAgyC,CAAeE,GAAU,GACrB,MAAMv5C,EAAQ,GACd,OACI,GAAoB,MAAhBvB,KAAKm4C,OAAT,CAOA,GAAI2C,IAAYv5C,EAAM3G,OAAQ,CAC1B,MAAMof,EAAOha,KAAKk6C,yBAClB,GAAIlgC,EAAM,CACNzY,EAAMgE,KAAKyU,GACX,QACJ,CACJ,CACA,GAAoB,MAAhBha,KAAKm4C,QAAmC,MAAjBn4C,KAAKm4C,KAAK,GAQrC,MARA,CACIn4C,KAAK4I,IACL,MAAMoR,EAAOha,KAAKk6C,yBAClB,IAAKlgC,EACD,MACJzY,EAAMgE,KAAKyU,EAEf,CAfA,KANA,CACIha,KAAK4I,IACL,MAAMoR,EAAOha,KAAKg4C,aAAe,IAAIvJ,GAAgBzuC,KAAK4f,MAAO5f,KAAK4I,EAAG5I,KAAK4I,EAAG5I,KAAKs5B,MACtFt5B,KAAK6kC,QAA6B,IAAtB7kC,KAAK45C,OAAO,KAAa,gBACrCr4C,EAAMgE,KAAKyU,EAEf,CAkBJ,OAAOzY,CACX,CACA,UAAAo5C,GACI36C,KAAK6tC,YACL,IAAIkN,GAAe,EACfC,GAAa,EACbp5B,EAAI,EAGR,IAlxDK,GAgxDD5hB,KAAKw5C,YACL53B,IACG5hB,KAAK4I,EAAIgZ,GAAK5hB,KAAKgpC,GACtB,GApxDG,GAoxDChpC,KAAKw5C,SAAS53B,GACdo5B,GAAa,EACbp5B,QAEC,IAAqB,MAAjB5hB,KAAKm4C,KAAKv2B,IAAmC,MAArB5hB,KAAKm4C,KAAKv2B,EAAI,GAO3C,MANA,GAAIm5B,IAAiBC,EACjB,OACJD,GAAe,EACfn5B,GAGK,CAEb,GAAIo5B,IAAepW,EAAO5kC,KAAKm4C,KAAKv2B,IAAK,CACrC,MAAMwlB,EAAM,IAAIoH,GAAYxuC,KAAK4f,MAAO5f,KAAK4I,EAAG5I,KAAK4I,EAAIgZ,EAAG5hB,KAAKs5B,MAEjE,OADAt5B,KAAKw6C,QAAQ54B,GACNwlB,CACX,CACJ,CACA,WAAAqT,GACIz6C,KAAK6tC,YACL,MAAMnM,EAAM1hC,KAAKi4C,UAAUj4C,KAAK23C,aAChC,IAAa,IAATjW,EACA,OACJ,MAAMmN,EAAU,IAAIF,GAAa3uC,KAAK4f,MAAO5f,KAAK4I,EAAG84B,EAAK1hC,KAAKs5B,MAE/D,OADAt5B,KAAK4I,EAAI84B,EACFmN,CACX,CACA,SAAA6L,GACI16C,KAAK6tC,YACL,MAAMpM,EAAQzhC,KAAK4I,EACnB,GAAoB,MAAhB5I,KAAKm4C,OACL,SACFn4C,KAAK4I,EACP,MAAMsnC,EAAMlwC,KAAKi7C,mBACjBj7C,KAAK4I,GAAK,EACV,MAAMunC,EAAMnwC,KAAKi7C,mBAEjB,QADEj7C,KAAK4I,EACA,IAAIqnC,GAAWjwC,KAAK4f,MAAO6hB,EAAOzhC,KAAK4I,EAAGsnC,EAAKC,EAAKnwC,KAAKs5B,KACpE,CACA,gBAAA2hB,GACI,MAAMj8C,EAAQgB,KAAKg4C,YAEnB,OADAh4C,KAAK6kC,OAAO7lC,GAAO,IAAM,oBAAoBgB,KAAKq4C,+BAC3Cr5C,CACX,CACA,UAAAy6C,GACIz5C,KAAK6tC,YACL,MAAMpM,EAAQzhC,KAAK4I,EACnB,KAt0DM,EAs0DA5I,KAAKw5C,YACP,SACFx5C,KAAK4I,EACP,IAAIsyC,GAAU,EACd,KAAOl7C,KAAK4I,EAAI5I,KAAKgpC,MACfhpC,KAAK4I,EACH5I,KAAK4f,MAAM5f,KAAK4I,EAAI,KAAO5I,KAAK4f,MAAM6hB,IAAWyZ,IAEjDA,EACAA,GAAU,EACsB,OAA3Bl7C,KAAK4f,MAAM5f,KAAK4I,EAAI,KACzBsyC,GAAU,GAElB,OAAO,IAAIpL,GAAY9vC,KAAK4f,MAAO6hB,EAAOzhC,KAAK4I,EAAG5I,KAAKs5B,KAC3D,CACA,qBAAC6hB,CAAqB9vC,GAClB,MAAM,oBAAE4iC,GAAwB5iC,EAC1B+vC,EAAkB,CAAC,IAAK,IAAKnN,GAC7BoN,EAAoB,IAAItT,IAAIqT,GAElC,KAAOp7C,KAAK4I,EAAI5I,KAAKgpC,IAAMqS,EAAkBjmB,IAAIp1B,KAAKm4C,eAC5Cn4C,KAAKnH,MAAMo1C,GACXjuC,KAAKk5C,gBAAgB7tC,GACrBrL,KAAKm5C,cAAciC,EAEjC,CACA,KAAAviD,CAAMyiD,GACF,IAAK,IAAI95C,EAAI,EAAGA,EAAI85C,EAAK1gD,OAAQ4G,IAC7B,GAAI85C,EAAK95C,KAAOxB,KAAK4f,MAAM5f,KAAK4I,EAAIpH,GAChC,OAAO,EAEf,OAAO,CACX,CACA,MAAAk4C,CAAO6B,GACH,IAAK,IAAI/5C,EAAI,EAAGA,EAAI+5C,EAAQ3gD,OAAQ4G,IAChC,GAAI+5C,EAAQA,EAAQ3gD,OAAS,EAAI4G,KAAOxB,KAAK4f,MAAM5f,KAAK4I,EAAI,EAAIpH,GAC5D,OAAO,EAEf,OAAO,CACX,CACA,QAAAg4C,CAAS53B,EAAI,GACT,OAAO5hB,KAAK4I,EAAIgZ,GAAK5hB,KAAKgpC,EAAI,EAAIrE,EAAM3kC,KAAK4f,MAAMV,WAAWlf,KAAK4I,EAAIgZ,GAC3E,CACA,IAAAu2B,CAAKv2B,EAAI,GACL,OAAO5hB,KAAK4I,EAAIgZ,GAAK5hB,KAAKgpC,EAAI,GAAKhpC,KAAK4f,MAAM5f,KAAK4I,EAAIgZ,EAC3D,CACA,SAAAisB,GACI,KAt3DM,EAs3DC7tC,KAAKw5C,cACNx5C,KAAK4I,CACf,EAGJ,MAAM4yC,GACF,WAAA57C,CAAYm9B,EAAQ0e,GAChBz7C,KAAK07C,SAAW,CAAC,EACjB17C,KAAK27C,eAAgB,EACrB37C,KAAK+8B,OAASA,EACd/8B,KAAKy7C,WAAaA,CACtB,CACA,EAAAnhB,CAAGhlC,EAAMkP,GAEL,OADAxE,KAAK07C,SAASpmD,GAAQkP,EACfxE,IACX,CACA,OAAA47C,CAAQjsB,EAAOrvB,GACX,MAAMoZ,EAAI1Z,KAAK07C,SAAS/rB,GACxB,QAAOjW,IAAKA,EAAErX,KAAKrC,KAAMM,IAAM,EACnC,CACA,KAAA2K,GAEI,IAAIqG,EACJ,IAFAtR,KAAK47C,QAAQ,UAEL57C,KAAK27C,gBAAkBrqC,EAAQtR,KAAK+8B,OAAO35B,UAAU,CACzD,GAAIpD,KAAK47C,QAAQ,QAAStqC,GACtB,SACJ,GAAIwnC,GAAWxnC,IAAUtR,KAAK47C,QAAQ,OAAOtqC,EAAMhc,OAAQgc,GACvD,SAEJ,MAAM8P,EAAWphB,KAAKy7C,WAAWnqC,EAAOtR,KAAK+8B,QAC7C/8B,KAAK47C,QAAQ,WAAYx6B,EAC7B,CAGA,OAFKphB,KAAK27C,eACN37C,KAAK47C,QAAQ,OACV57C,IACX,CACA,IAAAyb,GAEI,OADAzb,KAAK27C,eAAgB,EACd37C,IACX,EAGJ,MAAM67C,GACF,WAAAj8C,CAAY0R,GACRtR,KAAKsR,MAAQA,CACjB,EAGJ,MAAMk8B,WAAYqO,GACd,WAAAj8C,CAAY0R,EAAOwqC,EAAcC,GAC7B1Y,MAAM/xB,GACNtR,KAAK1K,KAAOgc,EAAMhc,KAClB0K,KAAK+7C,OAASA,EACd/7C,KAAKytC,UAAYn8B,EAAMm8B,SAC3B,EAWJ,MAAMgC,GACF,WAAA7vC,CAAYo8C,EAAQ5B,GAChBp6C,KAAKs6C,KAAO,CAAC,EACb,MAAM7M,EAAY,IAAIC,GAAUsO,EAAQ,CAAC,GACzC,IAAK,MAAM1B,KAAQ7M,EAAU0M,WAAWC,GACpCp6C,KAAKs6C,KAAKA,EAAKhlD,KAAKk5B,SAAW8rB,EAAKt7C,KAE5C,CACA,OAAC0yC,CAAO7iC,GACJ,MAAMyrC,EAAO,CAAC,EACd,IAAK,MAAMtkD,KAAO6L,OAAO8T,KAAK3V,KAAKs6C,MAC/BA,EAAKtkD,QAA0BiF,IAAnB+E,KAAKs6C,KAAKtkD,WAAkCm8C,GAAUnyC,KAAKs6C,KAAKtkD,GAAM6Y,IAEtF,OAAOyrC,CACX,EAsBJ,MAAM/K,GACF,WAAA3vC,CAAY0R,EAAOjG,EAAS0wC,GACxB/7C,KAAKsR,MAAQA,EACbtR,KAAK1K,KAAOgc,EAAMhc,KAClB0K,KAAK60C,QAAU3S,EAAW72B,GACpBA,EACC62B,EAAW72B,aAAyC,EAASA,EAAQwpC,SAAWxpC,EAAQwpC,QAAU9R,EACzG/iC,KAAK40C,KAAO1S,EAAW72B,OAAeA,aAAyC,EAASA,EAAQupC,KAChG50C,KAAKnF,KAAOyW,EAAMzW,KAClBmF,KAAK+7C,OAASA,CAClB,CACA,OAACrK,CAAO1yC,EAAOulB,GACX,MAAM03B,EAAO,GACb,IAAK,MAAM37C,KAAON,KAAKnF,KAhBpBK,EAiBoBoF,GACf27C,EAAK12C,KAAK,CAACjF,EAAI,SAAU6xC,GAAU7xC,EAAI,GAAIikB,KAE3C03B,EAAK12C,WAAW4sC,GAAU7xC,EAAKikB,IAEvC,aAAavkB,KAAK60C,QAAQ75C,MAAM,CAAEupB,UAASjT,MAAOtR,KAAKsR,MAAOyqC,OAAQ/7C,KAAK+7C,QAAU,CAAC/8C,KAAUi9C,GACpG,EAGJ,MAAMC,GAIF,WAAAt8C,CAAYggB,EAAOm8B,GACf/7C,KAAKuwC,QAAU,GACf,MAAMj/B,EAAyB,iBAAVsO,EACf,IAAI8tB,GAAU9tB,EAAOm8B,EAAO1wC,QAAQsiC,WAAWyK,oBAC/Cx4B,EACN5f,KAAKwhB,QAAUlQ,EAAMkQ,QACrBxhB,KAAKuwC,QAAUj/B,EAAMi/B,QAAQv4C,KAAIsZ,GAAS,IAAIi+B,GAAOj+B,EAAOtR,KAAKm8C,UAAUJ,EAAQzqC,EAAMhc,MAAOymD,IACpG,CACA,MAAC/8C,CAAM6P,EAAKmjC,GACRA,EAAUA,GAAYnjC,EAAIm5B,KAAK6O,WAAa72C,KAAKuwC,QAAQ31C,OAAS,GAA8B,YAAzBoF,KAAKuwC,QAAQ,GAAGj7C,KACvF,IAAIW,QAAY+J,KAAKwhB,QAAQuwB,SAASljC,EAAKmjC,GAC3C,IAAK,MAAM/uC,KAAUjD,KAAKuwC,QACtBt6C,QAAYgN,EAAOyuC,OAAOz7C,EAAK4Y,GAEnC,OAAO5Y,CACX,CACA,SAAAkmD,CAAUJ,EAAQzmD,GACd,MAAM8mD,EAAOL,EAAOxL,QAAQj7C,GAE5B,OADAuvC,EAAOuX,IAASL,EAAO1wC,QAAQqrC,eAAe,IAAM,qBAAqBphD,MAClE8mD,CACX,EAGJ,MAAMhO,WAAeyN,GACjB,WAAAj8C,CAAY0R,EAAOyqC,GACf,IAAItQ,EACJpI,MAAM/xB,GACN,MAAMm8B,EAAY,IAAIC,GAAUp8B,EAAMsO,MAAOm8B,EAAO1wC,QAAQsiC,UAAWr8B,EAAMgoB,KAAMhoB,EAAMy7B,cACzF/sC,KAAKhB,MAAQ,IAAIk9C,GAAMzO,EAAU2K,oBAAqB2D,GACtD,MAAMxL,EAAUvwC,KAAKhB,MAAMuxC,QACrB8G,EAAe0E,EAAO1wC,QAAQgsC,aACpC,KAA6C,QAAtC5L,EAAK8E,EAAQA,EAAQ31C,OAAS,UAAuB,IAAP6wC,OAAgB,EAASA,EAAGmJ,MAAQyC,EAAc,CACnG,MAAM/lC,EAAQ,IAAIg+B,GAAY9oC,SAASnE,KAAKg1C,GAAe,GAAI,GAAI,EAAG,GACtE9G,EAAQhrC,KAAK,IAAIgqC,GAAOj+B,EAAO+lC,EAAc0E,GACjD,CACJ,CACA,OAACrK,CAAO7iC,EAAKyiC,GACT,MAAMr7C,QAAY+J,KAAKhB,MAAMA,MAAM6P,GAAK,GACxCyiC,EAAQR,MAAM76C,EAClB,EAGJ,MAAMq4C,WAAauN,GACf,WAAAj8C,CAAY0R,GACR+xB,MAAM/xB,GACNtR,KAAKgR,IAAMM,EAAMi9B,YACrB,CACA,OAACmD,CAAO7iC,EAAKyiC,GACTA,EAAQR,MAAM9wC,KAAKgR,IACvB,EAGJ,IAAIqrC,GAoJA9O,IAnJJ,SAAW8O,GACPA,EAAqB,SAAI,WACzBA,EAAoB,QAAI,UACxBA,EAAiB,KAAI,MACxB,CAJD,CAIGA,KAAeA,GAAa,CAAC,IAChC,MAAMC,GACF,WAAA18C,CAAYyL,GAER,GADArL,KAAKqL,QAAUA,EACXA,EAAQ6qC,kBAAmB,CAC3B,MAAM5B,EAAMjpC,EAAQsoC,GAAGW,IACvBzP,EAAOyP,EAAK,+CACZ,MAAMiI,EAAgB,IAAI71C,OAAO,CAAC,IAAM4tC,EAAK,KAAOA,EAAK,KAAM,OAAOt8C,KAAIwkD,GAAsBA,EAp0E7Fl0C,QAAQ,wBAAyB,UAo0EqE5C,KAAK,MAC9G1F,KAAKy8C,mBAAsBC,GAAmBH,EAAc5mD,KAAK+mD,EACrE,MAEI18C,KAAKy8C,mBAAsBE,IAAoB,EAEnD38C,KAAKsX,SAAWtX,KAAKqL,QAAQsoC,GAAGr8B,UAAY,MAAO,EACvD,CACA,OAACslC,CAAOtjB,EAAMlkC,EAAMynD,EAAMC,GACtB,MAAM,GAAEnJ,GAAO3zC,KAAKqL,QACd0xC,EAAO/8C,KAAKqL,QAAQjW,GAC1B,IAAK,MAAMy+C,KAAY7zC,KAAKg9C,WAAW1jB,EAAMyjB,EAAMD,EAAa1nD,IAASinD,GAAWY,MAChF,GAAIJ,EAAOlJ,EAAGS,WAAWP,SAAkBF,EAAGQ,OAAON,GACjD,OAAOA,EAEf,MAAM7zC,KAAKk9C,YAAY5jB,EAAMyjB,EACjC,CACA,WAACC,CAAW1jB,EAAMyjB,EAAMD,EAAaK,GACjC,MAAM,GAAExJ,EAAE,QAAE0C,GAAYr2C,KAAKqL,QAC7B,GAAIrL,KAAKy8C,mBAAmBnjB,IAASwjB,EAAa,CAC9C,MAAMM,EAAazJ,EAAGlzC,QAAQT,KAAKq0C,QAAQyI,GAAcxjB,EAAM+c,GAC/D,IAAK,MAAMR,KAAOkH,EACd,IAAKI,GAAen9C,KAAKsX,SAASu+B,EAAKuH,GAAa,OAE1CA,EACN,KACJ,CAER,CACA,IAAK,MAAMvH,KAAOkH,EAAM,CACpB,MAAMK,EAAazJ,EAAGlzC,QAAQo1C,EAAKvc,EAAM+c,GACpC8G,IAAen9C,KAAKsX,SAASu+B,EAAKuH,WAC7BA,EAEd,CACA,QAAoBniD,IAAhB04C,EAAG0J,SAAwB,CAC3B,MAAMxJ,EAAWF,EAAG0J,SAAS/jB,QACZr+B,IAAb44C,UACMA,EACd,CACJ,CACA,OAAAQ,CAAQb,GACJ,MAAMG,EAAK3zC,KAAKqL,QAAQsoC,GAExB,OADA9O,EAAO8O,EAAGU,QAAS,mDACZV,EAAGU,QAAQb,EACtB,CACA,WAAA0J,CAAY5jB,EAAMgkB,GACd,MAAMz8C,EAAM,IAAI+pB,MAAM,UAGtB,OAFA/pB,EAAIyiC,QAAU,6BAA6BhK,UAAagkB,KACxDz8C,EAAI67B,KAAO,SACJ77B,CACX,EAGJ,MAAM08C,GACF,WAAA39C,CAAYm8C,GACR/7C,KAAK+7C,OAASA,EACd/7C,KAAKsG,MAAQtG,KAAK+7C,OAAO1wC,QAAQ/E,MACjCtG,KAAK2zC,GAAK3zC,KAAK+7C,OAAO1wC,QAAQsoC,GAC9B3zC,KAAKw9C,UAAYx9C,KAAKsG,MAAQtG,KAAKy9C,iBAAmBz9C,KAAK09C,WAC3D19C,KAAK29C,OAAS,IAAIrB,GAAOt8C,KAAK+7C,OAAO1wC,SACrCrL,KAAKg3C,WAAa,IAAI5K,GAAQ,eAAgB2P,EAAO1wC,QAAQ2rC,WACjE,CACA,KAAAtlC,CAAMq/B,EAAM8C,GACR9C,EAAOzxB,OAAOyxB,GACd/wC,KAAKg3C,WAAW1K,IAAIyE,EAAKn2C,QACzB,MACMmiC,EADY,IAAI2Q,GAAUqD,EAAM/wC,KAAK+7C,OAAO1wC,QAAQsiC,UAAWkG,GAC5C6E,mBAAmB14C,KAAK+7C,OAAO1wC,SACxD,OAAOrL,KAAK49C,YAAY7gB,EAC5B,CACA,WAAA6gB,CAAY7gB,GACR,IAAIzrB,EACJ,MAAM+/B,EAAY,GACZlN,EAAS,GACf,KAAQ7yB,EAAQyrB,EAAO35B,SACnB,IACIiuC,EAAU9rC,KAAKvF,KAAKy7C,WAAWnqC,EAAOyrB,GAC1C,CACA,MAAOl8B,GACH,IAAIb,KAAK+7C,OAAO1wC,QAAQsmC,eAGpB,MAAM9wC,EAFNsjC,EAAO5+B,KAAK1E,EAGpB,CAEJ,GAAIsjC,EAAOvpC,OACP,MAAM,IAAIspC,EAAaC,GAC3B,OAAOkN,CACX,CACA,UAAAoK,CAAWnqC,EAAOwqC,GACd,IACI,GAAIhD,GAAWxnC,GAAQ,CACnB,MAAMusC,EAAW79C,KAAK+7C,OAAO+B,KAAKxsC,EAAMhc,MAExC,OADAuvC,EAAOgZ,EAAU,QAAQvsC,EAAMhc,mBACxB,IAAIuoD,EAASvsC,EAAOwqC,EAAc97C,KAAK+7C,OAAQ/7C,KAC1D,CACA,OAAI+9C,GAAczsC,GACP,IAAI88B,GAAO98B,EAAOtR,KAAK+7C,QAE3B,IAAIzN,GAAKh9B,EACpB,CACA,MAAOkY,GACH,GAAI4Z,EAAYS,GAAGra,GACf,MAAMA,EACV,MAAM,IAAIua,EAAWva,EAAGlY,EAC5B,CACJ,CACA,WAAA0sC,CAAYjhB,GACR,OAAO,IAAIye,GAAYze,GAAQ,CAACzrB,EAAOyrB,IAAW/8B,KAAKy7C,WAAWnqC,EAAOyrB,IAC7E,CACA,iBAAC0gB,CAAiBnkB,EAAMujB,EAAMznD,EAAOinD,GAAWY,KAAMH,GAClD,MAAMx2C,EAAQtG,KAAKsG,MACbtQ,EAAMgK,KAAK29C,OAAOlB,mBAAmBnjB,GAAQwjB,EAAc,IAAMxjB,EAAOlkC,EAAO,IAAMkkC,EACrF2kB,QAAa33C,EAAMgtC,KAAKt9C,GAC9B,GAAIioD,EACA,OAAOA,EACX,MAAMC,EAAOl+C,KAAK09C,WAAWpkB,EAAMujB,EAAMznD,EAAM0nD,GAGzCqB,EAAYtB,QAAaqB,EAAOpX,GAAUoX,GAChD53C,EAAMwqC,MAAM96C,EAAKmoD,GAEjB,IACI,aAAaA,CACjB,CACA,MAAOt9C,GAEH,MADAyF,EAAMyzB,OAAO/jC,GACP6K,CACV,CACJ,CACA,WAAC68C,CAAWpkB,EAAMujB,EAAMznD,EAAOinD,GAAWY,KAAMH,GAC5C,MAAMjJ,QAAiB7zC,KAAK29C,OAAOf,OAAOtjB,EAAMlkC,EAAMynD,EAAMC,GAC5D,OAAO98C,KAAK0R,MAAMmrC,EAAO78C,KAAK2zC,GAAGO,aAAaL,SAAkB7zC,KAAK2zC,GAAGI,SAASF,GAAWA,EAChG,EAqBJ,SAASgF,GAAiB5iD,GACtB,SAAUmoD,GAAQnoD,GAAOs3C,GAAU8Q,UACvC,CACA,SAASnM,GAAgBj8C,GACrB,OAAOmoD,GAAQnoD,KAASs3C,GAAU0B,QACtC,CACA,SAASsI,GAAYthD,GACjB,OAAOmoD,GAAQnoD,KAASs3C,GAAUe,IACtC,CACA,SAASyP,GAAc9nD,GACnB,OAAOmoD,GAAQnoD,KAASs3C,GAAUa,MACtC,CACA,SAAS0K,GAAW7iD,GAChB,OAAOmoD,GAAQnoD,KAASs3C,GAAUC,GACtC,CACA,SAAS8Q,GAAcroD,GACnB,OAAOmoD,GAAQnoD,KAASs3C,GAAUwC,MACtC,CAOA,SAASqC,GAAsBn8C,GAC3B,OAAOmoD,GAAQnoD,KAASs3C,GAAU8B,cACtC,CAIA,SAASmD,GAAav8C,GAClB,OAAOmoD,GAAQnoD,KAASs3C,GAAU6C,KACtC,CACA,SAASgO,GAAQnoD,GACb,OAAOA,EAAMA,EAAIojC,MAAQ,CAC7B,EApDA,SAAWkU,GACPA,EAAUA,EAAkB,OAAI,GAAK,SACrCA,EAAUA,EAAmB,QAAI,GAAK,UACtCA,EAAUA,EAAe,IAAI,GAAK,MAClCA,EAAUA,EAAkB,OAAI,GAAK,SACrCA,EAAUA,EAAgB,KAAI,IAAM,OACpCA,EAAUA,EAAkB,OAAI,IAAM,SACtCA,EAAUA,EAAgB,KAAI,IAAM,OACpCA,EAAUA,EAA0B,eAAI,KAAO,iBAC/CA,EAAUA,EAAgB,KAAI,KAAO,OACrCA,EAAUA,EAAiB,MAAI,KAAO,QACtCA,EAAUA,EAAkB,OAAI,MAAQ,SACxCA,EAAUA,EAAoB,SAAI,MAAQ,WAC1CA,EAAUA,EAAyB,cAAI,MAAQ,gBAC/CA,EAAUA,EAAqB,UAAI,IAAM,WAC5C,CAfD,CAeGA,KAAcA,GAAY,CAAC,IAuC9B,IAwJIgR,GAzIJ,MAAMx0B,GACF,WAAAnqB,CAAY4+C,EAAM,CAAC,EAAGxW,EAAO+N,GAAgB0I,EAAgB,CAAC,GAAG,YAAErJ,EAAW,YAAE3D,GAAgB,CAAC,GAC7F,IAAIhG,EAAIyL,EAAIwH,EAAIC,EAAIC,EAKpB5+C,KAAK6+C,OAAS,CAAC,CAAC,GAChB7+C,KAAK8+C,UAAY,CAAC,EAClB9+C,KAAK68C,OAAS4B,EAAc5B,KAC5B78C,KAAKgoC,KAAOA,EACZhoC,KAAK82C,QAA2C,QAAhCrL,EAAKgT,EAAc3H,eAA4B,IAAPrL,EAAgBA,EAAKzD,EAAK8O,QAClF92C,KAAK++C,aAAexpC,EAASipC,GAAOA,EAAM38C,OAAO28C,GACjDx+C,KAAK22C,gBAA2D,QAAxCO,EAAKuH,EAAc9H,uBAAoC,IAAPO,EAAgBA,EAAKl3C,KAAKgoC,KAAK2O,gBACvG32C,KAAK42C,gBAA2D,QAAxC8H,EAAKD,EAAc7H,uBAAoC,IAAP8H,EAAgBA,EAAK1W,EAAK4O,gBAClG52C,KAAKo1C,YAAcA,QAAiDA,EAAc,IAAIhJ,GAAQ,eAAqD,QAApCuS,EAAKF,EAAcrJ,mBAAgC,IAAPuJ,EAAgBA,EAAK3W,EAAKoN,aACrLp1C,KAAKyxC,YAAcA,QAAiDA,EAAc,IAAIrF,GAAQ,kBAAmBsE,KAAiBr4C,OAA8C,QAApCumD,EAAKH,EAAchN,mBAAgC,IAAPmN,EAAgBA,EAAK5W,EAAKyJ,aACtN,CACA,WAAAuN,CAAYhpD,GACR,OAAQgK,KAAK8+C,UAAU9oD,GAAOgK,KAAK8+C,UAAU9oD,IAAQ,CAAC,CAC1D,CACA,WAAAipD,CAAYjpD,EAAKgJ,GACb,OAAQgB,KAAK8+C,UAAU9oD,GAAOgJ,CAClC,CACA,YAAAkgD,IAAgBvpC,GACZ,OAAOA,EAAK3d,KAAIhC,GAAO,CAACA,EAAKgK,KAAKg/C,YAAYhpD,KAClD,CACA,eAAAmpD,CAAgBC,GACZ,OAAOA,EAAUt8C,SAAQ,EAAE9M,EAAKgJ,KAAWgB,KAAKi/C,YAAYjpD,EAAKgJ,IACrE,CACA,MAAAqgD,GACI,MAAO,CAACr/C,KAAK82C,QAAS92C,KAAK++C,gBAAiB/+C,KAAK6+C,QAC5C9wC,QAAO,CAACc,EAAK5Y,IAAQqwC,EAASz3B,EAAK5Y,IAAM,CAAC,EACnD,CAIA,GAAA4hB,CAAIynC,GACA,OAAOt/C,KAAKu/C,QAAQD,EACxB,CACA,OAAAC,CAAQD,GACJ,OAAOvY,GAAY/mC,KAAKsyC,KAAKgN,GACjC,CACA,KAAChN,CAAKgN,GACF,MAAME,EAAQx/C,KAAKy/C,UAAUH,EAAM,IACnC,aAAat/C,KAAKqyC,cAAcmN,EAAOF,EAC3C,CAIA,YAAAI,CAAaF,EAAOF,GAChB,OAAOvY,GAAY/mC,KAAKqyC,cAAcmN,EAAOF,GACjD,CACA,cAACjN,CAAcmN,EAAOF,EAAO3I,EAAkB32C,KAAK22C,iBAC5C7iC,EAASwrC,KACTA,EAAQA,EAAM77C,MAAM,MACxB,IAAK,IAAIjC,EAAI,EAAGA,EAAI89C,EAAM1kD,OAAQ4G,IAE9B,GADAg+C,QAAcG,GAAaH,EAAOF,EAAM99C,GAAIxB,KAAK42C,iBAC7CD,QAzhFK17C,IAyhF0BukD,EAC/B,MAAM,IAAInb,EAA+Bib,EAAMz3C,MAAM,EAAGrG,EAAI,GAAGkE,KAAK,MAG5E,OAAO85C,CACX,CACA,IAAAj6C,CAAKsJ,GACD,OAAO7O,KAAK6+C,OAAOt5C,KAAKsJ,EAC5B,CACA,GAAA1L,GACI,OAAOnD,KAAK6+C,OAAO17C,KACvB,CACA,MAAA2C,GACI,OAAO9F,KAAK6+C,OAAO,EACvB,CACA,KAAAe,CAAMJ,EAAQ,CAAC,GACX,OAAO,IAAIz1B,GAAQy1B,EAAOx/C,KAAKgoC,KAAM,CACjC6U,KAAM78C,KAAK68C,KACX/F,QAAS92C,KAAK82C,QACdH,gBAAiB32C,KAAK22C,iBACvB,CACClF,YAAazxC,KAAKyxC,YAClB2D,YAAap1C,KAAKo1C,aAE1B,CACA,SAAAqK,CAAUzpD,GACN,IAAK,IAAIwL,EAAIxB,KAAK6+C,OAAOjkD,OAAS,EAAG4G,GAAK,EAAGA,IAAK,CAC9C,MAAMq+C,EAAY7/C,KAAK6+C,OAAOr9C,GAC9B,GAAIxL,KAAO6pD,EACP,OAAOA,CACf,CACA,OAAI7pD,KAAOgK,KAAK++C,aACL/+C,KAAK++C,aACT/+C,KAAK82C,OAChB,EAEJ,SAAS6I,GAAahgD,EAAK3J,EAAK4gD,GAE5B,GAAIvU,EADJ1iC,EAAM+iC,EAAS/iC,IAEX,OAAOA,EACX,GAAIzE,EAAQyE,IAAQ3J,EAAM,EACtB,OAAO2J,EAAIA,EAAI/E,SAAU5E,GAC7B,MAAMgJ,EAaV,SAAwBW,EAAK3J,EAAK4gD,GAC9B,OAAIA,GAAoB,EAAev0C,KAAK1C,EAAK3J,IAAU2J,aAAeoiC,EAEnEpiC,EAAI3J,QADP,CAER,CAjBkB8pD,CAAengD,EAAK3J,EAAK4gD,GACvC,YAAc37C,IAAV+D,GAAuBW,aAAeoiC,EAC/BpiC,EAAIqiC,oBAAoBhsC,GAC/BksC,EAAWljC,GACJA,EAAMqD,KAAK1C,GACV,SAAR3J,EAuBR,SAAkB2J,GACd,GAAI,EAAe0C,KAAK1C,EAAK,cAA2B1E,IAAhB0E,EAAU,KAC9C,OAAOA,EAAU,KACrB,GAAIzE,EAAQyE,IAAQmU,EAASnU,GACzB,OAAOA,EAAI/E,OACf,GAAmB,iBAAR+E,EACP,OAAOkC,OAAO8T,KAAKhW,GAAK/E,MAChC,CA7BemlD,CAASpgD,GACH,UAAR3J,EAWb,SAAmB2J,GACf,OAAIzE,EAAQyE,GACDA,EAAI,GACRA,EAAW,KACtB,CAdeqgD,CAAUrgD,GACJ,SAAR3J,EAcb,SAAkB2J,GACd,OAAIzE,EAAQyE,GACDA,EAAIA,EAAI/E,OAAS,GACrB+E,EAAU,IACrB,CAjBesgD,CAAStgD,GACbX,CACX,EA0BA,SAAWu/C,GAEPA,EAAUA,EAAkB,OAAI,GAAK,SAErCA,EAAUA,EAAiB,MAAI,GAAK,OACvC,CALD,CAKGA,KAAcA,GAAY,CAAC,IAE9B,MAAM3/C,GAAMqkC,EAAiBtrC,KAAKiH,KAC5BshD,GAAWjd,EAAiBtrC,KAAKC,KACjCuoD,GAAUld,EAAiBtrC,KAAKE,KAChCkpB,GAAOkiB,EAAiBtrC,KAAKopB,MAC7Bq/B,GAAand,GAAiB,CAACod,EAAUC,EAASC,GAAoB,IAAUA,EAAoB5oD,KAAK2B,MAAM+mD,EAAWC,GAAWD,EAAWC,IAChJhnD,GAAQ2pC,EAAiBtrC,KAAK2B,OAC9BknD,GAAQvd,GAAiB,CAACzoC,EAAG8F,IAAQ9F,EAAI8F,IACzCmgD,GAASxd,GAAiB,CAACzoC,EAAG8F,IAAQ9F,EAAI8F,IAC1CogD,GAAQzd,GAAiB,CAACzoC,EAAG8F,IAAQ9F,EAAI8F,IAa/C,IAAIqgD,GAA2B9+C,OAAO+xC,OAAO,CAC3CznB,UAAW,KACXvtB,IAAKA,GACLshD,SAAUA,GACVC,QAASA,GACTp/B,KAAMA,GACNq/B,WAAYA,GACZ9mD,MAAOA,GACPknD,MAAOA,GACPC,OAAQA,GACRC,MAAOA,GACP5/B,MAvBF,SAAetmB,EAAG8F,EAAM,GACpB9F,EAAIga,EAAQha,GACZ8F,EAAMkU,EAAQlU,GACd,MAAMsgD,EAAMjpD,KAAK4S,IAAI,GAAIjK,GACzB,OAAO3I,KAAKmpB,MAAMtmB,EAAIomD,GAAOA,CACjC,EAmBEC,KAlBF,SAAcrmD,EAAG8F,GAGb,OAFA9F,EAAIga,EAAQha,GACZ8F,EAAMkU,EAAQlU,GACP4sB,OAAO1yB,GAAK0yB,OAAO5sB,EAC9B,IAiBA,MAQMwgD,GAAkB,yBAClBC,GAAoB,CACtB,IAAO,OACP,QAAWD,GACX,OAAU,uCACV,MAAS,iBACT,MAASA,GACT,KAAQ,MA+BZ,IAAIE,GAA0Bn/C,OAAO+xC,OAAO,CAC1CznB,UAAW,KACX80B,WAhDkB3e,GAAM4e,mBAAmBtsC,EAAU0tB,IAAIh6B,QAAQ,MAAO,KAiDxE64C,WAhDkB7e,GAAM7F,mBAAmB7nB,EAAU0tB,IAAIh6B,QAAQ,OAAQ,KAiDzE84C,WAhDkB9e,GAAM7F,mBAAmB7nB,EAAU0tB,IAClDh6B,QAAQ,OAAQ,KAChBA,QAAQ,YAAY2I,GAAK,IAAMA,EAAEiO,WAAW,GAAG1Y,SAAS,IAAI8C,gBA+C/D+3C,WA9CkB/e,GAAMgf,UAAU1sC,EAAU0tB,IACzCh6B,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,KA6CnBi5C,QAnCF,SAAiBvwC,EAAKkiB,EAAO,UAAWsuB,GAAQ,GAC5CxwC,EAAM4D,EAAU5D,GAChB,MAAMywC,EAAWV,GAAkB7tB,GAMnC,OALIuuB,IACa,UAATvuB,IACAliB,EAKZ,SAAuBA,GACnB,OAAOA,EAAI1I,QAAQ,YAAa,KAC3BA,QAAQ,OAAQ,MAChBA,QAAQ,OAAQ,KAChBA,QAAQ,UAAW,KACnBA,QAAQ,UAAW,KACnBA,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,KAChBA,QAAQ,YAAa,KACrBA,QAAQ,UAAW,KACnBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,MAChBA,QAAQ,OAAQ,MAChBA,QAAQ,OAAQ,MAChBA,QAAQ,OAAQ,MAChBA,QAAQ,OAAQ,MAChBA,QAAQ,OAAQ,KACzB,CAtBkBo5C,CAAc1wC,IACxBA,EAAMA,EAAI1I,QAAQm5C,EAAU,KAAKn5C,QAAQ,SAAU,KAEhDk5C,EAAQxwC,EAAMA,EAAI7a,aAC7B,IA6BA,MAAMuP,GAAOu9B,GAAiB,SAAUzoC,EAAG8F,GACvC,MAAMqhD,EAAQnf,EAAQhoC,GAChB85C,EAAMjS,EAAM/hC,GAAO,IAAMsU,EAAUtU,GACnCshD,EAAaD,EAAM/mD,QAAU,EAAI05C,EAAI15C,QAE3C,OADAoF,KAAKukB,QAAQ6wB,YAAY9I,IAAIsV,GACtBD,EAAMj8C,KAAK4uC,EACtB,IACMuN,GAAS5e,GAAkBzoC,GAAMU,EAAQV,GAAKsR,EAAKtR,GAAK,KACxDkrC,GAAQzC,GAAkBzoC,GAAMU,EAAQV,GAAKA,EAAE,GAAK,KACpDoI,GAAUqgC,GAAiB,SAAUzoC,GACvC,MAAMmnD,EAAQnf,EAAQhoC,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIqV,EAAM/mD,QAC5B,IAAI+mD,GAAO/+C,SACtB,IAkDA,SAASD,GAAOnI,EAAG8F,EAAM,IACrB,MAAM4vC,EAAM1N,EAAQhoC,GACd21C,EAAM3N,EAAQliC,GAEpB,OADAN,KAAKukB,QAAQ6wB,YAAY9I,IAAI4D,EAAIt1C,OAASu1C,EAAIv1C,QACvCs1C,EAAIvtC,OAAOwtC,EACtB,CAyHA,IAAI2R,GAA4BjgD,OAAO+xC,OAAO,CAC5CznB,UAAW,KACXzmB,KAAMA,GACNoG,KAAM+1C,GACNnc,MAAOA,GACP9iC,QAASA,GACTm/C,KArLF,UAAex/C,EAAK8G,GAChB,MAAMghB,EAAS,GACTs3B,EAAQnf,EAAQjgC,GACtBvC,KAAKukB,QAAQ6wB,YAAY9I,IAAIqV,EAAM/mD,QACnC,IAAK,MAAMyY,KAAQsuC,EACft3B,EAAO9kB,KAAK,CACR8N,EACAhK,QAAiBrJ,KAAKukB,QAAQ8tB,cAAch/B,EAAMuB,EAAUvL,GAAU5F,MAAM,MAAM,GAAS4P,IAGnG,OAAOgX,EAAO03B,MAAK,CAAC7R,EAAKC,KACrB,MAAM6R,EAAS9R,EAAI,GACb+R,EAAS9R,EAAI,GACnB,OAAO6R,EAASC,GAAU,EAAKD,EAASC,EAAS,EAAI,CAAE,IACxDjqD,KAAIkqD,GAASA,EAAM,IAC1B,EAuKEC,aAtKF,SAAsBviC,EAAOvW,GACzB,MAAM+4C,EAAiBxtC,EAAUvL,GAC3Bg5C,OAAuBpnD,IAAboO,EACV25B,EACA,CAACkN,EAAKC,IAAQnN,EAAuBkN,EAAIkS,GAAiBjS,EAAIiS,IAC9DT,EAAQnf,EAAQ5iB,GAEtB,OADA5f,KAAKukB,QAAQ6wB,YAAY9I,IAAIqV,EAAM/mD,QAC5B,IAAI+mD,GAAOI,KAAKM,EAC3B,EA+JEvgB,KA9JYtnC,GAAOA,GAAKA,EAAEI,QAAW,EA+JrC5C,IA9JF,UAAcuK,EAAK8G,GACf,MAAMi5C,EAAU,GACVX,EAAQnf,EAAQjgC,GACtBvC,KAAKukB,QAAQ6wB,YAAY9I,IAAIqV,EAAM/mD,QACnC,IAAK,MAAMyY,KAAQsuC,EACfW,EAAQ/8C,WAAWvF,KAAKukB,QAAQ8tB,cAAch/B,EAAMuB,EAAUvL,IAAW,IAE7E,OAAOi5C,CACX,EAuJEC,IAtJF,UAAchgD,EAAK8G,GACf,IAAIk5C,EAAM,EACV,MAAMZ,EAAQnf,EAAQjgC,GACtB,IAAK,MAAM8Q,KAAQsuC,EAAO,CACtB,MAAMx9B,EAAO+I,OAAO7jB,QAAiBrJ,KAAKukB,QAAQ8tB,cAAch/B,EAAMuB,EAAUvL,IAAW,GAASgK,GACpGkvC,GAAOr1B,OAAOpB,MAAM3H,GAAQ,EAAIA,CACpC,CACA,OAAOo+B,CACX,EA+IEC,QA9IF,SAAiBjgD,GACb,MAAMo/C,EAAQnf,EAAQjgC,GAEtB,OADAvC,KAAKukB,QAAQ6wB,YAAY9I,IAAIqV,EAAM/mD,QAC5B+mD,EAAM1+C,QAAOq/B,IAAMD,EAAM7tB,EAAQ8tB,KAC5C,EA2IE3/B,OAAQA,GACR4C,KArIF,SAAc/K,EAAG8F,GACb,OAAOqC,GAAON,KAAKrC,KAAMxF,EAAG,CAAC8F,GACjC,EAoIEmiD,QAnIF,SAAiBjoD,EAAG8F,GAChB,MAAMqhD,EAAQnf,EAAQhoC,GACtBwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIqV,EAAM/mD,QACnC,MAAMiI,EAAQ,IAAI8+C,GAElB,OADA9+C,EAAM4/C,QAAQniD,GACPuC,CACX,EA8HEM,IA7HF,SAAa3I,GACT,MAAMqI,EAAQ,IAAI2/B,EAAQhoC,IAE1B,OADAqI,EAAMM,MACCN,CACX,EA0HEO,MAzHF,SAAe5I,GACX,MAAMmnD,EAAQnf,EAAQhoC,GACtBwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIqV,EAAM/mD,QACnC,MAAMiI,EAAQ,IAAI8+C,GAElB,OADA9+C,EAAMO,QACCP,CACX,EAoHEgF,MAnHF,SAAerN,EAAGinC,EAAO7mC,EAAS,GAE9B,OAAIynC,EADJ7nC,EAAIga,EAAQha,IAED,IACNU,EAAQV,KACTA,EAAIoa,EAAUpa,IAClBinC,EAAQA,EAAQ,EAAIjnC,EAAEI,OAAS6mC,EAAQA,EACvCzhC,KAAKukB,QAAQ6wB,YAAY9I,IAAI1xC,GACtBJ,EAAEqN,MAAM45B,EAAOA,EAAQ7mC,GAClC,EA2GE8nD,MA1GF,UAAgBngD,EAAK8G,EAAUs5C,GAC3B,MAAMt4B,EAAS,GACf9nB,EAAMigC,EAAQjgC,GACdvC,KAAKukB,QAAQ6wB,YAAY9I,IAAI/pC,EAAI3H,QACjC,MAAM0W,EAAQ,IAAIo8B,GAAU94B,EAAUvL,IAAWwxC,iBACjD,IAAK,MAAMxnC,KAAQ9Q,EACf8nB,EAAO9kB,WAAW4sC,GAAU7gC,EAAOtR,KAAKukB,QAAQq7B,MAAMvsC,KAE1D,OAAO9Q,EAAIU,QAAO,CAAC2/C,EAAGphD,SACDvG,IAAb0nD,EACO7P,GAASzoB,EAAO7oB,GAAIxB,KAAKukB,SAC7B0gB,GAAO5a,EAAO7oB,GAAImhD,IAEjC,EA8FEE,UA7FF,UAAoBtgD,EAAKugD,EAAUC,GAC/B,MAAMC,EAAW,GACXC,EAAc,IAAI/G,GAAMtnC,EAAUmuC,GAAM/iD,KAAK+7C,QAC7C4F,EAAQnf,EAAQjgC,GACtBvC,KAAKukB,QAAQ6wB,YAAY9I,IAAIqV,EAAM/mD,QACnC,IAAK,MAAMyY,KAAQsuC,EAAO,QACFsB,EAAYjkD,MAAMgB,KAAKukB,QAAQq7B,MAAM,CAAE,CAACkD,GAAWzvC,OAEnE2vC,EAASz9C,KAAK8N,EACtB,CACA,OAAO2vC,CACX,EAmFEE,SAlFF,UAAmB3gD,EAAK8G,GACpB,MAAMrR,EAAM,IAAI28C,IAChBpyC,EAAMigC,EAAQjgC,GACd,MAAM+O,EAAQ,IAAIo8B,GAAU94B,EAAUvL,IAAWwxC,iBACjD76C,KAAKukB,QAAQ6wB,YAAY9I,IAAI/pC,EAAI3H,QACjC,IAAK,MAAMyY,KAAQ9Q,EAAK,CACpB,MAAMvM,QAAYm8C,GAAU7gC,EAAOtR,KAAKukB,QAAQq7B,MAAMvsC,IACjDrb,EAAIo9B,IAAIp/B,IACTgC,EAAI8f,IAAI9hB,EAAK,IACjBgC,EAAI6f,IAAI7hB,GAAKuP,KAAK8N,EACtB,CACA,MAAO,IAAIrb,EAAIouC,WAAWpuC,KAAI,EAAE1C,EAAM6tD,MAAW,CAAG7tD,OAAM6tD,WAC9D,EAuEEC,aAtEF,UAAuB7gD,EAAKugD,EAAUC,GAClC,MAAM/qD,EAAM,IAAI28C,IACVsO,EAAc,IAAI/G,GAAMtnC,EAAUmuC,GAAM/iD,KAAK+7C,QACnDx5C,EAAMigC,EAAQjgC,GACdvC,KAAKukB,QAAQ6wB,YAAY9I,IAAI/pC,EAAI3H,QACjC,IAAK,MAAMyY,KAAQ9Q,EAAK,CACpB,MAAMvM,QAAYitD,EAAYjkD,MAAMgB,KAAKukB,QAAQq7B,MAAM,CAAE,CAACkD,GAAWzvC,KAChErb,EAAIo9B,IAAIp/B,IACTgC,EAAI8f,IAAI9hB,EAAK,IACjBgC,EAAI6f,IAAI7hB,GAAKuP,KAAK8N,EACtB,CACA,MAAO,IAAIrb,EAAIouC,WAAWpuC,KAAI,EAAE1C,EAAM6tD,MAAW,CAAG7tD,OAAM6tD,WAC9D,EA2DE79C,KA1DF,UAAe/C,EAAK8G,EAAUs5C,GAC1B,MAAMrxC,EAAQ,IAAIo8B,GAAU94B,EAAUvL,IAAWwxC,iBAC3C8G,EAAQnf,EAAQjgC,GACtB,IAAK,MAAM8Q,KAAQsuC,EAAO,CAEtB,GAAI1c,SADgBkN,GAAU7gC,EAAOtR,KAAKukB,QAAQq7B,MAAMvsC,IACtCsvC,GACd,OAAOtvC,CACf,CACJ,EAmDEgwC,SAlDF,UAAmB9gD,EAAKugD,EAAUC,GAC9B,MAAMje,EAAY,IAAIoX,GAAMtnC,EAAUmuC,GAAM/iD,KAAK+7C,QAC3C4F,EAAQnf,EAAQjgC,GACtB,IAAK,MAAM8Q,KAAQsuC,EAAO,CAEtB,SADoB7c,EAAU9lC,MAAMgB,KAAKukB,QAAQq7B,MAAM,CAAE,CAACkD,GAAWzvC,KAEjE,OAAOA,CACf,CACJ,EA2CEiwC,KA1CF,SAAc/gD,GAGV,OAFAA,EAAMigC,EAAQjgC,GACdvC,KAAKukB,QAAQ6wB,YAAY9I,IAAI/pC,EAAI3H,QAC1B,IAAI,IAAImtC,IAAIxlC,GACvB,EAuCEghD,OAtCF,SAAgB/oD,EAAGnB,EAAQ,GAEvB,GAAIgpC,EADJ7nC,EAAIga,EAAQha,IAER,MAAO,GACNU,EAAQV,KACTA,EAAIoa,EAAUpa,IAClBwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIjzC,GAC7B,MAAMmqD,EAAW,IAAIhpD,GAAGunD,MAAK,IAAMpqD,KAAKoqB,SAAW,KACnD,OAAc,IAAV1oB,EACOmqD,EAAS,GACbA,EAAS37C,MAAM,EAAGxO,EAC7B,IA8BA,SAASvC,GAAK0D,EAAGwjB,EAAQotB,GACrB,IAAIK,EAAIyL,EAAIwH,EACZ,MAAM5c,GAAkE,QAAzD2J,EAAKjxC,aAA6B,EAASA,EAAEI,cAA2B,IAAP6wC,EAAgBA,EAAK,IAA+E,QAAxEyL,EAAKl5B,aAAuC,EAASA,EAAOpjB,cAA2B,IAAPs8C,EAAgBA,EAAK,IAAuG,QAAhGwH,EAAKtT,aAAuD,EAASA,EAAexwC,cAA2B,IAAP8jD,EAAgBA,EAAK,GACrV1+C,KAAKukB,QAAQ6wB,YAAY9I,IAAIxK,GAC7B,MAAMhrC,EAAO2sD,GAAUjpD,EAAGwF,KAAKukB,QAAQyjB,KAAMoD,GAC7C,OAAKt0C,EAIE6yC,GAAS7yC,EADhBknB,EAASqkB,EADTrkB,EAASxJ,EAAQwJ,IACQhe,KAAKukB,QAAQyjB,KAAKuO,WAAa3hC,EAAUoJ,IAFvDxjB,CAIf,CAaA,SAASkpD,GAAelpD,EAAGmpD,EAAYvuD,EAAM6I,GACzC,MAAMnH,EAAO2sD,GAAUjpD,EAAGwF,KAAKukB,QAAQyjB,MACvC,IAAKlxC,EACD,OAAO0D,EACX,GAAa,YAATpF,EAAoB,CACpB,MAAMqkB,EAAI3iB,EAAKO,UACf,OACMsyC,GAAS7yC,EADE,OAAVmH,EACc,GAAG0lD,KAAclqC,UACjB,GAAGA,OAAOkqC,OACnC,CACA,OAAOha,GAAS7yC,EAAM,MAAM6sD,OAChC,CACA,SAASF,GAAUjpD,EAAGwtC,EAAMoD,GACxB,IAAIt0C,EACJ,MAAM8sD,EAAwBxY,QAAuDA,EAAiBpD,EAAKoD,eACrGF,EAASlD,EAAKkD,OAsBpB,OAnBIp0C,EADM,SADV0D,EAAIga,EAAQha,KACa,UAANA,EACR,IAAIwwC,GAAWj0C,KAAKsB,MAAO6yC,EAAQ0Y,GAErC3vC,EAASzZ,GACP,IAAIwwC,GAAe,IAAJxwC,EAAU0wC,EAAQ0Y,GAEnC9vC,EAAStZ,GACV,QAAQ7E,KAAK6E,GACN,IAAIwwC,GAAgB,KAAJxwC,EAAU0wC,EAAQ0Y,GAEpC5b,EAAKyO,wBAAwCx7C,IAAnBmwC,EACxBJ,GAAWY,0BAA0BpxC,EAAG0wC,GAGxC,IAAIF,GAAWxwC,EAAG0wC,EAAQ0Y,GAI9B,IAAI5Y,GAAWxwC,EAAG0wC,EAAQ0Y,GAE9B9sD,EAAK60C,QAAU70C,OAAOmE,CACjC,CAEA,IAAI4oD,GAA2BhiD,OAAO+xC,OAAO,CAC3CznB,UAAW,KACXr1B,KAAMA,GACNgtD,kBAvDF,SAA2BtpD,GACvB,OAAO1D,GAAKuL,KAAKrC,KAAMxF,EAAG,uBAC9B,EAsDEupD,eArDF,SAAwBvpD,GACpB,OAAO1D,GAAKuL,KAAKrC,KAAMxF,EAAG,2BAC9B,EAoDEwpD,eAnDF,SAAwBxpD,EAAGpF,EAAM6I,GAC7B,OAAOylD,GAAerhD,KAAKrC,KAAMxF,EAAG,KAAMpF,EAAM6I,EACpD,EAkDEgmD,oBAjDF,SAA6BzpD,EAAGpF,EAAM6I,GAClC,OAAOylD,GAAerhD,KAAKrC,KAAMxF,EAAG,KAAMpF,EAAM6I,EACpD,IAuDA,MAAMimD,GAAW,qFAEXC,GAAc,yFA0KpB,IAAIC,GAA6BviD,OAAO+xC,OAAO,CAC7CznB,UAAW,KACXk4B,OA3KF,SAAgB7pD,EAAG8F,GACfukC,EAA4B,IAArBlqC,UAAUC,OAAc,6BAC/B,MAAMs1C,EAAMt7B,EAAUpa,GAChB21C,EAAMv7B,EAAUtU,GAEtB,OADAN,KAAKukB,QAAQ6wB,YAAY9I,IAAI4D,EAAIt1C,OAASu1C,EAAIv1C,QACvCs1C,EAAMC,CACjB,EAsKEmU,QArKF,SAAiB9pD,EAAG8F,GAChBukC,EAA4B,IAArBlqC,UAAUC,OAAc,8BAC/B,MAAMs1C,EAAMt7B,EAAUpa,GAChB21C,EAAMv7B,EAAUtU,GAEtB,OADAN,KAAKukB,QAAQ6wB,YAAY9I,IAAI4D,EAAIt1C,OAASu1C,EAAIv1C,QACvCu1C,EAAMD,CACjB,EAgKEqU,OA/JF,SAAgB/pD,EAAGgqD,GACf,MAAMxzC,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC7B4pD,GACAA,EAAQthB,EAAatuB,EAAU4vC,IACxBxzC,EAAI1I,QAAQ,IAAI5B,OAAO,KAAK89C,MAAW,KAAM,KAEjDxzC,EAAI1I,QAAQ,OAAQ,GAC/B,EAwJEm8C,SAvJF,SAAkBjqD,GACd,MAAMwW,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAI7a,aACf,EAoJEuuD,OAnJF,SAAgBlqD,GACZ,MAAMwW,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1Bga,EAAU5D,GAAK1H,aAC1B,EAgJEywB,OA/IF,SAAgBv/B,EAAG8F,GACf,MAAM0Q,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAIvN,MAAMmR,EAAUtU,IAAMoF,KAAK,GAC1C,EA4IEi/C,aA3IF,SAAsBnqD,EAAGyJ,GACrB,MAAM+M,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAI1I,QAAQsM,EAAU3Q,GAAI,GACrC,EAwIE2gD,YAvIF,SAAqBpqD,EAAGyJ,GACpB,MAAM+M,EAAM4D,EAAUpa,GACtBwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QACjC,MAAM2gD,EAAU3mC,EAAU3Q,GACpBN,EAAQqN,EAAI6zC,YAAYtJ,GAC9B,OAAe,IAAX53C,EACOqN,EACJA,EAAI9I,UAAU,EAAGvE,GAASqN,EAAI9I,UAAUvE,EAAQ43C,EAAQ3gD,OACnE,EAgIEkqD,OA/HF,SAAgB9zC,EAAKwzC,GAGjB,OAFAxzC,EAAM4D,EAAU5D,GAChBhR,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC7B4pD,GACAA,EAAQthB,EAAatuB,EAAU4vC,IACxBxzC,EAAI1I,QAAQ,IAAI5B,OAAO,IAAI89C,OAAY,KAAM,KAEjDxzC,EAAI1I,QAAQ,OAAQ,GAC/B,EAwHE7E,MAvHF,SAAejJ,EAAG8F,GACd,MAAM0Q,EAAM4D,EAAUpa,GACtBwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QACjC,MAAM2H,EAAMyO,EAAIvN,MAAMmR,EAAUtU,IAGhC,KAAOiC,EAAI3H,QAAkC,KAAxB2H,EAAIA,EAAI3H,OAAS,IAClC2H,EAAIY,MACR,OAAOZ,CACX,EA+GEwiD,MA9GF,SAAevqD,EAAGgqD,GACd,MAAMxzC,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC7B4pD,GACAA,EAAQthB,EAAatuB,EAAU4vC,IACxBxzC,EACF1I,QAAQ,IAAI5B,OAAO,KAAK89C,MAAW,KAAM,IACzCl8C,QAAQ,IAAI5B,OAAO,IAAI89C,OAAY,KAAM,KAE3CxzC,EAAI5K,MACf,EAqGE4+C,eApGF,SAAwBxqD,GACpB,MAAMwW,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAI1I,QAAQ,UAAW,GAClC,EAiGE28C,WAhGF,SAAoBj0C,GAGhB,OAFAA,EAAM4D,EAAU5D,GAChBhR,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAI9a,OAAO,GAAGoT,cAAgB0H,EAAInJ,MAAM,GAAG1R,aACtD,EA6FEmS,QA5FF,SAAiB9N,EAAG+gD,EAASn8B,GACzB,MAAMpO,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAIvN,MAAMmR,EAAU2mC,IAAU71C,KAAK0Z,EAC9C,EAyFE8lC,cAxFF,SAAuB1qD,EAAG2qD,EAAMC,GAC5B,MAAMp0C,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAI1I,QAAQsM,EAAUuwC,GAAOC,EACxC,EAqFEC,aApFF,SAAsB7qD,EAAG2qD,EAAMC,GAC3B,MAAMp0C,EAAM4D,EAAUpa,GACtBwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QACjC,MAAM2gD,EAAU3mC,EAAUuwC,GACpBxhD,EAAQqN,EAAI6zC,YAAYtJ,GAC9B,IAAe,IAAX53C,EACA,OAAOqN,EACX,MAAMoO,EAAcxK,EAAUwwC,GAC9B,OAAOp0C,EAAI9I,UAAU,EAAGvE,GAASyb,EAAcpO,EAAI9I,UAAUvE,EAAQ43C,EAAQ3gD,OACjF,EA4EE0qD,SA3EF,SAAkB9qD,EAAGyJ,EAAI,GAAIwlB,EAAI,OAC7B,MAAMzY,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC7BoW,EAAIpW,QAAUqJ,EACPzJ,EACJwW,EAAI9I,UAAU,EAAGjE,EAAIwlB,EAAE7uB,QAAU6uB,CAC5C,EAsEE87B,cArEF,SAAuB/qD,EAAGgrD,EAAQ,GAAI/7B,EAAI,OACtC,MAAMzY,EAAM4D,EAAUpa,GACtBwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QACjC,MAAM2H,EAAMyO,EAAIvN,MAAM,OAClB+hD,GAAS,IACTA,EAAQ,GACZ,IAAIpb,EAAM7nC,EAAIsF,MAAM,EAAG29C,GAAO9/C,KAAK,KAGnC,OAFInD,EAAI3H,QAAU4qD,IACdpb,GAAO3gB,GACJ2gB,CACX,EA4DEqb,qBA3DF,SAA8BjrD,GAC1B,MAAMwW,EAAM4D,EAAUpa,GAEtB,OADAwF,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,QAC1BoW,EAAI1I,QAAQ,OAAQ,IAC/B,EAwDEo9C,gBAvDF,SAAyB9lC,EAAOsT,GAC5B,MAAMliB,EAAM4D,EAAUgL,GAGtB,GAFA5f,KAAKukB,QAAQ6wB,YAAY9I,IAAIt7B,EAAIpW,UACjCglB,EAAQ5O,EAAI5K,QAER,OAAO,EACX,OAAQ8sB,GACJ,IAAK,MAED,OAAQtT,EAAM/mB,MAAMqrD,KAAa,IAAItpD,QAAUglB,EAAM/mB,MAAMsrD,KAAgB,IAAIvpD,OACnF,IAAK,OAED,OAAOspD,GAASvuD,KAAKiqB,GACfA,EAAM/mB,MAAMqrD,IAAUtpD,QAAUglB,EAAM/mB,MAAMsrD,KAAgB,IAAIvpD,OAChEglB,EAAMnc,MAAM,OAAO7I,OAC7B,QAEI,OAAOglB,EAAMnc,MAAM,OAAO7I,OAEtC,EAqCE+qD,yBApCF,SAAkChE,EAAOiE,EAAY,OAEjD,OADA5lD,KAAKukB,QAAQ6wB,YAAY9I,IAAIqV,EAAM/mD,QAC3B+mD,EAAM/mD,QACV,KAAK,EACD,MAAO,GACX,KAAK,EACD,OAAO+mD,EAAM,GACjB,KAAK,EACD,MAAO,GAAGA,EAAM,MAAMiE,KAAajE,EAAM,KAC7C,QACI,MAAO,GAAGA,EAAM95C,MAAM,GAAI,GAAGnC,KAAK,UAAUkgD,KAAajE,EAAMA,EAAM/mD,OAAS,KAE1F,IA2BA,MAAM21C,GAAU1uC,OAAOM,OAAON,OAAOM,OAAON,OAAOM,OAAON,OAAOM,OAAON,OAAOM,OAAON,OAAOM,OAAON,OAAOM,OAAO,CAAC,EAAGkzC,IAAcsL,IAAcK,IAAac,IAAe+B,IAAcO,IAAgB5P,IAiB5M,MAAMqR,GAAY,CAAC,SAAU,QAAS,YA6PtC,SAASC,GAAcrY,EAAWsO,EAAQgK,GACtC,GAAIhK,EAAO1wC,QAAQirC,gBAAiB,CAChC,MAAMhd,EAAOmU,EAAUuK,YAEvB,GADAvK,EAAU5I,OAAOvL,EAAM,qBACA,SAAnBA,EAAKqI,UACL,OACJ,GAAI2c,GAAchlB,GAAO,CAGrB,OAAO0sB,GADWD,EAAOr0C,MAAMkhC,GAAgBtZ,IAEnD,CACA,OAAOA,CACX,CACA,MAAMyD,EAAS,IAAI0Q,EAAU0N,qBAAqBY,EAAO1wC,UACnDgmC,EAAY2U,GAASD,EAAOnI,YAAY7gB,IAC9C,MAAqB,SAAdsU,OAAuBp2C,EAAYo2C,CAC9C,CACA,SAAS2U,GAAS3U,GAEd,OAAyB,IAArBA,EAAUz2C,QAAgB28C,GAAYlG,EAAU,GAAG//B,OAC5C+/B,EAAU,GAAG//B,MAAMi9B,aACvB8C,CACX,CACA,SAAU4U,GAAe3sB,EAAMzqB,EAAKktC,GAChC,MAAoB,iBAATziB,EACAA,EACPx+B,MAAMI,QAAQo+B,GACPyiB,EAAOmK,SAAS3U,gBAAgBjY,EAAMzqB,SACpCsjC,GAAU7Y,EAAMzqB,EACjC,CA8OA,MAAMs3C,WAAyB7gB,EAC3B,WAAA1lC,CAAYhF,EAAQwrD,EAAM7gB,EAAYC,GAClCnC,MAAMzoC,EAAQ2qC,EAAYC,GAC1BxlC,KAAKpF,OAASA,EACdoF,KAAKomD,KAAOA,CAChB,CACA,GAAAxkB,GACI,OAAOjqC,KAAK2B,MAAM0G,KAAKwB,EAAIxB,KAAKomD,MAAQ,CAC5C,CACA,IAAAC,GACI,OAAQrmD,KAAKwB,EAAIxB,KAAKomD,IAC1B,CACA,GAAAvkB,GACI,OAAO7hC,KAAKqmD,OAAS,CACzB,CACA,SAAAC,GACI,OAAuB,IAAhBtmD,KAAKqmD,MAChB,CACA,QAAAE,GACI,OAAOvmD,KAAK6hC,QAAU7hC,KAAKomD,IAC/B,EA0JJ,MAAMtI,GAAO,CACT37C,OAtsBJ,cAAwBqrC,GACpB,WAAA5tC,CAAY0R,EAAOwqC,EAAcC,GAC7B1Y,MAAM/xB,EAAOwqC,EAAcC,GAC3B/7C,KAAKhK,IAAMgK,KAAKytC,UAAU+K,iBAAiBhqB,QAC3CxuB,KAAKytC,UAAU5I,OAAO7kC,KAAKhK,IAAK,0BAChCgK,KAAKytC,UAAUI,YACf7tC,KAAKytC,UAAU5I,OAAiC,MAA1B7kC,KAAKytC,UAAU0K,OAAgB,gBACrDn4C,KAAKytC,UAAU+M,UACfx6C,KAAKhB,MAAQ,IAAIk9C,GAAMl8C,KAAKytC,UAAU2K,oBAAqBp4C,KAAK+7C,OACpE,CACA,OAACrK,CAAO7iC,GACJA,EAAI/I,SAAS9F,KAAKhK,WAAagK,KAAKhB,MAAMA,MAAM6P,EAAK7O,KAAK+7C,OAAO1wC,QAAQwrC,UAC7E,GA2rBA,IAvrBJ,cAAqBrJ,GACjB,WAAA5tC,CAAY0R,EAAOwqC,EAAcC,EAAQgK,GACrC1iB,MAAM/xB,EAAOwqC,EAAcC,GAC3B,MAAMvW,EAAWxlC,KAAKytC,UAAU+K,iBAC1BgO,EAAQxmD,KAAKytC,UAAU+K,iBACvBjT,EAAavlC,KAAKytC,UAAUuK,YAClC,IAAKxS,EAAS1D,QAA4B,OAAlB0kB,EAAMh4B,UAAqB+W,EAC/C,MAAM,IAAI3a,MAAM,gBAAgBtZ,EAAMqwB,aAO1C,IAAI/4B,EALJ5I,KAAKwlC,SAAWA,EAAShX,QACzBxuB,KAAKulC,WAAaA,EAClBvlC,KAAKs6C,KAAO,IAAI7K,GAAKzvC,KAAKytC,UAAU5D,YAAakS,EAAO1wC,QAAQ+qC,mBAChEp2C,KAAKqxC,UAAY,GACjBrxC,KAAKymD,cAAgB,GAErB,MAAMxV,EAAS8U,EAAO/H,YAAYlC,GAC7BxhB,GAAG,SAAS,IAAO1xB,EAAI5I,KAAKqxC,YAC5B/W,GAAG,YAAYosB,IAAS3hB,EAAY2hB,EAAI7rD,MAAO+N,EAAI5I,KAAKymD,aAAa,IACrEnsB,GAAG,cAAcosB,IAAS3hB,EAAY2hB,EAAI7rD,MAAOo2C,EAAOx1B,MAAM,IAC9D6e,GAAG,YAAa2J,GAAQr7B,EAAErD,KAAK0+B,KAC/B3J,GAAG,OAAO,KAAQ,MAAM,IAAI1P,MAAM,OAAOtZ,EAAMqwB,uBAAuB,IAC3EsP,EAAOhmC,OACX,CACA,OAACymC,CAAO7iC,EAAKyiC,GACT,MAAMjgC,EAAIrR,KAAK+7C,OAAOmK,SACtB,IAAI3gB,EAAahD,QAAmB4P,GAAUnyC,KAAKulC,WAAY12B,IAC/D,IAAK02B,EAAW3qC,OAEZ,kBADMyW,EAAEkgC,gBAAgBvxC,KAAKymD,cAAe53C,EAAKyiC,IAGrD,MAAMqV,EAAc,YAAc3mD,KAAKwlC,SAAW,IAAMxlC,KAAKulC,WAAW5D,UACxE9yB,EAAItJ,KAAK,CAAEqhD,SAAU/3C,EAAImwC,YAAY2H,KACrC,MAAMrM,QAAat6C,KAAKs6C,KAAK5I,OAAO7iC,GACpCA,EAAI1L,MAIJoiC,GAHkBvlC,KAAK+7C,OAAO1wC,QAAQw7C,wBAChChlD,OAAO8T,KAAK2kC,GAAMr3C,QAAOq/B,GAAKujB,GAAU7rD,SAASsoC,KACjDujB,GAAU5iD,QAAOq/B,QAAiBrnC,IAAZq/C,EAAKhY,MACVv0B,QAAO,CAACw3B,EAAYyE,KACvC,MAAiB,WAAbA,GAyBAznC,EAxBcgjC,EAwBTlsC,EAxBqBihD,EAAa,OAyB5C/3C,EAAIsF,MAAMxO,IAxBQ,UAAb2wC,EA0BhB,SAAeznC,EAAKlJ,GAChB,OAAOkJ,EAAIsF,MAAM,EAAGxO,EACxB,CA3BuBgoB,CAAMkkB,EAAY+U,EAAY,OAmBrD,SAAkB/3C,GACd,MAAO,IAAIA,GAAKK,SACpB,CApBmBkkD,CAASvhB,GAqB5B,IAAgBhjC,EAAKlJ,CArBkB,GAC5BksC,GACH12B,EAAIowC,YAAY0H,GAAcrM,EAAa,QAAK,GAAK/U,EAAW3qC,QAChE,MAAM4kD,EAAQ,CAAEuH,QAAS,IAAIzhB,EAAYC,EAAW3qC,OAAQoF,KAAKulC,WAAW5D,UAAW3hC,KAAKwlC,WAC5F32B,EAAItJ,KAAKi6C,GACT,IAAK,MAAMnsC,KAAQkyB,EAAY,CAG3B,GAFAia,EAAMx/C,KAAKwlC,UAAYnyB,QACjBhC,EAAEkgC,gBAAgBvxC,KAAKqxC,UAAWxiC,EAAKyiC,GACzCA,EAAe,MAAG,CAClBA,EAAe,OAAI,EACnB,KACJ,CACAA,EAAkB,UAAI,EACtBkO,EAAMuH,QAAQhmD,MAClB,CACA8N,EAAI1L,KACR,GA8nBA6jD,QAlnBJ,cAAyBxZ,GACrB,WAAA5tC,CAAYqnD,EAAUnL,EAAcC,EAAQgK,GAIxC,IAHA1iB,MAAM4jB,EAAUnL,EAAcC,GAC9B/7C,KAAKqxC,UAAY,GACjBrxC,KAAKwlC,SAAWxlC,KAAKknD,mBACdpL,EAAalhD,QAAQ,CACxB,MAAM0W,EAAQwqC,EAAa14C,QAC3B,GAAI01C,GAAWxnC,IAAyB,eAAfA,EAAMhc,KAC3B,OACJ0K,KAAKqxC,UAAU9rC,KAAKwgD,EAAOtK,WAAWnqC,EAAOwqC,GACjD,CACA,MAAM,IAAIlxB,MAAM,OAAOq8B,EAAStlB,uBACpC,CACA,OAAC+P,CAAO7iC,GACJ,MAAMwC,EAAIrR,KAAK+7C,OAAOmK,SAChBnV,QAAa1/B,EAAEkgC,gBAAgBvxC,KAAKqxC,UAAWxiC,GACrDA,EAAI/I,SAAS9F,KAAKwlC,UAAYuL,CAClC,CACA,gBAAAmW,GACI,MAAM5L,EAAOt7C,KAAKytC,UAAU+K,iBAAiBhqB,QAC7C,GAAI8sB,EACA,OAAOA,EACX,MAAM6L,EAASnnD,KAAKytC,UAAUgM,aAC9B,GAAI0N,EACA,OAAOvU,GAAgBuU,GAC3B,MAAMnnD,KAAKytC,UAAU34B,MAAM,uBAC/B,GAylBA,KAtlBJ,cAAsB04B,GAClB,WAAA5tC,CAAYqnD,EAAUnL,EAAcC,EAAQgK,GACxC1iB,MAAM4jB,EAAUnL,EAAcC,GAC9B/7C,KAAKonD,SAAW,GAChBpnD,KAAKymD,cAAgB,GACrBzmD,KAAKhB,MAAQ,IAAIk9C,GAAMl8C,KAAKytC,UAAU2K,oBAAqBp4C,KAAK+7C,QAChE/7C,KAAKymD,cAAgB,GACrB,IAAI79C,EAAI,GACJy+C,EAAY,EAChB,MAAMpW,EAAS8U,EAAO/H,YAAYlC,GAC7BxhB,GAAG,YAAahpB,IACjB,GAAI+1C,EAAY,EACZ,OAEJz+C,EAAI,GACJ,MAAMyhB,EAAS,GACf,MAAQ/Y,EAAMm8B,UAAU/L,OACpBrX,EAAO9kB,KAAK+L,EAAMm8B,UAAUwN,oBAC5B3pC,EAAMm8B,UAAUI,YACe,MAA3Bv8B,EAAMm8B,UAAU0K,OAChB7mC,EAAMm8B,UAAUmM,OAAO,KAGvBtoC,EAAMm8B,UAAUmM,OAAO,MAG/B55C,KAAKonD,SAAS7hD,KAAK,CACf8kB,SACAgnB,UAAWzoC,GACb,IAED0xB,GAAG,YAAY,KAChB+sB,IACAz+C,EAAI5I,KAAKymD,aAAa,IAErBnsB,GAAG,eAAe,IAAM2W,EAAOx1B,SAC/B6e,GAAG,YAAa2J,IACbr7B,IAAM5I,KAAKymD,eAA+B,IAAdY,GAC5Bz+C,EAAErD,KAAK0+B,EACX,IAEC3J,GAAG,OAAO,KACX,MAAM,IAAI1P,MAAM,OAAOq8B,EAAStlB,uBAAuB,IAE3DsP,EAAOhmC,OACX,CACA,OAACymC,CAAO7iC,EAAKyiC,GACT,MAAMjgC,EAAIrR,KAAK+7C,OAAOmK,SAChB5kD,EAASkT,QAAcxU,KAAKhB,MAAMA,MAAM6P,EAAKA,EAAIm5B,KAAK6O,YAC5D,IAAIyQ,GAAY,EAChB,IAAK,MAAMC,KAAUvnD,KAAKonD,SACtB,IAAK,MAAMI,KAAcD,EAAOl9B,OAAQ,CAEpC,GAAI4a,GAAO3jC,QADS6wC,GAAUqV,EAAY34C,EAAKA,EAAIm5B,KAAK6O,YAC7B,OACjBxlC,EAAEkgC,gBAAgBgW,EAAOlW,UAAWxiC,EAAKyiC,GAC/CgW,GAAY,EACZ,KACJ,CACJ,CAECA,UACKj2C,EAAEkgC,gBAAgBvxC,KAAKymD,cAAe53C,EAAKyiC,GAEzD,GAwhBAmW,QArhBJ,cAAyBja,GACrB,WAAA5tC,CAAYqnD,EAAUnL,EAAcC,GAEhC,IADA1Y,MAAM4jB,EAAUnL,EAAcC,GACvBD,EAAalhD,QAAQ,CACxB,MAAM0W,EAAQwqC,EAAa14C,QAC3B,GAAI01C,GAAWxnC,IAAyB,eAAfA,EAAMhc,KAC3B,MACR,CACA,MAAM,IAAIs1B,MAAM,OAAOq8B,EAAStlB,uBACpC,CACA,MAAA+P,GAAW,GA4gBXgW,QAhaJ,cAAyBla,GACrB,WAAA5tC,CAAY0R,EAAOwqC,EAAcC,EAAQgK,GACrC1iB,MAAM/xB,EAAOwqC,EAAcC,GAC3B,MAAM,UAAEtO,GAAcn8B,EACtBtR,KAAW,KAAI8lD,GAAcrY,EAAWztC,KAAK+7C,OAAQgK,GACrD/lD,KAAkB,YAAIsR,EAAMgoB,KAC5B,MAAMmI,EAAQgM,EAAU7kC,EAEA,SADR6kC,EAAU+K,iBACdhqB,SACRif,EAAUI,YACe,MAArBJ,EAAU0K,OACVn4C,KAAK2nD,QAAUla,EAAUuK,YAGzBvK,EAAU7kC,EAAI64B,GAGlBgM,EAAU7kC,EAAI64B,EAClBzhC,KAAKs6C,KAAO,IAAI7K,GAAKhC,EAAU5D,YAAakS,EAAO1wC,QAAQ8qC,eAAiB4F,EAAO1wC,QAAQ+qC,kBAC/F,CACA,OAAC1E,CAAO7iC,EAAKyiC,GACT,MAAM,OAAEyK,EAAM,KAAEzB,EAAI,QAAEqN,GAAY3nD,MAC5B,SAAEkmD,GAAanK,EACflI,QAAkBoS,GAAejmD,KAAW,KAAG6O,EAAKktC,GAC1DlX,EAAOgP,GAAU,IAAM,sBAAsBA,OAC7C,MAAM+T,EAAQ/4C,EAAIqwC,aAAa,SAAU,aACzCrwC,EAAIowC,YAAY,SAAU,CAAC,GAC3BpwC,EAAIowC,YAAY,YAAaV,GAAUsJ,QACvC,MAAMrI,QAAelF,EAAK5I,OAAO7iC,GAC7B84C,IACAnI,EAAM3L,SAAkB1B,GAAUwV,EAAS94C,IAC/C,MAAMwiC,QAAmB0K,EAAO+L,kBAAkBjU,EAAUhlC,EAAIguC,KAAM78C,KAAkB,aACxF6O,EAAItJ,KAAKsJ,EAAIm5B,KAAKmO,cAAgB,CAAEuR,QAASlI,GAAUA,SACjD0G,EAAS3U,gBAAgBF,EAAWxiC,EAAKyiC,GAC/CziC,EAAI1L,MACJ0L,EAAIswC,gBAAgByI,EACxB,GA6XAlW,OA1gBJ,cAAwBlE,GACpB,WAAA5tC,CAAY0R,EAAOwqC,EAAcC,EAAQgK,GACrC1iB,MAAM/xB,EAAOwqC,EAAcC,GAC3B,MAAMtO,EAAYztC,KAAKytC,UAGvB,IAFAztC,KAAKs5B,KAAOwsB,GAAcrY,EAAWztC,KAAK+7C,OAAQgK,GAClD/lD,KAAK88C,YAAcxrC,EAAMgoB,MACjBmU,EAAU/L,OAAO,CACrB+L,EAAUI,YACV,MAAMpM,EAAQgM,EAAU7kC,EAClBm/C,EAAUta,EAAU+K,iBAC1B,IAAwB,SAApBuP,EAAQv5B,SAA0C,QAApBu5B,EAAQv5B,WACtCif,EAAUI,YAEe,MAArBJ,EAAU0K,QAAgB,CAC1B,MAAMn5C,EAAQyuC,EAAUuK,YAExB,GAAIh5C,EAAO,CACP,MAAMgpD,EAAWva,EAAU7kC,EAE3B,IAAIq/C,EACkB,OAFRxa,EAAU+K,iBAEdhqB,QACNy5B,EAAQxa,EAAU+K,iBAElB/K,EAAU7kC,EAAIo/C,EAClBhoD,KAAK+nD,EAAQv5B,SAAW,CAAExvB,QAAOipD,MAAOA,GAASA,EAAMz5B,SACvDif,EAAUI,YACe,MAArBJ,EAAU0K,QACV1K,EAAU+M,UACd,QACJ,CACJ,CAKJ/M,EAAU7kC,EAAI64B,EACd,KACJ,CACAzhC,KAAKs6C,KAAO,IAAI7K,GAAKhC,EAAU5D,YAAakS,EAAO1wC,QAAQ+qC,kBAC/D,CACA,OAAC1E,CAAO7iC,EAAKyiC,GACT,MAAM,OAAEyK,EAAM,KAAEzB,GAASt6C,KACnB6zC,QAAkBoS,GAAejmD,KAAW,KAAG6O,EAAKktC,GAC1DlX,EAAOgP,GAAU,IAAM,sBAAsBA,OAC7C,MAAMqU,EAAWr5C,EAAI+wC,QACfJ,EAAQ0I,EAASpiD,SAEvB,GADAwgC,EAASkZ,QAAalF,EAAK5I,OAAO7iC,IAC9B7O,KAAW,KAAG,CACd,MAAM,MAAEhB,EAAK,MAAEipD,GAAUjoD,KAAW,KACpCw/C,EAAMyI,GAASpU,SAAkB1B,GAAUnzC,EAAO6P,EACtD,CACA,GAAI7O,KAAU,IAAG,CACb,MAAM,MAAEhB,EAAK,MAAEipD,GAAUjoD,KAAU,IAC7BulC,EAAahD,QAAmB4P,GAAUnzC,EAAO6P,IACvD2wC,EAAe,QAAI,IAAIla,EAAYC,EAAW3qC,OAAQoE,EAAM2iC,UAAWsmB,GACvE,IAAK,MAAM50C,KAAQkyB,EAAY,CAC3Bia,EAAMyI,GAAS50C,EACf,MAAMg+B,QAAmB0K,EAAO+L,kBAAkBjU,EAAUqU,EAASrL,KAAM78C,KAAkB,mBACvF+7C,EAAOmK,SAAS3U,gBAAgBF,EAAW6W,EAAU5W,GAC3DkO,EAAe,QAAEz+C,MACrB,CACJ,KACK,CACD,MAAMswC,QAAmB0K,EAAO+L,kBAAkBjU,EAAUqU,EAASrL,KAAM78C,KAAkB,mBACvF+7C,EAAOmK,SAAS3U,gBAAgBF,EAAW6W,EAAU5W,EAC/D,CACJ,GAycA6W,UA3XJ,cAA2B3a,GACvB,WAAA5tC,CAAY0R,EAAOwqC,EAAcC,GAC7B1Y,MAAM/xB,EAAOwqC,EAAcC,GAC3B/7C,KAAKwlC,SAAWxlC,KAAKytC,UAAU+K,iBAAiBhqB,OACpD,CACA,MAAAkjB,CAAOntB,EAAS+sB,GACZ,MAAMkO,EAAQj7B,EAAQw6B,aACjB9qC,EAASurC,EAAMx/C,KAAKwlC,aACrBga,EAAMx/C,KAAKwlC,UAAY,GAE3B8L,EAAQR,MAAMl8B,IAAY4qC,EAAMx/C,KAAKwlC,WACzC,GAiXA4iB,UAjSJ,cAA2B5a,GACvB,WAAA5tC,CAAY0R,EAAOwqC,EAAcC,GAC7B1Y,MAAM/xB,EAAOwqC,EAAcC,GAC3B/7C,KAAKwlC,SAAWxlC,KAAKytC,UAAU+K,iBAAiBhqB,OACpD,CACA,MAAAkjB,CAAOntB,EAAS+sB,GACZ,MAAMkO,EAAQj7B,EAAQw6B,aACjB9qC,EAASurC,EAAMx/C,KAAKwlC,aACrBga,EAAMx/C,KAAKwlC,UAAY,GAE3B,MAAMvvC,EAAMupD,EAAMx/C,KAAKwlC,UACvBga,EAAMx/C,KAAKwlC,YACX8L,EAAQR,MAAMl8B,EAAU3e,GAC5B,GAqRAoyD,MA/WJ,cAAuB7a,GACnB,WAAA5tC,CAAY0R,EAAOwqC,EAAcC,GAC7B1Y,MAAM/xB,EAAOwqC,EAAcC,GAC3B/7C,KAAKg9C,WAAa,GAClB,MAAMsL,EAAQtoD,KAAKytC,UAAUuK,YAU7B,IATAh4C,KAAKytC,UAAUI,YACXya,IAC8B,MAA1BtoD,KAAKytC,UAAU0K,QACfn4C,KAAKsoD,MAAQA,EACbtoD,KAAKytC,UAAU+M,WAGfx6C,KAAKg9C,WAAWz3C,KAAK+iD,KAErBtoD,KAAKytC,UAAU/L,OAAO,CAC1B,MAAM1iC,EAAQgB,KAAKytC,UAAUuK,YACzBh5C,GACAgB,KAAKg9C,WAAWz3C,KAAKvG,GACzBgB,KAAKytC,UAAUmM,OAAO,IAC1B,CACA55C,KAAKytC,UAAU5I,OAAO7kC,KAAKg9C,WAAWpiD,QAAQ,IAAM,sBAAsB0W,EAAMqwB,cACpF,CACA,OAAC+P,CAAO7iC,EAAKyiC,GACT,MACMiX,EAAc,eADCpW,GAAUnyC,KAAKsoD,MAAOz5C,MACH7O,KAAKg9C,WAAWt3C,KAAK,KACvD8iD,EAAS35C,EAAImwC,YAAY,SAC/B,IAAIyJ,EAAMD,EAAOD,QACLttD,IAARwtD,IACAA,EAAMD,EAAOD,GAAe,GAEhC,MAAM1I,EAAY7/C,KAAKg9C,WAAWyL,GAGlC,OAFAA,GAAOA,EAAM,GAAKzoD,KAAKg9C,WAAWpiD,OAClC4tD,EAAOD,GAAeE,QACTtW,GAAU0N,EAAWhxC,EACtC,GA8UA,GA3UJ,cAAoB2+B,GAChB,WAAA5tC,CAAYqnD,EAAUnL,EAAcC,EAAQgK,GACxC1iB,MAAM4jB,EAAUnL,EAAcC,GAC9B/7C,KAAKonD,SAAW,GAChB,IAAIx+C,EAAI,GACRm9C,EAAO/H,YAAYlC,GACdxhB,GAAG,SAAS,IAAMt6B,KAAKonD,SAAS7hD,KAAK,CACtCvG,MAAO,IAAIk9C,GAAM+K,EAASpsD,KAAMmF,KAAK+7C,QACrC1K,UAAYzoC,EAAI,OAEf0xB,GAAG,aAAchpB,IAClBuzB,GAAQ7kC,KAAKymD,cAAe,+BAC5BzmD,KAAKonD,SAAS7hD,KAAK,CACfvG,MAAO,IAAIk9C,GAAM5qC,EAAMzW,KAAMmF,KAAK+7C,QAClC1K,UAAYzoC,EAAI,IAClB,IAED0xB,GAAG,YAAYosB,IAChB3hB,EAAY2hB,EAAI7rD,MAChBgqC,GAAQ7kC,KAAKymD,cAAe,mBAC5B79C,EAAI5I,KAAKymD,cAAgB,EAAE,IAE1BnsB,GAAG,aAAa,SAAUosB,GAAO3hB,EAAY2hB,EAAI7rD,MAAOmF,KAAKyb,MAAQ,IACrE6e,GAAG,YAAa2J,GAAQr7B,EAAErD,KAAK0+B,KAC/B3J,GAAG,OAAO,KAAQ,MAAM,IAAI1P,MAAM,OAAOq8B,EAAStlB,uBAAuB,IACzE12B,OACT,CACA,OAACymC,CAAO7iC,EAAKyiC,GACT,MAAMjgC,EAAIrR,KAAK+7C,OAAOmK,SACtB,IAAK,MAAM,MAAElnD,EAAK,UAAEqyC,KAAerxC,KAAKonD,SAAU,CAE9C,GAAItU,SADY9zC,EAAMA,MAAM6P,EAAKA,EAAIm5B,KAAK6O,WAC1BhoC,GAEZ,kBADMwC,EAAEkgC,gBAAgBF,EAAWxiC,EAAKyiC,GAGhD,OACMjgC,EAAEkgC,gBAAgBvxC,KAAKymD,eAAiB,GAAI53C,EAAKyiC,EAC3D,GAuSA50C,OApRJ,cAAwB8wC,GACpB,WAAA5tC,CAAY0R,EAAOwqC,EAAcC,EAAQgK,GACrC1iB,MAAM/xB,EAAOwqC,EAAcC,GAC3B/7C,KAAKs5B,KAAOwsB,GAAc9lD,KAAKytC,UAAWztC,KAAK+7C,OAAQgK,GACvD/lD,KAAkB,YAAIsR,EAAMgoB,KAC5Bt5B,KAAKnF,KAAO,IAAI40C,GAAKzvC,KAAKytC,UAAU5D,YAAakS,EAAO1wC,QAAQ+qC,mBAChEp2C,KAAKqxC,UAAY0U,EAAOnI,YAAY9B,EACxC,CACA,OAACpK,CAAO7iC,EAAKyiC,GACT,MAAM,OAAEyK,EAAM,KAAElhD,EAAI,KAAEy+B,GAASt5B,MACzB,SAAEkmD,GAAanK,EACrB,QAAa9gD,IAATq+B,EAGA,OAFAzqB,EAAIowC,YAAY,YAAaV,GAAUsJ,mBACjC3B,EAAS3U,gBAAgBvxC,KAAKqxC,UAAWxiC,EAAKyiC,IAGxD,MAAMuC,QAAkBoS,GAAejmD,KAAKs5B,KAAMzqB,EAAKktC,GACvDlX,EAAOgP,GAAU,IAAM,sBAAsBA,OAC7C,MAAMxC,QAAmB0K,EAAO2M,iBAAiB7U,EAAUhlC,EAAIguC,KAAM78C,KAAkB,aAEvF6O,EAAIowC,YAAY,YAAaV,GAAUoK,OACvC,MAAM5X,QAAamV,EAAS3U,gBAAgBvxC,KAAKqxC,UAAWxiC,GACtD+5C,EAAS/5C,EAAImwC,YAAY,eAEZ/jD,IAAf2tD,EAAO,MACPA,EAAO,IAAM,CAACC,EAAQvX,IAAYA,EAAQR,MAAMC,IACpDliC,EAAIowC,YAAY,YAAaV,GAAUsJ,QAEvCh5C,EAAItJ,WAAY1K,EAAK62C,OAAO7iC,UACtBq3C,EAAS3U,gBAAgBF,EAAWxiC,EAAKyiC,GAC/CziC,EAAI1L,KACR,GAsPAqzB,MAnPJ,cAAuBgX,GACnB,WAAA5tC,CAAY0R,EAAOwqC,EAAcC,EAAQgK,GACrC1iB,MAAM/xB,EAAOwqC,EAAcC,GAC3B/7C,KAAKqxC,UAAY,GACjB,MAAMx4C,EAAQ,MAAMixC,KAAKx4B,EAAMzW,MAE/B,IADAmF,KAAKw2B,MAAQ39B,EAAQA,EAAM,GAAK,GACzBijD,EAAalhD,QAAQ,CACxB,MAAM0W,EAAQwqC,EAAa14C,QAC3B,GAAI01C,GAAWxnC,IAAyB,aAAfA,EAAMhc,KAC3B,OACJ,MAAM8rB,EAAW2kC,EAAOtK,WAAWnqC,EAAOwqC,GAC1C97C,KAAKqxC,UAAU9rC,KAAK6b,EACxB,CACA,MAAM,IAAIwJ,MAAM,OAAOtZ,EAAMqwB,uBACjC,CACA,OAAC+P,CAAO7iC,EAAKyiC,GACT,MAAMwX,EAAc9oD,KAAK+oD,eAAel6C,GACpCA,EAAImwC,YAAY,eAAiBT,GAAUoK,MAC3C95C,EAAImwC,YAAY,UAAUh/C,KAAKw2B,OAASsyB,QAGlCA,EAAY,IAAIjjB,EAAayL,EAE3C,CACA,cAAAyX,CAAel6C,GACX,MAAM,OAAEktC,EAAM,UAAE1K,GAAcrxC,KACxBgpD,EAAcn6C,EAAImwC,YAAY,UAAUh/C,KAAKw2B,OAC7CyyB,EAAgB,UAAWC,EAAY5X,GAEzCziC,EAAItJ,KAAK,CAAEixB,MAAO0yB,UACZnN,EAAOmK,SAAS3U,gBAAgBF,EAAWxiC,EAAKyiC,GACtDziC,EAAI1L,KACR,EACA,OAAO6lD,EACD,CAACE,EAAY5X,IAAY0X,EAAY,IAAInjB,GAAU,IAAMojB,EAAcC,EAAY5X,KAAWA,GAC9F2X,CACV,GAgNArU,IA7MJ,cAAqBpH,GACjB,WAAA5tC,CAAYqnD,EAAUnL,EAAcC,GAGhC,IAFA1Y,MAAM4jB,EAAUnL,EAAcC,GAC9B/7C,KAAK+8B,OAAS,GACP+e,EAAalhD,QAAQ,CACxB,MAAM0W,EAAQwqC,EAAa14C,QAC3B,GAAI01C,GAAWxnC,IAAyB,WAAfA,EAAMhc,KAC3B,OACJ0K,KAAK+8B,OAAOx3B,KAAK+L,EACrB,CACA,MAAM,IAAIsZ,MAAM,OAAOq8B,EAAStlB,uBACpC,CACA,MAAA+P,GACI,OAAO1xC,KAAK+8B,OAAO/kC,KAAKsZ,GAAUA,EAAMqwB,YAAWj8B,KAAK,GAC5D,GAgMAyjD,SAtKJ,cAA0B3b,GACtB,WAAA5tC,CAAYqnD,EAAUnL,EAAcC,EAAQgK,GACxC1iB,MAAM4jB,EAAUnL,EAAcC,GAC9B,MAAMvW,EAAWxlC,KAAKytC,UAAU+K,iBAChCx4C,KAAKytC,UAAUI,YACf,MAAM/I,EAAY9kC,KAAKytC,UAAU+K,iBAC3B4Q,EAAkBppD,KAAKytC,UAAUuK,YACvC,GAA0B,OAAtBlT,EAAUtW,UAAqB46B,EAC/B,MAAM,IAAIx+B,MAAM,gBAAgBq8B,EAAStlB,aAM7C,IAAI/4B,EAJJ5I,KAAKwlC,SAAWA,EAAShX,QACzBxuB,KAAKulC,WAAa6jB,EAClBppD,KAAKnF,KAAO,IAAI40C,GAAKzvC,KAAKytC,UAAU5D,YAAakS,EAAO1wC,QAAQ+qC,mBAChEp2C,KAAKqxC,UAAY,GAEjB,MAAMJ,EAAS8U,EAAO/H,YAAYlC,GAC7BxhB,GAAG,SAAS,IAAO1xB,EAAI5I,KAAKqxC,YAC5B/W,GAAG,mBAAmB,IAAM2W,EAAOx1B,SACnC6e,GAAG,YAAa2J,GAAQr7B,EAAErD,KAAK0+B,KAC/B3J,GAAG,OAAO,KACX,MAAM,IAAI1P,MAAM,OAAOq8B,EAAStlB,uBAAuB,IAE3DsP,EAAOhmC,OACX,CACA,OAACymC,CAAO7iC,EAAKyiC,GACT,IAAI/L,EAAahD,QAAmB4P,GAAUnyC,KAAKulC,WAAY12B,IAC/D,MAAMhU,QAAcmF,KAAKnF,KAAK62C,OAAO7iC,GAC/BzW,EAASyC,EAAKzC,QAAU,EACxBipB,OAAwBpmB,IAAfJ,EAAKwmB,MAAuBkkB,EAAW3qC,OAASC,EAAKwmB,MACpEkkB,EAAaA,EAAW19B,MAAMzP,EAAQA,EAASipB,GAC/C,MAAM+kC,EAAOvrD,EAAKurD,MAAQ7gB,EAAW3qC,OAC/ByW,EAAIrR,KAAK+7C,OAAOmK,SAChBmD,EAAe,IAAIlD,GAAiB5gB,EAAW3qC,OAAQwrD,EAAMpmD,KAAKulC,WAAW5D,UAAW3hC,KAAKwlC,UAC7Fga,EAAQ,CAAE6J,gBAChBx6C,EAAItJ,KAAKi6C,GACT,IAAK,IAAIiJ,EAAM,EAAGA,EAAMljB,EAAW3qC,OAAQ6tD,IAAOY,EAAatoD,OAC3Dy+C,EAAMx/C,KAAKwlC,UAAYD,EAAWkjB,GACN,IAAxBY,EAAahD,SACc,IAAvBgD,EAAaznB,OACb0P,EAAQR,MAAM,SAClBQ,EAAQR,MAAM,iBAAiBuY,EAAaznB,YAEhD0P,EAAQR,MAAM,iBAAiBuY,EAAaxnB,iBACtCxwB,EAAEkgC,gBAAgBvxC,KAAKqxC,UAAWxiC,EAAKyiC,GAC7CA,EAAQR,MAAM,SAEdvL,EAAW3qC,QACX02C,EAAQR,MAAM,SAClBjiC,EAAI1L,KACR,GAsHAmmD,OAnHJ,cAAwB9b,GACpB,WAAA5tC,CAAYqnD,EAAUnL,EAAcC,EAAQgK,GACxC1iB,MAAM4jB,EAAUnL,EAAcC,GAC9B/7C,KAAKonD,SAAW,GAChBpnD,KAAKymD,cAAgB,GACrB,IAAI79C,EAAI,GACJy+C,EAAY,EAChBtB,EAAO/H,YAAYlC,GACdxhB,GAAG,SAAS,IAAMt6B,KAAKonD,SAAS7hD,KAAK,CACtCvG,MAAO,IAAIk9C,GAAM+K,EAASpsD,KAAMmF,KAAK+7C,QACrCpmD,KAAMo9C,GACN1B,UAAYzoC,EAAI,OAEf0xB,GAAG,aAAchpB,IACd+1C,EAAY,EACZz+C,EAAI,GAGR5I,KAAKonD,SAAS7hD,KAAK,CACfvG,MAAO,IAAIk9C,GAAM5qC,EAAMzW,KAAMmF,KAAK+7C,QAClCpmD,KAAMm9C,GACNzB,UAAYzoC,EAAI,IAClB,IAED0xB,GAAG,YAAY,KAChB+sB,IACAz+C,EAAI5I,KAAKymD,aAAa,IAErBnsB,GAAG,iBAAiB,WAAct6B,KAAKyb,MAAQ,IAC/C6e,GAAG,YAAa2J,IACbr7B,IAAM5I,KAAKymD,eAA+B,IAAdY,GAC5Bz+C,EAAErD,KAAK0+B,EACX,IAEC3J,GAAG,OAAO,KAAQ,MAAM,IAAI1P,MAAM,OAAOq8B,EAAStlB,uBAAuB,IACzE12B,OACT,CACA,OAACymC,CAAO7iC,EAAKyiC,GACT,MAAMjgC,EAAIrR,KAAK+7C,OAAOmK,SACtB,IAAK,MAAM,MAAElnD,EAAK,KAAErJ,EAAI,UAAE07C,KAAerxC,KAAKonD,SAAU,CAEpD,GAAIzxD,QADYqJ,EAAMA,MAAM6P,EAAKA,EAAIm5B,KAAK6O,WAC9BhoC,GAER,kBADMwC,EAAEkgC,gBAAgBF,EAAWxiC,EAAKyiC,GAGhD,OACMjgC,EAAEkgC,gBAAgBvxC,KAAKymD,cAAe53C,EAAKyiC,EACrD,GAqEA,MAlEJ,cAAuB9D,GACnB,MAAAkE,CAAO7iC,EAAKyiC,GACRA,EAAe,OAAI,CACvB,GAgEA,SA7DJ,cAA0B9D,GACtB,MAAAkE,CAAO7iC,EAAKyiC,GACRA,EAAkB,UAAI,CAC1B,GA2DAiY,KAxDJ,cAAsB/b,GAClB,WAAA5tC,CAAY0R,EAAOwqC,EAAcC,GAC7B1Y,MAAM/xB,EAAOwqC,EAAcC,GAC3B/7C,KAAKytC,UAAUI,YACV7tC,KAAKytC,UAAU/L,QAChB1hC,KAAKhB,MAAQ,IAAIk9C,GAAMl8C,KAAKytC,UAAU2K,oBAAqBp4C,KAAK+7C,QAExE,CACA,OAACrK,CAAO7iC,EAAKyiC,GACT,IAAKtxC,KAAKhB,MACN,OACJ,MAAM/I,QAAY+J,KAAKhB,MAAMA,MAAM6P,GAAK,GACxCyiC,EAAQR,MAAM76C,EAClB,GA4CA8lD,OAzCJ,cAAwBvO,GACpB,WAAA5tC,CAAY0R,EAAOwqC,EAAcC,EAAQgK,GACrC1iB,MAAM/xB,EAAOwqC,EAAcC,GAC3B,MAAMhf,EAAS/8B,KAAKytC,UAAUoM,oBAAoB75C,KAAK+7C,OAAO1wC,SAC9DrL,KAAKqxC,UAAY0U,EAAOnI,YAAY7gB,EACxC,CACA,OAAC2U,CAAO7iC,EAAKyiC,SACHtxC,KAAK+7C,OAAOmK,SAAS3U,gBAAgBvxC,KAAKqxC,UAAWxiC,EAAKyiC,EACpE,GAkCA,IA/BJ,cAA+B9D,GAC3B,WAAA5tC,CAAYqnD,EAAUnL,EAAcC,GAEhC,GADA1Y,MAAM4jB,EAAUnL,EAAcC,IACgB,IAA1CkL,EAASpsD,KAAKs6B,OAAO,gBACrB,MAAM,IAAIvK,MAAM,kEAExB,CACA,MAAA8mB,GAAW,IA2Bf,MAAM8X,GACF,WAAA5pD,CAAYooC,EAAO,CAAC,GAChBhoC,KAAKkmD,SAAW,IAAI/U,GACpBnxC,KAAKuwC,QAAU,CAAC,EAChBvwC,KAAK89C,KAAO,CAAC,EACb99C,KAAKqL,QAAU4rC,GAAUjP,GAEzBhoC,KAAK+lD,OAAS,IAAIxI,GAAOv9C,MACzB2iC,EAAOmb,IAAM,CAAC2L,EAAMn0D,IAAS0K,KAAK0pD,YAAYp0D,EAAMm0D,KACpD9mB,EAAO4N,IAAS,CAACsE,EAASv/C,IAAS0K,KAAK2pD,eAAer0D,EAAMu/C,IACjE,CACA,KAAAnjC,CAAMq/B,EAAM8C,GAER,OADe,IAAI0J,GAAOv9C,MACZ0R,MAAMq/B,EAAM8C,EAC9B,CACA,OAAA+V,CAAQ3lB,EAAKub,EAAOf,GAChB,MAAM5vC,EAAM2wC,aAAiBz1B,GAAUy1B,EAAQ,IAAIz1B,GAAQy1B,EAAOx/C,KAAKqL,QAASozC,GAChF,OAAOz+C,KAAKkmD,SAAS3U,gBAAgBtN,EAAKp1B,EAC9C,CACA,MAAA6iC,CAAOzN,EAAKub,EAAOf,GACf,OAAOlY,EAAUvmC,UAAM,OAAQ,GAAQ,YACnC,OAAO8mC,GAAU9mC,KAAK4pD,QAAQ3lB,EAAKub,EAAO39C,OAAOM,OAAON,OAAOM,OAAO,CAAC,EAAGs8C,GAAgB,CAAE5B,MAAM,KACtG,GACJ,CACA,UAAAgN,CAAW5lB,EAAKub,EAAOf,GACnB,OAAO1X,GAAY/mC,KAAK4pD,QAAQ3lB,EAAKub,EAAO39C,OAAOM,OAAON,OAAOM,OAAO,CAAC,EAAGs8C,GAAgB,CAAE5B,MAAM,KACxG,CACA,kBAAAiN,CAAmB7lB,EAAKub,EAAOf,EAAgB,CAAC,GAC5C,MAAM5vC,EAAM,IAAIkb,GAAQy1B,EAAOx/C,KAAKqL,QAASozC,GAC7C,OAAOz+C,KAAKkmD,SAAS9U,4BAA4BnN,EAAKp1B,EAC1D,CACA,eAAAk7C,CAAgBhZ,EAAMyO,EAAOf,GACzB,MAAMxa,EAAMjkC,KAAK0R,MAAMq/B,GACvB,OAAO/wC,KAAK4pD,QAAQ3lB,EAAKub,EAAOf,EACpC,CACA,cAAAuL,CAAejZ,EAAMyO,EAAOf,GACxB,OAAOlY,EAAUvmC,UAAM,OAAQ,GAAQ,YACnC,OAAO8mC,GAAU9mC,KAAK+pD,gBAAgBhZ,EAAMyO,EAAO39C,OAAOM,OAAON,OAAOM,OAAO,CAAC,EAAGs8C,GAAgB,CAAE5B,MAAM,KAC/G,GACJ,CACA,kBAAAoN,CAAmBlZ,EAAMyO,EAAOf,GAC5B,OAAO1X,GAAY/mC,KAAK+pD,gBAAgBhZ,EAAMyO,EAAO39C,OAAOM,OAAON,OAAOM,OAAO,CAAC,EAAGs8C,GAAgB,CAAE5B,MAAM,KACjH,CACA,iBAAAiL,CAAkBxuB,EAAMujB,EAAMC,GAC1B,OAAO,IAAIS,GAAOv9C,MAAMw9C,UAAUlkB,EAAMujB,EAAMR,GAAW6N,SAAUpN,EACvE,CACA,gBAAA4L,CAAiBpvB,EAAMujB,EAAMC,GACzB,OAAO,IAAIS,GAAOv9C,MAAMw9C,UAAUlkB,EAAMujB,EAAMR,GAAW8N,QAASrN,EACtE,CACA,UAAAY,CAAWpkB,EAAMujB,EAAMuN,EAAYtN,GAC/B,OAAO,IAAIS,GAAOv9C,MAAMw9C,UAAUlkB,EAAMujB,EAAMuN,EAAYtN,EAC9D,CACA,SAAAU,CAAUlkB,EAAM8wB,GACZ,OAAO7jB,EAAUvmC,UAAM,OAAQ,GAAQ,YACnC,OAAO8mC,GAAU,IAAIyW,GAAOv9C,MAAMw9C,UAAUlkB,GAAM,EAAO8wB,GAC7D,GACJ,CACA,aAAAC,CAAc/wB,EAAM8wB,GAChB,OAAOrjB,GAAY,IAAIwW,GAAOv9C,MAAMw9C,UAAUlkB,GAAM,EAAM8wB,GAC9D,CACA,YAACE,CAAYhxB,EAAMzqB,EAAK07C,GACpB,MAAMlZ,QAAmBrxC,KAAK09C,WAAWpkB,EAAMixB,EAAkB1N,KAAM0N,EAAkBH,YACzF,aAAapqD,KAAK4pD,QAAQvY,EAAWxiC,EAAK07C,EAC9C,CACA,UAAAC,CAAWlxB,EAAMzqB,EAAK07C,GAClB,OAAOhkB,EAAUvmC,UAAM,OAAQ,GAAQ,YACnC,OAAO8mC,GAAU9mC,KAAKsqD,YAAYhxB,EAAMzqB,EAAKhN,OAAOM,OAAON,OAAOM,OAAO,CAAC,EAAGooD,GAAoB,CAAE1N,MAAM,KAC7G,GACJ,CACA,cAAA4N,CAAenxB,EAAMzqB,EAAK07C,GACtB,OAAOxjB,GAAY/mC,KAAKsqD,YAAYhxB,EAAMzqB,EAAKhN,OAAOM,OAAON,OAAOM,OAAO,CAAC,EAAGooD,GAAoB,CAAE1N,MAAM,KAC/G,CACA,sBAAA6N,CAAuBpxB,EAAMkmB,EAAOf,GAChC,OAAOlY,EAAUvmC,UAAM,OAAQ,GAAQ,YACnC,MAAMqxC,QAAkBrxC,KAAKw9C,UAAUlkB,GACvC,OAAOt5B,KAAK8pD,mBAAmBzY,EAAWmO,EAAOf,EACrD,GACJ,CACA,UAAAkM,CAAW35C,EAAKwuC,GACZ,MAAMxgD,EAAQ,IAAIk9C,GAAMlrC,EAAKhR,MACvB6O,EAAM2wC,aAAiBz1B,GAAUy1B,EAAQ,IAAIz1B,GAAQy1B,EAAOx/C,KAAKqL,SACvE,OAAOrM,EAAMA,MAAM6P,EACvB,CACA,SAAA+7C,CAAU55C,EAAKwuC,GACX,OAAOjZ,EAAUvmC,UAAM,OAAQ,GAAQ,YACnC,OAAO8mC,GAAU9mC,KAAK2qD,WAAW35C,EAAKwuC,GAC1C,GACJ,CACA,aAAAqL,CAAc75C,EAAKwuC,GACf,OAAOzY,GAAY/mC,KAAK2qD,WAAW35C,EAAKwuC,GAC5C,CACA,cAAAmK,CAAer0D,EAAM2N,GACjBjD,KAAKuwC,QAAQj7C,GAAQ2N,CACzB,CACA,WAAAymD,CAAYp0D,EAAMoxD,GAh1DtB,IAAwBr7C,EAi1DhBrL,KAAK89C,KAAKxoD,GAAQ4sC,EAAWwkB,GAAOA,GAj1DpBr7C,EAi1DyCq7C,EAh1DtD,cAAclZ,GACjB,WAAA5tC,CAAY0R,EAAOyrB,EAAQgf,GACvB1Y,MAAM/xB,EAAOyrB,EAAQgf,GACjB7Z,EAAW72B,EAAQqG,QACnBrG,EAAQqG,MAAMrP,KAAKrC,KAAMsR,EAAOyrB,EAExC,CACA,OAAC2U,CAAO7iC,EAAKyiC,GACT,MAAMgJ,QAAc,IAAI7K,GAAKzvC,KAAKsR,MAAMzW,KAAMgU,EAAIm5B,KAAKoO,mBAAmB1E,OAAO7iC,GACjF,aAAaxD,EAAQqmC,OAAOrvC,KAAKrC,KAAM6O,EAAKyiC,EAASgJ,EACzD,GAu0DJ,CACA,MAAAx0B,CAAOA,GACH,OAAOA,EAAOzjB,KAAKrC,KAAMwpD,GAC7B,CACA,OAAAsB,GACI,MAAMv7B,EAAOvvB,KACb,IAAI+qD,GAAY,EAChB,OAAO,SAAUC,EAAUn8C,EAAKkE,GAC5B,GAAIg4C,EAAW,CACXA,GAAY,EACZ,MAAMhO,EAAO3F,GAAuBp3C,KAAKjE,MACzCwzB,EAAKlkB,QAAQtP,KAAK0mD,WAAW1F,GAC7BxtB,EAAKlkB,QAAQ2qC,QAAQyM,WAAW1F,GAChCxtB,EAAKlkB,QAAQ4qC,SAASwM,WAAW1F,EACrC,CACAxtB,EAAKi7B,WAAWQ,EAAUn8C,GAAKnO,MAAKqwC,GAAQh+B,EAAS,KAAMg+B,IAAOh+B,EACtE,CACJ,yPChnIJwW,GAAA,kBAAAC,CAAA,MAAAnkB,EAAAmkB,EAAA,GAAAnY,EAAAxP,OAAAhC,UAAA+hB,EAAAvQ,EAAA9b,eAAAk0B,EAAA5nB,OAAAC,gBAAA,SAAAuD,EAAAmkB,EAAAnY,GAAAhM,EAAAmkB,GAAAnY,EAAArS,KAAA,EAAAwC,EAAA,mBAAA/B,OAAAA,OAAA,GAAAlH,EAAAiJ,EAAA9B,UAAA,aAAAuR,EAAAzP,EAAAL,eAAA,kBAAAuoB,EAAAloB,EAAAmoB,aAAA,yBAAAC,EAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAxP,OAAAC,eAAAuD,EAAAmkB,EAAA,CAAAxqB,MAAAqS,EAAA3P,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAAyD,EAAAmkB,EAAA,KAAAI,EAAA,aAAAvkB,GAAAukB,EAAA,SAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAhM,EAAAmkB,GAAAnY,CAAA,WAAAwY,EAAAxkB,EAAAmkB,EAAAnY,EAAAuQ,GAAA,IAAApgB,EAAAgoB,GAAAA,EAAA3pB,qBAAAiqB,EAAAN,EAAAM,EAAAvxB,EAAAsJ,OAAA6O,OAAAlP,EAAA3B,WAAAoR,EAAA,IAAA8Y,EAAAnI,GAAA,WAAA6H,EAAAlxB,EAAA,WAAAyG,MAAAgrB,EAAA3kB,EAAAgM,EAAAJ,KAAA1Y,CAAA,UAAA0xB,EAAA5kB,EAAAmkB,EAAAnY,GAAA,WAAAjc,KAAA,SAAAkL,IAAA+E,EAAAhD,KAAAmnB,EAAAnY,GAAA,OAAAhM,GAAA,OAAAjQ,KAAA,QAAAkL,IAAA+E,EAAA,EAAAmkB,EAAAK,KAAAA,EAAA,IAAAnQ,EAAA,iBAAAzV,EAAA,iBAAAyI,EAAA,YAAAhC,EAAA,YAAA4O,EAAA,YAAAwQ,IAAA,UAAAI,IAAA,UAAAC,IAAA,KAAAvhB,EAAA,GAAAghB,EAAAhhB,EAAArQ,GAAA,8BAAAkhB,EAAA5X,OAAAuoB,eAAA5vB,EAAAif,GAAAA,EAAAA,EAAA4Q,EAAA,MAAA7vB,GAAAA,IAAA6W,GAAAuQ,EAAAvf,KAAA7H,EAAAjC,KAAAqQ,EAAApO,GAAA,IAAA8vB,EAAAH,EAAAtqB,UAAAiqB,EAAAjqB,UAAAgC,OAAA6O,OAAA9H,GAAA,SAAA2hB,EAAAllB,GAAA,0BAAAvC,SAAA,SAAA0mB,GAAAI,EAAAvkB,EAAAmkB,GAAA,SAAAnkB,GAAA,YAAArE,QAAAwoB,EAAAnkB,EAAA,gBAAAmlB,EAAAnlB,EAAAmkB,GAAA,SAAAiB,EAAApZ,EAAAoY,EAAAjoB,EAAAjJ,GAAA,IAAA0Y,EAAAgZ,EAAA5kB,EAAAgM,GAAAhM,EAAAokB,GAAA,aAAAxY,EAAA7b,KAAA,KAAAs0B,EAAAzY,EAAA3Q,IAAAoZ,EAAAgQ,EAAA1qB,MAAA,OAAA0a,GAAA,UAAAla,GAAAka,IAAAkI,EAAAvf,KAAAqX,EAAA,WAAA8P,EAAA/oB,QAAAiZ,EAAAgR,SAAAhqB,MAAA,SAAA2E,GAAAolB,EAAA,OAAAplB,EAAA7D,EAAAjJ,EAAA,aAAA8M,GAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAixB,EAAA/oB,QAAAiZ,GAAAhZ,MAAA,SAAA2E,GAAAqkB,EAAA1qB,MAAAqG,EAAA7D,EAAAkoB,EAAA,aAAArkB,GAAA,OAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAA,EAAA0Y,EAAA3Q,IAAA,KAAA+Q,EAAAoY,EAAA,gBAAAzqB,MAAA,SAAAqG,EAAAuc,GAAA,SAAA+I,IAAA,WAAAnB,GAAA,SAAAA,EAAAnY,GAAAoZ,EAAAplB,EAAAuc,EAAA4H,EAAAnY,EAAA,WAAAA,EAAAA,EAAAA,EAAA3Q,KAAAiqB,EAAAA,GAAAA,GAAA,aAAAX,EAAAR,EAAAnY,EAAAuQ,GAAA,IAAA6H,EAAA/P,EAAA,gBAAAlY,EAAAjJ,GAAA,GAAAkxB,IAAA/c,EAAA,MAAAke,MAAA,mCAAAnB,IAAA/e,EAAA,cAAAlJ,EAAA,MAAAjJ,EAAA,OAAAyG,MAAAqG,EAAAzE,MAAA,OAAAghB,EAAAiJ,OAAArpB,EAAAogB,EAAAthB,IAAA/H,IAAA,KAAA0Y,EAAA2Q,EAAAkJ,SAAA,GAAA7Z,EAAA,KAAAyY,EAAAqB,EAAA9Z,EAAA2Q,GAAA,GAAA8H,EAAA,IAAAA,IAAApQ,EAAA,gBAAAoQ,CAAA,cAAA9H,EAAAiJ,OAAAjJ,EAAAoJ,KAAApJ,EAAAqJ,MAAArJ,EAAAthB,SAAA,aAAAshB,EAAAiJ,OAAA,IAAApB,IAAA/P,EAAA,MAAA+P,EAAA/e,EAAAkX,EAAAthB,IAAAshB,EAAAsJ,kBAAAtJ,EAAAthB,IAAA,gBAAAshB,EAAAiJ,QAAAjJ,EAAAuJ,OAAA,SAAAvJ,EAAAthB,KAAAmpB,EAAA/c,EAAA,IAAA9D,EAAAqhB,EAAAT,EAAAnY,EAAAuQ,GAAA,cAAAhZ,EAAAxT,KAAA,IAAAq0B,EAAA7H,EAAAhhB,KAAA8J,EAAAzG,EAAA2E,EAAAtI,MAAAgZ,EAAA,gBAAAta,MAAA4J,EAAAtI,IAAAM,KAAAghB,EAAAhhB,KAAA,WAAAgI,EAAAxT,OAAAq0B,EAAA/e,EAAAkX,EAAAiJ,OAAA,QAAAjJ,EAAAthB,IAAAsI,EAAAtI,IAAA,YAAAyqB,EAAAvB,EAAAnY,GAAA,IAAAuQ,EAAAvQ,EAAAwZ,OAAApB,EAAAD,EAAA9pB,SAAAkiB,GAAA,GAAA6H,IAAApkB,EAAA,OAAAgM,EAAAyZ,SAAA,eAAAlJ,GAAA4H,EAAA9pB,SAAA,SAAA2R,EAAAwZ,OAAA,SAAAxZ,EAAA/Q,IAAA+E,EAAA0lB,EAAAvB,EAAAnY,GAAA,UAAAA,EAAAwZ,SAAA,WAAAjJ,IAAAvQ,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAA8L,EAAA,aAAAtI,EAAA,IAAA9X,EAAAyoB,EAAAR,EAAAD,EAAA9pB,SAAA2R,EAAA/Q,KAAA,aAAAkB,EAAApM,KAAA,OAAAic,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAAkB,EAAAlB,IAAA+Q,EAAAyZ,SAAA,KAAAxR,EAAA,IAAA/gB,EAAAiJ,EAAAlB,IAAA,OAAA/H,EAAAA,EAAAqI,MAAAyQ,EAAAmY,EAAA4B,YAAA7yB,EAAAyG,MAAAqS,EAAAtQ,KAAAyoB,EAAA6B,QAAA,WAAAha,EAAAwZ,SAAAxZ,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,GAAAgM,EAAAyZ,SAAA,KAAAxR,GAAA/gB,GAAA8Y,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAAzE,EAAAyZ,SAAA,KAAAxR,EAAA,UAAAgS,EAAAjmB,GAAA,IAAAmkB,EAAA,CAAA+B,OAAAlmB,EAAA,SAAAA,IAAAmkB,EAAAgC,SAAAnmB,EAAA,SAAAA,IAAAmkB,EAAAiC,WAAApmB,EAAA,GAAAmkB,EAAAkC,SAAArmB,EAAA,SAAAsmB,WAAApmB,KAAAikB,EAAA,UAAAoC,EAAAvmB,GAAA,IAAAmkB,EAAAnkB,EAAAwmB,YAAA,GAAArC,EAAAp0B,KAAA,gBAAAo0B,EAAAlpB,IAAA+E,EAAAwmB,WAAArC,CAAA,UAAAO,EAAA1kB,GAAA,KAAAsmB,WAAA,EAAAJ,OAAA,SAAAlmB,EAAAvC,QAAAwoB,EAAA,WAAAnsB,OAAA,YAAAkrB,EAAAb,GAAA,GAAAA,GAAA,KAAAA,EAAA,KAAAnY,EAAAmY,EAAAjxB,GAAA,GAAA8Y,EAAA,OAAAA,EAAAhP,KAAAmnB,GAAA,sBAAAA,EAAAzoB,KAAA,OAAAyoB,EAAA,IAAAsC,MAAAtC,EAAA5uB,QAAA,KAAA6uB,GAAA,EAAAjoB,EAAA,SAAAT,IAAA,OAAA0oB,EAAAD,EAAA5uB,QAAA,GAAAgnB,EAAAvf,KAAAmnB,EAAAC,GAAA,OAAA1oB,EAAA/B,MAAAwqB,EAAAC,GAAA1oB,EAAAH,MAAA,EAAAG,EAAA,OAAAA,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,SAAAS,EAAAT,KAAAS,CAAA,YAAAsU,UAAAtW,GAAAgqB,GAAA,2BAAAU,EAAArqB,UAAAsqB,EAAAV,EAAAa,EAAA,eAAAtrB,MAAAmrB,EAAAxoB,cAAA,IAAA8nB,EAAAU,EAAA,eAAAnrB,MAAAkrB,EAAAvoB,cAAA,IAAAuoB,EAAA6B,YAAAnC,EAAAO,EAAAT,EAAA,qBAAAF,EAAAwC,oBAAA,SAAA3mB,GAAA,IAAAmkB,EAAA,mBAAAnkB,GAAAA,EAAAzF,YAAA,QAAA4pB,IAAAA,IAAAU,GAAA,uBAAAV,EAAAuC,aAAAvC,EAAAl0B,MAAA,EAAAk0B,EAAAyC,KAAA,SAAA5mB,GAAA,OAAAxD,OAAAqqB,eAAArqB,OAAAqqB,eAAA7mB,EAAA8kB,IAAA9kB,EAAA8mB,UAAAhC,EAAAP,EAAAvkB,EAAAqkB,EAAA,sBAAArkB,EAAAxF,UAAAgC,OAAA6O,OAAA4Z,GAAAjlB,CAAA,EAAAmkB,EAAA4C,MAAA,SAAA/mB,GAAA,OAAAqlB,QAAArlB,EAAA,EAAAklB,EAAAC,EAAA3qB,WAAA+pB,EAAAY,EAAA3qB,UAAAoR,GAAA,0BAAAuY,EAAAgB,cAAAA,EAAAhB,EAAA6C,MAAA,SAAAhnB,EAAAgM,EAAAuQ,EAAA6H,EAAAjoB,QAAA,IAAAA,IAAAA,EAAAhB,SAAA,IAAAjI,EAAA,IAAAiyB,EAAAX,EAAAxkB,EAAAgM,EAAAuQ,EAAA6H,GAAAjoB,GAAA,OAAAgoB,EAAAwC,oBAAA3a,GAAA9Y,EAAAA,EAAAwI,OAAAL,MAAA,SAAA2E,GAAA,OAAAA,EAAAzE,KAAAyE,EAAArG,MAAAzG,EAAAwI,MAAA,KAAAwpB,EAAAD,GAAAV,EAAAU,EAAAZ,EAAA,aAAAE,EAAAU,EAAA/xB,GAAA,0BAAAqxB,EAAAU,EAAA,qDAAAd,EAAA7T,KAAA,SAAAtQ,GAAA,IAAAmkB,EAAA3nB,OAAAwD,GAAAgM,EAAA,WAAAuQ,KAAA4H,EAAAnY,EAAA9L,KAAAqc,GAAA,OAAAvQ,EAAAzO,UAAA,SAAA7B,IAAA,KAAAsQ,EAAAzW,QAAA,KAAAyK,EAAAgM,EAAAlO,MAAA,GAAAkC,KAAAmkB,EAAA,OAAAzoB,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,QAAAA,EAAAH,MAAA,EAAAG,CAAA,GAAAyoB,EAAAa,OAAAA,EAAAN,EAAAlqB,UAAA,CAAAD,YAAAmqB,EAAA5qB,MAAA,SAAAqqB,GAAA,QAAA8C,KAAA,OAAAvrB,KAAA,OAAAiqB,KAAA,KAAAC,MAAA5lB,EAAA,KAAAzE,MAAA,OAAAkqB,SAAA,UAAAD,OAAA,YAAAvqB,IAAA+E,EAAA,KAAAsmB,WAAA7oB,QAAA8oB,IAAApC,EAAA,QAAAnY,KAAA,WAAAA,EAAAnb,OAAA,IAAA0rB,EAAAvf,KAAA,KAAAgP,KAAAya,OAAAza,EAAAxJ,MAAA,WAAAwJ,GAAAhM,EAAA,EAAAoW,KAAA,gBAAA7a,MAAA,MAAAyE,EAAA,KAAAsmB,WAAA,GAAAE,WAAA,aAAAxmB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,YAAAisB,IAAA,EAAArB,kBAAA,SAAA1B,GAAA,QAAA5oB,KAAA,MAAA4oB,EAAA,IAAAnY,EAAA,cAAAmb,EAAA5K,EAAA6H,GAAA,OAAAlxB,EAAAnD,KAAA,QAAAmD,EAAA+H,IAAAkpB,EAAAnY,EAAAtQ,KAAA6gB,EAAA6H,IAAApY,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,KAAAokB,CAAA,SAAAA,EAAA,KAAAkC,WAAA/wB,OAAA,EAAA6uB,GAAA,IAAAA,EAAA,KAAAjoB,EAAA,KAAAmqB,WAAAlC,GAAAlxB,EAAAiJ,EAAAqqB,WAAA,YAAArqB,EAAA+pB,OAAA,OAAAiB,EAAA,UAAAhrB,EAAA+pB,QAAA,KAAAe,KAAA,KAAArb,EAAA2Q,EAAAvf,KAAAb,EAAA,YAAAkoB,EAAA9H,EAAAvf,KAAAb,EAAA,iBAAAyP,GAAAyY,EAAA,SAAA4C,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,WAAAc,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,SAAAxa,GAAA,QAAAqb,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,YAAA9B,EAAA,MAAAkB,MAAA,kDAAA0B,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,KAAAN,OAAA,SAAA9lB,EAAAmkB,GAAA,QAAAnY,EAAA,KAAAsa,WAAA/wB,OAAA,EAAAyW,GAAA,IAAAA,EAAA,KAAAoY,EAAA,KAAAkC,WAAAta,GAAA,GAAAoY,EAAA8B,QAAA,KAAAe,MAAA1K,EAAAvf,KAAAonB,EAAA,oBAAA6C,KAAA7C,EAAAgC,WAAA,KAAAjqB,EAAAioB,EAAA,OAAAjoB,IAAA,UAAA6D,GAAA,aAAAA,IAAA7D,EAAA+pB,QAAA/B,GAAAA,GAAAhoB,EAAAiqB,aAAAjqB,EAAA,UAAAjJ,EAAAiJ,EAAAA,EAAAqqB,WAAA,UAAAtzB,EAAAnD,KAAAiQ,EAAA9M,EAAA+H,IAAAkpB,EAAAhoB,GAAA,KAAAqpB,OAAA,YAAA9pB,KAAAS,EAAAiqB,WAAAnS,GAAA,KAAAvO,SAAAxS,EAAA,EAAAwS,SAAA,SAAA1F,EAAAmkB,GAAA,aAAAnkB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,gBAAA+E,EAAAjQ,MAAA,aAAAiQ,EAAAjQ,KAAA,KAAA2L,KAAAsE,EAAA/E,IAAA,WAAA+E,EAAAjQ,MAAA,KAAAm3B,KAAA,KAAAjsB,IAAA+E,EAAA/E,IAAA,KAAAuqB,OAAA,cAAA9pB,KAAA,kBAAAsE,EAAAjQ,MAAAo0B,IAAA,KAAAzoB,KAAAyoB,GAAAlQ,CAAA,EAAAmT,OAAA,SAAApnB,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAoa,aAAApmB,EAAA,YAAA0F,SAAAsG,EAAAwa,WAAAxa,EAAAqa,UAAAE,EAAAva,GAAAiI,CAAA,kBAAAjU,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAka,SAAAlmB,EAAA,KAAAuc,EAAAvQ,EAAAwa,WAAA,aAAAjK,EAAAxsB,KAAA,KAAAq0B,EAAA7H,EAAAthB,IAAAsrB,EAAAva,EAAA,QAAAoY,CAAA,QAAAmB,MAAA,0BAAA8B,cAAA,SAAAlD,EAAAnY,EAAAuQ,GAAA,YAAAkJ,SAAA,CAAAprB,SAAA2qB,EAAAb,GAAA4B,WAAA/Z,EAAAga,QAAAzJ,GAAA,cAAAiJ,SAAA,KAAAvqB,IAAA+E,GAAAiU,CAAA,GAAAkQ,CAAA,UAAAmD,GAAA/K,EAAAvc,EAAAmkB,EAAAnY,EAAAoY,EAAAlxB,EAAA0Y,GAAA,QAAAzP,EAAAogB,EAAArpB,GAAA0Y,GAAAyY,EAAAloB,EAAAxC,KAAA,OAAA4iB,GAAA,YAAA4H,EAAA5H,EAAA,CAAApgB,EAAAZ,KAAAyE,EAAAqkB,GAAAlpB,QAAAC,QAAAipB,GAAAhpB,KAAA2Q,EAAAoY,EAAA,UAAAsD,GAAAvD,EAAAnY,GAAA,QAAAhM,EAAA,EAAAA,EAAAgM,EAAAzW,OAAAyK,IAAA,KAAAokB,EAAApY,EAAAhM,GAAAokB,EAAA/nB,WAAA+nB,EAAA/nB,aAAA,EAAA+nB,EAAA9nB,cAAA,YAAA8nB,IAAAA,EAAA7nB,UAAA,GAAAC,OAAAC,eAAA0nB,EAAAwD,GAAAvD,EAAAzzB,KAAAyzB,EAAA,WAAAuD,GAAA3nB,GAAA,IAAA7D,EAAA,SAAA6D,EAAAgM,GAAA,aAAA7R,GAAA6F,KAAAA,EAAA,OAAAA,EAAA,IAAAmkB,EAAAnkB,EAAA5F,OAAAwtB,aAAA,YAAAzD,EAAA,KAAAhoB,EAAAgoB,EAAAnnB,KAAAgD,EAAAgM,GAAA,wBAAA7R,GAAAgC,GAAA,OAAAA,EAAA,UAAAsU,UAAA,kEAAAzE,EAAAiO,OAAA4N,QAAA7nB,EAAA,CAAA8nB,CAAA9nB,EAAA,0BAAA7F,GAAAgC,GAAAA,EAAAA,EAAA,GACA,IAAMypD,GAAsB,CACxBxqD,QAAS,SAAC1E,EAAMu9B,GAIZ,OAHKA,EAAK4xB,SAAS,WACf5xB,GAAQ,SAEL,GAAP32B,OAAU5G,EAAI,KAAA4G,OAAI22B,EAAI,OAAA32B,OAAMs9B,MAChC,EACAkU,OAAQ,SAAC7a,GAEL,OAAO4B,MAAM5B,EAAM,CAAEzO,OAAQ,SACxBnqB,MAAK,SAAAyU,GAAQ,OAAIA,EAASgmB,EAAE,IAAC,OACvB,kBAAM,CAAK,GAC1B,EACAiZ,WAAY,SAAC9a,GAET,IAAMvkB,EAAM,IAAIC,eAChB,IAGI,OAFAD,EAAIE,KAAK,OAAQqkB,GAAM,GACvBvkB,EAAIO,KAAK,MACFP,EAAIM,QAAU,KAAON,EAAIM,OAAS,GAC7C,CAAE,MAAOmU,GACL,OAAO,CACX,CACJ,EACAuqB,SAAU,SAACza,EAAM6xB,GACb,OAAOjwB,MAAM5B,GACR54B,MAAK,SAAAyU,GACF,IAAKA,EAASgmB,GACV,MAAM,IAAIvQ,MAAM,wBAADjoB,OAAyB22B,IAE5C,OAAOnkB,EAASxF,MACpB,GACR,EACAukC,aAAc,SAAC5a,EAAM6xB,GAEjB,IAAMp2C,EAAM,IAAIC,eAChB,IAGI,GAFAD,EAAIE,KAAK,MAAOqkB,GAAM,GACtBvkB,EAAIO,KAAK,MACLP,EAAIM,QAAU,KAAON,EAAIM,OAAS,IAClC,OAAON,EAAIi/B,aAEX,MAAM,IAAIppB,MAAM,wBAADjoB,OAAyB22B,GAEhD,CAAE,MAAO9P,GACL,MAAM,IAAIoB,MAAM,wBAADjoB,OAAyB22B,GAC5C,CACJ,GAGSzK,GAAe,kBAnD5BrF,EAmD4B,SAAAqF,KAnD5B,SAAAt2B,EAAAqpB,GAAA,KAAArpB,aAAAqpB,GAAA,UAAA9L,UAAA,qCAmD4B8X,CAAA,KAAAiB,EAAA,EAnD5Bxd,EAmD4B,KAnD5BhM,EAmD4B,EAAArP,IAAA,OAAAgJ,MACxB,WACIgB,KAAKorD,OAASprD,KAAKqrD,WACvB,GAAC,CAAAr1D,IAAA,YAAAgJ,MAED,WAOI,OANAgB,KAAKorD,OAAS,IAAI5B,GAAO,CACrBztD,KAAM,4BACNs6C,QAAS,QACT1C,GAAIsX,KAGDjrD,KAAKorD,MAChB,GAAC,CAAAp1D,IAAA,sBAAAgJ,OAhEL4iB,EAgEK2H,KAAA0C,MAED,SAAA4B,EAAiCy9B,EAAcnnC,GAAI,OAAAoF,KAAAM,MAAA,SAAAiE,GAAA,cAAAA,EAAAxB,KAAAwB,EAAA/sB,MAAA,OAI9C,OAFIf,KAAKorD,QACNprD,KAAKurD,OACRz9B,EAAA/sB,KAAA,EAEYf,KAAKorD,OAAOZ,WAAW,GAAD7nD,OAAI2oD,GAAgBnnC,GAAK,cAAA2J,EAAA3C,OAAA,SAAA2C,EAAA9C,MAAA,wBAAA8C,EAAArS,OAAA,GAAAoS,EAAA,SAR/D29B,EAhEL,eAAAnmD,EAAA,KAAAmkB,EAAA7uB,UAAA,WAAA6F,SAAA,SAAA6Q,EAAAoY,GAAA,IAAAlxB,EAAAqpB,EAAA5mB,MAAAqK,EAAAmkB,GAAA,SAAAqD,EAAAjL,GAAA+K,GAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,OAAAlL,EAAA,UAAAkL,EAAAlL,GAAA+K,GAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,QAAAlL,EAAA,CAAAiL,OAAA,OAyEK,SAP+BuC,EAAAC,GAAA,OAAAm8B,EAAAxwD,MAAC,KAADL,UAAA,KAAA3E,IAAA,2BAAAgJ,MAShC,SAAgCssD,EAAcnnC,GAM1C,OAJKnkB,KAAKorD,QACNprD,KAAKurD,OAGFvrD,KAAKorD,OAAOZ,WAAW,GAAD7nD,OAAI2oD,GAAgBnnC,EACrD,GAAC,CAAAnuB,IAAA,0BAAAgJ,MAED,SAA+BssD,EAAcnnC,GAOzC,OANKnkB,KAAKorD,QACNprD,KAAKurD,OAGTx9B,MAEO/tB,KAAKorD,OAAOX,eAAe,GAAD9nD,OAAI2oD,GAAgBnnC,EACzD,GAAC,CAAAnuB,IAAA,wBAAAgJ,MAED,SAA6BssD,EAAcnnC,EAAMtnB,GAK7C,OAJKmD,KAAKorD,QACNprD,KAAKurD,OAGFvrD,KAAKorD,OAAOZ,WAAW,GAAD7nD,OAAI2oD,GAAgBnnC,GAC5CzjB,MAAK,SAAA8tB,GACF3xB,EAAQkyB,UAAYP,CACxB,GACR,IAvGJnd,GAAA0b,GAAAvD,EAAA3pB,UAAAwR,GAAAhM,GAAA0nB,GAAAvD,EAAAnkB,GAAAxD,OAAAC,eAAA0nB,EAAA,aAAA5nB,UAAA,IAAA4nB,EAAA,IAAAA,EAAAnY,EAAAhM,EAAAuc,EAgEK4pC,CAuCA,CApDuB,iDCrC5B,IA2BIC,EA3BAnlB,EAAW,WAQX,OAPAA,EAAWzkC,OAAOM,QAAU,SAAkBkD,GAC1C,IAAK,IAAIqF,EAAGlJ,EAAI,EAAGogB,EAAIjnB,UAAUC,OAAQ4G,EAAIogB,EAAGpgB,IAE5C,IAAK,IAAIoH,KADT8B,EAAI/P,UAAU6G,GACOK,OAAOhC,UAAUtK,eAAe8M,KAAKqI,EAAG9B,KAAIvD,EAAEuD,GAAK8B,EAAE9B,IAE9E,OAAOvD,CACX,EACOihC,EAAStrC,MAAMgF,KAAMrF,UAChC,EAEI+wD,EAAmC,WACnC,SAASA,EAAkBrgD,GACvBrL,KAAKqL,QAAUA,EACfrL,KAAK2rD,UAAY,CAAC,CACtB,CAUA,OATAD,EAAkB7rD,UAAUy6B,GAAK,SAAUsxB,EAAWpnD,GAClD,IAAIqnD,EAAY7rD,KAAK2rD,UAAUC,IAAc,GAC7C5rD,KAAK2rD,UAAUC,GAAaC,EAAUlpD,OAAO,CAAC6B,GAClD,EACAknD,EAAkB7rD,UAAUisD,aAAe,SAAUF,EAAWj8B,GAC5D,IAAI7Y,EAAQ9W,MACIA,KAAK2rD,UAAUC,IAAc,IACnC9oD,SAAQ,SAAU0B,GAAM,OAAOA,EAAG,CAAElD,OAAQwV,EAAO6Y,MAAOA,GAAU,GAClF,EACO+7B,CACX,CAfsC,IAiBtC,SAAWD,GACPA,EAAgBA,EAAqB,IAAI,GAAK,MAC9CA,EAAgBA,EAAwB,OAAI,GAAK,QACpD,CAHD,CAGGA,IAAoBA,EAAkB,CAAC,IAC1C,IAsBIM,EAtBAC,EAA4B,WAC5B,SAASA,IACLhsD,KAAKisD,cAAgB,EACzB,CAgBA,OAfAD,EAAWnsD,UAAU0F,KAAO,SAAU2mD,GAClClsD,KAAKisD,cAAc1mD,KAAK2mD,GACxBlsD,KAAKmsD,SAASD,EAAMT,EAAgBW,IAAKpsD,KAAKisD,cAClD,EACAD,EAAWnsD,UAAUykB,OAAS,SAAU3gB,EAAOyjC,GAC3C,IAAI8kB,EAAOlsD,KAAKisD,cAAc3nC,OAAO3gB,EAAOyjC,GAAK,GAEjD,OADApnC,KAAKmsD,SAASD,EAAMT,EAAgBY,OAAQrsD,KAAKisD,eAC1CC,CACX,EACAF,EAAWnsD,UAAU3H,QAAU,SAAUg0D,GACrC,OAAOlsD,KAAKisD,cAAc/zD,QAAQg0D,EACtC,EACAF,EAAWnsD,UAAUysD,SAAW,SAAU72D,GACtCuK,KAAKmsD,SAAW12D,CACpB,EACOu2D,CACX,CApB+B,IAuB/B,SAAWD,GACPA,EAAoB,QAAI,UACxBA,EAAkB,MAAI,OACzB,CAHD,CAGGA,IAAeA,EAAa,CAAC,IAChC,IAAIQ,EAAkB,CAClBC,MAAO,CACH,CACIp3D,KAAM,UACNgP,UAAW,wBACXqoD,gBAAiB,UACjBC,KAAM,CACFtoD,UAAW,uBACXuoD,QAAS,MAGjB,CACIv3D,KAAM,QACNgP,UAAW,sBACXqoD,gBAAiB,UACjBC,KAAM,CACFtoD,UAAW,qBACXuoD,QAAS,OAIrBlyD,SAAU,IACVmyD,QAAQ,EACRnhD,SAAU,CACN62B,EAAG,QACHhpB,EAAG,UAEPuzC,aAAa,GAGbC,EAA2B,WAC3B,SAASA,IACL9sD,KAAKisD,cAAgB,GACrBjsD,KAAK+sD,OAAS,CAAC,EACf/sD,KAAKgtD,oBAAsB,CACvBC,KAAM,aACNC,OAAQ,SACRC,MAAO,YAEXntD,KAAKotD,oBAAsB,CACvBrnD,IAAK,aACLmnD,OAAQ,SACRpnD,OAAQ,YAGZ,IAAIunD,EAAUlxD,SAASmxD,yBACnBC,EAAiBvtD,KAAKwtD,mBAAmB,CAAEb,QAAS,MAAOvoD,UAAW,UAC1EipD,EAAQrwD,YAAYuwD,GACpBpxD,SAASsM,KAAKzL,YAAYqwD,GAC1BrtD,KAAKqzB,UAAYk6B,EAEjBvtD,KAAKytD,sBAAwBztD,KAAK0tD,4BAClC1tD,KAAK2tD,sBACT,CA0MA,OAzMAb,EAAUjtD,UAAUy6B,GAAK,SAAU3K,EAAOnrB,GACtC,IAAIinC,EACJzrC,KAAK+sD,OAASzmB,EAASA,EAAS,CAAC,EAAGtmC,KAAK+sD,UAAUthB,EAAK,CAAC,GAAM9b,GAASnrB,EAAIinC,GAChF,EACAqhB,EAAUjtD,UAAUT,OAAS,SAAUwuD,EAAcx4D,GAC7CA,IAASq2D,EAAgBW,IACzBpsD,KAAK6tD,gBAAgBD,GAEhBx4D,IAASq2D,EAAgBY,QAC9BrsD,KAAK8tD,mBAAmBF,EAEhC,EACAd,EAAUjtD,UAAUiuD,mBAAqB,SAAUF,GAC/C,IAEI/kD,EAMAklD,EARAj3C,EAAQ9W,KACRguD,EAAuBhuD,KAAKiuD,yBAAyBL,GAEpDI,KAGLnlD,EAAOmlD,EAAqBnlD,MACvBvM,UAAUC,IAAI,2BAEnBsM,EAAKtJ,iBAAiBS,KAAKytD,sBAAwBM,EAAc,SAAUp+B,GACnEA,EAAMruB,SAAWuH,IACjBA,EAAK/M,oBAAoBgb,EAAM22C,sBAAuBM,GACtDj3C,EAAMuc,UAAUp3B,YAAY4M,GAEpC,GACJ,EACAikD,EAAUjtD,UAAUguD,gBAAkB,SAAUD,GAC5C,IAAI/kD,EAAO7I,KAAKkuD,oBAAoBN,GACpC5tD,KAAKisD,cAAc1mD,KAAK,CAAEqoD,aAAcA,EAAc/kD,KAAMA,IAG5D7I,KAAKmuD,UAAUP,EAAaviD,QAAQi4B,SAAW,eACnD,EACAwpB,EAAUjtD,UAAUquD,oBAAsB,SAAUN,GAChD,IAAIniB,EACAnkB,EAAOtnB,KAAKouD,uBAAuBR,GACnCxpD,EAAYwpD,EAAaviD,QAAQjH,UAKrC,OAJIA,IACCqnC,EAAKnkB,EAAKhrB,WAAWC,IAAIvB,MAAMywC,EAAIrnC,EAAUX,MAAM,MAExDzD,KAAKqzB,UAAUr2B,YAAYsqB,GACpBA,CACX,EACAwlC,EAAUjtD,UAAUouD,yBAA2B,SAAUL,GAErD,IADA,IAAInF,GAAO,EACFjnD,EAAI,EAAGA,EAAIxB,KAAKisD,cAAcrxD,QAAU6tD,EAAM,EAAGjnD,IAClDxB,KAAKisD,cAAczqD,GAAGosD,eAAiBA,IACvCnF,EAAMjnD,GAGd,IAAa,IAATinD,EACA,OAAOzoD,KAAKisD,cAAc3nC,OAAOmkC,EAAK,GAAG,EAGjD,EACAqE,EAAUjtD,UAAUwuD,aAAe,SAAUhjD,GACzC,IAAIogC,EACJ,OAAsF,QAA7EA,EAAKpgC,aAAyC,EAASA,EAAQI,gBAA6B,IAAPggC,OAAgB,EAASA,EAAGnJ,IAAM,OACpI,EACAwqB,EAAUjtD,UAAUyuD,aAAe,SAAUjjD,GACzC,IAAIogC,EACJ,OAAsF,QAA7EA,EAAKpgC,aAAyC,EAASA,EAAQI,gBAA6B,IAAPggC,OAAgB,EAASA,EAAGnyB,IAAM,QACpI,EACAwzC,EAAUjtD,UAAU0uD,yBAA2B,SAAUljD,GACrD,IAAI1O,EAAQqD,KAAKgtD,oBAAoBhtD,KAAKquD,aAAahjD,IACnDmjD,EAAUxuD,KAAKotD,oBAAoBptD,KAAKsuD,aAAajjD,IACrDpN,EAAQ+B,KAAKqzB,UAAUp1B,MAC3BA,EAAMwwD,YAAY,kBAAmBD,GACrCvwD,EAAMwwD,YAAY,cAAe9xD,EACrC,EACAmwD,EAAUjtD,UAAUuuD,uBAAyB,SAAUR,GACnD,IAAI92C,EAAQ9W,KACRqL,EAAUuiD,EAAaviD,QACvBqjD,EAAWrjD,EAAQqhD,KAEvB1sD,KAAKuuD,yBAAyBljD,GAE9B,IAAIsjD,EAAmB3uD,KAAKwtD,mBAAmB,CAAEb,QAAS,MAAOvoD,UAAW,iBACxEwoD,EAAS5sD,KAAKwtD,mBAAmB,CAAEb,QAAS,MAAOvoD,UAAW,kBAC9DwqD,EAAU5uD,KAAKwtD,mBAAmB,CAAEb,QAAS,MAAOvoD,UAAW,mBAC/Dk/B,EAAUtjC,KAAKwtD,mBAAmB,CAAEb,QAAS,MAAOvoD,UAAW,mBACnEk/B,EAAQvU,UAAY1jB,EAAQi4B,SAAW,GACvC,IAAIurB,EAAYxjD,EAAQyjD,YAAczjD,EAAQohD,gBAE9C,GAAIiC,EAAU,CACV,IAAIK,EAAgB/uD,KAAKwtD,mBAAmB,CAAEb,QAAS,MAAOvoD,UAAW,gBAGzE,IAFwB,iBAAbsqD,GAAyBA,aAAoBpvC,UACpDyvC,EAAchgC,UAAY,IAAIzP,OAAOovC,GAAUx0D,WAC3B,iBAAbw0D,EAAuB,CAC9B,IAAIjjB,EAAKijB,EAAS/B,QAASA,OAAiB,IAAPlhB,EAAgB,IAAMA,EAAIujB,EAAcN,EAAStqD,UAAWuL,EAAO++C,EAAS/+C,KAAMunC,EAAKwX,EAASO,MAAOA,OAAe,IAAP/X,EAAgB2X,EAAY3X,EAC5KgY,EAAclvD,KAAKwtD,mBAAmB,CAAEb,QAASA,EAASvoD,UAAW4qD,EAAar/C,KAAMA,IACxFs/C,IACAC,EAAYjxD,MAAMgxD,MAAQA,GAC9BF,EAAc/xD,YAAYkyD,EAC9B,CACAN,EAAQ5xD,YAAY+xD,EACxB,CAcA,GAbAH,EAAQ5xD,YAAYsmC,GACpBqrB,EAAiB3xD,YAAY4xD,GAEzBC,IACIxjD,EAAQuhD,QACRA,EAAO3uD,MAAM6wD,WAAaD,EAC1BF,EAAiB3xD,YAAY4vD,IAG7B+B,EAAiB1wD,MAAM6wD,WAAaD,GAIxCxjD,EAAQwhD,YAAa,CACrB,IAAIsC,EAAiBnvD,KAAKwtD,mBAAmB,CAAEb,QAAS,MAAOvoD,UAAW,mBACtEgrD,EAAgBpvD,KAAKwtD,mBAAmB,CACxCb,QAAS,SACTvoD,UAAW,uBAEf+qD,EAAenyD,YAAYoyD,GAC3BR,EAAQ5xD,YAAYmyD,GACpBR,EAAiBryD,UAAUC,IAAI,6BAC/B6yD,EAAc7vD,iBAAiB,SAAS,SAAUowB,GAC9C,IAAI8b,EAAIyL,EAC2C,QAAlDA,GAAMzL,EAAK30B,EAAMi2C,QAAQhB,EAAWsD,gBAA6B,IAAPnY,GAAyBA,EAAG70C,KAAKopC,EAAI,CAAEnqC,OAAQssD,EAAcj+B,MAAOA,IAC/HA,EAAME,iBACV,GACJ,CACA8+B,EAAiBpvD,iBAAiB,SAAS,SAAUowB,GAAS,IAAI8b,EAAIyL,EAAI,OAAwD,QAAhDA,GAAMzL,EAAK30B,EAAMi2C,QAAQhB,EAAWuD,cAA2B,IAAPpY,OAAgB,EAASA,EAAG70C,KAAKopC,EAAI,CAAEnqC,OAAQssD,EAAcj+B,MAAOA,GAAU,IAExN,IAAIvrB,EAA2C,QAA/BpE,KAAKsuD,aAAajjD,GAAqB,QAAU,QAEjE,OADAsjD,EAAiBryD,UAAUC,IAAI,iBAAmB6H,GAC3CuqD,CACX,EACA7B,EAAUjtD,UAAU2tD,mBAAqB,SAAU/hB,GAC/C,IAAIkhB,EAAUlhB,EAAGkhB,QAASvoD,EAAYqnC,EAAGrnC,UAAWuL,EAAO87B,EAAG97B,KAC1Du8C,EAAO/vD,SAASC,cAAcuwD,GAKlC,OAJIvoD,IACA8nD,EAAK9nD,UAAYA,GAErB8nD,EAAKv0C,YAAchI,GAAQ,KACpBu8C,CACX,EAKAY,EAAUjtD,UAAU8tD,qBAAuB,WACvC,IAAI4B,EAAgBvvD,KAAKwtD,mBAAmB,CAAEb,QAAS,MAAOvoD,UAAW,oBACzEmrD,EAAc/yD,aAAa,cAAe,QAC1C+yD,EAAc/yD,aAAa,YAAa,UAGxC+yD,EAActxD,MAAMuxD,OAAS,IAC7BD,EAActxD,MAAMwxD,KAAO,gBAC3BF,EAActxD,MAAMqR,OAAS,MAC7BigD,EAActxD,MAAMyxD,OAAS,OAC7BH,EAActxD,MAAM0xD,SAAW,SAC/BJ,EAActxD,MAAMqiB,QAAU,IAC9BivC,EAActxD,MAAMwN,SAAW,WAC/B8jD,EAActxD,MAAMoR,MAAQ,MAC5BkgD,EAActxD,MAAM2xD,QAAU,IAC9BzzD,SAASsM,KAAKzL,YAAYuyD,GAC1BvvD,KAAKuvD,cAAgBA,CACzB,EAIAzC,EAAUjtD,UAAUsuD,UAAY,SAAU7qB,GACtC,IAAIxsB,EAAQ9W,KACZA,KAAKuvD,cAAc53C,YAAc,GAOjCyC,YAAW,WACPtD,EAAMy4C,cAAc53C,YAAc2rB,CACtC,GAAG,IACP,EAIAwpB,EAAUjtD,UAAU6tD,0BAA4B,WAC5C,IAOIroD,EAPAhB,EAAKlI,SAASC,cAAc,SAC5B0Q,EAAc,CACd+iD,cAAe,eACfC,YAAa,gBACbC,iBAAkB,qBAClB1iD,WAAY,gBAGhB,IAAKhI,KAAKyH,EACN,QAAoB7R,IAAhBoJ,EAAGpG,MAAMoH,GACT,OAAOyH,EAAYzH,GAI3B,MAAO,cACX,EACOynD,CACX,CAlO8B,GAuO1BkD,EAAuB,WACvB,SAASA,EAAMhoB,GACX,IAAIlxB,EAAQ9W,KACZA,KAAKiwD,QAAUjwD,KAAKkwD,oBACpBlwD,KAAKisD,cAAgB,IAAID,EACzBhsD,KAAK+C,KAAO,IAAI+pD,EAChB,IAAIN,EAAQxsD,KAAKmwD,cAAcnoB,GAC/BhoC,KAAKqL,QAAUi7B,EAASA,EAAS,CAAC,EAAGimB,GAAkBvkB,GACvDhoC,KAAKqL,QAAQmhD,MAAQA,EACrBxsD,KAAKisD,cAAcK,UAAS,SAAUJ,EAAM92D,GAAQ,OAAO0hB,EAAM/T,KAAK3D,OAAO8sD,EAAM92D,EAAO,IAC1F4K,KAAK+C,KAAKu3B,GAAGyxB,EAAWsD,SAAS,SAAU5jB,GACvC,IAAInqC,EAASmqC,EAAGnqC,OAAQquB,EAAQ8b,EAAG9b,MACnC7Y,EAAMo5C,oBAAoB5uD,GAE1BA,EAAqB,aAAEyqD,EAAWsD,QAAS1/B,EAC/C,IAEA3vB,KAAK+C,KAAKu3B,GAAGyxB,EAAWuD,OAAO,SAAU7jB,GACrC,IAAInqC,EAASmqC,EAAGnqC,OAAQquB,EAAQ8b,EAAG9b,MACnC,OAAOruB,EAAqB,aAAEyqD,EAAWuD,MAAO3/B,EACpD,GACJ,CAiFA,OAhFAqgC,EAAMnwD,UAAUiV,MAAQ,SAAUwmB,GAC9B,IAAIjwB,EAAUrL,KAAKowD,iBAAiB,QAAS90B,GAC7C,OAAOt7B,KAAKiV,KAAK5J,EACrB,EACA2kD,EAAMnwD,UAAUgV,QAAU,SAAUymB,GAChC,IAAIjwB,EAAUrL,KAAKowD,iBAAiB,UAAW90B,GAC/C,OAAOt7B,KAAKiV,KAAK5J,EACrB,EACA2kD,EAAMnwD,UAAUoV,KAAO,SAAU5J,GAC7B,IAAIglD,EAAcrwD,KAAKqL,QAAQmhD,MAAMlnD,MAAK,SAAUmmC,GAEhD,OADWA,EAAGr2C,OACEiW,EAAQjW,IAC5B,KAAM,CAAC,EACHk7D,EAAShqB,EAASA,EAAS,CAAC,EAAG+pB,GAAchlD,GACjDrL,KAAKuwD,YAAY,CAAC,SAAU,WAAY,eAAgBD,GACxD,IAAI1C,EAAe,IAAIlC,EAAkB4E,GAEzC,OADAtwD,KAAKwwD,kBAAkB5C,GAChBA,CACX,EACAoC,EAAMnwD,UAAU4wD,WAAa,WACzB,KAAOzwD,KAAKisD,cAAc3nC,OAAO,EAAG,KAExC,EAYA0rC,EAAMnwD,UAAU0wD,YAAc,SAAUhvD,EAAO+uD,GAC3C,IAAIx5C,EAAQ9W,KACZuB,EAAMuB,SAAQ,SAAUkX,GAEpBs2C,EAAOt2C,GAAwB,MAAhBs2C,EAAOt2C,GAAgBlD,EAAMzL,QAAQ2O,GAAQs2C,EAAOt2C,EACvE,GACJ,EACAg2C,EAAMnwD,UAAU2wD,kBAAoB,SAAU5C,GAC1C,IAAI92C,EAAQ9W,KACZA,KAAKisD,cAAc1mD,KAAKqoD,GACxB,IAAInzD,OAA6CQ,IAAlC2yD,EAAaviD,QAAQ5Q,SAAyBmzD,EAAaviD,QAAQ5Q,SAAWuF,KAAKqL,QAAQ5Q,SACtGA,GACA2f,YAAW,WAAc,OAAOtD,EAAMo5C,oBAAoBtC,EAAe,GAAGnzD,EAEpF,EACAu1D,EAAMnwD,UAAUqwD,oBAAsB,SAAUtC,GAC5C,IAAIjqD,EAAQ3D,KAAKisD,cAAc/zD,QAAQ01D,IACxB,IAAXjqD,GACA3D,KAAKisD,cAAc3nC,OAAO3gB,EAAO,EAEzC,EACAqsD,EAAMnwD,UAAUuwD,iBAAmB,SAAUh7D,EAAMkmC,GAC/C,IAAIjwB,EAAU,CAAEjW,KAAMA,GAOtB,MANuB,iBAAZkmC,EACPjwB,EAAQi4B,QAAUhI,EAEM,iBAAZA,IACZjwB,EAAUi7B,EAASA,EAAS,CAAC,EAAGj7B,GAAUiwB,IAEvCjwB,CACX,EACA2kD,EAAMnwD,UAAUswD,cAAgB,SAAUnoB,GACtC,IAAI0oB,GAAkB1oB,GAAQA,EAAKwkB,OAAU,IAAI3kD,QAYjD,OAXwB0kD,EAAgBC,MAAMx0D,KAAI,SAAU24D,GAGxD,IAAIC,GAAe,EACnBF,EAAc5tD,SAAQ,SAAUuC,EAAGojD,GAC3BpjD,EAAEjQ,OAASu7D,EAAYv7D,OACvBw7D,EAAcnI,EACtB,IACA,IAAIoI,GAA4B,IAAjBD,EAAqBF,EAAcpsC,OAAOssC,EAAa,GAAG,GAAK,CAAC,EAC/E,OAAOtqB,EAASA,EAAS,CAAC,EAAGqqB,GAAcE,EAC/C,IACyBluD,OAAO+tD,EACpC,EACOV,CACX,CAvG0B,8RC9U1BzmC,EAAA,kBAAAC,CAAA,MAAAnkB,EAAAmkB,EAAA,GAAAnY,EAAAxP,OAAAhC,UAAA+hB,EAAAvQ,EAAA9b,eAAAk0B,EAAA5nB,OAAAC,gBAAA,SAAAuD,EAAAmkB,EAAAnY,GAAAhM,EAAAmkB,GAAAnY,EAAArS,KAAA,EAAAwC,EAAA,mBAAA/B,OAAAA,OAAA,GAAAlH,EAAAiJ,EAAA9B,UAAA,aAAAuR,EAAAzP,EAAAL,eAAA,kBAAAuoB,EAAAloB,EAAAmoB,aAAA,yBAAAC,EAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAxP,OAAAC,eAAAuD,EAAAmkB,EAAA,CAAAxqB,MAAAqS,EAAA3P,YAAA,EAAAC,cAAA,EAAAC,UAAA,IAAAyD,EAAAmkB,EAAA,KAAAI,EAAA,aAAAvkB,GAAAukB,EAAA,SAAAvkB,EAAAmkB,EAAAnY,GAAA,OAAAhM,EAAAmkB,GAAAnY,CAAA,WAAAwY,EAAAxkB,EAAAmkB,EAAAnY,EAAAuQ,GAAA,IAAApgB,EAAAgoB,GAAAA,EAAA3pB,qBAAAiqB,EAAAN,EAAAM,EAAAvxB,EAAAsJ,OAAA6O,OAAAlP,EAAA3B,WAAAoR,EAAA,IAAA8Y,EAAAnI,GAAA,WAAA6H,EAAAlxB,EAAA,WAAAyG,MAAAgrB,EAAA3kB,EAAAgM,EAAAJ,KAAA1Y,CAAA,UAAA0xB,EAAA5kB,EAAAmkB,EAAAnY,GAAA,WAAAjc,KAAA,SAAAkL,IAAA+E,EAAAhD,KAAAmnB,EAAAnY,GAAA,OAAAhM,GAAA,OAAAjQ,KAAA,QAAAkL,IAAA+E,EAAA,EAAAmkB,EAAAK,KAAAA,EAAA,IAAAnQ,EAAA,iBAAAzV,EAAA,iBAAAyI,EAAA,YAAAhC,EAAA,YAAA4O,EAAA,YAAAwQ,IAAA,UAAAI,IAAA,UAAAC,IAAA,KAAAvhB,EAAA,GAAAghB,EAAAhhB,EAAArQ,GAAA,8BAAAkhB,EAAA5X,OAAAuoB,eAAA5vB,EAAAif,GAAAA,EAAAA,EAAA4Q,EAAA,MAAA7vB,GAAAA,IAAA6W,GAAAuQ,EAAAvf,KAAA7H,EAAAjC,KAAAqQ,EAAApO,GAAA,IAAA8vB,EAAAH,EAAAtqB,UAAAiqB,EAAAjqB,UAAAgC,OAAA6O,OAAA9H,GAAA,SAAA2hB,EAAAllB,GAAA,0BAAAvC,SAAA,SAAA0mB,GAAAI,EAAAvkB,EAAAmkB,GAAA,SAAAnkB,GAAA,YAAArE,QAAAwoB,EAAAnkB,EAAA,gBAAAmlB,EAAAnlB,EAAAmkB,GAAA,SAAAiB,EAAApZ,EAAAoY,EAAAjoB,EAAAjJ,GAAA,IAAA0Y,EAAAgZ,EAAA5kB,EAAAgM,GAAAhM,EAAAokB,GAAA,aAAAxY,EAAA7b,KAAA,KAAAs0B,EAAAzY,EAAA3Q,IAAAoZ,EAAAgQ,EAAA1qB,MAAA,OAAA0a,GAAA,UAAAla,EAAAka,IAAAkI,EAAAvf,KAAAqX,EAAA,WAAA8P,EAAA/oB,QAAAiZ,EAAAgR,SAAAhqB,MAAA,SAAA2E,GAAAolB,EAAA,OAAAplB,EAAA7D,EAAAjJ,EAAA,aAAA8M,GAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAixB,EAAA/oB,QAAAiZ,GAAAhZ,MAAA,SAAA2E,GAAAqkB,EAAA1qB,MAAAqG,EAAA7D,EAAAkoB,EAAA,aAAArkB,GAAA,OAAAolB,EAAA,QAAAplB,EAAA7D,EAAAjJ,EAAA,IAAAA,EAAA0Y,EAAA3Q,IAAA,KAAA+Q,EAAAoY,EAAA,gBAAAzqB,MAAA,SAAAqG,EAAAuc,GAAA,SAAA+I,IAAA,WAAAnB,GAAA,SAAAA,EAAAnY,GAAAoZ,EAAAplB,EAAAuc,EAAA4H,EAAAnY,EAAA,WAAAA,EAAAA,EAAAA,EAAA3Q,KAAAiqB,EAAAA,GAAAA,GAAA,aAAAX,EAAAR,EAAAnY,EAAAuQ,GAAA,IAAA6H,EAAA/P,EAAA,gBAAAlY,EAAAjJ,GAAA,GAAAkxB,IAAA/c,EAAA,MAAAke,MAAA,mCAAAnB,IAAA/e,EAAA,cAAAlJ,EAAA,MAAAjJ,EAAA,OAAAyG,MAAAqG,EAAAzE,MAAA,OAAAghB,EAAAiJ,OAAArpB,EAAAogB,EAAAthB,IAAA/H,IAAA,KAAA0Y,EAAA2Q,EAAAkJ,SAAA,GAAA7Z,EAAA,KAAAyY,EAAAqB,EAAA9Z,EAAA2Q,GAAA,GAAA8H,EAAA,IAAAA,IAAApQ,EAAA,gBAAAoQ,CAAA,cAAA9H,EAAAiJ,OAAAjJ,EAAAoJ,KAAApJ,EAAAqJ,MAAArJ,EAAAthB,SAAA,aAAAshB,EAAAiJ,OAAA,IAAApB,IAAA/P,EAAA,MAAA+P,EAAA/e,EAAAkX,EAAAthB,IAAAshB,EAAAsJ,kBAAAtJ,EAAAthB,IAAA,gBAAAshB,EAAAiJ,QAAAjJ,EAAAuJ,OAAA,SAAAvJ,EAAAthB,KAAAmpB,EAAA/c,EAAA,IAAA9D,EAAAqhB,EAAAT,EAAAnY,EAAAuQ,GAAA,cAAAhZ,EAAAxT,KAAA,IAAAq0B,EAAA7H,EAAAhhB,KAAA8J,EAAAzG,EAAA2E,EAAAtI,MAAAgZ,EAAA,gBAAAta,MAAA4J,EAAAtI,IAAAM,KAAAghB,EAAAhhB,KAAA,WAAAgI,EAAAxT,OAAAq0B,EAAA/e,EAAAkX,EAAAiJ,OAAA,QAAAjJ,EAAAthB,IAAAsI,EAAAtI,IAAA,YAAAyqB,EAAAvB,EAAAnY,GAAA,IAAAuQ,EAAAvQ,EAAAwZ,OAAApB,EAAAD,EAAA9pB,SAAAkiB,GAAA,GAAA6H,IAAApkB,EAAA,OAAAgM,EAAAyZ,SAAA,eAAAlJ,GAAA4H,EAAA9pB,SAAA,SAAA2R,EAAAwZ,OAAA,SAAAxZ,EAAA/Q,IAAA+E,EAAA0lB,EAAAvB,EAAAnY,GAAA,UAAAA,EAAAwZ,SAAA,WAAAjJ,IAAAvQ,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAA8L,EAAA,aAAAtI,EAAA,IAAA9X,EAAAyoB,EAAAR,EAAAD,EAAA9pB,SAAA2R,EAAA/Q,KAAA,aAAAkB,EAAApM,KAAA,OAAAic,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAAkB,EAAAlB,IAAA+Q,EAAAyZ,SAAA,KAAAxR,EAAA,IAAA/gB,EAAAiJ,EAAAlB,IAAA,OAAA/H,EAAAA,EAAAqI,MAAAyQ,EAAAmY,EAAA4B,YAAA7yB,EAAAyG,MAAAqS,EAAAtQ,KAAAyoB,EAAA6B,QAAA,WAAAha,EAAAwZ,SAAAxZ,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,GAAAgM,EAAAyZ,SAAA,KAAAxR,GAAA/gB,GAAA8Y,EAAAwZ,OAAA,QAAAxZ,EAAA/Q,IAAA,IAAAwV,UAAA,oCAAAzE,EAAAyZ,SAAA,KAAAxR,EAAA,UAAAgS,EAAAjmB,GAAA,IAAAmkB,EAAA,CAAA+B,OAAAlmB,EAAA,SAAAA,IAAAmkB,EAAAgC,SAAAnmB,EAAA,SAAAA,IAAAmkB,EAAAiC,WAAApmB,EAAA,GAAAmkB,EAAAkC,SAAArmB,EAAA,SAAAsmB,WAAApmB,KAAAikB,EAAA,UAAAoC,EAAAvmB,GAAA,IAAAmkB,EAAAnkB,EAAAwmB,YAAA,GAAArC,EAAAp0B,KAAA,gBAAAo0B,EAAAlpB,IAAA+E,EAAAwmB,WAAArC,CAAA,UAAAO,EAAA1kB,GAAA,KAAAsmB,WAAA,EAAAJ,OAAA,SAAAlmB,EAAAvC,QAAAwoB,EAAA,WAAAnsB,OAAA,YAAAkrB,EAAAb,GAAA,GAAAA,GAAA,KAAAA,EAAA,KAAAnY,EAAAmY,EAAAjxB,GAAA,GAAA8Y,EAAA,OAAAA,EAAAhP,KAAAmnB,GAAA,sBAAAA,EAAAzoB,KAAA,OAAAyoB,EAAA,IAAAsC,MAAAtC,EAAA5uB,QAAA,KAAA6uB,GAAA,EAAAjoB,EAAA,SAAAT,IAAA,OAAA0oB,EAAAD,EAAA5uB,QAAA,GAAAgnB,EAAAvf,KAAAmnB,EAAAC,GAAA,OAAA1oB,EAAA/B,MAAAwqB,EAAAC,GAAA1oB,EAAAH,MAAA,EAAAG,EAAA,OAAAA,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,SAAAS,EAAAT,KAAAS,CAAA,YAAAsU,UAAAtW,EAAAgqB,GAAA,2BAAAU,EAAArqB,UAAAsqB,EAAAV,EAAAa,EAAA,eAAAtrB,MAAAmrB,EAAAxoB,cAAA,IAAA8nB,EAAAU,EAAA,eAAAnrB,MAAAkrB,EAAAvoB,cAAA,IAAAuoB,EAAA6B,YAAAnC,EAAAO,EAAAT,EAAA,qBAAAF,EAAAwC,oBAAA,SAAA3mB,GAAA,IAAAmkB,EAAA,mBAAAnkB,GAAAA,EAAAzF,YAAA,QAAA4pB,IAAAA,IAAAU,GAAA,uBAAAV,EAAAuC,aAAAvC,EAAAl0B,MAAA,EAAAk0B,EAAAyC,KAAA,SAAA5mB,GAAA,OAAAxD,OAAAqqB,eAAArqB,OAAAqqB,eAAA7mB,EAAA8kB,IAAA9kB,EAAA8mB,UAAAhC,EAAAP,EAAAvkB,EAAAqkB,EAAA,sBAAArkB,EAAAxF,UAAAgC,OAAA6O,OAAA4Z,GAAAjlB,CAAA,EAAAmkB,EAAA4C,MAAA,SAAA/mB,GAAA,OAAAqlB,QAAArlB,EAAA,EAAAklB,EAAAC,EAAA3qB,WAAA+pB,EAAAY,EAAA3qB,UAAAoR,GAAA,0BAAAuY,EAAAgB,cAAAA,EAAAhB,EAAA6C,MAAA,SAAAhnB,EAAAgM,EAAAuQ,EAAA6H,EAAAjoB,QAAA,IAAAA,IAAAA,EAAAhB,SAAA,IAAAjI,EAAA,IAAAiyB,EAAAX,EAAAxkB,EAAAgM,EAAAuQ,EAAA6H,GAAAjoB,GAAA,OAAAgoB,EAAAwC,oBAAA3a,GAAA9Y,EAAAA,EAAAwI,OAAAL,MAAA,SAAA2E,GAAA,OAAAA,EAAAzE,KAAAyE,EAAArG,MAAAzG,EAAAwI,MAAA,KAAAwpB,EAAAD,GAAAV,EAAAU,EAAAZ,EAAA,aAAAE,EAAAU,EAAA/xB,GAAA,0BAAAqxB,EAAAU,EAAA,qDAAAd,EAAA7T,KAAA,SAAAtQ,GAAA,IAAAmkB,EAAA3nB,OAAAwD,GAAAgM,EAAA,WAAAuQ,KAAA4H,EAAAnY,EAAA9L,KAAAqc,GAAA,OAAAvQ,EAAAzO,UAAA,SAAA7B,IAAA,KAAAsQ,EAAAzW,QAAA,KAAAyK,EAAAgM,EAAAlO,MAAA,GAAAkC,KAAAmkB,EAAA,OAAAzoB,EAAA/B,MAAAqG,EAAAtE,EAAAH,MAAA,EAAAG,CAAA,QAAAA,EAAAH,MAAA,EAAAG,CAAA,GAAAyoB,EAAAa,OAAAA,EAAAN,EAAAlqB,UAAA,CAAAD,YAAAmqB,EAAA5qB,MAAA,SAAAqqB,GAAA,QAAA8C,KAAA,OAAAvrB,KAAA,OAAAiqB,KAAA,KAAAC,MAAA5lB,EAAA,KAAAzE,MAAA,OAAAkqB,SAAA,UAAAD,OAAA,YAAAvqB,IAAA+E,EAAA,KAAAsmB,WAAA7oB,QAAA8oB,IAAApC,EAAA,QAAAnY,KAAA,WAAAA,EAAAnb,OAAA,IAAA0rB,EAAAvf,KAAA,KAAAgP,KAAAya,OAAAza,EAAAxJ,MAAA,WAAAwJ,GAAAhM,EAAA,EAAAoW,KAAA,gBAAA7a,MAAA,MAAAyE,EAAA,KAAAsmB,WAAA,GAAAE,WAAA,aAAAxmB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,YAAAisB,IAAA,EAAArB,kBAAA,SAAA1B,GAAA,QAAA5oB,KAAA,MAAA4oB,EAAA,IAAAnY,EAAA,cAAAmb,EAAA5K,EAAA6H,GAAA,OAAAlxB,EAAAnD,KAAA,QAAAmD,EAAA+H,IAAAkpB,EAAAnY,EAAAtQ,KAAA6gB,EAAA6H,IAAApY,EAAAwZ,OAAA,OAAAxZ,EAAA/Q,IAAA+E,KAAAokB,CAAA,SAAAA,EAAA,KAAAkC,WAAA/wB,OAAA,EAAA6uB,GAAA,IAAAA,EAAA,KAAAjoB,EAAA,KAAAmqB,WAAAlC,GAAAlxB,EAAAiJ,EAAAqqB,WAAA,YAAArqB,EAAA+pB,OAAA,OAAAiB,EAAA,UAAAhrB,EAAA+pB,QAAA,KAAAe,KAAA,KAAArb,EAAA2Q,EAAAvf,KAAAb,EAAA,YAAAkoB,EAAA9H,EAAAvf,KAAAb,EAAA,iBAAAyP,GAAAyY,EAAA,SAAA4C,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,WAAAc,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,SAAAxa,GAAA,QAAAqb,KAAA9qB,EAAAgqB,SAAA,OAAAgB,EAAAhrB,EAAAgqB,UAAA,YAAA9B,EAAA,MAAAkB,MAAA,kDAAA0B,KAAA9qB,EAAAiqB,WAAA,OAAAe,EAAAhrB,EAAAiqB,WAAA,KAAAN,OAAA,SAAA9lB,EAAAmkB,GAAA,QAAAnY,EAAA,KAAAsa,WAAA/wB,OAAA,EAAAyW,GAAA,IAAAA,EAAA,KAAAoY,EAAA,KAAAkC,WAAAta,GAAA,GAAAoY,EAAA8B,QAAA,KAAAe,MAAA1K,EAAAvf,KAAAonB,EAAA,oBAAA6C,KAAA7C,EAAAgC,WAAA,KAAAjqB,EAAAioB,EAAA,OAAAjoB,IAAA,UAAA6D,GAAA,aAAAA,IAAA7D,EAAA+pB,QAAA/B,GAAAA,GAAAhoB,EAAAiqB,aAAAjqB,EAAA,UAAAjJ,EAAAiJ,EAAAA,EAAAqqB,WAAA,UAAAtzB,EAAAnD,KAAAiQ,EAAA9M,EAAA+H,IAAAkpB,EAAAhoB,GAAA,KAAAqpB,OAAA,YAAA9pB,KAAAS,EAAAiqB,WAAAnS,GAAA,KAAAvO,SAAAxS,EAAA,EAAAwS,SAAA,SAAA1F,EAAAmkB,GAAA,aAAAnkB,EAAAjQ,KAAA,MAAAiQ,EAAA/E,IAAA,gBAAA+E,EAAAjQ,MAAA,aAAAiQ,EAAAjQ,KAAA,KAAA2L,KAAAsE,EAAA/E,IAAA,WAAA+E,EAAAjQ,MAAA,KAAAm3B,KAAA,KAAAjsB,IAAA+E,EAAA/E,IAAA,KAAAuqB,OAAA,cAAA9pB,KAAA,kBAAAsE,EAAAjQ,MAAAo0B,IAAA,KAAAzoB,KAAAyoB,GAAAlQ,CAAA,EAAAmT,OAAA,SAAApnB,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAoa,aAAApmB,EAAA,YAAA0F,SAAAsG,EAAAwa,WAAAxa,EAAAqa,UAAAE,EAAAva,GAAAiI,CAAA,kBAAAjU,GAAA,QAAAmkB,EAAA,KAAAmC,WAAA/wB,OAAA,EAAA4uB,GAAA,IAAAA,EAAA,KAAAnY,EAAA,KAAAsa,WAAAnC,GAAA,GAAAnY,EAAAka,SAAAlmB,EAAA,KAAAuc,EAAAvQ,EAAAwa,WAAA,aAAAjK,EAAAxsB,KAAA,KAAAq0B,EAAA7H,EAAAthB,IAAAsrB,EAAAva,EAAA,QAAAoY,CAAA,QAAAmB,MAAA,0BAAA8B,cAAA,SAAAlD,EAAAnY,EAAAuQ,GAAA,YAAAkJ,SAAA,CAAAprB,SAAA2qB,EAAAb,GAAA4B,WAAA/Z,EAAAga,QAAAzJ,GAAA,cAAAiJ,SAAA,KAAAvqB,IAAA+E,GAAAiU,CAAA,GAAAkQ,CAAA,UAAAmD,EAAA/K,EAAAvc,EAAAmkB,EAAAnY,EAAAoY,EAAAlxB,EAAA0Y,GAAA,QAAAzP,EAAAogB,EAAArpB,GAAA0Y,GAAAyY,EAAAloB,EAAAxC,KAAA,OAAA4iB,GAAA,YAAA4H,EAAA5H,EAAA,CAAApgB,EAAAZ,KAAAyE,EAAAqkB,GAAAlpB,QAAAC,QAAAipB,GAAAhpB,KAAA2Q,EAAAoY,EAAA,UAAAmD,EAAAhL,GAAA,sBAAAvc,EAAA,KAAAmkB,EAAA7uB,UAAA,WAAA6F,SAAA,SAAA6Q,EAAAoY,GAAA,IAAAlxB,EAAAqpB,EAAA5mB,MAAAqK,EAAAmkB,GAAA,SAAAqD,EAAAjL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,OAAAlL,EAAA,UAAAkL,EAAAlL,GAAA+K,EAAAp0B,EAAA8Y,EAAAoY,EAAAoD,EAAAC,EAAA,QAAAlL,EAAA,CAAAiL,OAAA,gBAAAE,EAAAvD,EAAAnY,GAAA,QAAAhM,EAAA,EAAAA,EAAAgM,EAAAzW,OAAAyK,IAAA,KAAAokB,EAAApY,EAAAhM,GAAAokB,EAAA/nB,WAAA+nB,EAAA/nB,aAAA,EAAA+nB,EAAA9nB,cAAA,YAAA8nB,IAAAA,EAAA7nB,UAAA,GAAAC,OAAAC,eAAA0nB,EAAAwD,EAAAvD,EAAAzzB,KAAAyzB,EAAA,WAAAuD,EAAA3nB,GAAA,IAAA7D,EAAA,SAAA6D,EAAAgM,GAAA,aAAA7R,EAAA6F,KAAAA,EAAA,OAAAA,EAAA,IAAAmkB,EAAAnkB,EAAA5F,OAAAwtB,aAAA,YAAAzD,EAAA,KAAAhoB,EAAAgoB,EAAAnnB,KAAAgD,EAAAgM,GAAA,wBAAA7R,EAAAgC,GAAA,OAAAA,EAAA,UAAAsU,UAAA,kEAAAzE,EAAAiO,OAAA4N,QAAA7nB,EAAA,CAAA8nB,CAAA9nB,EAAA,0BAAA7F,EAAAgC,GAAAA,EAAAA,EAAA,GAKA,IAEasvD,EAAW,kBAPxBtnC,EAOwB,SAAAsnC,KAPxB,SAAAv4D,EAAAqpB,GAAA,KAAArpB,aAAAqpB,GAAA,UAAA9L,UAAA,qCAOwB8X,CAAA,KAAAkjC,EAAA,EAPxBz/C,EAOwB,KAPxBhM,EAOwB,EAAArP,IAAA,oBAAAgJ,OAKpB+xD,EAAAnkC,EAAArD,IAAA0C,MACA,SAAA4B,EAA+BhxB,EAAS8iC,GAAQ,IAAAqxB,EAAAC,EAAA,OAAA1nC,IAAAM,MAAA,SAAAiE,GAAA,cAAAA,EAAAxB,KAAAwB,EAAA/sB,MAAA,OAE5B,OAAZiwD,EAAU,CAAC,EAACljC,EAAA/sB,KAAA,EACSs+B,EAAAA,EAAY6xB,KAAK,SAAUvxB,GAAS,OAK7D,OALAqxB,EAAQG,SAAQrjC,EAAA9C,KAKhB8C,EAAA/sB,KAAA,EACwB8tB,EAAAA,EAAgBC,oBAjBlB,uBAiB6DkiC,GAAQ,OAAvFC,EAAWnjC,EAAA9C,KACfnuB,EAAQkyB,UAAYkiC,EAGD90D,SAASsoB,iBAAiB,8CAEhC3hB,SAAQ,SAAAsuD,GACjBA,EAAI7xD,iBAAiB,SAAS,WAC1Bu8B,EAAAA,EAAKgB,0BACT,GACJ,IAAG,yBAAAhP,EAAArS,OAAA,GAAAoS,EAAA,KACN,SApB6BuB,EAAAC,GAAA,OAAA0hC,EAAA/1D,MAAC,KAADL,UAAA,IAyB9B,CAAA3E,IAAA,QAAAgJ,MACA,WACI,IAAIqyD,EAAY38D,OAAOisC,UAAU0wB,UAC7BC,EAAW58D,OAAOisC,UAAU2wB,SAI5BC,EAAK,KAwBT,OArBIA,GADsC,IALrB,CAAC,YAAa,WAAY,SAAU,SAAU,OAKhDr5D,QAAQo5D,GAClB,OAEoC,IAN1B,CAAC,SAAU,QAMRp5D,QAAQo5D,GACrB,cAEA,OAAO37D,KAAK07D,GACZ,QAEwC,IAb1B,CAAC,QAAS,QAAS,UAAW,SAa3Bn5D,QAAQo5D,GACzB,UAEA,UAAU37D,KAAK07D,GACf,WAECE,GAAM,QAAQ57D,KAAK27D,GACpB,QAGA,OAIb,GAKA,CAAAt7D,IAAA,cAAAgJ,MACA,WACI,IAAIwyD,EAAQxxD,KAAKyxD,UAAUzxD,KAAK0xD,iBAEhC,GAAIF,EAAO,CAGP,IAFA,IAAInnC,EAASmnC,EAAM/tD,MAAM,KACrB9D,EAAM,CAAC,EACF6B,EAAI,EAAGA,EAAI6oB,EAAOzvB,OAAQ4G,IAAK,CACpC,IAAImwD,EAAWtnC,EAAO7oB,GAAGiC,MAAM,KAC/B9D,EAAIgyD,EAAS,IAAMA,EAAS,EAChC,CAEA,OAAOhyD,EAAc,QACzB,CAEA,IAAIiyD,EAAW5xD,KAAK6xD,OAChBC,EAAiB,IAAI/6D,KAIzB,OAFAiJ,KAAK+xD,UAAU7yB,EAAAA,EAAcwyB,kBAAmB,YAAF/uD,OAAcivD,EAAQ,oBAAAjvD,OAAmBmvD,GAAkB,MAElGF,CACX,GAKA,CAAA57D,IAAA,YAAAgJ,MACA,SAAiB1J,EAAM0J,EAAOgzD,GAC1B,IAAIC,EAAU,GACd,GAAID,EAAM,CACN,IAAIl7D,EAAO,IAAIC,KACfD,EAAKqlB,QAAQrlB,EAAKiC,UAAoB,GAAPi5D,EAAY,GAAK,GAAK,KACrDC,EAAU,aAAen7D,EAAKo7D,aAClC,CACA/1D,SAASg2D,OAAS78D,EAAO,KAAO0J,GAAS,IAAMizD,EAAU,UAC7D,GAAC,CAAAj8D,IAAA,YAAAgJ,MAED,SAAiB1J,GAGb,IAFA,IAAI88D,EAAS98D,EAAO,IAChB+8D,EAAKl2D,SAASg2D,OAAO1uD,MAAM,KACtBjC,EAAI,EAAGA,EAAI6wD,EAAGz3D,OAAQ4G,IAAK,CAEhC,IADA,IAAIyP,EAAIohD,EAAG7wD,GACW,KAAfyP,EAAE/a,OAAO,IAAW+a,EAAIA,EAAE/I,UAAU,EAAG+I,EAAErW,QAChD,GAAyB,GAArBqW,EAAE/Y,QAAQk6D,GAAc,OAAOnhD,EAAE/I,UAAUkqD,EAAOx3D,OAAQqW,EAAErW,OACpE,CACA,OAAO,IACX,GAAC,CAAA5E,IAAA,cAAAgJ,MAED,SAAmB1J,GACf6G,SAASg2D,OAAS78D,EAAO,mDAC7B,GAIA,CAAAU,IAAA,OAAAgJ,MACA,WACI,MAAO,uCACFsJ,QAAQ,SAAS,SAAU2I,GACxB,IAAMI,EAAoB,GAAhB1Z,KAAKoqB,SAAgB,EAE/B,OADa,KAAL9Q,EAAWI,EAAS,EAAJA,EAAU,GACzB7K,SAAS,GACtB,GACR,GAKA,CAAAxQ,IAAA,YAAAgJ,MACA,SAAiBszD,GACbtyD,KAAK+xD,UAAU7yB,EAAAA,EAAcqzB,eAAgBD,EAAQ,IACzD,GAAC,CAAAt8D,IAAA,cAAAgJ,MAED,WACIgB,KAAKwyD,YAAYtzB,EAAAA,EAAcqzB,eACnC,GAAC,CAAAv8D,IAAA,YAAAgJ,MAED,WACI,IAEI,IAAIyzD,EAAazyD,KAAKyxD,UAAUvyB,EAAAA,EAAcqzB,gBAC9C,GAAkB,aAAdE,EACA,OAAOA,CAEf,CAAE,MAAO39C,GACL,OAAO,IACX,CACJ,GAIA,CAAA9e,IAAA,oBAAAgJ,OAAA0zD,EAAA9lC,EAAArD,IAAA0C,MACA,SAAAiC,EAA+BykC,EAAQC,EAAYN,EAAQO,GAAQ,IAAAC,EAAAvB,EAAAwB,EAAAppD,EAAA,OAAA4f,IAAAM,MAAA,SAAAuE,GAAA,cAAAA,EAAA9B,KAAA8B,EAAArtB,MAAA,OAC3D+xD,EAAa,MAEbD,IACAC,EAAa,UAGbvB,EAAKvxD,KAAKgzD,QACVD,EAAW/yD,KAAKizD,cAEL,MAAXX,IACAA,EAAS,aAGE,MAAXA,IACAA,EAAS,SAGE,MAAXA,IACAA,EAAS,aAGE,OAAXA,IACAA,EAAS,WAIT3oD,EAAM,6EAAHhH,OAAgFowD,EAAQ,YAAApwD,OAAWgwD,EAAM,gBAAAhwD,OAAeiwD,EAAU,gBAAAjwD,OAAemwD,EAAU,QAAAnwD,OAAO4uD,EAAE,YAAA5uD,OAAW2vD,GAEtL,IACIp3B,MAAM,GAADv4B,OAAIgH,GAAO,CACZ0xB,QAAS,CACL,eAAgB,eAI5B,CACA,MAAOx6B,GAGP,CAeA,yBAAAutB,EAAA3S,OAAA,GAAAyS,EAAA,UACH,SAxD6B4C,EAAAM,EAAAC,EAAAoC,GAAA,OAAAi/B,EAAA13D,MAAC,KAADL,UAAA,IA6D9B,CAAA3E,IAAA,kBAAAgJ,MACA,SAAuB2K,GAEnB,IAAK3J,KAAKkzD,YAAYvpD,GAAM,CAExB,IAAIwpD,EAAOh3D,SAASC,cAAc,QAClC+2D,EAAKz7C,IAAM,aACXy7C,EAAK/9D,KAAO,WACZ+9D,EAAK37C,KAAO7N,EAGZxN,SAAS8iC,KAAKjiC,YAAYm2D,EAC9B,CACJ,GAAC,CAAAn9D,IAAA,cAAAgJ,MAED,SAAmB2K,GAGf,IADA,IAAIypD,EAAQj3D,SAASs3C,qBAAqB,QACjCjyC,EAAI,EAAGA,EAAI4xD,EAAMx4D,OAAQ4G,IAC9B,GAAI4xD,EAAM5xD,GAAGgW,OAAS7N,EAClB,OAAO,EAGf,OAAO,CACX,GAIA,CAAA3T,IAAA,gBAAAgJ,MACA,SAAqBq0D,EAAUC,GAC3B,IAAIC,EAAiB7+D,OAAOoI,SAAS0a,KAOrC,OAJI+7C,EAAev5D,SAAS,OACxBu5D,EAAiBA,EAAe9vD,MAAM,KAAK,IAGxC,GAAPd,OAAU4wD,EAAc,KAAA5wD,OAAI0wD,EAAQ,KAAA1wD,OAAI2wD,EAC5C,GAAC,CAAAt9D,IAAA,aAAAgJ,MAED,SAAkBnC,EAASw2D,EAAUC,GACjC,IAAI/jC,EAAOvvB,KACPwzD,EAAUxzD,KAAKyzD,cAAcJ,EAAUC,GAGvClgC,EAAYv2B,EAAQ6L,GAExB6mB,EAAKmkC,aAAa72D,EAAQ6L,IAETvM,SAAS6yB,eAAeoE,GAE9B7zB,iBAAiB,SAAS,WACjCohC,UAAUgzB,UAAUC,UAAUJ,GAC7B9yD,MAAK,WAEF6uB,EAAKmB,iBAAiB,0BAA2B,IACrD,IAAE,OAAO,SAAU5b,GAEfya,EAAKsB,eAAe,uBAAwB,IAChD,GACJ,GACJ,GAKA,CAAA76B,IAAA,mBAAAgJ,MACA,WACI,IAAMnC,EAAUV,SAAS6yB,eAAe,gBACpC6kC,EAAO7zD,KAEXnD,EAAQ0C,iBAAiB,iBAAiB,SAACu5B,GACvC/K,MACAA,MACA8lC,EAAKC,iBACDh7B,EAAIi7B,cAAc/1D,aAAa,oBAC/B86B,EAAIi7B,cAAc/1D,aAAa,gBAC/B86B,EAAIi7B,cAAc/1D,aAAa,aAEvC,IAGA,IAAIg2D,EAAc73D,SAAS6yB,eAAe,oBAE1CglC,EAAYz0D,iBAAiB,UAAU,SAAUowB,GAE7CA,EAAMC,iBACND,EAAME,kBAGDmkC,EAAYlkC,iBAObwR,WAAW/9B,OAAM,WACb+9B,WAAWC,QAAQ,2CAA4C,CAAEJ,OAAQ,WACpEzgC,MAAK,SAAU4Q,GAKZuiD,EAAKI,iBAAiB3iD,EAC1B,GACR,IAGJ0iD,EAAY13D,UAAUC,IAAI,gBAC9B,IAAG,EACP,GAAC,CAAAvG,IAAA,mBAAAgJ,MAED,SAAwBk1D,EAAaC,EAAaC,GAC9CrmC,MAGA,IAAMsmC,EAAoBl4D,SAAS6yB,eAAe,qBAExB7yB,SAAS6yB,eAAe,eAChChwB,MAAQk1D,EAEV/3D,SAAS6yB,eAAe,WAChChwB,MAAQm1D,EAGhBE,EAAkBC,UAAY,iBAAH3xD,OAAoByxD,EACnD,GAAC,CAAAp+D,IAAA,mBAAAgJ,MAED,SAAwBsS,GACpByc,MACA,IAAIimC,EAAc73D,SAAS6yB,eAAe,oBACtC6kC,EAAO7zD,KAGL+vB,EAAW,IAAIwkC,SAASP,GAIxBQ,EAAa,CAAC,EAGpBzkC,EAASjtB,SAAQ,SAAC9D,EAAOhJ,GACrBw+D,EAAWx+D,GAAOgJ,CACtB,IAGAw1D,EAAgB,IAAI9/D,OAAOoI,SAAS0a,KAEpCuW,MACAA,MAGAmN,MAAM,GAADv4B,OAAI0yB,QAAO,4CAA4C,CACxDxK,OAAQ,OACRwQ,QAAS,CACL,eAAgB,mBAChB,mBAAoB/pB,GAExB7I,KAAMkM,KAAKC,UAAU4/C,KAGpB9zD,MAAK,SAACyU,GACH,IAAKA,EAASgmB,GACV,MAAM,IAAIvQ,MAAM,wBAExB,IAEClqB,MAAK,SAACyjB,GAIH0vC,EAAKljC,WAAW,gBAGhBqjC,EAAY70D,QAGZ00D,EAAKnjC,iBAAiB,iCAAkC,KAAM,EAClE,IAAE,OAEK,SAAC5b,GAGJ++C,EAAKhjC,eAAe,gDAAiD,KAAO,EAChF,GAER,GAKA,CAAA76B,IAAA,uBAAAgJ,MACA,WACI+uB,MAGA,IAAI8lC,EAAO7zD,KAEI7D,SAASsoB,iBAAiB,uCAChC3hB,SAAQ,SAAAjG,GACbA,EAAQ0C,iBAAiB,SAAS,WAC9Bs0D,EAAKY,qBAAqBz0D,KAC9B,GACJ,GACJ,GAAC,CAAAhK,IAAA,uBAAAgJ,MAED,SAA4B01D,GAAW,IAAA59C,EAAA,KACnCiX,MAGA,IAAI4mC,EAAgBD,EAAU12D,aAAa,sBACvC42D,EAAmBF,EAAU12D,aAAa,cAG1C61D,EAAO7zD,KAEI7D,SAASsoB,iBAAiB,iCAChC3hB,SAAQ,SAAAjG,GACb,IAAI2yB,EAAcrzB,SAAS6yB,eAAe,kBAE1CjB,MACAA,MACAA,MACAA,MAGiByB,EAAYyR,cAAc,gCAChCjiC,MAAQ21D,EAEHx4D,SAAS6yB,eAAe,mBAC9BrX,YAAci9C,EAGxB,IAAIn3B,EAAUo2B,EAAKgB,aAEfp3B,IAEqBjO,EAAYyR,cAAc,2BAChCjiC,MAAQy+B,EAAQq3B,WAEXtlC,EAAYyR,cAAc,0BAChCjiC,MAAQy+B,EAAQS,UAEN1O,EAAYyR,cAAc,8BAChCjiC,MAAQy+B,EAAQs3B,cAEhBvlC,EAAYyR,cAAc,wBAChCjiC,MAAQy+B,EAAQu3B,SAGhCl+C,EAAKqY,UAAUtyB,EAAQ6L,IAEvB8mB,EAAYjwB,iBAAiB,UAAU,SAAUowB,GAE7CA,EAAMC,iBACND,EAAME,kBAGDL,EAAYM,iBAIb/B,MAGAuT,WAAW/9B,OAAM,WACb+9B,WAAWC,QAAQ,2CAA4C,CAAEJ,OAAQ,WACpEzgC,MAAK,SAAU4Q,GACZyc,MAGA8lC,EAAKoB,mBAAmB3jD,EAAOke,EAAa3yB,EAChD,GACR,KAdAkxB,MAiBJyB,EAAYlzB,UAAUC,IAAI,gBAC9B,IAAG,EACP,GACJ,GAAC,CAAAvG,IAAA,qBAAAgJ,MAED,SAA0BsS,EAAOke,EAAa3yB,GAAS,IAAAsxB,EAAA,KACnDJ,MAEA,IAAI8lC,EAAO7zD,KAGL+vB,EAAW,IAAIwkC,SAAS/kC,GAE9BzB,MAGA,IAAMymC,EAAa,CAAC,EAGpBzkC,EAASjtB,SAAQ,SAAC9D,EAAOhJ,GACrBw+D,EAAWx+D,GAAOgJ,CACtB,IAGyB,IAArBw1D,EAAWU,SACXV,EAAWU,OAAS,MAGxBnnC,MAGAmN,MAAM,GAADv4B,OAAI0yB,QAAO,uCAAuC,CACnDxK,OAAQ,OACRwQ,QAAS,CACL,eAAgB,mBAChB,mBAAoB/pB,GAExB7I,KAAMkM,KAAKC,UAAU4/C,KAGpB9zD,MAAK,SAACyU,GACH,IAAKA,EAASgmB,GACV,MAAM,IAAIvQ,MAAM,0CAExB,IAEClqB,MAAK,SAACyjB,GAEH4J,MAEAI,EAAKwC,WAAW9zB,EAAQ6L,IAGxB8mB,EAAYrwB,QAGZ00D,EAAKnjC,iBAAiB,uCAAwC,KAAM,EACxE,IAAE,OAEK,SAAC5b,GAGJ++C,EAAKhjC,eAAe,qCAAsC,KAAO,EACrE,GACR,GAMA,CAAA76B,IAAA,aAAAgJ,MACA,WAEI,IAAIy+B,EAAUpB,eAAeX,QAAQ,WAErC,GAAI+B,EAEA,IAEI,OAAO9oB,KAAKjD,MAAM+rB,EACtB,CACA,MAAO3oB,GAEH,OAAO,IACX,CAGJ,OAAO,IACX,GAMA,CAAA9e,IAAA,aAAAgJ,MACA,SAAkBo0B,GACd,IAAI+hC,EAAYh5D,SAAS6yB,eAAeoE,GACpCgiC,EAAQh3B,UAAUC,MAAMg3B,YAAYF,GAGpCC,GAASD,EAAU74D,UAAUgb,SAAS,SACtC89C,EAAME,MAEd,GAAC,CAAAt/D,IAAA,YAAAgJ,MAED,SAAiBo0B,GACb,IAAI+hC,EAAYh5D,SAAS6yB,eAAeoE,GAC5BgL,UAAUC,MAAMC,oBAAoB62B,GAC1C52B,MACV,GAIA,CAAAvoC,IAAA,mBAAAgJ,MACA,SAAwB2Q,EAAMlV,EAAU86D,GACpCxnC,OAEc,IAAIiiC,GAEZn7C,QAAQ,CACVyuB,QAAS3zB,EACTlV,SAAUA,EACVoyD,YAAa0I,EACb3I,QAAQ,EACRnhD,SAAU,CACN62B,EAAG,QACHhpB,EAAG,QAGf,GAAC,CAAAtjB,IAAA,iBAAAgJ,MAED,SAAsB2Q,EAAMlV,EAAU86D,GAClCxnC,OAEc,IAAIiiC,GAEZl7C,MAAM,CACRwuB,QAAS3zB,EACTlV,SAAUA,EACVoyD,YAAa0I,EACb3I,QAAQ,EACRnhD,SAAU,CACN62B,EAAG,QACHhpB,EAAG,QAGf,GAKA,CAAAtjB,IAAA,2BAAAgJ,MACA,SAAgC29B,GAC5B,IAAIiB,EAAUvB,eAAeX,QAAQ,WAErC,GAAIiB,EAAa,CACb,IAAI64B,EAAgB/4B,mBAAmBE,GACvCjoC,OAAOoI,SAAS0a,KAAO,GAAH7U,OAAMi7B,EAAO,WAAAj7B,OAAU6yD,EAC/C,MAEI9gE,OAAOoI,SAAS0a,KAAO,GAAH7U,OAAMi7B,EAAO,WAAAj7B,OAAU85B,mBAAmB/nC,OAAOoI,SAAS0a,MAEtF,GAKA,CAAAxhB,IAAA,oBAAAgJ,MACA,SAAyBwwB,GACrBzB,MACAA,MAEA,IAAMgC,EAAW,IAAIwkC,SAAS/kC,GAExBglC,EAAa,CAAC,EASpB,OANAzkC,EAASjtB,SAAQ,SAAC9D,EAAOhJ,GACrBw+D,EAAWx+D,GAAOgJ,CACtB,IAEA+uB,MACAA,MACOymC,CACX,GAKA,CAAAx+D,IAAA,aAAAgJ,MACA,SAAkB2K,EAAKoJ,GACnB,IAAIgsB,EAAS5iC,SAASC,cAAc,UACpC2iC,EAAO3pC,KAAO,kBACd2pC,EAAOC,IAAMr1B,EACbo1B,EAAO7pB,OAASnC,EAIhB5W,SAAS8iC,KAAKjiC,YAAY+hC,EAC9B,GAIA,CAAA/oC,IAAA,mBAAAgJ,MACA,WAC2B7C,SAAS6yB,eAAe,kBAChC/wB,MAAMy3B,QAAU,MACnC,GAIA,CAAA1/B,IAAA,mBAAAgJ,MACA,WAC2B7C,SAAS6yB,eAAe,kBAChC/wB,MAAMy3B,QAAU,MACnC,GAIA,CAAA1/B,IAAA,cAAAgJ,MACA,SAAmBo0B,GACLj3B,SAAS6yB,eAAe,GAADrsB,OAAIywB,IACjCn1B,MAAMy3B,QAAU,OACxB,GAIA,CAAA1/B,IAAA,cAAAgJ,MACA,SAAmBo0B,GACLj3B,SAAS6yB,eAAe,GAADrsB,OAAIywB,IACjCn1B,MAAMy3B,QAAU,MACxB,GAIA,CAAA1/B,IAAA,eAAAgJ,MACA,SAAoBo0B,GAChB,IAAMqiC,EAAat5D,SAAS6yB,eAAe,GAADrsB,OAAIywB,IACxCsiC,EAAaD,EAAW5jD,WAAU,GACxC4jD,EAAWz5D,WAAW25D,aAAaD,EAAYD,EACnD,GAIA,CAAAz/D,IAAA,0BAAAgJ,MACA,SAA+BhJ,EAAK2J,GAChC87B,aAAaa,QAAQtmC,EAAK2e,KAAKC,UAAUjV,GAC7C,GAAC,CAAA3J,IAAA,yBAAAgJ,MAED,SAA8BhJ,EAAK2J,GAC/B87B,aAAaa,QAAQtmC,EAAK2J,EAC9B,GAAC,CAAA3J,IAAA,wBAAAgJ,MAED,SAA6BhJ,GACzB,OAAOylC,aAAaC,QAAQ1lC,EAChC,GAAC,CAAAA,IAAA,yBAAAgJ,MAED,SAA8BhJ,GAC1B,IAAI2J,EAAM87B,aAAaC,QAAQ1lC,GAE/B,OAAI2J,EACOgV,KAAKjD,MAAM/R,GAGX,IAEf,GAAC,CAAA3J,IAAA,wBAAAgJ,MAED,SAA6BhJ,GACzB,OAAqC,OAA9BylC,aAAaC,QAAQ1lC,EAChC,GAIA,CAAAA,IAAA,4BAAAgJ,MACA,SAAiChJ,EAAK2J,GAClC08B,eAAeC,QAAQtmC,EAAK2e,KAAKC,UAAUjV,GAC/C,GAAC,CAAA3J,IAAA,2BAAAgJ,MAED,SAAgChJ,EAAKgJ,GACjCq9B,eAAeC,QAAQtmC,EAAKgJ,EAChC,GAAC,CAAAhJ,IAAA,0BAAAgJ,MAED,SAA+BhJ,GAC3B,OAAOqmC,eAAeX,QAAQ1lC,EAClC,GAAC,CAAAA,IAAA,2BAAAgJ,MAED,SAAgChJ,GAC5B,IAAM2J,EAAM08B,eAAeX,QAAQ1lC,GACnC,OAAO2J,EAAMgV,KAAKjD,MAAM/R,GAAO,IACnC,GAAC,CAAA3J,IAAA,0BAAAgJ,MAED,SAA+BhJ,GAC3B,OAAuC,OAAhCqmC,eAAeX,QAAQ1lC,EAClC,GAIA,CAAAA,IAAA,eAAAgJ,MACA,SAAoB0L,GAChB,OAAOkrD,KAAKlrD,EAChB,GAAC,CAAA1U,IAAA,eAAAgJ,MAED,SAAoB62D,GAChB,OAAOC,KAAKD,EAChB,GAAC,CAAA7/D,IAAA,qBAAAgJ,MAED,SAA0B0L,GAEtB,OADAA,GAAQ,EACDkrD,KAAKlrD,EAAElE,WAClB,GAAC,CAAAxQ,IAAA,qBAAAgJ,MAED,SAA0B62D,GACtB,IAAInrD,EAAIorD,KAAKD,GAEb,OADQx3D,SAASqM,GACVA,EAAI,CACf,GAKA,CAAA1U,IAAA,YAAAgJ,MACA,SAAiBwwB,GAGb,IAAMumC,EAAcvmC,EAAYyR,cAAc,6BACxC+0B,EAAkBxmC,EAAYyR,cAAc,iCAG5Cg1B,EAAgB,mDActB,SAASC,IACDH,EAAY/2D,QAAUg3D,EAAgBh3D,OACtCg3D,EAAgBG,kBAAkB,2BAClCJ,EAAYI,kBAAkB,2BAC9BC,EAAqBL,EAAa,2BAClCK,EAAqBJ,EAAiB,6BAEtCA,EAAgBG,kBAAkB,IAClCJ,EAAYI,kBAAkB,IAC9BC,EAAqBL,EAAa,IAClCK,EAAqBJ,EAAiB,KApBrCC,EAActgE,KAAKogE,EAAY/2D,QAIhC+2D,EAAYI,kBAAkB,IAC9BC,EAAqBL,EAAa,MAJlCA,EAAYI,kBAAkB,uIAC9BC,EAAqBL,EAAa,uIAuB1C,CAEA,SAASK,EAAqBC,EAAc/yB,GACxC,IAAIgzB,EAAkBD,EAAaE,cAAct1B,cAAc,qBAC3Du1B,EAAcF,EAAgBt4D,aAAa,oBAG3Cs4D,EAAgBhC,UADhBkC,GAA0B,IAAXlzB,EACakzB,EAGAlzB,CAEpC,CAEIyyB,GACAA,EAAYx2D,iBAAiB,QAAS22D,GAGtCF,GACAA,EAAgBz2D,iBAAiB,QAAS22D,GAI1B1mC,EAAY/K,iBAAiB,uBAErC3hB,SAAQ,SAAA2zD,GAChBA,EAAMl3D,iBAAiB,SAAS,SAAUowB,GACtC,IAAM/P,EAAQ+P,EAAMruB,OACdo1D,EAAa92C,EAAM5gB,MAAMsJ,QAAQ,MAAO,IAG1CouD,EAAW97D,OAAS,KACP87D,EAAWxuD,UAAU,EAAG,4DAAGyuD,CAAA,eAGxCD,EAAW97D,QAAU,KAErBglB,EAAM5gB,MAAQ03D,EAAWpuD,QAAQ,6BAA6B,SAAUs6C,EAAGgU,EAAWC,EAAYC,GAC9F,IAAIC,EAAkB,GAMtB,OAJIH,IAAWG,GAAmB,GAAJp0D,OAAOi0D,IACjCC,IAAYE,GAAmB,IAAJp0D,OAAQk0D,IACnCC,IAAWC,GAAmB,IAAJp0D,OAAQm0D,IAE/BC,CACX,IAER,GACJ,IAGkBvnC,EAAY/K,iBAAiB,YAErC3hB,SAAQ,SAAUk0D,GACxB,IAAMC,EAAYD,EAASh5D,aAAa,aAClCk5D,EAAWF,EAASG,aAAa,YACtBH,EAASG,aAAa,aAGnCH,EAASz3D,iBAAiB,SAAS,YAC1By3D,EAASh4D,MAAMoH,QAAU8wD,EAC1BF,EAASb,kBAAkB,2BACpBc,GAAaD,EAASh4D,MAAMpE,OAASq8D,EAC5CD,EAASb,kBAAkB,yBAADxzD,OAA0Bs0D,EAAS,iBAE7DD,EAASb,kBAAkB,GAEnC,GAER,IAG2Bh6D,SAASsoB,iBAAiB,uCAElC3hB,SAAQ,SAAAk0D,GACvB,IAAMC,EAAY54D,SAAS24D,EAASh5D,aAAa,aAAc,KAAO,IAGhEo5D,EAAYj7D,SAASC,cAAc,SACzCg7D,EAAU96D,UAAUC,IAAI,cACxB66D,EAAUz/C,YAAc,GAAHhV,OAAMs0D,EAAS,yBACpCD,EAASK,sBAAsB,WAAYD,GAG3CJ,EAASz3D,iBAAiB,SAAS,WAC/B,IAAMsqC,EAAYotB,EAAYD,EAASh4D,MAAMpE,OAC7Cw8D,EAAUz/C,YAAc,GAAHhV,OAAMknC,EAAS,yBAChCA,EAAY,EACZutB,EAAU96D,UAAUC,IAAI,eAExB66D,EAAU96D,UAAUy9B,OAAO,cAEnC,GACJ,GACJ,GAKA,CAAA/jC,IAAA,oBAAAgJ,MACA,SAAyBnC,EAASuH,GAC9B,KAAOvH,IAAYA,EAAQP,UAAUgb,SAASlT,IAC1CvH,EAAUA,EAAQ05D,cAEtB,OAAO15D,CACX,GAKA,CAAA7G,IAAA,4BAAAgJ,MACA,WAEI,IAAM2K,EAAMjV,OAAOoI,SAAS0a,KAGtB8/C,EAAY,IAAIC,IAAI5tD,GAG1B,OAAO2tD,EAAU7vD,OAAS6vD,EAAUE,QACxC,GAAC,CAAAxhE,IAAA,qBAAAgJ,MAED,SAA0B1D,GACtB,IAAIm8D,EAASz3D,KAAK03D,4BAEdp8D,IACAm8D,EAAS,GAAH90D,OAAM3C,KAAK03D,4BAA2B,KAAA/0D,OAAIrH,IAGpDq8D,QAAQC,UAAU,KAAM,GAAIH,EAChC,GAAC,CAAAzhE,IAAA,gBAAAgJ,MAEA,SAAqB64D,GAElB,OADkB,IAAI3iC,gBAAgBxgC,OAAOoI,SAASq4B,QACrCtd,IAAIggD,EACzB,IAr+BJxmD,GAAA0b,EAAAvD,EAAA3pB,UAAAwR,GAAAhM,GAAA0nB,EAAAvD,EAAAnkB,GAAAxD,OAAAC,eAAA0nB,EAAA,aAAA5nB,UAAA,IAAA4nB,EAAA,IAAAA,EAAAnY,EAAAhM,EAqKIqtD,EAzJA3B,CAy9BC,CA99BmB,yBCNxB,IAAI37B,EAAMvzB,OAAOhC,UAAUtK,eACvBinD,EAAS,IASb,SAASsb,IAAU,CA4BnB,SAASC,EAAGtiE,EAAI8uB,EAASyzC,GACvBh4D,KAAKvK,GAAKA,EACVuK,KAAKukB,QAAUA,EACfvkB,KAAKg4D,KAAOA,IAAQ,CACtB,CAaA,SAASC,EAAY3mB,EAAS3hB,EAAOl6B,EAAI8uB,EAASyzC,GAChD,GAAkB,mBAAPviE,EACT,MAAM,IAAIqgB,UAAU,mCAGtB,IAAIoiD,EAAW,IAAIH,EAAGtiE,EAAI8uB,GAAW+sB,EAAS0mB,GAC1Cl/B,EAAM0jB,EAASA,EAAS7sB,EAAQA,EAMpC,OAJK2hB,EAAQ6mB,QAAQr/B,GACXwY,EAAQ6mB,QAAQr/B,GAAKrjC,GAC1B67C,EAAQ6mB,QAAQr/B,GAAO,CAACwY,EAAQ6mB,QAAQr/B,GAAMo/B,GADhB5mB,EAAQ6mB,QAAQr/B,GAAKvzB,KAAK2yD,IADlC5mB,EAAQ6mB,QAAQr/B,GAAOo/B,EAAU5mB,EAAQ8mB,gBAI7D9mB,CACT,CASA,SAAS+mB,EAAW/mB,EAASxY,GACI,KAAzBwY,EAAQ8mB,aAAoB9mB,EAAQ6mB,QAAU,IAAIL,SAC5CxmB,EAAQ6mB,QAAQr/B,EAC9B,CASA,SAASw/B,IACPt4D,KAAKm4D,QAAU,IAAIL,EACnB93D,KAAKo4D,aAAe,CACtB,CAzEIv2D,OAAO6O,SACTonD,EAAOj4D,UAAYgC,OAAO6O,OAAO,OAM5B,IAAIonD,GAAS3rC,YAAWqwB,GAAS,IA2ExC8b,EAAaz4D,UAAU04D,WAAa,WAClC,IACIxL,EACAz3D,EAFAkjE,EAAQ,GAIZ,GAA0B,IAAtBx4D,KAAKo4D,aAAoB,OAAOI,EAEpC,IAAKljE,KAASy3D,EAAS/sD,KAAKm4D,QACtB/iC,EAAI/yB,KAAK0qD,EAAQz3D,IAAOkjE,EAAMjzD,KAAKi3C,EAASlnD,EAAKuS,MAAM,GAAKvS,GAGlE,OAAIuM,OAAO42D,sBACFD,EAAM71D,OAAOd,OAAO42D,sBAAsB1L,IAG5CyL,CACT,EASAF,EAAaz4D,UAAU8rD,UAAY,SAAmBh8B,GACpD,IAAImJ,EAAM0jB,EAASA,EAAS7sB,EAAQA,EAChC+rB,EAAW17C,KAAKm4D,QAAQr/B,GAE5B,IAAK4iB,EAAU,MAAO,GACtB,GAAIA,EAASjmD,GAAI,MAAO,CAACimD,EAASjmD,IAElC,IAAK,IAAI+L,EAAI,EAAGyC,EAAIy3C,EAAS9gD,OAAQ89D,EAAK,IAAI59D,MAAMmJ,GAAIzC,EAAIyC,EAAGzC,IAC7Dk3D,EAAGl3D,GAAKk6C,EAASl6C,GAAG/L,GAGtB,OAAOijE,CACT,EASAJ,EAAaz4D,UAAU84D,cAAgB,SAAuBhpC,GAC5D,IAAImJ,EAAM0jB,EAASA,EAAS7sB,EAAQA,EAChCg8B,EAAY3rD,KAAKm4D,QAAQr/B,GAE7B,OAAK6yB,EACDA,EAAUl2D,GAAW,EAClBk2D,EAAU/wD,OAFM,CAGzB,EASA09D,EAAaz4D,UAAU+4D,KAAO,SAAcjpC,EAAOkpC,EAAIC,EAAIC,EAAIC,EAAIC,GACjE,IAAIngC,EAAM0jB,EAASA,EAAS7sB,EAAQA,EAEpC,IAAK3vB,KAAKm4D,QAAQr/B,GAAM,OAAO,EAE/B,IAEIj+B,EACA2G,EAHAmqD,EAAY3rD,KAAKm4D,QAAQr/B,GACzBogC,EAAMv+D,UAAUC,OAIpB,GAAI+wD,EAAUl2D,GAAI,CAGhB,OAFIk2D,EAAUqM,MAAMh4D,KAAKm5D,eAAexpC,EAAOg8B,EAAUl2D,QAAIwF,GAAW,GAEhEi+D,GACN,KAAK,EAAG,OAAOvN,EAAUl2D,GAAG4M,KAAKspD,EAAUpnC,UAAU,EACrD,KAAK,EAAG,OAAOonC,EAAUl2D,GAAG4M,KAAKspD,EAAUpnC,QAASs0C,IAAK,EACzD,KAAK,EAAG,OAAOlN,EAAUl2D,GAAG4M,KAAKspD,EAAUpnC,QAASs0C,EAAIC,IAAK,EAC7D,KAAK,EAAG,OAAOnN,EAAUl2D,GAAG4M,KAAKspD,EAAUpnC,QAASs0C,EAAIC,EAAIC,IAAK,EACjE,KAAK,EAAG,OAAOpN,EAAUl2D,GAAG4M,KAAKspD,EAAUpnC,QAASs0C,EAAIC,EAAIC,EAAIC,IAAK,EACrE,KAAK,EAAG,OAAOrN,EAAUl2D,GAAG4M,KAAKspD,EAAUpnC,QAASs0C,EAAIC,EAAIC,EAAIC,EAAIC,IAAK,EAG3E,IAAKz3D,EAAI,EAAG3G,EAAO,IAAIC,MAAMo+D,EAAK,GAAI13D,EAAI03D,EAAK13D,IAC7C3G,EAAK2G,EAAI,GAAK7G,UAAU6G,GAG1BmqD,EAAUl2D,GAAGuF,MAAM2wD,EAAUpnC,QAAS1pB,EACxC,KAAO,CACL,IACIinB,EADAlnB,EAAS+wD,EAAU/wD,OAGvB,IAAK4G,EAAI,EAAGA,EAAI5G,EAAQ4G,IAGtB,OAFImqD,EAAUnqD,GAAGw2D,MAAMh4D,KAAKm5D,eAAexpC,EAAOg8B,EAAUnqD,GAAG/L,QAAIwF,GAAW,GAEtEi+D,GACN,KAAK,EAAGvN,EAAUnqD,GAAG/L,GAAG4M,KAAKspD,EAAUnqD,GAAG+iB,SAAU,MACpD,KAAK,EAAGonC,EAAUnqD,GAAG/L,GAAG4M,KAAKspD,EAAUnqD,GAAG+iB,QAASs0C,GAAK,MACxD,KAAK,EAAGlN,EAAUnqD,GAAG/L,GAAG4M,KAAKspD,EAAUnqD,GAAG+iB,QAASs0C,EAAIC,GAAK,MAC5D,KAAK,EAAGnN,EAAUnqD,GAAG/L,GAAG4M,KAAKspD,EAAUnqD,GAAG+iB,QAASs0C,EAAIC,EAAIC,GAAK,MAChE,QACE,IAAKl+D,EAAM,IAAKinB,EAAI,EAAGjnB,EAAO,IAAIC,MAAMo+D,EAAK,GAAIp3C,EAAIo3C,EAAKp3C,IACxDjnB,EAAKinB,EAAI,GAAKnnB,UAAUmnB,GAG1B6pC,EAAUnqD,GAAG/L,GAAGuF,MAAM2wD,EAAUnqD,GAAG+iB,QAAS1pB,GAGpD,CAEA,OAAO,CACT,EAWAy9D,EAAaz4D,UAAUy6B,GAAK,SAAY3K,EAAOl6B,EAAI8uB,GACjD,OAAO0zC,EAAYj4D,KAAM2vB,EAAOl6B,EAAI8uB,GAAS,EAC/C,EAWA+zC,EAAaz4D,UAAUm4D,KAAO,SAAcroC,EAAOl6B,EAAI8uB,GACrD,OAAO0zC,EAAYj4D,KAAM2vB,EAAOl6B,EAAI8uB,GAAS,EAC/C,EAYA+zC,EAAaz4D,UAAUs5D,eAAiB,SAAwBxpC,EAAOl6B,EAAI8uB,EAASyzC,GAClF,IAAIl/B,EAAM0jB,EAASA,EAAS7sB,EAAQA,EAEpC,IAAK3vB,KAAKm4D,QAAQr/B,GAAM,OAAO94B,KAC/B,IAAKvK,EAEH,OADA4iE,EAAWr4D,KAAM84B,GACV94B,KAGT,IAAI2rD,EAAY3rD,KAAKm4D,QAAQr/B,GAE7B,GAAI6yB,EAAUl2D,GAEVk2D,EAAUl2D,KAAOA,GACfuiE,IAAQrM,EAAUqM,MAClBzzC,GAAWonC,EAAUpnC,UAAYA,GAEnC8zC,EAAWr4D,KAAM84B,OAEd,CACL,IAAK,IAAIt3B,EAAI,EAAGurD,EAAS,GAAInyD,EAAS+wD,EAAU/wD,OAAQ4G,EAAI5G,EAAQ4G,KAEhEmqD,EAAUnqD,GAAG/L,KAAOA,GACnBuiE,IAASrM,EAAUnqD,GAAGw2D,MACtBzzC,GAAWonC,EAAUnqD,GAAG+iB,UAAYA,IAErCwoC,EAAOxnD,KAAKomD,EAAUnqD,IAOtBurD,EAAOnyD,OAAQoF,KAAKm4D,QAAQr/B,GAAyB,IAAlBi0B,EAAOnyD,OAAemyD,EAAO,GAAKA,EACpEsL,EAAWr4D,KAAM84B,EACxB,CAEA,OAAO94B,IACT,EASAs4D,EAAaz4D,UAAUu5D,mBAAqB,SAA4BzpC,GACtE,IAAImJ,EAUJ,OARInJ,GACFmJ,EAAM0jB,EAASA,EAAS7sB,EAAQA,EAC5B3vB,KAAKm4D,QAAQr/B,IAAMu/B,EAAWr4D,KAAM84B,KAExC94B,KAAKm4D,QAAU,IAAIL,EACnB93D,KAAKo4D,aAAe,GAGfp4D,IACT,EAKAs4D,EAAaz4D,UAAU26B,IAAM89B,EAAaz4D,UAAUs5D,eACpDb,EAAaz4D,UAAUo4D,YAAcK,EAAaz4D,UAAUy6B,GAK5Dg+B,EAAae,SAAW7c,EAKxB8b,EAAaA,aAAeA,EAM1B3jE,EAAOyxB,QAAUkyC,YChTnB,IAAIgB,GAAe,EAanB,SAASC,EAAUC,EAAOC,EAAOC,EAAYC,EAASC,GAEpD,GAAIJ,IAAUC,EACZ,OAAID,EACK,CAAC,CAfG,EAeUA,IAEhB,GAGT,GAAkB,MAAdE,EAAoB,CACtB,IAAIG,EAy9BR,SAA+BC,EAASC,EAASL,GAE/C,IAAIM,EACoB,iBAAfN,EACH,CAAE/1D,MAAO+1D,EAAY9+D,OAAQ,GAC7B8+D,EAAWM,SACbC,EAAiC,iBAAfP,EAA0B,KAAOA,EAAWO,SAK9DC,EAAYJ,EAAQl/D,OACpBu/D,EAAYJ,EAAQn/D,OACxB,GAAwB,IAApBo/D,EAASp/D,SAA8B,OAAbq/D,GAAyC,IAApBA,EAASr/D,QAAe,CAEzE,IAAIw/D,EAAYJ,EAASr2D,MACrB02D,EAAYP,EAAQjyD,MAAM,EAAGuyD,GAC7BE,EAAWR,EAAQjyD,MAAMuyD,GACzBG,EAAiBN,EAAWA,EAASt2D,MAAQ,KAG3C62D,EAAYJ,EAAYD,EAAYD,EACxC,IAAuB,OAAnBK,GAA2BA,IAAmBC,MAG9CA,EAAY,GAAKA,EAAYL,GAAjC,CAGA,IAAIM,EAAYV,EAAQlyD,MAAM,EAAG2yD,GAEjC,IADIE,EAAWX,EAAQlyD,MAAM2yD,MACZF,EAAjB,CAGA,IAAIK,EAAehjE,KAAKE,IAAIuiE,EAAWI,GAGvC,IAFII,EAAYP,EAAUxyD,MAAM,EAAG8yD,OAC/BE,EAAYJ,EAAU5yD,MAAM,EAAG8yD,IAMnC,OAAOG,EAAiBF,EAFRP,EAAUxyD,MAAM8yD,GAChBF,EAAU5yD,MAAM8yD,GACyBL,EATzD,CALA,CAkBA,GAAuB,OAAnBC,GAA2BA,IAAmBH,EAAlD,CAGA,IAAIW,EAASX,EAETM,GADAD,EAAYV,EAAQlyD,MAAM,EAAGkzD,GAClBhB,EAAQlyD,MAAMkzD,IAC7B,GAAIN,IAAcJ,EAAlB,CAGA,IAAIW,EAAerjE,KAAKE,IAAIqiE,EAAYa,EAAQZ,EAAYY,GAG5D,IAFIE,EAAYX,EAASzyD,MAAMyyD,EAAS1/D,OAASogE,OAC7CE,EAAYR,EAAS7yD,MAAM6yD,EAAS9/D,OAASogE,IAMjD,OAAOF,EAAiBT,EAFRC,EAASzyD,MAAM,EAAGyyD,EAAS1/D,OAASogE,GACpCN,EAAS7yD,MAAM,EAAG6yD,EAAS9/D,OAASogE,GACKC,EATzD,CANA,CAiBJ,CACA,GAAIjB,EAASp/D,OAAS,GAAKq/D,GAAgC,IAApBA,EAASr/D,OAAc,CAG1D,IAAIggE,EAAYd,EAAQjyD,MAAM,EAAGmyD,EAASr2D,OACtCs3D,EAAYnB,EAAQjyD,MAAMmyD,EAASr2D,MAAQq2D,EAASp/D,QAGxD,KAAIu/D,GAFAQ,EAAeC,EAAUhgE,SACzBogE,EAAeC,EAAUrgE,SAC7B,CAGA,IAAIigE,EAAYd,EAAQlyD,MAAM,EAAG8yD,GAC7BO,EAAYnB,EAAQlyD,MAAMsyD,EAAYa,GAC1C,GAAIJ,IAAcC,GAAaI,IAAcC,EAK7C,OAAOJ,EAAiBF,EAFRd,EAAQjyD,MAAM8yD,EAAcT,EAAYc,GACxCjB,EAAQlyD,MAAM8yD,EAAcR,EAAYa,GACCC,EARzD,CAUJ,CAEA,OAAO,IACT,CAhjCmBE,CAAsB3B,EAAOC,EAAOC,GACnD,GAAIG,EACF,OAAOA,CAEX,CAGA,IAAIuB,EAAeC,EAAkB7B,EAAOC,GACxC6B,EAAe9B,EAAMtxD,UAAU,EAAGkzD,GAKtCA,EAAeG,EAJf/B,EAAQA,EAAMtxD,UAAUkzD,GACxB3B,EAAQA,EAAMvxD,UAAUkzD,IAIxB,IAAII,EAAehC,EAAMtxD,UAAUsxD,EAAM5+D,OAASwgE,GAK9CK,EAuBN,SAAuBjC,EAAOC,GAC5B,IAAIgC,EAEJ,IAAKjC,EAEH,MAAO,CAAC,CArEM,EAqEQC,IAGxB,IAAKA,EAEH,MAAO,CAAC,CAACH,EAAaE,IAGxB,IAAIkC,EAAWlC,EAAM5+D,OAAS6+D,EAAM7+D,OAAS4+D,EAAQC,EACjDkC,EAAYnC,EAAM5+D,OAAS6+D,EAAM7+D,OAAS6+D,EAAQD,EAClDh4D,EAAIk6D,EAASxjE,QAAQyjE,GACzB,IAAW,IAAPn6D,EAWF,OATAi6D,EAAQ,CACN,CAnFY,EAmFEC,EAASxzD,UAAU,EAAG1G,IACpC,CAnFW,EAmFEm6D,GACb,CArFY,EAqFED,EAASxzD,UAAU1G,EAAIm6D,EAAU/gE,UAG7C4+D,EAAM5+D,OAAS6+D,EAAM7+D,SACvB6gE,EAAM,GAAG,GAAKA,EAAM,GAAG,GAAKnC,GAEvBmC,EAGT,GAAyB,IAArBE,EAAU/gE,OAGZ,MAAO,CACL,CAAC0+D,EAAaE,GACd,CAnGY,EAmGEC,IAKlB,IAAImC,EA2SN,SAAyBpC,EAAOC,GAC9B,IAAIiC,EAAWlC,EAAM5+D,OAAS6+D,EAAM7+D,OAAS4+D,EAAQC,EACjDkC,EAAYnC,EAAM5+D,OAAS6+D,EAAM7+D,OAAS6+D,EAAQD,EACtD,GAAIkC,EAAS9gE,OAAS,GAAwB,EAAnB+gE,EAAU/gE,OAAa8gE,EAAS9gE,OACzD,OAAO,KAeT,SAASihE,EAAiBH,EAAUC,EAAWn6D,GAM7C,IAJA,IAGIs6D,EAAiBC,EAAiBC,EAAkBC,EAHpDC,EAAOR,EAASxzD,UAAU1G,EAAGA,EAAI7J,KAAK2B,MAAMoiE,EAAS9gE,OAAS,IAC9DknB,GAAK,EACLq6C,EAAc,IAE+B,KAAzCr6C,EAAI65C,EAAUzjE,QAAQgkE,EAAMp6C,EAAI,KAAY,CAClD,IAAI64C,EAAeU,EACjBK,EAASxzD,UAAU1G,GACnBm6D,EAAUzzD,UAAU4Z,IAElBk5C,EAAeO,EACjBG,EAASxzD,UAAU,EAAG1G,GACtBm6D,EAAUzzD,UAAU,EAAG4Z,IAErBq6C,EAAYvhE,OAASogE,EAAeL,IACtCwB,EACER,EAAUzzD,UAAU4Z,EAAIk5C,EAAcl5C,GACtC65C,EAAUzzD,UAAU4Z,EAAGA,EAAI64C,GAC7BmB,EAAkBJ,EAASxzD,UAAU,EAAG1G,EAAIw5D,GAC5Ce,EAAkBL,EAASxzD,UAAU1G,EAAIm5D,GACzCqB,EAAmBL,EAAUzzD,UAAU,EAAG4Z,EAAIk5C,GAC9CiB,EAAmBN,EAAUzzD,UAAU4Z,EAAI64C,GAE/C,CACA,OAAyB,EAArBwB,EAAYvhE,QAAc8gE,EAAS9gE,OAC9B,CACLkhE,EACAC,EACAC,EACAC,EACAE,GAGK,IAEX,CAGA,IAWIP,EAaAQ,EAASC,EAASC,EAASC,EAxB3BC,EAAMX,EACRH,EACAC,EACAhkE,KAAKopB,KAAK26C,EAAS9gE,OAAS,IAG1B6hE,EAAMZ,EACRH,EACAC,EACAhkE,KAAKopB,KAAK26C,EAAS9gE,OAAS,IAG9B,IAAK4hE,IAAQC,EACX,OAAO,KAOPb,EANUa,EAEAD,GAILA,EAAI,GAAG5hE,OAAS6hE,EAAI,GAAG7hE,OAAS4hE,EAHhCC,EAFAD,EAUHhD,EAAM5+D,OAAS6+D,EAAM7+D,QACvBwhE,EAAUR,EAAG,GACbS,EAAUT,EAAG,GACbU,EAAUV,EAAG,GACbW,EAAUX,EAAG,KAEbU,EAAUV,EAAG,GACbW,EAAUX,EAAG,GACbQ,EAAUR,EAAG,GACbS,EAAUT,EAAG,IAEf,IAAIc,EAAad,EAAG,GACpB,MAAO,CAACQ,EAASC,EAASC,EAASC,EAASG,EAC9C,CA3YWC,CAAgBnD,EAAOC,GAChC,GAAImC,EAAI,CAEN,IAAIQ,EAAUR,EAAG,GACbS,EAAUT,EAAG,GACbU,EAAUV,EAAG,GACbW,EAAUX,EAAG,GACbc,EAAad,EAAG,GAEhBgB,EAAUrD,EAAU6C,EAASE,GAC7BO,EAAUtD,EAAU8C,EAASE,GAEjC,OAAOK,EAAQj6D,OAAO,CAAC,CAnHV,EAmHuB+5D,IAAcG,EACpD,CAEA,OAYF,SAAsBrD,EAAOC,GAW3B,IATA,IAAIqD,EAAetD,EAAM5+D,OACrBmiE,EAAetD,EAAM7+D,OACrBoiE,EAAQrlE,KAAKopB,MAAM+7C,EAAeC,GAAgB,GAClDE,EAAWD,EACXE,EAAW,EAAIF,EACfG,EAAK,IAAIriE,MAAMoiE,GACfE,EAAK,IAAItiE,MAAMoiE,GAGV56B,EAAI,EAAGA,EAAI46B,EAAU56B,IAC5B66B,EAAG76B,IAAM,EACT86B,EAAG96B,IAAM,EAEX66B,EAAGF,EAAW,GAAK,EACnBG,EAAGH,EAAW,GAAK,EAWnB,IAVA,IAAIlxD,EAAQ+wD,EAAeC,EAGvB58D,EAAQ4L,EAAQ,GAAM,EAGtBsxD,EAAU,EACVC,EAAQ,EACRC,EAAU,EACVC,EAAQ,EACH/jD,EAAI,EAAGA,EAAIujD,EAAOvjD,IAAK,CAE9B,IAAK,IAAIgkD,GAAMhkD,EAAI4jD,EAASI,GAAMhkD,EAAI6jD,EAAOG,GAAM,EAAG,CASpD,IARA,IAAIC,EAAYT,EAAWQ,EAOvBE,GAJFC,EADEH,KAAQhkD,GAAMgkD,IAAOhkD,GAAK0jD,EAAGO,EAAY,GAAKP,EAAGO,EAAY,GAC1DP,EAAGO,EAAY,GAEfP,EAAGO,EAAY,GAAK,GAEbD,EAEZG,EAAKd,GACLa,EAAKZ,GACLvD,EAAMtjE,OAAO0nE,KAAQnE,EAAMvjE,OAAOynE,IAElCC,IACAD,IAGF,GADAR,EAAGO,GAAaE,EACZA,EAAKd,EAEPQ,GAAS,OACJ,GAAIK,EAAKZ,EAEdM,GAAW,OACN,GAAIl9D,EAAO,CAEhB,IADI09D,EAAYZ,EAAWlxD,EAAQ0xD,IAClB,GAAKI,EAAYX,IAA+B,IAAnBE,EAAGS,GAG/C,GAAID,IADAE,EAAKhB,EAAeM,EAAGS,IAGzB,OAAOE,EAAkBvE,EAAOC,EAAOmE,EAAID,EAGjD,CACF,CAGA,IAAK,IAAIK,GAAMvkD,EAAI8jD,EAASS,GAAMvkD,EAAI+jD,EAAOQ,GAAM,EAAG,CASpD,IARA,IACIF,EADAD,EAAYZ,EAAWe,EAOvBC,GAJFH,EADEE,KAAQvkD,GAAMukD,IAAOvkD,GAAK2jD,EAAGS,EAAY,GAAKT,EAAGS,EAAY,GAC1DT,EAAGS,EAAY,GAEfT,EAAGS,EAAY,GAAK,GAEbG,EAEZF,EAAKhB,GACLmB,EAAKlB,GACLvD,EAAMtjE,OAAO4mE,EAAegB,EAAK,KAC/BrE,EAAMvjE,OAAO6mE,EAAekB,EAAK,IAEnCH,IACAG,IAGF,GADAb,EAAGS,GAAaC,EACZA,EAAKhB,EAEPU,GAAS,OACJ,GAAIS,EAAKlB,EAEdQ,GAAW,OACN,IAAKp9D,EAAO,CAEjB,IADIu9D,EAAYT,EAAWlxD,EAAQiyD,IAClB,GAAKN,EAAYR,IAA+B,IAAnBC,EAAGO,GAAmB,CAClE,IAAIE,EACAD,EAAKV,GADLW,EAAKT,EAAGO,IACaA,EAGzB,GAAIE,IADJE,EAAKhB,EAAegB,GAGlB,OAAOC,EAAkBvE,EAAOC,EAAOmE,EAAID,EAE/C,CACF,CACF,CACF,CAGA,MAAO,CACL,CAACrE,EAAaE,GACd,CAlPc,EAkPAC,GAElB,CA7HSyE,CAAa1E,EAAOC,EAC7B,CA/Ec0E,CAJZ3E,EAAQA,EAAMtxD,UAAU,EAAGsxD,EAAM5+D,OAASwgE,GAC1C3B,EAAQA,EAAMvxD,UAAU,EAAGuxD,EAAM7+D,OAASwgE,IAgB1C,OAVIE,GACFG,EAAMhZ,QAAQ,CA5CD,EA4Cc6Y,IAEzBE,GACFC,EAAMl2D,KAAK,CA/CE,EA+CWi2D,IAE1B4C,EAAkB3C,EAAO7B,GACrBD,GAscN,SAA8B8B,GAC5B,IAAI4C,GAAU,EACVC,EAAa,GACbC,EAAmB,EAEnBC,EAAe,KAEfC,EAAU,EAEVC,EAAqB,EACrBC,EAAoB,EAEpBC,EAAqB,EACrBC,EAAoB,EACxB,KAAOJ,EAAUhD,EAAM7gE,QAtgBR,GAugBT6gE,EAAMgD,GAAS,IAEjBH,EAAWC,KAAsBE,EACjCC,EAAqBE,EACrBD,EAAoBE,EACpBD,EAAqB,EACrBC,EAAoB,EACpBL,EAAe/C,EAAMgD,GAAS,KA/gBlB,GAkhBRhD,EAAMgD,GAAS,GACjBG,GAAsBnD,EAAMgD,GAAS,GAAG7jE,OAExCikE,GAAqBpD,EAAMgD,GAAS,GAAG7jE,OAKvC4jE,GACAA,EAAa5jE,QACXjD,KAAKC,IAAI8mE,EAAoBC,IAC/BH,EAAa5jE,QAAUjD,KAAKC,IAAIgnE,EAAoBC,KAGpDpD,EAAMn3C,OAAOg6C,EAAWC,EAAmB,GAAI,EAAG,CAChDjF,EACAkF,IAGF/C,EAAM6C,EAAWC,EAAmB,GAAK,GAAG,GAriBlC,EAuiBVA,IAGAE,IADAF,EAC6B,EAAID,EAAWC,EAAmB,IAAM,EACrEG,EAAqB,EACrBC,EAAoB,EACpBC,EAAqB,EACrBC,EAAoB,EACpBL,EAAe,KACfH,GAAU,IAGdI,IAIEJ,GACFD,EAAkB3C,IA4EtB,SAAsCA,GAWpC,SAASqD,EAA2BC,EAAKC,GACvC,IAAKD,IAAQC,EAEX,OAAO,EAQT,IAAIC,EAAQF,EAAI7oE,OAAO6oE,EAAInkE,OAAS,GAChCskE,EAAQF,EAAI9oE,OAAO,GACnBipE,EAAmBF,EAAMpmE,MAAMumE,GAC/BC,EAAmBH,EAAMrmE,MAAMumE,GAC/BE,EAAcH,GAAoBF,EAAMpmE,MAAM0mE,GAC9CC,EAAcH,GAAoBH,EAAMrmE,MAAM0mE,GAC9CE,EAAaH,GAAeL,EAAMpmE,MAAM6mE,GACxCC,EAAaH,GAAeN,EAAMrmE,MAAM6mE,GACxCE,EAAaH,GAAcV,EAAIlmE,MAAMgnE,GACrCC,EAAaH,GAAcX,EAAInmE,MAAMknE,GAEzC,OAAIH,GAAcE,EAET,EACEL,GAAcE,EAEhB,EACER,IAAqBG,GAAeE,EAEtC,EACEF,GAAeE,EAEjB,EACEL,GAAoBE,EAEtB,EAEF,CACT,CAEA,IAAIZ,EAAU,EAEd,KAAOA,EAAUhD,EAAM7gE,OAAS,GAAG,CACjC,GA1rBa,GA2rBX6gE,EAAMgD,EAAU,GAAG,IA3rBR,GA4rBXhD,EAAMgD,EAAU,GAAG,GACnB,CAEA,IAAIuB,EAAYvE,EAAMgD,EAAU,GAAG,GAC/BwB,EAAOxE,EAAMgD,GAAS,GACtByB,EAAYzE,EAAMgD,EAAU,GAAG,GAG/B0B,EAAe5E,EAAkByE,EAAWC,GAChD,GAAIE,EAAc,CAChB,IAAIC,EAAeH,EAAK/3D,UAAU+3D,EAAKrlE,OAASulE,GAChDH,EAAYA,EAAU93D,UAAU,EAAG83D,EAAUplE,OAASulE,GACtDF,EAAOG,EAAeH,EAAK/3D,UAAU,EAAG+3D,EAAKrlE,OAASulE,GACtDD,EAAYE,EAAeF,CAC7B,CASA,IANA,IAAIG,EAAgBL,EAChBM,EAAWL,EACXM,EAAgBL,EAChBM,EACF1B,EAA2BkB,EAAWC,GACtCnB,EAA2BmB,EAAMC,GAC5BD,EAAK/pE,OAAO,KAAOgqE,EAAUhqE,OAAO,IAAI,CAC7C8pE,GAAaC,EAAK/pE,OAAO,GACzB+pE,EAAOA,EAAK/3D,UAAU,GAAKg4D,EAAUhqE,OAAO,GAC5CgqE,EAAYA,EAAUh4D,UAAU,GAChC,IAAIu4D,EACF3B,EAA2BkB,EAAWC,GACtCnB,EAA2BmB,EAAMC,GAE/BO,GAASD,IACXA,EAAYC,EACZJ,EAAgBL,EAChBM,EAAWL,EACXM,EAAgBL,EAEpB,CAEIzE,EAAMgD,EAAU,GAAG,IAAM4B,IAEvBA,EACF5E,EAAMgD,EAAU,GAAG,GAAK4B,GAExB5E,EAAMn3C,OAAOm6C,EAAU,EAAG,GAC1BA,KAEFhD,EAAMgD,GAAS,GAAK6B,EAChBC,EACF9E,EAAMgD,EAAU,GAAG,GAAK8B,GAExB9E,EAAMn3C,OAAOm6C,EAAU,EAAG,GAC1BA,KAGN,CACAA,GACF,CACF,EA7LEiC,CAA6BjF,GAQ7BgD,EAAU,EACV,KAAOA,EAAUhD,EAAM7gE,QAAQ,CAC7B,GACE6gE,EAAMgD,EAAU,GAAG,IAAMnF,GArkBb,GAskBZmC,EAAMgD,GAAS,GACf,CACA,IAAIkC,EAAWlF,EAAMgD,EAAU,GAAG,GAC9BmC,EAAYnF,EAAMgD,GAAS,GAC3BoC,EAAkBC,EAAoBH,EAAUC,GAChDG,EAAkBD,EAAoBF,EAAWD,GACjDE,GAAmBE,GAEnBF,GAAmBF,EAAS/lE,OAAS,GACrCimE,GAAmBD,EAAUhmE,OAAS,KAGtC6gE,EAAMn3C,OAAOm6C,EAAS,EAAG,CAjlBlB,EAmlBLmC,EAAU14D,UAAU,EAAG24D,KAEzBpF,EAAMgD,EAAU,GAAG,GAAKkC,EAASz4D,UAC/B,EACAy4D,EAAS/lE,OAASimE,GAEpBpF,EAAMgD,EAAU,GAAG,GAAKmC,EAAU14D,UAAU24D,GAC5CpC,MAIAsC,GAAmBJ,EAAS/lE,OAAS,GACrCmmE,GAAmBH,EAAUhmE,OAAS,KAItC6gE,EAAMn3C,OAAOm6C,EAAS,EAAG,CAnmBlB,EAqmBLkC,EAASz4D,UAAU,EAAG64D,KAExBtF,EAAMgD,EAAU,GAAG,GAxmBX,EAymBRhD,EAAMgD,EAAU,GAAG,GAAKmC,EAAU14D,UAChC,EACA04D,EAAUhmE,OAASmmE,GAErBtF,EAAMgD,EAAU,GAAG,GAAKnF,EACxBmC,EAAMgD,EAAU,GAAG,GAAKkC,EAASz4D,UAAU64D,GAC3CtC,KAGJA,GACF,CACAA,GACF,CACF,CAlkBIuC,CAAqBvF,GAEhBA,CACT,CAwMA,SAASsC,EAAkBvE,EAAOC,EAAOn3B,EAAGhpB,GAC1C,IAAI2nD,EAASzH,EAAMtxD,UAAU,EAAGo6B,GAC5B4+B,EAASzH,EAAMvxD,UAAU,EAAGoR,GAC5B6nD,EAAS3H,EAAMtxD,UAAUo6B,GACzB8+B,EAAS3H,EAAMvxD,UAAUoR,GAGzBmiD,EAAQlC,EAAU0H,EAAQC,GAC1BG,EAAS9H,EAAU4H,EAAQC,GAE/B,OAAO3F,EAAM94D,OAAO0+D,EACtB,CASA,SAAShG,EAAkB7B,EAAOC,GAEhC,IAAKD,IAAUC,GAASD,EAAMtjE,OAAO,KAAOujE,EAAMvjE,OAAO,GACvD,OAAO,EAQT,IAJA,IAAIorE,EAAa,EACbC,EAAa5pE,KAAKE,IAAI2hE,EAAM5+D,OAAQ6+D,EAAM7+D,QAC1C4mE,EAAaD,EACbE,EAAe,EACZH,EAAaE,GAEhBhI,EAAMtxD,UAAUu5D,EAAcD,IAC9B/H,EAAMvxD,UAAUu5D,EAAcD,GAG9BC,EADAH,EAAaE,EAGbD,EAAaC,EAEfA,EAAa7pE,KAAK2B,OAAOioE,EAAaD,GAAc,EAAIA,GAO1D,OAJII,EAAwBlI,EAAMt6C,WAAWsiD,EAAa,KACxDA,IAGKA,CACT,CAUA,SAASV,EAAoBtH,EAAOC,GAElC,IAAIqD,EAAetD,EAAM5+D,OACrBmiE,EAAetD,EAAM7+D,OAEzB,GAAoB,GAAhBkiE,GAAqC,GAAhBC,EACvB,OAAO,EAGLD,EAAeC,EACjBvD,EAAQA,EAAMtxD,UAAU40D,EAAeC,GAC9BD,EAAeC,IACxBtD,EAAQA,EAAMvxD,UAAU,EAAG40D,IAE7B,IAAI6E,EAAchqE,KAAKE,IAAIilE,EAAcC,GAEzC,GAAIvD,GAASC,EACX,OAAOkI,EAQT,IAFA,IAAIC,EAAO,EACPhnE,EAAS,IACA,CACX,IAAI2gD,EAAUie,EAAMtxD,UAAUy5D,EAAc/mE,GACxCinE,EAAQpI,EAAMvhE,QAAQqjD,GAC1B,IAAc,GAAVsmB,EACF,OAAOD,EAEThnE,GAAUinE,EAEC,GAATA,GACArI,EAAMtxD,UAAUy5D,EAAc/mE,IAAW6+D,EAAMvxD,UAAU,EAAGtN,KAE5DgnE,EAAOhnE,EACPA,IAEJ,CACF,CAQA,SAAS2gE,EAAkB/B,EAAOC,GAEhC,IAAKD,IAAUC,GAASD,EAAM3xD,OAAO,KAAO4xD,EAAM5xD,OAAO,GACvD,OAAO,EAQT,IAJA,IAAIy5D,EAAa,EACbC,EAAa5pE,KAAKE,IAAI2hE,EAAM5+D,OAAQ6+D,EAAM7+D,QAC1C4mE,EAAaD,EACbO,EAAa,EACVR,EAAaE,GAEhBhI,EAAMtxD,UAAUsxD,EAAM5+D,OAAS4mE,EAAYhI,EAAM5+D,OAASknE,IAC1DrI,EAAMvxD,UAAUuxD,EAAM7+D,OAAS4mE,EAAY/H,EAAM7+D,OAASknE,GAG1DA,EADAR,EAAaE,EAGbD,EAAaC,EAEfA,EAAa7pE,KAAK2B,OAAOioE,EAAaD,GAAc,EAAIA,GAO1D,OAJIS,EAAsBvI,EAAMt6C,WAAWs6C,EAAM5+D,OAAS4mE,KACxDA,IAGKA,CACT,CAiPA,IAAIpC,EAAwB,eACxBG,EAAmB,KACnBG,EAAkB,SAClBG,EAAqB,WACrBE,EAAuB,cAmI3B,SAAS3B,EAAkB3C,EAAOuG,GAChCvG,EAAMl2D,KAAK,CA/vBI,EA+vBS,KAOxB,IANA,IAKI61D,EALAqD,EAAU,EACVwD,EAAe,EACfC,EAAe,EACfC,EAAc,GACdC,EAAc,GAEX3D,EAAUhD,EAAM7gE,QACrB,GAAI6jE,EAAUhD,EAAM7gE,OAAS,IAAM6gE,EAAMgD,GAAS,GAChDhD,EAAMn3C,OAAOm6C,EAAS,QAGxB,OAAQhD,EAAMgD,GAAS,IACrB,KA7wBY,EA8wBVyD,IACAE,GAAe3G,EAAMgD,GAAS,GAC9BA,IACA,MACF,KAAKnF,EACH2I,IACAE,GAAe1G,EAAMgD,GAAS,GAC9BA,IACA,MACF,KAtxBW,EAuxBT,IAAI4D,EAAoB5D,EAAUyD,EAAeD,EAAe,EAChE,GAAID,EAAa,CAWf,GACEK,GAAqB,GACrBC,EAAqB7G,EAAM4G,GAAmB,IAC9C,CACA,IAAIE,EAAQ9G,EAAM4G,GAAmB,GAAGx6D,OAAO,GAO/C,GANA4zD,EAAM4G,GAAmB,GAAK5G,EAAM4G,GAAmB,GAAGx6D,MACxD,GACC,GAEHs6D,EAAcI,EAAQJ,EACtBC,EAAcG,EAAQH,GACjB3G,EAAM4G,GAAmB,GAAI,CAEhC5G,EAAMn3C,OAAO+9C,EAAmB,GAChC5D,IACA,IAAI7oD,EAAIysD,EAAoB,EACxB5G,EAAM7lD,IApzBN,IAozBY6lD,EAAM7lD,GAAG,KACvBssD,IACAE,EAAc3G,EAAM7lD,GAAG,GAAKwsD,EAC5BxsD,KAEE6lD,EAAM7lD,IAAM6lD,EAAM7lD,GAAG,KAAO0jD,IAC9B2I,IACAE,EAAc1G,EAAM7lD,GAAG,GAAKusD,EAC5BvsD,KAEFysD,EAAoBzsD,CACtB,CACF,CACA,GAAI4sD,EAAqB/G,EAAMgD,GAAS,IAAK,CACvC8D,EAAQ9G,EAAMgD,GAAS,GAAGvoE,OAAO,GACrCulE,EAAMgD,GAAS,GAAKhD,EAAMgD,GAAS,GAAG52D,MAAM,GAC5Cs6D,GAAeI,EACfH,GAAeG,CACjB,CACF,CACA,GAAI9D,EAAUhD,EAAM7gE,OAAS,IAAM6gE,EAAMgD,GAAS,GAAI,CAEpDhD,EAAMn3C,OAAOm6C,EAAS,GACtB,KACF,CACA,GAAI0D,EAAYvnE,OAAS,GAAKwnE,EAAYxnE,OAAS,EAAG,CAEhDunE,EAAYvnE,OAAS,GAAKwnE,EAAYxnE,OAAS,IAG5B,KADrBwgE,EAAeC,EAAkB+G,EAAaD,MAExCE,GAAqB,EACvB5G,EAAM4G,GAAmB,IAAMD,EAAYl6D,UACzC,EACAkzD,IAGFK,EAAMn3C,OAAO,EAAG,EAAG,CAx1BlB,EA01BC89C,EAAYl6D,UAAU,EAAGkzD,KAE3BqD,KAEF2D,EAAcA,EAAYl6D,UAAUkzD,GACpC+G,EAAcA,EAAYj6D,UAAUkzD,IAIjB,KADrBA,EAAeG,EAAkB6G,EAAaD,MAE5C1G,EAAMgD,GAAS,GACb2D,EAAYl6D,UAAUk6D,EAAYxnE,OAASwgE,GAC3CK,EAAMgD,GAAS,GACjB2D,EAAcA,EAAYl6D,UACxB,EACAk6D,EAAYxnE,OAASwgE,GAEvB+G,EAAcA,EAAYj6D,UACxB,EACAi6D,EAAYvnE,OAASwgE,KAK3B,IAAIx5C,EAAIsgD,EAAeD,EACI,IAAvBE,EAAYvnE,QAAuC,IAAvBwnE,EAAYxnE,QAC1C6gE,EAAMn3C,OAAOm6C,EAAU78C,EAAGA,GAC1B68C,GAAoB78C,GACY,IAAvBugD,EAAYvnE,QACrB6gE,EAAMn3C,OAAOm6C,EAAU78C,EAAGA,EAAG,CAx3BvB,EAw3BqCwgD,IAC3C3D,EAAUA,EAAU78C,EAAI,GACQ,IAAvBwgD,EAAYxnE,QACrB6gE,EAAMn3C,OAAOm6C,EAAU78C,EAAGA,EAAG,CAAC03C,EAAa6I,IAC3C1D,EAAUA,EAAU78C,EAAI,IAExB65C,EAAMn3C,OACJm6C,EAAU78C,EACVA,EACA,CAAC03C,EAAa6I,GACd,CAl4BI,EAk4BUC,IAEhB3D,EAAUA,EAAU78C,EAAI,EAE5B,CACgB,IAAZ68C,GAt4BK,IAs4BYhD,EAAMgD,EAAU,GAAG,IAEtChD,EAAMgD,EAAU,GAAG,IAAMhD,EAAMgD,GAAS,GACxChD,EAAMn3C,OAAOm6C,EAAS,IAEtBA,IAEFyD,EAAe,EACfD,EAAe,EACfE,EAAc,GACdC,EAAc,GAIe,KAA/B3G,EAAMA,EAAM7gE,OAAS,GAAG,IAC1B6gE,EAAMt4D,MAMR,IAAIk7D,GAAU,EAGd,IAFAI,EAAU,EAEHA,EAAUhD,EAAM7gE,OAAS,GA95BjB,IAg6BX6gE,EAAMgD,EAAU,GAAG,IAh6BR,IAi6BXhD,EAAMgD,EAAU,GAAG,KAIjBhD,EAAMgD,GAAS,GAAGv2D,UAChBuzD,EAAMgD,GAAS,GAAG7jE,OAAS6gE,EAAMgD,EAAU,GAAG,GAAG7jE,UAC7C6gE,EAAMgD,EAAU,GAAG,IAGzBhD,EAAMgD,GAAS,GACbhD,EAAMgD,EAAU,GAAG,GACnBhD,EAAMgD,GAAS,GAAGv2D,UAChB,EACAuzD,EAAMgD,GAAS,GAAG7jE,OAAS6gE,EAAMgD,EAAU,GAAG,GAAG7jE,QAErD6gE,EAAMgD,EAAU,GAAG,GAAKhD,EAAMgD,EAAU,GAAG,GAAKhD,EAAMgD,EAAU,GAAG,GACnEhD,EAAMn3C,OAAOm6C,EAAU,EAAG,GAC1BJ,GAAU,GAEV5C,EAAMgD,GAAS,GAAGv2D,UAAU,EAAGuzD,EAAMgD,EAAU,GAAG,GAAG7jE,SACrD6gE,EAAMgD,EAAU,GAAG,KAGnBhD,EAAMgD,EAAU,GAAG,IAAMhD,EAAMgD,EAAU,GAAG,GAC5ChD,EAAMgD,GAAS,GACbhD,EAAMgD,GAAS,GAAGv2D,UAAUuzD,EAAMgD,EAAU,GAAG,GAAG7jE,QAClD6gE,EAAMgD,EAAU,GAAG,GACrBhD,EAAMn3C,OAAOm6C,EAAU,EAAG,GAC1BJ,GAAU,IAGdI,IAGEJ,GACFD,EAAkB3C,EAAOuG,EAE7B,CAEA,SAASN,EAAwBe,GAC/B,OAAOA,GAAY,OAAUA,GAAY,KAC3C,CAEA,SAASV,EAAsBU,GAC7B,OAAOA,GAAY,OAAUA,GAAY,KAC3C,CAEA,SAASD,EAAqBxxD,GAC5B,OAAO+wD,EAAsB/wD,EAAIkO,WAAW,GAC9C,CAEA,SAASojD,EAAqBtxD,GAC5B,OAAO0wD,EAAwB1wD,EAAIkO,WAAWlO,EAAIpW,OAAS,GAC7D,CAYA,SAASkgE,EAAiB4H,EAAQC,EAAWC,EAAWC,GACtD,OAAIP,EAAqBI,IAAWF,EAAqBK,GAChD,KAZX,SAA6BC,GAE3B,IADA,IAAI14B,EAAM,GACD5oC,EAAI,EAAGA,EAAIshE,EAAOloE,OAAQ4G,IAC7BshE,EAAOthE,GAAG,GAAG5G,OAAS,GACxBwvC,EAAI7kC,KAAKu9D,EAAOthE,IAGpB,OAAO4oC,CACT,CAMS24B,CAAoB,CACzB,CAv+Ba,EAu+BAL,GACb,CAACpJ,EAAaqJ,GACd,CA1+Bc,EA0+BAC,GACd,CA1+Ba,EA0+BAC,IAEjB,CA2FA,SAASrpE,EAAKggE,EAAOC,EAAOC,EAAYC,GAGtC,OAAOJ,EAAUC,EAAOC,EAAOC,EAAYC,GAAS,EACtD,CAEAngE,EAAKwpE,OA9kCa,EA+kClBxpE,EAAKypE,OAAS3J,EACd9/D,EAAK0pE,MA/kCY,EAilCjBvuE,EAAOyxB,QAAU5sB,6BCvmCjB,IAGI2pE,EAAiB,4BAGjBC,EAAmB,iBAGnBC,EAAU,qBAEVC,EAAU,mBACVC,EAAU,gBAEVC,EAAU,oBACVC,EAAS,6BACTC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBACZC,EAAa,mBACbC,EAAY,kBACZC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBACZC,EAAa,mBAEbC,EAAiB,uBACjBC,EAAc,oBACdC,EAAa,wBACbC,EAAa,wBACbC,EAAU,qBACVC,EAAW,sBACXC,EAAW,sBACXC,EAAW,sBACXC,EAAkB,6BAClBC,EAAY,uBACZC,EAAY,uBASZC,EAAU,OAGVC,EAAe,8BAGfC,EAAW,mBAGXC,EAAgB,CAAC,EACrBA,EAAc5B,GAAW4B,EA7CV,kBA8CfA,EAAcd,GAAkBc,EAAcb,GAC9Ca,EAAc3B,GAAW2B,EAAc1B,GACvC0B,EAAcZ,GAAcY,EAAcX,GAC1CW,EAAcV,GAAWU,EAAcT,GACvCS,EAAcR,GAAYQ,EAAcvB,GACxCuB,EAActB,GAAasB,EAAcrB,GACzCqB,EAAcnB,GAAamB,EAAclB,GACzCkB,EAAcjB,GAAaiB,EAAchB,GACzCgB,EAAcP,GAAYO,EAAcN,GACxCM,EAAcL,GAAaK,EAAcJ,IAAa,EACtDI,EArDe,kBAqDWA,EAAczB,GACxCyB,EAAcf,IAAc,EAG5B,IAAIgB,EAA8B,iBAAV,EAAA56C,GAAsB,EAAAA,GAAU,EAAAA,EAAOzoB,SAAWA,QAAU,EAAAyoB,EAGhF66C,EAA0B,iBAAR51C,MAAoBA,MAAQA,KAAK1tB,SAAWA,QAAU0tB,KAGxExzB,EAAOmpE,GAAcC,GAAYC,SAAS,cAATA,GAGjCC,EAA4Cj/C,IAAYA,EAAQjpB,UAAYipB,EAG5Ek/C,EAAaD,GAA4C1wE,IAAWA,EAAOwI,UAAYxI,EAGvF4wE,EAAgBD,GAAcA,EAAWl/C,UAAYi/C,EAUzD,SAASG,EAAYxtE,EAAKytE,GAGxB,OADAztE,EAAI8f,IAAI2tD,EAAK,GAAIA,EAAK,IACfztE,CACT,CAUA,SAAS0tE,EAAY5tD,EAAK9Y,GAGxB,OADA8Y,EAAIvb,IAAIyC,GACD8Y,CACT,CAsDA,SAAS6tD,EAAYhkB,EAAO/e,EAAUgjC,EAAaC,GACjD,IAAIliE,GAAS,EACT/I,EAAS+mD,EAAQA,EAAM/mD,OAAS,EAKpC,IAHIirE,GAAajrE,IACfgrE,EAAcjkB,IAAQh+C,MAEfA,EAAQ/I,GACfgrE,EAAchjC,EAASgjC,EAAajkB,EAAMh+C,GAAQA,EAAOg+C,GAE3D,OAAOikB,CACT,CAwCA,SAASE,EAAa9mE,GAGpB,IAAIuB,GAAS,EACb,GAAa,MAATvB,GAA0C,mBAAlBA,EAAMwH,SAChC,IACEjG,KAAYvB,EAAQ,GACtB,CAAE,MAAOwqB,GAAI,CAEf,OAAOjpB,CACT,CASA,SAASwlE,EAAW/tE,GAClB,IAAI2L,GAAS,EACTpD,EAASzF,MAAM9C,EAAI8pC,MAKvB,OAHA9pC,EAAI8K,SAAQ,SAAS9D,EAAOhJ,GAC1BuK,IAASoD,GAAS,CAAC3N,EAAKgJ,EAC1B,IACOuB,CACT,CAUA,SAASylE,EAAQ1yD,EAAM7N,GACrB,OAAO,SAASnF,GACd,OAAOgT,EAAK7N,EAAUnF,GACxB,CACF,CASA,SAAS2lE,EAAWnuD,GAClB,IAAInU,GAAS,EACTpD,EAASzF,MAAMgd,EAAIgqB,MAKvB,OAHAhqB,EAAIhV,SAAQ,SAAS9D,GACnBuB,IAASoD,GAAS3E,CACpB,IACOuB,CACT,CAGA,IASM2lE,EATFC,EAAarrE,MAAM+E,UACnBumE,EAAYhB,SAASvlE,UACrBwmE,EAAcxkE,OAAOhC,UAGrBymE,EAAavqE,EAAK,sBAGlBwqE,GACEL,EAAM,SAASp8B,KAAKw8B,GAAcA,EAAW3wD,MAAQ2wD,EAAW3wD,KAAK6wD,UAAY,KACvE,iBAAmBN,EAAO,GAItCO,EAAeL,EAAU5/D,SAGzBjR,GAAiB8wE,EAAY9wE,eAO7BmxE,GAAiBL,EAAY7/D,SAG7BmgE,GAAajgE,OAAO,IACtB+/D,EAAapkE,KAAK9M,IAAgB+S,QAzQjB,sBAyQuC,QACvDA,QAAQ,yDAA0D,SAAW,KAI5Es+D,GAASrB,EAAgBxpE,EAAK6qE,YAAS3rE,EACvCwE,GAAS1D,EAAK0D,OACdonE,GAAa9qE,EAAK8qE,WAClBC,GAAed,EAAQnkE,OAAOuoB,eAAgBvoB,QAC9CklE,GAAellE,OAAO6O,OACtBs2D,GAAuBX,EAAYW,qBACnC1iD,GAAS6hD,EAAW7hD,OAGpB2iD,GAAmBplE,OAAO42D,sBAC1ByO,GAAiBN,GAASA,GAAOO,cAAWlsE,EAC5CmsE,GAAapB,EAAQnkE,OAAO8T,KAAM9T,QAGlCwlE,GAAWC,GAAUvrE,EAAM,YAC3B44C,GAAM2yB,GAAUvrE,EAAM,OACtByE,GAAU8mE,GAAUvrE,EAAM,WAC1BgsC,GAAMu/B,GAAUvrE,EAAM,OACtBwrE,GAAUD,GAAUvrE,EAAM,WAC1ByrE,GAAeF,GAAUzlE,OAAQ,UAGjC4lE,GAAqBC,GAASL,IAC9BM,GAAgBD,GAAS/yB,IACzBizB,GAAoBF,GAASlnE,IAC7BqnE,GAAgBH,GAAS3/B,IACzB+/B,GAAoBJ,GAASH,IAG7BQ,GAActoE,GAASA,GAAOI,eAAY5E,EAC1C+sE,GAAgBD,GAAcA,GAAY7tE,aAAUe,EASxD,SAASw0C,GAAKrJ,GACZ,IAAIziC,GAAS,EACT/I,EAASwrC,EAAUA,EAAQxrC,OAAS,EAGxC,IADAoF,KAAKuQ,UACI5M,EAAQ/I,GAAQ,CACvB,IAAIqtE,EAAQ7hC,EAAQziC,GACpB3D,KAAK8X,IAAImwD,EAAM,GAAIA,EAAM,GAC3B,CACF,CAyFA,SAASC,GAAU9hC,GACjB,IAAIziC,GAAS,EACT/I,EAASwrC,EAAUA,EAAQxrC,OAAS,EAGxC,IADAoF,KAAKuQ,UACI5M,EAAQ/I,GAAQ,CACvB,IAAIqtE,EAAQ7hC,EAAQziC,GACpB3D,KAAK8X,IAAImwD,EAAM,GAAIA,EAAM,GAC3B,CACF,CAuGA,SAASE,GAAS/hC,GAChB,IAAIziC,GAAS,EACT/I,EAASwrC,EAAUA,EAAQxrC,OAAS,EAGxC,IADAoF,KAAKuQ,UACI5M,EAAQ/I,GAAQ,CACvB,IAAIqtE,EAAQ7hC,EAAQziC,GACpB3D,KAAK8X,IAAImwD,EAAM,GAAIA,EAAM,GAC3B,CACF,CAqFA,SAASG,GAAMhiC,GACbpmC,KAAKqoE,SAAW,IAAIH,GAAU9hC,EAChC,CA2FA,SAASkiC,GAActpE,EAAOupE,GAG5B,IAAIhoE,EAAUrF,GAAQ8D,IAsrBxB,SAAqBA,GAEnB,OAmFF,SAA2BA,GACzB,OAmIF,SAAsBA,GACpB,QAASA,GAAyB,iBAATA,CAC3B,CArISwpE,CAAaxpE,IAAUypE,GAAYzpE,EAC5C,CArFS0pE,CAAkB1pE,IAAUzJ,GAAe8M,KAAKrD,EAAO,aAC1DgoE,GAAqB3kE,KAAKrD,EAAO,WAAa0nE,GAAerkE,KAAKrD,IAAUqkE,EAClF,CA1rBkCsF,CAAY3pE,GAljB9C,SAAmB4iB,EAAGghB,GAIpB,IAHA,IAAIj/B,GAAS,EACTpD,EAASzF,MAAM8mB,KAEVje,EAAQie,GACfrhB,EAAOoD,GAASi/B,EAASj/B,GAE3B,OAAOpD,CACT,CA2iBMqoE,CAAU5pE,EAAMpE,OAAQ0kB,QACxB,GAEA1kB,EAAS2F,EAAO3F,OAChBiuE,IAAgBjuE,EAEpB,IAAK,IAAI5E,KAAOgJ,GACTupE,IAAahzE,GAAe8M,KAAKrD,EAAOhJ,IACvC6yE,IAAuB,UAAP7yE,GAAmB8yE,GAAQ9yE,EAAK4E,KACpD2F,EAAOgF,KAAKvP,GAGhB,OAAOuK,CACT,CAYA,SAASwoE,GAAYC,EAAQhzE,EAAKgJ,GAChC,IAAIiqE,EAAWD,EAAOhzE,GAChBT,GAAe8M,KAAK2mE,EAAQhzE,IAAQkzE,GAAGD,EAAUjqE,UACxC/D,IAAV+D,GAAyBhJ,KAAOgzE,KACnCA,EAAOhzE,GAAOgJ,EAElB,CAUA,SAASmqE,GAAaxnB,EAAO3rD,GAE3B,IADA,IAAI4E,EAAS+mD,EAAM/mD,OACZA,KACL,GAAIsuE,GAAGvnB,EAAM/mD,GAAQ,GAAI5E,GACvB,OAAO4E,EAGX,OAAQ,CACV,CA6BA,SAASwuE,GAAUpqE,EAAOqqE,EAAQC,EAAQC,EAAYvzE,EAAKgzE,EAAQrlC,GACjE,IAAIpjC,EAIJ,GAHIgpE,IACFhpE,EAASyoE,EAASO,EAAWvqE,EAAOhJ,EAAKgzE,EAAQrlC,GAAS4lC,EAAWvqE,SAExD/D,IAAXsF,EACF,OAAOA,EAET,IAAKgV,GAASvW,GACZ,OAAOA,EAET,IAAIwqE,EAAQtuE,GAAQ8D,GACpB,GAAIwqE,GAEF,GADAjpE,EA2XJ,SAAwBohD,GACtB,IAAI/mD,EAAS+mD,EAAM/mD,OACf2F,EAASohD,EAAM/hD,YAAYhF,GAG3BA,GAA6B,iBAAZ+mD,EAAM,IAAkBpsD,GAAe8M,KAAKs/C,EAAO,WACtEphD,EAAOoD,MAAQg+C,EAAMh+C,MACrBpD,EAAOqf,MAAQ+hC,EAAM/hC,OAEvB,OAAOrf,CACT,CArYakpE,CAAezqE,IACnBqqE,EACH,OA6ON,SAAmBjnE,EAAQu/C,GACzB,IAAIh+C,GAAS,EACT/I,EAASwH,EAAOxH,OAEpB+mD,IAAUA,EAAQ7mD,MAAMF,IACxB,OAAS+I,EAAQ/I,GACf+mD,EAAMh+C,GAASvB,EAAOuB,GAExB,OAAOg+C,CACT,CAtPan+C,CAAUxE,EAAOuB,OAErB,CACL,IAAImmD,EAAMgjB,GAAO1qE,GACb2qE,EAASjjB,GAAO8c,GAAW9c,GAAO+c,EAEtC,GAAI0D,GAASnoE,GACX,OA0HN,SAAqB6xC,EAAQw4B,GAC3B,GAAIA,EACF,OAAOx4B,EAAOhpC,QAEhB,IAAItH,EAAS,IAAIswC,EAAOjxC,YAAYixC,EAAOj2C,QAE3C,OADAi2C,EAAO+4B,KAAKrpE,GACLA,CACT,CAjIaspE,CAAY7qE,EAAOqqE,GAE5B,GAAI3iB,GAAOkd,GAAald,GAAO2c,GAAYsG,IAAWX,EAAS,CAC7D,GAAIlD,EAAa9mE,GACf,OAAOgqE,EAAShqE,EAAQ,CAAC,EAG3B,GADAuB,EA+XN,SAAyByoE,GACvB,MAAqC,mBAAtBA,EAAOppE,aAA8BkqE,GAAYd,GAE5D,CAAC,GAzVae,EAwVHjD,GAAakC,GAvVrBzzD,GAASw0D,GAAShD,GAAagD,GAAS,CAAC,GADlD,IAAoBA,CA0VpB,CAnYeC,CAAgBL,EAAS,CAAC,EAAI3qE,IAClCqqE,EACH,OA6QR,SAAqBjnE,EAAQ4mE,GAC3B,OAAOiB,GAAW7nE,EAAQ8nE,GAAW9nE,GAAS4mE,EAChD,CA/QemB,CAAYnrE,EAhD3B,SAAoBgqE,EAAQ5mE,GAC1B,OAAO4mE,GAAUiB,GAAW7nE,EAAQuT,GAAKvT,GAAS4mE,EACpD,CA8CkCoB,CAAW7pE,EAAQvB,GAEjD,KAAO,CACL,IAAKimE,EAAcve,GACjB,OAAOsiB,EAAShqE,EAAQ,CAAC,EAE3BuB,EA0YN,SAAwByoE,EAAQtiB,EAAK2jB,EAAWhB,GAC9C,IAAIiB,EAAOtB,EAAOppE,YAClB,OAAQ8mD,GACN,KAAKyd,EACH,OAAOoG,GAAiBvB,GAE1B,KAAK1F,EACL,KAAKC,EACH,OAAO,IAAI+G,GAAMtB,GAEnB,KAAK5E,EACH,OA3QN,SAAuBoG,EAAUnB,GAC/B,IAAIx4B,EAASw4B,EAASkB,GAAiBC,EAAS35B,QAAU25B,EAAS35B,OACnE,OAAO,IAAI25B,EAAS5qE,YAAYixC,EAAQ25B,EAASC,WAAYD,EAASE,WACxE,CAwQaC,CAAc3B,EAAQK,GAE/B,KAAKhF,EAAY,KAAKC,EACtB,KAAKC,EAAS,KAAKC,EAAU,KAAKC,EAClC,KAAKC,EAAU,KAAKC,EAAiB,KAAKC,EAAW,KAAKC,EACxD,OA/MN,SAAyB+F,EAAYvB,GACnC,IAAIx4B,EAASw4B,EAASkB,GAAiBK,EAAW/5B,QAAU+5B,EAAW/5B,OACvE,OAAO,IAAI+5B,EAAWhrE,YAAYixC,EAAQ+5B,EAAWH,WAAYG,EAAWhwE,OAC9E,CA4MaiwE,CAAgB7B,EAAQK,GAEjC,KAAK3F,EACH,OArQN,SAAkB1rE,EAAKqxE,EAAQgB,GAC7B,IAAI1oB,EAAQ0nB,EAASgB,EAAUtE,EAAW/tE,IAAM,GAAQ+tE,EAAW/tE,GACnE,OAAO2tE,EAAYhkB,EAAO6jB,EAAa,IAAIxtE,EAAI4H,YACjD,CAkQakrE,CAAS9B,EAAQK,EAAQgB,GAElC,KAAK1G,EACL,KAAKK,EACH,OAAO,IAAIsG,EAAKtB,GAElB,KAAKlF,EACH,OAhQN,SAAqBiH,GACnB,IAAIxqE,EAAS,IAAIwqE,EAAOnrE,YAAYmrE,EAAO3oE,OAAQ0iE,EAAQh7B,KAAKihC,IAEhE,OADAxqE,EAAOyqE,UAAYD,EAAOC,UACnBzqE,CACT,CA4Pa0qE,CAAYjC,GAErB,KAAKjF,EACH,OApPN,SAAkBjsD,EAAKuxD,EAAQgB,GAC7B,IAAI1oB,EAAQ0nB,EAASgB,EAAUpE,EAAWnuD,IAAM,GAAQmuD,EAAWnuD,GACnE,OAAO6tD,EAAYhkB,EAAO+jB,EAAa,IAAI5tD,EAAIlY,YACjD,CAiPasrE,CAASlC,EAAQK,EAAQgB,GAElC,KAAKpG,EACH,OA3OekH,EA2OInC,EA1OhBhB,GAAgBnmE,OAAOmmE,GAAc3lE,KAAK8oE,IAAW,CAAC,EAD/D,IAAqBA,CA6OrB,CA5aeC,CAAepsE,EAAO0nD,EAAK0iB,GAAWC,EACjD,CACF,CAEA1lC,IAAUA,EAAQ,IAAIykC,IACtB,IAAIiD,EAAU1nC,EAAM9rB,IAAI7Y,GACxB,GAAIqsE,EACF,OAAOA,EAIT,GAFA1nC,EAAM7rB,IAAI9Y,EAAOuB,IAEZipE,EACH,IAAIjoE,EAAQ+nE,EAsQhB,SAAoBN,GAClB,OAnOF,SAAwBA,EAAQsC,EAAUC,GACxC,IAAIhrE,EAAS+qE,EAAStC,GACtB,OAAO9tE,GAAQ8tE,GAAUzoE,EApwB3B,SAAmBohD,EAAOt3B,GAKxB,IAJA,IAAI1mB,GAAS,EACT/I,EAASyvB,EAAOzvB,OAChBxC,EAASupD,EAAM/mD,SAEV+I,EAAQ/I,GACf+mD,EAAMvpD,EAASuL,GAAS0mB,EAAO1mB,GAEjC,OAAOg+C,CACT,CA2vBoC6pB,CAAUjrE,EAAQgrE,EAAYvC,GAClE,CAgOSyC,CAAezC,EAAQrzD,GAAMu0D,GACtC,CAxQyBwB,CAAW1sE,GAAS2W,GAAK3W,GAUhD,OA5vBF,SAAmB2iD,EAAO/e,GAIxB,IAHA,IAAIj/B,GAAS,EACT/I,EAAS+mD,EAAQA,EAAM/mD,OAAS,IAE3B+I,EAAQ/I,IAC8B,IAAzCgoC,EAAS+e,EAAMh+C,GAAQA,EAAOg+C,KAKtC,CA0uBEgqB,CAAUpqE,GAASvC,GAAO,SAAS4sE,EAAU51E,GACvCuL,IAEFqqE,EAAW5sE,EADXhJ,EAAM41E,IAIR7C,GAAYxoE,EAAQvK,EAAKozE,GAAUwC,EAAUvC,EAAQC,EAAQC,EAAYvzE,EAAKgJ,EAAO2kC,GACvF,IACOpjC,CACT,CAiDA,SAASsrE,GAAa7sE,GACpB,SAAKuW,GAASvW,KAyYEsU,EAzYiBtU,EA0YxBunE,GAAeA,KAAcjzD,MAvYvB4uB,GAAWljC,IAAU8mE,EAAa9mE,GAAU2nE,GAAa5B,GACzDpvE,KAAK+xE,GAAS1oE,IAqY/B,IAAkBsU,CApYlB,CA8CA,SAASi3D,GAAiBuB,GACxB,IAAIvrE,EAAS,IAAIurE,EAAYlsE,YAAYksE,EAAYpB,YAErD,OADA,IAAI7D,GAAWtmE,GAAQuX,IAAI,IAAI+uD,GAAWiF,IACnCvrE,CACT,CA6GA,SAAS0pE,GAAW7nE,EAAQb,EAAOynE,EAAQO,GACzCP,IAAWA,EAAS,CAAC,GAKrB,IAHA,IAAIrlE,GAAS,EACT/I,EAAS2G,EAAM3G,SAEV+I,EAAQ/I,GAAQ,CACvB,IAAI5E,EAAMuL,EAAMoC,GAEZooE,EAAWxC,EACXA,EAAWP,EAAOhzE,GAAMoM,EAAOpM,GAAMA,EAAKgzE,EAAQ5mE,QAClDnH,EAEJ8tE,GAAYC,EAAQhzE,OAAkBiF,IAAb8wE,EAAyB3pE,EAAOpM,GAAO+1E,EAClE,CACA,OAAO/C,CACT,CAiCA,SAASgD,GAAWh0E,EAAKhC,GACvB,IAqKiBgJ,EACb5J,EAtKA+uB,EAAOnsB,EAAIqwE,SACf,OAsKgB,WADZjzE,SADa4J,EApKAhJ,KAsKmB,UAARZ,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAV4J,EACU,OAAVA,GAvKDmlB,EAAmB,iBAAPnuB,EAAkB,SAAW,QACzCmuB,EAAKnsB,GACX,CAUA,SAASsvE,GAAU0B,EAAQhzE,GACzB,IAAIgJ,EAj8BN,SAAkBgqE,EAAQhzE,GACxB,OAAiB,MAAVgzE,OAAiB/tE,EAAY+tE,EAAOhzE,EAC7C,CA+7Bci2E,CAASjD,EAAQhzE,GAC7B,OAAO61E,GAAa7sE,GAASA,OAAQ/D,CACvC,CA9tBAw0C,GAAK5vC,UAAU0Q,MAnEf,WACEvQ,KAAKqoE,SAAWb,GAAeA,GAAa,MAAQ,CAAC,CACvD,EAkEA/3B,GAAK5vC,UAAkB,OAtDvB,SAAoB7J,GAClB,OAAOgK,KAAKo1B,IAAIp/B,WAAegK,KAAKqoE,SAASryE,EAC/C,EAqDAy5C,GAAK5vC,UAAUgY,IA1Cf,SAAiB7hB,GACf,IAAImuB,EAAOnkB,KAAKqoE,SAChB,GAAIb,GAAc,CAChB,IAAIjnE,EAAS4jB,EAAKnuB,GAClB,OAAOuK,IAAW4iE,OAAiBloE,EAAYsF,CACjD,CACA,OAAOhL,GAAe8M,KAAK8hB,EAAMnuB,GAAOmuB,EAAKnuB,QAAOiF,CACtD,EAoCAw0C,GAAK5vC,UAAUu1B,IAzBf,SAAiBp/B,GACf,IAAImuB,EAAOnkB,KAAKqoE,SAChB,OAAOb,QAA6BvsE,IAAdkpB,EAAKnuB,GAAqBT,GAAe8M,KAAK8hB,EAAMnuB,EAC5E,EAuBAy5C,GAAK5vC,UAAUiY,IAXf,SAAiB9hB,EAAKgJ,GAGpB,OAFWgB,KAAKqoE,SACXryE,GAAQwxE,SAA0BvsE,IAAV+D,EAAuBmkE,EAAiBnkE,EAC9DgB,IACT,EAmHAkoE,GAAUroE,UAAU0Q,MAjFpB,WACEvQ,KAAKqoE,SAAW,EAClB,EAgFAH,GAAUroE,UAAkB,OArE5B,SAAyB7J,GACvB,IAAImuB,EAAOnkB,KAAKqoE,SACZ1kE,EAAQwlE,GAAahlD,EAAMnuB,GAE/B,QAAI2N,EAAQ,KAIRA,GADYwgB,EAAKvpB,OAAS,EAE5BupB,EAAKhhB,MAELmhB,GAAOjiB,KAAK8hB,EAAMxgB,EAAO,IAEpB,EACT,EAwDAukE,GAAUroE,UAAUgY,IA7CpB,SAAsB7hB,GACpB,IAAImuB,EAAOnkB,KAAKqoE,SACZ1kE,EAAQwlE,GAAahlD,EAAMnuB,GAE/B,OAAO2N,EAAQ,OAAI1I,EAAYkpB,EAAKxgB,GAAO,EAC7C,EAyCAukE,GAAUroE,UAAUu1B,IA9BpB,SAAsBp/B,GACpB,OAAOmzE,GAAanpE,KAAKqoE,SAAUryE,IAAQ,CAC7C,EA6BAkyE,GAAUroE,UAAUiY,IAjBpB,SAAsB9hB,EAAKgJ,GACzB,IAAImlB,EAAOnkB,KAAKqoE,SACZ1kE,EAAQwlE,GAAahlD,EAAMnuB,GAO/B,OALI2N,EAAQ,EACVwgB,EAAK5e,KAAK,CAACvP,EAAKgJ,IAEhBmlB,EAAKxgB,GAAO,GAAK3E,EAEZgB,IACT,EAiGAmoE,GAAStoE,UAAU0Q,MA/DnB,WACEvQ,KAAKqoE,SAAW,CACd,KAAQ,IAAI54B,GACZ,IAAO,IAAKkF,IAAOuzB,IACnB,OAAU,IAAIz4B,GAElB,EA0DA04B,GAAStoE,UAAkB,OA/C3B,SAAwB7J,GACtB,OAAOg2E,GAAWhsE,KAAMhK,GAAa,OAAEA,EACzC,EA8CAmyE,GAAStoE,UAAUgY,IAnCnB,SAAqB7hB,GACnB,OAAOg2E,GAAWhsE,KAAMhK,GAAK6hB,IAAI7hB,EACnC,EAkCAmyE,GAAStoE,UAAUu1B,IAvBnB,SAAqBp/B,GACnB,OAAOg2E,GAAWhsE,KAAMhK,GAAKo/B,IAAIp/B,EACnC,EAsBAmyE,GAAStoE,UAAUiY,IAVnB,SAAqB9hB,EAAKgJ,GAExB,OADAgtE,GAAWhsE,KAAMhK,GAAK8hB,IAAI9hB,EAAKgJ,GACxBgB,IACT,EA+FAooE,GAAMvoE,UAAU0Q,MApEhB,WACEvQ,KAAKqoE,SAAW,IAAIH,EACtB,EAmEAE,GAAMvoE,UAAkB,OAxDxB,SAAqB7J,GACnB,OAAOgK,KAAKqoE,SAAiB,OAAEryE,EACjC,EAuDAoyE,GAAMvoE,UAAUgY,IA5ChB,SAAkB7hB,GAChB,OAAOgK,KAAKqoE,SAASxwD,IAAI7hB,EAC3B,EA2CAoyE,GAAMvoE,UAAUu1B,IAhChB,SAAkBp/B,GAChB,OAAOgK,KAAKqoE,SAASjzC,IAAIp/B,EAC3B,EA+BAoyE,GAAMvoE,UAAUiY,IAnBhB,SAAkB9hB,EAAKgJ,GACrB,IAAIsH,EAAQtG,KAAKqoE,SACjB,GAAI/hE,aAAiB4hE,GAAW,CAC9B,IAAIgE,EAAQ5lE,EAAM+hE,SAClB,IAAK1zB,IAAQu3B,EAAMtxE,OAASuxE,IAE1B,OADAD,EAAM3mE,KAAK,CAACvP,EAAKgJ,IACVgB,KAETsG,EAAQtG,KAAKqoE,SAAW,IAAIF,GAAS+D,EACvC,CAEA,OADA5lE,EAAMwR,IAAI9hB,EAAKgJ,GACRgB,IACT,EAgcA,IAAIkqE,GAAajD,GAAmBjB,EAAQiB,GAAkBplE,QAyhB9D,WACE,MAAO,EACT,EAlhBI6nE,GAtQJ,SAAoB1qE,GAClB,OAAO0nE,GAAerkE,KAAKrD,EAC7B,EAwXA,SAAS8pE,GAAQ9pE,EAAOpE,GAEtB,SADAA,EAAmB,MAAVA,EAAiBwoE,EAAmBxoE,KAE1B,iBAAToE,GAAqBgmE,EAASrvE,KAAKqJ,KAC1CA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQpE,CAC7C,CAkCA,SAASkvE,GAAY9qE,GACnB,IAAIsrE,EAAOtrE,GAASA,EAAMY,YAG1B,OAAOZ,KAFqB,mBAARsrE,GAAsBA,EAAKzqE,WAAcwmE,EAG/D,CASA,SAASqB,GAASp0D,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOmzD,EAAapkE,KAAKiR,EAC3B,CAAE,MAAOkW,GAAI,CACb,IACE,OAAQlW,EAAO,EACjB,CAAE,MAAOkW,GAAI,CACf,CACA,MAAO,EACT,CAwDA,SAAS0/C,GAAGlqE,EAAOotE,GACjB,OAAOptE,IAAUotE,GAAUptE,GAAUA,GAASotE,GAAUA,CAC1D,EAzOK/E,IAAYqC,GAAO,IAAIrC,GAAS,IAAIgF,YAAY,MAAQjI,GACxDzvB,IAAO+0B,GAAO,IAAI/0B,KAAQ+uB,GAC1BljE,IAAWkpE,GAAOlpE,GAAQC,YAAcojE,GACxC97B,IAAO2hC,GAAO,IAAI3hC,KAAQg8B,GAC1BwD,IAAWmC,GAAO,IAAInC,KAAYrD,KACrCwF,GAAS,SAAS1qE,GAChB,IAAIuB,EAASmmE,GAAerkE,KAAKrD,GAC7BsrE,EAAO/pE,GAAUqjE,EAAY5kE,EAAMY,iBAAc3E,EACjDqxE,EAAahC,EAAO5C,GAAS4C,QAAQrvE,EAEzC,GAAIqxE,EACF,OAAQA,GACN,KAAK7E,GAAoB,OAAOrD,EAChC,KAAKuD,GAAe,OAAOjE,EAC3B,KAAKkE,GAAmB,OAAO/D,EAC/B,KAAKgE,GAAe,OAAO9D,EAC3B,KAAK+D,GAAmB,OAAO5D,EAGnC,OAAO3jE,CACT,GAsQF,IAAIrF,GAAUJ,MAAMI,QA2BpB,SAASutE,GAAYzpE,GACnB,OAAgB,MAATA,GAqGT,SAAkBA,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GAASokE,CAC7C,CAxG0BmJ,CAASvtE,EAAMpE,UAAYsnC,GAAWljC,EAChE,CAgDA,IAAImoE,GAAWD,IAsLf,WACE,OAAO,CACT,EArKA,SAAShlC,GAAWljC,GAGlB,IAAI0nD,EAAMnxC,GAASvW,GAAS0nE,GAAerkE,KAAKrD,GAAS,GACzD,OAAO0nD,GAAO8c,GAAW9c,GAAO+c,CAClC,CA0DA,SAASluD,GAASvW,GAChB,IAAI5J,SAAc4J,EAClB,QAASA,IAAkB,UAAR5J,GAA4B,YAARA,EACzC,CA0DA,SAASugB,GAAKqzD,GACZ,OAAOP,GAAYO,GAAUV,GAAcU,GAtuB7C,SAAkBA,GAChB,IAAKc,GAAYd,GACf,OAAO5B,GAAW4B,GAEpB,IAAIzoE,EAAS,GACb,IAAK,IAAIvK,KAAO6L,OAAOmnE,GACjBzzE,GAAe8M,KAAK2mE,EAAQhzE,IAAe,eAAPA,GACtCuK,EAAOgF,KAAKvP,GAGhB,OAAOuK,CACT,CA2tBuDisE,CAASxD,EAChE,CAyCAr0E,EAAOyxB,QA9VP,SAAmBpnB,GACjB,OAAOoqE,GAAUpqE,GAAO,GAAM,EAChC,6BC72CA,IAGImkE,EAAiB,4BAOjBC,EAAmB,iBAGnBC,EAAU,qBACVoJ,EAAW,iBAEXnJ,EAAU,mBACVC,EAAU,gBACVmJ,EAAW,iBACXlJ,EAAU,oBAEVE,EAAS,eACTC,EAAY,kBAEZC,EAAY,kBACZC,EAAa,mBAEbC,EAAY,kBACZC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBAEZC,EAAa,mBAEbC,EAAiB,uBACjBC,EAAc,oBAkBdW,EAAe,8BAGfC,EAAW,mBAGX2H,EAAiB,CAAC,EACtBA,EAxBiB,yBAwBYA,EAvBZ,yBAwBjBA,EAvBc,sBAuBYA,EAtBX,uBAuBfA,EAtBe,uBAsBYA,EArBZ,uBAsBfA,EArBsB,8BAqBYA,EApBlB,wBAqBhBA,EApBgB,yBAoBY,EAC5BA,EAAetJ,GAAWsJ,EAAeF,GACzCE,EAAexI,GAAkBwI,EAAerJ,GAChDqJ,EAAevI,GAAeuI,EAAepJ,GAC7CoJ,EAAeD,GAAYC,EAAenJ,GAC1CmJ,EAAejJ,GAAUiJ,EAAehJ,GACxCgJ,EAAe/I,GAAa+I,EAAe7I,GAC3C6I,EAAe5I,GAAU4I,EAAe3I,GACxC2I,EAAezI,IAAc,EAG7B,IAAIgB,EAA8B,iBAAV,EAAA56C,GAAsB,EAAAA,GAAU,EAAAA,EAAOzoB,SAAWA,QAAU,EAAAyoB,EAGhF66C,EAA0B,iBAAR51C,MAAoBA,MAAQA,KAAK1tB,SAAWA,QAAU0tB,KAGxExzB,EAAOmpE,GAAcC,GAAYC,SAAS,cAATA,GAGjCC,EAA4Cj/C,IAAYA,EAAQjpB,UAAYipB,EAG5Ek/C,EAAaD,GAA4C1wE,IAAWA,EAAOwI,UAAYxI,EAGvF4wE,EAAgBD,GAAcA,EAAWl/C,UAAYi/C,EAGrDuH,EAAcrH,GAAiBL,EAAW2H,QAG1CC,EAAY,WACd,IACE,OAAOF,GAAeA,EAAYG,SAAWH,EAAYG,QAAQ,OACnE,CAAE,MAAOvjD,GAAI,CACf,CAJe,GAOXwjD,EAAmBF,GAAYA,EAASG,aAuD5C,SAASC,EAAUvrB,EAAO7c,GAIxB,IAHA,IAAInhC,GAAS,EACT/I,EAAkB,MAAT+mD,EAAgB,EAAIA,EAAM/mD,SAE9B+I,EAAQ/I,GACf,GAAIkqC,EAAU6c,EAAMh+C,GAAQA,EAAOg+C,GACjC,OAAO,EAGX,OAAO,CACT,CAiEA,SAASokB,EAAW/tE,GAClB,IAAI2L,GAAS,EACTpD,EAASzF,MAAM9C,EAAI8pC,MAKvB,OAHA9pC,EAAI8K,SAAQ,SAAS9D,EAAOhJ,GAC1BuK,IAASoD,GAAS,CAAC3N,EAAKgJ,EAC1B,IACOuB,CACT,CAuBA,SAAS0lE,EAAWnuD,GAClB,IAAInU,GAAS,EACTpD,EAASzF,MAAMgd,EAAIgqB,MAKvB,OAHAhqB,EAAIhV,SAAQ,SAAS9D,GACnBuB,IAASoD,GAAS3E,CACpB,IACOuB,CACT,CAGA,IAeM2lE,EAvCW5yD,EAAM7N,EAwBnB0gE,EAAarrE,MAAM+E,UACnBumE,EAAYhB,SAASvlE,UACrBwmE,EAAcxkE,OAAOhC,UAGrBymE,EAAavqE,EAAK,sBAGlB0qE,EAAeL,EAAU5/D,SAGzBjR,EAAiB8wE,EAAY9wE,eAG7BgxE,GACEL,EAAM,SAASp8B,KAAKw8B,GAAcA,EAAW3wD,MAAQ2wD,EAAW3wD,KAAK6wD,UAAY,KACvE,iBAAmBN,EAAO,GAQtCiH,EAAuB9G,EAAY7/D,SAGnCmgE,EAAajgE,OAAO,IACtB+/D,EAAapkE,KAAK9M,GAAgB+S,QA7PjB,sBA6PuC,QACvDA,QAAQ,yDAA0D,SAAW,KAI5Es+D,EAASrB,EAAgBxpE,EAAK6qE,YAAS3rE,EACvCwE,EAAS1D,EAAK0D,OACdonE,EAAa9qE,EAAK8qE,WAClBG,EAAuBX,EAAYW,qBACnC1iD,EAAS6hD,EAAW7hD,OACpB8oD,GAAiB3tE,EAASA,EAAOkqB,iBAAc1uB,EAG/CgsE,GAAmBplE,OAAO42D,sBAC1ByO,GAAiBN,EAASA,EAAOO,cAAWlsE,EAC5CmsE,IAnEa9zD,EAmEQzR,OAAO8T,KAnETlQ,EAmEe5D,OAlE7B,SAASvB,GACd,OAAOgT,EAAK7N,EAAUnF,GACxB,GAmEE+mE,GAAWC,GAAUvrE,EAAM,YAC3B44C,GAAM2yB,GAAUvrE,EAAM,OACtByE,GAAU8mE,GAAUvrE,EAAM,WAC1BgsC,GAAMu/B,GAAUvrE,EAAM,OACtBwrE,GAAUD,GAAUvrE,EAAM,WAC1ByrE,GAAeF,GAAUzlE,OAAQ,UAGjC4lE,GAAqBC,GAASL,IAC9BM,GAAgBD,GAAS/yB,IACzBizB,GAAoBF,GAASlnE,IAC7BqnE,GAAgBH,GAAS3/B,IACzB+/B,GAAoBJ,GAASH,IAG7BQ,GAActoE,EAASA,EAAOI,eAAY5E,EAC1C+sE,GAAgBD,GAAcA,GAAY7tE,aAAUe,EASxD,SAASw0C,GAAKrJ,GACZ,IAAIziC,GAAS,EACT/I,EAAoB,MAAXwrC,EAAkB,EAAIA,EAAQxrC,OAG3C,IADAoF,KAAKuQ,UACI5M,EAAQ/I,GAAQ,CACvB,IAAIqtE,EAAQ7hC,EAAQziC,GACpB3D,KAAK8X,IAAImwD,EAAM,GAAIA,EAAM,GAC3B,CACF,CA6FA,SAASC,GAAU9hC,GACjB,IAAIziC,GAAS,EACT/I,EAAoB,MAAXwrC,EAAkB,EAAIA,EAAQxrC,OAG3C,IADAoF,KAAKuQ,UACI5M,EAAQ/I,GAAQ,CACvB,IAAIqtE,EAAQ7hC,EAAQziC,GACpB3D,KAAK8X,IAAImwD,EAAM,GAAIA,EAAM,GAC3B,CACF,CA0GA,SAASE,GAAS/hC,GAChB,IAAIziC,GAAS,EACT/I,EAAoB,MAAXwrC,EAAkB,EAAIA,EAAQxrC,OAG3C,IADAoF,KAAKuQ,UACI5M,EAAQ/I,GAAQ,CACvB,IAAIqtE,EAAQ7hC,EAAQziC,GACpB3D,KAAK8X,IAAImwD,EAAM,GAAIA,EAAM,GAC3B,CACF,CA6FA,SAASoF,GAAShjD,GAChB,IAAI1mB,GAAS,EACT/I,EAAmB,MAAVyvB,EAAiB,EAAIA,EAAOzvB,OAGzC,IADAoF,KAAKqoE,SAAW,IAAIF,KACXxkE,EAAQ/I,GACfoF,KAAKzD,IAAI8tB,EAAO1mB,GAEpB,CAyCA,SAASykE,GAAMhiC,GACb,IAAIjiB,EAAOnkB,KAAKqoE,SAAW,IAAIH,GAAU9hC,GACzCpmC,KAAK8hC,KAAO3d,EAAK2d,IACnB,CAkGA,SAASwmC,GAActpE,EAAOupE,GAC5B,IAAIiB,EAAQtuE,GAAQ8D,GAChBsuE,GAAS9D,GAASb,GAAY3pE,GAC9BuuE,GAAU/D,IAAU8D,GAASnG,GAASnoE,GACtCwuE,GAAUhE,IAAU8D,IAAUC,GAAUN,GAAajuE,GACrD6pE,EAAcW,GAAS8D,GAASC,GAAUC,EAC1CjtE,EAASsoE,EAloBf,SAAmBjnD,EAAGghB,GAIpB,IAHA,IAAIj/B,GAAS,EACTpD,EAASzF,MAAM8mB,KAEVje,EAAQie,GACfrhB,EAAOoD,GAASi/B,EAASj/B,GAE3B,OAAOpD,CACT,CA0nB6BqoE,CAAU5pE,EAAMpE,OAAQ0kB,QAAU,GACzD1kB,EAAS2F,EAAO3F,OAEpB,IAAK,IAAI5E,KAAOgJ,GACTupE,IAAahzE,EAAe8M,KAAKrD,EAAOhJ,IACvC6yE,IAEQ,UAAP7yE,GAECu3E,IAAkB,UAAPv3E,GAA0B,UAAPA,IAE9Bw3E,IAAkB,UAAPx3E,GAA0B,cAAPA,GAA8B,cAAPA,IAEtD8yE,GAAQ9yE,EAAK4E,KAElB2F,EAAOgF,KAAKvP,GAGhB,OAAOuK,CACT,CAUA,SAAS4oE,GAAaxnB,EAAO3rD,GAE3B,IADA,IAAI4E,EAAS+mD,EAAM/mD,OACZA,KACL,GAAIsuE,GAAGvnB,EAAM/mD,GAAQ,GAAI5E,GACvB,OAAO4E,EAGX,OAAQ,CACV,CAyBA,SAAS6yE,GAAWzuE,GAClB,OAAa,MAATA,OACe/D,IAAV+D,EAt1BQ,qBARL,gBAg2BJouE,IAAkBA,MAAkBvrE,OAAO7C,GA0arD,SAAmBA,GACjB,IAAI0uE,EAAQn4E,EAAe8M,KAAKrD,EAAOouE,IACnC1mB,EAAM1nD,EAAMouE,IAEhB,IACEpuE,EAAMouE,SAAkBnyE,EACxB,IAAI0yE,GAAW,CACjB,CAAE,MAAOnkD,GAAI,CAEb,IAAIjpB,EAAS4sE,EAAqB9qE,KAAKrD,GACnC2uE,IACED,EACF1uE,EAAMouE,IAAkB1mB,SAEjB1nD,EAAMouE,KAGjB,OAAO7sE,CACT,CA3bMqtE,CAAU5uE,GA4iBhB,SAAwBA,GACtB,OAAOmuE,EAAqB9qE,KAAKrD,EACnC,CA7iBM0nE,CAAe1nE,EACrB,CASA,SAAS6uE,GAAgB7uE,GACvB,OAAOwpE,GAAaxpE,IAAUyuE,GAAWzuE,IAAUqkE,CACrD,CAgBA,SAASyK,GAAY9uE,EAAOotE,EAAO2B,EAASxE,EAAY5lC,GACtD,OAAI3kC,IAAUotE,IAGD,MAATptE,GAA0B,MAATotE,IAAmB5D,GAAaxpE,KAAWwpE,GAAa4D,GACpEptE,GAAUA,GAASotE,GAAUA,EAmBxC,SAAyBpD,EAAQoD,EAAO2B,EAASxE,EAAYyE,EAAWrqC,GACtE,IAAIsqC,EAAW/yE,GAAQ8tE,GACnBkF,EAAWhzE,GAAQkxE,GACnB+B,EAASF,EAAWxB,EAAW/C,GAAOV,GACtCoF,EAASF,EAAWzB,EAAW/C,GAAO0C,GAKtCiC,GAHJF,EAASA,GAAU9K,EAAUO,EAAYuK,IAGhBvK,EACrB0K,GAHJF,EAASA,GAAU/K,EAAUO,EAAYwK,IAGhBxK,EACrB2K,EAAYJ,GAAUC,EAE1B,GAAIG,GAAapH,GAAS6B,GAAS,CACjC,IAAK7B,GAASiF,GACZ,OAAO,EAET6B,GAAW,EACXI,GAAW,CACb,CACA,GAAIE,IAAcF,EAEhB,OADA1qC,IAAUA,EAAQ,IAAIykC,IACd6F,GAAYhB,GAAajE,GAC7BvzD,GAAYuzD,EAAQoD,EAAO2B,EAASxE,EAAYyE,EAAWrqC,GAiKnE,SAAoBqlC,EAAQoD,EAAO1lB,EAAKqnB,EAASxE,EAAYyE,EAAWrqC,GACtE,OAAQ+iB,GACN,KAAK0d,EACH,GAAK4E,EAAO0B,YAAc0B,EAAM1B,YAC3B1B,EAAOyB,YAAc2B,EAAM3B,WAC9B,OAAO,EAETzB,EAASA,EAAOn4B,OAChBu7B,EAAQA,EAAMv7B,OAEhB,KAAKszB,EACH,QAAK6E,EAAO0B,YAAc0B,EAAM1B,aAC3BsD,EAAU,IAAInH,EAAWmC,GAAS,IAAInC,EAAWuF,KAKxD,KAAK9I,EACL,KAAKC,EACL,KAAKI,EAGH,OAAOuF,IAAIF,GAASoD,GAEtB,KAAKM,EACH,OAAO1D,EAAO1zE,MAAQ82E,EAAM92E,MAAQ0zE,EAAO1lC,SAAW8oC,EAAM9oC,QAE9D,KAAKwgC,EACL,KAAKE,EAIH,OAAOgF,GAAWoD,EAAQ,GAE5B,KAAK1I,EACH,IAAIx5B,EAAU67B,EAEhB,KAAKhC,EACH,IAAIyK,EAroCiB,EAqoCLT,EAGhB,GAFA7jC,IAAYA,EAAU+7B,GAElB+C,EAAOlnC,MAAQsqC,EAAMtqC,OAAS0sC,EAChC,OAAO,EAGT,IAAInD,EAAU1nC,EAAM9rB,IAAImxD,GACxB,GAAIqC,EACF,OAAOA,GAAWe,EAEpB2B,GA/oCuB,EAkpCvBpqC,EAAM7rB,IAAIkxD,EAAQoD,GAClB,IAAI7rE,EAASkV,GAAYy0B,EAAQ8+B,GAAS9+B,EAAQkiC,GAAQ2B,EAASxE,EAAYyE,EAAWrqC,GAE1F,OADAA,EAAc,OAAEqlC,GACTzoE,EAET,KAAK0jE,EACH,GAAI+D,GACF,OAAOA,GAAc3lE,KAAK2mE,IAAWhB,GAAc3lE,KAAK+pE,GAG9D,OAAO,CACT,CA/NQqC,CAAWzF,EAAQoD,EAAO+B,EAAQJ,EAASxE,EAAYyE,EAAWrqC,GAExE,KAj8ByB,EAi8BnBoqC,GAAiC,CACrC,IAAIW,EAAeL,GAAY94E,EAAe8M,KAAK2mE,EAAQ,eACvD2F,EAAeL,GAAY/4E,EAAe8M,KAAK+pE,EAAO,eAE1D,GAAIsC,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAe1F,EAAOhqE,QAAUgqE,EAC/C6F,EAAeF,EAAevC,EAAMptE,QAAUotE,EAGlD,OADAzoC,IAAUA,EAAQ,IAAIykC,IACf4F,EAAUY,EAAcC,EAAcd,EAASxE,EAAY5lC,EACpE,CACF,CACA,IAAK4qC,EACH,OAAO,EAGT,OADA5qC,IAAUA,EAAQ,IAAIykC,IA6NxB,SAAsBY,EAAQoD,EAAO2B,EAASxE,EAAYyE,EAAWrqC,GACnE,IAAI6qC,EA9qCqB,EA8qCTT,EACZe,EAAWpD,GAAW1C,GACtB+F,EAAYD,EAASl0E,OACrBo0E,EAAWtD,GAAWU,GACtB6C,EAAYD,EAASp0E,OAEzB,GAAIm0E,GAAaE,IAAcT,EAC7B,OAAO,EAET,IAAI7qE,EAAQorE,EACZ,KAAOprE,KAAS,CACd,IAAI3N,EAAM84E,EAASnrE,GACnB,KAAM6qE,EAAYx4E,KAAOo2E,EAAQ72E,EAAe8M,KAAK+pE,EAAOp2E,IAC1D,OAAO,CAEX,CAEA,IAAIq1E,EAAU1nC,EAAM9rB,IAAImxD,GACxB,GAAIqC,GAAW1nC,EAAM9rB,IAAIu0D,GACvB,OAAOf,GAAWe,EAEpB,IAAI7rE,GAAS,EACbojC,EAAM7rB,IAAIkxD,EAAQoD,GAClBzoC,EAAM7rB,IAAIs0D,EAAOpD,GAEjB,IAAIkG,EAAWV,EACf,OAAS7qE,EAAQorE,GAAW,CAE1B,IAAI9F,EAAWD,EADfhzE,EAAM84E,EAASnrE,IAEXwrE,EAAW/C,EAAMp2E,GAErB,GAAIuzE,EACF,IAAI6F,EAAWZ,EACXjF,EAAW4F,EAAUlG,EAAUjzE,EAAKo2E,EAAOpD,EAAQrlC,GACnD4lC,EAAWN,EAAUkG,EAAUn5E,EAAKgzE,EAAQoD,EAAOzoC,GAGzD,UAAmB1oC,IAAbm0E,EACGnG,IAAakG,GAAYnB,EAAU/E,EAAUkG,EAAUpB,EAASxE,EAAY5lC,GAC7EyrC,GACD,CACL7uE,GAAS,EACT,KACF,CACA2uE,IAAaA,EAAkB,eAAPl5E,EAC1B,CACA,GAAIuK,IAAW2uE,EAAU,CACvB,IAAIG,EAAUrG,EAAOppE,YACjB0vE,EAAUlD,EAAMxsE,YAGhByvE,GAAWC,KACV,gBAAiBtG,MAAU,gBAAiBoD,IACzB,mBAAXiD,GAAyBA,aAAmBA,GACjC,mBAAXC,GAAyBA,aAAmBA,IACvD/uE,GAAS,EAEb,CAGA,OAFAojC,EAAc,OAAEqlC,GAChBrlC,EAAc,OAAEyoC,GACT7rE,CACT,CA1RSiV,CAAawzD,EAAQoD,EAAO2B,EAASxE,EAAYyE,EAAWrqC,EACrE,CA5DS4rC,CAAgBvwE,EAAOotE,EAAO2B,EAASxE,EAAYuE,GAAanqC,GACzE,CAqEA,SAASkoC,GAAa7sE,GACpB,SAAKuW,GAASvW,IAwahB,SAAkBsU,GAChB,QAASizD,GAAeA,KAAcjzD,CACxC,CA1a0Bk8D,CAASxwE,MAGnBkjC,GAAWljC,GAAS2nE,EAAa5B,GAChCpvE,KAAK+xE,GAAS1oE,GAC/B,CAqBA,SAASwtE,GAASxD,GAChB,GAyZIsB,GADetrE,EAxZFgqE,IAyZGhqE,EAAMY,YACtBmqE,EAAwB,mBAARO,GAAsBA,EAAKzqE,WAAcwmE,EAEtDrnE,IAAU+qE,EA3Zf,OAAO3C,GAAW4B,GAuZtB,IAAqBhqE,EACfsrE,EACAP,EAvZAxpE,EAAS,GACb,IAAK,IAAIvK,KAAO6L,OAAOmnE,GACjBzzE,EAAe8M,KAAK2mE,EAAQhzE,IAAe,eAAPA,GACtCuK,EAAOgF,KAAKvP,GAGhB,OAAOuK,CACT,CAeA,SAASkV,GAAYksC,EAAOyqB,EAAO2B,EAASxE,EAAYyE,EAAWrqC,GACjE,IAAI6qC,EAlhCqB,EAkhCTT,EACZ0B,EAAY9tB,EAAM/mD,OAClBq0E,EAAY7C,EAAMxxE,OAEtB,GAAI60E,GAAaR,KAAeT,GAAaS,EAAYQ,GACvD,OAAO,EAGT,IAAIpE,EAAU1nC,EAAM9rB,IAAI8pC,GACxB,GAAI0pB,GAAW1nC,EAAM9rB,IAAIu0D,GACvB,OAAOf,GAAWe,EAEpB,IAAIzoE,GAAS,EACTpD,GAAS,EACTmvE,EA/hCuB,EA+hCf3B,EAAoC,IAAIV,QAAWpyE,EAM/D,IAJA0oC,EAAM7rB,IAAI6pC,EAAOyqB,GACjBzoC,EAAM7rB,IAAIs0D,EAAOzqB,KAGRh+C,EAAQ8rE,GAAW,CAC1B,IAAIE,EAAWhuB,EAAMh+C,GACjBwrE,EAAW/C,EAAMzoE,GAErB,GAAI4lE,EACF,IAAI6F,EAAWZ,EACXjF,EAAW4F,EAAUQ,EAAUhsE,EAAOyoE,EAAOzqB,EAAOhe,GACpD4lC,EAAWoG,EAAUR,EAAUxrE,EAAOg+C,EAAOyqB,EAAOzoC,GAE1D,QAAiB1oC,IAAbm0E,EAAwB,CAC1B,GAAIA,EACF,SAEF7uE,GAAS,EACT,KACF,CAEA,GAAImvE,GACF,IAAKxC,EAAUd,GAAO,SAAS+C,EAAUS,GACnC,GA72Ba55E,EA62BO45E,GAANF,EA52BXt6C,IAAIp/B,KA62BF25E,IAAaR,GAAYnB,EAAU2B,EAAUR,EAAUpB,EAASxE,EAAY5lC,IAC/E,OAAO+rC,EAAKnqE,KAAKqqE,GA/2B/B,IAAyB55E,CAi3Bf,IAAI,CACNuK,GAAS,EACT,KACF,OACK,GACDovE,IAAaR,IACXnB,EAAU2B,EAAUR,EAAUpB,EAASxE,EAAY5lC,GACpD,CACLpjC,GAAS,EACT,KACF,CACF,CAGA,OAFAojC,EAAc,OAAEge,GAChBhe,EAAc,OAAEyoC,GACT7rE,CACT,CAwKA,SAASmrE,GAAW1C,GAClB,OApZF,SAAwBA,EAAQsC,EAAUC,GACxC,IAAIhrE,EAAS+qE,EAAStC,GACtB,OAAO9tE,GAAQ8tE,GAAUzoE,EAhuB3B,SAAmBohD,EAAOt3B,GAKxB,IAJA,IAAI1mB,GAAS,EACT/I,EAASyvB,EAAOzvB,OAChBxC,EAASupD,EAAM/mD,SAEV+I,EAAQ/I,GACf+mD,EAAMvpD,EAASuL,GAAS0mB,EAAO1mB,GAEjC,OAAOg+C,CACT,CAutBoC6pB,CAAUjrE,EAAQgrE,EAAYvC,GAClE,CAiZSyC,CAAezC,EAAQrzD,GAAMu0D,GACtC,CAUA,SAAS8B,GAAWh0E,EAAKhC,GACvB,IAsHiBgJ,EACb5J,EAvHA+uB,EAAOnsB,EAAIqwE,SACf,OAuHgB,WADZjzE,SADa4J,EArHAhJ,KAuHmB,UAARZ,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAV4J,EACU,OAAVA,GAxHDmlB,EAAmB,iBAAPnuB,EAAkB,SAAW,QACzCmuB,EAAKnsB,GACX,CAUA,SAASsvE,GAAU0B,EAAQhzE,GACzB,IAAIgJ,EAxjCN,SAAkBgqE,EAAQhzE,GACxB,OAAiB,MAAVgzE,OAAiB/tE,EAAY+tE,EAAOhzE,EAC7C,CAsjCci2E,CAASjD,EAAQhzE,GAC7B,OAAO61E,GAAa7sE,GAASA,OAAQ/D,CACvC,CAr2BAw0C,GAAK5vC,UAAU0Q,MAvEf,WACEvQ,KAAKqoE,SAAWb,GAAeA,GAAa,MAAQ,CAAC,EACrDxnE,KAAK8hC,KAAO,CACd,EAqEA2N,GAAK5vC,UAAkB,OAzDvB,SAAoB7J,GAClB,IAAIuK,EAASP,KAAKo1B,IAAIp/B,WAAegK,KAAKqoE,SAASryE,GAEnD,OADAgK,KAAK8hC,MAAQvhC,EAAS,EAAI,EACnBA,CACT,EAsDAkvC,GAAK5vC,UAAUgY,IA3Cf,SAAiB7hB,GACf,IAAImuB,EAAOnkB,KAAKqoE,SAChB,GAAIb,GAAc,CAChB,IAAIjnE,EAAS4jB,EAAKnuB,GAClB,OAAOuK,IAAW4iE,OAAiBloE,EAAYsF,CACjD,CACA,OAAOhL,EAAe8M,KAAK8hB,EAAMnuB,GAAOmuB,EAAKnuB,QAAOiF,CACtD,EAqCAw0C,GAAK5vC,UAAUu1B,IA1Bf,SAAiBp/B,GACf,IAAImuB,EAAOnkB,KAAKqoE,SAChB,OAAOb,QAA8BvsE,IAAdkpB,EAAKnuB,GAAsBT,EAAe8M,KAAK8hB,EAAMnuB,EAC9E,EAwBAy5C,GAAK5vC,UAAUiY,IAZf,SAAiB9hB,EAAKgJ,GACpB,IAAImlB,EAAOnkB,KAAKqoE,SAGhB,OAFAroE,KAAK8hC,MAAQ9hC,KAAKo1B,IAAIp/B,GAAO,EAAI,EACjCmuB,EAAKnuB,GAAQwxE,SAA0BvsE,IAAV+D,EAAuBmkE,EAAiBnkE,EAC9DgB,IACT,EAsHAkoE,GAAUroE,UAAU0Q,MApFpB,WACEvQ,KAAKqoE,SAAW,GAChBroE,KAAK8hC,KAAO,CACd,EAkFAomC,GAAUroE,UAAkB,OAvE5B,SAAyB7J,GACvB,IAAImuB,EAAOnkB,KAAKqoE,SACZ1kE,EAAQwlE,GAAahlD,EAAMnuB,GAE/B,QAAI2N,EAAQ,KAIRA,GADYwgB,EAAKvpB,OAAS,EAE5BupB,EAAKhhB,MAELmhB,EAAOjiB,KAAK8hB,EAAMxgB,EAAO,KAEzB3D,KAAK8hC,MACA,EACT,EAyDAomC,GAAUroE,UAAUgY,IA9CpB,SAAsB7hB,GACpB,IAAImuB,EAAOnkB,KAAKqoE,SACZ1kE,EAAQwlE,GAAahlD,EAAMnuB,GAE/B,OAAO2N,EAAQ,OAAI1I,EAAYkpB,EAAKxgB,GAAO,EAC7C,EA0CAukE,GAAUroE,UAAUu1B,IA/BpB,SAAsBp/B,GACpB,OAAOmzE,GAAanpE,KAAKqoE,SAAUryE,IAAQ,CAC7C,EA8BAkyE,GAAUroE,UAAUiY,IAlBpB,SAAsB9hB,EAAKgJ,GACzB,IAAImlB,EAAOnkB,KAAKqoE,SACZ1kE,EAAQwlE,GAAahlD,EAAMnuB,GAQ/B,OANI2N,EAAQ,KACR3D,KAAK8hC,KACP3d,EAAK5e,KAAK,CAACvP,EAAKgJ,KAEhBmlB,EAAKxgB,GAAO,GAAK3E,EAEZgB,IACT,EAwGAmoE,GAAStoE,UAAU0Q,MAtEnB,WACEvQ,KAAK8hC,KAAO,EACZ9hC,KAAKqoE,SAAW,CACd,KAAQ,IAAI54B,GACZ,IAAO,IAAKkF,IAAOuzB,IACnB,OAAU,IAAIz4B,GAElB,EAgEA04B,GAAStoE,UAAkB,OArD3B,SAAwB7J,GACtB,IAAIuK,EAASyrE,GAAWhsE,KAAMhK,GAAa,OAAEA,GAE7C,OADAgK,KAAK8hC,MAAQvhC,EAAS,EAAI,EACnBA,CACT,EAkDA4nE,GAAStoE,UAAUgY,IAvCnB,SAAqB7hB,GACnB,OAAOg2E,GAAWhsE,KAAMhK,GAAK6hB,IAAI7hB,EACnC,EAsCAmyE,GAAStoE,UAAUu1B,IA3BnB,SAAqBp/B,GACnB,OAAOg2E,GAAWhsE,KAAMhK,GAAKo/B,IAAIp/B,EACnC,EA0BAmyE,GAAStoE,UAAUiY,IAdnB,SAAqB9hB,EAAKgJ,GACxB,IAAImlB,EAAO6nD,GAAWhsE,KAAMhK,GACxB8rC,EAAO3d,EAAK2d,KAIhB,OAFA3d,EAAKrM,IAAI9hB,EAAKgJ,GACdgB,KAAK8hC,MAAQ3d,EAAK2d,MAAQA,EAAO,EAAI,EAC9B9hC,IACT,EAwDAqtE,GAASxtE,UAAUtD,IAAM8wE,GAASxtE,UAAU0F,KAnB5C,SAAqBvG,GAEnB,OADAgB,KAAKqoE,SAASvwD,IAAI9Y,EAAOmkE,GAClBnjE,IACT,EAiBAqtE,GAASxtE,UAAUu1B,IANnB,SAAqBp2B,GACnB,OAAOgB,KAAKqoE,SAASjzC,IAAIp2B,EAC3B,EAoGAopE,GAAMvoE,UAAU0Q,MA3EhB,WACEvQ,KAAKqoE,SAAW,IAAIH,GACpBloE,KAAK8hC,KAAO,CACd,EAyEAsmC,GAAMvoE,UAAkB,OA9DxB,SAAqB7J,GACnB,IAAImuB,EAAOnkB,KAAKqoE,SACZ9nE,EAAS4jB,EAAa,OAAEnuB,GAG5B,OADAgK,KAAK8hC,KAAO3d,EAAK2d,KACVvhC,CACT,EAyDA6nE,GAAMvoE,UAAUgY,IA9ChB,SAAkB7hB,GAChB,OAAOgK,KAAKqoE,SAASxwD,IAAI7hB,EAC3B,EA6CAoyE,GAAMvoE,UAAUu1B,IAlChB,SAAkBp/B,GAChB,OAAOgK,KAAKqoE,SAASjzC,IAAIp/B,EAC3B,EAiCAoyE,GAAMvoE,UAAUiY,IArBhB,SAAkB9hB,EAAKgJ,GACrB,IAAImlB,EAAOnkB,KAAKqoE,SAChB,GAAIlkD,aAAgB+jD,GAAW,CAC7B,IAAIgE,EAAQ/nD,EAAKkkD,SACjB,IAAK1zB,IAAQu3B,EAAMtxE,OAASuxE,IAG1B,OAFAD,EAAM3mE,KAAK,CAACvP,EAAKgJ,IACjBgB,KAAK8hC,OAAS3d,EAAK2d,KACZ9hC,KAETmkB,EAAOnkB,KAAKqoE,SAAW,IAAIF,GAAS+D,EACtC,CAGA,OAFA/nD,EAAKrM,IAAI9hB,EAAKgJ,GACdgB,KAAK8hC,KAAO3d,EAAK2d,KACV9hC,IACT,EA8hBA,IAAIkqE,GAAcjD,GAA+B,SAAS+B,GACxD,OAAc,MAAVA,EACK,IAETA,EAASnnE,OAAOmnE,GA9sClB,SAAqBrnB,EAAO7c,GAM1B,IALA,IAAInhC,GAAS,EACT/I,EAAkB,MAAT+mD,EAAgB,EAAIA,EAAM/mD,OACnCi1E,EAAW,EACXtvE,EAAS,KAEJoD,EAAQ/I,GAAQ,CACvB,IAAIoE,EAAQ2iD,EAAMh+C,GACdmhC,EAAU9lC,EAAO2E,EAAOg+C,KAC1BphD,EAAOsvE,KAAc7wE,EAEzB,CACA,OAAOuB,CACT,CAksCSuvE,CAAY7I,GAAiB+B,IAAS,SAASmC,GACpD,OAAOnE,EAAqB3kE,KAAK2mE,EAAQmC,EAC3C,IACF,EAodA,WACE,MAAO,EACT,EA7cIzB,GAAS+D,GAkCb,SAAS3E,GAAQ9pE,EAAOpE,GAEtB,SADAA,EAAmB,MAAVA,EAAiBwoE,EAAmBxoE,KAE1B,iBAAToE,GAAqBgmE,EAASrvE,KAAKqJ,KAC1CA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQpE,CAC7C,CA2DA,SAAS8sE,GAASp0D,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOmzD,EAAapkE,KAAKiR,EAC3B,CAAE,MAAOkW,GAAI,CACb,IACE,OAAQlW,EAAO,EACjB,CAAE,MAAOkW,GAAI,CACf,CACA,MAAO,EACT,CAkCA,SAAS0/C,GAAGlqE,EAAOotE,GACjB,OAAOptE,IAAUotE,GAAUptE,GAAUA,GAASotE,GAAUA,CAC1D,EA7IK/E,IAAYqC,GAAO,IAAIrC,GAAS,IAAIgF,YAAY,MAAQjI,GACxDzvB,IAAO+0B,GAAO,IAAI/0B,KAAQ+uB,GAC1BljE,IAAWkpE,GAAOlpE,GAAQC,YAAcojE,GACxC97B,IAAO2hC,GAAO,IAAI3hC,KAAQg8B,GAC1BwD,IAAWmC,GAAO,IAAInC,KAAYrD,KACrCwF,GAAS,SAAS1qE,GAChB,IAAIuB,EAASktE,GAAWzuE,GACpBsrE,EAAO/pE,GAAUqjE,EAAY5kE,EAAMY,iBAAc3E,EACjDqxE,EAAahC,EAAO5C,GAAS4C,GAAQ,GAEzC,GAAIgC,EACF,OAAQA,GACN,KAAK7E,GAAoB,OAAOrD,EAChC,KAAKuD,GAAe,OAAOjE,EAC3B,KAAKkE,GAAmB,OAAO/D,EAC/B,KAAKgE,GAAe,OAAO9D,EAC3B,KAAK+D,GAAmB,OAAO5D,EAGnC,OAAO3jE,CACT,GA6IF,IAAIooE,GAAckF,GAAgB,WAAa,OAAOlzE,SAAW,CAA/B,IAAsCkzE,GAAkB,SAAS7uE,GACjG,OAAOwpE,GAAaxpE,IAAUzJ,EAAe8M,KAAKrD,EAAO,YACtDgoE,EAAqB3kE,KAAKrD,EAAO,SACtC,EAyBI9D,GAAUJ,MAAMI,QAgDpB,IAAIisE,GAAWD,IA4Of,WACE,OAAO,CACT,EA3LA,SAAShlC,GAAWljC,GAClB,IAAKuW,GAASvW,GACZ,OAAO,EAIT,IAAI0nD,EAAM+mB,GAAWzuE,GACrB,OAAO0nD,GAAO8c,GAnmDH,8BAmmDc9c,GAxmDZ,0BAwmD6BA,GA7lD7B,kBA6lDgDA,CAC/D,CA4BA,SAAS6lB,GAASvtE,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GAASokE,CAC7C,CA2BA,SAAS7tD,GAASvW,GAChB,IAAI5J,SAAc4J,EAClB,OAAgB,MAATA,IAA0B,UAAR5J,GAA4B,YAARA,EAC/C,CA0BA,SAASozE,GAAaxpE,GACpB,OAAgB,MAATA,GAAiC,iBAATA,CACjC,CAmBA,IAAIiuE,GAAeD,EAhiDnB,SAAmB15D,GACjB,OAAO,SAAStU,GACd,OAAOsU,EAAKtU,EACd,CACF,CA4hDsC+wE,CAAU/C,GAnvBhD,SAA0BhuE,GACxB,OAAOwpE,GAAaxpE,IAClButE,GAASvtE,EAAMpE,WAAa+xE,EAAec,GAAWzuE,GAC1D,EA8wBA,SAAS2W,GAAKqzD,GACZ,OA1NgB,OADGhqE,EA2NAgqE,IA1NKuD,GAASvtE,EAAMpE,UAAYsnC,GAAWljC,GA0NjCspE,GAAcU,GAAUwD,GAASxD,GA3NhE,IAAqBhqE,CA4NrB,CAyCArK,EAAOyxB,QAlNP,SAAiBpnB,EAAOotE,GACtB,OAAO0B,GAAY9uE,EAAOotE,EAC5B,+BCtmDAvqE,OAAOC,eAAeskB,EAAS,aAAc,CAAEpnB,OAAO,IACtD,MAAMgxE,EAAY,EAAQ,MACpBC,EAAU,EAAQ,MACxB,IAAIC,GACJ,SAAWA,GAwBPA,EAAal9D,QAvBb,SAAiBza,EAAI,CAAC,EAAGC,EAAI,CAAC,EAAG23E,GAAW,GACvB,iBAAN53E,IACPA,EAAI,CAAC,GAEQ,iBAANC,IACPA,EAAI,CAAC,GAET,IAAI+L,EAAayrE,EAAUx3E,GACtB23E,IACD5rE,EAAa1C,OAAO8T,KAAKpR,GAAYwJ,QAAO,CAAC67D,EAAM5zE,KACxB,MAAnBuO,EAAWvO,KACX4zE,EAAK5zE,GAAOuO,EAAWvO,IAEpB4zE,IACR,CAAC,IAER,IAAK,MAAM5zE,KAAOuC,OACC0C,IAAX1C,EAAEvC,SAAiCiF,IAAXzC,EAAExC,KAC1BuO,EAAWvO,GAAOuC,EAAEvC,IAG5B,OAAO6L,OAAO8T,KAAKpR,GAAY3J,OAAS,EAAI2J,OAAatJ,CAC7D,EAmBAi1E,EAAa12E,KAjBb,SAAcjB,EAAI,CAAC,EAAGC,EAAI,CAAC,GACN,iBAAND,IACPA,EAAI,CAAC,GAEQ,iBAANC,IACPA,EAAI,CAAC,GAET,MAAM+L,EAAa1C,OAAO8T,KAAKpd,GAC1BoK,OAAOd,OAAO8T,KAAKnd,IACnBuV,QAAO,CAACyjD,EAAOx7D,KACXi6E,EAAQ13E,EAAEvC,GAAMwC,EAAExC,MACnBw7D,EAAMx7D,QAAkBiF,IAAXzC,EAAExC,GAAqB,KAAOwC,EAAExC,IAE1Cw7D,IACR,CAAC,GACJ,OAAO3vD,OAAO8T,KAAKpR,GAAY3J,OAAS,EAAI2J,OAAatJ,CAC7D,EAiBAi1E,EAAaE,OAfb,SAAgBxrE,EAAO,CAAC,EAAG6I,EAAO,CAAC,GAC/B7I,EAAOA,GAAQ,CAAC,EAChB,MAAMyrE,EAAexuE,OAAO8T,KAAKlI,GAAMM,QAAO,CAACuiE,EAAMt6E,KAC7CyX,EAAKzX,KAAS4O,EAAK5O,SAAsBiF,IAAd2J,EAAK5O,KAChCs6E,EAAKt6E,GAAOyX,EAAKzX,IAEds6E,IACR,CAAC,GACJ,OAAOzuE,OAAO8T,KAAK/Q,GAAMmJ,QAAO,CAACuiE,EAAMt6E,KAC/B4O,EAAK5O,KAASyX,EAAKzX,SAAsBiF,IAAdwS,EAAKzX,KAChCs6E,EAAKt6E,GAAO,MAETs6E,IACRD,EACP,EAoBAH,EAAazqE,UAlBb,SAAmBlN,EAAGC,EAAG+3E,GAAW,GAChC,GAAiB,iBAANh4E,EACP,OAAOC,EAEX,GAAiB,iBAANA,EACP,OAEJ,IAAK+3E,EACD,OAAO/3E,EAEX,MAAM+L,EAAa1C,OAAO8T,KAAKnd,GAAGuV,QAAO,CAACyjD,EAAOx7D,UAC9BiF,IAAX1C,EAAEvC,KACFw7D,EAAMx7D,GAAOwC,EAAExC,IAEZw7D,IACR,CAAC,GACJ,OAAO3vD,OAAO8T,KAAKpR,GAAY3J,OAAS,EAAI2J,OAAatJ,CAC7D,CAEH,CA9ED,CA8EGi1E,IAAiBA,EAAe,CAAC,IACpC9pD,EAAA,QAAkB8pD,+BCnFlBruE,OAAOC,eAAeskB,EAAS,aAAc,CAAEpnB,OAAO,IACtDonB,EAAQ8pD,aAAe9pD,EAAQoqD,WAAapqD,EAAQqqD,QAAK,EACzD,MAAMj3E,EAAO,EAAQ,MACfw2E,EAAY,EAAQ,MACpBC,EAAU,EAAQ,MAClBS,EAAiB,EAAQ,MAC/BtqD,EAAQ8pD,aAAeQ,EAAej8B,QACtC,MAAMk8B,EAAO,EAAQ,MACrBvqD,EAAQqqD,GAAKE,EAAKl8B,QAClB,MAAMm8B,EAAe,EAAQ,MAC7BxqD,EAAQoqD,WAAaI,EAAan8B,QAClC,MAAMo8B,EAAiBvxD,OAAOC,aAAa,GACrCuxD,EAAsB,CAACv4E,EAAGC,KAC5B,GAAiB,iBAAND,GAAwB,OAANA,EACzB,MAAM,IAAIqyB,MAAM,0BAA0BryB,GAE9C,GAAiB,iBAANC,GAAwB,OAANA,EACzB,MAAM,IAAIoyB,MAAM,0BAA0BpyB,GAE9C,MAAMu4E,EAAYlvE,OAAO8T,KAAKpd,GAAG,GACjC,IAAKw4E,GAAaA,IAAclvE,OAAO8T,KAAKnd,GAAG,GAC3C,MAAM,IAAIoyB,MAAM,4BAA4BmmD,QAAgBlvE,OAAO8T,KAAKnd,GAAG,MAE/E,MAAO,CAACu4E,EAAWx4E,EAAEw4E,GAAYv4E,EAAEu4E,GAAW,EAElD,MAAMC,EACF,WAAApxE,CAAYizC,GAEJ/3C,MAAMI,QAAQ23C,GACd7yC,KAAK6yC,IAAMA,EAEC,MAAPA,GAAe/3C,MAAMI,QAAQ23C,EAAIA,KACtC7yC,KAAK6yC,IAAMA,EAAIA,IAGf7yC,KAAK6yC,IAAM,EAEnB,CACA,oBAAOo+B,CAAcF,EAAWl8B,GAC5B70C,KAAK07C,SAASq1B,GAAal8B,CAC/B,CACA,sBAAOq8B,CAAgBH,UACZ/wE,KAAK07C,SAASq1B,EACzB,CACA,iBAAOI,CAAWJ,GACd,MAAMl8B,EAAU70C,KAAK07C,SAASq1B,GAC9B,IAAKl8B,EACD,MAAM,IAAIjqB,MAAM,+BAA+BmmD,MAEnD,OAAOl8B,CACX,CACA,MAAAu8B,CAAO9wE,EAAKiE,GACR,MAAM8sE,EAAQ,CAAC,EACf,MAAmB,iBAAR/wE,GAAmC,IAAfA,EAAI1F,OACxBoF,MAEXqxE,EAAMD,OAAS9wE,EACG,MAAdiE,GACsB,iBAAfA,GACP1C,OAAO8T,KAAKpR,GAAY3J,OAAS,IACjCy2E,EAAM9sE,WAAaA,GAEhBvE,KAAKuF,KAAK8rE,GACrB,CACA,OAAOz2E,GACH,OAAIA,GAAU,EACHoF,KAEJA,KAAKuF,KAAK,CAAE+rE,OAAQ12E,GAC/B,CACA,MAAA22E,CAAO32E,EAAQ2J,GACX,GAAsB,iBAAX3J,GAAuBA,GAAU,EACxC,OAAOoF,KAEX,MAAMqxE,EAAQ,CAAEE,OAAQ32E,GAMxB,OALkB,MAAd2J,GACsB,iBAAfA,GACP1C,OAAO8T,KAAKpR,GAAY3J,OAAS,IACjCy2E,EAAM9sE,WAAaA,GAEhBvE,KAAKuF,KAAK8rE,EACrB,CACA,IAAA9rE,CAAK8rE,GACD,IAAI1tE,EAAQ3D,KAAK6yC,IAAIj4C,OACjB42E,EAASxxE,KAAK6yC,IAAIlvC,EAAQ,GAE9B,GADA0tE,EAAQrB,EAAUqB,GACI,iBAAXG,EAAqB,CAC5B,GAA4B,iBAAjBH,EAAMC,QACY,iBAAlBE,EAAOF,OAEd,OADAtxE,KAAK6yC,IAAIlvC,EAAQ,GAAK,CAAE2tE,OAAQE,EAAOF,OAASD,EAAMC,QAC/CtxE,KAIX,GAA6B,iBAAlBwxE,EAAOF,QAAuC,MAAhBD,EAAMD,SAC3CztE,GAAS,EACT6tE,EAASxxE,KAAK6yC,IAAIlvC,EAAQ,GACJ,iBAAX6tE,GAEP,OADAxxE,KAAK6yC,IAAI4P,QAAQ4uB,GACVrxE,KAGf,GAAIiwE,EAAQoB,EAAM9sE,WAAYitE,EAAOjtE,YAAa,CAC9C,GAA4B,iBAAjB8sE,EAAMD,QACY,iBAAlBI,EAAOJ,OAKd,OAJApxE,KAAK6yC,IAAIlvC,EAAQ,GAAK,CAAEytE,OAAQI,EAAOJ,OAASC,EAAMD,QACtB,iBAArBC,EAAM9sE,aACbvE,KAAK6yC,IAAIlvC,EAAQ,GAAGY,WAAa8sE,EAAM9sE,YAEpCvE,KAEN,GAA4B,iBAAjBqxE,EAAME,QACO,iBAAlBC,EAAOD,OAKd,OAJAvxE,KAAK6yC,IAAIlvC,EAAQ,GAAK,CAAE4tE,OAAQC,EAAOD,OAASF,EAAME,QACtB,iBAArBF,EAAM9sE,aACbvE,KAAK6yC,IAAIlvC,EAAQ,GAAGY,WAAa8sE,EAAM9sE,YAEpCvE,IAEf,CACJ,CAOA,OANI2D,IAAU3D,KAAK6yC,IAAIj4C,OACnBoF,KAAK6yC,IAAIttC,KAAK8rE,GAGdrxE,KAAK6yC,IAAIvuB,OAAO3gB,EAAO,EAAG0tE,GAEvBrxE,IACX,CACA,IAAAyxE,GACI,MAAMD,EAASxxE,KAAK6yC,IAAI7yC,KAAK6yC,IAAIj4C,OAAS,GAI1C,OAHI42E,GAAmC,iBAAlBA,EAAOD,SAAwBC,EAAOjtE,YACvDvE,KAAK6yC,IAAI1vC,MAENnD,IACX,CACA,MAAAiD,CAAO6hC,GACH,OAAO9kC,KAAK6yC,IAAI5vC,OAAO6hC,EAC3B,CACA,OAAAhiC,CAAQgiC,GACJ9kC,KAAK6yC,IAAI/vC,QAAQgiC,EACrB,CACA,GAAA9sC,CAAI8sC,GACA,OAAO9kC,KAAK6yC,IAAI76C,IAAI8sC,EACxB,CACA,SAAA4sC,CAAU5sC,GACN,MAAM6sC,EAAS,GACTC,EAAS,GAKf,OAJA5xE,KAAK8C,SAAS+uE,KACK/sC,EAAU+sC,GAAMF,EAASC,GACjCrsE,KAAKssE,EAAG,IAEZ,CAACF,EAAQC,EACpB,CACA,MAAA7jE,CAAO+2B,EAAWhyB,GACd,OAAO9S,KAAK6yC,IAAI9kC,OAAO+2B,EAAWhyB,EACtC,CACA,YAAAg/D,GACI,OAAO9xE,KAAK+N,QAAO,CAACnT,EAAQsxD,IACpBA,EAAKklB,OACEx2E,EAAS+1E,EAAKl8B,QAAQ75C,OAAOsxD,GAE/BA,EAAKolB,OACH12E,EAASsxD,EAAKolB,OAElB12E,GACR,EACP,CACA,MAAAA,GACI,OAAOoF,KAAK+N,QAAO,CAACnT,EAAQsxD,IACjBtxD,EAAS+1E,EAAKl8B,QAAQ75C,OAAOsxD,IACrC,EACP,CACA,KAAArkD,CAAMoD,EAAQ,EAAGy2B,EAAMqV,KACnB,MAAMlE,EAAM,GACNk/B,EAAO,IAAInB,EAAan8B,QAAQz0C,KAAK6yC,KAC3C,IAAIlvC,EAAQ,EACZ,KAAOA,EAAQ+9B,GAAOqwC,EAAKC,WAAW,CAClC,IAAIC,EACAtuE,EAAQsH,EACRgnE,EAASF,EAAKhxE,KAAKkK,EAAQtH,IAG3BsuE,EAASF,EAAKhxE,KAAK2gC,EAAM/9B,GACzBkvC,EAAIttC,KAAK0sE,IAEbtuE,GAASgtE,EAAKl8B,QAAQ75C,OAAOq3E,EACjC,CACA,OAAO,IAAIjB,EAAMn+B,EACrB,CACA,OAAA7/B,CAAQo5D,GACJ,MAAM8F,EAAW,IAAItB,EAAan8B,QAAQz0C,KAAK6yC,KACzCs/B,EAAY,IAAIvB,EAAan8B,QAAQ23B,EAAMv5B,KAC3CA,EAAM,GACNu/B,EAAaD,EAAUh6B,OAC7B,GAAkB,MAAdi6B,GAC6B,iBAAtBA,EAAWb,QACO,MAAzBa,EAAW7tE,WAAoB,CAC/B,IAAI8tE,EAAYD,EAAWb,OAC3B,KAA+B,WAAxBW,EAAS14B,YACZ04B,EAASI,cAAgBD,GACzBA,GAAaH,EAASI,aACtBz/B,EAAIttC,KAAK2sE,EAASnxE,QAElBqxE,EAAWb,OAASc,EAAY,GAChCF,EAAUpxE,KAAKqxE,EAAWb,OAASc,EAE3C,CACA,MAAMtmE,EAAQ,IAAIilE,EAAMn+B,GACxB,KAAOq/B,EAASF,WAAaG,EAAUH,WACnC,GAA6B,WAAzBG,EAAU34B,WACVztC,EAAMxG,KAAK4sE,EAAUpxE,aAEpB,GAA4B,WAAxBmxE,EAAS14B,WACdztC,EAAMxG,KAAK2sE,EAASnxE,YAEnB,CACD,MAAMnG,EAASjD,KAAKE,IAAIq6E,EAASI,aAAcH,EAAUG,cACnDC,EAASL,EAASnxE,KAAKnG,GACvB43E,EAAUL,EAAUpxE,KAAKnG,GAC/B,GAAI43E,EAAQjB,OAAQ,CAChB,MAAMF,EAAQ,CAAC,EACf,GAA6B,iBAAlBkB,EAAOhB,OACdF,EAAME,OACwB,iBAAnBiB,EAAQjB,OAAsB32E,EAAS43E,EAAQjB,YAG1D,GAA8B,iBAAnBiB,EAAQjB,OACM,MAAjBgB,EAAOhB,OACPF,EAAMD,OAASmB,EAAOnB,OAGtBC,EAAME,OAASgB,EAAOhB,WAGzB,CACD,MAAMpwC,EAA0B,MAAjBoxC,EAAOhB,OAAiB,SAAW,UAC3CR,EAAW0B,EAAUC,GAAa5B,EAAoByB,EAAOpxC,GAASqxC,EAAQjB,QAC/E18B,EAAUm8B,EAAMG,WAAWJ,GACjCM,EAAMlwC,GAAU,CACZ,CAAC4vC,GAAYl8B,EAAQ7hC,QAAQy/D,EAAUC,EAAsB,WAAXvxC,GAE1D,CAGJ,MAAM58B,EAAamsE,EAAej8B,QAAQzhC,QAAQu/D,EAAOhuE,WAAYiuE,EAAQjuE,WAAqC,iBAAlBguE,EAAOhB,QAMvG,GALIhtE,IACA8sE,EAAM9sE,WAAaA,GAEvBwH,EAAMxG,KAAK8rE,IAENc,EAAUH,WACX/B,EAAQlkE,EAAM8mC,IAAI9mC,EAAM8mC,IAAIj4C,OAAS,GAAIy2E,GAAQ,CACjD,MAAM30D,EAAO,IAAIs0D,EAAMkB,EAASx1D,QAChC,OAAO3Q,EAAMpJ,OAAO+Z,GAAM+0D,MAC9B,CAGJ,KACmC,iBAAnBe,EAAQlB,SACM,iBAAlBiB,EAAOhB,QACe,iBAAlBgB,EAAOhB,QAAyC,OAAlBgB,EAAOhB,SACjDxlE,EAAMxG,KAAKitE,EAEnB,CAEJ,OAAOzmE,EAAM0lE,MACjB,CACA,MAAA9uE,CAAOypE,GACH,MAAMrgE,EAAQ,IAAIilE,EAAMhxE,KAAK6yC,IAAIhrC,SAKjC,OAJIukE,EAAMv5B,IAAIj4C,OAAS,IACnBmR,EAAMxG,KAAK6mE,EAAMv5B,IAAI,IACrB9mC,EAAM8mC,IAAM9mC,EAAM8mC,IAAIlwC,OAAOypE,EAAMv5B,IAAIhrC,MAAM,KAE1CkE,CACX,CACA,IAAAvS,CAAK4yE,EAAOrR,GACR,GAAI/6D,KAAK6yC,MAAQu5B,EAAMv5B,IACnB,OAAO,IAAIm+B,EAEf,MAAM2B,EAAU,CAAC3yE,KAAMosE,GAAOp0E,KAAK+T,GACxBA,EACF/T,KAAK65E,IACN,GAAiB,MAAbA,EAAGT,OACH,MAA4B,iBAAdS,EAAGT,OAAsBS,EAAGT,OAASP,EAGvD,MAAM,IAAIjmD,MAAM,kBADH7e,IAAUqgE,EAAQ,KAAO,QACI,gBAAgB,IAEzD1mE,KAAK,MAERktE,EAAW,IAAI5B,EACf6B,EAAar5E,EAAKm5E,EAAQ,GAAIA,EAAQ,GAAI5X,GAAQ,GAClDmX,EAAW,IAAItB,EAAan8B,QAAQz0C,KAAK6yC,KACzCs/B,EAAY,IAAIvB,EAAan8B,QAAQ23B,EAAMv5B,KA8BjD,OA7BAggC,EAAW/vE,SAASw8B,IAChB,IAAI1kC,EAAS0kC,EAAU,GAAG1kC,OAC1B,KAAOA,EAAS,GAAG,CACf,IAAIk4E,EAAW,EACf,OAAQxzC,EAAU,IACd,KAAK9lC,EAAKwpE,OACN8P,EAAWn7E,KAAKE,IAAIs6E,EAAUG,aAAc13E,GAC5Cg4E,EAASrtE,KAAK4sE,EAAUpxE,KAAK+xE,IAC7B,MACJ,KAAKt5E,EAAKypE,OACN6P,EAAWn7E,KAAKE,IAAI+C,EAAQs3E,EAASI,cACrCJ,EAASnxE,KAAK+xE,GACdF,EAAStB,OAAOwB,GAChB,MACJ,KAAKt5E,EAAK0pE,MACN4P,EAAWn7E,KAAKE,IAAIq6E,EAASI,aAAcH,EAAUG,aAAc13E,GACnE,MAAM23E,EAASL,EAASnxE,KAAK+xE,GACvBN,EAAUL,EAAUpxE,KAAK+xE,GAC3B7C,EAAQsC,EAAOnB,OAAQoB,EAAQpB,QAC/BwB,EAASrB,OAAOuB,EAAUpC,EAAej8B,QAAQj7C,KAAK+4E,EAAOhuE,WAAYiuE,EAAQjuE,aAGjFquE,EAASrtE,KAAKitE,GAASlB,OAAOwB,GAI1Cl4E,GAAUk4E,CACd,KAEGF,EAASnB,MACpB,CACA,QAAAsB,CAASjuC,EAAWkuC,EAAU,MAC1B,MAAMjB,EAAO,IAAInB,EAAan8B,QAAQz0C,KAAK6yC,KAC3C,IAAIpP,EAAO,IAAIutC,EACXxvE,EAAI,EACR,KAAOuwE,EAAKC,WAAW,CACnB,GAAwB,WAApBD,EAAKv4B,WACL,OAEJ,MAAM+4B,EAASR,EAAK55B,OACdltC,EAAQ0lE,EAAKl8B,QAAQ75C,OAAO23E,GAAUR,EAAKO,aAC3C3uE,EAAiC,iBAAlB4uE,EAAOnB,OACtBmB,EAAOnB,OAAOl5E,QAAQ86E,EAAS/nE,GAASA,GACvC,EACP,GAAItH,EAAQ,EACR8/B,EAAKl+B,KAAKwsE,EAAKhxE,aAEd,GAAI4C,EAAQ,EACb8/B,EAAKl+B,KAAKwsE,EAAKhxE,KAAK4C,QAEnB,CACD,IAA0D,IAAtDmhC,EAAUrB,EAAMsuC,EAAKhxE,KAAK,GAAGwD,YAAc,CAAC,EAAG/C,GAC/C,OAEJA,GAAK,EACLiiC,EAAO,IAAIutC,CACf,CACJ,CACIvtC,EAAK7oC,SAAW,GAChBkqC,EAAUrB,EAAM,CAAC,EAAGjiC,EAE5B,CACA,MAAA4uE,CAAO3iE,GACH,MAAMwlE,EAAW,IAAIjC,EAgCrB,OA/BAhxE,KAAK+N,QAAO,CAACmlE,EAAWrB,KACpB,GAAIA,EAAGT,OACH6B,EAAS3B,OAAOX,EAAKl8B,QAAQ75C,OAAOi3E,QAEnC,IAAyB,iBAAdA,EAAGN,QAAwC,MAAjBM,EAAGttE,WAEzC,OADA0uE,EAAS1B,OAAOM,EAAGN,QACZ2B,EAAYrB,EAAGN,OAErB,GAAIM,EAAGP,QAA+B,iBAAdO,EAAGN,OAAqB,CACjD,MAAM32E,EAAUi3E,EAAGP,QAAUO,EAAGN,OAUhC,OATc9jE,EAAK5F,MAAMqrE,EAAWA,EAAYt4E,GAC1CkI,SAASqwE,IACPtB,EAAGP,OACH2B,EAAS1tE,KAAK4tE,GAETtB,EAAGN,QAAUM,EAAGttE,YACrB0uE,EAAS1B,OAAOZ,EAAKl8B,QAAQ75C,OAAOu4E,GAASzC,EAAej8B,QAAQ27B,OAAOyB,EAAGttE,WAAY4uE,EAAO5uE,YACrG,IAEG2uE,EAAYt4E,CACvB,CACK,GAAyB,iBAAdi3E,EAAGN,QAAqC,OAAdM,EAAGN,OAAiB,CAC1D,MAAM1pE,EAAQ4F,EAAK5F,MAAMqrE,EAAWA,EAAY,GAC1CC,EAAS,IAAIvC,EAAan8B,QAAQ5sC,EAAMgrC,KAAK9xC,QAC5CgwE,EAAWqC,EAAQC,GAAcvC,EAAoBe,EAAGN,OAAQ4B,EAAO/B,QACxEv8B,EAAUm8B,EAAMG,WAAWJ,GAEjC,OADAkC,EAAS1B,OAAO,CAAE,CAACR,GAAYl8B,EAAQu7B,OAAOgD,EAAQC,IAAe3C,EAAej8B,QAAQ27B,OAAOyB,EAAGttE,WAAY4uE,EAAO5uE,aAClH2uE,EAAY,CACvB,EACA,OAAOA,CAAS,GACjB,GACID,EAASxB,MACpB,CACA,SAAAhsE,CAAUnF,EAAKiwE,GAAW,GAEtB,GADAA,IAAaA,EACM,iBAARjwE,EACP,OAAON,KAAKszE,kBAAkBhzE,EAAKiwE,GAEvC,MAAMnE,EAAQ9rE,EACR4xE,EAAW,IAAItB,EAAan8B,QAAQz0C,KAAK6yC,KACzCs/B,EAAY,IAAIvB,EAAan8B,QAAQ23B,EAAMv5B,KAC3C9mC,EAAQ,IAAIilE,EAClB,KAAOkB,EAASF,WAAaG,EAAUH,WACnC,GAA4B,WAAxBE,EAAS14B,aACR+2B,GAAqC,WAAzB4B,EAAU34B,WAGtB,GAA6B,WAAzB24B,EAAU34B,WACfztC,EAAMxG,KAAK4sE,EAAUpxE,YAEpB,CACD,MAAMnG,EAASjD,KAAKE,IAAIq6E,EAASI,aAAcH,EAAUG,cACnDC,EAASL,EAASnxE,KAAKnG,GACvB43E,EAAUL,EAAUpxE,KAAKnG,GAC/B,GAAI23E,EAAOjB,OAEP,SAEC,GAAIkB,EAAQlB,OACbvlE,EAAMxG,KAAKitE,OAEV,CACD,MAAMC,EAAWF,EAAOhB,OAClBmB,EAAYF,EAAQjB,OAC1B,IAAIgC,EAAuC,iBAAdb,GAAwC,OAAdA,EACjDA,EACA93E,EACN,GAAwB,iBAAb63E,GACM,OAAbA,GACqB,iBAAdC,GACO,OAAdA,EAAoB,CACpB,MAAM3B,EAAYlvE,OAAO8T,KAAK88D,GAAU,GACxC,GAAI1B,IAAclvE,OAAO8T,KAAK+8D,GAAW,GAAI,CACzC,MAAM79B,EAAUm8B,EAAMG,WAAWJ,GAC7Bl8B,IACA0+B,EAAkB,CACd,CAACxC,GAAYl8B,EAAQpvC,UAAUgtE,EAAS1B,GAAY2B,EAAU3B,GAAYR,IAGtF,CACJ,CAEAxkE,EAAMwlE,OAAOgC,EAAiB7C,EAAej8B,QAAQhvC,UAAU8sE,EAAOhuE,WAAYiuE,EAAQjuE,WAAYgsE,GAC1G,CACJ,MAvCIxkE,EAAMwlE,OAAOZ,EAAKl8B,QAAQ75C,OAAOs3E,EAASnxE,SAyClD,OAAOgL,EAAM0lE,MACjB,CACA,iBAAA6B,CAAkB3vE,EAAO4sE,GAAW,GAChCA,IAAaA,EACb,MAAM2B,EAAW,IAAItB,EAAan8B,QAAQz0C,KAAK6yC,KAC/C,IAAIz6C,EAAS,EACb,KAAO85E,EAASF,WAAa55E,GAAUuL,GAAO,CAC1C,MAAM/I,EAASs3E,EAASI,aAClBkB,EAAWtB,EAAS14B,WAC1B04B,EAASnxE,OACQ,WAAbyyE,GAIkB,WAAbA,IAA0Bp7E,EAASuL,IAAU4sE,KAClD5sE,GAAS/I,GAEbxC,GAAUwC,GANN+I,GAAShM,KAAKE,IAAI+C,EAAQ+I,EAAQvL,EAO1C,CACA,OAAOuL,CACX,EAEJqtE,EAAMP,GAAKE,EAAKl8B,QAChBu8B,EAAMR,WAAaI,EAAan8B,QAChCu8B,EAAMd,aAAeQ,EAAej8B,QACpCu8B,EAAMt1B,SAAW,CAAC,EAClBt1B,EAAA,QAAkB4qD,EAEdr8E,EAAOyxB,QAAU4qD,EACjBr8E,EAAOyxB,QAAP,QAAyB4qD,6BCzd7B,IAAIP,EADJ5uE,OAAOC,eAAeskB,EAAS,aAAc,CAAEpnB,OAAO,IAEtD,SAAWyxE,GAePA,EAAG71E,OAdH,SAAgBi3E,GACZ,MAAyB,iBAAdA,EAAGP,OACHO,EAAGP,OAEgB,iBAAdO,EAAGN,OACRM,EAAGN,OAEgB,iBAAdM,EAAGN,QAAqC,OAAdM,EAAGN,OAClC,EAGqB,iBAAdM,EAAGT,OAAsBS,EAAGT,OAAOx2E,OAAS,CAElE,CAEH,CAhBD,CAgBG61E,IAAOA,EAAK,CAAC,IAChBrqD,EAAA,QAAkBqqD,+BCnBlB5uE,OAAOC,eAAeskB,EAAS,aAAc,CAAEpnB,OAAO,IACtD,MAAM2xE,EAAO,EAAQ,MAsGrBvqD,EAAA,QArGA,MACI,WAAAxmB,CAAYizC,GACR7yC,KAAK6yC,IAAMA,EACX7yC,KAAK2D,MAAQ,EACb3D,KAAK5H,OAAS,CAClB,CACA,OAAA45E,GACI,OAAOhyE,KAAKsyE,aAAev7B,GAC/B,CACA,IAAAh2C,CAAKnG,GACIA,IACDA,EAASm8C,KAEb,MAAMk7B,EAASjyE,KAAK6yC,IAAI7yC,KAAK2D,OAC7B,GAAIsuE,EAAQ,CACR,MAAM75E,EAAS4H,KAAK5H,OACd06E,EAAWnC,EAAKl8B,QAAQ75C,OAAOq3E,GASrC,GARIr3E,GAAUk4E,EAAW16E,GACrBwC,EAASk4E,EAAW16E,EACpB4H,KAAK2D,OAAS,EACd3D,KAAK5H,OAAS,GAGd4H,KAAK5H,QAAUwC,EAEU,iBAAlBq3E,EAAOX,OACd,MAAO,CAAEA,OAAQ12E,GAEhB,CACD,MAAM64E,EAAQ,CAAC,EAmBf,OAlBIxB,EAAO1tE,aACPkvE,EAAMlvE,WAAa0tE,EAAO1tE,YAED,iBAAlB0tE,EAAOV,OACdkC,EAAMlC,OAAS32E,EAEe,iBAAlBq3E,EAAOV,QACD,OAAlBU,EAAOV,OAEPkC,EAAMlC,OAASU,EAAOV,OAEQ,iBAAlBU,EAAOb,OACnBqC,EAAMrC,OAASa,EAAOb,OAAOsC,OAAOt7E,EAAQwC,GAI5C64E,EAAMrC,OAASa,EAAOb,OAEnBqC,CACX,CACJ,CAEI,MAAO,CAAElC,OAAQx6B,IAEzB,CACA,IAAAoB,GACI,OAAOn4C,KAAK6yC,IAAI7yC,KAAK2D,MACzB,CACA,UAAA2uE,GACI,OAAItyE,KAAK6yC,IAAI7yC,KAAK2D,OAEPgtE,EAAKl8B,QAAQ75C,OAAOoF,KAAK6yC,IAAI7yC,KAAK2D,QAAU3D,KAAK5H,OAGjD2+C,GAEf,CACA,QAAAyC,GACI,MAAMq4B,EAAK7xE,KAAK6yC,IAAI7yC,KAAK2D,OACzB,OAAIkuE,EACyB,iBAAdA,EAAGP,OACH,SAEmB,iBAAdO,EAAGN,QACO,iBAAdM,EAAGN,QAAqC,OAAdM,EAAGN,OAC9B,SAGA,SAGR,QACX,CACA,IAAA70D,GACI,GAAK1c,KAAKgyE,UAGL,IAAoB,IAAhBhyE,KAAK5H,OACV,OAAO4H,KAAK6yC,IAAIhrC,MAAM7H,KAAK2D,OAE1B,CACD,MAAMvL,EAAS4H,KAAK5H,OACduL,EAAQ3D,KAAK2D,MACb5C,EAAOf,KAAKe,OACZ2b,EAAO1c,KAAK6yC,IAAIhrC,MAAM7H,KAAK2D,OAGjC,OAFA3D,KAAK5H,OAASA,EACd4H,KAAK2D,MAAQA,EACN,CAAC5C,GAAM4B,OAAO+Z,EACzB,EAbI,MAAO,EAcf,mDCtGJ,MAAMrX,EAAEA,GAAG,oBAAoBxD,OAAOhC,UAAU2G,SAASnE,KAAKgD,GAAwGqF,EAAE,CAACrF,EAAEmkB,KAAK,MAAM9e,EAAEvO,SAASC,cAAciJ,GAAG,GAAGmkB,GAAG,iBAAiBA,EAAE,IAAI,MAAMnkB,KAAKmkB,EAAE,SAASnkB,EAAEqF,EAAEqkB,UAAUvF,EAAEnkB,GAAGqF,EAAElO,aAAa6I,EAAEmkB,EAAEnkB,IAAI,OAAOqF,GAAGlJ,EAAE6D,GAAG,CAAC,QAAQ,YAAYrL,SAASqL,EAAEsuE,UAAUtuE,EAAE8e,KAAK9e,EAAEtI,WAAWsI,EAAEtI,WAAW/E,KAAKqN,GAAG7D,EAAE6D,KAAKK,KAAK,IAAI,GAAGkc,EAAEvc,IAAI,GAAG,MAAMA,EAAE,MAAM,GAAG,GAAGA,EAAE9P,eAAe,SAAS8P,EAAE9P,eAAe,QAAQ,CAAC,MAAMi0B,EAAEnkB,EAAE,OAAOmkB,EAAE7Z,MAAMiS,EAAE4H,EAAErF,KAAK,CAAC,OAAO9e,EAAE9P,eAAe,YAAYiM,EAAE6D,GAAGia,OAAOja,EAAC,EAAkHokB,EAAE,SAASpkB,EAAEmkB,GAAG,IAAI9e,EAAE,EAAElJ,EAAE,EAAE,KAAKkJ,EAAErF,EAAE,GAAImkB,EAAEhoB,GAAG2Z,SAASzQ,GAAG,GAAGlJ,GAAG,EAAE,OAAOA,EAAE,CAAC,EAAE6P,EAAE,SAAShM,GAAG,MAAMmkB,EAAE,CAAC,EAAE,GAAGnkB,EAAE,IAAI,MAAMqF,KAAKrF,EAAEmkB,EAAE9e,EAAEpV,MAAMoV,EAAE1L,MAAM,OAAOwqB,CAAC,EAAEvlB,EAAEoB,GAAGA,EAAEA,EAAEe,OAAO3C,MAAM,KAAKzL,KAAKqN,GAAG,IAAIA,MAAMK,KAAK,IAAI,KAAK+T,EAAE,CAACpU,EAAEmkB,KAAK,MAAM9e,EAAE8e,GAAG/lB,MAAM,KAAK8mC,MAAM/gB,IAAInkB,EAAE/I,UAAUgb,SAASkS,KAAK,OAAO9e,GAAGuG,EAAE,CAAC5L,EAAEmkB,IAAInkB,EAAEmkB,EAAE,GAAGnkB,KAAKmkB,IAAInkB,EAAEmkB,GAAG,GAAG9P,EAAE,SAASrU,EAAEmkB,EAAE,KAAK,IAAI9e,EAAE,MAAM,IAAIlJ,KAAKka,aAAahR,GAAGA,EAAEhW,OAAO0lB,YAAW,IAAK/U,KAAKmkB,EAAC,CAAE,EAAE,IAAIE,EAAE,WAAW,OAAOA,EAAE7nB,OAAOM,QAAQ,SAASkD,GAAG,IAAI,IAAImkB,EAAE9e,EAAE/P,UAAU6G,EAAE,EAAEogB,EAAEjnB,UAAUC,OAAO4G,EAAEogB,EAAEpgB,IAAI,IAAI,IAAIjJ,KAAKixB,EAAE9e,EAAElJ,GAAGK,OAAOhC,UAAUtK,eAAe8M,KAAKmnB,EAAEjxB,KAAK8M,EAAE9M,GAAGixB,EAAEjxB,IAAI,OAAO8M,CAAC,EAAEqkB,EAAE1uB,MAAMgF,KAAKrF,UAAU,EAAE,SAASiO,EAAEvD,EAAEmkB,EAAE9e,GAAG,GAAGA,GAAG,IAAI/P,UAAUC,OAAO,IAAI,IAAI4G,EAAEogB,EAAE,EAAErpB,EAAEixB,EAAE5uB,OAAOgnB,EAAErpB,EAAEqpB,KAAKpgB,GAAGogB,KAAK4H,IAAIhoB,IAAIA,EAAE1G,MAAM+E,UAAUgI,MAAMxF,KAAKmnB,EAAE,EAAE5H,IAAIpgB,EAAEogB,GAAG4H,EAAE5H,IAAI,OAAOvc,EAAE1C,OAAOnB,GAAG1G,MAAM+E,UAAUgI,MAAMxF,KAAKmnB,GAAG,CAAC,mBAAmBoqD,iBAAiBA,gBAAgB,IAAIlnE,EAAE,WAAW,SAASrH,EAAEA,QAAG,IAASA,IAAIA,EAAE,CAAC,GAAG,IAAImkB,EAAExpB,KAAK6B,OAAOukC,QAAQ/gC,GAAGvC,SAAQ,SAAUuC,GAAG,IAAIqF,EAAErF,EAAE,GAAG7D,EAAE6D,EAAE,GAAG,OAAOmkB,EAAE9e,GAAGlJ,CAAE,GAAE,CAAC,OAAO6D,EAAExF,UAAU2G,SAAS,WAAW,OAAOmO,KAAKC,UAAU5U,KAAK,EAAEqF,EAAExF,UAAUg0E,SAAS,SAASxuE,EAAEmkB,GAAG,OAAOxpB,KAAKqF,GAAGmkB,EAAExpB,IAAI,EAAEqF,CAAC,CAAhQ,GAAoQ,SAASpN,EAAEoN,GAAG,IAAI,IAAImkB,EAAE7uB,UAAU+P,EAAE,GAAGlJ,EAAE,EAAEA,EAAE7G,UAAUC,OAAO4G,IAAIkJ,EAAElJ,EAAE,GAAGgoB,EAAEhoB,GAAG,OAAO,MAAM6D,GAAGqF,EAAE6/B,MAAK,SAAU/gB,GAAG,IAAI9e,EAAElJ,EAAE,MAAM,mBAAmB,QAAQA,EAAE,QAAQkJ,EAAE,MAAMrF,OAAE,EAAOA,EAAEyuE,qBAAgB,IAASppE,OAAE,EAAOA,EAAEqpE,mBAAc,IAASvyE,OAAE,EAAOA,EAAEgoB,KAAKnkB,aAAaA,EAAEyuE,cAAcC,YAAYvqD,EAAG,GAAE,CAAC,SAASc,EAAEjlB,EAAEmkB,EAAE9e,GAAG,IAAIlJ,EAAE,MAAM,UAAU6D,EAAEsuE,SAASnyE,EAAEkJ,EAAEvO,SAASuT,eAAerK,EAAE8e,MAAM,aAAa9e,EAAEsuE,SAASnyE,EAAEkJ,EAAEvO,SAAS63E,cAAc3uE,EAAE8e,OAAOqF,GAAGhoB,EAAEkJ,EAAEvO,SAAS83E,gBAAgB,6BAA6B5uE,EAAEsuE,UAAU,kBAAkBtuE,EAAEsuE,WAAWnqD,GAAE,IAAK,QAAQnkB,EAAEsuE,SAASx9E,eAAeqL,EAAEkJ,EAAEvO,SAAS83E,gBAAgB,6BAA6B,OAAOzqD,GAAE,GAAIhoB,EAAEkJ,EAAEvO,SAASC,cAAciJ,EAAEsuE,UAAUtuE,EAAEd,YAAY1C,OAAOukC,QAAQ/gC,EAAEd,YAAYzB,SAAQ,SAAUuC,GAAG,IAAImkB,EAAEnkB,EAAE,GAAGqF,EAAErF,EAAE,GAAG,OAAO7D,EAAEhF,aAAagtB,EAAE9e,EAAG,IAAGrF,EAAEtI,YAAYsI,EAAEtI,WAAW+F,SAAQ,SAAUuC,GAAG,OAAO7D,EAAExE,YAAYstB,EAAEjlB,EAAEmkB,EAAE9e,GAAI,IAAGA,EAAEwpE,eAAe7uE,EAAErG,OAAO/G,EAAEuJ,EAAE,oBAAoB,kBAAkB,mBAAmB,gBAAgB,mBAAmB,oBAAoB,sBAAsB,sBAAsBA,EAAExC,MAAMqG,EAAErG,OAAOqG,EAAE8uE,SAASl8E,EAAEuJ,EAAE,sBAAsBA,EAAE2yE,QAAQ9uE,EAAE8uE,SAAS9uE,EAAE+uE,UAAUn8E,EAAEuJ,EAAE,uBAAuBA,EAAE4yE,SAAS/uE,EAAE+uE,YAAY5yE,CAAC,CAAC,IAAIhJ,EAAE,SAAS6M,EAAEmkB,GAAG,IAAIA,EAAEA,EAAE3hB,QAAQ2hB,EAAE5uB,OAAO,GAAG,CAAC,IAAI8P,EAAE8e,EAAElF,OAAO,EAAE,GAAG,GAAGjf,EAAEA,EAAEtI,WAAW2N,EAAE,CAAC,OAAOrF,CAAC,EAAE,SAAS7K,EAAE6K,EAAEmkB,EAAE9e,GAAG,IAAIlJ,EAAEogB,EAAErpB,EAAEkxB,EAAED,EAAE9e,EAAE2pE,OAAOlzC,QAAQ9vB,EAAEmY,EAAE9e,EAAE2pE,OAAOC,OAAO,CAAC5pE,EAAE2pE,OAAOE,WAAW7pE,EAAE2pE,OAAOG,gBAAgBx6E,SAASyvB,KAAKjoB,EAAEhJ,EAAE6M,EAAEgM,IAAI,IAAIpN,EAAE,CAACzK,KAAKgwB,EAAE3gB,KAAKrH,GAAG,GAAGkJ,EAAE+pE,aAAaxwE,GAAG,OAAM,EAAG,OAAOwlB,GAAG,KAAK/e,EAAE2pE,OAAOK,aAAa,IAAIlzE,IAAIvJ,EAAEuJ,EAAE,WAAW,OAAM,EAAGA,EAAEhF,aAAagtB,EAAE9e,EAAE2pE,OAAO/+E,MAAMk0B,EAAE9e,EAAE2pE,OAAOr1E,QAAQ,MAAM,KAAK0L,EAAE2pE,OAAOM,gBAAgB,IAAInzE,IAAIvJ,EAAEuJ,EAAE,WAAW,OAAM,EAAGA,EAAEhF,aAAagtB,EAAE9e,EAAE2pE,OAAO/+E,MAAMk0B,EAAE9e,EAAE2pE,OAAOtI,WAAW9zE,EAAEuJ,EAAE,qBAAqB,UAAUgoB,EAAE9e,EAAE2pE,OAAO/+E,QAAQkM,EAAExC,MAAMwqB,EAAE9e,EAAE2pE,OAAOtI,WAAW,MAAM,KAAKrhE,EAAE2pE,OAAOO,gBAAgB,IAAIpzE,IAAIvJ,EAAEuJ,EAAE,WAAW,OAAM,EAAGA,EAAEozE,gBAAgBprD,EAAE9e,EAAE2pE,OAAO/+E,OAAO,MAAM,KAAKoV,EAAE2pE,OAAOQ,kBAAkB,IAAIrzE,IAAIvJ,EAAEuJ,EAAE,QAAQ,OAAM,EAAGkJ,EAAEoqE,SAAStzE,EAAEA,EAAE2iB,KAAKqF,EAAE9e,EAAE2pE,OAAOU,UAAUvrD,EAAE9e,EAAE2pE,OAAOtI,WAAW9zE,EAAEuJ,EAAExF,WAAW,yBAAyBwF,EAAExF,WAAWgD,MAAMwqB,EAAE9e,EAAE2pE,OAAOtI,WAAW,MAAM,KAAKrhE,EAAE2pE,OAAOW,YAAY,IAAIxzE,QAAG,IAASA,EAAExC,MAAM,OAAM,EAAGwC,EAAExC,MAAMwqB,EAAE9e,EAAE2pE,OAAOtI,UAAU,MAAM,KAAKrhE,EAAE2pE,OAAOY,cAAc,IAAIzzE,IAAIvJ,EAAEuJ,EAAE,WAAW,OAAM,EAAGkJ,EAAEoqE,SAAStzE,EAAEA,EAAE2iB,KAAKqF,EAAE9e,EAAE2pE,OAAOU,UAAUvrD,EAAE9e,EAAE2pE,OAAOtI,WAAW,MAAM,KAAKrhE,EAAE2pE,OAAOa,cAAc,IAAI1zE,QAAG,IAASA,EAAE2yE,QAAQ,OAAM,EAAG3yE,EAAE2yE,QAAQ3qD,EAAE9e,EAAE2pE,OAAOtI,UAAU,MAAM,KAAKrhE,EAAE2pE,OAAOc,eAAe,IAAI3zE,QAAG,IAASA,EAAE4yE,SAAS,OAAM,EAAG5yE,EAAE4yE,SAAS5qD,EAAE9e,EAAE2pE,OAAOtI,UAAU,MAAM,KAAKrhE,EAAE2pE,OAAOe,eAAe,IAAI37D,EAAE,QAAQ+P,EAAE9e,EAAE2pE,OAAOtI,UAAU4H,SAASx9E,eAAe,+BAA+BqL,EAAExF,WAAWq5E,aAAa7zE,EAAExF,WAAW25D,aAAarrC,EAAEd,EAAE9e,EAAE2pE,OAAOtI,UAAUtyD,EAAE/O,GAAGlJ,GAAG,MAAM,KAAKkJ,EAAE2pE,OAAOiB,cAAc1sE,EAAE,GAAG,IAAI9N,MAAM0uB,EAAE9e,EAAE2pE,OAAOkB,eAAc,GAAIv9E,KAAI,WAAY,OAAOwJ,EAAEvF,YAAYuF,EAAEzE,WAAWysB,EAAE9e,EAAE2pE,OAAO5xE,OAAQ,IAAGK,SAAQ,SAAUuC,EAAEuc,GAAG,IAAIA,IAAIrpB,EAAEiJ,EAAEzE,WAAWysB,EAAE9e,EAAE2pE,OAAOxoE,MAAMrK,EAAEtE,aAAamI,EAAE9M,GAAG,KAAM,IAAG,MAAM,KAAKmS,EAAE2pE,OAAOmB,cAAch0E,EAAExF,WAAWC,YAAYuF,GAAG,MAAM,KAAKkJ,EAAE2pE,OAAOE,WAAW,IAAItjE,GAAGyY,EAAErY,EAAExJ,SAASyc,OAAOoF,EAAE9uB,OAAO,EAAE,GAAG,GAAG,IAAI3C,EAAEuJ,EAAEhJ,EAAE6M,EAAEqkB,GAAG,WAAW,OAAM,EAAGloB,EAAEtE,aAAaotB,EAAEd,EAAE9e,EAAE2pE,OAAOx3E,SAAS,+BAA+B2E,EAAE6zE,aAAa3qE,GAAGlJ,EAAEzE,WAAWkU,IAAI,MAAM,MAAM,KAAKvG,EAAE2pE,OAAOoB,kBAAkB,IAAIj0E,GAAG,IAAIA,EAAErE,SAAS,OAAM,EAAG,IAAIuc,EAAElY,EAAExF,WAAW0d,EAAEzd,YAAYuF,GAAGvJ,EAAEyhB,EAAE,yBAAyBA,EAAE1a,MAAM,IAAI,MAAM,KAAK0L,EAAE2pE,OAAOG,eAAe,IAAI9qD,EAA0C,GAAxCzY,GAAGyY,EAAErY,EAAExJ,SAASyc,OAAOoF,EAAE9uB,OAAO,EAAE,GAAG,GAAMgnB,EAAElX,EAAEvO,SAASuT,eAAe8Z,EAAE9e,EAAE2pE,OAAOr1E,UAAUwC,EAAEhJ,EAAE6M,EAAEqkB,IAAI3sB,WAAW,OAAM,EAAGyE,EAAEtE,aAAa0kB,EAAEpgB,EAAEzE,WAAWkU,IAAI,MAAMhZ,EAAEuJ,EAAExF,WAAW,yBAAyBwF,EAAExF,WAAWgD,MAAMwqB,EAAE9e,EAAE2pE,OAAOr1E,QAAoD,OAAO0L,EAAEgrE,cAAc,CAACl8E,KAAKyK,EAAEzK,KAAKqP,KAAK5E,EAAE4E,KAAK8sE,QAAQ/zD,KAAI,CAAE,CAAC,SAASghC,EAAEv9C,EAAEmkB,EAAE9e,GAAG,IAAIlJ,EAAE6D,EAAEmkB,GAAGnkB,EAAEmkB,GAAGnkB,EAAEqF,GAAGrF,EAAEqF,GAAGlJ,CAAC,CAAwiC,IAAI8X,EAAE,SAASjU,GAAG,IAAImkB,EAAE,GAAG,OAAOA,EAAEjkB,KAAKF,EAAEsuE,UAAU,UAAUtuE,EAAEsuE,UAAU,aAAatuE,EAAEsuE,UAAUtuE,EAAEd,aAAac,EAAEd,WAAWqxE,OAAOpsD,EAAEjkB,KAAK,GAAG5C,OAAO0C,EAAEsuE,SAAS,KAAKhxE,OAAO0C,EAAEd,WAAWqxE,MAAMttE,QAAQ,KAAK,OAAOjD,EAAEd,WAAWmE,IAAI8gB,EAAEjkB,KAAK,GAAG5C,OAAO0C,EAAEsuE,SAAS,KAAKhxE,OAAO0C,EAAEd,WAAWmE,MAAM8gB,CAAC,EAAEjQ,EAAE,SAASlU,GAAG,IAAImkB,EAAE,CAAC,EAAE9e,EAAE,CAAC,EAAE,OAAOrF,EAAEvC,SAAQ,SAAUuC,GAAGiU,EAAEjU,GAAGvC,SAAQ,SAAUuC,GAAG,IAAI7D,EAAE6D,KAAKmkB,EAAEhoB,GAAG6D,KAAKqF,EAAElJ,WAAWgoB,EAAEnkB,GAAGqF,EAAErF,IAAG,GAAImkB,EAAEnkB,IAAG,CAAG,GAAG,IAAGmkB,CAAC,EAAEqsD,EAAE,SAASxwE,EAAEmkB,GAAG,IAAI9e,EAAE6O,EAAElU,GAAG7D,EAAE+X,EAAEiQ,GAAG5H,EAAE,CAAC,EAAE,OAAO/f,OAAO8T,KAAKjL,GAAG5H,SAAQ,SAAUuC,GAAG7D,EAAE6D,KAAKuc,EAAEvc,IAAG,EAAI,IAAGuc,CAAC,EAAEonB,EAAE,SAAS3jC,GAAG,cAAcA,EAAEywE,iBAAiBzwE,EAAE0wE,iBAAiB1wE,EAAE2wE,WAAW3wE,EAAEtI,YAAYsI,EAAEtI,WAAW2Y,MAAMszB,EAAE,EAAE1G,EAAE,SAASj9B,GAAG,GAAGxD,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAE,QAAQ,MAAM,CAACsuE,SAAS,UAAUtuE,EAAEsuE,SAAS,QAAQ,WAAWxvD,KAAK9e,EAAE8e,MAAM,IAAIqF,EAAE,CAACmqD,SAAStuE,EAAEsuE,UAAU,OAAO9xE,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAE,gBAAgBmkB,EAAEjlB,WAAWmlB,EAAE,CAAC,EAAErkB,EAAEd,aAAa1C,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAE,aAAamkB,EAAE2qD,QAAQ9uE,EAAE8uE,SAAStyE,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAE,WAAWmkB,EAAExqB,MAAMqG,EAAErG,OAAO6C,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAE,cAAcmkB,EAAE4qD,SAAS/uE,EAAE+uE,UAAUvyE,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAE,gBAAgBmkB,EAAEzsB,WAAWsI,EAAEtI,WAAW/E,KAAI,SAAUqN,GAAG,OAAOi9B,EAAEj9B,EAAG,KAAImkB,CAAC,EAAEysD,EAAE,SAAS5wE,EAAEmkB,GAAG,IAAI,CAAC,WAAW,QAAQ,UAAU,WAAW,QAAQ9T,OAAM,SAAUhL,GAAG,OAAOrF,EAAEqF,KAAK8e,EAAE9e,EAAG,IAAG,OAAM,EAAG,GAAG7I,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAE,QAAQ,OAAM,EAAG,GAAG6wE,QAAQ7wE,EAAEd,cAAc2xE,QAAQ1sD,EAAEjlB,YAAY,OAAM,EAAG,GAAG2xE,QAAQ7wE,EAAEtI,cAAcm5E,QAAQ1sD,EAAEzsB,YAAY,OAAM,EAAG,GAAGsI,EAAEd,WAAW,CAAC,IAAImG,EAAE7I,OAAO8T,KAAKtQ,EAAEd,YAAY/C,EAAEK,OAAO8T,KAAK6T,EAAEjlB,YAAY,GAAGmG,EAAE9P,SAAS4G,EAAE5G,OAAO,OAAM,EAAG,IAAI8P,EAAEgL,OAAM,SAAUhL,GAAG,OAAOrF,EAAEd,WAAWmG,KAAK8e,EAAEjlB,WAAWmG,EAAG,IAAG,OAAM,CAAE,CAAC,GAAGrF,EAAEtI,WAAW,CAAC,GAAGsI,EAAEtI,WAAWnC,SAAS4uB,EAAEzsB,WAAWnC,OAAO,OAAM,EAAG,IAAIyK,EAAEtI,WAAW2Y,OAAM,SAAUrQ,EAAEqF,GAAG,OAAOurE,EAAE5wE,EAAEmkB,EAAEzsB,WAAW2N,GAAI,IAAG,OAAM,CAAE,CAAC,OAAM,CAAE,EAAEyrE,EAAE,SAAS9wE,EAAEmkB,EAAE9e,EAAElJ,EAAEogB,GAAG,QAAG,IAASA,IAAIA,GAAE,IAAKvc,IAAImkB,EAAE,OAAM,EAAG,GAAGnkB,EAAEsuE,WAAWnqD,EAAEmqD,SAAS,OAAM,EAAG,GAAG,CAAC,QAAQ,YAAY35E,SAASqL,EAAEsuE,UAAU,QAAQ/xD,GAAGvc,EAAE8e,OAAOqF,EAAErF,KAAK,GAAG9e,EAAEsuE,YAAYjpE,EAAE,OAAM,EAAG,GAAGrF,EAAEd,YAAYilB,EAAEjlB,WAAW,CAAC,GAAGc,EAAEd,WAAWmE,GAAG,CAAC,GAAGrD,EAAEd,WAAWmE,KAAK8gB,EAAEjlB,WAAWmE,GAAG,OAAM,EAAG,GAAG,GAAG/F,OAAO0C,EAAEsuE,SAAS,KAAKhxE,OAAO0C,EAAEd,WAAWmE,MAAMgC,EAAE,OAAM,CAAE,CAAC,GAAGrF,EAAEd,WAAWqxE,OAAOvwE,EAAEd,WAAWqxE,QAAQpsD,EAAEjlB,WAAWqxE,OAAS,GAAGjzE,OAAO0C,EAAEsuE,SAAS,KAAKhxE,OAAO0C,EAAEd,WAAWqxE,MAAMttE,QAAQ,KAAK,QAAQoC,EAAE,OAAM,CAAE,CAAC,GAAGlJ,EAAE,OAAM,EAAG,IAAIjJ,EAAE8M,EAAEtI,WAAWsI,EAAEtI,WAAW8K,QAAQjF,UAAU,GAAG6mB,EAAED,EAAEzsB,WAAWysB,EAAEzsB,WAAW8K,QAAQjF,UAAU,GAAG,GAAGrK,EAAEqC,SAAS6uB,EAAE7uB,OAAO,OAAM,EAAG,GAAGgnB,EAAE,OAAOrpB,EAAEmd,OAAM,SAAUrQ,EAAEmkB,GAAG,OAAOnkB,EAAEsuE,WAAWlqD,EAAED,GAAGmqD,QAAS,IAAG,IAAItiE,EAAEwkE,EAAEt9E,EAAEkxB,GAAG,OAAOlxB,EAAEmd,OAAM,SAAUrQ,EAAEmkB,GAAG,OAAO2sD,EAAE9wE,EAAEokB,EAAED,GAAGnY,GAAE,GAAG,EAAI,GAAE,EAAE+kE,EAAE,SAAS/wE,EAAEmkB,GAAG,OAAO5gB,EAAE,GAAG,IAAI9N,MAAMuK,IAAG,GAAIrN,KAAI,WAAY,OAAOwxB,CAAE,GAAE,EAAE6sD,EAAE,SAAShxE,EAAEmkB,GAAG,IAAI,IAAI9e,EAAErF,EAAEtI,WAAWsI,EAAEtI,WAAW,GAAGyE,EAAEgoB,EAAEzsB,WAAWysB,EAAEzsB,WAAW,GAAG6kB,EAAEw0D,EAAE1rE,EAAE9P,QAAO,GAAIrC,EAAE69E,EAAE50E,EAAE5G,QAAO,GAAI6uB,EAAE,GAAGpY,EAAE,WAAW,OAAO1W,UAAU,EAAE,EAAEsJ,GAAE,EAAGwV,EAAE,WAAW,IAAIpU,EAAE,SAASA,EAAEmkB,EAAE9e,EAAElJ,GAAG,IAAIogB,EAAE,EAAErpB,EAAE,GAAGkxB,EAAEpkB,EAAEzK,OAAOyW,EAAEmY,EAAE5uB,OAAOqJ,EAAE2E,EAAE,GAAG,IAAI9N,MAAM2uB,EAAE,IAAG,GAAIzxB,KAAI,WAAY,MAAM,EAAG,IAAGyhB,EAAEo8D,EAAExwE,EAAEmkB,GAAGvY,EAAEwY,IAAIpY,EAAEJ,GAAG5L,EAAEklC,MAAK,SAAUllC,EAAEqF,GAAG,IAAIlJ,EAAE8X,EAAEjU,GAAGuc,EAAEtI,EAAEkQ,EAAE9e,IAAI,OAAOlJ,EAAE5G,SAASgnB,EAAEhnB,QAAQqW,GAAE,GAAG,IAAKzP,EAAE+oC,MAAK,SAAUllC,EAAEmkB,GAAG,GAAGnkB,IAAIuc,EAAE4H,GAAG,OAAOvY,GAAE,GAAG,CAAG,KAAIA,QAAG,EAAQ,IAAG,IAAI,IAAIyI,EAAE,EAAEA,EAAE+P,EAAE/P,IAAI,IAAI,IAAIgQ,EAAErkB,EAAEqU,GAAGhN,EAAE,EAAEA,EAAE2E,EAAE3E,IAAI,CAAC,IAAIzU,EAAEuxB,EAAE9c,GAAGhC,EAAEgP,IAAIlY,EAAEkL,KAAKypE,EAAEzsD,EAAEzxB,EAAEwhB,EAAExI,GAAGhN,EAAEyV,EAAE,GAAGhN,EAAE,GAAG,GAAGzI,EAAEyV,EAAE,GAAGhN,EAAE,GAAGzI,EAAEyV,GAAGhN,GAAGzI,EAAEyV,GAAGhN,GAAG,EAAE,EAAEzI,EAAEyV,EAAE,GAAGhN,EAAE,IAAIkV,IAAIA,EAAE3d,EAAEyV,EAAE,GAAGhN,EAAE,GAAGnU,EAAE,CAACmhB,EAAE,EAAEhN,EAAE,IAAI,CAAC,OAAO,IAAIkV,GAAG,CAACmzD,SAASx8E,EAAE,GAAGqpB,EAAEmqD,SAASxzE,EAAE,GAAGqpB,EAAEhnB,OAAOgnB,EAAE,CAA1f,CAA4flX,EAAElJ,EAAEogB,EAAErpB,GAAG8M,GAAGokB,EAAElkB,KAAKF,GAAGuD,EAAE,GAAG,IAAI9N,MAAMuK,EAAEzK,SAAQ,GAAI5C,IAAIqZ,GAAGvO,SAAQ,SAAU0mB,GAAG,OAAO,SAASnkB,EAAEmkB,EAAE9e,EAAElJ,GAAG6D,EAAEqF,EAAEqqE,SAASvzE,IAAG,EAAGgoB,EAAE9e,EAAEqhE,SAASvqE,IAAG,CAAE,CAAvD,CAAyDogB,EAAErpB,EAAE8M,EAAEmkB,EAAG,KAAIvlB,GAAE,CAAE,GAAGA,GAAGwV,IAAI,OAAOpU,EAAEixE,QAAQ7sD,EAAEpkB,EAAEkxE,WAAW,IAAI9sD,CAAC,EAAEkf,EAAE,WAAW,SAAStjC,IAAIrF,KAAKs3C,KAAK,EAAE,CAAC,OAAOjyC,EAAExF,UAAUtD,IAAI,SAAS8I,GAAG,IAAImkB,GAAGA,EAAExpB,KAAKs3C,MAAM/xC,KAAKvK,MAAMwuB,EAAEnkB,EAAE,EAAEA,EAAExF,UAAUiD,QAAQ,SAASuC,GAAGrF,KAAKs3C,KAAKx0C,SAAQ,SAAU0mB,GAAG,OAAOnkB,EAAEmkB,EAAG,GAAE,EAAEnkB,CAAC,CAA7L,GAAiM,SAASuQ,EAAEvQ,EAAEmkB,GAAG,IAAI9e,EAAElJ,EAAEogB,EAAEvc,EAAE,IAAImkB,EAAEA,EAAE3hB,QAAQ2hB,EAAE5uB,OAAO,GAAG4G,EAAEgoB,EAAElF,OAAO,EAAE,GAAG,GAAG5Z,EAAEkX,EAAEA,EAAEA,EAAE7kB,WAAW6kB,EAAE7kB,WAAWyE,QAAG,EAAO,MAAM,CAACqH,KAAK+Y,EAAE5lB,WAAW0O,EAAE8rE,UAAUh1E,EAAE,CAAC,SAASmmC,EAAEtiC,EAAEmkB,EAAE9e,GAAG,OAAO8e,EAAE1mB,SAAQ,SAAU0mB,IAAI,SAASnkB,EAAEmkB,EAAE9e,GAAG,IAAIlJ,EAAEogB,EAAErpB,EAAEkxB,EAAE,IAAI,CAAC/e,EAAE2pE,OAAOE,WAAW7pE,EAAE2pE,OAAOG,gBAAgBx6E,SAASwvB,EAAE9e,EAAE2pE,OAAOlzC,SAAS,CAAC,IAAI9vB,EAAEuE,EAAEvQ,EAAEmkB,EAAE9e,EAAE2pE,OAAOC,QAAQ1yD,EAAEvQ,EAAExI,KAAKtQ,EAAE8Y,EAAErV,WAAWytB,EAAEpY,EAAEmlE,SAAS,CAAC,IAAIvyE,EAAEwV,EAAExI,EAAE,GAAGyI,EAAE,CAAClgB,KAAKgwB,EAAE3gB,KAAK+Y,GAAG,GAAGlX,EAAE+rE,oBAAoB/8D,GAAG,OAAM,EAAG,OAAO8P,EAAE9e,EAAE2pE,OAAOlzC,SAAS,KAAKz2B,EAAE2pE,OAAOK,aAAa9yD,EAAErd,aAAaqd,EAAErd,WAAW,CAAC,GAAGqd,EAAErd,WAAWilB,EAAE9e,EAAE2pE,OAAO/+E,OAAOk0B,EAAE9e,EAAE2pE,OAAOr1E,OAAO,YAAYwqB,EAAE9e,EAAE2pE,OAAO/+E,MAAMssB,EAAEuyD,SAAQ,EAAG,aAAa3qD,EAAE9e,EAAE2pE,OAAO/+E,MAAMssB,EAAEwyD,UAAS,EAAG,UAAUxyD,EAAE+xD,UAAU,UAAUnqD,EAAE9e,EAAE2pE,OAAO/+E,QAAQssB,EAAE5iB,MAAMwqB,EAAE9e,EAAE2pE,OAAOr1E,QAAQ,MAAM,KAAK0L,EAAE2pE,OAAOM,gBAAgB/yD,EAAErd,WAAWilB,EAAE9e,EAAE2pE,OAAO/+E,OAAOk0B,EAAE9e,EAAE2pE,OAAOtI,UAAU,MAAM,KAAKrhE,EAAE2pE,OAAOO,uBAAuBhzD,EAAErd,WAAWilB,EAAE9e,EAAE2pE,OAAO/+E,OAAO,IAAIuM,OAAO8T,KAAKiM,EAAErd,YAAY3J,eAAegnB,EAAErd,WAAW,YAAYilB,EAAE9e,EAAE2pE,OAAO/+E,MAAMssB,EAAEuyD,SAAQ,EAAG,aAAa3qD,EAAE9e,EAAE2pE,OAAO/+E,aAAassB,EAAEwyD,SAAS,UAAUxyD,EAAE+xD,UAAU,UAAUnqD,EAAE9e,EAAE2pE,OAAO/+E,cAAcssB,EAAE5iB,MAAM,MAAM,KAAK0L,EAAE2pE,OAAOQ,kBAAkBjzD,EAAEuC,KAAKqF,EAAE9e,EAAE2pE,OAAOtI,UAAU,aAAaxzE,EAAEo7E,WAAWp7E,EAAEyG,MAAMwqB,EAAE9e,EAAE2pE,OAAOtI,WAAW,MAAM,KAAKrhE,EAAE2pE,OAAOW,YAAYpzD,EAAE5iB,MAAMwqB,EAAE9e,EAAE2pE,OAAOtI,UAAU,MAAM,KAAKrhE,EAAE2pE,OAAOY,cAAcrzD,EAAEuC,KAAKqF,EAAE9e,EAAE2pE,OAAOtI,UAAU,MAAM,KAAKrhE,EAAE2pE,OAAOa,cAActzD,EAAEuyD,QAAQ3qD,EAAE9e,EAAE2pE,OAAOtI,UAAU,MAAM,KAAKrhE,EAAE2pE,OAAOc,eAAevzD,EAAEwyD,SAAS5qD,EAAE9e,EAAE2pE,OAAOtI,UAAU,MAAM,KAAKrhE,EAAE2pE,OAAOe,eAAenxE,EAAEq+B,EAAE9Y,EAAE9e,EAAE2pE,OAAOtI,WAAWxzE,EAAEwE,WAAW0sB,GAAGxlB,EAAE,MAAM,KAAKyG,EAAE2pE,OAAOiB,cAAc1zD,EAAE7kB,WAAWunB,OAAOkF,EAAE9e,EAAE2pE,OAAO5xE,MAAM+mB,EAAE9e,EAAE2pE,OAAOkB,cAAc3yE,UAAUE,SAAQ,SAAUuC,GAAG,OAAOuc,EAAE7kB,WAAWunB,OAAOkF,EAAE9e,EAAE2pE,OAAOxoE,IAAI,EAAExG,EAAG,IAAGuc,EAAE00D,SAAS10D,EAAE00D,QAAQxzE,SAAQ,SAAUuC,GAAG,GAAGmkB,EAAE9e,EAAE2pE,OAAO5xE,MAAM+mB,EAAE9e,EAAE2pE,OAAOxoE,KAAKxG,EAAE0vE,UAAUvrD,EAAE9e,EAAE2pE,OAAOxoE,KAAKxG,EAAE0vE,SAASvrD,EAAE9e,EAAE2pE,OAAO5xE,MAAM4C,EAAE0vE,UAAUvrD,EAAE9e,EAAE2pE,OAAOkB,cAAc/zE,EAAE6D,EAAE0vE,SAAS1vE,EAAEzK,OAAO4uB,EAAE9e,EAAE2pE,OAAOxoE,KAAK,IAAIoF,EAAE1L,KAAK,CAACwvE,SAASvrD,EAAE9e,EAAE2pE,OAAOxoE,IAAI2d,EAAE9e,EAAE2pE,OAAOkB,aAAaxJ,SAAS1mE,EAAE0mE,SAAS1mE,EAAEzK,OAAO4G,EAAE5G,OAAO4G,IAAI6D,EAAEzK,QAAQ4G,QAAQ,GAAGgoB,EAAE9e,EAAE2pE,OAAO5xE,MAAM+mB,EAAE9e,EAAE2pE,OAAOxoE,KAAKxG,EAAE0vE,SAASvrD,EAAE9e,EAAE2pE,OAAOxoE,KAAKxG,EAAE0vE,SAASvrD,EAAE9e,EAAE2pE,OAAO5xE,MAAM,CAAC,IAAIjB,EAAE6D,EAAE0vE,UAAUvrD,EAAE9e,EAAE2pE,OAAOkB,cAAc/zE,EAAE6D,EAAE0vE,SAAS1vE,EAAEzK,OAAO4uB,EAAE9e,EAAE2pE,OAAOxoE,KAAK,IAAIoF,EAAE1L,KAAK,CAACwvE,SAASvrD,EAAE9e,EAAE2pE,OAAOxoE,IAAI2d,EAAE9e,EAAE2pE,OAAOkB,aAAaxJ,SAAS1mE,EAAE0mE,SAAS1mE,EAAEzK,OAAO4G,EAAE5G,OAAO4G,IAAI6D,EAAEzK,QAAQ4G,EAAE,MAAM6D,EAAE0vE,WAAWvrD,EAAE9e,EAAE2pE,OAAO5xE,QAAQ4C,EAAE0vE,SAASvrD,EAAE9e,EAAE2pE,OAAOxoE,IAAK,IAAG,MAAM,KAAKnB,EAAE2pE,OAAOmB,cAAcj9E,EAAEwE,WAAWunB,OAAOmF,EAAE,GAAGlxB,EAAE+9E,SAAS/9E,EAAE+9E,QAAQxzE,SAAQ,SAAUuC,GAAGA,EAAE0vE,SAAStrD,EAAEpkB,EAAE0vE,UAAU,EAAE1vE,EAAE0vE,WAAWtrD,EAAEpkB,EAAEisE,QAAO,EAAGjsE,EAAE0vE,SAAStrD,GAAGpkB,EAAE0vE,SAAS1vE,EAAEzK,OAAO6uB,IAAIpkB,EAAE0vE,SAAS1vE,EAAEzK,OAAO,IAAI6uB,EAAEpkB,EAAEzK,UAAUqW,EAAE1L,KAAK,CAACwmE,SAAS1mE,EAAE0mE,SAAStiD,EAAEpkB,EAAE0vE,SAASA,SAAStrD,EAAE7uB,OAAOyK,EAAEzK,OAAO6uB,EAAEpkB,EAAE0vE,SAAS,IAAI1vE,EAAEzK,OAAO6uB,EAAEpkB,EAAE0vE,UAAW,IAAGnzD,EAAErpB,EAAE,MAAM,KAAKmS,EAAE2pE,OAAOE,WAAW,IAAI7qD,GAAGjQ,EAAE+P,EAAE9e,EAAE2pE,OAAOC,OAAOzsE,SAASyc,OAAO7K,EAAE7e,OAAO,EAAE,GAAG,GAAGgnB,EAAE,QAAQpgB,EAAEoU,EAAEvQ,EAAEoU,UAAK,IAASjY,OAAE,EAAOA,EAAEqH,KAAK5E,EAAEq+B,EAAE9Y,EAAE9e,EAAE2pE,OAAOx3E,UAAU+kB,EAAE7kB,aAAa6kB,EAAE7kB,WAAW,IAAI2sB,GAAG9H,EAAE7kB,WAAWnC,OAAOgnB,EAAE7kB,WAAWwI,KAAKtB,GAAG2d,EAAE7kB,WAAWunB,OAAOoF,EAAE,EAAEzlB,GAAG2d,EAAE00D,SAAS10D,EAAE00D,QAAQxzE,SAAQ,SAAUuC,GAAG,GAAGA,EAAE0vE,UAAUrrD,EAAErkB,EAAE0vE,UAAU,OAAO,GAAG1vE,EAAE0vE,SAASrrD,GAAGrkB,EAAE0vE,SAAS1vE,EAAEzK,OAAO8uB,EAAE,CAAC,IAAIF,EAAEnkB,EAAE0vE,SAAS1vE,EAAEzK,OAAO8uB,EAAEzY,EAAE1L,KAAK,CAACwmE,SAAS1mE,EAAE0mE,SAAS1mE,EAAEzK,OAAO4uB,EAAEurD,SAASrrD,EAAE,EAAE9uB,OAAO4uB,IAAInkB,EAAEzK,QAAQ4uB,CAAC,CAAE,IAAG,MAAM,KAAK9e,EAAE2pE,OAAOoB,kBAAkBl9E,EAAEwE,WAAWunB,OAAOmF,EAAE,GAAG,aAAalxB,EAAEo7E,iBAAiBp7E,EAAEyG,MAAMzG,EAAE+9E,SAAS/9E,EAAE+9E,QAAQxzE,SAAQ,SAAUuC,GAAGA,EAAE0vE,SAAStrD,EAAEpkB,EAAE0vE,UAAU,EAAE1vE,EAAE0vE,WAAWtrD,EAAEpkB,EAAEisE,QAAO,EAAGjsE,EAAE0vE,SAAStrD,GAAGpkB,EAAE0vE,SAAS1vE,EAAEzK,OAAO6uB,IAAIpkB,EAAE0vE,SAAS1vE,EAAEzK,OAAO,IAAI6uB,EAAEpkB,EAAEzK,UAAUqW,EAAE1L,KAAK,CAACwmE,SAAS1mE,EAAE0mE,SAAStiD,EAAEpkB,EAAE0vE,SAASA,SAAStrD,EAAE7uB,OAAOyK,EAAEzK,OAAO6uB,EAAEpkB,EAAE0vE,SAAS,IAAI1vE,EAAEzK,OAAO6uB,EAAEpkB,EAAE0vE,UAAW,IAAGnzD,EAAErpB,EAAE,MAAM,KAAKmS,EAAE2pE,OAAOG,eAAe,IAAI5rE,GAAG6Q,EAAE+P,EAAE9e,EAAE2pE,OAAOC,OAAOzsE,SAASyc,OAAO7K,EAAE7e,OAAO,EAAE,GAAG,GAAGqJ,EAAE,CAAC0vE,SAAS,QAAQxvD,KAAKqF,EAAE9e,EAAE2pE,OAAOr1E,SAAS4iB,EAAEhM,EAAEvQ,EAAEoU,GAAG5Q,MAAM9L,aAAa6kB,EAAE7kB,WAAW,IAAI6L,GAAGgZ,EAAE7kB,WAAWnC,OAAOgnB,EAAE7kB,WAAWwI,KAAKtB,GAAG2d,EAAE7kB,WAAWunB,OAAO1b,EAAE,EAAE3E,GAAG,aAAa2d,EAAE+xD,WAAW/xD,EAAE5iB,MAAMwqB,EAAE9e,EAAE2pE,OAAOtI,WAAWnqD,EAAE00D,SAAS10D,EAAE00D,QAAQxzE,SAAQ,SAAUuC,GAAG,GAAGA,EAAE0vE,UAAUnsE,IAAIvD,EAAE0vE,UAAU,GAAG1vE,EAAE0vE,SAASnsE,GAAGvD,EAAE0vE,SAAS1vE,EAAEzK,OAAOgO,EAAE,CAAC,IAAI4gB,EAAEnkB,EAAE0vE,SAAS1vE,EAAEzK,OAAOgO,EAAEqI,EAAE1L,KAAK,CAACwmE,SAAS1mE,EAAE0mE,SAAS1mE,EAAEzK,OAAO4uB,EAAEurD,SAASnsE,EAAE,EAAEhO,OAAO4uB,IAAInkB,EAAEzK,QAAQ4uB,CAAC,CAAE,IAA+C5H,EAAE00D,UAAU10D,EAAE00D,QAAQ10D,EAAE00D,QAAQrzE,QAAO,SAAUoC,GAAG,OAAOA,EAAEisE,QAAQjsE,EAAE0vE,WAAW1vE,EAAE0mE,QAAS,IAAG96D,EAAErW,SAASgnB,EAAE00D,QAAQ10D,EAAE00D,QAAQ3zE,OAAOsO,KAAKvG,EAAEgsE,qBAAqB,CAAC7tE,KAAK6Q,EAAE7Q,KAAKrP,KAAKkgB,EAAElgB,KAAKm8E,QAAQ1xE,GAAG,CAA5oI,CAA8oIoB,EAAEmkB,EAAE9e,EAAG,KAAG,CAAE,CAAC,SAASisE,EAAEtxE,EAAEmkB,QAAG,IAASA,IAAIA,EAAE,CAAC0qD,cAAa,IAAK,IAAIxpE,EAAE,CAACipE,SAAStuE,EAAEsuE,UAAmwB,OAAtvB17E,EAAEoN,EAAE,OAAO,WAAWqF,EAAEyZ,KAAK9e,EAAE8e,MAAa9e,EAAEd,YAAYc,EAAEd,WAAW3J,OAAO,IAAE8P,EAAEnG,WAAW,CAAC,EAAEzJ,MAAM+E,UAAUgI,MAAMxF,KAAKgD,EAAEd,YAAYzB,SAAQ,SAAUuC,GAAG,OAAOqF,EAAEnG,WAAWc,EAAE/P,MAAM+P,EAAErG,KAAM,KAAMqG,EAAEtI,YAAYsI,EAAEtI,WAAWnC,OAAO,IAAE8P,EAAE3N,WAAW,GAAGjC,MAAM+E,UAAUgI,MAAMxF,KAAKgD,EAAEtI,YAAY+F,SAAQ,SAAUuC,GAAG,OAAOqF,EAAE3N,WAAWwI,KAAKoxE,EAAEtxE,EAAEmkB,GAAI,KAAGA,EAAE0qD,eAAej8E,EAAEoN,EAAE,yBAAyBqF,EAAE1L,MAAMqG,EAAErG,OAAO/G,EAAEoN,EAAE,qBAAqB,CAAC,QAAQ,YAAYrL,SAASqL,EAAEjQ,KAAKe,qBAAgB,IAASkP,EAAE8uE,QAAQzpE,EAAEypE,QAAQ9uE,EAAE8uE,QAAQl8E,EAAEoN,EAAE,oBAAoB,kBAAkB,mBAAmB,gBAAgB,mBAAmB,oBAAoB,sBAAsB,sBAAsBqF,EAAE1L,MAAMqG,EAAErG,OAAO/G,EAAEoN,EAAE,uBAAuBqF,EAAE0pE,SAAS/uE,EAAE+uE,YAAkB1pE,CAAC,CAAC,IAAI29B,EAAE,2GAA2GX,EAAE,qDAAqD,SAAShB,EAAErhC,GAAG,OAAOA,EAAEiD,QAAQ,QAAQ,KAAKA,QAAQ,QAAQ,KAAKA,QAAQ,SAAS,IAAI,CAAC,IAAIsuE,EAAE,CAACC,MAAK,EAAGppE,MAAK,EAAGqpE,IAAG,EAAGj1C,KAAI,EAAGk1C,OAAM,EAAGC,IAAG,EAAGC,KAAI,EAAGr3D,OAAM,EAAGs3D,QAAO,EAAG/jB,MAAK,EAAGgkB,UAAS,EAAGp9D,MAAK,EAAG89C,OAAM,EAAGz1D,QAAO,EAAGg3B,OAAM,EAAGg+C,KAAI,GAAI5vC,EAAE,SAASniC,EAAEmkB,GAAG,IAAI9e,EAAE,CAACipE,SAAS,GAAGpvE,WAAW,CAAC,GAAG/C,GAAE,EAAGogB,EAAEvc,EAAExM,MAAM,uBAAuB,GAAG+oB,IAAIlX,EAAEipE,SAASnqD,GAAG,QAAQ5H,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGtY,eAAestE,EAAEh1D,EAAE,KAAK,MAAMvc,EAAEnP,OAAOmP,EAAEzK,OAAO,MAAM4G,GAAE,GAAIkJ,EAAEipE,SAAS0D,WAAW,QAAQ,CAAC,IAAI9+E,EAAE8M,EAAEnN,QAAQ,UAAU,MAAM,CAAC9C,KAAK,UAAUyT,KAAK,CAAC8qE,SAAS,WAAWxvD,MAAM,IAAI5rB,EAAE8M,EAAEwC,MAAM,EAAEtP,GAAG,IAAI++E,YAAY91E,EAAE,CAAC,IAAI,IAAIioB,EAAE,IAAI/iB,OAAOghC,GAAGr2B,EAAE,KAAKpN,GAAE,GAAIA,GAAG,GAAG,QAAQoN,EAAEoY,EAAEqgB,KAAKzkC,IAAIpB,GAAE,OAAQ,GAAGoN,EAAE,GAAGjL,OAAO,GAAGiL,EAAE,GAAG,CAAC,IAAIoI,EAAEpI,EAAE,GAAGjL,OAAO6K,EAAE,CAACwI,EAAE,IAAIA,EAAEvhB,QAAQ,MAAM,IAAI+Y,EAAEwI,EAAEhW,MAAM,MAAMiH,EAAEnG,WAAW0M,EAAE,IAAIA,EAAE,GAAGwY,EAAEuhD,WAAW,MAAM35D,EAAE,KAAK3G,EAAEnG,WAAW8M,EAAE,IAAIA,EAAE,GAAGjL,OAAO8B,UAAU,EAAEmJ,EAAE,GAAGzW,OAAO,IAAI,MAAM,CAACxF,KAAK,MAAMyT,KAAK6B,EAAE4sE,YAAY91E,EAAE,EAAEimC,EAAE,SAASpiC,EAAEmkB,QAAG,IAASA,IAAIA,EAAE,CAAC0qD,cAAa,EAAGqD,eAAc,IAAK,IAAI7sE,EAAElJ,EAAE,GAAGogB,GAAG,EAAErpB,EAAE,GAAGkxB,GAAE,EAAG,GAAG,IAAIpkB,EAAEnN,QAAQ,KAAK,CAAC,IAAImZ,EAAEhM,EAAEnN,QAAQ,KAAKsJ,EAAE+D,KAAK,CAACouE,SAAS,QAAQxvD,MAAM,IAAI9S,EAAEhM,EAAEA,EAAE6C,UAAU,EAAEmJ,IAAI,CAAC,OAAOhM,EAAEiD,QAAQ+/B,GAAE,SAAUh3B,EAAEpN,GAAG,IAAIwV,EAAE,MAAMpI,EAAEnb,OAAO,GAAG+a,EAAEI,EAAEgmE,WAAW,WAAW39D,EAAEzV,EAAEoN,EAAEzW,OAAO8uB,EAAErkB,EAAEnP,OAAOwjB,GAAG,GAAGzI,EAAE,CAAC,IAAIrI,EAAE4+B,EAAEn2B,EAAEmY,EAAE+tD,eAAe1uE,KAAK,GAAG+Y,EAAE,EAAE,OAAOpgB,EAAE+D,KAAKqD,GAAG,GAAG,IAAI8D,EAAEnU,EAAEqpB,GAAG,OAAOlV,GAAG9D,EAAE+qE,WAAWjnE,EAAE7D,KAAK9L,aAAa2P,EAAE7D,KAAK9L,WAAW,IAAI2P,EAAE7D,KAAK9L,WAAWwI,KAAKqD,IAAI,EAAE,CAAC,GAAG6Q,EAAE,CAAC,GAAG,SAAS/O,EAAE88B,EAAEn2B,EAAEmY,EAAE+tD,eAAe9tD,IAAI5gB,KAAK8qE,WAAWlqD,GAAE,GAAI7H,KAAKlX,EAAE4sE,aAAa5tD,GAAG,MAAMA,EAAE,CAAChf,EAAE7B,KAAK9L,aAAa2N,EAAE7B,KAAK9L,WAAW,IAAI,IAAI9E,EAAEyuC,EAAErhC,EAAEwC,MAAM6R,EAAErU,EAAEnN,QAAQ,IAAIwhB,KAAKhP,EAAE7B,KAAK9L,WAAWwI,KAAK,CAACouE,SAAS,QAAQxvD,KAAKlsB,IAAIuxB,EAAE0qD,cAAc,aAAaxpE,EAAE7B,KAAK8qE,WAAWjpE,EAAE7B,KAAK7J,MAAM/G,EAAE,CAAC,IAAI2pB,GAAGlX,EAAE7B,KAAK8qE,UAAUnyE,EAAE+D,KAAKmF,EAAE7B,MAAM,IAAIyhB,EAAE/xB,EAAEqpB,EAAE,GAAG0I,GAAG5f,EAAE7B,KAAK8qE,WAAWrpD,EAAEzhB,KAAK9L,aAAautB,EAAEzhB,KAAK9L,WAAW,IAAIutB,EAAEzhB,KAAK9L,WAAWwI,KAAKmF,EAAE7B,OAAOtQ,EAAEqpB,GAAGlX,CAAC,CAAC,KAAK+O,GAAG/O,EAAE4sE,eAAe11D,GAAG,IAAIlX,EAAE4sE,aAAa9tD,EAAE+tD,eAAe7sE,EAAE7B,KAAK8qE,WAAWtiE,EAAExJ,MAAM,GAAG,KAAK2hB,EAAE+tD,eAAe7sE,EAAE7B,KAAK8qE,SAASrqE,gBAAgB+H,EAAExJ,MAAM,GAAG,GAAGyB,kBAAkBsY,GAAG,IAAI,QAAQlX,EAAE7B,KAAK8qE,WAAWlqD,GAAE,GAAI/e,EAAEnS,EAAEqpB,IAAI,MAAM8H,GAAGA,GAAG,CAAC,IAAIlxB,GAAG,IAAIopB,EAAEpgB,EAAEjJ,EAAEqpB,GAAG/Y,KAAK9L,YAAY,GAAGvC,EAAE6K,EAAEnN,QAAQ,IAAIwhB,GAAGzhB,EAAEyuC,EAAErhC,EAAEwC,MAAM6R,GAAG,IAAIlf,OAAE,EAAOA,IAAIhC,EAAE+M,KAAK,CAACouE,SAAS,QAAQxvD,KAAKlsB,GAAG,CAAC,MAAM,EAAG,IAAGuJ,EAAE,EAAE,EAAE+nC,EAAE,WAAW,SAASlkC,EAAEA,EAAEmkB,EAAE9e,GAAG1K,KAAKqL,QAAQX,EAAE1K,KAAKmK,GAAG,oBAAoBqtE,SAASv/E,EAAEoN,EAAE,WAAWsxE,EAAEtxE,EAAErF,KAAKqL,SAAS,iBAAiBhG,EAAEoiC,EAAEpiC,EAAErF,KAAKqL,SAASsJ,KAAKjD,MAAMiD,KAAKC,UAAUvP,IAAIrF,KAAKy3E,GAAG,oBAAoBD,SAASv/E,EAAEuxB,EAAE,WAAWmtD,EAAEntD,EAAExpB,KAAKqL,SAAS,iBAAiBme,EAAEie,EAAEje,EAAExpB,KAAKqL,SAASsJ,KAAKjD,MAAMiD,KAAKC,UAAU4U,IAAIxpB,KAAK03E,UAAU,EAAE13E,KAAK23E,UAAS,EAAG33E,KAAK43E,QAAQ53E,KAAK63E,OAAO,oBAAoBL,SAASv/E,EAAEoN,EAAE,WAAWsxE,EAAEtxE,EAAErF,KAAKqL,SAAS,iBAAiBhG,EAAEoiC,EAAEpiC,EAAErF,KAAKqL,SAASsJ,KAAKjD,MAAMiD,KAAKC,UAAUvP,IAAIrF,KAAK83E,OAAO,oBAAoBN,SAASv/E,EAAEuxB,EAAE,WAAWmtD,EAAEntD,EAAExpB,KAAKqL,SAAS,iBAAiBme,EAAEie,EAAEje,EAAExpB,KAAKqL,SAASsJ,KAAKjD,MAAMiD,KAAKC,UAAU4U,KAAKxpB,KAAK+3E,QAAQ,IAAIpvC,CAAC,CAAC,OAAOtjC,EAAExF,UAAUorC,KAAK,WAAW,OAAOjrC,KAAKg4E,UAAUh4E,KAAKmK,GAAGnK,KAAKy3E,GAAG,EAAEpyE,EAAExF,UAAUm4E,UAAU,SAAS3yE,EAAEmkB,GAAG,IAAI9e,EAAE,EAAE,CAAC,GAAG1K,KAAKqL,QAAQusE,QAAQ53E,KAAK03E,WAAW,EAAE13E,KAAK03E,UAAU13E,KAAKqL,QAAQ4sE,SAAS,MAAM,IAAIrtD,MAAM,qBAAqBjoB,OAAOgS,KAAKC,UAAU5U,KAAK63E,QAAQ,QAAQl1E,OAAOgS,KAAKC,UAAU5U,KAAK83E,UAAU,KAAKptE,EAAE1K,KAAKk4E,aAAa7yE,EAAEmkB,EAAE,KAAK5uB,SAASq7E,EAAE5wE,EAAEmkB,KAAKxpB,KAAK23E,WAA2D33E,KAAK23E,UAAS,EAAG3uC,EAAE3jC,GAAGqF,EAAE1K,KAAKk4E,aAAa7yE,EAAEmkB,EAAE,OAAO9e,EAAE9P,OAAO,IAAIoF,KAAK23E,UAAS,EAAG33E,KAAK+3E,QAAQx7E,IAAImO,GAAGi9B,EAAEtiC,EAAEqF,EAAE1K,KAAKqL,SAAS,OAAOX,EAAE9P,OAAO,GAAG,OAAOoF,KAAK+3E,QAAQzgC,IAAI,EAAEjyC,EAAExF,UAAUq4E,aAAa,SAAS7yE,EAAEmkB,EAAE9e,GAAG,IAAIlJ,EAAEogB,EAAE,GAAG5hB,KAAKqL,QAAQ8sE,UAAUztE,EAAE9P,OAAOoF,KAAKqL,QAAQ8sE,SAAS,MAAM,GAAG,IAAI9yE,EAAEywE,UAAU,CAAC,GAAGt0E,EAAExB,KAAKo4E,cAAc/yE,EAAEmkB,EAAE9e,GAAG1K,KAAKqL,QAAQgtE,kBAAkBz2D,EAAE5hB,KAAKqL,QAAQgtE,gBAAgBhzE,EAAEmkB,EAAEhoB,MAAMA,EAAEogB,GAAGpgB,EAAE5G,OAAO,EAAE,OAAOyK,EAAEywE,WAAU,EAAGt0E,EAAE6D,EAAEywE,WAAU,CAAE,CAAC,GAAGj0E,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAE,QAAQ,MAAM,GAAG,IAAIA,EAAE0wE,UAAU,CAAC,IAAIv0E,EAAExB,KAAKs4E,cAAcjzE,EAAEmkB,EAAE9e,IAAI9P,OAAO,EAAE,OAAO4G,EAAE6D,EAAE0wE,WAAU,CAAE,CAAC,GAAG/1E,KAAKqL,QAAQ6oE,eAAe7uE,EAAE2wE,UAAU,CAAC,IAAIx0E,EAAExB,KAAKu4E,cAAclzE,EAAEmkB,EAAE9e,IAAI9P,OAAO,EAAE,OAAOyK,EAAE2wE,WAAU,EAAGx0E,EAAE6D,EAAE2wE,WAAU,CAAE,CAAC,MAAM,EAAE,EAAE3wE,EAAExF,UAAUu4E,cAAc,SAAS/yE,EAAEmkB,EAAE9e,GAAG,IAAIlJ,EAAEogB,EAAErpB,EAAEkxB,EAAEpY,EAAEpN,EAAEwV,EAAE,GAAG,GAAGpU,EAAEsuE,WAAWnqD,EAAEmqD,SAAS,CAAC,IAAIjpE,EAAE9P,OAAO,MAAM,IAAIgwB,MAAM,gDAAgD,MAAM,EAAC,IAAKle,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOe,gBAAgBvB,SAAS7zE,KAAKqL,QAAQgpE,OAAOU,SAASzyC,EAAEj9B,IAAIwuE,SAAS7zE,KAAKqL,QAAQgpE,OAAOtI,SAASzpC,EAAE9Y,IAAIqqD,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,GAAG,CAAC,GAAGA,EAAE9P,QAAQoF,KAAKqL,QAAQ4sE,QAAQtgF,KAAKiH,KAAKyG,EAAEtI,YAAY,IAAInC,QAAQ4uB,EAAEzsB,YAAY,IAAInC,QAAQ,MAAM,EAAC,IAAK8R,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOe,gBAAgBvB,SAAS7zE,KAAKqL,QAAQgpE,OAAOU,SAASzyC,EAAEj9B,IAAIwuE,SAAS7zE,KAAKqL,QAAQgpE,OAAOtI,SAASzpC,EAAE9Y,IAAIqqD,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,IAAI,GAAG7I,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAE,SAASA,EAAE8e,OAAOqF,EAAErF,KAAK,MAAM,UAAU9e,EAAEsuE,SAAS,EAAC,IAAKjnE,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOQ,mBAAmBhB,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,GAAGmpE,SAAS7zE,KAAKqL,QAAQgpE,OAAOU,SAAS1vE,EAAE8e,MAAM0vD,SAAS7zE,KAAKqL,QAAQgpE,OAAOtI,SAASviD,EAAErF,OAAO,EAAC,IAAKzX,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOY,eAAepB,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,GAAGmpE,SAAS7zE,KAAKqL,QAAQgpE,OAAOU,SAAS1vE,EAAE8e,MAAM0vD,SAAS7zE,KAAKqL,QAAQgpE,OAAOtI,SAASviD,EAAErF,OAAO,IAAIvC,EAAEvc,EAAEd,WAAW1C,OAAO8T,KAAKtQ,EAAEd,YAAYw9C,OAAO,GAAGxpD,EAAEixB,EAAEjlB,WAAW1C,OAAO8T,KAAK6T,EAAEjlB,YAAYw9C,OAAO,GAAGt4B,EAAE7H,EAAEhnB,OAAOqJ,EAAE,EAAEA,EAAEwlB,EAAExlB,IAAIzC,EAAEogB,EAAE3d,IAAI,KAAKoN,EAAE9Y,EAAEL,QAAQsJ,IAAIiY,EAAElU,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOO,iBAAiBf,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,GAAGmpE,SAAS7zE,KAAKqL,QAAQgpE,OAAO/+E,KAAKkM,GAAGqyE,SAAS7zE,KAAKqL,QAAQgpE,OAAOr1E,MAAMqG,EAAEd,WAAW/C,MAAMjJ,EAAE+rB,OAAOjT,EAAE,GAAGhM,EAAEd,WAAW/C,KAAKgoB,EAAEjlB,WAAW/C,IAAIiY,EAAElU,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOM,iBAAiBd,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,GAAGmpE,SAAS7zE,KAAKqL,QAAQgpE,OAAO/+E,KAAKkM,GAAGqyE,SAAS7zE,KAAKqL,QAAQgpE,OAAOU,SAAS1vE,EAAEd,WAAW/C,IAAIqyE,SAAS7zE,KAAKqL,QAAQgpE,OAAOtI,SAASviD,EAAEjlB,WAAW/C,MAAM,IAAIioB,EAAElxB,EAAEqC,OAAOqJ,EAAE,EAAEA,EAAEwlB,EAAExlB,IAAIzC,EAAEjJ,EAAE0L,GAAGwV,EAAElU,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOK,cAAcb,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,GAAGmpE,SAAS7zE,KAAKqL,QAAQgpE,OAAO/+E,KAAKkM,GAAGqyE,SAAS7zE,KAAKqL,QAAQgpE,OAAOr1E,MAAMwqB,EAAEjlB,WAAW/C,KAAK,OAAOiY,CAAC,EAAEpU,EAAExF,UAAUy4E,cAAc,SAASjzE,EAAEmkB,EAAE9e,GAAG,IAAIlJ,EAAE6D,EAAEtI,WAAWsI,EAAEtI,WAAW8K,QAAQ,GAAG+Z,EAAE4H,EAAEzsB,WAAWysB,EAAEzsB,WAAW8K,QAAQ,GAAGtP,EAAEZ,KAAKC,IAAI4J,EAAE5G,OAAOgnB,EAAEhnB,QAAQ6uB,EAAE9xB,KAAKiH,IAAI4C,EAAE5G,OAAOgnB,EAAEhnB,QAAQyW,EAAE,GAAGpN,EAAE,EAAE,IAAIjE,KAAKqL,QAAQmtE,eAAejgF,EAAEyH,KAAKqL,QAAQmtE,cAAc,CAAC,IAAI/+D,EAAEy8D,QAAQ7wE,EAAEixE,SAASjxE,EAAEkxE,cAActlE,EAAEwI,EAAEpU,EAAEixE,QAAQjxE,EAAEtI,YAAYysB,EAAEzsB,WAAWs5E,EAAEhxE,EAAEmkB,GAAG,GAAG,GAAGvY,EAAErW,OAAO,IAAIyW,EAAErR,KAAKy4E,uBAAuBpzE,EAAEmkB,EAAEvY,EAAEvG,EAAE+O,IAAI7e,OAAO,EAAE,OAAOyW,CAAC,CAAC,IAAI,IAAIqI,EAAE,EAAEA,EAAEnhB,EAAEmhB,GAAG,EAAE,CAAC,IAAIgQ,EAAEloB,EAAEkY,GAAG9Q,EAAEgZ,EAAElI,GAAG+P,IAAIC,IAAI9gB,EAAE,UAAU8gB,EAAEiqD,UAAUtiE,EAAE9L,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOoB,mBAAmB5B,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,EAAE/H,OAAOsB,IAAI4vE,SAAS7zE,KAAKqL,QAAQgpE,OAAOr1E,MAAM0qB,EAAEvF,OAAOlgB,GAAG,IAAIoN,EAAE9L,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOmB,eAAe3B,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,EAAE/H,OAAOsB,IAAI4vE,SAAS7zE,KAAKqL,QAAQgpE,OAAOx3E,QAAQylC,EAAE5Y,KAAKzlB,GAAG,GAAG2E,IAAI8gB,IAAI,UAAU9gB,EAAE+qE,SAAStiE,EAAE9L,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOG,gBAAgBX,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,EAAE/H,OAAOsB,IAAI4vE,SAAS7zE,KAAKqL,QAAQgpE,OAAOr1E,MAAM4J,EAAEub,OAAO9S,EAAE9L,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOE,YAAYV,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,EAAE/H,OAAOsB,IAAI4vE,SAAS7zE,KAAKqL,QAAQgpE,OAAOx3E,QAAQylC,EAAE15B,OAAO8gB,GAAG9gB,KAAK5I,KAAKqL,QAAQmtE,eAAejgF,EAAEyH,KAAKqL,QAAQmtE,cAAcnnE,EAAEA,EAAE1O,OAAO3C,KAAKk4E,aAAaxuD,EAAE9gB,EAAE8B,EAAE/H,OAAOsB,KAAKgyE,EAAEvsD,EAAE9gB,KAAKpH,EAAE5G,OAAOgnB,EAAEhnB,QAAQ,UAAU8uB,EAAEiqD,SAAStiE,EAAE9L,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOoB,mBAAmB5B,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,EAAE/H,OAAOsB,IAAI4vE,SAAS7zE,KAAKqL,QAAQgpE,OAAOr1E,MAAM0qB,EAAEvF,OAAO9S,EAAE9L,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOmB,eAAe3B,SAAS7zE,KAAKqL,QAAQgpE,OAAOx3E,QAAQylC,EAAE5Y,IAAImqD,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,EAAE/H,OAAOsB,KAAKzC,EAAE8iB,OAAO5K,EAAE,GAAGA,GAAG,EAAEzV,GAAG,EAAEwlB,GAAG,GAAGjoB,EAAE5G,OAAOgnB,EAAEhnB,QAAQyW,EAAEA,EAAE1O,OAAO,EAAC,IAAK+J,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOE,YAAYV,SAAS7zE,KAAKqL,QAAQgpE,OAAOx3E,QAAQylC,EAAE15B,IAAIirE,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,EAAE/H,OAAOsB,MAAMzC,EAAE8iB,OAAO5K,EAAE,EAAE4oB,EAAE15B,IAAI6gB,GAAG,GAAGpY,EAAEA,EAAE1O,OAAO,EAAC,IAAK+J,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOe,gBAAgBvB,SAAS7zE,KAAKqL,QAAQgpE,OAAOU,SAASzyC,EAAE5Y,IAAImqD,SAAS7zE,KAAKqL,QAAQgpE,OAAOtI,SAASzpC,EAAE15B,IAAIirE,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,EAAE/H,OAAOsB,QAAQA,GAAG,CAAC,CAAC,OAAOoB,EAAE0wE,WAAU,EAAG1kE,CAAC,EAAEhM,EAAExF,UAAU44E,uBAAuB,SAASpzE,EAAEmkB,EAAE9e,EAAElJ,EAAEogB,GAAG,IAAI,IAAIrpB,EAAEkxB,EAAEpY,EAAEpN,EAAEwV,EAAExI,EAAE,SAAS5L,EAAEmkB,EAAE9e,GAAG,IAAIlJ,EAAE6D,EAAEtI,WAAWq5E,EAAE/wE,EAAEtI,WAAWnC,QAAO,GAAI,GAAGgnB,EAAE4H,EAAEzsB,WAAWq5E,EAAE5sD,EAAEzsB,WAAWnC,QAAO,GAAI,GAAGrC,EAAE,EAAE,OAAOmS,EAAE5H,SAAQ,SAAUuC,GAAG,IAAI,IAAImkB,EAAEnkB,EAAE0vE,SAAS1vE,EAAEzK,OAAO8P,EAAErF,EAAE0mE,SAAS1mE,EAAEzK,OAAO6uB,EAAEpkB,EAAE0vE,SAAStrD,EAAED,EAAEC,GAAG,EAAEjoB,EAAEioB,GAAGlxB,EAAE,IAAIkxB,EAAEpkB,EAAE0mE,SAAStiD,EAAE/e,EAAE+e,GAAG,EAAE7H,EAAE6H,GAAGlxB,EAAEA,GAAG,CAAE,IAAG,CAACmgF,MAAMl3E,EAAEm3E,MAAM/2D,EAAE,CAAzR,CAA2Rvc,EAAEmkB,EAAE9e,GAAGgP,EAAEzI,EAAEynE,MAAMhvD,EAAEzY,EAAE0nE,MAAM/vE,EAAEvD,EAAEtI,WAAW8K,QAAQ5P,EAAEuxB,EAAEzsB,WAAW8K,QAAQyiB,EAAE3yB,KAAKE,IAAI6hB,EAAE9e,OAAO8uB,EAAE9uB,QAAQpC,EAAE,GAAGgC,EAAE,EAAEooD,EAAE,EAAEpoD,EAAE8vB,EAAEs4B,GAAG,EAAEpoD,GAAG,EAAE,IAAIonB,IAAG,IAAKlI,EAAElf,KAAI,IAAKkvB,EAAElvB,GAAI,IAAG,IAAKkf,EAAEkpC,GAAG,GAAG,WAAW3+C,EAAE2E,EAAEg6C,IAAI+wB,SAAS,GAAG,UAAU17E,EAAEuC,GAAGm5E,UAAU,GAAG1vE,EAAEkgB,OAAOlsB,EAAEuC,GAAG2pB,KAAK,CAAC,IAAI,IAAI3K,EAAEopC,EAAEh6C,EAAEhO,OAAO4e,EAAE,GAAG,UAAU5Q,EAAE4Q,EAAE,GAAGm6D,UAAU,GAAGn6D,GAAG,EAAEvhB,EAAEuC,GAAG2pB,OAAOvb,EAAE4Q,GAAG2K,KAAK,CAAC1K,GAAE,EAAG,KAAK,CAACA,GAAGjhB,EAAE+M,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOQ,mBAAmBhB,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM9yE,EAAEmB,OAAOigD,IAAIixB,SAAS7zE,KAAKqL,QAAQgpE,OAAOU,SAAS9wE,EAAEkgB,MAAM0vD,SAAS7zE,KAAKqL,QAAQgpE,OAAOtI,SAAS9zE,EAAEuC,GAAG2pB,MAAM,OAAO3rB,EAAE+M,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOoB,mBAAmB5B,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM9yE,EAAEmB,OAAOigD,IAAIixB,SAAS7zE,KAAKqL,QAAQgpE,OAAOr1E,MAAMiF,EAAEkgB,OAAOzK,EAAE4K,OAAOs+B,EAAE,GAAGh6C,EAAE0b,OAAOs+B,EAAE,GAAGt4B,EAAE3yB,KAAKE,IAAI6hB,EAAE9e,OAAO8uB,EAAE9uB,QAAQgoD,GAAG,EAAEpoD,GAAG,OAAM,IAAKkvB,EAAElvB,GAAGhC,EAAE+M,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOe,gBAAgBvB,SAAS7zE,KAAKqL,QAAQgpE,OAAOU,SAASzyC,EAAEr+B,IAAI4vE,SAAS7zE,KAAKqL,QAAQgpE,OAAOtI,SAASzpC,EAAErqC,EAAEuC,KAAKq5E,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM9yE,EAAEmB,OAAOigD,MAAMpqD,EAAE+M,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOmB,eAAe3B,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM9yE,EAAEmB,OAAOigD,IAAIixB,SAAS7zE,KAAKqL,QAAQgpE,OAAOx3E,QAAQylC,EAAEr+B,KAAKyV,EAAE4K,OAAOs+B,EAAE,GAAGh6C,EAAE0b,OAAOs+B,EAAE,GAAGt4B,EAAE3yB,KAAKE,IAAI6hB,EAAE9e,OAAO8uB,EAAE9uB,QAAQgoD,GAAG,EAAEpoD,GAAG,QAAQ,IAAG,IAAKkvB,EAAElvB,GAAG,WAAWyJ,EAAEhM,EAAEuC,IAAIm5E,UAAUn7E,EAAE+M,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOG,gBAAgBX,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM9yE,EAAEmB,OAAOigD,IAAIixB,SAAS7zE,KAAKqL,QAAQgpE,OAAOr1E,MAAMiF,EAAEkgB,OAAOzK,EAAE4K,OAAOs+B,EAAE,GAAE,GAAIh6C,EAAE0b,OAAOs+B,EAAE,EAAE,CAAC+wB,SAAS,QAAQxvD,KAAKlgB,EAAEkgB,OAAOmG,EAAE3yB,KAAKE,IAAI6hB,EAAE9e,OAAO8uB,EAAE9uB,UAAUpC,EAAE+M,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOE,YAAYV,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM9yE,EAAEmB,OAAOigD,IAAIixB,SAAS7zE,KAAKqL,QAAQgpE,OAAOx3E,QAAQylC,EAAEr+B,KAAKyV,EAAE4K,OAAOs+B,EAAE,GAAE,GAAIh6C,EAAE0b,OAAOs+B,EAAE,EAAEtgB,EAAEr+B,IAAIqmB,EAAE3yB,KAAKE,IAAI6hB,EAAE9e,OAAO8uB,EAAE9uB,cAAc,GAAG8e,EAAEkpC,KAAKl5B,EAAElvB,GAAG,CAAC,GAAGhC,EAAEoC,OAAO,EAAE,OAAOpC,EAAE,GAAG6Y,EAAE3G,EAAEgP,EAAEkpC,KAAKn5B,EAAE9xB,KAAKE,IAAIwZ,EAAE06D,SAASnjE,EAAEhO,OAAOyW,EAAEzW,WAAWyW,EAAE0jE,SAAS,CAACx8E,GAAE,EAAG,IAAI,IAAI+gB,EAAE,EAAEA,EAAEjI,EAAEzW,OAAO0e,GAAG,EAAE68D,EAAEvtE,EAAE6gB,EAAEnQ,GAAG1Q,EAAEyI,EAAE0jE,SAASz7D,GAAG,CAAC,GAAE,GAAG,KAAM/gB,GAAE,GAAI,GAAGA,EAAE,MAAM,EAAC,IAAKmU,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOiB,eAAezB,SAAS7zE,KAAKqL,QAAQgpE,OAAOkB,YAAYlkE,EAAEzW,QAAQi5E,SAAS7zE,KAAKqL,QAAQgpE,OAAO5xE,KAAK4O,EAAE0jE,UAAUlB,SAAS7zE,KAAKqL,QAAQgpE,OAAOxoE,GAAG4d,GAAGoqD,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM9yE,GAAG,CAAC,CAAO,OAAOhJ,CAAC,EAAE6M,EAAExF,UAAU04E,cAAc,SAASlzE,EAAEmkB,EAAE9e,GAAG,IAAIlJ,EAAE,GAAG,OAAO6D,EAAE+uE,WAAW5qD,EAAE4qD,UAAU5yE,EAAE+D,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOc,gBAAgBtB,SAAS7zE,KAAKqL,QAAQgpE,OAAOU,SAAS1vE,EAAE+uE,UAAUP,SAAS7zE,KAAKqL,QAAQgpE,OAAOtI,SAASviD,EAAE4qD,UAAUP,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,KAAKrF,EAAErG,OAAOwqB,EAAExqB,QAAQqG,EAAErG,QAAQwqB,EAAExqB,OAAO,WAAWqG,EAAEsuE,UAAUnyE,EAAE+D,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOW,aAAanB,SAAS7zE,KAAKqL,QAAQgpE,OAAOU,SAAS1vE,EAAErG,OAAO,IAAI60E,SAAS7zE,KAAKqL,QAAQgpE,OAAOtI,SAASviD,EAAExqB,OAAO,IAAI60E,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,IAAIrF,EAAE8uE,UAAU3qD,EAAE2qD,SAAS3yE,EAAE+D,MAAK,IAAKmH,GAAGmnE,SAAS7zE,KAAKqL,QAAQgpE,OAAOlzC,OAAOnhC,KAAKqL,QAAQgpE,OAAOa,eAAerB,SAAS7zE,KAAKqL,QAAQgpE,OAAOU,SAAS1vE,EAAE8uE,SAASN,SAAS7zE,KAAKqL,QAAQgpE,OAAOtI,SAASviD,EAAE2qD,SAASN,SAAS7zE,KAAKqL,QAAQgpE,OAAOC,MAAM5pE,IAAIlJ,CAAC,EAAE6D,CAAC,CAAnoT,GAAuoTyc,EAAE,CAAC81D,OAAM,EAAGK,QAAQ,GAAGE,UAAS,EAAGK,cAAc,GAAGtE,cAAa,EAAGY,SAAS,SAASzvE,EAAEmkB,EAAE9e,EAAElJ,GAAG6D,EAAE8e,KAAK3iB,CAAC,EAAEi1E,oBAAoB,WAAW,EAAEC,qBAAqB,WAAW,EAAEjC,aAAa,WAAW,EAAEiB,cAAc,WAAW,EAAE2C,gBAAgB,KAAKO,UAAS,EAAGvE,QAAO,EAAGl4E,WAAW,oBAAoBzH,SAASA,OAAOyH,WAAWzH,OAAOyH,SAAShD,WAAW,IAAI+vC,EAAE,WAAW,SAAS7jC,EAAEA,GAAG,QAAG,IAASA,IAAIA,EAAE,CAAC,GAAGxD,OAAOukC,QAAQtkB,GAAGhf,SAAQ,SAAU0mB,GAAG,IAAI9e,EAAE8e,EAAE,GAAGhoB,EAAEgoB,EAAE,GAAG3nB,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAEqF,KAAKrF,EAAEqF,GAAGlJ,EAAG,KAAI6D,EAAEgvE,OAAO,CAAC,IAAI7qD,EAAE,CAAC,eAAe,kBAAkB,kBAAkB,oBAAoB,gBAAgB,gBAAgB,aAAa,oBAAoB,iBAAiB,iBAAiB,cAAc,gBAAgB,iBAAiB,gBAAgB,SAAS,QAAQ,WAAW,WAAW,UAAU,QAAQ,cAAc,OAAO,KAAK,OAAO,QAAQ,OAAO,aAAa,WAAW,aAAa,UAAU,YAAY9e,EAAE,CAAC,EAAErF,EAAEuzE,SAASpvD,EAAE1mB,SAAQ,SAAUuC,EAAEmkB,GAAG,OAAO9e,EAAErF,GAAGmkB,CAAE,IAAGA,EAAE1mB,SAAQ,SAAUuC,GAAG,OAAOqF,EAAErF,GAAGA,CAAE,IAAGA,EAAEgvE,OAAO3pE,CAAC,CAAC1K,KAAKqL,QAAQhG,CAAC,CAAC,OAAOA,EAAExF,UAAU7E,MAAM,SAASqK,EAAEmkB,GAAG,OAAO,SAASnkB,EAAEmkB,EAAE9e,GAAG,OAAO8e,EAAE9T,OAAM,SAAU8T,GAAG,OAAOhvB,EAAE6K,EAAEmkB,EAAE9e,EAAG,GAAE,CAA9D,CAAgErF,EAAEmkB,EAAExpB,KAAKqL,QAAQ,EAAEhG,EAAExF,UAAUg5E,KAAK,SAASxzE,EAAEmkB,GAAG,OAA/muB,SAAWnkB,EAAEmkB,EAAE9e,IAAI8e,EAAEA,EAAE3hB,SAASjF,UAAU4mB,EAAE1mB,SAAQ,SAAU0mB,IAAI,SAASnkB,EAAEmkB,EAAE9e,GAAG,OAAO8e,EAAE9e,EAAE2pE,OAAOlzC,SAAS,KAAKz2B,EAAE2pE,OAAOK,aAAalrD,EAAE9e,EAAE2pE,OAAOlzC,QAAQz2B,EAAE2pE,OAAOO,gBAAgBp6E,EAAE6K,EAAEmkB,EAAE9e,GAAG,MAAM,KAAKA,EAAE2pE,OAAOM,gBAAgB/xB,EAAEp5B,EAAE9e,EAAE2pE,OAAOU,SAASrqE,EAAE2pE,OAAOtI,UAAUvxE,EAAE6K,EAAEmkB,EAAE9e,GAAG,MAAM,KAAKA,EAAE2pE,OAAOO,gBAAgBprD,EAAE9e,EAAE2pE,OAAOlzC,QAAQz2B,EAAE2pE,OAAOK,aAAal6E,EAAE6K,EAAEmkB,EAAE9e,GAAG,MAAM,KAAKA,EAAE2pE,OAAOQ,kBAAkB,KAAKnqE,EAAE2pE,OAAOW,YAAY,KAAKtqE,EAAE2pE,OAAOY,cAAc,KAAKvqE,EAAE2pE,OAAOa,cAAc,KAAKxqE,EAAE2pE,OAAOc,eAAe,KAAKzqE,EAAE2pE,OAAOe,eAAexyB,EAAEp5B,EAAE9e,EAAE2pE,OAAOU,SAASrqE,EAAE2pE,OAAOtI,UAAUvxE,EAAE6K,EAAEmkB,EAAE9e,GAAG,MAAM,KAAKA,EAAE2pE,OAAOiB,cAAc1yB,EAAEp5B,EAAE9e,EAAE2pE,OAAO5xE,KAAKiI,EAAE2pE,OAAOxoE,IAAIrR,EAAE6K,EAAEmkB,EAAE9e,GAAG,MAAM,KAAKA,EAAE2pE,OAAOmB,cAAchsD,EAAE9e,EAAE2pE,OAAOlzC,QAAQz2B,EAAE2pE,OAAOE,WAAW/5E,EAAE6K,EAAEmkB,EAAE9e,GAAG,MAAM,KAAKA,EAAE2pE,OAAOE,WAAW/qD,EAAE9e,EAAE2pE,OAAOlzC,QAAQz2B,EAAE2pE,OAAOmB,cAAch7E,EAAE6K,EAAEmkB,EAAE9e,GAAG,MAAM,KAAKA,EAAE2pE,OAAOoB,kBAAkBjsD,EAAE9e,EAAE2pE,OAAOlzC,QAAQz2B,EAAE2pE,OAAOG,eAAeh6E,EAAE6K,EAAEmkB,EAAE9e,GAAG,MAAM,KAAKA,EAAE2pE,OAAOG,eAAehrD,EAAE9e,EAAE2pE,OAAOlzC,QAAQz2B,EAAE2pE,OAAOoB,kBAAkBj7E,EAAE6K,EAAEmkB,EAAE9e,GAA+C,CAAz9B,CAA29BrF,EAAEmkB,EAAE9e,EAAG,GAAE,CAAglsB8O,CAAEnU,EAAEmkB,EAAExpB,KAAKqL,QAAQ,EAAEhG,EAAExF,UAAUrG,KAAK,SAAS6L,EAAEmkB,GAAG,OAAO,IAAI+f,EAAElkC,EAAEmkB,EAAExpB,KAAKqL,SAAS4/B,MAAM,EAAE5lC,CAAC,CAA77B,GAAi8B,MAAMyzE,EAAE,CAACzzE,EAAEmkB,EAAE9e,GAAGquE,QAAQv3E,EAAEwc,OAAO4D,EAAEo3D,aAAazgF,EAAE0gF,SAASxvD,EAAEzjB,QAAQqL,EAAEjc,KAAK6O,IAAIi1E,eAAez/D,EAAE0/D,aAAaz/D,MAAK,CAAEi6D,SAAS,KAAK52E,WAAWsI,EAAErN,KAAI,CAAEqN,EAAEqkB,KAAK,MAAM9gB,EAAE4gB,EAAEE,IAAI,CAACt0B,KAAK6O,EAAE+Z,OAAO4D,EAAEq3D,UAAS,EAAGG,YAAW,GAAI,GAAGxwE,EAAEuS,OAAO,OAAO,MAAMzO,EAAErH,EAAEd,WAAW,IAAIc,EAAEd,YAAY,CAAC,EAAE,GAAGqE,EAAEqwE,UAAUxvD,KAAKpY,EAAEzW,QAAQ8e,KAAK9Q,EAAE3F,OAAOyJ,EAAE,mBAAmB,OAAOA,EAAE,iBAAiB,QAAQ9D,EAAEywE,cAAc3sE,EAAEkpE,MAAM3kE,EAAEvE,EAAEkpE,MAAMhtE,EAAEywE,cAAc3uE,EAAEq3C,MAAMr3C,EAAEq3C,KAAKu3B,SAAS5vD,EAAE,CAAC,MAAMrkB,EAAE,QAAQqF,EAAEq3C,KAAKlM,IAAIr0C,EAAE+3E,UAAU/3E,EAAEg4E,WAAW9sE,EAAEkpE,MAAM3kE,EAAEvE,EAAEkpE,MAAMvwE,GAAGqH,EAAE,aAAa,QAAQhC,EAAEq3C,KAAKlM,IAAI,YAAY,YAAY,MAAMnrC,EAAE6lC,QAAQ7mB,KAAKhd,EAAEkpE,MAAM3kE,EAAEvE,EAAEkpE,MAAMp0E,EAAEi4E,eAAe,GAAG/uE,EAAEgvE,OAAOhwD,KAAKjQ,EAAE,CAAC,MAAMpU,EAAE,UAAUqF,EAAEgvE,OAAOhwD,OAAOhd,EAAEzO,MAAMgT,EAAEvE,EAAEzO,MAAMoH,EAAE,CAAC,GAAGgM,EAAEzW,SAAS8e,EAAE,CAAC,MAAMrU,EAAE,8CAA8CqH,EAAEzO,MAAMgT,EAAEvE,EAAEzO,MAAMoH,EAAE,CAAC,MAAMpN,EAAE,SAASoN,EAAEjQ,KAAKiQ,EAAE8e,KAAK,CAAC,CAACwvD,SAAS,QAAQxvD,KAAK9e,EAAEsK,MAAM2P,OAAOja,EAAE8e,QAAQ,MAAM,CAACwvD,SAAS,KAAKpvE,WAAWmI,EAAE3P,YAAYxE,IAAI8Y,EAAEzW,QAAQ8e,EAAE9Q,EAAEqwE,UAAUxvD,EAAE,CAAC,CAACkqD,SAAS,SAASpvE,WAAW,CAACqxE,MAAMhtE,EAAE3F,OAAOzB,EAAEyB,OAAOzB,EAAEm4E,QAAQ58E,WAAW9E,IAAIA,EAAE,CAAC,CAAC07E,SAAS,QAAQxvD,KAAK,KAAM,IAAGlhB,QAAQoC,GAAGA,MAAMmjC,EAAE,CAACnjC,EAAEmkB,EAAE9e,EAAElJ,EAAEjJ,EAAEkxB,GAAGsvD,QAAQ1nE,EAAE2nE,aAAa/0E,EAAE21E,OAAOngE,EAAEogE,OAAOngE,EAAEsE,OAAO0L,EAAEuvD,SAASrwE,EAAE5C,QAAQ0G,EAAEtX,KAAK6C,EAAE6hF,UAAUxvD,EAAEyvD,SAASvhF,IAAI0gF,eAAe1+E,EAAE2+E,aAAav2B,EAAEo3B,aAAaxgE,GAAGF,EAAEC,KAAK,MAAMs8D,EAAE,CAAClC,SAAS,QAAQpvE,WAAW,IAAIc,GAAGtI,WAAW,CAAC,CAAC42E,SAAS,QAAQ52E,WAAW2N,EAAE1S,KAAI,EAAG4pC,IAAIv8B,EAAE1B,MAAM6lB,MAAM,MAAM9e,EAAE,CAACipE,SAAS,KAAKpvE,WAAW,IAAIc,EAAEd,WAAW,aAAa+a,OAAOkK,IAAIzsB,WAAWsI,EAAE40E,MAAMjiF,KAAI,CAAEqN,EAAEqF,KAAK,MAAM+e,EAAEjoB,EAAEkJ,IAAI,CAACtV,KAAK6C,EAAE+lB,OAAO0L,EAAEuvD,UAAS,EAAGG,YAAW,GAAI,GAAG3vD,EAAEtO,OAAO,OAAO,MAAM9J,EAAE,CAACsiE,SAAS,KAAKpvE,WAAWc,EAAEd,WAAW,IAAIc,EAAEd,YAAY,CAAC,EAAExH,WAAW,SAAS0sB,EAAEr0B,KAAKiQ,EAAE8e,KAAK,CAAC,CAACwvD,SAAS,QAAQxvD,KAAKvC,EAAEvc,MAAM,GAAGoU,GAAGC,IAAInhB,EAAEmhF,OAAOhvE,IAAIlQ,IAAI6W,EAAE9M,WAAWtG,MAAMgT,EAAEI,EAAE9M,WAAWtG,MAAM,UAAU1F,EAAEmhF,OAAOhvE,SAAS+e,EAAEywD,YAAY7oE,EAAE9M,WAAWqxE,MAAM3kE,EAAEI,EAAE9M,WAAWqxE,MAAMnsD,EAAEywD,YAAYzwD,EAAEioB,OAAO,CAAC,MAAMlwC,EAAEioB,EAAEioB,OAAOrsC,EAAE8e,KAAK9S,EAAEmY,EAAE9e,GAAG,GAAGlJ,EAAE,CAAC,GAAG,iBAAiBA,EAAE,OAAOA,EAAE,CAAC,MAAM6D,EAAEoiC,EAAE,OAAOjmC,UAAU,IAAI6D,EAAEtI,WAAWnC,QAAQ,CAAC,QAAQ,YAAYZ,SAASqL,EAAEtI,WAAW,GAAG42E,UAAUtiE,EAAEtU,WAAW,GAAGonB,KAAK3iB,EAAE6P,EAAEtU,WAAWsI,EAAEtI,UAAU,CAAC,CAAC,CAAC,OAAOsU,CAAE,IAAGpO,QAAQoC,GAAGA,KAAK,GAAGmkB,IAAIC,IAAI/e,EAAEnG,WAAWqxE,MAAM3kE,EAAEvG,EAAEnG,WAAWqxE,MAAMvkE,EAAE0pD,SAASzwC,EAAE,CAAC,MAAM9oB,EAAE8oB,EAAEjlB,EAAEqF,EAAE8e,GAAG,GAAGhoB,EAAE,CAAC,GAAG,iBAAiBA,EAAE,OAAOA,EAAE,CAAC,MAAM6D,EAAEoiC,EAAE,OAAOjmC,WAAW6D,EAAEtI,YAAY,IAAIsI,EAAEtI,WAAWnC,QAAQ,CAAC,QAAQ,YAAYZ,SAASqL,EAAEtI,WAAW,GAAG42E,UAAUjpE,EAAE3N,WAAW,GAAGonB,KAAK3iB,EAAEkJ,EAAE3N,WAAWsI,EAAEtI,UAAU,CAAC,CAAC,CAAC,OAAO2N,CAAE,OAAM,GAAGmrE,EAAEtxE,WAAWqxE,MAAM3kE,EAAE4kE,EAAEtxE,WAAWqxE,MAAMvkE,EAAE8oE,OAAO1gE,GAAGC,GAAGF,EAAE,CAAC,MAAMnU,EAAEyzE,EAAEtvD,EAAEhoB,EAAEjJ,EAAE,CAACwgF,QAAQ1nE,EAAE2nE,aAAa/0E,EAAEg1E,SAASrwE,EAAE5C,QAAQ0G,GAAG,CAACwsE,eAAe1+E,EAAE2+E,aAAav2B,IAAI,GAAGnpC,GAAGD,EAAE,CAAC,MAAMgQ,EAAE,CAACmqD,SAAS,QAAQ52E,WAAW,CAACsI,KAAKqH,EAAE9R,SAASqJ,GAAG2+C,IAAIp5B,EAAEjlB,WAAW,CAACtG,MAAM,iBAAiB43E,EAAE94E,WAAW0lD,QAAQj5B,EAAE,CAAC,GAAG9P,EAAE,CAAC,MAAM8P,EAAE,CAACmqD,SAAS,QAAQ52E,WAAW,CAAC0c,EAAE2gE,gBAAgB/0E,GAAGA,KAAKqH,EAAE9R,SAASqJ,GAAG2+C,IAAIp5B,EAAEjlB,WAAW,CAACtG,MAAM,iBAAiB43E,EAAE94E,WAAWwI,KAAKikB,EAAE,CAAC,CAAC,OAAOlQ,EAAExW,SAASuC,GAAGwwE,EAAE94E,WAAWwI,KAAKF,KAAKkU,EAAEzW,SAASuC,GAAGwwE,EAAE94E,WAAWwI,KAAKF,MAAK,IAAK7M,IAAIq9E,EAAEtxE,WAAWkT,SAAS6H,OAAO9mB,IAAIq9E,GAAgJ,SAASrsC,EAAEnkC,GAAG,OAAOA,GAAGA,EAAEg1E,YAAYx4E,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAE,WAAWA,EAAEovC,QAAQpvC,CAAC,CAAhP,oBAAoBi1E,WAAWA,WAAW,oBAAoB5lF,OAAOA,YAAO,IAAoB,EAAA41B,EAAO,EAAAA,EAAO,oBAAoBiF,MAAMA,KAAyG,IAAmBsY,EAAE2B,EAAf,CAACpjB,QAAQ,CAAC,GAASA,QAAQ,WAAW,IAAUoD,EAAE,IAAI9e,EAAE,KAAKlJ,EAAE,cAAcogB,EAAE,SAASrpB,EAAE,SAASkxB,EAAE,OAAOpY,EAAE,MAAMpN,EAAE,OAAOwV,EAAE,QAAQxI,EAAE,UAAUyI,EAAE,OAAOgQ,EAAE,OAAO9gB,EAAE,eAAe8D,EAAE,6FAA6FzU,EAAE,sFAAsFqyB,EAAE,CAACh1B,KAAK,KAAKilF,SAAS,2DAA2D92E,MAAM,KAAK3J,OAAO,wFAAwF2J,MAAM,KAAK0lC,QAAQ,SAAS9jC,GAAG,IAAImkB,EAAE,CAAC,KAAK,KAAK,KAAK,MAAM9e,EAAErF,EAAE,IAAI,MAAM,IAAIA,GAAGmkB,GAAG9e,EAAE,IAAI,KAAK8e,EAAE9e,IAAI8e,EAAE,IAAI,GAAG,GAAGhxB,EAAE,SAAS6M,EAAEmkB,EAAE9e,GAAG,IAAIlJ,EAAE8d,OAAOja,GAAG,OAAO7D,GAAGA,EAAE5G,QAAQ4uB,EAAEnkB,EAAE,GAAGvK,MAAM0uB,EAAE,EAAEhoB,EAAE5G,QAAQ8K,KAAKgF,GAAGrF,CAAC,EAAE7K,EAAE,CAACkQ,EAAElS,EAAEgxC,EAAE,SAASnkC,GAAG,IAAImkB,GAAGnkB,EAAEm1E,YAAY9vE,EAAE/S,KAAKiH,IAAI4qB,GAAGhoB,EAAE7J,KAAK2B,MAAMoR,EAAE,IAAIkX,EAAElX,EAAE,GAAG,OAAO8e,GAAG,EAAE,IAAI,KAAKhxB,EAAEgJ,EAAE,EAAE,KAAK,IAAIhJ,EAAEopB,EAAE,EAAE,IAAI,EAAE3pB,EAAE,SAASoN,EAAEmkB,EAAE9e,GAAG,GAAG8e,EAAE1yB,OAAO4T,EAAE5T,OAAO,OAAOuO,EAAEqF,EAAE8e,GAAG,IAAIhoB,EAAE,IAAIkJ,EAAEhS,OAAO8wB,EAAE9wB,SAASgS,EAAE3S,QAAQyxB,EAAEzxB,SAAS6pB,EAAE4H,EAAE3mB,QAAQtG,IAAIiF,EAAEiY,GAAGlhB,EAAEmS,EAAEkX,EAAE,EAAE6H,EAAED,EAAE3mB,QAAQtG,IAAIiF,GAAGjJ,GAAG,EAAE,GAAGkhB,GAAG,UAAUjY,GAAGkJ,EAAEkX,IAAIrpB,EAAEqpB,EAAE6H,EAAEA,EAAE7H,KAAK,EAAE,EAAErpB,EAAE,SAAS8M,GAAG,OAAOA,EAAE,EAAE1N,KAAKopB,KAAK1b,IAAI,EAAE1N,KAAK2B,MAAM+L,EAAE,EAAEuD,EAAE,SAASvD,GAAG,MAAM,CAACkU,EAAEE,EAAEH,EAAEI,EAAEF,EAAEvV,EAAEwV,EAAEpI,EAAEwkE,EAAEnsD,EAAEhQ,EAAE+P,EAAExxB,EAAEM,EAAEmS,EAAEkX,EAAE64D,GAAGj5E,EAAEk5E,EAAEzpE,GAAG5L,IAAIia,OAAOja,GAAG,IAAIlP,cAAcmS,QAAQ,KAAK,GAAG,EAAEohB,EAAE,SAASrkB,GAAG,YAAO,IAASA,CAAC,GAAGu9C,EAAE,KAAKppC,EAAE,CAAC,EAAEA,EAAEopC,GAAGt4B,EAAE,IAAIhR,EAAE,iBAAiBC,EAAE,SAASlU,GAAG,OAAOA,aAAa4wE,MAAM5wE,IAAIA,EAAEiU,GAAG,EAAEu8D,EAAE,SAASxwE,EAAEmkB,EAAE9e,EAAElJ,GAAG,IAAIogB,EAAE,IAAI4H,EAAE,OAAOo5B,EAAE,GAAG,iBAAiBp5B,EAAE,CAAC,IAAIjxB,EAAEixB,EAAErzB,cAAcqjB,EAAEjhB,KAAKqpB,EAAErpB,GAAGmS,IAAI8O,EAAEjhB,GAAGmS,EAAEkX,EAAErpB,GAAG,IAAIkxB,EAAED,EAAE/lB,MAAM,KAAK,IAAIme,GAAG6H,EAAE7uB,OAAO,EAAE,OAAOyK,EAAEokB,EAAE,GAAG,KAAK,CAAC,IAAIpY,EAAEmY,EAAEl0B,KAAKkkB,EAAEnI,GAAGmY,EAAE5H,EAAEvQ,CAAC,CAAC,OAAO7P,GAAGogB,IAAIghC,EAAEhhC,GAAGA,IAAIpgB,GAAGohD,CAAC,EAAE5Z,EAAE,SAAS3jC,EAAEmkB,GAAG,GAAGjQ,EAAElU,GAAG,OAAOA,EAAExC,QAAQ,IAAI6H,EAAE,iBAAiB8e,EAAEA,EAAE,CAAC,EAAE,OAAO9e,EAAE5T,KAAKuO,EAAEqF,EAAE7P,KAAKF,UAAU,IAAIs7E,EAAEvrE,EAAE,EAAE43B,EAAE9nC,EAAE8nC,EAAEr+B,EAAE4xE,EAAEvzC,EAAE9gC,EAAE+X,EAAE+oB,EAAE9oB,EAAE,SAASnU,EAAEmkB,GAAG,OAAOwf,EAAE3jC,EAAE,CAAC6lC,OAAO1hB,EAAEmxD,GAAGC,IAAIpxD,EAAEqxD,GAAGv4C,EAAE9Y,EAAEsxD,GAAGC,QAAQvxD,EAAEuxD,SAAS,EAAE,IAAI9E,EAAE,WAAW,SAAS3rD,EAAEjlB,GAAGrF,KAAK26E,GAAG9E,EAAExwE,EAAE6lC,OAAO,MAAK,GAAIlrC,KAAK0R,MAAMrM,GAAGrF,KAAK86E,GAAG96E,KAAK86E,IAAIz1E,EAAEi9B,GAAG,CAAC,EAAEtiC,KAAKsZ,IAAG,CAAE,CAAC,IAAI9gB,EAAE8xB,EAAEzqB,UAAU,OAAOrH,EAAEkZ,MAAM,SAASrM,GAAGrF,KAAKg7E,GAAG,SAAS31E,GAAG,IAAImkB,EAAEnkB,EAAEvO,KAAK4T,EAAErF,EAAEu1E,IAAI,GAAG,OAAOpxD,EAAE,OAAO,IAAIzyB,KAAKkkF,KAAK,GAAG34C,EAAE5Y,EAAEF,GAAG,OAAO,IAAIzyB,KAAK,GAAGyyB,aAAazyB,KAAK,OAAO,IAAIA,KAAKyyB,GAAG,GAAG,iBAAiBA,IAAI,MAAM7zB,KAAK6zB,GAAG,CAAC,IAAIhoB,EAAEgoB,EAAE3wB,MAAM6T,GAAG,GAAGlL,EAAE,CAAC,IAAIogB,EAAEpgB,EAAE,GAAG,GAAG,EAAEjJ,GAAGiJ,EAAE,IAAI,KAAK0G,UAAU,EAAE,GAAG,OAAOwC,EAAE,IAAI3T,KAAKA,KAAKmkF,IAAI15E,EAAE,GAAGogB,EAAEpgB,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEjJ,IAAI,IAAIxB,KAAKyK,EAAE,GAAGogB,EAAEpgB,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEjJ,EAAE,CAAC,CAAC,OAAO,IAAIxB,KAAKyyB,EAAE,CAA3X,CAA6XnkB,GAAGrF,KAAKirC,MAAM,EAAEzyC,EAAEyyC,KAAK,WAAW,IAAI5lC,EAAErF,KAAKg7E,GAAGh7E,KAAKm7E,GAAG91E,EAAE3N,cAAcsI,KAAKo7E,GAAG/1E,EAAE5N,WAAWuI,KAAKq7E,GAAGh2E,EAAEhO,UAAU2I,KAAKs7E,GAAGj2E,EAAElO,SAAS6I,KAAKu7E,GAAGl2E,EAAEwjC,WAAW7oC,KAAKw7E,GAAGn2E,EAAE0jC,aAAa/oC,KAAKy7E,GAAGp2E,EAAE+3B,aAAap9B,KAAK07E,IAAIr2E,EAAEyjC,iBAAiB,EAAEtwC,EAAEmjF,OAAO,WAAW,OAAOr5C,CAAC,EAAE9pC,EAAEojF,QAAQ,WAAW,QAAQ57E,KAAKg7E,GAAGx0E,aAAaoC,EAAE,EAAEpQ,EAAEqjF,OAAO,SAASx2E,EAAEmkB,GAAG,IAAI9e,EAAEs+B,EAAE3jC,GAAG,OAAOrF,KAAK87E,QAAQtyD,IAAI9e,GAAGA,GAAG1K,KAAK+7E,MAAMvyD,EAAE,EAAEhxB,EAAEwjF,QAAQ,SAAS32E,EAAEmkB,GAAG,OAAOwf,EAAE3jC,GAAGrF,KAAK87E,QAAQtyD,EAAE,EAAEhxB,EAAEyjF,SAAS,SAAS52E,EAAEmkB,GAAG,OAAOxpB,KAAK+7E,MAAMvyD,GAAGwf,EAAE3jC,EAAE,EAAE7M,EAAE0jF,GAAG,SAAS72E,EAAEmkB,EAAE9e,GAAG,OAAO43B,EAAE5Y,EAAErkB,GAAGrF,KAAKwpB,GAAGxpB,KAAK8X,IAAIpN,EAAErF,EAAE,EAAE7M,EAAE2jF,KAAK,WAAW,OAAOxkF,KAAK2B,MAAM0G,KAAK9F,UAAU,IAAI,EAAE1B,EAAE0B,QAAQ,WAAW,OAAO8F,KAAKg7E,GAAGjiF,SAAS,EAAEP,EAAEsjF,QAAQ,SAASz2E,EAAEmkB,GAAG,IAAI9e,EAAE1K,KAAKwB,IAAI8gC,EAAE5Y,EAAEF,IAAIA,EAAEvY,EAAEqxB,EAAE15B,EAAEvD,GAAGuD,EAAE,SAASvD,EAAEmkB,GAAG,IAAI5H,EAAE0gB,EAAE9oB,EAAE9O,EAAEmwE,GAAG9jF,KAAKmkF,IAAIxwE,EAAEywE,GAAG3xD,EAAEnkB,GAAG,IAAItO,KAAK2T,EAAEywE,GAAG3xD,EAAEnkB,GAAGqF,GAAG,OAAOlJ,EAAEogB,EAAEA,EAAEm6D,MAAM1qE,EAAE,EAAE3E,EAAE,SAASrH,EAAEmkB,GAAG,OAAO8Y,EAAE9oB,EAAE9O,EAAE0xE,SAAS/2E,GAAGrK,MAAM0P,EAAE0xE,OAAO,MAAM56E,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,MAAMqG,MAAM2hB,IAAI9e,EAAE,EAAEzS,EAAE+H,KAAKs7E,GAAGhxD,EAAEtqB,KAAKo7E,GAAG5iF,EAAEwH,KAAKq7E,GAAG7gF,EAAE,OAAOwF,KAAK66E,GAAG,MAAM,IAAI,OAAO5pE,GAAG,KAAKyI,EAAE,OAAOlY,EAAEoH,EAAE,EAAE,GAAGA,EAAE,GAAG,IAAI,KAAK6Q,EAAE,OAAOjY,EAAEoH,EAAE,EAAE0hB,GAAG1hB,EAAE,EAAE0hB,EAAE,GAAG,KAAKrmB,EAAE,IAAI2+C,EAAE5iD,KAAKq8E,UAAUC,WAAW,EAAE9iE,GAAGvhB,EAAE2qD,EAAE3qD,EAAE,EAAEA,GAAG2qD,EAAE,OAAOh6C,EAAEpH,EAAEhJ,EAAEghB,EAAEhhB,GAAG,EAAEghB,GAAG8Q,GAAG,KAAKjZ,EAAE,KAAKqY,EAAE,OAAOhd,EAAElS,EAAE,QAAQ,GAAG,KAAKivB,EAAE,OAAO/c,EAAElS,EAAE,UAAU,GAAG,KAAKjC,EAAE,OAAOmU,EAAElS,EAAE,UAAU,GAAG,KAAKonB,EAAE,OAAOlV,EAAElS,EAAE,eAAe,GAAG,QAAQ,OAAOwF,KAAK6C,QAAQ,EAAErK,EAAEujF,MAAM,SAAS12E,GAAG,OAAOrF,KAAK87E,QAAQz2E,GAAE,EAAG,EAAE7M,EAAE+jF,KAAK,SAASl3E,EAAEmkB,GAAG,IAAI9e,EAAEzG,EAAEq+B,EAAE15B,EAAEvD,GAAG4L,EAAE,OAAOjR,KAAK66E,GAAG,MAAM,IAAIjyE,GAAG8B,EAAE,CAAC,EAAEA,EAAE2G,GAAGJ,EAAE,OAAOvG,EAAEgf,GAAGzY,EAAE,OAAOvG,EAAE+O,GAAGxI,EAAE,QAAQvG,EAAEgP,GAAGzI,EAAE,WAAWvG,EAAE+e,GAAGxY,EAAE,QAAQvG,EAAEnS,GAAG0Y,EAAE,UAAUvG,EAAEkX,GAAG3Q,EAAE,UAAUvG,EAAElJ,GAAGyP,EAAE,eAAevG,GAAGzG,GAAGyI,EAAEzI,IAAIoN,EAAErR,KAAKq7E,IAAI7xD,EAAExpB,KAAKs7E,IAAI9xD,EAAE,GAAGvlB,IAAIwV,GAAGxV,IAAIyV,EAAE,CAAC,IAAIzhB,EAAE+H,KAAK6C,QAAQiV,IAAI4R,EAAE,GAAGzxB,EAAE+iF,GAAGpyE,GAAG8D,GAAGzU,EAAEgzC,OAAOjrC,KAAKg7E,GAAG/iF,EAAE6f,IAAI4R,EAAE/xB,KAAKE,IAAImI,KAAKq7E,GAAGpjF,EAAET,gBAAgBwjF,EAAE,MAAMpyE,GAAG5I,KAAKg7E,GAAGpyE,GAAG8D,GAAG,OAAO1M,KAAKirC,OAAOjrC,IAAI,EAAExH,EAAEsf,IAAI,SAASzS,EAAEmkB,GAAG,OAAOxpB,KAAK6C,QAAQ05E,KAAKl3E,EAAEmkB,EAAE,EAAEhxB,EAAEqf,IAAI,SAASxS,GAAG,OAAOrF,KAAKsiC,EAAE15B,EAAEvD,KAAK,EAAE7M,EAAE+D,IAAI,SAASiF,EAAEyP,GAAG,IAAIyY,EAAE9gB,EAAE5I,KAAKwB,EAAE0rB,OAAO1rB,GAAG,IAAIkL,EAAE41B,EAAE15B,EAAEqI,GAAGhZ,EAAE,SAASoN,GAAG,IAAImkB,EAAEwf,EAAEpgC,GAAG,OAAO05B,EAAE9oB,EAAEgQ,EAAE1yB,KAAK0yB,EAAE1yB,OAAOa,KAAKmpB,MAAMzb,EAAE7D,IAAIoH,EAAE,EAAE,GAAG8D,IAAI+M,EAAE,OAAOzZ,KAAK8X,IAAI2B,EAAEzZ,KAAKo7E,GAAG55E,GAAG,GAAGkL,IAAIgN,EAAE,OAAO1Z,KAAK8X,IAAI4B,EAAE1Z,KAAKm7E,GAAG35E,GAAG,GAAGkL,IAAI2E,EAAE,OAAOpZ,EAAE,GAAG,GAAGyU,IAAIzI,EAAE,OAAOhM,EAAE,GAAG,IAAIqyB,GAAGZ,EAAE,CAAC,EAAEA,EAAEnxB,GAAGixB,EAAEE,EAAED,GAAG/e,EAAEgf,EAAE9H,GAA50I,IAAi1I8H,GAAGhd,IAAI,EAAElU,EAAEwH,KAAKg7E,GAAGjiF,UAAUyI,EAAE8oB,EAAE,OAAOgY,EAAE9oB,EAAEhhB,EAAEwH,KAAK,EAAExH,EAAE2nB,SAAS,SAAS9a,EAAEmkB,GAAG,OAAOxpB,KAAKzD,KAAK,EAAE8I,EAAEmkB,EAAE,EAAEhxB,EAAEwlB,OAAO,SAAS3Y,GAAG,IAAImkB,EAAExpB,KAAK0K,EAAE1K,KAAKq8E,UAAU,IAAIr8E,KAAK47E,UAAU,OAAOlxE,EAAE8xE,aAAa5zE,EAAE,IAAIpH,EAAE6D,GAAG,uBAAuBuc,EAAE0gB,EAAEkH,EAAExpC,MAAMzH,EAAEyH,KAAKu7E,GAAG9xD,EAAEzpB,KAAKw7E,GAAGnqE,EAAErR,KAAKo7E,GAAGn3E,EAAEyG,EAAE6vE,SAAS9gE,EAAE/O,EAAE5Q,OAAOmX,EAAEvG,EAAE+xE,SAAS/iE,EAAE,SAASrU,EAAEqF,EAAEkX,EAAErpB,GAAG,OAAO8M,IAAIA,EAAEqF,IAAIrF,EAAEmkB,EAAEhoB,KAAKogB,EAAElX,GAAG7C,MAAM,EAAEtP,EAAE,EAAEmxB,EAAE,SAASrkB,GAAG,OAAOi9B,EAAE53B,EAAEnS,EAAE,IAAI,GAAG8M,EAAE,IAAI,EAAEqH,EAAEuE,GAAG,SAAS5L,EAAEmkB,EAAE9e,GAAG,IAAIlJ,EAAE6D,EAAE,GAAG,KAAK,KAAK,OAAOqF,EAAElJ,EAAErL,cAAcqL,CAAC,EAAE,OAAOA,EAAE8G,QAAQrQ,GAAE,SAAUoN,EAAE7D,GAAG,OAAOA,GAAG,SAAS6D,GAAG,OAAOA,GAAG,IAAI,KAAK,OAAOia,OAAOkK,EAAE2xD,IAAItzE,OAAO,GAAG,IAAI,OAAO,OAAOy6B,EAAE53B,EAAE8e,EAAE2xD,GAAG,EAAE,KAAK,IAAI,IAAI,OAAO9pE,EAAE,EAAE,IAAI,KAAK,OAAOixB,EAAE53B,EAAE2G,EAAE,EAAE,EAAE,KAAK,IAAI,MAAM,OAAOqI,EAAEhP,EAAEgyE,YAAYrrE,EAAEoI,EAAE,GAAG,IAAI,OAAO,OAAOC,EAAED,EAAEpI,GAAG,IAAI,IAAI,OAAOmY,EAAE6xD,GAAG,IAAI,KAAK,OAAO/4C,EAAE53B,EAAE8e,EAAE6xD,GAAG,EAAE,KAAK,IAAI,IAAI,OAAO/7D,OAAOkK,EAAE8xD,IAAI,IAAI,KAAK,OAAO5hE,EAAEhP,EAAEiyE,YAAYnzD,EAAE8xD,GAAGr3E,EAAE,GAAG,IAAI,MAAM,OAAOyV,EAAEhP,EAAEkyE,cAAcpzD,EAAE8xD,GAAGr3E,EAAE,GAAG,IAAI,OAAO,OAAOA,EAAEulB,EAAE8xD,IAAI,IAAI,IAAI,OAAOh8D,OAAO/mB,GAAG,IAAI,KAAK,OAAO+pC,EAAE53B,EAAEnS,EAAE,EAAE,KAAK,IAAI,IAAI,OAAOmxB,EAAE,GAAG,IAAI,KAAK,OAAOA,EAAE,GAAG,IAAI,IAAI,OAAOhd,EAAEnU,EAAEkxB,GAAE,GAAI,IAAI,IAAI,OAAO/c,EAAEnU,EAAEkxB,GAAE,GAAI,IAAI,IAAI,OAAOnK,OAAOmK,GAAG,IAAI,KAAK,OAAO6Y,EAAE53B,EAAE+e,EAAE,EAAE,KAAK,IAAI,IAAI,OAAOnK,OAAOkK,EAAEiyD,IAAI,IAAI,KAAK,OAAOn5C,EAAE53B,EAAE8e,EAAEiyD,GAAG,EAAE,KAAK,IAAI,MAAM,OAAOn5C,EAAE53B,EAAE8e,EAAEkyD,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO95D,EAAE,OAAO,IAAI,CAAptB,CAAstBvc,IAAIuc,EAAEtZ,QAAQ,IAAI,GAAI,GAAE,EAAE9P,EAAEgiF,UAAU,WAAW,OAAO,IAAI7iF,KAAKmpB,MAAM9gB,KAAKg7E,GAAGhiF,oBAAoB,GAAG,EAAER,EAAEgB,KAAK,SAASgI,EAAEkoB,EAAE9gB,GAAG,IAAI8D,EAAEzU,EAAE+H,KAAKsqB,EAAEgY,EAAE15B,EAAE8gB,GAAGlxB,EAAEwwC,EAAExnC,GAAGhH,GAAGhC,EAAEgiF,YAAYx6E,KAAKw6E,aAAahxD,EAAEo5B,EAAE5iD,KAAKxH,EAAEghB,EAAE,WAAW,OAAO8oB,EAAErqC,EAAEA,EAAEO,EAAE,EAAE,OAAO8xB,GAAG,KAAK5Q,EAAEhN,EAAE8M,IAAI,GAAG,MAAM,KAAKC,EAAE/M,EAAE8M,IAAI,MAAM,KAAKvI,EAAEvE,EAAE8M,IAAI,EAAE,MAAM,KAAKvV,EAAEyI,GAAGk2C,EAAEpoD,GAAG,OAAO,MAAM,KAAK6W,EAAE3E,GAAGk2C,EAAEpoD,GAAG,MAAM,MAAM,KAAKivB,EAAE/c,EAAEk2C,EAAEl4C,EAAE,MAAM,KAAKnS,EAAEmU,EAAEk2C,EAAEp5B,EAAE,MAAM,KAAK5H,EAAElV,EAAEk2C,EAA18L,IAA88L,MAAM,QAAQl2C,EAAEk2C,EAAE,OAAOh6C,EAAE8D,EAAE41B,EAAE/pC,EAAEmU,EAAE,EAAElU,EAAEhB,YAAY,WAAW,OAAOwI,KAAK+7E,MAAMtiE,GAAG4hE,EAAE,EAAE7iF,EAAE6jF,QAAQ,WAAW,OAAO7iE,EAAExZ,KAAK26E,GAAG,EAAEniF,EAAE0yC,OAAO,SAAS7lC,EAAEmkB,GAAG,IAAInkB,EAAE,OAAOrF,KAAK26E,GAAG,IAAIjwE,EAAE1K,KAAK6C,QAAQrB,EAAEq0E,EAAExwE,EAAEmkB,GAAE,GAAI,OAAOhoB,IAAIkJ,EAAEiwE,GAAGn5E,GAAGkJ,CAAC,EAAElS,EAAEqK,MAAM,WAAW,OAAOy/B,EAAE9oB,EAAExZ,KAAKg7E,GAAGh7E,KAAK,EAAExH,EAAE4jF,OAAO,WAAW,OAAO,IAAIrlF,KAAKiJ,KAAK9F,UAAU,EAAE1B,EAAEqkF,OAAO,WAAW,OAAO78E,KAAK47E,UAAU57E,KAAK88E,cAAc,IAAI,EAAEtkF,EAAEskF,YAAY,WAAW,OAAO98E,KAAKg7E,GAAG8B,aAAa,EAAEtkF,EAAEgO,SAAS,WAAW,OAAOxG,KAAKg7E,GAAG9oB,aAAa,EAAE5nC,CAAC,CAA/sJ,GAAmtJ6rD,EAAEF,EAAEp2E,UAAU,OAAOmpC,EAAEnpC,UAAUs2E,EAAE,CAAC,CAAC,MAAM30E,GAAG,CAAC,KAAKogB,GAAG,CAAC,KAAKrpB,GAAG,CAAC,KAAKkxB,GAAG,CAAC,KAAKpY,GAAG,CAAC,KAAKoI,GAAG,CAAC,KAAKC,GAAG,CAAC,KAAKgQ,IAAI5mB,SAAQ,SAAUuC,GAAG8wE,EAAE9wE,EAAE,IAAI,SAASmkB,GAAG,OAAOxpB,KAAKk8E,GAAG1yD,EAAEnkB,EAAE,GAAGA,EAAE,GAAG,CAAE,IAAG2jC,EAAE+zC,OAAO,SAAS13E,EAAEmkB,GAAG,OAAOnkB,EAAE23E,KAAK33E,EAAEmkB,EAAEysD,EAAEjtC,GAAG3jC,EAAE23E,IAAG,GAAIh0C,CAAC,EAAEA,EAAEkC,OAAO2qC,EAAE7sC,EAAEi0C,QAAQ1jE,EAAEyvB,EAAEmzC,KAAK,SAAS92E,GAAG,OAAO2jC,EAAE,IAAI3jC,EAAE,EAAE2jC,EAAEk0C,GAAG1jE,EAAEopC,GAAG5Z,EAAEm0C,GAAG3jE,EAAEwvB,EAAEpgC,EAAE,CAAC,EAAEogC,CAAC,CAAzxN,IAA6yN0xC,EAAElxC,EAAf,CAACpjB,QAAQ,CAAC,GAASA,QAAQ,WAAW,IAAI/gB,EAAE,CAAC+3E,IAAI,YAAYC,GAAG,SAAS31C,EAAE,aAAa41C,GAAG,eAAeC,IAAI,sBAAsBC,KAAK,6BAA6Bh0D,EAAE,0FAA0F9e,EAAE,OAAOlJ,EAAE,QAAQogB,EAAE,qBAAqBrpB,EAAE,CAAC,EAAEkxB,EAAE,SAASpkB,GAAG,OAAOA,GAAGA,IAAIA,EAAE,GAAG,KAAK,IAAI,EAAEgM,EAAE,SAAShM,GAAG,OAAO,SAASmkB,GAAGxpB,KAAKqF,IAAImkB,CAAC,CAAC,EAAEvlB,EAAE,CAAC,sBAAsB,SAASoB,IAAIrF,KAAKy9E,OAAOz9E,KAAKy9E,KAAK,CAAC,IAAIrlF,OAAO,SAASiN,GAAG,IAAIA,EAAE,OAAO,EAAE,GAAG,MAAMA,EAAE,OAAO,EAAE,IAAImkB,EAAEnkB,EAAExM,MAAM,gBAAgB6R,EAAE,GAAG8e,EAAE,KAAKA,EAAE,IAAI,GAAG,OAAO,IAAI9e,EAAE,EAAE,MAAM8e,EAAE,IAAI9e,EAAEA,CAAC,CAAhI,CAAkIrF,EAAE,GAAGoU,EAAE,SAASpU,GAAG,IAAImkB,EAAEjxB,EAAE8M,GAAG,OAAOmkB,IAAIA,EAAEtxB,QAAQsxB,EAAEA,EAAE9e,EAAE/H,OAAO6mB,EAAE9c,GAAG,EAAEuE,EAAE,SAAS5L,EAAEmkB,GAAG,IAAI9e,EAAElJ,EAAEjJ,EAAEkkF,SAAS,GAAGj7E,GAAG,IAAI,IAAIogB,EAAE,EAAEA,GAAG,GAAGA,GAAG,EAAE,GAAGvc,EAAEnN,QAAQsJ,EAAEogB,EAAE,EAAE4H,KAAK,EAAE,CAAC9e,EAAEkX,EAAE,GAAG,KAAK,OAAOlX,EAAErF,KAAKmkB,EAAE,KAAK,MAAM,OAAO9e,CAAC,EAAEgP,EAAE,CAAC2uB,EAAE,CAACzmB,EAAE,SAASvc,GAAGrF,KAAK09E,UAAUzsE,EAAE5L,GAAE,EAAG,GAAG9M,EAAE,CAACqpB,EAAE,SAASvc,GAAGrF,KAAK09E,UAAUzsE,EAAE5L,GAAE,EAAG,GAAGsiC,EAAE,CAAC,KAAK,SAAStiC,GAAGrF,KAAK9G,aAAa,KAAKmM,CAAC,GAAGs4E,GAAG,CAACjzE,EAAE,SAASrF,GAAGrF,KAAK9G,aAAa,IAAImM,CAAC,GAAGu4E,IAAI,CAAC,QAAQ,SAASv4E,GAAGrF,KAAK9G,cAAcmM,CAAC,GAAGqF,EAAE,CAAClJ,EAAE6P,EAAE,YAAYwsE,GAAG,CAACr8E,EAAE6P,EAAE,YAAYpZ,EAAE,CAACuJ,EAAE6P,EAAE,YAAYysE,GAAG,CAACt8E,EAAE6P,EAAE,YAAYm2B,EAAE,CAAChmC,EAAE6P,EAAE,UAAUqI,EAAE,CAAClY,EAAE6P,EAAE,UAAU0sE,GAAG,CAACv8E,EAAE6P,EAAE,UAAU2sE,GAAG,CAACx8E,EAAE6P,EAAE,UAAUwkE,EAAE,CAACr0E,EAAE6P,EAAE,QAAQ4sE,GAAG,CAACvzE,EAAE2G,EAAE,QAAQ6sE,GAAG,CAACt8D,EAAE,SAASvc,GAAG,IAAImkB,EAAEjxB,EAAE4wC,QAAQz+B,EAAErF,EAAExM,MAAM,OAAO,GAAGmH,KAAK/I,IAAIyT,EAAE,GAAG8e,EAAE,IAAI,IAAIhoB,EAAE,EAAEA,GAAG,GAAGA,GAAG,EAAEgoB,EAAEhoB,GAAG8G,QAAQ,SAAS,MAAMjD,IAAIrF,KAAK/I,IAAIuK,EAAE,GAAG+X,EAAE,CAAC/X,EAAE6P,EAAE,UAAU8sE,GAAG,CAACzzE,EAAE2G,EAAE,UAAU+sE,IAAI,CAACx8D,EAAE,SAASvc,GAAG,IAAImkB,EAAE/P,EAAE,UAAU/O,GAAG+O,EAAE,gBAAgB+P,EAAExxB,KAAI,SAAUqN,GAAG,OAAOA,EAAEwC,MAAM,EAAE,EAAG,KAAI3P,QAAQmN,GAAG,EAAE,GAAGqF,EAAE,EAAE,MAAM,IAAIkgB,MAAM5qB,KAAKjI,MAAM2S,EAAE,IAAIA,CAAC,GAAG2zE,KAAK,CAACz8D,EAAE,SAASvc,GAAG,IAAImkB,EAAE/P,EAAE,UAAUvhB,QAAQmN,GAAG,EAAE,GAAGmkB,EAAE,EAAE,MAAM,IAAIoB,MAAM5qB,KAAKjI,MAAMyxB,EAAE,IAAIA,CAAC,GAAG+f,EAAE,CAAC,WAAWl4B,EAAE,SAASitE,GAAG,CAAC5zE,EAAE,SAASrF,GAAGrF,KAAKtH,KAAK+wB,EAAEpkB,EAAE,GAAGk5E,KAAK,CAAC,QAAQltE,EAAE,SAASo4B,EAAExlC,EAAEu6E,GAAGv6E,GAAG,SAASylB,EAAEhf,GAAG,IAAIlJ,EAAEogB,EAAEpgB,EAAEkJ,EAAEkX,EAAErpB,GAAGA,EAAEkmF,QAAQ,IAAI,IAAIh1D,GAAG/e,EAAElJ,EAAE8G,QAAQ,qCAAoC,SAAUkhB,EAAE9e,EAAElJ,GAAG,IAAIjJ,EAAEiJ,GAAGA,EAAE8H,cAAc,OAAOoB,GAAGkX,EAAEpgB,IAAI6D,EAAE7D,IAAIogB,EAAErpB,GAAG+P,QAAQ,kCAAiC,SAAUjD,EAAEmkB,EAAE9e,GAAG,OAAO8e,GAAG9e,EAAE7C,MAAM,EAAG,GAAG,KAAIhP,MAAM2wB,GAAGnY,EAAEoY,EAAE7uB,OAAOqJ,EAAE,EAAEA,EAAEoN,EAAEpN,GAAG,EAAE,CAAC,IAAIwV,EAAEgQ,EAAExlB,GAAGgN,EAAEyI,EAAED,GAAGiQ,EAAEzY,GAAGA,EAAE,GAAGrI,EAAEqI,GAAGA,EAAE,GAAGwY,EAAExlB,GAAG2E,EAAE,CAACyW,MAAMqK,EAAEq8B,OAAOn9C,GAAG6Q,EAAEnR,QAAQ,WAAW,GAAG,CAAC,OAAO,SAASjD,GAAG,IAAI,IAAImkB,EAAE,CAAC,EAAE9e,EAAE,EAAElJ,EAAE,EAAEkJ,EAAE2G,EAAE3G,GAAG,EAAE,CAAC,IAAIkX,EAAE6H,EAAE/e,GAAG,GAAG,iBAAiBkX,EAAEpgB,GAAGogB,EAAEhnB,WAAW,CAAC,IAAIrC,EAAEqpB,EAAEvC,MAAMpb,EAAE2d,EAAEmkC,OAAOtsC,EAAEpU,EAAEwC,MAAMrG,GAAGyP,EAAE1Y,EAAEuxC,KAAKrwB,GAAG,GAAGxV,EAAE5B,KAAKmnB,EAAEvY,GAAG5L,EAAEA,EAAEiD,QAAQ2I,EAAE,GAAG,CAAC,CAAC,OAAO,SAAS5L,GAAG,IAAImkB,EAAEnkB,EAAEq4E,UAAU,QAAG,IAASl0D,EAAE,CAAC,IAAI9e,EAAErF,EAAE0mC,MAAMviB,EAAE9e,EAAE,KAAKrF,EAAE0mC,OAAO,IAAI,KAAKrhC,IAAIrF,EAAE0mC,MAAM,UAAU1mC,EAAEq4E,SAAS,CAAC,CAAxH,CAA0Hl0D,GAAGA,CAAC,CAAC,CAAC,OAAO,SAASnkB,EAAEmkB,EAAE9e,GAAGA,EAAE9B,EAAE81E,mBAAkB,EAAGr5E,GAAGA,EAAEs5E,oBAAoBl1D,EAAEpkB,EAAEs5E,mBAAmB,IAAIn9E,EAAEgoB,EAAE3pB,UAAU+hB,EAAEpgB,EAAEkQ,MAAMlQ,EAAEkQ,MAAM,SAASrM,GAAG,IAAImkB,EAAEnkB,EAAEvO,KAAK0K,EAAE6D,EAAEu1E,IAAInxD,EAAEpkB,EAAExK,KAAKmF,KAAK66E,GAAGr5E,EAAE,IAAI6P,EAAEoY,EAAE,GAAG,GAAG,iBAAiBpY,EAAE,CAAC,IAAIpN,GAAE,IAAKwlB,EAAE,GAAGhQ,GAAE,IAAKgQ,EAAE,GAAGxY,EAAEhN,GAAGwV,EAAEC,EAAE+P,EAAE,GAAGhQ,IAAIC,EAAE+P,EAAE,IAAIlxB,EAAEyH,KAAKq8E,WAAWp4E,GAAGyV,IAAInhB,EAAEmS,EAAEyyE,GAAGzjE,IAAI1Z,KAAKg7E,GAAG,SAAS31E,EAAEmkB,EAAE9e,GAAG,IAAI,GAAG,CAAC,IAAI,KAAKxS,QAAQsxB,IAAI,EAAE,OAAO,IAAIzyB,MAAM,MAAMyyB,EAAE,IAAI,GAAGnkB,GAAG,IAAI7D,EAAEkoB,EAAEF,EAAFE,CAAKrkB,GAAGuc,EAAEpgB,EAAE9I,KAAKH,EAAEiJ,EAAEzJ,MAAM0xB,EAAEjoB,EAAEvK,IAAIoa,EAAE7P,EAAEuqC,MAAM9nC,EAAEzC,EAAEwqC,QAAQvyB,EAAEjY,EAAEo9E,QAAQ3tE,EAAEzP,EAAEtI,aAAawgB,EAAElY,EAAEi8E,KAAK70E,EAAE,IAAI7R,KAAK2V,EAAE+c,IAAI7H,GAAGrpB,EAAE,EAAEqQ,EAAEvR,WAAWY,EAAE2pB,GAAGhZ,EAAElR,cAAc4yB,EAAE,EAAE1I,IAAIrpB,IAAI+xB,EAAE/xB,EAAE,EAAEA,EAAE,EAAEqQ,EAAEnR,YAAY,IAAIe,EAAE6Y,GAAG,EAAE7W,EAAEyJ,GAAG,EAAE2+C,EAAEnpC,GAAG,EAAED,EAAEvI,GAAG,EAAE,OAAOyI,EAAE,IAAI3iB,KAAKA,KAAKmkF,IAAIjjF,EAAEqyB,EAAE5d,EAAElU,EAAEgC,EAAEooD,EAAEppC,EAAE,GAAGE,EAAEthB,OAAO,MAAMsS,EAAE,IAAI3T,KAAKA,KAAKmkF,IAAIjjF,EAAEqyB,EAAE5d,EAAElU,EAAEgC,EAAEooD,EAAEppC,IAAI,IAAIziB,KAAKkB,EAAEqyB,EAAE5d,EAAElU,EAAEgC,EAAEooD,EAAEppC,EAAE,CAAC,MAAMnU,GAAG,OAAO,IAAItO,KAAK,GAAG,CAAC,CAAzc,CAA2cyyB,EAAEnY,EAAE7P,GAAGxB,KAAKirC,OAAOvxB,IAAG,IAAKA,IAAI1Z,KAAK26E,GAAG36E,KAAKkrC,OAAOxxB,GAAGihE,IAAI1pE,GAAGuY,GAAGxpB,KAAKge,OAAO3M,KAAKrR,KAAKg7E,GAAG,IAAIjkF,KAAK,KAAKwB,EAAE,CAAC,CAAC,MAAM,GAAG8Y,aAAavW,MAAM,IAAI,IAAI8N,EAAEyI,EAAEzW,OAAO8R,EAAE,EAAEA,GAAG9D,EAAE8D,GAAG,EAAE,CAAC+c,EAAE,GAAGpY,EAAE3E,EAAE,GAAG,IAAIzU,EAAEyS,EAAE1P,MAAMgF,KAAKypB,GAAG,GAAGxxB,EAAE2jF,UAAU,CAAC57E,KAAKg7E,GAAG/iF,EAAE+iF,GAAGh7E,KAAK26E,GAAG1iF,EAAE0iF,GAAG36E,KAAKirC,OAAO,KAAK,CAACv+B,IAAI9D,IAAI5I,KAAKg7E,GAAG,IAAIjkF,KAAK,IAAI,MAAM6qB,EAAEvf,KAAKrC,KAAKqF,EAAE,CAAC,CAAC,CAAt6G,IAA26GwiC,EAAEk1C,OAAOrC,GAAG,MAAMrxC,EAAE,CAAChkC,EAAEmkB,KAAK,IAAI9e,EAAE,GAAG8e,EAAE,OAAOA,GAAG,IAAI,WAAW9e,EAAErF,EAAE,MAAM,IAAI,WAAWqF,EAAEm9B,EAAExiC,EAAEwC,MAAM,GAAG,2BAA2Bs0E,OAAO,MAAM,IAAI,QAAQzxE,EAAEm9B,EAAExiC,EAAE,uBAAuB82E,OAAO,MAAM,IAAI,OAAOzxE,EAAEm9B,EAAExiC,GAAG82E,OAAO,MAAM,QAAQzxE,EAAEm9B,EAAExiC,EAAEmkB,GAAE,GAAItvB,UAAU,OAAOwQ,GAAG++B,EAAE,CAACpkC,EAAEmkB,KAAK,GAAGnkB,GAAGzF,cAAciC,QAAQA,OAAOhC,UAAUtK,eAAe8M,KAAKgD,EAAE,UAAUxD,OAAO8T,KAAKtQ,GAAGC,MAAMD,IAAI,CAAC,OAAO,QAAQ,OAAO,cAAcrL,SAASqL,KAAK,OAAOA,EAAE,MAAMqF,EAAE,CAACyZ,KAAK9e,GAAG,OAAOmkB,EAAEp0B,MAAM,IAAI,SAAS,iBAAiBiQ,IAAIqF,EAAEiF,KAAK2P,OAAO5U,EAAEyZ,MAAMzZ,EAAEgX,MAAMhX,EAAEiF,MAAM,MAAM,IAAI,OAAO6Z,EAAExL,SAAStT,EAAEgX,MAAM2nB,EAAE/pB,OAAO5U,EAAEyZ,MAAMqF,EAAExL,SAAS,MAAM,IAAI,SAAStT,EAAEiF,KAAK2P,OAAO5U,EAAEyZ,MAAMzZ,EAAEyZ,KAAK/c,WAAWsD,EAAEyZ,MAAMzZ,EAAEgX,MAAMhX,EAAEyZ,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM9e,EAAEvK,MAAMI,QAAQwP,EAAEyZ,MAAM,CAACwvD,SAAS,KAAK52E,WAAW2N,EAAEyZ,MAAMsjB,EAAE,OAAOnoB,OAAO5U,EAAEyZ,cAAczZ,EAAEyZ,KAAK9e,EAAEtI,YAAY,GAAG,MAAMysB,EAAEhoB,EAAE6D,GAAGqF,EAAEiF,KAAK6Z,EAAE9e,EAAEgX,MAAM8H,EAAE,KAAK,CAAC,IAAI,UAAU,iBAAiB9e,EAAEyZ,OAAOzZ,EAAEyZ,KAAKzZ,EAAEyZ,KAAKhuB,cAAciQ,QAAQsE,EAAEyZ,MAAM,CAAC,SAAQ,EAAG,UAAK,EAAO,GAAGnqB,SAAS0Q,EAAEyZ,MAAMzZ,EAAEgX,MAAMhX,EAAEyZ,KAAK,EAAE,EAAEzZ,EAAEiF,KAAK2P,OAAO5U,EAAEyZ,MAAM,MAAM,IAAI,QAAQzZ,EAAEiF,KAAK,GAAGjF,EAAEgX,MAAM,EAAE,MAAM,QAAQhX,EAAEiF,KAAKgF,KAAKC,UAAUlK,EAAEyZ,MAAM,OAAOzZ,GAAGm0E,EAAEx5E,IAAI,GAAGA,aAAaxD,QAAQwD,EAAEzF,cAAciC,QAAQwD,EAAE9P,eAAe,UAAU,iBAAiB8P,EAAEsK,MAAM,iBAAiBtK,EAAE8e,MAAM,OAAO9e,EAAE,MAAMmkB,EAAE,CAACrF,KAAK9e,GAAG,GAAG,iBAAiBA,GAAG,GAAGA,EAAEzK,OAAO,CAAC,MAAM8P,EAAE+8B,EAAE,OAAOpiC,UAAU,GAAGqF,EAAE3N,aAAa,IAAI2N,EAAE3N,WAAWnC,QAAQ,UAAU8P,EAAE3N,WAAW,GAAG42E,UAAU,CAACnqD,EAAErF,KAAKzZ,EAAE3N,WAAWysB,EAAEp0B,KAAK,OAAO,MAAMiQ,EAAE7D,EAAEkJ,GAAG8e,EAAE7Z,KAAKtK,CAAC,CAAC,MAAM,CAAC,UAAK,GAAQrL,SAASqL,GAAGmkB,EAAE7Z,KAAK,GAAG6Z,EAAE7Z,KAAKgF,KAAKC,UAAUvP,GAAG,OAAOmkB,GAAGs1D,EAAE,CAACz5E,EAAEmkB,OAAE,EAAO9e,EAAEkX,EAAErpB,KAAK,MAAMkxB,EAAE,CAACtF,KAAK,GAAG46D,SAAS,IAAI,GAAG15E,EAAE05E,SAASt1D,EAAEs1D,SAAS15E,EAAE05E,SAAS/mF,KAAKqN,GAAGw5E,EAAEx5E,UAAU,GAAGmkB,GAAGw1D,MAAMv1D,EAAEs1D,SAASjkF,MAAM2H,KAAK+mB,EAAEw1D,MAAMv6D,iBAAiB,OAAOzsB,KAAI,CAAEqN,EAAEmkB,KAAK,MAAMC,EAAE,CAACpkB,IAAI,MAAMmkB,EAAEmtD,EAAEtxE,EAAE,CAAC6uE,cAAa,IAAK,IAAIxpE,EAAE,OAAOA,GAAG8e,EAAEzsB,YAAY,IAAIysB,EAAEzsB,WAAWnC,QAAQ,UAAU4uB,EAAEzsB,WAAW,GAAG42E,SAAS,CAACxvD,KAAK9e,EAAEivD,UAAUl/D,KAAK,UAAU,CAAC+uB,KAAKqF,EAAEzsB,WAAW3H,KAAK,OAAOua,KAAKnO,EAAEgoB,IAAI9e,EAAEnG,WAAWilB,EAAEjlB,WAAWmG,CAAE,EAArO,CAAuOrF,GAAGqF,EAAE8e,KAAK9e,EAAE8e,GAAG,CAACp0B,KAAKwsB,EAAE5D,OAAOzlB,EAAE6gF,YAAW,EAAGH,UAAS,IAAK,MAAM5nE,EAAE3G,EAAE8e,GAAG,MAAM,UAAUnkB,EAAE5I,QAAQw8E,UAAU7yE,OAAOjQ,eAAe,UAAUkP,EAAE5I,QAAQslD,MAAM37C,OAAOjQ,gBAAgBkb,EAAE4nE,UAAS,GAAI,UAAU5zE,EAAE5I,QAAQ28E,YAAYhzE,OAAOjQ,gBAAgBkb,EAAE+nE,YAAW,GAAI,SAAS/zE,EAAE5I,QAAQ0e,QAAQ/U,OAAOjQ,eAAe,SAASkP,EAAErH,aAAa,WAAWoI,OAAOjQ,gBAAgBkb,EAAE8J,QAAO,GAAI,CAAC,SAAS,SAAS,OAAO,OAAO,UAAU,SAASnhB,SAASqL,EAAE5I,QAAQrH,QAAQic,EAAEjc,KAAKiQ,EAAE5I,QAAQrH,KAAK,SAASic,EAAEjc,MAAMiQ,EAAE5I,QAAQuhB,SAAS3M,EAAE2M,OAAO3Y,EAAE5I,QAAQuhB,SAASyL,CAAE,SAAQ,GAAGpkB,EAAE8e,MAAMvpB,OAAO,CAAC,MAAM4uB,EAAEnkB,EAAE8e,KAAK,GAAGzZ,EAAE5P,MAAMI,QAAQsuB,GAAGA,EAAEA,EAAEywD,MAAMxwD,EAAEs1D,SAASr0E,EAAE1S,KAAKqN,GAAGw5E,EAAE,KAAK,MAAMr1D,GAAGy1D,QAAQrkF,SAAS6uB,EAAEs1D,SAASjkF,MAAM2H,KAAK+mB,EAAEy1D,QAAQ,GAAGC,KAAK,GAAGjF,OAAOjiF,KAAKqN,GAAGw5E,EAAE,OAAO,IAAI,IAAIx5E,EAAE,EAAEA,EAAEokB,EAAEs1D,SAASnkF,OAAOyK,IAAIqF,EAAErF,KAAKqF,EAAErF,GAAG,CAACjQ,KAAKwsB,EAAE5D,OAAOzlB,EAAE0gF,UAAS,EAAGG,YAAW,IAAK,GAAG/zE,EAAE8e,KAAK,CAAC,MAAMqF,EAAEC,EAAEs1D,SAAS/mF,KAAKqN,GAAGA,EAAE8e,KAAK7E,OAAOja,EAAE8e,MAAM9e,EAAEsK,OAAO8Z,EAAEtF,KAAK9e,EAAE8e,KAAKnsB,KAAKqN,IAAI,IAAI7D,EAAEogB,EAAE,OAAO9mB,MAAMI,QAAQmK,IAAI7D,EAAE,CAAC,EAAEogB,EAAEvc,GAAGA,EAAE9P,eAAe,UAAUsM,OAAO8T,KAAKtQ,GAAGqQ,OAAOrQ,GAAG,CAAC,QAAQ,cAAcrL,SAASqL,MAAM7D,EAAE6D,EAAEd,WAAWqd,EAAEvc,EAAE40E,QAAQz4E,EAAE,CAAC,EAAEogB,EAAE,GAAG/f,OAAOukC,QAAQ/gC,GAAGvC,SAAQ,EAAGuC,EAAEqF,MAAM,MAAMlJ,EAAEgoB,EAAEtxB,QAAQmN,GAAG7D,GAAG,IAAIogB,EAAEpgB,GAAGkJ,EAAG,KAAI,CAACnG,WAAW/C,EAAEy4E,MAAMr4D,EAAE5pB,KAAI,CAAEqN,EAAEmkB,IAAIigB,EAAEpkC,EAAEqF,EAAE8e,MAAO,GAAE,MAAMA,GAAGy1D,SAASrkF,SAAS6uB,EAAEtF,KAAKrpB,MAAM2H,KAAK+mB,EAAEy1D,QAAQ,GAAGC,MAAMlnF,KAAKqN,IAAG,CAAEd,WAAW8M,EAAEhM,EAAEd,YAAY01E,MAAMn/E,MAAM2H,KAAK4C,EAAE40E,OAAOjiF,KAAI,CAAEqN,EAAEmkB,KAAK,MAAMhoB,EAAE6D,EAAE5I,QAAQ+xB,QAAQib,EAAEpkC,EAAE5I,QAAQ+xB,QAAQ9jB,EAAE8e,IAAI,EAAEnkB,EAAEmkB,KAAK,IAAI9e,EAAE,OAAO8e,EAAEp0B,MAAM,IAAI,SAASsV,EAAE,CAACyZ,KAAK9e,EAAEivD,WAAW,MAAM,IAAI,OAAO,CAAC,MAAM9yD,EAAE6D,EAAEivD,UAAU5pD,EAAE,CAACyZ,KAAK3iB,EAAEkgB,MAAM2nB,EAAE7nC,EAAEgoB,EAAExL,SAAS,KAAK,CAAC,IAAI,SAAS,CAAC,MAAMwL,EAAEpiB,WAAW/B,EAAEivD,WAAW5pD,EAAE,CAACyZ,KAAKqF,EAAE9H,MAAM8H,EAAE7Z,KAAKtK,EAAEivD,WAAW,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM9qC,GAAG,CAAC,QAAQ,IAAI,OAAO,aAAaxvB,SAASqL,EAAEivD,UAAUn+D,cAAciQ,QAAQsE,EAAE,CAACyZ,KAAKqF,EAAE7Z,KAAK6Z,EAAE,IAAI,IAAI9H,MAAM8H,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ9e,EAAE,CAACyZ,KAAKwyD,EAAEtxE,EAAE,CAAC6uE,cAAa,IAAKn3E,YAAY,GAAG4S,KAAKtK,EAAEivD,UAAU5yC,MAAMrc,EAAEivD,WAAW,OAAO5pD,EAAEnG,WAAW8M,EAAEhM,EAAEd,YAAYmG,CAAE,EAAnf,CAAqfrF,EAAEqF,EAAE8e,IAAI,OAAOnkB,EAAE5I,QAAQilB,QAAQlgB,EAAEkgB,MAAMoK,MAAM1kB,WAAW/B,EAAE5I,QAAQilB,QAAQrc,EAAE5I,QAAQilB,MAAMta,WAAW/B,EAAE5I,QAAQilB,QAAQlgB,CAAE,SAAQ,GAAGioB,EAAEtF,KAAKvpB,QAAQ6uB,EAAEtF,KAAK,GAAG81D,MAAMr/E,SAAS6uB,EAAEs1D,SAASnkF,OAAO,MAAM,IAAIgwB,MAAM,iCAAiC,OAAOnB,GAAG,MAAM01D,EAAGpkB,OAAOqkB,GAAG,WAAAx/E,CAAYyF,GAAGrF,KAAKo/E,GAAG/5E,EAAErF,KAAK+6D,QAAO,CAAE,CAAC,SAAAskB,CAAUh6E,GAAE,GAAI,GAAGA,IAAIrF,KAAK+6D,OAAO,OAAO,MAAMvxC,EAAExpB,KAAK+6D,OAAO,GAAG/6D,KAAK+6D,OAAO11D,EAAErF,KAAKo/E,GAAGE,gBAAe,IAAKj6E,GAAGrF,KAAKo/E,GAAG/zE,QAAQrF,QAAQ,CAAC,MAAMX,EAAEpB,EAAEjE,KAAKo/E,GAAG/zE,QAAQ0tE,QAAQhe,QAAQvxC,EAAExpB,KAAKo/E,GAAGG,IAAIt+C,cAAc,KAAK57B,KAAKmkB,GAAGA,EAAE8M,eAAe,CAACE,MAAM,WAAW,CAACx2B,KAAKo/E,GAAGxmB,KAAK,uBAAuB54D,KAAK+6D,OAAOvxC,EAAE,CAAC,GAAAjtB,CAAI8I,GAAG,IAAIvK,MAAMI,QAAQmK,IAAIA,EAAEzK,OAAO,EAAE,OAAO,MAAM4uB,EAAE,CAACywD,MAAM50E,EAAErN,KAAI,CAAEqN,EAAEmkB,KAAK,MAAM9e,EAAE1K,KAAKo/E,GAAGI,QAAQjlE,SAASiP,GAAG,OAAOigB,EAAEpkC,EAAEqF,EAAG,KAAI1K,KAAKo/E,GAAGj7D,KAAKA,KAAK5e,KAAKikB,GAAGxpB,KAAKo/E,GAAGK,SAAQ,EAAGz/E,KAAKo/E,GAAGhgF,QAAO,EAAG,CAAC,MAAA26B,CAAO10B,GAAG,IAAIvK,MAAMI,QAAQmK,GAAG,OAAOrF,KAAK+5B,OAAO,CAAC10B,IAAIrF,KAAKo/E,GAAGj7D,KAAKA,KAAKnkB,KAAKo/E,GAAGj7D,KAAKA,KAAKlhB,QAAO,CAAEumB,EAAE9e,KAAKrF,EAAErL,SAAS0Q,KAAK1K,KAAKo/E,GAAGj7D,KAAKA,KAAKvpB,SAASoF,KAAKo/E,GAAGK,SAAQ,GAAIz/E,KAAKo/E,GAAGhgF,QAAO,EAAG,CAAC,YAAAsgF,CAAar6E,EAAEmkB,GAAG,OAAOxpB,KAAKo/E,GAAGj7D,KAAKA,KAAKw7D,WAAWj1E,IAAI,MAAMlJ,EAAEkJ,EAAEuvE,MAAM50E,GAAG,OAAOuc,EAAEpgB,GAAGrL,cAAc6D,SAASslB,OAAOkK,GAAGrzB,cAAe,GAAE,CAAC,OAAAypF,CAAQv6E,EAAEmkB,GAAG,MAAM9e,EAAE1K,KAAK0/E,aAAar6E,EAAEmkB,GAAG,GAAG9e,EAAE,EAAE,MAAM,CAAC/G,OAAO,EAAEi+B,IAAI,KAAKwkB,KAAK,IAAI,MAAM5kD,EAAExB,KAAKo/E,GAAGj7D,KAAKA,KAAKzZ,GAAGkX,EAAEpgB,EAAEy4E,MAAMjiF,KAAKqN,GAAGA,EAAE8e,OAAO,MAAM,CAACxgB,MAAM+G,EAAEk3B,IAAIpgC,EAAE4kD,KAAKxkC,EAAE,CAAC,SAAAi+D,CAAUx6E,EAAEmkB,GAAG,MAAM9e,EAAE,CAACuvE,MAAMzwD,EAAExxB,KAAI,CAAEqN,EAAEmkB,KAAK,MAAM9e,EAAE1K,KAAKo/E,GAAGI,QAAQjlE,SAASiP,GAAG,OAAOigB,EAAEpkC,EAAEqF,EAAG,KAAI1K,KAAKo/E,GAAGj7D,KAAKA,KAAKG,OAAOjf,EAAE,EAAEqF,GAAG1K,KAAKo/E,GAAGhgF,QAAO,EAAG,EAAE,MAAM0gF,EAAGV,GAAG7kE,SAASwlE,OAAO,WAAAngF,CAAYyF,GAAGrF,KAAKo/E,GAAG/5E,EAAErF,KAAKirC,MAAM,CAAC,IAAAA,IAAQjrC,KAAKua,SAASva,KAAK+/E,QAAQ,EAAE16E,EAAE,GAAGmkB,EAAE9e,KAAK,IAAIlJ,EAAE,GAAGogB,GAAE,EAAG,MAAMrpB,EAAE,GAAG,OAAO8M,EAAEvC,SAASuC,KAAKvK,MAAMI,QAAQmK,EAAE26E,QAAQ36E,EAAE26E,OAAO,CAAC36E,EAAE26E,SAASl9E,SAAS2mB,IAAIjoB,EAAEioB,GAAGpkB,EAAEjQ,OAAOoM,EAAEioB,GAAGr0B,KAAKiQ,EAAEjQ,MAAMoM,EAAEioB,GAAG,CAACr0B,KAAKiQ,EAAEjQ,MAAMo0B,EAAEyvD,UAAS,EAAGG,YAAW,GAAI,MAAM/nE,EAAE7P,EAAEioB,GAAGpkB,EAAEqsC,SAASrgC,EAAEqgC,OAAOrsC,EAAEqsC,QAAQrsC,EAAE2Y,OAAO3M,EAAE2M,OAAO3Y,EAAE2Y,OAAO,SAAS3Y,EAAEjQ,OAAOic,EAAE2M,OAAOtT,GAAGrF,EAAE60E,YAAY7oE,EAAE6oE,UAAU70E,EAAE60E,WAAW70E,EAAEg0E,cAAchoE,EAAEgoE,YAAYh0E,EAAEg0E,aAAah0E,EAAE6lC,SAAS75B,EAAE65B,OAAO7lC,EAAE6lC,SAAQ,IAAK7lC,EAAE4zE,SAAS5nE,EAAE4nE,UAAS,GAAI5zE,EAAE46E,UAAU5uE,EAAE4uE,QAAQ56E,EAAE46E,SAAS56E,EAAE66E,YAAY7uE,EAAE6uE,UAAU76E,EAAE66E,aAAY,IAAK76E,EAAE+zE,WAAW/nE,EAAE+nE,YAAW,EAAG/zE,EAAE86E,cAAc9uE,EAAE8uE,YAAY96E,EAAE86E,cAAc9uE,EAAE+nE,YAAY/nE,EAAE4nE,gBAAW,IAAS5zE,EAAE+6E,oBAAoB/uE,EAAE+uE,kBAAkB/6E,EAAE+6E,mBAAmB/6E,EAAEg7E,eAAehvE,EAAEgvE,aAAah7E,EAAEg7E,cAAch7E,EAAE8V,SAAS9J,EAAE8J,QAAO,GAAI9V,EAAEpC,SAASoO,EAAEpO,OAAOoC,EAAEpC,QAAQoC,EAAEi7E,eAAejvE,EAAEivE,aAAaj7E,EAAEi7E,cAAcj7E,EAAE08C,OAAO18C,EAAEpC,OAAO1K,EAAEkxB,GAAGpkB,EAAE08C,KAAKngC,EAAE,CAAC03D,OAAO7vD,EAAEosB,IAAIxwC,EAAE08C,YAAO,IAAS18C,EAAEk7E,sBAAsBlvE,EAAEkvE,oBAAoBl7E,EAAEk7E,oBAAqB,GAAG,IAAG/+E,EAAEA,EAAExJ,KAAKqN,GAAGA,GAAG,CAACjQ,KAAKo0B,EAAExL,OAAO,SAASwL,EAAE9e,OAAE,EAAOuuE,UAAS,EAAGG,YAAW,KAAM,CAAC53E,EAAE,CAAC+uC,QAAQh4C,EAAEwpD,KAAKngC,EAAE83D,OAAO,IAAK,EAA1kC,CAA4kC15E,KAAKo/E,GAAG/zE,QAAQm0E,QAAQx/E,KAAKo/E,GAAG/zE,QAAQjW,KAAK4K,KAAKo/E,GAAG/zE,QAAQ2S,OAAO,CAAC,GAAAnG,CAAIxS,GAAG,OAAOA,EAAE,GAAGA,GAAGrF,KAAK8hC,OAAO,KAAK,IAAI9hC,KAAKua,SAASlV,GAAG,CAAC,IAAAy8B,GAAO,OAAO9hC,KAAKua,SAAS3f,MAAM,CAAC,IAAAuoB,CAAK9d,GAAG,GAAG,IAAIA,EAAEzK,OAAO,CAAC,MAAM4uB,EAAExpB,KAAKo/E,GAAGj7D,KAAK46D,SAAS/mF,KAAI,CAAEqN,EAAEmkB,IAAIA,IAAI9e,EAAErF,EAAE,GAAG7D,EAAE6D,EAAE,GAAGuc,EAAE4H,EAAEhoB,GAAG,OAAOgoB,EAAEhoB,GAAGgoB,EAAE9e,GAAG8e,EAAE9e,GAAGkX,EAAE5hB,KAAK0hB,MAAM8H,EAAE,CAAC,CAAC,KAAA9H,CAAMrc,GAAGrF,KAAKo/E,GAAGj7D,KAAK46D,SAAS15E,EAAErN,KAAKqN,GAAGrF,KAAKo/E,GAAGj7D,KAAK46D,SAAS15E,KAAKrF,KAAKo/E,GAAGj7D,KAAKA,KAAKrhB,SAAS0mB,GAAGA,EAAEywD,MAAM50E,EAAErN,KAAKqN,GAAGmkB,EAAEywD,MAAM50E,OAAOrF,KAAKua,SAASlV,EAAErN,KAAKqN,GAAGrF,KAAKua,SAASlV,KAAKrF,KAAKo/E,GAAGhgF,QAAQ,CAAC,IAAAk2D,CAAKjwD,GAAGvK,MAAMI,QAAQmK,KAAKA,EAAE,CAACA,IAAIA,EAAEzK,SAASyK,EAAEvC,SAASuC,IAAIrF,KAAKua,SAASlV,KAAKrF,KAAKua,SAASlV,GAAG,CAACjQ,KAAK,WAAW4K,KAAKua,SAASlV,GAAG8V,QAAO,CAAG,IAAGnb,KAAKo/E,GAAGhgF,SAAS,CAAC,IAAAm/B,CAAKl5B,GAAGvK,MAAMI,QAAQmK,KAAKA,EAAE,CAACA,IAAIA,EAAEzK,SAASyK,EAAEvC,SAASuC,IAAIrF,KAAKua,SAASlV,KAAKrF,KAAKua,SAASlV,GAAG,CAACjQ,KAAK,SAAS6jF,UAAS,WAAYj5E,KAAKua,SAASlV,GAAG8V,MAAO,IAAGnb,KAAKo/E,GAAGhgF,SAAS,CAAC,OAAAqR,CAAQpL,GAAG,YAAO,IAASA,IAAIA,EAAE,IAAIvK,MAAMkF,KAAKo/E,GAAGj7D,KAAK46D,SAASnkF,QAAQ+a,SAAS7a,MAAMI,QAAQmK,GAAGA,EAAErN,KAAKqN,IAAIrF,KAAKua,SAASlV,IAAI8V,UAAUnb,KAAKua,SAASlV,IAAI8V,MAAM,CAAC,GAAA5e,CAAI8I,GAAG,MAAMmkB,EAAExpB,KAAKo/E,GAAGj7D,KAAK46D,SAASnkF,OAAO,GAAGoF,KAAKo/E,GAAGj7D,KAAK46D,SAAS/+E,KAAKo/E,GAAGj7D,KAAK46D,SAASp8E,OAAO,CAACk8E,EAAEx5E,EAAEm7E,WAAWxgF,KAAKo/E,GAAGj7D,KAAKA,KAAKrhB,SAAQ,CAAE0mB,EAAE9e,KAAK8e,EAAEywD,MAAMzwD,EAAEywD,MAAMt3E,OAAO,CAAC8mC,EAAEpkC,EAAE8e,KAAKzZ,GAAGrF,IAAK,IAAGrF,KAAKua,SAASiP,GAAG,CAACp0B,KAAKiQ,EAAEjQ,MAAM,SAAS6jF,UAAS,EAAGG,YAAW,GAAI/zE,EAAEjQ,MAAMiQ,EAAE2Y,QAAQ3Y,EAAE4zE,UAAU5zE,EAAEqsC,QAAQrsC,EAAEpC,OAAO,CAAC,MAAMyH,EAAE1K,KAAKua,SAASiP,GAAGnkB,EAAEqsC,SAAShnC,EAAEgnC,OAAOrsC,EAAEqsC,QAAQrsC,EAAE2Y,SAAStT,EAAEsT,OAAO3Y,EAAE2Y,QAAQ3Y,EAAE60E,YAAYxvE,EAAEwvE,UAAU70E,EAAE60E,WAAW70E,EAAEg0E,cAAc3uE,EAAE2uE,YAAYh0E,EAAEg0E,aAAah0E,EAAE6lC,SAASxgC,EAAEwgC,OAAO7lC,EAAE6lC,SAAQ,IAAK7lC,EAAE4zE,SAASvuE,EAAEuuE,UAAS,GAAI5zE,EAAE46E,UAAUv1E,EAAEu1E,QAAQ56E,EAAE46E,SAAS56E,EAAE66E,YAAYx1E,EAAEw1E,UAAU76E,EAAE66E,aAAY,IAAK76E,EAAE+zE,WAAW1uE,EAAE0uE,YAAW,EAAG/zE,EAAE86E,cAAcz1E,EAAEy1E,YAAY96E,EAAE86E,cAAcz1E,EAAE0uE,YAAY1uE,EAAEuuE,WAAW5zE,EAAE+6E,oBAAoB11E,EAAE01E,kBAAkB/6E,EAAE+6E,mBAAmB/6E,EAAE8V,SAASzQ,EAAEyQ,QAAO,GAAI9V,EAAEpC,SAASyH,EAAEzH,OAAOoC,EAAEpC,QAAQoC,EAAEi7E,eAAe51E,EAAE41E,aAAaj7E,EAAEi7E,aAAa,CAACtgF,KAAKo/E,GAAGhgF,QAAO,EAAG,CAAC,MAAA26B,CAAO10B,GAAGvK,MAAMI,QAAQmK,KAAKA,EAAE,CAACA,IAAIrF,KAAKo/E,GAAGj7D,KAAK46D,SAAS/+E,KAAKo/E,GAAGj7D,KAAK46D,SAAS97E,QAAO,CAAEumB,EAAE9e,KAAKrF,EAAErL,SAAS0Q,KAAK1K,KAAKo/E,GAAGj7D,KAAKA,KAAKrhB,SAAS0mB,GAAGA,EAAEywD,MAAMzwD,EAAEywD,MAAMh3E,QAAO,CAAEumB,EAAE9e,KAAKrF,EAAErL,SAAS0Q,OAAO1K,KAAKo/E,GAAGhgF,QAAO,EAAG,CAAC,MAAA6D,CAAOoC,EAAEmkB,GAAE,GAAI,IAAIxpB,KAAKua,SAASlV,IAAIpC,QAAQrI,OAAO,OAAO,MAAM8P,EAAE1K,KAAK+/E,OAAOxvC,QAAQlrC,GAAG,IAAI7D,EAAE,GAAGkJ,EAAE,CAAC,IAAI8e,GAAE,EAAGhoB,EAAExB,KAAKua,SAASlV,GAAGpC,OAAOqC,MAAMD,KAAKmkB,IAAInkB,IAAIqF,IAAI8e,GAAE,IAAI,IAAK,KAAK,CAAC,MAAMA,EAAExpB,KAAKua,SAASlV,GAAGpC,OAAOzB,EAAEgoB,EAAEA,EAAE,QAAG,CAAM,CAAChoB,EAAExB,KAAK+/E,OAAOxvC,QAAQlrC,GAAG7D,EAAEkJ,IAAI1K,KAAK+/E,OAAOxvC,QAAQlrC,QAAG,GAAQrF,KAAKo/E,GAAGqB,aAAa,EAAEzgF,KAAKo/E,GAAGhgF,SAASoqB,GAAGxpB,KAAKo/E,GAAGxmB,KAAK,mBAAmBvzD,EAAE7D,EAAE,CAAC,IAAAugD,CAAK18C,EAAEmkB,OAAE,EAAO9e,GAAE,GAAI,MAAMlJ,EAAExB,KAAKua,SAASlV,GAAG,GAAGqF,GAAG1K,KAAKo/E,GAAGxmB,KAAK,oBAAoBvzD,EAAEmkB,IAAIA,EAAE,CAAC,MAAM9e,KAAK1K,KAAK+/E,OAAOh+B,MAAM/hD,KAAK+/E,OAAOh+B,KAAKu3B,SAASj0E,IAAIrF,KAAK+/E,OAAOh+B,MAAMlM,IAAIj0B,EAAEpgB,GAAG8+E,cAAc,CAAC,MAAM,QAAQ,GAAG51E,EAAE,CAAC,MAAMrF,EAAEuc,EAAE1pB,QAAQwS,GAAG8e,GAAG,IAAInkB,EAAEuc,EAAE,IAAI,MAAMvc,IAAIuc,EAAEhnB,OAAO,EAAEgnB,EAAE,GAAGA,EAAEvc,EAAE,EAAE,MAAMmkB,EAAE5H,EAAEhnB,OAAOgnB,EAAE,GAAG,KAAK,CAAC,MAAMrpB,IAAI,CAAC,SAAS,QAAQyB,SAASwH,EAAEpM,OAAO,IAAIq1C,KAAKi2C,SAASl/E,EAAE0pC,QAAQlrC,KAAKo/E,GAAG/zE,QAAQ6/B,OAAO,CAACy1C,MAAM,OAAOV,QAAQz+E,EAAEy+E,SAASjgF,KAAKo/E,GAAG/zE,QAAQ40E,QAAQC,UAAU1+E,EAAE0+E,WAAWlgF,KAAKo/E,GAAG/zE,QAAQ60E,UAAUE,kBAAkB5+E,EAAE4+E,mBAAmBpgF,KAAKo/E,GAAG/zE,QAAQ+0E,oBAAoBpgF,KAAKo/E,GAAGj7D,KAAKA,KAAK49B,MAAK,CAAEr3C,EAAElJ,KAAK,MAAMioB,EAAE/e,EAAEuvE,MAAM50E,GAAGgM,EAAE7P,EAAEy4E,MAAM50E,GAAG,IAAIpB,EAAEwlB,EAAE/H,OAAOE,EAAE6H,GAAGhQ,EAAEpI,EAAEqQ,OAAOE,EAAEvQ,GAAG,GAAG,SAASmY,EAAE,CAAC,MAAMnkB,EAAEpB,EAAEA,EAAEwV,EAAEA,EAAEpU,CAAC,CAAC,OAAO9M,GAAG,iBAAiB0L,GAAG,iBAAiBwV,EAAElhB,EAAE8pD,QAAQ/iC,OAAOrb,GAAGqb,OAAO7F,IAAIxV,EAAEwV,GAAG,EAAExV,EAAEwV,EAAE,EAAE,CAAE,IAAGzZ,KAAK+/E,OAAOh+B,KAAK,CAACu3B,OAAOj0E,EAAEwwC,IAAIrsB,GAAGxpB,KAAKo/E,GAAGwB,eAAehmF,QAAQoF,KAAKo/E,GAAGyB,YAAY7gF,KAAKo/E,GAAGwB,gBAAgB5gF,KAAKo/E,GAAGxmB,KAAK,iBAAiBvzD,EAAEmkB,IAAI9e,IAAI1K,KAAKo/E,GAAGqB,aAAa,EAAEzgF,KAAKo/E,GAAGhgF,SAASY,KAAKo/E,GAAGxmB,KAAK,iBAAiBvzD,EAAEmkB,GAAG,CAAC,cAAAs3D,GAAiB,MAAMz7E,EAAErF,KAAKo/E,GAAGj7D,KAAK46D,SAAS97E,QAAO,CAAEoC,EAAEmkB,KAAKxpB,KAAKua,SAASiP,IAAIrO,SAAS,IAAInb,KAAKo/E,GAAG/zE,QAAQrF,QAAQpL,QAAQoF,KAAKo/E,GAAG/zE,QAAQ01E,eAAe17E,GAAGzK,OAAO,CAACoF,KAAK+/E,OAAOrG,OAAO,GAAG,MAAMr0E,EAAE,CAAC27E,UAAS,GAAI,GAAGhhF,KAAKo/E,GAAG/zE,QAAQuuE,QAAQ55E,KAAKo/E,GAAG/zE,QAAQwuE,OAAO,CAAC75E,KAAKo/E,GAAG/zE,QAAQrF,QAAQpL,SAASyK,EAAE8zE,cAAa,GAAIn5E,KAAKo/E,GAAG6B,WAAWjhF,KAAKo/E,GAAG6B,UAAU1qB,cAAct6D,YAAY+D,KAAKo/E,GAAG6B,WAAW57E,EAAE6zE,gBAAe,EAAGl5E,KAAKo/E,GAAGE,aAAaj6E,GAAG,MAAMmkB,EAAE1uB,MAAM2H,KAAKzC,KAAKo/E,GAAGG,IAAIt+C,cAAc,iBAAiBigD,mBAAmBz8D,iBAAiB,OAAO,IAAI,IAAI/Z,EAAE,EAAE,MAAMlJ,EAAExB,KAAKo/E,GAAGj7D,KAAK46D,SAAS/mF,KAAI,CAAEqN,EAAE7D,KAAK,GAAGxB,KAAKua,SAAS/Y,IAAI2Z,OAAO,OAAO,EAAE,MAAMyG,EAAE4H,EAAE9e,GAAGy2E,YAAY,OAAOz2E,GAAG,EAAEkX,CAAE,IAAGA,EAAEpgB,EAAEuM,QAAO,CAAE1I,EAAEmkB,IAAInkB,EAAEmkB,GAAG,GAAGxpB,KAAK+/E,OAAOrG,OAAOl4E,EAAExJ,KAAKqN,GAAGA,EAAEuc,EAAE,KAAK,KAAK,CAACvc,EAAE20E,cAAa,EAAGh6E,KAAKo/E,GAAGE,aAAaj6E,GAAG,MAAMmkB,EAAE1uB,MAAM2H,KAAKzC,KAAKo/E,GAAGG,IAAIt+C,cAAc,iBAAiBigD,mBAAmBz8D,iBAAiB,OAAO,IAAI,IAAI/Z,EAAE,EAAE,MAAMlJ,EAAExB,KAAKo/E,GAAGj7D,KAAK46D,SAAS/mF,KAAI,CAAEqN,EAAE7D,KAAK,GAAGxB,KAAKua,SAAS/Y,IAAI2Z,OAAO,OAAO,EAAE,MAAMyG,EAAE4H,EAAE9e,GAAGy2E,YAAY,OAAOz2E,GAAG,EAAEkX,CAAE,IAAGA,EAAEpgB,EAAEuM,QAAO,CAAE1I,EAAEmkB,IAAInkB,EAAEmkB,GAAG,GAAGxpB,KAAK+/E,OAAOrG,OAAOl4E,EAAExJ,KAAKqN,GAAGA,EAAEuc,EAAE,KAAK,CAAC5hB,KAAKo/E,GAAGE,cAAc,CAAC,EAAE,MAAM8B,GAAG,CAACnI,UAAS,EAAG/tC,OAAO,KAAK+0C,SAAQ,EAAGC,UAAU,QAAQ9G,YAAW,EAAG+G,YAAY,OAAOC,mBAAkB,EAAGiB,aAAY,EAAGd,oBAAoB,GAAGe,qBAAqB,IAAIC,WAAU,EAAGlB,cAAa,EAAGl8D,KAAK,CAAC,EAAE/uB,KAAK,OAAO4oB,OAAO,aAAawhE,QAAQ,GAAGgC,QAAO,EAAGC,QAAQ,GAAGC,cAAc,CAAC,EAAE,GAAG,GAAG,GAAG,IAAIC,UAAS,EAAGC,WAAU,EAAGC,SAAS,IAAIC,SAAS,IAAIC,UAAU,IAAIC,SAAS,IAAIC,aAAa,IAAIC,eAAc,EAAGC,WAAW,EAAEn8E,QAAQ,GAAG+6E,cAAa,EAAGqB,aAAY,EAAGvI,QAAO,EAAGD,QAAO,EAAGZ,cAAa,EAAGqJ,aAAQ,EAAOC,eAAc,EAAGvI,UAAS,EAAGwI,aAAY,EAAGzI,WAAU,EAAG0I,aAAY,EAAGC,eAAe,CAACvO,cAAa,GAAIwO,OAAO,CAACC,YAAY,YAAYC,YAAY,sBAAsBnB,QAAQ,mBAAmBoB,UAAU,cAAcC,OAAO,mBAAmBC,UAAU,qCAAqC7qC,KAAK,8CAA8C92B,SAAS,CAAC/b,EAAEmkB,IAAI,eAAenkB,EAAE0zE,QAAQhzE,cAAcV,EAAEm8E,QAAQn8E,EAAEq8E,cAAc,eAAer8E,EAAE0zE,QAAQiK,mEAAmE39E,EAAE0zE,QAAQkK,uCAAuC59E,EAAEq9E,OAAOjB,gDAAgD,WAAWp8E,EAAE+zE,WAAW,eAAe/zE,EAAE0zE,QAAQ5jD,uCAAuC9vB,EAAE0zE,QAAQn5D,uBAAuBva,EAAEq9E,OAAOC,mDAAmDt9E,EAAEq9E,OAAOE,eAAep5D,EAAE9gB,GAAG,mBAAmB8gB,EAAE9gB,MAAM,sBAAsB,2BAA2BrD,EAAE0zE,QAAQ1lD,aAAahuB,EAAEW,QAAQpL,OAAO,mBAAmByK,EAAEW,8BAA8B,0BAA0BX,EAAE0zE,QAAQjzE,iBAAiBT,EAAEm8E,OAAO,eAAen8E,EAAE0zE,QAAQ7gC,eAAe,uBAAuB7yC,EAAE0zE,QAAQmK,6BAA6BnK,QAAQ,CAACoK,OAAO,mBAAmB5J,UAAU,sBAAsBzzE,OAAO,mBAAmButB,UAAU,sBAAsB0nC,OAAO,mBAAmBye,WAAW,uBAAuB4J,SAAS,qBAAqBJ,SAAS,qBAAqBK,SAAS,qBAAqBpgF,OAAO,mBAAmBw2E,aAAa,0BAA0B6J,MAAM,kBAAkBC,gBAAgB,4BAA4BpoE,OAAO,mBAAmB+8B,KAAK,iBAAiBt4B,MAAM,kBAAkB4jE,QAAQ,oBAAoBN,WAAW,uBAAuBO,eAAe,4BAA4BC,mBAAmB,iCAAiCC,uBAAuB,sCAAsCxuD,OAAO,mBAAmB8tD,SAAS,qBAAqBtJ,OAAO,mBAAmBQ,MAAM,kBAAkBp0E,IAAI,gBAAgB6oD,QAAQ,sBAAsBg1B,GAAG,CAACv+E,EAAEmkB,EAAE9e,EAAElJ,EAAE,CAAC,KAAI,CAAEmyE,SAAS,KAAKpvE,WAAW,CAACqxE,MAAMp0E,EAAE2hF,SAAS3hF,EAAE2Z,OAAO,GAAGzQ,EAAEquE,QAAQ2K,sBAAsBh5E,EAAEquE,QAAQoK,SAAS3hF,EAAE2Z,OAAO,GAAGzQ,EAAEquE,QAAQ2K,sBAAsBh5E,EAAEquE,QAAQ59D,UAAUzQ,EAAEquE,QAAQqK,WAAW14E,EAAEquE,QAAQ2K,oBAAoB3mF,WAAW,CAAC,CAAC42E,SAAS,SAASpvE,WAAW,CAAC,YAAY+a,OAAOja,GAAGuwE,MAAMlrE,EAAEquE,QAAQ4K,uBAAuB,aAAaj5E,EAAEg4E,OAAOG,UAAUv6E,QAAQ,SAASgX,OAAOja,KAAKtI,WAAW,CAAC,CAAC42E,SAAS,QAAQxvD,KAAKqF,QAAsmC,MAAMq6D,GAAGrE,QAAQsE,aAAarD,aAAat8D,KAAK4/D,IAAIxE,IAAIpnB,QAAQ6rB,YAAYvE,QAAQwB,UAAUgD,aAAaC,YAAYC,OAAOC,SAASC,WAAWC,YAAYC,WAAWl5E,QAAQm5E,WAAWC,iBAAiBC,MAAMC,MAAMzF,KAAK0F,YAAYhE,eAAeiE,iBAAiBC,cAAcC,eAAeC,WAAWC,YAAYC,kBAAkBC,WAAW,WAAAvlF,CAAYyF,EAAEmkB,EAAE,CAAC,GAAG,MAAM9e,EAAE,iBAAiBrF,EAAElJ,SAAS8kC,cAAc57B,GAAGA,EAAEqF,aAAa06E,iBAAiBplF,KAAKu/E,IAAI70E,GAAG1K,KAAKu/E,IAAIpjF,SAASC,cAAc,SAASsO,EAAE1N,YAAYgD,KAAKu/E,MAAM,MAAM/9E,EAAE,IAAI4/E,GAAGqB,kBAAkBj5D,EAAEi5D,gBAAgB7gE,EAAE,IAAIw/D,GAAGsB,UAAUl5D,EAAEk5D,QAAQnqF,EAAE,IAAI6oF,GAAGrI,WAAWvvD,EAAEuvD,SAAS/4E,KAAKqL,QAAQ,IAAI+1E,MAAM53D,EAAEi5D,eAAejhF,EAAEkhF,OAAO9gE,EAAEm3D,QAAQxgF,GAAGyH,KAAKikF,aAAajkF,KAAKqL,QAAQg2E,YAAY32E,EAAE26E,UAAU,GAAGrlF,KAAKqL,QAAQ0uE,SAAS/5E,KAAKu/E,IAAIxF,SAAS/5E,KAAKqL,QAAQ0uE,SAAS/5E,KAAKqL,QAAQi3E,gBAAgB,IAAItiF,KAAKu/E,IAAIxF,WAAW/5E,KAAKu/E,IAAIxF,SAAS,GAAG/5E,KAAKqkF,WAAW,CAACiB,SAAS,IAAItlF,KAAKulF,aAAavlF,KAAK+jF,IAAI,IAAI76C,EAAElpC,KAAKqL,QAAQo3E,gBAAgB,CAAC,GAAGziF,KAAKkkF,aAAY,EAAGlkF,KAAKm4D,QAAQ,CAAC,EAAEn4D,KAAKygF,aAAa,EAAEzgF,KAAKskF,aAAY,EAAGtkF,KAAKgkF,aAAY,EAAGhkF,KAAKy/E,SAAQ,EAAGz/E,KAAK4gF,eAAe,GAAG5gF,KAAKirC,MAAM,CAAC,IAAAA,GAAO,GAAGjrC,KAAKkkF,aAAazqE,EAAEzZ,KAAKu/E,IAAIv/E,KAAKqL,QAAQ0tE,QAAQoB,OAAO,OAAM,EAAGn6E,KAAKilF,YAAYtO,EAAE32E,KAAKu/E,IAAIv/E,KAAKqL,QAAQo3E,gBAAgB,CAAC,GAAGziF,KAAK6kF,iBAAiB,IAAI7kF,KAAKilF,YAAY1gF,YAAYvE,KAAK8kF,cAAc9kF,KAAKilF,YAAYloF,YAAYkG,QAAQoC,GAAG,UAAUA,EAAEsuE,YAAY,GAAG3zE,KAAK+kF,eAAe/kF,KAAKilF,YAAYloF,YAAYkG,QAAQoC,GAAG,YAAYA,EAAEsuE,YAAY,QAAG,IAAS3zE,KAAKqL,QAAQg3E,SAASriF,KAAK+kF,eAAex/E,KAAK,CAACouE,SAAS,UAAU52E,WAAW,CAAC,CAAC42E,SAAS,QAAQxvD,KAAKnkB,KAAKqL,QAAQg3E,YAAYriF,KAAKk/E,KAAK,IAAIC,EAAGn/E,MAAMA,KAAKw/E,QAAQ,IAAIM,EAAG9/E,MAAMA,KAAKmkB,KAAK26D,EAAE9+E,KAAKqL,QAAQ8Y,KAAKnkB,KAAKu/E,IAAIv/E,KAAKw/E,QAAQjlE,SAASva,KAAKqL,QAAQjW,KAAK4K,KAAKqL,QAAQ2S,QAAQhe,KAAK4pD,UAAUxvC,YAAW,KAAMpa,KAAK44D,KAAK,kBAAkB54D,KAAKkkF,aAAY,CAAG,GAAE,GAAG,CAAC,OAAAt6B,GAAU5pD,KAAKmlF,WAAWz6E,EAAE,MAAM,CAACkrE,MAAM,GAAG51E,KAAKqL,QAAQ0tE,QAAQnqB,WAAW5uD,KAAKqL,QAAQ0tE,QAAQyK,YAAYxjF,KAAKmlF,WAAWp2D,UAAU/uB,KAAKqL,QAAQ+V,SAASphB,KAAKqL,QAAQrL,KAAKu/E,KAAK,MAAMl6E,EAAEpB,EAAEjE,KAAKqL,QAAQ0tE,QAAQkK,UAAUz5D,EAAExpB,KAAKmlF,WAAWlkD,cAAc,SAAS57B,KAAKmkB,GAAGxpB,KAAKqL,QAAQm2E,QAAQxhF,KAAKqL,QAAQq2E,cAAc1hF,KAAKqL,QAAQq2E,cAAc5+E,SAASuC,IAAI,MAAMqF,EAAElJ,GAAG1G,MAAMI,QAAQmK,GAAG,CAACA,EAAE,GAAGA,EAAE,IAAI,CAACia,OAAOja,GAAGA,GAAGuc,EAAEpgB,IAAIxB,KAAKqL,QAAQo2E,QAAQlpF,EAAE,IAAIitF,OAAO96E,EAAE4U,OAAO9d,GAAGogB,EAAEA,GAAG4H,EAAExsB,YAAYzE,EAAG,IAAGixB,GAAGA,EAAE+sC,cAAct6D,YAAYutB,GAAG,MAAMhoB,EAAEyC,EAAEjE,KAAKqL,QAAQ0tE,QAAQ1lD,WAAWrzB,KAAK8jF,aAAa9jF,KAAKmlF,WAAWlkD,cAAcz/B,GAAGxB,KAAKwkF,WAAW,GAAG,MAAM5iE,EAAE3d,EAAEjE,KAAKqL,QAAQ0tE,QAAQmK,YAAYpoF,MAAM2H,KAAKzC,KAAKmlF,WAAW1gE,iBAAiB7C,IAAI9e,SAASuC,IAAIA,aAAaJ,cAAcI,EAAE0pB,UAAU,cAAc/uB,KAAKqL,QAAQ0tE,QAAQ0K,wBAAwBzjF,KAAKwkF,WAAWj/E,KAAKF,EAAE67E,mBAAoB,IAAGlhF,KAAKykF,iBAAiB,CAAC9Q,SAAS,KAAKpvE,WAAW,CAACqxE,MAAM51E,KAAKqL,QAAQ0tE,QAAQ0K,iBAAiB,MAAMlrF,EAAE0L,EAAEjE,KAAKqL,QAAQ0tE,QAAQ7gC,MAAMl4C,KAAKmkF,OAAOnkF,KAAKmlF,WAAWlkD,cAAc1oC,GAAGyH,KAAKu/E,IAAIhpB,cAAcZ,aAAa31D,KAAKmlF,WAAWnlF,KAAKu/E,KAAKv/E,KAAK8jF,aAAa9mF,YAAYgD,KAAKu/E,KAAKv/E,KAAK2kF,MAAM3kF,KAAKu/E,IAAI15E,wBAAwB7F,KAAKylF,aAAazlF,KAAKqL,QAAQuuE,QAAQ55E,KAAKmlF,WAAW7oF,UAAUC,IAAI,aAAayD,KAAKqL,QAAQwuE,QAAQ75E,KAAKmlF,WAAW7oF,UAAUC,IAAI,aAAayD,KAAKqL,QAAQ4tE,UAAUj5E,KAAKmlF,WAAW7oF,UAAUC,IAAI,YAAYyD,KAAKqL,QAAQ+tE,YAAYp5E,KAAKmlF,WAAW7oF,UAAUC,IAAI,cAAcyD,KAAKqL,QAAQ+2E,aAAapiF,KAAKmlF,WAAW7oF,UAAUC,IAAI,gBAAgByD,KAAKqL,QAAQ01E,cAAc/gF,KAAKmlF,WAAW7oF,UAAUC,IAAI,iBAAiByD,KAAK0lF,cAAc1lF,KAAKw/E,QAAQO,OAAOh+B,MAAM/hD,KAAKw/E,QAAQz9B,KAAK/hD,KAAKw/E,QAAQO,OAAOh+B,KAAKu3B,OAAOt5E,KAAKw/E,QAAQO,OAAOh+B,KAAKlM,KAAI,GAAI71C,KAAKZ,QAAO,EAAG,CAAC,YAAAkgF,CAAaj6E,EAAE,CAAC,GAAG,IAAImkB,EAAEA,GAAGxpB,KAAKqL,QAAQm2E,QAAQxhF,KAAK4gF,eAAehmF,QAAQoF,KAAKw/E,QAAQO,OAAOxvC,QAAQ31C,SAASoF,KAAKygF,cAAczgF,KAAK0kF,MAAM9pF,SAASyK,EAAE27E,SAAShhF,KAAK0kF,MAAM1kF,KAAKygF,aAAa,GAAGzgF,KAAKmkB,KAAKA,KAAKnsB,KAAI,CAAEqN,EAAEmkB,KAAI,CAAEoY,IAAIv8B,EAAE1B,MAAM6lB,MAAM,IAAI9e,EAAE89B,EAAExoC,KAAK6kF,iBAAiB7kF,KAAKmkB,KAAK46D,SAASv1D,EAAExpB,KAAKw/E,QAAQjlE,SAASva,KAAKw/E,QAAQO,OAAO//E,KAAKk/E,KAAKnkB,OAAO/6D,KAAKqL,QAAQhG,EAAErF,KAAK8kF,cAAc9kF,KAAK+kF,gBAAgB,GAAG/kF,KAAKqL,QAAQm3E,YAAY,CAAC,MAAMn9E,EAAErF,KAAKqL,QAAQm3E,YAAYxiF,KAAKmkB,KAAKzZ,EAAE,QAAQrF,IAAIqF,EAAErF,EAAE,CAAC,MAAM7D,EAAExB,KAAK+jF,IAAIvqF,KAAKwG,KAAKilF,YAAYv6E,GAAG1K,KAAK+jF,IAAI/oF,MAAMgF,KAAKu/E,IAAI/9E,GAAGxB,KAAKilF,YAAYv6E,CAAC,CAAC,WAAAi7E,CAAYtgF,GAAE,GAAIrF,KAAKy/E,SAASz/E,KAAKglF,YAAYhlF,KAAKygF,aAAazgF,KAAKglF,aAAahlF,KAAKygF,aAAa,GAAGzgF,KAAKs/E,eAAet/E,KAAKskF,YAAY,IAAItkF,KAAKygF,aAAazgF,KAAKukF,WAAWvkF,KAAKygF,eAAezgF,KAAKokF,UAAUpkF,KAAK4lF,WAAW5lF,KAAKqL,QAAQq3E,OAAOI,QAAQ,IAAIt5D,EAAE9e,EAAE,EAAElJ,EAAE,EAAEogB,EAAE,EAAE,GAAG5hB,KAAKglF,aAAat6E,EAAE1K,KAAKygF,aAAa,EAAEj/E,EAAEkJ,EAAE1K,KAAKqL,QAAQo2E,QAAQ7/D,EAAEpgB,EAAExB,KAAK0kF,MAAMh6E,GAAG9P,OAAO4G,GAAG,EAAEgoB,EAAExpB,KAAK4gF,eAAehmF,OAAOoF,KAAK4kF,YAAYhqF,OAAOoF,KAAKmkB,KAAKA,KAAKvpB,QAAQoF,KAAKmkF,QAAQnkF,KAAKqL,QAAQq3E,OAAOxqC,KAAKt9C,OAAO,CAAC,MAAMyK,EAAErF,KAAKqL,QAAQq3E,OAAOxqC,KAAK5vC,QAAQ,UAAUgX,OAAO9d,IAAI8G,QAAQ,QAAQgX,OAAOsC,IAAItZ,QAAQ,SAASgX,OAAOtf,KAAKygF,eAAen4E,QAAQ,UAAUgX,OAAOtf,KAAKglF,aAAa18E,QAAQ,SAASgX,OAAOkK,IAAIxpB,KAAKmkF,OAAOp1D,UAAUvF,EAAEnkB,EAAE,EAAE,CAAC,GAAG,GAAGrF,KAAKygF,cAAczgF,KAAKylF,aAAazlF,KAAKqL,QAAQi3E,eAAetiF,KAAKygF,gBAAgBzgF,KAAKk/E,KAAKnkB,SAAS/6D,KAAK0kF,MAAM1kF,KAAKygF,aAAa,GAAGn7E,MAAMD,GAAGA,EAAE1B,QAAQ3D,KAAKk/E,KAAKnkB,UAAU,CAAC,MAAMvxC,EAAExpB,KAAK0kF,MAAM1kF,KAAKygF,aAAa,GAAGj3D,EAAE5uB,SAASyK,EAAErF,KAAKk/E,KAAKG,UAAU71D,EAAEA,EAAE5uB,OAAO,GAAG+I,OAAO3D,KAAKk/E,KAAKG,UAAU71D,EAAE,GAAG7lB,OAAO,CAAC,CAAC,aAAAkiF,GAAgB,IAAI7lF,KAAKqL,QAAQm2E,OAAO,OAAO,IAAIn8E,EAA/yM,EAACA,EAAEmkB,EAAE9e,EAAElJ,EAAEogB,KAAK,IAAIrpB,EAAE,GAAG,GAAGqpB,EAAEggE,WAAWrpF,EAAEgN,KAAKq+E,GAAG,EAAEhiE,EAAEmgE,UAAUngE,IAAIA,EAAE+/D,SAAS,CAAC,MAAMn4D,EAAEnkB,EAAE,EAAEqF,EAAE,EAAEnS,EAAEgN,KAAKq+E,GAAGp6D,EAAE5H,EAAEigE,SAASjgE,EAAE,CAACzG,OAAO9V,IAAI,CAAC,IAAIokB,EAAE,IAAI3uB,MAAM0G,GAAGmU,QAAQ3d,KAAKqN,GAAGu+E,GAAGv+E,EAAE,EAAEia,OAAOja,EAAE,GAAGuc,EAAE,CAACuhE,OAAO99E,IAAIqF,EAAE,MAAM,GAAGkX,EAAEsgE,gBAAgBz4D,EAAE,EAAEpkB,EAAEmkB,EAAE9e,EAAElJ,KAAK,MAAMogB,EAAEpgB,EAAE2gF,WAAW5pF,EAAEiJ,EAAEu3E,QAAQtvD,EAAEjoB,EAAEygF,aAAa5wE,EAAE,EAAEuQ,EAAE,IAAI3d,EAAEulB,EAAE5H,EAAEnI,EAAE+P,EAAE5H,EAAE4H,EAAE,EAAE5H,EAAEvQ,EAAEoI,EAAE,EAAEpI,EAAEmY,EAAE9e,GAAG,EAAEkX,EAAEvQ,KAAKpN,EAAEyG,GAAG,EAAE2G,IAAI,MAAMJ,EAAE,GAAG,IAAI,IAAIuY,EAAE,EAAEA,GAAG9e,EAAE8e,IAAI,GAAG,GAAGA,GAAGA,GAAG9e,GAAG8e,GAAGvlB,GAAGulB,GAAG/P,EAAE,CAAC,MAAM/O,EAAErF,EAAEmkB,EAAE,GAAGvY,EAAE1L,KAAKmF,EAAE,CAAC,IAAIgP,EAAE,MAAMgQ,EAAE,GAAG,OAAOzY,EAAEnO,SAAS0mB,IAAI,MAAM9e,EAAErM,SAASmrB,EAAEzsB,WAAW,GAAGwH,WAAW,aAAa,IAAI,GAAGmV,EAAE,CAAC,MAAM8P,EAAEnrB,SAASqb,EAAE3c,WAAW,GAAGwH,WAAW,aAAa,IAAI,GAAGmG,EAAE8e,GAAG,EAAEE,EAAEnkB,KAAKF,EAAEmkB,SAAS,GAAG9e,EAAE8e,GAAG,EAAE,CAAC,MAAMnkB,EAAE,CAACsuE,SAAS,KAAKpvE,WAAW,CAACqxE,MAAM,GAAGr9E,EAAEmrF,sBAAsBnrF,EAAE8qF,YAAY9qF,EAAE6qF,YAAYrmF,WAAW,CAAC,CAAC42E,SAAS,SAASpvE,WAAW,CAACqxE,MAAMr9E,EAAEorF,wBAAwB5mF,WAAW,CAAC,CAAC42E,SAAS,QAAQxvD,KAAKsF,OAAOC,EAAEnkB,KAAKF,EAAE,CAAC,CAACqkB,EAAEnkB,KAAKikB,GAAG9P,EAAE8P,CAAE,IAAGE,CAAE,EAAjpB,CAAmpBD,EAAE/e,EAAElJ,EAAEogB,IAAIrpB,EAAEA,EAAEoK,OAAO8mB,GAAG7H,EAAE+/D,SAAS,CAAC,MAAMt8E,EAAEmkB,EAAEhoB,EAAEkJ,EAAE,EAAEnS,EAAEgN,KAAKq+E,GAAGv+E,EAAEuc,EAAEkgE,SAASlgE,EAAE,CAACzG,OAAOqO,IAAI,CAAyC,OAAxC5H,EAAEggE,WAAWrpF,EAAEgN,KAAKq+E,GAAGpiF,EAAEogB,EAAEogE,SAASpgE,IAAU,CAAC+xD,SAAS,KAAKpvE,WAAW,CAACqxE,MAAMh0D,EAAEm3D,QAAQ0K,gBAAgB1mF,WAAW0sB,EAAE7uB,OAAO,EAAErC,EAAE,GAAE,EAAytKutF,CAAG9lF,KAAKskF,YAAYtkF,KAAKukF,WAAWvkF,KAAKygF,aAAazgF,KAAKglF,WAAWhlF,KAAKqL,SAAS,GAAGrL,KAAKqL,QAAQk3E,YAAY,CAAC,MAAM/4D,EAAExpB,KAAKqL,QAAQk3E,YAAY,CAACviF,KAAKskF,YAAYtkF,KAAKukF,WAAWvkF,KAAKygF,aAAazgF,KAAKglF,YAAY3/E,GAAGmkB,IAAInkB,EAAEmkB,EAAE,CAAC,MAAMA,EAAExpB,KAAK+jF,IAAIvqF,KAAKwG,KAAKykF,iBAAiBp/E,GAAGrF,KAAKwkF,WAAW1hF,SAASuC,IAAIrF,KAAK+jF,IAAI/oF,MAAMqK,EAAEmkB,EAAG,IAAGxpB,KAAKykF,iBAAiBp/E,CAAC,CAAC,qBAAA0gF,GAAwB,MAAM1gF,EAAErF,KAAKu/E,IAAIhpB,cAAcv2D,KAAKihF,YAAYjhF,KAAKihF,UAAU9kF,SAASC,cAAc,OAAO4D,KAAKklF,kBAAkB,CAACvR,SAAS,QAAQtuE,EAAEkxD,cAAcr5D,aAAa8C,KAAKihF,UAAU57E,GAAG,IAAImkB,EAAE,CAACmqD,SAAS,QAAQpvE,WAAWvE,KAAK6kF,iBAAiB9nF,WAAW,CAAC,CAAC42E,SAAS,QAAQ52E,WAAW,CAAC+7E,EAAE94E,KAAKmkB,KAAK46D,SAAS/+E,KAAKw/E,QAAQjlE,SAASva,KAAKw/E,QAAQO,OAAO//E,KAAKqL,QAAQ,CAAC8tE,cAAa,QAAS,GAAG3vD,EAAEjlB,WAAWqxE,MAAM3kE,EAAEuY,EAAEjlB,WAAWqxE,MAAM51E,KAAKqL,QAAQ0tE,QAAQoB,OAAOn6E,KAAKqL,QAAQm3E,YAAY,CAAC,MAAMn9E,EAAErF,KAAKqL,QAAQm3E,YAAYxiF,KAAKmkB,KAAKqF,EAAE,UAAUnkB,IAAImkB,EAAEnkB,EAAE,CAAC,MAAMqF,EAAE,CAACipE,SAAS,MAAMpvE,WAAW,CAACqxE,MAAM51E,KAAKqL,QAAQ0tE,QAAQwK,iBAAiBxmF,WAAW,CAACysB,IAAIhoB,EAAExB,KAAK+jF,IAAIvqF,KAAKwG,KAAKklF,kBAAkBx6E,GAAG1K,KAAK+jF,IAAI/oF,MAAMgF,KAAKihF,UAAUz/E,GAAGxB,KAAKklF,kBAAkBx6E,EAAE,MAAMkX,EAAE5hB,KAAKihF,UAAUC,kBAAkB1iF,YAAYwB,KAAKu/E,IAAI/gF,YAAY,GAAGojB,EAAE,CAAC,MAAMvc,EAAE+0E,gBAAgBp6E,KAAKklF,mBAAmB7/E,EAAEd,WAAWtG,MAAM,kBAAkB2jB,OAAO,MAAM4H,EAAExpB,KAAK+jF,IAAIvqF,KAAKwG,KAAKklF,kBAAkB7/E,GAAGrF,KAAK+jF,IAAI/oF,MAAMgF,KAAKihF,UAAUz3D,GAAGxpB,KAAKklF,kBAAkB7/E,CAAC,CAACA,EAAE2gF,aAAa3gF,EAAE4gF,eAAe5gF,EAAEpH,MAAMioF,UAAU,SAAS,CAAC,WAAAR,GAAc,GAAG1lF,KAAKqL,QAAQq2E,cAAc,CAAC,MAAMr8E,EAAEpB,EAAEjE,KAAKqL,QAAQ0tE,QAAQkK,UAAUz5D,EAAExpB,KAAKmlF,WAAWlkD,cAAc57B,GAAGmkB,GAAGA,aAAa28D,mBAAmB38D,EAAEjqB,iBAAiB,UAAS,KAAMS,KAAK44D,KAAK,2BAA2B54D,KAAKqL,QAAQo2E,SAASzhF,KAAKqL,QAAQo2E,QAAQpjF,SAASmrB,EAAExqB,MAAM,IAAIgB,KAAKZ,SAASY,KAAKylF,aAAazlF,KAAK44D,KAAK,oBAAoB54D,KAAKqL,QAAQo2E,QAAS,IAAE,EAAG,CAACzhF,KAAKqL,QAAQ+tE,YAAYp5E,KAAKmlF,WAAW5lF,iBAAiB,SAAS8F,IAAI,MAAMmkB,EAAEvlB,EAAEjE,KAAKqL,QAAQ0tE,QAAQn5D,OAAOlV,EAAErF,EAAE/D,OAAO,KAAKoJ,aAAa07E,kBAAkB17E,EAAE27E,QAAQ78D,IAAI,OAAOnkB,EAAEuqB,iBAAiB,MAAMpuB,EAAE,GAAG,GAAG1G,MAAM2H,KAAKzC,KAAKmlF,WAAW1gE,iBAAiB+E,IAAIvmB,QAAQoC,GAAGA,EAAErG,MAAMpE,SAASkI,SAASuC,IAAI,MAAMmkB,EAAEnkB,EAAE5I,QAAQ6pF,KAAKtmF,KAAKqL,QAAQk2E,UAAU72E,EAAErF,EAAE5I,QAAQ8pF,gBAAgBvmF,KAAKqL,QAAQi2E,qBAAqBj8E,EAAErG,MAAMyE,MAAMzD,KAAKqL,QAAQi2E,sBAAsB,CAACj8E,EAAErG,OAAOwqB,EAAE9e,EAAE5H,SAAS0mB,IAAInkB,EAAE5I,QAAQ+iF,QAAQh+E,EAAE+D,KAAK,CAACihF,MAAM,CAACh9D,GAAGg2D,QAAQ7qE,KAAKjD,MAAMrM,EAAE5I,QAAQ+iF,WAAWh+E,EAAE+D,KAAK,CAACihF,MAAM,CAACh9D,GAAGg2D,aAAQ,GAAS,IAAGn6E,EAAE5I,QAAQ+iF,QAAQh+E,EAAE+D,KAAK,CAACihF,MAAM97E,EAAE80E,QAAQ7qE,KAAKjD,MAAMrM,EAAE5I,QAAQ+iF,WAAWh+E,EAAE+D,KAAK,CAACihF,MAAM97E,EAAE80E,aAAQ,GAAS,IAAG,IAAIh+E,EAAE5G,QAAQ,IAAI4G,EAAE,GAAGglF,MAAM5rF,OAAO,CAAC,MAAMyK,EAAE7D,EAAE,GAAGxB,KAAKm1B,OAAO9vB,EAAEmhF,MAAM,GAAGnhF,EAAEm6E,QAAQ,MAAMx/E,KAAK6gF,YAAYr/E,EAAG,IAAGxB,KAAKmlF,WAAW5lF,iBAAiB,SAAS8F,IAAI,MAAMmkB,EAAEnkB,EAAE/D,OAAOmlF,QAAQ,aAAa,GAAGj9D,EAAE,GAAGA,EAAE2tC,aAAa,aAAan3D,KAAK0mF,KAAKroF,SAASmrB,EAAExrB,aAAa,aAAa,KAAKqH,EAAEuqB,sBAAsB,GAAGnW,EAAE+P,EAAExpB,KAAKqL,QAAQ0tE,QAAQY,QAAQ,CAAC,MAAMjvE,EAAE5P,MAAM2H,KAAK+mB,EAAE+sC,cAAcA,cAAct5D,UAAU/E,QAAQsxB,EAAE+sC,eAAe/0D,EAAEioB,EAAE/e,EAAE1K,KAAKw/E,QAAQjlE,UAAUva,KAAKw/E,QAAQz9B,KAAKvgD,GAAG6D,EAAEuqB,gBAAgB,MAAM,GAAGnW,EAAE+P,EAAExpB,KAAKqL,QAAQ0tE,QAAQ91E,QAAQ,CAAC,MAAMyH,EAAE5P,MAAM2H,KAAK+mB,EAAE+sC,cAAcA,cAAct5D,UAAU/E,QAAQsxB,EAAE+sC,eAAe/0D,EAAEioB,EAAE/e,EAAE1K,KAAKw/E,QAAQjlE,UAAUva,KAAKw/E,QAAQv8E,OAAOzB,GAAG6D,EAAEuqB,gBAAgB,CAAE,IAAE,GAAI5vB,KAAKqL,QAAQi3E,eAAetiF,KAAKu/E,IAAIhgF,iBAAiB,WAAW8F,IAAI,GAAG,YAAYA,EAAErP,IAAI,CAAC,IAAIwzB,EAAEnkB,EAAEuqB,iBAAiBvqB,EAAEwqB,kBAAkB7vB,KAAK0kF,MAAM1kF,KAAKygF,aAAa,GAAGn7E,MAAMD,GAAGA,EAAE1B,QAAQ3D,KAAKk/E,KAAKnkB,SAASvxC,EAAEnkB,GAAE,KAAMmkB,EAAExpB,KAAKk/E,KAAKG,UAAU71D,EAAE7lB,OAAO3D,KAAKskF,aAAatkF,KAAK0mF,KAAK1mF,KAAKygF,aAAa,GAAE,EAAG,MAAM,GAAG,cAAcp7E,EAAErP,IAAI,CAAC,IAAIwzB,EAAEnkB,EAAEuqB,iBAAiBvqB,EAAEwqB,kBAAkB,MAAMnlB,EAAE1K,KAAK0kF,MAAM1kF,KAAKygF,aAAa,GAAGn7E,MAAMD,KAAKmkB,IAAInkB,EAAE1B,QAAQ3D,KAAKk/E,KAAKnkB,SAASvxC,GAAE,IAAI,KAAM9e,EAAE1K,KAAKk/E,KAAKG,UAAU30E,EAAE/G,OAAO3D,KAAKukF,YAAYvkF,KAAK0mF,KAAK1mF,KAAKygF,aAAa,EAAE,KAAK,CAAC,QAAQ,KAAKzmF,SAASqL,EAAErP,MAAMgK,KAAK44D,KAAK,sBAAsB54D,KAAKk/E,KAAKnkB,OAAO11D,EAAG,IAAGrF,KAAKu/E,IAAIhgF,iBAAiB,aAAa8F,IAAI,MAAMmkB,EAAEnkB,EAAE/D,OAAO,GAAGkoB,aAAaguD,SAASx3E,KAAKu/E,IAAI8G,QAAQ,UAAU,CAAC,MAAM37E,EAAE5P,MAAM2H,KAAKzC,KAAKu/E,IAAI96D,iBAAiB,eAAenf,MAAMD,GAAGA,EAAEiS,SAASkS,KAAK9e,GAAGA,aAAazF,aAAajF,KAAK44D,KAAK,sBAAsBv6D,SAASqM,EAAEjO,QAAQkH,MAAM,IAAI0B,EAAE,CAAE,KAAIrF,KAAKu/E,IAAIhgF,iBAAiB,aAAa8F,IAAI,MAAMmkB,EAAEnkB,EAAE/D,OAAO,KAAKkoB,aAAaguD,SAAS,OAAO,MAAM9sE,EAAE5P,MAAM2H,KAAKzC,KAAKu/E,IAAI96D,iBAAiB,eAAenf,MAAMD,GAAGA,EAAEiS,SAASkS,KAAK9e,GAAGA,aAAazF,aAAajF,KAAK44D,KAAK,sBAAsBv6D,SAASqM,EAAEjO,QAAQkH,MAAM,IAAI0B,EAAG,IAAG3Q,OAAO6K,iBAAiB,SAASS,KAAKqkF,WAAWiB,SAAS,CAACC,UAAU7rE,GAAE,KAAM1Z,KAAK2kF,MAAM3kF,KAAK8jF,aAAaj+E,wBAAwB7F,KAAK2kF,MAAMt1E,OAAOrP,KAAKZ,QAAO,EAAI,GAAE,KAAK,OAAA7D,GAAU,GAAGyE,KAAKqL,QAAQg2E,YAAY,CAAC,GAAGrhF,KAAKmlF,WAAW,CAAC,MAAM9/E,EAAErF,KAAKmlF,WAAW5uB,cAAc,GAAGlxD,EAAE,CAAC,MAAMmkB,EAAE9e,EAAE,OAAO8e,EAAEuF,UAAU/uB,KAAKikF,aAAa,MAAMziF,EAAEgoB,EAAE03D,kBAAkB77E,EAAEswD,aAAan0D,EAAExB,KAAKmlF,YAAYnlF,KAAKu/E,IAAI/9E,CAAC,MAAMxB,KAAKqL,QAAQ0tE,QAAQoB,OAAO12E,MAAM,KAAKX,SAASuC,GAAGrF,KAAKmlF,WAAW7oF,UAAUy9B,OAAO10B,IAAI,CAAC3Q,OAAOoH,oBAAoB,SAASkE,KAAKqkF,WAAWiB,UAAUtlF,KAAKkkF,aAAY,CAAE,CAAC,CAAC,MAAA9kF,CAAOiG,GAAE,GAAIrF,KAAK44D,KAAK,2BAA2BvzD,IAAIrF,KAAKw/E,QAAQsB,iBAAiB9gF,KAAKy/E,QAAQvJ,QAAQl2E,KAAKmkB,KAAKA,KAAKvpB,QAAQoF,KAAKgkF,YAAY9N,QAAQl2E,KAAKmkB,KAAK46D,SAASnkF,SAASoF,KAAKqL,QAAQ0tE,QAAQuK,OAAO7/E,MAAM,KAAKX,SAASuC,GAAGrF,KAAKmlF,WAAW7oF,UAAUy9B,OAAO10B,KAAKrF,KAAK2mF,YAAY3mF,KAAK2lF,cAAc3lF,KAAK6lF,gBAAgB7lF,KAAKqL,QAAQrF,QAAQpL,QAAQoF,KAAK+lF,wBAAwB/lF,KAAK44D,KAAK,mBAAmB,CAAC,SAAA+tB,GAAY,IAAIthF,EAAErF,KAAKmkB,KAAKA,KAAKnsB,KAAI,CAAEqN,EAAEmkB,KAAI,CAAEoY,IAAIv8B,EAAE1B,MAAM6lB,MAAM,OAAOxpB,KAAK4gF,eAAehmF,SAASyK,EAAE,GAAGrF,KAAK4kF,YAAY9hF,SAAS0mB,GAAGnkB,EAAEE,KAAK,CAAC5B,MAAM6lB,EAAEoY,IAAI5hC,KAAKmkB,KAAKA,KAAKqF,QAAQxpB,KAAKw/E,QAAQO,OAAOxvC,QAAQ31C,QAAQoF,KAAKw/E,QAAQO,OAAOxvC,QAAQztC,SAAQ,CAAE0mB,EAAE9e,KAAK8e,IAAInkB,EAAEA,EAAEpC,QAAQoC,IAAI,MAAM7D,EAAE6D,EAAEu8B,IAAIq4C,MAAMvvE,GAAG,MAAM,mBAAmB8e,EAAEA,EAAEhoB,EAAE2iB,MAAMvC,EAAEpgB,KAAKgoB,CAAE,IAAI,IAAGxpB,KAAKqL,QAAQm2E,QAAQxhF,KAAKqL,QAAQo2E,QAAQ,EAAEzhF,KAAK0kF,MAAMr/E,EAAErN,KAAI,CAAEwxB,EAAE9e,IAAIA,EAAE1K,KAAKqL,QAAQo2E,SAAS,EAAEp8E,EAAEwC,MAAM6C,EAAEA,EAAE1K,KAAKqL,QAAQo2E,SAAS,OAAOx+E,QAAQoC,GAAGA,IAAIrF,KAAK0kF,MAAM,CAACr/E,GAAGrF,KAAKglF,WAAWhlF,KAAKokF,SAASpkF,KAAK0kF,MAAM9pF,OAAOoF,KAAKygF,eAAezgF,KAAKygF,aAAa,GAAGzgF,KAAKglF,UAAU,CAAC,UAAAS,GAAazlF,KAAKqL,QAAQ+2E,cAAcpiF,KAAK8jF,aAAa7lF,MAAMqR,OAAO,KAAKtP,KAAK2kF,MAAM3kF,KAAK8jF,aAAaj+E,wBAAwB7F,KAAK8jF,aAAa7lF,MAAMqR,OAAO,GAAGtP,KAAK2kF,MAAMr1E,WAAW,CAAC,MAAA6lB,CAAO9vB,EAAEmkB,OAAE,EAAO9e,EAAE,UAAU,GAAG1K,KAAK44D,KAAK,0BAA0BvzD,EAAErF,KAAK4kF,cAAcv/E,EAAEzK,OAAO,OAAOoF,KAAKygF,aAAa,EAAEzgF,KAAK4gF,eAAe,GAAG5gF,KAAK4kF,YAAY,GAAG5kF,KAAKZ,SAASY,KAAK44D,KAAK,mBAAmB,GAAG,IAAI54D,KAAKmlF,WAAW7oF,UAAUy9B,OAAO,mBAAkB,EAAG/5B,KAAK6gF,YAAY,CAAC,CAAC2F,MAAM,CAACnhF,GAAGm6E,QAAQh2D,QAAG,IAAS9e,GAAG1K,KAAK44D,KAAK,mBAAmBvzD,EAAErF,KAAK4kF,YAAY,CAAC,WAAA/D,CAAYx7E,EAAEmkB,EAAE,UAAU,IAAIxpB,KAAKy/E,QAAQ,OAAM,EAAGz/E,KAAKygF,aAAa,EAAEzgF,KAAK4kF,YAAY,GAAG,IAAIl6E,EAAErF,EAAErN,KAAKqN,IAAG,CAAEm6E,QAAQn6E,EAAEm6E,QAAQgH,MAAMnhF,EAAEmhF,MAAMxuF,KAAKqN,GAAGA,EAAEe,SAASnD,QAAQoC,GAAGA,IAAIjD,OAAOonB,MAAMvmB,QAAQoC,GAAGA,EAAEmhF,MAAM5rF,SAAS,GAAGoF,KAAK44D,KAAK,+BAA+BluD,EAAE1K,KAAK4kF,aAAap7D,EAAE5uB,SAAS8P,EAAEA,EAAE/H,OAAO3C,KAAK4gF,eAAe39E,QAAQoC,GAAGA,EAAEjD,SAASonB,MAAMxpB,KAAK4gF,eAAel2E,GAAGA,EAAE9P,OAAO,OAAOoF,KAAKZ,SAASY,KAAK44D,KAAK,wBAAwBluD,EAAE1K,KAAK4kF,aAAa5kF,KAAKmlF,WAAW7oF,UAAUy9B,OAAO,mBAAkB,EAAG,MAAMv4B,EAAEkJ,EAAE1S,KAAKqN,GAAGrF,KAAKw/E,QAAQjlE,SAASviB,KAAI,CAAEwxB,EAAE9e,KAAK,GAAG8e,EAAErO,SAASqO,EAAE4vD,YAAY/zE,EAAEm6E,UAAUn6E,EAAEm6E,QAAQxlF,SAAS0Q,GAAG,OAAM,EAAG,IAAIlJ,EAAE6D,EAAEmhF,MAAM,MAAM5kE,EAAE4H,EAAE22D,aAAangF,KAAKqL,QAAQ80E,YAAyK,MAA7J,CAAC,OAAO,UAAUnmF,SAAS4nB,KAAKpgB,EAAEA,EAAExJ,KAAKqN,GAAGA,EAAElP,iBAAiB,CAAC,OAAO,QAAQ6D,SAAS4nB,KAAKpgB,EAAEA,EAAExJ,KAAKqN,GAAGA,EAAE4xC,UAAU,OAAO3uC,QAAQ,kBAAkB,QAAckhB,EAAE42D,mBAAmBpgF,KAAKqL,QAAQ+0E,qBAAqB5+E,EAAEA,EAAExJ,KAAKqN,GAAGA,EAAEiD,QAAQ,2BAA2B,OAAO9G,CAAE,MAAKxB,KAAKmkB,KAAKA,KAAKrhB,SAAQ,CAAEuC,EAAEmkB,KAAK,MAAMjxB,EAAE8M,EAAE40E,MAAMjiF,KAAI,CAAEqN,EAAEmkB,KAAK,MAAM9e,EAAE1K,KAAKw/E,QAAQjlE,SAASiP,GAAG,GAAG9e,EAAE21E,cAAcrgF,KAAKqL,QAAQg1E,aAAa,OAAOh7E,EAAE,IAAI7D,EAAEogB,EAAEvc,GAAGe,OAAO,GAAG5E,EAAE5G,OAAO,CAAC,MAAMyK,EAAEqF,EAAEy1E,aAAangF,KAAKqL,QAAQ80E,YAAY,CAAC,OAAO,UAAUnmF,SAASqL,KAAK7D,EAAEA,EAAErL,eAAe,CAAC,OAAO,QAAQ6D,SAASqL,KAAK7D,EAAEA,EAAEy1C,UAAU,OAAO3uC,QAAQ,kBAAkB,MAAMoC,EAAE01E,mBAAmBpgF,KAAKqL,QAAQ+0E,qBAAqB5+E,EAAEA,EAAE8G,QAAQ,2BAA2B,IAAI,CAAC,MAAM/P,EAAEmS,EAAE61E,qBAAqBvgF,KAAKqL,QAAQk1E,oBAAoB,OAAOhoF,EAAEiJ,EAAEiC,MAAMlL,GAAG,CAACiJ,EAAG,IAAGA,EAAEkU,OAAM,CAAE8T,EAAEhoB,IAAIgoB,EAAElkB,MAAK,CAAEkkB,EAAE5H,KAAK,IAAI4H,EAAE,OAAM,EAAG,MAAMC,EAAEzpB,KAAKw/E,QAAQjlE,SAASqH,GAAGy+D,cAAcrgF,KAAKqL,QAAQg1E,aAAa,OAAO52D,EAAEA,EAAED,EAAEjxB,EAAEqpB,GAAGvc,EAAEuc,EAAElX,EAAElJ,GAAGY,QAAQonB,EAAElkB,MAAMD,GAAG9M,EAAEqpB,GAAGtc,MAAMkkB,GAAGA,EAAExvB,SAASqL,MAAO,OAAMrF,KAAK4kF,YAAYr/E,KAAKikB,EAAG,IAAGxpB,KAAKmlF,WAAW7oF,UAAUC,IAAI,kBAAkByD,KAAK4kF,YAAYhqF,OAAOoF,KAAKZ,UAAUY,KAAKmlF,WAAW7oF,UAAUy9B,OAAO,kBAAkB/5B,KAAK4lF,WAAW5lF,KAAKqL,QAAQq3E,OAAOK,YAAY/iF,KAAK44D,KAAK,wBAAwBluD,EAAE1K,KAAK4kF,YAAY,CAAC,IAAA8B,CAAKrhF,EAAEmkB,GAAE,GAAI,OAAOxpB,KAAK44D,KAAK,wBAAwBvzD,GAAGA,IAAIrF,KAAKygF,eAAe30D,MAAMzmB,KAAKrF,KAAKygF,aAAap7E,KAAKA,EAAErF,KAAK0kF,MAAM9pF,QAAQyK,EAAE,KAAKrF,KAAK2lF,YAAYn8D,GAAGxpB,KAAK6lF,qBAAqB7lF,KAAK44D,KAAK,iBAAiBvzD,IAAI,CAAC,MAAA+rE,CAAO5nD,GAAG,IAAI9e,EAAE,GAAG,GAAG5P,MAAMI,QAAQsuB,GAAG,CAAC,MAAMnkB,EAAErF,KAAKmkB,KAAK46D,SAAS/mF,KAAKqN,GAAGA,EAAE8e,KAAK7E,OAAOja,EAAE8e,MAAM9e,EAAEsK,OAAO6Z,EAAE1mB,SAAQ,CAAE0mB,EAAEhoB,KAAK,MAAMogB,EAAE,GAAG/f,OAAOukC,QAAQ5c,GAAG1mB,SAAQ,EAAG0mB,EAAE9e,MAAM,MAAMnS,EAAE8M,EAAEnN,QAAQsxB,GAAGjxB,GAAG,EAAEqpB,EAAErpB,GAAGkxC,EAAE/+B,EAAE1K,KAAKw/E,QAAQjlE,SAAShiB,IAAIyH,KAAKgkF,aAAahkF,KAAKy/E,SAAS,IAAIj+E,IAAIogB,EAAEvc,EAAEzK,QAAQ6uC,EAAE/+B,EAAE1K,KAAKw/E,QAAQjlE,SAASlV,EAAEzK,SAASyK,EAAEE,KAAKikB,GAAGxpB,KAAKmkB,KAAK46D,SAASx5E,KAAKs5E,EAAEr1D,IAAK,IAAG9e,EAAEnF,KAAK,CAAC00E,MAAMr4D,GAAI,GAAE,MAAMvc,EAAEmkB,MAAMA,EAAEu1D,UAAU/+E,KAAKgkF,aAAahkF,KAAKy/E,QAAQj2D,EAAErF,MAAMrpB,MAAMI,QAAQsuB,EAAErF,QAAQzZ,EAAE8e,EAAErF,KAAKnsB,KAAKqN,IAAI,IAAImkB,EAAE9e,EAAE,OAAO5P,MAAMI,QAAQmK,IAAImkB,EAAE,CAAC,EAAE9e,EAAErF,IAAImkB,EAAEnkB,EAAEd,WAAWmG,EAAErF,EAAE40E,OAAO,CAAC11E,WAAWilB,EAAEywD,MAAMvvE,EAAE1S,KAAI,CAAEqN,EAAEmkB,IAAIigB,EAAEpkC,EAAErF,KAAKw/E,QAAQjlE,SAASiP,MAAO,KAAIxpB,KAAKmkB,KAAK26D,EAAEt1D,OAAE,EAAOxpB,KAAKw/E,QAAQjlE,SAASva,KAAKqL,QAAQjW,KAAK4K,KAAKqL,QAAQ2S,SAAStT,EAAE9P,QAAQ8P,EAAE5H,SAASuC,GAAGrF,KAAKmkB,KAAKA,KAAK5e,KAAKF,KAAKrF,KAAKgkF,YAAY9N,QAAQl2E,KAAKmkB,KAAK46D,SAASnkF,QAAQoF,KAAKw/E,QAAQO,OAAOh+B,MAAM/hD,KAAKw/E,QAAQz9B,KAAK/hD,KAAKw/E,QAAQO,OAAOh+B,KAAKu3B,OAAOt5E,KAAKw/E,QAAQO,OAAOh+B,KAAKlM,KAAI,GAAI71C,KAAKZ,QAAO,EAAG,CAAC,OAAAwnF,GAAU,GAAG5mF,KAAK44D,KAAK,4BAA4B54D,KAAKqL,QAAQ+tE,WAAW,CAAC,MAAM/zE,EAAEpB,EAAEjE,KAAKqL,QAAQ0tE,QAAQn5D,OAAO9kB,MAAM2H,KAAKzC,KAAKmlF,WAAW1gE,iBAAiBpf,IAAIvC,SAASuC,GAAGA,EAAErG,MAAM,KAAKgB,KAAK4gF,eAAe,EAAE,CAAC5gF,KAAKygF,aAAa,EAAEzgF,KAAKskF,aAAY,EAAGtkF,KAAKZ,QAAO,GAAIY,KAAK44D,KAAK,oBAAoB,CAAC,KAAAiuB,GAAQ,MAAMxhF,EAAEqF,EAAE,SAAS,IAAI8e,EAAEgf,EAAExoC,KAAK6kF,iBAAiB7kF,KAAKmkB,KAAK46D,SAAS/+E,KAAKmkB,KAAKA,KAAKnsB,KAAI,CAAEqN,EAAEmkB,KAAI,CAAEoY,IAAIv8B,EAAE1B,MAAM6lB,MAAMxpB,KAAKw/E,QAAQjlE,SAASva,KAAKw/E,QAAQO,QAAO,EAAG//E,KAAKqL,QAAQ,CAAC6tE,gBAAe,EAAGC,cAAa,GAAIn5E,KAAK8kF,cAAc9kF,KAAK+kF,gBAAgB,GAAG/kF,KAAKqL,QAAQm3E,YAAY,CAAC,MAAMn9E,EAAErF,KAAKqL,QAAQm3E,YAAYxiF,KAAKmkB,KAAKqF,EAAE,SAASnkB,IAAImkB,EAAEnkB,EAAE,CAAC,MAAM7D,EAAExB,KAAK+jF,IAAIvqF,KAAK,CAACm6E,SAAS,SAASnqD,GAAGxpB,KAAK+jF,IAAI/oF,MAAMqK,EAAE7D,GAAG,MAAMogB,EAAEltB,OAAOugB,OAAO2M,EAAEzlB,SAASsM,KAAKzL,YAAYqI,GAAGuc,EAAEilE,OAAO,CAAC,UAAAjB,CAAWvgF,GAAG,MAAMmkB,EAAExpB,KAAKmkB,KAAK46D,SAAS97E,QAAO,CAAEoC,EAAEmkB,KAAKxpB,KAAKw/E,QAAQjlE,SAASiP,IAAIrO,SAASvgB,QAAQ,EAAEoF,KAAKqL,QAAQ0tE,QAAQuK,OAAO7/E,MAAM,KAAKX,SAASuC,GAAGrF,KAAKmlF,WAAW7oF,UAAUC,IAAI8I,KAAKrF,KAAKmkF,SAASnkF,KAAKmkF,OAAOp1D,UAAU,IAAI/uB,KAAKglF,WAAW,EAAEhlF,KAAK6lF,gBAAgB,IAAIn7E,EAAE,CAACipE,SAAS,QAAQpvE,WAAWvE,KAAK6kF,iBAAiB9nF,WAAW,CAAC,CAAC42E,SAAS,QAAQ52E,WAAW,CAAC+7E,EAAE94E,KAAKmkB,KAAK46D,SAAS/+E,KAAKw/E,QAAQjlE,SAASva,KAAKw/E,QAAQO,OAAO//E,KAAKqL,QAAQ,CAAC,KAAK,CAACsoE,SAAS,QAAQ52E,WAAW,CAAC,CAAC42E,SAAS,KAAK52E,WAAW,CAAC,CAAC42E,SAAS,KAAKpvE,WAAW,CAACqxE,MAAM51E,KAAKqL,QAAQ0tE,QAAQuK,MAAMwD,QAAQxnE,OAAOkK,IAAIzsB,WAAW,CAAC,CAAC42E,SAAS,QAAQxvD,KAAK9e,WAAW,GAAGrF,KAAK8kF,cAAchiF,SAASuC,GAAGqF,EAAE3N,WAAWwI,KAAKF,KAAKrF,KAAK+kF,eAAejiF,SAASuC,GAAGqF,EAAE3N,WAAWwI,KAAKF,KAAKqF,EAAEnG,WAAWqxE,MAAM3kE,EAAEvG,EAAEnG,WAAWqxE,MAAM51E,KAAKqL,QAAQ0tE,QAAQoB,OAAOn6E,KAAKqL,QAAQm3E,YAAY,CAAC,MAAMn9E,EAAErF,KAAKqL,QAAQm3E,YAAYxiF,KAAKmkB,KAAKzZ,EAAE,WAAWrF,IAAIqF,EAAErF,EAAE,CAAC,MAAM7D,EAAExB,KAAK+jF,IAAIvqF,KAAKwG,KAAKilF,YAAYv6E,GAAG1K,KAAK+jF,IAAI/oF,MAAMgF,KAAKu/E,IAAI/9E,GAAGxB,KAAKilF,YAAYv6E,CAAC,CAAC,EAAA4vB,CAAGj1B,EAAEmkB,GAAGxpB,KAAKm4D,QAAQ9yD,GAAGrF,KAAKm4D,QAAQ9yD,IAAI,GAAGrF,KAAKm4D,QAAQ9yD,GAAGE,KAAKikB,EAAE,CAAC,GAAAgR,CAAIn1B,EAAEmkB,GAAGnkB,KAAKrF,KAAKm4D,SAAS,GAAIn4D,KAAKm4D,QAAQ9yD,GAAGif,OAAOtkB,KAAKm4D,QAAQ9yD,GAAGnN,QAAQsxB,GAAG,EAAE,CAAC,IAAAovC,CAAKvzD,KAAKmkB,GAAG,GAAGnkB,KAAKrF,KAAKm4D,SAAS,EAAG,IAAI,IAAIztD,EAAE,EAAEA,EAAE1K,KAAKm4D,QAAQ9yD,GAAGzK,OAAO8P,IAAI1K,KAAKm4D,QAAQ9yD,GAAGqF,MAAM8e,EAAE,2BCcp8zE,MACMu9D,EAAe,CACnBC,KAAM,CAAC,UAAW,GAClBC,IAAK,CAAC,GAAI,GACV,OAAQ,CAAC,gBAAiB,GAC1BC,UAAW,CAAC,UAAW,GACvBhM,IAAK,CAAC,UAAW,GACjBiM,IAAK,CAAC,UAAW,GACjBC,OAAQ,CAAC,kBAAmB,GAC5BC,UAAW,CAAC,iBAAkB,GAC9BC,IAAK,CAAC,aAAc,GACpBC,IAAK,CAAC,cAAe,GACrBC,SAAU,CAAC,gBAAiB,GAC5BC,OAAQ,CAAC,gBAAiB,GAC1BC,QAAS,CAAC,GAAI,GACdC,IAAK,CAAC,gBAAiB,GACvBC,OAAQ,CAAC,iBAAkB,IAC3BC,GAAI,CAAC,mBAAoB,IACzB,UAAW,CAAC,kBAAmB,IAC/BC,QAAS,CAAC,GAAI,IACdC,IAAK,CAAC,GAAI,IACVC,IAAK,CAAC,GAAI,IACVC,MAAO,CAAC,iBAAkB,IAC1BC,UAAW,CAAC,oBAAqB,IACjCC,MAAO,CAAC,aAAc,IACtBC,QAAS,CAAC,kBAAmB,IAC7BC,OAAQ,CAAC,iBAAkB,IAC3BC,KAAM,CAAC,cAAe,IACtBC,QAAS,CAAC,iBAAkB,IAC5BC,SAAU,CAAC,iBAAkB,IAC7BC,IAAK,CAAC,GAAI,IACVC,UAAW,CAAC,UAAW,IACvBC,KAAM,CAAC,UAAW,IAClBC,IAAK,CAAC,UAAW,IACjB,QAAS,CAAC,UAAW,IACrB,QAAS,CAAC,UAAW,IACrBC,GAAI,CAAC,gBAAiB,IACtB,UAAW,CAAC,gBAAiB,IAC7BC,KAAM,CAAC,gBAAiB,IACxBC,MAAO,CAAC,eAAgB,IACxBC,QAAS,CAAC,GAAI,IACdC,IAAK,CAAC,GAAI,IACVC,IAAK,CAAC,GAAI,IACVC,KAAM,CAAC,iBAAkB,IACzBC,QAAS,CAAC,GAAI,IACdC,IAAK,CAAC,GAAI,GACVC,GAAI,CACFC,MAAO,CAAC,oBAAqB,IAC7BC,QAAS,CAAC,sBAAuB,GACjCC,SAAU,CAAC,iBAAkB,IAC7BC,SAAU,CAAC,kBAAmB,IAC9B,iBAAkB,CAAC,uBAAwB,IAC3CC,OAAQ,CAAC,mBAAoB,IAC7BC,QAAS,CAAC,mBAAoB,IAC9B,eAAgB,CAAC,+BAAgC,IACjDC,QAAS,CAAC,kBAAmB,IAC7BC,QAAS,CAAC,kBAAmB,IAC7BC,SAAU,CAAC,eAAgB,IAC3BC,OAAQ,CAAC,oBAAqB,KAEhCR,QAAS,CACPS,IAAK,CAAC,uBAAwB,IAC9BC,OAAQ,CAAC,iBAAkB,IAC3BC,KAAM,CAAC,iBAAkB,IACzBC,KAAM,CAAC,uBAAwB,IAC/BC,UAAW,CAAC,GAAI,IAChBC,OAAQ,CAAC,GAAI,IACbC,OAAQ,CAAC,GAAI,IACbhB,MAAO,CAAC,oBAAqB,IAC7BiB,OAAQ,CAAC,eAAgB,IACzBC,UAAW,CAAC,GAAI,IAChBC,aAAc,CAAC,GAAI,IACnBC,OAAQ,CAAC,sBAAuB,IAChCC,QAAS,CAAC,sBAAuB,IACjCC,SAAU,CAAC,GAAI,IACfC,MAAO,CAAC,GAAI,IACZC,UAAW,CAAC,GAAI,IAChBC,OAAQ,CAAC,GAAI,IACbC,QAAS,CAAC,GAAI,IACdC,KAAM,CAAC,GAAI,IACXC,MAAO,CAAC,GAAI,IACZC,OAAQ,CAAC,oBAAqB,IAC9BC,UAAW,CAAC,GAAI,IAChBC,OAAQ,CAAC,iBAAkB,IAC3BpD,UAAW,CAAC,GAAI,IAChBqD,OAAQ,CAAC,GAAI,IACbC,WAAY,CAAC,GAAI,IACjBC,OAAQ,CAAC,GAAI,IACbC,SAAU,CAAC,mBAAoB,IAC/BC,SAAU,CAAC,GAAI,IACfC,KAAM,CAAC,GAAI,IACXC,YAAa,CAAC,GAAI,IAClBC,QAAS,CAAC,GAAI,IACdC,UAAW,CAAC,GAAI,IAChBC,SAAU,CAAC,iBAAkB,IAC7BC,KAAM,CAAC,GAAI,IACXC,QAAS,CAAC,GAAI,IACdC,UAAW,CAAC,iBAAkB,IAC9BC,MAAO,CAAC,GAAI,IACZC,OAAQ,CAAC,GAAI,IACbC,MAAO,CAAC,uBAAwB,IAChCC,QAAS,CAAC,GAAI,IACdC,aAAc,CAAC,GAAI,IACnBC,SAAU,CAAC,GAAI,IACfC,KAAM,CAAC,GAAI,KAEbC,OAAQ,CACNC,QAAS,CAAC,sBAAuB,IACjCC,QAAS,CAAC,mBAAoB,IAC9BC,UAAW,CAAC,kBAAmB,IAEjCC,OAAQ,CACNC,QAAS,CAAC,aAAc,IACxBC,QAAS,CAAC,iBAAkB,IAC5BC,UAAW,CAAC,GAAI,IAChBC,SAAU,CAAC,GAAI,IACfC,KAAM,CAAC,aAAc,IACrBC,UAAW,CAAC,kBAAmB,IAC/BC,OAAQ,CAAC,iBAAkB,IAC3BC,MAAO,CAAC,cAAe,IACvBC,UAAW,CAAC,eAAgB,IAC5BC,OAAQ,CAAC,GAAI,IACbC,aAAc,CAAC,iBAAkB,KAEnCC,OAAQ,CACNC,OAAQ,CAAC,GAAI,GACbC,WAAY,CAAC,cAAe,IAC5BC,OAAQ,CAAC,kBAAmB,GAC5BC,OAAQ,CAAC,GAAI,GACbC,UAAW,CAAC,GAAI,GAChBC,QAAS,CAAC,GAAI,IACdC,OAAQ,CAAC,GAAI,GACbC,QAAS,CAAC,cAAe,GACzBC,MAAO,CAAC,gBAAiB,GACzBC,SAAU,CAAC,cAAe,IAC1BC,UAAW,CAAC,GAAI,IAChBC,SAAU,CAAC,kBAAmB,IAC9BC,OAAQ,CAAC,GAAI,GACbC,QAAS,CAAC,GAAI,IACdC,UAAW,CAAC,gBAAiB,GAC7BC,MAAO,CAAC,GAAI,IACZC,OAAQ,CAAC,kBAAmB,GAC5BC,WAAY,CAAC,GAAI,GACjBC,QAAS,CAAC,GAAI,IACdC,SAAU,CAAC,kBAAmB,GAC9BC,WAAY,CAAC,cAAe,GAC5BC,OAAQ,CAAC,GAAI,IACbC,KAAM,CAAC,GAAI,GACXC,KAAM,CAAC,GAAI,IACXC,OAAQ,CAAC,GAAI,GACbC,UAAW,CAAC,kBAAmB,GAC/BC,MAAO,CAAC,GAAI,GACZC,KAAM,CAAC,gBAAiB,GACxBC,QAAS,CAAC,eAAgB,IAC1BC,OAAQ,CAAC,GAAI,GACbC,OAAQ,CAAC,eAAgB,GACzBC,MAAO,CAAC,GAAI,GACZC,UAAW,CAAC,kBAAmB,IAC/BC,MAAO,CAAC,GAAI,GACZC,OAAQ,CAAC,GAAI,GACbC,WAAY,CAAC,kBAAmB,GAChCC,OAAQ,CAAC,GAAI,IACbC,UAAW,CAAC,kBAAmB,GAC/BC,OAAQ,CAAC,GAAI,GACbC,KAAM,CAAC,GAAI,IACXC,MAAO,CAAC,GAAI,GACZC,KAAM,CAAC,cAAe,IACtBC,YAAa,CAAC,GAAI,IAClBC,OAAQ,CAAC,gBAAiB,IAC1BC,SAAU,CAAC,GAAI,GACfC,YAAa,CAAC,gBAAiB,IAC/BC,SAAU,CAAC,GAAI,IACfC,SAAU,CAAC,gBAAiB,IAC5BC,UAAW,CAAC,GAAI,GAChBC,OAAQ,CAAC,GAAI,IACbC,WAAY,CAAC,gBAAiB,GAC9BC,SAAU,CAAC,GAAI,IACfC,SAAU,CAAC,gBAAiB,GAC5BC,SAAU,CAAC,GAAI,GACfC,UAAW,CAAC,GAAI,IAChBC,SAAU,CAAC,GAAI,GACfC,WAAY,CAAC,gBAAiB,GAC9BC,OAAQ,CAAC,GAAI,GACbC,SAAU,CAAC,GAAI,GACfC,QAAS,CAAC,gBAAiB,IAC3BC,OAAQ,CAAC,GAAI,IACbC,UAAW,CAAC,GAAI,IAChBC,QAAS,CAAC,GAAI,GACdC,UAAW,CAAC,kBAAmB,IAEjCC,IAAK,CACH5K,KAAM,CAAC,UAAW,GAClBE,UAAW,CAAC,UAAW,GACvBhM,IAAK,CAAC,GAAI,GACViM,IAAK,CAAC,UAAW,GACjBuB,UAAW,CAAC,UAAW,IACvBC,KAAM,CAAC,UAAW,IAClBC,IAAK,CAAC,GAAI,IACV,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,SAAU,CAAC,GAAI,IACf,SAAU,CAAC,GAAI,IACf,SAAU,CAAC,GAAI,IACf,SAAU,CAAC,GAAI,IACf,SAAU,CAAC,GAAI,IACf,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,UAAW,IACrB,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,GAAI,IACd,SAAU,CAAC,GAAI,IACf,SAAU,CAAC,GAAI,IACf,SAAU,CAAC,GAAI,IACf,QAAS,CAAC,GAAI,IACd,QAAS,CAAC,UAAW,KAEvBiJ,MAAO,CAAEC,aAAc,CAAC,iBAAkB,IAAKC,YAAa,CAAC,mBAAoB,KACjFC,OAAQ,CACNC,MAAO,CAAC,qBAAsB,IAC9BC,aAAc,CAAC,iBAAkB,IACjC1I,QAAS,CAAC,oBAAqB,GAC/B2I,aAAc,CAAC,mBAAoB,IACnC1I,SAAU,CAAC,mBAAoB,IAC/BG,QAAS,CAAC,kBAAmB,IAC7BC,QAAS,CAAC,mBAAoB,IAC9BuI,SAAU,CAAC,kBAAmB,KAEhCC,OAAQ,CACNC,KAAM,CAAC,iBAAkB,IACzBC,KAAM,CAAC,oBAAqB,IAC5BC,UAAW,CAAC,kBAAmB,IAC/BC,KAAM,CAAC,qBAAsB,KAE/BC,UAAW,CACTC,WAAY,CAAC,wBAAyB,IACtCL,KAAM,CAAC,kBAAmB,IAC1BM,SAAU,CAAC,sBAAuB,IAClCC,SAAU,CAAC,mBAAoB,IAC/BC,OAAQ,CAAC,GAAI,IACbC,MAAO,CAAC,qBAAsB,IAC9BC,WAAY,CAAC,qBAAsB,IACnCC,MAAO,CAAC,GAAI,IACZC,MAAO,CAAC,mBAAoB,IAC5BC,IAAK,CAAC,mBAAoB,IAC1BC,UAAW,CAAC,GAAI,IAChBC,UAAW,CAAC,GAAI,IAChBC,SAAU,CAAC,GAAI,IACfC,IAAK,CAAC,sBAAuB,IAC7BC,OAAQ,CAAC,GAAI,IACbC,MAAO,CAAC,GAAI,IACZC,OAAQ,CAAC,GAAI,IACbC,OAAQ,CAAC,mBAAoB,IAC7BC,SAAU,CAAC,mBAAoB,IAC/BC,YAAa,CAAC,GAAI,IAClBC,SAAU,CAAC,GAAI,IACfC,SAAU,CAAC,GAAI,IACfC,IAAK,CAAC,mBAAoB,KAE5B5B,SAAU,CACR6B,QAAS,CAAC,GAAI,IACdC,UAAW,CAAC,iBAAkB,IAC9BC,cAAe,CAAC,GAAI,IACpBC,UAAW,CAAC,iBAAkB,IAC9BC,QAAS,CAAC,GAAI,GACdC,UAAW,CAAC,gBAAiB,GAC7BC,MAAO,CAAC,GAAI,GACZC,OAAQ,CAAC,iBAAkB,GAC3BC,WAAY,CAAC,GAAI,IACjBC,OAAQ,CAAC,GAAI,GACbC,QAAS,CAAC,GAAI,IACdC,OAAQ,CAAC,GAAI,KAEfC,KAAM,CACJC,QAAS,CAAC,GAAI,IACdC,cAAe,CAAC,GAAI,IACpBC,OAAQ,CAAC,GAAI,IACbC,QAAS,CAAC,GAAI,IACdC,YAAa,CAAC,GAAI,IAClBC,UAAW,CAAC,eAAgB,IAC5B,WAAY,CAAC,GAAI,IACjBC,OAAQ,CAAC,GAAI,IACbC,WAAY,CAAC,mBAAoB,GACjCC,YAAa,CAAC,GAAI,GAClBC,cAAe,CAAC,gBAAiB,KACjCC,MAAO,CAAC,GAAI,IACZC,MAAO,CAAC,GAAI,IACZC,QAAS,CAAC,GAAI,IACdC,OAAQ,CAAC,eAAgB,IACzBC,SAAU,CAAC,iBAAkB,IAC7BC,OAAQ,CAAC,GAAI,IACbC,QAAS,CAAC,GAAI,IACdC,SAAU,CAAC,GAAI,IACfC,OAAQ,CAAC,GAAI,GACbC,cAAe,CAAC,GAAI,IACpB5O,UAAW,CAAC,GAAI,GAChB6O,SAAU,CAAC,GAAI,GACfC,MAAO,CAAC,GAAI,GACZC,UAAW,CAAC,GAAI,IAChBC,SAAU,CAAC,GAAI,IACfC,OAAQ,CAAC,mBAAoB,IAC7BC,OAAQ,CAAC,GAAI,GACbC,QAAS,CAAC,cAAe,IACzBC,UAAW,CAAC,GAAI,IAChBC,SAAU,CAAC,GAAI,IACfC,MAAO,CAAC,GAAI,GACZC,UAAW,CAAC,GAAI,GAChBC,UAAW,CAAC,GAAI,KAChBC,WAAY,CAAC,eAAgB,IAC7BC,KAAM,CAAC,GAAI,IACXC,KAAM,CAAC,GAAI,IACXC,YAAa,CAAC,GAAI,IAClBC,aAAc,CAAC,GAAI,IACnB1H,QAAS,CAAC,GAAI,IACd2H,OAAQ,CAAC,aAAc,IACvBC,OAAQ,CAAC,GAAI,KACbC,SAAU,CAAC,GAAI,KACfC,QAAS,CAAC,GAAI,IACdC,MAAO,CAAC,GAAI,GACZC,MAAO,CAAC,aAAc,GACtBC,OAAQ,CAAC,cAAe,GACxBC,QAAS,CAAC,GAAI,GACdC,aAAc,CAAC,iBAAkB,GACjCC,YAAa,CAAC,GAAI,IAClBC,QAAS,CAAC,GAAI,KACdC,SAAU,CAAC,GAAI,IACfC,SAAU,CAAC,iBAAkB,KAC7BC,UAAW,CAAC,GAAI,KAChBC,QAAS,CAAC,cAAe,IACzBC,QAAS,CAAC,GAAI,KACdC,UAAW,CAAC,GAAI,IAChBC,MAAO,CAAC,GAAI,KACZC,UAAW,CAAC,GAAI,IAChBC,SAAU,CAAC,GAAI,KACfC,QAAS,CAAC,GAAI,KACd/H,SAAU,CAAC,kBAAmB,GAC9BgI,QAAS,CAAC,GAAI,GACdC,KAAM,CAAC,GAAI,IACXC,UAAW,CAAC,GAAI,IAChBC,YAAa,CAAC,GAAI,IAClBC,OAAQ,CAAC,GAAI,KACbC,OAAQ,CAAC,gBAAiB,GAC1BC,KAAM,CAAC,GAAI,KACXC,UAAW,CAAC,GAAI,IAChBC,SAAU,CAAC,GAAI,IACfC,MAAO,CAAC,GAAI,IACZC,KAAM,CAAC,GAAI,IACXC,MAAO,CAAC,GAAI,IACZC,SAAU,CAAC,GAAI,GACfC,MAAO,CAAC,aAAc,IACtBC,QAAS,CAAC,GAAI,KACdC,UAAW,CAAC,gBAAiB,GAC7BC,UAAW,CAAC,gBAAiB,GAC7BC,WAAY,CAAC,GAAI,GACjBC,MAAO,CAAC,GAAI,IACZC,SAAU,CAAC,eAAgB,KAC3BC,OAAQ,CAAC,eAAgB,GACzBC,QAAS,CAAC,GAAI,IACdC,OAAQ,CAAC,GAAI,KACbC,QAAS,CAAC,GAAI,IACdC,QAAS,CAAC,GAAI,IACdC,KAAM,CAAC,GAAI,IACXC,QAAS,CAAC,aAAc,GACxBC,QAAS,CAAC,GAAI,GACdC,OAAQ,CAAC,GAAI,IACbC,UAAW,CAAC,gBAAiB,IAC7BC,SAAU,CAAC,GAAI,IACfC,OAAQ,CAAC,GAAI,IACbC,MAAO,CAAC,GAAI,IACZC,OAAQ,CAAC,GAAI,IACbC,MAAO,CAAC,GAAI,GACZC,OAAQ,CAAC,GAAI,IACbC,KAAM,CAAC,cAAe,IAExBC,OAAQ,CAAEC,aAAc,CAAC,gBAAiB,IAC1CC,WAAY,CACVC,OAAQ,CAAC,GAAI,IACbC,MAAO,CAAC,GAAI,KACZC,MAAO,CAAC,cAAe,GACvBC,WAAY,CAAC,mBAAoB,IACjCC,QAAS,CAAC,GAAI,IACdC,OAAQ,CAAC,GAAI,IACbC,QAAS,CAAC,mBAAoB,IAC9BC,OAAQ,CAAC,GAAI,IACbC,UAAW,CAAC,GAAI,IAChBC,eAAgB,CAAC,uBAAwB,IACzCC,MAAO,CAAC,GAAI,IACZC,MAAO,CAAC,GAAI,IAEdC,QAAS,CACPC,YAAa,CAAC,mBAAoB,IAClCC,QAAS,CAAC,GAAI,IACdC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,IACjBC,OAAQ,CAAC,sBAAuB,KAChCC,UAAW,CAAC,GAAI,GAChBC,QAAS,CAAC,sBAAuB,KACjCC,QAAS,CAAC,GAAI,IACdC,QAAS,CAAC,GAAI,GACdC,YAAa,CAAC,kBAAmB,IACjCC,MAAO,CAAC,GAAI,IACZC,YAAa,CAAC,GAAI,IAClBC,cAAe,CAAC,GAAI,IACpBC,WAAY,CAAC,sBAAuB,KACpCC,UAAW,CAAC,sBAAuB,KACnCC,SAAU,CAAC,sBAAuB,KAClCC,SAAU,CAAC,sBAAuB,KAClCC,SAAU,CAAC,GAAI,IACfC,cAAe,CAAC,sBAAuB,KACvCC,MAAO,CAAC,GAAI,IACZC,SAAU,CAAC,iBAAkB,IAC7BC,aAAc,CAAC,GAAI,KACnBC,UAAW,CAAC,GAAI,IAChBC,cAAe,CAAC,GAAI,KACpBC,SAAU,CAAC,GAAI,IACfC,SAAU,CAAC,GAAI,IACfC,aAAc,CAAC,kBAAmB,GAClCC,QAAS,CAAC,4BAA6B,IACvCC,WAAY,CAAC,GAAI,IACjBC,SAAU,CAAC,GAAI,KACfC,OAAQ,CAAC,GAAI,IACbC,OAAQ,CAAC,GAAI,IACbC,aAAc,CAAC,GAAI,IACnBC,YAAa,CAAC,mBAAoB,IAClCC,aAAc,CAAC,GAAI,IACnBC,YAAa,CAAC,GAAI,KAClBC,YAAa,CAAC,GAAI,IAClBC,WAAY,CAAC,qBAAsB,IACnCC,cAAe,CAAC,sBAAuB,KACvC,iBAAkB,CAAC,GAAI,IACvBC,QAAS,CAAC,GAAI,IACdC,WAAY,CAAC,GAAI,IACjBC,YAAa,CAAC,kBAAmB,IACjCC,OAAQ,CAAC,GAAI,IACbC,QAAS,CAAC,GAAI,IACdC,KAAM,CAAC,GAAI,KACXC,QAAS,CAAC,GAAI,IACdC,KAAM,CAAC,GAAI,IACXC,QAAS,CAAC,kBAAmB,IAC7BC,SAAU,CAAC,GAAI,IACfC,OAAQ,CAAC,kBAAmB,IAC5BC,WAAY,CAAC,sBAAuB,KACpCC,SAAU,CAAC,kBAAmB,IAC9BC,WAAY,CAAC,GAAI,IACjBC,UAAW,CAAC,GAAI,IAChBC,QAAS,CAAC,GAAI,IACdC,SAAU,CAAC,GAAI,KACfC,YAAa,CAAC,GAAI,IAClBC,WAAY,CAAC,GAAI,IACjBC,OAAQ,CAAC,GAAI,IACbC,UAAW,CAAC,GAAI,IAChBC,QAAS,CAAC,4BAA6B,IACvCC,SAAU,CAAC,GAAI,IACfC,UAAW,CAAC,GAAI,IAChBC,WAAY,CAAC,GAAI,KACjBC,QAAS,CAAC,sBAAuB,KACjCC,OAAQ,CAAC,GAAI,IACbC,QAAS,CAAC,GAAI,IACdC,OAAQ,CAAC,GAAI,IACbC,cAAe,CAAC,sBAAuB,KACvCC,WAAY,CAAC,8BAA+B,IAC5CC,YAAa,CAAC,GAAI,GAClBC,KAAM,CAAC,GAAI,IACXC,OAAQ,CAAC,GAAI,IACbC,WAAY,CAAC,sBAAuB,KACpCC,QAAS,CAAC,uBAAwB,IAClCC,OAAQ,CAAC,GAAI,IACbC,MAAO,CAAC,0BAA2B,IACnCrY,QAAS,CAAC,GAAI,IACdsY,QAAS,CAAC,GAAI,IACdC,OAAQ,CAAC,GAAI,IACbC,aAAc,CAAC,+BAAgC,IAC/CC,WAAY,CAAC,GAAI,IACjBC,OAAQ,CAAC,GAAI,IACbC,QAAS,CAAC,GAAI,IACdC,OAAQ,CAAC,GAAI,IACbC,UAAW,CAAC,GAAI,IAChBC,UAAW,CAAC,GAAI,IAChBC,WAAY,CAAC,sBAAuB,KACpCC,QAAS,CAAC,sBAAuB,KACjCC,WAAY,CAAC,GAAI,KACjBC,UAAW,CAAC,GAAI,KAChBC,QAAS,CAAC,eAAgB,KAC1BC,UAAW,CAAC,GAAI,IAChBC,UAAW,CAAC,GAAI,IAChBC,WAAY,CAAC,+BAAgC,IAC7CC,YAAa,CAAC,GAAI,IAClBC,SAAU,CAAC,kBAAmB,GAC9BC,YAAa,CAAC,GAAI,IAClBC,SAAU,CAAC,GAAI,IACfC,SAAU,CAAC,GAAI,IACfC,SAAU,CAAC,sBAAuB,KAClCC,QAAS,CAAC,GAAI,IACdC,OAAQ,CAAC,GAAI,IACbC,aAAc,CAAC,GAAI,IACnBC,OAAQ,CAAC,GAAI,IACbC,aAAc,CAAC,GAAI,IACnBC,QAAS,CAAC,sBAAuB,KACjCC,OAAQ,CAAC,GAAI,IACbC,QAAS,CAAC,kBAAmB,IAC7BC,WAAY,CAAC,GAAI,IACjBC,QAAS,CAAC,4BAA6B,IACvCC,cAAe,CAAC,iBAAkB,IAClCC,cAAe,CAAC,GAAI,IACpBC,UAAW,CAAC,GAAI,IAChBC,QAAS,CAAC,GAAI,IACdC,OAAQ,CAAC,iBAAkB,IAC3BC,QAAS,CAAC,GAAI,IACdC,UAAW,CAAC,8BAA+B,IAC3CC,QAAS,CAAC,GAAI,IACdC,OAAQ,CAAC,GAAI,IACbC,aAAc,CAAC,GAAI,IACnBC,cAAe,CAAC,GAAI,IACpBC,aAAc,CAAC,iCAAkC,IACjDC,MAAO,CAAC,GAAI,IACZC,OAAQ,CAAC,GAAI,IACbC,UAAW,CAAC,GAAI,IAChB,eAAgB,CAAC,sBAAuB,KACxCC,OAAQ,CAAC,GAAI,IACbC,MAAO,CAAC,GAAI,IACZC,SAAU,CAAC,GAAI,KACfC,eAAgB,CAAC,GAAI,IACrBC,MAAO,CAAC,GAAI,IACZC,KAAM,CAAC,eAAgB,IACvBC,SAAU,CAAC,iBAAkB,IAC7BC,SAAU,CAAC,GAAI,KACfC,MAAO,CAAC,sBAAuB,KAC/BC,UAAW,CAAC,GAAI,IAChBC,QAAS,CAAC,sBAAuB,KACjCC,SAAU,CAAC,sBAAuB,KAClCC,UAAW,CAAC,GAAI,IAChBC,KAAM,CAAC,GAAI,IACXC,aAAc,CAAEC,UAAW,CAAC,GAAI,IAAKC,OAAQ,CAAC,GAAI,IAAKC,OAAQ,CAAC,GAAI,KACpEC,SAAU,CAAEC,WAAY,CAAC,GAAI,IAAK3E,WAAY,CAAC,GAAI,KACnD4E,QAAS,CACPC,QAAS,CAAC,GAAI,KACdC,UAAW,CAAC,GAAI,IAChBC,MAAO,CAAC,GAAI,IACZC,UAAW,CAAC,GAAI,IAChBC,WAAY,CAAC,GAAI,IACjBC,QAAS,CAAC,GAAI,IACdC,KAAM,CAAC,GAAI,IACXzE,aAAc,CAAC,GAAI,KAErB0E,UAAW,CACTC,QAAS,CAAC,GAAI,IACdC,QAAS,CAAC,GAAI,IACdC,SAAU,CAAC,GAAI,IACfC,SAAU,CAAC,GAAI,IACfC,MAAO,CAAC,GAAI,IACZC,aAAc,CAAC,GAAI,IACnBnG,QAAS,CAAC,GAAI,IACdoG,SAAU,CAAC,GAAI,IACfpF,MAAO,CAAC,GAAI,IACZiC,QAAS,CAAC,GAAI,IACdoD,eAAgB,CAAC,8BAA+B,IAChD7C,UAAW,CAAC,GAAI,IAChBK,aAAc,CAAC,GAAI,MAGvByC,OAAQ,CACNC,SAAU,CAAC,GAAI,KACfC,MAAO,CAAC,GAAI,KACZC,QAAS,CAAC,GAAI,IACdC,SAAU,CAAC,iBAAkB,IAC7BC,SAAU,CAAC,GAAI,IACf,aAAc,CAAC,eAAgB,KAC/BC,YAAa,CAAC,iBAAkB,IAChCC,WAAY,CAAC,iBAAkB,IAC/BC,OAAQ,CAAC,eAAgB,KACzBC,SAAU,CAAC,GAAI,KACfC,QAAS,CAAC,GAAI,IACdC,SAAU,CAAC,GAAI,IACfC,UAAW,CAAC,iBAAkB,IAC9BC,QAAS,CAAC,sBAAuB,KACjCC,OAAQ,CAAC,sBAAuB,KAChCC,OAAQ,CAAC,GAAI,KACbC,OAAQ,CAAC,eAAgB,KACzBC,OAAQ,CAAC,gBAAiB,KAC1BC,WAAY,CAAC,gBAAiB,KAC9BC,OAAQ,CAAC,eAAgB,KACzBC,KAAM,CAAC,iBAAkB,IACzBC,WAAY,CAAC,eAAgB,KAC7BC,MAAO,CAAC,GAAI,KACZC,SAAU,CAAC,eAAgB,KAC3BC,OAAQ,CAAC,gBAAiB,KAC1BC,SAAU,CAAC,GAAI,KACfC,QAAS,CAAC,iBAAkB,IAC5BC,KAAM,CAAC,GAAI,KACXC,aAAc,CAAC,GAAI,KACnBC,OAAQ,CAAC,gBAAiB,KAC1BC,SAAU,CAAC,gBAAiB,KAC5BC,SAAU,CAAC,iBAAkB,IAC7BC,SAAU,CAAC,GAAI,KACfC,OAAQ,CAAC,eAAgB,KACzBC,SAAU,CAAC,iBAAkB,IAC7BC,cAAe,CAAC,iBAAkB,IAClCC,MAAO,CAAC,iBAAkB,IAC1BC,QAAS,CAAC,iBAAkB,IAC5BC,MAAO,CAAC,GAAI,GACZC,WAAY,CAAC,GAAI,KACjBC,MAAO,CAAC,GAAI,IACZC,UAAW,CAAC,gBAAiB,KAC7BC,YAAa,CAAC,eAAgB,KAC9BC,SAAU,CAAC,gBAAiB,KAC5BC,OAAQ,CAAC,GAAI,IACbC,OAAQ,CAAC,iBAAkB,IAC3BC,OAAQ,CAAC,eAAgB,KACzBC,OAAQ,CAAC,iBAAkB,IAC3BC,OAAQ,CAAC,iBAAkB,IAC3BC,OAAQ,CAAC,iBAAkB,IAC3BC,QAAS,CAAC,GAAI,KACdC,YAAa,CAAC,iBAAkB,IAChCC,MAAO,CAAC,iBAAkB,IAC1BC,QAAS,CAAC,GAAI,MAGZC,EAAsB,CAC1B,2FACA,8OACA,2FACA,2FACA,2FACA,2FACA,2FACA,8OACA,8OACA,2OACA,2OACA,6OACA,+OACA,2FACA,8OACA,2FACA,2FACA,2FACA,2FACA,6OACA,6FACA,2FACA,2FACA,2FACA,2FACA,6OACA,6OACA,8OACA,2OACA,8OACA,2OACA,2OACA,2FACA,2OACA,6OACA,2FACA,2FACA,2FACA,4FACA,2FACA,2FACA,2FACA,2OACA,2FACA,6FACA,2FACA,2FACA,2FACA,0OACA,2FACA,2FACA,2FACA,2FACA,6FACA,2FACA,2FACA,8OACA,8OACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,2FACA,0OACA,2OACA,2OACA,2FACA,2FACA,2FACA,2FACA,6OACA,4FACA,6OACA,6OACA,4FACA,4FACA,6OACA,6FACA,2FACA,6OACA,4FACA,2FACA,2FACA,2FACA,6FACA,2FACA,6FACA,2FACA,8OACA,6FACA,8OACA,6OACA,2FACA,6OACA,2OACA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","sources":["webpack://website-frontend/./node_modules/@pqina/flip/tick/tick.core.module.js","webpack://website-frontend/./node_modules/@pqina/flip/dist/tick.view.flip.module.js","webpack://website-frontend/./node_modules/@pqina/flip/dist/flip.module.js","webpack://website-frontend/./wwwroot/assets/js/source/Modules/DevoModule.js","webpack://website-frontend/./wwwroot/assets/js/source/Modules/SermonModule.js","webpack://website-frontend/./wwwroot/assets/js/source/Services/APIService.js","webpack://website-frontend/./wwwroot/assets/js/source/Services/AuthService.js","webpack://website-frontend/./wwwroot/assets/js/source/Services/ConfigService.js","webpack://website-frontend/./wwwroot/assets/js/source/Services/LangService.js","webpack://website-frontend/./wwwroot/assets/js/source/Services/RecaptchaService.js","webpack://website-frontend/./node_modules/liquidjs/dist/liquid.browser.mjs","webpack://website-frontend/./wwwroot/assets/js/source/Services/TemplateService.js","webpack://website-frontend/./node_modules/notyf/notyf.es.js","webpack://website-frontend/./wwwroot/assets/js/source/Services/UtilService.js","webpack://website-frontend/./node_modules/eventemitter3/index.js","webpack://website-frontend/./node_modules/fast-diff/diff.js","webpack://website-frontend/./node_modules/lodash.clonedeep/index.js","webpack://website-frontend/./node_modules/lodash.isequal/index.js","webpack://website-frontend/./node_modules/quill-delta/dist/AttributeMap.js","webpack://website-frontend/./node_modules/quill-delta/dist/Delta.js","webpack://website-frontend/./node_modules/quill-delta/dist/Op.js","webpack://website-frontend/./node_modules/quill-delta/dist/OpIterator.js","webpack://website-frontend/./node_modules/simple-datatables/dist/module.js","webpack://website-frontend/./node_modules/timezones-ical-library/dist/mjs/index.js","webpack://website-frontend/./node_modules/add-to-calendar-button/dist/module/index.js","webpack://website-frontend/./node_modules/lodash-es/_hashClear.js","webpack://website-frontend/./node_modules/lodash-es/_hashDelete.js","webpack://website-frontend/./node_modules/lodash-es/_hashGet.js","webpack://website-frontend/./node_modules/lodash-es/_hashHas.js","webpack://website-frontend/./node_modules/lodash-es/_hashSet.js","webpack://website-frontend/./node_modules/lodash-es/_Hash.js","webpack://website-frontend/./node_modules/lodash-es/_listCacheClear.js","webpack://website-frontend/./node_modules/lodash-es/_listCacheDelete.js","webpack://website-frontend/./node_modules/lodash-es/_listCacheGet.js","webpack://website-frontend/./node_modules/lodash-es/_listCacheHas.js","webpack://website-frontend/./node_modules/lodash-es/_listCacheSet.js","webpack://website-frontend/./node_modules/lodash-es/_ListCache.js","webpack://website-frontend/./node_modules/lodash-es/_Map.js","webpack://website-frontend/./node_modules/lodash-es/_mapCacheClear.js","webpack://website-frontend/./node_modules/lodash-es/_mapCacheDelete.js","webpack://website-frontend/./node_modules/lodash-es/_mapCacheGet.js","webpack://website-frontend/./node_modules/lodash-es/_mapCacheHas.js","webpack://website-frontend/./node_modules/lodash-es/_mapCacheSet.js","webpack://website-frontend/./node_modules/lodash-es/_MapCache.js","webpack://website-frontend/./node_modules/lodash-es/_setCacheAdd.js","webpack://website-frontend/./node_modules/lodash-es/_setCacheHas.js","webpack://website-frontend/./node_modules/lodash-es/_SetCache.js","webpack://website-frontend/./node_modules/lodash-es/_stackClear.js","webpack://website-frontend/./node_modules/lodash-es/_stackDelete.js","webpack://website-frontend/./node_modules/lodash-es/_stackGet.js","webpack://website-frontend/./node_modules/lodash-es/_stackHas.js","webpack://website-frontend/./node_modules/lodash-es/_stackSet.js","webpack://website-frontend/./node_modules/lodash-es/_Stack.js","webpack://website-frontend/./node_modules/lodash-es/_Symbol.js","webpack://website-frontend/./node_modules/lodash-es/_Uint8Array.js","webpack://website-frontend/./node_modules/lodash-es/_apply.js","webpack://website-frontend/./node_modules/lodash-es/_arrayEach.js","webpack://website-frontend/./node_modules/lodash-es/_arrayLikeKeys.js","webpack://website-frontend/./node_modules/lodash-es/_arrayPush.js","webpack://website-frontend/./node_modules/lodash-es/_arraySome.js","webpack://website-frontend/./node_modules/lodash-es/_assignMergeValue.js","webpack://website-frontend/./node_modules/lodash-es/_assignValue.js","webpack://website-frontend/./node_modules/lodash-es/_assocIndexOf.js","webpack://website-frontend/./node_modules/lodash-es/_baseAssign.js","webpack://website-frontend/./node_modules/lodash-es/_baseAssignIn.js","webpack://website-frontend/./node_modules/lodash-es/_baseAssignValue.js","webpack://website-frontend/./node_modules/lodash-es/_baseClone.js","webpack://website-frontend/./node_modules/lodash-es/_baseCreate.js","webpack://website-frontend/./node_modules/lodash-es/_createBaseFor.js","webpack://website-frontend/./node_modules/lodash-es/_baseFor.js","webpack://website-frontend/./node_modules/lodash-es/_baseGetAllKeys.js","webpack://website-frontend/./node_modules/lodash-es/_baseGetTag.js","webpack://website-frontend/./node_modules/lodash-es/_baseIsEqual.js","webpack://website-frontend/./node_modules/lodash-es/_baseIsEqualDeep.js","webpack://website-frontend/./node_modules/lodash-es/_baseIsNative.js","webpack://website-frontend/./node_modules/lodash-es/_baseKeys.js","webpack://website-frontend/./node_modules/lodash-es/_baseKeysIn.js","webpack://website-frontend/./node_modules/lodash-es/_baseMergeDeep.js","webpack://website-frontend/./node_modules/lodash-es/_baseRest.js","webpack://website-frontend/./node_modules/lodash-es/_baseTimes.js","webpack://website-frontend/./node_modules/lodash-es/_baseUnary.js","webpack://website-frontend/./node_modules/lodash-es/_cacheHas.js","webpack://website-frontend/./node_modules/lodash-es/_cloneArrayBuffer.js","webpack://website-frontend/./node_modules/lodash-es/_cloneBuffer.js","webpack://website-frontend/./node_modules/lodash-es/_cloneDataView.js","webpack://website-frontend/./node_modules/lodash-es/_cloneRegExp.js","webpack://website-frontend/./node_modules/lodash-es/_cloneSymbol.js","webpack://website-frontend/./node_modules/lodash-es/_cloneTypedArray.js","webpack://website-frontend/./node_modules/lodash-es/_copyArray.js","webpack://website-frontend/./node_modules/lodash-es/_copyObject.js","webpack://website-frontend/./node_modules/lodash-es/_copySymbols.js","webpack://website-frontend/./node_modules/lodash-es/_copySymbolsIn.js","webpack://website-frontend/./node_modules/lodash-es/_defineProperty.js","webpack://website-frontend/./node_modules/lodash-es/_equalArrays.js","webpack://website-frontend/./node_modules/lodash-es/_equalByTag.js","webpack://website-frontend/./node_modules/lodash-es/_equalObjects.js","webpack://website-frontend/./node_modules/lodash-es/_freeGlobal.js","webpack://website-frontend/./node_modules/lodash-es/_getAllKeys.js","webpack://website-frontend/./node_modules/lodash-es/_getAllKeysIn.js","webpack://website-frontend/./node_modules/lodash-es/_getMapData.js","webpack://website-frontend/./node_modules/lodash-es/_getNative.js","webpack://website-frontend/./node_modules/lodash-es/_getPrototype.js","webpack://website-frontend/./node_modules/lodash-es/_getRawTag.js","webpack://website-frontend/./node_modules/lodash-es/_arrayFilter.js","webpack://website-frontend/./node_modules/lodash-es/_getSymbols.js","webpack://website-frontend/./node_modules/lodash-es/_getSymbolsIn.js","webpack://website-frontend/./node_modules/lodash-es/_DataView.js","webpack://website-frontend/./node_modules/lodash-es/_Promise.js","webpack://website-frontend/./node_modules/lodash-es/_Set.js","webpack://website-frontend/./node_modules/lodash-es/_WeakMap.js","webpack://website-frontend/./node_modules/lodash-es/_getTag.js","webpack://website-frontend/./node_modules/lodash-es/_getValue.js","webpack://website-frontend/./node_modules/lodash-es/_initCloneArray.js","webpack://website-frontend/./node_modules/lodash-es/_initCloneByTag.js","webpack://website-frontend/./node_modules/lodash-es/_initCloneObject.js","webpack://website-frontend/./node_modules/lodash-es/_isIndex.js","webpack://website-frontend/./node_modules/lodash-es/_isIterateeCall.js","webpack://website-frontend/./node_modules/lodash-es/_isKeyable.js","webpack://website-frontend/./node_modules/lodash-es/_coreJsData.js","webpack://website-frontend/./node_modules/lodash-es/_isMasked.js","webpack://website-frontend/./node_modules/lodash-es/_isPrototype.js","webpack://website-frontend/./node_modules/lodash-es/_mapToArray.js","webpack://website-frontend/./node_modules/lodash-es/_nativeCreate.js","webpack://website-frontend/./node_modules/lodash-es/_nativeKeys.js","webpack://website-frontend/./node_modules/lodash-es/_nativeKeysIn.js","webpack://website-frontend/./node_modules/lodash-es/_nodeUtil.js","webpack://website-frontend/./node_modules/lodash-es/_objectToString.js","webpack://website-frontend/./node_modules/lodash-es/_overArg.js","webpack://website-frontend/./node_modules/lodash-es/_overRest.js","webpack://website-frontend/./node_modules/lodash-es/_root.js","webpack://website-frontend/./node_modules/lodash-es/_safeGet.js","webpack://website-frontend/./node_modules/lodash-es/_setToArray.js","webpack://website-frontend/./node_modules/lodash-es/constant.js","webpack://website-frontend/./node_modules/lodash-es/_baseSetToString.js","webpack://website-frontend/./node_modules/lodash-es/_shortOut.js","webpack://website-frontend/./node_modules/lodash-es/_setToString.js","webpack://website-frontend/./node_modules/lodash-es/_toSource.js","webpack://website-frontend/./node_modules/lodash-es/cloneDeep.js","webpack://website-frontend/./node_modules/lodash-es/eq.js","webpack://website-frontend/./node_modules/lodash-es/identity.js","webpack://website-frontend/./node_modules/lodash-es/_baseIsArguments.js","webpack://website-frontend/./node_modules/lodash-es/isArguments.js","webpack://website-frontend/./node_modules/lodash-es/isArray.js","webpack://website-frontend/./node_modules/lodash-es/isArrayLike.js","webpack://website-frontend/./node_modules/lodash-es/isArrayLikeObject.js","webpack://website-frontend/./node_modules/lodash-es/isBuffer.js","webpack://website-frontend/./node_modules/lodash-es/isEqual.js","webpack://website-frontend/./node_modules/lodash-es/isFunction.js","webpack://website-frontend/./node_modules/lodash-es/isLength.js","webpack://website-frontend/./node_modules/lodash-es/_baseIsMap.js","webpack://website-frontend/./node_modules/lodash-es/isMap.js","webpack://website-frontend/./node_modules/lodash-es/isObject.js","webpack://website-frontend/./node_modules/lodash-es/isObjectLike.js","webpack://website-frontend/./node_modules/lodash-es/isPlainObject.js","webpack://website-frontend/./node_modules/lodash-es/_baseIsSet.js","webpack://website-frontend/./node_modules/lodash-es/isSet.js","webpack://website-frontend/./node_modules/lodash-es/_baseIsTypedArray.js","webpack://website-frontend/./node_modules/lodash-es/isTypedArray.js","webpack://website-frontend/./node_modules/lodash-es/keys.js","webpack://website-frontend/./node_modules/lodash-es/keysIn.js","webpack://website-frontend/./node_modules/lodash-es/_baseMerge.js","webpack://website-frontend/./node_modules/lodash-es/_createAssigner.js","webpack://website-frontend/./node_modules/lodash-es/merge.js","webpack://website-frontend/./node_modules/lodash-es/stubArray.js","webpack://website-frontend/./node_modules/lodash-es/stubFalse.js","webpack://website-frontend/./node_modules/lodash-es/toPlainObject.js","webpack://website-frontend/./node_modules/parchment/dist/parchment.js","webpack://website-frontend/./node_modules/quill/blots/text.js","webpack://website-frontend/./node_modules/quill/blots/break.js","webpack://website-frontend/./node_modules/quill/blots/inline.js","webpack://website-frontend/./node_modules/quill/blots/block.js","webpack://website-frontend/./node_modules/quill/blots/cursor.js","webpack://website-frontend/./node_modules/eventemitter3/index.mjs","webpack://website-frontend/./node_modules/quill/core/instances.js","webpack://website-frontend/./node_modules/quill/core/logger.js","webpack://website-frontend/./node_modules/quill/core/emitter.js","webpack://website-frontend/./node_modules/quill/core/selection.js","webpack://website-frontend/./node_modules/quill/core/editor.js","webpack://website-frontend/./node_modules/quill/core/module.js","webpack://website-frontend/./node_modules/quill/blots/embed.js","webpack://website-frontend/./node_modules/quill/core/composition.js","webpack://website-frontend/./node_modules/quill/core/theme.js","webpack://website-frontend/./node_modules/quill/core/utils/scrollRectIntoView.js","webpack://website-frontend/./node_modules/quill/core/utils/createRegistryWithFormats.js","webpack://website-frontend/./node_modules/quill/core/quill.js","webpack://website-frontend/./node_modules/quill/blots/container.js","webpack://website-frontend/./node_modules/quill/blots/scroll.js","webpack://website-frontend/./node_modules/quill/formats/align.js","webpack://website-frontend/./node_modules/quill/formats/color.js","webpack://website-frontend/./node_modules/quill/formats/background.js","webpack://website-frontend/./node_modules/quill/formats/code.js","webpack://website-frontend/./node_modules/quill/formats/direction.js","webpack://website-frontend/./node_modules/quill/formats/font.js","webpack://website-frontend/./node_modules/quill/formats/size.js","webpack://website-frontend/./node_modules/quill/modules/keyboard.js","webpack://website-frontend/./node_modules/quill/modules/normalizeExternalHTML/normalizers/googleDocs.js","webpack://website-frontend/./node_modules/quill/modules/normalizeExternalHTML/normalizers/msWord.js","webpack://website-frontend/./node_modules/quill/modules/normalizeExternalHTML/index.js","webpack://website-frontend/./node_modules/quill/modules/clipboard.js","webpack://website-frontend/./node_modules/quill/modules/history.js","webpack://website-frontend/./node_modules/quill/modules/uploader.js","webpack://website-frontend/./node_modules/quill/modules/input.js","webpack://website-frontend/./node_modules/quill/modules/uiNode.js","webpack://website-frontend/./node_modules/quill/core.js","webpack://website-frontend/./node_modules/quill/formats/indent.js","webpack://website-frontend/./node_modules/quill/formats/blockquote.js","webpack://website-frontend/./node_modules/quill/formats/header.js","webpack://website-frontend/./node_modules/quill/formats/list.js","webpack://website-frontend/./node_modules/quill/formats/bold.js","webpack://website-frontend/./node_modules/quill/formats/italic.js","webpack://website-frontend/./node_modules/quill/formats/link.js","webpack://website-frontend/./node_modules/quill/formats/script.js","webpack://website-frontend/./node_modules/quill/formats/strike.js","webpack://website-frontend/./node_modules/quill/formats/underline.js","webpack://website-frontend/./node_modules/quill/formats/formula.js","webpack://website-frontend/./node_modules/quill/formats/image.js","webpack://website-frontend/./node_modules/quill/formats/video.js","webpack://website-frontend/./node_modules/quill/modules/syntax.js","webpack://website-frontend/./node_modules/quill/formats/table.js","webpack://website-frontend/./node_modules/quill/modules/table.js","webpack://website-frontend/./node_modules/quill/modules/toolbar.js","webpack://website-frontend/./node_modules/quill/ui/icons.js","webpack://website-frontend/./node_modules/quill/ui/picker.js","webpack://website-frontend/./node_modules/quill/ui/color-picker.js","webpack://website-frontend/./node_modules/quill/ui/icon-picker.js","webpack://website-frontend/./node_modules/quill/ui/tooltip.js","webpack://website-frontend/./node_modules/quill/themes/base.js","webpack://website-frontend/./node_modules/quill/themes/bubble.js","webpack://website-frontend/./node_modules/quill/themes/snow.js","webpack://website-frontend/./node_modules/quill/quill.js"],"sourcesContent":["/* eslint-disable */\n\n/*\n * @pqina/tick v1.8.2 - Counters Made Easy\n * Copyright (c) 2023 PQINA - https://github.com/pqina/tick/\n */\nexport default typeof window !== 'undefined' ? (function() {\n\tif (!module) {\n\t\tvar module = {};\n\t}\n'use strict';\n\n// Available extension types\nvar ExtensionType = {\n\tFONT: 'font',\n\tVIEW: 'view',\n\tTRANSFORM: 'transform',\n\tEASING_FUNCTION: 'easing-function',\n\tTRANSITION: 'transition'\n};\n\n// Registered extension collection\nvar Extensions = {};\nExtensions[ExtensionType.FONT] = {};\nExtensions[ExtensionType.VIEW] = {};\nExtensions[ExtensionType.TRANSFORM] = {};\nExtensions[ExtensionType.EASING_FUNCTION] = {};\nExtensions[ExtensionType.TRANSITION] = {};\n\n/**\n * Adds multiple extensions in one go\n * @param type\n * @param extensions\n * @returns {null}\n */\nvar addExtensions = function addExtensions(type, extensions) {\n\n\t// type does not exist\n\tif (!Extensions[type]) {\n\t\treturn null;\n\t}\n\n\tfor (var name in extensions) {\n\n\t\tif (!extensions.hasOwnProperty(name)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// name already exists \n\t\tif (Extensions[type][name]) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// register\n\t\tExtensions[type][name] = extensions[name];\n\t}\n};\n\n/**\n * Adds an extension function by type\n * @param type\n * @param name\n * @param fn\n * @returns {null}\n */\nvar addExtension = function addExtension(type, name, fn) {\n\n\t// type does not exist\n\tif (!Extensions[type]) {\n\t\tthrow 'Can\\'t add extension with type of \"' + type + '\", \"' + type + '\" is not a valid extension type. The following types are valid: ' + keysToList(Extensions);\n\t}\n\n\t// if is invalid name\n\tif (!/^[-a-z]+$/.test(name)) {\n\t\tthrow 'Can\\'t add extension with name \"' + name + '\", \"' + name + '\" is contains invalid characters. Only lowercase alphabetical characters and dashes are allowed.';\n\t}\n\n\t// name in type already exists \n\tif (Extensions[type][name]) {\n\t\tthrow 'Can\\'t add extension with name \"' + name + '\", \"' + name + '\" is already added.';\n\t}\n\n\t// add\n\tExtensions[type][name] = fn;\n};\n\n/**\n * Returns an extension function by name and type\n * @param type\n * @param name\n * @returns {*}\n */\nvar getExtension = function getExtension(type, name) {\n\n\t// type does not exist\n\tif (!Extensions[type]) {\n\t\tthrow 'Can\\'t get extension with type of \"' + type + '\", \"' + type + '\" is not a valid extension type. The following types are available: ' + keysToList(Extensions);\n\t}\n\n\t// name in type does not exist\n\tif (!Extensions[type][name]) {\n\t\tthrow 'Can\\'t get extension with name \"' + name + '\", \"' + name + '\" is not available. The following extensions are available: ' + keysToList(Extensions[type]);\n\t}\n\n\treturn Extensions[type][name];\n};\n\nvar MILLISECOND = 1;\nvar SECOND = 1000;\nvar MINUTE = 60000;\nvar HOUR = 3600000;\nvar DAY = 86400000;\nvar WEEK = 604800000;\nvar MONTH = 2628000000;\nvar YEAR = 31536000000;\n\nvar TimeUnit = {\n\t'Week': WEEK,\n\t'Day': DAY,\n\t'Hour': HOUR,\n\t'Minute': MINUTE,\n\t'Second': SECOND,\n\t'Millisecond': MILLISECOND,\n\t'Month': MONTH,\n\t'Year': YEAR\n};\n\nvar Months = ['Januari', 'Februari', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\nfor (var key in TimeUnit) {\n\tif (!TimeUnit.hasOwnProperty(key)) {\n\t\tcontinue;\n\t}\n\tvar val = TimeUnit[key];\n\tif (val === MILLISECOND) {\n\t\tTimeUnit['mi'] = val;\n\t\tTimeUnit['ms'] = val;\n\t} else if (val === MONTH) {\n\t\tTimeUnit['M'] = val;\n\t} else {\n\t\tTimeUnit[key.charAt(0).toLowerCase()] = val;\n\t}\n\tTimeUnit[key.toLowerCase()] = val;\n\tTimeUnit[key.toLowerCase() + 's'] = val;\n}\n\nvar Days = {\n\tMonday: 1,\n\tTuesday: 2,\n\tWednesday: 3,\n\tThursday: 4,\n\tFriday: 5,\n\tSaturday: 6,\n\tSunday: 0\n};\n\nvar MonthFactor = {\n\t'M': 1,\n\t'y': 12\n};\n\nvar serverDate = function serverDate(cb) {\n\n\tvar xhr = new XMLHttpRequest();\n\n\tvar now = Date.now();\n\txhr.open('HEAD', window.location + '?noCache=' + now);\n\txhr.setRequestHeader('Content-Type', 'text/html');\n\txhr.setRequestHeader('Cache-Control', 'no-cache');\n\n\txhr.onload = function () {\n\t\tvar correction = (now - Date.now()) * .5;\n\t\tvar responseDate = new Date(xhr.getResponseHeader('Date'));\n\t\tcb(new Date(responseDate.getTime() + correction));\n\t};\n\n\txhr.send();\n};\n\nvar isDate = function isDate(date) {\n\treturn date instanceof Date;\n};\n\nvar setTime = function setTime(date, time) {\n\tdate.setHours(time[0] || 0, time[1] || 0, time[2] || 0, time[3] || 0);\n\treturn date;\n};\n\nvar setDay = function setDay(date, day) {\n\tvar current = date.getDay();\n\tvar dist = day - current;\n\tdate.setDate(date.getDate() + dist);\n\treturn date;\n};\n\nvar setDayOfMonth = function setDayOfMonth(date, day) {\n\tvar totalDays = daysInMonth(date.getMonth() + 1, date.getFullYear());\n\tday = day === 'last' ? totalDays : Math.max(1, Math.min(totalDays, day));\n\tdate.setDate(day);\n\treturn date;\n};\n\nvar setMonth = function setMonth(date, month) {\n\tdate.setMonth(Months.map(function (m) {\n\t\treturn m.toLowerCase();\n\t}).indexOf(month));\n\treturn date;\n};\n\n/*\n Z\n ±hh:mm\n ±hhmm\n ±hh\n */\nvar toTimezoneOffset = function toTimezoneOffset(ISO8601Timezone) {\n\tvar current = new Date().getTimezoneOffset() * 60000;\n\tif (ISO8601Timezone === 'Z') {\n\t\treturn current;\n\t}\n\tvar parts = ISO8601Timezone.match(/\\+|-|[\\d]{2}|[\\d]{2}/g);\n\tvar multiplier = parts.shift() === '-' ? -1 : 1;\n\tvar hours = parseInt(parts[0], 10);\n\tvar minutes = parseInt(parts[1], 10);\n\t// calculate zone offset plus our current zone offset, all in milliseconds\n\treturn multiplier * (hours * 3600000 + minutes * 60000) + current;\n};\n\nvar offsetDate = function offsetDate(offset) {\n\treturn new Date(Date.now() + offset);\n};\n\nvar timezoneDate = function timezoneDate(date, offset) {\n\treturn new Date(date.getTime() + offset);\n};\n\n// same date (day)\nvar sameDate = function sameDate(a, b) {\n\treturn a.toDateString() === b.toDateString();\n};\n\n// exact same date and time\nvar sameTime = function sameTime(a, b) {\n\treturn a.getTime() === b.getTime();\n};\n\nvar daysInMonth = function daysInMonth(month, year) {\n\treturn new Date(year, month, 0).getDate();\n};\n\nvar dateFromISO = function dateFromISO(iso) {\n\n\t// use existing timezone\n\tif (iso.match(/(Z)|([+\\-][0-9]{2}:?[0-9]*$)/g)) {\n\t\treturn new Date(iso);\n\t}\n\n\t// add local timezone\n\tiso += iso.indexOf('T') !== -1 ? 'Z' : '';\n\treturn dateToLocal(new Date(iso));\n};\n\nvar dateToLocal = function dateToLocal(date) {\n\treturn new Date(date.getTime() + date.getTimezoneOffset() * 60000);\n};\n\nvar timeDuration = function timeDuration(milliseconds, components) {\n\n\treturn components.map(function (key) {\n\n\t\tvar requiredMilliseconds = TimeUnit[key];\n\n\t\tvar count = Math.max(0, Math.floor(milliseconds / requiredMilliseconds));\n\n\t\tmilliseconds = milliseconds % requiredMilliseconds;\n\n\t\treturn count;\n\t});\n};\n\n// makes use of time duration for everything expect years and months\nvar dateDiff = function dateDiff(a, b, components) {\n\n\t// do calculations\n\tvar diff = b - a;\n\tvar swapped = false;\n\tif (diff < 0) {\n\t\tdiff = a - b;\n\t\tvar _ref = [b, a];\n\t\ta = _ref[0];\n\t\tb = _ref[1];\n\n\t\tswapped = true;\n\t}\n\n\t// set default components\n\tif (!components) {\n\t\tcomponents = ['d', 'h', 'm'];\n\t}\n\n\t// correct month uppercase M if set to lower case\n\tvar mIndex = components.indexOf('m');\n\tif (mIndex >= 0 && (components[mIndex - 1] === 'y' || components[mIndex + 1] === 'd')) {\n\t\tcomponents[mIndex].key = 'M';\n\t}\n\n\tvar anchor = void 0;\n\tvar monthsRemaining = void 0;\n\tvar months = void 0;\n\n\tvar presentsYears = components.includes('y');\n\tvar presentsMonths = components.includes('M');\n\n\tif (presentsMonths || presentsYears) {\n\n\t\tanchor = new Date(a.valueOf() + diff);\n\n\t\tmonthsRemaining = diffInMonths(anchor, a);\n\n\t\tmonths = presentsMonths ? Math.floor(monthsRemaining) : Math.floor(monthsRemaining / 12) * 12;\n\n\t\tdiff = anchor.valueOf() - addMonths(clone$1(a), months).valueOf();\n\t}\n\n\tvar output = components.map(function (key) {\n\n\t\t// if is month or year\n\t\tif (key === 'y' || key === 'M') {\n\t\t\tvar _count = Math.max(0, Math.floor(monthsRemaining / MonthFactor[key]));\n\t\t\tmonthsRemaining -= _count * MonthFactor[key];\n\t\t\treturn _count;\n\t\t}\n\n\t\tvar requiredMilliseconds = TimeUnit[key];\n\n\t\tvar count = Math.max(0, Math.floor(diff / requiredMilliseconds));\n\n\t\tdiff = diff % requiredMilliseconds;\n\n\t\treturn count;\n\t});\n\n\treturn swapped ? output.map(function (v) {\n\t\treturn v > 0 ? -v : v;\n\t}) : output;\n};\n\n/**\n * Tick.helper.duration(10, 'seconds') -> milliseconds\n * Tick.helper.duration(a, b, format, cascade) -> [0, 10, 20, 4, 0];\n * @param args\n * @returns {*}\n */\nvar duration = function duration() {\n\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\targs[_key] = arguments[_key];\n\t}\n\n\t// if is countdown x amount of milliseconds\n\tif (typeof args[0] === 'number' && typeof args[1] === 'string') {\n\t\tif (!TimeUnit[args[1]]) {\n\t\t\tthrow '\"' + args[1] + '\" is not a valid amount.';\n\t\t}\n\t\treturn args[0] * TimeUnit[args[1]];\n\t}\n\n\t// is date diff\n\tif (isDate(args[0])) {\n\t\treturn dateDiff.apply(undefined, args);\n\t}\n\n\t// is duration in milliseconds\n\tif (typeof args[0] === 'number' && Array.isArray(args[1])) {\n\t\treturn timeDuration.apply(undefined, args);\n\t}\n\n\treturn null;\n};\n\n/**\n * Returns current date\n */\nvar now$1 = function now() {\n\treturn new Date();\n};\n\n/**\n * Clones the given date object\n * @param date\n * @returns {Date}\n */\nvar clone$1 = function clone(date) {\n\treturn new Date(date.valueOf());\n};\n\n/**\n * Adds x amount of months to date\n * @param date\n * @param months\n * @returns {*}\n */\nvar addMonths = function addMonths(date, months) {\n\tdate.setMonth(date.getMonth() + months);\n\treturn date;\n};\n\n/**\n * Difference in months between date `a` and date `b`\n * @param a\n * @param b\n * @returns {number}\n */\nvar diffInMonths = function diffInMonths(a, b) {\n\n\tvar wholeMonthDiff = (b.getFullYear() - a.getFullYear()) * 12 + (b.getMonth() - a.getMonth());\n\tvar anchor = addMonths(clone$1(a), wholeMonthDiff);\n\tvar anchor2 = void 0;\n\tvar adjust = void 0;\n\n\tif (b - anchor < 0) {\n\t\tanchor2 = addMonths(clone$1(a), wholeMonthDiff - 1);\n\t\tadjust = (b - anchor) / (anchor - anchor2);\n\t} else {\n\t\tanchor2 = addMonths(clone$1(a), wholeMonthDiff + 1);\n\t\tadjust = (b - anchor) / (anchor2 - anchor);\n\t}\n\n\treturn -(wholeMonthDiff + adjust);\n};\n\n/**\n * Destroyer\n * @param state\n */\nvar destroyer = (function (state) {\n\n\treturn {\n\t\tdestroy: function destroy() {\n\n\t\t\tstate.destroyed = true;\n\n\t\t\tif (state.frame) {\n\t\t\t\tcancelAnimationFrame(state.frame);\n\t\t\t}\n\n\t\t\tif (state.styleObserver) {\n\t\t\t\tstate.styleObserver.disconnect();\n\t\t\t}\n\n\t\t\tif (state.didResizeWindow) {\n\t\t\t\twindow.removeEventListener('resize', state.didResizeWindow);\n\t\t\t}\n\n\t\t\tif (state.root && state.root.parentNode) {\n\t\t\t\tstate.root.parentNode.removeChild(state.root);\n\t\t\t}\n\t\t}\n\t};\n});\n\n/**\n * Rooter\n * @param state\n * @param root\n * @param name\n */\nvar rooter = (function (state) {\n\tvar root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.createElement('span');\n\tvar name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\n\tstate.root = root;\n\tstate.aligned = null;\n\tstate.destroyed = false;\n\n\tif (root && name) {\n\t\tstate.root.classList.add('tick-' + name);\n\t\tstate.root.setAttribute('data-view', name);\n\t}\n\n\tif (root && root.dataset.layout) {\n\t\tstate.align = (root.dataset.layout.match(/left|right|center/) || [])[0] || 'left';\n\t}\n\n\treturn {\n\n\t\tappendTo: function appendTo(element) {\n\t\t\tvar location = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'last';\n\n\n\t\t\t// if no root or already attached -> exit\n\t\t\tif (!state.root || state.root && state.root.parentNode) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (location === 'last') {\n\t\t\t\t// place before last text node if found\n\t\t\t\tif (element.childNodes.length && element.childNodes[element.childNodes.length - 1].nodeType === Node.TEXT_NODE) {\n\t\t\t\t\telement.insertBefore(state.root, element.childNodes[element.childNodes.length - 1]);\n\t\t\t\t} else {\n\t\t\t\t\t// else just append\n\t\t\t\t\telement.appendChild(state.root);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (location === 'first') {\n\t\t\t\t// no elements and no text\n\t\t\t\tif (element.childNodes.length === 0) {\n\t\t\t\t\telement.appendChild(state.root);\n\t\t\t\t}\n\t\t\t\t// no elements but does contain text\n\t\t\t\telse if (element.children.length === 0 && element.childNodes.length) {\n\t\t\t\t\t\telement.insertBefore(state.root, element.childNodes[element.childNodes.length - 1]);\n\t\t\t\t\t}\n\t\t\t\t\t// elements!\n\t\t\t\t\telse {\n\t\t\t\t\t\t\telement.insertBefore(state.root, element.children[0]);\n\t\t\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof location !== 'string') {\n\t\t\t\telement.insertBefore(state.root, location);\n\t\t\t}\n\t\t}\n\n\t};\n});\n\n/**\n * Grouper\n * @param state\n * @param definition\n */\nvar grouper = (function (state, definition) {\n\n\tstate.definition = definition;\n\n\treturn {\n\t\tsetDefinition: function setDefinition(definition) {\n\t\t\tstate.definition = definition;\n\t\t}\n\t};\n});\n\n/**\n * Drawer\n * @param state\n * @param draw\n * @param present\n * @param drawViews\n */\nvar drawer = (function (state, _draw, drawViews, present) {\n return {\n draw: function draw() {\n // not dirty, might need to draw subviews\n if (!state.dirty) {\n if (drawViews) {\n // draw sub views\n var redrawn = drawViews(state);\n if (redrawn) {\n // let's fit it! (if necessary)\n fit(state);\n }\n }\n return false;\n }\n\n // draw everything\n _draw(state, present);\n\n // let's fit this view (if necessary)\n fit(state);\n\n // no longer dirty\n state.dirty = false;\n\n return true;\n }\n };\n});\n\nvar fit = function fit(state) {\n if (!state.fit) {\n // nope\n if (!state.root || !(state.root.getAttribute('data-layout') || '').match(/fit/)) {\n state.fit = false;\n return;\n }\n\n // create fit info object\n var style = window.getComputedStyle(state.root, null);\n\n state.fit = true;\n state.fitInfo = {\n currentFontSize: parseInt(style.getPropertyValue('font-size'), 10)\n };\n }\n\n // get available width from parent node\n state.fitInfo.availableWidth = state.root.parentNode.clientWidth;\n\n // the space our target element uses\n state.fitInfo.currentWidth = state.root.scrollWidth;\n\n // let's calculate the new font size\n var newFontSize = Math.min(Math.max(4, state.fitInfo.availableWidth / state.fitInfo.currentWidth * state.fitInfo.currentFontSize), 1024);\n\n // size has not changed enough?\n var dist = Math.abs(newFontSize - state.fitInfo.currentFontSize);\n\n // prevents flickering on firefox / safari / ie by not redrawing tiny font size changes\n if (dist <= 1) return;\n\n state.fitInfo.currentFontSize = newFontSize;\n\n state.root.style.fontSize = state.fitInfo.currentFontSize + 'px';\n\n // redraw once more to quickly create better fit\n if (state.fitInfo.currentWidth / state.fitInfo.availableWidth < 0.5) {\n requestAnimationFrame(function () {\n return fit(state);\n });\n }\n};\n\nvar updater = (function (state) {\n\n\tstate.dirty = true;\n\tstate.value = null;\n\tstate.valueUpdateCount = 0;\n\tstate.isInitialValue = function () {\n\t\treturn state.valueUpdateCount <= 1;\n\t};\n\n\treturn {\n\t\treset: function reset() {\n\t\t\tstate.dirty = true;\n\t\t\tstate.value = null;\n\t\t\tstate.valueUpdateCount = 0;\n\t\t},\n\t\tupdate: function update(value) {\n\n\t\t\t// don't update on same value\n\t\t\tif (equal(state.value, value)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstate.value = value;\n\t\t\tstate.valueUpdateCount++;\n\t\t\tstate.dirty = true;\n\t\t}\n\t};\n});\n\n/**\n * Resizer\n * @param state\n */\nvar resizer = (function (state) {\n\n\tstate.didResizeWindow = function () {\n\t\tstate.dirty = true;\n\t};\n\n\twindow.addEventListener('resize', state.didResizeWindow);\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\nvar asyncGenerator = function () {\n function AwaitValue(value) {\n this.value = value;\n }\n\n function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n\n if (value instanceof AwaitValue) {\n Promise.resolve(value.value).then(function (arg) {\n resume(\"next\", arg);\n }, function (arg) {\n resume(\"throw\", arg);\n });\n } else {\n settle(result.done ? \"return\" : \"normal\", result.value);\n }\n } catch (err) {\n settle(\"throw\", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case \"return\":\n front.resolve({\n value: value,\n done: true\n });\n break;\n\n case \"throw\":\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen.return !== \"function\") {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n return this;\n };\n }\n\n AsyncGenerator.prototype.next = function (arg) {\n return this._invoke(\"next\", arg);\n };\n\n AsyncGenerator.prototype.throw = function (arg) {\n return this._invoke(\"throw\", arg);\n };\n\n AsyncGenerator.prototype.return = function (arg) {\n return this._invoke(\"return\", arg);\n };\n\n return {\n wrap: function (fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n },\n await: function (value) {\n return new AwaitValue(value);\n }\n };\n}();\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nvar draw = function draw(state, present) {\n var views = (state.definition || []).concat();\n\n if (state.align === 'right') {\n views.reverse();\n }\n\n var value = Array.isArray(state.value) ? state.value.concat() : _typeof(state.value) === 'object' ? clone(state.value) : state.value;\n\n views.forEach(function (view) {\n if (!view.presenter) {\n state.update = present(view);\n if (!view.presenter) {\n return;\n }\n view.presenter.appendTo(state.root);\n }\n });\n\n views.filter(function (view) {\n return view.presenter !== undefined;\n }).forEach(function (view) {\n if (Array.isArray(value) && state.valueMapping) {\n // if set to indexes divide values over views, else (must be \"none\") just pass array\n state.update(view, state.valueMapping === 'indexes' ? state.align === 'right' ? value.pop() : value.shift() : value);\n } else if (view.key && value[view.key] !== undefined) {\n // view expects a key so value should be object\n state.update(view, value[view.key]);\n } else {\n // just pass on value to all sub views\n state.update(view, value);\n }\n });\n\n state.views = views;\n\n // also draw subviews\n drawViews(state);\n};\n\nvar drawViews = function drawViews(state) {\n var redrawn = false;\n state.views.filter(function (view) {\n return view.presenter !== undefined;\n }).forEach(function (view) {\n if (view.presenter.draw()) {\n redrawn = true;\n }\n });\n return redrawn;\n};\n\nvar createRoot = (function (root, definition, present) {\n var state = {\n valueMapping: null // \"none\" or \"indexes\"\n };\n\n if (root && root.dataset.valueMapping) {\n var allowed = ['none', 'indexes'];\n var mapping = root.dataset.valueMapping;\n state.valueMapping = allowed.indexOf(mapping) !== -1 ? mapping : null;\n }\n\n return Object.assign({}, rooter(state, root), resizer(state), updater(state), grouper(state, definition), drawer(state, draw, drawViews, present), destroyer(state));\n});\n\nvar draw$1 = function draw(state, present, ready) {\n\n\t// if value is not in form of array force to array\n\tvar value = copyArray(Array.isArray(state.value) ? state.value : (state.value + '').split(''));\n\n\t// if we're aligned to the right we will append items differently so view updating is less jumpy\n\tif (state.align === 'right') {\n\t\tvalue.reverse();\n\t}\n\n\t// clean up presenters if too much presenters\n\tif (state.definitions.length > value.length) {\n\t\twhile (state.definitions.length > value.length) {\n\t\t\tvar def = state.definitions.pop();\n\t\t\tdef.presenter.destroy();\n\t\t}\n\t}\n\n\t// setup presenters\n\tvalue.forEach(function (value, index) {\n\n\t\tvar def = state.definitions[index];\n\t\tif (!def) {\n\t\t\tdef = state.definitions[index] = cloneDefinition(state.definition);\n\t\t\tstate.update = present(def);\n\t\t\tdef.presenter.appendTo(state.root, state.align === 'right' ? 'first' : 'last');\n\t\t}\n\t});\n\n\t// let's update all subs (possibly sets dirty flag)\n\tvalue.forEach(function (value, index) {\n\t\treturn state.update(state.definitions[index], value);\n\t});\n\n\tstate.views = value;\n\n\t// also draw subviews\n\tdrawViews$1(state);\n};\n\nvar drawViews$1 = function drawViews(state) {\n\n\tvar redrawn = false;\n\tstate.views.forEach(function (view, index) {\n\t\tif (state.definitions[index].presenter.draw()) {\n\t\t\tredrawn = true;\n\t\t}\n\t});\n\treturn redrawn;\n};\n\nvar createRepeater = (function (root, definition, present) {\n\n\tvar state = {\n\t\tdefinitions: []\n\t};\n\n\treturn Object.assign({}, rooter(state, root), updater(state), grouper(state, definition), drawer(state, draw$1, drawViews$1, present), destroyer(state));\n});\n\nvar VENDOR_PREFIX = typeof document === 'undefined' ? null : function () {\n\tvar VENDORS = ['webkit', 'Moz', 'ms', 'O'];\n\tvar i = 0;\n\tvar l = VENDORS.length;\n\tvar transform = void 0;\n\tvar elementStyle = document.createElement('div').style;\n\tfor (; i < l; i++) {\n\t\ttransform = VENDORS[i] + 'Transform';\n\t\tif (transform in elementStyle) {\n\t\t\treturn VENDORS[i];\n\t\t}\n\t}\n\treturn null;\n}();\n\nvar text = function text(node, value) {\n\tvar textNode = node.childNodes[0];\n\tif (!textNode) {\n\t\ttextNode = document.createTextNode(value);\n\t\tnode.appendChild(textNode);\n\t} else if (value !== textNode.nodeValue) {\n\t\ttextNode.nodeValue = value;\n\t}\n};\n\nvar create$1 = function create(name, className) {\n\tvar el = document.createElement(name);\n\tif (className) {\n\t\tel.className = className;\n\t}\n\treturn el;\n};\n\nvar observeAttributes = function observeAttributes(element, attributes, cb) {\n\tvar observer = new MutationObserver(function (mutations) {\n\t\tattributes.forEach(function (attr) {\n\t\t\tif (mutations.filter(function (mutation) {\n\t\t\t\treturn attributes.includes(mutation.attributeName);\n\t\t\t}).length) {\n\t\t\t\tcb(element.getAttribute(attr));\n\t\t\t}\n\t\t});\n\t});\n\tobserver.observe(element, { attributes: true });\n\treturn observer;\n};\n\nvar isHTMLElement = function isHTMLElement(value) {\n\treturn value instanceof HTMLElement;\n};\n\n/**\n * Element Transform Origin\n * @param element\n * @param value\n */\nvar setTransformOrigin = function setTransformOrigin(element, value) {\n\telement.style.transformOrigin = value;\n};\n\n/**\n * Element Transforms\n * @param element\n * @param name\n * @param value\n * @param unit\n */\nvar setTransform = function setTransform(element, name, value) {\n\tvar unit = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n\n\n\tif (!element.transforms) {\n\t\telement.transforms = [];\n\t}\n\n\tvar t = element.transforms.find(function (t) {\n\t\treturn t.name === name;\n\t});\n\tif (t) {\n\t\tt.value = value;\n\t} else {\n\t\telement.transforms.push({ name: name, value: value, unit: unit });\n\t}\n\n\tsetTransformStyle(element, element.transforms);\n};\n\nvar setTransformStyle = function setTransformStyle(element, transforms) {\n\telement.style.transform = transforms.map(function (t) {\n\t\treturn t.name + '(' + t.value + t.unit + ')';\n\t}).join(' ');\n};\n\nvar isVisible = function isVisible(element) {\n\n\tvar elementRect = element.getBoundingClientRect();\n\n\t// is above top of the page\n\tif (elementRect.bottom < 0) {\n\t\treturn false;\n\t}\n\n\t// is below bottom of page\n\tif (elementRect.top > window.scrollY + window.innerHeight) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\n/**\n * @param value { * }\n */\nvar toBoolean$1 = function toBoolean(value) {\n return typeof value === 'string' ? value === 'true' : value;\n};\n\n/**\n * @param string { string }\n */\nvar capitalizeFirstLetter$1 = function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\n/**\n * @param string { string }\n */\nvar trim$1 = function trim(string) {\n return string.trim();\n};\n\nvar CACHE = {};\n\nvar cache = (function (value, fn) {\n\tvar fns = fn.toString();\n\tif (!CACHE[fns]) {\n\t\tCACHE[fns] = {};\n\t}\n\tif (!CACHE[fns][value]) {\n\t\tCACHE[fns][value] = fn(value);\n\t}\n\treturn CACHE[fns][value];\n});\n\nvar isInt = new RegExp(\"^[0-9]+$\");\nvar isBoolean$1 = new RegExp(\"^(true|false)$\");\nvar isFloat = new RegExp(\"^[0-9.]+$\");\nvar isColor = new RegExp(\"color\");\nvar isShadow = new RegExp(\"shadow\");\nvar isGradient = new RegExp(\"^(follow-gradient|horizontal-gradient|vertical-gradient)\");\nvar isDuration = new RegExp(\"^[.0-9]+(?:ms|s){1}$\");\nvar isTransition = new RegExp(\"^transition-?(?:in|out)?$\");\nvar isURL = new RegExp(\"^url\\\\(\");\n\nvar toDuration = function toDuration(string) {\n return string ? parseFloat(string) * (/ms$/.test(string) ? 1 : 1000) : 0;\n};\n\nvar toTransition = function toTransition(string) {\n return string.match(/[a-z]+(?:\\(.*?\\))?\\s?(?:origin\\(.*?\\))?\\s?(?:[a-z]+\\(.*?\\))?[ .a-z-0-9]*/g).map(toTransitionPartial);\n};\n\nvar toTransitionPartial = function toTransitionPartial(string) {\n var parts = string.match(/([a-z]+(?:\\(.*?\\))?)\\s?(?:origin\\((.*?)\\))?\\s?([a-z]+(?:\\(.*?\\))?)?\\s?(?:([.0-9ms]+)?\\s?(?:(ease-[a-z-]+))?\\s?([.0-9ms]+)?)?/);\n\n // get transition function definition\n var fn = toFunctionOutline(parts[1]);\n\n // get duration and easing\n var origin = undefined;\n var duration = undefined;\n var ease = undefined;\n var delay = undefined;\n var resolver = undefined;\n\n // skip function and figure out what other parts are\n parts.slice(2).filter(function (part) {\n return typeof part !== \"undefined\";\n }).forEach(function (part) {\n // is either duration or delay\n if (isDuration.test(part)) {\n if (typeof duration === \"undefined\") {\n duration = toDuration(part);\n } else {\n delay = toDuration(part);\n }\n }\n\n // is origin if contains a space\n else if (/ /.test(part)) {\n origin = part;\n }\n\n // should be ease\n else if (/^ease-[a-z-]+$/.test(part)) {\n ease = part;\n }\n\n // should be transform\n else if (/^[a-z]+/.test(part)) {\n resolver = toFunctionOutline(part);\n }\n });\n\n // reset easing and duration when transform is defined, these settings don't work together\n if (resolver) {\n duration = undefined;\n ease = undefined;\n }\n\n // return transition object\n return {\n name: fn.name,\n parameters: fn.parameters,\n duration: duration,\n ease: ease,\n delay: delay,\n origin: origin,\n resolver: resolver\n };\n};\n\n/**\n * toGradient\n * @param string { string } - string should be in format (color, color)\n * @returns { {type: *, colors: *} }\n */\nvar toGradient = function toGradient(string) {\n var type = string.match(/follow-gradient|horizontal-gradient|vertical-gradient/)[0];\n var colors = string.substring(type.length).match(/(?:transparent|rgb\\(.*?\\)|hsl\\(.*?\\)|hsla\\(.*?\\)|rgba\\(.*?\\)|[a-z]+|#[abcdefABCDEF\\d]+)\\s?(?:[\\d]{1,3}%?)?/g).map(toGradientColor);\n return {\n type: type,\n colors: colors\n };\n};\n\nvar gradientOffsetRegex = /\\s([\\d]{1,3})%?$/;\nvar toGradientColor = function toGradientColor(string) {\n var offset = string.match(gradientOffsetRegex);\n return {\n offset: offset ? parseFloat(offset[1]) / 100 : null,\n value: toColor(string.replace(gradientOffsetRegex, \"\"))\n };\n};\n\n/**\n * Returns the pixels amount for the given value\n */\nvar pipetteCache = [];\n\nvar getPipette = function getPipette(id, root) {\n if (!pipetteCache[id]) {\n return null;\n }\n return pipetteCache[id].find(function (p) {\n return p.node.parentNode === root;\n });\n};\n\nvar setPipette = function setPipette(id, pipette) {\n if (!pipetteCache[id]) {\n pipetteCache[id] = [];\n }\n pipetteCache[id].push(pipette);\n};\n\nvar toPixels = typeof document === \"undefined\" ? function (value) {\n return 0;\n} : function (value) {\n var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.body;\n var id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n if (value == 0) {\n return 0;\n }\n\n if (id) {\n var _pipette = getPipette(id, root) || {};\n if (!_pipette.node) {\n _pipette.node = document.createElement(\"span\");\n _pipette.node.style.cssText = \"position:absolute;padding:0;visibility:hidden;\";\n root.appendChild(_pipette.node);\n }\n\n // update value\n _pipette.node.style.marginTop = value;\n\n // compute style for first time\n if (!_pipette.style) {\n _pipette.style = window.getComputedStyle(_pipette.node);\n }\n\n setPipette(id, _pipette);\n\n return parseInt(_pipette.style.marginTop, 10);\n }\n\n // old method\n var pipette = document.createElement(\"span\");\n pipette.style.cssText = \"position:absolute;padding:0;visibility:hidden;margin-top:\" + value;\n root.appendChild(pipette);\n requestAnimationFrame(function () {\n pipette.parentNode.removeChild(pipette);\n });\n return parseInt(window.getComputedStyle(pipette).marginTop, 10);\n};\n\n/**\n * @param string { string } - any valid CSS color value\n * @returns { string }\n */\nvar toColor = typeof document === \"undefined\" ? function (string) {\n return string;\n} : function (string) {\n if (string === \"transparent\") {\n return \"rgba(0,0,0,0)\";\n }\n var pipette = document.createElement(\"span\");\n pipette.style.cssText = \"position:absolute;visibility:hidden;color:\" + string;\n document.body.appendChild(pipette);\n requestAnimationFrame(function () {\n pipette.parentNode.removeChild(pipette);\n });\n return window.getComputedStyle(pipette).getPropertyValue(\"color\");\n};\n\nvar toShadow = function toShadow(style) {\n if (typeof style !== \"string\") {\n return style;\n }\n\n return style.match(/([-.\\d]+(?:%|ms|s|deg|cm|em|ch|ex|q|in|mm|pc|pt|px|vh|vw|vmin|vmax)?)|[%#A-Za-z0-9,.()]+/g);\n};\n\nvar toURL = function toURL(style) {\n var urls = style.match(/url\\((.*?)\\)/g).map(function (url) {\n return url.substring(4, url.length - 1);\n });\n return urls.length === 1 ? urls[0] : urls;\n};\n\nvar toStyleProperty = function toStyleProperty(key) {\n return key.trim().split(\"-\").map(function (key, index) {\n return index > 0 ? capitalizeFirstLetter$1(key) : key;\n }).join(\"\");\n};\n\nvar toStyleValue = function toStyleValue(value, property) {\n if (isBoolean$1.test(value)) {\n return toBoolean$1(value);\n }\n\n if (isInt.test(value)) {\n return parseInt(value, 10);\n }\n\n if (isFloat.test(value)) {\n return parseFloat(value);\n }\n\n if (isURL.test(value)) {\n return toURL(value);\n }\n\n if (isColor.test(property)) {\n if (isGradient.test(value)) {\n return cache(value, toGradient);\n }\n return cache(value, toColor);\n }\n\n if (isShadow.test(property)) {\n return cache(value, toShadow);\n }\n\n if (isTransition.test(property)) {\n if (value === \"none\") {\n return value;\n }\n return cache(value, toTransition);\n }\n\n return value;\n};\n\nvar toStyle = function toStyle(string) {\n var parts = string.split(\":\").map(trim$1);\n var property = toStyleProperty(parts[0]);\n var value = toStyleValue(parts[1], parts[0]);\n if (!property || value === null || typeof value === \"undefined\") {\n return null;\n }\n return {\n property: property,\n value: value\n };\n};\n\nvar toStyles = function toStyles(string) {\n return string.split(\";\")\n\n // remove empty values\n .filter(function (style) {\n return style.trim().length;\n })\n\n // turn into objects\n .map(toStyle)\n\n // remove invalid styles\n .filter(function (style) {\n return style !== null;\n })\n\n // create styles object\n .reduce(function (styles, style) {\n styles[style.property] = style.value;\n return styles;\n }, {});\n};\n\n// https://gist.github.com/gre/1650294\n// http://easings.net/\n// https://github.com/danro/jquery-easing/blob/master/jquery.easing.js\n// http://gizma.com/easing/\n\nvar easeLinear = function easeLinear(t) {\n\treturn t;\n};\n\nvar easeInSine = function easeInSine(t) {\n\treturn -1 * Math.cos(t * (Math.PI / 2)) + 1;\n};\n\nvar easeOutSine = function easeOutSine(t) {\n\treturn Math.sin(t * (Math.PI / 2));\n};\n\nvar easeInOutSine = function easeInOutSine(t) {\n\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n};\n\nvar easeInQuad = function easeInQuad(t) {\n\treturn t * t;\n};\n\nvar easeOutQuad = function easeOutQuad(t) {\n\treturn t * (2 - t);\n};\n\nvar easeInOutQuad = function easeInOutQuad(t) {\n\treturn t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n};\n\nvar easeInCubic = function easeInCubic(t) {\n\treturn t * t * t;\n};\n\nvar easeOutCubic = function easeOutCubic(t) {\n\tvar t1 = t - 1;\n\treturn t1 * t1 * t1 + 1;\n};\n\nvar easeInOutCubic = function easeInOutCubic(t) {\n\treturn t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n};\n\nvar easeInQuart = function easeInQuart(t) {\n\treturn t * t * t * t;\n};\n\nvar easeOutQuart = function easeOutQuart(t) {\n\treturn 1 - --t * t * t * t;\n};\n\nvar easeInOutQuart = function easeInOutQuart(t) {\n\treturn t < .5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n};\n\nvar easeInExpo = function easeInExpo(t) {\n\tif (t === 0) {\n\t\treturn 0;\n\t}\n\treturn Math.pow(2, 10 * (t - 1));\n};\n\nvar easeOutExpo = function easeOutExpo(t) {\n\tif (t === 1) {\n\t\treturn 1;\n\t}\n\treturn -Math.pow(2, -10 * t) + 1;\n};\n\nvar easeInOutExpo = function easeInOutExpo(t) {\n\n\tif (t === 0 || t === 1) {\n\t\treturn t;\n\t}\n\n\tvar scaledTime = t * 2;\n\tvar scaledTime1 = scaledTime - 1;\n\n\tif (scaledTime < 1) {\n\t\treturn 0.5 * Math.pow(2, 10 * scaledTime1);\n\t}\n\n\treturn 0.5 * (-Math.pow(2, -10 * scaledTime1) + 2);\n};\n\nvar easeInCirc = function easeInCirc(t) {\n\tvar scaledTime = t / 1;\n\treturn -1 * (Math.sqrt(1 - scaledTime * t) - 1);\n};\n\nvar easeOutCirc = function easeOutCirc(t) {\n\tvar t1 = t - 1;\n\treturn Math.sqrt(1 - t1 * t1);\n};\n\nvar easeInOutCirc = function easeInOutCirc(t) {\n\n\tvar scaledTime = t * 2;\n\tvar scaledTime1 = scaledTime - 2;\n\n\tif (scaledTime < 1) {\n\t\treturn -0.5 * (Math.sqrt(1 - scaledTime * scaledTime) - 1);\n\t}\n\n\treturn 0.5 * (Math.sqrt(1 - scaledTime1 * scaledTime1) + 1);\n};\n\nvar easeInBack = function easeInBack(t) {\n\tvar magnitude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.70158;\n\n\tvar scaledTime = t / 1;\n\treturn scaledTime * scaledTime * ((magnitude + 1) * scaledTime - magnitude);\n};\n\nvar easeOutBack = function easeOutBack(t) {\n\tvar magnitude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.70158;\n\n\tvar scaledTime = t / 1 - 1;\n\treturn scaledTime * scaledTime * ((magnitude + 1) * scaledTime + magnitude) + 1;\n};\n\nvar easeInOutBack = function easeInOutBack(t) {\n\tvar magnitude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.70158;\n\n\tvar scaledTime = t * 2;\n\tvar scaledTime2 = scaledTime - 2;\n\tvar s = magnitude * 1.525;\n\tif (scaledTime < 1) {\n\t\treturn 0.5 * scaledTime * scaledTime * ((s + 1) * scaledTime - s);\n\t}\n\n\treturn 0.5 * (scaledTime2 * scaledTime2 * ((s + 1) * scaledTime2 + s) + 2);\n};\n\nvar easeOutElastic = function easeOutElastic(t) {\n\tvar magnitude = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.7;\n\n\n\tvar p = 1 - magnitude;\n\tvar scaledTime = t * 2;\n\n\tif (t === 0 || t === 1) {\n\t\treturn t;\n\t}\n\n\tvar s = p / (2 * Math.PI) * Math.asin(1);\n\treturn Math.pow(2, -10 * scaledTime) * Math.sin((scaledTime - s) * (2 * Math.PI) / p) + 1;\n};\n\nvar easeOutBounce = function easeOutBounce(t) {\n\tvar scaledTime = t / 1;\n\tif (scaledTime < 1 / 2.75) {\n\t\treturn 7.5625 * scaledTime * scaledTime;\n\t} else if (scaledTime < 2 / 2.75) {\n\t\tvar scaledTime2 = scaledTime - 1.5 / 2.75;\n\t\treturn 7.5625 * scaledTime2 * scaledTime2 + 0.75;\n\t} else if (scaledTime < 2.5 / 2.75) {\n\t\tvar _scaledTime = scaledTime - 2.25 / 2.75;\n\t\treturn 7.5625 * _scaledTime * _scaledTime + 0.9375;\n\t} else {\n\t\tvar _scaledTime2 = scaledTime - 2.625 / 2.75;\n\t\treturn 7.5625 * _scaledTime2 * _scaledTime2 + 0.984375;\n\t}\n};\n\nvar EasingFunctions = {\n\t'ease-linear': easeLinear,\n\n\t'ease-in-sine': easeInSine,\n\t'ease-out-sine': easeOutSine,\n\t'ease-in-out-sine': easeInOutSine,\n\n\t'ease-in-cubic': easeInCubic,\n\t'ease-out-cubic': easeOutCubic,\n\t'ease-in-out-cubic': easeInOutCubic,\n\n\t'ease-in-circ': easeInCirc,\n\t'ease-out-circ': easeOutCirc,\n\t'ease-in-out-circ': easeInOutCirc,\n\n\t'ease-in-quad': easeInQuad,\n\t'ease-out-quad': easeOutQuad,\n\t'ease-in-out-quad': easeInOutQuad,\n\n\t'ease-in-quart': easeInQuart,\n\t'ease-out-quart': easeOutQuart,\n\t'ease-in-out-quart': easeInOutQuart,\n\n\t'ease-in-expo': easeInExpo,\n\t'ease-out-expo': easeOutExpo,\n\t'ease-in-out-expo': easeInOutExpo,\n\n\t'ease-in-back': easeInBack,\n\t'ease-out-back': easeOutBack,\n\t'ease-in-out-back': easeInOutBack,\n\n\t'ease-out-elastic': easeOutElastic,\n\t'ease-out-bounce': easeOutBounce\n};\n\naddExtensions(ExtensionType.EASING_FUNCTION, EasingFunctions);\n\n/**\n * animate a certain amount of time (between 0 and 1)\n * @param cb - update function\n * @param complete\n * @param duration - duration in milliseconds\n * @param ease - easing function\n * @param delay\n */\nvar animate = function animate(cb, complete) {\n var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;\n var ease = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : easeLinear;\n var delay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n return interpolate(function (t) {\n cb(ease(t));\n }, complete, duration, delay);\n};\n\n/**\n * interpolate between 0 and 1 over x amount of frames\n * @param update - update function\n * @param complete\n * @param duration - duration in milliseconds\n * @param delay - milliseconds to wait before starting\n */\nvar interpolate = function interpolate(update) {\n var complete = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;\n var delay = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n // no update function supplied -> exit\n if (!update) {\n return null;\n }\n\n // set start time\n var start = null;\n var t = void 0;\n var frame = null;\n\n // animation loop\n var tick = function tick(ts) {\n if (start === null) {\n start = ts;\n }\n\n t = ts - start - delay;\n\n if (t < duration) {\n update(t >= 0 ? t / duration : 0);\n frame = requestAnimationFrame(tick);\n return null;\n }\n\n update(1);\n\n if (complete) {\n complete();\n }\n };\n\n tick(now());\n\n // return cancel function\n return function () {\n cancelAnimationFrame(frame);\n };\n};\n\n/**\n * Translates movements values\n */\nvar translator = function translator() {\n var fps = 24;\n var interval = 1000 / fps;\n\n var frame = null;\n\n var state = {\n velocity: 0,\n origin: 0,\n position: 0,\n destination: 1\n };\n\n var cancel = function cancel() {\n cancelAnimationFrame(frame);\n };\n\n var translate = function translate(cb, from, to, update) {\n // cancel previous animations if are running\n cancel();\n\n // 'to' not supplied, so 'from' is destination\n if (to === null) {\n state.destination = from;\n } else {\n // both supplied, also reset velocity\n state.position = from;\n state.destination = to;\n state.velocity = 0;\n }\n\n // always set origin to current position\n state.origin = state.position;\n\n var last = null;\n var tick = function tick(ts) {\n // queue next tick\n frame = requestAnimationFrame(tick);\n\n // limit fps\n if (!last) {\n last = ts;\n }\n\n var delta = ts - last;\n\n if (delta <= interval) {\n // skip frame\n return;\n }\n\n // align next frame\n last = ts - delta % interval;\n\n update(state, cancel);\n\n cb(state.position);\n };\n\n tick(now());\n };\n\n return {\n getPosition: function getPosition() {\n return state.position;\n },\n cancel: cancel,\n translate: translate\n };\n};\n\n/**\n * Translator builder\n * @param type\n * @param options\n * @returns {*}\n */\nvar createTranslator = function createTranslator(type) {\n for (var _len = arguments.length, options = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n options[_key - 1] = arguments[_key];\n }\n\n var t = translator();\n var updater = {\n update: null,\n cancel: t.cancel,\n getPosition: t.getPosition\n };\n\n if (type === 'arrive') {\n updater.update = arrive.apply(undefined, [t.translate].concat(options));\n } else if (type === 'spring') {\n updater.update = spring.apply(undefined, [t.translate].concat(options));\n } else if (type === 'step') {\n updater.update = step.apply(undefined, [t.translate].concat(options));\n }\n\n return updater;\n};\n\n/**\n * Arrive at destination\n * @param update\n * @param maxVelocity\n * @param friction\n */\nvar arrive = function arrive(update) {\n var maxVelocity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var friction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.01;\n\n return function (cb) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n update(cb, from, to, function (state, cancel) {\n // distance to target\n var distance = state.destination - state.position;\n var halfway = state.origin + (state.destination - state.origin) * 0.5;\n\n // update velocity based on distance\n state.velocity += (-(halfway - state.origin) + distance) * 2 * friction;\n\n // update position by adding velocity\n state.position += state.velocity < 0 ? Math.max(state.velocity, -maxVelocity) : Math.min(state.velocity, maxVelocity);\n\n // we've arrived if we're near target and our velocity is near zero\n if (state.origin < state.destination && state.position >= state.destination || state.origin >= state.destination && state.position <= state.destination) {\n cancel();\n state.velocity = 0;\n state.position = state.destination;\n }\n });\n };\n};\n\nvar step = function step(update) {\n var velocity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.01;\n\n return function (cb) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n update(cb, from, to, function (state, cancel) {\n // update velocity based on distance\n state.velocity = velocity;\n\n // update position by adding velocity\n state.position += state.velocity;\n\n // we've arrived if we're near target and our velocity is near zero\n if (state.origin < state.destination && state.position >= state.destination || state.origin >= state.destination && state.position <= state.destination) {\n cancel();\n state.velocity = 0;\n state.position = state.destination;\n }\n });\n };\n};\n\n/**\n * Animate movement based no spring physics\n * @param update\n * @param stiffness - the higher the more intense the vibration\n * @param damping - a factor that slows down the calculated velocity by a percentage, needs to be less than 1\n * @param mass - the higher the slower the spring springs in action\n * @returns {function(*=, *=)}\n */\nvar spring = function spring(update) {\n var stiffness = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.5;\n var damping = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.75;\n var mass = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;\n\n return function (cb) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n update(cb, from, to, function (state, cancel) {\n // calculate spring force\n var f = -(state.position - state.destination) * stiffness;\n\n // update velocity by adding force based on mass\n state.velocity += f / mass;\n\n // update position by adding velocity\n state.position += state.velocity;\n\n // slow down based on amount of damping\n state.velocity *= damping;\n\n // we've arrived if we're near target and our velocity is near zero\n if (thereYet(state.position, state.destination, state.velocity)) {\n cancel();\n state.position = state.destination;\n state.velocity = 0;\n }\n });\n };\n};\n\nvar thereYet = function thereYet(position, destination, velocity) {\n var errorMargin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.001;\n\n return Math.abs(position - destination) < errorMargin && Math.abs(velocity) < errorMargin;\n};\n\n/**\n * Returns a function that applies the transitions to the given element\n * @param transitions\n * @returns {function(*)}\n */\nvar createTransitioner = function createTransitioner(transitions) {\n\n\tvar transitioners = transitions.map(function (t) {\n\t\treturn createDurationTransitioner(createTransition(t.name, t.parameters, t.ease), t.origin, t.duration, t.delay);\n\t});\n\n\treturn function (element, direction, complete) {\n\n\t\t// don't run animations when no element is supplied\n\t\tif (!isHTMLElement(element)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar count = transitioners.length;\n\t\ttransitioners.forEach(function (transitioner) {\n\t\t\ttransitioner(element, direction, function () {\n\t\t\t\tcount--;\n\t\t\t\tif (!count && complete) {\n\t\t\t\t\tcomplete(element);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n};\n\nvar createTransition = function createTransition(name, parameters, ease) {\n\tvar easing = ease ? getExtension(ExtensionType.EASING_FUNCTION, ease) : ease;\n\tvar transition = getExtension(ExtensionType.TRANSITION, name);\n\treturn function (element, direction, p) {\n\t\ttransition.apply(undefined, [element, p, direction, easing].concat(toConsumableArray(parameters)));\n\t};\n};\n\nvar createDurationTransitioner = function createDurationTransitioner(transition) {\n\tvar origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '50% 50% 0';\n\tvar duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;\n\tvar delay = arguments[3];\n\n\n\treturn function (element) {\n\t\tvar direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\t\tvar complete = arguments[2];\n\n\n\t\t// set transform origin\n\t\tsetTransformOrigin(element, origin);\n\n\t\t// run animation\n\t\tinterpolate(function (p) {\n\t\t\ttransition(element, direction, p);\n\t\t}, complete, duration, delay);\n\t};\n};\n\nvar getComposedTransitionActs = function getComposedTransitionActs(transition) {\n\treturn getExtension(ExtensionType.TRANSITION, transition.name).apply(undefined, toConsumableArray(transition.parameters || []));\n};\n\n/**\n * Styler\n * @param state\n * @param base\n */\nvar styler = (function (state) {\n\tvar base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\t// styles that were last applied to the element\n\tstate.lastAppliedStyles = null;\n\n\t// set default style\n\tupdateStyles(state, base, state.root.dataset.style);\n\n\t// setup observer, will observe style attribute so can restyle when changed\n\tstate.styleObserver = observeAttributes(state.root, ['data-style'], function (string) {\n\t\tupdateStyles(state, base, string);\n\t});\n\n\t// adds style setter\n\treturn {\n\t\tsetStyle: function setStyle(css) {\n\t\t\tupdateStyles(state, base, css);\n\t\t}\n\t};\n});\n\nvar updateStyles = function updateStyles(state, base, css) {\n\n\t// don't update if is same\n\tif (state.lastAppliedStyles === css) {\n\t\treturn;\n\t}\n\n\t// remember these styles\n\tstate.lastAppliedStyles = css;\n\n\tstate.style = css ? mergeObjects(base, toStyles(css)) : base;\n\n\tvar intro = [];\n\tvar outro = [];\n\n\tif (state.style.transitionIn && state.style.transitionIn.length) {\n\t\tintro = state.style.transitionIn;\n\t\toutro = state.style.transitionOut;\n\t} else if (state.style.transition && state.style.transition !== 'none') {\n\n\t\tstate.style.transition.forEach(function (transition) {\n\t\t\tvar acts = getComposedTransitionActs(transition);\n\t\t\tintro = intro.concat(acts.intro);\n\t\t\toutro = outro.concat(acts.outro);\n\t\t});\n\t}\n\n\tif (intro && outro) {\n\t\tstate.transitionIn = createTransitioner(intro);\n\t\tstate.transitionOut = createTransitioner(outro);\n\n\t\tstate.skipToTransitionInEnd = createTransitioner(intro.map(clearTiming));\n\t\tstate.skipToTransitionOutEnd = createTransitioner(outro.map(clearTiming));\n\t}\n\n\tstate.dirty = true;\n};\n\nvar clearTiming = function clearTiming(t) {\n\tvar tn = clone(t);\n\ttn.duration = 0;\n\ttn.delay = 0;\n\treturn tn;\n};\n\nvar getBackingStoreRatio = function getBackingStoreRatio(ctx) {\n\treturn ctx[VENDOR_PREFIX + 'BackingStorePixelRatio'] || ctx.backingStorePixelRatio || 1;\n};\n\nvar getDevicePixelRatio = function getDevicePixelRatio() {\n\treturn window.devicePixelRatio || 1;\n};\n\nvar clearCanvas = function clearCanvas(canvas) {\n\tvar ctx = canvas.getContext('2d');\n\tctx.clearRect(0, 0, canvas.width, canvas.height);\n};\n\n/**\n * View Composers\n */\n/**\n * API Utilities\n */\n/**\n * Add default text view\n */\nvar Views = {\n\t'text': function text$$1() {\n\t\treturn function (root) {\n\n\t\t\tvar state = {};\n\n\t\t\tvar draw = function draw(state) {\n\t\t\t\tstate.root.setAttribute('data-value', state.value);\n\t\t\t\ttext(state.root, state.value);\n\t\t\t};\n\n\t\t\treturn Object.assign({}, rooter(state, root, 'text'), updater(state), drawer(state, draw), destroyer(state));\n\t\t};\n\t}\n\n};\n\naddExtensions(ExtensionType.VIEW, Views);\n\n/**\n * Internal API for use by views\n */\nvar API$2 = function API() {\n\treturn {\n\t\tExtension: {\n\t\t\tType: ExtensionType,\n\t\t\tgetExtension: getExtension\n\t\t},\n\t\tUtils: {\n\t\t\ttoPixels: toPixels,\n\t\t\ttoColor: toColor\n\t\t},\n\t\tCanvas: {\n\t\t\tclear: clearCanvas,\n\t\t\tgetDevicePixelRatio: getDevicePixelRatio,\n\t\t\tgetBackingStoreRatio: getBackingStoreRatio\n\t\t},\n\t\tDOM: {\n\t\t\tvisible: isVisible,\n\t\t\tcreate: create$1,\n\t\t\ttransform: setTransform\n\t\t},\n\t\tAnimation: {\n\t\t\tanimate: animate\n\t\t},\n\t\tData: {\n\t\t\trequest: request\n\t\t},\n\t\tDate: {\n\t\t\tperformance: now\n\t\t},\n\t\tView: {\n\t\t\trooter: rooter,\n\t\t\tdrawer: drawer,\n\t\t\tupdater: updater,\n\t\t\tstyler: styler,\n\t\t\tgrouper: grouper,\n\t\t\tresizer: resizer,\n\t\t\tdestroyer: destroyer\n\t\t}\n\t};\n};\n\n/**\n * Base view definitions\n */\nvar createPresenterRoot = function createPresenterRoot(root, definition, presentDefinition) {\n\treturn createRoot(root, definition, presentDefinition);\n};\n\nvar createPresenterRepeater = function createPresenterRepeater(root, definition, presentDefinition) {\n\treturn createRepeater(root, definition, presentDefinition);\n};\n\nvar createPresenterView = function createPresenterView(name, root, style) {\n\tvar view = getExtension(ExtensionType.VIEW, name);\n\treturn view ? view(API$2())(root, style) : null;\n};\n\nvar arrow = function arrow(str, i) {\n\treturn str[i] === '-' && str[i + 1] === '>';\n};\n\nvar string = function string(c) {\n\treturn c === \"'\" || c === '\"';\n};\n\nvar comma = function comma(c) {\n\treturn c === ',';\n};\n\nvar opener = function opener(c) {\n\treturn c === '(';\n};\n\nvar closer = function closer(c) {\n\treturn c === ')';\n};\n\nvar value = function value(v) {\n\treturn v.trim().length !== 0;\n};\n\nvar add = function add(r, v) {\n\treturn r.push(v.trim());\n};\n\nvar token = function token(r, v) {\n\tif (value(v)) {\n\t\tadd(r, v);\n\t\treturn '';\n\t}\n\treturn v;\n};\n\nvar chain = function chain(_chain, output) {\n\tif (_chain.length) {\n\t\toutput.push(_chain.length > 1 ? _chain.concat() : _chain[0]);\n\t}\n\treturn [];\n};\n\nvar parse$1 = function parse(i, str, result) {\n\n\tvar v = '';\n\tvar fns = [];\n\tvar quote = null;\n\tvar hitArrow = false;\n\n\twhile (i < str.length) {\n\n\t\t// character reference\n\t\tvar c = str[i];\n\n\t\t// enter level\n\t\tif (opener(c)) {\n\n\t\t\thitArrow = false;\n\t\t\tvar fn = [v.trim()];\n\n\t\t\ti = parse(i + 1, str, fn);\n\t\t\tc = str[i];\n\n\t\t\tfns.push(fn);\n\t\t\tv = '';\n\t\t}\n\n\t\t// exit level\n\t\telse if (closer(c)) {\n\n\t\t\t\tif (hitArrow && v.trim().length) {\n\t\t\t\t\tfns.push([v.trim()]);\n\t\t\t\t\tv = '';\n\t\t\t\t\thitArrow = false;\n\t\t\t\t}\n\n\t\t\t\tif (value(v)) {\n\t\t\t\t\tadd(fns, v);\n\t\t\t\t}\n\n\t\t\t\tfns = chain(fns, result);\n\n\t\t\t\treturn i + 1;\n\t\t\t}\n\n\t\t\t// function names or arguments\n\t\t\telse {\n\n\t\t\t\t\t// we're in a string\n\t\t\t\t\t// as long as the exit has not been found add to value\n\t\t\t\t\tif (quote !== null && c !== quote) {\n\n\t\t\t\t\t\t// accept any value\n\t\t\t\t\t\tv += c;\n\t\t\t\t\t}\n\t\t\t\t\t// we've found the string exit\n\t\t\t\t\telse if (c === quote) {\n\n\t\t\t\t\t\t\tfns.push(v);\n\t\t\t\t\t\t\tv = '';\n\n\t\t\t\t\t\t\tquote = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// we're not in a string and we found a string opener\n\t\t\t\t\t\telse if (string(c)) {\n\t\t\t\t\t\t\t\tv = '';\n\t\t\t\t\t\t\t\tquote = c;\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// we're not in a string\n\n\t\t\t\t\t\t\t\t// we've found an arrow\n\t\t\t\t\t\t\t\tif (arrow(str, i)) {\n\n\t\t\t\t\t\t\t\t\thitArrow = true;\n\n\t\t\t\t\t\t\t\t\t// we might have finished a function without parenthesis\n\t\t\t\t\t\t\t\t\tif (v.trim().length) {\n\t\t\t\t\t\t\t\t\t\tfns.push([v.trim()]);\n\t\t\t\t\t\t\t\t\t\tv = '';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// skip two additional characters because arrow is of length 2\n\t\t\t\t\t\t\t\t\ti += 2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// we've reached an argument separator\n\t\t\t\t\t\t\t\telse if (comma(c)) {\n\n\t\t\t\t\t\t\t\t\t\tif (hitArrow && v.trim().length) {\n\t\t\t\t\t\t\t\t\t\t\tfns.push([v.trim()]);\n\t\t\t\t\t\t\t\t\t\t\tv = '';\n\t\t\t\t\t\t\t\t\t\t\thitArrow = false;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tfns = chain(fns, result);\n\n\t\t\t\t\t\t\t\t\t\t// add possible previous token\n\t\t\t\t\t\t\t\t\t\tv = token(result, v);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tv += c;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t// next character\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t}\n\n\tif (hitArrow && v.trim().length || !hitArrow && v.trim().length && !fns.length) {\n\t\tfns.push([v.trim()]);\n\t\tv = '';\n\t}\n\n\tchain(fns, result);\n\n\t// add final token\n\ttoken(result, v);\n\n\treturn i;\n};\n\nvar parseTransformChain = function parseTransformChain(string) {\n\tvar result = [];\n\tparse$1(0, string, result);\n\treturn result;\n};\n\nvar isRootDefinition = function isRootDefinition(definition) {\n\treturn definition.children && definition.children.length;\n};\n\nvar cloneDefinition = function cloneDefinition(definition) {\n\n\tvar clone = {};\n\n\tfor (var key in definition) {\n\n\t\tif (!definition.hasOwnProperty(key)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'root') {\n\t\t\tclone[key] = definition[key].cloneNode();\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'children') {\n\t\t\tclone[key] = definition[key] === null ? null : definition[key].map(cloneDefinition);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'repeat') {\n\t\t\tclone[key] = definition[key] === null ? null : cloneDefinition(definition[key]);\n\t\t\tcontinue;\n\t\t}\n\n\t\tclone[key] = definition[key];\n\t}\n\n\tclone.presenter = null;\n\n\treturn clone;\n};\n\n/**\n * Parsing DOM to DefinitionTree\n * @param nodes\n */\nvar definitionOutline = {\n\troot: null,\n\tkey: null,\n\tview: null,\n\toverlay: null,\n\tpresenter: null,\n\ttransform: null,\n\tlayout: null,\n\tstyle: null,\n\trepeat: null,\n\tchildren: null,\n\tclassName: null\n};\n\nvar toPresenterDefinitionTree = function toPresenterDefinitionTree(nodes) {\n\treturn Array.from(nodes)\n\t// fix to allow nesting of tick counters\n\t// .filter(node => !node.classList.contains('tick'))\n\t.map(function (node) {\n\n\t\tvar definition = mergeObjects(definitionOutline, { root: node });\n\n\t\t// get all properties above from attributes\n\t\tfor (var key in node.dataset) {\n\t\t\tif (!node.dataset.hasOwnProperty(key)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (typeof definition[key] === 'undefined') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdefinition[key] = node.dataset[key];\n\t\t}\n\n\t\t// if is repeater set do not parse children as children but define as repeat\n\t\tif (definition.repeat) {\n\n\t\t\t// can only have one repeated child\n\t\t\tdefinition.repeat = toPresenterDefinitionTree(node.children).pop();\n\n\t\t\t// detach repeated elements from DOM\n\t\t\tArray.from(node.children).forEach(function (node) {\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t});\n\t\t}\n\t\t// children are normal children\n\t\telse if (node.children.length) {\n\t\t\t\tdefinition.children = toPresenterDefinitionTree(node.children);\n\t\t\t}\n\n\t\treturn definition;\n\t});\n};\n\nvar createDOMTreeForDefinition = function createDOMTreeForDefinition(definition) {\n\n\treturn definition.map(function (def) {\n\n\t\tdef = mergeObjects(definitionOutline, def);\n\n\t\tif (typeof def.root === 'string') {\n\t\t\tdef.root = document.createElement(def.root);\n\t\t} else {\n\t\t\tdef.root = document.createElement('span');\n\t\t}\n\n\t\tif (def.transform) {\n\t\t\tdef.root.dataset.transform = def.transform;\n\t\t}\n\n\t\tif (def.className) {\n\t\t\tdef.root.className = def.className;\n\t\t}\n\n\t\tif (def.overlay) {\n\t\t\tdef.root.dataset.overlay = def.overlay;\n\t\t}\n\n\t\tif (def.view) {\n\t\t\tdef.root.dataset.view = def.view;\n\t\t\tif (def.style) {\n\t\t\t\tdef.root.dataset.style = def.style;\n\t\t\t}\n\t\t\tdef.repeat = null;\n\t\t} else {\n\n\t\t\tif (def.layout) {\n\t\t\t\tdef.root.dataset.layout = def.layout;\n\t\t\t}\n\n\t\t\tif (def.repeat) {\n\t\t\t\tdef.root.dataset.repeat = true;\n\t\t\t\tdef.repeat = createDOMTreeForDefinition(def.children).pop();\n\t\t\t} else if (def.children) {\n\t\t\t\tdef.children = createDOMTreeForDefinition(def.children);\n\t\t\t\tdef.children.forEach(function (child) {\n\t\t\t\t\tdef.root.appendChild(child.root);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn def;\n\t});\n};\n\n/**\n * Presenting values\n */\nvar createPresenterByDefinition = function createPresenterByDefinition(definition, presentDefinition) {\n\n\tvar presenter = void 0;\n\n\tif (definition.repeat) {\n\t\tpresenter = createPresenterRepeater(definition.root, definition.repeat, presentDefinition);\n\t} else if (typeof definition.view === 'string') {\n\t\tpresenter = createPresenterView(definition.view, definition.root, definition.style);\n\t} else if (isRootDefinition(definition)) {\n\t\tpresenter = createPresenterRoot(definition.root, definition.children, presentDefinition);\n\t}\n\n\treturn presenter;\n};\n\nvar presentTick = function presentTick(instance) {\n\n\tvar isDrawing = false;\n\n\tvar update = function update(definition, value) {\n\n\t\tdefinition.transform(value, function (output) {\n\t\t\tdefinition.presenter.update(output);\n\t\t}, instance);\n\n\t\tif (!isDrawing) {\n\t\t\tisDrawing = true;\n\t\t\tdraw();\n\t\t}\n\t};\n\n\tvar draw = function draw() {\n\t\tinstance.baseDefinition.presenter.draw();\n\t\trequestAnimationFrame(draw);\n\t};\n\n\tvar presentDefinition = function presentDefinition(definition) {\n\t\tdefinition.presenter = createPresenterByDefinition(definition, presentDefinition);\n\t\tdefinition.transform = toTransformComposition(definition.transform, instance);\n\t\treturn update;\n\t};\n\n\treturn presentDefinition(instance.baseDefinition);\n};\n\n/**\n * Transform\n */\nvar composeAsync = function composeAsync(instance) {\n\tfor (var _len = arguments.length, funcs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\tfuncs[_key - 1] = arguments[_key];\n\t}\n\n\treturn function (initialValue, callback) {\n\n\t\tfunction compose(i, value) {\n\n\t\t\t// return end result\n\t\t\tif (funcs.length <= i) {\n\t\t\t\tcallback(value);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfuncs[i](value, partial(compose, [i + 1]), instance);\n\t\t}\n\n\t\tcompose(0, initialValue);\n\t};\n};\n\nvar partial = function partial(fn) {\n\tvar initialArgs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\tvar ctx = arguments[2];\n\n\treturn function () {\n\t\tvar args = Array.from(initialArgs);\n\t\tArray.prototype.push.apply(args, arguments);\n\t\treturn fn.apply(ctx, args);\n\t};\n};\n\nvar toTransformComposition = function toTransformComposition(string, instance) {\n\n\t// no composition\n\tif (!string) {\n\t\treturn function (value, cb) {\n\t\t\treturn cb(value);\n\t\t};\n\t}\n\n\t// already function no need to compose\n\tif (typeof string === 'function') {\n\t\treturn string;\n\t}\n\n\t// wrap in default transform\n\t// if is single transform force parenthesis as it must be a fn\n\tvar result = parseTransformChain('transform(' + (/^[a-z]+$/.test(string) ? string + '()' : string) + ')');\n\treturn compose(result, instance);\n};\n\nvar compose = function compose(chain, instance) {\n\n\tvar composition = chain.map(function (item) {\n\n\t\t// get name\n\t\tvar name = item.shift();\n\n\t\t// get related function\n\t\tvar func = getExtension(ExtensionType.TRANSFORM, name) || function (value, cb, instance) {\n\t\t\tcb(value);\n\t\t};\n\n\t\t// other items in array are parameters\n\t\tvar params = item.map(function (parameter) {\n\n\t\t\t// if is array turn into function\n\t\t\tif (Array.isArray(parameter)) {\n\n\t\t\t\t// normal transform\n\t\t\t\tif (typeof parameter[0] === 'string') {\n\t\t\t\t\treturn compose([parameter], instance);\n\t\t\t\t}\n\n\t\t\t\t// chain of transforms\n\t\t\t\treturn compose(parameter, instance);\n\t\t\t}\n\n\t\t\treturn toParameter(parameter);\n\t\t});\n\n\t\treturn func.apply(undefined, toConsumableArray(params));\n\t});\n\n\treturn composeAsync.apply(undefined, [instance].concat(toConsumableArray(composition)));\n};\n\nvar toFunctionOutline = function toFunctionOutline(string) {\n\tvar name = string.match(/[a-z]+/)[0];\n\tvar parameters = toParameters(string.substring(name.length));\n\treturn {\n\t\tname: name,\n\t\tparameters: parameters\n\t};\n};\n\nvar toParameters = function toParameters(string) {\n\treturn (string.match(/('.+?')|(\".+?\")|(\\[.+?])|([.:\\-\\d\\sa-zA-Z]+%?)/g) || []).map(trim).filter(function (str) {\n\t\treturn str.length;\n\t}).map(toParameter);\n};\n\nvar trimEdges = function trimEdges(string) {\n\treturn string.substring(1, string.length - 1);\n};\n\nvar isProbablyISODate = /^([\\d]{4}-[\\d]{1,2}-[\\d]{1,2})/;\nvar isBoolean = /^(true|false)$/;\nvar isString = /^[\\a-zA-Z]+$/;\nvar isZeroString = /^0[\\d]+/;\nvar isQuotedString = /^('|\")/;\nvar isNumber = /^-?(?:\\d+)?(?:\\.|0\\.)?[\\d]+$/;\nvar isArray = /^(\\[)/;\n\nvar toParameter = function toParameter(string) {\n\n\tif (isBoolean.test(string)) {\n\t\treturn string === 'true';\n\t}\n\n\tif (isArray.test(string)) {\n\t\treturn toParameters(trimEdges(string));\n\t}\n\n\tif (isProbablyISODate.test(string)) {\n\t\treturn dateFromISO(string);\n\t}\n\n\tif (isQuotedString.test(string)) {\n\t\treturn trimEdges(string);\n\t}\n\n\tif (isString.test(string) || isZeroString.test(string)) {\n\t\treturn string;\n\t}\n\n\tif (isNumber.test(string)) {\n\t\treturn parseFloat(string);\n\t}\n\n\t// is CSS unit (parsing will be handled by function that receives this value)\n\treturn string;\n};\n\nvar toCSSValue = function toCSSValue(value) {\n\tvar parts = (value + '').match(/(-?[.\\d]+)(%|ms|s|deg|cm|em|ch|ex|q|in|mm|pc|pt|px|vh|vw|vmin|vmax)?/);\n\treturn {\n\t\tvalue: parseFloat(parts[1]),\n\t\tunits: parts[2]\n\t};\n};\n\n/**\n * @param a { object }\n * @param b { object }\n */\nvar mergeObjects = function mergeObjects(a) {\n\tvar b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\tvar key = void 0;\n\tvar obj = {};\n\n\tfor (key in a) {\n\t\tif (!a.hasOwnProperty(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tobj[key] = typeof b[key] === 'undefined' ? a[key] : b[key];\n\t}\n\n\treturn obj;\n};\n\n/**\n * @param string { string }\n */\nvar toFunctionReference = function toFunctionReference(string) {\n\tvar ref = window;\n\tvar levels = string.split('.');\n\tlevels.forEach(function (level, index) {\n\t\tif (!ref[levels[index]]) {\n\t\t\treturn;\n\t\t}\n\t\tref = ref[levels[index]];\n\t});\n\treturn ref !== window ? ref : null;\n};\n\n/**\n *\n */\nvar toValue = function toValue(string) {\n\n\t// capture for object string\n\tif (/^(?:[\\w]+\\s?:\\s?[\\w.]+,\\s?)+(?:[\\w]+\\s?:\\s?[\\w.]+)$/g.test(string)) {\n\t\treturn string.match(/(?:(\\w+)\\s?:\\s?([\\w.]+))/g).reduce(function (obj, current) {\n\t\t\tvar parts = current.split(':');\n\t\t\tobj[parts[0]] = toParameter(parts[1]);\n\t\t\treturn obj;\n\t\t}, {});\n\t}\n\n\t// handle the other options\n\treturn toParameter(string);\n};\n\n/**\n * @param value { * }\n */\n\n\n/**\n * @param value { * }\n */\nvar toInt = function toInt(value) {\n\treturn parseInt(value, 10);\n};\n\n/**\n * @param string { string }\n */\nvar trim = function trim(string) {\n\treturn string.trim();\n};\n\n/**\n * @param string { string }\nexport const lowercaseFirstLetter = (string) => string.charAt(0).toLowerCase() + string.slice(1);\n */\n\n/**\n * @param string { string }\n */\nvar capitalizeFirstLetter = function capitalizeFirstLetter(string) {\n\treturn string.charAt(0).toUpperCase() + string.slice(1);\n};\n\n/**\n * @param string { string }\n */\nvar dashesToCamels = function dashesToCamels(string) {\n\treturn string.replace(/-./g, function (sub) {\n\t\treturn sub.charAt(1).toUpperCase();\n\t});\n};\n\n/**\n * @param string\nexport const camelsToDashes = string => string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n */\n\n/**\n * @param obj { object }\n */\nvar clone = function clone(obj) {\n\tif ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj !== null) {\n\t\treturn JSON.parse(JSON.stringify(obj));\n\t}\n\treturn obj;\n};\n\nvar copyArray = function copyArray(arr) {\n\treturn arr.slice();\n};\n\nvar random = function random() {\n\tvar min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\tvar max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n\treturn min + Math.random() * (max - min);\n};\n\nvar range = function range(n) {\n\tvar arr = [];\n\tvar i = 0;\n\tfor (; i < n; i++) {\n\t\tarr.push(i);\n\t}\n\treturn arr;\n};\n\nvar shuffle = function shuffle(a) {\n\tfor (var i = a.length; i; i--) {\n\t\tvar j = Math.floor(Math.random() * i);\n\t\tvar _ref = [a[j], a[i - 1]];\n\t\ta[i - 1] = _ref[0];\n\t\ta[j] = _ref[1];\n\t}\n};\n\n\n\nvar now = function now() {\n\treturn window.performance.now();\n};\n\nvar request = function request(url, success, error, options) {\n\tvar xhr = new XMLHttpRequest();\n\tif (options) {\n\t\toptions(xhr);\n\t}\n\txhr.open('GET', url, true);\n\txhr.onload = function () {\n\t\tsuccess(xhr.response);\n\t};\n\tif (error) {\n\t\txhr.onerror = function () {\n\t\t\terror(xhr, xhr.status);\n\t\t};\n\t}\n\txhr.send();\n};\n\nvar equal = function equal(a, b) {\n\tif (isObject(a)) {\n\t\treturn equalObjects(a, b);\n\t}\n\tif (Array.isArray(a)) {\n\t\treturn equalArrays(a, b);\n\t}\n\treturn a === b;\n};\n\nvar isObject = function isObject(obj) {\n\treturn obj === Object(obj);\n};\n\nvar equalObjects = function equalObjects(a, b) {\n\tfor (var i in a) {\n\t\tif (!b.hasOwnProperty(i) || a[i] !== b[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\nvar equalArrays = function equalArrays(a, b) {\n\treturn a.length == b.length && a.every(function (v, i) {\n\t\treturn v === b[i];\n\t});\n};\n\nvar keysToList = function keysToList(obj) {\n\treturn Object.keys(obj).map(function (k) {\n\t\treturn '\"' + k + '\"';\n\t}).join(', ');\n};\n\n/**\n * Tick\n */\n\nvar Tick = function () {\n function Tick() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.createElement('div');\n classCallCheck(this, Tick);\n\n // set base configuration options\n this._options = mergeObjects(Tick.options(), options);\n\n // instance properties\n this._element = element;\n this._value = null;\n this._observer = null;\n this._viewDefinition = null;\n this._constants = null;\n this._presets = null;\n this._updater = null;\n this._credits = null;\n\n // callback methods\n this._didInit = null;\n this._didDestroy = null;\n this._willDestroy = null;\n this._didUpdate = null;\n\n // initialise Tick\n this._init();\n }\n\n /**\n * Default options for this control\n */\n\n\n createClass(Tick, [{\n key: 'isRootElement',\n\n\n /**\n * Public API\n */\n value: function isRootElement(element) {\n return this._element === element;\n }\n }, {\n key: 'setConstant',\n value: function setConstant$$1(key, value) {\n this._constants[key] = value;\n }\n }, {\n key: 'getConstants',\n value: function getConstants$$1() {\n return this._constants;\n }\n }, {\n key: 'getConstant',\n value: function getConstant(key) {\n return this._constants[key];\n }\n }, {\n key: 'setPreset',\n value: function setPreset$$1(key, fn) {\n this._presets[key] = fn;\n }\n }, {\n key: 'getPreset',\n value: function getPreset(key) {\n return this._presets[key];\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n this._willDestroy(this);\n\n // clean up\n this._observer.disconnect();\n\n // destroy presenters\n this.baseDefinition.presenter.destroy();\n\n this._didDestroy(this);\n }\n }, {\n key: 'redraw',\n value: function redraw() {\n if (!this.baseDefinition || !this.baseDefinition.presenter) return;\n this.baseDefinition.presenter.reset();\n this.baseDefinition.presenter.draw();\n this._updater(this.baseDefinition, this._value);\n }\n\n /**\n * Private Methods\n */\n\n }, {\n key: '_init',\n value: function _init() {\n var _this = this;\n\n // move options to properties\n this._viewDefinition = this._options.view;\n this._willDestroy = this._options.willDestroy;\n this._didDestroy = this._options.didDestroy;\n this._didInit = this._options.didInit;\n this._didUpdate = this._options.didUpdate;\n this._value = this._options.value;\n this._presets = this._options.presets;\n this._constants = this._options.constants;\n this._credits = this._options.credits;\n\n // no more use of options behind this line\n // ---------------------------------------\n\n // always add class tick to element (make sure it's only added once)\n if (!this._element.classList.contains('tick')) {\n this._element.classList.add('tick');\n }\n\n // use mutation observer to detect changes to value attribute\n this._observer = observeAttributes(this._element, ['data-value'], function (value) {\n _this.value = value;\n });\n\n // force default view root, move children of current root to this element\n if (this._viewDefinition.root !== this._element) {\n Array.from(this._viewDefinition.root.children).forEach(function (node) {\n _this._element.appendChild(node);\n });\n this._viewDefinition.root = this._element;\n }\n\n // no default view presenter defined, fallback to text\n if (!this._viewDefinition.view && !this._viewDefinition.children) {\n this._viewDefinition.view = 'text';\n }\n\n // setup root presenter\n this._updater = presentTick(this);\n\n // update for first time\n if (this.value !== null) {\n this._update(this.value);\n }\n\n // set to ready state\n this._element.dataset.state = 'initialised';\n\n // done with init\n this._didInit(this, this.value);\n\n // credits\n if (this._credits) {\n var credits = document.createElement('a');\n credits.className = 'tick-credits';\n credits.href = this._credits.url;\n credits.tabindex = -1;\n credits.target = '_blank';\n credits.rel = 'noopener noreferrer';\n credits.textContent = this._credits.label;\n this._element.appendChild(credits);\n }\n }\n }, {\n key: '_update',\n value: function _update(value) {\n this._updater(this.baseDefinition, value);\n\n this._didUpdate(this, value);\n }\n }, {\n key: 'baseDefinition',\n\n\n /**\n * Public Properties\n */\n get: function get$$1() {\n return this._viewDefinition;\n }\n }, {\n key: 'root',\n get: function get$$1() {\n return this._element;\n }\n }, {\n key: 'value',\n get: function get$$1() {\n return this._value;\n },\n set: function set$$1(value) {\n this._value = typeof value === 'string' ? toValue(value) : value;\n this._update(value);\n }\n }], [{\n key: 'options',\n value: function options() {\n return {\n constants: getConstants(),\n presets: getPresets(),\n value: null,\n view: null,\n didInit: function didInit(tick) {},\n didUpdate: function didUpdate(tick, value) {},\n willDestroy: function willDestroy(tick) {},\n didDestroy: function didDestroy(tick) {},\n credits: {\n label: 'Powered by PQINA',\n url: 'https://pqina.nl/?ref=credits'\n }\n };\n }\n }]);\n return Tick;\n}();\n\nvar transformDurationUnit = function transformDurationUnit(value, single, plural, progress) {\n\treturn {\n\t\tlabel: value === 1 ? single : plural,\n\t\tprogress: value / progress,\n\t\tvalue: value\n\t};\n};\n\n/**\n * Tick DOM interface\n */\nvar instances = [];\n\nvar setConstant = function setConstant(key, value) {\n\tconstants[key] = value;\n};\n\nvar setPreset = function setPreset(key, value) {\n\tpresets[key] = value;\n};\n\nvar getConstants = function getConstants() {\n\treturn constants;\n};\n\nvar getPresets = function getPresets() {\n\treturn presets;\n};\n\nvar constants = {\n\tYEAR_PLURAL: 'Years',\n\tYEAR_SINGULAR: 'Year',\n\tMONTH_PLURAL: 'Months',\n\tMONTH_SINGULAR: 'Month',\n\tWEEK_PLURAL: 'Weeks',\n\tWEEK_SINGULAR: 'Week',\n\tDAY_PLURAL: 'Days',\n\tDAY_SINGULAR: 'Day',\n\tHOUR_PLURAL: 'Hours',\n\tHOUR_SINGULAR: 'Hour',\n\tMINUTE_PLURAL: 'Minutes',\n\tMINUTE_SINGULAR: 'Minute',\n\tSECOND_PLURAL: 'Seconds',\n\tSECOND_SINGULAR: 'Second',\n\tMILLISECOND_PLURAL: 'Milliseconds',\n\tMILLISECOND_SINGULAR: 'Millisecond'\n};\n\nvar presets = {\n\ty: function y(value, constants) {\n\t\treturn transformDurationUnit(value, constants.YEAR_SINGULAR, constants.YEAR_PLURAL, 10);\n\t},\n\tM: function M(value, constants) {\n\t\treturn transformDurationUnit(value, constants.MONTH_SINGULAR, constants.MONTH_PLURAL, 12);\n\t},\n\tw: function w(value, constants) {\n\t\treturn transformDurationUnit(value, constants.WEEK_SINGULAR, constants.WEEK_PLURAL, 52);\n\t},\n\td: function d(value, constants) {\n\t\treturn transformDurationUnit(value, constants.DAY_SINGULAR, constants.DAY_PLURAL, 365);\n\t},\n\th: function h(value, constants) {\n\t\treturn transformDurationUnit(value, constants.HOUR_SINGULAR, constants.HOUR_PLURAL, 24);\n\t},\n\tm: function m(value, constants) {\n\t\treturn transformDurationUnit(value, constants.MINUTE_SINGULAR, constants.MINUTE_PLURAL, 60);\n\t},\n\ts: function s(value, constants) {\n\t\treturn transformDurationUnit(value, constants.SECOND_SINGULAR, constants.SECOND_PLURAL, 60);\n\t},\n\tmi: function mi(value, constants) {\n\t\treturn transformDurationUnit(value, constants.MILLISECOND_SINGULAR, constants.MILLISECOND_PLURAL, 1000);\n\t}\n};\n\nvar attributes = {\n\t'value': toValue,\n\t'didInit': toFunctionReference,\n\t'didUpdate': toFunctionReference,\n\t'didDestroy': toFunctionReference,\n\t'willDestroy': toFunctionReference\n};\n\nvar getOptionsFromAttributes = function getOptionsFromAttributes(element) {\n\tvar transfomers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\tvar defaults$$1 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n\n\tvar dataset = element.dataset;\n\n\tvar options = {\n\t\tmeta: {}\n\t};\n\n\tfor (var prop in dataset) {\n\n\t\tif (!dataset.hasOwnProperty(prop)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar valueTransformer = transfomers[prop];\n\t\tvar value = dataset[prop];\n\n\t\tif (valueTransformer) {\n\t\t\tvalue = valueTransformer(value);\n\t\t\tvalue = value === null ? clone(defaults$$1[prop]) : value;\n\t\t\toptions[prop] = value;\n\t\t}\n\t}\n\n\tif (dataset.credits === 'false') {\n\t\toptions.credits = false;\n\t}\n\n\treturn options;\n};\n\nvar indexOfElement = function indexOfElement(instances, element) {\n\tvar i = 0;\n\tvar l = instances.length;\n\tfor (; i < l; i++) {\n\t\tif (instances[i].isRootElement(element)) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\nvar parse = function parse(context) {\n\n\tvar elements = void 0;\n\tvar element = void 0;\n\tvar i = void 0;\n\tvar instances = [];\n\n\t// find all crop elements and bind Crop behavior\n\telements = context.querySelectorAll('.tick:not([data-state])');\n\ti = elements.length;\n\n\twhile (i--) {\n\t\telement = elements[i];\n\t\tinstances.push(create(element));\n\t}\n\n\treturn instances;\n};\n\nvar find = function find(element) {\n\tvar result = instances.filter(function (instance) {\n\t\treturn instance.isRootElement(element);\n\t});\n\treturn result ? result[0] : null;\n};\n\nvar getDefaultOptions = function getDefaultOptions() {\n\treturn _extends({}, Tick.options(), { constants: _extends({}, constants), presets: _extends({}, presets) });\n};\n\nvar create = function create() {\n\tvar element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\n\t// if first argument is options object correct parameter values\n\tif (element && !isHTMLElement(element)) {\n\t\toptions = element;\n\t\telement = undefined;\n\t}\n\n\t// if already in array, can't create another on this location in the DOM\n\tif (element && find(element)) {\n\t\treturn;\n\t}\n\n\t// if view defined\n\tif (options && options.view) {\n\t\toptions.view = createDOMTreeForDefinition([options.view])[0];\n\t}\n\n\t// if no options supplied, get the options from the element attributes\n\tif (!options && element) {\n\t\toptions = getOptionsFromAttributes(element, attributes, getDefaultOptions());\n\t}\n\n\t// if element supplied, view is either default view or defined by child elements\n\tif (element) {\n\n\t\t// no options defined, set blank options object\n\t\tif (!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\t// no default view defined\n\t\tif (!options.view) {\n\t\t\toptions.view = toPresenterDefinitionTree([element])[0];\n\t\t}\n\t}\n\n\t// instance (pass element to set root)\n\tvar instance = new Tick(options, element);\n\n\t// add new instance\n\tinstances.push(instance);\n\n\t// return the instance\n\treturn instance;\n};\n\nvar destroy = function destroy(element) {\n\n\tvar index = indexOfElement(instances, element);\n\n\tif (index < 0) {\n\t\treturn false;\n\t}\n\n\tinstances[index].destroy();\n\tinstances.splice(index, 1);\n\n\treturn true;\n};\n\nvar time = function time(fn) {\n return function () {\n setTimeout(fn, 0);\n };\n};\n\nvar now$2 = function now$$1() {\n return Date.now();\n};\n\nvar setTimer = function setTimer(cb) {\n var interval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var settings = mergeObjects({ autostart: true }, options);\n\n var tickExpectedTime = null;\n var tickStartTime = null;\n var sleepStartTime = null;\n var totalSleepTime = 0;\n var sleepIntervalOffset = null;\n\n var paused = false;\n\n var timer = null;\n\n var isPaused = function isPaused() {\n return paused;\n };\n\n var isStarted = function isStarted() {\n return tickStartTime !== null;\n };\n\n var isDocumentHidden = function isDocumentHidden() {\n return document.hidden;\n };\n\n // timer tick\n var tick = function tick() {\n var currentTime = now$2();\n\n var timeoutErrorOffset = tickExpectedTime - currentTime;\n\n var timeout = interval + timeoutErrorOffset;\n\n // calculate new expected time\n tickExpectedTime = currentTime + timeout;\n\n // calculate total runtime\n var runtime = currentTime - tickStartTime - totalSleepTime + timeoutErrorOffset;\n\n // let others know total runtime of counter\n cb(runtime);\n\n // new timeout\n timer = setTimeout(tick, timeout);\n };\n\n var start = function start() {\n // if paused, run resume instead (makes building a stopwatch easier)\n if (isPaused()) {\n resume();\n return;\n }\n\n // if already running we don't do anything, can't start twice need to stop first\n if (isStarted()) {\n return;\n }\n\n // the moment we set the timeout\n tickStartTime = now$2();\n\n // call callback immidiately with zero value\n setTimeout(function () {\n cb(0);\n }, 0);\n\n // the moment the timeout should end\n tickExpectedTime = now$2() + interval;\n\n // listen for changes in visibility\n startListeningForVisibilityChanges();\n\n // stop here if document is hidden at start time\n if (isDocumentHidden()) {\n didHideDocument();\n return;\n }\n\n // start ticking\n timer = setTimeout(function () {\n tick();\n }, interval);\n };\n\n var stop = function stop() {\n // can always stop\n\n clearTimeout(timer);\n timer = null;\n tickStartTime = null;\n tickExpectedTime = null;\n sleepStartTime = null;\n totalSleepTime = 0;\n sleepIntervalOffset = null;\n paused = false;\n\n stopListeningForVisibilityChanges();\n };\n\n var reset = function reset() {\n // can always reset\n stop();\n start();\n };\n\n /**\n * Pause / Resume\n */\n var pause = function pause() {\n // can't pause if not running or if is hidden\n if (!isStarted() || isDocumentHidden()) {\n return;\n }\n\n paused = true;\n\n stopListeningForVisibilityChanges();\n\n sleep();\n };\n\n var resume = function resume() {\n // can't resume if not paused if not started or if hidden\n if (!isPaused() || !isStarted() || isDocumentHidden()) {\n return;\n }\n\n paused = false;\n\n startListeningForVisibilityChanges();\n\n wake();\n };\n\n // start sleeping\n var sleep = function sleep() {\n clearTimeout(timer);\n sleepStartTime = now$2();\n sleepIntervalOffset = tickExpectedTime - sleepStartTime;\n };\n\n // wake from hidden or pause stated\n var wake = function wake() {\n // need to remember the wait duration\n totalSleepTime += now$2() - sleepStartTime;\n sleepStartTime = null;\n\n // as we are going to call tick immidiately we expect the time to be now\n tickExpectedTime = now$2() + sleepIntervalOffset;\n\n // start ticking\n timer = setTimeout(function () {\n tick();\n }, sleepIntervalOffset);\n };\n\n /**\n * Document Visibility Change\n */\n var didHideDocument = function didHideDocument() {\n // can only be called if the timer is currently running so no checks\n sleep();\n };\n\n var didShowDocument = function didShowDocument() {\n // can only be called if the timer was running before (but could have been stopped in the mean time)\n if (!isStarted()) return;\n\n wake();\n };\n\n var stopListeningForVisibilityChanges = function stopListeningForVisibilityChanges() {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n\n var startListeningForVisibilityChanges = function startListeningForVisibilityChanges() {\n document.addEventListener('visibilitychange', handleVisibilityChange);\n };\n\n var handleVisibilityChange = function handleVisibilityChange() {\n if (isDocumentHidden()) {\n didHideDocument();\n } else {\n didShowDocument();\n }\n };\n\n /**\n * Go time! (or not)\n */\n if (settings.autostart) {\n start();\n }\n\n /**\n * API\n */\n return {\n start: start,\n stop: time(stop),\n reset: time(reset),\n pause: time(pause),\n resume: resume\n };\n};\n\nvar toInterval = function toInterval(string) {\n if (!/^[\\d]+/.test(string)) {\n string = \"1 \" + string;\n }\n var parts = string.split(\" \");\n return parseFloat(parts[0]) * TimeUnit[parts[1].toLowerCase()];\n};\n\nvar toTime = function toTime(date, time) {\n return setTime(date, time.split(\":\").map(toInt));\n};\n\nvar toYearlyMoment = function toYearlyMoment(date, string) {\n /*\n every 1st of november at 12:00\n every 25th of november at 13:00 wait 10 seconds\n every 25th of november from 10 till 15 every 10 minutes\n */\n\n var parts = string.match(/januari|februari|march|april|may|june|july|august|september|october|november|december|[\\d]+th|\\dst|\\dnd|first|last|at\\s[\\d]+(?::[\\d]+)?(?::[\\d]+)?/g);\n\n // no `at time` supplied\n if (parts.length > 1) {\n var rest = \"\";\n parts.forEach(function (p) {\n rest = string.split(p)[1] || \"\";\n });\n var wait = rest.trim().match(/wait\\s[\\d]+\\s[a-z]+/);\n if (wait) {\n parts.push(wait[0]);\n }\n }\n\n // to moment object\n var moment = parts.reduce(function (obj, part) {\n // is month day (1st, 2nd, 12th, first, last)\n if (/([\\d]+th|\\dst|\\dnd|first|last)/.test(part)) {\n obj.day = /^[\\d]/.test(part) ? parseInt(part, 10) : part === \"first\" ? 1 : part;\n }\n\n // if is time (at 12:00)\n if (/^at/.test(part)) {\n obj.time = toTime(clone$1(date), part.substring(3));\n }\n\n // is waiting period\n else if (/wait/.test(part)) {\n obj.idle = toInterval(part.substring(5));\n }\n\n // must be month\n else if (/^[\\a-zA-Z]+$/.test(part)) {\n obj.month = part;\n }\n\n return obj;\n }, {\n idle: null,\n day: null,\n month: null,\n time: null,\n date: null,\n dist: null,\n wait: false\n });\n\n if (!moment.time) {\n // set to day\n // move to first day (so when the month changes its not accidentally out of range)\n moment.time = clone$1(date);\n moment.time.setDate(1);\n moment.time = setMonth(moment.time, moment.month);\n moment.time = setDayOfMonth(moment.time, moment.day);\n\n // if so get first valid date and use that for time\n var hourlyMoment = toHourlyMoment(moment.time, string);\n\n // waiting\n if (hourlyMoment.wait) {\n return moment;\n }\n\n // copy either date or from time\n moment.time = clone$1(sameDate(date, moment.time) && hourlyMoment.date ? hourlyMoment.date : hourlyMoment.from);\n\n // test if has already passed, if so, set to hourly from for next month\n var dist = moment.time - date;\n if (dist < 0) {\n // move to next year\n moment.time = clone$1(hourlyMoment.from);\n moment.time.setFullYear(moment.time.getFullYear() + 1);\n\n // recalculate distance\n dist = moment.time - date;\n }\n\n moment.dist = dist;\n } else {\n // correct time to given month\n moment.time.setDate(1);\n moment.time = setMonth(moment.time, moment.month);\n moment.time = setDayOfMonth(moment.time, moment.day);\n\n var _dist = moment.time - date;\n var distOverflow = 0;\n if (_dist < 0) {\n distOverflow = _dist;\n\n // move to next year\n moment.time.setFullYear(moment.time.getFullYear() + 1);\n\n // recalculate distance\n _dist = moment.time - date;\n }\n\n // get total time from today to next moment\n if (moment.idle !== null && distOverflow + moment.idle > 0) {\n moment.wait = true;\n return moment;\n }\n\n moment.dist = _dist;\n }\n\n moment.date = clone$1(moment.time);\n\n return moment;\n};\n\nvar toMonthlyMoment = function toMonthlyMoment(date, string) {\n /*\n every month on the 1st day\n every month on the first day\n every month on day the 12th\n every last day of the month at 12:00\n every first day of the month\n every 1st day of the month at 10\n every 2nd day of the month at 10\n every 20th day of the month\n every 20th day of the month at 12:00 wait 10 minutes\n every 20th day of the month from 10 till 14 every hour\n */\n\n var parts = string.match(/[\\d]+th|\\dst|\\dnd|first|last|at\\s[\\d]+(?::[\\d]+)?(?::[\\d]+)?/g);\n\n // no `at time` supplied\n if (parts.length > 1) {\n var rest = \"\";\n parts.forEach(function (p) {\n rest = string.split(p)[1] || \"\";\n });\n var wait = rest.trim().match(/wait\\s[\\d]+\\s[a-z]+/);\n if (wait) {\n parts.push(wait[0]);\n }\n }\n\n var moment = parts.reduce(function (obj, part) {\n // is month day (1st, 2nd, 12th, first, last)\n if (/([\\d]+th|\\dst|\\dnd|first|last)/.test(part)) {\n obj.day = /^[\\d]/.test(part) ? parseInt(part, 10) : part === \"first\" ? 1 : part;\n }\n\n // if is time (at 12:00)\n if (/^at/.test(part)) {\n obj.time = toTime(clone$1(date), part.substring(3));\n }\n\n // is waiting period\n else if (/wait/.test(part)) {\n obj.idle = toInterval(part.substring(5));\n }\n\n return obj;\n }, {\n idle: null,\n day: null,\n time: null,\n date: null,\n dist: null,\n wait: false\n });\n\n if (!moment.time) {\n // set to day\n moment.time = setDayOfMonth(clone$1(date), moment.day);\n\n // if so get first valid date and use that for time\n var hourlyMoment = toHourlyMoment(moment.time, string);\n\n // waiting\n if (hourlyMoment.wait) {\n return moment;\n }\n\n // copy either date or from time\n moment.time = clone$1(sameDate(date, moment.time) && hourlyMoment.date ? hourlyMoment.date : hourlyMoment.from);\n\n // test if has already passed, if so, set to hourly from for next month\n var dist = moment.time - date;\n if (dist < 0) {\n // move to next month (set to first day of month)\n moment.time = clone$1(hourlyMoment.from);\n moment.time.setDate(1);\n moment.time.setMonth(moment.time.getMonth() + 1);\n\n // now set to expected day\n setDayOfMonth(moment.time, moment.day);\n\n // recalculate distance\n dist = moment.time - date;\n }\n\n moment.dist = dist;\n } else {\n // correct time to set week day\n moment.time = setDayOfMonth(moment.time, moment.day);\n\n var _dist2 = moment.time - date;\n var distOverflow = 0;\n if (_dist2 < 0) {\n distOverflow = _dist2;\n\n // move to next month (set to first day of month)\n moment.time.setDate(1);\n moment.time.setMonth(moment.time.getMonth() + 1);\n\n // now set to expected day\n setDayOfMonth(moment.time, moment.day);\n\n // recalculate distance\n _dist2 = moment.time - date;\n }\n\n // get total time from today to next moment\n if (moment.idle !== null && distOverflow + moment.idle > 0) {\n moment.wait = true;\n return moment;\n }\n\n moment.dist = _dist2;\n }\n\n moment.date = clone$1(moment.time);\n\n return moment;\n};\n\nvar toWeeklyMoment = function toWeeklyMoment(date, string) {\n // - every wednesday at 12:00\n // - every wednesday at 12:00 wait 10 minutes\n // - wednesday every hour\n // - wednesday from 10 till 14 every hour\n // - wednesday 12:00, thursday 14:00\n // - tuesday 10:00 wait 2 hours\n // - tuesday 10:00 wait 2 hours, saturday 10:00 wait 2 hours\n // - every tuesday every 5 minutes\n // - wednesday from 10 till 14 every hour\n // - every tuesday every 5 minutes wait 10 seconds\n // - every tuesday from 10 till 12 every 5 minutes wait 10 seconds\n // - every tuesday every 5 minutes from 10 till 12 wait 10 seconds\n // - every tuesday at 12:00 wait 5 minutes\n\n // strip week part and then feed rest to toDaily() or Hourly() method\n var parts = string.match(/(?:mon|tues|wednes|thurs|fri|satur|sun)day|at\\s[\\d]+(?::[\\d]+)?(?::[\\d]+)?/g);\n\n // no `at time` supplied\n if (parts.length > 1) {\n var rest = \"\";\n parts.forEach(function (p) {\n rest = string.split(p)[1] || \"\";\n });\n var wait = rest.trim().match(/wait\\s[\\d]+\\s[a-z]+/);\n if (wait) {\n parts.push(wait[0]);\n }\n }\n\n // to moment object\n var moment = parts.reduce(function (obj, part) {\n // is day\n if (/(?:mon|tues|wednes|thurs|fri|satur|sun)day/.test(part)) {\n obj.day = Days[capitalizeFirstLetter(part)];\n }\n\n // if is time (at 12:00)\n if (/^at/.test(part)) {\n obj.time = toTime(clone$1(date), part.substring(3));\n }\n\n // is waiting period\n else if (/wait/.test(part)) {\n obj.idle = toInterval(part.substring(5));\n }\n\n return obj;\n }, {\n idle: null,\n day: null,\n time: null,\n date: null,\n dist: null,\n wait: false\n });\n\n // if no time set see if a hourly period was defined\n if (!moment.time) {\n // set to day\n moment.time = setDay(clone$1(date), moment.day);\n\n // if so get first valid date and use that for time\n var hourlyMoment = toHourlyMoment(moment.time, string);\n\n // waiting\n if (hourlyMoment.wait) {\n return moment;\n }\n\n // copy either date or from time\n moment.time = clone$1(sameDate(date, moment.time) && hourlyMoment.date ? hourlyMoment.date : hourlyMoment.from);\n\n // test if has already passed, if so, set to hourly from for next week\n var dist = moment.time - date;\n\n if (dist < 0) {\n moment.time.setDate(moment.time.getDate() + 7);\n }\n\n moment.dist = dist;\n } else {\n // correct time to set week day\n moment.time = setDay(moment.time, moment.day);\n\n var _dist3 = moment.time - date;\n if (_dist3 < 0) {\n moment.time.setDate(moment.time.getDate() + 7);\n _dist3 = moment.time - date;\n }\n\n // if is idling\n if (moment.idle !== null && _dist3 >= TimeUnit.Week - moment.idle) {\n moment.wait = true;\n return moment;\n }\n\n moment.dist = _dist3;\n }\n\n moment.date = clone$1(moment.time);\n\n return moment;\n};\n\nvar toDailyMoment = function toDailyMoment(date, string) {\n // - every day at 10\n // - every day at 14:00\n // - every day at 14:30 wait 5 minutes\n\n // get parts\n var parts = string.match(/([\\d]+(?::[\\d]+)?(?::[\\d]+)?)|(wait\\s[\\d]+\\s[a-z]+)/g);\n\n // to moment object\n var moment = parts.reduce(function (obj, part) {\n // if is time\n if (/^[\\d]/.test(part)) {\n obj.time = toTime(clone$1(date), part);\n }\n\n // is waiting period\n else if (/wait/.test(part)) {\n obj.idle = toInterval(part.substring(5));\n }\n\n return obj;\n }, {\n idle: null,\n time: null,\n date: null,\n wait: false,\n dist: null\n });\n\n var dist = moment.time - date;\n\n // if time dist is negative set time to tomorrow\n if (dist < 0) {\n moment.time.setDate(moment.time.getDate() + 1);\n dist = moment.time - date;\n }\n\n // test if wait period has passed\n if (moment.idle !== null && dist >= TimeUnit.Day - moment.idle) {\n moment.wait = true;\n return moment;\n }\n\n moment.dist = dist;\n moment.date = clone$1(moment.time);\n\n return moment;\n};\n\nvar toHourlyMoment = function toHourlyMoment(date, string) {\n // - from 10 till 20 every hour wait 5 minutes\n // - from 10:00:00 till 14:00 every 15 minutes\n // - every hour\n // - every 20 minutes\n // - every 30 seconds\n\n // get parts\n var parts = string.match(/((?:[\\d]+\\s)?(?:hours|hour|minutes|minute|seconds|second))|((?:from|till)\\s[\\d]+(?::[\\d]+)?(?::[\\d]+)?)|(wait\\s[\\d]+\\s[a-z]+)/g);\n\n // to moment object\n var moment = parts.reduce(function (obj, part) {\n // if is time\n if (/from/.test(part)) {\n obj.from = toTime(obj.from, part.split(\" \")[1]);\n } else if (/till/.test(part)) {\n obj.till = toTime(obj.till, part.split(\" \")[1]);\n }\n\n // is waiting period\n else if (/wait/.test(part)) {\n obj.idle = toInterval(part.substring(5));\n }\n\n // if is interval\n else if (/hours|hour|minutes|minute|seconds|second/.test(part)) {\n obj.interval = toInterval(part);\n }\n\n return obj;\n }, {\n idle: null,\n interval: null,\n date: null,\n dist: null,\n wait: false,\n from: toTime(clone$1(date), \"0\"),\n till: toTime(clone$1(date), \"23:59:59:999\")\n });\n\n // if valid moment\n if (date < moment.from || date >= moment.till) {\n return moment;\n }\n\n // calculate if interval fits in duration\n if (moment.interval > moment.till - moment.from) {\n return moment;\n }\n\n // time passed since start of moment\n var diff = date - moment.from;\n\n // interval duration minus all intervals that fitted in the passed time since start\n // 200 - (diff % interval)\n // 200 - (1450 % 200)\n // 200 - 50\n // 150 till next moment\n var dist = moment.interval - diff % moment.interval;\n\n // test if wait period has passed\n if (moment.idle !== null && dist >= moment.interval - moment.idle) {\n moment.wait = true;\n return moment;\n }\n\n // set as final distance\n moment.dist = dist;\n\n // turn into date by adding to current time\n moment.date = new Date(date.getTime() + moment.dist);\n\n return moment;\n};\n\nvar toMoment = function toMoment(date, string) {\n // test yearly schedules\n if (/januari|februari|march|april|may|june|july|august|september|october|november|december/.test(string)) {\n return toYearlyMoment(date, string);\n }\n\n // test for monthly schedules\n if (/month/.test(string)) {\n return toMonthlyMoment(date, string);\n }\n\n // test for weekly schedules\n if (/(?:mon|tues|wednes|thurs|fri|satur|sun)day/.test(string)) {\n return toWeeklyMoment(date, string);\n }\n\n // test for daily schedules\n if (/day at/.test(string) || /^at /.test(string)) {\n return toDailyMoment(date, string);\n }\n\n // test for hourly schedules\n if (/hours|hour|minutes|minute|seconds|second/.test(string)) {\n return toHourlyMoment(date, string);\n }\n\n return null;\n};\n\nvar getNextScheduledDate = function getNextScheduledDate(date, schedule) {\n // create moments\n var moments = schedule.split(\",\").map(trim) // remove whitespace\n .map(function (s) {\n return toMoment(date, s);\n }); // string to moment in time\n\n // calculate closest moment\n var nearest = null;\n\n for (var i = 0; i < moments.length; i++) {\n var moment = moments[i];\n\n // currently waiting\n if (nearest === null && moment.wait) {\n return null;\n }\n\n if (nearest === null) {\n nearest = moment;\n } else if (nearest.dist === null && moment.dist !== null) {\n nearest = moment;\n } else if (moment.dist !== null && moment.dist < nearest.dist) {\n nearest = moment;\n }\n }\n\n // return nearest date\n return nearest.date;\n};\n\n/**\n * Returns the server offset based on the type of value\n * will subtract current time from server time resulting in a correction offset\n * @param server\n * @param cb\n * @returns {*}\n */\nvar getServerOffset = function getServerOffset(server, cb) {\n\tif (server === true) {\n\t\tserverDate(function (date) {\n\t\t\tcb(date.getTime() - now$1().getTime());\n\t\t});\n\t\treturn;\n\t}\n\tif (typeof server === 'string') {\n\t\tsetTimeout(function () {\n\t\t\tcb(dateFromISO(server).getTime() - now$1().getTime());\n\t\t}, 0);\n\t\treturn;\n\t}\n\tsetTimeout(function () {\n\t\tcb(0);\n\t}, 0);\n};\n\n/**\n * Default options for counter\n * @type object\n */\nvar DEFAULT_COUNTDOWN_OPTIONS = {\n\tformat: ['d', 'h', 'm', 's'],\n\tcascade: true,\n\tserver: null, // null (use client date) | true (use info in Date header) | ISO 8601 (fixed date)\n\tinterval: 1000\n};\n\n/**\n * Creates a counter object\n * @param props\n */\nvar createCounter = function createCounter(props) {\n\treturn _extends({\n\n\t\t// read only\n\t\tcomplete: false,\n\t\toffset: null,\n\t\tvalue: null,\n\t\ttimer: null,\n\n\t\t// api\n\t\tonload: function onload() {},\n\t\tonupdate: function onupdate(value) {}\n\n\t}, props);\n};\n\n/**\n * Countdown Value\n * @param total - total milliseconds to count down\n * @param options\n */\nvar countdownAmount = function countdownAmount(total) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\tif (typeof total !== 'number') {\n\t\tthrow 'Can\\'t start counter, the \"milliseconds\" parameter is required';\n\t}\n\n\t// set base options\n\toptions = mergeObjects({ units: 'seconds', target: 0, amount: 1000, interval: 1000 }, options);\n\n\t// set private target\n\tvar target = options.target;\n\tvar current = total;\n\n\t// counter api\n\tvar counter = createCounter({\n\t\ttarget: target,\n\t\tonended: function onended() {}\n\t});\n\n\tsetTimeout(function () {\n\n\t\t// count method\n\t\tvar count = function count(runtime) {\n\n\t\t\tcurrent = total - runtime / options.interval * options.amount;\n\n\t\t\t// test if reached target date\n\t\t\tif (current <= target) {\n\n\t\t\t\t// set final value\n\t\t\t\tcounter.value = options.target;\n\n\t\t\t\t// set output to zero\n\t\t\t\tcounter.onupdate(counter.value / TimeUnit[options.units]);\n\n\t\t\t\t// stop timer\n\t\t\t\tcounter.timer.stop();\n\n\t\t\t\t// we're done!\n\t\t\t\tcounter.onended();\n\n\t\t\t\t// really done!\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// set value\n\t\t\tcounter.value = current;\n\n\t\t\t// calculate duration\n\t\t\tcounter.onupdate(counter.value / TimeUnit[options.units]);\n\t\t};\n\n\t\t// set our counter, don't start automatically as we want to call onload first\n\t\tcounter.timer = setTimer(count, options.interval, { autostart: false });\n\n\t\t// ready!\n\t\tcounter.complete = true;\n\t\tcounter.onload();\n\n\t\t// start timer automatically\n\t\tcounter.timer.start();\n\t}, 0);\n\n\treturn counter;\n};\n\n/**\n * Count down towards date\n * @param due\n * @param options\n * @returns object\n */\nvar countdownDuration = function countdownDuration(due) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\tif (typeof due === 'undefined') {\n\t\tthrow 'Can\\'t start counter, the \"due\" parameter is required';\n\t}\n\n\t// set base options\n\toptions = mergeObjects(DEFAULT_COUNTDOWN_OPTIONS, options);\n\n\t// set private target\n\tvar target = isDate(due) ? due : dateFromISO(due);\n\n\t// counter api\n\tvar counter = createCounter({\n\t\tdue: clone$1(target),\n\t\tonended: function onended() {}\n\t});\n\n\t// get offset\n\tgetServerOffset(options.server, function (offset) {\n\n\t\tcounter.offset = offset;\n\n\t\tvar count = function count() {\n\n\t\t\tvar now$$1 = offsetDate(offset);\n\n\t\t\t// test if reached target date\n\t\t\tif (target - now$$1 <= 0) {\n\n\t\t\t\t// set final value\n\t\t\t\tcounter.value = new Array(options.format.length).fill(0);\n\n\t\t\t\t// set output to zero\n\t\t\t\tcounter.onupdate(counter.value);\n\n\t\t\t\t// stop timer\n\t\t\t\tcounter.timer.stop();\n\n\t\t\t\t// we're done!\n\t\t\t\tcounter.onended();\n\n\t\t\t\t// really done!\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// set value\n\t\t\tcounter.value = dateDiff(now$$1, target, options.format, options.cascade);\n\n\t\t\t// calculate duration\n\t\t\tcounter.onupdate(counter.value);\n\t\t};\n\n\t\t// start our counter\n\t\tcounter.timer = setTimer(count, options.interval, { autostart: false });\n\n\t\t// ready!\n\t\tcounter.complete = true;\n\t\tcounter.onload();\n\n\t\t// run timer\n\t\tcounter.timer.start();\n\t});\n\n\treturn counter;\n};\n\n/**\n * Count up from date\n * @param since\n * @param options\n * @returns object\n */\nvar countUpDuration = function countUpDuration(since) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\tif (typeof since === 'undefined') {\n\t\tthrow 'Can\\'t start counter, the \"since\" parameter is required';\n\t}\n\n\t// set base options\n\toptions = mergeObjects(DEFAULT_COUNTDOWN_OPTIONS, options);\n\n\t// set from date\n\tvar from = isDate(since) ? since : dateFromISO(since);\n\n\t// counter api\n\tvar counter = createCounter({\n\t\tsince: clone$1(from)\n\t});\n\n\t// get offset\n\tgetServerOffset(options.server, function (offset) {\n\n\t\tcounter.offset = offset;\n\n\t\tvar count = function count() {\n\n\t\t\tvar now$$1 = offsetDate(offset);\n\n\t\t\t// set value\n\t\t\tcounter.value = dateDiff(from, now$$1, options.format, options.cascade);\n\n\t\t\t// calculate duration\n\t\t\tcounter.onupdate(counter.value);\n\t\t};\n\n\t\t// start our counter\n\t\tcounter.timer = setTimer(count, options.interval, { autostart: false });\n\n\t\t// ready!\n\t\tcounter.complete = true;\n\t\tcounter.onload();\n\n\t\t// run timer\n\t\tcounter.timer.start();\n\t});\n\n\treturn counter;\n};\n\n/**\n * Count using a predefined schedule\n * @param schedule\n * @param options\n * @returns object\n */\nvar countScheduled = function countScheduled(schedule) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\tif (typeof schedule !== 'string') {\n\t\tthrow 'Can\\'t start scheduler, \"schedule\" is a required parameter';\n\t}\n\n\t// timezone is in ISO8601 timezone format\n\toptions = mergeObjects(_extends({}, DEFAULT_COUNTDOWN_OPTIONS, { timezone: null }), options);\n\n\t// get timezone offset\n\tvar timezone = options.timezone ? toTimezoneOffset(options.timezone) : null;\n\n\t// counter api\n\tvar counter = createCounter({\n\t\twaiting: null,\n\t\tnextScheduledDate: null,\n\t\tpreviouslyScheduledDate: null,\n\t\tonrepeat: function onrepeat(nextDate, lastDate) {},\n\t\tonresume: function onresume(nextDate) {},\n\t\tonwait: function onwait(sinceDate) {}\n\t});\n\n\t// date scheduled during last check\n\tvar lastDate = undefined;\n\tvar nextDate = null;\n\n\t// get offset\n\tgetServerOffset(options.server, function (offset) {\n\n\t\tcounter.offset = offset;\n\n\t\tvar count = function count() {\n\n\t\t\tvar now$$1 = offsetDate(offset);\n\n\t\t\tif (timezone !== null) {\n\t\t\t\tnow$$1 = timezoneDate(now$$1, timezone);\n\t\t\t}\n\n\t\t\t// get next date\n\t\t\tnextDate = getNextScheduledDate(now$$1, schedule);\n\n\t\t\t// if no next date, we are in waiting state\n\t\t\tcounter.waiting = nextDate === null;\n\n\t\t\t// if target is null call `wait` method\n\t\t\tif (counter.waiting) {\n\n\t\t\t\t// if is waiting initially\n\t\t\t\tif (lastDate === undefined) {\n\t\t\t\t\tlastDate = null;\n\t\t\t\t}\n\n\t\t\t\t// set output to zero\n\t\t\t\tcounter.value = new Array(options.format.length).fill(0);\n\n\t\t\t\t// remember scheduled date if set\n\t\t\t\tif (counter.nextScheduledDate) {\n\t\t\t\t\tcounter.previouslyScheduledDate = clone$1(counter.nextScheduledDate);\n\t\t\t\t}\n\n\t\t\t\t// update counter dates\n\t\t\t\tcounter.nextScheduledDate = nextDate === null ? null : clone$1(nextDate);\n\n\t\t\t\t// update counter\n\t\t\t\tcounter.onwait(counter.previouslyScheduledDate ? clone$1(counter.previouslyScheduledDate) : null);\n\n\t\t\t\t// we'll stop here but we'll leave the counter running\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// update counter dates\n\t\t\tcounter.nextScheduledDate = clone$1(nextDate);\n\n\t\t\t// just now we did not have a date (last date is always the date from the previous loop),\n\t\t\t// but now have, so we just woke up\n\t\t\tif (lastDate === null) {\n\t\t\t\tcounter.onresume(clone$1(nextDate));\n\t\t\t}\n\n\t\t\t// if no last date or it's not the first loop and its not the same as the next date we are looping\n\t\t\tif (lastDate === null || lastDate !== undefined && !sameTime(lastDate, nextDate)) {\n\n\t\t\t\tcounter.onrepeat(clone$1(nextDate), lastDate ? clone$1(lastDate) : null);\n\n\t\t\t\tif (lastDate) {\n\t\t\t\t\tcounter.previouslyScheduledDate = clone$1(lastDate);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// remember last date\n\t\t\tlastDate = clone$1(nextDate);\n\n\t\t\t// calculate new duration\n\t\t\tcounter.value = dateDiff(now$$1, nextDate, options.format, options.cascade);\n\t\t\tcounter.onupdate(counter.value);\n\t\t};\n\n\t\t// start our counter\n\t\tcounter.timer = setTimer(count, options.interval, { autostart: false });\n\n\t\t// ready!\n\t\tcounter.complete = true;\n\t\tcounter.onload();\n\n\t\t// go!\n\t\tcounter.timer.start();\n\t});\n\n\treturn counter;\n};\n\nvar support = (function () {\n\n\tvar w = window;\n\tif (typeof w === 'undefined') {\n\t\treturn false;\n\t}\n\n\t// test if can use CSS supports feature detection \n\tvar canSupport = w.CSS && w.CSS.supports;\n\n\t// test if is IE 11\n\t// does not support CSS.supports but does support transforms without prefix\n\tvar isIE11 = !!w.MSInputMethodContext && !!document.documentMode;\n\n\t// test if has transform support\n\t// we ignore the custom Opera implementation\n\tvar canTransform = canSupport && CSS.supports('transform', 'translateX(0)');\n\n\t// can we use mutation observer and request animation frame\n\tvar features = ['MutationObserver', 'requestAnimationFrame'];\n\n\t// test if is supported\n\treturn isIE11 || canSupport && canTransform && !!features.filter(function (p) {\n\t\treturn p in w;\n\t}).length;\n});\n\nvar transform = (function () {\n\tfor (var _len = arguments.length, transforms = Array(_len), _key = 0; _key < _len; _key++) {\n\t\ttransforms[_key] = arguments[_key];\n\t}\n\n\treturn function (value, cb) {\n\n\t\tvar output = [];\n\t\tvar input = value;\n\n\t\ttransforms.forEach(function (t, i) {\n\n\t\t\tt(input, function (out) {\n\n\t\t\t\toutput[i] = out;\n\n\t\t\t\tif (i === transforms.length - 1) {\n\t\t\t\t\tcb(output.length === 1 ? output[0] : output);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n});\n\nvar pad = (function () {\n\tvar padding = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\tvar side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'left';\n\treturn function (value, cb) {\n\t\treturn cb(padding.length > ('' + value).length ? side === 'left' ? ('' + padding + value).slice(-padding.length) : ('' + value + padding).substring(0, padding.length) : value);\n\t};\n});\n\nvar ascii = (function () {\n return function (value, cb) {\n return cb((value + '').charCodeAt(0));\n };\n});\n\nvar add$1 = (function (amount) {\n return function (value, cb) {\n return cb(value + amount);\n };\n});\n\nvar abs = (function () {\n return function (value, cb) {\n return cb(Math.abs(value));\n };\n});\n\nvar value$1 = (function (staticValue) {\n return function (value, cb) {\n return cb(staticValue);\n };\n});\n\nvar modulus = (function (amount) {\n return function (value, cb) {\n return cb(value % amount);\n };\n});\n\nvar subtract = (function (amount) {\n return function (value, cb) {\n return cb(value - amount);\n };\n});\n\nvar replace = (function (needle, replacement) {\n return function (string, cb) {\n return cb((string + '').replace(new RegExp(needle === '.' ? '\\\\' + needle : needle, 'g'), replacement));\n };\n});\n\nvar round = (function () {\n var decimals = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n return function (value, cb) {\n return cb(decimals ? value.toFixed(decimals) : Math.round(value));\n };\n});\n\nvar floor = (function () {\n return function (value, cb) {\n return cb(Math.floor(value));\n };\n});\n\nvar ceil = (function () {\n return function (value, cb) {\n return cb(Math.ceil(value));\n };\n});\n\nvar fraction = (function () {\n var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;\n return function (value, cb) {\n return cb((parseFloat(value) - min) / (max - min));\n };\n});\n\nvar multiply = (function (amount) {\n return function (value, cb) {\n return cb(value * amount);\n };\n});\n\nvar divide = (function (amount) {\n return function (value, cb) {\n return cb(value / amount);\n };\n});\n\nvar format = (function (template) {\n return function (value, cb) {\n return cb(template.replace(/\\$0/gi, value));\n };\n});\n\nvar split = (function () {\n var character = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return function (string, cb) {\n return cb((string + '').split(character));\n };\n});\n\nvar plural = (function (single, plural) {\n return function (value, cb) {\n return cb(value === 1 ? single : plural);\n };\n});\n\nvar limit = (function () {\n var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return function (value, cb) {\n return cb(Math.min(Math.max(value, min), max));\n };\n});\n\nvar reverse = (function () {\n return function (value, cb) {\n return cb(Array.isArray(value) ? value.reverse() : (value + '').split('').reverse().join(''));\n };\n});\n\nvar arrive$1 = (function (maxVelocity, friction) {\n var resetToBegin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var catchUp = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n\n var initial = null;\n var previous = null;\n var translator = null;\n return function (value, cb) {\n value = parseFloat(value);\n\n if (initial === null) {\n initial = value;\n cb(value);\n return;\n }\n\n if (resetToBegin && previous !== null && initial === value) {\n translator.cancel();\n translator = null;\n }\n\n if (catchUp && previous !== null && value - translator.getPosition() > 1) {\n translator.cancel();\n translator = null;\n previous = null;\n initial = value;\n cb(value);\n return;\n }\n\n if (!translator) {\n translator = createTranslator('arrive', maxVelocity, friction);\n translator.update(cb, initial, value);\n } else {\n translator.update(cb, value);\n }\n\n previous = value;\n };\n});\n\nvar spring$1 = (function (stiffness, damping, mass) {\n\n\tvar current = null;\n\tvar translator = null;\n\n\treturn function (value, cb) {\n\n\t\tvalue = parseFloat(value);\n\n\t\tif (current === null) {\n\t\t\tcurrent = value;\n\t\t\tcb(value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!translator) {\n\t\t\ttranslator = createTranslator('spring', stiffness, damping, mass);\n\t\t\ttranslator.update(cb, current, value);\n\t\t} else {\n\t\t\ttranslator.update(cb, value);\n\t\t}\n\t};\n});\n\n/**\n * @param order { String } - order of flipping > random | ltr | rtl (default)\n * @param min { Number } - min random delay\n * @param max { Number } - max random delay\n */\nvar delay = (function () {\n\tvar order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'rtl';\n\tvar min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 50;\n\tvar max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 50;\n\n\n\tvar current = null;\n\n\treturn function (value, cb) {\n\n\t\t// if no current value, set current value and -> exit\n\t\tif (!current) {\n\t\t\tcurrent = copyArray(value);\n\t\t\tcb(copyArray(current));\n\t\t\treturn;\n\t\t}\n\n\t\tcurrent = order === 'rtl' ? current.slice(current.length - value.length, current.length) : current.slice(0, value.length);\n\n\t\tvar indexes = range(value.length);\n\n\t\tif (order === 'random') {\n\t\t\tshuffle(indexes);\n\t\t}\n\n\t\tif (order === 'rtl') {\n\t\t\tindexes.reverse();\n\t\t}\n\n\t\tvar update = function update() {\n\t\t\tflip(indexes.shift(), current, value, cb);\n\t\t\tif (indexes.length) {\n\t\t\t\tsetTimeout(update, random(min, max));\n\t\t\t}\n\t\t};\n\n\t\tupdate();\n\t};\n});\n\nvar flip = function flip(index, current, next, cb) {\n\tcurrent[index] = next[index];\n\tcb(copyArray(current));\n};\n\nvar number = (function () {\n\tvar decimalsSeparator = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.';\n\tvar thousandsSeparator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ',';\n\tvar decimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2;\n\treturn function (value, cb) {\n\t\tcb((value < 0 ? '-' : '') + parseFloat(Math.abs(value)).toFixed(decimals).replace(/./g, function (c, i, a) {\n\t\t\tif (c === '.') {\n\t\t\t\treturn decimalsSeparator;\n\t\t\t}\n\t\t\treturn i && (a.length - i) % 3 === 0 ? thousandsSeparator + c : c;\n\t\t}));\n\t};\n});\n\nvar percentage = (function () {\n\tvar min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\tvar max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;\n\n\tvar f = fraction(min, max);\n\treturn function (value, cb) {\n\t\tf(value, function (value) {\n\t\t\tcb(value * 100);\n\t\t});\n\t};\n});\n\nvar step$1 = (function (velocity) {\n\n\tvar initial = null;\n\tvar previous = null;\n\tvar translator = null;\n\n\treturn function (value, cb) {\n\n\t\tvalue = parseFloat(value);\n\n\t\tif (initial === null) {\n\t\t\tinitial = value;\n\t\t\tcb(value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (previous !== null && initial === value) {\n\t\t\ttranslator.cancel();\n\t\t\ttranslator = null;\n\t\t}\n\n\t\tif (!translator) {\n\t\t\ttranslator = createTranslator('step', velocity);\n\t\t\ttranslator.update(cb, initial, value);\n\t\t} else {\n\t\t\ttranslator.update(cb, value);\n\t\t}\n\n\t\tprevious = value;\n\t};\n});\n\nvar upper = (function () {\n return function (value, cb) {\n return cb((value + '').toUpperCase());\n };\n});\n\nvar lower = (function () {\n return function (value, cb) {\n return cb((value + '').toLowerCase());\n };\n});\n\n/**\n * milliseconds duration\n * @param format\n * @returns {function(*=, *)}\n */\nvar duration$1 = (function () {\n for (var _len = arguments.length, format = Array(_len), _key = 0; _key < _len; _key++) {\n format[_key] = arguments[_key];\n }\n\n return function (value, cb) {\n return cb(timeDuration(value, format));\n };\n});\n\nvar keys = (function () {\n\tfor (var _len = arguments.length, keys = Array(_len), _key = 0; _key < _len; _key++) {\n\t\tkeys[_key] = arguments[_key];\n\t}\n\n\treturn function (value, cb) {\n\t\tvar output = {};\n\t\tvalue.forEach(function (v, i) {\n\t\t\toutput[keys[i]] = v;\n\t\t});\n\t\tcb(output);\n\t};\n});\n\nvar map = (function (transform) {\n\treturn function (value, cb) {\n\n\t\tvar output = [];\n\t\tvar input = value;\n\n\t\tinput.forEach(function (v, vi) {\n\n\t\t\ttransform(v, function (out) {\n\n\t\t\t\toutput[vi] = out;\n\n\t\t\t\tif (vi === input.length - 1) {\n\t\t\t\t\tcb(output.concat());\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n});\n\nvar rotate = (function () {\n\tfor (var _len = arguments.length, transforms = Array(_len), _key = 0; _key < _len; _key++) {\n\t\ttransforms[_key] = arguments[_key];\n\t}\n\n\treturn function (value, cb) {\n\n\t\tvar input = Array.isArray(value) ? value : [value];\n\t\tvar output = [];\n\t\tvar totalTransforms = transforms.length;\n\n\t\tinput.forEach(function (v, i) {\n\n\t\t\ttransforms[i % totalTransforms](v, function (out) {\n\n\t\t\t\toutput[i] = out;\n\t\t\t\tif (i === input.length - 1) {\n\t\t\t\t\tcb(output);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t};\n});\n\nvar input = (function () {\n return function (value, cb) {\n return cb(value);\n };\n});\n\nvar substring = (function (from, to) {\n return function (value, cb) {\n return cb((value + '').substring(from, to));\n };\n});\n\nvar tween = (function (duration) {\n\tvar ease = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'ease-linear';\n\tvar delay = arguments[2];\n\n\n\tduration = toDuration(duration);\n\n\tvar easeFn = getExtension(ExtensionType.EASING_FUNCTION, ease);\n\tvar cancel = null;\n\tvar previous = null;\n\n\treturn function (value, cb) {\n\n\t\tvalue = parseFloat(value);\n\n\t\tif (cancel) {\n\t\t\tcancel();\n\t\t}\n\n\t\t// force value if\n\t\t// - no previous value defined\n\t\t// - is same value\n\t\t// - distance between from and to is too large\n\t\tif (previous === null || value === previous) {\n\t\t\tprevious = value;\n\t\t\tcb(value);\n\t\t\treturn;\n\t\t}\n\n\t\tvar to = value;\n\t\tvar from = previous;\n\t\tvar dist = to - from;\n\n\t\tcancel = animate(function (p) {\n\t\t\tcb(from + p * dist);\n\t\t}, function () {\n\t\t\tcancel = null;\n\t\t}, duration, easeFn, delay);\n\n\t\tprevious = value;\n\t};\n});\n\nvar preset = (function () {\n for (var _len = arguments.length, presets = Array(_len), _key = 0; _key < _len; _key++) {\n presets[_key] = arguments[_key];\n }\n\n return function (value, cb, instance) {\n return cb(value.map(function (v, index) {\n return instance.getPreset(presets[index])(v, instance.getConstants(), instance);\n }));\n };\n});\n\nvar char = (function (filter) {\n var replacement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n\n var regex = filter ? new RegExp('[^' + filter + ']', 'g') : null;\n\n return function (value, cb) {\n var char = String.fromCharCode(value);\n if (regex) {\n char = char.replace(regex, replacement);\n }\n cb(char);\n };\n});\n\nvar Transforms = {\n\tascii: ascii,\n\tchar: char,\n\ttween: tween,\n\tvalue: value$1,\n\tinput: input,\n\trotate: rotate,\n\tmap: map,\n\ttransform: transform,\n\tupper: upper,\n\tlower: lower,\n\tabs: abs,\n\tadd: add$1,\n\tsubtract: subtract,\n\tmodulus: modulus,\n\tpad: pad,\n\tnumber: number,\n\treplace: replace,\n\tround: round,\n\tceil: ceil,\n\tfloor: floor,\n\tfraction: fraction,\n\tpercentage: percentage,\n\tmultiply: multiply,\n\tdivide: divide,\n\tsplit: split,\n\tformat: format,\n\tplural: plural,\n\tlimit: limit,\n\treverse: reverse,\n\tarrive: arrive$1,\n\tspring: spring$1,\n\tdelay: delay,\n\tstep: step$1,\n\tkeys: keys,\n\tduration: duration$1,\n\tsubstring: substring,\n\tpreset: preset\n};\n\naddExtensions(ExtensionType.TRANSFORM, Transforms);\n\nvar crossfade = (function () {\n\tvar speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\tvar delayIn = arguments[1];\n\tvar delayOut = arguments[2];\n\n\treturn {\n\t\tintro: [{ name: 'fade', parameters: [0, 1], duration: 1000 * speed, delay: toDuration(delayIn) }],\n\t\toutro: [{ name: 'fade', parameters: [1, 0], duration: 1000 * speed, delay: toDuration(delayOut) }]\n\t};\n});\n\nvar swap = (function () {\n\tvar axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y';\n\tvar distance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\tvar speed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\tvar delayIn = arguments[3];\n\tvar delayOut = arguments[4];\n\n\treturn {\n\t\tintro: [{\n\t\t\tname: 'move',\n\t\t\tparameters: ['' + -distance * 100, '0%', axis],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayIn)\n\t\t}],\n\t\toutro: [{\n\t\t\tname: 'move',\n\t\t\tparameters: ['0%', '' + distance * 100, axis],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayOut)\n\t\t}]\n\t};\n});\n\nvar revolve = (function () {\n\tvar axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'y';\n\tvar distance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\tvar speed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\tvar delayIn = arguments[3];\n\tvar delayOut = arguments[4];\n\n\treturn {\n\t\tintro: [{\n\t\t\tname: 'rotate',\n\t\t\tparameters: [-distance * 90 + 'deg', '0deg', axis],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayIn)\n\t\t}],\n\t\toutro: [{\n\t\t\tname: 'rotate',\n\t\t\tparameters: ['0deg', distance * 90 + 'deg', axis],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayOut)\n\t\t}]\n\t};\n});\n\nvar zoom = (function () {\n\tvar offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\tvar speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\tvar delayIn = arguments[2];\n\tvar delayOut = arguments[3];\n\n\treturn {\n\t\tintro: [{\n\t\t\tname: 'scale',\n\t\t\tparameters: [offset, 1],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayIn)\n\t\t}],\n\t\toutro: [{\n\t\t\tname: 'scale',\n\t\t\tparameters: [1, offset],\n\t\t\tduration: 1000 * speed,\n\t\t\tdelay: toDuration(delayOut)\n\t\t}]\n\t};\n});\n\nvar Translation = {\n\t'x': 'translateX',\n\t'y': 'translateY',\n\t'z': 'translateZ'\n};\n\nvar Rotation = {\n\t'x': 'rotateX',\n\t'y': 'rotateY',\n\t'z': 'rotateZ'\n};\n\nvar Scalar = {\n\t'both': 'scale',\n\t'x': 'scaleX',\n\t'y': 'scaleY'\n};\n\n/**\n * Helper methods\n */\nvar between = function between(from, to, p) {\n\treturn from + (to - from) * p;\n};\n\n/**\n * Single Element transitions\n */\nvar fade = function fade(element, p, direction) {\n\tvar ease = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : easeInOutQuad;\n\tvar from = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\tvar to = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;\n\n\tif (direction < 0) {\n\t\tvar _ref = [to, from];\n\t\tfrom = _ref[0];\n\t\tto = _ref[1];\n\t}\n\telement.style.opacity = between(from, to, ease(p));\n};\n\nvar move = function move(element, p, direction) {\n\tvar ease = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : easeInOutQuad;\n\tvar from = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '0';\n\tvar to = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '100%';\n\tvar axis = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 'y';\n\n\tif (direction < 0) {\n\t\tvar _ref2 = [to, from];\n\t\tfrom = _ref2[0];\n\t\tto = _ref2[1];\n\t}\n\tvar f = cache(from, toCSSValue);\n\tvar t = cache(to, toCSSValue);\n\tsetTransform(element, Translation[axis], between(f.value, t.value, ease(p)), f.units || t.units);\n};\n\nvar rotate$1 = function rotate(element, p, direction) {\n\tvar ease = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : easeInOutQuad;\n\tvar from = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '0';\n\tvar to = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '90deg';\n\tvar axis = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 'x';\n\n\tif (direction < 0) {\n\t\tvar _ref3 = [to, from];\n\t\tfrom = _ref3[0];\n\t\tto = _ref3[1];\n\t}\n\tvar f = cache(from, toCSSValue);\n\tvar t = cache(to, toCSSValue);\n\tsetTransform(element, Rotation[axis], between(f.value, t.value, ease(p)), f.units || t.units);\n};\n\nvar scale = function scale(element, p, direction) {\n\tvar ease = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : easeInOutQuad;\n\tvar from = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\tvar to = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;\n\tvar axis = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 'both';\n\n\tif (direction < 0) {\n\t\tvar _ref4 = [to, from];\n\t\tfrom = _ref4[0];\n\t\tto = _ref4[1];\n\t}\n\tsetTransform(element, Scalar[axis], between(from, to, ease(p)));\n};\n\n/**\n * Composed\n */\n/**\n * Available transitions\n */\nvar Transitions = {\n\tfade: fade,\n\tmove: move,\n\trotate: rotate$1,\n\tscale: scale,\n\n\t// composed transitions\n\tcrossfade: crossfade,\n\tswap: swap,\n\trevolve: revolve,\n\tzoom: zoom\n};\n\naddExtensions(ExtensionType.TRANSITION, Transitions);\n\n/**\n * Helper methods for building the API\n */\n/**\n * We wan't to be sure Rollup includes these collections in the output packages so that's why they are referenced here\n */\nvar API = {\n\n\t/**\n * Quick way to detect if Tick is supported\n */\n\tsupported: support(),\n\n\t// options\n\toptions: {\n\t\tsetConstant: setConstant,\n\t\tsetPreset: setPreset\n\t},\n\n\t/**\n * Helper Methods\n */\n\thelper: {\n\n\t\t// Starts an interval and calls callback method on each tick\n\t\tinterval: setTimer,\n\n\t\t// Returns current time or date object based on ISO\n\t\tdate: function date(iso) {\n\t\t\treturn iso ? dateFromISO(iso) : now$1();\n\t\t},\n\n\t\t// Returns duration in milliseconds or duration between two dates\n\t\tduration: duration\n\t},\n\n\t/**\n * Data Access\n */\n\tdata: {\n\n\t\t// Request data from a url\n\t\trequest: request,\n\n\t\t// Poll a URL for data with a set interval\n\t\tpoll: function poll(url, cb) {\n\t\t\tvar interval = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 60000;\n\n\t\t\treturn setTimer(function () {\n\t\t\t\trequest(url, cb);\n\t\t\t}, interval);\n\t\t}\n\n\t},\n\n\t/**\n * DOM Operations\n */\n\tDOM: {\n\n\t\t// Create a new ticker\n\t\tcreate: create,\n\n\t\t// Destroy an existing ticker\n\t\tdestroy: destroy,\n\n\t\t// Parse a piece of the DOM for tickers\n\t\tparse: parse,\n\n\t\t// Find a specific ticker by DOM node\n\t\tfind: find\n\n\t},\n\n\tcount: {\n\t\tdown: function down() {\n\t\t\tfor (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t\t\t\targs[_key] = arguments[_key];\n\t\t\t}\n\n\t\t\t// if is `amount` and `unit type`, 10 seconds\n\t\t\tif (typeof args[0] === 'number' && typeof args[1] === 'string') {\n\t\t\t\tvar value = args[0];\n\t\t\t\tvar units = args[1].toLowerCase();\n\t\t\t\targs.shift();\n\t\t\t\targs[0] = duration(value, units);\n\t\t\t\targs[1] = args[1] || {};\n\t\t\t\targs[1].units = units;\n\t\t\t\treturn countdownAmount.apply(undefined, args);\n\t\t\t}\n\n\t\t\t// is date or iso string\n\t\t\tif (typeof args[0] === 'string' || isDate(args[0])) {\n\t\t\t\treturn countdownDuration.apply(undefined, args);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\tup: countUpDuration,\n\t\tschedule: countScheduled\n\t},\n\n\t/**\n * Public method to extend Tick functionality\n */\n\tplugin: {\n\t\tadd: function add(type, name, fn) {\n\t\t\tif (typeof type === 'function') {\n\t\t\t\tvar extension = type;\n\t\t\t\treturn addExtension(extension.identifier.type, extension.identifier.name, extension);\n\t\t\t}\n\t\t\treturn addExtension(type, name, fn);\n\t\t}\n\t}\n\n};\n\n// expose shortcut methods\n\nvar _loop = function _loop(type) {\n\tif (!ExtensionType.hasOwnProperty(type)) {\n\t\treturn 'continue';\n\t}\n\tAPI.plugin[dashesToCamels('add-' + ExtensionType[type])] = function (name, fn) {\n\t\taddExtension(ExtensionType[type], name, fn);\n\t};\n};\n\nfor (var type in ExtensionType) {\n\tvar _ret = _loop(type);\n\n\tif (_ret === 'continue') continue;\n}\n\nmodule.exports = API;\n\n\treturn module.exports;\n}()) : null;","/* eslint-disable */\n\n/*\n * @pqina/flip v1.8.3 - A Beautifully Animated Flip Clock\n * Copyright (c) 2023 PQINA - https://pqina.nl/flip/\n */\nexport default typeof window !== 'undefined' ? (function() {\n\tif (!module) {\n\t\tvar module = {};\n\t}\n'use strict';\n\nvar asyncGenerator = function () {\n function AwaitValue(value) {\n this.value = value;\n }\n\n function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n\n if (value instanceof AwaitValue) {\n Promise.resolve(value.value).then(function (arg) {\n resume(\"next\", arg);\n }, function (arg) {\n resume(\"throw\", arg);\n });\n } else {\n settle(result.done ? \"return\" : \"normal\", result.value);\n }\n } catch (err) {\n settle(\"throw\", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case \"return\":\n front.resolve({\n value: value,\n done: true\n });\n break;\n\n case \"throw\":\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen.return !== \"function\") {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n return this;\n };\n }\n\n AsyncGenerator.prototype.next = function (arg) {\n return this._invoke(\"next\", arg);\n };\n\n AsyncGenerator.prototype.throw = function (arg) {\n return this._invoke(\"throw\", arg);\n };\n\n AsyncGenerator.prototype.return = function (arg) {\n return this._invoke(\"return\", arg);\n };\n\n return {\n wrap: function (fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n },\n await: function (value) {\n return new AwaitValue(value);\n }\n };\n}();\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar index = (function (_ref) {\n\tvar DOM = _ref.DOM,\n\t animate = _ref.Animation.animate,\n\t Extension = _ref.Extension,\n\t performance = _ref.Date.performance,\n\t _ref$View = _ref.View,\n\t rooter = _ref$View.rooter,\n\t destroyer = _ref$View.destroyer,\n\t drawer = _ref$View.drawer,\n\t updater = _ref$View.updater,\n\t styler = _ref$View.styler;\n\n\n\tvar easeOutCubic = Extension.getExtension(Extension.Type.EASING_FUNCTION, 'ease-out-cubic');\n\tvar easeOutSine = Extension.getExtension(Extension.Type.EASING_FUNCTION, 'ease-out-sine');\n\n\tvar draw = function draw(state) {\n\n\t\t// create cards if not already created\n\t\tif (state.isInitialValue()) {\n\n\t\t\t// clear current content\n\t\t\tstate.root.textContent = '';\n\n\t\t\t// value spacer\n\t\t\tstate.spacer = DOM.create('span', 'tick-flip-spacer');\n\t\t\tstate.root.appendChild(state.spacer);\n\n\t\t\t// shaders\n\t\t\tvar shadowTop = DOM.create('span', 'tick-flip-shadow-top tick-flip-shadow tick-flip-front');\n\t\t\tvar shadowBottom = DOM.create('span', 'tick-flip-shadow-bottom tick-flip-shadow tick-flip-back');\n\t\t\tstate.root.appendChild(shadowTop);\n\t\t\tstate.root.appendChild(shadowBottom);\n\n\t\t\t// create shadow element\n\t\t\tstate.shadowCard = DOM.create('span', 'tick-flip-card-shadow');\n\t\t\tstate.root.appendChild(state.shadowCard);\n\t\t}\n\n\t\t// set spacer value\n\t\tstate.spacer.textContent = state.value;\n\n\t\t// don't animate when invisible to the user\n\t\tif (!state.isInitialValue() && !DOM.visible(state.root)) {\n\t\t\tstate.cards.forEach(function (card) {\n\t\t\t\tcard.back = state.value;\n\t\t\t\tcard.front = state.value;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// get previous card\n\t\tvar turningCard = state.cards[state.cards.length - 1];\n\t\tif (turningCard) {\n\t\t\tturningCard.waiting = false;\n\t\t\tturningCard.offset = performance();\n\t\t\tturningCard.back = state.value;\n\t\t}\n\n\t\t// create a quick flipped initial card and then exit\n\t\tif (state.isInitialValue()) {\n\n\t\t\t// create flipped state (bottom)\n\t\t\tvar initialBottomCard = new FlipCard();\n\t\t\tinitialBottomCard.back = state.value;\n\n\t\t\tinitialBottomCard.offset = null;\n\t\t\tinitialBottomCard.progress = 1;\n\n\t\t\tstate.root.insertBefore(initialBottomCard.root, state.root.firstChild);\n\t\t\tstate.cards.push(initialBottomCard);\n\t\t}\n\n\t\t// create a new card\n\t\tvar topCard = new FlipCard();\n\n\t\ttopCard.offset = null;\n\t\ttopCard.progress = 0;\n\t\ttopCard.visual_progress = 0;\n\t\ttopCard.waiting = true;\n\n\t\ttopCard.front = state.value;\n\t\ttopCard.rotate(0);\n\t\t// topCard.rotate(-1); // prevents slight anti-aliasing issues on Safari / Firefox\n\n\t\tstate.root.insertBefore(topCard.root, state.root.firstChild);\n\t\tstate.cards.push(topCard);\n\n\t\tif (!state.animating) {\n\t\t\tstate.animating = true;\n\n\t\t\tvar ease = Extension.getExtension(Extension.Type.EASING_FUNCTION, state.style.flipEasing);\n\n\t\t\tvar tick = function tick() {\n\n\t\t\t\t// find cards that require animation\n\t\t\t\tvar cardsToAnimate = state.cards.filter(function (card) {\n\t\t\t\t\treturn !card.done && !card.waiting;\n\t\t\t\t});\n\n\t\t\t\tif (cardsToAnimate.length === 0) {\n\t\t\t\t\tstate.animating = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// calculate card progress\n\t\t\t\tcardsToAnimate.forEach(function (card) {\n\n\t\t\t\t\tif (card.offset !== null) {\n\t\t\t\t\t\tcard.progress = (performance() - card.offset) / state.style.flipDuration;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (card.progress >= 1) {\n\t\t\t\t\t\tcard.progress = 1;\n\t\t\t\t\t\tcard.done = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tcard.visual_progress = ease(card.progress);\n\t\t\t\t});\n\n\t\t\t\t// sort\n\t\t\t\tvar cardDistance = 0.01;\n\t\t\t\tcardsToAnimate.reverse().forEach(function (card, index) {\n\n\t\t\t\t\tvar previousCard = cardsToAnimate[index - 1];\n\n\t\t\t\t\tif (previousCard && card.visual_progress <= previousCard.visual_progress) {\n\t\t\t\t\t\tcard.visual_progress = previousCard.visual_progress + cardDistance;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tcardsToAnimate.reverse();\n\n\t\t\t\t// update shadows\n\t\t\t\tstate.cards.forEach(function (card, index) {\n\n\t\t\t\t\t// set default shadow and highlight levels based on visual animation progress\n\t\t\t\t\tvar shadowFrontProgress = 1 - Math.abs(card.visual_progress - .5) * 2;\n\t\t\t\t\tvar highlightBackProgress = 1 - (card.visual_progress - .5) / .5;\n\n\t\t\t\t\tcard.shadowFront = shadowFrontProgress;\n\t\t\t\t\tcard.highlightBack = highlightBackProgress;\n\n\t\t\t\t\t// recalculate levels based on other card positions\n\t\t\t\t\tvar cardAbove = state.cards[index + 1];\n\n\t\t\t\t\t// if there's a card above me, my back is visible, and the above card is falling\n\t\t\t\t\tif (cardAbove && card.visual_progress > .5 && card.visual_progress > 0) {\n\t\t\t\t\t\tcard.shadowBack = easeOutCubic(cardAbove.visual_progress);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// update and animate cards\n\t\t\t\tcardsToAnimate.forEach(function (card, index) {\n\n\t\t\t\t\tvar p = card.visual_progress;\n\n\t\t\t\t\tif (p > .5 && !card.done) {\n\t\t\t\t\t\tcard.root.style.zIndex = 10 + index;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcard.root.style.removeProperty('z-index');\n\t\t\t\t\t}\n\n\t\t\t\t\tcard.rotate(p * -180);\n\t\t\t\t});\n\n\t\t\t\t// handle card stack shadow\n\t\t\t\tvar shadowProgress = 0;\n\t\t\t\tvar dist = 1;\n\t\t\t\tcardsToAnimate.forEach(function (card) {\n\t\t\t\t\tvar d = Math.abs(card.visual_progress - .5);\n\t\t\t\t\tif (d < dist) {\n\t\t\t\t\t\tdist = d;\n\t\t\t\t\t\tshadowProgress = card.visual_progress;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tvar s = shadowProgress < .5 ? easeOutSine(shadowProgress / .5) : easeOutSine((1 - shadowProgress) / .5);\n\t\t\t\tstate.shadowCard.style.opacity = s;\n\t\t\t\tDOM.transform(state.shadowCard, 'scaleY', s);\n\n\t\t\t\t// clean up cards that finished animating\n\t\t\t\tstate.cards.filter(function (card) {\n\t\t\t\t\treturn card.done;\n\t\t\t\t}) // gather all done cards\n\t\t\t\t.slice(0, -1) // don't delete the last one\n\t\t\t\t.forEach(function (card) {\n\t\t\t\t\t// let's delete them\n\n\t\t\t\t\t// remove predecessor from cards array\n\t\t\t\t\tstate.cards = state.cards.filter(function (c) {\n\t\t\t\t\t\treturn c !== card;\n\t\t\t\t\t});\n\n\t\t\t\t\t// remove predecessor from the DOM\n\t\t\t\t\tif (card.root.parentNode) {\n\t\t\t\t\t\tstate.root.removeChild(card.root);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trequestAnimationFrame(tick);\n\t\t\t};\n\n\t\t\ttick();\n\t\t}\n\t};\n\n\tvar FlipCard = function () {\n\t\tfunction FlipCard() {\n\t\t\tclassCallCheck(this, FlipCard);\n\n\n\t\t\tthis._root = DOM.create('span', 'tick-flip-card');\n\n\t\t\t// card front\n\t\t\tvar front = DOM.create('span', 'tick-flip-panel-front tick-flip-front tick-flip-panel');\n\t\t\tvar textFront = DOM.create('span', 'tick-flip-panel-front-text');\n\t\t\tvar textFrontWrapper = DOM.create('span', 'tick-flip-panel-text-wrapper');\n\t\t\ttextFront.appendChild(textFrontWrapper);\n\t\t\tvar shadowFront = DOM.create('span', 'tick-flip-panel-front-shadow');\n\t\t\tfront.appendChild(textFront);\n\t\t\tfront.appendChild(shadowFront);\n\n\t\t\tvar back = DOM.create('span', 'tick-flip-panel-back tick-flip-back tick-flip-panel');\n\t\t\tvar textBack = DOM.create('span', 'tick-flip-panel-back-text');\n\t\t\tvar textBackWrapper = DOM.create('span', 'tick-flip-panel-text-wrapper');\n\t\t\ttextBack.appendChild(textBackWrapper);\n\t\t\tvar highlightBack = DOM.create('span', 'tick-flip-panel-back-highlight');\n\t\t\tvar shadowBack = DOM.create('span', 'tick-flip-panel-back-shadow');\n\t\t\tback.appendChild(textBack);\n\t\t\tback.appendChild(highlightBack);\n\t\t\tback.appendChild(shadowBack);\n\n\t\t\t// create card\n\t\t\tthis._root.appendChild(front);\n\t\t\tthis._root.appendChild(back);\n\n\t\t\t// references for animation\n\t\t\tthis._front = front;\n\t\t\tthis._back = back;\n\t\t\tthis._shadowFront = shadowFront;\n\t\t\tthis._shadowBack = shadowBack;\n\t\t\tthis._highlightBack = highlightBack;\n\n\t\t\t// back\n\t\t\tthis._textBack = textBackWrapper;\n\t\t\tthis._textFront = textFrontWrapper;\n\n\t\t\t// front and back values\n\t\t\tthis._frontValue = null;\n\t\t\tthis._backValue = null;\n\t\t}\n\n\t\tcreateClass(FlipCard, [{\n\t\t\tkey: 'rotate',\n\t\t\tvalue: function rotate(degrees) {\n\t\t\t\tthis._front.style.transform = 'rotateX(' + degrees + 'deg)';\n\t\t\t\tthis._back.style.transform = 'rotateX(' + (-180 + degrees) + 'deg)';\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'root',\n\t\t\tget: function get$$1() {\n\t\t\t\treturn this._root;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'front',\n\t\t\tset: function set$$1(value) {\n\t\t\t\tthis._frontValue = value;\n\t\t\t\tthis._textFront.textContent = value;\n\t\t\t},\n\t\t\tget: function get$$1() {\n\t\t\t\treturn this._frontValue;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'back',\n\t\t\tset: function set$$1(value) {\n\t\t\t\tthis._backValue = value;\n\t\t\t\tthis._textBack.textContent = value;\n\t\t\t},\n\t\t\tget: function get$$1() {\n\t\t\t\treturn this._backValue;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'highlightBack',\n\t\t\tset: function set$$1(value) {\n\t\t\t\tthis._highlightBack.style.opacity = value;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'shadowBack',\n\t\t\tset: function set$$1(value) {\n\t\t\t\tthis._shadowBack.style.opacity = value;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'shadowFront',\n\t\t\tset: function set$$1(value) {\n\t\t\t\tthis._shadowFront.style.opacity = value;\n\t\t\t}\n\t\t}]);\n\t\treturn FlipCard;\n\t}();\n\n\t/**\n * Expose\n */\n\n\n\treturn function (root) {\n\n\t\tvar state = {\n\n\t\t\tcards: [],\n\t\t\tlastCard: null,\n\t\t\tinitialCard: null,\n\n\t\t\tshadowAbove: null,\n\t\t\tshadowBelow: null,\n\t\t\tshadowCard: null,\n\n\t\t\tcurrentValue: null,\n\t\t\tlastValue: null,\n\n\t\t\tfront: null,\n\t\t\tback: null\n\t\t};\n\n\t\treturn Object.assign({}, rooter(state, root, 'flip'), updater(state), styler(state, {\n\t\t\tflipDuration: 800,\n\t\t\tflipEasing: 'ease-out-bounce'\n\t\t}), drawer(state, draw), destroyer(state));\n\t};\n});\n\nmodule.exports = index;\n\n\tmodule.exports.identifier = {\n\t\tname:'flip',\n\t\ttype:'view'\n\t};\n return module.exports;\n}()) : null;","import Tick from '../tick/tick.core.module';\nimport Flip from './tick.view.flip.module';\nTick.plugin.add(Flip);\nexport default Tick;","import { ApiService as api } from \"../Services/APIService\";\r\nimport { TemplateService } from \"../Services/TemplateService\";\r\nimport { UtilService as util } from \"../Services/UtilService\";\r\nimport { RecaptchaService as recaptcha } from \"../Services/RecaptchaService\";\r\n\r\nconst devoCardTemplate = 'DevoCard';\r\nconst devoSignUpTemplate = 'DevoSignUp';\r\nconst devoSignUpModalTemplate = 'DevoSignUpModal';\r\nconst devoUnsubscribeTemplate = 'DevoUnsubscribeModal';\r\n\r\nexport class DevoModule {\r\n static async Init() {\r\n DEBUG && console.info('*--> Events Module Init');\r\n\r\n var elements = document.querySelectorAll('[data-component=\"devoCard\"]');\r\n\r\n elements.forEach(element => {\r\n\r\n var topLevelFolder = element.getAttribute('data-topLevelFolder');\r\n\r\n DEBUG && console.info('**************************************************');\r\n DEBUG && console.info(`Element ID: ${element.id}`);\r\n DEBUG && console.info(`Top Level Folder: ${topLevelFolder}`);\r\n DEBUG && console.info('**************************************************');\r\n\r\n this.InitDevoCard(element, topLevelFolder);\r\n });\r\n }\r\n\r\n static async InitSignUp() {\r\n DEBUG && console.info('*--> Devo Signup Init');\r\n\r\n var elements = document.querySelectorAll('[data-component=\"DevoSignUp\"]');\r\n\r\n elements.forEach(element => {\r\n\r\n var didUnsubscribe = element.getAttribute('data-unsubscribe');\r\n\r\n DEBUG && console.info('**************************************************');\r\n DEBUG && console.info(`Element ID: ${element.id}`);\r\n DEBUG && console.info(`Unsubscribed: ${didUnsubscribe}`);\r\n DEBUG && console.info('**************************************************');\r\n\r\n this.InitDevoSignUp(element, didUnsubscribe);\r\n });\r\n }\r\n\r\n static async InitDevoSignUp(element, didUnsubscribe) {\r\n // Init System Modal Here\r\n var data = {};\r\n\r\n var content = await TemplateService.GetRenderedTemplate(devoSignUpTemplate, data);\r\n\r\n element.innerHTML = content;\r\n\r\n const button = document.getElementById(\"btnDevoSignUp\");\r\n\r\n // Add Event Handler\r\n button.addEventListener('click', () => {\r\n console.log('Opening Devo SignUp Modal');\r\n\r\n this.OpenSignUpModal();\r\n })\r\n\r\n if (didUnsubscribe == 'True') { \r\n const baseModal = document.getElementById(\"baseModal\");\r\n\r\n var modalContent = await TemplateService.GetRenderedTemplate(devoUnsubscribeTemplate, data);\r\n baseModal.innerHTML = modalContent;\r\n\r\n util.openModal(baseModal.id);\r\n }\r\n }\r\n\r\n static async OpenSignUpModal() {\r\n // Add self\r\n let self = this;\r\n\r\n // Enumerate Elements\r\n const baseModal = document.getElementById(\"baseModal\");\r\n \r\n var modalContent = await TemplateService.GetRenderedTemplate(devoSignUpModalTemplate, null);\r\n baseModal.innerHTML = modalContent;\r\n\r\n util.openModal(baseModal.id);\r\n\r\n // Setup form \r\n // Wire Up Form Elements\r\n var formElement = document.getElementById('formDevoSignUp');\r\n\r\n // Setup Form\r\n util.formSetup(formElement);\r\n\r\n formElement.addEventListener('submit', function (event) {\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n // Check overall form validity including textareas\r\n if (!formElement.checkValidity()) {\r\n console.info(\"*** => Form INVALID\");\r\n formElement.classList.add('was-validated');\r\n return;\r\n } else {\r\n console.info(\"*** => Form Valid / Submitting\");\r\n // Perform your form submission logic here\r\n var formData = util.getFormDataObject(formElement);\r\n DEBUG && console.info(formData);\r\n\r\n self.SendDevoInvite(formData);\r\n }\r\n\r\n formElement.classList.add('was-validated');\r\n\r\n }, false);\r\n }\r\n\r\n static async SendDevoInvite(formData) {\r\n // Post the Data to the API\r\n try {\r\n var token = await recaptcha.getGoogleRecaptchaToken(siteKey, \"devoSignUp\");\r\n\r\n // Append the callingUrl to the data payload\r\n formData.callingUrl = window.location.href.split('?')[0];\r\n\r\n var results = await api.postApiDataAsync('Devo/DevoSignUp', formData, token, false, false, false);\r\n util.showSuccessToast('Check your email for a confirmation.', 8000, true);\r\n util.closeModal('baseModal');\r\n } catch (error) {\r\n util.showErrorToast('An error occurred while finishing your sign up.', 8000, true);\r\n console.error(error);\r\n } \r\n }\r\n\r\n static async InitDevoCard(element, topLevelFolder) {\r\n var data = await this.GetLatestDevo();\r\n\r\n var spanishMode = false;\r\n if (topLevelFolder.toLowerCase() == 'espanol') {\r\n spanishMode = true;\r\n }\r\n\r\n var devoData = { \"data\": data, \"topLevelFolder\": `${topLevelFolder}`, \"spanishMode\": spanishMode };\r\n\r\n var content = await TemplateService.GetRenderedTemplate(devoCardTemplate, devoData);\r\n\r\n element.innerHTML = content;\r\n }\r\n\r\n\r\n static async GetLatestDevo() {\r\n var data = await api.getData(`Devo/GetLatestDevo`);\r\n DEBUG && console.info(data);\r\n return data;\r\n }\r\n\r\n}","import { ApiService as api } from \"../Services/APIService\";\r\nimport { TemplateService } from \"../Services/TemplateService\";\r\n\r\nconst seriesScrollerTemplate = \"SeriesScroller\";\r\nconst seriesDetailTemplate = \"SeriesDetail\";\r\nconst sermonDetailTemplate = \"SermonDetail\";\r\nconst sermonNotesTemplate = \"SermonDetailNotes\";\r\n\r\nconst sermonLatestTemplate = \"SermonLatest\";\r\nconst sermonLatestCardTemplate = \"SermonLatestCard\";\r\nconst sermonLatestCardWideTemplate = \"SermonLatestCardWide\";\r\n\r\nconst recentSermonScrollerTemplate = \"RecentSermonScroller\";\r\nconst recentSermonsToLoad = 15;\r\n\r\nexport class SermonModule {\r\n\r\n\r\n static SetupSermonInit() {\r\n\r\n DEBUG && console.info('Sermon Detail *--> Init');\r\n\r\n var elements = document.querySelectorAll('[data-component=\"sermonDetail\"]');\r\n\r\n elements.forEach(element => {\r\n var congregationId = element.getAttribute('data-congregationId');\r\n var sermonId = element.getAttribute(\"data-id\");\r\n var sermonDetailsUrl = element.getAttribute('data-sermonUrl');\r\n var seriesDetailUrl = element.getAttribute('data-seriesUrl');\r\n var loadNotes = element.getAttribute('data-loadNotes');\r\n\r\n var openNotes = false;\r\n\r\n if (loadNotes == 'True') {\r\n openNotes = true;\r\n }\r\n\r\n DEBUG && console.info('**************************************************');\r\n DEBUG && console.info('Init Sermon Detail');\r\n DEBUG && console.info(`Element: ${element.id}`);\r\n DEBUG && console.info(`Sermon Details: ${sermonDetailsUrl}`);\r\n DEBUG && console.info(`Series Details: ${seriesDetailUrl}`);\r\n DEBUG && console.info(`Open Notes: ${openNotes}`);\r\n DEBUG && console.info('**************************************************');\r\n\r\n this.InitSermonDetail(element.id, sermonId, sermonDetailsUrl, seriesDetailUrl, openNotes);\r\n });\r\n\r\n\r\n var latestElements = document.querySelectorAll('[data-component=\"sermonLatest\"]');\r\n\r\n latestElements.forEach(element => {\r\n var congregationId = element.getAttribute('data-congregationId');\r\n var sermonDetailsUrl = element.getAttribute('data-sermonUrl');\r\n var seriesType = element.getAttribute('data-seriesType');\r\n var sermonDetailsUrl = element.getAttribute('data-sermonUrl');\r\n var seriesDetailUrl = element.getAttribute('data-seriesUrl');\r\n var requireMedia = element.getAttribute('data-requireMedia');\r\n\r\n DEBUG && console.info('**************************************************');\r\n DEBUG && console.info('Init Sermon Latest');\r\n DEBUG && console.info(`Element:${element.id}`);\r\n DEBUG && console.info(`Congregation:${congregationId}`);\r\n DEBUG && console.info(`Series Type:${seriesType}`);\r\n DEBUG && console.info(`Sermon Details:${sermonDetailsUrl}`);\r\n DEBUG && console.info(`Series Details:${seriesDetailUrl}`);\r\n DEBUG && console.info(`Require Media:${requireMedia}`);\r\n var title = element.getAttribute('data-title');\r\n DEBUG && console.info('**************************************************');\r\n\r\n this.InitSermonLatestDetail(element.id, congregationId, seriesType, sermonDetailsUrl, seriesDetailUrl, requireMedia, sermonLatestTemplate, title);\r\n });\r\n\r\n var latestCardElements = document.querySelectorAll('[data-component=\"sermonLatestCard\"]');\r\n\r\n latestCardElements.forEach(element => {\r\n var congregationId = element.getAttribute('data-congregationId');\r\n var sermonDetailsUrl = element.getAttribute('data-sermonUrl');\r\n var seriesType = element.getAttribute('data-seriesType');\r\n var sermonDetailsUrl = element.getAttribute('data-sermonUrl');\r\n var seriesDetailUrl = element.getAttribute('data-seriesUrl');\r\n var requireMedia = element.getAttribute('data-requireMedia');\r\n var title = element.getAttribute('data-title');\r\n\r\n var editMode = element.getAttribute('data-isEdit');\r\n var isEdit = false;\r\n if (editMode == 'True') {\r\n isEdit = true;\r\n }\r\n\r\n DEBUG && console.info('**************************************************');\r\n DEBUG && console.info('Init Sermon Latest Card');\r\n DEBUG && console.info(`Element:${element.id}`);\r\n DEBUG && console.info(`Congregation:${congregationId}`);\r\n DEBUG && console.info(`Series Type:${seriesType}`);\r\n DEBUG && console.info(`Sermon Details:${sermonDetailsUrl}`);\r\n DEBUG && console.info(`Series Details:${seriesDetailUrl}`);\r\n DEBUG && console.info(`Require Media:${requireMedia}`);\r\n DEBUG && console.info('**************************************************');\r\n\r\n this.InitSermonLatestDetail(element.id, congregationId, seriesType, sermonDetailsUrl, seriesDetailUrl, requireMedia, sermonLatestCardTemplate, title, isEdit);\r\n });\r\n\r\n var latestCardWideElements = document.querySelectorAll('[data-component=\"sermonLatestCardWide\"]');\r\n\r\n latestCardWideElements.forEach(element => {\r\n var congregationId = element.getAttribute('data-congregationId');\r\n var sermonDetailsUrl = element.getAttribute('data-sermonUrl');\r\n var seriesType = element.getAttribute('data-seriesType');\r\n var sermonDetailsUrl = element.getAttribute('data-sermonUrl');\r\n var seriesDetailUrl = element.getAttribute('data-seriesUrl');\r\n var requireMedia = element.getAttribute('data-requireMedia');\r\n var title = element.getAttribute('data-title');\r\n\r\n var editMode = element.getAttribute('data-isEdit');\r\n var isEdit = false;\r\n if (editMode == 'True') {\r\n isEdit = true;\r\n }\r\n\r\n DEBUG && console.info('**************************************************');\r\n DEBUG && console.info('Init Sermon Latest Card');\r\n DEBUG && console.info(`Element:${element.id}`);\r\n DEBUG && console.info(`Congregation:${congregationId}`);\r\n DEBUG && console.info(`Series Type:${seriesType}`);\r\n DEBUG && console.info(`Sermon Details:${sermonDetailsUrl}`);\r\n DEBUG && console.info(`Series Details:${seriesDetailUrl}`);\r\n DEBUG && console.info(`Require Media:${requireMedia}`);\r\n DEBUG && console.info('**************************************************');\r\n\r\n this.InitSermonLatestDetail(element.id, congregationId, seriesType, sermonDetailsUrl, seriesDetailUrl, requireMedia, sermonLatestCardWideTemplate, title, isEdit);\r\n });\r\n }\r\n\r\n\r\n\r\n static SetupSeriesScroller() {\r\n DEBUG && console.info('Media Scroller *--> Init');\r\n var elements = document.querySelectorAll('[data-component=\"mediaScroller\"]');\r\n\r\n elements.forEach(element => {\r\n var congregationId = element.getAttribute('data-congregationId');\r\n var seriesTypeId = element.getAttribute('data-seriesTypeId');\r\n var seriesDetailPageUrl = element.getAttribute('data-seriesDetailUrl');\r\n var sermonDetailPageUrl = element.getAttribute('data-sermonDetailUrl');\r\n var title = element.getAttribute('data-title');\r\n var mode = element.getAttribute('data-mode');\r\n\r\n DEBUG && console.info('**************************************************');\r\n DEBUG && console.info(`Congregation: ${congregationId}`);\r\n DEBUG && console.info(`Series Type: ${seriesTypeId}`);\r\n DEBUG && console.info(`Element ID: ${element.id}`);\r\n DEBUG && console.info(`Series Detail Url: ${seriesDetailPageUrl}`);\r\n DEBUG && console.info(`Sermon Detail Url: ${sermonDetailPageUrl}`);\r\n DEBUG && console.info(`Mode: ${mode}`);\r\n DEBUG && console.info('**************************************************');\r\n\r\n this.InitSeriesScroller(element.id, congregationId, seriesTypeId, seriesDetailPageUrl, sermonDetailPageUrl, mode, title);\r\n });\r\n }\r\n\r\n static async InitSeriesScroller(elementId, congregationId, seriesTypeId, seriesDetailPageUrl, sermonDetailPageUrl, mode, title) { \r\n const container = document.getElementById(elementId);\r\n\r\n if (mode === 'RecentSermons') {\r\n var data = await this.GetRecentSermons(congregationId, sermonDetailPageUrl, seriesDetailPageUrl, true, recentSermonsToLoad);\r\n var modelData = { \"models\": data };\r\n\r\n var content = await TemplateService.GetRenderedTemplate(recentSermonScrollerTemplate, modelData);\r\n\r\n container.innerHTML = content;\r\n }\r\n else {\r\n var data = await this.GetSeries(congregationId, seriesTypeId);\r\n var modelData = { \"models\": data, \"detailPageUrl\": seriesDetailPageUrl, \"title\": title };\r\n\r\n var content = await TemplateService.GetRenderedTemplate(seriesScrollerTemplate, modelData);\r\n\r\n container.innerHTML = content;\r\n }\r\n\r\n }\r\n\r\n static async GetSeries(congregationId, seriesTypeId) {\r\n var data = await api.getData(`Sermon/GetCampusSeries?congregationId=${congregationId}&seriesTypeId=${seriesTypeId}`);\r\n DEBUG && console.info(data);\r\n return data;\r\n }\r\n\r\n static async GetRecentSermons(congregationId, sermonDetailsUrl, seriesDetailUrl, requireMedia, count) {\r\n var data = await api.getData(`Sermon/GetRecentSermons/?congregationId=${congregationId}&sermonDetailsUrl=${sermonDetailsUrl}&seriesDetailUrl=${seriesDetailUrl}&requireMedia=${requireMedia}&Count=${count}`);\r\n\r\n DEBUG && console.info(data);\r\n return data;\r\n }\r\n\r\n\r\n static async InitSeriesDetail(elementId, seriesId, sermonDetailsUrl) {\r\n const container = document.getElementById(elementId);\r\n var data = await this.GetSeriesDetails(seriesId, sermonDetailsUrl);\r\n\r\n var content = await TemplateService.GetRenderedTemplate(seriesDetailTemplate, data);\r\n\r\n container.innerHTML = content;\r\n }\r\n\r\n static async GetSeriesDetails(seriesId, sermonDetailsUrl) {\r\n var data = await api.getData(`Sermon/GetSeries/${seriesId}?sermonDetailsUrl=${sermonDetailsUrl}`);\r\n DEBUG && console.info(data);\r\n return data;\r\n }\r\n\r\n\r\n\r\n static async InitSermonDetail(elementId, sermonId, sermonDetailsUrl, seriesDetailUrl, openNotes) {\r\n let self = this;\r\n\r\n var localTemplate = sermonDetailTemplate;\r\n\r\n if (openNotes) {\r\n localTemplate = sermonNotesTemplate;\r\n }\r\n\r\n const container = document.getElementById(elementId);\r\n var data = await this.GetSermonDetails(sermonId, sermonDetailsUrl, seriesDetailUrl);\r\n\r\n // Check for start QueryString Parameter\r\n // Get the current URL's query string parameters\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n let startValue = null;\r\n // Check if the 'start' parameter exists\r\n if (params.has('start')) {\r\n // Get the value of the 'start' parameter\r\n startValue = params.get('start'); \r\n }\r\n\r\n // Add API Root to Data\r\n data.apiRoot = apiRoot;\r\n\r\n var content = await TemplateService.GetRenderedTemplate(localTemplate, data);\r\n\r\n container.innerHTML = content;\r\n\r\n // Get SRT CC endpoints\r\n var ccData = null;\r\n\r\n if (data.Video && data.Video.Sermon_Link_ID) {\r\n ccData = await api.getData(`Sermon/GetSermonLinkSRTs?sermonLinkId=${data.Video.Sermon_Link_ID}`);\r\n }\r\n\r\n // Initialize the Player\r\n // Get Player Element\r\n const currentSermonPlayerEl = container.querySelectorAll(`div[data-component=\"sermonPlayer\"]`)[0];\r\n\r\n\r\n if (data.Video && data.Video.Link_URL && !openNotes) {\r\n\r\n self.playVideo(data, ccData, currentSermonPlayerEl, false, startValue);\r\n\r\n const btnVideo = document.getElementById('btnVideo');\r\n btnVideo.style.display = \"inline\";\r\n\r\n btnVideo.addEventListener('click', function () {\r\n self.playVideo(data, ccData, currentSermonPlayerEl, true, null);\r\n });\r\n }\r\n\r\n if (data.Audio && data.Audio.Link_URL && !openNotes) {\r\n\r\n if (!data.Video || !data.Video.Link_URL) {\r\n self.playAudio(data, currentSermonPlayerEl, false, startValue);\r\n }\r\n \r\n const btnAudio = document.getElementById('btnAudio');\r\n btnAudio.style.display = \"inline\";\r\n\r\n btnAudio.addEventListener('click', function () {\r\n self.playAudio(data, currentSermonPlayerEl, true, null);\r\n });\r\n }\r\n\r\n if (!openNotes) {\r\n // Get current Sermon li element\r\n const currentSermonEl = document.querySelectorAll(`li[data-id=\"${sermonId}\"]`)[0];\r\n DEBUG && console.info(currentSermonEl);\r\n\r\n // Highlight Current Sermon\r\n const currentSermonImageEl = document.querySelectorAll(`li[data-id=\"${sermonId}\"] > a > figure > picture > img`)[0];\r\n DEBUG && console.info(currentSermonImageEl);\r\n currentSermonImageEl.classList.add('highlighted');\r\n\r\n // Hide if only 1 Sermon\r\n if (data.Series.Sermons.count < 2) {\r\n const seriesScroller = document.getElementById(\"SermonSeriesScroller\");\r\n seriesScroller.style.display = \"none\";\r\n }\r\n\r\n // Create small Timeout before Scrolling to Current Sermon\r\n setTimeout(() => {\r\n // Scroll to Center the current Sermon\r\n this.CenterSermon(currentSermonEl);\r\n }, 350);\r\n }\r\n await this.SetupSermonNotes(sermonId, 'sermonNotes', 'containerSermonNotes', 'btnSermonNotes');\r\n }\r\n\r\n static CenterSermon(currentSermonEl) {\r\n DEBUG && console.info('Centering Current Sermon');\r\n currentSermonEl.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\r\n }\r\n\r\n static async GetSermonDetails(sermonId, sermonDetailsUrl, seriesDetailUrl) {\r\n var data = await api.getData(`Sermon/GetSermon/${sermonId}?sermonDetailsUrl=${sermonDetailsUrl}&seriesDetailUrl=${seriesDetailUrl}`);\r\n DEBUG && console.info(data);\r\n return data;\r\n }\r\n\r\n\r\n\r\n static async InitSermonLatestDetail(elementId, congregationId, seriesType, sermonDetailsUrl, seriesDetailUrl, requireMedia, template, title, isEdit) {\r\n const container = document.getElementById(elementId);\r\n var data = await this.GetLastestSermon(congregationId, seriesType, sermonDetailsUrl, seriesDetailUrl, requireMedia);\r\n\r\n var template = template;\r\n\r\n // Add Title to the Data Object\r\n var sermonObj = {};\r\n sermonObj.title = title;\r\n sermonObj.sermon = data;\r\n sermonObj.isEdit = isEdit;\r\n\r\n var content = await TemplateService.GetRenderedTemplate(template, sermonObj);\r\n\r\n container.innerHTML = content;\r\n\r\n if (!isEdit) {\r\n container.onclick = () => {\r\n window.location.href = data.SermonUrl;\r\n };\r\n }\r\n }\r\n\r\n static async GetLastestSermon(congregationId, seriesType, sermonDetailsUrl, seriesDetailUrl, requireMedia) {\r\n var data = await api.getData(`Sermon/GetLatestSermon/?congregationId=${congregationId}&serviceTypeId=${seriesType}&sermonDetailsUrl=${sermonDetailsUrl}&seriesDetailUrl=${seriesDetailUrl}&requireMedia=${requireMedia}`);\r\n\r\n DEBUG && console.info(data);\r\n return data;\r\n }\r\n\r\n static async SetupSermonNotes(sermonId, sermonNotesElement, sermonNotesContainerElement, sermonNotesButtonElement) {\r\n const elementButton = document.getElementById(sermonNotesButtonElement);\r\n const elementNotesContainer = document.getElementById(sermonNotesContainerElement);\r\n const elementNotes = document.getElementById(sermonNotesElement);\r\n const elementPrintNotes = document.getElementById('sermonPrintNotes');\r\n\r\n var data = await api.getData(`Sermon/GetSermonNotes/${sermonId}`);\r\n\r\n if (data) {\r\n elementNotes.innerHTML = data.Sermon_Notes;\r\n elementPrintNotes.innerHTML = data.Sermon_Notes;\r\n if (elementButton) {\r\n elementButton.addEventListener('click', (evt) => {\r\n if (elementNotesContainer.style.display == 'none') {\r\n elementNotesContainer.style.display = 'block';\r\n }\r\n else {\r\n elementNotesContainer.style.display = 'none';\r\n }\r\n });\r\n\r\n elementButton.style.display = 'block';\r\n }\r\n }\r\n }\r\n\r\n static createTrackList(trackData) {\r\n return trackData.map(track => ({\r\n kind: 'captions',\r\n file: `${apiRoot}/api/Sermon/GetSermonLinkSRT?id=${track.Pocket_Platform_Sermon_Link_Transcription_ID}`,\r\n label: track.Language\r\n }));\r\n}\r\n\r\n static playVideo(data, ccData, currentSermonPlayerEl, switchToVideo, startValue) {\r\n\r\n console.log(data);\r\n\r\n\r\n var videoplaylist = [\r\n {\r\n 'title': `${data.Title}`,\r\n 'image': `${data.Series.Series.Image_URL}`,\r\n 'file': 'https://ep-default-calvaryccm.eastus.streaming.mediakind.com/fff1426c-b562-4a72-a6b8-6e12c33c0cd6/IntroVideo.ism/manifest(format=m3u8-cmaf)'\r\n },\r\n {\r\n 'title': `${data.Title}`,\r\n 'image': `${data.Series.Series.Image_URL}`,\r\n 'file': `${data.Video.Link_URL}`,\r\n 'tracks': this.createTrackList(ccData)\r\n },\r\n {\r\n 'title': `${data.Title}`,\r\n 'image': `${data.Series.Series.Image_URL}`,\r\n 'file': 'https://ep-default-calvaryccm.eastus.streaming.mediakind.com/712c98c5-2506-477e-beea-c59bb39c3d58/Outro.ism/manifest(format=m3u8-cmaf)'\r\n }];\r\n\r\n if (switchToVideo) {\r\n jwplayer(currentSermonPlayerEl.id).remove();\r\n }\r\n\r\n if (startValue === undefined || startValue === null) {\r\n console.info('Playing...');\r\n jwplayer(currentSermonPlayerEl).setup({\r\n height: 'auto',\r\n width: '100%',\r\n nextUpDisplay: false,\r\n playlist: videoplaylist\r\n });\r\n }\r\n else {\r\n console.info('Playing from Start Index');\r\n let playerInstance = jwplayer(currentSermonPlayerEl).setup({\r\n height: 'auto',\r\n width: '100%',\r\n nextUpDisplay: false,\r\n playlist: videoplaylist,\r\n autostart: true,\r\n playlistIndex: 1\r\n });\r\n\r\n // Seek to {startValue} seconds after the player is ready\r\n const sermonSeconds = Number(startValue);\r\n\r\n playerInstance.on('ready', function () {\r\n console.log('JWPlayer Ready Fired...');\r\n });\r\n\r\n playerInstance.on('play', function () {\r\n console.log('JWPlayer Play Fired...');\r\n });\r\n\r\n playerInstance.on('playlistItem', function () {\r\n console.info('On PlayListItem Fired');\r\n // Wait for the media to be playable, then seek\r\n playerInstance.on('time', function (event) {\r\n console.info('On Time Fired');\r\n if (event.position >= 0) {\r\n console.info('Advancing Sermon');\r\n playerInstance.seek(sermonSeconds);\r\n // Unbind 'time' event to prevent repeated seeking\r\n playerInstance.off('time');\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n static playAudio(data, currentSermonPlayerEl, switchToAudio) {\r\n var audioplaylist = [{\r\n 'title': `${data.Title}`,\r\n 'image': `${data.Series.Series.Image_URL}`,\r\n 'file': `${data.Audio.Link_URL}`\r\n }];\r\n\r\n if (switchToAudio) {\r\n jwplayer(currentSermonPlayerEl.id).remove();\r\n }\r\n\r\n jwplayer(currentSermonPlayerEl).setup({\r\n height: 'auto',\r\n width: '100%',\r\n nextUpDisplay: false,\r\n playlist: audioplaylist\r\n });\r\n }\r\n}\r\n\r\n\r\n","\r\nexport class ApiService {\r\n static async getData(endpoint) {\r\n try {\r\n const response = await fetch(`${apiRoot}/api/${endpoint}`);\r\n\r\n if (!response.ok) {\r\n throw new Error(`Request failed with status ${response.status}`);\r\n }\r\n\r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n static getUrlData(url) {\r\n fetch(`${url}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n return data;\r\n }); \r\n }\r\n\r\n static async getTextAsync(endpoint) {\r\n try {\r\n const response = await fetch(`${apiRoot}/api/${endpoint}`, {\r\n headers: {\r\n \"Content-Type\": \"text/plain\"\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Request failed with status ${response.status}`);\r\n }\r\n\r\n const data = await response.text();\r\n return data;\r\n }\r\n catch (error) {\r\n console.error('Error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n static getText(endpoint) {\r\n fetch(`${apiRoot}/${endpoint}`, {\r\n headers: {\r\n \"Content-Type\": \"text/plain\"\r\n }\r\n })\r\n .then(response => response.text())\r\n .then(text => {\r\n return text;\r\n })\r\n .catch(error => console.error(error));\r\n }\r\n\r\n static postData(endpoint, payload) {\r\n try {\r\n\r\n // Configure the request\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\" \r\n },\r\n body: JSON.stringify(payload) // Convert data to JSON format\r\n };\r\n\r\n // Sending the POST request\r\n fetch(`${apiRoot}/${endpoint}`, requestOptions)\r\n .then(response => {\r\n if (!response.ok) {\r\n throw new Error(`Request failed with status ${response.status}`);\r\n }\r\n response.json()\r\n })\r\n .then(obj => { return obj; });\r\n }\r\n catch (error) {\r\n console.error('Error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n static postAuthenticatedData(endpoint, payload) {\r\n return new Promise(function (resolve, reject) {\r\n var authToken = localStorage.getItem(\"mpp-widgets_AuthToken\");\r\n var authExpiration = localStorage.getItem(\"mpp-widgets_ExpiresAfter\");\r\n\r\n if (!authToken || !authExpiration) {\r\n return reject(null);\r\n }\r\n\r\n // Configure the Request\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": `Bearer ${authToken}`\r\n } \r\n };\r\n\r\n if (payload) {\r\n requestOptions.body = JSON.stringify(payload);\r\n }\r\n\r\n // Sending the request\r\n fetch(`${apiRoot}/api/${endpoint}`, requestOptions)\r\n .then(response => response.json())\r\n .then(obj => {\r\n DEBUG && console.info(obj);\r\n return resolve(obj);\r\n })\r\n .catch(error => {\r\n return reject(error);\r\n });\r\n });\r\n }\r\n\r\n static getAuthenticatedData(endpoint) {\r\n return new Promise(function (resolve, reject) {\r\n var authToken = localStorage.getItem(\"mpp-widgets_AuthToken\");\r\n var authExpiration = localStorage.getItem(\"mpp-widgets_ExpiresAfter\");\r\n\r\n if (!authToken || !authExpiration) {\r\n return reject(null);\r\n }\r\n\r\n // Configure the Request\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": `Bearer ${authToken}`\r\n }\r\n };\r\n\r\n // Sending the request\r\n fetch(`${apiRoot}/api/${endpoint}`, requestOptions)\r\n .then(response => response.json())\r\n .then(obj => {\r\n DEBUG && console.info(obj);\r\n return resolve(obj);\r\n })\r\n .catch(error => {\r\n return reject(error);\r\n });\r\n });\r\n\r\n }\r\n\r\n static async getAuthenticatedDataAsync(endpoint) {\r\n var authToken = localStorage.getItem(\"mpp-widgets_AuthToken\");\r\n var authExpiration = localStorage.getItem(\"mpp-widgets_ExpiresAfter\");\r\n\r\n if (!authToken || !authExpiration) {\r\n return reject(null);\r\n }\r\n\r\n // Configure the Request\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": `Bearer ${authToken}`\r\n }\r\n };\r\n\r\n try {\r\n const response = await fetch(`${apiRoot}/api/${endpoint}`, requestOptions);\r\n\r\n if (!response.ok) {\r\n throw new Error(`Request failed with status ${response.status}`);\r\n }\r\n\r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n \r\n\r\n static getApiData(endpoint) {\r\n return new Promise(function (resolve, reject) {\r\n var authToken = localStorage.getItem(\"mpp-widgets_AuthToken\");\r\n var authExpiration = localStorage.getItem(\"mpp-widgets_ExpiresAfter\");\r\n\r\n // Configure the Request\r\n var requestOptions = {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n }\r\n };\r\n\r\n if (authToken && authExpiration && authToken != \"null\") {\r\n requestOptions = {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": `Bearer ${authToken}`\r\n }\r\n }; \r\n }\r\n\r\n // Sending the request\r\n fetch(`${apiRoot}/api/${endpoint}`, requestOptions)\r\n .then(response => response.json())\r\n .then(obj => {\r\n DEBUG && console.info(obj);\r\n return resolve(obj);\r\n })\r\n .catch(error => {\r\n return reject(error);\r\n });\r\n });\r\n\r\n }\r\n\r\n static postApiData(endpoint, payload, token, isFormData, isMultiPart) {\r\n return new Promise(function (resolve, reject) {\r\n var authToken = localStorage.getItem(\"mpp-widgets_AuthToken\");\r\n var authExpiration = localStorage.getItem(\"mpp-widgets_ExpiresAfter\");\r\n\r\n var auth = false;\r\n\r\n if (authToken && authExpiration && authToken != \"null\") {\r\n auth = true;\r\n }\r\n\r\n // Configure the Request\r\n var requestOptions = {\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n if (auth) {\r\n requestOptions.headers[\"Authorization\"] = `Bearer ${authToken}`;\r\n }\r\n\r\n if (token) {\r\n requestOptions.headers[\"Verification-Key\"] = token;\r\n }\r\n \r\n if (payload && isFormData) {\r\n requestOptions.body = payload;\r\n }\r\n else if (payload) {\r\n requestOptions.body = JSON.stringify(payload);\r\n }\r\n\r\n if (isMultiPart) {\r\n // This is AutoDetected\r\n // requestOptions.headers[\"Content-Type\"] = \"multipart/form-data\";\r\n }\r\n else {\r\n requestOptions.headers[\"Content-Type\"] = \"application/json\";\r\n }\r\n\r\n // Sending the request\r\n fetch(`${apiRoot}/api/${endpoint}`, requestOptions)\r\n .then((response) => {\r\n if (!response.ok) {\r\n console.error(response);\r\n return reject(response);\r\n }\r\n response.json();\r\n })\r\n .then(obj => {\r\n return resolve(obj);\r\n })\r\n .catch(error => {\r\n return reject(error);\r\n });\r\n });\r\n }\r\n\r\n\r\n // ********************************************\r\n // Function Get API Data\r\n // ******************************************** \r\n static async getApiDataAsync(endpoint, requireAuth) {\r\n var authObj = this.getAuth(requireAuth);\r\n\r\n // Configure the Request\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n }\r\n };\r\n\r\n if (authObj) {\r\n requestOptions.headers[\"Authorization\"] = `Bearer ${authObj.authToken}`;\r\n }\r\n\r\n try {\r\n const response = await fetch(`${apiRoot}/api/${endpoint}`, requestOptions);\r\n\r\n if (!response.ok) {\r\n throw new Error(`Request failed with status ${response.status}`);\r\n }\r\n\r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n console.error('Error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n // ********************************************\r\n // Function POST API Data\r\n // ******************************************** \r\n static async postApiDataAsync(endpoint, payload, token, isFormData, isMultiPart, requireAuth) {\r\n\r\n var authObj = this.getAuth(requireAuth);\r\n\r\n // Configure the Request\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n if (authObj) {\r\n requestOptions.headers[\"Authorization\"] = `Bearer ${authObj.authToken}`;\r\n }\r\n\r\n if (token) {\r\n requestOptions.headers[\"Verification-Key\"] = token;\r\n }\r\n\r\n if (payload && isFormData) {\r\n requestOptions.body = payload;\r\n }\r\n else if (payload) {\r\n requestOptions.body = JSON.stringify(payload);\r\n }\r\n\r\n if (isMultiPart) {\r\n // This is AutoDetected\r\n // requestOptions.headers[\"Content-Type\"] = \"multipart/form-data\";\r\n }\r\n else {\r\n requestOptions.headers[\"Content-Type\"] = \"application/json\";\r\n }\r\n\r\n try {\r\n const response = await fetch(`${apiRoot}/api/${endpoint}`, requestOptions);\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json();\r\n throw errorData; // This preserves the full error object\r\n }\r\n\r\n const data = await response.json();\r\n return data;\r\n } catch (error) {\r\n // If it's already an object (from our throw above), just rethrow it\r\n if (typeof error === 'object' && error !== null && !(error instanceof Error)) {\r\n throw error;\r\n }\r\n // Otherwise, pass along the error message\r\n console.error('Error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n // ********************************************\r\n // Function Get Auth Object\r\n // ******************************************** \r\n static getAuth(requireAuth) {\r\n var authToken = localStorage.getItem(\"mpp-widgets_AuthToken\");\r\n var authExpiration = localStorage.getItem(\"mpp-widgets_ExpiresAfter\");\r\n\r\n // Check for Auth Requirement \r\n if (!authToken || !authExpiration || authToken == \"null\") {\r\n if (requireAuth) {\r\n throw new Error(\"401 Authorization error\");\r\n }\r\n\r\n return null;\r\n }\r\n else {\r\n var authObj = {};\r\n authObj.authToken = authToken;\r\n authObj.authExpiration = authExpiration;\r\n\r\n return authObj;\r\n }\r\n }\r\n}","\r\nexport class AuthService {\r\n static getAuthUrl() {\r\n\r\n\r\n DEBUG && console.info('==> getAuthUrl()');\r\n\r\n fetch(`${apiRoot}/api/Auth/GetAuthUrl?webRoot=${webRoot}`, {\r\n headers: {\r\n \"Content-Type\": \"text/plain\"\r\n }\r\n })\r\n .then(response => response.text())\r\n .then(obj => {\r\n DEBUG && console.info(obj);\r\n\r\n if (obj) {\r\n sessionStorage.setItem(\"authUrl\", obj);\r\n } \r\n\r\n return obj;\r\n })\r\n .catch(error => console.error(error));\r\n }\r\n\r\n static LogOut() {\r\n\r\n\r\n DEBUG && console.info('==> LogOut()');\r\n\r\n fetch(`${apiRoot}/api/Auth/GetLogOutUrl?webRoot=${webRoot}`, {\r\n headers: {\r\n \"Content-Type\": \"text/plain\"\r\n }\r\n })\r\n .then(response => response.text())\r\n .then(obj => {\r\n DEBUG && console.info(obj);\r\n\r\n obj = obj.replace(\"{token}\", localStorage.getItem('mpp-widgets_IdToken'));\r\n\r\n this.clearAuthTokens();\r\n\r\n var logoutUrl = `${obj}&state=${encodeURIComponent(window.location.href)}`;\r\n\r\n window.location.href = logoutUrl;\r\n })\r\n .catch(error => console.error(error));\r\n }\r\n\r\n static getTokenFromCode(code, webRoot, redirectUrl) {\r\n DEBUG && console.info('==> getTokenFromCode()');\r\n const payload = {\r\n code: code,\r\n webRoot: webRoot\r\n };\r\n\r\n // Configure the request\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(payload) // Convert data to JSON format\r\n };\r\n\r\n // Sending the POST request\r\n fetch(`${apiRoot}/api/Auth/GetTokenFromCode`, requestOptions)\r\n .then(response => response.json())\r\n .then(obj => {\r\n DEBUG && console.info(obj);\r\n\r\n this.setAuthTokens(obj);\r\n\r\n window.location.href = redirectUrl;\r\n })\r\n .catch(error => console.error(error));\r\n }\r\n\r\n static getTokenFromRefesh(refreshToken, webRoot, redirectUrl) {\r\n DEBUG && console.info('==> getTokenFromRefresh()');\r\n const payload = {\r\n refreshToken: code,\r\n webRoot: webRoot\r\n };\r\n\r\n // Configure the request\r\n const requestOptions = {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(payload) // Convert data to JSON format\r\n };\r\n\r\n // Sending the POST request\r\n fetch(`${apiRoot}/api/Auth/GetTokenFromRefresh`, requestOptions)\r\n .then(response => response.json())\r\n .then(obj => {\r\n DEBUG && console.info(obj);\r\n\r\n this.setAuthTokens(obj);\r\n\r\n window.location.href = redirectUrl;\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n this.redirectToAuthentication(); \r\n });\r\n }\r\n\r\n static setAuthTokens(tokens) {\r\n localStorage.setItem('mpp-widgets_AuthToken', tokens.access_token);\r\n localStorage.setItem('mpp-widgets_IdToken', tokens.id_token);\r\n\r\n // Create a new Date object\r\n const myDate = new Date(); // This will create a Date object representing the current date and time.\r\n\r\n // Adding expiration seconds to the Date object\r\n myDate.setSeconds(myDate.getSeconds() + tokens.expires_in);\r\n\r\n localStorage.setItem('mpp-widgets_ExpiresAfter', myDate);\r\n localStorage.setItem('mpp-widgets_Refresh', tokens.refresh_token);\r\n\r\n // Clear any Cached User Object for Refresh\r\n // Configure the Request\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": `Bearer ${tokens.access_token}`\r\n }\r\n };\r\n\r\n // Sending the POST request\r\n fetch(`${apiRoot}/api/User/GetBasicUser?useCached=false`, requestOptions)\r\n .then(response => response.json())\r\n .then(obj => {\r\n DEBUG && console.info(obj);\r\n })\r\n .catch(error => {\r\n });\r\n }\r\n\r\n static clearAuthTokens() {\r\n localStorage.removeItem('mpp-widgets_AuthToken');\r\n localStorage.removeItem('mpp-widgets_IdToken');\r\n localStorage.removeItem('mpp-widgets_ExpiresAfter');\r\n localStorage.removeItem('mpp-widgets_Refresh');\r\n sessionStorage.removeItem('userObj');\r\n }\r\n\r\n static checkAuthenticated() {\r\n DEBUG && console.info('==> checkAuthenticated()');\r\n var authToken = localStorage.getItem(\"mpp-widgets_AuthToken\");\r\n var authExpiration = localStorage.getItem(\"mpp-widgets_ExpiresAfter\");\r\n\r\n if (!authToken || !authExpiration) {\r\n this.clearAuthTokens();\r\n this.redirectToAuthentication();\r\n }\r\n\r\n // Check Authentication Expiration\r\n var expireDT = Date.parse(authExpiration);\r\n var now = new Date();\r\n\r\n if (now > expireDT) {\r\n console.info('Attempting to get new Token via Refresh');\r\n }\r\n }\r\n\r\n static async forceAuthenticated() {\r\n DEBUG && console.info('==> checkAuthenticated()');\r\n const authToken = localStorage.getItem(\"mpp-widgets_AuthToken\");\r\n const authExpiration = localStorage.getItem(\"mpp-widgets_ExpiresAfter\");\r\n\r\n if (!authToken || !authExpiration || authToken == 'null' || authExpiration == 'null') {\r\n this.clearAuthTokens();\r\n this.redirectToAuthentication();\r\n return Promise.reject('Not authenticated');\r\n }\r\n\r\n const expireDT = Date.parse(authExpiration);\r\n const now = new Date();\r\n\r\n if (now > expireDT) {\r\n console.info('Attempting to get new Token via Refresh');\r\n // Simulate refreshing token if necessary\r\n const refreshed = await this.refreshToken(); // Assuming you have a refreshToken method\r\n if (!refreshed) {\r\n this.clearAuthTokens();\r\n this.redirectToAuthentication();\r\n return Promise.reject('Token refresh failed');\r\n }\r\n }\r\n\r\n return Promise.resolve('Authenticated');\r\n }\r\n\r\n static getAuthentication() {\r\n return new Promise(function (resolve, reject) {\r\n var authToken = localStorage.getItem(\"mpp-widgets_AuthToken\");\r\n var authExpiration = localStorage.getItem(\"mpp-widgets_ExpiresAfter\");\r\n\r\n\r\n if (authToken === null || authToken === undefined || authToken == \"null\") {\r\n return resolve(null);\r\n }\r\n\r\n if (authExpiration === null || authExpiration === undefined || authExpiration == \"null\") {\r\n return resolve(null);\r\n }\r\n\r\n var authObj = {};\r\n authObj.authToken = authToken;\r\n authObj.authExpiration = authExpiration;\r\n\r\n // Retrieve session userObect\r\n var userObj = sessionStorage.getItem('userObj');\r\n\r\n if (userObj) {\r\n try {\r\n // Attempt to parse Session UserObject\r\n var userJsonObj = JSON.parse(userObj);\r\n\r\n console.log(\"User Auth Object\")\r\n console.log(userJsonObj);\r\n console.log(\"END User Auth Object\")\r\n\r\n // Check for valid expiration\r\n\r\n return resolve(userJsonObj);\r\n }\r\n catch { }\r\n }\r\n\r\n // Configure the Request\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Authorization\": `Bearer ${authToken}`\r\n }\r\n };\r\n\r\n // Sending the POST request\r\n fetch(`${apiRoot}/api/User/GetBasicUser`, requestOptions)\r\n .then(response => response.json())\r\n .then(obj => {\r\n DEBUG && console.info(obj);\r\n\r\n // Set User Session Object\r\n sessionStorage.setItem('userObj', JSON.stringify(obj));\r\n\r\n return resolve(obj);\r\n })\r\n .catch(error => {\r\n return reject(error);\r\n });\r\n });\r\n }\r\n\r\n static redirectToAuthentication() {\r\n var authUrl = sessionStorage.getItem(\"authUrl\");\r\n window.location.href = `${authUrl}&state=${window.location.href}`;\r\n }\r\n\r\n static initAuthButtons() {\r\n\r\n var elements = document.querySelectorAll('[data-component=\"loginLink\"]');\r\n\r\n elements.forEach(element => {\r\n DEBUG && console.info('**************************************************');\r\n DEBUG && console.info(`Element ID: ${element.id}`);\r\n DEBUG && console.info(`==> Added Auth Callback `)\r\n DEBUG && console.info('**************************************************');\r\n\r\n // Check if User if Logged In\r\n this.getAuthentication().then(authObj => {\r\n if (authObj === null) {\r\n // Add an onclick event handler to element\r\n element.addEventListener(\"click\", function () {\r\n var authUrl = sessionStorage.getItem(\"authUrl\");\r\n window.location.href = `${authUrl}&state=${window.location.href}`;\r\n });\r\n }\r\n else {\r\n this.showUserMenu(authObj, element);\r\n } \r\n }); \r\n });\r\n }\r\n\r\n static showUserMenu(authObj, element) {\r\n\r\n let self = this;\r\n \r\n DEBUG && console.info('**************************************************');\r\n DEBUG && console.info(`==> Authenticated User `);\r\n DEBUG && console.info(`==> Setup User Menu `);\r\n DEBUG && console.info('**************************************************');\r\n\r\n var userMenuTemplate = `\r\n\r\n
\r\n \r\n \"Image\r\n \r\n \r\n
\r\n `;\r\n\r\n var parentElement = element.parentNode;\r\n\r\n parentElement.innerHTML =\r\n userMenuTemplate\r\n .replace(\"{Image}\", authObj.ThumbnailImage)\r\n .replace(\"{FirstName}\", authObj.Nickname)\r\n .replace(\"{LastName}\", authObj.Last_Name);\r\n\r\n // Update Links\r\n var loginUserProfileLink = document.getElementById(\"loginUserProfileLink\");\r\n loginUserProfileLink.addEventListener('click', function (event) {\r\n \r\n event.preventDefault(); \r\n const profileModal = document.getElementById('userProfileModal');\r\n let modal = bootstrap.Modal.getOrCreateInstance(profileModal)\r\n modal.show();\r\n });\r\n\r\n var loginUserLogutLink = document.getElementById(\"loginUserLogutLink\");\r\n\r\n loginUserLogutLink.addEventListener('click', function (event) {\r\n \r\n event.preventDefault(); \r\n // Process Logout\r\n self.LogOut();\r\n });\r\n\r\n if (authObj.isGroupLeader || authObj.isMinistryLeader) {\r\n const groupLeaderLink = document.getElementById(\"groupLeaderLink\");\r\n\r\n let self = this;\r\n\r\n groupLeaderLink.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n // Load Devo Writer JS\r\n var scriptUrl = \"/assets/js/dist/components/groupleaderviewcomponent.bundle.js\";\r\n\r\n self.loadScript(scriptUrl, function () {\r\n console.log(\"GroupLeader script has been loaded!\");\r\n });\r\n });\r\n\r\n // Changed this to Visible\r\n const groupLeaderMenuItem = document.getElementById(\"groupLeaderMenuItem\");\r\n groupLeaderMenuItem.style.display = 'block';\r\n }\r\n\r\n if (authObj.isDevoWriter) {\r\n // Show Devo Writer Link in User Menu\r\n const devoWriterLink = document.getElementById(\"devoWriterLink\");\r\n\r\n let self = this;\r\n\r\n devoWriterLink.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n // Load Devo Writer JS\r\n var scriptUrl = \"/assets/js/dist/components/devowriterviewcomponent.bundle.js\";\r\n\r\n self.loadScript(scriptUrl, function () {\r\n console.log(\"DevoWriter script has been loaded!\");\r\n });\r\n\r\n });\r\n\r\n const devoWriterMenuItem = document.getElementById(\"devoWriterMenuItem\");\r\n devoWriterMenuItem.style.display = 'block';\r\n }\r\n }\r\n\r\n // Load Script Into HEAD\r\n static loadScript(url, callback) {\r\n var script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = url;\r\n script.onload = callback;\r\n // Optional: callback to be executed once the script is loaded\r\n // Optional: make use of IFFE to immediately invoke\r\n\r\n document.head.appendChild(script);\r\n }\r\n\r\n}","export class ConfigService {\r\n static ccmClientCookie() {\r\n return 'CCMClient';\r\n }\r\n\r\n static cookieCampus() {\r\n return \"CalvaryHomeCampus\";\r\n }\r\n\r\n}","import { UtilService as util } from \"../Services/UtilService\";\r\n\r\nexport class LangService {\r\n static async load(component, defaultLanguage) {\r\n var lang = await this.getCurrentLanguage(defaultLanguage);\r\n return await this.loadData(component, lang);\r\n }\r\n\r\n static async loadData(component, language) {\r\n try {\r\n // Fetch the common language file\r\n const commonResponse = await fetch(`/assets/js/dist/languages/common-${language}.json?v=${build}`);\r\n if (!commonResponse.ok) {\r\n throw new Error(`Failed to load common language file with status ${commonResponse.status}`);\r\n }\r\n const commonData = await commonResponse.json();\r\n\r\n let mergedData;\r\n\r\n if (component.toLowerCase() === 'common') {\r\n // If the component is \"common\", only use the commonData.\r\n mergedData = { ...commonData };\r\n } else {\r\n // Fetch the main language file for the component\r\n const componentResponse = await fetch(`/assets/js/dist/languages/${component}-${language}.json?v=${build}`);\r\n if (!componentResponse.ok) {\r\n throw new Error(`Failed to load component language file with status ${componentResponse.status}`);\r\n }\r\n const componentData = await componentResponse.json();\r\n // Merge the common and component data\r\n mergedData = { ...commonData, ...componentData };\r\n }\r\n\r\n mergedData.language = language;\r\n return mergedData;\r\n } catch (error) {\r\n console.error('Error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n static getCurrentLanguage(defaultLanguage) {\r\n // Check for 'lang' query parameter\r\n const queryLang = util.getQueryParam('lang');\r\n if (queryLang) {\r\n console.info(`===> Language Service: Found Query String:${queryLang}`);\r\n util.writeSessionStorageValue('currentLanguage', queryLang.substring(0, 2));\r\n return queryLang.substring(0, 2); // Return first two letters of the parameter\r\n }\r\n\r\n // Component level configuration\r\n if (defaultLanguage) {\r\n console.info(`===> Language Service: Default Detected:${defaultLanguage}`);\r\n util.writeSessionStorageValue('currentLanguage', defaultLanguage);\r\n return defaultLanguage;\r\n }\r\n\r\n // Check LocalStorage Value\r\n if (util.checkSessionStorageItem('currentLanguage')) {\r\n var langToReturn = util.readSessionStorageValue('currentLanguage');\r\n console.info(`===> Language Service: Found Session Storage:${langToReturn}`);\r\n if (langToReturn.toLocaleLowerCase() == 'en-us') {\r\n return 'en';\r\n }\r\n return langToReturn;\r\n }\r\n\r\n // Fallback to browser's language settings\r\n const browserLang = navigator.language || navigator.userLanguage;\r\n if (browserLang) {\r\n console.info(`===> Language Service: Browser Language:${browserLang.substring(0, 2) }`);\r\n return browserLang.substring(0, 2); // Return first two letters of the browser language\r\n }\r\n\r\n // Default to 'en'\r\n return 'en';\r\n }\r\n\r\n\r\n\r\n}","export class RecaptchaService {\r\n static async loadRecaptcha(siteKey) {\r\n const scriptUrl = `https://www.google.com/recaptcha/api.js?render=${siteKey}`;\r\n\r\n // Check if the script is already loaded\r\n if (!document.querySelector(`script[src=\"${scriptUrl}\"]`)) {\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement(\"script\");\r\n script.src = scriptUrl;\r\n script.async = true;\r\n script.defer = true;\r\n script.onload = resolve; // Resolve the promise once the script loads\r\n script.onerror = reject; // Reject the promise if there's an error\r\n document.head.appendChild(script);\r\n });\r\n }\r\n // If the script is already loaded, return immediately\r\n return Promise.resolve();\r\n }\r\n\r\n static async getGoogleRecaptchaToken(siteKey, action = \"default\") {\r\n // Ensure the reCAPTCHA script is loaded\r\n await this.loadRecaptcha(siteKey);\r\n\r\n // Wait for the grecaptcha object to be ready\r\n if (window.grecaptcha) {\r\n return new Promise((resolve, reject) => {\r\n window.grecaptcha.ready(() => {\r\n window.grecaptcha\r\n .execute(siteKey, { action })\r\n .then(resolve) // Resolve with the token\r\n .catch(reject); // Reject if there's an error\r\n });\r\n });\r\n } else {\r\n throw new Error(\"reCAPTCHA script failed to load properly.\");\r\n }\r\n }\r\n}","/*\n * liquidjs@10.18.0, https://github.com/harttle/liquidjs\n * (c) 2016-2024 harttle\n * Released under the MIT License.\n */\nclass Token {\r\n constructor(kind, input, begin, end, file) {\r\n this.kind = kind;\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n getText() {\r\n return this.input.slice(this.begin, this.end);\r\n }\r\n getPosition() {\r\n let [row, col] = [1, 1];\r\n for (let i = 0; i < this.begin; i++) {\r\n if (this.input[i] === '\\n') {\r\n row++;\r\n col = 1;\r\n }\r\n else\r\n col++;\r\n }\r\n return [row, col];\r\n }\r\n size() {\r\n return this.end - this.begin;\r\n }\r\n}\n\nclass Drop {\r\n liquidMethodMissing(key) {\r\n return undefined;\r\n }\r\n}\n\nconst toString$1 = Object.prototype.toString;\r\nconst toLowerCase = String.prototype.toLowerCase;\r\nconst hasOwnProperty = Object.hasOwnProperty;\r\nfunction isString(value) {\r\n return typeof value === 'string';\r\n}\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction isFunction(value) {\r\n return typeof value === 'function';\r\n}\r\nfunction isPromise(val) {\r\n return val && isFunction(val.then);\r\n}\r\nfunction isIterator(val) {\r\n return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return);\r\n}\r\nfunction escapeRegex(str) {\r\n return str.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\r\n}\r\nfunction stringify(value) {\r\n value = toValue(value);\r\n if (isString(value))\r\n return value;\r\n if (isNil(value))\r\n return '';\r\n if (isArray(value))\r\n return value.map(x => stringify(x)).join('');\r\n return String(value);\r\n}\r\nfunction toEnumerable(val) {\r\n val = toValue(val);\r\n if (isArray(val))\r\n return val;\r\n if (isString(val) && val.length > 0)\r\n return [val];\r\n if (isIterable(val))\r\n return Array.from(val);\r\n if (isObject(val))\r\n return Object.keys(val).map((key) => [key, val[key]]);\r\n return [];\r\n}\r\nfunction toArray(val) {\r\n val = toValue(val);\r\n if (isNil(val))\r\n return [];\r\n if (isArray(val))\r\n return val;\r\n return [val];\r\n}\r\nfunction toValue(value) {\r\n return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value;\r\n}\r\nfunction toNumber(value) {\r\n value = Number(value);\r\n return isNaN(value) ? 0 : value;\r\n}\r\nfunction isNumber(value) {\r\n return typeof value === 'number';\r\n}\r\nfunction toLiquid(value) {\r\n if (value && isFunction(value.toLiquid))\r\n return toLiquid(value.toLiquid());\r\n return value;\r\n}\r\nfunction isNil(value) {\r\n return value == null;\r\n}\r\nfunction isUndefined(value) {\r\n return value === undefined;\r\n}\r\nfunction isArray(value) {\r\n // be compatible with IE 8\r\n return toString$1.call(value) === '[object Array]';\r\n}\r\nfunction isIterable(value) {\r\n return isObject(value) && Symbol.iterator in value;\r\n}\r\n/*\r\n * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property.\r\n * The iteratee is invoked with three arguments: (value, key, object).\r\n * Iteratee functions may exit iteration early by explicitly returning false.\r\n * @param {Object} object The object to iterate over.\r\n * @param {Function} iteratee The function invoked per iteration.\r\n * @return {Object} Returns object.\r\n */\r\nfunction forOwn(obj, iteratee) {\r\n obj = obj || {};\r\n for (const k in obj) {\r\n if (hasOwnProperty.call(obj, k)) {\r\n if (iteratee(obj[k], k, obj) === false)\r\n break;\r\n }\r\n }\r\n return obj;\r\n}\r\nfunction last(arr) {\r\n return arr[arr.length - 1];\r\n}\r\n/*\r\n * Checks if value is the language type of Object.\r\n * (e.g. arrays, functions, objects, regexes, new Number(0), and new String(''))\r\n * @param {any} value The value to check.\r\n * @return {Boolean} Returns true if value is an object, else false.\r\n */\r\nfunction isObject(value) {\r\n const type = typeof value;\r\n return value !== null && (type === 'object' || type === 'function');\r\n}\r\nfunction range(start, stop, step = 1) {\r\n const arr = [];\r\n for (let i = start; i < stop; i += step) {\r\n arr.push(i);\r\n }\r\n return arr;\r\n}\r\nfunction padStart(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => ch + str);\r\n}\r\nfunction padEnd(str, length, ch = ' ') {\r\n return pad(str, length, ch, (str, ch) => str + ch);\r\n}\r\nfunction pad(str, length, ch, add) {\r\n str = String(str);\r\n let n = length - str.length;\r\n while (n-- > 0)\r\n str = add(str, ch);\r\n return str;\r\n}\r\nfunction identify(val) {\r\n return val;\r\n}\r\nfunction changeCase(str) {\r\n const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z');\r\n return hasLowerCase ? str.toUpperCase() : str.toLowerCase();\r\n}\r\nfunction ellipsis(str, N) {\r\n return str.length > N ? str.slice(0, N - 3) + '...' : str;\r\n}\r\n// compare string in case-insensitive way, undefined values to the tail\r\nfunction caseInsensitiveCompare(a, b) {\r\n if (a == null && b == null)\r\n return 0;\r\n if (a == null)\r\n return 1;\r\n if (b == null)\r\n return -1;\r\n a = toLowerCase.call(a);\r\n b = toLowerCase.call(b);\r\n if (a < b)\r\n return -1;\r\n if (a > b)\r\n return 1;\r\n return 0;\r\n}\r\nfunction argumentsToValue(fn) {\r\n return function (...args) { return fn.call(this, ...args.map(toValue)); };\r\n}\r\nfunction escapeRegExp(text) {\r\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\r\n}\n\n/**\r\n * targeting ES5, extends Error won't create a proper prototype chain, need a trait to keep track of classes\r\n */\r\nconst TRAIT = '__liquidClass__';\r\nclass LiquidError extends Error {\r\n constructor(err, token) {\r\n /**\r\n * note: for ES5 targeting, `this` will be replaced by return value of Error(),\r\n * thus everything on `this` will be lost, avoid calling `LiquidError` methods here\r\n */\r\n super(typeof err === 'string' ? err : err.message);\r\n this.context = '';\r\n if (typeof err !== 'string')\r\n Object.defineProperty(this, 'originalError', { value: err, enumerable: false });\r\n Object.defineProperty(this, 'token', { value: token, enumerable: false });\r\n Object.defineProperty(this, TRAIT, { value: 'LiquidError', enumerable: false });\r\n }\r\n update() {\r\n Object.defineProperty(this, 'context', { value: mkContext(this.token), enumerable: false });\r\n this.message = mkMessage(this.message, this.token);\r\n this.stack = this.message + '\\n' + this.context +\r\n '\\n' + this.stack;\r\n if (this.originalError)\r\n this.stack += '\\nFrom ' + this.originalError.stack;\r\n }\r\n static is(obj) {\r\n return (obj === null || obj === void 0 ? void 0 : obj[TRAIT]) === 'LiquidError';\r\n }\r\n}\r\nclass TokenizationError extends LiquidError {\r\n constructor(message, token) {\r\n super(message, token);\r\n this.name = 'TokenizationError';\r\n super.update();\r\n }\r\n}\r\nclass ParseError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'ParseError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\nclass RenderError extends LiquidError {\r\n constructor(err, tpl) {\r\n super(err, tpl.token);\r\n this.name = 'RenderError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n static is(obj) {\r\n return obj.name === 'RenderError';\r\n }\r\n}\r\nclass LiquidErrors extends LiquidError {\r\n constructor(errors) {\r\n super(errors[0], errors[0].token);\r\n this.errors = errors;\r\n this.name = 'LiquidErrors';\r\n const s = errors.length > 1 ? 's' : '';\r\n this.message = `${errors.length} error${s} found`;\r\n super.update();\r\n }\r\n static is(obj) {\r\n return obj.name === 'LiquidErrors';\r\n }\r\n}\r\nclass UndefinedVariableError extends LiquidError {\r\n constructor(err, token) {\r\n super(err, token);\r\n this.name = 'UndefinedVariableError';\r\n this.message = err.message;\r\n super.update();\r\n }\r\n}\r\n// only used internally; raised where we don't have token information,\r\n// so it can't be an UndefinedVariableError.\r\nclass InternalUndefinedVariableError extends Error {\r\n constructor(variableName) {\r\n super(`undefined variable: ${variableName}`);\r\n this.name = 'InternalUndefinedVariableError';\r\n this.variableName = variableName;\r\n }\r\n}\r\nclass AssertionError extends Error {\r\n constructor(message) {\r\n super(message);\r\n this.name = 'AssertionError';\r\n this.message = message + '';\r\n }\r\n}\r\nfunction mkContext(token) {\r\n const [line, col] = token.getPosition();\r\n const lines = token.input.split('\\n');\r\n const begin = Math.max(line - 2, 1);\r\n const end = Math.min(line + 3, lines.length);\r\n const context = range(begin, end + 1)\r\n .map(lineNumber => {\r\n const rowIndicator = (lineNumber === line) ? '>> ' : ' ';\r\n const num = padStart(String(lineNumber), String(end).length);\r\n let text = `${rowIndicator}${num}| `;\r\n const colIndicator = lineNumber === line\r\n ? '\\n' + padStart('^', col + text.length)\r\n : '';\r\n text += lines[lineNumber - 1];\r\n text += colIndicator;\r\n return text;\r\n })\r\n .join('\\n');\r\n return context;\r\n}\r\nfunction mkMessage(msg, token) {\r\n if (token.file)\r\n msg += `, file:${token.file}`;\r\n const [line, col] = token.getPosition();\r\n msg += `, line:${line}, col:${col}`;\r\n return msg;\r\n}\n\n// **DO NOT CHANGE THIS FILE**\r\n//\r\n// This file is generated by bin/character-gen.js\r\n// bitmask character types to boost performance\r\nconst TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0];\r\nconst WORD = 1;\r\nconst BLANK = 4;\r\nconst QUOTE = 8;\r\nconst INLINE_BLANK = 16;\r\nconst NUMBER = 32;\r\nconst SIGN = 64;\r\nconst PUNCTUATION = 128;\r\nfunction isWord(char) {\r\n const code = char.charCodeAt(0);\r\n return code >= 128 ? !TYPES[code] : !!(TYPES[code] & WORD);\r\n}\r\nTYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK;\r\nTYPES[8220] = TYPES[8221] = PUNCTUATION;\n\nfunction assert(predicate, message) {\r\n if (!predicate) {\r\n const msg = typeof message === 'function'\r\n ? message()\r\n : (message || `expect ${predicate} to be true`);\r\n throw new AssertionError(msg);\r\n }\r\n}\r\nfunction assertEmpty(predicate, message = `unexpected ${JSON.stringify(predicate)}`) {\r\n assert(!predicate, message);\r\n}\n\nclass NullDrop extends Drop {\r\n equals(value) {\r\n return isNil(toValue(value));\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return null;\r\n }\r\n}\n\nclass EmptyDrop extends Drop {\r\n equals(value) {\r\n if (value instanceof EmptyDrop)\r\n return false;\r\n value = toValue(value);\r\n if (isString(value) || isArray(value))\r\n return value.length === 0;\r\n if (isObject(value))\r\n return Object.keys(value).length === 0;\r\n return false;\r\n }\r\n gt() {\r\n return false;\r\n }\r\n geq() {\r\n return false;\r\n }\r\n lt() {\r\n return false;\r\n }\r\n leq() {\r\n return false;\r\n }\r\n valueOf() {\r\n return '';\r\n }\r\n}\n\nclass BlankDrop extends EmptyDrop {\r\n equals(value) {\r\n if (value === false)\r\n return true;\r\n if (isNil(toValue(value)))\r\n return true;\r\n if (isString(value))\r\n return /^\\s*$/.test(value);\r\n return super.equals(value);\r\n }\r\n}\n\nclass ForloopDrop extends Drop {\r\n constructor(length, collection, variable) {\r\n super();\r\n this.i = 0;\r\n this.length = length;\r\n this.name = `${variable}-${collection}`;\r\n }\r\n next() {\r\n this.i++;\r\n }\r\n index0() {\r\n return this.i;\r\n }\r\n index() {\r\n return this.i + 1;\r\n }\r\n first() {\r\n return this.i === 0;\r\n }\r\n last() {\r\n return this.i === this.length - 1;\r\n }\r\n rindex() {\r\n return this.length - this.i;\r\n }\r\n rindex0() {\r\n return this.length - this.i - 1;\r\n }\r\n valueOf() {\r\n return JSON.stringify(this);\r\n }\r\n}\n\nclass BlockDrop extends Drop {\r\n constructor(\r\n // the block render from layout template\r\n superBlockRender = () => '') {\r\n super();\r\n this.superBlockRender = superBlockRender;\r\n }\r\n /**\r\n * Provide parent access in child block by\r\n * {{ block.super }}\r\n */\r\n super() {\r\n return this.superBlockRender();\r\n }\r\n}\n\nfunction isComparable(arg) {\r\n return (arg &&\r\n isFunction(arg.equals) &&\r\n isFunction(arg.gt) &&\r\n isFunction(arg.geq) &&\r\n isFunction(arg.lt) &&\r\n isFunction(arg.leq));\r\n}\n\nconst nil = new NullDrop();\r\nconst literalValues = {\r\n 'true': true,\r\n 'false': false,\r\n 'nil': nil,\r\n 'null': nil,\r\n 'empty': new EmptyDrop(),\r\n 'blank': new BlankDrop()\r\n};\n\nfunction createTrie(input) {\r\n const trie = {};\r\n for (const [name, data] of Object.entries(input)) {\r\n let node = trie;\r\n for (let i = 0; i < name.length; i++) {\r\n const c = name[i];\r\n node[c] = node[c] || {};\r\n if (i === name.length - 1 && isWord(name[i])) {\r\n node[c].needBoundary = true;\r\n }\r\n node = node[c];\r\n }\r\n node.data = data;\r\n node.end = true;\r\n }\r\n return trie;\r\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\n// convert an async iterator to a Promise\r\nfunction toPromise(val) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (!isIterator(val))\r\n return val;\r\n let value;\r\n let done = false;\r\n let next = 'next';\r\n do {\r\n const state = val[next](value);\r\n done = state.done;\r\n value = state.value;\r\n next = 'next';\r\n try {\r\n if (isIterator(value))\r\n value = toPromise(value);\r\n if (isPromise(value))\r\n value = yield value;\r\n }\r\n catch (err) {\r\n next = 'throw';\r\n value = err;\r\n }\r\n } while (!done);\r\n return value;\r\n });\r\n}\r\n// convert an async iterator to a value in a synchronous manner\r\nfunction toValueSync(val) {\r\n if (!isIterator(val))\r\n return val;\r\n let value;\r\n let done = false;\r\n let next = 'next';\r\n do {\r\n const state = val[next](value);\r\n done = state.done;\r\n value = state.value;\r\n next = 'next';\r\n if (isIterator(value)) {\r\n try {\r\n value = toValueSync(value);\r\n }\r\n catch (err) {\r\n next = 'throw';\r\n value = err;\r\n }\r\n }\r\n } while (!done);\r\n return value;\r\n}\n\nconst rFormat = /%([-_0^#:]+)?(\\d+)?([EO])?(.)/;\r\n// prototype extensions\r\nfunction daysInMonth(d) {\r\n const feb = isLeapYear(d) ? 29 : 28;\r\n return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n}\r\nfunction getDayOfYear(d) {\r\n let num = 0;\r\n for (let i = 0; i < d.getMonth(); ++i) {\r\n num += daysInMonth(d)[i];\r\n }\r\n return num + d.getDate();\r\n}\r\nfunction getWeekOfYear(d, startDay) {\r\n // Skip to startDay of this week\r\n const now = getDayOfYear(d) + (startDay - d.getDay());\r\n // Find the first startDay of the year\r\n const jan1 = new Date(d.getFullYear(), 0, 1);\r\n const then = (7 - jan1.getDay() + startDay);\r\n return String(Math.floor((now - then) / 7) + 1);\r\n}\r\nfunction isLeapYear(d) {\r\n const year = d.getFullYear();\r\n return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)));\r\n}\r\nfunction ordinal(d) {\r\n const date = d.getDate();\r\n if ([11, 12, 13].includes(date))\r\n return 'th';\r\n switch (date % 10) {\r\n case 1: return 'st';\r\n case 2: return 'nd';\r\n case 3: return 'rd';\r\n default: return 'th';\r\n }\r\n}\r\nfunction century(d) {\r\n return parseInt(d.getFullYear().toString().substring(0, 2), 10);\r\n}\r\n// default to 0\r\nconst padWidths = {\r\n d: 2,\r\n e: 2,\r\n H: 2,\r\n I: 2,\r\n j: 3,\r\n k: 2,\r\n l: 2,\r\n L: 3,\r\n m: 2,\r\n M: 2,\r\n S: 2,\r\n U: 2,\r\n W: 2\r\n};\r\nconst padSpaceChars = new Set('aAbBceklpP');\r\nfunction getTimezoneOffset(d, opts) {\r\n const nOffset = Math.abs(d.getTimezoneOffset());\r\n const h = Math.floor(nOffset / 60);\r\n const m = nOffset % 60;\r\n return (d.getTimezoneOffset() > 0 ? '-' : '+') +\r\n padStart(h, 2, '0') +\r\n (opts.flags[':'] ? ':' : '') +\r\n padStart(m, 2, '0');\r\n}\r\nconst formatCodes = {\r\n a: (d) => d.getShortWeekdayName(),\r\n A: (d) => d.getLongWeekdayName(),\r\n b: (d) => d.getShortMonthName(),\r\n B: (d) => d.getLongMonthName(),\r\n c: (d) => d.toLocaleString(),\r\n C: (d) => century(d),\r\n d: (d) => d.getDate(),\r\n e: (d) => d.getDate(),\r\n H: (d) => d.getHours(),\r\n I: (d) => String(d.getHours() % 12 || 12),\r\n j: (d) => getDayOfYear(d),\r\n k: (d) => d.getHours(),\r\n l: (d) => String(d.getHours() % 12 || 12),\r\n L: (d) => d.getMilliseconds(),\r\n m: (d) => d.getMonth() + 1,\r\n M: (d) => d.getMinutes(),\r\n N: (d, opts) => {\r\n const width = Number(opts.width) || 9;\r\n const str = String(d.getMilliseconds()).slice(0, width);\r\n return padEnd(str, width, '0');\r\n },\r\n p: (d) => (d.getHours() < 12 ? 'AM' : 'PM'),\r\n P: (d) => (d.getHours() < 12 ? 'am' : 'pm'),\r\n q: (d) => ordinal(d),\r\n s: (d) => Math.round(d.getTime() / 1000),\r\n S: (d) => d.getSeconds(),\r\n u: (d) => d.getDay() || 7,\r\n U: (d) => getWeekOfYear(d, 0),\r\n w: (d) => d.getDay(),\r\n W: (d) => getWeekOfYear(d, 1),\r\n x: (d) => d.toLocaleDateString(),\r\n X: (d) => d.toLocaleTimeString(),\r\n y: (d) => d.getFullYear().toString().slice(2, 4),\r\n Y: (d) => d.getFullYear(),\r\n z: getTimezoneOffset,\r\n Z: (d, opts) => d.getTimeZoneName() || getTimezoneOffset(d, opts),\r\n 't': () => '\\t',\r\n 'n': () => '\\n',\r\n '%': () => '%'\r\n};\r\nformatCodes.h = formatCodes.b;\r\nfunction strftime(d, formatStr) {\r\n let output = '';\r\n let remaining = formatStr;\r\n let match;\r\n while ((match = rFormat.exec(remaining))) {\r\n output += remaining.slice(0, match.index);\r\n remaining = remaining.slice(match.index + match[0].length);\r\n output += format(d, match);\r\n }\r\n return output + remaining;\r\n}\r\nfunction format(d, match) {\r\n const [input, flagStr = '', width, modifier, conversion] = match;\r\n const convert = formatCodes[conversion];\r\n if (!convert)\r\n return input;\r\n const flags = {};\r\n for (const flag of flagStr)\r\n flags[flag] = true;\r\n let ret = String(convert(d, { flags, width, modifier }));\r\n let padChar = padSpaceChars.has(conversion) ? ' ' : '0';\r\n let padWidth = width || padWidths[conversion] || 0;\r\n if (flags['^'])\r\n ret = ret.toUpperCase();\r\n else if (flags['#'])\r\n ret = changeCase(ret);\r\n if (flags['_'])\r\n padChar = ' ';\r\n else if (flags['0'])\r\n padChar = '0';\r\n if (flags['-'])\r\n padWidth = 0;\r\n return padStart(ret, padWidth, padChar);\r\n}\n\nfunction getDateTimeFormat() {\r\n return (typeof Intl !== 'undefined' ? Intl.DateTimeFormat : undefined);\r\n}\n\n// one minute in milliseconds\r\nconst OneMinute = 60000;\r\nconst ISO8601_TIMEZONE_PATTERN = /([zZ]|([+-])(\\d{2}):(\\d{2}))$/;\r\nconst monthNames = [\r\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',\r\n 'September', 'October', 'November', 'December'\r\n];\r\nconst monthNamesShort = monthNames.map(name => name.slice(0, 3));\r\nconst dayNames = [\r\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'\r\n];\r\nconst dayNamesShort = dayNames.map(name => name.slice(0, 3));\r\n/**\r\n * A date implementation with timezone info, just like Ruby date\r\n *\r\n * Implementation:\r\n * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods\r\n * - rewrite getTimezoneOffset() to trick strftime\r\n */\r\nclass LiquidDate {\r\n constructor(init, locale, timezone) {\r\n this.locale = locale;\r\n this.DateTimeFormat = getDateTimeFormat();\r\n this.date = new Date(init);\r\n this.timezoneFixed = timezone !== undefined;\r\n if (timezone === undefined) {\r\n timezone = this.date.getTimezoneOffset();\r\n }\r\n this.timezoneOffset = isString(timezone) ? LiquidDate.getTimezoneOffset(timezone, this.date) : timezone;\r\n this.timezoneName = isString(timezone) ? timezone : '';\r\n const diff = (this.date.getTimezoneOffset() - this.timezoneOffset) * OneMinute;\r\n const time = this.date.getTime() + diff;\r\n this.displayDate = new Date(time);\r\n }\r\n getTime() {\r\n return this.displayDate.getTime();\r\n }\r\n getMilliseconds() {\r\n return this.displayDate.getMilliseconds();\r\n }\r\n getSeconds() {\r\n return this.displayDate.getSeconds();\r\n }\r\n getMinutes() {\r\n return this.displayDate.getMinutes();\r\n }\r\n getHours() {\r\n return this.displayDate.getHours();\r\n }\r\n getDay() {\r\n return this.displayDate.getDay();\r\n }\r\n getDate() {\r\n return this.displayDate.getDate();\r\n }\r\n getMonth() {\r\n return this.displayDate.getMonth();\r\n }\r\n getFullYear() {\r\n return this.displayDate.getFullYear();\r\n }\r\n toLocaleString(locale, init) {\r\n if (init === null || init === void 0 ? void 0 : init.timeZone) {\r\n return this.date.toLocaleString(locale, init);\r\n }\r\n return this.displayDate.toLocaleString(locale, init);\r\n }\r\n toLocaleTimeString(locale) {\r\n return this.displayDate.toLocaleTimeString(locale);\r\n }\r\n toLocaleDateString(locale) {\r\n return this.displayDate.toLocaleDateString(locale);\r\n }\r\n getTimezoneOffset() {\r\n return this.timezoneOffset;\r\n }\r\n getTimeZoneName() {\r\n if (this.timezoneFixed)\r\n return this.timezoneName;\r\n if (!this.DateTimeFormat)\r\n return;\r\n return this.DateTimeFormat().resolvedOptions().timeZone;\r\n }\r\n getLongMonthName() {\r\n var _a;\r\n return (_a = this.format({ month: 'long' })) !== null && _a !== void 0 ? _a : monthNames[this.getMonth()];\r\n }\r\n getShortMonthName() {\r\n var _a;\r\n return (_a = this.format({ month: 'short' })) !== null && _a !== void 0 ? _a : monthNamesShort[this.getMonth()];\r\n }\r\n getLongWeekdayName() {\r\n var _a;\r\n return (_a = this.format({ weekday: 'long' })) !== null && _a !== void 0 ? _a : dayNames[this.displayDate.getDay()];\r\n }\r\n getShortWeekdayName() {\r\n var _a;\r\n return (_a = this.format({ weekday: 'short' })) !== null && _a !== void 0 ? _a : dayNamesShort[this.displayDate.getDay()];\r\n }\r\n valid() {\r\n return !isNaN(this.getTime());\r\n }\r\n format(options) {\r\n return this.DateTimeFormat && this.DateTimeFormat(this.locale, options).format(this.displayDate);\r\n }\r\n /**\r\n * Create a Date object fixed to it's declared Timezone. Both\r\n * - 2021-08-06T02:29:00.000Z and\r\n * - 2021-08-06T02:29:00.000+08:00\r\n * will always be displayed as\r\n * - 2021-08-06 02:29:00\r\n * regardless timezoneOffset in JavaScript realm\r\n *\r\n * The implementation hack:\r\n * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`,\r\n * we create a different Date to trick strftime, it's both simpler and more performant.\r\n * Given that a template is expected to be parsed fewer times than rendered.\r\n */\r\n static createDateFixedToTimezone(dateString, locale) {\r\n const m = dateString.match(ISO8601_TIMEZONE_PATTERN);\r\n // representing a UTC timestamp\r\n if (m && m[1] === 'Z') {\r\n return new LiquidDate(+new Date(dateString), locale, 0);\r\n }\r\n // has a timezone specified\r\n if (m && m[2] && m[3] && m[4]) {\r\n const [, , sign, hours, minutes] = m;\r\n const offset = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10));\r\n return new LiquidDate(+new Date(dateString), locale, offset);\r\n }\r\n return new LiquidDate(dateString, locale);\r\n }\r\n static getTimezoneOffset(timezoneName, date) {\r\n const localDateString = date.toLocaleString('en-US', { timeZone: timezoneName });\r\n const utcDateString = date.toLocaleString('en-US', { timeZone: 'UTC' });\r\n const localDate = new Date(localDateString);\r\n const utcDate = new Date(utcDateString);\r\n return (+utcDate - +localDate) / (60 * 1000);\r\n }\r\n}\n\nclass Limiter {\r\n constructor(resource, limit) {\r\n this.base = 0;\r\n this.message = `${resource} limit exceeded`;\r\n this.limit = limit;\r\n }\r\n use(count) {\r\n count = toNumber(count);\r\n assert(this.base + count <= this.limit, this.message);\r\n this.base += count;\r\n }\r\n check(count) {\r\n count = toNumber(count);\r\n assert(count <= this.limit, this.message);\r\n }\r\n}\n\nclass DelimitedToken extends Token {\r\n constructor(kind, [contentBegin, contentEnd], input, begin, end, trimLeft, trimRight, file) {\r\n super(kind, input, begin, end, file);\r\n this.trimLeft = false;\r\n this.trimRight = false;\r\n const tl = input[contentBegin] === '-';\r\n const tr = input[contentEnd - 1] === '-';\r\n let l = tl ? contentBegin + 1 : contentBegin;\r\n let r = tr ? contentEnd - 1 : contentEnd;\r\n while (l < r && (TYPES[input.charCodeAt(l)] & BLANK))\r\n l++;\r\n while (r > l && (TYPES[input.charCodeAt(r - 1)] & BLANK))\r\n r--;\r\n this.contentRange = [l, r];\r\n this.trimLeft = tl || trimLeft;\r\n this.trimRight = tr || trimRight;\r\n }\r\n get content() {\r\n return this.input.slice(this.contentRange[0], this.contentRange[1]);\r\n }\r\n}\n\nclass TagToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options;\r\n const [valueBegin, valueEnd] = [begin + tagDelimiterLeft.length, end - tagDelimiterRight.length];\r\n super(TokenKind.Tag, [valueBegin, valueEnd], input, begin, end, trimTagLeft, trimTagRight, file);\r\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange);\r\n this.name = this.tokenizer.readTagName();\r\n this.tokenizer.assert(this.name, `illegal tag syntax, tag name expected`);\r\n this.tokenizer.skipBlank();\r\n }\r\n get args() {\r\n return this.tokenizer.input.slice(this.tokenizer.p, this.contentRange[1]);\r\n }\r\n}\n\nclass OutputToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options;\r\n const valueRange = [begin + outputDelimiterLeft.length, end - outputDelimiterRight.length];\r\n super(TokenKind.Output, valueRange, input, begin, end, trimOutputLeft, trimOutputRight, file);\r\n }\r\n}\n\nclass HTMLToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.HTML, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.trimLeft = 0;\r\n this.trimRight = 0;\r\n }\r\n getContent() {\r\n return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight);\r\n }\r\n}\n\nclass NumberToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Number, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = Number(this.getText());\r\n }\r\n}\n\nclass IdentifierToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Word, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = this.getText();\r\n }\r\n}\n\nclass LiteralToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Literal, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.literal = this.getText();\r\n this.content = literalValues[this.literal];\r\n }\r\n}\n\nconst operatorPrecedences = {\r\n '==': 2,\r\n '!=': 2,\r\n '>': 2,\r\n '<': 2,\r\n '>=': 2,\r\n '<=': 2,\r\n 'contains': 2,\r\n 'not': 1,\r\n 'and': 0,\r\n 'or': 0\r\n};\r\nconst operatorTypes = {\r\n '==': 0 /* OperatorType.Binary */,\r\n '!=': 0 /* OperatorType.Binary */,\r\n '>': 0 /* OperatorType.Binary */,\r\n '<': 0 /* OperatorType.Binary */,\r\n '>=': 0 /* OperatorType.Binary */,\r\n '<=': 0 /* OperatorType.Binary */,\r\n 'contains': 0 /* OperatorType.Binary */,\r\n 'not': 1 /* OperatorType.Unary */,\r\n 'and': 0 /* OperatorType.Binary */,\r\n 'or': 0 /* OperatorType.Binary */\r\n};\r\nclass OperatorToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Operator, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.operator = this.getText();\r\n }\r\n getPrecedence() {\r\n const key = this.getText();\r\n return key in operatorPrecedences ? operatorPrecedences[key] : 1;\r\n }\r\n}\n\nclass PropertyAccessToken extends Token {\r\n constructor(variable, props, input, begin, end, file) {\r\n super(TokenKind.PropertyAccess, input, begin, end, file);\r\n this.variable = variable;\r\n this.props = props;\r\n }\r\n}\n\nclass FilterToken extends Token {\r\n constructor(name, args, input, begin, end, file) {\r\n super(TokenKind.Filter, input, begin, end, file);\r\n this.name = name;\r\n this.args = args;\r\n }\r\n}\n\nclass HashToken extends Token {\r\n constructor(input, begin, end, name, value, file) {\r\n super(TokenKind.Hash, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.name = name;\r\n this.value = value;\r\n this.file = file;\r\n }\r\n}\n\nconst rHex = /[\\da-fA-F]/;\r\nconst rOct = /[0-7]/;\r\nconst escapeChar = {\r\n b: '\\b',\r\n f: '\\f',\r\n n: '\\n',\r\n r: '\\r',\r\n t: '\\t',\r\n v: '\\x0B'\r\n};\r\nfunction hexVal(c) {\r\n const code = c.charCodeAt(0);\r\n if (code >= 97)\r\n return code - 87;\r\n if (code >= 65)\r\n return code - 55;\r\n return code - 48;\r\n}\r\nfunction parseStringLiteral(str) {\r\n let ret = '';\r\n for (let i = 1; i < str.length - 1; i++) {\r\n if (str[i] !== '\\\\') {\r\n ret += str[i];\r\n continue;\r\n }\r\n if (escapeChar[str[i + 1]] !== undefined) {\r\n ret += escapeChar[str[++i]];\r\n }\r\n else if (str[i + 1] === 'u') {\r\n let val = 0;\r\n let j = i + 2;\r\n while (j <= i + 5 && rHex.test(str[j])) {\r\n val = val * 16 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n else if (!rOct.test(str[i + 1])) {\r\n ret += str[++i];\r\n }\r\n else {\r\n let j = i + 1;\r\n let val = 0;\r\n while (j <= i + 3 && rOct.test(str[j])) {\r\n val = val * 8 + hexVal(str[j++]);\r\n }\r\n i = j - 1;\r\n ret += String.fromCharCode(val);\r\n }\r\n }\r\n return ret;\r\n}\n\nclass QuotedToken extends Token {\r\n constructor(input, begin, end, file) {\r\n super(TokenKind.Quoted, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n this.content = parseStringLiteral(this.getText());\r\n }\r\n}\n\nclass RangeToken extends Token {\r\n constructor(input, begin, end, lhs, rhs, file) {\r\n super(TokenKind.Range, input, begin, end, file);\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.lhs = lhs;\r\n this.rhs = rhs;\r\n this.file = file;\r\n }\r\n}\n\n/**\r\n * LiquidTagToken is different from TagToken by not having delimiters `{%` or `%}`\r\n */\r\nclass LiquidTagToken extends DelimitedToken {\r\n constructor(input, begin, end, options, file) {\r\n super(TokenKind.Tag, [begin, end], input, begin, end, false, false, file);\r\n this.tokenizer = new Tokenizer(input, options.operators, file, this.contentRange);\r\n this.name = this.tokenizer.readTagName();\r\n this.tokenizer.assert(this.name, 'illegal liquid tag syntax');\r\n this.tokenizer.skipBlank();\r\n this.args = this.tokenizer.remaining();\r\n }\r\n}\n\n/**\r\n * value expression with optional filters\r\n * e.g.\r\n * {% assign foo=\"bar\" | append: \"coo\" %}\r\n */\r\nclass FilteredValueToken extends Token {\r\n constructor(initial, filters, input, begin, end, file) {\r\n super(TokenKind.FilteredValue, input, begin, end, file);\r\n this.initial = initial;\r\n this.filters = filters;\r\n this.input = input;\r\n this.begin = begin;\r\n this.end = end;\r\n this.file = file;\r\n }\r\n}\n\nconst polyfill = {\r\n now: () => Date.now()\r\n};\r\nfunction getPerformance() {\r\n return (typeof global === 'object' && global.performance) ||\r\n (typeof window === 'object' && window.performance) ||\r\n polyfill;\r\n}\n\nclass SimpleEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n }\r\n write(html) {\r\n this.buffer += stringify(html);\r\n }\r\n}\n\nclass StreamedEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n this.stream = null;\r\n throw new Error('streaming not supported in browser');\r\n }\r\n}\n\nclass KeepingTypeEmitter {\r\n constructor() {\r\n this.buffer = '';\r\n }\r\n write(html) {\r\n html = toValue(html);\r\n // This will only preserve the type if the value is isolated.\r\n // I.E:\r\n // {{ my-port }} -> 42\r\n // {{ my-host }}:{{ my-port }} -> 'host:42'\r\n if (typeof html !== 'string' && this.buffer === '') {\r\n this.buffer = html;\r\n }\r\n else {\r\n this.buffer = stringify(this.buffer) + stringify(html);\r\n }\r\n }\r\n}\n\nclass Render {\r\n renderTemplatesToNodeStream(templates, ctx) {\r\n const emitter = new StreamedEmitter();\r\n Promise.resolve().then(() => toPromise(this.renderTemplates(templates, ctx, emitter)))\r\n .then(() => emitter.end(), err => emitter.error(err));\r\n return emitter.stream;\r\n }\r\n *renderTemplates(templates, ctx, emitter) {\r\n if (!emitter) {\r\n emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter();\r\n }\r\n const errors = [];\r\n for (const tpl of templates) {\r\n ctx.renderLimit.check(getPerformance().now());\r\n try {\r\n // if tpl.render supports emitter, it'll return empty `html`\r\n const html = yield tpl.render(ctx, emitter);\r\n // if not, it'll return an `html`, write to the emitter for it\r\n html && emitter.write(html);\r\n if (emitter['break'] || emitter['continue'])\r\n break;\r\n }\r\n catch (e) {\r\n const err = LiquidError.is(e) ? e : new RenderError(e, tpl);\r\n if (ctx.opts.catchAllErrors)\r\n errors.push(err);\r\n else\r\n throw err;\r\n }\r\n }\r\n if (errors.length) {\r\n throw new LiquidErrors(errors);\r\n }\r\n return emitter.buffer;\r\n }\r\n}\n\nclass Expression {\r\n constructor(tokens) {\r\n this.postfix = [...toPostfix(tokens)];\r\n }\r\n *evaluate(ctx, lenient) {\r\n assert(ctx, 'unable to evaluate: context not defined');\r\n const operands = [];\r\n for (const token of this.postfix) {\r\n if (isOperatorToken(token)) {\r\n const r = operands.pop();\r\n let result;\r\n if (operatorTypes[token.operator] === 1 /* OperatorType.Unary */) {\r\n result = yield ctx.opts.operators[token.operator](r, ctx);\r\n }\r\n else {\r\n const l = operands.pop();\r\n result = yield ctx.opts.operators[token.operator](l, r, ctx);\r\n }\r\n operands.push(result);\r\n }\r\n else {\r\n operands.push(yield evalToken(token, ctx, lenient));\r\n }\r\n }\r\n return operands[0];\r\n }\r\n valid() {\r\n return !!this.postfix.length;\r\n }\r\n}\r\nfunction* evalToken(token, ctx, lenient = false) {\r\n if (!token)\r\n return;\r\n if ('content' in token)\r\n return token.content;\r\n if (isPropertyAccessToken(token))\r\n return yield evalPropertyAccessToken(token, ctx, lenient);\r\n if (isRangeToken(token))\r\n return yield evalRangeToken(token, ctx);\r\n}\r\nfunction* evalPropertyAccessToken(token, ctx, lenient) {\r\n const props = [];\r\n for (const prop of token.props) {\r\n props.push((yield evalToken(prop, ctx, false)));\r\n }\r\n try {\r\n if (token.variable) {\r\n const variable = yield evalToken(token.variable, ctx, lenient);\r\n return yield ctx._getFromScope(variable, props);\r\n }\r\n else {\r\n return yield ctx._get(props);\r\n }\r\n }\r\n catch (e) {\r\n if (lenient && e.name === 'InternalUndefinedVariableError')\r\n return null;\r\n throw (new UndefinedVariableError(e, token));\r\n }\r\n}\r\nfunction evalQuotedToken(token) {\r\n return token.content;\r\n}\r\nfunction* evalRangeToken(token, ctx) {\r\n const low = yield evalToken(token.lhs, ctx);\r\n const high = yield evalToken(token.rhs, ctx);\r\n return range(+low, +high + 1);\r\n}\r\nfunction* toPostfix(tokens) {\r\n const ops = [];\r\n for (const token of tokens) {\r\n if (isOperatorToken(token)) {\r\n while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) {\r\n yield ops.pop();\r\n }\r\n ops.push(token);\r\n }\r\n else\r\n yield token;\r\n }\r\n while (ops.length) {\r\n yield ops.pop();\r\n }\r\n}\n\nfunction isTruthy(val, ctx) {\r\n return !isFalsy(val, ctx);\r\n}\r\nfunction isFalsy(val, ctx) {\r\n val = toValue(val);\r\n if (ctx.opts.jsTruthy) {\r\n return !val;\r\n }\r\n else {\r\n return val === false || undefined === val || val === null;\r\n }\r\n}\n\nconst defaultOperators = {\r\n '==': equals,\r\n '!=': (l, r) => !equals(l, r),\r\n '>': (l, r) => {\r\n if (isComparable(l))\r\n return l.gt(r);\r\n if (isComparable(r))\r\n return r.lt(l);\r\n return toValue(l) > toValue(r);\r\n },\r\n '<': (l, r) => {\r\n if (isComparable(l))\r\n return l.lt(r);\r\n if (isComparable(r))\r\n return r.gt(l);\r\n return toValue(l) < toValue(r);\r\n },\r\n '>=': (l, r) => {\r\n if (isComparable(l))\r\n return l.geq(r);\r\n if (isComparable(r))\r\n return r.leq(l);\r\n return toValue(l) >= toValue(r);\r\n },\r\n '<=': (l, r) => {\r\n if (isComparable(l))\r\n return l.leq(r);\r\n if (isComparable(r))\r\n return r.geq(l);\r\n return toValue(l) <= toValue(r);\r\n },\r\n 'contains': (l, r) => {\r\n l = toValue(l);\r\n if (isArray(l))\r\n return l.some((i) => equals(i, r));\r\n if (isFunction(l === null || l === void 0 ? void 0 : l.indexOf))\r\n return l.indexOf(toValue(r)) > -1;\r\n return false;\r\n },\r\n 'not': (v, ctx) => isFalsy(toValue(v), ctx),\r\n 'and': (l, r, ctx) => isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx),\r\n 'or': (l, r, ctx) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx)\r\n};\r\nfunction equals(lhs, rhs) {\r\n if (isComparable(lhs))\r\n return lhs.equals(rhs);\r\n if (isComparable(rhs))\r\n return rhs.equals(lhs);\r\n lhs = toValue(lhs);\r\n rhs = toValue(rhs);\r\n if (isArray(lhs)) {\r\n return isArray(rhs) && arrayEquals(lhs, rhs);\r\n }\r\n return lhs === rhs;\r\n}\r\nfunction arrayEquals(lhs, rhs) {\r\n if (lhs.length !== rhs.length)\r\n return false;\r\n return !lhs.some((value, i) => !equals(value, rhs[i]));\r\n}\n\nclass Node {\r\n constructor(key, value, next, prev) {\r\n this.key = key;\r\n this.value = value;\r\n this.next = next;\r\n this.prev = prev;\r\n }\r\n}\r\nclass LRU {\r\n constructor(limit, size = 0) {\r\n this.limit = limit;\r\n this.size = size;\r\n this.cache = {};\r\n this.head = new Node('HEAD', null, null, null);\r\n this.tail = new Node('TAIL', null, null, null);\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n }\r\n write(key, value) {\r\n if (this.cache[key]) {\r\n this.cache[key].value = value;\r\n }\r\n else {\r\n const node = new Node(key, value, this.head.next, this.head);\r\n this.head.next.prev = node;\r\n this.head.next = node;\r\n this.cache[key] = node;\r\n this.size++;\r\n this.ensureLimit();\r\n }\r\n }\r\n read(key) {\r\n if (!this.cache[key])\r\n return;\r\n const { value } = this.cache[key];\r\n this.remove(key);\r\n this.write(key, value);\r\n return value;\r\n }\r\n remove(key) {\r\n const node = this.cache[key];\r\n node.prev.next = node.next;\r\n node.next.prev = node.prev;\r\n delete this.cache[key];\r\n this.size--;\r\n }\r\n clear() {\r\n this.head.next = this.tail;\r\n this.tail.prev = this.head;\r\n this.size = 0;\r\n this.cache = {};\r\n }\r\n ensureLimit() {\r\n if (this.size > this.limit)\r\n this.remove(this.tail.prev.key);\r\n }\r\n}\n\nfunction domResolve(root, path) {\r\n const base = document.createElement('base');\r\n base.href = root;\r\n const head = document.getElementsByTagName('head')[0];\r\n head.insertBefore(base, head.firstChild);\r\n const a = document.createElement('a');\r\n a.href = path;\r\n const resolved = a.href;\r\n head.removeChild(base);\r\n return resolved;\r\n}\r\nfunction resolve(root, filepath, ext) {\r\n if (root.length && last(root) !== '/')\r\n root += '/';\r\n const url = domResolve(root, filepath);\r\n return url.replace(/^(\\w+:\\/\\/[^/]+)(\\/[^?]+)/, (str, origin, path) => {\r\n const last = path.split('/').pop();\r\n if (/\\.\\w+$/.test(last))\r\n return str;\r\n return origin + path + ext;\r\n });\r\n}\r\nfunction readFile(url) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(xhr.responseText);\r\n }\r\n else {\r\n reject(new Error(xhr.statusText));\r\n }\r\n };\r\n xhr.onerror = () => {\r\n reject(new Error('An error occurred whilst receiving the response.'));\r\n };\r\n xhr.open('GET', url);\r\n xhr.send();\r\n });\r\n });\r\n}\r\nfunction readFileSync(url) {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send();\r\n if (xhr.status < 200 || xhr.status >= 300) {\r\n throw new Error(xhr.statusText);\r\n }\r\n return xhr.responseText;\r\n}\r\nfunction exists(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return true;\r\n });\r\n}\r\nfunction existsSync(filepath) {\r\n return true;\r\n}\r\nfunction dirname(filepath) {\r\n return domResolve(filepath, '.');\r\n}\r\nconst sep = '/';\n\nvar fs = /*#__PURE__*/Object.freeze({\n __proto__: null,\n resolve: resolve,\n readFile: readFile,\n readFileSync: readFileSync,\n exists: exists,\n existsSync: existsSync,\n dirname: dirname,\n sep: sep\n});\n\nfunction defaultFilter(value, defaultValue, ...args) {\r\n value = toValue(value);\r\n if (isArray(value) || isString(value))\r\n return value.length ? value : defaultValue;\r\n if (value === false && (new Map(args)).get('allow_false'))\r\n return false;\r\n return isFalsy(value, this.context) ? defaultValue : value;\r\n}\r\nfunction json(value, space = 0) {\r\n return JSON.stringify(value, null, space);\r\n}\r\nfunction inspect(value, space = 0) {\r\n const ancestors = [];\r\n return JSON.stringify(value, function (_key, value) {\r\n if (typeof value !== 'object' || value === null)\r\n return value;\r\n // `this` is the object that value is contained in, i.e., its direct parent.\r\n while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this)\r\n ancestors.pop();\r\n if (ancestors.includes(value))\r\n return '[Circular]';\r\n ancestors.push(value);\r\n return value;\r\n }, space);\r\n}\r\nfunction to_integer(value) {\r\n return Number(value);\r\n}\r\nconst raw = {\r\n raw: true,\r\n handler: identify\r\n};\r\nvar misc = {\r\n default: defaultFilter,\r\n raw,\r\n jsonify: json,\r\n to_integer,\r\n json,\r\n inspect\r\n};\n\nconst escapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": '''\r\n};\r\nconst unescapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '"': '\"',\r\n ''': \"'\"\r\n};\r\nfunction escape(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/&|<|>|\"|'/g, m => escapeMap[m]);\r\n}\r\nfunction xml_escape(str) {\r\n return escape.call(this, str);\r\n}\r\nfunction unescape(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]);\r\n}\r\nfunction escape_once(str) {\r\n return escape.call(this, unescape.call(this, str));\r\n}\r\nfunction newline_to_br(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\r?\\n/gm, '
\\n');\r\n}\r\nfunction strip_html(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/||<.*?>|/g, '');\r\n}\n\nvar htmlFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n escape: escape,\n xml_escape: xml_escape,\n escape_once: escape_once,\n newline_to_br: newline_to_br,\n strip_html: strip_html\n});\n\nclass MapFS {\r\n constructor(mapping) {\r\n this.mapping = mapping;\r\n this.sep = '/';\r\n }\r\n exists(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.existsSync(filepath);\r\n });\r\n }\r\n existsSync(filepath) {\r\n return !isNil(this.mapping[filepath]);\r\n }\r\n readFile(filepath) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return this.readFileSync(filepath);\r\n });\r\n }\r\n readFileSync(filepath) {\r\n const content = this.mapping[filepath];\r\n if (isNil(content))\r\n throw new Error(`ENOENT: ${filepath}`);\r\n return content;\r\n }\r\n dirname(filepath) {\r\n const segments = filepath.split(this.sep);\r\n segments.pop();\r\n return segments.join(this.sep);\r\n }\r\n resolve(dir, file, ext) {\r\n file += ext;\r\n if (dir === '.')\r\n return file;\r\n const segments = dir.split(/\\/+/);\r\n for (const segment of file.split(this.sep)) {\r\n if (segment === '.' || segment === '')\r\n continue;\r\n else if (segment === '..') {\r\n if (segments.length > 1 || segments[0] !== '')\r\n segments.pop();\r\n }\r\n else\r\n segments.push(segment);\r\n }\r\n return segments.join(this.sep);\r\n }\r\n}\n\nconst defaultOptions = {\r\n root: ['.'],\r\n layouts: ['.'],\r\n partials: ['.'],\r\n relativeReference: true,\r\n jekyllInclude: false,\r\n keyValueSeparator: ':',\r\n cache: undefined,\r\n extname: '',\r\n fs: fs,\r\n dynamicPartials: true,\r\n jsTruthy: false,\r\n dateFormat: '%A, %B %-e, %Y at %-l:%M %P %z',\r\n locale: '',\r\n trimTagRight: false,\r\n trimTagLeft: false,\r\n trimOutputRight: false,\r\n trimOutputLeft: false,\r\n greedy: true,\r\n tagDelimiterLeft: '{%',\r\n tagDelimiterRight: '%}',\r\n outputDelimiterLeft: '{{',\r\n outputDelimiterRight: '}}',\r\n preserveTimezones: false,\r\n strictFilters: false,\r\n strictVariables: false,\r\n ownPropertyOnly: true,\r\n lenientIf: false,\r\n globals: {},\r\n keepOutputType: false,\r\n operators: defaultOperators,\r\n memoryLimit: Infinity,\r\n parseLimit: Infinity,\r\n renderLimit: Infinity\r\n};\r\nfunction normalize(options) {\r\n var _a, _b;\r\n if (options.hasOwnProperty('root')) {\r\n if (!options.hasOwnProperty('partials'))\r\n options.partials = options.root;\r\n if (!options.hasOwnProperty('layouts'))\r\n options.layouts = options.root;\r\n }\r\n if (options.hasOwnProperty('cache')) {\r\n let cache;\r\n if (typeof options.cache === 'number')\r\n cache = options.cache > 0 ? new LRU(options.cache) : undefined;\r\n else if (typeof options.cache === 'object')\r\n cache = options.cache;\r\n else\r\n cache = options.cache ? new LRU(1024) : undefined;\r\n options.cache = cache;\r\n }\r\n options = Object.assign(Object.assign(Object.assign({}, defaultOptions), (options.jekyllInclude ? { dynamicPartials: false } : {})), options);\r\n if ((!options.fs.dirname || !options.fs.sep) && options.relativeReference) {\r\n console.warn('[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning');\r\n options.relativeReference = false;\r\n }\r\n options.root = normalizeDirectoryList(options.root);\r\n options.partials = normalizeDirectoryList(options.partials);\r\n options.layouts = normalizeDirectoryList(options.layouts);\r\n options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape);\r\n if (!options.locale) {\r\n options.locale = (_b = (_a = getDateTimeFormat()) === null || _a === void 0 ? void 0 : _a().resolvedOptions().locale) !== null && _b !== void 0 ? _b : 'en-US';\r\n }\r\n if (options.templates) {\r\n options.fs = new MapFS(options.templates);\r\n options.relativeReference = true;\r\n options.root = options.partials = options.layouts = '.';\r\n }\r\n return options;\r\n}\r\nfunction getOutputEscapeFunction(nameOrFunction) {\r\n if (nameOrFunction === 'escape')\r\n return escape;\r\n if (nameOrFunction === 'json')\r\n return misc.json;\r\n assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function');\r\n return nameOrFunction;\r\n}\r\nfunction normalizeDirectoryList(value) {\r\n let list = [];\r\n if (isArray(value))\r\n list = value;\r\n if (isString(value))\r\n list = [value];\r\n return list;\r\n}\n\nfunction whiteSpaceCtrl(tokens, options) {\r\n let inRaw = false;\r\n for (let i = 0; i < tokens.length; i++) {\r\n const token = tokens[i];\r\n if (!isDelimitedToken(token))\r\n continue;\r\n if (!inRaw && token.trimLeft) {\r\n trimLeft(tokens[i - 1], options.greedy);\r\n }\r\n if (isTagToken(token)) {\r\n if (token.name === 'raw')\r\n inRaw = true;\r\n else if (token.name === 'endraw')\r\n inRaw = false;\r\n }\r\n if (!inRaw && token.trimRight) {\r\n trimRight(tokens[i + 1], options.greedy);\r\n }\r\n }\r\n}\r\nfunction trimLeft(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask)\r\n token.trimRight++;\r\n}\r\nfunction trimRight(token, greedy) {\r\n if (!token || !isHTMLToken(token))\r\n return;\r\n const mask = greedy ? BLANK : INLINE_BLANK;\r\n while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask)\r\n token.trimLeft++;\r\n if (token.input.charAt(token.begin + token.trimLeft) === '\\n')\r\n token.trimLeft++;\r\n}\n\nclass Tokenizer {\r\n constructor(input, operators = defaultOptions.operators, file, range) {\r\n this.input = input;\r\n this.file = file;\r\n this.rawBeginAt = -1;\r\n this.p = range ? range[0] : 0;\r\n this.N = range ? range[1] : input.length;\r\n this.opTrie = createTrie(operators);\r\n this.literalTrie = createTrie(literalValues);\r\n }\r\n readExpression() {\r\n return new Expression(this.readExpressionTokens());\r\n }\r\n *readExpressionTokens() {\r\n while (this.p < this.N) {\r\n const operator = this.readOperator();\r\n if (operator) {\r\n yield operator;\r\n continue;\r\n }\r\n const operand = this.readValue();\r\n if (operand) {\r\n yield operand;\r\n continue;\r\n }\r\n return;\r\n }\r\n }\r\n readOperator() {\r\n this.skipBlank();\r\n const end = this.matchTrie(this.opTrie);\r\n if (end === -1)\r\n return;\r\n return new OperatorToken(this.input, this.p, (this.p = end), this.file);\r\n }\r\n matchTrie(trie) {\r\n let node = trie;\r\n let i = this.p;\r\n let info;\r\n while (node[this.input[i]] && i < this.N) {\r\n node = node[this.input[i++]];\r\n if (node['end'])\r\n info = node;\r\n }\r\n if (!info)\r\n return -1;\r\n if (info['needBoundary'] && isWord(this.peek(i - this.p)))\r\n return -1;\r\n return i;\r\n }\r\n readFilteredValue() {\r\n const begin = this.p;\r\n const initial = this.readExpression();\r\n this.assert(initial.valid(), `invalid value expression: ${this.snapshot()}`);\r\n const filters = this.readFilters();\r\n return new FilteredValueToken(initial, filters, this.input, begin, this.p, this.file);\r\n }\r\n readFilters() {\r\n const filters = [];\r\n while (true) {\r\n const filter = this.readFilter();\r\n if (!filter)\r\n return filters;\r\n filters.push(filter);\r\n }\r\n }\r\n readFilter() {\r\n this.skipBlank();\r\n if (this.end())\r\n return null;\r\n this.assert(this.read() === '|', `expected \"|\" before filter`);\r\n const name = this.readIdentifier();\r\n if (!name.size()) {\r\n this.assert(this.end(), `expected filter name`);\r\n return null;\r\n }\r\n const args = [];\r\n this.skipBlank();\r\n if (this.peek() === ':') {\r\n do {\r\n ++this.p;\r\n const arg = this.readFilterArg();\r\n arg && args.push(arg);\r\n this.skipBlank();\r\n this.assert(this.end() || this.peek() === ',' || this.peek() === '|', () => `unexpected character ${this.snapshot()}`);\r\n } while (this.peek() === ',');\r\n }\r\n else if (this.peek() === '|' || this.end()) ;\r\n else {\r\n throw this.error('expected \":\" after filter name');\r\n }\r\n return new FilterToken(name.getText(), args, this.input, name.begin, this.p, this.file);\r\n }\r\n readFilterArg() {\r\n const key = this.readValue();\r\n if (!key)\r\n return;\r\n this.skipBlank();\r\n if (this.peek() !== ':')\r\n return key;\r\n ++this.p;\r\n const value = this.readValue();\r\n return [key.getText(), value];\r\n }\r\n readTopLevelTokens(options = defaultOptions) {\r\n const tokens = [];\r\n while (this.p < this.N) {\r\n const token = this.readTopLevelToken(options);\r\n tokens.push(token);\r\n }\r\n whiteSpaceCtrl(tokens, options);\r\n return tokens;\r\n }\r\n readTopLevelToken(options) {\r\n const { tagDelimiterLeft, outputDelimiterLeft } = options;\r\n if (this.rawBeginAt > -1)\r\n return this.readEndrawOrRawContent(options);\r\n if (this.match(tagDelimiterLeft))\r\n return this.readTagToken(options);\r\n if (this.match(outputDelimiterLeft))\r\n return this.readOutputToken(options);\r\n return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft]);\r\n }\r\n readHTMLToken(stopStrings) {\r\n const begin = this.p;\r\n while (this.p < this.N) {\r\n if (stopStrings.some(str => this.match(str)))\r\n break;\r\n ++this.p;\r\n }\r\n return new HTMLToken(this.input, begin, this.p, this.file);\r\n }\r\n readTagToken(options) {\r\n const { file, input } = this;\r\n const begin = this.p;\r\n if (this.readToDelimiter(options.tagDelimiterRight) === -1) {\r\n throw this.error(`tag ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n const token = new TagToken(input, begin, this.p, options, file);\r\n if (token.name === 'raw')\r\n this.rawBeginAt = begin;\r\n return token;\r\n }\r\n readToDelimiter(delimiter, respectQuoted = false) {\r\n this.skipBlank();\r\n while (this.p < this.N) {\r\n if (respectQuoted && (this.peekType() & QUOTE)) {\r\n this.readQuoted();\r\n continue;\r\n }\r\n ++this.p;\r\n if (this.rmatch(delimiter))\r\n return this.p;\r\n }\r\n return -1;\r\n }\r\n readOutputToken(options = defaultOptions) {\r\n const { file, input } = this;\r\n const { outputDelimiterRight } = options;\r\n const begin = this.p;\r\n if (this.readToDelimiter(outputDelimiterRight, true) === -1) {\r\n throw this.error(`output ${this.snapshot(begin)} not closed`, begin);\r\n }\r\n return new OutputToken(input, begin, this.p, options, file);\r\n }\r\n readEndrawOrRawContent(options) {\r\n const { tagDelimiterLeft, tagDelimiterRight } = options;\r\n const begin = this.p;\r\n let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n while (this.p < this.N) {\r\n if (this.readIdentifier().getText() !== 'endraw') {\r\n leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length;\r\n continue;\r\n }\r\n while (this.p <= this.N) {\r\n if (this.rmatch(tagDelimiterRight)) {\r\n const end = this.p;\r\n if (begin === leftPos) {\r\n this.rawBeginAt = -1;\r\n return new TagToken(this.input, begin, end, options, this.file);\r\n }\r\n else {\r\n this.p = leftPos;\r\n return new HTMLToken(this.input, begin, leftPos, this.file);\r\n }\r\n }\r\n if (this.rmatch(tagDelimiterLeft))\r\n break;\r\n this.p++;\r\n }\r\n }\r\n throw this.error(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin);\r\n }\r\n readLiquidTagTokens(options = defaultOptions) {\r\n const tokens = [];\r\n while (this.p < this.N) {\r\n const token = this.readLiquidTagToken(options);\r\n token && tokens.push(token);\r\n }\r\n return tokens;\r\n }\r\n readLiquidTagToken(options) {\r\n this.skipBlank();\r\n if (this.end())\r\n return;\r\n const begin = this.p;\r\n this.readToDelimiter('\\n');\r\n const end = this.p;\r\n return new LiquidTagToken(this.input, begin, end, options, this.file);\r\n }\r\n error(msg, pos = this.p) {\r\n return new TokenizationError(msg, new IdentifierToken(this.input, pos, this.N, this.file));\r\n }\r\n assert(pred, msg, pos) {\r\n if (!pred)\r\n throw this.error(typeof msg === 'function' ? msg() : msg, pos);\r\n }\r\n snapshot(begin = this.p) {\r\n return JSON.stringify(ellipsis(this.input.slice(begin, this.N), 32));\r\n }\r\n /**\r\n * @deprecated use #readIdentifier instead\r\n */\r\n readWord() {\r\n return this.readIdentifier();\r\n }\r\n readIdentifier() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n while (!this.end() && isWord(this.peek()))\r\n ++this.p;\r\n return new IdentifierToken(this.input, begin, this.p, this.file);\r\n }\r\n readNonEmptyIdentifier() {\r\n const id = this.readIdentifier();\r\n return id.size() ? id : undefined;\r\n }\r\n readTagName() {\r\n this.skipBlank();\r\n // Handle inline comment tags\r\n if (this.input[this.p] === '#')\r\n return this.input.slice(this.p, ++this.p);\r\n return this.readIdentifier().getText();\r\n }\r\n readHashes(jekyllStyle) {\r\n const hashes = [];\r\n while (true) {\r\n const hash = this.readHash(jekyllStyle);\r\n if (!hash)\r\n return hashes;\r\n hashes.push(hash);\r\n }\r\n }\r\n readHash(jekyllStyle) {\r\n this.skipBlank();\r\n if (this.peek() === ',')\r\n ++this.p;\r\n const begin = this.p;\r\n const name = this.readNonEmptyIdentifier();\r\n if (!name)\r\n return;\r\n let value;\r\n this.skipBlank();\r\n const sep = isString(jekyllStyle) ? jekyllStyle : (jekyllStyle ? '=' : ':');\r\n if (this.peek() === sep) {\r\n ++this.p;\r\n value = this.readValue();\r\n }\r\n return new HashToken(this.input, begin, this.p, name, value, this.file);\r\n }\r\n remaining() {\r\n return this.input.slice(this.p, this.N);\r\n }\r\n advance(step = 1) {\r\n this.p += step;\r\n }\r\n end() {\r\n return this.p >= this.N;\r\n }\r\n read() {\r\n return this.input[this.p++];\r\n }\r\n readTo(end) {\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.rmatch(end))\r\n return this.p;\r\n }\r\n return -1;\r\n }\r\n readValue() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n const variable = this.readLiteral() || this.readQuoted() || this.readRange() || this.readNumber();\r\n const props = this.readProperties(!variable);\r\n if (!props.length)\r\n return variable;\r\n return new PropertyAccessToken(variable, props, this.input, begin, this.p);\r\n }\r\n readScopeValue() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n const props = this.readProperties();\r\n if (!props.length)\r\n return undefined;\r\n return new PropertyAccessToken(undefined, props, this.input, begin, this.p);\r\n }\r\n readProperties(isBegin = true) {\r\n const props = [];\r\n while (true) {\r\n if (this.peek() === '[') {\r\n this.p++;\r\n const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file);\r\n this.assert(this.readTo(']') !== -1, '[ not closed');\r\n props.push(prop);\r\n continue;\r\n }\r\n if (isBegin && !props.length) {\r\n const prop = this.readNonEmptyIdentifier();\r\n if (prop) {\r\n props.push(prop);\r\n continue;\r\n }\r\n }\r\n if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax\r\n this.p++;\r\n const prop = this.readNonEmptyIdentifier();\r\n if (!prop)\r\n break;\r\n props.push(prop);\r\n continue;\r\n }\r\n break;\r\n }\r\n return props;\r\n }\r\n readNumber() {\r\n this.skipBlank();\r\n let decimalFound = false;\r\n let digitFound = false;\r\n let n = 0;\r\n if (this.peekType() & SIGN)\r\n n++;\r\n while (this.p + n <= this.N) {\r\n if (this.peekType(n) & NUMBER) {\r\n digitFound = true;\r\n n++;\r\n }\r\n else if (this.peek(n) === '.' && this.peek(n + 1) !== '.') {\r\n if (decimalFound || !digitFound)\r\n return;\r\n decimalFound = true;\r\n n++;\r\n }\r\n else\r\n break;\r\n }\r\n if (digitFound && !isWord(this.peek(n))) {\r\n const num = new NumberToken(this.input, this.p, this.p + n, this.file);\r\n this.advance(n);\r\n return num;\r\n }\r\n }\r\n readLiteral() {\r\n this.skipBlank();\r\n const end = this.matchTrie(this.literalTrie);\r\n if (end === -1)\r\n return;\r\n const literal = new LiteralToken(this.input, this.p, end, this.file);\r\n this.p = end;\r\n return literal;\r\n }\r\n readRange() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (this.peek() !== '(')\r\n return;\r\n ++this.p;\r\n const lhs = this.readValueOrThrow();\r\n this.p += 2;\r\n const rhs = this.readValueOrThrow();\r\n ++this.p;\r\n return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file);\r\n }\r\n readValueOrThrow() {\r\n const value = this.readValue();\r\n this.assert(value, () => `unexpected token ${this.snapshot()}, value expected`);\r\n return value;\r\n }\r\n readQuoted() {\r\n this.skipBlank();\r\n const begin = this.p;\r\n if (!(this.peekType() & QUOTE))\r\n return;\r\n ++this.p;\r\n let escaped = false;\r\n while (this.p < this.N) {\r\n ++this.p;\r\n if (this.input[this.p - 1] === this.input[begin] && !escaped)\r\n break;\r\n if (escaped)\r\n escaped = false;\r\n else if (this.input[this.p - 1] === '\\\\')\r\n escaped = true;\r\n }\r\n return new QuotedToken(this.input, begin, this.p, this.file);\r\n }\r\n *readFileNameTemplate(options) {\r\n const { outputDelimiterLeft } = options;\r\n const htmlStopStrings = [',', ' ', outputDelimiterLeft];\r\n const htmlStopStringSet = new Set(htmlStopStrings);\r\n // break on ',' and ' ', outputDelimiterLeft only stops HTML token\r\n while (this.p < this.N && !htmlStopStringSet.has(this.peek())) {\r\n yield this.match(outputDelimiterLeft)\r\n ? this.readOutputToken(options)\r\n : this.readHTMLToken(htmlStopStrings);\r\n }\r\n }\r\n match(word) {\r\n for (let i = 0; i < word.length; i++) {\r\n if (word[i] !== this.input[this.p + i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n rmatch(pattern) {\r\n for (let i = 0; i < pattern.length; i++) {\r\n if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i])\r\n return false;\r\n }\r\n return true;\r\n }\r\n peekType(n = 0) {\r\n return this.p + n >= this.N ? 0 : TYPES[this.input.charCodeAt(this.p + n)];\r\n }\r\n peek(n = 0) {\r\n return this.p + n >= this.N ? '' : this.input[this.p + n];\r\n }\r\n skipBlank() {\r\n while (this.peekType() & BLANK)\r\n ++this.p;\r\n }\r\n}\n\nclass ParseStream {\r\n constructor(tokens, parseToken) {\r\n this.handlers = {};\r\n this.stopRequested = false;\r\n this.tokens = tokens;\r\n this.parseToken = parseToken;\r\n }\r\n on(name, cb) {\r\n this.handlers[name] = cb;\r\n return this;\r\n }\r\n trigger(event, arg) {\r\n const h = this.handlers[event];\r\n return h ? (h.call(this, arg), true) : false;\r\n }\r\n start() {\r\n this.trigger('start');\r\n let token;\r\n while (!this.stopRequested && (token = this.tokens.shift())) {\r\n if (this.trigger('token', token))\r\n continue;\r\n if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) {\r\n continue;\r\n }\r\n const template = this.parseToken(token, this.tokens);\r\n this.trigger('template', template);\r\n }\r\n if (!this.stopRequested)\r\n this.trigger('end');\r\n return this;\r\n }\r\n stop() {\r\n this.stopRequested = true;\r\n return this;\r\n }\r\n}\n\nclass TemplateImpl {\r\n constructor(token) {\r\n this.token = token;\r\n }\r\n}\n\nclass Tag extends TemplateImpl {\r\n constructor(token, remainTokens, liquid) {\r\n super(token);\r\n this.name = token.name;\r\n this.liquid = liquid;\r\n this.tokenizer = token.tokenizer;\r\n }\r\n}\n\n/**\r\n * Key-Value Pairs Representing Tag Arguments\r\n * Example:\r\n * For the markup `, foo:'bar', coo:2 reversed %}`,\r\n * hash['foo'] === 'bar'\r\n * hash['coo'] === 2\r\n * hash['reversed'] === undefined\r\n */\r\nclass Hash {\r\n constructor(markup, jekyllStyle) {\r\n this.hash = {};\r\n const tokenizer = new Tokenizer(markup, {});\r\n for (const hash of tokenizer.readHashes(jekyllStyle)) {\r\n this.hash[hash.name.content] = hash.value;\r\n }\r\n }\r\n *render(ctx) {\r\n const hash = {};\r\n for (const key of Object.keys(this.hash)) {\r\n hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx);\r\n }\r\n return hash;\r\n }\r\n}\n\nfunction createTagClass(options) {\r\n return class extends Tag {\r\n constructor(token, tokens, liquid) {\r\n super(token, tokens, liquid);\r\n if (isFunction(options.parse)) {\r\n options.parse.call(this, token, tokens);\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n const hash = (yield new Hash(this.token.args, ctx.opts.keyValueSeparator).render(ctx));\r\n return yield options.render.call(this, ctx, emitter, hash);\r\n }\r\n };\r\n}\n\nfunction isKeyValuePair(arr) {\r\n return isArray(arr);\r\n}\n\nclass Filter {\r\n constructor(token, options, liquid) {\r\n this.token = token;\r\n this.name = token.name;\r\n this.handler = isFunction(options)\r\n ? options\r\n : (isFunction(options === null || options === void 0 ? void 0 : options.handler) ? options.handler : identify);\r\n this.raw = !isFunction(options) && !!(options === null || options === void 0 ? void 0 : options.raw);\r\n this.args = token.args;\r\n this.liquid = liquid;\r\n }\r\n *render(value, context) {\r\n const argv = [];\r\n for (const arg of this.args) {\r\n if (isKeyValuePair(arg))\r\n argv.push([arg[0], yield evalToken(arg[1], context)]);\r\n else\r\n argv.push(yield evalToken(arg, context));\r\n }\r\n return yield this.handler.apply({ context, token: this.token, liquid: this.liquid }, [value, ...argv]);\r\n }\r\n}\n\nclass Value {\r\n /**\r\n * @param str the value to be valuated, eg.: \"foobar\" | truncate: 3\r\n */\r\n constructor(input, liquid) {\r\n this.filters = [];\r\n const token = typeof input === 'string'\r\n ? new Tokenizer(input, liquid.options.operators).readFilteredValue()\r\n : input;\r\n this.initial = token.initial;\r\n this.filters = token.filters.map(token => new Filter(token, this.getFilter(liquid, token.name), liquid));\r\n }\r\n *value(ctx, lenient) {\r\n lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default');\r\n let val = yield this.initial.evaluate(ctx, lenient);\r\n for (const filter of this.filters) {\r\n val = yield filter.render(val, ctx);\r\n }\r\n return val;\r\n }\r\n getFilter(liquid, name) {\r\n const impl = liquid.filters[name];\r\n assert(impl || !liquid.options.strictFilters, () => `undefined filter: ${name}`);\r\n return impl;\r\n }\r\n}\n\nclass Output extends TemplateImpl {\r\n constructor(token, liquid) {\r\n var _a;\r\n super(token);\r\n const tokenizer = new Tokenizer(token.input, liquid.options.operators, token.file, token.contentRange);\r\n this.value = new Value(tokenizer.readFilteredValue(), liquid);\r\n const filters = this.value.filters;\r\n const outputEscape = liquid.options.outputEscape;\r\n if (!((_a = filters[filters.length - 1]) === null || _a === void 0 ? void 0 : _a.raw) && outputEscape) {\r\n const token = new FilterToken(toString.call(outputEscape), [], '', 0, 0);\r\n filters.push(new Filter(token, outputEscape, liquid));\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n const val = yield this.value.value(ctx, false);\r\n emitter.write(val);\r\n }\r\n}\n\nclass HTML extends TemplateImpl {\r\n constructor(token) {\r\n super(token);\r\n this.str = token.getContent();\r\n }\r\n *render(ctx, emitter) {\r\n emitter.write(this.str);\r\n }\r\n}\n\nvar LookupType;\r\n(function (LookupType) {\r\n LookupType[\"Partials\"] = \"partials\";\r\n LookupType[\"Layouts\"] = \"layouts\";\r\n LookupType[\"Root\"] = \"root\";\r\n})(LookupType || (LookupType = {}));\r\nclass Loader {\r\n constructor(options) {\r\n this.options = options;\r\n if (options.relativeReference) {\r\n const sep = options.fs.sep;\r\n assert(sep, '`fs.sep` is required for relative reference');\r\n const rRelativePath = new RegExp(['.' + sep, '..' + sep, './', '../'].map(prefix => escapeRegex(prefix)).join('|'));\r\n this.shouldLoadRelative = (referencedFile) => rRelativePath.test(referencedFile);\r\n }\r\n else {\r\n this.shouldLoadRelative = (_referencedFile) => false;\r\n }\r\n this.contains = this.options.fs.contains || (() => true);\r\n }\r\n *lookup(file, type, sync, currentFile) {\r\n const { fs } = this.options;\r\n const dirs = this.options[type];\r\n for (const filepath of this.candidates(file, dirs, currentFile, type !== LookupType.Root)) {\r\n if (sync ? fs.existsSync(filepath) : yield fs.exists(filepath))\r\n return filepath;\r\n }\r\n throw this.lookupError(file, dirs);\r\n }\r\n *candidates(file, dirs, currentFile, enforceRoot) {\r\n const { fs, extname } = this.options;\r\n if (this.shouldLoadRelative(file) && currentFile) {\r\n const referenced = fs.resolve(this.dirname(currentFile), file, extname);\r\n for (const dir of dirs) {\r\n if (!enforceRoot || this.contains(dir, referenced)) {\r\n // the relatively referenced file is within one of root dirs\r\n yield referenced;\r\n break;\r\n }\r\n }\r\n }\r\n for (const dir of dirs) {\r\n const referenced = fs.resolve(dir, file, extname);\r\n if (!enforceRoot || this.contains(dir, referenced)) {\r\n yield referenced;\r\n }\r\n }\r\n if (fs.fallback !== undefined) {\r\n const filepath = fs.fallback(file);\r\n if (filepath !== undefined)\r\n yield filepath;\r\n }\r\n }\r\n dirname(path) {\r\n const fs = this.options.fs;\r\n assert(fs.dirname, '`fs.dirname` is required for relative reference');\r\n return fs.dirname(path);\r\n }\r\n lookupError(file, roots) {\r\n const err = new Error('ENOENT');\r\n err.message = `ENOENT: Failed to lookup \"${file}\" in \"${roots}\"`;\r\n err.code = 'ENOENT';\r\n return err;\r\n }\r\n}\n\nclass Parser {\r\n constructor(liquid) {\r\n this.liquid = liquid;\r\n this.cache = this.liquid.options.cache;\r\n this.fs = this.liquid.options.fs;\r\n this.parseFile = this.cache ? this._parseFileCached : this._parseFile;\r\n this.loader = new Loader(this.liquid.options);\r\n this.parseLimit = new Limiter('parse length', liquid.options.parseLimit);\r\n }\r\n parse(html, filepath) {\r\n html = String(html);\r\n this.parseLimit.use(html.length);\r\n const tokenizer = new Tokenizer(html, this.liquid.options.operators, filepath);\r\n const tokens = tokenizer.readTopLevelTokens(this.liquid.options);\r\n return this.parseTokens(tokens);\r\n }\r\n parseTokens(tokens) {\r\n let token;\r\n const templates = [];\r\n const errors = [];\r\n while ((token = tokens.shift())) {\r\n try {\r\n templates.push(this.parseToken(token, tokens));\r\n }\r\n catch (err) {\r\n if (this.liquid.options.catchAllErrors)\r\n errors.push(err);\r\n else\r\n throw err;\r\n }\r\n }\r\n if (errors.length)\r\n throw new LiquidErrors(errors);\r\n return templates;\r\n }\r\n parseToken(token, remainTokens) {\r\n try {\r\n if (isTagToken(token)) {\r\n const TagClass = this.liquid.tags[token.name];\r\n assert(TagClass, `tag \"${token.name}\" not found`);\r\n return new TagClass(token, remainTokens, this.liquid, this);\r\n }\r\n if (isOutputToken(token)) {\r\n return new Output(token, this.liquid);\r\n }\r\n return new HTML(token);\r\n }\r\n catch (e) {\r\n if (LiquidError.is(e))\r\n throw e;\r\n throw new ParseError(e, token);\r\n }\r\n }\r\n parseStream(tokens) {\r\n return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens));\r\n }\r\n *_parseFileCached(file, sync, type = LookupType.Root, currentFile) {\r\n const cache = this.cache;\r\n const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file;\r\n const tpls = yield cache.read(key);\r\n if (tpls)\r\n return tpls;\r\n const task = this._parseFile(file, sync, type, currentFile);\r\n // sync mode: exec the task and cache the result\r\n // async mode: cache the task before exec\r\n const taskOrTpl = sync ? yield task : toPromise(task);\r\n cache.write(key, taskOrTpl);\r\n // note: concurrent tasks will be reused, cache for failed task is removed until its end\r\n try {\r\n return yield taskOrTpl;\r\n }\r\n catch (err) {\r\n cache.remove(key);\r\n throw err;\r\n }\r\n }\r\n *_parseFile(file, sync, type = LookupType.Root, currentFile) {\r\n const filepath = yield this.loader.lookup(file, type, sync, currentFile);\r\n return this.parse(sync ? this.fs.readFileSync(filepath) : yield this.fs.readFile(filepath), filepath);\r\n }\r\n}\n\nvar TokenKind;\r\n(function (TokenKind) {\r\n TokenKind[TokenKind[\"Number\"] = 1] = \"Number\";\r\n TokenKind[TokenKind[\"Literal\"] = 2] = \"Literal\";\r\n TokenKind[TokenKind[\"Tag\"] = 4] = \"Tag\";\r\n TokenKind[TokenKind[\"Output\"] = 8] = \"Output\";\r\n TokenKind[TokenKind[\"HTML\"] = 16] = \"HTML\";\r\n TokenKind[TokenKind[\"Filter\"] = 32] = \"Filter\";\r\n TokenKind[TokenKind[\"Hash\"] = 64] = \"Hash\";\r\n TokenKind[TokenKind[\"PropertyAccess\"] = 128] = \"PropertyAccess\";\r\n TokenKind[TokenKind[\"Word\"] = 256] = \"Word\";\r\n TokenKind[TokenKind[\"Range\"] = 512] = \"Range\";\r\n TokenKind[TokenKind[\"Quoted\"] = 1024] = \"Quoted\";\r\n TokenKind[TokenKind[\"Operator\"] = 2048] = \"Operator\";\r\n TokenKind[TokenKind[\"FilteredValue\"] = 4096] = \"FilteredValue\";\r\n TokenKind[TokenKind[\"Delimited\"] = 12] = \"Delimited\";\r\n})(TokenKind || (TokenKind = {}));\n\nfunction isDelimitedToken(val) {\r\n return !!(getKind(val) & TokenKind.Delimited);\r\n}\r\nfunction isOperatorToken(val) {\r\n return getKind(val) === TokenKind.Operator;\r\n}\r\nfunction isHTMLToken(val) {\r\n return getKind(val) === TokenKind.HTML;\r\n}\r\nfunction isOutputToken(val) {\r\n return getKind(val) === TokenKind.Output;\r\n}\r\nfunction isTagToken(val) {\r\n return getKind(val) === TokenKind.Tag;\r\n}\r\nfunction isQuotedToken(val) {\r\n return getKind(val) === TokenKind.Quoted;\r\n}\r\nfunction isLiteralToken(val) {\r\n return getKind(val) === TokenKind.Literal;\r\n}\r\nfunction isNumberToken(val) {\r\n return getKind(val) === TokenKind.Number;\r\n}\r\nfunction isPropertyAccessToken(val) {\r\n return getKind(val) === TokenKind.PropertyAccess;\r\n}\r\nfunction isWordToken(val) {\r\n return getKind(val) === TokenKind.Word;\r\n}\r\nfunction isRangeToken(val) {\r\n return getKind(val) === TokenKind.Range;\r\n}\r\nfunction getKind(val) {\r\n return val ? val.kind : -1;\r\n}\n\nvar typeGuards = /*#__PURE__*/Object.freeze({\n __proto__: null,\n isDelimitedToken: isDelimitedToken,\n isOperatorToken: isOperatorToken,\n isHTMLToken: isHTMLToken,\n isOutputToken: isOutputToken,\n isTagToken: isTagToken,\n isQuotedToken: isQuotedToken,\n isLiteralToken: isLiteralToken,\n isNumberToken: isNumberToken,\n isPropertyAccessToken: isPropertyAccessToken,\n isWordToken: isWordToken,\n isRangeToken: isRangeToken\n});\n\nclass Context {\r\n constructor(env = {}, opts = defaultOptions, renderOptions = {}, { memoryLimit, renderLimit } = {}) {\r\n var _a, _b, _c, _d, _e;\r\n /**\r\n * insert a Context-level empty scope,\r\n * for tags like `{% capture %}` `{% assign %}` to operate\r\n */\r\n this.scopes = [{}];\r\n this.registers = {};\r\n this.sync = !!renderOptions.sync;\r\n this.opts = opts;\r\n this.globals = (_a = renderOptions.globals) !== null && _a !== void 0 ? _a : opts.globals;\r\n this.environments = isObject(env) ? env : Object(env);\r\n this.strictVariables = (_b = renderOptions.strictVariables) !== null && _b !== void 0 ? _b : this.opts.strictVariables;\r\n this.ownPropertyOnly = (_c = renderOptions.ownPropertyOnly) !== null && _c !== void 0 ? _c : opts.ownPropertyOnly;\r\n this.memoryLimit = memoryLimit !== null && memoryLimit !== void 0 ? memoryLimit : new Limiter('memory alloc', (_d = renderOptions.memoryLimit) !== null && _d !== void 0 ? _d : opts.memoryLimit);\r\n this.renderLimit = renderLimit !== null && renderLimit !== void 0 ? renderLimit : new Limiter('template render', getPerformance().now() + ((_e = renderOptions.renderLimit) !== null && _e !== void 0 ? _e : opts.renderLimit));\r\n }\r\n getRegister(key) {\r\n return (this.registers[key] = this.registers[key] || {});\r\n }\r\n setRegister(key, value) {\r\n return (this.registers[key] = value);\r\n }\r\n saveRegister(...keys) {\r\n return keys.map(key => [key, this.getRegister(key)]);\r\n }\r\n restoreRegister(keyValues) {\r\n return keyValues.forEach(([key, value]) => this.setRegister(key, value));\r\n }\r\n getAll() {\r\n return [this.globals, this.environments, ...this.scopes]\r\n .reduce((ctx, val) => __assign(ctx, val), {});\r\n }\r\n /**\r\n * @deprecated use `_get()` or `getSync()` instead\r\n */\r\n get(paths) {\r\n return this.getSync(paths);\r\n }\r\n getSync(paths) {\r\n return toValueSync(this._get(paths));\r\n }\r\n *_get(paths) {\r\n const scope = this.findScope(paths[0]);\r\n return yield this._getFromScope(scope, paths);\r\n }\r\n /**\r\n * @deprecated use `_get()` instead\r\n */\r\n getFromScope(scope, paths) {\r\n return toValueSync(this._getFromScope(scope, paths));\r\n }\r\n *_getFromScope(scope, paths, strictVariables = this.strictVariables) {\r\n if (isString(paths))\r\n paths = paths.split('.');\r\n for (let i = 0; i < paths.length; i++) {\r\n scope = yield readProperty(scope, paths[i], this.ownPropertyOnly);\r\n if (strictVariables && isUndefined(scope)) {\r\n throw new InternalUndefinedVariableError(paths.slice(0, i + 1).join('.'));\r\n }\r\n }\r\n return scope;\r\n }\r\n push(ctx) {\r\n return this.scopes.push(ctx);\r\n }\r\n pop() {\r\n return this.scopes.pop();\r\n }\r\n bottom() {\r\n return this.scopes[0];\r\n }\r\n spawn(scope = {}) {\r\n return new Context(scope, this.opts, {\r\n sync: this.sync,\r\n globals: this.globals,\r\n strictVariables: this.strictVariables\r\n }, {\r\n renderLimit: this.renderLimit,\r\n memoryLimit: this.memoryLimit\r\n });\r\n }\r\n findScope(key) {\r\n for (let i = this.scopes.length - 1; i >= 0; i--) {\r\n const candidate = this.scopes[i];\r\n if (key in candidate)\r\n return candidate;\r\n }\r\n if (key in this.environments)\r\n return this.environments;\r\n return this.globals;\r\n }\r\n}\r\nfunction readProperty(obj, key, ownPropertyOnly) {\r\n obj = toLiquid(obj);\r\n if (isNil(obj))\r\n return obj;\r\n if (isArray(obj) && key < 0)\r\n return obj[obj.length + +key];\r\n const value = readJSProperty(obj, key, ownPropertyOnly);\r\n if (value === undefined && obj instanceof Drop)\r\n return obj.liquidMethodMissing(key);\r\n if (isFunction(value))\r\n return value.call(obj);\r\n if (key === 'size')\r\n return readSize(obj);\r\n else if (key === 'first')\r\n return readFirst(obj);\r\n else if (key === 'last')\r\n return readLast(obj);\r\n return value;\r\n}\r\nfunction readJSProperty(obj, key, ownPropertyOnly) {\r\n if (ownPropertyOnly && !hasOwnProperty.call(obj, key) && !(obj instanceof Drop))\r\n return undefined;\r\n return obj[key];\r\n}\r\nfunction readFirst(obj) {\r\n if (isArray(obj))\r\n return obj[0];\r\n return obj['first'];\r\n}\r\nfunction readLast(obj) {\r\n if (isArray(obj))\r\n return obj[obj.length - 1];\r\n return obj['last'];\r\n}\r\nfunction readSize(obj) {\r\n if (hasOwnProperty.call(obj, 'size') || obj['size'] !== undefined)\r\n return obj['size'];\r\n if (isArray(obj) || isString(obj))\r\n return obj.length;\r\n if (typeof obj === 'object')\r\n return Object.keys(obj).length;\r\n}\n\nvar BlockMode;\r\n(function (BlockMode) {\r\n /* store rendered html into blocks */\r\n BlockMode[BlockMode[\"OUTPUT\"] = 0] = \"OUTPUT\";\r\n /* output rendered html directly */\r\n BlockMode[BlockMode[\"STORE\"] = 1] = \"STORE\";\r\n})(BlockMode || (BlockMode = {}));\n\nconst abs = argumentsToValue(Math.abs);\r\nconst at_least = argumentsToValue(Math.max);\r\nconst at_most = argumentsToValue(Math.min);\r\nconst ceil = argumentsToValue(Math.ceil);\r\nconst divided_by = argumentsToValue((dividend, divisor, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor);\r\nconst floor = argumentsToValue(Math.floor);\r\nconst minus = argumentsToValue((v, arg) => v - arg);\r\nconst modulo = argumentsToValue((v, arg) => v % arg);\r\nconst times = argumentsToValue((v, arg) => v * arg);\r\nfunction round(v, arg = 0) {\r\n v = toValue(v);\r\n arg = toValue(arg);\r\n const amp = Math.pow(10, arg);\r\n return Math.round(v * amp) / amp;\r\n}\r\nfunction plus(v, arg) {\r\n v = toValue(v);\r\n arg = toValue(arg);\r\n return Number(v) + Number(arg);\r\n}\n\nvar mathFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n abs: abs,\n at_least: at_least,\n at_most: at_most,\n ceil: ceil,\n divided_by: divided_by,\n floor: floor,\n minus: minus,\n modulo: modulo,\n times: times,\n round: round,\n plus: plus\n});\n\nconst url_decode = (x) => decodeURIComponent(stringify(x)).replace(/\\+/g, ' ');\r\nconst url_encode = (x) => encodeURIComponent(stringify(x)).replace(/%20/g, '+');\r\nconst cgi_escape = (x) => encodeURIComponent(stringify(x))\r\n .replace(/%20/g, '+')\r\n .replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());\r\nconst uri_escape = (x) => encodeURI(stringify(x))\r\n .replace(/%5B/g, '[')\r\n .replace(/%5D/g, ']');\r\nconst rSlugifyDefault = /[^\\p{M}\\p{L}\\p{Nd}]+/ug;\r\nconst rSlugifyReplacers = {\r\n 'raw': /\\s+/g,\r\n 'default': rSlugifyDefault,\r\n 'pretty': /[^\\p{M}\\p{L}\\p{Nd}._~!$&'()+,;=@]+/ug,\r\n 'ascii': /[^A-Za-z0-9]+/g,\r\n 'latin': rSlugifyDefault,\r\n 'none': null\r\n};\r\nfunction slugify(str, mode = 'default', cased = false) {\r\n str = stringify(str);\r\n const replacer = rSlugifyReplacers[mode];\r\n if (replacer) {\r\n if (mode === 'latin')\r\n str = removeAccents(str);\r\n str = str.replace(replacer, '-').replace(/^-|-$/g, '');\r\n }\r\n return cased ? str : str.toLowerCase();\r\n}\r\nfunction removeAccents(str) {\r\n return str.replace(/[àáâãäå]/g, 'a')\r\n .replace(/[æ]/g, 'ae')\r\n .replace(/[ç]/g, 'c')\r\n .replace(/[èéêë]/g, 'e')\r\n .replace(/[ìíîï]/g, 'i')\r\n .replace(/[ð]/g, 'd')\r\n .replace(/[ñ]/g, 'n')\r\n .replace(/[òóôõöø]/g, 'o')\r\n .replace(/[ùúûü]/g, 'u')\r\n .replace(/[ýÿ]/g, 'y')\r\n .replace(/[ß]/g, 'ss')\r\n .replace(/[œ]/g, 'oe')\r\n .replace(/[þ]/g, 'th')\r\n .replace(/[ẞ]/g, 'SS')\r\n .replace(/[Œ]/g, 'OE')\r\n .replace(/[Þ]/g, 'TH');\r\n}\n\nvar urlFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n url_decode: url_decode,\n url_encode: url_encode,\n cgi_escape: cgi_escape,\n uri_escape: uri_escape,\n slugify: slugify\n});\n\nconst join = argumentsToValue(function (v, arg) {\r\n const array = toArray(v);\r\n const sep = isNil(arg) ? ' ' : stringify(arg);\r\n const complexity = array.length * (1 + sep.length);\r\n this.context.memoryLimit.use(complexity);\r\n return array.join(sep);\r\n});\r\nconst last$1 = argumentsToValue((v) => isArray(v) ? last(v) : '');\r\nconst first = argumentsToValue((v) => isArray(v) ? v[0] : '');\r\nconst reverse = argumentsToValue(function (v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n return [...array].reverse();\r\n});\r\nfunction* sort(arr, property) {\r\n const values = [];\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n values.push([\r\n item,\r\n property ? yield this.context._getFromScope(item, stringify(property).split('.'), false) : item\r\n ]);\r\n }\r\n return values.sort((lhs, rhs) => {\r\n const lvalue = lhs[1];\r\n const rvalue = rhs[1];\r\n return lvalue < rvalue ? -1 : (lvalue > rvalue ? 1 : 0);\r\n }).map(tuple => tuple[0]);\r\n}\r\nfunction sort_natural(input, property) {\r\n const propertyString = stringify(property);\r\n const compare = property === undefined\r\n ? caseInsensitiveCompare\r\n : (lhs, rhs) => caseInsensitiveCompare(lhs[propertyString], rhs[propertyString]);\r\n const array = toArray(input);\r\n this.context.memoryLimit.use(array.length);\r\n return [...array].sort(compare);\r\n}\r\nconst size = (v) => (v && v.length) || 0;\r\nfunction* map(arr, property) {\r\n const results = [];\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n results.push(yield this.context._getFromScope(item, stringify(property), false));\r\n }\r\n return results;\r\n}\r\nfunction* sum(arr, property) {\r\n let sum = 0;\r\n const array = toArray(arr);\r\n for (const item of array) {\r\n const data = Number(property ? yield this.context._getFromScope(item, stringify(property), false) : item);\r\n sum += Number.isNaN(data) ? 0 : data;\r\n }\r\n return sum;\r\n}\r\nfunction compact(arr) {\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n return array.filter(x => !isNil(toValue(x)));\r\n}\r\nfunction concat(v, arg = []) {\r\n const lhs = toArray(v);\r\n const rhs = toArray(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return lhs.concat(rhs);\r\n}\r\nfunction push(v, arg) {\r\n return concat.call(this, v, [arg]);\r\n}\r\nfunction unshift(v, arg) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.unshift(arg);\r\n return clone;\r\n}\r\nfunction pop(v) {\r\n const clone = [...toArray(v)];\r\n clone.pop();\r\n return clone;\r\n}\r\nfunction shift(v) {\r\n const array = toArray(v);\r\n this.context.memoryLimit.use(array.length);\r\n const clone = [...array];\r\n clone.shift();\r\n return clone;\r\n}\r\nfunction slice(v, begin, length = 1) {\r\n v = toValue(v);\r\n if (isNil(v))\r\n return [];\r\n if (!isArray(v))\r\n v = stringify(v);\r\n begin = begin < 0 ? v.length + begin : begin;\r\n this.context.memoryLimit.use(length);\r\n return v.slice(begin, begin + length);\r\n}\r\nfunction* where(arr, property, expected) {\r\n const values = [];\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n for (const item of arr) {\r\n values.push(yield evalToken(token, this.context.spawn(item)));\r\n }\r\n return arr.filter((_, i) => {\r\n if (expected === undefined)\r\n return isTruthy(values[i], this.context);\r\n return equals(values[i], expected);\r\n });\r\n}\r\nfunction* where_exp(arr, itemName, exp) {\r\n const filtered = [];\r\n const keyTemplate = new Value(stringify(exp), this.liquid);\r\n const array = toArray(arr);\r\n this.context.memoryLimit.use(array.length);\r\n for (const item of array) {\r\n const value = yield keyTemplate.value(this.context.spawn({ [itemName]: item }));\r\n if (value)\r\n filtered.push(item);\r\n }\r\n return filtered;\r\n}\r\nfunction* group_by(arr, property) {\r\n const map = new Map();\r\n arr = toArray(arr);\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n this.context.memoryLimit.use(arr.length);\r\n for (const item of arr) {\r\n const key = yield evalToken(token, this.context.spawn(item));\r\n if (!map.has(key))\r\n map.set(key, []);\r\n map.get(key).push(item);\r\n }\r\n return [...map.entries()].map(([name, items]) => ({ name, items }));\r\n}\r\nfunction* group_by_exp(arr, itemName, exp) {\r\n const map = new Map();\r\n const keyTemplate = new Value(stringify(exp), this.liquid);\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n for (const item of arr) {\r\n const key = yield keyTemplate.value(this.context.spawn({ [itemName]: item }));\r\n if (!map.has(key))\r\n map.set(key, []);\r\n map.get(key).push(item);\r\n }\r\n return [...map.entries()].map(([name, items]) => ({ name, items }));\r\n}\r\nfunction* find(arr, property, expected) {\r\n const token = new Tokenizer(stringify(property)).readScopeValue();\r\n const array = toArray(arr);\r\n for (const item of array) {\r\n const value = yield evalToken(token, this.context.spawn(item));\r\n if (equals(value, expected))\r\n return item;\r\n }\r\n}\r\nfunction* find_exp(arr, itemName, exp) {\r\n const predicate = new Value(stringify(exp), this.liquid);\r\n const array = toArray(arr);\r\n for (const item of array) {\r\n const value = yield predicate.value(this.context.spawn({ [itemName]: item }));\r\n if (value)\r\n return item;\r\n }\r\n}\r\nfunction uniq(arr) {\r\n arr = toArray(arr);\r\n this.context.memoryLimit.use(arr.length);\r\n return [...new Set(arr)];\r\n}\r\nfunction sample(v, count = 1) {\r\n v = toValue(v);\r\n if (isNil(v))\r\n return [];\r\n if (!isArray(v))\r\n v = stringify(v);\r\n this.context.memoryLimit.use(count);\r\n const shuffled = [...v].sort(() => Math.random() - 0.5);\r\n if (count === 1)\r\n return shuffled[0];\r\n return shuffled.slice(0, count);\r\n}\n\nvar arrayFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n join: join,\n last: last$1,\n first: first,\n reverse: reverse,\n sort: sort,\n sort_natural: sort_natural,\n size: size,\n map: map,\n sum: sum,\n compact: compact,\n concat: concat,\n push: push,\n unshift: unshift,\n pop: pop,\n shift: shift,\n slice: slice,\n where: where,\n where_exp: where_exp,\n group_by: group_by,\n group_by_exp: group_by_exp,\n find: find,\n find_exp: find_exp,\n uniq: uniq,\n sample: sample\n});\n\nfunction date(v, format, timezoneOffset) {\r\n var _a, _b, _c;\r\n const size = ((_a = v === null || v === void 0 ? void 0 : v.length) !== null && _a !== void 0 ? _a : 0) + ((_b = format === null || format === void 0 ? void 0 : format.length) !== null && _b !== void 0 ? _b : 0) + ((_c = timezoneOffset === null || timezoneOffset === void 0 ? void 0 : timezoneOffset.length) !== null && _c !== void 0 ? _c : 0);\r\n this.context.memoryLimit.use(size);\r\n const date = parseDate(v, this.context.opts, timezoneOffset);\r\n if (!date)\r\n return v;\r\n format = toValue(format);\r\n format = isNil(format) ? this.context.opts.dateFormat : stringify(format);\r\n return strftime(date, format);\r\n}\r\nfunction date_to_xmlschema(v) {\r\n return date.call(this, v, '%Y-%m-%dT%H:%M:%S%:z');\r\n}\r\nfunction date_to_rfc822(v) {\r\n return date.call(this, v, '%a, %d %b %Y %H:%M:%S %z');\r\n}\r\nfunction date_to_string(v, type, style) {\r\n return stringify_date.call(this, v, '%b', type, style);\r\n}\r\nfunction date_to_long_string(v, type, style) {\r\n return stringify_date.call(this, v, '%B', type, style);\r\n}\r\nfunction stringify_date(v, month_type, type, style) {\r\n const date = parseDate(v, this.context.opts);\r\n if (!date)\r\n return v;\r\n if (type === 'ordinal') {\r\n const d = date.getDate();\r\n return style === 'US'\r\n ? strftime(date, `${month_type} ${d}%q, %Y`)\r\n : strftime(date, `${d}%q ${month_type} %Y`);\r\n }\r\n return strftime(date, `%d ${month_type} %Y`);\r\n}\r\nfunction parseDate(v, opts, timezoneOffset) {\r\n let date;\r\n const defaultTimezoneOffset = timezoneOffset !== null && timezoneOffset !== void 0 ? timezoneOffset : opts.timezoneOffset;\r\n const locale = opts.locale;\r\n v = toValue(v);\r\n if (v === 'now' || v === 'today') {\r\n date = new LiquidDate(Date.now(), locale, defaultTimezoneOffset);\r\n }\r\n else if (isNumber(v)) {\r\n date = new LiquidDate(v * 1000, locale, defaultTimezoneOffset);\r\n }\r\n else if (isString(v)) {\r\n if (/^\\d+$/.test(v)) {\r\n date = new LiquidDate(+v * 1000, locale, defaultTimezoneOffset);\r\n }\r\n else if (opts.preserveTimezones && timezoneOffset === undefined) {\r\n date = LiquidDate.createDateFixedToTimezone(v, locale);\r\n }\r\n else {\r\n date = new LiquidDate(v, locale, defaultTimezoneOffset);\r\n }\r\n }\r\n else {\r\n date = new LiquidDate(v, locale, defaultTimezoneOffset);\r\n }\r\n return date.valid() ? date : undefined;\r\n}\n\nvar dateFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n date: date,\n date_to_xmlschema: date_to_xmlschema,\n date_to_rfc822: date_to_rfc822,\n date_to_string: date_to_string,\n date_to_long_string: date_to_long_string\n});\n\n/**\r\n * String related filters\r\n *\r\n * * prefer stringify() to String() since `undefined`, `null` should eval ''\r\n */\r\nconst rCJKWord = /[\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF]/gu;\r\n// Word boundary followed by word characters (for detecting words)\r\nconst rNonCJKWord = /[^\\u4E00-\\u9FFF\\uF900-\\uFAFF\\u3400-\\u4DBF\\u3040-\\u309F\\u30A0-\\u30FF\\uAC00-\\uD7AF\\s]+/gu;\r\nfunction append(v, arg) {\r\n assert(arguments.length === 2, 'append expect 2 arguments');\r\n const lhs = stringify(v);\r\n const rhs = stringify(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return lhs + rhs;\r\n}\r\nfunction prepend(v, arg) {\r\n assert(arguments.length === 2, 'prepend expect 2 arguments');\r\n const lhs = stringify(v);\r\n const rhs = stringify(arg);\r\n this.context.memoryLimit.use(lhs.length + rhs.length);\r\n return rhs + lhs;\r\n}\r\nfunction lstrip(v, chars) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = escapeRegExp(stringify(chars));\r\n return str.replace(new RegExp(`^[${chars}]+`, 'g'), '');\r\n }\r\n return str.replace(/^\\s+/, '');\r\n}\r\nfunction downcase(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.toLowerCase();\r\n}\r\nfunction upcase(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return stringify(str).toUpperCase();\r\n}\r\nfunction remove(v, arg) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.split(stringify(arg)).join('');\r\n}\r\nfunction remove_first(v, l) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(stringify(l), '');\r\n}\r\nfunction remove_last(v, l) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const pattern = stringify(l);\r\n const index = str.lastIndexOf(pattern);\r\n if (index === -1)\r\n return str;\r\n return str.substring(0, index) + str.substring(index + pattern.length);\r\n}\r\nfunction rstrip(str, chars) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = escapeRegExp(stringify(chars));\r\n return str.replace(new RegExp(`[${chars}]+$`, 'g'), '');\r\n }\r\n return str.replace(/\\s+$/, '');\r\n}\r\nfunction split(v, arg) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const arr = str.split(stringify(arg));\r\n // align to ruby split, which is the behavior of shopify/liquid\r\n // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split\r\n while (arr.length && arr[arr.length - 1] === '')\r\n arr.pop();\r\n return arr;\r\n}\r\nfunction strip(v, chars) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (chars) {\r\n chars = escapeRegExp(stringify(chars));\r\n return str\r\n .replace(new RegExp(`^[${chars}]+`, 'g'), '')\r\n .replace(new RegExp(`[${chars}]+$`, 'g'), '');\r\n }\r\n return str.trim();\r\n}\r\nfunction strip_newlines(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\r?\\n/gm, '');\r\n}\r\nfunction capitalize(str) {\r\n str = stringify(str);\r\n this.context.memoryLimit.use(str.length);\r\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\r\n}\r\nfunction replace(v, pattern, replacement) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.split(stringify(pattern)).join(replacement);\r\n}\r\nfunction replace_first(v, arg1, arg2) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(stringify(arg1), arg2);\r\n}\r\nfunction replace_last(v, arg1, arg2) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const pattern = stringify(arg1);\r\n const index = str.lastIndexOf(pattern);\r\n if (index === -1)\r\n return str;\r\n const replacement = stringify(arg2);\r\n return str.substring(0, index) + replacement + str.substring(index + pattern.length);\r\n}\r\nfunction truncate(v, l = 50, o = '...') {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n if (str.length <= l)\r\n return v;\r\n return str.substring(0, l - o.length) + o;\r\n}\r\nfunction truncatewords(v, words = 15, o = '...') {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n const arr = str.split(/\\s+/);\r\n if (words <= 0)\r\n words = 1;\r\n let ret = arr.slice(0, words).join(' ');\r\n if (arr.length >= words)\r\n ret += o;\r\n return ret;\r\n}\r\nfunction normalize_whitespace(v) {\r\n const str = stringify(v);\r\n this.context.memoryLimit.use(str.length);\r\n return str.replace(/\\s+/g, ' ');\r\n}\r\nfunction number_of_words(input, mode) {\r\n const str = stringify(input);\r\n this.context.memoryLimit.use(str.length);\r\n input = str.trim();\r\n if (!input)\r\n return 0;\r\n switch (mode) {\r\n case 'cjk':\r\n // Count CJK characters and words\r\n return (input.match(rCJKWord) || []).length + (input.match(rNonCJKWord) || []).length;\r\n case 'auto':\r\n // Count CJK characters, if none, count words\r\n return rCJKWord.test(input)\r\n ? input.match(rCJKWord).length + (input.match(rNonCJKWord) || []).length\r\n : input.split(/\\s+/).length;\r\n default:\r\n // Count words only\r\n return input.split(/\\s+/).length;\r\n }\r\n}\r\nfunction array_to_sentence_string(array, connector = 'and') {\r\n this.context.memoryLimit.use(array.length);\r\n switch (array.length) {\r\n case 0:\r\n return '';\r\n case 1:\r\n return array[0];\r\n case 2:\r\n return `${array[0]} ${connector} ${array[1]}`;\r\n default:\r\n return `${array.slice(0, -1).join(', ')}, ${connector} ${array[array.length - 1]}`;\r\n }\r\n}\n\nvar stringFilters = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append,\n prepend: prepend,\n lstrip: lstrip,\n downcase: downcase,\n upcase: upcase,\n remove: remove,\n remove_first: remove_first,\n remove_last: remove_last,\n rstrip: rstrip,\n split: split,\n strip: strip,\n strip_newlines: strip_newlines,\n capitalize: capitalize,\n replace: replace,\n replace_first: replace_first,\n replace_last: replace_last,\n truncate: truncate,\n truncatewords: truncatewords,\n normalize_whitespace: normalize_whitespace,\n number_of_words: number_of_words,\n array_to_sentence_string: array_to_sentence_string\n});\n\nconst filters = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, htmlFilters), mathFilters), urlFilters), arrayFilters), dateFilters), stringFilters), misc);\n\nclass AssignTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.key = this.tokenizer.readIdentifier().content;\r\n this.tokenizer.assert(this.key, 'expected variable name');\r\n this.tokenizer.skipBlank();\r\n this.tokenizer.assert(this.tokenizer.peek() === '=', 'expected \"=\"');\r\n this.tokenizer.advance();\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n }\r\n *render(ctx) {\r\n ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf);\r\n }\r\n}\n\nconst MODIFIERS = ['offset', 'limit', 'reversed'];\r\nclass ForTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const variable = this.tokenizer.readIdentifier();\r\n const inStr = this.tokenizer.readIdentifier();\r\n const collection = this.tokenizer.readValue();\r\n if (!variable.size() || inStr.content !== 'in' || !collection) {\r\n throw new Error(`illegal tag: ${token.getText()}`);\r\n }\r\n this.variable = variable.content;\r\n this.collection = collection;\r\n this.hash = new Hash(this.tokenizer.remaining(), liquid.options.keyValueSeparator);\r\n this.templates = [];\r\n this.elseTemplates = [];\r\n let p;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:else', tag => { assertEmpty(tag.args); p = this.elseTemplates; })\r\n .on('tag:endfor', tag => { assertEmpty(tag.args); stream.stop(); })\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => { throw new Error(`tag ${token.getText()} not closed`); });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n if (!collection.length) {\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n return;\r\n }\r\n const continueKey = 'continue-' + this.variable + '-' + this.collection.getText();\r\n ctx.push({ continue: ctx.getRegister(continueKey) });\r\n const hash = yield this.hash.render(ctx);\r\n ctx.pop();\r\n const modifiers = this.liquid.options.orderedFilterParameters\r\n ? Object.keys(hash).filter(x => MODIFIERS.includes(x))\r\n : MODIFIERS.filter(x => hash[x] !== undefined);\r\n collection = modifiers.reduce((collection, modifier) => {\r\n if (modifier === 'offset')\r\n return offset(collection, hash['offset']);\r\n if (modifier === 'limit')\r\n return limit(collection, hash['limit']);\r\n return reversed(collection);\r\n }, collection);\r\n ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length);\r\n const scope = { forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) };\r\n ctx.push(scope);\r\n for (const item of collection) {\r\n scope[this.variable] = item;\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n if (emitter['break']) {\r\n emitter['break'] = false;\r\n break;\r\n }\r\n emitter['continue'] = false;\r\n scope.forloop.next();\r\n }\r\n ctx.pop();\r\n }\r\n}\r\nfunction reversed(arr) {\r\n return [...arr].reverse();\r\n}\r\nfunction offset(arr, count) {\r\n return arr.slice(count);\r\n}\r\nfunction limit(arr, count) {\r\n return arr.slice(0, count);\r\n}\n\nclass CaptureTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.templates = [];\r\n this.variable = this.readVariableName();\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endcapture')\r\n return;\r\n this.templates.push(parser.parseToken(token, remainTokens));\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n *render(ctx) {\r\n const r = this.liquid.renderer;\r\n const html = yield r.renderTemplates(this.templates, ctx);\r\n ctx.bottom()[this.variable] = html;\r\n }\r\n readVariableName() {\r\n const word = this.tokenizer.readIdentifier().content;\r\n if (word)\r\n return word;\r\n const quoted = this.tokenizer.readQuoted();\r\n if (quoted)\r\n return evalQuotedToken(quoted);\r\n throw this.tokenizer.error('invalid capture name');\r\n }\r\n}\n\nclass CaseTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n this.elseTemplates = [];\r\n let p = [];\r\n let elseCount = 0;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('tag:when', (token) => {\r\n if (elseCount > 0) {\r\n return;\r\n }\r\n p = [];\r\n const values = [];\r\n while (!token.tokenizer.end()) {\r\n values.push(token.tokenizer.readValueOrThrow());\r\n token.tokenizer.skipBlank();\r\n if (token.tokenizer.peek() === ',') {\r\n token.tokenizer.readTo(',');\r\n }\r\n else {\r\n token.tokenizer.readTo('or');\r\n }\r\n }\r\n this.branches.push({\r\n values,\r\n templates: p\r\n });\r\n })\r\n .on('tag:else', () => {\r\n elseCount++;\r\n p = this.elseTemplates;\r\n })\r\n .on('tag:endcase', () => stream.stop())\r\n .on('template', (tpl) => {\r\n if (p !== this.elseTemplates || elseCount === 1) {\r\n p.push(tpl);\r\n }\r\n })\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n const target = toValue(yield this.value.value(ctx, ctx.opts.lenientIf));\r\n let branchHit = false;\r\n for (const branch of this.branches) {\r\n for (const valueToken of branch.values) {\r\n const value = yield evalToken(valueToken, ctx, ctx.opts.lenientIf);\r\n if (equals(target, value)) {\r\n yield r.renderTemplates(branch.templates, ctx, emitter);\r\n branchHit = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!branchHit) {\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n }\r\n}\n\nclass CommentTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endcomment')\r\n return;\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n render() { }\r\n}\n\nclass RenderTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const tokenizer = this.tokenizer;\r\n this.file = parseFilePath(tokenizer, this.liquid, parser);\r\n this.currentFile = token.file;\r\n while (!tokenizer.end()) {\r\n tokenizer.skipBlank();\r\n const begin = tokenizer.p;\r\n const keyword = tokenizer.readIdentifier();\r\n if (keyword.content === 'with' || keyword.content === 'for') {\r\n tokenizer.skipBlank();\r\n // can be normal key/value pair, like \"with: true\"\r\n if (tokenizer.peek() !== ':') {\r\n const value = tokenizer.readValue();\r\n // can be normal key, like \"with,\"\r\n if (value) {\r\n const beforeAs = tokenizer.p;\r\n const asStr = tokenizer.readIdentifier();\r\n let alias;\r\n if (asStr.content === 'as')\r\n alias = tokenizer.readIdentifier();\r\n else\r\n tokenizer.p = beforeAs;\r\n this[keyword.content] = { value, alias: alias && alias.content };\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() === ',')\r\n tokenizer.advance();\r\n continue; // matched!\r\n }\r\n }\r\n }\r\n /**\r\n * restore cursor if with/for not matched\r\n */\r\n tokenizer.p = begin;\r\n break;\r\n }\r\n this.hash = new Hash(tokenizer.remaining(), liquid.options.keyValueSeparator);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, hash } = this;\r\n const filepath = (yield renderFilePath(this['file'], ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const childCtx = ctx.spawn();\r\n const scope = childCtx.bottom();\r\n __assign(scope, yield hash.render(ctx));\r\n if (this['with']) {\r\n const { value, alias } = this['with'];\r\n scope[alias || filepath] = yield evalToken(value, ctx);\r\n }\r\n if (this['for']) {\r\n const { value, alias } = this['for'];\r\n const collection = toEnumerable(yield evalToken(value, ctx));\r\n scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias);\r\n for (const item of collection) {\r\n scope[alias] = item;\r\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this['currentFile']));\r\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\r\n scope['forloop'].next();\r\n }\r\n }\r\n else {\r\n const templates = (yield liquid._parsePartialFile(filepath, childCtx.sync, this['currentFile']));\r\n yield liquid.renderer.renderTemplates(templates, childCtx, emitter);\r\n }\r\n }\r\n}\r\n/**\r\n * @return null for \"none\",\r\n * @return Template[] for quoted with tags and/or filters\r\n * @return Token for expression (not quoted)\r\n * @throws TypeError if cannot read next token\r\n */\r\nfunction parseFilePath(tokenizer, liquid, parser) {\r\n if (liquid.options.dynamicPartials) {\r\n const file = tokenizer.readValue();\r\n tokenizer.assert(file, 'illegal file path');\r\n if (file.getText() === 'none')\r\n return;\r\n if (isQuotedToken(file)) {\r\n // for filenames like \"files/{{file}}\", eval as liquid template\r\n const templates = parser.parse(evalQuotedToken(file));\r\n return optimize(templates);\r\n }\r\n return file;\r\n }\r\n const tokens = [...tokenizer.readFileNameTemplate(liquid.options)];\r\n const templates = optimize(parser.parseTokens(tokens));\r\n return templates === 'none' ? undefined : templates;\r\n}\r\nfunction optimize(templates) {\r\n // for filenames like \"files/file.liquid\", extract the string directly\r\n if (templates.length === 1 && isHTMLToken(templates[0].token))\r\n return templates[0].token.getContent();\r\n return templates;\r\n}\r\nfunction* renderFilePath(file, ctx, liquid) {\r\n if (typeof file === 'string')\r\n return file;\r\n if (Array.isArray(file))\r\n return liquid.renderer.renderTemplates(file, ctx);\r\n return yield evalToken(file, ctx);\r\n}\n\nclass IncludeTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const { tokenizer } = token;\r\n this['file'] = parseFilePath(tokenizer, this.liquid, parser);\r\n this['currentFile'] = token.file;\r\n const begin = tokenizer.p;\r\n const withStr = tokenizer.readIdentifier();\r\n if (withStr.content === 'with') {\r\n tokenizer.skipBlank();\r\n if (tokenizer.peek() !== ':') {\r\n this.withVar = tokenizer.readValue();\r\n }\r\n else\r\n tokenizer.p = begin;\r\n }\r\n else\r\n tokenizer.p = begin;\r\n this.hash = new Hash(tokenizer.remaining(), liquid.options.jekyllInclude || liquid.options.keyValueSeparator);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, hash, withVar } = this;\r\n const { renderer } = liquid;\r\n const filepath = (yield renderFilePath(this['file'], ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const saved = ctx.saveRegister('blocks', 'blockMode');\r\n ctx.setRegister('blocks', {});\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n const scope = (yield hash.render(ctx));\r\n if (withVar)\r\n scope[filepath] = yield evalToken(withVar, ctx);\r\n const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this['currentFile']));\r\n ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope);\r\n yield renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n ctx.restoreRegister(saved);\r\n }\r\n}\n\nclass DecrementTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.variable = this.tokenizer.readIdentifier().content;\r\n }\r\n render(context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n emitter.write(stringify(--scope[this.variable]));\r\n }\r\n}\n\nclass CycleTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.candidates = [];\r\n const group = this.tokenizer.readValue();\r\n this.tokenizer.skipBlank();\r\n if (group) {\r\n if (this.tokenizer.peek() === ':') {\r\n this.group = group;\r\n this.tokenizer.advance();\r\n }\r\n else\r\n this.candidates.push(group);\r\n }\r\n while (!this.tokenizer.end()) {\r\n const value = this.tokenizer.readValue();\r\n if (value)\r\n this.candidates.push(value);\r\n this.tokenizer.readTo(',');\r\n }\r\n this.tokenizer.assert(this.candidates.length, () => `empty candidates: \"${token.getText()}\"`);\r\n }\r\n *render(ctx, emitter) {\r\n const group = (yield evalToken(this.group, ctx));\r\n const fingerprint = `cycle:${group}:` + this.candidates.join(',');\r\n const groups = ctx.getRegister('cycle');\r\n let idx = groups[fingerprint];\r\n if (idx === undefined) {\r\n idx = groups[fingerprint] = 0;\r\n }\r\n const candidate = this.candidates[idx];\r\n idx = (idx + 1) % this.candidates.length;\r\n groups[fingerprint] = idx;\r\n return yield evalToken(candidate, ctx);\r\n }\r\n}\n\nclass IfTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n let p = [];\r\n parser.parseStream(remainTokens)\r\n .on('start', () => this.branches.push({\r\n value: new Value(tagToken.args, this.liquid),\r\n templates: (p = [])\r\n }))\r\n .on('tag:elsif', (token) => {\r\n assert(!this.elseTemplates, 'unexpected elsif after else');\r\n this.branches.push({\r\n value: new Value(token.args, this.liquid),\r\n templates: (p = [])\r\n });\r\n })\r\n .on('tag:else', tag => {\r\n assertEmpty(tag.args);\r\n assert(!this.elseTemplates, 'duplicated else');\r\n p = this.elseTemplates = [];\r\n })\r\n .on('tag:endif', function (tag) { assertEmpty(tag.args); this.stop(); })\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); })\r\n .start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n for (const { value, templates } of this.branches) {\r\n const v = yield value.value(ctx, ctx.opts.lenientIf);\r\n if (isTruthy(v, ctx)) {\r\n yield r.renderTemplates(templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates || [], ctx, emitter);\r\n }\r\n}\n\nclass IncrementTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.variable = this.tokenizer.readIdentifier().content;\r\n }\r\n render(context, emitter) {\r\n const scope = context.environments;\r\n if (!isNumber(scope[this.variable])) {\r\n scope[this.variable] = 0;\r\n }\r\n const val = scope[this.variable];\r\n scope[this.variable]++;\r\n emitter.write(stringify(val));\r\n }\r\n}\n\nclass LayoutTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n this.file = parseFilePath(this.tokenizer, this.liquid, parser);\r\n this['currentFile'] = token.file;\r\n this.args = new Hash(this.tokenizer.remaining(), liquid.options.keyValueSeparator);\r\n this.templates = parser.parseTokens(remainTokens);\r\n }\r\n *render(ctx, emitter) {\r\n const { liquid, args, file } = this;\r\n const { renderer } = liquid;\r\n if (file === undefined) {\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n yield renderer.renderTemplates(this.templates, ctx, emitter);\r\n return;\r\n }\r\n const filepath = (yield renderFilePath(this.file, ctx, liquid));\r\n assert(filepath, () => `illegal file path \"${filepath}\"`);\r\n const templates = (yield liquid._parseLayoutFile(filepath, ctx.sync, this['currentFile']));\r\n // render remaining contents and store rendered results\r\n ctx.setRegister('blockMode', BlockMode.STORE);\r\n const html = yield renderer.renderTemplates(this.templates, ctx);\r\n const blocks = ctx.getRegister('blocks');\r\n // set whole content to anonymous block if anonymous doesn't specified\r\n if (blocks[''] === undefined)\r\n blocks[''] = (parent, emitter) => emitter.write(html);\r\n ctx.setRegister('blockMode', BlockMode.OUTPUT);\r\n // render the layout file use stored blocks\r\n ctx.push((yield args.render(ctx)));\r\n yield renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n }\r\n}\n\nclass BlockTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n this.templates = [];\r\n const match = /\\w+/.exec(token.args);\r\n this.block = match ? match[0] : '';\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endblock')\r\n return;\r\n const template = parser.parseToken(token, remainTokens);\r\n this.templates.push(template);\r\n }\r\n throw new Error(`tag ${token.getText()} not closed`);\r\n }\r\n *render(ctx, emitter) {\r\n const blockRender = this.getBlockRender(ctx);\r\n if (ctx.getRegister('blockMode') === BlockMode.STORE) {\r\n ctx.getRegister('blocks')[this.block] = blockRender;\r\n }\r\n else {\r\n yield blockRender(new BlockDrop(), emitter);\r\n }\r\n }\r\n getBlockRender(ctx) {\r\n const { liquid, templates } = this;\r\n const renderChild = ctx.getRegister('blocks')[this.block];\r\n const renderCurrent = function* (superBlock, emitter) {\r\n // add {{ block.super }} support when rendering\r\n ctx.push({ block: superBlock });\r\n yield liquid.renderer.renderTemplates(templates, ctx, emitter);\r\n ctx.pop();\r\n };\r\n return renderChild\r\n ? (superBlock, emitter) => renderChild(new BlockDrop(() => renderCurrent(superBlock, emitter)), emitter)\r\n : renderCurrent;\r\n }\r\n}\n\nclass RawTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n this.tokens = [];\r\n while (remainTokens.length) {\r\n const token = remainTokens.shift();\r\n if (isTagToken(token) && token.name === 'endraw')\r\n return;\r\n this.tokens.push(token);\r\n }\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n }\r\n render() {\r\n return this.tokens.map((token) => token.getText()).join('');\r\n }\r\n}\n\nclass TablerowloopDrop extends ForloopDrop {\r\n constructor(length, cols, collection, variable) {\r\n super(length, collection, variable);\r\n this.length = length;\r\n this.cols = cols;\r\n }\r\n row() {\r\n return Math.floor(this.i / this.cols) + 1;\r\n }\r\n col0() {\r\n return (this.i % this.cols);\r\n }\r\n col() {\r\n return this.col0() + 1;\r\n }\r\n col_first() {\r\n return this.col0() === 0;\r\n }\r\n col_last() {\r\n return this.col() === this.cols;\r\n }\r\n}\n\nclass TablerowTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n const variable = this.tokenizer.readIdentifier();\r\n this.tokenizer.skipBlank();\r\n const predicate = this.tokenizer.readIdentifier();\r\n const collectionToken = this.tokenizer.readValue();\r\n if (predicate.content !== 'in' || !collectionToken) {\r\n throw new Error(`illegal tag: ${tagToken.getText()}`);\r\n }\r\n this.variable = variable.content;\r\n this.collection = collectionToken;\r\n this.args = new Hash(this.tokenizer.remaining(), liquid.options.keyValueSeparator);\r\n this.templates = [];\r\n let p;\r\n const stream = parser.parseStream(remainTokens)\r\n .on('start', () => (p = this.templates))\r\n .on('tag:endtablerow', () => stream.stop())\r\n .on('template', (tpl) => p.push(tpl))\r\n .on('end', () => {\r\n throw new Error(`tag ${tagToken.getText()} not closed`);\r\n });\r\n stream.start();\r\n }\r\n *render(ctx, emitter) {\r\n let collection = toEnumerable(yield evalToken(this.collection, ctx));\r\n const args = (yield this.args.render(ctx));\r\n const offset = args.offset || 0;\r\n const limit = (args.limit === undefined) ? collection.length : args.limit;\r\n collection = collection.slice(offset, offset + limit);\r\n const cols = args.cols || collection.length;\r\n const r = this.liquid.renderer;\r\n const tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable);\r\n const scope = { tablerowloop };\r\n ctx.push(scope);\r\n for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) {\r\n scope[this.variable] = collection[idx];\r\n if (tablerowloop.col0() === 0) {\r\n if (tablerowloop.row() !== 1)\r\n emitter.write('');\r\n emitter.write(``);\r\n }\r\n emitter.write(``);\r\n yield r.renderTemplates(this.templates, ctx, emitter);\r\n emitter.write('');\r\n }\r\n if (collection.length)\r\n emitter.write('');\r\n ctx.pop();\r\n }\r\n}\n\nclass UnlessTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid, parser) {\r\n super(tagToken, remainTokens, liquid);\r\n this.branches = [];\r\n this.elseTemplates = [];\r\n let p = [];\r\n let elseCount = 0;\r\n parser.parseStream(remainTokens)\r\n .on('start', () => this.branches.push({\r\n value: new Value(tagToken.args, this.liquid),\r\n test: isFalsy,\r\n templates: (p = [])\r\n }))\r\n .on('tag:elsif', (token) => {\r\n if (elseCount > 0) {\r\n p = [];\r\n return;\r\n }\r\n this.branches.push({\r\n value: new Value(token.args, this.liquid),\r\n test: isTruthy,\r\n templates: (p = [])\r\n });\r\n })\r\n .on('tag:else', () => {\r\n elseCount++;\r\n p = this.elseTemplates;\r\n })\r\n .on('tag:endunless', function () { this.stop(); })\r\n .on('template', (tpl) => {\r\n if (p !== this.elseTemplates || elseCount === 1) {\r\n p.push(tpl);\r\n }\r\n })\r\n .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); })\r\n .start();\r\n }\r\n *render(ctx, emitter) {\r\n const r = this.liquid.renderer;\r\n for (const { value, test, templates } of this.branches) {\r\n const v = yield value.value(ctx, ctx.opts.lenientIf);\r\n if (test(v, ctx)) {\r\n yield r.renderTemplates(templates, ctx, emitter);\r\n return;\r\n }\r\n }\r\n yield r.renderTemplates(this.elseTemplates, ctx, emitter);\r\n }\r\n}\n\nclass BreakTag extends Tag {\r\n render(ctx, emitter) {\r\n emitter['break'] = true;\r\n }\r\n}\n\nclass ContinueTag extends Tag {\r\n render(ctx, emitter) {\r\n emitter['continue'] = true;\r\n }\r\n}\n\nclass EchoTag extends Tag {\r\n constructor(token, remainTokens, liquid) {\r\n super(token, remainTokens, liquid);\r\n this.tokenizer.skipBlank();\r\n if (!this.tokenizer.end()) {\r\n this.value = new Value(this.tokenizer.readFilteredValue(), this.liquid);\r\n }\r\n }\r\n *render(ctx, emitter) {\r\n if (!this.value)\r\n return;\r\n const val = yield this.value.value(ctx, false);\r\n emitter.write(val);\r\n }\r\n}\n\nclass LiquidTag extends Tag {\r\n constructor(token, remainTokens, liquid, parser) {\r\n super(token, remainTokens, liquid);\r\n const tokens = this.tokenizer.readLiquidTagTokens(this.liquid.options);\r\n this.templates = parser.parseTokens(tokens);\r\n }\r\n *render(ctx, emitter) {\r\n yield this.liquid.renderer.renderTemplates(this.templates, ctx, emitter);\r\n }\r\n}\n\nclass InlineCommentTag extends Tag {\r\n constructor(tagToken, remainTokens, liquid) {\r\n super(tagToken, remainTokens, liquid);\r\n if (tagToken.args.search(/\\n\\s*[^#\\s]/g) !== -1) {\r\n throw new Error('every line of an inline comment must start with a \\'#\\' character');\r\n }\r\n }\r\n render() { }\r\n}\n\nconst tags = {\r\n assign: AssignTag,\r\n 'for': ForTag,\r\n capture: CaptureTag,\r\n 'case': CaseTag,\r\n comment: CommentTag,\r\n include: IncludeTag,\r\n render: RenderTag,\r\n decrement: DecrementTag,\r\n increment: IncrementTag,\r\n cycle: CycleTag,\r\n 'if': IfTag,\r\n layout: LayoutTag,\r\n block: BlockTag,\r\n raw: RawTag,\r\n tablerow: TablerowTag,\r\n unless: UnlessTag,\r\n 'break': BreakTag,\r\n 'continue': ContinueTag,\r\n echo: EchoTag,\r\n liquid: LiquidTag,\r\n '#': InlineCommentTag\r\n};\n\nclass Liquid {\r\n constructor(opts = {}) {\r\n this.renderer = new Render();\r\n this.filters = {};\r\n this.tags = {};\r\n this.options = normalize(opts);\r\n // eslint-disable-next-line deprecation/deprecation\r\n this.parser = new Parser(this);\r\n forOwn(tags, (conf, name) => this.registerTag(name, conf));\r\n forOwn(filters, (handler, name) => this.registerFilter(name, handler));\r\n }\r\n parse(html, filepath) {\r\n const parser = new Parser(this);\r\n return parser.parse(html, filepath);\r\n }\r\n _render(tpl, scope, renderOptions) {\r\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options, renderOptions);\r\n return this.renderer.renderTemplates(tpl, ctx);\r\n }\r\n render(tpl, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: false })));\r\n });\r\n }\r\n renderSync(tpl, scope, renderOptions) {\r\n return toValueSync(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: true })));\r\n }\r\n renderToNodeStream(tpl, scope, renderOptions = {}) {\r\n const ctx = new Context(scope, this.options, renderOptions);\r\n return this.renderer.renderTemplatesToNodeStream(tpl, ctx);\r\n }\r\n _parseAndRender(html, scope, renderOptions) {\r\n const tpl = this.parse(html);\r\n return this._render(tpl, scope, renderOptions);\r\n }\r\n parseAndRender(html, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: false })));\r\n });\r\n }\r\n parseAndRenderSync(html, scope, renderOptions) {\r\n return toValueSync(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: true })));\r\n }\r\n _parsePartialFile(file, sync, currentFile) {\r\n return new Parser(this).parseFile(file, sync, LookupType.Partials, currentFile);\r\n }\r\n _parseLayoutFile(file, sync, currentFile) {\r\n return new Parser(this).parseFile(file, sync, LookupType.Layouts, currentFile);\r\n }\r\n _parseFile(file, sync, lookupType, currentFile) {\r\n return new Parser(this).parseFile(file, sync, lookupType, currentFile);\r\n }\r\n parseFile(file, lookupType) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(new Parser(this).parseFile(file, false, lookupType));\r\n });\r\n }\r\n parseFileSync(file, lookupType) {\r\n return toValueSync(new Parser(this).parseFile(file, true, lookupType));\r\n }\r\n *_renderFile(file, ctx, renderFileOptions) {\r\n const templates = (yield this._parseFile(file, renderFileOptions.sync, renderFileOptions.lookupType));\r\n return yield this._render(templates, ctx, renderFileOptions);\r\n }\r\n renderFile(file, ctx, renderFileOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: false })));\r\n });\r\n }\r\n renderFileSync(file, ctx, renderFileOptions) {\r\n return toValueSync(this._renderFile(file, ctx, Object.assign(Object.assign({}, renderFileOptions), { sync: true })));\r\n }\r\n renderFileToNodeStream(file, scope, renderOptions) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const templates = yield this.parseFile(file);\r\n return this.renderToNodeStream(templates, scope, renderOptions);\r\n });\r\n }\r\n _evalValue(str, scope) {\r\n const value = new Value(str, this);\r\n const ctx = scope instanceof Context ? scope : new Context(scope, this.options);\r\n return value.value(ctx);\r\n }\r\n evalValue(str, scope) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n return toPromise(this._evalValue(str, scope));\r\n });\r\n }\r\n evalValueSync(str, scope) {\r\n return toValueSync(this._evalValue(str, scope));\r\n }\r\n registerFilter(name, filter) {\r\n this.filters[name] = filter;\r\n }\r\n registerTag(name, tag) {\r\n this.tags[name] = isFunction(tag) ? tag : createTagClass(tag);\r\n }\r\n plugin(plugin) {\r\n return plugin.call(this, Liquid);\r\n }\r\n express() {\r\n const self = this; // eslint-disable-line\r\n let firstCall = true;\r\n return function (filePath, ctx, callback) {\r\n if (firstCall) {\r\n firstCall = false;\r\n const dirs = normalizeDirectoryList(this.root);\r\n self.options.root.unshift(...dirs);\r\n self.options.layouts.unshift(...dirs);\r\n self.options.partials.unshift(...dirs);\r\n }\r\n self.renderFile(filePath, ctx).then(html => callback(null, html), callback);\r\n };\r\n }\r\n}\n\n/* istanbul ignore file */\r\nconst version = '[VI]{version}[/VI]';\n\nexport { AssertionError, AssignTag, BlockTag, BreakTag, CaptureTag, CaseTag, CommentTag, Context, ContinueTag, CycleTag, DecrementTag, Drop, EchoTag, Expression, Filter, ForTag, Hash, IfTag, IncludeTag, IncrementTag, InlineCommentTag, LayoutTag, Liquid, LiquidError, LiquidTag, Output, ParseError, ParseStream, RawTag, RenderError, RenderTag, TablerowTag, Tag, TagToken, Token, TokenKind, TokenizationError, Tokenizer, typeGuards as TypeGuards, UndefinedVariableError, UnlessTag, Value, assert, createTrie, defaultOperators, defaultOptions, evalQuotedToken, evalToken, filters, isFalsy, isTruthy, tags, toPromise, toValue, toValueSync, version };\n","import { Liquid } from 'liquidjs';\r\n\r\nconst ccmCustomFileSystem = {\r\n resolve: (root, file) => {\r\n if (!file.endsWith('.html')) {\r\n file += '.html';\r\n }\r\n return `${root}/${file}?v=${build}`;\r\n },\r\n exists: (file) => {\r\n // Check existence by doing a HEAD request\r\n return fetch(file, { method: 'HEAD' })\r\n .then(response => response.ok)\r\n .catch(() => false);\r\n },\r\n existsSync: (file) => {\r\n // Synchronous implementation using XMLHttpRequest\r\n const xhr = new XMLHttpRequest();\r\n try {\r\n xhr.open('HEAD', file, false); // false makes it synchronous\r\n xhr.send(null);\r\n return xhr.status >= 200 && xhr.status < 300;\r\n } catch (e) {\r\n return false;\r\n }\r\n },\r\n readFile: (file, encoding) => {\r\n return fetch(file)\r\n .then(response => {\r\n if (!response.ok) {\r\n throw new Error(`Failed to load file: ${file}`);\r\n }\r\n return response.text();\r\n });\r\n },\r\n readFileSync: (file, encoding) => {\r\n // Synchronous implementation using XMLHttpRequest\r\n const xhr = new XMLHttpRequest();\r\n try {\r\n xhr.open('GET', file, false); // false makes it synchronous\r\n xhr.send(null);\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n return xhr.responseText;\r\n } else {\r\n throw new Error(`Failed to load file: ${file}`);\r\n }\r\n } catch (e) {\r\n throw new Error(`Failed to load file: ${file}`);\r\n }\r\n }\r\n}\r\n\r\nexport class TemplateService {\r\n static Init() {\r\n this.engine = this.GetEngine();\r\n }\r\n\r\n static GetEngine() {\r\n this.engine = new Liquid({\r\n root: '/assets/js/dist/templates',\r\n extname: '.html', // extension used for layouts/includes (.html) templates\r\n fs: ccmCustomFileSystem\r\n });\r\n\r\n return this.engine;\r\n }\r\n\r\n static async GetRenderedTemplate(templateName, data) {\r\n\r\n if (!this.engine) {\r\n this.Init();\r\n }\r\n\r\n return await this.engine.renderFile(`${templateName}`, data);\r\n }\r\n\r\n static GetRenderedTemplateAsync(templateName, data) {\r\n\r\n if (!this.engine) {\r\n this.Init();\r\n }\r\n\r\n return this.engine.renderFile(`${templateName}`, data);\r\n }\r\n\r\n static GetRenderedTemplateSync(templateName, data) {\r\n if (!this.engine) {\r\n this.Init();\r\n }\r\n\r\n DEBUG && console.info(\"====> Rendering Template - \" + templateName);\r\n\r\n return this.engine.renderFileSync(`${templateName}`, data);\r\n }\r\n\r\n static RenderTemplateElement(templateName, data, element) {\r\n if (!this.engine) {\r\n this.Init();\r\n }\r\n\r\n return this.engine.renderFile(`${templateName}`, data)\r\n .then(content => {\r\n element.innerHTML = content;\r\n });\r\n }\r\n}","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nvar NotyfNotification = /** @class */ (function () {\r\n function NotyfNotification(options) {\r\n this.options = options;\r\n this.listeners = {};\r\n }\r\n NotyfNotification.prototype.on = function (eventType, cb) {\r\n var callbacks = this.listeners[eventType] || [];\r\n this.listeners[eventType] = callbacks.concat([cb]);\r\n };\r\n NotyfNotification.prototype.triggerEvent = function (eventType, event) {\r\n var _this = this;\r\n var callbacks = this.listeners[eventType] || [];\r\n callbacks.forEach(function (cb) { return cb({ target: _this, event: event }); });\r\n };\r\n return NotyfNotification;\r\n}());\r\nvar NotyfArrayEvent;\r\n(function (NotyfArrayEvent) {\r\n NotyfArrayEvent[NotyfArrayEvent[\"Add\"] = 0] = \"Add\";\r\n NotyfArrayEvent[NotyfArrayEvent[\"Remove\"] = 1] = \"Remove\";\r\n})(NotyfArrayEvent || (NotyfArrayEvent = {}));\r\nvar NotyfArray = /** @class */ (function () {\r\n function NotyfArray() {\r\n this.notifications = [];\r\n }\r\n NotyfArray.prototype.push = function (elem) {\r\n this.notifications.push(elem);\r\n this.updateFn(elem, NotyfArrayEvent.Add, this.notifications);\r\n };\r\n NotyfArray.prototype.splice = function (index, num) {\r\n var elem = this.notifications.splice(index, num)[0];\r\n this.updateFn(elem, NotyfArrayEvent.Remove, this.notifications);\r\n return elem;\r\n };\r\n NotyfArray.prototype.indexOf = function (elem) {\r\n return this.notifications.indexOf(elem);\r\n };\r\n NotyfArray.prototype.onUpdate = function (fn) {\r\n this.updateFn = fn;\r\n };\r\n return NotyfArray;\r\n}());\n\nvar NotyfEvent;\r\n(function (NotyfEvent) {\r\n NotyfEvent[\"Dismiss\"] = \"dismiss\";\r\n NotyfEvent[\"Click\"] = \"click\";\r\n})(NotyfEvent || (NotyfEvent = {}));\r\nvar DEFAULT_OPTIONS = {\r\n types: [\r\n {\r\n type: 'success',\r\n className: 'notyf__toast--success',\r\n backgroundColor: '#3dc763',\r\n icon: {\r\n className: 'notyf__icon--success',\r\n tagName: 'i',\r\n },\r\n },\r\n {\r\n type: 'error',\r\n className: 'notyf__toast--error',\r\n backgroundColor: '#ed3d3d',\r\n icon: {\r\n className: 'notyf__icon--error',\r\n tagName: 'i',\r\n },\r\n },\r\n ],\r\n duration: 2000,\r\n ripple: true,\r\n position: {\r\n x: 'right',\r\n y: 'bottom',\r\n },\r\n dismissible: false,\r\n};\n\nvar NotyfView = /** @class */ (function () {\r\n function NotyfView() {\r\n this.notifications = [];\r\n this.events = {};\r\n this.X_POSITION_FLEX_MAP = {\r\n left: 'flex-start',\r\n center: 'center',\r\n right: 'flex-end',\r\n };\r\n this.Y_POSITION_FLEX_MAP = {\r\n top: 'flex-start',\r\n center: 'center',\r\n bottom: 'flex-end',\r\n };\r\n // Creates the main notifications container\r\n var docFrag = document.createDocumentFragment();\r\n var notyfContainer = this._createHTMLElement({ tagName: 'div', className: 'notyf' });\r\n docFrag.appendChild(notyfContainer);\r\n document.body.appendChild(docFrag);\r\n this.container = notyfContainer;\r\n // Identifies the main animation end event\r\n this.animationEndEventName = this._getAnimationEndEventName();\r\n this._createA11yContainer();\r\n }\r\n NotyfView.prototype.on = function (event, cb) {\r\n var _a;\r\n this.events = __assign(__assign({}, this.events), (_a = {}, _a[event] = cb, _a));\r\n };\r\n NotyfView.prototype.update = function (notification, type) {\r\n if (type === NotyfArrayEvent.Add) {\r\n this.addNotification(notification);\r\n }\r\n else if (type === NotyfArrayEvent.Remove) {\r\n this.removeNotification(notification);\r\n }\r\n };\r\n NotyfView.prototype.removeNotification = function (notification) {\r\n var _this = this;\r\n var renderedNotification = this._popRenderedNotification(notification);\r\n var node;\r\n if (!renderedNotification) {\r\n return;\r\n }\r\n node = renderedNotification.node;\r\n node.classList.add('notyf__toast--disappear');\r\n var handleEvent;\r\n node.addEventListener(this.animationEndEventName, (handleEvent = function (event) {\r\n if (event.target === node) {\r\n node.removeEventListener(_this.animationEndEventName, handleEvent);\r\n _this.container.removeChild(node);\r\n }\r\n }));\r\n };\r\n NotyfView.prototype.addNotification = function (notification) {\r\n var node = this._renderNotification(notification);\r\n this.notifications.push({ notification: notification, node: node });\r\n // For a11y purposes, we still want to announce that there's a notification in the screen\r\n // even if it comes with no message.\r\n this._announce(notification.options.message || 'Notification');\r\n };\r\n NotyfView.prototype._renderNotification = function (notification) {\r\n var _a;\r\n var card = this._buildNotificationCard(notification);\r\n var className = notification.options.className;\r\n if (className) {\r\n (_a = card.classList).add.apply(_a, className.split(' '));\r\n }\r\n this.container.appendChild(card);\r\n return card;\r\n };\r\n NotyfView.prototype._popRenderedNotification = function (notification) {\r\n var idx = -1;\r\n for (var i = 0; i < this.notifications.length && idx < 0; i++) {\r\n if (this.notifications[i].notification === notification) {\r\n idx = i;\r\n }\r\n }\r\n if (idx !== -1) {\r\n return this.notifications.splice(idx, 1)[0];\r\n }\r\n return;\r\n };\r\n NotyfView.prototype.getXPosition = function (options) {\r\n var _a;\r\n return ((_a = options === null || options === void 0 ? void 0 : options.position) === null || _a === void 0 ? void 0 : _a.x) || 'right';\r\n };\r\n NotyfView.prototype.getYPosition = function (options) {\r\n var _a;\r\n return ((_a = options === null || options === void 0 ? void 0 : options.position) === null || _a === void 0 ? void 0 : _a.y) || 'bottom';\r\n };\r\n NotyfView.prototype.adjustContainerAlignment = function (options) {\r\n var align = this.X_POSITION_FLEX_MAP[this.getXPosition(options)];\r\n var justify = this.Y_POSITION_FLEX_MAP[this.getYPosition(options)];\r\n var style = this.container.style;\r\n style.setProperty('justify-content', justify);\r\n style.setProperty('align-items', align);\r\n };\r\n NotyfView.prototype._buildNotificationCard = function (notification) {\r\n var _this = this;\r\n var options = notification.options;\r\n var iconOpts = options.icon;\r\n // Adjust container according to position (e.g. top-left, bottom-center, etc)\r\n this.adjustContainerAlignment(options);\r\n // Create elements\r\n var notificationElem = this._createHTMLElement({ tagName: 'div', className: 'notyf__toast' });\r\n var ripple = this._createHTMLElement({ tagName: 'div', className: 'notyf__ripple' });\r\n var wrapper = this._createHTMLElement({ tagName: 'div', className: 'notyf__wrapper' });\r\n var message = this._createHTMLElement({ tagName: 'div', className: 'notyf__message' });\r\n message.innerHTML = options.message || '';\r\n var mainColor = options.background || options.backgroundColor;\r\n // Build the icon and append it to the card\r\n if (iconOpts) {\r\n var iconContainer = this._createHTMLElement({ tagName: 'div', className: 'notyf__icon' });\r\n if (typeof iconOpts === 'string' || iconOpts instanceof String)\r\n iconContainer.innerHTML = new String(iconOpts).valueOf();\r\n if (typeof iconOpts === 'object') {\r\n var _a = iconOpts.tagName, tagName = _a === void 0 ? 'i' : _a, className_1 = iconOpts.className, text = iconOpts.text, _b = iconOpts.color, color = _b === void 0 ? mainColor : _b;\r\n var iconElement = this._createHTMLElement({ tagName: tagName, className: className_1, text: text });\r\n if (color)\r\n iconElement.style.color = color;\r\n iconContainer.appendChild(iconElement);\r\n }\r\n wrapper.appendChild(iconContainer);\r\n }\r\n wrapper.appendChild(message);\r\n notificationElem.appendChild(wrapper);\r\n // Add ripple if applicable, else just paint the full toast\r\n if (mainColor) {\r\n if (options.ripple) {\r\n ripple.style.background = mainColor;\r\n notificationElem.appendChild(ripple);\r\n }\r\n else {\r\n notificationElem.style.background = mainColor;\r\n }\r\n }\r\n // Add dismiss button\r\n if (options.dismissible) {\r\n var dismissWrapper = this._createHTMLElement({ tagName: 'div', className: 'notyf__dismiss' });\r\n var dismissButton = this._createHTMLElement({\r\n tagName: 'button',\r\n className: 'notyf__dismiss-btn',\r\n });\r\n dismissWrapper.appendChild(dismissButton);\r\n wrapper.appendChild(dismissWrapper);\r\n notificationElem.classList.add(\"notyf__toast--dismissible\");\r\n dismissButton.addEventListener('click', function (event) {\r\n var _a, _b;\r\n (_b = (_a = _this.events)[NotyfEvent.Dismiss]) === null || _b === void 0 ? void 0 : _b.call(_a, { target: notification, event: event });\r\n event.stopPropagation();\r\n });\r\n }\r\n notificationElem.addEventListener('click', function (event) { var _a, _b; return (_b = (_a = _this.events)[NotyfEvent.Click]) === null || _b === void 0 ? void 0 : _b.call(_a, { target: notification, event: event }); });\r\n // Adjust margins depending on whether its an upper or lower notification\r\n var className = this.getYPosition(options) === 'top' ? 'upper' : 'lower';\r\n notificationElem.classList.add(\"notyf__toast--\" + className);\r\n return notificationElem;\r\n };\r\n NotyfView.prototype._createHTMLElement = function (_a) {\r\n var tagName = _a.tagName, className = _a.className, text = _a.text;\r\n var elem = document.createElement(tagName);\r\n if (className) {\r\n elem.className = className;\r\n }\r\n elem.textContent = text || null;\r\n return elem;\r\n };\r\n /**\r\n * Creates an invisible container which will announce the notyfs to\r\n * screen readers\r\n */\r\n NotyfView.prototype._createA11yContainer = function () {\r\n var a11yContainer = this._createHTMLElement({ tagName: 'div', className: 'notyf-announcer' });\r\n a11yContainer.setAttribute('aria-atomic', 'true');\r\n a11yContainer.setAttribute('aria-live', 'polite');\r\n // Set the a11y container to be visible hidden. Can't use display: none as\r\n // screen readers won't read it.\r\n a11yContainer.style.border = '0';\r\n a11yContainer.style.clip = 'rect(0 0 0 0)';\r\n a11yContainer.style.height = '1px';\r\n a11yContainer.style.margin = '-1px';\r\n a11yContainer.style.overflow = 'hidden';\r\n a11yContainer.style.padding = '0';\r\n a11yContainer.style.position = 'absolute';\r\n a11yContainer.style.width = '1px';\r\n a11yContainer.style.outline = '0';\r\n document.body.appendChild(a11yContainer);\r\n this.a11yContainer = a11yContainer;\r\n };\r\n /**\r\n * Announces a message to screenreaders.\r\n */\r\n NotyfView.prototype._announce = function (message) {\r\n var _this = this;\r\n this.a11yContainer.textContent = '';\r\n // This 100ms timeout is necessary for some browser + screen-reader combinations:\r\n // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.\r\n // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a\r\n // second time without clearing and then using a non-zero delay.\r\n // (using JAWS 17 at time of this writing).\r\n // https://github.com/angular/material2/blob/master/src/cdk/a11y/live-announcer/live-announcer.ts\r\n setTimeout(function () {\r\n _this.a11yContainer.textContent = message;\r\n }, 100);\r\n };\r\n /**\r\n * Determine which animationend event is supported\r\n */\r\n NotyfView.prototype._getAnimationEndEventName = function () {\r\n var el = document.createElement('_fake');\r\n var transitions = {\r\n MozTransition: 'animationend',\r\n OTransition: 'oAnimationEnd',\r\n WebkitTransition: 'webkitAnimationEnd',\r\n transition: 'animationend',\r\n };\r\n var t;\r\n for (t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n return transitions[t];\r\n }\r\n }\r\n // No supported animation end event. Using \"animationend\" as a fallback\r\n return 'animationend';\r\n };\r\n return NotyfView;\r\n}());\n\n/**\r\n * Main controller class. Defines the main Notyf API.\r\n */\r\nvar Notyf = /** @class */ (function () {\r\n function Notyf(opts) {\r\n var _this = this;\r\n this.dismiss = this._removeNotification;\r\n this.notifications = new NotyfArray();\r\n this.view = new NotyfView();\r\n var types = this.registerTypes(opts);\r\n this.options = __assign(__assign({}, DEFAULT_OPTIONS), opts);\r\n this.options.types = types;\r\n this.notifications.onUpdate(function (elem, type) { return _this.view.update(elem, type); });\r\n this.view.on(NotyfEvent.Dismiss, function (_a) {\r\n var target = _a.target, event = _a.event;\r\n _this._removeNotification(target);\r\n // tslint:disable-next-line: no-string-literal\r\n target['triggerEvent'](NotyfEvent.Dismiss, event);\r\n });\r\n // tslint:disable-next-line: no-string-literal\r\n this.view.on(NotyfEvent.Click, function (_a) {\r\n var target = _a.target, event = _a.event;\r\n return target['triggerEvent'](NotyfEvent.Click, event);\r\n });\r\n }\r\n Notyf.prototype.error = function (payload) {\r\n var options = this.normalizeOptions('error', payload);\r\n return this.open(options);\r\n };\r\n Notyf.prototype.success = function (payload) {\r\n var options = this.normalizeOptions('success', payload);\r\n return this.open(options);\r\n };\r\n Notyf.prototype.open = function (options) {\r\n var defaultOpts = this.options.types.find(function (_a) {\r\n var type = _a.type;\r\n return type === options.type;\r\n }) || {};\r\n var config = __assign(__assign({}, defaultOpts), options);\r\n this.assignProps(['ripple', 'position', 'dismissible'], config);\r\n var notification = new NotyfNotification(config);\r\n this._pushNotification(notification);\r\n return notification;\r\n };\r\n Notyf.prototype.dismissAll = function () {\r\n while (this.notifications.splice(0, 1))\r\n ;\r\n };\r\n /**\r\n * Assigns properties to a config object based on two rules:\r\n * 1. If the config object already sets that prop, leave it as so\r\n * 2. Otherwise, use the default prop from the global options\r\n *\r\n * It's intended to build the final config object to open a notification. e.g. if\r\n * 'dismissible' is not set, then use the value from the global config.\r\n *\r\n * @param props - properties to be assigned to the config object\r\n * @param config - object whose properties need to be set\r\n */\r\n Notyf.prototype.assignProps = function (props, config) {\r\n var _this = this;\r\n props.forEach(function (prop) {\r\n // intentional double equality to check for both null and undefined\r\n config[prop] = config[prop] == null ? _this.options[prop] : config[prop];\r\n });\r\n };\r\n Notyf.prototype._pushNotification = function (notification) {\r\n var _this = this;\r\n this.notifications.push(notification);\r\n var duration = notification.options.duration !== undefined ? notification.options.duration : this.options.duration;\r\n if (duration) {\r\n setTimeout(function () { return _this._removeNotification(notification); }, duration);\r\n }\r\n };\r\n Notyf.prototype._removeNotification = function (notification) {\r\n var index = this.notifications.indexOf(notification);\r\n if (index !== -1) {\r\n this.notifications.splice(index, 1);\r\n }\r\n };\r\n Notyf.prototype.normalizeOptions = function (type, payload) {\r\n var options = { type: type };\r\n if (typeof payload === 'string') {\r\n options.message = payload;\r\n }\r\n else if (typeof payload === 'object') {\r\n options = __assign(__assign({}, options), payload);\r\n }\r\n return options;\r\n };\r\n Notyf.prototype.registerTypes = function (opts) {\r\n var incomingTypes = ((opts && opts.types) || []).slice();\r\n var finalDefaultTypes = DEFAULT_OPTIONS.types.map(function (defaultType) {\r\n // find if there's a default type within the user input's types, if so, it means the user\r\n // wants to change some of the default settings\r\n var userTypeIdx = -1;\r\n incomingTypes.forEach(function (t, idx) {\r\n if (t.type === defaultType.type)\r\n userTypeIdx = idx;\r\n });\r\n var userType = userTypeIdx !== -1 ? incomingTypes.splice(userTypeIdx, 1)[0] : {};\r\n return __assign(__assign({}, defaultType), userType);\r\n });\r\n return finalDefaultTypes.concat(incomingTypes);\r\n };\r\n return Notyf;\r\n}());\n\nexport { DEFAULT_OPTIONS, Notyf, NotyfArray, NotyfArrayEvent, NotyfEvent, NotyfNotification, NotyfView };\n","import { Notyf } from 'notyf';\r\nimport { ConfigService } from './ConfigService'\r\nimport { TemplateService } from './TemplateService';\r\nimport { AuthService as auth } from './AuthService';\r\nimport { LangService } from './LangService';\r\n\r\nconst templateLoginRequired = 'AuthRequiredTemplate';\r\n\r\nexport class UtilService {\r\n\r\n\r\n // ********************************************\r\n // Url Utilities\r\n // ********************************************\r\n static async showLoginRequired(element, language) {\r\n // Load Language\r\n var dataObj = {};\r\n dataObj.langData = await LangService.load('common', language);\r\n\r\n console.log(\"===> Showing Login Screen\");\r\n console.log(dataObj);\r\n\r\n // Load Auth Required Template\r\n var mainContent = await TemplateService.GetRenderedTemplate(templateLoginRequired, dataObj);\r\n element.innerHTML = mainContent;\r\n\r\n // Wire up Login Button Events to redirect to auth.redirectToAuthentication()\r\n var authElements = document.querySelectorAll('[data-component=\"authRequiredLoginButton\"]');\r\n\r\n authElements.forEach(btn => {\r\n btn.addEventListener('click', function () {\r\n auth.redirectToAuthentication();\r\n });\r\n });\r\n }\r\n\r\n // ********************************************\r\n // GetOS function\r\n // Returns the device OS\r\n // ********************************************\r\n static getOS() {\r\n var userAgent = window.navigator.userAgent,\r\n platform = window.navigator.platform,\r\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K', 'Mac'],\r\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\r\n iosPlatforms = ['iPhone', 'iPod'],\r\n os = null;\r\n\r\n if (macosPlatforms.indexOf(platform) !== -1) {\r\n os = 'Mac';\r\n }\r\n else if (iosPlatforms.indexOf(platform) !== -1) {\r\n os = 'iPhone/iPod';\r\n }\r\n else if (/iPad/.test(userAgent)) {\r\n os = 'iPad';\r\n }\r\n else if (windowsPlatforms.indexOf(platform) !== -1) {\r\n os = 'Windows';\r\n }\r\n else if (/Android/.test(userAgent)) {\r\n os = 'Android';\r\n }\r\n else if (!os && /Linux/.test(platform)) {\r\n os = 'Linux';\r\n }\r\n else {\r\n os = 'Other';\r\n }\r\n\r\n return os;\r\n }\r\n\r\n\r\n // ********************************************\r\n // Function to Get ClientID from Cookie\r\n // ********************************************\r\n static getClientID() {\r\n var attrs = this.getCookie(this.ccmClientCookie);\r\n\r\n if (attrs) {\r\n var values = attrs.split(\"&\");\r\n var obj = {};\r\n for (var i = 0; i < values.length; i++) {\r\n var keyValue = values[i].split(\"=\");\r\n obj[keyValue[0]] = keyValue[1];\r\n }\r\n\r\n return obj[\"clientId\"];\r\n }\r\n\r\n var clientId = this.guid();\r\n var lastClientDate = new Date();\r\n\r\n this.setCookie(ConfigService.ccmClientCookie(), `clientID=${clientId}&lastClientDate=${lastClientDate}`, 3650);\r\n\r\n return clientId;\r\n }\r\n\r\n\r\n // ********************************************\r\n // Generic Cookie Functions\r\n // ********************************************\r\n static setCookie(name, value, days) {\r\n var expires = \"\";\r\n if (days) {\r\n var date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = \"; expires=\" + date.toUTCString();\r\n }\r\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\r\n }\r\n\r\n static getCookie(name) {\r\n var nameEQ = name + \"=\";\r\n var ca = document.cookie.split(';');\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == ' ') c = c.substring(1, c.length);\r\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\r\n }\r\n return null;\r\n }\r\n\r\n static eraseCookie(name) {\r\n document.cookie = name + '=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';\r\n }\r\n\r\n // ********************************************\r\n // Generic GUID Functions\r\n // ********************************************\r\n static guid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n .replace(/[xy]/g, function (c) {\r\n const r = Math.random() * 16 | 0,\r\n v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n\r\n // ********************************************\r\n // Campus Functions\r\n // ********************************************\r\n static setCampus(campus) {\r\n this.setCookie(ConfigService.cookieCampus(), campus, 365);\r\n }\r\n\r\n static clearCampus() {\r\n this.eraseCookie(ConfigService.cookieCampus());\r\n }\r\n\r\n static getCampus() {\r\n try {\r\n\r\n var homeCookie = this.getCookie(ConfigService.cookieCampus());\r\n if (homeCookie != 'clearhome') {\r\n return homeCookie;\r\n }\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n // ********************************************\r\n // Function to Add Media Analytics\r\n // ********************************************\r\n static async addMediaAnalytics(entity, entityData, campus, isMobile) {\r\n var clientType = `Web`;\r\n\r\n if (isMobile) {\r\n clientType = 'Mobile';\r\n }\r\n\r\n var os = this.getOS();\r\n var clientID = this.getClientID();\r\n\r\n if (campus === '5') {\r\n campus = 'melbourne';\r\n }\r\n\r\n if (campus === '6') {\r\n campus = 'viera';\r\n }\r\n\r\n if (campus === '7') {\r\n campus = 'sebastian';\r\n }\r\n\r\n if (campus === '15') {\r\n campus = 'espanol';\r\n }\r\n\r\n\r\n var url = `https://calvarystats.azurewebsites.net/api/CreateSermonUsageData?ClientID=${clientID}&Entity=${entity}&EntityData=${entityData}&clientType=${clientType}&os=${os}&campus=${campus}`;\r\n\r\n try {\r\n fetch(`${url}`, {\r\n headers: {\r\n \"Content-Type\": \"text/plain\"\r\n },\r\n\r\n });\r\n }\r\n catch (err) {\r\n console.error('==> Analytics::Analytics failed to initialize.');\r\n console.error(err);\r\n }\r\n\r\n\r\n // $.getJSON(url);\r\n\r\n // No Geolocation for Mobile Pages\r\n //if (window.location.href.indexOf(\"mobilep\") === -1) {\r\n // if (\"geolocation\" in navigator) { //check geolocation available \r\n // //try to get user current location using getCurrentPosition() method\r\n // navigator.geolocation.getCurrentPosition(function (position) {\r\n // console.log(\"Found your location \\nLat : \" + position.coords.latitude + \" \\nLang :\" + position.coords.longitude);\r\n // });\r\n // } else {\r\n // console.log(\"Browser doesn't support geolocation!\");\r\n // }\r\n //}\r\n }\r\n\r\n\r\n // ********************************************\r\n // Function to dynamically load CSS\r\n // ********************************************\r\n static loadExternalCSS(url) {\r\n // Check if the CSS file with the given URL is already loaded\r\n if (!this.isCSSLoaded(url)) {\r\n // Create a new link element for the CSS file\r\n var link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.type = 'text/css';\r\n link.href = url;\r\n\r\n // Append the link element to the head of the document\r\n document.head.appendChild(link);\r\n }\r\n }\r\n\r\n static isCSSLoaded(url) {\r\n // Check if a CSS file with the given URL is already loaded\r\n var links = document.getElementsByTagName('link');\r\n for (var i = 0; i < links.length; i++) {\r\n if (links[i].href === url) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n // ********************************************\r\n // CopyUrlFunctions\r\n // ********************************************\r\n static createCopyUrl(queryVar, queryVal) {\r\n let currentPageUrl = window.location.href;\r\n\r\n // Prevent doubling querystring\r\n if (currentPageUrl.includes('?')) {\r\n currentPageUrl = currentPageUrl.split('?')[0];\r\n }\r\n\r\n return `${currentPageUrl}?${queryVar}=${queryVal}`;\r\n }\r\n\r\n static addCopyUrl(element, queryVar, queryVal) {\r\n let self = this;\r\n let copyUrl = this.createCopyUrl(queryVar, queryVal);\r\n\r\n // Clone the element to remove any existing events\r\n let elementId = element.id;\r\n\r\n self.cloneElement(element.id);\r\n\r\n let newElement = document.getElementById(elementId);\r\n\r\n newElement.addEventListener('click', () => {\r\n navigator.clipboard.writeText(copyUrl)\r\n .then(function () {\r\n // Show success message\r\n self.showSuccessToast('Url copied to clipboard', 3000);\r\n }).catch(function (error) {\r\n // Show error message\r\n self.showErrorToast('Something went wrong', 4000);\r\n });\r\n });\r\n }\r\n \r\n\r\n // ********************************************\r\n // Contact Modal Functions\r\n // ********************************************\r\n static initContactModal() {\r\n const element = document.getElementById('modalContact');\r\n let that = this;\r\n\r\n element.addEventListener('show.bs.modal', (evt) => {\r\n DEBUG && console.log('===> Contact Modal Init');\r\n DEBUG && console.log(evt.relatedTarget);\r\n that.openContactModal(\r\n evt.relatedTarget.getAttribute('data-contactGUID'),\r\n evt.relatedTarget.getAttribute('data-subject'),\r\n evt.relatedTarget.getAttribute('data-name')\r\n );\r\n });\r\n\r\n // Wire Up Form Elements\r\n var contactForm = document.getElementById('formModalContact');\r\n\r\n contactForm.addEventListener('submit', function (event) {\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n // Check Validity\r\n if (!contactForm.checkValidity()) {\r\n console.info(\"*** => Contact Form INVALID\");\r\n }\r\n else {\r\n console.info(\"*** => Contact Form Valid / Submitting\");\r\n\r\n // Get Captcha Token\r\n grecaptcha.ready(function () {\r\n grecaptcha.execute('6LflXjcpAAAAALr80wVEcMlED_FNjFM4_UP3oa9J', { action: 'submit' })\r\n .then(function (token) {\r\n console.log(\"Captcha Output\");\r\n console.log(token);\r\n\r\n // Submit Form via AJAX!!\r\n that.sendContactModal(token);\r\n });\r\n });\r\n }\r\n\r\n contactForm.classList.add('was-validated')\r\n }, false) \r\n }\r\n\r\n static openContactModal(contactGuid, subjectText, person) {\r\n DEBUG && console.log('===> Contact Modal Opened');\r\n\r\n // Gather Elements\r\n const modalContactTitle = document.getElementById('modalContactTitle');\r\n\r\n const hiddenContactGUID = document.getElementById('contactGUID');\r\n hiddenContactGUID.value = contactGuid;\r\n\r\n const subject = document.getElementById('Subject');\r\n subject.value = subjectText;\r\n\r\n // Replace Modal Header\r\n modalContactTitle.innerText = `Send Email to ${person}`;\r\n }\r\n\r\n static sendContactModal(token) {\r\n DEBUG && console.log('===> Send Contact Modal');\r\n var contactForm = document.getElementById('formModalContact'); \r\n let that = this;\r\n\r\n // Gather Form Data\r\n const formData = new FormData(contactForm);\r\n console.log(formData);\r\n\r\n // Create JSON Object\r\n const jsonObject = {};\r\n\r\n // Convert FormData to JSON object\r\n formData.forEach((value, key) => {\r\n jsonObject[key] = value;\r\n });\r\n\r\n // Add Calling URL\r\n jsonObject[\"Url\"] = window.location.href;\r\n\r\n DEBUG && console.log('===> ContactForm Data');\r\n DEBUG && console.log(jsonObject);\r\n\r\n // Send the data to the API\r\n fetch(`${apiRoot}/api/Communication/SendContactModalEmail`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Verification-Key': token\r\n },\r\n body: JSON.stringify(jsonObject)\r\n })\r\n\r\n .then((response) => {\r\n if (!response.ok) {\r\n throw new Error('Failed to submit form');\r\n }\r\n })\r\n\r\n .then((data) => {\r\n // Handle the API response data\r\n\r\n // Close Modal\r\n that.closeModal('modalContact');\r\n\r\n // Clear the form\r\n contactForm.reset();\r\n\r\n // Show Success Growler\r\n that.showSuccessToast('Thank You, Your Email was Sent', 7000, true);\r\n })\r\n\r\n .catch((error) => {\r\n console.error('Error:', error);\r\n // Show Error / Try Again\r\n that.showErrorToast('An error occurred while sending your message.', 20000, true);\r\n });\r\n\r\n }\r\n\r\n\r\n // ********************************************\r\n // Newsletter Functions\r\n // ********************************************\r\n static initNewsletterButton() {\r\n DEBUG && console.log('===> Newsletter Button Setup');\r\n\r\n // Local \r\n let that = this;\r\n\r\n var elements = document.querySelectorAll('[data-component=\"newsletterButton\"]');\r\n elements.forEach(element => {\r\n element.addEventListener(\"click\", function () {\r\n that.openNewsletterSignUp(this);\r\n });\r\n });\r\n }\r\n\r\n static openNewsletterSignUp(buttonObj) {\r\n DEBUG && console.log('===> Newsletter Signup Opened');\r\n\r\n // Gather Button Configurations\r\n var publicationId = buttonObj.getAttribute('data-publicationID');\r\n var publicationTitle = buttonObj.getAttribute('data-title');\r\n\r\n // Local \r\n let that = this;\r\n\r\n var elements = document.querySelectorAll('[data-component=\"Newsletter\"]');\r\n elements.forEach(element => {\r\n var formElement = document.getElementById(\"formNewsletter\");\r\n\r\n DEBUG && console.info('**************************************************');\r\n DEBUG && console.info(`Element ID: ${element.id}`);\r\n DEBUG && console.info(`Form Element: ${formElement}`);\r\n DEBUG && console.info('**************************************************');\r\n\r\n // Update Fields / Labels\r\n var pubIdField = formElement.querySelector('input[name=\"Publication_ID\"]');\r\n pubIdField.value = publicationId;\r\n\r\n var titleArea = document.getElementById('newsletterTitle');\r\n titleArea.textContent = publicationTitle;\r\n\r\n // Authenticated Check\r\n var userObj = that.getUserObj();\r\n\r\n if (userObj) {\r\n // Prepopulate Newsletter Fields\r\n var FirstNameField = formElement.querySelector('input[name=\"FirstName\"]');\r\n FirstNameField.value = userObj.First_Name;\r\n\r\n var LastNameField = formElement.querySelector('input[name=\"LastName\"]');\r\n LastNameField.value = userObj.Last_Name;\r\n\r\n var EmailAddressField = formElement.querySelector('input[name=\"EmailAddress\"]');\r\n EmailAddressField.value = userObj.Email_Address;\r\n\r\n var UserIDField = formElement.querySelector('input[name=\"UserID\"]');\r\n UserIDField.value = userObj.User_ID;\r\n }\r\n\r\n this.openModal(element.id);\r\n\r\n formElement.addEventListener('submit', function (event) {\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n // Check Validity\r\n if (!formElement.checkValidity()) {\r\n DEBUG && console.info(\"*** => Newletter Form INVALID\");\r\n }\r\n else {\r\n DEBUG && console.info(\"*** => Newletter Form Valid / Submitting\");\r\n\r\n // Get Captcha Token\r\n grecaptcha.ready(function () {\r\n grecaptcha.execute('6LflXjcpAAAAALr80wVEcMlED_FNjFM4_UP3oa9J', { action: 'submit' })\r\n .then(function (token) {\r\n DEBUG && console.log(token);\r\n\r\n // Submit Form via AJAX!!\r\n that.sendNewsletterForm(token, formElement, element);\r\n });\r\n });\r\n }\r\n\r\n formElement.classList.add('was-validated')\r\n }, false) \r\n });\r\n }\r\n\r\n static sendNewsletterForm(token, formElement, element) {\r\n DEBUG && console.log('===> Send Newsletter');\r\n\r\n let that = this;\r\n\r\n // Gather Form Data\r\n const formData = new FormData(formElement);\r\n\r\n DEBUG && console.log(formData);\r\n\r\n // Create JSON Object\r\n const jsonObject = {};\r\n\r\n // Convert FormData to JSON object\r\n formData.forEach((value, key) => {\r\n jsonObject[key] = value;\r\n });\r\n\r\n // Null Check on User_ID\r\n if (jsonObject.UserID == \"\") {\r\n jsonObject.UserID = null;\r\n }\r\n\r\n DEBUG && console.log(jsonObject);\r\n\r\n // Send the data to the API\r\n fetch(`${apiRoot}/api/Communication/NewsletterSignup`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Verification-Key': token\r\n },\r\n body: JSON.stringify(jsonObject)\r\n })\r\n\r\n .then((response) => {\r\n if (!response.ok) {\r\n throw new Error('Failed to submit newsletter signup form');\r\n }\r\n })\r\n\r\n .then((data) => {\r\n // Handle the API response data\r\n DEBUG && console.log(data);\r\n\r\n this.closeModal(element.id);\r\n\r\n // Clear the form\r\n formElement.reset();\r\n\r\n // Show Success Growler\r\n that.showSuccessToast('You are signed up for the newsletter', 7000, true);\r\n })\r\n\r\n .catch((error) => {\r\n console.error('Error:', error);\r\n // Show Error / Try Again\r\n that.showErrorToast('An error occurred while signing up', 20000, true);\r\n });\r\n }\r\n\r\n\r\n\r\n // ********************************************\r\n // User Functions\r\n // ********************************************\r\n static getUserObj() {\r\n // Retrieve session userObect\r\n var userObj = sessionStorage.getItem('userObj');\r\n\r\n if (userObj) {\r\n\r\n try {\r\n // Attempt to parse Session UserObject\r\n return JSON.parse(userObj);\r\n }\r\n catch (error) {\r\n console.error(error.message);\r\n return null;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n\r\n\r\n // ********************************************\r\n // Modal Functions\r\n // ********************************************\r\n static closeModal(elementId) {\r\n var myModalEl = document.getElementById(elementId);\r\n var modal = bootstrap.Modal.getInstance(myModalEl)\r\n\r\n // Check if modal exists and is currently shown\r\n if (modal && myModalEl.classList.contains('show')) {\r\n modal.hide();\r\n }\r\n }\r\n\r\n static openModal(elementId) {\r\n var myModalEl = document.getElementById(elementId);\r\n var modal = bootstrap.Modal.getOrCreateInstance(myModalEl)\r\n modal.show();\r\n }\r\n\r\n // ********************************************\r\n // Toast Functions\r\n // ********************************************\r\n static showSuccessToast(text, duration, allowDismiss) {\r\n DEBUG && console.info('===> Show Toast: Success');\r\n // Create an instance of Notyf\r\n const notyf = new Notyf();\r\n\r\n notyf.success({\r\n message: text,\r\n duration: duration,\r\n dismissible: allowDismiss,\r\n ripple: true,\r\n position: {\r\n x: 'right',\r\n y: 'top',\r\n }\r\n });\r\n }\r\n\r\n static showErrorToast(text, duration, allowDismiss) {\r\n DEBUG && console.info('===> Show Toast: Error');\r\n // Create an instance of Notyf\r\n const notyf = new Notyf();\r\n\r\n notyf.error({\r\n message: text,\r\n duration: duration,\r\n dismissible: allowDismiss,\r\n ripple: true,\r\n position: {\r\n x: 'right',\r\n y: 'top',\r\n }\r\n });\r\n }\r\n\r\n\r\n // ********************************************\r\n // Redirect To Authentication\r\n // ********************************************\r\n static redirectToAuthentication(redirectUrl) {\r\n var authUrl = sessionStorage.getItem(\"authUrl\");\r\n\r\n if (redirectUrl) {\r\n var stateRedirect = encodeURIComponent(redirectUrl);\r\n window.location.href = `${authUrl}&state=${stateRedirect}`;\r\n }\r\n else {\r\n window.location.href = `${authUrl}&state=${encodeURIComponent(window.location.href)}`;\r\n }\r\n }\r\n\r\n\r\n // ********************************************\r\n // GetFormDataObject \r\n // ********************************************\r\n static getFormDataObject(formElement) {\r\n DEBUG && console.log(\"------------------------------------------\");\r\n DEBUG && console.log(\"===> Getting Form Data Obj\");\r\n // Get Form Data\r\n const formData = new FormData(formElement);\r\n // Create JSON Object\r\n const jsonObject = {};\r\n\r\n // Convert FormData to JSON object\r\n formData.forEach((value, key) => {\r\n jsonObject[key] = value;\r\n });\r\n\r\n DEBUG && console.log(jsonObject);\r\n DEBUG && console.log(\"------------------------------------------\");\r\n return jsonObject;\r\n }\r\n\r\n\r\n // ********************************************\r\n // Load Script External Script File\r\n // ********************************************\r\n static loadScript(url, callback) {\r\n var script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = url;\r\n script.onload = callback;\r\n // Optional: callback to be executed once the script is loaded\r\n // Optional: make use of IFFE to immediately invoke\r\n\r\n document.head.appendChild(script);\r\n }\r\n\r\n // ********************************************\r\n // ShowLoadingModal\r\n // ********************************************\r\n static ShowLoadingModal() {\r\n const loadingElement = document.getElementById(\"loadingOverlay\");\r\n loadingElement.style.display = \"flex\";\r\n }\r\n\r\n // ********************************************\r\n // HideLoadingModal\r\n // ********************************************\r\n static HideLoadingModal() {\r\n const loadingElement = document.getElementById(\"loadingOverlay\");\r\n loadingElement.style.display = \"none\";\r\n }\r\n\r\n // ********************************************\r\n // ShowElement - Show Element by ID\r\n // ********************************************\r\n static ShowElement(elementId) {\r\n var obj = document.getElementById(`${elementId}`);\r\n obj.style.display = \"block\";\r\n }\r\n\r\n // ********************************************\r\n // HideElement - Hides Elements by ID\r\n // ********************************************\r\n static HideElement(elementId) {\r\n var obj = document.getElementById(`${elementId}`);\r\n obj.style.display = \"none\";\r\n }\r\n\r\n // ********************************************\r\n // CloneElement - Clone Element by ID\r\n // ********************************************\r\n static cloneElement(elementId) {\r\n const oldElement = document.getElementById(`${elementId}`);\r\n const newElement = oldElement.cloneNode(true);\r\n oldElement.parentNode.replaceChild(newElement, oldElement);\r\n }\r\n\r\n // ********************************************\r\n // localStorage Utilities\r\n // ********************************************\r\n static writeLocalStorageObject(key, obj) {\r\n localStorage.setItem(key, JSON.stringify(obj));\r\n }\r\n\r\n static writeLocalStorageValue(key, obj) {\r\n localStorage.setItem(key, obj);\r\n }\r\n\r\n static readLocalStorageValue(key) {\r\n return localStorage.getItem(key);\r\n }\r\n\r\n static readLocalStorageObject(key) {\r\n var obj = localStorage.getItem(key);\r\n\r\n if (obj) {\r\n return JSON.parse(obj);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n static checkLocalStorageItem(key) {\r\n return localStorage.getItem(key) !== null;\r\n }\r\n\r\n // ********************************************\r\n // sessionStorage Utilities\r\n // ********************************************\r\n static writeSessionStorageObject(key, obj) {\r\n sessionStorage.setItem(key, JSON.stringify(obj));\r\n }\r\n\r\n static writeSessionStorageValue(key, value) {\r\n sessionStorage.setItem(key, value);\r\n }\r\n\r\n static readSessionStorageValue(key) {\r\n return sessionStorage.getItem(key);\r\n }\r\n\r\n static readSessionStorageObject(key) {\r\n const obj = sessionStorage.getItem(key);\r\n return obj ? JSON.parse(obj) : null;\r\n }\r\n\r\n static checkSessionStorageItem(key) {\r\n return sessionStorage.getItem(key) !== null;\r\n }\r\n\r\n // ********************************************\r\n // base64 Utilities\r\n // ********************************************\r\n static base64Encode(s) {\r\n return btoa(s);\r\n }\r\n\r\n static base64Decode(encoded) {\r\n return atob(encoded);\r\n }\r\n\r\n static base64EncodeNumber(s) {\r\n s = s * 2;\r\n return btoa(s.toString());\r\n }\r\n\r\n static base64DecodeNumber(encoded) {\r\n let s = atob(encoded);\r\n let n = parseInt(s);\r\n return s / 2;\r\n }\r\n\r\n\r\n // ********************************************\r\n // Form Utilities\r\n // ********************************************\r\n static formSetup(formElement) {\r\n\r\n // Example: Check password fields on input\r\n const newPassword = formElement.querySelector('input[name=\"newPassword\"]');\r\n const confirmPassword = formElement.querySelector('input[name=\"confirmPassword\"]');\r\n\r\n // Regex: at least 9 characters, one uppercase, one lowercase, and one digit.\r\n const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[\\W_]).{9,}$/;\r\n\r\n // Validate password complexity on input\r\n function validatePasswordComplexity() {\r\n if (!passwordRegex.test(newPassword.value)) {\r\n newPassword.setCustomValidity('Password must be at least 9 characters long and include an uppercase letter, a lowercase letter, a number, and a special character.');\r\n setValidationMessage(newPassword, 'Password must be at least 9 characters long and include an uppercase letter, a lowercase letter, a number, and a special character.');\r\n } else {\r\n newPassword.setCustomValidity('');\r\n setValidationMessage(newPassword, '');\r\n }\r\n }\r\n\r\n // Validate that the new password and confirmation match\r\n function validatePasswords() {\r\n if (newPassword.value !== confirmPassword.value) {\r\n confirmPassword.setCustomValidity('Passwords do not match.');\r\n newPassword.setCustomValidity('Passwords do not match.');\r\n setValidationMessage(newPassword, 'Passwords do not match.');\r\n setValidationMessage(confirmPassword, 'Passwords do not match.');\r\n } else {\r\n confirmPassword.setCustomValidity('');\r\n newPassword.setCustomValidity('');\r\n setValidationMessage(newPassword, '');\r\n setValidationMessage(confirmPassword, '');\r\n }\r\n\r\n // Validate the new password's complexity\r\n validatePasswordComplexity();\r\n }\r\n\r\n function setValidationMessage(inputElement, message) {\r\n var feedbackElement = inputElement.parentElement.querySelector('.invalid-feedback');\r\n var baseMessage = feedbackElement.getAttribute('data-baseMessage');\r\n\r\n if (baseMessage && message == '') {\r\n feedbackElement.innerText = baseMessage;\r\n }\r\n else {\r\n feedbackElement.innerText = message;\r\n } \r\n }\r\n\r\n if (newPassword) {\r\n newPassword.addEventListener('input', validatePasswords);\r\n }\r\n\r\n if (confirmPassword) {\r\n confirmPassword.addEventListener('input', validatePasswords); \r\n }\r\n \r\n // Get all Phone Fields\r\n const phoneFields = formElement.querySelectorAll('[data-type=\"phone\"]');\r\n\r\n phoneFields.forEach(phone => {\r\n phone.addEventListener('input', function (event) {\r\n const input = event.target;\r\n const inputValue = input.value.replace(/\\D/g, ''); // Remove non-numeric characters\r\n\r\n // Limit the length of inputValue to 10\r\n if (inputValue.length > 10) {\r\n inputValue = inputValue.substring(0, 10);\r\n }\r\n\r\n if (inputValue.length <= 10) {\r\n // Format as xxx-xxx-xxxx\r\n input.value = inputValue.replace(/(\\d{3})(\\d{0,3})(\\d{0,4})/, function (_, firstPart, secondPart, thirdPart) {\r\n let formattedNumber = '';\r\n\r\n if (firstPart) formattedNumber += `${firstPart}`;\r\n if (secondPart) formattedNumber += `-${secondPart}`;\r\n if (thirdPart) formattedNumber += `-${thirdPart}`;\r\n\r\n return formattedNumber;\r\n });\r\n }\r\n });\r\n });\r\n\r\n // Get all textarea elements within the form\r\n const textareas = formElement.querySelectorAll('textarea');\r\n\r\n textareas.forEach(function (textarea) {\r\n const maxLength = textarea.getAttribute('maxlength');\r\n const required = textarea.hasAttribute('required');\r\n const disabled = textarea.hasAttribute('disabled');\r\n\r\n if (!disabled) {\r\n textarea.addEventListener('input', function () {\r\n if (!textarea.value.trim() && required) {\r\n textarea.setCustomValidity('This field is required.');\r\n } else if (maxLength && textarea.value.length > maxLength) {\r\n textarea.setCustomValidity(`The maximum length is ${maxLength} characters.`);\r\n } else {\r\n textarea.setCustomValidity(''); // Reset the custom validity message\r\n }\r\n });\r\n }\r\n });\r\n\r\n // Select all textareas with the data-showCharacter attribute\r\n const textareasShowCount = document.querySelectorAll('textarea[data-showCharacter=\"true\"]');\r\n\r\n textareasShowCount.forEach(textarea => {\r\n const maxLength = parseInt(textarea.getAttribute('maxlength'), 10) || 512;\r\n\r\n // Create and insert a character counter element after the textarea\r\n const charCount = document.createElement('small');\r\n charCount.classList.add('text-muted');\r\n charCount.textContent = `${maxLength} characters remaining`;\r\n textarea.insertAdjacentElement('afterend', charCount);\r\n\r\n // Attach input event listener to update character counter\r\n textarea.addEventListener('input', function () {\r\n const remaining = maxLength - textarea.value.length;\r\n charCount.textContent = `${remaining} characters remaining`;\r\n if (remaining < 0) {\r\n charCount.classList.add('text-danger');\r\n } else {\r\n charCount.classList.remove('text-danger');\r\n }\r\n });\r\n });\r\n }\r\n\r\n\r\n // ********************************************\r\n // DOM Utilities\r\n // ********************************************\r\n static findParentByClass(element, className) {\r\n while (element && !element.classList.contains(className)) {\r\n element = element.parentElement;\r\n }\r\n return element; \r\n }\r\n\r\n\r\n // ********************************************\r\n // Url Utilities\r\n // ********************************************\r\n static getCurrentUrlWithoutQuery() {\r\n // Get the full URL from the window.location object\r\n const url = window.location.href;\r\n\r\n // Create a new URL object from the current URL\r\n const parsedUrl = new URL(url);\r\n\r\n // Return the origin (protocol + host) and pathname (path after the host)\r\n return parsedUrl.origin + parsedUrl.pathname;\r\n }\r\n\r\n static addUpdatedUrlState(state) {\r\n var newUrl = this.getCurrentUrlWithoutQuery();\r\n\r\n if (state) {\r\n newUrl = `${this.getCurrentUrlWithoutQuery()}?${state}`\r\n }\r\n\r\n history.pushState(null, '', newUrl);\r\n }\r\n\r\n static getQueryParam(param) {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n return urlParams.get(param);\r\n }\r\n}","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int|Object} [cursor_pos] Edit position in text1 or object with more info\n * @param {boolean} [cleanup] Apply semantic cleanup before returning.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos, cleanup, _fix_unicode) {\n // Check for equality\n if (text1 === text2) {\n if (text1) {\n return [[DIFF_EQUAL, text1]];\n }\n return [];\n }\n\n if (cursor_pos != null) {\n var editdiff = find_cursor_edit_diff(text1, text2, cursor_pos);\n if (editdiff) {\n return editdiff;\n }\n }\n\n // Trim off common prefix (speedup).\n var commonlength = diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = diff_compute_(text1, text2);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift([DIFF_EQUAL, commonprefix]);\n }\n if (commonsuffix) {\n diffs.push([DIFF_EQUAL, commonsuffix]);\n }\n diff_cleanupMerge(diffs, _fix_unicode);\n if (cleanup) {\n diff_cleanupSemantic(diffs);\n }\n return diffs;\n}\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [[DIFF_INSERT, text2]];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [[DIFF_DELETE, text1]];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i !== -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [\n [DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)],\n ];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length === 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2],\n ];\n }\n\n // Check to see if the problem can be split in two.\n var hm = diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = diff_main(text1_a, text2_a);\n var diffs_b = diff_main(text1_b, text2_b);\n // Merge the results.\n return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n }\n\n return diff_bisect_(text1, text2);\n}\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = delta % 2 !== 0;\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 === -d || (k1 !== d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (\n x1 < text1_length &&\n y1 < text2_length &&\n text1.charAt(x1) === text2.charAt(y1)\n ) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 === -d || (k2 !== d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (\n x2 < text1_length &&\n y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) ===\n text2.charAt(text2_length - y2 - 1)\n ) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2],\n ];\n}\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = diff_main(text1a, text2a);\n var diffsb = diff_main(text1b, text2b);\n\n return diffs.concat(diffsb);\n}\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\nfunction diff_commonPrefix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)\n ) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n if (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) {\n pointermid--;\n }\n\n return pointermid;\n}\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n * string and the start of the second string.\n * @private\n */\nfunction diff_commonOverlap_(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n // Eliminate the null case.\n if (text1_length == 0 || text2_length == 0) {\n return 0;\n }\n // Truncate the longer string.\n if (text1_length > text2_length) {\n text1 = text1.substring(text1_length - text2_length);\n } else if (text1_length < text2_length) {\n text2 = text2.substring(0, text1_length);\n }\n var text_length = Math.min(text1_length, text2_length);\n // Quick check for the worst case.\n if (text1 == text2) {\n return text_length;\n }\n\n // Start by looking for a single character match\n // and increase length until no match is found.\n // Performance analysis: http://neil.fraser.name/news/2010/11/04/\n var best = 0;\n var length = 1;\n while (true) {\n var pattern = text1.substring(text_length - length);\n var found = text2.indexOf(pattern);\n if (found == -1) {\n return best;\n }\n length += found;\n if (\n found == 0 ||\n text1.substring(text_length - length) == text2.substring(0, length)\n ) {\n best = length;\n length++;\n }\n }\n}\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)\n ) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n if (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) {\n pointermid--;\n }\n\n return pointermid;\n}\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = \"\";\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) !== -1) {\n var prefixLength = diff_commonPrefix(\n longtext.substring(i),\n shorttext.substring(j)\n );\n var suffixLength = diff_commonSuffix(\n longtext.substring(0, i),\n shorttext.substring(0, j)\n );\n if (best_common.length < suffixLength + prefixLength) {\n best_common =\n shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [\n best_longtext_a,\n best_longtext_b,\n best_shorttext_a,\n best_shorttext_b,\n best_common,\n ];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(\n longtext,\n shorttext,\n Math.ceil(longtext.length / 4)\n );\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(\n longtext,\n shorttext,\n Math.ceil(longtext.length / 2)\n );\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n}\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.} diffs Array of diff tuples.\n */\nfunction diff_cleanupSemantic(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastequality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_insertions1 = 0;\n var length_deletions1 = 0;\n // Number of characters that changed after the equality.\n var length_insertions2 = 0;\n var length_deletions2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) {\n // Equality found.\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastequality = diffs[pointer][1];\n } else {\n // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_INSERT) {\n length_insertions2 += diffs[pointer][1].length;\n } else {\n length_deletions2 += diffs[pointer][1].length;\n }\n // Eliminate an equality that is smaller or equal to the edits on both\n // sides of it.\n if (\n lastequality &&\n lastequality.length <=\n Math.max(length_insertions1, length_deletions1) &&\n lastequality.length <= Math.max(length_insertions2, length_deletions2)\n ) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0, [\n DIFF_DELETE,\n lastequality,\n ]);\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0; // Reset the counters.\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastequality = null;\n changes = true;\n }\n }\n pointer++;\n }\n\n // Normalize the diff.\n if (changes) {\n diff_cleanupMerge(diffs);\n }\n diff_cleanupSemanticLossless(diffs);\n\n // Find any overlaps between deletions and insertions.\n // e.g: abcxxxxxxdef\n // -> abcxxxdef\n // e.g: xxxabcdefxxx\n // -> defxxxabc\n // Only extract an overlap if it is as big as the edit ahead or behind it.\n pointer = 1;\n while (pointer < diffs.length) {\n if (\n diffs[pointer - 1][0] == DIFF_DELETE &&\n diffs[pointer][0] == DIFF_INSERT\n ) {\n var deletion = diffs[pointer - 1][1];\n var insertion = diffs[pointer][1];\n var overlap_length1 = diff_commonOverlap_(deletion, insertion);\n var overlap_length2 = diff_commonOverlap_(insertion, deletion);\n if (overlap_length1 >= overlap_length2) {\n if (\n overlap_length1 >= deletion.length / 2 ||\n overlap_length1 >= insertion.length / 2\n ) {\n // Overlap found. Insert an equality and trim the surrounding edits.\n diffs.splice(pointer, 0, [\n DIFF_EQUAL,\n insertion.substring(0, overlap_length1),\n ]);\n diffs[pointer - 1][1] = deletion.substring(\n 0,\n deletion.length - overlap_length1\n );\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (\n overlap_length2 >= deletion.length / 2 ||\n overlap_length2 >= insertion.length / 2\n ) {\n // Reverse overlap found.\n // Insert an equality and swap and trim the surrounding edits.\n diffs.splice(pointer, 0, [\n DIFF_EQUAL,\n deletion.substring(0, overlap_length2),\n ]);\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] = insertion.substring(\n 0,\n insertion.length - overlap_length2\n );\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] = deletion.substring(overlap_length2);\n pointer++;\n }\n }\n pointer++;\n }\n pointer++;\n }\n}\n\nvar nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\nvar whitespaceRegex_ = /\\s/;\nvar linebreakRegex_ = /[\\r\\n]/;\nvar blanklineEndRegex_ = /\\n\\r?\\n$/;\nvar blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The cat came. -> The cat came.\n * @param {!Array.} diffs Array of diff tuples.\n */\nfunction diff_cleanupSemanticLossless(diffs) {\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 6 (best) to 0 (worst).\n * Closure, but does not reference any external variables.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n * @private\n */\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 6;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var char1 = one.charAt(one.length - 1);\n var char2 = two.charAt(0);\n var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_);\n var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_);\n var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_);\n var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_);\n var lineBreak1 = whitespace1 && char1.match(linebreakRegex_);\n var lineBreak2 = whitespace2 && char2.match(linebreakRegex_);\n var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_);\n var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_);\n\n if (blankLine1 || blankLine2) {\n // Five points for blank lines.\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n // Four points for line breaks.\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n // Three points for end of sentences.\n return 3;\n } else if (whitespace1 || whitespace2) {\n // Two points for whitespace.\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n // One point for non-alphanumeric.\n return 1;\n }\n return 0;\n }\n\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (\n diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL\n ) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore =\n diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score =\n diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n}\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n * @param {boolean} fix_unicode Whether to normalize to a unicode-correct diff\n */\nfunction diff_cleanupMerge(diffs, fix_unicode) {\n diffs.push([DIFF_EQUAL, \"\"]); // Add a dummy entry at the end.\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = \"\";\n var text_insert = \"\";\n var commonlength;\n while (pointer < diffs.length) {\n if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n diffs.splice(pointer, 1);\n continue;\n }\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n var previous_equality = pointer - count_insert - count_delete - 1;\n if (fix_unicode) {\n // prevent splitting of unicode surrogate pairs. when fix_unicode is true,\n // we assume that the old and new text in the diff are complete and correct\n // unicode-encoded JS strings, but the tuple boundaries may fall between\n // surrogate pairs. we fix this by shaving off stray surrogates from the end\n // of the previous equality and the beginning of this equality. this may create\n // empty equalities or a common prefix or suffix. for example, if AB and AC are\n // emojis, `[[0, 'A'], [-1, 'BA'], [0, 'C']]` would turn into deleting 'ABAC' and\n // inserting 'AC', and then the common suffix 'AC' will be eliminated. in this\n // particular case, both equalities go away, we absorb any previous inequalities,\n // and we keep scanning for the next equality before rewriting the tuples.\n if (\n previous_equality >= 0 &&\n ends_with_pair_start(diffs[previous_equality][1])\n ) {\n var stray = diffs[previous_equality][1].slice(-1);\n diffs[previous_equality][1] = diffs[previous_equality][1].slice(\n 0,\n -1\n );\n text_delete = stray + text_delete;\n text_insert = stray + text_insert;\n if (!diffs[previous_equality][1]) {\n // emptied out previous equality, so delete it and include previous delete/insert\n diffs.splice(previous_equality, 1);\n pointer--;\n var k = previous_equality - 1;\n if (diffs[k] && diffs[k][0] === DIFF_INSERT) {\n count_insert++;\n text_insert = diffs[k][1] + text_insert;\n k--;\n }\n if (diffs[k] && diffs[k][0] === DIFF_DELETE) {\n count_delete++;\n text_delete = diffs[k][1] + text_delete;\n k--;\n }\n previous_equality = k;\n }\n }\n if (starts_with_pair_end(diffs[pointer][1])) {\n var stray = diffs[pointer][1].charAt(0);\n diffs[pointer][1] = diffs[pointer][1].slice(1);\n text_delete += stray;\n text_insert += stray;\n }\n }\n if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n // for empty equality not at end, wait for next equality\n diffs.splice(pointer, 1);\n break;\n }\n if (text_delete.length > 0 || text_insert.length > 0) {\n // note that diff_commonPrefix and diff_commonSuffix are unicode-aware\n if (text_delete.length > 0 && text_insert.length > 0) {\n // Factor out any common prefixes.\n commonlength = diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if (previous_equality >= 0) {\n diffs[previous_equality][1] += text_insert.substring(\n 0,\n commonlength\n );\n } else {\n diffs.splice(0, 0, [\n DIFF_EQUAL,\n text_insert.substring(0, commonlength),\n ]);\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixes.\n commonlength = diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] =\n text_insert.substring(text_insert.length - commonlength) +\n diffs[pointer][1];\n text_insert = text_insert.substring(\n 0,\n text_insert.length - commonlength\n );\n text_delete = text_delete.substring(\n 0,\n text_delete.length - commonlength\n );\n }\n }\n // Delete the offending records and add the merged ones.\n var n = count_insert + count_delete;\n if (text_delete.length === 0 && text_insert.length === 0) {\n diffs.splice(pointer - n, n);\n pointer = pointer - n;\n } else if (text_delete.length === 0) {\n diffs.splice(pointer - n, n, [DIFF_INSERT, text_insert]);\n pointer = pointer - n + 1;\n } else if (text_insert.length === 0) {\n diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete]);\n pointer = pointer - n + 1;\n } else {\n diffs.splice(\n pointer - n,\n n,\n [DIFF_DELETE, text_delete],\n [DIFF_INSERT, text_insert]\n );\n pointer = pointer - n + 2;\n }\n }\n if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = \"\";\n text_insert = \"\";\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === \"\") {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: ABAC -> ABAC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (\n diffs[pointer - 1][0] === DIFF_EQUAL &&\n diffs[pointer + 1][0] === DIFF_EQUAL\n ) {\n // This is a single edit surrounded by equalities.\n if (\n diffs[pointer][1].substring(\n diffs[pointer][1].length - diffs[pointer - 1][1].length\n ) === diffs[pointer - 1][1]\n ) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] =\n diffs[pointer - 1][1] +\n diffs[pointer][1].substring(\n 0,\n diffs[pointer][1].length - diffs[pointer - 1][1].length\n );\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (\n diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]\n ) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n diff_cleanupMerge(diffs, fix_unicode);\n }\n}\n\nfunction is_surrogate_pair_start(charCode) {\n return charCode >= 0xd800 && charCode <= 0xdbff;\n}\n\nfunction is_surrogate_pair_end(charCode) {\n return charCode >= 0xdc00 && charCode <= 0xdfff;\n}\n\nfunction starts_with_pair_end(str) {\n return is_surrogate_pair_end(str.charCodeAt(0));\n}\n\nfunction ends_with_pair_start(str) {\n return is_surrogate_pair_start(str.charCodeAt(str.length - 1));\n}\n\nfunction remove_empty_tuples(tuples) {\n var ret = [];\n for (var i = 0; i < tuples.length; i++) {\n if (tuples[i][1].length > 0) {\n ret.push(tuples[i]);\n }\n }\n return ret;\n}\n\nfunction make_edit_splice(before, oldMiddle, newMiddle, after) {\n if (ends_with_pair_start(before) || starts_with_pair_end(after)) {\n return null;\n }\n return remove_empty_tuples([\n [DIFF_EQUAL, before],\n [DIFF_DELETE, oldMiddle],\n [DIFF_INSERT, newMiddle],\n [DIFF_EQUAL, after],\n ]);\n}\n\nfunction find_cursor_edit_diff(oldText, newText, cursor_pos) {\n // note: this runs after equality check has ruled out exact equality\n var oldRange =\n typeof cursor_pos === \"number\"\n ? { index: cursor_pos, length: 0 }\n : cursor_pos.oldRange;\n var newRange = typeof cursor_pos === \"number\" ? null : cursor_pos.newRange;\n // take into account the old and new selection to generate the best diff\n // possible for a text edit. for example, a text change from \"xxx\" to \"xx\"\n // could be a delete or forwards-delete of any one of the x's, or the\n // result of selecting two of the x's and typing \"x\".\n var oldLength = oldText.length;\n var newLength = newText.length;\n if (oldRange.length === 0 && (newRange === null || newRange.length === 0)) {\n // see if we have an insert or delete before or after cursor\n var oldCursor = oldRange.index;\n var oldBefore = oldText.slice(0, oldCursor);\n var oldAfter = oldText.slice(oldCursor);\n var maybeNewCursor = newRange ? newRange.index : null;\n editBefore: {\n // is this an insert or delete right before oldCursor?\n var newCursor = oldCursor + newLength - oldLength;\n if (maybeNewCursor !== null && maybeNewCursor !== newCursor) {\n break editBefore;\n }\n if (newCursor < 0 || newCursor > newLength) {\n break editBefore;\n }\n var newBefore = newText.slice(0, newCursor);\n var newAfter = newText.slice(newCursor);\n if (newAfter !== oldAfter) {\n break editBefore;\n }\n var prefixLength = Math.min(oldCursor, newCursor);\n var oldPrefix = oldBefore.slice(0, prefixLength);\n var newPrefix = newBefore.slice(0, prefixLength);\n if (oldPrefix !== newPrefix) {\n break editBefore;\n }\n var oldMiddle = oldBefore.slice(prefixLength);\n var newMiddle = newBefore.slice(prefixLength);\n return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter);\n }\n editAfter: {\n // is this an insert or delete right after oldCursor?\n if (maybeNewCursor !== null && maybeNewCursor !== oldCursor) {\n break editAfter;\n }\n var cursor = oldCursor;\n var newBefore = newText.slice(0, cursor);\n var newAfter = newText.slice(cursor);\n if (newBefore !== oldBefore) {\n break editAfter;\n }\n var suffixLength = Math.min(oldLength - cursor, newLength - cursor);\n var oldSuffix = oldAfter.slice(oldAfter.length - suffixLength);\n var newSuffix = newAfter.slice(newAfter.length - suffixLength);\n if (oldSuffix !== newSuffix) {\n break editAfter;\n }\n var oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength);\n var newMiddle = newAfter.slice(0, newAfter.length - suffixLength);\n return make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix);\n }\n }\n if (oldRange.length > 0 && newRange && newRange.length === 0) {\n replaceRange: {\n // see if diff could be a splice of the old selection range\n var oldPrefix = oldText.slice(0, oldRange.index);\n var oldSuffix = oldText.slice(oldRange.index + oldRange.length);\n var prefixLength = oldPrefix.length;\n var suffixLength = oldSuffix.length;\n if (newLength < prefixLength + suffixLength) {\n break replaceRange;\n }\n var newPrefix = newText.slice(0, prefixLength);\n var newSuffix = newText.slice(newLength - suffixLength);\n if (oldPrefix !== newPrefix || oldSuffix !== newSuffix) {\n break replaceRange;\n }\n var oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength);\n var newMiddle = newText.slice(prefixLength, newLength - suffixLength);\n return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix);\n }\n }\n\n return null;\n}\n\nfunction diff(text1, text2, cursor_pos, cleanup) {\n // only pass fix_unicode=true at the top level, not when diff_main is\n // recursively invoked\n return diff_main(text1, text2, cursor_pos, cleanup, true);\n}\n\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, true, true);\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = cloneDeep;\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst cloneDeep = require(\"lodash.clonedeep\");\nconst isEqual = require(\"lodash.isequal\");\nvar AttributeMap;\n(function (AttributeMap) {\n function compose(a = {}, b = {}, keepNull = false) {\n if (typeof a !== 'object') {\n a = {};\n }\n if (typeof b !== 'object') {\n b = {};\n }\n let attributes = cloneDeep(b);\n if (!keepNull) {\n attributes = Object.keys(attributes).reduce((copy, key) => {\n if (attributes[key] != null) {\n copy[key] = attributes[key];\n }\n return copy;\n }, {});\n }\n for (const key in a) {\n if (a[key] !== undefined && b[key] === undefined) {\n attributes[key] = a[key];\n }\n }\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n AttributeMap.compose = compose;\n function diff(a = {}, b = {}) {\n if (typeof a !== 'object') {\n a = {};\n }\n if (typeof b !== 'object') {\n b = {};\n }\n const attributes = Object.keys(a)\n .concat(Object.keys(b))\n .reduce((attrs, key) => {\n if (!isEqual(a[key], b[key])) {\n attrs[key] = b[key] === undefined ? null : b[key];\n }\n return attrs;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n AttributeMap.diff = diff;\n function invert(attr = {}, base = {}) {\n attr = attr || {};\n const baseInverted = Object.keys(base).reduce((memo, key) => {\n if (base[key] !== attr[key] && attr[key] !== undefined) {\n memo[key] = base[key];\n }\n return memo;\n }, {});\n return Object.keys(attr).reduce((memo, key) => {\n if (attr[key] !== base[key] && base[key] === undefined) {\n memo[key] = null;\n }\n return memo;\n }, baseInverted);\n }\n AttributeMap.invert = invert;\n function transform(a, b, priority = false) {\n if (typeof a !== 'object') {\n return b;\n }\n if (typeof b !== 'object') {\n return undefined;\n }\n if (!priority) {\n return b; // b simply overwrites us without priority\n }\n const attributes = Object.keys(b).reduce((attrs, key) => {\n if (a[key] === undefined) {\n attrs[key] = b[key]; // null is a valid value\n }\n return attrs;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n AttributeMap.transform = transform;\n})(AttributeMap || (AttributeMap = {}));\nexports.default = AttributeMap;\n//# sourceMappingURL=AttributeMap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AttributeMap = exports.OpIterator = exports.Op = void 0;\nconst diff = require(\"fast-diff\");\nconst cloneDeep = require(\"lodash.clonedeep\");\nconst isEqual = require(\"lodash.isequal\");\nconst AttributeMap_1 = require(\"./AttributeMap\");\nexports.AttributeMap = AttributeMap_1.default;\nconst Op_1 = require(\"./Op\");\nexports.Op = Op_1.default;\nconst OpIterator_1 = require(\"./OpIterator\");\nexports.OpIterator = OpIterator_1.default;\nconst NULL_CHARACTER = String.fromCharCode(0); // Placeholder char for embed in diff()\nconst getEmbedTypeAndData = (a, b) => {\n if (typeof a !== 'object' || a === null) {\n throw new Error(`cannot retain a ${typeof a}`);\n }\n if (typeof b !== 'object' || b === null) {\n throw new Error(`cannot retain a ${typeof b}`);\n }\n const embedType = Object.keys(a)[0];\n if (!embedType || embedType !== Object.keys(b)[0]) {\n throw new Error(`embed types not matched: ${embedType} != ${Object.keys(b)[0]}`);\n }\n return [embedType, a[embedType], b[embedType]];\n};\nclass Delta {\n constructor(ops) {\n // Assume we are given a well formed ops\n if (Array.isArray(ops)) {\n this.ops = ops;\n }\n else if (ops != null && Array.isArray(ops.ops)) {\n this.ops = ops.ops;\n }\n else {\n this.ops = [];\n }\n }\n static registerEmbed(embedType, handler) {\n this.handlers[embedType] = handler;\n }\n static unregisterEmbed(embedType) {\n delete this.handlers[embedType];\n }\n static getHandler(embedType) {\n const handler = this.handlers[embedType];\n if (!handler) {\n throw new Error(`no handlers for embed type \"${embedType}\"`);\n }\n return handler;\n }\n insert(arg, attributes) {\n const newOp = {};\n if (typeof arg === 'string' && arg.length === 0) {\n return this;\n }\n newOp.insert = arg;\n if (attributes != null &&\n typeof attributes === 'object' &&\n Object.keys(attributes).length > 0) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n }\n delete(length) {\n if (length <= 0) {\n return this;\n }\n return this.push({ delete: length });\n }\n retain(length, attributes) {\n if (typeof length === 'number' && length <= 0) {\n return this;\n }\n const newOp = { retain: length };\n if (attributes != null &&\n typeof attributes === 'object' &&\n Object.keys(attributes).length > 0) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n }\n push(newOp) {\n let index = this.ops.length;\n let lastOp = this.ops[index - 1];\n newOp = cloneDeep(newOp);\n if (typeof lastOp === 'object') {\n if (typeof newOp.delete === 'number' &&\n typeof lastOp.delete === 'number') {\n this.ops[index - 1] = { delete: lastOp.delete + newOp.delete };\n return this;\n }\n // Since it does not matter if we insert before or after deleting at the same index,\n // always prefer to insert first\n if (typeof lastOp.delete === 'number' && newOp.insert != null) {\n index -= 1;\n lastOp = this.ops[index - 1];\n if (typeof lastOp !== 'object') {\n this.ops.unshift(newOp);\n return this;\n }\n }\n if (isEqual(newOp.attributes, lastOp.attributes)) {\n if (typeof newOp.insert === 'string' &&\n typeof lastOp.insert === 'string') {\n this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n if (typeof newOp.attributes === 'object') {\n this.ops[index - 1].attributes = newOp.attributes;\n }\n return this;\n }\n else if (typeof newOp.retain === 'number' &&\n typeof lastOp.retain === 'number') {\n this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n if (typeof newOp.attributes === 'object') {\n this.ops[index - 1].attributes = newOp.attributes;\n }\n return this;\n }\n }\n }\n if (index === this.ops.length) {\n this.ops.push(newOp);\n }\n else {\n this.ops.splice(index, 0, newOp);\n }\n return this;\n }\n chop() {\n const lastOp = this.ops[this.ops.length - 1];\n if (lastOp && typeof lastOp.retain === 'number' && !lastOp.attributes) {\n this.ops.pop();\n }\n return this;\n }\n filter(predicate) {\n return this.ops.filter(predicate);\n }\n forEach(predicate) {\n this.ops.forEach(predicate);\n }\n map(predicate) {\n return this.ops.map(predicate);\n }\n partition(predicate) {\n const passed = [];\n const failed = [];\n this.forEach((op) => {\n const target = predicate(op) ? passed : failed;\n target.push(op);\n });\n return [passed, failed];\n }\n reduce(predicate, initialValue) {\n return this.ops.reduce(predicate, initialValue);\n }\n changeLength() {\n return this.reduce((length, elem) => {\n if (elem.insert) {\n return length + Op_1.default.length(elem);\n }\n else if (elem.delete) {\n return length - elem.delete;\n }\n return length;\n }, 0);\n }\n length() {\n return this.reduce((length, elem) => {\n return length + Op_1.default.length(elem);\n }, 0);\n }\n slice(start = 0, end = Infinity) {\n const ops = [];\n const iter = new OpIterator_1.default(this.ops);\n let index = 0;\n while (index < end && iter.hasNext()) {\n let nextOp;\n if (index < start) {\n nextOp = iter.next(start - index);\n }\n else {\n nextOp = iter.next(end - index);\n ops.push(nextOp);\n }\n index += Op_1.default.length(nextOp);\n }\n return new Delta(ops);\n }\n compose(other) {\n const thisIter = new OpIterator_1.default(this.ops);\n const otherIter = new OpIterator_1.default(other.ops);\n const ops = [];\n const firstOther = otherIter.peek();\n if (firstOther != null &&\n typeof firstOther.retain === 'number' &&\n firstOther.attributes == null) {\n let firstLeft = firstOther.retain;\n while (thisIter.peekType() === 'insert' &&\n thisIter.peekLength() <= firstLeft) {\n firstLeft -= thisIter.peekLength();\n ops.push(thisIter.next());\n }\n if (firstOther.retain - firstLeft > 0) {\n otherIter.next(firstOther.retain - firstLeft);\n }\n }\n const delta = new Delta(ops);\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n }\n else if (thisIter.peekType() === 'delete') {\n delta.push(thisIter.next());\n }\n else {\n const length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n const thisOp = thisIter.next(length);\n const otherOp = otherIter.next(length);\n if (otherOp.retain) {\n const newOp = {};\n if (typeof thisOp.retain === 'number') {\n newOp.retain =\n typeof otherOp.retain === 'number' ? length : otherOp.retain;\n }\n else {\n if (typeof otherOp.retain === 'number') {\n if (thisOp.retain == null) {\n newOp.insert = thisOp.insert;\n }\n else {\n newOp.retain = thisOp.retain;\n }\n }\n else {\n const action = thisOp.retain == null ? 'insert' : 'retain';\n const [embedType, thisData, otherData] = getEmbedTypeAndData(thisOp[action], otherOp.retain);\n const handler = Delta.getHandler(embedType);\n newOp[action] = {\n [embedType]: handler.compose(thisData, otherData, action === 'retain'),\n };\n }\n }\n // Preserve null when composing with a retain, otherwise remove it for inserts\n const attributes = AttributeMap_1.default.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');\n if (attributes) {\n newOp.attributes = attributes;\n }\n delta.push(newOp);\n // Optimization if rest of other is just retain\n if (!otherIter.hasNext() &&\n isEqual(delta.ops[delta.ops.length - 1], newOp)) {\n const rest = new Delta(thisIter.rest());\n return delta.concat(rest).chop();\n }\n // Other op should be delete, we could be an insert or retain\n // Insert + delete cancels out\n }\n else if (typeof otherOp.delete === 'number' &&\n (typeof thisOp.retain === 'number' ||\n (typeof thisOp.retain === 'object' && thisOp.retain !== null))) {\n delta.push(otherOp);\n }\n }\n }\n return delta.chop();\n }\n concat(other) {\n const delta = new Delta(this.ops.slice());\n if (other.ops.length > 0) {\n delta.push(other.ops[0]);\n delta.ops = delta.ops.concat(other.ops.slice(1));\n }\n return delta;\n }\n diff(other, cursor) {\n if (this.ops === other.ops) {\n return new Delta();\n }\n const strings = [this, other].map((delta) => {\n return delta\n .map((op) => {\n if (op.insert != null) {\n return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n }\n const prep = delta === other ? 'on' : 'with';\n throw new Error('diff() called ' + prep + ' non-document');\n })\n .join('');\n });\n const retDelta = new Delta();\n const diffResult = diff(strings[0], strings[1], cursor, true);\n const thisIter = new OpIterator_1.default(this.ops);\n const otherIter = new OpIterator_1.default(other.ops);\n diffResult.forEach((component) => {\n let length = component[1].length;\n while (length > 0) {\n let opLength = 0;\n switch (component[0]) {\n case diff.INSERT:\n opLength = Math.min(otherIter.peekLength(), length);\n retDelta.push(otherIter.next(opLength));\n break;\n case diff.DELETE:\n opLength = Math.min(length, thisIter.peekLength());\n thisIter.next(opLength);\n retDelta.delete(opLength);\n break;\n case diff.EQUAL:\n opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);\n const thisOp = thisIter.next(opLength);\n const otherOp = otherIter.next(opLength);\n if (isEqual(thisOp.insert, otherOp.insert)) {\n retDelta.retain(opLength, AttributeMap_1.default.diff(thisOp.attributes, otherOp.attributes));\n }\n else {\n retDelta.push(otherOp).delete(opLength);\n }\n break;\n }\n length -= opLength;\n }\n });\n return retDelta.chop();\n }\n eachLine(predicate, newline = '\\n') {\n const iter = new OpIterator_1.default(this.ops);\n let line = new Delta();\n let i = 0;\n while (iter.hasNext()) {\n if (iter.peekType() !== 'insert') {\n return;\n }\n const thisOp = iter.peek();\n const start = Op_1.default.length(thisOp) - iter.peekLength();\n const index = typeof thisOp.insert === 'string'\n ? thisOp.insert.indexOf(newline, start) - start\n : -1;\n if (index < 0) {\n line.push(iter.next());\n }\n else if (index > 0) {\n line.push(iter.next(index));\n }\n else {\n if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n return;\n }\n i += 1;\n line = new Delta();\n }\n }\n if (line.length() > 0) {\n predicate(line, {}, i);\n }\n }\n invert(base) {\n const inverted = new Delta();\n this.reduce((baseIndex, op) => {\n if (op.insert) {\n inverted.delete(Op_1.default.length(op));\n }\n else if (typeof op.retain === 'number' && op.attributes == null) {\n inverted.retain(op.retain);\n return baseIndex + op.retain;\n }\n else if (op.delete || typeof op.retain === 'number') {\n const length = (op.delete || op.retain);\n const slice = base.slice(baseIndex, baseIndex + length);\n slice.forEach((baseOp) => {\n if (op.delete) {\n inverted.push(baseOp);\n }\n else if (op.retain && op.attributes) {\n inverted.retain(Op_1.default.length(baseOp), AttributeMap_1.default.invert(op.attributes, baseOp.attributes));\n }\n });\n return baseIndex + length;\n }\n else if (typeof op.retain === 'object' && op.retain !== null) {\n const slice = base.slice(baseIndex, baseIndex + 1);\n const baseOp = new OpIterator_1.default(slice.ops).next();\n const [embedType, opData, baseOpData] = getEmbedTypeAndData(op.retain, baseOp.insert);\n const handler = Delta.getHandler(embedType);\n inverted.retain({ [embedType]: handler.invert(opData, baseOpData) }, AttributeMap_1.default.invert(op.attributes, baseOp.attributes));\n return baseIndex + 1;\n }\n return baseIndex;\n }, 0);\n return inverted.chop();\n }\n transform(arg, priority = false) {\n priority = !!priority;\n if (typeof arg === 'number') {\n return this.transformPosition(arg, priority);\n }\n const other = arg;\n const thisIter = new OpIterator_1.default(this.ops);\n const otherIter = new OpIterator_1.default(other.ops);\n const delta = new Delta();\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (thisIter.peekType() === 'insert' &&\n (priority || otherIter.peekType() !== 'insert')) {\n delta.retain(Op_1.default.length(thisIter.next()));\n }\n else if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n }\n else {\n const length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n const thisOp = thisIter.next(length);\n const otherOp = otherIter.next(length);\n if (thisOp.delete) {\n // Our delete either makes their delete redundant or removes their retain\n continue;\n }\n else if (otherOp.delete) {\n delta.push(otherOp);\n }\n else {\n const thisData = thisOp.retain;\n const otherData = otherOp.retain;\n let transformedData = typeof otherData === 'object' && otherData !== null\n ? otherData\n : length;\n if (typeof thisData === 'object' &&\n thisData !== null &&\n typeof otherData === 'object' &&\n otherData !== null) {\n const embedType = Object.keys(thisData)[0];\n if (embedType === Object.keys(otherData)[0]) {\n const handler = Delta.getHandler(embedType);\n if (handler) {\n transformedData = {\n [embedType]: handler.transform(thisData[embedType], otherData[embedType], priority),\n };\n }\n }\n }\n // We retain either their retain or insert\n delta.retain(transformedData, AttributeMap_1.default.transform(thisOp.attributes, otherOp.attributes, priority));\n }\n }\n }\n return delta.chop();\n }\n transformPosition(index, priority = false) {\n priority = !!priority;\n const thisIter = new OpIterator_1.default(this.ops);\n let offset = 0;\n while (thisIter.hasNext() && offset <= index) {\n const length = thisIter.peekLength();\n const nextType = thisIter.peekType();\n thisIter.next();\n if (nextType === 'delete') {\n index -= Math.min(length, index - offset);\n continue;\n }\n else if (nextType === 'insert' && (offset < index || !priority)) {\n index += length;\n }\n offset += length;\n }\n return index;\n }\n}\nDelta.Op = Op_1.default;\nDelta.OpIterator = OpIterator_1.default;\nDelta.AttributeMap = AttributeMap_1.default;\nDelta.handlers = {};\nexports.default = Delta;\nif (typeof module === 'object') {\n module.exports = Delta;\n module.exports.default = Delta;\n}\n//# sourceMappingURL=Delta.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Op;\n(function (Op) {\n function length(op) {\n if (typeof op.delete === 'number') {\n return op.delete;\n }\n else if (typeof op.retain === 'number') {\n return op.retain;\n }\n else if (typeof op.retain === 'object' && op.retain !== null) {\n return 1;\n }\n else {\n return typeof op.insert === 'string' ? op.insert.length : 1;\n }\n }\n Op.length = length;\n})(Op || (Op = {}));\nexports.default = Op;\n//# sourceMappingURL=Op.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Op_1 = require(\"./Op\");\nclass Iterator {\n constructor(ops) {\n this.ops = ops;\n this.index = 0;\n this.offset = 0;\n }\n hasNext() {\n return this.peekLength() < Infinity;\n }\n next(length) {\n if (!length) {\n length = Infinity;\n }\n const nextOp = this.ops[this.index];\n if (nextOp) {\n const offset = this.offset;\n const opLength = Op_1.default.length(nextOp);\n if (length >= opLength - offset) {\n length = opLength - offset;\n this.index += 1;\n this.offset = 0;\n }\n else {\n this.offset += length;\n }\n if (typeof nextOp.delete === 'number') {\n return { delete: length };\n }\n else {\n const retOp = {};\n if (nextOp.attributes) {\n retOp.attributes = nextOp.attributes;\n }\n if (typeof nextOp.retain === 'number') {\n retOp.retain = length;\n }\n else if (typeof nextOp.retain === 'object' &&\n nextOp.retain !== null) {\n // offset should === 0, length should === 1\n retOp.retain = nextOp.retain;\n }\n else if (typeof nextOp.insert === 'string') {\n retOp.insert = nextOp.insert.substr(offset, length);\n }\n else {\n // offset should === 0, length should === 1\n retOp.insert = nextOp.insert;\n }\n return retOp;\n }\n }\n else {\n return { retain: Infinity };\n }\n }\n peek() {\n return this.ops[this.index];\n }\n peekLength() {\n if (this.ops[this.index]) {\n // Should never return 0 if our index is being managed correctly\n return Op_1.default.length(this.ops[this.index]) - this.offset;\n }\n else {\n return Infinity;\n }\n }\n peekType() {\n const op = this.ops[this.index];\n if (op) {\n if (typeof op.delete === 'number') {\n return 'delete';\n }\n else if (typeof op.retain === 'number' ||\n (typeof op.retain === 'object' && op.retain !== null)) {\n return 'retain';\n }\n else {\n return 'insert';\n }\n }\n return 'retain';\n }\n rest() {\n if (!this.hasNext()) {\n return [];\n }\n else if (this.offset === 0) {\n return this.ops.slice(this.index);\n }\n else {\n const offset = this.offset;\n const index = this.index;\n const next = this.next();\n const rest = this.ops.slice(this.index);\n this.offset = offset;\n this.index = index;\n return [next].concat(rest);\n }\n }\n}\nexports.default = Iterator;\n//# sourceMappingURL=OpIterator.js.map","const t=t=>\"[object Object]\"===Object.prototype.toString.call(t),e=e=>{let s=!1;try{s=JSON.parse(e)}catch(t){return!1}return!(null===s||!Array.isArray(s)&&!t(s))&&s},s=(t,e)=>{const s=document.createElement(t);if(e&&\"object\"==typeof e)for(const t in e)\"html\"===t?s.innerHTML=e[t]:s.setAttribute(t,e[t]);return s},i=t=>[\"#text\",\"#comment\"].includes(t.nodeName)?t.data:t.childNodes?t.childNodes.map((t=>i(t))).join(\"\"):\"\",n=t=>{if(null==t)return\"\";if(t.hasOwnProperty(\"text\")||t.hasOwnProperty(\"data\")){const e=t;return e.text??n(e.data)}return t.hasOwnProperty(\"nodeName\")?i(t):String(t)},a=function(t){return t.replace(/&/g,\"&\").replace(//g,\">\").replace(/\"/g,\""\")},o=function(t,e){let s=0,i=0;for(;st?t.trim().split(\" \").map((t=>`.${t}`)).join(\"\"):null,d=(t,e)=>{const s=e?.split(\" \").some((e=>!t.classList.contains(e)));return!s},c=(t,e)=>t?e?`${t} ${e}`:t:e||\"\",h=function(t,e=300){let s;return(...i)=>{clearTimeout(s),s=window.setTimeout((()=>t()),e)}};var u=function(){return u=Object.assign||function(t){for(var e,s=arguments,i=1,n=arguments.length;i0;){var s=e.splice(0,1)[0];t=t.childNodes[s]}return t};function v(t,e,s){var i,n,a,o=e[s._const.action],r=e[s._const.route];[s._const.addElement,s._const.addTextElement].includes(o)||(i=b(t,r));var l={diff:e,node:i};if(s.preDiffApply(l))return!0;switch(o){case s._const.addAttribute:if(!i||!m(i,\"Element\"))return!1;i.setAttribute(e[s._const.name],e[s._const.value]);break;case s._const.modifyAttribute:if(!i||!m(i,\"Element\"))return!1;i.setAttribute(e[s._const.name],e[s._const.newValue]),m(i,\"HTMLInputElement\")&&\"value\"===e[s._const.name]&&(i.value=e[s._const.newValue]);break;case s._const.removeAttribute:if(!i||!m(i,\"Element\"))return!1;i.removeAttribute(e[s._const.name]);break;case s._const.modifyTextElement:if(!i||!m(i,\"Text\"))return!1;s.textDiff(i,i.data,e[s._const.oldValue],e[s._const.newValue]),m(i.parentNode,\"HTMLTextAreaElement\")&&(i.parentNode.value=e[s._const.newValue]);break;case s._const.modifyValue:if(!i||void 0===i.value)return!1;i.value=e[s._const.newValue];break;case s._const.modifyComment:if(!i||!m(i,\"Comment\"))return!1;s.textDiff(i,i.data,e[s._const.oldValue],e[s._const.newValue]);break;case s._const.modifyChecked:if(!i||void 0===i.checked)return!1;i.checked=e[s._const.newValue];break;case s._const.modifySelected:if(!i||void 0===i.selected)return!1;i.selected=e[s._const.newValue];break;case s._const.replaceElement:var d=\"svg\"===e[s._const.newValue].nodeName.toLowerCase()||\"http://www.w3.org/2000/svg\"===i.parentNode.namespaceURI;i.parentNode.replaceChild(g(e[s._const.newValue],d,s),i);break;case s._const.relocateGroup:p([],new Array(e[s._const.groupLength]),!0).map((function(){return i.removeChild(i.childNodes[e[s._const.from]])})).forEach((function(t,n){0===n&&(a=i.childNodes[e[s._const.to]]),i.insertBefore(t,a||null)}));break;case s._const.removeElement:i.parentNode.removeChild(i);break;case s._const.addElement:var c=(u=r.slice()).splice(u.length-1,1)[0];if(!m(i=b(t,u),\"Element\"))return!1;i.insertBefore(g(e[s._const.element],\"http://www.w3.org/2000/svg\"===i.namespaceURI,s),i.childNodes[c]||null);break;case s._const.removeTextElement:if(!i||3!==i.nodeType)return!1;var h=i.parentNode;h.removeChild(i),m(h,\"HTMLTextAreaElement\")&&(h.value=\"\");break;case s._const.addTextElement:var u;c=(u=r.slice()).splice(u.length-1,1)[0];if(n=s.document.createTextNode(e[s._const.value]),!(i=b(t,u)).childNodes)return!1;i.insertBefore(n,i.childNodes[c]||null),m(i.parentNode,\"HTMLTextAreaElement\")&&(i.parentNode.value=e[s._const.value]);break;default:console.log(\"unknown action\")}return s.postDiffApply({diff:l.diff,node:l.node,newNode:n}),!0}function _(t,e,s){var i=t[e];t[e]=t[s],t[s]=i}function w(t,e,s){(e=e.slice()).reverse(),e.forEach((function(e){!function(t,e,s){switch(e[s._const.action]){case s._const.addAttribute:e[s._const.action]=s._const.removeAttribute,v(t,e,s);break;case s._const.modifyAttribute:_(e,s._const.oldValue,s._const.newValue),v(t,e,s);break;case s._const.removeAttribute:e[s._const.action]=s._const.addAttribute,v(t,e,s);break;case s._const.modifyTextElement:case s._const.modifyValue:case s._const.modifyComment:case s._const.modifyChecked:case s._const.modifySelected:case s._const.replaceElement:_(e,s._const.oldValue,s._const.newValue),v(t,e,s);break;case s._const.relocateGroup:_(e,s._const.from,s._const.to),v(t,e,s);break;case s._const.removeElement:e[s._const.action]=s._const.addElement,v(t,e,s);break;case s._const.addElement:e[s._const.action]=s._const.removeElement,v(t,e,s);break;case s._const.removeTextElement:e[s._const.action]=s._const.addTextElement,v(t,e,s);break;case s._const.addTextElement:e[s._const.action]=s._const.removeTextElement,v(t,e,s);break;default:console.log(\"unknown action\")}}(t,e,s)}))}var y=function(t){var e=[];return e.push(t.nodeName),\"#text\"!==t.nodeName&&\"#comment\"!==t.nodeName&&t.attributes&&(t.attributes.class&&e.push(\"\".concat(t.nodeName,\".\").concat(t.attributes.class.replace(/ /g,\".\"))),t.attributes.id&&e.push(\"\".concat(t.nodeName,\"#\").concat(t.attributes.id))),e},M=function(t){var e={},s={};return t.forEach((function(t){y(t).forEach((function(t){var i=t in e;i||t in s?i&&(delete e[t],s[t]=!0):e[t]=!0}))})),e},D=function(t,e){var s=M(t),i=M(e),n={};return Object.keys(s).forEach((function(t){i[t]&&(n[t]=!0)})),n},N=function(t){return delete t.outerDone,delete t.innerDone,delete t.valueDone,!t.childNodes||t.childNodes.every(N)},x=function(t){if(Object.prototype.hasOwnProperty.call(t,\"data\"))return{nodeName:\"#text\"===t.nodeName?\"#text\":\"#comment\",data:t.data};var e={nodeName:t.nodeName};return Object.prototype.hasOwnProperty.call(t,\"attributes\")&&(e.attributes=u({},t.attributes)),Object.prototype.hasOwnProperty.call(t,\"checked\")&&(e.checked=t.checked),Object.prototype.hasOwnProperty.call(t,\"value\")&&(e.value=t.value),Object.prototype.hasOwnProperty.call(t,\"selected\")&&(e.selected=t.selected),Object.prototype.hasOwnProperty.call(t,\"childNodes\")&&(e.childNodes=t.childNodes.map((function(t){return x(t)}))),e},O=function(t,e){if(![\"nodeName\",\"value\",\"checked\",\"selected\",\"data\"].every((function(s){return t[s]===e[s]})))return!1;if(Object.prototype.hasOwnProperty.call(t,\"data\"))return!0;if(Boolean(t.attributes)!==Boolean(e.attributes))return!1;if(Boolean(t.childNodes)!==Boolean(e.childNodes))return!1;if(t.attributes){var s=Object.keys(t.attributes),i=Object.keys(e.attributes);if(s.length!==i.length)return!1;if(!s.every((function(s){return t.attributes[s]===e.attributes[s]})))return!1}if(t.childNodes){if(t.childNodes.length!==e.childNodes.length)return!1;if(!t.childNodes.every((function(t,s){return O(t,e.childNodes[s])})))return!1}return!0},E=function(t,e,s,i,n){if(void 0===n&&(n=!1),!t||!e)return!1;if(t.nodeName!==e.nodeName)return!1;if([\"#text\",\"#comment\"].includes(t.nodeName))return!!n||t.data===e.data;if(t.nodeName in s)return!0;if(t.attributes&&e.attributes){if(t.attributes.id){if(t.attributes.id!==e.attributes.id)return!1;if(\"\".concat(t.nodeName,\"#\").concat(t.attributes.id)in s)return!0}if(t.attributes.class&&t.attributes.class===e.attributes.class)if(\"\".concat(t.nodeName,\".\").concat(t.attributes.class.replace(/ /g,\".\"))in s)return!0}if(i)return!0;var a=t.childNodes?t.childNodes.slice().reverse():[],o=e.childNodes?e.childNodes.slice().reverse():[];if(a.length!==o.length)return!1;if(n)return a.every((function(t,e){return t.nodeName===o[e].nodeName}));var r=D(a,o);return a.every((function(t,e){return E(t,o[e],r,!0,!0)}))},V=function(t,e){return p([],new Array(t),!0).map((function(){return e}))},$=function(t,e){for(var s=t.childNodes?t.childNodes:[],i=e.childNodes?e.childNodes:[],n=V(s.length,!1),a=V(i.length,!1),o=[],r=function(){return arguments[1]},l=!1,d=function(){var t=function(t,e,s,i){var n=0,a=[],o=t.length,r=e.length,l=p([],new Array(o+1),!0).map((function(){return[]})),d=D(t,e),c=o===r;c&&t.some((function(t,s){var i=y(t),n=y(e[s]);return i.length!==n.length?(c=!1,!0):(i.some((function(t,e){if(t!==n[e])return c=!1,!0})),!c||void 0)}));for(var h=0;h=n&&(n=l[h+1][f+1],a=[h+1,f+1]))}return 0!==n&&{oldValue:a[0]-n,newValue:a[1]-n,length:n}}(s,i,n,a);t?(o.push(t),p([],new Array(t.length),!0).map(r).forEach((function(e){return function(t,e,s,i){t[s.oldValue+i]=!0,e[s.newValue+i]=!0}(n,a,t,e)}))):l=!0};!l;)d();return t.subsets=o,t.subsetsAge=100,o},C=function(){function t(){this.list=[]}return t.prototype.add=function(t){var e;(e=this.list).push.apply(e,t)},t.prototype.forEach=function(t){this.list.forEach((function(e){return t(e)}))},t}();function k(t,e){var s,i,n=t;for(e=e.slice();e.length>0;)i=e.splice(0,1)[0],s=n,n=n.childNodes?n.childNodes[i]:void 0;return{node:n,parentNode:s,nodeIndex:i}}function S(t,e,s){return e.forEach((function(e){!function(t,e,s){var i,n,a,o;if(![s._const.addElement,s._const.addTextElement].includes(e[s._const.action])){var r=k(t,e[s._const.route]);n=r.node,a=r.parentNode,o=r.nodeIndex}var l,d,c=[],h={diff:e,node:n};if(s.preVirtualDiffApply(h))return!0;switch(e[s._const.action]){case s._const.addAttribute:n.attributes||(n.attributes={}),n.attributes[e[s._const.name]]=e[s._const.value],\"checked\"===e[s._const.name]?n.checked=!0:\"selected\"===e[s._const.name]?n.selected=!0:\"INPUT\"===n.nodeName&&\"value\"===e[s._const.name]&&(n.value=e[s._const.value]);break;case s._const.modifyAttribute:n.attributes[e[s._const.name]]=e[s._const.newValue];break;case s._const.removeAttribute:delete n.attributes[e[s._const.name]],0===Object.keys(n.attributes).length&&delete n.attributes,\"checked\"===e[s._const.name]?n.checked=!1:\"selected\"===e[s._const.name]?delete n.selected:\"INPUT\"===n.nodeName&&\"value\"===e[s._const.name]&&delete n.value;break;case s._const.modifyTextElement:n.data=e[s._const.newValue],\"TEXTAREA\"===a.nodeName&&(a.value=e[s._const.newValue]);break;case s._const.modifyValue:n.value=e[s._const.newValue];break;case s._const.modifyComment:n.data=e[s._const.newValue];break;case s._const.modifyChecked:n.checked=e[s._const.newValue];break;case s._const.modifySelected:n.selected=e[s._const.newValue];break;case s._const.replaceElement:l=x(e[s._const.newValue]),a.childNodes[o]=l;break;case s._const.relocateGroup:n.childNodes.splice(e[s._const.from],e[s._const.groupLength]).reverse().forEach((function(t){return n.childNodes.splice(e[s._const.to],0,t)})),n.subsets&&n.subsets.forEach((function(t){if(e[s._const.from]e[s._const.from])t.oldValue-=e[s._const.groupLength],(i=t.oldValue+t.length-e[s._const.to])>0&&(c.push({oldValue:e[s._const.to]+e[s._const.groupLength],newValue:t.newValue+t.length-i,length:i}),t.length-=i);else if(e[s._const.from]>e[s._const.to]&&t.oldValue>e[s._const.to]&&t.oldValue0&&(c.push({oldValue:e[s._const.to]+e[s._const.groupLength],newValue:t.newValue+t.length-i,length:i}),t.length-=i)}else t.oldValue===e[s._const.from]&&(t.oldValue=e[s._const.to])}));break;case s._const.removeElement:a.childNodes.splice(o,1),a.subsets&&a.subsets.forEach((function(t){t.oldValue>o?t.oldValue-=1:t.oldValue===o?t.delete=!0:t.oldValueo&&(t.oldValue+t.length-1===o?t.length--:(c.push({newValue:t.newValue+o-t.oldValue,oldValue:o,length:t.length-o+t.oldValue-1}),t.length=o-t.oldValue))})),n=a;break;case s._const.addElement:var u=(d=e[s._const.route].slice()).splice(d.length-1,1)[0];n=null===(i=k(t,d))||void 0===i?void 0:i.node,l=x(e[s._const.element]),n.childNodes||(n.childNodes=[]),u>=n.childNodes.length?n.childNodes.push(l):n.childNodes.splice(u,0,l),n.subsets&&n.subsets.forEach((function(t){if(t.oldValue>=u)t.oldValue+=1;else if(t.oldValueu){var e=t.oldValue+t.length-u;c.push({newValue:t.newValue+t.length-e,oldValue:u+1,length:e}),t.length-=e}}));break;case s._const.removeTextElement:a.childNodes.splice(o,1),\"TEXTAREA\"===a.nodeName&&delete a.value,a.subsets&&a.subsets.forEach((function(t){t.oldValue>o?t.oldValue-=1:t.oldValue===o?t.delete=!0:t.oldValueo&&(t.oldValue+t.length-1===o?t.length--:(c.push({newValue:t.newValue+o-t.oldValue,oldValue:o,length:t.length-o+t.oldValue-1}),t.length=o-t.oldValue))})),n=a;break;case s._const.addTextElement:var p=(d=e[s._const.route].slice()).splice(d.length-1,1)[0];l={nodeName:\"#text\",data:e[s._const.value]},(n=k(t,d).node).childNodes||(n.childNodes=[]),p>=n.childNodes.length?n.childNodes.push(l):n.childNodes.splice(p,0,l),\"TEXTAREA\"===n.nodeName&&(n.value=e[s._const.newValue]),n.subsets&&n.subsets.forEach((function(t){if(t.oldValue>=p&&(t.oldValue+=1),t.oldValuep){var e=t.oldValue+t.length-p;c.push({newValue:t.newValue+t.length-e,oldValue:p+1,length:e}),t.length-=e}}));break;default:console.log(\"unknown action\")}n.subsets&&(n.subsets=n.subsets.filter((function(t){return!t.delete&&t.oldValue!==t.newValue})),c.length&&(n.subsets=n.subsets.concat(c))),s.postVirtualDiffApply({node:h.node,diff:h.diff,newNode:l})}(t,e,s)})),!0}function T(t,e){void 0===e&&(e={valueDiffing:!0});var s={nodeName:t.nodeName};if(m(t,\"Text\",\"Comment\"))s.data=t.data;else{if(t.attributes&&t.attributes.length>0)s.attributes={},Array.prototype.slice.call(t.attributes).forEach((function(t){return s.attributes[t.name]=t.value}));if(t.childNodes&&t.childNodes.length>0)s.childNodes=[],Array.prototype.slice.call(t.childNodes).forEach((function(t){return s.childNodes.push(T(t,e))}));e.valueDiffing&&(m(t,\"HTMLTextAreaElement\")&&(s.value=t.value),m(t,\"HTMLInputElement\")&&[\"radio\",\"checkbox\"].includes(t.type.toLowerCase())&&void 0!==t.checked?s.checked=t.checked:m(t,\"HTMLButtonElement\",\"HTMLDataElement\",\"HTMLInputElement\",\"HTMLLIElement\",\"HTMLMeterElement\",\"HTMLOptionElement\",\"HTMLProgressElement\",\"HTMLParamElement\")&&(s.value=t.value),m(t,\"HTMLOptionElement\")&&(s.selected=t.selected))}return s}var A=/<\\s*\\/*[a-zA-Z:_][a-zA-Z0-9:_\\-.]*\\s*(?:\"[^\"]*\"['\"]*|'[^']*'['\"]*|[^'\"/>])*\\/*\\s*>|/g,L=/\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g;function P(t){return t.replace(/</g,\"<\").replace(/>/g,\">\").replace(/&/g,\"&\")}var R={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,menuItem:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},H=function(t,e){var s={nodeName:\"\",attributes:{}},i=!1,n=t.match(/<\\/?([^\\s]+?)[/\\s>]/);if(n&&(s.nodeName=e||\"svg\"===n[1]?n[1]:n[1].toUpperCase(),(R[n[1]]||\"/\"===t.charAt(t.length-2))&&(i=!0),s.nodeName.startsWith(\"!--\"))){var a=t.indexOf(\"--\\x3e\");return{type:\"comment\",node:{nodeName:\"#comment\",data:-1!==a?t.slice(4,a):\"\"},voidElement:i}}for(var o=new RegExp(L),r=null,l=!1;!l;)if(null===(r=o.exec(t)))l=!0;else if(r[0].trim())if(r[1]){var d=r[1].trim(),c=[d,\"\"];d.indexOf(\"=\")>-1&&(c=d.split(\"=\")),s.attributes[c[0]]=c[1],o.lastIndex--}else r[2]&&(s.attributes[r[2]]=r[3].trim().substring(1,r[3].length-1));return{type:\"tag\",node:s,voidElement:i}},I=function(t,e){void 0===e&&(e={valueDiffing:!0,caseSensitive:!1});var s,i=[],n=-1,a=[],o=!1;if(0!==t.indexOf(\"<\")){var r=t.indexOf(\"<\");i.push({nodeName:\"#text\",data:-1===r?t:t.substring(0,r)})}return t.replace(A,(function(r,l){var d=\"/\"!==r.charAt(1),c=r.startsWith(\"\\x3c!--\"),h=l+r.length,u=t.charAt(h);if(c){var p=H(r,e.caseSensitive).node;if(n<0)return i.push(p),\"\";var f=a[n];return f&&p.nodeName&&(f.node.childNodes||(f.node.childNodes=[]),f.node.childNodes.push(p)),\"\"}if(d){if(\"svg\"===(s=H(r,e.caseSensitive||o)).node.nodeName&&(o=!0),n++,!s.voidElement&&u&&\"<\"!==u){s.node.childNodes||(s.node.childNodes=[]);var m=P(t.slice(h,t.indexOf(\"<\",h)));s.node.childNodes.push({nodeName:\"#text\",data:m}),e.valueDiffing&&\"TEXTAREA\"===s.node.nodeName&&(s.node.value=m)}0===n&&s.node.nodeName&&i.push(s.node);var g=a[n-1];g&&s.node.nodeName&&(g.node.childNodes||(g.node.childNodes=[]),g.node.childNodes.push(s.node)),a[n]=s}if((!d||s.voidElement)&&(n>-1&&(s.voidElement||e.caseSensitive&&s.node.nodeName===r.slice(2,-1)||!e.caseSensitive&&s.node.nodeName.toUpperCase()===r.slice(2,-1).toUpperCase())&&--n>-1&&(\"svg\"===s.node.nodeName&&(o=!1),s=a[n]),\"<\"!==u&&u)){var b=-1===n?i:a[n].node.childNodes||[],v=t.indexOf(\"<\",h);m=P(t.slice(h,-1===v?void 0:v));b.push({nodeName:\"#text\",data:m})}return\"\"})),i[0]},Y=function(){function t(t,e,s){this.options=s,this.t1=\"undefined\"!=typeof Element&&m(t,\"Element\")?T(t,this.options):\"string\"==typeof t?I(t,this.options):JSON.parse(JSON.stringify(t)),this.t2=\"undefined\"!=typeof Element&&m(e,\"Element\")?T(e,this.options):\"string\"==typeof e?I(e,this.options):JSON.parse(JSON.stringify(e)),this.diffcount=0,this.foundAll=!1,this.debug&&(this.t1Orig=\"undefined\"!=typeof Element&&m(t,\"Element\")?T(t,this.options):\"string\"==typeof t?I(t,this.options):JSON.parse(JSON.stringify(t)),this.t2Orig=\"undefined\"!=typeof Element&&m(e,\"Element\")?T(e,this.options):\"string\"==typeof e?I(e,this.options):JSON.parse(JSON.stringify(e))),this.tracker=new C}return t.prototype.init=function(){return this.findDiffs(this.t1,this.t2)},t.prototype.findDiffs=function(t,e){var s;do{if(this.options.debug&&(this.diffcount+=1,this.diffcount>this.options.diffcap))throw new Error(\"surpassed diffcap:\".concat(JSON.stringify(this.t1Orig),\" -> \").concat(JSON.stringify(this.t2Orig)));0===(s=this.findNextDiff(t,e,[])).length&&(O(t,e)||(this.foundAll?console.error(\"Could not find remaining diffs!\"):(this.foundAll=!0,N(t),s=this.findNextDiff(t,e,[])))),s.length>0&&(this.foundAll=!1,this.tracker.add(s),S(t,s,this.options))}while(s.length>0);return this.tracker.list},t.prototype.findNextDiff=function(t,e,s){var i,n;if(this.options.maxDepth&&s.length>this.options.maxDepth)return[];if(!t.outerDone){if(i=this.findOuterDiff(t,e,s),this.options.filterOuterDiff&&(n=this.options.filterOuterDiff(t,e,i))&&(i=n),i.length>0)return t.outerDone=!0,i;t.outerDone=!0}if(Object.prototype.hasOwnProperty.call(t,\"data\"))return[];if(!t.innerDone){if((i=this.findInnerDiff(t,e,s)).length>0)return i;t.innerDone=!0}if(this.options.valueDiffing&&!t.valueDone){if((i=this.findValueDiff(t,e,s)).length>0)return t.valueDone=!0,i;t.valueDone=!0}return[]},t.prototype.findOuterDiff=function(t,e,s){var i,n,a,o,r,l,d=[];if(t.nodeName!==e.nodeName){if(!s.length)throw new Error(\"Top level nodes have to be of the same kind.\");return[(new f).setValue(this.options._const.action,this.options._const.replaceElement).setValue(this.options._const.oldValue,x(t)).setValue(this.options._const.newValue,x(e)).setValue(this.options._const.route,s)]}if(s.length&&this.options.diffcap0&&(r=this.attemptGroupRelocation(t,e,c,s,d)).length>0)return r}for(var h=0;hn.length?(\"#text\"===u.nodeName?r.push((new f).setValue(this.options._const.action,this.options._const.removeTextElement).setValue(this.options._const.route,s.concat(l)).setValue(this.options._const.value,u.data)):r.push((new f).setValue(this.options._const.action,this.options._const.removeElement).setValue(this.options._const.element,x(u)).setValue(this.options._const.route,s.concat(l))),i.splice(h,1),h-=1,l-=1,o-=1):i.lengthw+1&&\"#text\"===p[w+1].nodeName;)if(w+=1,m[v].data===p[w].data){d=!0;break}d||b.push((new f).setValue(this.options._const.action,this.options._const.modifyTextElement).setValue(this.options._const.route,i.concat(_)).setValue(this.options._const.oldValue,l.data).setValue(this.options._const.newValue,m[v].data))}}else b.push((new f).setValue(this.options._const.action,this.options._const.removeTextElement).setValue(this.options._const.route,i.concat(_)).setValue(this.options._const.value,l.data)),h.splice(_,1),p.splice(_,1),g=Math.min(h.length,u.length),_-=1,v-=1;else!0===u[v]?b.push((new f).setValue(this.options._const.action,this.options._const.replaceElement).setValue(this.options._const.oldValue,x(l)).setValue(this.options._const.newValue,x(m[v])).setValue(this.options._const.route,i.concat(_))):(b.push((new f).setValue(this.options._const.action,this.options._const.removeElement).setValue(this.options._const.route,i.concat(_)).setValue(this.options._const.element,x(l))),h.splice(_,1),p.splice(_,1),g=Math.min(h.length,u.length),_-=1,v-=1);else if(!0===u[v])\"#text\"===(l=m[v]).nodeName?(b.push((new f).setValue(this.options._const.action,this.options._const.addTextElement).setValue(this.options._const.route,i.concat(_)).setValue(this.options._const.value,l.data)),h.splice(_,0,!0),p.splice(_,0,{nodeName:\"#text\",data:l.data}),g=Math.min(h.length,u.length)):(b.push((new f).setValue(this.options._const.action,this.options._const.addElement).setValue(this.options._const.route,i.concat(_)).setValue(this.options._const.element,x(l))),h.splice(_,0,!0),p.splice(_,0,x(l)),g=Math.min(h.length,u.length));else if(h[_]!==u[v]){if(b.length>0)return b;if(r=s[h[_]],(o=Math.min(r.newValue,p.length-r.length))!==r.oldValue){a=!1;for(var y=0;y({nodeName:\"TR\",childNodes:t.map(((t,u)=>{const p=e[u]||{type:l,format:n,sortable:!0,searchable:!0};if(p.hidden)return;const f=t.attributes?{...t.attributes}:{};if(p.sortable&&o&&(!r.length||h)&&(p.filter?f[\"data-filterable\"]=\"true\":f[\"data-sortable\"]=\"true\"),p.headerClass&&(f.class=c(f.class,p.headerClass)),s.sort&&s.sort.column===u){const t=\"asc\"===s.sort.dir?i.ascending:i.descending;f.class=c(f.class,t),f[\"aria-sort\"]=\"asc\"===s.sort.dir?\"ascending\":\"descending\"}else s.filters[u]&&(f.class=c(f.class,i.filterActive));if(s.widths[u]&&!d){const t=`width: ${s.widths[u]}%;`;f.style=c(f.style,t)}if(r.length&&!h){const t=\"padding-bottom: 0;padding-top: 0;border: 0;\";f.style=c(f.style,t)}const m=\"html\"===t.type?t.data:[{nodeName:\"#text\",data:t.text??String(t.data)}];return{nodeName:\"TH\",attributes:f,childNodes:!a&&!r.length||h?p.sortable&&o?[{nodeName:\"BUTTON\",attributes:{class:p.filter?i.filter:i.sorter},childNodes:m}]:m:[{nodeName:\"#text\",data:\"\"}]}})).filter((t=>t))}),B=(t,e,s,i,a,o,{classes:r,hiddenHeader:l,header:d,footer:h,format:u,sortable:p,scrollY:f,type:m,rowRender:g,tabIndex:b},{noColumnWidths:v,unhideHeader:_,renderHeader:w},y,M)=>{const D={nodeName:\"TABLE\",attributes:{...t},childNodes:[{nodeName:\"TBODY\",childNodes:s.map((({row:t,index:e})=>{const s={nodeName:\"TR\",attributes:{...t.attributes,\"data-index\":String(e)},childNodes:t.cells.map(((t,s)=>{const o=i[s]||{type:m,format:u,sortable:!0,searchable:!0};if(o.hidden)return;const r={nodeName:\"TD\",attributes:t.attributes?{...t.attributes}:{},childNodes:\"html\"===o.type?t.data:[{nodeName:\"#text\",data:n(t)}]};if(d||h||!a.widths[s]||v||(r.attributes.style=c(r.attributes.style,`width: ${a.widths[s]}%;`)),o.cellClass&&(r.attributes.class=c(r.attributes.class,o.cellClass)),o.render){const i=o.render(t.data,r,e,s);if(i){if(\"string\"!=typeof i)return i;{const t=I(`${i}`);1===t.childNodes.length&&[\"#text\",\"#comment\"].includes(t.childNodes[0].nodeName)?r.childNodes[0].data=i:r.childNodes=t.childNodes}}}return r})).filter((t=>t))};if(e===o&&(s.attributes.class=c(s.attributes.class,r.cursor)),g){const i=g(t,s,e);if(i){if(\"string\"!=typeof i)return i;{const t=I(`${i}`);!t.childNodes||1===t.childNodes.length&&[\"#text\",\"#comment\"].includes(t.childNodes[0].nodeName)?s.childNodes[0].data=i:s.childNodes=t.childNodes}}}return s}))}]};if(D.attributes.class=c(D.attributes.class,r.table),d||h||w){const t=F(e,i,a,{classes:r,hiddenHeader:l,sortable:p,scrollY:f},{noColumnWidths:v,unhideHeader:_});if(d||w){const e={nodeName:\"THEAD\",childNodes:[t]};!f.length&&!l||_||(e.attributes={style:\"height: 0px;\"}),D.childNodes.unshift(e)}if(h){const e={nodeName:\"TFOOT\",childNodes:[d?structuredClone(t):t]};!f.length&&!l||_||(e.attributes={style:\"height: 0px;\"}),D.childNodes.push(e)}}return y.forEach((t=>D.childNodes.push(t))),M.forEach((t=>D.childNodes.push(t))),!1!==b&&(D.attributes.tabindex=String(b)),D};\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self&&self;function z(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,\"default\")?t.default:t}var U={exports:{}},W=z(U.exports=function(){var t=1e3,e=6e4,s=36e5,i=\"millisecond\",n=\"second\",a=\"minute\",o=\"hour\",r=\"day\",l=\"week\",d=\"month\",c=\"quarter\",h=\"year\",u=\"date\",p=\"Invalid Date\",f=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,m=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],s=t%100;return\"[\"+t+(e[(s-20)%10]||e[s]||e[0])+\"]\"}},b=function(t,e,s){var i=String(t);return!i||i.length>=e?t:\"\"+Array(e+1-i.length).join(s)+t},v={s:b,z:function(t){var e=-t.utcOffset(),s=Math.abs(e),i=Math.floor(s/60),n=s%60;return(e<=0?\"+\":\"-\")+b(i,2,\"0\")+\":\"+b(n,2,\"0\")},m:function t(e,s){if(e.date()1)return t(o[0])}else{var r=e.name;w[r]=e,n=r}return!i&&n&&(_=n),n||!i&&_},N=function(t,e){if(M(t))return t.clone();var s=\"object\"==typeof e?e:{};return s.date=t,s.args=arguments,new O(s)},x=v;x.l=D,x.i=M,x.w=function(t,e){return N(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var O=function(){function g(t){this.$L=D(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[y]=!0}var b=g.prototype;return b.parse=function(t){this.$d=function(t){var e=t.date,s=t.utc;if(null===e)return new Date(NaN);if(x.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var i=e.match(f);if(i){var n=i[2]-1||0,a=(i[7]||\"0\").substring(0,3);return s?new Date(Date.UTC(i[1],n,i[3]||1,i[4]||0,i[5]||0,i[6]||0,a)):new Date(i[1],n,i[3]||1,i[4]||0,i[5]||0,i[6]||0,a)}}return new Date(e)}(t),this.init()},b.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},b.$utils=function(){return x},b.isValid=function(){return!(this.$d.toString()===p)},b.isSame=function(t,e){var s=N(t);return this.startOf(e)<=s&&s<=this.endOf(e)},b.isAfter=function(t,e){return N(t)68?1900:2e3)},r=function(t){return function(e){this[t]=+e}},l=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(t){(this.zone||(this.zone={})).offset=function(t){if(!t)return 0;if(\"Z\"===t)return 0;var e=t.match(/([+-]|\\d\\d)/g),s=60*e[1]+(+e[2]||0);return 0===s?0:\"+\"===e[0]?-s:s}(t)}],d=function(t){var e=a[t];return e&&(e.indexOf?e:e.s.concat(e.f))},c=function(t,e){var s,i=a.meridiem;if(i){for(var n=1;n<=24;n+=1)if(t.indexOf(i(n,0,e))>-1){s=n>12;break}}else s=t===(e?\"pm\":\"PM\");return s},h={A:[n,function(t){this.afternoon=c(t,!1)}],a:[n,function(t){this.afternoon=c(t,!0)}],S:[/\\d/,function(t){this.milliseconds=100*+t}],SS:[s,function(t){this.milliseconds=10*+t}],SSS:[/\\d{3}/,function(t){this.milliseconds=+t}],s:[i,r(\"seconds\")],ss:[i,r(\"seconds\")],m:[i,r(\"minutes\")],mm:[i,r(\"minutes\")],H:[i,r(\"hours\")],h:[i,r(\"hours\")],HH:[i,r(\"hours\")],hh:[i,r(\"hours\")],D:[i,r(\"day\")],DD:[s,r(\"day\")],Do:[n,function(t){var e=a.ordinal,s=t.match(/\\d+/);if(this.day=s[0],e)for(var i=1;i<=31;i+=1)e(i).replace(/\\[|\\]/g,\"\")===t&&(this.day=i)}],M:[i,r(\"month\")],MM:[s,r(\"month\")],MMM:[n,function(t){var e=d(\"months\"),s=(d(\"monthsShort\")||e.map((function(t){return t.slice(0,3)}))).indexOf(t)+1;if(s<1)throw new Error;this.month=s%12||s}],MMMM:[n,function(t){var e=d(\"months\").indexOf(t)+1;if(e<1)throw new Error;this.month=e%12||e}],Y:[/[+-]?\\d+/,r(\"year\")],YY:[s,function(t){this.year=o(t)}],YYYY:[/\\d{4}/,r(\"year\")],Z:l,ZZ:l};function u(s){var i,n;i=s,n=a&&a.formats;for(var o=(s=i.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(e,s,i){var a=i&&i.toUpperCase();return s||n[i]||t[i]||n[a].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(t,e,s){return e||s.slice(1)}))}))).match(e),r=o.length,l=0;l-1)return new Date((\"X\"===e?1e3:1)*t);var i=u(e)(t),n=i.year,a=i.month,o=i.day,r=i.hours,l=i.minutes,d=i.seconds,c=i.milliseconds,h=i.zone,p=new Date,f=o||(n||a?1:p.getDate()),m=n||p.getFullYear(),g=0;n&&!a||(g=a>0?a-1:p.getMonth());var b=r||0,v=l||0,_=d||0,w=c||0;return h?new Date(Date.UTC(m,g,f,b,v,_,w+60*h.offset*1e3)):s?new Date(Date.UTC(m,g,f,b,v,_,w)):new Date(m,g,f,b,v,_,w)}catch(t){return new Date(\"\")}}(e,r,i),this.init(),h&&!0!==h&&(this.$L=this.locale(h).$L),c&&e!=this.format(r)&&(this.$d=new Date(\"\")),a={}}else if(r instanceof Array)for(var p=r.length,f=1;f<=p;f+=1){o[1]=r[f-1];var m=s.apply(this,o);if(m.isValid()){this.$d=m.$d,this.$L=m.$L,this.init();break}f===p&&(this.$d=new Date(\"\"))}else n.call(this,t)}}}());W.extend(Q);const X=(t,e)=>{let s;if(e)switch(e){case\"ISO_8601\":s=t;break;case\"RFC_2822\":s=W(t.slice(5),\"DD MMM YYYY HH:mm:ss ZZ\").unix();break;case\"MYSQL\":s=W(t,\"YYYY-MM-DD hh:mm:ss\").unix();break;case\"UNIX\":s=W(t).unix();break;default:s=W(t,e,!0).valueOf()}return s},Z=(t,e)=>{if(t?.constructor===Object&&Object.prototype.hasOwnProperty.call(t,\"data\")&&!Object.keys(t).find((t=>![\"text\",\"order\",\"data\",\"attributes\"].includes(t))))return t;const s={data:t};switch(e.type){case\"string\":\"string\"!=typeof t&&(s.text=String(s.data),s.order=s.text);break;case\"date\":e.format&&(s.order=X(String(s.data),e.format));break;case\"number\":s.text=String(s.data),s.data=parseFloat(s.data),s.order=s.data;break;case\"html\":{const t=Array.isArray(s.data)?{nodeName:\"TD\",childNodes:s.data}:I(`${String(s.data)}`);s.data=t.childNodes||[];const e=i(t);s.text=e,s.order=e;break}case\"boolean\":\"string\"==typeof s.data&&(s.data=s.data.toLowerCase().trim()),s.data=![\"false\",!1,null,void 0,0].includes(s.data),s.order=s.data?1:0,s.text=String(s.data);break;case\"other\":s.text=\"\",s.order=0;break;default:s.text=JSON.stringify(s.data)}return s},G=t=>{if(t instanceof Object&&t.constructor===Object&&t.hasOwnProperty(\"data\")&&(\"string\"==typeof t.text||\"string\"==typeof t.data))return t;const e={data:t};if(\"string\"==typeof t){if(t.length){const s=I(`${t}`);if(s.childNodes&&(1!==s.childNodes.length||\"#text\"!==s.childNodes[0].nodeName)){e.data=s.childNodes,e.type=\"html\";const t=i(s);e.text=t}}}else[null,void 0].includes(t)?e.text=\"\":e.text=JSON.stringify(t);return e},K=(t,e=void 0,s,n,a)=>{const o={data:[],headings:[]};if(t.headings)o.headings=t.headings.map((t=>G(t)));else if(e?.tHead)o.headings=Array.from(e.tHead.querySelectorAll(\"th\")).map(((t,e)=>{const o=(t=>{const e=T(t,{valueDiffing:!1});let s;return s=!e.childNodes||1===e.childNodes.length&&\"#text\"===e.childNodes[0].nodeName?{data:t.innerText,type:\"string\"}:{data:e.childNodes,type:\"html\",text:i(e)},s.attributes=e.attributes,s})(t);s[e]||(s[e]={type:n,format:a,searchable:!0,sortable:!0});const r=s[e];return\"false\"!==t.dataset.sortable?.trim().toLowerCase()&&\"false\"!==t.dataset.sort?.trim().toLowerCase()||(r.sortable=!1),\"false\"===t.dataset.searchable?.trim().toLowerCase()&&(r.searchable=!1),\"true\"!==t.dataset.hidden?.trim().toLowerCase()&&\"true\"!==t.getAttribute(\"hidden\")?.trim().toLowerCase()||(r.hidden=!0),[\"number\",\"string\",\"html\",\"date\",\"boolean\",\"other\"].includes(t.dataset.type)&&(r.type=t.dataset.type,\"date\"===r.type&&t.dataset.format&&(r.format=t.dataset.format)),o}));else if(t.data?.length){const e=t.data[0],s=Array.isArray(e)?e:e.cells;o.headings=s.map((t=>G(\"\")))}else e?.tBodies.length&&(o.headings=Array.from(e.tBodies[0].rows[0].cells).map((t=>G(\"\"))));for(let t=0;tt.data?String(t.data):t.text));o.data=t.data.map((t=>{let i,n;return Array.isArray(t)?(i={},n=t):t.hasOwnProperty(\"cells\")&&Object.keys(t).every((t=>[\"cells\",\"attributes\"].includes(t)))?(i=t.attributes,n=t.cells):(i={},n=[],Object.entries(t).forEach((([t,s])=>{const i=e.indexOf(t);i>-1&&(n[i]=s)}))),{attributes:i,cells:n.map(((t,e)=>Z(t,s[e])))}}))}else e?.tBodies?.length&&(o.data=Array.from(e.tBodies[0].rows).map((t=>({attributes:r(t.attributes),cells:Array.from(t.cells).map(((t,e)=>{const i=t.dataset.content?Z(t.dataset.content,s[e]):((t,e)=>{let s;switch(e.type){case\"string\":s={data:t.innerText};break;case\"date\":{const i=t.innerText;s={data:i,order:X(i,e.format)};break}case\"number\":{const e=parseFloat(t.innerText);s={data:e,order:e,text:t.innerText};break}case\"boolean\":{const e=![\"false\",\"0\",\"null\",\"undefined\"].includes(t.innerText.toLowerCase().trim());s={data:e,text:e?\"1\":\"0\",order:e?1:0};break}default:s={data:T(t,{valueDiffing:!1}).childNodes||[],text:t.innerText,order:t.innerText}}return s.attributes=r(t.attributes),s})(t,s[e]);return t.dataset.order&&(i.order=isNaN(parseFloat(t.dataset.order))?t.dataset.order:parseFloat(t.dataset.order)),i}))}))));if(o.data.length&&o.data[0].cells.length!==o.headings.length)throw new Error(\"Data heading length mismatch.\");return o};class tt{cursor;dt;constructor(t){this.dt=t,this.cursor=!1}setCursor(t=!1){if(t===this.cursor)return;const e=this.cursor;if(this.cursor=t,this.dt._renderTable(),!1!==t&&this.dt.options.scrollY){const t=l(this.dt.options.classes.cursor),e=this.dt.dom.querySelector(`tr${t}`);e&&e.scrollIntoView({block:\"nearest\"})}this.dt.emit(\"datatable.cursormove\",this.cursor,e)}add(t){if(!Array.isArray(t)||t.length<1)return;const e={cells:t.map(((t,e)=>{const s=this.dt.columns.settings[e];return Z(t,s)}))};this.dt.data.data.push(e),this.dt.hasRows=!0,this.dt.update(!0)}remove(t){if(!Array.isArray(t))return this.remove([t]);this.dt.data.data=this.dt.data.data.filter(((e,s)=>!t.includes(s))),this.dt.data.data.length||(this.dt.hasRows=!1),this.dt.update(!0)}findRowIndex(t,e){return this.dt.data.data.findIndex((s=>{const i=s.cells[t];return n(i).toLowerCase().includes(String(e).toLowerCase())}))}findRow(t,e){const s=this.findRowIndex(t,e);if(s<0)return{index:-1,row:null,cols:[]};const i=this.dt.data.data[s],n=i.cells.map((t=>t.data));return{index:s,row:i,cols:n}}updateRow(t,e){const s={cells:e.map(((t,e)=>{const s=this.dt.columns.settings[e];return Z(t,s)}))};this.dt.data.data.splice(t,1,s),this.dt.update(!0)}}class et{dt;settings;_state;constructor(t){this.dt=t,this.init()}init(){[this.settings,this._state]=((t=[],e,s)=>{let i=[],n=!1;const a=[];return t.forEach((t=>{(Array.isArray(t.select)?t.select:[t.select]).forEach((o=>{i[o]?t.type&&(i[o].type=t.type):i[o]={type:t.type||e,sortable:!0,searchable:!0};const r=i[o];t.render&&(r.render=t.render),t.format?r.format=t.format:\"date\"===t.type&&(r.format=s),t.cellClass&&(r.cellClass=t.cellClass),t.headerClass&&(r.headerClass=t.headerClass),t.locale&&(r.locale=t.locale),!1===t.sortable?r.sortable=!1:(t.numeric&&(r.numeric=t.numeric),t.caseFirst&&(r.caseFirst=t.caseFirst)),!1===t.searchable?r.searchable=!1:t.sensitivity&&(r.sensitivity=t.sensitivity),(r.searchable||r.sortable)&&void 0!==t.ignorePunctuation&&(r.ignorePunctuation=t.ignorePunctuation),t.searchMethod&&(r.searchMethod=t.searchMethod),t.hidden&&(r.hidden=!0),t.filter&&(r.filter=t.filter),t.sortSequence&&(r.sortSequence=t.sortSequence),t.sort&&(t.filter?a[o]=t.sort:n={column:o,dir:t.sort}),void 0!==t.searchItemSeparator&&(r.searchItemSeparator=t.searchItemSeparator)}))})),i=i.map((t=>t||{type:e,format:\"date\"===e?s:void 0,sortable:!0,searchable:!0})),[i,{filters:a,sort:n,widths:[]}]})(this.dt.options.columns,this.dt.options.type,this.dt.options.format)}get(t){return t<0||t>=this.size()?null:{...this.settings[t]}}size(){return this.settings.length}swap(t){if(2===t.length){const e=this.dt.data.headings.map(((t,e)=>e)),s=t[0],i=t[1],n=e[i];return e[i]=e[s],e[s]=n,this.order(e)}}order(t){this.dt.data.headings=t.map((t=>this.dt.data.headings[t])),this.dt.data.data.forEach((e=>e.cells=t.map((t=>e.cells[t])))),this.settings=t.map((t=>this.settings[t])),this.dt.update()}hide(t){Array.isArray(t)||(t=[t]),t.length&&(t.forEach((t=>{this.settings[t]||(this.settings[t]={type:\"string\"});this.settings[t].hidden=!0})),this.dt.update())}show(t){Array.isArray(t)||(t=[t]),t.length&&(t.forEach((t=>{this.settings[t]||(this.settings[t]={type:\"string\",sortable:!0});delete this.settings[t].hidden})),this.dt.update())}visible(t){return void 0===t&&(t=[...Array(this.dt.data.headings.length).keys()]),Array.isArray(t)?t.map((t=>!this.settings[t]?.hidden)):!this.settings[t]?.hidden}add(t){const e=this.dt.data.headings.length;if(this.dt.data.headings=this.dt.data.headings.concat([G(t.heading)]),this.dt.data.data.forEach(((e,s)=>{e.cells=e.cells.concat([Z(t.data[s],t)])})),this.settings[e]={type:t.type||\"string\",sortable:!0,searchable:!0},t.type||t.format||t.sortable||t.render||t.filter){const s=this.settings[e];t.render&&(s.render=t.render),t.format&&(s.format=t.format),t.cellClass&&(s.cellClass=t.cellClass),t.headerClass&&(s.headerClass=t.headerClass),t.locale&&(s.locale=t.locale),!1===t.sortable?s.sortable=!1:(t.numeric&&(s.numeric=t.numeric),t.caseFirst&&(s.caseFirst=t.caseFirst)),!1===t.searchable?s.searchable=!1:t.sensitivity&&(s.sensitivity=t.sensitivity),(s.searchable||s.sortable)&&t.ignorePunctuation&&(s.ignorePunctuation=t.ignorePunctuation),t.hidden&&(s.hidden=!0),t.filter&&(s.filter=t.filter),t.sortSequence&&(s.sortSequence=t.sortSequence)}this.dt.update(!0)}remove(t){Array.isArray(t)||(t=[t]),this.dt.data.headings=this.dt.data.headings.filter(((e,s)=>!t.includes(s))),this.dt.data.data.forEach((e=>e.cells=e.cells.filter(((e,s)=>!t.includes(s))))),this.dt.update(!0)}filter(t,e=!1){if(!this.settings[t]?.filter?.length)return;const s=this._state.filters[t];let i;if(s){let e=!1;i=this.settings[t].filter.find((t=>!!e||(t===s&&(e=!0),!1)))}else{const e=this.settings[t].filter;i=e?e[0]:void 0}i?this._state.filters[t]=i:s&&(this._state.filters[t]=void 0),this.dt._currentPage=1,this.dt.update(),e||this.dt.emit(\"datatable.filter\",t,i)}sort(t,e=void 0,s=!1){const i=this.settings[t];if(s||this.dt.emit(\"datatable.sorting\",t,e),!e){const s=!(!this._state.sort||this._state.sort.column!==t)&&this._state.sort?.dir,n=i?.sortSequence||[\"asc\",\"desc\"];if(s){const t=n.indexOf(s);e=-1===t?n[0]||\"asc\":t===n.length-1?n[0]:n[t+1]}else e=n.length?n[0]:\"asc\"}const a=!![\"string\",\"html\"].includes(i.type)&&new Intl.Collator(i.locale||this.dt.options.locale,{usage:\"sort\",numeric:i.numeric||this.dt.options.numeric,caseFirst:i.caseFirst||this.dt.options.caseFirst,ignorePunctuation:i.ignorePunctuation||this.dt.options.ignorePunctuation});this.dt.data.data.sort(((s,i)=>{const o=s.cells[t],r=i.cells[t];let l=o.order??n(o),d=r.order??n(r);if(\"desc\"===e){const t=l;l=d,d=t}return a&&\"number\"!=typeof l&&\"number\"!=typeof d?a.compare(String(l),String(d)):ld?1:0})),this._state.sort={column:t,dir:e},this.dt._searchQueries.length?(this.dt.multiSearch(this.dt._searchQueries),this.dt.emit(\"datatable.sort\",t,e)):s||(this.dt._currentPage=1,this.dt.update(),this.dt.emit(\"datatable.sort\",t,e))}_measureWidths(){const t=this.dt.data.headings.filter(((t,e)=>!this.settings[e]?.hidden));if((this.dt.options.scrollY.length||this.dt.options.fixedColumns)&&t?.length){this._state.widths=[];const t={noPaging:!0};if(this.dt.options.header||this.dt.options.footer){this.dt.options.scrollY.length&&(t.unhideHeader=!0),this.dt.headerDOM&&this.dt.headerDOM.parentElement.removeChild(this.dt.headerDOM),t.noColumnWidths=!0,this.dt._renderTable(t);const e=Array.from(this.dt.dom.querySelector(\"thead, tfoot\")?.firstElementChild?.querySelectorAll(\"th\")||[]);let s=0;const i=this.dt.data.headings.map(((t,i)=>{if(this.settings[i]?.hidden)return 0;const n=e[s].offsetWidth;return s+=1,n})),n=i.reduce(((t,e)=>t+e),0);this._state.widths=i.map((t=>t/n*100))}else{t.renderHeader=!0,this.dt._renderTable(t);const e=Array.from(this.dt.dom.querySelector(\"thead, tfoot\")?.firstElementChild?.querySelectorAll(\"th\")||[]);let s=0;const i=this.dt.data.headings.map(((t,i)=>{if(this.settings[i]?.hidden)return 0;const n=e[s].offsetWidth;return s+=1,n})),n=i.reduce(((t,e)=>t+e),0);this._state.widths=i.map((t=>t/n*100))}this.dt._renderTable()}}}const st={sortable:!0,locale:\"en\",numeric:!0,caseFirst:\"false\",searchable:!0,sensitivity:\"base\",ignorePunctuation:!0,destroyable:!0,searchItemSeparator:\"\",searchQuerySeparator:\" \",searchAnd:!1,searchMethod:!1,data:{},type:\"html\",format:\"YYYY-MM-DD\",columns:[],paging:!0,perPage:10,perPageSelect:[5,10,15,20,25],nextPrev:!0,firstLast:!1,prevText:\"‹\",nextText:\"›\",firstText:\"«\",lastText:\"»\",ellipsisText:\"…\",truncatePager:!0,pagerDelta:2,scrollY:\"\",fixedColumns:!0,fixedHeight:!1,footer:!1,header:!0,hiddenHeader:!1,caption:void 0,rowNavigation:!1,tabIndex:!1,pagerRender:!1,rowRender:!1,tableRender:!1,diffDomOptions:{valueDiffing:!1},labels:{placeholder:\"Search...\",searchTitle:\"Search within table\",perPage:\"entries per page\",pageTitle:\"Page {page}\",noRows:\"No entries found\",noResults:\"No results match your search query\",info:\"Showing {start} to {end} of {rows} entries\"},template:(t,e)=>`
\\n ${t.paging&&t.perPageSelect?`
\\n \\n
`:\"\"}\\n ${t.searchable?`
\\n \\n
`:\"\"}\\n
\\n
\\n
\\n ${t.paging?`
`:\"\"}\\n \\n
`,classes:{active:\"datatable-active\",ascending:\"datatable-ascending\",bottom:\"datatable-bottom\",container:\"datatable-container\",cursor:\"datatable-cursor\",descending:\"datatable-descending\",disabled:\"datatable-disabled\",dropdown:\"datatable-dropdown\",ellipsis:\"datatable-ellipsis\",filter:\"datatable-filter\",filterActive:\"datatable-filter-active\",empty:\"datatable-empty\",headercontainer:\"datatable-headercontainer\",hidden:\"datatable-hidden\",info:\"datatable-info\",input:\"datatable-input\",loading:\"datatable-loading\",pagination:\"datatable-pagination\",paginationList:\"datatable-pagination-list\",paginationListItem:\"datatable-pagination-list-item\",paginationListItemLink:\"datatable-pagination-list-item-link\",search:\"datatable-search\",selector:\"datatable-selector\",sorter:\"datatable-sorter\",table:\"datatable-table\",top:\"datatable-top\",wrapper:\"datatable-wrapper\"}},it=(t,e,s,i={})=>({nodeName:\"LI\",attributes:{class:i.active&&!i.hidden?`${s.classes.paginationListItem} ${s.classes.active}`:i.hidden?`${s.classes.paginationListItem} ${s.classes.hidden} ${s.classes.disabled}`:s.classes.paginationListItem},childNodes:[{nodeName:\"BUTTON\",attributes:{\"data-page\":String(t),class:s.classes.paginationListItemLink,\"aria-label\":s.labels.pageTitle.replace(\"{page}\",String(t))},childNodes:[{nodeName:\"#text\",data:e}]}]}),nt=(t,e,s,i,n)=>{let a=[];if(n.firstLast&&a.push(it(1,n.firstText,n)),n.nextPrev){const e=t?1:s-1;a.push(it(e,n.prevText,n,{hidden:t}))}let o=[...Array(i).keys()].map((t=>it(t+1,String(t+1),n,{active:t===s-1})));if(n.truncatePager&&(o=((t,e,s,i)=>{const n=i.pagerDelta,a=i.classes,o=i.ellipsisText,r=2*n;let l=e-n,d=e+n;e<4-n+r?d=3+r:e>s-(3-n+r)&&(l=s-(2+r));const c=[];for(let e=1;e<=s;e++)if(1==e||e==s||e>=l&&e<=d){const s=t[e-1];c.push(s)}let h;const u=[];return c.forEach((e=>{const s=parseInt(e.childNodes[0].attributes[\"data-page\"],10);if(h){const e=parseInt(h.childNodes[0].attributes[\"data-page\"],10);if(s-e==2)u.push(t[e]);else if(s-e!=1){const t={nodeName:\"LI\",attributes:{class:`${a.paginationListItem} ${a.ellipsis} ${a.disabled}`},childNodes:[{nodeName:\"BUTTON\",attributes:{class:a.paginationListItemLink},childNodes:[{nodeName:\"#text\",data:o}]}]};u.push(t)}}u.push(e),h=e})),u})(o,s,i,n)),a=a.concat(o),n.nextPrev){const t=e?i:s+1;a.push(it(t,n.nextText,n,{hidden:e}))}n.firstLast&&a.push(it(i,n.lastText,n));return{nodeName:\"UL\",attributes:{class:n.classes.paginationList},childNodes:o.length>1?a:[]}};class at{columns;containerDOM;_currentPage;data;_dd;dom;_events;hasHeadings;hasRows;headerDOM;_initialHTML;initialized;_label;lastPage;_listeners;onFirstPage;onLastPage;options;_pagerDOMs;_virtualPagerDOM;pages;_rect;rows;_searchData;_searchQueries;_tableAttributes;_tableFooters;_tableCaptions;totalPages;_virtualDOM;_virtualHeaderDOM;wrapperDOM;constructor(t,e={}){const s=\"string\"==typeof t?document.querySelector(t):t;s instanceof HTMLTableElement?this.dom=s:(this.dom=document.createElement(\"table\"),s.appendChild(this.dom));const i={...st.diffDomOptions,...e.diffDomOptions},n={...st.labels,...e.labels},a={...st.classes,...e.classes};this.options={...st,...e,diffDomOptions:i,labels:n,classes:a},this._initialHTML=this.options.destroyable?s.outerHTML:\"\",this.options.tabIndex?this.dom.tabIndex=this.options.tabIndex:this.options.rowNavigation&&-1===this.dom.tabIndex&&(this.dom.tabIndex=0),this._listeners={onResize:()=>this._onResize()},this._dd=new q(this.options.diffDomOptions||{}),this.initialized=!1,this._events={},this._currentPage=0,this.onFirstPage=!0,this.hasHeadings=!1,this.hasRows=!1,this._searchQueries=[],this.init()}init(){if(this.initialized||d(this.dom,this.options.classes.table))return!1;this._virtualDOM=T(this.dom,this.options.diffDomOptions||{}),this._tableAttributes={...this._virtualDOM.attributes},this._tableFooters=this._virtualDOM.childNodes?.filter((t=>\"TFOOT\"===t.nodeName))??[],this._tableCaptions=this._virtualDOM.childNodes?.filter((t=>\"CAPTION\"===t.nodeName))??[],void 0!==this.options.caption&&this._tableCaptions.push({nodeName:\"CAPTION\",childNodes:[{nodeName:\"#text\",data:this.options.caption}]}),this.rows=new tt(this),this.columns=new et(this),this.data=K(this.options.data,this.dom,this.columns.settings,this.options.type,this.options.format),this._render(),setTimeout((()=>{this.emit(\"datatable.init\"),this.initialized=!0}),10)}_render(){this.wrapperDOM=s(\"div\",{class:`${this.options.classes.wrapper} ${this.options.classes.loading}`}),this.wrapperDOM.innerHTML=this.options.template(this.options,this.dom);const t=l(this.options.classes.selector),e=this.wrapperDOM.querySelector(`select${t}`);e&&this.options.paging&&this.options.perPageSelect?this.options.perPageSelect.forEach((t=>{const[s,i]=Array.isArray(t)?[t[0],t[1]]:[String(t),t],n=i===this.options.perPage,a=new Option(s,String(i),n,n);e.appendChild(a)})):e&&e.parentElement.removeChild(e);const i=l(this.options.classes.container);this.containerDOM=this.wrapperDOM.querySelector(i),this._pagerDOMs=[];const n=l(this.options.classes.pagination);Array.from(this.wrapperDOM.querySelectorAll(n)).forEach((t=>{t instanceof HTMLElement&&(t.innerHTML=`
    `,this._pagerDOMs.push(t.firstElementChild))})),this._virtualPagerDOM={nodeName:\"UL\",attributes:{class:this.options.classes.paginationList}};const a=l(this.options.classes.info);this._label=this.wrapperDOM.querySelector(a),this.dom.parentElement.replaceChild(this.wrapperDOM,this.dom),this.containerDOM.appendChild(this.dom),this._rect=this.dom.getBoundingClientRect(),this._fixHeight(),this.options.header||this.wrapperDOM.classList.add(\"no-header\"),this.options.footer||this.wrapperDOM.classList.add(\"no-footer\"),this.options.sortable&&this.wrapperDOM.classList.add(\"sortable\"),this.options.searchable&&this.wrapperDOM.classList.add(\"searchable\"),this.options.fixedHeight&&this.wrapperDOM.classList.add(\"fixed-height\"),this.options.fixedColumns&&this.wrapperDOM.classList.add(\"fixed-columns\"),this._bindEvents(),this.columns._state.sort&&this.columns.sort(this.columns._state.sort.column,this.columns._state.sort.dir,!0),this.update(!0)}_renderTable(t={}){let e;e=(this.options.paging||this._searchQueries.length||this.columns._state.filters.length)&&this._currentPage&&this.pages.length&&!t.noPaging?this.pages[this._currentPage-1]:this.data.data.map(((t,e)=>({row:t,index:e})));let s=B(this._tableAttributes,this.data.headings,e,this.columns.settings,this.columns._state,this.rows.cursor,this.options,t,this._tableFooters,this._tableCaptions);if(this.options.tableRender){const t=this.options.tableRender(this.data,s,\"main\");t&&(s=t)}const i=this._dd.diff(this._virtualDOM,s);this._dd.apply(this.dom,i),this._virtualDOM=s}_renderPage(t=!1){this.hasRows&&this.totalPages?(this._currentPage>this.totalPages&&(this._currentPage=1),this._renderTable(),this.onFirstPage=1===this._currentPage,this.onLastPage=this._currentPage===this.lastPage):this.setMessage(this.options.labels.noRows);let e,s=0,i=0,n=0;if(this.totalPages&&(s=this._currentPage-1,i=s*this.options.perPage,n=i+this.pages[s].length,i+=1,e=this._searchQueries.length?this._searchData.length:this.data.data.length),this._label&&this.options.labels.info.length){const t=this.options.labels.info.replace(\"{start}\",String(i)).replace(\"{end}\",String(n)).replace(\"{page}\",String(this._currentPage)).replace(\"{pages}\",String(this.totalPages)).replace(\"{rows}\",String(e));this._label.innerHTML=e?t:\"\"}if(1==this._currentPage&&this._fixHeight(),this.options.rowNavigation&&this._currentPage&&(!this.rows.cursor||!this.pages[this._currentPage-1].find((t=>t.index===this.rows.cursor)))){const e=this.pages[this._currentPage-1];e.length&&(t?this.rows.setCursor(e[e.length-1].index):this.rows.setCursor(e[0].index))}}_renderPagers(){if(!this.options.paging)return;let t=nt(this.onFirstPage,this.onLastPage,this._currentPage,this.totalPages,this.options);if(this.options.pagerRender){const e=this.options.pagerRender([this.onFirstPage,this.onLastPage,this._currentPage,this.totalPages],t);e&&(t=e)}const e=this._dd.diff(this._virtualPagerDOM,t);this._pagerDOMs.forEach((t=>{this._dd.apply(t,e)})),this._virtualPagerDOM=t}_renderSeparateHeader(){const t=this.dom.parentElement;this.headerDOM||(this.headerDOM=document.createElement(\"div\"),this._virtualHeaderDOM={nodeName:\"DIV\"}),t.parentElement.insertBefore(this.headerDOM,t);let e={nodeName:\"TABLE\",attributes:this._tableAttributes,childNodes:[{nodeName:\"THEAD\",childNodes:[F(this.data.headings,this.columns.settings,this.columns._state,this.options,{unhideHeader:!0})]}]};if(e.attributes.class=c(e.attributes.class,this.options.classes.table),this.options.tableRender){const t=this.options.tableRender(this.data,e,\"header\");t&&(e=t)}const s={nodeName:\"DIV\",attributes:{class:this.options.classes.headercontainer},childNodes:[e]},i=this._dd.diff(this._virtualHeaderDOM,s);this._dd.apply(this.headerDOM,i),this._virtualHeaderDOM=s;const n=this.headerDOM.firstElementChild.clientWidth-this.dom.clientWidth;if(n){const t=structuredClone(this._virtualHeaderDOM);t.attributes.style=`padding-right: ${n}px;`;const e=this._dd.diff(this._virtualHeaderDOM,t);this._dd.apply(this.headerDOM,e),this._virtualHeaderDOM=t}t.scrollHeight>t.clientHeight&&(t.style.overflowY=\"scroll\")}_bindEvents(){if(this.options.perPageSelect){const t=l(this.options.classes.selector),e=this.wrapperDOM.querySelector(t);e&&e instanceof HTMLSelectElement&&e.addEventListener(\"change\",(()=>{this.emit(\"datatable.perpage:before\",this.options.perPage),this.options.perPage=parseInt(e.value,10),this.update(),this._fixHeight(),this.emit(\"datatable.perpage\",this.options.perPage)}),!1)}this.options.searchable&&this.wrapperDOM.addEventListener(\"input\",(t=>{const e=l(this.options.classes.input),s=t.target;if(!(s instanceof HTMLInputElement&&s.matches(e)))return;t.preventDefault();const i=[];if(Array.from(this.wrapperDOM.querySelectorAll(e)).filter((t=>t.value.length)).forEach((t=>{const e=t.dataset.and||this.options.searchAnd,s=t.dataset.querySeparator||this.options.searchQuerySeparator?t.value.split(this.options.searchQuerySeparator):[t.value];e?s.forEach((e=>{t.dataset.columns?i.push({terms:[e],columns:JSON.parse(t.dataset.columns)}):i.push({terms:[e],columns:void 0})})):t.dataset.columns?i.push({terms:s,columns:JSON.parse(t.dataset.columns)}):i.push({terms:s,columns:void 0})})),1===i.length&&1===i[0].terms.length){const t=i[0];this.search(t.terms[0],t.columns)}else this.multiSearch(i)})),this.wrapperDOM.addEventListener(\"click\",(t=>{const e=t.target.closest(\"a, button\");if(e)if(e.hasAttribute(\"data-page\"))this.page(parseInt(e.getAttribute(\"data-page\"),10)),t.preventDefault();else if(d(e,this.options.classes.sorter)){const s=Array.from(e.parentElement.parentElement.children).indexOf(e.parentElement),i=o(s,this.columns.settings);this.columns.sort(i),t.preventDefault()}else if(d(e,this.options.classes.filter)){const s=Array.from(e.parentElement.parentElement.children).indexOf(e.parentElement),i=o(s,this.columns.settings);this.columns.filter(i),t.preventDefault()}}),!1),this.options.rowNavigation?(this.dom.addEventListener(\"keydown\",(t=>{if(\"ArrowUp\"===t.key){let e;t.preventDefault(),t.stopPropagation(),this.pages[this._currentPage-1].find((t=>t.index===this.rows.cursor||(e=t,!1))),e?this.rows.setCursor(e.index):this.onFirstPage||this.page(this._currentPage-1,!0)}else if(\"ArrowDown\"===t.key){let e;t.preventDefault(),t.stopPropagation();const s=this.pages[this._currentPage-1].find((t=>!!e||(t.index===this.rows.cursor&&(e=!0),!1)));s?this.rows.setCursor(s.index):this.onLastPage||this.page(this._currentPage+1)}else[\"Enter\",\" \"].includes(t.key)&&this.emit(\"datatable.selectrow\",this.rows.cursor,t)})),this.dom.addEventListener(\"mousedown\",(t=>{const e=t.target;if(e instanceof Element&&this.dom.matches(\":focus\")){const s=Array.from(this.dom.querySelectorAll(\"tbody > tr\")).find((t=>t.contains(e)));s&&s instanceof HTMLElement&&this.emit(\"datatable.selectrow\",parseInt(s.dataset.index,10),t)}}))):this.dom.addEventListener(\"mousedown\",(t=>{const e=t.target;if(!(e instanceof Element))return;const s=Array.from(this.dom.querySelectorAll(\"tbody > tr\")).find((t=>t.contains(e)));s&&s instanceof HTMLElement&&this.emit(\"datatable.selectrow\",parseInt(s.dataset.index,10),t)})),window.addEventListener(\"resize\",this._listeners.onResize)}_onResize=h((()=>{this._rect=this.containerDOM.getBoundingClientRect(),this._rect.width&&this.update(!0)}),250);destroy(){if(this.options.destroyable){if(this.wrapperDOM){const t=this.wrapperDOM.parentElement;if(t){const e=s(\"div\");e.innerHTML=this._initialHTML;const i=e.firstElementChild;t.replaceChild(i,this.wrapperDOM),this.dom=i}else this.options.classes.table?.split(\" \").forEach((t=>this.wrapperDOM.classList.remove(t)))}window.removeEventListener(\"resize\",this._listeners.onResize),this.initialized=!1}}update(t=!1){this.emit(\"datatable.update:before\"),t&&(this.columns._measureWidths(),this.hasRows=Boolean(this.data.data.length),this.hasHeadings=Boolean(this.data.headings.length)),this.options.classes.empty?.split(\" \").forEach((t=>this.wrapperDOM.classList.remove(t))),this._paginate(),this._renderPage(),this._renderPagers(),this.options.scrollY.length&&this._renderSeparateHeader(),this.emit(\"datatable.update\")}_paginate(){let t=this.data.data.map(((t,e)=>({row:t,index:e})));return this._searchQueries.length&&(t=[],this._searchData.forEach((e=>t.push({index:e,row:this.data.data[e]})))),this.columns._state.filters.length&&this.columns._state.filters.forEach(((e,s)=>{e&&(t=t.filter((t=>{const i=t.row.cells[s];return\"function\"==typeof e?e(i.data):n(i)===e})))})),this.options.paging&&this.options.perPage>0?this.pages=t.map(((e,s)=>s%this.options.perPage==0?t.slice(s,s+this.options.perPage):null)).filter((t=>t)):this.pages=[t],this.totalPages=this.lastPage=this.pages.length,this._currentPage||(this._currentPage=1),this.totalPages}_fixHeight(){this.options.fixedHeight&&(this.containerDOM.style.height=null,this._rect=this.containerDOM.getBoundingClientRect(),this.containerDOM.style.height=`${this._rect.height}px`)}search(t,e=void 0,s=\"search\"){if(this.emit(\"datatable.search:before\",t,this._searchData),!t.length)return this._currentPage=1,this._searchQueries=[],this._searchData=[],this.update(),this.emit(\"datatable.search\",\"\",[]),this.wrapperDOM.classList.remove(\"search-results\"),!1;this.multiSearch([{terms:[t],columns:e||void 0}],s),this.emit(\"datatable.search\",t,this._searchData)}multiSearch(t,e=\"search\"){if(!this.hasRows)return!1;this._currentPage=1,this._searchData=[];let s=t.map((t=>({columns:t.columns,terms:t.terms.map((t=>t.trim())).filter((t=>t)),source:e}))).filter((t=>t.terms.length));if(this.emit(\"datatable.multisearch:before\",s,this._searchData),e.length&&(s=s.concat(this._searchQueries.filter((t=>t.source!==e)))),this._searchQueries=s,!s.length)return this.update(),this.emit(\"datatable.multisearch\",s,this._searchData),this.wrapperDOM.classList.remove(\"search-results\"),!1;const i=s.map((t=>this.columns.settings.map(((e,s)=>{if(e.hidden||!e.searchable||t.columns&&!t.columns.includes(s))return!1;let i=t.terms;const n=e.sensitivity||this.options.sensitivity;[\"base\",\"accent\"].includes(n)&&(i=i.map((t=>t.toLowerCase()))),[\"base\",\"case\"].includes(n)&&(i=i.map((t=>t.normalize(\"NFD\").replace(/\\p{Diacritic}/gu,\"\"))));return(e.ignorePunctuation??this.options.ignorePunctuation)&&(i=i.map((t=>t.replace(/[.,/#!$%^&*;:{}=-_`~()]/g,\"\")))),i}))));this.data.data.forEach(((t,e)=>{const a=t.cells.map(((t,e)=>{const s=this.columns.settings[e];if(s.searchMethod||this.options.searchMethod)return t;let i=n(t).trim();if(i.length){const t=s.sensitivity||this.options.sensitivity;[\"base\",\"accent\"].includes(t)&&(i=i.toLowerCase()),[\"base\",\"case\"].includes(t)&&(i=i.normalize(\"NFD\").replace(/\\p{Diacritic}/gu,\"\"));(s.ignorePunctuation??this.options.ignorePunctuation)&&(i=i.replace(/[.,/#!$%^&*;:{}=-_`~()]/g,\"\"))}const a=s.searchItemSeparator||this.options.searchItemSeparator;return a?i.split(a):[i]}));i.every(((e,i)=>e.find(((e,n)=>{if(!e)return!1;const o=this.columns.settings[n].searchMethod||this.options.searchMethod;return o?o(e,a[n],t,n,s[i].source):e.find((t=>a[n].find((e=>e.includes(t)))))}))))&&this._searchData.push(e)})),this.wrapperDOM.classList.add(\"search-results\"),this._searchData.length?this.update():(this.wrapperDOM.classList.remove(\"search-results\"),this.setMessage(this.options.labels.noResults)),this.emit(\"datatable.multisearch\",s,this._searchData)}page(t,e=!1){return this.emit(\"datatable.page:before\",t),t!==this._currentPage&&(isNaN(t)||(this._currentPage=t),!(t>this.pages.length||t<0)&&(this._renderPage(e),this._renderPagers(),void this.emit(\"datatable.page\",t)))}insert(e){let s=[];if(Array.isArray(e)){const t=this.data.headings.map((t=>t.data?String(t.data):t.text));e.forEach(((e,i)=>{const n=[];Object.entries(e).forEach((([e,s])=>{const a=t.indexOf(e);a>-1?n[a]=Z(s,this.columns.settings[a]):this.hasHeadings||this.hasRows||0!==i||(n[t.length]=Z(s,this.columns.settings[t.length]),t.push(e),this.data.headings.push(G(e)))})),s.push({cells:n})}))}else t(e)&&(!e.headings||this.hasHeadings||this.hasRows?e.data&&Array.isArray(e.data)&&(s=e.data.map((t=>{let e,s;return Array.isArray(t)?(e={},s=t):(e=t.attributes,s=t.cells),{attributes:e,cells:s.map(((t,e)=>Z(t,this.columns.settings[e])))}}))):this.data=K(e,void 0,this.columns.settings,this.options.type,this.options.format));s.length&&s.forEach((t=>this.data.data.push(t))),this.hasHeadings=Boolean(this.data.headings.length),this.columns._state.sort&&this.columns.sort(this.columns._state.sort.column,this.columns._state.sort.dir,!0),this.update(!0)}refresh(){if(this.emit(\"datatable.refresh:before\"),this.options.searchable){const t=l(this.options.classes.input);Array.from(this.wrapperDOM.querySelectorAll(t)).forEach((t=>t.value=\"\")),this._searchQueries=[]}this._currentPage=1,this.onFirstPage=!0,this.update(!0),this.emit(\"datatable.refresh\")}print(){const t=s(\"table\");let e=B(this._tableAttributes,this.data.headings,this.data.data.map(((t,e)=>({row:t,index:e}))),this.columns.settings,this.columns._state,!1,this.options,{noColumnWidths:!0,unhideHeader:!0},this._tableFooters,this._tableCaptions);if(this.options.tableRender){const t=this.options.tableRender(this.data,e,\"print\");t&&(e=t)}const i=this._dd.diff({nodeName:\"TABLE\"},e);this._dd.apply(t,i);const n=window.open();n.document.body.appendChild(t),n.print()}setMessage(t){const e=this.data.headings.filter(((t,e)=>!this.columns.settings[e]?.hidden)).length||1;this.options.classes.empty?.split(\" \").forEach((t=>this.wrapperDOM.classList.add(t))),this._label&&(this._label.innerHTML=\"\"),this.totalPages=0,this._renderPagers();let s={nodeName:\"TABLE\",attributes:this._tableAttributes,childNodes:[{nodeName:\"THEAD\",childNodes:[F(this.data.headings,this.columns.settings,this.columns._state,this.options,{})]},{nodeName:\"TBODY\",childNodes:[{nodeName:\"TR\",childNodes:[{nodeName:\"TD\",attributes:{class:this.options.classes.empty,colspan:String(e)},childNodes:[{nodeName:\"#text\",data:t}]}]}]}]};if(this._tableFooters.forEach((t=>s.childNodes.push(t))),this._tableCaptions.forEach((t=>s.childNodes.push(t))),s.attributes.class=c(s.attributes.class,this.options.classes.table),this.options.tableRender){const t=this.options.tableRender(this.data,s,\"message\");t&&(s=t)}const i=this._dd.diff(this._virtualDOM,s);this._dd.apply(this.dom,i),this._virtualDOM=s}on(t,e){this._events[t]=this._events[t]||[],this._events[t].push(e)}off(t,e){t in this._events!=!1&&this._events[t].splice(this._events[t].indexOf(e),1)}emit(t,...e){if(t in this._events!=!1)for(let s=0;st.trim().replace(/(^\"|\"$)/g,\"\")))),t.shift()),t.forEach(((t,e)=>{s.data[e]=[];const n=t.split(i.columnDelimiter);n.length&&n.forEach((t=>{i.removeDoubleQuotes&&(t=t.trim().replace(/(^\"|\"$)/g,\"\")),s.data[e].push(t)}))}))),s)return s}return!1},rt=function(s){let i;if(!t(s))return!1;const n={data:\"\",...s};if(n.data.length||t(n.data)){const t=!!e(n.data)&&JSON.parse(n.data);if(t?(i={headings:[],data:[]},t.forEach(((t,e)=>{i.data[e]=[],Object.entries(t).forEach((([t,s])=>{i.headings.includes(t)||i.headings.push(t),i.data[e].push(s)}))}))):console.warn(\"That's not valid JSON!\"),i)return i}return!1},lt=function(e,s={}){if(!e.hasHeadings&&!e.hasRows)return!1;if(!t(s))return!1;const i={download:!0,skipColumn:[],lineDelimiter:\"\\n\",columnDelimiter:\",\",...s},a=t=>!i.skipColumn.includes(t)&&!e.columns.settings[t]?.hidden,o=e.data.headings.filter(((t,e)=>a(e))).map((t=>t.text??t.data));let r;if(i.selection)if(Array.isArray(i.selection)){r=[];for(let t=0;tt.row)))}else r=e.pages[i.selection-1].map((t=>t.row));else r=e.data.data;let l=[];if(l[0]=o,l=l.concat(r.map((t=>t.cells.filter(((t,e)=>a(e))).map((t=>n(t)))))),l.length){let t=\"\";if(l.forEach((e=>{e.forEach((e=>{\"string\"==typeof e&&(e=(e=(e=(e=(e=e.trim()).replace(/\\s{2,}/g,\" \")).replace(/\\n/g,\" \")).replace(/\"/g,'\"\"')).replace(/#/g,\"%23\")).includes(\",\")&&(e=`\"${e}\"`),t+=e+i.columnDelimiter})),t=t.trim().substring(0,t.length-1),t+=i.lineDelimiter})),t=t.trim().substring(0,t.length-1),i.download){const e=document.createElement(\"a\");e.href=encodeURI(`data:text/csv;charset=utf-8,${t}`),e.download=`${i.filename||\"datatable_export\"}.csv`,document.body.appendChild(e),e.click(),document.body.removeChild(e)}return t}return!1},dt=function(e,s={}){if(!e.hasHeadings&&!e.hasRows)return!1;if(!t(s))return!1;const i={download:!0,skipColumn:[],replacer:null,space:4,...s},a=t=>!i.skipColumn.includes(t)&&!e.columns.settings[t]?.hidden;let o;if(i.selection)if(Array.isArray(i.selection)){o=[];for(let t=0;tt.row)))}else o=e.pages[i.selection-1].map((t=>t.row));else o=e.data.data;const r=o.map((t=>t.cells.filter(((t,e)=>a(e))).map((t=>n(t))))),l=e.data.headings.filter(((t,e)=>a(e))).map((t=>t.text??String(t.data)));if(r.length){const t=[];r.forEach(((e,s)=>{t[s]=t[s]||{},e.forEach(((e,i)=>{t[s][l[i]]=e}))}));const e=JSON.stringify(t,i.replacer,i.space);if(i.download){const t=new Blob([e],{type:\"data:application/json;charset=utf-8\"}),s=URL.createObjectURL(t),n=document.createElement(\"a\");n.href=s,n.download=`${i.filename||\"datatable_export\"}.json`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(s)}return e}return!1},ct=function(e,s={}){if(!e.hasHeadings&&!e.hasRows)return!1;if(!t(s))return!1;const i={download:!0,skipColumn:[],tableName:\"myTable\",...s},a=t=>!i.skipColumn.includes(t)&&!e.columns.settings[t]?.hidden;let o=[];if(i.selection)if(Array.isArray(i.selection))for(let t=0;tt.row)));else o=e.pages[i.selection-1].map((t=>t.row));else o=e.data.data;const r=o.map((t=>t.cells.filter(((t,e)=>a(e))).map((t=>n(t))))),l=e.data.headings.filter(((t,e)=>a(e))).map((t=>t.text??String(t.data)));if(r.length){let t=`INSERT INTO \\`${i.tableName}\\` (`;if(l.forEach((e=>{t+=`\\`${e}\\`,`})),t=t.trim().substring(0,t.length-1),t+=\") VALUES \",r.forEach((e=>{t+=\"(\",e.forEach((e=>{t+=\"string\"==typeof e?`\"${e}\",`:`${e},`})),t=t.trim().substring(0,t.length-1),t+=\"),\"})),t=t.trim().substring(0,t.length-1),t+=\";\",i.download&&(t=`data:application/sql;charset=utf-8,${t}`),i.download){const e=document.createElement(\"a\");e.href=encodeURI(t),e.download=`${i.filename||\"datatable_export\"}.sql`,document.body.appendChild(e),e.click(),document.body.removeChild(e)}return t}return!1},ht=function(e,s={}){if(!e.hasHeadings&&!e.hasRows)return!1;if(!t(s))return!1;const i={download:!0,skipColumn:[],lineDelimiter:\"\\n\",columnDelimiter:\",\",...s},a=t=>!i.skipColumn.includes(t)&&!e.columns.settings[t]?.hidden,o=e.data.headings.filter(((t,e)=>a(e))).map((t=>t.text??t.data));let r;if(i.selection)if(Array.isArray(i.selection)){r=[];for(let t=0;tt.row)))}else r=e.pages[i.selection-1].map((t=>t.row));else r=e.data.data;let l=[];if(l[0]=o,l=l.concat(r.map((t=>t.cells.filter(((t,e)=>a(e))).map((t=>n(t)))))),l.length){let t=\"\";if(l.forEach((e=>{e.forEach((e=>{\"string\"==typeof e&&(e=(e=(e=(e=(e=e.trim()).replace(/\\s{2,}/g,\" \")).replace(/\\n/g,\" \")).replace(/\"/g,'\"\"')).replace(/#/g,\"%23\")).includes(\",\")&&(e=`\"${e}\"`),t+=e+i.columnDelimiter})),t=t.trim().substring(0,t.length-1),t+=i.lineDelimiter})),t=t.trim().substring(0,t.length-1),i.download&&(t=`data:text/csv;charset=utf-8,${t}`),i.download){const e=document.createElement(\"a\");e.href=encodeURI(t),e.download=`${i.filename||\"datatable_export\"}.txt`,document.body.appendChild(e),e.click(),document.body.removeChild(e)}return t}return!1},ut={classes:{row:\"datatable-editor-row\",form:\"datatable-editor-form\",item:\"datatable-editor-item\",menu:\"datatable-editor-menu\",save:\"datatable-editor-save\",block:\"datatable-editor-block\",cancel:\"datatable-editor-cancel\",close:\"datatable-editor-close\",inner:\"datatable-editor-inner\",input:\"datatable-editor-input\",label:\"datatable-editor-label\",modal:\"datatable-editor-modal\",action:\"datatable-editor-action\",header:\"datatable-editor-header\",wrapper:\"datatable-editor-wrapper\",editable:\"datatable-editor-editable\",container:\"datatable-editor-container\",separator:\"datatable-editor-separator\"},labels:{closeX:\"x\",editCell:\"Edit Cell\",editRow:\"Edit Row\",removeRow:\"Remove Row\",reallyRemove:\"Are you sure?\",reallyCancel:\"Do you really want to cancel?\",save:\"Save\",cancel:\"Cancel\"},cancelModal:t=>confirm(t.options.labels.reallyCancel),inline:!0,hiddenColumns:!1,contextMenu:!0,clickEvent:\"dblclick\",excludeColumns:[],menuItems:[{text:t=>t.options.labels.editCell,action:(t,e)=>{if(!(t.event.target instanceof Element))return;const s=t.event.target.closest(\"td\");return t.editCell(s)}},{text:t=>t.options.labels.editRow,action:(t,e)=>{if(!(t.event.target instanceof Element))return;const s=t.event.target.closest(\"tr\");return t.editRow(s)}},{separator:!0},{text:t=>t.options.labels.removeRow,action:(t,e)=>{if(t.event.target instanceof Element&&confirm(t.options.labels.reallyRemove)){const e=t.event.target.closest(\"tr\");t.removeRow(e)}}}]};class pt{menuOpen;containerDOM;data;disabled;dt;editing;editingCell;editingRow;event;events;initialized;limits;menuDOM;modalDOM;options;originalRowRender;rect;wrapperDOM;constructor(t,e={}){this.dt=t,this.options={...ut,...e}}init(){this.initialized||(this.options.classes.editable?.split(\" \").forEach((t=>this.dt.wrapperDOM.classList.add(t))),this.options.inline&&(this.originalRowRender=this.dt.options.rowRender,this.dt.options.rowRender=(t,e,s)=>{let i=this.rowRender(t,e,s);return this.originalRowRender&&(i=this.originalRowRender(t,i,s)),i}),this.options.contextMenu&&(this.containerDOM=s(\"div\",{id:this.options.classes.container}),this.wrapperDOM=s(\"div\",{class:this.options.classes.wrapper}),this.menuDOM=s(\"ul\",{class:this.options.classes.menu}),this.options.menuItems&&this.options.menuItems.length&&this.options.menuItems.forEach((t=>{const e=s(\"li\",{class:t.separator?this.options.classes.separator:this.options.classes.item});if(!t.separator){const i=s(\"a\",{class:this.options.classes.action,href:t.url||\"#\",html:\"function\"==typeof t.text?t.text(this):t.text});e.appendChild(i),t.action&&\"function\"==typeof t.action&&i.addEventListener(\"click\",(e=>{e.preventDefault(),t.action(this,e)}))}this.menuDOM.appendChild(e)})),this.wrapperDOM.appendChild(this.menuDOM),this.containerDOM.appendChild(this.wrapperDOM),this.updateMenu()),this.data={},this.menuOpen=!1,this.editing=!1,this.editingRow=!1,this.editingCell=!1,this.bindEvents(),setTimeout((()=>{this.initialized=!0,this.dt.emit(\"editable.init\")}),10))}bindEvents(){this.events={keydown:this.keydown.bind(this),click:this.click.bind(this)},this.dt.dom.addEventListener(this.options.clickEvent,this.events.click),document.addEventListener(\"keydown\",this.events.keydown),this.options.contextMenu&&(this.events.context=this.context.bind(this),this.events.updateMenu=this.updateMenu.bind(this),this.events.dismissMenu=this.dismissMenu.bind(this),this.events.reset=h((()=>this.events.updateMenu()),50),this.dt.dom.addEventListener(\"contextmenu\",this.events.context),document.addEventListener(\"click\",this.events.dismissMenu),window.addEventListener(\"resize\",this.events.reset),window.addEventListener(\"scroll\",this.events.reset))}context(t){const e=t.target;if(!(e instanceof Element))return;this.event=t;const s=e.closest(\"tbody td\");if(!this.disabled&&s){t.preventDefault();let e=t.pageX,s=t.pageY;e>this.limits.x&&(e-=this.rect.width),s>this.limits.y&&(s-=this.rect.height),this.wrapperDOM.style.top=`${s}px`,this.wrapperDOM.style.left=`${e}px`,this.openMenu(),this.updateMenu()}}click(t){const e=t.target;if(e instanceof Element)if(this.editing&&this.data&&this.editingCell){const t=l(this.options.classes.input),e=this.modalDOM?this.modalDOM.querySelector(`input${t}[type=text]`):this.dt.wrapperDOM.querySelector(`input${t}[type=text]`);this.saveCell(e.value)}else if(!this.editing){const s=e.closest(\"tbody td\");s&&(this.editCell(s),t.preventDefault())}}keydown(t){const e=l(this.options.classes.input);if(this.modalDOM){if(\"Escape\"===t.key)this.options.cancelModal(this)&&this.closeModal();else if(\"Enter\"===t.key)if(this.editingCell){const t=this.modalDOM.querySelector(`input${e}[type=text]`);this.saveCell(t.value)}else{const t=Array.from(this.modalDOM.querySelectorAll(`input${e}[type=text]`)).map((t=>t.value.trim()));this.saveRow(t,this.data.row)}}else if(this.editing&&this.data)if(\"Enter\"===t.key){if(this.editingCell){const t=this.dt.wrapperDOM.querySelector(`input${e}[type=text]`);this.saveCell(t.value)}else if(this.editingRow){const t=Array.from(this.dt.wrapperDOM.querySelectorAll(`input${e}[type=text]`)).map((t=>t.value.trim()));this.saveRow(t,this.data.row)}}else\"Escape\"===t.key&&(this.editingCell?this.saveCell(this.data.content):this.editingRow&&this.saveRow(null,this.data.row))}editCell(t){const e=o(t.cellIndex,this.dt.columns.settings);if(this.options.excludeColumns.includes(e))return void this.closeMenu();const s=parseInt(t.parentElement.dataset.index,10),i=this.dt.data.data[s].cells[e];this.data={cell:i,rowIndex:s,columnIndex:e,content:n(i)},this.editing=!0,this.editingCell=!0,this.options.inline?this.dt.update():this.editCellModal(),this.closeMenu()}editCellModal(){const t=this.data.cell,e=this.data.columnIndex,i=this.dt.data.headings[e].text||String(this.dt.data.headings[e].data),o=[`
    `,`
    `,`

    ${this.options.labels.editCell}

    `,``,\"
    \",`
    `,`
    `,`
    `,``,``,\"
    \",`
    `,``,``,\"
    \",\"
    \",\"
    \",\"
    \"].join(\"\"),r=s(\"div\",{class:this.options.classes.modal,html:o});this.modalDOM=r,this.openModal();const d=l(this.options.classes.input),c=r.querySelector(`input${d}[type=text]`);c.focus(),c.selectionStart=c.selectionEnd=c.value.length,r.addEventListener(\"click\",(t=>{const e=t.target;e instanceof Element&&(e.hasAttribute(\"data-editor-cancel\")?(t.preventDefault(),this.options.cancelModal(this)&&this.closeModal()):e.hasAttribute(\"data-editor-save\")&&(t.preventDefault(),this.saveCell(c.value)))}))}saveCell(t){const e=this.data.content,s=this.dt.columns.settings[this.data.columnIndex].type||this.dt.options.type,i=t.trim();let n;if(\"number\"===s)n={data:parseFloat(i)};else if(\"boolean\"===s)n=[\"\",\"false\",\"0\"].includes(i)?{data:!1,text:\"false\",order:0}:{data:!0,text:\"true\",order:1};else if(\"html\"===s)n={data:[{nodeName:\"#text\",data:t}],text:t,order:t};else if(\"string\"===s)n={data:t};else if(\"date\"===s){const e=this.dt.columns.settings[this.data.columnIndex].format||this.dt.options.format;n={data:t,order:X(String(t),e)}}else n={data:t};this.dt.data.data[this.data.rowIndex].cells[this.data.columnIndex]=n,this.closeModal();const a=this.data.rowIndex,o=this.data.columnIndex;this.data={},this.dt.update(!0),this.editing=!1,this.editingCell=!1,this.dt.emit(\"editable.save.cell\",t,e,a,o)}editRow(t){if(!t||\"TR\"!==t.nodeName||this.editing)return;const e=parseInt(t.dataset.index,10),s=this.dt.data.data[e];this.data={row:s.cells,rowIndex:e},this.editing=!0,this.editingRow=!0,this.options.inline?this.dt.update():this.editRowModal(),this.closeMenu()}editRowModal(){const t=this.data.row,e=[`
    `,`
    `,`

    ${this.options.labels.editRow}

    `,``,\"
    \",`
    `,`
    `,`
    `,``,``,\"
    \",\"
    \",\"
    \",\"
    \"].join(\"\"),i=s(\"div\",{class:this.options.classes.modal,html:e}),o=i.firstElementChild;if(!o)return;const r=o.lastElementChild?.firstElementChild;if(!r)return;t.forEach(((t,e)=>{const i=this.dt.columns.settings[e];if((!i.hidden||i.hidden&&this.options.hiddenColumns)&&!this.options.excludeColumns.includes(e)){const i=this.dt.data.headings[e].text||String(this.dt.data.headings[e].data);r.insertBefore(s(\"div\",{class:this.options.classes.row,html:[`
    `,``,``,\"
    \"].join(\"\")}),r.lastElementChild)}})),this.modalDOM=i,this.openModal();const d=l(this.options.classes.input),c=Array.from(r.querySelectorAll(`input${d}[type=text]`));i.addEventListener(\"click\",(t=>{const e=t.target;if(e instanceof Element)if(e.hasAttribute(\"data-editor-cancel\"))this.options.cancelModal(this)&&this.closeModal();else if(e.hasAttribute(\"data-editor-save\")){const t=c.map((t=>t.value.trim()));this.saveRow(t,this.data.row)}}))}saveRow(t,e){const s=e.map((t=>n(t))),i=this.dt.data.data[this.data.rowIndex];if(t){let s=0;i.cells=e.map(((e,i)=>{if(this.options.excludeColumns.includes(i)||this.dt.columns.settings[i].hidden)return e;const n=this.dt.columns.settings[i].type||this.dt.options.type,a=t[s++];let o;if(\"number\"===n)o={data:parseFloat(a)};else if(\"boolean\"===n)o=[\"\",\"false\",\"0\"].includes(a)?{data:!1,text:\"false\",order:0}:{data:!0,text:\"true\",order:1};else if(\"html\"===n)o={data:[{nodeName:\"#text\",data:a}],text:a,order:a};else if(\"string\"===n)o={data:a};else if(\"date\"===n){const t=this.dt.columns.settings[i].format||this.dt.options.format;o={data:a,order:X(String(a),t)}}else o={data:a};return o}))}const a=i.cells.map((t=>n(t)));this.data={},this.dt.update(!0),this.closeModal(),this.editing=!1,this.dt.emit(\"editable.save.row\",a,s,e)}openModal(){this.modalDOM&&document.body.appendChild(this.modalDOM)}closeModal(){this.editing&&this.modalDOM&&(document.body.removeChild(this.modalDOM),this.modalDOM=this.editing=this.editingRow=this.editingCell=!1)}removeRow(t){if(!t||\"TR\"!==t.nodeName||this.editing)return;const e=parseInt(t.dataset.index,10);this.dt.rows.remove(e),this.closeMenu()}updateMenu(){const t=window.scrollX||window.pageXOffset,e=window.scrollY||window.pageYOffset;this.rect=this.wrapperDOM.getBoundingClientRect(),this.limits={x:window.innerWidth+t-this.rect.width,y:window.innerHeight+e-this.rect.height}}dismissMenu(t){const e=t.target;if(!(e instanceof Element)||this.wrapperDOM.contains(e))return;let s=!0;if(this.editing){const t=l(this.options.classes.input);s=!e.matches(`input${t}[type=text]`)}s&&this.closeMenu()}openMenu(){if(this.editing&&this.data&&this.editingCell){const t=l(this.options.classes.input),e=this.modalDOM?this.modalDOM.querySelector(`input${t}[type=text]`):this.dt.wrapperDOM.querySelector(`input${t}[type=text]`);this.saveCell(e.value)}document.body.appendChild(this.containerDOM),this.menuOpen=!0,this.dt.emit(\"editable.context.open\")}closeMenu(){this.menuOpen&&(this.menuOpen=!1,document.body.removeChild(this.containerDOM),this.dt.emit(\"editable.context.close\"))}destroy(){this.dt.dom.removeEventListener(this.options.clickEvent,this.events.click),this.dt.dom.removeEventListener(\"contextmenu\",this.events.context),document.removeEventListener(\"click\",this.events.dismissMenu),document.removeEventListener(\"keydown\",this.events.keydown),window.removeEventListener(\"resize\",this.events.reset),window.removeEventListener(\"scroll\",this.events.reset),document.body.contains(this.containerDOM)&&document.body.removeChild(this.containerDOM),this.options.inline&&(this.dt.options.rowRender=this.originalRowRender),this.initialized=!1}rowRender(t,e,s){if(!this.data||this.data.rowIndex!==s)return e;if(this.editingCell){e.childNodes[function(t,e){let s=t,i=0;for(;i{const n=o(i,this.dt.columns.settings),r=t[n];if(!this.options.excludeColumns.includes(n)){e.childNodes[i].childNodes=[{nodeName:\"INPUT\",attributes:{type:\"text\",value:a(r.text||String(r.data)||\"\"),class:this.options.classes.input}}]}}));return e}}const ft=function(t,e={}){const s=new pt(t,e);return t.initialized?s.init():t.on(\"datatable.init\",(()=>s.init())),s},mt={classes:{button:\"datatable-column-filter-button\",menu:\"datatable-column-filter-menu\",container:\"datatable-column-filter-container\",wrapper:\"datatable-column-filter-wrapper\"},labels:{button:\"Filter columns within the table\"},hiddenColumns:[]};class gt{addedButtonDOM;menuOpen;buttonDOM;dt;events;initialized;options;menuDOM;containerDOM;wrapperDOM;limits;rect;event;constructor(t,e={}){this.dt=t,this.options={...mt,...e}}init(){if(this.initialized)return;const t=l(this.options.classes.button);let e=this.dt.wrapperDOM.querySelector(t);if(!e){e=s(\"button\",{class:this.options.classes.button,html:\"▦\"});const t=l(this.dt.options.classes.search),i=this.dt.wrapperDOM.querySelector(t);i?i.appendChild(e):this.dt.wrapperDOM.appendChild(e),this.addedButtonDOM=!0}this.buttonDOM=e,this.containerDOM=s(\"div\",{id:this.options.classes.container}),this.wrapperDOM=s(\"div\",{class:this.options.classes.wrapper}),this.menuDOM=s(\"ul\",{class:this.options.classes.menu,html:this.dt.data.headings.map(((t,e)=>{const s=this.dt.columns.settings[e];return this.options.hiddenColumns.includes(e)?\"\":`
  • \\n \\n \\n
  • `})).join(\"\")}),this.wrapperDOM.appendChild(this.menuDOM),this.containerDOM.appendChild(this.wrapperDOM),this._measureSpace(),this._bind(),this.initialized=!0}dismiss(){this.addedButtonDOM&&this.buttonDOM.parentElement&&this.buttonDOM.parentElement.removeChild(this.buttonDOM),document.removeEventListener(\"click\",this.events.click)}_bind(){this.events={click:this._click.bind(this)},document.addEventListener(\"click\",this.events.click)}_openMenu(){document.body.appendChild(this.containerDOM),this._measureSpace(),this.menuOpen=!0,this.dt.emit(\"columnFilter.menu.open\")}_closeMenu(){this.menuOpen&&(this.menuOpen=!1,document.body.removeChild(this.containerDOM),this.dt.emit(\"columnFilter.menu.close\"))}_measureSpace(){const t=window.scrollX||window.pageXOffset,e=window.scrollY||window.pageYOffset;this.rect=this.wrapperDOM.getBoundingClientRect(),this.limits={x:window.innerWidth+t-this.rect.width,y:window.innerHeight+e-this.rect.height}}_click(t){const e=t.target;if(e instanceof Element)if(this.event=t,this.buttonDOM.contains(e)){if(t.preventDefault(),this.menuOpen)return void this._closeMenu();this._openMenu();let e=t.pageX,s=t.pageY;e>this.limits.x&&(e-=this.rect.width),s>this.limits.y&&(s-=this.rect.height),this.wrapperDOM.style.top=`${s}px`,this.wrapperDOM.style.left=`${e}px`}else if(this.menuDOM.contains(e)){const t=l(this.options.classes.menu),s=e.closest(`${t} > li`);if(!s)return;const i=s.querySelector(\"input[type=checkbox]\");i.contains(e)||(i.checked=!i.checked);const n=Number(s.dataset.column);i.checked?this.dt.columns.show([n]):this.dt.columns.hide([n])}else this.menuOpen&&this._closeMenu()}}const bt=function(t,e={}){const s=new gt(t,e);return t.initialized?s.init():t.on(\"datatable.init\",(()=>s.init())),s};export{at as DataTable,bt as addColumnFilter,ot as convertCSV,rt as convertJSON,s as createElement,lt as exportCSV,dt as exportJSON,ct as exportSQL,ht as exportTXT,e as isJson,t as isObject,ft as makeEditable};\n//# sourceMappingURL=module.js.map\n","/*!\n * @preserve\n *\n * ++++++++++++++++++++++++++++++++++++++\n * Add to Calendar TimeZones iCal Library\n * ++++++++++++++++++++++++++++++++++++++\n *\n * Version: 1.8.3\n * Creator: Jens Kuerschner (https://jenskuerschner.de)\n * Project: https://github.com/add2cal/timezones-ical-library\n * License: Apache-2.0\n *\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst tzlibVersion = '1.8.3';\nconst tzlibZonesDB = {\n Zulu: ['Etc/UTC', 0],\n WET: ['', 1],\n 'W-SU': ['Europe/Moscow', 2],\n Universal: ['Etc/UTC', 0],\n UTC: ['Etc/UTC', 0],\n UCT: ['Etc/UTC', 0],\n Turkey: ['Europe/Istanbul', 3],\n Singapore: ['Asia/Singapore', 4],\n ROK: ['Asia/Seoul', 5],\n ROC: ['Asia/Taipei', 6],\n Portugal: ['Europe/Lisbon', 7],\n Poland: ['Europe/Warsaw', 8],\n PST8PDT: ['', 9],\n PRC: ['Asia/Shanghai', 6],\n Navajo: ['America/Denver', 10],\n NZ: ['Pacific/Auckland', 11],\n 'NZ-CHAT': ['Pacific/Chatham', 12],\n MST7MDT: ['', 10],\n MST: ['', 13],\n MET: ['', 14],\n Libya: ['Africa/Tripoli', 15],\n Kwajalein: ['Pacific/Kwajalein', 16],\n Japan: ['Asia/Tokyo', 17],\n Jamaica: ['America/Jamaica', 18],\n Israel: ['Asia/Jerusalem', 19],\n Iran: ['Asia/Tehran', 20],\n Iceland: ['Africa/Abidjan', 21],\n Hongkong: ['Asia/Hong_Kong', 22],\n HST: ['', 23],\n Greenwich: ['Etc/GMT', 24],\n GMT0: ['Etc/GMT', 24],\n GMT: ['Etc/GMT', 24],\n 'GMT-0': ['Etc/GMT', 24],\n 'GMT+0': ['Etc/GMT', 24],\n GB: ['Europe/London', 25],\n 'GB-Eire': ['Europe/London', 25],\n Eire: ['Europe/Dublin', 26],\n Egypt: ['Africa/Cairo', 27],\n EST5EDT: ['', 28],\n EST: ['', 18],\n EET: ['', 29],\n Cuba: ['America/Havana', 30],\n CST6CDT: ['', 31],\n CET: ['', 8],\n US: {\n Samoa: ['Pacific/Pago_Pago', 32],\n Pacific: ['America/Los_Angeles', 9],\n Mountain: ['America/Denver', 10],\n Michigan: ['America/Detroit', 28],\n 'Indiana-Starke': ['America/Indiana/Knox', 31],\n Hawaii: ['Pacific/Honolulu', 23],\n Eastern: ['America/New_York', 28],\n 'East-Indiana': ['America/Indiana/Indianapolis', 28],\n Central: ['America/Chicago', 31],\n Arizona: ['America/Phoenix', 13],\n Aleutian: ['America/Adak', 33],\n Alaska: ['America/Anchorage', 34],\n },\n Pacific: {\n Yap: ['Pacific/Port_Moresby', 35],\n Wallis: ['Pacific/Tarawa', 16],\n Wake: ['Pacific/Tarawa', 16],\n Truk: ['Pacific/Port_Moresby', 35],\n Tongatapu: ['', 36],\n Tarawa: ['', 16],\n Tahiti: ['', 37],\n Samoa: ['Pacific/Pago_Pago', 32],\n Saipan: ['Pacific/Guam', 38],\n Rarotonga: ['', 37],\n Port_Moresby: ['', 35],\n Ponape: ['Pacific/Guadalcanal', 39],\n Pohnpei: ['Pacific/Guadalcanal', 39],\n Pitcairn: ['', 40],\n Palau: ['', 41],\n Pago_Pago: ['', 32],\n Noumea: ['', 39],\n Norfolk: ['', 42],\n Niue: ['', 43],\n Nauru: ['', 16],\n Midway: ['Pacific/Pago_Pago', 32],\n Marquesas: ['', 44],\n Majuro: ['Pacific/Tarawa', 16],\n Kwajalein: ['', 16],\n Kosrae: ['', 39],\n Kiritimati: ['', 45],\n Kanton: ['', 36],\n Johnston: ['Pacific/Honolulu', 23],\n Honolulu: ['', 23],\n Guam: ['', 38],\n Guadalcanal: ['', 39],\n Gambier: ['', 46],\n Galapagos: ['', 47],\n Funafuti: ['Pacific/Tarawa', 16],\n Fiji: ['', 16],\n Fakaofo: ['', 36],\n Enderbury: ['Pacific/Kanton', 36],\n Efate: ['', 39],\n Easter: ['', 48],\n Chuuk: ['Pacific/Port_Moresby', 35],\n Chatham: ['', 12],\n Bougainville: ['', 39],\n Auckland: ['', 11],\n Apia: ['', 36],\n },\n Mexico: {\n General: ['America/Mexico_City', 49],\n BajaSur: ['America/Mazatlan', 13],\n BajaNorte: ['America/Tijuana', 9],\n },\n Indian: {\n Reunion: ['Asia/Dubai', 50],\n Mayotte: ['Africa/Nairobi', 51],\n Mauritius: ['', 50],\n Maldives: ['', 52],\n Mahe: ['Asia/Dubai', 50],\n Kerguelen: ['Indian/Maldives', 52],\n Comoro: ['Africa/Nairobi', 51],\n Cocos: ['Asia/Yangon', 53],\n Christmas: ['Asia/Bangkok', 54],\n Chagos: ['', 55],\n Antananarivo: ['Africa/Nairobi', 51],\n },\n Europe: {\n Zurich: ['', 8],\n Zaporozhye: ['Europe/Kyiv', 56],\n Zagreb: ['Europe/Belgrade', 8],\n Warsaw: ['', 8],\n Volgograd: ['', 2],\n Vilnius: ['', 29],\n Vienna: ['', 8],\n Vatican: ['Europe/Rome', 8],\n Vaduz: ['Europe/Zurich', 8],\n Uzhgorod: ['Europe/Kyiv', 56],\n Ulyanovsk: ['', 50],\n Tiraspol: ['Europe/Chisinau', 57],\n Tirane: ['', 8],\n Tallinn: ['', 29],\n Stockholm: ['Europe/Berlin', 8],\n Sofia: ['', 29],\n Skopje: ['Europe/Belgrade', 8],\n Simferopol: ['', 2],\n Saratov: ['', 50],\n Sarajevo: ['Europe/Belgrade', 8],\n San_Marino: ['Europe/Rome', 8],\n Samara: ['', 50],\n Rome: ['', 8],\n Riga: ['', 29],\n Prague: ['', 8],\n Podgorica: ['Europe/Belgrade', 8],\n Paris: ['', 8],\n Oslo: ['Europe/Berlin', 8],\n Nicosia: ['Asia/Nicosia', 56],\n Moscow: ['', 2],\n Monaco: ['Europe/Paris', 8],\n Minsk: ['', 3],\n Mariehamn: ['Europe/Helsinki', 29],\n Malta: ['', 8],\n Madrid: ['', 8],\n Luxembourg: ['Europe/Brussels', 8],\n London: ['', 25],\n Ljubljana: ['Europe/Belgrade', 8],\n Lisbon: ['', 7],\n Kyiv: ['', 56],\n Kirov: ['', 2],\n Kiev: ['Europe/Kyiv', 56],\n Kaliningrad: ['', 15],\n Jersey: ['Europe/London', 25],\n Istanbul: ['', 3],\n Isle_of_Man: ['Europe/London', 25],\n Helsinki: ['', 29],\n Guernsey: ['Europe/London', 25],\n Gibraltar: ['', 8],\n Dublin: ['', 26],\n Copenhagen: ['Europe/Berlin', 8],\n Chisinau: ['', 57],\n Busingen: ['Europe/Zurich', 8],\n Budapest: ['', 8],\n Bucharest: ['', 29],\n Brussels: ['', 8],\n Bratislava: ['Europe/Prague', 8],\n Berlin: ['', 8],\n Belgrade: ['', 8],\n Belfast: ['Europe/London', 25],\n Athens: ['', 29],\n Astrakhan: ['', 50],\n Andorra: ['', 8],\n Amsterdam: ['Europe/Brussels', 8],\n },\n Etc: {\n Zulu: ['Etc/UTC', 0],\n Universal: ['Etc/UTC', 0],\n UTC: ['', 0],\n UCT: ['Etc/UTC', 0],\n Greenwich: ['Etc/GMT', 24],\n GMT0: ['Etc/GMT', 24],\n GMT: ['', 24],\n 'GMT-9': ['', 58],\n 'GMT-8': ['', 59],\n 'GMT-7': ['', 60],\n 'GMT-6': ['', 61],\n 'GMT-5': ['', 62],\n 'GMT-4': ['', 63],\n 'GMT-3': ['', 64],\n 'GMT-2': ['', 65],\n 'GMT-14': ['', 66],\n 'GMT-13': ['', 67],\n 'GMT-12': ['', 68],\n 'GMT-11': ['', 69],\n 'GMT-10': ['', 70],\n 'GMT-1': ['', 71],\n 'GMT-0': ['Etc/GMT', 24],\n 'GMT+9': ['', 72],\n 'GMT+8': ['', 73],\n 'GMT+7': ['', 74],\n 'GMT+6': ['', 47],\n 'GMT+5': ['', 75],\n 'GMT+4': ['', 76],\n 'GMT+3': ['', 77],\n 'GMT+2': ['', 78],\n 'GMT+12': ['', 79],\n 'GMT+11': ['', 80],\n 'GMT+10': ['', 81],\n 'GMT+1': ['', 82],\n 'GMT+0': ['Etc/GMT', 24],\n },\n Chile: { EasterIsland: ['Pacific/Easter', 48], Continental: ['America/Santiago', 83] },\n Canada: {\n Yukon: ['America/Whitehorse', 13],\n Saskatchewan: ['America/Regina', 49],\n Pacific: ['America/Vancouver', 9],\n Newfoundland: ['America/St_Johns', 84],\n Mountain: ['America/Edmonton', 10],\n Eastern: ['America/Toronto', 28],\n Central: ['America/Winnipeg', 31],\n Atlantic: ['America/Halifax', 85],\n },\n Brazil: {\n West: ['America/Manaus', 86],\n East: ['America/Sao_Paulo', 87],\n DeNoronha: ['America/Noronha', 88],\n Acre: ['America/Rio_Branco', 89],\n },\n Australia: {\n Yancowinna: ['Australia/Broken_Hill', 90],\n West: ['Australia/Perth', 91],\n Victoria: ['Australia/Melbourne', 92],\n Tasmania: ['Australia/Hobart', 93],\n Sydney: ['', 92],\n South: ['Australia/Adelaide', 90],\n Queensland: ['Australia/Brisbane', 94],\n Perth: ['', 91],\n North: ['Australia/Darwin', 95],\n NSW: ['Australia/Sydney', 92],\n Melbourne: ['', 92],\n Lord_Howe: ['', 96],\n Lindeman: ['', 94],\n LHI: ['Australia/Lord_Howe', 96],\n Hobart: ['', 93],\n Eucla: ['', 97],\n Darwin: ['', 95],\n Currie: ['Australia/Hobart', 93],\n Canberra: ['Australia/Sydney', 92],\n Broken_Hill: ['', 90],\n Brisbane: ['', 94],\n Adelaide: ['', 90],\n ACT: ['Australia/Sydney', 92],\n },\n Atlantic: {\n Stanley: ['', 77],\n St_Helena: ['Africa/Abidjan', 21],\n South_Georgia: ['', 78],\n Reykjavik: ['Africa/Abidjan', 21],\n Madeira: ['', 1],\n Jan_Mayen: ['Europe/Berlin', 8],\n Faroe: ['', 1],\n Faeroe: ['Atlantic/Faroe', 1],\n Cape_Verde: ['', 98],\n Canary: ['', 1],\n Bermuda: ['', 85],\n Azores: ['', 99],\n },\n Asia: {\n Yerevan: ['', 50],\n Yekaterinburg: ['', 52],\n Yangon: ['', 53],\n Yakutsk: ['', 41],\n Vladivostok: ['', 35],\n Vientiane: ['Asia/Bangkok', 54],\n 'Ust-Nera': ['', 35],\n Urumqi: ['', 55],\n Ulan_Bator: ['Asia/Ulaanbaatar', 4],\n Ulaanbaatar: ['', 4],\n Ujung_Pandang: ['Asia/Makassar', 100],\n Tomsk: ['', 54],\n Tokyo: ['', 17],\n Thimphu: ['', 55],\n Thimbu: ['Asia/Thimphu', 55],\n Tel_Aviv: ['Asia/Jerusalem', 19],\n Tehran: ['', 20],\n Tbilisi: ['', 50],\n Tashkent: ['', 52],\n Taipei: ['', 6],\n Srednekolymsk: ['', 39],\n Singapore: ['', 4],\n Shanghai: ['', 6],\n Seoul: ['', 5],\n Samarkand: ['', 52],\n Sakhalin: ['', 39],\n Saigon: ['Asia/Ho_Chi_Minh', 54],\n Riyadh: ['', 3],\n Rangoon: ['Asia/Yangon', 53],\n Qyzylorda: ['', 52],\n Qostanay: ['', 52],\n Qatar: ['', 3],\n Pyongyang: ['', 5],\n Pontianak: ['', 101],\n Phnom_Penh: ['Asia/Bangkok', 54],\n Oral: ['', 52],\n Omsk: ['', 55],\n Novosibirsk: ['', 54],\n Novokuznetsk: ['', 54],\n Nicosia: ['', 56],\n Muscat: ['Asia/Dubai', 50],\n Manila: ['', 102],\n Makassar: ['', 100],\n Magadan: ['', 39],\n Macau: ['', 6],\n Macao: ['Asia/Macau', 6],\n Kuwait: ['Asia/Riyadh', 3],\n Kuching: ['', 4],\n Kuala_Lumpur: ['Asia/Singapore', 4],\n Krasnoyarsk: ['', 54],\n Kolkata: ['', 103],\n Khandyga: ['', 41],\n Katmandu: ['Asia/Kathmandu', 104],\n Kathmandu: ['', 104],\n Kashgar: ['Asia/Urumqi', 55],\n Karachi: ['', 105],\n Kamchatka: ['', 16],\n Kabul: ['', 106],\n Jerusalem: ['', 19],\n Jayapura: ['', 107],\n Jakarta: ['', 101],\n Istanbul: ['Europe/Istanbul', 3],\n Irkutsk: ['', 4],\n Hovd: ['', 54],\n Hong_Kong: ['', 22],\n Ho_Chi_Minh: ['', 54],\n Hebron: ['', 108],\n Harbin: ['Asia/Shanghai', 6],\n Gaza: ['', 108],\n Famagusta: ['', 29],\n Dushanbe: ['', 52],\n Dubai: ['', 50],\n Dili: ['', 41],\n Dhaka: ['', 55],\n Damascus: ['', 3],\n Dacca: ['Asia/Dhaka', 55],\n Colombo: ['', 109],\n Chungking: ['Asia/Shanghai', 6],\n Chongqing: ['Asia/Shanghai', 6],\n Choibalsan: ['', 4],\n Chita: ['', 41],\n Calcutta: ['Asia/Kolkata', 103],\n Brunei: ['Asia/Kuching', 4],\n Bishkek: ['', 55],\n Beirut: ['', 110],\n Barnaul: ['', 54],\n Bangkok: ['', 54],\n Baku: ['', 50],\n Bahrain: ['Asia/Qatar', 3],\n Baghdad: ['', 3],\n Atyrau: ['', 52],\n Ashkhabad: ['Asia/Ashgabat', 52],\n Ashgabat: ['', 52],\n Aqtobe: ['', 52],\n Aqtau: ['', 52],\n Anadyr: ['', 16],\n Amman: ['', 3],\n Almaty: ['', 52],\n Aden: ['Asia/Riyadh', 3],\n },\n Arctic: { Longyearbyen: ['Europe/Berlin', 8] },\n Antarctica: {\n Vostok: ['', 52],\n Troll: ['', 111],\n Syowa: ['Asia/Riyadh', 3],\n South_Pole: ['Pacific/Auckland', 11],\n Rothera: ['', 87],\n Palmer: ['', 77],\n McMurdo: ['Pacific/Auckland', 11],\n Mawson: ['', 52],\n Macquarie: ['', 92],\n DumontDUrville: ['Pacific/Port_Moresby', 35],\n Davis: ['', 54],\n Casey: ['', 4],\n },\n America: {\n Yellowknife: ['America/Edmonton', 10],\n Yakutat: ['', 34],\n Winnipeg: ['', 31],\n Whitehorse: ['', 13],\n Virgin: ['America/Puerto_Rico', 112],\n Vancouver: ['', 9],\n Tortola: ['America/Puerto_Rico', 112],\n Toronto: ['', 28],\n Tijuana: ['', 9],\n Thunder_Bay: ['America/Toronto', 28],\n Thule: ['', 85],\n Tegucigalpa: ['', 49],\n Swift_Current: ['', 49],\n St_Vincent: ['America/Puerto_Rico', 112],\n St_Thomas: ['America/Puerto_Rico', 112],\n St_Lucia: ['America/Puerto_Rico', 112],\n St_Kitts: ['America/Puerto_Rico', 112],\n St_Johns: ['', 84],\n St_Barthelemy: ['America/Puerto_Rico', 112],\n Sitka: ['', 34],\n Shiprock: ['America/Denver', 10],\n Scoresbysund: ['', 113],\n Sao_Paulo: ['', 87],\n Santo_Domingo: ['', 112],\n Santiago: ['', 83],\n Santarem: ['', 87],\n Santa_Isabel: ['America/Tijuana', 9],\n Rosario: ['America/Argentina/Cordoba', 87],\n Rio_Branco: ['', 89],\n Resolute: ['', 114],\n Regina: ['', 49],\n Recife: ['', 87],\n Rankin_Inlet: ['', 31],\n Rainy_River: ['America/Winnipeg', 31],\n Punta_Arenas: ['', 87],\n Puerto_Rico: ['', 112],\n Porto_Velho: ['', 86],\n Porto_Acre: ['America/Rio_Branco', 89],\n Port_of_Spain: ['America/Puerto_Rico', 112],\n 'Port-au-Prince': ['', 28],\n Phoenix: ['', 13],\n Paramaribo: ['', 77],\n Pangnirtung: ['America/Iqaluit', 28],\n Panama: ['', 18],\n Ojinaga: ['', 31],\n Nuuk: ['', 115],\n Noronha: ['', 88],\n Nome: ['', 34],\n Nipigon: ['America/Toronto', 28],\n New_York: ['', 28],\n Nassau: ['America/Toronto', 28],\n Montserrat: ['America/Puerto_Rico', 112],\n Montreal: ['America/Toronto', 28],\n Montevideo: ['', 77],\n Monterrey: ['', 49],\n Moncton: ['', 85],\n Miquelon: ['', 116],\n Mexico_City: ['', 49],\n Metlakatla: ['', 34],\n Merida: ['', 49],\n Menominee: ['', 31],\n Mendoza: ['America/Argentina/Mendoza', 87],\n Mazatlan: ['', 13],\n Matamoros: ['', 31],\n Martinique: ['', 112],\n Marigot: ['America/Puerto_Rico', 112],\n Manaus: ['', 86],\n Managua: ['', 49],\n Maceio: ['', 87],\n Lower_Princes: ['America/Puerto_Rico', 112],\n Louisville: ['America/Kentucky/Louisville', 28],\n Los_Angeles: ['', 9],\n Lima: ['', 75],\n La_Paz: ['', 86],\n Kralendijk: ['America/Puerto_Rico', 112],\n Knox_IN: ['America/Indiana/Knox', 31],\n Juneau: ['', 34],\n Jujuy: ['America/Argentina/Jujuy', 87],\n Jamaica: ['', 18],\n Iqaluit: ['', 28],\n Inuvik: ['', 10],\n Indianapolis: ['America/Indiana/Indianapolis', 28],\n Hermosillo: ['', 13],\n Havana: ['', 30],\n Halifax: ['', 85],\n Guyana: ['', 76],\n Guayaquil: ['', 75],\n Guatemala: ['', 49],\n Guadeloupe: ['America/Puerto_Rico', 112],\n Grenada: ['America/Puerto_Rico', 112],\n Grand_Turk: ['', 117],\n Goose_Bay: ['', 118],\n Godthab: ['America/Nuuk', 115],\n Glace_Bay: ['', 85],\n Fortaleza: ['', 87],\n Fort_Wayne: ['America/Indiana/Indianapolis', 28],\n Fort_Nelson: ['', 13],\n Ensenada: ['America/Tijuana', 9],\n El_Salvador: ['', 49],\n Eirunepe: ['', 89],\n Edmonton: ['', 10],\n Dominica: ['America/Puerto_Rico', 112],\n Detroit: ['', 28],\n Denver: ['', 10],\n Dawson_Creek: ['', 13],\n Dawson: ['', 13],\n Danmarkshavn: ['', 21],\n Curacao: ['America/Puerto_Rico', 112],\n Cuiaba: ['', 86],\n Creston: ['America/Phoenix', 13],\n Costa_Rica: ['', 49],\n Cordoba: ['America/Argentina/Cordoba', 87],\n Coral_Harbour: ['America/Panama', 18],\n Ciudad_Juarez: ['', 10],\n Chihuahua: ['', 49],\n Chicago: ['', 31],\n Cayman: ['America/Panama', 18],\n Cayenne: ['', 77],\n Catamarca: ['America/Argentina/Catamarca', 87],\n Caracas: ['', 76],\n Cancun: ['', 18],\n Campo_Grande: ['', 86],\n Cambridge_Bay: ['', 10],\n Buenos_Aires: ['America/Argentina/Buenos_Aires', 87],\n Boise: ['', 10],\n Bogota: ['', 75],\n Boa_Vista: ['', 86],\n 'Blanc-Sablon': ['America/Puerto_Rico', 112],\n Belize: ['', 49],\n Belem: ['', 87],\n Barbados: ['', 112],\n Bahia_Banderas: ['', 49],\n Bahia: ['', 87],\n Atka: ['America/Adak', 33],\n Atikokan: ['America/Panama', 18],\n Asuncion: ['', 119],\n Aruba: ['America/Puerto_Rico', 112],\n Araguaina: ['', 87],\n Antigua: ['America/Puerto_Rico', 112],\n Anguilla: ['America/Puerto_Rico', 112],\n Anchorage: ['', 34],\n Adak: ['', 33],\n North_Dakota: { New_Salem: ['', 31], Center: ['', 31], Beulah: ['', 31] },\n Kentucky: { Monticello: ['', 28], Louisville: ['', 28] },\n Indiana: {\n Winamac: ['', 117],\n Vincennes: ['', 28],\n Vevay: ['', 28],\n Tell_City: ['', 31],\n Petersburg: ['', 28],\n Marengo: ['', 28],\n Knox: ['', 31],\n Indianapolis: ['', 28],\n },\n Argentina: {\n Ushuaia: ['', 87],\n Tucuman: ['', 87],\n San_Luis: ['', 87],\n San_Juan: ['', 87],\n Salta: ['', 87],\n Rio_Gallegos: ['', 87],\n Mendoza: ['', 87],\n La_Rioja: ['', 87],\n Jujuy: ['', 87],\n Cordoba: ['', 87],\n ComodRivadavia: ['America/Argentina/Catamarca', 87],\n Catamarca: ['', 87],\n Buenos_Aires: ['', 87],\n },\n },\n Africa: {\n Windhoek: ['', 120],\n Tunis: ['', 121],\n Tripoli: ['', 15],\n Timbuktu: ['Africa/Abidjan', 21],\n Sao_Tome: ['', 21],\n 'Porto-Novo': ['Africa/Lagos', 122],\n Ouagadougou: ['Africa/Abidjan', 21],\n Nouakchott: ['Africa/Abidjan', 21],\n Niamey: ['Africa/Lagos', 122],\n Ndjamena: ['', 122],\n Nairobi: ['', 51],\n Monrovia: ['', 21],\n Mogadishu: ['Africa/Nairobi', 51],\n Mbabane: ['Africa/Johannesburg', 123],\n Maseru: ['Africa/Johannesburg', 123],\n Maputo: ['', 120],\n Malabo: ['Africa/Lagos', 122],\n Lusaka: ['Africa/Maputo', 120],\n Lubumbashi: ['Africa/Maputo', 120],\n Luanda: ['Africa/Lagos', 122],\n Lome: ['Africa/Abidjan', 21],\n Libreville: ['Africa/Lagos', 122],\n Lagos: ['', 122],\n Kinshasa: ['Africa/Lagos', 122],\n Kigali: ['Africa/Maputo', 120],\n Khartoum: ['', 120],\n Kampala: ['Africa/Nairobi', 51],\n Juba: ['', 120],\n Johannesburg: ['', 123],\n Harare: ['Africa/Maputo', 120],\n Gaborone: ['Africa/Maputo', 120],\n Freetown: ['Africa/Abidjan', 21],\n El_Aaiun: ['', 124],\n Douala: ['Africa/Lagos', 122],\n Djibouti: ['Africa/Nairobi', 51],\n Dar_es_Salaam: ['Africa/Nairobi', 51],\n Dakar: ['Africa/Abidjan', 21],\n Conakry: ['Africa/Abidjan', 21],\n Ceuta: ['', 8],\n Casablanca: ['', 124],\n Cairo: ['', 27],\n Bujumbura: ['Africa/Maputo', 120],\n Brazzaville: ['Africa/Lagos', 122],\n Blantyre: ['Africa/Maputo', 120],\n Bissau: ['', 21],\n Banjul: ['Africa/Abidjan', 21],\n Bangui: ['Africa/Lagos', 122],\n Bamako: ['Africa/Abidjan', 21],\n Asmera: ['Africa/Nairobi', 51],\n Asmara: ['Africa/Nairobi', 51],\n Algiers: ['', 121],\n Addis_Ababa: ['Africa/Nairobi', 51],\n Accra: ['Africa/Abidjan', 21],\n Abidjan: ['', 21],\n },\n};\nconst tzlibZonesDetailsDB = [\n '20240205T192835ZUTC+0000+000019700101T000000',\n '20240205T192834ZWEST+0000+010019700329T010000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUWET+0100+000019701025T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192834ZMSK+0300+030019700101T000000',\n '20240205T192834Z+03+0300+030019700101T000000',\n '20240205T192834Z+08+0800+080019700101T000000',\n '20240205T192834ZKST+0900+090019700101T000000',\n '20240205T192834ZCST+0800+080019700101T000000',\n '20240205T192834ZWET+0100+000019701025T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SUWEST+0000+010019700329T010000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU',\n '20240205T192834ZCEST+0100+020019700329T020000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUCET+0200+010019701025T030000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192834ZPDT-0800-070019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUPST-0700-080019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU',\n '20240205T192834ZMDT-0700-060019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUMST-0600-070019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU',\n '20240205T192834ZNZDT+1200+130019700927T020000FREQ=YEARLY;BYMONTH=9;BYDAY=-1SUNZST+1300+120019700405T030000FREQ=YEARLY;BYMONTH=4;BYDAY=1SU',\n '20240205T192834Z+1345+1245+134519700927T024500FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU+1245+1345+124519700405T034500FREQ=YEARLY;BYMONTH=4;BYDAY=1SU',\n '20240205T192834ZMST-0700-070019700101T000000',\n '20240205T192834ZMEST+0100+020019700329T020000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUMET+0200+010019701025T030000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192834ZEET+0200+020019700101T000000',\n '20240205T192834Z+12+1200+120019700101T000000',\n '20240205T192834ZJST+0900+090019700101T000000',\n '20240205T192834ZEST-0500-050019700101T000000',\n '20240205T192834ZIDT+0200+030019700327T020000FREQ=YEARLY;BYMONTH=3;BYDAY=-1FRIST+0300+020019701025T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192834Z+0330+0330+033019700101T000000',\n '20240205T192834ZGMT+0000+000019700101T000000',\n '20240205T192834ZHKT+0800+080019700101T000000',\n '20240205T192834ZHST-1000-100019700101T000000',\n '20240205T192835ZGMT+0000+000019700101T000000',\n '20240205T192834ZBST+0000+010019700329T010000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUGMT+0100+000019701025T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192834ZIST+0000+010019700329T010000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUGMT+0100+000019701025T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192834ZEEST+0200+030019700424T000000FREQ=YEARLY;BYMONTH=4;BYDAY=-1FREET+0300+020019701030T000000FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR',\n '20240205T192834ZEDT-0500-040019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUEST-0400-050019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU',\n '20240205T192834ZEEST+0200+030019700329T030000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUEET+0300+020019701025T040000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192834ZCST-0400-050019701101T010000FREQ=YEARLY;BYMONTH=11;BYDAY=1SUCDT-0500-040019700308T000000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU',\n '20240205T192834ZCDT-0600-050019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUCST-0500-060019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU',\n '20240205T192834ZSST-1100-110019700101T000000',\n '20240205T192834ZHDT-1000-090019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUHST-0900-100019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU',\n '20240205T192834ZAKDT-0900-080019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUAKST-0800-090019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU',\n '20240205T192834Z+10+1000+100019700101T000000',\n '20240205T192834Z+13+1300+130019700101T000000',\n '20240205T192834Z-10-1000-100019700101T000000',\n '20240205T192834ZChST+1000+100019700101T000000',\n '20240205T192834Z+11+1100+110019700101T000000',\n '20240205T192834Z-08-0800-080019700101T000000',\n '20240205T192834Z+09+0900+090019700101T000000',\n '20240205T192834Z+12+1100+120019701004T020000FREQ=YEARLY;BYMONTH=10;BYDAY=1SU+11+1200+110019700405T030000FREQ=YEARLY;BYMONTH=4;BYDAY=1SU',\n '20240205T192834Z-11-1100-110019700101T000000',\n '20240205T192834Z-0930-0930-093019700101T000000',\n '20240205T192834Z+14+1400+140019700101T000000',\n '20240205T192834Z-09-0900-090019700101T000000',\n '20240205T192835Z-06-0600-060019700101T000000',\n '20240205T192835Z-06-0500-060019700404T220000FREQ=YEARLY;BYMONTH=4;BYDAY=1SA-05-0600-050019700905T220000FREQ=YEARLY;BYMONTH=9;BYDAY=1SA',\n '20240205T192834ZCST-0600-060019700101T000000',\n '20240205T192834Z+04+0400+040019700101T000000',\n '20240205T192834ZEAT+0300+030019700101T000000',\n '20240205T192834Z+05+0500+050019700101T000000',\n '20240205T192834Z+0630+0630+063019700101T000000',\n '20240205T192834Z+07+0700+070019700101T000000',\n '20240205T192834Z+06+0600+060019700101T000000',\n '20240205T192834ZEET+0300+020019701025T040000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SUEEST+0200+030019700329T030000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU',\n '20240205T192834ZEEST+0200+030019700329T020000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUEET+0300+020019701025T030000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192835Z+09+0900+090019700101T000000',\n '20240205T192835Z+08+0800+080019700101T000000',\n '20240205T192835Z+07+0700+070019700101T000000',\n '20240205T192835Z+06+0600+060019700101T000000',\n '20240205T192835Z+05+0500+050019700101T000000',\n '20240205T192835Z+04+0400+040019700101T000000',\n '20240205T192835Z+03+0300+030019700101T000000',\n '20240205T192835Z+02+0200+020019700101T000000',\n '20240205T192835Z+14+1400+140019700101T000000',\n '20240205T192835Z+13+1300+130019700101T000000',\n '20240205T192835Z+12+1200+120019700101T000000',\n '20240205T192835Z+11+1100+110019700101T000000',\n '20240205T192835Z+10+1000+100019700101T000000',\n '20240205T192835Z+01+0100+010019700101T000000',\n '20240205T192835Z-09-0900-090019700101T000000',\n '20240205T192835Z-08-0800-080019700101T000000',\n '20240205T192835Z-07-0700-070019700101T000000',\n '20240205T192835Z-05-0500-050019700101T000000',\n '20240205T192835Z-04-0400-040019700101T000000',\n '20240205T192835Z-03-0300-030019700101T000000',\n '20240205T192835Z-02-0200-020019700101T000000',\n '20240205T192835Z-12-1200-120019700101T000000',\n '20240205T192835Z-11-1100-110019700101T000000',\n '20240205T192835Z-10-1000-100019700101T000000',\n '20240205T192835Z-01-0100-010019700101T000000',\n '20240205T192834Z-04-0300-040019700405T000000FREQ=YEARLY;BYMONTH=4;BYDAY=1SU-03-0400-030019700906T000000FREQ=YEARLY;BYMONTH=9;BYDAY=1SU',\n '20240205T192834ZNST-0230-033019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SUNDT-0330-023019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU',\n '20240205T192834ZADT-0400-030019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SUAST-0300-040019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU',\n '20240205T192834Z-04-0400-040019700101T000000',\n '20240205T192834Z-03-0300-030019700101T000000',\n '20240205T192834Z-02-0200-020019700101T000000',\n '20240205T192834Z-05-0500-050019700101T000000',\n '20240205T192834ZACST+1030+093019700405T030000FREQ=YEARLY;BYMONTH=4;BYDAY=1SUACDT+0930+103019701004T020000FREQ=YEARLY;BYMONTH=10;BYDAY=1SU',\n '20240205T192834ZAWST+0800+080019700101T000000',\n '20240205T192834ZAEST+1100+100019700405T030000FREQ=YEARLY;BYMONTH=4;BYDAY=1SUAEDT+1000+110019701004T020000FREQ=YEARLY;BYMONTH=10;BYDAY=1SU',\n '20240205T192834ZAEDT+1000+110019701004T020000FREQ=YEARLY;BYMONTH=10;BYDAY=1SUAEST+1100+100019700405T030000FREQ=YEARLY;BYMONTH=4;BYDAY=1SU',\n '20240205T192834ZAEST+1000+100019700101T000000',\n '20240205T192834ZACST+0930+093019700101T000000',\n '20240205T192834Z+1030+1100+103019700405T020000FREQ=YEARLY;BYMONTH=4;BYDAY=1SU+11+1030+110019701004T020000FREQ=YEARLY;BYMONTH=10;BYDAY=1SU',\n '20240205T192834Z+0845+0845+084519700101T000000',\n '20240205T192834Z-01-0100-010019700101T000000',\n '20240205T192834Z+00-0100+000019700329T000000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU-01+0000-010019701025T010000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192834ZWITA+0800+080019700101T000000',\n '20240205T192834ZWIB+0700+070019700101T000000',\n '20240205T192834ZPST+0800+080019700101T000000',\n '20240205T192834ZIST+0530+053019700101T000000',\n '20240205T192834Z+0545+0545+054519700101T000000',\n '20240205T192834ZPKT+0500+050019700101T000000',\n '20240205T192834Z+0430+0430+043019700101T000000',\n '20240205T192834ZWIT+0900+090019700101T000000',\n '20240205T192834ZEEST+0200+030019700328T020000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SAEET+0300+020019701024T020000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA',\n '20240205T192834Z+0530+0530+053019700101T000000',\n '20240205T192834ZEEST+0200+030019700329T000000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUEET+0300+020019701025T000000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192834Z+02+0000+020019700329T010000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU+00+0200+000019701025T030000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192834ZAST-0400-040019700101T000000',\n '20240205T192834Z-02-0100-020019701025T000000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU-01-0200-010019700328T230000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA',\n '20240205T192834ZCST-0500-060019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SUCDT-0600-050019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU',\n '20240205T192834Z-01-0200-010019700328T230000FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA-02-0100-020019701025T000000FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU',\n '20240205T192834Z-02-0300-020019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU-03-0200-030019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SU',\n '20240205T192834ZEST-0400-050019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SUEDT-0500-040019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU',\n '20240205T192834ZAST-0300-040019701101T020000FREQ=YEARLY;BYMONTH=11;BYDAY=1SUADT-0400-030019700308T020000FREQ=YEARLY;BYMONTH=3;BYDAY=2SU',\n '20240205T192835Z-03-0400-030019701004T000000FREQ=YEARLY;BYMONTH=10;BYDAY=1SU-04-0300-040019700322T000000FREQ=YEARLY;BYMONTH=3;BYDAY=4SU',\n '20240205T192834ZCAT+0200+020019700101T000000',\n '20240205T192834ZCET+0100+010019700101T000000',\n '20240205T192834ZWAT+0100+010019700101T000000',\n '20240205T192834ZSAST+0200+020019700101T000000',\n '20240205T192834Z+01+0100+010019700101T000000',\n];\nfunction tzlib_get_content(tzName) {\n const nameParts = tzName.split('/');\n if (\n (nameParts.length === 3 &&\n (!tzlibZonesDB[`${nameParts[0]}`] ||\n !tzlibZonesDB[`${nameParts[0]}`][`${nameParts[1]}`] ||\n !tzlibZonesDB[`${nameParts[0]}`][`${nameParts[1]}`][`${nameParts[2]}`])) ||\n (nameParts.length === 2 &&\n (!tzlibZonesDB[`${nameParts[0]}`] || !tzlibZonesDB[`${nameParts[0]}`][`${nameParts[1]}`])) ||\n (nameParts.length === 1 && !tzlibZonesDB[`${nameParts[0]}`])\n ) {\n console.error('Given timezone not valid.');\n return '';\n }\n if (nameParts.length === 3) {\n return [\n tzlibZonesDB[`${nameParts[0]}`][`${nameParts[1]}`][`${nameParts[2]}`][0],\n tzlib_enrich_data(\n tzlibZonesDetailsDB[tzlibZonesDB[`${nameParts[0]}`][`${nameParts[1]}`][`${nameParts[2]}`][1]],\n ),\n ];\n }\n if (nameParts.length === 2) {\n return [\n tzlibZonesDB[`${nameParts[0]}`][`${nameParts[1]}`][0],\n tzlib_enrich_data(tzlibZonesDetailsDB[tzlibZonesDB[`${nameParts[0]}`][`${nameParts[1]}`][1]]),\n ];\n }\n return [\n tzlibZonesDB[`${nameParts[0]}`][0],\n tzlib_enrich_data(tzlibZonesDetailsDB[tzlibZonesDB[`${nameParts[0]}`][1]]),\n ];\n}\nfunction tzlib_enrich_data(string) {\n const shortenerMap = {\n '
    ': '',\n 'TZNAME:': '',\n 'TZOFFSETFROM:': '',\n 'TZOFFSETTO:': '',\n 'DTSTART:': '',\n 'RRULE:': '',\n 'BEGIN:DAYLIGHT': '',\n 'END:DAYLIGHT': '',\n 'BEGIN:STANDARD': '',\n 'END:STANDARD': '',\n };\n for (const [key, value] of Object.entries(shortenerMap)) {\n string = string.replaceAll(value, key);\n }\n return string;\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction tzlib_get_ical_block(tzName, jsonType = false) {\n const tzBlock = tzlib_get_content(tzName);\n if (tzBlock[1] == null || tzBlock[1] == '') {\n return '';\n }\n const location = (function () {\n if (tzBlock[0] == '') {\n return tzName;\n } else {\n return tzBlock[0];\n }\n })();\n const tzidLine = 'TZID=' + location;\n const output = [\n 'BEGIN:VTIMEZONE\\r\\nTZID:' +\n location +\n '\\r\\nX-LIC-LOCATION:' +\n location +\n '\\r\\nLAST-MODIFIED:' +\n tzBlock[1].replace(/[^\\w_\\-:,;=+/
    ]/g, '').replace(/
    /g, '\\r\\n') +\n 'END:VTIMEZONE',\n tzidLine,\n ];\n if (jsonType) {\n return JSON.stringify(output);\n }\n return output;\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction tzlib_get_offset(tzName, isoDate, isoTime) {\n const tzBlock = tzlib_get_content(tzName);\n if (tzBlock[1] == null || tzBlock[1] == '') {\n return '';\n }\n if (!isoDate.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\n console.error('offset calculation failed: date misspelled [-> YYYY-MM-DD]');\n return '';\n }\n if (!isoTime.match(/^\\d{2}:\\d{2}$/)) {\n console.error('offset calculation failed: time misspelled [-> hh:mm]');\n return '';\n }\n if (!tzBlock[1].match(/BEGIN:DAYLIGHT/i)) {\n return tzBlock[1].match(/TZOFFSETTO:([+|-]\\d{4})/i)[1];\n }\n const dateString = isoDate + 'T' + isoTime + ':00';\n const date = new Date(dateString);\n const dateYear = date.getFullYear();\n const dateMonth = date.getMonth() + 1;\n const dateDay = date.getDate();\n const dateHour = date.getHours();\n const timezoneData = tzBlock[1].replace(/[^\\w_\\-:,;=+/
    ]/g, '').split('
    ');\n const tzBreakpoints = { 1: {}, 2: {} };\n let breakpointCount = 0;\n for (let i = 0; i < timezoneData.length; i++) {\n if (timezoneData[`${i}`].startsWith('TZOFFSETTO')) {\n breakpointCount++;\n tzBreakpoints[`${breakpointCount}`].offset = timezoneData[`${i}`].split(':')[1];\n }\n if (timezoneData[`${i}`].startsWith('DTSTART')) {\n tzBreakpoints[`${breakpointCount}`].hour = parseInt(timezoneData[`${i}`].substr(17, 2));\n }\n if (timezoneData[`${i}`].startsWith('RRULE')) {\n let rruleParts = timezoneData[`${i}`].split(';');\n let rruleMonth = parseInt(rruleParts[1].split('=')[1]);\n tzBreakpoints[`${breakpointCount}`].month = parseInt(rruleMonth);\n tzBreakpoints[`${breakpointCount}`].day = rruleParts[2].split('=')[1];\n }\n }\n if (tzBreakpoints[1].month > tzBreakpoints[2].month) {\n [tzBreakpoints[1], tzBreakpoints[2]] = [tzBreakpoints[2], tzBreakpoints[1]];\n }\n if (dateMonth != tzBreakpoints[1].month && dateMonth != tzBreakpoints[2].month) {\n if (dateMonth < tzBreakpoints[1].month || dateMonth > tzBreakpoints[2].month) {\n return tzBreakpoints[2].offset;\n } else {\n return tzBreakpoints[1].offset;\n }\n }\n const theCase = (function () {\n return Object.keys(tzBreakpoints).find((key) => tzBreakpoints[`${key}`].month == dateMonth);\n })();\n const helperArrayWeekdays = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n const numberDays = new Date(dateYear, dateMonth, 0).getDate();\n let weekdayCount = new Date(dateYear, dateMonth - 1, 1).getDay();\n const weekdays = { SU: {}, MO: {}, TU: {}, WE: {}, TH: {}, FR: {}, SA: {} };\n for (let d = 1; d <= numberDays; d++) {\n const occurence = Object.keys(weekdays[helperArrayWeekdays[`${weekdayCount}`]]).length + 1;\n weekdays[helperArrayWeekdays[`${weekdayCount}`]][`${occurence}`] = d;\n weekdayCount++;\n if (weekdayCount == 7) {\n weekdayCount = 0;\n }\n }\n const actualDay = (function () {\n if (tzBreakpoints[`${theCase}`].day[0] == '-') {\n const breakpointWeekday = tzBreakpoints[`${theCase}`].day.substr(2, 2);\n const dayIndex =\n Object.keys(weekdays[`${breakpointWeekday}`]).length +\n 1 -\n parseInt(tzBreakpoints[`${theCase}`].day[1]);\n return weekdays[`${breakpointWeekday}`][`${dayIndex}`];\n } else {\n const breakpointWeekday = tzBreakpoints[`${theCase}`].day.substr(1, 2);\n return weekdays[`${breakpointWeekday}`][tzBreakpoints[`${theCase}`].day[0]];\n }\n })();\n if (dateDay > actualDay || (dateDay == actualDay && dateHour >= tzBreakpoints[`${theCase}`].hour)) {\n return tzBreakpoints[`${theCase}`].offset;\n }\n const fallbackCase = (function () {\n if (theCase == 1) {\n return 2;\n } else {\n return 1;\n }\n })();\n return tzBreakpoints[`${fallbackCase}`].offset;\n}\nlet tzlibZoneNames = [];\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction tzlib_get_timezones(jsonType = false) {\n if (tzlibZoneNames.length == 0) {\n tzlibZoneNames = (function () {\n let namesArr = [];\n for (const [key, value] of Object.entries(tzlibZonesDB)) {\n if (typeof value === 'object' && !Array.isArray(value)) {\n for (const [key2, value2] of Object.entries(value)) {\n if (typeof value2 === 'object' && !Array.isArray(value2)) {\n for (const [key3] of Object.entries(value2)) {\n namesArr.push(key + '/' + key2 + '/' + key3);\n }\n } else {\n namesArr.push(key + '/' + key2);\n }\n }\n } else {\n namesArr.push(key);\n }\n }\n return namesArr;\n })();\n }\n if (jsonType) {\n return JSON.stringify(tzlibZoneNames);\n }\n return tzlibZoneNames;\n}\nexport { tzlib_get_ical_block, tzlib_get_offset, tzlib_get_timezones };\n","import { tzlib_get_ical_block, tzlib_get_offset, tzlib_get_timezones } from 'timezones-ical-library';\n/*!\n * @preserve\n *\n * ++++++++++++++++++++++\n * Add to Calendar Button\n * ++++++++++++++++++++++\n *\n * Version: 2.7.3\n * Creator: Jens Kuerschner (https://jekuer.com)\n * Project: https://github.com/add2cal/add-to-calendar-button\n * License: Elastic License 2.0 (ELv2) (https://github.com/add2cal/add-to-calendar-button/blob/main/LICENSE.txt)\n * Note: DO NOT REMOVE THE COPYRIGHT NOTICE ABOVE!\n *\n */\nconst atcbVersion = '2.7.3';\nconst atcbCssTemplate = {\r\"default\": \":host{width:fit-content;--base-font-size-l:16px;--base-font-size-m:16px;--base-font-size-s:16px;--font:arial,helvetica,\\\"Twemoji Mozilla\\\",\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\",\\\"Noto Color Emoji\\\",\\\"EmojiOne Color\\\",\\\"Android Emoji\\\",sans-serif;--accent-color:#1e90ff;--wrapper-padding:1px;--buttonslist-gap:5px;--btn-background:#f5f5f5;--btn-hover-background:#fff;--btn-border:#d2d2d2;--btn-border-radius:6px;--btn-padding-x:1em;--btn-padding-y:.65em;--btn-font-weight:600;--btn-text:#333;--btn-hover-text:#000;--btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 15%) 0 2px 2px -1px;--btn-hover-shadow:rgba(0 0 0 / 25%) 0 5px 12px -2px,rgba(0 0 0 / 25%) 0 3px 5px -2px;--btn-active-shadow:rgba(0 0 0 / 30%) 0 6px 13px -2px,rgba(0 0 0 / 25%) 0 4px 5px -2px;--list-background:#f5f5f5;--list-hover-background:#fff;--list-text:#333;--list-font-weight:400;--list-hover-text:#000;--list-close-background:#e5e5e5;--list-close-text:#777;--list-border-radius:6px;--list-padding:.8em;--list-shadow:rgba(0 0 0 / 20%) 0 4px 13px -2px,rgba(0 0 0 / 23%) 0 2px 4px -1px;--list-modal-shadow:rgba(0 0 0 / 50%) 0 4px 30px -3px,rgba(0 0 0 / 30%) 0 2px 8px -2px;--input-border-radius:6px;--input-background:#fff;--status-active-text:#fff;--form-error:#c5372c;--form-success:#338a36;--modal-text:#000;--modal-text-align:left;--modal-text-align-rtl:right;--modal-background:#f5f5f5;--modal-border-radius:6px;--modal-shadow:drop-shadow(3px 6px 25px rgba(0 0 0 / 65%));--modal-btn-bar:#c6c8cd;--modal-btn-background:#f5f5f5;--modal-btn-secondary-background:#e2e1e6;--modal-btn-hover-background:#fff;--modal-btn-border:#d2d2d2;--modal-btn-font-weight:600;--modal-btn-text:#2e2e2e;--modal-btn-hover-text:#161616;--modal-btn-secondary-text:#666567;--modal-btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 10%) 0 2px 3px -1px;--modal-btn-hover-shadow:rgba(0 0 0 / 25%) 0 5px 13px -2px,rgba(0 0 0 / 20%) 0 3px 5px -2px;--modal-headline-text-align:center;--modal-headline-text-transform:none;--date-btn-text:#1d1d1e;--date-btn-text-secondary:#3a3a3f;--date-btn-cal-day-text:#fff;--date-btn-cal-month-text:#d3d2d7;--date-btn-cal-background:#313132;--date-btn-background:#eae9ed;--date-btn-hover-background:#fff;--date-btn-headline-line-clamp:1;--date-btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 15%) 0 2px 3px -1px;--date-btn-hover-shadow:rgba(0 0 0 / 20%) 0 5px 12px -2px,rgba(0 0 0 / 20%) 0 3px 4px -2px;--checkmark-background:drop-shadow(0 0 3px #fff);--overlay-background:rgba(20 20 20 / 25%);--overlay-cursor:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23777' width='16' height='16' viewBox='0 0 122.878 122.88'%3E%3Cpath d='M1.426 8.313a4.87 4.87 0 0 1 0-6.886 4.87 4.87 0 0 1 6.886 0l53.127 53.127 53.127-53.127a4.87 4.87 0 0 1 6.887 0 4.87 4.87 0 0 1 0 6.886L68.324 61.439l53.128 53.128a4.87 4.87 0 0 1-6.887 6.886L61.438 68.326 8.312 121.453a4.87 4.87 0 0 1-6.886 0 4.87 4.87 0 0 1 0-6.886l53.127-53.128L1.426 8.313h0z'/%3E%3C/svg%3E\\\") 16 16,crosshair;--icon-ms365-color:#ea3e23;--icon-yahoo-color:#5f01d1;--icon-filter:none}:host(.atcb-dark){--btn-background:#2e2e2e;--btn-hover-background:#373737;--btn-border:#3d3d3d;--btn-text:#dedede;--btn-hover-text:#f1f1f1;--btn-shadow:rgba(255 255 255 / 5%) -3px -3px 30px -1px,rgba(0 0 0 / 40%) 2px 3px 10px -2px,rgba(0 0 0 / 40%) 1px 2px 3px -1px;--btn-hover-shadow:rgba(0 0 0 / 90%) 2px 5px 20px -4px,rgba(0 0 0 / 50%) 1px 2px 6px -2px;--btn-active-shadow:rgba(0 0 0 / 90%) 2px 5px 20px -4px,rgba(0 0 0 / 50%) 1px 2px 6px -2px;--list-background:#2e2e2e;--list-hover-background:#373737;--list-text:#dedede;--list-hover-text:#f1f1f1;--list-close-background:#282828;--list-shadow:rgba(0 0 0 / 60%) 0 4px 20px -2px,rgba(0 0 0 / 40%) 0 2px 4px -1px;--list-modal-shadow:rgba(0 0 0 / 40%) -1px 3px 30px 2px;--modal-text:#f1f1f1;--modal-background:#242424;--modal-shadow:drop-shadow(3px 6px 25px rgba(0 0 0 / 90%));--modal-btn-bar:#38383a;--modal-btn-background:#181819;--modal-btn-secondary-background:#2e2d30;--modal-btn-hover-background:#434246;--modal-btn-border:#434246;--modal-btn-text:#dbdbdb;--modal-btn-hover-text:#fff;--modal-btn-secondary-text:#b8b8b8;--modal-btn-shadow:rgba(255 255 255 / 5%) -2px -2px 10px,rgba(0 0 0 / 40%) 3px 3px 10px -2px,rgba(0 0 0 / 40%) 1px 2px 5px -1px;--input-background:#434246;--status-active-text:#000;--form-error:#db8680;--form-success:#99de9c;--date-btn-text:#ebebf0;--date-btn-text-secondary:#b5b5bd;--date-btn-cal-day-text:#101010;--date-btn-cal-month-text:#3e3e3f;--date-btn-cal-background:#c7c7cd;--date-btn-background:#363636;--date-btn-hover-background:#474747;--date-btn-shadow:rgba(0 0 0 / 60%) 0 0 20px -2px,rgba(0 0 0 / 30%) 1px 2px 3px -1px;--checkmark-background:drop-shadow(0 0 3px #0a0a0a);--overlay-background:rgba(20 20 20 / 60%);--icon-ms365-color:#ea3e23;--icon-yahoo-color:#bebebe;--icon-filter:grayscale(.2)}.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-l)}@media (width <= 991px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-m)}}@media (width <= 575px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-s)}}.atcb-initialized.atcb-buttons-list{gap:var(--buttonslist-gap)}.atcb-button-wrapper{display:block;padding:var(--wrapper-padding);position:relative}.atcb-button{align-items:center;background-color:var(--btn-background);border:1px solid var(--btn-border);border-radius:var(--btn-border-radius);box-shadow:var(--btn-shadow);box-sizing:content-box;color:var(--btn-text);cursor:pointer;display:flex;font-family:var(--font);font-size:1em;font-weight:var(--btn-font-weight);justify-content:center;line-height:1.5em;margin:.13em;max-width:300px;padding:var(--btn-padding-y) var(--btn-padding-x);position:relative;text-align:center;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:auto;z-index:1}.atcb-button:not(.atcb-no-text,.atcb-modal-style,.atcb-dropoverlay,.atcb-single){min-width:calc(11.6em - 2 * var(--btn-padding-x))}.atcb-button.atcb-no-text{display:flex;place-content:center center;align-items:center;height:3em;width:3em;padding:0}.atcb-rtl .atcb-button{direction:rtl;text-align:right}.atcb-button:focus-visible{outline:2px solid var(--accent-color)}.atcb-button:not([disabled]):focus,.atcb-button:not([disabled]):hover{background-color:var(--btn-hover-background);box-shadow:var(--btn-hover-shadow);color:var(--btn-hover-text);margin:0;padding:calc(var(--btn-padding-y) + .13em) calc(var(--btn-padding-x) + .13em)}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay){z-index:15000000}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay),.atcb-button.atcb-single:not([disabled]):focus,.atcb-button.atcb-single:not([disabled]):hover{background-color:var(--btn-hover-background);box-shadow:var(--btn-active-shadow);color:var(--btn-hover-text);margin:0;padding:calc(var(--btn-padding-y) + .13em) calc(var(--btn-padding-x) + .13em)}.atcb-button.atcb-no-text.atcb-active,.atcb-button.atcb-no-text:focus,.atcb-button.atcb-no-text:hover{height:3.26em;width:3.26em;padding:0!important}.atcb-button.atcb-active.atcb-dropoverlay{z-index:14000090}.atcb-icon{flex-grow:0;flex-shrink:0;height:1em;line-height:1em;margin-right:.8em;width:1em}.atcb-rtl .atcb-icon{margin-right:0;margin-left:.8em}.atcb-no-text .atcb-icon{margin-right:0;margin-left:0}.atcb-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-text{overflow-wrap:anywhere}.atcb-dropdown-anchor{bottom:4px;height:1px;width:100%;opacity:0;position:absolute}.atcb-list-wrapper{box-sizing:border-box;font-weight:var(--list-font-weight);padding:0 4px;position:absolute;z-index:14000090}.atcb-list-wrapper.atcb-dropoverlay{z-index:15000000;max-width:max-content}.atcb-list{background-color:var(--list-background);border-radius:0 0 var(--list-border-radius) var(--list-border-radius);box-sizing:border-box;box-shadow:var(--list-shadow);color:var(--list-text);display:block;font-family:var(--font);min-width:100%;position:relative;user-select:none;-webkit-user-select:none;width:fit-content}.atcb-list-item{align-items:center;background-color:var(--list-background);box-sizing:border-box;cursor:pointer;display:flex;font-size:1em;line-height:1.75em;padding:var(--list-padding);text-align:left;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.atcb-rtl .atcb-list-item{direction:rtl;text-align:right}.atcb-list-item:hover{background-color:var(--list-hover-background);color:var(--list-hover-text)}.atcb-list-item:focus-visible{background-color:var(--list-hover-background);color:var(--accent-color);outline:0}.atcb-list-item:last-child{border-radius:0 0 var(--list-border-radius) var(--list-border-radius)}.atcb-dropup .atcb-list-item:last-child{border-radius:0;padding-bottom:calc(var(--list-padding) + .45em)}.atcb-dropoverlay .atcb-list .atcb-list-item:first-child,.atcb-dropup .atcb-list,.atcb-dropup .atcb-list-item:first-child,.atcb-list.atcb-modal .atcb-list-item:first-child{border-radius:var(--list-border-radius) var(--list-border-radius) 0 0}.atcb-dropoverlay .atcb-list .atcb-list-item:only-child,.atcb-list.atcb-modal .atcb-list-item:only-child{border-radius:var(--list-border-radius)}.atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child{padding-top:calc(var(--list-padding) + .45em)}.atcb-dropoverlay .atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child,.atcb-dropup .atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child{padding-top:var(--list-padding)}.atcb-dropoverlay .atcb-list,.atcb-list.atcb-modal{border-radius:var(--list-border-radius)}.atcb-list.atcb-modal{box-shadow:var(--list-modal-shadow)}.atcb-list-item .atcb-icon{margin:0 auto}.atcb-list-item .atcb-icon+.atcb-text{margin-left:.7em;width:100%}.atcb-rtl .atcb-list-item .atcb-icon+.atcb-text{margin-left:0;margin-right:.7em}.atcb-list-item-close{background-color:var(--list-close-background)}.atcb-list-item.atcb-list-item-close:not(:focus-visible){color:var(--list-close-text)}.atcb-list-item-close svg{fill:currentcolor}.atcb-modal{display:block;margin:auto;width:auto;min-width:auto;position:relative;z-index:14000090}.atcb-modal-box{filter:var(--modal-shadow);color:var(--modal-text);cursor:default;box-sizing:border-box;font-family:var(--font);line-height:1.5em;text-align:var(--modal-text-align);user-select:none;-webkit-user-select:none;touch-action:manipulation;width:100%;margin-bottom:20px;-webkit-tap-highlight-color:transparent}@media (width > 575px){.atcb-modal-box{width:32em}}.atcb-modal-box.atcb-rtl{text-align:var(--modal-text-align-rtl);direction:rtl;padding:1.25em 1em 1.25em 2em}.atcb-modal-icon{height:2.5em;width:2.5em;border-radius:100%;background-color:var(--modal-background);padding:1.75em;margin:auto}.atcb-modal-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-modal-headline{background-color:var(--modal-background);border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;font-size:1.3em;font-weight:600;line-height:1.5em;padding:1.8em 1.5em 1.3em;text-transform:var(--modal-headline-text-transform);text-align:var(--modal-headline-text-align)}.atcb-modal-icon+.atcb-modal-headline{margin-top:-2.6em;padding-top:2.6em}.atcb-modal-content{background-color:var(--modal-background);font-size:1em;padding:.3em 2em 2.2em}.atcb-modal-content-subevents{margin:auto;width:fit-content}.atcb-modal-icon+.atcb-modal-content{border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;margin-top:-2.6em;padding-top:2.6em}@media (width <= 575px){.atcb-modal-headline{padding:1.8em 1em 1em}.atcb-modal-content{padding:.3em 1.5em 1.5em}.atcb-modal-icon+.atcb-modal-content{padding-top:1.8em}}.atcb-modal-buttons{background-color:var(--modal-btn-bar);border-radius:0 0 var(--modal-border-radius) var(--modal-border-radius);box-sizing:border-box;padding:.6em;text-align:center;width:100%;display:flex;justify-content:center;flex-flow:row-reverse wrap;align-items:center}a.atcb-modal-btn,button.atcb-modal-btn{background-color:var(--modal-btn-secondary-background);border:0;border-radius:var(--btn-border-radius);box-shadow:var(--modal-btn-shadow);color:var(--modal-btn-secondary-text);cursor:pointer;display:inline-block;font-family:var(--font);font-size:.9em;font-weight:var(--modal-btn-font-weight);line-height:1em;margin:.625em;padding:1em 1.25em;position:relative;text-align:center;text-decoration:none;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}a.atcb-modal-btn.btn-small,button.atcb-modal-btn.btn-small{padding:.6em .8em}a.atcb-modal-btn.atcb-modal-btn-primary,button.atcb-modal-btn.atcb-modal-btn-primary{background-color:var(--modal-btn-background);color:var(--modal-btn-text)}a.atcb-modal-btn.atcb-modal-btn-border,button.atcb-modal-btn.atcb-modal-btn-border{border:1px solid var(--modal-btn-border)}a.atcb-modal-btn:focus-visible,button.atcb-modal-btn:focus-visible{background-color:var(--modal-btn-hover-background);outline:2px solid var(--accent-color)}a.atcb-modal-btn:disabled,button.atcb-button:disabled,button.atcb-modal-btn:disabled,button.atcb-subevent-btn:disabled{cursor:not-allowed;opacity:.75;filter:brightness(95%);border-style:dashed;box-shadow:none}a.atcb-modal-btn:not([disabled]):hover,button.atcb-modal-btn:not([disabled]):hover{background-color:var(--modal-btn-hover-background);box-shadow:var(--modal-btn-hover-shadow);color:var(--modal-btn-hover-text);text-decoration:none}.atcb-subevent-btn{display:flex;align-items:flex-start;cursor:pointer;font-family:var(--font);font-size:1em;box-shadow:var(--date-btn-shadow);background-color:var(--date-btn-background);border:0;border-radius:7px 4px 4px 7px;padding:0;margin:0;touch-action:manipulation;position:relative;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:100%}.atcb-subevent-btn:hover{align-items:center}.atcb-subevent-btn:focus,.atcb-subevent-btn:hover{background-color:var(--date-btn-hover-background);box-shadow:var(--date-btn-hover-shadow)}.atcb-subevent-btn:focus-visible{outline:2px solid var(--accent-color)}.atcb-subevent-btn+.atcb-subevent-btn{margin-top:30px}.atcb-date-btn-left{border-radius:4px 0 0 4px;align-self:stretch;background-color:var(--date-btn-cal-background);color:var(--date-btn-hover-background);padding:.7em .8em .8em;width:2.7em;align-items:center;display:flex;flex-direction:column;flex-shrink:0}.atcb-rtl .atcb-date-btn-left{border-radius:0 4px 4px 0}.atcb-subevent-btn:hover .atcb-date-btn-left{opacity:.8}.atcb-date-btn-day{color:var(--date-btn-cal-day-text);font-weight:400;font-size:2em;word-break:keep-all;padding-bottom:.1em}.atcb-initialized[lang=ja] .atcb-date-btn-day,.atcb-initialized[lang=ko] .atcb-date-btn-day,.atcb-initialized[lang=zh] .atcb-date-btn-day{font-size:1.3em}.atcb-date-btn-month{color:var(--date-btn-cal-month-text);font-weight:600;font-size:1em}.atcb-date-btn-right{position:relative;color:var(--date-btn-text);min-width:13.5em;overflow-wrap:anywhere}.atcb-subevent-btn .atcb-date-btn-right{width:100%}.atcb-date-btn-details{opacity:1;padding:.7em .8em;text-align:left}.atcb-rtl .atcb-date-btn-details{text-align:right}.atcb-date-btn-hover{position:absolute;top:0;left:0;width:100%;opacity:0;height:100%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:1em;padding:.4em .7em;box-sizing:border-box}.atcb-subevent-btn:hover .atcb-date-btn-details{opacity:0}.atcb-subevent-btn:hover .atcb-date-btn-hover{opacity:1}.atcb-date-btn-headline{font-weight:600;font-size:.9em;margin-bottom:.5em;overflow:hidden;display:-webkit-box;-webkit-line-clamp:var(--date-btn-headline-line-clamp);line-clamp:var(--date-btn-headline-line-clamp);-webkit-box-orient:vertical}.atcb-date-btn-content{display:flex;align-items:flex-start;font-size:.8em;color:var(--date-btn-text-secondary)}.atcb-date-btn-content.atcb-date-btn-cancelled{color:var(--form-error);font-weight:700}.atcb-date-btn-content-location{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical;word-break:break-all}.atcb-date-btn-content-icon{display:inline-block;height:.8em;margin-right:.4em;margin-left:0;width:.9em;flex-shrink:0}.atcb-rtl .atcb-date-btn-content-icon{margin-right:0;margin-left:.4em}.atcb-initialized[lang=ja] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=ko] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=zh] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon{margin-top:.15em}.atcb-date-btn-content-icon svg{height:100%;fill:currentcolor;width:100%}.atcb-date-btn-content+.atcb-date-btn-content{margin-top:.3em}.atcb-date-btn-content-text span:not(.atcb-icon-ical){padding-right:.3em;display:inline-block}.atcb-checkmark{display:none}.atcb-saved .atcb-checkmark{box-sizing:content-box;color:var(--btn-text);display:block;position:absolute;top:-.9em;right:-.5em;padding:.5em;border-radius:100%;height:1.2em}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay) .atcb-checkmark,.atcb-button.atcb-single:focus .atcb-checkmark,.atcb-button.atcb-single:hover .atcb-checkmark{top:-.77em;right:-.37em}.atcb-checkmark svg{height:100%;filter:var(--checkmark-background);width:auto}#atcb-bgoverlay{backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);background-color:var(--overlay-background);border:0;box-sizing:border-box;display:flex;height:calc(100vh + 100px);inset-inline:0;left:0;right:0;top:0;min-height:100%;min-width:100%;overflow-y:auto;padding:20px 20px 130px;position:fixed;width:100vw;z-index:14000000}#atcb-bgoverlay:not(dialog){animation:atcb-bgoverlay-animate .2s ease 0s 1 normal forwards;opacity:0}#atcb-bgoverlay.atcb-no-bg{animation:none;backdrop-filter:none;-webkit-backdrop-filter:none;opacity:1;background-color:transparent}@keyframes atcb-bgoverlay-animate{0%{opacity:0}100%{opacity:1}}#atcb-bgoverlay.atcb-click:hover{cursor:var(--overlay-cursor)}.atcb-icon-outlookcom,.atcb-icon.atcb-icon-ms365{padding-bottom:.05em}.atcb-icon.atcb-icon-apple,.atcb-icon.atcb-icon-ical{padding-bottom:.15em}.atcb-icon.atcb-icon-trigger{padding-bottom:.15em}.atcb-icon.atcb-icon-rsvp{height:1.5em;width:1.5em}.atcb-icon.atcb-icon-apple svg{fill:currentcolor}.atcb-icon.atcb-icon-ical svg{fill:currentcolor}.atcb-icon.atcb-icon-ms365 svg{fill:var(--icon-ms365-color)}.atcb-icon.atcb-icon-yahoo svg{fill:var(--icon-yahoo-color)}.atcb-icon.atcb-icon-google svg,.atcb-icon.atcb-icon-msteams svg,.atcb-icon.atcb-icon-outlookcom svg{filter:var(--icon-filter)}.rsvp-inline-wrapper{filter:none;min-width:100%;margin-bottom:0}.atcb-modal-content.no-headline{border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;padding-top:1.8em}.rsvp-inline-wrapper .atcb-modal-content,.rsvp-inline-wrapper .atcb-modal-headline,.rsvp-inline-wrapper.atcb-modal-box{background-color:transparent;border-radius:0;box-sizing:border-box;padding:0;width:100%}.rsvp-inline-wrapper .atcb-modal-headline{padding-bottom:1.5em}.pro{text-align:center}.pro ol,.pro ul{margin:auto;text-align:left;width:fit-content}.pro a:not(.atcb-modal-btn),.pro a:not(.atcb-modal-btn):active,.pro a:not(.atcb-modal-btn):visited{color:var(--modal-btn-text);text-decoration:underline;text-decoration-thickness:2px;text-decoration-color:var(--accent-color)}.pro a:not(.atcb-modal-btn):hover{color:var(--accent-color);text-decoration:none}.pro .pro-share-buttons{display:flex;flex-wrap:wrap;justify-content:center}.pro #rsvp-atcb{display:flex;flex-wrap:wrap;gap:.4em}.pro-form{text-align:left}.pro-form:not(.no-intro){border-top:1px solid var(--modal-btn-border);margin-top:1.5em;padding-top:1.5em}.pro-form.no-intro:not(.no-headline){padding-top:.5em}.pro-field+.pro-field{padding-top:1.3em}.pro-field-type-label+.pro-field-type-radio{padding-top:0}.pro-field-type-checkbox,.pro-field-type-radio div{align-items:center;display:flex}.pro-field-type-checkbox input,.pro-field-type-radio input{cursor:pointer}.pro-field label{display:block;font-size:.9em;opacity:.7}.pro-field-type-checkbox label,.pro-field-type-radio label{cursor:pointer;opacity:.8;padding-left:.3em}.pro-field input[type=email],.pro-field input[type=number],.pro-field input[type=text]{background-color:var(--input-background);border:1px solid var(--modal-btn-border);border-radius:var(--input-border-radius);box-sizing:border-box;caret-color:var(--accent-color);color:var(--modal-text);font-size:.9em;opacity:.8;padding:.7em;transition:all .1s ease-in-out;width:100%}.pro-field input[type=checkbox],.pro-field input[type=radio]{accent-color:var(--accent-color);height:1.2rem;opacity:.8;transition:all .1s ease-in-out;width:1.2em}.pro-field input:disabled,.pro-field input:disabled+label{cursor:not-allowed;opacity:.75;filter:brightness(95%)}.pro-field input:not([disabled]):hover{opacity:1}.pro-field input[type=email]:focus,.pro-field input[type=number]:focus,.pro-field input[type=text]:focus{border-color:var(--accent-color);outline:1px solid var(--accent-color)}.pro-field input[type=checkbox]:focus,.pro-field input[type=radio]:focus{outline-color:var(--accent-color);outline-width:2px}#submit-error{color:var(--form-error);display:none;font-weight:700;padding-top:1.5em;text-align:center}.pro-form.form-error #submit-error{display:block}.pro-field input.error{accent-color:var(--form-error);border:2px solid var(--form-error)}.pro-field input.error+label,.pro-field:has(input.error) label{color:var(--form-error);opacity:1}#rsvp-status-group{border-bottom:1px solid var(--modal-btn-border);font-weight:700;margin-bottom:1.5em;padding-bottom:2em;text-align:center}#rsvp-status-group .pro-field{align-items:center;display:flex;flex-wrap:wrap;gap:1.2em;justify-content:center;margin-top:1em}@media (width <= 575px){#rsvp-status-group .pro-field{flex-direction:column}#rsvp-status-group .pro-field div{width:80%}}#rsvp-status-group .pro-field div{min-width:28%;position:relative}#rsvp-status-group input{opacity:0;position:absolute;top:0;left:0;height:100%;width:100%;margin:0;cursor:pointer}#rsvp-status-group label{align-items:center;border:1px solid var(--modal-btn-text);border-radius:var(--input-border-radius);box-shadow:var(--btn-shadow);color:var(--modal-btn-text);display:flex;flex-direction:column;font-weight:700;text-transform:uppercase;justify-content:center;opacity:.6;padding:.8em;transition:all .1s ease-in-out;width:100%}#rsvp-status-group label.status-confirmed{border-color:var(--form-success);color:var(--form-success)}#rsvp-status-group label.status-declined{border-color:var(--form-error);color:var(--form-error)}#rsvp-status-group input:checked+label{background-color:var(--modal-text);box-shadow:var(--btn-hover-shadow);color:var(--status-active-text);opacity:1;transform:scale(1.08)}#rsvp-status-group input:focus-visible+label{outline:2px solid var(--accent-color);outline-offset:2px}#rsvp-status-group input:not([disabled])+label:hover,#rsvp-status-group input:not([disabled]):hover+label{box-shadow:var(--btn-hover-shadow);opacity:1;transform:scale(1.08)}#rsvp-status-group input:checked+label.status-confirmed{background-color:var(--form-success)}#rsvp-status-group input:checked+label.status-declined{background-color:var(--form-error)}#rsvp-success-msg,#rsvp-success-msg-demo,#rsvp-success-msg-doi,#rsvp-success-msg-email,#ty-success-msg{display:none;font-weight:700;line-height:1.6em;padding-top:.5em;text-align:center}#rsvp-success-msg,#rsvp-success-msg-demo,#ty-success-msg{padding:1.5em 0}#rsvp-success-msg-demo,#rsvp-success-msg-email{color:var(--form-success)}#rsvp-success-msg-doi{color:var(--form-error);padding-top:1em;font-size:.8em}#pro-form-submit{display:block;margin:auto;min-width:150px}.pro-form-fine{font-size:.8em;margin:.5em auto 1em;opacity:.5;text-align:center}.pro-form.form-error .pro-form-fine{opacity:0}.pro-waiting{background-color:var(--modal-btn-background);border:1px solid var(--modal-btn-border);border-radius:var(--btn-border-radius);box-sizing:border-box;color:var(--modal-btn-text);cursor:wait;display:none;line-height:.5em;margin:auto;min-width:150px;padding:.5em 1.25em 1.2em;text-align:center;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:fit-content}@media (width > 575px){#pro-form-submit,.pro-waiting{min-width:200px}}.pro-waiting span:not(.atcb-icon-ical){animation-name:blink;animation-duration:1s;animation-iteration-count:infinite;animation-fill-mode:both;font-size:2.5em}.pro-field label span:not(.atcb-icon-ical){color:var(--form-error);font-weight:700;padding-left:2px}.pro-waiting span:not(.atcb-icon-ical):nth-child(2){animation-delay:.15s}.pro-waiting span:not(.atcb-icon-ical):nth-child(3){animation-delay:.3s}@keyframes blink{0%{opacity:.2}20%{opacity:1}100%{opacity:.2}}.pro #rsvp-sent-content{align-items:center;display:flex;flex-direction:column;gap:1.5em}#rsvp-status-group span{color:inherit}.atcb-modal-content .pro p:not(.pro-form-fine){margin:0}.atcb-modal-content .pro p.pro-pt{margin-top:1.5em}.atcb-modal-content .pro .pro-field p{font-size:.9em}.pro .btn-flex{align-items:center;display:flex}.pro .atcb-modal-btn svg{fill:none;height:1.5em;margin-right:.5em;stroke:currentcolor;width:auto}#atcb-reference{box-sizing:border-box;filter:drop-shadow(0 0 3px rgba(255 255 255 / 80%));height:auto;padding:8px 0;text-align:center;transform:translate3d(0,0,0);width:100%;z-index:15000000}#atcb-reference.fixed-ref{position:fixed;bottom:10px;right:40px;width:auto}#atcb-reference.atcb-dropup{position:absolute;margin-top:-1px}.atcb-modal-host-initialized #atcb-reference.atcb-dropup{text-align:left}:host(.atcb-dark) #atcb-reference{filter:drop-shadow(0 0 5px #000)}#atcb-reference a,#atcb-reference a:active,#atcb-reference a:visited{opacity:.4;width:150px;max-width:100%;margin:auto;display:inline-block;text-decoration:none}#atcb-reference.fixed-ref a{opacity:.6}#atcb-reference a:hover{opacity:.9;text-decoration:none}#atcb-reference svg{fill:var(--list-text)}\",\r\"3d\": \":host{width:fit-content;--base-font-size-l:16px;--base-font-size-m:16px;--base-font-size-s:16px;--font:arial,helvetica,\\\"Twemoji Mozilla\\\",\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\",\\\"Noto Color Emoji\\\",\\\"EmojiOne Color\\\",\\\"Android Emoji\\\",sans-serif;--accent-color:#1e90ff;--wrapper-padding:0px;--buttonslist-gap:5px;--btn-background:#f5f5f5;--btn-hover-background:#fff;--btn-border:#d2d2d2;--btn-border-radius:6px;--btn-padding-x:1em;--btn-padding-y:.65em;--btn-font-weight:600;--btn-text:#333;--btn-hover-text:#000;--btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 15%) 0 2px 2px -1px;--btn-hover-shadow:rgba(0 0 0 / 25%) 0 5px 12px -2px,rgba(0 0 0 / 25%) 0 3px 5px -2px;--btn-active-shadow:rgba(0 0 0 / 40%) 0 8px 13px -2px,rgba(0 0 0 / 30%) 0 5px 5px -3px;--btn-active-shadow-up:rgba(0 0 0 / 30%) 0 6px 13px -2px,rgba(0 0 0 / 15%) 0 2px 2px -1px,rgba(0 0 0 / 25%) 0 -3px 10px -1px;--list-background:#f5f5f5;--list-hover-background:#fff;--list-text:#333;--list-hover-text:#000;--list-close-background:#e5e5e5;--list-close-text:#777;--list-border-radius:6px;--list-padding:.8em;--list-shadow:rgba(0 0 0 / 20%) 0 4px 13px -2px,rgba(0 0 0 / 23%) 0 2px 4px -1px;--list-modal-shadow:rgba(0 0 0 / 50%) 0 4px 30px -3px,rgba(0 0 0 / 30%) 0 2px 8px -2px;--modal-text:#000;--modal-text-align:left;--modal-text-align-rtl:right;--modal-background:#f5f5f5;--modal-border-radius:6px;--modal-shadow:drop-shadow(3px 6px 25px rgba(0 0 0 / 65%));--modal-btn-bar:#c6c8cd;--modal-btn-background:#f5f5f5;--modal-btn-secondary-background:#e2e1e6;--modal-btn-hover-background:#fff;--modal-btn-border:#d2d2d2;--modal-btn-font-weight:600;--modal-btn-text:#2e2e2e;--modal-btn-hover-text:#161616;--modal-btn-secondary-text:#666567;--modal-btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 10%) 0 2px 3px -1px;--modal-btn-hover-shadow:rgba(0 0 0 / 25%) 0 5px 13px -2px,rgba(0 0 0 / 20%) 0 3px 5px -2px;--modal-headline-text-align:center;--modal-headline-text-transform:none;--input-border-radius:6px;--input-background:#fff;--status-active-text:#fff;--form-error:#c5372c;--form-success:#338a36;--date-btn-text:#1d1d1e;--date-btn-text-secondary:#3a3a3f;--date-btn-cal-day-text:#fff;--date-btn-cal-month-text:#d3d2d7;--date-btn-cal-background:#313132;--date-btn-background:#eae9ed;--date-btn-hover-background:#fff;--date-btn-headline-line-clamp:1;--date-btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 15%) 0 2px 3px -1px;--date-btn-hover-shadow:rgba(0 0 0 / 20%) 0 5px 12px -2px,rgba(0 0 0 / 20%) 0 3px 4px -2px;--checkmark-background:drop-shadow(0 0 3px #fff);--overlay-background:rgba(20 20 20 / 25%);--overlay-cursor:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23777' width='16' height='16' viewBox='0 0 122.878 122.88'%3E%3Cpath d='M1.426 8.313a4.87 4.87 0 0 1 0-6.886 4.87 4.87 0 0 1 6.886 0l53.127 53.127 53.127-53.127a4.87 4.87 0 0 1 6.887 0 4.87 4.87 0 0 1 0 6.886L68.324 61.439l53.128 53.128a4.87 4.87 0 0 1-6.887 6.886L61.438 68.326 8.312 121.453a4.87 4.87 0 0 1-6.886 0 4.87 4.87 0 0 1 0-6.886l53.127-53.128L1.426 8.313h0z'/%3E%3C/svg%3E\\\") 16 16,crosshair;--icon-ms365-color:#ea3e23;--icon-yahoo-color:#5f01d1;--icon-filter:none}:host(.atcb-dark){--btn-background:#2e2e2e;--btn-hover-background:#373737;--btn-border:#4d4d4d;--btn-text:#dedede;--btn-hover-text:#f1f1f1;--btn-shadow:rgba(255 255 255 / 5%) -3px -3px 30px -1px,rgba(0 0 0 / 40%) 2px 3px 10px -2px,rgba(0 0 0 / 40%) 1px 2px 3px -1px;--btn-hover-shadow:rgba(0 0 0 / 90%) 2px 5px 20px -4px,rgba(0 0 0 / 50%) 1px 2px 6px -2px;--btn-active-shadow:rgba(0 0 0 / 90%) 2px 5px 20px -4px,rgba(0 0 0 / 50%) 1px 2px 6px -2px;--btn-active-shadow-up:rgba(0 0 0 / 80%) 2px 4px 20px -4px,rgba(0 0 0 / 30%) 1px 1px 3px -1px,rgba(0 0 0 / 45%) 0 -3px 10px -1px;--list-background:#2e2e2e;--list-hover-background:#373737;--list-text:#dedede;--list-hover-text:#f1f1f1;--list-close-background:#282828;--list-shadow:rgba(0 0 0 / 60%) 0 4px 20px -2px,rgba(0 0 0 / 40%) 0 2px 4px -1px;--list-modal-shadow:rgba(0 0 0 / 40%) -1px 3px 30px 2px;--modal-text:#f1f1f1;--modal-background:#242424;--modal-shadow:drop-shadow(3px 6px 25px rgba(0 0 0 / 90%));--modal-btn-bar:#38383a;--modal-btn-background:#181819;--modal-btn-secondary-background:#2e2d30;--modal-btn-hover-background:#434246;--modal-btn-border:#434246;--modal-btn-text:#dbdbdb;--modal-btn-hover-text:#fff;--modal-btn-secondary-text:#b8b8b8;--modal-btn-shadow:rgba(255 255 255 / 5%) -2px -2px 10px,rgba(0 0 0 / 40%) 3px 3px 10px -2px,rgba(0 0 0 / 40%) 1px 2px 5px -1px;--modal-btn-hover-shadow:none;--input-background:#434246;--status-active-text:#000;--form-error:#db8680;--form-success:#99de9c;--date-btn-text:#ebebf0;--date-btn-text-secondary:#b5b5bd;--date-btn-cal-day-text:#101010;--date-btn-cal-month-text:#3e3e3f;--date-btn-cal-background:#c7c7cd;--date-btn-background:#363636;--date-btn-hover-background:#474747;--date-btn-shadow:rgba(0 0 0 / 60%) 0 0 20px -2px,rgba(0 0 0 / 30%) 1px 2px 3px -1px;--date-btn-hover-shadow:none;--checkmark-background:drop-shadow(0 0 3px #0a0a0a);--overlay-background:rgba(20 20 20 / 60%);--icon-ms365-color:#ea3e23;--icon-yahoo-color:#bebebe;--icon-filter:grayscale(.2)}.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-l)}@media (width <= 991px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-m)}}@media (width <= 575px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-s)}}.atcb-initialized.atcb-buttons-list{gap:var(--buttonslist-gap)}.atcb-button-wrapper{display:block;padding:var(--wrapper-padding);position:relative}.atcb-button{align-items:center;background-color:var(--btn-background);border:1px solid var(--btn-border);border-radius:var(--btn-border-radius);box-shadow:var(--btn-shadow);box-sizing:content-box;color:var(--btn-text);cursor:pointer;display:flex;font-family:var(--font);font-size:1em;font-weight:var(--btn-font-weight);justify-content:center;line-height:1.5em;margin:0;max-width:300px;padding:var(--btn-padding-y) var(--btn-padding-x);position:relative;text-align:center;touch-action:manipulation;transform:translate3d(0,0,-12px);user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:auto;z-index:1}.atcb-button:not(.atcb-no-text,.atcb-modal-style,.atcb-dropoverlay,.atcb-single){min-width:calc(11.6em - 2 * var(--btn-padding-x))}.atcb-button.atcb-no-text{display:flex;place-content:center center;align-items:center;height:3em;width:3em;padding:0}.atcb-rtl .atcb-button{direction:rtl;text-align:right}.atcb-button:focus-visible{outline:2px solid var(--accent-color)}.atcb-button:not([disabled]):focus,.atcb-button:not([disabled]):hover{background-color:var(--btn-hover-background);box-shadow:var(--btn-hover-shadow);color:var(--btn-hover-text)}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay){background-color:var(--btn-hover-background);z-index:15000000}.atcb-button.atcb-single:not([disabled]):focus,.atcb-button.atcb-single:not([disabled]):hover{background-color:var(--btn-hover-background);box-shadow:var(--btn-active-shadow);color:var(--btn-hover-text)}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropup,.atcb-dropoverlay){box-shadow:var(--btn-active-shadow);transform:perspective(100px) rotateX(12deg) translate3d(0,0,2px);transition:transform .1s linear}.atcb-button.atcb-active.atcb-dropup:not(.atcb-modal-style,.atcb-dropoverlay){box-shadow:var(--btn-active-shadow-up);transform:perspective(100px) rotateX(348deg) translate3d(0,0,2px);transition:transform .1s linear}.atcb-button.atcb-active.atcb-dropoverlay{transform:translate3d(0,0,0);z-index:14000090}.atcb-icon{flex-grow:0;flex-shrink:0;height:1em;line-height:1em;margin-right:.8em;width:1em}.atcb-rtl .atcb-icon{margin-right:0;margin-left:.8em}.atcb-no-text .atcb-icon{margin-right:0;margin-left:0}.atcb-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-text{overflow-wrap:anywhere}.atcb-dropdown-anchor{bottom:6px;height:1px;width:100%;opacity:0;position:absolute}.atcb-list-wrapper{box-sizing:border-box;padding:0 4px;position:absolute;transform:translate3d(0,0,0);z-index:14000090}.atcb-list{background-color:var(--list-background);border-radius:0 0 var(--list-border-radius) var(--list-border-radius);box-sizing:border-box;box-shadow:var(--list-shadow);color:var(--list-text);display:block;font-family:var(--font);min-width:100%;position:relative;user-select:none;-webkit-user-select:none;width:fit-content}.atcb-list-wrapper.atcb-dropdown:not(.atcb-dropup,.atcb-dropoverlay){animation:atcb-list-slide-down .4s ease 50ms 1 normal both;opacity:0}.atcb-list-wrapper.atcb-dropup:not(.atcb-dropoverlay){animation:atcb-list-slide-up .4s ease 50ms 1 normal both;opacity:0}.atcb-list-wrapper.atcb-dropoverlay{transform:translate3d(0,0,2px);z-index:15000000;animation:atcb-list-slide-center .3s ease 0s 1 normal both;opacity:0}@keyframes atcb-list-slide-down{0%{opacity:0;transform:rotateX(70deg);transform-origin:top}100%{opacity:1;transform:rotateX(0);transform-origin:top}}@keyframes atcb-list-slide-up{0%{opacity:0;transform:rotateX(70deg);transform-origin:bottom}100%{opacity:1;transform:rotateX(0);transform-origin:bottom}}@keyframes atcb-list-slide-center{0%{opacity:0;transform:scaleY(1)}1%{opacity:1;transform:scaleY(0)}100%{opacity:1;transform:scaleY(1)}}.atcb-list-item{align-items:center;background-color:var(--list-background);box-sizing:border-box;cursor:pointer;display:flex;font-size:1em;line-height:1.75em;padding:var(--list-padding);text-align:left;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.atcb-rtl .atcb-list-item{direction:rtl;text-align:right}.atcb-list-item:hover{background-color:var(--list-hover-background);color:var(--list-hover-text)}.atcb-list-item:focus-visible{background-color:var(--list-hover-background);color:var(--accent-color);outline:0}.atcb-list-item:last-child{border-radius:0 0 var(--list-border-radius) var(--list-border-radius)}.atcb-dropup .atcb-list-item:last-child{border-radius:0;padding-bottom:calc(var(--list-padding) + .7em)}.atcb-dropoverlay .atcb-list .atcb-list-item:first-child,.atcb-dropup .atcb-list,.atcb-dropup .atcb-list-item:first-child,.atcb-list.atcb-modal .atcb-list-item:first-child{border-radius:var(--list-border-radius) var(--list-border-radius) 0 0}.atcb-dropoverlay .atcb-list .atcb-list-item:only-child,.atcb-list.atcb-modal .atcb-list-item:only-child{border-radius:var(--list-border-radius)}.atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child{padding-top:calc(var(--list-padding) + .7em)}.atcb-dropoverlay .atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child,.atcb-dropup .atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child{padding-top:var(--list-padding)}.atcb-dropoverlay .atcb-list,.atcb-list.atcb-modal{border-radius:var(--list-border-radius)}.atcb-list.atcb-modal{box-shadow:var(--list-modal-shadow)}.atcb-list-item .atcb-icon{margin:0 auto}.atcb-list-item .atcb-icon+.atcb-text{margin-left:.7em;width:100%}.atcb-rtl .atcb-list-item .atcb-icon+.atcb-text{margin-left:0;margin-right:.7em}.atcb-list-item-close{background-color:var(--list-close-background)}.atcb-list-item.atcb-list-item-close:not(:focus-visible){color:var(--list-close-text)}.atcb-list-item-close svg{fill:currentcolor}.atcb-modal{display:block;margin:auto;width:auto;min-width:auto;position:relative;z-index:14000090}.atcb-modal-box{filter:var(--modal-shadow);color:var(--modal-text);cursor:default;box-sizing:border-box;font-family:var(--font);line-height:1.5em;text-align:var(--modal-text-align);user-select:none;-webkit-user-select:none;touch-action:manipulation;width:100%;margin-bottom:20px;-webkit-tap-highlight-color:transparent}@media (width > 575px){.atcb-modal-box{width:32em}}.atcb-modal-box.atcb-rtl{text-align:var(--modal-text-align-rtl);direction:rtl;padding:1.25em 1em 1.25em 2em}.atcb-modal-icon{height:2.5em;width:2.5em;border-radius:100%;background-color:var(--modal-background);padding:1.75em;margin:auto}.atcb-modal-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-modal-headline{background-color:var(--modal-background);border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;font-size:1.3em;font-weight:600;line-height:1.5em;padding:1.8em 1.5em 1.3em;text-transform:var(--modal-headline-text-transform);text-align:var(--modal-headline-text-align)}.atcb-modal-icon+.atcb-modal-headline{margin-top:-2.6em;padding-top:2.6em}.atcb-modal-content{background-color:var(--modal-background);font-size:1em;padding:.3em 2em 2.2em}.atcb-modal-content-subevents{margin:auto;width:fit-content}.atcb-modal-icon+.atcb-modal-content{border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;margin-top:-2.6em;padding-top:2.6em}@media (width <= 575px){.atcb-modal-headline{padding:1.8em 1em 1em}.atcb-modal-content{padding:.3em 1.5em 1.5em}.atcb-modal-icon+.atcb-modal-content{padding-top:1.8em}}.atcb-modal-buttons{background-color:var(--modal-btn-bar);border-radius:0 0 var(--modal-border-radius) var(--modal-border-radius);box-sizing:border-box;padding:.6em;text-align:center;width:100%;display:flex;justify-content:center;flex-flow:row-reverse wrap;align-items:center}a.atcb-modal-btn,button.atcb-modal-btn{background-color:var(--modal-btn-secondary-background);border:0;border-radius:var(--btn-border-radius);box-shadow:var(--modal-btn-shadow);color:var(--modal-btn-secondary-text);cursor:pointer;display:inline-block;font-family:var(--font);font-size:.9em;font-weight:var(--modal-btn-font-weight);line-height:1em;margin:.625em;padding:1em 1.25em;position:relative;text-align:center;text-decoration:none;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}a.atcb-modal-btn.btn-small,button.atcb-modal-btn.btn-small{padding:.6em .8em}a.atcb-modal-btn.atcb-modal-btn-primary,button.atcb-modal-btn.atcb-modal-btn-primary{background-color:var(--modal-btn-background);color:var(--modal-btn-text)}a.atcb-modal-btn.atcb-modal-btn-border,button.atcb-modal-btn.atcb-modal-btn-border{border:1px solid var(--modal-btn-border)}a.atcb-modal-btn:focus-visible,button.atcb-modal-btn:focus-visible{background-color:var(--modal-btn-hover-background);outline:2px solid var(--accent-color)}a.atcb-modal-btn:disabled,button.atcb-button:disabled,button.atcb-modal-btn:disabled,button.atcb-subevent-btn:disabled{cursor:not-allowed;opacity:.75;filter:brightness(95%);border-style:dashed;box-shadow:none}a.atcb-modal-btn:not([disabled]):hover,button.atcb-modal-btn:not([disabled]):hover{background-color:var(--modal-btn-hover-background);box-shadow:var(--modal-btn-hover-shadow);color:var(--modal-btn-hover-text);text-decoration:none}.atcb-subevent-btn{display:flex;align-items:flex-start;cursor:pointer;font-family:var(--font);font-size:1em;box-shadow:var(--date-btn-shadow);background-color:var(--date-btn-background);border:0;border-radius:7px 4px 4px 7px;padding:0;margin:0;touch-action:manipulation;position:relative;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:100%}.atcb-subevent-btn:hover{align-items:center}.atcb-subevent-btn:focus,.atcb-subevent-btn:hover{background-color:var(--date-btn-hover-background);box-shadow:var(--date-btn-hover-shadow)}.atcb-subevent-btn:focus-visible{outline:2px solid var(--accent-color)}.atcb-subevent-btn+.atcb-subevent-btn{margin-top:30px}.atcb-date-btn-left{border-radius:4px 0 0 4px;align-self:stretch;background-color:var(--date-btn-cal-background);color:var(--date-btn-hover-background);padding:.7em .8em .8em;width:2.7em;align-items:center;display:flex;flex-direction:column;flex-shrink:0}.atcb-rtl .atcb-date-btn-left{border-radius:0 4px 4px 0}.atcb-subevent-btn:hover .atcb-date-btn-left{opacity:.8}.atcb-date-btn-day{color:var(--date-btn-cal-day-text);font-weight:400;font-size:2em;word-break:keep-all;padding-bottom:.1em}.atcb-initialized[lang=ja] .atcb-date-btn-day,.atcb-initialized[lang=ko] .atcb-date-btn-day,.atcb-initialized[lang=zh] .atcb-date-btn-day{font-size:1.3em}.atcb-date-btn-month{color:var(--date-btn-cal-month-text);font-weight:600;font-size:1em}.atcb-date-btn-right{position:relative;color:var(--date-btn-text);min-width:13.5em;overflow-wrap:anywhere}.atcb-subevent-btn .atcb-date-btn-right{width:100%}.atcb-date-btn-details{opacity:1;padding:.7em .8em;text-align:left}.atcb-rtl .atcb-date-btn-details{text-align:right}.atcb-date-btn-hover{position:absolute;top:0;left:0;width:100%;opacity:0;height:100%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:1em;padding:.4em .7em;box-sizing:border-box}.atcb-subevent-btn:hover .atcb-date-btn-details{opacity:0}.atcb-subevent-btn:hover .atcb-date-btn-hover{opacity:1}.atcb-date-btn-headline{font-weight:600;font-size:.9em;margin-bottom:.5em;overflow:hidden;display:-webkit-box;-webkit-line-clamp:var(--date-btn-headline-line-clamp);line-clamp:var(--date-btn-headline-line-clamp);-webkit-box-orient:vertical}.atcb-date-btn-content{display:flex;align-items:flex-start;font-size:.8em;color:var(--date-btn-text-secondary)}.atcb-date-btn-content.atcb-date-btn-cancelled{color:var(--form-error);font-weight:700}.atcb-date-btn-content-location{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical;word-break:break-all}.atcb-date-btn-content-icon{display:inline-block;height:.8em;margin-right:.4em;margin-left:0;width:.9em;flex-shrink:0}.atcb-rtl .atcb-date-btn-content-icon{margin-right:0;margin-left:.4em}.atcb-initialized[lang=ja] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=ko] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=zh] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon{margin-top:.15em}.atcb-date-btn-content-icon svg{height:100%;fill:currentcolor;width:100%}.atcb-date-btn-content+.atcb-date-btn-content{margin-top:.3em}.atcb-date-btn-content-text span:not(.atcb-icon-ical){padding-right:.3em;display:inline-block}.atcb-checkmark{display:none}.atcb-saved .atcb-checkmark{box-sizing:content-box;color:var(--btn-text);display:block;position:absolute;top:-.9em;right:-.5em;padding:.5em;border-radius:100%;height:1.2em}.atcb-checkmark svg{height:100%;filter:var(--checkmark-background);width:auto}#atcb-bgoverlay{backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);background-color:var(--overlay-background);border:0;box-sizing:border-box;display:flex;height:calc(100vh + 100px);inset-inline:0;left:0;right:0;top:0;min-height:100%;min-width:100%;overflow-y:auto;padding:20px 20px 130px;position:fixed;width:100vw;z-index:14000000}#atcb-bgoverlay:not(dialog){animation:atcb-bgoverlay-animate .2s ease 0s 1 normal forwards;opacity:0}#atcb-bgoverlay.atcb-no-bg{animation:none;backdrop-filter:none;-webkit-backdrop-filter:none;opacity:1;background-color:transparent}@keyframes atcb-bgoverlay-animate{0%{opacity:0}100%{opacity:1}}#atcb-bgoverlay.atcb-click:hover{cursor:var(--overlay-cursor)}.atcb-icon-outlookcom,.atcb-icon.atcb-icon-ms365{padding-bottom:.05em}.atcb-icon.atcb-icon-apple,.atcb-icon.atcb-icon-ical{padding-bottom:.15em}.atcb-icon.atcb-icon-trigger{padding-bottom:.15em}.atcb-icon.atcb-icon-rsvp{height:1.5em;width:1.5em}.atcb-icon.atcb-icon-apple svg{fill:currentcolor}.atcb-icon.atcb-icon-ical svg{fill:currentcolor}.atcb-icon.atcb-icon-ms365 svg{fill:var(--icon-ms365-color)}.atcb-icon.atcb-icon-yahoo svg{fill:var(--icon-yahoo-color)}.atcb-icon.atcb-icon-google svg,.atcb-icon.atcb-icon-msteams svg,.atcb-icon.atcb-icon-outlookcom svg{filter:var(--icon-filter)}.rsvp-inline-wrapper{filter:none;min-width:100%;margin-bottom:0}.atcb-modal-content.no-headline{border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;padding-top:1.8em}.rsvp-inline-wrapper .atcb-modal-content,.rsvp-inline-wrapper .atcb-modal-headline,.rsvp-inline-wrapper.atcb-modal-box{background-color:transparent;border-radius:0;box-sizing:border-box;padding:0;width:100%}.rsvp-inline-wrapper .atcb-modal-headline{padding-bottom:1.5em}.pro{text-align:center}.pro ol,.pro ul{margin:auto;text-align:left;width:fit-content}.pro a:not(.atcb-modal-btn),.pro a:not(.atcb-modal-btn):active,.pro a:not(.atcb-modal-btn):visited{color:var(--modal-btn-text);text-decoration:underline;text-decoration-thickness:2px;text-decoration-color:var(--accent-color)}.pro a:not(.atcb-modal-btn):hover{color:var(--accent-color);text-decoration:none}.pro .pro-share-buttons{display:flex;flex-wrap:wrap;justify-content:center}.pro #rsvp-atcb{display:flex;flex-wrap:wrap;gap:.4em}.pro-form{text-align:left}.pro-form:not(.no-intro){border-top:1px solid var(--modal-btn-border);margin-top:1.5em;padding-top:1.5em}.pro-form.no-intro:not(.no-headline){padding-top:.5em}.pro-field+.pro-field{padding-top:1.3em}.pro-field-type-label+.pro-field-type-radio{padding-top:0}.pro-field-type-checkbox,.pro-field-type-radio div{align-items:center;display:flex}.pro-field-type-checkbox input,.pro-field-type-radio input{cursor:pointer}.pro-field label{display:block;font-size:.9em;opacity:.7}.pro-field-type-checkbox label,.pro-field-type-radio label{cursor:pointer;opacity:.8;padding-left:.3em}.pro-field input[type=email],.pro-field input[type=number],.pro-field input[type=text]{background-color:var(--input-background);border:1px solid var(--modal-btn-border);border-radius:var(--input-border-radius);box-sizing:border-box;caret-color:var(--accent-color);color:var(--modal-text);font-size:.9em;opacity:.8;padding:.7em;transition:all .1s ease-in-out;width:100%}.pro-field input[type=checkbox],.pro-field input[type=radio]{accent-color:var(--accent-color);height:1.2rem;opacity:.8;transition:all .1s ease-in-out;width:1.2em}.pro-field input:disabled,.pro-field input:disabled+label{cursor:not-allowed;opacity:.75;filter:brightness(95%)}.pro-field input:not([disabled]):hover{opacity:1}.pro-field input[type=email]:focus,.pro-field input[type=number]:focus,.pro-field input[type=text]:focus{border-color:var(--accent-color);outline:1px solid var(--accent-color)}.pro-field input[type=checkbox]:focus,.pro-field input[type=radio]:focus{outline-color:var(--accent-color);outline-width:2px}#submit-error{color:var(--form-error);display:none;font-weight:700;padding-top:1.5em;text-align:center}.pro-form.form-error #submit-error{display:block}.pro-field input.error{accent-color:var(--form-error);border:2px solid var(--form-error)}.pro-field input.error+label,.pro-field:has(input.error) label{color:var(--form-error);opacity:1}#rsvp-status-group{border-bottom:1px solid var(--modal-btn-border);font-weight:700;margin-bottom:1.5em;padding-bottom:2em;text-align:center}#rsvp-status-group .pro-field{align-items:center;display:flex;flex-wrap:wrap;gap:1.2em;justify-content:center;margin-top:1em}@media (width <= 575px){#rsvp-status-group .pro-field{flex-direction:column}#rsvp-status-group .pro-field div{width:80%}}#rsvp-status-group .pro-field div{min-width:28%;position:relative}#rsvp-status-group input{opacity:0;position:absolute;top:0;left:0;height:100%;width:100%;margin:0;cursor:pointer}#rsvp-status-group label{align-items:center;border:1px solid var(--modal-btn-text);border-radius:var(--input-border-radius);box-shadow:var(--btn-shadow);color:var(--modal-btn-text);display:flex;flex-direction:column;font-weight:700;text-transform:uppercase;justify-content:center;opacity:.6;padding:.8em;transition:all .1s ease-in-out;width:100%}#rsvp-status-group label.status-confirmed{border-color:var(--form-success);color:var(--form-success)}#rsvp-status-group label.status-declined{border-color:var(--form-error);color:var(--form-error)}#rsvp-status-group input:checked+label{background-color:var(--modal-text);box-shadow:var(--btn-hover-shadow);color:var(--status-active-text);opacity:1;transform:scale(1.08)}#rsvp-status-group input:focus-visible+label{outline:2px solid var(--accent-color);outline-offset:2px}#rsvp-status-group input:not([disabled])+label:hover,#rsvp-status-group input:not([disabled]):hover+label{box-shadow:var(--btn-hover-shadow);opacity:1;transform:scale(1.08)}#rsvp-status-group input:checked+label.status-confirmed{background-color:var(--form-success)}#rsvp-status-group input:checked+label.status-declined{background-color:var(--form-error)}#rsvp-success-msg,#rsvp-success-msg-demo,#rsvp-success-msg-doi,#rsvp-success-msg-email,#ty-success-msg{display:none;font-weight:700;line-height:1.6em;padding-top:.5em;text-align:center}#rsvp-success-msg,#rsvp-success-msg-demo,#ty-success-msg{padding:1.5em 0}#rsvp-success-msg-demo,#rsvp-success-msg-email{color:var(--form-success)}#rsvp-success-msg-doi{color:var(--form-error);padding-top:1em;font-size:.8em}#pro-form-submit{display:block;margin:auto;min-width:150px}.pro-form-fine{font-size:.8em;margin:.5em auto 1em;opacity:.5;text-align:center}.pro-form.form-error .pro-form-fine{opacity:0}.pro-waiting{background-color:var(--modal-btn-background);border:1px solid var(--modal-btn-border);border-radius:var(--btn-border-radius);box-sizing:border-box;color:var(--modal-btn-text);cursor:wait;display:none;line-height:.5em;margin:auto;min-width:150px;padding:.5em 1.25em 1.2em;text-align:center;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:fit-content}@media (width > 575px){#pro-form-submit,.pro-waiting{min-width:200px}}.pro-waiting span:not(.atcb-icon-ical){animation-name:blink;animation-duration:1s;animation-iteration-count:infinite;animation-fill-mode:both;font-size:2.5em}.pro-field label span:not(.atcb-icon-ical){color:var(--form-error);font-weight:700;padding-left:2px}.pro-waiting span:not(.atcb-icon-ical):nth-child(2){animation-delay:.15s}.pro-waiting span:not(.atcb-icon-ical):nth-child(3){animation-delay:.3s}@keyframes blink{0%{opacity:.2}20%{opacity:1}100%{opacity:.2}}.pro #rsvp-sent-content{align-items:center;display:flex;flex-direction:column;gap:1.5em}#rsvp-status-group span{color:inherit}.atcb-modal-content .pro p:not(.pro-form-fine){margin:0}.atcb-modal-content .pro p.pro-pt{margin-top:1.5em}.atcb-modal-content .pro .pro-field p{font-size:.9em}.pro .btn-flex{align-items:center;display:flex}.pro .atcb-modal-btn svg{fill:none;height:1.5em;margin-right:.5em;stroke:currentcolor;width:auto}#atcb-reference{box-sizing:border-box;filter:drop-shadow(0 0 3px rgba(255 255 255 / 80%));height:auto;padding:8px 0;text-align:center;transform:translate3d(0,0,0);width:100%;z-index:15000000}#atcb-reference.fixed-ref{position:fixed;bottom:10px;right:40px;width:auto}#atcb-reference.atcb-dropup{position:absolute;margin-top:-1px}.atcb-modal-host-initialized #atcb-reference.atcb-dropup{text-align:left}:host(.atcb-dark) #atcb-reference{filter:drop-shadow(0 0 5px #000)}#atcb-reference a,#atcb-reference a:active,#atcb-reference a:visited{opacity:.4;width:150px;max-width:100%;margin:auto;display:inline-block;text-decoration:none}#atcb-reference.fixed-ref a{opacity:.6}#atcb-reference a:hover{opacity:.9;text-decoration:none}#atcb-reference svg{fill:var(--list-text)}\",\r\"flat\": \":host{width:fit-content;--base-font-size-l:16px;--base-font-size-m:16px;--base-font-size-s:16px;--font:arial,helvetica,\\\"Twemoji Mozilla\\\",\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\",\\\"Noto Color Emoji\\\",\\\"EmojiOne Color\\\",\\\"Android Emoji\\\",sans-serif;--accent-color:#1e90ff;--wrapper-padding:0px;--buttonslist-gap:8px;--btn-background:#f5f5f5;--btn-hover-background:#fff;--btn-border:#545454;--btn-padding-x:1.2em;--btn-padding-y:.8em;--btn-shadow:#333;--btn-font-weight:600;--btn-text:#333;--btn-hover-text:#000;--list-background:#f5f5f5;--list-hover-background:#fff;--list-border:#545454;--list-text:#333;--list-font-weight:400;--list-hover-text:#000;--list-close-background:#545454;--list-close-text:#b0b0b0;--list-close-text-hover:#777;--list-padding:.8em;--modal-text:#000;--modal-text-align:left;--modal-text-align-rtl:right;--modal-background:#f5f5f5;--modal-btn-bar:#bababa;--modal-btn-background:#f5f5f5;--modal-btn-secondary-background:#e2e1e6;--modal-btn-hover-background:#fff;--modal-btn-border:#545454;--modal-btn-font-weight:600;--modal-btn-text:#2e2e2e;--modal-btn-hover-text:#161616;--modal-btn-secondary-text:#676767;--modal-headline-text-align:center;--modal-headline-text-transform:uppercase;--input-background:#fff;--status-active-text:#fff;--form-error:#c5372c;--form-success:#338a36;--date-btn-text:#1d1d1e;--date-btn-text-secondary:#414141;--date-btn-cal-day-text:#fff;--date-btn-cal-month-text:#d3d2d7;--date-btn-cal-background:#313132;--date-btn-background:#eae9ed;--date-btn-hover-background:#fff;--date-btn-headline-line-clamp:1;--overlay-background:rgba(20 20 20 / 40%);--overlay-cursor:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23777' width='16' height='16' viewBox='0 0 122.878 122.88'%3E%3Cpath d='M1.426 8.313a4.87 4.87 0 0 1 0-6.886 4.87 4.87 0 0 1 6.886 0l53.127 53.127 53.127-53.127a4.87 4.87 0 0 1 6.887 0 4.87 4.87 0 0 1 0 6.886L68.324 61.439l53.128 53.128a4.87 4.87 0 0 1-6.887 6.886L61.438 68.326 8.312 121.453a4.87 4.87 0 0 1-6.886 0 4.87 4.87 0 0 1 0-6.886l53.127-53.128L1.426 8.313h0z'/%3E%3C/svg%3E\\\") 16 16,crosshair;--icon-ms365-color:#ea3e23;--icon-yahoo-color:#5f01d1;--icon-filter:none}:host(.atcb-dark){--btn-background:#222;--btn-hover-background:#373737;--btn-border:#515151;--btn-shadow:#000;--btn-text:#dedede;--btn-hover-text:#f1f1f1;--list-background:#222;--list-hover-background:#373737;--list-border:#515151;--list-text:#dedede;--list-hover-text:#f1f1f1;--list-close-background:#111;--list-close-text:#777;--list-close-text-hover:#f1f1f1;--modal-text:#f1f1f1;--modal-background:#242424;--modal-btn-bar:#313131;--modal-btn-background:#181819;--modal-btn-secondary-background:#2e2d30;--modal-btn-hover-background:#434246;--modal-btn-border:#434246;--modal-btn-text:#dbdbdb;--modal-btn-hover-text:#fff;--modal-btn-secondary-text:#b8b8b8;--input-background:#434246;--status-active-text:#000;--form-error:#db8680;--form-success:#99de9c;--date-btn-text:#ebebf0;--date-btn-text-secondary:#b5b5bd;--date-btn-cal-day-text:#101010;--date-btn-cal-month-text:#414141;--date-btn-cal-background:#c7c7cd;--date-btn-background:#2d2d2d;--date-btn-hover-background:#474747;--overlay-background:rgba(20 20 20 / 75%);--icon-ms365-color:#ea3e23;--icon-yahoo-color:#bebebe;--icon-filter:grayscale(0.2)}.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-l)}@media (width <= 991px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-m)}}@media (width <= 575px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-s)}}.atcb-initialized.atcb-buttons-list{gap:var(--buttonslist-gap)}.atcb-button-wrapper{display:block;padding:var(--wrapper-padding);position:relative}.atcb-button{align-items:center;background-color:var(--btn-background);border:.2em solid var(--btn-border);box-sizing:content-box;color:var(--btn-text);cursor:pointer;display:flex;font-family:var(--font);font-size:1em;font-weight:var(--btn-font-weight);justify-content:center;line-height:1.5em;margin:0;max-width:300px;padding:var(--btn-padding-y) var(--btn-padding-x);top:0;left:0;box-shadow:0 0 0 0 var(--btn-shadow);position:relative;text-align:center;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:auto;z-index:1}.atcb-button:not(.atcb-no-text,.atcb-modal-style,.atcb-dropoverlay,.atcb-single){min-width:calc(11.6em - 2 * var(--btn-padding-x))}.atcb-button.atcb-no-text{display:flex;place-content:center center;align-items:center;height:3em;width:3em;padding:0}.atcb-button.atcb-click:not([disabled]){top:-3px;left:-3px;box-shadow:3px 3px 0 0 var(--btn-shadow)}.atcb-rtl .atcb-button{direction:rtl;text-align:right}.atcb-button:focus-visible{outline:2px solid var(--accent-color)}.atcb-button:not([disabled]):focus,.atcb-button:not([disabled]):hover{background-color:var(--btn-hover-background);top:0;left:0;box-shadow:0 0 0 0 var(--btn-shadow);color:var(--btn-hover-text)}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay){z-index:15000000}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay),.atcb-button.atcb-single:not([disabled]):focus,.atcb-button.atcb-single:not([disabled]):hover{background-color:var(--btn-hover-background);top:-5px;left:-5px;box-shadow:5px 5px 0 0 var(--btn-shadow);color:var(--btn-hover-text)}.atcb-button.atcb-active.atcb-dropoverlay{z-index:14000090}.atcb-icon{flex-grow:0;flex-shrink:0;height:.9em;line-height:1em;margin-right:.8em;width:.9em}.atcb-rtl .atcb-icon{margin-right:0;margin-left:1em}.atcb-no-text .atcb-icon{margin-right:0;margin-left:0}.atcb-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-icon-trigger svg{display:none}.atcb-button .atcb-icon-trigger::after{content:\\\"+\\\";font-family:Arial,Helvetica,sans-serif;font-size:1.5em}.atcb-text{overflow-wrap:anywhere}.atcb-dropdown-anchor{bottom:0;height:0;width:100%;opacity:0;position:absolute}.atcb-list-wrapper{box-sizing:border-box;font-weight:var(--list-font-weight);padding:0 2px 0 6px;position:absolute;z-index:16000090}.atcb-list-wrapper.atcb-no-text.atcb-dropdown{padding:0}.atcb-list-wrapper:not(.atcb-dropup,.atcb-dropoverlay){animation:list-entrance-bottom .2s ease 0s 1 normal forwards}.atcb-list-wrapper.atcb-dropup{animation:list-entrance-top .2s ease 0s 1 normal forwards}.atcb-list-wrapper.atcb-dropoverlay{z-index:15000000}@keyframes list-entrance-bottom{0%{opacity:0;transform:translateY(150px)}100%{opacity:1;transform:translateY(0)}}@keyframes list-entrance-top{0%{opacity:0;transform:translateY(-150px)}100%{opacity:1;transform:translateY(0)}}.atcb-list{background:var(--list-background);box-sizing:border-box;border:.15em solid var(--list-border);color:var(--list-text);display:block;font-family:var(--font);min-width:100%;position:relative;user-select:none;-webkit-user-select:none;width:fit-content}.atcb-list-item{align-items:center;background-color:var(--list-background);box-sizing:border-box;cursor:pointer;display:flex;font-size:1em;line-height:1.75em;padding:var(--list-padding);text-align:left;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.atcb-rtl .atcb-list-item{direction:rtl;text-align:right}.atcb-list-item:hover{background-color:var(--list-hover-background);color:var(--list-hover-text)}.atcb-list-item:focus-visible{background-color:var(--list-hover-background);color:var(--accent-color);outline:0}.atcb-dropup .atcb-list-item:last-child{border-bottom-width:0}.atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child{border-top-width:0}.atcb-dropoverlay .atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child,.atcb-dropup .atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child{border-top-width:.15em}.atcb-list-item .atcb-icon{margin:0 auto;height:1em;width:1em}.atcb-list-item .atcb-icon+.atcb-text{margin-left:.7em;width:100%}.atcb-rtl .atcb-list-item .atcb-icon+.atcb-text{margin-left:0;margin-right:.7em}.atcb-list-item-close{background-color:var(--list-close-background)}.atcb-list-item.atcb-list-item-close:not(:focus-visible){color:var(--list-close-text)}.atcb-list-item.atcb-list-item-close:hover{color:var(--list-close-text-hover)}.atcb-list-item-close svg{fill:currentcolor}.atcb-modal{display:block;margin:auto;width:auto;min-width:auto;position:relative;z-index:14000090}.atcb-modal-box{border:.15em solid var(--btn-border);background-color:var(--modal-background);color:var(--modal-text);cursor:default;box-sizing:border-box;font-family:var(--font);line-height:1.5em;text-align:var(--modal-text-align);user-select:none;-webkit-user-select:none;touch-action:manipulation;width:100%;margin-bottom:20px;-webkit-tap-highlight-color:transparent}@media (width > 575px){.atcb-modal-box{width:32em}}.atcb-modal-box.atcb-rtl{text-align:var(--modal-text-align-rtl);direction:rtl;padding:1.25em 1em 1.25em 2em}.atcb-modal-icon{height:2.5em;width:2.5em;padding:1.75em;margin:auto}.atcb-modal-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-modal-headline{font-size:1.3em;font-weight:600;line-height:1.5em;padding:1.8em 1.5em 1.3em;text-transform:var(--modal-headline-text-transform);text-align:var(--modal-headline-text-align)}.atcb-modal-icon+.atcb-modal-headline{padding-top:0}.atcb-modal-content{font-size:1em;padding:.3em 2em 2.2em}.atcb-modal-content-subevents{margin:auto;width:fit-content}.atcb-modal-icon+.atcb-modal-content{padding-top:0}@media (width <= 575px){.atcb-modal-headline{padding:1.8em 1em 1em}.atcb-modal-content{padding:.3em 1.5em 1.5em}}.atcb-modal-buttons{background-color:var(--modal-btn-bar);box-sizing:border-box;padding:.6em;text-align:center;width:100%;display:flex;justify-content:center;flex-flow:row-reverse wrap;align-items:center}a.atcb-modal-btn,button.atcb-modal-btn{border:.2em solid var(--btn-border);background-color:var(--modal-btn-secondary-background);color:var(--modal-btn-secondary-text);cursor:pointer;display:inline-block;font-family:var(--font);font-size:.9em;font-weight:var(--modal-btn-font-weight);line-height:1em;margin:.625em;padding:1em 1.25em;position:relative;text-align:center;text-decoration:none;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;top:0;left:0;box-shadow:0 0 0 0 var(--btn-shadow)}a.atcb-modal-btn.btn-small,button.atcb-modal-btn.btn-small{padding:.6em .8em}a.atcb-modal-btn.atcb-modal-btn-primary,button.atcb-modal-btn.atcb-modal-btn-primary{background-color:var(--modal-btn-background);color:var(--modal-btn-text)}a.atcb-modal-btn:focus-visible,button.atcb-modal-btn:focus-visible{background-color:var(--modal-btn-hover-background);outline:2px solid var(--accent-color)}a.atcb-modal-btn:disabled,button.atcb-button:disabled,button.atcb-modal-btn:disabled,button.atcb-subevent-btn:disabled{cursor:not-allowed;opacity:.75;filter:brightness(95%);border-style:dashed;box-shadow:none}a.atcb-modal-btn:not([disabled]):hover,button.atcb-modal-btn:not([disabled]):hover{background-color:var(--modal-btn-hover-background);color:var(--modal-btn-hover-text);text-decoration:none;top:-3px;left:-3px;box-shadow:3px 3px 0 0 var(--btn-shadow)}.atcb-subevent-btn{border:.15em solid var(--btn-border);display:flex;align-items:flex-start;cursor:pointer;font-family:var(--font);font-size:1em;background-color:var(--date-btn-background);padding:0;margin:0;touch-action:manipulation;position:relative;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;top:0;left:0;box-shadow:0 0 0 0 var(--btn-shadow);width:100%}.atcb-subevent-btn:hover{align-items:center;top:-3px;left:-3px;box-shadow:3px 3px 0 0 var(--btn-shadow)}.atcb-subevent-btn:focus,.atcb-subevent-btn:hover{background-color:var(--date-btn-hover-background)}.atcb-subevent-btn:focus-visible{outline:2px solid var(--accent-color)}.atcb-subevent-btn+.atcb-subevent-btn{margin-top:30px}.atcb-date-btn-left{align-self:stretch;background-color:var(--date-btn-cal-background);color:var(--date-btn-hover-background);padding:.7em .8em .8em;width:2.7em;align-items:center;display:flex;flex-direction:column;flex-shrink:0}.atcb-subevent-btn:hover .atcb-date-btn-left{opacity:.8}.atcb-date-btn-day{color:var(--date-btn-cal-day-text);font-weight:400;font-size:2em;word-break:keep-all;padding-bottom:.1em}.atcb-initialized[lang=ja] .atcb-date-btn-day,.atcb-initialized[lang=ko] .atcb-date-btn-day,.atcb-initialized[lang=zh] .atcb-date-btn-day{font-size:1.3em}.atcb-date-btn-month{color:var(--date-btn-cal-month-text);font-weight:600;font-size:1em}.atcb-date-btn-right{position:relative;color:var(--date-btn-text);min-width:13.5em;overflow-wrap:anywhere}.atcb-subevent-btn .atcb-date-btn-right{width:100%}.atcb-date-btn-details{opacity:1;padding:.7em .8em;text-align:left}.atcb-rtl .atcb-date-btn-details{text-align:right}.atcb-date-btn-hover{position:absolute;top:0;left:0;width:100%;opacity:0;height:100%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:1em;padding:.4em .7em;box-sizing:border-box}.atcb-subevent-btn:hover .atcb-date-btn-details{opacity:0}.atcb-subevent-btn:hover .atcb-date-btn-hover{opacity:1}.atcb-date-btn-headline{font-weight:600;font-size:.9em;margin-bottom:.5em;overflow:hidden;display:-webkit-box;-webkit-line-clamp:var(--date-btn-headline-line-clamp);line-clamp:var(--date-btn-headline-line-clamp);-webkit-box-orient:vertical}.atcb-date-btn-content{display:flex;align-items:flex-start;font-size:.8em;color:var(--date-btn-text-secondary)}.atcb-date-btn-content.atcb-date-btn-cancelled{color:var(--form-error);font-weight:700}.atcb-date-btn-content-location{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical;word-break:break-all}.atcb-date-btn-content-icon{display:inline-block;height:.8em;margin-right:.4em;margin-left:0;width:.9em;flex-shrink:0}.atcb-rtl .atcb-date-btn-content-icon{margin-right:0;margin-left:.4em}.atcb-initialized[lang=ja] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=ko] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=zh] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon{margin-top:.15em}.atcb-date-btn-content-icon svg{height:100%;fill:currentcolor;width:100%}.atcb-date-btn-content+.atcb-date-btn-content{margin-top:.3em}.atcb-date-btn-content-text span:not(.atcb-icon-ical){padding-right:.3em;display:inline-block}.atcb-checkmark{display:none}.atcb-saved .atcb-checkmark{box-sizing:content-box;color:var(--btn-text);display:block;position:absolute;top:-2.1em;right:-2em;padding:.5em;border-radius:100%;height:1.5em}.atcb-checkmark svg{height:100%;width:auto}#atcb-bgoverlay{backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);background-color:var(--overlay-background);border:0;box-sizing:border-box;display:flex;height:calc(100vh + 100px);inset-inline:0;left:0;right:0;top:0;min-height:100%;min-width:100%;overflow-y:auto;padding:20px 20px 130px;position:fixed;width:100vw;z-index:14000000}#atcb-bgoverlay:not(dialog){animation:atcb-bgoverlay-animate .2s ease 0s 1 normal forwards;opacity:0}#atcb-bgoverlay.atcb-no-bg{animation:none;backdrop-filter:none;-webkit-backdrop-filter:none;opacity:1;background-color:transparent}@keyframes atcb-bgoverlay-animate{0%{opacity:0}100%{opacity:1}}#atcb-bgoverlay.atcb-click:hover{cursor:var(--overlay-cursor)}.atcb-icon-outlookcom,.atcb-icon.atcb-icon-ms365{padding-bottom:.05em}.atcb-icon.atcb-icon-apple,.atcb-icon.atcb-icon-ical{padding-bottom:.15em}.atcb-icon.atcb-icon-rsvp{height:1.5em;width:1.5em}.atcb-icon.atcb-icon-apple svg{fill:currentcolor}.atcb-icon.atcb-icon-ical svg{fill:currentcolor}.atcb-icon.atcb-icon-ms365 svg{fill:var(--icon-ms365-color)}.atcb-icon.atcb-icon-yahoo svg{fill:var(--icon-yahoo-color)}.atcb-icon.atcb-icon-google svg,.atcb-icon.atcb-icon-msteams svg,.atcb-icon.atcb-icon-outlookcom svg{filter:var(--icon-filter)}.rsvp-inline-wrapper{background-color:transparent;border:0;filter:none;min-width:100%;margin-bottom:0}.atcb-modal-content.no-headline{padding-top:1.8em}.rsvp-inline-wrapper .atcb-modal-content,.rsvp-inline-wrapper .atcb-modal-headline,.rsvp-inline-wrapper.atcb-modal-box{background-color:transparent;border-radius:0;box-sizing:border-box;padding:0;width:100%}.rsvp-inline-wrapper .atcb-modal-headline{padding-bottom:1.5em}.pro{text-align:center}.pro ol,.pro ul{margin:auto;text-align:left;width:fit-content}.pro a:not(.atcb-modal-btn),.pro a:not(.atcb-modal-btn):active,.pro a:not(.atcb-modal-btn):visited{color:var(--modal-btn-text);text-decoration:underline;text-decoration-thickness:2px;text-decoration-color:var(--accent-color)}.pro a:not(.atcb-modal-btn):hover{color:var(--accent-color);text-decoration:none}.pro .pro-share-buttons{display:flex;flex-wrap:wrap;justify-content:center}.pro #rsvp-atcb{display:flex;flex-wrap:wrap;gap:.4em}.pro-form{text-align:left}.pro-form:not(.no-intro){border-top:2px solid var(--modal-btn-border);margin-top:1.5em;padding-top:1.5em}.pro-form.no-intro:not(.no-headline){padding-top:.5em}.pro-field+.pro-field{padding-top:1.3em}.pro-field-type-label+.pro-field-type-radio{padding-top:0}.pro-field-type-checkbox,.pro-field-type-radio div{align-items:center;display:flex}.pro-field-type-checkbox input,.pro-field-type-radio input{cursor:pointer}.pro-field label{display:block;font-size:.9em;opacity:.7}.pro-field-type-checkbox label,.pro-field-type-radio label{cursor:pointer;opacity:.8;padding-left:.3em}.pro-field input[type=email],.pro-field input[type=number],.pro-field input[type=text]{background-color:var(--input-background);border:2px solid var(--modal-btn-border);border-radius:var(--input-border-radius);box-sizing:border-box;caret-color:var(--accent-color);color:var(--modal-text);font-size:.9em;opacity:.8;padding:.7em;transition:all .1s ease-in-out;width:100%}.pro-field input[type=checkbox],.pro-field input[type=radio]{accent-color:var(--accent-color);height:1.2rem;opacity:.8;transition:all .1s ease-in-out;width:1.2em}.pro-field input:disabled,.pro-field input:disabled+label{cursor:not-allowed;opacity:.75;filter:brightness(95%)}.pro-field input:not([disabled]):hover{opacity:1}.pro-field input[type=email]:focus,.pro-field input[type=number]:focus,.pro-field input[type=text]:focus{border-color:var(--accent-color);outline:1px solid var(--accent-color)}.pro-field input[type=checkbox]:focus,.pro-field input[type=radio]:focus{outline-color:var(--accent-color);outline-width:2px}#submit-error{color:var(--form-error);display:none;font-weight:700;padding-top:1.5em;text-align:center}.pro-form.form-error #submit-error{display:block}.pro-field input.error{accent-color:var(--form-error);border:2px solid var(--form-error)}.pro-field input.error+label,.pro-field:has(input.error) label{color:var(--form-error);opacity:1}#rsvp-status-group{border-bottom:2px solid var(--modal-btn-border);font-weight:700;margin-bottom:1.5em;padding-bottom:2em;text-align:center}#rsvp-status-group .pro-field{align-items:center;display:flex;flex-wrap:wrap;gap:1.2em;justify-content:center;margin-top:1em}@media (width <= 575px){#rsvp-status-group .pro-field{flex-direction:column}#rsvp-status-group .pro-field div{width:80%}}#rsvp-status-group .pro-field div{min-width:28%;position:relative}#rsvp-status-group input{opacity:0;position:absolute;top:0;left:0;height:100%;width:100%;margin:0;cursor:pointer}#rsvp-status-group label{align-items:center;border:2px solid var(--modal-btn-text);border-radius:var(--input-border-radius);color:var(--modal-btn-text);display:flex;flex-direction:column;font-weight:700;text-transform:uppercase;justify-content:center;opacity:.6;padding:.8em;transition:all .1s ease-in-out;width:100%}#rsvp-status-group label.status-confirmed{border-color:var(--form-success);color:var(--form-success)}#rsvp-status-group label.status-declined{border-color:var(--form-error);color:var(--form-error)}#rsvp-status-group input:checked+label{background-color:var(--modal-text);color:var(--status-active-text);opacity:1;transform:scale(1.1)}#rsvp-status-group input:focus-visible+label{outline:2px solid var(--accent-color);outline-offset:2px}#rsvp-status-group input:not([disabled])+label:hover,#rsvp-status-group input:not([disabled]):hover+label{opacity:1;transform:scale(1.08)}#rsvp-status-group input:checked+label.status-confirmed{background-color:var(--form-success)}#rsvp-status-group input:checked+label.status-declined{background-color:var(--form-error)}#rsvp-success-msg,#rsvp-success-msg-demo,#rsvp-success-msg-doi,#rsvp-success-msg-email,#ty-success-msg{display:none;font-weight:700;line-height:1.6em;padding-top:.5em;text-align:center}#rsvp-success-msg,#rsvp-success-msg-demo,#ty-success-msg{padding:1.5em 0}#rsvp-success-msg-demo,#rsvp-success-msg-email{color:var(--form-success)}#rsvp-success-msg-doi{color:var(--form-error);font-size:.8em;padding-top:1em}#pro-form-submit{display:block;margin:auto;min-width:150px}.pro-form-fine{font-size:.8em;padding:.5em auto 1em;opacity:.5;text-align:center}.pro-form.form-error .pro-form-fine{opacity:0}.pro-waiting{background-color:var(--modal-btn-background);border:.2em solid var(--modal-btn-border);border-radius:var(--btn-border-radius);box-sizing:border-box;color:var(--modal-btn-text);cursor:wait;display:none;line-height:.5em;margin:auto;min-width:150px;padding:.5em 1.25em 1.2em;text-align:center;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:fit-content}@media (width > 575px){#pro-form-submit,.pro-waiting{min-width:200px}}.pro-waiting span:not(.atcb-icon-ical){animation-name:blink;animation-duration:1s;animation-iteration-count:infinite;animation-fill-mode:both;font-size:2.5em}.pro-field label span:not(.atcb-icon-ical){color:var(--form-error);font-weight:700;padding-left:2px}.pro-waiting span:not(.atcb-icon-ical):nth-child(2){animation-delay:.15s}.pro-waiting span:not(.atcb-icon-ical):nth-child(3){animation-delay:.3s}@keyframes blink{0%{opacity:.2}20%{opacity:1}100%{opacity:.2}}.pro #rsvp-sent-content{align-items:center;display:flex;flex-direction:column;gap:1.5em}#rsvp-status-group span{color:inherit}.atcb-modal-content .pro p:not(.pro-form-fine){margin:0}.atcb-modal-content .pro p.pro-pt{margin-top:1.5em}.atcb-modal-content .pro .pro-field p{font-size:.9em}.pro .btn-flex{align-items:center;display:flex}.pro .atcb-modal-btn svg{fill:none;height:1.5em;margin-right:.5em;stroke:currentcolor;width:auto}#atcb-reference{box-sizing:border-box;filter:drop-shadow(0 0 3px rgba(255 255 255 / 80%));height:auto;padding:8px 0;text-align:center;transform:translate3d(0,0,0);width:100%;z-index:15000000}#atcb-reference.fixed-ref{position:fixed;bottom:10px;right:40px;width:auto}#atcb-reference.atcb-dropup{position:absolute;margin-top:-5px}.atcb-modal-host-initialized #atcb-reference.atcb-dropup{text-align:left}:host(.atcb-dark) #atcb-reference{filter:drop-shadow(0 0 5px #000)}#atcb-reference a,#atcb-reference a:active,#atcb-reference a:visited{opacity:.4;width:150px;max-width:100%;margin:auto;display:inline-block;text-decoration:none}#atcb-reference.fixed-ref a{opacity:.6}#atcb-reference a:hover{opacity:.9;text-decoration:none}#atcb-reference svg{fill:var(--list-text)}\",\r\"round\": \":host{width:fit-content;--base-font-size-l:16px;--base-font-size-m:16px;--base-font-size-s:16px;--font:arial,helvetica,\\\"Twemoji Mozilla\\\",\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\",\\\"Noto Color Emoji\\\",\\\"EmojiOne Color\\\",\\\"Android Emoji\\\",sans-serif;--accent-color:#1e90ff;--wrapper-padding:1px;--buttonslist-gap:5px;--btn-background:#f5f5f5;--btn-hover-background:#fff;--btn-border:#d2d2d2;--btn-border-radius:500px;--btn-padding-x:1.3em;--btn-padding-y:.65em;--btn-font-weight:600;--btn-text:#333;--btn-hover-text:#000;--btn-shadow:rgba(0 0 0 / 15%) 0 4px 10px -2px,rgba(0 0 0 / 20%) 0 2px 3px -1px;--btn-hover-shadow:rgba(0 0 0 / 30%) 0 5px 15px -3px,rgba(0 0 0 / 25%) 0 3px 5px -2px;--btn-active-shadow:rgba(0 0 0 / 35%) 0 6px 15px -3px,rgba(0 0 0 / 25%) 0 4px 6px -2px;--list-background:#f5f5f5;--list-hover-background:#fff;--list-text:#333;--list-font-weight:400;--list-hover-text:#000;--list-close-background:#e5e5e5;--list-close-text:#777;--list-border-radius:11px;--list-padding:.8em 1.2em;--list-min-width:100%;--list-shadow:rgba(0 0 0 / 20%) 0 4px 13px -2px,rgba(0 0 0 / 23%) 0 2px 4px -1px;--list-modal-shadow:rgba(0 0 0 / 50%) 0 4px 30px -3px,rgba(0 0 0 / 30%) 0 2px 8px -2px;--modal-text:#000;--modal-text-align:left;--modal-text-align-rtl:right;--modal-background:#f5f5f5;--modal-border-radius:9px;--modal-shadow:drop-shadow(3px 6px 25px rgba(0 0 0 / 65%));--modal-btn-bar:#c6c8cd;--modal-btn-background:#f5f5f5;--modal-btn-secondary-background:#e2e1e6;--modal-btn-hover-background:#fff;--modal-btn-border:#d2d2d2;--modal-btn-font-weight:600;--modal-btn-text:#2e2e2e;--modal-btn-hover-text:#161616;--modal-btn-secondary-text:#666567;--modal-btn-shadow:rgba(0 0 0 / 10%) 2px 3px 10px -3px,rgba(0 0 0 / 25%) 1px 1px 8px -4px;--modal-btn-hover-shadow:rgba(0 0 0 / 35%) 3px 5px 15px -2px,rgba(0 0 0 / 20%) 2px 4px 25px -6px;--modal-headline-text-align:center;--modal-headline-text-transform:none;--input-border-radius:6px;--input-background:#fff;--status-active-text:#fff;--form-error:#c5372c;--form-success:#338a36;--date-btn-text:#1d1d1e;--date-btn-text-secondary:#3a3a3f;--date-btn-cal-day-text:#fff;--date-btn-cal-month-text:#d3d2d7;--date-btn-cal-background:#313132;--date-btn-background:#eae9ed;--date-btn-hover-background:#fff;--date-btn-headline-line-clamp:1;--date-btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 15%) 0 2px 3px -1px;--date-btn-hover-shadow:rgba(0 0 0 / 20%) 0 5px 12px -2px,rgba(0 0 0 / 20%) 0 3px 4px -2px;--checkmark-background:drop-shadow(0 0 3px #fff);--overlay-background:rgba(20 20 20 / 25%);--overlay-cursor:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23777' width='16' height='16' viewBox='0 0 122.878 122.88'%3E%3Cpath d='M1.426 8.313a4.87 4.87 0 0 1 0-6.886 4.87 4.87 0 0 1 6.886 0l53.127 53.127 53.127-53.127a4.87 4.87 0 0 1 6.887 0 4.87 4.87 0 0 1 0 6.886L68.324 61.439l53.128 53.128a4.87 4.87 0 0 1-6.887 6.886L61.438 68.326 8.312 121.453a4.87 4.87 0 0 1-6.886 0 4.87 4.87 0 0 1 0-6.886l53.127-53.128L1.426 8.313h0z'/%3E%3C/svg%3E\\\") 16 16,crosshair;--icon-ms365-color:#ea3e23;--icon-yahoo-color:#5f01d1;--icon-filter:none}:host(.atcb-dark){--btn-background:#2e2e2e;--btn-hover-background:#373737;--btn-border:#4d4d4d;--btn-text:#dedede;--btn-hover-text:#f1f1f1;--btn-shadow:rgba(255 255 255 / 5%) -3px -3px 30px -1px,rgba(0 0 0 / 40%) 2px 3px 10px -2px,rgba(0 0 0 / 40%) 1px 2px 3px -1px;--btn-hover-shadow:rgba(0 0 0 / 90%) 2px 5px 20px -4px,rgba(0 0 0 / 50%) 1px 2px 6px -2px;--btn-active-shadow:rgba(0 0 0 / 90%) 2px 5px 20px -4px,rgba(0 0 0 / 50%) 1px 2px 6px -2px;--list-background:#2e2e2e;--list-hover-background:#373737;--list-text:#dedede;--list-hover-text:#f1f1f1;--list-close-background:#282828;--list-shadow:rgba(0 0 0 / 60%) 0 4px 20px -2px,rgba(0 0 0 / 40%) 0 2px 4px -1px;--list-modal-shadow:rgba(0 0 0 / 40%) -1px 3px 30px 2px;--modal-text:#f1f1f1;--modal-background:#242424;--modal-shadow:drop-shadow(3px 6px 25px rgba(0 0 0 / 90%));--modal-btn-bar:#38383a;--modal-btn-background:#181819;--modal-btn-secondary-background:#2e2d30;--modal-btn-hover-background:#434246;--modal-btn-border:#434246;--modal-btn-text:#dbdbdb;--modal-btn-hover-text:#fff;--modal-btn-secondary-text:#b8b8b8;--modal-btn-shadow:rgba(255 255 255 / 5%) -2px -2px 10px,rgba(0 0 0 / 40%) 3px 3px 10px -2px,rgba(0 0 0 / 40%) 1px 2px 5px -1px;--input-background:#434246;--status-active-text:#000;--form-error:#db8680;--form-success:#99de9c;--date-btn-text:#ebebf0;--date-btn-text-secondary:#b5b5bd;--date-btn-cal-day-text:#101010;--date-btn-cal-month-text:#3e3e3f;--date-btn-cal-background:#c7c7cd;--date-btn-background:#363636;--date-btn-hover-background:#474747;--date-btn-shadow:rgba(0 0 0 / 60%) 0 0 20px -2px,rgba(0 0 0 / 30%) 1px 2px 3px -1px;--checkmark-background:drop-shadow(0 0 3px #0a0a0a);--overlay-background:rgba(20 20 20 / 60%);--icon-ms365-color:#ea3e23;--icon-yahoo-color:#bebebe;--icon-filter:grayscale(.2)}.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-l)}@media (width <= 991px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-m)}}@media (width <= 575px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-s)}}.atcb-initialized.atcb-buttons-list{gap:var(--buttonslist-gap)}.atcb-button-wrapper{display:block;padding:var(--wrapper-padding);position:relative}.atcb-button{align-items:center;background-color:var(--btn-background);border:1px solid var(--btn-border);border-radius:var(--btn-border-radius);box-shadow:var(--btn-shadow);color:var(--btn-text);cursor:pointer;display:flex;font-family:var(--font);font-size:1em;font-weight:var(--btn-font-weight);justify-content:center;line-height:1.5em;margin:.13em;max-width:350px;padding:var(--btn-padding-y) var(--btn-padding-x);position:relative;text-align:center;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:auto;z-index:1}.atcb-button.atcb-no-text{min-width:0;border-radius:100%;display:flex;place-content:center center;align-items:center;height:3em;width:3em;padding:0}.atcb-rtl .atcb-button{direction:rtl;text-align:right}.atcb-button:focus-visible{outline:2px solid var(--accent-color)}.atcb-button:not([disabled]):focus,.atcb-button:not([disabled]):hover{background-color:var(--btn-hover-background);box-shadow:var(--btn-hover-shadow);color:var(--btn-hover-text);margin:0;padding:calc(var(--btn-padding-y) + .13em) calc(var(--btn-padding-x) + .13em)}.atcb-button.atcb-no-text.atcb-active,.atcb-button.atcb-no-text:focus,.atcb-button.atcb-no-text:hover{height:3.26em;width:3.26em;padding:0}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay){z-index:15000000}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay,.atcb-no-text),.atcb-button.atcb-single:not(.atcb-no-text,[disabled]):focus,.atcb-button.atcb-single:not(.atcb-no-text,[disabled]):hover{background-color:var(--btn-hover-background);box-shadow:var(--btn-active-shadow);color:var(--btn-hover-text);margin:0;padding:calc(var(--btn-padding-y) + .13em) calc(var(--btn-padding-x) + .13em)}.atcb-button.atcb-active.atcb-no-text:not(.atcb-modal-style,.atcb-dropoverlay),.atcb-button.atcb-single.atcb-no-text:not([disabled]):focus,.atcb-button.atcb-single.atcb-no-text:not([disabled]):hover{background-color:var(--btn-hover-background);box-shadow:var(--btn-active-shadow);color:var(--btn-hover-text);margin:0;padding:calc(var(--btn-padding-y) + .28em) calc(var(--btn-padding-x) + .13em)}.atcb-button.atcb-dropup::after,.atcb-button:not(.atcb-modal-style,.atcb-dropoverlay,.atcb-dropup)::before{content:\\\"\\\";width:0;height:0;position:absolute;left:0;right:0;margin:0 auto}.atcb-button:not(.atcb-modal-style,.atcb-dropoverlay,.atcb-dropup)::before{top:100%;border:0 solid transparent;border-bottom:none;border-top-color:var(--btn-border)}.atcb-button.atcb-dropup::after{bottom:100%;border:0 solid transparent;border-top:none;border-bottom-color:var(--btn-border)}.atcb-button.atcb-active.atcb-dropup::after,.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay,.atcb-dropup)::before{border-width:.35em;transition:border-width .1s linear .1s}.atcb-button.atcb-active.atcb-dropoverlay{z-index:14000090}.atcb-icon{flex-grow:0;flex-shrink:0;height:1em;line-height:1em;margin-right:.8em;width:1em}.atcb-rtl .atcb-icon{margin-right:0;margin-left:.8em}.atcb-no-text .atcb-icon{margin-right:0;margin-left:0}.atcb-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-text{overflow-wrap:anywhere}.atcb-dropdown-anchor{bottom:-15px;height:0;width:100%;opacity:0;position:absolute}.atcb-list-wrapper{box-sizing:border-box;font-weight:var(--list-font-weight);position:absolute;z-index:14000090;width:auto}.atcb-list-wrapper:not(.atcb-dropup,.atcb-dropoverlay){animation:list-entrance-bottom .2s ease 0s 1 normal forwards}.atcb-list-wrapper.atcb-dropup{animation:list-entrance-top .2s ease 0s 1 normal forwards}.atcb-list-wrapper.atcb-dropoverlay{animation:list-entrance-center .2s ease 0s 1 normal forwards;z-index:15000000}@keyframes list-entrance-bottom{0%{opacity:0;transform:translateY(250px)}100%{opacity:1;transform:translateY(0)}}@keyframes list-entrance-top{0%{opacity:0;transform:translateY(-250px)}100%{opacity:1;transform:translateY(0)}}@keyframes list-entrance-center{0%{opacity:0;transform:scaleY(1)}1%{opacity:1;transform:scaleY(0)}100%{opacity:1;transform:scaleY(1)}}.atcb-list{background-color:var(--list-background);border-radius:var(--list-border-radius);box-sizing:border-box;box-shadow:var(--list-shadow);color:var(--list-text);display:block;font-family:var(--font);min-width:var(--list-min-width);position:relative;user-select:none;-webkit-user-select:none;width:fit-content}.atcb-list-item{align-items:center;background-color:var(--list-background);box-sizing:border-box;cursor:pointer;display:flex;font-size:1em;line-height:1.75em;padding:var(--list-padding);text-align:left;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.atcb-rtl .atcb-list-item{direction:rtl;text-align:right}.atcb-list-item:hover{background-color:var(--list-hover-background);color:var(--list-hover-text)}.atcb-list-item:focus-visible{background-color:var(--list-hover-background);color:var(--accent-color);outline:0}.atcb-list-item:last-child{border-radius:0 0 var(--list-border-radius) var(--list-border-radius)}.atcb-list-item:first-child{border-radius:var(--list-border-radius) var(--list-border-radius) 0 0}.atcb-list-item:only-child{border-radius:var(--list-border-radius)}.atcb-list.atcb-modal{box-shadow:var(--list-modal-shadow)}.atcb-list-item .atcb-icon{margin:0 auto}.atcb-list-item .atcb-icon+.atcb-text{margin-left:.7em;width:100%}.atcb-rtl .atcb-list-item .atcb-icon+.atcb-text{margin-left:0;margin-right:.7em}.atcb-list-item-close{background-color:var(--list-close-background)}.atcb-list-item.atcb-list-item-close:not(:focus-visible){color:var(--list-close-text)}.atcb-list-item-close svg{fill:currentcolor}.atcb-modal{display:block;margin:auto;width:auto;min-width:auto;position:relative;z-index:14000090}.atcb-modal-box{filter:var(--modal-shadow);color:var(--modal-text);cursor:default;box-sizing:border-box;font-family:var(--font);line-height:1.5em;text-align:var(--modal-text-align);user-select:none;-webkit-user-select:none;touch-action:manipulation;width:100%;margin-bottom:20px;-webkit-tap-highlight-color:transparent}@media (width > 575px){.atcb-modal-box{width:32em}}.atcb-modal-box.atcb-rtl{text-align:var(--modal-text-align-rtl);direction:rtl;padding:1.25em 1em 1.25em 2em}.atcb-modal-icon{height:2.5em;width:2.5em;border-radius:100%;background-color:var(--modal-background);padding:1.75em;margin:auto}.atcb-modal-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-modal-headline{background-color:var(--modal-background);border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;font-size:1.3em;font-weight:600;line-height:1.5em;padding:1.8em 1.5em 1.3em;text-transform:var(--modal-headline-text-transform);text-align:var(--modal-headline-text-align)}.atcb-modal-icon+.atcb-modal-headline{margin-top:-2.6em;padding-top:2.6em}.atcb-modal-content{background-color:var(--modal-background);font-size:1em;padding:.3em 2em 2.2em}.atcb-modal-icon+.atcb-modal-content{border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;margin-top:-2.6em;padding-top:2.6em}.atcb-modal-content-subevents{margin:auto;width:fit-content}@media (width <= 575px){.atcb-modal-headline{padding:1.8em 1em 1em}.atcb-modal-content{padding:.3em 1.5em 1.5em}.atcb-modal-icon+.atcb-modal-content{padding-top:1.8em}}.atcb-modal-buttons{background-color:var(--modal-btn-bar);border-radius:0 0 var(--modal-border-radius) var(--modal-border-radius);box-sizing:border-box;padding:.6em;text-align:center;width:100%;display:flex;justify-content:center;flex-flow:row-reverse wrap;align-items:center}a.atcb-modal-btn,button.atcb-modal-btn{background-color:var(--modal-btn-secondary-background);border:0;border-radius:var(--btn-border-radius);box-shadow:var(--modal-btn-shadow);color:var(--modal-btn-secondary-text);cursor:pointer;display:inline-block;font-family:var(--font);font-size:.9em;font-weight:var(--modal-btn-font-weight);line-height:1em;margin:.625em;padding:1em 1.25em;position:relative;text-align:center;text-decoration:none;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}a.atcb-modal-btn.btn-small,button.atcb-modal-btn.btn-small{padding:.6em .8em}a.atcb-modal-btn.atcb-modal-btn-primary,button.atcb-modal-btn.atcb-modal-btn-primary{background-color:var(--modal-btn-background);color:var(--modal-btn-text)}a.atcb-modal-btn.atcb-modal-btn-border,button.atcb-modal-btn.atcb-modal-btn-border{border:1px solid var(--modal-btn-border)}a.atcb-modal-btn:focus-visible,button.atcb-modal-btn:focus-visible{background-color:var(--modal-btn-hover-background);outline:2px solid var(--accent-color)}a.atcb-modal-btn:disabled,button.atcb-button:disabled,button.atcb-modal-btn:disabled,button.atcb-subevent-btn:disabled{cursor:not-allowed;opacity:.75;filter:brightness(95%);border-style:dashed;box-shadow:none}a.atcb-modal-btn:not([disabled]):hover,button.atcb-modal-btn:not([disabled]):hover{background-color:var(--modal-btn-hover-background);box-shadow:var(--modal-btn-hover-shadow);color:var(--modal-btn-hover-text);text-decoration:none}.atcb-subevent-btn{display:flex;align-items:flex-start;cursor:pointer;font-family:var(--font);font-size:1em;box-shadow:var(--date-btn-shadow);background-color:var(--date-btn-background);border:0;border-radius:7px 4px 4px 7px;padding:0;margin:0;touch-action:manipulation;position:relative;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:100%}.atcb-subevent-btn:hover{align-items:center}.atcb-subevent-btn:focus,.atcb-subevent-btn:hover{background-color:var(--date-btn-hover-background);box-shadow:var(--date-btn-hover-shadow)}.atcb-subevent-btn:focus-visible{outline:2px solid var(--accent-color)}.atcb-subevent-btn+.atcb-subevent-btn{margin-top:30px}.atcb-date-btn-left{border-radius:4px 0 0 4px;align-self:stretch;background-color:var(--date-btn-cal-background);color:var(--date-btn-hover-background);padding:.7em .8em .8em;width:2.7em;align-items:center;display:flex;flex-direction:column;flex-shrink:0}.atcb-rtl .atcb-date-btn-left{border-radius:0 4px 4px 0}.atcb-subevent-btn:hover .atcb-date-btn-left{opacity:.8}.atcb-date-btn-day{color:var(--date-btn-cal-day-text);font-weight:400;font-size:2em;word-break:keep-all;padding-bottom:.1em}.atcb-initialized[lang=ja] .atcb-date-btn-day,.atcb-initialized[lang=ko] .atcb-date-btn-day,.atcb-initialized[lang=zh] .atcb-date-btn-day{font-size:1.3em}.atcb-date-btn-month{color:var(--date-btn-cal-month-text);font-weight:600;font-size:1em}.atcb-date-btn-right{position:relative;color:var(--date-btn-text);min-width:13.5em;overflow-wrap:anywhere}.atcb-subevent-btn .atcb-date-btn-right{width:100%}.atcb-date-btn-details{opacity:1;padding:.7em .8em;text-align:left}.atcb-rtl .atcb-date-btn-details{text-align:right}.atcb-date-btn-hover{position:absolute;top:0;left:0;width:100%;opacity:0;height:100%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:1em;padding:.4em .7em;box-sizing:border-box}.atcb-subevent-btn:hover .atcb-date-btn-details{opacity:0}.atcb-subevent-btn:hover .atcb-date-btn-hover{opacity:1}.atcb-date-btn-headline{font-weight:600;font-size:.9em;margin-bottom:.5em;overflow:hidden;display:-webkit-box;-webkit-line-clamp:var(--date-btn-headline-line-clamp);line-clamp:var(--date-btn-headline-line-clamp);-webkit-box-orient:vertical}.atcb-date-btn-content{display:flex;align-items:flex-start;font-size:.8em;color:var(--date-btn-text-secondary)}.atcb-date-btn-content.atcb-date-btn-cancelled{color:var(--form-error);font-weight:700}.atcb-date-btn-content-location{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical;word-break:break-all}.atcb-date-btn-content-icon{display:inline-block;height:.8em;margin-right:.4em;margin-left:0;width:.9em;flex-shrink:0}.atcb-rtl .atcb-date-btn-content-icon{margin-right:0;margin-left:.4em}.atcb-initialized[lang=ja] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=ko] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=zh] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon{margin-top:.15em}.atcb-date-btn-content-icon svg{height:100%;fill:currentcolor;width:100%}.atcb-date-btn-content+.atcb-date-btn-content{margin-top:.3em}.atcb-date-btn-content-text span:not(.atcb-icon-ical){padding-right:.3em;display:inline-block}.atcb-checkmark{display:none}.atcb-saved .atcb-checkmark{box-sizing:content-box;color:var(--btn-text);display:block;position:absolute;top:-.9em;right:-.5em;padding:.5em;border-radius:100%;height:1.2em}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay) .atcb-checkmark,.atcb-button:focus .atcb-checkmark,.atcb-button:hover .atcb-checkmark{top:-.77em;right:-.37em}.atcb-checkmark svg{height:100%;filter:var(--checkmark-background);width:auto}#atcb-bgoverlay{backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);background-color:var(--overlay-background);border:0;box-sizing:border-box;display:flex;height:calc(100vh + 100px);inset-inline:0;left:0;right:0;top:0;min-height:100%;min-width:100%;overflow-y:auto;padding:20px 20px 130px;position:fixed;width:100vw;z-index:14000000}#atcb-bgoverlay:not(dialog){animation:atcb-bgoverlay-animate .2s ease 0s 1 normal forwards;opacity:0}#atcb-bgoverlay.atcb-no-bg{animation:none;backdrop-filter:none;-webkit-backdrop-filter:none;opacity:1;background-color:transparent}@keyframes atcb-bgoverlay-animate{0%{opacity:0}100%{opacity:1}}#atcb-bgoverlay.atcb-click:hover{cursor:var(--overlay-cursor)}.atcb-icon-outlookcom,.atcb-icon.atcb-icon-ms365{padding-bottom:.05em}.atcb-icon.atcb-icon-apple,.atcb-icon.atcb-icon-ical{padding-bottom:.15em}.atcb-icon.atcb-icon-trigger{padding-bottom:.15em}.atcb-icon.atcb-icon-rsvp{height:1.5em;width:1.5em}.atcb-icon.atcb-icon-apple svg{fill:currentcolor}.atcb-icon.atcb-icon-ical svg{fill:currentcolor}.atcb-icon.atcb-icon-ms365 svg{fill:var(--icon-ms365-color)}.atcb-icon.atcb-icon-yahoo svg{fill:var(--icon-yahoo-color)}.atcb-icon.atcb-icon-google svg,.atcb-icon.atcb-icon-msteams svg,.atcb-icon.atcb-icon-outlookcom svg{filter:var(--icon-filter)}.rsvp-inline-wrapper{filter:none;min-width:100%;margin-bottom:0}.atcb-modal-content.no-headline{border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;padding-top:1.8em}.rsvp-inline-wrapper .atcb-modal-content,.rsvp-inline-wrapper .atcb-modal-headline,.rsvp-inline-wrapper.atcb-modal-box{background-color:transparent;border-radius:0;box-sizing:border-box;padding:0;width:100%}.rsvp-inline-wrapper .atcb-modal-headline{padding-bottom:1.5em}.pro{text-align:center}.pro ol,.pro ul{margin:auto;text-align:left;width:fit-content}.pro a:not(.atcb-modal-btn),.pro a:not(.atcb-modal-btn):active,.pro a:not(.atcb-modal-btn):visited{color:var(--modal-btn-text);text-decoration:underline;text-decoration-thickness:2px;text-decoration-color:var(--accent-color)}.pro a:not(.atcb-modal-btn):hover{color:var(--accent-color);text-decoration:none}.pro .pro-share-buttons{display:flex;flex-wrap:wrap;justify-content:center}.pro #rsvp-atcb{display:flex;flex-wrap:wrap;gap:.4em}.pro-form{text-align:left}.pro-form:not(.no-intro){border-top:1px solid var(--modal-btn-border);margin-top:1.5em;padding-top:1.5em}.pro-form.no-intro:not(.no-headline){padding-top:.5em}.pro-field+.pro-field{padding-top:1.3em}.pro-field-type-label+.pro-field-type-radio{padding-top:0}.pro-field-type-checkbox,.pro-field-type-radio div{align-items:center;display:flex}.pro-field-type-checkbox input,.pro-field-type-radio input{cursor:pointer}.pro-field label{display:block;font-size:.9em;opacity:.7}.pro-field-type-checkbox label,.pro-field-type-radio label{cursor:pointer;opacity:.8;padding-left:.3em}.pro-field input[type=email],.pro-field input[type=number],.pro-field input[type=text]{background-color:var(--input-background);border:1px solid var(--modal-btn-border);border-radius:var(--input-border-radius);box-sizing:border-box;caret-color:var(--accent-color);color:var(--modal-text);font-size:.9em;opacity:.8;padding:.7em;transition:all .1s ease-in-out;width:100%}.pro-field input[type=checkbox],.pro-field input[type=radio]{accent-color:var(--accent-color);height:1.2rem;opacity:.8;transition:all .1s ease-in-out;width:1.2em}.pro-field input:disabled,.pro-field input:disabled+label{cursor:not-allowed;opacity:.75;filter:brightness(95%)}.pro-field input:not([disabled]):hover{opacity:1}.pro-field input[type=email]:focus,.pro-field input[type=number]:focus,.pro-field input[type=text]:focus{border-color:var(--accent-color);outline:1px solid var(--accent-color)}.pro-field input[type=checkbox]:focus,.pro-field input[type=radio]:focus{outline-color:var(--accent-color);outline-width:2px}#submit-error{color:var(--form-error);display:none;font-weight:700;padding-top:1.5em;text-align:center}.pro-form.form-error #submit-error{display:block}.pro-field input.error{accent-color:var(--form-error);border:2px solid var(--form-error)}.pro-field input.error+label,.pro-field:has(input.error) label{color:var(--form-error);opacity:1}#rsvp-status-group{border-bottom:1px solid var(--modal-btn-border);font-weight:700;margin-bottom:1.5em;padding-bottom:2em;text-align:center}#rsvp-status-group .pro-field{align-items:center;display:flex;flex-wrap:wrap;gap:1.2em;justify-content:center;margin-top:1em}@media (width <= 575px){#rsvp-status-group .pro-field{flex-direction:column}#rsvp-status-group .pro-field div{width:80%}}#rsvp-status-group .pro-field div{min-width:28%;position:relative}#rsvp-status-group input{opacity:0;position:absolute;top:0;left:0;height:100%;width:100%;margin:0;cursor:pointer}#rsvp-status-group label{align-items:center;border:1px solid var(--modal-btn-text);border-radius:var(--input-border-radius);box-shadow:var(--btn-shadow);color:var(--modal-btn-text);display:flex;flex-direction:column;font-weight:700;text-transform:uppercase;justify-content:center;opacity:.6;padding:.8em;transition:all .1s ease-in-out;width:100%}#rsvp-status-group label.status-confirmed{border-color:var(--form-success);color:var(--form-success)}#rsvp-status-group label.status-declined{border-color:var(--form-error);color:var(--form-error)}#rsvp-status-group input:checked+label{background-color:var(--modal-text);box-shadow:var(--btn-hover-shadow);color:var(--status-active-text);opacity:1;transform:scale(1.08)}#rsvp-status-group input:focus-visible+label{outline:2px solid var(--accent-color);outline-offset:2px}#rsvp-status-group input:not([disabled])+label:hover,#rsvp-status-group input:not([disabled]):hover+label{box-shadow:var(--btn-hover-shadow);opacity:1;transform:scale(1.08)}#rsvp-status-group input:checked+label.status-confirmed{background-color:var(--form-success)}#rsvp-status-group input:checked+label.status-declined{background-color:var(--form-error)}#rsvp-success-msg,#rsvp-success-msg-demo,#rsvp-success-msg-doi,#rsvp-success-msg-email,#ty-success-msg{display:none;font-weight:700;line-height:1.6em;padding-top:.5em;text-align:center}#rsvp-success-msg,#rsvp-success-msg-demo,#ty-success-msg{padding:1.5em 0}#rsvp-success-msg-demo,#rsvp-success-msg-email{color:var(--form-success)}#rsvp-success-msg-doi{color:var(--form-error);padding-top:1em;font-size:.8em}#pro-form-submit{display:block;margin:auto;min-width:150px}.pro-form-fine{font-size:.8em;margin:.5em auto 1em;opacity:.5;text-align:center}.pro-form.form-error .pro-form-fine{opacity:0}.pro-waiting{background-color:var(--modal-btn-background);border:1px solid var(--modal-btn-border);border-radius:var(--btn-border-radius);box-sizing:border-box;color:var(--modal-btn-text);cursor:wait;display:none;line-height:.5em;margin:auto;min-width:150px;padding:.5em 1.25em 1.2em;text-align:center;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:fit-content}@media (width > 575px){#pro-form-submit,.pro-waiting{min-width:200px}}.pro-waiting span:not(.atcb-icon-ical){animation-name:blink;animation-duration:1s;animation-iteration-count:infinite;animation-fill-mode:both;font-size:2.5em}.pro-field label span:not(.atcb-icon-ical){color:var(--form-error);font-weight:700;padding-left:2px}.pro-waiting span:not(.atcb-icon-ical):nth-child(2){animation-delay:.15s}.pro-waiting span:not(.atcb-icon-ical):nth-child(3){animation-delay:.3s}@keyframes blink{0%{opacity:.2}20%{opacity:1}100%{opacity:.2}}.pro #rsvp-sent-content{align-items:center;display:flex;flex-direction:column;gap:1.5em}#rsvp-status-group span{color:inherit}.atcb-modal-content .pro p:not(.pro-form-fine){margin:0}.atcb-modal-content .pro p.pro-pt{margin-top:1.5em}.atcb-modal-content .pro .pro-field p{font-size:.9em}.pro .btn-flex{align-items:center;display:flex}.pro .atcb-modal-btn svg{fill:none;height:1.5em;margin-right:.5em;stroke:currentcolor;width:auto}#atcb-reference{box-sizing:border-box;filter:drop-shadow(0 0 3px rgba(255 255 255 / 80%));height:auto;padding:8px 0;text-align:center;transform:translate3d(0,0,0);width:100%;z-index:15000000}#atcb-reference.fixed-ref{position:fixed;bottom:10px;right:40px;width:auto}#atcb-reference.atcb-dropup{position:absolute;margin-top:-1px}.atcb-modal-host-initialized #atcb-reference.atcb-dropup{text-align:left}:host(.atcb-dark) #atcb-reference{filter:drop-shadow(0 0 5px #000)}#atcb-reference a,#atcb-reference a:active,#atcb-reference a:visited{opacity:.4;width:150px;max-width:100%;margin:auto;display:inline-block;text-decoration:none}#atcb-reference.fixed-ref a{opacity:.6}#atcb-reference a:hover{opacity:.9;text-decoration:none}#atcb-reference svg{fill:var(--list-text)}\",\r\"neumorphism\": \":host{width:fit-content;--base-font-size-l:16px;--base-font-size-m:16px;--base-font-size-s:16px;--font:arial,helvetica,\\\"Twemoji Mozilla\\\",\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\",\\\"Noto Color Emoji\\\",\\\"EmojiOne Color\\\",\\\"Android Emoji\\\",sans-serif;--accent-color:#1e90ff;--wrapper-padding:0px;--buttonslist-gap:5px;--btn-background:#f5f5f5;--btn-hover-background:#fff;--btn-font-weight:600;--btn-text:#444;--btn-hover-text:#111;--btn-border-radius:15px;--btn-padding-x:1.2em;--btn-padding-y:1em;--btn-shadow:rgba(40 40 40 / 30%) 0.3em 0.3em 0.6em,rgba(255 255 255 / 70%) -0.1em -0.1em 0.3em;--btn-hover-shadow:rgba(40 40 40 / 50%) 0.4em 0.4em 0.8em,rgba(255 255 255 / 90%) -0.2em -0.2em 0.5em;--btn-active-shadow:inset rgba(40 40 40 / 40%) 0.15em 0.15em 0.3em,inset rgba(255 255 255 / 90%) -0.2em -0.2em 0.5em;--list-background:#f5f5f5;--list-hover-background:#fff;--list-text:#444;--list-font-weight:400;--list-hover-text:#111;--list-close-background:#e5e5e5;--list-close-text:#777;--list-border-radius:11px;--list-padding:1em;--list-min-width:100%;--list-shadow:rgba(40 40 40 / 30%) 0.4em 0.4em 0.8em,rgba(255 255 255 / 80%) -0.2em -0.2em 0.5em;--modal-text:#111;--modal-text-align:left;--modal-text-align-rtl:right;--modal-background:#f5f5f5;--modal-border-radius:9px;--modal-shadow:drop-shadow(5px 8px 30px rgba(0 0 0 / 70%));--modal-btn-bar:#c6c8cd;--modal-btn-background:#f5f5f5;--modal-btn-secondary-background:#e2e1e6;--modal-btn-hover-background:#fff;--modal-btn-font-weight:600;--modal-btn-text:#2e2e2e;--modal-btn-hover-text:#222;--modal-btn-secondary-text:#666567;--modal-btn-shadow:rgba(40 40 40 / 15%) 0.2em 0.2em 0.4em,rgba(255 255 255 / 30%) -0.1em -0.1em 0.3em;--modal-btn-hover-shadow:rgba(40 40 40 / 40%) 0.4em 0.4em 0.7em,rgba(255 255 255 / 70%) -0.2em -0.2em 0.5em;--modal-headline-text-align:center;--modal-headline-text-transform:none;--input-border-radius:6px;--input-background:#fff;--status-active-text:#fff;--form-error:#c5372c;--form-success:#338a36;--date-btn-text:#1d1d1e;--date-btn-text-secondary:#3a3a3f;--date-btn-cal-day-text:#fff;--date-btn-cal-month-text:#d3d2d7;--date-btn-cal-background:#313132;--date-btn-background:#e3e5ea;--date-btn-hover-background:#fff;--date-btn-headline-line-clamp:1;--date-btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 15%) 0 2px 3px -1px;--date-btn-hover-shadow:rgba(0 0 0 / 20%) 0 5px 12px -2px,rgba(0 0 0 / 20%) 0 3px 4px -2px;--checkmark-background:drop-shadow(0 0 3px #fff);--overlay-background:#dcdcdc;--overlay-cursor:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23777' width='16' height='16' viewBox='0 0 122.878 122.88'%3E%3Cpath d='M1.426 8.313a4.87 4.87 0 0 1 0-6.886 4.87 4.87 0 0 1 6.886 0l53.127 53.127 53.127-53.127a4.87 4.87 0 0 1 6.887 0 4.87 4.87 0 0 1 0 6.886L68.324 61.439l53.128 53.128a4.87 4.87 0 0 1-6.887 6.886L61.438 68.326 8.312 121.453a4.87 4.87 0 0 1-6.886 0 4.87 4.87 0 0 1 0-6.886l53.127-53.128L1.426 8.313h0z'/%3E%3C/svg%3E\\\") 16 16,crosshair;--icon-ms365-color:#ea3e23;--icon-yahoo-color:#5f01d1;--icon-filter:none}:host(.atcb-dark){--btn-background:#2e2e2e;--btn-hover-background:#373737;--btn-text:#dedede;--btn-hover-text:#f1f1f1;--btn-shadow:rgba(0 0 0 / 70%) 0.3em 0.3em 0.6em,rgba(230 230 230 / 20%) -0.05em -0.05em 0.4em;--btn-hover-shadow:rgba(0 0 0 / 90%) 0.4em 0.4em 0.9em,rgba(230 230 230 / 25%) -0.08em -0.08em 0.6em -0.1em;--btn-active-shadow:inset rgba(0 0 0 / 80%) 0.15em 0.15em 0.25em,inset rgba(230 230 230 / 10%) -0.2em -0.2em 0.7em -0.1em;--list-background:#2e2e2e;--list-hover-background:#373737;--list-text:#dedede;--list-hover-text:#f1f1f1;--list-close-background:#282828;--list-shadow:rgba(0 0 0) 0.3em 0.3em 1em,rgba(230 230 230 / 40%) -0.08em -0.08em 0.6em;--modal-text:#f1f1f1;--modal-background:#242424;--modal-shadow:drop-shadow(5px 8px 35px rgba(0 0 0 / 90%));--modal-btn-bar:#38383a;--modal-btn-background:#181819;--modal-btn-secondary-background:#2e2d30;--modal-btn-hover-background:#434246;--modal-btn-text:#dbdbdb;--modal-btn-hover-text:#fff;--modal-btn-secondary-text:#b8b8b8;--modal-btn-shadow:rgba(0 0 0 / 60%) 0.2em 0.2em 0.6em,rgba(230 230 230 / 15%) -0.1em -0.1em 0.4em;--modal-btn-hover-shadow:rgba(0 0 0 / 80%) 0.3em 0.3em 0.8em,rgba(230 230 230 / 15%) -0.1em -0.1em 0.6em;--input-background:#434246;--status-active-text:#000;--form-error:#db8680;--form-success:#99de9c;--date-btn-text:#ebebf0;--date-btn-text-secondary:#b5b5bd;--date-btn-cal-day-text:#101010;--date-btn-cal-month-text:#3e3e3f;--date-btn-cal-background:#c7c7cd;--date-btn-background:#363636;--date-btn-hover-background:#474747;--date-btn-shadow:rgba(0 0 0 / 70%) 0.2em 0.2em 0.8em,rgba(230 230 230 / 15%) -0.1em -0.1em 0.5em;--date-btn-hover-shadow:rgba(0 0 0) 0.3em 0.4em 1em,rgba(230 230 230 / 15%) -0.2em -0.2em 0.8em;--checkmark-background:drop-shadow(0 0 3px #0a0a0a);--overlay-background:#141414;--icon-ms365-color:#ea3e23;--icon-yahoo-color:#bebebe;--icon-filter:grayscale(0.2)}.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-l)}@media (width <= 991px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-m)}}@media (width <= 575px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-s)}}.atcb-initialized.atcb-buttons-list{gap:var(--buttonslist-gap)}.atcb-button-wrapper{display:block;padding:var(--wrapper-padding);position:relative}.atcb-button{align-items:center;background-color:var(--btn-background);border:0;border-radius:var(--btn-border-radius);box-shadow:var(--btn-shadow);color:var(--btn-text);cursor:pointer;display:flex;font-family:var(--font);font-size:1em;font-weight:var(--btn-font-weight);justify-content:center;line-height:1.5em;margin:0;max-width:350px;padding:var(--btn-padding-y) var(--btn-padding-x);position:relative;text-align:center;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:auto;transition:box-shadow .1s ease-in-out,background-color .1s ease-in-out;z-index:1}.atcb-button.atcb-no-text{min-width:0;border-radius:100%;display:flex;place-content:center center;align-items:center;height:3em;width:3em;padding:0}.atcb-rtl .atcb-button{direction:rtl;text-align:right}.atcb-button:focus-visible{outline:2px solid var(--accent-color)}.atcb-button:not([disabled]):focus,.atcb-button:not([disabled]):hover{background-color:var(--btn-hover-background);box-shadow:var(--btn-hover-shadow);color:var(--btn-hover-text)}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay){z-index:15000000}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay),.atcb-button.atcb-single:not([disabled]):focus,.atcb-button.atcb-single:not([disabled]):hover{background-color:var(--btn-hover-background);box-shadow:var(--btn-active-shadow);color:var(--btn-hover-text)}.atcb-button.atcb-active.atcb-dropoverlay{z-index:14000090}.atcb-icon{flex-grow:0;flex-shrink:0;height:1em;line-height:1em;margin-right:.8em;width:1em}.atcb-rtl .atcb-icon{margin-right:0;margin-left:.8em}.atcb-no-text .atcb-icon{margin-right:0;margin-left:0}.atcb-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-text{overflow-wrap:anywhere}.atcb-dropdown-anchor{bottom:-15px;height:0;width:100%;opacity:0;position:absolute}.atcb-list-wrapper{box-sizing:border-box;font-weight:var(--list-font-weight);position:absolute;width:auto;animation:list-entrance .6s ease 0s 1 normal forwards;z-index:15000000}@keyframes list-entrance{0%{opacity:0}100%{opacity:1}}.atcb-list{background-color:var(--list-background);border-radius:var(--list-border-radius);box-sizing:border-box;box-shadow:var(--list-shadow);color:var(--list-text);display:block;font-family:var(--font);min-width:var(--list-min-width);position:relative;user-select:none;-webkit-user-select:none;width:fit-content}.atcb-list-item{box-shadow:none;align-items:center;background-color:var(--list-background);box-sizing:border-box;cursor:pointer;display:flex;font-size:1em;line-height:1.75em;padding:var(--list-padding);text-align:left;touch-action:manipulation;-webkit-tap-highlight-color:transparent;transition:box-shadow .15s ease-in-out,padding .15s ease-in-out,margin .15s ease-in-out}.atcb-rtl .atcb-list-item{direction:rtl;text-align:right}.atcb-list-item:hover{box-shadow:var(--btn-shadow);background-color:var(--list-hover-background);color:var(--list-hover-text);padding:calc(var(--list-padding) + .2em);margin:-.2em;position:relative;z-index:15000010}.atcb-list-item:focus-visible{box-shadow:var(--btn-shadow);background-color:var(--list-hover-background);color:var(--accent-color);padding:calc(var(--list-padding) + .2em);margin:-.2em;position:relative;z-index:15000010;outline:0}.atcb-list-item:last-child{border-radius:0 0 var(--list-border-radius) var(--list-border-radius)}.atcb-list-item:first-child{border-radius:var(--list-border-radius) var(--list-border-radius) 0 0}.atcb-list-item:only-child{border-radius:var(--list-border-radius)}.atcb-list-item .atcb-icon{margin:0 auto}.atcb-list-item .atcb-icon+.atcb-text{margin-left:.7em;width:100%}.atcb-rtl .atcb-list-item .atcb-icon+.atcb-text{margin-left:0;margin-right:.7em}.atcb-list-item-close{background-color:var(--list-close-background)}.atcb-list-item.atcb-list-item-close:not(:focus-visible){color:var(--list-close-text)}.atcb-list-item-close svg{fill:currentcolor}.atcb-modal{display:block;margin:auto;width:auto;min-width:auto;position:relative;z-index:14000090}.atcb-modal-box{animation:list-entrance .6s ease 0s 1 normal forwards;filter:var(--modal-shadow);color:var(--modal-text);cursor:default;box-sizing:border-box;font-family:var(--font);line-height:1.5em;text-align:var(--modal-text-align);user-select:none;-webkit-user-select:none;touch-action:manipulation;width:100%;margin-bottom:20px;-webkit-tap-highlight-color:transparent}@media (width > 575px){.atcb-modal-box{width:32em}}.atcb-modal-box.atcb-rtl{text-align:var(--modal-text-align-rtl);direction:rtl;padding:1.25em 1em 1.25em 2em}.atcb-modal-icon{height:2.5em;width:2.5em;border-radius:100%;background-color:var(--modal-background);padding:1.75em;margin:auto}.atcb-modal-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-modal-headline{background-color:var(--modal-background);border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;font-size:1.3em;font-weight:600;line-height:1.5em;padding:1.8em 1.5em 1.3em;text-transform:var(--modal-headline-text-transform);text-align:var(--modal-headline-text-align)}.atcb-modal-icon+.atcb-modal-headline{margin-top:-2.6em;padding-top:2.6em}.atcb-modal-content{background-color:var(--modal-background);font-size:1em;padding:.3em 2em 2.2em}.atcb-modal-content-subevents{margin:auto;width:fit-content}.atcb-modal-icon+.atcb-modal-content{border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;margin-top:-2.6em;padding-top:2.6em}@media (width <= 575px){.atcb-modal-headline{padding:1.8em 1em 1em}.atcb-modal-content{padding:.3em 1.5em 1.5em}.atcb-modal-icon+.atcb-modal-content{padding-top:1.8em}}.atcb-modal-buttons{background-color:var(--modal-btn-bar);border-radius:0 0 var(--modal-border-radius) var(--modal-border-radius);box-sizing:border-box;padding:.6em;text-align:center;width:100%;display:flex;justify-content:center;flex-flow:row-reverse wrap;align-items:center}a.atcb-modal-btn,button.atcb-modal-btn{background-color:var(--modal-btn-secondary-background);border:0;border-radius:var(--btn-border-radius);box-shadow:var(--modal-btn-shadow);color:var(--modal-btn-secondary-text);cursor:pointer;display:inline-block;font-family:var(--font);font-size:.9em;font-weight:var(--modal-btn-font-weight);line-height:1em;margin:.625em;padding:1em 1.25em;position:relative;text-align:center;text-decoration:none;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}a.atcb-modal-btn.btn-small,button.atcb-modal-btn.btn-small{padding:.6em .8em}a.atcb-modal-btn.atcb-modal-btn-primary,button.atcb-modal-btn.atcb-modal-btn-primary{background-color:var(--modal-btn-background);color:var(--modal-btn-text)}a.atcb-modal-btn:focus-visible,button.atcb-modal-btn:focus-visible{background-color:var(--modal-btn-hover-background);outline:2px solid var(--accent-color)}a.atcb-modal-btn:disabled,button.atcb-button:disabled,button.atcb-modal-btn:disabled,button.atcb-subevent-btn:disabled{cursor:not-allowed;opacity:.75;filter:brightness(95%);border-style:dashed;box-shadow:none}a.atcb-modal-btn:not([disabled]):hover,button.atcb-modal-btn:not([disabled]):hover{background-color:var(--modal-btn-hover-background);box-shadow:var(--modal-btn-hover-shadow);color:var(--modal-btn-hover-text);text-decoration:none}.atcb-subevent-btn{display:flex;align-items:flex-start;cursor:pointer;font-family:var(--font);font-size:1em;box-shadow:var(--date-btn-shadow);background-color:var(--date-btn-background);border:0;border-radius:7px 4px 4px 7px;padding:0;margin:0;touch-action:manipulation;position:relative;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:100%}.atcb-subevent-btn:hover{align-items:center}.atcb-subevent-btn:focus,.atcb-subevent-btn:hover{background-color:var(--date-btn-hover-background);box-shadow:var(--date-btn-hover-shadow)}.atcb-subevent-btn:focus-visible{outline:2px solid var(--accent-color)}.atcb-subevent-btn+.atcb-subevent-btn{margin-top:30px}.atcb-date-btn-left{border-radius:4px 0 0 4px;align-self:stretch;background-color:var(--date-btn-cal-background);color:var(--date-btn-hover-background);padding:.7em .8em .8em;width:2.7em;align-items:center;display:flex;flex-direction:column;flex-shrink:0}.atcb-rtl .atcb-date-btn-left{border-radius:0 4px 4px 0}.atcb-subevent-btn:hover .atcb-date-btn-left{opacity:.8}.atcb-date-btn-day{color:var(--date-btn-cal-day-text);font-weight:400;font-size:2em;word-break:keep-all;padding-bottom:.1em}.atcb-initialized[lang=ja] .atcb-date-btn-day,.atcb-initialized[lang=ko] .atcb-date-btn-day,.atcb-initialized[lang=zh] .atcb-date-btn-day{font-size:1.3em}.atcb-date-btn-month{color:var(--date-btn-cal-month-text);font-weight:600;font-size:1em}.atcb-date-btn-right{position:relative;color:var(--date-btn-text);min-width:13.5em;overflow-wrap:anywhere}.atcb-subevent-btn .atcb-date-btn-right{width:100%}.atcb-date-btn-details{opacity:1;padding:.7em .8em;text-align:left}.atcb-rtl .atcb-date-btn-details{text-align:right}.atcb-date-btn-hover{position:absolute;top:0;left:0;width:100%;opacity:0;height:100%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:1em;padding:.4em .7em;box-sizing:border-box}.atcb-subevent-btn:hover .atcb-date-btn-details{opacity:0}.atcb-subevent-btn:hover .atcb-date-btn-hover{opacity:1}.atcb-date-btn-headline{font-weight:600;font-size:.9em;margin-bottom:.5em;overflow:hidden;display:-webkit-box;-webkit-line-clamp:var(--date-btn-headline-line-clamp);line-clamp:var(--date-btn-headline-line-clamp);-webkit-box-orient:vertical}.atcb-date-btn-content{display:flex;align-items:flex-start;font-size:.8em;color:var(--date-btn-text-secondary)}.atcb-date-btn-content.atcb-date-btn-cancelled{color:var(--form-error);font-weight:700}.atcb-date-btn-content-location{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical;word-break:break-all}.atcb-date-btn-content-icon{display:inline-block;height:.8em;margin-right:.4em;margin-left:0;width:.9em;flex-shrink:0}.atcb-rtl .atcb-date-btn-content-icon{margin-right:0;margin-left:.4em}.atcb-initialized[lang=ja] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=ko] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=zh] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon{margin-top:.15em}.atcb-date-btn-content-icon svg{height:100%;fill:currentcolor;width:100%}.atcb-date-btn-content+.atcb-date-btn-content{margin-top:.3em}.atcb-date-btn-content-text span:not(.atcb-icon-ical){padding-right:.3em;display:inline-block}.atcb-checkmark{display:none}.atcb-saved .atcb-checkmark{box-sizing:content-box;color:var(--btn-text);display:block;position:absolute;top:-.9em;right:-.5em;padding:.5em;border-radius:100%;height:1.2em}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay) .atcb-checkmark,.atcb-button.atcb-single:focus .atcb-checkmark,.atcb-button.atcb-single:hover .atcb-checkmark{top:-.77em;right:-.37em}.atcb-checkmark svg{height:100%;filter:var(--checkmark-background);width:auto}#atcb-bgoverlay{background-color:var(--overlay-background);border:0;box-sizing:border-box;display:flex;height:calc(100vh + 100px);inset-inline:0;left:0;right:0;top:0;min-height:100%;min-width:100%;overflow-y:auto;padding:20px 20px 130px;position:fixed;width:100vw;z-index:14000000}#atcb-bgoverlay:not(dialog){animation:atcb-bgoverlay-animate .1s ease 0s 1 normal forwards;opacity:0}#atcb-bgoverlay.atcb-no-bg{animation:none;backdrop-filter:none;-webkit-backdrop-filter:none;opacity:1;background-color:transparent}@keyframes atcb-bgoverlay-animate{0%{opacity:0}100%{opacity:1}}#atcb-bgoverlay.atcb-click:hover{cursor:var(--overlay-cursor)}.atcb-icon-outlookcom,.atcb-icon.atcb-icon-ms365{padding-bottom:.05em}.atcb-icon.atcb-icon-apple,.atcb-icon.atcb-icon-ical{padding-bottom:.15em}.atcb-icon.atcb-icon-trigger{padding-bottom:.15em}.atcb-icon.atcb-icon-rsvp{height:1.5em;width:1.5em}.atcb-icon.atcb-icon-apple svg{fill:currentcolor}.atcb-icon.atcb-icon-ical svg{fill:currentcolor}.atcb-icon.atcb-icon-ms365 svg{fill:var(--icon-ms365-color)}.atcb-icon.atcb-icon-yahoo svg{fill:var(--icon-yahoo-color)}.atcb-icon.atcb-icon-google svg,.atcb-icon.atcb-icon-msteams svg,.atcb-icon.atcb-icon-outlookcom svg{filter:var(--icon-filter)}.rsvp-inline-wrapper{filter:none;min-width:100%;margin-bottom:0}.atcb-modal-content.no-headline{border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;padding-top:1.8em}.rsvp-inline-wrapper .atcb-modal-content,.rsvp-inline-wrapper .atcb-modal-headline,.rsvp-inline-wrapper.atcb-modal-box{background-color:transparent;border-radius:0;box-sizing:border-box;padding:0;width:100%}.rsvp-inline-wrapper .atcb-modal-headline{padding-bottom:1.5em}.pro{text-align:center}.pro ol,.pro ul{margin:auto;text-align:left;width:fit-content}.pro a:not(.atcb-modal-btn),.pro a:not(.atcb-modal-btn):active,.pro a:not(.atcb-modal-btn):visited{color:var(--modal-btn-text);text-decoration:underline;text-decoration-thickness:2px;text-decoration-color:var(--accent-color)}.pro a:not(.atcb-modal-btn):hover{color:var(--accent-color);text-decoration:none}.pro .pro-share-buttons{display:flex;flex-wrap:wrap;justify-content:center}.pro #rsvp-atcb{display:flex;flex-wrap:wrap;gap:.4em}.pro-form{text-align:left}.pro-form:not(.no-intro){border-top:1px solid var(--modal-btn-border);margin-top:1.5em;padding-top:1.5em}.pro-form.no-intro:not(.no-headline){padding-top:.5em}.pro-field+.pro-field{padding-top:1.3em}.pro-field-type-label+.pro-field-type-radio{padding-top:0}.pro-field-type-checkbox,.pro-field-type-radio div{align-items:center;display:flex}.pro-field-type-checkbox input,.pro-field-type-radio input{cursor:pointer}.pro-field label{display:block;font-size:.9em;opacity:.7}.pro-field-type-checkbox label,.pro-field-type-radio label{cursor:pointer;opacity:.8;padding-left:.3em}.pro-field input[type=email],.pro-field input[type=number],.pro-field input[type=text]{background-color:var(--input-background);border:1px solid var(--modal-btn-border);border-radius:var(--input-border-radius);box-sizing:border-box;box-shadow:var(--btn-shadow);caret-color:var(--accent-color);color:var(--modal-text);font-size:.9em;opacity:.8;padding:.7em;transition:all .1s ease-in-out;width:100%}.pro-field input[type=checkbox],.pro-field input[type=radio]{accent-color:var(--accent-color);height:1.2rem;opacity:.8;transition:all .1s ease-in-out;width:1.2em}.pro-field input:disabled,.pro-field input:disabled+label{cursor:not-allowed;opacity:.75;filter:brightness(95%)}.pro-field input:not([disabled]):hover{opacity:1}.pro-field input:not([disabled],[type=checkbox],[type=radio]):hover{box-shadow:var(--btn-active-shadow)}.pro-field input[type=email]:focus,.pro-field input[type=number]:focus,.pro-field input[type=text]:focus{box-shadow:var(--btn-active-shadow)}.pro-field input[type=email]:focus-visible,.pro-field input[type=number]:focus-visible,.pro-field input[type=text]:focus-visible{border-color:var(--accent-color);outline:1px solid var(--accent-color)}.pro-field input[type=checkbox]:focus,.pro-field input[type=radio]:focus{outline-color:var(--accent-color);outline-width:2px}#submit-error{color:var(--form-error);display:none;font-weight:700;padding-top:1.5em;text-align:center}.pro-form.form-error #submit-error{display:block}.pro-field input.error{accent-color:var(--form-error);border:2px solid var(--form-error)}.pro-field input.error+label,.pro-field:has(input.error) label{color:var(--form-error);opacity:1}#rsvp-status-group{border-bottom:1px solid var(--modal-btn-border);font-weight:700;margin-bottom:1.5em;padding-bottom:2em;text-align:center}#rsvp-status-group .pro-field{align-items:center;display:flex;flex-wrap:wrap;gap:1.2em;justify-content:center;margin-top:1em}@media (width <= 575px){#rsvp-status-group .pro-field{flex-direction:column}#rsvp-status-group .pro-field div{width:80%}}#rsvp-status-group .pro-field div{min-width:28%;position:relative}#rsvp-status-group input{opacity:0;position:absolute;top:0;left:0;height:100%;width:100%;margin:0;cursor:pointer}#rsvp-status-group label{align-items:center;background-color:var(--input-background);border-radius:var(--input-border-radius);box-shadow:var(--btn-shadow);color:var(--modal-btn-text);display:flex;flex-direction:column;font-weight:700;text-transform:uppercase;justify-content:center;opacity:.6;padding:.8em;transition:all .1s ease-in-out;width:100%}#rsvp-status-group label.status-confirmed{color:var(--form-success)}#rsvp-status-group label.status-declined{color:var(--form-error)}#rsvp-status-group input:checked+label{background-color:var(--modal-text);box-shadow:var(--btn-hover-shadow);color:var(--status-active-text);opacity:1;transform:scale(1.08)}#rsvp-status-group input:focus-visible+label{outline:2px solid var(--accent-color);outline-offset:2px}#rsvp-status-group input:not([disabled])+label:hover,#rsvp-status-group input:not([disabled]):hover+label{box-shadow:var(--btn-hover-shadow);opacity:1;transform:scale(1.08)}#rsvp-status-group input:checked+label.status-confirmed{background-color:var(--form-success)}#rsvp-status-group input:checked+label.status-declined{background-color:var(--form-error)}#rsvp-success-msg,#rsvp-success-msg-demo,#rsvp-success-msg-doi,#rsvp-success-msg-email,#ty-success-msg{display:none;font-weight:700;line-height:1.6em;padding-top:.5em;text-align:center}#rsvp-success-msg,#rsvp-success-msg-demo,#ty-success-msg{padding:1.5em 0}#rsvp-success-msg-demo,#rsvp-success-msg-email{color:var(--form-success)}#rsvp-success-msg-doi{color:var(--form-error);padding-top:1em;font-size:.8em}#pro-form-submit{background-color:var(--btn-hover-background);display:block;margin:auto;min-width:150px}.pro-form-fine{font-size:.8em;margin:.5em auto 1em;opacity:.5;text-align:center}.pro-form.form-error .pro-form-fine{opacity:0}.pro-waiting{background-color:var(--modal-btn-background);border:1px solid var(--modal-btn-border);border-radius:var(--btn-border-radius);box-sizing:border-box;color:var(--modal-btn-text);cursor:wait;display:none;line-height:.5em;margin:auto;min-width:150px;padding:.5em 1.25em 1.2em;text-align:center;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:fit-content}@media (width > 575px){#pro-form-submit,.pro-waiting{min-width:200px}}.pro-waiting span:not(.atcb-icon-ical){animation-name:blink;animation-duration:1s;animation-iteration-count:infinite;animation-fill-mode:both;font-size:2.5em}.pro-field label span:not(.atcb-icon-ical){color:var(--form-error);font-weight:700;padding-left:2px}.pro-waiting span:not(.atcb-icon-ical):nth-child(2){animation-delay:.15s}.pro-waiting span:not(.atcb-icon-ical):nth-child(3){animation-delay:.3s}@keyframes blink{0%{opacity:.2}20%{opacity:1}100%{opacity:.2}}.pro #rsvp-sent-content{align-items:center;display:flex;flex-direction:column;gap:1.5em}#rsvp-status-group span{color:inherit}.atcb-modal-content .pro p:not(.pro-form-fine){margin:0}.atcb-modal-content .pro p.pro-pt{margin-top:1.5em}.atcb-modal-content .pro .pro-field p{font-size:.9em}.pro .btn-flex{align-items:center;display:flex}.pro .atcb-modal-btn svg{fill:none;height:1.5em;margin-right:.5em;stroke:currentcolor;width:auto}#atcb-reference{box-sizing:border-box;filter:drop-shadow(0 0 3px rgba(255 255 255 / 80%));height:auto;padding:8px 0;text-align:center;transform:translate3d(0,0,0);width:100%;z-index:15000000}#atcb-reference.fixed-ref{position:fixed;bottom:10px;right:40px;width:auto}#atcb-reference.atcb-dropup{position:absolute;margin-top:-1px}.atcb-modal-host-initialized #atcb-reference.atcb-dropup{text-align:left}:host(.atcb-dark) #atcb-reference{filter:drop-shadow(0 0 5px #000)}#atcb-reference a,#atcb-reference a:active,#atcb-reference a:visited{opacity:.4;width:150px;max-width:100%;margin:auto;display:inline-block;text-decoration:none}#atcb-reference.fixed-ref a{opacity:.6}#atcb-reference a:hover{opacity:.9;text-decoration:none}#atcb-reference svg{fill:var(--list-text)}\",\r\"text\": \":host{width:fit-content;--base-font-size-l:16px;--base-font-size-m:16px;--base-font-size-s:16px;--font:arial,helvetica,\\\"Twemoji Mozilla\\\",\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\",\\\"Noto Color Emoji\\\",\\\"EmojiOne Color\\\",\\\"Android Emoji\\\",sans-serif;--accent-color:#1e90ff;--wrapper-padding:0px;--buttonslist-gap:5px;--btn-underline:#a9ceff;--btn-border:#a8a8a8;--btn-padding-x:.75em;--btn-padding-y:.75em;--btn-background:#f5f5f5;--btn-hover-background:#fff;--btn-font-weight:600;--btn-text:#333;--btn-hover-text:#000;--btn-hover-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 15%) 0 2px 2px -1px;--btn-text-shadow:#fff;--list-background:#f5f5f5;--list-hover-background:#fff;--list-text:#333;--list-font-weight:400;--list-hover-text:#000;--list-close-background:#e5e5e5;--list-close-text:#777;--list-border-radius:11px;--list-padding:.8em 1.2em;--list-min-width:100%;--list-shadow:rgba(0 0 0 / 20%) 0 4px 13px -2px,rgba(0 0 0 / 23%) 0 2px 4px -1px;--list-modal-shadow:rgba(0 0 0 / 50%) 0 4px 30px -3px,rgba(0 0 0 / 30%) 0 2px 8px -2px;--modal-text:#000;--modal-text-align:left;--modal-text-align-rtl:right;--modal-background:#f5f5f5;--modal-btn-bar:#c6c8cd;--modal-btn-background:#f5f5f5;--modal-border-radius:9px;--modal-shadow:drop-shadow(3px 6px 25px rgba(0 0 0 / 65%));--modal-btn-secondary-background:#e2e1e6;--modal-btn-hover-background:#fff;--modal-btn-border:#d2d2d2;--modal-btn-font-weight:600;--modal-btn-text:#2e2e2e;--modal-btn-hover-text:#161616;--modal-btn-secondary-text:#666567;--modal-btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 15%) 0 2px 3px -1px;--modal-btn-hover-shadow:rgba(0 0 0 / 25%) 0 5px 13px -2px,rgba(0 0 0 / 25%) 0 3px 5px -2px;--modal-headline-text-align:center;--modal-headline-text-transform:none;--input-border-radius:6px;--input-background:#fff;--status-active-text:#fff;--form-error:#c5372c;--form-success:#338a36;--date-btn-text:#1d1d1e;--date-btn-text-secondary:#3a3a3f;--date-btn-cal-day-text:#fff;--date-btn-cal-month-text:#d3d2d7;--date-btn-cal-background:#313132;--date-btn-background:#eae9ed;--date-btn-hover-background:#fff;--date-btn-headline-line-clamp:1;--date-btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 15%) 0 2px 3px -1px;--date-btn-hover-shadow:rgba(0 0 0 / 20%) 0 5px 12px -2px,rgba(0 0 0 / 20%) 0 3px 4px -2px;--checkmark-background:drop-shadow(0 0 3px #fff);--overlay-background:rgba(200 200 200 / 25%);--overlay-cursor:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23777' width='16' height='16' viewBox='0 0 122.878 122.88'%3E%3Cpath d='M1.426 8.313a4.87 4.87 0 0 1 0-6.886 4.87 4.87 0 0 1 6.886 0l53.127 53.127 53.127-53.127a4.87 4.87 0 0 1 6.887 0 4.87 4.87 0 0 1 0 6.886L68.324 61.439l53.128 53.128a4.87 4.87 0 0 1-6.887 6.886L61.438 68.326 8.312 121.453a4.87 4.87 0 0 1-6.886 0 4.87 4.87 0 0 1 0-6.886l53.127-53.128L1.426 8.313h0z'/%3E%3C/svg%3E\\\") 16 16,crosshair;--icon-ms365-color:#ea3e23;--icon-yahoo-color:#5f01d1;--icon-filter:none}:host(.atcb-dark){--btn-underline:#336db9;--btn-border:#888;--btn-background:#2e2e2e;--btn-hover-background:#373737;--btn-text:#dedede;--btn-hover-text:#fff;--btn-text-shadow:#000;--list-background:#2e2e2e;--list-hover-background:#373737;--list-text:#dedede;--list-hover-text:#fff;--list-close-background:#282828;--list-shadow:rgba(255 255 255 / 5%) -12px -5px 20px -8px,rgba(255 255 255 / 6%) -7px -5px 15px -3px,rgba(0 0 0 / 50%) 2px 5px 18px -1px,rgba(0 0 0 / 40%) 3px 3px 20px -3px;--list-modal-shadow:rgba(255 255 255 / 8%) -12px -5px 30px -8px,rgba(255 255 255 / 8%) -7px -5px 15px -3px,rgba(0 0 0 / 60%) 4px 6px 50px -4px,rgba(0 0 0 / 90%) 8px 12px 40px -2px;--modal-text:#f1f1f1;--modal-background:#242424;--modal-shadow:drop-shadow(3px 6px 25px rgba(0 0 0 / 90%));--modal-btn-bar:#38383a;--modal-btn-background:#181819;--modal-btn-secondary-background:#2e2d30;--modal-btn-hover-background:#434246;--modal-btn-border:#434246;--modal-btn-text:#dbdbdb;--modal-btn-hover-text:#fff;--modal-btn-secondary-text:#b8b8b8;--modal-btn-shadow:rgba(255 255 255 / 5%) -2px -2px 10px,rgba(0 0 0 / 40%) 3px 3px 10px -2px,rgba(0 0 0 / 40%) 1px 2px 5px -1px;--input-background:#434246;--status-active-text:#000;--form-error:#db8680;--form-success:#99de9c;--date-btn-text:#ebebf0;--date-btn-text-secondary:#b5b5bd;--date-btn-cal-day-text:#101010;--date-btn-cal-month-text:#3e3e3f;--date-btn-cal-background:#c7c7cd;--date-btn-background:#363636;--date-btn-hover-background:#474747;--date-btn-shadow:rgba(0 0 0 / 60%) 0 0 20px -2px,rgba(0 0 0 / 30%) 1px 2px 3px -1px;--checkmark-background:drop-shadow(0 0 3px #0a0a0a);--overlay-background:rgba(20 20 20 / 60%);--icon-ms365-color:#ea3e23;--icon-yahoo-color:#bebebe;--icon-filter:grayscale(0.2)}.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-l)}@media (width <= 991px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-m)}}@media (width <= 575px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-s)}}.atcb-initialized.atcb-buttons-list{gap:var(--buttonslist-gap)}.atcb-button-wrapper{display:block;padding:var(--wrapper-padding);position:relative}.atcb-button{background-image:linear-gradient(120deg,var(--btn-underline) 0,var(--btn-underline) 100%);background-repeat:no-repeat;background-size:100% 8%;background-position:0 100%;background-color:transparent;border:0;border-radius:0;transition:background-size .1s ease-in,border-radius .2s ease-in,box-shadow .1s ease-in;align-items:center;color:var(--btn-text);cursor:pointer;display:flex;font-family:var(--font);font-size:1em;font-weight:var(--btn-font-weight);justify-content:center;line-height:1.2em;margin:0 .2em;padding:var(--btn-padding-y) var(--btn-padding-x);position:relative;text-align:left;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:auto;z-index:1}.atcb-button.atcb-no-text{min-width:0;display:flex;place-content:center center;align-items:center;height:3em;width:3em;padding:0}.atcb-rtl .atcb-button{direction:rtl;text-align:right}.atcb-button:focus-visible{outline:2px solid var(--accent-color)}.atcb-button:not([disabled]):focus,.atcb-button:not([disabled]):hover{background-size:100% 100%;box-shadow:var(--btn-hover-shadow);color:var(--btn-hover-text);text-shadow:0 0 .7em var(--btn-text-shadow);border-radius:21px}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay){background-size:100% 10%;border-radius:3px 3px 11px 11px;background-position:0 0;background-color:var(--btn-background);color:var(--btn-text);text-shadow:none;z-index:15000000}.atcb-button.atcb-single:not([disabled]):focus,.atcb-button.atcb-single:not([disabled]):hover{background-size:100% 10%;background-position:0 100%;border-radius:11px 11px 3px 3px;background-color:var(--btn-background);color:var(--btn-text);text-shadow:none}.atcb-button.atcb-active.atcb-dropup{background-position:0 100%;border-radius:11px 11px 3px 3px}.atcb-button.atcb-dropup::after,.atcb-button:not(.atcb-modal-style,.atcb-dropoverlay,.atcb-dropup)::before{content:\\\"\\\";width:0;height:0;position:absolute;left:0;right:0;margin:0 auto}.atcb-button:not(.atcb-modal-style,.atcb-dropoverlay,.atcb-dropup)::before{top:100%;border:0 solid transparent;border-bottom:none;border-top-color:var(--btn-background)}.atcb-button.atcb-dropup::after{bottom:100%;border:0 solid transparent;border-top:none;border-bottom-color:var(--btn-background)}.atcb-button.atcb-active.atcb-dropup::after,.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay,.atcb-dropup)::before{border-width:.35em;transition:border-width .1s linear .1s}.atcb-button.atcb-active.atcb-dropoverlay{z-index:14000090}.atcb-icon{flex-grow:0;flex-shrink:0;height:1em;line-height:1em;margin-right:.8em;width:.9em}.atcb-rtl .atcb-icon{margin-right:0;margin-left:1em}.atcb-no-text .atcb-icon{margin-right:0;margin-left:0}.atcb-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-icon-trigger svg{display:none}.atcb-button .atcb-icon-trigger::after{content:\\\"+\\\";font-family:Arial,Helvetica,sans-serif;font-size:1.5em}.atcb-text{overflow-wrap:anywhere}.atcb-dropdown-anchor{bottom:-15px;height:0;width:100%;opacity:0;position:absolute}.atcb-list-wrapper{box-sizing:border-box;font-weight:var(--list-font-weight);position:absolute;z-index:14000090;width:auto}.atcb-list-wrapper:not(.atcb-dropup,.atcb-dropoverlay){animation:list-entrance-bottom .2s ease 0s 1 normal forwards}.atcb-list-wrapper.atcb-dropup{animation:list-entrance-top .2s ease 0s 1 normal forwards}.atcb-list-wrapper.atcb-dropoverlay{animation:list-entrance-center .2s ease 0s 1 normal forwards;z-index:15000000}@keyframes list-entrance-bottom{0%{opacity:0;transform:translateY(250px)}100%{opacity:1;transform:translateY(0)}}@keyframes list-entrance-top{0%{opacity:0;transform:translateY(-250px)}100%{opacity:1;transform:translateY(0)}}@keyframes list-entrance-center{0%{opacity:0;transform:scaleY(1)}1%{opacity:1;transform:scaleY(0)}100%{opacity:1;transform:scaleY(1)}}.atcb-list{background-color:var(--list-background);border-radius:var(--list-border-radius);box-sizing:border-box;box-shadow:var(--list-shadow);color:var(--list-text);display:block;font-family:var(--font);min-width:var(--list-min-width);position:relative;user-select:none;-webkit-user-select:none;width:fit-content}.atcb-list-item{align-items:center;background-color:var(--list-background);box-sizing:border-box;cursor:pointer;display:flex;font-size:1em;line-height:1.75em;padding:var(--list-padding);text-align:left;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.atcb-rtl .atcb-list-item{direction:rtl;text-align:right}.atcb-list-item:hover{background-color:var(--list-hover-background);color:var(--list-hover-text)}.atcb-list-item:focus-visible{background-color:var(--list-hover-background);color:var(--accent-color);outline:0}.atcb-list-item:last-child{border-radius:0 0 var(--list-border-radius) var(--list-border-radius)}.atcb-list-item:first-child{border-radius:var(--list-border-radius) var(--list-border-radius) 0 0}.atcb-list-item:only-child{border-radius:var(--list-border-radius)}.atcb-list.atcb-modal{box-shadow:var(--list-modal-shadow)}.atcb-list-item .atcb-icon{margin:0 auto;height:1em;width:1em}.atcb-list-item .atcb-icon+.atcb-text{margin-left:.7em;width:100%}.atcb-rtl .atcb-list-item .atcb-icon+.atcb-text{margin-left:0;margin-right:.7em}.atcb-list-item-close{background-color:var(--list-close-background)}.atcb-list-item.atcb-list-item-close:not(:focus-visible){color:var(--list-close-text)}.atcb-list-item-close svg{fill:currentcolor}.atcb-modal{display:block;margin:auto;width:auto;min-width:auto;position:relative;z-index:14000090}.atcb-modal-box{filter:var(--modal-shadow);color:var(--modal-text);cursor:default;box-sizing:border-box;font-family:var(--font);line-height:1.5em;text-align:var(--modal-text-align);user-select:none;-webkit-user-select:none;touch-action:manipulation;width:100%;margin-bottom:20px;-webkit-tap-highlight-color:transparent}@media (width > 575px){.atcb-modal-box{width:32em}}.atcb-modal-box.atcb-rtl{text-align:var(--modal-text-align-rtl);direction:rtl;padding:1.25em 1em 1.25em 2em}.atcb-modal-icon{height:2.5em;width:2.5em;border-radius:100%;background-color:var(--modal-background);padding:1.75em;margin:auto}.atcb-modal-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-modal-headline{background-color:var(--modal-background);border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;font-size:1.3em;font-weight:600;line-height:1.5em;padding:1.8em 1.5em 1.3em;text-transform:var(--modal-headline-text-transform);text-align:var(--modal-headline-text-align)}.atcb-modal-icon+.atcb-modal-headline{margin-top:-2.6em;padding-top:2.6em}.atcb-modal-content{background-color:var(--modal-background);font-size:1em;padding:.3em 2em 2.2em}.atcb-modal-content-subevents{margin:auto;width:fit-content}.atcb-modal-icon+.atcb-modal-content{border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;margin-top:-2.6em;padding-top:2.6em}@media (width <= 575px){.atcb-modal-headline{padding:1.8em 1em 1em}.atcb-modal-content{padding:.3em 1.5em 1.5em}.atcb-modal-icon+.atcb-modal-content{padding-top:1.8em}}.atcb-modal-buttons{background-color:var(--modal-btn-bar);border-radius:0 0 var(--modal-border-radius) var(--modal-border-radius);box-sizing:border-box;padding:.6em;text-align:center;width:100%;display:flex;justify-content:center;flex-flow:row-reverse wrap;align-items:center}a.atcb-modal-btn,button.atcb-modal-btn{background-color:var(--modal-btn-secondary-background);border:0;border-radius:21px;box-shadow:var(--modal-btn-shadow);color:var(--modal-btn-secondary-text);cursor:pointer;display:inline-block;font-family:var(--font);font-size:.9em;font-weight:var(--modal-btn-font-weight);line-height:1em;margin:.625em;padding:1em 1.25em;position:relative;text-align:center;text-decoration:none;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}a.atcb-modal-btn.btn-small,button.atcb-modal-btn.btn-small{padding:.6em .8em}a.atcb-modal-btn.atcb-modal-btn-primary,button.atcb-modal-btn.atcb-modal-btn-primary{background-color:var(--modal-btn-background);color:var(--modal-btn-text)}a.atcb-modal-btn.atcb-modal-btn-border,button.atcb-modal-btn.atcb-modal-btn-border{border:1px solid var(--modal-btn-border)}a.atcb-modal-btn:focus-visible,button.atcb-modal-btn:focus-visible{background-color:var(--modal-btn-hover-background);outline:2px solid var(--accent-color)}a.atcb-modal-btn:disabled,button.atcb-button:disabled,button.atcb-modal-btn:disabled,button.atcb-subevent-btn:disabled{cursor:not-allowed;opacity:.75;filter:brightness(95%);border-style:dashed;box-shadow:none}a.atcb-modal-btn:not([disabled]):hover,button.atcb-modal-btn:not([disabled]):hover{background-color:var(--modal-btn-hover-background);box-shadow:var(--modal-btn-hover-shadow);color:var(--modal-btn-hover-text);text-decoration:none}.atcb-subevent-btn{display:flex;align-items:flex-start;cursor:pointer;font-family:var(--font);font-size:1em;box-shadow:var(--date-btn-shadow);background-color:var(--date-btn-background);border:0;border-radius:7px 4px 4px 7px;padding:0;margin:0;touch-action:manipulation;position:relative;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:100%}.atcb-subevent-btn:hover{align-items:center}.atcb-subevent-btn:focus,.atcb-subevent-btn:hover{background-color:var(--date-btn-hover-background);box-shadow:var(--date-btn-hover-shadow)}.atcb-subevent-btn:focus-visible{outline:2px solid var(--accent-color)}.atcb-subevent-btn+.atcb-subevent-btn{margin-top:30px}.atcb-date-btn-left{border-radius:4px 0 0 4px;align-self:stretch;background-color:var(--date-btn-cal-background);color:var(--date-btn-hover-background);padding:.7em .8em .8em;width:2.7em;align-items:center;display:flex;flex-direction:column;flex-shrink:0}.atcb-rtl .atcb-date-btn-left{border-radius:0 4px 4px 0}.atcb-subevent-btn:hover .atcb-date-btn-left{opacity:.8}.atcb-date-btn-day{color:var(--date-btn-cal-day-text);font-weight:400;font-size:2em;word-break:keep-all;padding-bottom:.1em}.atcb-initialized[lang=ja] .atcb-date-btn-day,.atcb-initialized[lang=ko] .atcb-date-btn-day,.atcb-initialized[lang=zh] .atcb-date-btn-day{font-size:1.3em}.atcb-date-btn-month{color:var(--date-btn-cal-month-text);font-weight:600;font-size:1em}.atcb-date-btn-right{position:relative;color:var(--date-btn-text);min-width:13.5em;overflow-wrap:anywhere}.atcb-subevent-btn .atcb-date-btn-right{width:100%}.atcb-date-btn-details{opacity:1;padding:.7em .8em;text-align:left}.atcb-rtl .atcb-date-btn-details{text-align:right}.atcb-date-btn-hover{position:absolute;top:0;left:0;width:100%;opacity:0;height:100%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:1em;padding:.4em .7em;box-sizing:border-box}.atcb-subevent-btn:hover .atcb-date-btn-details{opacity:0}.atcb-subevent-btn:hover .atcb-date-btn-hover{opacity:1}.atcb-date-btn-headline{font-weight:600;font-size:.9em;margin-bottom:.5em;overflow:hidden;display:-webkit-box;-webkit-line-clamp:var(--date-btn-headline-line-clamp);line-clamp:var(--date-btn-headline-line-clamp);-webkit-box-orient:vertical}.atcb-date-btn-content{display:flex;align-items:flex-start;font-size:.8em;color:var(--date-btn-text-secondary)}.atcb-date-btn-content.atcb-date-btn-cancelled{color:var(--form-error);font-weight:700}.atcb-date-btn-content-location{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical;word-break:break-all}.atcb-date-btn-content-icon{display:inline-block;height:.8em;margin-right:.4em;margin-left:0;width:.9em;flex-shrink:0}.atcb-rtl .atcb-date-btn-content-icon{margin-right:0;margin-left:.4em}.atcb-initialized[lang=ja] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=ko] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=zh] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon{margin-top:.15em}.atcb-date-btn-content-icon svg{height:100%;fill:currentcolor;width:100%}.atcb-date-btn-content+.atcb-date-btn-content{margin-top:.3em}.atcb-date-btn-content-text span:not(.atcb-icon-ical){padding-right:.3em;display:inline-block}.atcb-checkmark{display:none}.atcb-saved .atcb-checkmark{box-sizing:content-box;color:var(--btn-text);display:block;position:absolute;top:-.9em;right:-.5em;padding:.5em;border-radius:100%;height:1.2em}.atcb-checkmark svg{height:100%;filter:var(--checkmark-background);width:auto}#atcb-bgoverlay{backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);background-color:var(--overlay-background);border:0;box-sizing:border-box;display:flex;height:calc(100vh + 100px);inset-inline:0;left:0;right:0;top:0;min-height:100%;min-width:100%;overflow-y:auto;padding:20px 20px 130px;position:fixed;width:100vw;z-index:14000000}#atcb-bgoverlay:not(dialog){animation:atcb-bgoverlay-animate .2s ease 0s 1 normal forwards;opacity:0}#atcb-bgoverlay.atcb-no-bg{animation:none;backdrop-filter:none;-webkit-backdrop-filter:none;opacity:1;background-color:transparent}@keyframes atcb-bgoverlay-animate{0%{opacity:0}100%{opacity:1}}#atcb-bgoverlay.atcb-click:hover{cursor:var(--overlay-cursor)}.atcb-icon-outlookcom,.atcb-icon.atcb-icon-ms365{padding-bottom:.05em}.atcb-icon.atcb-icon-apple,.atcb-icon.atcb-icon-ical{padding-bottom:.15em}.atcb-icon.atcb-icon-rsvp{height:1.5em;width:1.5em}.atcb-icon.atcb-icon-apple svg{fill:currentcolor}.atcb-icon.atcb-icon-ical svg{fill:currentcolor}.atcb-icon.atcb-icon-ms365 svg{fill:var(--icon-ms365-color)}.atcb-icon.atcb-icon-yahoo svg{fill:var(--icon-yahoo-color)}.atcb-icon.atcb-icon-google svg,.atcb-icon.atcb-icon-msteams svg,.atcb-icon.atcb-icon-outlookcom svg{filter:var(--icon-filter)}.rsvp-inline-wrapper{filter:none;min-width:100%;margin-bottom:0}.atcb-modal-content.no-headline{border-radius:var(--modal-border-radius) var(--modal-border-radius) 0 0;padding-top:1.8em}.rsvp-inline-wrapper .atcb-modal-content,.rsvp-inline-wrapper .atcb-modal-headline,.rsvp-inline-wrapper.atcb-modal-box{background-color:transparent;border-radius:0;box-sizing:border-box;padding:0;width:100%}.rsvp-inline-wrapper .atcb-modal-headline{padding-bottom:1.5em}.pro{text-align:center}.pro ol,.pro ul{margin:auto;text-align:left;width:fit-content}.pro a:not(.atcb-modal-btn),.pro a:not(.atcb-modal-btn):active,.pro a:not(.atcb-modal-btn):visited{color:var(--modal-btn-text);text-decoration:underline;text-decoration-thickness:2px;text-decoration-color:var(--accent-color)}.pro a:not(.atcb-modal-btn):hover{color:var(--accent-color);text-decoration:none}.pro .pro-share-buttons{display:flex;flex-wrap:wrap;justify-content:center}.pro #rsvp-atcb{display:flex;flex-wrap:wrap;gap:.4em}.pro-form{text-align:left}.pro-form:not(.no-intro){border-top:1px solid var(--modal-btn-border);margin-top:1.5em;padding-top:1.5em}.pro-form.no-intro:not(.no-headline){padding-top:.5em}.pro-field+.pro-field{padding-top:1.3em}.pro-field-type-label+.pro-field-type-radio{padding-top:0}.pro-field-type-checkbox,.pro-field-type-radio div{align-items:center;display:flex}.pro-field-type-checkbox input,.pro-field-type-radio input{cursor:pointer}.pro-field label{display:block;font-size:.9em;opacity:.7}.pro-field-type-checkbox label,.pro-field-type-radio label{cursor:pointer;opacity:.8;padding-left:.3em}.pro-field input[type=email],.pro-field input[type=number],.pro-field input[type=text]{background-color:var(--input-background);border:1px solid var(--modal-btn-border);border-radius:var(--input-border-radius);box-sizing:border-box;caret-color:var(--accent-color);color:var(--modal-text);font-size:.9em;opacity:.8;padding:.7em;transition:all .1s ease-in-out;width:100%}.pro-field input[type=checkbox],.pro-field input[type=radio]{accent-color:var(--accent-color);height:1.2rem;opacity:.8;transition:all .1s ease-in-out;width:1.2em}.pro-field input:disabled,.pro-field input:disabled+label{cursor:not-allowed;opacity:.75;filter:brightness(95%)}.pro-field input:not([disabled]):hover{opacity:1}.pro-field input[type=email]:focus,.pro-field input[type=number]:focus,.pro-field input[type=text]:focus{border-color:var(--accent-color);outline:1px solid var(--accent-color)}.pro-field input[type=checkbox]:focus,.pro-field input[type=radio]:focus{outline-color:var(--accent-color);outline-width:2px}#submit-error{color:var(--form-error);display:none;font-weight:700;padding-top:1.5em;text-align:center}.pro-form.form-error #submit-error{display:block}.pro-field input.error{accent-color:var(--form-error);border:2px solid var(--form-error)}.pro-field input.error+label,.pro-field:has(input.error) label{color:var(--form-error);opacity:1}#rsvp-status-group{border-bottom:1px solid var(--modal-btn-border);font-weight:700;margin-bottom:1.5em;padding-bottom:2em;text-align:center}#rsvp-status-group .pro-field{align-items:center;display:flex;flex-wrap:wrap;gap:1.2em;justify-content:center;margin-top:1em}@media (width <= 575px){#rsvp-status-group .pro-field{flex-direction:column}#rsvp-status-group .pro-field div{width:80%}}#rsvp-status-group .pro-field div{min-width:28%;position:relative}#rsvp-status-group input{opacity:0;position:absolute;top:0;left:0;height:100%;width:100%;margin:0;cursor:pointer}#rsvp-status-group label{align-items:center;border:1px solid var(--modal-btn-text);border-radius:var(--input-border-radius);color:var(--modal-btn-text);display:flex;flex-direction:column;font-weight:700;text-transform:uppercase;justify-content:center;opacity:.6;padding:.8em;transition:all .1s ease-in-out;width:100%}#rsvp-status-group label.status-confirmed{border-color:var(--form-success);color:var(--form-success)}#rsvp-status-group label.status-declined{border-color:var(--form-error);color:var(--form-error)}#rsvp-status-group input:checked+label{background-color:var(--modal-text);box-shadow:var(--btn-hover-shadow);color:var(--status-active-text);opacity:1;transform:scale(1.08)}#rsvp-status-group input:focus-visible+label{outline:2px solid var(--accent-color);outline-offset:2px}#rsvp-status-group input:not([disabled])+label:hover,#rsvp-status-group input:not([disabled]):hover+label{box-shadow:var(--btn-hover-shadow);opacity:1;transform:scale(1.08)}#rsvp-status-group input:checked+label.status-confirmed{background-color:var(--form-success)}#rsvp-status-group input:checked+label.status-declined{background-color:var(--form-error)}#rsvp-success-msg,#rsvp-success-msg-demo,#rsvp-success-msg-doi,#rsvp-success-msg-email,#ty-success-msg{display:none;font-weight:700;line-height:1.6em;padding-top:.5em;text-align:center}#rsvp-success-msg,#rsvp-success-msg-demo,#ty-success-msg{padding:1.5em 0}#rsvp-success-msg-demo,#rsvp-success-msg-email{color:var(--form-success)}#rsvp-success-msg-doi{color:var(--form-error);padding-top:1em;font-size:.8em}#pro-form-submit{display:block;margin:auto;min-width:150px}.pro-form-fine{font-size:.8em;margin:.5em auto 1em;opacity:.5;text-align:center}.pro-form.form-error .pro-form-fine{opacity:0}.pro-waiting{background-color:var(--modal-btn-background);border:1px solid var(--modal-btn-border);border-radius:var(--btn-border-radius);box-sizing:border-box;color:var(--modal-btn-text);cursor:wait;display:none;line-height:.5em;margin:auto;min-width:150px;padding:.5em 1.25em 1.2em;text-align:center;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:fit-content}@media (width > 575px){#pro-form-submit,.pro-waiting{min-width:200px}}.pro-waiting span:not(.atcb-icon-ical){animation-name:blink;animation-duration:1s;animation-iteration-count:infinite;animation-fill-mode:both;font-size:2.5em}.pro-field label span:not(.atcb-icon-ical){color:var(--form-error);font-weight:700;padding-left:2px}.pro-waiting span:not(.atcb-icon-ical):nth-child(2){animation-delay:.15s}.pro-waiting span:not(.atcb-icon-ical):nth-child(3){animation-delay:.3s}@keyframes blink{0%{opacity:.2}20%{opacity:1}100%{opacity:.2}}.pro #rsvp-sent-content{align-items:center;display:flex;flex-direction:column;gap:1.5em}#rsvp-status-group span{color:inherit}.atcb-modal-content .pro p:not(.pro-form-fine){margin:0}.atcb-modal-content .pro p.pro-pt{margin-top:1.5em}.atcb-modal-content .pro .pro-field p{font-size:.9em}.pro .btn-flex{align-items:center;display:flex}.pro .atcb-modal-btn svg{fill:none;height:1.5em;margin-right:.5em;stroke:currentcolor;width:auto}#atcb-reference{box-sizing:border-box;filter:drop-shadow(0 0 3px rgba(255 255 255 / 80%));height:auto;padding:8px 0;text-align:center;transform:translate3d(0,0,0);width:100%;z-index:15000000}#atcb-reference.fixed-ref{position:fixed;bottom:10px;right:40px;width:auto}#atcb-reference.atcb-dropup{position:absolute;margin-top:-1px}.atcb-modal-host-initialized #atcb-reference.atcb-dropup{text-align:left}:host(.atcb-dark) #atcb-reference{filter:drop-shadow(0 0 5px #000)}#atcb-reference a,#atcb-reference a:active,#atcb-reference a:visited{opacity:.4;width:150px;max-width:100%;margin:auto;display:inline-block;text-decoration:none}#atcb-reference.fixed-ref a{opacity:.6}#atcb-reference a:hover{opacity:.9;text-decoration:none}#atcb-reference svg{fill:var(--list-text)}\",\r\"date\": \":host{width:fit-content;--base-font-size-l:16px;--base-font-size-m:16px;--base-font-size-s:16px;--font:arial,helvetica,\\\"Twemoji Mozilla\\\",\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\",\\\"Noto Color Emoji\\\",\\\"EmojiOne Color\\\",\\\"Android Emoji\\\",sans-serif;--accent-color:#1e90ff;--wrapper-padding:0px;--buttonslist-gap:5px;--btn-background:#f5f5f5;--btn-hover-background:#fff;--btn-border:#d2d2d2;--btn-border-radius:4px;--btn-text:#333;--btn-hover-text:#000;--btn-shadow:rgba(0 0 0 / 13%) 0 4px 10px -2px,rgba(0 0 0 / 18%) 0 2px 3px -1px;--btn-hover-shadow:rgba(0 0 0 / 25%) 0 5px 12px -2px,rgba(0 0 0 / 25%) 0 3px 5px -2px;--list-background:#f5f5f5;--list-hover-background:#fff;--list-text:#333;--list-font-weight:400;--list-hover-text:#000;--list-close-background:#e5e5e5;--list-close-text:#777;--list-shadow:rgba(0 0 0 / 20%) 0 4px 13px -2px,rgba(0 0 0 / 23%) 0 2px 4px -1px;--list-modal-shadow:rgba(0 0 0 / 50%) 0 4px 30px -3px,rgba(0 0 0 / 30%) 0 2px 8px -2px;--modal-text:#000;--modal-text-align:left;--modal-text-align-rtl:right;--modal-background:#f5f5f5;--modal-shadow:drop-shadow(3px 6px 25px rgba(0 0 0 / 65%));--modal-btn-bar:#c6c8cd;--modal-btn-background:#f5f5f5;--modal-btn-secondary-background:#e2e1e6;--modal-btn-hover-background:#fff;--modal-btn-border:#d2d2d2;--modal-btn-font-weight:600;--modal-btn-text:#2e2e2e;--modal-btn-hover-text:#161616;--modal-btn-secondary-text:#666567;--modal-btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 10%) 0 2px 3px -1px;--modal-btn-hover-shadow:rgba(0 0 0 / 25%) 0 5px 13px -2px,rgba(0 0 0 / 20%) 0 3px 5px -2px;--modal-headline-text-align:center;--modal-headline-text-transform:none;--input-border-radius:3px;--input-background:#fff;--status-active-text:#fff;--form-error:#c5372c;--form-success:#338a36;--date-btn-text:#1d1d1e;--date-btn-text-secondary:#3a3a3f;--date-btn-cal-day-text:#fff;--date-btn-cal-month-text:#d3d2d7;--date-btn-cal-background:#313132;--date-btn-background:#eae9ed;--date-btn-hover-background:#fff;--date-btn-headline-line-clamp:1;--date-btn-shadow:rgba(0 0 0 / 10%) 0 4px 10px -2px,rgba(0 0 0 / 15%) 0 2px 3px -1px;--date-btn-hover-shadow:rgba(0 0 0 / 20%) 0 5px 12px -2px,rgba(0 0 0 / 20%) 0 3px 4px -2px;--checkmark-background:drop-shadow(0 0 3px #fff);--overlay-background:rgba(20 20 20 / 25%);--overlay-cursor:url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23777' width='16' height='16' viewBox='0 0 122.878 122.88'%3E%3Cpath d='M1.426 8.313a4.87 4.87 0 0 1 0-6.886 4.87 4.87 0 0 1 6.886 0l53.127 53.127 53.127-53.127a4.87 4.87 0 0 1 6.887 0 4.87 4.87 0 0 1 0 6.886L68.324 61.439l53.128 53.128a4.87 4.87 0 0 1-6.887 6.886L61.438 68.326 8.312 121.453a4.87 4.87 0 0 1-6.886 0 4.87 4.87 0 0 1 0-6.886l53.127-53.128L1.426 8.313h0z'/%3E%3C/svg%3E\\\") 16 16,crosshair;--icon-ms365-color:#ea3e23;--icon-yahoo-color:#5f01d1;--icon-filter:none}:host(.atcb-dark){--btn-background:#2e2e2e;--btn-hover-background:#474747;--btn-border:#4d4d4d;--btn-text:#dedede;--btn-hover-text:#f1f1f1;--btn-shadow:rgba(0 0 0 / 70%) 0 0 25px -2px,rgba(0 0 0 / 40%) 1px 2px 4px -1px;--btn-hover-shadow:rgba(0 0 0 / 90%) 2px 3px 25px -3px,rgba(0 0 0 / 50%) 1px 4px 6px -2px;--list-background:#2e2e2e;--list-hover-background:#474747;--list-text:#dedede;--list-hover-text:#f1f1f1;--list-close-background:#282828;--list-shadow:rgba(0 0 0 / 60%) 0 4px 20px -2px,rgba(0 0 0 / 40%) 0 2px 4px -1px;--list-modal-shadow:rgba(0 0 0 / 40%) -1px 3px 30px 2px;--modal-text:#f1f1f1;--modal-background:#242424;--modal-shadow:drop-shadow(3px 6px 25px rgba(0 0 0 / 90%));--modal-btn-bar:#38383a;--modal-btn-background:#181819;--modal-btn-secondary-background:#2e2d30;--modal-btn-hover-background:#434246;--modal-btn-border:#434246;--modal-btn-text:#dbdbdb;--modal-btn-hover-text:#fff;--modal-btn-secondary-text:#b8b8b8;--modal-btn-shadow:rgba(255 255 255 / 5%) -2px -2px 10px,rgba(0 0 0 / 40%) 3px 3px 10px -2px,rgba(0 0 0 / 40%) 1px 2px 5px -1px;--input-background:#434246;--status-active-text:#000;--form-error:#db8680;--form-success:#99de9c;--date-btn-text:#ebebf0;--date-btn-text-secondary:#b5b5bd;--date-btn-cal-day-text:#101010;--date-btn-cal-month-text:#3e3e3f;--date-btn-cal-background:#c7c7cd;--date-btn-background:#363636;--date-btn-hover-background:#474747;--date-btn-shadow:rgba(0 0 0 / 60%) 0 0 20px -2px,rgba(0 0 0 / 30%) 1px 2px 3px -1px;--checkmark-background:drop-shadow(0 0 3px #0a0a0a);--overlay-background:rgba(20 20 20 / 60%);--icon-ms365-color:#ea3e23;--icon-yahoo-color:#bebebe;--icon-filter:grayscale(.2)}.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-l)}@media (width <= 991px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-m)}}@media (width <= 575px){.atcb-button-wrapper,.atcb-list,.atcb-modal-box{font-size:var(--base-font-size-s)}}.atcb-button-wrapper{display:block;padding:var(--wrapper-padding);position:relative}.atcb-button,.atcb-subevent-btn{display:flex;align-items:flex-start;cursor:pointer;font-family:var(--font);font-size:1em;box-shadow:var(--date-btn-shadow);background-color:var(--date-btn-background);border:0;border-radius:var(--btn-border-radius);padding:0;margin:0;touch-action:manipulation;position:relative;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}.atcb-subevent-btn{width:100%}.atcb-button{box-shadow:var(--btn-shadow);min-width:16em;max-width:18em;position:relative;z-index:1}.atcb-rtl .atcb-button{direction:rtl;text-align:right}.atcb-button:focus,.atcb-button:hover{background-color:var(--btn-hover-background);box-shadow:var(--btn-hover-shadow)}.atcb-button:focus-visible,.atcb-subevent-btn:focus-visible{outline:2px solid var(--accent-color)}.atcb-button:not(.atcb-active):hover,.atcb-subevent-btn:hover{align-items:center}.atcb-subevent-btn:focus,.atcb-subevent-btn:hover{background-color:var(--date-btn-hover-background);box-shadow:var(--date-btn-hover-shadow)}.atcb-button.atcb-active:not(.atcb-modal-style,.atcb-dropoverlay){z-index:15000000}.atcb-button.atcb-active.atcb-dropoverlay{z-index:14000090}.atcb-subevent-btn+.atcb-subevent-btn{margin-top:30px}.atcb-date-btn-left{border-radius:var(--btn-border-radius) 0 0 var(--btn-border-radius);align-self:stretch;background-color:var(--date-btn-cal-background);color:var(--date-btn-hover-background);padding:.7em .8em .8em;width:2.7em;align-items:center;display:flex;flex-direction:column;flex-shrink:0}.atcb-rtl .atcb-date-btn-left{border-radius:0 var(--btn-border-radius) var(--btn-border-radius) 0}.atcb-button:hover .atcb-date-btn-left,.atcb-subevent-btn:hover .atcb-date-btn-left{opacity:.8}.atcb-date-btn-day{color:var(--date-btn-cal-day-text);font-weight:400;font-size:2em;word-break:keep-all;padding-bottom:.1em}.atcb-initialized[lang=ja] .atcb-date-btn-day,.atcb-initialized[lang=ko] .atcb-date-btn-day,.atcb-initialized[lang=zh] .atcb-date-btn-day{font-size:1.3em}.atcb-date-btn-month{color:var(--date-btn-cal-month-text);font-weight:600;font-size:1em}.atcb-date-btn-right{position:relative;color:var(--date-btn-text);min-width:13.5em;overflow-wrap:anywhere}.atcb-subevent-btn .atcb-date-btn-right{width:100%}.atcb-date-btn-details{opacity:1;padding:.7em .8em;text-align:left}.atcb-rtl .atcb-date-btn-details{text-align:right}.atcb-date-btn-hover{position:absolute;top:0;left:0;width:100%;opacity:0;height:100%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:1em;padding:.4em .7em;box-sizing:border-box}.atcb-button:not(.atcb-active):hover .atcb-date-btn-hover,.atcb-subevent-btn:hover .atcb-date-btn-hover{opacity:1}.atcb-button:not(.atcb-active):hover .atcb-date-btn-details,.atcb-subevent-btn:hover .atcb-date-btn-details{opacity:0}.atcb-date-btn-headline{font-weight:600;font-size:.9em;margin-bottom:.5em;overflow:hidden;display:-webkit-box;-webkit-line-clamp:var(--date-btn-headline-line-clamp);line-clamp:var(--date-btn-headline-line-clamp);-webkit-box-orient:vertical}.atcb-date-btn-content{display:flex;align-items:flex-start;font-size:.8em;color:var(--date-btn-text-secondary)}.atcb-date-btn-content.atcb-date-btn-cancelled{color:var(--form-error);font-weight:700}.atcb-date-btn-content-location{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical;word-break:break-all}.atcb-date-btn-content-icon{display:inline-block;height:.8em;margin-right:.4em;margin-left:0;width:.9em;flex-shrink:0}.atcb-rtl .atcb-date-btn-content-icon{margin-right:0;margin-left:.4em}.atcb-initialized[lang=ja] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=ko] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon,.atcb-initialized[lang=zh] .atcb-date-btn-content:not(.atcb-date-btn-content-location) .atcb-date-btn-content-icon{margin-top:.15em}.atcb-date-btn-content-icon svg{height:100%;fill:currentcolor;width:100%}.atcb-date-btn-content+.atcb-date-btn-content{margin-top:.3em}.atcb-date-btn-content-text span:not(.atcb-icon-ical){padding-right:.3em;display:inline-block}.atcb-icon{flex-grow:0;flex-shrink:0;height:1em;line-height:1em;margin-right:.8em;width:1em}.atcb-rtl .atcb-icon{margin-right:0;margin-left:.8em}.atcb-no-text .atcb-icon{margin-right:0;margin-left:0}.atcb-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-text{overflow-wrap:anywhere}.atcb-dropdown-anchor{bottom:4px;height:1px;width:100%;opacity:0;position:absolute}.atcb-list-wrapper{box-sizing:border-box;font-weight:var(--list-font-weight);padding:0 4px;position:absolute;z-index:14000090}.atcb-list-wrapper.atcb-dropoverlay{z-index:15000000}.atcb-list{border-radius:0 0 var(--btn-border-radius) var(--btn-border-radius);box-sizing:border-box;box-shadow:var(--list-shadow);color:var(--list-text);display:block;font-family:var(--font);min-width:100%;position:relative;user-select:none;-webkit-user-select:none;width:fit-content}.atcb-list-item{align-items:center;background-color:var(--list-background);box-sizing:border-box;cursor:pointer;display:flex;font-size:1em;line-height:1.75em;padding:.8em;text-align:left;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.atcb-rtl .atcb-list-item{direction:rtl;text-align:right}.atcb-list-item:hover{background-color:var(--list-hover-background);color:var(--list-hover-text)}.atcb-list-item:focus-visible{background-color:var(--list-hover-background);color:var(--accent-color);outline:0}.atcb-list-item:last-child{border-radius:0 0 var(--btn-border-radius) var(--btn-border-radius)}.atcb-dropup .atcb-list-item:last-child{border-radius:0;padding-bottom:1.25em}.atcb-dropoverlay .atcb-list .atcb-list-item:first-child,.atcb-dropup .atcb-list-item:first-child,.atcb-list.atcb-modal .atcb-list-item:first-child{border-radius:var(--btn-border-radius) var(--btn-border-radius) 0 0}.atcb-dropoverlay .atcb-list .atcb-list-item:only-child,.atcb-list.atcb-modal .atcb-list-item:only-child{border-radius:var(--btn-border-radius)}.atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child{padding-top:1.25em}.atcb-dropoverlay .atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child,.atcb-dropup .atcb-list.atcb-generated-button:not(.atcb-modal) .atcb-list-item:first-child{padding-top:.8em}.atcb-dropoverlay .atcb-list,.atcb-list.atcb-modal{border-radius:var(--btn-border-radius)}.atcb-list.atcb-modal{box-shadow:var(--list-modal-shadow)}.atcb-list-item .atcb-icon{margin:0 auto}.atcb-list-item .atcb-icon+.atcb-text{margin-left:.7em;width:100%}.atcb-rtl .atcb-list-item .atcb-icon+.atcb-text{margin-left:0;margin-right:.7em}.atcb-list-item-close{background-color:var(--list-close-background)}.atcb-list-item.atcb-list-item-close:not(:focus-visible){color:var(--list-close-text)}.atcb-list-item-close svg{fill:currentcolor}.atcb-modal{display:block;margin:auto;width:auto;min-width:auto;position:relative;z-index:14000090}.atcb-modal-box{filter:var(--modal-shadow);color:var(--modal-text);cursor:default;box-sizing:border-box;font-family:var(--font);line-height:1.5em;text-align:var(--modal-text-align);user-select:none;-webkit-user-select:none;touch-action:manipulation;width:100%;margin-bottom:20px;-webkit-tap-highlight-color:transparent}@media (width > 575px){.atcb-modal-box{width:32em}}.atcb-modal-box.atcb-rtl{text-align:var(--modal-text-align-rtl);direction:rtl;padding:1.25em 1em 1.25em 2em}.atcb-modal-icon{height:2.5em;width:2.5em;border-radius:100%;background-color:var(--modal-background);padding:1.75em;margin:auto}.atcb-modal-icon svg{fill:currentcolor;height:100%;width:100%}.atcb-modal-headline{background-color:var(--modal-background);border-radius:var(--btn-border-radius) var(--btn-border-radius) 0 0;font-size:1.3em;font-weight:600;line-height:1.5em;padding:1.8em 1.5em 1.3em;text-transform:var(--modal-headline-text-transform);text-align:var(--modal-headline-text-align)}.atcb-modal-icon+.atcb-modal-headline{margin-top:-2.6em;padding-top:2.6em}.atcb-modal-content{background-color:var(--modal-background);font-size:1em;padding:.3em 2em 2.2em}.atcb-modal-content-subevents{margin:auto;width:fit-content}.atcb-modal-icon+.atcb-modal-content{border-radius:var(--btn-border-radius) var(--btn-border-radius) 0 0;margin-top:-2.6em;padding-top:2.6em}@media (width <= 575px){.atcb-modal-headline{padding:1.8em 1em 1em}.atcb-modal-content{padding:.3em 1.5em 1.5em}.atcb-modal-icon+.atcb-modal-content{padding-top:1.8em}}.atcb-modal-buttons{background-color:var(--modal-btn-bar);border-radius:0 0 var(--btn-border-radius) var(--btn-border-radius);box-sizing:border-box;padding:.6em;text-align:center;width:100%;display:flex;justify-content:center;flex-flow:row-reverse wrap;align-items:center}a.atcb-modal-btn,button.atcb-modal-btn{background-color:var(--modal-btn-secondary-background);border:0;border-radius:var(--btn-border-radius);box-shadow:var(--modal-btn-shadow);color:var(--modal-btn-secondary-text);cursor:pointer;display:inline-block;font-family:var(--font);font-size:.9em;font-weight:var(--modal-btn-font-weight);line-height:1em;margin:.625em;padding:1em 1.25em;position:relative;text-align:center;text-decoration:none;touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}a.atcb-modal-btn.btn-small,button.atcb-modal-btn.btn-small{padding:.6em .8em}a.atcb-modal-btn.atcb-modal-btn-primary,button.atcb-modal-btn.atcb-modal-btn-primary{background-color:var(--modal-btn-background);color:var(--modal-btn-text)}a.atcb-modal-btn.atcb-modal-btn-border,button.atcb-modal-btn.atcb-modal-btn-border{border:1px solid var(--modal-btn-border)}a.atcb-modal-btn:focus-visible,button.atcb-modal-btn:focus-visible{background-color:var(--modal-btn-hover-background);outline:2px solid var(--accent-color)}a.atcb-modal-btn:disabled,button.atcb-button:disabled,button.atcb-modal-btn:disabled,button.atcb-subevent-btn:disabled{cursor:not-allowed;opacity:.75;filter:brightness(95%);border-style:dashed;box-shadow:none}a.atcb-modal-btn:not([disabled]):hover,button.atcb-modal-btn:not([disabled]):hover{background-color:var(--modal-btn-hover-background);box-shadow:var(--modal-btn-hover-shadow);color:var(--modal-btn-hover-text);text-decoration:none}.atcb-checkmark{display:none}.atcb-saved .atcb-checkmark{box-sizing:content-box;color:var(--btn-text);display:block;position:absolute;top:-.9em;right:-.5em;padding:.5em;border-radius:100%;height:1.2em}.atcb-checkmark svg{height:100%;filter:var(--checkmark-background);width:auto}#atcb-bgoverlay{backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);background-color:var(--overlay-background);border:0;box-sizing:border-box;display:flex;height:calc(100vh + 100px);inset-inline:0;left:0;right:0;top:0;min-height:100%;min-width:100%;overflow-y:auto;padding:20px 20px 130px;position:fixed;width:100vw;z-index:14000000}#atcb-bgoverlay:not(dialog){animation:atcb-bgoverlay-animate .2s ease 0s 1 normal forwards;opacity:0}#atcb-bgoverlay.atcb-no-bg{animation:none;backdrop-filter:none;-webkit-backdrop-filter:none;opacity:1;background-color:transparent}@keyframes atcb-bgoverlay-animate{0%{opacity:0}100%{opacity:1}}#atcb-bgoverlay.atcb-click:hover{cursor:var(--overlay-cursor)}.atcb-icon-outlookcom,.atcb-icon.atcb-icon-ms365{padding-bottom:.05em}.atcb-icon.atcb-icon-apple,.atcb-icon.atcb-icon-ical{padding-bottom:.15em}.atcb-icon.atcb-icon-apple svg{fill:currentcolor}.atcb-icon.atcb-icon-ical svg{fill:currentcolor}.atcb-icon.atcb-icon-ms365 svg{fill:var(--icon-ms365-color)}.atcb-icon.atcb-icon-yahoo svg{fill:var(--icon-yahoo-color)}.atcb-icon.atcb-icon-google svg,.atcb-icon.atcb-icon-msteams svg,.atcb-icon.atcb-icon-outlookcom svg{filter:var(--icon-filter)}.pro{text-align:center}.pro ol,.pro ul{margin:auto;text-align:left;width:fit-content}.pro a:not(.atcb-modal-btn),.pro a:not(.atcb-modal-btn):active,.pro a:not(.atcb-modal-btn):visited{color:var(--modal-btn-text);text-decoration:underline;text-decoration-thickness:2px;text-decoration-color:var(--accent-color)}.pro a:not(.atcb-modal-btn):hover{color:var(--accent-color);text-decoration:none}.pro .pro-share-buttons{display:flex;flex-wrap:wrap;justify-content:center}.pro-form{border-top:1px solid var(--modal-btn-border);margin-top:1.5em;padding-top:1.5em;text-align:left}.pro-field+.pro-field{padding-top:1.3em}.pro-field-type-label+.pro-field-type-radio{padding-top:0}.pro-field-type-checkbox,.pro-field-type-radio div{align-items:center;display:flex}.pro-field-type-checkbox input,.pro-field-type-radio input{cursor:pointer}.pro-field label{display:block;font-size:.9em;opacity:.7}.pro-field-type-checkbox label,.pro-field-type-radio label{cursor:pointer;opacity:.8;padding-left:.3em}.pro-field input[type=email],.pro-field input[type=number],.pro-field input[type=text]{background-color:var(--input-background);border:1px solid var(--modal-btn-border);border-radius:var(--input-border-radius);box-sizing:border-box;caret-color:var(--accent-color);color:var(--modal-text);font-size:.9em;opacity:.8;padding:.7em;transition:all .1s ease-in-out;width:100%}.pro-field input[type=checkbox],.pro-field input[type=radio]{accent-color:var(--accent-color);height:1.2rem;opacity:.8;transition:all .1s ease-in-out;width:1.2em}.pro-field input:disabled,.pro-field input:disabled+label{cursor:not-allowed;opacity:.75;filter:brightness(95%)}.pro-field input:not([disabled]):hover{opacity:1}.pro-field input[type=email]:focus,.pro-field input[type=number]:focus,.pro-field input[type=text]:focus{border-color:var(--accent-color);outline:1px solid var(--accent-color)}.pro-field input[type=checkbox]:focus,.pro-field input[type=radio]:focus{outline-color:var(--accent-color);outline-width:2px}#submit-error{color:var(--form-error);display:none;font-weight:700;padding-top:1.5em;text-align:center}.pro-form.form-error #submit-error{display:block}.pro-field input.error{accent-color:var(--form-error);border:2px solid var(--form-error)}.pro-field input.error+label,.pro-field:has(input.error) label{color:var(--form-error);opacity:1}#ty-success-msg{display:none;font-weight:700;line-height:1.6em;padding:1.5em 0;text-align:center}#pro-form-submit{display:block;margin:auto;min-width:150px}.pro-form-fine{font-size:.8em;margin:.5em auto 1em;opacity:.5;text-align:center}.pro-form.form-error .pro-form-fine{opacity:0}.pro-waiting{background-color:var(--modal-btn-background);border:1px solid var(--modal-btn-border);border-radius:var(--btn-border-radius);box-sizing:border-box;color:var(--modal-btn-text);cursor:wait;display:none;line-height:.5em;margin:auto;min-width:150px;padding:.5em 1.25em 1.2em;text-align:center;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;width:fit-content}@media (width > 575px){#pro-form-submit,.pro-waiting{min-width:200px}}.pro-waiting span:not(.atcb-icon-ical){animation-name:blink;animation-duration:1s;animation-iteration-count:infinite;animation-fill-mode:both;font-size:2.5em}.pro-field label span:not(.atcb-icon-ical){color:var(--form-error);font-weight:700;padding-left:2px}.pro-waiting span:not(.atcb-icon-ical):nth-child(2){animation-delay:.15s}.pro-waiting span:not(.atcb-icon-ical):nth-child(3){animation-delay:.3s}@keyframes blink{0%{opacity:.2}20%{opacity:1}100%{opacity:.2}}.atcb-modal-content .pro p:not(.pro-form-fine){margin:0}.atcb-modal-content .pro p.pro-pt{margin-top:1.5em}.atcb-modal-content .pro .pro-field p{font-size:.9em}.pro .btn-flex{align-items:center;display:flex}.pro .atcb-modal-btn svg{fill:none;height:1.5em;margin-right:.5em;stroke:currentcolor;width:auto}#atcb-reference{box-sizing:border-box;filter:drop-shadow(0 0 3px rgba(255 255 255 / 80%));height:auto;padding:8px 0;text-align:center;transform:translate3d(0,0,0);width:100%;z-index:15000000}#atcb-reference.fixed-ref{position:fixed;bottom:10px;right:40px;width:auto}#atcb-reference.atcb-dropup{position:absolute;margin-top:-1px}.atcb-modal-host-initialized #atcb-reference.atcb-dropup{text-align:left}:host(.atcb-dark) #atcb-reference{filter:drop-shadow(0 0 5px #000)}#atcb-reference a,#atcb-reference a:active,#atcb-reference a:visited{opacity:.4;width:150px;max-width:100%;margin:auto;display:inline-block;text-decoration:none}#atcb-reference.fixed-ref a{opacity:.6}#atcb-reference a:hover{opacity:.9;text-decoration:none}#atcb-reference svg{fill:var(--list-text)}\",\r};\rconst atcbIsBrowser = () => {\n if (typeof window === 'undefined') {\n return false;\n } else {\n return true;\n }\n};\nconst atcbIsiOS = atcbIsBrowser()\n ? () => {\n if (/iPad|iPhone|iPod/i.test(navigator.userAgent) && !/MSStream/i.test(navigator.userAgent)) {\n return true;\n } else {\n return false;\n }\n }\n : () => {\n return false;\n };\nconst atcbIsAndroid = atcbIsBrowser()\n ? () => {\n if (/android/i.test(navigator.userAgent) && !/MSStream/i.test(navigator.userAgent)) {\n return true;\n } else {\n return false;\n }\n }\n : () => {\n return false;\n };\n/*const atcbIsChrome = atcbIsBrowser()\n ? () => {\n if (/chrome|chromium|crios|google inc/i.test(navigator.userAgent)) {\n return true;\n } else {\n return false;\n }\n }\n : () => {\n return false;\n };*/\nconst atcbIsSafari = atcbIsBrowser()\n ? () => {\n if (/^(?:(?!chrome|android|crios|fxios).)*safari/i.test(navigator.userAgent)) {\n return true;\n } else {\n return false;\n }\n }\n : () => {\n return false;\n };\nconst atcbIsMobile = () => {\n if (atcbIsAndroid() || atcbIsiOS()) {\n return true;\n } else {\n return false;\n }\n};\nconst atcbIsWebView = atcbIsBrowser()\n ? () => {\n if (/; ?wv|(?:iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent)) {\n return true;\n } else {\n return false;\n }\n }\n : () => {\n return false;\n };\nconst atcbIsProblematicWebView = atcbIsBrowser()\n ? () => {\n if (/Instagram/i.test(navigator.userAgent)) {\n return true;\n } else {\n return false;\n }\n }\n : () => {\n return false;\n };\nconst atcbDefaultTarget = atcbIsWebView() ? '_system' : '_blank';\nconst atcbOptions = ['apple', 'google', 'ical', 'ms365', 'outlookcom', 'msteams', 'yahoo'];\nconst atcbValidRecurrOptions = ['apple', 'google', 'ical'];\nconst atcbInvalidSubscribeOptions = ['msteams'];\nconst atcbIOSInvalidOptions = ['ical'];\nconst atcbAndroidInvalidOptions = ['apple'];\nconst atcbStates = [];\nconst atcbWcParams = [\n 'debug',\n 'proOverride',\n 'cspnonce',\n 'identifier',\n 'name',\n 'dates',\n 'description',\n 'startDate',\n 'startTime',\n 'endDate',\n 'endTime',\n 'timeZone',\n 'useUserTZ',\n 'location',\n 'status',\n 'uid',\n 'organizer',\n 'attendee',\n 'icsFile',\n 'images',\n 'recurrence',\n 'recurrence_until',\n 'recurrence_byDay',\n 'recurrence_byMonth',\n 'recurrence_byMonthDay',\n 'recurrence_weekstart',\n 'sequence',\n 'recurrence_interval',\n 'recurrence_count',\n 'availability',\n 'created',\n 'updated',\n 'subscribe',\n 'options',\n 'optionsMobile',\n 'optionsIOS',\n 'iCalFileName',\n 'listStyle',\n 'buttonStyle',\n 'trigger',\n 'hideIconButton',\n 'hideIconList',\n 'hideIconModal',\n 'hideTextLabelButton',\n 'hideTextLabelList',\n 'buttonsList',\n 'hideBackground',\n 'hideCheckmark',\n 'hideBranding',\n 'size',\n 'label',\n 'inline',\n 'inlineRsvp',\n 'customLabels',\n 'customCss',\n 'lightMode',\n 'language',\n 'hideRichData',\n 'bypassWebViewCheck',\n 'blockInteraction',\n 'styleLight',\n 'styleDark',\n 'disabled',\n 'hidden',\n 'hideButton',\n 'pastDateHandling',\n 'proxy',\n 'fakeMobile',\n 'fakeIOS',\n 'fakeAndroid',\n 'forceOverlay',\n 'rsvp',\n 'ty',\n 'customVar',\n 'dev',\n];\nconst atcbWcProParams = [\n 'debug',\n 'proOverride',\n 'cspnonce',\n 'attendee',\n 'images',\n 'size',\n 'inline',\n 'inlineRsvp',\n 'customLabels',\n 'customCss',\n 'lightMode',\n 'language',\n 'bypassWebViewCheck',\n 'blockInteraction',\n 'styleLight',\n 'styleDark',\n 'disabled',\n 'hidden',\n 'fakeMobile',\n 'fakeIOS',\n 'fakeAndroid',\n 'forceOverlay',\n 'customVar',\n 'proxy',\n 'dev',\n];\nconst atcbWcBooleanParams = [\n 'debug',\n 'proOverride',\n 'useUserTZ',\n 'hideIconButton',\n 'hideIconList',\n 'hideIconModal',\n 'hideTextLabelButton',\n 'hideTextLabelList',\n 'subscribe',\n 'hideBackground',\n 'hideCheckmark',\n 'hideBranding',\n 'inlineRsvp',\n 'hideRichData',\n 'buttonsList',\n 'inline',\n 'bypassWebViewCheck',\n 'blockInteraction',\n 'disabled',\n 'hidden',\n 'hideButton',\n 'proxy',\n 'fakeMobile',\n 'fakeIOS',\n 'fakeAndroid',\n 'forceOverlay',\n 'dev',\n];\nconst atcbWcObjectParams = ['customLabels', 'ty', 'rsvp', 'customVar'];\nconst atcbWcObjectArrayParams = ['dates'];\nconst atcbWcArrayParams = ['images', 'options', 'optionsMobile', 'optionsIOS'];\nconst atcbWcNumberParams = ['sequence', 'recurrence_interval', 'recurrence_count'];\nconst atcbIcon = {\n trigger:\n '',\n apple:\n '',\n google:\n '',\n ical: '',\n msteams:\n '',\n ms365: '',\n outlookcom:\n '',\n yahoo:\n '',\n close:\n '',\n location:\n '',\n warning:\n '',\n checkmark:\n '',\n rsvp: '',\n};\n\n\nasync function atcb_decorate_data(data) {\n data = atcb_decorate_data_boolean(data);\n data.timeZone = atcb_decorate_data_timezone(data.timeZone);\n data = atcb_decorate_data_rrule(data);\n data = atcb_decorate_data_options(data);\n data = atcb_decorate_data_style(data);\n data.sizes = atcb_decorate_sizes(data.size);\n data.lightMode = atcb_decorate_light_mode(data.lightMode);\n data = atcb_decorate_data_i18n(data);\n data = atcb_decorate_data_dates(data);\n data = atcb_decorate_data_meta(data);\n data = atcb_decorate_data_extend(data);\n data = atcb_decorate_data_button_status_handling(data);\n data = await atcb_decorate_data_rsvp(data);\n return data;\n}\nfunction atcb_decorate_data_boolean(data) {\n for (let i = 0; i < atcbWcBooleanParams.length; i++) {\n const attr = atcbWcBooleanParams[`${i}`];\n if (data[`${attr}`]) {\n if (typeof data[`${attr}`] !== 'boolean') {\n const val = data[`${attr}`].toString().trim().toLowerCase() || '';\n data[`${attr}`] = val === '' || val === 'true' ? true : false;\n }\n } else {\n data[`${attr}`] = false;\n }\n }\n return data;\n}\nfunction atcb_decorate_data_timezone(tz = null) {\n if (!tz || tz === '') {\n return 'GMT';\n }\n return tz;\n}\nfunction atcb_decorate_data_rrule(data) {\n if (data.recurrence && data.recurrence !== '') {\n data.recurrence = data.recurrence.replace(/\\s+/g, '').toUpperCase();\n if (!/^(?:RRULE:[\\w=;,:+\\-/\\\\]+|daily|weekly|monthly|yearly)$/im.test(data.recurrence)) {\n data.recurrence = '!wrong rrule format!';\n } else {\n if (/^RRULE:/i.test(data.recurrence)) {\n data.recurrence_simplyfied = false;\n const rruleParts = data.recurrence.substring(6).split(';');\n const rruleObj = new Object();\n rruleParts.forEach(function (rule) {\n rruleObj[rule.split('=')[0]] = rule.split('=')[1];\n });\n data.recurrence_until = rruleObj.UNTIL ? rruleObj.UNTIL : '';\n data.recurrence_count = rruleObj.COUNT ? rruleObj.COUNT : '';\n data.recurrence_byDay = rruleObj.BYDAY ? rruleObj.BYDAY : '';\n data.recurrence_byMonth = rruleObj.BYMONTH ? rruleObj.BYMONTH : '';\n data.recurrence_byMonthDay = rruleObj.BYMONTHDAY ? rruleObj.BYMONTHDAY : '';\n data.recurrence_interval = rruleObj.INTERVAL ? rruleObj.INTERVAL : 1;\n data.recurrence_frequency = rruleObj.FREQ ? rruleObj.FREQ : '';\n } else {\n data.recurrence_simplyfied = true;\n if (!data.recurrence_interval || data.recurrence_interval === '') {\n data.recurrence_interval = 1;\n }\n if (!data.recurrence_weekstart || (data.recurrence_weekstart === '') | (data.recurrence_weekstart.length > 2)) {\n data.recurrence_weekstart = 'MO';\n }\n data.recurrence_frequency = data.recurrence;\n data.recurrence = 'RRULE:FREQ=' + data.recurrence + ';WKST=' + data.recurrence_weekstart + ';INTERVAL=' + data.recurrence_interval;\n if (data.recurrence_until && data.recurrence_until !== '') {\n if (data.endTime && data.endTime !== '') {\n data.recurrence = data.recurrence + ';UNTIL=' + data.recurrence_until.replace(/-/g, '').slice(0, 8) + 'T' + data.endTime.replace(':', '') + '00';\n } else {\n data.recurrence = data.recurrence + ';UNTIL=' + data.recurrence_until.replace(/-/g, '').slice(0, 8);\n }\n }\n if (data.recurrence_count && data.recurrence_count !== '') {\n data.recurrence = data.recurrence + ';COUNT=' + data.recurrence_count;\n }\n if (data.recurrence_byDay && data.recurrence_byDay !== '') {\n data.recurrence = data.recurrence + ';BYDAY=' + data.recurrence_byDay;\n }\n if (data.recurrence_byMonth && data.recurrence_byMonth !== '') {\n data.recurrence = data.recurrence + ';BYMONTH=' + data.recurrence_byMonth;\n }\n if (data.recurrence_byMonthDay && data.recurrence_byMonthDay !== '') {\n data.recurrence = data.recurrence + ';BYMONTHDAY=' + data.recurrence_byMonthDay;\n }\n }\n }\n }\n return data;\n}\nfunction atcb_decorate_data_options(data) {\n const theOptions = (function () {\n if (atcbIsiOS() || data.fakeIOS) {\n if (data.optionsIOS && data.optionsIOS.length > 0) {\n return data.optionsIOS;\n }\n if (data.optionsMobile && data.optionsMobile.length > 0) {\n return data.optionsMobile;\n }\n }\n if ((atcbIsAndroid() || data.fakeMobile || data.fakeAndroid) && data.optionsMobile && data.optionsMobile.length > 0) {\n return data.optionsMobile;\n }\n return data.options || ['ical'];\n })();\n let newOptions = [];\n let iCalGiven = false;\n let appleGiven = false;\n for (let i = 0; i < theOptions.length; i++) {\n const cleanOption = theOptions[`${i}`].split('|');\n const optionName = cleanOption[0].toLowerCase().replace('microsoft', 'ms').replace(/\\./, '');\n if (optionName === 'apple') {\n appleGiven = true;\n }\n if (optionName === 'ical') {\n iCalGiven = true;\n }\n if (\n ((atcbIsiOS() || data.fakeIOS) && atcbIOSInvalidOptions.includes(optionName)) ||\n ((atcbIsAndroid() || data.fakeAndroid) && atcbAndroidInvalidOptions.includes(optionName)) ||\n (data.recurrence && data.recurrence !== '' && (!atcbValidRecurrOptions.includes(optionName) || (data.recurrence_until && data.recurrence_until !== '' && (optionName === 'apple' || optionName === 'ical')) || ((atcbIsiOS() || data.fakeIOS) && optionName === 'google'))) ||\n (data.subscribe && atcbInvalidSubscribeOptions.includes(optionName))\n ) {\n continue;\n }\n if ((atcbIsMobile() || data.fakeMobile) && data.subscribe && (optionName === 'ms365' || optionName === 'outlookcom')) {\n continue;\n }\n newOptions.push(optionName);\n }\n if (data.subscribe && data.icsFile && data.icsFile.startsWith('https://calendar.google.com/calendar/') && !data.icsFile.endsWith('.ics')) {\n newOptions = ['google'];\n }\n if (newOptions.length === 0) {\n if (!atcbIsiOS() && !data.fakeIOS) {\n newOptions.push('ical');\n }\n iCalGiven = true;\n }\n if ((atcbIsiOS() || data.fakeIOS) && iCalGiven && !appleGiven) {\n newOptions.push('apple');\n }\n if ((atcbIsAndroid() || data.fakeAndroid) && appleGiven && !iCalGiven) {\n newOptions.push('ical');\n }\n data.options = newOptions;\n return data;\n}\nfunction atcb_decorate_data_style(data) {\n if (data.inlineRSVP) {\n data.inline = true;\n }\n if (!data.listStyle || data.listStyle === '') {\n data.listStyle = 'dropdown';\n }\n if (data.listStyle === 'modal') {\n data.trigger = 'click';\n }\n if (data.buttonStyle && data.buttonStyle !== '' && data.buttonStyle != 'default') {\n if (data.buttonStyle == 'round' || data.buttonStyle == 'text' || data.buttonStyle == 'date' || data.buttonStyle == 'neumorphism') {\n data.trigger = 'click';\n }\n } else {\n data.buttonStyle = 'default';\n }\n if ((data.buttonStyle == 'default' || data.buttonStyle == '3d' || data.buttonStyle == 'flat') && !data.hideTextLabelList && data.hideTextLabelButton && (data.listStyle == 'dropdown' || data.listStyle == 'dropdown-static' || data.listStyle == 'dropup-static')) {\n data.listStyle = 'overlay';\n }\n if (data.buttonsList && data.buttonStyle == 'date') {\n data.buttonsList = false;\n }\n return data;\n}\nfunction atcb_decorate_sizes(size) {\n const sizes = [];\n sizes['l'] = sizes['m'] = sizes['s'] = 16;\n if (size && size !== '') {\n const sizeParts = size.split('|');\n for (let i = 0; i < sizeParts.length; i++) {\n sizeParts[`${i}`] = parseInt(sizeParts[`${i}`]);\n }\n if (sizeParts[0] >= 0 && sizeParts[0] < 11) {\n sizes['l'] = sizes['m'] = sizes['s'] = 10 + sizeParts[0];\n }\n if (sizeParts.length > 2) {\n if (sizeParts[1] >= 0 && sizeParts[1] < 11) {\n sizes['m'] = 10 + sizeParts[1];\n }\n if (sizeParts[2] >= 0 && sizeParts[2] < 11) {\n sizes['s'] = 10 + sizeParts[2];\n }\n } else if (sizeParts.length == 2) {\n if (sizeParts[1] >= 0 && sizeParts[1] < 11) {\n sizes['m'] = sizes['s'] = 10 + sizeParts[1];\n }\n }\n }\n return sizes;\n}\nfunction atcb_decorate_light_mode(lightMode = '') {\n if (lightMode == 'system' && atcbIsBrowser()) {\n const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');\n return prefersDarkScheme.matches ? 'dark' : 'light';\n }\n if (lightMode != 'bodyScheme' && lightMode != 'dark') {\n return 'light';\n }\n return lightMode;\n}\nfunction atcb_decorate_data_i18n(data) {\n if (!data.language || data.language === '' || !availableLanguages.includes(data.language)) {\n data.language = 'en';\n }\n if (data.language.length > 2) {\n data.language = data.language.substring(0, 2);\n }\n if (rtlLanguages.includes(data.language)) {\n data.rtl = true;\n } else {\n data.rtl = false;\n }\n return data;\n}\nfunction atcb_decorate_data_dates(data) {\n if (data.dates && data.dates.length > 0) {\n for (let i = 0; i < data.dates.length; i++) {\n if (!data.dates[`${i}`].timeZone && data.timeZone) {\n data.dates[`${i}`].timeZone = data.timeZone;\n }\n if (!data.dates[`${i}`].useUserTZ && data.useUserTZ) {\n data.dates[`${i}`].useUserTZ = data.useUserTZ;\n }\n const cleanedUpDates = atcb_date_cleanup(data.dates[`${i}`]);\n data.dates[`${i}`].startDate = cleanedUpDates.startDate;\n data.dates[`${i}`].endDate = cleanedUpDates.endDate;\n data.dates[`${i}`].startTime = cleanedUpDates.startTime;\n data.dates[`${i}`].endTime = cleanedUpDates.endTime;\n data.dates[`${i}`].timeZone = cleanedUpDates.timeZone;\n data.dates[`${i}`].timestamp = atcb_date_specials_calculation('timestamp', data.dates[`${i}`].startDate, data.dates[`${i}`].startTime, data.dates[`${i}`].timeZone);\n data.dates[`${i}`].overdue = atcb_date_specials_calculation('overdue', data.dates[`${i}`].endDate, data.dates[`${i}`].endTime, data.dates[`${i}`].timeZone);\n }\n } else {\n data.dates = [];\n data.dates[0] = new Object();\n if (data.useUserTZ) data.dates[0].useUserTZ = data.useUserTZ;\n const cleanedUpDates = atcb_date_cleanup(data);\n data.startDate = data.dates[0].startDate = cleanedUpDates.startDate;\n data.endDate = data.dates[0].endDate = cleanedUpDates.endDate;\n data.startTime = data.dates[0].startTime = cleanedUpDates.startTime;\n data.endTime = data.dates[0].endTime = cleanedUpDates.endTime;\n data.timeZone = data.dates[0].timeZone = cleanedUpDates.timeZone;\n if (!data.recurrence) {\n data.dates[0].overdue = atcb_date_specials_calculation('overdue', data.endDate, data.endTime, data.timeZone);\n } else {\n data.dates[0].overdue = false;\n }\n }\n const now = new Date();\n if (!data.created || data.created === '') {\n data.created = atcb_format_datetime(now, 'clean', true);\n }\n if (!data.updated || data.updated === '') {\n data.updated = atcb_format_datetime(now, 'clean', true);\n }\n return data;\n}\nfunction atcb_decorate_data_meta(data) {\n if (!data.status || data.status === '') {\n data.status = 'CONFIRMED';\n }\n if (!data.sequence || data.sequence === '') {\n data.sequence = 0;\n }\n return data;\n}\nfunction atcb_decorate_data_description(data, i) {\n const cleanDescription = (desc) => desc.replace(/(\\\\r\\\\n|\\\\n|\\\\r|)/g, '');\n let description = data.dates[`${i}`].description || data.description || '';\n if (description) {\n description = cleanDescription(description);\n if (data.customVar) {\n for (const key in data.customVar) {\n const sanitizedKey = '%%' + key.replace(/[^\\w\\-.]/g, '') + '%%';\n // eslint-disable-next-line security/detect-non-literal-regexp\n description = description.replace(new RegExp(sanitizedKey, 'gi'), data.customVar[`${key}`]);\n }\n }\n const descriptionHtmlFree = atcb_rewrite_html_elements(description, true);\n const descriptionHtmlFreeICal = atcb_rewrite_html_elements(description, true, true);\n description = atcb_rewrite_html_elements(description);\n data.dates[`${i}`] = { ...data.dates[`${i}`], description, descriptionHtmlFree, descriptionHtmlFreeICal };\n } else {\n data.dates[`${i}`].descriptionHtmlFree = data.dates[`${i}`].descriptionHtmlFreeICal = data.dates[`${i}`].description = '';\n }\n return data;\n}\nfunction atcb_decorate_data_extend(data) {\n for (let i = 0; i < data.dates.length; i++) {\n data = atcb_decorate_data_description(data, i);\n if (!data.dates[`${i}`].name || data.dates[`${i}`].name === '') {\n data.dates[`${i}`].name = data.name;\n }\n if (!data.dates[`${i}`].status) {\n data.dates[`${i}`].status = data.status.toUpperCase();\n } else {\n data.dates[`${i}`].status = data.dates[`${i}`].status.toUpperCase();\n }\n if (!data.dates[`${i}`].sequence) {\n data.dates[`${i}`].sequence = data.sequence;\n }\n if (!data.dates[`${i}`].organizer && data.organizer) {\n data.dates[`${i}`].organizer = data.organizer;\n }\n if (!data.dates[`${i}`].attendee && data.attendee) {\n data.dates[`${i}`].attendee = data.attendee;\n }\n if (!data.dates[`${i}`].availability && data.availability) {\n data.dates[`${i}`].availability = data.availability.toLowerCase();\n } else if (data.dates[`${i}`].availability) {\n data.dates[`${i}`].availability = data.dates[`${i}`].availability.toLowerCase();\n }\n if (!data.dates[`${i}`].location && data.location) {\n data.dates[`${i}`].location = data.location;\n }\n if (data.dates[`${i}`].location && data.dates[`${i}`].location.startsWith('http')) {\n data.dates[`${i}`].onlineEvent = true;\n } else {\n data.dates[`${i}`].onlineEvent = false;\n }\n if (!data.dates[`${i}`].uid) {\n if (i === 0 && data.uid && data.uid !== '') {\n data.dates[0].uid = data.uid;\n } else {\n if (data.uid && data.uid !== '') {\n data.dates[`${i}`].uid = data.uid + '-' + (i + 1);\n } else {\n data.dates[`${i}`].uid = atcb_generate_uuid();\n }\n }\n }\n if (data.customVar) {\n for (const key in data.customVar) {\n const sanitizedKey = '%%' + key.replace(/[^\\w\\-.]/g, '') + '%%';\n // eslint-disable-next-line security/detect-non-literal-regexp\n data.dates[`${i}`].name = data.dates[`${i}`].name.replace(new RegExp(sanitizedKey, 'gi'), data.customVar[`${key}`]);\n // eslint-disable-next-line security/detect-non-literal-regexp\n data.dates[`${i}`].location = data.dates[`${i}`].location.replace(new RegExp(sanitizedKey, 'gi'), data.customVar[`${key}`]);\n }\n }\n }\n if (data.recurrence && data.recurrence !== '') {\n data.dates[0].recurrence = data.recurrence;\n }\n if (data.dates.length > 1) {\n data.dates.sort((a, b) => a.timestamp - b.timestamp);\n }\n return data;\n}\nfunction atcb_date_cleanup(dateTimeData) {\n function isValidDateFormat(dateStr) {\n return /^\\d\\d\\d\\d-\\d\\d-\\d\\d(?:T\\d\\d:\\d\\d)?(?::\\d\\d)?(?:.\\d\\d\\d)?Z?$/i.test(dateStr);\n }\n function isValidTodayFormat(dateStr) {\n return /^today(?:\\+(?:\\d|\\d\\d|\\d\\d\\d|\\d\\d\\d\\d))?$/i.test(dateStr);\n }\n if (!dateTimeData.endDate || dateTimeData.endDate === '') {\n dateTimeData.endDate = dateTimeData.startDate;\n }\n const endpoints = ['start', 'end'];\n endpoints.forEach(function (point) {\n const dateStr = dateTimeData[point + 'Date'];\n if (!isValidDateFormat(dateStr) && !isValidTodayFormat(dateStr)) {\n dateTimeData[point + 'Date'] = 'badly-formed';\n } else {\n if (isValidTodayFormat(dateStr)) dateTimeData[point + 'Date'] = atcb_date_calculation(dateStr);\n if (dateTimeData[point + 'Date']) {\n const tmpSplitStartDate = dateTimeData[point + 'Date'].split('T');\n if (tmpSplitStartDate[1]) {\n dateTimeData[point + 'Date'] = tmpSplitStartDate[0];\n dateTimeData[point + 'Time'] = tmpSplitStartDate[1];\n }\n }\n if (dateTimeData[point + 'Time'] && dateTimeData[point + 'Time'].length > 5) {\n dateTimeData[point + 'Time'] = dateTimeData[point + 'Time'].substring(0, 5);\n }\n }\n });\n if (dateTimeData.timeZone === 'currentBrowser' || dateTimeData.useUserTZ) {\n const browserTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone || 'GMT';\n if (dateTimeData.useUserTZ && dateTimeData.startTime && dateTimeData.startTime !== '' && dateTimeData.endTime && dateTimeData.endTime !== '') {\n const newStartDateTime = atcb_translate_via_time_zone(dateTimeData.startDate, dateTimeData.startTime, dateTimeData.timeZone, browserTimezone);\n const newEndDateTime = atcb_translate_via_time_zone(dateTimeData.endDate, dateTimeData.endTime, dateTimeData.timeZone, browserTimezone);\n dateTimeData.startDate = newStartDateTime[0];\n dateTimeData.startTime = newStartDateTime[1];\n dateTimeData.endDate = newEndDateTime[0];\n dateTimeData.endTime = newEndDateTime[1];\n }\n dateTimeData.timeZone = browserTimezone;\n }\n return dateTimeData;\n}\nfunction atcb_date_specials_calculation(type, dateString, timeString = null, timeZone) {\n try {\n const tmpDate = (function () {\n if (timeString) {\n const offsetEnd = tzlib_get_offset(timeZone, dateString, timeString);\n return new Date(dateString + ' ' + timeString + ':00 GMT' + offsetEnd);\n }\n return new Date(dateString);\n })();\n if (type === 'timestamp') {\n return tmpDate.getTime();\n }\n if (!timeString) {\n tmpDate.setDate(tmpDate.getDate() + 1);\n }\n const currentUtcDate = new Date().toISOString();\n return tmpDate.getTime() < new Date(currentUtcDate).getTime();\n } catch {\n return false;\n }\n}\nfunction atcb_date_calculation(dateString) {\n const today = new Date();\n const todayString = today.getUTCFullYear() + '-' + (today.getUTCMonth() + 1) + '-' + today.getUTCDate();\n dateString = dateString.replace(/today/gi, todayString);\n const dateStringParts = dateString.split('+');\n const dateParts = dateStringParts[0].split('-');\n const newDate = new Date(Date.UTC(dateParts[0], dateParts[1] - 1, dateParts[2].substring(0, 2)));\n if (dateStringParts[1] && dateStringParts[1] > 0) {\n newDate.setDate(newDate.getDate() + parseInt(dateStringParts[1]));\n }\n try {\n return newDate.toISOString().replace(/T(\\d{2}:\\d{2}:\\d{2}\\.\\d{3})Z/g, '');\n } catch {\n return false;\n }\n}\nfunction atcb_decorate_data_button_status_handling(data) {\n if (!data.pastDateHandling || (data.pastDateHandling != 'disable' && data.pastDateHandling != 'hide')) {\n data.pastDateHandling = 'none';\n }\n data.allOverdue = (function () {\n for (let i = 0; i < data.dates.length; i++) {\n if (!data.dates[`${i}`].overdue) {\n return false;\n }\n }\n return true;\n })();\n if (data.allOverdue) {\n if (data.pastDateHandling == 'disable') {\n data.disabled = true;\n } else if (data.pastDateHandling == 'hide') {\n data.hidden = true;\n }\n }\n data.allCancelled = (function () {\n for (let i = 0; i < data.dates.length; i++) {\n if (!data.dates[`${i}`].status || data.dates[`${i}`].status.toLowerCase() !== 'cancelled') {\n return false;\n }\n }\n return true;\n })();\n if (data.disabled || data.hidden) {\n data.blockInteraction = true;\n }\n return data;\n}\nasync function atcb_decorate_data_rsvp(data) {\n if (typeof atcb_check_bookings !== 'function' || !data.rsvp || !data.proKey || Object.keys(data.rsvp).length === 0) return data;\n data.rsvp.expired = (function () {\n if (data.rsvp && data.rsvp.expires && new Date(data.rsvp.expires) < new Date()) {\n return true;\n }\n return false;\n })();\n if (data.rsvp.max) {\n const bookings = await atcb_check_bookings(data.proKey, data.dev);\n data.rsvp.seatsLeft = data.rsvp.max - bookings;\n if (data.rsvp.seatsLeft < 1) {\n data.rsvp.bookedOut = true;\n }\n if (data.rsvp.expired || data.rsvp.bookedOut) {\n data.blockInteraction = true;\n }\n if (data.blockInteraction) {\n data.disabled = true;\n }\n }\n return data;\n}\n\n\nasync function atcb_check_required(data) {\n if (!data.name || data.name === '') {\n throw new Error('Add to Calendar Button generation failed: required name information missing');\n }\n if (data.dates != null && data.dates.length > 0) {\n if (data.subscribe === true && data.dates.length > 1) {\n throw new Error('Add to Calendar Button generation failed: a subscription calendar cannot be a multi-date setup');\n }\n const requiredMultiField = ['name', 'startDate'];\n const requiredMultiFieldFlex = ['name'];\n return requiredMultiField.every(function (field) {\n for (let i = 0; i < data.dates.length; i++) {\n if (\n (!requiredMultiFieldFlex.includes(`${field}`) && (!data.dates[`${i}`][`${field}`] || data.dates[`${i}`][`${field}`] === '')) ||\n (requiredMultiFieldFlex.includes(`${field}`) && (!data.dates[`${i}`][`${field}`] || data.dates[`${i}`][`${field}`] === '') && (!data[`${field}`] || data[`${field}`] === ''))\n ) {\n if (!data.subscribe || field !== 'startDate') {\n throw new Error('Add to Calendar Button generation failed: required setting missing [dates array object #' + (i + 1) + '/' + data.dates.length + '] => [' + field + ']');\n } else {\n data.dates[`${i}`].startDate = 'today';\n }\n }\n }\n return true;\n });\n } else {\n const requiredSingleField = ['startDate'];\n return requiredSingleField.every(function (field) {\n if (!data[`${field}`] || data[`${field}`] === '') {\n if (!data.subscribe || field !== 'startDate') {\n throw new Error('Add to Calendar Button generation failed: required setting missing [' + field + ']');\n } else {\n data.startDate = 'today';\n }\n }\n return true;\n });\n }\n}\nasync function atcb_validate(data) {\n const msgPrefix = 'Add to Calendar Button generation (' + data.identifier + ')';\n try {\n await atcb_validate_icsFile(data, msgPrefix);\n await atcb_validate_buttonStyle(data, msgPrefix);\n await atcb_validate_subscribe(data, msgPrefix);\n await atcb_validate_created(data, msgPrefix);\n await atcb_validate_updated(data, msgPrefix);\n await atcb_validate_options(data, msgPrefix);\n await atcb_validate_date_blocks(data, msgPrefix);\n await atcb_validate_rrule(data, msgPrefix);\n if (data.recurrence_simplyfied) {\n await atcb_validate_rrule_simplyfied(data, msgPrefix);\n }\n return true;\n } catch (e) {\n throw new Error(e.message);\n }\n}\nasync function atcb_validate_icsFile(data, msgPrefix, i = '', msgSuffix = '') {\n const icsFileStr = (function () {\n if (i !== '' && data.dates[`${i}`].icsFile) {\n return data.dates[`${i}`].icsFile;\n }\n if (i === '' && data.icsFile) {\n return data.icsFile;\n }\n return '';\n })();\n if (icsFileStr !== '') {\n if (!atcb_secure_url(icsFileStr, false) || (!data.icsFile.startsWith('https://') && !data.icsFile.startsWith('http://'))) {\n throw new Error(msgPrefix + ' failed: explicit ics file path not valid' + msgSuffix);\n }\n }\n return true;\n}\nasync function atcb_validate_buttonStyle(data, msgPrefix) {\n const availableStyles = ['default', '3d', 'flat', 'round', 'neumorphism', 'text', 'date', 'custom', 'none'];\n if (!availableStyles.includes(data.buttonStyle)) {\n throw new Error(msgPrefix + ' failed: provided buttonStyle invalid');\n }\n if (data.customCss && data.customCss !== '' && (!atcb_secure_url(data.customCss, false) || !/\\.css(?:$|\\?)/.test(data.customCss))) {\n throw new Error(msgPrefix + ' failed: customCss provided, but no valid url');\n }\n if ((!data.customCss || data.customCss === '') && data.buttonStyle === 'custom') {\n throw new Error(msgPrefix + ' failed: buttonStyle \"custom\" selected, but no customCss file provided');\n }\n if (data.rsvp && (data.buttonStyle === 'date' || data.buttonStyle === 'none')) {\n throw new Error(msgPrefix + ' failed: buttonStyle ' + data.buttonStyle + ' is not compatible with the RSVP functionality');\n }\n return true;\n}\nasync function atcb_validate_subscribe(data, msgPrefix) {\n if (data.subscribe === true && (!data.icsFile || data.icsFile === '')) {\n throw new Error(msgPrefix + ' failed: a subscription calendar requires a valid explicit ics file as well');\n }\n return true;\n}\nasync function atcb_validate_created(data, msgPrefix) {\n if (!/^\\d{8}T\\d{6}Z$/.test(data.created)) {\n throw new Error(msgPrefix + ' failed: created date format not valid. Needs to be a full ISO-8601 UTC date and time string, formatted YYYYMMDDTHHMMSSZ');\n }\n return true;\n}\nasync function atcb_validate_updated(data, msgPrefix) {\n if (!/^\\d{8}T\\d{6}Z$/.test(data.updated)) {\n throw new Error(msgPrefix + ' failed: updated date format not valid. Needs to be a full ISO-8601 UTC date and time string, formatted YYYYMMDDTHHMMSSZ');\n }\n return true;\n}\nasync function atcb_validate_options(data, msgPrefix) {\n const isValid = data.options.every((option) => {\n if (!atcbOptions.includes(option)) {\n throw new Error(`${msgPrefix} failed: invalid option [${option}]`);\n }\n return true;\n });\n return isValid;\n}\nasync function atcb_validate_date_blocks(data, msgPrefix) {\n try {\n for (let i = 0; i < data.dates.length; i++) {\n const msgSuffix = (function () {\n if (data.dates.length === 1) {\n return '';\n } else {\n return ' [dates array object #' + (i + 1) + '/' + data.dates.length + '] ';\n }\n })();\n await atcb_validate_icsFile(data, msgPrefix, i, msgSuffix);\n await atcb_validate_status(data, msgPrefix, i, msgSuffix);\n await atcb_validate_availability(data, msgPrefix, i, msgSuffix);\n await atcb_validate_organizer(data, msgPrefix, i, msgSuffix);\n await atcb_validate_attendee(data, msgPrefix, i, msgSuffix);\n await atcb_validate_uid(data, msgPrefix, i, msgSuffix);\n await atcb_validate_sequence(data, msgPrefix, i, msgSuffix);\n await atcb_validate_timezone(data, msgPrefix, i, msgSuffix);\n await atcb_validate_datetime(data, msgPrefix, i, msgSuffix);\n }\n return true;\n } catch (e) {\n throw new Error(e.message);\n }\n}\nasync function atcb_validate_status(data, msgPrefix, i, msgSuffix) {\n const allowedStatuses = ['tentative', 'confirmed', 'cancelled'];\n if (!allowedStatuses.includes(data.dates[`${i}`].status.toLowerCase())) {\n throw new Error(msgPrefix + ' failed: event status needs to be TENTATIVE, CONFIRMED, or CANCELLED' + msgSuffix);\n }\n return true;\n}\nasync function atcb_validate_availability(data, msgPrefix, i, msgSuffix) {\n if (data.dates[`${i}`].availability && data.dates[`${i}`].availability !== '' && data.dates[`${i}`].availability !== 'free' && data.dates[`${i}`].availability !== 'busy') {\n throw new Error(msgPrefix + ' failed: event availability needs to be \"free\" or \"busy\"' + msgSuffix);\n }\n return true;\n}\nasync function atcb_validate_organizer(data, msgPrefix, i, msgSuffix) {\n if (data.dates[`${i}`].organizer && data.dates[`${i}`].organizer !== '') {\n const organizerParts = data.dates[`${i}`].organizer.split('|');\n if (organizerParts.length !== 2 || organizerParts[0].length > 50 || organizerParts[1].length > 100 || !atcb_validEmail(organizerParts[1])) {\n throw new Error(msgPrefix + ' failed: organizer needs to match the schema \"NAME|EMAIL\" with a valid email address' + msgSuffix);\n }\n }\n return true;\n}\nasync function atcb_validate_attendee(data, msgPrefix, i, msgSuffix) {\n if (data.dates[`${i}`].attendee && data.dates[`${i}`].attendee !== '') {\n if (!data.dates[`${i}`].organizer || data.dates[`${i}`].organizer === '') {\n throw new Error(msgPrefix + ' failed: if an attendee is set, you also need to set the organizer' + msgSuffix);\n }\n const attendeeParts = data.dates[`${i}`].attendee.split('|');\n if (attendeeParts.length === 1 && atcb_validEmail(attendeeParts[0])) {\n return true;\n }\n if (attendeeParts.length !== 2 || attendeeParts[0].length > 50 || attendeeParts[1].length > 100 || !atcb_validEmail(attendeeParts[1])) {\n throw new Error(msgPrefix + ' failed: attendee needs to be a valid email address or match the schema \"NAME|EMAIL\" with EMAIL being a valid email address' + msgSuffix);\n }\n }\n return true;\n}\nasync function atcb_validate_uid(data, msgPrefix, i, msgSuffix) {\n if (!/^(?:\\w|-){1,254}$/.test(data.dates[`${i}`].uid)) {\n if (data.debug) {\n console.warn(msgPrefix + ': UID not valid. May only contain alpha, digits, and dashes; and be less than 255 characters. Falling back to an automated value!' + msgSuffix);\n }\n data.dates[`${i}`].uid = atcb_generate_uuid();\n }\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(data.dates[`${i}`].uid) && data.debug) {\n console.warn(msgPrefix + ': UID is highly recommended to be a hex-encoded random Universally Unique Identifier (UUID)!' + msgSuffix);\n }\n return true;\n}\nasync function atcb_validate_sequence(data, msgPrefix, i, msgSuffix) {\n if (data.dates[`${i}`].sequence && (data.dates[`${i}`].sequence < 0 || data.dates[`${i}`].sequence % 1 !== 0)) {\n if (data.debug) {\n console.log(msgPrefix + ': sequence needs to be a full number >= 0. Used the default 0 instead' + msgSuffix);\n }\n data.dates[`${i}`].sequence = 0;\n }\n return true;\n}\nasync function atcb_validate_timezone(data, msgPrefix, i, msgSuffix) {\n const validTimeZones = tzlib_get_timezones();\n if (!validTimeZones.includes(data.dates[`${i}`].timeZone)) {\n throw new Error(msgPrefix + ' failed: invalid time zone given' + msgSuffix);\n }\n return true;\n}\nasync function atcb_validate_datetime(data, msgPrefix, i, msgSuffix) {\n const selectedDate = data.dates[`${i}`];\n const dates = ['startDate', 'endDate'];\n const newDate = {};\n dates.forEach((date) => {\n const dateString = selectedDate[`${date}`];\n if (dateString.length !== 10) {\n throw new Error(`${msgPrefix} failed: date misspelled [-> YYYY-MM-DD]${msgSuffix}`);\n }\n const dateParts = dateString.split('-');\n if (dateParts.length !== 3) {\n throw new Error(`${msgPrefix} failed: date misspelled [${date}: ${dateString}]${msgSuffix}`);\n }\n newDate[`${date}`] = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);\n });\n const times = ['startTime', 'endTime'];\n times.forEach((time) => {\n const timeString = selectedDate[`${time}`];\n if (timeString) {\n if (timeString.length !== 5) {\n throw new Error(`${msgPrefix} failed: time misspelled [-> HH:MM]${msgSuffix}`);\n }\n const timeParts = timeString.split(':');\n if (timeParts.length !== 2 || timeParts[0] > 23 || timeParts[1] > 59) {\n throw new Error(`${msgPrefix} failed: time misspelled [${time}: ${timeString}]${msgSuffix}`);\n }\n const dateKey = time === 'startTime' ? 'startDate' : 'endDate';\n newDate[`${dateKey}`] = new Date(newDate[`${dateKey}`].getTime() + parseInt(timeParts[0], 10) * 3600000 + parseInt(timeParts[1], 10) * 60000);\n }\n });\n if ((selectedDate.startTime && !selectedDate.endTime) || (!selectedDate.startTime && selectedDate.endTime)) {\n throw new Error(`${msgPrefix} failed: if you set a starting or end time, the respective other one also needs to be defined${msgSuffix}`);\n }\n if (newDate.endDate < newDate.startDate) {\n throw new Error(`${msgPrefix} failed: end date before start date${msgSuffix}`);\n }\n return true;\n}\nasync function atcb_validate_rrule(data, msgPrefix) {\n if (data.recurrence && data.recurrence !== '' && data.dates.length > 1) {\n throw new Error(msgPrefix + ' failed: RRULE and multi-date set at the same time');\n }\n if (data.recurrence && data.recurrence !== '' && !/^RRULE:[\\w=;,:+\\-/\\\\]+$/i.test(data.recurrence)) {\n throw new Error(msgPrefix + ' failed: RRULE data misspelled');\n }\n return true;\n}\nasync function atcb_validate_rrule_simplyfied(data, msgPrefix) {\n if (data.recurrence_interval && (data.recurrence_interval < 1 || data.recurrence_interval % 1 !== 0)) {\n throw new Error(msgPrefix + ' failed: recurrence data (interval) misspelled');\n }\n if (data.recurrence_until && data.recurrence_until !== '' && !/^[\\d\\-:]+$/.test(data.recurrence_until)) {\n throw new Error(msgPrefix + ' failed: recurrence data (until) misspelled');\n }\n if (data.recurrence_count && (data.recurrence_count < 1 || data.recurrence_count % 1 !== 0)) {\n throw new Error(msgPrefix + ' failed: recurrence data (interval) misspelled');\n }\n if (data.recurrence_byMonth && data.recurrence_byMonth !== '' && !/^[\\d,]+$/.test(data.recurrence_byMonth)) {\n throw new Error(msgPrefix + ' failed: recurrence data (byMonth) misspelled');\n }\n if (data.recurrence_byMonthDay && data.recurrence_byMonthDay !== '' && !/^[\\d,]+$/.test(data.recurrence_byMonthDay)) {\n throw new Error(msgPrefix + ' failed: recurrence data (byMonthDay) misspelled');\n }\n if (data.recurrence_byDay && data.recurrence_byDay !== '' && !/^(?:[\\d,-]|MO|TU|WE|TH|FR|SA|SU)+$/im.test(data.recurrence_byDay)) {\n throw new Error(msgPrefix + ' failed: recurrence data (byDay) misspelled');\n }\n if (data.recurrence_weekstart && data.recurrence_weekstart !== '' && !/^(?:MO|TU|WE|TH|FR|SA|SU)$/im.test(data.recurrence_weekstart)) {\n throw new Error(msgPrefix + ' failed: recurrence data (weekstart) misspelled');\n }\n return true;\n}\n\n\nfunction atcb_toggle(host, action, data = '', button = null, keyboardTrigger = false, generatedButton = false) {\n if (action == 'open') {\n atcb_open(host, data, button, keyboardTrigger, generatedButton);\n } else if (action == 'close' || button.classList.contains('atcb-active') || host.querySelector('.atcb-active-modal')) {\n atcb_close(host, keyboardTrigger);\n } else {\n atcb_open(host, data, button, keyboardTrigger, generatedButton);\n }\n}\nasync function atcb_open(host, data, button = null, keyboardTrigger = false, generatedButton = false) {\n if (host.querySelector('.atcb-list') || host.querySelector('.atcb-modal')) return;\n atcb_log_event('openList', data.identifier, data.identifier);\n atcbStates['active'] = data.identifier;\n const list = atcb_generate_dropdown_list(host, data);\n const listWrapper = document.createElement('div');\n listWrapper.classList.add('atcb-list-wrapper');\n listWrapper.setAttribute('part', 'atcb-list-wrapper');\n if (data.hideTextLabelList) {\n listWrapper.classList.add('atcb-no-text');\n }\n if (button) {\n button.classList.add('atcb-active');\n button.setAttribute('aria-expanded', true);\n if (data.listStyle === 'modal') {\n button.classList.add('atcb-modal-style');\n list.classList.add('atcb-modal');\n } else {\n listWrapper.append(list);\n listWrapper.classList.add('atcb-dropdown');\n if (data.listStyle === 'overlay') {\n listWrapper.classList.add('atcb-dropoverlay');\n }\n }\n if (generatedButton) {\n list.classList.add('atcb-generated-button'); \n }\n } else {\n list.classList.add('atcb-modal');\n }\n const bgOverlay = atcb_generate_bg_overlay(host, data.trigger, data.listStyle === 'modal', !data.hideBackground);\n if (data.listStyle === 'modal') {\n const modalHost = await atcb_generate_modal_host(host, data);\n modalHost.querySelector('.atcb-modal-host-initialized').append(bgOverlay);\n bgOverlay.append(list);\n if (!data.hideBranding) {\n atcb_create_atcbl(modalHost, false);\n }\n atcb_set_sizes(list, data.sizes);\n atcb_manage_body_scroll(modalHost);\n atcb_set_fullsize(bgOverlay);\n } else {\n if (data.forceOverlay) {\n host = await atcb_generate_overlay_dom(host, data);\n button = host.querySelector('button.atcb-button');\n }\n host.querySelector('.atcb-initialized').append(listWrapper);\n listWrapper.append(list);\n if (data.buttonStyle != 'default') {\n listWrapper.classList.add('atcb-style-' + data.buttonStyle);\n }\n if (!data.hideBranding) {\n atcb_create_atcbl(host);\n }\n host.append(bgOverlay);\n atcb_set_sizes(list, data.sizes);\n listWrapper.style.display = 'none';\n setTimeout(function () {\n listWrapper.style.display = 'block';\n if (data.listStyle === 'dropdown-static') {\n atcb_position_list(host, button, listWrapper, true);\n } else if (data.listStyle === 'dropup-static') {\n atcb_position_list(host, button, listWrapper, false, true);\n } else {\n atcb_position_list(host, button, listWrapper);\n }\n }, 5);\n atcb_set_fullsize(bgOverlay);\n }\n const focusEl = (function () {\n const hostEl = host.querySelector('.atcb-list-item');\n if (hostEl) {\n return hostEl;\n }\n const modalHost = document.getElementById(data.identifier + '-modal-host');\n if (!modalHost) {\n return;\n }\n return modalHost.shadowRoot.querySelector('.atcb-list-item');\n })();\n if (focusEl) {\n if (keyboardTrigger) {\n focusEl.focus();\n } else {\n focusEl.focus({ preventScroll: true });\n focusEl.blur();\n }\n }\n}\nfunction atcb_close(host, keyboardTrigger = false) {\n const existingModalHost = document.getElementById(host.host.getAttribute('atcb-button-id') + '-modal-host');\n const allModals = (function () {\n if (!existingModalHost || existingModalHost.length === 0) {\n return [];\n }\n return existingModalHost.shadowRoot.querySelectorAll('.atcb-modal[data-modal-nr]');\n })();\n if (allModals.length > 1) {\n existingModalHost.shadowRoot.querySelectorAll('.atcb-modal[data-modal-nr=\"' + allModals.length + '\"]')[0].remove();\n const nextModal = existingModalHost.shadowRoot.querySelectorAll('.atcb-modal[data-modal-nr=\"' + (allModals.length - 1) + '\"]')[0];\n nextModal.classList.remove('atcb-hidden');\n let focusEl = nextModal;\n const availableButtons = nextModal.getElementsByTagName('button');\n if (availableButtons.length > 0) {\n focusEl = availableButtons[0];\n }\n focusEl.focus();\n if (!keyboardTrigger) {\n focusEl.blur();\n }\n } else {\n const newFocusEl = (function () {\n const hostEl = host.querySelector('.atcb-active, .atcb-active-modal');\n if (hostEl) {\n return hostEl;\n }\n return document.querySelector('.atcb-active, .atcb-active-modal');\n })();\n if (newFocusEl) {\n newFocusEl.focus({ preventScroll: true });\n if (!keyboardTrigger) {\n newFocusEl.blur();\n }\n }\n Array.from(host.querySelectorAll('.atcb-active')).forEach((button) => {\n button.classList.remove('atcb-active');\n button.setAttribute('aria-expanded', false);\n });\n Array.from(host.querySelectorAll('.atcb-active-modal')).forEach((modal) => {\n modal.classList.remove('atcb-active-modal');\n });\n Array.from(document.querySelectorAll('.atcb-active')).forEach((button) => {\n button.classList.remove('atcb-active');\n button.setAttribute('aria-expanded', false);\n });\n Array.from(document.querySelectorAll('.atcb-active-modal')).forEach((modal) => {\n modal.classList.remove('atcb-active-modal');\n });\n if (existingModalHost) {\n existingModalHost.remove();\n }\n document.body.classList.remove('atcb-modal-no-scroll');\n document.documentElement.classList.remove('atcb-modal-no-scroll');\n Array.from(host.querySelectorAll('.atcb-list-wrapper'))\n .concat(Array.from(host.querySelectorAll('.atcb-list')))\n .concat(Array.from(host.querySelectorAll('#atcb-reference')))\n .concat(Array.from(host.querySelectorAll('#atcb-bgoverlay')))\n .forEach((el) => el.remove());\n const hiddenButton = document.querySelector('.atcb-shadow-hide');\n if (hiddenButton) {\n hiddenButton.shadowRoot.querySelector('.atcb-initialized').style.opacity = '1';\n hiddenButton.classList.remove('atcb-shadow-hide');\n window.removeEventListener('scroll', atcb_position_shadow_button_listener);\n window.removeEventListener('resize', atcb_position_shadow_button_listener);\n }\n atcbStates['active'] = '';\n }\n}\n\n\nasync function atcb_generate_ty(hostEl, dataObj) {\n let host = hostEl;\n let data = dataObj;\n if (!hostEl.host) {\n host = host.shadowRoot;\n data = await atcb_decorate_data(data);\n }\n const copyIcon =\n '';\n const copiedIcon =\n '';\n const mailIcon =\n '';\n /*!\n * @preserve\n * PER LICENSE AGREEMENT, YOU ARE NOT ALLOWED TO REMOVE OR CHANGE THIS FUNCTION!\n */\n if ((!data.proKey || data.proKey === '') && !window.location.hostname.match(/^(localhost|.*\\.add-to-calendar-pro.com)$/)) {\n return;\n }\n const tyHost = await atcb_generate_modal_host(host, data);\n atcb_set_fullsize(tyHost.querySelector('.atcb-modal-host-initialized'));\n const tyData = data.ty;\n if ((tyData.type === 'link' || tyData.type === 'form') && (!tyData.url || tyData.url === '' || !tyData.url.startsWith('http'))) {\n tyData.type = 'text';\n }\n if (!tyData.headline || tyData.headline === '') {\n tyData.headline = atcb_translate_hook('thankyou', data) + '!';\n }\n let tyContent = '

    ' + atcb_translate_hook('form.success', data) + '

    ';\n if (tyData.text && tyData.text !== '') {\n tyContent += atcb_rewrite_html_elements(tyData.text);\n }\n if (tyData.type === 'share') {\n tyContent += `

    \n \n ${mailIcon}\n ${atcb_translate_hook('label.share.email', data)}\n \n \n

    `;\n }\n let header = {};\n if (tyData.type === 'form') {\n const noIntro = !tyData.text || tyData.text === '' || tyData.text === undefined;\n const label = (function () {\n if (tyData.button_label && tyData.button_label !== '') {\n return tyData.button_label;\n }\n return atcb_translate_hook('submit', data);\n })();\n tyContent += '
    ';\n if (tyData.fields && tyData.fields.length > 0) {\n const headerField = tyData.fields.find((field) => field.name === 'header' && field.type === 'hidden');\n if (headerField && headerField.default && headerField.default !== '' && headerField.default.startsWith('{')) {\n try {\n header = JSON.parse(headerField.default);\n if (Object.keys(header).length === 0) {\n header.atcb = true;\n }\n tyData.fields = tyData.fields.filter((field) => field.name !== 'header');\n } catch {\n /* do nothing */\n }\n }\n const customForm = atcb_build_form(tyData.fields, data.identifier + '-ty');\n tyData.fields = customForm.fields;\n tyContent += customForm.html;\n }\n tyContent += '

    ';\n tyContent += '

    ...

    ';\n tyContent += '
    ';\n }\n if (tyData.type === 'link') {\n const label = (function () {\n if (tyData.button_label && tyData.button_label !== '') {\n return tyData.button_label;\n }\n return atcb_translate_hook('continue', data);\n })();\n tyContent += '

    ' + label + '

    ';\n }\n tyContent += '
    ';\n await atcb_create_modal(tyHost, data, 'checkmark', tyData.headline, tyContent);\n if (tyData.type === 'share') {\n const copyBtn = tyHost.getElementById('atcb-ty-share-copy');\n copyBtn.addEventListener('click', function () {\n atcb_copy_to_clipboard(tyData.url);\n copyBtn.innerHTML = copiedIcon + atcb_translate_hook('label.share.copied', data) + '!';\n setTimeout(function () {\n copyBtn.innerHTML = copyIcon + atcb_translate_hook('label.share.copy', data);\n }, 3000);\n });\n copyBtn.addEventListener('keyup', function (event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n copyBtn.click();\n }\n });\n }\n if (tyData.type === 'form') {\n const tyForm = tyHost.getElementById(data.identifier + '-ty-form');\n const errorMsg = tyHost.getElementById('submit-error');\n const tyFormSubmit = tyHost.getElementById('pro-form-submit');\n const tyFormSubmitting = tyHost.getElementById('pro-form-submitting');\n tyFormSubmit.addEventListener('click', async function (e) {\n e.preventDefault();\n tyFormSubmitting.style.display = 'block';\n tyFormSubmit.style.display = 'none';\n let valid = atcb_validate_form(tyHost, tyData.fields);\n if (!valid) {\n errorMsg.textContent = atcb_translate_hook('form.error.required', data) + '.';\n }\n if (valid) {\n const bodyData = [];\n let skipRadio = false;\n tyData.fields.forEach((field) => {\n if (field.type !== 'label') {\n if (field.type === 'radio') {\n if (!skipRadio) {\n const radioGroup = tyHost.querySelectorAll('[name=\"' + field.name + '\"]');\n radioGroup.forEach(function (radio) {\n if (radio.checked) {\n bodyData.push({ name: field.name, value: radio.value });\n }\n });\n skipRadio = true;\n }\n } else if (field.type === 'checkbox') {\n bodyData.push({ name: field.name, value: tyHost.getElementById(field.fieldId).checked });\n skipRadio = false;\n } else {\n bodyData.push({ name: field.name, value: tyHost.getElementById(field.fieldId).value });\n skipRadio = false;\n }\n }\n });\n const request = await sendPostRequest(tyData.url, bodyData, header);\n if (request === true) {\n tyHost.getElementById('ty-success-msg').style.display = 'block';\n tyHost.getElementById('ty-content').style.display = 'none';\n return;\n }\n errorMsg.textContent = atcb_translate_hook('form.error.sending', data) + '.';\n }\n tyForm.classList.add('form-error');\n tyFormSubmitting.style.display = 'none';\n tyFormSubmit.style.display = 'block';\n });\n tyFormSubmit.addEventListener('keyup', function (event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n tyFormSubmit.click();\n }\n });\n }\n}\nasync function atcb_generate_rsvp_form(host, data, hostEl, keyboardTrigger = false) {\n /*!\n * @preserve\n * PER LICENSE AGREEMENT, YOU ARE NOT ALLOWED TO REMOVE OR CHANGE THIS FUNCTION!\n */\n const rsvpData = data.rsvp;\n const noIntro = !rsvpData.text || rsvpData.text === '' || rsvpData.text === undefined;\n const noHeadline = !rsvpData.headline || rsvpData.headline === '' || rsvpData.headline === undefined;\n let hiddenContent = '';\n let rsvpContent = '
    ';\n const sentStatus = localStorage.getItem(data.proKey + '-rsvp-sent') || false;\n if (sentStatus) {\n rsvpContent += '
    ';\n rsvpContent += '

    ' + atcb_translate_hook('form.success.already', data) + '

    ';\n if (!data.hideButton) rsvpContent += '
    ';\n if (data.inlineRsvp) rsvpContent += '';\n rsvpContent += '
    ';\n }\n rsvpContent += '

    ' + atcb_translate_hook('form.success.sent', data) + '

    ' + atcb_translate_hook('form.success.email', data) + '

    ' + atcb_translate_hook('form.success.doi', data) + '

    ';\n rsvpContent += '
    ' + atcb_translate_hook('form.success.demo', data) + '
    ';\n rsvpContent += '
    ';\n if (rsvpData.text && rsvpData.text !== '') {\n rsvpContent += atcb_rewrite_html_elements(rsvpData.text);\n }\n rsvpContent += '
    ';\n const staticID = data.proKey || 'demo-rsvp';\n if (rsvpData.initial_confirmation === false) {\n rsvpContent += '
    ';\n rsvpContent += '

    ' + atcb_translate_hook('form.status', data) + '

    ';\n rsvpContent +=\n '
    ';\n if (rsvpData.maybe_option === true) {\n rsvpContent +=\n '
    ';\n }\n rsvpContent +=\n '
    ';\n rsvpContent += '
    ';\n } else {\n hiddenContent += '';\n }\n const maxAmount = rsvpData.maxpp || 1;\n if (maxAmount === 1) {\n hiddenContent += '';\n } else {\n rsvpContent += '
    ';\n rsvpContent += '
    ';\n }\n const attendee = (function () {\n if (data.attendee && data.attendee !== '') {\n const attendeeParts = data.attendee.split('|');\n if (attendeeParts.length > 1) {\n return attendeeParts[1];\n }\n return attendeeParts[0];\n }\n return null;\n })();\n const customEmailField = rsvpData.fields?.find((field) => field.name === 'email');\n if (!customEmailField) {\n if (attendee) {\n hiddenContent += '';\n } else {\n rsvpContent += '
    ';\n rsvpContent += '
    ';\n }\n } else {\n rsvpData.fields = rsvpData.fields.map((field) => {\n if (field.name === 'email') {\n return { ...field, required: true, type: 'email', default: attendee !== '' ? attendee : field.default };\n }\n return field;\n });\n }\n if (rsvpData.fields && rsvpData.fields.length > 0) {\n const customForm = atcb_build_form(rsvpData.fields, data.identifier + '-rsvp', data.disabled);\n rsvpData.fields = customForm.fields;\n rsvpContent += customForm.html;\n }\n rsvpContent += hiddenContent;\n rsvpContent += '

    ';\n rsvpContent +=\n '

    ...

    ';\n if (rsvpData.seatsLeft && rsvpData.seatsLeft > 0) {\n rsvpContent += '

    ' + atcb_translate_hook('form.seatsleft', data) + ': ' + rsvpData.seatsLeft + '

    ';\n }\n rsvpContent += '
    ';\n rsvpContent += '
    ';\n let rsvpHost = null;\n if (!data.inlineRsvp) {\n rsvpHost = await atcb_generate_modal_host(host, data);\n atcb_set_fullsize(rsvpHost.querySelector('.atcb-modal-host-initialized'));\n await atcb_create_modal(\n rsvpHost,\n data,\n undefined,\n rsvpData.headline,\n rsvpContent,\n [\n { type: 'none', label: atcb_translate_hook('label.rsvp.restart', data), small: true, primary: true, id: 'pro-form-restart' },\n { type: 'close', label: atcb_translate_hook('close', data), small: true, id: 'modal-btn-close' },\n { type: 'close', label: atcb_translate_hook('cancel', data), small: true, id: 'modal-btn-cancel' },\n ],\n [],\n keyboardTrigger,\n {},\n false,\n );\n } else {\n rsvpHost = host;\n const rsvpInlineWrapper = document.createElement('div');\n rsvpInlineWrapper.classList.add('atcb-modal-box', 'rsvp-inline-wrapper');\n rsvpInlineWrapper.setAttribute('part', 'atcb-modal-box');\n if (data.rtl) {\n rsvpInlineWrapper.classList.add('atcb-rtl');\n }\n hostEl.append(rsvpInlineWrapper);\n if (rsvpData.headline) {\n const rsvpInlineHeadline = document.createElement('div');\n rsvpInlineHeadline.classList.add('atcb-modal-headline');\n rsvpInlineWrapper.append(rsvpInlineHeadline);\n rsvpInlineHeadline.innerHTML = rsvpData.headline;\n }\n const rsvpInlineContent = document.createElement('div');\n rsvpInlineContent.classList.add('atcb-modal-content');\n rsvpInlineWrapper.append(rsvpInlineContent);\n if (!data.hideBranding) {\n const atcbL = atcb_create_atcbl(rsvpHost, false, true);\n rsvpInlineWrapper.append(atcbL);\n }\n if (rsvpData.expired) {\n rsvpInlineContent.innerHTML = '

    ' + atcb_translate_hook('label.rsvp.expired', data) + '

    ';\n return;\n } else if (rsvpData.bookedOut) {\n rsvpInlineContent.innerHTML = '

    ' + atcb_translate_hook('label.rsvp.bookedout', data) + '

    ';\n return;\n } else {\n rsvpInlineContent.innerHTML = rsvpContent;\n }\n }\n const closeBtn = rsvpHost.getElementById('modal-btn-close');\n const cancelBtn = rsvpHost.getElementById('modal-btn-cancel');\n const restartBtn = rsvpHost.getElementById('pro-form-restart');\n atcb_log_event('openRSVP', data.identifier, data.identifier);\n if (data.debug) {\n console.log('RSVP form for \"' + data.identifier + '\" created');\n }\n if (sentStatus) {\n if (cancelBtn) cancelBtn.style.display = 'none';\n const atcbHost = rsvpHost.getElementById('rsvp-atcb');\n if (atcbHost && !data.hideButton) {\n const atcbData = JSON.parse(JSON.stringify(data));\n atcbData.hideTextLabelButton = true;\n atcbData.hideIconButton = false;\n atcbData.buttonsList = true;\n atcb_generate_button(host, atcbHost, atcbData);\n }\n } else {\n if (closeBtn) closeBtn.style.display = 'none';\n if (restartBtn) restartBtn.style.display = 'none';\n }\n const rsvpForm = rsvpHost.getElementById(data.identifier + '-rsvp-form');\n const errorMsg = rsvpHost.getElementById('submit-error');\n const rsvpFormSubmit = rsvpHost.getElementById('pro-form-submit');\n const rsvpFormSubmitting = rsvpHost.getElementById('pro-form-submitting');\n const rsvpRestart = rsvpHost.getElementById('pro-form-restart');\n if (rsvpFormSubmit) {\n rsvpFormSubmit.addEventListener('click', async function (e) {\n e.preventDefault();\n rsvpFormSubmitting.style.display = 'block';\n rsvpFormSubmit.style.display = 'none';\n const staticFields = [{ type: 'number', name: data.proKey + '-amount', fieldId: data.identifier + '-rsvp-amount', required: true }];\n if (!customEmailField) staticFields.push({ type: 'email', name: 'email', fieldId: data.identifier + '-rsvp-email', required: true });\n let valid = atcb_validate_form(rsvpHost, [...staticFields, ...rsvpData.fields]);\n const amountEl = rsvpHost.getElementById(data.identifier + '-rsvp-amount');\n const amount = parseInt(amountEl.value) || 1;\n if (rsvpData.maxpp && rsvpData.maxpp > 0 && amount > rsvpData.maxpp) {\n amountEl.classList.add('error');\n valid = false;\n }\n if (!valid) {\n errorMsg.textContent = atcb_translate_hook('form.error.required', data) + '.';\n }\n if (valid) {\n if (!data.proKey || data.proKey === '') {\n rsvpHost.getElementById('rsvp-success-msg-demo').style.display = 'block';\n rsvpHost.getElementById('rsvp-content').style.display = 'none';\n atcb_log_event('successRSVP', data.identifier, data.identifier);\n if (cancelBtn) cancelBtn.style.display = 'none';\n if (closeBtn) closeBtn.style.display = 'block';\n return;\n }\n let fieldsCopy = JSON.parse(JSON.stringify(rsvpData.fields));\n const bodyData = [];\n bodyData.push({ name: 'prokey', value: data.proKey });\n bodyData.push({ name: 'language', value: data.language });\n const statusValEl = rsvpHost.querySelector('[name=\"' + data.proKey + '-status\"]:checked');\n bodyData.push({ name: 'status', value: statusValEl ? statusValEl.value : 'confirmed' });\n bodyData.push({ name: 'amount', value: amount });\n if (!customEmailField) {\n bodyData.push({ name: 'email', value: rsvpHost.getElementById(data.identifier + '-rsvp-email').value });\n } else {\n const emailFieldId = fieldsCopy.find((field) => field.name === 'email')?.fieldId;\n bodyData.push({ name: 'email', value: rsvpHost.getElementById(emailFieldId).value });\n fieldsCopy = fieldsCopy.filter((field) => field.fieldId !== emailFieldId);\n }\n if (data.dev) bodyData.push({ name: 'dev', value: true });\n const bodyData_payload = {};\n let skipRadio = false;\n fieldsCopy.forEach((field) => {\n if (field.type !== 'label') {\n if (field.type === 'radio') {\n if (!skipRadio) {\n const radioGroup = rsvpHost.querySelectorAll('[name=\"' + field.name + '\"]');\n radioGroup.forEach(function (radio) {\n if (radio.checked) {\n bodyData_payload[field.name] = radio.value;\n }\n });\n skipRadio = true;\n }\n } else if (field.type === 'checkbox') {\n bodyData_payload[field.name] = rsvpHost.getElementById(field.fieldId).checked;\n skipRadio = false;\n } else {\n bodyData_payload[field.name] = rsvpHost.getElementById(field.fieldId).value;\n skipRadio = false;\n }\n }\n });\n if (Object.keys(bodyData_payload).length > 0) {\n bodyData.push({ name: 'payload', value: bodyData_payload });\n }\n const request = await sendPostRequest('https://api.add-to-calendar-pro.com/24586219-9910-41fe-9b59-df53de9db7af', bodyData, { rsvp: true });\n if (request === 'doi' || request === true) {\n rsvpHost.getElementById('rsvp-success-msg').style.display = 'block';\n if (request === 'doi') {\n rsvpHost.getElementById('rsvp-success-msg-doi').style.display = 'block';\n } else {\n rsvpHost.getElementById('rsvp-success-msg-email').style.display = 'block';\n }\n rsvpHost.getElementById('rsvp-content').style.display = 'none';\n if (cancelBtn) cancelBtn.style.display = 'none';\n if (closeBtn) closeBtn.style.display = 'block';\n atcb_log_event('successRSVP', data.identifier, data.identifier);\n localStorage.setItem(data.proKey + '-rsvp-sent', true);\n return;\n }\n if (request.error && request.error === 2) {\n errorMsg.textContent = atcb_translate_hook('form.error.email', data) + '.';\n } else if (request.error && request.error === 5) {\n errorMsg.textContent = atcb_translate_hook('label.rsvp.expired', data) + '.';\n } else if (request.error && request.error === 6) {\n if (amount > 1) {\n errorMsg.textContent = atcb_translate_hook('form.error.bookedoutmany', data) + '.';\n } else {\n errorMsg.textContent = atcb_translate_hook('label.rsvp.bookedout', data) + '.';\n }\n } else {\n errorMsg.textContent = atcb_translate_hook('form.error.sending', data) + '.';\n }\n }\n rsvpForm.classList.add('form-error');\n rsvpFormSubmitting.style.display = 'none';\n rsvpFormSubmit.style.display = 'block';\n });\n rsvpFormSubmit.addEventListener('keyup', function (event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n rsvpFormSubmit.click();\n }\n });\n }\n if (rsvpRestart) {\n rsvpRestart.addEventListener('click', function (e) {\n e.preventDefault();\n rsvpHost.getElementById('rsvp-sent-content').style.display = 'none';\n rsvpHost.getElementById('rsvp-content').style.display = 'block';\n if (closeBtn) closeBtn.style.display = 'none';\n if (restartBtn) restartBtn.style.display = 'none';\n if (cancelBtn) cancelBtn.style.display = 'block';\n });\n rsvpRestart.addEventListener('keyup', function (event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n rsvpRestart.click();\n }\n });\n }\n}\nasync function atcb_generate_rsvp_button(host, data) {\n const btnHostEl = host.querySelector('.atcb-initialized');\n const buttonTriggerWrapper = document.createElement('div');\n buttonTriggerWrapper.classList.add('atcb-button-wrapper');\n if (data.rtl) {\n buttonTriggerWrapper.classList.add('atcb-rtl');\n }\n btnHostEl.append(buttonTriggerWrapper);\n atcb_set_sizes(buttonTriggerWrapper, data.sizes);\n const buttonTrigger = document.createElement('button');\n buttonTrigger.classList.add('atcb-button', 'atcb-click', 'atcb-single');\n if (data.disabled) {\n buttonTrigger.setAttribute('disabled', true);\n }\n if (data.hideTextLabelButton) {\n buttonTrigger.classList.add('atcb-no-text');\n }\n buttonTrigger.type = 'button';\n buttonTrigger.setAttribute('aria-expanded', false); \n buttonTriggerWrapper.append(buttonTrigger);\n const label = (function () {\n if (data.rsvp.expired) {\n return atcb_translate_hook('label.rsvp.expired', data);\n }\n if (data.rsvp.bookedOut) {\n return atcb_translate_hook('label.rsvp.bookedout', data);\n }\n return atcb_translate_hook('label.rsvp', data);\n })();\n atcb_generate_label(host, data, buttonTrigger, 'rsvp', !data.hideIconButton, label, true);\n if (data.debug) {\n console.log('Add to Calendar RSVP Button \"' + data.identifier + '\" created');\n }\n return true;\n}\nasync function atcb_check_bookings(proKey, dev = false) {\n try {\n const response = await fetch('https://api.add-to-calendar-pro.com/dffb8bbd-ee5e-4a4f-a7ea-503af98ca468?prokey=' + proKey + (dev ? '&dev=true' : ''), {\n method: 'GET',\n });\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n const responseJson = await response.json();\n return parseInt(responseJson.total);\n } catch (error) {\n console.error('Error:', error);\n }\n return 0;\n}\nfunction atcb_build_form(fields, identifier = '', disabled = false) {\n /*!\n * @preserve\n * PER LICENSE AGREEMENT, YOU ARE NOT ALLOWED TO REMOVE OR CHANGE THIS FUNCTION!\n */\n let form = '';\n let hiddenForm = '';\n let n = 0;\n let prevType = '';\n let skipped = false;\n for (let i = 1; i <= fields.length; i++) {\n skipped = false;\n const field = fields[i - 1];\n if (field.type !== 'label' && (!field.name || field.name === '')) {\n skipped = true;\n continue;\n }\n if ((prevType === 'radio' && field.type !== 'radio') || prevType !== 'radio') {\n n = i;\n }\n fields[i - 1].fieldId = identifier + '-' + i;\n const fieldValue = field.type === 'radio' ? field.placeholder || '' : field.default || '';\n const fieldLabel = field.label || '';\n const fieldPlaceholder = field.type === 'radio' ? '' : field.placeholder || '';\n let fieldHtml = '';\n if (prevType !== 'hidden' && i === n && i !== 1 && !skipped) {\n fieldHtml += '';\n }\n if (field.type !== 'hidden' && i === n) {\n fieldHtml += '
    ';\n }\n if (field.type === 'label') {\n fieldHtml += '

    ' + fieldLabel + '

    ';\n } else {\n if (field.type === 'radio') {\n fieldHtml += '
    ';\n }\n if (field.type === 'hidden') {\n hiddenForm += '';\n } else {\n fieldHtml += atcb_create_field_html(field.type, field.name, fieldLabel, field.fieldId, field.required, fieldValue, field.default, fieldPlaceholder, disabled);\n }\n if (field.type === 'radio') {\n fieldHtml += '
    ';\n }\n }\n form += fieldHtml;\n prevType = field.type;\n }\n if (prevType !== 'hidden') {\n form += '
    ';\n }\n form += hiddenForm;\n return { html: form, fields: fields };\n}\nfunction atcb_create_field_html(type, name, fieldLabel, fieldId, required = false, fieldValue, defaultVal = null, fieldPlaceholder = '', disabled = false) {\n let fieldHtml = '';\n if ((type === 'text' || type === 'email' || type === 'number') && fieldLabel !== '') {\n fieldHtml += '';\n }\n fieldHtml +=\n '';\n if ((type === 'checkbox' || type === 'radio') && (fieldLabel !== '' || required)) {\n fieldHtml += '';\n }\n return fieldHtml;\n}\nfunction atcb_validate_form(host, fields) {\n /*!\n * @preserve\n * PER LICENSE AGREEMENT, YOU ARE NOT ALLOWED TO REMOVE OR CHANGE THIS FUNCTION!\n */\n let state = true;\n fields.forEach(function (field) {\n if (field.type !== 'label' && field.type !== 'radio') {\n const input = host.getElementById(field.fieldId);\n if (field.type !== 'checkbox') {\n input.value = atcb_secure_content(input.value.trim());\n if (field.type === 'number') {\n input.value = input.value.replace(/\\D/g, '');\n }\n if (field.type === 'email' && input.value !== '' && !atcb_validEmail(input.value)) {\n input.classList.add('error');\n state = false;\n return;\n }\n if (field.required && input.value === '') {\n input.classList.add('error');\n state = false;\n return;\n } else {\n input.classList.remove('error');\n }\n } else {\n if (field.required && input.checked === false) {\n input.classList.add('error');\n state = false;\n return;\n } else {\n input.classList.remove('error');\n }\n }\n }\n if (field.type === 'radio') {\n const radioGroup = host.querySelectorAll('[name=\"' + field.name + '\"]');\n let checked = false;\n radioGroup.forEach(function (radio) {\n if (radio.checked) {\n checked = true;\n }\n });\n if (checked === false) {\n radioGroup[0].classList.add('error');\n state = false;\n return;\n } else {\n radioGroup[0].classList.remove('error');\n }\n }\n });\n return state;\n}\nasync function sendPostRequest(url, fields, header = {}) {\n /*!\n * @preserve\n * PER LICENSE AGREEMENT, YOU ARE NOT ALLOWED TO REMOVE OR CHANGE THIS FUNCTION!\n */\n let formData = new FormData();\n let data = {};\n let requestData = {};\n if (Object.keys(header).length === 0) {\n fields.forEach((field) => {\n formData.append(field.name, field.value);\n });\n requestData = { method: 'POST', body: formData };\n } else {\n header['Cache-Control'] = 'no-cache';\n header['Content-Type'] = 'application/json';\n header['Accept'] = '*/*';\n fields.forEach((field) => {\n data[field.name] = field.value;\n });\n requestData = { method: 'POST', headers: header, body: JSON.stringify(data) };\n }\n try {\n const response = await fetch(url, requestData);\n const responseJson = await response.json();\n if (!response.ok) {\n console.error('Network response was not ok');\n if (responseJson.error) return responseJson;\n return false;\n }\n if (responseJson.status && responseJson.status === 'doi') {\n return 'doi';\n }\n return true;\n } catch (error) {\n console.error('Error:', error);\n return false;\n }\n}\n\n\nfunction atcb_generate_label(host, data, parent, type, icon = false, text = '', oneOption = false) {\n switch (type) {\n case 'trigger':\n case 'rsvp':\n default:\n parent.id = data.identifier;\n if (!data.blockInteraction) {\n parent.addEventListener('keyup', function (event) {\n if (event.key === 'Enter' || event.code == 'Space' || (event.key === 'Alt' && event.key === 'Control' && event.code === 'Space')) {\n event.preventDefault();\n if (type === 'rsvp' && typeof atcb_generate_rsvp_form === 'function') {\n atcb_generate_rsvp_form(host, data, parent, true);\n } else {\n atcb_toggle(host, 'auto', data, parent, true, true);\n }\n }\n });\n parent.addEventListener(\n 'touchend',\n atcb_debounce_leading((event) => {\n event.preventDefault();\n if (type === 'rsvp' && typeof atcb_generate_rsvp_form === 'function') {\n atcb_generate_rsvp_form(host, data, parent);\n } else {\n atcb_toggle(host, 'auto', data, parent, false, true);\n }\n }),\n );\n if (data.trigger === 'click' || (type === 'rsvp' && typeof atcb_generate_rsvp_form === 'function')) {\n parent.addEventListener(\n 'mouseup',\n atcb_debounce_leading((event) => {\n event.preventDefault();\n if (type === 'rsvp' && typeof atcb_generate_rsvp_form === 'function') {\n atcb_generate_rsvp_form(host, data, parent);\n } else {\n atcb_toggle(host, 'auto', data, parent, false, true);\n }\n }),\n );\n } else {\n parent.addEventListener('mouseenter', function () {\n atcb_toggle(host, 'open', data, parent, false, true);\n });\n }\n }\n break;\n case 'apple':\n case 'google':\n case 'ical':\n case 'msteams':\n case 'ms365':\n case 'outlookcom':\n case 'yahoo':\n parent.id = data.identifier + '-' + type;\n if (!data.blockInteraction) {\n parent.addEventListener(\n 'click',\n atcb_debounce_leading(() => {\n if (oneOption) {\n host.querySelector('#' + parent.id)?.blur();\n atcb_log_event('openSingletonLink', parent.id, data.identifier);\n } else {\n atcb_toggle(host, 'close');\n atcb_log_event('openCalendarLink', parent.id, data.identifier);\n }\n atcb_generate_links(host, type, data);\n }),\n );\n parent.addEventListener('keyup', function (event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n if (oneOption) {\n host.querySelector('#' + parent.id)?.blur();\n atcb_log_event('openSingletonLink', parent.id, data.identifier);\n } else {\n atcb_toggle(host, 'close');\n atcb_log_event('openCalendarLink', parent.id, data.identifier);\n }\n atcb_generate_links(host, type, data, 'all', true);\n }\n });\n }\n break;\n case 'close':\n parent.id = data.identifier + '-close';\n parent.addEventListener(\n 'click',\n atcb_debounce(() => {\n atcb_log_event('closeList', 'List Close Button', atcbStates['active']);\n atcb_toggle(host, 'close');\n }),\n );\n parent.addEventListener('keyup', function (event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n atcb_log_event('closeList', 'List Close Button', atcbStates['active']);\n atcb_toggle(host, 'close', data, 'all', true);\n }\n });\n break;\n }\n atcb_generate_label_content(data, parent, type, icon, text, oneOption);\n}\nfunction atcb_generate_label_content(data, parent, type, icon, text, oneOption) {\n const defaultTriggerText = (function () {\n if (data.pastDateHandling != 'none') {\n let allOverdue = true;\n for (let i = 0; i < data.dates.length; i++) {\n if (!data.dates[`${i}`].overdue) {\n allOverdue = false;\n break;\n }\n }\n if (allOverdue) {\n return atcb_translate_hook('expired', data);\n }\n }\n return atcb_translate_hook('label.addtocalendar', data);\n })();\n if (text === '') {\n if (data.options.length === 1 || type === 'trigger') {\n text = defaultTriggerText;\n } else if (type === 'close') {\n text = atcb_translate_hook('close', data);\n } else {\n text = atcb_translate_hook(type, data);\n }\n }\n if (data.buttonStyle === 'date' && (type === 'trigger' || oneOption)) {\n return;\n }\n parent.setAttribute('aria-label', oneOption ? atcb_translate_hook('label.addtocalendar', data) + ' (' + atcb_translate_hook(type, data) + '): ' + data.name : type === 'trigger' ? text + ': ' + data.name : text);\n if (icon) {\n const iconEl = document.createElement('div');\n iconEl.classList.add('atcb-icon');\n iconEl.setAttribute('part', type === 'trigger' ? 'atcb-button-icon' : 'atcb-list-icon');\n iconEl.classList.add(`atcb-icon-${type}`);\n iconEl.innerHTML = atcbIcon[`${type}`];\n parent.append(iconEl);\n }\n if (((type === 'trigger' || oneOption) && !data.hideTextLabelButton) || (!oneOption && type !== 'trigger' && !data.hideTextLabelList)) {\n const textEl = document.createElement('span');\n textEl.classList.add('atcb-text');\n textEl.setAttribute('part', type === 'trigger' ? 'atcb-button-text' : 'atcb-list-text');\n textEl.textContent = text;\n parent.append(textEl);\n }\n}\nfunction atcb_generate_button(host, button, data) {\n const oneOption = (function () {\n if (data.options.length === 1 || (data.buttonsList && data.buttonStyle != 'date')) {\n return true;\n }\n return false;\n })();\n const optionSplit = oneOption ? data.options : ['default'];\n optionSplit.forEach(function (option, index) {\n const buttonTriggerWrapper = document.createElement('div');\n buttonTriggerWrapper.classList.add('atcb-button-wrapper');\n buttonTriggerWrapper.setAttribute('part', 'atcb-button-wrapper');\n if (data.rtl) {\n buttonTriggerWrapper.classList.add('atcb-rtl');\n }\n button.append(buttonTriggerWrapper);\n atcb_set_sizes(buttonTriggerWrapper, data.sizes);\n const buttonTrigger = document.createElement('button');\n buttonTrigger.classList.add('atcb-button');\n buttonTrigger.setAttribute('part', 'atcb-button');\n if (data.disabled) {\n buttonTrigger.setAttribute('disabled', true);\n }\n if (data.hideTextLabelButton) {\n buttonTrigger.classList.add('atcb-no-text');\n }\n if (data.trigger === 'click') {\n buttonTrigger.classList.add('atcb-click');\n }\n if (data.listStyle === 'overlay') {\n buttonTrigger.classList.add('atcb-dropoverlay');\n }\n buttonTrigger.type = 'button';\n buttonTrigger.setAttribute('aria-expanded', false); \n buttonTriggerWrapper.append(buttonTrigger);\n if (data.buttonStyle === 'date') {\n atcb_generate_date_button(data, buttonTrigger, 'all', oneOption);\n }\n if (oneOption) {\n buttonTrigger.classList.add('atcb-single');\n const label = (function () {\n if (data.buttonsList && data.options.length > 1) {\n return atcb_translate_hook(`${data.options[`${index}`]}`, data);\n }\n return data.label;\n })();\n atcb_generate_label(host, data, buttonTrigger, option, !data.hideIconButton, label, true);\n buttonTrigger.id = data.identifier;\n if (data.buttonsList) {\n buttonTrigger.id = data.identifier + '-' + option;\n }\n } else {\n atcb_generate_label(host, data, buttonTrigger, 'trigger', !data.hideIconButton, data.label);\n const buttonDropdownAnchor = document.createElement('div');\n buttonDropdownAnchor.classList.add('atcb-dropdown-anchor');\n buttonTrigger.append(buttonDropdownAnchor);\n }\n if (!data.hideCheckmark && !data.hideTextLabelButton && !data.buttonsList && !data.disabled && !data.allCancelled) {\n const btnCheck = document.createElement('div');\n btnCheck.classList.add('atcb-checkmark');\n btnCheck.innerHTML = atcbIcon['checkmark'];\n buttonTrigger.append(btnCheck);\n }\n });\n if (data.debug) {\n console.log('Add to Calendar Button \"' + data.identifier + '\" created');\n }\n}\nfunction atcb_generate_dropdown_list(host, data) {\n const optionsList = document.createElement('div');\n optionsList.classList.add('atcb-list');\n optionsList.setAttribute('part', 'atcb-list');\n optionsList.role = 'list';\n if (data.rtl) {\n optionsList.classList.add('atcb-rtl');\n }\n let listCount = 0;\n data.options.forEach(function (option) {\n const optionItem = document.createElement('div');\n optionItem.classList.add('atcb-list-item');\n optionItem.setAttribute('part', 'atcb-list-item');\n optionItem.role = 'link';\n optionItem.tabIndex = 0;\n listCount++;\n optionItem.dataset.optionNumber = listCount;\n optionsList.append(optionItem);\n atcb_generate_label(host, data, optionItem, option, !data.hideIconList);\n });\n if (data.listStyle === 'modal') {\n const optionItem = document.createElement('div');\n optionItem.classList.add('atcb-list-item', 'atcb-list-item-close');\n optionItem.setAttribute('part', 'atcb-list-item-close');\n optionItem.role = 'button';\n optionItem.tabIndex = 0;\n listCount++;\n optionItem.dataset.optionNumber = listCount;\n optionsList.append(optionItem);\n atcb_generate_label(host, data, optionItem, 'close', !data.hideIconList);\n }\n return optionsList;\n}\nfunction atcb_generate_bg_overlay(host, trigger = '', modal = false, darken = true, closable = true) {\n const bgOverlay = (function () {\n if (modal) {\n return document.createElement('dialog');\n }\n return document.createElement('div');\n })();\n if (modal) {\n bgOverlay.setAttribute('open', true);\n }\n bgOverlay.id = 'atcb-bgoverlay';\n if (!darken) {\n bgOverlay.classList.add('atcb-no-bg');\n }\n bgOverlay.role = 'button';\n bgOverlay.tabIndex = 0;\n if (closable) {\n bgOverlay.addEventListener(\n 'mouseup',\n atcb_debounce_leading((e) => {\n if (e.target !== e.currentTarget) return;\n atcb_log_event('closeList', 'Background Hit', atcbStates['active']);\n atcb_toggle(host, 'close');\n }),\n );\n let fingerMoved = false;\n bgOverlay.addEventListener(\n 'touchstart',\n atcb_debounce_leading(() => (fingerMoved = false)),\n { passive: true },\n );\n bgOverlay.addEventListener(\n 'touchmove',\n atcb_debounce_leading(() => (fingerMoved = true)),\n { passive: true },\n );\n bgOverlay.addEventListener(\n 'touchend',\n atcb_debounce((e) => {\n if (fingerMoved !== false || e.target !== e.currentTarget) return;\n atcb_log_event('closeList', 'Background Hit', atcbStates['active']);\n atcb_toggle(host, 'close');\n }),\n { passive: true },\n );\n if (trigger !== 'click') {\n bgOverlay.addEventListener(\n 'mousemove',\n atcb_debounce_leading((e) => {\n if (e.target !== e.currentTarget) return;\n atcb_log_event('closeList', 'Background Hit', atcbStates['active']);\n atcb_toggle(host, 'close');\n }),\n );\n } else {\n bgOverlay.classList.add('atcb-click');\n }\n }\n return bgOverlay;\n}\n/*!\n * @preserve\n * PER LICENSE AGREEMENT, YOU ARE NOT ALLOWED TO REMOVE OR CHANGE THIS FUNCTION!\n */\nfunction atcb_create_atcbl(host, atList = true, returnEl = false, licenseNoteOnly = false) {\n const atcbL = document.createElement('div');\n atcbL.id = 'atcb-reference';\n if (!licenseNoteOnly) {\n setTimeout(() => {\n const svg =\n '';\n atcbL.innerHTML = '' + svg + '';\n }, 500);\n if (atList) {\n host.querySelector('.atcb-initialized .atcb-list-wrapper').append(atcbL);\n } else if (returnEl) {\n return atcbL;\n } else {\n if (window.innerHeight > 1000 || window.innerWidth > 1000) {\n host.append(atcbL);\n atcbL.classList.add('fixed-ref');\n }\n }\n } else {\n atcbL.innerHTML = 'Using the Add to Calendar Button, licensed under the Elastic License 2.0 (ELv2).';\n atcbL.setAttribute('style', 'display:none !important');\n atcbL.classList.add('atcb-attribution');\n host.append(atcbL);\n }\n if (returnEl) return null;\n}\nasync function atcb_create_modal(mainHost, data, icon = '', headline, content = '', buttons = [], subEvents = [], keyboardTrigger = false, goto = {}, closable = true) {\n atcbStates['active'] = data.identifier;\n const noHeadline = !headline || headline === '' || headline === undefined;\n const modalHost = await atcb_generate_modal_host(mainHost, data, false);\n const bgOverlay = (function () {\n const el = modalHost.getElementById('atcb-bgoverlay');\n if (!el) {\n const newOverlay = atcb_generate_bg_overlay(mainHost, 'click', true, !data.hideBackground, closable);\n modalHost.querySelector('.atcb-modal-host-initialized').append(newOverlay);\n return newOverlay;\n }\n return el;\n })();\n const modalWrapper = document.createElement('div');\n modalWrapper.classList.add('atcb-modal');\n bgOverlay.append(modalWrapper);\n const modalCount = modalHost.querySelectorAll('.atcb-modal').length;\n modalWrapper.dataset.modalNr = modalCount;\n modalWrapper.tabIndex = 0;\n modalWrapper.focus({ preventScroll: true });\n modalWrapper.blur();\n const parentButton = (function () {\n const hostEl = mainHost.getElementById(data.identifier);\n if (hostEl) {\n return hostEl;\n }\n return document.getElementById(data.identifier);\n })();\n if (parentButton) {\n parentButton.classList.add('atcb-active-modal');\n }\n const modal = document.createElement('div');\n modal.classList.add('atcb-modal-box');\n modal.setAttribute('part', 'atcb-modal-box');\n if (data.rtl) {\n modal.classList.add('atcb-rtl');\n }\n modalWrapper.append(modal);\n atcb_set_sizes(modal, data.sizes);\n atcb_set_fullsize(bgOverlay);\n if (icon !== '' && !data.hideIconModal) {\n const modalIcon = document.createElement('div');\n modalIcon.classList.add('atcb-modal-icon');\n modalIcon.innerHTML = atcbIcon[`${icon}`];\n modal.append(modalIcon);\n }\n if (!noHeadline) {\n const modalHeadline = document.createElement('div');\n modalHeadline.classList.add('atcb-modal-headline');\n modalHeadline.textContent = headline;\n modal.append(modalHeadline);\n }\n if (content !== '') {\n const modalContent = document.createElement('div');\n modalContent.classList.add('atcb-modal-content');\n if (noHeadline) modalContent.classList.add('no-headline');\n modalContent.innerHTML = content;\n modal.append(modalContent);\n }\n if (!data.hideBranding) {\n atcb_create_atcbl(modalHost, false);\n }\n if (subEvents.length > 1) {\n const modalsubEventsContentWrapper = document.createElement('div');\n modalsubEventsContentWrapper.classList.add('atcb-modal-content');\n modal.append(modalsubEventsContentWrapper);\n const modalsubEventsContent = document.createElement('div');\n modalsubEventsContent.classList.add('atcb-modal-content-subevents');\n modalsubEventsContentWrapper.append(modalsubEventsContent);\n for (let i = 1; i < subEvents.length; i++) {\n const modalSubEventButton = document.createElement('button');\n modalSubEventButton.type = 'button';\n modalSubEventButton.id = data.identifier + '-' + subEvents[0] + '-' + i;\n if (atcbStates[`${data.identifier}`][`${subEvents[0]}`][i - 1] > 0) {\n modalSubEventButton.classList.add('atcb-saved');\n }\n modalSubEventButton.classList.add('atcb-subevent-btn');\n modalsubEventsContent.append(modalSubEventButton);\n atcb_generate_date_button(data, modalSubEventButton, i);\n if (!data.dates[i - 1].overdue || data.pastDateHandling === 'none') {\n if (i === 1 && keyboardTrigger) {\n modalSubEventButton.focus();\n }\n modalSubEventButton.addEventListener(\n 'click',\n atcb_debounce(() => {\n atcb_log_event('openSubEventLink', modalSubEventButton.id, data.identifier);\n modalSubEventButton.blur();\n atcb_generate_links(mainHost, subEvents[0], data, subEvents[`${i}`], keyboardTrigger, true);\n }),\n );\n } else {\n modalSubEventButton.setAttribute('disabled', true);\n }\n }\n }\n if (buttons.length === 0) {\n buttons.push({ type: 'close', label: atcb_translate_hook('close', data), small: true });\n }\n const modalButtons = document.createElement('div');\n modalButtons.classList.add('atcb-modal-buttons');\n modal.append(modalButtons);\n buttons.forEach((button, index) => {\n let modalButton;\n if (button.href && button.href !== '') {\n modalButton = document.createElement('a');\n modalButton.setAttribute('target', atcbDefaultTarget);\n modalButton.setAttribute('href', button.href);\n modalButton.setAttribute('rel', 'noopener');\n } else {\n modalButton = document.createElement('button');\n modalButton.type = 'button';\n }\n if (button.id && button.id !== '') {\n modalButton.id = button.id;\n }\n modalButton.classList.add('atcb-modal-btn');\n if (button.primary) {\n modalButton.classList.add('atcb-modal-btn-primary');\n }\n if (button.small) {\n modalButton.classList.add('btn-small');\n }\n if (!button.label || button.label === '') {\n button.label = atcb_translate_hook('modal.button.default', data);\n }\n modalButton.textContent = button.label;\n modalButtons.append(modalButton);\n if (index === 0 && subEvents.length < 2 && keyboardTrigger) {\n modalButton.focus();\n }\n switch (button.type) {\n default:\n case 'close':\n modalButton.addEventListener(\n 'click',\n atcb_debounce(() => {\n atcb_log_event('closeList', 'Modal Close Button', atcbStates['active']);\n atcb_close(mainHost);\n }),\n );\n modalButton.addEventListener('keyup', function (event) {\n if (event.key === 'Enter' || event.code == 'Space' || (event.key === 'Alt' && event.key === 'Control' && event.code === 'Space')) {\n atcb_log_event('closeList', 'Modal Close Button', atcbStates['active']);\n atcb_toggle(mainHost, 'close', '', '', true);\n }\n });\n break;\n case 'yahoo2nd': // for yahoo subscribe modal, where we guide the user through the process\n modalButton.addEventListener(\n 'click',\n atcb_debounce(() => {\n atcb_close(mainHost);\n atcb_subscribe_yahoo_modal_switch(mainHost, data);\n }),\n );\n modalButton.addEventListener('keyup', function (event) {\n if (event.key === 'Enter' || event.code == 'Space' || (event.key === 'Alt' && event.key === 'Control' && event.code === 'Space')) {\n atcb_toggle(mainHost, 'close', '', '', true);\n atcb_subscribe_yahoo_modal_switch(mainHost, data, keyboardTrigger);\n }\n });\n break;\n case '2timeslink': // for the note that the user shall click the button twice\n modalButton.addEventListener(\n 'click',\n atcb_debounce(() => {\n atcb_close(mainHost);\n atcb_generate_links(mainHost, goto.type, data, goto.id, keyboardTrigger, false, true);\n }),\n );\n modalButton.addEventListener('keyup', function (event) {\n if (event.key === 'Enter' || event.code == 'Space' || (event.key === 'Alt' && event.key === 'Control' && event.code === 'Space')) {\n atcb_toggle(mainHost, 'close', '', '', true);\n atcb_generate_links(mainHost, goto.type, data, goto.id, keyboardTrigger, false, true);\n }\n });\n break;\n case 'none':\n break;\n }\n });\n if (modalCount > 1) {\n const prevModal = modalHost.querySelector('.atcb-modal[data-modal-nr=\"' + (modalCount - 1) + '\"]');\n prevModal.classList.add('atcb-hidden');\n }\n atcb_manage_body_scroll(modalHost, modalWrapper);\n return;\n}\nfunction atcb_subscribe_yahoo_modal_switch(host, data, keyboardTrigger) {\n atcb_set_fully_successful(host, data);\n atcb_generate_links(host, 'yahoo2nd', data, 'all', keyboardTrigger);\n}\nfunction atcb_generate_date_button(data, parent, subEvent = 'all', oneOption = false) {\n if (subEvent != 'all') {\n subEvent = parseInt(subEvent) - 1;\n } else if (data.dates.length == 1) {\n subEvent = 0;\n }\n const fullTimeInfo = atcb_generate_timestring(data.dates, data.language, subEvent);\n const hoverText = (function () {\n if ((subEvent !== 'all' && data.dates[`${subEvent}`].status.toLowerCase() === 'cancelled') || (subEvent === 'all' && data.allCancelled)) {\n return atcb_translate_hook('date.status.cancelled', data) + '
    ' + atcb_translate_hook('date.status.cancelled.cta', data);\n }\n if (data.pastDateHandling != 'none') {\n if ((subEvent === 'all' && data.allOverdue) || (subEvent != 'all' && data.dates[`${subEvent}`].overdue)) {\n return atcb_translate_hook('expired', data);\n }\n }\n if (data.label && data.label != '') {\n return data.label;\n }\n return '+ ' + atcb_translate_hook('label.addtocalendar', data);\n })();\n const cancelledInfo = (function () {\n if ((subEvent !== 'all' && data.dates[`${subEvent}`].status.toLowerCase() === 'cancelled') || (subEvent === 'all' && data.allCancelled)) {\n return atcb_translate_hook('date.status.cancelled', data);\n }\n return '';\n })();\n const recurringString = (function () {\n if (fullTimeInfo.length == 0) {\n return atcb_translate_hook('recurring', data) + ' ⟳';\n }\n return '⟳';\n })();\n let subEventAll = false;\n if (subEvent === 'all') {\n subEvent = 0;\n subEventAll = true;\n }\n const startDate = new Date(atcb_generate_time(data.dates[`${subEvent}`]).start);\n const allDay = atcb_generate_time(data.dates[`${subEvent}`]).allday;\n const timeZone = data.dates[`${subEvent}`].timeZone;\n const btnLeft = document.createElement('div');\n btnLeft.classList.add('atcb-date-btn-left');\n parent.append(btnLeft);\n const btnDay = document.createElement('div');\n btnDay.classList.add('atcb-date-btn-day');\n btnLeft.append(btnDay);\n const btnMonth = document.createElement('div');\n btnMonth.classList.add('atcb-date-btn-month');\n btnDay.textContent = startDate.toLocaleString(data.language, { day: 'numeric', timeZone: allDay ? 'UTC' : timeZone });\n btnMonth.textContent = startDate.toLocaleString(data.language, { month: 'short', timeZone: allDay ? 'UTC' : timeZone });\n btnLeft.append(btnMonth);\n const btnRight = document.createElement('div');\n btnRight.classList.add('atcb-date-btn-right');\n parent.append(btnRight);\n const btnDetails = document.createElement('div');\n btnDetails.classList.add('atcb-date-btn-details');\n btnRight.append(btnDetails);\n const btnHeadline = document.createElement('div');\n btnHeadline.classList.add('atcb-date-btn-headline');\n const btnHeadlineText = data.dates.length > 1 && subEventAll ? data.name : data.dates[`${subEvent}`].name; \n btnHeadline.textContent = btnHeadlineText;\n btnDetails.append(btnHeadline);\n if ((data.dates[`${subEvent}`].location && data.dates[`${subEvent}`].location !== '' && !data.dates[`${subEvent}`].onlineEvent) || cancelledInfo !== '') {\n const btnLocation = document.createElement('div');\n btnLocation.classList.add('atcb-date-btn-content');\n btnDetails.append(btnLocation);\n if (cancelledInfo != '') {\n btnLocation.classList.add('atcb-date-btn-cancelled');\n btnLocation.textContent = cancelledInfo;\n } else {\n const btnLocationIcon = document.createElement('span');\n btnLocationIcon.classList.add('atcb-date-btn-content-icon');\n btnLocationIcon.innerHTML = atcbIcon['location'];\n btnLocation.append(btnLocationIcon);\n const btnLocationText = document.createElement('span');\n btnLocationText.classList.add('atcb-date-btn-content-location');\n btnLocationText.textContent = data.dates[`${subEvent}`].location;\n btnLocation.append(btnLocationText);\n }\n } else {\n if (data.dates[`${subEvent}`].description !== '' && fullTimeInfo.length === 0 && (!data.recurrence || data.recurrence === '')) {\n const btnDescription = document.createElement('div');\n btnDescription.classList.add('atcb-date-btn-content');\n btnDescription.textContent = data.dates[`${subEvent}`].descriptionHtmlFree;\n btnDescription.style.cssText = 'overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;';\n btnDetails.append(btnDescription);\n } else {\n btnHeadline.style.cssText = '-webkit-line-clamp: 2;';\n if (fullTimeInfo.length == 0 && (data.recurrence == null || data.recurrence == '')) {\n btnRight.style.alignSelf = 'center';\n btnHeadline.style.cssText = 'text-align: center; -webkit-line-clamp: 2;';\n }\n }\n }\n if (fullTimeInfo.length > 0 || (data.recurrence != null && data.recurrence != '')) {\n const btnDateTime = document.createElement('div');\n btnDateTime.classList.add('atcb-date-btn-content');\n btnDetails.append(btnDateTime);\n const btnDateTimeIcon = document.createElement('span');\n btnDateTimeIcon.classList.add('atcb-date-btn-content-icon');\n btnDateTimeIcon.innerHTML = atcbIcon['ical'];\n btnDateTime.append(btnDateTimeIcon);\n const btnDateTimeText = document.createElement('span');\n btnDateTimeText.classList.add('atcb-date-btn-content-text');\n btnDateTime.append(btnDateTimeText);\n fullTimeInfo.forEach(function (block) {\n const btnDateTimeTextBlock = document.createElement('span');\n btnDateTimeTextBlock.textContent = block;\n btnDateTimeText.append(btnDateTimeTextBlock);\n });\n if (data.recurrence != null && data.recurrence != '') {\n const recurSign = document.createElement('span');\n recurSign.innerHTML = recurringString;\n btnDateTimeText.append(recurSign);\n }\n }\n const btnHover = document.createElement('div');\n btnHover.classList.add('atcb-date-btn-hover');\n btnHover.innerHTML = hoverText;\n btnRight.append(btnHover);\n if (!data.hideCheckmark && data.dates[`${subEvent}`].status.toLowerCase() !== 'cancelled') {\n const btnCheck = document.createElement('div');\n btnCheck.classList.add('atcb-checkmark');\n btnCheck.innerHTML = atcbIcon['checkmark'];\n parent.append(btnCheck);\n }\n const ariaLabel =\n hoverText.replace(/
    /g, ' ').replace(/\\+\\s/g, '') +\n (oneOption ? ' (' + atcb_translate_hook(data.options[0], data) + ')' : '') +\n ': ' +\n btnHeadlineText +\n (data.dates[`${subEvent}`].location && data.dates[`${subEvent}`].location !== '' ? ', ' + data.dates[`${subEvent}`].location : '') +\n ', ' +\n fullTimeInfo.join(' ');\n parent.setAttribute('aria-label', ariaLabel);\n}\nasync function atcb_generate_modal_host(host, data, reset = true) {\n const existingModalHost = document.getElementById(data.identifier + '-modal-host');\n if (existingModalHost) {\n if (!reset) {\n return existingModalHost.shadowRoot;\n }\n existingModalHost.remove();\n }\n let newModalHost = document.createElement('div');\n newModalHost.id = data.identifier + '-modal-host';\n if (host.host.hasAttribute('cspnonce')) {\n newModalHost.setAttribute('cspnonce', host.host.getAttribute('cspnonce'));\n }\n newModalHost.setAttribute('atcb-button-id', data.identifier);\n newModalHost.classList.add('add-to-calendar');\n newModalHost.setAttribute('style', 'transform:translate3D(0, 0, 0);visibility:visible;opacity:1;position:fixed;top:0;left:0;width:100%;height:100%;display:flex;z-index:13999998;');\n document.body.append(newModalHost);\n newModalHost.attachShadow({ mode: 'open', delegateFocus: true });\n const elem = document.createElement('template');\n elem.innerHTML = '
    ';\n newModalHost.shadowRoot.append(elem.content.cloneNode(true));\n atcb_set_light_mode(newModalHost.shadowRoot, data);\n await atcb_load_css(newModalHost.shadowRoot, null, data);\n return newModalHost.shadowRoot;\n}\nasync function atcb_generate_overlay_dom(host, data) {\n const newHost = await atcb_generate_modal_host(host, data);\n atcb_set_fullsize(newHost.querySelector('.atcb-modal-host-initialized'));\n const nodes = Array.from(host.children);\n nodes.forEach((node) => {\n if (node.tagName != 'STYLE') {\n newHost.querySelector('.atcb-modal-host-initialized').append(node.cloneNode(true));\n }\n });\n newHost.querySelector('button.atcb-button').removeAttribute('id');\n host.host.classList.add('atcb-shadow-hide');\n host.querySelector('.atcb-initialized').style.opacity = '0';\n atcb_position_shadow_button(host, newHost);\n window.addEventListener('scroll', atcb_position_shadow_button_listener);\n window.addEventListener('resize', atcb_position_shadow_button_listener);\n return newHost.querySelector('.atcb-modal-host-initialized');\n}\n\n\nfunction atcb_generate_rich_data(data, parent) {\n const schemaEl = document.createElement('script');\n schemaEl.id = 'atcb-schema-' + data.identifier;\n if (parent.hasAttribute('cspnonce')) {\n const cspnonceRegex = /[`'\"()[\\]{}<>\\s]/;\n if (cspnonceRegex.test(parent.getAttribute('cspnonce'))) {\n throw new Error('cspnonce input contains forbidden characters.');\n }\n schemaEl.setAttribute('nonce', parent.getAttribute('cspnonce'));\n }\n schemaEl.type = 'application/ld+json';\n const id = data.name.replace(/\\s/g, '');\n const schemaContentMulti = [];\n if (data.dates.length > 1) {\n const parts = [];\n parts.push('\"@context\":\"https://schema.org\"');\n parts.push('\"@type\":\"EventSeries\"');\n parts.push('\"@id\":\"' + id + '\"');\n parts.push('\"name\":\"' + data.name + '\",');\n schemaContentMulti.push('{\\r\\n' + parts.join(',\\r\\n') + '\\r\\n');\n }\n const schemaContentFull = [];\n for (let i = 0; i < data.dates.length; i++) {\n const schemaContent = [];\n schemaContent.push('\"@context\":\"https://schema.org\"');\n schemaContent.push('\"@type\":\"Event\"');\n if (data.dates.length > 1) {\n schemaContent.push('\"@id\":\"' + id + '-' + (i + 1) + '\"');\n }\n if (data.dates[`${i}`].status.toLowerCase() === 'cancelled') {\n schemaContent.push('\"eventStatus\":\"https://schema.org/EventCancelled\"');\n } else {\n schemaContent.push('\"eventStatus\":\"https://schema.org/EventScheduled\"');\n }\n schemaContent.push('\"name\":\"' + data.dates[`${i}`].name + '\"');\n if (data.dates[`${i}`].descriptionHtmlFree) {\n schemaContent.push('\"description\":\"' + data.dates[`${i}`].descriptionHtmlFree + '\"');\n }\n const formattedDate = atcb_generate_time(data.dates[`${i}`], 'delimiters', 'general', true);\n schemaContent.push('\"startDate\":\"' + formattedDate.start + '\"');\n if (formattedDate.duration) {\n schemaContent.push('\"duration\":\"' + formattedDate.duration + '\"');\n }\n schemaContent.push(data.dates[`${i}`].onlineEvent ? '\"eventAttendanceMode\":\"https://schema.org/OnlineEventAttendanceMode\",\\r\\n\"location\": {\\r\\n\"@type\":\"VirtualLocation\",\\r\\n\"url\":\"' + data.dates[`${i}`].location + '\"\\r\\n}' : '\"location\":\"' + data.dates[`${i}`].location + '\"');\n if (data.recurrence && data.recurrence !== '') {\n schemaContent.push(...atcb_generate_rich_data_recurrence(data, formattedDate));\n } else {\n schemaContent.push('\"endDate\":\"' + formattedDate.end + '\"');\n }\n if (data.dates[`${i}`].organizer && data.dates[`${i}`].organizer !== '') {\n const organizerParts = data.dates[`${i}`].organizer.split('|');\n schemaContent.push('\"organizer\":{\\r\\n\"@type\":\"Person\",\\r\\n\"name\":\"' + organizerParts[0] + '\",\\r\\n\"email\":\"' + organizerParts[1] + '\"\\r\\n}');\n }\n const imageData = [];\n if (data.images) {\n if (Array.isArray(data.images)) {\n for (let i = 0; i < data.images.length; i++) {\n if (atcb_secure_url(data.images[`${i}`], data.debug) && data.images[`${i}`].startsWith('http')) {\n imageData.push('\"' + data.images[`${i}`] + '\"');\n }\n }\n }\n }\n if (imageData.length > 0) {\n schemaContent.push('\"image\":[\\r\\n' + imageData.join(',\\r\\n') + ']');\n }\n schemaContentFull.push('{\\r\\n' + schemaContent.join(',\\r\\n') + '\\r\\n}');\n }\n if (data.dates.length > 1) {\n schemaEl.textContent = schemaContentMulti.join(',\\r\\n') + '\"subEvents\":[\\r\\n' + schemaContentFull.join(',\\r\\n') + '\\r\\n]\\r\\n}';\n } else {\n schemaEl.textContent = schemaContentFull[0];\n }\n document.body.insertBefore(schemaEl, document.body.firstChild);\n}\nfunction atcb_generate_rich_data_recurrence(data, formattedDate) {\n const schemaRecurrenceContent = [];\n schemaRecurrenceContent.push('\"eventSchedule\": { \"@type\": \"Schedule\"');\n schemaRecurrenceContent.push('\"scheduleTimezone\":\"' + data.dates[0].timeZone + '\"');\n if (data.recurrence_interval && data.recurrence_interval !== '' && data.recurrence_frequency && data.recurrence_frequency !== '') {\n const repeatFrequency = 'P' + data.recurrence_interval + data.recurrence_frequency.substring(0, 1);\n schemaRecurrenceContent.push('\"repeatFrequency\":\"' + repeatFrequency + '\"');\n }\n if (data.recurrence_byDay && data.recurrence_byDay !== '') {\n const byDayString = (function () {\n if (/\\d/.test(data.recurrence_byDay)) {\n return '\"' + data.recurrence_byDay + '\"';\n } else {\n const byDays = data.recurrence_byDay.split(',');\n const helperMap = {\n MO: 'https://schema.org/Monday',\n TU: 'https://schema.org/Tuesday',\n WE: 'https://schema.org/Wednesday',\n TH: 'https://schema.org/Thursday',\n FR: 'https://schema.org/Friday',\n SA: 'https://schema.org/Saturday',\n SU: 'https://schema.org/Sunday',\n };\n const output = [];\n for (let i = 0; i < byDays.length; i++) {\n output.push('\"' + helperMap[byDays[`${i}`]] + '\"');\n }\n return '[' + output.join(',') + ']';\n }\n })();\n schemaRecurrenceContent.push('\"byDay\":' + byDayString);\n }\n if (data.recurrence_byMonth && data.recurrence_byMonth !== '') {\n const byMonthString = data.recurrence_byMonth.includes(',') ? '[' + data.recurrence_byMonth + ']' : data.recurrence_byMonth;\n schemaRecurrenceContent.push('\"byMonth\":\"' + byMonthString + '\"');\n }\n if (data.recurrence_byMonthDay && data.recurrence_byMonthDay !== '') {\n const byMonthDayString = data.recurrence_byMonthDay.includes(',') ? '[' + data.recurrence_byMonthDay + ']' : data.recurrence_byMonthDay;\n schemaRecurrenceContent.push('\"byMonthDay\":\"' + byMonthDayString + '\"');\n }\n if (data.recurrence_count && data.recurrence_count !== '') {\n schemaRecurrenceContent.push('\"repeatCount\":\"' + data.recurrence_count + '\"');\n }\n if (data.recurrence_until && data.recurrence_until !== '') {\n schemaRecurrenceContent.push('\"endDate\":\"' + data.recurrence_until + '\"');\n }\n if (data.startTime && data.startTime !== '' && data.endTime && data.endTime !== '') {\n schemaRecurrenceContent.push('\"startTime\":\"' + data.startTime + ':00\"');\n schemaRecurrenceContent.push('\"endTime\":\"' + data.endTime + ':00\"');\n schemaRecurrenceContent.push('\"duration\":\"' + formattedDate.duration + '\"');\n }\n schemaRecurrenceContent.push('\"startDate\":\"' + data.startDate + '\" }');\n return schemaRecurrenceContent;\n}\n\n\nfunction atcb_generate_links(host, type, data, subEvent = 'all', keyboardTrigger = false, multiDateModal = false, skipDoubleLink = false) {\n let linkType = type;\n if (type === 'apple') {\n linkType = 'ical';\n }\n if (subEvent !== 'all') {\n subEvent = parseInt(subEvent) - 1;\n } else if (data.dates.length == 1) {\n subEvent = 0;\n }\n if (data.subscribe) {\n atcb_generate_subscribe_links(host, linkType, data, keyboardTrigger);\n return;\n }\n if (subEvent !== 'all') {\n if (data.dates[`${subEvent}`].status.toLowerCase() === 'cancelled' && linkType !== 'ical') {\n atcb_create_modal(host, data, 'warning', atcb_translate_hook('date.status.cancelled', data), atcb_translate_hook('date.status.cancelled.cta', data), [], [], keyboardTrigger);\n } else {\n if (!skipDoubleLink) {\n }\n switch (linkType) {\n case 'ical': // also for apple (see above)\n atcb_generate_ical(host, data, subEvent, keyboardTrigger);\n break;\n case 'google':\n atcb_generate_google(data, data.dates[`${subEvent}`], subEvent);\n break;\n case 'msteams':\n atcb_generate_msteams(data, data.dates[`${subEvent}`], subEvent);\n break;\n case 'ms365':\n atcb_generate_microsoft(data, data.dates[`${subEvent}`], subEvent);\n break;\n case 'outlookcom':\n atcb_generate_microsoft(data, data.dates[`${subEvent}`], subEvent, 'outlookcom');\n break;\n case 'yahoo':\n atcb_generate_yahoo(data, data.dates[`${subEvent}`], subEvent);\n break;\n }\n const modalHost = document.getElementById(data.identifier + '-modal-host');\n if (modalHost) {\n const subEventButton = modalHost.shadowRoot.getElementById(data.identifier + '-' + type + '-' + (subEvent + 1));\n if (subEventButton) {\n subEventButton.classList.add('atcb-saved');\n }\n }\n if (data.dates[`${subEvent}`].status.toLowerCase() !== 'cancelled') atcbStates[`${data.identifier}`][`${type}`][`${subEvent}`]++;\n const filteredStates = atcbStates[`${data.identifier}`][`${type}`].filter(function (value) {\n return value < 1;\n });\n if (filteredStates.length == 0) {\n atcb_set_fully_successful(host, data, multiDateModal);\n }\n }\n return;\n }\n atcb_generate_multidate_links(host, type, linkType, data, keyboardTrigger, multiDateModal);\n}\nfunction atcb_generate_multidate_links(host, type, linkType, data, keyboardTrigger, multiDateModal) {\n if (\n linkType === 'ical' &&\n data.dates.every(function (theSubEvent) {\n if (theSubEvent.status.toLowerCase() == 'cancelled' || (theSubEvent.organizer != null && theSubEvent.organizer != '')) {\n return false;\n }\n return true;\n })\n ) {\n atcb_generate_ical(host, data, 'all', keyboardTrigger);\n for (let i = 0; i < atcbStates[`${data.identifier}`][`${type}`].length; i++) {\n atcbStates[`${data.identifier}`][`${type}`][`${i}`]++;\n }\n atcb_set_fully_successful(host, data, multiDateModal);\n return;\n }\n if (!multiDateModal) {\n const individualButtons = [type];\n for (let i = 0; i < data.dates.length; i++) {\n individualButtons.push(i + 1);\n }\n atcb_create_modal(host, data, type, atcb_translate_hook('modal.multidate.h', data), atcb_translate_hook('modal.multidate.text', data), [], individualButtons, keyboardTrigger);\n }\n}\nfunction atcb_generate_subscribe_links(host, linkType, data, keyboardTrigger) {\n const adjustedFileUrl = data.icsFile.replace('https://', 'webcal://');\n switch (linkType) {\n case 'ical': // also for apple (see above)\n if (atcbIsAndroid() || data.fakeAndroid) {\n atcb_subscribe_ical(data, data.icsFile);\n break;\n }\n atcb_subscribe_ical(data, adjustedFileUrl, host, keyboardTrigger);\n break;\n case 'google':\n atcb_subscribe_google(data, adjustedFileUrl);\n break;\n case 'ms365':\n atcb_subscribe_microsoft(data, adjustedFileUrl, data.name);\n break;\n case 'outlookcom':\n atcb_subscribe_microsoft(data, adjustedFileUrl, data.name, 'outlookcom');\n break;\n case 'yahoo':\n if (data.proxy) {\n atcb_open_cal_url(data, 'yahoo', '', true);\n return;\n }\n atcb_copy_to_clipboard(data.icsFile);\n atcb_create_modal(\n host,\n data,\n 'yahoo',\n atcb_translate_hook('modal.subscribe.yahoo.h', data),\n atcb_translate_hook('modal.clipboard.text', data) + '
    ' + atcb_translate_hook('modal.subscribe.yahoo.text', data),\n [\n {\n label: atcb_translate_hook('modal.subscribe.yahoo.button', data),\n primary: true,\n type: 'yahoo2nd',\n href: 'https://www.yahoo.com/calendar',\n },\n { label: atcb_translate_hook('cancel', data) },\n ],\n [],\n keyboardTrigger,\n );\n return;\n case 'yahoo2nd':\n atcb_copy_to_clipboard(data.icsFile);\n atcb_create_modal(\n host,\n data,\n 'yahoo',\n atcb_translate_hook('modal.subscribe.yahoo.h', data),\n atcb_translate_hook('modal.clipboard.text', data) + '
    ' + atcb_translate_hook('modal.subscribe.yahoo.text', data),\n [\n {\n label: atcb_translate_hook('modal.subscribe.yahoo.button', data),\n type: 'none',\n href: 'https://www.yahoo.com/calendar',\n },\n { label: atcb_translate_hook('cancel', data) },\n ],\n [],\n keyboardTrigger,\n );\n return;\n }\n atcb_set_fully_successful(host, data);\n}\nfunction atcb_set_fully_successful(host, data, multiDateModal = false) {\n const trigger = host.getElementById(data.identifier);\n if (trigger) {\n trigger.classList.add('atcb-saved');\n }\n atcb_saved_hook(host, data);\n if (multiDateModal && host.querySelectorAll('.atcb-modal[data-modal-nr]').length < 2) {\n atcb_toggle(host, 'close');\n }\n}\nfunction atcb_subscribe_ical(data, fileUrl, host = null, keyboardTrigger = false) {\n if (atcbIsiOS() && !atcbIsSafari()) {\n atcb_ical_copy_note(host, fileUrl, data, keyboardTrigger);\n return;\n }\n atcb_open_cal_url(data, 'ical', fileUrl, true);\n}\nfunction atcb_subscribe_google(data, fileUrl) {\n const baseUrl = 'https://calendar.google.com/calendar/r?cid=';\n const baseUrlApp = 'calendar.google.com/calendar?cid=';\n const fileUrlRegex = /^(?:https?:\\/\\/|webcal:\\/\\/|\\/\\/)calendar\\.google\\.com\\//;\n const newFileUrl = (function () {\n if (fileUrlRegex.test(fileUrl)) {\n return fileUrl.replace(/^(.)*\\?cid=/, '');\n }\n return encodeURIComponent(fileUrl);\n })();\n if (atcbIsAndroid() || data.fakeAndroid) {\n atcb_open_cal_url(data, 'google', 'intent://' + baseUrlApp + newFileUrl + '#Intent;scheme=https;package=com.google.android.calendar;end', true);\n return;\n }\n if (((atcbIsiOS() && atcbIsSafari()) || data.fakeIOS) && fileUrlRegex.test(fileUrl)) {\n atcb_open_cal_url(data, 'google', 'googlecalendar://' + baseUrlApp + newFileUrl, true);\n return;\n }\n atcb_open_cal_url(data, 'google', baseUrl + newFileUrl, true);\n}\nfunction atcb_subscribe_microsoft(data, fileUrl, calName, type = 'ms365') {\n const urlParts = [];\n const baseUrl = (function () {\n if (type == 'outlookcom') {\n return 'https://outlook.live.com/calendar/0/addfromweb/?';\n } else {\n return 'https://outlook.office.com/calendar/0/addfromweb/?';\n }\n })();\n urlParts.push('url=' + encodeURIComponent(fileUrl));\n urlParts.push('name=' + encodeURIComponent(calName));\n atcb_open_cal_url(data, type, baseUrl + urlParts.join('&'), true);\n}\nfunction atcb_generate_google(data, date, subEvent = 'all') {\n const urlParts = [];\n urlParts.push('https://calendar.google.com/calendar/render?action=TEMPLATE');\n const formattedDate = atcb_generate_time(date, 'clean', 'google');\n urlParts.push('dates=' + encodeURIComponent(formattedDate.start) + '%2F' + encodeURIComponent(formattedDate.end));\n if (date.timeZone && date.timeZone !== '' && !/GMT[+|-]\\d{1,2}|Etc\\/U|Etc\\/Zulu|CET|CST6CDT|EET|EST|MET|MST|PST8PDT|WET/i.test(date.timeZone) && !formattedDate.allday) {\n urlParts.push('ctz=' + date.timeZone);\n }\n if (date.name && date.name !== '') {\n urlParts.push('text=' + encodeURIComponent(date.name));\n }\n const tmpDataDescription = [];\n if (date.description && date.description !== '') {\n tmpDataDescription.push(date.description);\n }\n if (date.location && date.location !== '') {\n urlParts.push('location=' + encodeURIComponent(date.location));\n if (atcbIsiOS() || data.fakeIOS) {\n if (tmpDataDescription.length > 0) {\n tmpDataDescription.push('

    ');\n }\n tmpDataDescription.push('📍: ' + date.location);\n }\n }\n if (tmpDataDescription.length > 0) {\n urlParts.push('details=' + encodeURIComponent(tmpDataDescription.join('')));\n }\n if (date.recurrence && date.recurrence !== '') {\n urlParts.push('recur=' + encodeURIComponent(date.recurrence));\n }\n if (date.availability && date.availability !== '') {\n const availabilityPart = (function () {\n if (date.availability == 'free') {\n return 'crm=AVAILABLE&trp=false';\n }\n return 'crm=BUSY&trp=true';\n })();\n urlParts.push(availabilityPart);\n }\n atcb_open_cal_url(data, 'google', urlParts.join('&'), false, subEvent);\n}\nfunction atcb_generate_yahoo(data, date, subEvent = 'all') {\n const urlParts = [];\n urlParts.push('https://calendar.yahoo.com/?v=60');\n const formattedDate = atcb_generate_time(date, 'clean');\n if (formattedDate.allday) {\n if (formattedDate.start === formattedDate.end) {\n urlParts.push('dur=allday&st=' + encodeURIComponent(formattedDate.start)); \n } else {\n const allDayDate = JSON.parse(JSON.stringify(date));\n allDayDate.startTime = '00:00';\n allDayDate.endTime = '23:59';\n allDayDate.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n const formattedAllDayDate = atcb_generate_time(allDayDate, 'clean');\n urlParts.push('st=' + encodeURIComponent(formattedAllDayDate.start) + '&et=' + encodeURIComponent(formattedAllDayDate.end));\n }\n } else {\n urlParts.push('st=' + encodeURIComponent(formattedDate.start) + '&et=' + encodeURIComponent(formattedDate.end));\n }\n if (date.name && date.name !== '') {\n urlParts.push('title=' + encodeURIComponent(date.name));\n }\n if (date.location && date.location !== '') {\n urlParts.push('in_loc=' + encodeURIComponent(date.location));\n }\n if (date.descriptionHtmlFree && date.descriptionHtmlFree !== '') {\n urlParts.push('desc=' + encodeURIComponent(date.descriptionHtmlFree));\n }\n atcb_open_cal_url(data, 'yahoo', urlParts.join('&'), false, subEvent);\n}\nfunction atcb_generate_microsoft(data, date, subEvent = 'all', type = 'ms365') {\n const urlParts = [];\n const basePath = (function () {\n if (atcbIsMobile() || data.fakeMobile) {\n return '/calendar/0/deeplink/compose?path=%2Fcalendar%2Faction%2Fcompose&rru=addevent';\n }\n return '/calendar/action/compose?rru=addevent';\n })();\n const baseUrl = (function () {\n if (type == 'outlookcom') {\n return 'https://outlook.live.com' + basePath;\n } else {\n return 'https://outlook.office.com' + basePath;\n }\n })();\n urlParts.push(baseUrl);\n const formattedDate = atcb_generate_time(date, 'delimiters', 'microsoft');\n urlParts.push('startdt=' + formattedDate.start);\n urlParts.push('enddt=' + formattedDate.end);\n if (formattedDate.allday) {\n urlParts.push('allday=true');\n }\n if (date.name && date.name !== '') {\n urlParts.push('subject=' + encodeURIComponent(date.name.replace(/&/g, '&')));\n }\n if (date.location && date.location !== '') {\n urlParts.push('location=' + encodeURIComponent(date.location));\n }\n if (date.description && date.description !== '') {\n urlParts.push('body=' + encodeURIComponent(date.description));\n }\n atcb_open_cal_url(data, type, urlParts.join('&'), false, subEvent);\n}\nfunction atcb_generate_msteams(data, date, subEvent = 'all') {\n const urlParts = [];\n const baseUrl = 'https://teams.microsoft.com/l/meeting/new?';\n const formattedDate = atcb_generate_time(date, 'delimiters', 'msteams', true);\n if (!formattedDate.allday || atcbIsMobile() || data.fakeMobile) {\n urlParts.push('startTime=' + encodeURIComponent(formattedDate.start));\n urlParts.push('endTime=' + encodeURIComponent(formattedDate.end));\n } else {\n urlParts.push('startTime=' + formattedDate.start);\n urlParts.push('endTime=' + formattedDate.end);\n }\n if (date.name && date.name !== '') {\n urlParts.push('subject=' + encodeURIComponent(date.name));\n }\n let locationString = '';\n if (date.location && date.location !== '') {\n locationString = date.location;\n locationString += ' // '; \n urlParts.push('location=' + encodeURIComponent(locationString));\n }\n if (date.descriptionHtmlFree && date.descriptionHtmlFree != '') {\n urlParts.push('content=' + locationString + encodeURIComponent(date.descriptionHtmlFree));\n }\n atcb_open_cal_url(data, 'msteams', baseUrl + urlParts.join('&'), false, subEvent);\n}\nfunction atcb_open_cal_url(data, type, url, subscribe = false, subEvent = null, target = '') {\n if (target === '') {\n target = atcbDefaultTarget;\n }\n if (atcb_secure_url(url)) {\n if (data.proxy && data.proKey && data.proKey !== '') {\n const urlType = subscribe ? 's' : 'o';\n const query = (function () {\n const parts = [];\n if (data.attendee && data.attendee !== '') {\n parts.push('attendee=' + encodeURIComponent(data.attendee));\n }\n if (data.customVar && typeof data.customVar === 'object' && Object.keys(data.customVar).length > 0) {\n parts.push('customvar=' + encodeURIComponent(JSON.stringify(data.customVar)));\n }\n if (data.dates && data.dates.length > 1 && subEvent !== null && subEvent !== 'all') {\n parts.push('sub-event=' + subEvent);\n }\n if (parts.length > 0) {\n return '?' + parts.join('&');\n }\n return '';\n })();\n url = (data.dev ? 'https://dev.caldn.net/' : 'https://caldn.net/') + data.proKey + '/' + urlType + '/' + type + query;\n if (!atcb_secure_url(url)) {\n return;\n }\n }\n const newTab = window.open(url, target);\n if (newTab) {\n newTab.focus();\n }\n }\n}\nfunction atcb_generate_ical(host, data, subEvent = 'all', keyboardTrigger = false) {\n if (subEvent !== 'all') {\n subEvent = parseInt(subEvent);\n }\n const filename = atcb_determine_ical_filename(data, subEvent);\n const givenIcsFile = (function () {\n const potentialHostAttendee = host.host.getAttribute('attendee') || '';\n const potentialHostCustomVar = host.host.getAttribute('customVar') || '';\n if ((data.attendee && data.attendee !== '' && potentialHostAttendee !== '') || (data.customVar && data.customVar !== '' && potentialHostCustomVar !== '')) {\n return '';\n }\n if (subEvent !== 'all' && data.dates[`${subEvent}`].icsFile && data.dates[`${subEvent}`].icsFile !== '') {\n return data.dates[`${subEvent}`].icsFile;\n }\n if (data.icsFile && data.icsFile !== '') {\n return data.icsFile;\n }\n return '';\n })();\n if (data.proxy) {\n const langUrlPart = data.language && data.language === 'de' ? data.language + '/' : '';\n const url = (data.dev ? 'https://dev.caldn.net/' : 'https://caldn.net/') + langUrlPart + 'no-ics-file';\n atcb_open_cal_url(data, 'ical', url, false, subEvent);\n return;\n }\n if (givenIcsFile !== '' && ((!atcbIsiOS() && !data.fakeIOS) || !atcbIsWebView() || data.bypassWebViewCheck)) {\n atcb_save_file(givenIcsFile, filename);\n return;\n }\n const now = new Date();\n const ics_lines = ['BEGIN:VCALENDAR', 'VERSION:2.0'];\n ics_lines.push('PRODID:-// https://add-to-calendar-pro.com // button v' + atcbVersion + ' //EN');\n ics_lines.push('CALSCALE:GREGORIAN');\n if (subEvent == 'all') {\n ics_lines.push('METHOD:PUBLISH');\n } else {\n if (data.dates[`${subEvent}`].status && data.dates[`${subEvent}`].status.toLowerCase() === 'cancelled') {\n ics_lines.push('METHOD:CANCEL');\n } else {\n if (data.dates[`${subEvent}`].organizer && data.dates[`${subEvent}`].organizer != '') {\n ics_lines.push('METHOD:REQUEST');\n } else {\n ics_lines.push('METHOD:PUBLISH');\n }\n }\n }\n const usedTimeZones = [];\n const loopStart = (function () {\n if (subEvent != 'all') {\n return subEvent;\n }\n return 0;\n })();\n const loopEnd = (function () {\n if (subEvent != 'all') {\n return subEvent;\n }\n return data.dates.length - 1;\n })();\n for (let i = loopStart; i <= loopEnd; i++) {\n const formattedDate = atcb_generate_time(data.dates[`${i}`], 'clean', 'ical');\n const timeAddon = (function () {\n if (formattedDate.allday) {\n return ';VALUE=DATE';\n }\n if (data.dates[`${i}`].timeZone && data.dates[`${i}`].timeZone !== '') {\n const timeZoneBlock = tzlib_get_ical_block(data.dates[`${i}`].timeZone);\n if (!usedTimeZones.includes(data.dates[`${i}`].timeZone)) {\n ics_lines.push(timeZoneBlock[0]);\n }\n usedTimeZones.push(data.dates[`${i}`].timeZone);\n return ';' + timeZoneBlock[1];\n }\n })();\n ics_lines.push('BEGIN:VEVENT');\n if (data.dates[`${i}`].uid && data.dates[`${i}`].uid !== '') {\n ics_lines.push('UID:' + data.dates[`${i}`].uid);\n }\n ics_lines.push('DTSTAMP:' + atcb_format_datetime(now, 'clean', true));\n ics_lines.push('DTSTART' + timeAddon + ':' + formattedDate.start);\n ics_lines.push('DTEND' + timeAddon + ':' + formattedDate.end);\n ics_lines.push('SUMMARY:' + atcb_rewrite_ical_text(data.dates[`${i}`].name, true));\n if (data.dates[`${i}`].descriptionHtmlFreeICal && data.dates[`${i}`].descriptionHtmlFreeICal !== '') {\n ics_lines.push('DESCRIPTION:' + atcb_rewrite_ical_text(data.dates[`${i}`].descriptionHtmlFreeICal, true));\n }\n if (data.dates[`${i}`].description && data.dates[`${i}`].description !== '') {\n ics_lines.push('X-ALT-DESC;FMTTYPE=text/html:\\r\\n \\r\\n \\r\\n ' + atcb_rewrite_ical_text(data.dates[`${i}`].description, true) + '\\r\\n ');\n }\n if (data.dates[`${i}`].location && data.dates[`${i}`].location !== '') {\n ics_lines.push('LOCATION:' + atcb_rewrite_ical_text(data.dates[`${i}`].location, true));\n }\n if (data.dates[`${i}`].organizer && data.dates[`${i}`].organizer !== '') {\n const organizerParts = data.dates[`${i}`].organizer.split('|');\n ics_lines.push('ORGANIZER;CN=' + atcb_rewrite_ical_text(organizerParts[0], false, true) + ':MAILTO:' + organizerParts[1]);\n }\n if (data.dates[`${i}`].attendee && data.dates[`${i}`].attendee !== '') {\n const attendeeParts = data.dates[`${i}`].attendee.split('|');\n if (attendeeParts.length === 2) {\n ics_lines.push('ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;CN=' + atcb_rewrite_ical_text(attendeeParts[0], false, true) + ';X-NUM-GUESTS=0:mailto:' + attendeeParts[1]);\n } else {\n ics_lines.push('ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;CN=' + attendeeParts[0] + ';X-NUM-GUESTS=0:mailto:' + attendeeParts[0]);\n }\n }\n if (data.recurrence && data.recurrence !== '') {\n ics_lines.push(data.recurrence);\n }\n if (data.dates[`${i}`].availability && data.dates[`${i}`].availability !== '') {\n const transpVal = (function () {\n if (data.dates[`${i}`].availability == 'free') {\n return 'TRANSPARENT';\n }\n return 'OPAQUE';\n })();\n ics_lines.push('TRANSP:' + transpVal);\n }\n ics_lines.push('SEQUENCE:' + data.dates[`${i}`].sequence);\n ics_lines.push('STATUS:' + data.dates[`${i}`].status);\n ics_lines.push('CREATED:' + data.created);\n ics_lines.push('LAST-MODIFIED:' + data.updated);\n ics_lines.push('END:VEVENT');\n }\n ics_lines.push('END:VCALENDAR');\n const dataUrl = (function () {\n if (givenIcsFile != '') {\n return givenIcsFile;\n }\n return 'data:text/calendar;charset=utf-8,' + encodeURIComponent(ics_lines.join('\\r\\n'));\n })();\n if ((atcbIsiOS() && !atcbIsSafari()) || (atcbIsWebView() && (atcbIsiOS() || (atcbIsAndroid() && atcbIsProblematicWebView())))) {\n atcb_ical_copy_note(host, dataUrl, data, keyboardTrigger);\n return;\n }\n atcb_save_file(dataUrl, filename);\n}\nfunction atcb_determine_ical_filename(data, subEvent) {\n const filenameSuffix = (function () {\n if (subEvent != 'all' && subEvent != 0) {\n return '-' + parseInt(subEvent) + 1;\n }\n return '';\n })();\n if (data.iCalFileName != null && data.iCalFileName != '') {\n return data.iCalFileName + filenameSuffix;\n }\n if (data.icsFile != null && data.icsFile != '') {\n const filenamePart = data.icsFile.split('/').pop().split('.')[0];\n if (filenamePart != '') {\n return filenamePart + filenameSuffix;\n }\n }\n return 'event-to-save-in-my-calendar' + filenameSuffix;\n}\nfunction atcb_ical_copy_note(host, dataUrl, data, keyboardTrigger) {\n atcb_copy_to_clipboard(dataUrl);\n if (atcbIsiOS() && !atcbIsSafari()) {\n atcb_create_modal(\n host,\n data,\n 'warning',\n atcb_translate_hook('modal.opensafari.ical.h', data),\n atcb_translate_hook('modal.opensafari.ical.text', data) + '
    ' + atcb_translate_hook('modal.clipboard.text', data) + '
    ' + atcb_translate_hook('modal.opensafari.ical.steps', data),\n [],\n [],\n keyboardTrigger,\n );\n return;\n }\n atcb_create_modal(host, data, 'warning', atcb_translate_hook('modal.webview.ical.h', data), atcb_translate_hook('modal.webview.ical.text', data) + '
    ' + atcb_translate_hook('modal.clipboard.text', data) + '
    ' + atcb_translate_hook('modal.webview.ical.steps', data), [], [], keyboardTrigger);\n}\n\n\nfunction atcb_saved_hook(host, data) {\n atcb_log_event('success', data.identifier, data.identifier);\n if (data.ty && typeof atcb_generate_ty === 'function') {\n setTimeout(() => {\n atcb_generate_ty(host, data);\n }, 1000);\n }\n}\nfunction atcb_save_file(file, filename) {\n try {\n const save = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n save.rel = 'noopener';\n save.href = file;\n if (atcbIsMobile()) {\n save.target = '_self';\n } else {\n save.target = '_blank';\n }\n save.download = filename + '.ics';\n const evt = new MouseEvent('click', {\n view: window,\n button: 0,\n bubbles: true,\n cancelable: false,\n });\n save.dispatchEvent(evt);\n (window.URL || window.webkitURL).revokeObjectURL(save.href);\n } catch (e) {\n console.error(e);\n }\n}\nfunction atcb_generate_time(data, style = 'delimiters', targetCal = 'general', addTimeZoneOffset = false) {\n if (data.startTime && data.startTime !== '' && data.endTime && data.endTime !== '') {\n const newStartDate = new Date(data.startDate + 'T' + data.startTime + ':00.000+00:00');\n if (!data.endDate) data.endDate = data.startDate;\n const newEndDate = new Date(data.endDate + 'T' + data.endTime + ':00.000+00:00');\n const durationMS = newEndDate - newStartDate;\n const durationHours = Math.floor(durationMS / 1000 / 60 / 60);\n const durationMinutes = Math.floor(((durationMS - durationHours * 60 * 60 * 1000) / 1000 / 60) % 60);\n const durationString = (function () {\n if (durationHours < 10) {\n return '0' + durationHours + ':' + ('0' + durationMinutes).slice(-2);\n }\n return durationHours + ':' + ('0' + durationMinutes).slice(-2);\n })();\n if (targetCal == 'ical' || (targetCal == 'google' && !/GMT[+|-]\\d{1,2}|Etc\\/U|Etc\\/Zulu|CET|CST6CDT|EET|EST|MET|MST|PST8PDT|WET/i.test(data.timeZone))) {\n return {\n start: atcb_format_datetime(newStartDate, 'clean', true, true),\n end: atcb_format_datetime(newEndDate, 'clean', true, true),\n duration: durationString,\n allday: false,\n };\n }\n const offsetStart = tzlib_get_offset(data.timeZone, data.startDate, data.startTime);\n const offsetEnd = tzlib_get_offset(data.timeZone, data.endDate, data.endTime);\n if (addTimeZoneOffset) {\n const formattedOffsetStart = offsetStart.slice(0, 3) + ':' + offsetStart.slice(3);\n const formattedOffsetEnd = offsetEnd.slice(0, 3) + ':' + offsetEnd.slice(3);\n return {\n start: newStartDate.toISOString().replace('.000Z', formattedOffsetStart),\n end: newEndDate.toISOString().replace('.000Z', formattedOffsetEnd),\n duration: durationString,\n allday: false,\n };\n }\n const calcOffsetStart = parseInt(offsetStart[0] + 1) * -1 * ((parseInt(offsetStart.substring(1, 3)) * 60 + parseInt(offsetStart.substring(3, 5))) * 60 * 1000);\n const calcOffsetEnd = parseInt(offsetEnd[0] + 1) * -1 * ((parseInt(offsetEnd.substring(1, 3)) * 60 + parseInt(offsetEnd.substring(3, 5))) * 60 * 1000);\n newStartDate.setTime(newStartDate.getTime() + calcOffsetStart);\n newEndDate.setTime(newEndDate.getTime() + calcOffsetEnd);\n return {\n start: atcb_format_datetime(newStartDate, style),\n end: atcb_format_datetime(newEndDate, style),\n duration: durationString,\n allday: false,\n };\n } else {\n const startDate = data.startDate.split('-');\n const endDate = data.endDate ? data.endDate.split('-') : startDate;\n const newStartDate = new Date(Date.UTC(startDate[0], startDate[1] - 1, startDate[2], 12, 0, 0));\n const newEndDate = new Date(Date.UTC(endDate[0], endDate[1] - 1, endDate[2], 12, 0, 0));\n if (targetCal === 'google' || (targetCal === 'microsoft' && !atcbIsMobile()) || targetCal === 'msteams' || targetCal === 'ical') {\n newEndDate.setDate(newEndDate.getDate() + 1);\n }\n if (targetCal === 'msteams') {\n if (atcbIsMobile()) {\n const offset = newStartDate.getTimezoneOffset();\n const formattedOffset = (function () {\n if (offset < 0) {\n return '+' + ('0' + Math.abs(offset / 60)).slice(-2) + ':' + ('0' + Math.abs(offset % 60)).slice(-2);\n } else {\n return '-' + ('0' + Math.abs(offset / 60)).slice(-2) + ':' + ('0' + Math.abs(offset % 60)).slice(-2);\n }\n })();\n return {\n start: atcb_format_datetime(newStartDate, style, false, true) + 'T00:00:00' + formattedOffset,\n end: atcb_format_datetime(newEndDate, style, false, true) + 'T00:00:00' + formattedOffset,\n allday: true,\n };\n }\n return {\n start: atcb_format_datetime(newStartDate, style, false, true) + '+00:00',\n end: atcb_format_datetime(newEndDate, style, false, true) + '+00:00',\n allday: true,\n };\n }\n return {\n start: atcb_format_datetime(newStartDate, style, false),\n end: atcb_format_datetime(newEndDate, style, false),\n allday: true,\n };\n }\n}\nfunction atcb_format_datetime(datetime, style = 'delimiters', includeTime = true, removeZ = false) {\n const regex = (function () {\n if (includeTime) {\n if (style == 'clean') {\n return /(-|:|(\\.\\d{3}))/g;\n }\n return /(\\.\\d{3})/g;\n }\n if (style == 'clean') {\n return /(-|T(\\d{2}:\\d{2}:\\d{2}\\.\\d{3})Z)/g;\n }\n return /T(\\d{2}:\\d{2}:\\d{2}\\.\\d{3})Z/g;\n })();\n const output = removeZ ? datetime.toISOString().replace(regex, '').replace('Z', '') : datetime.toISOString().replace(regex, '');\n return output;\n}\nfunction offsetToMilliseconds(offset) {\n const sign = offset[0] === '+' ? 1 : -1;\n const hours = parseInt(offset.substring(1, 3), 10);\n const minutes = parseInt(offset.substring(3, 5), 10);\n const totalMinutes = (hours * 60 + minutes) * sign;\n const milliseconds = totalMinutes * 60000;\n return milliseconds;\n}\nfunction atcb_translate_via_time_zone(date, time, baseTimeZone, targetTimeZone) {\n const dateTime = new Date(`${date}T${time}:00Z`);\n const offset = tzlib_get_offset(baseTimeZone, date, time); \n const dateTimeUTC = new Date(dateTime.getTime() - offsetToMilliseconds(offset));\n const formatter = new Intl.DateTimeFormat('en-CA', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n timeZone: targetTimeZone,\n hourCycle: 'h23',\n });\n const dateInTargetTimeZone = formatter.format(dateTimeUTC);\n return ([date, time] = dateInTargetTimeZone.split(', '));\n}\nfunction atcb_generate_timestring(dates, language = 'en', subEvent = 'all', decorate = false, browserTimeOverride = false, enforceYear = false, hideTimeZone = false) {\n if (decorate) {\n const tmpRootTZ = atcb_decorate_data_timezone();\n dates = atcb_decorate_data_dates({ dates: dates, timeZone: tmpRootTZ }).dates;\n }\n let startDateInfo, endDateInfo, timeZoneInfoStart, timeZoneInfoEnd;\n let formattedTimeStart = {};\n let formattedTimeEnd = {};\n let timeBlocks = [];\n let timeZoneInfoStringStart = '';\n let timeZoneInfoStringEnd = '';\n const browserTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (subEvent === 'all') {\n formattedTimeStart = atcb_generate_time(dates[0]);\n formattedTimeEnd = atcb_generate_time(dates[dates.length - 1]);\n timeZoneInfoStart = browserTimeOverride ? browserTimezone : dates[0].timeZone;\n timeZoneInfoEnd = browserTimeOverride ? browserTimezone : dates[dates.length - 1].timeZone;\n } else {\n formattedTimeStart = atcb_generate_time(dates[`${subEvent}`]);\n formattedTimeEnd = formattedTimeStart;\n timeZoneInfoStart = browserTimeOverride ? browserTimezone : dates[`${subEvent}`].timeZone;\n timeZoneInfoEnd = timeZoneInfoStart;\n }\n startDateInfo = new Date(formattedTimeStart.start);\n endDateInfo = new Date(formattedTimeEnd.end);\n if (formattedTimeStart.allday) {\n timeZoneInfoStart = 'GMT';\n }\n if (formattedTimeEnd.allday) {\n timeZoneInfoEnd = 'GMT';\n }\n const magicLocationPhrases = ['global', 'world-wide', 'worldwide', 'online'];\n const convertable = (function () {\n let i = 0;\n let j = dates.length - 1;\n if (subEvent != 'all') {\n i = j = subEvent;\n }\n for (i; i <= j; i++) {\n const magicLocation = (function () {\n if (dates[`${i}`].location && dates[`${i}`].location !== '') {\n if (magicLocationPhrases.includes(dates[`${i}`].location.toLowerCase())) {\n return true;\n }\n }\n return false;\n })();\n if (!magicLocation && !dates[`${i}`].onlineEvent) {\n return false;\n }\n }\n return true;\n })();\n if (convertable) {\n timeZoneInfoStart = timeZoneInfoEnd = browserTimezone;\n } else {\n if (!formattedTimeStart.allday && browserTimezone !== timeZoneInfoStart && timeZoneInfoStart !== timeZoneInfoEnd) {\n timeZoneInfoStringStart = '(' + timeZoneInfoStart + ')';\n }\n if ((!formattedTimeEnd.allday && browserTimezone !== timeZoneInfoEnd) || timeZoneInfoStart !== timeZoneInfoEnd) {\n timeZoneInfoStringEnd = '(' + timeZoneInfoEnd + ')';\n }\n }\n const now = new Date();\n const dropYearStart = (function () {\n if (!enforceYear && startDateInfo.getFullYear() === now.getFullYear()) {\n return true;\n }\n return false;\n })();\n const dropYearEnd = (function () {\n if (!enforceYear && endDateInfo.getFullYear() === now.getFullYear()) {\n return true;\n }\n return false;\n })();\n const formatOptionsStart = get_format_options(timeZoneInfoStart, dropYearStart, language);\n const formatOptionsEnd = get_format_options(timeZoneInfoEnd, dropYearEnd, language);\n if (startDateInfo.toLocaleDateString(language, formatOptionsEnd.DateLong) === endDateInfo.toLocaleDateString(language, formatOptionsEnd.DateLong)) {\n if (formattedTimeStart.allday) {\n if (!dropYearStart) {\n timeBlocks.push(startDateInfo.toLocaleDateString(language, formatOptionsStart.DateLong));\n }\n } else {\n let timeString = '';\n if (dropYearStart) {\n timeString = startDateInfo.toLocaleString(language, formatOptionsStart.Time);\n } else {\n timeString = startDateInfo.toLocaleString(language, formatOptionsStart.DateTimeLong);\n }\n if (language === 'en') {\n timeString = timeString.replace(/:00/, '');\n }\n timeBlocks.push(timeString);\n if (timeZoneInfoStringStart !== '' && !hideTimeZone) {\n timeBlocks.push(timeZoneInfoStringStart);\n }\n timeBlocks.push('-');\n timeString = endDateInfo.toLocaleTimeString(language, formatOptionsEnd.Time);\n if (language === 'en') {\n timeString = timeString.replace(/:00/, '');\n }\n timeBlocks.push(timeString);\n if (timeZoneInfoStringEnd !== '' && !hideTimeZone) {\n timeBlocks.push(timeZoneInfoStringEnd);\n }\n }\n } else {\n if (formattedTimeStart.allday) {\n timeBlocks.push(startDateInfo.toLocaleDateString(language, formatOptionsStart.DateLong));\n } else {\n let timeString = '';\n if (dropYearStart) {\n timeString = startDateInfo.toLocaleString(language, formatOptionsStart.Time);\n } else {\n timeString = startDateInfo.toLocaleString(language, formatOptionsStart.DateTimeLong);\n }\n if (language === 'en') {\n timeString = timeString.replace(/:00/, '');\n }\n timeBlocks.push(timeString);\n }\n if (timeZoneInfoStringStart !== '' && !hideTimeZone) {\n timeBlocks.push(timeZoneInfoStringStart);\n }\n timeBlocks.push('-');\n if (formattedTimeEnd.allday) {\n timeBlocks.push(endDateInfo.toLocaleDateString(language, formatOptionsEnd.DateLong));\n } else {\n let timeString = endDateInfo.toLocaleString(language, formatOptionsEnd.DateTimeLong);\n if (language === 'en') {\n timeString = timeString.replace(/:00/, '');\n }\n timeBlocks.push(timeString);\n }\n if (timeZoneInfoStringEnd !== '' && !hideTimeZone) {\n timeBlocks.push(timeZoneInfoStringEnd);\n }\n }\n return timeBlocks;\n}\nfunction get_format_options(timeZoneInfo, dropYear = false, language = 'en') {\n const hoursFormat = (function () {\n if (language === 'en') {\n return 'h12'; \n }\n return 'h23'; \n })();\n if (dropYear) {\n return {\n DateLong: {\n timeZone: timeZoneInfo,\n month: 'short',\n day: 'numeric',\n },\n DateTimeLong: {\n timeZone: timeZoneInfo,\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hourCycle: hoursFormat,\n },\n Time: {\n timeZone: timeZoneInfo,\n hour: 'numeric',\n minute: '2-digit',\n hourCycle: hoursFormat,\n },\n };\n }\n return {\n DateLong: {\n timeZone: timeZoneInfo,\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n },\n DateTimeLong: {\n timeZone: timeZoneInfo,\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hourCycle: hoursFormat,\n },\n Time: {\n timeZone: timeZoneInfo,\n hour: 'numeric',\n minute: '2-digit',\n hourCycle: hoursFormat,\n },\n };\n}\nfunction atcb_secure_content(data, isJSON = true) {\n const toClean = isJSON ? JSON.stringify(data) : data.toString();\n const cleanedUp = toClean.replace(/(<(?!br)([^>]+)>)/gi, '');\n if (isJSON) {\n return JSON.parse(cleanedUp);\n } else {\n return cleanedUp;\n }\n}\nfunction atcb_secure_url(url, throwError = true) {\n if (url && url.match(/((\\.\\.\\/)|(\\.\\.\\\\)|(%2e%2e%2f)|(%252e%252e%252f)|(%2e%2e\\/)|(%252e%252e\\/)|(\\.\\.%2f)|(\\.\\.%252f)|(%2e%2e%5c)|(%252e%252e%255c)|(%2e%2e\\\\)|(%252e%252e\\\\)|(\\.\\.%5c)|(\\.\\.%255c)|(\\.\\.%c0%af)|(\\.\\.%25c0%25af)|(\\.\\.%c1%9c)|(\\.\\.%25c1%259c))/gi)) {\n if (throwError) {\n console.error('Seems like the generated URL includes at least one security issue and got blocked. Please check the calendar button parameters!');\n }\n return false;\n } else {\n return true;\n }\n}\nfunction atcb_validEmail(email) {\n if (!/^.{0,70}@.{1,30}\\.[a-z]{2,9}$/i.test(email)) {\n return false;\n }\n return true;\n}\nfunction atcb_rewrite_html_elements(content, clear = false, iCalBreaks = false) {\n if (clear) {\n if (iCalBreaks) {\n content = content.replace(/(\\[br\\s?\\/?\\]|\\{br\\s?\\/?\\}|(\\[\\/p\\](?=.))|(\\{\\/p\\}(?=.)))/gi, '\\\\n');\n } else {\n content = content.replace(/(\\[br\\s?\\/?\\]|\\{br\\s?\\/?\\}|(\\[\\/p\\](?=.))|(\\{\\/p\\}(?=.)))/gi, ' ');\n }\n content = content.replace(/\\[url\\](.+?)\\[\\/url\\]/gi, (match, p1) => {\n return p1.split('|')[0];\n });\n content = content.replace(/\\{url\\}(.+?)\\{\\/url\\}/gi, (match, p1) => {\n return p1.split('|')[0];\n });\n content = content.replace(/\\[\\/?(hr|[pbui]|strong|em|li|ul|ol|h\\d)\\]/gi, '');\n content = content.replace(/\\{\\/?(hr|[pbui]|strong|em|li|ul|ol|h\\d)\\}/gi, '');\n content = content.replace(/&[#a-z0-9]{1,9};/gi, '');\n } else {\n content = content.replace(/\\[url\\]((?:(?!\\[\\/url\\]).)*)\\[\\/url\\]/gi, function (match, p1) {\n return atcb_parse_url_code(p1);\n });\n content = content.replace(/\\{url\\}((?:(?!\\[\\/url\\]).)*)\\{\\/url\\}/gi, function (match, p1) {\n return atcb_parse_url_code(p1);\n });\n content = content.replace(/\\[(\\/)?(br|hr|[pbui]|strong|em|li|ul|ol|h\\d)(\\s?\\/?)\\]/gi, '<$1$2$3>');\n content = content.replace(/\\{(\\/)?(br|hr|[pbui]|strong|em|li|ul|ol|h\\d)(\\s?\\/?)\\}/gi, '<$1$2$3>');\n }\n return content;\n}\nfunction atcb_parse_url_code(input) {\n const urlText = input.split('|');\n const text = (function () {\n if (urlText.length > 1 && urlText[1] != '') {\n return urlText[1];\n } else {\n return urlText[0];\n }\n })();\n return '' + text + '';\n}\nfunction atcb_rewrite_ical_text(content, truncate = true, inQuotes = false) {\n if (inQuotes) {\n content = content.replace(/\"/g, '');\n } else {\n content = content.replace(/\\\\/g, '\\\\\\\\').replace(/(,|;)/g, '\\\\$1').replace(/\\\\\\\\n/g, '\\\\n');\n }\n if (truncate) {\n content = content.replace(/.{60}/g, '$&' + '\\r\\n ');\n }\n return content;\n}\nfunction atcb_position_list(host, trigger, list, blockUpwards = false, blockDownwards = false) {\n let anchorSet = false;\n const originalTrigger = trigger;\n if (trigger.querySelector('.atcb-dropdown-anchor') !== null) {\n trigger = trigger.querySelector('.atcb-dropdown-anchor');\n anchorSet = true;\n }\n list.style.position = 'relative';\n list.style.display = 'inline-block';\n let triggerDim = trigger.getBoundingClientRect();\n const btnDim = originalTrigger.getBoundingClientRect();\n const btnParentDim = originalTrigger.parentNode.getBoundingClientRect();\n const viewportHeight = document.documentElement.clientHeight;\n if (anchorSet === true && !list.classList.contains('atcb-dropoverlay')) {\n let listDim = list.getBoundingClientRect();\n list.style.width = listDim.width + 'px';\n if (list.classList.contains('atcb-dropup') || (!blockUpwards && triggerDim.top + listDim.height > viewportHeight - 20 && 2 * btnDim.top + btnDim.height - triggerDim.top - listDim.height > 20) || blockDownwards) {\n originalTrigger.classList.add('atcb-dropup');\n list.classList.add('atcb-dropup');\n list.style.bottom = btnParentDim.bottom - btnDim.bottom + (triggerDim.top - btnDim.top) + 'px';\n } else {\n list.style.top = btnDim.top - btnParentDim.top + (triggerDim.top - btnDim.top) + 'px';\n if (originalTrigger.classList.contains('atcb-dropup')) {\n originalTrigger.classList.remove('atcb-dropup');\n }\n }\n triggerDim = trigger.getBoundingClientRect();\n if (!list.classList.contains('atcb-style-round') && !list.classList.contains('atcb-style-text') && !list.classList.contains('atcb-style-neumorphism')) {\n list.style.minWidth = triggerDim.width + 'px';\n if (list.classList.contains('atcb-dropdown')) {\n list.style.maxWidth = triggerDim.width + 'px';\n }\n }\n listDim = list.getBoundingClientRect();\n list.style.left = Math.round(triggerDim.left - btnParentDim.left - (listDim.width - triggerDim.width) / 2) + 'px';\n } else {\n list.style.minWidth = btnDim.width + 20 + 'px';\n const listDim = list.getBoundingClientRect();\n list.style.width = listDim.width + 'px';\n const sideMargin = Math.round((btnDim.width - listDim.width) / 2);\n list.style.margin = -Math.round((listDim.height + btnDim.height) / 2) + 'px ' + sideMargin + 'px 0 ' + sideMargin + 'px';\n }\n list.style.position = 'absolute';\n list.style.display = 'block';\n const atcbL = host.querySelector('#atcb-reference');\n if (atcbL) {\n if (originalTrigger.classList.contains('atcb-dropup')) {\n originalTrigger.parentNode.after(atcbL);\n atcbL.classList.add('atcb-dropup');\n }\n }\n}\nfunction atcb_position_shadow_button(originalShadowHost, modalShadowHost) {\n const wrapperDim = originalShadowHost.querySelector('.atcb-initialized ').getBoundingClientRect();\n const newWrapper = modalShadowHost.querySelector('.atcb-initialized');\n let widthVal = wrapperDim.width;\n if (wrapperDim.width < 250) {\n widthVal = 250;\n }\n newWrapper.style.width = widthVal + 'px';\n newWrapper.style.height = wrapperDim.height + 'px';\n newWrapper.style.top = wrapperDim.top + 'px';\n newWrapper.style.left = wrapperDim.left + 'px';\n}\nfunction atcb_position_shadow_button_listener() {\n const active = atcbStates['active'];\n if (active !== null && active !== '') {\n const originalEl = document.querySelector('add-to-calendar-button[atcb-button-id=' + active + ']').shadowRoot;\n const shadowEl = document.querySelector('div[atcb-button-id=' + active + ']').shadowRoot;\n atcb_position_shadow_button(originalEl, shadowEl);\n }\n}\nfunction atcb_manage_body_scroll(host, modalObj = null) {\n const modal = (function () {\n if (modalObj != null) {\n return modalObj;\n } else {\n const allModals = host.querySelectorAll('.atcb-modal');\n if (allModals.length === 0) {\n return null;\n }\n return allModals[allModals.length - 1];\n }\n })();\n if (modal == null) {\n return;\n }\n const modalDim = modal.getBoundingClientRect();\n if (modalDim.height + 150 > window.innerHeight) {\n document.body.classList.add('atcb-modal-no-scroll');\n document.documentElement.classList.add('atcb-modal-no-scroll');\n } else {\n document.body.classList.remove('atcb-modal-no-scroll');\n document.documentElement.classList.remove('atcb-modal-no-scroll');\n }\n}\nfunction atcb_set_fullsize(el) {\n el.style.width = window.innerWidth + 'px';\n el.style.height = window.innerHeight + 100 + 'px';\n}\nfunction atcb_set_sizes(el, sizes) {\n el.style.setProperty('--base-font-size-l', sizes['l'] + 'px');\n el.style.setProperty('--base-font-size-m', sizes['m'] + 'px');\n el.style.setProperty('--base-font-size-s', sizes['s'] + 'px');\n}\nfunction atcb_generate_uuid() {\n const id = ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) => (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16));\n return id;\n}\nfunction atcb_copy_to_clipboard(dataString) {\n const tmpInput = document.createElement('input');\n document.body.append(tmpInput);\n const editable = tmpInput.contentEditable;\n const readOnly = tmpInput.readOnly;\n tmpInput.contentEditable = true;\n tmpInput.readOnly = false;\n tmpInput.value = dataString;\n if (atcbIsiOS()) {\n var range = document.createRange();\n range.selectNodeContents(tmpInput);\n var selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n tmpInput.setSelectionRange(0, 999999);\n } else {\n tmpInput.select();\n }\n tmpInput.contentEditable = editable;\n tmpInput.readOnly = readOnly;\n document.execCommand('copy');\n tmpInput.remove();\n}\nfunction atcb_debounce(func, timeout = 200) {\n let timer;\n return (...args) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n func.apply(this, args);\n }, timeout);\n };\n}\nfunction atcb_debounce_leading(func, timeout = 300) {\n let timer;\n return (...args) => {\n if (!timer) {\n func.apply(this, args);\n }\n clearTimeout(timer);\n timer = setTimeout(() => {\n timer = undefined;\n }, timeout);\n };\n}\n\n\nfunction atcb_log_event(event, trigger, identifier) {\n const parentEl = (function () {\n const customTrigger = document.getElementById(identifier);\n if (customTrigger) {\n return customTrigger;\n }\n return document.querySelector('[atcb-button-id=\"' + identifier + '\"]');\n })();\n if (parentEl) {\n parentEl.setAttribute('atcb-last-event', event + ':' + trigger);\n }\n if (atcbIsBrowser()) {\n atcb_push_to_data_layer(event, trigger);\n }\n}\nfunction atcb_push_to_data_layer(event, trigger) {\n let action = '';\n switch (event) {\n case 'initialization':\n action = 'Initialized';\n break;\n case 'openList':\n action = 'Opened';\n break;\n case 'closeList':\n action = 'Closed';\n break;\n case 'openCalendarLink':\n action = 'Opened';\n break;\n case 'openSingletonLink':\n action = 'Opened';\n break;\n case 'openSubEventLink':\n action = 'Opened';\n break;\n case 'openRSVP':\n action = 'Opened';\n break;\n case 'success':\n action = 'Saved';\n break;\n case 'successRSVP':\n action = 'Saved';\n break;\n }\n const category = event === 'openRSVP' || event === 'successRSVP' ? 'Add-to-Calendar-RSVP' : 'Add-to-Calendar-Button';\n const atcbDataLayer = (window.dataLayer = window.dataLayer || []);\n atcbDataLayer.push({\n eventCategory: category,\n eventAction: action,\n eventLabel: trigger,\n event: event,\n });\n}\n\n\n/* How to add new languages:\n * 1. Duplicate the \"en\" block at the following \"i18nStrings\" object.\n * 2. Change the key to the ISO 639-1 code of your language (https://www.w3schools.com/tags/ref_language_codes.asp).\n * 3. Translate the labels.\n * 4. Add the language to the \"rtlLanguages\" array below, if it write from right to left.\n * 4. Update the \"language\" part at the configuration page of the demo page - add the new lagnuages to the \"Options\" info (/demo/pages/configuration.vue).\n * 5. Also update the language.ts file at the demo page, so the language appears at the demo playground (/demo/src/components/models/language.ts).\n */\nconst rtlLanguages = ['ar', 'fa'];\nconst calendarNames = {\n apple: 'Apple',\n google: 'Google',\n ms365: 'Microsoft 365',\n msteams: 'Microsoft Teams',\n outlookcom: 'Outlook.com',\n yahoo: 'Yahoo',\n};\nconst i18nStrings = {\n en: {\n 'label.addtocalendar': 'Add to Calendar',\n ical: 'iCal File',\n ...calendarNames,\n 'modal.button.default': 'Click me',\n 'modal.webview.ical.h': 'Open your browser',\n 'modal.webview.ical.text': 'Unfortunately, in-app browsers have problems with the way we generate the calendar file.',\n 'modal.clipboard.text': 'We automatically copied a magical URL into your clipboard.',\n 'modal.webview.ical.steps': '
    1. Open another browser on your phone, ...
    2. Paste the clipboard content and go.
    ',\n 'modal.opensafari.ical.h': 'Open Safari',\n 'modal.opensafari.ical.text': 'Unfortunately, iOS has some problems generating and opening the calendar file outside of Safari.',\n 'modal.opensafari.ical.steps': '
    1. Open Safari, ...
    2. Paste the clipboard content and go.
    ',\n 'modal.multidate.h': 'This is an event series',\n 'modal.multidate.text': 'Add the individual events one by one:',\n 'date.status.cancelled': 'This date got cancelled.',\n 'date.status.cancelled.cta': 'Please update your calendar!',\n 'modal.subscribe.yahoo.h': 'Add Calendar to Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Open now the Yahoo Calendar.
    2. Click the \"Actions\" tab.
    3. Hit \"Follow Other Calendars\".
    4. Set a name and paste the clipboard content into the url field.
    ',\n 'modal.subscribe.yahoo.button': 'Open Yahoo Calendar',\n close: 'Close',\n continue: 'Continue',\n cancel: 'Cancel',\n expired: 'Expired',\n recurring: 'Recurring',\n thankyou: 'Thank you',\n submit: 'Submit',\n 'label.rsvp': 'RSVP',\n 'label.share.email': 'Share via Email',\n 'label.share.copy': 'Copy Link',\n 'label.share.copied': 'Copied',\n 'label.share.email.subject': 'Save this event',\n 'form.error.required': 'You did not properly fill all required fields',\n 'form.error.sending': 'There was a problem sending your response. Please try again later',\n 'form.success': 'Sent successfully!',\n },\n de: {\n 'label.addtocalendar': 'Im Kalender speichern',\n ical: 'iCal-Datei',\n ...calendarNames,\n 'modal.button.default': 'Klick mich',\n 'modal.webview.ical.h': 'Öffne deinen Browser',\n 'modal.webview.ical.text': 'Leider haben In-App-Browser Probleme mit der Art, wie wir Kalender-Dateien erzeugen.',\n 'modal.clipboard.text': 'Wir haben automatisch eine magische URL in deine Zwischenablage kopiert.',\n 'modal.webview.ical.steps': '
    1. Öffne einen anderen Browser auf deinem Smartphone, ...
    2. Nutze die Einfügen-Funktion, um fortzufahren.
    ',\n 'modal.opensafari.ical.h': 'Öffne Safari',\n 'modal.opensafari.ical.text': 'Leider hat iOS einige Probleme beim Generieren und Öffnen der Kalenderdatei außerhalb von Safari.',\n 'modal.opensafari.ical.steps': '
    1. Öffne Safari, ...
    2. Nutze die Einfügen-Funktion, um fortzufahren.
    ',\n 'modal.multidate.h': 'Dies ist eine Termin-Reihe',\n 'modal.multidate.text': 'Füge die einzelnen Termine der Reihe nach deinem Kalender hinzu:',\n 'date.status.cancelled': 'Dieser Termin wurde abgesagt.',\n 'date.status.cancelled.cta': 'Bitte aktualisiere deinen Kalender!',\n 'modal.subscribe.yahoo.h': 'Kalender zu Yahoo hinzufügen',\n 'modal.subscribe.yahoo.text': '
    1. Öffne den Yahoo-Kalender.
    2. Klicke auf den \"Aktionen\"-Tab.
    3. Wähle \"Weiteren Kalendern folgen\".
    4. Wähle einen Namen und füge die URL aus deiner Zwischenablage in das URL-Feld ein.
    ',\n 'modal.subscribe.yahoo.button': 'Yahoo-Kalender öffnen',\n close: 'Schließen',\n continue: 'Weiter',\n cancel: 'Abbrechen',\n expired: 'Abgelaufen',\n recurring: 'Wiederkehrend',\n thankyou: 'Danke',\n submit: 'Absenden',\n 'label.share.email': 'Per E-Mail teilen',\n 'label.share.copy': 'Link kopieren',\n 'label.share.copied': 'Kopiert',\n 'label.share.email.subject': 'Merke dir diesen Termin',\n 'form.error.required': 'Du hast nicht alle erforderlichen Felder korrekt ausgefüllt',\n 'form.error.sending': 'Es gab ein Problem beim Senden deiner Antwort. Bitte versuche es später noch einmal',\n 'form.success': 'Erfolgreich gesendet!',\n },\n es: {\n 'label.addtocalendar': 'Añadir al Calendario',\n ical: 'iCal Ficha',\n ...calendarNames,\n 'modal.button.default': 'Haz clic mí',\n 'modal.webview.ical.h': 'Abra su browser',\n 'modal.webview.ical.text': 'Lamentablemente, los browsers in-app tienen problemas con la forma en que generamos el archivo del calendario.',\n 'modal.clipboard.text': 'Hemos copiado automáticamente una URL mágica en su portapapeles.',\n 'modal.webview.ical.steps': '
    1. Abre otro browser en tu smartphone, ...
    2. Utilice la función de pegar para continuar.
    ',\n 'modal.opensafari.ical.h': 'Abrir Safari',\n 'modal.opensafari.ical.text': 'Desafortunadamente, iOS tiene algunos problemas para generar y abrir el archivo de calendario fuera de Safari.',\n 'modal.opensafari.ical.steps': '
    1. Abrir Safari, ...
    2. Utilice la función de pegar para continuar.
    ',\n 'modal.multidate.h': 'Esta es una serie de fechas',\n 'modal.multidate.text': 'Añada las fechas individuales a su calendario en orden:',\n 'date.status.cancelled': 'Esta fecha fue cancelada.',\n 'date.status.cancelled.cta': 'Actualice su calendario!',\n 'modal.subscribe.yahoo.h': 'Añadir calendario a Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Abra el calendario de Yahoo.
    2. Haga clic en la pestaña \"Acciones\".
    3. Seleccione \"Seguir otros calendarios\".
    4. Elige un nombre y pega la URL de tu portapapeles en el campo URL.
    ',\n 'modal.subscribe.yahoo.button': 'Abrir calendario de Yahoo',\n close: 'Ciérralo',\n continue: 'Continuar',\n cancel: 'Cancelar',\n expired: 'Caducada',\n recurring: 'Periódica',\n thankyou: 'Gracias',\n submit: 'Enviar',\n 'label.share.email': 'Compartir por E-mail',\n 'label.share.copy': 'Copiar enlace',\n 'label.share.copied': 'Copiado',\n 'label.share.email.subject': 'Recuerda esta fecha',\n 'form.error.required': 'No has completado correctamente todos los campos requeridos',\n 'form.error.sending': 'Hubo un problema al enviar tu respuesta. Por favor, inténtalo de nuevo más tarde',\n 'form.success': 'Enviado con éxito!',\n },\n pt: {\n 'label.addtocalendar': 'Incluir no Calendário',\n ical: 'Ficheiro iCal',\n ...calendarNames,\n 'modal.button.default': 'Clicar-me',\n 'modal.webview.ical.h': 'Abra o seu browser',\n 'modal.webview.ical.text': 'Infelizmente, os navegadores em tampas têm problemas com a forma como geramos o ficheiro de calendário.',\n 'modal.clipboard.text': 'Copiámos automaticamente um URL mágico para a sua área de transferência.',\n 'modal.webview.ical.steps': '
    1. Abrir outro browser en tu smartphone, ...
    2. Use a função colar para continuar.
    ',\n 'modal.opensafari.ical.h': 'Safari aberto',\n 'modal.opensafari.ical.text': 'Infelizmente, o iOS tem alguns problemas para gerar e abrir o arquivo de calendário fora do Safari.',\n 'modal.opensafari.ical.steps': '
    1. Safari aberto, ...
    2. Use a função colar para continuar.
    ',\n 'modal.multidate.h': 'Esta é uma série de datas',\n 'modal.multidate.text': 'Adicione as datas individuais ao seu calendário, por ordem:',\n 'date.status.cancelled': 'Esta data foi cancelada.',\n 'date.status.cancelled.cta': 'Actualize o seu calendário!',\n 'modal.subscribe.yahoo.h': 'Adicionar calendário ao Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Abrir o calendário do Yahoo.
    2. Clique no separador \"Acções\".
    3. Seleccione \"Seguir outros calendários\".
    4. Escolha um nome e cole o URL da sua área de transferência no campo URL.
    ',\n 'modal.subscribe.yahoo.button': 'Abra o Calendário do Yahoo',\n close: 'Fechar',\n continue: 'Continuar',\n cancel: 'Cancelar',\n expired: 'Expirada',\n recurring: 'Recorrente',\n thankyou: 'Obrigado',\n submit: 'Enviar',\n 'label.share.email': 'Compartilhar por e-mail',\n 'label.share.copy': 'Copiar link',\n 'label.share.copied': 'Copiado',\n 'label.share.email.subject': 'Lembre-se desta data',\n 'form.error.required': 'Você não preencheu todos os campos obrigatórios corretamente',\n 'form.error.sending': 'Houve um problema ao enviar sua resposta. Por favor, tente novamente mais tarde',\n 'form.success': 'Enviado com sucesso!',\n },\n fr: {\n 'label.addtocalendar': \"Ajouter à l'Agenda\",\n ical: 'Fichier iCal',\n ...calendarNames,\n 'modal.button.default': 'Cliquez-moi',\n 'modal.webview.ical.h': 'Ouvrez votre navigateur',\n 'modal.webview.ical.text': 'Malheureusement, les navigateurs intégrés aux applications ont des problèmes avec la manière dont nous créons les fichiers de calendrier.',\n 'modal.clipboard.text': 'Nous avons automatiquement copié une URL magique dans votre presse-papier.',\n 'modal.webview.ical.steps': '
    1. Ouvrez un autre navigateur sur votre smartphone ;
    2. Collez le contenu du presse-papier et continuez.
    ',\n 'modal.opensafari.ical.h': 'Ouvrir Safari',\n 'modal.opensafari.ical.text': 'Malheureusement, iOS rencontre des problèmes pour générer et ouvrir le fichier de calendrier en dehors de Safari.',\n 'modal.opensafari.ical.steps': '
    1. Ouvrez Safari ;
    2. Collez le contenu du presse-papier et continuez.
    ',\n 'modal.multidate.h': 'Ceci est une liste d’évènements',\n 'modal.multidate.text': 'Ajouter les évènements un par un :',\n 'date.status.cancelled': 'Cet évènement est annulé.',\n 'date.status.cancelled.cta': 'Actualisez votre agenda !',\n 'modal.subscribe.yahoo.h': 'Ajouter un agenda à Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Ouvrez l’Agenda Yahoo ;
    2. Cliquez sur l’onglet « Actions » ;
    3. Sélectionnez « Suivre d’autres agendas » ;
    4. Choisissez un nom et collez le contenu de votre presse-papier dans le champ URL.
    ',\n 'modal.subscribe.yahoo.button': 'Ouvrir le calendrier Yahoo',\n close: 'Fermer',\n continue: 'Continuer',\n cancel: 'Annuler',\n expired: 'Expiré',\n recurring: 'Récurrent',\n thankyou: 'Merci',\n submit: 'Envoyer',\n 'label.share.email': 'Partager par E-mail',\n 'label.share.copy': 'Copier le lien',\n 'label.share.copied': 'Copié',\n 'label.share.email.subject': 'Retenez cette date',\n 'form.error.required': \"Tu n'as pas correctement rempli tous les champs requis\",\n 'form.error.sending': \"Il y a eu un problème lors de l'envoi de ta réponse. Veuillez réessayer plus tard\",\n 'form.success': 'Envoyé avec succès!',\n },\n nl: {\n 'label.addtocalendar': 'Opslaan in Agenda',\n ical: 'iCal File',\n ...calendarNames,\n 'modal.button.default': 'Klik me',\n 'modal.webview.ical.h': 'Open uw browser',\n 'modal.webview.ical.text': 'Helaas hebben in-app browsers problemen met de manier waarop wij kalenderbestanden maken.',\n 'modal.clipboard.text': 'We hebben automatisch een magische URL naar je klembord gekopieerd.',\n 'modal.webview.ical.steps': '
    1. Open een andere browser op uw smartphone, ...
    2. Gebruik de insert functie om verder te gaan.
    ',\n 'modal.opensafari.ical.h': 'Open Safari',\n 'modal.opensafari.ical.text': 'Helaas heeft iOS enkele problemen met het genereren en openen van het agendabestand buiten Safari.',\n 'modal.opensafari.ical.steps': '
    1. Open Safari, ...
    2. Gebruik de insert functie om verder te gaan.
    ',\n 'modal.multidate.h': 'Dit is een reeks data',\n 'modal.multidate.text': 'Voeg de afzonderlijke delen één voor één toe:',\n 'date.status.cancelled': 'Deze datum is geannuleerd.',\n 'date.status.cancelled.cta': 'Uw agenda bijwerken!',\n 'modal.subscribe.yahoo.h': 'Toevoegen aan Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Open de Yahoo calendar.
    2. Klik op de \"Acties\" tab.
    3. Selecteer \"Volg Andere Agenda\\'s\".
    4. Kies een naam en plak de URL van uw klembord in het URL-veld.
    ',\n 'modal.subscribe.yahoo.button': 'Open Yahoo Agenda',\n close: 'Sluiten',\n continue: 'Doorgaan',\n cancel: 'Annuleren',\n expired: 'Verlopen',\n recurring: 'Terugkerend',\n thankyou: 'Bedankt',\n submit: 'Versturen',\n 'label.share.email': 'Delen via E-mail',\n 'label.share.copy': 'Link kopiëren',\n 'label.share.copied': 'Gekopieerd',\n 'label.share.email.subject': 'Onthoud deze datum',\n 'form.error.required': 'Je hebt niet alle vereiste velden correct ingevuld',\n 'form.error.sending': 'Er was een probleem met het versturen van je antwoord. Probeer het later opnieuw',\n 'form.success': 'Succesvol verstuurd!',\n },\n tr: {\n 'label.addtocalendar': 'Takvime Ekle',\n ical: 'iCal Dosyası',\n ...calendarNames,\n 'modal.button.default': 'Beni tıklayın',\n 'modal.webview.ical.h': 'Tarayıcınızı açın',\n 'modal.webview.ical.text': 'Ne yazık ki, uygulama içi tarayıcılar takvim dosyalarını oluşturma şeklimizle ilgili sorunlar yaşıyor.',\n 'modal.clipboard.text': 'Panonuza otomatik olarak sihirli bir URL kopyaladık.',\n 'modal.webview.ical.steps': '
    1. Akıllı telefonunuzda başka bir tarayıcı açın, ...
    2. Devam etmek için insert fonksiyonunu kullanın.
    ',\n 'modal.opensafari.ical.h': 'Açık Safari',\n 'modal.opensafari.ical.text': 'Ne yazık ki iOS, takvim dosyasını Safari dışında oluştururken ve açarken bazı sorunlar yaşıyor.',\n 'modal.opensafari.ical.steps': '
    1. Açık Safari, ...
    2. Devam etmek için insert fonksiyonunu kullanın.
    ',\n 'modal.multidate.h': 'Bu bir etkinlik serisidir',\n 'modal.multidate.text': 'Parçaları teker teker ekleyin:',\n 'date.status.cancelled': 'Bu tarih iptal edildi.',\n 'date.status.cancelled.cta': 'Lütfen takviminizi güncelleyin!',\n 'modal.subscribe.yahoo.h': \"Yahoo'ya takvim ekleme\",\n 'modal.subscribe.yahoo.text': '
    1. Yahoo takvimini açın.
    2. \"Eylemler\" sekmesine tıklayın.
    3. \"Diğer Takvimleri Takip Et\" öğesini seçin.
    4. Bir ad seçin ve URL\\'yi panonuzdan URL alanına yapıştırın.
    ',\n 'modal.subscribe.yahoo.button': 'Yahoo Takvimini aç',\n close: 'Kapat',\n continue: 'Devam etmek',\n cancel: 'İptal',\n expired: 'Günü geçmiş',\n recurring: 'Yinelenen',\n thankyou: 'Teşekkürler',\n submit: 'Gönder',\n 'label.share.email': 'E-posta ile Paylaş',\n 'label.share.copy': 'Bağlantıyı Kopyala',\n 'label.share.copied': 'Kopyalandı',\n 'label.share.email.subject': 'Bu Tarihi Unutma',\n 'form.error.required': 'Gerekli tüm alanları doğru şekilde doldurmadınız',\n 'form.error.sending': 'Yanıtınızı gönderirken bir sorun oluştu. Lütfen daha sonra tekrar deneyin',\n 'form.success': 'Başarıyla gönderildi!',\n },\n zh: {\n 'label.addtocalendar': '添加到日历',\n ical: 'iCal 文件',\n ...calendarNames,\n 'modal.button.default': '点我',\n 'modal.webview.ical.h': '打开浏览器',\n 'modal.webview.ical.text': '不幸的是,应用内浏览器在我们生成日历文件的方式上存在问题。',\n 'modal.clipboard.text': '我们自动将魔术 URL 复制到您的剪贴板。',\n 'modal.webview.ical.steps': '
    1. 打开手机上的任何其他浏览器, ...
    2. 粘贴剪贴板内容并开始。
    ',\n 'modal.opensafari.ical.h': '打开 Safari',\n 'modal.opensafari.ical.text': '不幸的是,iOS 在 Safari 之外生成和打开日历文件时遇到一些问题。',\n 'modal.opensafari.ical.steps': '
    1. 打开 Safari, ...
    2. 粘贴剪贴板内容并开始。
    ',\n 'modal.multidate.h': '这是一个活动系列',\n 'modal.multidate.text': '逐个添加各个部分:',\n 'date.status.cancelled': '此日期已取消。',\n 'date.status.cancelled.cta': '请更新您的日历!',\n 'modal.subscribe.yahoo.h': '将日历添加到 Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. 打开 Yahoo 日历。
    2. 点击“操作”标签。
    3. 选择“关注其他日历”。
    4. 选择一个名称并将剪贴板中的 URL 粘贴到 URL 字段中。
    ',\n 'modal.subscribe.yahoo.button': '打开雅虎日历',\n close: '关',\n continue: '继续',\n cancel: '中止',\n expired: '已到期',\n recurring: '再次发生的',\n thankyou: '谢谢',\n submit: '提交',\n 'label.share.email': '通过电子邮件分享',\n 'label.share.copy': '复制链接',\n 'label.share.copied': '已复制',\n 'label.share.email.subject': '记住这个日期',\n 'form.error.required': '你没有正确填写所有必填字段',\n 'form.error.sending': '发送你的回复时出现问题。请稍后再试',\n 'form.success': '成功发送!',\n },\n ar: {\n 'label.addtocalendar': 'إضافة إلى التقويم',\n ical: 'ملف iCal',\n ...calendarNames,\n 'modal.button.default': 'انقر فوق لي',\n 'modal.webview.ical.h': 'افتح المستعرض الخاص بك',\n 'modal.webview.ical.text': 'لسوء الحظ ، تواجه المتصفحات داخل التطبيق مشاكل في طريقة إنشاء ملف التقويم.',\n 'modal.clipboard.text': 'قمنا تلقائيًا بنسخ عنوان URL سحري إلى الحافظة الخاصة بك.',\n 'modal.webview.ical.steps': '
    1. افتح أي متصفح آخر على هاتفك الذكي, ...
    2. .الصق محتوى الحافظة واذهب
    ',\n 'modal.opensafari.ical.h': 'افتح Safari',\n 'modal.opensafari.ical.text': 'لسوء الحظ ، يواجه iOS بعض المشكلات في إنشاء ملف التقويم وفتحه خارج Safari.',\n 'modal.opensafari.ical.steps': '
    1. افتح Safari, ...
    2. الصق محتوى الحافظة واذهب.
    ',\n 'modal.multidate.h': 'هذه سلسلة أحداث',\n 'modal.multidate.text': 'أضف الأجزاء الفردية واحدة تلو الأخرى:',\n 'date.status.cancelled': 'تم إلغاء هذا التاريخ.',\n 'date.status.cancelled.cta': 'الرجاء تحديث التقويم الخاص بك!',\n 'modal.subscribe.yahoo.h': 'أضف التقويم إلى Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. افتح تقويم Yahoo.
    2. انقر فوق علامة التبويب \"الإجراءات\".
    3. حدد \"متابعة تقويمات أخرى\".
    4. اختر اسمًا والصق عنوان URL من الحافظة الخاصة بك في حقل URL.
    ',\n 'modal.subscribe.yahoo.button': 'افتح تقويم ياهو',\n close: 'قريب',\n continue: 'استمر',\n cancel: 'إحباط',\n expired: 'منتهي الصلاحية',\n recurring: 'يتكرر',\n thankyou: 'شكرا',\n submit: 'إرسال',\n 'label.share.email': 'مشاركة عبر البريد الإلكتروني',\n 'label.share.copy': 'نسخ الرابط',\n 'label.share.copied': 'تم النسخ',\n 'label.share.email.subject': 'تذكر هذا الموعد',\n 'form.error.required': 'لم تقم بملء جميع الحقول المطلوبة بشكل صحيح',\n 'form.error.sending': 'حدثت مشكلة أثناء إرسال ردك. الرجاء المحاولة لاحقاً',\n 'form.success': 'تم الإرسال بنجاح!',\n },\n hi: {\n 'label.addtocalendar': 'कैलेंडर में जोड़ें',\n ical: 'iCal फ़ाइल',\n ...calendarNames,\n 'modal.button.default': 'मुझे क्लिक करें',\n 'modal.webview.ical.h': 'अपना ब्राउज़र खोलें',\n 'modal.webview.ical.text': 'दुर्भाग्य से, इन-ऐप ब्राउज़र में कैलेंडर फ़ाइल बनाने के तरीके में समस्याएँ हैं।',\n 'modal.clipboard.text': 'हमने आपके क्लिपबोर्ड पर स्वचालित रूप से एक जादुई URL कॉपी कर लिया है।',\n 'modal.webview.ical.steps': '
    1. अपने फ़ोन पर दूसरा ब्राउज़र खोलें, ...
    2. क्लिपबोर्ड सामग्री चिपकाएं और जाएं।
    ',\n 'modal.opensafari.ical.h': 'सफारी खोलें',\n 'modal.opensafari.ical.text': 'दुर्भाग्य से, iOS में सफ़ारी के बाहर कैलेंडर फ़ाइल बनाने और खोलने में कुछ समस्याएँ हैं।',\n 'modal.opensafari.ical.steps': '
    1. सफारी खोलें, ...
    2. क्लिपबोर्ड सामग्री चिपकाएं और जाएं।
    ',\n 'modal.multidate.h': 'यह एक इवेंट सीरीज़ है',\n 'modal.multidate.text': 'अलग-अलग हिस्सों को एक-एक करके जोड़ें:',\n 'date.status.cancelled': 'यह तिथि रद्द हो गई।',\n 'date.status.cancelled.cta': 'कृपया अपना कैलेंडर अपडेट करें!',\n 'modal.subscribe.yahoo.h': 'Yahoo . में कैलेंडर जोड़ें',\n 'modal.subscribe.yahoo.text': '
    1. Yahoo कैलेंडर खोलें।
    2. \"कृती\" टैब पर क्लिक करें।
    3. \"इतर कॅलेंडर्सचे अनुसरण करा\" चुनें।
    4. एक नाम चुनें और अपने क्लिपबोर्ड से URL को URL फ़ील्ड में पेस्ट करें।
    ',\n 'modal.subscribe.yahoo.button': 'याहू कैलेंडर खोलें',\n close: 'बंद करना',\n continue: 'जारी रखें',\n cancel: 'रद्द करना',\n expired: 'खत्म हो चुका',\n recurring: 'पुनरावर्ती',\n thankyou: 'धन्यवाद',\n submit: 'जमा करें',\n 'label.share.email': 'ईमेल के माध्यम से साझा करें',\n 'label.share.copy': 'लिंक कॉपी करें',\n 'label.share.copied': 'कॉपी हो गया',\n 'label.share.email.subject': 'इस तारीख को याद रखें',\n 'form.error.required': 'आपने सभी आवश्यक फ़ील्ड सही ढंग से नहीं भरी हैं',\n 'form.error.sending': 'आपका जवाब भेजते समय एक समस्या हुई। कृपया बाद में पुनः प्रयास करें',\n 'form.success': 'सफलतापूर्वक भेजा गया!',\n },\n pl: {\n 'label.addtocalendar': 'Dodaj do kalendarza',\n ical: 'Plik iCal',\n ...calendarNames,\n 'modal.button.default': 'Kliknij mnie',\n 'modal.webview.ical.h': 'Otwórz przeglądarkę',\n 'modal.webview.ical.text': 'Niestety, przeglądarki in-app mają problemy ze sposobem, w jaki generujemy plik kalendarza.',\n 'modal.clipboard.text': 'Automatycznie skopiowaliśmy magiczny adres URL do schowka.',\n 'modal.webview.ical.steps': '
    1. Otwórz inną przeglądarkę w swoim telefonie, ...
    2. Wklej zawartość schowka i ruszaj.
    ',\n 'modal.opensafari.ical.h': 'Otwórz Safari',\n 'modal.opensafari.ical.text': 'Niestety iOS ma pewne problemy z generowaniem i otwieraniem pliku kalendarza poza Safari.',\n 'modal.opensafari.ical.steps': '
    1. Otwórz Safari, ...
    2. Wklej zawartość schowka i ruszaj.
    ',\n 'modal.multidate.h': 'To jest cykl imprez',\n 'modal.multidate.text': 'Dodawać po kolei poszczególne części:',\n 'date.status.cancelled': 'Ta data została odwołana.',\n 'date.status.cancelled.cta': 'Zaktualizuj swój kalendarz!',\n 'modal.subscribe.yahoo.h': 'Dodaj kalendarz do Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Otwórz kalendarz Yahoo.
    2. Kliknij na zakładkę \"Czynności\".
    3. Wybierz \"Obserwuj inne kalendarze\".
    4. Wybierz nazwę i wklej adres URL ze schowka w polu URL.
    ',\n 'modal.subscribe.yahoo.button': 'Otwórz kalendarz Yahoo',\n close: 'Zamknij',\n continue: 'Kontynuować',\n cancel: 'Anuluj',\n expired: 'Wygasły',\n recurring: 'Powtarzający się',\n thankyou: 'Dziękuję',\n submit: 'Wyślij',\n 'label.share.email': 'Udostępnij przez e-mail',\n 'label.share.copy': 'Kopiuj link',\n 'label.share.copied': 'Skopiowane',\n 'label.share.email.subject': 'Zapamiętaj tę datę',\n 'form.error.required': 'Nie wypełniłeś wszystkich wymaganych pól poprawnie',\n 'form.error.sending': 'Wystąpił problem z wysłaniem twojej odpowiedzi. Spróbuj ponownie później',\n 'form.success': 'Wysłano pomyślnie!',\n },\n id: {\n 'label.addtocalendar': 'Tambahkan ke Kalender',\n ical: 'File iCal',\n ...calendarNames,\n 'modal.button.default': 'Klik saya',\n 'modal.webview.ical.h': 'Buka browser Anda',\n 'modal.webview.ical.text': 'Sayangnya, browser dalam aplikasi memiliki masalah dengan cara kami menghasilkan file kalender.',\n 'modal.clipboard.text': 'Kami telah secara otomatis menyalin URL ajaib ke clipboard Anda.',\n 'modal.webview.ical.steps': '
    1. Buka peramban lain pada ponsel Anda, ...
    2. Tempelkan konten clipboard dan pergi.
    ',\n 'modal.opensafari.ical.h': 'Buka Safari',\n 'modal.opensafari.ical.text': 'Sayangnya, iOS memiliki beberapa masalah dalam membuat dan membuka file kalender di luar Safari.',\n 'modal.opensafari.ical.steps': '
    1. Buka Safari, ...
    2. Tempelkan konten clipboard dan pergi.
    ',\n 'modal.multidate.h': 'Ini adalah rangkaian acara',\n 'modal.multidate.text': 'Tambahkan masing-masing bagian satu per satu:',\n 'date.status.cancelled': 'Tanggal ini dibatalkan.',\n 'date.status.cancelled.cta': 'Perbarui kalender Anda!',\n 'modal.subscribe.yahoo.h': 'Tambahkan kalender ke Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Buka kalender Yahoo.
    2. Klik pada tab \"Tindakan\".
    3. Pilih \"Ikuti Kalender Lain\".
    4. Pilih nama dan tempelkan URL dari clipboard Anda ke bidang URL.
    ',\n 'modal.subscribe.yahoo.button': 'Buka kalender Yahoo',\n close: 'Tutup',\n continue: 'Lanjutkan',\n cancel: 'Batal',\n expired: 'Kedaluwarsa',\n recurring: 'Berulang',\n thankyou: 'Terima kasih',\n submit: 'Kirim',\n 'label.share.email': 'Bagikan via email',\n 'label.share.copy': 'Salin tautan',\n 'label.share.copied': 'Tersalin',\n 'label.share.email.subject': 'Ingat tanggal ini',\n 'form.error.required': 'Kamu belum mengisi semua kolom yang diperlukan dengan benar',\n 'form.error.sending': 'Ada masalah saat mengirim jawabanmu. Coba lagi nanti',\n 'form.success': 'Berhasil terkirim!',\n },\n no: {\n 'label.addtocalendar': 'Legg til i kalenderen',\n ical: 'iCal-fil',\n ...calendarNames,\n 'modal.button.default': 'Klikk på meg',\n 'modal.webview.ical.h': 'Åpne nettleseren din',\n 'modal.webview.ical.text': 'Dessverre har nettlesere i appen problemer med måten vi genererer kalenderfilen på.',\n 'modal.clipboard.text': 'Vi kopierte automatisk en magisk URL til utklippstavlen din.',\n 'modal.webview.ical.steps': '
    1. Åpne en annen nettleser på telefonen, ...
    2. Lim inn innholdet på utklippstavlen og gå.
    ',\n 'modal.opensafari.ical.h': 'Åpne Safari',\n 'modal.opensafari.ical.text': 'Dessverre har iOS noen problemer med å generere og åpne kalenderfilen utenfor Safari.',\n 'modal.opensafari.ical.steps': '
    1. Åpne Safari, ...
    2. Lim inn innholdet på utklippstavlen og gå.
    ',\n 'modal.multidate.h': 'Dette er en avtaleserie',\n 'modal.multidate.text': 'Legg til de enkelte datoene i kalenderen din i rekkefølge:',\n 'date.status.cancelled': 'Denne datoen ble avlyst.',\n 'date.status.cancelled.cta': 'Oppdater kalenderen din!',\n 'modal.subscribe.yahoo.h': 'Legg til kalender til Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Åpne Yahoo-kalenderen.
    2. Klikk på «Handlinger»-fanen.
    3. Velg «Følg andre kalendere».
    4. Velg et navn og lim inn URL-en fra utklippstavlen i URL-feltet.
    ',\n 'modal.subscribe.yahoo.button': 'Åpne Yahoo-kalenderen',\n close: 'Lukk',\n continue: 'Fortsette',\n cancel: 'Avbryt',\n expired: 'Utløpt',\n recurring: 'Tilbakevendende',\n thankyou: 'Takk',\n submit: 'Send inn',\n 'label.share.email': 'Del via e-post',\n 'label.share.copy': 'Kopier lenke',\n 'label.share.copied': 'Kopiert',\n 'label.share.email.subject': 'Husk denne datoen',\n 'form.error.required': 'Du har ikke fylt ut alle de nødvendige feltene riktig',\n 'form.error.sending': 'Det oppsto et problem med å sende svaret ditt. Vennligst prøv igjen senere',\n 'form.success': 'Sendt suksessfullt!',\n },\n fi: {\n 'label.addtocalendar': 'Lisää kalenteriin',\n ical: 'iCal-tiedosto',\n ...calendarNames,\n 'modal.button.default': 'Klikkaa minua',\n 'modal.webview.ical.h': 'Avaa selain',\n 'modal.webview.ical.text': 'Valitettavasti sovelluksen sisäisillä selaimilla on ongelmia kalenteritiedoston luomisessa.',\n 'modal.clipboard.text': 'Olemme automaattisesti kopioineet maagisen URL-osoitteen leikepöydällesi.',\n 'modal.webview.ical.steps': '
    1. Avaa toinen selain puhelimessasi., ...
    2. liitä leikepöydän sisältö ja lähde.
    ',\n 'modal.opensafari.ical.h': 'Avaa Safari',\n 'modal.opensafari.ical.text': 'Valitettavasti iOS:llä on ongelmia kalenteritiedoston luomisessa ja avaamisessa Safarin ulkopuolella.',\n 'modal.opensafari.ical.steps': '
    1. Avaa Safari, ...
    2. liitä leikepöydän sisältö ja lähde.
    ',\n 'modal.multidate.h': 'Tämä on tapahtumasarja',\n 'modal.multidate.text': 'Lisää yksittäiset osat yksi kerrallaan:',\n 'date.status.cancelled': 'Tämä päivämäärä peruttiin.',\n 'date.status.cancelled.cta': 'Päivitä kalenterisi!',\n 'modal.subscribe.yahoo.h': 'Lisää kalenteri Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Avaa Yahoo-kalenteri.
    2. Napsauta \"Toiminnot\"-välilehteä.
    3. Valitse \"Seuraa muiden kalentereita\".
    4. Valitse nimi ja liitä URL-osoite leikepöydältäsi URL-kenttään.
    ',\n 'modal.subscribe.yahoo.button': 'Avaa Yahoo-kalenteri',\n close: 'Sulje',\n continue: 'Jatkaa',\n cancel: 'Peruuta',\n expired: 'Vanhentunut',\n recurring: 'Toistuva',\n thankyou: 'Kiitos',\n submit: 'Lähetä',\n 'label.share.email': 'Jaa sähköpostitse',\n 'label.share.copy': 'Kopioi linkki',\n 'label.share.copied': 'Kopioitu',\n 'label.share.email.subject': 'Muista tämä päivämäärä',\n 'form.error.required': 'Et täyttänyt kaikkia vaadittuja kenttiä oikein',\n 'form.error.sending': 'Vastauksen lähettämisessä ilmeni ongelma. Yritä myöhemmin uudelleen',\n 'form.success': 'Lähetetty onnistuneesti!',\n },\n sv: {\n 'label.addtocalendar': 'Lägg till i kalender',\n ical: 'iCal-fil',\n ...calendarNames,\n 'modal.button.default': 'Klicka på mig',\n 'modal.webview.ical.h': 'Öppna din webbläsare',\n 'modal.webview.ical.text': 'Tyvärr har webbläsare i appen problem med hur vi genererar kalenderfilen.',\n 'modal.clipboard.text': 'Vi har automatiskt kopierat en magisk URL till ditt klippblock.',\n 'modal.webview.ical.steps': '
    1. Öppna en annan webbläsare på telefonen, ...
    2. Insätt innehållet i klippbordet och kör.
    ',\n 'modal.opensafari.ical.h': 'Öppna Safari',\n 'modal.opensafari.ical.text': 'Tyvärr har iOS vissa problem med att generera och öppna kalenderfilen utanför Safari.',\n 'modal.opensafari.ical.steps': '
    1. Öppna Safari, ...
    2. Insätt innehållet i klippbordet och kör.
    ',\n 'modal.multidate.h': 'Detta är en evenemangsserie',\n 'modal.multidate.text': 'Lägg till de enskilda delarna en efter en:',\n 'date.status.cancelled': 'Detta datum har ställts in.',\n 'date.status.cancelled.cta': 'Uppdatera din kalender!',\n 'modal.subscribe.yahoo.h': 'Lägg till kalender i Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Öppna Yahoo-kalendern.
    2. Klicka på fliken \"Åtgärder\".
    3. Välj \"Följ andra kalendrar\".
    4. Välj ett namn och klistra in URL:en från klippbordet i URL-fältet.
    ',\n 'modal.subscribe.yahoo.button': 'Öppna Yahoo-kalendern',\n close: 'Stäng',\n continue: 'Fortsätta',\n cancel: 'Avbryt',\n expired: 'Utgånget',\n recurring: 'Återkommande',\n thankyou: 'Tack',\n submit: 'Skicka',\n 'label.share.email': 'Dela via e-post',\n 'label.share.copy': 'Kopiera länk',\n 'label.share.copied': 'Kopierat',\n 'label.share.email.subject': 'Kom ihåg detta datum',\n 'form.error.required': 'Du har inte fyllt i alla nödvändiga fält korrekt',\n 'form.error.sending': 'Det uppstod ett problem när ditt svar skickades. Försök igen senare',\n 'form.success': 'Skickat framgångsrikt!',\n },\n cs: {\n 'label.addtocalendar': 'Přidat do kalendáře',\n ical: 'Soubor iCal',\n ...calendarNames,\n 'modal.button.default': 'Klikněte na mě',\n 'modal.webview.ical.h': 'Otevřete prohlížeč',\n 'modal.webview.ical.text': 'Prohlížeče v aplikacích mají bohužel problémy se způsobem generování souboru kalendáře.',\n 'modal.clipboard.text': 'Do schránky jsme automaticky zkopírovali kouzelnou adresu URL.',\n 'modal.webview.ical.steps': '
    1. Otevření jiného prohlížeče v telefonu, ...
    2. Vložte obsah schránky a přejděte.
    ',\n 'modal.opensafari.ical.h': 'Otevřít Safari',\n 'modal.opensafari.ical.text': 'Bohužel má iOS nějaké problémy s generováním a otevíráním souboru kalendáře mimo Safari.',\n 'modal.opensafari.ical.steps': '
    1. Otevřít Safari, ...
    2. Vložte obsah schránky a přejděte.
    ',\n 'modal.multidate.h': 'Jedná se o sérii událostí',\n 'modal.multidate.text': 'Přidávejte jednotlivé díly jeden po druhém:',\n 'date.status.cancelled': 'Toto datum bylo zrušeno.',\n 'date.status.cancelled.cta': 'Aktualizujte svůj kalendář!',\n 'modal.subscribe.yahoo.h': 'Přidat kalendář do Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Otevřete kalendář Yahoo.
    2. Klikněte na kartu \"Akce\".
    3. Vyberte možnost \"Sledovat další kalendáře\".
    4. Vyberte název a vložte adresu URL ze schránky do pole URL.
    ',\n 'modal.subscribe.yahoo.button': 'Otevřete kalendář Yahoo',\n close: 'Zavřít',\n continue: 'Pokračovat',\n cancel: 'Storno',\n expired: 'Platnost vypršela',\n recurring: 'Opakující se',\n thankyou: 'Děkuji',\n submit: 'Odeslat',\n 'label.share.email': 'Sdílet e-mailem',\n 'label.share.copy': 'Kopírovat odkaz',\n 'label.share.copied': 'Zkopírováno',\n 'label.share.email.subject': 'Zapamatuj si tento termín',\n 'form.error.required': 'Nevyplnil jsi správně všechna požadovaná pole',\n 'form.error.sending': 'Při odesílání tvé odpovědi došlo k problému. Zkus to prosím později znovu',\n 'form.success': 'Úspěšně odesláno!',\n },\n ja: {\n 'label.addtocalendar': 'カレンダーに追加',\n ical: 'iCalファイル',\n ...calendarNames,\n 'modal.button.default': 'クリックしてください',\n 'modal.webview.ical.h': 'ブラウザを起動する',\n 'modal.webview.ical.text': '残念ながら、アプリ内ブラウザは、カレンダーファイルの生成方法に問題があります。',\n 'modal.clipboard.text': '魔法のURLを自動的にクリップボードにコピーしています。',\n 'modal.webview.ical.steps': '
    1. スマートフォンで別のブラウザを起動する, ...
    2. クリップボードの内容を貼り付けて行く。
    ',\n 'modal.opensafari.ical.h': 'オープンSafari',\n 'modal.opensafari.ical.text': '残念ながら、iOS では、Safari の外でカレンダー ファイルを生成したり開いたりする際にいくつかの問題があります。',\n 'modal.opensafari.ical.steps': '
    1. オープンSafari, ...
    2. クリップボードの内容を貼り付けて行く。
    ',\n 'modal.multidate.h': 'イベントシリーズです',\n 'modal.multidate.text': '個々のパーツを一つずつ追加していく:',\n 'date.status.cancelled': 'この日はキャンセルになりました。',\n 'date.status.cancelled.cta': 'カレンダーを更新する!',\n 'modal.subscribe.yahoo.h': 'Yahooにカレンダーを追加する',\n 'modal.subscribe.yahoo.text': '
    1. Yahooカレンダーを開く。
    2. [実行] タブをクリックします。
    3. [その他のカレンダーのフォロー] を選択します。
    4. 名前を決めて、クリップボードにあるURLをURL欄に貼り付けます。
    ',\n 'modal.subscribe.yahoo.button': 'Yahooカレンダーを開く',\n close: '閉じる',\n continue: '続ける',\n cancel: 'キャンセル',\n expired: '期限切れ',\n recurring: '繰り返し',\n thankyou: 'ありがとう',\n submit: '送信',\n 'label.share.email': 'メールで共有',\n 'label.share.copy': 'リンクをコピー',\n 'label.share.copied': 'コピー済み',\n 'label.share.email.subject': 'この日付を覚えておいて',\n 'form.error.required': '必要なフィールドをすべて正しく入力していません',\n 'form.error.sending': 'あなたの回答を送信する際に問題が発生しました。後で再試行してください',\n 'form.success': '正常に送信されました!',\n },\n it: {\n 'label.addtocalendar': 'Aggiungi al calendario',\n ical: 'File iCal',\n ...calendarNames,\n 'modal.button.default': 'Clicca su di me',\n 'modal.webview.ical.h': 'Aprire il browser',\n 'modal.webview.ical.text': 'Purtroppo i browser in-app hanno problemi con il modo in cui generiamo il file del calendario.',\n 'modal.clipboard.text': 'Abbiamo copiato automaticamente un URL magico negli appunti.',\n 'modal.webview.ical.steps': '
    1. Aprire un altro browser sul cellulare, ...
    2. Incollare il contenuto degli appunti e partire.
    ',\n 'modal.opensafari.ical.h': 'Aprire Safari',\n 'modal.opensafari.ical.text': \"Sfortunatamente, iOS ha alcuni problemi nella generazione e nell'apertura del file del calendario al di fuori di Safari.\",\n 'modal.opensafari.ical.steps': '
    1. Aprire Safari, ...
    2. Incollare il contenuto degli appunti e partire.
    ',\n 'modal.multidate.h': 'Questa è una serie di eventi',\n 'modal.multidate.text': 'Aggiungere le singole parti una per una:',\n 'date.status.cancelled': 'La data è stata annullata.',\n 'date.status.cancelled.cta': 'Aggiornare il calendario!',\n 'modal.subscribe.yahoo.h': 'Aggiungi il calendario a Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Aprire il calendario di Yahoo.
    2. Fare clic sulla scheda \"Azioni\".
    3. Selezionare \"Segui altri calendari\".
    4. Scegliere un nome e incollare l\\'URL dagli appunti nel campo URL.
    ',\n 'modal.subscribe.yahoo.button': 'Apri il calendario di Yahoo',\n close: 'Chiudere',\n continue: 'Continuare',\n cancel: 'Annulla',\n expired: 'Scaduta',\n recurring: 'Ricorrente',\n thankyou: 'Grazie',\n submit: 'Invia',\n 'label.share.email': 'Condividi via Email',\n 'label.share.copy': 'Copia il link',\n 'label.share.copied': 'Copiato',\n 'label.share.email.subject': 'Ricorda questa data',\n 'form.error.required': 'Non hai compilato correttamente tutti i campi richiesti',\n 'form.error.sending': \"C'è stato un problema nell'invio della tua risposta. Prova di nuovo più tardi\",\n 'form.success': 'Inviato con successo!',\n },\n ko: {\n 'label.addtocalendar': '캘린더에 추가',\n ical: 'iCal 파일',\n ...calendarNames,\n 'modal.button.default': '클릭 해주세요',\n 'modal.webview.ical.h': '브라우저 열기',\n 'modal.webview.ical.text': '불행히도 인앱 브라우저는 캘린더 파일을 생성하는 방식에 문제가 있습니다.',\n 'modal.clipboard.text': '매직 URL을 클립보드에 자동으로 복사했습니다.',\n 'modal.webview.ical.steps': '
    1. 휴대전화에서 다른 브라우저 열기, ...
    2. 클립보드 내용을 붙여넣고 이동합니다.
    ',\n 'modal.opensafari.ical.h': 'Safari 열기',\n 'modal.opensafari.ical.text': '안타깝게도 iOS에는 Safari 외부에서 캘린더 파일을 생성하고 여는 데 몇 가지 문제가 있습니다.',\n 'modal.opensafari.ical.steps': '
    1. Safari 열기, ...
    2. 클립보드 내용을 붙여넣고 이동합니다.
    ',\n 'modal.multidate.h': '이벤트 시리즈입니다',\n 'modal.multidate.text': '개별 부품을 하나씩 추가:',\n 'date.status.cancelled': '이 날짜는 취소되었습니다.',\n 'date.status.cancelled.cta': '캘린더를 업데이트하세요!',\n 'modal.subscribe.yahoo.h': 'Yahoo에 캘린더 추가',\n 'modal.subscribe.yahoo.text': '
    1. Yahoo 캘린더를 엽니다.
    2. \"동작\" 탭을 클릭합니다.
    3. \"다른 일정관리 팔로우\"를 선택합니다.
    4. 이름을 선택하고 클립보드의 URL을 URL 필드에 붙여넣습니다.
    ',\n 'modal.subscribe.yahoo.button': '야후 캘린더 열기',\n close: '닫다',\n continue: '계속하다',\n cancel: '취소',\n expired: '만료됨',\n recurring: '되풀이',\n thankyou: '감사합니다',\n submit: '제출하기',\n 'label.share.email': '이메일로 공유하기',\n 'label.share.copy': '링크 복사하기',\n 'label.share.copied': '복사됨',\n 'label.share.email.subject': '이 날짜를 기억하세요',\n 'form.error.required': '필수 필드를 모두 올바르게 채우지 않았습니다',\n 'form.error.sending': '응답을 보내는 데 문제가 발생했습니다. 나중에 다시 시도해주세요',\n 'form.success': '성공적으로 전송됨!',\n },\n vi: {\n 'label.addtocalendar': 'Thêm vào Lịch',\n ical: 'Tệp iCal',\n ...calendarNames,\n 'modal.button.default': 'Nhấp vào đây',\n 'modal.webview.ical.h': 'Mở trình duyệt của bạn',\n 'modal.webview.ical.text': 'Rất tiếc, các trình duyệt trong ứng dụng gặp sự cố với cách chúng tôi tạo tệp lịch.',\n 'modal.clipboard.text': 'Chúng tôi đã tự động sao chép một URL ma thuật vào khay nhớ tạm của bạn.',\n 'modal.webview.ical.steps': '
    1. Mở trình duyệt khác trên điện thoại của bạn, ...
    2. Dán nội dung khay nhớ tạm và bắt đầu.
    ',\n 'modal.opensafari.ical.h': 'Mở Safari',\n 'modal.opensafari.ical.text': 'Rất tiếc, iOS gặp một số sự cố khi tạo và mở tệp lịch bên ngoài Safari.',\n 'modal.opensafari.ical.steps': '
    1. Mở Safari, ...
    2. Dán nội dung khay nhớ tạm và bắt đầu.
    ',\n 'modal.multidate.h': 'Đây là một chuỗi sự kiện',\n 'modal.multidate.text': 'Thêm từng phần riêng lẻ một:',\n 'date.status.cancelled': 'Ngày này đã bị hủy.',\n 'date.status.cancelled.cta': 'Cập nhật lịch của bạn!',\n 'modal.subscribe.yahoo.h': 'Thêm lịch vào Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Mở Lịch Yahoo.
    2. Nhấp vào tab \"Hành động\".
    3. Chọn \"Theo dõi các Lịch khác\".
    4. Chọn tên và dán URL từ khay nhớ tạm của bạn vào trường URL.
    ',\n 'modal.subscribe.yahoo.button': 'Mở lịch Yahoo',\n close: 'Đóng',\n continue: 'Tiếp tục',\n cancel: 'Hủy bỏ',\n expired: 'Hết hạn',\n recurring: 'Định kỳ',\n thankyou: 'Cảm ơn',\n submit: 'Gửi',\n 'label.share.email': 'Chia sẻ qua Email',\n 'label.share.copy': 'Sao chép liên kết',\n 'label.share.copied': 'Đã sao chép',\n 'label.share.email.subject': 'Ghi nhớ ngày này',\n 'form.error.required': 'Bạn chưa điền đúng tất cả các trường bắt buộc',\n 'form.error.sending': 'Có sự cố khi gửi phản hồi của bạn. Vui lòng thử lại sau',\n 'form.success': 'Gửi thành công!',\n },\n ro: {\n 'label.addtocalendar': 'Adauga In Calendar',\n ical: 'Fisier iCal',\n ...calendarNames,\n 'modal.button.default': 'Apasa-ma',\n 'modal.webview.ical.h': 'Deschide browserul',\n 'modal.webview.ical.text': 'Din pacate, browserele din aplicatie au probleme cu generarea de fisiere pentru calendar.',\n 'modal.clipboard.text': 'Ti-am copiat automat un URL magic in clipboard',\n 'modal.webview.ical.steps': '
    1. Deschide un alt browser pe telefonul tau, ...
    2. Lipeste continutul din clipboard si continua.
    ',\n 'modal.opensafari.ical.h': 'Deschide Safari',\n 'modal.opensafari.ical.text': 'Din păcate, iOS are unele probleme la generarea și deschiderea fișierului calendar în afara Safari.',\n 'modal.opensafari.ical.steps': '
    1. Deschides Safari, ...
    2. Lipeste continutul din clipboard si continua.
    ',\n 'modal.multidate.h': 'Aceasta este o serie de evenimente',\n 'modal.multidate.text': 'Adauga evenimentele individuale una cate una:',\n 'date.status.cancelled': 'Aceasta data a fost anulata.',\n 'date.status.cancelled.cta': 'Te rugam sa-ti updatezi calendarul!',\n 'modal.subscribe.yahoo.h': 'Adauga Calendar in Yahoo',\n 'modal.subscribe.yahoo.text': '
    1. Deschide acum calendarul Yahoo.
    2. Apasa pe tab-ul de \"Actiuni\".
    3. Apasa \"Urmareste alte calendare\".
    4. Seteaza un nume si lipeste continutul din clipboard in casuta cu url.
    ',\n 'modal.subscribe.yahoo.button': 'Deschideți calendarul Yahoo',\n close: 'Inchide',\n continue: 'Continua',\n cancel: 'Anuleaza',\n expired: 'Expirat',\n recurring: 'Recurente',\n thankyou: 'Mulțumesc',\n submit: 'Trimite',\n 'label.share.email': 'Distribuie prin e-mail',\n 'label.share.copy': 'Copiază linkul',\n 'label.share.copied': 'Copiat',\n 'label.share.email.subject': 'Ține minte această dată',\n 'form.error.required': 'Nu ai completat corect toate câmpurile necesare',\n 'form.error.sending': 'A apărut o problemă la trimiterea răspunsului tău. Încearcă din nou mai târziu',\n 'form.success': 'Trimis cu succes!',\n },\n fa: {\n 'label.addtocalendar': 'افزودن به تقویم',\n ical: 'پرونده iCal',\n ...calendarNames,\n 'modal.button.default': 'اینجا کلیک کنید',\n 'modal.webview.ical.h': 'مرورگر خود را باز کنید',\n 'modal.webview.ical.text': 'متاسفانه، مرورگرهای درون برنامه‌ای با نحوه تولید پرونده تقویم مشکل دارند.',\n 'modal.clipboard.text': 'ما به طور خودکار یک نشانی اینترنتی جادویی را در کلیپ‌بورد شما کپی کردیم.',\n 'modal.webview.ical.steps': '
    1. مرورگر دیگری را در گوشی خود باز کنید، ...
    2. محتوای کلیپ‌بورد را Paste کنید و Go را بزنید که آدرس باز شود.
    ',\n 'modal.opensafari.ical.h': 'سافاری را باز کنید',\n 'modal.opensafari.ical.text': 'متأسفانه iOS در تولید و باز کردن فایل تقویم خارج از سافاری مشکلاتی دارد.',\n 'modal.opensafari.ical.steps': '
    1. سافاری را باز کنید، ...
    2. محتوای کلیپ‌بورد را Paste کنید و Go را بزنید که آدرس باز شود.
    ',\n 'modal.multidate.h': 'این یک سری رویداد است',\n 'modal.multidate.text': 'رویدادهای شخصی را یکی یکی اضافه کنید:',\n 'date.status.cancelled': 'این تاریخ لغو شد',\n 'date.status.cancelled.cta': 'لطفا تقویم خود را به‌روز کنید!',\n 'modal.subscribe.yahoo.h': 'افزودن تقویم به یاهو',\n 'modal.subscribe.yahoo.text': '
    1. اکنون تقویم یاهو را باز کنید.
    2. روی زبانه «Actions» کلیک کنید.
    3. روی «Follow Other Calendars» ضربه بزنید.
    4. یک نام وارد کنید و محتوای کلیپ‌بورد را در قسمت url قرار دهید.
    ',\n 'modal.subscribe.yahoo.button': 'تقویم یاهو را باز کنید',\n close: 'بستن',\n continue: 'ادامه دادن',\n cancel: 'لغو',\n expired: 'منقضی شده',\n thankyou: 'ممنون',\n submit: 'ارسال',\n 'label.share.email': 'اشتراک‌گذاری از طریق ایمیل',\n 'label.share.copy': 'کپی لینک',\n 'label.share.copied': 'کپی شد',\n 'label.share.email.subject': 'این تاریخ را به یاد داشته باشید',\n 'form.error.required': 'شما همه فیلدهای لازم را به درستی پر نکرده‌اید',\n 'form.error.sending': 'مشکلی در ارسال پاسخ شما وجود داشت. لطفا بعدا دوباره تلاش کنید',\n 'form.success': 'با موفقیت ارسال شد!',\n },\n et: {\n 'label.addtocalendar': 'Lisa kalendrisse',\n ical: 'iCal fail',\n ...calendarNames,\n 'modal.button.default': 'Kliki siia',\n 'modal.webview.ical.h': 'Ava oma veebilehitseja',\n 'modal.webview.ical.text': 'Kahjuks on rakendusesisestel veebilehitsejatel probleeme kalendrifailide loomisega.',\n 'modal.clipboard.text': 'Kalendri veebi aadress on automaatselt kopeeritud sinu lõikelauale.',\n 'modal.webview.ical.steps': '
    1. Ava teine veebilehitseja oma telefonis, ...
    2. Kleebi lõikelaua sisu ning mine sellele lehele.
    ',\n 'modal.opensafari.ical.h': 'Ava Safari',\n 'modal.opensafari.ical.text': 'Kahjuks on iOS-il probleeme kalendrifaili genereerimise ja avamisega väljaspool Safarit.',\n 'modal.opensafari.ical.steps': '
    1. Ava Safari, ...
    2. Kleebi lõikelaua sisu ning mine sellele lehele.
    ',\n 'modal.multidate.h': 'See on sündmuste seeria',\n 'modal.multidate.text': 'Ava üksikud sündmused ükshaaval:',\n 'date.status.cancelled': 'See kuupäev on tühistatud.',\n 'date.status.cancelled.cta': 'Palun uuenda oma kalendrit!',\n 'modal.subscribe.yahoo.h': 'Lisa kalender Yahoo-sse',\n 'modal.subscribe.yahoo.text': '
    1. Ava oma Yahoo kalender.
    2. Kliki \"Actions\" vahelehte.
    3. Vajuta \"Follow Other Calendars\".
    4. Määra nimi ning lisa lõikelaua sisu URL (veebi aadressi) väljale.
    ',\n 'modal.subscribe.yahoo.button': 'Avage Yahoo kalender',\n close: 'Sulge',\n continue: 'Jätkama',\n cancel: 'Tühista',\n expired: 'Aegunud',\n thankyou: 'Aitäh',\n submit: 'Saada',\n 'label.share.email': 'Jaga e-posti teel',\n 'label.share.copy': 'Kopeeri link',\n 'label.share.copied': 'Kopeeritud',\n 'label.share.email.subject': 'Pane see kuupäev kirja',\n 'form.error.required': 'Sa pole kõiki nõutavaid välju korrektselt täitnud',\n 'form.error.sending': 'Sinu vastuse saatmisel tekkis probleem. Palun proovi hiljem uuesti',\n 'form.success': 'Edukalt saadetud!',\n },\n};\nconst availableLanguages = Object.keys(i18nStrings);\nfunction atcb_translate_hook(identifier, data) {\n if (data.customLabels && data.customLabels[`${identifier}`] && data.customLabels[`${identifier}`] !== '') {\n return atcb_rewrite_html_elements(data.customLabels[`${identifier}`]);\n } else {\n return atcb_translate(identifier, data.language);\n }\n}\nfunction atcb_translate(identifier, language) {\n if (!language) {\n language = 'en';\n }\n if (i18nStrings[`${language}`][`${identifier}`]) {\n return i18nStrings[`${language}`][`${identifier}`];\n }\n if (language !== 'en') {\n return atcb_translate(identifier, 'en');\n }\n return identifier;\n}\n\n\nlet atcbInitialGlobalInit = false;\nlet atcbBtnCount = 0;\nconst lightModeMutationObserver = [];\nconst template = `
    `;\nif (atcbIsBrowser()) {\n class AddToCalendarButton extends HTMLElement {\n constructor() {\n super();\n this._initialized = new Promise((resolve) => (this._initializedResolver = resolve));\n const elem = document.createElement('template');\n elem.innerHTML = template;\n this.attachShadow({ mode: 'open', delegateFocus: true });\n this.shadowRoot.append(elem.content.cloneNode(true));\n this.state = {\n initializing: false,\n initialized: false,\n ready: false,\n updatePending: false,\n };\n this.data = {};\n this.error = false;\n }\n connectedCallback() {\n if (!this.initializing) {\n this.initializing = true;\n setTimeout(() => this.initializeComponent(), 0);\n }\n }\n async initializeComponent() {\n if (this.state.ready) {\n return;\n }\n this.state.initializing = true;\n const debugVal = this.getAttribute('debug');\n this.debug = this.hasAttribute('debug') && (!debugVal || debugVal === 'true' || debugVal === '') ? true : false;\n if (this.hasAttribute('proOverride') || this.hasAttribute('prooverride')) {\n let proOverrideVal = null;\n if (this.hasAttribute('proOverride') && this.getAttribute('proOverride') !== '') {\n proOverrideVal = this.getAttribute('proOverride');\n } else {\n proOverrideVal = this.getAttribute('prooverride');\n }\n this.proOverride = !proOverrideVal || proOverrideVal === 'true' || proOverrideVal === '' ? true : false;\n }\n try {\n if ((this.hasAttribute('proKey') && this.getAttribute('proKey') !== '') || (this.hasAttribute('prokey') && this.getAttribute('prokey') !== '')) {\n if (this.hasAttribute('proKey') && this.getAttribute('proKey') !== '') {\n this.data = await atcb_get_pro_data(this.getAttribute('proKey'), this);\n } else {\n this.data = await atcb_get_pro_data(this.getAttribute('prokey'), this);\n }\n if (this.data.proKey) this.proKey = this.data.proKey;\n } else {\n this.data.proKey = '';\n this.data = await atcb_process_inline_data(this, this.debug);\n }\n } catch (e) {\n if (this.debug) {\n console.error(e);\n atcb_render_debug_msg(this.shadowRoot, e);\n }\n this.state.initializing = false;\n this.state.ready = true;\n return;\n }\n await this.initButton();\n this.state.initializing = false;\n this.state.initialized = true;\n this.state.ready = true;\n this._initializedResolver();\n return;\n }\n whenInitialized() {\n return this._initialized;\n }\n disconnectedCallback() {\n atcb_cleanup(this.shadowRoot, this.identifier);\n if (this.debug) {\n console.log('Add to Calendar Button \"' + this.identifier + '\" destroyed');\n }\n if (document.querySelectorAll('add-to-calendar-button').length === 0) {\n atcbBtnCount = 0;\n }\n }\n static get observedAttributes() {\n const observeAdditionally = ['instance', 'prokey', 'proKey', 'prooverride', 'proOverride'];\n if (this.proKey && this.proKey !== '') {\n return atcbWcProParams\n .map((element) => {\n return element.toLowerCase();\n })\n .concat(observeAdditionally);\n }\n return atcbWcParams\n .map((element) => {\n return element.toLowerCase();\n })\n .concat(observeAdditionally);\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (!this.state.ready) {\n return;\n }\n if (this.debug && this.state.initialized) {\n console.log(`${name}'s value has been changed from ${oldValue} to ${newValue}`);\n }\n if (!this.updatePending) {\n this.updatePending = true;\n setTimeout(() => this.updateComponent(), 0);\n }\n }\n async updateComponent() {\n if (!this.updatePending) return;\n this.data = {};\n this.shadowRoot.querySelector('.atcb-initialized').remove();\n const elem = document.createElement('template');\n elem.innerHTML = template;\n this.shadowRoot.append(elem.content.cloneNode(true));\n try {\n if (this.hasAttribute('proKey') && this.getAttribute('proKey') !== '') {\n this.data = await atcb_get_pro_data(this.getAttribute('proKey'), this);\n if (this.data.proKey) this.proKey = this.data.proKey;\n } else if (this.hasAttribute('prokey') && this.getAttribute('prokey') !== '') {\n this.data = await atcb_get_pro_data(this.getAttribute('prokey'), this);\n if (this.data.proKey) this.proKey = this.data.proKey;\n } else {\n this.data = await atcb_process_inline_data(this, this.debug);\n }\n } catch (e) {\n if (this.debug) {\n console.error(e);\n atcb_render_debug_msg(this.shadowRoot, e);\n }\n this.updatePending = false;\n return;\n }\n atcb_cleanup(this.shadowRoot, this.identifier);\n await this.initButton();\n this.updatePending = false;\n }\n async initButton() {\n if (!this.state.initialized) {\n atcbBtnCount = atcbBtnCount + 1;\n }\n if (this.identifier && this.identifier !== '') {\n this.data.identifier = this.identifier;\n } else {\n if (this.data.identifier && this.data.identifier !== '') {\n if (!/^[\\w-]+$/.test(this.data.identifier)) {\n this.data.identifier = '';\n if (this.debug) {\n let prefix = 'Add to Calendar Button';\n if (this.data.rsvp && Object.keys(this.data.rsvp).length > 0) {\n prefix = 'RSVP';\n }\n console.warn(prefix + ' generation: identifier invalid - using auto numbers instead');\n }\n } else {\n this.data.identifier = 'atcb-btn-' + this.data.identifier;\n }\n }\n if (this.data.identifier == null || this.data.identifier == '') {\n this.data.identifier = 'atcb-btn-' + atcbBtnCount;\n }\n this.identifier = this.data.identifier;\n }\n this.setAttribute('atcb-button-id', this.data.identifier);\n try {\n this.setAttribute('style', 'visibility:visible;opacity:1;position:relative;outline:none !important;');\n await atcb_build_button(this.shadowRoot, this.data);\n return true;\n } catch (e) {\n if (this.debug) {\n console.error(e.message ? e.message : e);\n atcb_render_debug_msg(this.shadowRoot, e);\n }\n return false;\n }\n }\n }\n if (!customElements.get('add-to-calendar-button')) {\n customElements.define('add-to-calendar-button', AddToCalendarButton);\n }\n}\nasync function atcb_process_inline_data(el, debug = false) {\n let data;\n try {\n data = atcb_read_attributes(el);\n await atcb_check_required(data);\n } catch {\n const slotInput = el.innerHTML.trim();\n if (!slotInput) {\n throw new Error('Add to Calendar Button generation failed: No data provided.');\n }\n try {\n const atcbJsonInput = JSON.parse(atcb_secure_content(slotInput.replace(/(\\r\\n|\\n|\\r)/g, ''), false));\n await atcb_check_required(atcbJsonInput);\n data = atcbJsonInput;\n } catch (jsonError) {\n if (debug) {\n console.error(jsonError);\n }\n throw new Error('Add to Calendar Button generation failed: no data provided or missing required fields - see console logs for details');\n }\n }\n return data;\n}\nfunction atcb_read_attributes(el, params = atcbWcParams) {\n let data = {};\n for (let i = 0; i < params.length; i++) {\n let attr = params[`${i}`];\n if (el.hasAttribute(`${attr}`)) {\n let inputVal = atcb_secure_content(el.getAttribute(`${attr}`).replace(/(\\\\r\\\\n|\\\\n|\\\\r)/g, ''), false);\n let val;\n if (atcbWcBooleanParams.includes(attr)) {\n val = !inputVal || inputVal === '' || inputVal.toLowerCase() === 'true' ? true : false;\n } else if (atcbWcObjectParams.includes(attr)) {\n val = JSON.parse(inputVal);\n } else if (atcbWcObjectArrayParams.includes(attr)) {\n const cleanedInput = (function () {\n if (inputVal.substring(0, 1) != '[') {\n return '[' + inputVal + ']';\n }\n return inputVal;\n })();\n val = JSON.parse(cleanedInput);\n } else if (atcbWcArrayParams.includes(attr)) {\n const cleanedInput = (function () {\n let newVal = inputVal;\n if (inputVal.includes('\"') || inputVal.includes(\"'\")) {\n if (inputVal.includes('[')) {\n newVal = inputVal.substring(2, inputVal.length - 2);\n } else {\n newVal = inputVal.substring(1, inputVal.length - 1);\n }\n }\n if (!inputVal.includes('|')) {\n newVal = newVal.replace(/\\s/g, '');\n }\n return newVal;\n })();\n if (cleanedInput.includes(\"','\")) {\n val = cleanedInput.split(\"','\");\n } else {\n val = cleanedInput.split('\",\"');\n }\n } else if (atcbWcNumberParams.includes(attr)) {\n val = parseInt(inputVal);\n } else {\n val = inputVal;\n }\n if ((typeof val === 'object' && Object.keys(val).length === 0) || (Array.isArray(val) && (val.length === 0 || (val.length === 1 && val[0] === '')))) {\n continue;\n }\n data[`${attr}`] = val;\n }\n }\n return data;\n}\nasync function atcb_build_button(host, data) {\n try {\n host.host.classList.add('add-to-calendar');\n data = await atcb_decorate_data(data);\n await atcb_validate(data);\n const rootObj = host.querySelector('.atcb-initialized');\n atcb_set_light_mode(host, data);\n rootObj.setAttribute('lang', data.language);\n atcb_load_css(host, rootObj, data);\n atcb_setup_state_management(data);\n atcb_set_global_event_listener(host, data);\n atcb_init_log(data.proKey, data.debug);\n if (!data.hidden) {\n if (typeof atcb_generate_rsvp_form === 'function' && data.rsvp && Object.keys(data.rsvp).length > 0) {\n if (!data.inlineRsvp) {\n await atcb_generate_rsvp_button(host, data);\n } else {\n await atcb_generate_rsvp_form(host, data, rootObj);\n }\n } else {\n atcb_generate_button(host, rootObj, data);\n }\n if (!data.hideRichData && !data.subscribe && data.name && data.dates[0].location && data.dates[0].startDate) {\n atcb_generate_rich_data(data, host.host);\n }\n }\n atcb_log_event('initialization', data.identifier, data.identifier);\n if (!data.proKey && data.hideBranding && !document.getElementById('atcb-reference')) {\n atcb_create_atcbl(document.body, false, false, true);\n }\n return true;\n } catch (e) {\n throw new Error(e.message);\n }\n}\nfunction atcb_cleanup(host, identifier) {\n atcb_close(host);\n atcb_unset_global_event_listener(identifier);\n const schemaEl = document.getElementById('atcb-schema-' + identifier);\n if (schemaEl) {\n schemaEl.remove();\n }\n Array.from(host.querySelectorAll('.atcb-debug-error-msg'))\n .concat(Array.from(host.querySelectorAll('style')))\n .concat(Array.from(host.querySelectorAll('link')))\n .concat(Array.from(host.querySelectorAll('.atcb-placeholder')))\n .concat(Array.from(host.querySelectorAll('.atcb-button-wrapper')))\n .forEach((el) => el.remove());\n delete atcbStates[`${identifier}`];\n}\nfunction atcb_set_light_mode(shadowRoot, data) {\n shadowRoot.host.classList.remove('atcb-dark', 'atcb-light', 'atcb-bodyScheme');\n const hostLightMode = (function () {\n if (data.lightMode == 'bodyScheme') {\n if (\n document.body.classList.contains('atcb-dark') ||\n document.documentElement.classList.contains('atcb-dark') ||\n document.body.classList.contains('atcp-dark') ||\n document.documentElement.classList.contains('atcp-dark') ||\n document.body.classList.contains('dark') ||\n document.documentElement.classList.contains('dark')\n ) {\n return 'dark';\n } else {\n return 'light';\n }\n }\n return data.lightMode;\n })();\n shadowRoot.host.classList.add('atcb-' + hostLightMode);\n}\nfunction atcb_csp_nonce(host) {\n const cspnonceRegex = /[`'\"()[\\]{}<>\\s]/;\n if (!host.host.hasAttribute('cspnonce')) {\n return null;\n }\n if (cspnonceRegex.test(host.host.getAttribute('cspnonce'))) {\n throw new Error('cspnonce input contains forbidden characters.');\n }\n return host.host.getAttribute('cspnonce');\n}\nasync function atcb_load_css(host, rootObj = null, data) {\n const nonceVal = atcb_csp_nonce(host);\n if (!document.getElementById('atcb-global-style')) {\n const cssGlobalContent = document.createElement('style');\n cssGlobalContent.id = 'atcb-global-style';\n const scrollBarWidth = window.innerWidth - document.documentElement.clientWidth;\n cssGlobalContent.innerText = '.atcb-modal-no-scroll{overflow-y:hidden !important;-webkit-overflow-scrolling:touch;} body.atcb-modal-no-scroll{padding-right:' + scrollBarWidth + 'px;}.atcb-attribution{display:none;}';\n if (nonceVal) {\n cssGlobalContent.setAttribute('nonce', nonceVal);\n }\n document.head.append(cssGlobalContent);\n }\n const generalCssContent = document.createElement('style');\n const initWidth = data.inlineRsvp && data.rsvp && Object.keys(data.rsvp).length > 0 ? '100%' : 'fit-content';\n generalCssContent.innerText = `.atcb-initialized { display: block; position: relative; width: ${initWidth}; }.atcb-initialized.atcb-inline { display: inline-block; }.atcb-initialized.atcb-buttons-list { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--buttonslist-gap); }.atcb-hidden { display: none; }`;\n if (nonceVal) {\n generalCssContent.setAttribute('nonce', nonceVal);\n }\n host.prepend(generalCssContent);\n const overrideDefaultCss = (function () {\n if (data.styleLight) {\n return ':host{' + atcb_secure_content(data.styleLight.replace(/(\\\\r\\\\n|\\\\n|\\\\r)/g, ''), false) + '}';\n }\n return '';\n })();\n const overrideDarkCss = (function () {\n if (data.styleDark) {\n return ':host(.atcb-dark){' + atcb_secure_content(data.styleDark.replace(/(\\\\r\\\\n|\\\\n|\\\\r)/g, ''), false) + '}';\n }\n return '';\n })();\n if (data.customCss && data.customCss !== '') {\n const cssFile = document.createElement('link');\n cssFile.setAttribute('rel', 'stylesheet');\n cssFile.setAttribute('type', 'text/css');\n cssFile.setAttribute('href', data.customCss);\n if (nonceVal) {\n cssFile.setAttribute('nonce', nonceVal);\n }\n if (!rootObj) {\n await loadExternalCssAsynch(cssFile, host, null, nonceVal, null, false, false, overrideDefaultCss + overrideDarkCss);\n } else {\n const placeholder = document.createElement('div');\n placeholder.classList.add('atcb-placeholder');\n host.prepend(placeholder);\n const placeholderCssContent = document.createElement('style');\n placeholderCssContent.innerText = '.atcb-placeholder { background-color: #777; border-radius: 200px; height: 40px; opacity: .3; width: 150px; }';\n if (nonceVal) {\n placeholderCssContent.setAttribute('nonce', nonceVal);\n }\n host.prepend(placeholderCssContent);\n loadExternalCssAsynch(cssFile, host, rootObj, nonceVal, placeholder, data.inline, data.buttonsList, overrideDefaultCss + overrideDarkCss);\n }\n return;\n }\n if (data.buttonStyle !== 'none' && atcbCssTemplate[`${data.buttonStyle}`]) {\n const cssContent = document.createElement('style');\n if (nonceVal) {\n cssContent.setAttribute('nonce', nonceVal);\n }\n cssContent.innerText = atcbCssTemplate[`${data.buttonStyle}`] + overrideDefaultCss + overrideDarkCss;\n host.prepend(cssContent);\n }\n if (rootObj) {\n if (data.inline) {\n rootObj.style.display = 'inline-block';\n rootObj.classList.add('atcb-inline');\n } else {\n if (data.buttonsList) {\n rootObj.classList.add('atcb-buttons-list');\n }\n }\n rootObj.classList.remove('atcb-hidden');\n }\n}\nasync function loadExternalCssAsynch(cssFile, host, rootObj = null, nonceVal = null, placeholder = null, inline = false, buttonsList = false, overrideCss = '') {\n if (overrideCss !== '') {\n const cssContent = document.createElement('style');\n cssContent.innerText = overrideCss;\n if (nonceVal) {\n cssContent.setAttribute('nonce', nonceVal);\n }\n host.prepend(cssContent);\n }\n try {\n host.prepend(cssFile);\n await new Promise((resolve) => {\n cssFile.onload = resolve;\n });\n if (rootObj) {\n if (placeholder) {\n placeholder.remove();\n }\n if (inline) {\n rootObj.style.display = 'inline-block';\n rootObj.classList.add('atcb-inline');\n } else {\n if (buttonsList) {\n rootObj.classList.add('atcb-buttons-list');\n }\n }\n rootObj.classList.remove('atcb-hidden');\n }\n } catch (e) {\n console.log(e);\n }\n}\nfunction atcb_render_debug_msg(host, error) {\n if (host.querySelector('.atcb-debug-error-msg')) return;\n const nonceVal = atcb_csp_nonce(host);\n const errorBanner = document.createElement('div');\n errorBanner.classList.add('atcb-debug-error-msg');\n const cssContent = document.createElement('style');\n cssContent.innerText = '.atcb-debug-error-msg { color: #bf2e2e; font-size: 12px; font-weight: bold; padding: 12px 15px; border: 2px solid #bf2e2e; max-width: 180px; border-radius: 13px; }';\n if (nonceVal) {\n cssContent.setAttribute('nonce', nonceVal);\n }\n host.prepend(cssContent);\n errorBanner.textContent = error;\n host.append(errorBanner);\n}\nasync function atcb_action(inputData, triggerElement, keyboardTrigger = false) {\n if (!atcbIsBrowser()) {\n return;\n }\n let data;\n try {\n data = await (async function () {\n const cleanedInput = atcb_secure_content(inputData);\n if (cleanedInput.prokey && cleanedInput.prokey !== '') {\n cleanedInput.proKey = cleanedInput.prokey;\n }\n if (cleanedInput.proKey && cleanedInput.proKey !== '') {\n try {\n const proData = await atcb_get_pro_data(cleanedInput.proKey, null, cleanedInput);\n return proData;\n } catch (e) {\n throw new Error(e.message);\n }\n } else {\n return cleanedInput;\n }\n })();\n } catch (e) {\n console.error(e);\n return;\n }\n data.debug = data.debug === 'true';\n try {\n await atcb_check_required(data);\n } catch (e) {\n if (data.debug) {\n console.error(e);\n }\n throw new Error('Add to Calendar Button generation failed: no data provided or missing required fields - see console logs for details');\n }\n data = await atcb_decorate_data(data);\n let root = document.body;\n data.trigger = 'click';\n if (triggerElement) {\n root = triggerElement;\n if (triggerElement.id && triggerElement.id !== '') {\n data.identifier = triggerElement.id;\n } else {\n if (data.identifier && data.identifier != '' && /^[\\w-]+$/.test(data.identifier)) {\n data.identifier = 'atcb-btn-' + data.identifier;\n } else {\n data.identifier = 'atcb-btn-custom';\n }\n triggerElement.id = data.identifier;\n }\n if (data.listStyle === 'dropdown' || data.listStyle === 'dropdown-static' || data.listStyle === 'dropup-static') {\n data.listStyle = 'modal';\n }\n } else {\n data.identifier = 'atcb-btn-custom';\n data.listStyle = 'modal';\n }\n try {\n await atcb_validate(data);\n } catch (e) {\n console.error(e);\n return false;\n }\n const oneOption = (function () {\n if (data.options.length === 1) {\n return true;\n }\n return false;\n })();\n const potentialExistingHost = document.getElementById('atcb-customTrigger-' + data.identifier + '-host');\n if (potentialExistingHost) {\n atcb_close(potentialExistingHost.shadowRoot, false);\n if (atcbStates[`${atcbStates['active']}`]) {\n delete atcbStates[`${atcbStates['active']}`];\n }\n potentialExistingHost.remove();\n }\n atcb_log_event('initialization', data.identifier, data.identifier);\n if (!data.blockInteraction && !data.hidden) {\n const host = document.createElement('div');\n host.id = 'atcb-customTrigger-' + data.identifier + '-host';\n if (root === document.body) {\n document.body.append(host);\n } else {\n root.after(host);\n }\n if (triggerElement) {\n const btnDim = triggerElement.getBoundingClientRect();\n host.style.position = 'relative';\n host.style.left = -btnDim.width + 'px';\n host.style.top = btnDim.height + 'px';\n }\n host.setAttribute('atcb-button-id', data.identifier);\n host.attachShadow({ mode: 'open', delegateFocus: true });\n const elem = document.createElement('template');\n elem.innerHTML = template;\n host.shadowRoot.append(elem.content.cloneNode(true));\n const rootObj = host.shadowRoot.querySelector('.atcb-initialized');\n atcb_setup_state_management(data);\n atcb_set_light_mode(host.shadowRoot, data);\n host.shadowRoot.querySelector('.atcb-initialized').setAttribute('lang', data.language);\n atcb_load_css(host.shadowRoot, rootObj, data);\n atcb_set_global_event_listener(host.shadowRoot, data);\n if (typeof atcb_generate_rsvp_form === 'function' && data.rsvp && Object.keys(data.rsvp).length > 0) {\n atcb_generate_rsvp_form(host.shadowRoot, data, triggerElement, keyboardTrigger);\n } else {\n if (oneOption) {\n atcb_generate_links(host.shadowRoot, data.options[0], data, 'all', keyboardTrigger);\n atcb_log_event('openSingletonLink', data.identifier, data.identifier);\n } else {\n atcb_toggle(host.shadowRoot, 'open', data, triggerElement, keyboardTrigger);\n }\n }\n }\n atcb_init_log(data.proKey, data.debug);\n if (data.debug) {\n console.log('Add to Calendar Button \"' + data.identifier + '\" triggered');\n }\n return data.identifier;\n}\nfunction atcb_setup_state_management(data) {\n const singleDates = [];\n for (let i = 0; i < data.options.length; i++) {\n singleDates[data.options[`${i}`]] = [];\n for (let id = 1; id <= data.dates.length; id++) {\n if (data.dates[id - 1].status.toLowerCase() === 'cancelled') {\n singleDates[data.options[`${i}`]].push(1);\n } else {\n singleDates[data.options[`${i}`]].push(0);\n }\n }\n }\n atcbStates[data.identifier] = singleDates;\n}\nfunction atcb_init_log(pro = '', debug = false) {\n if (!atcbInitialGlobalInit) {\n const versionOutput = (function () {\n if (debug) {\n return ' (version ' + atcbVersion + ')';\n }\n return '';\n })();\n if (pro != '') {\n console.log('Add to Calendar PRO script initialized' + versionOutput + ' | https://add-to-calendar-pro.com');\n } else {\n console.log('%c\\nAdd to Calendar Button script initialized' + versionOutput + '\\n' + 'see https://add-to-calendar-button.com for details.\\n', 'font-weight: bold;');\n console.log('✨ %cPRO version available at https://add-to-calendar-pro.com ← check it out!', 'font-weight: bold; line-height: 60px;');\n }\n atcbInitialGlobalInit = true;\n }\n}\nasync function atcb_get_pro_data(licenseKey, el = null, directData = {}) {\n /*!\n * @preserve\n * PER LICENSE AGREEMENT, YOU ARE NOT ALLOWED TO REMOVE OR CHANGE THIS FUNCTION!\n */\n if (licenseKey && licenseKey !== '') {\n try {\n const proOverride = el ? el.proOverride : directData.proOverride;\n const dataOverrides = el ? atcb_read_attributes(el, proOverride ? atcbWcParams : atcbWcProParams) : directData;\n const response = await fetch((dataOverrides.dev ? 'https://event-dev.caldn.net/' : 'https://event.caldn.net/') + licenseKey + '/config.json');\n if (response.ok) {\n const data = await response.json();\n if (proOverride) {\n atcbWcParams.forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(dataOverrides, key) && ['hideBranding', 'hidebranding', 'rsvp', 'ty'].indexOf(key) === -1) {\n data[`${key}`] = dataOverrides[`${key}`];\n }\n });\n } else {\n atcbWcProParams.forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(dataOverrides, key)) {\n data[`${key}`] = dataOverrides[`${key}`];\n }\n });\n }\n if (!data.name || data.name === '') {\n throw new Error('Not possible to read proKey config from server...');\n }\n data.proKey = licenseKey;\n data.identifier = licenseKey;\n return data;\n }\n throw new Error('Not possible to read proKey config from server...');\n } catch {\n throw new Error('Add to Calendar Button proKey invalid or server not responding!');\n }\n }\n return {};\n}\nfunction atcb_set_global_event_listener(host, data) {\n if (!atcbIsBrowser()) {\n return;\n }\n if (data.lightMode == 'bodyScheme') {\n lightModeMutationObserver[data.identifier] = new MutationObserver(function (mutationsList) {\n mutationsList.forEach((mutation) => {\n if (mutation.attributeName === 'class') {\n atcb_set_light_mode(host, data);\n }\n });\n });\n lightModeMutationObserver[data.identifier].observe(document.documentElement, { attributes: true });\n lightModeMutationObserver[data.identifier].observe(document.body, { attributes: true });\n }\n if (!atcbInitialGlobalInit) {\n document.addEventListener('keyup', atcb_global_listener_keyup);\n document.addEventListener('keydown', atcb_global_listener_keydown);\n window.addEventListener('resize', atcb_global_listener_resize);\n }\n}\nfunction atcb_global_listener_keyup(event) {\n const host = (function () {\n const root = document.querySelector('[atcb-button-id=\"' + atcbStates['active'] + '\"]');\n if (root) {\n return root.shadowRoot;\n }\n return null;\n })();\n if (host && event.key === 'Escape') {\n atcb_log_event('closeList', 'Ecs Hit', atcbStates['active']);\n atcb_toggle(host, 'close', '', '', true);\n }\n}\nfunction atcb_global_listener_keydown(event) {\n const host = (function () {\n const root = document.querySelector('[atcb-button-id=\"' + atcbStates['active'] + '\"]');\n const rootModal = document.getElementById(atcbStates['active'] + '-modal-host');\n if (rootModal) {\n return rootModal.shadowRoot;\n }\n if (root) {\n return root.shadowRoot;\n }\n return null;\n })();\n if (host && host.querySelector('.atcb-list') && (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Tab')) {\n event.preventDefault();\n let targetFocus = 0;\n let currFocusOption = host.activeElement;\n const optionListCount = host.querySelectorAll('.atcb-list-item').length;\n if (currFocusOption && currFocusOption.classList.contains('atcb-list-item')) {\n if (event.key === 'ArrowDown' && currFocusOption.dataset.optionNumber < optionListCount) {\n targetFocus = parseInt(currFocusOption.dataset.optionNumber) + 1;\n } else if (event.key === 'Tab') {\n if (currFocusOption.dataset.optionNumber < optionListCount) {\n targetFocus = parseInt(currFocusOption.dataset.optionNumber) + 1;\n } else {\n targetFocus = 1;\n }\n } else if (event.key === 'ArrowUp' && currFocusOption.dataset.optionNumber >= 1) {\n targetFocus = parseInt(currFocusOption.dataset.optionNumber) - 1;\n }\n if (targetFocus > 0) {\n host.querySelector('.atcb-list-item[data-option-number=\"' + targetFocus + '\"]').focus();\n }\n } else {\n switch (event.key) {\n default:\n host.querySelector('.atcb-list-item[data-option-number=\"1\"]').focus();\n break;\n case 'ArrowUp':\n host.querySelector('.atcb-list-item[data-option-number=\"' + optionListCount + '\"]').focus();\n break;\n }\n }\n }\n}\nfunction atcb_global_listener_resize() {\n const host = (function () {\n const root = document.querySelector('[atcb-button-id=\"' + atcbStates['active'] + '\"]');\n const rootModal = document.getElementById(atcbStates['active'] + '-modal-host');\n if (rootModal) {\n return rootModal.shadowRoot;\n }\n if (root) {\n return root.shadowRoot;\n }\n return null;\n })();\n if (host) {\n const activeOverlay = host.querySelector('#atcb-bgoverlay');\n if (activeOverlay) {\n atcb_set_fullsize(activeOverlay);\n atcb_manage_body_scroll(host);\n }\n }\n}\nfunction atcb_unset_global_event_listener(identifier) {\n if (typeof lightModeMutationObserver[`${identifier}`] !== 'undefined') {\n lightModeMutationObserver[`${identifier}`].disconnect();\n }\n}\n\nexport { atcb_action, i18nStrings, atcbCssTemplate as cssStyles, atcb_generate_ty, atcb_generate_timestring };","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","var Scope = /* @__PURE__ */ ((Scope2) => (Scope2[Scope2.TYPE = 3] = \"TYPE\", Scope2[Scope2.LEVEL = 12] = \"LEVEL\", Scope2[Scope2.ATTRIBUTE = 13] = \"ATTRIBUTE\", Scope2[Scope2.BLOT = 14] = \"BLOT\", Scope2[Scope2.INLINE = 7] = \"INLINE\", Scope2[Scope2.BLOCK = 11] = \"BLOCK\", Scope2[Scope2.BLOCK_BLOT = 10] = \"BLOCK_BLOT\", Scope2[Scope2.INLINE_BLOT = 6] = \"INLINE_BLOT\", Scope2[Scope2.BLOCK_ATTRIBUTE = 9] = \"BLOCK_ATTRIBUTE\", Scope2[Scope2.INLINE_ATTRIBUTE = 5] = \"INLINE_ATTRIBUTE\", Scope2[Scope2.ANY = 15] = \"ANY\", Scope2))(Scope || {});\nclass Attributor {\n constructor(attrName, keyName, options = {}) {\n this.attrName = attrName, this.keyName = keyName;\n const attributeBit = Scope.TYPE & Scope.ATTRIBUTE;\n this.scope = options.scope != null ? (\n // Ignore type bits, force attribute bit\n options.scope & Scope.LEVEL | attributeBit\n ) : Scope.ATTRIBUTE, options.whitelist != null && (this.whitelist = options.whitelist);\n }\n static keys(node) {\n return Array.from(node.attributes).map((item) => item.name);\n }\n add(node, value) {\n return this.canAdd(node, value) ? (node.setAttribute(this.keyName, value), !0) : !1;\n }\n canAdd(_node, value) {\n return this.whitelist == null ? !0 : typeof value == \"string\" ? this.whitelist.indexOf(value.replace(/[\"']/g, \"\")) > -1 : this.whitelist.indexOf(value) > -1;\n }\n remove(node) {\n node.removeAttribute(this.keyName);\n }\n value(node) {\n const value = node.getAttribute(this.keyName);\n return this.canAdd(node, value) && value ? value : \"\";\n }\n}\nclass ParchmentError extends Error {\n constructor(message) {\n message = \"[Parchment] \" + message, super(message), this.message = message, this.name = this.constructor.name;\n }\n}\nconst _Registry = class _Registry {\n constructor() {\n this.attributes = {}, this.classes = {}, this.tags = {}, this.types = {};\n }\n static find(node, bubble = !1) {\n if (node == null)\n return null;\n if (this.blots.has(node))\n return this.blots.get(node) || null;\n if (bubble) {\n let parentNode = null;\n try {\n parentNode = node.parentNode;\n } catch {\n return null;\n }\n return this.find(parentNode, bubble);\n }\n return null;\n }\n create(scroll, input, value) {\n const match2 = this.query(input);\n if (match2 == null)\n throw new ParchmentError(`Unable to create ${input} blot`);\n const blotClass = match2, node = (\n // @ts-expect-error Fix me later\n input instanceof Node || input.nodeType === Node.TEXT_NODE ? input : blotClass.create(value)\n ), blot = new blotClass(scroll, node, value);\n return _Registry.blots.set(blot.domNode, blot), blot;\n }\n find(node, bubble = !1) {\n return _Registry.find(node, bubble);\n }\n query(query, scope = Scope.ANY) {\n let match2;\n return typeof query == \"string\" ? match2 = this.types[query] || this.attributes[query] : query instanceof Text || query.nodeType === Node.TEXT_NODE ? match2 = this.types.text : typeof query == \"number\" ? query & Scope.LEVEL & Scope.BLOCK ? match2 = this.types.block : query & Scope.LEVEL & Scope.INLINE && (match2 = this.types.inline) : query instanceof Element && ((query.getAttribute(\"class\") || \"\").split(/\\s+/).some((name) => (match2 = this.classes[name], !!match2)), match2 = match2 || this.tags[query.tagName]), match2 == null ? null : \"scope\" in match2 && scope & Scope.LEVEL & match2.scope && scope & Scope.TYPE & match2.scope ? match2 : null;\n }\n register(...definitions) {\n return definitions.map((definition) => {\n const isBlot = \"blotName\" in definition, isAttr = \"attrName\" in definition;\n if (!isBlot && !isAttr)\n throw new ParchmentError(\"Invalid definition\");\n if (isBlot && definition.blotName === \"abstract\")\n throw new ParchmentError(\"Cannot register abstract class\");\n const key = isBlot ? definition.blotName : isAttr ? definition.attrName : void 0;\n return this.types[key] = definition, isAttr ? typeof definition.keyName == \"string\" && (this.attributes[definition.keyName] = definition) : isBlot && (definition.className && (this.classes[definition.className] = definition), definition.tagName && (Array.isArray(definition.tagName) ? definition.tagName = definition.tagName.map((tagName) => tagName.toUpperCase()) : definition.tagName = definition.tagName.toUpperCase(), (Array.isArray(definition.tagName) ? definition.tagName : [definition.tagName]).forEach((tag) => {\n (this.tags[tag] == null || definition.className == null) && (this.tags[tag] = definition);\n }))), definition;\n });\n }\n};\n_Registry.blots = /* @__PURE__ */ new WeakMap();\nlet Registry = _Registry;\nfunction match(node, prefix) {\n return (node.getAttribute(\"class\") || \"\").split(/\\s+/).filter((name) => name.indexOf(`${prefix}-`) === 0);\n}\nclass ClassAttributor extends Attributor {\n static keys(node) {\n return (node.getAttribute(\"class\") || \"\").split(/\\s+/).map((name) => name.split(\"-\").slice(0, -1).join(\"-\"));\n }\n add(node, value) {\n return this.canAdd(node, value) ? (this.remove(node), node.classList.add(`${this.keyName}-${value}`), !0) : !1;\n }\n remove(node) {\n match(node, this.keyName).forEach((name) => {\n node.classList.remove(name);\n }), node.classList.length === 0 && node.removeAttribute(\"class\");\n }\n value(node) {\n const value = (match(node, this.keyName)[0] || \"\").slice(this.keyName.length + 1);\n return this.canAdd(node, value) ? value : \"\";\n }\n}\nconst ClassAttributor$1 = ClassAttributor;\nfunction camelize(name) {\n const parts = name.split(\"-\"), rest = parts.slice(1).map((part) => part[0].toUpperCase() + part.slice(1)).join(\"\");\n return parts[0] + rest;\n}\nclass StyleAttributor extends Attributor {\n static keys(node) {\n return (node.getAttribute(\"style\") || \"\").split(\";\").map((value) => value.split(\":\")[0].trim());\n }\n add(node, value) {\n return this.canAdd(node, value) ? (node.style[camelize(this.keyName)] = value, !0) : !1;\n }\n remove(node) {\n node.style[camelize(this.keyName)] = \"\", node.getAttribute(\"style\") || node.removeAttribute(\"style\");\n }\n value(node) {\n const value = node.style[camelize(this.keyName)];\n return this.canAdd(node, value) ? value : \"\";\n }\n}\nconst StyleAttributor$1 = StyleAttributor;\nclass AttributorStore {\n constructor(domNode) {\n this.attributes = {}, this.domNode = domNode, this.build();\n }\n attribute(attribute, value) {\n value ? attribute.add(this.domNode, value) && (attribute.value(this.domNode) != null ? this.attributes[attribute.attrName] = attribute : delete this.attributes[attribute.attrName]) : (attribute.remove(this.domNode), delete this.attributes[attribute.attrName]);\n }\n build() {\n this.attributes = {};\n const blot = Registry.find(this.domNode);\n if (blot == null)\n return;\n const attributes = Attributor.keys(this.domNode), classes = ClassAttributor$1.keys(this.domNode), styles = StyleAttributor$1.keys(this.domNode);\n attributes.concat(classes).concat(styles).forEach((name) => {\n const attr = blot.scroll.query(name, Scope.ATTRIBUTE);\n attr instanceof Attributor && (this.attributes[attr.attrName] = attr);\n });\n }\n copy(target) {\n Object.keys(this.attributes).forEach((key) => {\n const value = this.attributes[key].value(this.domNode);\n target.format(key, value);\n });\n }\n move(target) {\n this.copy(target), Object.keys(this.attributes).forEach((key) => {\n this.attributes[key].remove(this.domNode);\n }), this.attributes = {};\n }\n values() {\n return Object.keys(this.attributes).reduce(\n (attributes, name) => (attributes[name] = this.attributes[name].value(this.domNode), attributes),\n {}\n );\n }\n}\nconst AttributorStore$1 = AttributorStore, _ShadowBlot = class _ShadowBlot {\n constructor(scroll, domNode) {\n this.scroll = scroll, this.domNode = domNode, Registry.blots.set(domNode, this), this.prev = null, this.next = null;\n }\n static create(rawValue) {\n if (this.tagName == null)\n throw new ParchmentError(\"Blot definition missing tagName\");\n let node, value;\n return Array.isArray(this.tagName) ? (typeof rawValue == \"string\" ? (value = rawValue.toUpperCase(), parseInt(value, 10).toString() === value && (value = parseInt(value, 10))) : typeof rawValue == \"number\" && (value = rawValue), typeof value == \"number\" ? node = document.createElement(this.tagName[value - 1]) : value && this.tagName.indexOf(value) > -1 ? node = document.createElement(value) : node = document.createElement(this.tagName[0])) : node = document.createElement(this.tagName), this.className && node.classList.add(this.className), node;\n }\n // Hack for accessing inherited static methods\n get statics() {\n return this.constructor;\n }\n attach() {\n }\n clone() {\n const domNode = this.domNode.cloneNode(!1);\n return this.scroll.create(domNode);\n }\n detach() {\n this.parent != null && this.parent.removeChild(this), Registry.blots.delete(this.domNode);\n }\n deleteAt(index, length) {\n this.isolate(index, length).remove();\n }\n formatAt(index, length, name, value) {\n const blot = this.isolate(index, length);\n if (this.scroll.query(name, Scope.BLOT) != null && value)\n blot.wrap(name, value);\n else if (this.scroll.query(name, Scope.ATTRIBUTE) != null) {\n const parent = this.scroll.create(this.statics.scope);\n blot.wrap(parent), parent.format(name, value);\n }\n }\n insertAt(index, value, def) {\n const blot = def == null ? this.scroll.create(\"text\", value) : this.scroll.create(value, def), ref = this.split(index);\n this.parent.insertBefore(blot, ref || void 0);\n }\n isolate(index, length) {\n const target = this.split(index);\n if (target == null)\n throw new Error(\"Attempt to isolate at end\");\n return target.split(length), target;\n }\n length() {\n return 1;\n }\n offset(root = this.parent) {\n return this.parent == null || this === root ? 0 : this.parent.children.offset(this) + this.parent.offset(root);\n }\n optimize(_context) {\n this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer) && this.wrap(this.statics.requiredContainer.blotName);\n }\n remove() {\n this.domNode.parentNode != null && this.domNode.parentNode.removeChild(this.domNode), this.detach();\n }\n replaceWith(name, value) {\n const replacement = typeof name == \"string\" ? this.scroll.create(name, value) : name;\n return this.parent != null && (this.parent.insertBefore(replacement, this.next || void 0), this.remove()), replacement;\n }\n split(index, _force) {\n return index === 0 ? this : this.next;\n }\n update(_mutations, _context) {\n }\n wrap(name, value) {\n const wrapper = typeof name == \"string\" ? this.scroll.create(name, value) : name;\n if (this.parent != null && this.parent.insertBefore(wrapper, this.next || void 0), typeof wrapper.appendChild != \"function\")\n throw new ParchmentError(`Cannot wrap ${name}`);\n return wrapper.appendChild(this), wrapper;\n }\n};\n_ShadowBlot.blotName = \"abstract\";\nlet ShadowBlot = _ShadowBlot;\nconst _LeafBlot = class _LeafBlot extends ShadowBlot {\n /**\n * Returns the value represented by domNode if it is this Blot's type\n * No checking that domNode can represent this Blot type is required so\n * applications needing it should check externally before calling.\n */\n static value(_domNode) {\n return !0;\n }\n /**\n * Given location represented by node and offset from DOM Selection Range,\n * return index to that location.\n */\n index(node, offset) {\n return this.domNode === node || this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY ? Math.min(offset, 1) : -1;\n }\n /**\n * Given index to location within blot, return node and offset representing\n * that location, consumable by DOM Selection Range\n */\n position(index, _inclusive) {\n let offset = Array.from(this.parent.domNode.childNodes).indexOf(this.domNode);\n return index > 0 && (offset += 1), [this.parent.domNode, offset];\n }\n /**\n * Return value represented by this blot\n * Should not change without interaction from API or\n * user change detectable by update()\n */\n value() {\n return {\n [this.statics.blotName]: this.statics.value(this.domNode) || !0\n };\n }\n};\n_LeafBlot.scope = Scope.INLINE_BLOT;\nlet LeafBlot = _LeafBlot;\nconst LeafBlot$1 = LeafBlot;\nclass LinkedList {\n constructor() {\n this.head = null, this.tail = null, this.length = 0;\n }\n append(...nodes) {\n if (this.insertBefore(nodes[0], null), nodes.length > 1) {\n const rest = nodes.slice(1);\n this.append(...rest);\n }\n }\n at(index) {\n const next = this.iterator();\n let cur = next();\n for (; cur && index > 0; )\n index -= 1, cur = next();\n return cur;\n }\n contains(node) {\n const next = this.iterator();\n let cur = next();\n for (; cur; ) {\n if (cur === node)\n return !0;\n cur = next();\n }\n return !1;\n }\n indexOf(node) {\n const next = this.iterator();\n let cur = next(), index = 0;\n for (; cur; ) {\n if (cur === node)\n return index;\n index += 1, cur = next();\n }\n return -1;\n }\n insertBefore(node, refNode) {\n node != null && (this.remove(node), node.next = refNode, refNode != null ? (node.prev = refNode.prev, refNode.prev != null && (refNode.prev.next = node), refNode.prev = node, refNode === this.head && (this.head = node)) : this.tail != null ? (this.tail.next = node, node.prev = this.tail, this.tail = node) : (node.prev = null, this.head = this.tail = node), this.length += 1);\n }\n offset(target) {\n let index = 0, cur = this.head;\n for (; cur != null; ) {\n if (cur === target)\n return index;\n index += cur.length(), cur = cur.next;\n }\n return -1;\n }\n remove(node) {\n this.contains(node) && (node.prev != null && (node.prev.next = node.next), node.next != null && (node.next.prev = node.prev), node === this.head && (this.head = node.next), node === this.tail && (this.tail = node.prev), this.length -= 1);\n }\n iterator(curNode = this.head) {\n return () => {\n const ret = curNode;\n return curNode != null && (curNode = curNode.next), ret;\n };\n }\n find(index, inclusive = !1) {\n const next = this.iterator();\n let cur = next();\n for (; cur; ) {\n const length = cur.length();\n if (index < length || inclusive && index === length && (cur.next == null || cur.next.length() !== 0))\n return [cur, index];\n index -= length, cur = next();\n }\n return [null, 0];\n }\n forEach(callback) {\n const next = this.iterator();\n let cur = next();\n for (; cur; )\n callback(cur), cur = next();\n }\n forEachAt(index, length, callback) {\n if (length <= 0)\n return;\n const [startNode, offset] = this.find(index);\n let curIndex = index - offset;\n const next = this.iterator(startNode);\n let cur = next();\n for (; cur && curIndex < index + length; ) {\n const curLength = cur.length();\n index > curIndex ? callback(\n cur,\n index - curIndex,\n Math.min(length, curIndex + curLength - index)\n ) : callback(cur, 0, Math.min(curLength, index + length - curIndex)), curIndex += curLength, cur = next();\n }\n }\n map(callback) {\n return this.reduce((memo, cur) => (memo.push(callback(cur)), memo), []);\n }\n reduce(callback, memo) {\n const next = this.iterator();\n let cur = next();\n for (; cur; )\n memo = callback(memo, cur), cur = next();\n return memo;\n }\n}\nfunction makeAttachedBlot(node, scroll) {\n const found = scroll.find(node);\n if (found)\n return found;\n try {\n return scroll.create(node);\n } catch {\n const blot = scroll.create(Scope.INLINE);\n return Array.from(node.childNodes).forEach((child) => {\n blot.domNode.appendChild(child);\n }), node.parentNode && node.parentNode.replaceChild(blot.domNode, node), blot.attach(), blot;\n }\n}\nconst _ParentBlot = class _ParentBlot extends ShadowBlot {\n constructor(scroll, domNode) {\n super(scroll, domNode), this.uiNode = null, this.build();\n }\n appendChild(other) {\n this.insertBefore(other);\n }\n attach() {\n super.attach(), this.children.forEach((child) => {\n child.attach();\n });\n }\n attachUI(node) {\n this.uiNode != null && this.uiNode.remove(), this.uiNode = node, _ParentBlot.uiClass && this.uiNode.classList.add(_ParentBlot.uiClass), this.uiNode.setAttribute(\"contenteditable\", \"false\"), this.domNode.insertBefore(this.uiNode, this.domNode.firstChild);\n }\n /**\n * Called during construction, should fill its own children LinkedList.\n */\n build() {\n this.children = new LinkedList(), Array.from(this.domNode.childNodes).filter((node) => node !== this.uiNode).reverse().forEach((node) => {\n try {\n const child = makeAttachedBlot(node, this.scroll);\n this.insertBefore(child, this.children.head || void 0);\n } catch (err) {\n if (err instanceof ParchmentError)\n return;\n throw err;\n }\n });\n }\n deleteAt(index, length) {\n if (index === 0 && length === this.length())\n return this.remove();\n this.children.forEachAt(index, length, (child, offset, childLength) => {\n child.deleteAt(offset, childLength);\n });\n }\n descendant(criteria, index = 0) {\n const [child, offset] = this.children.find(index);\n return criteria.blotName == null && criteria(child) || criteria.blotName != null && child instanceof criteria ? [child, offset] : child instanceof _ParentBlot ? child.descendant(criteria, offset) : [null, -1];\n }\n descendants(criteria, index = 0, length = Number.MAX_VALUE) {\n let descendants = [], lengthLeft = length;\n return this.children.forEachAt(\n index,\n length,\n (child, childIndex, childLength) => {\n (criteria.blotName == null && criteria(child) || criteria.blotName != null && child instanceof criteria) && descendants.push(child), child instanceof _ParentBlot && (descendants = descendants.concat(\n child.descendants(criteria, childIndex, lengthLeft)\n )), lengthLeft -= childLength;\n }\n ), descendants;\n }\n detach() {\n this.children.forEach((child) => {\n child.detach();\n }), super.detach();\n }\n enforceAllowedChildren() {\n let done = !1;\n this.children.forEach((child) => {\n done || this.statics.allowedChildren.some(\n (def) => child instanceof def\n ) || (child.statics.scope === Scope.BLOCK_BLOT ? (child.next != null && this.splitAfter(child), child.prev != null && this.splitAfter(child.prev), child.parent.unwrap(), done = !0) : child instanceof _ParentBlot ? child.unwrap() : child.remove());\n });\n }\n formatAt(index, length, name, value) {\n this.children.forEachAt(index, length, (child, offset, childLength) => {\n child.formatAt(offset, childLength, name, value);\n });\n }\n insertAt(index, value, def) {\n const [child, offset] = this.children.find(index);\n if (child)\n child.insertAt(offset, value, def);\n else {\n const blot = def == null ? this.scroll.create(\"text\", value) : this.scroll.create(value, def);\n this.appendChild(blot);\n }\n }\n insertBefore(childBlot, refBlot) {\n childBlot.parent != null && childBlot.parent.children.remove(childBlot);\n let refDomNode = null;\n this.children.insertBefore(childBlot, refBlot || null), childBlot.parent = this, refBlot != null && (refDomNode = refBlot.domNode), (this.domNode.parentNode !== childBlot.domNode || this.domNode.nextSibling !== refDomNode) && this.domNode.insertBefore(childBlot.domNode, refDomNode), childBlot.attach();\n }\n length() {\n return this.children.reduce((memo, child) => memo + child.length(), 0);\n }\n moveChildren(targetParent, refNode) {\n this.children.forEach((child) => {\n targetParent.insertBefore(child, refNode);\n });\n }\n optimize(context) {\n if (super.optimize(context), this.enforceAllowedChildren(), this.uiNode != null && this.uiNode !== this.domNode.firstChild && this.domNode.insertBefore(this.uiNode, this.domNode.firstChild), this.children.length === 0)\n if (this.statics.defaultChild != null) {\n const child = this.scroll.create(this.statics.defaultChild.blotName);\n this.appendChild(child);\n } else\n this.remove();\n }\n path(index, inclusive = !1) {\n const [child, offset] = this.children.find(index, inclusive), position = [[this, index]];\n return child instanceof _ParentBlot ? position.concat(child.path(offset, inclusive)) : (child != null && position.push([child, offset]), position);\n }\n removeChild(child) {\n this.children.remove(child);\n }\n replaceWith(name, value) {\n const replacement = typeof name == \"string\" ? this.scroll.create(name, value) : name;\n return replacement instanceof _ParentBlot && this.moveChildren(replacement), super.replaceWith(replacement);\n }\n split(index, force = !1) {\n if (!force) {\n if (index === 0)\n return this;\n if (index === this.length())\n return this.next;\n }\n const after = this.clone();\n return this.parent && this.parent.insertBefore(after, this.next || void 0), this.children.forEachAt(index, this.length(), (child, offset, _length) => {\n const split = child.split(offset, force);\n split != null && after.appendChild(split);\n }), after;\n }\n splitAfter(child) {\n const after = this.clone();\n for (; child.next != null; )\n after.appendChild(child.next);\n return this.parent && this.parent.insertBefore(after, this.next || void 0), after;\n }\n unwrap() {\n this.parent && this.moveChildren(this.parent, this.next || void 0), this.remove();\n }\n update(mutations, _context) {\n const addedNodes = [], removedNodes = [];\n mutations.forEach((mutation) => {\n mutation.target === this.domNode && mutation.type === \"childList\" && (addedNodes.push(...mutation.addedNodes), removedNodes.push(...mutation.removedNodes));\n }), removedNodes.forEach((node) => {\n if (node.parentNode != null && // @ts-expect-error Fix me later\n node.tagName !== \"IFRAME\" && document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY)\n return;\n const blot = this.scroll.find(node);\n blot != null && (blot.domNode.parentNode == null || blot.domNode.parentNode === this.domNode) && blot.detach();\n }), addedNodes.filter((node) => node.parentNode === this.domNode && node !== this.uiNode).sort((a, b) => a === b ? 0 : a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? 1 : -1).forEach((node) => {\n let refBlot = null;\n node.nextSibling != null && (refBlot = this.scroll.find(node.nextSibling));\n const blot = makeAttachedBlot(node, this.scroll);\n (blot.next !== refBlot || blot.next == null) && (blot.parent != null && blot.parent.removeChild(this), this.insertBefore(blot, refBlot || void 0));\n }), this.enforceAllowedChildren();\n }\n};\n_ParentBlot.uiClass = \"\";\nlet ParentBlot = _ParentBlot;\nconst ParentBlot$1 = ParentBlot;\nfunction isEqual(obj1, obj2) {\n if (Object.keys(obj1).length !== Object.keys(obj2).length)\n return !1;\n for (const prop in obj1)\n if (obj1[prop] !== obj2[prop])\n return !1;\n return !0;\n}\nconst _InlineBlot = class _InlineBlot extends ParentBlot$1 {\n static create(value) {\n return super.create(value);\n }\n static formats(domNode, scroll) {\n const match2 = scroll.query(_InlineBlot.blotName);\n if (!(match2 != null && domNode.tagName === match2.tagName)) {\n if (typeof this.tagName == \"string\")\n return !0;\n if (Array.isArray(this.tagName))\n return domNode.tagName.toLowerCase();\n }\n }\n constructor(scroll, domNode) {\n super(scroll, domNode), this.attributes = new AttributorStore$1(this.domNode);\n }\n format(name, value) {\n if (name === this.statics.blotName && !value)\n this.children.forEach((child) => {\n child instanceof _InlineBlot || (child = child.wrap(_InlineBlot.blotName, !0)), this.attributes.copy(child);\n }), this.unwrap();\n else {\n const format = this.scroll.query(name, Scope.INLINE);\n if (format == null)\n return;\n format instanceof Attributor ? this.attributes.attribute(format, value) : value && (name !== this.statics.blotName || this.formats()[name] !== value) && this.replaceWith(name, value);\n }\n }\n formats() {\n const formats = this.attributes.values(), format = this.statics.formats(this.domNode, this.scroll);\n return format != null && (formats[this.statics.blotName] = format), formats;\n }\n formatAt(index, length, name, value) {\n this.formats()[name] != null || this.scroll.query(name, Scope.ATTRIBUTE) ? this.isolate(index, length).format(name, value) : super.formatAt(index, length, name, value);\n }\n optimize(context) {\n super.optimize(context);\n const formats = this.formats();\n if (Object.keys(formats).length === 0)\n return this.unwrap();\n const next = this.next;\n next instanceof _InlineBlot && next.prev === this && isEqual(formats, next.formats()) && (next.moveChildren(this), next.remove());\n }\n replaceWith(name, value) {\n const replacement = super.replaceWith(name, value);\n return this.attributes.copy(replacement), replacement;\n }\n update(mutations, context) {\n super.update(mutations, context), mutations.some(\n (mutation) => mutation.target === this.domNode && mutation.type === \"attributes\"\n ) && this.attributes.build();\n }\n wrap(name, value) {\n const wrapper = super.wrap(name, value);\n return wrapper instanceof _InlineBlot && this.attributes.move(wrapper), wrapper;\n }\n};\n_InlineBlot.allowedChildren = [_InlineBlot, LeafBlot$1], _InlineBlot.blotName = \"inline\", _InlineBlot.scope = Scope.INLINE_BLOT, _InlineBlot.tagName = \"SPAN\";\nlet InlineBlot = _InlineBlot;\nconst InlineBlot$1 = InlineBlot, _BlockBlot = class _BlockBlot extends ParentBlot$1 {\n static create(value) {\n return super.create(value);\n }\n static formats(domNode, scroll) {\n const match2 = scroll.query(_BlockBlot.blotName);\n if (!(match2 != null && domNode.tagName === match2.tagName)) {\n if (typeof this.tagName == \"string\")\n return !0;\n if (Array.isArray(this.tagName))\n return domNode.tagName.toLowerCase();\n }\n }\n constructor(scroll, domNode) {\n super(scroll, domNode), this.attributes = new AttributorStore$1(this.domNode);\n }\n format(name, value) {\n const format = this.scroll.query(name, Scope.BLOCK);\n format != null && (format instanceof Attributor ? this.attributes.attribute(format, value) : name === this.statics.blotName && !value ? this.replaceWith(_BlockBlot.blotName) : value && (name !== this.statics.blotName || this.formats()[name] !== value) && this.replaceWith(name, value));\n }\n formats() {\n const formats = this.attributes.values(), format = this.statics.formats(this.domNode, this.scroll);\n return format != null && (formats[this.statics.blotName] = format), formats;\n }\n formatAt(index, length, name, value) {\n this.scroll.query(name, Scope.BLOCK) != null ? this.format(name, value) : super.formatAt(index, length, name, value);\n }\n insertAt(index, value, def) {\n if (def == null || this.scroll.query(value, Scope.INLINE) != null)\n super.insertAt(index, value, def);\n else {\n const after = this.split(index);\n if (after != null) {\n const blot = this.scroll.create(value, def);\n after.parent.insertBefore(blot, after);\n } else\n throw new Error(\"Attempt to insertAt after block boundaries\");\n }\n }\n replaceWith(name, value) {\n const replacement = super.replaceWith(name, value);\n return this.attributes.copy(replacement), replacement;\n }\n update(mutations, context) {\n super.update(mutations, context), mutations.some(\n (mutation) => mutation.target === this.domNode && mutation.type === \"attributes\"\n ) && this.attributes.build();\n }\n};\n_BlockBlot.blotName = \"block\", _BlockBlot.scope = Scope.BLOCK_BLOT, _BlockBlot.tagName = \"P\", _BlockBlot.allowedChildren = [\n InlineBlot$1,\n _BlockBlot,\n LeafBlot$1\n];\nlet BlockBlot = _BlockBlot;\nconst BlockBlot$1 = BlockBlot, _ContainerBlot = class _ContainerBlot extends ParentBlot$1 {\n checkMerge() {\n return this.next !== null && this.next.statics.blotName === this.statics.blotName;\n }\n deleteAt(index, length) {\n super.deleteAt(index, length), this.enforceAllowedChildren();\n }\n formatAt(index, length, name, value) {\n super.formatAt(index, length, name, value), this.enforceAllowedChildren();\n }\n insertAt(index, value, def) {\n super.insertAt(index, value, def), this.enforceAllowedChildren();\n }\n optimize(context) {\n super.optimize(context), this.children.length > 0 && this.next != null && this.checkMerge() && (this.next.moveChildren(this), this.next.remove());\n }\n};\n_ContainerBlot.blotName = \"container\", _ContainerBlot.scope = Scope.BLOCK_BLOT;\nlet ContainerBlot = _ContainerBlot;\nconst ContainerBlot$1 = ContainerBlot;\nclass EmbedBlot extends LeafBlot$1 {\n static formats(_domNode, _scroll) {\n }\n format(name, value) {\n super.formatAt(0, this.length(), name, value);\n }\n formatAt(index, length, name, value) {\n index === 0 && length === this.length() ? this.format(name, value) : super.formatAt(index, length, name, value);\n }\n formats() {\n return this.statics.formats(this.domNode, this.scroll);\n }\n}\nconst EmbedBlot$1 = EmbedBlot, OBSERVER_CONFIG = {\n attributes: !0,\n characterData: !0,\n characterDataOldValue: !0,\n childList: !0,\n subtree: !0\n}, MAX_OPTIMIZE_ITERATIONS = 100, _ScrollBlot = class _ScrollBlot extends ParentBlot$1 {\n constructor(registry, node) {\n super(null, node), this.registry = registry, this.scroll = this, this.build(), this.observer = new MutationObserver((mutations) => {\n this.update(mutations);\n }), this.observer.observe(this.domNode, OBSERVER_CONFIG), this.attach();\n }\n create(input, value) {\n return this.registry.create(this, input, value);\n }\n find(node, bubble = !1) {\n const blot = this.registry.find(node, bubble);\n return blot ? blot.scroll === this ? blot : bubble ? this.find(blot.scroll.domNode.parentNode, !0) : null : null;\n }\n query(query, scope = Scope.ANY) {\n return this.registry.query(query, scope);\n }\n register(...definitions) {\n return this.registry.register(...definitions);\n }\n build() {\n this.scroll != null && super.build();\n }\n detach() {\n super.detach(), this.observer.disconnect();\n }\n deleteAt(index, length) {\n this.update(), index === 0 && length === this.length() ? this.children.forEach((child) => {\n child.remove();\n }) : super.deleteAt(index, length);\n }\n formatAt(index, length, name, value) {\n this.update(), super.formatAt(index, length, name, value);\n }\n insertAt(index, value, def) {\n this.update(), super.insertAt(index, value, def);\n }\n optimize(mutations = [], context = {}) {\n super.optimize(context);\n const mutationsMap = context.mutationsMap || /* @__PURE__ */ new WeakMap();\n let records = Array.from(this.observer.takeRecords());\n for (; records.length > 0; )\n mutations.push(records.pop());\n const mark = (blot, markParent = !0) => {\n blot == null || blot === this || blot.domNode.parentNode != null && (mutationsMap.has(blot.domNode) || mutationsMap.set(blot.domNode, []), markParent && mark(blot.parent));\n }, optimize = (blot) => {\n mutationsMap.has(blot.domNode) && (blot instanceof ParentBlot$1 && blot.children.forEach(optimize), mutationsMap.delete(blot.domNode), blot.optimize(context));\n };\n let remaining = mutations;\n for (let i = 0; remaining.length > 0; i += 1) {\n if (i >= MAX_OPTIMIZE_ITERATIONS)\n throw new Error(\"[Parchment] Maximum optimize iterations reached\");\n for (remaining.forEach((mutation) => {\n const blot = this.find(mutation.target, !0);\n blot != null && (blot.domNode === mutation.target && (mutation.type === \"childList\" ? (mark(this.find(mutation.previousSibling, !1)), Array.from(mutation.addedNodes).forEach((node) => {\n const child = this.find(node, !1);\n mark(child, !1), child instanceof ParentBlot$1 && child.children.forEach((grandChild) => {\n mark(grandChild, !1);\n });\n })) : mutation.type === \"attributes\" && mark(blot.prev)), mark(blot));\n }), this.children.forEach(optimize), remaining = Array.from(this.observer.takeRecords()), records = remaining.slice(); records.length > 0; )\n mutations.push(records.pop());\n }\n }\n update(mutations, context = {}) {\n mutations = mutations || this.observer.takeRecords();\n const mutationsMap = /* @__PURE__ */ new WeakMap();\n mutations.map((mutation) => {\n const blot = this.find(mutation.target, !0);\n return blot == null ? null : mutationsMap.has(blot.domNode) ? (mutationsMap.get(blot.domNode).push(mutation), null) : (mutationsMap.set(blot.domNode, [mutation]), blot);\n }).forEach((blot) => {\n blot != null && blot !== this && mutationsMap.has(blot.domNode) && blot.update(mutationsMap.get(blot.domNode) || [], context);\n }), context.mutationsMap = mutationsMap, mutationsMap.has(this.domNode) && super.update(mutationsMap.get(this.domNode), context), this.optimize(mutations, context);\n }\n};\n_ScrollBlot.blotName = \"scroll\", _ScrollBlot.defaultChild = BlockBlot$1, _ScrollBlot.allowedChildren = [BlockBlot$1, ContainerBlot$1], _ScrollBlot.scope = Scope.BLOCK_BLOT, _ScrollBlot.tagName = \"DIV\";\nlet ScrollBlot = _ScrollBlot;\nconst ScrollBlot$1 = ScrollBlot, _TextBlot = class _TextBlot extends LeafBlot$1 {\n static create(value) {\n return document.createTextNode(value);\n }\n static value(domNode) {\n return domNode.data;\n }\n constructor(scroll, node) {\n super(scroll, node), this.text = this.statics.value(this.domNode);\n }\n deleteAt(index, length) {\n this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length);\n }\n index(node, offset) {\n return this.domNode === node ? offset : -1;\n }\n insertAt(index, value, def) {\n def == null ? (this.text = this.text.slice(0, index) + value + this.text.slice(index), this.domNode.data = this.text) : super.insertAt(index, value, def);\n }\n length() {\n return this.text.length;\n }\n optimize(context) {\n super.optimize(context), this.text = this.statics.value(this.domNode), this.text.length === 0 ? this.remove() : this.next instanceof _TextBlot && this.next.prev === this && (this.insertAt(this.length(), this.next.value()), this.next.remove());\n }\n position(index, _inclusive = !1) {\n return [this.domNode, index];\n }\n split(index, force = !1) {\n if (!force) {\n if (index === 0)\n return this;\n if (index === this.length())\n return this.next;\n }\n const after = this.scroll.create(this.domNode.splitText(index));\n return this.parent.insertBefore(after, this.next || void 0), this.text = this.statics.value(this.domNode), after;\n }\n update(mutations, _context) {\n mutations.some((mutation) => mutation.type === \"characterData\" && mutation.target === this.domNode) && (this.text = this.statics.value(this.domNode));\n }\n value() {\n return this.text;\n }\n};\n_TextBlot.blotName = \"text\", _TextBlot.scope = Scope.INLINE_BLOT;\nlet TextBlot = _TextBlot;\nconst TextBlot$1 = TextBlot;\nexport {\n Attributor,\n AttributorStore$1 as AttributorStore,\n BlockBlot$1 as BlockBlot,\n ClassAttributor$1 as ClassAttributor,\n ContainerBlot$1 as ContainerBlot,\n EmbedBlot$1 as EmbedBlot,\n InlineBlot$1 as InlineBlot,\n LeafBlot$1 as LeafBlot,\n ParentBlot$1 as ParentBlot,\n Registry,\n Scope,\n ScrollBlot$1 as ScrollBlot,\n StyleAttributor$1 as StyleAttributor,\n TextBlot$1 as TextBlot\n};\n//# sourceMappingURL=parchment.js.map\n","import { TextBlot } from 'parchment';\nclass Text extends TextBlot {}\nfunction escapeText(text) {\n return text.replace(/[&<>\"']/g, s => {\n // https://lodash.com/docs#escape\n const entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return entityMap[s];\n });\n}\nexport { Text as default, escapeText };\n//# sourceMappingURL=text.js.map","import { EmbedBlot } from 'parchment';\nclass Break extends EmbedBlot {\n static value() {\n return undefined;\n }\n optimize() {\n if (this.prev || this.next) {\n this.remove();\n }\n }\n length() {\n return 0;\n }\n value() {\n return '';\n }\n}\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\nexport default Break;\n//# sourceMappingURL=break.js.map","import { EmbedBlot, InlineBlot, Scope } from 'parchment';\nimport Break from './break.js';\nimport Text from './text.js';\nclass Inline extends InlineBlot {\n static allowedChildren = [Inline, Break, EmbedBlot, Text];\n // Lower index means deeper in the DOM tree, since not found (-1) is for embeds\n static order = ['cursor', 'inline',\n // Must be lower\n 'link',\n // Chrome wants to be lower\n 'underline', 'strike', 'italic', 'bold', 'script', 'code' // Must be higher\n ];\n static compare(self, other) {\n const selfIndex = Inline.order.indexOf(self);\n const otherIndex = Inline.order.indexOf(other);\n if (selfIndex >= 0 || otherIndex >= 0) {\n return selfIndex - otherIndex;\n }\n if (self === other) {\n return 0;\n }\n if (self < other) {\n return -1;\n }\n return 1;\n }\n formatAt(index, length, name, value) {\n if (Inline.compare(this.statics.blotName, name) < 0 && this.scroll.query(name, Scope.BLOT)) {\n const blot = this.isolate(index, length);\n if (value) {\n blot.wrap(name, value);\n }\n } else {\n super.formatAt(index, length, name, value);\n }\n }\n optimize(context) {\n super.optimize(context);\n if (this.parent instanceof Inline && Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {\n const parent = this.parent.isolate(this.offset(), this.length());\n // @ts-expect-error TODO: make isolate generic\n this.moveChildren(parent);\n parent.wrap(this);\n }\n }\n}\nexport default Inline;\n//# sourceMappingURL=inline.js.map","import { AttributorStore, BlockBlot, EmbedBlot, LeafBlot, Scope } from 'parchment';\nimport Delta from 'quill-delta';\nimport Break from './break.js';\nimport Inline from './inline.js';\nimport TextBlot from './text.js';\nconst NEWLINE_LENGTH = 1;\nclass Block extends BlockBlot {\n cache = {};\n delta() {\n if (this.cache.delta == null) {\n this.cache.delta = blockDelta(this);\n }\n return this.cache.delta;\n }\n deleteAt(index, length) {\n super.deleteAt(index, length);\n this.cache = {};\n }\n formatAt(index, length, name, value) {\n if (length <= 0) return;\n if (this.scroll.query(name, Scope.BLOCK)) {\n if (index + length === this.length()) {\n this.format(name, value);\n }\n } else {\n super.formatAt(index, Math.min(length, this.length() - index - 1), name, value);\n }\n this.cache = {};\n }\n insertAt(index, value, def) {\n if (def != null) {\n super.insertAt(index, value, def);\n this.cache = {};\n return;\n }\n if (value.length === 0) return;\n const lines = value.split('\\n');\n const text = lines.shift();\n if (text.length > 0) {\n if (index < this.length() - 1 || this.children.tail == null) {\n super.insertAt(Math.min(index, this.length() - 1), text);\n } else {\n this.children.tail.insertAt(this.children.tail.length(), text);\n }\n this.cache = {};\n }\n // TODO: Fix this next time the file is edited.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let block = this;\n lines.reduce((lineIndex, line) => {\n // @ts-expect-error Fix me later\n block = block.split(lineIndex, true);\n block.insertAt(0, line);\n return line.length;\n }, index + text.length);\n }\n insertBefore(blot, ref) {\n const {\n head\n } = this.children;\n super.insertBefore(blot, ref);\n if (head instanceof Break) {\n head.remove();\n }\n this.cache = {};\n }\n length() {\n if (this.cache.length == null) {\n this.cache.length = super.length() + NEWLINE_LENGTH;\n }\n return this.cache.length;\n }\n moveChildren(target, ref) {\n super.moveChildren(target, ref);\n this.cache = {};\n }\n optimize(context) {\n super.optimize(context);\n this.cache = {};\n }\n path(index) {\n return super.path(index, true);\n }\n removeChild(child) {\n super.removeChild(child);\n this.cache = {};\n }\n split(index) {\n let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {\n const clone = this.clone();\n if (index === 0) {\n this.parent.insertBefore(clone, this);\n return this;\n }\n this.parent.insertBefore(clone, this.next);\n return clone;\n }\n const next = super.split(index, force);\n this.cache = {};\n return next;\n }\n}\nBlock.blotName = 'block';\nBlock.tagName = 'P';\nBlock.defaultChild = Break;\nBlock.allowedChildren = [Break, Inline, EmbedBlot, TextBlot];\nclass BlockEmbed extends EmbedBlot {\n attach() {\n super.attach();\n this.attributes = new AttributorStore(this.domNode);\n }\n delta() {\n return new Delta().insert(this.value(), {\n ...this.formats(),\n ...this.attributes.values()\n });\n }\n format(name, value) {\n const attribute = this.scroll.query(name, Scope.BLOCK_ATTRIBUTE);\n if (attribute != null) {\n // @ts-expect-error TODO: Scroll#query() should return Attributor when scope is attribute\n this.attributes.attribute(attribute, value);\n }\n }\n formatAt(index, length, name, value) {\n this.format(name, value);\n }\n insertAt(index, value, def) {\n if (def != null) {\n super.insertAt(index, value, def);\n return;\n }\n const lines = value.split('\\n');\n const text = lines.pop();\n const blocks = lines.map(line => {\n const block = this.scroll.create(Block.blotName);\n block.insertAt(0, line);\n return block;\n });\n const ref = this.split(index);\n blocks.forEach(block => {\n this.parent.insertBefore(block, ref);\n });\n if (text) {\n this.parent.insertBefore(this.scroll.create('text', text), ref);\n }\n }\n}\nBlockEmbed.scope = Scope.BLOCK_BLOT;\n// It is important for cursor behavior BlockEmbeds use tags that are block level elements\n\nfunction blockDelta(blot) {\n let filter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return blot.descendants(LeafBlot).reduce((delta, leaf) => {\n if (leaf.length() === 0) {\n return delta;\n }\n return delta.insert(leaf.value(), bubbleFormats(leaf, {}, filter));\n }, new Delta()).insert('\\n', bubbleFormats(blot));\n}\nfunction bubbleFormats(blot) {\n let formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let filter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (blot == null) return formats;\n if ('formats' in blot && typeof blot.formats === 'function') {\n formats = {\n ...formats,\n ...blot.formats()\n };\n if (filter) {\n // exclude syntax highlighting from deltas and getFormat()\n delete formats['code-token'];\n }\n }\n if (blot.parent == null || blot.parent.statics.blotName === 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {\n return formats;\n }\n return bubbleFormats(blot.parent, formats, filter);\n}\nexport { blockDelta, bubbleFormats, BlockEmbed, Block as default };\n//# sourceMappingURL=block.js.map","import { EmbedBlot, Scope } from 'parchment';\nimport TextBlot from './text.js';\nclass Cursor extends EmbedBlot {\n static blotName = 'cursor';\n static className = 'ql-cursor';\n static tagName = 'span';\n static CONTENTS = '\\uFEFF'; // Zero width no break space\n\n static value() {\n return undefined;\n }\n constructor(scroll, domNode, selection) {\n super(scroll, domNode);\n this.selection = selection;\n this.textNode = document.createTextNode(Cursor.CONTENTS);\n this.domNode.appendChild(this.textNode);\n this.savedLength = 0;\n }\n detach() {\n // super.detach() will also clear domNode.__blot\n if (this.parent != null) this.parent.removeChild(this);\n }\n format(name, value) {\n if (this.savedLength !== 0) {\n super.format(name, value);\n return;\n }\n // TODO: Fix this next time the file is edited.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let target = this;\n let index = 0;\n while (target != null && target.statics.scope !== Scope.BLOCK_BLOT) {\n index += target.offset(target.parent);\n target = target.parent;\n }\n if (target != null) {\n this.savedLength = Cursor.CONTENTS.length;\n // @ts-expect-error TODO: allow empty context in Parchment\n target.optimize();\n target.formatAt(index, Cursor.CONTENTS.length, name, value);\n this.savedLength = 0;\n }\n }\n index(node, offset) {\n if (node === this.textNode) return 0;\n return super.index(node, offset);\n }\n length() {\n return this.savedLength;\n }\n position() {\n return [this.textNode, this.textNode.data.length];\n }\n remove() {\n super.remove();\n // @ts-expect-error Fix me later\n this.parent = null;\n }\n restore() {\n if (this.selection.composing || this.parent == null) return null;\n const range = this.selection.getNativeRange();\n // Browser may push down styles/nodes inside the cursor blot.\n // https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#push-down-values\n while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {\n // @ts-expect-error Fix me later\n this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);\n }\n const prevTextBlot = this.prev instanceof TextBlot ? this.prev : null;\n const prevTextLength = prevTextBlot ? prevTextBlot.length() : 0;\n const nextTextBlot = this.next instanceof TextBlot ? this.next : null;\n // @ts-expect-error TODO: make TextBlot.text public\n const nextText = nextTextBlot ? nextTextBlot.text : '';\n const {\n textNode\n } = this;\n // take text from inside this blot and reset it\n const newText = textNode.data.split(Cursor.CONTENTS).join('');\n textNode.data = Cursor.CONTENTS;\n\n // proactively merge TextBlots around cursor so that optimization\n // doesn't lose the cursor. the reason we are here in cursor.restore\n // could be that the user clicked in prevTextBlot or nextTextBlot, or\n // the user typed something.\n let mergedTextBlot;\n if (prevTextBlot) {\n mergedTextBlot = prevTextBlot;\n if (newText || nextTextBlot) {\n prevTextBlot.insertAt(prevTextBlot.length(), newText + nextText);\n if (nextTextBlot) {\n nextTextBlot.remove();\n }\n }\n } else if (nextTextBlot) {\n mergedTextBlot = nextTextBlot;\n nextTextBlot.insertAt(0, newText);\n } else {\n const newTextNode = document.createTextNode(newText);\n mergedTextBlot = this.scroll.create(newTextNode);\n this.parent.insertBefore(mergedTextBlot, this);\n }\n this.remove();\n if (range) {\n // calculate selection to restore\n const remapOffset = (node, offset) => {\n if (prevTextBlot && node === prevTextBlot.domNode) {\n return offset;\n }\n if (node === textNode) {\n return prevTextLength + offset - 1;\n }\n if (nextTextBlot && node === nextTextBlot.domNode) {\n return prevTextLength + newText.length + offset;\n }\n return null;\n };\n const start = remapOffset(range.start.node, range.start.offset);\n const end = remapOffset(range.end.node, range.end.offset);\n if (start !== null && end !== null) {\n return {\n startNode: mergedTextBlot.domNode,\n startOffset: start,\n endNode: mergedTextBlot.domNode,\n endOffset: end\n };\n }\n }\n return null;\n }\n update(mutations, context) {\n if (mutations.some(mutation => {\n return mutation.type === 'characterData' && mutation.target === this.textNode;\n })) {\n const range = this.restore();\n if (range) context.range = range;\n }\n }\n\n // Avoid .ql-cursor being a descendant of ``.\n // The reason is Safari pushes down `` on text insertion.\n // That will cause DOM nodes not sync with the model.\n //\n // For example ({I} is the caret), given the markup:\n // \\uFEFF{I}\n // When typing a char \"x\", `` will be pushed down inside the `` first:\n // \\uFEFF{I}\n // And then \"x\" will be inserted after ``:\n // \\uFEFFd{I}\n optimize(context) {\n // @ts-expect-error Fix me later\n super.optimize(context);\n let {\n parent\n } = this;\n while (parent) {\n if (parent.domNode.tagName === 'A') {\n this.savedLength = Cursor.CONTENTS.length;\n // @ts-expect-error TODO: make isolate generic\n parent.isolate(this.offset(parent), this.length()).unwrap();\n this.savedLength = 0;\n break;\n }\n parent = parent.parent;\n }\n }\n value() {\n return '';\n }\n}\nexport default Cursor;\n//# sourceMappingURL=cursor.js.map","import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n","export default new WeakMap();\n//# sourceMappingURL=instances.js.map","const levels = ['error', 'warn', 'log', 'info'];\nlet level = 'warn';\nfunction debug(method) {\n if (level) {\n if (levels.indexOf(method) <= levels.indexOf(level)) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n console[method](...args); // eslint-disable-line no-console\n }\n }\n}\nfunction namespace(ns) {\n return levels.reduce((logger, method) => {\n logger[method] = debug.bind(console, method, ns);\n return logger;\n }, {});\n}\nnamespace.level = newLevel => {\n level = newLevel;\n};\ndebug.level = namespace.level;\nexport default namespace;\n//# sourceMappingURL=logger.js.map","import { EventEmitter } from 'eventemitter3';\nimport instances from './instances.js';\nimport logger from './logger.js';\nconst debug = logger('quill:events');\nconst EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];\nEVENTS.forEach(eventName => {\n document.addEventListener(eventName, function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n Array.from(document.querySelectorAll('.ql-container')).forEach(node => {\n const quill = instances.get(node);\n if (quill && quill.emitter) {\n quill.emitter.handleDOM(...args);\n }\n });\n });\n});\nclass Emitter extends EventEmitter {\n static events = {\n EDITOR_CHANGE: 'editor-change',\n SCROLL_BEFORE_UPDATE: 'scroll-before-update',\n SCROLL_BLOT_MOUNT: 'scroll-blot-mount',\n SCROLL_BLOT_UNMOUNT: 'scroll-blot-unmount',\n SCROLL_OPTIMIZE: 'scroll-optimize',\n SCROLL_UPDATE: 'scroll-update',\n SCROLL_EMBED_UPDATE: 'scroll-embed-update',\n SELECTION_CHANGE: 'selection-change',\n TEXT_CHANGE: 'text-change',\n COMPOSITION_BEFORE_START: 'composition-before-start',\n COMPOSITION_START: 'composition-start',\n COMPOSITION_BEFORE_END: 'composition-before-end',\n COMPOSITION_END: 'composition-end'\n };\n static sources = {\n API: 'api',\n SILENT: 'silent',\n USER: 'user'\n };\n constructor() {\n super();\n this.domListeners = {};\n this.on('error', debug.error);\n }\n emit() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n debug.log.call(debug, ...args);\n // @ts-expect-error\n return super.emit(...args);\n }\n handleDOM(event) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n (this.domListeners[event.type] || []).forEach(_ref => {\n let {\n node,\n handler\n } = _ref;\n if (event.target === node || node.contains(event.target)) {\n handler(event, ...args);\n }\n });\n }\n listenDOM(eventName, node, handler) {\n if (!this.domListeners[eventName]) {\n this.domListeners[eventName] = [];\n }\n this.domListeners[eventName].push({\n node,\n handler\n });\n }\n}\nexport default Emitter;\n//# sourceMappingURL=emitter.js.map","import { LeafBlot, Scope } from 'parchment';\nimport { cloneDeep, isEqual } from 'lodash-es';\nimport Emitter from './emitter.js';\nimport logger from './logger.js';\nconst debug = logger('quill:selection');\nexport class Range {\n constructor(index) {\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n this.index = index;\n this.length = length;\n }\n}\nclass Selection {\n constructor(scroll, emitter) {\n this.emitter = emitter;\n this.scroll = scroll;\n this.composing = false;\n this.mouseDown = false;\n this.root = this.scroll.domNode;\n // @ts-expect-error\n this.cursor = this.scroll.create('cursor', this);\n // savedRange is last non-null range\n this.savedRange = new Range(0, 0);\n this.lastRange = this.savedRange;\n this.lastNative = null;\n this.handleComposition();\n this.handleDragging();\n this.emitter.listenDOM('selectionchange', document, () => {\n if (!this.mouseDown && !this.composing) {\n setTimeout(this.update.bind(this, Emitter.sources.USER), 1);\n }\n });\n this.emitter.on(Emitter.events.SCROLL_BEFORE_UPDATE, () => {\n if (!this.hasFocus()) return;\n const native = this.getNativeRange();\n if (native == null) return;\n if (native.start.node === this.cursor.textNode) return; // cursor.restore() will handle\n this.emitter.once(Emitter.events.SCROLL_UPDATE, (source, mutations) => {\n try {\n if (this.root.contains(native.start.node) && this.root.contains(native.end.node)) {\n this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);\n }\n const triggeredByTyping = mutations.some(mutation => mutation.type === 'characterData' || mutation.type === 'childList' || mutation.type === 'attributes' && mutation.target === this.root);\n this.update(triggeredByTyping ? Emitter.sources.SILENT : source);\n } catch (ignored) {\n // ignore\n }\n });\n });\n this.emitter.on(Emitter.events.SCROLL_OPTIMIZE, (mutations, context) => {\n if (context.range) {\n const {\n startNode,\n startOffset,\n endNode,\n endOffset\n } = context.range;\n this.setNativeRange(startNode, startOffset, endNode, endOffset);\n this.update(Emitter.sources.SILENT);\n }\n });\n this.update(Emitter.sources.SILENT);\n }\n handleComposition() {\n this.emitter.on(Emitter.events.COMPOSITION_BEFORE_START, () => {\n this.composing = true;\n });\n this.emitter.on(Emitter.events.COMPOSITION_END, () => {\n this.composing = false;\n if (this.cursor.parent) {\n const range = this.cursor.restore();\n if (!range) return;\n setTimeout(() => {\n this.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n }, 1);\n }\n });\n }\n handleDragging() {\n this.emitter.listenDOM('mousedown', document.body, () => {\n this.mouseDown = true;\n });\n this.emitter.listenDOM('mouseup', document.body, () => {\n this.mouseDown = false;\n this.update(Emitter.sources.USER);\n });\n }\n focus() {\n if (this.hasFocus()) return;\n this.root.focus({\n preventScroll: true\n });\n this.setRange(this.savedRange);\n }\n format(format, value) {\n this.scroll.update();\n const nativeRange = this.getNativeRange();\n if (nativeRange == null || !nativeRange.native.collapsed || this.scroll.query(format, Scope.BLOCK)) return;\n if (nativeRange.start.node !== this.cursor.textNode) {\n const blot = this.scroll.find(nativeRange.start.node, false);\n if (blot == null) return;\n // TODO Give blot ability to not split\n if (blot instanceof LeafBlot) {\n const after = blot.split(nativeRange.start.offset);\n blot.parent.insertBefore(this.cursor, after);\n } else {\n // @ts-expect-error TODO: nativeRange.start.node doesn't seem to match function signature\n blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen\n }\n this.cursor.attach();\n }\n this.cursor.format(format, value);\n this.scroll.optimize();\n this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n this.update();\n }\n getBounds(index) {\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n const scrollLength = this.scroll.length();\n index = Math.min(index, scrollLength - 1);\n length = Math.min(index + length, scrollLength - 1) - index;\n let node;\n let [leaf, offset] = this.scroll.leaf(index);\n if (leaf == null) return null;\n if (length > 0 && offset === leaf.length()) {\n const [next] = this.scroll.leaf(index + 1);\n if (next) {\n const [line] = this.scroll.line(index);\n const [nextLine] = this.scroll.line(index + 1);\n if (line === nextLine) {\n leaf = next;\n offset = 0;\n }\n }\n }\n [node, offset] = leaf.position(offset, true);\n const range = document.createRange();\n if (length > 0) {\n range.setStart(node, offset);\n [leaf, offset] = this.scroll.leaf(index + length);\n if (leaf == null) return null;\n [node, offset] = leaf.position(offset, true);\n range.setEnd(node, offset);\n return range.getBoundingClientRect();\n }\n let side = 'left';\n let rect;\n if (node instanceof Text) {\n // Return null if the text node is empty because it is\n // not able to get a useful client rect:\n // https://github.com/w3c/csswg-drafts/issues/2514.\n // Empty text nodes are most likely caused by TextBlot#optimize()\n // not getting called when editor content changes.\n if (!node.data.length) {\n return null;\n }\n if (offset < node.data.length) {\n range.setStart(node, offset);\n range.setEnd(node, offset + 1);\n } else {\n range.setStart(node, offset - 1);\n range.setEnd(node, offset);\n side = 'right';\n }\n rect = range.getBoundingClientRect();\n } else {\n if (!(leaf.domNode instanceof Element)) return null;\n rect = leaf.domNode.getBoundingClientRect();\n if (offset > 0) side = 'right';\n }\n return {\n bottom: rect.top + rect.height,\n height: rect.height,\n left: rect[side],\n right: rect[side],\n top: rect.top,\n width: 0\n };\n }\n getNativeRange() {\n const selection = document.getSelection();\n if (selection == null || selection.rangeCount <= 0) return null;\n const nativeRange = selection.getRangeAt(0);\n if (nativeRange == null) return null;\n const range = this.normalizeNative(nativeRange);\n debug.info('getNativeRange', range);\n return range;\n }\n getRange() {\n const root = this.scroll.domNode;\n if ('isConnected' in root && !root.isConnected) {\n // document.getSelection() forces layout on Blink, so we trend to\n // not calling it.\n return [null, null];\n }\n const normalized = this.getNativeRange();\n if (normalized == null) return [null, null];\n const range = this.normalizedToRange(normalized);\n return [range, normalized];\n }\n hasFocus() {\n return document.activeElement === this.root || document.activeElement != null && contains(this.root, document.activeElement);\n }\n normalizedToRange(range) {\n const positions = [[range.start.node, range.start.offset]];\n if (!range.native.collapsed) {\n positions.push([range.end.node, range.end.offset]);\n }\n const indexes = positions.map(position => {\n const [node, offset] = position;\n const blot = this.scroll.find(node, true);\n // @ts-expect-error Fix me later\n const index = blot.offset(this.scroll);\n if (offset === 0) {\n return index;\n }\n if (blot instanceof LeafBlot) {\n return index + blot.index(node, offset);\n }\n // @ts-expect-error Fix me later\n return index + blot.length();\n });\n const end = Math.min(Math.max(...indexes), this.scroll.length() - 1);\n const start = Math.min(end, ...indexes);\n return new Range(start, end - start);\n }\n normalizeNative(nativeRange) {\n if (!contains(this.root, nativeRange.startContainer) || !nativeRange.collapsed && !contains(this.root, nativeRange.endContainer)) {\n return null;\n }\n const range = {\n start: {\n node: nativeRange.startContainer,\n offset: nativeRange.startOffset\n },\n end: {\n node: nativeRange.endContainer,\n offset: nativeRange.endOffset\n },\n native: nativeRange\n };\n [range.start, range.end].forEach(position => {\n let {\n node,\n offset\n } = position;\n while (!(node instanceof Text) && node.childNodes.length > 0) {\n if (node.childNodes.length > offset) {\n node = node.childNodes[offset];\n offset = 0;\n } else if (node.childNodes.length === offset) {\n // @ts-expect-error Fix me later\n node = node.lastChild;\n if (node instanceof Text) {\n offset = node.data.length;\n } else if (node.childNodes.length > 0) {\n // Container case\n offset = node.childNodes.length;\n } else {\n // Embed case\n offset = node.childNodes.length + 1;\n }\n } else {\n break;\n }\n }\n position.node = node;\n position.offset = offset;\n });\n return range;\n }\n rangeToNative(range) {\n const scrollLength = this.scroll.length();\n const getPosition = (index, inclusive) => {\n index = Math.min(scrollLength - 1, index);\n const [leaf, leafOffset] = this.scroll.leaf(index);\n return leaf ? leaf.position(leafOffset, inclusive) : [null, -1];\n };\n return [...getPosition(range.index, false), ...getPosition(range.index + range.length, true)];\n }\n setNativeRange(startNode, startOffset) {\n let endNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : startNode;\n let endOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : startOffset;\n let force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);\n if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null ||\n // @ts-expect-error Fix me later\n endNode.parentNode == null)) {\n return;\n }\n const selection = document.getSelection();\n if (selection == null) return;\n if (startNode != null) {\n if (!this.hasFocus()) this.root.focus({\n preventScroll: true\n });\n const {\n native\n } = this.getNativeRange() || {};\n if (native == null || force || startNode !== native.startContainer || startOffset !== native.startOffset || endNode !== native.endContainer || endOffset !== native.endOffset) {\n if (startNode instanceof Element && startNode.tagName === 'BR') {\n // @ts-expect-error Fix me later\n startOffset = Array.from(startNode.parentNode.childNodes).indexOf(startNode);\n startNode = startNode.parentNode;\n }\n if (endNode instanceof Element && endNode.tagName === 'BR') {\n // @ts-expect-error Fix me later\n endOffset = Array.from(endNode.parentNode.childNodes).indexOf(endNode);\n endNode = endNode.parentNode;\n }\n const range = document.createRange();\n // @ts-expect-error Fix me later\n range.setStart(startNode, startOffset);\n // @ts-expect-error Fix me later\n range.setEnd(endNode, endOffset);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n } else {\n selection.removeAllRanges();\n this.root.blur();\n }\n }\n setRange(range) {\n let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n let source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Emitter.sources.API;\n if (typeof force === 'string') {\n source = force;\n force = false;\n }\n debug.info('setRange', range);\n if (range != null) {\n const args = this.rangeToNative(range);\n this.setNativeRange(...args, force);\n } else {\n this.setNativeRange(null);\n }\n this.update(source);\n }\n update() {\n let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Emitter.sources.USER;\n const oldRange = this.lastRange;\n const [lastRange, nativeRange] = this.getRange();\n this.lastRange = lastRange;\n this.lastNative = nativeRange;\n if (this.lastRange != null) {\n this.savedRange = this.lastRange;\n }\n if (!isEqual(oldRange, this.lastRange)) {\n if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {\n const range = this.cursor.restore();\n if (range) {\n this.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n }\n }\n const args = [Emitter.events.SELECTION_CHANGE, cloneDeep(this.lastRange), cloneDeep(oldRange), source];\n this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n if (source !== Emitter.sources.SILENT) {\n this.emitter.emit(...args);\n }\n }\n }\n}\nfunction contains(parent, descendant) {\n try {\n // Firefox inserts inaccessible nodes around video elements\n descendant.parentNode; // eslint-disable-line @typescript-eslint/no-unused-expressions\n } catch (e) {\n return false;\n }\n return parent.contains(descendant);\n}\nexport default Selection;\n//# sourceMappingURL=selection.js.map","import { cloneDeep, isEqual, merge } from 'lodash-es';\nimport { LeafBlot, EmbedBlot, Scope, ParentBlot } from 'parchment';\nimport Delta, { AttributeMap, Op } from 'quill-delta';\nimport Block, { BlockEmbed, bubbleFormats } from '../blots/block.js';\nimport Break from '../blots/break.js';\nimport CursorBlot from '../blots/cursor.js';\nimport TextBlot, { escapeText } from '../blots/text.js';\nimport { Range } from './selection.js';\nconst ASCII = /^[ -~]*$/;\nclass Editor {\n constructor(scroll) {\n this.scroll = scroll;\n this.delta = this.getDelta();\n }\n applyDelta(delta) {\n this.scroll.update();\n let scrollLength = this.scroll.length();\n this.scroll.batchStart();\n const normalizedDelta = normalizeDelta(delta);\n const deleteDelta = new Delta();\n const normalizedOps = splitOpLines(normalizedDelta.ops.slice());\n normalizedOps.reduce((index, op) => {\n const length = Op.length(op);\n let attributes = op.attributes || {};\n let isImplicitNewlinePrepended = false;\n let isImplicitNewlineAppended = false;\n if (op.insert != null) {\n deleteDelta.retain(length);\n if (typeof op.insert === 'string') {\n const text = op.insert;\n isImplicitNewlineAppended = !text.endsWith('\\n') && (scrollLength <= index || !!this.scroll.descendant(BlockEmbed, index)[0]);\n this.scroll.insertAt(index, text);\n const [line, offset] = this.scroll.line(index);\n let formats = merge({}, bubbleFormats(line));\n if (line instanceof Block) {\n const [leaf] = line.descendant(LeafBlot, offset);\n if (leaf) {\n formats = merge(formats, bubbleFormats(leaf));\n }\n }\n attributes = AttributeMap.diff(formats, attributes) || {};\n } else if (typeof op.insert === 'object') {\n const key = Object.keys(op.insert)[0]; // There should only be one key\n if (key == null) return index;\n const isInlineEmbed = this.scroll.query(key, Scope.INLINE) != null;\n if (isInlineEmbed) {\n if (scrollLength <= index || !!this.scroll.descendant(BlockEmbed, index)[0]) {\n isImplicitNewlineAppended = true;\n }\n } else if (index > 0) {\n const [leaf, offset] = this.scroll.descendant(LeafBlot, index - 1);\n if (leaf instanceof TextBlot) {\n const text = leaf.value();\n if (text[offset] !== '\\n') {\n isImplicitNewlinePrepended = true;\n }\n } else if (leaf instanceof EmbedBlot && leaf.statics.scope === Scope.INLINE_BLOT) {\n isImplicitNewlinePrepended = true;\n }\n }\n this.scroll.insertAt(index, key, op.insert[key]);\n if (isInlineEmbed) {\n const [leaf] = this.scroll.descendant(LeafBlot, index);\n if (leaf) {\n const formats = merge({}, bubbleFormats(leaf));\n attributes = AttributeMap.diff(formats, attributes) || {};\n }\n }\n }\n scrollLength += length;\n } else {\n deleteDelta.push(op);\n if (op.retain !== null && typeof op.retain === 'object') {\n const key = Object.keys(op.retain)[0];\n if (key == null) return index;\n this.scroll.updateEmbedAt(index, key, op.retain[key]);\n }\n }\n Object.keys(attributes).forEach(name => {\n this.scroll.formatAt(index, length, name, attributes[name]);\n });\n const prependedLength = isImplicitNewlinePrepended ? 1 : 0;\n const addedLength = isImplicitNewlineAppended ? 1 : 0;\n scrollLength += prependedLength + addedLength;\n deleteDelta.retain(prependedLength);\n deleteDelta.delete(addedLength);\n return index + length + prependedLength + addedLength;\n }, 0);\n deleteDelta.reduce((index, op) => {\n if (typeof op.delete === 'number') {\n this.scroll.deleteAt(index, op.delete);\n return index;\n }\n return index + Op.length(op);\n }, 0);\n this.scroll.batchEnd();\n this.scroll.optimize();\n return this.update(normalizedDelta);\n }\n deleteText(index, length) {\n this.scroll.deleteAt(index, length);\n return this.update(new Delta().retain(index).delete(length));\n }\n formatLine(index, length) {\n let formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.scroll.update();\n Object.keys(formats).forEach(format => {\n this.scroll.lines(index, Math.max(length, 1)).forEach(line => {\n line.format(format, formats[format]);\n });\n });\n this.scroll.optimize();\n const delta = new Delta().retain(index).retain(length, cloneDeep(formats));\n return this.update(delta);\n }\n formatText(index, length) {\n let formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n Object.keys(formats).forEach(format => {\n this.scroll.formatAt(index, length, format, formats[format]);\n });\n const delta = new Delta().retain(index).retain(length, cloneDeep(formats));\n return this.update(delta);\n }\n getContents(index, length) {\n return this.delta.slice(index, index + length);\n }\n getDelta() {\n return this.scroll.lines().reduce((delta, line) => {\n return delta.concat(line.delta());\n }, new Delta());\n }\n getFormat(index) {\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let lines = [];\n let leaves = [];\n if (length === 0) {\n this.scroll.path(index).forEach(path => {\n const [blot] = path;\n if (blot instanceof Block) {\n lines.push(blot);\n } else if (blot instanceof LeafBlot) {\n leaves.push(blot);\n }\n });\n } else {\n lines = this.scroll.lines(index, length);\n leaves = this.scroll.descendants(LeafBlot, index, length);\n }\n const [lineFormats, leafFormats] = [lines, leaves].map(blots => {\n const blot = blots.shift();\n if (blot == null) return {};\n let formats = bubbleFormats(blot);\n while (Object.keys(formats).length > 0) {\n const blot = blots.shift();\n if (blot == null) return formats;\n formats = combineFormats(bubbleFormats(blot), formats);\n }\n return formats;\n });\n return {\n ...lineFormats,\n ...leafFormats\n };\n }\n getHTML(index, length) {\n const [line, lineOffset] = this.scroll.line(index);\n if (line) {\n const lineLength = line.length();\n const isWithinLine = line.length() >= lineOffset + length;\n if (isWithinLine && !(lineOffset === 0 && length === lineLength)) {\n return convertHTML(line, lineOffset, length, true);\n }\n return convertHTML(this.scroll, index, length, true);\n }\n return '';\n }\n getText(index, length) {\n return this.getContents(index, length).filter(op => typeof op.insert === 'string').map(op => op.insert).join('');\n }\n insertContents(index, contents) {\n const normalizedDelta = normalizeDelta(contents);\n const change = new Delta().retain(index).concat(normalizedDelta);\n this.scroll.insertContents(index, normalizedDelta);\n return this.update(change);\n }\n insertEmbed(index, embed, value) {\n this.scroll.insertAt(index, embed, value);\n return this.update(new Delta().retain(index).insert({\n [embed]: value\n }));\n }\n insertText(index, text) {\n let formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n this.scroll.insertAt(index, text);\n Object.keys(formats).forEach(format => {\n this.scroll.formatAt(index, text.length, format, formats[format]);\n });\n return this.update(new Delta().retain(index).insert(text, cloneDeep(formats)));\n }\n isBlank() {\n if (this.scroll.children.length === 0) return true;\n if (this.scroll.children.length > 1) return false;\n const blot = this.scroll.children.head;\n if (blot?.statics.blotName !== Block.blotName) return false;\n const block = blot;\n if (block.children.length > 1) return false;\n return block.children.head instanceof Break;\n }\n removeFormat(index, length) {\n const text = this.getText(index, length);\n const [line, offset] = this.scroll.line(index + length);\n let suffixLength = 0;\n let suffix = new Delta();\n if (line != null) {\n suffixLength = line.length() - offset;\n suffix = line.delta().slice(offset, offset + suffixLength - 1).insert('\\n');\n }\n const contents = this.getContents(index, length + suffixLength);\n const diff = contents.diff(new Delta().insert(text).concat(suffix));\n const delta = new Delta().retain(index).concat(diff);\n return this.applyDelta(delta);\n }\n update(change) {\n let mutations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n let selectionInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n const oldDelta = this.delta;\n if (mutations.length === 1 && mutations[0].type === 'characterData' &&\n // @ts-expect-error Fix me later\n mutations[0].target.data.match(ASCII) && this.scroll.find(mutations[0].target)) {\n // Optimization for character changes\n const textBlot = this.scroll.find(mutations[0].target);\n const formats = bubbleFormats(textBlot);\n const index = textBlot.offset(this.scroll);\n // @ts-expect-error Fix me later\n const oldValue = mutations[0].oldValue.replace(CursorBlot.CONTENTS, '');\n const oldText = new Delta().insert(oldValue);\n // @ts-expect-error\n const newText = new Delta().insert(textBlot.value());\n const relativeSelectionInfo = selectionInfo && {\n oldRange: shiftRange(selectionInfo.oldRange, -index),\n newRange: shiftRange(selectionInfo.newRange, -index)\n };\n const diffDelta = new Delta().retain(index).concat(oldText.diff(newText, relativeSelectionInfo));\n change = diffDelta.reduce((delta, op) => {\n if (op.insert) {\n return delta.insert(op.insert, formats);\n }\n return delta.push(op);\n }, new Delta());\n this.delta = oldDelta.compose(change);\n } else {\n this.delta = this.getDelta();\n if (!change || !isEqual(oldDelta.compose(change), this.delta)) {\n change = oldDelta.diff(this.delta, selectionInfo);\n }\n }\n return change;\n }\n}\nfunction convertListHTML(items, lastIndent, types) {\n if (items.length === 0) {\n const [endTag] = getListType(types.pop());\n if (lastIndent <= 0) {\n return ``;\n }\n return `${convertListHTML([], lastIndent - 1, types)}`;\n }\n const [{\n child,\n offset,\n length,\n indent,\n type\n }, ...rest] = items;\n const [tag, attribute] = getListType(type);\n if (indent > lastIndent) {\n types.push(type);\n if (indent === lastIndent + 1) {\n return `<${tag}>${convertHTML(child, offset, length)}${convertListHTML(rest, indent, types)}`;\n }\n return `<${tag}>
  • ${convertListHTML(items, lastIndent + 1, types)}`;\n }\n const previousType = types[types.length - 1];\n if (indent === lastIndent && type === previousType) {\n return `
  • ${convertHTML(child, offset, length)}${convertListHTML(rest, indent, types)}`;\n }\n const [endTag] = getListType(types.pop());\n return `${convertListHTML(items, lastIndent - 1, types)}`;\n}\nfunction convertHTML(blot, index, length) {\n let isRoot = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if ('html' in blot && typeof blot.html === 'function') {\n return blot.html(index, length);\n }\n if (blot instanceof TextBlot) {\n return escapeText(blot.value().slice(index, index + length));\n }\n if (blot instanceof ParentBlot) {\n // TODO fix API\n if (blot.statics.blotName === 'list-container') {\n const items = [];\n blot.children.forEachAt(index, length, (child, offset, childLength) => {\n const formats = 'formats' in child && typeof child.formats === 'function' ? child.formats() : {};\n items.push({\n child,\n offset,\n length: childLength,\n indent: formats.indent || 0,\n type: formats.list\n });\n });\n return convertListHTML(items, -1, []);\n }\n const parts = [];\n blot.children.forEachAt(index, length, (child, offset, childLength) => {\n parts.push(convertHTML(child, offset, childLength));\n });\n if (isRoot || blot.statics.blotName === 'list') {\n return parts.join('');\n }\n const {\n outerHTML,\n innerHTML\n } = blot.domNode;\n const [start, end] = outerHTML.split(`>${innerHTML}<`);\n // TODO cleanup\n if (start === '${parts.join('')}<${end}`;\n }\n return `${start}>${parts.join('')}<${end}`;\n }\n return blot.domNode instanceof Element ? blot.domNode.outerHTML : '';\n}\nfunction combineFormats(formats, combined) {\n return Object.keys(combined).reduce((merged, name) => {\n if (formats[name] == null) return merged;\n const combinedValue = combined[name];\n if (combinedValue === formats[name]) {\n merged[name] = combinedValue;\n } else if (Array.isArray(combinedValue)) {\n if (combinedValue.indexOf(formats[name]) < 0) {\n merged[name] = combinedValue.concat([formats[name]]);\n } else {\n // If style already exists, don't add to an array, but don't lose other styles\n merged[name] = combinedValue;\n }\n } else {\n merged[name] = [combinedValue, formats[name]];\n }\n return merged;\n }, {});\n}\nfunction getListType(type) {\n const tag = type === 'ordered' ? 'ol' : 'ul';\n switch (type) {\n case 'checked':\n return [tag, ' data-list=\"checked\"'];\n case 'unchecked':\n return [tag, ' data-list=\"unchecked\"'];\n default:\n return [tag, ''];\n }\n}\nfunction normalizeDelta(delta) {\n return delta.reduce((normalizedDelta, op) => {\n if (typeof op.insert === 'string') {\n const text = op.insert.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n return normalizedDelta.insert(text, op.attributes);\n }\n return normalizedDelta.push(op);\n }, new Delta());\n}\nfunction shiftRange(_ref, amount) {\n let {\n index,\n length\n } = _ref;\n return new Range(index + amount, length);\n}\nfunction splitOpLines(ops) {\n const split = [];\n ops.forEach(op => {\n if (typeof op.insert === 'string') {\n const lines = op.insert.split('\\n');\n lines.forEach((line, index) => {\n if (index) split.push({\n insert: '\\n',\n attributes: op.attributes\n });\n if (line) split.push({\n insert: line,\n attributes: op.attributes\n });\n });\n } else {\n split.push(op);\n }\n });\n return split;\n}\nexport default Editor;\n//# sourceMappingURL=editor.js.map","class Module {\n static DEFAULTS = {};\n constructor(quill) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.quill = quill;\n this.options = options;\n }\n}\nexport default Module;\n//# sourceMappingURL=module.js.map","import { EmbedBlot } from 'parchment';\nimport TextBlot from './text.js';\nconst GUARD_TEXT = '\\uFEFF';\nclass Embed extends EmbedBlot {\n constructor(scroll, node) {\n super(scroll, node);\n this.contentNode = document.createElement('span');\n this.contentNode.setAttribute('contenteditable', 'false');\n Array.from(this.domNode.childNodes).forEach(childNode => {\n this.contentNode.appendChild(childNode);\n });\n this.leftGuard = document.createTextNode(GUARD_TEXT);\n this.rightGuard = document.createTextNode(GUARD_TEXT);\n this.domNode.appendChild(this.leftGuard);\n this.domNode.appendChild(this.contentNode);\n this.domNode.appendChild(this.rightGuard);\n }\n index(node, offset) {\n if (node === this.leftGuard) return 0;\n if (node === this.rightGuard) return 1;\n return super.index(node, offset);\n }\n restore(node) {\n let range = null;\n let textNode;\n const text = node.data.split(GUARD_TEXT).join('');\n if (node === this.leftGuard) {\n if (this.prev instanceof TextBlot) {\n const prevLength = this.prev.length();\n this.prev.insertAt(prevLength, text);\n range = {\n startNode: this.prev.domNode,\n startOffset: prevLength + text.length\n };\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(this.scroll.create(textNode), this);\n range = {\n startNode: textNode,\n startOffset: text.length\n };\n }\n } else if (node === this.rightGuard) {\n if (this.next instanceof TextBlot) {\n this.next.insertAt(0, text);\n range = {\n startNode: this.next.domNode,\n startOffset: text.length\n };\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(this.scroll.create(textNode), this.next);\n range = {\n startNode: textNode,\n startOffset: text.length\n };\n }\n }\n node.data = GUARD_TEXT;\n return range;\n }\n update(mutations, context) {\n mutations.forEach(mutation => {\n if (mutation.type === 'characterData' && (mutation.target === this.leftGuard || mutation.target === this.rightGuard)) {\n const range = this.restore(mutation.target);\n if (range) context.range = range;\n }\n });\n }\n}\nexport default Embed;\n//# sourceMappingURL=embed.js.map","import Embed from '../blots/embed.js';\nimport Emitter from './emitter.js';\nclass Composition {\n isComposing = false;\n constructor(scroll, emitter) {\n this.scroll = scroll;\n this.emitter = emitter;\n this.setupListeners();\n }\n setupListeners() {\n this.scroll.domNode.addEventListener('compositionstart', event => {\n if (!this.isComposing) {\n this.handleCompositionStart(event);\n }\n });\n this.scroll.domNode.addEventListener('compositionend', event => {\n if (this.isComposing) {\n // Webkit makes DOM changes after compositionend, so we use microtask to\n // ensure the order.\n // https://bugs.webkit.org/show_bug.cgi?id=31902\n queueMicrotask(() => {\n this.handleCompositionEnd(event);\n });\n }\n });\n }\n handleCompositionStart(event) {\n const blot = event.target instanceof Node ? this.scroll.find(event.target, true) : null;\n if (blot && !(blot instanceof Embed)) {\n this.emitter.emit(Emitter.events.COMPOSITION_BEFORE_START, event);\n this.scroll.batchStart();\n this.emitter.emit(Emitter.events.COMPOSITION_START, event);\n this.isComposing = true;\n }\n }\n handleCompositionEnd(event) {\n this.emitter.emit(Emitter.events.COMPOSITION_BEFORE_END, event);\n this.scroll.batchEnd();\n this.emitter.emit(Emitter.events.COMPOSITION_END, event);\n this.isComposing = false;\n }\n}\nexport default Composition;\n//# sourceMappingURL=composition.js.map","class Theme {\n static DEFAULTS = {\n modules: {}\n };\n static themes = {\n default: Theme\n };\n modules = {};\n constructor(quill, options) {\n this.quill = quill;\n this.options = options;\n }\n init() {\n Object.keys(this.options.modules).forEach(name => {\n if (this.modules[name] == null) {\n this.addModule(name);\n }\n });\n }\n addModule(name) {\n // @ts-expect-error\n const ModuleClass = this.quill.constructor.import(`modules/${name}`);\n this.modules[name] = new ModuleClass(this.quill, this.options.modules[name] || {});\n return this.modules[name];\n }\n}\nexport default Theme;\n//# sourceMappingURL=theme.js.map","const getParentElement = element => element.parentElement || element.getRootNode().host || null;\nconst getElementRect = element => {\n const rect = element.getBoundingClientRect();\n const scaleX = 'offsetWidth' in element && Math.abs(rect.width) / element.offsetWidth || 1;\n const scaleY = 'offsetHeight' in element && Math.abs(rect.height) / element.offsetHeight || 1;\n return {\n top: rect.top,\n right: rect.left + element.clientWidth * scaleX,\n bottom: rect.top + element.clientHeight * scaleY,\n left: rect.left\n };\n};\nconst paddingValueToInt = value => {\n const number = parseInt(value, 10);\n return Number.isNaN(number) ? 0 : number;\n};\n\n// Follow the steps described in https://www.w3.org/TR/cssom-view-1/#element-scrolling-members,\n// assuming that the scroll option is set to 'nearest'.\nconst getScrollDistance = (targetStart, targetEnd, scrollStart, scrollEnd, scrollPaddingStart, scrollPaddingEnd) => {\n if (targetStart < scrollStart && targetEnd > scrollEnd) {\n return 0;\n }\n if (targetStart < scrollStart) {\n return -(scrollStart - targetStart + scrollPaddingStart);\n }\n if (targetEnd > scrollEnd) {\n return targetEnd - targetStart > scrollEnd - scrollStart ? targetStart + scrollPaddingStart - scrollStart : targetEnd - scrollEnd + scrollPaddingEnd;\n }\n return 0;\n};\nconst scrollRectIntoView = (root, targetRect) => {\n const document = root.ownerDocument;\n let rect = targetRect;\n let current = root;\n while (current) {\n const isDocumentBody = current === document.body;\n const bounding = isDocumentBody ? {\n top: 0,\n right: window.visualViewport?.width ?? document.documentElement.clientWidth,\n bottom: window.visualViewport?.height ?? document.documentElement.clientHeight,\n left: 0\n } : getElementRect(current);\n const style = getComputedStyle(current);\n const scrollDistanceX = getScrollDistance(rect.left, rect.right, bounding.left, bounding.right, paddingValueToInt(style.scrollPaddingLeft), paddingValueToInt(style.scrollPaddingRight));\n const scrollDistanceY = getScrollDistance(rect.top, rect.bottom, bounding.top, bounding.bottom, paddingValueToInt(style.scrollPaddingTop), paddingValueToInt(style.scrollPaddingBottom));\n if (scrollDistanceX || scrollDistanceY) {\n if (isDocumentBody) {\n document.defaultView?.scrollBy(scrollDistanceX, scrollDistanceY);\n } else {\n const {\n scrollLeft,\n scrollTop\n } = current;\n if (scrollDistanceY) {\n current.scrollTop += scrollDistanceY;\n }\n if (scrollDistanceX) {\n current.scrollLeft += scrollDistanceX;\n }\n const scrolledLeft = current.scrollLeft - scrollLeft;\n const scrolledTop = current.scrollTop - scrollTop;\n rect = {\n left: rect.left - scrolledLeft,\n top: rect.top - scrolledTop,\n right: rect.right - scrolledLeft,\n bottom: rect.bottom - scrolledTop\n };\n }\n }\n current = isDocumentBody || style.position === 'fixed' ? null : getParentElement(current);\n }\n};\nexport default scrollRectIntoView;\n//# sourceMappingURL=scrollRectIntoView.js.map","import { Registry } from 'parchment';\nconst MAX_REGISTER_ITERATIONS = 100;\nconst CORE_FORMATS = ['block', 'break', 'cursor', 'inline', 'scroll', 'text'];\nconst createRegistryWithFormats = (formats, sourceRegistry, debug) => {\n const registry = new Registry();\n CORE_FORMATS.forEach(name => {\n const coreBlot = sourceRegistry.query(name);\n if (coreBlot) registry.register(coreBlot);\n });\n formats.forEach(name => {\n let format = sourceRegistry.query(name);\n if (!format) {\n debug.error(`Cannot register \"${name}\" specified in \"formats\" config. Are you sure it was registered?`);\n }\n let iterations = 0;\n while (format) {\n registry.register(format);\n format = 'blotName' in format ? format.requiredContainer ?? null : null;\n iterations += 1;\n if (iterations > MAX_REGISTER_ITERATIONS) {\n debug.error(`Cycle detected in registering blot requiredContainer: \"${name}\"`);\n break;\n }\n }\n });\n return registry;\n};\nexport default createRegistryWithFormats;\n//# sourceMappingURL=createRegistryWithFormats.js.map","import { merge } from 'lodash-es';\nimport * as Parchment from 'parchment';\nimport Delta from 'quill-delta';\nimport Editor from './editor.js';\nimport Emitter from './emitter.js';\nimport instances from './instances.js';\nimport logger from './logger.js';\nimport Module from './module.js';\nimport Selection, { Range } from './selection.js';\nimport Composition from './composition.js';\nimport Theme from './theme.js';\nimport scrollRectIntoView from './utils/scrollRectIntoView.js';\nimport createRegistryWithFormats from './utils/createRegistryWithFormats.js';\nconst debug = logger('quill');\nconst globalRegistry = new Parchment.Registry();\nParchment.ParentBlot.uiClass = 'ql-ui';\n\n/**\n * Options for initializing a Quill instance\n */\n\n/**\n * Similar to QuillOptions, but with all properties expanded to their default values,\n * and all selectors resolved to HTMLElements.\n */\n\nclass Quill {\n static DEFAULTS = {\n bounds: null,\n modules: {\n clipboard: true,\n keyboard: true,\n history: true,\n uploader: true\n },\n placeholder: '',\n readOnly: false,\n registry: globalRegistry,\n theme: 'default'\n };\n static events = Emitter.events;\n static sources = Emitter.sources;\n static version = typeof \"2.0.2\" === 'undefined' ? 'dev' : \"2.0.2\";\n static imports = {\n delta: Delta,\n parchment: Parchment,\n 'core/module': Module,\n 'core/theme': Theme\n };\n static debug(limit) {\n if (limit === true) {\n limit = 'log';\n }\n logger.level(limit);\n }\n static find(node) {\n let bubble = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return instances.get(node) || globalRegistry.find(node, bubble);\n }\n static import(name) {\n if (this.imports[name] == null) {\n debug.error(`Cannot import ${name}. Are you sure it was registered?`);\n }\n return this.imports[name];\n }\n static register() {\n if (typeof (arguments.length <= 0 ? undefined : arguments[0]) !== 'string') {\n const target = arguments.length <= 0 ? undefined : arguments[0];\n const overwrite = !!(arguments.length <= 1 ? undefined : arguments[1]);\n const name = 'attrName' in target ? target.attrName : target.blotName;\n if (typeof name === 'string') {\n // Shortcut for formats:\n // register(Blot | Attributor, overwrite)\n this.register(`formats/${name}`, target, overwrite);\n } else {\n Object.keys(target).forEach(key => {\n this.register(key, target[key], overwrite);\n });\n }\n } else {\n const path = arguments.length <= 0 ? undefined : arguments[0];\n const target = arguments.length <= 1 ? undefined : arguments[1];\n const overwrite = !!(arguments.length <= 2 ? undefined : arguments[2]);\n if (this.imports[path] != null && !overwrite) {\n debug.warn(`Overwriting ${path} with`, target);\n }\n this.imports[path] = target;\n if ((path.startsWith('blots/') || path.startsWith('formats/')) && target && typeof target !== 'boolean' && target.blotName !== 'abstract') {\n globalRegistry.register(target);\n }\n if (typeof target.register === 'function') {\n target.register(globalRegistry);\n }\n }\n }\n constructor(container) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.options = expandConfig(container, options);\n this.container = this.options.container;\n if (this.container == null) {\n debug.error('Invalid Quill container', container);\n return;\n }\n if (this.options.debug) {\n Quill.debug(this.options.debug);\n }\n const html = this.container.innerHTML.trim();\n this.container.classList.add('ql-container');\n this.container.innerHTML = '';\n instances.set(this.container, this);\n this.root = this.addContainer('ql-editor');\n this.root.classList.add('ql-blank');\n this.emitter = new Emitter();\n const scrollBlotName = Parchment.ScrollBlot.blotName;\n const ScrollBlot = this.options.registry.query(scrollBlotName);\n if (!ScrollBlot || !('blotName' in ScrollBlot)) {\n throw new Error(`Cannot initialize Quill without \"${scrollBlotName}\" blot`);\n }\n this.scroll = new ScrollBlot(this.options.registry, this.root, {\n emitter: this.emitter\n });\n this.editor = new Editor(this.scroll);\n this.selection = new Selection(this.scroll, this.emitter);\n this.composition = new Composition(this.scroll, this.emitter);\n this.theme = new this.options.theme(this, this.options); // eslint-disable-line new-cap\n this.keyboard = this.theme.addModule('keyboard');\n this.clipboard = this.theme.addModule('clipboard');\n this.history = this.theme.addModule('history');\n this.uploader = this.theme.addModule('uploader');\n this.theme.addModule('input');\n this.theme.addModule('uiNode');\n this.theme.init();\n this.emitter.on(Emitter.events.EDITOR_CHANGE, type => {\n if (type === Emitter.events.TEXT_CHANGE) {\n this.root.classList.toggle('ql-blank', this.editor.isBlank());\n }\n });\n this.emitter.on(Emitter.events.SCROLL_UPDATE, (source, mutations) => {\n const oldRange = this.selection.lastRange;\n const [newRange] = this.selection.getRange();\n const selectionInfo = oldRange && newRange ? {\n oldRange,\n newRange\n } : undefined;\n modify.call(this, () => this.editor.update(null, mutations, selectionInfo), source);\n });\n this.emitter.on(Emitter.events.SCROLL_EMBED_UPDATE, (blot, delta) => {\n const oldRange = this.selection.lastRange;\n const [newRange] = this.selection.getRange();\n const selectionInfo = oldRange && newRange ? {\n oldRange,\n newRange\n } : undefined;\n modify.call(this, () => {\n const change = new Delta().retain(blot.offset(this)).retain({\n [blot.statics.blotName]: delta\n });\n return this.editor.update(change, [], selectionInfo);\n }, Quill.sources.USER);\n });\n if (html) {\n const contents = this.clipboard.convert({\n html: `${html}


    `,\n text: '\\n'\n });\n this.setContents(contents);\n }\n this.history.clear();\n if (this.options.placeholder) {\n this.root.setAttribute('data-placeholder', this.options.placeholder);\n }\n if (this.options.readOnly) {\n this.disable();\n }\n this.allowReadOnlyEdits = false;\n }\n addContainer(container) {\n let refNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (typeof container === 'string') {\n const className = container;\n container = document.createElement('div');\n container.classList.add(className);\n }\n this.container.insertBefore(container, refNode);\n return container;\n }\n blur() {\n this.selection.setRange(null);\n }\n deleteText(index, length, source) {\n // @ts-expect-error\n [index, length,, source] = overload(index, length, source);\n return modify.call(this, () => {\n return this.editor.deleteText(index, length);\n }, source, index, -1 * length);\n }\n disable() {\n this.enable(false);\n }\n editReadOnly(modifier) {\n this.allowReadOnlyEdits = true;\n const value = modifier();\n this.allowReadOnlyEdits = false;\n return value;\n }\n enable() {\n let enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.scroll.enable(enabled);\n this.container.classList.toggle('ql-disabled', !enabled);\n }\n focus() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.selection.focus();\n if (!options.preventScroll) {\n this.scrollSelectionIntoView();\n }\n }\n format(name, value) {\n let source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Emitter.sources.API;\n return modify.call(this, () => {\n const range = this.getSelection(true);\n let change = new Delta();\n if (range == null) return change;\n if (this.scroll.query(name, Parchment.Scope.BLOCK)) {\n change = this.editor.formatLine(range.index, range.length, {\n [name]: value\n });\n } else if (range.length === 0) {\n this.selection.format(name, value);\n return change;\n } else {\n change = this.editor.formatText(range.index, range.length, {\n [name]: value\n });\n }\n this.setSelection(range, Emitter.sources.SILENT);\n return change;\n }, source);\n }\n formatLine(index, length, name, value, source) {\n let formats;\n // eslint-disable-next-line prefer-const\n [index, length, formats, source] = overload(index, length,\n // @ts-expect-error\n name, value, source);\n return modify.call(this, () => {\n return this.editor.formatLine(index, length, formats);\n }, source, index, 0);\n }\n formatText(index, length, name, value, source) {\n let formats;\n // eslint-disable-next-line prefer-const\n [index, length, formats, source] = overload(\n // @ts-expect-error\n index, length, name, value, source);\n return modify.call(this, () => {\n return this.editor.formatText(index, length, formats);\n }, source, index, 0);\n }\n getBounds(index) {\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let bounds = null;\n if (typeof index === 'number') {\n bounds = this.selection.getBounds(index, length);\n } else {\n bounds = this.selection.getBounds(index.index, index.length);\n }\n if (!bounds) return null;\n const containerBounds = this.container.getBoundingClientRect();\n return {\n bottom: bounds.bottom - containerBounds.top,\n height: bounds.height,\n left: bounds.left - containerBounds.left,\n right: bounds.right - containerBounds.left,\n top: bounds.top - containerBounds.top,\n width: bounds.width\n };\n }\n getContents() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n [index, length] = overload(index, length);\n return this.editor.getContents(index, length);\n }\n getFormat() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getSelection(true);\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (typeof index === 'number') {\n return this.editor.getFormat(index, length);\n }\n return this.editor.getFormat(index.index, index.length);\n }\n getIndex(blot) {\n return blot.offset(this.scroll);\n }\n getLength() {\n return this.scroll.length();\n }\n getLeaf(index) {\n return this.scroll.leaf(index);\n }\n getLine(index) {\n return this.scroll.line(index);\n }\n getLines() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n if (typeof index !== 'number') {\n return this.scroll.lines(index.index, index.length);\n }\n return this.scroll.lines(index, length);\n }\n getModule(name) {\n return this.theme.modules[name];\n }\n getSelection() {\n let focus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (focus) this.focus();\n this.update(); // Make sure we access getRange with editor in consistent state\n return this.selection.getRange()[0];\n }\n getSemanticHTML() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let length = arguments.length > 1 ? arguments[1] : undefined;\n if (typeof index === 'number') {\n length = length ?? this.getLength() - index;\n }\n // @ts-expect-error\n [index, length] = overload(index, length);\n return this.editor.getHTML(index, length);\n }\n getText() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let length = arguments.length > 1 ? arguments[1] : undefined;\n if (typeof index === 'number') {\n length = length ?? this.getLength() - index;\n }\n // @ts-expect-error\n [index, length] = overload(index, length);\n return this.editor.getText(index, length);\n }\n hasFocus() {\n return this.selection.hasFocus();\n }\n insertEmbed(index, embed, value) {\n let source = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Quill.sources.API;\n return modify.call(this, () => {\n return this.editor.insertEmbed(index, embed, value);\n }, source, index);\n }\n insertText(index, text, name, value, source) {\n let formats;\n // eslint-disable-next-line prefer-const\n // @ts-expect-error\n [index,, formats, source] = overload(index, 0, name, value, source);\n return modify.call(this, () => {\n return this.editor.insertText(index, text, formats);\n }, source, index, text.length);\n }\n isEnabled() {\n return this.scroll.isEnabled();\n }\n off() {\n return this.emitter.off(...arguments);\n }\n on() {\n return this.emitter.on(...arguments);\n }\n once() {\n return this.emitter.once(...arguments);\n }\n removeFormat(index, length, source) {\n [index, length,, source] = overload(index, length, source);\n return modify.call(this, () => {\n return this.editor.removeFormat(index, length);\n }, source, index);\n }\n scrollRectIntoView(rect) {\n scrollRectIntoView(this.root, rect);\n }\n\n /**\n * @deprecated Use Quill#scrollSelectionIntoView() instead.\n */\n scrollIntoView() {\n console.warn('Quill#scrollIntoView() has been deprecated and will be removed in the near future. Please use Quill#scrollSelectionIntoView() instead.');\n this.scrollSelectionIntoView();\n }\n\n /**\n * Scroll the current selection into the visible area.\n * If the selection is already visible, no scrolling will occur.\n */\n scrollSelectionIntoView() {\n const range = this.selection.lastRange;\n const bounds = range && this.selection.getBounds(range.index, range.length);\n if (bounds) {\n this.scrollRectIntoView(bounds);\n }\n }\n setContents(delta) {\n let source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Emitter.sources.API;\n return modify.call(this, () => {\n delta = new Delta(delta);\n const length = this.getLength();\n // Quill will set empty editor to \\n\n const delete1 = this.editor.deleteText(0, length);\n const applied = this.editor.insertContents(0, delta);\n // Remove extra \\n from empty editor initialization\n const delete2 = this.editor.deleteText(this.getLength() - 1, 1);\n return delete1.compose(applied).compose(delete2);\n }, source);\n }\n setSelection(index, length, source) {\n if (index == null) {\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/22609\n this.selection.setRange(null, length || Quill.sources.API);\n } else {\n // @ts-expect-error\n [index, length,, source] = overload(index, length, source);\n this.selection.setRange(new Range(Math.max(0, index), length), source);\n if (source !== Emitter.sources.SILENT) {\n this.scrollSelectionIntoView();\n }\n }\n }\n setText(text) {\n let source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Emitter.sources.API;\n const delta = new Delta().insert(text);\n return this.setContents(delta, source);\n }\n update() {\n let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Emitter.sources.USER;\n const change = this.scroll.update(source); // Will update selection before selection.update() does if text changes\n this.selection.update(source);\n // TODO this is usually undefined\n return change;\n }\n updateContents(delta) {\n let source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Emitter.sources.API;\n return modify.call(this, () => {\n delta = new Delta(delta);\n return this.editor.applyDelta(delta);\n }, source, true);\n }\n}\nfunction resolveSelector(selector) {\n return typeof selector === 'string' ? document.querySelector(selector) : selector;\n}\nfunction expandModuleConfig(config) {\n return Object.entries(config ?? {}).reduce((expanded, _ref) => {\n let [key, value] = _ref;\n return {\n ...expanded,\n [key]: value === true ? {} : value\n };\n }, {});\n}\nfunction omitUndefinedValuesFromOptions(obj) {\n return Object.fromEntries(Object.entries(obj).filter(entry => entry[1] !== undefined));\n}\nfunction expandConfig(containerOrSelector, options) {\n const container = resolveSelector(containerOrSelector);\n if (!container) {\n throw new Error('Invalid Quill container');\n }\n const shouldUseDefaultTheme = !options.theme || options.theme === Quill.DEFAULTS.theme;\n const theme = shouldUseDefaultTheme ? Theme : Quill.import(`themes/${options.theme}`);\n if (!theme) {\n throw new Error(`Invalid theme ${options.theme}. Did you register it?`);\n }\n const {\n modules: quillModuleDefaults,\n ...quillDefaults\n } = Quill.DEFAULTS;\n const {\n modules: themeModuleDefaults,\n ...themeDefaults\n } = theme.DEFAULTS;\n let userModuleOptions = expandModuleConfig(options.modules);\n // Special case toolbar shorthand\n if (userModuleOptions != null && userModuleOptions.toolbar && userModuleOptions.toolbar.constructor !== Object) {\n userModuleOptions = {\n ...userModuleOptions,\n toolbar: {\n container: userModuleOptions.toolbar\n }\n };\n }\n const modules = merge({}, expandModuleConfig(quillModuleDefaults), expandModuleConfig(themeModuleDefaults), userModuleOptions);\n const config = {\n ...quillDefaults,\n ...omitUndefinedValuesFromOptions(themeDefaults),\n ...omitUndefinedValuesFromOptions(options)\n };\n let registry = options.registry;\n if (registry) {\n if (options.formats) {\n debug.warn('Ignoring \"formats\" option because \"registry\" is specified');\n }\n } else {\n registry = options.formats ? createRegistryWithFormats(options.formats, config.registry, debug) : config.registry;\n }\n return {\n ...config,\n registry,\n container,\n theme,\n modules: Object.entries(modules).reduce((modulesWithDefaults, _ref2) => {\n let [name, value] = _ref2;\n if (!value) return modulesWithDefaults;\n const moduleClass = Quill.import(`modules/${name}`);\n if (moduleClass == null) {\n debug.error(`Cannot load ${name} module. Are you sure you registered it?`);\n return modulesWithDefaults;\n }\n return {\n ...modulesWithDefaults,\n // @ts-expect-error\n [name]: merge({}, moduleClass.DEFAULTS || {}, value)\n };\n }, {}),\n bounds: resolveSelector(config.bounds)\n };\n}\n\n// Handle selection preservation and TEXT_CHANGE emission\n// common to modification APIs\nfunction modify(modifier, source, index, shift) {\n if (!this.isEnabled() && source === Emitter.sources.USER && !this.allowReadOnlyEdits) {\n return new Delta();\n }\n let range = index == null ? null : this.getSelection();\n const oldDelta = this.editor.delta;\n const change = modifier();\n if (range != null) {\n if (index === true) {\n index = range.index; // eslint-disable-line prefer-destructuring\n }\n if (shift == null) {\n range = shiftRange(range, change, source);\n } else if (shift !== 0) {\n // @ts-expect-error index should always be number\n range = shiftRange(range, index, shift, source);\n }\n this.setSelection(range, Emitter.sources.SILENT);\n }\n if (change.length() > 0) {\n const args = [Emitter.events.TEXT_CHANGE, change, oldDelta, source];\n this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n if (source !== Emitter.sources.SILENT) {\n this.emitter.emit(...args);\n }\n }\n return change;\n}\nfunction overload(index, length, name, value, source) {\n let formats = {};\n // @ts-expect-error\n if (typeof index.index === 'number' && typeof index.length === 'number') {\n // Allow for throwaway end (used by insertText/insertEmbed)\n if (typeof length !== 'number') {\n // @ts-expect-error\n source = value;\n value = name;\n name = length;\n // @ts-expect-error\n length = index.length; // eslint-disable-line prefer-destructuring\n // @ts-expect-error\n index = index.index; // eslint-disable-line prefer-destructuring\n } else {\n // @ts-expect-error\n length = index.length; // eslint-disable-line prefer-destructuring\n // @ts-expect-error\n index = index.index; // eslint-disable-line prefer-destructuring\n }\n } else if (typeof length !== 'number') {\n // @ts-expect-error\n source = value;\n value = name;\n name = length;\n length = 0;\n }\n // Handle format being object, two format name/value strings or excluded\n if (typeof name === 'object') {\n // @ts-expect-error Fix me later\n formats = name;\n // @ts-expect-error\n source = value;\n } else if (typeof name === 'string') {\n if (value != null) {\n formats[name] = value;\n } else {\n // @ts-expect-error\n source = name;\n }\n }\n // Handle optional source\n source = source || Emitter.sources.API;\n // @ts-expect-error\n return [index, length, formats, source];\n}\nfunction shiftRange(range, index, lengthOrSource, source) {\n const length = typeof lengthOrSource === 'number' ? lengthOrSource : 0;\n if (range == null) return null;\n let start;\n let end;\n // @ts-expect-error -- TODO: add a better type guard around `index`\n if (index && typeof index.transformPosition === 'function') {\n [start, end] = [range.index, range.index + range.length].map(pos =>\n // @ts-expect-error -- TODO: add a better type guard around `index`\n index.transformPosition(pos, source !== Emitter.sources.USER));\n } else {\n [start, end] = [range.index, range.index + range.length].map(pos => {\n // @ts-expect-error -- TODO: add a better type guard around `index`\n if (pos < index || pos === index && source === Emitter.sources.USER) return pos;\n if (length >= 0) {\n return pos + length;\n }\n // @ts-expect-error -- TODO: add a better type guard around `index`\n return Math.max(index, pos + length);\n });\n }\n return new Range(start, end - start);\n}\nexport { Parchment, Range };\nexport { globalRegistry, expandConfig, overload, Quill as default };\n//# sourceMappingURL=quill.js.map","import { ContainerBlot } from 'parchment';\nclass Container extends ContainerBlot {}\nexport default Container;\n//# sourceMappingURL=container.js.map","import { ContainerBlot, LeafBlot, Scope, ScrollBlot } from 'parchment';\nimport Delta, { AttributeMap, Op } from 'quill-delta';\nimport Emitter from '../core/emitter.js';\nimport Block, { BlockEmbed, bubbleFormats } from './block.js';\nimport Break from './break.js';\nimport Container from './container.js';\nfunction isLine(blot) {\n return blot instanceof Block || blot instanceof BlockEmbed;\n}\nfunction isUpdatable(blot) {\n return typeof blot.updateContent === 'function';\n}\nclass Scroll extends ScrollBlot {\n static blotName = 'scroll';\n static className = 'ql-editor';\n static tagName = 'DIV';\n static defaultChild = Block;\n static allowedChildren = [Block, BlockEmbed, Container];\n constructor(registry, domNode, _ref) {\n let {\n emitter\n } = _ref;\n super(registry, domNode);\n this.emitter = emitter;\n this.batch = false;\n this.optimize();\n this.enable();\n this.domNode.addEventListener('dragstart', e => this.handleDragStart(e));\n }\n batchStart() {\n if (!Array.isArray(this.batch)) {\n this.batch = [];\n }\n }\n batchEnd() {\n if (!this.batch) return;\n const mutations = this.batch;\n this.batch = false;\n this.update(mutations);\n }\n emitMount(blot) {\n this.emitter.emit(Emitter.events.SCROLL_BLOT_MOUNT, blot);\n }\n emitUnmount(blot) {\n this.emitter.emit(Emitter.events.SCROLL_BLOT_UNMOUNT, blot);\n }\n emitEmbedUpdate(blot, change) {\n this.emitter.emit(Emitter.events.SCROLL_EMBED_UPDATE, blot, change);\n }\n deleteAt(index, length) {\n const [first, offset] = this.line(index);\n const [last] = this.line(index + length);\n super.deleteAt(index, length);\n if (last != null && first !== last && offset > 0) {\n if (first instanceof BlockEmbed || last instanceof BlockEmbed) {\n this.optimize();\n return;\n }\n const ref = last.children.head instanceof Break ? null : last.children.head;\n // @ts-expect-error\n first.moveChildren(last, ref);\n // @ts-expect-error\n first.remove();\n }\n this.optimize();\n }\n enable() {\n let enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n this.domNode.setAttribute('contenteditable', enabled ? 'true' : 'false');\n }\n formatAt(index, length, format, value) {\n super.formatAt(index, length, format, value);\n this.optimize();\n }\n insertAt(index, value, def) {\n if (index >= this.length()) {\n if (def == null || this.scroll.query(value, Scope.BLOCK) == null) {\n const blot = this.scroll.create(this.statics.defaultChild.blotName);\n this.appendChild(blot);\n if (def == null && value.endsWith('\\n')) {\n blot.insertAt(0, value.slice(0, -1), def);\n } else {\n blot.insertAt(0, value, def);\n }\n } else {\n const embed = this.scroll.create(value, def);\n this.appendChild(embed);\n }\n } else {\n super.insertAt(index, value, def);\n }\n this.optimize();\n }\n insertBefore(blot, ref) {\n if (blot.statics.scope === Scope.INLINE_BLOT) {\n const wrapper = this.scroll.create(this.statics.defaultChild.blotName);\n wrapper.appendChild(blot);\n super.insertBefore(wrapper, ref);\n } else {\n super.insertBefore(blot, ref);\n }\n }\n insertContents(index, delta) {\n const renderBlocks = this.deltaToRenderBlocks(delta.concat(new Delta().insert('\\n')));\n const last = renderBlocks.pop();\n if (last == null) return;\n this.batchStart();\n const first = renderBlocks.shift();\n if (first) {\n const shouldInsertNewlineChar = first.type === 'block' && (first.delta.length() === 0 || !this.descendant(BlockEmbed, index)[0] && index < this.length());\n const delta = first.type === 'block' ? first.delta : new Delta().insert({\n [first.key]: first.value\n });\n insertInlineContents(this, index, delta);\n const newlineCharLength = first.type === 'block' ? 1 : 0;\n const lineEndIndex = index + delta.length() + newlineCharLength;\n if (shouldInsertNewlineChar) {\n this.insertAt(lineEndIndex - 1, '\\n');\n }\n const formats = bubbleFormats(this.line(index)[0]);\n const attributes = AttributeMap.diff(formats, first.attributes) || {};\n Object.keys(attributes).forEach(name => {\n this.formatAt(lineEndIndex - 1, 1, name, attributes[name]);\n });\n index = lineEndIndex;\n }\n let [refBlot, refBlotOffset] = this.children.find(index);\n if (renderBlocks.length) {\n if (refBlot) {\n refBlot = refBlot.split(refBlotOffset);\n refBlotOffset = 0;\n }\n renderBlocks.forEach(renderBlock => {\n if (renderBlock.type === 'block') {\n const block = this.createBlock(renderBlock.attributes, refBlot || undefined);\n insertInlineContents(block, 0, renderBlock.delta);\n } else {\n const blockEmbed = this.create(renderBlock.key, renderBlock.value);\n this.insertBefore(blockEmbed, refBlot || undefined);\n Object.keys(renderBlock.attributes).forEach(name => {\n blockEmbed.format(name, renderBlock.attributes[name]);\n });\n }\n });\n }\n if (last.type === 'block' && last.delta.length()) {\n const offset = refBlot ? refBlot.offset(refBlot.scroll) + refBlotOffset : this.length();\n insertInlineContents(this, offset, last.delta);\n }\n this.batchEnd();\n this.optimize();\n }\n isEnabled() {\n return this.domNode.getAttribute('contenteditable') === 'true';\n }\n leaf(index) {\n const last = this.path(index).pop();\n if (!last) {\n return [null, -1];\n }\n const [blot, offset] = last;\n return blot instanceof LeafBlot ? [blot, offset] : [null, -1];\n }\n line(index) {\n if (index === this.length()) {\n return this.line(index - 1);\n }\n // @ts-expect-error TODO: make descendant() generic\n return this.descendant(isLine, index);\n }\n lines() {\n let index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n const getLines = (blot, blotIndex, blotLength) => {\n let lines = [];\n let lengthLeft = blotLength;\n blot.children.forEachAt(blotIndex, blotLength, (child, childIndex, childLength) => {\n if (isLine(child)) {\n lines.push(child);\n } else if (child instanceof ContainerBlot) {\n lines = lines.concat(getLines(child, childIndex, lengthLeft));\n }\n lengthLeft -= childLength;\n });\n return lines;\n };\n return getLines(this, index, length);\n }\n optimize() {\n let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this.batch) return;\n super.optimize(mutations, context);\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_OPTIMIZE, mutations, context);\n }\n }\n path(index) {\n return super.path(index).slice(1); // Exclude self\n }\n remove() {\n // Never remove self\n }\n update(mutations) {\n if (this.batch) {\n if (Array.isArray(mutations)) {\n this.batch = this.batch.concat(mutations);\n }\n return;\n }\n let source = Emitter.sources.USER;\n if (typeof mutations === 'string') {\n source = mutations;\n }\n if (!Array.isArray(mutations)) {\n mutations = this.observer.takeRecords();\n }\n mutations = mutations.filter(_ref2 => {\n let {\n target\n } = _ref2;\n const blot = this.find(target, true);\n return blot && !isUpdatable(blot);\n });\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_BEFORE_UPDATE, source, mutations);\n }\n super.update(mutations.concat([])); // pass copy\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_UPDATE, source, mutations);\n }\n }\n updateEmbedAt(index, key, change) {\n // Currently it only supports top-level embeds (BlockEmbed).\n // We can update `ParentBlot` in parchment to support inline embeds.\n const [blot] = this.descendant(b => b instanceof BlockEmbed, index);\n if (blot && blot.statics.blotName === key && isUpdatable(blot)) {\n blot.updateContent(change);\n }\n }\n handleDragStart(event) {\n event.preventDefault();\n }\n deltaToRenderBlocks(delta) {\n const renderBlocks = [];\n let currentBlockDelta = new Delta();\n delta.forEach(op => {\n const insert = op?.insert;\n if (!insert) return;\n if (typeof insert === 'string') {\n const splitted = insert.split('\\n');\n splitted.slice(0, -1).forEach(text => {\n currentBlockDelta.insert(text, op.attributes);\n renderBlocks.push({\n type: 'block',\n delta: currentBlockDelta,\n attributes: op.attributes ?? {}\n });\n currentBlockDelta = new Delta();\n });\n const last = splitted[splitted.length - 1];\n if (last) {\n currentBlockDelta.insert(last, op.attributes);\n }\n } else {\n const key = Object.keys(insert)[0];\n if (!key) return;\n if (this.query(key, Scope.INLINE)) {\n currentBlockDelta.push(op);\n } else {\n if (currentBlockDelta.length()) {\n renderBlocks.push({\n type: 'block',\n delta: currentBlockDelta,\n attributes: {}\n });\n }\n currentBlockDelta = new Delta();\n renderBlocks.push({\n type: 'blockEmbed',\n key,\n value: insert[key],\n attributes: op.attributes ?? {}\n });\n }\n }\n });\n if (currentBlockDelta.length()) {\n renderBlocks.push({\n type: 'block',\n delta: currentBlockDelta,\n attributes: {}\n });\n }\n return renderBlocks;\n }\n createBlock(attributes, refBlot) {\n let blotName;\n const formats = {};\n Object.entries(attributes).forEach(_ref3 => {\n let [key, value] = _ref3;\n const isBlockBlot = this.query(key, Scope.BLOCK & Scope.BLOT) != null;\n if (isBlockBlot) {\n blotName = key;\n } else {\n formats[key] = value;\n }\n });\n const block = this.create(blotName || this.statics.defaultChild.blotName, blotName ? attributes[blotName] : undefined);\n this.insertBefore(block, refBlot || undefined);\n const length = block.length();\n Object.entries(formats).forEach(_ref4 => {\n let [key, value] = _ref4;\n block.formatAt(0, length, key, value);\n });\n return block;\n }\n}\nfunction insertInlineContents(parent, index, inlineContents) {\n inlineContents.reduce((index, op) => {\n const length = Op.length(op);\n let attributes = op.attributes || {};\n if (op.insert != null) {\n if (typeof op.insert === 'string') {\n const text = op.insert;\n parent.insertAt(index, text);\n const [leaf] = parent.descendant(LeafBlot, index);\n const formats = bubbleFormats(leaf);\n attributes = AttributeMap.diff(formats, attributes) || {};\n } else if (typeof op.insert === 'object') {\n const key = Object.keys(op.insert)[0]; // There should only be one key\n if (key == null) return index;\n parent.insertAt(index, key, op.insert[key]);\n const isInlineEmbed = parent.scroll.query(key, Scope.INLINE) != null;\n if (isInlineEmbed) {\n const [leaf] = parent.descendant(LeafBlot, index);\n const formats = bubbleFormats(leaf);\n attributes = AttributeMap.diff(formats, attributes) || {};\n }\n }\n }\n Object.keys(attributes).forEach(key => {\n parent.formatAt(index, length, key, attributes[key]);\n });\n return index + length;\n }, index);\n}\nexport default Scroll;\n//# sourceMappingURL=scroll.js.map","import { Attributor, ClassAttributor, Scope, StyleAttributor } from 'parchment';\nconst config = {\n scope: Scope.BLOCK,\n whitelist: ['right', 'center', 'justify']\n};\nconst AlignAttribute = new Attributor('align', 'align', config);\nconst AlignClass = new ClassAttributor('align', 'ql-align', config);\nconst AlignStyle = new StyleAttributor('align', 'text-align', config);\nexport { AlignAttribute, AlignClass, AlignStyle };\n//# sourceMappingURL=align.js.map","import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\nclass ColorAttributor extends StyleAttributor {\n value(domNode) {\n let value = super.value(domNode);\n if (!value.startsWith('rgb(')) return value;\n value = value.replace(/^[^\\d]+/, '').replace(/[^\\d]+$/, '');\n const hex = value.split(',').map(component => `00${parseInt(component, 10).toString(16)}`.slice(-2)).join('');\n return `#${hex}`;\n }\n}\nconst ColorClass = new ClassAttributor('color', 'ql-color', {\n scope: Scope.INLINE\n});\nconst ColorStyle = new ColorAttributor('color', 'color', {\n scope: Scope.INLINE\n});\nexport { ColorAttributor, ColorClass, ColorStyle };\n//# sourceMappingURL=color.js.map","import { ClassAttributor, Scope } from 'parchment';\nimport { ColorAttributor } from './color.js';\nconst BackgroundClass = new ClassAttributor('background', 'ql-bg', {\n scope: Scope.INLINE\n});\nconst BackgroundStyle = new ColorAttributor('background', 'background-color', {\n scope: Scope.INLINE\n});\nexport { BackgroundClass, BackgroundStyle };\n//# sourceMappingURL=background.js.map","import Block from '../blots/block.js';\nimport Break from '../blots/break.js';\nimport Cursor from '../blots/cursor.js';\nimport Inline from '../blots/inline.js';\nimport TextBlot, { escapeText } from '../blots/text.js';\nimport Container from '../blots/container.js';\nimport Quill from '../core/quill.js';\nclass CodeBlockContainer extends Container {\n static create(value) {\n const domNode = super.create(value);\n domNode.setAttribute('spellcheck', 'false');\n return domNode;\n }\n code(index, length) {\n return this.children\n // @ts-expect-error\n .map(child => child.length() <= 1 ? '' : child.domNode.innerText).join('\\n').slice(index, index + length);\n }\n html(index, length) {\n // `\\n`s are needed in order to support empty lines at the beginning and the end.\n // https://html.spec.whatwg.org/multipage/syntax.html#element-restrictions\n return `
    \\n${escapeText(this.code(index, length))}\\n
    `;\n }\n}\nclass CodeBlock extends Block {\n static TAB = ' ';\n static register() {\n Quill.register(CodeBlockContainer);\n }\n}\nclass Code extends Inline {}\nCode.blotName = 'code';\nCode.tagName = 'CODE';\nCodeBlock.blotName = 'code-block';\nCodeBlock.className = 'ql-code-block';\nCodeBlock.tagName = 'DIV';\nCodeBlockContainer.blotName = 'code-block-container';\nCodeBlockContainer.className = 'ql-code-block-container';\nCodeBlockContainer.tagName = 'DIV';\nCodeBlockContainer.allowedChildren = [CodeBlock];\nCodeBlock.allowedChildren = [TextBlot, Break, Cursor];\nCodeBlock.requiredContainer = CodeBlockContainer;\nexport { Code, CodeBlockContainer, CodeBlock as default };\n//# sourceMappingURL=code.js.map","import { Attributor, ClassAttributor, Scope, StyleAttributor } from 'parchment';\nconst config = {\n scope: Scope.BLOCK,\n whitelist: ['rtl']\n};\nconst DirectionAttribute = new Attributor('direction', 'dir', config);\nconst DirectionClass = new ClassAttributor('direction', 'ql-direction', config);\nconst DirectionStyle = new StyleAttributor('direction', 'direction', config);\nexport { DirectionAttribute, DirectionClass, DirectionStyle };\n//# sourceMappingURL=direction.js.map","import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\nconst config = {\n scope: Scope.INLINE,\n whitelist: ['serif', 'monospace']\n};\nconst FontClass = new ClassAttributor('font', 'ql-font', config);\nclass FontStyleAttributor extends StyleAttributor {\n value(node) {\n return super.value(node).replace(/[\"']/g, '');\n }\n}\nconst FontStyle = new FontStyleAttributor('font', 'font-family', config);\nexport { FontStyle, FontClass };\n//# sourceMappingURL=font.js.map","import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\nconst SizeClass = new ClassAttributor('size', 'ql-size', {\n scope: Scope.INLINE,\n whitelist: ['small', 'large', 'huge']\n});\nconst SizeStyle = new StyleAttributor('size', 'font-size', {\n scope: Scope.INLINE,\n whitelist: ['10px', '18px', '32px']\n});\nexport { SizeClass, SizeStyle };\n//# sourceMappingURL=size.js.map","import { cloneDeep, isEqual } from 'lodash-es';\nimport Delta, { AttributeMap } from 'quill-delta';\nimport { EmbedBlot, Scope, TextBlot } from 'parchment';\nimport Quill from '../core/quill.js';\nimport logger from '../core/logger.js';\nimport Module from '../core/module.js';\nconst debug = logger('quill:keyboard');\nconst SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';\nclass Keyboard extends Module {\n static match(evt, binding) {\n if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(key => {\n return !!binding[key] !== evt[key] && binding[key] !== null;\n })) {\n return false;\n }\n return binding.key === evt.key || binding.key === evt.which;\n }\n constructor(quill, options) {\n super(quill, options);\n this.bindings = {};\n // @ts-expect-error Fix me later\n Object.keys(this.options.bindings).forEach(name => {\n // @ts-expect-error Fix me later\n if (this.options.bindings[name]) {\n // @ts-expect-error Fix me later\n this.addBinding(this.options.bindings[name]);\n }\n });\n this.addBinding({\n key: 'Enter',\n shiftKey: null\n }, this.handleEnter);\n this.addBinding({\n key: 'Enter',\n metaKey: null,\n ctrlKey: null,\n altKey: null\n }, () => {});\n if (/Firefox/i.test(navigator.userAgent)) {\n // Need to handle delete and backspace for Firefox in the general case #1171\n this.addBinding({\n key: 'Backspace'\n }, {\n collapsed: true\n }, this.handleBackspace);\n this.addBinding({\n key: 'Delete'\n }, {\n collapsed: true\n }, this.handleDelete);\n } else {\n this.addBinding({\n key: 'Backspace'\n }, {\n collapsed: true,\n prefix: /^.?$/\n }, this.handleBackspace);\n this.addBinding({\n key: 'Delete'\n }, {\n collapsed: true,\n suffix: /^.?$/\n }, this.handleDelete);\n }\n this.addBinding({\n key: 'Backspace'\n }, {\n collapsed: false\n }, this.handleDeleteRange);\n this.addBinding({\n key: 'Delete'\n }, {\n collapsed: false\n }, this.handleDeleteRange);\n this.addBinding({\n key: 'Backspace',\n altKey: null,\n ctrlKey: null,\n metaKey: null,\n shiftKey: null\n }, {\n collapsed: true,\n offset: 0\n }, this.handleBackspace);\n this.listen();\n }\n addBinding(keyBinding) {\n let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const binding = normalize(keyBinding);\n if (binding == null) {\n debug.warn('Attempted to add invalid keyboard binding', binding);\n return;\n }\n if (typeof context === 'function') {\n context = {\n handler: context\n };\n }\n if (typeof handler === 'function') {\n handler = {\n handler\n };\n }\n const keys = Array.isArray(binding.key) ? binding.key : [binding.key];\n keys.forEach(key => {\n const singleBinding = {\n ...binding,\n key,\n ...context,\n ...handler\n };\n this.bindings[singleBinding.key] = this.bindings[singleBinding.key] || [];\n this.bindings[singleBinding.key].push(singleBinding);\n });\n }\n listen() {\n this.quill.root.addEventListener('keydown', evt => {\n if (evt.defaultPrevented || evt.isComposing) return;\n\n // evt.isComposing is false when pressing Enter/Backspace when composing in Safari\n // https://bugs.webkit.org/show_bug.cgi?id=165004\n const isComposing = evt.keyCode === 229 && (evt.key === 'Enter' || evt.key === 'Backspace');\n if (isComposing) return;\n const bindings = (this.bindings[evt.key] || []).concat(this.bindings[evt.which] || []);\n const matches = bindings.filter(binding => Keyboard.match(evt, binding));\n if (matches.length === 0) return;\n // @ts-expect-error\n const blot = Quill.find(evt.target, true);\n if (blot && blot.scroll !== this.quill.scroll) return;\n const range = this.quill.getSelection();\n if (range == null || !this.quill.hasFocus()) return;\n const [line, offset] = this.quill.getLine(range.index);\n const [leafStart, offsetStart] = this.quill.getLeaf(range.index);\n const [leafEnd, offsetEnd] = range.length === 0 ? [leafStart, offsetStart] : this.quill.getLeaf(range.index + range.length);\n const prefixText = leafStart instanceof TextBlot ? leafStart.value().slice(0, offsetStart) : '';\n const suffixText = leafEnd instanceof TextBlot ? leafEnd.value().slice(offsetEnd) : '';\n const curContext = {\n collapsed: range.length === 0,\n // @ts-expect-error Fix me later\n empty: range.length === 0 && line.length() <= 1,\n format: this.quill.getFormat(range),\n line,\n offset,\n prefix: prefixText,\n suffix: suffixText,\n event: evt\n };\n const prevented = matches.some(binding => {\n if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) {\n return false;\n }\n if (binding.empty != null && binding.empty !== curContext.empty) {\n return false;\n }\n if (binding.offset != null && binding.offset !== curContext.offset) {\n return false;\n }\n if (Array.isArray(binding.format)) {\n // any format is present\n if (binding.format.every(name => curContext.format[name] == null)) {\n return false;\n }\n } else if (typeof binding.format === 'object') {\n // all formats must match\n if (!Object.keys(binding.format).every(name => {\n // @ts-expect-error Fix me later\n if (binding.format[name] === true) return curContext.format[name] != null;\n // @ts-expect-error Fix me later\n if (binding.format[name] === false) return curContext.format[name] == null;\n // @ts-expect-error Fix me later\n return isEqual(binding.format[name], curContext.format[name]);\n })) {\n return false;\n }\n }\n if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) {\n return false;\n }\n if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) {\n return false;\n }\n // @ts-expect-error Fix me later\n return binding.handler.call(this, range, curContext, binding) !== true;\n });\n if (prevented) {\n evt.preventDefault();\n }\n });\n }\n handleBackspace(range, context) {\n // Check for astral symbols\n const length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix) ? 2 : 1;\n if (range.index === 0 || this.quill.getLength() <= 1) return;\n let formats = {};\n const [line] = this.quill.getLine(range.index);\n let delta = new Delta().retain(range.index - length).delete(length);\n if (context.offset === 0) {\n // Always deleting newline here, length always 1\n const [prev] = this.quill.getLine(range.index - 1);\n if (prev) {\n const isPrevLineEmpty = prev.statics.blotName === 'block' && prev.length() <= 1;\n if (!isPrevLineEmpty) {\n // @ts-expect-error Fix me later\n const curFormats = line.formats();\n const prevFormats = this.quill.getFormat(range.index - 1, 1);\n formats = AttributeMap.diff(curFormats, prevFormats) || {};\n if (Object.keys(formats).length > 0) {\n // line.length() - 1 targets \\n in line, another -1 for newline being deleted\n const formatDelta = new Delta()\n // @ts-expect-error Fix me later\n .retain(range.index + line.length() - 2).retain(1, formats);\n delta = delta.compose(formatDelta);\n }\n }\n }\n }\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.focus();\n }\n handleDelete(range, context) {\n // Check for astral symbols\n const length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix) ? 2 : 1;\n if (range.index >= this.quill.getLength() - length) return;\n let formats = {};\n const [line] = this.quill.getLine(range.index);\n let delta = new Delta().retain(range.index).delete(length);\n // @ts-expect-error Fix me later\n if (context.offset >= line.length() - 1) {\n const [next] = this.quill.getLine(range.index + 1);\n if (next) {\n // @ts-expect-error Fix me later\n const curFormats = line.formats();\n const nextFormats = this.quill.getFormat(range.index, 1);\n formats = AttributeMap.diff(curFormats, nextFormats) || {};\n if (Object.keys(formats).length > 0) {\n delta = delta.retain(next.length() - 1).retain(1, formats);\n }\n }\n }\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.focus();\n }\n handleDeleteRange(range) {\n deleteRange({\n range,\n quill: this.quill\n });\n this.quill.focus();\n }\n handleEnter(range, context) {\n const lineFormats = Object.keys(context.format).reduce((formats, format) => {\n if (this.quill.scroll.query(format, Scope.BLOCK) && !Array.isArray(context.format[format])) {\n formats[format] = context.format[format];\n }\n return formats;\n }, {});\n const delta = new Delta().retain(range.index).delete(range.length).insert('\\n', lineFormats);\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.focus();\n }\n}\nconst defaultOptions = {\n bindings: {\n bold: makeFormatHandler('bold'),\n italic: makeFormatHandler('italic'),\n underline: makeFormatHandler('underline'),\n indent: {\n // highlight tab or tab at beginning of list, indent or blockquote\n key: 'Tab',\n format: ['blockquote', 'indent', 'list'],\n handler(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '+1', Quill.sources.USER);\n return false;\n }\n },\n outdent: {\n key: 'Tab',\n shiftKey: true,\n format: ['blockquote', 'indent', 'list'],\n // highlight tab or tab at beginning of list, indent or blockquote\n handler(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '-1', Quill.sources.USER);\n return false;\n }\n },\n 'outdent backspace': {\n key: 'Backspace',\n collapsed: true,\n shiftKey: null,\n metaKey: null,\n ctrlKey: null,\n altKey: null,\n format: ['indent', 'list'],\n offset: 0,\n handler(range, context) {\n if (context.format.indent != null) {\n this.quill.format('indent', '-1', Quill.sources.USER);\n } else if (context.format.list != null) {\n this.quill.format('list', false, Quill.sources.USER);\n }\n }\n },\n 'indent code-block': makeCodeBlockHandler(true),\n 'outdent code-block': makeCodeBlockHandler(false),\n 'remove tab': {\n key: 'Tab',\n shiftKey: true,\n collapsed: true,\n prefix: /\\t$/,\n handler(range) {\n this.quill.deleteText(range.index - 1, 1, Quill.sources.USER);\n }\n },\n tab: {\n key: 'Tab',\n handler(range, context) {\n if (context.format.table) return true;\n this.quill.history.cutoff();\n const delta = new Delta().retain(range.index).delete(range.length).insert('\\t');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n return false;\n }\n },\n 'blockquote empty enter': {\n key: 'Enter',\n collapsed: true,\n format: ['blockquote'],\n empty: true,\n handler() {\n this.quill.format('blockquote', false, Quill.sources.USER);\n }\n },\n 'list empty enter': {\n key: 'Enter',\n collapsed: true,\n format: ['list'],\n empty: true,\n handler(range, context) {\n const formats = {\n list: false\n };\n if (context.format.indent) {\n formats.indent = false;\n }\n this.quill.formatLine(range.index, range.length, formats, Quill.sources.USER);\n }\n },\n 'checklist enter': {\n key: 'Enter',\n collapsed: true,\n format: {\n list: 'checked'\n },\n handler(range) {\n const [line, offset] = this.quill.getLine(range.index);\n const formats = {\n // @ts-expect-error Fix me later\n ...line.formats(),\n list: 'checked'\n };\n const delta = new Delta().retain(range.index).insert('\\n', formats)\n // @ts-expect-error Fix me later\n .retain(line.length() - offset - 1).retain(1, {\n list: 'unchecked'\n });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.scrollSelectionIntoView();\n }\n },\n 'header enter': {\n key: 'Enter',\n collapsed: true,\n format: ['header'],\n suffix: /^$/,\n handler(range, context) {\n const [line, offset] = this.quill.getLine(range.index);\n const delta = new Delta().retain(range.index).insert('\\n', context.format)\n // @ts-expect-error Fix me later\n .retain(line.length() - offset - 1).retain(1, {\n header: null\n });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.scrollSelectionIntoView();\n }\n },\n 'table backspace': {\n key: 'Backspace',\n format: ['table'],\n collapsed: true,\n offset: 0,\n handler() {}\n },\n 'table delete': {\n key: 'Delete',\n format: ['table'],\n collapsed: true,\n suffix: /^$/,\n handler() {}\n },\n 'table enter': {\n key: 'Enter',\n shiftKey: null,\n format: ['table'],\n handler(range) {\n const module = this.quill.getModule('table');\n if (module) {\n // @ts-expect-error\n const [table, row, cell, offset] = module.getTable(range);\n const shift = tableSide(table, row, cell, offset);\n if (shift == null) return;\n let index = table.offset();\n if (shift < 0) {\n const delta = new Delta().retain(index).insert('\\n');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, range.length, Quill.sources.SILENT);\n } else if (shift > 0) {\n index += table.length();\n const delta = new Delta().retain(index).insert('\\n');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(index, Quill.sources.USER);\n }\n }\n }\n },\n 'table tab': {\n key: 'Tab',\n shiftKey: null,\n format: ['table'],\n handler(range, context) {\n const {\n event,\n line: cell\n } = context;\n const offset = cell.offset(this.quill.scroll);\n if (event.shiftKey) {\n this.quill.setSelection(offset - 1, Quill.sources.USER);\n } else {\n this.quill.setSelection(offset + cell.length(), Quill.sources.USER);\n }\n }\n },\n 'list autofill': {\n key: ' ',\n shiftKey: null,\n collapsed: true,\n format: {\n 'code-block': false,\n blockquote: false,\n table: false\n },\n prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n handler(range, context) {\n if (this.quill.scroll.query('list') == null) return true;\n const {\n length\n } = context.prefix;\n const [line, offset] = this.quill.getLine(range.index);\n if (offset > length) return true;\n let value;\n switch (context.prefix.trim()) {\n case '[]':\n case '[ ]':\n value = 'unchecked';\n break;\n case '[x]':\n value = 'checked';\n break;\n case '-':\n case '*':\n value = 'bullet';\n break;\n default:\n value = 'ordered';\n }\n this.quill.insertText(range.index, ' ', Quill.sources.USER);\n this.quill.history.cutoff();\n const delta = new Delta().retain(range.index - offset).delete(length + 1)\n // @ts-expect-error Fix me later\n .retain(line.length() - 2 - offset).retain(1, {\n list: value\n });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index - length, Quill.sources.SILENT);\n return false;\n }\n },\n 'code exit': {\n key: 'Enter',\n collapsed: true,\n format: ['code-block'],\n prefix: /^$/,\n suffix: /^\\s*$/,\n handler(range) {\n const [line, offset] = this.quill.getLine(range.index);\n let numLines = 2;\n let cur = line;\n while (cur != null && cur.length() <= 1 && cur.formats()['code-block']) {\n // @ts-expect-error\n cur = cur.prev;\n numLines -= 1;\n // Requisite prev lines are empty\n if (numLines <= 0) {\n const delta = new Delta()\n // @ts-expect-error Fix me later\n .retain(range.index + line.length() - offset - 2).retain(1, {\n 'code-block': null\n }).delete(1);\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index - 1, Quill.sources.SILENT);\n return false;\n }\n }\n return true;\n }\n },\n 'embed left': makeEmbedArrowHandler('ArrowLeft', false),\n 'embed left shift': makeEmbedArrowHandler('ArrowLeft', true),\n 'embed right': makeEmbedArrowHandler('ArrowRight', false),\n 'embed right shift': makeEmbedArrowHandler('ArrowRight', true),\n 'table down': makeTableArrowHandler(false),\n 'table up': makeTableArrowHandler(true)\n }\n};\nKeyboard.DEFAULTS = defaultOptions;\nfunction makeCodeBlockHandler(indent) {\n return {\n key: 'Tab',\n shiftKey: !indent,\n format: {\n 'code-block': true\n },\n handler(range, _ref) {\n let {\n event\n } = _ref;\n const CodeBlock = this.quill.scroll.query('code-block');\n // @ts-expect-error\n const {\n TAB\n } = CodeBlock;\n if (range.length === 0 && !event.shiftKey) {\n this.quill.insertText(range.index, TAB, Quill.sources.USER);\n this.quill.setSelection(range.index + TAB.length, Quill.sources.SILENT);\n return;\n }\n const lines = range.length === 0 ? this.quill.getLines(range.index, 1) : this.quill.getLines(range);\n let {\n index,\n length\n } = range;\n lines.forEach((line, i) => {\n if (indent) {\n line.insertAt(0, TAB);\n if (i === 0) {\n index += TAB.length;\n } else {\n length += TAB.length;\n }\n // @ts-expect-error Fix me later\n } else if (line.domNode.textContent.startsWith(TAB)) {\n line.deleteAt(0, TAB.length);\n if (i === 0) {\n index -= TAB.length;\n } else {\n length -= TAB.length;\n }\n }\n });\n this.quill.update(Quill.sources.USER);\n this.quill.setSelection(index, length, Quill.sources.SILENT);\n }\n };\n}\nfunction makeEmbedArrowHandler(key, shiftKey) {\n const where = key === 'ArrowLeft' ? 'prefix' : 'suffix';\n return {\n key,\n shiftKey,\n altKey: null,\n [where]: /^$/,\n handler(range) {\n let {\n index\n } = range;\n if (key === 'ArrowRight') {\n index += range.length + 1;\n }\n const [leaf] = this.quill.getLeaf(index);\n if (!(leaf instanceof EmbedBlot)) return true;\n if (key === 'ArrowLeft') {\n if (shiftKey) {\n this.quill.setSelection(range.index - 1, range.length + 1, Quill.sources.USER);\n } else {\n this.quill.setSelection(range.index - 1, Quill.sources.USER);\n }\n } else if (shiftKey) {\n this.quill.setSelection(range.index, range.length + 1, Quill.sources.USER);\n } else {\n this.quill.setSelection(range.index + range.length + 1, Quill.sources.USER);\n }\n return false;\n }\n };\n}\nfunction makeFormatHandler(format) {\n return {\n key: format[0],\n shortKey: true,\n handler(range, context) {\n this.quill.format(format, !context.format[format], Quill.sources.USER);\n }\n };\n}\nfunction makeTableArrowHandler(up) {\n return {\n key: up ? 'ArrowUp' : 'ArrowDown',\n collapsed: true,\n format: ['table'],\n handler(range, context) {\n // TODO move to table module\n const key = up ? 'prev' : 'next';\n const cell = context.line;\n const targetRow = cell.parent[key];\n if (targetRow != null) {\n if (targetRow.statics.blotName === 'table-row') {\n // @ts-expect-error\n let targetCell = targetRow.children.head;\n let cur = cell;\n while (cur.prev != null) {\n // @ts-expect-error\n cur = cur.prev;\n targetCell = targetCell.next;\n }\n const index = targetCell.offset(this.quill.scroll) + Math.min(context.offset, targetCell.length() - 1);\n this.quill.setSelection(index, 0, Quill.sources.USER);\n }\n } else {\n // @ts-expect-error\n const targetLine = cell.table()[key];\n if (targetLine != null) {\n if (up) {\n this.quill.setSelection(targetLine.offset(this.quill.scroll) + targetLine.length() - 1, 0, Quill.sources.USER);\n } else {\n this.quill.setSelection(targetLine.offset(this.quill.scroll), 0, Quill.sources.USER);\n }\n }\n }\n return false;\n }\n };\n}\nfunction normalize(binding) {\n if (typeof binding === 'string' || typeof binding === 'number') {\n binding = {\n key: binding\n };\n } else if (typeof binding === 'object') {\n binding = cloneDeep(binding);\n } else {\n return null;\n }\n if (binding.shortKey) {\n binding[SHORTKEY] = binding.shortKey;\n delete binding.shortKey;\n }\n return binding;\n}\n\n// TODO: Move into quill.ts or editor.ts\nfunction deleteRange(_ref2) {\n let {\n quill,\n range\n } = _ref2;\n const lines = quill.getLines(range);\n let formats = {};\n if (lines.length > 1) {\n const firstFormats = lines[0].formats();\n const lastFormats = lines[lines.length - 1].formats();\n formats = AttributeMap.diff(lastFormats, firstFormats) || {};\n }\n quill.deleteText(range, Quill.sources.USER);\n if (Object.keys(formats).length > 0) {\n quill.formatLine(range.index, 1, formats, Quill.sources.USER);\n }\n quill.setSelection(range.index, Quill.sources.SILENT);\n}\nfunction tableSide(_table, row, cell, offset) {\n if (row.prev == null && row.next == null) {\n if (cell.prev == null && cell.next == null) {\n return offset === 0 ? -1 : 1;\n }\n return cell.prev == null ? -1 : 1;\n }\n if (row.prev == null) {\n return -1;\n }\n if (row.next == null) {\n return 1;\n }\n return null;\n}\nexport { Keyboard as default, SHORTKEY, normalize, deleteRange };\n//# sourceMappingURL=keyboard.js.map","const normalWeightRegexp = /font-weight:\\s*normal/;\nconst blockTagNames = ['P', 'OL', 'UL'];\nconst isBlockElement = element => {\n return element && blockTagNames.includes(element.tagName);\n};\nconst normalizeEmptyLines = doc => {\n Array.from(doc.querySelectorAll('br')).filter(br => isBlockElement(br.previousElementSibling) && isBlockElement(br.nextElementSibling)).forEach(br => {\n br.parentNode?.removeChild(br);\n });\n};\nconst normalizeFontWeight = doc => {\n Array.from(doc.querySelectorAll('b[style*=\"font-weight\"]')).filter(node => node.getAttribute('style')?.match(normalWeightRegexp)).forEach(node => {\n const fragment = doc.createDocumentFragment();\n fragment.append(...node.childNodes);\n node.parentNode?.replaceChild(fragment, node);\n });\n};\nexport default function normalize(doc) {\n if (doc.querySelector('[id^=\"docs-internal-guid-\"]')) {\n normalizeFontWeight(doc);\n normalizeEmptyLines(doc);\n }\n}\n//# sourceMappingURL=googleDocs.js.map","const ignoreRegexp = /\\bmso-list:[^;]*ignore/i;\nconst idRegexp = /\\bmso-list:[^;]*\\bl(\\d+)/i;\nconst indentRegexp = /\\bmso-list:[^;]*\\blevel(\\d+)/i;\nconst parseListItem = (element, html) => {\n const style = element.getAttribute('style');\n const idMatch = style?.match(idRegexp);\n if (!idMatch) {\n return null;\n }\n const id = Number(idMatch[1]);\n const indentMatch = style?.match(indentRegexp);\n const indent = indentMatch ? Number(indentMatch[1]) : 1;\n const typeRegexp = new RegExp(`@list l${id}:level${indent}\\\\s*\\\\{[^\\\\}]*mso-level-number-format:\\\\s*([\\\\w-]+)`, 'i');\n const typeMatch = html.match(typeRegexp);\n const type = typeMatch && typeMatch[1] === 'bullet' ? 'bullet' : 'ordered';\n return {\n id,\n indent,\n type,\n element\n };\n};\n\n// list items are represented as `p` tags with styles like `mso-list: l0 level1` where:\n// 1. \"0\" in \"l0\" means the list item id;\n// 2. \"1\" in \"level1\" means the indent level, starting from 1.\nconst normalizeListItem = doc => {\n const msoList = Array.from(doc.querySelectorAll('[style*=mso-list]'));\n const ignored = [];\n const others = [];\n msoList.forEach(node => {\n const shouldIgnore = (node.getAttribute('style') || '').match(ignoreRegexp);\n if (shouldIgnore) {\n ignored.push(node);\n } else {\n others.push(node);\n }\n });\n\n // Each list item contains a marker wrapped with \"mso-list: Ignore\".\n ignored.forEach(node => node.parentNode?.removeChild(node));\n\n // The list stype is not defined inline with the tag, instead, it's in the\n // style tag so we need to pass the html as a string.\n const html = doc.documentElement.innerHTML;\n const listItems = others.map(element => parseListItem(element, html)).filter(parsed => parsed);\n while (listItems.length) {\n const childListItems = [];\n let current = listItems.shift();\n // Group continuous items into the same group (aka \"ul\")\n while (current) {\n childListItems.push(current);\n current = listItems.length && listItems[0]?.element === current.element.nextElementSibling &&\n // Different id means the next item doesn't belong to this group.\n listItems[0].id === current.id ? listItems.shift() : null;\n }\n const ul = document.createElement('ul');\n childListItems.forEach(listItem => {\n const li = document.createElement('li');\n li.setAttribute('data-list', listItem.type);\n if (listItem.indent > 1) {\n li.setAttribute('class', `ql-indent-${listItem.indent - 1}`);\n }\n li.innerHTML = listItem.element.innerHTML;\n ul.appendChild(li);\n });\n const element = childListItems[0]?.element;\n const {\n parentNode\n } = element ?? {};\n if (element) {\n parentNode?.replaceChild(ul, element);\n }\n childListItems.slice(1).forEach(_ref => {\n let {\n element: e\n } = _ref;\n parentNode?.removeChild(e);\n });\n }\n};\nexport default function normalize(doc) {\n if (doc.documentElement.getAttribute('xmlns:w') === 'urn:schemas-microsoft-com:office:word') {\n normalizeListItem(doc);\n }\n}\n//# sourceMappingURL=msWord.js.map","import googleDocs from './normalizers/googleDocs.js';\nimport msWord from './normalizers/msWord.js';\nconst NORMALIZERS = [msWord, googleDocs];\nconst normalizeExternalHTML = doc => {\n if (doc.documentElement) {\n NORMALIZERS.forEach(normalize => {\n normalize(doc);\n });\n }\n};\nexport default normalizeExternalHTML;\n//# sourceMappingURL=index.js.map","import { Attributor, BlockBlot, ClassAttributor, EmbedBlot, Scope, StyleAttributor } from 'parchment';\nimport Delta from 'quill-delta';\nimport { BlockEmbed } from '../blots/block.js';\nimport logger from '../core/logger.js';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\nimport { AlignAttribute, AlignStyle } from '../formats/align.js';\nimport { BackgroundStyle } from '../formats/background.js';\nimport CodeBlock from '../formats/code.js';\nimport { ColorStyle } from '../formats/color.js';\nimport { DirectionAttribute, DirectionStyle } from '../formats/direction.js';\nimport { FontStyle } from '../formats/font.js';\nimport { SizeStyle } from '../formats/size.js';\nimport { deleteRange } from './keyboard.js';\nimport normalizeExternalHTML from './normalizeExternalHTML/index.js';\nconst debug = logger('quill:clipboard');\nconst CLIPBOARD_CONFIG = [[Node.TEXT_NODE, matchText], [Node.TEXT_NODE, matchNewline], ['br', matchBreak], [Node.ELEMENT_NODE, matchNewline], [Node.ELEMENT_NODE, matchBlot], [Node.ELEMENT_NODE, matchAttributor], [Node.ELEMENT_NODE, matchStyles], ['li', matchIndent], ['ol, ul', matchList], ['pre', matchCodeBlock], ['tr', matchTable], ['b', createMatchAlias('bold')], ['i', createMatchAlias('italic')], ['strike', createMatchAlias('strike')], ['style', matchIgnore]];\nconst ATTRIBUTE_ATTRIBUTORS = [AlignAttribute, DirectionAttribute].reduce((memo, attr) => {\n memo[attr.keyName] = attr;\n return memo;\n}, {});\nconst STYLE_ATTRIBUTORS = [AlignStyle, BackgroundStyle, ColorStyle, DirectionStyle, FontStyle, SizeStyle].reduce((memo, attr) => {\n memo[attr.keyName] = attr;\n return memo;\n}, {});\nclass Clipboard extends Module {\n static DEFAULTS = {\n matchers: []\n };\n constructor(quill, options) {\n super(quill, options);\n this.quill.root.addEventListener('copy', e => this.onCaptureCopy(e, false));\n this.quill.root.addEventListener('cut', e => this.onCaptureCopy(e, true));\n this.quill.root.addEventListener('paste', this.onCapturePaste.bind(this));\n this.matchers = [];\n CLIPBOARD_CONFIG.concat(this.options.matchers ?? []).forEach(_ref => {\n let [selector, matcher] = _ref;\n this.addMatcher(selector, matcher);\n });\n }\n addMatcher(selector, matcher) {\n this.matchers.push([selector, matcher]);\n }\n convert(_ref2) {\n let {\n html,\n text\n } = _ref2;\n let formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (formats[CodeBlock.blotName]) {\n return new Delta().insert(text || '', {\n [CodeBlock.blotName]: formats[CodeBlock.blotName]\n });\n }\n if (!html) {\n return new Delta().insert(text || '', formats);\n }\n const delta = this.convertHTML(html);\n // Remove trailing newline\n if (deltaEndsWith(delta, '\\n') && (delta.ops[delta.ops.length - 1].attributes == null || formats.table)) {\n return delta.compose(new Delta().retain(delta.length() - 1).delete(1));\n }\n return delta;\n }\n normalizeHTML(doc) {\n normalizeExternalHTML(doc);\n }\n convertHTML(html) {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n this.normalizeHTML(doc);\n const container = doc.body;\n const nodeMatches = new WeakMap();\n const [elementMatchers, textMatchers] = this.prepareMatching(container, nodeMatches);\n return traverse(this.quill.scroll, container, elementMatchers, textMatchers, nodeMatches);\n }\n dangerouslyPasteHTML(index, html) {\n let source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Quill.sources.API;\n if (typeof index === 'string') {\n const delta = this.convert({\n html: index,\n text: ''\n });\n // @ts-expect-error\n this.quill.setContents(delta, html);\n this.quill.setSelection(0, Quill.sources.SILENT);\n } else {\n const paste = this.convert({\n html,\n text: ''\n });\n this.quill.updateContents(new Delta().retain(index).concat(paste), source);\n this.quill.setSelection(index + paste.length(), Quill.sources.SILENT);\n }\n }\n onCaptureCopy(e) {\n let isCut = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (e.defaultPrevented) return;\n e.preventDefault();\n const [range] = this.quill.selection.getRange();\n if (range == null) return;\n const {\n html,\n text\n } = this.onCopy(range, isCut);\n e.clipboardData?.setData('text/plain', text);\n e.clipboardData?.setData('text/html', html);\n if (isCut) {\n deleteRange({\n range,\n quill: this.quill\n });\n }\n }\n\n /*\n * https://www.iana.org/assignments/media-types/text/uri-list\n */\n normalizeURIList(urlList) {\n return urlList.split(/\\r?\\n/)\n // Ignore all comments\n .filter(url => url[0] !== '#').join('\\n');\n }\n onCapturePaste(e) {\n if (e.defaultPrevented || !this.quill.isEnabled()) return;\n e.preventDefault();\n const range = this.quill.getSelection(true);\n if (range == null) return;\n const html = e.clipboardData?.getData('text/html');\n let text = e.clipboardData?.getData('text/plain');\n if (!html && !text) {\n const urlList = e.clipboardData?.getData('text/uri-list');\n if (urlList) {\n text = this.normalizeURIList(urlList);\n }\n }\n const files = Array.from(e.clipboardData?.files || []);\n if (!html && files.length > 0) {\n this.quill.uploader.upload(range, files);\n return;\n }\n if (html && files.length > 0) {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n if (doc.body.childElementCount === 1 && doc.body.firstElementChild?.tagName === 'IMG') {\n this.quill.uploader.upload(range, files);\n return;\n }\n }\n this.onPaste(range, {\n html,\n text\n });\n }\n onCopy(range) {\n const text = this.quill.getText(range);\n const html = this.quill.getSemanticHTML(range);\n return {\n html,\n text\n };\n }\n onPaste(range, _ref3) {\n let {\n text,\n html\n } = _ref3;\n const formats = this.quill.getFormat(range.index);\n const pastedDelta = this.convert({\n text,\n html\n }, formats);\n debug.log('onPaste', pastedDelta, {\n text,\n html\n });\n const delta = new Delta().retain(range.index).delete(range.length).concat(pastedDelta);\n this.quill.updateContents(delta, Quill.sources.USER);\n // range.length contributes to delta.length()\n this.quill.setSelection(delta.length() - range.length, Quill.sources.SILENT);\n this.quill.scrollSelectionIntoView();\n }\n prepareMatching(container, nodeMatches) {\n const elementMatchers = [];\n const textMatchers = [];\n this.matchers.forEach(pair => {\n const [selector, matcher] = pair;\n switch (selector) {\n case Node.TEXT_NODE:\n textMatchers.push(matcher);\n break;\n case Node.ELEMENT_NODE:\n elementMatchers.push(matcher);\n break;\n default:\n Array.from(container.querySelectorAll(selector)).forEach(node => {\n if (nodeMatches.has(node)) {\n const matches = nodeMatches.get(node);\n matches?.push(matcher);\n } else {\n nodeMatches.set(node, [matcher]);\n }\n });\n break;\n }\n });\n return [elementMatchers, textMatchers];\n }\n}\nfunction applyFormat(delta, format, value, scroll) {\n if (!scroll.query(format)) {\n return delta;\n }\n return delta.reduce((newDelta, op) => {\n if (!op.insert) return newDelta;\n if (op.attributes && op.attributes[format]) {\n return newDelta.push(op);\n }\n const formats = value ? {\n [format]: value\n } : {};\n return newDelta.insert(op.insert, {\n ...formats,\n ...op.attributes\n });\n }, new Delta());\n}\nfunction deltaEndsWith(delta, text) {\n let endText = '';\n for (let i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i // eslint-disable-line no-plusplus\n ) {\n const op = delta.ops[i];\n if (typeof op.insert !== 'string') break;\n endText = op.insert + endText;\n }\n return endText.slice(-1 * text.length) === text;\n}\nfunction isLine(node, scroll) {\n if (!(node instanceof Element)) return false;\n const match = scroll.query(node);\n // @ts-expect-error\n if (match && match.prototype instanceof EmbedBlot) return false;\n return ['address', 'article', 'blockquote', 'canvas', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'iframe', 'li', 'main', 'nav', 'ol', 'output', 'p', 'pre', 'section', 'table', 'td', 'tr', 'ul', 'video'].includes(node.tagName.toLowerCase());\n}\nfunction isBetweenInlineElements(node, scroll) {\n return node.previousElementSibling && node.nextElementSibling && !isLine(node.previousElementSibling, scroll) && !isLine(node.nextElementSibling, scroll);\n}\nconst preNodes = new WeakMap();\nfunction isPre(node) {\n if (node == null) return false;\n if (!preNodes.has(node)) {\n // @ts-expect-error\n if (node.tagName === 'PRE') {\n preNodes.set(node, true);\n } else {\n preNodes.set(node, isPre(node.parentNode));\n }\n }\n return preNodes.get(node);\n}\nfunction traverse(scroll, node, elementMatchers, textMatchers, nodeMatches) {\n // Post-order\n if (node.nodeType === node.TEXT_NODE) {\n return textMatchers.reduce((delta, matcher) => {\n return matcher(node, delta, scroll);\n }, new Delta());\n }\n if (node.nodeType === node.ELEMENT_NODE) {\n return Array.from(node.childNodes || []).reduce((delta, childNode) => {\n let childrenDelta = traverse(scroll, childNode, elementMatchers, textMatchers, nodeMatches);\n if (childNode.nodeType === node.ELEMENT_NODE) {\n childrenDelta = elementMatchers.reduce((reducedDelta, matcher) => {\n return matcher(childNode, reducedDelta, scroll);\n }, childrenDelta);\n childrenDelta = (nodeMatches.get(childNode) || []).reduce((reducedDelta, matcher) => {\n return matcher(childNode, reducedDelta, scroll);\n }, childrenDelta);\n }\n return delta.concat(childrenDelta);\n }, new Delta());\n }\n return new Delta();\n}\nfunction createMatchAlias(format) {\n return (_node, delta, scroll) => {\n return applyFormat(delta, format, true, scroll);\n };\n}\nfunction matchAttributor(node, delta, scroll) {\n const attributes = Attributor.keys(node);\n const classes = ClassAttributor.keys(node);\n const styles = StyleAttributor.keys(node);\n const formats = {};\n attributes.concat(classes).concat(styles).forEach(name => {\n let attr = scroll.query(name, Scope.ATTRIBUTE);\n if (attr != null) {\n formats[attr.attrName] = attr.value(node);\n if (formats[attr.attrName]) return;\n }\n attr = ATTRIBUTE_ATTRIBUTORS[name];\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n attr = STYLE_ATTRIBUTORS[name];\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n attr = STYLE_ATTRIBUTORS[name];\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n });\n return Object.entries(formats).reduce((newDelta, _ref4) => {\n let [name, value] = _ref4;\n return applyFormat(newDelta, name, value, scroll);\n }, delta);\n}\nfunction matchBlot(node, delta, scroll) {\n const match = scroll.query(node);\n if (match == null) return delta;\n // @ts-expect-error\n if (match.prototype instanceof EmbedBlot) {\n const embed = {};\n // @ts-expect-error\n const value = match.value(node);\n if (value != null) {\n // @ts-expect-error\n embed[match.blotName] = value;\n // @ts-expect-error\n return new Delta().insert(embed, match.formats(node, scroll));\n }\n } else {\n // @ts-expect-error\n if (match.prototype instanceof BlockBlot && !deltaEndsWith(delta, '\\n')) {\n delta.insert('\\n');\n }\n if ('blotName' in match && 'formats' in match && typeof match.formats === 'function') {\n return applyFormat(delta, match.blotName, match.formats(node, scroll), scroll);\n }\n }\n return delta;\n}\nfunction matchBreak(node, delta) {\n if (!deltaEndsWith(delta, '\\n')) {\n delta.insert('\\n');\n }\n return delta;\n}\nfunction matchCodeBlock(node, delta, scroll) {\n const match = scroll.query('code-block');\n const language = match && 'formats' in match && typeof match.formats === 'function' ? match.formats(node, scroll) : true;\n return applyFormat(delta, 'code-block', language, scroll);\n}\nfunction matchIgnore() {\n return new Delta();\n}\nfunction matchIndent(node, delta, scroll) {\n const match = scroll.query(node);\n if (match == null ||\n // @ts-expect-error\n match.blotName !== 'list' || !deltaEndsWith(delta, '\\n')) {\n return delta;\n }\n let indent = -1;\n let parent = node.parentNode;\n while (parent != null) {\n // @ts-expect-error\n if (['OL', 'UL'].includes(parent.tagName)) {\n indent += 1;\n }\n parent = parent.parentNode;\n }\n if (indent <= 0) return delta;\n return delta.reduce((composed, op) => {\n if (!op.insert) return composed;\n if (op.attributes && typeof op.attributes.indent === 'number') {\n return composed.push(op);\n }\n return composed.insert(op.insert, {\n indent,\n ...(op.attributes || {})\n });\n }, new Delta());\n}\nfunction matchList(node, delta, scroll) {\n const element = node;\n let list = element.tagName === 'OL' ? 'ordered' : 'bullet';\n const checkedAttr = element.getAttribute('data-checked');\n if (checkedAttr) {\n list = checkedAttr === 'true' ? 'checked' : 'unchecked';\n }\n return applyFormat(delta, 'list', list, scroll);\n}\nfunction matchNewline(node, delta, scroll) {\n if (!deltaEndsWith(delta, '\\n')) {\n if (isLine(node, scroll) && (node.childNodes.length > 0 || node instanceof HTMLParagraphElement)) {\n return delta.insert('\\n');\n }\n if (delta.length() > 0 && node.nextSibling) {\n let nextSibling = node.nextSibling;\n while (nextSibling != null) {\n if (isLine(nextSibling, scroll)) {\n return delta.insert('\\n');\n }\n const match = scroll.query(nextSibling);\n // @ts-expect-error\n if (match && match.prototype instanceof BlockEmbed) {\n return delta.insert('\\n');\n }\n nextSibling = nextSibling.firstChild;\n }\n }\n }\n return delta;\n}\nfunction matchStyles(node, delta, scroll) {\n const formats = {};\n const style = node.style || {};\n if (style.fontStyle === 'italic') {\n formats.italic = true;\n }\n if (style.textDecoration === 'underline') {\n formats.underline = true;\n }\n if (style.textDecoration === 'line-through') {\n formats.strike = true;\n }\n if (style.fontWeight?.startsWith('bold') ||\n // @ts-expect-error Fix me later\n parseInt(style.fontWeight, 10) >= 700) {\n formats.bold = true;\n }\n delta = Object.entries(formats).reduce((newDelta, _ref5) => {\n let [name, value] = _ref5;\n return applyFormat(newDelta, name, value, scroll);\n }, delta);\n // @ts-expect-error\n if (parseFloat(style.textIndent || 0) > 0) {\n // Could be 0.5in\n return new Delta().insert('\\t').concat(delta);\n }\n return delta;\n}\nfunction matchTable(node, delta, scroll) {\n const table = node.parentElement?.tagName === 'TABLE' ? node.parentElement : node.parentElement?.parentElement;\n if (table != null) {\n const rows = Array.from(table.querySelectorAll('tr'));\n const row = rows.indexOf(node) + 1;\n return applyFormat(delta, 'table', row, scroll);\n }\n return delta;\n}\nfunction matchText(node, delta, scroll) {\n // @ts-expect-error\n let text = node.data;\n // Word represents empty line with  \n if (node.parentElement?.tagName === 'O:P') {\n return delta.insert(text.trim());\n }\n if (!isPre(node)) {\n if (text.trim().length === 0 && text.includes('\\n') && !isBetweenInlineElements(node, scroll)) {\n return delta;\n }\n const replacer = (collapse, match) => {\n const replaced = match.replace(/[^\\u00a0]/g, ''); // \\u00a0 is nbsp;\n return replaced.length < 1 && collapse ? ' ' : replaced;\n };\n text = text.replace(/\\r\\n/g, ' ').replace(/\\n/g, ' ');\n text = text.replace(/\\s\\s+/g, replacer.bind(replacer, true)); // collapse whitespace\n if (node.previousSibling == null && node.parentElement != null && isLine(node.parentElement, scroll) || node.previousSibling instanceof Element && isLine(node.previousSibling, scroll)) {\n text = text.replace(/^\\s+/, replacer.bind(replacer, false));\n }\n if (node.nextSibling == null && node.parentElement != null && isLine(node.parentElement, scroll) || node.nextSibling instanceof Element && isLine(node.nextSibling, scroll)) {\n text = text.replace(/\\s+$/, replacer.bind(replacer, false));\n }\n }\n return delta.insert(text);\n}\nexport { Clipboard as default, matchAttributor, matchBlot, matchNewline, matchText, traverse };\n//# sourceMappingURL=clipboard.js.map","import { Scope } from 'parchment';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\nclass History extends Module {\n static DEFAULTS = {\n delay: 1000,\n maxStack: 100,\n userOnly: false\n };\n lastRecorded = 0;\n ignoreChange = false;\n stack = {\n undo: [],\n redo: []\n };\n currentRange = null;\n constructor(quill, options) {\n super(quill, options);\n this.quill.on(Quill.events.EDITOR_CHANGE, (eventName, value, oldValue, source) => {\n if (eventName === Quill.events.SELECTION_CHANGE) {\n if (value && source !== Quill.sources.SILENT) {\n this.currentRange = value;\n }\n } else if (eventName === Quill.events.TEXT_CHANGE) {\n if (!this.ignoreChange) {\n if (!this.options.userOnly || source === Quill.sources.USER) {\n this.record(value, oldValue);\n } else {\n this.transform(value);\n }\n }\n this.currentRange = transformRange(this.currentRange, value);\n }\n });\n this.quill.keyboard.addBinding({\n key: 'z',\n shortKey: true\n }, this.undo.bind(this));\n this.quill.keyboard.addBinding({\n key: ['z', 'Z'],\n shortKey: true,\n shiftKey: true\n }, this.redo.bind(this));\n if (/Win/i.test(navigator.platform)) {\n this.quill.keyboard.addBinding({\n key: 'y',\n shortKey: true\n }, this.redo.bind(this));\n }\n this.quill.root.addEventListener('beforeinput', event => {\n if (event.inputType === 'historyUndo') {\n this.undo();\n event.preventDefault();\n } else if (event.inputType === 'historyRedo') {\n this.redo();\n event.preventDefault();\n }\n });\n }\n change(source, dest) {\n if (this.stack[source].length === 0) return;\n const item = this.stack[source].pop();\n if (!item) return;\n const base = this.quill.getContents();\n const inverseDelta = item.delta.invert(base);\n this.stack[dest].push({\n delta: inverseDelta,\n range: transformRange(item.range, inverseDelta)\n });\n this.lastRecorded = 0;\n this.ignoreChange = true;\n this.quill.updateContents(item.delta, Quill.sources.USER);\n this.ignoreChange = false;\n this.restoreSelection(item);\n }\n clear() {\n this.stack = {\n undo: [],\n redo: []\n };\n }\n cutoff() {\n this.lastRecorded = 0;\n }\n record(changeDelta, oldDelta) {\n if (changeDelta.ops.length === 0) return;\n this.stack.redo = [];\n let undoDelta = changeDelta.invert(oldDelta);\n let undoRange = this.currentRange;\n const timestamp = Date.now();\n if (\n // @ts-expect-error Fix me later\n this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0) {\n const item = this.stack.undo.pop();\n if (item) {\n undoDelta = undoDelta.compose(item.delta);\n undoRange = item.range;\n }\n } else {\n this.lastRecorded = timestamp;\n }\n if (undoDelta.length() === 0) return;\n this.stack.undo.push({\n delta: undoDelta,\n range: undoRange\n });\n // @ts-expect-error Fix me later\n if (this.stack.undo.length > this.options.maxStack) {\n this.stack.undo.shift();\n }\n }\n redo() {\n this.change('redo', 'undo');\n }\n transform(delta) {\n transformStack(this.stack.undo, delta);\n transformStack(this.stack.redo, delta);\n }\n undo() {\n this.change('undo', 'redo');\n }\n restoreSelection(stackItem) {\n if (stackItem.range) {\n this.quill.setSelection(stackItem.range, Quill.sources.USER);\n } else {\n const index = getLastChangeIndex(this.quill.scroll, stackItem.delta);\n this.quill.setSelection(index, Quill.sources.USER);\n }\n }\n}\nfunction transformStack(stack, delta) {\n let remoteDelta = delta;\n for (let i = stack.length - 1; i >= 0; i -= 1) {\n const oldItem = stack[i];\n stack[i] = {\n delta: remoteDelta.transform(oldItem.delta, true),\n range: oldItem.range && transformRange(oldItem.range, remoteDelta)\n };\n remoteDelta = oldItem.delta.transform(remoteDelta);\n if (stack[i].delta.length() === 0) {\n stack.splice(i, 1);\n }\n }\n}\nfunction endsWithNewlineChange(scroll, delta) {\n const lastOp = delta.ops[delta.ops.length - 1];\n if (lastOp == null) return false;\n if (lastOp.insert != null) {\n return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\\n');\n }\n if (lastOp.attributes != null) {\n return Object.keys(lastOp.attributes).some(attr => {\n return scroll.query(attr, Scope.BLOCK) != null;\n });\n }\n return false;\n}\nfunction getLastChangeIndex(scroll, delta) {\n const deleteLength = delta.reduce((length, op) => {\n return length + (op.delete || 0);\n }, 0);\n let changeIndex = delta.length() - deleteLength;\n if (endsWithNewlineChange(scroll, delta)) {\n changeIndex -= 1;\n }\n return changeIndex;\n}\nfunction transformRange(range, delta) {\n if (!range) return range;\n const start = delta.transformPosition(range.index);\n const end = delta.transformPosition(range.index + range.length);\n return {\n index: start,\n length: end - start\n };\n}\nexport { History as default, getLastChangeIndex };\n//# sourceMappingURL=history.js.map","import Delta from 'quill-delta';\nimport Emitter from '../core/emitter.js';\nimport Module from '../core/module.js';\nclass Uploader extends Module {\n constructor(quill, options) {\n super(quill, options);\n quill.root.addEventListener('drop', e => {\n e.preventDefault();\n let native = null;\n if (document.caretRangeFromPoint) {\n native = document.caretRangeFromPoint(e.clientX, e.clientY);\n // @ts-expect-error\n } else if (document.caretPositionFromPoint) {\n // @ts-expect-error\n const position = document.caretPositionFromPoint(e.clientX, e.clientY);\n native = document.createRange();\n native.setStart(position.offsetNode, position.offset);\n native.setEnd(position.offsetNode, position.offset);\n }\n const normalized = native && quill.selection.normalizeNative(native);\n if (normalized) {\n const range = quill.selection.normalizedToRange(normalized);\n if (e.dataTransfer?.files) {\n this.upload(range, e.dataTransfer.files);\n }\n }\n });\n }\n upload(range, files) {\n const uploads = [];\n Array.from(files).forEach(file => {\n if (file && this.options.mimetypes?.includes(file.type)) {\n uploads.push(file);\n }\n });\n if (uploads.length > 0) {\n // @ts-expect-error Fix me later\n this.options.handler.call(this, range, uploads);\n }\n }\n}\nUploader.DEFAULTS = {\n mimetypes: ['image/png', 'image/jpeg'],\n handler(range, files) {\n if (!this.quill.scroll.query('image')) {\n return;\n }\n const promises = files.map(file => {\n return new Promise(resolve => {\n const reader = new FileReader();\n reader.onload = () => {\n resolve(reader.result);\n };\n reader.readAsDataURL(file);\n });\n });\n Promise.all(promises).then(images => {\n const update = images.reduce((delta, image) => {\n return delta.insert({\n image\n });\n }, new Delta().retain(range.index).delete(range.length));\n this.quill.updateContents(update, Emitter.sources.USER);\n this.quill.setSelection(range.index + images.length, Emitter.sources.SILENT);\n });\n }\n};\nexport default Uploader;\n//# sourceMappingURL=uploader.js.map","import Delta from 'quill-delta';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\nimport { deleteRange } from './keyboard.js';\nconst INSERT_TYPES = ['insertText', 'insertReplacementText'];\nclass Input extends Module {\n constructor(quill, options) {\n super(quill, options);\n quill.root.addEventListener('beforeinput', event => {\n this.handleBeforeInput(event);\n });\n\n // Gboard with English input on Android triggers `compositionstart` sometimes even\n // users are not going to type anything.\n if (!/Android/i.test(navigator.userAgent)) {\n quill.on(Quill.events.COMPOSITION_BEFORE_START, () => {\n this.handleCompositionStart();\n });\n }\n }\n deleteRange(range) {\n deleteRange({\n range,\n quill: this.quill\n });\n }\n replaceText(range) {\n let text = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n if (range.length === 0) return false;\n if (text) {\n // Follow the native behavior that inherits the formats of the first character\n const formats = this.quill.getFormat(range.index, 1);\n this.deleteRange(range);\n this.quill.updateContents(new Delta().retain(range.index).insert(text, formats), Quill.sources.USER);\n } else {\n this.deleteRange(range);\n }\n this.quill.setSelection(range.index + text.length, 0, Quill.sources.SILENT);\n return true;\n }\n handleBeforeInput(event) {\n if (this.quill.composition.isComposing || event.defaultPrevented || !INSERT_TYPES.includes(event.inputType)) {\n return;\n }\n const staticRange = event.getTargetRanges ? event.getTargetRanges()[0] : null;\n if (!staticRange || staticRange.collapsed === true) {\n return;\n }\n const text = getPlainTextFromInputEvent(event);\n if (text == null) {\n return;\n }\n const normalized = this.quill.selection.normalizeNative(staticRange);\n const range = normalized ? this.quill.selection.normalizedToRange(normalized) : null;\n if (range && this.replaceText(range, text)) {\n event.preventDefault();\n }\n }\n handleCompositionStart() {\n const range = this.quill.getSelection();\n if (range) {\n this.replaceText(range);\n }\n }\n}\nfunction getPlainTextFromInputEvent(event) {\n // When `inputType` is \"insertText\":\n // - `event.data` should be string (Safari uses `event.dataTransfer`).\n // - `event.dataTransfer` should be null.\n // When `inputType` is \"insertReplacementText\":\n // - `event.data` should be null.\n // - `event.dataTransfer` should contain \"text/plain\" data.\n\n if (typeof event.data === 'string') {\n return event.data;\n }\n if (event.dataTransfer?.types.includes('text/plain')) {\n return event.dataTransfer.getData('text/plain');\n }\n return null;\n}\nexport default Input;\n//# sourceMappingURL=input.js.map","import { ParentBlot } from 'parchment';\nimport Module from '../core/module.js';\nimport Quill from '../core/quill.js';\nconst isMac = /Mac/i.test(navigator.platform);\n\n// Export for testing\nexport const TTL_FOR_VALID_SELECTION_CHANGE = 100;\n\n// A loose check to determine if the shortcut can move the caret before a UI node:\n// [CARET]
    [CONTENT]
    \nconst canMoveCaretBeforeUINode = event => {\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight' ||\n // RTL scripts or moving from the end of the previous line\n event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'Home') {\n return true;\n }\n if (isMac && event.key === 'a' && event.ctrlKey === true) {\n return true;\n }\n return false;\n};\nclass UINode extends Module {\n isListening = false;\n selectionChangeDeadline = 0;\n constructor(quill, options) {\n super(quill, options);\n this.handleArrowKeys();\n this.handleNavigationShortcuts();\n }\n handleArrowKeys() {\n this.quill.keyboard.addBinding({\n key: ['ArrowLeft', 'ArrowRight'],\n offset: 0,\n shiftKey: null,\n handler(range, _ref) {\n let {\n line,\n event\n } = _ref;\n if (!(line instanceof ParentBlot) || !line.uiNode) {\n return true;\n }\n const isRTL = getComputedStyle(line.domNode)['direction'] === 'rtl';\n if (isRTL && event.key !== 'ArrowRight' || !isRTL && event.key !== 'ArrowLeft') {\n return true;\n }\n this.quill.setSelection(range.index - 1, range.length + (event.shiftKey ? 1 : 0), Quill.sources.USER);\n return false;\n }\n });\n }\n handleNavigationShortcuts() {\n this.quill.root.addEventListener('keydown', event => {\n if (!event.defaultPrevented && canMoveCaretBeforeUINode(event)) {\n this.ensureListeningToSelectionChange();\n }\n });\n }\n\n /**\n * We only listen to the `selectionchange` event when\n * there is an intention of moving the caret to the beginning using shortcuts.\n * This is primarily implemented to prevent infinite loops, as we are changing\n * the selection within the handler of a `selectionchange` event.\n */\n ensureListeningToSelectionChange() {\n this.selectionChangeDeadline = Date.now() + TTL_FOR_VALID_SELECTION_CHANGE;\n if (this.isListening) return;\n this.isListening = true;\n const listener = () => {\n this.isListening = false;\n if (Date.now() <= this.selectionChangeDeadline) {\n this.handleSelectionChange();\n }\n };\n document.addEventListener('selectionchange', listener, {\n once: true\n });\n }\n handleSelectionChange() {\n const selection = document.getSelection();\n if (!selection) return;\n const range = selection.getRangeAt(0);\n if (range.collapsed !== true || range.startOffset !== 0) return;\n const line = this.quill.scroll.find(range.startContainer);\n if (!(line instanceof ParentBlot) || !line.uiNode) return;\n const newRange = document.createRange();\n newRange.setStartAfter(line.uiNode);\n newRange.setEndAfter(line.uiNode);\n selection.removeAllRanges();\n selection.addRange(newRange);\n }\n}\nexport default UINode;\n//# sourceMappingURL=uiNode.js.map","import Quill, { Parchment, Range } from './core/quill.js';\nimport Block, { BlockEmbed } from './blots/block.js';\nimport Break from './blots/break.js';\nimport Container from './blots/container.js';\nimport Cursor from './blots/cursor.js';\nimport Embed from './blots/embed.js';\nimport Inline from './blots/inline.js';\nimport Scroll from './blots/scroll.js';\nimport TextBlot from './blots/text.js';\nimport Clipboard from './modules/clipboard.js';\nimport History from './modules/history.js';\nimport Keyboard from './modules/keyboard.js';\nimport Uploader from './modules/uploader.js';\nimport Delta, { Op, OpIterator, AttributeMap } from 'quill-delta';\nimport Input from './modules/input.js';\nimport UINode from './modules/uiNode.js';\nexport { default as Module } from './core/module.js';\nexport { Delta, Op, OpIterator, AttributeMap, Parchment, Range };\nQuill.register({\n 'blots/block': Block,\n 'blots/block/embed': BlockEmbed,\n 'blots/break': Break,\n 'blots/container': Container,\n 'blots/cursor': Cursor,\n 'blots/embed': Embed,\n 'blots/inline': Inline,\n 'blots/scroll': Scroll,\n 'blots/text': TextBlot,\n 'modules/clipboard': Clipboard,\n 'modules/history': History,\n 'modules/keyboard': Keyboard,\n 'modules/uploader': Uploader,\n 'modules/input': Input,\n 'modules/uiNode': UINode\n});\nexport default Quill;\n//# sourceMappingURL=core.js.map","import { ClassAttributor, Scope } from 'parchment';\nclass IndentAttributor extends ClassAttributor {\n add(node, value) {\n let normalizedValue = 0;\n if (value === '+1' || value === '-1') {\n const indent = this.value(node) || 0;\n normalizedValue = value === '+1' ? indent + 1 : indent - 1;\n } else if (typeof value === 'number') {\n normalizedValue = value;\n }\n if (normalizedValue === 0) {\n this.remove(node);\n return true;\n }\n return super.add(node, normalizedValue.toString());\n }\n canAdd(node, value) {\n return super.canAdd(node, value) || super.canAdd(node, parseInt(value, 10));\n }\n value(node) {\n return parseInt(super.value(node), 10) || undefined; // Don't return NaN\n }\n}\nconst IndentClass = new IndentAttributor('indent', 'ql-indent', {\n scope: Scope.BLOCK,\n // @ts-expect-error\n whitelist: [1, 2, 3, 4, 5, 6, 7, 8]\n});\nexport default IndentClass;\n//# sourceMappingURL=indent.js.map","import Block from '../blots/block.js';\nclass Blockquote extends Block {\n static blotName = 'blockquote';\n static tagName = 'blockquote';\n}\nexport default Blockquote;\n//# sourceMappingURL=blockquote.js.map","import Block from '../blots/block.js';\nclass Header extends Block {\n static blotName = 'header';\n static tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n static formats(domNode) {\n return this.tagName.indexOf(domNode.tagName) + 1;\n }\n}\nexport default Header;\n//# sourceMappingURL=header.js.map","import Block from '../blots/block.js';\nimport Container from '../blots/container.js';\nimport Quill from '../core/quill.js';\nclass ListContainer extends Container {}\nListContainer.blotName = 'list-container';\nListContainer.tagName = 'OL';\nclass ListItem extends Block {\n static create(value) {\n const node = super.create();\n node.setAttribute('data-list', value);\n return node;\n }\n static formats(domNode) {\n return domNode.getAttribute('data-list') || undefined;\n }\n static register() {\n Quill.register(ListContainer);\n }\n constructor(scroll, domNode) {\n super(scroll, domNode);\n const ui = domNode.ownerDocument.createElement('span');\n const listEventHandler = e => {\n if (!scroll.isEnabled()) return;\n const format = this.statics.formats(domNode, scroll);\n if (format === 'checked') {\n this.format('list', 'unchecked');\n e.preventDefault();\n } else if (format === 'unchecked') {\n this.format('list', 'checked');\n e.preventDefault();\n }\n };\n ui.addEventListener('mousedown', listEventHandler);\n ui.addEventListener('touchstart', listEventHandler);\n this.attachUI(ui);\n }\n format(name, value) {\n if (name === this.statics.blotName && value) {\n this.domNode.setAttribute('data-list', value);\n } else {\n super.format(name, value);\n }\n }\n}\nListItem.blotName = 'list';\nListItem.tagName = 'LI';\nListContainer.allowedChildren = [ListItem];\nListItem.requiredContainer = ListContainer;\nexport { ListContainer, ListItem as default };\n//# sourceMappingURL=list.js.map","import Inline from '../blots/inline.js';\nclass Bold extends Inline {\n static blotName = 'bold';\n static tagName = ['STRONG', 'B'];\n static create() {\n return super.create();\n }\n static formats() {\n return true;\n }\n optimize(context) {\n super.optimize(context);\n if (this.domNode.tagName !== this.statics.tagName[0]) {\n this.replaceWith(this.statics.blotName);\n }\n }\n}\nexport default Bold;\n//# sourceMappingURL=bold.js.map","import Bold from './bold.js';\nclass Italic extends Bold {\n static blotName = 'italic';\n static tagName = ['EM', 'I'];\n}\nexport default Italic;\n//# sourceMappingURL=italic.js.map","import Inline from '../blots/inline.js';\nclass Link extends Inline {\n static blotName = 'link';\n static tagName = 'A';\n static SANITIZED_URL = 'about:blank';\n static PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel', 'sms'];\n static create(value) {\n const node = super.create(value);\n node.setAttribute('href', this.sanitize(value));\n node.setAttribute('rel', 'noopener noreferrer');\n node.setAttribute('target', '_blank');\n return node;\n }\n static formats(domNode) {\n return domNode.getAttribute('href');\n }\n static sanitize(url) {\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;\n }\n format(name, value) {\n if (name !== this.statics.blotName || !value) {\n super.format(name, value);\n } else {\n // @ts-expect-error\n this.domNode.setAttribute('href', this.constructor.sanitize(value));\n }\n }\n}\nfunction sanitize(url, protocols) {\n const anchor = document.createElement('a');\n anchor.href = url;\n const protocol = anchor.href.slice(0, anchor.href.indexOf(':'));\n return protocols.indexOf(protocol) > -1;\n}\nexport { Link as default, sanitize };\n//# sourceMappingURL=link.js.map","import Inline from '../blots/inline.js';\nclass Script extends Inline {\n static blotName = 'script';\n static tagName = ['SUB', 'SUP'];\n static create(value) {\n if (value === 'super') {\n return document.createElement('sup');\n }\n if (value === 'sub') {\n return document.createElement('sub');\n }\n return super.create(value);\n }\n static formats(domNode) {\n if (domNode.tagName === 'SUB') return 'sub';\n if (domNode.tagName === 'SUP') return 'super';\n return undefined;\n }\n}\nexport default Script;\n//# sourceMappingURL=script.js.map","import Bold from './bold.js';\nclass Strike extends Bold {\n static blotName = 'strike';\n static tagName = ['S', 'STRIKE'];\n}\nexport default Strike;\n//# sourceMappingURL=strike.js.map","import Inline from '../blots/inline.js';\nclass Underline extends Inline {\n static blotName = 'underline';\n static tagName = 'U';\n}\nexport default Underline;\n//# sourceMappingURL=underline.js.map","import Embed from '../blots/embed.js';\nclass Formula extends Embed {\n static blotName = 'formula';\n static className = 'ql-formula';\n static tagName = 'SPAN';\n static create(value) {\n // @ts-expect-error\n if (window.katex == null) {\n throw new Error('Formula module requires KaTeX.');\n }\n const node = super.create(value);\n if (typeof value === 'string') {\n // @ts-expect-error\n window.katex.render(value, node, {\n throwOnError: false,\n errorColor: '#f00'\n });\n node.setAttribute('data-value', value);\n }\n return node;\n }\n static value(domNode) {\n return domNode.getAttribute('data-value');\n }\n html() {\n const {\n formula\n } = this.value();\n return `${formula}`;\n }\n}\nexport default Formula;\n//# sourceMappingURL=formula.js.map","import { EmbedBlot } from 'parchment';\nimport { sanitize } from './link.js';\nconst ATTRIBUTES = ['alt', 'height', 'width'];\nclass Image extends EmbedBlot {\n static blotName = 'image';\n static tagName = 'IMG';\n static create(value) {\n const node = super.create(value);\n if (typeof value === 'string') {\n node.setAttribute('src', this.sanitize(value));\n }\n return node;\n }\n static formats(domNode) {\n return ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n }, {});\n }\n static match(url) {\n return /\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url);\n }\n static sanitize(url) {\n return sanitize(url, ['http', 'https', 'data']) ? url : '//:0';\n }\n static value(domNode) {\n return domNode.getAttribute('src');\n }\n format(name, value) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n super.format(name, value);\n }\n }\n}\nexport default Image;\n//# sourceMappingURL=image.js.map","import { BlockEmbed } from '../blots/block.js';\nimport Link from './link.js';\nconst ATTRIBUTES = ['height', 'width'];\nclass Video extends BlockEmbed {\n static blotName = 'video';\n static className = 'ql-video';\n static tagName = 'IFRAME';\n static create(value) {\n const node = super.create(value);\n node.setAttribute('frameborder', '0');\n node.setAttribute('allowfullscreen', 'true');\n node.setAttribute('src', this.sanitize(value));\n return node;\n }\n static formats(domNode) {\n return ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n }, {});\n }\n static sanitize(url) {\n return Link.sanitize(url);\n }\n static value(domNode) {\n return domNode.getAttribute('src');\n }\n format(name, value) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n super.format(name, value);\n }\n }\n html() {\n const {\n video\n } = this.value();\n return `${video}`;\n }\n}\nexport default Video;\n//# sourceMappingURL=video.js.map","import Delta from 'quill-delta';\nimport { ClassAttributor, Scope } from 'parchment';\nimport Inline from '../blots/inline.js';\nimport Quill from '../core/quill.js';\nimport Module from '../core/module.js';\nimport { blockDelta } from '../blots/block.js';\nimport BreakBlot from '../blots/break.js';\nimport CursorBlot from '../blots/cursor.js';\nimport TextBlot, { escapeText } from '../blots/text.js';\nimport CodeBlock, { CodeBlockContainer } from '../formats/code.js';\nimport { traverse } from './clipboard.js';\nconst TokenAttributor = new ClassAttributor('code-token', 'hljs', {\n scope: Scope.INLINE\n});\nclass CodeToken extends Inline {\n static formats(node, scroll) {\n while (node != null && node !== scroll.domNode) {\n if (node.classList && node.classList.contains(CodeBlock.className)) {\n // @ts-expect-error\n return super.formats(node, scroll);\n }\n // @ts-expect-error\n node = node.parentNode;\n }\n return undefined;\n }\n constructor(scroll, domNode, value) {\n // @ts-expect-error\n super(scroll, domNode, value);\n TokenAttributor.add(this.domNode, value);\n }\n format(format, value) {\n if (format !== CodeToken.blotName) {\n super.format(format, value);\n } else if (value) {\n TokenAttributor.add(this.domNode, value);\n } else {\n TokenAttributor.remove(this.domNode);\n this.domNode.classList.remove(this.statics.className);\n }\n }\n optimize() {\n // @ts-expect-error\n super.optimize(...arguments);\n if (!TokenAttributor.value(this.domNode)) {\n this.unwrap();\n }\n }\n}\nCodeToken.blotName = 'code-token';\nCodeToken.className = 'ql-token';\nclass SyntaxCodeBlock extends CodeBlock {\n static create(value) {\n const domNode = super.create(value);\n if (typeof value === 'string') {\n domNode.setAttribute('data-language', value);\n }\n return domNode;\n }\n static formats(domNode) {\n // @ts-expect-error\n return domNode.getAttribute('data-language') || 'plain';\n }\n static register() {} // Syntax module will register\n\n format(name, value) {\n if (name === this.statics.blotName && value) {\n // @ts-expect-error\n this.domNode.setAttribute('data-language', value);\n } else {\n super.format(name, value);\n }\n }\n replaceWith(name, value) {\n this.formatAt(0, this.length(), CodeToken.blotName, false);\n return super.replaceWith(name, value);\n }\n}\nclass SyntaxCodeBlockContainer extends CodeBlockContainer {\n attach() {\n super.attach();\n this.forceNext = false;\n // @ts-expect-error\n this.scroll.emitMount(this);\n }\n format(name, value) {\n if (name === SyntaxCodeBlock.blotName) {\n this.forceNext = true;\n this.children.forEach(child => {\n // @ts-expect-error\n child.format(name, value);\n });\n }\n }\n formatAt(index, length, name, value) {\n if (name === SyntaxCodeBlock.blotName) {\n this.forceNext = true;\n }\n super.formatAt(index, length, name, value);\n }\n highlight(highlight) {\n let forced = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (this.children.head == null) return;\n const nodes = Array.from(this.domNode.childNodes).filter(node => node !== this.uiNode);\n const text = `${nodes.map(node => node.textContent).join('\\n')}\\n`;\n const language = SyntaxCodeBlock.formats(this.children.head.domNode);\n if (forced || this.forceNext || this.cachedText !== text) {\n if (text.trim().length > 0 || this.cachedText == null) {\n const oldDelta = this.children.reduce((delta, child) => {\n // @ts-expect-error\n return delta.concat(blockDelta(child, false));\n }, new Delta());\n const delta = highlight(text, language);\n oldDelta.diff(delta).reduce((index, _ref) => {\n let {\n retain,\n attributes\n } = _ref;\n // Should be all retains\n if (!retain) return index;\n if (attributes) {\n Object.keys(attributes).forEach(format => {\n if ([SyntaxCodeBlock.blotName, CodeToken.blotName].includes(format)) {\n // @ts-expect-error\n this.formatAt(index, retain, format, attributes[format]);\n }\n });\n }\n // @ts-expect-error\n return index + retain;\n }, 0);\n }\n this.cachedText = text;\n this.forceNext = false;\n }\n }\n html(index, length) {\n const [codeBlock] = this.children.find(index);\n const language = codeBlock ? SyntaxCodeBlock.formats(codeBlock.domNode) : 'plain';\n return `
    \\n${escapeText(this.code(index, length))}\\n
    `;\n }\n optimize(context) {\n super.optimize(context);\n if (this.parent != null && this.children.head != null && this.uiNode != null) {\n const language = SyntaxCodeBlock.formats(this.children.head.domNode);\n // @ts-expect-error\n if (language !== this.uiNode.value) {\n // @ts-expect-error\n this.uiNode.value = language;\n }\n }\n }\n}\nSyntaxCodeBlockContainer.allowedChildren = [SyntaxCodeBlock];\nSyntaxCodeBlock.requiredContainer = SyntaxCodeBlockContainer;\nSyntaxCodeBlock.allowedChildren = [CodeToken, CursorBlot, TextBlot, BreakBlot];\nconst highlight = (lib, language, text) => {\n if (typeof lib.versionString === 'string') {\n const majorVersion = lib.versionString.split('.')[0];\n if (parseInt(majorVersion, 10) >= 11) {\n return lib.highlight(text, {\n language\n }).value;\n }\n }\n return lib.highlight(language, text).value;\n};\nclass Syntax extends Module {\n static register() {\n Quill.register(CodeToken, true);\n Quill.register(SyntaxCodeBlock, true);\n Quill.register(SyntaxCodeBlockContainer, true);\n }\n constructor(quill, options) {\n super(quill, options);\n if (this.options.hljs == null) {\n throw new Error('Syntax module requires highlight.js. Please include the library on the page before Quill.');\n }\n // @ts-expect-error Fix me later\n this.languages = this.options.languages.reduce((memo, _ref2) => {\n let {\n key\n } = _ref2;\n memo[key] = true;\n return memo;\n }, {});\n this.highlightBlot = this.highlightBlot.bind(this);\n this.initListener();\n this.initTimer();\n }\n initListener() {\n this.quill.on(Quill.events.SCROLL_BLOT_MOUNT, blot => {\n if (!(blot instanceof SyntaxCodeBlockContainer)) return;\n const select = this.quill.root.ownerDocument.createElement('select');\n // @ts-expect-error Fix me later\n this.options.languages.forEach(_ref3 => {\n let {\n key,\n label\n } = _ref3;\n const option = select.ownerDocument.createElement('option');\n option.textContent = label;\n option.setAttribute('value', key);\n select.appendChild(option);\n });\n select.addEventListener('change', () => {\n blot.format(SyntaxCodeBlock.blotName, select.value);\n this.quill.root.focus(); // Prevent scrolling\n this.highlight(blot, true);\n });\n if (blot.uiNode == null) {\n blot.attachUI(select);\n if (blot.children.head) {\n select.value = SyntaxCodeBlock.formats(blot.children.head.domNode);\n }\n }\n });\n }\n initTimer() {\n let timer = null;\n this.quill.on(Quill.events.SCROLL_OPTIMIZE, () => {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n this.highlight();\n timer = null;\n }, this.options.interval);\n });\n }\n highlight() {\n let blot = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (this.quill.selection.composing) return;\n this.quill.update(Quill.sources.USER);\n const range = this.quill.getSelection();\n const blots = blot == null ? this.quill.scroll.descendants(SyntaxCodeBlockContainer) : [blot];\n blots.forEach(container => {\n container.highlight(this.highlightBlot, force);\n });\n this.quill.update(Quill.sources.SILENT);\n if (range != null) {\n this.quill.setSelection(range, Quill.sources.SILENT);\n }\n }\n highlightBlot(text) {\n let language = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'plain';\n language = this.languages[language] ? language : 'plain';\n if (language === 'plain') {\n return escapeText(text).split('\\n').reduce((delta, line, i) => {\n if (i !== 0) {\n delta.insert('\\n', {\n [CodeBlock.blotName]: language\n });\n }\n return delta.insert(line);\n }, new Delta());\n }\n const container = this.quill.root.ownerDocument.createElement('div');\n container.classList.add(CodeBlock.className);\n container.innerHTML = highlight(this.options.hljs, language, text);\n return traverse(this.quill.scroll, container, [(node, delta) => {\n // @ts-expect-error\n const value = TokenAttributor.value(node);\n if (value) {\n return delta.compose(new Delta().retain(delta.length(), {\n [CodeToken.blotName]: value\n }));\n }\n return delta;\n }], [(node, delta) => {\n // @ts-expect-error\n return node.data.split('\\n').reduce((memo, nodeText, i) => {\n if (i !== 0) memo.insert('\\n', {\n [CodeBlock.blotName]: language\n });\n return memo.insert(nodeText);\n }, delta);\n }], new WeakMap());\n }\n}\nSyntax.DEFAULTS = {\n hljs: (() => {\n return window.hljs;\n })(),\n interval: 1000,\n languages: [{\n key: 'plain',\n label: 'Plain'\n }, {\n key: 'bash',\n label: 'Bash'\n }, {\n key: 'cpp',\n label: 'C++'\n }, {\n key: 'cs',\n label: 'C#'\n }, {\n key: 'css',\n label: 'CSS'\n }, {\n key: 'diff',\n label: 'Diff'\n }, {\n key: 'xml',\n label: 'HTML/XML'\n }, {\n key: 'java',\n label: 'Java'\n }, {\n key: 'javascript',\n label: 'JavaScript'\n }, {\n key: 'markdown',\n label: 'Markdown'\n }, {\n key: 'php',\n label: 'PHP'\n }, {\n key: 'python',\n label: 'Python'\n }, {\n key: 'ruby',\n label: 'Ruby'\n }, {\n key: 'sql',\n label: 'SQL'\n }]\n};\nexport { SyntaxCodeBlock as CodeBlock, CodeToken, Syntax as default };\n//# sourceMappingURL=syntax.js.map","import Block from '../blots/block.js';\nimport Container from '../blots/container.js';\nclass TableCell extends Block {\n static blotName = 'table';\n static tagName = 'TD';\n static create(value) {\n const node = super.create();\n if (value) {\n node.setAttribute('data-row', value);\n } else {\n node.setAttribute('data-row', tableId());\n }\n return node;\n }\n static formats(domNode) {\n if (domNode.hasAttribute('data-row')) {\n return domNode.getAttribute('data-row');\n }\n return undefined;\n }\n cellOffset() {\n if (this.parent) {\n return this.parent.children.indexOf(this);\n }\n return -1;\n }\n format(name, value) {\n if (name === TableCell.blotName && value) {\n this.domNode.setAttribute('data-row', value);\n } else {\n super.format(name, value);\n }\n }\n row() {\n return this.parent;\n }\n rowOffset() {\n if (this.row()) {\n return this.row().rowOffset();\n }\n return -1;\n }\n table() {\n return this.row() && this.row().table();\n }\n}\nclass TableRow extends Container {\n static blotName = 'table-row';\n static tagName = 'TR';\n checkMerge() {\n // @ts-expect-error\n if (super.checkMerge() && this.next.children.head != null) {\n // @ts-expect-error\n const thisHead = this.children.head.formats();\n // @ts-expect-error\n const thisTail = this.children.tail.formats();\n // @ts-expect-error\n const nextHead = this.next.children.head.formats();\n // @ts-expect-error\n const nextTail = this.next.children.tail.formats();\n return thisHead.table === thisTail.table && thisHead.table === nextHead.table && thisHead.table === nextTail.table;\n }\n return false;\n }\n optimize(context) {\n super.optimize(context);\n this.children.forEach(child => {\n if (child.next == null) return;\n const childFormats = child.formats();\n const nextFormats = child.next.formats();\n if (childFormats.table !== nextFormats.table) {\n const next = this.splitAfter(child);\n if (next) {\n // @ts-expect-error TODO: parameters of optimize() should be a optional\n next.optimize();\n }\n // We might be able to merge with prev now\n if (this.prev) {\n // @ts-expect-error TODO: parameters of optimize() should be a optional\n this.prev.optimize();\n }\n }\n });\n }\n rowOffset() {\n if (this.parent) {\n return this.parent.children.indexOf(this);\n }\n return -1;\n }\n table() {\n return this.parent && this.parent.parent;\n }\n}\nclass TableBody extends Container {\n static blotName = 'table-body';\n static tagName = 'TBODY';\n}\nclass TableContainer extends Container {\n static blotName = 'table-container';\n static tagName = 'TABLE';\n balanceCells() {\n const rows = this.descendants(TableRow);\n const maxColumns = rows.reduce((max, row) => {\n return Math.max(row.children.length, max);\n }, 0);\n rows.forEach(row => {\n new Array(maxColumns - row.children.length).fill(0).forEach(() => {\n let value;\n if (row.children.head != null) {\n value = TableCell.formats(row.children.head.domNode);\n }\n const blot = this.scroll.create(TableCell.blotName, value);\n row.appendChild(blot);\n // @ts-expect-error TODO: parameters of optimize() should be a optional\n blot.optimize(); // Add break blot\n });\n });\n }\n cells(column) {\n return this.rows().map(row => row.children.at(column));\n }\n deleteColumn(index) {\n // @ts-expect-error\n const [body] = this.descendant(TableBody);\n if (body == null || body.children.head == null) return;\n body.children.forEach(row => {\n const cell = row.children.at(index);\n if (cell != null) {\n cell.remove();\n }\n });\n }\n insertColumn(index) {\n // @ts-expect-error\n const [body] = this.descendant(TableBody);\n if (body == null || body.children.head == null) return;\n body.children.forEach(row => {\n const ref = row.children.at(index);\n // @ts-expect-error\n const value = TableCell.formats(row.children.head.domNode);\n const cell = this.scroll.create(TableCell.blotName, value);\n row.insertBefore(cell, ref);\n });\n }\n insertRow(index) {\n // @ts-expect-error\n const [body] = this.descendant(TableBody);\n if (body == null || body.children.head == null) return;\n const id = tableId();\n const row = this.scroll.create(TableRow.blotName);\n body.children.head.children.forEach(() => {\n const cell = this.scroll.create(TableCell.blotName, id);\n row.appendChild(cell);\n });\n const ref = body.children.at(index);\n body.insertBefore(row, ref);\n }\n rows() {\n const body = this.children.head;\n if (body == null) return [];\n return body.children.map(row => row);\n }\n}\nTableContainer.allowedChildren = [TableBody];\nTableBody.requiredContainer = TableContainer;\nTableBody.allowedChildren = [TableRow];\nTableRow.requiredContainer = TableBody;\nTableRow.allowedChildren = [TableCell];\nTableCell.requiredContainer = TableRow;\nfunction tableId() {\n const id = Math.random().toString(36).slice(2, 6);\n return `row-${id}`;\n}\nexport { TableCell, TableRow, TableBody, TableContainer, tableId };\n//# sourceMappingURL=table.js.map","import Delta from 'quill-delta';\nimport Quill from '../core/quill.js';\nimport Module from '../core/module.js';\nimport { TableCell, TableRow, TableBody, TableContainer, tableId } from '../formats/table.js';\nclass Table extends Module {\n static register() {\n Quill.register(TableCell);\n Quill.register(TableRow);\n Quill.register(TableBody);\n Quill.register(TableContainer);\n }\n constructor() {\n super(...arguments);\n this.listenBalanceCells();\n }\n balanceTables() {\n this.quill.scroll.descendants(TableContainer).forEach(table => {\n table.balanceCells();\n });\n }\n deleteColumn() {\n const [table,, cell] = this.getTable();\n if (cell == null) return;\n // @ts-expect-error\n table.deleteColumn(cell.cellOffset());\n this.quill.update(Quill.sources.USER);\n }\n deleteRow() {\n const [, row] = this.getTable();\n if (row == null) return;\n row.remove();\n this.quill.update(Quill.sources.USER);\n }\n deleteTable() {\n const [table] = this.getTable();\n if (table == null) return;\n // @ts-expect-error\n const offset = table.offset();\n // @ts-expect-error\n table.remove();\n this.quill.update(Quill.sources.USER);\n this.quill.setSelection(offset, Quill.sources.SILENT);\n }\n getTable() {\n let range = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.quill.getSelection();\n if (range == null) return [null, null, null, -1];\n const [cell, offset] = this.quill.getLine(range.index);\n if (cell == null || cell.statics.blotName !== TableCell.blotName) {\n return [null, null, null, -1];\n }\n const row = cell.parent;\n const table = row.parent.parent;\n // @ts-expect-error\n return [table, row, cell, offset];\n }\n insertColumn(offset) {\n const range = this.quill.getSelection();\n if (!range) return;\n const [table, row, cell] = this.getTable(range);\n if (cell == null) return;\n const column = cell.cellOffset();\n table.insertColumn(column + offset);\n this.quill.update(Quill.sources.USER);\n let shift = row.rowOffset();\n if (offset === 0) {\n shift += 1;\n }\n this.quill.setSelection(range.index + shift, range.length, Quill.sources.SILENT);\n }\n insertColumnLeft() {\n this.insertColumn(0);\n }\n insertColumnRight() {\n this.insertColumn(1);\n }\n insertRow(offset) {\n const range = this.quill.getSelection();\n if (!range) return;\n const [table, row, cell] = this.getTable(range);\n if (cell == null) return;\n const index = row.rowOffset();\n table.insertRow(index + offset);\n this.quill.update(Quill.sources.USER);\n if (offset > 0) {\n this.quill.setSelection(range, Quill.sources.SILENT);\n } else {\n this.quill.setSelection(range.index + row.children.length, range.length, Quill.sources.SILENT);\n }\n }\n insertRowAbove() {\n this.insertRow(0);\n }\n insertRowBelow() {\n this.insertRow(1);\n }\n insertTable(rows, columns) {\n const range = this.quill.getSelection();\n if (range == null) return;\n const delta = new Array(rows).fill(0).reduce(memo => {\n const text = new Array(columns).fill('\\n').join('');\n return memo.insert(text, {\n table: tableId()\n });\n }, new Delta().retain(range.index));\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index, Quill.sources.SILENT);\n this.balanceTables();\n }\n listenBalanceCells() {\n this.quill.on(Quill.events.SCROLL_OPTIMIZE, mutations => {\n mutations.some(mutation => {\n if (['TD', 'TR', 'TBODY', 'TABLE'].includes(mutation.target.tagName)) {\n this.quill.once(Quill.events.TEXT_CHANGE, (delta, old, source) => {\n if (source !== Quill.sources.USER) return;\n this.balanceTables();\n });\n return true;\n }\n return false;\n });\n });\n }\n}\nexport default Table;\n//# sourceMappingURL=table.js.map","import Delta from 'quill-delta';\nimport { EmbedBlot, Scope } from 'parchment';\nimport Quill from '../core/quill.js';\nimport logger from '../core/logger.js';\nimport Module from '../core/module.js';\nconst debug = logger('quill:toolbar');\nclass Toolbar extends Module {\n constructor(quill, options) {\n super(quill, options);\n if (Array.isArray(this.options.container)) {\n const container = document.createElement('div');\n container.setAttribute('role', 'toolbar');\n addControls(container, this.options.container);\n quill.container?.parentNode?.insertBefore(container, quill.container);\n this.container = container;\n } else if (typeof this.options.container === 'string') {\n this.container = document.querySelector(this.options.container);\n } else {\n this.container = this.options.container;\n }\n if (!(this.container instanceof HTMLElement)) {\n debug.error('Container required for toolbar', this.options);\n return;\n }\n this.container.classList.add('ql-toolbar');\n this.controls = [];\n this.handlers = {};\n if (this.options.handlers) {\n Object.keys(this.options.handlers).forEach(format => {\n const handler = this.options.handlers?.[format];\n if (handler) {\n this.addHandler(format, handler);\n }\n });\n }\n Array.from(this.container.querySelectorAll('button, select')).forEach(input => {\n // @ts-expect-error\n this.attach(input);\n });\n this.quill.on(Quill.events.EDITOR_CHANGE, () => {\n const [range] = this.quill.selection.getRange(); // quill.getSelection triggers update\n this.update(range);\n });\n }\n addHandler(format, handler) {\n this.handlers[format] = handler;\n }\n attach(input) {\n let format = Array.from(input.classList).find(className => {\n return className.indexOf('ql-') === 0;\n });\n if (!format) return;\n format = format.slice('ql-'.length);\n if (input.tagName === 'BUTTON') {\n input.setAttribute('type', 'button');\n }\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\n debug.warn('ignoring attaching to nonexistent format', format, input);\n return;\n }\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click';\n input.addEventListener(eventName, e => {\n let value;\n if (input.tagName === 'SELECT') {\n // @ts-expect-error\n if (input.selectedIndex < 0) return;\n // @ts-expect-error\n const selected = input.options[input.selectedIndex];\n if (selected.hasAttribute('selected')) {\n value = false;\n } else {\n value = selected.value || false;\n }\n } else {\n if (input.classList.contains('ql-active')) {\n value = false;\n } else {\n // @ts-expect-error\n value = input.value || !input.hasAttribute('value');\n }\n e.preventDefault();\n }\n this.quill.focus();\n const [range] = this.quill.selection.getRange();\n if (this.handlers[format] != null) {\n this.handlers[format].call(this, value);\n } else if (\n // @ts-expect-error\n this.quill.scroll.query(format).prototype instanceof EmbedBlot) {\n value = prompt(`Enter ${format}`); // eslint-disable-line no-alert\n if (!value) return;\n this.quill.updateContents(new Delta()\n // @ts-expect-error Fix me later\n .retain(range.index)\n // @ts-expect-error Fix me later\n .delete(range.length).insert({\n [format]: value\n }), Quill.sources.USER);\n } else {\n this.quill.format(format, value, Quill.sources.USER);\n }\n this.update(range);\n });\n this.controls.push([format, input]);\n }\n update(range) {\n const formats = range == null ? {} : this.quill.getFormat(range);\n this.controls.forEach(pair => {\n const [format, input] = pair;\n if (input.tagName === 'SELECT') {\n let option = null;\n if (range == null) {\n option = null;\n } else if (formats[format] == null) {\n option = input.querySelector('option[selected]');\n } else if (!Array.isArray(formats[format])) {\n let value = formats[format];\n if (typeof value === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n }\n option = input.querySelector(`option[value=\"${value}\"]`);\n }\n if (option == null) {\n // @ts-expect-error TODO fix me later\n input.value = ''; // TODO make configurable?\n // @ts-expect-error TODO fix me later\n input.selectedIndex = -1;\n } else {\n option.selected = true;\n }\n } else if (range == null) {\n input.classList.remove('ql-active');\n input.setAttribute('aria-pressed', 'false');\n } else if (input.hasAttribute('value')) {\n // both being null should match (default values)\n // '1' should match with 1 (headers)\n const value = formats[format];\n const isActive = value === input.getAttribute('value') || value != null && value.toString() === input.getAttribute('value') || value == null && !input.getAttribute('value');\n input.classList.toggle('ql-active', isActive);\n input.setAttribute('aria-pressed', isActive.toString());\n } else {\n const isActive = formats[format] != null;\n input.classList.toggle('ql-active', isActive);\n input.setAttribute('aria-pressed', isActive.toString());\n }\n });\n }\n}\nToolbar.DEFAULTS = {};\nfunction addButton(container, format, value) {\n const input = document.createElement('button');\n input.setAttribute('type', 'button');\n input.classList.add(`ql-${format}`);\n input.setAttribute('aria-pressed', 'false');\n if (value != null) {\n input.value = value;\n input.setAttribute('aria-label', `${format}: ${value}`);\n } else {\n input.setAttribute('aria-label', format);\n }\n container.appendChild(input);\n}\nfunction addControls(container, groups) {\n if (!Array.isArray(groups[0])) {\n // @ts-expect-error\n groups = [groups];\n }\n groups.forEach(controls => {\n const group = document.createElement('span');\n group.classList.add('ql-formats');\n controls.forEach(control => {\n if (typeof control === 'string') {\n addButton(group, control);\n } else {\n const format = Object.keys(control)[0];\n const value = control[format];\n if (Array.isArray(value)) {\n addSelect(group, format, value);\n } else {\n addButton(group, format, value);\n }\n }\n });\n container.appendChild(group);\n });\n}\nfunction addSelect(container, format, values) {\n const input = document.createElement('select');\n input.classList.add(`ql-${format}`);\n values.forEach(value => {\n const option = document.createElement('option');\n if (value !== false) {\n option.setAttribute('value', String(value));\n } else {\n option.setAttribute('selected', 'selected');\n }\n input.appendChild(option);\n });\n container.appendChild(input);\n}\nToolbar.DEFAULTS = {\n container: null,\n handlers: {\n clean() {\n const range = this.quill.getSelection();\n if (range == null) return;\n if (range.length === 0) {\n const formats = this.quill.getFormat();\n Object.keys(formats).forEach(name => {\n // Clean functionality in existing apps only clean inline formats\n if (this.quill.scroll.query(name, Scope.INLINE) != null) {\n this.quill.format(name, false, Quill.sources.USER);\n }\n });\n } else {\n this.quill.removeFormat(range.index, range.length, Quill.sources.USER);\n }\n },\n direction(value) {\n const {\n align\n } = this.quill.getFormat();\n if (value === 'rtl' && align == null) {\n this.quill.format('align', 'right', Quill.sources.USER);\n } else if (!value && align === 'right') {\n this.quill.format('align', false, Quill.sources.USER);\n }\n this.quill.format('direction', value, Quill.sources.USER);\n },\n indent(value) {\n const range = this.quill.getSelection();\n // @ts-expect-error\n const formats = this.quill.getFormat(range);\n // @ts-expect-error\n const indent = parseInt(formats.indent || 0, 10);\n if (value === '+1' || value === '-1') {\n let modifier = value === '+1' ? 1 : -1;\n if (formats.direction === 'rtl') modifier *= -1;\n this.quill.format('indent', indent + modifier, Quill.sources.USER);\n }\n },\n link(value) {\n if (value === true) {\n value = prompt('Enter link URL:'); // eslint-disable-line no-alert\n }\n this.quill.format('link', value, Quill.sources.USER);\n },\n list(value) {\n const range = this.quill.getSelection();\n // @ts-expect-error\n const formats = this.quill.getFormat(range);\n if (value === 'check') {\n if (formats.list === 'checked' || formats.list === 'unchecked') {\n this.quill.format('list', false, Quill.sources.USER);\n } else {\n this.quill.format('list', 'unchecked', Quill.sources.USER);\n }\n } else {\n this.quill.format('list', value, Quill.sources.USER);\n }\n }\n }\n};\nexport { Toolbar as default, addControls };\n//# sourceMappingURL=toolbar.js.map","const alignLeftIcon = \"\";\nconst alignCenterIcon = \"\";\nconst alignRightIcon = \"\";\nconst alignJustifyIcon = \"\";\nconst backgroundIcon = \"\";\nconst blockquoteIcon = \"\";\nconst boldIcon = \"\";\nconst cleanIcon = \"\";\nconst codeIcon = \"\";\nconst colorIcon = \"\";\nconst directionLeftToRightIcon = \"\";\nconst directionRightToLeftIcon = \"\";\nconst formulaIcon = \"\";\nconst headerIcon = \"\";\nconst header2Icon = \"\";\nconst header3Icon = \"\";\nconst header4Icon = \"\";\nconst header5Icon = \"\";\nconst header6Icon = \"\";\nconst italicIcon = \"\";\nconst imageIcon = \"\";\nconst indentIcon = \"\";\nconst outdentIcon = \"\";\nconst linkIcon = \"\";\nconst listBulletIcon = \"\";\nconst listCheckIcon = \"\";\nconst listOrderedIcon = \"\";\nconst subscriptIcon = \"\";\nconst superscriptIcon = \"\";\nconst strikeIcon = \"\";\nconst tableIcon = \"\";\nconst underlineIcon = \"\";\nconst videoIcon = \"\";\nexport default {\n align: {\n '': alignLeftIcon,\n center: alignCenterIcon,\n right: alignRightIcon,\n justify: alignJustifyIcon\n },\n background: backgroundIcon,\n blockquote: blockquoteIcon,\n bold: boldIcon,\n clean: cleanIcon,\n code: codeIcon,\n 'code-block': codeIcon,\n color: colorIcon,\n direction: {\n '': directionLeftToRightIcon,\n rtl: directionRightToLeftIcon\n },\n formula: formulaIcon,\n header: {\n '1': headerIcon,\n '2': header2Icon,\n '3': header3Icon,\n '4': header4Icon,\n '5': header5Icon,\n '6': header6Icon\n },\n italic: italicIcon,\n image: imageIcon,\n indent: {\n '+1': indentIcon,\n '-1': outdentIcon\n },\n link: linkIcon,\n list: {\n bullet: listBulletIcon,\n check: listCheckIcon,\n ordered: listOrderedIcon\n },\n script: {\n sub: subscriptIcon,\n super: superscriptIcon\n },\n strike: strikeIcon,\n table: tableIcon,\n underline: underlineIcon,\n video: videoIcon\n};\n//# sourceMappingURL=icons.js.map","const DropdownIcon = \"\";\nlet optionsCounter = 0;\nfunction toggleAriaAttribute(element, attribute) {\n element.setAttribute(attribute, `${!(element.getAttribute(attribute) === 'true')}`);\n}\nclass Picker {\n constructor(select) {\n this.select = select;\n this.container = document.createElement('span');\n this.buildPicker();\n this.select.style.display = 'none';\n // @ts-expect-error Fix me later\n this.select.parentNode.insertBefore(this.container, this.select);\n this.label.addEventListener('mousedown', () => {\n this.togglePicker();\n });\n this.label.addEventListener('keydown', event => {\n switch (event.key) {\n case 'Enter':\n this.togglePicker();\n break;\n case 'Escape':\n this.escape();\n event.preventDefault();\n break;\n default:\n }\n });\n this.select.addEventListener('change', this.update.bind(this));\n }\n togglePicker() {\n this.container.classList.toggle('ql-expanded');\n // Toggle aria-expanded and aria-hidden to make the picker accessible\n toggleAriaAttribute(this.label, 'aria-expanded');\n // @ts-expect-error\n toggleAriaAttribute(this.options, 'aria-hidden');\n }\n buildItem(option) {\n const item = document.createElement('span');\n // @ts-expect-error\n item.tabIndex = '0';\n item.setAttribute('role', 'button');\n item.classList.add('ql-picker-item');\n const value = option.getAttribute('value');\n if (value) {\n item.setAttribute('data-value', value);\n }\n if (option.textContent) {\n item.setAttribute('data-label', option.textContent);\n }\n item.addEventListener('click', () => {\n this.selectItem(item, true);\n });\n item.addEventListener('keydown', event => {\n switch (event.key) {\n case 'Enter':\n this.selectItem(item, true);\n event.preventDefault();\n break;\n case 'Escape':\n this.escape();\n event.preventDefault();\n break;\n default:\n }\n });\n return item;\n }\n buildLabel() {\n const label = document.createElement('span');\n label.classList.add('ql-picker-label');\n label.innerHTML = DropdownIcon;\n // @ts-expect-error\n label.tabIndex = '0';\n label.setAttribute('role', 'button');\n label.setAttribute('aria-expanded', 'false');\n this.container.appendChild(label);\n return label;\n }\n buildOptions() {\n const options = document.createElement('span');\n options.classList.add('ql-picker-options');\n\n // Don't want screen readers to read this until options are visible\n options.setAttribute('aria-hidden', 'true');\n // @ts-expect-error\n options.tabIndex = '-1';\n\n // Need a unique id for aria-controls\n options.id = `ql-picker-options-${optionsCounter}`;\n optionsCounter += 1;\n this.label.setAttribute('aria-controls', options.id);\n\n // @ts-expect-error\n this.options = options;\n Array.from(this.select.options).forEach(option => {\n const item = this.buildItem(option);\n options.appendChild(item);\n if (option.selected === true) {\n this.selectItem(item);\n }\n });\n this.container.appendChild(options);\n }\n buildPicker() {\n Array.from(this.select.attributes).forEach(item => {\n this.container.setAttribute(item.name, item.value);\n });\n this.container.classList.add('ql-picker');\n this.label = this.buildLabel();\n this.buildOptions();\n }\n escape() {\n // Close menu and return focus to trigger label\n this.close();\n // Need setTimeout for accessibility to ensure that the browser executes\n // focus on the next process thread and after any DOM content changes\n setTimeout(() => this.label.focus(), 1);\n }\n close() {\n this.container.classList.remove('ql-expanded');\n this.label.setAttribute('aria-expanded', 'false');\n // @ts-expect-error\n this.options.setAttribute('aria-hidden', 'true');\n }\n selectItem(item) {\n let trigger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n const selected = this.container.querySelector('.ql-selected');\n if (item === selected) return;\n if (selected != null) {\n selected.classList.remove('ql-selected');\n }\n if (item == null) return;\n item.classList.add('ql-selected');\n // @ts-expect-error Fix me later\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(item);\n if (item.hasAttribute('data-value')) {\n // @ts-expect-error Fix me later\n this.label.setAttribute('data-value', item.getAttribute('data-value'));\n } else {\n this.label.removeAttribute('data-value');\n }\n if (item.hasAttribute('data-label')) {\n // @ts-expect-error Fix me later\n this.label.setAttribute('data-label', item.getAttribute('data-label'));\n } else {\n this.label.removeAttribute('data-label');\n }\n if (trigger) {\n this.select.dispatchEvent(new Event('change'));\n this.close();\n }\n }\n update() {\n let option;\n if (this.select.selectedIndex > -1) {\n const item =\n // @ts-expect-error Fix me later\n this.container.querySelector('.ql-picker-options').children[this.select.selectedIndex];\n option = this.select.options[this.select.selectedIndex];\n // @ts-expect-error\n this.selectItem(item);\n } else {\n this.selectItem(null);\n }\n const isActive = option != null && option !== this.select.querySelector('option[selected]');\n this.label.classList.toggle('ql-active', isActive);\n }\n}\nexport default Picker;\n//# sourceMappingURL=picker.js.map","import Picker from './picker.js';\nclass ColorPicker extends Picker {\n constructor(select, label) {\n super(select);\n this.label.innerHTML = label;\n this.container.classList.add('ql-color-picker');\n Array.from(this.container.querySelectorAll('.ql-picker-item')).slice(0, 7).forEach(item => {\n item.classList.add('ql-primary');\n });\n }\n buildItem(option) {\n const item = super.buildItem(option);\n item.style.backgroundColor = option.getAttribute('value') || '';\n return item;\n }\n selectItem(item, trigger) {\n super.selectItem(item, trigger);\n const colorLabel = this.label.querySelector('.ql-color-label');\n const value = item ? item.getAttribute('data-value') || '' : '';\n if (colorLabel) {\n if (colorLabel.tagName === 'line') {\n colorLabel.style.stroke = value;\n } else {\n colorLabel.style.fill = value;\n }\n }\n }\n}\nexport default ColorPicker;\n//# sourceMappingURL=color-picker.js.map","import Picker from './picker.js';\nclass IconPicker extends Picker {\n constructor(select, icons) {\n super(select);\n this.container.classList.add('ql-icon-picker');\n Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(item => {\n item.innerHTML = icons[item.getAttribute('data-value') || ''];\n });\n this.defaultItem = this.container.querySelector('.ql-selected');\n this.selectItem(this.defaultItem);\n }\n selectItem(target, trigger) {\n super.selectItem(target, trigger);\n const item = target || this.defaultItem;\n if (item != null) {\n if (this.label.innerHTML === item.innerHTML) return;\n this.label.innerHTML = item.innerHTML;\n }\n }\n}\nexport default IconPicker;\n//# sourceMappingURL=icon-picker.js.map","const isScrollable = el => {\n const {\n overflowY\n } = getComputedStyle(el, null);\n return overflowY !== 'visible' && overflowY !== 'clip';\n};\nclass Tooltip {\n constructor(quill, boundsContainer) {\n this.quill = quill;\n this.boundsContainer = boundsContainer || document.body;\n this.root = quill.addContainer('ql-tooltip');\n // @ts-expect-error\n this.root.innerHTML = this.constructor.TEMPLATE;\n if (isScrollable(this.quill.root)) {\n this.quill.root.addEventListener('scroll', () => {\n this.root.style.marginTop = `${-1 * this.quill.root.scrollTop}px`;\n });\n }\n this.hide();\n }\n hide() {\n this.root.classList.add('ql-hidden');\n }\n position(reference) {\n const left = reference.left + reference.width / 2 - this.root.offsetWidth / 2;\n // root.scrollTop should be 0 if scrollContainer !== root\n const top = reference.bottom + this.quill.root.scrollTop;\n this.root.style.left = `${left}px`;\n this.root.style.top = `${top}px`;\n this.root.classList.remove('ql-flip');\n const containerBounds = this.boundsContainer.getBoundingClientRect();\n const rootBounds = this.root.getBoundingClientRect();\n let shift = 0;\n if (rootBounds.right > containerBounds.right) {\n shift = containerBounds.right - rootBounds.right;\n this.root.style.left = `${left + shift}px`;\n }\n if (rootBounds.left < containerBounds.left) {\n shift = containerBounds.left - rootBounds.left;\n this.root.style.left = `${left + shift}px`;\n }\n if (rootBounds.bottom > containerBounds.bottom) {\n const height = rootBounds.bottom - rootBounds.top;\n const verticalShift = reference.bottom - reference.top + height;\n this.root.style.top = `${top - verticalShift}px`;\n this.root.classList.add('ql-flip');\n }\n return shift;\n }\n show() {\n this.root.classList.remove('ql-editing');\n this.root.classList.remove('ql-hidden');\n }\n}\nexport default Tooltip;\n//# sourceMappingURL=tooltip.js.map","import { merge } from 'lodash-es';\nimport Emitter from '../core/emitter.js';\nimport Theme from '../core/theme.js';\nimport ColorPicker from '../ui/color-picker.js';\nimport IconPicker from '../ui/icon-picker.js';\nimport Picker from '../ui/picker.js';\nimport Tooltip from '../ui/tooltip.js';\nconst ALIGNS = [false, 'center', 'right', 'justify'];\nconst COLORS = ['#000000', '#e60000', '#ff9900', '#ffff00', '#008a00', '#0066cc', '#9933ff', '#ffffff', '#facccc', '#ffebcc', '#ffffcc', '#cce8cc', '#cce0f5', '#ebd6ff', '#bbbbbb', '#f06666', '#ffc266', '#ffff66', '#66b966', '#66a3e0', '#c285ff', '#888888', '#a10000', '#b26b00', '#b2b200', '#006100', '#0047b2', '#6b24b2', '#444444', '#5c0000', '#663d00', '#666600', '#003700', '#002966', '#3d1466'];\nconst FONTS = [false, 'serif', 'monospace'];\nconst HEADERS = ['1', '2', '3', false];\nconst SIZES = ['small', false, 'large', 'huge'];\nclass BaseTheme extends Theme {\n constructor(quill, options) {\n super(quill, options);\n const listener = e => {\n if (!document.body.contains(quill.root)) {\n document.body.removeEventListener('click', listener);\n return;\n }\n if (this.tooltip != null &&\n // @ts-expect-error\n !this.tooltip.root.contains(e.target) &&\n // @ts-expect-error\n document.activeElement !== this.tooltip.textbox && !this.quill.hasFocus()) {\n this.tooltip.hide();\n }\n if (this.pickers != null) {\n this.pickers.forEach(picker => {\n // @ts-expect-error\n if (!picker.container.contains(e.target)) {\n picker.close();\n }\n });\n }\n };\n quill.emitter.listenDOM('click', document.body, listener);\n }\n addModule(name) {\n const module = super.addModule(name);\n if (name === 'toolbar') {\n // @ts-expect-error\n this.extendToolbar(module);\n }\n return module;\n }\n buildButtons(buttons, icons) {\n Array.from(buttons).forEach(button => {\n const className = button.getAttribute('class') || '';\n className.split(/\\s+/).forEach(name => {\n if (!name.startsWith('ql-')) return;\n name = name.slice('ql-'.length);\n if (icons[name] == null) return;\n if (name === 'direction') {\n // @ts-expect-error\n button.innerHTML = icons[name][''] + icons[name].rtl;\n } else if (typeof icons[name] === 'string') {\n // @ts-expect-error\n button.innerHTML = icons[name];\n } else {\n // @ts-expect-error\n const value = button.value || '';\n // @ts-expect-error\n if (value != null && icons[name][value]) {\n // @ts-expect-error\n button.innerHTML = icons[name][value];\n }\n }\n });\n });\n }\n buildPickers(selects, icons) {\n this.pickers = Array.from(selects).map(select => {\n if (select.classList.contains('ql-align')) {\n if (select.querySelector('option') == null) {\n fillSelect(select, ALIGNS);\n }\n if (typeof icons.align === 'object') {\n return new IconPicker(select, icons.align);\n }\n }\n if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\n const format = select.classList.contains('ql-background') ? 'background' : 'color';\n if (select.querySelector('option') == null) {\n fillSelect(select, COLORS, format === 'background' ? '#ffffff' : '#000000');\n }\n return new ColorPicker(select, icons[format]);\n }\n if (select.querySelector('option') == null) {\n if (select.classList.contains('ql-font')) {\n fillSelect(select, FONTS);\n } else if (select.classList.contains('ql-header')) {\n fillSelect(select, HEADERS);\n } else if (select.classList.contains('ql-size')) {\n fillSelect(select, SIZES);\n }\n }\n return new Picker(select);\n });\n const update = () => {\n this.pickers.forEach(picker => {\n picker.update();\n });\n };\n this.quill.on(Emitter.events.EDITOR_CHANGE, update);\n }\n}\nBaseTheme.DEFAULTS = merge({}, Theme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n formula() {\n this.quill.theme.tooltip.edit('formula');\n },\n image() {\n let fileInput = this.container.querySelector('input.ql-image[type=file]');\n if (fileInput == null) {\n fileInput = document.createElement('input');\n fileInput.setAttribute('type', 'file');\n fileInput.setAttribute('accept', this.quill.uploader.options.mimetypes.join(', '));\n fileInput.classList.add('ql-image');\n fileInput.addEventListener('change', () => {\n const range = this.quill.getSelection(true);\n this.quill.uploader.upload(range, fileInput.files);\n fileInput.value = '';\n });\n this.container.appendChild(fileInput);\n }\n fileInput.click();\n },\n video() {\n this.quill.theme.tooltip.edit('video');\n }\n }\n }\n }\n});\nclass BaseTooltip extends Tooltip {\n constructor(quill, boundsContainer) {\n super(quill, boundsContainer);\n this.textbox = this.root.querySelector('input[type=\"text\"]');\n this.listen();\n }\n listen() {\n // @ts-expect-error Fix me later\n this.textbox.addEventListener('keydown', event => {\n if (event.key === 'Enter') {\n this.save();\n event.preventDefault();\n } else if (event.key === 'Escape') {\n this.cancel();\n event.preventDefault();\n }\n });\n }\n cancel() {\n this.hide();\n this.restoreFocus();\n }\n edit() {\n let mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'link';\n let preview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n this.root.classList.remove('ql-hidden');\n this.root.classList.add('ql-editing');\n if (this.textbox == null) return;\n if (preview != null) {\n this.textbox.value = preview;\n } else if (mode !== this.root.getAttribute('data-mode')) {\n this.textbox.value = '';\n }\n const bounds = this.quill.getBounds(this.quill.selection.savedRange);\n if (bounds != null) {\n this.position(bounds);\n }\n this.textbox.select();\n this.textbox.setAttribute('placeholder', this.textbox.getAttribute(`data-${mode}`) || '');\n this.root.setAttribute('data-mode', mode);\n }\n restoreFocus() {\n this.quill.focus({\n preventScroll: true\n });\n }\n save() {\n // @ts-expect-error Fix me later\n let {\n value\n } = this.textbox;\n switch (this.root.getAttribute('data-mode')) {\n case 'link':\n {\n const {\n scrollTop\n } = this.quill.root;\n if (this.linkRange) {\n this.quill.formatText(this.linkRange, 'link', value, Emitter.sources.USER);\n delete this.linkRange;\n } else {\n this.restoreFocus();\n this.quill.format('link', value, Emitter.sources.USER);\n }\n this.quill.root.scrollTop = scrollTop;\n break;\n }\n case 'video':\n {\n value = extractVideoUrl(value);\n }\n // eslint-disable-next-line no-fallthrough\n case 'formula':\n {\n if (!value) break;\n const range = this.quill.getSelection(true);\n if (range != null) {\n const index = range.index + range.length;\n this.quill.insertEmbed(index,\n // @ts-expect-error Fix me later\n this.root.getAttribute('data-mode'), value, Emitter.sources.USER);\n if (this.root.getAttribute('data-mode') === 'formula') {\n this.quill.insertText(index + 1, ' ', Emitter.sources.USER);\n }\n this.quill.setSelection(index + 2, Emitter.sources.USER);\n }\n break;\n }\n default:\n }\n // @ts-expect-error Fix me later\n this.textbox.value = '';\n this.hide();\n }\n}\nfunction extractVideoUrl(url) {\n let match = url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtube\\.com\\/watch.*v=([a-zA-Z0-9_-]+)/) || url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n if (match) {\n return `${match[1] || 'https'}://www.youtube.com/embed/${match[2]}?showinfo=0`;\n }\n // eslint-disable-next-line no-cond-assign\n if (match = url.match(/^(?:(https?):\\/\\/)?(?:www\\.)?vimeo\\.com\\/(\\d+)/)) {\n return `${match[1] || 'https'}://player.vimeo.com/video/${match[2]}/`;\n }\n return url;\n}\nfunction fillSelect(select, values) {\n let defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n values.forEach(value => {\n const option = document.createElement('option');\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected');\n } else {\n option.setAttribute('value', String(value));\n }\n select.appendChild(option);\n });\n}\nexport { BaseTooltip, BaseTheme as default };\n//# sourceMappingURL=base.js.map","import { merge } from 'lodash-es';\nimport Emitter from '../core/emitter.js';\nimport BaseTheme, { BaseTooltip } from './base.js';\nimport { Range } from '../core/selection.js';\nimport icons from '../ui/icons.js';\nimport Quill from '../core/quill.js';\nconst TOOLBAR_CONFIG = [['bold', 'italic', 'link'], [{\n header: 1\n}, {\n header: 2\n}, 'blockquote']];\nclass BubbleTooltip extends BaseTooltip {\n static TEMPLATE = ['', '
    ', '', '', '
    '].join('');\n constructor(quill, bounds) {\n super(quill, bounds);\n this.quill.on(Emitter.events.EDITOR_CHANGE, (type, range, oldRange, source) => {\n if (type !== Emitter.events.SELECTION_CHANGE) return;\n if (range != null && range.length > 0 && source === Emitter.sources.USER) {\n this.show();\n // Lock our width so we will expand beyond our offsetParent boundaries\n this.root.style.left = '0px';\n this.root.style.width = '';\n this.root.style.width = `${this.root.offsetWidth}px`;\n const lines = this.quill.getLines(range.index, range.length);\n if (lines.length === 1) {\n const bounds = this.quill.getBounds(range);\n if (bounds != null) {\n this.position(bounds);\n }\n } else {\n const lastLine = lines[lines.length - 1];\n const index = this.quill.getIndex(lastLine);\n const length = Math.min(lastLine.length() - 1, range.index + range.length - index);\n const indexBounds = this.quill.getBounds(new Range(index, length));\n if (indexBounds != null) {\n this.position(indexBounds);\n }\n }\n } else if (document.activeElement !== this.textbox && this.quill.hasFocus()) {\n this.hide();\n }\n });\n }\n listen() {\n super.listen();\n // @ts-expect-error Fix me later\n this.root.querySelector('.ql-close').addEventListener('click', () => {\n this.root.classList.remove('ql-editing');\n });\n this.quill.on(Emitter.events.SCROLL_OPTIMIZE, () => {\n // Let selection be restored by toolbar handlers before repositioning\n setTimeout(() => {\n if (this.root.classList.contains('ql-hidden')) return;\n const range = this.quill.getSelection();\n if (range != null) {\n const bounds = this.quill.getBounds(range);\n if (bounds != null) {\n this.position(bounds);\n }\n }\n }, 1);\n });\n }\n cancel() {\n this.show();\n }\n position(reference) {\n const shift = super.position(reference);\n const arrow = this.root.querySelector('.ql-tooltip-arrow');\n // @ts-expect-error\n arrow.style.marginLeft = '';\n if (shift !== 0) {\n // @ts-expect-error\n arrow.style.marginLeft = `${-1 * shift - arrow.offsetWidth / 2}px`;\n }\n return shift;\n }\n}\nclass BubbleTheme extends BaseTheme {\n constructor(quill, options) {\n if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n options.modules.toolbar.container = TOOLBAR_CONFIG;\n }\n super(quill, options);\n this.quill.container.classList.add('ql-bubble');\n }\n extendToolbar(toolbar) {\n // @ts-expect-error\n this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n if (toolbar.container != null) {\n this.tooltip.root.appendChild(toolbar.container);\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons);\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons);\n }\n }\n}\nBubbleTheme.DEFAULTS = merge({}, BaseTheme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n link(value) {\n if (!value) {\n this.quill.format('link', false, Quill.sources.USER);\n } else {\n // @ts-expect-error\n this.quill.theme.tooltip.edit();\n }\n }\n }\n }\n }\n});\nexport { BubbleTooltip, BubbleTheme as default };\n//# sourceMappingURL=bubble.js.map","import { merge } from 'lodash-es';\nimport Emitter from '../core/emitter.js';\nimport BaseTheme, { BaseTooltip } from './base.js';\nimport LinkBlot from '../formats/link.js';\nimport { Range } from '../core/selection.js';\nimport icons from '../ui/icons.js';\nimport Quill from '../core/quill.js';\nconst TOOLBAR_CONFIG = [[{\n header: ['1', '2', '3', false]\n}], ['bold', 'italic', 'underline', 'link'], [{\n list: 'ordered'\n}, {\n list: 'bullet'\n}], ['clean']];\nclass SnowTooltip extends BaseTooltip {\n static TEMPLATE = ['', '', '', ''].join('');\n preview = this.root.querySelector('a.ql-preview');\n listen() {\n super.listen();\n // @ts-expect-error Fix me later\n this.root.querySelector('a.ql-action').addEventListener('click', event => {\n if (this.root.classList.contains('ql-editing')) {\n this.save();\n } else {\n // @ts-expect-error Fix me later\n this.edit('link', this.preview.textContent);\n }\n event.preventDefault();\n });\n // @ts-expect-error Fix me later\n this.root.querySelector('a.ql-remove').addEventListener('click', event => {\n if (this.linkRange != null) {\n const range = this.linkRange;\n this.restoreFocus();\n this.quill.formatText(range, 'link', false, Emitter.sources.USER);\n delete this.linkRange;\n }\n event.preventDefault();\n this.hide();\n });\n this.quill.on(Emitter.events.SELECTION_CHANGE, (range, oldRange, source) => {\n if (range == null) return;\n if (range.length === 0 && source === Emitter.sources.USER) {\n const [link, offset] = this.quill.scroll.descendant(LinkBlot, range.index);\n if (link != null) {\n this.linkRange = new Range(range.index - offset, link.length());\n const preview = LinkBlot.formats(link.domNode);\n // @ts-expect-error Fix me later\n this.preview.textContent = preview;\n // @ts-expect-error Fix me later\n this.preview.setAttribute('href', preview);\n this.show();\n const bounds = this.quill.getBounds(this.linkRange);\n if (bounds != null) {\n this.position(bounds);\n }\n return;\n }\n } else {\n delete this.linkRange;\n }\n this.hide();\n });\n }\n show() {\n super.show();\n this.root.removeAttribute('data-mode');\n }\n}\nclass SnowTheme extends BaseTheme {\n constructor(quill, options) {\n if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n options.modules.toolbar.container = TOOLBAR_CONFIG;\n }\n super(quill, options);\n this.quill.container.classList.add('ql-snow');\n }\n extendToolbar(toolbar) {\n if (toolbar.container != null) {\n toolbar.container.classList.add('ql-snow');\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons);\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons);\n // @ts-expect-error\n this.tooltip = new SnowTooltip(this.quill, this.options.bounds);\n if (toolbar.container.querySelector('.ql-link')) {\n this.quill.keyboard.addBinding({\n key: 'k',\n shortKey: true\n }, (_range, context) => {\n toolbar.handlers.link.call(toolbar, !context.format.link);\n });\n }\n }\n }\n}\nSnowTheme.DEFAULTS = merge({}, BaseTheme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n link(value) {\n if (value) {\n const range = this.quill.getSelection();\n if (range == null || range.length === 0) return;\n let preview = this.quill.getText(range);\n if (/^\\S+@\\S+\\.\\S+$/.test(preview) && preview.indexOf('mailto:') !== 0) {\n preview = `mailto:${preview}`;\n }\n // @ts-expect-error\n const {\n tooltip\n } = this.quill.theme;\n tooltip.edit('link', preview);\n } else {\n this.quill.format('link', false, Quill.sources.USER);\n }\n }\n }\n }\n }\n});\nexport default SnowTheme;\n//# sourceMappingURL=snow.js.map","import Quill, { Parchment, Range } from './core.js';\nimport { AlignClass, AlignStyle } from './formats/align.js';\nimport { DirectionAttribute, DirectionClass, DirectionStyle } from './formats/direction.js';\nimport Indent from './formats/indent.js';\nimport Blockquote from './formats/blockquote.js';\nimport Header from './formats/header.js';\nimport List from './formats/list.js';\nimport { BackgroundClass, BackgroundStyle } from './formats/background.js';\nimport { ColorClass, ColorStyle } from './formats/color.js';\nimport { FontClass, FontStyle } from './formats/font.js';\nimport { SizeClass, SizeStyle } from './formats/size.js';\nimport Bold from './formats/bold.js';\nimport Italic from './formats/italic.js';\nimport Link from './formats/link.js';\nimport Script from './formats/script.js';\nimport Strike from './formats/strike.js';\nimport Underline from './formats/underline.js';\nimport Formula from './formats/formula.js';\nimport Image from './formats/image.js';\nimport Video from './formats/video.js';\nimport CodeBlock, { Code as InlineCode } from './formats/code.js';\nimport Syntax from './modules/syntax.js';\nimport Table from './modules/table.js';\nimport Toolbar from './modules/toolbar.js';\nimport Icons from './ui/icons.js';\nimport Picker from './ui/picker.js';\nimport ColorPicker from './ui/color-picker.js';\nimport IconPicker from './ui/icon-picker.js';\nimport Tooltip from './ui/tooltip.js';\nimport BubbleTheme from './themes/bubble.js';\nimport SnowTheme from './themes/snow.js';\nQuill.register({\n 'attributors/attribute/direction': DirectionAttribute,\n 'attributors/class/align': AlignClass,\n 'attributors/class/background': BackgroundClass,\n 'attributors/class/color': ColorClass,\n 'attributors/class/direction': DirectionClass,\n 'attributors/class/font': FontClass,\n 'attributors/class/size': SizeClass,\n 'attributors/style/align': AlignStyle,\n 'attributors/style/background': BackgroundStyle,\n 'attributors/style/color': ColorStyle,\n 'attributors/style/direction': DirectionStyle,\n 'attributors/style/font': FontStyle,\n 'attributors/style/size': SizeStyle\n}, true);\nQuill.register({\n 'formats/align': AlignClass,\n 'formats/direction': DirectionClass,\n 'formats/indent': Indent,\n 'formats/background': BackgroundStyle,\n 'formats/color': ColorStyle,\n 'formats/font': FontClass,\n 'formats/size': SizeClass,\n 'formats/blockquote': Blockquote,\n 'formats/code-block': CodeBlock,\n 'formats/header': Header,\n 'formats/list': List,\n 'formats/bold': Bold,\n 'formats/code': InlineCode,\n 'formats/italic': Italic,\n 'formats/link': Link,\n 'formats/script': Script,\n 'formats/strike': Strike,\n 'formats/underline': Underline,\n 'formats/formula': Formula,\n 'formats/image': Image,\n 'formats/video': Video,\n 'modules/syntax': Syntax,\n 'modules/table': Table,\n 'modules/toolbar': Toolbar,\n 'themes/bubble': BubbleTheme,\n 'themes/snow': SnowTheme,\n 'ui/icons': Icons,\n 'ui/picker': Picker,\n 'ui/icon-picker': IconPicker,\n 'ui/color-picker': ColorPicker,\n 'ui/tooltip': Tooltip\n}, true);\nexport { Module } from './core.js';\nexport { Parchment, Range };\nexport default Quill;\n//# sourceMappingURL=quill.js.map"],"names":["window","module","ExtensionType","FONT","VIEW","TRANSFORM","EASING_FUNCTION","TRANSITION","Extensions","addExtensions","type","extensions","name","hasOwnProperty","addExtension","fn","keysToList","test","getExtension","MONTH","TimeUnit","Months","key","val","charAt","toLowerCase","Days","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","MonthFactor","isDate","date","Date","setDay","day","dist","getDay","setDate","getDate","setDayOfMonth","totalDays","daysInMonth","getMonth","getFullYear","Math","max","min","setMonth","month","map","m","indexOf","offsetDate","offset","now","sameDate","a","b","toDateString","year","dateFromISO","iso","match","dateToLocal","getTime","getTimezoneOffset","timeDuration","milliseconds","components","requiredMilliseconds","count","floor","dateDiff","diff","swapped","_ref","mIndex","anchor","monthsRemaining","months","presentsYears","includes","presentsMonths","valueOf","diffInMonths","addMonths","clone$1","output","_count","v","duration","_len","arguments","length","args","Array","_key","apply","undefined","isArray","now$1","wholeMonthDiff","destroyer","state","destroy","destroyed","frame","cancelAnimationFrame","styleObserver","disconnect","didResizeWindow","removeEventListener","root","parentNode","removeChild","rooter","document","createElement","aligned","classList","add","setAttribute","dataset","layout","align","appendTo","element","location","childNodes","appendChild","children","insertBefore","nodeType","Node","TEXT_NODE","grouper","definition","setDefinition","drawer","_draw","drawViews","present","draw","dirty","fit","getAttribute","style","getComputedStyle","fitInfo","currentFontSize","parseInt","getPropertyValue","availableWidth","clientWidth","currentWidth","scrollWidth","newFontSize","abs","fontSize","requestAnimationFrame","updater","value","valueUpdateCount","isInitialValue","reset","update","equal","resizer","addEventListener","_typeof","Symbol","iterator","obj","constructor","prototype","createClass","AwaitValue","this","AsyncGenerator","gen","front","back","resume","arg","result","Promise","resolve","then","settle","done","err","reject","next","_invoke","request","return","asyncIterator","throw","defineProperties","target","props","i","descriptor","enumerable","configurable","writable","Object","defineProperty","Constructor","protoProps","staticProps","_extends","assign","source","call","toConsumableArray","arr","arr2","from","views","concat","reverse","clone","forEach","view","presenter","filter","valueMapping","pop","shift","redrawn","draw$1","ready","copyArray","split","definitions","index","def","cloneDefinition","drawViews$1","VENDOR_PREFIX","VENDORS","l","elementStyle","create$1","className","el","observeAttributes","attributes","cb","observer","MutationObserver","mutations","attr","mutation","attributeName","observe","isHTMLElement","HTMLElement","setTransform","unit","transforms","t","find","push","setTransformStyle","transform","join","isVisible","elementRect","getBoundingClientRect","bottom","top","scrollY","innerHeight","trim$1","string","trim","CACHE","cache","fns","toString","isInt","RegExp","isBoolean$1","isFloat","isColor","isShadow","isGradient","isDuration","isTransition","isURL","toDuration","parseFloat","toTransition","toTransitionPartial","parts","toFunctionOutline","origin","ease","delay","resolver","slice","part","parameters","toGradient","colors","substring","toGradientColor","gradientOffsetRegex","toColor","replace","pipetteCache","toPixels","body","id","_pipette","p","node","getPipette","cssText","marginTop","pipette","setPipette","toShadow","toStyle","property","toUpperCase","capitalizeFirstLetter$1","toStyleProperty","toBoolean$1","urls","url","toStyleValue","easeLinear","easeInOutQuad","EasingFunctions","cos","PI","sin","t1","scaledTime","sqrt","scaledTime1","pow","magnitude","scaledTime2","s","asin","_scaledTime","_scaledTime2","animate","complete","interpolate","start","tick","ts","createTranslator","options","interval","cancel","velocity","position","destination","getPosition","translate","to","last","delta","arrive","spring","step","maxVelocity","friction","distance","halfway","stiffness","damping","mass","f","thereYet","errorMargin","createTransitioner","transitions","transitioners","createDurationTransitioner","createTransition","direction","transitioner","easing","transition","transformOrigin","setTransformOrigin","styler","base","lastAppliedStyles","updateStyles","setStyle","css","mergeObjects","reduce","styles","toStyles","intro","outro","transitionIn","transitionOut","acts","getComposedTransitionActs","skipToTransitionInEnd","clearTiming","skipToTransitionOutEnd","tn","getBackingStoreRatio","ctx","backingStorePixelRatio","getDevicePixelRatio","devicePixelRatio","clearCanvas","canvas","getContext","clearRect","width","height","Views","textNode","nodeValue","createTextNode","text","createPresenterRoot","presentDefinition","mapping","createRoot","createPresenterRepeater","createRepeater","createPresenterView","Extension","Type","Utils","Canvas","clear","DOM","visible","create","Animation","Data","performance","View","arrow","str","c","comma","opener","closer","r","token","chain","_chain","parse$1","parse","quote","hitArrow","cloneNode","definitionOutline","overlay","repeat","toPresenterDefinitionTree","nodes","createDOMTreeForDefinition","child","presentTick","instance","isDrawing","baseDefinition","isRootDefinition","createPresenterByDefinition","toTransformComposition","composeAsync","funcs","initialValue","callback","compose","partial","initialArgs","parseTransformChain","composition","item","func","params","parameter","toParameter","toParameters","trimEdges","isProbablyISODate","isBoolean","isString","isZeroString","isQuotedString","isNumber","toCSSValue","units","toFunctionReference","ref","levels","level","toValue","current","toInt","JSON","stringify","success","error","xhr","XMLHttpRequest","open","onload","response","onerror","status","send","isObject","equalObjects","equalArrays","every","keys","k","Tick","TypeError","classCallCheck","_options","_element","_value","_observer","_viewDefinition","_constants","_presets","_updater","_credits","_didInit","_didDestroy","_willDestroy","_didUpdate","_init","_this","willDestroy","didDestroy","didInit","didUpdate","presets","constants","credits","contains","_update","href","tabindex","rel","textContent","label","get","set","getConstants","getPresets","transformDurationUnit","single","plural","progress","instances","YEAR_PLURAL","YEAR_SINGULAR","MONTH_PLURAL","MONTH_SINGULAR","WEEK_PLURAL","WEEK_SINGULAR","DAY_PLURAL","DAY_SINGULAR","HOUR_PLURAL","HOUR_SINGULAR","MINUTE_PLURAL","MINUTE_SINGULAR","SECOND_PLURAL","SECOND_SINGULAR","MILLISECOND_PLURAL","MILLISECOND_SINGULAR","y","M","w","d","h","mi","isRootElement","transfomers","defaults$$1","meta","prop","valueTransformer","getOptionsFromAttributes","time","setTimeout","now$2","setTimer","settings","autostart","tickExpectedTime","tickStartTime","sleepStartTime","totalSleepTime","sleepIntervalOffset","paused","timer","isPaused","isStarted","isDocumentHidden","hidden","currentTime","timeoutErrorOffset","timeout","startListeningForVisibilityChanges","didHideDocument","stop","clearTimeout","stopListeningForVisibilityChanges","wake","sleep","handleVisibilityChange","pause","toInterval","toTime","setHours","setTime","toHourlyMoment","moment","till","idle","wait","toMoment","rest","_dist","distOverflow","setFullYear","hourlyMoment","toYearlyMoment","_dist2","toMonthlyMoment","capitalizeFirstLetter","_dist3","Week","toWeeklyMoment","Day","toDailyMoment","getServerOffset","server","setRequestHeader","correction","responseDate","getResponseHeader","serverDate","DEFAULT_COUNTDOWN_OPTIONS","format","cascade","createCounter","onupdate","countdownAmount","total","amount","counter","onended","runtime","countdownDuration","due","now$$1","fill","fraction","flip","Transforms","ascii","charCodeAt","char","replacement","regex","String","fromCharCode","tween","easeFn","previous","staticValue","input","rotate","totalTransforms","out","vi","upper","lower","subtract","modulus","pad","padding","side","number","decimalsSeparator","thousandsSeparator","decimals","toFixed","needle","round","ceil","percentage","multiply","divide","character","template","limit","resetToBegin","catchUp","initial","translator","order","indexes","n","range","j","random","shuffle","preset","getPreset","Translation","Rotation","Scalar","between","Transitions","fade","opacity","move","axis","_ref2","_ref3","scale","_ref4","crossfade","speed","delayOut","swap","revolve","zoom","API","supported","canSupport","CSS","supports","isIE11","MSInputMethodContext","documentMode","canTransform","support","setConstant","setPreset","helper","data","poll","indexOfElement","splice","context","elements","querySelectorAll","down","up","since","schedule","timezone","ISO8601Timezone","toTimezoneOffset","waiting","nextScheduledDate","previouslyScheduledDate","onrepeat","nextDate","lastDate","onresume","onwait","sinceDate","timezoneDate","moments","nearest","getNextScheduledDate","plugin","extension","identifier","_loop","sub","dashesToCamels","exports","_ref$View","easeOutCubic","easeOutSine","spacer","shadowTop","shadowBottom","shadowCard","turningCard","cards","initialBottomCard","FlipCard","firstChild","topCard","visual_progress","animating","flipEasing","cardsToAnimate","card","flipDuration","previousCard","shadowFrontProgress","highlightBackProgress","shadowFront","highlightBack","cardAbove","shadowBack","zIndex","removeProperty","shadowProgress","_root","textFront","textFrontWrapper","textBack","textBackWrapper","_front","_back","_shadowFront","_shadowBack","_highlightBack","_textBack","_textFront","_frontValue","_backValue","degrees","lastCard","initialCard","shadowAbove","shadowBelow","currentValue","lastValue","_regeneratorRuntime","e","o","u","toStringTag","define","wrap","Generator","Context","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","values","g","defineIteratorMethods","AsyncIterator","invoke","__await","callInvokeWithMethodAndArg","Error","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","isNaN","displayName","isGeneratorFunction","mark","setPrototypeOf","__proto__","awrap","async","prev","rval","handle","finish","delegateYield","asyncGeneratorStep","_asyncToGenerator","_next","_throw","_defineProperties","_toPropertyKey","toPrimitive","Number","_toPrimitive","_GetLatestDevo","_InitDevoCard","_SendDevoInvite","_OpenSignUpModal","_InitDevoSignUp","_InitSignUp","_Init","DevoModule","_classCallCheck","_callee","_context","DEBUG","topLevelFolder","InitDevoCard","_callee2","_this2","_context2","didUnsubscribe","InitDevoSignUp","_callee3","content","baseModal","modalContent","_this3","_context3","TemplateService","GetRenderedTemplate","innerHTML","getElementById","OpenSignUpModal","util","openModal","_x","_x2","_callee4","self","formElement","_context4","formSetup","event","preventDefault","stopPropagation","checkValidity","formData","getFormDataObject","SendDevoInvite","_callee5","_context5","recaptcha","getGoogleRecaptchaToken","siteKey","callingUrl","api","postApiDataAsync","showSuccessToast","closeModal","t0","showErrorToast","_x3","_callee6","spanishMode","devoData","_context6","GetLatestDevo","_x4","_x5","_callee7","_context7","getData","_SetupSermonNotes","_GetLastestSermon","_InitSermonLatestDetail","_GetSermonDetails","_InitSermonDetail","_GetSeriesDetails","_InitSeriesDetail","_GetRecentSermons","_GetSeries","_InitSeriesScroller","SermonModule","sermonId","sermonDetailsUrl","seriesDetailUrl","openNotes","InitSermonDetail","congregationId","seriesType","requireMedia","title","InitSermonLatestDetail","isEdit","seriesTypeId","seriesDetailPageUrl","sermonDetailPageUrl","mode","InitSeriesScroller","elementId","container","modelData","GetRecentSermons","GetSeries","_x6","_x7","_x8","_x9","_x10","_x11","_x12","_x13","_x14","seriesId","GetSeriesDetails","_x15","_x16","_x17","_x18","_x19","localTemplate","startValue","ccData","currentSermonPlayerEl","btnVideo","btnAudio","currentSermonEl","currentSermonImageEl","GetSermonDetails","URLSearchParams","search","has","apiRoot","Video","Sermon_Link_ID","Link_URL","playVideo","display","Audio","playAudio","Series","Sermons","CenterSermon","SetupSermonNotes","_x20","_x21","_x22","_x23","_x24","scrollIntoView","behavior","block","inline","_x25","_x26","_x27","_callee8","sermonObj","_context8","GetLastestSermon","sermon","onclick","SermonUrl","_x28","_x29","_x30","_x31","_x32","_x33","_x34","_x35","_x36","_callee9","_context9","_x37","_x38","_x39","_x40","_x41","_callee10","sermonNotesElement","sermonNotesContainerElement","sermonNotesButtonElement","elementButton","elementNotesContainer","elementNotes","elementPrintNotes","_context10","Sermon_Notes","evt","_x42","_x43","_x44","_x45","trackData","track","kind","file","Pocket_Platform_Sermon_Link_Transcription_ID","Language","switchToVideo","videoplaylist","Title","Image_URL","createTrackList","jwplayer","remove","setup","nextUpDisplay","playlist","playerInstance","playlistIndex","sermonSeconds","on","seek","off","switchToAudio","audioplaylist","_postApiDataAsync","_getApiDataAsync","_getAuthenticatedDataAsync","_getTextAsync","_getData","ApiService","endpoint","fetch","ok","json","headers","payload","requestOptions","authToken","localStorage","getItem","authExpiration","isFormData","isMultiPart","auth","requireAuth","authObj","getAuth","_forceAuthenticated","AuthService","webRoot","sessionStorage","setItem","clearAuthTokens","logoutUrl","encodeURIComponent","code","redirectUrl","setAuthTokens","refreshToken","redirectToAuthentication","tokens","access_token","id_token","myDate","setSeconds","getSeconds","expires_in","refresh_token","removeItem","expireDT","userObj","userJsonObj","_unused","authUrl","_this4","getAuthentication","showUserMenu","ThumbnailImage","Nickname","Last_Name","profileModal","bootstrap","Modal","getOrCreateInstance","show","LogOut","isGroupLeader","isMinistryLeader","groupLeaderLink","loadScript","isDevoWriter","devoWriterLink","script","src","head","ConfigService","_loadData","_load","LangService","component","defaultLanguage","lang","getCurrentLanguage","loadData","language","commonResponse","commonData","mergedData","componentResponse","componentData","build","_objectSpread","queryLang","getQueryParam","writeSessionStorageValue","checkSessionStorageItem","langToReturn","readSessionStorageValue","toLocaleLowerCase","browserLang","navigator","userLanguage","_getGoogleRecaptchaToken","_loadRecaptcha","RecaptchaService","scriptUrl","querySelector","defer","action","_args2","loadRecaptcha","grecaptcha","execute","Token","begin","end","getText","row","col","size","Drop","liquidMethodMissing","toString$1","isFunction","isPromise","isIterator","isNil","x","toEnumerable","toArray","toNumber","toLiquid","forOwn","iteratee","padStart","ch","identify","caseInsensitiveCompare","argumentsToValue","escapeRegExp","TRAIT","LiquidError","super","message","mkContext","msg","line","mkMessage","stack","originalError","is","TokenizationError","ParseError","RenderError","tpl","LiquidErrors","errors","UndefinedVariableError","InternalUndefinedVariableError","variableName","AssertionError","lines","lineNumber","colIndicator","TYPES","isWord","assert","predicate","assertEmpty","EmptyDrop","equals","gt","geq","lt","leq","ForloopDrop","collection","variable","index0","first","rindex","rindex0","BlockDrop","superBlockRender","isComparable","nil","literalValues","createTrie","trie","entries","needBoundary","__assign","__awaiter","thisArg","_arguments","P","generator","fulfilled","rejected","toPromise","toValueSync","rFormat","feb","isLeapYear","getDayOfYear","num","getWeekOfYear","startDay","padWidths","H","I","L","S","U","W","padSpaceChars","Set","opts","nOffset","flags","formatCodes","getShortWeekdayName","A","getLongWeekdayName","getShortMonthName","B","getLongMonthName","toLocaleString","C","century","getHours","getMilliseconds","getMinutes","N","padEnd","q","ordinal","toLocaleDateString","X","toLocaleTimeString","Y","z","Z","getTimeZoneName","strftime","formatStr","remaining","exec","flagStr","modifier","conversion","convert","flag","ret","padChar","padWidth","some","getDateTimeFormat","Intl","DateTimeFormat","ISO8601_TIMEZONE_PATTERN","monthNames","monthNamesShort","dayNames","dayNamesShort","LiquidDate","init","locale","timezoneFixed","timezoneOffset","timezoneName","displayDate","timeZone","resolvedOptions","_a","weekday","valid","createDateFixedToTimezone","dateString","sign","hours","minutes","localDateString","utcDateString","localDate","Limiter","resource","use","check","DelimitedToken","contentBegin","contentEnd","trimLeft","trimRight","tl","tr","contentRange","TagToken","trimTagLeft","trimTagRight","tagDelimiterLeft","tagDelimiterRight","valueBegin","valueEnd","TokenKind","Tag","tokenizer","Tokenizer","operators","readTagName","skipBlank","OutputToken","trimOutputLeft","trimOutputRight","outputDelimiterLeft","outputDelimiterRight","valueRange","Output","HTMLToken","HTML","getContent","NumberToken","IdentifierToken","Word","LiteralToken","Literal","literal","operatorPrecedences","operatorTypes","OperatorToken","Operator","operator","getPrecedence","PropertyAccessToken","PropertyAccess","FilterToken","Filter","HashToken","Hash","rHex","rOct","escapeChar","hexVal","QuotedToken","Quoted","parseStringLiteral","RangeToken","lhs","rhs","Range","LiquidTagToken","FilteredValueToken","filters","FilteredValue","polyfill","getPerformance","global","SimpleEmitter","buffer","write","html","StreamedEmitter","stream","KeepingTypeEmitter","Render","renderTemplatesToNodeStream","templates","emitter","renderTemplates","keepOutputType","renderLimit","render","catchAllErrors","Expression","postfix","toPostfix","evaluate","lenient","operands","isOperatorToken","evalToken","isPropertyAccessToken","_getFromScope","_get","evalPropertyAccessToken","isRangeToken","low","high","evalRangeToken","evalQuotedToken","ops","isTruthy","isFalsy","jsTruthy","defaultOperators","arrayEquals","LRU","tail","ensureLimit","read","domResolve","path","getElementsByTagName","resolved","fs","freeze","filepath","ext","readFile","responseText","statusText","readFileSync","exists","existsSync","dirname","sep","space","misc","default","defaultValue","Map","raw","handler","jsonify","to_integer","inspect","ancestors","escapeMap","unescapeMap","memoryLimit","htmlFilters","escape","xml_escape","escape_once","newline_to_br","strip_html","MapFS","segments","dir","segment","defaultOptions","layouts","partials","relativeReference","jekyllInclude","keyValueSeparator","extname","dynamicPartials","dateFormat","greedy","preserveTimezones","strictFilters","strictVariables","ownPropertyOnly","lenientIf","globals","Infinity","parseLimit","normalize","_b","nameOrFunction","normalizeDirectoryList","outputEscape","list","isHTMLToken","mask","rawBeginAt","opTrie","literalTrie","readExpression","readExpressionTokens","readOperator","operand","readValue","matchTrie","info","peek","readFilteredValue","snapshot","readFilters","readFilter","readIdentifier","readFilterArg","readTopLevelTokens","readTopLevelToken","inRaw","isDelimitedToken","isTagToken","whiteSpaceCtrl","readEndrawOrRawContent","readTagToken","readOutputToken","readHTMLToken","stopStrings","readToDelimiter","delimiter","respectQuoted","peekType","readQuoted","rmatch","leftPos","readTo","readLiquidTagTokens","readLiquidTagToken","pos","pred","readWord","readNonEmptyIdentifier","readHashes","jekyllStyle","hashes","hash","readHash","advance","readLiteral","readRange","readNumber","readProperties","readScopeValue","isBegin","decimalFound","digitFound","readValueOrThrow","escaped","readFileNameTemplate","htmlStopStrings","htmlStopStringSet","word","pattern","ParseStream","parseToken","handlers","stopRequested","trigger","TemplateImpl","remainTokens","liquid","markup","argv","Value","getFilter","impl","LookupType","Loader","rRelativePath","prefix","shouldLoadRelative","referencedFile","_referencedFile","lookup","sync","currentFile","dirs","candidates","Root","lookupError","enforceRoot","referenced","fallback","roots","Parser","parseFile","_parseFileCached","_parseFile","loader","parseTokens","TagClass","tags","isOutputToken","parseStream","tpls","task","taskOrTpl","getKind","Delimited","isQuotedToken","BlockMode","env","renderOptions","_c","_d","_e","scopes","registers","environments","getRegister","setRegister","saveRegister","restoreRegister","keyValues","getAll","paths","getSync","scope","findScope","getFromScope","readProperty","spawn","candidate","readJSProperty","readSize","readFirst","readLast","at_least","at_most","divided_by","dividend","divisor","integerArithmetic","minus","modulo","times","mathFilters","amp","plus","rSlugifyDefault","rSlugifyReplacers","urlFilters","url_decode","decodeURIComponent","url_encode","cgi_escape","uri_escape","encodeURI","slugify","cased","replacer","removeAccents","array","complexity","last$1","arrayFilters","sort","lvalue","rvalue","tuple","sort_natural","propertyString","compare","results","sum","compact","unshift","where","expected","_","where_exp","itemName","exp","filtered","keyTemplate","group_by","items","group_by_exp","find_exp","uniq","sample","shuffled","parseDate","stringify_date","month_type","defaultTimezoneOffset","dateFilters","date_to_xmlschema","date_to_rfc822","date_to_string","date_to_long_string","rCJKWord","rNonCJKWord","stringFilters","append","prepend","lstrip","chars","downcase","upcase","remove_first","remove_last","lastIndexOf","rstrip","strip","strip_newlines","capitalize","replace_first","arg1","arg2","replace_last","truncate","truncatewords","words","normalize_whitespace","number_of_words","array_to_sentence_string","connector","MODIFIERS","parseFilePath","parser","optimize","renderFilePath","renderer","TablerowloopDrop","cols","col0","col_first","col_last","inStr","elseTemplates","tag","continueKey","continue","orderedFilterParameters","reversed","forloop","capture","tagToken","readVariableName","quoted","branches","elseCount","branchHit","branch","valueToken","comment","include","withVar","saved","OUTPUT","_parsePartialFile","keyword","beforeAs","alias","childCtx","decrement","increment","cycle","group","fingerprint","groups","idx","_parseLayoutFile","STORE","blocks","parent","blockRender","getBlockRender","renderChild","renderCurrent","superBlock","tablerow","collectionToken","tablerowloop","unless","echo","Liquid","conf","registerTag","registerFilter","_render","renderSync","renderToNodeStream","_parseAndRender","parseAndRender","parseAndRenderSync","Partials","Layouts","lookupType","parseFileSync","_renderFile","renderFileOptions","renderFile","renderFileSync","renderFileToNodeStream","_evalValue","evalValue","evalValueSync","express","firstCall","filePath","ccmCustomFileSystem","endsWith","encoding","engine","GetEngine","templateName","Init","_GetRenderedTemplate","NotyfArrayEvent","NotyfNotification","listeners","eventType","callbacks","triggerEvent","NotyfEvent","NotyfArray","notifications","elem","updateFn","Add","Remove","onUpdate","DEFAULT_OPTIONS","types","backgroundColor","icon","tagName","ripple","dismissible","NotyfView","events","X_POSITION_FLEX_MAP","left","center","right","Y_POSITION_FLEX_MAP","docFrag","createDocumentFragment","notyfContainer","_createHTMLElement","animationEndEventName","_getAnimationEndEventName","_createA11yContainer","notification","addNotification","removeNotification","handleEvent","renderedNotification","_popRenderedNotification","_renderNotification","_announce","_buildNotificationCard","getXPosition","getYPosition","adjustContainerAlignment","justify","setProperty","iconOpts","notificationElem","wrapper","mainColor","background","iconContainer","className_1","color","iconElement","dismissWrapper","dismissButton","Dismiss","Click","a11yContainer","border","clip","margin","overflow","outline","MozTransition","OTransition","WebkitTransition","Notyf","dismiss","_removeNotification","registerTypes","normalizeOptions","defaultOpts","config","assignProps","_pushNotification","dismissAll","incomingTypes","defaultType","userTypeIdx","userType","UtilService","_showLoginRequired","dataObj","mainContent","load","langData","btn","userAgent","platform","os","attrs","getCookie","ccmClientCookie","keyValue","clientId","guid","lastClientDate","setCookie","days","expires","toUTCString","cookie","nameEQ","ca","campus","cookieCampus","eraseCookie","homeCookie","_addMediaAnalytics","entity","entityData","isMobile","clientType","clientID","getOS","getClientID","isCSSLoaded","link","links","queryVar","queryVal","currentPageUrl","copyUrl","createCopyUrl","cloneElement","clipboard","writeText","that","openContactModal","relatedTarget","contactForm","sendContactModal","contactGuid","subjectText","person","modalContactTitle","innerText","FormData","jsonObject","openNewsletterSignUp","buttonObj","publicationId","publicationTitle","getUserObj","First_Name","Email_Address","User_ID","sendNewsletterForm","UserID","myModalEl","modal","getInstance","hide","allowDismiss","stateRedirect","oldElement","newElement","replaceChild","btoa","encoded","atob","newPassword","confirmPassword","passwordRegex","validatePasswords","setCustomValidity","setValidationMessage","inputElement","feedbackElement","parentElement","baseMessage","phone","inputValue","_readOnlyError","firstPart","secondPart","thirdPart","formattedNumber","textarea","maxLength","required","hasAttribute","charCount","insertAdjacentElement","parsedUrl","URL","pathname","newUrl","getCurrentUrlWithoutQuery","history","pushState","param","Events","EE","once","addListener","listener","_events","_eventsCount","clearEvent","EventEmitter","eventNames","names","getOwnPropertySymbols","ee","listenerCount","emit","a1","a2","a3","a4","a5","len","removeListener","removeAllListeners","prefixed","DIFF_DELETE","diff_main","text1","text2","cursor_pos","cleanup","_fix_unicode","editdiff","oldText","newText","oldRange","newRange","oldLength","newLength","oldCursor","oldBefore","oldAfter","maybeNewCursor","newCursor","newBefore","newAfter","prefixLength","oldPrefix","newPrefix","make_edit_splice","cursor","suffixLength","oldSuffix","newSuffix","find_cursor_edit_diff","commonlength","diff_commonPrefix","commonprefix","diff_commonSuffix","commonsuffix","diffs","longtext","shorttext","hm","diff_halfMatchI_","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","seed","best_common","text1_a","text1_b","text2_a","text2_b","hm1","hm2","mid_common","diff_halfMatch_","diffs_a","diffs_b","text1_length","text2_length","max_d","v_offset","v_length","v1","v2","k1start","k1end","k2start","k2end","k1","k1_offset","y1","x1","k2_offset","x2","diff_bisectSplit_","k2","y2","diff_bisect_","diff_compute_","diff_cleanupMerge","changes","equalities","equalitiesLength","lastequality","pointer","length_insertions1","length_deletions1","length_insertions2","length_deletions2","diff_cleanupSemanticScore_","one","two","char1","char2","nonAlphaNumeric1","nonAlphaNumericRegex_","nonAlphaNumeric2","whitespace1","whitespaceRegex_","whitespace2","lineBreak1","linebreakRegex_","lineBreak2","blankLine1","blanklineEndRegex_","blankLine2","blanklineStartRegex_","equality1","edit","equality2","commonOffset","commonString","bestEquality1","bestEdit","bestEquality2","bestScore","score","diff_cleanupSemanticLossless","deletion","insertion","overlap_length1","diff_commonOverlap_","overlap_length2","diff_cleanupSemantic","text1a","text2a","text1b","text2b","diffsb","pointermin","pointermax","pointermid","pointerstart","is_surrogate_pair_start","text_length","best","found","pointerend","is_surrogate_pair_end","fix_unicode","count_delete","count_insert","text_delete","text_insert","previous_equality","ends_with_pair_start","stray","starts_with_pair_end","charCode","before","oldMiddle","newMiddle","after","tuples","remove_empty_tuples","INSERT","DELETE","EQUAL","HASH_UNDEFINED","MAX_SAFE_INTEGER","argsTag","boolTag","dateTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reFlags","reIsHostCtor","reIsUint","cloneableTags","freeGlobal","freeSelf","Function","freeExports","freeModule","moduleExports","addMapEntry","pair","addSetEntry","arrayReduce","accumulator","initAccum","isHostObject","mapToArray","overArg","setToArray","uid","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","IE_PROTO","funcToString","objectToString","reIsNative","Buffer","Uint8Array","getPrototype","objectCreate","propertyIsEnumerable","nativeGetSymbols","nativeIsBuffer","isBuffer","nativeKeys","DataView","getNative","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","entry","ListCache","MapCache","Stack","__data__","arrayLikeKeys","inherited","isObjectLike","isArrayLike","isArrayLikeObject","isArguments","baseTimes","skipIndexes","isIndex","assignValue","object","objValue","eq","assocIndexOf","baseClone","isDeep","isFull","customizer","isArr","initCloneArray","getTag","isFunc","copy","cloneBuffer","isPrototype","proto","initCloneObject","copyObject","getSymbols","copySymbols","baseAssign","cloneFunc","Ctor","cloneArrayBuffer","dataView","byteOffset","byteLength","cloneDataView","typedArray","cloneTypedArray","cloneMap","regexp","lastIndex","cloneRegExp","cloneSet","symbol","initCloneByTag","stacked","keysFunc","symbolsFunc","arrayPush","baseGetAllKeys","getAllKeys","arrayEach","subValue","baseIsNative","arrayBuffer","newValue","getMapData","getValue","pairs","LARGE_ARRAY_SIZE","other","ArrayBuffer","ctorString","isLength","baseKeys","arrayTag","errorTag","typedArrayTags","freeProcess","process","nodeUtil","binding","nodeIsTypedArray","isTypedArray","arraySome","nativeObjectToString","symToStringTag","SetCache","isArg","isBuff","isType","baseGetTag","isOwn","unmasked","getRawTag","baseIsArguments","baseIsEqual","bitmask","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","othProps","othLength","skipCtor","othValue","compared","objCtor","othCtor","baseIsEqualDeep","isMasked","arrLength","seen","arrValue","othIndex","resIndex","arrayFilter","baseUnary","cloneDeep","isEqual","AttributeMap","keepNull","invert","baseInverted","memo","priority","OpIterator","Op","AttributeMap_1","Op_1","OpIterator_1","NULL_CHARACTER","getEmbedTypeAndData","embedType","Delta","registerEmbed","unregisterEmbed","getHandler","insert","newOp","delete","retain","lastOp","chop","partition","passed","failed","op","changeLength","iter","hasNext","nextOp","thisIter","otherIter","firstOther","firstLeft","peekLength","thisOp","otherOp","thisData","otherData","strings","retDelta","diffResult","opLength","eachLine","newline","inverted","baseIndex","baseOp","opData","baseOpData","transformPosition","transformedData","nextType","retOp","substr","nodeName","SuppressedError","setValue","ownerDocument","defaultView","createComment","createElementNS","valueDiffing","checked","selected","_const","route","addElement","addTextElement","preDiffApply","addAttribute","modifyAttribute","removeAttribute","modifyTextElement","textDiff","oldValue","modifyValue","modifyComment","modifyChecked","modifySelected","replaceElement","namespaceURI","relocateGroup","groupLength","removeElement","removeTextElement","postDiffApply","newNode","class","D","outerDone","innerDone","valueDone","O","Boolean","E","V","$","subsets","subsetsAge","nodeIndex","preVirtualDiffApply","postVirtualDiffApply","T","R","area","br","embed","hr","img","keygen","menuItem","wbr","startsWith","voidElement","caseSensitive","Element","t2","diffcount","foundAll","debug","t1Orig","t2Orig","tracker","findDiffs","diffcap","findNextDiff","maxDepth","findOuterDiff","filterOuterDiff","findInnerDiff","findValueDiff","maxChildCount","attemptGroupRelocation","gaps1","gaps2","compress","undo","F","classes","hiddenHeader","sortable","noColumnWidths","unhideHeader","searchable","headerClass","column","ascending","descending","filterActive","widths","sorter","header","footer","rowRender","tabIndex","renderHeader","cells","cellClass","table","structuredClone","__esModule","globalThis","weekdays","utcOffset","ms","Q","$L","utc","$u","$x","$offset","$d","NaN","UTC","$y","$M","$D","$W","$H","$m","$s","$ms","$utils","isValid","isSame","startOf","endOf","isAfter","isBefore","$g","unix","toDate","$locale","weekStart","$set","invalidDate","meridiem","monthsShort","weekdaysMin","weekdaysShort","toJSON","toISOString","extend","$i","isDayjs","en","Ls","LTS","LT","LL","LLL","LLLL","zone","afternoon","SS","SSS","ss","mm","HH","hh","DD","Do","MM","MMM","MMMM","YY","YYYY","ZZ","formats","customParseFormat","parseTwoDigitYear","seconds","G","K","headings","tHead","tBodies","rows","tt","dt","setCursor","_renderTable","dom","columns","hasRows","findRowIndex","findIndex","findRow","updateRow","et","_state","select","numeric","caseFirst","sensitivity","ignorePunctuation","searchMethod","sortSequence","searchItemSeparator","heading","_currentPage","Collator","usage","_searchQueries","multiSearch","_measureWidths","fixedColumns","noPaging","headerDOM","firstElementChild","offsetWidth","st","destroyable","searchQuerySeparator","searchAnd","paging","perPage","perPageSelect","nextPrev","firstLast","prevText","nextText","firstText","lastText","ellipsisText","truncatePager","pagerDelta","fixedHeight","caption","rowNavigation","pagerRender","tableRender","diffDomOptions","labels","placeholder","searchTitle","pageTitle","noRows","noResults","dropdown","selector","pagination","active","disabled","ellipsis","empty","headercontainer","loading","paginationList","paginationListItem","paginationListItemLink","it","at","containerDOM","_dd","hasHeadings","_initialHTML","initialized","_label","lastPage","_listeners","onFirstPage","onLastPage","_pagerDOMs","_virtualPagerDOM","pages","_rect","_searchData","_tableAttributes","_tableFooters","_tableCaptions","totalPages","_virtualDOM","_virtualHeaderDOM","wrapperDOM","HTMLTableElement","outerHTML","onResize","_onResize","Option","_fixHeight","_bindEvents","_renderPage","setMessage","_renderPagers","nt","_renderSeparateHeader","scrollHeight","clientHeight","overflowY","HTMLSelectElement","HTMLInputElement","matches","and","querySeparator","terms","closest","page","_paginate","refresh","print","colspan","tzlibZonesDB","Zulu","WET","Universal","UCT","Turkey","Singapore","ROK","ROC","Portugal","Poland","PST8PDT","PRC","Navajo","NZ","MST7MDT","MST","MET","Libya","Kwajalein","Japan","Jamaica","Israel","Iran","Iceland","Hongkong","HST","Greenwich","GMT0","GMT","GB","Eire","Egypt","EST5EDT","EST","EET","Cuba","CST6CDT","CET","US","Samoa","Pacific","Mountain","Michigan","Hawaii","Eastern","Central","Arizona","Aleutian","Alaska","Yap","Wallis","Wake","Truk","Tongatapu","Tarawa","Tahiti","Saipan","Rarotonga","Port_Moresby","Ponape","Pohnpei","Pitcairn","Palau","Pago_Pago","Noumea","Norfolk","Niue","Nauru","Midway","Marquesas","Majuro","Kosrae","Kiritimati","Kanton","Johnston","Honolulu","Guam","Guadalcanal","Gambier","Galapagos","Funafuti","Fiji","Fakaofo","Enderbury","Efate","Easter","Chuuk","Chatham","Bougainville","Auckland","Apia","Mexico","General","BajaSur","BajaNorte","Indian","Reunion","Mayotte","Mauritius","Maldives","Mahe","Kerguelen","Comoro","Cocos","Christmas","Chagos","Antananarivo","Europe","Zurich","Zaporozhye","Zagreb","Warsaw","Volgograd","Vilnius","Vienna","Vatican","Vaduz","Uzhgorod","Ulyanovsk","Tiraspol","Tirane","Tallinn","Stockholm","Sofia","Skopje","Simferopol","Saratov","Sarajevo","San_Marino","Samara","Rome","Riga","Prague","Podgorica","Paris","Oslo","Nicosia","Moscow","Monaco","Minsk","Mariehamn","Malta","Madrid","Luxembourg","London","Ljubljana","Lisbon","Kyiv","Kirov","Kiev","Kaliningrad","Jersey","Istanbul","Isle_of_Man","Helsinki","Guernsey","Gibraltar","Dublin","Copenhagen","Chisinau","Busingen","Budapest","Bucharest","Brussels","Bratislava","Berlin","Belgrade","Belfast","Athens","Astrakhan","Andorra","Amsterdam","Etc","Chile","EasterIsland","Continental","Canada","Yukon","Saskatchewan","Newfoundland","Atlantic","Brazil","West","East","DeNoronha","Acre","Australia","Yancowinna","Victoria","Tasmania","Sydney","South","Queensland","Perth","North","NSW","Melbourne","Lord_Howe","Lindeman","LHI","Hobart","Eucla","Darwin","Currie","Canberra","Broken_Hill","Brisbane","Adelaide","ACT","Stanley","St_Helena","South_Georgia","Reykjavik","Madeira","Jan_Mayen","Faroe","Faeroe","Cape_Verde","Canary","Bermuda","Azores","Asia","Yerevan","Yekaterinburg","Yangon","Yakutsk","Vladivostok","Vientiane","Urumqi","Ulan_Bator","Ulaanbaatar","Ujung_Pandang","Tomsk","Tokyo","Thimphu","Thimbu","Tel_Aviv","Tehran","Tbilisi","Tashkent","Taipei","Srednekolymsk","Shanghai","Seoul","Samarkand","Sakhalin","Saigon","Riyadh","Rangoon","Qyzylorda","Qostanay","Qatar","Pyongyang","Pontianak","Phnom_Penh","Oral","Omsk","Novosibirsk","Novokuznetsk","Muscat","Manila","Makassar","Magadan","Macau","Macao","Kuwait","Kuching","Kuala_Lumpur","Krasnoyarsk","Kolkata","Khandyga","Katmandu","Kathmandu","Kashgar","Karachi","Kamchatka","Kabul","Jerusalem","Jayapura","Jakarta","Irkutsk","Hovd","Hong_Kong","Ho_Chi_Minh","Hebron","Harbin","Gaza","Famagusta","Dushanbe","Dubai","Dili","Dhaka","Damascus","Dacca","Colombo","Chungking","Chongqing","Choibalsan","Chita","Calcutta","Brunei","Bishkek","Beirut","Barnaul","Bangkok","Baku","Bahrain","Baghdad","Atyrau","Ashkhabad","Ashgabat","Aqtobe","Aqtau","Anadyr","Amman","Almaty","Aden","Arctic","Longyearbyen","Antarctica","Vostok","Troll","Syowa","South_Pole","Rothera","Palmer","McMurdo","Mawson","Macquarie","DumontDUrville","Davis","Casey","America","Yellowknife","Yakutat","Winnipeg","Whitehorse","Virgin","Vancouver","Tortola","Toronto","Tijuana","Thunder_Bay","Thule","Tegucigalpa","Swift_Current","St_Vincent","St_Thomas","St_Lucia","St_Kitts","St_Johns","St_Barthelemy","Sitka","Shiprock","Scoresbysund","Sao_Paulo","Santo_Domingo","Santiago","Santarem","Santa_Isabel","Rosario","Rio_Branco","Resolute","Regina","Recife","Rankin_Inlet","Rainy_River","Punta_Arenas","Puerto_Rico","Porto_Velho","Porto_Acre","Port_of_Spain","Phoenix","Paramaribo","Pangnirtung","Panama","Ojinaga","Nuuk","Noronha","Nome","Nipigon","New_York","Nassau","Montserrat","Montreal","Montevideo","Monterrey","Moncton","Miquelon","Mexico_City","Metlakatla","Merida","Menominee","Mendoza","Mazatlan","Matamoros","Martinique","Marigot","Manaus","Managua","Maceio","Lower_Princes","Louisville","Los_Angeles","Lima","La_Paz","Kralendijk","Knox_IN","Juneau","Jujuy","Iqaluit","Inuvik","Indianapolis","Hermosillo","Havana","Halifax","Guyana","Guayaquil","Guatemala","Guadeloupe","Grenada","Grand_Turk","Goose_Bay","Godthab","Glace_Bay","Fortaleza","Fort_Wayne","Fort_Nelson","Ensenada","El_Salvador","Eirunepe","Edmonton","Dominica","Detroit","Denver","Dawson_Creek","Dawson","Danmarkshavn","Curacao","Cuiaba","Creston","Costa_Rica","Cordoba","Coral_Harbour","Ciudad_Juarez","Chihuahua","Chicago","Cayman","Cayenne","Catamarca","Caracas","Cancun","Campo_Grande","Cambridge_Bay","Buenos_Aires","Boise","Bogota","Boa_Vista","Belize","Belem","Barbados","Bahia_Banderas","Bahia","Atka","Atikokan","Asuncion","Aruba","Araguaina","Antigua","Anguilla","Anchorage","Adak","North_Dakota","New_Salem","Center","Beulah","Kentucky","Monticello","Indiana","Winamac","Vincennes","Vevay","Tell_City","Petersburg","Marengo","Knox","Argentina","Ushuaia","Tucuman","San_Luis","San_Juan","Salta","Rio_Gallegos","La_Rioja","ComodRivadavia","Africa","Windhoek","Tunis","Tripoli","Timbuktu","Sao_Tome","Ouagadougou","Nouakchott","Niamey","Ndjamena","Nairobi","Monrovia","Mogadishu","Mbabane","Maseru","Maputo","Malabo","Lusaka","Lubumbashi","Luanda","Lome","Libreville","Lagos","Kinshasa","Kigali","Khartoum","Kampala","Juba","Johannesburg","Harare","Gaborone","Freetown","El_Aaiun","Douala","Djibouti","Dar_es_Salaam","Dakar","Conakry","Ceuta","Casablanca","Cairo","Bujumbura","Brazzaville","Blantyre","Bissau","Banjul","Bangui","Bamako","Asmera","Asmara","Algiers","Addis_Ababa","Accra","Abidjan","tzlibZonesDetailsDB","tzlib_get_content","tzName","nameParts","tzlib_enrich_data","shortenerMap","replaceAll","tzlib_get_ical_block","jsonType","tzBlock","tzidLine","tzlib_get_offset","isoDate","isoTime","dateYear","dateMonth","dateDay","dateHour","timezoneData","tzBreakpoints","breakpointCount","hour","rruleParts","rruleMonth","theCase","helperArrayWeekdays","numberDays","weekdayCount","SU","MO","TU","WE","TH","FR","SA","occurence","actualDay","breakpointWeekday","dayIndex","tzlibZoneNames","atcbCssTemplate","iCalGiven","newOptions","rule","recurrence_frequency","recurrence","dates","dateTimeData","point","msgPrefix","msgSuffix","namesArr","key2","value2","key3","optionItem","listWrapper","tyContent","rsvpContent","rsvpData","fields","field","buttonTrigger","bgOverlay","atcb_debounce_leading","passive","modalSubEventButton","button","modalButton","timeString","timeBlocks","btnLeft","btnLocation","schemaRecurrenceContent","subEvent","urlParts","ics_lines","timeZoneInfo","atcb_debounce","schemaContent","inputVal","host","canAdd","blot","merged","scroll","static","theme","selection","lastRange","getRange","selectionInfo","modify","editor","renderBlocks","currentBlockDelta","LeafBlot","Code","collapsed","quill","indent","elementMatchers","matcher","blotName","SyntaxCodeBlock","forceNext","Quill","sources","USER","fillSelect","fileInput","toolbar"],"sourceRoot":""}