{"version":3,"file":"js/chunk-vendors.61aa7b02.js","mappings":"0GAAA,OAUA,SAAWA,EAAQC,GACjB,aAMA,IAAIC,EAAa,SACfC,EAAQ,GACRC,EAAU,IACVC,EAAY,WACZC,EAAa,YACbC,EAAW,SACXC,EAAW,SACXC,EAAQ,QACRC,EAAQ,QACRC,EAAO,OACPC,EAAO,OACPC,EAAS,SACTC,EAAU,UACVC,EAAe,eACfC,EAAU,UACVC,EAAS,SACTC,EAAS,SACTC,EAAU,UACVC,EAAW,WACXC,EAAW,WACXC,EAAgB,IAEdC,EAAS,SACXC,EAAQ,QACRC,EAAO,OACPC,EAAa,aACbC,EAAU,UACVC,EAAS,SACTC,EAAO,OACPC,EAAU,UACVC,EAAS,SACTC,EAAS,SACTC,EAAK,KACLC,EAAY,YACZC,EAAW,WACXC,EAAQ,QACRC,EAAU,UACVC,EAAO,OACPC,EAAS,SACTC,EAAQ,QACRC,EAAW,WAMTC,EAAS,SAAUC,EAASC,GAC5B,IAAIC,EAAgB,CAAC,EACrB,IAAK,IAAIC,KAAKH,EACRC,EAAWE,IAAMF,EAAWE,GAAGC,OAAS,IAAM,EAChDF,EAAcC,GAAKF,EAAWE,GAAGE,OAAOL,EAAQG,IAEhDD,EAAcC,GAAKH,EAAQG,GAG/B,OAAOD,CACT,EACAI,EAAY,SAAUC,GAEpB,IADA,IAAIC,EAAQ,CAAC,EACJL,EAAI,EAAGA,EAAII,EAAIH,OAAQD,IAC9BK,EAAMD,EAAIJ,GAAGM,eAAiBF,EAAIJ,GAEpC,OAAOK,CACT,EACAE,EAAM,SAAUC,EAAMC,GACpB,cAAcD,IAAS9C,IAAuD,IAA5CgD,EAASD,GAAME,QAAQD,EAASF,GACpE,EACAE,EAAW,SAAUE,GACnB,OAAOA,EAAIC,aACb,EACAC,EAAW,SAAUC,GACnB,cAAcA,IAAYrD,EAAWqD,EAAQC,QAAQ,WAAY3D,GAAO4D,MAAM,KAAK,GAAK9D,CAC1F,EACA+D,EAAO,SAAUN,EAAKO,GACpB,UAAWP,IAAQlD,EAEjB,OADAkD,EAAMA,EAAII,QAAQ,SAAU3D,GAAO2D,QAAQ,SAAU3D,UACvC8D,IAAQ3D,EAAaoD,EAAMA,EAAIQ,UAAU,EAAG5C,EAE9D,EAME6C,EAAY,SAAUC,EAAIC,GAC1B,IACEC,EACAC,EACAC,EACAC,EACAC,EACAC,EANE7B,EAAI,EASR,MAAOA,EAAIuB,EAAOtB,SAAW2B,EAAS,CACpC,IAAIE,EAAQP,EAAOvB,GACjB+B,EAAQR,EAAOvB,EAAI,GACrBwB,EAAIC,EAAI,EAGR,MAAOD,EAAIM,EAAM7B,SAAW2B,EAG1B,GAFAA,EAAUE,EAAMN,KAAKQ,KAAKV,GAEpBM,EACJ,IAAKF,EAAI,EAAGA,EAAIK,EAAM9B,OAAQyB,IAC5BG,EAAQD,IAAUH,GAClBE,EAAII,EAAML,UAECC,IAAMlE,GAAYkE,EAAE1B,OAAS,EACrB,IAAb0B,EAAE1B,cACO0B,EAAE,IAAMpE,EAEjB0E,KAAKN,EAAE,IAAMA,EAAE,GAAGO,KAAKD,KAAMJ,GAG7BI,KAAKN,EAAE,IAAMA,EAAE,GAEK,IAAbA,EAAE1B,cAEA0B,EAAE,KAAOpE,GAAeoE,EAAE,GAAGK,MAAQL,EAAE,GAAGQ,KAKnDF,KAAKN,EAAE,IAAME,EAAQA,EAAMb,QAAQW,EAAE,GAAIA,EAAE,IAAMxE,EAHjD8E,KAAKN,EAAE,IAAME,EAAQF,EAAE,GAAGO,KAAKD,KAAMJ,EAAOF,EAAE,IAAMxE,EAKhC,IAAbwE,EAAE1B,SACXgC,KAAKN,EAAE,IAAME,EAAQF,EAAE,GAAGO,KAAKD,KAAMJ,EAAMb,QAAQW,EAAE,GAAIA,EAAE,KAAOxE,GAGpE8E,KAAKN,GAAKE,GAAgB1E,EAKlC6C,GAAK,CACP,CACF,EACAoC,EAAY,SAAUxB,EAAKyB,GACzB,IAAK,IAAIrC,KAAKqC,EAEZ,UAAWA,EAAIrC,KAAOvC,GAAY4E,EAAIrC,GAAGC,OAAS,GAChD,IAAK,IAAIuB,EAAI,EAAGA,EAAIa,EAAIrC,GAAGC,OAAQuB,IACjC,GAAIjB,EAAI8B,EAAIrC,GAAGwB,GAAIZ,GACjB,OAAOZ,IAAM1C,EAAUH,EAAY6C,OAGlC,GAAIO,EAAI8B,EAAIrC,GAAIY,GACrB,OAAOZ,IAAM1C,EAAUH,EAAY6C,EAGvC,OAAOY,CACT,EAOE0B,GAAe,CACf,MAAO,KACP,IAAK,KACL,IAAK,KACL,MAAO,OACP,QAAS,OACT,QAAS,OACT,QAAS,OACT,IAAK,KAEPC,GAAoB,CAClBC,GAAI,OACJ,UAAW,SACX,SAAU,QACV,IAAM,SACNC,GAAI,CAAC,SAAU,UACfC,MAAO,SACP,EAAG,SACH,EAAG,SACH,IAAK,SACL,GAAI,CAAC,SAAU,WACfC,GAAI,OAOJ9C,GAAU,CACZ+C,QAAS,CACP,CACE,gCAEF,CAAC5E,EAAS,CAACH,EAAM,WACjB,CACE,+BAEF,CAACG,EAAS,CAACH,EAAM,SACjB,CAEE,4BACA,mDACA,2CAEF,CAACA,EAAMG,GACP,CACE,yBAEF,CAACA,EAAS,CAACH,EAAMyB,EAAQ,UACzB,CACE,qBAEF,CAACtB,EAAS,CAACH,EAAMyB,IACjB,CAEE,uBACA,8DAEA,qDACA,kCACA,2BAGA,oLAEA,uBAEF,CAACzB,EAAMG,GACP,CACE,qDAEF,CAACA,EAAS,CAACH,EAAM,KAAOgB,IACxB,CACE,wBAEF,CAACb,EAAS,CAACH,EAAM,wBACjB,CACE,8BAEF,CAACG,EAAS,CAACH,EAAM,WACjB,CACE,yBAEF,CAACG,EAAS,CAACH,EAAM,cACjB,CACE,+CAEF,CAACG,EAAS,CAACH,EAAM,OACjB,CACE,yBAEF,CAACG,EAAS,CAACH,EAAM,WACjB,CACE,2BAEF,CAAC,CAACA,EAAM,OAAQ,aAAegB,GAAUb,GACzC,CACE,uBAEF,CAACA,EAAS,CAACH,EAAMmB,EAAU,WAC3B,CACE,qBAEF,CAAChB,EAAS,CAACH,EAAMyB,EAAQ,WACzB,CACE,0BAEF,CAACtB,EAAS,CAACH,EAAM,YACjB,CACE,sBAEF,CAACG,EAAS,CAACH,EAAM,YACjB,CACE,qBAEF,CAACG,EAAS,CAACH,EAAMyB,EAAQ,WACzB,CACE,2BAEF,CAACtB,EAAS,CAACH,EAAM,QAAUgB,IAC3B,CACE,sBAEF,CAACb,EAAS,CAACH,EAAMmB,IACjB,CACE,iCAEF,CAAC,CAACnB,EAAM,OAASgB,IACjB,CAAC,gDACD,CAAC,CAAChB,EAAM,OAAQ,MAAQgB,GAAUb,GAClC,CAEE,+BAEF,CAAC,CAACH,EAAM,KAAM,KAAMG,GACpB,CACE,gCACA,iDACA,0DAEF,CAACH,EAAMG,GACP,CACE,2BACA,gBAEF,CAACH,GACD,CAEE,+DAEF,CAAC,CAACA,EAAM8B,GAAW3B,GACnB,CACE,4BACA,4BACA,wCAEF,CAACH,EAAMG,GACP,CACE,gCAEF,CAACA,EAAS,CAACH,EAAM,QACjB,CACE,oCAEF,CAACG,EAAS,CAACH,EAAMiB,EAAS,cAC1B,CACE,+BAEF,CAAC,CAACjB,EAAMiB,EAAS,YAAad,GAC9B,CACE,2DAEF,CAACA,EAAS,CAACH,EAAM,WAAagB,IAC9B,CACE,+DAEF,CAAChB,EAAMG,GACP,CACE,8CAEF,CAACA,EAAS,CAACH,EAAM,kBACjB,CACE,iDAEF,CAACG,EAASH,GACV,CACE,gDAEF,CAACA,EAAM,CAACG,EAASoE,EAAWE,KAC5B,CAAC,8BACD,CAACzE,EAAMG,GACP,CAEE,wCAEF,CAAC,CAACH,EAAM,YAAaG,GACrB,CACE,uCAEF,CAACA,EAAS,CAACH,EAAMmB,EAAU,aAC3B,CACE,6BACA,cACA,mGAEA,+FAEA,wBACA,2CAGA,wHAEA,wBAEF,CAACnB,EAAMG,IAGT6E,IAAK,CACH,CACE,iDAEF,CAAC,CAAC5E,EAAc,UAChB,CACE,gBAEF,CAAC,CAACA,EAAcyC,IAChB,CACE,0BAEF,CAAC,CAACzC,EAAc,SAChB,CACE,oCAEF,CAAC,CAACA,EAAc,UAChB,CACE,mCAEF,CAAC,CAACA,EAAc,UAChB,CAEE,8BAEF,CAAC,CAACA,EAAc,QAChB,CACE,0CAEF,CAAC,CAACA,EAAc,OAAQZ,EAAOqD,IAC/B,CACE,kBAEF,CAAC,CAACzC,EAAc,UAChB,CACE,2HAGF,CAAC,CAACA,EAAcyC,KAGlBoC,OAAQ,CACN,CAOE,kFAEF,CAAClF,EAAO,CAACG,EAAQwB,GAAU,CAACzB,EAAMM,IAClC,CACE,0CACA,uBACA,iBAEF,CAACR,EAAO,CAACG,EAAQwB,GAAU,CAACzB,EAAMK,IAClC,CAEE,2BAEF,CAACP,EAAO,CAACG,EAAQW,GAAQ,CAACZ,EAAMK,IAChC,CACE,kBAEF,CAACP,EAAO,CAACG,EAAQW,GAAQ,CAACZ,EAAMM,IAChC,CACE,6BAEF,CAACR,EAAO,CAACG,EAAQW,GAAQ,CAACZ,EAAMK,IAChC,CACE,6BACA,oCACA,kCAEF,CAACP,EAAO,CAACG,EAAQW,GAAQ,CAACZ,EAAMM,IAChC,CAEE,+DAEF,CAACR,EAAO,CAACG,EAAQmB,GAAS,CAACpB,EAAMM,IACjC,CACE,kCACA,sEAEF,CAACR,EAAO,CAACG,EAAQmB,GAAS,CAACpB,EAAMK,IACjC,CAEE,6BACA,yBACA,uCACA,iDACA,yGAEF,CACE,CAACP,EAAO,KAAM,KACd,CAACG,EAAQ0B,GACT,CAAC3B,EAAMK,IAET,CACE,8CAEF,CACE,CAACP,EAAO,KAAM,KACd,CAACG,EAAQ0B,GACT,CAAC3B,EAAMM,IAET,CAEE,sBACA,mEAEF,CAACR,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMK,IACjC,CAEE,yBACA,oCAEF,CAACP,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMK,IACjC,CAEE,kCAEF,CAACP,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMK,IACnC,CAEE,iFACA,4BACA,sDAEF,CAACP,EAAO,CAACG,EAAQsB,GAAW,CAACvB,EAAMK,IACnC,CAAC,qCACD,CAACP,EAAO,CAACG,EAAQsB,GAAW,CAACvB,EAAMM,IACnC,CAEE,iEAEF,CAACR,EAAO,CAACG,EAAQoB,GAAK,CAACrB,EAAMM,IAC7B,CACE,sDACA,oDACA,wBAEF,CAACR,EAAO,CAACG,EAAQoB,GAAK,CAACrB,EAAMK,IAC7B,CAEE,oBACA,qEAEF,CAACP,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMM,IACnC,CAEE,qCACA,0BAEF,CACE,CAACR,EAAO,KAAM,KACd,CAACG,EAAQ,SACT,CAACD,EAAMK,IAET,CAEE,gBAEF,CAACP,EAAO,CAACG,EAAQkB,GAAS,CAACnB,EAAMM,IACjC,CACE,6CAEF,CAACR,EAAO,CAACG,EAAQkB,GAAS,CAACnB,EAAMK,IACjC,CAEE,0GAEF,CAACP,EAAO,CAACG,EAAQyB,GAAO,CAAC1B,EAAMK,IAC/B,CAAC,oBAAqB,iCACtB,CACE,CAACP,EAAO,iBACR,CAACG,EAAQyB,GACT,CAAC1B,EAAMM,IAET,CAEE,sCACA,0CAEF,CAACR,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAMK,IACpC,CAEE,eACA,2BACA,gCAEF,CAACP,EAAO,CAACG,EAAQU,GAAS,CAACX,EAAMM,IACjC,CACE,iDAEF,CACE,CAACR,EAAO,QAAS,iBACjB,CAACG,EAAQU,GACT,CAACX,EAAMK,IAET,CAEE,gCAEF,CAACP,EAAOG,EAAQ,CAACD,EAAMM,IACvB,CACE,gCACA,kBAEF,CAACR,EAAO,CAACG,EAAQa,GAAa,CAACd,EAAMK,IACrC,CAEE,qFAEF,CAACP,EAAO,CAACG,EAAQY,GAAO,CAACb,EAAMM,IAC/B,CAAC,iDACD,CAACR,EAAO,CAACG,EAAQY,GAAO,CAACb,EAAMK,IAC/B,CAEE,cAEF,CAACP,EAAO,CAACG,EAAQ,OAAQ,CAACD,EAAMM,IAChC,CACE,2CAGA,oCACA,qEAEF,CAACL,EAAQ,CAACH,EAAO,KAAM,KAAM,CAACE,EAAMK,IACpC,CAEE,uCAEF,CAACP,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMM,IACjC,CAEE,8BACA,qBAEF,CAACR,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMK,IAClC,CAEE,iCAEF,CAACP,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMK,IAClC,CAEE,kGAEA,mBACA,iBACA,8BACA,0BACA,WACA,yBAEF,CAACJ,EAAQH,EAAO,CAACE,EAAMK,IACvB,CACE,wBACA,uCACA,uBACA,4BACA,iCACA,kCACA,8BACA,gCACA,mCAEF,CAACJ,EAAQH,EAAO,CAACE,EAAMM,IACvB,CACE,kBAEF,CAACR,EAAO,CAACG,EAAQqB,GAAY,CAACtB,EAAMM,IACpC,CACE,qCAEF,CAACR,EAAO,CAACG,EAAQ,aAAc,CAACD,EAAMK,IACtC,CACE,aAEF,CAACP,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMK,IACjC,CACE,gBAEF,CAACP,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAMK,IACpC,CACE,iBAEF,CAACP,EAAO,CAACG,EAAQ,OAAQ,CAACD,EAAMM,IAChC,CACE,0BAEF,CAACR,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMM,IACjC,CACE,wBAEF,CAACR,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAMM,IACpC,CACE,+CAEF,CAACR,EAAO,CAACG,EAAQ,kBAAmB,CAACD,EAAMM,IAC3C,CAAC,qBACD,CAACR,EAAO,CAACG,EAAQ,YAAa,CAACD,EAAMM,IACrC,CACE,cAEF,CAACR,EAAO,CAACG,EAAQ,OAAQ,CAACD,EAAMM,IAChC,CACE,mBAEF,CAACR,EAAO,CAACG,EAAQ,OAAQ,CAACD,EAAMK,IAChC,CACE,wBAEF,CAACP,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMK,IAClC,CACE,mBAEF,CAACP,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMM,IAClC,CACE,wBAEF,CAACR,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMM,IACjC,CACE,mBACA,sCAEF,CAAC,CAACL,EAAQ,gBAAiBH,EAAO,CAACE,EAAMM,IACzC,CACE,sBAEF,CAACR,EAAO,CAACG,EAAQ,YAAa,CAACD,EAAMM,IACrC,CACE,8BAEF,CAACR,EAAO,CAACG,EAAQ,YAAa,CAACD,EAAMM,IACrC,CACE,oDAEF,CAAC,CAACL,EAAQ,SAAUH,EAAO,CAACE,EAAMK,IAClC,CACE,2BAEF,CAAC,CAACJ,EAAQ,SAAUH,EAAO,CAACE,EAAMK,IAClC,CACE,cAEF,CAACP,EAAO,CAACG,EAAQ,aAAc,CAACD,EAAMK,IACtC,CACE,uCAEF,CAACP,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAMM,IACpC,CACE,wBAEF,CAACR,EAAO,CAACG,EAAQ,aAAc,CAACD,EAAMM,IACtC,CACE,kBAEF,CAACR,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMM,IAClC,CACE,qBAEF,CAACR,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMM,IACnC,CACE,mBAEF,CAACL,EAAQH,EAAO,CAACE,EAAMK,IACvB,CACE,sBAEF,CACE,CAACP,EAAO,MAAO,KACf,CAACG,EAAQqB,GACT,CAACtB,EAAMK,IAET,CACE,yDAEF,CAACP,EAAO,CAACG,EAAQ2B,GAAQ,CAAC5B,EAAMM,IAChC,CAAC,yCACD,CAACR,EAAO,CAACG,EAAQ2B,GAAQ,CAAC5B,EAAMK,IAChC,CAKE,UACA,8BAEF,CAACJ,EAAQH,EAAO,CAACE,EAAMI,IACvB,CACE,0BAEF,CAACN,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMI,IACnC,CACE,mCAEF,CAACN,EAAO,CAACG,EAAQyB,GAAO,CAAC1B,EAAMI,IAC/B,CACE,sCAEF,CAACN,EAAO,CAACG,EAAQqB,GAAY,CAACtB,EAAMI,IACpC,CAKE,wBAEF,CAACH,EAAQ,CAACD,EAAMO,IAChB,CAAC,uBACD,CACE,CAACT,EAAO,IAAK,WACb,CAACG,EAAQwB,GACT,CAACzB,EAAMO,IAET,CACE,8DAEF,CACE,CAACN,EAAQoB,GACT,CAACrB,EAAMO,IAET,CACE,gBAEF,CAACN,EAAQ,CAACH,EAAOc,EAAQ,OAAQ,CAACZ,EAAMO,IACxC,CACE,UAEF,CACE,CAACT,EAAOkB,EAAS,QACjB,CAACf,EAAQkB,GACT,CAACnB,EAAMO,IAET,CACE,4BAEF,CAACT,EAAO,CAACG,EAAQU,GAAS,CAACX,EAAMO,IACjC,CACE,wBAEF,CAACT,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMO,IAClC,CACE,wBAEF,CAACT,EAAO,CAACG,EAAQyB,GAAO,CAAC1B,EAAMO,IAC/B,CACE,0CACA,uDAEF,CACE,CAACN,EAAQmD,GACT,CAACtD,EAAOsD,GACR,CAACpD,EAAMO,IAET,CACE,mDAEF,CAAC,CAACP,EAAMO,IACR,CAKE,kBAEF,CAACN,EAAQH,EAAO,CAACE,EAAMQ,IACvB,CACE,wBAEF,CAACV,EAAO,CAACG,EAAQkB,GAAS,CAACnB,EAAMQ,IACjC,CAAC,6BACD,CAACV,EAAO,CAACG,EAAQ2B,GAAQ,CAAC5B,EAAMQ,IAChC,CACE,iBAEF,CAACV,EAAO,CAACG,EAAQ4B,GAAW,CAAC7B,EAAMQ,IACnC,CAKE,wCAEF,CAACP,EAAQ,CAACD,EAAMS,IAChB,CAKE,2DAEF,CAACX,EAAO,CAACE,EAAMK,IACf,CACE,+DAEF,CAACP,EAAO,CAACE,EAAMM,IACf,CACE,gDAEF,CAAC,CAACN,EAAMM,IACR,CACE,wDAEF,CAAC,CAACN,EAAMK,IACR,CACE,kCAEF,CAACP,EAAO,CAACG,EAAQ,aAGnBgF,OAAQ,CACN,CACE,8BAEF,CAAC/E,EAAS,CAACH,EAAMkB,EAAO,SACxB,CACE,6CAEF,CAACf,EAAS,CAACH,EAAM,UACjB,CACE,uBACA,sEACA,0BACA,yCACA,+BAEF,CAACA,EAAMG,GACP,CACE,iCAEF,CAACA,EAASH,IAGZmF,GAAI,CACF,CAEE,mCAEF,CAACnF,EAAMG,GACP,CACE,4BACA,wDACA,8CAEF,CAACH,EAAM,CAACG,EAASoE,EAAWG,KAC5B,CAAC,sCACD,CACE,CAAC1E,EAAM,WACP,CAACG,EAASoE,EAAWG,KAEvB,CAEE,sDACA,wBAEF,CACE,CAACvE,EAAS,KAAM,KAChB,CAACH,EAAM,QAET,CACE,0BACA,yCAEF,CACE,CAACA,EAAM,UACP,CAACG,EAAS,KAAM,MAElB,CAEE,wCAEF,CAACA,EAASH,GACV,CAEE,+EACA,8BACA,+BACA,kBAEF,CAACA,EAAMG,GACP,CACE,cAEF,CAACA,EAAS,CAACH,EAAMe,IACjB,CACE,6DAEF,CAACZ,EAAS,CAACH,EAAM,YACjB,CACE,mFAEF,CAACG,EAAS,CAACH,EAAMmB,EAAU,QAC3B,CACE,kBACA,wCAEF,CAAChB,EAAS,CAACH,EAAM,UACjB,CAEE,qBAEF,CAACG,EAAS,CAACH,EAAMiB,EAAS,SAC1B,CACE,6BAEF,CAAC,CAACjB,EAAM,eAAgBG,GACxB,CAEE,mDACA,2BAGA,wCACA,yBACA,4BACA,8SAEA,2BACA,oBACA,6EACA,kBAEF,CAACH,EAAMG,GACP,CACE,yBAEF,CAAC,CAACH,EAAM,WAAYG,GACpB,CACE,sCACA,kCACA,wDACA,sBAEF,CAACH,EAAMG,KAQPiF,GAAW,SAAU3B,EAAIxB,GAM3B,UALWwB,IAAO7D,IAChBqC,EAAawB,EACbA,EAAKnE,KAGD8E,gBAAgBgB,IACpB,OAAO,IAAIA,GAAS3B,EAAIxB,GAAYoD,YAGtC,IAAIC,EACF7B,WACQpE,IAAWM,GACnBN,EAAOkG,WACPlG,EAAOkG,UAAUC,UAAYnG,EAAOkG,UAAUC,UAAYhG,GACxDiG,EAAUxD,EAAaF,EAAOC,GAASC,GAAcD,GAyDzD,OAvDAoC,KAAKsB,WAAa,WAChB,IAAIC,EAAW,CAAC,EAKhB,OAJAA,EAAS3F,GAAQV,EACjBqG,EAASxF,GAAWb,EACpBkE,EAAUa,KAAKsB,EAAUL,EAAKG,EAAQV,SACtCY,EAASC,MAAQ3C,EAAS0C,EAASzC,SAC5ByC,CACT,EACAvB,KAAKyB,OAAS,WACZ,IAAIC,EAAO,CAAC,EAGZ,OAFAA,EAAK1F,GAAgBd,EACrBkE,EAAUa,KAAKyB,EAAMR,EAAKG,EAAQT,KAC3Bc,CACT,EACA1B,KAAK2B,UAAY,WACf,IAAIC,EAAU,CAAC,EAKf,OAJAA,EAAQ9F,GAAUZ,EAClB0G,EAAQjG,GAAST,EACjB0G,EAAQ/F,GAAQX,EAChBkE,EAAUa,KAAK2B,EAASV,EAAKG,EAAQR,QAC9Be,CACT,EACA5B,KAAK6B,UAAY,WACf,IAAIC,EAAU,CAAC,EAIf,OAHAA,EAAQlG,GAAQV,EAChB4G,EAAQ/F,GAAWb,EACnBkE,EAAUa,KAAK6B,EAASZ,EAAKG,EAAQP,QAC9BgB,CACT,EACA9B,KAAK+B,MAAQ,WACX,IAAIC,EAAM,CAAC,EAIX,OAHAA,EAAIpG,GAAQV,EACZ8G,EAAIjG,GAAWb,EACfkE,EAAUa,KAAK+B,EAAKd,EAAKG,EAAQN,IAC1BiB,CACT,EACAhC,KAAKiB,UAAY,WACf,MAAO,CACL5B,GAAIW,KAAKiC,QACTtB,QAASX,KAAKsB,aACdR,OAAQd,KAAK6B,YACbd,GAAIf,KAAK+B,QACTlB,OAAQb,KAAK2B,YACbf,IAAKZ,KAAKyB,SAEd,EACAzB,KAAKiC,MAAQ,WACX,OAAOf,CACT,EACAlB,KAAKkC,MAAQ,SAAU7C,GAGrB,OAFA6B,SACS7B,IAAO5D,GAAY4D,EAAGrB,OAASzB,EAAgB0C,EAAKI,EAAI9C,GAAiB8C,EAC3EW,IACT,EACAA,KAAKkC,MAAMhB,GACJlB,IACT,EAEAgB,GAASjF,QAAUZ,EACnB6F,GAASpE,QAAUsB,EAAU,CAACtC,EAAMG,EAASL,IAC7CsF,GAASmB,IAAMjE,EAAU,CAAClC,IAC1BgF,GAASoB,OAASlE,EAAU,CAC1BvC,EACAG,EACAD,EACAI,EACAC,EACAE,EACAD,EACAE,EACAC,IAEF0E,GAASqB,OAASrB,GAASsB,GAAKpE,EAAU,CAACtC,EAAMG,WAOtCwG,IAAYhH,GAEjB,WAAkBA,GAAciH,EAAOD,UACzCA,EAAUC,EAAOD,QAAUvB,IAE7BuB,EAAQvB,SAAWA,IAGf,aAAkB1F,GAAa,QACjC,aACE,OAAO0F,EACR,6CACe/F,IAAWM,IAE3BN,EAAO+F,SAAWA,IAStB,IAAIyB,UAAWxH,IAAWM,IAAeN,EAAOyH,QAAUzH,EAAO0H,OACjE,GAAIF,KAAMA,GAAEpD,GAAI,CACd,IAAIuD,GAAS,IAAI5B,GACjByB,GAAEpD,GAAKuD,GAAO3B,YACdwB,GAAEpD,GAAGwD,IAAM,WACT,OAAOD,GAAOX,OAChB,EACAQ,GAAEpD,GAAGyD,IAAM,SAAUzD,GACnBuD,GAAOV,MAAM7C,GACb,IAAI0D,EAASH,GAAO3B,YACpB,IAAK,IAAI+B,KAAQD,EACfN,GAAEpD,GAAG2D,GAAQD,EAAOC,EAExB,CACF,CACD,EA7oCD,CA6oCqB,kBAAX/H,OAAsBA,OAAS+E,K,wUC7mClC,SAASiD,EAAOC,EAAGC,GACtB,IAAIC,EAAI,CAAC,EACT,IAAK,IAAI3D,KAAKyD,EAAOG,OAAOC,UAAUC,eAAetD,KAAKiD,EAAGzD,IAAM0D,EAAEzE,QAAQe,GAAK,IAC9E2D,EAAE3D,GAAKyD,EAAEzD,IACb,GAAS,MAALyD,GAAqD,oBAAjCG,OAAOG,sBACtB,KAAIzF,EAAI,EAAb,IAAgB0B,EAAI4D,OAAOG,sBAAsBN,GAAInF,EAAI0B,EAAEzB,OAAQD,IAC3DoF,EAAEzE,QAAQe,EAAE1B,IAAM,GAAKsF,OAAOC,UAAUG,qBAAqBxD,KAAKiD,EAAGzD,EAAE1B,MACvEqF,EAAE3D,EAAE1B,IAAMmF,EAAEzD,EAAE1B,IAF4B,CAItD,OAAOqF,CACX,CAuD6BC,OAAOK,OA0GXL,OAAOK,O,cCuDhC,SAASC,IAIL,MAAO,CACH,CAAC,yCAA6F,0LAItG,CAQA,MAQMC,EAAeD,EACfE,EAA8B,IAAI,KAAa,OAAQ,WAAYF,KA8HnEG,EAAY,IAAI,KAAO,kBAC7B,SAASC,EAAUC,KAAQC,GACnBH,EAAUI,UAAY,QAASC,OAC/BL,EAAUM,MAAM,SAAS,UAAiBJ,OAAUC,EAE5D;;;;;;;;;;;;;;;;GAkBA,SAASI,EAAMC,KAAeC,GAC1B,MAAMC,EAAoBF,KAAeC,EAC7C,CACA,SAASE,EAAaH,KAAeC,GACjC,OAAOC,EAAoBF,KAAeC,EAC9C,CACA,SAASG,EAAwBC,EAAMC,EAAMC,GACzC,MAAMC,EAAWzB,OAAO0B,OAAO1B,OAAO0B,OAAO,CAAC,EAAGnB,KAAiB,CAAE,CAACgB,GAAOC,IACtEG,EAAU,IAAI,KAAa,OAAQ,WAAYF,GACrD,OAAOE,EAAQtB,OAAOkB,EAAM,CACxBK,QAASN,EAAKO,MAEtB,CAWA,SAASV,EAAoBF,KAAeC,GACxC,GAA0B,kBAAfD,EAAyB,CAChC,MAAMM,EAAOL,EAAK,GACZY,EAAa,IAAIZ,EAAKa,MAAM,IAIlC,OAHID,EAAW,KACXA,EAAW,GAAGF,QAAUX,EAAWY,MAEhCZ,EAAWe,cAAc3B,OAAOkB,KAASO,EACpD,CACA,OAAOtB,EAA4BH,OAAOY,KAAeC,EAC7D,CACA,SAASe,EAAQC,EAAWjB,KAAeC,GACvC,IAAKgB,EACD,MAAMf,EAAoBF,KAAeC,EAEjD,CAOA,SAASiB,EAAUC,GAGf,MAAMZ,EAAU,8BAAgCY,EAKhD,MAJA1B,EAAUc,GAIJ,IAAIa,MAAMb,EACpB,CAQA,SAASc,EAAYJ,EAAWV,GACvBU,GACDC,EAAUX,EAElB;;;;;;;;;;;;;;;;GAkBA,MAAMe,EAAgB,IAAIC,IAC1B,SAASC,EAAaC,GAClBJ,EAAYI,aAAeC,SAAU,+BACrC,IAAIC,EAAWL,EAAc/C,IAAIkD,GACjC,OAAIE,GACAN,EAAYM,aAAoBF,EAAK,kDAC9BE,IAEXA,EAAW,IAAIF,EACfH,EAAc9C,IAAIiD,EAAKE,GAChBA,EACX;;;;;;;;;;;;;;;;GA2CA,SAASC,EAAeC,EAAKC,GACzB,MAAMC,GAAW,QAAaF,EAAK,QACnC,GAAIE,EAASC,gBAAiB,CAC1B,MAAM3B,EAAO0B,EAASE,eAChBC,EAAiBH,EAASI,aAChC,IAAI,QAAUD,EAAyB,OAATJ,QAA0B,IAATA,EAAkBA,EAAO,CAAC,GACrE,OAAOzB,EAGPN,EAAMM,EAAM,sBAEpB,CACA,MAAMA,EAAO0B,EAASK,WAAW,CAAEC,QAASP,IAC5C,OAAOzB,CACX,CACA,SAASiC,EAAwBjC,EAAMyB,GACnC,MAAMS,GAAwB,OAATT,QAA0B,IAATA,OAAkB,EAASA,EAAKS,cAAgB,GAChFC,GAAaC,MAAMC,QAAQH,GAAeA,EAAc,CAACA,IAAczG,IAAI0F,IACpE,OAATM,QAA0B,IAATA,OAAkB,EAASA,EAAKtB,WACjDH,EAAKsC,gBAAgBb,EAAKtB,UAK9BH,EAAKuC,2BAA2BJ,EAAoB,OAATV,QAA0B,IAATA,OAAkB,EAASA,EAAKe,sBAChG;;;;;;;;;;;;;;;;GAkBA,SAASC,IACL,IAAIC,EACJ,MAAwB,qBAATC,OAAkD,QAAxBD,EAAKC,KAAKC,gBAA6B,IAAPF,OAAgB,EAASA,EAAGG,OAAU,EACnH,CACA,SAASC,IACL,MAA+B,UAAxBC,KAA2D,WAAxBA,GAC9C,CACA,SAASA,IACL,IAAIL,EACJ,MAAwB,qBAATC,OAAkD,QAAxBD,EAAKC,KAAKC,gBAA6B,IAAPF,OAAgB,EAASA,EAAGM,WAAc,IACvH;;;;;;;;;;;;;;;;GAqBA,SAASC,IACL,QAAyB,qBAAdzG,WACPA,WACA,WAAYA,WACgB,mBAArBA,UAAU0G,SAMhBJ,MAAoB,WAAwB,eAAgBtG,aACtDA,UAAU0G,MAIzB,CACA,SAASC,IACL,GAAyB,qBAAd3G,UACP,OAAO,KAEX,MAAM4G,EAAoB5G,UAC1B,OAEC4G,EAAkBC,WAAaD,EAAkBC,UAAU,IAGxDD,EAAkBE,UAElB,IACR;;;;;;;;;;;;;;;;GAuBA,MAAMC,EACFC,YAAYC,EAAYC,GACpBrI,KAAKoI,WAAaA,EAClBpI,KAAKqI,UAAYA,EAEjB1C,EAAY0C,EAAYD,EAAY,+CACpCpI,KAAKsI,UAAW,YAAqB,SACzC,CACAzF,MACI,OAAK+E,IAQE5H,KAAKsI,SAAWtI,KAAKqI,UAAYrI,KAAKoI,WANlCG,KAAKC,IAAI,IAA6BxI,KAAKoI,WAO1D;;;;;;;;;;;;;;;;GAmBJ,SAASK,EAAaC,EAAQC,GAC1BhD,EAAY+C,EAAOE,SAAU,sCAC7B,MAAM,IAAEC,GAAQH,EAAOE,SACvB,OAAKD,EAGE,GAAGE,IAAMF,EAAKG,WAAW,KAAOH,EAAKvD,MAAM,GAAKuD,IAF5CE,CAGf;;;;;;;;;;;;;;;;GAkBA,MAAME,EACFC,kBAAkBC,EAAWC,EAAaC,GACtCnJ,KAAKiJ,UAAYA,EACbC,IACAlJ,KAAKkJ,YAAcA,GAEnBC,IACAnJ,KAAKmJ,aAAeA,EAE5B,CACAH,eACI,OAAIhJ,KAAKiJ,UACEjJ,KAAKiJ,UAEI,qBAAT3B,MAAwB,UAAWA,KACnCA,KAAK8B,WAEhB5D,EAAU,kHACd,CACAwD,iBACI,OAAIhJ,KAAKkJ,YACElJ,KAAKkJ,YAEI,qBAAT5B,MAAwB,YAAaA,KACrCA,KAAK+B,aAEhB7D,EAAU,oHACd,CACAwD,kBACI,OAAIhJ,KAAKmJ,aACEnJ,KAAKmJ,aAEI,qBAAT7B,MAAwB,aAAcA,KACtCA,KAAKgC,cAEhB9D,EAAU,qHACd;;;;;;;;;;;;;;;;GAsBJ,MAAM+D,EAAmB,CAErB,CAAC,uBAA8D,wBAE/D,CAAC,wBAAgE,iBAEjE,CAAC,sBAA4D,gBAE7D,CAAC,wBAAgE,iBAEjE,CAAC,oBAAwD,iBAEzD,CAAC,oBAAwD,iBAEzD,CAAC,gBAAgD,uBACjD,CAAC,2BAAsE,wBAEvE,CAAC,wBAAgE,qBACjE,CAAC,yBAAkE,qBACnE,CAAC,oCAAwF,4BAEzF,CAAC,oBAAwD,iBAEzD,CAAC,mBAAsD,iBACvD,CAAC,+BAA8E,oBAC/E,CAAC,oBAAwD,sBACzD,CAAC,oBAAwD,sBAEzD,CAAC,oBAAwD,iBAEzD,CAAC,kCAAoF,wBACrF,CAAC,oBAAwD,qBACzD,CAAC,iBAAkD,qBACnD,CAAC,kBAAoD,qBAErD,CAAC,+BAA8E,oBAE/E,CAAC,gBAAgD,4BACjD,CAAC,wBAAgE,0BACjE,CAAC,2BAAsE,qBACvE,CAAC,wBAAgE,0BACjE,CAAC,mBAAsD,eAIvD,CAAC,gCAAgF,2BACjF,CAAC,uBAA8D,4BAE/D,CAAC,2BAAsE,0BAEvE,CAAC,wBAAgE,6BAEjE,CAAC,kCAAoF,+BACrF,CAAC,4BAAwE,8BACzE,CAAC,6BAA0E,4BAC3E,CAAC,kCAAoF,+BACrF,CAAC,wBAAgE,+BACjE,CAAC,gCAAgF,uCAEjF,CAAC,oCAAwF,kBAmBvFC,EAAyB,IAAItB,EAAM,IAAO;;;;;;;;;;;;;;;;GAChD,SAASuB,EAAmB9E,EAAM+E,GAC9B,OAAI/E,EAAKgF,WAAaD,EAAQC,SACnBtG,OAAO0B,OAAO1B,OAAO0B,OAAO,CAAC,EAAG2E,GAAU,CAAEC,SAAUhF,EAAKgF,WAE/DD,CACX,CACAE,eAAeC,EAAmBlF,EAAMmF,EAAQnB,EAAMe,EAASK,EAAiB,CAAC,GAC7E,OAAOC,EAA+BrF,EAAMoF,GAAgBH,UACxD,IAAIK,EAAO,CAAC,EACRC,EAAS,CAAC,EACVR,IACe,QAAXI,EACAI,EAASR,EAGTO,EAAO,CACHA,KAAME,KAAKC,UAAUV,KAIjC,MAAMW,GAAQ,QAAYhH,OAAO0B,OAAO,CAAEuF,IAAK3F,EAAK+D,OAAO6B,QAAUL,IAAS9E,MAAM,GAC9EoF,QAAgB7F,EAAK8F,wBAK3B,OAJAD,EAAQ,gBAAgD,mBACpD7F,EAAK+F,eACLF,EAAQ,qBAA0D7F,EAAK+F,cAEpE3B,EAAcK,OAAdL,CAAsB4B,EAAgBhG,EAAMA,EAAK+D,OAAOkC,QAASjC,EAAM0B,GAAQhH,OAAO0B,OAAO,CAAE+E,SAClGU,UAASK,eAAgB,eAAiBZ,GAAM,GAE5D,CACAL,eAAeI,EAA+BrF,EAAMoF,EAAgBe,GAChEnG,EAAKoG,kBAAmB,EACxB,MAAMjG,EAAWzB,OAAO0B,OAAO1B,OAAO0B,OAAO,CAAC,EAAGwE,GAAmBQ,GACpE,IACI,MAAMiB,EAAiB,IAAIC,EAAetG,GACpCuG,QAAiBC,QAAQC,KAAK,CAChCN,IACAE,EAAeK,UAInBL,EAAeM,sBACf,MAAMC,QAAaL,EAASK,OAC5B,GAAI,qBAAsBA,EACtB,MAAMC,EAAiB7G,EAAM,2CAAkF4G,GAEnH,GAAIL,EAASO,MAAQ,iBAAkBF,GACnC,OAAOA,EAEN,CACD,MAAMG,EAAeR,EAASO,GAAKF,EAAKG,aAAeH,EAAKnH,MAAMS,SAC3D8G,EAAiBC,GAAsBF,EAAa1M,MAAM,OACjE,GAAwB,qCAApB2M,EACA,MAAMH,EAAiB7G,EAAM,4BAA2E4G,GAEvG,GAAwB,iBAApBI,EACL,MAAMH,EAAiB7G,EAAM,uBAAyD4G,GAErF,GAAwB,kBAApBI,EACL,MAAMH,EAAiB7G,EAAM,gBAAmD4G,GAEpF,MAAMM,EAAY/G,EAAS6G,IACvBA,EACK/M,cACAG,QAAQ,UAAW,KAC5B,GAAI6M,EACA,MAAMlH,EAAwBC,EAAMkH,EAAWD,GAG/CvH,EAAMM,EAAMkH,EAEpB,CAOJ,CALA,MAAO1I,GACH,GAAIA,aAAa,KACb,MAAMA,EAEVkB,EAAMM,EAAM,yBAChB,CACJ,CACAiF,eAAekC,EAAsBnH,EAAMmF,EAAQnB,EAAMe,EAASK,EAAiB,CAAC,GAChF,MAAMgC,QAAwBlC,EAAmBlF,EAAMmF,EAAQnB,EAAMe,EAASK,GAM9E,MALI,yBAA0BgC,GAC1B1H,EAAMM,EAAM,6BAA+D,CACvEqH,gBAAiBD,IAGlBA,CACX,CACA,SAASpB,EAAgBhG,EAAMsH,EAAMtD,EAAM0B,GACvC,MAAM6B,EAAO,GAAGD,IAAOtD,KAAQ0B,IAC/B,OAAK1F,EAAK+D,OAAOE,SAGVH,EAAa9D,EAAK+D,OAAQwD,GAFtB,GAAGvH,EAAK+D,OAAOyD,eAAeD,GAG7C,CACA,MAAMjB,EACF9C,YAAYxD,GACR3E,KAAK2E,KAAOA,EAIZ3E,KAAKoM,MAAQ,KACbpM,KAAKqL,QAAU,IAAIF,SAAQ,CAACkB,EAAGC,KAC3BtM,KAAKoM,MAAQG,YAAW,IACbD,EAAO7H,EAAazE,KAAK2E,KAAM,4BACvC6E,EAAuB3G,MAAM,GAExC,CACAyI,sBACIkB,aAAaxM,KAAKoM,MACtB,EAEJ,SAASZ,EAAiB7G,EAAMC,EAAMsG,GAClC,MAAMuB,EAAc,CAChBxH,QAASN,EAAKO,MAEdgG,EAASwB,QACTD,EAAYC,MAAQxB,EAASwB,OAE7BxB,EAASyB,cACTF,EAAYE,YAAczB,EAASyB,aAEvC,MAAMvI,EAAQK,EAAaE,EAAMC,EAAM6H,GAGvC,OADArI,EAAMwI,WAAWC,eAAiB3B,EAC3B9G,CACX;;;;;;;;;;;;;;;;GAkBAwF,eAAekD,EAAcnI,EAAM+E,GAC/B,OAAOG,EAAmBlF,EAAM,OAA8B,sBAAqD+E,EACvH,CAIAE,eAAemD,EAAepI,EAAM+E,GAChC,OAAOG,EAAmBlF,EAAM,OAA8B,sBAAuD+E,EACzH;;;;;;;;;;;;;;;;GAkBA,SAASsD,EAAyBC,GAC9B,GAAKA,EAGL,IAEI,MAAMC,EAAO,IAAIC,KAAKC,OAAOH,IAE7B,IAAKI,MAAMH,EAAKI,WAEZ,OAAOJ,EAAKK,aAKpB,CAFA,MAAOpK,GAEP,CAEJ;;;;;;;;;;;;;;;;GA6CAyG,eAAe4D,EAAiBC,EAAMC,GAAe,GACjD,MAAMC,GAAe,QAAmBF,GAClCG,QAAcD,EAAaE,WAAWH,GACtCI,EAASC,EAAYH,GAC3BtI,EAAQwI,GAAUA,EAAOE,KAAOF,EAAOG,WAAaH,EAAOI,IAAKP,EAAahJ,KAAM,kBACnF,MAAMwJ,EAAsC,kBAApBL,EAAOK,SAAwBL,EAAOK,cAAWjT,EACnEkT,EAA8B,OAAbD,QAAkC,IAAbA,OAAsB,EAASA,EAAS,oBACpF,MAAO,CACHL,SACAF,QACAS,SAAUrB,EAAyBsB,EAA4BR,EAAOG,YACtEM,aAAcvB,EAAyBsB,EAA4BR,EAAOI,MAC1EM,eAAgBxB,EAAyBsB,EAA4BR,EAAOE,MAC5EI,eAAgBA,GAAkB,KAClCK,oBAAkC,OAAbN,QAAkC,IAAbA,OAAsB,EAASA,EAAS,2BAA6B,KAEvH,CACA,SAASG,EAA4BI,GACjC,OAAyB,IAAlBtB,OAAOsB,EAClB,CACA,SAASX,EAAYH,GACjB,MAAOe,EAAWC,EAASC,GAAajB,EAAM5O,MAAM,KACpD,QAAkB9D,IAAdyT,QACYzT,IAAZ0T,QACc1T,IAAd2T,EAEA,OADA9K,EAAU,kDACH,KAEX,IACI,MAAM+K,GAAU,QAAaF,GAC7B,OAAKE,EAIE3E,KAAK4E,MAAMD,IAHd/K,EAAU,uCACH,KAOf,CAHA,MAAOZ,GAEH,OADAY,EAAU,2CAAkD,OAANZ,QAAoB,IAANA,OAAe,EAASA,EAAE6L,YACvF,IACX,CACJ,CAIA,SAASC,EAAgBrB,GACrB,MAAMsB,EAAcnB,EAAYH,GAIhC,OAHAtI,EAAQ4J,EAAa,kBACrB5J,EAAmC,qBAApB4J,EAAYlB,IAAqB,kBAChD1I,EAAmC,qBAApB4J,EAAYhB,IAAqB,kBACzCd,OAAO8B,EAAYlB,KAAOZ,OAAO8B,EAAYhB,IACxD;;;;;;;;;;;;;;;;GAkBAtE,eAAeuF,EAAqB1B,EAAMpC,EAAS+D,GAAkB,GACjE,GAAIA,EACA,OAAO/D,EAEX,IACI,aAAaA,CASjB,CAPA,MAAOlI,GAMH,MALIA,aAAa,MAAiBkM,EAAkBlM,IAC5CsK,EAAK9I,KAAK2K,cAAgB7B,SACpBA,EAAK9I,KAAK4K,UAGlBpM,CACV,CACJ,CACA,SAASkM,GAAkB,KAAEzK,IACzB,MAAiB,uBAATA,GACK,4BAATA,CACR;;;;;;;;;;;;;;;;GAkBA,MAAM4K,EACFrH,YAAYsF,GACRzN,KAAKyN,KAAOA,EACZzN,KAAKyP,WAAY,EAKjBzP,KAAK0P,QAAU,KACf1P,KAAK2P,aAAe,GACxB,CACAC,SACQ5P,KAAKyP,YAGTzP,KAAKyP,WAAY,EACjBzP,KAAK6P,WACT,CACAC,QACS9P,KAAKyP,YAGVzP,KAAKyP,WAAY,EACI,OAAjBzP,KAAK0P,SACLlD,aAAaxM,KAAK0P,SAE1B,CACAK,YAAYC,GACR,IAAI3I,EACJ,GAAI2I,EAAU,CACV,MAAMC,EAAWjQ,KAAK2P,aAEtB,OADA3P,KAAK2P,aAAepH,KAAKC,IAAwB,EAApBxI,KAAK2P,aAAkB,MAC7CM,CACX,CACK,CAEDjQ,KAAK2P,aAAe,IACpB,MAAMO,EAA8D,QAAnD7I,EAAKrH,KAAKyN,KAAK0C,gBAAgB3B,sBAAmC,IAAPnH,EAAgBA,EAAK,EAC3F4I,EAAWC,EAAU/C,KAAKiD,MAAQ,IACxC,OAAO7H,KAAK8H,IAAI,EAAGJ,EACvB,CACJ,CACAJ,SAASG,GAAW,GAChB,IAAKhQ,KAAKyP,UAEN,OAEJ,MAAMQ,EAAWjQ,KAAK+P,YAAYC,GAClChQ,KAAK0P,QAAUnD,YAAW3C,gBAChB5J,KAAKsQ,WAAW,GACvBL,EACP,CACArG,kBACI,UACU5J,KAAKyN,KAAKI,YAAW,EAS/B,CAPA,MAAO1K,GAMH,YAHI,iCADO,OAANA,QAAoB,IAANA,OAAe,EAASA,EAAEyB,OAEzC5E,KAAK6P,UAAwB,GAGrC,CACA7P,KAAK6P,UACT;;;;;;;;;;;;;;;;GAmBJ,MAAMU,EACFpI,YAAYqI,EAAWC,GACnBzQ,KAAKwQ,UAAYA,EACjBxQ,KAAKyQ,YAAcA,EACnBzQ,KAAK0Q,iBACT,CACAA,kBACI1Q,KAAK2Q,eAAiB3D,EAAyBhN,KAAKyQ,aACpDzQ,KAAK4Q,aAAe5D,EAAyBhN,KAAKwQ,UACtD,CACAK,MAAMC,GACF9Q,KAAKwQ,UAAYM,EAASN,UAC1BxQ,KAAKyQ,YAAcK,EAASL,YAC5BzQ,KAAK0Q,iBACT,CACAK,SACI,MAAO,CACHP,UAAWxQ,KAAKwQ,UAChBC,YAAazQ,KAAKyQ,YAE1B;;;;;;;;;;;;;;;;GAmBJ7G,eAAeoH,EAAqBvD,GAChC,IAAIpG,EACJ,MAAM1C,EAAO8I,EAAK9I,KACZsM,QAAgBxD,EAAKI,aACrB3C,QAAiBiE,EAAqB1B,EAAMV,EAAepI,EAAM,CAAEsM,aACzE3L,EAAqB,OAAb4F,QAAkC,IAAbA,OAAsB,EAASA,EAASgG,MAAMlT,OAAQ2G,EAAM,kBACzF,MAAMwM,EAAcjG,EAASgG,MAAM,GACnCzD,EAAK2D,sBAAsBD,GAC3B,MAAME,GAA2D,QAAvChK,EAAK8J,EAAYG,wBAAqC,IAAPjK,OAAgB,EAASA,EAAGrJ,QAC/FuT,GAAoBJ,EAAYG,kBAChC,GACAE,EAAeC,GAAkBhE,EAAK+D,aAAcH,GAMpDK,EAAiBjE,EAAKkE,YACtBC,IAAmBnE,EAAKf,OAASyE,EAAYU,iBAAoC,OAAjBL,QAA0C,IAAjBA,OAA0B,EAASA,EAAaxT,QACzI2T,IAAeD,GAAyBE,EACxCE,EAAU,CACZC,IAAKZ,EAAYa,QACjBC,YAAad,EAAYc,aAAe,KACxCC,SAAUf,EAAYgB,UAAY,KAClCzF,MAAOyE,EAAYzE,OAAS,KAC5B0F,cAAejB,EAAYiB,gBAAiB,EAC5CzF,YAAawE,EAAYxE,aAAe,KACxChD,SAAUwH,EAAYxH,UAAY,KAClC6H,eACAV,SAAU,IAAIP,EAAaY,EAAYX,UAAWW,EAAYV,aAC9DkB,eAEJtO,OAAO0B,OAAO0I,EAAMqE,EACxB,CAQAlI,eAAeyI,EAAO5E,GAClB,MAAME,GAAe,QAAmBF,SAClCuD,EAAqBrD,SAIrBA,EAAahJ,KAAK2N,sBAAsB3E,GAC9CA,EAAahJ,KAAK4N,0BAA0B5E,EAChD,CACA,SAAS8D,GAAkBe,EAAUC,GACjC,MAAMC,EAAUF,EAASG,QAAOC,IAAMH,EAAQI,MAAKC,GAAKA,EAAEC,aAAeH,EAAEG,eAC3E,MAAO,IAAIL,KAAYD,EAC3B,CACA,SAASlB,GAAoByB,GACzB,OAAOA,EAAU5S,KAAKiH,IAClB,IAAI,WAAE0L,GAAe1L,EAAIhB,EAAWpD,EAAOoE,EAAI,CAAC,eAChD,MAAO,CACH0L,aACAhB,IAAK1L,EAAS4M,OAAS,GACvBhB,YAAa5L,EAAS4L,aAAe,KACrCvF,MAAOrG,EAASqG,OAAS,KACzBC,YAAatG,EAASsG,aAAe,KACrCuF,SAAU7L,EAAS8L,UAAY,KAClC,GAET;;;;;;;;;;;;;;;;GAkBAvI,eAAesJ,GAAgBvO,EAAMwO,GACjC,MAAMjI,QAAiBlB,EAA+BrF,EAAM,CAAC,GAAGiF,UAC5D,MAAMK,GAAO,QAAY,CACrB,WAAc,gBACd,cAAiBkJ,IAClB/N,MAAM,IACH,aAAEgO,EAAY,OAAE7I,GAAW5F,EAAK+D,OAChCG,EAAM8B,EAAgBhG,EAAMyO,EAAc,YAAkC,OAAO7I,KACnFC,QAAgB7F,EAAK8F,wBAE3B,OADAD,EAAQ,gBAAgD,oCACjDzB,EAAcK,OAAdL,CAAsBF,EAAK,CAC9BiB,OAAQ,OACRU,UACAP,QACF,IAGN,MAAO,CACHoJ,YAAanI,EAASoI,aACtBC,UAAWrI,EAASsI,WACpBL,aAAcjI,EAASuI,cAE/B;;;;;;;;;;;;;;;;GAwBA,MAAMC,GACFvL,cACInI,KAAKmT,aAAe,KACpBnT,KAAKqT,YAAc,KACnBrT,KAAKwO,eAAiB,IAC1B,CACImF,gBACA,OAAS3T,KAAKwO,gBACVrB,KAAKiD,MAAQpQ,KAAKwO,eAAiB,GAC3C,CACAoF,yBAAyB1I,GACrB5F,EAAQ4F,EAAS+F,QAAS,kBAC1B3L,EAAoC,qBAArB4F,EAAS+F,QAAyB,kBACjD3L,EAAyC,qBAA1B4F,EAASiI,aAA8B,kBACtD,MAAMI,EAAY,cAAerI,GAA0C,qBAAvBA,EAASqI,UACvDnG,OAAOlC,EAASqI,WAChBtE,EAAgB/D,EAAS+F,SAC/BjR,KAAK6T,0BAA0B3I,EAAS+F,QAAS/F,EAASiI,aAAcI,EAC5E,CACA3J,eAAejF,EAAM+I,GAAe,GAEhC,OADApI,GAAStF,KAAKqT,aAAerT,KAAKmT,aAAcxO,EAAM,sBACjD+I,IAAgB1N,KAAKqT,aAAgBrT,KAAK2T,UAG3C3T,KAAKmT,oBACCnT,KAAK8T,QAAQnP,EAAM3E,KAAKmT,cACvBnT,KAAKqT,aAET,KANIrT,KAAKqT,WAOpB,CACAU,oBACI/T,KAAKmT,aAAe,IACxB,CACAvJ,cAAcjF,EAAMqP,GAChB,MAAM,YAAEX,EAAW,aAAEF,EAAY,UAAEI,SAAoBL,GAAgBvO,EAAMqP,GAC7EhU,KAAK6T,0BAA0BR,EAAaF,EAAc/F,OAAOmG,GACrE,CACAM,0BAA0BR,EAAaF,EAAcc,GACjDjU,KAAKmT,aAAeA,GAAgB,KACpCnT,KAAKqT,YAAcA,GAAe,KAClCrT,KAAKwO,eAAiBrB,KAAKiD,MAAuB,IAAf6D,CACvC,CACAjL,gBAAgB/D,EAASiP,GACrB,MAAM,aAAEf,EAAY,YAAEE,EAAW,eAAE7E,GAAmB0F,EAChDC,EAAU,IAAIT,GAmBpB,OAlBIP,IACA7N,EAAgC,kBAAjB6N,EAA2B,iBAAqD,CAC3FlO,YAEJkP,EAAQhB,aAAeA,GAEvBE,IACA/N,EAA+B,kBAAhB+N,EAA0B,iBAAqD,CAC1FpO,YAEJkP,EAAQd,YAAcA,GAEtB7E,IACAlJ,EAAkC,kBAAnBkJ,EAA6B,iBAAqD,CAC7FvJ,YAEJkP,EAAQ3F,eAAiBA,GAEtB2F,CACX,CACApD,SACI,MAAO,CACHoC,aAAcnT,KAAKmT,aACnBE,YAAarT,KAAKqT,YAClB7E,eAAgBxO,KAAKwO,eAE7B,CACA4F,QAAQjE,GACJnQ,KAAKqT,YAAclD,EAAgBkD,YACnCrT,KAAKmT,aAAehD,EAAgBgD,aACpCnT,KAAKwO,eAAiB2B,EAAgB3B,cAC1C,CACA6F,SACI,OAAOhR,OAAO0B,OAAO,IAAI2O,GAAmB1T,KAAK+Q,SACrD,CACAuD,kBACI,OAAO9O,EAAU,kBACrB;;;;;;;;;;;;;;;;GAmBJ,SAAS+O,GAAwBhP,EAAWN,GACxCK,EAA6B,kBAAdC,GAA+C,qBAAdA,EAA2B,iBAAqD,CAAEN,WACtI,CACA,MAAMuP,GACFrM,YAAYd,GACR,IAAI,IAAE0K,EAAG,KAAEpN,EAAI,gBAAEwL,GAAoB9I,EAAIoN,EAAMxR,EAAOoE,EAAI,CAAC,MAAO,OAAQ,oBAE1ErH,KAAK+S,WAAa,WAClB/S,KAAK0U,iBAAmB,IAAIlF,EAAiBxP,MAC7CA,KAAK2U,eAAiB,KACtB3U,KAAK4U,eAAiB,KACtB5U,KAAK+R,IAAMA,EACX/R,KAAK2E,KAAOA,EACZ3E,KAAKmQ,gBAAkBA,EACvBnQ,KAAKqT,YAAclD,EAAgBkD,YACnCrT,KAAKiS,YAAcwC,EAAIxC,aAAe,KACtCjS,KAAK0M,MAAQ+H,EAAI/H,OAAS,KAC1B1M,KAAKoS,cAAgBqC,EAAIrC,gBAAiB,EAC1CpS,KAAK2M,YAAc8H,EAAI9H,aAAe,KACtC3M,KAAKkS,SAAWuC,EAAIvC,UAAY,KAChClS,KAAK2R,YAAc8C,EAAI9C,cAAe,EACtC3R,KAAK2J,SAAW8K,EAAI9K,UAAY,KAChC3J,KAAKwR,aAAeiD,EAAIjD,aAAe,IAAIiD,EAAIjD,cAAgB,GAC/DxR,KAAK8Q,SAAW,IAAIP,EAAakE,EAAIjE,gBAAatV,EAAWuZ,EAAIhE,kBAAevV,EACpF,CACA0O,iBAAiB8D,GACb,MAAM2F,QAAoBlE,EAAqBnP,KAAMA,KAAKmQ,gBAAgB0E,SAAS7U,KAAK2E,KAAM+I,IAO9F,OANApI,EAAQ+N,EAAarT,KAAK2E,KAAM,kBAC5B3E,KAAKqT,cAAgBA,IACrBrT,KAAKqT,YAAcA,QACbrT,KAAK2E,KAAK2N,sBAAsBtS,MACtCA,KAAK2E,KAAK4N,0BAA0BvS,OAEjCqT,CACX,CACA7F,iBAAiBE,GACb,OAAOF,EAAiBxN,KAAM0N,EAClC,CACA2E,SACI,OAAOA,EAAOrS,KAClB,CACAoU,QAAQ3G,GACAzN,OAASyN,IAGbnI,EAAQtF,KAAK+R,MAAQtE,EAAKsE,IAAK/R,KAAK2E,KAAM,kBAC1C3E,KAAKiS,YAAcxE,EAAKwE,YACxBjS,KAAKkS,SAAWzE,EAAKyE,SACrBlS,KAAK0M,MAAQe,EAAKf,MAClB1M,KAAKoS,cAAgB3E,EAAK2E,cAC1BpS,KAAK2M,YAAcc,EAAKd,YACxB3M,KAAK2R,YAAclE,EAAKkE,YACxB3R,KAAK2J,SAAW8D,EAAK9D,SACrB3J,KAAKwR,aAAe/D,EAAK+D,aAAapR,KAAI0U,GAAazR,OAAO0B,OAAO,CAAC,EAAG+P,KACzE9U,KAAK8Q,SAASD,MAAMpD,EAAKqD,UACzB9Q,KAAKmQ,gBAAgBiE,QAAQ3G,EAAK0C,iBACtC,CACAkE,OAAO1P,GACH,OAAO,IAAI6P,GAASnR,OAAO0B,OAAO1B,OAAO0B,OAAO,CAAC,EAAG/E,MAAO,CAAE2E,OAAMwL,gBAAiBnQ,KAAKmQ,gBAAgBkE,WAC7G,CACAU,UAAUC,GAEN1P,GAAStF,KAAK4U,eAAgB5U,KAAK2E,KAAM,kBACzC3E,KAAK4U,eAAiBI,EAClBhV,KAAK2U,iBACL3U,KAAKoR,sBAAsBpR,KAAK2U,gBAChC3U,KAAK2U,eAAiB,KAE9B,CACAvD,sBAAsB0D,GACd9U,KAAK4U,eACL5U,KAAK4U,eAAeE,GAIpB9U,KAAK2U,eAAiBG,CAE9B,CACAG,yBACIjV,KAAK0U,iBAAiB9E,QAC1B,CACAsF,wBACIlV,KAAK0U,iBAAiB5E,OAC1B,CACAlG,+BAA+BsB,EAAUmH,GAAS,GAC9C,IAAI8C,GAAkB,EAClBjK,EAAS+F,SACT/F,EAAS+F,UAAYjR,KAAKmQ,gBAAgBkD,cAC1CrT,KAAKmQ,gBAAgByD,yBAAyB1I,GAC9CiK,GAAkB,GAElB9C,SACMrB,EAAqBhR,YAEzBA,KAAK2E,KAAK2N,sBAAsBtS,MAClCmV,GACAnV,KAAK2E,KAAK4N,0BAA0BvS,KAE5C,CACA4J,eACI,MAAMqH,QAAgBjR,KAAK6N,aAK3B,aAJMsB,EAAqBnP,KAAM8M,EAAc9M,KAAK2E,KAAM,CAAEsM,aAC5DjR,KAAKmQ,gBAAgB4D,oBAGd/T,KAAK2E,KAAK4K,SACrB,CACAwB,SACI,OAAO1N,OAAO0B,OAAO1B,OAAO0B,OAAO,CAAEgN,IAAK/R,KAAK+R,IAAKrF,MAAO1M,KAAK0M,YAASxR,EAAWkX,cAAepS,KAAKoS,cAAeH,YAAajS,KAAKiS,kBAAe/W,EAAWyW,YAAa3R,KAAK2R,YAAaO,SAAUlS,KAAKkS,eAAYhX,EAAWyR,YAAa3M,KAAK2M,kBAAezR,EAAWyO,SAAU3J,KAAK2J,eAAYzO,EAAWsW,aAAcxR,KAAKwR,aAAapR,KAAI0U,GAAazR,OAAO0B,OAAO,CAAC,EAAG+P,KAAa3E,gBAAiBnQ,KAAKmQ,gBAAgBY,SAG5aqE,iBAAkBpV,KAAKoV,kBAAoBpV,KAAK8Q,SAASC,UAAW,CAEpExG,OAAQvK,KAAK2E,KAAK+D,OAAO6B,OAAQtF,QAASjF,KAAK2E,KAAKO,MAC5D,CACIiO,mBACA,OAAOnT,KAAKmQ,gBAAgBgD,cAAgB,EAChD,CACAnK,iBAAiBrE,EAAMuP,GACnB,IAAI7M,EAAIgO,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAChC,MAAM1D,EAA4C,QAA7B5K,EAAK6M,EAAOjC,mBAAgC,IAAP5K,EAAgBA,OAAKnM,EACzEwR,EAAgC,QAAvB2I,EAAKnB,EAAOxH,aAA0B,IAAP2I,EAAgBA,OAAKna,EAC7DyR,EAA4C,QAA7B2I,EAAKpB,EAAOvH,mBAAgC,IAAP2I,EAAgBA,OAAKpa,EACzEgX,EAAsC,QAA1BqD,EAAKrB,EAAOhC,gBAA6B,IAAPqD,EAAgBA,OAAKra,EACnEyO,EAAsC,QAA1B6L,EAAKtB,EAAOvK,gBAA6B,IAAP6L,EAAgBA,OAAKta,EACnEka,EAAsD,QAAlCK,EAAKvB,EAAOkB,wBAAqC,IAAPK,EAAgBA,OAAKva,EACnFsV,EAAwC,QAA3BkF,EAAKxB,EAAO1D,iBAA8B,IAAPkF,EAAgBA,OAAKxa,EACrEuV,EAA4C,QAA7BkF,EAAKzB,EAAOzD,mBAAgC,IAAPkF,EAAgBA,OAAKza,GACzE,IAAE6W,EAAG,cAAEK,EAAa,YAAET,EAAW,aAAEH,EAAcrB,gBAAiByF,GAA4B1B,EACpG5O,EAAQyM,GAAO6D,EAAyBjR,EAAM,kBAC9C,MAAMwL,EAAkBuD,GAAgBmC,SAAS7V,KAAKkF,KAAM0Q,GAC5DtQ,EAAuB,kBAARyM,EAAkBpN,EAAM,kBACvC4P,GAAwBtC,EAAatN,EAAKO,MAC1CqP,GAAwB7H,EAAO/H,EAAKO,MACpCI,EAAiC,mBAAlB8M,EAA6BzN,EAAM,kBAClDW,EAA+B,mBAAhBqM,EAA2BhN,EAAM,kBAChD4P,GAAwB5H,EAAahI,EAAKO,MAC1CqP,GAAwBrC,EAAUvN,EAAKO,MACvCqP,GAAwB5K,EAAUhF,EAAKO,MACvCqP,GAAwBa,EAAkBzQ,EAAKO,MAC/CqP,GAAwB/D,EAAW7L,EAAKO,MACxCqP,GAAwB9D,EAAa9L,EAAKO,MAC1C,MAAMuI,EAAO,IAAI+G,GAAS,CACtBzC,MACApN,OACA+H,QACA0F,gBACAH,cACAN,cACAO,WACAvF,cACAhD,WACAwG,kBACAK,YACAC,gBAQJ,OANIe,GAAgBzK,MAAMC,QAAQwK,KAC9B/D,EAAK+D,aAAeA,EAAapR,KAAI0U,GAAazR,OAAO0B,OAAO,CAAC,EAAG+P,MAEpEM,IACA3H,EAAK2H,iBAAmBA,GAErB3H,CACX,CAMAzE,kCAAkCrE,EAAMmR,EAAiBnE,GAAc,GACnE,MAAMxB,EAAkB,IAAIuD,GAC5BvD,EAAgByD,yBAAyBkC,GAEzC,MAAMrI,EAAO,IAAI+G,GAAS,CACtBzC,IAAK+D,EAAgB9D,QACrBrN,OACAwL,kBACAwB,gBAIJ,aADMX,EAAqBvD,GACpBA,CACX;;;;;;;;;;;;;;;;GAmBJ,MAAMsI,GACF5N,cACInI,KAAKgW,KAAO,OACZhW,KAAKiW,QAAU,CAAC,CACpB,CACArM,qBACI,OAAO,CACX,CACAA,WAAWU,EAAK4L,GACZlW,KAAKiW,QAAQ3L,GAAO4L,CACxB,CACAtM,WAAWU,GACP,MAAM4L,EAAQlW,KAAKiW,QAAQ3L,GAC3B,YAAiBpP,IAAVgb,EAAsB,KAAOA,CACxC,CACAtM,cAAcU,UACHtK,KAAKiW,QAAQ3L,EACxB,CACA6L,aAAaC,EAAMC,GAGnB,CACAC,gBAAgBF,EAAMC,GAGtB,EAEJN,GAAoBC,KAAO,OAM3B,MAAMO,GAAsBR;;;;;;;;;;;;;;;;GAkB5B,SAASS,GAAoBlM,EAAKC,EAAQtF,GACtC,MAAO,YAA6CqF,KAAOC,KAAUtF,GACzE,CACA,MAAMwR,GACFtO,YAAYtB,EAAalC,EAAM+R,GAC3B1W,KAAK6G,YAAcA,EACnB7G,KAAK2E,KAAOA,EACZ3E,KAAK0W,QAAUA,EACf,MAAM,OAAEhO,EAAM,KAAExD,GAASlF,KAAK2E,KAC9B3E,KAAK2W,YAAcH,GAAoBxW,KAAK0W,QAAShO,EAAO6B,OAAQrF,GACpElF,KAAK4W,mBAAqBJ,GAAoB,cAA8C9N,EAAO6B,OAAQrF,GAC3GlF,KAAK6W,kBAAoBlS,EAAKmS,gBAAgBC,KAAKpS,GACnD3E,KAAK6G,YAAYsP,aAAanW,KAAK2W,YAAa3W,KAAK6W,kBACzD,CACAG,eAAevJ,GACX,OAAOzN,KAAK6G,YAAYoQ,KAAKjX,KAAK2W,YAAalJ,EAAKsD,SACxD,CACAnH,uBACI,MAAMsN,QAAalX,KAAK6G,YAAYsQ,KAAKnX,KAAK2W,aAC9C,OAAOO,EAAO1C,GAAS4C,UAAUpX,KAAK2E,KAAMuS,GAAQ,IACxD,CACAG,oBACI,OAAOrX,KAAK6G,YAAYyQ,QAAQtX,KAAK2W,YACzC,CACAY,6BACI,OAAOvX,KAAK6G,YAAYoQ,KAAKjX,KAAK4W,mBAAoB5W,KAAK6G,YAAYmP,KAC3E,CACApM,qBAAqB4N,GACjB,GAAIxX,KAAK6G,cAAgB2Q,EACrB,OAEJ,MAAMlI,QAAoBtP,KAAKyX,iBAG/B,aAFMzX,KAAKqX,oBACXrX,KAAK6G,YAAc2Q,EACflI,EACOtP,KAAKgX,eAAe1H,QAD/B,CAGJ,CACAoI,SACI1X,KAAK6G,YAAYyP,gBAAgBtW,KAAK2W,YAAa3W,KAAK6W,kBAC5D,CACA7N,oBAAoBrE,EAAMgT,EAAsBjB,EAAU,YACtD,IAAKiB,EAAqB3Z,OACtB,OAAO,IAAIyY,GAAuB3Q,EAAayQ,IAAsB5R,EAAM+R,GAG/E,MAAMkB,SAA+BzM,QAAQ0M,IAAIF,EAAqBvX,KAAIwJ,MAAO/C,IAC7E,SAAUA,EAAYiR,eAClB,OAAOjR,CAEK,MACf8L,QAAO9L,GAAeA,IAE3B,IAAIkR,EAAsBH,EAAsB,IAC5C9R,EAAayQ,IACjB,MAAMjM,EAAMkM,GAAoBE,EAAS/R,EAAK+D,OAAO6B,OAAQ5F,EAAKO,MAGlE,IAAI8S,EAAgB,KAIpB,IAAK,MAAMnR,KAAe8Q,EACtB,IACI,MAAMT,QAAarQ,EAAYsQ,KAAK7M,GACpC,GAAI4M,EAAM,CACN,MAAMzJ,EAAO+G,GAAS4C,UAAUzS,EAAMuS,GAClCrQ,IAAgBkR,IAChBC,EAAgBvK,GAEpBsK,EAAsBlR,EACtB,KACJ,CAES,CAAb,MAAOQ,GAAM,CAIjB,MAAM4Q,EAAqBL,EAAsBjF,QAAOlT,GAAKA,EAAEyY,wBAE/D,OAAKH,EAAoBG,uBACpBD,EAAmBja,QAGxB+Z,EAAsBE,EAAmB,GACrCD,SAGMD,EAAoBd,KAAK3M,EAAK0N,EAAcjH,gBAIhD5F,QAAQ0M,IAAIF,EAAqBvX,KAAIwJ,MAAO/C,IAC9C,GAAIA,IAAgBkR,EAChB,UACUlR,EAAYyQ,QAAQhN,EAEjB,CAAb,MAAOjD,GAAM,CACjB,KAEG,IAAIoP,GAAuBsB,EAAqBpT,EAAM+R,IAlBlD,IAAID,GAAuBsB,EAAqBpT,EAAM+R,EAmBrE;;;;;;;;;;;;;;;;GAsBJ,SAASyB,GAAgB/W,GACrB,MAAM/B,EAAK+B,EAAUxC,cACrB,GAAIS,EAAG+Y,SAAS,WAAa/Y,EAAG+Y,SAAS,SAAW/Y,EAAG+Y,SAAS,UAC5D,MAAO,QAEN,GAAIC,GAAYhZ,GAEjB,MAAO,WAEN,GAAIA,EAAG+Y,SAAS,SAAW/Y,EAAG+Y,SAAS,YACxC,MAAO,KAEN,GAAI/Y,EAAG+Y,SAAS,SACjB,MAAO,OAEN,GAAIE,GAAWjZ,GAChB,MAAO,UAEN,GAAIA,EAAG+Y,SAAS,SACjB,MAAO,OAEN,GAAIG,GAAclZ,GAEnB,MAAO,aAEN,GAAImZ,GAASnZ,GAEd,MAAO,QAEN,GAAIoZ,GAAUpZ,GACf,MAAO,SAEN,IAAKA,EAAG+Y,SAAS,YAAcM,GAAarZ,MAC5CA,EAAG+Y,SAAS,SACb,MAAO,SAEN,GAAIO,GAAWtZ,GAEhB,MAAO,UAEN,CAED,MAAMuZ,EAAK,kCACLjZ,EAAUyB,EAAUxB,MAAMgZ,GAChC,GAA2E,KAA1D,OAAZjZ,QAAgC,IAAZA,OAAqB,EAASA,EAAQ3B,QAC3D,OAAO2B,EAAQ,EAEvB,CACA,MAAO,OACX,CACA,SAAS2Y,GAAWjZ,GAAK,WACrB,MAAO,aAAaa,KAAKb,EAC7B,CACA,SAASoZ,GAAUrX,GAAY,WAC3B,MAAM/B,EAAK+B,EAAUxC,cACrB,OAAQS,EAAG+Y,SAAS,aACf/Y,EAAG+Y,SAAS,aACZ/Y,EAAG+Y,SAAS,YACZ/Y,EAAG+Y,SAAS,UACrB,CACA,SAASM,GAAarZ,GAAK,WACvB,MAAO,WAAWa,KAAKb,EAC3B,CACA,SAASgZ,GAAYhZ,GAAK,WACtB,MAAO,YAAYa,KAAKb,EAC5B,CACA,SAASsZ,GAAWtZ,GAAK,WACrB,MAAO,WAAWa,KAAKb,EAC3B,CACA,SAASkZ,GAAclZ,GAAK,WACxB,MAAO,cAAca,KAAKb,EAC9B,CACA,SAASmZ,GAASnZ,GAAK,WACnB,MAAO,SAASa,KAAKb,EACzB,CACA,SAASwZ,GAAOxZ,GAAK,WACjB,MAAQ,oBAAoBa,KAAKb,IAC5B,aAAaa,KAAKb,IAAO,UAAUa,KAAKb,EACjD,CAKA,SAASyZ,GAAiBzZ,GAAK,WAC3B,IAAIgI,EACJ,OAAOwR,GAAOxZ,OAAsC,QAA3BgI,EAAKpM,OAAOkG,iBAA8B,IAAPkG,OAAgB,EAASA,EAAG0R,WAC5F,CACA,SAASC,KACL,OAAO,WAAoC,KAA1BC,SAASC,YAC9B,CACA,SAASC,GAAiB9Z,GAAK,WAE3B,OAAQwZ,GAAOxZ,IACXsZ,GAAWtZ,IACXmZ,GAASnZ,IACTkZ,GAAclZ,IACd,iBAAiBa,KAAKb,IACtBgZ,GAAYhZ,EACpB,CACA,SAAS+Z,KACL,IAGI,SAAUne,QAAUA,SAAWA,OAAOoe,IAI1C,CAFA,MAAOlW,GACH,OAAO,CACX,CACJ;;;;;;;;;;;;;;;;GAqBA,SAASmW,GAAkBC,EAAgBC,EAAa,IACpD,IAAIC,EACJ,OAAQF,GACJ,IAAK,UAEDE,EAAmBtB,IAAgB,WACnC,MACJ,IAAK,SAIDsB,EAAmB,GAAGtB,IAAgB,cAAYoB,IAClD,MACJ,QACIE,EAAmBF,EAE3B,MAAMG,EAAqBF,EAAWxb,OAChCwb,EAAWG,KAAK,KAChB,mBACN,MAAO,GAAGF,YAAgE,QAAeC,GAC7F;;;;;;;;;;;;;;;;GAkBA,MAAME,GACFzR,YAAYxD,GACR3E,KAAK2E,KAAOA,EACZ3E,KAAK6Z,MAAQ,EACjB,CACAC,aAAa9E,EAAU+E,GAGnB,MAAMC,EAAmBvM,GAAS,IAAItC,SAAQ,CAAC8O,EAAS3N,KACpD,IACI,MAAMvJ,EAASiS,EAASvH,GAGxBwM,EAAQlX,EAKZ,CAHA,MAAOI,GAEHmJ,EAAOnJ,EACX,KAGJ6W,EAAgBD,QAAUA,EAC1B/Z,KAAK6Z,MAAMK,KAAKF,GAChB,MAAMG,EAAQna,KAAK6Z,MAAM7b,OAAS,EAClC,MAAO,KAGHgC,KAAK6Z,MAAMM,GAAS,IAAMhP,QAAQ8O,SAAS,CAEnD,CACArQ,oBAAoBwQ,GAChB,GAAIpa,KAAK2E,KAAK2K,cAAgB8K,EAC1B,OAIJ,MAAMC,EAAe,GACrB,IACI,IAAK,MAAMC,KAAuBta,KAAK6Z,YAC7BS,EAAoBF,GAEtBE,EAAoBP,SACpBM,EAAaH,KAAKI,EAAoBP,QAmBlD,CAfA,MAAO5W,GAGHkX,EAAaE,UACb,IAAK,MAAMR,KAAWM,EAClB,IACIN,GAIJ,CAFA,MAAO1N,GAEP,CAEJ,MAAMrM,KAAK2E,KAAKU,cAAc3B,OAAO,gBAAmD,CACpF8W,gBAAuB,OAANrX,QAAoB,IAANA,OAAe,EAASA,EAAE0B,SAEjE,CACJ;;;;;;;;;;;;;;;;GAmBJ,MAAM4V,GACFtS,YAAYhC,EAAKuU,EAA0BhS,GACvC1I,KAAKmG,IAAMA,EACXnG,KAAK0a,yBAA2BA,EAChC1a,KAAK0I,OAASA,EACd1I,KAAKsP,YAAc,KACnBtP,KAAK2a,eAAiB,KACtB3a,KAAK4a,WAAazP,QAAQ8O,UAC1Bja,KAAK6a,sBAAwB,IAAIC,GAAa9a,MAC9CA,KAAK+a,oBAAsB,IAAID,GAAa9a,MAC5CA,KAAKgb,iBAAmB,IAAIpB,GAAoB5Z,MAChDA,KAAKib,aAAe,KACpBjb,KAAKkb,2BAA4B,EAGjClb,KAAK+K,kBAAmB,EACxB/K,KAAKmb,gBAAiB,EACtBnb,KAAKob,UAAW,EAChBpb,KAAKqb,uBAAyB,KAC9Brb,KAAKsb,uBAAyB,KAC9Btb,KAAKqF,cAAgBxB,EAIrB7D,KAAKub,qBAAkBrgB,EACvB8E,KAAK0K,aAAe,KACpB1K,KAAK2J,SAAW,KAChB3J,KAAKwb,SAAW,CAAEC,mCAAmC,GACrDzb,KAAKwZ,WAAa,GAClBxZ,KAAKkF,KAAOiB,EAAIjB,KAChBlF,KAAK0b,cAAgBhT,EAAOiT,gBAChC,CACAzU,2BAA2ByQ,EAAsBxQ,GAiC7C,OAhCIA,IACAnH,KAAKsb,uBAAyBxV,EAAaqB,IAI/CnH,KAAKqb,uBAAyBrb,KAAK6Z,OAAMjQ,UACrC,IAAIvC,EAAIgO,EACR,IAAIrV,KAAKob,WAGTpb,KAAK4b,yBAA2BnF,GAAuB/S,OAAO1D,KAAM2X,IAChE3X,KAAKob,UAAT,CAKA,GAA2C,QAAtC/T,EAAKrH,KAAKsb,8BAA2C,IAAPjU,OAAgB,EAASA,EAAGwU,uBAE3E,UACU7b,KAAKsb,uBAAuBQ,YAAY9b,KAIlD,CAFA,MAAOmD,GAEP,OAEEnD,KAAK+b,sBAAsB5U,GACjCnH,KAAKub,iBAA+C,QAA3BlG,EAAKrV,KAAKsP,mBAAgC,IAAP+F,OAAgB,EAASA,EAAGtD,MAAQ,KAC5F/R,KAAKob,WAGTpb,KAAKmb,gBAAiB,EAjBtB,CAiB0B,IAEvBnb,KAAKqb,sBAChB,CAIAzR,wBACI,GAAI5J,KAAKob,SACL,OAEJ,MAAM3N,QAAazN,KAAKgc,oBAAoBvE,iBAC5C,OAAKzX,KAAKsP,aAAgB7B,EAKtBzN,KAAKsP,aAAe7B,GAAQzN,KAAKsP,YAAYyC,MAAQtE,EAAKsE,KAE1D/R,KAAKic,aAAa7H,QAAQ3G,cAGpBzN,KAAKsP,YAAYzB,yBAKrB7N,KAAKkc,mBAAmBzO,GAAqC,QAfnE,CAgBJ,CACA7D,4BAA4BzC,GACxB,IAAIE,EAEJ,MAAM8U,QAA8Bnc,KAAKgc,oBAAoBvE,iBAC7D,IAAI2E,EAAoBD,EACpBE,GAAyB,EAC7B,GAAIlV,GAAyBnH,KAAK0I,OAAO4T,WAAY,OAC3Ctc,KAAKuc,sCACX,MAAMC,EAAmD,QAA5BnV,EAAKrH,KAAKib,oBAAiC,IAAP5T,OAAgB,EAASA,EAAG+N,iBACvFqH,EAA0C,OAAtBL,QAAoD,IAAtBA,OAA+B,EAASA,EAAkBhH,iBAC5GrS,QAAe/C,KAAK0c,kBAAkBvV,GAKtCqV,GAAuBA,IAAwBC,KACrC,OAAX1Z,QAA8B,IAAXA,OAAoB,EAASA,EAAO0K,QACxD2O,EAAoBrZ,EAAO0K,KAC3B4O,GAAyB,EAEjC,CAEA,IAAKD,EACD,OAAOpc,KAAK2c,uBAAuB,MAEvC,IAAKP,EAAkBhH,iBAAkB,CAGrC,GAAIiH,EACA,UACUrc,KAAKgb,iBAAiB4B,cAAcR,EAO9C,CALA,MAAOjZ,GACHiZ,EAAoBD,EAGpBnc,KAAKsb,uBAAuBuB,wBAAwB7c,MAAM,IAAMmL,QAAQmB,OAAOnJ,IACnF,CAEJ,OAAIiZ,EACOpc,KAAK8c,+BAA+BV,GAGpCpc,KAAK2c,uBAAuB,KAE3C,CAMA,OALArX,EAAQtF,KAAKsb,uBAAwBtb,KAAM,wBACrCA,KAAKuc,sCAIPvc,KAAKib,cACLjb,KAAKib,aAAa7F,mBAAqBgH,EAAkBhH,iBAClDpV,KAAK2c,uBAAuBP,GAEhCpc,KAAK8c,+BAA+BV,EAC/C,CACAxS,wBAAwBmT,GAgBpB,IAAIha,EAAS,KACb,IAGIA,QAAe/C,KAAKsb,uBAAuB0B,oBAAoBhd,KAAM+c,GAAkB,EAM3F,CAJA,MAAO5Z,SAGGnD,KAAKid,iBAAiB,KAChC,CACA,OAAOla,CACX,CACA6G,qCAAqC6D,GACjC,UACUuD,EAAqBvD,EAS/B,CAPA,MAAOtK,GACH,GACI,iCADO,OAANA,QAAoB,IAANA,OAAe,EAASA,EAAEyB,MAIzC,OAAO5E,KAAK2c,uBAAuB,KAE3C,CACA,OAAO3c,KAAK2c,uBAAuBlP,EACvC,CACAyP,oBACIld,KAAK0K,aAAe5C,GACxB,CACA8B,gBACI5J,KAAKob,UAAW,CACpB,CACAxR,wBAAwBuT,GAGpB,MAAM1P,EAAO0P,GACP,QAAmBA,GACnB,KAIN,OAHI1P,GACAnI,EAAQmI,EAAK9I,KAAK+D,OAAO6B,SAAWvK,KAAK0I,OAAO6B,OAAQvK,KAAM,sBAE3DA,KAAKkc,mBAAmBzO,GAAQA,EAAK4G,OAAOrU,MACvD,CACA4J,yBAAyB6D,EAAM2P,GAA2B,GACtD,IAAIpd,KAAKob,SAST,OANI3N,GACAnI,EAAQtF,KAAK2J,WAAa8D,EAAK9D,SAAU3J,KAAM,sBAE9Cod,SACKpd,KAAKgb,iBAAiB4B,cAAcnP,GAEvCzN,KAAK6Z,OAAMjQ,gBACR5J,KAAK2c,uBAAuBlP,GAClCzN,KAAKqd,qBAAqB,GAElC,CACAzT,gBASI,aAPM5J,KAAKgb,iBAAiB4B,cAAc,OAEtC5c,KAAKsd,4BAA8Btd,KAAKsb,+BAClCtb,KAAKid,iBAAiB,MAIzBjd,KAAKkc,mBAAmB,MAAqC,EACxE,CACAqB,eAAe1W,GACX,OAAO7G,KAAK6Z,OAAMjQ,gBACR5J,KAAKgc,oBAAoBuB,eAAezX,EAAae,GAAa,GAEhF,CACA2W,kBACI,OAAOxd,KAAKgc,oBAAoBnV,YAAYmP,IAChD,CACA/O,gBAAgBnC,GACZ9E,KAAKqF,cAAgB,IAAI,KAAa,OAAQ,WAAYP,IAC9D,CACA2Y,mBAAmBC,EAAgBtZ,EAAOuZ,GACtC,OAAO3d,KAAK4d,sBAAsB5d,KAAK6a,sBAAuB6C,EAAgBtZ,EAAOuZ,EACzF,CACAE,uBAAuB7I,EAAU+E,GAC7B,OAAO/Z,KAAKgb,iBAAiBlB,aAAa9E,EAAU+E,EACxD,CACA+D,iBAAiBJ,EAAgBtZ,EAAOuZ,GACpC,OAAO3d,KAAK4d,sBAAsB5d,KAAK+a,oBAAqB2C,EAAgBtZ,EAAOuZ,EACvF,CACA5M,SACI,IAAI1J,EACJ,MAAO,CACHkD,OAAQvK,KAAK0I,OAAO6B,OACpB+R,WAAYtc,KAAK0I,OAAO4T,WACxBrX,QAASjF,KAAKkF,KACdoK,YAA0C,QAA5BjI,EAAKrH,KAAKic,oBAAiC,IAAP5U,OAAgB,EAASA,EAAG0J,SAEtF,CACAnH,uBAAuB6D,EAAMtG,GACzB,MAAM4W,QAAwB/d,KAAKuc,oCAAoCpV,GACvE,OAAgB,OAATsG,EACDsQ,EAAgB1G,oBAChB0G,EAAgB/G,eAAevJ,EACzC,CACA7D,0CAA0CzC,GACtC,IAAKnH,KAAKsd,2BAA4B,CAClC,MAAMU,EAAY7W,GAAyBrB,EAAaqB,IACpDnH,KAAKsb,uBACThW,EAAQ0Y,EAAUhe,KAAM,kBACxBA,KAAKsd,iCAAmC7G,GAAuB/S,OAAO1D,KAAM,CAAC8F,EAAakY,EAASC,uBAAwB,gBAC3Hje,KAAKib,mBACKjb,KAAKsd,2BAA2B7F,gBAC9C,CACA,OAAOzX,KAAKsd,0BAChB,CACA1T,yBAAyBsU,GACrB,IAAI7W,EAAIgO,EAMR,OAHIrV,KAAKmb,sBACCnb,KAAK6Z,OAAMjQ,eAEa,QAA5BvC,EAAKrH,KAAKic,oBAAiC,IAAP5U,OAAgB,EAASA,EAAG+N,oBAAsB8I,EACjFle,KAAKic,cAEkB,QAA5B5G,EAAKrV,KAAKib,oBAAiC,IAAP5F,OAAgB,EAASA,EAAGD,oBAAsB8I,EACjFle,KAAKib,aAET,IACX,CACArR,4BAA4B6D,GACxB,GAAIA,IAASzN,KAAKsP,YACd,OAAOtP,KAAK6Z,OAAMjQ,SAAY5J,KAAK2c,uBAAuBlP,IAElE,CAEA8E,0BAA0B9E,GAClBA,IAASzN,KAAKsP,aACdtP,KAAKqd,qBAEb,CACAjH,OACI,MAAO,GAAGpW,KAAK0I,OAAO4T,cAActc,KAAK0I,OAAO6B,UAAUvK,KAAKkF,MACnE,CACA+P,yBACIjV,KAAKkb,2BAA4B,EAC7Blb,KAAKsP,aACLtP,KAAKic,aAAahH,wBAE1B,CACAC,wBACIlV,KAAKkb,2BAA4B,EAC7Blb,KAAKsP,aACLtP,KAAKic,aAAa/G,uBAE1B,CAEI+G,mBACA,OAAOjc,KAAKsP,WAChB,CACA+N,sBACI,IAAIhW,EAAIgO,EACR,IAAKrV,KAAKmb,eACN,OAEJnb,KAAK+a,oBAAoBoD,KAAKne,KAAKsP,aACnC,MAAM8O,EAA4F,QAA9E/I,EAAiC,QAA3BhO,EAAKrH,KAAKsP,mBAAgC,IAAPjI,OAAgB,EAASA,EAAG0K,WAAwB,IAAPsD,EAAgBA,EAAK,KAC3HrV,KAAKub,kBAAoB6C,IACzBpe,KAAKub,gBAAkB6C,EACvBpe,KAAK6a,sBAAsBsD,KAAKne,KAAKsP,aAE7C,CACAsO,sBAAsBS,EAAcX,EAAgBtZ,EAAOuZ,GACvD,GAAI3d,KAAKob,SACL,MAAO,OAEX,MAAMkD,EAA+B,oBAAnBZ,EACZA,EACAA,EAAeS,KAAKpH,KAAK2G,GACzBrS,EAAUrL,KAAKmb,eACfhQ,QAAQ8O,UACRja,KAAKqb,uBAKX,OAJA/V,EAAQ+F,EAASrL,KAAM,kBAGvBqL,EAAQkT,MAAK,IAAMD,EAAGte,KAAKsP,eACG,oBAAnBoO,EACAW,EAAaG,YAAYd,EAAgBtZ,EAAOuZ,GAGhDU,EAAaG,YAAYd,EAExC,CAMA9T,6BAA6B6D,GACrBzN,KAAKsP,aAAetP,KAAKsP,cAAgB7B,GACzCzN,KAAKic,aAAa/G,wBAElBzH,GAAQzN,KAAKkb,2BACbzN,EAAKwH,yBAETjV,KAAKsP,YAAc7B,EACfA,QACMzN,KAAKgc,oBAAoBhF,eAAevJ,SAGxCzN,KAAKgc,oBAAoB3E,mBAEvC,CACAwC,MAAM4E,GAIF,OADAze,KAAK4a,WAAa5a,KAAK4a,WAAW2D,KAAKE,EAAQA,GACxCze,KAAK4a,UAChB,CACIoB,0BAEA,OADA1W,EAAQtF,KAAK4b,mBAAoB5b,KAAM,kBAChCA,KAAK4b,kBAChB,CACA8C,cAAcC,GACLA,IAAa3e,KAAKwZ,WAAWpB,SAASuG,KAG3C3e,KAAKwZ,WAAWU,KAAKyE,GAGrB3e,KAAKwZ,WAAWoF,OAChB5e,KAAK0b,cAAgBpC,GAAkBtZ,KAAK0I,OAAO6Q,eAAgBvZ,KAAK6e,kBAC5E,CACAA,iBACI,OAAO7e,KAAKwZ,UAChB,CACA5P,8BACI,IAAIvC,EAEJ,MAAMmD,EAAU,CACZ,CAAC,oBAAuDxK,KAAK0b,eAE7D1b,KAAKmG,IAAIQ,QAAQmY,QACjBtU,EAAQ,oBAAwDxK,KAAKmG,IAAIQ,QAAQmY,OAGrF,MAAMC,QAGE,QAHyB1X,EAAKrH,KAAK0a,yBACtCnU,aAAa,CACdyY,UAAU,WACS,IAAP3X,OAAgB,EAASA,EAAG4X,uBAI5C,OAHIF,IACAvU,EAAQ,qBAA0DuU,GAE/DvU,CACX,EAQJ,SAAS0U,GAAUva,GACf,OAAO,QAAmBA,EAC9B,CAEA,MAAMmW,GACF3S,YAAYxD,GACR3E,KAAK2E,KAAOA,EACZ3E,KAAKmf,SAAW,KAChBnf,KAAKwe,aAAc,SAAgBW,GAAanf,KAAKmf,SAAWA,GACpE,CACIhB,WAEA,OADA7Y,EAAQtF,KAAKmf,SAAUnf,KAAK2E,KAAM,kBAC3B3E,KAAKmf,SAAShB,KAAKpH,KAAK/W,KAAKmf,SACxC,EAyBJ,SAASC,GAAoBza,EAAMkE,EAAKlC,GACpC,MAAM0Y,EAAeH,GAAUva,GAC/BW,EAAQ+Z,EAAatU,iBAAkBsU,EAAc,0BACrD/Z,EAAQ,eAAepF,KAAK2I,GAAMwW,EAAc,2BAChD,MAAMC,KAAiC,OAAZ3Y,QAAgC,IAAZA,OAAqB,EAASA,EAAQ2Y,iBAC/E3X,EAAW4X,GAAgB1W,IAC3B,KAAEoD,EAAI,KAAEuT,GAASC,GAAmB5W,GACpC6W,EAAmB,OAATF,EAAgB,GAAK,IAAIA,IAEzCH,EAAa3W,OAAOE,SAAW,CAAEC,IAAK,GAAGlB,MAAasE,IAAOyT,MAC7DL,EAAa7D,SAASC,mCAAoC,EAC1D4D,EAAa1E,eAAiBtX,OAAOsc,OAAO,CACxC1T,OACAuT,OACA7X,SAAUA,EAAS5I,QAAQ,IAAK,IAChC4H,QAAStD,OAAOsc,OAAO,CAAEL,sBAExBA,GACDM,IAER,CACA,SAASL,GAAgB1W,GACrB,MAAMgX,EAAchX,EAAInK,QAAQ,KAChC,OAAOmhB,EAAc,EAAI,GAAKhX,EAAIiX,OAAO,EAAGD,EAAc,EAC9D,CACA,SAASJ,GAAmB5W,GACxB,MAAMlB,EAAW4X,GAAgB1W,GAC3BkX,EAAY,mBAAmBhgB,KAAK8I,EAAIiX,OAAOnY,EAAS3J,SAC9D,IAAK+hB,EACD,MAAO,CAAE9T,KAAM,GAAIuT,KAAM,MAE7B,MAAMQ,EAAcD,EAAU,GAAG/gB,MAAM,KAAKihB,OAAS,GAC/CC,EAAgB,qBAAqBngB,KAAKigB,GAChD,GAAIE,EAAe,CACf,MAAMjU,EAAOiU,EAAc,GAC3B,MAAO,CAAEjU,OAAMuT,KAAMW,GAAUH,EAAYF,OAAO7T,EAAKjO,OAAS,IACpE,CACK,CACD,MAAOiO,EAAMuT,GAAQQ,EAAYhhB,MAAM,KACvC,MAAO,CAAEiN,OAAMuT,KAAMW,GAAUX,GACnC,CACJ,CACA,SAASW,GAAUT,GACf,IAAKA,EACD,OAAO,KAEX,MAAMF,EAAOpS,OAAOsS,GACpB,OAAIrS,MAAMmS,GACC,KAEJA,CACX,CACA,SAASI,KACL,SAASQ,IACL,MAAMC,EAAKpH,SAASqH,cAAc,KAC5BC,EAAMF,EAAGG,MACfH,EAAGI,UACC,oEACJF,EAAIG,SAAW,QACfH,EAAII,MAAQ,OACZJ,EAAIK,gBAAkB,UACtBL,EAAIM,OAAS,qBACbN,EAAIO,MAAQ,UACZP,EAAIQ,OAAS,MACbR,EAAIS,KAAO,MACXT,EAAIU,OAAS,MACbV,EAAIW,OAAS,QACbX,EAAIY,UAAY,SAChBd,EAAGe,UAAUC,IAAI,6BACjBpI,SAAShP,KAAKqX,YAAYjB,EAC9B,CACuB,qBAAZkB,SAAmD,oBAAjBA,QAAQC,MACjDD,QAAQC,KAAK,gIAIK,qBAAXvmB,QAA8C,qBAAbge,WACZ,YAAxBA,SAASwI,WACTxmB,OAAOymB,iBAAiB,mBAAoBtB,GAG5CA,IAGZ;;;;;;;;;;;;;;;;GA0BA,MAAMuB,GAEFxZ,YAOA4K,EASA6O,GACI5hB,KAAK+S,WAAaA,EAClB/S,KAAK4hB,aAAeA,CACxB,CAMA7Q,SACI,OAAOvL,EAAU,kBACrB,CAEAqc,oBAAoBC,GAChB,OAAOtc,EAAU,kBACrB,CAEAuc,eAAeD,EAAOE,GAClB,OAAOxc,EAAU,kBACrB,CAEAyc,6BAA6BH,GACzB,OAAOtc,EAAU,kBACrB;;;;;;;;;;;;;;;;GAmBJoE,eAAesY,GAAcvd,EAAM+E,GAC/B,OAAOG,EAAmBlF,EAAM,OAA8B,6BAA4D8E,EAAmB9E,EAAM+E,GACvJ,CACAE,eAAeuY,GAAoBxd,EAAM+E,GACrC,OAAOG,EAAmBlF,EAAM,OAA8B,sBAAuD+E,EACzH;;;;;;;;;;;;;;;;;AAqBAE,eAAewY,GAAmBzd,EAAM+E,GACpC,OAAOoC,EAAsBnH,EAAM,OAA8B,kCAAwE8E,EAAmB9E,EAAM+E,GACtK,CACAE,eAAeyY,GAAY1d,EAAM+E,GAC7B,OAAOG,EAAmBlF,EAAM,OAA8B,2BAAyD8E,EAAmB9E,EAAM+E,GACpJ,CAIAE,eAAe0Y,GAAyB3d,EAAM+E,GAC1C,OAAO2Y,GAAY1d,EAAM+E,EAC7B;;;;;;;;;;;;;;;;;AAwBAE,eAAe2Y,GAAsB5d,EAAM+E,GACvC,OAAOoC,EAAsBnH,EAAM,OAA8B,mCAA2E8E,EAAmB9E,EAAM+E,GACzK,CACAE,eAAe4Y,GAA8B7d,EAAM+E,GAC/C,OAAOoC,EAAsBnH,EAAM,OAA8B,mCAA2E8E,EAAmB9E,EAAM+E,GACzK;;;;;;;;;;;;;;;;GA4BA,MAAM+Y,WAA4Bd,GAE9BxZ,YAEAua,EAEAC,EAAWf,EAEXgB,EAAY,MACRC,MAAM,WAAsCjB,GAC5C5hB,KAAK0iB,OAASA,EACd1iB,KAAK2iB,UAAYA,EACjB3iB,KAAK4iB,UAAYA,CACrB,CAEA5Z,6BAA6B0D,EAAOoW,GAChC,OAAO,IAAIL,GAAoB/V,EAAOoW,EAAU,WACpD,CAEA9Z,yBAAyB0D,EAAOqW,EAASpZ,EAAW,MAChD,OAAO,IAAI8Y,GAAoB/V,EAAOqW,EAAS,YAA2CpZ,EAC9F,CAEAoH,SACI,MAAO,CACHrE,MAAO1M,KAAK0iB,OACZI,SAAU9iB,KAAK2iB,UACff,aAAc5hB,KAAK4hB,aACnBjY,SAAU3J,KAAK4iB,UAEvB,CASA5Z,gBAAgBuC,GACZ,MAAMyX,EAAsB,kBAATzX,EAAoBpB,KAAK4E,MAAMxD,GAAQA,EAC1D,IAAa,OAARyX,QAAwB,IAARA,OAAiB,EAASA,EAAItW,SAAmB,OAARsW,QAAwB,IAARA,OAAiB,EAASA,EAAIF,UAAW,CACnH,GAAyB,aAArBE,EAAIpB,aACJ,OAAO5hB,KAAKijB,sBAAsBD,EAAItW,MAAOsW,EAAIF,UAEhD,GAAyB,cAArBE,EAAIpB,aACT,OAAO5hB,KAAKkjB,kBAAkBF,EAAItW,MAAOsW,EAAIF,SAAUE,EAAIrZ,SAEnE,CACA,OAAO,IACX,CAEAC,0BAA0BjF,GACtB,OAAQ3E,KAAK4hB,cACT,IAAK,WACD,OAAOQ,GAAmBzd,EAAM,CAC5Bwe,mBAAmB,EACnBzW,MAAO1M,KAAK0iB,OACZI,SAAU9iB,KAAK2iB,YAEvB,IAAK,YACD,OAAOJ,GAAsB5d,EAAM,CAC/B+H,MAAO1M,KAAK0iB,OACZK,QAAS/iB,KAAK2iB,YAEtB,QACIte,EAAMM,EAAM,kBAExB,CAEAiF,qBAAqBjF,EAAMsM,GACvB,OAAQjR,KAAK4hB,cACT,IAAK,WACD,OAAOO,GAAoBxd,EAAM,CAC7BsM,UACAkS,mBAAmB,EACnBzW,MAAO1M,KAAK0iB,OACZI,SAAU9iB,KAAK2iB,YAEvB,IAAK,YACD,OAAOH,GAA8B7d,EAAM,CACvCsM,UACAvE,MAAO1M,KAAK0iB,OACZK,QAAS/iB,KAAK2iB,YAEtB,QACIte,EAAMM,EAAM,kBAExB,CAEAsd,6BAA6Btd,GACzB,OAAO3E,KAAK6hB,oBAAoBld,EACpC;;;;;;;;;;;;;;;;GAmBJiF,eAAewZ,GAAcze,EAAM+E,GAC/B,OAAOoC,EAAsBnH,EAAM,OAA8B,6BAA8D8E,EAAmB9E,EAAM+E,GAC5J;;;;;;;;;;;;;;;;GAkBA,MAAM2Z,GAAoB,mBAS1B,MAAMC,WAAwB3B,GAC1BxZ,cACI0a,SAASU,WACTvjB,KAAKwjB,aAAe,IACxB,CAEAxa,mBAAmBkB,GACf,MAAMuZ,EAAO,IAAIH,GAAgBpZ,EAAO6I,WAAY7I,EAAO0X,cAyB3D,OAxBI1X,EAAO+G,SAAW/G,EAAOmJ,aAErBnJ,EAAO+G,UACPwS,EAAKxS,QAAU/G,EAAO+G,SAEtB/G,EAAOmJ,cACPoQ,EAAKpQ,YAAcnJ,EAAOmJ,aAG1BnJ,EAAOwZ,QAAUxZ,EAAOsZ,eACxBC,EAAKC,MAAQxZ,EAAOwZ,OAEpBxZ,EAAOsZ,eACPC,EAAKD,aAAetZ,EAAOsZ,eAG1BtZ,EAAOyZ,YAAczZ,EAAO0Z,kBAEjCH,EAAKpQ,YAAcnJ,EAAOyZ,WAC1BF,EAAKI,OAAS3Z,EAAO0Z,kBAGrBvf,EAAM,kBAEHof,CACX,CAEA1S,SACI,MAAO,CACHE,QAASjR,KAAKiR,QACdoC,YAAarT,KAAKqT,YAClBwQ,OAAQ7jB,KAAK6jB,OACbH,MAAO1jB,KAAK0jB,MACZF,aAAcxjB,KAAKwjB,aACnBzQ,WAAY/S,KAAK+S,WACjB6O,aAAc5hB,KAAK4hB,aAE3B,CAUA5Y,gBAAgBuC,GACZ,MAAMyX,EAAsB,kBAATzX,EAAoBpB,KAAK4E,MAAMxD,GAAQA,GACpD,WAAEwH,EAAU,aAAE6O,GAAiBoB,EAAKze,EAAOtB,EAAO+f,EAAK,CAAC,aAAc,iBAC5E,IAAKjQ,IAAe6O,EAChB,OAAO,KAEX,MAAM6B,EAAO,IAAIH,GAAgBvQ,EAAY6O,GAM7C,OALA6B,EAAKxS,QAAU1M,EAAK0M,cAAW/V,EAC/BuoB,EAAKpQ,YAAc9O,EAAK8O,kBAAenY,EACvCuoB,EAAKI,OAAStf,EAAKsf,OACnBJ,EAAKC,MAAQnf,EAAKmf,MAClBD,EAAKD,aAAejf,EAAKif,cAAgB,KAClCC,CACX,CAEA5B,oBAAoBld,GAChB,MAAM+E,EAAU1J,KAAK8jB,eACrB,OAAOV,GAAcze,EAAM+E,EAC/B,CAEAqY,eAAepd,EAAMsM,GACjB,MAAMvH,EAAU1J,KAAK8jB,eAErB,OADApa,EAAQuH,QAAUA,EACXmS,GAAcze,EAAM+E,EAC/B,CAEAuY,6BAA6Btd,GACzB,MAAM+E,EAAU1J,KAAK8jB,eAErB,OADApa,EAAQqa,YAAa,EACdX,GAAcze,EAAM+E,EAC/B,CACAoa,eACI,MAAMpa,EAAU,CACZsa,WAAYX,GACZF,mBAAmB,GAEvB,GAAInjB,KAAKwjB,aACL9Z,EAAQ8Z,aAAexjB,KAAKwjB,iBAE3B,CACD,MAAMS,EAAW,CAAC,EACdjkB,KAAKiR,UACLgT,EAAS,YAAcjkB,KAAKiR,SAE5BjR,KAAKqT,cACL4Q,EAAS,gBAAkBjkB,KAAKqT,aAEhCrT,KAAK6jB,SACLI,EAAS,sBAAwBjkB,KAAK6jB,QAE1CI,EAAS,cAAgBjkB,KAAK+S,WAC1B/S,KAAK0jB,QAAU1jB,KAAKwjB,eACpBS,EAAS,SAAWjkB,KAAK0jB,OAE7Bha,EAAQua,UAAW,QAAYA,EACnC,CACA,OAAOva,CACX;;;;;;;;;;;;;;;;GAmBJE,eAAesa,GAA0Bvf,EAAM+E,GAC3C,OAAOG,EAAmBlF,EAAM,OAA8B,oCAA2E8E,EAAmB9E,EAAM+E,GACtK,CACAE,eAAeua,GAAwBxf,EAAM+E,GACzC,OAAOoC,EAAsBnH,EAAM,OAA8B,qCAA+E8E,EAAmB9E,EAAM+E,GAC7K,CACAE,eAAewa,GAAsBzf,EAAM+E,GACvC,MAAMwB,QAAiBY,EAAsBnH,EAAM,OAA8B,qCAA+E8E,EAAmB9E,EAAM+E,IACzL,GAAIwB,EAASmZ,eACT,MAAM7Y,EAAiB7G,EAAM,2CAAkFuG,GAEnH,OAAOA,CACX,CACA,MAAMoZ,GAA8C,CAChD,CAAC,kBAAoD,kBAEzD1a,eAAe2a,GAA6B5f,EAAM+E,GAC9C,MAAM8a,EAAanhB,OAAO0B,OAAO1B,OAAO0B,OAAO,CAAC,EAAG2E,GAAU,CAAE+a,UAAW,WAC1E,OAAO3Y,EAAsBnH,EAAM,OAA8B,qCAA+E8E,EAAmB9E,EAAM6f,GAAaF,GAC1L;;;;;;;;;;;;;;;;GAuBA,MAAMI,WAA4B/C,GAC9BxZ,YAAY+B,GACR2Y,MAAM,QAAgC,SACtC7iB,KAAKkK,OAASA,CAClB,CAEAlB,yBAAyB2b,EAAgBC,GACrC,OAAO,IAAIF,GAAoB,CAAEC,iBAAgBC,oBACrD,CAEA5b,0BAA0B2D,EAAa0X,GACnC,OAAO,IAAIK,GAAoB,CAAE/X,cAAa0X,kBAClD,CAEAxC,oBAAoBld,GAChB,OAAOwf,GAAwBxf,EAAM3E,KAAK6kB,2BAC9C,CAEA9C,eAAepd,EAAMsM,GACjB,OAAOmT,GAAsBzf,EAAMtB,OAAO0B,OAAO,CAAEkM,WAAWjR,KAAK6kB,4BACvE,CAEA5C,6BAA6Btd,GACzB,OAAO4f,GAA6B5f,EAAM3E,KAAK6kB,2BACnD,CAEAA,2BACI,MAAM,eAAER,EAAc,YAAE1X,EAAW,eAAEgY,EAAc,iBAAEC,GAAqB5kB,KAAKkK,OAC/E,OAAIma,GAAkB1X,EACX,CAAE0X,iBAAgB1X,eAEtB,CACHmY,YAAaH,EACb/f,KAAMggB,EAEd,CAEA7T,SACI,MAAMiS,EAAM,CACRjQ,WAAY/S,KAAK+S,YAcrB,OAZI/S,KAAKkK,OAAOyC,cACZqW,EAAIrW,YAAc3M,KAAKkK,OAAOyC,aAE9B3M,KAAKkK,OAAOma,iBACZrB,EAAIqB,eAAiBrkB,KAAKkK,OAAOma,gBAEjCrkB,KAAKkK,OAAO0a,mBACZ5B,EAAI4B,iBAAmB5kB,KAAKkK,OAAO0a,kBAEnC5kB,KAAKkK,OAAOya,iBACZ3B,EAAI2B,eAAiB3kB,KAAKkK,OAAOya,gBAE9B3B,CACX,CAEAha,gBAAgBuC,GACQ,kBAATA,IACPA,EAAOpB,KAAK4E,MAAMxD,IAEtB,MAAM,eAAEoZ,EAAc,iBAAEC,EAAgB,YAAEjY,EAAW,eAAE0X,GAAmB9Y,EAC1E,OAAKqZ,GACAD,GACAhY,GACA0X,EAGE,IAAIK,GAAoB,CAC3BC,iBACAC,mBACAjY,cACA0X,mBANO,IAQf;;;;;;;;;;;;;;;;GAwBJ,SAASU,GAAUC,GACf,OAAQA,GACJ,IAAK,eACD,MAAO,gBACX,IAAK,gBACD,MAAO,iBACX,IAAK,SACD,MAAO,eACX,IAAK,cACD,MAAO,eACX,IAAK,uBACD,MAAO,0BACX,IAAK,6BACD,MAAO,gCACX,QACI,OAAO,KAEnB,CAMA,SAASC,GAAcpc,GACnB,MAAMqc,GAAO,SAAkB,QAAmBrc,IAAM,QAElDsc,EAAiBD,GACjB,SAAkB,QAAmBA,IAAO,gBAC5C,KAEAE,GAAc,SAAkB,QAAmBvc,IAAM,gBACzDwc,EAAoBD,GACpB,SAAkB,QAAmBA,IAAc,QACnD,KACN,OAAOC,GAAqBD,GAAeD,GAAkBD,GAAQrc,CACzE,CAOA,MAAMyc,GAOFnd,YAAYod,GACR,IAAIle,EAAIgO,EAAIC,EAAIC,EAAIC,EAAIC,EACxB,MAAM+P,GAAe,SAAkB,QAAmBD,IACpDhb,EAAoE,QAA1DlD,EAAKme,EAAa,iBAAuD,IAAPne,EAAgBA,EAAK,KACjGzC,EAAgE,QAAxDyQ,EAAKmQ,EAAa,kBAAqD,IAAPnQ,EAAgBA,EAAK,KAC7FoP,EAAYM,GAAgE,QAArDzP,EAAKkQ,EAAa,eAAkD,IAAPlQ,EAAgBA,EAAK,MAE/GhQ,EAAQiF,GAAU3F,GAAQ6f,EAAW,kBACrCzkB,KAAKuK,OAASA,EACdvK,KAAKykB,UAAYA,EACjBzkB,KAAK4E,KAAOA,EACZ5E,KAAKylB,YAAmF,QAApElQ,EAAKiQ,EAAa,sBAAiE,IAAPjQ,EAAgBA,EAAK,KACrHvV,KAAK0K,aAAsF,QAAtE8K,EAAKgQ,EAAa,uBAAmE,IAAPhQ,EAAgBA,EAAK,KACxHxV,KAAK2J,SAA0E,QAA9D8L,EAAK+P,EAAa,mBAA2D,IAAP/P,EAAgBA,EAAK,IAChH,CAUAzM,iBAAiBkc,GACb,MAAMK,EAAaN,GAAcC,GACjC,IACI,OAAO,IAAII,GAAcC,EAI7B,CAFA,MAAOle,GACH,OAAO,IACX,CACJ;;;;;;;;;;;;;;;;;AAiCJ,MAAMqe,GACFvd,cAIInI,KAAK+S,WAAa2S,GAAkBC,WACxC,CAmBA3c,kBAAkB0D,EAAOoW,GACrB,OAAOL,GAAoBQ,sBAAsBvW,EAAOoW,EAC5D,CAuBA9Z,0BAA0B0D,EAAOkZ,GAC7B,MAAMC,EAAgBP,GAAcQ,UAAUF,GAE9C,OADAtgB,EAAQugB,EAAe,kBAChBpD,GAAoBS,kBAAkBxW,EAAOmZ,EAAcjhB,KAAMihB,EAAclc,SAC1F,EAKJ+b,GAAkBC,YAAc,WAIhCD,GAAkBK,8BAAgC,WAIlDL,GAAkBM,0BAA4B;;;;;;;;;;;;;;;;;AAyB9C,MAAMC,GAMF9d,YAAY4K,GACR/S,KAAK+S,WAAaA,EAElB/S,KAAKkmB,oBAAsB,KAE3BlmB,KAAKmmB,iBAAmB,CAAC,CAC7B,CAMAC,mBAAmB1b,GACf1K,KAAKkmB,oBAAsBxb,CAC/B,CAWA2b,oBAAoBC,GAEhB,OADAtmB,KAAKmmB,iBAAmBG,EACjBtmB,IACX,CAIAumB,sBACI,OAAOvmB,KAAKmmB,gBAChB;;;;;;;;;;;;;;;;GAyBJ,MAAMK,WAA0BP,GAC5B9d,cACI0a,SAASU,WAETvjB,KAAKymB,OAAS,EAClB,CAMAC,SAASC,GAKL,OAHK3mB,KAAKymB,OAAOrO,SAASuO,IACtB3mB,KAAKymB,OAAOvM,KAAKyM,GAEd3mB,IACX,CAIA4mB,YACI,MAAO,IAAI5mB,KAAKymB,OACpB;;;;;;;;;;;;;;;;;AAsLJ,MAAMI,WAA6BL,GAC/Bre,cACI0a,MAAM,eACV,CAaA7Z,kBAAkBqK,GACd,OAAOiQ,GAAgBwD,YAAY,CAC/B/T,WAAY8T,GAAqBlB,YACjC/D,aAAciF,GAAqBE,wBACnC1T,eAER,CAMArK,4BAA4Bge,GACxB,OAAOH,GAAqBI,2BAA2BD,EAC3D,CAOAhe,2BAA2B5E,GACvB,OAAOyiB,GAAqBI,2BAA4B7iB,EAAMwI,YAAc,CAAC,EACjF,CACA5D,mCAAoC6D,eAAgBqa,IAChD,IAAKA,KAAmB,qBAAsBA,GAC1C,OAAO,KAEX,IAAKA,EAAcC,iBACf,OAAO,KAEX,IACI,OAAON,GAAqBO,WAAWF,EAAcC,iBAIzD,CAFA,MAAO9f,GACH,OAAO,IACX,CACJ,EAGJwf,GAAqBE,wBAA0B,eAE/CF,GAAqBlB,YAAc;;;;;;;;;;;;;;;;;AA2DnC,MAAM0B,WAA2Bb,GAC7Bre,cACI0a,MAAM,cACN7iB,KAAK0mB,SAAS,UAClB,CAcA1d,kBAAkBiI,EAASoC,GACvB,OAAOiQ,GAAgBwD,YAAY,CAC/B/T,WAAYsU,GAAmB1B,YAC/B/D,aAAcyF,GAAmBC,sBACjCrW,UACAoC,eAER,CAMArK,4BAA4Bge,GACxB,OAAOK,GAAmBJ,2BAA2BD,EACzD,CAOAhe,2BAA2B5E,GACvB,OAAOijB,GAAmBJ,2BAA4B7iB,EAAMwI,YAAc,CAAC,EAC/E,CACA5D,mCAAoC6D,eAAgBqa,IAChD,IAAKA,EACD,OAAO,KAEX,MAAM,aAAEK,EAAY,iBAAEJ,GAAqBD,EAC3C,IAAKK,IAAiBJ,EAElB,OAAO,KAEX,IACI,OAAOE,GAAmBD,WAAWG,EAAcJ,EAIvD,CAFA,MAAO9f,GACH,OAAO,IACX,CACJ,EAGJggB,GAAmBC,sBAAwB,aAE3CD,GAAmB1B,YAAc;;;;;;;;;;;;;;;;;AA4DjC,MAAM6B,WAA2BhB,GAC7Bre,cACI0a,MAAM,aACV,CAMA7Z,kBAAkBqK,GACd,OAAOiQ,GAAgBwD,YAAY,CAC/B/T,WAAYyU,GAAmB7B,YAC/B/D,aAAc4F,GAAmBC,sBACjCpU,eAER,CAMArK,4BAA4Bge,GACxB,OAAOQ,GAAmBP,2BAA2BD,EACzD,CAOAhe,2BAA2B5E,GACvB,OAAOojB,GAAmBP,2BAA4B7iB,EAAMwI,YAAc,CAAC,EAC/E,CACA5D,mCAAoC6D,eAAgBqa,IAChD,IAAKA,KAAmB,qBAAsBA,GAC1C,OAAO,KAEX,IAAKA,EAAcC,iBACf,OAAO,KAEX,IACI,OAAOK,GAAmBJ,WAAWF,EAAcC,iBAIvD,CAFA,MAAO9f,GACH,OAAO,IACX,CACJ,EAGJmgB,GAAmBC,sBAAwB,aAE3CD,GAAmB7B,YAAc;;;;;;;;;;;;;;;;;AAsOjC,MAAM+B,WAA4BlB,GAC9Bre,cACI0a,MAAM,cACV,CAOA7Z,kBAAkB4E,EAAOiW,GACrB,OAAOP,GAAgBwD,YAAY,CAC/B/T,WAAY2U,GAAoB/B,YAChC/D,aAAc8F,GAAoBC,uBAClChE,WAAY/V,EACZgW,iBAAkBC,GAE1B,CAMA7a,4BAA4Bge,GACxB,OAAOU,GAAoBT,2BAA2BD,EAC1D,CAOAhe,2BAA2B5E,GACvB,OAAOsjB,GAAoBT,2BAA4B7iB,EAAMwI,YAAc,CAAC,EAChF,CACA5D,mCAAoC6D,eAAgBqa,IAChD,IAAKA,EACD,OAAO,KAEX,MAAM,iBAAEC,EAAgB,iBAAEvD,GAAqBsD,EAC/C,IAAKC,IAAqBvD,EACtB,OAAO,KAEX,IACI,OAAO8D,GAAoBN,WAAWD,EAAkBvD,EAI5D,CAFA,MAAOvc,GACH,OAAO,IACX,CACJ;;;;;;;;;;;;;;;;;AAuBJuC,eAAege,GAAOjjB,EAAM+E,GACxB,OAAOoC,EAAsBnH,EAAM,OAA8B,sBAA8C8E,EAAmB9E,EAAM+E,GAC5I;;;;;;;;;;;;;;;;GAtBAge,GAAoBC,uBAAyB,cAE7CD,GAAoB/B,YAAc,cAsClC,MAAMkC,GACF1f,YAAY+B,GACRlK,KAAKyN,KAAOvD,EAAOuD,KACnBzN,KAAK+S,WAAa7I,EAAO6I,WACzB/S,KAAK6M,eAAiB3C,EAAO2C,eAC7B7M,KAAK8nB,cAAgB5d,EAAO4d,aAChC,CACA9e,kCAAkCrE,EAAMmjB,EAAehS,EAAiBnE,GAAc,GAClF,MAAMlE,QAAa+G,GAASuT,qBAAqBpjB,EAAMmR,EAAiBnE,GAClEoB,EAAaiV,GAAsBlS,GACnCmS,EAAW,IAAIJ,GAAmB,CACpCpa,OACAsF,aACAlG,eAAgBiJ,EAChBgS,kBAEJ,OAAOG,CACX,CACAjf,2BAA2ByE,EAAMqa,EAAe5c,SACtCuC,EAAKya,yBAAyBhd,GAAuB,GAC3D,MAAM6H,EAAaiV,GAAsB9c,GACzC,OAAO,IAAI2c,GAAmB,CAC1Bpa,OACAsF,aACAlG,eAAgB3B,EAChB4c,iBAER,EAEJ,SAASE,GAAsB9c,GAC3B,OAAIA,EAAS6H,WACF7H,EAAS6H,WAEhB,gBAAiB7H,EACV,QAEJ,IACX;;;;;;;;;;;;;;;;GA6BAtB,eAAeue,GAAkBxjB,GAC7B,IAAI0C,EACJ,MAAMgY,EAAeH,GAAUva,GAE/B,SADM0a,EAAahE,uBACqB,QAAnChU,EAAKgY,EAAa/P,mBAAgC,IAAPjI,OAAgB,EAASA,EAAGsK,YAExE,OAAO,IAAIkW,GAAmB,CAC1Bpa,KAAM4R,EAAa/P,YACnByD,WAAY,KACZ+U,cAAe,WAGvB,MAAM5c,QAAiB0c,GAAOvI,EAAc,CACxC8D,mBAAmB,IAEjB6D,QAAuBa,GAAmBE,qBAAqB1I,EAAc,SAAsCnU,GAAU,GAEnI,aADMmU,EAAanD,mBAAmB8K,EAAevZ,MAC9CuZ,CACX;;;;;;;;;;;;;;;;GAkBA,MAAMoB,WAAyB,KAC3BjgB,YAAYxD,EAAMP,EAAO0jB,EAAera,GACpC,IAAIpG,EACJwb,MAAMze,EAAMQ,KAAMR,EAAMS,SACxB7E,KAAK8nB,cAAgBA,EACrB9nB,KAAKyN,KAAOA,EAEZpK,OAAOglB,eAAeroB,KAAMooB,GAAiB9kB,WAC7CtD,KAAK4M,WAAa,CACd3H,QAASN,EAAKO,KACdyE,SAAmC,QAAxBtC,EAAK1C,EAAKgF,gBAA6B,IAAPtC,EAAgBA,OAAKnM,EAChE8Q,gBAAiB5H,EAAMwI,WAAWZ,gBAClC8b,gBAER,CACA9e,8BAA8BrE,EAAMP,EAAO0jB,EAAera,GACtD,OAAO,IAAI2a,GAAiBzjB,EAAMP,EAAO0jB,EAAera,EAC5D,EAEJ,SAAS6a,GAA8C3jB,EAAMmjB,EAAeV,EAAY3Z,GACpF,MAAM8a,EAAoC,mBAAlBT,EAClBV,EAAWnF,6BAA6Btd,GACxCyiB,EAAWvF,oBAAoBld,GACrC,OAAO4jB,EAAgBC,OAAMpkB,IACzB,GAAmB,oCAAfA,EAAMQ,KACN,MAAMwjB,GAAiBK,uBAAuB9jB,EAAMP,EAAO0jB,EAAera,GAE9E,MAAMrJ,CAAK,GAEnB;;;;;;;;;;;;;;;;GAkEAwF,eAAe8e,GAAQjb,EAAM2Z,EAAYhY,GAAkB,GACvD,MAAMlE,QAAiBiE,EAAqB1B,EAAM2Z,EAAWrF,eAAetU,EAAK9I,WAAY8I,EAAKI,cAAeuB,GACjH,OAAOyY,GAAmBc,cAAclb,EAAM,OAAiCvC,EACnF;;;;;;;;;;;;;;;;;AA0BAtB,eAAegf,GAAgBnb,EAAM2Z,EAAYhY,GAAkB,GAC/D,MAAM,KAAEzK,GAAS8I,EACXqa,EAAgB,iBACtB,IACI,MAAM5c,QAAiBiE,EAAqB1B,EAAM6a,GAA8C3jB,EAAMmjB,EAAeV,EAAY3Z,GAAO2B,GACxI9J,EAAQ4F,EAAS+F,QAAStM,EAAM,kBAChC,MAAMkkB,EAAS9a,EAAY7C,EAAS+F,SACpC3L,EAAQujB,EAAQlkB,EAAM,kBACtB,MAAQmkB,IAAK9W,GAAY6W,EAEzB,OADAvjB,EAAQmI,EAAKsE,MAAQC,EAASrN,EAAM,iBAC7BkjB,GAAmBc,cAAclb,EAAMqa,EAAe5c,EAQjE,CANA,MAAO/H,GAKH,KAHuD,yBAA5C,OAANA,QAAoB,IAANA,OAAe,EAASA,EAAEyB,OACzCP,EAAMM,EAAM,iBAEVxB,CACV,CACJ;;;;;;;;;;;;;;;;GAkBAyG,eAAemf,GAAsBpkB,EAAMyiB,EAAYhY,GAAkB,GACrE,MAAM0Y,EAAgB,SAChB5c,QAAiBod,GAA8C3jB,EAAMmjB,EAAeV,GACpFJ,QAAuBa,GAAmBE,qBAAqBpjB,EAAMmjB,EAAe5c,GAI1F,OAHKkE,SACKzK,EAAKuX,mBAAmB8K,EAAevZ,MAE1CuZ,CACX,CAYApd,eAAeof,GAAqBrkB,EAAMyiB,GACtC,OAAO2B,GAAsB7J,GAAUva,GAAOyiB,EAClD,CA6BAxd,eAAeqf,GAA6Bxb,EAAM2Z,GAC9C,OAAOwB,IAAgB,QAAmBnb,GAAO2Z,EACrD;;;;;;;;;;;;;;;;GAkBAxd,eAAesf,GAAwBvkB,EAAM+E,GACzC,OAAOoC,EAAsBnH,EAAM,OAA8B,qCAA+E8E,EAAmB9E,EAAM+E,GAC7K;;;;;;;;;;;;;;;;GAkCAE,eAAeuf,GAAsBxkB,EAAMykB,GACvC,MAAM/J,EAAeH,GAAUva,GACzBuG,QAAiBge,GAAwB7J,EAAc,CACzDzR,MAAOwb,EACPjG,mBAAmB,IAEjBM,QAAaoE,GAAmBE,qBAAqB1I,EAAc,SAAsCnU,GAE/G,aADMmU,EAAanD,mBAAmBuH,EAAKhW,MACpCgW,CACX;;;;;;;;;;;;;;;;GAkBA,MAAM4F,GACFlhB,YAAYmhB,EAAUpe,GAClBlL,KAAKspB,SAAWA,EAChBtpB,KAAK+R,IAAM7G,EAASqe,gBACpBvpB,KAAKwpB,eAAiB,IAAIrc,KAAKjC,EAASue,YAAYlc,cACpDvN,KAAKiS,YAAc/G,EAAS+G,WAChC,CACAjJ,2BAA2BrE,EAAM+kB,GAC7B,MAAI,cAAeA,EACRC,GAAyBC,oBAAoBjlB,EAAM+kB,GAEvDrlB,EAAMM,EAAM,iBACvB,EAEJ,MAAMglB,WAAiCN,GACnClhB,YAAY+C,GACR2X,MAAM,QAA8B3X,GACpClL,KAAK2M,YAAczB,EAAS2e,SAChC,CACA7gB,2BAA2B8Y,EAAO4H,GAC9B,OAAO,IAAIC,GAAyBD,EACxC;;;;;;;;;;;;;;;;GAmBJ,SAASI,GAAgCnlB,EAAM+E,EAASqgB,GACpD,IAAI1iB,EACJ/B,GAA2C,QAAjC+B,EAAK0iB,EAAmBlhB,WAAwB,IAAPxB,OAAgB,EAASA,EAAGrJ,QAAU,EAAG2G,EAAM,wBAClGW,EAAwD,qBAAzCykB,EAAmBC,mBAC9BD,EAAmBC,kBAAkBhsB,OAAS,EAAG2G,EAAM,+BAC3D+E,EAAQ+b,YAAcsE,EAAmBlhB,IACzCa,EAAQsgB,kBAAoBD,EAAmBC,kBAC/CtgB,EAAQugB,mBAAqBF,EAAmBG,gBAC5CH,EAAmBI,MACnB7kB,EAAQykB,EAAmBI,IAAIC,SAASpsB,OAAS,EAAG2G,EAAM,yBAC1D+E,EAAQ2gB,YAAcN,EAAmBI,IAAIC,UAE7CL,EAAmBO,UACnBhlB,EAAQykB,EAAmBO,QAAQC,YAAYvsB,OAAS,EAAG2G,EAAM,4BACjE+E,EAAQ8gB,kBAAoBT,EAAmBO,QAAQG,WACvD/gB,EAAQghB,0BACJX,EAAmBO,QAAQK,eAC/BjhB,EAAQkhB,mBAAqBb,EAAmBO,QAAQC,YAEhE;;;;;;;;;;;;;;;;GAkDA3gB,eAAeihB,GAAuBlmB,EAAM+H,EAAOqd,GAC/C,MAAMe,GAAc,QAAmBnmB,GACjC+E,EAAU,CACZqhB,YAAa,iBACbre,SAEAqd,GACAD,GAAgCgB,EAAaphB,EAASqgB,SAEpDzH,GAAyBwI,EAAaphB,EAChD,CAUAE,eAAeohB,GAAqBrmB,EAAMoe,EAASkI,SACzC/I,IAAc,QAAmBvd,GAAO,CAC1Coe,UACAkI,eAGR,CAsBArhB,eAAeshB,GAAgBvmB,EAAMoe,GACjC,MAAM+H,GAAc,QAAmBnmB,GACjCuG,QAAiBgX,GAAc4I,EAAa,CAAE/H,YAO9C0B,EAAYvZ,EAAS6f,YAE3B,OADAzlB,EAAQmf,EAAWqG,EAAa,kBACxBrG,GACJ,IAAK,eACD,MACJ,IAAK,0BACDnf,EAAQ4F,EAASigB,SAAUL,EAAa,kBACxC,MACJ,IAAK,gCACDxlB,EAAQ4F,EAASkgB,QAASN,EAAa,kBAE3C,QACIxlB,EAAQ4F,EAASwB,MAAOoe,EAAa,kBAG7C,IAAIO,EAAkB,KAItB,OAHIngB,EAASkgB,UACTC,EAAkBhC,GAAoBO,oBAAoB1K,GAAU4L,GAAc5f,EAASkgB,UAExF,CACHE,KAAM,CACF5e,OAAiC,4BAAzBxB,EAAS6f,YACX7f,EAASigB,SACTjgB,EAASwB,QAAU,KACzB6e,eAAyC,4BAAzBrgB,EAAS6f,YACnB7f,EAASwB,MACTxB,EAASigB,WAAa,KAC5BE,mBAEJ5G,YAER,CAWA7a,eAAe4hB,GAAwB7mB,EAAMC,GACzC,MAAM,KAAE0mB,SAAeJ,IAAgB,QAAmBvmB,GAAOC,GAEjE,OAAO0mB,EAAK5e,KAChB,CA6CA,SAAS+e,GAA2B9mB,EAAM+H,EAAOoW,GAC7C,OAAOkG,IAAqB,QAAmBrkB,GAAO+gB,GAAkB0B,WAAW1a,EAAOoW,GAC9F;;;;;;;;;;;;;;;;GAiXA,SAAS4I,GAAYje,EAAM0d,GACvB,OAAOQ,IAAsB,QAAmBle,GAAO0d,EAAU,KACrE,CAiBAvhB,eAAe+hB,GAAsBle,EAAMf,EAAOoW,GAC9C,MAAM,KAAEne,GAAS8I,EACXwD,QAAgBxD,EAAKI,aACrBnE,EAAU,CACZuH,UACAkS,mBAAmB,GAEnBzW,IACAhD,EAAQgD,MAAQA,GAEhBoW,IACApZ,EAAQoZ,SAAWA,GAEvB,MAAM5X,QAAiBiE,EAAqB1B,EAAM0U,GAAoBxd,EAAM+E,UACtE+D,EAAKya,yBAAyBhd,GAAuB,EAC/D;;;;;;;;;;;;;;;;GA6KA,SAAS4S,GAAiBnZ,EAAM+Y,EAAgBtZ,EAAOuZ,GACnD,OAAO,QAAmBhZ,GAAMmZ,iBAAiBJ,EAAgBtZ,EAAOuZ,EAC5E,CAWA,SAASE,GAAuBlZ,EAAMqQ,EAAU+E,GAC5C,OAAO,QAAmBpV,GAAMkZ,uBAAuB7I,EAAU+E,EACrE;;;;;;;;;;;;;;;;;AA0MA,SAAS6R,GAAoBjnB,EAAM+E,GAC/B,OAAOG,EAAmBlF,EAAM,OAA8B,mCAAwE8E,EAAmB9E,EAAM+E,GACnK,CACA,SAASmiB,GAAuBlnB,EAAM+E,GAClC,OAAOG,EAAmBlF,EAAM,OAA8B,sCAA8E8E,EAAmB9E,EAAM+E,GACzK,CAyD6B,IAAIoiB,QAmBjC,MAAMC,GAAwB;;;;;;;;;;;;;;;;GAqB9B,MAAMC,GACF7jB,YAAY8jB,EAAkBjW,GAC1BhW,KAAKisB,iBAAmBA,EACxBjsB,KAAKgW,KAAOA,CAChB,CACA8B,eACI,IACI,OAAK9X,KAAKiW,SAGVjW,KAAKiW,QAAQiW,QAAQH,GAAuB,KAC5C/rB,KAAKiW,QAAQkW,WAAWJ,IACjB5gB,QAAQ8O,SAAQ,IAJZ9O,QAAQ8O,SAAQ,EAQ/B,CAFA,MAAO5S,GACH,OAAO8D,QAAQ8O,SAAQ,EAC3B,CACJ,CACAhD,KAAK3M,EAAK4L,GAEN,OADAlW,KAAKiW,QAAQiW,QAAQ5hB,EAAKH,KAAKC,UAAU8L,IAClC/K,QAAQ8O,SACnB,CACA9C,KAAK7M,GACD,MAAMiB,EAAOvL,KAAKiW,QAAQmW,QAAQ9hB,GAClC,OAAOa,QAAQ8O,QAAQ1O,EAAOpB,KAAK4E,MAAMxD,GAAQ,KACrD,CACA+L,QAAQhN,GAEJ,OADAtK,KAAKiW,QAAQkW,WAAW7hB,GACjBa,QAAQ8O,SACnB,CACIhE,cACA,OAAOjW,KAAKisB,kBAChB;;;;;;;;;;;;;;;;GAmBJ,SAASI,KACL,MAAMhtB,GAAK,UACX,OAAOoZ,GAAUpZ,IAAOwZ,GAAOxZ,EACnC,CAEA,MAAMitB,GAAyB,IAEzBC,GAAgC,GACtC,MAAMC,WAAgCR,GAClC7jB,cACI0a,OAAM,IAAM5nB,OAAOwxB,cAAc,SACjCzsB,KAAK6W,kBAAoB,CAAC6V,EAAOC,IAAS3sB,KAAK4sB,eAAeF,EAAOC,GACrE3sB,KAAK6sB,UAAY,CAAC,EAClB7sB,KAAK8sB,WAAa,CAAC,EAGnB9sB,KAAK+sB,UAAY,KAEjB/sB,KAAKgtB,4BAA8BX,MAAiCjT,KAEpEpZ,KAAKitB,kBAAoB9T,KACzBnZ,KAAKkY,uBAAwB,CACjC,CACAgV,kBAAkB5O,GAEd,IAAK,MAAMhU,KAAOjH,OAAO8pB,KAAKntB,KAAK6sB,WAAY,CAE3C,MAAMO,EAAWptB,KAAKiW,QAAQmW,QAAQ9hB,GAChC+iB,EAAWrtB,KAAK8sB,WAAWxiB,GAG7B8iB,IAAaC,GACb/O,EAAGhU,EAAK+iB,EAAUD,EAE1B,CACJ,CACAR,eAAeF,EAAOC,GAAO,GAEzB,IAAKD,EAAMpiB,IAIP,YAHAtK,KAAKktB,mBAAkB,CAAC5iB,EAAKgjB,EAAWF,KACpCptB,KAAKutB,gBAAgBjjB,EAAK8iB,EAAS,IAI3C,MAAM9iB,EAAMoiB,EAAMpiB,IAelB,GAZIqiB,EAGA3sB,KAAKwtB,iBAKLxtB,KAAKytB,cAILztB,KAAKgtB,4BAA6B,CAElC,MAAMU,EAAc1tB,KAAKiW,QAAQmW,QAAQ9hB,GAEzC,GAAIoiB,EAAMU,WAAaM,EACI,OAAnBhB,EAAMU,SAENptB,KAAKiW,QAAQiW,QAAQ5hB,EAAKoiB,EAAMU,UAIhCptB,KAAKiW,QAAQkW,WAAW7hB,QAG3B,GAAItK,KAAK8sB,WAAWxiB,KAASoiB,EAAMU,WAAaT,EAEjD,MAER,CACA,MAAMgB,EAAmB,KAGrB,MAAMD,EAAc1tB,KAAKiW,QAAQmW,QAAQ9hB,IACpCqiB,GAAQ3sB,KAAK8sB,WAAWxiB,KAASojB,IAKtC1tB,KAAKutB,gBAAgBjjB,EAAKojB,EAAY,EAEpCA,EAAc1tB,KAAKiW,QAAQmW,QAAQ9hB,GACrC0O,MACA0U,IAAgBhB,EAAMU,UACtBV,EAAMU,WAAaV,EAAMW,SAKzB9gB,WAAWohB,EAAkBpB,IAG7BoB,GAER,CACAJ,gBAAgBjjB,EAAK4L,GACjBlW,KAAK8sB,WAAWxiB,GAAO4L,EACvB,MAAM2W,EAAY7sB,KAAK6sB,UAAUviB,GACjC,GAAIuiB,EACA,IAAK,MAAMe,KAAY7mB,MAAM8mB,KAAKhB,GAC9Be,EAAS1X,EAAQ/L,KAAK4E,MAAMmH,GAASA,EAGjD,CACA4X,eACI9tB,KAAKytB,cACLztB,KAAK+sB,UAAYgB,aAAY,KACzB/tB,KAAKktB,mBAAkB,CAAC5iB,EAAK+iB,EAAUD,KACnCptB,KAAK4sB,eAAe,IAAIoB,aAAa,UAAW,CAC5C1jB,MACA+iB,WACAD,cAEO,EAAK,GAClB,GACHd,GACP,CACAmB,cACQztB,KAAK+sB,YACLkB,cAAcjuB,KAAK+sB,WACnB/sB,KAAK+sB,UAAY,KAEzB,CACAmB,iBACIjzB,OAAOymB,iBAAiB,UAAW1hB,KAAK6W,kBAC5C,CACA2W,iBACIvyB,OAAOkzB,oBAAoB,UAAWnuB,KAAK6W,kBAC/C,CACAV,aAAa7L,EAAKsjB,GAC6B,IAAvCvqB,OAAO8pB,KAAKntB,KAAK6sB,WAAW7uB,SAKxBgC,KAAKitB,kBACLjtB,KAAK8tB,eAGL9tB,KAAKkuB,kBAGRluB,KAAK6sB,UAAUviB,KAChBtK,KAAK6sB,UAAUviB,GAAO,IAAI8jB,IAE1BpuB,KAAK8sB,WAAWxiB,GAAOtK,KAAKiW,QAAQmW,QAAQ9hB,IAEhDtK,KAAK6sB,UAAUviB,GAAK+W,IAAIuM,EAC5B,CACAtX,gBAAgBhM,EAAKsjB,GACb5tB,KAAK6sB,UAAUviB,KACftK,KAAK6sB,UAAUviB,GAAKoN,OAAOkW,GACM,IAA7B5tB,KAAK6sB,UAAUviB,GAAK+jB,aACbruB,KAAK6sB,UAAUviB,IAGa,IAAvCjH,OAAO8pB,KAAKntB,KAAK6sB,WAAW7uB,SAC5BgC,KAAKwtB,iBACLxtB,KAAKytB,cAEb,CAEA7jB,WAAWU,EAAK4L,SACN2M,MAAM5L,KAAK3M,EAAK4L,GACtBlW,KAAK8sB,WAAWxiB,GAAOH,KAAKC,UAAU8L,EAC1C,CACAtM,WAAWU,GACP,MAAM4L,QAAc2M,MAAM1L,KAAK7M,GAE/B,OADAtK,KAAK8sB,WAAWxiB,GAAOH,KAAKC,UAAU8L,GAC/BA,CACX,CACAtM,cAAcU,SACJuY,MAAMvL,QAAQhN,UACbtK,KAAK8sB,WAAWxiB,EAC3B,EAEJkiB,GAAwBxW,KAAO,QAO/B,MAAMsY,GAA0B9B;;;;;;;;;;;;;;;;GAkBhC,MAAM+B,WAAkCvC,GACpC7jB,cACI0a,OAAM,IAAM5nB,OAAOuzB,gBAAgB,UACvC,CACArY,aAAaC,EAAMC,GAGnB,CACAC,gBAAgBF,EAAMC,GAGtB,EAEJkY,GAA0BvY,KAAO,UAOjC,MAAMyY,GAA4BF;;;;;;;;;;;;;;;;GAuBlC,SAASG,GAAYC,GACjB,OAAOxjB,QAAQ0M,IAAI8W,EAASvuB,KAAIwJ,MAAOyB,IACnC,IACI,MAAM6K,QAAc7K,EACpB,MAAO,CACHujB,WAAW,EACX1Y,QAQR,CALA,MAAO2Y,GACH,MAAO,CACHD,WAAW,EACXC,SAER,KAER;;;;;;;;;;;;;;;;GAsBA,MAAMC,GACF3mB,YAAY4mB,GACR/uB,KAAK+uB,YAAcA,EACnB/uB,KAAKgvB,YAAc,CAAC,EACpBhvB,KAAK6W,kBAAoB7W,KAAKivB,YAAYlY,KAAK/W,KACnD,CAOAgJ,oBAAoB+lB,GAIhB,MAAMG,EAAmBlvB,KAAKmvB,UAAUC,MAAKC,GAAYA,EAASC,cAAcP,KAChF,GAAIG,EACA,OAAOA,EAEX,MAAMK,EAAc,IAAIT,GAASC,GAEjC,OADA/uB,KAAKmvB,UAAUjV,KAAKqV,GACbA,CACX,CACAD,cAAcP,GACV,OAAO/uB,KAAK+uB,cAAgBA,CAChC,CAWAnlB,kBAAkB8iB,GACd,MAAM8C,EAAe9C,GACf,QAAE+C,EAAO,UAAEC,EAAS,KAAEpE,GAASkE,EAAalE,KAC5CqE,EAAW3vB,KAAKgvB,YAAYU,GAClC,KAAmB,OAAbC,QAAkC,IAAbA,OAAsB,EAASA,EAAStB,MAC/D,OAEJmB,EAAaI,MAAM,GAAGC,YAAY,CAC9BC,OAAQ,MACRL,UACAC,cAEJ,MAAMf,EAAW5nB,MAAM8mB,KAAK8B,GAAUvvB,KAAIwJ,MAAOmmB,GAAYA,EAAQP,EAAaQ,OAAQ1E,KACpFpgB,QAAiBwjB,GAAYC,GACnCa,EAAaI,MAAM,GAAGC,YAAY,CAC9BC,OAAQ,OACRL,UACAC,YACAxkB,YAER,CAQA+kB,WAAWP,EAAWQ,GAC2B,IAAzC7sB,OAAO8pB,KAAKntB,KAAKgvB,aAAahxB,QAC9BgC,KAAK+uB,YAAYrN,iBAAiB,UAAW1hB,KAAK6W,mBAEjD7W,KAAKgvB,YAAYU,KAClB1vB,KAAKgvB,YAAYU,GAAa,IAAItB,KAEtCpuB,KAAKgvB,YAAYU,GAAWrO,IAAI6O,EACpC,CAQAC,aAAaT,EAAWQ,GAChBlwB,KAAKgvB,YAAYU,IAAcQ,GAC/BlwB,KAAKgvB,YAAYU,GAAWhY,OAAOwY,GAElCA,GAAqD,IAArClwB,KAAKgvB,YAAYU,GAAWrB,aACtCruB,KAAKgvB,YAAYU,GAEiB,IAAzCrsB,OAAO8pB,KAAKntB,KAAKgvB,aAAahxB,QAC9BgC,KAAK+uB,YAAYZ,oBAAoB,UAAWnuB,KAAK6W,kBAE7D;;;;;;;;;;;;;;;;;AAoBJ,SAASuZ,GAAiBC,EAAS,GAAIC,EAAS,IAC5C,IAAIC,EAAS,GACb,IAAK,IAAIxyB,EAAI,EAAGA,EAAIuyB,EAAQvyB,IACxBwyB,GAAUhoB,KAAKioB,MAAsB,GAAhBjoB,KAAKgoB,UAE9B,OAAOF,EAASE,CACpB;;;;;;;;;;;;;;;;GAxBAzB,GAASK,UAAY,GA8CrB,MAAMsB,GACFtoB,YAAYuoB,GACR1wB,KAAK0wB,OAASA,EACd1wB,KAAK2vB,SAAW,IAAIvB,GACxB,CAMAuC,qBAAqBZ,GACbA,EAAQa,iBACRb,EAAQa,eAAeC,MAAM1C,oBAAoB,UAAW4B,EAAQe,WACpEf,EAAQa,eAAeC,MAAME,SAEjC/wB,KAAK2vB,SAASjY,OAAOqY,EACzB,CAcAnmB,YAAY8lB,EAAWpE,EAAM0F,EAAU,IACnC,MAAMJ,EAA2C,qBAAnBK,eAAiC,IAAIA,eAAmB,KACtF,IAAKL,EACD,MAAM,IAAIlrB,MAAM,0BAMpB,IAAIwrB,EACAnB,EACJ,OAAO,IAAI5kB,SAAQ,CAAC8O,EAAS3N,KACzB,MAAMmjB,EAAUW,GAAiB,GAAI,IACrCQ,EAAeC,MAAMM,QACrB,MAAMC,EAAW7kB,YAAW,KACxBD,EAAO,IAAI5G,MAAM,qBAA2D,GAC7EsrB,GACHjB,EAAU,CACNa,iBACAE,UAAUpE,GACN,MAAM8C,EAAe9C,EACrB,GAAI8C,EAAalE,KAAKmE,UAAYA,EAGlC,OAAQD,EAAalE,KAAKwE,QACtB,IAAK,MAEDtjB,aAAa4kB,GACbF,EAAkB3kB,YAAW,KACzBD,EAAO,IAAI5G,MAAM,WAAuC,GACzD,KACH,MACJ,IAAK,OAED8G,aAAa0kB,GACbjX,EAAQuV,EAAalE,KAAKpgB,UAC1B,MACJ,QACIsB,aAAa4kB,GACb5kB,aAAa0kB,GACb5kB,EAAO,IAAI5G,MAAM,qBACjB,MAEZ,GAEJ1F,KAAK2vB,SAAStO,IAAI0O,GAClBa,EAAeC,MAAMnP,iBAAiB,UAAWqO,EAAQe,WACzD9wB,KAAK0wB,OAAOb,YAAY,CACpBH,YACAD,UACAnE,QACD,CAACsF,EAAeS,OAAO,IAC3BC,SAAQ,KACHvB,GACA/vB,KAAK2wB,qBAAqBZ,EAC9B,GAER;;;;;;;;;;;;;;;;GAuBJ,SAASwB,KACL,OAAOt2B,MACX,CACA,SAASu2B,GAAmB3oB,GACxB0oB,KAAUhqB,SAASC,KAAOqB,CAC9B;;;;;;;;;;;;;;;;GAkBA,SAAS4oB,KACL,MAAkD,qBAAnCF,KAAU,sBACiB,oBAA/BA,KAAU,gBACzB,CACA3nB,eAAe8nB,KACX,KAAoB,OAAdvwB,gBAAoC,IAAdA,eAAuB,EAASA,UAAUwwB,eAClE,OAAO,KAEX,IACI,MAAMC,QAAqBzwB,UAAUwwB,cAAcE,MACnD,OAAOD,EAAaE,MAIxB,CAFA,MAAOzqB,GACH,OAAO,IACX,CACJ,CACA,SAAS0qB,KACL,IAAI1qB,EACJ,OAAiG,QAAxFA,EAAmB,OAAdlG,gBAAoC,IAAdA,eAAuB,EAASA,UAAUwwB,qBAAkC,IAAPtqB,OAAgB,EAASA,EAAG2qB,aAAe,IACxJ,CACA,SAASC,KACL,OAAOR,KAAcnqB,KAAO,IAChC;;;;;;;;;;;;;;;;GAkBA,MAAM4qB,GAAU,yBACVC,GAAa,EACbC,GAAsB,uBACtBC,GAAkB,YAOxB,MAAMC,GACFnqB,YAAYuB,GACR1J,KAAK0J,QAAUA,CACnB,CACA6oB,YACI,OAAO,IAAIpnB,SAAQ,CAAC8O,EAAS3N,KACzBtM,KAAK0J,QAAQgY,iBAAiB,WAAW,KACrCzH,EAAQja,KAAK0J,QAAQ3G,OAAO,IAEhC/C,KAAK0J,QAAQgY,iBAAiB,SAAS,KACnCpV,EAAOtM,KAAK0J,QAAQtF,MAAM,GAC5B,GAEV,EAEJ,SAASouB,GAAeC,EAAIC,GACxB,OAAOD,EACFE,YAAY,CAACP,IAAsBM,EAAc,YAAc,YAC/DE,YAAYR,GACrB,CACA,SAASS,KACL,MAAMnpB,EAAUopB,UAAUC,eAAeb,IACzC,OAAO,IAAII,GAAU5oB,GAAS6oB,WAClC,CACA,SAASS,KACL,MAAMtpB,EAAUopB,UAAUG,KAAKf,GAASC,IACxC,OAAO,IAAIhnB,SAAQ,CAAC8O,EAAS3N,KACzB5C,EAAQgY,iBAAiB,SAAS,KAC9BpV,EAAO5C,EAAQtF,MAAM,IAEzBsF,EAAQgY,iBAAiB,iBAAiB,KACtC,MAAM+Q,EAAK/oB,EAAQ3G,OACnB,IACI0vB,EAAGS,kBAAkBd,GAAqB,CAAEe,QAASd,IAIzD,CAFA,MAAOlvB,GACHmJ,EAAOnJ,EACX,KAEJuG,EAAQgY,iBAAiB,WAAW9X,UAChC,MAAM6oB,EAAK/oB,EAAQ3G,OAKd0vB,EAAGW,iBAAiBC,SAASjB,IAO9BnY,EAAQwY,IALRA,EAAG1B,cACG8B,KACN5Y,QAAc+Y,MAIlB,GACF,GAEV,CACAppB,eAAe0pB,GAAWb,EAAInoB,EAAK4L,GAC/B,MAAMxM,EAAU8oB,GAAeC,GAAI,GAAMc,IAAI,CACzC,CAAClB,IAAkB/nB,EACnB4L,UAEJ,OAAO,IAAIoc,GAAU5oB,GAAS6oB,WAClC,CACA3oB,eAAe4pB,GAAUf,EAAInoB,GACzB,MAAMZ,EAAU8oB,GAAeC,GAAI,GAAO5vB,IAAIyH,GACxCghB,QAAa,IAAIgH,GAAU5oB,GAAS6oB,YAC1C,YAAgBr3B,IAATowB,EAAqB,KAAOA,EAAKpV,KAC5C,CACA,SAASud,GAAchB,EAAInoB,GACvB,MAAMZ,EAAU8oB,GAAeC,GAAI,GAAM/a,OAAOpN,GAChD,OAAO,IAAIgoB,GAAU5oB,GAAS6oB,WAClC,CACA,MAAMmB,GAAuB,IACvBC,GAA2B,EACjC,MAAMC,GACFzrB,cACInI,KAAKgW,KAAO,QACZhW,KAAKkY,uBAAwB,EAC7BlY,KAAK6sB,UAAY,CAAC,EAClB7sB,KAAK8sB,WAAa,CAAC,EAGnB9sB,KAAK+sB,UAAY,KACjB/sB,KAAK6zB,cAAgB,EACrB7zB,KAAKqvB,SAAW,KAChBrvB,KAAK8zB,OAAS,KACd9zB,KAAK+zB,gCAAiC,EACtC/zB,KAAKg0B,oBAAsB,KAE3Bh0B,KAAKi0B,6BACDj0B,KAAKk0B,mCAAmC3V,MAAK,SAAW,QAChE,CACA3U,gBACI,OAAI5J,KAAKyyB,KAGTzyB,KAAKyyB,SAAWO,MAFLhzB,KAAKyyB,EAIpB,CACA7oB,mBAAmBuqB,GACf,IAAIC,EAAc,EAClB,MAAO,EACH,IACI,MAAM3B,QAAWzyB,KAAKq0B,UACtB,aAAaF,EAAG1B,EAWpB,CATA,MAAOtvB,GACH,GAAIixB,IAAgBT,GAChB,MAAMxwB,EAENnD,KAAKyyB,KACLzyB,KAAKyyB,GAAG1B,QACR/wB,KAAKyyB,QAAKv3B,EAGlB,CAER,CAKA0O,yCACI,OAAO6nB,KAAczxB,KAAKs0B,qBAAuBt0B,KAAKu0B,kBAC1D,CAIA3qB,2BACI5J,KAAKqvB,SAAWP,GAAShpB,aAAamsB,MAEtCjyB,KAAKqvB,SAASY,WAAW,cAA2CrmB,MAAO4qB,EAASlJ,KAChF,MAAM6B,QAAantB,KAAKy0B,QACxB,MAAO,CACHC,aAAcvH,EAAK/U,SAASkT,EAAKhhB,KACpC,IAGLtK,KAAKqvB,SAASY,WAAW,QAA8BrmB,MAAO4qB,EAASG,IAC5D,CAAC,eAEhB,CAQA/qB,yBACI,IAAIvC,EAAIgO,EAGR,GADArV,KAAKg0B,0BAA4BtC,MAC5B1xB,KAAKg0B,oBACN,OAEJh0B,KAAK8zB,OAAS,IAAIrD,GAAOzwB,KAAKg0B,qBAE9B,MAAMY,QAAgB50B,KAAK8zB,OAAOe,MAAM,OAA8B,CAAC,EAAG,KACrED,IAGsB,QAArBvtB,EAAKutB,EAAQ,UAAuB,IAAPvtB,OAAgB,EAASA,EAAGunB,aACpC,QAArBvZ,EAAKuf,EAAQ,UAAuB,IAAPvf,OAAgB,EAASA,EAAGa,MAAMkC,SAAS,iBAC1EpY,KAAK+zB,gCAAiC,EAE9C,CAUAnqB,0BAA0BU,GACtB,GAAKtK,KAAK8zB,QACL9zB,KAAKg0B,qBACNjC,OAAkC/xB,KAAKg0B,oBAG3C,UACUh0B,KAAK8zB,OAAOe,MAAM,aAA2C,CAAEvqB,OAErEtK,KAAK+zB,+BACC,IACA,GAIV,CAFA,MAAO1sB,GAEP,CACJ,CACAuC,qBACI,IACI,IAAKkpB,UACD,OAAO,EAEX,MAAML,QAAWO,KAGjB,aAFMM,GAAWb,EAAI1G,GAAuB,WACtC0H,GAAchB,EAAI1G,KACjB,CAEE,CAAb,MAAO1kB,GAAM,CACb,OAAO,CACX,CACAuC,wBAAwBkrB,GACpB90B,KAAK6zB,gBACL,UACUiB,GAIV,CAFA,QACI90B,KAAK6zB,eACT,CACJ,CACAjqB,WAAWU,EAAK4L,GACZ,OAAOlW,KAAK+0B,mBAAkBnrB,gBACpB5J,KAAKg1B,cAAcvC,GAAOa,GAAWb,EAAInoB,EAAK4L,KACpDlW,KAAK8sB,WAAWxiB,GAAO4L,EAChBlW,KAAKi1B,oBAAoB3qB,KAExC,CACAV,WAAWU,GACP,MAAM0Y,QAAahjB,KAAKg1B,cAAcvC,GAAOe,GAAUf,EAAInoB,KAE3D,OADAtK,KAAK8sB,WAAWxiB,GAAO0Y,EAChBA,CACX,CACApZ,cAAcU,GACV,OAAOtK,KAAK+0B,mBAAkBnrB,gBACpB5J,KAAKg1B,cAAcvC,GAAOgB,GAAchB,EAAInoB,YAC3CtK,KAAK8sB,WAAWxiB,GAChBtK,KAAKi1B,oBAAoB3qB,KAExC,CACAV,cAEI,MAAM7G,QAAe/C,KAAKg1B,cAAcvC,IACpC,MAAMyC,EAAgB1C,GAAeC,GAAI,GAAO0C,SAChD,OAAO,IAAI7C,GAAU4C,GAAe3C,WAAW,IAEnD,IAAKxvB,EACD,MAAO,GAGX,GAA2B,IAAvB/C,KAAK6zB,cACL,MAAO,GAEX,MAAM1G,EAAO,GACPiI,EAAe,IAAIhH,IACzB,IAAK,MAAQiH,UAAW/qB,EAAG,MAAE4L,KAAWnT,EACpCqyB,EAAa/T,IAAI/W,GACbH,KAAKC,UAAUpK,KAAK8sB,WAAWxiB,MAAUH,KAAKC,UAAU8L,KACxDlW,KAAKutB,gBAAgBjjB,EAAK4L,GAC1BiX,EAAKjT,KAAK5P,IAGlB,IAAK,MAAMgrB,KAAYjyB,OAAO8pB,KAAKntB,KAAK8sB,YAChC9sB,KAAK8sB,WAAWwI,KAAcF,EAAa92B,IAAIg3B,KAE/Ct1B,KAAKutB,gBAAgB+H,EAAU,MAC/BnI,EAAKjT,KAAKob,IAGlB,OAAOnI,CACX,CACAI,gBAAgBjjB,EAAK8iB,GACjBptB,KAAK8sB,WAAWxiB,GAAO8iB,EACvB,MAAMP,EAAY7sB,KAAK6sB,UAAUviB,GACjC,GAAIuiB,EACA,IAAK,MAAMe,KAAY7mB,MAAM8mB,KAAKhB,GAC9Be,EAASR,EAGrB,CACAU,eACI9tB,KAAKytB,cACLztB,KAAK+sB,UAAYgB,aAAYnkB,SAAY5J,KAAKy0B,SAASf,GAC3D,CACAjG,cACQztB,KAAK+sB,YACLkB,cAAcjuB,KAAK+sB,WACnB/sB,KAAK+sB,UAAY,KAEzB,CACA5W,aAAa7L,EAAKsjB,GAC6B,IAAvCvqB,OAAO8pB,KAAKntB,KAAK6sB,WAAW7uB,QAC5BgC,KAAK8tB,eAEJ9tB,KAAK6sB,UAAUviB,KAChBtK,KAAK6sB,UAAUviB,GAAO,IAAI8jB,IAErBpuB,KAAKmX,KAAK7M,IAEnBtK,KAAK6sB,UAAUviB,GAAK+W,IAAIuM,EAC5B,CACAtX,gBAAgBhM,EAAKsjB,GACb5tB,KAAK6sB,UAAUviB,KACftK,KAAK6sB,UAAUviB,GAAKoN,OAAOkW,GACM,IAA7B5tB,KAAK6sB,UAAUviB,GAAK+jB,aACbruB,KAAK6sB,UAAUviB,IAGa,IAAvCjH,OAAO8pB,KAAKntB,KAAK6sB,WAAW7uB,QAC5BgC,KAAKytB,aAEb,EAEJmG,GAA0B5d,KAAO,QAOjC,MAAMuf,GAA4B3B;;;;;;;;;;;;;;;;GAkBlC,SAAS4B,GAAoB7wB,EAAM+E,GAC/B,OAAOG,EAAmBlF,EAAM,OAA8B,+BAAiE8E,EAAmB9E,EAAM+E,GAC5J,CACA,SAAS+rB,GAAuB9wB,EAAM+E,GAClC,OAAOG,EAAmBlF,EAAM,OAA8B,kCAAuE8E,EAAmB9E,EAAM+E,GAClK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,SAASgsB,KACL,IAAIruB,EAAIgO,EACR,OAA0G,QAAlGA,EAAsD,QAAhDhO,EAAK4R,SAAS0c,qBAAqB,eAA4B,IAAPtuB,OAAgB,EAASA,EAAG,UAAuB,IAAPgO,EAAgBA,EAAK4D,QAC3I,CACA,SAAS2c,GAAQ/sB,GAEb,OAAO,IAAIsC,SAAQ,CAAC8O,EAAS3N,KACzB,MAAM+T,EAAKpH,SAASqH,cAAc,UAClCD,EAAGwV,aAAa,MAAOhtB,GACvBwX,EAAGyV,OAAS7b,EACZoG,EAAG0V,QAAU5yB,IACT,MAAMiB,EAAQK,EAAa,kBAC3BL,EAAMwI,WAAazJ,EACnBmJ,EAAOlI,EAAM,EAEjBic,EAAGrK,KAAO,kBACVqK,EAAG2V,QAAU,QACbN,KAAyBpU,YAAYjB,EAAG,GAEhD,CACA,SAAS4V,GAAsB5F,GAC3B,MAAO,KAAKA,IAAS9nB,KAAKioB,MAAsB,IAAhBjoB,KAAKgoB,WACzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoJyB0F,GAAsB,OACjB,IAAI/tB,EAAM,IAAO;;;;;;;;;;;;;;;;;AAoG/C,MAAMguB,GAA0B,YAuShCtsB,eAAeusB,GAAmBxxB,EAAMgC,EAASyvB,GAC7C,IAAI/uB,EACJ,MAAMgvB,QAAuBD,EAASE,SACtC,IAGI,IAAIC,EASJ,GAXAjxB,EAAkC,kBAAnB+wB,EAA6B1xB,EAAM,kBAClDW,EAAQ8wB,EAASpgB,OAASkgB,GAAyBvxB,EAAM,kBAGrD4xB,EADmB,kBAAZ5vB,EACY,CACfgG,YAAahG,GAIEA,EAEnB,YAAa4vB,EAAkB,CAC/B,MAAMC,EAAUD,EAAiBC,QACjC,GAAI,gBAAiBD,EAAkB,CACnCjxB,EAAyB,WAAjBkxB,EAAQxgB,KAAuDrR,EAAM,kBAC7E,MAAMuG,QAAiB0gB,GAAoBjnB,EAAM,CAC7CsM,QAASulB,EAAQpP,WACjBqP,oBAAqB,CACjB9pB,YAAa4pB,EAAiB5pB,YAC9B0pB,oBAGR,OAAOnrB,EAASwrB,iBAAiB5R,WACrC,CACK,CACDxf,EAAyB,WAAjBkxB,EAAQxgB,KAAwDrR,EAAM,kBAC9E,MAAM4kB,GAA+D,QAA3CliB,EAAKkvB,EAAiBI,uBAAoC,IAAPtvB,OAAgB,EAASA,EAAG0K,MACrGwkB,EAAiBK,eACrBtxB,EAAQikB,EAAiB5kB,EAAM,6BAC/B,MAAMuG,QAAiBsqB,GAAoB7wB,EAAM,CAC7CkyB,qBAAsBL,EAAQpP,WAC9BmC,kBACAuN,gBAAiB,CACbT,oBAGR,OAAOnrB,EAAS6rB,kBAAkBjS,WACtC,CACJ,CACK,CACD,MAAM,YAAEA,SAAsBZ,GAA0Bvf,EAAM,CAC1DgI,YAAa4pB,EAAiB5pB,YAC9B0pB,mBAEJ,OAAOvR,CACX,CAIJ,CAFA,QACIsR,EAASY,QACb,CACJ;;;;;;;;;;;;;;;;;AAwDA,MAAMC,GAKF9uB,YAAYxD,GAER3E,KAAK+S,WAAakkB,GAAkBtR,YACpC3lB,KAAK2E,KAAOua,GAAUva,EAC1B,CAgCAuyB,kBAAkBC,EAAcC,GAC5B,OAAOjB,GAAmBn2B,KAAK2E,KAAMwyB,GAAc,QAAmBC,GAC1E,CA4BApuB,kBAAkB2b,EAAgBC,GAC9B,OAAOF,GAAoB2S,kBAAkB1S,EAAgBC,EACjE,CAKA5b,4BAA4Bge,GACxB,MAAMI,EAAaJ,EACnB,OAAOiQ,GAAkBhQ,2BAA2BG,EACxD,CAiCApe,2BAA2B5E,GACvB,OAAO6yB,GAAkBhQ,2BAA4B7iB,EAAMwI,YAAc,CAAC,EAC9E,CACA5D,mCAAoC6D,eAAgBqa,IAChD,IAAKA,EACD,OAAO,KAEX,MAAM,YAAEva,EAAW,eAAE0X,GAAmB6C,EACxC,OAAIva,GAAe0X,EACRK,GAAoB4S,mBAAmB3qB,EAAa0X,GAExD,IACX;;;;;;;;;;;;;;;;;AA4BJ,SAASkT,GAAqB5yB,EAAM6yB,GAChC,OAAIA,EACO1xB,EAAa0xB,IAExBlyB,EAAQX,EAAK2W,uBAAwB3W,EAAM,kBACpCA,EAAK2W,uBAChB;;;;;;;;;;;;;;;;GA/BA2b,GAAkBtR,YAAc,QAEhCsR,GAAkBQ,qBAAuB,QA+CzC,MAAMC,WAAsB/V,GACxBxZ,YAAY+B,GACR2Y,MAAM,SAAkC,UACxC7iB,KAAKkK,OAASA,CAClB,CACA2X,oBAAoBld,GAChB,OAAOye,GAAcze,EAAM3E,KAAK23B,mBACpC,CACA5V,eAAepd,EAAMsM,GACjB,OAAOmS,GAAcze,EAAM3E,KAAK23B,iBAAiB1mB,GACrD,CACAgR,6BAA6Btd,GACzB,OAAOye,GAAcze,EAAM3E,KAAK23B,mBACpC,CACAA,iBAAiB1mB,GACb,MAAMvH,EAAU,CACZsa,WAAYhkB,KAAKkK,OAAO8Z,WACxB4T,UAAW53B,KAAKkK,OAAO0tB,UACvB3T,SAAUjkB,KAAKkK,OAAO+Z,SACtBta,SAAU3J,KAAKkK,OAAOP,SACtB6Z,aAAcxjB,KAAKkK,OAAOsZ,aAC1BL,mBAAmB,EACnB0U,qBAAqB,GAKzB,OAHI5mB,IACAvH,EAAQuH,QAAUA,GAEfvH,CACX,EAEJ,SAASouB,GAAQ5tB,GACb,OAAO6e,GAAsB7e,EAAOvF,KAAM,IAAI+yB,GAAcxtB,GAASA,EAAOkF,gBAChF,CACA,SAAS2oB,GAAQ7tB,GACb,MAAM,KAAEvF,EAAI,KAAE8I,GAASvD,EAEvB,OADA5E,EAAQmI,EAAM9I,EAAM,kBACbikB,GAAgBnb,EAAM,IAAIiqB,GAAcxtB,GAASA,EAAOkF,gBACnE,CACAxF,eAAeouB,GAAM9tB,GACjB,MAAM,KAAEvF,EAAI,KAAE8I,GAASvD,EAEvB,OADA5E,EAAQmI,EAAM9I,EAAM,kBACb+jB,GAAQjb,EAAM,IAAIiqB,GAAcxtB,GAASA,EAAOkF,gBAC3D;;;;;;;;;;;;;;;;GAsBA,MAAM6oB,GACF9vB,YAAYxD,EAAMgO,EAAQqL,EAAUvQ,EAAM2B,GAAkB,GACxDpP,KAAK2E,KAAOA,EACZ3E,KAAKge,SAAWA,EAChBhe,KAAKyN,KAAOA,EACZzN,KAAKoP,gBAAkBA,EACvBpP,KAAKk4B,eAAiB,KACtBl4B,KAAKm4B,aAAe,KACpBn4B,KAAK2S,OAAS5L,MAAMC,QAAQ2L,GAAUA,EAAS,CAACA,EACpD,CACAylB,UACI,OAAO,IAAIjtB,SAAQvB,MAAOqQ,EAAS3N,KAC/BtM,KAAKk4B,eAAiB,CAAEje,UAAS3N,UACjC,IACItM,KAAKm4B,mBAAqBn4B,KAAKge,SAASlC,YAAY9b,KAAK2E,YACnD3E,KAAKq4B,cACXr4B,KAAKm4B,aAAaG,iBAAiBt4B,KAIvC,CAFA,MAAOmD,GACHnD,KAAKsM,OAAOnJ,EAChB,IAER,CACAyG,kBAAkB8iB,GACd,MAAM,YAAE6L,EAAW,UAAEX,EAAS,SAAE3T,EAAQ,SAAEta,EAAQ,MAAEvF,EAAK,KAAE4R,GAAS0W,EACpE,GAAItoB,EAEA,YADApE,KAAKsM,OAAOlI,GAGhB,MAAM8F,EAAS,CACXvF,KAAM3E,KAAK2E,KACXqf,WAAYuU,EACZX,UAAWA,EACXjuB,SAAUA,QAAYzO,EACtB+oB,SAAUA,QAAY/oB,EACtBuS,KAAMzN,KAAKyN,KACX2B,gBAAiBpP,KAAKoP,iBAE1B,IACIpP,KAAKia,cAAcja,KAAKw4B,WAAWxiB,EAAhBhW,CAAsBkK,GAI7C,CAFA,MAAO/G,GACHnD,KAAKsM,OAAOnJ,EAChB,CACJ,CACAs1B,QAAQr0B,GACJpE,KAAKsM,OAAOlI,EAChB,CACAo0B,WAAWxiB,GACP,OAAQA,GACJ,IAAK,iBACL,IAAK,oBACD,OAAO8hB,GACX,IAAK,eACL,IAAK,kBACD,OAAOE,GACX,IAAK,iBACL,IAAK,oBACD,OAAOD,GACX,QACI1zB,EAAMrE,KAAK2E,KAAM,kBAE7B,CACAsV,QAAQwJ,GACJ9d,EAAY3F,KAAKk4B,eAAgB,iCACjCl4B,KAAKk4B,eAAeje,QAAQwJ,GAC5BzjB,KAAK04B,sBACT,CACApsB,OAAOlI,GACHuB,EAAY3F,KAAKk4B,eAAgB,iCACjCl4B,KAAKk4B,eAAe5rB,OAAOlI,GAC3BpE,KAAK04B,sBACT,CACAA,uBACQ14B,KAAKm4B,cACLn4B,KAAKm4B,aAAaQ,mBAAmB34B,MAEzCA,KAAKk4B,eAAiB,KACtBl4B,KAAK44B,SACT;;;;;;;;;;;;;;;;GAmBJ,MAAMC,GAA6B,IAAI3wB,EAAM,IAAM,KAyGnD,MAAM4wB,WAAuBb,GACzB9vB,YAAYxD,EAAMgO,EAAQtM,EAAU2X,EAAUvQ,GAC1CoV,MAAMle,EAAMgO,EAAQqL,EAAUvQ,GAC9BzN,KAAKqG,SAAWA,EAChBrG,KAAK+4B,WAAa,KAClB/4B,KAAKg5B,OAAS,KACVF,GAAeG,oBACfH,GAAeG,mBAAmBC,SAEtCJ,GAAeG,mBAAqBj5B,IACxC,CACA4J,uBACI,MAAM7G,QAAe/C,KAAKo4B,UAE1B,OADA9yB,EAAQvC,EAAQ/C,KAAK2E,KAAM,kBACpB5B,CACX,CACA6G,oBACIjE,EAAmC,IAAvB3F,KAAK2S,OAAO3U,OAAc,0CACtC,MAAMyxB,EAAUW,KAChBpwB,KAAK+4B,iBAAmB/4B,KAAKge,SAASmb,WAAWn5B,KAAK2E,KAAM3E,KAAKqG,SAAUrG,KAAK2S,OAAO,GACvF8c,GACAzvB,KAAK+4B,WAAWK,gBAAkB3J,EAQlCzvB,KAAKge,SAASqb,kBAAkBr5B,KAAK2E,MAAM6jB,OAAMrlB,IAC7CnD,KAAKsM,OAAOnJ,EAAE,IAElBnD,KAAKge,SAASsb,6BAA6Bt5B,KAAK2E,MAAM40B,IAC7CA,GACDv5B,KAAKsM,OAAO7H,EAAazE,KAAK2E,KAAM,2BACxC,IAGJ3E,KAAKw5B,sBACT,CACI/J,cACA,IAAIpoB,EACJ,OAAmC,QAA1BA,EAAKrH,KAAK+4B,kBAA+B,IAAP1xB,OAAgB,EAASA,EAAG+xB,kBAAoB,IAC/F,CACAF,SACIl5B,KAAKsM,OAAO7H,EAAazE,KAAK2E,KAAM,2BACxC,CACAi0B,UACQ54B,KAAK+4B,YACL/4B,KAAK+4B,WAAWhI,QAEhB/wB,KAAKg5B,QACL/9B,OAAOuR,aAAaxM,KAAKg5B,QAE7Bh5B,KAAK+4B,WAAa,KAClB/4B,KAAKg5B,OAAS,KACdF,GAAeG,mBAAqB,IACxC,CACAO,uBACI,MAAM7M,EAAO,KACT,IAAItlB,EAAIgO,GAC6E,QAAhFA,EAAgC,QAA1BhO,EAAKrH,KAAK+4B,kBAA+B,IAAP1xB,OAAgB,EAASA,EAAGpM,cAA2B,IAAPoa,OAAgB,EAASA,EAAGokB,QAIrHz5B,KAAKg5B,OAAS/9B,OAAOsR,YAAW,KAC5BvM,KAAKg5B,OAAS,KACdh5B,KAAKsM,OAAO7H,EAAazE,KAAK2E,KAAM,wBAAiE,GACtG,KAGP3E,KAAKg5B,OAAS/9B,OAAOsR,WAAWogB,EAAMkM,GAA2Bh2B,MAAM,EAE3E8pB,GACJ,EAIJmM,GAAeG,mBAAqB;;;;;;;;;;;;;;;;;AAkBpC,MAAMS,GAAuB,kBAGvBC,GAAqB,IAAI9zB,IAC/B,MAAM+zB,WAAuB3B,GACzB9vB,YAAYxD,EAAMqZ,EAAU5O,GAAkB,GAC1CyT,MAAMle,EAAM,CACR,oBACA,kBACA,oBACA,WACDqZ,OAAU9iB,EAAWkU,GACxBpP,KAAKyvB,QAAU,IACnB,CAKA7lB,gBACI,IAAIiwB,EAAeF,GAAmB92B,IAAI7C,KAAK2E,KAAKyR,QACpD,IAAKyjB,EAAc,CACf,IACI,MAAMC,QAA2BC,GAAkC/5B,KAAKge,SAAUhe,KAAK2E,MACjF5B,EAAS+2B,QAA2BjX,MAAMuV,UAAY,KAC5DyB,EAAe,IAAM1uB,QAAQ8O,QAAQlX,EAIzC,CAFA,MAAOI,GACH02B,EAAe,IAAM1uB,QAAQmB,OAAOnJ,EACxC,CACAw2B,GAAmB72B,IAAI9C,KAAK2E,KAAKyR,OAAQyjB,EAC7C,CAMA,OAHK75B,KAAKoP,iBACNuqB,GAAmB72B,IAAI9C,KAAK2E,KAAKyR,QAAQ,IAAMjL,QAAQ8O,QAAQ,QAE5D4f,GACX,CACAjwB,kBAAkB8iB,GACd,GAAmB,sBAAfA,EAAM1W,KACN,OAAO6M,MAAMmX,YAAYtN,GAExB,GAAmB,YAAfA,EAAM1W,MAKf,GAAI0W,EAAM+C,QAAS,CACf,MAAMhiB,QAAazN,KAAK2E,KAAKs1B,mBAAmBvN,EAAM+C,SACtD,GAAIhiB,EAEA,OADAzN,KAAKyN,KAAOA,EACLoV,MAAMmX,YAAYtN,GAGzB1sB,KAAKia,QAAQ,KAErB,OAZIja,KAAKia,QAAQ,KAarB,CACArQ,oBAAsB,CACtBgvB,UAAY,EAEhBhvB,eAAemwB,GAAkC/b,EAAUrZ,GACvD,MAAM2F,EAAM4vB,GAAmBv1B,GACzBkC,EAAcszB,GAAoBnc,GACxC,UAAYnX,EAAYiR,eACpB,OAAO,EAEX,MAAMgiB,EAAuD,eAA3BjzB,EAAYsQ,KAAK7M,GAEnD,aADMzD,EAAYyQ,QAAQhN,GACnBwvB,CACX,CAOA,SAASjd,GAAwBlY,EAAM5B,GACnC42B,GAAmB72B,IAAI6B,EAAKyR,OAAQrT,EACxC,CACA,SAASo3B,GAAoBnc,GACzB,OAAOlY,EAAakY,EAASC,qBACjC,CACA,SAASic,GAAmBv1B,GACxB,OAAO6R,GAAoBkjB,GAAsB/0B,EAAK+D,OAAO6B,OAAQ5F,EAAKO,KAC9E;;;;;;;;;;;;;;;;GA2LA0E,eAAewwB,GAAmBz1B,EAAM01B,EAAgBjrB,GAAkB,GACtE,MAAMiQ,EAAeH,GAAUva,GACzBqZ,EAAWuZ,GAAqBlY,EAAcgb,GAC9C5b,EAAS,IAAImb,GAAeva,EAAcrB,EAAU5O,GACpDrM,QAAe0b,EAAO2Z,UAM5B,OALIr1B,IAAWqM,WACJrM,EAAO0K,KAAK2H,uBACbiK,EAAa/M,sBAAsBvP,EAAO0K,YAC1C4R,EAAapC,iBAAiB,KAAMod,IAEvCt3B,CACX;;;;;;;;;;;;;;;;;AA2BA,MAAMu3B,GAAsC,IAC5C,MAAMC,GACFpyB,YAAYxD,GACR3E,KAAK2E,KAAOA,EACZ3E,KAAKw6B,gBAAkB,IAAIpM,IAC3BpuB,KAAKy6B,UAAY,IAAIrM,IACrBpuB,KAAK06B,oBAAsB,KAC3B16B,KAAK26B,6BAA8B,EACnC36B,KAAK46B,uBAAyBztB,KAAKiD,KACvC,CACAkoB,iBAAiBuC,GACb76B,KAAKy6B,UAAUpZ,IAAIwZ,GACf76B,KAAK06B,qBACL16B,KAAK86B,mBAAmB96B,KAAK06B,oBAAqBG,KAClD76B,KAAK+6B,eAAe/6B,KAAK06B,oBAAqBG,GAC9C76B,KAAKg7B,iBAAiBh7B,KAAK06B,qBAC3B16B,KAAK06B,oBAAsB,KAEnC,CACA/B,mBAAmBkC,GACf76B,KAAKy6B,UAAU/iB,OAAOmjB,EAC1B,CACAI,QAAQvO,GAEJ,GAAI1sB,KAAKk7B,oBAAoBxO,GACzB,OAAO,EAEX,IAAIyO,GAAU,EAQd,OAPAn7B,KAAKy6B,UAAUW,SAAQC,IACfr7B,KAAK86B,mBAAmBpO,EAAO2O,KAC/BF,GAAU,EACVn7B,KAAK+6B,eAAerO,EAAO2O,GAC3Br7B,KAAKg7B,iBAAiBtO,GAC1B,IAEA1sB,KAAK26B,8BAAgCW,GAAgB5O,KAKzD1sB,KAAK26B,6BAA8B,EAE9BQ,IACDn7B,KAAK06B,oBAAsBhO,EAC3ByO,GAAU,IANHA,CASf,CACAJ,eAAerO,EAAO2O,GAClB,IAAIh0B,EACJ,GAAIqlB,EAAMtoB,QAAUm3B,GAAoB7O,GAAQ,CAC5C,MAAM9nB,GAAoC,QAA3ByC,EAAKqlB,EAAMtoB,MAAMQ,YAAyB,IAAPyC,OAAgB,EAASA,EAAGrI,MAAM,SAAS,KACzF,iBACJq8B,EAAS5C,QAAQh0B,EAAazE,KAAK2E,KAAMC,GAC7C,MAEIy2B,EAASrB,YAAYtN,EAE7B,CACAoO,mBAAmBpO,EAAO2O,GACtB,MAAMG,EAAsC,OAArBH,EAAS5L,WACzB/C,EAAM+C,SAAW/C,EAAM+C,UAAY4L,EAAS5L,QACnD,OAAO4L,EAAS1oB,OAAOyF,SAASsU,EAAM1W,OAASwlB,CACnD,CACAN,oBAAoBxO,GAKhB,OAJIvf,KAAKiD,MAAQpQ,KAAK46B,wBAClBN,IACAt6B,KAAKw6B,gBAAgBiB,QAElBz7B,KAAKw6B,gBAAgBl8B,IAAIo9B,GAAShP,GAC7C,CACAsO,iBAAiBtO,GACb1sB,KAAKw6B,gBAAgBnZ,IAAIqa,GAAShP,IAClC1sB,KAAK46B,uBAAyBztB,KAAKiD,KACvC,EAEJ,SAASsrB,GAASv4B,GACd,MAAO,CAACA,EAAE6S,KAAM7S,EAAEssB,QAAStsB,EAAEy0B,UAAWz0B,EAAEwG,UAAUgJ,QAAOgpB,GAAKA,IAAGhiB,KAAK,IAC5E,CACA,SAAS4hB,IAAoB,KAAEvlB,EAAI,MAAE5R,IACjC,MAAiB,YAAT4R,GAC2D,wBAApD,OAAV5R,QAA4B,IAAVA,OAAmB,EAASA,EAAMQ,KAC7D,CACA,SAAS02B,GAAgB5O,GACrB,OAAQA,EAAM1W,MACV,IAAK,oBACL,IAAK,kBACL,IAAK,oBACD,OAAO,EACX,IAAK,UACD,OAAOulB,GAAoB7O,GAC/B,QACI,OAAO,EAEnB;;;;;;;;;;;;;;;;GAkBA9iB,eAAegyB,GAAkBj3B,EAAM+E,EAAU,CAAC,GAC9C,OAAOG,EAAmBlF,EAAM,MAA4B,eAAkD+E,EAClH;;;;;;;;;;;;;;;;GAkBA,MAAMmyB,GAAmB,uCACnBC,GAAa,UACnBlyB,eAAemyB,GAAgBp3B,GAE3B,GAAIA,EAAK+D,OAAOE,SACZ,OAEJ,MAAM,kBAAEozB,SAA4BJ,GAAkBj3B,GACtD,IAAK,MAAMs3B,KAAUD,EACjB,IACI,GAAIE,GAAYD,GACZ,MAKR,CAFA,MAAO50B,GAEP,CAGJhD,EAAMM,EAAM,sBAChB,CACA,SAASu3B,GAAYC,GACjB,MAAMC,EAAah1B,KACb,SAAEO,EAAQ,SAAE00B,GAAa,IAAIC,IAAIF,GACvC,GAAID,EAASrzB,WAAW,uBAAwB,CAC5C,MAAMyzB,EAAQ,IAAID,IAAIH,GACtB,MAAuB,KAAnBI,EAAMF,UAAgC,KAAbA,EAEJ,sBAAb10B,GACJw0B,EAASp9B,QAAQ,sBAAuB,MACpCq9B,EAAWr9B,QAAQ,sBAAuB,IAElC,sBAAb4I,GAAoC40B,EAAMF,WAAaA,CAClE,CACA,IAAKP,GAAW57B,KAAKyH,GACjB,OAAO,EAEX,GAAIk0B,GAAiB37B,KAAKi8B,GAGtB,OAAOE,IAAaF,EAGxB,MAAMK,EAAuBL,EAASp9B,QAAQ,MAAO,OAG/C6Z,EAAK,IAAI6jB,OAAO,UAAYD,EAAuB,IAAMA,EAAuB,KAAM,KAC5F,OAAO5jB,EAAG1Y,KAAKm8B,EACnB;;;;;;;;;;;;;;;;GAkBA,MAAMK,GAAkB,IAAIx0B,EAAM,IAAO,KAKzC,SAASy0B,KAIL,MAAMC,EAASrL,KAAUsL,OAEzB,GAAe,OAAXD,QAA8B,IAAXA,OAAoB,EAASA,EAAOE,EAEvD,IAAK,MAAMC,KAAQ15B,OAAO8pB,KAAKyP,EAAOE,GAQlC,GANAF,EAAOE,EAAEC,GAAMC,EAAIJ,EAAOE,EAAEC,GAAMC,GAAK,GAEvCJ,EAAOE,EAAEC,GAAME,EAAIL,EAAOE,EAAEC,GAAME,GAAK,GAEvCL,EAAOE,EAAEC,GAAMC,EAAI,IAAIJ,EAAOE,EAAEC,GAAME,GAElCL,EAAOM,GACP,IAAK,IAAIn/B,EAAI,EAAGA,EAAI6+B,EAAOM,GAAGl/B,OAAQD,IAElC6+B,EAAOM,GAAGn/B,GAAK,IAKnC,CACA,SAASo/B,GAASx4B,GACd,OAAO,IAAIwG,SAAQ,CAAC8O,EAAS3N,KACzB,IAAIjF,EAAIgO,EAAIC,EAEZ,SAAS8nB,IAGLT,KACAU,KAAKC,KAAK,eAAgB,CACtBtoB,SAAU,KACNiF,EAAQojB,KAAKE,QAAQC,aAAa,EAEtCC,UAAW,KAOPd,KACArwB,EAAO7H,EAAaE,EAAM,0BAAqE,EAEnGqsB,QAAS0L,GAAgB75B,OAEjC,CACA,GAAqF,QAAhFwS,EAA+B,QAAzBhO,EAAKkqB,KAAU8L,YAAyB,IAAPh2B,OAAgB,EAASA,EAAGk2B,eAA4B,IAAPloB,OAAgB,EAASA,EAAGqoB,OAErHzjB,EAAQojB,KAAKE,QAAQC,kBAEpB,MAAiC,QAAzBloB,EAAKic,KAAU8L,YAAyB,IAAP/nB,OAAgB,EAASA,EAAGgoB,MAIrE,CAMD,MAAMK,EAAS1H,GAAsB,aAarC,OAXA1E,KAAUoM,GAAU,KAEVN,KAAKC,KACPF,IAIA9wB,EAAO7H,EAAaE,EAAM,0BAC9B,EAGGixB,GAAQ,4CAA4C+H,KACtDnV,OAAMrlB,GAAKmJ,EAAOnJ,IAC3B,CAvBIi6B,GAuBJ,KACD5U,OAAMpkB,IAGL,MADAw5B,GAAmB,KACbx5B,CAAK,GAEnB,CACA,IAAIw5B,GAAmB,KACvB,SAASC,GAAUl5B,GAEf,OADAi5B,GAAmBA,IAAoBT,GAASx4B,GACzCi5B,EACX;;;;;;;;;;;;;;;;GAkBA,MAAME,GAAe,IAAI51B,EAAM,IAAM,MAC/B61B,GAAc,iBACdC,GAAuB,uBACvBC,GAAoB,CACtBzd,MAAO,CACHE,SAAU,WACVrH,IAAK,SACLsH,MAAO,MACPud,OAAQ,OAEZ,cAAe,OACfC,SAAU,MAIRC,GAAmB,IAAIv4B,IAAI,CAC7B,CAAC,iCAA+D,KAChE,CAAC,iDAAkD,KACnD,CAAC,8CAA+C,OAEpD,SAASw4B,GAAa15B,GAClB,MAAM+D,EAAS/D,EAAK+D,OACpBpD,EAAQoD,EAAO4T,WAAY3X,EAAM,+BACjC,MAAMkE,EAAMH,EAAOE,SACbH,EAAaC,EAAQs1B,IACrB,WAAWr5B,EAAK+D,OAAO4T,cAAcyhB,KACrC7zB,EAAS,CACXK,OAAQ7B,EAAO6B,OACftF,QAASN,EAAKO,KACdy2B,EAAG,MAED2C,EAAMF,GAAiBv7B,IAAI8B,EAAK+D,OAAOkC,SACzC0zB,IACAp0B,EAAOo0B,IAAMA,GAEjB,MAAM9kB,EAAa7U,EAAKka,iBAIxB,OAHIrF,EAAWxb,SACXkM,EAAOq0B,GAAK/kB,EAAWG,KAAK,MAEzB,GAAG9Q,MAAO,QAAYqB,GAAQ9E,MAAM,IAC/C,CACAwE,eAAe40B,GAAY75B,GACvB,MAAM85B,QAAgBZ,GAAUl5B,GAC1B04B,EAAO9L,KAAU8L,KAEvB,OADA/3B,EAAQ+3B,EAAM14B,EAAM,kBACb85B,EAAQxL,KAAK,CAChByL,MAAOzlB,SAAShP,KAChBpB,IAAKw1B,GAAa15B,GAClBg6B,sBAAuBtB,EAAKE,QAAQqB,4BACpCC,WAAYZ,GACZa,WAAW,IACXC,GAAW,IAAI5zB,SAAQvB,MAAOqQ,EAAS3N,WACjCyyB,EAAOC,QAAQ,CAEjBC,gBAAgB,IAEpB,MAAMC,EAAez6B,EAAaE,EAAM,0BAGlCw6B,EAAoB5N,KAAUhlB,YAAW,KAC3CD,EAAO4yB,EAAa,GACrBpB,GAAaj7B,OAEhB,SAASu8B,IACL7N,KAAU/kB,aAAa2yB,GACvBllB,EAAQ8kB,EACZ,CAGAA,EAAOM,KAAKD,GAAsB7gB,KAAK6gB,GAAsB,KACzD9yB,EAAO4yB,EAAa,GACtB,KAEV;;;;;;;;;;;;;;;;GAkBA,MAAMI,GAAqB,CACvB/3B,SAAU,MACVg4B,UAAW,MACXC,UAAW,MACXC,QAAS,MAEPC,GAAgB,IAChBC,GAAiB,IACjBC,GAAe,SACfC,GAAoB,mBAC1B,MAAMC,GACF33B,YAAYlN,GACR+E,KAAK/E,OAASA,EACd+E,KAAKo5B,gBAAkB,IAC3B,CACArI,QACI,GAAI/wB,KAAK/E,OACL,IACI+E,KAAK/E,OAAO81B,OAEJ,CAAZ,MAAO5tB,GAAK,CAEpB,EAEJ,SAAS48B,GAAMp7B,EAAMkE,EAAK3D,EAAMyb,EAAQ+e,GAAexB,EAASyB,IAC5D,MAAMtmB,EAAM9Q,KAAK8H,KAAKpV,OAAO+kC,OAAOC,YAAc/B,GAAU,EAAG,GAAGlvB,WAC5DgS,EAAOzY,KAAK8H,KAAKpV,OAAO+kC,OAAOE,WAAavf,GAAS,EAAG,GAAG3R,WACjE,IAAI0hB,EAAS,GACb,MAAM/pB,EAAUtD,OAAO0B,OAAO1B,OAAO0B,OAAO,CAAC,EAAGu6B,IAAqB,CAAE3e,MAAOA,EAAM3R,WAAYkvB,OAAQA,EAAOlvB,WAAYqK,MACvH2H,SAGE3hB,GAAK,UAAQT,cACfsG,IACAwrB,EAAShY,GAAarZ,GAAMugC,GAAe16B,GAE3CoT,GAAWjZ,KAEXwJ,EAAMA,GAAOg3B,GAGbl5B,EAAQw5B,WAAa,OAEzB,MAAMC,EAAgB/8B,OAAOg9B,QAAQ15B,GAAS25B,QAAO,CAACC,GAAQj2B,EAAK4L,KAAW,GAAGqqB,IAAQj2B,KAAO4L,MAAU,IAC1G,GAAI4C,GAAiBzZ,IAAkB,UAAXqxB,EAExB,OADA8P,GAAmB33B,GAAO,GAAI6nB,GACvB,IAAIoP,GAAU,MAIzB,MAAMW,EAASxlC,OAAOg4B,KAAKpqB,GAAO,GAAI6nB,EAAQ0P,GAC9C96B,EAAQm7B,EAAQ97B,EAAM,iBAEtB,IACI87B,EAAOC,OAEC,CAAZ,MAAOv9B,GAAK,CACZ,OAAO,IAAI28B,GAAUW,EACzB,CACA,SAASD,GAAmB33B,EAAK6nB,GAC7B,MAAMrQ,EAAKpH,SAASqH,cAAc,KAClCD,EAAG7Y,KAAOqB,EACVwX,EAAGqQ,OAASA,EACZ,MAAMiQ,EAAQ1nB,SAAS2nB,YAAY,cACnCD,EAAME,eAAe,SAAS,GAAM,EAAM5lC,OAAQ,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,MAChGolB,EAAGygB,cAAcH,EACrB;;;;;;;;;;;;;;;;GAuBA,MAAMI,GAAc,kBAMdC,GAAuB,wBAC7B,SAASC,GAAgBt8B,EAAM0B,EAAU66B,EAAUC,EAAa1R,EAAS2R,GACrE97B,EAAQX,EAAK+D,OAAO4T,WAAY3X,EAAM,+BACtCW,EAAQX,EAAK+D,OAAO6B,OAAQ5F,EAAM,mBAClC,MAAMuF,EAAS,CACXK,OAAQ5F,EAAK+D,OAAO6B,OACpBtF,QAASN,EAAKO,KACdg8B,WACAC,cACAxF,EAAG,KACHlM,WAEJ,GAAIppB,aAAoB4f,GAAuB,CAC3C5f,EAAS+f,mBAAmBzhB,EAAK+F,cACjCR,EAAO6I,WAAa1M,EAAS0M,YAAc,IACtC,QAAQ1M,EAASkgB,yBAClBrc,EAAOic,iBAAmBhc,KAAKC,UAAU/D,EAASkgB,wBAGtD,IAAK,MAAOjc,EAAK4L,KAAU7S,OAAOg9B,QAAQe,GAAoB,CAAC,GAC3Dl3B,EAAOI,GAAO4L,CAEtB,CACA,GAAI7P,aAAoBmgB,GAAmB,CACvC,MAAMC,EAASpgB,EAASugB,YAAYjU,QAAOgU,GAAmB,KAAVA,IAChDF,EAAOzoB,OAAS,IAChBkM,EAAOuc,OAASA,EAAO9M,KAAK,KAEpC,CACIhV,EAAKgF,WACLO,EAAOm3B,IAAM18B,EAAKgF,UAItB,MAAM23B,EAAap3B,EACnB,IAAK,MAAMI,KAAOjH,OAAO8pB,KAAKmU,QACFpmC,IAApBomC,EAAWh3B,WACJg3B,EAAWh3B,GAG1B,MAAO,GAAGi3B,GAAe58B,OAAS,QAAY28B,GAAYl8B,MAAM,IACpE,CACA,SAASm8B,IAAe,OAAE74B,IACtB,OAAKA,EAAOE,SAGLH,EAAaC,EAAQs4B,IAFjB,WAAWt4B,EAAO4T,cAAcykB,IAG/C;;;;;;;;;;;;;;;;GAsBA,MAAMS,GAA0B,oBAChC,MAAMC,GACFt5B,cACInI,KAAK0hC,cAAgB,CAAC,EACtB1hC,KAAKu9B,QAAU,CAAC,EAChBv9B,KAAK2hC,yBAA2B,CAAC,EACjC3hC,KAAKie,qBAAuBwQ,GAC5BzuB,KAAKgd,oBAAsBod,GAC3Bp6B,KAAK6c,wBAA0BA,EACnC,CAGAjT,iBAAiBjF,EAAM0B,EAAU66B,EAAUzR,GACvC,IAAIpoB,EACJ1B,EAAuD,QAA1C0B,EAAKrH,KAAK0hC,cAAc/8B,EAAKyR,eAA4B,IAAP/O,OAAgB,EAASA,EAAG8M,QAAS,gDACpG,MAAMtL,EAAMo4B,GAAgBt8B,EAAM0B,EAAU66B,EAAU95B,IAAkBqoB,GACxE,OAAOsQ,GAAMp7B,EAAMkE,EAAKunB,KAC5B,CACAxmB,oBAAoBjF,EAAM0B,EAAU66B,EAAUzR,GAG1C,aAFMzvB,KAAKq5B,kBAAkB10B,GAC7B6sB,GAAmByP,GAAgBt8B,EAAM0B,EAAU66B,EAAU95B,IAAkBqoB,IACxE,IAAItkB,SAAQ,QACvB,CACA2Q,YAAYnX,GACR,MAAM2F,EAAM3F,EAAKyR,OACjB,GAAIpW,KAAK0hC,cAAcp3B,GAAM,CACzB,MAAM,QAAE6J,EAAO,QAAE9I,GAAYrL,KAAK0hC,cAAcp3B,GAChD,OAAI6J,EACOhJ,QAAQ8O,QAAQ9F,IAGvBxO,EAAY0F,EAAS,4CACdA,EAEf,CACA,MAAMA,EAAUrL,KAAK4hC,kBAAkBj9B,GAOvC,OANA3E,KAAK0hC,cAAcp3B,GAAO,CAAEe,WAG5BA,EAAQmd,OAAM,YACHxoB,KAAK0hC,cAAcp3B,EAAI,IAE3Be,CACX,CACAzB,wBAAwBjF,GACpB,MAAMo6B,QAAeP,GAAY75B,GAC3BwP,EAAU,IAAIomB,GAAiB51B,GASrC,OARAo6B,EAAO8C,SAAS,aAAcC,IAC1Bx8B,EAAwB,OAAhBw8B,QAAwC,IAAhBA,OAAyB,EAASA,EAAYC,UAAWp9B,EAAM,sBAE/F,MAAMw2B,EAAUhnB,EAAQ8mB,QAAQ6G,EAAYC,WAC5C,MAAO,CAAEjS,OAAQqL,EAAU,MAA8B,QAAiC,GAC3FkC,KAAKE,QAAQqB,6BAChB5+B,KAAK0hC,cAAc/8B,EAAKyR,QAAU,CAAEjC,WACpCnU,KAAKu9B,QAAQ54B,EAAKyR,QAAU2oB,EACrB5qB,CACX,CACAmlB,6BAA6B30B,EAAM2Z,GAC/B,MAAMygB,EAAS/+B,KAAKu9B,QAAQ54B,EAAKyR,QACjC2oB,EAAOiD,KAAKR,GAAyB,CAAExrB,KAAMwrB,KAA2Bz+B,IACpE,IAAIsE,EACJ,MAAMkyB,EAAmF,QAApElyB,EAAgB,OAAXtE,QAA8B,IAAXA,OAAoB,EAASA,EAAO,UAAuB,IAAPsE,OAAgB,EAASA,EAAGm6B,SACzGtmC,IAAhBq+B,GACAjb,IAAKib,GAETl1B,EAAMM,EAAM,iBAAoD,GACjE04B,KAAKE,QAAQqB,4BACpB,CACAvF,kBAAkB10B,GACd,MAAM2F,EAAM3F,EAAKyR,OAIjB,OAHKpW,KAAK2hC,yBAAyBr3B,KAC/BtK,KAAK2hC,yBAAyBr3B,GAAOyxB,GAAgBp3B,IAElD3E,KAAK2hC,yBAAyBr3B,EACzC,CACIuR,6BAEA,OAAO1C,MAAsBV,MAAeI,IAChD,EAQJ,MAAMopB,GAA+BR,GAErC,MAAMS,GACF/5B,YAAYmhB,GACRtpB,KAAKspB,SAAWA,CACpB,CACA6Y,SAASx9B,EAAM6xB,EAASvkB,GACpB,OAAQukB,EAAQxgB,MACZ,IAAK,SACD,OAAOhW,KAAKoiC,gBAAgBz9B,EAAM6xB,EAAQpP,WAAYnV,GAC1D,IAAK,SACD,OAAOjS,KAAKqiC,gBAAgB19B,EAAM6xB,EAAQpP,YAC9C,QACI,OAAO5hB,EAAU,qCAE7B,EAQJ,MAAM88B,WAAsCJ,GACxC/5B,YAAYif,GACRvE,MAAM,SACN7iB,KAAKonB,WAAaA,CACtB,CAEApe,uBAAuBoe,GACnB,OAAO,IAAIkb,GAA8Blb,EAC7C,CAEAgb,gBAAgBz9B,EAAMsM,EAASgB,GAC3B,OAAO4Z,GAAuBlnB,EAAM,CAChCsM,UACAgB,cACAswB,sBAAuBviC,KAAKonB,WAAWvC,4BAE/C,CAEAwd,gBAAgB19B,EAAMkyB,GAClB,OAAOpB,GAAuB9wB,EAAM,CAChCkyB,uBACA0L,sBAAuBviC,KAAKonB,WAAWvC,4BAE/C,EAOJ,MAAM2d,GACFr6B,cAAgB,CAQhBa,iBAAiBoe,GACb,OAAOkb,GAA8BG,gBAAgBrb,EACzD,EAKJob,GAA0BE,UAAY,QAEtC,IAAI,GAAO,iBACP5jC,GAAU;;;;;;;;;;;;;;;;;AAkBd,MAAM6jC,GACFx6B,YAAYxD,GACR3E,KAAK2E,KAAOA,EACZ3E,KAAK4iC,kBAAoB,IAAI/8B,GACjC,CACAg9B,SACI,IAAIx7B,EAEJ,OADArH,KAAK8iC,wBACoC,QAAhCz7B,EAAKrH,KAAK2E,KAAK2K,mBAAgC,IAAPjI,OAAgB,EAASA,EAAG0K,MAAQ,IACzF,CACAnI,eAAe8D,GAGX,GAFA1N,KAAK8iC,6BACC9iC,KAAK2E,KAAK0W,wBACXrb,KAAK2E,KAAK2K,YACX,OAAO,KAEX,MAAM+D,QAAoBrT,KAAK2E,KAAK2K,YAAYzB,WAAWH,GAC3D,MAAO,CAAE2F,cACb,CACA0vB,qBAAqBnV,GAEjB,GADA5tB,KAAK8iC,uBACD9iC,KAAK4iC,kBAAkBtkC,IAAIsvB,GAC3B,OAEJ,MAAMoV,EAAchjC,KAAK2E,KAAKmZ,kBAAiBrQ,IAC3CmgB,GAAmB,OAATngB,QAA0B,IAATA,OAAkB,EAASA,EAAK0C,gBAAgBkD,cAAgB,KAAK,IAEpGrT,KAAK4iC,kBAAkB9/B,IAAI8qB,EAAUoV,GACrChjC,KAAKijC,wBACT,CACAC,wBAAwBtV,GACpB5tB,KAAK8iC,uBACL,MAAME,EAAchjC,KAAK4iC,kBAAkB//B,IAAI+qB,GAC1CoV,IAGLhjC,KAAK4iC,kBAAkBlrB,OAAOkW,GAC9BoV,IACAhjC,KAAKijC,yBACT,CACAH,uBACIx9B,EAAQtF,KAAK2E,KAAK0W,uBAAwB,wCAC9C,CACA4nB,yBACQjjC,KAAK4iC,kBAAkBvU,KAAO,EAC9BruB,KAAK2E,KAAKsQ,yBAGVjV,KAAK2E,KAAKuQ,uBAElB;;;;;;;;;;;;;;;;GAmBJ,SAASiuB,GAAsB5pB,GAC3B,OAAQA,GACJ,IAAK,OACD,MAAO,OACX,IAAK,cACD,MAAO,KACX,IAAK,SACD,MAAO,YACX,IAAK,UACD,MAAO,UACX,QACI,OAEZ,CAEA,SAAS6pB,GAAa7pB,IAClB,QAAmB,IAAI,KAAU,QAAkC,CAAC8pB,GAAa18B,QAASP,MACtF,MAAMD,EAAMk9B,EAAUC,YAAY,OAAO/8B,eACnCmU,EAA2B2oB,EAAUC,YAAY,cACjD,OAAE/4B,EAAM,WAAE+R,GAAenW,EAAIQ,QACnC,MAAO,EAAER,EAAKuU,KACVpV,EAAQiF,IAAWA,EAAO6N,SAAS,KAAM,kBAAuD,CAAEnT,QAASkB,EAAIjB,OAE/GI,IAAyB,OAAfgX,QAAsC,IAAfA,OAAwB,EAASA,EAAWlE,SAAS,MAAO,iBAAqD,CAC9InT,QAASkB,EAAIjB,OAEjB,MAAMwD,EAAS,CACX6B,SACA+R,aACA/C,iBACA3O,QAAS,iCACTwI,aAAc,6BACdjH,UAAW,QACXwP,iBAAkBrC,GAAkBC,IAElCgqB,EAAe,IAAI9oB,GAAStU,EAAKuU,EAA0BhS,GAEjE,OADA9B,EAAwB28B,EAAcn9B,GAC/Bm9B,CACV,EAlBM,CAkBJp9B,EAAKuU,EAAyB,GAClC,UAKE8oB,qBAAqB,YAKrBC,4BAA2B,CAACJ,EAAWK,EAAqBC,KAC7D,MAAMC,EAAuBP,EAAUC,YAAY,iBACnDM,EAAqBl9B,YAAY,MAErC,QAAmB,IAAI,KAAU,iBAAoD28B,IACjF,MAAM1+B,EAAOua,GAAUmkB,EAAUC,YAAY,QAAkC/8B,gBAC/E,MAAO,CAAC5B,GAAQ,IAAIg+B,GAAYh+B,GAAzB,CAAgCA,EAAK,GAC7C,WAAuC6+B,qBAAqB,cAC/D,QAAgB,GAAM1kC,GAASqkC,GAAsB5pB,KAErD,QAAgB,GAAMza,GAAS,UACnC;;;;;;;;;;;;;;;;GAkBA,MAAM+kC,GAA2B,IAC3BC,IAAoB,QAAuB,sBAAwBD,GACzE,IAAIE,GAAoB,KACxB,MAAMC,GAAqBn7B,GAAQe,MAAO6D,IACtC,MAAMw2B,EAAgBx2B,SAAeA,EAAKD,mBACpC02B,EAAaD,KACd,IAAI92B,MAAOG,UAAYH,KAAK4B,MAAMk1B,EAAc11B,eAAiB,IACtE,GAAI21B,GAAcA,EAAaJ,GAC3B,OAGJ,MAAM7yB,EAA4B,OAAlBgzB,QAA4C,IAAlBA,OAA2B,EAASA,EAAcr2B,MACxFm2B,KAAsB9yB,IAG1B8yB,GAAoB9yB,QACd7H,MAAMP,EAAK,CACbiB,OAAQmH,EAAU,OAAS,SAC3BzG,QAASyG,EACH,CACE,cAAiB,UAAUA,KAE7B,CAAC,IACT,EAUN,SAASkzB,GAAQh+B,GAAM,WACnB,MAAME,GAAW,QAAaF,EAAK,QACnC,GAAIE,EAASC,gBACT,OAAOD,EAASE,eAEpB,MAAM5B,EAAOuB,EAAeC,EAAK,CAC7BgB,sBAAuB86B,GACvBp7B,YAAa,CACT0uB,GACAjH,GACAG,MAGF2V,GAAmB,QAAuB,oBAChD,GAAIA,EAAkB,CAClB,MAAMC,EAAaL,GAAkBI,GACrCvmB,GAAuBlZ,EAAM0/B,GAAY,IAAMA,EAAW1/B,EAAK2K,eAC/DwO,GAAiBnZ,GAAM8I,GAAQ42B,EAAW52B,IAC9C,CACA,MAAM62B,GAAmB,QAAuB,QAIhD,OAHIA,GACAllB,GAAoBza,EAAM,UAAU2/B,KAEjC3/B,CACX,CACAy+B,GAAa,U;;;;;;;;;;;;;;;;;ACvxSb,MAiEMmB,EAAsB,SAAU5lC,GAElC,MAAM6lC,EAAM,GACZ,IAAI/kC,EAAI,EACR,IAAK,IAAI1B,EAAI,EAAGA,EAAIY,EAAIX,OAAQD,IAAK,CACjC,IAAI0mC,EAAI9lC,EAAI+lC,WAAW3mC,GACnB0mC,EAAI,IACJD,EAAI/kC,KAAOglC,EAENA,EAAI,MACTD,EAAI/kC,KAAQglC,GAAK,EAAK,IACtBD,EAAI/kC,KAAY,GAAJglC,EAAU,KAEA,SAAZ,MAAJA,IACN1mC,EAAI,EAAIY,EAAIX,QACyB,SAAZ,MAAxBW,EAAI+lC,WAAW3mC,EAAI,KAEpB0mC,EAAI,QAAgB,KAAJA,IAAe,KAA6B,KAAtB9lC,EAAI+lC,aAAa3mC,IACvDymC,EAAI/kC,KAAQglC,GAAK,GAAM,IACvBD,EAAI/kC,KAASglC,GAAK,GAAM,GAAM,IAC9BD,EAAI/kC,KAASglC,GAAK,EAAK,GAAM,IAC7BD,EAAI/kC,KAAY,GAAJglC,EAAU,MAGtBD,EAAI/kC,KAAQglC,GAAK,GAAM,IACvBD,EAAI/kC,KAASglC,GAAK,EAAK,GAAM,IAC7BD,EAAI/kC,KAAY,GAAJglC,EAAU,IAE9B,CACA,OAAOD,CACX,EAOMG,EAAoB,SAAUC,GAEhC,MAAMJ,EAAM,GACZ,IAAIK,EAAM,EAAGJ,EAAI,EACjB,MAAOI,EAAMD,EAAM5mC,OAAQ,CACvB,MAAM8mC,EAAKF,EAAMC,KACjB,GAAIC,EAAK,IACLN,EAAIC,KAAOM,OAAOC,aAAaF,QAE9B,GAAIA,EAAK,KAAOA,EAAK,IAAK,CAC3B,MAAMG,EAAKL,EAAMC,KACjBL,EAAIC,KAAOM,OAAOC,cAAoB,GAALF,IAAY,EAAW,GAALG,EACvD,MACK,GAAIH,EAAK,KAAOA,EAAK,IAAK,CAE3B,MAAMG,EAAKL,EAAMC,KACXK,EAAKN,EAAMC,KACXM,EAAKP,EAAMC,KACXO,IAAY,EAALN,IAAW,IAAa,GAALG,IAAY,IAAa,GAALC,IAAY,EAAW,GAALC,GAClE,MACJX,EAAIC,KAAOM,OAAOC,aAAa,OAAUI,GAAK,KAC9CZ,EAAIC,KAAOM,OAAOC,aAAa,OAAc,KAAJI,GAC7C,KACK,CACD,MAAMH,EAAKL,EAAMC,KACXK,EAAKN,EAAMC,KACjBL,EAAIC,KAAOM,OAAOC,cAAoB,GAALF,IAAY,IAAa,GAALG,IAAY,EAAW,GAALC,EAC3E,CACJ,CACA,OAAOV,EAAI7qB,KAAK,GACpB,EAIM0rB,EAAS,CAIXC,eAAgB,KAIhBC,eAAgB,KAKhBC,sBAAuB,KAKvBC,sBAAuB,KAKvBC,kBAAmB,iEAIfC,mBACA,OAAO3lC,KAAK0lC,kBAAoB,KACpC,EAIIE,2BACA,OAAO5lC,KAAK0lC,kBAAoB,KACpC,EAQAG,mBAAoC,oBAATC,KAU3BC,gBAAgBC,EAAOC,GACnB,IAAKl/B,MAAMC,QAAQg/B,GACf,MAAMtgC,MAAM,iDAEhB1F,KAAKkmC,QACL,MAAMC,EAAgBF,EAChBjmC,KAAKwlC,sBACLxlC,KAAKslC,eACLc,EAAS,GACf,IAAK,IAAIroC,EAAI,EAAGA,EAAIioC,EAAMhoC,OAAQD,GAAK,EAAG,CACtC,MAAMsoC,EAAQL,EAAMjoC,GACduoC,EAAYvoC,EAAI,EAAIioC,EAAMhoC,OAC1BuoC,EAAQD,EAAYN,EAAMjoC,EAAI,GAAK,EACnCyoC,EAAYzoC,EAAI,EAAIioC,EAAMhoC,OAC1ByoC,EAAQD,EAAYR,EAAMjoC,EAAI,GAAK,EACnC2oC,EAAWL,GAAS,EACpBM,GAAqB,EAARN,IAAiB,EAAME,GAAS,EACnD,IAAIK,GAAqB,GAARL,IAAiB,EAAME,GAAS,EAC7CI,EAAmB,GAARJ,EACVD,IACDK,EAAW,GACNP,IACDM,EAAW,KAGnBR,EAAOlsB,KAAKisB,EAAcO,GAAWP,EAAcQ,GAAWR,EAAcS,GAAWT,EAAcU,GACzG,CACA,OAAOT,EAAOzsB,KAAK,GACvB,EASAmtB,aAAad,EAAOC,GAGhB,OAAIjmC,KAAK6lC,qBAAuBI,EACrBc,KAAKf,GAEThmC,KAAK+lC,gBAAgBxB,EAAoByB,GAAQC,EAC5D,EASAe,aAAahB,EAAOC,GAGhB,OAAIjmC,KAAK6lC,qBAAuBI,EACrBH,KAAKE,GAETrB,EAAkB3kC,KAAKinC,wBAAwBjB,EAAOC,GACjE,EAgBAgB,wBAAwBjB,EAAOC,GAC3BjmC,KAAKkmC,QACL,MAAMgB,EAAgBjB,EAChBjmC,KAAKylC,sBACLzlC,KAAKulC,eACLa,EAAS,GACf,IAAK,IAAIroC,EAAI,EAAGA,EAAIioC,EAAMhoC,QAAS,CAC/B,MAAMqoC,EAAQa,EAAclB,EAAMmB,OAAOppC,MACnCuoC,EAAYvoC,EAAIioC,EAAMhoC,OACtBuoC,EAAQD,EAAYY,EAAclB,EAAMmB,OAAOppC,IAAM,IACzDA,EACF,MAAMyoC,EAAYzoC,EAAIioC,EAAMhoC,OACtByoC,EAAQD,EAAYU,EAAclB,EAAMmB,OAAOppC,IAAM,KACzDA,EACF,MAAMqpC,EAAYrpC,EAAIioC,EAAMhoC,OACtBqpC,EAAQD,EAAYF,EAAclB,EAAMmB,OAAOppC,IAAM,GAE3D,KADEA,EACW,MAATsoC,GAA0B,MAATE,GAA0B,MAATE,GAA0B,MAATY,EACnD,MAAM3hC,QAEV,MAAMghC,EAAYL,GAAS,EAAME,GAAS,EAE1C,GADAH,EAAOlsB,KAAKwsB,GACE,KAAVD,EAAc,CACd,MAAME,EAAaJ,GAAS,EAAK,IAASE,GAAS,EAEnD,GADAL,EAAOlsB,KAAKysB,GACE,KAAVU,EAAc,CACd,MAAMT,EAAaH,GAAS,EAAK,IAAQY,EACzCjB,EAAOlsB,KAAK0sB,EAChB,CACJ,CACJ,CACA,OAAOR,CACX,EAMAF,QACI,IAAKlmC,KAAKslC,eAAgB,CACtBtlC,KAAKslC,eAAiB,CAAC,EACvBtlC,KAAKulC,eAAiB,CAAC,EACvBvlC,KAAKwlC,sBAAwB,CAAC,EAC9BxlC,KAAKylC,sBAAwB,CAAC,EAE9B,IAAK,IAAI1nC,EAAI,EAAGA,EAAIiC,KAAK2lC,aAAa3nC,OAAQD,IAC1CiC,KAAKslC,eAAevnC,GAAKiC,KAAK2lC,aAAawB,OAAOppC,GAClDiC,KAAKulC,eAAevlC,KAAKslC,eAAevnC,IAAMA,EAC9CiC,KAAKwlC,sBAAsBznC,GAAKiC,KAAK4lC,qBAAqBuB,OAAOppC,GACjEiC,KAAKylC,sBAAsBzlC,KAAKwlC,sBAAsBznC,IAAMA,EAExDA,GAAKiC,KAAK0lC,kBAAkB1nC,SAC5BgC,KAAKulC,eAAevlC,KAAK4lC,qBAAqBuB,OAAOppC,IAAMA,EAC3DiC,KAAKylC,sBAAsBzlC,KAAK2lC,aAAawB,OAAOppC,IAAMA,EAGtE,CACJ,GAKEupC,EAAe,SAAU3oC,GAC3B,MAAM4oC,EAAYhD,EAAoB5lC,GACtC,OAAO0mC,EAAOU,gBAAgBwB,GAAW,EAC7C,EAKMC,EAAgC,SAAU7oC,GAE5C,OAAO2oC,EAAa3oC,GAAKI,QAAQ,MAAO,GAC5C,EAUM0oC,EAAe,SAAU9oC,GAC3B,IACI,OAAO0mC,EAAO2B,aAAaroC,GAAK,EAIpC,CAFA,MAAOwE,GACHoe,QAAQnd,MAAM,wBAAyBjB,EAC3C,CACA,OAAO,IACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FA,SAASlB,IACL,MAAyB,qBAAdd,WAC2B,kBAA3BA,UAAU,aACVA,UAAU,aAGV,EAEf,CAQA,SAASumC,IACL,MAA0B,qBAAXzsC,WAGRA,OAAO,YAAcA,OAAO,aAAeA,OAAO,cACrD,oDAAoDiF,KAAK+B,IACjE,CAqBA,SAAS0lC,IACL,MAAMC,EAA4B,kBAAXC,OACjBA,OAAOD,QACY,kBAAZjnC,QACHA,QAAQinC,aACR1sC,EACV,MAA0B,kBAAZ0sC,QAAuC1sC,IAAf0sC,EAAQ1pB,EAClD,CAMA,SAAS4pB,IACL,MAA6B,kBAAd3mC,WAAmD,gBAAzBA,UAAU,UACvD,CAMA,SAAS4mC,IACL,MAAM1oC,EAAK4C,IACX,OAAO5C,EAAGX,QAAQ,UAAY,GAAKW,EAAGX,QAAQ,aAAe,CACjE,CAuBA,SAASspC,IACL,IACI,MAA4B,kBAAdlV,SAIlB,CAFA,MAAO3vB,GACH,OAAO,CACX,CACJ,CAQA,SAAS8kC,IACL,OAAO,IAAI98B,SAAQ,CAAC8O,EAAS3N,KACzB,IACI,IAAI47B,GAAW,EACf,MAAMC,EAAgB,0DAChBz+B,EAAUpC,KAAKwrB,UAAUG,KAAKkV,GACpCz+B,EAAQ0+B,UAAY,KAChB1+B,EAAQ3G,OAAOguB,QAEVmX,GACD5gC,KAAKwrB,UAAUC,eAAeoV,GAElCluB,GAAQ,EAAK,EAEjBvQ,EAAQ2+B,gBAAkB,KACtBH,GAAW,CAAK,EAEpBx+B,EAAQqsB,QAAU,KACd,IAAI1uB,EACJiF,GAAiC,QAAxBjF,EAAKqC,EAAQtF,aAA0B,IAAPiD,OAAgB,EAASA,EAAGxC,UAAY,GAAG,CAK5F,CAFA,MAAOT,GACHkI,EAAOlI,EACX,IAER,CAgBA,SAASkkC,IACL,GAAoB,qBAAThhC,KACP,OAAOA,KAEX,GAAsB,qBAAXrM,OACP,OAAOA,OAEX,GAAsB,qBAAX,EAAAstC,EACP,OAAO,EAAAA,EAEX,MAAM,IAAI7iC,MAAM,kCACpB;;;;;;;;;;;;;;;;GAkBA,MAAM8iC,EAAwB,IAAMF,IAAYG,sBAM1CC,EAA6B,KAC/B,GAAuB,qBAAZC,QACP,OAEJ,MAAMC,EAAqB,qCAAYH,sBACvC,OAAIG,EACOz+B,KAAK4E,MAAM65B,QADtB,CAEA,EAEEC,EAAwB,KAC1B,GAAwB,qBAAb5vB,SACP,OAEJ,IAAIrZ,EACJ,IACIA,EAAQqZ,SAAS6vB,OAAOlpC,MAAM,gCAMlC,CAJA,MAAOuD,GAGH,MACJ,CACA,MAAM2L,EAAUlP,GAAS6nC,EAAa7nC,EAAM,IAC5C,OAAOkP,GAAW3E,KAAK4E,MAAMD,EAAQ,EAQnCi6B,EAAc,KAChB,IACI,OAAQP,KACJE,KACAG,GAWR,CATA,MAAO1lC,GAQH,YADAoe,QAAQC,KAAK,+CAA+Cre,IAEhE,GAQE6lC,EAA0BC,IAAkB,IAAI5hC,EAAIgO,EAAI,OAA6F,QAArFA,EAA8B,QAAxBhO,EAAK0hC,WAAkC,IAAP1hC,OAAgB,EAASA,EAAG6hC,qBAAkC,IAAP7zB,OAAgB,EAASA,EAAG4zB,EAAY,EA8BrME,EAAsB,KAAQ,IAAI9hC,EAAI,OAAgC,QAAxBA,EAAK0hC,WAAkC,IAAP1hC,OAAgB,EAASA,EAAGqB,MAAM,EAMhH0gC,EAA0BlkC,IAAW,IAAImC,EAAI,OAAgC,QAAxBA,EAAK0hC,WAAkC,IAAP1hC,OAAgB,EAASA,EAAG,IAAInC,IAAO;;;;;;;;;;;;;;;;;AAkBlI,MAAMmkC,EACFlhC,cACInI,KAAKsM,OAAS,OACdtM,KAAKia,QAAU,OACfja,KAAKqL,QAAU,IAAIF,SAAQ,CAAC8O,EAAS3N,KACjCtM,KAAKia,QAAUA,EACfja,KAAKsM,OAASA,CAAM,GAE5B,CAMAg9B,aAAat0B,GACT,MAAO,CAAC5Q,EAAO8R,KACP9R,EACApE,KAAKsM,OAAOlI,GAGZpE,KAAKia,QAAQ/D,GAEO,oBAAblB,IAGPhV,KAAKqL,QAAQmd,OAAM,SAGK,IAApBxT,EAAShX,OACTgX,EAAS5Q,GAGT4Q,EAAS5Q,EAAO8R,GAExB,CAER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyGJ,MAAMqzB,EAAa,gBAGnB,MAAMC,UAAsB9jC,MACxByC,YAEAvD,EAAMC,EAEN+H,GACIiW,MAAMhe,GACN7E,KAAK4E,KAAOA,EACZ5E,KAAK4M,WAAaA,EAElB5M,KAAKkF,KAAOqkC,EAGZlmC,OAAOglB,eAAeroB,KAAMwpC,EAAclmC,WAGtCoC,MAAM+jC,mBACN/jC,MAAM+jC,kBAAkBzpC,KAAM0pC,EAAapmC,UAAUI,OAE7D,EAEJ,MAAMgmC,EACFvhC,YAAYwhC,EAASC,EAAaC,GAC9B7pC,KAAK2pC,QAAUA,EACf3pC,KAAK4pC,YAAcA,EACnB5pC,KAAK6pC,OAASA,CAClB,CACAnmC,OAAOkB,KAAS0mB,GACZ,MAAM1e,EAAa0e,EAAK,IAAM,CAAC,EACzBwe,EAAW,GAAG9pC,KAAK2pC,WAAW/kC,IAC9BmlC,EAAW/pC,KAAK6pC,OAAOjlC,GACvBC,EAAUklC,EAAWC,EAAgBD,EAAUn9B,GAAc,QAE7Dq9B,EAAc,GAAGjqC,KAAK4pC,gBAAgB/kC,MAAYilC,MAClD1lC,EAAQ,IAAIolC,EAAcM,EAAUG,EAAar9B,GACvD,OAAOxI,CACX,EAEJ,SAAS4lC,EAAgBD,EAAUze,GAC/B,OAAOye,EAAShrC,QAAQmrC,GAAS,CAAC79B,EAAG/B,KACjC,MAAM4L,EAAQoV,EAAKhhB,GACnB,OAAgB,MAAT4L,EAAgB6uB,OAAO7uB,GAAS,IAAI5L,KAAO,GAE1D,CACA,MAAM4/B,EAAU;;;;;;;;;;;;;;;;GA8KhB,SAASC,EAAQnnB,GACb,IAAK,MAAM1Y,KAAO0Y,EACd,GAAI3f,OAAOC,UAAUC,eAAetD,KAAK+iB,EAAK1Y,GAC1C,OAAO,EAGf,OAAO,CACX,CAaA,SAAS8/B,EAAUC,EAAGC,GAClB,GAAID,IAAMC,EACN,OAAO,EAEX,MAAMC,EAAQlnC,OAAO8pB,KAAKkd,GACpBG,EAAQnnC,OAAO8pB,KAAKmd,GAC1B,IAAK,MAAM9qC,KAAK+qC,EAAO,CACnB,IAAKC,EAAMpyB,SAAS5Y,GAChB,OAAO,EAEX,MAAMirC,EAAQJ,EAAE7qC,GACVkrC,EAAQJ,EAAE9qC,GAChB,GAAImrC,EAASF,IAAUE,EAASD,IAC5B,IAAKN,EAAUK,EAAOC,GAClB,OAAO,OAGV,GAAID,IAAUC,EACf,OAAO,CAEf,CACA,IAAK,MAAMlrC,KAAKgrC,EACZ,IAAKD,EAAMnyB,SAAS5Y,GAChB,OAAO,EAGf,OAAO,CACX,CACA,SAASmrC,EAASC,GACd,OAAiB,OAAVA,GAAmC,kBAAVA,CACpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,SAASC,EAAYC,GACjB,MAAM5gC,EAAS,GACf,IAAK,MAAOI,EAAK4L,KAAU7S,OAAOg9B,QAAQyK,GAClC/jC,MAAMC,QAAQkP,GACdA,EAAMklB,SAAQ2P,IACV7gC,EAAOgQ,KAAK8wB,mBAAmB1gC,GAAO,IAAM0gC,mBAAmBD,GAAU,IAI7E7gC,EAAOgQ,KAAK8wB,mBAAmB1gC,GAAO,IAAM0gC,mBAAmB90B,IAGvE,OAAOhM,EAAOlM,OAAS,IAAMkM,EAAOyP,KAAK,KAAO,EACpD,CAKA,SAASsxB,EAAkBJ,GACvB,MAAM7nB,EAAM,CAAC,EACPkoB,EAASL,EAAY9rC,QAAQ,MAAO,IAAIC,MAAM,KAOpD,OANAksC,EAAO9P,SAAQxtB,IACX,GAAIA,EAAO,CACP,MAAOtD,EAAK4L,GAAStI,EAAM5O,MAAM,KACjCgkB,EAAImoB,mBAAmB7gC,IAAQ6gC,mBAAmBj1B,EACtD,KAEG8M,CACX,CAIA,SAASooB,EAAmBviC,GACxB,MAAMwiC,EAAaxiC,EAAInK,QAAQ,KAC/B,IAAK2sC,EACD,MAAO,GAEX,MAAMC,EAAgBziC,EAAInK,QAAQ,IAAK2sC,GACvC,OAAOxiC,EAAI1J,UAAUksC,EAAYC,EAAgB,EAAIA,OAAgBpwC,EACzE;;;;;;;;;;;;;;;;GA0QA,SAASqwC,EAAgBC,EAAUC,GAC/B,MAAMC,EAAQ,IAAIC,EAAcH,EAAUC,GAC1C,OAAOC,EAAME,UAAU70B,KAAK20B,EAChC,CAKA,MAAMC,EAMFxjC,YAAYqjC,EAAUC,GAClBzrC,KAAK6rC,UAAY,GACjB7rC,KAAK8rC,aAAe,GACpB9rC,KAAK+rC,cAAgB,EAErB/rC,KAAKgsC,KAAO7gC,QAAQ8O,UACpBja,KAAKisC,WAAY,EACjBjsC,KAAKyrC,cAAgBA,EAIrBzrC,KAAKgsC,KACAztB,MAAK,KACNitB,EAASxrC,KAAK,IAEbwoB,OAAMrlB,IACPnD,KAAKoE,MAAMjB,EAAE,GAErB,CACAgb,KAAKjI,GACDlW,KAAKksC,iBAAiB/sB,IAClBA,EAAShB,KAAKjI,EAAM,GAE5B,CACA9R,MAAMA,GACFpE,KAAKksC,iBAAiB/sB,IAClBA,EAAS/a,MAAMA,EAAM,IAEzBpE,KAAK+wB,MAAM3sB,EACf,CACA+nC,WACInsC,KAAKksC,iBAAiB/sB,IAClBA,EAASgtB,UAAU,IAEvBnsC,KAAK+wB,OACT,CAOA6a,UAAUluB,EAAgBtZ,EAAO+nC,GAC7B,IAAIhtB,EACJ,QAAuBjkB,IAAnBwiB,QACUxiB,IAAVkJ,QACalJ,IAAbixC,EACA,MAAM,IAAIzmC,MAAM,qBAQhByZ,EALAitB,EAAqB1uB,EAAgB,CACrC,OACA,QACA,aAEWA,EAGA,CACPS,KAAMT,EACNtZ,QACA+nC,iBAGcjxC,IAAlBikB,EAAShB,OACTgB,EAAShB,KAAOkuB,QAEGnxC,IAAnBikB,EAAS/a,QACT+a,EAAS/a,MAAQioC,QAEKnxC,IAAtBikB,EAASgtB,WACThtB,EAASgtB,SAAWE,GAExB,MAAMC,EAAQtsC,KAAKusC,eAAex1B,KAAK/W,KAAMA,KAAK6rC,UAAU7tC,QAsB5D,OAlBIgC,KAAKisC,WAELjsC,KAAKgsC,KAAKztB,MAAK,KACX,IACQve,KAAKwsC,WACLrtB,EAAS/a,MAAMpE,KAAKwsC,YAGpBrtB,EAASgtB,UAKjB,CAFA,MAAOhpC,GAEP,CACM,IAGdnD,KAAK6rC,UAAU3xB,KAAKiF,GACbmtB,CACX,CAGAC,eAAexuC,QACY7C,IAAnB8E,KAAK6rC,gBAAiD3wC,IAAtB8E,KAAK6rC,UAAU9tC,YAG5CiC,KAAK6rC,UAAU9tC,GACtBiC,KAAK+rC,eAAiB,EACK,IAAvB/rC,KAAK+rC,oBAA8C7wC,IAAvB8E,KAAKyrC,eACjCzrC,KAAKyrC,cAAczrC,MAE3B,CACAksC,gBAAgBO,GACZ,IAAIzsC,KAAKisC,UAMT,IAAK,IAAIluC,EAAI,EAAGA,EAAIiC,KAAK6rC,UAAU7tC,OAAQD,IACvCiC,KAAK0sC,QAAQ3uC,EAAG0uC,EAExB,CAIAC,QAAQ3uC,EAAG0uC,GAGPzsC,KAAKgsC,KAAKztB,MAAK,KACX,QAAuBrjB,IAAnB8E,KAAK6rC,gBAAiD3wC,IAAtB8E,KAAK6rC,UAAU9tC,GAC/C,IACI0uC,EAAGzsC,KAAK6rC,UAAU9tC,GAStB,CAPA,MAAOoF,GAIoB,qBAAZoe,SAA2BA,QAAQnd,OAC1Cmd,QAAQnd,MAAMjB,EAEtB,CACJ,GAER,CACA4tB,MAAM4b,GACE3sC,KAAKisC,YAGTjsC,KAAKisC,WAAY,OACL/wC,IAARyxC,IACA3sC,KAAKwsC,WAAaG,GAItB3sC,KAAKgsC,KAAKztB,MAAK,KACXve,KAAK6rC,eAAY3wC,EACjB8E,KAAKyrC,mBAAgBvwC,CAAS,IAEtC,EAoBJ,SAASkxC,EAAqBppB,EAAK4pB,GAC/B,GAAmB,kBAAR5pB,GAA4B,OAARA,EAC3B,OAAO,EAEX,IAAK,MAAMlZ,KAAU8iC,EACjB,GAAI9iC,KAAUkZ,GAA8B,oBAAhBA,EAAIlZ,GAC5B,OAAO,EAGf,OAAO,CACX,CACA,SAASuiC,IAET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6UA,SAASQ,EAAmBlD,GACxB,OAAIA,GAAWA,EAAQmD,UACZnD,EAAQmD,UAGRnD,CAEf,C,oECrhEA,IAAIoD,EAAS,2BACTC,EAAe,4CACfC,EAA0B,mJAC1BC,EAAa,WAGf,IAFA,IAAIC,EAAUl0B,SAASm0B,iBAAiB,gBAAiBnvC,OAAO8uC,EAAQ,OAE/DhvC,EAAI,EAAGA,EAAIovC,EAAQnvC,OAAQD,IAAK,CACvC,IAAIsvC,EAASF,EAAQpvC,GAErB,GAAKivC,EAAa9sC,KAAKmtC,EAAOC,KAI9B,OAAOD,CACT,CAEA,OAAO,IACT,EAEIE,EAAe,SAAsBrjC,GACvC,IAAIsjC,EAActjC,IAAWA,EAAOujC,qBAAuB,8BAAgC,GACvFJ,EAASp0B,SAASqH,cAAc,UACpC+sB,EAAOC,IAAM,GAAGrvC,OAAO8uC,GAAQ9uC,OAAOuvC,GACtC,IAAIE,EAAaz0B,SAAS00B,MAAQ10B,SAAShP,KAE3C,IAAKyjC,EACH,MAAM,IAAIhoC,MAAM,+EAIlB,OADAgoC,EAAWpsB,YAAY+rB,GAChBA,CACT,EAEIO,EAAkB,SAAyBC,EAAQC,GAChDD,GAAWA,EAAOE,kBAIvBF,EAAOE,iBAAiB,CACtB7oC,KAAM,YACNpG,QAAS,SACTgvC,UAAWA,GAEf,EAEIE,EAAgB,KAChBC,EAAa,SAAoB/jC,GAEnC,OAAsB,OAAlB8jC,IAIJA,EAAgB,IAAI7iC,SAAQ,SAAU8O,EAAS3N,GAC7C,GAAsB,qBAAXrR,OAWX,GAJIA,OAAOizC,QAAUhkC,GACnBqX,QAAQ4sB,KAAKlB,GAGXhyC,OAAOizC,OACTj0B,EAAQhf,OAAOizC,aAIjB,IACE,IAAIb,EAASH,IAETG,GAAUnjC,EACZqX,QAAQ4sB,KAAKlB,GACHI,IACVA,EAASE,EAAarjC,IAGxBmjC,EAAO3rB,iBAAiB,QAAQ,WAC1BzmB,OAAOizC,OACTj0B,EAAQhf,OAAOizC,QAEf5hC,EAAO,IAAI5G,MAAM,2BAErB,IACA2nC,EAAO3rB,iBAAiB,SAAS,WAC/BpV,EAAO,IAAI5G,MAAM,4BACnB,GAIF,CAHE,MAAOtB,GAEP,YADAkI,EAAOlI,EAET,MAnCE6V,EAAQ,KAoCZ,KA3CS+zB,CA6CX,EACII,EAAa,SAAoBC,EAAapqC,EAAM6pC,GACtD,GAAoB,OAAhBO,EACF,OAAO,KAGT,IAAIR,EAASQ,EAAYC,WAAMpzC,EAAW+I,GAE1C,OADA2pC,EAAgBC,EAAQC,GACjBD,CACT,EAIIU,EAAkBpjC,QAAQ8O,UAAUsE,MAAK,WAC3C,OAAO0vB,EAAW,KACpB,IACIO,GAAa,EACjBD,EAAgB,UAAS,SAAU5B,GAC5B6B,GACHjtB,QAAQ4sB,KAAKxB,EAEjB,IACA,IAAI8B,EAAa,WACf,IAAK,IAAIC,EAAOnrB,UAAUvlB,OAAQiG,EAAO,IAAI8C,MAAM2nC,GAAOt4B,EAAO,EAAGA,EAAOs4B,EAAMt4B,IAC/EnS,EAAKmS,GAAQmN,UAAUnN,GAGzBo4B,GAAa,EACb,IAAIV,EAAY3gC,KAAKiD,MACrB,OAAOm+B,EAAgBhwB,MAAK,SAAU8vB,GACpC,OAAOD,EAAWC,EAAapqC,EAAM6pC,EACvC,GACF,C;;;;;;ACpHA,MAAMa,EAAQ,CACVC,GAAI,YACJC,GAAI,2BACJC,GAAI,eACJC,GAAI,gBACJC,GAAI,mBACJC,GAAI,4BACJC,GAAI,qBACJC,GAAI,qBACJC,GAAI,kBACJC,GAAI,qBACJC,GAAI,qBACJC,GAAI,yBACJC,GAAI,aACJC,GAAI,4BACJC,GAAI,iBACJC,GAAI,eACJC,GAAI,mBACJC,GAAI,mBACJC,GAAI,qDACJC,GAAI,oBACJC,GAAI,8CAEFC,EAAc,CAChBrB,GAAI,cACJC,GAAI,6BACJC,GAAI,iBACJC,GAAI,kBACJC,GAAI,qBACJC,GAAI,8BACJC,GAAI,uBACJC,GAAI,uBACJC,GAAI,oBACJC,GAAI,uBACJC,GAAI,uBACJC,GAAI,2BACJC,GAAI,eACJC,GAAI,8BACJC,GAAI,mBACJC,GAAI,iBACJC,GAAI,qBACJC,GAAI,qBACJC,GAAI,uDACJC,GAAI,sBACJC,GAAI,gDAgDFE,EAAahmC,IACf,GAAKA,EAGL,OAAOnD,MAAMC,QAAQkD,GAAUA,EAAO,GAAKA,EAAOimC,MAAM,EAG5D,SAASC,EAAelmC,EAAQmmC,GAC5B,OAAOtpC,MAAMC,QAAQkD,GAAUA,EAAO,GAAKA,EAAOmmC,EACtD,CACA,SAASlG,EAAQj0B,GACb,OAAc,OAAVA,QAA4Bhb,IAAVgb,GAAiC,KAAVA,MAGzCnP,MAAMC,QAAQkP,IAA2B,IAAjBA,EAAMlY,OAItC,CAEA,MAAMsyC,EAAiB,CAACp6B,EAAOhM,KAC3B,GAAIigC,EAAQj0B,GACR,OAAO,EAEX,MAAMi6B,EAASD,EAAUhmC,GACzB,GAAInD,MAAMC,QAAQkP,GACd,OAAOA,EAAMq6B,OAAMC,GAAOF,EAAeE,EAAK,CAAEL,aAEpD,MAAMM,EAAgB1L,OAAO7uB,GAE7B,OAAKi6B,GAGGxB,EAAMwB,IAAWxB,EAAMC,IAAI1uC,KAAKuwC,GAF7BptC,OAAO8pB,KAAKwhB,GAAO97B,MAAK69B,GAAO/B,EAAM+B,GAAKxwC,KAAKuwC,IAEJ,EAmCpDE,EAAuB,CAACz6B,EAAOhM,KACjC,GAAIigC,EAAQj0B,GACR,OAAO,EAEX,MAAMi6B,EAASD,EAAUhmC,GACzB,GAAInD,MAAMC,QAAQkP,GACd,OAAOA,EAAMq6B,OAAMC,GAAOG,EAAqBH,EAAK,CAAEL,aAE1D,MAAMM,EAAgB1L,OAAO7uB,GAE7B,OAAKi6B,GAGGF,EAAYE,IAAWF,EAAYrB,IAAI1uC,KAAKuwC,GAFzCptC,OAAO8pB,KAAK8iB,GAAap9B,MAAK69B,GAAOT,EAAYS,GAAKxwC,KAAKuwC,IAEJ,EAkEtE,MAoBMG,EAAkB16B,IACpB,GAAIi0B,EAAQj0B,GACR,OAAO,EAEX,MAAM0C,EAAK,0JACX,OAAI7R,MAAMC,QAAQkP,GACPA,EAAMq6B,OAAMC,GAAO53B,EAAG1Y,KAAK6kC,OAAOyL,MAEtC53B,EAAG1Y,KAAK6kC,OAAO7uB,GAAO,EAgDjC,SAAS26B,EAAkB36B,GACvB,OAAiB,OAAVA,QAA4Bhb,IAAVgb,CAC7B,CACA,SAAS46B,EAAa3yC,GAClB,OAAO4I,MAAMC,QAAQ7I,IAAuB,IAAfA,EAAIH,MACrC,CAEA,MAAM+yC,EAAkB,CAAC76B,EAAOhM,KAE5B,MAAMlM,EAASoyC,EAAelmC,EAAQ,UACtC,OAAI2mC,EAAkB36B,KAGD,kBAAVA,IACPA,EAAQ6uB,OAAO7uB,IAEdA,EAAMlY,SACPkY,EAAQnP,MAAM8mB,KAAK3X,IAEhBA,EAAMlY,SAAWoP,OAAOpP,GAAO,EAGpCgzC,EAAqB,CAAC96B,EAAOhM,KAC/B,GAAIigC,EAAQj0B,GACR,OAAO,EAEX,MAAMlY,EAASoyC,EAAelmC,EAAQ,UACtC,OAAInD,MAAMC,QAAQkP,GACPA,EAAMq6B,OAAMC,GAAOQ,EAAmBR,EAAK,CAAExyC,aAEjD+mC,OAAO7uB,GAAOlY,QAAUoP,OAAOpP,EAAO,EAG3CizC,EAAoB,CAAC/6B,EAAOhM,KAC9B,GAAIigC,EAAQj0B,GACR,OAAO,EAEX,MAAM7F,EAAM+/B,EAAelmC,EAAQ,OACnC,OAAInD,MAAMC,QAAQkP,GACPA,EAAMlY,OAAS,GAAKkY,EAAMq6B,OAAMC,GAAOS,EAAkBT,EAAK,CAAEngC,UAEpEjD,OAAO8I,IAAU9I,OAAOiD,EAAI,EAiBjC6gC,EAAe,CAACh7B,EAAOhM,KACzB,GAAIigC,EAAQj0B,GACR,OAAO,EAEX,MAAMlY,EAASoyC,EAAelmC,EAAQ,UACtC,OAAInD,MAAMC,QAAQkP,GACPA,EAAMq6B,OAAMC,GAAOU,EAAaV,EAAK,CAAExyC,aAE3C+mC,OAAO7uB,GAAOlY,QAAUoP,OAAOpP,EAAO,EAG3CmzC,EAAoB,CAACj7B,EAAOhM,KAC9B,GAAIigC,EAAQj0B,GACR,OAAO,EAEX,MAAM1N,EAAM4nC,EAAelmC,EAAQ,OACnC,OAAInD,MAAMC,QAAQkP,GACPA,EAAMlY,OAAS,GAAKkY,EAAMq6B,OAAMC,GAAOW,EAAkBX,EAAK,CAAEhoC,UAEpE4E,OAAO8I,IAAU9I,OAAO5E,EAAI,EAuBjCsnC,EAAK,kBACLlB,EAAK,WACLwC,EAAoBl7B,IACtB,GAAIi0B,EAAQj0B,GACR,OAAO,EAEX,MAAMm7B,EAAab,IACf,MAAMc,EAAWvM,OAAOyL,GACxB,OAAO5B,EAAG1uC,KAAKoxC,IAAaxB,EAAG5vC,KAAKoxC,EAAS,EAEjD,OAAIvqC,MAAMC,QAAQkP,GACPA,EAAMq6B,MAAMc,GAEhBA,EAAUn7B,EAAM,EAiBrBq7B,EAAqBr7B,IACnB26B,EAAkB36B,KAAU46B,EAAa56B,KAAoB,IAAVA,KAG9C6uB,OAAO7uB,GAAOjX,OAAOjB,M,woBCrclC,IAAIwzC,EACJ,MAAMC,EACFtpC,YAAYupC,GAAW,GACnB1xC,KAAK0xC,SAAWA,EAIhB1xC,KAAK8xB,QAAS,EAId9xB,KAAK2xC,QAAU,GAIf3xC,KAAK4xC,SAAW,GAChB5xC,KAAK6xC,OAASL,GACTE,GAAYF,IACbxxC,KAAKma,OACAq3B,EAAkB/qB,SAAW+qB,EAAkB/qB,OAAS,KAAKvM,KAAKla,MAAQ,EAEvF,CACA8xC,IAAIrF,GACA,GAAIzsC,KAAK8xB,OAAQ,CACb,MAAMigB,EAAqBP,EAC3B,IAEI,OADAA,EAAoBxxC,KACbysC,GAIX,CAFA,QACI+E,EAAoBO,CACxB,CACJ,MACS,CAGb,CAKAC,KACIR,EAAoBxxC,IACxB,CAKAiyC,MACIT,EAAoBxxC,KAAK6xC,MAC7B,CACAK,KAAKC,GACD,GAAInyC,KAAK8xB,OAAQ,CACb,IAAI/zB,EAAGq0C,EACP,IAAKr0C,EAAI,EAAGq0C,EAAIpyC,KAAK2xC,QAAQ3zC,OAAQD,EAAIq0C,EAAGr0C,IACxCiC,KAAK2xC,QAAQ5zC,GAAGm0C,OAEpB,IAAKn0C,EAAI,EAAGq0C,EAAIpyC,KAAK4xC,SAAS5zC,OAAQD,EAAIq0C,EAAGr0C,IACzCiC,KAAK4xC,SAAS7zC,KAElB,GAAIiC,KAAKymB,OACL,IAAK1oB,EAAI,EAAGq0C,EAAIpyC,KAAKymB,OAAOzoB,OAAQD,EAAIq0C,EAAGr0C,IACvCiC,KAAKymB,OAAO1oB,GAAGm0C,MAAK,GAI5B,IAAKlyC,KAAK0xC,UAAY1xC,KAAK6xC,SAAWM,EAAY,CAE9C,MAAME,EAAOryC,KAAK6xC,OAAOprB,OAAOxG,MAC5BoyB,GAAQA,IAASryC,OACjBA,KAAK6xC,OAAOprB,OAAOzmB,KAAKma,OAASk4B,EACjCA,EAAKl4B,MAAQna,KAAKma,MAE1B,CACAna,KAAK6xC,YAAS32C,EACd8E,KAAK8xB,QAAS,CAClB,CACJ,EAEJ,SAASwgB,EAAYZ,GACjB,OAAO,IAAID,EAAYC,EAC3B,CACA,SAASa,EAAkBC,EAAQ7rB,EAAQ6qB,GACnC7qB,GAASA,EAAMmL,QACfnL,EAAMgrB,QAAQz3B,KAAKs4B,EAE3B,CACA,SAASC,IACL,OAAOjB,CACX,CACA,SAASkB,EAAejG,GAChB+E,GACAA,EAAkBI,SAAS13B,KAAKuyB,EAMxC,CAEA,MAAMkG,EAAahB,IACf,MAAMiB,EAAM,IAAIxkB,IAAIujB,GAGpB,OAFAiB,EAAIC,EAAI,EACRD,EAAI9/B,EAAI,EACD8/B,CAAG,EAERE,EAAcF,IAASA,EAAIC,EAAIE,GAAc,EAC7CC,EAAcJ,IAASA,EAAI9/B,EAAIigC,GAAc,EAC7CE,EAAiB,EAAG7sC,WACtB,GAAIA,EAAKpI,OACL,IAAK,IAAID,EAAI,EAAGA,EAAIqI,EAAKpI,OAAQD,IAC7BqI,EAAKrI,GAAG80C,GAAKE,CAErB,EAEEG,EAAsBV,IACxB,MAAM,KAAEpsC,GAASosC,EACjB,GAAIpsC,EAAKpI,OAAQ,CACb,IAAIm1C,EAAM,EACV,IAAK,IAAIp1C,EAAI,EAAGA,EAAIqI,EAAKpI,OAAQD,IAAK,CAClC,MAAM60C,EAAMxsC,EAAKrI,GACb+0C,EAAWF,KAASI,EAAWJ,GAC/BA,EAAIl7B,OAAO86B,GAGXpsC,EAAK+sC,KAASP,EAGlBA,EAAIC,IAAME,EACVH,EAAI9/B,IAAMigC,CACd,CACA3sC,EAAKpI,OAASm1C,CAClB,GAGEC,EAAY,IAAItnB,QAEtB,IAAIunB,EAAmB,EACnBN,EAAa,EAMjB,MAAMO,EAAgB,GACtB,IAAIC,EACJ,MAAMC,EAAcC,OAA6D,IAC3EC,EAAsBD,OAAqE,IACjG,MAAME,EACFxrC,YAAYskC,EAAImH,EAAY,KAAMjtB,GAC9B3mB,KAAKysC,GAAKA,EACVzsC,KAAK4zC,UAAYA,EACjB5zC,KAAK8xB,QAAS,EACd9xB,KAAKoG,KAAO,GACZpG,KAAK6xC,YAAS32C,EACdq3C,EAAkBvyC,KAAM2mB,EAC5B,CACAmrB,MACI,IAAK9xC,KAAK8xB,OACN,OAAO9xB,KAAKysC,KAEhB,IAAIoF,EAAS0B,EACTM,EAAkBC,EACtB,MAAOjC,EAAQ,CACX,GAAIA,IAAW7xC,KACX,OAEJ6xC,EAASA,EAAOA,MACpB,CACA,IAWI,OAVA7xC,KAAK6xC,OAAS0B,EACdA,EAAevzC,KACf8zC,GAAc,EACdf,EAAa,KAAOM,EAChBA,GAAoBC,EACpBL,EAAejzC,MAGf+zC,EAAc/zC,MAEXA,KAAKysC,IAahB,CAXA,QACQ4G,GAAoBC,GACpBJ,EAAmBlzC,MAEvB+yC,EAAa,KAAOM,EACpBE,EAAevzC,KAAK6xC,OACpBiC,EAAcD,EACd7zC,KAAK6xC,YAAS32C,EACV8E,KAAKg0C,WACLh0C,KAAKkyC,MAEb,CACJ,CACAA,OAEQqB,IAAiBvzC,KACjBA,KAAKg0C,WAAY,EAEZh0C,KAAK8xB,SACViiB,EAAc/zC,MACVA,KAAKi0C,QACLj0C,KAAKi0C,SAETj0C,KAAK8xB,QAAS,EAEtB,EAEJ,SAASiiB,EAAcvB,GACnB,MAAM,KAAEpsC,GAASosC,EACjB,GAAIpsC,EAAKpI,OAAQ,CACb,IAAK,IAAID,EAAI,EAAGA,EAAIqI,EAAKpI,OAAQD,IAC7BqI,EAAKrI,GAAG2Z,OAAO86B,GAEnBpsC,EAAKpI,OAAS,CAClB,CACJ,CAqBA,IAAI81C,GAAc,EAClB,MAAMI,EAAa,GACnB,SAASC,IACLD,EAAWh6B,KAAK45B,GAChBA,GAAc,CAClB,CAKA,SAASM,IACL,MAAM/B,EAAO6B,EAAWj0B,MACxB6zB,OAAuB54C,IAATm3C,GAA4BA,CAC9C,CACA,SAASgC,EAAM3jB,EAAQ1a,EAAM1L,GACzB,GAAIwpC,GAAeP,EAAc,CAC7B,IAAIe,EAAUlB,EAAUvwC,IAAI6tB,GACvB4jB,GACDlB,EAAUtwC,IAAI4tB,EAAS4jB,EAAU,IAAIzuC,KAEzC,IAAI+sC,EAAM0B,EAAQzxC,IAAIyH,GACjBsoC,GACD0B,EAAQxxC,IAAIwH,EAAMsoC,EAAMD,KAE5B,MAAM4B,OAEAr5C,EACNs5C,EAAa5B,EAAK2B,EACtB,CACJ,CACA,SAASC,EAAa5B,EAAK6B,GACvB,IAAIX,GAAc,EACdT,GAAoBC,EACfN,EAAWJ,KACZA,EAAI9/B,GAAKigC,EACTe,GAAehB,EAAWF,IAK9BkB,GAAelB,EAAIt0C,IAAIi1C,GAEvBO,IACAlB,EAAIvxB,IAAIkyB,GACRA,EAAantC,KAAK8T,KAAK04B,GAK/B,CACA,SAAS8B,EAAQhkB,EAAQ1a,EAAM1L,EAAK8iB,EAAUC,EAAUsnB,GACpD,MAAML,EAAUlB,EAAUvwC,IAAI6tB,GAC9B,IAAK4jB,EAED,OAEJ,IAAIluC,EAAO,GACX,GAAa,UAAT4P,EAGA5P,EAAO,IAAIkuC,EAAQM,eAElB,GAAY,WAARtqC,IAAoB,QAAQomB,GAAS,CAC1C,MAAMmkB,GAAY,QAASznB,GAC3BknB,EAAQlZ,SAAQ,CAACwX,EAAKtoC,MACN,WAARA,GAAoBA,GAAOuqC,IAC3BzuC,EAAK8T,KAAK04B,EACd,GAER,MAOI,YAJY,IAARtoC,GACAlE,EAAK8T,KAAKo6B,EAAQzxC,IAAIyH,IAGlB0L,GACJ,IAAK,OACI,QAAQ0a,IAMJ,QAAapmB,IAElBlE,EAAK8T,KAAKo6B,EAAQzxC,IAAI,YAPtBuD,EAAK8T,KAAKo6B,EAAQzxC,IAAI2wC,KAClB,QAAM9iB,IACNtqB,EAAK8T,KAAKo6B,EAAQzxC,IAAI6wC,KAO9B,MACJ,IAAK,UACI,QAAQhjB,KACTtqB,EAAK8T,KAAKo6B,EAAQzxC,IAAI2wC,KAClB,QAAM9iB,IACNtqB,EAAK8T,KAAKo6B,EAAQzxC,IAAI6wC,KAG9B,MACJ,IAAK,OACG,QAAMhjB,IACNtqB,EAAK8T,KAAKo6B,EAAQzxC,IAAI2wC,IAE1B,MAMZ,GAAoB,IAAhBptC,EAAKpI,OACDoI,EAAK,IAKD0uC,EAAe1uC,EAAK,QAI3B,CACD,MAAMurC,EAAU,GAChB,IAAK,MAAMiB,KAAOxsC,EACVwsC,GACAjB,EAAQz3B,QAAQ04B,GAOpBkC,EAAenC,EAAUhB,GAEjC,CACJ,CACA,SAASmD,EAAelC,EAAK6B,GAEzB,MAAM9C,GAAU,QAAQiB,GAAOA,EAAM,IAAIA,GACzC,IAAK,MAAMJ,KAAUb,EACba,EAAOuC,UACPC,EAAcxC,EAAQiC,GAG9B,IAAK,MAAMjC,KAAUb,EACZa,EAAOuC,UACRC,EAAcxC,EAAQiC,EAGlC,CACA,SAASO,EAAcxC,EAAQiC,IACvBjC,IAAWe,GAAgBf,EAAOyC,gBAI9BzC,EAAOoB,UACPpB,EAAOoB,YAGPpB,EAAOV,MAGnB,CAEA,MAAMoD,GAAmC,QAAQ,+BAC3CC,EAAiB,IAAI/mB,IAE3B/qB,OAAO+xC,oBAAoB3B,QAItB9gC,QAAOrI,GAAe,cAARA,GAA+B,WAARA,IACrClK,KAAIkK,GAAOmpC,OAAOnpC,KAClBqI,OAAO,OACN9P,EAAoBwyC,IACpBC,EAA2BD,GAAa,GAAO,GAC/CE,EAA4BF,GAAa,GAEzCG,EAAsCC,IAC5C,SAASA,IACL,MAAMC,EAAmB,CAAC,EA0B1B,MAzBA,CAAC,WAAY,UAAW,eAAeta,SAAQ9wB,IAC3CorC,EAAiBprC,GAAO,YAAarG,GACjC,MAAM9F,EAAMw3C,GAAM31C,MAClB,IAAK,IAAIjC,EAAI,EAAGq0C,EAAIpyC,KAAKhC,OAAQD,EAAIq0C,EAAGr0C,IACpCs2C,EAAMl2C,EAAK,MAA8BJ,EAAI,IAGjD,MAAM63C,EAAMz3C,EAAImM,MAAQrG,GACxB,OAAa,IAAT2xC,IAAsB,IAARA,EAEPz3C,EAAImM,MAAQrG,EAAK7D,IAAIu1C,KAGrBC,CAEf,CAAC,IAEL,CAAC,OAAQ,MAAO,QAAS,UAAW,UAAUxa,SAAQ9wB,IAClDorC,EAAiBprC,GAAO,YAAarG,GACjCkwC,IACA,MAAMyB,EAAMD,GAAM31C,MAAMsK,GAAKgkC,MAAMtuC,KAAMiE,GAEzC,OADAmwC,IACOwB,CACX,CAAC,IAEEF,CACX,CACA,SAASL,EAAaQ,GAAa,EAAOC,GAAU,GAChD,OAAO,SAAaplB,EAAQpmB,EAAK+kB,GAC7B,GAAY,mBAAR/kB,EACA,OAAQurC,EAEP,GAAY,mBAARvrC,EACL,OAAOurC,EAEN,GAAY,kBAARvrC,EACL,OAAOwrC,EAEN,GAAY,YAARxrC,GACL+kB,KACKwmB,EACKC,EACIC,GACAC,GACJF,EACIG,GACAC,IAAarzC,IAAI6tB,GAC/B,OAAOA,EAEX,MAAMylB,GAAgB,QAAQzlB,GAC9B,IAAKmlB,GAAcM,IAAiB,QAAOX,EAAuBlrC,GAC9D,OAAO8rC,QAAQvzC,IAAI2yC,EAAuBlrC,EAAK+kB,GAEnD,MAAMumB,EAAMQ,QAAQvzC,IAAI6tB,EAAQpmB,EAAK+kB,GACrC,QAAI,QAAS/kB,GAAO6qC,EAAe72C,IAAIgM,GAAO4qC,EAAmB5qC,IACtDsrC,GAENC,GACDxB,EAAM3jB,EAAQ,MAA8BpmB,GAE5CwrC,EACOF,EAEPS,GAAMT,GAECO,IAAiB,QAAa7rC,GAAOsrC,EAAMA,EAAI1/B,OAEtD,QAAS0/B,GAIFC,EAAaS,GAASV,GAAOW,GAASX,GAE1CA,EACX,CACJ,CACA,MAAM9yC,EAAoB0zC,IACpBC,EAA2BD,GAAa,GAC9C,SAASA,EAAaV,GAAU,GAC5B,OAAO,SAAaplB,EAAQpmB,EAAK4L,EAAOmZ,GACpC,IAAIhC,EAAWqD,EAAOpmB,GACtB,GAAIurC,GAAWxoB,IAAagpB,GAAMhpB,KAAcgpB,GAAMngC,GAClD,OAAO,EAEX,IAAK4/B,IACIY,GAAUxgC,IAAW2/B,GAAW3/B,KACjCmX,EAAWsoB,GAAMtoB,GACjBnX,EAAQy/B,GAAMz/B,MAEb,QAAQwa,IAAW2lB,GAAMhpB,KAAcgpB,GAAMngC,IAE9C,OADAmX,EAASnX,MAAQA,GACV,EAGf,MAAMygC,GAAS,QAAQjmB,KAAW,QAAapmB,GACzC8C,OAAO9C,GAAOomB,EAAO1yB,QACrB,QAAO0yB,EAAQpmB,GACfvH,EAASqzC,QAAQtzC,IAAI4tB,EAAQpmB,EAAK4L,EAAOmZ,GAU/C,OARIqB,IAAWilB,GAAMtmB,KACZsnB,GAGI,QAAWzgC,EAAOmX,IACvBqnB,EAAQhkB,EAAQ,MAAgCpmB,EAAK4L,EAAOmX,GAH5DqnB,EAAQhkB,EAAQ,MAAgCpmB,EAAK4L,IAMtDnT,CACX,CACJ,CACA,SAAS6zC,EAAelmB,EAAQpmB,GAC5B,MAAMqsC,GAAS,QAAOjmB,EAAQpmB,GACxB+iB,EAAWqD,EAAOpmB,GAClBvH,EAASqzC,QAAQQ,eAAelmB,EAAQpmB,GAI9C,OAHIvH,GAAU4zC,GACVjC,EAAQhkB,EAAQ,SAAsCpmB,OAAKpP,EAAWmyB,GAEnEtqB,CACX,CACA,SAASzE,EAAIoyB,EAAQpmB,GACjB,MAAMvH,EAASqzC,QAAQ93C,IAAIoyB,EAAQpmB,GAInC,OAHK,QAASA,IAAS6qC,EAAe72C,IAAIgM,IACtC+pC,EAAM3jB,EAAQ,MAA8BpmB,GAEzCvH,CACX,CACA,SAAS8zC,EAAQnmB,GAEb,OADA2jB,EAAM3jB,EAAQ,WAAsC,QAAQA,GAAU,SAAW8iB,GAC1E4C,QAAQS,QAAQnmB,EAC3B,CACA,MAAMomB,EAAkB,CACpBj0C,MACAC,MACA8zC,iBACAt4C,MACAu4C,WAEEE,EAAmB,CACrBl0C,IAAK0yC,EACLzyC,IAAI4tB,EAAQpmB,GAIR,OAAO,CACX,EACAssC,eAAelmB,EAAQpmB,GAInB,OAAO,CACX,GAEE0sC,GAAwC,QAAO,CAAC,EAAGF,EAAiB,CACtEj0C,IAAKyyC,EACLxyC,IAAK2zC,IASHQ,EAAa/gC,GAAUA,EACvBghC,EAAYvb,GAAMya,QAAQe,eAAexb,GAC/C,SAASyb,EAAM1mB,EAAQpmB,EAAKurC,GAAa,EAAOa,GAAY,GAGxDhmB,EAASA,EAAO,WAChB,MAAM2mB,EAAY1B,GAAMjlB,GAClB4mB,EAAS3B,GAAMrrC,GAChBurC,IACGvrC,IAAQgtC,GACRjD,EAAMgD,EAAW,MAA8B/sC,GAEnD+pC,EAAMgD,EAAW,MAA8BC,IAEnD,MAAM,IAAEh5C,GAAQ44C,EAASG,GACnBE,EAAOb,EAAYO,EAAYpB,EAAa2B,GAAaC,GAC/D,OAAIn5C,EAAI2B,KAAKo3C,EAAW/sC,GACbitC,EAAK7mB,EAAO7tB,IAAIyH,IAElBhM,EAAI2B,KAAKo3C,EAAWC,GAClBC,EAAK7mB,EAAO7tB,IAAIy0C,SAElB5mB,IAAW2mB,GAGhB3mB,EAAO7tB,IAAIyH,GAEnB,CACA,SAASotC,EAAMptC,EAAKurC,GAAa,GAC7B,MAAMnlB,EAAS1wB,KAAK,WACdq3C,EAAY1B,GAAMjlB,GAClB4mB,EAAS3B,GAAMrrC,GAOrB,OANKurC,IACGvrC,IAAQgtC,GACRjD,EAAMgD,EAAW,MAA8B/sC,GAEnD+pC,EAAMgD,EAAW,MAA8BC,IAE5ChtC,IAAQgtC,EACT5mB,EAAOpyB,IAAIgM,GACXomB,EAAOpyB,IAAIgM,IAAQomB,EAAOpyB,IAAIg5C,EACxC,CACA,SAASjpB,GAAKqC,EAAQmlB,GAAa,GAG/B,OAFAnlB,EAASA,EAAO,YACfmlB,GAAcxB,EAAMsB,GAAMjlB,GAAS,UAAsC8iB,GACnE4C,QAAQvzC,IAAI6tB,EAAQ,OAAQA,EACvC,CACA,SAASrP,GAAInL,GACTA,EAAQy/B,GAAMz/B,GACd,MAAMwa,EAASilB,GAAM31C,MACf23C,EAAQT,EAASxmB,GACjBimB,EAASgB,EAAMr5C,IAAI2B,KAAKywB,EAAQxa,GAKtC,OAJKygC,IACDjmB,EAAOrP,IAAInL,GACXw+B,EAAQhkB,EAAQ,MAAgCxa,EAAOA,IAEpDlW,IACX,CACA,SAAS43C,GAAMttC,EAAK4L,GAChBA,EAAQy/B,GAAMz/B,GACd,MAAMwa,EAASilB,GAAM31C,OACf,IAAE1B,EAAG,IAAEuE,GAAQq0C,EAASxmB,GAC9B,IAAIimB,EAASr4C,EAAI2B,KAAKywB,EAAQpmB,GACzBqsC,IACDrsC,EAAMqrC,GAAMrrC,GACZqsC,EAASr4C,EAAI2B,KAAKywB,EAAQpmB,IAK9B,MAAM+iB,EAAWxqB,EAAI5C,KAAKywB,EAAQpmB,GAQlC,OAPAomB,EAAO5tB,IAAIwH,EAAK4L,GACXygC,GAGI,QAAWzgC,EAAOmX,IACvBqnB,EAAQhkB,EAAQ,MAAgCpmB,EAAK4L,EAAOmX,GAH5DqnB,EAAQhkB,EAAQ,MAAgCpmB,EAAK4L,GAKlDlW,IACX,CACA,SAAS63C,GAAYvtC,GACjB,MAAMomB,EAASilB,GAAM31C,OACf,IAAE1B,EAAG,IAAEuE,GAAQq0C,EAASxmB,GAC9B,IAAIimB,EAASr4C,EAAI2B,KAAKywB,EAAQpmB,GACzBqsC,IACDrsC,EAAMqrC,GAAMrrC,GACZqsC,EAASr4C,EAAI2B,KAAKywB,EAAQpmB,IAK9B,MAAM+iB,EAAWxqB,EAAMA,EAAI5C,KAAKywB,EAAQpmB,QAAOpP,EAEzC6H,EAAS2tB,EAAOhZ,OAAOpN,GAI7B,OAHIqsC,GACAjC,EAAQhkB,EAAQ,SAAsCpmB,OAAKpP,EAAWmyB,GAEnEtqB,CACX,CACA,SAAS04B,KACL,MAAM/K,EAASilB,GAAM31C,MACf83C,EAA2B,IAAhBpnB,EAAOrC,KAClBsmB,OAIAz5C,EAEA6H,EAAS2tB,EAAO+K,QAItB,OAHIqc,GACApD,EAAQhkB,EAAQ,aAAoCx1B,OAAWA,EAAWy5C,GAEvE5xC,CACX,CACA,SAASg1C,GAAclC,EAAYa,GAC/B,OAAO,SAAiB1hC,EAAUgjC,GAC9B,MAAMC,EAAWj4C,KACX0wB,EAASunB,EAAS,WAClBZ,EAAY1B,GAAMjlB,GAClB6mB,EAAOb,EAAYO,EAAYpB,EAAa2B,GAAaC,GAE/D,OADC5B,GAAcxB,EAAMgD,EAAW,UAAsC7D,GAC/D9iB,EAAO0K,SAAQ,CAACllB,EAAO5L,IAInB0K,EAAS/U,KAAK+3C,EAAST,EAAKrhC,GAAQqhC,EAAKjtC,GAAM2tC,IAE9D,CACJ,CACA,SAASC,GAAqBpuC,EAAQ+rC,EAAYa,GAC9C,OAAO,YAAazyC,GAChB,MAAMysB,EAAS1wB,KAAK,WACdq3C,EAAY1B,GAAMjlB,GAClBynB,GAAc,QAAMd,GACpBe,EAAoB,YAAXtuC,GAAyBA,IAAW2pC,OAAO4E,UAAYF,EAChEG,EAAuB,SAAXxuC,GAAqBquC,EACjCI,EAAgB7nB,EAAO5mB,MAAW7F,GAClCszC,EAAOb,EAAYO,EAAYpB,EAAa2B,GAAaC,GAK/D,OAJC5B,GACGxB,EAAMgD,EAAW,UAAsCiB,EAAY5E,EAAsBF,GAGtF,CAEHr1B,OACI,MAAM,MAAEjI,EAAK,KAAEsiC,GAASD,EAAcp6B,OACtC,OAAOq6B,EACD,CAAEtiC,QAAOsiC,QACT,CACEtiC,MAAOkiC,EAAS,CAACb,EAAKrhC,EAAM,IAAKqhC,EAAKrhC,EAAM,KAAOqhC,EAAKrhC,GACxDsiC,OAEZ,EAEA,CAAC/E,OAAO4E,YACJ,OAAOr4C,IACX,EAER,CACJ,CACA,SAASy4C,GAAqBziC,GAC1B,OAAO,YAAa/R,GAKhB,MAAgB,WAAT+R,GAAwDhW,IACnE,CACJ,CACA,SAAS04C,KACL,MAAMC,EAA0B,CAC5B91C,IAAIyH,GACA,OAAO8sC,EAAMp3C,KAAMsK,EACvB,EACI+jB,WACA,OAAOA,GAAKruB,KAChB,EACA1B,IAAKo5C,EACLr2B,OACAve,IAAK80C,GACLlgC,OAAQmgC,GACRpc,SACAL,QAAS2c,IAAc,GAAO,IAE5Ba,EAA0B,CAC5B/1C,IAAIyH,GACA,OAAO8sC,EAAMp3C,KAAMsK,GAAK,GAAO,EACnC,EACI+jB,WACA,OAAOA,GAAKruB,KAChB,EACA1B,IAAKo5C,EACLr2B,OACAve,IAAK80C,GACLlgC,OAAQmgC,GACRpc,SACAL,QAAS2c,IAAc,GAAO,IAE5Bc,EAA2B,CAC7Bh2C,IAAIyH,GACA,OAAO8sC,EAAMp3C,KAAMsK,GAAK,EAC5B,EACI+jB,WACA,OAAOA,GAAKruB,MAAM,EACtB,EACA1B,IAAIgM,GACA,OAAOotC,EAAMz3C,KAAKD,KAAMsK,GAAK,EACjC,EACA+W,IAAKo3B,GAAqB,OAC1B31C,IAAK21C,GAAqB,OAC1B/gC,OAAQ+gC,GAAqB,UAC7Bhd,MAAOgd,GAAqB,SAC5Brd,QAAS2c,IAAc,GAAM,IAE3Be,EAAkC,CACpCj2C,IAAIyH,GACA,OAAO8sC,EAAMp3C,KAAMsK,GAAK,GAAM,EAClC,EACI+jB,WACA,OAAOA,GAAKruB,MAAM,EACtB,EACA1B,IAAIgM,GACA,OAAOotC,EAAMz3C,KAAKD,KAAMsK,GAAK,EACjC,EACA+W,IAAKo3B,GAAqB,OAC1B31C,IAAK21C,GAAqB,OAC1B/gC,OAAQ+gC,GAAqB,UAC7Bhd,MAAOgd,GAAqB,SAC5Brd,QAAS2c,IAAc,GAAM,IAE3BgB,EAAkB,CAAC,OAAQ,SAAU,UAAWtF,OAAO4E,UAO7D,OANAU,EAAgB3d,SAAQtxB,IACpB6uC,EAAwB7uC,GAAUouC,GAAqBpuC,GAAQ,GAAO,GACtE+uC,EAAyB/uC,GAAUouC,GAAqBpuC,GAAQ,GAAM,GACtE8uC,EAAwB9uC,GAAUouC,GAAqBpuC,GAAQ,GAAO,GACtEgvC,EAAgChvC,GAAUouC,GAAqBpuC,GAAQ,GAAM,EAAK,IAE/E,CACH6uC,EACAE,EACAD,EACAE,EAER,CACA,MAAOH,GAAyBE,GAA0BD,GAAyBE,IAAkDJ,KACrI,SAASM,GAA4BnD,EAAYC,GAC7C,MAAMJ,EAAmBI,EACnBD,EACIiD,GACAF,GACJ/C,EACIgD,GACAF,GACV,MAAO,CAACjoB,EAAQpmB,EAAK+kB,IACL,mBAAR/kB,GACQurC,EAEK,mBAARvrC,EACEurC,EAEM,YAARvrC,EACEomB,EAEJ0lB,QAAQvzC,KAAI,QAAO6yC,EAAkBprC,IAAQA,KAAOomB,EACrDglB,EACAhlB,EAAQpmB,EAAK+kB,EAE3B,CACA,MAAM4pB,GAA4B,CAC9Bp2C,IAAmBm2C,IAA4B,GAAO,IAEpDE,GAA4B,CAC9Br2C,IAAmBm2C,IAA4B,GAAO,IAEpDG,GAA6B,CAC/Bt2C,IAAmBm2C,IAA4B,GAAM,IAiBzD,MAAM9C,GAAc,IAAIpqB,QAClBmqB,GAAqB,IAAInqB,QACzBkqB,GAAc,IAAIlqB,QAClBiqB,GAAqB,IAAIjqB,QAC/B,SAASstB,GAAcC,GACnB,OAAQA,GACJ,IAAK,SACL,IAAK,QACD,OAAO,EACX,IAAK,MACL,IAAK,MACL,IAAK,UACL,IAAK,UACD,OAAO,EACX,QACI,OAAO,EAEnB,CACA,SAASC,GAAcpjC,GACnB,OAAOA,EAAM,cAAyC7S,OAAOk2C,aAAarjC,GACpE,EACAkjC,IAAc,QAAUljC,GAClC,CACA,SAASqgC,GAAS7lB,GAEd,OAAImlB,GAAWnlB,GACJA,EAEJ8oB,GAAqB9oB,GAAQ,EAAOomB,EAAiBmC,GAA2B/C,GAC3F,CAMA,SAASuD,GAAgB/oB,GACrB,OAAO8oB,GAAqB9oB,GAAQ,EAAOsmB,EAAyBkC,GAA2BjD,GACnG,CAKA,SAASK,GAAS5lB,GACd,OAAO8oB,GAAqB9oB,GAAQ,EAAMqmB,EAAkBoC,GAA4BnD,GAC5F,CAUA,SAASwD,GAAqB9oB,EAAQmlB,EAAY6D,EAAcC,EAAoBC,GAChF,KAAK,QAASlpB,GAIV,OAAOA,EAIX,GAAIA,EAAO,cACLmlB,IAAcnlB,EAAO,mBACvB,OAAOA,EAGX,MAAMmpB,EAAgBD,EAAS/2C,IAAI6tB,GACnC,GAAImpB,EACA,OAAOA,EAGX,MAAMC,EAAaR,GAAc5oB,GACjC,GAAmB,IAAfopB,EACA,OAAOppB,EAEX,MAAMgb,EAAQ,IAAIqO,MAAMrpB,EAAuB,IAAfopB,EAA+CH,EAAqBD,GAEpG,OADAE,EAAS92C,IAAI4tB,EAAQgb,GACdA,CACX,CACA,SAASsO,GAAW9jC,GAChB,OAAI2/B,GAAW3/B,GACJ8jC,GAAW9jC,EAAM,eAElBA,IAASA,EAAM,kBAC7B,CACA,SAAS2/B,GAAW3/B,GAChB,SAAUA,IAASA,EAAM,kBAC7B,CACA,SAASwgC,GAAUxgC,GACf,SAAUA,IAASA,EAAM,iBAC7B,CACA,SAAS+jC,GAAQ/jC,GACb,OAAO8jC,GAAW9jC,IAAU2/B,GAAW3/B,EAC3C,CACA,SAASy/B,GAAMsC,GACX,MAAMiC,EAAMjC,GAAYA,EAAS,WACjC,OAAOiC,EAAMvE,GAAMuE,GAAOjC,CAC9B,CACA,SAASkC,GAAQjkC,GAEb,OADA,QAAIA,EAAO,YAAqC,GACzCA,CACX,CACA,MAAMuhC,GAAcvhC,IAAU,QAASA,GAASqgC,GAASrgC,GAASA,EAC5DshC,GAActhC,IAAU,QAASA,GAASogC,GAASpgC,GAASA,EAElE,SAASkkC,GAAcC,GACfvG,GAAeP,IACf8G,EAAM1E,GAAM0E,GASR7F,EAAa6F,EAAIzH,MAAQyH,EAAIzH,IAAMD,MAG/C,CACA,SAAS2H,GAAgBD,EAAKE,GAC1BF,EAAM1E,GAAM0E,GACRA,EAAIzH,KAUAkC,EAAeuF,EAAIzH,IAG/B,CACA,SAASyD,GAAMrZ,GACX,SAAUA,IAAqB,IAAhBA,EAAEwd,UACrB,CACA,SAASH,GAAInkC,GACT,OAAOukC,GAAUvkC,GAAO,EAC5B,CACA,SAASwkC,GAAWxkC,GAChB,OAAOukC,GAAUvkC,GAAO,EAC5B,CACA,SAASukC,GAAUE,EAAU7E,GACzB,OAAIO,GAAMsE,GACCA,EAEJ,IAAIC,GAAQD,EAAU7E,EACjC,CACA,MAAM8E,GACFzyC,YAAY+N,EAAO2kC,GACf76C,KAAK66C,cAAgBA,EACrB76C,KAAK4yC,SAAM13C,EACX8E,KAAKw6C,WAAY,EACjBx6C,KAAK86C,UAAYD,EAAgB3kC,EAAQy/B,GAAMz/B,GAC/ClW,KAAK+6C,OAASF,EAAgB3kC,EAAQuhC,GAAWvhC,EACrD,CACIA,YAEA,OADAkkC,GAAcp6C,MACPA,KAAK+6C,MAChB,CACI7kC,UAAMqkC,GACN,MAAMS,EAAiBh7C,KAAK66C,eAAiBnE,GAAU6D,IAAW1E,GAAW0E,GAC7EA,EAASS,EAAiBT,EAAS5E,GAAM4E,IACrC,QAAWA,EAAQv6C,KAAK86C,aACxB96C,KAAK86C,UAAYP,EACjBv6C,KAAK+6C,OAASC,EAAiBT,EAAS9C,GAAW8C,GACnDD,GAAgBt6C,KAAMu6C,GAE9B,EAKJ,SAASU,GAAMZ,GACX,OAAOhE,GAAMgE,GAAOA,EAAInkC,MAAQmkC,CACpC,CACA,MAAMa,GAAwB,CAC1Br4C,IAAK,CAAC6tB,EAAQpmB,EAAK+kB,IAAa4rB,GAAM7E,QAAQvzC,IAAI6tB,EAAQpmB,EAAK+kB,IAC/DvsB,IAAK,CAAC4tB,EAAQpmB,EAAK4L,EAAOmZ,KACtB,MAAMhC,EAAWqD,EAAOpmB,GACxB,OAAI+rC,GAAMhpB,KAAcgpB,GAAMngC,IAC1BmX,EAASnX,MAAQA,GACV,GAGAkgC,QAAQtzC,IAAI4tB,EAAQpmB,EAAK4L,EAAOmZ,EAC3C,GAGR,SAAS8rB,GAAUC,GACf,OAAOpB,GAAWoB,GACZA,EACA,IAAIrB,MAAMqB,EAAgBF,GACpC,CA6BA,MAAMG,GACFlzC,YAAYmzC,EAASllC,EAAMmlC,GACvBv7C,KAAKs7C,QAAUA,EACft7C,KAAKoW,KAAOA,EACZpW,KAAKu7C,cAAgBA,EACrBv7C,KAAKw6C,WAAY,CACrB,CACItkC,YACA,MAAMs6B,EAAMxwC,KAAKs7C,QAAQt7C,KAAKoW,MAC9B,YAAelb,IAARs1C,EAAoBxwC,KAAKu7C,cAAgB/K,CACpD,CACIt6B,UAAMqkC,GACNv6C,KAAKs7C,QAAQt7C,KAAKoW,MAAQmkC,CAC9B,EAEJ,SAASiB,GAAMtnC,EAAQ5J,EAAKmxC,GACxB,MAAMjL,EAAMt8B,EAAO5J,GACnB,OAAO+rC,GAAM7F,GACPA,EACA,IAAI6K,GAAcnnC,EAAQ5J,EAAKmxC,EACzC,CAEA,IAAIp0C,GACJ,MAAMq0C,GACFvzC,YAAYwzC,EAAQC,EAAS/F,EAAYgG,GACrC77C,KAAK47C,QAAUA,EACf57C,KAAK4yC,SAAM13C,EACX8E,KAAKw6C,WAAY,EACjBx6C,KAAKqH,KAAM,EACXrH,KAAK87C,QAAS,EACd97C,KAAKwyC,OAAS,IAAImB,EAAegI,GAAQ,KAChC37C,KAAK87C,SACN97C,KAAK87C,QAAS,EACdxB,GAAgBt6C,MACpB,IAEJA,KAAKwyC,OAAOuC,SAAW/0C,KACvBA,KAAKwyC,OAAO1gB,OAAS9xB,KAAK+7C,YAAcF,EACxC77C,KAAK,kBAAoD61C,CAC7D,CACI3/B,YAEA,MAAM5O,EAAOquC,GAAM31C,MAMnB,OALAo6C,GAAc9yC,IACVA,EAAKw0C,QAAWx0C,EAAKy0C,aACrBz0C,EAAKw0C,QAAS,EACdx0C,EAAKyzC,OAASzzC,EAAKkrC,OAAOV,OAEvBxqC,EAAKyzC,MAChB,CACI7kC,UAAMkX,GACNptB,KAAK47C,QAAQxuB,EACjB,EAGJ,SAAS2nB,GAASiH,EAAiBC,EAAcJ,GAAQ,GACrD,IAAIF,EACAO,EACJ,MAAMC,GAAa,QAAWH,GAC1BG,GACAR,EAASK,EACTE,EAIM,OAGNP,EAASK,EAAgBn5C,IACzBq5C,EAASF,EAAgBl5C,KAE7B,MAAMs5C,EAAO,IAAIV,GAAgBC,EAAQO,EAAQC,IAAeD,EAAQL,GAKxE,OAAOO,CACX,CAvBA/0C,GAAK,gB,qoCCznCL,SAAS8mC,EAAKnqC,KAAQC,GA8BtB,CA+GA,SAASo4C,EAAsB5P,EAAIxmC,EAAU+P,EAAM/R,GAC/C,IAAI2xC,EACJ,IACIA,EAAM3xC,EAAOwoC,KAAMxoC,GAAQwoC,GAI/B,CAFA,MAAOE,GACH2P,EAAY3P,EAAK1mC,EAAU+P,EAC/B,CACA,OAAO4/B,CACX,CACA,SAAS2G,EAA2B9P,EAAIxmC,EAAU+P,EAAM/R,GACpD,IAAI,QAAWwoC,GAAK,CAChB,MAAMmJ,EAAMyG,EAAsB5P,EAAIxmC,EAAU+P,EAAM/R,GAMtD,OALI2xC,IAAO,QAAUA,IACjBA,EAAIptB,OAAMmkB,IACN2P,EAAY3P,EAAK1mC,EAAU+P,EAAK,IAGjC4/B,CACX,CACA,MAAMhB,EAAS,GACf,IAAK,IAAI72C,EAAI,EAAGA,EAAI0uC,EAAGzuC,OAAQD,IAC3B62C,EAAO16B,KAAKqiC,EAA2B9P,EAAG1uC,GAAIkI,EAAU+P,EAAM/R,IAElE,OAAO2wC,CACX,CACA,SAAS0H,EAAY3P,EAAK1mC,EAAU+P,EAAMwmC,GAAa,GACnD,MAAMC,EAAex2C,EAAWA,EAASy2C,MAAQ,KACjD,GAAIz2C,EAAU,CACV,IAAI02C,EAAM12C,EAAS4rC,OAEnB,MAAM+K,EAAkB32C,EAASylC,MAE3BmR,EAA+E7mC,EACrF,MAAO2mC,EAAK,CACR,MAAMG,EAAqBH,EAAII,GAC/B,GAAID,EACA,IAAK,IAAI/+C,EAAI,EAAGA,EAAI++C,EAAmB9+C,OAAQD,IAC3C,IAA+D,IAA3D++C,EAAmB/+C,GAAG4uC,EAAKiQ,EAAiBC,GAC5C,OAIZF,EAAMA,EAAI9K,MACd,CAEA,MAAMmL,EAAkB/2C,EAASg3C,WAAWv0C,OAAOw0C,aACnD,GAAIF,EAEA,YADAX,EAAsBW,EAAiB,KAAM,GAAuC,CAACrQ,EAAKiQ,EAAiBC,GAGnH,CACAM,EAASxQ,EAAK32B,EAAMymC,EAAcD,EACtC,CACA,SAASW,EAASxQ,EAAK32B,EAAMymC,EAAcD,GAAa,GAoBhDj7B,QAAQnd,MAAMuoC,EAEtB,CAEA,IAAIyQ,GAAa,EACbC,GAAiB,EACrB,MAAMxjC,EAAQ,GACd,IAAIyjC,EAAa,EACjB,MAAMC,EAAsB,GAC5B,IAAIC,EAAqB,KACrBC,EAAiB,EACrB,MAAMC,EAAgCvyC,QAAQ8O,UAC9C,IAAI0jC,EAAsB,KAE1B,SAASC,EAASnR,GACd,MAAMhtC,EAAIk+C,GAAuBD,EACjC,OAAOjR,EAAKhtC,EAAE8e,KAAKve,KAAOysC,EAAG11B,KAAK/W,MAAQysC,GAAMhtC,CACpD,CAKA,SAASo+C,EAAmB3/B,GAExB,IAAIiT,EAAQmsB,EAAa,EACrBQ,EAAMjkC,EAAM7b,OAChB,MAAOmzB,EAAQ2sB,EAAK,CAChB,MAAMC,EAAU5sB,EAAQ2sB,IAAS,EAC3BE,EAAcC,EAAMpkC,EAAMkkC,IAChCC,EAAc9/B,EAAMiT,EAAQ4sB,EAAS,EAAMD,EAAMC,CACrD,CACA,OAAO5sB,CACX,CACA,SAAS+sB,EAASC,GAOTtkC,EAAM7b,QACN6b,EAAMzB,SAAS+lC,EAAKf,GAAce,EAAIlJ,aAAeqI,EAAa,EAAIA,KACzD,MAAVa,EAAIjgC,GACJrE,EAAMK,KAAKikC,GAGXtkC,EAAMukC,OAAOP,EAAmBM,EAAIjgC,IAAK,EAAGigC,GAEhDE,IAER,CACA,SAASA,IACAjB,GAAeC,IAChBA,GAAiB,EACjBM,EAAsBD,EAAgBn/B,KAAK+/B,GAEnD,CACA,SAASC,EAAcJ,GACnB,MAAMpgD,EAAI8b,EAAMnb,QAAQy/C,GACpBpgD,EAAIu/C,GACJzjC,EAAMukC,OAAOrgD,EAAG,EAExB,CACA,SAASygD,EAAiBlgC,IACjB,QAAQA,GAUTi/B,EAAoBrjC,QAAQoE,GATvBk/B,GACAA,EAAmBplC,SAASkG,EAAIA,EAAG22B,aAAewI,EAAiB,EAAIA,IACxEF,EAAoBrjC,KAAKoE,GASjC+/B,GACJ,CACA,SAASI,EAAiBC,EAE1B3gD,GAAIq/C,EAAaE,EAAa,EAAI,IAI9B,IAHI,EAGGv/C,EAAI8b,EAAM7b,OAAQD,IAAK,CAC1B,MAAMugB,EAAKzE,EAAM9b,GACbugB,GAAMA,EAAGqgC,MAIT9kC,EAAMukC,OAAOrgD,EAAG,GAChBA,IACAugB,IAER,CACJ,CACA,SAASsgC,EAAkBF,GACvB,GAAInB,EAAoBv/C,OAAQ,CAC5B,MAAM0U,EAAU,IAAI,IAAI0b,IAAImvB,IAG5B,GAFAA,EAAoBv/C,OAAS,EAEzBw/C,EAEA,YADAA,EAAmBtjC,QAAQxH,GAQ/B,IALA8qC,EAAqB9qC,EAIrB8qC,EAAmB5+B,MAAK,CAACyrB,EAAGC,IAAM2T,EAAM5T,GAAK4T,EAAM3T,KAC9CmT,EAAiB,EAAGA,EAAiBD,EAAmBx/C,OAAQy/C,IAKjED,EAAmBC,KAEvBD,EAAqB,KACrBC,EAAiB,CACrB,CACJ,CACA,MAAMQ,EAASE,GAAkB,MAAVA,EAAIjgC,GAAa2gC,IAAWV,EAAIjgC,GACjD4gC,EAAa,CAACzU,EAAGC,KACnB,MAAMyU,EAAOd,EAAM5T,GAAK4T,EAAM3T,GAC9B,GAAa,IAATyU,EAAY,CACZ,GAAI1U,EAAEsU,MAAQrU,EAAEqU,IACZ,OAAQ,EACZ,GAAIrU,EAAEqU,MAAQtU,EAAEsU,IACZ,OAAO,CACf,CACA,OAAOI,CAAI,EAEf,SAAST,EAAUI,GACfrB,GAAiB,EACjBD,GAAa,EAWbvjC,EAAM+E,KAAKkgC,GAQL,KACN,IACI,IAAKxB,EAAa,EAAGA,EAAazjC,EAAM7b,OAAQs/C,IAAc,CAC1D,MAAMa,EAAMtkC,EAAMyjC,GACda,IAAsB,IAAfA,EAAIrsB,QAKXuqB,EAAsB8B,EAAK,KAAM,GAEzC,CAaJ,CAXA,QACIb,EAAa,EACbzjC,EAAM7b,OAAS,EACf4gD,EAAkBF,GAClBtB,GAAa,EACbO,EAAsB,MAGlB9jC,EAAM7b,QAAUu/C,EAAoBv/C,SACpCsgD,EAAUI,EAElB,CACJ,CAyB2B,IAAItwB,IAanB,IAAIvoB,IAgNhB,SAASm5C,EAAO/4C,EAAUymB,KAAUuyB,GAChC,GAAIh5C,EAASi5C,YACT,OACJ,MAAMp/C,EAAQmG,EAASy2C,MAAM58C,OAAS,KAsBtC,IAAImE,EAAOg7C,EACX,MAAME,EAAkBzyB,EAAM5jB,WAAW,WAEnCs2C,EAAWD,GAAmBzyB,EAAMtnB,MAAM,GAChD,GAAIg6C,GAAYA,KAAYt/C,EAAO,CAC/B,MAAMu/C,EAAe,GAAgB,eAAbD,EAA4B,QAAUA,cACxD,OAAEE,EAAM,KAAErgD,GAASa,EAAMu/C,IAAiB,KAC5CpgD,IACAgF,EAAOg7C,EAAQ7+C,KAAIiqC,IAAM,QAASA,GAAKA,EAAEprC,OAASorC,KAElDiV,IACAr7C,EAAOg7C,EAAQ7+C,IAAI,MAE3B,CAcA,IAAIm/C,EACJ,IAAIxvB,EAAUjwB,EAAOy/C,GAAc,QAAa7yB,KAE5C5sB,EAAOy/C,GAAc,SAAa,QAAS7yB,MAG1CqD,GAAWovB,IACZpvB,EAAUjwB,EAAOy/C,GAAc,SAAa,QAAU7yB,MAEtDqD,GACAwsB,EAA2BxsB,EAAS9pB,EAAU,EAA4ChC,GAE9F,MAAMu7C,EAAc1/C,EAAMy/C,EAAc,QACxC,GAAIC,EAAa,CACb,GAAKv5C,EAASw5C,SAGT,GAAIx5C,EAASw5C,QAAQF,GACtB,YAHAt5C,EAASw5C,QAAU,CAAC,EAKxBx5C,EAASw5C,QAAQF,IAAe,EAChChD,EAA2BiD,EAAav5C,EAAU,EAA4ChC,EAClG,CACJ,CACA,SAASy7C,EAAsBC,EAAM1C,EAAY2C,GAAU,GACvD,MAAMC,EAAQ5C,EAAW6C,WACnBC,EAASF,EAAMh9C,IAAI88C,GACzB,QAAezkD,IAAX6kD,EACA,OAAOA,EAEX,MAAM7F,EAAMyF,EAAKK,MACjB,IAAIC,EAAa,CAAC,EAEdC,GAAa,EACjB,KAA4B,QAAWP,GAAO,CAC1C,MAAMQ,EAAejG,IACjB,MAAMkG,EAAuBV,EAAsBxF,EAAK+C,GAAY,GAChEmD,IACAF,GAAa,GACb,QAAOD,EAAYG,GACvB,GAECR,GAAW3C,EAAWoD,OAAOriD,QAC9Bi/C,EAAWoD,OAAOjlB,QAAQ+kB,GAE1BR,EAAKW,SACLH,EAAYR,EAAKW,SAEjBX,EAAKU,QACLV,EAAKU,OAAOjlB,QAAQ+kB,EAE5B,CACA,OAAKjG,GAAQgG,IAMT,QAAQhG,GACRA,EAAI9e,SAAQ9wB,GAAQ21C,EAAW31C,GAAO,QAGtC,QAAO21C,EAAY/F,IAEnB,QAASyF,IACTE,EAAM/8C,IAAI68C,EAAMM,GAEbA,KAdC,QAASN,IACTE,EAAM/8C,IAAI68C,EAAM,MAEb,KAYf,CAIA,SAASY,EAAe55C,EAAS2D,GAC7B,SAAK3D,KAAY,QAAK2D,MAGtBA,EAAMA,EAAIlF,MAAM,GAAGrG,QAAQ,QAAS,KAC5B,QAAO4H,EAAS2D,EAAI,GAAG1L,cAAgB0L,EAAIlF,MAAM,MACrD,QAAOuB,GAAS,QAAU2D,MAC1B,QAAO3D,EAAS2D,GACxB,CAMA,IAAIk2C,EAA2B,KAC3BC,EAAiB,KAWrB,SAASC,EAA4Bz6C,GACjC,MAAM06C,EAAOH,EAGb,OAFAA,EAA2Bv6C,EAC3Bw6C,EAAkBx6C,GAAYA,EAAS+P,KAAK4qC,WAAc,KACnDD,CACX,CAKA,SAASE,EAAY3iC,GACjBuiC,EAAiBviC,CACrB,CAMA,SAAS4iC,IACLL,EAAiB,IACrB,CAUA,SAASM,EAAQtU,EAAIuU,EAAMR,EAA0BS,GAEjD,IAAKD,EACD,OAAOvU,EAEX,GAAIA,EAAGyU,GACH,OAAOzU,EAEX,MAAM0U,EAAsB,IAAIl9C,KAMxBk9C,EAAoB5rC,IACpB6rC,IAAkB,GAEtB,MAAMC,EAAeX,EAA4BM,GACjD,IAAIpL,EACJ,IACIA,EAAMnJ,KAAMxoC,EAOhB,CALA,QACIy8C,EAA4BW,GACxBF,EAAoB5rC,IACpB6rC,GAAiB,EAEzB,CAIA,OAAOxL,CAAG,EAUd,OAPAuL,EAAoBD,IAAK,EAIzBC,EAAoB7rC,IAAK,EAEzB6rC,EAAoB5rC,IAAK,EAClB4rC,CACX,CAWA,SAASG,EAAoBr7C,GACzB,MAAQ+P,KAAMurC,EAAS,MAAE7E,EAAK,MAAEhR,EAAK,UAAE8V,EAAS,MAAE1hD,EAAO2hD,cAAeA,GAAa,MAAEC,EAAK,MAAEC,EAAK,KAAEC,EAAI,OAAEC,EAAM,YAAEC,EAAW,KAAEx2B,EAAI,WAAEy2B,EAAU,IAAEf,EAAG,aAAEgB,GAAiB/7C,EACxK,IAAIlD,EACAk/C,EACJ,MAAMtB,EAAOD,EAA4Bz6C,GAIzC,IACI,GAAsB,EAAlBy2C,EAAMwF,UAAmD,CAGzD,MAAMC,EAAaX,GAAa9V,EAChC3oC,EAASq/C,GAAeP,EAAO5hD,KAAKkiD,EAAYA,EAAYL,EAAahiD,EAAOiiD,EAAYz2B,EAAM01B,IAClGiB,EAAmBN,CACvB,KACK,CAED,MAAME,EAASN,EAEX,EAGJx+C,EAASq/C,GAAeP,EAAO7jD,OAAS,EAClC6jD,EAAO/hD,EASH,CAAE6hD,QAAOD,QAAOE,SACpBC,EAAO/hD,EAAO,OACpBmiD,EAAmBV,EAAUzhD,MACvB6hD,EACAU,EAAyBV,EACnC,CAMJ,CAJA,MAAOhV,GACH2V,GAAWtkD,OAAS,EACpBs+C,EAAY3P,EAAK1mC,EAAU,GAC3BlD,EAASw/C,GAAYC,GACzB,CAIA,IAAIC,EAAO1/C,EAOX,GAAIk/C,IAAqC,IAAjBD,EAAwB,CAC5C,MAAM70B,EAAO9pB,OAAO8pB,KAAK80B,IACnB,UAAEC,GAAcO,EAClBt1B,EAAKnvB,QACW,EAAZkkD,IACIT,GAAgBt0B,EAAKta,KAAK,QAK1BovC,EAAmBS,EAAqBT,EAAkBR,IAE9DgB,EAAOE,GAAWF,EAAMR,GAoCpC,CA0BA,OAxBIvF,EAAMkG,OAMNH,EAAOE,GAAWF,GAClBA,EAAKG,KAAOH,EAAKG,KAAOH,EAAKG,KAAK3kD,OAAOy+C,EAAMkG,MAAQlG,EAAMkG,MAG7DlG,EAAMmG,aAKNJ,EAAKI,WAAanG,EAAMmG,YAMxB9/C,EAAS0/C,EAEb/B,EAA4BC,GACrB59C,CACX,CAmDA,MAAMs/C,EAA4BV,IAC9B,IAAI/L,EACJ,IAAK,MAAMtrC,KAAOq3C,GACF,UAARr3C,GAA2B,UAARA,IAAmB,QAAKA,OAC1CsrC,IAAQA,EAAM,CAAC,IAAItrC,GAAOq3C,EAAMr3C,IAGzC,OAAOsrC,CAAG,EAER8M,EAAuB,CAACf,EAAO7hD,KACjC,MAAM81C,EAAM,CAAC,EACb,IAAK,MAAMtrC,KAAOq3C,GACT,QAAgBr3C,IAAUA,EAAIlF,MAAM,KAAMtF,IAC3C81C,EAAItrC,GAAOq3C,EAAMr3C,IAGzB,OAAOsrC,CAAG,EAOd,SAASkN,EAAsBC,EAAWC,EAAWC,GACjD,MAAQnjD,MAAOojD,EAAWC,SAAUC,EAAY,UAAEC,GAAcN,GACxDjjD,MAAOwjD,EAAWH,SAAUI,EAAY,UAAEC,GAAcR,EAC1DhD,EAAQqD,EAAUI,aAQxB,GAAIT,EAAUJ,MAAQI,EAAUH,WAC5B,OAAO,EAEX,KAAII,GAAaO,GAAa,GA2B1B,SAAIJ,IAAgBG,GACXA,GAAiBA,EAAaG,UAInCR,IAAcI,IAGbJ,GAGAI,GAGEK,EAAgBT,EAAWI,EAAWtD,KALhCsD,GAnCb,GAAgB,KAAZE,EAGA,OAAO,EAEX,GAAgB,GAAZA,EACA,OAAKN,EAIES,EAAgBT,EAAWI,EAAWtD,KAHhCsD,EAKZ,GAAgB,EAAZE,EAAsC,CAC3C,MAAMI,EAAeZ,EAAUY,aAC/B,IAAK,IAAI7lD,EAAI,EAAGA,EAAI6lD,EAAa5lD,OAAQD,IAAK,CAC1C,MAAMuM,EAAMs5C,EAAa7lD,GACzB,GAAIulD,EAAUh5C,KAAS44C,EAAU54C,KAC5Bi2C,EAAeP,EAAO11C,GACvB,OAAO,CAEf,CACJ,CAqBJ,OAAO,CACX,CACA,SAASq5C,EAAgBT,EAAWI,EAAWG,GAC3C,MAAMI,EAAWxgD,OAAO8pB,KAAKm2B,GAC7B,GAAIO,EAAS7lD,SAAWqF,OAAO8pB,KAAK+1B,GAAWllD,OAC3C,OAAO,EAEX,IAAK,IAAID,EAAI,EAAGA,EAAI8lD,EAAS7lD,OAAQD,IAAK,CACtC,MAAMuM,EAAMu5C,EAAS9lD,GACrB,GAAIulD,EAAUh5C,KAAS44C,EAAU54C,KAC5Bi2C,EAAekD,EAAcn5C,GAC9B,OAAO,CAEf,CACA,OAAO,CACX,CACA,SAASw5C,GAAgB,MAAEpH,EAAK,OAAE7K,GAAUxxB,GAExC,MAAOwxB,GAAUA,EAAOkS,UAAYrH,GAC/BA,EAAQ7K,EAAO6K,OAAOr8B,GAAKA,EAC5BwxB,EAASA,EAAOA,MAExB,CAEA,MAAMmS,EAAchuC,GAASA,EAAKiuC,aAqZlC,SAASC,EAAwBzX,EAAI0X,GAC7BA,GAAYA,EAASC,eACjB,QAAQ3X,GACR0X,EAASxS,QAAQz3B,QAAQuyB,GAGzB0X,EAASxS,QAAQz3B,KAAKuyB,GAI1B+R,EAAiB/R,EAEzB,CAaA,SAAS4X,EAAQ/5C,EAAK4L,GAClB,GAAKouC,GAKA,CACD,IAAIC,EAAWD,GAAgBC,SAM/B,MAAMC,EAAiBF,GAAgBzS,QAAUyS,GAAgBzS,OAAO0S,SACpEC,IAAmBD,IACnBA,EAAWD,GAAgBC,SAAWlhD,OAAOK,OAAO8gD,IAGxDD,EAASj6C,GAAO4L,CACpB,MAjBQ,CAkBZ,CACA,SAASuuC,EAAOn6C,EAAKmxC,EAAciJ,GAAwB,GAGvD,MAAMz+C,EAAWq+C,IAAmB9D,EACpC,GAAIv6C,EAAU,CAIV,MAAMs+C,EAA8B,MAAnBt+C,EAAS4rC,OACpB5rC,EAASy2C,MAAMO,YAAch3C,EAASy2C,MAAMO,WAAWsH,SACvDt+C,EAAS4rC,OAAO0S,SACtB,GAAIA,GAAYj6C,KAAOi6C,EAEnB,OAAOA,EAASj6C,GAEf,GAAIiZ,UAAUvlB,OAAS,EACxB,OAAO0mD,IAAyB,QAAWjJ,GACrCA,EAAax7C,KAAKgG,EAASylC,OAC3B+P,CAKd,MACS,CAGb,CAGA,SAASkJ,EAAYnS,EAAQ7rC,GACzB,OAAOi+C,EAAQpS,EAAQ,KAAM7rC,EACjC,CAUA,MAAMk+C,EAAwB,CAAC,EAE/B,SAASC,EAAMC,EAAQzmC,EAAI3X,GAMvB,OAAOi+C,EAAQG,EAAQzmC,EAAI3X,EAC/B,CACA,SAASi+C,EAAQG,EAAQzmC,GAAI,UAAE0mC,EAAS,KAAEC,EAAI,MAAEC,EAAK,QAAEC,EAAO,UAAEC,GAAc,MAW1E,MAIMn/C,EAAWq+C,GACjB,IAAI3I,EAuDA0J,EAtDAC,GAAe,EACfC,GAAgB,EAiDpB,IAhDI,QAAMR,IACNpJ,EAAS,IAAMoJ,EAAO7uC,MACtBovC,GAAe,QAAYP,KAEtB,QAAWA,IAChBpJ,EAAS,IAAMoJ,EACfE,GAAO,IAEF,QAAQF,IACbQ,GAAgB,EAChBD,EAAeP,EAAOlyC,MAAK3P,IAAK,QAAWA,KAAM,QAAYA,KAC7Dy4C,EAAS,IAAMoJ,EAAO3kD,KAAI8C,IAClB,QAAMA,GACCA,EAAEgT,OAEJ,QAAWhT,GACTsiD,GAAStiD,IAEX,QAAWA,GACTm5C,EAAsBn5C,EAAG+C,EAAU,QADzC,KAWL01C,GAHC,QAAWoJ,GACZzmC,EAES,IAAM+9B,EAAsB0I,EAAQ9+C,EAAU,GAI9C,KACL,IAAIA,IAAYA,EAASi5C,YAMzB,OAHImG,GACAA,IAEG9I,EAA2BwI,EAAQ9+C,EAAU,EAAmC,CAACw/C,GAAW,EAKlG,KAGTnnC,GAAM2mC,EAAM,CACZ,MAAMS,EAAa/J,EACnBA,EAAS,IAAM6J,GAASE,IAC5B,CAEA,IAOIC,EAPAF,EAAahZ,IACb4Y,EAAU7S,EAAOyB,OAAS,KACtBoI,EAAsB5P,EAAIxmC,EAAU,EAAiC,CACxE,EAKL,GAAI2/C,GAAuB,CAavB,GAXAH,EAAY,KACPnnC,EAGI0mC,GACLzI,EAA2Bj+B,EAAIrY,EAAU,EAAmC,CACxE01C,IACA4J,EAAgB,QAAKrqD,EACrBuqD,IANJ9J,IASU,SAAVuJ,EAKA,OAAO,KALW,CAClB,MAAMlE,EAAM6E,KACZF,EAAa3E,EAAI8E,mBAAqB9E,EAAI8E,iBAAmB,GACjE,CAIJ,CACA,IAAIz4B,EAAWk4B,EACT,IAAIx+C,MAAMg+C,EAAO/mD,QAAQ+nD,KAAKlB,GAC9BA,EACN,MAAM1G,EAAM,KACR,GAAK3L,EAAO1gB,OAGZ,GAAIxT,EAAI,CAEJ,MAAM8O,EAAWolB,EAAOV,OACpBmT,GACAK,IACCC,EACKn4B,EAASva,MAAK,CAAC8oB,EAAG59B,KAAM,QAAW49B,EAAGtO,EAAStvB,OAC/C,QAAWqvB,EAAUC,OAGvBg4B,GACAA,IAEJ9I,EAA2Bj+B,EAAIrY,EAAU,EAAmC,CACxEmnB,EAEAC,IAAaw3B,OACP3pD,EACCqqD,GAAiBl4B,EAAS,KAAOw3B,EAC9B,GACAx3B,EACVo4B,IAEJp4B,EAAWD,EAEnB,MAGIolB,EAAOV,KACX,EAKJ,IAAI8B,EADJuK,EAAIlJ,eAAiB32B,EAEP,SAAV4mC,EACAtR,EAAYuK,EAEG,SAAV+G,EACLtR,EAAY,IAAMoS,GAAsB7H,EAAKl4C,GAAYA,EAASk+C,WAIlEhG,EAAIQ,KAAM,EACN14C,IACAk4C,EAAIjgC,GAAKjY,EAAS8L,KACtB6hC,EAAY,IAAMsK,EAASC,IAE/B,MAAM3L,EAAS,IAAI,KAAemJ,EAAQ/H,GAMtCt1B,EACI0mC,EACA7G,IAGA9wB,EAAWmlB,EAAOV,MAGP,SAAVoT,EACLc,GAAsBxT,EAAOV,IAAI/6B,KAAKy7B,GAASvsC,GAAYA,EAASk+C,UAGpE3R,EAAOV,MAEX,MAAMmU,EAAU,KACZzT,EAAON,OACHjsC,GAAYA,EAAS0gB,QACrB,QAAO1gB,EAAS0gB,MAAMgrB,QAASa,EACnC,EAIJ,OAFImT,GACAA,EAAWzrC,KAAK+rC,GACbA,CACX,CAEA,SAASC,EAAcnB,EAAQ7uC,EAAOvP,GAClC,MAAMw/C,EAAanmD,KAAK0rC,MAClBiQ,GAAS,QAASoJ,GAClBA,EAAO3sC,SAAS,KACZguC,GAAiBD,EAAYpB,GAC7B,IAAMoB,EAAWpB,GACrBA,EAAOhuC,KAAKovC,EAAYA,GAC9B,IAAI7nC,GACA,QAAWpI,GACXoI,EAAKpI,GAGLoI,EAAKpI,EAAM6Z,QACXppB,EAAUuP,GAEd,MAAMymC,EAAM2H,GACZ+B,GAAmBrmD,MACnB,MAAM41C,EAAMgP,EAAQjJ,EAAQr9B,EAAGvH,KAAKovC,GAAax/C,GAOjD,OANIg2C,EACA0J,GAAmB1J,GAGnB2J,KAEG1Q,CACX,CACA,SAASwQ,GAAiBpF,EAAKr4C,GAC3B,MAAM49C,EAAW59C,EAAK3J,MAAM,KAC5B,MAAO,KACH,IAAI29C,EAAMqE,EACV,IAAK,IAAIjjD,EAAI,EAAGA,EAAIwoD,EAASvoD,QAAU2+C,EAAK5+C,IACxC4+C,EAAMA,EAAI4J,EAASxoD,IAEvB,OAAO4+C,CAAG,CAElB,CACA,SAAS6I,GAAStvC,EAAOwoC,GACrB,KAAK,QAASxoC,IAAUA,EAAM,YAC1B,OAAOA,EAGX,GADAwoC,EAAOA,GAAQ,IAAItwB,IACfswB,EAAKpgD,IAAI4X,GACT,OAAOA,EAGX,GADAwoC,EAAKr9B,IAAInL,IACL,QAAMA,GACNsvC,GAAStvC,EAAMA,MAAOwoC,QAErB,IAAI,QAAQxoC,GACb,IAAK,IAAInY,EAAI,EAAGA,EAAImY,EAAMlY,OAAQD,IAC9BynD,GAAStvC,EAAMnY,GAAI2gD,QAGtB,IAAI,QAAMxoC,KAAU,QAAMA,GAC3BA,EAAMklB,SAASO,IACX6pB,GAAS7pB,EAAG+iB,EAAK,SAGpB,IAAI,QAAcxoC,GACnB,IAAK,MAAM5L,KAAO4L,EACdsvC,GAAStvC,EAAM5L,GAAMo0C,GAG7B,OAAOxoC,CACX,CAEA,SAASswC,KACL,MAAMC,EAAQ,CACVC,WAAW,EACXC,WAAW,EACXC,cAAc,EACdC,cAAe,IAAIhhD,KAQvB,OANAihD,IAAU,KACNL,EAAMC,WAAY,CAAI,IAE1BK,IAAgB,KACZN,EAAMG,cAAe,CAAI,IAEtBH,CACX,CACA,MAAMO,GAA0B,CAAChhD,SAAUe,OACrCkgD,GAAqB,CACvB/hD,KAAM,iBACNpF,MAAO,CACHklB,KAAM+f,OACNmiB,OAAQC,QACRC,UAAWD,QAEXE,cAAeL,GACfM,QAASN,GACTO,aAAcP,GACdQ,iBAAkBR,GAElBS,cAAeT,GACfU,QAASV,GACTW,aAAcX,GACdY,iBAAkBZ,GAElBa,eAAgBb,GAChBc,SAAUd,GACVe,cAAef,GACfgB,kBAAmBhB,IAEvBiB,MAAMnoD,GAAO,MAAE4hD,IACX,MAAMz7C,EAAWiiD,KACXzB,EAAQD,KACd,IAAI2B,EACJ,MAAO,KACH,MAAMhF,EAAWzB,EAAM0G,SAAWC,GAAyB3G,EAAM0G,WAAW,GAC5E,IAAKjF,IAAaA,EAASnlD,OACvB,OAEJ,IAAIsqD,EAAQnF,EAAS,GACrB,GAAIA,EAASnlD,OAAS,EAAG,CACrB,IAAIuqD,GAAW,EAEf,IAAK,MAAM9jB,KAAK0e,EACZ,GAAI1e,EAAEzuB,OAASwsC,GAAS,CAChB,EAMJ8F,EAAQ7jB,EACR8jB,GAAW,EAEP,KACR,CAER,CAGA,MAAMC,GAAW,QAAM1oD,IACjB,KAAEklB,GAASwjC,EASjB,GAAI/B,EAAME,UACN,OAAO8B,GAAiBH,GAI5B,MAAMI,EAAaC,GAAkBL,GACrC,IAAKI,EACD,OAAOD,GAAiBH,GAE5B,MAAMM,EAAaC,GAAuBH,EAAYF,EAAU/B,EAAOxgD,GACvE6iD,GAAmBJ,EAAYE,GAC/B,MAAMG,EAAW9iD,EAAS89C,QACpBiF,EAAgBD,GAAYJ,GAAkBI,GACpD,IAAIE,GAAuB,EAC3B,MAAM,iBAAEC,GAAqBR,EAAW1yC,KACxC,GAAIkzC,EAAkB,CAClB,MAAM5+C,EAAM4+C,SACchuD,IAAtBitD,EACAA,EAAoB79C,EAEfA,IAAQ69C,IACbA,EAAoB79C,EACpB2+C,GAAuB,EAE/B,CAEA,GAAID,GACAA,EAAchzC,OAASwsC,MACrB2G,GAAgBT,EAAYM,IAAkBC,GAAuB,CACvE,MAAMG,EAAeP,GAAuBG,EAAeR,EAAU/B,EAAOxgD,GAI5E,GAFA6iD,GAAmBE,EAAeI,GAErB,WAATpkC,EAWA,OAVAyhC,EAAME,WAAY,EAElByC,EAAaC,WAAa,KACtB5C,EAAME,WAAY,GAGa,IAA3B1gD,EAASqjD,OAAOx3B,QAChB7rB,EAASqjD,QACb,EAEGb,GAAiBH,GAEV,WAATtjC,GAAqB0jC,EAAW1yC,OAASwsC,KAC9C4G,EAAaG,WAAa,CAAClpC,EAAImpC,EAAaC,KACxC,MAAMC,EAAqBC,GAAuBlD,EAAOuC,GACzDU,EAAmB3kB,OAAOikB,EAAc1+C,MAAQ0+C,EAEhD3oC,EAAGupC,SAAW,KACVJ,IACAnpC,EAAGupC,cAAW1uD,SACP0tD,EAAWa,YAAY,EAElCb,EAAWa,aAAeA,CAAY,EAGlD,CACA,OAAOnB,CAAK,CAEpB,GAIEuB,GAAiB5C,GACvB,SAAS0C,GAAuBlD,EAAO/J,GACnC,MAAM,cAAEmK,GAAkBJ,EAC1B,IAAIiD,EAAqB7C,EAAchkD,IAAI65C,EAAM1mC,MAKjD,OAJK0zC,IACDA,EAAqBrmD,OAAOK,OAAO,MACnCmjD,EAAc/jD,IAAI45C,EAAM1mC,KAAM0zC,IAE3BA,CACX,CAGA,SAASb,GAAuBnM,EAAO58C,EAAO2mD,EAAOxgD,GACjD,MAAM,OAAEihD,EAAM,KAAEliC,EAAI,UAAEoiC,GAAY,EAAK,cAAEC,EAAa,QAAEC,EAAO,aAAEC,EAAY,iBAAEC,EAAgB,cAAEC,EAAa,QAAEC,EAAO,aAAEC,EAAY,iBAAEC,EAAgB,eAAEC,EAAc,SAAEC,EAAQ,cAAEC,EAAa,kBAAEC,GAAsBloD,EAClNwK,EAAMy6B,OAAO2X,EAAMpyC,KACnBo/C,EAAqBC,GAAuBlD,EAAO/J,GACnDoN,EAAW,CAACC,EAAM9lD,KACpB8lD,GACIxN,EAA2BwN,EAAM9jD,EAAU,EAAoChC,EAAK,EAEtF+lD,EAAgB,CAACD,EAAM9lD,KACzB,MAAMu0C,EAAOv0C,EAAK,GAClB6lD,EAASC,EAAM9lD,IACX,QAAQ8lD,GACJA,EAAKxZ,OAAMwZ,GAAQA,EAAK/rD,QAAU,KAClCw6C,IAECuR,EAAK/rD,QAAU,GACpBw6C,GACJ,EAEEyR,EAAQ,CACVjlC,OACAoiC,YACA8C,YAAY7pC,GACR,IAAI0pC,EAAO1C,EACX,IAAKZ,EAAMC,UAAW,CAClB,IAAIQ,EAIA,OAHA6C,EAAOlC,GAAkBR,CAKjC,CAEIhnC,EAAGupC,UACHvpC,EAAGupC,UAAS,GAGhB,MAAMO,EAAeT,EAAmBp/C,GACpC6/C,GACAhB,GAAgBzM,EAAOyN,IACvBA,EAAa9pC,GAAGupC,UAEhBO,EAAa9pC,GAAGupC,WAEpBE,EAASC,EAAM,CAAC1pC,GACpB,EACA+pC,MAAM/pC,GACF,IAAI0pC,EAAOzC,EACP+C,EAAY9C,EACZ+C,EAAa9C,EACjB,IAAKf,EAAMC,UAAW,CAClB,IAAIQ,EAMA,OALA6C,EAAOjC,GAAYR,EACnB+C,EAAYtC,GAAiBR,EAC7B+C,EAAatC,GAAqBR,CAK1C,CACA,IAAI+C,GAAS,EACb,MAAM/R,EAAQn4B,EAAGmqC,SAAYC,IACrBF,IAEJA,GAAS,EAELT,EADAW,EACSH,EAGAD,EAHY,CAAChqC,IAKtB4pC,EAAMR,cACNQ,EAAMR,eAEVppC,EAAGmqC,cAAWtvD,EAAS,EAEvB6uD,EACAC,EAAcD,EAAM,CAAC1pC,EAAIm4B,IAGzBA,GAER,EACAkS,MAAMrqC,EAAIsqC,GACN,MAAMrgD,EAAMy6B,OAAO2X,EAAMpyC,KAIzB,GAHI+V,EAAGmqC,UACHnqC,EAAGmqC,UAAS,GAEZ/D,EAAMG,aACN,OAAO+D,IAEXb,EAASrC,EAAe,CAACpnC,IACzB,IAAIkqC,GAAS,EACb,MAAM/R,EAAQn4B,EAAGupC,SAAYa,IACrBF,IAEJA,GAAS,EACTI,IAEIb,EADAW,EACS7C,EAGAD,EAHkB,CAACtnC,IAKhCA,EAAGupC,cAAW1uD,EACVwuD,EAAmBp/C,KAASoyC,UACrBgN,EAAmBp/C,GAC9B,EAEJo/C,EAAmBp/C,GAAOoyC,EACtBgL,EACAsC,EAActC,EAAS,CAACrnC,EAAIm4B,IAG5BA,GAER,EACAoS,MAAMlO,GACF,OAAOmM,GAAuBnM,EAAO58C,EAAO2mD,EAAOxgD,EACvD,GAEJ,OAAOgkD,CACX,CAKA,SAASxB,GAAiB/L,GACtB,GAAImO,GAAYnO,GAGZ,OAFAA,EAAQiG,GAAWjG,GACnBA,EAAMyG,SAAW,KACVzG,CAEf,CACA,SAASiM,GAAkBjM,GACvB,OAAOmO,GAAYnO,GACbA,EAAMyG,SACFzG,EAAMyG,SAAS,QACfjoD,EACJwhD,CACV,CACA,SAASoM,GAAmBpM,EAAOuN,GACT,EAAlBvN,EAAMwF,WAA4CxF,EAAM2G,UACxDyF,GAAmBpM,EAAM2G,UAAUU,QAASkG,GAErB,IAAlBvN,EAAMwF,WACXxF,EAAMoO,UAAUjI,WAAaoH,EAAMW,MAAMlO,EAAMoO,WAC/CpO,EAAMqO,WAAWlI,WAAaoH,EAAMW,MAAMlO,EAAMqO,aAGhDrO,EAAMmG,WAAaoH,CAE3B,CACA,SAAS5B,GAAyBlF,EAAU6H,GAAc,EAAOC,GAC7D,IAAIC,EAAM,GACNC,EAAqB,EACzB,IAAK,IAAIptD,EAAI,EAAGA,EAAIolD,EAASnlD,OAAQD,IAAK,CACtC,IAAIuqD,EAAQnF,EAASplD,GAErB,MAAMuM,EAAmB,MAAb2gD,EACN3C,EAAMh+C,IACNy6B,OAAOkmB,GAAalmB,OAAoB,MAAbujB,EAAMh+C,IAAcg+C,EAAMh+C,IAAMvM,GAE7DuqD,EAAMtyC,OAASo1C,IACO,IAAlB9C,EAAM9E,WACN2H,IACJD,EAAMA,EAAIjtD,OAAOoqD,GAAyBC,EAAMnF,SAAU6H,EAAa1gD,MAGlE0gD,GAAe1C,EAAMtyC,OAASwsC,KACnC0I,EAAIhxC,KAAY,MAAP5P,EAAcq4C,GAAW2F,EAAO,CAAEh+C,QAASg+C,EAE5D,CAKA,GAAI6C,EAAqB,EACrB,IAAK,IAAIptD,EAAI,EAAGA,EAAImtD,EAAIltD,OAAQD,IAC5BmtD,EAAIntD,GAAGylD,WAAa,EAG5B,OAAO0H,CACX,CAGA,SAASG,GAAgB1kD,GACrB,OAAO,QAAWA,GAAW,CAAEshD,MAAOthD,EAASzB,KAAMyB,EAAQzB,MAASyB,CAC1E,CAEA,MAAM2kD,GAAkBvtD,KAAQA,EAAEiY,KAAKu1C,cA+IvC,MAAMV,GAAenO,GAAUA,EAAM1mC,KAAKw1C,cAQhB/uB,OACAA,OA2M1B,SAAS98B,GAAQ8rD,EAASvmD,GACtB,OAAI,QAAQumD,GACDA,EAAQ54C,MAAMpT,GAAME,GAAQF,EAAGyF,MAEjC,QAASumD,GACPA,EAAQzsD,MAAM,KAAKoZ,SAASlT,KAE9BumD,EAAQvrD,MACNurD,EAAQvrD,KAAKgF,EAI5B,CACA,SAASwmD,GAAY3B,EAAMr5B,GACvBi7B,GAAsB5B,EAAM,IAAoCr5B,EACpE,CACA,SAASk7B,GAAc7B,EAAMr5B,GACzBi7B,GAAsB5B,EAAM,KAAuCr5B,EACvE,CACA,SAASi7B,GAAsB5B,EAAM/zC,EAAM0a,EAAS4zB,IAIhD,MAAMuH,EAAc9B,EAAK+B,QACpB/B,EAAK+B,MAAQ,KAEV,IAAIC,EAAUr7B,EACd,MAAOq7B,EAAS,CACZ,GAAIA,EAAQC,cACR,OAEJD,EAAUA,EAAQla,MACtB,CACA,OAAOkY,GAAM,GAQrB,GANAkC,GAAWj2C,EAAM61C,EAAan7B,GAM1BA,EAAQ,CACR,IAAIq7B,EAAUr7B,EAAOmhB,OACrB,MAAOka,GAAWA,EAAQla,OAClBgZ,GAAYkB,EAAQla,OAAO6K,QAC3BwP,GAAsBL,EAAa71C,EAAM0a,EAAQq7B,GAErDA,EAAUA,EAAQla,MAE1B,CACJ,CACA,SAASqa,GAAsBnC,EAAM/zC,EAAM0a,EAAQy7B,GAG/C,MAAMC,EAAWH,GAAWj2C,EAAM+zC,EAAMoC,GAAe,GACvDE,IAAY,MACR,QAAOF,EAAcn2C,GAAOo2C,EAAS,GACtC17B,EACP,CACA,SAAS47B,GAAe5P,GAEpBA,EAAMwF,YAAa,IACnBxF,EAAMwF,YAAa,GACvB,CACA,SAASqK,GAAc7P,GACnB,OAAyB,IAAlBA,EAAMwF,UAA4CxF,EAAMoO,UAAYpO,CAC/E,CAEA,SAASuP,GAAWj2C,EAAM+zC,EAAMr5B,EAAS4zB,GAAiBkI,GAAU,GAChE,GAAI97B,EAAQ,CACR,MAAMu5B,EAAQv5B,EAAO1a,KAAU0a,EAAO1a,GAAQ,IAIxC61C,EAAc9B,EAAK0C,QACpB1C,EAAK0C,MAAQ,IAAIxoD,KACd,GAAIysB,EAAOwuB,YACP,QAIJ,UAIAmH,GAAmB31B,GACnB,MAAMklB,EAAM2G,EAA2BwN,EAAMr5B,EAAQ1a,EAAM/R,GAG3D,OAFAqiD,MACA,UACO1Q,CAAG,GAQlB,OANI4W,EACAvC,EAAMyC,QAAQb,GAGd5B,EAAM/vC,KAAK2xC,GAERA,CACX,CAUJ,CACA,MAAMc,GAAcC,GAAc,CAAC7C,EAAMr5B,EAAS4zB,OAEhDsB,IAAuC,OAAdgH,IACvBX,GAAWW,GAAW,IAAI3oD,IAAS8lD,KAAQ9lD,IAAOysB,GAChDm8B,GAAgBF,GAAW,MAC3B7F,GAAY6F,GAAW,KACvBG,GAAiBH,GAAW,MAC5BI,GAAYJ,GAAW,KACvB5F,GAAkB4F,GAAW,OAC7BN,GAAcM,GAAW,MACzBK,GAAmBL,GAAW,MAC9BM,GAAoBN,GAAW,OAC/BO,GAAkBP,GAAW,OACnC,SAASQ,GAAgBpD,EAAMr5B,EAAS4zB,IACpC2H,GAAW,KAA0ClC,EAAMr5B,EAC/D,CAsBA,SAAS08B,GAAe1Q,EAAO2Q,GAC3B,MAAMC,EAAmB9M,EACzB,GAAyB,OAArB8M,EAEA,OAAO5Q,EAEX,MAAMz2C,EAAWsnD,GAAeD,IAC5BA,EAAiB5hB,MACf8hB,EAAW9Q,EAAMkG,OAASlG,EAAMkG,KAAO,IAC7C,IAAK,IAAI7kD,EAAI,EAAGA,EAAIsvD,EAAWrvD,OAAQD,IAAK,CACxC,IAAK0vD,EAAKv3C,EAAOw3C,EAAKC,EAAY,MAAaN,EAAWtvD,GACtD0vD,KACI,QAAWA,KACXA,EAAM,CACFG,QAASH,EACTI,QAASJ,IAGbA,EAAIxI,MACJO,GAAStvC,GAEbs3C,EAAStzC,KAAK,CACVuzC,MACAxnD,WACAiQ,QACAmX,cAAU,EACVqgC,MACAC,cAGZ,CACA,OAAOjR,CACX,CACA,SAASoR,GAAoBpR,EAAOqG,EAAW98C,EAAUf,GACrD,MAAMsoD,EAAW9Q,EAAMkG,KACjBmL,EAAchL,GAAaA,EAAUH,KAC3C,IAAK,IAAI7kD,EAAI,EAAGA,EAAIyvD,EAASxvD,OAAQD,IAAK,CACtC,MAAMiwD,EAAUR,EAASzvD,GACrBgwD,IACAC,EAAQ3gC,SAAW0gC,EAAYhwD,GAAGmY,OAEtC,IAAI6zC,EAAOiE,EAAQP,IAAIvoD,GACnB6kD,KAGA,UACAxN,EAA2BwN,EAAM9jD,EAAU,EAAmC,CAC1Ey2C,EAAMr8B,GACN2tC,EACAtR,EACAqG,KAEJ,UAER,CACJ,CAEA,MAAMkL,GAAa,aACbC,GAAa,aAInB,SAASC,GAAiBjpD,EAAMkpD,GAC5B,OAAOC,GAAaJ,GAAY/oD,GAAM,EAAMkpD,IAAuBlpD,CACvE,CACA,MAAMopD,GAAyB7a,SAI/B,SAAS8a,GAAwBlL,GAC7B,OAAI,QAASA,GACFgL,GAAaJ,GAAY5K,GAAW,IAAUA,EAI7CA,GAAaiL,EAE7B,CAIA,SAASE,GAAiBtpD,GACtB,OAAOmpD,GAAaH,GAAYhpD,EACpC,CAEA,SAASmpD,GAAar4C,EAAM9Q,EAAMupD,GAAc,EAAML,GAAqB,GACvE,MAAMnoD,EAAWu6C,GAA4B8D,GAC7C,GAAIr+C,EAAU,CACV,MAAMs7C,EAAYt7C,EAAS+P,KAE3B,GAAIA,IAASi4C,GAAY,CACrB,MAAMS,EAAWC,GAAiBpN,GAAW,GAC7C,GAAImN,IACCA,IAAaxpD,GACVwpD,KAAa,QAASxpD,IACtBwpD,KAAa,SAAW,QAASxpD,KACrC,OAAOq8C,CAEf,CACA,MAAM3L,EAGN37B,GAAQhU,EAAS+P,IAASurC,EAAUvrC,GAAO9Q,IAEvC+U,GAAQhU,EAASg3C,WAAWjnC,GAAO9Q,GACvC,OAAK0wC,GAAOwY,EAED7M,EASJ3L,CACX,CAKJ,CACA,SAAS37B,GAAQ20C,EAAU1pD,GACvB,OAAQ0pD,IACHA,EAAS1pD,IACN0pD,GAAS,QAAS1pD,KAClB0pD,GAAS,SAAW,QAAS1pD,KACzC,CAKA,SAAS2pD,GAAW9J,EAAQ+J,EAAYjP,EAAO1lC,GAC3C,IAAI+wC,EACJ,MAAMnL,EAAUF,GAASA,EAAM1lC,GAC/B,IAAI,QAAQ4qC,KAAW,QAASA,GAAS,CACrCmG,EAAM,IAAInkD,MAAMg+C,EAAO/mD,QACvB,IAAK,IAAID,EAAI,EAAGq0C,EAAI2S,EAAO/mD,OAAQD,EAAIq0C,EAAGr0C,IACtCmtD,EAAIntD,GAAK+wD,EAAW/J,EAAOhnD,GAAIA,OAAG7C,EAAW6kD,GAAUA,EAAOhiD,GAEtE,MACK,GAAsB,kBAAXgnD,EAAqB,CAC7B,EAGJmG,EAAM,IAAInkD,MAAMg+C,GAChB,IAAK,IAAIhnD,EAAI,EAAGA,EAAIgnD,EAAQhnD,IACxBmtD,EAAIntD,GAAK+wD,EAAW/wD,EAAI,EAAGA,OAAG7C,EAAW6kD,GAAUA,EAAOhiD,GAElE,MACK,IAAI,QAASgnD,GACd,GAAIA,EAAOtR,OAAO4E,UACd6S,EAAMnkD,MAAM8mB,KAAKk3B,GAAQ,CAACgK,EAAMhxD,IAAM+wD,EAAWC,EAAMhxD,OAAG7C,EAAW6kD,GAAUA,EAAOhiD,UAErF,CACD,MAAMovB,EAAO9pB,OAAO8pB,KAAK43B,GACzBmG,EAAM,IAAInkD,MAAMomB,EAAKnvB,QACrB,IAAK,IAAID,EAAI,EAAGq0C,EAAIjlB,EAAKnvB,OAAQD,EAAIq0C,EAAGr0C,IAAK,CACzC,MAAMuM,EAAM6iB,EAAKpvB,GACjBmtD,EAAIntD,GAAK+wD,EAAW/J,EAAOz6C,GAAMA,EAAKvM,EAAGgiD,GAAUA,EAAOhiD,GAC9D,CACJ,MAGAmtD,EAAM,GAKV,OAHIrL,IACAA,EAAM1lC,GAAS+wC,GAEZA,CACX,CAoCA,SAAS8D,GAAWtN,EAAOx8C,EAAMpF,EAAQ,CAAC,EAG1CmvD,EAAUC,GACN,GAAI1O,EAAyB2O,MACxB3O,EAAyB3O,QACtByZ,GAAe9K,EAAyB3O,SACxC2O,EAAyB3O,OAAOsd,KAGpC,MAFa,YAATjqD,IACApF,EAAMoF,KAAOA,GACVq9C,GAAY,OAAQziD,EAAOmvD,GAAYA,KAElD,IAAIG,EAAO1N,EAAMx8C,GAWbkqD,GAAQA,EAAK95C,KACb85C,EAAK75C,IAAK,GAEd85C,KACA,MAAMC,EAAmBF,GAAQG,GAAiBH,EAAKtvD,IACjD0vD,EAAWC,GAAYrE,GAAU,CACnC9gD,IAAKxK,EAAMwK,KAGNglD,GAAoBA,EAAiBhlD,KACtC,IAAIpF,KACToqD,IAAqBL,EAAWA,IAAa,IAAKK,GAAgC,IAAZ5N,EAAMr1C,EACzE,IACC,GAOP,OANK6iD,GAAaM,EAASE,UACvBF,EAASG,aAAe,CAACH,EAASE,QAAU,OAE5CN,GAAQA,EAAK95C,KACb85C,EAAK75C,IAAK,GAEPi6C,CACX,CACA,SAASD,GAAiBK,GACtB,OAAOA,EAAO/8C,MAAKy1C,IACVuH,GAAQvH,IAETA,EAAMtyC,OAASwsC,MAEf8F,EAAMtyC,OAASo1C,KACdmE,GAAiBjH,EAAMnF,aAI1ByM,EACA,IACV,CAyBA,MAAME,GAAqB/xD,GAClBA,EAEDgyD,GAAoBhyD,GACbwvD,GAAexvD,IAAMA,EAAE2tC,MAC3BokB,GAAkB/xD,EAAE8zC,QAHhB,KAKTme,IAGQ,QAAO3sD,OAAOK,OAAO,MAAO,CACtCjB,EAAG1E,GAAKA,EACRkyD,IAAKlyD,GAAKA,EAAE2+C,MAAMr8B,GAClB6vC,MAAOnyD,GAAKA,EAAEutB,KACd6kC,OAAQpyD,GAA2EA,EAAE+B,MACrFswD,OAAQryD,GAA2EA,EAAE4jD,MACrF0O,OAAQtyD,GAA2EA,EAAE2jD,MACrF4O,MAAOvyD,GAA0EA,EAAEwyD,KACnFC,QAASzyD,GAAK+xD,GAAkB/xD,EAAE8zC,QAClC4e,MAAO1yD,GAAK+xD,GAAkB/xD,EAAE0kD,MAChCiO,MAAO3yD,GAAKA,EAAE6jD,KACd+O,SAAU5yD,GAA4B6yD,GAAqB7yD,GAC3D8yD,aAAc9yD,GAAKA,EAAE+yD,IAAM/yD,EAAE+yD,EAAI,IAAM5S,EAASngD,EAAEurD,SAClDyH,UAAWhzD,GAAKA,EAAE+U,IAAM/U,EAAE+U,EAAI8qC,EAAS7mC,KAAKhZ,EAAE2tC,QAC9CslB,OAAQjzD,GAA4BmoD,EAAcnvC,KAAKhZ,KAGrDkzD,GAAkB,CAACxK,EAAOn8C,IAAQm8C,IAAU,OAAcA,EAAMyK,kBAAmB,QAAOzK,EAAOn8C,GACjG6mD,GAA8B,CAChCtuD,KAAMwJ,EAAGpG,GAAYqE,GACjB,MAAM,IAAE02C,EAAG,WAAEe,EAAU,KAAEz2B,EAAI,MAAExrB,EAAK,YAAEsxD,EAAW,KAAEp7C,EAAI,WAAEinC,GAAeh3C,EAWxE,IAAIorD,EACJ,GAAe,MAAX/mD,EAAI,GAAY,CAChB,MAAMwI,EAAIs+C,EAAY9mD,GACtB,QAAUpP,IAAN4X,EACA,OAAQA,GACJ,KAAK,EACD,OAAOivC,EAAWz3C,GACtB,KAAK,EACD,OAAOghB,EAAKhhB,GAChB,KAAK,EACD,OAAO02C,EAAI12C,GACf,KAAK,EACD,OAAOxK,EAAMwK,OAIpB,IAAI2mD,GAAgBlP,EAAYz3C,GAEjC,OADA8mD,EAAY9mD,GAAO,EACZy3C,EAAWz3C,GAEjB,GAAIghB,IAAS,OAAa,QAAOA,EAAMhhB,GAExC,OADA8mD,EAAY9mD,GAAO,EACZghB,EAAKhhB,GAEX,IAGJ+mD,EAAkBprD,EAASw7C,aAAa,MACrC,QAAO4P,EAAiB/mD,GAExB,OADA8mD,EAAY9mD,GAAO,EACZxK,EAAMwK,GAEZ,GAAI02C,IAAQ,OAAa,QAAOA,EAAK12C,GAEtC,OADA8mD,EAAY9mD,GAAO,EACZ02C,EAAI12C,GAEkBgnD,KAC7BF,EAAY9mD,GAAO,EACvB,CACJ,CACA,MAAMinD,EAAevB,GAAoB1lD,GACzC,IAAIknD,EAAWC,EAEf,OAAIF,GACY,WAARjnD,IACA,OAAMrE,EAAU,MAA8BqE,GAG3CinD,EAAatrD,KAIvBurD,EAAYx7C,EAAK07C,gBACbF,EAAYA,EAAUlnD,IAChBknD,EAEFxQ,IAAQ,OAAa,QAAOA,EAAK12C,IAEtC8mD,EAAY9mD,GAAO,EACZ02C,EAAI12C,KAIbmnD,EAAmBxU,EAAWv0C,OAAO+oD,kBACnC,QAAOA,EAAkBnnD,GAEdmnD,EAAiBnnD,QAL3B,EAuBT,EACAxH,KAAMuJ,EAAGpG,GAAYqE,EAAK4L,GACtB,MAAM,KAAEoV,EAAI,WAAEy2B,EAAU,IAAEf,GAAQ/6C,EAClC,OAAIgrD,GAAgBlP,EAAYz3C,IAC5By3C,EAAWz3C,GAAO4L,GACX,GAQFoV,IAAS,OAAa,QAAOA,EAAMhhB,IACxCghB,EAAKhhB,GAAO4L,GACL,KAEF,QAAOjQ,EAASnG,MAAOwK,MAIjB,MAAXA,EAAI,MAAcA,EAAIlF,MAAM,KAAMa,MAe9B+6C,EAAI12C,GAAO4L,GAGZ,GACX,EACA5X,KAAM+N,GAAG,KAAEif,EAAI,WAAEy2B,EAAU,YAAEqP,EAAW,IAAEpQ,EAAG,WAAE/D,EAAU,aAAEwE,IAAkBn3C,GACzE,IAAI+mD,EACJ,QAAUD,EAAY9mD,IACjBghB,IAAS,OAAa,QAAOA,EAAMhhB,IACpC2mD,GAAgBlP,EAAYz3C,KAC1B+mD,EAAkB5P,EAAa,MAAO,QAAO4P,EAAiB/mD,KAChE,QAAO02C,EAAK12C,KACZ,QAAO0lD,GAAqB1lD,KAC5B,QAAO2yC,EAAWv0C,OAAO+oD,iBAAkBnnD,EACnD,EACAqnD,eAAejhC,EAAQpmB,EAAKsnD,GAQxB,OAPsB,MAAlBA,EAAW/uD,IAEX6tB,EAAOrkB,EAAE+kD,YAAY9mD,GAAO,GAEvB,QAAOsnD,EAAY,UACxB5xD,KAAK8C,IAAI4tB,EAAQpmB,EAAKsnD,EAAW17C,MAAO,MAErCkgC,QAAQub,eAAejhC,EAAQpmB,EAAKsnD,EAC/C,GA+FJ,IAAIN,IAAoB,EACxB,SAASO,GAAa5rD,GAClB,MAAMU,EAAUiqD,GAAqB3qD,GAC/BkgD,EAAalgD,EAASylC,MACtBsV,EAAM/6C,EAAS+6C,IAErBsQ,IAAoB,EAGhB3qD,EAAQmrD,cACRhI,GAASnjD,EAAQmrD,aAAc7rD,EAAU,MAE7C,MAEAqlB,KAAMymC,EAAahd,SAAUid,EAAe,QAAEplB,EAASkY,MAAOmN,EAAc5N,QAAS6N,EAAgBzN,OAAQ0N,EAAa,QAE1HC,EAAO,YAAEC,EAAW,QAAEzE,EAAO,aAAE0E,EAAY,QAAEzE,EAAO,UAAE0E,EAAS,YAAEC,EAAW,cAAEC,EAAa,cAAEC,EAAa,UAAEC,EAAS,UAAEC,EAAS,OAAE/Q,EAAM,cAAEgR,EAAa,gBAAEC,EAAe,cAAEC,EAAa,eAAEC,EAAc,OAEvMC,EAAM,aAAEjR,EAAY,WAEpBkR,EAAU,WAAE7F,EAAU,QAAE8F,GAAYxsD,EAC9BysD,EAAgG,KAmBtG,GAHIjB,GACAkB,GAAkBlB,EAAenR,EAAKoS,EAA0BntD,EAASg3C,WAAWv0C,OAAO4qD,mBAE3F1mB,EACA,IAAK,MAAMtiC,KAAOsiC,EAAS,CACvB,MAAM2mB,EAAgB3mB,EAAQtiC,IAC1B,QAAWipD,KAaPvS,EAAI12C,GAAOipD,EAAcx8C,KAAKovC,GAU1C,CAEJ,GAAI4L,EAAa,CACT,EAIJ,MAAMzmC,EAAOymC,EAAY9xD,KAAKkmD,EAAYA,GACtC,GAKC,QAAS76B,KAIVrlB,EAASqlB,MAAO,QAASA,GAgBjC,CAGA,GADAgmC,IAAoB,EAChBU,EACA,IAAK,MAAM1nD,KAAO0nD,EAAiB,CAC/B,MAAMv9C,EAAMu9C,EAAgB1nD,GACtBzH,GAAM,QAAW4R,GACjBA,EAAIsC,KAAKovC,EAAYA,IACrB,QAAW1xC,EAAI5R,KACX4R,EAAI5R,IAAIkU,KAAKovC,EAAYA,GACzB,KACN,EAGJ,MAAMrjD,IAAO,QAAW2R,KAAQ,QAAWA,EAAI3R,KACzC2R,EAAI3R,IAAIiU,KAAKovC,GAKT,KACJ1hB,EAAIsQ,GAAS,CACflyC,MACAC,QAEJO,OAAOsuD,eAAe3Q,EAAK12C,EAAK,CAC5BkpD,YAAY,EACZC,cAAc,EACd5wD,IAAK,IAAM4hC,EAAEvuB,MACbpT,IAAK64B,GAAM8I,EAAEvuB,MAAQylB,GAK7B,CAEJ,GAAIs2B,EACA,IAAK,MAAM3nD,KAAO2nD,EACdyB,GAAczB,EAAa3nD,GAAM02C,EAAKmF,EAAY77C,GAG1D,GAAI4nD,EAAgB,CAChB,MAAM3N,GAAW,QAAW2N,GACtBA,EAAejyD,KAAKkmD,GACpB+L,EACN9b,QAAQS,QAAQ0N,GAAUnpB,SAAQ9wB,IAC9B+5C,EAAQ/5C,EAAKi6C,EAASj6C,GAAK,GAEnC,CAIA,SAASqpD,EAAsB9xB,EAAUkoB,IACjC,QAAQA,GACRA,EAAK3uB,SAAQw4B,GAAS/xB,EAAS+xB,EAAM78C,KAAKovC,MAErC4D,GACLloB,EAASkoB,EAAKhzC,KAAKovC,GAE3B,CAaA,GAvBIiM,GACAtI,GAASsI,EAASnsD,EAAU,KAUhC0tD,EAAsB9G,GAAewF,GACrCsB,EAAsB7M,GAAW8G,GACjC+F,EAAsB7G,GAAgBwF,GACtCqB,EAAsB5G,GAAWc,GACjC8F,EAAsBjI,GAAa6G,GACnCoB,EAAsB/H,GAAe4G,GACrCmB,EAAsBxG,GAAiB4F,GACvCY,EAAsBzG,GAAiB2F,GACvCc,EAAsB1G,GAAmB6F,GACzCa,EAAsB5M,GAAiB2L,GACvCiB,EAAsBtH,GAAauG,GACnCe,EAAsB3G,GAAkBgG,IACpC,QAAQC,GACR,GAAIA,EAAOj1D,OAAQ,CACf,MAAM61D,EAAU5tD,EAAS4tD,UAAY5tD,EAAS4tD,QAAU,CAAC,GACzDZ,EAAO73B,SAAQ9wB,IACXjH,OAAOsuD,eAAekC,EAASvpD,EAAK,CAChCzH,IAAK,IAAMsjD,EAAW77C,GACtBxH,IAAK0tC,GAAQ2V,EAAW77C,GAAOkmC,GACjC,GAEV,MACUvqC,EAAS4tD,UACf5tD,EAAS4tD,QAAU,CAAC,GAKxBhS,GAAU57C,EAAS47C,SAAW,OAC9B57C,EAAS47C,OAASA,GAEF,MAAhBG,IACA/7C,EAAS+7C,aAAeA,GAGxBkR,IACAjtD,EAASitD,WAAaA,GACtB7F,IACApnD,EAASonD,WAAaA,EAC9B,CACA,SAASgG,GAAkBlB,EAAenR,EAAKoS,EAA2B,KAAMU,GAAY,IACpF,QAAQ3B,KACRA,EAAgB4B,GAAgB5B,IAEpC,IAAK,MAAM7nD,KAAO6nD,EAAe,CAC7B,MAAM19C,EAAM09C,EAAc7nD,GAC1B,IAAI8hD,EAGIA,GAFJ,QAAS33C,GACL,YAAaA,EACFgwC,EAAOhwC,EAAIoZ,MAAQvjB,EAAKmK,EAAI2zC,SAAS,GAGrC3D,EAAOhwC,EAAIoZ,MAAQvjB,GAIvBm6C,EAAOhwC,IAElB,QAAM23C,IAEF0H,EACAzwD,OAAOsuD,eAAe3Q,EAAK12C,EAAK,CAC5BkpD,YAAY,EACZC,cAAc,EACd5wD,IAAK,IAAMupD,EAASl2C,MACpBpT,IAAK64B,GAAMywB,EAASl2C,MAAQylB,IAepCqlB,EAAI12C,GAAO8hD,CAKnB,CACJ,CACA,SAAStC,GAASC,EAAM9jD,EAAU+P,GAC9BumC,GAA2B,QAAQwN,GAC7BA,EAAK3pD,KAAI4zD,GAAKA,EAAEj9C,KAAK9Q,EAASylC,SAC9Bqe,EAAKhzC,KAAK9Q,EAASylC,OAAQzlC,EAAU+P,EAC/C,CACA,SAAS09C,GAAcxZ,EAAK8G,EAAKmF,EAAY77C,GACzC,MAAMqxC,EAASrxC,EAAI8N,SAAS,KACtBguC,GAAiBD,EAAY77C,GAC7B,IAAM67C,EAAW77C,GACvB,IAAI,QAAS4vC,GAAM,CACf,MAAMnqB,EAAUixB,EAAI9G,IAChB,QAAWnqB,IACX+0B,EAAMnJ,EAAQ5rB,EAKtB,MACK,IAAI,QAAWmqB,GAChB4K,EAAMnJ,EAAQzB,EAAInjC,KAAKovC,SAEtB,IAAI,QAASjM,GACd,IAAI,QAAQA,GACRA,EAAI9e,SAAQ4B,GAAK02B,GAAc12B,EAAGgkB,EAAKmF,EAAY77C,SAElD,CACD,MAAMylB,GAAU,QAAWmqB,EAAInqB,SACzBmqB,EAAInqB,QAAQhZ,KAAKovC,GACjBnF,EAAI9G,EAAInqB,UACV,QAAWA,IACX+0B,EAAMnJ,EAAQ5rB,EAASmqB,EAK/B,MAEK,CAGb,CAMA,SAAS0W,GAAqB3qD,GAC1B,MAAMiG,EAAOjG,EAAS+P,MAChB,OAAEqqC,EAAQC,QAAS2T,GAAmB/nD,GACpCm0C,OAAQ6T,EAAcC,aAActU,EAAOn3C,QAAQ,sBAAE0rD,IAA4BnuD,EAASg3C,WAC5F8C,EAASF,EAAMh9C,IAAIqJ,GACzB,IAAImoD,EAmBJ,OAlBItU,EACAsU,EAAWtU,EAELmU,EAAal2D,QAAWqiD,GAAW4T,GAMzCI,EAAW,CAAC,EACRH,EAAal2D,QACbk2D,EAAa94B,SAAQk5B,GAAKC,GAAaF,EAAUC,EAAGF,GAAuB,KAE/EG,GAAaF,EAAUnoD,EAAMkoD,IARzBC,EAAWnoD,GAUf,QAASA,IACT2zC,EAAM/8C,IAAIoJ,EAAMmoD,GAEbA,CACX,CACA,SAASE,GAAaC,EAAI3mC,EAAM4mC,EAAQ7U,GAAU,GAC9C,MAAM,OAAES,EAAQC,QAAS2T,GAAmBpmC,EACxComC,GACAM,GAAaC,EAAIP,EAAgBQ,GAAQ,GAEzCpU,GACAA,EAAOjlB,SAASk5B,GAAMC,GAAaC,EAAIF,EAAGG,GAAQ,KAEtD,IAAK,MAAMnqD,KAAOujB,EACd,GAAI+xB,GAAmB,WAARt1C,OAKV,CACD,MAAMoqD,EAAQC,GAA0BrqD,IAASmqD,GAAUA,EAAOnqD,GAClEkqD,EAAGlqD,GAAOoqD,EAAQA,EAAMF,EAAGlqD,GAAMujB,EAAKvjB,IAAQujB,EAAKvjB,EACvD,CAEJ,OAAOkqD,CACX,CACA,MAAMG,GAA4B,CAC9BrpC,KAAMspC,GACN90D,MAAO+0D,GACP7U,MAAO6U,GAEPjoB,QAASioB,GACT9f,SAAU8f,GAEV/C,aAAcgD,GACd1C,QAAS0C,GACTzC,YAAayC,GACblH,QAASkH,GACTxC,aAAcwC,GACdjH,QAASiH,GACTrC,cAAeqC,GACfpC,cAAeoC,GACfnC,UAAWmC,GACXlC,UAAWkC,GACXvC,UAAWuC,GACXtC,YAAasC,GACb/B,cAAe+B,GACf9B,eAAgB8B,GAEhB5B,WAAY2B,GACZxH,WAAYwH,GAEZ/P,MAAOiQ,GAEP1Q,QAASuQ,GACTnQ,OAAQuQ,IAEZ,SAASJ,GAAYJ,EAAI3mC,GACrB,OAAKA,EAGA2mC,EAGE,WACH,OAAO,EAAC,OAAQ,QAAWA,GAAMA,EAAGv0D,KAAKD,KAAMA,MAAQw0D,GAAI,QAAW3mC,GAAQA,EAAK5tB,KAAKD,KAAMA,MAAQ6tB,EAC1G,EAJWA,EAHA2mC,CAQf,CACA,SAASQ,GAAYR,EAAI3mC,GACrB,OAAOgnC,GAAmBd,GAAgBS,GAAKT,GAAgBlmC,GACnE,CACA,SAASkmC,GAAgB7Z,GACrB,IAAI,QAAQA,GAAM,CACd,MAAMtE,EAAM,CAAC,EACb,IAAK,IAAI73C,EAAI,EAAGA,EAAIm8C,EAAIl8C,OAAQD,IAC5B63C,EAAIsE,EAAIn8C,IAAMm8C,EAAIn8C,GAEtB,OAAO63C,CACX,CACA,OAAOsE,CACX,CACA,SAAS4a,GAAaN,EAAI3mC,GACtB,OAAO2mC,EAAK,IAAI,IAAIpmC,IAAI,GAAGnwB,OAAOu2D,EAAI3mC,KAAUA,CACpD,CACA,SAASgnC,GAAmBL,EAAI3mC,GAC5B,OAAO2mC,GAAK,SAAO,QAAOnxD,OAAOK,OAAO,MAAO8wD,GAAK3mC,GAAQA,CAChE,CACA,SAASknC,GAAkBP,EAAI3mC,GAC3B,IAAK2mC,EACD,OAAO3mC,EACX,IAAKA,EACD,OAAO2mC,EACX,MAAMS,GAAS,QAAO5xD,OAAOK,OAAO,MAAO8wD,GAC3C,IAAK,MAAMlqD,KAAOujB,EACdonC,EAAO3qD,GAAOwqD,GAAaN,EAAGlqD,GAAMujB,EAAKvjB,IAE7C,OAAO2qD,CACX,CAEA,SAASC,GAAUjvD,EAAUuiD,EAAU2M,EACvCtZ,GAAQ,GACJ,MAAM/7C,EAAQ,CAAC,EACT6hD,EAAQ,CAAC,GACf,QAAIA,EAAOyT,GAAmB,GAC9BnvD,EAASovD,cAAgBhyD,OAAOK,OAAO,MACvC4xD,GAAarvD,EAAUuiD,EAAU1oD,EAAO6hD,GAExC,IAAK,MAAMr3C,KAAOrE,EAASw7C,aAAa,GAC9Bn3C,KAAOxK,IACTA,EAAMwK,QAAOpP,GAOjBi6D,EAEAlvD,EAASnG,MAAQ+7C,EAAQ/7C,GAAQ,QAAgBA,GAG5CmG,EAAS+P,KAAKlW,MAMfmG,EAASnG,MAAQA,EAJjBmG,EAASnG,MAAQ6hD,EAOzB17C,EAAS07C,MAAQA,CACrB,CAQA,SAAS4T,GAAYtvD,EAAUuiD,EAAUgN,EAAcvS,GACnD,MAAM,MAAEnjD,EAAK,MAAE6hD,EAAOjF,OAAO,UAAE8G,IAAgBv9C,EACzCwvD,GAAkB,QAAM31D,IACvB6G,GAAWV,EAASw7C,aAC3B,IAAIiU,GAAkB,EACtB,KAKKzS,GAAaO,EAAY,IACZ,GAAZA,EAoCD,CAOD,IAAImS,EALAL,GAAarvD,EAAUuiD,EAAU1oD,EAAO6hD,KACxC+T,GAAkB,GAKtB,IAAK,MAAMprD,KAAOmrD,EACTjN,KAEC,QAAOA,EAAUl+C,KAGbqrD,GAAW,QAAUrrD,MAAUA,IAAQ,QAAOk+C,EAAUmN,MAC1DhvD,GACI6uD,QAEuBt6D,IAAtBs6D,EAAalrD,SAEiBpP,IAA3Bs6D,EAAaG,KACjB71D,EAAMwK,GAAOsrD,GAAiBjvD,EAAS8uD,EAAiBnrD,OAAKpP,EAAW+K,GAAU,WAI/EnG,EAAMwK,IAMzB,GAAIq3C,IAAU8T,EACV,IAAK,MAAMnrD,KAAOq3C,EACT6G,IACC,QAAOA,EAAUl+C,YAEZq3C,EAAMr3C,GACborD,GAAkB,EAIlC,MA5EI,GAAgB,EAAZlS,EAAsC,CAGtC,MAAMqS,EAAgB5vD,EAASy2C,MAAMkH,aACrC,IAAK,IAAI7lD,EAAI,EAAGA,EAAI83D,EAAc73D,OAAQD,IAAK,CAC3C,IAAIuM,EAAMurD,EAAc93D,GAExB,GAAIwiD,EAAet6C,EAASw9C,aAAcn5C,GACtC,SAGJ,MAAM4L,EAAQsyC,EAASl+C,GACvB,GAAI3D,EAGA,IAAI,QAAOg7C,EAAOr3C,GACV4L,IAAUyrC,EAAMr3C,KAChBq3C,EAAMr3C,GAAO4L,EACbw/C,GAAkB,OAGrB,CACD,MAAMI,GAAe,QAASxrD,GAC9BxK,EAAMg2D,GAAgBF,GAAiBjvD,EAAS8uD,EAAiBK,EAAc5/C,EAAOjQ,GAAU,EACpG,MAGIiQ,IAAUyrC,EAAMr3C,KAChBq3C,EAAMr3C,GAAO4L,EACbw/C,GAAkB,EAG9B,CACJ,CA6CAA,IACA,QAAQzvD,EAAU,MAAgC,SAK1D,CACA,SAASqvD,GAAarvD,EAAUuiD,EAAU1oD,EAAO6hD,GAC7C,MAAOh7C,EAASovD,GAAgB9vD,EAASw7C,aACzC,IACIuU,EADAN,GAAkB,EAEtB,GAAIlN,EACA,IAAK,IAAIl+C,KAAOk+C,EAAU,CAEtB,IAAI,QAAel+C,GACf,SAEJ,MAAM4L,EAAQsyC,EAASl+C,GAGvB,IAAI2rD,EACAtvD,IAAW,QAAOA,EAAUsvD,GAAW,QAAS3rD,IAC3CyrD,GAAiBA,EAAa39C,SAAS69C,IAIvCD,IAAkBA,EAAgB,CAAC,IAAIC,GAAY//C,EAHpDpW,EAAMm2D,GAAY//C,EAMhBqqC,EAAet6C,EAASw9C,aAAcn5C,IACtCA,KAAOq3C,GAAUzrC,IAAUyrC,EAAMr3C,KACnCq3C,EAAMr3C,GAAO4L,EACbw/C,GAAkB,EAG9B,CAEJ,GAAIK,EAAc,CACd,MAAMN,GAAkB,QAAM31D,GACxBo2D,EAAaF,GAAiB,KACpC,IAAK,IAAIj4D,EAAI,EAAGA,EAAIg4D,EAAa/3D,OAAQD,IAAK,CAC1C,MAAMuM,EAAMyrD,EAAah4D,GACzB+B,EAAMwK,GAAOsrD,GAAiBjvD,EAAS8uD,EAAiBnrD,EAAK4rD,EAAW5rD,GAAMrE,IAAW,QAAOiwD,EAAY5rD,GAChH,CACJ,CACA,OAAOorD,CACX,CACA,SAASE,GAAiBjvD,EAAS7G,EAAOwK,EAAK4L,EAAOjQ,EAAUkwD,GAC5D,MAAM1hD,EAAM9N,EAAQ2D,GACpB,GAAW,MAAPmK,EAAa,CACb,MAAM2hD,GAAa,QAAO3hD,EAAK,WAE/B,GAAI2hD,QAAwBl7D,IAAVgb,EAAqB,CACnC,MAAMulC,EAAehnC,EAAI2zC,QACzB,GAAI3zC,EAAIuB,OAAShQ,WAAY,QAAWy1C,GAAe,CACnD,MAAM,cAAE4Z,GAAkBpvD,EACtBqE,KAAO+qD,EACPn/C,EAAQm/C,EAAc/qD,IAGtB+7C,GAAmBpgD,GACnBiQ,EAAQm/C,EAAc/qD,GAAOmxC,EAAax7C,KAAK,KAAMH,GACrDwmD,KAER,MAEIpwC,EAAQulC,CAEhB,CAEIhnC,EAAI,KACA0hD,IAAaC,EACblgD,GAAQ,GAEHzB,EAAI,IACE,KAAVyB,GAAgBA,KAAU,QAAU5L,KACrC4L,GAAQ,GAGpB,CACA,OAAOA,CACX,CACA,SAASmgD,GAAsB1W,EAAM1C,EAAY2C,GAAU,GACvD,MAAMC,EAAQ5C,EAAWqZ,WACnBvW,EAASF,EAAMh9C,IAAI88C,GACzB,GAAII,EACA,OAAOA,EAEX,MAAM7F,EAAMyF,EAAK7/C,MACXmgD,EAAa,CAAC,EACd8V,EAAe,GAErB,IAAI7V,GAAa,EACjB,KAA4B,QAAWP,GAAO,CAC1C,MAAM4W,EAAerc,IACjBgG,GAAa,EACb,MAAOpgD,EAAOqtB,GAAQkpC,GAAsBnc,EAAK+C,GAAY,IAC7D,QAAOgD,EAAYngD,GACfqtB,GACA4oC,EAAa77C,QAAQiT,EAAK,GAE7ByyB,GAAW3C,EAAWoD,OAAOriD,QAC9Bi/C,EAAWoD,OAAOjlB,QAAQm7B,GAE1B5W,EAAKW,SACLiW,EAAY5W,EAAKW,SAEjBX,EAAKU,QACLV,EAAKU,OAAOjlB,QAAQm7B,EAE5B,CACA,IAAKrc,IAAQgG,EAIT,OAHI,QAASP,IACTE,EAAM/8C,IAAI68C,EAAM,MAEb,KAEX,IAAI,QAAQzF,GACR,IAAK,IAAIn8C,EAAI,EAAGA,EAAIm8C,EAAIl8C,OAAQD,IAAK,CAC7B,EAGJ,MAAMy4D,GAAgB,QAAStc,EAAIn8C,IAC/B04D,GAAiBD,KACjBvW,EAAWuW,GAAiB,KAEpC,MAEC,GAAItc,EAAK,CACN,EAGJ,IAAK,MAAM5vC,KAAO4vC,EAAK,CACnB,MAAMsc,GAAgB,QAASlsD,GAC/B,GAAImsD,GAAiBD,GAAgB,CACjC,MAAM/hD,EAAMylC,EAAI5vC,GACVtH,EAAQi9C,EAAWuW,IACrB,QAAQ/hD,KAAQ,QAAWA,GAAO,CAAEuB,KAAMvB,GAAQpR,OAAO0B,OAAO,CAAC,EAAG0P,GACxE,GAAIzR,EAAM,CACN,MAAM0zD,EAAeC,GAAaxP,QAASnkD,EAAKgT,MAC1C4gD,EAAcD,GAAa5xB,OAAQ/hC,EAAKgT,MAC9ChT,EAAK,GAAmC0zD,GAAgB,EACxD1zD,EAAK,GACD4zD,EAAc,GAAKF,EAAeE,GAElCF,GAAgB,IAAK,QAAO1zD,EAAM,aAClC+yD,EAAa77C,KAAKs8C,EAE1B,CACJ,CACJ,CACJ,CACA,MAAM5gB,EAAM,CAACqK,EAAY8V,GAIzB,OAHI,QAASpW,IACTE,EAAM/8C,IAAI68C,EAAM/J,GAEbA,CACX,CACA,SAAS6gB,GAAiBnsD,GACtB,MAAe,MAAXA,EAAI,EAOZ,CAGA,SAASusD,GAAQC,GACb,MAAMl3D,EAAQk3D,GAAQA,EAAK9nD,WAAWpP,MAAM,sBAC5C,OAAOA,EAAQA,EAAM,GAAc,OAATk3D,EAAgB,OAAS,EACvD,CACA,SAASC,GAAW1sB,EAAGC,GACnB,OAAOusB,GAAQxsB,KAAOwsB,GAAQvsB,EAClC,CACA,SAASqsB,GAAa3gD,EAAMghD,GACxB,OAAI,QAAQA,GACDA,EAAcC,WAAU7zD,GAAK2zD,GAAW3zD,EAAG4S,MAE7C,QAAWghD,IACTD,GAAWC,EAAehhD,GAAQ,GAErC,CACZ,CAoIA,MAAMkhD,GAAiB5sD,GAAmB,MAAXA,EAAI,IAAsB,YAARA,EAC3C6sD,GAAsBjhD,IAAU,QAAQA,GACxCA,EAAM9V,IAAIgiD,IACV,CAACA,GAAelsC,IAChBkhD,GAAgB,CAAC9sD,EAAK+sD,EAASrW,KACjC,GAAIqW,EAAQnW,GAER,OAAOmW,EAEX,MAAMpX,EAAac,GAAQ,IAAI98C,IAMpBkzD,GAAmBE,KAAWpzD,KACtC+8C,GAEH,OADAf,EAAW3qC,IAAK,EACT2qC,CAAU,EAEfqX,GAAuB,CAACC,EAAU7V,EAAOz7C,KAC3C,MAAM+6C,EAAMuW,EAASC,KACrB,IAAK,MAAMltD,KAAOitD,EAAU,CACxB,GAAIL,GAAc5sD,GACd,SACJ,MAAM4L,EAAQqhD,EAASjtD,GACvB,IAAI,QAAW4L,GACXwrC,EAAMp3C,GAAO8sD,GAAc9sD,EAAK4L,EAAO8qC,QAEtC,GAAa,MAAT9qC,EAAe,CAChB,EAKJ,MAAM+pC,EAAakX,GAAmBjhD,GACtCwrC,EAAMp3C,GAAO,IAAM21C,CACvB,CACJ,GAEEwX,GAAsB,CAACxxD,EAAUk9C,KAOnC,MAAMlD,EAAakX,GAAmBhU,GACtCl9C,EAASy7C,MAAM0G,QAAU,IAAMnI,CAAU,EAEvCyX,GAAY,CAACzxD,EAAUk9C,KACzB,GAA+B,GAA3Bl9C,EAASy2C,MAAMwF,UAAgD,CAC/D,MAAMlsC,EAAOmtC,EAAS92C,EAClB2J,GAGA/P,EAASy7C,OAAQ,QAAMyB,IAEvB,QAAIA,EAAU,IAAKntC,IAGnBshD,GAAqBnU,EAAWl9C,EAASy7C,MAAQ,CAAC,EAE1D,MAEIz7C,EAASy7C,MAAQ,CAAC,EACdyB,GACAsU,GAAoBxxD,EAAUk9C,IAGtC,QAAIl9C,EAASy7C,MAAO0T,GAAmB,EAAE,EAEvCuC,GAAc,CAAC1xD,EAAUk9C,EAAUF,KACrC,MAAM,MAAEvG,EAAK,MAAEgF,GAAUz7C,EACzB,IAAI2xD,GAAoB,EACpBC,EAA2B,KAC/B,GAAsB,GAAlBnb,EAAMwF,UAAgD,CACtD,MAAMlsC,EAAOmtC,EAAS92C,EAClB2J,EAOSitC,GAAsB,IAATjtC,EAGlB4hD,GAAoB,IAKpB,QAAOlW,EAAOyB,GAKTF,GAAsB,IAATjtC,UACP0rC,EAAMr1C,IAKrBurD,GAAqBzU,EAASO,QAC9B4T,GAAqBnU,EAAUzB,IAEnCmW,EAA2B1U,CAC/B,MACSA,IAELsU,GAAoBxxD,EAAUk9C,GAC9B0U,EAA2B,CAAEzP,QAAS,IAG1C,GAAIwP,EACA,IAAK,MAAMttD,KAAOo3C,EACTwV,GAAc5sD,IAAUA,KAAOutD,UACzBnW,EAAMp3C,EAGzB,EAGJ,SAASwtD,KACL,MAAO,CACH3xD,IAAK,KACLuC,OAAQ,CACJqvD,YAAa,EAAAC,GACbC,aAAa,EACbxG,iBAAkB,CAAC,EACnB2C,sBAAuB,CAAC,EACxBlX,kBAAchiD,EACdg9D,iBAAah9D,EACbi9D,gBAAiB,CAAC,GAEtB9X,OAAQ,GACR6S,WAAY,CAAC,EACb7F,WAAY,CAAC,EACb9I,SAAUlhD,OAAOK,OAAO,MACxBywD,aAAc,IAAIroC,QAClBwqC,WAAY,IAAIxqC,QAChBg0B,WAAY,IAAIh0B,QAExB,CACA,IAAI/Z,GAAM,EACV,SAASqmD,GAAavW,EAAQwW,GAC1B,OAAO,SAAmBC,EAAeC,EAAY,OAC5C,QAAWD,KACZA,EAAgBj1D,OAAO0B,OAAO,CAAC,EAAGuzD,IAErB,MAAbC,IAAsB,QAASA,KAE/BA,EAAY,MAEhB,MAAM95B,EAAUq5B,KACVU,EAAmB,IAAIpqC,IAC7B,IAAIs4B,GAAY,EAChB,MAAMvgD,EAAOs4B,EAAQt4B,IAAM,CACvBsyD,KAAM1mD,KACN2mD,WAAYJ,EACZK,OAAQJ,EACRK,WAAY,KACZC,SAAUp6B,EACVkF,UAAW,KACX7kC,WACI4J,aACA,OAAO+1B,EAAQ/1B,MACnB,EACIA,WAAOizB,GACH,CAGR,EACAm9B,IAAIC,KAAWpyD,GAgBX,OAfI6xD,EAAiBl6D,IAAIy6D,KAGhBA,IAAU,QAAWA,EAAOC,UACjCR,EAAiBn3C,IAAI03C,GACrBA,EAAOC,QAAQ7yD,KAAQQ,KAElB,QAAWoyD,KAChBP,EAAiBn3C,IAAI03C,GACrBA,EAAO5yD,KAAQQ,KAMZR,CACX,EACA8yD,MAAMA,GAaF,OAXSx6B,EAAQ4hB,OAAOjoC,SAAS6gD,IACzBx6B,EAAQ4hB,OAAOnmC,KAAK++C,GAUrB9yD,CACX,EACAk9C,UAAUn+C,EAAMm+C,GAIZ,OAAKA,GAML5kB,EAAQy0B,WAAWhuD,GAAQm+C,EACpBl9C,GANIs4B,EAAQy0B,WAAWhuD,EAOlC,EACAg0D,UAAUh0D,EAAMg0D,GAIZ,OAAKA,GAMLz6B,EAAQ4uB,WAAWnoD,GAAQg0D,EACpB/yD,GANIs4B,EAAQ4uB,WAAWnoD,EAOlC,EACAi0D,MAAMC,EAAeC,EAAWC,GAC5B,IAAK5S,EAAW,CAER,EAKJ,MAAMhK,EAAQ6F,GAAY+V,EAAeC,GAuBzC,OApBA7b,EAAMO,WAAaxe,EAOf46B,GAAahB,EACbA,EAAQ3b,EAAO0c,GAGfvX,EAAOnF,EAAO0c,EAAeE,GAEjC5S,GAAY,EACZvgD,EAAIyyD,WAAaQ,EACjBA,EAAcG,YAAcpzD,EAKrBonD,GAAe7Q,EAAM2G,YAAc3G,EAAM2G,UAAU3X,KAC9D,CAOJ,EACA8tB,UACQ9S,IACA7E,EAAO,KAAM17C,EAAIyyD,mBAKVzyD,EAAIyyD,WAAWW,YAK9B,EACAlV,QAAQ/5C,EAAK4L,GAMT,OADAuoB,EAAQ8lB,SAASj6C,GAAO4L,EACjB/P,CACX,GAEJ,OAAOA,CACX,CACJ,CAKA,SAASszD,GAAOC,EAAQC,EAAWC,EAAgBld,EAAOmd,GAAY,GAClE,IAAI,QAAQH,GAER,YADAA,EAAOt+B,SAAQ,CAAC4B,EAAGj/B,IAAM07D,GAAOz8B,EAAG28B,KAAc,QAAQA,GAAaA,EAAU57D,GAAK47D,GAAYC,EAAgBld,EAAOmd,KAG5H,GAAIvO,GAAe5O,KAAWmd,EAG1B,OAEJ,MAAMC,EAA6B,EAAlBpd,EAAMwF,UACjBqL,GAAe7Q,EAAM2G,YAAc3G,EAAM2G,UAAU3X,MACnDgR,EAAMr8B,GACNnK,EAAQ2jD,EAAY,KAAOC,GACzB/7D,EAAGg8D,EAAO/8B,EAAGqd,GAAQqf,EAM7B,MAAMM,EAASL,GAAaA,EAAU38B,EAChCuzB,EAAOwJ,EAAMxJ,OAAS,KAAawJ,EAAMxJ,KAAO,CAAC,EAAKwJ,EAAMxJ,KAC5DxO,EAAagY,EAAMhY,WAazB,GAXc,MAAViY,GAAkBA,IAAW3f,KACzB,QAAS2f,IACTzJ,EAAKyJ,GAAU,MACX,QAAOjY,EAAYiY,KACnBjY,EAAWiY,GAAU,QAGpB,QAAMA,KACXA,EAAO9jD,MAAQ,QAGnB,QAAWmkC,GACXgC,EAAsBhC,EAAK0f,EAAO,GAAkC,CAAC7jD,EAAOq6C,QAE3E,CACD,MAAM0J,GAAY,QAAS5f,GACrB6f,GAAS,QAAM7f,GACrB,GAAI4f,GAAaC,EAAQ,CACrB,MAAMC,EAAQ,KACV,GAAIT,EAAO5I,EAAG,CACV,MAAMsJ,EAAWH,GACX,QAAOlY,EAAY1H,GACf0H,EAAW1H,GACXkW,EAAKlW,GACTA,EAAInkC,MACN2jD,GACA,QAAQO,KAAa,QAAOA,EAAUN,IAGjC,QAAQM,GAaHA,EAAShiD,SAAS0hD,IACxBM,EAASlgD,KAAK4/C,GAbVG,GACA1J,EAAKlW,GAAO,CAACyf,IACT,QAAO/X,EAAY1H,KACnB0H,EAAW1H,GAAOkW,EAAKlW,MAI3BA,EAAInkC,MAAQ,CAAC4jD,GACTJ,EAAOl6D,IACP+wD,EAAKmJ,EAAOl6D,GAAK66C,EAAInkC,OAOzC,MACS+jD,GACL1J,EAAKlW,GAAOnkC,GACR,QAAO6rC,EAAY1H,KACnB0H,EAAW1H,GAAOnkC,IAGjBgkD,IACL7f,EAAInkC,MAAQA,EACRwjD,EAAOl6D,IACP+wD,EAAKmJ,EAAOl6D,GAAK0W,GAE0B,EAInDA,GACAikD,EAAMj8C,IAAM,EACZ8nC,GAAsBmU,EAAOP,IAG7BO,GAER,MACS,CAGb,CACJ,CAkZA,SAASE,KAkBT,CAEA,MAAMrU,GAAwB9B,EAiB9B,SAASoW,GAAe3zD,GACpB,OAAO4zD,GAAmB5zD,EAC9B,CAQA,SAAS4zD,GAAmB5zD,EAAS6zD,GAG7BH,KAEJ,MAAM3pC,GAAS,UACfA,EAAO+pC,SAAU,EAIjB,MAAQC,OAAQC,EAAYhQ,OAAQiQ,EAAYC,UAAWC,EAAex6C,cAAey6C,EAAmBC,WAAYC,EAAgBC,cAAeC,EAAmBC,QAASC,EAAaC,eAAgBC,EAAoBC,WAAYC,EAAgBC,YAAaC,EAAiBC,WAAYC,EAAiB,KAAMC,oBAAqBC,GAA4Bp1D,EAG5Wq1D,EAAQ,CAACC,EAAIC,EAAI74B,EAAW84B,EAAS,KAAMC,EAAkB,KAAMxC,EAAiB,KAAMN,GAAQ,EAAO3J,EAAe,KAAM1M,IAAiFiZ,EAAGG,mBACpN,GAAIJ,IAAOC,EACP,OAGAD,IAAO9S,GAAgB8S,EAAIC,KAC3BC,EAASG,EAAgBL,GACzBzC,EAAQyC,EAAIG,EAAiBxC,GAAgB,GAC7CqC,EAAK,OAEa,IAAlBC,EAAG1Y,YACHP,GAAY,EACZiZ,EAAGG,gBAAkB,MAEzB,MAAM,KAAErmD,EAAI,IAAEqkC,EAAG,UAAE6H,GAAcga,EACjC,OAAQlmD,GACJ,KAAKumD,GACDC,EAAYP,EAAIC,EAAI74B,EAAW84B,GAC/B,MACJ,KAAK3Z,GACDia,EAAmBR,EAAIC,EAAI74B,EAAW84B,GACtC,MACJ,KAAKO,GACS,MAANT,GACAU,EAAgBT,EAAI74B,EAAW84B,EAAQ7C,GAK3C,MACJ,KAAKlO,GACDwR,EAAgBX,EAAIC,EAAI74B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GACjG,MACJ,QACoB,EAAZf,EACA2a,EAAeZ,EAAIC,EAAI74B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GAE/E,EAAZf,EACL4a,EAAiBb,EAAIC,EAAI74B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,IAEjF,GAAZf,GAGY,IAAZA,IAFLlsC,EAAK2yB,QAAQszB,EAAIC,EAAI74B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,EAAW8Z,IAU1G,MAAP1iB,GAAe+hB,GACf3C,GAAOpf,EAAK4hB,GAAMA,EAAG5hB,IAAKuf,EAAgBsC,GAAMD,GAAKC,EACzD,EAEEM,EAAc,CAACP,EAAIC,EAAI74B,EAAW84B,KACpC,GAAU,MAANF,EACAtB,EAAYuB,EAAG77C,GAAK46C,EAAeiB,EAAG/Y,UAAY9f,EAAW84B,OAE5D,CACD,MAAM97C,EAAM67C,EAAG77C,GAAK47C,EAAG57C,GACnB67C,EAAG/Y,WAAa8Y,EAAG9Y,UACnBkY,EAAYh7C,EAAI67C,EAAG/Y,SAE3B,GAEEsZ,EAAqB,CAACR,EAAIC,EAAI74B,EAAW84B,KACjC,MAANF,EACAtB,EAAYuB,EAAG77C,GAAK86C,EAAkBe,EAAG/Y,UAAY,IAAM9f,EAAW84B,GAItED,EAAG77C,GAAK47C,EAAG57C,EACf,EAEEs8C,EAAkB,CAACT,EAAI74B,EAAW84B,EAAQ7C,MAC3C4C,EAAG77C,GAAI67C,EAAGC,QAAUJ,EAAwBG,EAAG/Y,SAAU9f,EAAW84B,EAAQ7C,EAAO4C,EAAG77C,GAAI67C,EAAGC,OAAO,EAkBnGa,EAAiB,EAAG38C,KAAI87C,UAAU94B,EAAWq4B,KAC/C,IAAIv9C,EACJ,MAAOkC,GAAMA,IAAO87C,EAChBh+C,EAAOw9C,EAAgBt7C,GACvBs6C,EAAWt6C,EAAIgjB,EAAWq4B,GAC1Br7C,EAAKlC,EAETw8C,EAAWwB,EAAQ94B,EAAWq4B,EAAY,EAExCuB,EAAmB,EAAG58C,KAAI87C,aAC5B,IAAIh+C,EACJ,MAAOkC,GAAMA,IAAO87C,EAChBh+C,EAAOw9C,EAAgBt7C,GACvBu6C,EAAWv6C,GACXA,EAAKlC,EAETy8C,EAAWuB,EAAO,EAEhBU,EAAiB,CAACZ,EAAIC,EAAI74B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,KACrGqW,EAAQA,GAAqB,QAAZ4C,EAAGlmD,KACV,MAANimD,EACAiB,EAAahB,EAAI74B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GAG1Fka,EAAalB,EAAIC,EAAIE,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,EAC/E,EAEEia,EAAe,CAACxgB,EAAOrZ,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,KAClG,IAAI5iC,EACA+8C,EACJ,MAAM,KAAEpnD,EAAI,MAAElW,EAAK,UAAEoiD,EAAS,WAAEW,EAAU,KAAED,GAASlG,EAcrD,GAbAr8B,EAAKq8B,EAAMr8B,GAAK06C,EAAkBre,EAAM1mC,KAAMsjD,EAAOx5D,GAASA,EAAMu9D,GAAIv9D,GAGxD,EAAZoiD,EACAqZ,EAAmBl7C,EAAIq8B,EAAMyG,UAEZ,GAAZjB,GACLob,EAAc5gB,EAAMyG,SAAU9iC,EAAI,KAAM+7C,EAAiBxC,EAAgBN,GAAkB,kBAATtjD,EAA0B25C,EAAc1M,GAE1HL,GACAkL,GAAoBpR,EAAO,KAAM0f,EAAiB,WAGlDt8D,EAAO,CACP,IAAK,MAAMwK,KAAOxK,EACF,UAARwK,IAAoB,QAAeA,IACnCwwD,EAAcz6C,EAAI/V,EAAK,KAAMxK,EAAMwK,GAAMgvD,EAAO5c,EAAMyG,SAAUiZ,EAAiBxC,EAAgB2D,GAYrG,UAAWz9D,GACXg7D,EAAcz6C,EAAI,QAAS,KAAMvgB,EAAMoW,QAEtCknD,EAAYt9D,EAAM09D,qBACnBC,GAAgBL,EAAWhB,EAAiB1f,EAEpD,CAEAkf,EAAWv7C,EAAIq8B,EAAOA,EAAMgT,QAASC,EAAcyM,GAW/CxZ,GACAkL,GAAoBpR,EAAO,KAAM0f,EAAiB,eAItD,MAAMsB,IAA4B9D,GAAmBA,IAAmBA,EAAexV,gBACnFvB,IACCA,EAAWuE,UACZsW,GACA7a,EAAWqH,YAAY7pC,GAE3Bs6C,EAAWt6C,EAAIgjB,EAAW84B,KACrBiB,EAAYt9D,GAASA,EAAM69D,iBAC5BD,GACA9a,IACAoD,IAAsB,KAClBoX,GAAaK,GAAgBL,EAAWhB,EAAiB1f,GACzDghB,GAA2B7a,EAAWuH,MAAM/pC,GAC5CuiC,GAAQkL,GAAoBpR,EAAO,KAAM0f,EAAiB,UAAU,GACrExC,EACP,EAEEgC,EAAa,CAACv7C,EAAIq8B,EAAOgT,EAASC,EAAcyM,KAIlD,GAHI1M,GACAmM,EAAex7C,EAAIqvC,GAEnBC,EACA,IAAK,IAAI5xD,EAAI,EAAGA,EAAI4xD,EAAa3xD,OAAQD,IACrC89D,EAAex7C,EAAIsvC,EAAa5xD,IAGxC,GAAIq+D,EAAiB,CACjB,IAAIrY,EAAUqY,EAAgBrY,QAO9B,GAAIrH,IAAUqH,EAAS,CACnB,MAAM6Z,EAAcxB,EAAgB1f,MACpCkf,EAAWv7C,EAAIu9C,EAAaA,EAAYlO,QAASkO,EAAYjO,aAAcyM,EAAgBvqB,OAC/F,CACJ,GAEEyrB,EAAgB,CAACna,EAAU9f,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,EAAW9xB,EAAQ,KACzH,IAAK,IAAIpzB,EAAIozB,EAAOpzB,EAAIolD,EAASnlD,OAAQD,IAAK,CAC1C,MAAMuqD,EAASnF,EAASplD,GAAKklD,EACvB4a,GAAe1a,EAASplD,IACxBqkD,GAAee,EAASplD,IAC9Bi+D,EAAM,KAAM1T,EAAOjlB,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,EAChG,GAEEka,EAAe,CAAClB,EAAIC,EAAIE,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,KAChF,MAAM5iC,EAAM67C,EAAG77C,GAAK47C,EAAG57C,GACvB,IAAI,UAAEmjC,EAAS,gBAAE6Y,EAAe,KAAEzZ,GAASsZ,EAG3C1Y,GAA4B,GAAfyY,EAAGzY,UAChB,MAAMsa,EAAW7B,EAAGn8D,OAAS,KACvBi+D,EAAW7B,EAAGp8D,OAAS,KAC7B,IAAIs9D,EAEJhB,GAAmB4B,GAAc5B,GAAiB,IAC7CgB,EAAYW,EAASE,sBACtBR,GAAgBL,EAAWhB,EAAiBF,EAAID,GAEhDrZ,GACAkL,GAAoBoO,EAAID,EAAIG,EAAiB,gBAEjDA,GAAmB4B,GAAc5B,GAAiB,GAOlD,MAAM8B,EAAiB5E,GAAqB,kBAAZ4C,EAAGlmD,KAWnC,GAVIqmD,EACA8B,EAAmBlC,EAAGI,gBAAiBA,EAAiBh8C,EAAI+7C,EAAiBxC,EAAgBsE,EAAgBvO,GAKvG1M,GAENmb,EAAcnC,EAAIC,EAAI77C,EAAI,KAAM+7C,EAAiBxC,EAAgBsE,EAAgBvO,GAAc,GAE/FnM,EAAY,EAAG,CAKf,GAAgB,GAAZA,EAEA6a,EAAWh+C,EAAI67C,EAAI4B,EAAUC,EAAU3B,EAAiBxC,EAAgBN,QAqBxE,GAhBgB,EAAZ9V,GACIsa,EAASQ,QAAUP,EAASO,OAC5BxD,EAAcz6C,EAAI,QAAS,KAAM09C,EAASO,MAAOhF,GAKzC,EAAZ9V,GACAsX,EAAcz6C,EAAI,QAASy9C,EAASt9C,MAAOu9C,EAASv9C,MAAO84C,GAQ/C,EAAZ9V,EAAsC,CAEtC,MAAMqS,EAAgBqG,EAAGtY,aACzB,IAAK,IAAI7lD,EAAI,EAAGA,EAAI83D,EAAc73D,OAAQD,IAAK,CAC3C,MAAMuM,EAAMurD,EAAc93D,GACpB4iD,EAAOmd,EAASxzD,GAChB6T,EAAO4/C,EAASzzD,GAElB6T,IAASwiC,GAAgB,UAARr2C,GACjBwwD,EAAcz6C,EAAI/V,EAAKq2C,EAAMxiC,EAAMm7C,EAAO2C,EAAG9Y,SAAUiZ,EAAiBxC,EAAgB2D,EAEhG,CACJ,CAIY,EAAZ/Z,GACIyY,EAAG9Y,WAAa+Y,EAAG/Y,UACnBoY,EAAmBl7C,EAAI67C,EAAG/Y,SAGtC,MACUF,GAAgC,MAAnBoZ,GAEnBgC,EAAWh+C,EAAI67C,EAAI4B,EAAUC,EAAU3B,EAAiBxC,EAAgBN,KAEvE8D,EAAYW,EAASQ,iBAAmB3b,IACzCoD,IAAsB,KAClBoX,GAAaK,GAAgBL,EAAWhB,EAAiBF,EAAID,GAC7DrZ,GAAQkL,GAAoBoO,EAAID,EAAIG,EAAiB,UAAU,GAChExC,EACP,EAGEuE,EAAqB,CAACK,EAAaC,EAAaC,EAAmBtC,EAAiBxC,EAAgBN,EAAO3J,KAC7G,IAAK,IAAI5xD,EAAI,EAAGA,EAAI0gE,EAAYzgE,OAAQD,IAAK,CACzC,MAAM4gE,EAAWH,EAAYzgE,GACvB6gE,EAAWH,EAAY1gE,GAEvBslC,EAGNs7B,EAASt+C,KAGJs+C,EAAS3oD,OAASo1C,KAGdjC,GAAgBwV,EAAUC,IAEN,GAArBD,EAASzc,WACXuZ,EAAekD,EAASt+C,IAGtBq+C,EACR1C,EAAM2C,EAAUC,EAAUv7B,EAAW,KAAM+4B,EAAiBxC,EAAgBN,EAAO3J,GAAc,EACrG,GAEE0O,EAAa,CAACh+C,EAAIq8B,EAAOohB,EAAUC,EAAU3B,EAAiBxC,EAAgBN,KAChF,GAAIwE,IAAaC,EAAU,CACvB,GAAID,IAAa,KACb,IAAK,MAAMxzD,KAAOwzD,GACT,QAAexzD,IAAUA,KAAOyzD,GACjCjD,EAAcz6C,EAAI/V,EAAKwzD,EAASxzD,GAAM,KAAMgvD,EAAO5c,EAAMyG,SAAUiZ,EAAiBxC,EAAgB2D,GAIhH,IAAK,MAAMjzD,KAAOyzD,EAAU,CAExB,IAAI,QAAezzD,GACf,SACJ,MAAM6T,EAAO4/C,EAASzzD,GAChBq2C,EAAOmd,EAASxzD,GAElB6T,IAASwiC,GAAgB,UAARr2C,GACjBwwD,EAAcz6C,EAAI/V,EAAKq2C,EAAMxiC,EAAMm7C,EAAO5c,EAAMyG,SAAUiZ,EAAiBxC,EAAgB2D,EAEnG,CACI,UAAWQ,GACXjD,EAAcz6C,EAAI,QAASy9C,EAAS5nD,MAAO6nD,EAAS7nD,MAE5D,GAEE0mD,EAAkB,CAACX,EAAIC,EAAI74B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,KACtG,MAAM4b,EAAuB3C,EAAG77C,GAAK47C,EAAKA,EAAG57C,GAAK46C,EAAe,IAC3D6D,EAAqB5C,EAAGC,OAASF,EAAKA,EAAGE,OAASlB,EAAe,IACvE,IAAI,UAAEzX,EAAS,gBAAE6Y,EAAiB1M,aAAcoP,GAAyB7C,EAUrE6C,IACApP,EAAeA,EACTA,EAAa1xD,OAAO8gE,GACpBA,GAEA,MAAN9C,GACAtB,EAAWkE,EAAqBx7B,EAAW84B,GAC3CxB,EAAWmE,EAAmBz7B,EAAW84B,GAIzCmB,EAAcpB,EAAG/Y,SAAU9f,EAAWy7B,EAAmB1C,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,IAG3GO,EAAY,GACA,GAAZA,GACA6Y,GAGAJ,EAAGI,iBAGH8B,EAAmBlC,EAAGI,gBAAiBA,EAAiBh5B,EAAW+4B,EAAiBxC,EAAgBN,EAAO3J,IASjG,MAAVuM,EAAG5xD,KACE8xD,GAAmBF,IAAOE,EAAgBrY,UAC3Cib,GAAuB/C,EAAIC,GAAI,IAQnCkC,EAAcnC,EAAIC,EAAI74B,EAAWy7B,EAAmB1C,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,EAElH,EAEE6Z,EAAmB,CAACb,EAAIC,EAAI74B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,KACvGiZ,EAAGvM,aAAeA,EACR,MAANsM,EACmB,IAAfC,EAAGha,UACHka,EAAgBpb,IAAIie,SAAS/C,EAAI74B,EAAW84B,EAAQ7C,EAAOrW,GAG3Dic,EAAehD,EAAI74B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAOrW,GAIlFkc,EAAgBlD,EAAIC,EAAIjZ,EAC5B,EAEEic,EAAiB,CAACE,EAAc/7B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAOrW,KAC7F,MAAMh9C,EAAYm5D,EAAa/b,UAAYgc,GAAwBD,EAAchD,EAAiBxC,GAwBlG,GAfI/O,GAAYuU,KACZn5D,EAAS+6C,IAAIse,SAAWvC,IAOxBwC,GAAet5D,GAOfA,EAASu5D,UAIT,GAHA5F,GAAkBA,EAAe6F,YAAYx5D,EAAUy5D,IAGlDN,EAAa/+C,GAAI,CAClB,MAAMs/C,EAAe15D,EAAS89C,QAAUxB,GAAYC,IACpDia,EAAmB,KAAMkD,EAAat8B,EAAW84B,EACrD,OAGJuD,EAAkBz5D,EAAUm5D,EAAc/7B,EAAW84B,EAAQvC,EAAgBN,EAAOrW,EACtC,EAK5Ckc,EAAkB,CAAClD,EAAIC,EAAIjZ,KAC7B,MAAMh9C,EAAYi2D,EAAG7Y,UAAY4Y,EAAG5Y,UACpC,GAAIP,EAAsBmZ,EAAIC,EAAIjZ,GAAY,CAC1C,GAAIh9C,EAASu5D,WACRv5D,EAAS25D,cAUV,YAJAC,EAAyB55D,EAAUi2D,EAAIjZ,GAQvCh9C,EAASkY,KAAO+9C,EAGhB3d,EAAct4C,EAASqjD,QAEvBrjD,EAASqjD,QAEjB,MAGI4S,EAAG77C,GAAK47C,EAAG57C,GACXpa,EAASy2C,MAAQwf,CACrB,EAEEwD,EAAoB,CAACz5D,EAAUm5D,EAAc/7B,EAAW84B,EAAQvC,EAAgBN,EAAOrW,KACzF,MAAM6c,EAAoB,KACtB,GAAK75D,EAASygD,UAyFT,CAID,IAEI0W,GAFA,KAAEj/C,EAAI,GAAE4hD,EAAE,EAAE36B,EAAC,OAAEyM,EAAM,MAAE6K,GAAUz2C,EACjC+5D,EAAa7hD,EAEb,EAIJ6/C,GAAc/3D,GAAU,GACpBkY,GACAA,EAAKkC,GAAKq8B,EAAMr8B,GAChBw/C,EAAyB55D,EAAUkY,EAAM8kC,IAGzC9kC,EAAOu+B,EAGPqjB,IACA,QAAeA,IAGd3C,EAAYj/C,EAAKre,OAASqe,EAAKre,MAAMm+D,sBACtCR,GAAgBL,EAAWvrB,EAAQ1zB,EAAMu+B,GAE7CshB,GAAc/3D,GAAU,GAKxB,MAAMg6D,EAAW3e,EAAoBr7C,GACjC,EAGJ,MAAMi6D,EAAWj6D,EAAS89C,QAC1B99C,EAAS89C,QAAUkc,EAInBjE,EAAMkE,EAAUD,EAEhBxE,EAAeyE,EAAS7/C,IAExBi8C,EAAgB4D,GAAWj6D,EAAU2zD,EAAgBN,GAIrDn7C,EAAKkC,GAAK4/C,EAAS5/C,GACA,OAAf2/C,GAIAlc,EAAgB79C,EAAUg6D,EAAS5/C,IAGnC+kB,GACA4gB,GAAsB5gB,EAAGw0B,IAGxBwD,EAAYj/C,EAAKre,OAASqe,EAAKre,MAAMy+D,iBACtCvY,IAAsB,IAAMyX,GAAgBL,EAAWvrB,EAAQ1zB,EAAMu+B,IAAQkd,EAQrF,KA/JyB,CACrB,IAAIwD,EACJ,MAAM,GAAE/8C,EAAE,MAAEvgB,GAAUs/D,GAChB,GAAEe,EAAE,EAAE7L,EAAC,OAAEziB,GAAW5rC,EACpBm6D,EAAsB9U,GAAe8T,GAY3C,GAXApB,GAAc/3D,GAAU,GAEpBk6D,IACA,QAAeA,IAGdC,IACAhD,EAAYt9D,GAASA,EAAM09D,qBAC5BC,GAAgBL,EAAWvrB,EAAQutB,GAEvCpB,GAAc/3D,GAAU,GACpBoa,GAAMggD,GAAa,CAEnB,MAAMC,EAAiB,KAInBr6D,EAAS89C,QAAUzC,EAAoBr7C,GAOvCo6D,GAAYhgD,EAAIpa,EAAS89C,QAAS99C,EAAU2zD,EAAgB,KACd,EAI9CwG,EACAhB,EAAappD,KAAKu1C,gBAAgBhtC,MAKlC,KAAOtY,EAASi5C,aAAeohB,MAG/BA,GAER,KACK,CACG,EAGJ,MAAMvc,EAAW99C,EAAS89C,QAAUzC,EAAoBr7C,GACpD,EAMJ+1D,EAAM,KAAMjY,EAAS1gB,EAAW84B,EAAQl2D,EAAU2zD,EAAgBN,GAIlE8F,EAAa/+C,GAAK0jC,EAAQ1jC,EAC9B,CAMA,GAJIi0C,GACAtO,GAAsBsO,EAAGsF,IAGxBwG,IACAhD,EAAYt9D,GAASA,EAAM69D,gBAAiB,CAC7C,MAAM4C,EAAqBnB,EAC3BpZ,IAAsB,IAAMyX,GAAgBL,EAAWvrB,EAAQ0uB,IAAqB3G,EACxF,EAI6B,IAAzBwF,EAAald,WACZrQ,GACGyZ,GAAezZ,EAAO6K,QACG,IAAzB7K,EAAO6K,MAAMwF,YACjBj8C,EAASokC,GAAK2b,GAAsB//C,EAASokC,EAAGuvB,GAEpD3zD,EAASygD,WAAY,EAKrB0Y,EAAe/7B,EAAY84B,EAAS,IACxC,CAuEA,EAGE3pB,EAAUvsC,EAASusC,OAAS,IAAI,KAAestB,GAAmB,IAAM5hB,EAASoL,IAASrjD,EAAS0gB,OAEnG2iC,EAAUrjD,EAASqjD,OAAS,IAAM9W,EAAOV,MAC/CwX,EAAOprC,GAAKjY,EAAS8L,IAGrBisD,GAAc/3D,GAAU,GAUxBqjD,GAAQ,EAENuW,EAA2B,CAAC55D,EAAU+8C,EAAWC,KACnDD,EAAUK,UAAYp9C,EACtB,MAAMi9C,EAAYj9C,EAASy2C,MAAM58C,MACjCmG,EAASy2C,MAAQsG,EACjB/8C,EAASkY,KAAO,KAChBo3C,GAAYtvD,EAAU+8C,EAAUljD,MAAOojD,EAAWD,GAClD0U,GAAY1xD,EAAU+8C,EAAUG,SAAUF,IAC1C,UAGAxE,KACA,SAAe,EAEb2f,EAAgB,CAACnC,EAAIC,EAAI74B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GAAY,KAChH,MAAMne,EAAKm3B,GAAMA,EAAG9Y,SACdqd,EAAgBvE,EAAKA,EAAG/Z,UAAY,EACpCjd,EAAKi3B,EAAG/Y,UACR,UAAEK,EAAS,UAAEtB,GAAcga,EAEjC,GAAI1Y,EAAY,EAAG,CACf,GAAgB,IAAZA,EAIA,YADAid,EAAmB37B,EAAIG,EAAI5B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GAGnG,GAAgB,IAAZO,EAGL,YADAkd,EAAqB57B,EAAIG,EAAI5B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,EAG9G,CAEgB,EAAZf,GAEoB,GAAhBse,GACAjD,EAAgBz4B,EAAIs3B,EAAiBxC,GAErC30B,IAAOH,GACPy2B,EAAmBl4B,EAAW4B,IAId,GAAhBu7B,EAEgB,GAAZte,EAEAue,EAAmB37B,EAAIG,EAAI5B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GAIpGsa,EAAgBz4B,EAAIs3B,EAAiBxC,GAAgB,IAMrC,EAAhB4G,GACAjF,EAAmBl4B,EAAW,IAGlB,GAAZ6e,GACAob,EAAcr4B,EAAI5B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GAGvG,EAEEyd,EAAuB,CAAC57B,EAAIG,EAAI5B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,KAC3Gne,EAAKA,GAAM,KACXG,EAAKA,GAAM,KACX,MAAM07B,EAAY77B,EAAG9mC,OACf62C,EAAY5P,EAAGjnC,OACf4iE,EAAer4D,KAAKC,IAAIm4D,EAAW9rB,GACzC,IAAI92C,EACJ,IAAKA,EAAI,EAAGA,EAAI6iE,EAAc7iE,IAAK,CAC/B,MAAM8iE,EAAa57B,EAAGlnC,GAAKklD,EACrB4a,GAAe54B,EAAGlnC,IAClBqkD,GAAend,EAAGlnC,IACxBi+D,EAAMl3B,EAAG/mC,GAAI8iE,EAAWx9B,EAAW,KAAM+4B,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,EACnG,CACI0d,EAAY9rB,EAEZ0oB,EAAgBz4B,EAAIs3B,EAAiBxC,GAAgB,GAAM,EAAOgH,GAIlEtD,EAAcr4B,EAAI5B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,EAAW2d,EAC1G,EAGEH,EAAqB,CAAC37B,EAAIG,EAAI5B,EAAWy9B,EAAc1E,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,KAC/G,IAAIllD,EAAI,EACR,MAAMgjE,EAAK97B,EAAGjnC,OACd,IAAIgjE,EAAKl8B,EAAG9mC,OAAS,EACjBijE,EAAKF,EAAK,EAId,MAAOhjE,GAAKijE,GAAMjjE,GAAKkjE,EAAI,CACvB,MAAMhF,EAAKn3B,EAAG/mC,GACRm+D,EAAMj3B,EAAGlnC,GAAKklD,EACd4a,GAAe54B,EAAGlnC,IAClBqkD,GAAend,EAAGlnC,IACxB,IAAIorD,GAAgB8S,EAAIC,GAIpB,MAHAF,EAAMC,EAAIC,EAAI74B,EAAW,KAAM+4B,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GAKzFllD,GACJ,CAIA,MAAOA,GAAKijE,GAAMjjE,GAAKkjE,EAAI,CACvB,MAAMhF,EAAKn3B,EAAGk8B,GACR9E,EAAMj3B,EAAGg8B,GAAMhe,EACf4a,GAAe54B,EAAGg8B,IAClB7e,GAAend,EAAGg8B,IACxB,IAAI9X,GAAgB8S,EAAIC,GAIpB,MAHAF,EAAMC,EAAIC,EAAI74B,EAAW,KAAM+4B,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GAKzF+d,IACAC,GACJ,CAQA,GAAIljE,EAAIijE,GACJ,GAAIjjE,GAAKkjE,EAAI,CACT,MAAMC,EAAUD,EAAK,EACf9E,EAAS+E,EAAUH,EAAK97B,EAAGi8B,GAAS7gD,GAAKygD,EAC/C,MAAO/iE,GAAKkjE,EACRjF,EAAM,KAAO/2B,EAAGlnC,GAAKklD,EACf4a,GAAe54B,EAAGlnC,IAClBqkD,GAAend,EAAGlnC,IAAMslC,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GACvGllD,GAER,OASC,GAAIA,EAAIkjE,EACT,MAAOljE,GAAKijE,EACRxH,EAAQ10B,EAAG/mC,GAAIq+D,EAAiBxC,GAAgB,GAChD77D,QAOH,CACD,MAAMojE,EAAKpjE,EACLqjE,EAAKrjE,EAELsjE,EAAmB,IAAIx7D,IAC7B,IAAK9H,EAAIqjE,EAAIrjE,GAAKkjE,EAAIljE,IAAK,CACvB,MAAM8iE,EAAa57B,EAAGlnC,GAAKklD,EACrB4a,GAAe54B,EAAGlnC,IAClBqkD,GAAend,EAAGlnC,IACH,MAAjB8iE,EAAUv2D,KAIV+2D,EAAiBv+D,IAAI+9D,EAAUv2D,IAAKvM,EAE5C,CAGA,IAAIwB,EACA+hE,EAAU,EACd,MAAMC,EAAcN,EAAKG,EAAK,EAC9B,IAAII,GAAQ,EAERC,EAAmB,EAMvB,MAAMC,EAAwB,IAAI36D,MAAMw6D,GACxC,IAAKxjE,EAAI,EAAGA,EAAIwjE,EAAaxjE,IACzB2jE,EAAsB3jE,GAAK,EAC/B,IAAKA,EAAIojE,EAAIpjE,GAAKijE,EAAIjjE,IAAK,CACvB,MAAM4jE,EAAY78B,EAAG/mC,GACrB,GAAIujE,GAAWC,EAAa,CAExB/H,EAAQmI,EAAWvF,EAAiBxC,GAAgB,GACpD,QACJ,CACA,IAAIgI,EACJ,GAAqB,MAAjBD,EAAUr3D,IACVs3D,EAAWP,EAAiBx+D,IAAI8+D,EAAUr3D,UAI1C,IAAK/K,EAAI6hE,EAAI7hE,GAAK0hE,EAAI1hE,IAClB,GAAsC,IAAlCmiE,EAAsBniE,EAAI6hE,IAC1BjY,GAAgBwY,EAAW18B,EAAG1lC,IAAK,CACnCqiE,EAAWriE,EACX,KACJ,MAGSrE,IAAb0mE,EACApI,EAAQmI,EAAWvF,EAAiBxC,GAAgB,IAGpD8H,EAAsBE,EAAWR,GAAMrjE,EAAI,EACvC6jE,GAAYH,EACZA,EAAmBG,EAGnBJ,GAAQ,EAEZxF,EAAM2F,EAAW18B,EAAG28B,GAAWv+B,EAAW,KAAM+4B,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GACtGqe,IAER,CAGA,MAAMO,EAA6BL,EAC7BM,GAAYJ,GACZ,KAGN,IAFAniE,EAAIsiE,EAA2B7jE,OAAS,EAEnCD,EAAIwjE,EAAc,EAAGxjE,GAAK,EAAGA,IAAK,CACnC,MAAMgkE,EAAYX,EAAKrjE,EACjB8iE,EAAY57B,EAAG88B,GACf5F,EAAS4F,EAAY,EAAIhB,EAAK97B,EAAG88B,EAAY,GAAG1hD,GAAKygD,EAC1B,IAA7BY,EAAsB3jE,GAEtBi+D,EAAM,KAAM6E,EAAWx9B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,GAE3Fue,IAIDjiE,EAAI,GAAKxB,IAAM8jE,EAA2BtiE,GAC1CyiE,EAAKnB,EAAWx9B,EAAW84B,EAAQ,GAGnC58D,IAGZ,CACJ,GAEEyiE,EAAO,CAACtlB,EAAOrZ,EAAW84B,EAAQ8F,EAAUrI,EAAiB,QAC/D,MAAM,GAAEv5C,EAAE,KAAErK,EAAI,WAAE6sC,EAAU,SAAEM,EAAQ,UAAEjB,GAAcxF,EACtD,GAAgB,EAAZwF,EAEA,YADA8f,EAAKtlB,EAAM2G,UAAUU,QAAS1gB,EAAW84B,EAAQ8F,GAGrD,GAAgB,IAAZ/f,EAEA,YADAxF,EAAMyH,SAAS6d,KAAK3+B,EAAW84B,EAAQ8F,GAG3C,GAAgB,GAAZ/f,EAEA,YADAlsC,EAAKgsD,KAAKtlB,EAAOrZ,EAAW84B,EAAQY,IAGxC,GAAI/mD,IAASo1C,GAAU,CACnBuP,EAAWt6C,EAAIgjB,EAAW84B,GAC1B,IAAK,IAAIp+D,EAAI,EAAGA,EAAIolD,EAASnlD,OAAQD,IACjCikE,EAAK7e,EAASplD,GAAIslC,EAAW84B,EAAQ8F,GAGzC,YADAtH,EAAWje,EAAMyf,OAAQ94B,EAAW84B,EAExC,CACA,GAAInmD,IAAS0mD,GAET,YADAM,EAAetgB,EAAOrZ,EAAW84B,GAIrC,MAAM+F,EAA8B,IAAbD,GACP,EAAZ/f,GACAW,EACJ,GAAIqf,EACA,GAAiB,IAAbD,EACApf,EAAWqH,YAAY7pC,GACvBs6C,EAAWt6C,EAAIgjB,EAAW84B,GAC1BnW,IAAsB,IAAMnD,EAAWuH,MAAM/pC,IAAKu5C,OAEjD,CACD,MAAM,MAAElP,EAAK,WAAEnB,EAAU,WAAEF,GAAexG,EACpC8H,EAAS,IAAMgQ,EAAWt6C,EAAIgjB,EAAW84B,GACzCgG,EAAe,KACjBzX,EAAMrqC,GAAI,KACNsqC,IACAtB,GAAcA,GAAY,GAC5B,EAEFE,EACAA,EAAWlpC,EAAIsqC,EAAQwX,GAGvBA,GAER,MAGAxH,EAAWt6C,EAAIgjB,EAAW84B,EAC9B,EAEE3C,EAAU,CAAC9c,EAAO0f,EAAiBxC,EAAgBwI,GAAW,EAAOnf,GAAY,KACnF,MAAM,KAAEjtC,EAAI,MAAElW,EAAK,IAAEu6C,EAAG,SAAE8I,EAAQ,gBAAEkZ,EAAe,UAAEna,EAAS,UAAEsB,EAAS,KAAEZ,GAASlG,EAKpF,GAHW,MAAPrC,GACAof,GAAOpf,EAAK,KAAMuf,EAAgBld,GAAO,GAE7B,IAAZwF,EAEA,YADAka,EAAgBpb,IAAIqhB,WAAW3lB,GAGnC,MAAM4lB,EAA+B,EAAZpgB,GAA0CU,EAC7D2f,GAAyBjX,GAAe5O,GAC9C,IAAI0gB,EAKJ,GAJImF,IACCnF,EAAYt9D,GAASA,EAAM0iE,uBAC5B/E,GAAgBL,EAAWhB,EAAiB1f,GAEhC,EAAZwF,EACAugB,EAAiB/lB,EAAM2G,UAAWuW,EAAgBwI,OAEjD,CACD,GAAgB,IAAZlgB,EAEA,YADAxF,EAAMyH,SAASqV,QAAQI,EAAgBwI,GAGvCE,GACAxU,GAAoBpR,EAAO,KAAM0f,EAAiB,iBAEtC,GAAZla,EACAxF,EAAM1mC,KAAK20C,OAAOjO,EAAO0f,EAAiBxC,EAAgB3W,EAAW8Z,GAAWqF,GAE3E/F,IAEJrmD,IAASo1C,IACL5H,EAAY,GAAiB,GAAZA,GAEtB+Z,EAAgBlB,EAAiBD,EAAiBxC,GAAgB,GAAO,IAEnE5jD,IAASo1C,IAEX,IADJ5H,IAEEP,GAAyB,GAAZf,IACfqb,EAAgBpa,EAAUiZ,EAAiBxC,GAE3CwI,GACAzX,EAAOjO,EAEf,EACK6lB,IACAnF,EAAYt9D,GAASA,EAAM4iE,mBAC5BJ,IACAtc,IAAsB,KAClBoX,GAAaK,GAAgBL,EAAWhB,EAAiB1f,GACzD4lB,GACIxU,GAAoBpR,EAAO,KAAM0f,EAAiB,YAAY,GACnExC,EACP,EAEEjP,EAASjO,IACX,MAAM,KAAE1mC,EAAI,GAAEqK,EAAE,OAAE87C,EAAM,WAAEtZ,GAAenG,EACzC,GAAI1mC,IAASo1C,GAkBT,YAFIuX,EAAetiD,EAAI87C,GAI3B,GAAInmD,IAAS0mD,GAET,YADAO,EAAiBvgB,GAGrB,MAAMkmB,EAAgB,KAClBhI,EAAWv6C,GACPwiC,IAAeA,EAAWuE,WAAavE,EAAWwG,YAClDxG,EAAWwG,YACf,EAEJ,GAAsB,EAAlB3M,EAAMwF,WACNW,IACCA,EAAWuE,UAAW,CACvB,MAAM,MAAEsD,EAAK,WAAEnB,GAAe1G,EACxBsf,EAAe,IAAMzX,EAAMrqC,EAAIuiD,GACjCrZ,EACAA,EAAW7M,EAAMr8B,GAAIuiD,EAAeT,GAGpCA,GAER,MAEIS,GACJ,EAEED,EAAiB,CAAChmB,EAAKmB,KAGzB,IAAI3/B,EACJ,MAAOw+B,IAAQmB,EACX3/B,EAAOw9C,EAAgBhf,GACvBie,EAAWje,GACXA,EAAMx+B,EAEVy8C,EAAW9c,EAAI,EAEb2kB,EAAmB,CAACx8D,EAAU2zD,EAAgBwI,KAIhD,MAAM,IAAES,EAAG,MAAEl8C,EAAK,OAAE2iC,EAAM,QAAEvF,EAAO,GAAE+e,GAAO78D,EAExC48D,IACA,QAAeA,GAGnBl8C,EAAMurB,OAGFoX,IAEAA,EAAOx3B,QAAS,EAChB0nC,EAAQzV,EAAS99C,EAAU2zD,EAAgBwI,IAG3CU,GACA9c,GAAsB8c,EAAIlJ,GAE9B5T,IAAsB,KAClB//C,EAASi5C,aAAc,CAAI,GAC5B0a,GAICA,GACAA,EAAexV,gBACdwV,EAAe1a,aAChBj5C,EAASu5D,WACRv5D,EAAS25D,eACV35D,EAAS88D,aAAenJ,EAAeoJ,YACvCpJ,EAAexzD,OACa,IAAxBwzD,EAAexzD,MACfwzD,EAAe3/C,UAGgD,EAIrEsjD,EAAkB,CAACpa,EAAUiZ,EAAiBxC,EAAgBwI,GAAW,EAAOnf,GAAY,EAAO9xB,EAAQ,KAC7G,IAAK,IAAIpzB,EAAIozB,EAAOpzB,EAAIolD,EAASnlD,OAAQD,IACrCy7D,EAAQrW,EAASplD,GAAIq+D,EAAiBxC,EAAgBwI,EAAUnf,EACpE,EAEEqZ,EAAkB5f,GACE,EAAlBA,EAAMwF,UACCoa,EAAgB5f,EAAM2G,UAAUU,SAErB,IAAlBrH,EAAMwF,UACCxF,EAAMyH,SAAShmC,OAEnBw9C,EAAiBjf,EAAMyf,QAAUzf,EAAMr8B,IAE5CwhC,EAAS,CAACnF,EAAOrZ,EAAWi2B,KACjB,MAAT5c,EACIrZ,EAAU4/B,QACVzJ,EAAQn2B,EAAU4/B,OAAQ,KAAM,MAAM,GAI1CjH,EAAM34B,EAAU4/B,QAAU,KAAMvmB,EAAOrZ,EAAW,KAAM,KAAM,KAAMi2B,GAExE7a,IACAG,IACAvb,EAAU4/B,OAASvmB,CAAK,EAEtBqgB,GAAY,CACdt9D,EAAGu8D,EACH8G,GAAItJ,EACJlF,EAAG0N,EACHhlC,EAAG2tB,EACHuY,GAAIhE,EACJiE,GAAI7F,EACJ8F,GAAIhF,EACJiF,IAAKlF,EACLrrD,EAAGwpD,EACH1pD,EAAGjM,GAEP,IAAI0xD,GACAgI,GAIJ,OAHI7F,KACCnC,GAASgI,IAAe7F,EAAmBuC,KAEzC,CACHlb,SACAwW,WACAiL,UAAWlL,GAAavW,EAAQwW,IAExC,CACA,SAAS2F,IAAc,OAAExrB,EAAM,OAAE8W,GAAUia,GACvC/wB,EAAOyC,aAAeqU,EAAOrU,aAAesuB,CAChD,CAYA,SAASvE,GAAuB/C,EAAIC,EAAIpmB,GAAU,GAC9C,MAAM0tB,EAAMvH,EAAG9Y,SACTsgB,EAAMvH,EAAG/Y,SACf,IAAI,QAAQqgB,KAAQ,QAAQC,GACxB,IAAK,IAAI1lE,EAAI,EAAGA,EAAIylE,EAAIxlE,OAAQD,IAAK,CAGjC,MAAM+mC,EAAK0+B,EAAIzlE,GACf,IAAIknC,EAAKw+B,EAAI1lE,GACM,EAAfknC,EAAGid,YAA2Cjd,EAAGo3B,mBAC7Cp3B,EAAGue,WAAa,GAAsB,KAAjBve,EAAGue,aACxBve,EAAKw+B,EAAI1lE,GAAK8/D,GAAe4F,EAAI1lE,IACjCknC,EAAG5kB,GAAKykB,EAAGzkB,IAEVy1B,GACDkpB,GAAuBl6B,EAAIG,IAG/BA,EAAGjvB,OAASumD,KACZt3B,EAAG5kB,GAAKykB,EAAGzkB,GAOnB,CAER,CAEA,SAASyhD,GAAY3jE,GACjB,MAAMsB,EAAItB,EAAIiH,QACRrC,EAAS,CAAC,GAChB,IAAIhF,EAAGwB,EAAG6lC,EAAGzJ,EAAG8I,EAChB,MAAMvlC,EAAMf,EAAIH,OAChB,IAAKD,EAAI,EAAGA,EAAImB,EAAKnB,IAAK,CACtB,MAAM2lE,EAAOvlE,EAAIJ,GACjB,GAAa,IAAT2lE,EAAY,CAEZ,GADAnkE,EAAIwD,EAAOA,EAAO/E,OAAS,GACvBG,EAAIoB,GAAKmkE,EAAM,CACfjkE,EAAE1B,GAAKwB,EACPwD,EAAOmX,KAAKnc,GACZ,QACJ,CACAqnC,EAAI,EACJzJ,EAAI54B,EAAO/E,OAAS,EACpB,MAAOonC,EAAIzJ,EACP8I,EAAKW,EAAIzJ,GAAM,EACXx9B,EAAI4E,EAAO0hC,IAAMi/B,EACjBt+B,EAAIX,EAAI,EAGR9I,EAAI8I,EAGRi/B,EAAOvlE,EAAI4E,EAAOqiC,MACdA,EAAI,IACJ3lC,EAAE1B,GAAKgF,EAAOqiC,EAAI,IAEtBriC,EAAOqiC,GAAKrnC,EAEpB,CACJ,CACAqnC,EAAIriC,EAAO/E,OACX29B,EAAI54B,EAAOqiC,EAAI,GACf,MAAOA,KAAM,EACTriC,EAAOqiC,GAAKzJ,EACZA,EAAIl8B,EAAEk8B,GAEV,OAAO54B,CACX,CAEA,MAAM4gE,GAAc3tD,GAASA,EAAK4tD,aAC5BC,GAAsB/jE,GAAUA,IAAUA,EAAMgkE,UAA+B,KAAnBhkE,EAAMgkE,UAClEC,GAAerzC,GAAiC,qBAAfszC,YAA8BtzC,aAAkBszC,WACjFC,GAAgB,CAACnkE,EAAOokE,KAC1B,MAAMC,EAAiBrkE,GAASA,EAAM00D,GACtC,IAAI,QAAS2P,GAAiB,CAC1B,GAAKD,EAMA,CACD,MAAMxzC,EAASwzC,EAAOC,GAQtB,OAAOzzC,CACX,CAZI,OAAO,IAaf,CAKI,OAAOyzC,CACX,EAEEC,GAAe,CACjBR,cAAc,EACdj7B,QAAQszB,EAAIC,EAAI74B,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,EAAW8Z,GAChG,MAAQoG,GAAI7F,EAAe8F,GAAIhF,EAAeiF,IAAKlF,EAAoBvrD,GAAG,OAAE8nD,EAAM,cAAE2J,EAAa,WAAErJ,EAAU,cAAEE,IAAoB6B,EAC7H+G,EAAWD,GAAmB3H,EAAGp8D,OACvC,IAAI,UAAEoiD,EAAS,SAAEiB,EAAQ,gBAAEkZ,GAAoBH,EAO/C,GAAU,MAAND,EAAY,CAEZ,MAAM0D,EAAezD,EAAG77C,GAElB26C,EAAW,IACXsJ,EAAcpI,EAAGC,OAEjBnB,EAAW,IACjBN,EAAOiF,EAAat8B,EAAW84B,GAC/BzB,EAAO4J,EAAYjhC,EAAW84B,GAC9B,MAAMzrC,EAAUwrC,EAAGxrC,OAASuzC,GAAc/H,EAAGp8D,MAAOukE,GAC9CE,EAAgBrI,EAAGqI,aAAevJ,EAAW,IAC/CtqC,IACAgqC,EAAO6J,EAAc7zC,GAErB4oC,EAAQA,GAASyK,GAAYrzC,IAKjC,MAAMyoC,EAAQ,CAAC91B,EAAW84B,KAGN,GAAZja,GACAob,EAAcna,EAAU9f,EAAW84B,EAAQC,EAAiBxC,EAAgBN,EAAO3J,EAAc1M,EACrG,EAEA6gB,EACA3K,EAAM91B,EAAWihC,GAEZ5zC,GACLyoC,EAAMzoC,EAAQ6zC,EAEtB,KACK,CAEDrI,EAAG77C,GAAK47C,EAAG57C,GACX,MAAMikD,EAAcpI,EAAGC,OAASF,EAAGE,OAC7BzrC,EAAUwrC,EAAGxrC,OAASurC,EAAGvrC,OACzB6zC,EAAgBrI,EAAGqI,aAAetI,EAAGsI,aACrCC,EAAcX,GAAmB5H,EAAGn8D,OACpC2kE,EAAmBD,EAAcnhC,EAAY3S,EAC7Cg0C,EAAgBF,EAAcF,EAAaC,EAajD,GAZAjL,EAAQA,GAASyK,GAAYrzC,GACzB2rC,GAEA8B,EAAmBlC,EAAGI,gBAAiBA,EAAiBoI,EAAkBrI,EAAiBxC,EAAgBN,EAAO3J,GAIlHqP,GAAuB/C,EAAIC,GAAI,IAEzBjZ,GACNmb,EAAcnC,EAAIC,EAAIuI,EAAkBC,EAAetI,EAAiBxC,EAAgBN,EAAO3J,GAAc,GAE7GmU,EACKU,GAGDG,GAAazI,EAAI74B,EAAWihC,EAAYvH,EAAW,QAKvD,IAAKb,EAAGp8D,OAASo8D,EAAGp8D,MAAM00D,OAASyH,EAAGn8D,OAASm8D,EAAGn8D,MAAM00D,IAAK,CACzD,MAAMoQ,EAAc1I,EAAGxrC,OAASuzC,GAAc/H,EAAGp8D,MAAOukE,GACpDO,GACAD,GAAazI,EAAI0I,EAAY,KAAM7H,EAAW,EAKtD,MACSyH,GAGLG,GAAazI,EAAIxrC,EAAQ6zC,EAAcxH,EAAW,EAG9D,CACA8H,GAAc3I,EAClB,EACAvR,OAAOjO,EAAO0f,EAAiBxC,EAAgB3W,GAAa6f,GAAItJ,EAAS5mD,GAAK+3C,OAAQiQ,IAAgBwH,GAClG,MAAM,UAAElgB,EAAS,SAAEiB,EAAQ,OAAEgZ,EAAM,aAAEoI,EAAY,OAAE7zC,EAAM,MAAE5wB,GAAU48C,EAKrE,GAJIhsB,GACAkqC,EAAW2J,IAGXnC,IAAayB,GAAmB/jE,MAChC86D,EAAWuB,GACK,GAAZja,GACA,IAAK,IAAInkD,EAAI,EAAGA,EAAIolD,EAASnlD,OAAQD,IAAK,CACtC,MAAMuqD,EAAQnF,EAASplD,GACvBy7D,EAAQlR,EAAO8T,EAAiBxC,GAAgB,IAAQtR,EAAM+T,gBAClE,CAGZ,EACA2F,KAAM2C,GACNtM,QAASyM,IAEb,SAASH,GAAajoB,EAAOrZ,EAAWy9B,GAAgBluD,GAAG,OAAE8nD,GAAUpG,EAAG0N,GAAQC,EAAW,GAExE,IAAbA,GACAvH,EAAOhe,EAAM6nB,aAAclhC,EAAWy9B,GAE1C,MAAM,GAAEzgD,EAAE,OAAE87C,EAAM,UAAEja,EAAS,SAAEiB,EAAQ,MAAErjD,GAAU48C,EAC7CqoB,EAAyB,IAAb9C,EAQlB,GANI8C,GACArK,EAAOr6C,EAAIgjB,EAAWy9B,KAKrBiE,GAAalB,GAAmB/jE,KAEjB,GAAZoiD,EACA,IAAK,IAAInkD,EAAI,EAAGA,EAAIolD,EAASnlD,OAAQD,IACjCikE,EAAK7e,EAASplD,GAAIslC,EAAWy9B,EAAc,GAKnDiE,GACArK,EAAOyB,EAAQ94B,EAAWy9B,EAElC,CACA,SAASgE,GAAgBE,EAAMtoB,EAAO0f,EAAiBxC,EAAgBjK,EAAc1M,GAAarwC,GAAG,YAAE8oD,EAAW,WAAEF,EAAU,cAAE6I,IAAmBY,GAC/I,MAAMv0C,EAAUgsB,EAAMhsB,OAASuzC,GAAcvnB,EAAM58C,MAAOukE,GAC1D,GAAI3zC,EAAQ,CAGR,MAAMw0C,EAAax0C,EAAOy0C,MAAQz0C,EAAO00C,WACzC,GAAsB,GAAlB1oB,EAAMwF,UACN,GAAI2hB,GAAmBnnB,EAAM58C,OACzB48C,EAAMyf,OAAS8I,EAAgBvJ,EAAYsJ,GAAOtoB,EAAO8e,EAAWwJ,GAAO5I,EAAiBxC,EAAgBjK,EAAc1M,GAC1HvG,EAAM6nB,aAAeW,MAEpB,CACDxoB,EAAMyf,OAAST,EAAYsJ,GAI3B,IAAIT,EAAeW,EACnB,MAAOX,EAEH,GADAA,EAAe7I,EAAY6I,GACvBA,GAC0B,IAA1BA,EAAac,UACS,oBAAtBd,EAAaj5C,KAA4B,CACzCoxB,EAAM6nB,aAAeA,EACrB7zC,EAAOy0C,KACHzoB,EAAM6nB,cAAgB7I,EAAYhf,EAAM6nB,cAC5C,KACJ,CAEJU,EAAgBC,EAAYxoB,EAAOhsB,EAAQ0rC,EAAiBxC,EAAgBjK,EAAc1M,EAC9F,CAEJ4hB,GAAcnoB,EAClB,CACA,OAAOA,EAAMyf,QAAUT,EAAYhf,EAAMyf,OAC7C,CAEA,MAAMmJ,GAAWlB,GACjB,SAASS,GAAcnoB,GAGnB,MAAMsE,EAAMtE,EAAMsE,IAClB,GAAIA,GAAOA,EAAIukB,GAAI,CACf,IAAIP,EAAOtoB,EAAMyG,SAAS,GAAG9iC,GAC7B,MAAO2kD,IAAStoB,EAAM6nB,aACI,IAAlBS,EAAKK,UACLL,EAAKnvC,aAAa,eAAgBmrB,EAAIjvC,KAC1CizD,EAAOA,EAAKtJ,YAEhB1a,EAAIukB,IACR,CACJ,CAEA,MAAMna,GAAW3X,YAA8Dv4C,GACzEqhE,GAAO9oB,YAA0Dv4C,GACjEsnD,GAAU/O,YAA6Dv4C,GACvEwhE,GAASjpB,YAA4Dv4C,GAMrEonD,GAAa,GACnB,IAAIkjB,GAAe,KAiBnB,SAASnW,GAAUoW,GAAkB,GACjCnjB,GAAWpoC,KAAMsrD,GAAeC,EAAkB,KAAO,GAC7D,CACA,SAASC,KACLpjB,GAAWriC,MACXulD,GAAeljB,GAAWA,GAAWtkD,OAAS,IAAM,IACxD,CAKA,IAAI2nE,GAAqB,EAiBzB,SAASvkB,GAAiBlrC,GACtByvD,IAAsBzvD,CAC1B,CACA,SAAS0vD,GAAWlpB,GAWhB,OATAA,EAAM2f,gBACFsJ,GAAqB,EAAIH,IAAgB,KAAY,KAEzDE,KAGIC,GAAqB,GAAKH,IAC1BA,GAAatrD,KAAKwiC,GAEfA,CACX,CAIA,SAASmpB,GAAmB7vD,EAAMlW,EAAOqjD,EAAUK,EAAWI,EAAc1B,GACxE,OAAO0jB,GAAWE,GAAgB9vD,EAAMlW,EAAOqjD,EAAUK,EAAWI,EAAc1B,GAAW,GACjG,CAQA,SAASuN,GAAYz5C,EAAMlW,EAAOqjD,EAAUK,EAAWI,GACnD,OAAOgiB,GAAWrjB,GAAYvsC,EAAMlW,EAAOqjD,EAAUK,EAAWI,GAAc,GAClF,CACA,SAASiM,GAAQ35C,GACb,QAAOA,IAA8B,IAAtBA,EAAM6vD,WACzB,CACA,SAAS5c,GAAgB8S,EAAIC,GAWzB,OAAOD,EAAGjmD,OAASkmD,EAAGlmD,MAAQimD,EAAG3xD,MAAQ4xD,EAAG5xD,GAChD,CAWA,MAKM8qD,GAAoB,cACpB4Q,GAAe,EAAG17D,SAAiB,MAAPA,EAAcA,EAAM,KAChD27D,GAAe,EAAG5rB,MAAK6rB,UAASC,aACnB,MAAP9rB,GACF,QAASA,KAAQ,QAAMA,KAAQ,QAAWA,GACtC,CAAEt8C,EAAGyiD,EAA0BxjB,EAAGqd,EAAK76C,EAAG0mE,EAASpV,IAAKqV,GACxD9rB,EACJ,KAEV,SAASyrB,GAAgB9vD,EAAMlW,EAAQ,KAAMqjD,EAAW,KAAMK,EAAY,EAAGI,EAAe,KAAM1B,GAAYlsC,IAASo1C,GAAW,EAAI,GAA4Bgb,GAAc,EAAOC,GAAgC,GACnN,MAAM3pB,EAAQ,CACVqpB,aAAa,EACbO,UAAU,EACVtwD,OACAlW,QACAwK,IAAKxK,GAASkmE,GAAalmE,GAC3Bu6C,IAAKv6C,GAASmmE,GAAanmE,GAC3B4vD,QAASjP,EACTkP,aAAc,KACdxM,WACAE,UAAW,KACXc,SAAU,KACV2G,UAAW,KACXC,WAAY,KACZnI,KAAM,KACNC,WAAY,KACZxiC,GAAI,KACJ87C,OAAQ,KACRzrC,OAAQ,KACR6zC,aAAc,KACdgC,YAAa,EACbrkB,YACAsB,YACAI,eACAyY,gBAAiB,KACjBpf,WAAY,KACZ+D,IAAKR,GAoCT,OAlCI6lB,GACAG,GAAkB9pB,EAAOyG,GAET,IAAZjB,GACAlsC,EAAKywD,UAAU/pB,IAGdyG,IAGLzG,EAAMwF,YAAa,QAASiB,GACtB,EACA,IAONwiB,GAAqB,IAEpBS,GAEDZ,KAKC9oB,EAAM8G,UAAY,GAAiB,EAAZtB,IAGJ,KAApBxF,EAAM8G,WACNgiB,GAAatrD,KAAKwiC,GAEfA,CACX,CACA,MAAM6F,GAAwFmkB,GAC9F,SAASA,GAAa1wD,EAAMlW,EAAQ,KAAMqjD,EAAW,KAAMK,EAAY,EAAGI,EAAe,KAAMwiB,GAAc,GAOzG,GANKpwD,GAAQA,IAASs4C,KAIlBt4C,EAAOwsC,IAEPqN,GAAQ75C,GAAO,CAIf,MAAM2wD,EAAShkB,GAAW3sC,EAAMlW,GAAO,GAavC,OAZIqjD,GACAqjB,GAAkBG,EAAQxjB,GAE1BwiB,GAAqB,IAAMS,GAAeZ,KACnB,EAAnBmB,EAAOzkB,UACPsjB,GAAaA,GAAa9mE,QAAQsX,IAAS2wD,EAG3CnB,GAAatrD,KAAKysD,IAG1BA,EAAOnjB,YAAc,EACdmjB,CACX,CAMA,GAJIC,GAAiB5wD,KACjBA,EAAOA,EAAK6wD,WAGZ/mE,EAAO,CAEPA,EAAQgnE,GAAmBhnE,GAC3B,IAAMw+D,MAAOyI,EAAK,MAAEvmD,GAAU1gB,EAC1BinE,KAAU,QAASA,KACnBjnE,EAAMw+D,OAAQ,QAAeyI,KAE7B,QAASvmD,MAGL,QAAQA,MAAW,QAAQA,KAC3BA,GAAQ,QAAO,CAAC,EAAGA,IAEvB1gB,EAAM0gB,OAAQ,QAAeA,GAErC,CAEA,MAAM0hC,GAAY,QAASlsC,GACrB,EACAguC,EAAWhuC,GACP,IACA2tD,GAAW3tD,GACP,IACA,QAASA,GACL,GACA,QAAWA,GACP,EACA,EAQtB,OAAO8vD,GAAgB9vD,EAAMlW,EAAOqjD,EAAUK,EAAWI,EAAc1B,EAAWkkB,GAAa,EACnG,CACA,SAASU,GAAmBhnE,GACxB,OAAKA,GAEE,QAAQA,IAAUs1D,MAAqBt1D,GACxC,QAAO,CAAC,EAAGA,GACXA,EAHK,IAIf,CACA,SAAS6iD,GAAWjG,EAAOsqB,EAAYC,GAAW,GAG9C,MAAM,MAAEnnE,EAAK,IAAEu6C,EAAG,UAAEmJ,EAAS,SAAEL,GAAazG,EACtCwqB,EAAcF,EAAaG,GAAWrnE,GAAS,CAAC,EAAGknE,GAAclnE,EACjE6mE,EAAS,CACXZ,aAAa,EACbO,UAAU,EACVtwD,KAAM0mC,EAAM1mC,KACZlW,MAAOonE,EACP58D,IAAK48D,GAAelB,GAAakB,GACjC7sB,IAAK2sB,GAAcA,EAAW3sB,IAItB4sB,GAAY5sB,GACN,QAAQA,GACJA,EAAIp8C,OAAOgoE,GAAae,IACxB,CAAC3sB,EAAK4rB,GAAae,IACvBf,GAAae,GACrB3sB,EACNqV,QAAShT,EAAMgT,QACfC,aAAcjT,EAAMiT,aACpBxM,SAEMA,EACNzyB,OAAQgsB,EAAMhsB,OACd6zC,aAAc7nB,EAAM6nB,aACpBgC,YAAa7pB,EAAM6pB,YACnBrkB,UAAWxF,EAAMwF,UAKjBsB,UAAWwjB,GAActqB,EAAM1mC,OAASo1C,IACnB,IAAf5H,EACI,GACY,GAAZA,EACJA,EACNI,aAAclH,EAAMkH,aACpByY,gBAAiB3f,EAAM2f,gBACvBpf,WAAYP,EAAMO,WAClB2F,KAAMlG,EAAMkG,KACZC,WAAYnG,EAAMmG,WAKlBQ,UAAW3G,EAAM2G,UACjBc,SAAUzH,EAAMyH,SAChB2G,UAAWpO,EAAMoO,WAAanI,GAAWjG,EAAMoO,WAC/CC,WAAYrO,EAAMqO,YAAcpI,GAAWjG,EAAMqO,YACjD1qC,GAAIq8B,EAAMr8B,GACV87C,OAAQzf,EAAMyf,OACdnb,IAAKtE,EAAMsE,KAEf,OAAO2lB,CACX,CAeA,SAASS,GAAgBC,EAAO,IAAKC,EAAO,GACxC,OAAO/kB,GAAYga,GAAM,KAAM8K,EAAMC,EACzC,CAIA,SAASC,GAAkBC,EAASC,GAGhC,MAAM/qB,EAAQ6F,GAAYma,GAAQ,KAAM8K,GAExC,OADA9qB,EAAM6pB,YAAckB,EACb/qB,CACX,CAIA,SAASgrB,GAAmBL,EAAO,GAGnCM,GAAU,GACN,OAAOA,GACAtY,KAAaI,GAAYjN,GAAS,KAAM6kB,IACzC9kB,GAAYC,GAAS,KAAM6kB,EACrC,CACA,SAASjlB,GAAekG,GACpB,OAAa,MAATA,GAAkC,mBAAVA,EAEjB/F,GAAYC,KAEd,QAAQ8F,GAEN/F,GAAY6I,GAAU,KAE7B9C,EAAMljD,SAEgB,kBAAVkjD,EAGLuV,GAAevV,GAIf/F,GAAYga,GAAM,KAAMx3B,OAAOujB,GAE9C,CAEA,SAASuV,GAAevV,GACpB,OAAqB,OAAbA,EAAMjoC,KAAoC,IAArBioC,EAAM9E,WAC/B8E,EAAMsf,KACJtf,EACA3F,GAAW2F,EACrB,CACA,SAASke,GAAkB9pB,EAAOyG,GAC9B,IAAIntC,EAAO,EACX,MAAM,UAAEksC,GAAcxF,EACtB,GAAgB,MAAZyG,EACAA,EAAW,UAEV,IAAI,QAAQA,GACbntC,EAAO,QAEN,GAAwB,kBAAbmtC,EAAuB,CACnC,GAAgB,GAAZjB,EAAyE,CAEzE,MAAMkN,EAAOjM,EAASiF,QAOtB,YANIgH,IAEAA,EAAK95C,KAAO85C,EAAK75C,IAAK,GACtBixD,GAAkB9pB,EAAO0S,KACzBA,EAAK95C,KAAO85C,EAAK75C,IAAK,IAG9B,CACK,CACDS,EAAO,GACP,MAAM6xD,EAAW1kB,EAAS92C,EACrBw7D,GAAczS,MAAqBjS,EAGlB,IAAb0kB,GAA4CrnB,IAGR,IAArCA,EAAyBkB,MAAMr1C,EAC/B82C,EAAS92C,EAAI,GAGb82C,EAAS92C,EAAI,EACbqwC,EAAM8G,WAAa,OAVvBL,EAASqU,KAAOhX,CAaxB,CACJ,MACS,QAAW2C,IAChBA,EAAW,CAAEiF,QAASjF,EAAUqU,KAAMhX,GACtCxqC,EAAO,KAGPmtC,EAAWpe,OAAOoe,GAEF,GAAZjB,GACAlsC,EAAO,GACPmtC,EAAW,CAACikB,GAAgBjkB,KAG5BntC,EAAO,GAGf0mC,EAAMyG,SAAWA,EACjBzG,EAAMwF,WAAalsC,CACvB,CACA,SAASmxD,MAAcljE,GACnB,MAAMinD,EAAM,CAAC,EACb,IAAK,IAAIntD,EAAI,EAAGA,EAAIkG,EAAKjG,OAAQD,IAAK,CAClC,MAAM+pE,EAAU7jE,EAAKlG,GACrB,IAAK,MAAMuM,KAAOw9D,EACd,GAAY,UAARx9D,EACI4gD,EAAIoT,QAAUwJ,EAAQxJ,QACtBpT,EAAIoT,OAAQ,QAAe,CAACpT,EAAIoT,MAAOwJ,EAAQxJ,cAGlD,GAAY,UAARh0D,EACL4gD,EAAI1qC,OAAQ,QAAe,CAAC0qC,EAAI1qC,MAAOsnD,EAAQtnD,aAE9C,IAAI,QAAKlW,GAAM,CAChB,MAAM8vD,EAAWlP,EAAI5gD,GACfy9D,EAAWD,EAAQx9D,IACrBy9D,GACA3N,IAAa2N,IACX,QAAQ3N,IAAaA,EAAShiD,SAAS2vD,KACzC7c,EAAI5gD,GAAO8vD,EACL,GAAGn8D,OAAOm8D,EAAU2N,GACpBA,EAEd,KACiB,KAARz9D,IACL4gD,EAAI5gD,GAAOw9D,EAAQx9D,GAG/B,CACA,OAAO4gD,CACX,CACA,SAASuS,GAAgB1T,EAAM9jD,EAAUy2C,EAAOqG,EAAY,MACxDxG,EAA2BwN,EAAM9jD,EAAU,EAA+B,CACtEy2C,EACAqG,GAER,CAEA,MAAMilB,GAAkBlQ,KACxB,IAAImQ,GAAQ,EACZ,SAAS5I,GAAwB3iB,EAAO7K,EAAQsS,GAC5C,MAAMnuC,EAAO0mC,EAAM1mC,KAEbinC,GAAcpL,EAASA,EAAOoL,WAAaP,EAAMO,aAAe+qB,GAChE/hE,EAAW,CACb8L,IAAKk2D,KACLvrB,QACA1mC,OACA67B,SACAoL,aACAwF,KAAM,KACNtkC,KAAM,KACN4lC,QAAS,KACTvR,OAAQ,KACR8W,OAAQ,KACR3iC,MAAO,IAAI,MAAY,GACvBk7B,OAAQ,KACRnW,MAAO,KACPmoB,QAAS,KACTqU,YAAa,KACb1mB,UAAW,KACX+C,SAAU1S,EAASA,EAAO0S,SAAWlhD,OAAOK,OAAOu5C,EAAWsH,UAC9D6M,YAAa,KACbtP,YAAa,GAEboR,WAAY,KACZ7F,WAAY,KAEZ5L,aAAc4U,GAAsBrgD,EAAMinC,GAC1CwG,aAAc/D,EAAsB1pC,EAAMinC,GAE1C2E,KAAM,KACNnC,QAAS,KAET4V,cAAe,KAEfrT,aAAchsC,EAAKgsC,aAEnBhB,IAAK,KACL11B,KAAM,KACNxrB,MAAO,KACP6hD,MAAO,KACPD,MAAO,KACP6O,KAAM,KACNxO,WAAY,KACZomB,aAAc,KAEdhkB,WACA4e,WAAY5e,EAAWA,EAAS6e,UAAY,EAC5CxD,SAAU,KACVI,eAAe,EAGflZ,WAAW,EACXxH,aAAa,EACb8M,eAAe,EACfoc,GAAI,KACJ3jC,EAAG,KACH07B,GAAI,KACJ7L,EAAG,KACHyL,GAAI,KACJ36B,EAAG,KACH09B,GAAI,KACJD,IAAK,KACL/zB,GAAI,KACJzE,EAAG,KACHg+B,IAAK,KACLC,IAAK,KACLvrB,GAAI,KACJwrB,GAAI,MAcR,OARItiE,EAAS+6C,IAAM,CAAE30C,EAAGpG,GAExBA,EAASw8C,KAAO5Q,EAASA,EAAO4Q,KAAOx8C,EACvCA,EAAS27C,KAAO5C,EAAOjoC,KAAK,KAAM9Q,GAE9By2C,EAAM8rB,IACN9rB,EAAM8rB,GAAGviE,GAENA,CACX,CACA,IAAIq+C,GAAkB,KACtB,MAAM4D,GAAqB,IAAM5D,IAAmB9D,EAC9C6F,GAAsBpgD,IACxBq+C,GAAkBr+C,EAClBA,EAAS0gB,MAAMqrB,IAAI,EAEjBsU,GAAuB,KACzBhC,IAAmBA,GAAgB39B,MAAMsrB,MACzCqS,GAAkB,IAAI,EAS1B,SAASyL,GAAoB9pD,GACzB,OAAkC,EAA3BA,EAASy2C,MAAMwF,SAC1B,CACA,IAyHIumB,GACAC,GA1HA9iB,IAAwB,EAC5B,SAAS2Z,GAAet5D,EAAU41C,GAAQ,GACtC+J,GAAwB/J,EACxB,MAAM,MAAE/7C,EAAK,SAAEqjD,GAAal9C,EAASy2C,MAC/ByY,EAAapF,GAAoB9pD,GACvCivD,GAAUjvD,EAAUnG,EAAOq1D,EAAYtZ,GACvC6b,GAAUzxD,EAAUk9C,GACpB,MAAMwlB,EAAcxT,EACdyT,GAAuB3iE,EAAU41C,QACjC3gD,EAEN,OADA0qD,IAAwB,EACjB+iB,CACX,CACA,SAASC,GAAuB3iE,EAAU41C,GAEtC,MAAM0F,EAAYt7C,EAAS+P,KAwB3B/P,EAASmrD,YAAc/tD,OAAOK,OAAO,MAGrCuC,EAASylC,OAAQ,QAAQ,IAAIqO,MAAM9zC,EAAS+6C,IAAKmQ,KAKjD,MAAM,MAAElJ,GAAU1G,EAClB,GAAI0G,EAAO,CACP,MAAMkgB,EAAgBliE,EAASkiE,aAC3BlgB,EAAMjqD,OAAS,EAAI6qE,GAAmB5iE,GAAY,KACtDogD,GAAmBpgD,IACnB,UACA,MAAM0iE,EAActsB,EAAsB4L,EAAOhiD,EAAU,EAAmC,CAA6EA,EAASnG,MAAOqoE,IAG3L,IAFA,UACA7hB,MACI,QAAUqiB,GAAc,CAExB,GADAA,EAAYpqD,KAAK+nC,GAAsBA,IACnCzK,EAEA,OAAO8sB,EACFpqD,MAAMuqD,IACPC,GAAkB9iE,EAAU6iE,EAAgBjtB,EAAM,IAEjDrzB,OAAMrlB,IACPm5C,EAAYn5C,EAAG8C,EAAU,EAAkC,IAM/DA,EAASu5D,SAAWmJ,CAS5B,MAEII,GAAkB9iE,EAAU0iE,EAAa9sB,EAEjD,MAEImtB,GAAqB/iE,EAAU41C,EAEvC,CACA,SAASktB,GAAkB9iE,EAAU0iE,EAAa9sB,IAC1C,QAAW8sB,GAEP1iE,EAAS+P,KAAKizD,kBAGdhjE,EAASijE,UAAYP,EAGrB1iE,EAAS47C,OAAS8mB,GAGjB,QAASA,KAUd1iE,EAAS87C,YAAa,QAAU4mB,IAQpCK,GAAqB/iE,EAAU41C,EACnC,CAiBA,SAASmtB,GAAqB/iE,EAAU41C,EAAOstB,GAC3C,MAAM5nB,EAAYt7C,EAAS+P,KAG3B,IAAK/P,EAAS47C,OAAQ,CAGlB,IAAKhG,GAAS4sB,KAAYlnB,EAAUM,OAAQ,CACxC,MAAM9X,EAAWwX,EAAUxX,UACvB6mB,GAAqB3qD,GAAU8jC,SACnC,GAAIA,EAAU,CACN,EAGJ,MAAM,gBAAEq/B,EAAe,gBAAEjR,GAAoBlyD,EAASg3C,WAAWv0C,QAC3D,WAAE2gE,EAAYlR,gBAAiBmR,GAA6B/nB,EAC5DgoB,GAAuB,SAAO,QAAO,CACvCH,kBACAC,cACDlR,GAAkBmR,GACrB/nB,EAAUM,OAAS4mB,GAAQ1+B,EAAUw/B,EAIzC,CACJ,CACAtjE,EAAS47C,OAAUN,EAAUM,QAAU,KAInC6mB,IACAA,GAAiBziE,EAEzB,CAGIogD,GAAmBpgD,IACnB,UACA4rD,GAAa5rD,IACb,UACAqgD,IAgBR,CACA,SAASkjB,GAAiBvjE,GACtB,OAAO,IAAI8zC,MAAM9zC,EAAS07C,MAgBpB,CACE9+C,IAAI6tB,EAAQpmB,GAER,OADA,OAAMrE,EAAU,MAA8B,UACvCyqB,EAAOpmB,EAClB,GAEZ,CACA,SAASu+D,GAAmB5iE,GACxB,MAAMgtD,EAASY,IAIX5tD,EAAS4tD,QAAUA,GAAW,CAAC,CAAC,EAEpC,IAAIlS,EAkBA,MAAO,CACCA,YACA,OAAOA,IAAUA,EAAQ6nB,GAAiBvjE,GAC9C,EACAy7C,MAAOz7C,EAASy7C,MAChBE,KAAM37C,EAAS27C,KACfqR,SAGZ,CACA,SAAS1F,GAAetnD,GACpB,GAAIA,EAAS4tD,QACT,OAAQ5tD,EAASiiE,cACZjiE,EAASiiE,YAAc,IAAInuB,OAAM,SAAU,QAAQ9zC,EAAS4tD,UAAW,CACpEhxD,IAAI6tB,EAAQpmB,GACR,OAAIA,KAAOomB,EACAA,EAAOpmB,GAETA,KAAO0lD,GACLA,GAAoB1lD,GAAKrE,QAD/B,CAGT,EACA3H,IAAIoyB,EAAQpmB,GACR,OAAOA,KAAOomB,GAAUpmB,KAAO0lD,EACnC,IAGhB,CAGA,SAASrB,GAAiBpN,EAAWkoB,GAAkB,GACnD,OAAO,QAAWloB,GACZA,EAAUtvC,aAAesvC,EAAUr8C,KACnCq8C,EAAUr8C,MAASukE,GAAmBloB,EAAUmoB,MAC1D,CAyBA,SAAS9C,GAAiB1wD,GACtB,OAAO,QAAWA,IAAU,cAAeA,CAC/C,CAEA,MAAM6+B,GAAW,CAAEiH,EAAiBC,KAEzB,QAAWD,EAAiBC,EAAc2J,IA0IrD,SAAS+jB,GAAiBC,GACtB,MAAM5oB,EAAMkH,KAKZ,IAAI2hB,EAAYD,IAQhB,OAPAtjB,MACI,QAAUujB,KACVA,EAAYA,EAAUrhD,OAAMrlB,IAExB,MADAkjD,GAAmBrF,GACb79C,CAAC,KAGR,CAAC0mE,EAAW,IAAMxjB,GAAmBrF,GAChD,CAGA,SAASgT,GAAEh+C,EAAM8zD,EAAiB3mB,GAC9B,MAAM/Q,EAAI7uB,UAAUvlB,OACpB,OAAU,IAANo0C,GACI,QAAS03B,MAAqB,QAAQA,GAElCja,GAAQia,GACDvnB,GAAYvsC,EAAM,KAAM,CAAC8zD,IAG7BvnB,GAAYvsC,EAAM8zD,GAIlBvnB,GAAYvsC,EAAM,KAAM8zD,IAI/B13B,EAAI,EACJ+Q,EAAWp8C,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,GAEtC,IAAN6uB,GAAWyd,GAAQ1M,KACxBA,EAAW,CAACA,IAETZ,GAAYvsC,EAAM8zD,EAAiB3mB,GAElD,CAEA,MAAM4mB,GAAgBt2B,OAAgE,IAChFoS,GAAgB,KAClB,CACI,MAAM7E,EAAMyD,EAAOslB,IAMnB,OAAO/oB,CACX,GAgOJ,MAAMliD,GAAU,Q,4SCzuPhB,MAAMkrE,EAAQ,6BACRC,EAA2B,qBAAbhxD,SAA2BA,SAAW,KACpDixD,EAAoBD,GAAqBA,EAAI3pD,cAAc,YAC3D6pD,EAAU,CACZzP,OAAQ,CAACpS,EAAOzW,EAAQsqB,KACpBtqB,EAAOu4B,aAAa9hB,EAAO6T,GAAU,KAAK,EAE9CxR,OAAQrC,IACJ,MAAMzW,EAASyW,EAAMkT,WACjB3pB,GACAA,EAAOw4B,YAAY/hB,EACvB,EAEJhoC,cAAe,CAACgqD,EAAKhR,EAAO+D,EAAIv9D,KAC5B,MAAMugB,EAAKi5C,EACL2Q,EAAIM,gBAAgBP,EAAOM,GAC3BL,EAAI3pD,cAAcgqD,EAAKjN,EAAK,CAAEA,WAAOniE,GAI3C,MAHY,WAARovE,GAAoBxqE,GAA2B,MAAlBA,EAAM0qE,UACnCnqD,EAAGwV,aAAa,WAAY/1B,EAAM0qE,UAE/BnqD,CAAE,EAEb26C,WAAYqM,GAAQ4C,EAAIQ,eAAepD,GACvCnM,cAAemM,GAAQ4C,EAAI/O,cAAcmM,GACzCjM,QAAS,CAAC4J,EAAMqC,KACZrC,EAAK0F,UAAYrD,CAAI,EAEzB/L,eAAgB,CAACj7C,EAAIgnD,KACjBhnD,EAAGsqD,YAActD,CAAI,EAEzB7L,WAAYwJ,GAAQA,EAAKxJ,WACzBE,YAAasJ,GAAQA,EAAKtJ,YAC1B2I,cAAeuG,GAAYX,EAAI5F,cAAcuG,GAC7ChP,WAAWv7C,EAAInC,GACXmC,EAAGwV,aAAa3X,EAAI,GACxB,EAKA49C,oBAAoB0L,EAAS31B,EAAQsqB,EAAQ7C,EAAOnoC,EAAO2sB,GAEvD,MAAM+sB,EAAS1O,EAASA,EAAO2O,gBAAkBj5B,EAAOk5B,UAIxD,GAAI55C,IAAUA,IAAU2sB,GAAO3sB,EAAMuqC,cAEjC,MAAO,EAEH,GADA7pB,EAAOu4B,aAAaj5C,EAAM65C,WAAU,GAAO7O,GACvChrC,IAAU2sB,KAAS3sB,EAAQA,EAAMuqC,aACjC,UAGP,CAEDwO,EAAkBe,UAAY3R,EAAQ,QAAQkO,UAAkBA,EAChE,MAAMz9B,EAAWmgC,EAAkB1C,QACnC,GAAIlO,EAAO,CAEP,MAAM4R,EAAUnhC,EAASq7B,WACzB,MAAO8F,EAAQ9F,WACXr7B,EAASzoB,YAAY4pD,EAAQ9F,YAEjCr7B,EAASsgC,YAAYa,EACzB,CACAr5B,EAAOu4B,aAAargC,EAAUoyB,EAClC,CACA,MAAO,CAEH0O,EAASA,EAAOnP,YAAc7pB,EAAOuzB,WAErCjJ,EAASA,EAAO2O,gBAAkBj5B,EAAOk5B,UAEjD,GAKJ,SAASI,EAAW9qD,EAAInK,EAAOojD,GAI3B,MAAM8R,EAAoB/qD,EAAGgrD,KACzBD,IACAl1D,GAASA,EAAQ,CAACA,KAAUk1D,GAAqB,IAAIA,IAAoBzxD,KAAK,MAErE,MAATzD,EACAmK,EAAGirD,gBAAgB,SAEdhS,EACLj5C,EAAGwV,aAAa,QAAS3f,GAGzBmK,EAAGkrD,UAAYr1D,CAEvB,CAEA,SAASs1D,EAAWnrD,EAAIsgC,EAAMxiC,GAC1B,MAAMqC,EAAQH,EAAGG,MACXirD,GAAc,QAASttD,GAC7B,GAAIA,IAASstD,EAAa,CACtB,IAAK,MAAMnhE,KAAO6T,EACdutD,EAASlrD,EAAOlW,EAAK6T,EAAK7T,IAE9B,GAAIq2C,KAAS,QAASA,GAClB,IAAK,MAAMr2C,KAAOq2C,EACG,MAAbxiC,EAAK7T,IACLohE,EAASlrD,EAAOlW,EAAK,GAIrC,KACK,CACD,MAAMqhE,EAAiBnrD,EAAMorD,QACzBH,EACI9qB,IAASxiC,IACTqC,EAAMqrD,QAAU1tD,GAGfwiC,GACLtgC,EAAGirD,gBAAgB,SAKnB,SAAUjrD,IACVG,EAAMorD,QAAUD,EAExB,CACJ,CACA,MACMG,EAAc,iBACpB,SAASJ,EAASlrD,EAAOtb,EAAMsrC,GAC3B,IAAI,QAAQA,GACRA,EAAIpV,SAAQO,GAAK+vC,EAASlrD,EAAOtb,EAAMy2B,UAUvC,GAPW,MAAP6U,IACAA,EAAM,IAMNtrC,EAAK4D,WAAW,MAEhB0X,EAAMurD,YAAY7mE,EAAMsrC,OAEvB,CACD,MAAMw7B,EAAWC,EAAWzrD,EAAOtb,GAC/B4mE,EAAY5rE,KAAKswC,GAEjBhwB,EAAMurD,aAAY,QAAUC,GAAWx7B,EAAIzxC,QAAQ+sE,EAAa,IAAK,aAGrEtrD,EAAMwrD,GAAYx7B,CAE1B,CAER,CACA,MAAM07B,EAAW,CAAC,SAAU,MAAO,MAC7BC,EAAc,CAAC,EACrB,SAASF,EAAWzrD,EAAO4rD,GACvB,MAAMrsB,EAASosB,EAAYC,GAC3B,GAAIrsB,EACA,OAAOA,EAEX,IAAI76C,GAAO,QAASknE,GACpB,GAAa,WAATlnE,GAAqBA,KAAQsb,EAC7B,OAAQ2rD,EAAYC,GAAWlnE,EAEnCA,GAAO,QAAWA,GAClB,IAAK,IAAInH,EAAI,EAAGA,EAAImuE,EAASluE,OAAQD,IAAK,CACtC,MAAMiuE,EAAWE,EAASnuE,GAAKmH,EAC/B,GAAI8mE,KAAYxrD,EACZ,OAAQ2rD,EAAYC,GAAWJ,CAEvC,CACA,OAAOI,CACX,CAEA,MAAMC,EAAU,+BAChB,SAASC,EAAUjsD,EAAI/V,EAAK4L,EAAOojD,EAAOrzD,GACtC,GAAIqzD,GAAShvD,EAAIxB,WAAW,UACX,MAAToN,EACAmK,EAAGksD,kBAAkBF,EAAS/hE,EAAIlF,MAAM,EAAGkF,EAAItM,SAG/CqiB,EAAGmsD,eAAeH,EAAS/hE,EAAK4L,OAGnC,CAGD,MAAMu2D,GAAY,QAAqBniE,GAC1B,MAAT4L,GAAkBu2D,KAAc,QAAmBv2D,GACnDmK,EAAGirD,gBAAgBhhE,GAGnB+V,EAAGwV,aAAavrB,EAAKmiE,EAAY,GAAKv2D,EAE9C,CACJ,CAIA,SAASw2D,EAAarsD,EAAI/V,EAAK4L,EAI/BktC,EAAcgZ,EAAiBxC,EAAgB2D,GAC3C,GAAY,cAARjzD,GAA+B,gBAARA,EAKvB,OAJI84C,GACAma,EAAgBna,EAAcgZ,EAAiBxC,QAEnDv5C,EAAG/V,GAAgB,MAAT4L,EAAgB,GAAKA,GAGnC,GAAY,UAAR5L,GACe,aAAf+V,EAAGssD,UAEFtsD,EAAGssD,QAAQv0D,SAAS,KAAM,CAG3BiI,EAAG06B,OAAS7kC,EACZ,MAAMkX,EAAoB,MAATlX,EAAgB,GAAKA,EAWtC,OAVImK,EAAGnK,QAAUkX,GAIE,WAAf/M,EAAGssD,UACHtsD,EAAGnK,MAAQkX,QAEF,MAATlX,GACAmK,EAAGirD,gBAAgBhhE,GAG3B,CACA,IAAIsiE,GAAa,EACjB,GAAc,KAAV12D,GAAyB,MAATA,EAAe,CAC/B,MAAMF,SAAcqK,EAAG/V,GACV,YAAT0L,EAEAE,GAAQ,QAAmBA,GAEb,MAATA,GAA0B,WAATF,GAEtBE,EAAQ,GACR02D,GAAa,GAEC,WAAT52D,IAELE,EAAQ,EACR02D,GAAa,EAErB,CAIA,IACIvsD,EAAG/V,GAAO4L,CAQd,CANA,MAAO/S,GAEC,CAIR,CACAypE,GAAcvsD,EAAGirD,gBAAgBhhE,EACrC,CAEA,SAASoX,EAAiBrB,EAAIqM,EAAOqD,EAASppB,GAC1C0Z,EAAGqB,iBAAiBgL,EAAOqD,EAASppB,EACxC,CACA,SAASwnB,EAAoB9N,EAAIqM,EAAOqD,EAASppB,GAC7C0Z,EAAG8N,oBAAoBzB,EAAOqD,EAASppB,EAC3C,CACA,SAASkmE,EAAWxsD,EAAI+rD,EAASU,EAAWC,EAAW9mE,EAAW,MAE9D,MAAM+mE,EAAW3sD,EAAG4sD,OAAS5sD,EAAG4sD,KAAO,CAAC,GAClCC,EAAkBF,EAASZ,GACjC,GAAIW,GAAaG,EAEbA,EAAgBh3D,MAAQ62D,MAEvB,CACD,MAAO7nE,EAAMyB,GAAWwmE,EAAUf,GAClC,GAAIW,EAAW,CAEX,MAAMK,EAAWJ,EAASZ,GAAWiB,EAAcN,EAAW9mE,GAC9Dyb,EAAiBrB,EAAInb,EAAMkoE,EAASzmE,EACxC,MACSumE,IAEL/+C,EAAoB9N,EAAInb,EAAMgoE,EAAiBvmE,GAC/CqmE,EAASZ,QAAWlxE,EAE5B,CACJ,CACA,MAAMoyE,EAAoB,4BAC1B,SAASH,EAAUjoE,GACf,IAAIyB,EACJ,GAAI2mE,EAAkBptE,KAAKgF,GAAO,CAE9B,IAAIovD,EADJ3tD,EAAU,CAAC,EAEX,MAAQ2tD,EAAIpvD,EAAKtF,MAAM0tE,GACnBpoE,EAAOA,EAAKE,MAAM,EAAGF,EAAKlH,OAASs2D,EAAE,GAAGt2D,QACxC2I,EAAQ2tD,EAAE,GAAG11D,gBAAiB,CAEtC,CACA,MAAM8tB,EAAoB,MAAZxnB,EAAK,GAAaA,EAAKE,MAAM,IAAK,QAAUF,EAAKE,MAAM,IACrE,MAAO,CAACsnB,EAAO/lB,EACnB,CAGA,IAAI4mE,EAAY,EAChB,MAAM9tE,EAAkB0L,QAAQ8O,UAC1BuzD,EAAS,IAAMD,IAAc9tE,EAAE8e,MAAK,IAAOgvD,EAAY,IAAMA,EAAYpgE,KAAKiD,OACpF,SAASi9D,EAAcI,EAAcxnE,GACjC,MAAMmnE,EAAWjqE,IAab,GAAKA,EAAEuqE,MAGF,GAAIvqE,EAAEuqE,MAAQN,EAAQO,SACvB,YAHAxqE,EAAEuqE,KAAOvgE,KAAKiD,OAKlB,QAA2Bw9D,EAA8BzqE,EAAGiqE,EAAQl3D,OAAQjQ,EAAU,EAAyC,CAAC9C,GAAG,EAIvI,OAFAiqE,EAAQl3D,MAAQu3D,EAChBL,EAAQO,SAAWH,IACZJ,CACX,CACA,SAASQ,EAA8BzqE,EAAG+S,GACtC,IAAI,QAAQA,GAAQ,CAChB,MAAM23D,EAAe1qE,EAAE2qE,yBAKvB,OAJA3qE,EAAE2qE,yBAA2B,KACzBD,EAAa5tE,KAAKkD,GAClBA,EAAE4qE,UAAW,CAAI,EAEd73D,EAAM9V,KAAIqsC,GAAOtpC,IAAOA,EAAE4qE,UAAYthC,GAAMA,EAAGtpC,IAC1D,CAEI,OAAO+S,CAEf,CAEA,MAAM83D,EAAa,WACbnT,EAAY,CAACx6C,EAAI/V,EAAKwiE,EAAWC,EAAWzT,GAAQ,EAAOlW,EAAcgZ,EAAiBxC,EAAgB2D,KAChG,UAARjzD,EACA6gE,EAAW9qD,EAAI0sD,EAAWzT,GAEb,UAARhvD,EACLkhE,EAAWnrD,EAAIysD,EAAWC,IAErB,QAAKziE,IAEL,QAAgBA,IACjBuiE,EAAWxsD,EAAI/V,EAAKwiE,EAAWC,EAAW3Q,IAG9B,MAAX9xD,EAAI,IACLA,EAAMA,EAAIlF,MAAM,GAAK,GACZ,MAAXkF,EAAI,IACEA,EAAMA,EAAIlF,MAAM,GAAK,GACvB6oE,EAAgB5tD,EAAI/V,EAAKyiE,EAAWzT,IAC1CoT,EAAarsD,EAAI/V,EAAKyiE,EAAW3pB,EAAcgZ,EAAiBxC,EAAgB2D,IAOpE,eAARjzD,EACA+V,EAAG6tD,WAAanB,EAEH,gBAARziE,IACL+V,EAAG8tD,YAAcpB,GAErBT,EAAUjsD,EAAI/V,EAAKyiE,EAAWzT,GAClC,EAEJ,SAAS2U,EAAgB5tD,EAAI/V,EAAK4L,EAAOojD,GACrC,OAAIA,EAGY,cAARhvD,GAA+B,gBAARA,MAIvBA,KAAO+V,GAAM2tD,EAAW9tE,KAAKoK,KAAQ,QAAW4L,IAW5C,eAAR5L,GAAgC,cAARA,GAA+B,cAARA,IAKvC,SAARA,KAIQ,SAARA,GAAiC,UAAf+V,EAAGssD,YAIb,SAARriE,GAAiC,aAAf+V,EAAGssD,aAIrBqB,EAAW9tE,KAAKoK,MAAQ,QAAS4L,KAG9B5L,KAAO+V,KAClB,CAgB0C,qBAAhB+tD,aAA8BA,YAsTxD,MAAMC,EAAa,aACbC,EAAY,YAGZC,EAAa,CAACzuE,GAAS4hD,YAAY,IAAAsS,GAAE,KAAgBwa,EAAuB1uE,GAAQ4hD,GAC1F6sB,EAAWt8D,YAAc,aACzB,MAAMw8D,EAA+B,CACjCvpE,KAAM6/B,OACN/uB,KAAM+uB,OACN2pC,IAAK,CACD14D,KAAMmxC,QACNiB,SAAS,GAEbumB,SAAU,CAAC5pC,OAAQ33B,OAAQ/J,QAC3BurE,eAAgB7pC,OAChB8pC,iBAAkB9pC,OAClB+pC,aAAc/pC,OACdgqC,gBAAiBhqC,OACjBiqC,kBAAmBjqC,OACnBkqC,cAAelqC,OACfmqC,eAAgBnqC,OAChBoqC,iBAAkBpqC,OAClBqqC,aAAcrqC,QAQZ+kB,GAN6BykB,EAAWzuE,OAC5B,QAAO,CAAC,EAAG,KAAeA,MAAO2uE,GAKlC,CAAC1kB,EAAM9lD,EAAO,OACvB,QAAQ8lD,GACRA,EAAK3uB,SAAQ44B,GAAKA,KAAK/vD,KAElB8lD,GACLA,KAAQ9lD,EACZ,GAMEorE,EAAuBtlB,KAClBA,KACD,QAAQA,GACJA,EAAKl3C,MAAKmhD,GAAKA,EAAEh2D,OAAS,IAC1B+rD,EAAK/rD,OAAS,GAG5B,SAASwwE,EAAuBhmB,GAC5B,MAAM8mB,EAAY,CAAC,EACnB,IAAK,MAAMhlE,KAAOk+C,EACRl+C,KAAOmkE,IACTa,EAAUhlE,GAAOk+C,EAASl+C,IAGlC,IAAqB,IAAjBk+C,EAASkmB,IACT,OAAOY,EAEX,MAAM,KAAEpqE,EAAO,IAAG,KAAE8Q,EAAI,SAAE24D,EAAQ,eAAEC,EAAiB,GAAG1pE,eAAiB,iBAAE2pE,EAAmB,GAAG3pE,iBAAmB,aAAE4pE,EAAe,GAAG5pE,aAAe,gBAAE6pE,EAAkBH,EAAc,kBAAEI,EAAoBH,EAAgB,cAAEI,EAAgBH,EAAY,eAAEI,EAAiB,GAAGhqE,eAAiB,iBAAEiqE,EAAmB,GAAGjqE,iBAAmB,aAAEkqE,EAAe,GAAGlqE,cAAoBsjD,EACjX+mB,EAAYC,EAAkBb,GAC9Bc,EAAgBF,GAAaA,EAAU,GACvCG,EAAgBH,GAAaA,EAAU,IACvC,cAAEloB,EAAa,QAAEC,EAAO,iBAAEE,EAAgB,QAAEE,EAAO,iBAAEE,EAAgB,eAAEC,EAAiBR,EAAa,SAAES,EAAWR,EAAO,kBAAEU,EAAoBR,GAAqB8nB,EACpKK,EAAc,CAACtvD,EAAIuvD,EAAUp3B,KAC/Bq3B,EAAsBxvD,EAAIuvD,EAAWX,EAAgBH,GACrDe,EAAsBxvD,EAAIuvD,EAAWZ,EAAoBH,GACzDr2B,GAAQA,GAAM,EAEZs3B,EAAc,CAACzvD,EAAIm4B,KACrBn4B,EAAG0vD,YAAa,EAChBF,EAAsBxvD,EAAI6uD,GAC1BW,EAAsBxvD,EAAI+uD,GAC1BS,EAAsBxvD,EAAI8uD,GAC1B32B,GAAQA,GAAM,EAEZw3B,EAAiBJ,GACZ,CAACvvD,EAAIm4B,KACR,MAAMuR,EAAO6lB,EAAW9nB,EAAWR,EAC7BrtC,EAAU,IAAM01D,EAAYtvD,EAAIuvD,EAAUp3B,GAChDsR,EAASC,EAAM,CAAC1pC,EAAIpG,IACpBg2D,GAAU,KACNJ,EAAsBxvD,EAAIuvD,EAAWb,EAAkBH,GACvDsB,EAAmB7vD,EAAIuvD,EAAWX,EAAgBH,GAC7CO,EAAoBtlB,IACrBomB,EAAmB9vD,EAAIrK,EAAMy5D,EAAex1D,EAChD,GACF,EAGV,OAAO,QAAOq1D,EAAW,CACrBjoB,cAAchnC,GACVypC,EAASzC,EAAe,CAAChnC,IACzB6vD,EAAmB7vD,EAAIuuD,GACvBsB,EAAmB7vD,EAAIwuD,EAC3B,EACAhnB,eAAexnC,GACXypC,EAASjC,EAAgB,CAACxnC,IAC1B6vD,EAAmB7vD,EAAI0uD,GACvBmB,EAAmB7vD,EAAI2uD,EAC3B,EACA1nB,QAAS0oB,GAAc,GACvBloB,SAAUkoB,GAAc,GACxBtoB,QAAQrnC,EAAIm4B,GACRn4B,EAAG0vD,YAAa,EAChB,MAAM91D,EAAU,IAAM61D,EAAYzvD,EAAIm4B,GACtC03B,EAAmB7vD,EAAI6uD,GAEvBkB,IACAF,EAAmB7vD,EAAI8uD,GACvBc,GAAU,KACD5vD,EAAG0vD,aAIRF,EAAsBxvD,EAAI6uD,GAC1BgB,EAAmB7vD,EAAI+uD,GAClBC,EAAoB3nB,IACrByoB,EAAmB9vD,EAAIrK,EAAM05D,EAAez1D,GAChD,IAEJ6vC,EAASpC,EAAS,CAACrnC,EAAIpG,GAC3B,EACAutC,iBAAiBnnC,GACbsvD,EAAYtvD,GAAI,GAChBypC,EAAStC,EAAkB,CAACnnC,GAChC,EACA2nC,kBAAkB3nC,GACdsvD,EAAYtvD,GAAI,GAChBypC,EAAS9B,EAAmB,CAAC3nC,GACjC,EACAunC,iBAAiBvnC,GACbyvD,EAAYzvD,GACZypC,EAASlC,EAAkB,CAACvnC,GAChC,GAER,CACA,SAASmvD,EAAkBb,GACvB,GAAgB,MAAZA,EACA,OAAO,KAEN,IAAI,QAASA,GACd,MAAO,CAAC0B,EAAS1B,EAASvkB,OAAQimB,EAAS1B,EAASjkB,QAEnD,CACD,MAAM53C,EAAIu9D,EAAS1B,GACnB,MAAO,CAAC77D,EAAGA,EACf,CACJ,CACA,SAASu9D,EAAS7/B,GACd,MAAMoF,GAAM,QAASpF,GAGrB,OAAOoF,CACX,CAWA,SAASs6B,EAAmB7vD,EAAIta,GAC5BA,EAAI/G,MAAM,OAAOo8B,SAAQqJ,GAAKA,GAAKpkB,EAAGe,UAAUC,IAAIojB,MACnDpkB,EAAGgrD,OACChrD,EAAGgrD,KAAO,IAAIj9C,MAAQ/M,IAAItb,EACnC,CACA,SAAS8pE,EAAsBxvD,EAAIta,GAC/BA,EAAI/G,MAAM,OAAOo8B,SAAQqJ,GAAKA,GAAKpkB,EAAGe,UAAUupC,OAAOlmB,KACvD,MAAM,KAAE4mC,GAAShrD,EACbgrD,IACAA,EAAK3zD,OAAO3R,GACPslE,EAAKh9C,OACNhO,EAAGgrD,UAAOnwE,GAGtB,CACA,SAAS+0E,EAAU3xD,GACfgyD,uBAAsB,KAClBA,sBAAsBhyD,EAAG,GAEjC,CACA,IAAIiyD,EAAQ,EACZ,SAASJ,EAAmB9vD,EAAImwD,EAAcC,EAAiBx2D,GAC3D,MAAMiE,EAAMmC,EAAGqwD,SAAWH,EACpBI,EAAoB,KAClBzyD,IAAOmC,EAAGqwD,QACVz2D,GACJ,EAEJ,GAAIw2D,EACA,OAAOlkE,WAAWokE,EAAmBF,GAEzC,MAAM,KAAEz6D,EAAI,QAAEgb,EAAO,UAAE4/C,GAAcC,EAAkBxwD,EAAImwD,GAC3D,IAAKx6D,EACD,OAAOiE,IAEX,MAAM62D,EAAW96D,EAAO,MACxB,IAAI+6D,EAAQ,EACZ,MAAMjzB,EAAM,KACRz9B,EAAG8N,oBAAoB2iD,EAAUE,GACjCL,GAAmB,EAEjBK,EAAS7tE,IACPA,EAAEutB,SAAWrQ,KAAQ0wD,GAASH,GAC9B9yB,GACJ,EAEJvxC,YAAW,KACHwkE,EAAQH,GACR9yB,GACJ,GACD9sB,EAAU,GACb3Q,EAAGqB,iBAAiBovD,EAAUE,EAClC,CACA,SAASH,EAAkBxwD,EAAImwD,GAC3B,MAAMS,EAASh2E,OAAOi2E,iBAAiB7wD,GAEjC8wD,EAAsB7mE,IAAS2mE,EAAO3mE,IAAQ,IAAItL,MAAM,MACxDoyE,EAAmBD,EAAmB,GAAG9C,UACzCgD,EAAsBF,EAAmB,GAAG9C,aAC5CiD,EAAoBC,EAAWH,EAAkBC,GACjDG,EAAkBL,EAAmB,GAAG7C,UACxCmD,EAAqBN,EAAmB,GAAG7C,aAC3CoD,EAAmBH,EAAWC,EAAiBC,GACrD,IAAIz7D,EAAO,KACPgb,EAAU,EACV4/C,EAAY,EAEZJ,IAAiBnC,EACbiD,EAAoB,IACpBt7D,EAAOq4D,EACPr9C,EAAUsgD,EACVV,EAAYS,EAAoBrzE,QAG/BwyE,IAAiBlC,EAClBoD,EAAmB,IACnB17D,EAAOs4D,EACPt9C,EAAU0gD,EACVd,EAAYa,EAAmBzzE,SAInCgzB,EAAUzoB,KAAK8H,IAAIihE,EAAmBI,GACtC17D,EACIgb,EAAU,EACJsgD,EAAoBI,EAChBrD,EACAC,EACJ,KACVsC,EAAY56D,EACNA,IAASq4D,EACLgD,EAAoBrzE,OACpByzE,EAAmBzzE,OACvB,GAEV,MAAM2zE,EAAe37D,IAASq4D,GAC1B,yBAAyBnuE,KAAKixE,EAAmB,GAAG9C,aAAsBr/D,YAC9E,MAAO,CACHgH,OACAgb,UACA4/C,YACAe,eAER,CACA,SAASJ,EAAWK,EAAQrC,GACxB,MAAOqC,EAAO5zE,OAASuxE,EAAUvxE,OAC7B4zE,EAASA,EAAO3zE,OAAO2zE,GAE3B,OAAOrpE,KAAK8H,OAAOk/D,EAAUnvE,KAAI,CAACyxE,EAAG9zE,IAAM+zE,EAAKD,GAAKC,EAAKF,EAAO7zE,MACrE,CAKA,SAAS+zE,EAAK5uE,GACV,OAAkD,IAA3CkK,OAAOlK,EAAEkC,MAAM,GAAI,GAAGrG,QAAQ,IAAK,KAC9C,CAEA,SAASqxE,IACL,OAAOn3D,SAAShP,KAAK8nE,YACzB,CAEoB,IAAIjmD,QACD,IAAIA,QAsH3B,MAAMkmD,EAAoBt1B,IACtB,MAAMjQ,EAAKiQ,EAAM58C,MAAM,yBACnB,EACJ,OAAO,QAAQ2sC,GAAMv2B,IAAS,QAAeu2B,EAAIv2B,GAASu2B,CAAE,EAEhE,SAASwlC,EAAmB9uE,GACxBA,EAAEutB,OAAOwhD,WAAY,CACzB,CACA,SAASC,EAAiBhvE,GACtB,MAAMutB,EAASvtB,EAAEutB,OACbA,EAAOwhD,YACPxhD,EAAOwhD,WAAY,EACnBxhD,EAAOoQ,cAAc,IAAIsxC,MAAM,UAEvC,CAGA,MAAMC,EAAa,CACfjgB,QAAQ/xC,GAAMstC,WAAW,KAAE2kB,EAAI,KAAErzE,EAAI,OAAEqgD,IAAY5C,GAC/Cr8B,EAAGjM,QAAU49D,EAAiBt1B,GAC9B,MAAM61B,EAAejzB,GAAW5C,EAAM58C,OAA8B,WAArB48C,EAAM58C,MAAMkW,KAC3D0L,EAAiBrB,EAAIiyD,EAAO,SAAW,SAASnvE,IAC5C,GAAIA,EAAEutB,OAAOwhD,UACT,OACJ,IAAIM,EAAWnyD,EAAGnK,MACdjX,IACAuzE,EAAWA,EAASvzE,QAEpBszE,IACAC,GAAW,QAASA,IAExBnyD,EAAGjM,QAAQo+D,EAAS,IAEpBvzE,GACAyiB,EAAiBrB,EAAI,UAAU,KAC3BA,EAAGnK,MAAQmK,EAAGnK,MAAMjX,MAAM,IAG7BqzE,IACD5wD,EAAiBrB,EAAI,mBAAoB4xD,GACzCvwD,EAAiBrB,EAAI,iBAAkB8xD,GAKvCzwD,EAAiBrB,EAAI,SAAU8xD,GAEvC,EAEAvkB,QAAQvtC,GAAI,MAAEnK,IACVmK,EAAGnK,MAAiB,MAATA,EAAgB,GAAKA,CACpC,EACAo8C,aAAajyC,GAAI,MAAEnK,EAAOy3C,WAAW,KAAE2kB,EAAI,KAAErzE,EAAI,OAAEqgD,IAAY5C,GAG3D,GAFAr8B,EAAGjM,QAAU49D,EAAiBt1B,GAE1Br8B,EAAG6xD,UACH,OACJ,GAAIj5D,SAASw5D,gBAAkBpyD,GAAkB,UAAZA,EAAGrK,KAAkB,CACtD,GAAIs8D,EACA,OAEJ,GAAIrzE,GAAQohB,EAAGnK,MAAMjX,SAAWiX,EAC5B,OAEJ,IAAKopC,GAAsB,WAAZj/B,EAAGrK,QAAsB,QAASqK,EAAGnK,SAAWA,EAC3D,MAER,CACA,MAAMkX,EAAoB,MAATlX,EAAgB,GAAKA,EAClCmK,EAAGnK,QAAUkX,IACb/M,EAAGnK,MAAQkX,EAEnB,GAEEslD,GAAiB,CAEnBztB,MAAM,EACNmN,QAAQ/xC,EAAIhU,EAAGqwC,GACXr8B,EAAGjM,QAAU49D,EAAiBt1B,GAC9Bh7B,EAAiBrB,EAAI,UAAU,KAC3B,MAAMsyD,EAAatyD,EAAGuyD,YAChBC,EAAeC,GAASzyD,GACxB0yD,EAAU1yD,EAAG0yD,QACbhuE,EAASsb,EAAGjM,QAClB,IAAI,QAAQu+D,GAAa,CACrB,MAAMx4D,GAAQ,QAAaw4D,EAAYE,GACjCG,GAAmB,IAAX74D,EACd,GAAI44D,IAAYC,EACZjuE,EAAO4tE,EAAW10E,OAAO40E,SAExB,IAAKE,GAAWC,EAAO,CACxB,MAAMC,EAAW,IAAIN,GACrBM,EAAS70B,OAAOjkC,EAAO,GACvBpV,EAAOkuE,EACX,CACJ,MACK,IAAI,QAAMN,GAAa,CACxB,MAAMhM,EAAS,IAAIv4C,IAAIukD,GACnBI,EACApM,EAAOtlD,IAAIwxD,GAGXlM,EAAOjvD,OAAOm7D,GAElB9tE,EAAO4hE,EACX,MAEI5hE,EAAOmuE,GAAiB7yD,EAAI0yD,GAChC,GAER,EAEAnlB,QAASulB,GACT7gB,aAAajyC,EAAI2tC,EAAStR,GACtBr8B,EAAGjM,QAAU49D,EAAiBt1B,GAC9By2B,GAAW9yD,EAAI2tC,EAAStR,EAC5B,GAEJ,SAASy2B,GAAW9yD,GAAI,MAAEnK,EAAK,SAAEmX,GAAYqvB,GACzCr8B,EAAGuyD,YAAc18D,GACb,QAAQA,GACRmK,EAAG0yD,SAAU,QAAa78D,EAAOwmC,EAAM58C,MAAMoW,QAAU,GAElD,QAAMA,GACXmK,EAAG0yD,QAAU78D,EAAM5X,IAAIo+C,EAAM58C,MAAMoW,OAE9BA,IAAUmX,IACfhN,EAAG0yD,SAAU,QAAW78D,EAAOg9D,GAAiB7yD,GAAI,IAE5D,CACA,MAAM+yD,GAAc,CAChBhhB,QAAQ/xC,GAAI,MAAEnK,GAASwmC,GACnBr8B,EAAG0yD,SAAU,QAAW78D,EAAOwmC,EAAM58C,MAAMoW,OAC3CmK,EAAGjM,QAAU49D,EAAiBt1B,GAC9Bh7B,EAAiBrB,EAAI,UAAU,KAC3BA,EAAGjM,QAAQ0+D,GAASzyD,GAAI,GAEhC,EACAiyC,aAAajyC,GAAI,MAAEnK,EAAK,SAAEmX,GAAYqvB,GAClCr8B,EAAGjM,QAAU49D,EAAiBt1B,GAC1BxmC,IAAUmX,IACVhN,EAAG0yD,SAAU,QAAW78D,EAAOwmC,EAAM58C,MAAMoW,OAEnD,GAEEm9D,GAAe,CAEjBpuB,MAAM,EACNmN,QAAQ/xC,GAAI,MAAEnK,EAAOy3C,WAAW,OAAErO,IAAY5C,GAC1C,MAAM42B,GAAa,QAAMp9D,GACzBwL,EAAiBrB,EAAI,UAAU,KAC3B,MAAMkzD,EAAcxsE,MAAMzD,UAAUqP,OAC/B1S,KAAKogB,EAAG1Z,SAAUiM,GAAMA,EAAE4gE,WAC1BpzE,KAAKwS,GAAM0sC,GAAS,QAASwzB,GAASlgE,IAAMkgE,GAASlgE,KAC1DyN,EAAGjM,QAAQiM,EAAGmqD,SACR8I,EACI,IAAIllD,IAAImlD,GACRA,EACJA,EAAY,GAAG,IAEzBlzD,EAAGjM,QAAU49D,EAAiBt1B,EAClC,EAGAkR,QAAQvtC,GAAI,MAAEnK,IACVu9D,GAAYpzD,EAAInK,EACpB,EACAo8C,aAAajyC,EAAIqzD,EAAUh3B,GACvBr8B,EAAGjM,QAAU49D,EAAiBt1B,EAClC,EACAmR,QAAQxtC,GAAI,MAAEnK,IACVu9D,GAAYpzD,EAAInK,EACpB,GAEJ,SAASu9D,GAAYpzD,EAAInK,GACrB,MAAMy9D,EAAatzD,EAAGmqD,SACtB,IAAImJ,IAAe,QAAQz9D,KAAW,QAAMA,GAA5C,CAMA,IAAK,IAAInY,EAAI,EAAGq0C,EAAI/xB,EAAG1Z,QAAQ3I,OAAQD,EAAIq0C,EAAGr0C,IAAK,CAC/C,MAAM61E,EAASvzD,EAAG1Z,QAAQ5I,GACpB81E,EAAcf,GAASc,GAC7B,GAAID,GACI,QAAQz9D,GACR09D,EAAOJ,UAAW,QAAat9D,EAAO29D,IAAgB,EAGtDD,EAAOJ,SAAWt9D,EAAM5X,IAAIu1E,QAIhC,IAAI,QAAWf,GAASc,GAAS19D,GAG7B,YAFImK,EAAGyzD,gBAAkB/1E,IACrBsiB,EAAGyzD,cAAgB/1E,GAInC,CACK41E,IAAoC,IAAtBtzD,EAAGyzD,gBAClBzzD,EAAGyzD,eAAiB,EArBxB,CAuBJ,CAEA,SAAShB,GAASzyD,GACd,MAAO,WAAYA,EAAKA,EAAG06B,OAAS16B,EAAGnK,KAC3C,CAEA,SAASg9D,GAAiB7yD,EAAI0yD,GAC1B,MAAMzoE,EAAMyoE,EAAU,aAAe,cACrC,OAAOzoE,KAAO+V,EAAKA,EAAG/V,GAAOyoE,CACjC,CACA,MAAMgB,GAAgB,CAClB3hB,QAAQ/xC,EAAI2tC,EAAStR,GACjBs3B,GAAc3zD,EAAI2tC,EAAStR,EAAO,KAAM,UAC5C,EACAkR,QAAQvtC,EAAI2tC,EAAStR,GACjBs3B,GAAc3zD,EAAI2tC,EAAStR,EAAO,KAAM,UAC5C,EACA4V,aAAajyC,EAAI2tC,EAAStR,EAAOqG,GAC7BixB,GAAc3zD,EAAI2tC,EAAStR,EAAOqG,EAAW,eACjD,EACA8K,QAAQxtC,EAAI2tC,EAAStR,EAAOqG,GACxBixB,GAAc3zD,EAAI2tC,EAAStR,EAAOqG,EAAW,UACjD,GAEJ,SAASkxB,GAAoBtH,EAAS32D,GAClC,OAAQ22D,GACJ,IAAK,SACD,OAAO0G,GACX,IAAK,WACD,OAAOhB,EACX,QACI,OAAQr8D,GACJ,IAAK,WACD,OAAO08D,GACX,IAAK,QACD,OAAOU,GACX,QACI,OAAOf,GAG3B,CACA,SAAS2B,GAAc3zD,EAAI2tC,EAAStR,EAAOqG,EAAWgH,GAClD,MAAMmqB,EAAaD,GAAoB5zD,EAAGssD,QAASjwB,EAAM58C,OAAS48C,EAAM58C,MAAMkW,MACxEy2B,EAAKynC,EAAWnqB,GACtBtd,GAAMA,EAAGpsB,EAAI2tC,EAAStR,EAAOqG,EACjC,CAsCA,MAAMoxB,GAAkB,CAAC,OAAQ,QAAS,MAAO,QAC3CC,GAAiB,CACnBliC,KAAM/uC,GAAKA,EAAEkxE,kBACbC,QAASnxE,GAAKA,EAAEoxE,iBAChBjtE,KAAMnE,GAAKA,EAAEutB,SAAWvtB,EAAEqxE,cAC1BC,KAAMtxE,IAAMA,EAAEuxE,QACdC,MAAOxxE,IAAMA,EAAEyxE,SACfC,IAAK1xE,IAAMA,EAAE2xE,OACbC,KAAM5xE,IAAMA,EAAE6xE,QACdh0D,KAAM7d,GAAK,WAAYA,GAAkB,IAAbA,EAAE8xE,OAC9Bl3B,OAAQ56C,GAAK,WAAYA,GAAkB,IAAbA,EAAE8xE,OAChCC,MAAO/xE,GAAK,WAAYA,GAAkB,IAAbA,EAAE8xE,OAC/BE,MAAO,CAAChyE,EAAGwqD,IAAcwmB,GAAgBthE,MAAKyhD,GAAKnxD,EAAE,GAAGmxD,UAAY3G,EAAUv1C,SAASk8C,MAKrF8gB,GAAgB,CAAC3oC,EAAIkhB,IAChB,CAACjhC,KAAUzoB,KACd,IAAK,IAAIlG,EAAI,EAAGA,EAAI4vD,EAAU3vD,OAAQD,IAAK,CACvC,MAAMs3E,EAAQjB,GAAezmB,EAAU5vD,IACvC,GAAIs3E,GAASA,EAAM3oD,EAAOihC,GACtB,MACR,CACA,OAAOlhB,EAAG/f,KAAUzoB,EAAK,EAK3BqxE,GAAW,CACbC,IAAK,SACLC,MAAO,IACPC,GAAI,WACJz0D,KAAM,aACNk0D,MAAO,cACPQ,KAAM,aACNh+D,OAAQ,aAKNi+D,GAAW,CAAClpC,EAAIkhB,IACVjhC,IACJ,KAAM,QAASA,GACX,OAEJ,MAAMkpD,GAAW,QAAUlpD,EAAMpiB,KACjC,OAAIqjD,EAAU96C,MAAKrT,GAAKA,IAAMo2E,GAAYN,GAAS91E,KAAOo2E,IAC/CnpC,EAAG/f,QADd,CAEA,EAIFmpD,GAAQ,CACVxjB,YAAYhyC,GAAI,MAAEnK,IAAS,WAAE2sC,IACzBxiC,EAAGy1D,KAA4B,SAArBz1D,EAAGG,MAAMorD,QAAqB,GAAKvrD,EAAGG,MAAMorD,QAClD/oB,GAAc3sC,EACd2sC,EAAWqH,YAAY7pC,GAGvB01D,GAAW11D,EAAInK,EAEvB,EACA03C,QAAQvtC,GAAI,MAAEnK,IAAS,WAAE2sC,IACjBA,GAAc3sC,GACd2sC,EAAWuH,MAAM/pC,EAEzB,EACAwtC,QAAQxtC,GAAI,MAAEnK,EAAK,SAAEmX,IAAY,WAAEw1B,KAC1B3sC,KAAWmX,IAEZw1B,EACI3sC,GACA2sC,EAAWqH,YAAY7pC,GACvB01D,GAAW11D,GAAI,GACfwiC,EAAWuH,MAAM/pC,IAGjBwiC,EAAW6H,MAAMrqC,GAAI,KACjB01D,GAAW11D,GAAI,EAAM,IAK7B01D,GAAW11D,EAAInK,GAEvB,EACAw8C,cAAcryC,GAAI,MAAEnK,IAChB6/D,GAAW11D,EAAInK,EACnB,GAEJ,SAAS6/D,GAAW11D,EAAInK,GACpBmK,EAAGG,MAAMorD,QAAU11D,EAAQmK,EAAGy1D,KAAO,MACzC,CAWA,MAAME,IAAgC,QAAO,CAAEnb,aAAasP,GAG5D,IAAI7K,GAEJ,SAAS2W,KACL,OAAQ3W,KACHA,IAAW,QAAe0W,IACnC,CASA,MAMM1S,GAAY,IAAKr/D,KACnB,MAAMkC,EAAM8vE,KAAiB3S,aAAar/D,GAK1C,MAAM,MAAEk1D,GAAUhzD,EAsBlB,OArBAA,EAAIgzD,MAAS+c,IACT,MAAM7yC,EAAY8yC,GAAmBD,GACrC,IAAK7yC,EACD,OACJ,MAAMggB,EAAYl9C,EAAIuyD,YACjB,QAAWrV,IAAeA,EAAUxB,QAAWwB,EAAUtZ,WAK1DsZ,EAAUtZ,SAAW1G,EAAU4nC,WAGnC5nC,EAAU4nC,UAAY,GACtB,MAAMv/B,EAAQytB,EAAM91B,GAAW,EAAOA,aAAqB2gC,YAK3D,OAJI3gC,aAAqB+yC,UACrB/yC,EAAUioC,gBAAgB,WAC1BjoC,EAAUxN,aAAa,aAAc,KAElC6V,CAAK,EAETvlC,CACV,EAwDD,SAASgwE,GAAmB9yC,GACxB,IAAI,QAASA,GAAY,CACrB,MAAMuS,EAAM38B,SAASorD,cAAchhC,GAInC,OAAOuS,CACX,CAOA,OAAOvS,CACX,C,oCC9oDA,SAASgzC,EAAQ13E,EAAK23E,GAClB,MAAMl2E,EAAMiD,OAAOK,OAAO,MACpB6yE,EAAO53E,EAAIK,MAAM,KACvB,IAAK,IAAIjB,EAAI,EAAGA,EAAIw4E,EAAKv4E,OAAQD,IAC7BqC,EAAIm2E,EAAKx4E,KAAM,EAEnB,OAAOu4E,EAAmB9lC,KAASpwC,EAAIowC,EAAI5xC,eAAiB4xC,KAASpwC,EAAIowC,EAC7E,C,q7BAKA,MA0BMgmC,EAAuB,mMAGvBC,EAAsCJ,EAAQG,GA8CpD,SAASE,EAAexgE,GACpB,GAAIlP,EAAQkP,GAAQ,CAChB,MAAM0/B,EAAM,CAAC,EACb,IAAK,IAAI73C,EAAI,EAAGA,EAAImY,EAAMlY,OAAQD,IAAK,CACnC,MAAMgxD,EAAO74C,EAAMnY,GACbkiD,EAAa02B,EAAS5nB,GACtB6nB,EAAiB7nB,GACjB2nB,EAAe3nB,GACrB,GAAI9O,EACA,IAAK,MAAM31C,KAAO21C,EACdrK,EAAItrC,GAAO21C,EAAW31C,EAGlC,CACA,OAAOsrC,CACX,CACK,OAAI+gC,EAASzgE,IAGTy0B,EAASz0B,GAFPA,OAEN,CAGT,CACA,MAAM2gE,EAAkB,gBAClBC,EAAsB,UACtBC,EAAiB,gBACvB,SAASH,EAAiB/K,GACtB,MAAM3gB,EAAM,CAAC,EAUb,OATA2gB,EACK9sE,QAAQg4E,EAAgB,IACxB/3E,MAAM63E,GACNz7C,SAAQ2zB,IACT,GAAIA,EAAM,CACN,MAAMioB,EAAMjoB,EAAK/vD,MAAM83E,GACvBE,EAAIh5E,OAAS,IAAMktD,EAAI8rB,EAAI,GAAG/3E,QAAU+3E,EAAI,GAAG/3E,OACnD,KAEGisD,CACX,CAgBA,SAAS+rB,EAAe/gE,GACpB,IAAI0/B,EAAM,GACV,GAAI+gC,EAASzgE,GACT0/B,EAAM1/B,OAEL,GAAIlP,EAAQkP,GACb,IAAK,IAAInY,EAAI,EAAGA,EAAImY,EAAMlY,OAAQD,IAAK,CACnC,MAAMkiD,EAAag3B,EAAe/gE,EAAMnY,IACpCkiD,IACArK,GAAOqK,EAAa,IAE5B,MAEC,GAAItV,EAASz0B,GACd,IAAK,MAAMhR,KAAQgR,EACXA,EAAMhR,KACN0wC,GAAO1wC,EAAO,KAI1B,OAAO0wC,EAAI32C,MACf,CAgBA,MAgDMi4E,EAAsB,8EACtBC,EAAqCd,EAAQa,GAYnD,SAASE,EAAmBlhE,GACxB,QAASA,GAAmB,KAAVA,CACtB,CAgIA,SAASmhE,EAAmBhtC,EAAGC,GAC3B,GAAID,EAAErsC,SAAWssC,EAAEtsC,OACf,OAAO,EACX,IAAIs5E,GAAQ,EACZ,IAAK,IAAIv5E,EAAI,EAAGu5E,GAASv5E,EAAIssC,EAAErsC,OAAQD,IACnCu5E,EAAQC,EAAWltC,EAAEtsC,GAAIusC,EAAEvsC,IAE/B,OAAOu5E,CACX,CACA,SAASC,EAAWltC,EAAGC,GACnB,GAAID,IAAMC,EACN,OAAO,EACX,IAAIktC,EAAaC,EAAOptC,GACpBqtC,EAAaD,EAAOntC,GACxB,GAAIktC,GAAcE,EACd,SAAOF,IAAcE,IAAartC,EAAE/8B,YAAcg9B,EAAEh9B,UAIxD,GAFAkqE,EAAaG,EAASttC,GACtBqtC,EAAaC,EAASrtC,GAClBktC,GAAcE,EACd,OAAOrtC,IAAMC,EAIjB,GAFAktC,EAAaxwE,EAAQqjC,GACrBqtC,EAAa1wE,EAAQsjC,GACjBktC,GAAcE,EACd,SAAOF,IAAcE,IAAaL,EAAmBhtC,EAAGC,GAI5D,GAFAktC,EAAa7sC,EAASN,GACtBqtC,EAAa/sC,EAASL,GAClBktC,GAAcE,EAAY,CAE1B,IAAKF,IAAeE,EAChB,OAAO,EAEX,MAAME,EAAav0E,OAAO8pB,KAAKkd,GAAGrsC,OAC5B65E,EAAax0E,OAAO8pB,KAAKmd,GAAGtsC,OAClC,GAAI45E,IAAeC,EACf,OAAO,EAEX,IAAK,MAAMvtE,KAAO+/B,EAAG,CACjB,MAAMytC,EAAUztC,EAAE9mC,eAAe+G,GAC3BytE,EAAUztC,EAAE/mC,eAAe+G,GACjC,GAAKwtE,IAAYC,IACXD,GAAWC,IACZR,EAAWltC,EAAE//B,GAAMggC,EAAEhgC,IACtB,OAAO,CAEf,CACJ,CACA,OAAOy6B,OAAOsF,KAAOtF,OAAOuF,EAChC,CACA,SAAS0tC,EAAa75E,EAAKqyC,GACvB,OAAOryC,EAAI84D,WAAUlI,GAAQwoB,EAAWxoB,EAAMve,IAClD,CAMA,MAAMynC,EAAmBznC,GACdmmC,EAASnmC,GACVA,EACO,MAAPA,EACI,GACAxpC,EAAQwpC,IACL7F,EAAS6F,KACLA,EAAIxhC,WAAakpE,IAAmBC,EAAW3nC,EAAIxhC,WACtD7E,KAAKC,UAAUomC,EAAK4nC,EAAU,GAC9BrzC,OAAOyL,GAEnB4nC,EAAW,CAAChiE,EAAMo6B,IAEhBA,GAAOA,EAAIgK,UACJ49B,EAAShiE,EAAMo6B,EAAIt6B,OAErBmiE,EAAM7nC,GACJ,CACH,CAAC,OAAOA,EAAIniB,SAAU,IAAImiB,EAAInQ,WAAWC,QAAO,CAACD,GAAU/1B,EAAKkmC,MAC5DnQ,EAAQ,GAAG/1B,QAAYkmC,EAChBnQ,IACR,CAAC,IAGHi4C,EAAM9nC,GACJ,CACH,CAAC,OAAOA,EAAIniB,SAAU,IAAImiB,EAAIoE,YAG7BjK,EAAS6F,IAASxpC,EAAQwpC,IAAS+nC,EAAc/nC,GAGnDA,EAFIzL,OAAOyL,GAKhBgoC,EAEA,CAAC,EACDC,EAA0E,GAC1EC,EAAO,OAIP1gB,EAAK,KAAM,EACX2gB,EAAO,YACPC,EAAQtuE,GAAQquE,EAAKz4E,KAAKoK,GAC1B60C,EAAmB70C,GAAQA,EAAIxB,WAAW,aAC1CnL,EAAS0F,OAAO0B,OAChB4lD,EAAS,CAACxsD,EAAKkiB,KACjB,MAAMtiB,EAAII,EAAIO,QAAQ2hB,GAClBtiB,GAAK,GACLI,EAAIigD,OAAOrgD,EAAG,EAClB,EAEEwF,EAAiBF,OAAOC,UAAUC,eAClCs1E,EAAS,CAACroC,EAAKlmC,IAAQ/G,EAAetD,KAAKuwC,EAAKlmC,GAChDtD,EAAUD,MAAMC,QAChBqxE,EAAS7nC,GAA8B,iBAAtBsoC,EAAatoC,GAC9B8nC,EAAS9nC,GAA8B,iBAAtBsoC,EAAatoC,GAC9BinC,EAAUjnC,GAA8B,kBAAtBsoC,EAAatoC,GAC/B2nC,EAAc3nC,GAAuB,oBAARA,EAC7BmmC,EAAYnmC,GAAuB,kBAARA,EAC3BmnC,EAAYnnC,GAAuB,kBAARA,EAC3B7F,EAAY6F,GAAgB,OAARA,GAA+B,kBAARA,EAC3CuoC,EAAavoC,GACR7F,EAAS6F,IAAQ2nC,EAAW3nC,EAAIjyB,OAAS45D,EAAW3nC,EAAIhoB,OAE7D0vD,EAAiB70E,OAAOC,UAAU0L,SAClC8pE,EAAgB5iE,GAAUgiE,EAAej4E,KAAKiW,GAC9C8iE,EAAa9iE,GAER4iE,EAAa5iE,GAAO9Q,MAAM,GAAI,GAEnCmzE,EAAiB/nC,GAA8B,oBAAtBsoC,EAAatoC,GACtCyoC,EAAgB3uE,GAAQqsE,EAASrsE,IAC3B,QAARA,GACW,MAAXA,EAAI,IACJ,GAAK4uE,SAAS5uE,EAAK,MAAQA,EACzB6uE,EAA+B9C,EAErC,uIAKM+C,EAAuB3sC,IACzB,MAAMoT,EAAQx8C,OAAOK,OAAO,MAC5B,OAAS/E,IACL,MAAM06E,EAAMx5B,EAAMlhD,GAClB,OAAO06E,IAAQx5B,EAAMlhD,GAAO8tC,EAAG9tC,GAClC,CAAC,EAEA26E,EAAa,SAIbC,EAAWH,GAAqBz6E,GAC3BA,EAAII,QAAQu6E,GAAY,CAACjtE,EAAGo4B,IAAOA,EAAIA,EAAEpmC,cAAgB,OAE9Dm7E,EAAc,aAIdC,EAAYL,GAAqBz6E,GAAQA,EAAII,QAAQy6E,EAAa,OAAO56E,gBAIzE86E,EAAaN,GAAqBz6E,GAAQA,EAAIwoC,OAAO,GAAG9oC,cAAgBM,EAAIyG,MAAM,KAIlFu0E,EAAeP,GAAqBz6E,GAAQA,EAAM,KAAK+6E,EAAW/6E,KAAS,KAE3Ei7E,EAAa,CAAC1jE,EAAOmX,KAAchqB,OAAOg6D,GAAGnnD,EAAOmX,GACpDwsD,GAAiB,CAACC,EAAKpsB,KACzB,IAAK,IAAI3vD,EAAI,EAAGA,EAAI+7E,EAAI97E,OAAQD,IAC5B+7E,EAAI/7E,GAAG2vD,EACX,EAEEqsB,GAAM,CAAC/2D,EAAK1Y,EAAK4L,KACnB7S,OAAOsuD,eAAe3uC,EAAK1Y,EAAK,CAC5BmpD,cAAc,EACdD,YAAY,EACZt9C,SACF,EAEA8jE,GAAYxpC,IACd,MAAM19B,EAAImnE,WAAWzpC,GACrB,OAAOnjC,MAAMyF,GAAK09B,EAAM19B,CAAC,EAE7B,IAAIonE,GACJ,MAAMC,GAAgB,IACVD,KACHA,GACyB,qBAAfE,WACDA,WACgB,qBAAT9yE,KACHA,KACkB,qBAAXrM,OACHA,OACkB,qBAAX,EAAAstC,EACH,EAAAA,EACA,CAAC,E,oCCljBxB,SAAS8xC,IACZ,MAAyB,kBAAXp/E,aAA6FC,KAA1D,OAAXD,aAA8B,IAAXA,YAAoB,EAASA,OAAOge,SACjG,C,iCACA,IA8CWqhE,EAAiB,WACxB,IAAIjzE,EACJ,GAAIgzE,IAAgB,CAChB,IAAIE,EAAkBt/E,OAClBu/E,EAAiBzzE,MACrB,QAAkC7L,IAA9Bq/E,EAAgBE,gBAAgHv/E,KAAhD,QAAnCmM,EAAKmzE,EAAel3E,iBAA8B,IAAP+D,OAAgB,EAASA,EAAG0J,QAEpH,cADOypE,EAAel3E,UAAUyN,QACzB,CAEf,CACA,OAAO,CACX,E,gDCzEI2pE,EAAgD,WAChD,SAASA,IACL16E,KAAKX,GAAK,IAAI,EAAA2B,SAA8B,qBAAdG,UAA4BA,UAAUC,UAAY,MAAMH,WAC1F,CAUA,OATAy5E,EAA+Bp3E,UAAUq3E,sBAAwB,WAC7D,MAAO,CACHC,YAAa56E,KAAK46E,YAClB3yE,SAAU4yE,IACVC,SAAU,MACV/5E,GAAIg6E,EAAM/6E,KAAKX,IACf27E,YAAaC,EAAej7E,KAAKX,IAEzC,EACOq7E,CACX,CAdmD,GAe/CK,EAAQ,SAAU17E,GAClB,IAAIgI,EAAIgO,EACR,MAAO,CAAuB,QAArBhO,EAAKhI,EAAGsB,eAA4B,IAAP0G,OAAgB,EAASA,EAAGnC,KAA4B,QAArBmQ,EAAKhW,EAAGsB,eAA4B,IAAP0U,OAAgB,EAASA,EAAG7T,OAC7HmR,QAAO,SAAUxP,GAAK,OAAa,OAANA,QAAoBjI,IAANiI,CAAiB,IAC5DwW,KAAK,IACd,EACIshE,EAAiB,SAAU57E,GAC3B,IAAIgI,EACJ,OAAwB,QAAhBA,EAAKhI,EAAG0B,UAAuB,IAAPsG,OAAgB,EAASA,EAAGnC,IAChE,EACI21E,EAAc,WACd,MAA8B,qBAAd15E,YACVA,UAAU6G,WAAa7G,UAAU6G,UAAU,IACzC7G,UAAU8G,WACd,EACR,EAEIizE,EAAiC,WACjC,SAASA,IACLl7E,KAAK6Z,MAAQ,EACjB,CAoBA,OAnBAqhE,EAAgB53E,UAAU63E,SAAW,SAAUzuD,GACtC1sB,KAAKqvB,SAMNrvB,KAAKqvB,SAAS3C,GALV1sB,KAAK6Z,MAAM7b,OAAS,KACpBgC,KAAK6Z,MAAMK,KAAKwS,EAM5B,EACAwuD,EAAgB53E,UAAU83E,iBAAmB,SAAU/rD,GACnDrvB,KAAKqvB,SAAWA,EACZrvB,KAAK6Z,MAAM7b,OAAS,IACpBgC,KAAK6Z,MAAMuhB,SAAQ,SAAU1O,GACzB2C,EAAS3C,EACb,IACA1sB,KAAK6Z,MAAQ,GAErB,EACOqhE,CACX,CAxBoC,GAwChCG,EAAW,WAWb,OAVAA,EAAWh4E,OAAO0B,QAAU,SAAkB3B,GAC5C,IAAK,IAAIF,EAAGnF,EAAI,EAAG+U,EAAIyQ,UAAUvlB,OAAQD,EAAI+U,EAAG/U,IAG9C,IAAK,IAAI0B,KAFTyD,EAAIqgB,UAAUxlB,GAEAmF,EAAOG,OAAOC,UAAUC,eAAetD,KAAKiD,EAAGzD,KAAI2D,EAAE3D,GAAKyD,EAAEzD,IAG5E,OAAO2D,CACT,EAEOi4E,EAAS/sC,MAAMtuC,KAAMujB,UAC9B,EAGI+3D,EAAU,SAAUC,EAAMC,GAC1B,IAAIC,EAAY,CAAC,SAAU,SAAU,UAAW,aAC5CC,SAAeH,EACfI,SAAeH,EACnB,GAAIE,IAAUC,EACV,OAAO,EAEX,IAAK,IAAIC,EAAK,EAAGC,EAAcJ,EAAWG,EAAKC,EAAY79E,OAAQ49E,IAAM,CACrE,IAAIn8E,EAAIo8E,EAAYD,GACpB,GAAIn8E,IAAMi8E,EACN,OAAOH,IAASC,CAExB,CAEA,GAAY,MAARD,GAAwB,MAARC,EAChB,OAAO,EAEN,GAAY,MAARD,GAAwB,MAARC,EACrB,OAAO,EAGX,GAAID,EAAKv9E,SAAWw9E,EAAKx9E,OACrB,OAAO,EAGX,IAAI89E,EAAW/0E,MAAMC,QAAQu0E,GACzBQ,EAAWh1E,MAAMC,QAAQw0E,GAC7B,GAAIM,IAAaC,EACb,OAAO,EAEX,IAAID,IAAYC,EAQX,CAED,IAAIC,EAAU34E,OAAO8pB,KAAKouD,GAAM38D,OAC5Bq9D,EAAU54E,OAAO8pB,KAAKquD,GAAM58D,OAChC,IAAK08D,EAAQU,EAASC,GAClB,OAAO,EAGX,IAAIC,GAAW,EAMf,OALA74E,OAAO8pB,KAAKouD,GAAMngD,SAAQ,SAAU9wB,GAC3BgxE,EAAQC,EAAKjxE,GAAMkxE,EAAKlxE,MACzB4xE,GAAW,EAEnB,IACOA,CACX,CArBI,IAAK,IAAIn+E,EAAI,EAAGA,EAAIw9E,EAAKv9E,OAAQD,IAC7B,IAAKu9E,EAAQC,EAAKx9E,GAAIy9E,EAAKz9E,IACvB,OAAO,EAoBnB,OAAO,CACX,EAEIo+E,EAAY,OACZC,EAAc,SACdC,EAAkB,YAEjBh5E,OAAOg9B,UACRh9B,OAAOg9B,QAAU,SAAUrd,GACvB,IAAIs5D,EAAWj5E,OAAO8pB,KAAKnK,GACvBjlB,EAAIu+E,EAASt+E,OACbu+E,EAAW,IAAIx1E,MAAMhJ,GACzB,MAAOA,IACHw+E,EAASx+E,GAAK,CAACu+E,EAASv+E,GAAIilB,EAAIs5D,EAASv+E,KAE7C,OAAOw+E,CACX,GAEJ,IAAIC,EAAmC,WACnC,SAASA,IACLx8E,KAAKy8E,SAAW,CAAEC,eAAgB,CAAC,GACnC18E,KAAK6sB,UAAY,IAAIuB,GACzB,CAoEA,OAnEAouD,EAAkBl5E,UAAUq5E,aAAe,WAEvC,IAAIr1E,EAAOtH,KACP48E,EAAuBvB,EAAS,CAAC,EAAGr7E,KAAKy8E,SAASC,gBAClDG,EAAiBxB,EAASA,EAAS,CAAC,EAAGr7E,KAAKy8E,UAAW,CAAEC,eAAgBE,IAC7E,MAAO,CACHE,UAAW,SAAUC,GAEjB,OADAF,EAAeE,OAASA,EACjB/8E,IACX,EACAg9E,YAAa,SAAUC,GAEnB,OADAJ,EAAeI,SAAWA,EACnBj9E,IACX,EACAk9E,kBAAmB,SAAUR,GAEzB,OADAG,EAAeH,eAAiBA,EACzB18E,IACX,EACAm9E,qBAAsB,SAAUC,GAE5B,IADA,IAAIC,EAAmBR,EAAeH,gBAAkB,CAAC,EAChDd,EAAK,EAAGv0E,EAAKhE,OAAOg9B,QAAQ+8C,GAAUxB,EAAKv0E,EAAGrJ,OAAQ49E,IAAM,CACjE,IAAIvmE,EAAKhO,EAAGu0E,GAAKn9D,EAASpJ,EAAG,GAAIioE,EAAajoE,EAAG,GACjD,OAAQoJ,GACJ,KAAK09D,EACD,IAAK,IAAI7mE,EAAK,EAAGC,EAAKlS,OAAOg9B,QAAQi9C,GAAahoE,EAAKC,EAAGvX,OAAQsX,IAAM,CACpE,IAAIE,EAAKD,EAAGD,GAAKhL,EAAMkL,EAAG,GAAIU,EAAQV,EAAG,GACzC6nE,EAAiB/yE,GAAO4L,CAC5B,CACA,MACJ,KAAKkmE,EACD,IAAK,IAAI3mE,EAAK,EAAGC,EAAKrS,OAAO8pB,KAAKmwD,GAAa7nE,EAAKC,EAAG1X,OAAQyX,IAAM,CAC7DnL,EAAMoL,EAAGD,UACN4nE,EAAiB/yE,EAC5B,CACA,MACJ,KAAK+xE,EACDgB,EAAmB,CAAC,EACpB,MAEZ,CAEA,OADAR,EAAeH,eAAiBW,EACzBr9E,IACX,EACAu9E,OAAQ,WAEJ,OADAj2E,EAAKk2E,YAAYX,GACV78E,IACX,EAER,EACAw8E,EAAkBl5E,UAAUm6E,YAAc,WACtC,OAAOpC,EAAS,CAAC,EAAGr7E,KAAKy8E,SAC7B,EACAD,EAAkBl5E,UAAUk6E,YAAc,SAAUf,GAChD,IAAIiB,EAAmBrC,EAAS,CAAC,EAAGr7E,KAAKy8E,UACzCz8E,KAAKy8E,SAAWpB,EAAS,CAAC,EAAGoB,GACxBnB,EAAQoC,EAAkB19E,KAAKy8E,WAChCz8E,KAAK6sB,UAAUuO,SAAQ,SAAUxN,GAC7BA,EAAS6uD,EACb,GAER,EACAD,EAAkBl5E,UAAUq6E,oBAAsB,SAAU/vD,GACxD5tB,KAAK6sB,UAAUxL,IAAIuM,EACvB,EACA4uD,EAAkBl5E,UAAUs6E,uBAAyB,SAAUhwD,GAC3D5tB,KAAK6sB,UAAUnV,OAAOkW,EAC1B,EACO4uD,CACX,CAzEsC,GA2ElCqB,EAAmC,qBAAfzD,WAClBA,WACkB,qBAAX,EAAA7xC,EACH,EAAAA,EACAjhC,KAENw2E,EAAoC,WACpC,SAASA,IACL99E,KAAK+9E,cAAgB,IAAIvB,EACzBx8E,KAAKg+E,YAAc,IAAI9C,EACvBl7E,KAAKi+E,2BAA6B,IAAIvD,CAC1C,CAWA,OAVAoD,EAAmBI,YAAc,SAAUC,GAQvC,OAPKN,EAAW,iCACZA,EAAW,+BAAiC,CAAC,GAE5CA,EAAW,+BAA+BM,KAC3CN,EAAW,+BAA+BM,GACtC,IAAIL,GAELD,EAAW,+BAA+BM,EACrD,EACOL,CACX,CAjBuC,GC5OvC,SAASM,EAAQp7D,GAWf,OATEo7D,EADoB,oBAAX3qC,QAAoD,kBAApBA,OAAO4E,SACtC,SAAUr1B,GAClB,cAAcA,CAChB,EAEU,SAAUA,GAClB,OAAOA,GAAyB,oBAAXywB,QAAyBzwB,EAAI7a,cAAgBsrC,QAAUzwB,IAAQywB,OAAOnwC,UAAY,gBAAkB0f,CAC3H,EAGKo7D,EAAQp7D,EACjB,CAEA,SAASq7D,EAAgBp4E,EAAUq4E,GACjC,KAAMr4E,aAAoBq4E,GACxB,MAAM,IAAIC,UAAU,oCAExB,CAEA,SAASC,EAAkB9tD,EAAQ5wB,GACjC,IAAK,IAAI/B,EAAI,EAAGA,EAAI+B,EAAM9B,OAAQD,IAAK,CACrC,IAAI6zD,EAAa9xD,EAAM/B,GACvB6zD,EAAW4B,WAAa5B,EAAW4B,aAAc,EACjD5B,EAAW6B,cAAe,EACtB,UAAW7B,IAAYA,EAAW6sB,UAAW,GACjDp7E,OAAOsuD,eAAejhC,EAAQkhC,EAAWtnD,IAAKsnD,EAChD,CACF,CAEA,SAAS8sB,EAAaJ,EAAaK,EAAYC,GAG7C,OAFID,GAAYH,EAAkBF,EAAYh7E,UAAWq7E,GACrDC,GAAaJ,EAAkBF,EAAaM,GACzCN,CACT,CAEA,SAASO,EAAgB77D,EAAK1Y,EAAK4L,GAYjC,OAXI5L,KAAO0Y,EACT3f,OAAOsuD,eAAe3uC,EAAK1Y,EAAK,CAC9B4L,MAAOA,EACPs9C,YAAY,EACZC,cAAc,EACdgrB,UAAU,IAGZz7D,EAAI1Y,GAAO4L,EAGN8M,CACT,CAEA,SAAS87D,EAAcpuD,GACrB,IAAK,IAAI3yB,EAAI,EAAGA,EAAIwlB,UAAUvlB,OAAQD,IAAK,CACzC,IAAIgnD,EAAyB,MAAhBxhC,UAAUxlB,GAAawlB,UAAUxlB,GAAK,CAAC,EAChD84C,EAAUxzC,OAAO8pB,KAAK43B,GAEkB,oBAAjC1hD,OAAOG,wBAChBqzC,EAAUA,EAAQ54C,OAAOoF,OAAOG,sBAAsBuhD,GAAQpyC,QAAO,SAAUosE,GAC7E,OAAO17E,OAAO27E,yBAAyBj6B,EAAQg6B,GAAKvrB,UACtD,MAGF3c,EAAQzb,SAAQ,SAAU9wB,GACxBu0E,EAAgBnuD,EAAQpmB,EAAKy6C,EAAOz6C,GACtC,GACF,CAEA,OAAOomB,CACT,CAEA,SAASuuD,EAAmB9gF,GAC1B,OAAO+gF,EAAmB/gF,IAAQghF,EAAiBhhF,IAAQihF,GAC7D,CAEA,SAASF,EAAmB/gF,GAC1B,GAAI4I,MAAMC,QAAQ7I,GAAM,CACtB,IAAK,IAAIJ,EAAI,EAAGshF,EAAO,IAAIt4E,MAAM5I,EAAIH,QAASD,EAAII,EAAIH,OAAQD,IAAKshF,EAAKthF,GAAKI,EAAIJ,GAEjF,OAAOshF,CACT,CACF,CAEA,SAASF,EAAiBG,GACxB,GAAI7rC,OAAO4E,YAAYh1C,OAAOi8E,IAAkD,uBAAzCj8E,OAAOC,UAAU0L,SAAS/O,KAAKq/E,GAAgC,OAAOv4E,MAAM8mB,KAAKyxD,EAC1H,CAEA,SAASF,IACP,MAAM,IAAIb,UAAU,kDACtB,CAEA,IAAIgB,EAAY,CACdC,iBAAkB,oBAClBC,YAAa,EACbC,kBAAmB,KACnBC,kBAAmB,IACnBC,eAAgB,YAChBC,qBAAsB,iBACtBC,cAAe,oBACfC,iBAAkB,uBAClBC,mBAAoB,6BACpBC,sBAAuB,gCAEvBC,cAAe,wBACfC,gBAAiB,0BACjBC,iBAAkB,2BAClBC,qBAAsB,+BACtBC,WAAY,sBAEZC,UAAW,qBACXC,QAAS,mBACTC,QAAS,mBAETC,gBAAiB,EACjBC,cAAe,EACfC,cAAe,EACfC,iBAAkB,EAClBC,sBAAuB,EACvBC,eAAgB,EAChBC,kBAAmB,EACnBC,sBAAuB,EACvBC,mBAAoB,kBACpBC,cAAe,MAEfC,gBAAiB,GACjBC,gBAAiB,UACjBC,aAAc,OACdC,cAAe,eACfC,gBAAiB,iBAEjBC,cAAe,iBACfC,mBAAoB,aACpBC,iBAAkB,YAClBC,cAAe,SACfC,qBAAsB,eACtBC,oBAAqB,gBAErBC,mBAAoB,eAEpBC,SAAU,WAEVC,WAAY,aACZC,WAAY,aACZC,aAAc,eACdC,SAAU,WACVC,YAAa,cACbC,kBAAmB,mCACnBC,eAAgB,OAChBC,iBAAkB,UAOhBC,EAAO,CACTC,OAAQ,SAAgBx/E,GAGtB,IAFA,IAAIy/E,EAAU,GAEL7vE,EAAI,EAAGA,EAAI5P,EAAElF,OAAQ8U,IAAK,CACjC,IAAI2xB,EAAIvhC,EAAEwhC,WAAW5xB,GAEjB2xB,EAAI,IACNk+C,GAAW59C,OAAOC,aAAaP,GACtBA,EAAI,KAAOA,EAAI,MACxBk+C,GAAW59C,OAAOC,aAAaP,GAAK,EAAI,KACxCk+C,GAAW59C,OAAOC,aAAiB,GAAJP,EAAS,OAExCk+C,GAAW59C,OAAOC,aAAaP,GAAK,GAAK,KACzCk+C,GAAW59C,OAAOC,aAAaP,GAAK,EAAI,GAAK,KAC7Ck+C,GAAW59C,OAAOC,aAAiB,GAAJP,EAAS,KAE5C,CAEA,OAAOk+C,CACT,EACAC,OAAQ,SAAgBD,GACtB,IAAIz/E,EAAI,GACJnF,EAAI,EACJ0mC,EAAI,EACJK,EAAK,EACLG,EAAK,EAET,MAAOlnC,EAAI4kF,EAAQ3kF,OACjBymC,EAAIk+C,EAAQj+C,WAAW3mC,GAEnB0mC,EAAI,KACNvhC,GAAK6hC,OAAOC,aAAaP,GACzB1mC,KACS0mC,EAAI,KAAOA,EAAI,KACxBK,EAAK69C,EAAQj+C,WAAW3mC,EAAI,GAC5BmF,GAAK6hC,OAAOC,cAAkB,GAAJP,IAAW,EAAS,GAALK,GACzC/mC,GAAK,IAEL+mC,EAAK69C,EAAQj+C,WAAW3mC,EAAI,GAC5BknC,EAAK09C,EAAQj+C,WAAW3mC,EAAI,GAC5BmF,GAAK6hC,OAAOC,cAAkB,GAAJP,IAAW,IAAW,GAALK,IAAY,EAAS,GAALG,GAC3DlnC,GAAK,GAIT,OAAOmF,CACT,GAIE2/E,EAAc,WAChB,MAA0B,qBAAfzI,WACFA,WAGa,qBAAXn/E,OACFA,OAGW,qBAATqM,KACFA,KAGa,qBAAX,EAAAihC,EACF,EAAAA,OADT,CAGF,CAhBkB,GAuBdu6C,EAAS,CACXC,QAAS,oEACTL,OAAQ,SAAgB18C,GACtB,IACE,GAAI68C,EAAY97C,MAAQ87C,EAAY/8C,KAClC,OAAO+8C,EAAY97C,KAAKi8C,SAASh4C,mBAAmBhF,IAGxD,CADE,MAAO7iC,GACT,CAEA,OAAO2/E,EAAOG,QAAQj9C,EACxB,EACAi9C,QAAS,SAAiBj9C,GACxB,IACIk9C,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EADpCp9C,EAAS,GAETroC,EAAI,EACRioC,EAAQy8C,EAAKC,OAAO18C,GAEpB,MAAOjoC,EAAIioC,EAAMhoC,OACfklF,EAAOl9C,EAAMtB,WAAW3mC,KACxBolF,EAAOn9C,EAAMtB,WAAW3mC,KACxBqlF,EAAOp9C,EAAMtB,WAAW3mC,KACxBslF,EAAOH,GAAQ,EACfI,GAAe,EAAPJ,IAAa,EAAIC,GAAQ,EACjCI,GAAe,GAAPJ,IAAc,EAAIC,GAAQ,EAClCI,EAAc,GAAPJ,EAEH/1E,MAAM81E,GACRI,EAAOC,EAAO,GACLn2E,MAAM+1E,KACfI,EAAO,IAGTp9C,EAASA,EAAS08C,EAAOC,QAAQ57C,OAAOk8C,GAAQP,EAAOC,QAAQ57C,OAAOm8C,GAAQR,EAAOC,QAAQ57C,OAAOo8C,GAAQT,EAAOC,QAAQ57C,OAAOq8C,GAGpI,OAAOp9C,CACT,EACAw8C,OAAQ,SAAgB58C,GACtB,IACE,GAAI68C,EAAY97C,MAAQ87C,EAAY/8C,KAClC,OAAOqF,mBAAmBs4C,OAAOZ,EAAY/8C,KAAKE,IAGtD,CADE,MAAO7iC,GACT,CAEA,OAAO2/E,EAAOY,QAAQ19C,EACxB,EACA09C,QAAS,SAAiB19C,GACxB,IACIk9C,EAAMC,EAAMC,EACZC,EAAMC,EAAMC,EAAMC,EAFlBp9C,EAAS,GAGTroC,EAAI,EACRioC,EAAQA,EAAMjnC,QAAQ,mBAAoB,IAE1C,MAAOhB,EAAIioC,EAAMhoC,OACfqlF,EAAOP,EAAOC,QAAQrkF,QAAQsnC,EAAMmB,OAAOppC,MAC3CulF,EAAOR,EAAOC,QAAQrkF,QAAQsnC,EAAMmB,OAAOppC,MAC3CwlF,EAAOT,EAAOC,QAAQrkF,QAAQsnC,EAAMmB,OAAOppC,MAC3CylF,EAAOV,EAAOC,QAAQrkF,QAAQsnC,EAAMmB,OAAOppC,MAC3CmlF,EAAOG,GAAQ,EAAIC,GAAQ,EAC3BH,GAAe,GAAPG,IAAc,EAAIC,GAAQ,EAClCH,GAAe,EAAPG,IAAa,EAAIC,EACzBp9C,GAAkBrB,OAAOC,aAAak+C,GAEzB,KAATK,IACFn9C,GAAkBrB,OAAOC,aAAam+C,IAG3B,KAATK,IACFp9C,GAAkBrB,OAAOC,aAAao+C,IAK1C,OADAh9C,EAASq8C,EAAKG,OAAOx8C,GACdA,CACT,GAOE,EAAW/iC,OAAOC,UAAU0L,SAShC,SAASgH,EAAMw6B,GACb,OAAQ,EAASvwC,KAAKuwC,IACpB,IAAK,gBACH,MAAO,OAET,IAAK,kBACH,MAAO,SAET,IAAK,qBACH,MAAO,YAET,IAAK,iBACH,MAAO,QAET,IAAK,iBACH,MAAO,QAGX,OAAY,OAARA,EACK,YAGGt1C,IAARs1C,EACK,YAGLA,IAAQA,EACH,MAGLA,GAAwB,IAAjBA,EAAI60B,SACN,UAGa,qBAAXse,QAAqD,oBAApBA,OAAOC,UAA2BD,OAAOC,SAASpzC,GACrF,UAGTA,EAAMA,EAAIqzC,QAAUrzC,EAAIqzC,UAAYxgF,OAAOC,UAAUugF,QAAQv1C,MAAMkC,GAC5D4tC,EAAQ5tC,GACjB,CAEA,IAksBI/jB,EAlsBAq3D,EAAY,CACdC,QAAS,EACT5/E,MAAO,EACP6/E,KAAM,EACNC,KAAM,GAEJ//E,EAAW4/E,EAAUE,KAErBE,EAAc,SAAqBC,GACjC9gF,OAAOC,UAAUC,eAAetD,KAAK6jF,EAAWK,KAClDjgF,EAAW4/E,EAAUK,GAEzB,EAEIC,EAAc,WAChB,OAAOlgF,CACT,EAEImgF,EAAM,CACRjgF,MAAO,SAAelB,GAChBgB,GAAY4/E,EAAU3/E,OACxBmgF,EAAKphF,EAET,EACAirC,KAAM,SAAcjrC,GACdgB,GAAY4/E,EAAUE,MACxBM,EAAKphF,EAET,EACAse,KAAM,SAActe,GACdgB,GAAY4/E,EAAUG,MACxBK,EAAKphF,EAET,GAGEohF,EAAO,SAAcphF,GACvB,IACEqe,QAAQ8iE,IAAI,eAAiBnhF,EAE/B,CADE,MAAOC,GACT,CACF,EAEIohF,EAAgB,SAAuB5lF,GACzC,OAAQA,GAAsB,IAAfA,EAAIX,MACrB,EAEIwmF,EAAwB,WAC1B,IACE,GAAI3B,EAAYr0D,eACd,OAAO,CAGX,CADE,MAAOrrB,GACT,CAEA,OAAO,CACT,EAGIshF,EAAW,SAASA,EAASvuE,GAC/B,GAAoB,UAAhBF,EAAKE,GACP,IAAK,IAAInY,EAAI,EAAGA,EAAImY,EAAMlY,OAAQD,IAChCmY,EAAMnY,GAAK0mF,EAASvuE,EAAMnY,SAEvB,GAAoB,WAAhBiY,EAAKE,GACd,IAAK,IAAI5L,KAAO4L,EACV5L,KAAO4L,IACTA,EAAM5L,GAAOm6E,EAASvuE,EAAM5L,UAIhC4L,EAAQwuE,EAAexuE,GAGzB,OAAOA,CACT,EAEIwuE,EAAiB,SAAwBxuE,GAC3C,MAAoB,WAAhBF,EAAKE,IACAA,EAAMlY,OAASuhF,EAAUG,kBAAoBxpE,EAAM/W,UAAU,EAAGogF,EAAUG,mBAG5ExpE,CACT,EAEIyuE,EAAgB,SAAuB3+C,EAAO9gC,EAAMsrE,GACtD,OAAIx6D,EAAKgwB,KAAWwqC,IAClB6T,EAAIjgF,MAAM,WAAac,EAAO,yBAA2BsrE,EAAe,iBAAmBx6D,EAAKgwB,KACzF,EAIX,EAEI4+C,EAAmB,SAA0B3H,GAC/C,QAAK0H,EAAc1H,EAAU,WAAY,cAIrCA,EAASv+E,QAAQ,MAAQ,KAC3B2lF,EAAIjgF,MAAM,uEAAuEnG,OAAOg/E,EAAU,OAC3F,GAIX,EAEI4H,EAAoB,SAA2BC,GACjD,QAAKH,EAAcG,EAAW,YAAa,YAIvCA,IAAcvF,EAAUgD,gBAAkBuC,IAAcvF,EAAUiD,kBACpE6B,EAAIjgF,MAAM,mCAAmCnG,OAAOshF,EAAUiD,iBAAkB,UAAUvkF,OAAOshF,EAAUgD,eAAgB,OACpH,KAGLuC,IAAcvF,EAAUgD,gBAAuC,qBAAdphF,YAA8BA,UAAU4jF,cAC3FV,EAAIjgF,MAAM,mEACH,GAIX,EAGI4gF,EAAqB,SAA4B1H,GACnD,IAAI2H,EAAYjvE,EAAKsnE,GAErB,GAAkB,WAAd2H,EAEF,OADAZ,EAAIjgF,MAAM,2EAA6E6gF,EAAY,cAC5F,CAAC,EAGV,GAAI5hF,OAAO8pB,KAAKmwD,GAAYt/E,OAASuhF,EAAUI,kBAE7C,OADA0E,EAAIjgF,MAAM,yDACH,CAAC,EAGV,IAAI8gF,EAAO,CAAC,EAEZ,IAAK,IAAIC,KAAY7H,EACnB,GAAKj6E,OAAOC,UAAUC,eAAetD,KAAKq9E,EAAY6H,GAAtD,CAKA,IAAI76E,EAAM66E,EACNC,EAAUpvE,EAAK1L,GAEH,WAAZ86E,IACF96E,EAAMy6B,OAAOz6B,GACb+5E,EAAIl2C,KAAK,mDAAqDi3C,EAAU,yBAA2B96E,EAAM,MAI3G,IAAI4L,EAAQmvE,GAAsB/6E,EAAKgzE,EAAW6H,IAEpC,OAAVjvE,IAIJgvE,EAAK56E,GAAO4L,EAlBZ,CAqBF,OAAOgvE,CACT,EAEII,GAAoB,CAAC,MAAO,WAAY,YAAa,SAAU,WAE/DD,GAAwB,SAASA,EAAsB/6E,EAAK4L,GAC9D,IAAIqvE,EAAYvvE,EAAKE,GAErB,IAA8C,IAA1CovE,GAAkB5mF,QAAQ6mF,GAC5BlB,EAAIl2C,KAAK,0BAA4B7jC,EAAM,6BAA+Bi7E,EAAY,cACtFrvE,EAAQ,UACH,GAAkB,cAAdqvE,EACTrvE,EAAQ,UACH,GAAkB,UAAdqvE,EACTrvE,EAAQ6uB,OAAO7uB,GACfmuE,EAAIl2C,KAAK,0BAA4B7jC,EAAM,wCAA0C4L,QAChF,GAAkB,UAAdqvE,EAAuB,CAIhC,IAFA,IAAIC,EAAY,GAEPznF,EAAI,EAAGA,EAAImY,EAAMlY,OAAQD,IAAK,CACrC,IAAI0nF,EAAUvvE,EAAMnY,GAChB2nF,EAAW1vE,EAAKyvE,GAEH,UAAbC,EAGoB,WAAbA,EACTF,EAAUtrE,KAAK8qE,EAAmBS,IAElCD,EAAUtrE,KAAKmrE,EAAsB/6E,EAAKm7E,IAL1CpB,EAAIl2C,KAAK,wBAA0Bu3C,EAAW,+CAOlD,CAEAxvE,EAAQsvE,CACV,KAAyB,WAAdD,IACTrvE,EAAQ8uE,EAAmB9uE,IAG7B,OAAOA,CACT,EAEIyvE,GAAiB,SAAwBC,GAC3C,IAAIC,EAAa7vE,EAAK4vE,GAEtB,GAAmB,WAAfC,EAEF,OADAxB,EAAIjgF,MAAM,uEAAyEyhF,EAAa,cACzF,CAAC,EAGV,IAAIX,EAAO,CAAC,EAEZ,IAAK,IAAIY,KAASF,EAChB,GAAKviF,OAAOC,UAAUC,eAAetD,KAAK2lF,EAAQE,GAAlD,CAKA,IAAIx7E,EAAMw7E,EACNV,EAAUpvE,EAAK1L,GAEH,WAAZ86E,IACF96E,EAAMy6B,OAAOz6B,GACb+5E,EAAIl2C,KAAK,gDAAkDi3C,EAAU,yBAA2B96E,EAAM,MAIxG,IAAI4L,EAAQ6vE,GAAkBz7E,EAAKs7E,EAAOE,IAE5B,OAAV5vE,IAIJgvE,EAAK56E,GAAO4L,EAlBZ,CAqBF,OAAOgvE,CACT,EAEIa,GAAoB,SAA2Bz7E,EAAK07E,GACtD,IAAIC,EAAgBjwE,EAAKgwE,GAEzB,GAAsB,WAAlBC,EACF,OAAOD,EAGT,GAAsB,SAAlBC,GAA8C,WAAlBA,GAAgD,YAAlBA,EAG5D,OAFAD,EAAYjhD,OAAOihD,GACnB3B,EAAIl2C,KAAK,gDAAkD83C,EAAgB,yBAA2BD,EAAY,KAC3GA,EAGT,GAAsB,UAAlBC,EAA2B,CAI7B,IAFA,IAAIT,EAAY,GAEPznF,EAAI,EAAGA,EAAIioF,EAAUhoF,OAAQD,IAAK,CACzC,IAAI0nF,EAAUO,EAAUjoF,GACpB2nF,EAAW1vE,EAAKyvE,GAEH,UAAbC,GAAqC,WAAbA,EAGJ,WAAbA,EACTF,EAAUtrE,KAAKurE,GACO,SAAbC,GAAoC,WAAbA,GAAsC,YAAbA,IACzDD,EAAU1gD,OAAO0gD,GACjBpB,EAAIl2C,KAAK,gDAAkDu3C,EAAW,yBAA2BD,EAAU,KAC3GD,EAAUtrE,KAAKurE,IAPfpB,EAAIl2C,KAAK,4BAA8Bu3C,EAAW,sBAStD,CAEA,OAAOF,CACT,CAEAnB,EAAIl2C,KAAK,gDAAkD83C,EAAgB,yDAC7E,EAGIC,GAAgB,SAAuBhhF,EAAMmF,GAC/CnF,EAAOA,EAAKnG,QAAQ,MAAO,OAAOA,QAAQ,OAAQ,OAClD,IAAIc,EAAQ,IAAI48B,OAAO,SAAWv3B,EAAO,aACrC0vB,EAAU/0B,EAAME,KAAKsK,GACzB,OAAmB,OAAZuqB,OAAmB15B,EAAYiwC,mBAAmBvW,EAAQ,GAAG71B,QAAQ,MAAO,KACrF,EAEIonF,GAAyB,WAC3B,MAAoC,qBAAtBC,iBAChB,EAEIC,GAAoB,SAA2BzuD,GACjD,SAAI+sD,EAAc/sD,EAAW,YAAa,WAAa,IAAIzqB,KAAKyqB,GAAWtqB,UAAY,KAIvF+2E,EAAIjgF,MAAM,sEACH,EACT,EAEIkiF,GAAQ,CACVpC,YAAaA,EACbE,YAAaA,EACbN,UAAWA,EACXO,IAAKA,EACLE,cAAeA,EACf4B,uBAAwBA,GACxBD,cAAeA,GACf1B,sBAAuBA,EACvBC,SAAUA,EACVkB,eAAgBA,GAChBhB,cAAeA,EACfK,mBAAoBA,EACpBJ,iBAAkBA,EAClBC,kBAAmBA,EACnBwB,kBAAmBA,IAGjBE,GAAc,WAChB,OAAO1D,EAAYt7E,QACrB,EAGIi/E,GAAc,mEAEdC,GAAW,WAGb,IAFA,IAAI9nF,EAAM,GAEDZ,EAAI,EAAGA,EAAI,KAAMA,EACxBY,GAAO6nF,GAAYr/C,OAAO5+B,KAAKioB,MAAsB,GAAhBjoB,KAAKgoB,WAG5C,OAAO5xB,CACT,EAEIy4C,GAAQ,SAAalyC,GACvB,IAIE,IAHA,IAAIwhF,EAAKztE,SAAS6vB,OAAO9pC,MAAM,KAC3BkX,EAAQ,KAEHnY,EAAI,EAAGA,EAAI2oF,EAAG1oF,OAAQD,IAAK,CAClC,IAAI0mC,EAAIiiD,EAAG3oF,GAEX,MAAuB,MAAhB0mC,EAAE0C,OAAO,GACd1C,EAAIA,EAAEtlC,UAAU,EAAGslC,EAAEzmC,QAGvB,GAAwB,IAApBymC,EAAE/lC,QAAQwG,GAAa,CACzBgR,EAAQuuB,EAAEtlC,UAAU+F,EAAKlH,OAAQymC,EAAEzmC,QACnC,KACF,CACF,CAEA,OAAOkY,CAGT,CAFE,MAAO/S,GACP,OAAO,IACT,CACF,EAEIgyB,GAAS,SAAgBjwB,GAC3B,IACE,IAAIyhF,EAAc1tE,SAAS6vB,OAAO9pC,MAAM,KAAKoB,KAAI,SAAUqkC,GACzD,OAAOA,EAAEmiD,WACX,IACIhyC,EAAS,GACTiyC,GAA4B,EAC5BC,GAAoB,EACpBC,OAAiB7rF,EAErB,IACE,IAAK,IAAgD8rF,EAA5CC,EAAYN,EAAYlzC,OAAO4E,cAAsBwuC,GAA6BG,EAAQC,EAAU9oE,QAAQq6B,MAAOquC,GAA4B,EAAM,CAC5J,IAAI/9C,EAASk+C,EAAM9wE,MAEnB,MAA4B,MAArB4yB,EAAO3B,OAAO,GACnB2B,EAASA,EAAO3pC,UAAU,GAGC,IAAzB2pC,EAAOpqC,QAAQwG,IACjB0vC,EAAO16B,KAAK4uB,EAAO3pC,UAAU+F,EAAKlH,QAEtC,CAcF,CAbE,MAAO2uC,GACPm6C,GAAoB,EACpBC,EAAiBp6C,CACnB,CAAE,QACA,IACOk6C,GAAiD,MAApBI,EAAUC,QAC1CD,EAAUC,QAMd,CAJE,QACA,GAAIJ,EACF,MAAMC,CAEV,CACF,CAEA,OAAOnyC,CAGT,CAFE,MAAOzxC,GACP,MAAO,EACT,CACF,EAEIy0C,GAAQ,SAAa1yC,EAAMgR,EAAOixE,GACpC,IAAIC,EAAoB,OAAVlxE,EAAiBixE,EAAKE,gBAAkB,EAEtD,GAAID,EAAS,CACX,IAAIl6E,EAAO,IAAIC,KACfD,EAAKo6E,QAAQp6E,EAAKI,UAAsB,GAAV85E,EAAe,GAAK,GAAK,KACvDA,EAAUl6E,CACZ,CAEA,IAAIvO,EAAMuG,EAAO,IAAMgR,EAEnBkxE,IACFzoF,GAAO,aAAeyoF,EAAQ75E,eAGhC5O,GAAO,WAEHwoF,EAAKlrD,SACPt9B,GAAO,YAAcwoF,EAAKlrD,QAGxBkrD,EAAKI,SACP5oF,GAAO,YAGLwoF,EAAKK,WACP7oF,GAAO,cAAgBwoF,EAAKK,UAG9BvuE,SAAS6vB,OAASnqC,CACpB,EAEI8oF,GAAmB,WACrB,IAEIC,EAFA5+C,EAASvlB,UAAUvlB,OAAS,QAAsB9C,IAAjBqoB,UAAU,GAAmBA,UAAU,GAAK,GAC7E+tB,EAAWxI,EAAO9pC,MAAM,KAAKugF,EAAUuB,uBAO3C,OAJIxvC,IACFo2C,EAAcxO,SAAS5nC,EAAU,KAG/Bo2C,IAGFpB,GAAMjC,IAAIl2C,KAAK,qCAAqClwC,OAAO6qC,IACpD,EAEX,EAEI6+C,GAAkB,SAAyBC,GAC7C,OAAO3I,EAAmB2I,GAAShpE,MAAK,SAAUkmB,EAAIG,GACpD,IAAI4iD,EAAKJ,GAAiB3iD,GACtBgjD,EAAKL,GAAiBxiD,GAG1B,OAAO6iD,EAAKD,CACd,GACF,EAGIE,GAAoB,WACtB,IAAIZ,EAAO5jE,UAAUvlB,OAAS,QAAsB9C,IAAjBqoB,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC5EykE,EAAazI,EAAU2B,mBAAqBuF,KAEhD,GAAwB,qBAAbxtE,SACT,OAAO,EAGT,IAAIgvE,GAAqB,EAEzB,IACE,IAAIl2E,EAAMgzB,OAAO53B,KAAKiD,OACtBwnC,GAAMowC,EAAYj2E,EAAKo1E,GACvBb,GAAMjC,IAAI7iE,KAAK,gCACfymE,EAAqB7wC,GAAM4wC,EAAa,OAASj2E,CAMnD,CALE,MAAO5O,GACPmjF,GAAMjC,IAAIl2C,KAAK,oDAAqDlwC,OAAOkF,EAAG,KAChF,CAAE,QACAmjF,GAAMjC,IAAI7iE,KAAK,yCACfo2B,GAAMowC,EAAY,KAAMb,EAC1B,CAEA,OAAOc,CACT,EAEIC,GAAa,CACfplF,IAAK80C,GACL/0C,IAAKu0C,GACLjiB,OAAQA,GACRsyD,iBAAkBA,GAClBE,gBAAiBA,GACjBI,kBAAmBA,IAGjBI,GAAU,SAAiBt/E,GAC7B,IAAIu/E,EAAkBvF,EAAYt7E,SAAWs7E,EAAYt7E,SAAS80B,SAAW,GAE7E,GAAIxzB,EAAK,CACP,GAAwB,qBAAboQ,SAA0B,CACnC,IAAIoxB,EAAIpxB,SAASqH,cAAc,KAE/B,OADA+pB,EAAE7iC,KAAOqB,EACFwhC,EAAEhO,UAAY+rD,CACvB,CAEA,GAAmB,oBAAR9rD,IAAoB,CAC7B,IAAI8I,EAAI,IAAI9I,IAAIzzB,GAChB,OAAOu8B,EAAE/I,UAAY+rD,CACvB,CACF,CAEA,OAAOA,CACT,EAEIC,GAAY,SAAmBx/E,GACjC,IAAIoD,EAAOk8E,GAAQt/E,GACfy/E,EAAQr8E,EAAKjN,MAAM,KACnBupF,EAAS,GACTC,EAAQ,YAAc/B,KAC1B,GAAIH,GAAMH,yBAA0B,MAAO,GAE3C,IAAK,IAAIpoF,EAAIuqF,EAAMtqF,OAAS,EAAGD,GAAK,IAAKA,EACvCwqF,EAAOruE,KAAKouE,EAAMljF,MAAMrH,GAAG4b,KAAK,MAGlC,IAAK,IAAIiiE,EAAK,EAAGA,EAAK2M,EAAOvqF,SAAU49E,EAAI,CACzC,IAAI3/C,EAASssD,EAAO3M,GAChBuL,EAAO,CACTlrD,OAAQ,IAAMA,GAIhB,GAFAisD,GAAWplF,IAAI0lF,EAAO,EAAGrB,GAErBe,GAAWrlF,IAAI2lF,GAEjB,OADAN,GAAWplF,IAAI0lF,EAAO,KAAMrB,GACrBlrD,CAEX,CAEA,MAAO,EACT,EAKIwsD,GAAW,CACbpB,oBAAgBnsF,EAChB+gC,YAAQ/gC,GAGN,GAAQ,WACVutF,GAAW,CACTpB,oBAAgBnsF,EAChB+gC,YAAQ/gC,EAEZ,EAEIyL,GAAU,SAAiBwgF,GAC7B,GAAyB,IAArB5jE,UAAUvlB,OACZ,OAAOyqF,GAGTtB,EAAOA,GAAQ,CAAC,EAChBsB,GAASpB,eAAiBF,EAAKE,eAC/BoB,GAASlB,OAASJ,EAAKI,OACvBkB,GAASjB,SAAWL,EAAKK,SACzB,IAAIvrD,EAAUqqD,GAAM/B,cAAc4C,EAAKlrD,QAAwB,IAAMosD,GAAU9B,KAAc/+E,MAA5C2/E,EAAKlrD,OAClDruB,EAAQrF,KAAKgoB,SACjBk4D,GAASxsD,OAASA,EAClBn5B,GAAI,iBAAkB8K,GACtB,IAAI86E,EAAS7lF,GAAI,kBAQjB,OANK6lF,GAAUA,IAAW96E,IACxBquB,EAAS,MAGX0uB,GAAO,kBACP89B,GAASxsD,OAASA,EACXwsD,EACT,EAEIE,GAAkB,SAAyBzjF,GAE7C,IAAI0jF,EAAS,GAMb,OAJIH,GAASxsD,SACX2sD,EAAuC,MAA9BH,GAASxsD,OAAOkL,OAAO,GAAashD,GAASxsD,OAAO98B,UAAU,GAAKspF,GAASxsD,QAGhF/2B,EAAO0jF,CAChB,EAEI/lF,GAAM,SAAaqC,GACrB,IAAI2jF,EAASF,GAAgBzjF,GAAQ,IACjCgR,EAAQgyE,GAAWrlF,IAAIgmF,GAE3B,IACE,GAAI3yE,EACF,OAAO/L,KAAK4E,MAAM+zE,EAAOF,OAAO1sE,GAIpC,CAFE,MAAO/S,GACP,OAAO,IACT,CAEA,OAAO,IACT,EAEIL,GAAM,SAAaoC,EAAMgR,GAC3B,IAEE,OADAgyE,GAAWplF,IAAI6lF,GAAgBzjF,GAAO49E,EAAOJ,OAAOv4E,KAAKC,UAAU8L,IAASuyE,KACrE,CAGT,CAFE,MAAOtlF,GACP,OAAO,CACT,CACF,EAEI2lF,GAAS,SAAgB5jF,EAAMgR,GACjC,IAEE,OADAgyE,GAAWplF,IAAI6lF,GAAgBzjF,GAAOgR,EAAOuyE,KACtC,CAGT,CAFE,MAAOtlF,GACP,OAAO,CACT,CACF,EAEI4lF,GAAS,SAAgB7jF,GAC3B,IAAI2jF,EAASF,GAAgBzjF,GAAQ,IACrC,OAAOgjF,GAAWrlF,IAAIgmF,EACxB,EAEIl+B,GAAS,SAAgBzlD,GAC3B,IAEE,OADAgjF,GAAWplF,IAAI6lF,GAAgBzjF,GAAO,KAAMujF,KACrC,CAGT,CAFE,MAAOtlF,GACP,OAAO,CACT,CACF,EAEI6lF,GAAS,CACXC,MAAO,GACPtiF,QAASA,GACT9D,IAAKA,GACLC,IAAKA,GACL6nD,OAAQA,GACRm+B,OAAQA,GACRC,OAAQA,IAGNG,GAEJ,WACE,SAASA,IACP7K,EAAgBr+E,KAAMkpF,GAEtBlpF,KAAKI,IAAM,IAAIyF,IACf7F,KAAKhC,OAAS,CAChB,CAuCA,OArCA0gF,EAAawK,EAAe,CAAC,CAC3B5+E,IAAK,MACL4L,MAAO,SAAaiE,GAClB,IAAIgT,EAAOpmB,MAAM8mB,KAAK7tB,KAAKI,IAAI+sB,QAC3B7iB,EAAM6iB,EAAKhT,GACf,OAAOna,KAAKI,IAAIyC,IAAIyH,EACtB,GACC,CACDA,IAAK,UACL4L,MAAO,SAAiB5L,GACtB,OAAOtK,KAAKI,IAAIyC,IAAIyH,EACtB,GACC,CACDA,IAAK,UACL4L,MAAO,SAAiB5L,EAAK4L,GACtBlW,KAAKI,IAAI9B,IAAIgM,KAChBtK,KAAKhC,QAAU,GAGjBgC,KAAKI,IAAI0C,IAAIwH,EAAK4L,EACpB,GACC,CACD5L,IAAK,aACL4L,MAAO,SAAoB5L,GACrBtK,KAAKI,IAAI9B,IAAIgM,KACftK,KAAKhC,QAAU,EACfgC,KAAKI,IAAIsX,OAAOpN,GAEpB,GACC,CACDA,IAAK,QACL4L,MAAO,WACLlW,KAAKI,IAAIq7B,QACTz7B,KAAKhC,OAAS,CAChB,KAGKkrF,CACT,CA9CA,GAuDMC,GAA8B,WAChC,IACIpmF,EADAgP,EAAM,IAAI5E,KAGd,IAIE,OAHA01E,EAAYp2D,aAAaP,QAAQna,EAAKA,GACtChP,EAAS8/E,EAAYp2D,aAAaL,QAAQra,KAASgzB,OAAOhzB,GAC1D8wE,EAAYp2D,aAAaN,WAAWpa,GAC7BhP,CAET,CADE,MAAOI,GACT,CAEA,OAAO,CACT,EAEA,GAAIgmF,KACF18D,EAAeo2D,EAAYp2D,kBACtB,GAA2B,qBAAhBo2D,GAA+BA,EAAYuG,cAG3D,IACE38D,EAAeo2D,EAAYuG,cAAcvG,EAAYt7E,SAAS80B,SAEhE,CADE,MAAOl5B,IACT,MACK,GAAwB,qBAAb8V,SAA0B,CAG1C,IAAIowE,GAAMpwE,SAASqH,cAAc,OAC7BgpE,GAAU,eACdD,GAAI7oE,MAAMorD,QAAU,OACpB3yD,SAAS0c,qBAAqB,QAAQ,GAAGrU,YAAY+nE,IAEjDA,GAAIE,cACNF,GAAIE,YAAY,qBAChB98D,EAAe,CACbzuB,OAAQ,EACRkuB,QAAS,SAAiB1sB,EAAGm8B,GAC3B0tD,GAAI/rD,KAAKgsD,IAEJD,GAAIG,aAAahqF,IACpBQ,KAAKhC,SAGPqrF,GAAIxzD,aAAar2B,EAAGm8B,GACpB0tD,GAAII,KAAKH,GACX,EACAl9D,QAAS,SAAiB5sB,GAExB,OADA6pF,GAAI/rD,KAAKgsD,IACFD,GAAIG,aAAahqF,EAC1B,EACA2sB,WAAY,SAAoB3sB,GAC9B6pF,GAAI/rD,KAAKgsD,IAELD,GAAIG,aAAahqF,IACnBQ,KAAKhC,SAGPqrF,GAAI/d,gBAAgB9rE,GACpB6pF,GAAII,KAAKH,GACX,EACA7tD,MAAO,WACL4tD,GAAI/rD,KAAKgsD,IACT,IACII,EADA3rF,EAAI,EAGR,MAAO2rF,EAAOL,GAAIM,YAAYC,gBAAgB/qD,WAAW9gC,KACvDsrF,GAAI/d,gBAAgBoe,EAAKxkF,MAG3BmkF,GAAII,KAAKH,IACTtpF,KAAKhC,OAAS,CAChB,EACAsM,IAAK,SAAa9K,GAEhB,OADA6pF,GAAI/rD,KAAKgsD,IACFD,GAAIM,YAAYC,gBAAgB/qD,WAAWr/B,EACpD,GAEF6pF,GAAI/rD,KAAKgsD,IACT78D,EAAazuB,OAASqrF,GAAIM,YAAYC,gBAAgB/qD,WAAW7gC,OAErE,MAAWsoF,GAAMH,2BAEf15D,EAAe,IAAIy8D,IAGhBz8D,IAEHA,EAAe,CACbzuB,OAAQ,EACRkuB,QAAS,SAAiB1sB,EAAGm8B,GAAI,EACjCvP,QAAS,SAAiB5sB,GAAI,EAC9B2sB,WAAY,SAAoB3sB,GAAI,EACpCi8B,MAAO,WAAkB,EACzBnxB,IAAK,SAAa9K,GAAI,IAM5B,IA8EIqqF,GA9EAC,GAAiBr9D,EAOjBs9D,GAAgB,WAClB/pF,KAAKiW,QAAU,IACjB,EAEA8zE,GAAczmF,UAAU0mF,WAAa,WACnC,GAAqB,OAAjBhqF,KAAKiW,QACP,OAAOjW,KAAKiW,QAGd,GAAIiyE,GAAWH,oBACb/nF,KAAKiW,QAAU+yE,OACV,CAGL,IAAIiB,EAAY,mBAChBjqF,KAAKiW,QAAU,CACbwyE,SAAU,CACRpB,oBAAgBnsF,EAChB+gC,YAAQ/gC,EACRqsF,QAAQ,GAEV0B,MAAO,WACLjpF,KAAKyoF,SAAW,CACdpB,oBAAgBnsF,EAChB+gC,YAAQ/gC,EACRqsF,QAAQ,EAEZ,EACA5gF,QAAS,SAAiBwgF,GACxB,OAAyB,IAArB5jE,UAAUvlB,OACLgC,KAAKyoF,UAGdtB,EAAOA,GAAQ,CAAC,EAChBnnF,KAAKyoF,SAASpB,eAAiBF,EAAKE,gBAAkBrnF,KAAKyoF,SAASpB,eAEpErnF,KAAKyoF,SAASxsD,OAASkrD,EAAKlrD,QAAUj8B,KAAKyoF,SAASxsD,QAAU4mD,GAAeA,EAAYt7E,UAAYs7E,EAAYt7E,SAAS80B,SACnHr8B,KAAKyoF,SAASlB,OAASJ,EAAKI,SAAU,EAC/C,EACA1kF,IAAK,SAAaqC,GAChB,IACE,OAAOiF,KAAK4E,MAAM+6E,GAAe19D,QAAQ69D,EAAY/kF,GAC1C,CAAX,MAAO/B,IAAI,CAIb,OAAO,IACT,EACAL,IAAK,SAAaoC,EAAMgR,GACtB,IAEE,OADA4zE,GAAe59D,QAAQ+9D,EAAY/kF,EAAMiF,KAAKC,UAAU8L,KACjD,CACI,CAAX,MAAO/S,IAAI,CAIb,OAAO,CACT,EACAwnD,OAAQ,SAAgBzlD,GACtB,IACE4kF,GAAe39D,WAAW89D,EAAY/kF,EAGxC,CAFE,MAAO/B,IACP,OAAO,CACT,CACF,EAEJ,CAEA,OAAOnD,KAAKiW,OACd,EAGA,IAAIi0E,IAAuBL,GAAuB,CAAC,EAAGhL,EAAgBgL,GAAsBtK,EAAU8B,iBAAiB,GAAOxC,EAAgBgL,GAAsBtK,EAAU+B,cAAc,GAAOzC,EAAgBgL,GAAsBtK,EAAUgC,eAAe,GAAO1C,EAAgBgL,GAAsBtK,EAAUiC,iBAAiB,GAAOqI,IAS7UM,GAEJ,WACE,SAASA,EAAgBC,GACvB,IAAIC,EAAaD,EAAKC,WAClBC,EAAiBF,EAAKE,eACtBruD,EAASmuD,EAAKnuD,OACdsrD,EAAS6C,EAAK7C,OACdC,EAAW4C,EAAK5C,SAChBH,EAAiB+C,EAAK/C,eACtBpxE,EAAUm0E,EAAKn0E,QAEnBooE,EAAgBr+E,KAAMmqF,GAEtBnqF,KAAKqqF,WAAaA,EAClBrqF,KAAKi8B,OAASA,EACdj8B,KAAKunF,OAASA,EACdvnF,KAAKwnF,SAAWA,EAChBxnF,KAAKqnF,eAAiBA,EACtBrnF,KAAKuqF,aAAe,GACpB,IAAI75C,EAAM61C,KAAgBA,KAAc/+E,UAAOtM,EAC3CsvF,EAAoBnC,GAAU33C,GAGlC,GAFA1wC,KAAKuqF,aAAetuD,IAAWuuD,EAAoB,IAAMA,EAAoB,MAEzEN,GAAoBj0E,GACtBjW,KAAKiW,QAAUA,MACV,CACL,IAAIw0E,EAAuBH,IAAmBpC,GAAWH,kBAAkB,CACzE9rD,OAAQj8B,KAAKuqF,aACbhD,OAAQvnF,KAAKunF,OACbC,SAAUxnF,KAAKwnF,SACfH,eAAgBrnF,KAAKqnF,iBAIrBrnF,KAAKiW,QADHw0E,EACalL,EAAUgC,cAEVhC,EAAU8B,eAE7B,CACF,CAwKA,OAtKA3C,EAAayL,EAAiB,CAAC,CAC7B7/E,IAAK,sBACL4L,MAAO,WACL,IAAKlW,KAAKi8B,OACR,OAAOj8B,KAAKqqF,WAGd,IAAIzB,EAAmC,MAA1B5oF,KAAKi8B,OAAOkL,OAAO,GAAannC,KAAKi8B,OAAO98B,UAAU,GAAKa,KAAKi8B,OAC7E,MAAO,GAAGh+B,OAAO+B,KAAKqqF,YAAYpsF,OAAO2qF,EAAS,IAAI3qF,OAAO2qF,GAAU,GACzE,GAMC,CACDt+E,IAAK,OACL4L,MAAO,SAAcw0E,GACnB,IAAIzN,EAAWyN,EAAMzN,SACjBF,EAAS2N,EAAM3N,OACf4N,EAASD,EAAMC,OACf/yD,EAAY8yD,EAAM9yD,UAClBgzD,EAAgBF,EAAME,cACtBn7D,EAAUi7D,EAAMj7D,QAChBo7D,EAAaH,EAAMG,WACnBC,EAAiBJ,EAAMI,eAE3B,GAAI9qF,KAAKiW,UAAYspE,EAAU+B,aAA/B,CAIA,IAAIprE,EAAQ,CAAC+mE,EAAU6F,EAAOJ,OAAO3F,GAAU,IAC/C4N,EAAS,IAAM,GAAI/yD,EAAYA,EAAU5oB,SAAS,IAAM,IACxD47E,EAAgBA,EAAc57E,SAAS,IAAM,IAC7CygB,EAAUA,EAAQzgB,SAAS,IAAM,IAAK67E,EAAaA,EAAW77E,SAAS,IAAM,IAAK87E,EAAiBA,EAAe97E,SAAS,IAAM,KAAK2K,KAAK,KAE3I,OAAQ3Z,KAAKiW,SACX,KAAKspE,EAAUiC,gBACTqB,EAAYr0D,gBACdq0D,EAAYr0D,eAAetC,QAAQlsB,KAAKqqF,WAAYn0E,GAGtD,MAEF,KAAKqpE,EAAUgC,cACbuI,GAAe59D,QAAQlsB,KAAKqqF,WAAYn0E,GACxC,MAEF,KAAKqpE,EAAU8B,gBACbrhF,KAAK+qF,WAAW70E,GAChB,MArBJ,CAuBF,GACC,CACD5L,IAAK,aACL4L,MAAO,SAAoBA,GACzBgyE,GAAWplF,IAAI9C,KAAKgrF,sBAAuB90E,EAAO,CAChD+lB,OAAQj8B,KAAKuqF,aACbhD,OAAQvnF,KAAKunF,OACbC,SAAUxnF,KAAKwnF,SACfH,eAAgBrnF,KAAKqnF,gBAEzB,GACC,CACD/8E,IAAK,OACL4L,MAAO,WACL,IAEIvX,EAFAssF,EAAQjrF,KAIZ,GAAIA,KAAKiW,UAAYspE,EAAU8B,gBAAiB,CAC9C,IAAI6J,EAAYlrF,KAAKgrF,sBAAwB,IACzCG,EAAajD,GAAW/yD,OAAO+1D,GAEnC,GAA0B,IAAtBC,EAAWntF,QAAsC,IAAtBmtF,EAAWntF,OACxCW,EAAMwsF,EAAW,OACZ,CAGL,IAAIC,EAAelD,GAAWP,gBAAgBwD,GAAY,GAC1DA,EAAW/vD,SAAQ,WACjB,OAAO8sD,GAAWplF,IAAImoF,EAAMD,sBAAuB,KAAM,CAAC,EAC5D,IACAhrF,KAAK+qF,WAAWK,GAChBzsF,EAAMupF,GAAWrlF,IAAIqoF,EACvB,CACF,CAMA,GAJKvsF,IACHA,EAAMmrF,GAAe19D,QAAQpsB,KAAKqqF,cAG/B1rF,EACH,IACEA,EAAMkkF,EAAYr0D,gBAAkBq0D,EAAYr0D,eAAepC,QAAQpsB,KAAKqqF,WAG9E,CAFE,MAAOlnF,IACPmjF,GAAMjC,IAAI7iE,KAAK,+CAAgDvjB,OAAOkF,GAAG,KAC3E,CAGF,IAAKxE,EACH,OAAO,KAGT,IAAIi2C,EAASj2C,EAAIK,MAAM,KACnB+9E,EAAS,KAEb,GAAInoC,EAAO2qC,EAAUoB,eACnB,IACE5D,EAAS+F,EAAOF,OAAOhuC,EAAO2qC,EAAUoB,eAG1C,CAFE,MAAOx9E,IACP45E,EAAS,IACX,CAGF,MAAO,CACLE,SAAUroC,EAAO2qC,EAAUmB,iBAC3B3D,OAAQA,EACR4N,OAA4C,MAApC/1C,EAAO2qC,EAAUqB,eACzBhpD,UAAWshD,SAAStkC,EAAO2qC,EAAUsB,kBAAmB,IACxD+J,cAAe1R,SAAStkC,EAAO2qC,EAAUuB,uBAAwB,IACjErxD,QAASypD,SAAStkC,EAAO2qC,EAAUwB,gBAAiB,IACpD8J,WAAY3R,SAAStkC,EAAO2qC,EAAUyB,mBAAoB,IAC1D8J,eAAgB5R,SAAStkC,EAAO2qC,EAAU0B,uBAAwB,IAEtE,GAQC,CACD32E,IAAK,QACL4L,MAAO,WACL,IAAIvX,EAiBJ,GAfIqB,KAAKiW,UAAYspE,EAAU8B,kBAC7B1iF,EAAMupF,GAAWrlF,IAAI7C,KAAKgrF,sBAAwB,KAClD9C,GAAWplF,IAAI9C,KAAKgrF,sBAAuB,KAAM,CAC/C/uD,OAAQj8B,KAAKuqF,aACbhD,OAAQvnF,KAAKunF,OACbC,SAAUxnF,KAAKwnF,SACfH,eAAgB,KAIf1oF,IACHA,EAAMmrF,GAAe19D,QAAQpsB,KAAKqqF,YAClCP,GAAeruD,UAGZ98B,EACH,IACEA,EAAMkkF,EAAYr0D,gBAAkBq0D,EAAYr0D,eAAepC,QAAQpsB,KAAKqqF,YAC5ExH,EAAYr0D,eAAeiN,OAG7B,CAFE,MAAOt4B,IACPmjF,GAAMjC,IAAI7iE,KAAK,+CAAgDvjB,OAAOkF,GAAG,KAC3E,CAGF,QAASxE,CACX,KAGKwrF,CACT,CA/MA,GAiNIkB,GAAa,SAAoBC,EAAWjhF,GAE9C,IAAIy+B,EAASwiD,EAAY,IAAMA,EAAUtsF,MAAM,KAAKoG,OAAO,GAAG,GAAGrG,QAAQ,MAAO,KAAO,GAEnFwsF,EAAa,SAAoBC,EAAWnhF,EAAO29E,EAAYl/C,GACjE,OAAOw9C,GAAMJ,cAAcsF,EAAWnhF,IAAUi8E,GAAMJ,cAAc8B,EAAYl/C,EAClF,EAEI2iD,EAAYF,EAAWhM,EAAU0C,WAAY53E,EAAO,SAAUy+B,GAC9D4iD,EAAYH,EAAWhM,EAAU2C,WAAY73E,EAAO,SAAUy+B,GAC9D6iD,EAAcJ,EAAWhM,EAAU4C,aAAc93E,EAAO,SAAUy+B,GAClE8iD,EAAUL,EAAWhM,EAAU6C,SAAU/3E,EAAO,SAAUy+B,GAC1D+iD,EAAaN,EAAWhM,EAAU8C,YAAah4E,EAAO,SAAUy+B,GAChEgjD,EAAU,CAAC,EAEXC,EAAe,SAAsBzhF,EAAK4L,GACvCowE,GAAM/B,cAAcruE,KACvB41E,EAAQxhF,GAAO4L,EAEnB,EAOA,OALA61E,EAAaxM,EAAU0C,WAAYwJ,GACnCM,EAAaxM,EAAU2C,WAAYwJ,GACnCK,EAAaxM,EAAU4C,aAAcwJ,GACrCI,EAAaxM,EAAU6C,SAAUwJ,GACjCG,EAAaxM,EAAU8C,YAAawJ,GAC7BC,CACT,EAQIE,GAAa,OACbC,GAAgB,UAChBC,GAAmB,YACnBC,GAAiB,WACjBC,GAAa,OACbC,GAAkB,WAClBC,GAAe,SACfC,GAAmB,aACnBC,GAAoB,cACpBC,GAAgB,UAYhBC,GAAW,WACb1sF,KAAK2sF,yBAA2B,CAAC,EACjC3sF,KAAKs9E,WAAa,EACpB,EAaAoP,GAASppF,UAAU+d,IAAM,SAAU8jE,EAAUjvE,GAO3C,MANoB,WAAhBF,EAAKE,IAAuC,WAAhBF,EAAKE,GACnClW,KAAK4sF,cAAcZ,GAAY7G,EAAUjvE,GAEzCowE,GAAMjC,IAAIjgF,MAAM,+BAAiC4R,EAAKE,GAAS,gCAG1DlW,IACT,EAkBA0sF,GAASppF,UAAUupF,OAAS,SAAU1H,EAAUjvE,GAG9C,OAFAlW,KAAK4sF,cAAcX,GAAe9G,EAAUjvE,GAErClW,IACT,EAUA0sF,GAASppF,UAAUwpF,SAAW,WAC5B,OAAIzpF,OAAO8pB,KAAKntB,KAAK2sF,0BAA0B3uF,OAAS,GACjDqF,OAAOC,UAAUC,eAAetD,KAAKD,KAAK2sF,yBAA0BT,KACvE5F,GAAMjC,IAAIjgF,MAAM,sGAGXpE,OAGTA,KAAK2sF,yBAAyBT,IAAoB,IAC3ClsF,KACT,EAmBA0sF,GAASppF,UAAUkpD,QAAU,SAAU24B,EAAUjvE,GAG/C,OAFAlW,KAAK4sF,cAAcT,GAAgBhH,EAAUjvE,GAEtClW,IACT,EAcA0sF,GAASppF,UAAUR,IAAM,SAAUqiF,EAAUjvE,GAG3C,OAFAlW,KAAK4sF,cAAcR,GAAYjH,EAAUjvE,GAElClW,IACT,EAeA0sF,GAASppF,UAAUypF,QAAU,SAAU5H,EAAUjvE,GAG/C,OAFAlW,KAAK4sF,cAAcP,GAAiBlH,EAAUjvE,GAEvClW,IACT,EAWA0sF,GAASppF,UAAU0pF,MAAQ,SAAU7H,GAGnC,OAFAnlF,KAAK4sF,cAAcN,GAAcnH,EAAU,KAEpCnlF,IACT,EAYA0sF,GAASppF,UAAU2pF,UAAY,SAAU9H,EAAUjvE,GAGjD,OAFAlW,KAAK4sF,cAAcL,GAAkBpH,EAAUjvE,GAExClW,IACT,EAWA0sF,GAASppF,UAAU4pF,WAAa,SAAU/H,EAAUjvE,GAGlD,OAFAlW,KAAK4sF,cAAcJ,GAAmBrH,EAAUjvE,GAEzClW,IACT,EAUA0sF,GAASppF,UAAUqnD,OAAS,SAAUw6B,EAAUjvE,GAG9C,OAFAlW,KAAK4sF,cAAcH,GAAetH,EAAUjvE,GAErClW,IACT,EAQA0sF,GAASppF,UAAUspF,cAAgB,SAAUnoE,EAAW0gE,EAAUjvE,GAE5D7S,OAAOC,UAAUC,eAAetD,KAAKD,KAAK2sF,yBAA0BT,IACtE5F,GAAMjC,IAAIjgF,MAAM,4EAA8EqgB,IAKrD,IAAvCzkB,KAAKs9E,WAAW5+E,QAAQymF,IAKvB9hF,OAAOC,UAAUC,eAAetD,KAAKD,KAAK2sF,yBAA0BloE,KACvEzkB,KAAK2sF,yBAAyBloE,GAAa,CAAC,GAG9CzkB,KAAK2sF,yBAAyBloE,GAAW0gE,GAAYjvE,EACrDlW,KAAKs9E,WAAWpjE,KAAKirE,IATnBmB,GAAMjC,IAAIjgF,MAAM,kBAAoB+gF,EAAW,uDAAyD1gE,EAU5G,EAMA,IAAI0oE,GAAU,SAAiBtkF,EAAKyiB,EAAM9gB,GACxCxK,KAAK6I,IAAMA,EACX7I,KAAKsrB,KAAOA,GAAQ,CAAC,EACrBtrB,KAAKwK,QAAUA,CACjB,EAEI4iF,GAAc,+BAElB,SAASC,GAAWC,EAAK9iF,GACvB,IAAK,IAAI+iF,KAAU/iF,GACb+iF,IAAWH,IAAgB5iF,EAAQ+iF,KAIvCD,EAAIE,iBAAiBD,EAAQ/iF,EAAQ+iF,GAEzC,CAEAJ,GAAQ7pF,UAAU0+B,KAAO,SAAUhtB,GACjC,IAAI+yB,IAAO86C,EAAY4K,eAEvB,GAAI1lD,EAAM,CACR,IAAI2lD,EAAM,IAAI7K,EAAY4K,eAC1BC,EAAIz6D,KAAK,OAAQjzB,KAAK6I,KAAK,GAE3B6kF,EAAI53D,OAAS,WACX9gB,EAAS,IAAK04E,EAAIC,aACpB,EAEAD,EAAI33D,QAAU,WAEa,6BAArB23D,EAAIC,aACN34E,EAAS,IAAK04E,EAAIC,cAElB34E,EAAS,IAAK04E,EAAIC,aAEtB,EAEAD,EAAIjwD,UAAY,WAAa,EAE7BiwD,EAAIE,WAAa,WAAa,EAE9BF,EAAI1rD,KAAK,YAAsBhiC,KAAKsrB,MACtC,MAAO,GAA8B,qBAAnBuiE,eAAgC,CAChD,IAAIP,EAAM,IAAIO,eACdP,EAAIr6D,KAAK,OAAQjzB,KAAK6I,KAAK,GAE3BykF,EAAIQ,mBAAqB,WACA,IAAnBR,EAAI7rE,YACNzM,EAASs4E,EAAIx9D,OAAQw9D,EAAIK,aAE7B,EAEAN,GAAWC,EAAKttF,KAAKwK,SACrB8iF,EAAItrD,KAAK,YAAsBhiC,KAAKsrB,MACtC,KAAO,CACL,IAAIyiE,OAAiB7yF,EACrBkO,MAAMpJ,KAAK6I,IAAK,CACdiB,OAAQ,OACRU,QAASxK,KAAKwK,QACdP,KAAM,YAAsBjK,KAAKsrB,QAChC/M,MAAK,SAAUrT,GAEhB,OADA6iF,EAAiB7iF,EAAS4kB,OACnB5kB,EAASm8D,MAClB,IAAG9oD,MAAK,SAAUovE,GAChB34E,EAAS+4E,EAAgBJ,EAC3B,GACF,CAEF,EAcA,IAAIK,GAAU,WAEZhuF,KAAKiuF,OAAS,KAEdjuF,KAAKkuF,WAAa,KAClBluF,KAAKmuF,UAAY,EACjBnuF,KAAKouF,aAAe,KACpBpuF,KAAKquF,YAAc,IACrB,EAWAL,GAAQ1qF,UAAUgrF,aAAe,SAAsBC,GASrD,MARwB,WAApBv4E,EAAKu4E,GACPjI,GAAMjC,IAAIjgF,MAAM,mCAAqC4R,EAAKu4E,GAAa,sBAC9DjI,GAAM/B,cAAcgK,GAC7BjI,GAAMjC,IAAIjgF,MAAM,2BAEhBpE,KAAKkuF,WAAaK,EAGbvuF,IACT,EAWAguF,GAAQ1qF,UAAUkrF,YAAc,SAAqBC,GAOnD,MANuB,WAAnBz4E,EAAKy4E,GACPnI,GAAMjC,IAAIjgF,MAAM,kCAAoC4R,EAAKy4E,GAAY,sBAErEzuF,KAAKmuF,UAAYjV,SAASuV,GAGrBzuF,IACT,EAaAguF,GAAQ1qF,UAAUorF,SAAW,SAAkBC,GAO7C,MANoB,WAAhB34E,EAAK24E,GACPrI,GAAMjC,IAAIjgF,MAAM,+BAAiC4R,EAAK24E,GAAS,sBAE/D3uF,KAAKiuF,OAASU,EAGT3uF,IACT,EAWAguF,GAAQ1qF,UAAUsrF,eAAiB,SAAwBC,GAOzD,MAN0B,WAAtB74E,EAAK64E,GACPvI,GAAMjC,IAAIjgF,MAAM,qCAAuC4R,EAAK64E,GAAe,sBAE3E7uF,KAAKouF,aAAeS,EAGf7uF,IACT,EAYAguF,GAAQ1qF,UAAUwrF,mBAAqB,SAA4BC,GAOjE,MAN8B,WAA1B/4E,EAAK+4E,GACPzI,GAAMjC,IAAIjgF,MAAM,yCAA2C4R,EAAK+4E,GAAmB,sBAEnF/uF,KAAKquF,YAAc/H,GAAMtB,mBAAmB+J,GAGvC/uF,IACT,EAMAguF,GAAQ1qF,UAAU0rF,gBAAkB,WAClC,MAA0B,WAAtBh5E,EAAKhW,KAAKiuF,UACZ3H,GAAMjC,IAAIjgF,MAAM,6CACT,EAIX,EAMA4pF,GAAQ1qF,UAAU2rF,cAAgB,WAChC,IAAIjsE,EAAiC,WAA3BhN,EAAKhW,KAAKquF,aAA4BruF,KAAKquF,YAAc,CAAC,EAkBpE,OAhBwB,OAApBruF,KAAKkuF,aACPlrE,EAAIu8D,EAAUmC,oBAAsB1hF,KAAKkuF,YAGpB,OAAnBluF,KAAKmuF,YACPnrE,EAAIu8D,EAAUoC,kBAAoB3hF,KAAKmuF,WAGrB,OAAhBnuF,KAAKiuF,SACPjrE,EAAIu8D,EAAUqC,eAAiB5hF,KAAKiuF,QAGZ,OAAtBjuF,KAAKouF,eACPprE,EAAIu8D,EAAUsC,sBAAwB7hF,KAAKouF,cAGtCprE,CACT,EAUA,IAAIksE,GAAO,SAASA,EAAK7kD,GACvB,OAAOA,GAENA,EAED,GADA9hC,KAAKgoB,UAEL8Z,EAAI,GACJr7B,SAAS,KAER,CAAC,MACD,KACA,KACA,KACA,MACDjQ,QACA,SACAmwF,EAEF,EAEI,GAAc,WAChB,MAA4B,qBAAd/tF,YAA8BA,UAAU6G,WAAa7G,UAAU6G,UAAU,IAAM7G,UAAU8G,UAAY9G,UAAUguF,eAAiB,EAChJ,EAEIlnF,GAAW,CACb4yE,YAAa,IAUXuU,GAAsB,CACxBC,GAAI,KACJC,GAAI,MAGFC,GAAiB,SAAwBC,GAC3C,IAAIC,EAAclQ,EAAUO,cAE5B,OAAQ0P,GACN,KAAKJ,GAAoBE,GACvBG,EAAclQ,EAAUQ,iBACxB,MAEF,KAAKqP,GAAoBC,GACvBI,EAAclQ,EAAUO,cACxB,MAGJ,OAAO2P,CACT,EAEIC,GAAsB,SAA6BF,GACrD,IAAIG,EAAmBpQ,EAAUS,mBAEjC,OAAQwP,GACN,KAAKJ,GAAoBE,GACvBK,EAAmBpQ,EAAUU,sBAC7B,MAEF,KAAKmP,GAAoBC,GACvBM,EAAmBpQ,EAAUS,mBAC7B,MAGJ,OAAO2P,CACT,EAEI7wF,GAAU,SA2DV8wF,GAAkB,CACpBC,YAAatQ,EAAUO,cACvBgQ,aAAa,EACbC,iBAAkB,IAElB/H,WAAY,eAEZgI,eAAgB,MAEhBC,oBAAoB,EACpBC,qBAAqB,EACrB5F,gBAAgB,EAEhB6F,sBAAsB,EACtBl0D,OAAQ,GACRm0D,wBAAyB,IAEzBC,qBAAsB,GACtBC,YAAY,EACZC,eAAe,EACfC,cAAc,EACdC,iBAAiB,EACjBC,YAAY,EACZC,kBAAmB,CACjBC,WAAY,GACZC,cAAe,IAEjB5oF,SAAUA,GAAS4yE,cACnBiW,QAAS,CACP5rF,KAAM,eACNpG,QAASA,IAEXoF,SAAU,OACV6sF,6BAA6B,EAC7BpG,QAAQ,EACRlyD,QAAS,WAAoB,EAC7Bu4D,WAAY,WAAuB,EACnCC,kBAAmB,WAA8B,EACjDC,KAAM,CACJC,OAAQ,GACRpsC,OAAQ,GACRjmD,QAAS,GACTsyF,UAAW,IAEbtW,SAAU,MACVuW,cAAe,IACfC,YAAY,EACZC,kCAAkC,EAClCC,cAAc,EACdC,eAAgB,KAChBx7E,QAASspE,EAAU6B,gBACnBsQ,gBAAiB,CACfC,MAAM,EACNC,SAAS,EACTC,SAAS,EACTC,qBAAqB,EACrBC,cAAc,EACdC,KAAK,EACLC,YAAY,EACZhqF,UAAU,EACViqF,SAAS,EACTC,YAAY,EACZrX,UAAU,EACVsX,QAAQ,EACRC,cAAc,GAEhBvN,UAAWvF,EAAUgD,eACrB+P,iCAAiC,EACjCC,UAAW,mBACXC,kBAAmB,4BACnBC,gBAAiB,IACjBjoF,QAAS,CACP,eAAgB,mDAChB,+BAAgC,gBAElCglF,WAAYJ,GAAoBC,GAChCqD,kBAAkB,EAClBC,oBAAoB,EACpB/6D,UAAW,KACXg7D,UAAW,IAQTC,GAEJ,WACE,SAASA,IAQP,OAPAxU,EAAgBr+E,KAAM6yF,GAEjBA,EAAc5sF,WACjBjG,KAAK8yF,kBAAoBvT,EAAUO,cACnC+S,EAAc5sF,SAAWjG,MAGpB6yF,EAAc5sF,QACvB,CAuDA,OArDAy4E,EAAamU,EAAe,CAAC,CAC3BvoF,IAAK,UACL4L,MAAO,SAAiBs5E,EAAYc,EAAYt7E,GAC9C,IAAIrN,EAAW,QAEV2oF,GAAc,WAAazN,EAAYt7E,SAASI,WACnDA,EAAW,QAGb,IAAIgoF,EAAmBhoF,EAAW,MAAQ+nF,GAAoBF,GAC1DloF,EAAOtH,KACP+nC,IAAO86C,EAAY4K,eAEvB,GAAI1lD,EAAM,CACR,IAAI2lD,EAAM,IAAI7K,EAAY4K,eAC1BC,EAAIz6D,KAAK,MAAO08D,GAAkB,GAElCjC,EAAI53D,OAAS,WACX,IAAI5qB,EAAWf,KAAK4E,MAAM2+E,EAAIC,cAC9BrmF,EAAKwrF,kBAAoB5nF,EAAS,qBAE9B8J,GACFA,GAEJ,EAEA04E,EAAI33D,QAAU,WAAa,EAE3B23D,EAAIjwD,UAAY,WAAa,EAE7BiwD,EAAIE,WAAa,WAAa,EAE9BF,EAAI1rD,MACN,KAAO,CACL,IAAIsrD,EAAM,IAAIO,eACdP,EAAIr6D,KAAK,MAAO08D,GAAkB,GAElCrC,EAAIQ,mBAAqB,WACvB,GAAuB,IAAnBR,EAAI7rE,YAAmC,MAAf6rE,EAAIx9D,OAAgB,CAC9C,IAAI5kB,EAAWf,KAAK4E,MAAMu+E,EAAIK,cAC9BrmF,EAAKwrF,kBAAoB5nF,EAAS,qBAE9B8J,GACFA,GAEJ,CACF,EAEAs4E,EAAItrD,MACN,CACF,KAGK6wD,CACT,CAlEA,GAoEIE,GAAa,IAAIF,GAUjBG,GAAkB,SAAyB7U,GACxC9D,KAAmBiM,GAAMH,0BAC5BG,GAAMjC,IAAIl2C,KAAK,mJAGjBnuC,KAAKizF,cAAgB3M,GAAM/B,cAAcpG,GAAgBoB,EAAUC,iBAAmBrB,EAAav/E,cACnGoB,KAAKkzF,cAAgB,GACrBlzF,KAAKmzF,iBAAmB,GACxBnzF,KAAK2G,QAAUm4E,EAAc,CAAC,EAAG8Q,GAAiB,CAChDplF,QAASs0E,EAAc,CAAC,EAAG8Q,GAAgBplF,SAC3CmmF,kBAAmB7R,EAAc,CAAC,EAAG8Q,GAAgBe,mBACrDG,QAAShS,EAAc,CAAC,EAAG8Q,GAAgBkB,SAC3CI,KAAMpS,EAAc,CAAC,EAAG8Q,GAAgBsB,MACxCQ,gBAAiB5S,EAAc,CAAC,EAAG8Q,GAAgB8B,mBAErD1xF,KAAK+pF,eAAgB,IAAIA,IAAgBC,aACzChqF,KAAKozF,GAAK,GAEVpzF,KAAKqzF,UAAW,EAChBrzF,KAAKszF,kBAAmB,EACxBtzF,KAAKuzF,iBAAmB,GACxBvzF,KAAKwzF,4BAA8B,GAEnCxzF,KAAKyzF,SAAW,EAChBzzF,KAAK0zF,YAAc,EACnB1zF,KAAK2zF,eAAiB,KACtB3zF,KAAK4zF,aAAc,EAEnB5zF,KAAK6zF,gBAAkB,EACvB7zF,KAAK8zF,WAAa,KAClB9zF,KAAKmb,gBAAiB,EAEtBnb,KAAK+zF,WAAa,KAClB/zF,KAAKg0F,WAAkC,qBAAd7yF,WAA6BA,WAAaA,UAAUC,WAAa,KAC1FpB,KAAKkB,IAAM,IAAI,IAAJ,CAAalB,KAAKg0F,YAAY/yF,WAC3C,EAEA+xF,GAAgB1vF,UAAUopF,SAAWA,GACrCsG,GAAgB1vF,UAAU0qF,QAAUA,GAapCgF,GAAgB1vF,UAAU2wF,KAAO,SAAc1pF,EAAQ2pF,EAAYC,EAAYC,GAC7E,IAAInJ,EAAQjrF,KAEZ,GAAqB,WAAjBgW,EAAKzL,IAAwB+7E,GAAM/B,cAAch6E,GACnD+7E,GAAMjC,IAAIjgF,MAAM,iEAIlB,IAEEpE,KAAK+zF,WAAajW,EAAmBI,YAAYl+E,KAAKizF,eAEtDoB,GAAar0F,KAAK2G,QAASwtF,IAEtB9Z,KAAkBiM,GAAMH,gCAAuDjrF,IAA1B2nF,EAAYpI,WAA2B1zE,MAAMzD,UAAUyN,SAC/GupE,IACAgM,GAAMjC,IAAIl2C,KAAK,8GAGbnuC,KAAK2G,QAAQqhF,aAAe4H,GAAgB5H,YAC9C1B,GAAMjC,IAAIl2C,KAAK,iFAGbnuC,KAAK2G,QAAQgsF,qBACf3yF,KAAK2G,QAAQkpF,YAAcN,GAAevvF,KAAK2G,QAAQ6oF,aAGzDxvF,KAAKs0F,wBAELt0F,KAAK2G,QAAQ4D,OAASA,EACtBvK,KAAKu0F,eAAiB,IAAMhqF,GAAUvK,KAAKizF,gBAAkB1T,EAAUC,iBAAmB,GAAK,IAAMx/E,KAAKizF,eAC1GjzF,KAAKw0F,iBAAmBjqF,EAAOnF,MAAM,EAAG,GACxCpF,KAAKy0F,eAAiBz0F,KAAK2G,QAAQqhF,WAAahoF,KAAKu0F,eACrDv0F,KAAK00F,WAAa10F,KAAK2G,QAAQ4rF,UAAYvyF,KAAKu0F,eAChDv0F,KAAK20F,mBAAqB30F,KAAK2G,QAAQ6rF,kBAAoBxyF,KAAKu0F,eAChEv0F,KAAK40F,YAAcrV,EAAU4B,cAAgB,IAAMnhF,KAAKw0F,iBACxDx0F,KAAK+pF,cAAcpjF,QAAQ,CACzB0gF,eAAgBrnF,KAAK2G,QAAQopF,iBAC7B9zD,OAAQj8B,KAAK2G,QAAQs1B,OACrBsrD,OAAQvnF,KAAK2G,QAAQ6qF,aACrBhK,SAAUxnF,KAAK2G,QAAQqpF,iBAEzBhwF,KAAK60F,iBAAmB,IAAI1K,GAAgB,CAC1CE,WAAYrqF,KAAK40F,YACjBtK,eAAgBtqF,KAAK2G,QAAQ2jF,eAC7BjD,eAAgBrnF,KAAK2G,QAAQopF,iBAC7B9zD,OAAQj8B,KAAK2G,QAAQs1B,OACrBsrD,OAAQvnF,KAAK2G,QAAQ6qF,aACrBhK,SAAUxnF,KAAK2G,QAAQqpF,eACvB/5E,QAASjW,KAAK2G,QAAQsP,UAExB,IAAI6+E,IAAiB90F,KAAK+pF,cAAclnF,IAAI7C,KAAKy0F,gBAC7CM,IAAiB/0F,KAAK60F,iBAAiBv3D,OAC3Ct9B,KAAKg1F,eAAiBD,GAAgBD,IAAiB90F,KAAK2G,QAAQspF,mBACpE,IAAIgF,EAAYF,GAAgBD,EAEhC,GAAI90F,KAAK2G,QAAQupF,sBAAwB+E,EAGvC,YAFAj1F,KAAKk1F,qBAAqB3qF,EAAQ2pF,EAAYC,EAAYC,GAK5Dp0F,KAAK2G,QAAQs1B,OAASj8B,KAAK+pF,cAAcpjF,UAAUs1B,OAEf,WAAhCjmB,EAAKhW,KAAK2G,QAAQzC,WACpBoiF,GAAMpC,YAAYlkF,KAAK2G,QAAQzC,UAGjC,IAAIwtF,EAAkByD,GAAqCn1F,MAE3DA,KAAKo1F,8BAAgC/xF,OAAO8pB,KAAKukE,GAAiB1zF,OAAS,EAAI,CAC7Eq3F,iBAAkB3D,GAChB,CAAC,EAED1xF,KAAK2G,QAAQspF,oBAAsB6E,IAChCC,GACHO,GAAmBt1F,MAGrBA,KAAK+pF,cAAcp/B,OAAO3qD,KAAKy0F,iBAGjCc,GAAgBv1F,MAEhBA,KAAKw1F,qBAAsB,EAE3B,IAAIC,EAAkB,SAAyBC,GACzCvB,GAAcA,EAAWlX,WAAaqJ,GAAM1B,iBAAiBuP,EAAWlX,YAC1EqJ,GAAMjC,IAAIjgF,MAAM,gFAAiFnG,OAAOk2F,EAAWlX,SAAU,aACtHkX,EAAWlX,UAGpBgO,EAAMtkF,QAAQs2E,SAAWgO,EAAM0K,oBAAoBxB,GAAcA,EAAWlX,SAAUyY,GACtFzK,EAAMtkF,QAAQo2E,OAA8B,WAArB/mE,EAAKk+E,KAA6B5N,GAAM/B,cAAc2P,IAAeA,GAAmC,WAArBl+E,EAAKk+E,IAA4BA,EAAWllF,YAAci8E,EAAMtkF,QAAQo2E,QAAU,KAC5L,IAAI3sE,GAAM,IAAIjD,MAAOG,UACjBsoF,GAAmB3K,EAAM6I,aAAe7I,EAAM0I,gBAAkBvjF,EAAM66E,EAAM0I,eAAiB1I,EAAMtkF,QAAQ8qF,gBAAkBxG,EAAMtkF,QAAQixB,UAE3Ig+D,IACE3K,EAAMtkF,QAAQ2rF,iCAChBrH,EAAM4K,kBAGR5K,EAAM2I,aAAc,EACpB3I,EAAM6I,WAAa7I,EAAMtkF,QAAQixB,WAAaxnB,EAG9C66E,EAAMtkF,QAAQixB,eAAY18B,EAEtB+vF,EAAMtkF,QAAQ4qF,kCAChBtG,EAAM6K,2BAIL7K,EAAMtkF,QAAQ4qF,kCACjBtG,EAAM6K,0BAIJ7K,EAAMtkF,QAAQ2qF,aAChByE,GAA0B9K,EAAMiI,eAEhC6C,GAA0B9K,EAAMkI,mBAGlClI,EAAM0I,eAAiBvjF,EAEvB4lF,GAAgB/K,GAEhBA,EAAMuK,qBAAsB,EAE5BvK,EAAMgL,qBAGN,IAAK,IAAIl4F,EAAI,EAAGA,EAAIktF,EAAMsI,iBAAiBv1F,OAAQD,IACjDktF,EAAMsI,iBAAiBx1F,GAAGktF,GAG5BA,EAAMsI,iBAAmB,GACzBtI,EAAM9vE,gBAAiB,EAEnBy6E,GACF3K,EAAMiL,8BAEV,EAEIl2F,KAAK2G,QAAQ2qF,aACftxF,KAAKkzF,cAAgBlzF,KAAKm2F,uBAAuBn2F,KAAK2G,QAAQ4rF,WAAWnyF,KAAI,SAAUssB,GACrF,MAAO,CACLA,MAAOA,EAEX,IAAGzuB,OAAO+B,KAAKkzF,eACflzF,KAAKmzF,iBAAmBnzF,KAAKm2F,uBAAuBn2F,KAAK2G,QAAQ6rF,mBAAmBpyF,KAAI,SAAUssB,GAChG,MAAO,CACLA,MAAOA,EAEX,IAAGzuB,OAAO+B,KAAKmzF,mBAGbgB,GAAcA,EAAWlD,mBAC3BjxF,KAAKixF,kBAAkBjxF,KAAK2G,QAAQsqF,mBAGtCwE,IACAz1F,KAAKo2F,qBAEsB,aAAvBpgF,EAAKo+E,IACPA,EAAap0F,MAGf,IAAIgxF,EAAahxF,KAAK2G,QAAQqqF,WAE9B,GAAyB,aAArBh7E,EAAKg7E,IAA8BnO,EAAYnhE,mBAC5C1hB,KAAKq2F,kBAAmB,CAC3Br2F,KAAKq2F,mBAAoB,EAEzB,IAAIC,EAAyB,WAC3B,IAAIC,EAAgBtL,EAAMtkF,QAAQm+E,UAElCmG,EAAMuL,aAAajX,EAAUiD,kBAE7BwO,IAEA/F,EAAMuL,aAAaD,EACrB,EAKA1T,EAAYnhE,iBAAiB,YAAY,WACvC40E,GACF,IAAG,EACL,CAIFt2F,KAAK+zF,WAAW/V,YAAY5C,kBAAiB,SAAU1uD,GACrDu+D,EAAMwL,UAAU/pE,EAAMgD,UAAWhD,EAAMqiE,gBAAiBriE,EAAMgwD,eAChE,IAGA,IAAIga,EAAS12F,KAAK+zF,WAAWhW,cAAcpB,eAEvC38E,KAAK2G,QAAQs2E,UACfyZ,EAAO1Z,YAAYh9E,KAAK2G,QAAQs2E,UAG9Bj9E,KAAK2G,QAAQo2E,QACf2Z,EAAO5Z,UAAU98E,KAAK2G,QAAQo2E,QAGhC2Z,EAAOnZ,QAOT,CANE,MAAO5wC,GACP25C,GAAMjC,IAAIjgF,MAAMuoC,GAEZwnD,GAA2C,aAA7Bn+E,EAAKm+E,EAAW17D,UAChC07D,EAAW17D,QAAQkU,EAEvB,CACF,EAEAqmD,GAAgB1vF,UAAU4yF,6BAA+B,WACvD,IAAK,IAAIn4F,EAAI,EAAGA,EAAIiC,KAAKwzF,4BAA4Bx1F,OAAQD,IAC3DiC,KAAKwzF,4BAA4Bz1F,GAAGiC,KAExC,EAEAgzF,GAAgB1vF,UAAUqzF,8BAAgC,WACxD,IAAI1qF,EAAOk8E,KACPyO,EAAa52F,KAAK2G,QAAQs1B,QAAqC,MAA3Bj8B,KAAK2G,QAAQs1B,OAAO,GAAaj8B,KAAK2G,QAAQs1B,OAAO72B,MAAM,GAAKpF,KAAK2G,QAAQs1B,OAErH,GAAK26D,GAAetQ,GAAMH,0BAItBl6E,IAAS2qF,GACP,IAAIn6D,OAAOm6D,EAAa,KAAK12F,KAAK+L,GAAO,CAI3C,IAHA,IAAI4qF,EAAY5qF,EAAKjN,MAAM,KACvB83F,EAAkBF,EAAW53F,MAAM,KAE9BjB,EAAI84F,EAAU74F,OAAQD,EAAI+4F,EAAgB94F,SAAUD,EAAG,CAC9D,IAAIg5F,EAAeF,EAAUzxF,MAAMyxF,EAAU74F,OAASD,GAAG4b,KAAK,KAC9DuuE,GAAWplF,IAAI9C,KAAK40F,YAAa,KAAM,CACrC34D,OAAQ,IAAM86D,GAElB,CAEA7O,GAAWplF,IAAI9C,KAAK40F,YAAa,KAAM,CAAC,EAC1C,CAEJ,EAEA5B,GAAgB1vF,UAAUqyF,oBAAsB,SAAUqB,EAAgBtB,GACxE,GAAIsB,EACF,OAAOA,EAGT,GAAIh3F,KAAK2G,QAAQwpF,qBAAsB,CACrC,IAAIA,EAAuBnwF,KAAKi3F,yBAAyBj3F,KAAKk3F,iBAE9D,GAAI/G,EACF,OAAOA,CAEX,CAEA,OAAInwF,KAAK2G,QAAQs2E,SACRj9E,KAAK2G,QAAQs2E,SAGlByY,GAIGjP,IACT,EAGA,IAAIsP,GAA4B,SAAmCl8E,GACjE,IAAK,IAAI9b,EAAI,EAAGA,EAAI8b,EAAM7b,OAAQD,IAAK,CACrC,IAAI2+E,EAAiB7iE,EAAM9b,GAAG2uB,MAAMyqE,gBAChCpI,EAAkBl1E,EAAM9b,GAAG2uB,MAAM0qE,iBACjCxR,EAAS/rE,EAAM9b,GAAG2uB,MAAMk5D,OAC5B/rE,EAAM9b,GAAG2uB,MAAMyqE,gBAAkB7Q,GAAMtB,mBAAmBtI,GAC1D7iE,EAAM9b,GAAG2uB,MAAM0qE,iBAAmB9Q,GAAMtB,mBAAmB+J,GAC3Dl1E,EAAM9b,GAAG2uB,MAAMk5D,OAASU,GAAMX,eAAeC,EAC/C,CACF,EAMAoN,GAAgB1vF,UAAUwyF,wBAA0B,WAClD,IAAIuB,EACAC,EACAC,EACAC,EAkBJ,GAhBIx3F,KAAK2G,QAAQ+pF,aACf2G,EAAgBr3F,KAAKy3F,gBAGnBz3F,KAAK2G,QAAQ8pF,kBACf6G,EAAqBt3F,KAAK03F,cAAc13F,KAAK23F,iBAG3C33F,KAAK2G,QAAQ6pF,eACf+G,EAAkBv3F,KAAK43F,WAAW53F,KAAKk3F,kBAGrCl3F,KAAK2G,QAAQ4pF,gBACfiH,EAAmBx3F,KAAK63F,YAAY73F,KAAKk3F,kBAGvCl3F,KAAK2G,QAAQoqF,4BAA6B,CAC5C,IAAI+G,EAAwBhZ,EAAc,CAAC,EAAGuY,EAAeC,EAAoBC,EAAiBC,GAE9Fn0F,OAAO8pB,KAAK2qE,GAAuB95F,OAAS,GAC9CgC,KAAKm7E,SAASoE,EAAU+C,kBAAmBwV,EAE/C,CACF,EAQA,IAAIzD,GAAe,SAASA,EAAa1tF,EAAS+B,GAChD,GAAqB,WAAjBsN,EAAKtN,GAAT,CAKA,IAAIqvF,EAAqB,IAAI3pE,IAAI,CAAC,YAE9B4pE,EAAuB,SAA8B1tF,GACvD,GAAKjH,OAAOC,UAAUC,eAAetD,KAAK0G,EAAS2D,GAAnD,CAIA,IAAI2tF,EAAavvF,EAAO4B,GACpBkmE,EAAex6D,EAAKrP,EAAQ2D,KAEpB,cAARA,GAAwBg8E,GAAMzB,kBAAkBoT,MAEjC,cAAR3tF,GAAsC,OAAf2tF,EAGtB3R,GAAM3B,cAAcsT,EAAY3tF,EAAM,UAAWkmE,KAIxC,YAAjBA,EACF7pE,EAAQ2D,KAAS2tF,EACS,WAAjBznB,IAA8B8V,GAAM/B,cAAc0T,IAAgC,WAAjBznB,GAA6BynB,EAAa,GAAsB,aAAjBznB,EACzH7pE,EAAQ2D,GAAO2tF,EACW,WAAjBznB,GACT6jB,EAAa1tF,EAAQ2D,GAAM2tF,IAX3BtxF,EAAQ2D,GAAOg8E,GAAMD,kBAAkB4R,GAAcA,EAAa,KARpE,CAqBF,EAEA,IAAK,IAAI3tF,KAAO5B,EACVqvF,EAAmBz5F,IAAIgM,GACzB3D,EAAQ2D,GAAOw0E,EAAc,CAAC,EAAGn4E,EAAQ2D,GAAM5B,EAAO4B,IAC7CjH,OAAOC,UAAUC,eAAetD,KAAKyI,EAAQ4B,IACtD0tF,EAAqB1tF,EAnCzB,CAsCF,EAOA0oF,GAAgB1vF,UAAU8yF,mBAAqB,WAC7C,IAAIv8E,EAAQ7Z,KAAKozF,GACjBpzF,KAAKozF,GAAK,GAEV,IAAK,IAAIr1F,EAAI,EAAGA,EAAI8b,EAAM7b,OAAQD,IAAK,CACrC,IAAI0uC,EAAKzsC,KAAK6Z,EAAM9b,GAAG,IAEN,aAAbiY,EAAKy2B,IACPA,EAAG6B,MAAMtuC,KAAM6Z,EAAM9b,GAAGqH,MAAM,GAElC,CACF,EAOA4tF,GAAgB1vF,UAAU40F,WAAa,SAAoBC,GACzD,OAAI7R,GAAM/B,cAAcvkF,KAAK2G,QAAQ4D,UACnC+7E,GAAMjC,IAAIjgF,MAAM,wEAA0E+zF,IACnF,EAIX,EAOAnF,GAAgB1vF,UAAU6yF,uBAAyB,SAAgC5D,GACjF,IAAI6F,EAA0Bp4F,KAAKq4F,gBAAgBvO,GAAgByI,GAE/D+F,EAAet4F,KAAKu4F,8BAA8BH,EAAyB7F,GAI/E,OAFAvyF,KAAKw4F,cAAc1O,GAAgByI,EAAWpoF,KAAKC,UAAUkuF,IAEtDA,CACT,EAOAtF,GAAgB1vF,UAAUi1F,8BAAgC,SAAuCH,EAAyB7F,GACxH,GAAIjM,GAAM/B,cAAc6T,GACtB,MAAO,GAGT,GAAsC,WAAlCpiF,EAAKoiF,GACP,IACE,IAAIK,EAAStuF,KAAK4E,MAAMqpF,GAExB,GAAqB,UAAjBpiF,EAAKyiF,GAEP,OAAOA,CAEE,CAAX,MAAOt1F,IAAI,CAMf,OADAmjF,GAAMjC,IAAIjgF,MAAM,kBAAoBmuF,EAAY,4CACzC,EACT,EAQAS,GAAgB1vF,UAAUo1F,aAAe,WACvC,OAAO14F,KAAK4zF,WACd,EAOAZ,GAAgB1vF,UAAUq1F,OAAS,SAAgB3jF,GAC7ChV,KAAKmb,eACPnG,EAAShV,MAETA,KAAKuzF,iBAAiBr5E,KAAKlF,EAE/B,EAOAg+E,GAAgB1vF,UAAU2tF,kBAAoB,SAA2Bj8E,GACvEhV,KAAKwzF,4BAA4Bt5E,KAAKlF,EACxC,EAQAg+E,GAAgB1vF,UAAUs1F,aAAe,WACvC,OAAO54F,KAAK8zF,UACd,EAOAd,GAAgB1vF,UAAUu1F,YAAc,WAEtC,OADA74F,KAAKyzF,WACEzzF,KAAKyzF,QACd,EAOAT,GAAgB1vF,UAAUw1F,eAAiB,WAEzC,OADA94F,KAAK0zF,cACE1zF,KAAK0zF,WACd,EAOAV,GAAgB1vF,UAAUy1F,mBAAqB,WAE7C,OADA/4F,KAAK6zF,kBACE7zF,KAAK6zF,eACd,EAOAb,GAAgB1vF,UAAU01F,aAAe,WACvC,OAAOh5F,KAAKkzF,cAAcl1F,OAASgC,KAAKmzF,iBAAiBn1F,MAC3D,EAOAg1F,GAAgB1vF,UAAU2yF,mBAAqB,WAC7C,OAA4B,IAAxBj2F,KAAKg5F,iBAKJh5F,KAAK2G,QAAQmpF,YAMd9vF,KAAKg5F,gBAAkBh5F,KAAK2G,QAAQ0pF,sBAOpCrwF,KAAK2G,QAAQm+E,YAAcvF,EAAUiD,kBANvCxiF,KAAKi5F,cACE,IAWJj5F,KAAKszF,mBAERtzF,KAAKszF,kBAAmB,EACxB/mF,WAAW,WACTvM,KAAKszF,kBAAmB,EACxBtzF,KAAKi5F,YACP,EAAEliF,KAAK/W,MAAOA,KAAK2G,QAAQypF,2BAGtB,IA3BLpwF,KAAKi5F,cACE,GA2BX,EAQAjG,GAAgB1vF,UAAU41F,aAAe,WACvC,OAAOl5F,KAAK60F,iBAAiBp5D,OAC/B,EAQAu3D,GAAgB1vF,UAAU+0F,gBAAkB,SAAyBpiF,EAAS3L,GAC5E,OAAO2L,EAAQmW,QAAQ9hB,EAAMtK,KAAKu0F,eACpC,EAQAvB,GAAgB1vF,UAAUk1F,cAAgB,SAAuBviF,EAAS3L,EAAK4L,GAC7ED,EAAQiW,QAAQ5hB,EAAMtK,KAAKu0F,eAAgBr+E,EAC7C,EAOA,IAAIq/E,GAAkB,SAAyB5uE,GAC7C,GAAKA,EAAMquE,cAAX,CAUA,IAAImE,EAAaxyE,EAAMojE,cAAclnF,IAAI8jB,EAAM8tE,gBAEtB,WAArBz+E,EAAKmjF,IACPC,GAAqBzyE,EAAOwyE,EAL9B,KARA,CACE,IAAIr5F,EAAQ6mB,EAAMkuE,iBAAiBv3D,OAEf,WAAhBtnB,EAAKlW,IACPs5F,GAAqBzyE,EAAO7mB,EAIhC,CASF,EAEIw1F,GAAqB,SAA4B3uE,GACnD,IAAIwyE,EAAaxyE,EAAMojE,cAAclnF,IAAI8jB,EAAM8tE,gBAEtB,WAArBz+E,EAAKmjF,KACPC,GAAqBzyE,EAAOwyE,GAE5BnD,GAAgBrvE,GAEpB,EAEIyyE,GAAuB,SAA8BzyE,EAAOwyE,GAC1DA,EAAWlc,WACbt2D,EAAMhgB,QAAQs2E,SAAWkc,EAAWlc,UAGlCkc,EAAWpc,SACbp2D,EAAMhgB,QAAQo2E,OAASoc,EAAWpc,QAGV,OAAtBoc,EAAWxO,aAAyCzvF,IAAtBi+F,EAAWxO,SAEjB,IAAtBwO,EAAWxO,SACbhkE,EAAMhgB,QAAQgkF,OAASwO,EAAWxO,QAIlCwO,EAAWvhE,YACbjR,EAAMmtE,WAAa5a,SAASigB,EAAWvhE,UAAW,KAGhDuhE,EAAWvO,gBACbjkE,EAAMgtE,eAAiBza,SAASigB,EAAWvO,cAAe,KAGxDuO,EAAW1pE,UACb9I,EAAM8sE,SAAWva,SAASigB,EAAW1pE,QAAS,KAG5C0pE,EAAWtO,aACblkE,EAAM+sE,YAAcxa,SAASigB,EAAWtO,WAAY,KAGlDsO,EAAWrO,iBACbnkE,EAAMktE,gBAAkB3a,SAASigB,EAAWrO,eAAgB,IAEhE,EAOIkL,GAAkB,SAAyBrvE,GAC7C,IAAIwyE,EAAa,CACflc,SAAUt2D,EAAMhgB,QAAQs2E,SACxBF,OAAQp2D,EAAMhgB,QAAQo2E,OACtB4N,OAAQhkE,EAAMhgB,QAAQgkF,OACtB/yD,UAAWjR,EAAMmtE,WACjBlJ,cAAejkE,EAAMgtE,eACrBlkE,QAAS9I,EAAM8sE,SACf5I,WAAYlkE,EAAM+sE,YAClB5I,eAAgBnkE,EAAMktE,iBAGpBltE,EAAMquE,cACRruE,EAAMojE,cAAcjnF,IAAI6jB,EAAMhgB,QAAQqhF,WAAarhE,EAAM4tE,eAAgB4E,GAEzExyE,EAAMkuE,iBAAiBpL,KAAK0P,EAEhC,EAOAnG,GAAgB1vF,UAAUm0F,aAAe,SAAsB4B,EAAaC,GAC1ED,EAAcA,GAAer5F,KAAKk3F,gBAClCoC,EAAeA,GAAgBt5F,KAAK+pF,cAAclnF,IAAI,UACtD,IAAIw0F,EAAgBhM,GAAWiO,EAAcD,GAI7C,OAFAE,GAAkCv5F,KAAMq3F,GAEjCA,CACT,EAOArE,GAAgB1vF,UAAUuyF,gBAAkB,WAC1C,IAAI2D,EAAW,IAAI9M,GACnB8M,EAASxM,MAAMzN,EAAUyC,UACzBwX,EAASxM,MAAMzN,EAAU0C,YACzBuX,EAASxM,MAAMzN,EAAU2C,YACzBsX,EAASxM,MAAMzN,EAAU4C,cACzBqX,EAASxM,MAAMzN,EAAU6C,UACzBoX,EAASxM,MAAMzN,EAAU8C,aACzBriF,KAAKw5F,SAASA,EAChB,EAQA,IAAID,GAAoC,SAA2C5yE,EAAO+1D,GACxF,GAA6B,WAAzB1mE,EAAK0mE,IAAuE,IAAvCr5E,OAAO8pB,KAAKuvD,GAAgB1+E,OAArE,CAKA,IAAIw7F,EAAW,IAAI9M,GAEnB,IAAK,IAAIpiF,KAAOoyE,EACVr5E,OAAOC,UAAUC,eAAetD,KAAKy8E,EAAgBpyE,KACvDkvF,EAASzM,QAAQ,WAAaziF,EAAKoyE,EAAepyE,IAClDkvF,EAAS12F,IAAIwH,EAAKoyE,EAAepyE,KAIrCqc,EAAM6yE,SAASA,EAZf,CAaF,EAMAxG,GAAgB1vF,UAAUq0F,aAAe,WACvC,IAAI8B,EAAWz5F,KAAK05F,yBAAyB15F,KAAKk3F,iBAElD,OAAIuC,IAA0D,qBAAbxgF,SAA2BA,SAAS0gF,SAAW,GAClG,EAMA3G,GAAgB1vF,UAAU4zF,cAAgB,WACxC,OAAOrU,EAAYt7E,SAASqyF,MAC9B,EAOA5G,GAAgB1vF,UAAUs0F,WAAa,SAAoBiC,GACzD,IAAIC,EAAQxT,GAAMJ,cAAc,QAAS2T,GAEzC,IAAIvT,GAAM/B,cAAcuV,GAAxB,CAIA,IAAIvC,EAAkB,CACpBuC,MAAOA,GAKT,OAFAP,GAAkCv5F,KAAMu3F,GAEjCA,CARP,CASF,EAOAvE,GAAgB1vF,UAAUu0F,YAAc,SAAqBgC,GAC3D,IAAIE,EAASzT,GAAMJ,cAAc,SAAU2T,GAE3C,IAAIvT,GAAM/B,cAAcwV,GAAxB,CAIA,IAAIvC,EAAmB,CACrBuC,OAAQA,GAKV,OAFAR,GAAkCv5F,KAAMw3F,GAEjCA,CARP,CASF,EAOAxE,GAAgB1vF,UAAU2zF,yBAA2B,SAAkC4C,GACrF,OAAOvT,GAAMJ,cAAc3G,EAAUuC,oBAAqB+X,EAC5D,EAOA7G,GAAgB1vF,UAAUo2F,yBAA2B,SAAkCG,GACrF,OAAOvT,GAAMJ,cAAc3G,EAAUwC,mBAAoB8X,EAC3D,EAOA7G,GAAgB1vF,UAAU02F,oBAAsB,SAA6BL,GAC3E,GAAIrT,GAAM/B,cAAcoV,GACtB,OAAO,KAGT,IAAIrR,EAAQqR,EAAS36F,MAAM,KAE3B,OAAIspF,EAAMtqF,QAAU,EACXsqF,EAAM,GAGR,IACT,EAQA0K,GAAgB1vF,UAAUo0F,cAAgB,SAAuBiC,GAC/D,IAAIrT,GAAM/B,cAAcoV,GAAxB,CAIA,IAAIM,EAAe,CACjBN,SAAUA,EACVO,iBAAkBl6F,KAAKg6F,oBAAoBL,IAK7C,OAFAJ,GAAkCv5F,KAAMi6F,GAEjCA,CATP,CAUF,EAQAjH,GAAgB1vF,UAAUguF,WAAa,WACrC,IACE,IAAI6I,EAAyBhwF,KAAKC,UAAUpK,KAAKkzF,cAAc9yF,KAAI,SAAUgqF,GAC3E,IAAI19D,EAAQ09D,EAAK19D,MACjB,OAAOA,CACT,KAEA1sB,KAAKw4F,cAAc1O,GAAgB9pF,KAAK2G,QAAQ4rF,UAAW4H,EAChD,CAAX,MAAOh3F,IAAI,CAIb,IACE,IAAIi3F,EAAsBjwF,KAAKC,UAAUpK,KAAKmzF,iBAAiB/yF,KAAI,SAAUi6F,GAC3E,OAAOA,EAAe3tE,KACxB,KAEA1sB,KAAKw4F,cAAc1O,GAAgB9pF,KAAK2G,QAAQ6rF,kBAAmB4H,EACxD,CAAX,MAAOj3F,IAAI,CAGf,EASA6vF,GAAgB1vF,UAAUg3F,UAAY,SAAmBr+D,GACvD,GAAIj8B,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,aAAajc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGjF,GAAK+iE,GAAM3B,cAAc1oD,EAAQ,SAAU,UAI3C,IACEj8B,KAAK+pF,cAAcpjF,QAAQ,CACzB0gF,eAAgBrnF,KAAK2G,QAAQopF,iBAC7BxI,OAAQvnF,KAAK2G,QAAQ6qF,aACrBv1D,OAAQA,EACRurD,SAAUxnF,KAAK2G,QAAQqpF,iBAEzBhwF,KAAK2G,QAAQs1B,OAASj8B,KAAK+pF,cAAcpjF,UAAUs1B,OAEnDs5D,GAAgBv1F,MAEhBg2F,GAAgBh2F,KAGlB,CAFE,MAAOmD,IACPmjF,GAAMjC,IAAIjgF,MAAMjB,GAClB,CACF,EAUA6vF,GAAgB1vF,UAAUw5E,UAAY,SAAmBC,GACvD,IAAI6Y,EAAkBryE,UAAUvlB,OAAS,QAAsB9C,IAAjBqoB,UAAU,IAAmBA,UAAU,GAErF,GAAK+iE,GAAM3B,cAAciR,EAAiB,kBAAmB,WAA7D,CAIA,GAAI51F,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,aAAajc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGjF,IACEvjB,KAAK2G,QAAQo2E,YAAoB7hF,IAAX6hF,GAAmC,OAAXA,GAAmB,GAAKA,GAAU,KAE5E6Y,IACE51F,KAAK2G,QAAQ2rF,iCACftyF,KAAK61F,kBAGP71F,KAAK4zF,aAAc,EACnB5zF,KAAK8zF,YAAa,IAAI3mF,MAAOG,UAE7BtN,KAAKk2F,+BAGDl2F,KAAK2G,QAAQ4qF,kCACfvxF,KAAK81F,2BAITE,GAAgBh2F,MAIZA,KAAK+zF,YACP/zF,KAAK+zF,WAAWhW,cAAcpB,eAAeG,UAAU98E,KAAK2G,QAAQo2E,QAAQQ,QAIhF,CAFE,MAAOp6E,IACPmjF,GAAMjC,IAAIjgF,MAAMjB,GAClB,CAlCA,CAmCF,EAkBA6vF,GAAgB1vF,UAAUk3F,SAAW,SAAUC,EAAWzU,GACxD,GAAIhmF,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,YAAYjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGhF,GAAKvjB,KAAKk4F,WAAW,eAAkB5R,GAAM3B,cAAc8V,EAAW,YAAa,YAAanU,GAAM/B,cAAckW,GAApH,CAIA,IAAI7U,EAAS,CAAC,EACdA,EAAO6U,GAAazU,EACpB,IAAIwT,GAAW,IAAI9M,IAAW5pF,IAAI23F,EAAWzU,GAE7ChmF,KAAKy2F,UAAUlX,EAAUK,eAAgB,KAAM,KAAM4Z,EAAS7M,yBAA0B/G,EAAQ,KAAM,KAAM,KAN5G,CAOF,EASAoN,GAAgB1vF,UAAUo3F,UAAY,SAAmBC,GACvD,GAAI36F,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,aAAajc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGjF,GAAK+iE,GAAM3B,cAAcgW,EAAQ,SAAU,WAI3C,IACE36F,KAAK2G,QAAQgkF,OAASgQ,EAEtB3E,GAAgBh2F,KAGlB,CAFE,MAAOmD,IACPmjF,GAAMjC,IAAIjgF,MAAMjB,GAClB,CACF,EAWA6vF,GAAgB1vF,UAAUs3F,aAAe,SAAsBhjE,GAC7D,GAAK0uD,GAAM3B,cAAc/sD,EAAW,YAAa,UAIjD,IACE53B,KAAK8zF,WAAal8D,EAElBo+D,GAAgBh2F,KAGlB,CAFE,MAAOmD,IACPmjF,GAAMjC,IAAIjgF,MAAMjB,GAClB,CACF,EAQA6vF,GAAgB1vF,UAAUu3F,eAAiB,WACzC76F,KAAK46F,cAAa,IAAIztF,MAAOG,UAC/B,EAUA0lF,GAAgB1vF,UAAUw3F,mBAAqB,WAC7C,GAAI96F,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,sBAAsBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAG1FvjB,KAAKg9E,YAAYyJ,KACnB,EAYAuM,GAAgB1vF,UAAU05E,YAAc,SAAqBC,GAC3D,GAAIj9E,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,eAAejc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGnF,GAAK+iE,GAAM1B,iBAAiB3H,GAI5B,IACOqJ,GAAM/B,cAActH,KACvBj9E,KAAK2G,QAAQs2E,SAAW,GAAKA,EAE7B+Y,GAAgBh2F,MAIZA,KAAK+zF,YACP/zF,KAAK+zF,WAAWhW,cAAcpB,eAAeK,YAAYh9E,KAAK2G,QAAQs2E,UAAUM,SAKtF,CAFE,MAAOp6E,IACPmjF,GAAMjC,IAAIjgF,MAAMjB,GAClB,CACF,EAUA6vF,GAAgB1vF,UAAUkzF,aAAe,SAAsB1R,GAC7D,GAAI9kF,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,gBAAgBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAG/E+iE,GAAMzB,kBAAkBC,KAI7B9kF,KAAK2G,QAAQm+E,UAAYA,EAC3B,EAWAkO,GAAgB1vF,UAAU45E,kBAAoB,SAA2BR,GACvE,GAAI18E,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,qBAAqBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGzF,GAAKvjB,KAAKk4F,WAAW,wBAA2B5R,GAAM3B,cAAcjI,EAAgB,iBAAkB,UAAtG,CAKA,IAAIqe,EAAYzU,GAAM7B,SAAS6B,GAAMtB,mBAAmBtI,IAExD,GAAsC,IAAlCr5E,OAAO8pB,KAAK4tE,GAAW/8F,OAA3B,CAKA,IAAIw7F,EAAW,IAAI9M,GAEnB,IAAK,IAAIvH,KAAY4V,EACf13F,OAAOC,UAAUC,eAAetD,KAAK86F,EAAW5V,IAClDqU,EAAS12F,IAAIqiF,EAAU4V,EAAU5V,IAIrCnlF,KAAKw5F,SAASA,EAXd,CAPA,CAmBF,EAQAxG,GAAgB1vF,UAAU03F,oBAAsB,WAC9C,GAAIh7F,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,uBAAuBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAG3F,GAAKvjB,KAAKk4F,WAAW,yBAArB,CAIA,IAAIsB,EAAW,IAAI9M,GACnB8M,EAAS1M,WACT9sF,KAAKw5F,SAASA,EAJd,CAKF,EAQA,IAAIyB,GAAkC,SAAyCh1F,EAAUylC,GACvF,IAAK,IAAI3tC,EAAI,EAAGA,EAAI2tC,EAAM0nD,GAAGp1F,OAAQD,IAAK,CACxC,IAAI0uC,EAAKxmC,EAASylC,EAAM0nD,GAAGr1F,GAAG,IAEb,aAAbiY,EAAKy2B,IACPA,EAAG6B,MAAMroC,EAAUylC,EAAM0nD,GAAGr1F,GAAGqH,MAAM,GAEzC,CAEA,OAAOa,CACT,EAiBA+sF,GAAgB1vF,UAAUk2F,SAAW,SAAU0B,EAAc9G,EAAc+G,EAAoBC,GAC7F,GAAIp7F,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,YAAYjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGhF,GAAKvjB,KAAKk4F,WAAW,cAarB,GAJ2B,WAAvBliF,EAAKklF,IAA8B73F,OAAOC,UAAUC,eAAetD,KAAKi7F,EAAc,QACxFA,EAAeD,GAAgC,IAAIvO,GAAYwO,IAG7DA,aAAwBxO,GAAU,CAEpC,GAAIrpF,OAAO8pB,KAAK+tE,EAAavO,0BAA0B3uF,OAAS,EAC9D,OAAOgC,KAAKy2F,UAAUlX,EAAUK,eAAgB,KAAM,KAAMsb,EAAavO,yBAA0B,KAAM,KAAM,KAAMyH,EAAc+G,EAAoBC,GAEvJC,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,+BAGd,MACEy3D,GAAMjC,IAAIjgF,MAAM,iEAAmE4R,EAAKklF,IAExFG,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,qCAzBVwsE,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,sBA2Bd,EAEAmkE,GAAgB1vF,UAAUg4F,cAAgB,SAAUC,EAAYC,EAAYN,EAAc9G,EAAc+G,EAAoBC,GAC1H,GAAIp7F,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,iBAAiBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGrF,GAAKvjB,KAAKk4F,WAAW,mBAQrB,GAAK5R,GAAM3B,cAAc4W,EAAY,aAAc,YAAajV,GAAM/B,cAAcgX,GAQpF,GAAmB,OAAfC,QAAsCtgG,IAAfsgG,EAa3B,GAJ2B,WAAvBxlF,EAAKklF,IAA8B73F,OAAOC,UAAUC,eAAetD,KAAKi7F,EAAc,QACxFA,EAAeD,GAAgC,IAAIvO,GAAYwO,IAG7DA,aAAwBxO,GAAU,CAEpC,GAAIrpF,OAAO8pB,KAAK+tE,EAAavO,0BAA0B3uF,OAAS,EAC9D,OAAOgC,KAAKy2F,UAAUlX,EAAUM,qBAAsB,KAAM,KAAM,KAAMhB,EAAgB,CAAC,EAAG0c,EAAYC,GAAaN,EAAavO,yBAA0B,KAAMyH,EAAc+G,EAAoBC,GAEpMC,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,gCAGd,MACEy3D,GAAMjC,IAAIjgF,MAAM,iEAAmE4R,EAAKklF,IAExFG,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,qCAzBVwsE,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,4BATVwsE,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,4BATVwsE,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,sBA2Cd,EASAmkE,GAAgB1vF,UAAUm4F,eAAiB,SAAwB7gB,GACjE,GAAI56E,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,kBAAkBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGjF+iE,GAAM3B,cAAc/J,EAAa,cAAe,YAIrD56E,KAAK2G,QAAQi0E,YAAcA,EAC7B,EAOAoY,GAAgB1vF,UAAUmzF,UAAY,SAAmB/mE,EAAWq/D,EAAiB2M,EAAehf,EAAgBkJ,EAAQ+V,EAAiBC,EAAW5mF,EAAU6mF,EAAeT,GAI/K,GAHA7F,GAAgBv1F,MAGX0vB,EAQL,GAAI1vB,KAAK2G,QAAQgkF,OACf0Q,GAAwBrmF,EAAU6mF,EAAe,EAAG,kBAAmB,CACrEhtE,OAAQ,+BAMZ,IACE,IAAIY,EAGFA,EADEC,IAAc6vD,EAAUK,gBAAkBlwD,IAAc6vD,EAAUM,qBAC1D7/E,KAAK84F,iBAEL94F,KAAK64F,cAGjB,IAAI/N,EAAiB9qF,KAAK+4F,qBACtB+C,EAAgC,WAApB9lF,EAAK4lF,GAA0BA,GAAY,IAAIzuF,MAAOG,UAElE8tF,EACFp7F,KAAK8zF,YAAc,IACT9zF,KAAK8zF,aAAe9zF,KAAK2zF,gBAAkBmI,EAAY97F,KAAK2zF,eAAiB3zF,KAAK2G,QAAQ8qF,kBACpGzxF,KAAK8zF,WAAagI,EAElB97F,KAAKk2F,gCAGPl2F,KAAK2zF,eAAiBmI,EAEtB9F,GAAgBh2F,MAEhB,IAAI+7F,EAAS/7F,KAAKkB,IAAIP,QAAQuE,KAC1B82F,EAAYh8F,KAAKkB,IAAIP,QAAQa,MAC7Bw5E,EAAch7E,KAAKkB,IAAIL,OAAOo7F,OAASj8F,KAAKkB,IAAIH,GAAGmE,KACnDg3F,EAAel8F,KAAKkB,IAAIL,OAAOs7F,OACnCzf,EAAiBA,GAAkB,CAAC,EAEpC,IAAIgV,EAAkB5S,EAAc,CAAC,EAAG9+E,KAAKo1F,+BAE7CsG,EAAgB5c,EAAc,CAAC,EAAG4c,GAAiB,CAAC,EAAGhK,GACvD3C,EAAkBA,GAAmB,CAAC,EACtCnJ,EAASA,GAAU,CAAC,EACpB+V,EAAkBA,GAAmB,CAAC,EACtC,IAAIjvE,EAAQ,CACV0vE,UAAWp8F,KAAK2G,QAAQs2E,SACxBof,QAASr8F,KAAK2G,QAAQo2E,OACtB6e,UAAWE,EACXQ,SAAU7sE,EACV8sE,WAAYv8F,KAAK8zF,aAAe,EAChC0I,WAAY9sE,EACZ2iE,aAAcryF,KAAK2G,QAAQi0E,aAAe,KAC1CE,SAAU2hB,GAAkBz8F,KAAM,YAAcA,KAAK2G,QAAQm0E,SAAW,KACxEoX,QAASuK,GAAkBz8F,KAAM,YAAa+7F,GAAiB,KAC/D5J,WAAYsK,GAAkBz8F,KAAM,eAAgBg8F,GAAoB,KACxEjK,aAAc0K,GAAkBz8F,KAAM,iBAAkBg7E,GAAsB,KAC9E8W,oBAAqB2K,GAAkBz8F,KAAM,wBAAyBk8F,GAAuB,KAC7Fj0F,SAAUw0F,GAAkBz8F,KAAM,YAAcA,KAAK2G,QAAQsB,SAAW,KACxEy0F,eAAgBhB,EAChBtE,iBAAkB9Q,GAAM7B,SAAS6B,GAAMtB,mBAAmB+J,IAC1DoI,gBAAiB7Q,GAAM7B,SAAS6B,GAAMtB,mBAAmBtI,IACzDwS,KAAMA,KACN4B,QAAS9wF,KAAK2G,QAAQmqF,QACtB6L,gBAAiB7R,EAEjBlF,OAAQU,GAAM7B,SAAS6B,GAAMX,eAAeC,IAC5CgX,iBAAkBtW,GAAM7B,SAAS6B,GAAMtB,mBAAmB2W,IAC1DkB,WAAY78F,KAAKg0F,WACjB8I,WAAY98F,KAAK2G,QAAQisF,WAAa,MAiDxC,OA9CImK,GAAkB/8F,QACpB0sB,EAAMwkE,KAAO,CACXC,OAAQnxF,KAAK2G,QAAQuqF,KAAKC,aAAUj2F,EACpC6pD,OAAQ/kD,KAAK2G,QAAQuqF,KAAKnsC,aAAU7pD,EACpC4D,QAASkB,KAAK2G,QAAQuqF,KAAKpyF,cAAW5D,EACtCk2F,UAAWpxF,KAAK2G,QAAQuqF,KAAKE,gBAAal2F,IAI1C8hG,GAAwBh9F,QAC1B0sB,EAAMuwE,mBAAqB,CACzBC,YAAal9F,KAAK2G,QAAQgqF,kBAAkBC,iBAAc11F,EAC1DiiG,eAAgBn9F,KAAK2G,QAAQgqF,kBAAkBE,oBAAiB31F,IAIhEw0B,IAAc6vD,EAAUK,gBAAkBlwD,IAAc6vD,EAAUM,sBACpE7/E,KAAKmzF,iBAAiBj5E,KAAK,CACzBwS,MAAOA,EACP1X,SAAUA,EACV6mF,cAAeA,IAGjB77F,KAAKo9F,mBAAmBp9F,KAAKmzF,oBAE7BnzF,KAAKkzF,cAAch5E,KAAK,CACtBwS,MAAOA,EACP1X,SAAUA,EACV6mF,cAAeA,IAGjB77F,KAAKo9F,mBAAmBp9F,KAAKkzF,gBAG3BlzF,KAAK2G,QAAQ2qF,YACftxF,KAAKsxF,aAGPtxF,KAAKi2F,qBAIDvmE,IAAc6vD,EAAUK,gBAAkB5/E,KAAK+zF,YACjD/zF,KAAK+zF,WAAWhW,cAAcpB,eAAeQ,qBAAqBmJ,GAAM7B,SAAS6B,GAAMtB,mBAAmBtI,KAAkBa,SAGvH9tD,CAGT,CAFE,MAAOtsB,IACPmjF,GAAMjC,IAAIjgF,MAAMjB,GAClB,MA/HEk4F,GAAwBrmF,EAAU6mF,EAAe,EAAG,kBAAmB,CACrEhtE,OAAQ,qBA+Hd,EAEA,IAAIkuE,GAAoB,SAA2Bp2E,GACjD,OAAOA,EAAMhgB,QAAQuqF,OAASvqE,EAAMhgB,QAAQuqF,KAAKnsC,QAAUp+B,EAAMhgB,QAAQuqF,KAAKC,QAAUxqE,EAAMhgB,QAAQuqF,KAAKpyF,SAAW6nB,EAAMhgB,QAAQuqF,KAAKE,UAC3I,EAEI4L,GAA0B,SAAiCr2E,GAC7D,OAAOA,EAAMhgB,QAAQgqF,oBAAsBhqE,EAAMhgB,QAAQgqF,kBAAkBC,YAAcjqE,EAAMhgB,QAAQgqF,kBAAkBE,cAC3H,EAEI4L,GAAoB,SAA2B91E,EAAO02E,GACxD,QAAS12E,EAAMhgB,QAAQ+qF,gBAAgB2L,EACzC,EAEIlI,GAAuC,SAA8CxuE,GAKvF,IAHA,IAAI22E,EAAS,CAAC,OAAQ,UAAW,MAAO,aAAc,UAClD50F,EAAS,CAAC,EAEL3K,EAAI,EAAGA,EAAIu/F,EAAOt/F,OAAQD,IAAK,CACtC,IAAIs/F,EAAQC,EAAOv/F,GAEd0+F,GAAkB91E,EAAO02E,KAC5B30F,EAAO20F,IAAS,EAEpB,CAEA,OAAO30F,CACT,EAOAsqF,GAAgB1vF,UAAU85F,mBAAqB,SAA4BvjF,GACzE,GAAIA,EAAM7b,OAASgC,KAAK2G,QAAQ0qF,cAAe,CAC7C,IAAIkM,EAAgB1jF,EAAMukC,OAAO,EAAGvkC,EAAM7b,OAASgC,KAAK2G,QAAQ0qF,eAChEkM,EAAcniE,SAAQ,SAAU1O,GAC9B2uE,GAAwB3uE,EAAM1X,SAAU0X,EAAMmvE,cAAe,EAAG,kBAAmB,CACjFhtE,OAAQ,uGAEZ,GACF,CACF,EAyBAmkE,GAAgB1vF,UAAU63E,SAAW,SAAkBzrD,EAAWq/D,EAAiBqF,EAAc+G,GAC/F,IAAIC,EAAe73E,UAAUvlB,OAAS,QAAsB9C,IAAjBqoB,UAAU,IAAmBA,UAAU,GAElF,OAAIvjB,KAAKu6F,mBACAv6F,KAAKozF,GAAGl5E,KAAK,CAAC,YAAYjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGzEvjB,KAAKw9F,sBAAsB9tE,EAAWq/D,EAAiB,KAAMqF,EAAc+G,EAAoBC,EACxG,EAiBApI,GAAgB1vF,UAAUk6F,sBAAwB,SAAkB9tE,EAAWq/D,EAAiB6M,EAAWxH,EAAc+G,GACvH,IAAIC,EAAe73E,UAAUvlB,OAAS,QAAsB9C,IAAjBqoB,UAAU,IAAmBA,UAAU,GAElF,OAAIvjB,KAAKu6F,mBACAv6F,KAAKozF,GAAGl5E,KAAK,CAAC,yBAAyBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGxFvjB,KAAKk4F,WAAW,cAQhB5R,GAAM3B,cAAcj1D,EAAW,YAAa,UAQ7C42D,GAAM/B,cAAc70D,IACtB2rE,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,uBAGF,IAGLy3D,GAAM3B,cAAcyW,EAAc,eAAgB,YACrDC,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,+BAIL7uB,KAAKy2F,UAAU/mE,EAAWq/D,EAAiB,KAAM,KAAM,KAAM,KAAM6M,EAAWxH,EAAc+G,EAAoBC,KArBrHC,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,gCAGF,IAZRwsE,GAAwBjH,EAAc+G,EAAoB,EAAG,kBAAmB,CAC9EtsE,OAAQ,qBAGF,EA0BZ,EAsBAmkE,GAAgB1vF,UAAUm6F,mBAAqB,SAAU/tE,EAAWq/D,EAAiBnJ,EAAQwO,EAAc+G,GACzG,IAAIC,EAAe73E,UAAUvlB,OAAS,QAAsB9C,IAAjBqoB,UAAU,IAAmBA,UAAU,GAElF,OAAIvjB,KAAKu6F,mBACAv6F,KAAKozF,GAAGl5E,KAAK,CAAC,sBAAsBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGrFvjB,KAAKk4F,WAAW,wBAQhB5R,GAAM3B,cAAcj1D,EAAW,YAAa,WAQ5C42D,GAAM3B,cAAcyW,EAAc,eAAgB,YACrDC,GAAwB3uE,MAAM1X,SAAU0X,MAAMmvE,cAAe,EAAG,kBAAmB,CACjFhtE,OAAQ,+BAIL7uB,KAAKy2F,UAAU/mE,EAAWq/D,EAAiB,KAAM,KAAMnJ,EAAQ,KAAM,KAAMwO,EAAc+G,EAAoBC,KAblHC,GAAwB3uE,MAAM1X,SAAU0X,MAAMmvE,cAAe,EAAG,kBAAmB,CACjFhtE,OAAQ,gCAGF,IAZRwsE,GAAwB3uE,MAAM1X,SAAU0X,MAAMmvE,cAAe,EAAG,kBAAmB,CACjFhtE,OAAQ,qBAGF,EAkBZ,EAOA,IAAI6uE,GAAY,SAAmB5qF,GACjC,OAAQzF,MAAM4sE,WAAWnnE,KAAO6qF,SAAS7qF,EAC3C,EAOIuoF,GAA0B,SAAiCjH,EAAc+G,EAAoBrrE,EAAQ5kB,EAAU0yF,GACtF,aAAvB5nF,EAAKo+E,IACPA,EAAatkE,EAAQ5kB,EAAU0yF,GAGA,aAA7B5nF,EAAKmlF,IACPA,EAAmBrrE,EAAQ5kB,EAAU0yF,EAEzC,EAcA5K,GAAgB1vF,UAAUu6F,aAAe,SAAsBC,GAC7D,GAAI99F,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,gBAAgBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGpF,GAAKvjB,KAAKk4F,WAAW,kBASrB,GAJ0B,WAAtBliF,EAAK8nF,IAA6Bz6F,OAAOC,UAAUC,eAAetD,KAAK69F,EAAa,QACtFA,EAAc7C,GAAgC,IAAIjN,GAAW8P,IAG3DA,aAAuB9P,IAEzB,GAAI8P,GAAeA,EAAY9O,kBAC7B,OAAOhvF,KAAKm7E,SAASoE,EAAUkC,cAAeqc,EAAY7O,sBAG5D3I,GAAMjC,IAAIjgF,MAAM,+DAAiE4R,EAAK8nF,GAE1F,EAYE9K,GAAgB1vF,UAAUy6F,WAAa,SAAoBpP,EAAOF,EAAUuP,GAC1E,OAAIh+F,KAAKu6F,mBACAv6F,KAAKozF,GAAGl5E,KAAK,CAAC,cAAcjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAI7EvjB,KAAKk4F,WAAW,iBAAoBwF,GAAU/O,UAAuBzzF,IAAbuzF,GAA2BiP,GAAUjP,IAK3FzuF,KAAKy2F,UAAUlX,EAAUkC,cAAe,CAAC,EAAG,CACjD8M,UAAWyP,EACXC,QAAS,iBACTxP,SAAUA,GAAY,EACtBE,MAAOA,GACN,KAAM,KAAM,KAAM,KAAM,OARjB,CASZ,EAQFqE,GAAgB1vF,UAAU46F,mBAAqB,SAA4BC,EAAYC,EAAetuE,EAAQ5kB,GAG5G,IAFA,IAAImzF,EAAS,CAAC,gBAAiB,oBAEtB9+F,EAAI,EAAGA,EAAI8+F,EAAOrgG,OAAQuB,IAIjC,IAHA,IAAIsa,EAAQwkF,EAAO9+F,GACf++F,EAAkB,kBAAVzkF,EAA4BskF,EAAaC,EAE5CrgG,EAAI,EAAGA,EAAIiC,KAAK6Z,GAAO7b,OAAaD,IAAK,CAChD,IAAIwgG,EAAcv+F,KAAK6Z,GAAO9b,GAE1BwgG,EAAY7xE,MAAM4vE,UAAYgC,GAC5BC,EAAY1C,eACd0C,EAAY1C,cAAc/rE,EAAQ5kB,EAGxC,CAEJ,EAOA8nF,GAAgB1vF,UAAUk7F,aAAe,SAAsBL,EAAYC,EAAetuE,EAAQ5kB,GAChGuzF,GAAcz+F,KAAM,gBAAiBm+F,EAAYruE,EAAQ5kB,GAEzDuzF,GAAcz+F,KAAM,mBAAoBo+F,EAAetuE,EAAQ5kB,EACjE,EAQA,IAAIuzF,GAAgB,SAAuB93E,EAAO+3E,EAAYJ,EAAOxuE,EAAQ5kB,GAC3E,KAAIozF,EAAQ,GAAZ,CAMA,IAFA,IAAIK,EAAiB,GAEZ5gG,EAAI,EAAGA,EAAI4oB,EAAM+3E,GAAY1gG,OAAaD,IAAK,CACtD,IAAIwgG,EAAc53E,EAAM+3E,GAAY3gG,GAEhCwgG,EAAY7xE,MAAM4vE,SAAWgC,EAC/BK,EAAezkF,KAAKqkF,GAEhBA,EAAYvpF,UACdupF,EAAYvpF,SAAS8a,EAAQ5kB,EAGnC,CAEAyb,EAAM+3E,GAAcC,CAhBpB,CAiBF,EAQA3L,GAAgB1vF,UAAU21F,WAAa,WACrC,GAAKj5F,KAAKk4F,WAAW,iBAOrB,GAAIl4F,KAAK2G,QAAQgkF,OACf3qF,KAAKw+F,aAAa3/C,IAAUA,IAAU,EAAG,kBAAmB,CAC1DhwB,OAAQ,gCAMZ,GAA4B,IAAxB7uB,KAAKg5F,eAAT,CAOA,GAAIh5F,KAAK2G,QAAQm+E,YAAcvF,EAAUiD,iBAAkB,CACzD,GAAIxiF,KAAKqzF,SACP,OAGFrzF,KAAKqzF,UAAW,CAClB,CAEA,IAAI1rF,EAAW3H,KAAK2G,QAAQ2pF,YAAuB,WAAazN,EAAYt7E,SAASI,SAA5C,QAAiE,OACtGkB,EAAMlB,EAAW,MAAQ3H,KAAK2G,QAAQkpF,YAEtC+O,EAAYr2F,KAAKC,IAAIxI,KAAKg5F,eAAgBh5F,KAAK2G,QAAQ8rF,iBAEvDoM,EAAe7+F,KAAK8+F,yBAAyBF,GAE7CT,EAAaU,EAAaV,WAC1BC,EAAgBS,EAAaT,cAC7B3F,EAAStuF,KAAKC,UAAUy0F,EAAaE,aAAa3+F,KAAI,SAAUsqF,GAClE,IAAIh+D,EAAQg+D,EAAMh+D,MAClB,OAAOA,CACT,KACIsyE,GAAa,IAAI7xF,MAAOG,UACxBge,EAAO,CACT2zE,OAAQj/F,KAAK2G,QAAQ4D,OACrBpH,EAAGs1F,EACH98D,EAAG4jD,EAAUE,YACbyf,YAAaF,EACbG,SAAU,IAAI5f,EAAUE,YAAcz/E,KAAK2G,QAAQ4D,OAASkuF,EAASuG,IAGvE,GAAIh/F,KAAK2G,QAAQm+E,YAAcvF,EAAUiD,kBAAyC,qBAAdrhF,UAApE,CAgBA,IAAIwlB,EAAQ3mB,KAEZ,IACE,IAAImtF,GAAQtkF,EAAKyiB,EAAMtrB,KAAK2G,QAAQ6D,SAASw3B,MAAK,SAAUlS,EAAQ5kB,GAClEyb,EAAM0sE,UAAW,EAEjB,IACiB,MAAXvjE,GAA+B,YAAb5kB,GACpByb,EAAM63E,aAAaL,EAAYC,EAAetuE,EAAQ5kB,GAElDyb,EAAMhgB,QAAQ2qF,YAChB3qE,EAAM2qE,aAIR3qE,EAAMsvE,uBAGNtvE,EAAMu3E,mBAAmBC,EAAYC,EAAetuE,EAAQ5kB,GAE7C,MAAX4kB,IAGoC,IAAlCnJ,EAAMhgB,QAAQ8rF,iBAChB9rE,EAAM63E,aAAaL,EAAYC,EAAetuE,EAAQ5kB,GAIxDyb,EAAMhgB,QAAQ8rF,gBAAkBlqF,KAAK62F,KAAKR,EAAY,GACtDj4E,EAAMsyE,cAUZ,CADE,MAAO91F,IACT,CACF,GAWF,CAVE,MAAOA,IACP,IAAI2sB,EAAS,EACT5kB,EAAW,yBACfo7E,GAAMjC,IAAIjgF,MAAM8G,GAEhByb,EAAMu3E,mBAAmBC,EAAYC,EAAetuE,EAAQ5kB,GAE5Dyb,EAAM63E,aAAaL,EAAYC,EAAetuE,EAAQ5kB,EAAU,CAC9D2jB,OAAQ1rB,GAAE0B,SAEd,CArDA,KAdA,CACE,IAAIw6F,EAAUl+F,UAAU4jF,WAAWl8E,EAAK,IAAIy2F,gBAAgBh0E,IAExD+zE,GACFr/F,KAAKw+F,aAAaL,EAAYC,EAAe,IAAK,WAE9Cp+F,KAAK2G,QAAQ2qF,YACftxF,KAAKsxF,cAGPtxF,KAAKk+F,mBAAmBC,EAAYC,EAAe,EAAG,GAI1D,CAjDA,OAhBEp+F,KAAKw+F,aAAa3/C,IAAUA,IAAU,EAAG,kBAAmB,CAC1DhwB,OAAQ,mBAsHd,EAQAmkE,GAAgB1vF,UAAUw7F,yBAA2B,SAAkCF,GAErF,IAAIG,EAAe,GACfQ,EAAa,EACbpB,GAAc,EACdqB,EAAgB,EAChBpB,GAAiB,EAErB,MAAOW,EAAa/gG,OAAS4gG,EAAW,CACtC,IAAIL,OAAc,EACdkB,EAAcD,GAAiBx/F,KAAKmzF,iBAAiBn1F,OACrD0hG,EAAWH,GAAcv/F,KAAKkzF,cAAcl1F,OAGhD,GAAI0hG,GAAYD,EAAa,CAC3BnZ,GAAMjC,IAAIjgF,MAAM,yEAChB,KACF,CACSq7F,GACLlB,EAAcv+F,KAAKkzF,cAAcqM,KACjCpB,EAAaI,EAAY7xE,MAAM4vE,UACtBoD,GACTnB,EAAcv+F,KAAKmzF,iBAAiBqM,KACpCpB,EAAgBG,EAAY7xE,MAAM4vE,YAG5B,oBAAqBt8F,KAAKkzF,cAAcqM,GAAY7yE,QAAU1sB,KAAKkzF,cAAcqM,GAAY7yE,MAAMiwE,gBAAkB38F,KAAKmzF,iBAAiBqM,GAAe9yE,MAAMiwE,iBACpK4B,EAAcv+F,KAAKkzF,cAAcqM,KACjCpB,EAAaI,EAAY7xE,MAAM4vE,WAE/BiC,EAAcv+F,KAAKmzF,iBAAiBqM,KACpCpB,EAAgBG,EAAY7xE,MAAM4vE,UAIxCyC,EAAa7kF,KAAKqkF,EACpB,CAEA,MAAO,CACLQ,aAAcA,EACdZ,WAAYA,EACZC,cAAeA,EAEnB,EAQEpL,GAAgB1vF,UAAUq8F,wBAA0B,SAAiCjjB,GACnF18E,KAAKk9E,kBAAkBR,EACzB,EAUFsW,GAAgB1vF,UAAUs8F,YAAc,WACtC,OAAO5/F,KAAK2G,QAAQmqF,QAAQhyF,OAC9B,EASAk0F,GAAgB1vF,UAAUu8F,WAAa,SAAoB36F,EAAMpG,GAClD,OAAToG,GAAiC,qBAATA,IAC1BlF,KAAK2G,QAAQmqF,QAAQ5rF,KAAOA,GAGd,OAAZpG,GAAuC,qBAAZA,IAC7BkB,KAAK2G,QAAQmqF,QAAQhyF,QAAUA,EAEnC,EAOAk0F,GAAgB1vF,UAAUi3F,iBAAmB,WAC3C,OAAOv6F,KAAKw1F,qBAAuBx1F,KAAK8/F,uBAC1C,EAQA9M,GAAgB1vF,UAAU4xF,qBAAuB,WAC/Cl1F,KAAK8/F,yBAA0B,EAE/B9/F,KAAKozF,GAAGl5E,KAAK,CAAC,QAAQjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,IACrE,EASAyvE,GAAgB1vF,UAAUy8F,eAAiB,WAEzC//F,KAAK8/F,yBAA0B,EAE/B9J,GAAgBh2F,MAEhBA,KAAKo2F,oBACP,EAMApD,GAAgB1vF,UAAUgxF,sBAAwB,WAC5Ct0F,KAAK2G,QAAQ+rF,kBACfK,GAAWj/E,QAAQ9T,KAAK2G,QAAQ6oF,WAAYxvF,KAAK2G,QAAQ2pF,WAAY,WACnEtwF,KAAK2G,QAAQkpF,YAAckD,GAAWD,iBACxC,EAAE/7E,KAAK/W,MAEX,EAQAgzF,GAAgB1vF,UAAU08F,YAAc,WACtC,OAAOhgG,KAAK2G,QAAQs2E,QACtB,EAQA+V,GAAgB1vF,UAAU28F,UAAY,WACpC,OAAOjgG,KAAK2G,QAAQo2E,MACtB,EAQAiW,GAAgB1vF,UAAU48F,gCAAkC,SAAyCC,GACnG,GAAK7Z,GAAM3B,cAAcwb,EAAc,eAAgB,UAAvD,CAIA,GAAIngG,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,mCAAmCjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGvG,IACEvjB,KAAK2G,QAAQ8qF,eAAiB0O,CAGhC,CAFE,MAAOh9F,IACPmjF,GAAMjC,IAAIjgF,MAAMjB,GAClB,CAVA,CAWF,EASA6vF,GAAgB1vF,UAAU88F,wBAA0B,SAAiC/P,GACnF,GAAK/J,GAAM3B,cAAc0L,EAAsB,uBAAwB,UAAvE,CAIA,GAAIrwF,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,2BAA2Bjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAG/F,IACEvjB,KAAK2G,QAAQ0pF,qBAAuBA,CAGtC,CAFE,MAAOltF,IACPmjF,GAAMjC,IAAIjgF,MAAMjB,GAClB,CAVA,CAWF,EASA6vF,GAAgB1vF,UAAU+8F,oBAAsB,SAA6B3N,GAC3E,GAAKpM,GAAM3B,cAAc+N,EAAkB,mBAAoB,WAA/D,CAIA,GAAI1yF,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,uBAAuBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAG3F,IACEvjB,KAAK2G,QAAQ+rF,iBAAmBA,EAEhC1yF,KAAKs0F,uBAGP,CAFE,MAAOnxF,IACPmjF,GAAMjC,IAAIjgF,MAAMjB,GAClB,CAZA,CAaF,EAUA6vF,GAAgB1vF,UAAUg9F,cAAgB,SAAuB9Q,GAC/D,IAAImD,IAAqBpvE,UAAUvlB,OAAS,QAAsB9C,IAAjBqoB,UAAU,KAAmBA,UAAU,GAExF,IAAIisE,IAAeJ,GAAoBE,IAAME,IAAeJ,GAAoBC,KAAO/I,GAAM3B,cAAcgO,EAAoB,qBAAsB,WAArJ,CAIA,GAAI3yF,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,iBAAiBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGrF,IACEvjB,KAAK2G,QAAQ6oF,WAAaA,EAC1BxvF,KAAK2G,QAAQgsF,mBAAqBA,EAE9BA,IACF3yF,KAAK2G,QAAQkpF,YAAcN,GAAevvF,KAAK2G,QAAQ6oF,YAI3D,CAFE,MAAOrsF,IACPmjF,GAAMjC,IAAIjgF,MAAMjB,GAClB,CAfA,CAgBF,EASA6vF,GAAgB1vF,UAAUi9F,aAAe,SAAsBC,GAC7D,GAAKla,GAAM3B,cAAc6b,EAAW,YAAa,UAAjD,CAIA,GAAIxgG,KAAKu6F,mBACP,OAAOv6F,KAAKozF,GAAGl5E,KAAK,CAAC,gBAAgBjc,OAAO8I,MAAMzD,UAAU8B,MAAMnF,KAAKsjB,UAAW,KAGpF,IACEvjB,KAAK2G,QAAQkpF,YAAc2Q,CAG7B,CAFE,MAAOr9F,IACPmjF,GAAMjC,IAAIjgF,MAAMjB,GAClB,CAVA,CAWF,EAeA,IAAIs9F,GAAY,WACdzgG,KAAK2G,QAAUm4E,EAAc,CAAC,EAAG8Q,IACjC5vF,KAAKozF,GAAK,GACVpzF,KAAK0gG,WAAa,CAAC,CACrB,EAEAD,GAAUn9F,UAAUopF,SAAWA,GAC/B+T,GAAUn9F,UAAU0qF,QAAUA,GAE9ByS,GAAUn9F,UAAU46E,YAAc,SAAqBj4E,GACrDA,EAAWqgF,GAAM/B,cAAct+E,GAAYs5E,EAAUC,iBAAmBv5E,EAASrH,cACjF,IAAIqgG,EAASj/F,KAAK0gG,WAAWz6F,GAO7B,YALe/K,IAAX+jG,IACFA,EAAS,IAAIjM,GAAgB/sF,GAC7BjG,KAAK0gG,WAAWz6F,GAAYg5F,GAGvBA,CACT,EAeEwB,GAAUn9F,UAAU2wF,KAAO,SAAc1pF,EAAQ2pF,EAAYC,EAAYC,GACvEp0F,KAAKk+E,cAAc+V,KAAK1pF,EAAQ2pF,EAAYC,EAAY,SAAUluF,GAEhEjG,KAAK2G,QAAUV,EAASU,QAEG,aAAvBqP,EAAKo+E,IACPA,EAAanuF,EAEjB,EAAE8Q,KAAK/W,MACT,EASAygG,GAAUn9F,UAAUo1F,aAAe,WACjC,OAAO14F,KAAKk+E,cAAcwa,cAC5B,EASA+H,GAAUn9F,UAAUs1F,aAAe,WACjC,OAAO54F,KAAKk+E,cAAc0a,cAC5B,EAOA6H,GAAUn9F,UAAUu1F,YAAc,WAChC,OAAO74F,KAAKk+E,cAAc2a,aAC5B,EAOA4H,GAAUn9F,UAAUw1F,eAAiB,WACnC,OAAO94F,KAAKk+E,cAAc4a,gBAC5B,EAOA2H,GAAUn9F,UAAUy1F,mBAAqB,WACvC,OAAO/4F,KAAKk+E,cAAc6a,oBAC5B,EAQA0H,GAAUn9F,UAAUguF,WAAa,WAC/BtxF,KAAKk+E,cAAcoT,YACrB,EAUAmP,GAAUn9F,UAAUg3F,UAAY,SAAmBr+D,GACjDj8B,KAAKk+E,cAAcoc,UAAUr+D,EAC/B,EAUAwkE,GAAUn9F,UAAUw5E,UAAY,SAAmBC,GACjD/8E,KAAKk+E,cAAcpB,UAAUC,EAC/B,EAiBA0jB,GAAUn9F,UAAUk3F,SAAW,SAAUC,EAAWzU,GAClDhmF,KAAKk+E,cAAcsc,SAASC,EAAWzU,EACzC,EAUAya,GAAUn9F,UAAUo3F,UAAY,SAAmBC,GACjD36F,KAAKk+E,cAAcwc,UAAUC,EAC/B,EAWA8F,GAAUn9F,UAAUw3F,mBAAqB,WACvC96F,KAAKk+E,cAAc4c,oBACrB,EAcA2F,GAAUn9F,UAAU05E,YAAc,SAAqBC,GACrDj9E,KAAKk+E,cAAclB,YAAYC,EACjC,EAYAwjB,GAAUn9F,UAAU45E,kBAAoB,SAA2BR,GACjE18E,KAAKk+E,cAAchB,kBAAkBR,EACvC,EASA+jB,GAAUn9F,UAAU03F,oBAAsB,WACxCh7F,KAAKk+E,cAAc8c,qBACrB,EAeAyF,GAAUn9F,UAAUk2F,SAAW,SAAU0B,EAAc9G,GACrDp0F,KAAKk+E,cAAcsb,SAAS0B,EAAc9G,EAC5C,EAUAqM,GAAUn9F,UAAUm4F,eAAiB,SAAwB7gB,GAC3D56E,KAAKk+E,cAAcud,eAAe7gB,EACpC,EAqBA6lB,GAAUn9F,UAAU63E,SAAW,SAAkBzrD,EAAWq/D,EAAiBqF,GAC3E,OAAOp0F,KAAKk+E,cAAc/C,SAASzrD,EAAWq/D,EAAiBqF,EACjE,EAqBAqM,GAAUn9F,UAAUm6F,mBAAqB,SAAU/tE,EAAWq/D,EAAiBnJ,EAAQwO,GACrF,OAAOp0F,KAAKk+E,cAAcuf,mBAAmB/tE,EAAWq/D,EAAiBnJ,EAAQwO,EACnF,EAeAqM,GAAUn9F,UAAUu6F,aAAe,SAAsBC,GACvD,OAAO99F,KAAKk+E,cAAc2f,aAAaC,EACzC,EAYA2C,GAAUn9F,UAAUy6F,WAAa,SAAoBpP,EAAOF,EAAUuP,GACpE,OAAOh+F,KAAKk+E,cAAc6f,WAAWpP,EAAOF,EAAUuP,EACxD,EAOAyC,GAAUn9F,UAAUk7F,aAAe,SAAsBL,EAAYC,GACnEp+F,KAAKk+E,cAAcsgB,aAAaL,EAAYC,EAC9C,EAUAqC,GAAUn9F,UAAU21F,WAAa,SAAoBjkF,GACnDhV,KAAKk+E,cAAc+a,WAAWjkF,EAChC,EAQAyrF,GAAUn9F,UAAUq8F,wBAA0B,SAAiCjjB,GAC7E18E,KAAKk+E,cAAchB,kBAAkBR,EACvC,EAUF+jB,GAAUn9F,UAAUs8F,YAAc9gG,GAGlC,IAAI6hG,GAA6B,qBAAhB9d,GAA+BA,EAAY+d,WAAa,CAAC,EACtErxE,GAAc,IAAIkxE,GAOtB,IAAK,IAAIx6F,MANTspB,GAAY6jE,GAAKuN,GAAIvN,IAAM,GAMNuN,GAAIE,IAEnBx9F,OAAOC,UAAUC,eAAetD,KAAK0gG,GAAIE,IAAK56F,MAChDspB,GAAY2uD,YAAYj4E,IAAUmtF,GAAKuN,GAAIE,IAAI56F,IAAUmtF,IAAM,G,uBCz1JnE,OAuBC,SAAW3wF,GACV,aAUA,SAASq+F,EAAQC,EAAGC,GAClB,IAAIC,GAAW,MAAJF,IAAmB,MAAJC,GACtBE,GAAOH,GAAK,KAAOC,GAAK,KAAOC,GAAO,IAC1C,OAAQC,GAAO,GAAa,MAAND,CACxB,CASA,SAASE,EAAcC,EAAKC,GAC1B,OAAQD,GAAOC,EAAQD,IAAS,GAAKC,CACvC,CAaA,SAASC,EAAO5hG,EAAG2qC,EAAGC,EAAGy2D,EAAG79F,EAAGE,GAC7B,OAAO09F,EAAQK,EAAcL,EAAQA,EAAQz2D,EAAG3qC,GAAIohG,EAAQC,EAAG39F,IAAKF,GAAIonC,EAC1E,CAaA,SAASi3D,EAAMl3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAG79F,EAAGE,GAC/B,OAAOk+F,EAAQh3D,EAAI7F,GAAO6F,EAAIunC,EAAIxnC,EAAGC,EAAGy2D,EAAG79F,EAAGE,EAChD,CAaA,SAASo+F,EAAMn3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAG79F,EAAGE,GAC/B,OAAOk+F,EAAQh3D,EAAIunC,EAAMptC,GAAKotC,EAAIxnC,EAAGC,EAAGy2D,EAAG79F,EAAGE,EAChD,CAaA,SAASq+F,EAAMp3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAG79F,EAAGE,GAC/B,OAAOk+F,EAAOh3D,EAAI7F,EAAIotC,EAAGxnC,EAAGC,EAAGy2D,EAAG79F,EAAGE,EACvC,CAaA,SAASs+F,EAAMr3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAG79F,EAAGE,GAC/B,OAAOk+F,EAAO78D,GAAK6F,GAAKunC,GAAIxnC,EAAGC,EAAGy2D,EAAG79F,EAAGE,EAC1C,CASA,SAASu+F,EAAQZ,EAAG7hG,GAKlB,IAAInB,EACA6jG,EACAC,EACAC,EACAC,EAPJhB,EAAE7hG,GAAO,IAAM,KAAQA,EAAM,GAC7B6hG,EAA8B,IAAzB7hG,EAAM,KAAQ,GAAM,IAAWA,EAOpC,IAAImrC,EAAI,WACJC,GAAK,UACL7F,GAAK,WACLotC,EAAI,UAER,IAAK9zE,EAAI,EAAGA,EAAIgjG,EAAE/iG,OAAQD,GAAK,GAC7B6jG,EAAOv3D,EACPw3D,EAAOv3D,EACPw3D,EAAOr9D,EACPs9D,EAAOlwB,EAEPxnC,EAAIk3D,EAAMl3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,GAAI,GAAI,WAChC8zE,EAAI0vB,EAAM1vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,GAAI,IAAK,WACrC0mC,EAAI88D,EAAM98D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,GAAI,GAAI,WACpCusC,EAAIi3D,EAAMj3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,GAAI,IAAK,YACrCssC,EAAIk3D,EAAMl3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,GAAI,GAAI,WACpC8zE,EAAI0vB,EAAM1vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,GAAI,GAAI,YACpC0mC,EAAI88D,EAAM98D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,GAAI,IAAK,YACrCusC,EAAIi3D,EAAMj3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,GAAI,IAAK,UACrCssC,EAAIk3D,EAAMl3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,GAAI,EAAG,YACnC8zE,EAAI0vB,EAAM1vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,GAAI,IAAK,YACrC0mC,EAAI88D,EAAM98D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,IAAK,IAAK,OACtCusC,EAAIi3D,EAAMj3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,IAAK,IAAK,YACtCssC,EAAIk3D,EAAMl3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,IAAK,EAAG,YACpC8zE,EAAI0vB,EAAM1vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,IAAK,IAAK,UACtC0mC,EAAI88D,EAAM98D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,IAAK,IAAK,YACtCusC,EAAIi3D,EAAMj3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,IAAK,GAAI,YAErCssC,EAAIm3D,EAAMn3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,GAAI,GAAI,WACpC8zE,EAAI2vB,EAAM3vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,GAAI,GAAI,YACpC0mC,EAAI+8D,EAAM/8D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,IAAK,GAAI,WACrCusC,EAAIk3D,EAAMl3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,GAAI,IAAK,WACjCssC,EAAIm3D,EAAMn3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,GAAI,GAAI,WACpC8zE,EAAI2vB,EAAM3vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,IAAK,EAAG,UACpC0mC,EAAI+8D,EAAM/8D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,IAAK,IAAK,WACtCusC,EAAIk3D,EAAMl3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,GAAI,IAAK,WACrCssC,EAAIm3D,EAAMn3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,GAAI,EAAG,WACnC8zE,EAAI2vB,EAAM3vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,IAAK,GAAI,YACrC0mC,EAAI+8D,EAAM/8D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,GAAI,IAAK,WACrCusC,EAAIk3D,EAAMl3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,GAAI,GAAI,YACpCssC,EAAIm3D,EAAMn3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,IAAK,GAAI,YACrC8zE,EAAI2vB,EAAM3vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,GAAI,GAAI,UACpC0mC,EAAI+8D,EAAM/8D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,GAAI,GAAI,YACpCusC,EAAIk3D,EAAMl3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,IAAK,IAAK,YAEtCssC,EAAIo3D,EAAMp3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,GAAI,GAAI,QACpC8zE,EAAI4vB,EAAM5vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,GAAI,IAAK,YACrC0mC,EAAIg9D,EAAMh9D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,IAAK,GAAI,YACrCusC,EAAIm3D,EAAMn3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,IAAK,IAAK,UACtCssC,EAAIo3D,EAAMp3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,GAAI,GAAI,YACpC8zE,EAAI4vB,EAAM5vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,GAAI,GAAI,YACpC0mC,EAAIg9D,EAAMh9D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,GAAI,IAAK,WACrCusC,EAAIm3D,EAAMn3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,IAAK,IAAK,YACtCssC,EAAIo3D,EAAMp3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,IAAK,EAAG,WACpC8zE,EAAI4vB,EAAM5vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,GAAI,IAAK,WACjC0mC,EAAIg9D,EAAMh9D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,GAAI,IAAK,WACrCusC,EAAIm3D,EAAMn3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,GAAI,GAAI,UACpCssC,EAAIo3D,EAAMp3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,GAAI,GAAI,WACpC8zE,EAAI4vB,EAAM5vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,IAAK,IAAK,WACtC0mC,EAAIg9D,EAAMh9D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,IAAK,GAAI,WACrCusC,EAAIm3D,EAAMn3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,GAAI,IAAK,WAErCssC,EAAIq3D,EAAMr3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,GAAI,GAAI,WAChC8zE,EAAI6vB,EAAM7vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,GAAI,GAAI,YACpC0mC,EAAIi9D,EAAMj9D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,IAAK,IAAK,YACtCusC,EAAIo3D,EAAMp3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,GAAI,IAAK,UACrCssC,EAAIq3D,EAAMr3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,IAAK,EAAG,YACpC8zE,EAAI6vB,EAAM7vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,GAAI,IAAK,YACrC0mC,EAAIi9D,EAAMj9D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,IAAK,IAAK,SACtCusC,EAAIo3D,EAAMp3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,GAAI,IAAK,YACrCssC,EAAIq3D,EAAMr3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,GAAI,EAAG,YACnC8zE,EAAI6vB,EAAM7vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,IAAK,IAAK,UACtC0mC,EAAIi9D,EAAMj9D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,GAAI,IAAK,YACrCusC,EAAIo3D,EAAMp3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,IAAK,GAAI,YACrCssC,EAAIq3D,EAAMr3D,EAAGC,EAAG7F,EAAGotC,EAAGkvB,EAAEhjG,EAAI,GAAI,GAAI,WACpC8zE,EAAI6vB,EAAM7vB,EAAGxnC,EAAGC,EAAG7F,EAAGs8D,EAAEhjG,EAAI,IAAK,IAAK,YACtC0mC,EAAIi9D,EAAMj9D,EAAGotC,EAAGxnC,EAAGC,EAAGy2D,EAAEhjG,EAAI,GAAI,GAAI,WACpCusC,EAAIo3D,EAAMp3D,EAAG7F,EAAGotC,EAAGxnC,EAAG02D,EAAEhjG,EAAI,GAAI,IAAK,WAErCssC,EAAIy2D,EAAQz2D,EAAGu3D,GACft3D,EAAIw2D,EAAQx2D,EAAGu3D,GACfp9D,EAAIq8D,EAAQr8D,EAAGq9D,GACfjwB,EAAIivB,EAAQjvB,EAAGkwB,GAEjB,MAAO,CAAC13D,EAAGC,EAAG7F,EAAGotC,EACnB,CAQA,SAASmwB,EAAUh8D,GACjB,IAAIjoC,EACAqoC,EAAS,GACT67D,EAA0B,GAAfj8D,EAAMhoC,OACrB,IAAKD,EAAI,EAAGA,EAAIkkG,EAAUlkG,GAAK,EAC7BqoC,GAAUrB,OAAOC,aAAcgB,EAAMjoC,GAAK,KAAOA,EAAI,GAAM,KAE7D,OAAOqoC,CACT,CASA,SAAS87D,EAAUl8D,GACjB,IAAIjoC,EACAqoC,EAAS,GAEb,IADAA,GAAQJ,EAAMhoC,QAAU,GAAK,QAAK9C,EAC7B6C,EAAI,EAAGA,EAAIqoC,EAAOpoC,OAAQD,GAAK,EAClCqoC,EAAOroC,GAAK,EAEd,IAAIokG,EAAyB,EAAfn8D,EAAMhoC,OACpB,IAAKD,EAAI,EAAGA,EAAIokG,EAASpkG,GAAK,EAC5BqoC,EAAOroC,GAAK,KAAiC,IAA1BioC,EAAMtB,WAAW3mC,EAAI,KAAcA,EAAI,GAE5D,OAAOqoC,CACT,CAQA,SAASg8D,EAAQl/F,GACf,OAAO8+F,EAAUL,EAAQO,EAAUh/F,GAAe,EAAXA,EAAElF,QAC3C,CASA,SAASqkG,EAAY/3F,EAAKghB,GACxB,IAAIvtB,EAIAukG,EAHAC,EAAOL,EAAU53F,GACjBk4F,EAAO,GACPC,EAAO,GAMX,IAJAD,EAAK,IAAMC,EAAK,SAAMvnG,EAClBqnG,EAAKvkG,OAAS,KAChBukG,EAAOZ,EAAQY,EAAmB,EAAbj4F,EAAItM,SAEtBD,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBykG,EAAKzkG,GAAe,UAAVwkG,EAAKxkG,GACf0kG,EAAK1kG,GAAe,WAAVwkG,EAAKxkG,GAGjB,OADAukG,EAAOX,EAAQa,EAAKvkG,OAAOikG,EAAU52E,IAAQ,IAAoB,EAAdA,EAAKttB,QACjDgkG,EAAUL,EAAQc,EAAKxkG,OAAOqkG,GAAO,KAC9C,CAQA,SAASI,EAAS18D,GAChB,IAEI+6D,EACAhjG,EAHA4kG,EAAS,mBACTv8D,EAAS,GAGb,IAAKroC,EAAI,EAAGA,EAAIioC,EAAMhoC,OAAQD,GAAK,EACjCgjG,EAAI/6D,EAAMtB,WAAW3mC,GACrBqoC,GAAUu8D,EAAOx7D,OAAQ45D,IAAM,EAAK,IAAQ4B,EAAOx7D,OAAW,GAAJ45D,GAE5D,OAAO36D,CACT,CAQA,SAASw8D,EAAa58D,GACpB,OAAOg9C,SAASh4C,mBAAmBhF,GACrC,CAQA,SAAS68D,EAAO3/F,GACd,OAAOk/F,EAAQQ,EAAa1/F,GAC9B,CAOA,SAAS4/F,EAAO5/F,GACd,OAAOw/F,EAASG,EAAO3/F,GACzB,CAQA,SAAS6/F,EAAWvjG,EAAGqyE,GACrB,OAAOwwB,EAAYO,EAAapjG,GAAIojG,EAAa/wB,GACnD,CAQA,SAASmxB,EAAWxjG,EAAGqyE,GACrB,OAAO6wB,EAASK,EAAWvjG,EAAGqyE,GAChC,CAYA,SAASoxB,EAAIC,EAAQ54F,EAAK4vC,GACxB,OAAK5vC,EAMA4vC,EAGE6oD,EAAWz4F,EAAK44F,GAFdF,EAAW14F,EAAK44F,GANlBhpD,EAGE2oD,EAAOK,GAFLJ,EAAOI,EAQpB,CAGE,aACE,OAAOD,CACR,yCAMJ,EA1XA,E,uBCvBD,IAAIE,EAAa,EAAQ,KACrBC,EAAc,EAAQ,MAEtBC,EAAa9kB,UAGjB/7E,EAAOD,QAAU,SAAU+gG,GACzB,GAAIH,EAAWG,GAAW,OAAOA,EACjC,MAAMD,EAAWD,EAAYE,GAAY,qBAC3C,C,uBCTA,IAAIH,EAAa,EAAQ,KAErBI,EAAUx+D,OACVs+D,EAAa9kB,UAEjB/7E,EAAOD,QAAU,SAAU+gG,GACzB,GAAuB,iBAAZA,GAAwBH,EAAWG,GAAW,OAAOA,EAChE,MAAMD,EAAW,aAAeE,EAAQD,GAAY,kBACtD,C,uBCRA,IAAIE,EAAgB,EAAQ,MAExBH,EAAa9kB,UAEjB/7E,EAAOD,QAAU,SAAU2sC,EAAIurC,GAC7B,GAAI+oB,EAAc/oB,EAAWvrC,GAAK,OAAOA,EACzC,MAAMm0D,EAAW,uBACnB,C,uBCPA,IAAI14D,EAAW,EAAQ,KAEnB44D,EAAUx+D,OACVs+D,EAAa9kB,UAGjB/7E,EAAOD,QAAU,SAAU+gG,GACzB,GAAI34D,EAAS24D,GAAW,OAAOA,EAC/B,MAAMD,EAAWE,EAAQD,GAAY,oBACvC,C,uBCTA,IAAIG,EAAkB,EAAQ,MAC1BC,EAAkB,EAAQ,MAC1BC,EAAoB,EAAQ,MAG5BC,EAAe,SAAUC,GAC3B,OAAO,SAAUC,EAAOzjF,EAAI0jF,GAC1B,IAGI7tF,EAHA8tF,EAAIP,EAAgBK,GACpB9lG,EAAS2lG,EAAkBK,GAC3B7pF,EAAQupF,EAAgBK,EAAW/lG,GAIvC,GAAI6lG,GAAexjF,GAAMA,GAAI,MAAOriB,EAASmc,EAG3C,GAFAjE,EAAQ8tF,EAAE7pF,KAENjE,GAASA,EAAO,OAAO,OAEtB,KAAMlY,EAASmc,EAAOA,IAC3B,IAAK0pF,GAAe1pF,KAAS6pF,IAAMA,EAAE7pF,KAAWkG,EAAI,OAAOwjF,GAAe1pF,GAAS,EACnF,OAAQ0pF,IAAgB,CAC5B,CACF,EAEArhG,EAAOD,QAAU,CAGf6V,SAAUwrF,GAAa,GAGvBllG,QAASklG,GAAa,G,oCC7BxB,IAAIK,EAAc,EAAQ,MACtBj9F,EAAU,EAAQ,MAElBq8F,EAAa9kB,UAEbS,EAA2B37E,OAAO27E,yBAGlCklB,EAAoCD,IAAgB,WAEtD,QAAa/oG,IAAT8E,KAAoB,OAAO,EAC/B,IAEEqD,OAAOsuD,eAAe,GAAI,SAAU,CAAE8sB,UAAU,IAASzgF,OAAS,CAGpE,CAFE,MAAOoG,GACP,OAAOA,aAAiBm6E,SAC1B,CACF,CATwD,GAWxD/7E,EAAOD,QAAU2hG,EAAoC,SAAUF,EAAGhmG,GAChE,GAAIgJ,EAAQg9F,KAAOhlB,EAAyBglB,EAAG,UAAUvlB,SACvD,MAAM4kB,EAAW,gCACjB,OAAOW,EAAEhmG,OAASA,CACtB,EAAI,SAAUgmG,EAAGhmG,GACf,OAAOgmG,EAAEhmG,OAASA,CACpB,C,uBC1BA,IAAImmG,EAAc,EAAQ,MAEtBn1F,EAAWm1F,EAAY,CAAC,EAAEn1F,UAC1Bo1F,EAAcD,EAAY,GAAG/+F,OAEjC5C,EAAOD,QAAU,SAAU2sC,GACzB,OAAOk1D,EAAYp1F,EAASkgC,GAAK,GAAI,EACvC,C,sBCPA,IAAIm1D,EAAwB,EAAQ,MAChClB,EAAa,EAAQ,KACrBmB,EAAa,EAAQ,MACrBC,EAAkB,EAAQ,MAE1BC,EAAgBD,EAAgB,eAChCE,EAAUphG,OAGVqhG,EAAuE,aAAnDJ,EAAW,WAAc,OAAO/gF,SAAW,CAAhC,IAG/BohF,EAAS,SAAUz1D,EAAI5kC,GACzB,IACE,OAAO4kC,EAAG5kC,EACkB,CAA5B,MAAOlG,GAAqB,CAChC,EAGA5B,EAAOD,QAAU8hG,EAAwBC,EAAa,SAAUp1D,GAC9D,IAAI80D,EAAG15B,EAAKvnE,EACZ,YAAc7H,IAAPg0C,EAAmB,YAAqB,OAAPA,EAAc,OAEO,iBAAjDo7B,EAAMq6B,EAAOX,EAAIS,EAAQv1D,GAAKs1D,IAA8Bl6B,EAEpEo6B,EAAoBJ,EAAWN,GAEH,WAA3BjhG,EAASuhG,EAAWN,KAAmBb,EAAWa,EAAEY,QAAU,YAAc7hG,CACnF,C,uBC5BA,IAAI81E,EAAS,EAAQ,MACjBhiC,EAAU,EAAQ,MAClBguD,EAAiC,EAAQ,MACzCC,EAAuB,EAAQ,MAEnCtiG,EAAOD,QAAU,SAAUmuB,EAAQq0B,EAAQggD,GAIzC,IAHA,IAAI53E,EAAO0pB,EAAQkO,GACf4M,EAAiBmzC,EAAqBh0C,EACtCkuB,EAA2B6lB,EAA+B/zC,EACrD/yD,EAAI,EAAGA,EAAIovB,EAAKnvB,OAAQD,IAAK,CACpC,IAAIuM,EAAM6iB,EAAKpvB,GACV86E,EAAOnoD,EAAQpmB,IAAUy6F,GAAclsB,EAAOksB,EAAYz6F,IAC7DqnD,EAAejhC,EAAQpmB,EAAK00E,EAAyBj6B,EAAQz6C,GAEjE,CACF,C,uBCfA,IAAI25F,EAAc,EAAQ,MACtBa,EAAuB,EAAQ,MAC/BE,EAA2B,EAAQ,MAEvCxiG,EAAOD,QAAU0hG,EAAc,SAAU/vF,EAAQ5J,EAAK4L,GACpD,OAAO4uF,EAAqBh0C,EAAE58C,EAAQ5J,EAAK06F,EAAyB,EAAG9uF,GACzE,EAAI,SAAUhC,EAAQ5J,EAAK4L,GAEzB,OADAhC,EAAO5J,GAAO4L,EACPhC,CACT,C,mBCTA1R,EAAOD,QAAU,SAAU0iG,EAAQ/uF,GACjC,MAAO,CACLs9C,aAAuB,EAATyxC,GACdxxC,eAAyB,EAATwxC,GAChBxmB,WAAqB,EAATwmB,GACZ/uF,MAAOA,EAEX,C,uBCPA,IAAIitF,EAAa,EAAQ,KACrB2B,EAAuB,EAAQ,MAC/BI,EAAc,EAAQ,MACtBC,EAAuB,EAAQ,MAEnC3iG,EAAOD,QAAU,SAAUyhG,EAAG15F,EAAK4L,EAAOvP,GACnCA,IAASA,EAAU,CAAC,GACzB,IAAIy+F,EAASz+F,EAAQ6sD,WACjBtuD,OAAwBhK,IAAjByL,EAAQzB,KAAqByB,EAAQzB,KAAOoF,EAEvD,GADI64F,EAAWjtF,IAAQgvF,EAAYhvF,EAAOhR,EAAMyB,GAC5CA,EAAQ0+F,OACND,EAAQpB,EAAE15F,GAAO4L,EAChBivF,EAAqB76F,EAAK4L,OAC1B,CACL,IACOvP,EAAQ2+F,OACJtB,EAAE15F,KAAM86F,GAAS,UADEpB,EAAE15F,EAEF,CAA5B,MAAOlG,GAAqB,CAC1BghG,EAAQpB,EAAE15F,GAAO4L,EAChB4uF,EAAqBh0C,EAAEkzC,EAAG15F,EAAK,CAClC4L,MAAOA,EACPs9C,YAAY,EACZC,cAAe9sD,EAAQ4+F,gBACvB9mB,UAAW93E,EAAQ6+F,aAEvB,CAAE,OAAOxB,CACX,C,uBC1BA,IAAIqB,EAAS,EAAQ,MAGjB1zC,EAAiBtuD,OAAOsuD,eAE5BnvD,EAAOD,QAAU,SAAU+H,EAAK4L,GAC9B,IACEy7C,EAAe0zC,EAAQ/6F,EAAK,CAAE4L,MAAOA,EAAOu9C,cAAc,EAAMgrB,UAAU,GAG5E,CAFE,MAAOr6E,GACPihG,EAAO/6F,GAAO4L,CAChB,CAAE,OAAOA,CACX,C,uBCXA,IAAIuvF,EAAQ,EAAQ,MAGpBjjG,EAAOD,SAAWkjG,GAAM,WAEtB,OAA8E,GAAvEpiG,OAAOsuD,eAAe,CAAC,EAAG,EAAG,CAAE9uD,IAAK,WAAc,OAAO,CAAG,IAAK,EAC1E,G,mBCNA,IAAI6iG,EAAiC,iBAAZzsF,UAAwBA,SAASpB,IAItD8tF,EAAmC,oBAAfD,QAA8CxqG,IAAhBwqG,EAEtDljG,EAAOD,QAAU,CACfsV,IAAK6tF,EACLC,WAAYA,E,sBCRd,IAAIN,EAAS,EAAQ,MACjB16D,EAAW,EAAQ,KAEnB1xB,EAAWosF,EAAOpsF,SAElB2sF,EAASj7D,EAAS1xB,IAAa0xB,EAAS1xB,EAASqH,eAErD9d,EAAOD,QAAU,SAAU2sC,GACzB,OAAO02D,EAAS3sF,EAASqH,cAAc4uB,GAAM,CAAC,CAChD,C,mBCTA,IAAIm0D,EAAa9kB,UACbsnB,EAAmB,iBAEvBrjG,EAAOD,QAAU,SAAU2sC,GACzB,GAAIA,EAAK22D,EAAkB,MAAMxC,EAAW,kCAC5C,OAAOn0D,CACT,C,mBCNA1sC,EAAOD,QAAU,CACfujG,eAAgB,CAAE5iG,EAAG,iBAAkBuhC,EAAG,EAAG6vB,EAAG,GAChDyxC,mBAAoB,CAAE7iG,EAAG,qBAAsBuhC,EAAG,EAAG6vB,EAAG,GACxD0xC,sBAAuB,CAAE9iG,EAAG,wBAAyBuhC,EAAG,EAAG6vB,EAAG,GAC9D2xC,mBAAoB,CAAE/iG,EAAG,qBAAsBuhC,EAAG,EAAG6vB,EAAG,GACxD4xC,sBAAuB,CAAEhjG,EAAG,wBAAyBuhC,EAAG,EAAG6vB,EAAG,GAC9D6xC,mBAAoB,CAAEjjG,EAAG,sBAAuBuhC,EAAG,EAAG6vB,EAAG,GACzD8xC,2BAA4B,CAAEljG,EAAG,8BAA+BuhC,EAAG,EAAG6vB,EAAG,GACzE+xC,cAAe,CAAEnjG,EAAG,gBAAiBuhC,EAAG,EAAG6vB,EAAG,GAC9CgyC,kBAAmB,CAAEpjG,EAAG,oBAAqBuhC,EAAG,EAAG6vB,EAAG,GACtDiyC,oBAAqB,CAAErjG,EAAG,sBAAuBuhC,EAAG,GAAI6vB,EAAG,GAC3DkyC,kBAAmB,CAAEtjG,EAAG,oBAAqBuhC,EAAG,GAAI6vB,EAAG,GACvDmyC,YAAa,CAAEvjG,EAAG,aAAcuhC,EAAG,GAAI6vB,EAAG,GAC1CoyC,yBAA0B,CAAExjG,EAAG,2BAA4BuhC,EAAG,GAAI6vB,EAAG,GACrEqyC,eAAgB,CAAEzjG,EAAG,gBAAiBuhC,EAAG,GAAI6vB,EAAG,GAChDsyC,mBAAoB,CAAE1jG,EAAG,qBAAsBuhC,EAAG,GAAI6vB,EAAG,GACzDuyC,gBAAiB,CAAE3jG,EAAG,iBAAkBuhC,EAAG,GAAI6vB,EAAG,GAClDwyC,kBAAmB,CAAE5jG,EAAG,oBAAqBuhC,EAAG,GAAI6vB,EAAG,GACvDyyC,cAAe,CAAE7jG,EAAG,eAAgBuhC,EAAG,GAAI6vB,EAAG,GAC9C0yC,aAAc,CAAE9jG,EAAG,cAAeuhC,EAAG,GAAI6vB,EAAG,GAC5C2yC,WAAY,CAAE/jG,EAAG,YAAauhC,EAAG,GAAI6vB,EAAG,GACxC4yC,iBAAkB,CAAEhkG,EAAG,mBAAoBuhC,EAAG,GAAI6vB,EAAG,GACrD6yC,mBAAoB,CAAEjkG,EAAG,qBAAsBuhC,EAAG,GAAI6vB,EAAG,GACzD8yC,aAAc,CAAElkG,EAAG,cAAeuhC,EAAG,GAAI6vB,EAAG,GAC5C+yC,qBAAsB,CAAEnkG,EAAG,wBAAyBuhC,EAAG,GAAI6vB,EAAG,GAC9DgzC,eAAgB,CAAEpkG,EAAG,iBAAkBuhC,EAAG,GAAI6vB,EAAG,G,uBCzBnD,IAAIizC,EAAa,EAAQ,MAEzB/kG,EAAOD,QAAUglG,EAAW,YAAa,cAAgB,E,uBCFzD,IAOI3nG,EAAOd,EAPPumG,EAAS,EAAQ,MACjBjkG,EAAY,EAAQ,MAEpBunC,EAAU08D,EAAO18D,QACjB6+D,EAAOnC,EAAOmC,KACdC,EAAW9+D,GAAWA,EAAQ8+D,UAAYD,GAAQA,EAAK1oG,QACvD4oG,EAAKD,GAAYA,EAASC,GAG1BA,IACF9nG,EAAQ8nG,EAAG1oG,MAAM,KAGjBF,EAAUc,EAAM,GAAK,GAAKA,EAAM,GAAK,EAAI,IAAMA,EAAM,GAAKA,EAAM,MAK7Dd,GAAWsC,IACdxB,EAAQwB,EAAUxB,MAAM,iBACnBA,GAASA,EAAM,IAAM,MACxBA,EAAQwB,EAAUxB,MAAM,iBACpBA,IAAOd,GAAWc,EAAM,MAIhC4C,EAAOD,QAAUzD,C,kBCzBjB0D,EAAOD,QAAU,CACf,cACA,iBACA,gBACA,uBACA,iBACA,WACA,U,uBCRF,IAAI4hG,EAAc,EAAQ,MAEtBwD,EAASjiG,MACT3G,EAAUolG,EAAY,GAAGplG,SAEzB6oG,EAAO,SAAWl6C,GAAO,OAAO3oB,OAAO4iE,EAAOj6C,GAAKm6C,MAAS,CAArD,CAAuD,UAC9DC,EAA2B,uBAC3BC,EAAwBD,EAAyB5nG,KAAK0nG,GAE1DplG,EAAOD,QAAU,SAAUslG,EAAOG,GAChC,GAAID,GAAyC,iBAATF,IAAsBF,EAAOM,kBAC/D,MAAOD,IAAeH,EAAQ9oG,EAAQ8oG,EAAOC,EAA0B,IACvE,OAAOD,CACX,C,uBCbA,IAAIxC,EAAS,EAAQ,MACjBrmB,EAA2B,UAC3BkpB,EAA8B,EAAQ,MACtCC,EAAgB,EAAQ,MACxBhD,EAAuB,EAAQ,MAC/BiD,EAA4B,EAAQ,MACpCC,EAAW,EAAQ,MAiBvB7lG,EAAOD,QAAU,SAAUoE,EAASo+C,GAClC,IAGIujD,EAAQ53E,EAAQpmB,EAAKi+F,EAAgBC,EAAgB52C,EAHrD62C,EAAS9hG,EAAQ+pB,OACjBg4E,EAAS/hG,EAAQ0+F,OACjBsD,EAAShiG,EAAQiiG,KASrB,GANEl4E,EADEg4E,EACOrD,EACAsD,EACAtD,EAAOoD,IAAWtD,EAAqBsD,EAAQ,CAAC,IAE/CpD,EAAOoD,IAAW,CAAC,GAAGnlG,UAE9BotB,EAAQ,IAAKpmB,KAAOy6C,EAAQ,CAQ9B,GAPAyjD,EAAiBzjD,EAAOz6C,GACpB3D,EAAQkiG,gBACVj3C,EAAaotB,EAAyBtuD,EAAQpmB,GAC9Ci+F,EAAiB32C,GAAcA,EAAW17C,OACrCqyF,EAAiB73E,EAAOpmB,GAC/Bg+F,EAASD,EAASK,EAASp+F,EAAMm+F,GAAUE,EAAS,IAAM,KAAOr+F,EAAK3D,EAAQmiG,SAEzER,QAA6BptG,IAAnBqtG,EAA8B,CAC3C,UAAWC,UAAyBD,EAAgB,SACpDH,EAA0BI,EAAgBD,EAC5C,EAEI5hG,EAAQoiG,MAASR,GAAkBA,EAAeQ,OACpDb,EAA4BM,EAAgB,QAAQ,GAEtDL,EAAcz3E,EAAQpmB,EAAKk+F,EAAgB7hG,EAC7C,CACF,C,mBCrDAnE,EAAOD,QAAU,SAAUxC,GACzB,IACE,QAASA,GAGX,CAFE,MAAOqE,GACP,OAAO,CACT,CACF,C,uBCNA,IAAIqhG,EAAQ,EAAQ,MAEpBjjG,EAAOD,SAAWkjG,GAAM,WAEtB,IAAIvlG,EAAO,WAA4B,EAAE6W,OAEzC,MAAsB,mBAAR7W,GAAsBA,EAAKqD,eAAe,YAC1D,G,uBCPA,IAAIylG,EAAc,EAAQ,MAEtB/oG,EAAO+F,SAAS1C,UAAUrD,KAE9BuC,EAAOD,QAAUymG,EAAc/oG,EAAK8W,KAAK9W,GAAQ,WAC/C,OAAOA,EAAKquC,MAAMruC,EAAMsjB,UAC1B,C,uBCNA,IAAI0gF,EAAc,EAAQ,MACtBprB,EAAS,EAAQ,MAEjBowB,EAAoBjjG,SAAS1C,UAE7B4lG,EAAgBjF,GAAe5gG,OAAO27E,yBAEtC4mB,EAAS/sB,EAAOowB,EAAmB,QAEnCE,EAASvD,GAA0D,cAAhD,WAAqC,EAAE1gG,KAC1DkkG,EAAexD,KAAY3B,GAAgBA,GAAeiF,EAAcD,EAAmB,QAAQx1C,cAEvGjxD,EAAOD,QAAU,CACfqjG,OAAQA,EACRuD,OAAQA,EACRC,aAAcA,E,uBCfhB,IAAIJ,EAAc,EAAQ,MAEtBC,EAAoBjjG,SAAS1C,UAC7BrD,EAAOgpG,EAAkBhpG,KACzBopG,EAAsBL,GAAeC,EAAkBlyF,KAAKA,KAAK9W,EAAMA,GAE3EuC,EAAOD,QAAUymG,EAAcK,EAAsB,SAAU58D,GAC7D,OAAO,WACL,OAAOxsC,EAAKquC,MAAM7B,EAAIlpB,UACxB,CACF,C,uBCVA,IAAI8hF,EAAS,EAAQ,MACjBlC,EAAa,EAAQ,KAErBmG,EAAY,SAAUhG,GACxB,OAAOH,EAAWG,GAAYA,OAAWpoG,CAC3C,EAEAsH,EAAOD,QAAU,SAAUgnG,EAAWz/F,GACpC,OAAOyZ,UAAUvlB,OAAS,EAAIsrG,EAAUjE,EAAOkE,IAAclE,EAAOkE,IAAclE,EAAOkE,GAAWz/F,EACtG,C,uBCTA,IAAI0/F,EAAY,EAAQ,MACpB34D,EAAoB,EAAQ,MAIhCruC,EAAOD,QAAU,SAAUknG,EAAGC,GAC5B,IAAIC,EAAOF,EAAEC,GACb,OAAO74D,EAAkB84D,QAAQzuG,EAAYsuG,EAAUG,EACzD,C,uBCRA,IAAIC,EAAQ,SAAU16D,GACpB,OAAOA,GAAMA,EAAG3mC,MAAQA,MAAQ2mC,CAClC,EAGA1sC,EAAOD,QAELqnG,EAA2B,iBAAdxvB,YAA0BA,aACvCwvB,EAAuB,iBAAV3uG,QAAsBA,SAEnC2uG,EAAqB,iBAARtiG,MAAoBA,OACjCsiG,EAAuB,iBAAV,EAAArhE,GAAsB,EAAAA,IAEnC,WAAe,OAAOvoC,IAAO,CAA7B,IAAoCgG,SAAS,cAATA,E,uBCbtC,IAAIm+F,EAAc,EAAQ,MACtB0F,EAAW,EAAQ,MAEnBtmG,EAAiB4gG,EAAY,CAAC,EAAE5gG,gBAKpCf,EAAOD,QAAUc,OAAOw1E,QAAU,SAAgB3pC,EAAI5kC,GACpD,OAAO/G,EAAesmG,EAAS36D,GAAK5kC,EACtC,C,mBCVA9H,EAAOD,QAAU,CAAC,C,uBCAlB,IAAI0hG,EAAc,EAAQ,MACtBwB,EAAQ,EAAQ,MAChBnlF,EAAgB,EAAQ,KAG5B9d,EAAOD,SAAW0hG,IAAgBwB,GAAM,WAEtC,OAEQ,GAFDpiG,OAAOsuD,eAAerxC,EAAc,OAAQ,IAAK,CACtDzd,IAAK,WAAc,OAAO,CAAG,IAC5BwnC,CACL,G,uBCVA,IAAI85D,EAAc,EAAQ,MACtBsB,EAAQ,EAAQ,MAChBqE,EAAU,EAAQ,MAElBrF,EAAUphG,OACVrE,EAAQmlG,EAAY,GAAGnlG,OAG3BwD,EAAOD,QAAUkjG,GAAM,WAGrB,OAAQhB,EAAQ,KAAKhhG,qBAAqB,EAC5C,IAAK,SAAUyrC,GACb,MAAsB,UAAf46D,EAAQ56D,GAAkBlwC,EAAMkwC,EAAI,IAAMu1D,EAAQv1D,EAC3D,EAAIu1D,C,uBCdJ,IAAItB,EAAa,EAAQ,KACrBx4D,EAAW,EAAQ,KACnBtiB,EAAiB,EAAQ,MAG7B7lB,EAAOD,QAAU,SAAUuhG,EAAOiG,EAAOC,GACvC,IAAIC,EAAWC,EAUf,OAPE7hF,GAEA86E,EAAW8G,EAAYF,EAAM5hG,cAC7B8hG,IAAcD,GACdr/D,EAASu/D,EAAqBD,EAAU3mG,YACxC4mG,IAAuBF,EAAQ1mG,WAC/B+kB,EAAey7E,EAAOoG,GACjBpG,CACT,C,uBCjBA,IAAIK,EAAc,EAAQ,MACtBhB,EAAa,EAAQ,KACrBgH,EAAQ,EAAQ,MAEhBC,EAAmBjG,EAAYn+F,SAASgJ,UAGvCm0F,EAAWgH,EAAME,iBACpBF,EAAME,cAAgB,SAAUn7D,GAC9B,OAAOk7D,EAAiBl7D,EAC1B,GAGF1sC,EAAOD,QAAU4nG,EAAME,a,uBCbvB,IAYIvnG,EAAKD,EAAKvE,EAZVgsG,EAAkB,EAAQ,MAC1BjF,EAAS,EAAQ,MACjB16D,EAAW,EAAQ,KACnBu9D,EAA8B,EAAQ,MACtCrvB,EAAS,EAAQ,MACjB0xB,EAAS,EAAQ,MACjBC,EAAY,EAAQ,MACpBC,EAAa,EAAQ,MAErBC,EAA6B,6BAC7BnsB,EAAY8mB,EAAO9mB,UACnBzyD,EAAUu5E,EAAOv5E,QAGjB6+E,EAAU,SAAUz7D,GACtB,OAAO5wC,EAAI4wC,GAAMrsC,EAAIqsC,GAAMpsC,EAAIosC,EAAI,CAAC,EACtC,EAEI07D,EAAY,SAAU/uG,GACxB,OAAO,SAAUqzC,GACf,IAAIuX,EACJ,IAAK9b,EAASuE,KAAQuX,EAAQ5jD,EAAIqsC,IAAKl5B,OAASna,EAC9C,MAAM0iF,EAAU,0BAA4B1iF,EAAO,aACnD,OAAO4qD,CACX,CACF,EAEA,GAAI6jD,GAAmBC,EAAO9jD,MAAO,CACnC,IAAI0jD,EAAQI,EAAO9jD,QAAU8jD,EAAO9jD,MAAQ,IAAI36B,GAEhDq+E,EAAMtnG,IAAMsnG,EAAMtnG,IAClBsnG,EAAM7rG,IAAM6rG,EAAM7rG,IAClB6rG,EAAMrnG,IAAMqnG,EAAMrnG,IAElBA,EAAM,SAAUosC,EAAIp+B,GAClB,GAAIq5F,EAAM7rG,IAAI4wC,GAAK,MAAMqvC,EAAUmsB,GAGnC,OAFA55F,EAAS+5F,OAAS37D,EAClBi7D,EAAMrnG,IAAIosC,EAAIp+B,GACPA,CACT,EACAjO,EAAM,SAAUqsC,GACd,OAAOi7D,EAAMtnG,IAAIqsC,IAAO,CAAC,CAC3B,EACA5wC,EAAM,SAAU4wC,GACd,OAAOi7D,EAAM7rG,IAAI4wC,EACnB,CACF,KAAO,CACL,IAAI47D,EAAQN,EAAU,SACtBC,EAAWK,IAAS,EACpBhoG,EAAM,SAAUosC,EAAIp+B,GAClB,GAAI+nE,EAAO3pC,EAAI47D,GAAQ,MAAMvsB,EAAUmsB,GAGvC,OAFA55F,EAAS+5F,OAAS37D,EAClBg5D,EAA4Bh5D,EAAI47D,EAAOh6F,GAChCA,CACT,EACAjO,EAAM,SAAUqsC,GACd,OAAO2pC,EAAO3pC,EAAI47D,GAAS57D,EAAG47D,GAAS,CAAC,CAC1C,EACAxsG,EAAM,SAAU4wC,GACd,OAAO2pC,EAAO3pC,EAAI47D,EACpB,CACF,CAEAtoG,EAAOD,QAAU,CACfO,IAAKA,EACLD,IAAKA,EACLvE,IAAKA,EACLqsG,QAASA,EACTC,UAAWA,E,uBCpEb,IAAId,EAAU,EAAQ,MAKtBtnG,EAAOD,QAAUwE,MAAMC,SAAW,SAAiBs8F,GACjD,MAA4B,SAArBwG,EAAQxG,EACjB,C,sBCPA,IAAIyH,EAAe,EAAQ,MAEvBrF,EAAcqF,EAAalzF,IAI/BrV,EAAOD,QAAUwoG,EAAapF,WAAa,SAAUrC,GACnD,MAA0B,mBAAZA,GAA0BA,IAAaoC,CACvD,EAAI,SAAUpC,GACZ,MAA0B,mBAAZA,CAChB,C,uBCVA,IAAImC,EAAQ,EAAQ,MAChBtC,EAAa,EAAQ,KAErB6H,EAAc,kBAEd3C,EAAW,SAAU4C,EAASC,GAChC,IAAIh1F,EAAQoV,EAAKm7C,EAAUwkC,IAC3B,OAAO/0F,GAASi1F,GACZj1F,GAASk1F,IACTjI,EAAW+H,GAAazF,EAAMyF,KAC5BA,EACR,EAEIzkC,EAAY4hC,EAAS5hC,UAAY,SAAUy8B,GAC7C,OAAOn+D,OAAOm+D,GAAQnkG,QAAQisG,EAAa,KAAKpsG,aAClD,EAEI0sB,EAAO+8E,EAAS/8E,KAAO,CAAC,EACxB8/E,EAAS/C,EAAS+C,OAAS,IAC3BD,EAAW9C,EAAS8C,SAAW,IAEnC3oG,EAAOD,QAAU8lG,C,mBCnBjB7lG,EAAOD,QAAU,SAAU2sC,GACzB,OAAc,OAAPA,QAAsBh0C,IAAPg0C,CACxB,C,sBCJA,IAAIi0D,EAAa,EAAQ,KACrB4H,EAAe,EAAQ,MAEvBrF,EAAcqF,EAAalzF,IAE/BrV,EAAOD,QAAUwoG,EAAapF,WAAa,SAAUz2D,GACnD,MAAoB,iBAANA,EAAwB,OAAPA,EAAci0D,EAAWj0D,IAAOA,IAAOw2D,CACxE,EAAI,SAAUx2D,GACZ,MAAoB,iBAANA,EAAwB,OAAPA,EAAci0D,EAAWj0D,EAC1D,C,mBCTA1sC,EAAOD,SAAU,C,uBCAjB,IAAIglG,EAAa,EAAQ,MACrBpE,EAAa,EAAQ,KACrBK,EAAgB,EAAQ,MACxB6H,EAAoB,EAAQ,MAE5B5G,EAAUphG,OAEdb,EAAOD,QAAU8oG,EAAoB,SAAUn8D,GAC7C,MAAoB,iBAANA,CAChB,EAAI,SAAUA,GACZ,IAAIo8D,EAAU/D,EAAW,UACzB,OAAOpE,EAAWmI,IAAY9H,EAAc8H,EAAQhoG,UAAWmhG,EAAQv1D,GACzE,C,uBCZA,IAAIq8D,EAAW,EAAQ,MAIvB/oG,EAAOD,QAAU,SAAUygB,GACzB,OAAOuoF,EAASvoF,EAAIhlB,OACtB,C,uBCNA,IAAIynG,EAAQ,EAAQ,MAChBtC,EAAa,EAAQ,KACrBtqB,EAAS,EAAQ,MACjBorB,EAAc,EAAQ,MACtBuH,EAA6B,qBAC7BnB,EAAgB,EAAQ,MACxBoB,EAAsB,EAAQ,MAE9BC,EAAuBD,EAAoBd,QAC3CgB,EAAmBF,EAAoB5oG,IAEvC8uD,EAAiBtuD,OAAOsuD,eAExBi6C,EAAsB3H,IAAgBwB,GAAM,WAC9C,OAAsF,IAA/E9zC,GAAe,WAA0B,GAAG,SAAU,CAAEz7C,MAAO,IAAKlY,MAC7E,IAEI6tG,EAAW9mE,OAAOA,QAAQ/lC,MAAM,UAEhCkmG,EAAc1iG,EAAOD,QAAU,SAAU2T,EAAOhR,EAAMyB,GACvB,YAA7Bo+B,OAAO7/B,GAAME,MAAM,EAAG,KACxBF,EAAO,IAAM6/B,OAAO7/B,GAAMnG,QAAQ,qBAAsB,MAAQ,KAE9D4H,GAAWA,EAAQg1C,SAAQz2C,EAAO,OAASA,GAC3CyB,GAAWA,EAAQu1C,SAAQh3C,EAAO,OAASA,KAC1C2zE,EAAO3iE,EAAO,SAAYs1F,GAA8Bt1F,EAAMhR,OAASA,KACtE++F,EAAatyC,EAAez7C,EAAO,OAAQ,CAAEA,MAAOhR,EAAMuuD,cAAc,IACvEv9C,EAAMhR,KAAOA,GAEhB0mG,GAAuBjlG,GAAWkyE,EAAOlyE,EAAS,UAAYuP,EAAMlY,SAAW2I,EAAQmlG,OACzFn6C,EAAez7C,EAAO,SAAU,CAAEA,MAAOvP,EAAQmlG,QAEnD,IACMnlG,GAAWkyE,EAAOlyE,EAAS,gBAAkBA,EAAQwB,YACnD87F,GAAatyC,EAAez7C,EAAO,YAAa,CAAEuoE,UAAU,IAEvDvoE,EAAM5S,YAAW4S,EAAM5S,eAAYpI,EAClB,CAA5B,MAAOkJ,GAAqB,CAC9B,IAAIqiD,EAAQilD,EAAqBx1F,GAG/B,OAFG2iE,EAAOpyB,EAAO,YACjBA,EAAM1B,OAAS8mD,EAASlyF,KAAoB,iBAARzU,EAAmBA,EAAO,KACvDgR,CACX,EAIAlQ,SAAS1C,UAAU0L,SAAWk2F,GAAY,WACxC,OAAO/B,EAAWnjG,OAAS2rG,EAAiB3rG,MAAM+kD,QAAUslD,EAAcrqG,KAC5E,GAAG,W,mBChDH,IAAIo/F,EAAO72F,KAAK62F,KACZ5uE,EAAQjoB,KAAKioB,MAKjBhuB,EAAOD,QAAUgG,KAAKwjG,OAAS,SAAehL,GAC5C,IAAIjuF,GAAKiuF,EACT,OAAQjuF,EAAI,EAAI0d,EAAQ4uE,GAAMtsF,EAChC,C,uBCTA,IAAI9D,EAAW,EAAQ,MAEvBxM,EAAOD,QAAU,SAAU+gG,EAAU0I,GACnC,YAAoB9wG,IAAbooG,EAAyB//E,UAAUvlB,OAAS,EAAI,GAAKguG,EAAWh9F,EAASs0F,EAClF,C,uBCJA,IAAIW,EAAc,EAAQ,MACtBgI,EAAiB,EAAQ,MACzBC,EAA0B,EAAQ,MAClCC,EAAW,EAAQ,MACnBC,EAAgB,EAAQ,MAExB/I,EAAa9kB,UAEb8tB,EAAkBhpG,OAAOsuD,eAEzB26C,EAA4BjpG,OAAO27E,yBACnCutB,EAAa,aACbnD,EAAe,eACfoD,EAAW,WAIfjqG,EAAQuuD,EAAImzC,EAAciI,EAA0B,SAAwBlI,EAAG0F,EAAG+C,GAIhF,GAHAN,EAASnI,GACT0F,EAAI0C,EAAc1C,GAClByC,EAASM,GACQ,oBAANzI,GAA0B,cAAN0F,GAAqB,UAAW+C,GAAcD,KAAYC,IAAeA,EAAWD,GAAW,CAC5H,IAAIzgD,EAAUugD,EAA0BtI,EAAG0F,GACvC39C,GAAWA,EAAQygD,KACrBxI,EAAE0F,GAAK+C,EAAWv2F,MAClBu2F,EAAa,CACXh5C,aAAc21C,KAAgBqD,EAAaA,EAAWrD,GAAgBr9C,EAAQq9C,GAC9E51C,WAAY+4C,KAAcE,EAAaA,EAAWF,GAAcxgD,EAAQwgD,GACxE9tB,UAAU,GAGhB,CAAE,OAAO4tB,EAAgBrI,EAAG0F,EAAG+C,EACjC,EAAIJ,EAAkB,SAAwBrI,EAAG0F,EAAG+C,GAIlD,GAHAN,EAASnI,GACT0F,EAAI0C,EAAc1C,GAClByC,EAASM,GACLR,EAAgB,IAClB,OAAOI,EAAgBrI,EAAG0F,EAAG+C,EACD,CAA5B,MAAOroG,GAAqB,CAC9B,GAAI,QAASqoG,GAAc,QAASA,EAAY,MAAMpJ,EAAW,2BAEjE,MADI,UAAWoJ,IAAYzI,EAAE0F,GAAK+C,EAAWv2F,OACtC8tF,CACT,C,uBC1CA,IAAIC,EAAc,EAAQ,MACtBhkG,EAAO,EAAQ,MACfysG,EAA6B,EAAQ,MACrC1H,EAA2B,EAAQ,MACnCvB,EAAkB,EAAQ,MAC1B2I,EAAgB,EAAQ,MACxBvzB,EAAS,EAAQ,MACjBozB,EAAiB,EAAQ,MAGzBK,EAA4BjpG,OAAO27E,yBAIvCz8E,EAAQuuD,EAAImzC,EAAcqI,EAA4B,SAAkCtI,EAAG0F,GAGzF,GAFA1F,EAAIP,EAAgBO,GACpB0F,EAAI0C,EAAc1C,GACduC,EAAgB,IAClB,OAAOK,EAA0BtI,EAAG0F,EACR,CAA5B,MAAOtlG,GAAqB,CAC9B,GAAIy0E,EAAOmrB,EAAG0F,GAAI,OAAO1E,GAA0B/kG,EAAKysG,EAA2B57C,EAAGkzC,EAAG0F,GAAI1F,EAAE0F,GACjG,C,uBCrBA,IAAIiD,EAAqB,EAAQ,MAC7BC,EAAc,EAAQ,KAEtBnC,EAAamC,EAAY3uG,OAAO,SAAU,aAK9CsE,EAAQuuD,EAAIztD,OAAO+xC,qBAAuB,SAA6B4uD,GACrE,OAAO2I,EAAmB3I,EAAGyG,EAC/B,C,qBCTAloG,EAAQuuD,EAAIztD,OAAOG,qB,uBCDnB,IAAI2gG,EAAc,EAAQ,MAE1B3hG,EAAOD,QAAU4hG,EAAY,CAAC,EAAEX,c,uBCFhC,IAAIW,EAAc,EAAQ,MACtBtrB,EAAS,EAAQ,MACjB4qB,EAAkB,EAAQ,MAC1B/kG,EAAU,gBACV+rG,EAAa,EAAQ,MAErBvwF,EAAOiqF,EAAY,GAAGjqF,MAE1B1X,EAAOD,QAAU,SAAU2R,EAAQ24F,GACjC,IAGIviG,EAHA05F,EAAIP,EAAgBvvF,GACpBnW,EAAI,EACJgF,EAAS,GAEb,IAAKuH,KAAO05F,GAAInrB,EAAO4xB,EAAYngG,IAAQuuE,EAAOmrB,EAAG15F,IAAQ4P,EAAKnX,EAAQuH,GAE1E,MAAOuiG,EAAM7uG,OAASD,EAAO86E,EAAOmrB,EAAG15F,EAAMuiG,EAAM9uG,SAChDW,EAAQqE,EAAQuH,IAAQ4P,EAAKnX,EAAQuH,IAExC,OAAOvH,CACT,C,kCClBA,IAAI+pG,EAAwB,CAAC,EAAErpG,qBAE3Bu7E,EAA2B37E,OAAO27E,yBAGlC+tB,EAAc/tB,IAA6B8tB,EAAsB7sG,KAAK,CAAE,EAAG,GAAK,GAIpFsC,EAAQuuD,EAAIi8C,EAAc,SAA8BtD,GACtD,IAAI73C,EAAaotB,EAAyBh/E,KAAMypG,GAChD,QAAS73C,GAAcA,EAAW4B,UACpC,EAAIs5C,C,uBCZJ,IAAI3I,EAAc,EAAQ,MACtBgI,EAAW,EAAQ,MACnBa,EAAqB,EAAQ,MAMjCxqG,EAAOD,QAAUc,OAAOglB,iBAAmB,aAAe,CAAC,EAAI,WAC7D,IAEI6zB,EAFA+wD,GAAiB,EACjB/sG,EAAO,CAAC,EAEZ,IAEEg8C,EAASioD,EAAY9gG,OAAO27E,yBAAyB37E,OAAOC,UAAW,aAAaR,KACpFo5C,EAAOh8C,EAAM,IACb+sG,EAAiB/sG,aAAgB6G,KACL,CAA5B,MAAO3C,GAAqB,CAC9B,OAAO,SAAwB4/F,EAAGrsD,GAKhC,OAJAw0D,EAASnI,GACTgJ,EAAmBr1D,GACfs1D,EAAgB/wD,EAAO8nD,EAAGrsD,GACzBqsD,EAAEkJ,UAAYv1D,EACZqsD,CACT,CACF,CAjB+D,QAiBzD9oG,E,uBC1BN,IAAI+E,EAAO,EAAQ,MACfkjG,EAAa,EAAQ,KACrBx4D,EAAW,EAAQ,KAEnB04D,EAAa9kB,UAIjB/7E,EAAOD,QAAU,SAAUyjC,EAAOmnE,GAChC,IAAI1gE,EAAI+D,EACR,GAAa,WAAT28D,GAAqBhK,EAAW12D,EAAKzG,EAAMh3B,YAAc27B,EAAS6F,EAAMvwC,EAAKwsC,EAAIzG,IAAS,OAAOwK,EACrG,GAAI2yD,EAAW12D,EAAKzG,EAAM69C,WAAal5C,EAAS6F,EAAMvwC,EAAKwsC,EAAIzG,IAAS,OAAOwK,EAC/E,GAAa,WAAT28D,GAAqBhK,EAAW12D,EAAKzG,EAAMh3B,YAAc27B,EAAS6F,EAAMvwC,EAAKwsC,EAAIzG,IAAS,OAAOwK,EACrG,MAAM6yD,EAAW,0CACnB,C,uBCdA,IAAIkE,EAAa,EAAQ,MACrBpD,EAAc,EAAQ,MACtBiJ,EAA4B,EAAQ,MACpCC,EAA8B,EAAQ,MACtClB,EAAW,EAAQ,MAEnBluG,EAASkmG,EAAY,GAAGlmG,QAG5BuE,EAAOD,QAAUglG,EAAW,UAAW,YAAc,SAAiBr4D,GACpE,IAAI/hB,EAAOigF,EAA0Bt8C,EAAEq7C,EAASj9D,IAC5C1rC,EAAwB6pG,EAA4Bv8C,EACxD,OAAOttD,EAAwBvF,EAAOkvB,EAAM3pB,EAAsB0rC,IAAO/hB,CAC3E,C,uBCbA,IAAI0jB,EAAoB,EAAQ,MAE5BwyD,EAAa9kB,UAIjB/7E,EAAOD,QAAU,SAAU2sC,GACzB,GAAI2B,EAAkB3B,GAAK,MAAMm0D,EAAW,wBAA0Bn0D,GACtE,OAAOA,CACT,C,uBCTA,IAAIq7D,EAAS,EAAQ,MACjBx4F,EAAM,EAAQ,MAEdob,EAAOo9E,EAAO,QAElB/nG,EAAOD,QAAU,SAAU+H,GACzB,OAAO6iB,EAAK7iB,KAAS6iB,EAAK7iB,GAAOyH,EAAIzH,GACvC,C,uBCPA,IAAI+6F,EAAS,EAAQ,MACjBF,EAAuB,EAAQ,MAE/BmI,EAAS,qBACTnD,EAAQ9E,EAAOiI,IAAWnI,EAAqBmI,EAAQ,CAAC,GAE5D9qG,EAAOD,QAAU4nG,C,uBCNjB,IAAIoD,EAAU,EAAQ,MAClBpD,EAAQ,EAAQ,OAEnB3nG,EAAOD,QAAU,SAAU+H,EAAK4L,GAC/B,OAAOi0F,EAAM7/F,KAAS6/F,EAAM7/F,QAAiBpP,IAAVgb,EAAsBA,EAAQ,CAAC,EACpE,GAAG,WAAY,IAAIgE,KAAK,CACtBpb,QAAS,SACTkmB,KAAMuoF,EAAU,OAAS,SACzBC,UAAW,4CACXC,QAAS,2DACT1oD,OAAQ,uC,uBCTV,IAAI2oD,EAAa,EAAQ,MACrBjI,EAAQ,EAAQ,MAGpBjjG,EAAOD,UAAYc,OAAOG,wBAA0BiiG,GAAM,WACxD,IAAIkI,EAASl6D,SAGb,OAAQ1O,OAAO4oE,MAAatqG,OAAOsqG,aAAmBl6D,UAEnDA,OAAOs1D,MAAQ2E,GAAcA,EAAa,EAC/C,G,uBCZA,IAAIE,EAAsB,EAAQ,MAE9Bv9F,EAAM9H,KAAK8H,IACX7H,EAAMD,KAAKC,IAKfhG,EAAOD,QAAU,SAAU4X,EAAOnc,GAChC,IAAI6vG,EAAUD,EAAoBzzF,GAClC,OAAO0zF,EAAU,EAAIx9F,EAAIw9F,EAAU7vG,EAAQ,GAAKwK,EAAIqlG,EAAS7vG,EAC/D,C,uBCVA,IAAI8vG,EAAgB,EAAQ,MACxBC,EAAyB,EAAQ,MAErCvrG,EAAOD,QAAU,SAAU2sC,GACzB,OAAO4+D,EAAcC,EAAuB7+D,GAC9C,C,uBCNA,IAAI68D,EAAQ,EAAQ,MAIpBvpG,EAAOD,QAAU,SAAU+gG,GACzB,IAAIhkD,GAAUgkD,EAEd,OAAOhkD,IAAWA,GAAqB,IAAXA,EAAe,EAAIysD,EAAMzsD,EACvD,C,uBCRA,IAAIsuD,EAAsB,EAAQ,MAE9BplG,EAAMD,KAAKC,IAIfhG,EAAOD,QAAU,SAAU+gG,GACzB,OAAOA,EAAW,EAAI96F,EAAIolG,EAAoBtK,GAAW,kBAAoB,CAC/E,C,uBCRA,IAAIyK,EAAyB,EAAQ,MAEjCtJ,EAAUphG,OAIdb,EAAOD,QAAU,SAAU+gG,GACzB,OAAOmB,EAAQsJ,EAAuBzK,GACxC,C,uBCRA,IAAIrjG,EAAO,EAAQ,MACf0qC,EAAW,EAAQ,KACnBgtC,EAAW,EAAQ,MACnBq2B,EAAY,EAAQ,MACpBC,EAAsB,EAAQ,MAC9B1J,EAAkB,EAAQ,MAE1BlB,EAAa9kB,UACb2vB,EAAe3J,EAAgB,eAInC/hG,EAAOD,QAAU,SAAUyjC,EAAOmnE,GAChC,IAAKxiE,EAAS3E,IAAU2xC,EAAS3xC,GAAQ,OAAOA,EAChD,IACIjjC,EADAorG,EAAeH,EAAUhoE,EAAOkoE,GAEpC,GAAIC,EAAc,CAGhB,QAFajzG,IAATiyG,IAAoBA,EAAO,WAC/BpqG,EAAS9C,EAAKkuG,EAAcnoE,EAAOmnE,IAC9BxiE,EAAS5nC,IAAW40E,EAAS50E,GAAS,OAAOA,EAClD,MAAMsgG,EAAW,0CACnB,CAEA,YADanoG,IAATiyG,IAAoBA,EAAO,UACxBc,EAAoBjoE,EAAOmnE,EACpC,C,uBCxBA,IAAIiB,EAAc,EAAQ,MACtBz2B,EAAW,EAAQ,MAIvBn1E,EAAOD,QAAU,SAAU+gG,GACzB,IAAIh5F,EAAM8jG,EAAY9K,EAAU,UAChC,OAAO3rB,EAASrtE,GAAOA,EAAMA,EAAM,EACrC,C,uBCRA,IAAIi6F,EAAkB,EAAQ,MAE1BC,EAAgBD,EAAgB,eAChCrkG,EAAO,CAAC,EAEZA,EAAKskG,GAAiB,IAEtBhiG,EAAOD,QAA2B,eAAjBwiC,OAAO7kC,E,uBCPxB,IAAI4pG,EAAU,EAAQ,KAElBvG,EAAUx+D,OAEdviC,EAAOD,QAAU,SAAU+gG,GACzB,GAA0B,WAAtBwG,EAAQxG,GAAwB,MAAM/kB,UAAU,6CACpD,OAAOglB,EAAQD,EACjB,C,mBCPA,IAAIC,EAAUx+D,OAEdviC,EAAOD,QAAU,SAAU+gG,GACzB,IACE,OAAOC,EAAQD,EAGjB,CAFE,MAAOl/F,GACP,MAAO,QACT,CACF,C,uBCRA,IAAI+/F,EAAc,EAAQ,MAEtBjmF,EAAK,EACLmwF,EAAU9lG,KAAKgoB,SACfvhB,EAAWm1F,EAAY,GAAIn1F,UAE/BxM,EAAOD,QAAU,SAAU+H,GACzB,MAAO,gBAAqBpP,IAARoP,EAAoB,GAAKA,GAAO,KAAO0E,IAAWkP,EAAKmwF,EAAS,GACtF,C,uBCPA,IAAIC,EAAgB,EAAQ,MAE5B9rG,EAAOD,QAAU+rG,IACX76D,OAAOs1D,MACkB,iBAAnBt1D,OAAO4E,Q,uBCLnB,IAAI4rD,EAAc,EAAQ,MACtBwB,EAAQ,EAAQ,MAIpBjjG,EAAOD,QAAU0hG,GAAewB,GAAM,WAEpC,OAGgB,IAHTpiG,OAAOsuD,gBAAe,WAA0B,GAAG,YAAa,CACrEz7C,MAAO,GACPuoE,UAAU,IACTn7E,SACL,G,uBCXA,IAAI+hG,EAAS,EAAQ,MACjBlC,EAAa,EAAQ,KAErBr3E,EAAUu5E,EAAOv5E,QAErBtpB,EAAOD,QAAU4gG,EAAWr3E,IAAY,cAAc5rB,KAAK6kC,OAAOjZ,G,uBCLlE,IAAIu5E,EAAS,EAAQ,MACjBkF,EAAS,EAAQ,MACjB1xB,EAAS,EAAQ,MACjB9mE,EAAM,EAAQ,MACdu8F,EAAgB,EAAQ,MACxBjD,EAAoB,EAAQ,MAE5BkD,EAAwBhE,EAAO,OAC/B92D,EAAS4xD,EAAO5xD,OAChB+6D,EAAY/6D,GAAUA,EAAO,OAC7Bg7D,EAAwBpD,EAAoB53D,EAASA,GAAUA,EAAOi7D,eAAiB38F,EAE3FvP,EAAOD,QAAU,SAAU2C,GACzB,IAAK2zE,EAAO01B,EAAuBrpG,KAAWopG,GAAuD,iBAA/BC,EAAsBrpG,GAAoB,CAC9G,IAAIypG,EAAc,UAAYzpG,EAC1BopG,GAAiBz1B,EAAOplC,EAAQvuC,GAClCqpG,EAAsBrpG,GAAQuuC,EAAOvuC,GAErCqpG,EAAsBrpG,GADbmmG,GAAqBmD,EACAA,EAAUG,GAEVF,EAAsBE,EAExD,CAAE,OAAOJ,EAAsBrpG,EACjC,C,oCCtBA,IAAIzC,EAAI,EAAQ,MACZonG,EAAW,EAAQ,MACnBlG,EAAoB,EAAQ,MAC5BiL,EAAiB,EAAQ,MACzBC,EAA2B,EAAQ,MACnCpJ,EAAQ,EAAQ,MAEhBqJ,EAAsBrJ,GAAM,WAC9B,OAAoD,aAA7C,GAAGvrF,KAAKja,KAAK,CAAEjC,OAAQ,YAAe,EAC/C,IAII+wG,GAAiC,WACnC,IAEE1rG,OAAOsuD,eAAe,GAAI,SAAU,CAAE8sB,UAAU,IAASvkE,MAG3D,CAFE,MAAO9V,GACP,OAAOA,aAAiBm6E,SAC1B,CACF,CAPqC,GAWrC97E,EAAE,CAAEiuB,OAAQ,QAASinB,OAAO,EAAMm0D,MAAO,EAAGhD,OAAQgG,GAAuBC,GAAiC,CAE1G70F,KAAM,SAAc60C,GAClB,IAAIi1C,EAAI6F,EAAS7pG,MACbd,EAAMykG,EAAkBK,GACxBgL,EAAWzrF,UAAUvlB,OACzB6wG,EAAyB3vG,EAAM8vG,GAC/B,IAAK,IAAIjxG,EAAI,EAAGA,EAAIixG,EAAUjxG,IAC5BimG,EAAE9kG,GAAOqkB,UAAUxlB,GACnBmB,IAGF,OADA0vG,EAAe5K,EAAG9kG,GACXA,CACT,G,oCCrCF,IAAIuD,EAAI,EAAQ,MACZ4iG,EAAS,EAAQ,MACjBkC,EAAa,EAAQ,MACrBvC,EAA2B,EAAQ,MACnCrzC,EAAiB,UACjBknB,EAAS,EAAQ,MACjBo2B,EAAa,EAAQ,MACrBC,EAAoB,EAAQ,MAC5BC,EAA0B,EAAQ,MAClCC,EAAwB,EAAQ,MAChCC,EAAkB,EAAQ,MAC1BpL,EAAc,EAAQ,MACtBsJ,EAAU,EAAQ,MAElB+B,EAAgB,eAChB5pG,EAAQ6hG,EAAW,SACnBgI,EAAqBhI,EAAW+H,GAEhCE,EAAgB,WAClBP,EAAWjvG,KAAMyvG,GACjB,IAAIC,EAAkBnsF,UAAUvlB,OAC5B6G,EAAUsqG,EAAwBO,EAAkB,OAAIx0G,EAAYqoB,UAAU,IAC9Ere,EAAOiqG,EAAwBO,EAAkB,OAAIx0G,EAAYqoB,UAAU,GAAI,SAC/EosF,EAAO,IAAIJ,EAAmB1qG,EAASK,GACvCd,EAAQsB,EAAMb,GAIlB,OAHAT,EAAMc,KAAOoqG,EACb39C,EAAeg+C,EAAM,QAAS3K,EAAyB,EAAGqK,EAAgBjrG,EAAMyjG,MAAO,KACvFqH,EAAkBS,EAAM3vG,KAAMwvG,GACvBG,CACT,EAEIF,EAAwBD,EAAclsG,UAAYisG,EAAmBjsG,UAErEssG,EAAkB,UAAWlqG,EAAM4pG,GACnCO,EAA0B,UAAW,IAAIN,EAAmB,EAAG,GAG/D39C,EAAa29C,GAAsBtL,GAAe5gG,OAAO27E,yBAAyBqmB,EAAQiK,GAI1FQ,IAAqBl+C,KAAgBA,EAAW6sB,UAAY7sB,EAAW6B,cAEvEs8C,EAAqBH,IAAoBE,IAAqBD,EAIlEptG,EAAE,CAAE4iG,QAAQ,EAAMl9F,aAAa,EAAM2gG,OAAQyE,GAAWwC,GAAsB,CAC5EC,aAAcD,EAAqBP,EAAgBD,IAGrD,IAAIU,EAAyB1I,EAAW+H,GACpCY,EAAkCD,EAAuB3sG,UAE7D,GAAI4sG,EAAgC/nG,cAAgB8nG,EAKlD,IAAK,IAAI3lG,KAJJijG,GACH57C,EAAeu+C,EAAiC,cAAelL,EAAyB,EAAGiL,IAG7Eb,EAAuB,GAAIv2B,EAAOu2B,EAAuB9kG,GAAM,CAC7E,IAAI6lG,EAAWf,EAAsB9kG,GACjC8lG,EAAeD,EAASjtG,EACvB21E,EAAOo3B,EAAwBG,IAClCz+C,EAAes+C,EAAwBG,EAAcpL,EAAyB,EAAGmL,EAAS1rE,GAE9F,C,gCCjEF,IAAI72B,EAAQ,eACRyiG,EAAgB,IAAI5zE,OAAO,IAAM7uB,EAAQ,aAAc,MACvD0iG,EAAe,IAAI7zE,OAAO,IAAM7uB,EAAQ,KAAM,MAElD,SAAS2iG,EAAiBr9C,EAAYl0D,GACrC,IAEC,MAAO,CAACmsC,mBAAmB+nB,EAAWv5C,KAAK,KAG5C,CAFE,MAAOgzB,GAET,CAEA,GAA0B,IAAtBumB,EAAWl1D,OACd,OAAOk1D,EAGRl0D,EAAQA,GAAS,EAGjB,IAAIgiB,EAAOkyC,EAAW9tD,MAAM,EAAGpG,GAC3Bk2E,EAAQhiB,EAAW9tD,MAAMpG,GAE7B,OAAO+H,MAAMzD,UAAUrF,OAAOgC,KAAK,GAAIswG,EAAiBvvF,GAAOuvF,EAAiBr7B,GACjF,CAEA,SAAS0N,EAAO58C,GACf,IACC,OAAOmF,mBAAmBnF,EAW3B,CAVE,MAAO2G,GAGR,IAFA,IAAIzB,EAASlF,EAAMpmC,MAAMywG,IAAkB,GAElCtyG,EAAI,EAAGA,EAAImtC,EAAOltC,OAAQD,IAClCioC,EAAQuqE,EAAiBrlE,EAAQntC,GAAG4b,KAAK,IAEzCuxB,EAASlF,EAAMpmC,MAAMywG,IAAkB,GAGxC,OAAOrqE,CACR,CACD,CAEA,SAASwqE,EAAyBxqE,GAEjC,IAAIyqE,EAAa,CAChB,SAAU,KACV,SAAU,MAGP7wG,EAAQ0wG,EAAavwG,KAAKimC,GAC9B,MAAOpmC,EAAO,CACb,IAEC6wG,EAAW7wG,EAAM,IAAMurC,mBAAmBvrC,EAAM,GAOjD,CANE,MAAO+sC,GACR,IAAI5pC,EAAS6/E,EAAOhjF,EAAM,IAEtBmD,IAAWnD,EAAM,KACpB6wG,EAAW7wG,EAAM,IAAMmD,EAEzB,CAEAnD,EAAQ0wG,EAAavwG,KAAKimC,EAC3B,CAGAyqE,EAAW,OAAS,IAIpB,IAFA,IAAIpwE,EAAUh9B,OAAO8pB,KAAKsjF,GAEjB1yG,EAAI,EAAGA,EAAIsiC,EAAQriC,OAAQD,IAAK,CAExC,IAAIuM,EAAM+1B,EAAQtiC,GAClBioC,EAAQA,EAAMjnC,QAAQ,IAAI09B,OAAOnyB,EAAK,KAAMmmG,EAAWnmG,GACxD,CAEA,OAAO07B,CACR,CAEAxjC,EAAOD,QAAU,SAAUmuG,GAC1B,GAA0B,kBAAfA,EACV,MAAM,IAAInyB,UAAU,6DAA+DmyB,EAAa,KAGjG,IAIC,OAHAA,EAAaA,EAAW3xG,QAAQ,MAAO,KAGhCosC,mBAAmBulE,EAI3B,CAHE,MAAO/jE,GAER,OAAO6jE,EAAyBE,EACjC,CACD,C,gCC3FA,IAAIC,EAAoB,SAA2Bz6F,GAClD,OAAO06F,EAAgB16F,KAClB26F,EAAU36F,EAChB,EAEA,SAAS06F,EAAgB16F,GACxB,QAASA,GAA0B,kBAAVA,CAC1B,CAEA,SAAS26F,EAAU36F,GAClB,IAAI46F,EAAcztG,OAAOC,UAAU0L,SAAS/O,KAAKiW,GAEjD,MAAuB,oBAAhB46F,GACa,kBAAhBA,GACAC,EAAe76F,EACpB,CAGA,IAAI86F,EAAiC,oBAAXv9D,QAAyBA,OAAOw9D,IACtDC,EAAqBF,EAAev9D,OAAOw9D,IAAI,iBAAmB,MAEtE,SAASF,EAAe76F,GACvB,OAAOA,EAAMi7F,WAAaD,CAC3B,CAEA,SAASE,EAAY5gE,GACpB,OAAOzpC,MAAMC,QAAQwpC,GAAO,GAAK,CAAC,CACnC,CAEA,SAAS6gE,EAA8Bn7F,EAAOvP,GAC7C,OAA0B,IAAlBA,EAAQikD,OAAmBjkD,EAAQgqG,kBAAkBz6F,GAC1Do7F,EAAUF,EAAYl7F,GAAQA,EAAOvP,GACrCuP,CACJ,CAEA,SAASq7F,EAAkB7gF,EAAQq0B,EAAQp+C,GAC1C,OAAO+pB,EAAOzyB,OAAO8mD,GAAQ3kD,KAAI,SAASqlF,GACzC,OAAO4rB,EAA8B5rB,EAAS9+E,EAC/C,GACD,CAEA,SAAS6qG,EAAiBlnG,EAAK3D,GAC9B,IAAKA,EAAQ8qG,YACZ,OAAOH,EAER,IAAIG,EAAc9qG,EAAQ8qG,YAAYnnG,GACtC,MAA8B,oBAAhBmnG,EAA6BA,EAAcH,CAC1D,CAEA,SAASI,EAAgChhF,GACxC,OAAOrtB,OAAOG,sBACXH,OAAOG,sBAAsBktB,GAAQ/d,QAAO,SAASg7F,GACtD,OAAOj9E,EAAOjtB,qBAAqBkqG,EACpC,IACE,EACJ,CAEA,SAASgE,EAAQjhF,GAChB,OAAOrtB,OAAO8pB,KAAKuD,GAAQzyB,OAAOyzG,EAAgChhF,GACnE,CAEA,SAASkhF,EAAmB19F,EAAQixE,GACnC,IACC,OAAOA,KAAYjxE,CAGpB,CAFE,MAAM7H,GACP,OAAO,CACR,CACD,CAGA,SAASwlG,EAAiBnhF,EAAQpmB,GACjC,OAAOsnG,EAAmBlhF,EAAQpmB,MAC5BjH,OAAOE,eAAetD,KAAKywB,EAAQpmB,IACpCjH,OAAOI,qBAAqBxD,KAAKywB,EAAQpmB,GAC/C,CAEA,SAASwnG,EAAYphF,EAAQq0B,EAAQp+C,GACpC,IAAIorG,EAAc,CAAC,EAiBnB,OAhBIprG,EAAQgqG,kBAAkBjgF,IAC7BihF,EAAQjhF,GAAQ0K,SAAQ,SAAS9wB,GAChCynG,EAAYznG,GAAO+mG,EAA8B3gF,EAAOpmB,GAAM3D,EAC/D,IAEDgrG,EAAQ5sD,GAAQ3pB,SAAQ,SAAS9wB,GAC5BunG,EAAiBnhF,EAAQpmB,KAIzBsnG,EAAmBlhF,EAAQpmB,IAAQ3D,EAAQgqG,kBAAkB5rD,EAAOz6C,IACvEynG,EAAYznG,GAAOknG,EAAiBlnG,EAAK3D,EAAtB6qG,CAA+B9gF,EAAOpmB,GAAMy6C,EAAOz6C,GAAM3D,GAE5EorG,EAAYznG,GAAO+mG,EAA8BtsD,EAAOz6C,GAAM3D,GAEhE,IACOorG,CACR,CAEA,SAAST,EAAU5gF,EAAQq0B,EAAQp+C,GAClCA,EAAUA,GAAW,CAAC,EACtBA,EAAQqrG,WAAarrG,EAAQqrG,YAAcT,EAC3C5qG,EAAQgqG,kBAAoBhqG,EAAQgqG,mBAAqBA,EAGzDhqG,EAAQ0qG,8BAAgCA,EAExC,IAAIY,EAAgBlrG,MAAMC,QAAQ+9C,GAC9B5O,EAAgBpvC,MAAMC,QAAQ0pB,GAC9BwhF,EAA4BD,IAAkB97D,EAElD,OAAK+7D,EAEMD,EACHtrG,EAAQqrG,WAAWthF,EAAQq0B,EAAQp+C,GAEnCmrG,EAAYphF,EAAQq0B,EAAQp+C,GAJ5B0qG,EAA8BtsD,EAAQp+C,EAM/C,CAEA2qG,EAAUz5F,IAAM,SAAsBs6F,EAAOxrG,GAC5C,IAAKI,MAAMC,QAAQmrG,GAClB,MAAM,IAAIzsG,MAAM,qCAGjB,OAAOysG,EAAM7xE,QAAO,SAASqgB,EAAMxiC,GAClC,OAAOmzF,EAAU3wD,EAAMxiC,EAAMxX,EAC9B,GAAG,CAAC,EACL,EAEA,IAAIyrG,EAAcd,EAElB9uG,EAAOD,QAAU6vG,C,kCCnIjB/uG,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQ8vG,eAAiB9vG,EAAQ+vG,kBAAe,EAChD/vG,EAAQ+vG,aAAe,IAAIzsG,IAAI,CAC3B,WACA,cACA,eACA,eACA,gBACA,mBACA,WACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,eACA,gBACA,WACA,iBACA,iBACA,YACFzF,KAAI,SAAUowC,GAAO,MAAO,CAACA,EAAI5xC,cAAe4xC,EAAM,KACxDjuC,EAAQ8vG,eAAiB,IAAIxsG,IAAI,CAC7B,gBACA,gBACA,gBACA,gBACA,cACA,WACA,gBACA,kBACA,WACA,cACA,WACA,oBACA,gBACA,eACA,mBACA,YACA,aACA,WACA,eACA,oBACA,eACA,cACA,cACA,mBACA,YACA,aACA,aACA,sBACA,mBACA,eACA,YACA,YACA,YACA,gBACA,sBACA,iBACA,OACA,OACA,cACA,YACA,qBACA,mBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,eACA,iBACA,cACA,UACA,UACA,aACA,UACA,aACA,mBACA,mBACA,cACFzF,KAAI,SAAUowC,GAAO,MAAO,CAACA,EAAI5xC,cAAe4xC,EAAM,I,oCCrGxD,IAAI6qC,EAAYr7E,MAAQA,KAAKq7E,UAAa,WAStC,OARAA,EAAWh4E,OAAO0B,QAAU,SAAS3B,GACjC,IAAK,IAAIF,EAAGnF,EAAI,EAAG+U,EAAIyQ,UAAUvlB,OAAQD,EAAI+U,EAAG/U,IAE5C,IAAK,IAAI0B,KADTyD,EAAIqgB,UAAUxlB,GACAmF,EAAOG,OAAOC,UAAUC,eAAetD,KAAKiD,EAAGzD,KACzD2D,EAAE3D,GAAKyD,EAAEzD,IAEjB,OAAO2D,CACX,EACOi4E,EAAS/sC,MAAMtuC,KAAMujB,UAChC,EACIgvF,EAAmBvyG,MAAQA,KAAKuyG,kBAAqBlvG,OAAOK,OAAS,SAAUkP,EAAG0hD,EAAG90D,EAAGgzG,QAC7Et3G,IAAPs3G,IAAkBA,EAAKhzG,GAC3B,IAAIizG,EAAOpvG,OAAO27E,yBAAyB1qB,EAAG90D,GACzCizG,KAAS,QAASA,GAAQn+C,EAAEo+C,WAAaD,EAAKh0B,UAAYg0B,EAAKh/C,gBAClEg/C,EAAO,CAAEj/C,YAAY,EAAM3wD,IAAK,WAAa,OAAOyxD,EAAE90D,EAAI,IAE5D6D,OAAOsuD,eAAe/+C,EAAG4/F,EAAIC,EAChC,EAAI,SAAU7/F,EAAG0hD,EAAG90D,EAAGgzG,QACTt3G,IAAPs3G,IAAkBA,EAAKhzG,GAC3BoT,EAAE4/F,GAAMl+C,EAAE90D,EACb,GACGmzG,EAAsB3yG,MAAQA,KAAK2yG,qBAAwBtvG,OAAOK,OAAS,SAAUkP,EAAG+oB,GACxFt4B,OAAOsuD,eAAe/+C,EAAG,UAAW,CAAE4gD,YAAY,EAAMt9C,MAAOylB,GAClE,EAAI,SAAS/oB,EAAG+oB,GACb/oB,EAAE,WAAa+oB,CACnB,GACIi3E,EAAgB5yG,MAAQA,KAAK4yG,cAAiB,SAAUC,GACxD,GAAIA,GAAOA,EAAIH,WAAY,OAAOG,EAClC,IAAI9vG,EAAS,CAAC,EACd,GAAW,MAAP8vG,EAAa,IAAK,IAAIrzG,KAAKqzG,EAAe,YAANrzG,GAAmB6D,OAAOC,UAAUC,eAAetD,KAAK4yG,EAAKrzG,IAAI+yG,EAAgBxvG,EAAQ8vG,EAAKrzG,GAEtI,OADAmzG,EAAmB5vG,EAAQ8vG,GACpB9vG,CACX,EACAM,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQs/C,YAAS,EAIjB,IAAIixD,EAAcF,EAAa,EAAQ,OACnCG,EAAa,EAAQ,MAOrBC,EAAoB,EAAQ,MAC5BC,EAAoB,IAAI7kF,IAAI,CAC5B,QACA,SACA,MACA,SACA,UACA,WACA,YACA,aAEJ,SAAS8kF,EAAch9F,GACnB,OAAOA,EAAMnX,QAAQ,KAAM,SAC/B,CAIA,SAASo0G,EAAiBt0E,EAAYsoD,GAClC,IAAI9/E,EACJ,GAAKw3B,EAAL,CAEA,IAAI6jD,GAA+F,KAAtD,QAA9Br7E,EAAK8/E,EAAKisB,sBAAmC,IAAP/rG,EAAgBA,EAAK8/E,EAAKksB,gBACzEH,EACA/rB,EAAKmsB,SAAmC,SAAxBnsB,EAAKisB,eACjBL,EAAWQ,UACXR,EAAWS,gBACrB,OAAOnwG,OAAO8pB,KAAK0R,GACdz+B,KAAI,SAAUkK,GACf,IAAIjD,EAAIgO,EACJa,EAAmC,QAA1B7O,EAAKw3B,EAAWv0B,UAAyB,IAAPjD,EAAgBA,EAAK,GAKpE,MAJqB,YAAjB8/E,EAAKmsB,UAELhpG,EAA2D,QAApD+K,EAAK29F,EAAkBX,eAAexvG,IAAIyH,UAAyB,IAAP+K,EAAgBA,EAAK/K,GAEvF68E,EAAKssB,YAAetsB,EAAKmsB,SAAqB,KAAVp9F,EAGlC,GAAGjY,OAAOqM,EAAK,MAAOrM,OAAOykF,EAAOxsE,GAAQ,KAFxC5L,CAGf,IACKqP,KAAK,IAnBA,CAoBd,CAIA,IAAI+5F,EAAY,IAAItlF,IAAI,CACpB,OACA,OACA,WACA,KACA,MACA,UACA,QACA,QACA,KACA,MACA,QACA,UACA,SACA,OACA,OACA,QACA,SACA,QACA,QAUJ,SAASyzB,EAAOmjB,EAAMr+D,QACF,IAAZA,IAAsBA,EAAU,CAAC,GAGrC,IAFA,IAAIgtG,GAAQ,WAAY3uC,EAAOA,EAAO,CAACA,IACnC5+B,EAAS,GACJroC,EAAI,EAAGA,EAAI41G,EAAM31G,OAAQD,IAC9BqoC,GAAUwtE,EAAWD,EAAM51G,GAAI4I,GAEnC,OAAOy/B,CACX,CAGA,SAASwtE,EAAW5uC,EAAMr+D,GACtB,OAAQq+D,EAAKhvD,MACT,KAAK88F,EAAYe,KACb,OAAOhyD,EAAOmjB,EAAK7hB,SAAUx8C,GAEjC,KAAKmsG,EAAYgB,QACjB,KAAKhB,EAAYiB,UACb,OAAOC,EAAgBhvC,GAC3B,KAAK8tC,EAAYtwD,QACb,OAAOyxD,EAAcjvC,GACzB,KAAK8tC,EAAYoB,MACb,OAAOC,EAAYnvC,GACvB,KAAK8tC,EAAYsB,OACjB,KAAKtB,EAAYuB,MACjB,KAAKvB,EAAYwB,IACb,OAAOC,EAAUvvC,EAAMr+D,GAC3B,KAAKmsG,EAAYv2C,KACb,OAAOi4C,EAAWxvC,EAAMr+D,GAEpC,CArBApE,EAAQs/C,OAASA,EACjBt/C,EAAA,WAAkBs/C,EAqBlB,IAAI4yD,EAA+B,IAAIrmF,IAAI,CACvC,KACA,KACA,KACA,KACA,QACA,iBACA,gBACA,OACA,UAEAsmF,EAAkB,IAAItmF,IAAI,CAAC,MAAO,SACtC,SAASmmF,EAAUI,EAAMxtB,GACrB,IAAI9/E,EAEiB,YAAjB8/E,EAAKmsB,UAELqB,EAAKzvG,KAAgE,QAAxDmC,EAAK2rG,EAAkBV,aAAazvG,IAAI8xG,EAAKzvG,aAA0B,IAAPmC,EAAgBA,EAAKstG,EAAKzvG,KAEnGyvG,EAAK9iE,QACL4iE,EAA6Bn2G,IAAIq2G,EAAK9iE,OAAO3sC,QAC7CiiF,EAAO9L,EAASA,EAAS,CAAC,EAAG8L,GAAO,CAAEmsB,SAAS,OAGlDnsB,EAAKmsB,SAAWoB,EAAgBp2G,IAAIq2G,EAAKzvG,QAC1CiiF,EAAO9L,EAASA,EAAS,CAAC,EAAG8L,GAAO,CAAEmsB,QAAS,aAEnD,IAAIhpC,EAAM,IAAIrsE,OAAO02G,EAAKzvG,MACtB0vG,EAAUzB,EAAiBwB,EAAKC,QAASztB,GAuB7C,OAtBIytB,IACAtqC,GAAO,IAAIrsE,OAAO22G,IAEO,IAAzBD,EAAKxxD,SAASnlD,SACbmpF,EAAKmsB,SAE2B,IAAzBnsB,EAAK0tB,gBAEL1tB,EAAK0tB,iBAAmBnB,EAAUp1G,IAAIq2G,EAAKzvG,QAC9CiiF,EAAKmsB,UACNhpC,GAAO,KACXA,GAAO,OAGPA,GAAO,IACHqqC,EAAKxxD,SAASnlD,OAAS,IACvBssE,GAAOzoB,EAAO8yD,EAAKxxD,SAAUgkC,KAE7BA,EAAKmsB,SAAYI,EAAUp1G,IAAIq2G,EAAKzvG,QACpColE,GAAO,KAAKrsE,OAAO02G,EAAKzvG,KAAM,OAG/BolE,CACX,CACA,SAAS0pC,EAAgBW,GACrB,MAAO,IAAI12G,OAAO02G,EAAKrpF,KAAM,IACjC,CACA,SAASkpF,EAAWG,EAAMxtB,GACtB,IAAI9/E,EACAikB,EAAOqpF,EAAKrpF,MAAQ,GAWxB,OAT0F,KAAtD,QAA9BjkB,EAAK8/E,EAAKisB,sBAAmC,IAAP/rG,EAAgBA,EAAK8/E,EAAKksB,kBAC/DlsB,EAAKmsB,SACJqB,EAAK9iE,QACLohE,EAAkB30G,IAAIq2G,EAAK9iE,OAAO3sC,QACtComB,EACI67D,EAAKmsB,SAAmC,SAAxBnsB,EAAKisB,gBACf,EAAIL,EAAWQ,WAAWjoF,IAC1B,EAAIynF,EAAW+B,YAAYxpF,IAElCA,CACX,CACA,SAAS6oF,EAAYQ,GACjB,MAAO,YAAY12G,OAAO02G,EAAKxxD,SAAS,GAAG73B,KAAM,MACrD,CACA,SAAS2oF,EAAcU,GACnB,MAAO,UAAO12G,OAAO02G,EAAKrpF,KAAM,SACpC,C,kCChOA,IAAIwnF,EA0BJ,SAASiC,EAAMJ,GACX,OAAQA,EAAK3+F,OAAS88F,EAAYwB,KAC9BK,EAAK3+F,OAAS88F,EAAYsB,QAC1BO,EAAK3+F,OAAS88F,EAAYuB,KAClC,CAjCAhxG,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQuxG,QAAUvxG,EAAQ2xG,MAAQ3xG,EAAQ+xG,IAAM/xG,EAAQ8xG,MAAQ9xG,EAAQ6xG,OAAS7xG,EAAQigD,QAAUjgD,EAAQwxG,UAAYxxG,EAAQg6D,KAAOh6D,EAAQsxG,KAAOtxG,EAAQwyG,MAAQxyG,EAAQuwG,iBAAc,EAG3L,SAAWA,GAEPA,EAAY,QAAU,OAEtBA,EAAY,QAAU,OAEtBA,EAAY,aAAe,YAE3BA,EAAY,WAAa,UAEzBA,EAAY,UAAY,SAExBA,EAAY,SAAW,QAEvBA,EAAY,OAAS,MAErBA,EAAY,SAAW,QAEvBA,EAAY,WAAa,SAC5B,CAnBD,CAmBGA,EAAcvwG,EAAQuwG,cAAgBvwG,EAAQuwG,YAAc,CAAC,IAWhEvwG,EAAQwyG,MAAQA,EAGhBxyG,EAAQsxG,KAAOf,EAAYe,KAE3BtxG,EAAQg6D,KAAOu2C,EAAYv2C,KAE3Bh6D,EAAQwxG,UAAYjB,EAAYiB,UAEhCxxG,EAAQigD,QAAUswD,EAAYtwD,QAE9BjgD,EAAQ6xG,OAAStB,EAAYsB,OAE7B7xG,EAAQ8xG,MAAQvB,EAAYuB,MAE5B9xG,EAAQ+xG,IAAMxB,EAAYwB,IAE1B/xG,EAAQ2xG,MAAQpB,EAAYoB,MAE5B3xG,EAAQuxG,QAAUhB,EAAYgB,O,oCCrD9B,IAAIvB,EAAmBvyG,MAAQA,KAAKuyG,kBAAqBlvG,OAAOK,OAAS,SAAUkP,EAAG0hD,EAAG90D,EAAGgzG,QAC7Et3G,IAAPs3G,IAAkBA,EAAKhzG,GAC3B,IAAIizG,EAAOpvG,OAAO27E,yBAAyB1qB,EAAG90D,GACzCizG,KAAS,QAASA,GAAQn+C,EAAEo+C,WAAaD,EAAKh0B,UAAYg0B,EAAKh/C,gBAClEg/C,EAAO,CAAEj/C,YAAY,EAAM3wD,IAAK,WAAa,OAAOyxD,EAAE90D,EAAI,IAE5D6D,OAAOsuD,eAAe/+C,EAAG4/F,EAAIC,EAChC,EAAI,SAAU7/F,EAAG0hD,EAAG90D,EAAGgzG,QACTt3G,IAAPs3G,IAAkBA,EAAKhzG,GAC3BoT,EAAE4/F,GAAMl+C,EAAE90D,EACb,GACGw1G,EAAgBh1G,MAAQA,KAAKg1G,cAAiB,SAAS1gD,EAAG/xD,GAC1D,IAAK,IAAI9C,KAAK60D,EAAa,YAAN70D,GAAoB4D,OAAOC,UAAUC,eAAetD,KAAKsC,EAAS9C,IAAI8yG,EAAgBhwG,EAAS+xD,EAAG70D,EAC3H,EACA4D,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQ0yG,gBAAa,EACrB,IAAIC,EAAmB,EAAQ,MAC3BC,EAAY,EAAQ,MACxBH,EAAa,EAAQ,MAAczyG,GAEnC,IAAI6yG,EAAc,CACdC,kBAAkB,EAClBC,gBAAgB,EAChBhC,SAAS,GAET2B,EAA4B,WAM5B,SAASA,EAAWjgG,EAAUrO,EAAS4uG,GAEnCv1G,KAAKw1G,IAAM,GAEXx1G,KAAKyiD,KAAO,IAAI0yD,EAAUM,SAASz1G,KAAKw1G,KAExCx1G,KAAKw4C,MAAO,EAEZx4C,KAAK01G,SAAW,CAAC11G,KAAKyiD,MAEtBziD,KAAK21G,SAAW,KAEhB31G,KAAK4C,OAAS,KAES,oBAAZ+D,IACP4uG,EAAY5uG,EACZA,EAAUyuG,GAEU,kBAAbpgG,IACPrO,EAAUqO,EACVA,OAAW9Z,GAEf8E,KAAKgV,SAAwB,OAAbA,QAAkC,IAAbA,EAAsBA,EAAW,KACtEhV,KAAK2G,QAAsB,OAAZA,QAAgC,IAAZA,EAAqBA,EAAUyuG,EAClEp1G,KAAKu1G,UAA0B,OAAdA,QAAoC,IAAdA,EAAuBA,EAAY,IAC9E,CAwGA,OAvGAN,EAAW3xG,UAAUsyG,aAAe,SAAUhzG,GAC1C5C,KAAK4C,OAASA,CAClB,EAEAqyG,EAAW3xG,UAAUuyG,QAAU,WAC3B71G,KAAKw1G,IAAM,GACXx1G,KAAKyiD,KAAO,IAAI0yD,EAAUM,SAASz1G,KAAKw1G,KACxCx1G,KAAKw4C,MAAO,EACZx4C,KAAK01G,SAAW,CAAC11G,KAAKyiD,MACtBziD,KAAK21G,SAAW,KAChB31G,KAAK4C,OAAS,IAClB,EAEAqyG,EAAW3xG,UAAUwyG,MAAQ,WACrB91G,KAAKw4C,OAETx4C,KAAKw4C,MAAO,EACZx4C,KAAK4C,OAAS,KACd5C,KAAK+1G,eAAe,MACxB,EACAd,EAAW3xG,UAAUyyB,QAAU,SAAU3xB,GACrCpE,KAAK+1G,eAAe3xG,EACxB,EACA6wG,EAAW3xG,UAAU0yG,WAAa,WAC9Bh2G,KAAK21G,SAAW,KAChB,IAAIhB,EAAO30G,KAAK01G,SAASz1F,MACrBjgB,KAAK2G,QAAQ2uG,iBACbX,EAAKsB,SAAWj2G,KAAK4C,OAAOqzG,UAE5Bj2G,KAAKu1G,WACLv1G,KAAKu1G,UAAUZ,EACvB,EACAM,EAAW3xG,UAAU4yG,UAAY,SAAUhxG,EAAM0vG,GAC7C,IAAI5+F,EAAOhW,KAAK2G,QAAQ2sG,QAAU4B,EAAiBpC,YAAYwB,SAAMp5G,EACjEuqF,EAAU,IAAI0vB,EAAU/+B,QAAQlxE,EAAM0vG,OAAS15G,EAAW8a,GAC9DhW,KAAKm2G,QAAQ1wB,GACbzlF,KAAK01G,SAASx7F,KAAKurE,EACvB,EACAwvB,EAAW3xG,UAAU8yG,OAAS,SAAU9qF,GACpC,IAAIqqF,EAAW31G,KAAK21G,SACpB,GAAIA,GAAYA,EAAS3/F,OAASk/F,EAAiBpC,YAAYv2C,KAC3Do5C,EAASrqF,MAAQA,EACbtrB,KAAK2G,QAAQ2uG,iBACbK,EAASM,SAAWj2G,KAAK4C,OAAOqzG,cAGnC,CACD,IAAIjxC,EAAO,IAAImwC,EAAU54C,KAAKjxC,GAC9BtrB,KAAKm2G,QAAQnxC,GACbhlE,KAAK21G,SAAW3wC,CACpB,CACJ,EACAiwC,EAAW3xG,UAAU+yG,UAAY,SAAU/qF,GACvC,GAAItrB,KAAK21G,UAAY31G,KAAK21G,SAAS3/F,OAASk/F,EAAiBpC,YAAYtwD,QACrExiD,KAAK21G,SAASrqF,MAAQA,MAD1B,CAIA,IAAI05C,EAAO,IAAImwC,EAAU3yD,QAAQl3B,GACjCtrB,KAAKm2G,QAAQnxC,GACbhlE,KAAK21G,SAAW3wC,CAHhB,CAIJ,EACAiwC,EAAW3xG,UAAUgzG,aAAe,WAChCt2G,KAAK21G,SAAW,IACpB,EACAV,EAAW3xG,UAAUizG,aAAe,WAChC,IAAIlvC,EAAO,IAAI8tC,EAAU54C,KAAK,IAC1ByI,EAAO,IAAImwC,EAAUjB,MAAM,CAAC7sC,IAChCrnE,KAAKm2G,QAAQnxC,GACbqC,EAAKx1B,OAASmzB,EACdhlE,KAAK21G,SAAWtuC,CACpB,EACA4tC,EAAW3xG,UAAUkzG,WAAa,WAC9Bx2G,KAAK21G,SAAW,IACpB,EACAV,EAAW3xG,UAAUmzG,wBAA0B,SAAUvxG,EAAMomB,GAC3D,IAAI05C,EAAO,IAAImwC,EAAUuB,sBAAsBxxG,EAAMomB,GACrDtrB,KAAKm2G,QAAQnxC,EACjB,EACAiwC,EAAW3xG,UAAUyyG,eAAiB,SAAU3xG,GAC5C,GAA6B,oBAAlBpE,KAAKgV,SACZhV,KAAKgV,SAAS5Q,EAAOpE,KAAKw1G,UAEzB,GAAIpxG,EACL,MAAMA,CAEd,EACA6wG,EAAW3xG,UAAU6yG,QAAU,SAAUnxC,GACrC,IAAInzB,EAAS7xC,KAAK01G,SAAS11G,KAAK01G,SAAS13G,OAAS,GAC9C8sE,EAAkBj5B,EAAOsR,SAAStR,EAAOsR,SAASnlD,OAAS,GAC3DgC,KAAK2G,QAAQ0uG,mBACbrwC,EAAK2xC,WAAa32G,KAAK4C,OAAO+zG,YAE9B32G,KAAK2G,QAAQ2uG,iBACbtwC,EAAKixC,SAAWj2G,KAAK4C,OAAOqzG,UAEhCpkE,EAAOsR,SAASjpC,KAAK8qD,GACjB8F,IACA9F,EAAKrkB,KAAOmqB,EACZA,EAAgB3sD,KAAO6mD,GAE3BA,EAAKnzB,OAASA,EACd7xC,KAAK21G,SAAW,IACpB,EACOV,CACX,CAxI+B,GAyI/B1yG,EAAQ0yG,WAAaA,EACrB1yG,EAAA,WAAkB0yG,C,oCCnKlB,IAAI2B,EAAa52G,MAAQA,KAAK42G,WAAc,WACxC,IAAIC,EAAgB,SAAUhlC,EAAGvnC,GAI7B,OAHAusE,EAAgBxzG,OAAOglB,gBAClB,CAAE6kF,UAAW,cAAgBnmG,OAAS,SAAU8qE,EAAGvnC,GAAKunC,EAAEq7B,UAAY5iE,CAAG,GAC1E,SAAUunC,EAAGvnC,GAAK,IAAK,IAAI7qC,KAAK6qC,EAAOjnC,OAAOC,UAAUC,eAAetD,KAAKqqC,EAAG7qC,KAAIoyE,EAAEpyE,GAAK6qC,EAAE7qC,GAAI,EAC7Fo3G,EAAchlC,EAAGvnC,EAC5B,EACA,OAAO,SAAUunC,EAAGvnC,GAChB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIi0C,UAAU,uBAAyBx5C,OAAOuF,GAAK,iCAE7D,SAASwsE,IAAO92G,KAAKmI,YAAc0pE,CAAG,CADtCglC,EAAchlC,EAAGvnC,GAEjBunC,EAAEvuE,UAAkB,OAANgnC,EAAajnC,OAAOK,OAAO4mC,IAAMwsE,EAAGxzG,UAAYgnC,EAAEhnC,UAAW,IAAIwzG,EACnF,CACH,CAd2C,GAexCz7B,EAAYr7E,MAAQA,KAAKq7E,UAAa,WAStC,OARAA,EAAWh4E,OAAO0B,QAAU,SAAS3B,GACjC,IAAK,IAAIF,EAAGnF,EAAI,EAAG+U,EAAIyQ,UAAUvlB,OAAQD,EAAI+U,EAAG/U,IAE5C,IAAK,IAAI0B,KADTyD,EAAIqgB,UAAUxlB,GACAmF,EAAOG,OAAOC,UAAUC,eAAetD,KAAKiD,EAAGzD,KACzD2D,EAAE3D,GAAKyD,EAAEzD,IAEjB,OAAO2D,CACX,EACOi4E,EAAS/sC,MAAMtuC,KAAMujB,UAChC,EACAlgB,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQyoE,UAAYzoE,EAAQw0G,YAAcx0G,EAAQy0G,WAAaz0G,EAAQ00G,YAAc10G,EAAQ20G,UAAY30G,EAAQ40G,OAAS50G,EAAQ60G,QAAU70G,EAAQwyG,MAAQxyG,EAAQ6zE,QAAU7zE,EAAQkzG,SAAWlzG,EAAQ2xG,MAAQ3xG,EAAQ80G,iBAAmB90G,EAAQm0G,sBAAwBn0G,EAAQigD,QAAUjgD,EAAQg6D,KAAOh6D,EAAQ+0G,SAAW/0G,EAAQg1G,UAAO,EAC/U,IAAIrC,EAAmB,EAAQ,MAK3BqC,EAAsB,WACtB,SAASA,IAELv3G,KAAK6xC,OAAS,KAEd7xC,KAAK2gD,KAAO,KAEZ3gD,KAAKme,KAAO,KAEZne,KAAK22G,WAAa,KAElB32G,KAAKi2G,SAAW,IACpB,CAsDA,OArDA5yG,OAAOsuD,eAAe4lD,EAAKj0G,UAAW,aAAc,CAMhDT,IAAK,WACD,OAAO7C,KAAK6xC,MAChB,EACA/uC,IAAK,SAAU+uC,GACX7xC,KAAK6xC,OAASA,CAClB,EACA2hB,YAAY,EACZC,cAAc,IAElBpwD,OAAOsuD,eAAe4lD,EAAKj0G,UAAW,kBAAmB,CAKrDT,IAAK,WACD,OAAO7C,KAAK2gD,IAChB,EACA79C,IAAK,SAAU69C,GACX3gD,KAAK2gD,KAAOA,CAChB,EACA6S,YAAY,EACZC,cAAc,IAElBpwD,OAAOsuD,eAAe4lD,EAAKj0G,UAAW,cAAe,CAKjDT,IAAK,WACD,OAAO7C,KAAKme,IAChB,EACArb,IAAK,SAAUqb,GACXne,KAAKme,KAAOA,CAChB,EACAq1C,YAAY,EACZC,cAAc,IAQlB8jD,EAAKj0G,UAAU0nE,UAAY,SAAUwsC,GAEjC,YADkB,IAAdA,IAAwBA,GAAY,GACjCxsC,EAAUhrE,KAAMw3G,EAC3B,EACOD,CACX,CAnEyB,GAoEzBh1G,EAAQg1G,KAAOA,EAIf,IAAID,EAA0B,SAAUG,GAKpC,SAASH,EAAShsF,GACd,IAAI2/D,EAAQwsB,EAAOx3G,KAAKD,OAASA,KAEjC,OADAirF,EAAM3/D,KAAOA,EACN2/D,CACX,CAeA,OAvBA2rB,EAAUU,EAAUG,GASpBp0G,OAAOsuD,eAAe2lD,EAASh0G,UAAW,YAAa,CAKnDT,IAAK,WACD,OAAO7C,KAAKsrB,IAChB,EACAxoB,IAAK,SAAUwoB,GACXtrB,KAAKsrB,KAAOA,CAChB,EACAkoC,YAAY,EACZC,cAAc,IAEX6jD,CACX,CAzB6B,CAyB3BC,GACFh1G,EAAQ+0G,SAAWA,EAInB,IAAI/6C,EAAsB,SAAUk7C,GAEhC,SAASl7C,IACL,IAAI0uB,EAAmB,OAAXwsB,GAAmBA,EAAOnpE,MAAMtuC,KAAMujB,YAAcvjB,KAEhE,OADAirF,EAAMj1E,KAAOk/F,EAAiBpC,YAAYv2C,KACnC0uB,CACX,CAQA,OAbA2rB,EAAUr6C,EAAMk7C,GAMhBp0G,OAAOsuD,eAAe4K,EAAKj5D,UAAW,WAAY,CAC9CT,IAAK,WACD,OAAO,CACX,EACA2wD,YAAY,EACZC,cAAc,IAEX8I,CACX,CAfyB,CAevB+6C,GACF/0G,EAAQg6D,KAAOA,EAIf,IAAI/Z,EAAyB,SAAUi1D,GAEnC,SAASj1D,IACL,IAAIyoC,EAAmB,OAAXwsB,GAAmBA,EAAOnpE,MAAMtuC,KAAMujB,YAAcvjB,KAEhE,OADAirF,EAAMj1E,KAAOk/F,EAAiBpC,YAAYtwD,QACnCyoC,CACX,CAQA,OAbA2rB,EAAUp0D,EAASi1D,GAMnBp0G,OAAOsuD,eAAenP,EAAQl/C,UAAW,WAAY,CACjDT,IAAK,WACD,OAAO,CACX,EACA2wD,YAAY,EACZC,cAAc,IAEXjR,CACX,CAf4B,CAe1B80D,GACF/0G,EAAQigD,QAAUA,EAIlB,IAAIk0D,EAAuC,SAAUe,GAEjD,SAASf,EAAsBxxG,EAAMomB,GACjC,IAAI2/D,EAAQwsB,EAAOx3G,KAAKD,KAAMsrB,IAAStrB,KAGvC,OAFAirF,EAAM/lF,KAAOA,EACb+lF,EAAMj1E,KAAOk/F,EAAiBpC,YAAYiB,UACnC9oB,CACX,CAQA,OAdA2rB,EAAUF,EAAuBe,GAOjCp0G,OAAOsuD,eAAe+kD,EAAsBpzG,UAAW,WAAY,CAC/DT,IAAK,WACD,OAAO,CACX,EACA2wD,YAAY,EACZC,cAAc,IAEXijD,CACX,CAhB0C,CAgBxCY,GACF/0G,EAAQm0G,sBAAwBA,EAIhC,IAAIW,EAAkC,SAAUI,GAK5C,SAASJ,EAAiBl0D,GACtB,IAAI8nC,EAAQwsB,EAAOx3G,KAAKD,OAASA,KAEjC,OADAirF,EAAM9nC,SAAWA,EACV8nC,CACX,CAmCA,OA3CA2rB,EAAUS,EAAkBI,GAS5Bp0G,OAAOsuD,eAAe0lD,EAAiB/zG,UAAW,aAAc,CAG5DT,IAAK,WACD,IAAIwE,EACJ,OAAmC,QAA3BA,EAAKrH,KAAKmjD,SAAS,UAAuB,IAAP97C,EAAgBA,EAAK,IACpE,EACAmsD,YAAY,EACZC,cAAc,IAElBpwD,OAAOsuD,eAAe0lD,EAAiB/zG,UAAW,YAAa,CAE3DT,IAAK,WACD,OAAO7C,KAAKmjD,SAASnlD,OAAS,EACxBgC,KAAKmjD,SAASnjD,KAAKmjD,SAASnlD,OAAS,GACrC,IACV,EACAw1D,YAAY,EACZC,cAAc,IAElBpwD,OAAOsuD,eAAe0lD,EAAiB/zG,UAAW,aAAc,CAK5DT,IAAK,WACD,OAAO7C,KAAKmjD,QAChB,EACArgD,IAAK,SAAUqgD,GACXnjD,KAAKmjD,SAAWA,CACpB,EACAqQ,YAAY,EACZC,cAAc,IAEX4jD,CACX,CA7CqC,CA6CnCE,GACFh1G,EAAQ80G,iBAAmBA,EAC3B,IAAInD,EAAuB,SAAUuD,GAEjC,SAASvD,IACL,IAAIjpB,EAAmB,OAAXwsB,GAAmBA,EAAOnpE,MAAMtuC,KAAMujB,YAAcvjB,KAEhE,OADAirF,EAAMj1E,KAAOk/F,EAAiBpC,YAAYoB,MACnCjpB,CACX,CAQA,OAbA2rB,EAAU1C,EAAOuD,GAMjBp0G,OAAOsuD,eAAeuiD,EAAM5wG,UAAW,WAAY,CAC/CT,IAAK,WACD,OAAO,CACX,EACA2wD,YAAY,EACZC,cAAc,IAEXygD,CACX,CAf0B,CAexBmD,GACF90G,EAAQ2xG,MAAQA,EAIhB,IAAIuB,EAA0B,SAAUgC,GAEpC,SAAShC,IACL,IAAIxqB,EAAmB,OAAXwsB,GAAmBA,EAAOnpE,MAAMtuC,KAAMujB,YAAcvjB,KAEhE,OADAirF,EAAMj1E,KAAOk/F,EAAiBpC,YAAYe,KACnC5oB,CACX,CAQA,OAbA2rB,EAAUnB,EAAUgC,GAMpBp0G,OAAOsuD,eAAe8jD,EAASnyG,UAAW,WAAY,CAClDT,IAAK,WACD,OAAO,CACX,EACA2wD,YAAY,EACZC,cAAc,IAEXgiD,CACX,CAf6B,CAe3B4B,GACF90G,EAAQkzG,SAAWA,EAInB,IAAIr/B,EAAyB,SAAUqhC,GAOnC,SAASrhC,EAAQlxE,EAAM0vG,EAASzxD,EAAUntC,QACrB,IAAbmtC,IAAuBA,EAAW,SACzB,IAATntC,IAAmBA,EAAgB,WAAT9Q,EACxBgwG,EAAiBpC,YAAYsB,OACpB,UAATlvG,EACIgwG,EAAiBpC,YAAYuB,MAC7Ba,EAAiBpC,YAAYwB,KACvC,IAAIrpB,EAAQwsB,EAAOx3G,KAAKD,KAAMmjD,IAAanjD,KAI3C,OAHAirF,EAAM/lF,KAAOA,EACb+lF,EAAM2pB,QAAUA,EAChB3pB,EAAMj1E,KAAOA,EACNi1E,CACX,CAuCA,OAzDA2rB,EAAUxgC,EAASqhC,GAmBnBp0G,OAAOsuD,eAAeykB,EAAQ9yE,UAAW,WAAY,CACjDT,IAAK,WACD,OAAO,CACX,EACA2wD,YAAY,EACZC,cAAc,IAElBpwD,OAAOsuD,eAAeykB,EAAQ9yE,UAAW,UAAW,CAMhDT,IAAK,WACD,OAAO7C,KAAKkF,IAChB,EACApC,IAAK,SAAUoC,GACXlF,KAAKkF,KAAOA,CAChB,EACAsuD,YAAY,EACZC,cAAc,IAElBpwD,OAAOsuD,eAAeykB,EAAQ9yE,UAAW,aAAc,CACnDT,IAAK,WACD,IAAIooF,EAAQjrF,KACZ,OAAOqD,OAAO8pB,KAAKntB,KAAK40G,SAASx0G,KAAI,SAAU8E,GAC3C,IAAImC,EAAIgO,EACR,MAAO,CACHnQ,KAAMA,EACNgR,MAAO+0E,EAAM2pB,QAAQ1vG,GACrBqkG,UAAkD,QAAtCliG,EAAK4jF,EAAM,6BAA0C,IAAP5jF,OAAgB,EAASA,EAAGnC,GACtFmrB,OAA4C,QAAnChb,EAAK41E,EAAM,0BAAuC,IAAP51E,OAAgB,EAASA,EAAGnQ,GAExF,GACJ,EACAsuD,YAAY,EACZC,cAAc,IAEX2iB,CACX,CA3D4B,CA2D1BihC,GAMF,SAAStC,EAAM/vC,GACX,OAAO,EAAIkwC,EAAiBH,OAAO/vC,EACvC,CAMA,SAASoyC,EAAQpyC,GACb,OAAOA,EAAKhvD,OAASk/F,EAAiBpC,YAAYoB,KACtD,CAMA,SAASiD,EAAOnyC,GACZ,OAAOA,EAAKhvD,OAASk/F,EAAiBpC,YAAYv2C,IACtD,CAMA,SAAS26C,EAAUlyC,GACf,OAAOA,EAAKhvD,OAASk/F,EAAiBpC,YAAYtwD,OACtD,CAMA,SAASy0D,EAAYjyC,GACjB,OAAOA,EAAKhvD,OAASk/F,EAAiBpC,YAAYiB,SACtD,CAMA,SAASiD,EAAWhyC,GAChB,OAAOA,EAAKhvD,OAASk/F,EAAiBpC,YAAYe,IACtD,CAMA,SAASkD,EAAY/xC,GACjB,OAAO3hE,OAAOC,UAAUC,eAAetD,KAAK+kE,EAAM,WACtD,CAQA,SAASgG,EAAUhG,EAAMwyC,GAErB,IAAIz0G,EACJ,QAFkB,IAAdy0G,IAAwBA,GAAY,GAEpCL,EAAOnyC,GACPjiE,EAAS,IAAIw5D,EAAKyI,EAAK15C,WAEtB,GAAI4rF,EAAUlyC,GACfjiE,EAAS,IAAIy/C,EAAQwiB,EAAK15C,WAEzB,GAAIypF,EAAM/vC,GAAO,CAClB,IAAI7hB,EAAWq0D,EAAYE,EAAc1yC,EAAK7hB,UAAY,GACtDw0D,EAAU,IAAIvhC,EAAQpR,EAAK9/D,KAAMm2E,EAAS,CAAC,EAAGrW,EAAK4vC,SAAUzxD,GACjEA,EAAS/nB,SAAQ,SAAUktB,GAAS,OAAQA,EAAMzW,OAAS8lE,CAAU,IAC/C,MAAlB3yC,EAAKukC,YACLoO,EAAQpO,UAAYvkC,EAAKukC,WAEzBvkC,EAAK,wBACL2yC,EAAQ,sBAAwBt8B,EAAS,CAAC,EAAGrW,EAAK,wBAElDA,EAAK,qBACL2yC,EAAQ,mBAAqBt8B,EAAS,CAAC,EAAGrW,EAAK,qBAEnDjiE,EAAS40G,CACb,MACK,GAAIP,EAAQpyC,GAAO,CAChB7hB,EAAWq0D,EAAYE,EAAc1yC,EAAK7hB,UAAY,GAA1D,IACIy0D,EAAU,IAAI1D,EAAM/wD,GACxBA,EAAS/nB,SAAQ,SAAUktB,GAAS,OAAQA,EAAMzW,OAAS+lE,CAAU,IACrE70G,EAAS60G,CACb,MACK,GAAIZ,EAAWhyC,GAAO,CACnB7hB,EAAWq0D,EAAYE,EAAc1yC,EAAK7hB,UAAY,GAA1D,IACI00D,EAAU,IAAIpC,EAAStyD,GAC3BA,EAAS/nB,SAAQ,SAAUktB,GAAS,OAAQA,EAAMzW,OAASgmE,CAAU,IACjE7yC,EAAK,YACL6yC,EAAQ,UAAY7yC,EAAK,WAE7BjiE,EAAS80G,CACb,KACK,KAAIZ,EAAYjyC,GAUjB,MAAM,IAAIt/D,MAAM,wBAAwBzH,OAAO+mE,EAAKhvD,OATpD,IAAI8hG,EAAc,IAAIpB,EAAsB1xC,EAAK9/D,KAAM8/D,EAAK15C,MACtC,MAAlB05C,EAAK,YACL8yC,EAAY,UAAY9yC,EAAK,UAC7B8yC,EAAY,cAAgB9yC,EAAK,cACjC8yC,EAAY,cAAgB9yC,EAAK,eAErCjiE,EAAS+0G,CAIb,CAMA,OALA/0G,EAAO4zG,WAAa3xC,EAAK2xC,WACzB5zG,EAAOkzG,SAAWjxC,EAAKixC,SACQ,MAA3BjxC,EAAK+yC,qBACLh1G,EAAOg1G,mBAAqB/yC,EAAK+yC,oBAE9Bh1G,CACX,CAEA,SAAS20G,EAAcM,GAEnB,IADA,IAAI70D,EAAW60D,EAAO53G,KAAI,SAAUkoD,GAAS,OAAO0iB,EAAU1iB,GAAO,EAAO,IACnEvqD,EAAI,EAAGA,EAAIolD,EAASnlD,OAAQD,IACjColD,EAASplD,GAAG4iD,KAAOwC,EAASplD,EAAI,GAChColD,EAASplD,EAAI,GAAGogB,KAAOglC,EAASplD,GAEpC,OAAOolD,CACX,CAjIA5gD,EAAQ6zE,QAAUA,EAQlB7zE,EAAQwyG,MAAQA,EAQhBxyG,EAAQ60G,QAAUA,EAQlB70G,EAAQ40G,OAASA,EAQjB50G,EAAQ20G,UAAYA,EAQpB30G,EAAQ00G,YAAcA,EAQtB10G,EAAQy0G,WAAaA,EAQrBz0G,EAAQw0G,YAAcA,EAiEtBx0G,EAAQyoE,UAAYA,C,oCChdpB3nE,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQ01G,aAAU,EAClB,IAAIC,EAAiB,EAAQ,MACzBC,EAAc,EAAQ,MAQ1B,SAASF,EAAQhuC,GACb,IAAImuC,EAAWC,EAAcC,EAAaruC,GAC1C,OAAQmuC,EAEgB,SAAlBA,EAASlzG,KACLqzG,EAAYH,GACZI,EAAWJ,GAHf,IAIV,CAQA,SAASG,EAAYH,GACjB,IAAI/wG,EACA2wG,EAASI,EAASj1D,SAClBs1D,EAAO,CACPziG,KAAM,OACN0iG,OAAO,EAAIP,EAAYxiF,sBAAsB,QAASqiF,GAAQ53G,KAAI,SAAU2uD,GACxE,IAAI1nD,EACA87C,EAAW4L,EAAK5L,SAChBw1D,EAAQ,CAAEC,MAAOC,EAAiB11D,IACtC21D,EAAiBH,EAAO,KAAM,KAAMx1D,GACpC21D,EAAiBH,EAAO,QAAS,QAASx1D,GAC1C,IAAI37C,EAAkD,QAA1CH,EAAKgxG,EAAc,OAAQl1D,UAA8B,IAAP97C,OAAgB,EAASA,EAAGutG,QAAQ,QAC9FptG,IACAmxG,EAAMzzF,KAAO1d,GAEjB,IAAImnG,EAAcvlG,EAAM,UAAW+5C,IAAa/5C,EAAM,UAAW+5C,GAC7DwrD,IACAgK,EAAMhK,YAAcA,GAExB,IAAIoK,EAAU3vG,EAAM,UAAW+5C,GAI/B,OAHI41D,IACAJ,EAAMI,QAAU,IAAI5rG,KAAK4rG,IAEtBJ,CACX,KAEJG,EAAiBL,EAAM,KAAM,KAAMT,GACnCc,EAAiBL,EAAM,QAAS,QAAST,GACzC,IAAIxwG,EAAgD,QAAxCH,EAAKgxG,EAAc,OAAQL,UAA4B,IAAP3wG,OAAgB,EAASA,EAAGutG,QAAQ,QAC5FptG,IACAixG,EAAKvzF,KAAO1d,GAEhBsxG,EAAiBL,EAAM,cAAe,WAAYT,GAClD,IAAInqD,EAAUzkD,EAAM,UAAW4uG,GAK/B,OAJInqD,IACA4qD,EAAK5qD,QAAU,IAAI1gD,KAAK0gD,IAE5BirD,EAAiBL,EAAM,SAAU,QAAST,GAAQ,GAC3CS,CACX,CAOA,SAASD,EAAWJ,GAChB,IAAI/wG,EAAIgO,EACJ2iG,EAAwH,QAA9G3iG,EAA4D,QAAtDhO,EAAKgxG,EAAc,UAAWD,EAASj1D,iBAA8B,IAAP97C,OAAgB,EAASA,EAAG87C,gBAA6B,IAAP9tC,EAAgBA,EAAK,GACrJojG,EAAO,CACPziG,KAAMoiG,EAASlzG,KAAK4a,OAAO,EAAG,GAC9B5B,GAAI,GACJw6F,OAAO,EAAIP,EAAYxiF,sBAAsB,OAAQyiF,EAASj1D,UAAU/iD,KAAI,SAAU2uD,GAClF,IAAI5L,EAAW4L,EAAK5L,SAChBw1D,EAAQ,CAAEC,MAAOC,EAAiB11D,IACtC21D,EAAiBH,EAAO,KAAM,OAAQx1D,GACtC21D,EAAiBH,EAAO,QAAS,QAASx1D,GAC1C21D,EAAiBH,EAAO,OAAQ,OAAQx1D,GACxC21D,EAAiBH,EAAO,cAAe,cAAex1D,GACtD,IAAI41D,EAAU3vG,EAAM,UAAW+5C,GAG/B,OAFI41D,IACAJ,EAAMI,QAAU,IAAI5rG,KAAK4rG,IACtBJ,CACX,KAEJG,EAAiBL,EAAM,QAAS,QAAST,GACzCc,EAAiBL,EAAM,OAAQ,OAAQT,GACvCc,EAAiBL,EAAM,cAAe,cAAeT,GACrD,IAAInqD,EAAUzkD,EAAM,gBAAiB4uG,GAKrC,OAJInqD,IACA4qD,EAAK5qD,QAAU,IAAI1gD,KAAK0gD,IAE5BirD,EAAiBL,EAAM,SAAU,iBAAkBT,GAAQ,GACpDS,CACX,CAjFAl2G,EAAQ01G,QAAUA,EAkFlB,IAAIe,EAAoB,CAAC,MAAO,OAAQ,QACpCC,EAAiB,CACjB,WACA,UACA,YACA,eACA,WACA,WACA,SACA,SAQJ,SAASJ,EAAiBn6E,GACtB,OAAO,EAAIy5E,EAAYxiF,sBAAsB,gBAAiB+I,GAAOt+B,KAAI,SAAUu0G,GAM/E,IALA,IAAIC,EAAUD,EAAKC,QACfgE,EAAQ,CACRM,OAAQtE,EAAQ,UAChBuE,YAAavE,EAAQ,cAEhBh5B,EAAK,EAAGw9B,EAAsBJ,EAAmBp9B,EAAKw9B,EAAoBp7G,OAAQ49E,IAAM,CAC7F,IAAIy9B,EAASD,EAAoBx9B,GAC7Bg5B,EAAQyE,KACRT,EAAMS,GAAUzE,EAAQyE,GAEhC,CACA,IAAK,IAAIhyG,EAAK,EAAGiyG,EAAmBL,EAAgB5xG,EAAKiyG,EAAiBt7G,OAAQqJ,IAAM,CAChFgyG,EAASC,EAAiBjyG,GAC1ButG,EAAQyE,KACRT,EAAMS,GAAUngC,SAAS07B,EAAQyE,GAAS,IAElD,CAIA,OAHIzE,EAAQ,gBACRgE,EAAMW,WAAa3E,EAAQ,eAExBgE,CACX,GACJ,CAQA,SAASP,EAAc1rC,EAAS3H,GAC5B,OAAO,EAAImzC,EAAYxiF,sBAAsBg3C,EAAS3H,GAAM,EAAM,GAAG,EACzE,CASA,SAAS57D,EAAMujE,EAASjuC,EAAO86E,GAE3B,YADgB,IAAZA,IAAsBA,GAAU,IAC7B,EAAItB,EAAevtC,cAAa,EAAIwtC,EAAYxiF,sBAAsBg3C,EAASjuC,EAAO86E,EAAS,IAAIv6G,MAC9G,CAUA,SAAS65G,EAAiB91F,EAAKhgB,EAAM2pE,EAASjuC,EAAO86E,QACjC,IAAZA,IAAsBA,GAAU,GACpC,IAAIhpE,EAAMpnC,EAAMujE,EAASjuC,EAAO86E,GAC5BhpE,IACAxtB,EAAIhgB,GAAQwtC,EACpB,CAOA,SAAS8nE,EAAYpiG,GACjB,MAAiB,QAAVA,GAA6B,SAAVA,GAA8B,YAAVA,CAClD,C,oCC5LA7S,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQk3G,WAAal3G,EAAQm3G,wBAA0Bn3G,EAAQo3G,iBAAmBp3G,EAAQq3G,mBAAgB,EAC1G,IAuCID,EAvCAE,EAAe,EAAQ,MAQ3B,SAASD,EAAcjG,GACnB,IAAImG,EAAMnG,EAAM31G,OAKhB,QAAS87G,GAAO,EAAG,CACf,IAAI90C,EAAO2uC,EAAMmG,GAMjB,GAAIA,EAAM,GAAKnG,EAAMoG,YAAY/0C,EAAM80C,EAAM,IAAM,EAC/CnG,EAAMv1D,OAAO07D,EAAK,QAGtB,IAAK,IAAIE,EAAWh1C,EAAKnzB,OAAQmoE,EAAUA,EAAWA,EAASnoE,OAC3D,GAAI8hE,EAAMv7F,SAAS4hG,GAAW,CAC1BrG,EAAMv1D,OAAO07D,EAAK,GAClB,KACJ,CAER,CACA,OAAOnG,CACX,CAwCA,SAAS+F,EAAwBO,EAAOC,GACpC,IAAIC,EAAW,GACXC,EAAW,GACf,GAAIH,IAAUC,EACV,OAAO,EAEX,IAAInuD,GAAU,EAAI8tD,EAAa9C,aAAakD,GAASA,EAAQA,EAAMpoE,OACnE,MAAOka,EACHouD,EAASztD,QAAQX,GACjBA,EAAUA,EAAQla,OAEtBka,GAAU,EAAI8tD,EAAa9C,aAAamD,GAASA,EAAQA,EAAMroE,OAC/D,MAAOka,EACHquD,EAAS1tD,QAAQX,GACjBA,EAAUA,EAAQla,OAEtB,IAAIwoE,EAAS9xG,KAAKC,IAAI2xG,EAASn8G,OAAQo8G,EAASp8G,QAC5C87G,EAAM,EACV,MAAOA,EAAMO,GAAUF,EAASL,KAASM,EAASN,GAC9CA,IAEJ,GAAY,IAARA,EACA,OAAOH,EAAiBW,aAE5B,IAAIC,EAAeJ,EAASL,EAAM,GAC9BU,EAAWD,EAAap3D,SACxBs3D,EAAWN,EAASL,GACpBY,EAAWN,EAASN,GACxB,OAAIU,EAAS97G,QAAQ+7G,GAAYD,EAAS97G,QAAQg8G,GAC1CH,IAAiBL,EACVP,EAAiBgB,UAAYhB,EAAiBiB,aAElDjB,EAAiBgB,UAExBJ,IAAiBN,EACVN,EAAiBkB,UAAYlB,EAAiBmB,SAElDnB,EAAiBkB,SAC5B,CAWA,SAASpB,EAAW9F,GAYhB,OAXAA,EAAQA,EAAMhhG,QAAO,SAAUqyD,EAAMjnE,EAAGI,GAAO,OAAQA,EAAIia,SAAS4sD,EAAMjnE,EAAI,EAAI,IAClF41G,EAAM/0F,MAAK,SAAUyrB,EAAGC,GACpB,IAAIywE,EAAWrB,EAAwBrvE,EAAGC,GAC1C,OAAIywE,EAAWpB,EAAiBkB,WACpB,EAEHE,EAAWpB,EAAiBgB,UAC1B,EAEJ,CACX,IACOhH,CACX,CArGApxG,EAAQq3G,cAAgBA,EAMxB,SAAWD,GACPA,EAAiBA,EAAiB,gBAAkB,GAAK,eACzDA,EAAiBA,EAAiB,aAAe,GAAK,YACtDA,EAAiBA,EAAiB,aAAe,GAAK,YACtDA,EAAiBA,EAAiB,YAAc,GAAK,WACrDA,EAAiBA,EAAiB,gBAAkB,IAAM,cAC7D,CAND,CAMGA,EAAmBp3G,EAAQo3G,mBAAqBp3G,EAAQo3G,iBAAmB,CAAC,IAkE/Ep3G,EAAQm3G,wBAA0BA,EAwBlCn3G,EAAQk3G,WAAaA,C,oCC1IrB,IAAIlH,EAAmBvyG,MAAQA,KAAKuyG,kBAAqBlvG,OAAOK,OAAS,SAAUkP,EAAG0hD,EAAG90D,EAAGgzG,QAC7Et3G,IAAPs3G,IAAkBA,EAAKhzG,GAC3B,IAAIizG,EAAOpvG,OAAO27E,yBAAyB1qB,EAAG90D,GACzCizG,KAAS,QAASA,GAAQn+C,EAAEo+C,WAAaD,EAAKh0B,UAAYg0B,EAAKh/C,gBAClEg/C,EAAO,CAAEj/C,YAAY,EAAM3wD,IAAK,WAAa,OAAOyxD,EAAE90D,EAAI,IAE5D6D,OAAOsuD,eAAe/+C,EAAG4/F,EAAIC,EAChC,EAAI,SAAU7/F,EAAG0hD,EAAG90D,EAAGgzG,QACTt3G,IAAPs3G,IAAkBA,EAAKhzG,GAC3BoT,EAAE4/F,GAAMl+C,EAAE90D,EACb,GACGw1G,EAAgBh1G,MAAQA,KAAKg1G,cAAiB,SAAS1gD,EAAG/xD,GAC1D,IAAK,IAAI9C,KAAK60D,EAAa,YAAN70D,GAAoB4D,OAAOC,UAAUC,eAAetD,KAAKsC,EAAS9C,IAAI8yG,EAAgBhwG,EAAS+xD,EAAG70D,EAC3H,EACA4D,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQw0G,YAAcx0G,EAAQy0G,WAAaz0G,EAAQ20G,UAAY30G,EAAQ40G,OAAS50G,EAAQ60G,QAAU70G,EAAQwyG,WAAQ,EAClHC,EAAa,EAAQ,MAAmBzyG,GACxCyyG,EAAa,EAAQ,MAAmBzyG,GACxCyyG,EAAa,EAAQ,MAAsBzyG,GAC3CyyG,EAAa,EAAQ,MAAkBzyG,GACvCyyG,EAAa,EAAQ,MAAgBzyG,GACrCyyG,EAAa,EAAQ,MAAiBzyG,GACtCyyG,EAAa,EAAQ,MAAezyG,GAEpC,IAAIs3G,EAAe,EAAQ,MAC3Bx2G,OAAOsuD,eAAepvD,EAAS,QAAS,CAAEixD,YAAY,EAAM3wD,IAAK,WAAc,OAAOg3G,EAAa9E,KAAO,IAC1G1xG,OAAOsuD,eAAepvD,EAAS,UAAW,CAAEixD,YAAY,EAAM3wD,IAAK,WAAc,OAAOg3G,EAAazC,OAAS,IAC9G/zG,OAAOsuD,eAAepvD,EAAS,SAAU,CAAEixD,YAAY,EAAM3wD,IAAK,WAAc,OAAOg3G,EAAa1C,MAAQ,IAC5G9zG,OAAOsuD,eAAepvD,EAAS,YAAa,CAAEixD,YAAY,EAAM3wD,IAAK,WAAc,OAAOg3G,EAAa3C,SAAW,IAClH7zG,OAAOsuD,eAAepvD,EAAS,aAAc,CAAEixD,YAAY,EAAM3wD,IAAK,WAAc,OAAOg3G,EAAa7C,UAAY,IACpH3zG,OAAOsuD,eAAepvD,EAAS,cAAe,CAAEixD,YAAY,EAAM3wD,IAAK,WAAc,OAAOg3G,EAAa9C,WAAa,G,oCC9BtH1zG,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQy4G,qBAAuBz4G,EAAQozB,qBAAuBpzB,EAAQ04G,eAAiB14G,EAAQ24G,YAAc34G,EAAQ44G,iBAAc,EACnI,IAAItB,EAAe,EAAQ,MACvBuB,EAAgB,EAAQ,MACxBC,EAAS,CACTC,SAAU,SAAUp2G,GAChB,MAAoB,oBAATA,EACA,SAAUyvG,GAAQ,OAAO,EAAIkF,EAAa9E,OAAOJ,IAASzvG,EAAKyvG,EAAKzvG,KAAO,EAEpE,MAATA,EACE20G,EAAa9E,MAEjB,SAAUJ,GAAQ,OAAO,EAAIkF,EAAa9E,OAAOJ,IAASA,EAAKzvG,OAASA,CAAM,CACzF,EACAq2G,SAAU,SAAUvlG,GAChB,MAAoB,oBAATA,EACA,SAAU2+F,GAAQ,OAAO3+F,EAAK2+F,EAAK3+F,KAAO,EAE9C,SAAU2+F,GAAQ,OAAOA,EAAK3+F,OAASA,CAAM,CACxD,EACAwlG,aAAc,SAAUlwF,GACpB,MAAoB,oBAATA,EACA,SAAUqpF,GAAQ,OAAO,EAAIkF,EAAa1C,QAAQxC,IAASrpF,EAAKqpF,EAAKrpF,KAAO,EAEhF,SAAUqpF,GAAQ,OAAO,EAAIkF,EAAa1C,QAAQxC,IAASA,EAAKrpF,OAASA,CAAM,CAC1F,GAQJ,SAASmwF,EAAepC,EAAQnjG,GAC5B,MAAqB,oBAAVA,EACA,SAAUy+F,GAAQ,OAAO,EAAIkF,EAAa9E,OAAOJ,IAASz+F,EAAMy+F,EAAKC,QAAQyE,GAAU,EAE3F,SAAU1E,GAAQ,OAAO,EAAIkF,EAAa9E,OAAOJ,IAASA,EAAKC,QAAQyE,KAAYnjG,CAAO,CACrG,CAOA,SAASwlG,EAAarxE,EAAGC,GACrB,OAAO,SAAUqqE,GAAQ,OAAOtqE,EAAEsqE,IAASrqE,EAAEqqE,EAAO,CACxD,CAMA,SAASgH,EAAYh1G,GACjB,IAAIi1G,EAAQv4G,OAAO8pB,KAAKxmB,GAASvG,KAAI,SAAUkK,GAC3C,IAAI4L,EAAQvP,EAAQ2D,GACpB,OAAOjH,OAAOC,UAAUC,eAAetD,KAAKo7G,EAAQ/wG,GAC9C+wG,EAAO/wG,GAAK4L,GACZulG,EAAenxG,EAAK4L,EAC9B,IACA,OAAwB,IAAjB0lG,EAAM59G,OAAe,KAAO49G,EAAMt7E,OAAOo7E,EACpD,CAOA,SAASP,EAAYx0G,EAASq+D,GAC1B,IAAI9kE,EAAOy7G,EAAYh1G,GACvB,OAAOzG,GAAOA,EAAK8kE,EACvB,CAUA,SAASk2C,EAAYv0G,EAASgtG,EAAO6F,EAASqC,QAC5B,IAAVA,IAAoBA,EAAQh9D,KAChC,IAAI3+C,EAAOy7G,EAAYh1G,GACvB,OAAOzG,GAAO,EAAIk7G,EAAczoG,QAAQzS,EAAMyzG,EAAO6F,EAASqC,GAAS,EAC3E,CASA,SAASZ,EAAe/8F,EAAIy1F,EAAO6F,GAI/B,YAHgB,IAAZA,IAAsBA,GAAU,GAC/BzyG,MAAMC,QAAQ2sG,KACfA,EAAQ,CAACA,KACN,EAAIyH,EAAcU,SAASL,EAAe,KAAMv9F,GAAKy1F,EAAO6F,EACvE,CAUA,SAAS7jF,EAAqBg3C,EAASgnC,EAAO6F,EAASqC,GAGnD,YAFgB,IAAZrC,IAAsBA,GAAU,QACtB,IAAVqC,IAAoBA,EAAQh9D,MACzB,EAAIu8D,EAAczoG,QAAQ0oG,EAAO,YAAY1uC,GAAUgnC,EAAO6F,EAASqC,EAClF,CAUA,SAASb,EAAqBhlG,EAAM29F,EAAO6F,EAASqC,GAGhD,YAFgB,IAAZrC,IAAsBA,GAAU,QACtB,IAAVqC,IAAoBA,EAAQh9D,MACzB,EAAIu8D,EAAczoG,QAAQ0oG,EAAO,YAAYrlG,GAAO29F,EAAO6F,EAASqC,EAC/E,CAvDAt5G,EAAQ44G,YAAcA,EActB54G,EAAQ24G,YAAcA,EActB34G,EAAQ04G,eAAiBA,EAczB14G,EAAQozB,qBAAuBA,EAc/BpzB,EAAQy4G,qBAAuBA,C,kCCxH/B,SAASe,EAAcpH,GAKnB,GAJIA,EAAKh0D,OACLg0D,EAAKh0D,KAAKxiC,KAAOw2F,EAAKx2F,MACtBw2F,EAAKx2F,OACLw2F,EAAKx2F,KAAKwiC,KAAOg0D,EAAKh0D,MACtBg0D,EAAK9iE,OAAQ,CACb,IAAImmE,EAASrD,EAAK9iE,OAAOsR,SACzB60D,EAAO55D,OAAO45D,EAAO+B,YAAYpF,GAAO,EAC5C,CACJ,CASA,SAASqH,EAAerH,EAAM3J,GAC1B,IAAIrqD,EAAQqqD,EAAYrqD,KAAOg0D,EAAKh0D,KAChCA,IACAA,EAAKxiC,KAAO6sF,GAEhB,IAAI7sF,EAAQ6sF,EAAY7sF,KAAOw2F,EAAKx2F,KAChCA,IACAA,EAAKwiC,KAAOqqD,GAEhB,IAAIn5D,EAAUm5D,EAAYn5D,OAAS8iE,EAAK9iE,OACxC,GAAIA,EAAQ,CACR,IAAImmE,EAASnmE,EAAOsR,SACpB60D,EAAOA,EAAO+B,YAAYpF,IAAS3J,EACnC2J,EAAK9iE,OAAS,IAClB,CACJ,CASA,SAASvwB,EAAYqzF,EAAMrsD,GAIvB,GAHAyzD,EAAczzD,GACdA,EAAMnqC,KAAO,KACbmqC,EAAMzW,OAAS8iE,EACXA,EAAKxxD,SAASjpC,KAAKouC,GAAS,EAAG,CAC/B,IAAI2zD,EAAUtH,EAAKxxD,SAASwxD,EAAKxxD,SAASnlD,OAAS,GACnDi+G,EAAQ99F,KAAOmqC,EACfA,EAAM3H,KAAOs7D,CACjB,MAEI3zD,EAAM3H,KAAO,IAErB,CASA,SAASksC,EAAO8nB,EAAMx2F,GAClB49F,EAAc59F,GACd,IAAI0zB,EAAS8iE,EAAK9iE,OACdqqE,EAAWvH,EAAKx2F,KAKpB,GAJAA,EAAKA,KAAO+9F,EACZ/9F,EAAKwiC,KAAOg0D,EACZA,EAAKx2F,KAAOA,EACZA,EAAK0zB,OAASA,EACVqqE,GAEA,GADAA,EAASv7D,KAAOxiC,EACZ0zB,EAAQ,CACR,IAAImmE,EAASnmE,EAAOsR,SACpB60D,EAAO55D,OAAO45D,EAAO+B,YAAYmC,GAAW,EAAG/9F,EACnD,OAEK0zB,GACLA,EAAOsR,SAASjpC,KAAKiE,EAE7B,CASA,SAASg+F,EAAaxH,EAAMrsD,GAIxB,GAHAyzD,EAAczzD,GACdA,EAAMzW,OAAS8iE,EACfrsD,EAAM3H,KAAO,KACwB,IAAjCg0D,EAAKxxD,SAASuJ,QAAQpE,GAAc,CACpC,IAAI2zD,EAAUtH,EAAKxxD,SAAS,GAC5B84D,EAAQt7D,KAAO2H,EACfA,EAAMnqC,KAAO89F,CACjB,MAEI3zD,EAAMnqC,KAAO,IAErB,CASA,SAASquC,EAAQmoD,EAAMh0D,GACnBo7D,EAAcp7D,GACd,IAAI9O,EAAS8iE,EAAK9iE,OAClB,GAAIA,EAAQ,CACR,IAAImmE,EAASnmE,EAAOsR,SACpB60D,EAAO55D,OAAO45D,EAAOt5G,QAAQi2G,GAAO,EAAGh0D,EAC3C,CACIg0D,EAAKh0D,OACLg0D,EAAKh0D,KAAKxiC,KAAOwiC,GAErBA,EAAK9O,OAASA,EACd8O,EAAKA,KAAOg0D,EAAKh0D,KACjBA,EAAKxiC,KAAOw2F,EACZA,EAAKh0D,KAAOA,CAChB,CArIAt9C,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQiqD,QAAUjqD,EAAQ45G,aAAe55G,EAAQsqF,OAAStqF,EAAQ+e,YAAc/e,EAAQy5G,eAAiBz5G,EAAQw5G,mBAAgB,EAiBjIx5G,EAAQw5G,cAAgBA,EAwBxBx5G,EAAQy5G,eAAiBA,EAqBzBz5G,EAAQ+e,YAAcA,EA2BtB/e,EAAQsqF,OAASA,EAqBjBtqF,EAAQ45G,aAAeA,EAuBvB55G,EAAQiqD,QAAUA,C,oCCtIlBnpD,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQ65G,QAAU75G,EAAQ85G,UAAY95G,EAAQu5G,QAAUv5G,EAAQ+5G,aAAe/5G,EAAQ6sB,KAAO7sB,EAAQoQ,YAAS,EAC/G,IAAIknG,EAAe,EAAQ,MAW3B,SAASlnG,EAAOzS,EAAM8kE,EAAMw0C,EAASqC,GAKjC,YAJgB,IAAZrC,IAAsBA,GAAU,QACtB,IAAVqC,IAAoBA,EAAQh9D,KAC3B93C,MAAMC,QAAQg+D,KACfA,EAAO,CAACA,IACL51C,EAAKlvB,EAAM8kE,EAAMw0C,EAASqC,EACrC,CAYA,SAASzsF,EAAKlvB,EAAMyzG,EAAO6F,EAASqC,GAEhC,IADA,IAAI94G,EAAS,GACJ64E,EAAK,EAAG2gC,EAAU5I,EAAO/3B,EAAK2gC,EAAQv+G,OAAQ49E,IAAM,CACzD,IAAI+4B,EAAO4H,EAAQ3gC,GACnB,GAAI17E,EAAKy0G,KACL5xG,EAAOmX,KAAKy6F,KACNkH,GAAS,GACX,MAER,GAAIrC,IAAW,EAAIK,EAAa9C,aAAapC,IAASA,EAAKxxD,SAASnlD,OAAS,EAAG,CAC5E,IAAImlD,EAAW/zB,EAAKlvB,EAAMy0G,EAAKxxD,SAAUq2D,EAASqC,GAGlD,GAFA94G,EAAOmX,KAAKo0B,MAAMvrC,EAAQogD,GAC1B04D,GAAS14D,EAASnlD,OACd69G,GAAS,EACT,KACR,CACJ,CACA,OAAO94G,CACX,CAWA,SAASu5G,EAAap8G,EAAMyzG,GACxB,OAAOA,EAAMvkF,KAAKlvB,EACtB,CAWA,SAAS47G,EAAQ57G,EAAMyzG,EAAO6F,QACV,IAAZA,IAAsBA,GAAU,GAEpC,IADA,IAAI7E,EAAO,KACF52G,EAAI,EAAGA,EAAI41G,EAAM31G,SAAW22G,EAAM52G,IAAK,CAC5C,IAAIg1E,EAAU4gC,EAAM51G,IACf,EAAI87G,EAAa9E,OAAOhiC,KAGpB7yE,EAAK6yE,GACV4hC,EAAO5hC,EAEFymC,GAAWzmC,EAAQ5vB,SAASnlD,OAAS,IAC1C22G,EAAOmH,EAAQ57G,EAAM6yE,EAAQ5vB,UAAU,IAE/C,CACA,OAAOwxD,CACX,CAQA,SAAS0H,EAAUn8G,EAAMyzG,GACrB,OAAOA,EAAM9gG,MAAK,SAAUkgE,GACxB,OAAO,EAAI8mC,EAAa9E,OAAOhiC,KAC1B7yE,EAAK6yE,IACDA,EAAQ5vB,SAASnlD,OAAS,GACvBq+G,EAAUn8G,EAAM6yE,EAAQ5vB,UACxC,GACJ,CAYA,SAASi5D,EAAQl8G,EAAMyzG,GACnB,IAAItsG,EAGAstG,EAFA5xG,EAAS,GACT8kG,EAAQ8L,EAAMhhG,OAAOknG,EAAa9E,OAEtC,MAAQJ,EAAO9M,EAAMlzB,QAAU,CAC3B,IAAIxxB,EAAoC,QAAxB97C,EAAKstG,EAAKxxD,gBAA6B,IAAP97C,OAAgB,EAASA,EAAGsL,OAAOknG,EAAa9E,OAC5F5xD,GAAYA,EAASnlD,OAAS,GAC9B6pG,EAAMn7C,QAAQpe,MAAMu5D,EAAO1kD,GAE3BjjD,EAAKy0G,IACL5xG,EAAOmX,KAAKy6F,EACpB,CACA,OAAO5xG,CACX,CA9GAR,EAAQoQ,OAASA,EA8BjBpQ,EAAQ6sB,KAAOA,EAaf7sB,EAAQ+5G,aAAeA,EA2BvB/5G,EAAQu5G,QAAUA,EAelBv5G,EAAQ85G,UAAYA,EA0BpB95G,EAAQ65G,QAAUA,C,oCCnIlB,IAAII,EAAmBx8G,MAAQA,KAAKw8G,iBAAoB,SAAU3J,GAC9D,OAAQA,GAAOA,EAAIH,WAAcG,EAAM,CAAE,QAAWA,EACxD,EACAxvG,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQke,UAAYle,EAAQooE,YAAcpoE,EAAQk6G,QAAUl6G,EAAQm6G,aAAen6G,EAAQo6G,kBAAe,EAC1G,IAAI9C,EAAe,EAAQ,MACvB+C,EAAmBJ,EAAgB,EAAQ,OAC3CtH,EAAmB,EAAQ,MAQ/B,SAASyH,EAAa33C,EAAMr+D,GACxB,OAAO,EAAIi2G,EAAiBx0D,SAAS4c,EAAMr+D,EAC/C,CASA,SAAS+1G,EAAa13C,EAAMr+D,GACxB,OAAO,EAAIkzG,EAAa9C,aAAa/xC,GAC/BA,EAAK7hB,SAAS/iD,KAAI,SAAU4kE,GAAQ,OAAO23C,EAAa33C,EAAMr+D,EAAU,IAAGgT,KAAK,IAChF,EACV,CAUA,SAAS8iG,EAAQz3C,GACb,OAAIj+D,MAAMC,QAAQg+D,GACPA,EAAK5kE,IAAIq8G,GAAS9iG,KAAK,KAC9B,EAAIkgG,EAAa9E,OAAO/vC,GACH,OAAdA,EAAK9/D,KAAgB,KAAOu3G,EAAQz3C,EAAK7hB,WAChD,EAAI02D,EAAazC,SAASpyC,GACnBy3C,EAAQz3C,EAAK7hB,WACpB,EAAI02D,EAAa1C,QAAQnyC,GAClBA,EAAK15C,KACT,EACX,CAUA,SAASq/C,EAAY3F,GACjB,OAAIj+D,MAAMC,QAAQg+D,GACPA,EAAK5kE,IAAIuqE,GAAahxD,KAAK,KAClC,EAAIkgG,EAAa9C,aAAa/xC,MAAU,EAAI60C,EAAa3C,WAAWlyC,GAC7D2F,EAAY3F,EAAK7hB,WAExB,EAAI02D,EAAa1C,QAAQnyC,GAClBA,EAAK15C,KACT,EACX,CAUA,SAAS7K,EAAUukD,GACf,OAAIj+D,MAAMC,QAAQg+D,GACPA,EAAK5kE,IAAIqgB,GAAW9G,KAAK,KAChC,EAAIkgG,EAAa9C,aAAa/xC,KAAUA,EAAKhvD,OAASk/F,EAAiBpC,YAAYwB,MAAO,EAAIuF,EAAazC,SAASpyC,IAC7GvkD,EAAUukD,EAAK7hB,WAEtB,EAAI02D,EAAa1C,QAAQnyC,GAClBA,EAAK15C,KACT,EACX,CAtEA/oB,EAAQo6G,aAAeA,EAavBp6G,EAAQm6G,aAAeA,EAoBvBn6G,EAAQk6G,QAAUA,EAmBlBl6G,EAAQooE,YAAcA,EAmBtBpoE,EAAQke,UAAYA,C,oCCzFpBpd,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQs6G,mBAAqBt6G,EAAQu6G,mBAAqBv6G,EAAQw6G,QAAUx6G,EAAQy6G,UAAYz6G,EAAQ06G,kBAAoB16G,EAAQ26G,YAAc36G,EAAQ46G,UAAY56G,EAAQ66G,iBAAc,EAC5L,IAAIvD,EAAe,EAAQ,MAQ3B,SAASuD,EAAYzI,GACjB,OAAO,EAAIkF,EAAa9C,aAAapC,GAAQA,EAAKxxD,SAAW,EACjE,CASA,SAASg6D,EAAUxI,GACf,OAAOA,EAAK9iE,QAAU,IAC1B,CAaA,SAASqrE,EAAYvI,GACjB,IAAIttG,EAAIgO,EACJw8B,EAASsrE,EAAUxI,GACvB,GAAc,MAAV9iE,EACA,OAAOurE,EAAYvrE,GACvB,IAAI2oE,EAAW,CAAC7F,GACZh0D,EAAOg0D,EAAKh0D,KAAMxiC,EAAOw2F,EAAKx2F,KAClC,MAAe,MAARwiC,EACH65D,EAAS9tD,QAAQ/L,GAChBt5C,EAAKs5C,EAAMA,EAAOt5C,EAAGs5C,KAE1B,MAAe,MAARxiC,EACHq8F,EAAStgG,KAAKiE,GACb9I,EAAK8I,EAAMA,EAAO9I,EAAG8I,KAE1B,OAAOq8F,CACX,CAUA,SAASyC,EAAkBtI,EAAMzvG,GAC7B,IAAImC,EACJ,OAA+B,QAAvBA,EAAKstG,EAAKC,eAA4B,IAAPvtG,OAAgB,EAASA,EAAGnC,EACvE,CAUA,SAAS83G,EAAUrI,EAAMzvG,GACrB,OAAwB,MAAhByvG,EAAKC,SACTvxG,OAAOC,UAAUC,eAAetD,KAAK00G,EAAKC,QAAS1vG,IAC7B,MAAtByvG,EAAKC,QAAQ1vG,EACrB,CASA,SAAS63G,EAAQpI,GACb,OAAOA,EAAKzvG,IAChB,CASA,SAAS43G,EAAmBnI,GACxB,IAAIttG,EACA8W,EAAOw2F,EAAKx2F,KAChB,MAAgB,OAATA,KAAkB,EAAI07F,EAAa9E,OAAO52F,GAC5C9W,EAAK8W,EAAMA,EAAO9W,EAAG8W,KAC1B,OAAOA,CACX,CASA,SAAS0+F,EAAmBlI,GACxB,IAAIttG,EACAs5C,EAAOg0D,EAAKh0D,KAChB,MAAgB,OAATA,KAAkB,EAAIk5D,EAAa9E,OAAOp0D,GAC5Ct5C,EAAKs5C,EAAMA,EAAOt5C,EAAGs5C,KAC1B,OAAOA,CACX,CA3GAp+C,EAAQ66G,YAAcA,EAWtB76G,EAAQ46G,UAAYA,EA6BpB56G,EAAQ26G,YAAcA,EAatB36G,EAAQ06G,kBAAoBA,EAc5B16G,EAAQy6G,UAAYA,EAWpBz6G,EAAQw6G,QAAUA,EAelBx6G,EAAQu6G,mBAAqBA,EAe7Bv6G,EAAQs6G,mBAAqBA,C,oCCzH7B,IAAIL,EAAmBx8G,MAAQA,KAAKw8G,iBAAoB,SAAU3J,GAC9D,OAAQA,GAAOA,EAAIH,WAAcG,EAAM,CAAE,QAAWA,EACxD,EACAxvG,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQ86G,UAAY96G,EAAQ+6G,iBAAmB/6G,EAAQg7G,WAAah7G,EAAQi7G,gBAAkBj7G,EAAQk7G,aAAel7G,EAAQm7G,cAAgBn7G,EAAQo7G,iBAAmBp7G,EAAQq7G,gBAAkBr7G,EAAQs7G,cAAgBt7G,EAAQu7G,oBAAiB,EACnP,IAAIC,EAAwBvB,EAAgB,EAAQ,OACpDj6G,EAAQu7G,eAAiBC,EAAsB31D,QAC/C,IAAI41D,EAAuBxB,EAAgB,EAAQ,OACnDj6G,EAAQs7G,cAAgBG,EAAqB51D,QAC7C,IAAI61D,EAAwBzB,EAAgB,EAAQ,KACpDj6G,EAAQq7G,gBAAkBK,EAAsB71D,QAChD,IAGI81D,EAYAT,EAfAU,EAAwB,EAAQ,IAqBpC,SAASC,EAAWC,GAChB,OAAO,SAA0B1/G,EAAK2/G,GAClC,IAAIpzD,EAAM,GACNqzD,EAAU,EACVC,EAAS,EACb,OAAQA,EAAS7/G,EAAID,QAAQ,IAAK8/G,KAAY,EAM1C,GALAtzD,GAAOvsD,EAAIyG,MAAMm5G,EAASC,GAC1BD,EAAUC,EAEVA,GAAU,EAEN7/G,EAAI+lC,WAAW85E,KAAYN,EAAUO,IAAzC,CAkCA,IAJA,IAAIC,EAAY,EACZC,EAAS,EACTC,EAAU,EACV7yD,EAAUsyD,EAAWO,GAClBJ,EAAS7/G,EAAIX,OAAQwgH,IAAUG,IAAU,CAE5C,GADAC,EAAUpB,EAAgBa,EAAYtyD,EAAS6yD,EAAU,EAAGjgH,EAAI+lC,WAAW85E,IACvEI,EAAU,EACV,MACJ7yD,EAAUsyD,EAAWO,GACrB,IAAIC,EAAS9yD,EAAU0xD,EAAaqB,aAEpC,GAAID,EAAQ,CAEHP,GAAU3/G,EAAI+lC,WAAW85E,KAAYN,EAAUa,OAChDL,EAAYE,EACZD,EAAS,GAGb,IAAIK,GAAeH,GAAU,IAAM,EACnC,GAAoB,IAAhBG,EACA,MACJJ,GAAWI,CACf,CACJ,CACA,GAAkB,IAAdN,EAAiB,CACbM,GAAeX,EAAWK,GAAajB,EAAaqB,eAAiB,GACzE5zD,GACoB,IAAhB8zD,EACMj6E,OAAOC,aAAaq5E,EAAWK,IAAcjB,EAAaqB,cAC1C,IAAhBE,EACIj6E,OAAOC,aAAaq5E,EAAWK,EAAY,IAC3C35E,OAAOC,aAAaq5E,EAAWK,EAAY,GAAIL,EAAWK,EAAY,IACpFH,EAAUC,EAASG,EAAS,CAChC,CAlCA,KA7BA,CAEI,IAAIxtF,EAAQqtF,EAAS,EACjBtyG,EAAO,GACP+yG,EAAKtgH,EAAI+lC,WAAWvT,IACnB8tF,EAAKf,EAAUgB,gBAAkBhB,EAAUiB,UAC5CjzG,EAAO,GACPsyG,GAAU,EACVrtF,GAAS,GAEb,GACI8tF,EAAKtgH,EAAI+lC,aAAa85E,SAClBS,GAAMf,EAAUkB,MAAQH,GAAMf,EAAUmB,MAClC,KAATnzG,IACI+yG,EAAKf,EAAUgB,eAAiBhB,EAAUoB,UAC1CL,EAAKf,EAAUgB,eAAiBhB,EAAUqB,SACnD,GAAIpuF,IAAUqtF,EAAQ,CAClB,IAAIgB,EAAS7gH,EAAIQ,UAAUgyB,EAAOqtF,GAC9B31F,EAASqwD,SAASsmC,EAAQtzG,GAC9B,GAAIvN,EAAI+lC,WAAW85E,KAAYN,EAAUa,KACrCP,GAAU,OAET,GAAIF,EACL,SAEJpzD,IAAO,EAAI+yD,EAAsB71D,SAASv/B,GAC1C01F,EAAUC,CACd,CAEJ,CAoCJ,OAAOtzD,EAAMvsD,EAAIyG,MAAMm5G,EAC3B,CACJ,CACA,SAASf,EAAgBa,EAAYtyD,EAAS0zD,EAASC,GACnD,IAAIC,GAAe5zD,EAAU0xD,EAAamC,gBAAkB,EACxDC,EAAa9zD,EAAU0xD,EAAaqC,WAExC,GAAoB,IAAhBH,EACA,OAAsB,IAAfE,GAAoBH,IAASG,EAAaJ,GAAW,EAGhE,GAAII,EAAY,CACZ,IAAI3pG,EAAQwpG,EAAOG,EACnB,OAAO3pG,EAAQ,GAAKA,GAASypG,GACtB,EACDtB,EAAWoB,EAAUvpG,GAAS,CACxC,CAGA,IAAI6pG,EAAKN,EACLO,EAAKD,EAAKJ,EAAc,EAC5B,MAAOI,GAAMC,EAAI,CACb,IAAIC,EAAOF,EAAKC,IAAQ,EACpBE,EAAS7B,EAAW4B,GACxB,GAAIC,EAASR,EACTK,EAAKE,EAAM,MAEV,MAAIC,EAASR,GAId,OAAOrB,EAAW4B,EAAMN,GAHxBK,EAAKC,EAAM,CAIf,CACJ,CACA,OAAQ,CACZ,CAnIA58G,OAAOsuD,eAAepvD,EAAS,mBAAoB,CAAEixD,YAAY,EAAM3wD,IAAK,WAAc,OAAOs7G,EAAsBR,gBAAkB,IACzIt6G,OAAOsuD,eAAepvD,EAAS,gBAAiB,CAAEixD,YAAY,EAAM3wD,IAAK,WAAc,OAAOs7G,EAAsBT,aAAe,IAEnI,SAAWQ,GACPA,EAAUA,EAAU,OAAS,IAAM,MACnCA,EAAUA,EAAU,QAAU,IAAM,OACpCA,EAAUA,EAAU,QAAU,IAAM,OACpCA,EAAUA,EAAU,QAAU,IAAM,OACpCA,EAAUA,EAAU,WAAa,IAAM,UACvCA,EAAUA,EAAU,WAAa,KAAO,UACxCA,EAAUA,EAAU,WAAa,KAAO,UAExCA,EAAUA,EAAU,gBAAkB,IAAM,cAC/C,CAVD,CAUGA,IAAcA,EAAY,CAAC,IAE9B,SAAWT,GACPA,EAAaA,EAAa,gBAAkB,OAAS,eACrDA,EAAaA,EAAa,iBAAmB,OAAS,gBACtDA,EAAaA,EAAa,cAAgB,KAAO,YACpD,CAJD,CAIGA,EAAel7G,EAAQk7G,eAAiBl7G,EAAQk7G,aAAe,CAAC,IAiHnEl7G,EAAQi7G,gBAAkBA,EAC1B,IAAI2C,EAAc/B,EAAWL,EAAsB31D,SAC/Cg4D,EAAahC,EAAWJ,EAAqB51D,SAOjD,SAASm1D,EAAW5+G,GAChB,OAAOwhH,EAAYxhH,GAAK,EAC5B,CAQA,SAAS2+G,EAAiB3+G,GACtB,OAAOwhH,EAAYxhH,GAAK,EAC5B,CAQA,SAAS0+G,EAAU1+G,GACf,OAAOyhH,EAAWzhH,GAAK,EAC3B,CAnBA4D,EAAQg7G,WAAaA,EAUrBh7G,EAAQ+6G,iBAAmBA,EAU3B/6G,EAAQ86G,UAAYA,C,gCC/KpB,IAAIh2G,EACJhE,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQo7G,iBAAmBp7G,EAAQm7G,mBAAgB,EACnD,IAAI2C,EAAY,IAAIx6G,IAAI,CACpB,CAAC,EAAG,OACJ,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,KACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,KACN,CAAC,IAAK,MACN,CAAC,IAAK,KACN,CAAC,IAAK,MACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,KACN,CAAC,IAAK,MACN,CAAC,IAAK,KACN,CAAC,IAAK,MACN,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,OAcV,SAAS83G,EAAiB2C,GACtB,IAAIj5G,EACJ,OAAKi5G,GAAa,OAAUA,GAAa,OAAWA,EAAY,QACrD,MAEgC,QAAnCj5G,EAAKg5G,EAAUx9G,IAAIy9G,UAA+B,IAAPj5G,EAAgBA,EAAKi5G,CAC5E,CAEA,SAAS1C,EAAgB0C,GACrB,OAAO,EAAI/9G,EAAQm7G,eAAeC,EAAiB2C,GACvD,CAtBA/9G,EAAQm7G,cAEwB,QAA/Br2G,EAAK09B,OAAO24E,qBAAkC,IAAPr2G,EAAgBA,EAAK,SAAUi5G,GACnE,IAAIl6E,EAAS,GAOb,OANIk6E,EAAY,QACZA,GAAa,MACbl6E,GAAUrB,OAAOC,aAAes7E,IAAc,GAAM,KAAS,OAC7DA,EAAY,MAAsB,KAAZA,GAE1Bl6E,GAAUrB,OAAOC,aAAas7E,GACvBl6E,CACX,EAQA7jC,EAAQo7G,iBAAmBA,EAI3Bp7G,EAAA,WAAkBq7G,C,oCCzDlB,IAAIpB,EAAmBx8G,MAAQA,KAAKw8G,iBAAoB,SAAU3J,GAC9D,OAAQA,GAAOA,EAAIH,WAAcG,EAAM,CAAE,QAAWA,EACxD,EACAxvG,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQg+G,mBAAqBh+G,EAAQi+G,gBAAa,EAClD,IAAIC,EAAmBjE,EAAgB,EAAQ,OAC3CkE,EAAc,EAAQ,MACtBC,EAAe,sCAYnB,SAASH,EAAWl1F,GAChB,OAAOs1F,EAAiBD,EAAcr1F,EAC1C,CAUA,SAASi1F,EAAmBj1F,GACxB,OAAOs1F,EAAiBF,EAAYG,YAAav1F,EACrD,CAEA,SAASs1F,EAAiBE,EAAQniH,GAC9B,IAEIiB,EAFAsrD,EAAM,GACNqzD,EAAU,EAEd,MAAsC,QAA9B3+G,EAAQkhH,EAAO/gH,KAAKpB,IAAgB,CACxC,IAAIZ,EAAI6B,EAAMua,MACd+wC,GAAOvsD,EAAIQ,UAAUo/G,EAASxgH,GAC9B,IAAI2hH,EAAO/gH,EAAI+lC,WAAW3mC,GACtBogB,EAAOsiG,EAAiBr4D,QAAQvlD,IAAI68G,GACxC,GAAoB,kBAATvhG,EAAmB,CAE1B,GAAIpgB,EAAI,EAAIY,EAAIX,OAAQ,CACpB,IAAI+iH,EAAWpiH,EAAI+lC,WAAW3mC,EAAI,GAC9BmY,EAA0B,kBAAXiI,EAAKrL,EAClBqL,EAAKrL,IAAMiuG,EACP5iG,EAAKvL,OACL1X,EACJijB,EAAKrL,EAAEjQ,IAAIk+G,GACjB,QAAc7lH,IAAVgb,EAAqB,CACrBg1C,GAAOh1C,EACPqoG,EAAUuC,EAAOE,WAAa,EAC9B,QACJ,CACJ,CACA7iG,EAAOA,EAAKwd,CAChB,CAEA,QAAazgC,IAATijB,EACA+sC,GAAO/sC,EACPogG,EAAUxgH,EAAI,MAEb,CACD,IAAIkhH,GAAK,EAAIyB,EAAYO,cAActiH,EAAKZ,GAC5CmtD,GAAO,MAAMjtD,OAAOghH,EAAGjwG,SAAS,IAAK,KAErCuvG,EAAUuC,EAAOE,WAAa5zG,OAAO6xG,IAAOS,EAChD,CACJ,CACA,OAAOx0D,EAAMvsD,EAAImhB,OAAOy+F,EAC5B,CApDAh8G,EAAQi+G,WAAaA,EAYrBj+G,EAAQg+G,mBAAqBA,C,kCClC7Bl9G,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAQuyG,WAAavyG,EAAQixG,gBAAkBjxG,EAAQ2+G,WAAa3+G,EAAQkhF,OAASlhF,EAAQgxG,UAAYhxG,EAAQ0+G,aAAe1+G,EAAQs+G,iBAAc,EACtJt+G,EAAQs+G,YAAc,uBACtB,IAAIM,EAAa,IAAIt7G,IAAI,CACrB,CAAC,GAAI,UACL,CAAC,GAAI,SACL,CAAC,GAAI,UACL,CAAC,GAAI,QACL,CAAC,GAAI,UAuBT,SAAS0tG,EAAU50G,GACf,IAEIiB,EAFAsrD,EAAM,GACNqzD,EAAU,EAEd,MAAmD,QAA3C3+G,EAAQ2C,EAAQs+G,YAAY9gH,KAAKpB,IAAgB,CACrD,IAAIZ,EAAI6B,EAAMua,MACVulG,EAAO/gH,EAAI+lC,WAAW3mC,GACtBogB,EAAOgjG,EAAWt+G,IAAI68G,QACbxkH,IAATijB,GACA+sC,GAAOvsD,EAAIQ,UAAUo/G,EAASxgH,GAAKogB,EACnCogG,EAAUxgH,EAAI,IAGdmtD,GAAO,GAAGjtD,OAAOU,EAAIQ,UAAUo/G,EAASxgH,GAAI,OAAOE,QAAO,EAAIsE,EAAQ0+G,cAActiH,EAAKZ,GAAGiR,SAAS,IAAK,KAE1GuvG,EAAUh8G,EAAQs+G,YAAYG,WAAa5zG,OAA2B,SAAZ,MAAPsyG,IAE3D,CACA,OAAOx0D,EAAMvsD,EAAImhB,OAAOy+F,EAC5B,CAYA,SAAS6C,EAAWvhH,EAAOO,GACvB,OAAO,SAAgBkrB,GACnB,IAAI1rB,EACA2+G,EAAU,EACVx7G,EAAS,GACb,MAAQnD,EAAQC,EAAME,KAAKurB,GACnBizF,IAAY3+G,EAAMua,QAClBpX,GAAUuoB,EAAKnsB,UAAUo/G,EAAS3+G,EAAMua,QAG5CpX,GAAU3C,EAAIyC,IAAIjD,EAAM,GAAG8kC,WAAW,IAEtC65E,EAAU3+G,EAAMua,MAAQ,EAE5B,OAAOpX,EAASuoB,EAAKnsB,UAAUo/G,EACnC,CACJ,CAnEAh8G,EAAQ0+G,aAEwB,MAAhCl8E,OAAOzhC,UAAU+9G,YACX,SAAU1iH,EAAKwb,GAAS,OAAOxb,EAAI0iH,YAAYlnG,EAAQ,EAErD,SAAUsqB,EAAGtqB,GACT,OAA0C,SAAZ,MAAtBsqB,EAAEC,WAAWvqB,IACkB,MAAhCsqB,EAAEC,WAAWvqB,GAAS,OACrBsqB,EAAEC,WAAWvqB,EAAQ,GACrB,MACA,MACFsqB,EAAEC,WAAWvqB,EACvB,EA4BR5X,EAAQgxG,UAAYA,EAUpBhxG,EAAQkhF,OAAS8vB,EAyBjBhxG,EAAQ2+G,WAAaE,EAAW,WAAYD,GAO5C5+G,EAAQixG,gBAAkB4N,EAAW,cAAe,IAAIv7G,IAAI,CACxD,CAAC,GAAI,UACL,CAAC,GAAI,SACL,CAAC,IAAK,aAQVtD,EAAQuyG,WAAasM,EAAW,eAAgB,IAAIv7G,IAAI,CACpD,CAAC,GAAI,SACL,CAAC,GAAI,QACL,CAAC,GAAI,QACL,CAAC,IAAK,Y,kCC3GVxC,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAA,WAAkB,IAAI++G,YAEtB,2keACKtiH,MAAM,IACNoB,KAAI,SAAUqkC,GAAK,OAAOA,EAAEC,WAAW,EAAI,I,kCCLhDrhC,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IACtD3T,EAAA,WAAkB,IAAI++G,YAEtB,sCACKtiH,MAAM,IACNoB,KAAI,SAAUqkC,GAAK,OAAOA,EAAEC,WAAW,EAAI,I,kCCJhD,SAAS68E,EAAYpjH,GACjB,IAAK,IAAIJ,EAAI,EAAGA,EAAII,EAAIH,OAAQD,IAC5BI,EAAIJ,GAAG,IAAMI,EAAIJ,EAAI,GAAG,GAAK,EAEjC,OAAOI,CACX,CANAkF,OAAOsuD,eAAepvD,EAAS,aAAc,CAAE2T,OAAO,IAQtD3T,EAAA,WAAkB,IAAIsD,IAAoB07G,EAAY,CAAC,CAAC,EAAG,SAAU,CAAC,EAAG,aAAc,CAAC,GAAI,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,SAAU,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,SAAU,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,SAAU,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,SAAU,CAAC,GAAI,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,CAAE5lF,EAAG,OAAQ7oB,EAAG,KAAMF,EAAG,WAAa,CAAC,EAAG,CAAE+oB,EAAG,WAAY7oB,EAAG,KAAMF,EAAG,UAAY,CAAC,EAAG,CAAE+oB,EAAG,OAAQ7oB,EAAG,KAAMF,EAAG,WAAa,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,GAAI,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,SAAU,CAAC,EAAG,YAAa,CAAC,EAAG,sBAAuB,CAAC,EAAG,CAAEE,EAAG,IAAKF,EAAG,YAAc,CAAC,GAAI,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,GAAI,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,SAAU,CAAC,EAAG,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,SAAU,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,cAAe,CAAC,EAAG,UAAW,CAAC,EAAG,SAAU,CAAC,EAAG,eAAgB,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,eAAgB,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,SAAU,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,SAAU,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,SAAU,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,UAAW,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,EAAG,WAAY,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,YAAa,CAAC,EAAG,WAAY,CAAC,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G,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,GAAI,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,SAAU,CAAC,EAAG,UAAW,CAAC,EAAG,UAAW,CAAC,EAA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","sources":["webpack://boost-seller/./node_modules/@amplitude/ua-parser-js/src/ua-parser.js","webpack://boost-seller/./node_modules/tslib/tslib.es6.js","webpack://boost-seller/./node_modules/@firebase/auth/dist/esm2017/index-c6def6da.js","webpack://boost-seller/./node_modules/@firebase/util/dist/index.esm2017.js","webpack://boost-seller/./node_modules/@stripe/stripe-js/dist/stripe.esm.js","webpack://boost-seller/./node_modules/@vee-validate/rules/dist/vee-validate-rules.esm.js","webpack://boost-seller/./node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","webpack://boost-seller/./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js","webpack://boost-seller/./node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js","webpack://boost-seller/./node_modules/@vue/shared/dist/shared.esm-bundler.js","webpack://boost-seller/./node_modules/@amplitude/utils/esm/src/misc.js","webpack://boost-seller/./node_modules/@amplitude/analytics-connector/dist/analytics-connector.esm.js","webpack://boost-seller/./node_modules/amplitude-js/amplitude.esm.js","webpack://boost-seller/./node_modules/blueimp-md5/js/md5.js","webpack://boost-seller/./node_modules/core-js/internals/a-callable.js","webpack://boost-seller/./node_modules/core-js/internals/a-possible-prototype.js","webpack://boost-seller/./node_modules/core-js/internals/an-instance.js","webpack://boost-seller/./node_modules/core-js/internals/an-object.js","webpack://boost-seller/./node_modules/core-js/internals/array-includes.js","webpack://boost-seller/./node_modules/core-js/internals/array-set-length.js","webpack://boost-seller/./node_modules/core-js/internals/classof-raw.js","webpack://boost-seller/./node_modules/core-js/internals/classof.js","webpack://boost-seller/./node_modules/core-js/internals/copy-constructor-properties.js","webpack://boost-seller/./node_modules/core-js/internals/create-non-enumerable-property.js","webpack://boost-seller/./node_modules/core-js/internals/create-property-descriptor.js","webpack://boost-seller/./node_modules/core-js/internals/define-built-in.js","webpack://boost-seller/./node_modules/core-js/internals/define-global-property.js","webpack://boost-seller/./node_modules/core-js/internals/descriptors.js","webpack://boost-seller/./node_modules/core-js/internals/document-all.js","webpack://boost-seller/./node_modules/core-js/internals/document-create-element.js","webpack://boost-seller/./node_modules/core-js/internals/does-not-exceed-safe-integer.js","webpack://boost-seller/./node_modules/core-js/internals/dom-exception-constants.js","webpack://boost-seller/./node_modules/core-js/internals/engine-user-agent.js","webpack://boost-seller/./node_modules/core-js/internals/engine-v8-version.js","webpack://boost-seller/./node_modules/core-js/internals/enum-bug-keys.js","webpack://boost-seller/./node_modules/core-js/internals/error-stack-clear.js","webpack://boost-seller/./node_modules/core-js/internals/export.js","webpack://boost-seller/./node_modules/core-js/internals/fails.js","webpack://boost-seller/./node_modules/core-js/internals/function-bind-native.js","webpack://boost-seller/./node_modules/core-js/internals/function-call.js","webpack://boost-seller/./node_modules/core-js/internals/function-name.js","webpack://boost-seller/./node_modules/core-js/internals/function-uncurry-this.js","webpack://boost-seller/./node_modules/core-js/internals/get-built-in.js","webpack://boost-seller/./node_modules/core-js/internals/get-method.js","webpack://boost-seller/./node_modules/core-js/internals/global.js","webpack://boost-seller/./node_modules/core-js/internals/has-own-property.js","webpack://boost-seller/./node_modules/core-js/internals/hidden-keys.js","webpack://boost-seller/./node_modules/core-js/internals/ie8-dom-define.js","webpack://boost-seller/./node_modules/core-js/internals/indexed-object.js","webpack://boost-seller/./node_modules/core-js/internals/inherit-if-required.js","webpack://boost-seller/./node_modules/core-js/internals/inspect-source.js","webpack://boost-seller/./node_modules/core-js/internals/internal-state.js","webpack://boost-seller/./node_modules/core-js/internals/is-array.js","webpack://boost-seller/./node_modules/core-js/internals/is-callable.js","webpack://boost-seller/./node_modules/core-js/internals/is-forced.js","webpack://boost-seller/./node_modules/core-js/internals/is-null-or-undefined.js","webpack://boost-seller/./node_modules/core-js/internals/is-object.js","webpack://boost-seller/./node_modules/core-js/internals/is-pure.js","webpack://boost-seller/./node_modules/core-js/internals/is-symbol.js","webpack://boost-seller/./node_modules/core-js/internals/length-of-array-like.js","webpack://boost-seller/./node_modules/core-js/internals/make-built-in.js","webpack://boost-seller/./node_modules/core-js/internals/math-trunc.js","webpack://boost-seller/./node_modules/core-js/internals/normalize-string-argument.js","webpack://boost-seller/./node_modules/core-js/internals/object-define-property.js","webpack://boost-seller/./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://boost-seller/./node_modules/core-js/internals/object-get-own-property-names.js","webpack://boost-seller/./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://boost-seller/./node_modules/core-js/internals/object-is-prototype-of.js","webpack://boost-seller/./node_modules/core-js/internals/object-keys-internal.js","webpack://boost-seller/./node_modules/core-js/internals/object-property-is-enumerable.js","webpack://boost-seller/./node_modules/core-js/internals/object-set-prototype-of.js","webpack://boost-seller/./node_modules/core-js/internals/ordinary-to-primitive.js","webpack://boost-seller/./node_modules/core-js/internals/own-keys.js","webpack://boost-seller/./node_modules/core-js/internals/require-object-coercible.js","webpack://boost-seller/./node_modules/core-js/internals/shared-key.js","webpack://boost-seller/./node_modules/core-js/internals/shared-store.js","webpack://boost-seller/./node_modules/core-js/internals/shared.js","webpack://boost-seller/./node_modules/core-js/internals/symbol-constructor-detection.js","webpack://boost-seller/./node_modules/core-js/internals/to-absolute-index.js","webpack://boost-seller/./node_modules/core-js/internals/to-indexed-object.js","webpack://boost-seller/./node_modules/core-js/internals/to-integer-or-infinity.js","webpack://boost-seller/./node_modules/core-js/internals/to-length.js","webpack://boost-seller/./node_modules/core-js/internals/to-object.js","webpack://boost-seller/./node_modules/core-js/internals/to-primitive.js","webpack://boost-seller/./node_modules/core-js/internals/to-property-key.js","webpack://boost-seller/./node_modules/core-js/internals/to-string-tag-support.js","webpack://boost-seller/./node_modules/core-js/internals/to-string.js","webpack://boost-seller/./node_modules/core-js/internals/try-to-string.js","webpack://boost-seller/./node_modules/core-js/internals/uid.js","webpack://boost-seller/./node_modules/core-js/internals/use-symbol-as-uid.js","webpack://boost-seller/./node_modules/core-js/internals/v8-prototype-define-bug.js","webpack://boost-seller/./node_modules/core-js/internals/weak-map-basic-detection.js","webpack://boost-seller/./node_modules/core-js/internals/well-known-symbol.js","webpack://boost-seller/./node_modules/core-js/modules/es.array.push.js","webpack://boost-seller/./node_modules/core-js/modules/web.dom-exception.stack.js","webpack://boost-seller/./node_modules/decode-uri-component/index.js","webpack://boost-seller/./node_modules/deepmerge/dist/cjs.js","webpack://boost-seller/./node_modules/dom-serializer/lib/foreignNames.js","webpack://boost-seller/./node_modules/dom-serializer/lib/index.js","webpack://boost-seller/./node_modules/domelementtype/lib/index.js","webpack://boost-seller/./node_modules/domhandler/lib/index.js","webpack://boost-seller/./node_modules/domhandler/lib/node.js","webpack://boost-seller/./node_modules/domutils/lib/feeds.js","webpack://boost-seller/./node_modules/domutils/lib/helpers.js","webpack://boost-seller/./node_modules/domutils/lib/index.js","webpack://boost-seller/./node_modules/domutils/lib/legacy.js","webpack://boost-seller/./node_modules/domutils/lib/manipulation.js","webpack://boost-seller/./node_modules/domutils/lib/querying.js","webpack://boost-seller/./node_modules/domutils/lib/stringify.js","webpack://boost-seller/./node_modules/domutils/lib/traversal.js","webpack://boost-seller/./node_modules/entities/lib/decode.js","webpack://boost-seller/./node_modules/entities/lib/decode_codepoint.js","webpack://boost-seller/./node_modules/entities/lib/encode.js","webpack://boost-seller/./node_modules/entities/lib/escape.js","webpack://boost-seller/./node_modules/entities/lib/generated/decode-data-html.js","webpack://boost-seller/./node_modules/entities/lib/generated/decode-data-xml.js","webpack://boost-seller/./node_modules/entities/lib/generated/encode-html.js","webpack://boost-seller/./node_modules/entities/lib/index.js","webpack://boost-seller/./node_modules/escape-string-regexp/index.js","webpack://boost-seller/./node_modules/htmlparser2/lib/Parser.js","webpack://boost-seller/./node_modules/htmlparser2/lib/Tokenizer.js","webpack://boost-seller/./node_modules/htmlparser2/lib/index.js","webpack://boost-seller/./node_modules/is-plain-object/dist/is-plain-object.js","webpack://boost-seller/./node_modules/object-assign/index.js","webpack://boost-seller/./node_modules/parse-srcset/src/parse-srcset.js","webpack://boost-seller/./node_modules/picocolors/picocolors.browser.js","webpack://boost-seller/./node_modules/postcss/lib/at-rule.js","webpack://boost-seller/./node_modules/postcss/lib/comment.js","webpack://boost-seller/./node_modules/postcss/lib/container.js","webpack://boost-seller/./node_modules/postcss/lib/css-syntax-error.js","webpack://boost-seller/./node_modules/postcss/lib/declaration.js","webpack://boost-seller/./node_modules/postcss/lib/document.js","webpack://boost-seller/./node_modules/postcss/lib/fromJSON.js","webpack://boost-seller/./node_modules/postcss/lib/input.js","webpack://boost-seller/./node_modules/postcss/lib/lazy-result.js","webpack://boost-seller/./node_modules/postcss/lib/list.js","webpack://boost-seller/./node_modules/postcss/lib/map-generator.js","webpack://boost-seller/./node_modules/postcss/lib/no-work-result.js","webpack://boost-seller/./node_modules/postcss/lib/node.js","webpack://boost-seller/./node_modules/postcss/lib/parse.js","webpack://boost-seller/./node_modules/postcss/lib/parser.js","webpack://boost-seller/./node_modules/postcss/lib/postcss.js","webpack://boost-seller/./node_modules/postcss/lib/previous-map.js","webpack://boost-seller/./node_modules/postcss/lib/processor.js","webpack://boost-seller/./node_modules/postcss/lib/result.js","webpack://boost-seller/./node_modules/postcss/lib/root.js","webpack://boost-seller/./node_modules/postcss/lib/rule.js","webpack://boost-seller/./node_modules/postcss/lib/stringifier.js","webpack://boost-seller/./node_modules/postcss/lib/stringify.js","webpack://boost-seller/./node_modules/postcss/lib/symbols.js","webpack://boost-seller/./node_modules/postcss/lib/tokenize.js","webpack://boost-seller/./node_modules/postcss/lib/warn-once.js","webpack://boost-seller/./node_modules/postcss/lib/warning.js","webpack://boost-seller/./node_modules/query-string/index.js","webpack://boost-seller/./node_modules/sanitize-html/index.js","webpack://boost-seller/./node_modules/strict-uri-encode/index.js","webpack://boost-seller/./node_modules/vee-validate/dist/vee-validate.esm.js","webpack://boost-seller/./node_modules/vue-loader/dist/exportHelper.js","webpack://boost-seller/./node_modules/vuex-router-sync/index.js","webpack://boost-seller/./node_modules/@vue/devtools-api/lib/esm/env.js","webpack://boost-seller/./node_modules/@vue/devtools-api/lib/esm/const.js","webpack://boost-seller/./node_modules/@vue/devtools-api/lib/esm/time.js","webpack://boost-seller/./node_modules/@vue/devtools-api/lib/esm/proxy.js","webpack://boost-seller/./node_modules/@vue/devtools-api/lib/esm/index.js","webpack://boost-seller/./node_modules/vuex/dist/vuex.esm-bundler.js","webpack://boost-seller/./node_modules/nanoid/non-secure/index.cjs","webpack://boost-seller/./node_modules/idb/build/wrap-idb-value.js","webpack://boost-seller/./node_modules/idb/build/index.js","webpack://boost-seller/./node_modules/@firebase/app/dist/esm/index.esm2017.js","webpack://boost-seller/./node_modules/@firebase/component/dist/esm/index.esm2017.js","webpack://boost-seller/./node_modules/@firebase/logger/dist/esm/index.esm2017.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/calculate-active-index.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-tree-walker.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-tracked-pointer.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/components/combobox/combobox.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/components/description/description.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-tab-direction.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-event-listener.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/document-ready.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/components/focus-trap/focus-trap.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-inert.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/internal/portal-force-root.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/components/portal/portal.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/internal/stack-context.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-store.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/store.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/document-overflow/adjust-scrollbar-padding.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/document-overflow/handle-ios-locking.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/document-overflow/prevent-scroll.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/document-overflow/overflow-store.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/document-overflow/use-document-overflow.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-root-containers.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/components/dialog/dialog.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/components/label/label.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/components/switch/switch.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/once.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/components/transitions/utils/transition.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/components/transitions/transition.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-controllable.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-id.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-document-event.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-outside-click.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-resolve-button-type.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/hooks/use-window-event.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/internal/hidden.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/internal/open-closed.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/keyboard.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/disposables.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/dom.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/env.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/focus-management.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/form.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/match.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/micro-task.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/owner.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/platform.js","webpack://boost-seller/./node_modules/@headlessui/vue/dist/utils/render.js","webpack://boost-seller/./node_modules/@vueuse/shared/index.mjs","webpack://boost-seller/./node_modules/@vueuse/core/index.mjs","webpack://boost-seller/./node_modules/firebase/app/dist/esm/index.esm.js","webpack://boost-seller/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://boost-seller/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://boost-seller/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://boost-seller/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://boost-seller/./node_modules/vue-currency-input/dist/index.mjs","webpack://boost-seller/./node_modules/vue-router/dist/vue-router.mjs"],"sourcesContent":["/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v0.7.31\n Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n MIT License */ /*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment.\n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n \"use strict\";\n\n //////////////\n // Constants\n /////////////\n\n var LIBVERSION = \"0.7.31\",\n EMPTY = \"\",\n UNKNOWN = \"?\",\n FUNC_TYPE = \"function\",\n UNDEF_TYPE = \"undefined\",\n OBJ_TYPE = \"object\",\n STR_TYPE = \"string\",\n MAJOR = \"major\",\n MODEL = \"model\",\n NAME = \"name\",\n TYPE = \"type\",\n VENDOR = \"vendor\",\n VERSION = \"version\",\n ARCHITECTURE = \"architecture\",\n CONSOLE = \"console\",\n MOBILE = \"mobile\",\n TABLET = \"tablet\",\n SMARTTV = \"smarttv\",\n WEARABLE = \"wearable\",\n EMBEDDED = \"embedded\",\n UA_MAX_LENGTH = 275;\n\n var AMAZON = \"Amazon\",\n APPLE = \"Apple\",\n ASUS = \"ASUS\",\n BLACKBERRY = \"BlackBerry\",\n BROWSER = \"Browser\",\n CHROME = \"Chrome\",\n EDGE = \"Edge\",\n FIREFOX = \"Firefox\",\n GOOGLE = \"Google\",\n HUAWEI = \"Huawei\",\n LG = \"LG\",\n MICROSOFT = \"Microsoft\",\n MOTOROLA = \"Motorola\",\n OPERA = \"Opera\",\n SAMSUNG = \"Samsung\",\n SONY = \"Sony\",\n XIAOMI = \"Xiaomi\",\n ZEBRA = \"Zebra\",\n FACEBOOK = \"Facebook\";\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i = 0; i < arr.length; i++) {\n enums[arr[i].toUpperCase()] = arr[i];\n }\n return enums;\n },\n has = function (str1, str2) {\n return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n },\n lowerize = function (str) {\n return str.toLowerCase();\n },\n majorize = function (version) {\n return typeof version === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split(\".\")[0] : undefined;\n },\n trim = function (str, len) {\n if (typeof str === STR_TYPE) {\n str = str.replace(/^\\s\\s*/, EMPTY).replace(/\\s\\s*$/, EMPTY);\n return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n }\n };\n\n ///////////////\n // Map helper\n //////////////\n\n var rgxMapper = function (ua, arrays) {\n var i = 0,\n j,\n k,\n p,\n q,\n matches,\n match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n strMapper = function (str, map) {\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return i === UNKNOWN ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return i === UNKNOWN ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n \"1.0\": \"/8\",\n 1.2: \"/1\",\n 1.3: \"/3\",\n \"2.0\": \"/412\",\n \"2.0.2\": \"/416\",\n \"2.0.3\": \"/417\",\n \"2.0.4\": \"/419\",\n \"?\": \"/\"\n },\n windowsVersionMap = {\n ME: \"4.90\",\n \"NT 3.11\": \"NT3.51\",\n \"NT 4.0\": \"NT4.0\",\n 2000: \"NT 5.0\",\n XP: [\"NT 5.1\", \"NT 5.2\"],\n Vista: \"NT 6.0\",\n 7: \"NT 6.1\",\n 8: \"NT 6.2\",\n 8.1: \"NT 6.3\",\n 10: [\"NT 6.4\", \"NT 10.0\"],\n RT: \"ARM\"\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n browser: [\n [\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ],\n [VERSION, [NAME, \"Chrome\"]],\n [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ],\n [VERSION, [NAME, \"Edge\"]],\n [\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ],\n [NAME, VERSION],\n [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ],\n [VERSION, [NAME, OPERA + \" Mini\"]],\n [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ],\n [VERSION, [NAME, OPERA]],\n [\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(weibo)__([\\d\\.]+)/i // Weibo\n ],\n [NAME, VERSION],\n [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ],\n [VERSION, [NAME, \"UC\" + BROWSER]],\n [\n /\\bqbcore\\/([\\w\\.]+)/i // WeChat Desktop for Windows Built-in Browser\n ],\n [VERSION, [NAME, \"WeChat(Win) Desktop\"]],\n [\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ],\n [VERSION, [NAME, \"WeChat\"]],\n [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ],\n [VERSION, [NAME, \"Konqueror\"]],\n [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ],\n [VERSION, [NAME, \"IE\"]],\n [\n /yabrowser\\/([\\w\\.]+)/i // Yandex\n ],\n [VERSION, [NAME, \"Yandex\"]],\n [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ],\n [[NAME, /(.+)/, \"$1 Secure \" + BROWSER], VERSION],\n [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ],\n [VERSION, [NAME, FIREFOX + \" Focus\"]],\n [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ],\n [VERSION, [NAME, OPERA + \" Touch\"]],\n [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ],\n [VERSION, [NAME, \"Coc Coc\"]],\n [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ],\n [VERSION, [NAME, \"Dolphin\"]],\n [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ],\n [VERSION, [NAME, OPERA + \" Coast\"]],\n [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ],\n [VERSION, [NAME, \"MIUI \" + BROWSER]],\n [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ],\n [VERSION, [NAME, FIREFOX]],\n [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ],\n [[NAME, \"360 \" + BROWSER]],\n [/(oculus|samsung|sailfish)browser\\/([\\w\\.]+)/i],\n [[NAME, /(.+)/, \"$1 \" + BROWSER], VERSION],\n [\n // Oculus/Samsung/Sailfish Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ],\n [[NAME, /_/g, \" \"], VERSION],\n [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ],\n [NAME, VERSION],\n [\n /(metasr)[\\/ ]?([\\w\\.]+)/i, // SouGouBrowser\n /(lbbrowser)/i // LieBao Browser\n ],\n [NAME],\n [\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ],\n [[NAME, FACEBOOK], VERSION],\n [\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n ],\n [NAME, VERSION],\n [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ],\n [VERSION, [NAME, \"GSA\"]],\n [\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ],\n [VERSION, [NAME, CHROME + \" Headless\"]],\n [\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ],\n [[NAME, CHROME + \" WebView\"], VERSION],\n [\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ],\n [VERSION, [NAME, \"Android \" + BROWSER]],\n [\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ],\n [NAME, VERSION],\n [\n /version\\/([\\w\\.]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ],\n [VERSION, [NAME, \"Mobile Safari\"]],\n [\n /version\\/([\\w\\.]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ],\n [VERSION, NAME],\n [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ],\n [NAME, [VERSION, strMapper, oldSafariMap]],\n [/(webkit|khtml)\\/([\\w\\.]+)/i],\n [NAME, VERSION],\n [\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ],\n [[NAME, \"Netscape\"], VERSION],\n [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ],\n [VERSION, [NAME, FIREFOX + \" Reality\"]],\n [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i // Links\n ],\n [NAME, VERSION]\n ],\n\n cpu: [\n [\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ],\n [[ARCHITECTURE, \"amd64\"]],\n [\n /(ia32(?=;))/i // IA32 (quicktime)\n ],\n [[ARCHITECTURE, lowerize]],\n [\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ],\n [[ARCHITECTURE, \"ia32\"]],\n [\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ],\n [[ARCHITECTURE, \"arm64\"]],\n [\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ],\n [[ARCHITECTURE, \"armhf\"]],\n [\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ],\n [[ARCHITECTURE, \"arm\"]],\n [\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ],\n [[ARCHITECTURE, /ower/, EMPTY, lowerize]],\n [\n /(sun4\\w)[;\\)]/i // SPARC\n ],\n [[ARCHITECTURE, \"sparc\"]],\n [\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ],\n [[ARCHITECTURE, lowerize]]\n ],\n\n device: [\n [\n //////////////////////////\n // MOBILES & TABLETS\n // Ordered by popularity\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[pt]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ],\n [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]],\n [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ],\n [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]],\n [\n // Apple\n /((ipod|iphone)\\d+,\\d+)/i // iPod/iPhone model\n ],\n [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]],\n [\n /(ipad\\d+,\\d+)/i // iPad model\n ],\n [MODEL, [VENDOR, APPLE], [TYPE, TABLET]],\n [\n /\\((ip(?:hone|od)[\\w ]*);/i // iPod/iPhone\n ],\n [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]],\n [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ],\n [MODEL, [VENDOR, APPLE], [TYPE, TABLET]],\n [\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ],\n [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]],\n [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n ],\n [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]],\n [\n // Xiaomi\n /\\b(poco[\\w ]+)(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ],\n [\n [MODEL, /_/g, \" \"],\n [VENDOR, XIAOMI],\n [TYPE, MOBILE]\n ],\n [\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],\n [\n [MODEL, /_/g, \" \"],\n [VENDOR, XIAOMI],\n [TYPE, TABLET]\n ],\n [\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ],\n [MODEL, [VENDOR, \"OPPO\"], [TYPE, MOBILE]],\n [\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ],\n [MODEL, [VENDOR, \"Vivo\"], [TYPE, MOBILE]],\n [\n // Realme\n /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n ],\n [MODEL, [VENDOR, \"Realme\"], [TYPE, MOBILE]],\n [\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ],\n [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]],\n [/\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i],\n [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]],\n [\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ],\n [MODEL, [VENDOR, LG], [TYPE, TABLET]],\n [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ],\n [MODEL, [VENDOR, LG], [TYPE, MOBILE]],\n [\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ],\n [MODEL, [VENDOR, \"Lenovo\"], [TYPE, TABLET]],\n [\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ],\n [\n [MODEL, /_/g, \" \"],\n [VENDOR, \"Nokia\"],\n [TYPE, MOBILE]\n ],\n [\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ],\n [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]],\n [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ],\n [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]],\n [\n // Sony\n /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ],\n [MODEL, [VENDOR, SONY], [TYPE, MOBILE]],\n [/sony tablet [ps]/i, /\\b(?:sony)?sgp\\w+(?: bui|\\))/i],\n [\n [MODEL, \"Xperia Tablet\"],\n [VENDOR, SONY],\n [TYPE, TABLET]\n ],\n [\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ],\n [MODEL, [VENDOR, \"OnePlus\"], [TYPE, MOBILE]],\n [\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi)( bui|\\))/i, // Kindle Fire without Silk\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ],\n [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]],\n [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ],\n [\n [MODEL, /(.+)/g, \"Fire Phone $1\"],\n [VENDOR, AMAZON],\n [TYPE, MOBILE]\n ],\n [\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ],\n [MODEL, VENDOR, [TYPE, TABLET]],\n [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ],\n [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]],\n [\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ],\n [MODEL, [VENDOR, ASUS], [TYPE, TABLET]],\n [/ (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i],\n [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]],\n [\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ],\n [MODEL, [VENDOR, \"HTC\"], [TYPE, TABLET]],\n [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ],\n [VENDOR, [MODEL, /_/g, \" \"], [TYPE, MOBILE]],\n [\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ],\n [MODEL, [VENDOR, \"Acer\"], [TYPE, TABLET]],\n [\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ],\n [MODEL, [VENDOR, \"Meizu\"], [TYPE, MOBILE]],\n [\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ],\n [MODEL, [VENDOR, \"Sharp\"], [TYPE, MOBILE]],\n [\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ],\n [VENDOR, MODEL, [TYPE, MOBILE]],\n [\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ],\n [VENDOR, MODEL, [TYPE, TABLET]],\n [\n /(surface duo)/i // Surface Duo\n ],\n [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]],\n [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ],\n [MODEL, [VENDOR, \"Fairphone\"], [TYPE, MOBILE]],\n [\n /(u304aa)/i // AT&T\n ],\n [MODEL, [VENDOR, \"AT&T\"], [TYPE, MOBILE]],\n [\n /\\bsie-(\\w*)/i // Siemens\n ],\n [MODEL, [VENDOR, \"Siemens\"], [TYPE, MOBILE]],\n [\n /\\b(rct\\w+) b/i // RCA Tablets\n ],\n [MODEL, [VENDOR, \"RCA\"], [TYPE, TABLET]],\n [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ],\n [MODEL, [VENDOR, \"Dell\"], [TYPE, TABLET]],\n [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ],\n [MODEL, [VENDOR, \"Verizon\"], [TYPE, TABLET]],\n [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ],\n [MODEL, [VENDOR, \"Barnes & Noble\"], [TYPE, TABLET]],\n [/\\b(tm\\d{3}\\w+) b/i],\n [MODEL, [VENDOR, \"NuVision\"], [TYPE, TABLET]],\n [\n /\\b(k88) b/i // ZTE K Series Tablet\n ],\n [MODEL, [VENDOR, \"ZTE\"], [TYPE, TABLET]],\n [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ],\n [MODEL, [VENDOR, \"ZTE\"], [TYPE, MOBILE]],\n [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ],\n [MODEL, [VENDOR, \"Swiss\"], [TYPE, MOBILE]],\n [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ],\n [MODEL, [VENDOR, \"Swiss\"], [TYPE, TABLET]],\n [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ],\n [MODEL, [VENDOR, \"Zeki\"], [TYPE, TABLET]],\n [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ],\n [[VENDOR, \"Dragon Touch\"], MODEL, [TYPE, TABLET]],\n [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ],\n [MODEL, [VENDOR, \"Insignia\"], [TYPE, TABLET]],\n [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ],\n [MODEL, [VENDOR, \"NextBook\"], [TYPE, TABLET]],\n [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ],\n [[VENDOR, \"Voice\"], MODEL, [TYPE, MOBILE]],\n [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ],\n [[VENDOR, \"LvTel\"], MODEL, [TYPE, MOBILE]],\n [\n /\\b(ph-1) /i // Essential PH-1\n ],\n [MODEL, [VENDOR, \"Essential\"], [TYPE, MOBILE]],\n [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ],\n [MODEL, [VENDOR, \"Envizen\"], [TYPE, TABLET]],\n [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ],\n [MODEL, [VENDOR, \"MachSpeed\"], [TYPE, TABLET]],\n [\n /\\btu_(1491) b/i // Rotor Tablets\n ],\n [MODEL, [VENDOR, \"Rotor\"], [TYPE, TABLET]],\n [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ],\n [MODEL, [VENDOR, \"Nvidia\"], [TYPE, TABLET]],\n [\n /(sprint) (\\w+)/i // Sprint Phones\n ],\n [VENDOR, MODEL, [TYPE, MOBILE]],\n [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ],\n [\n [MODEL, /\\./g, \" \"],\n [VENDOR, MICROSOFT],\n [TYPE, MOBILE]\n ],\n [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ],\n [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]],\n [/droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i],\n [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]],\n [\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ],\n [VENDOR, MODEL, [TYPE, CONSOLE]],\n [\n /droid.+; (shield) bui/i // Nvidia\n ],\n [MODEL, [VENDOR, \"Nvidia\"], [TYPE, CONSOLE]],\n [\n /(playstation [345portablevi]+)/i // Playstation\n ],\n [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]],\n [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ],\n [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]],\n [\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ],\n [VENDOR, [TYPE, SMARTTV]],\n [/hbbtv.+maple;(\\d+)/i],\n [\n [MODEL, /^/, \"SmartTV\"],\n [VENDOR, SAMSUNG],\n [TYPE, SMARTTV]\n ],\n [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ],\n [\n [VENDOR, LG],\n [TYPE, SMARTTV]\n ],\n [\n /(apple) ?tv/i // Apple TV\n ],\n [VENDOR, [MODEL, APPLE + \" TV\"], [TYPE, SMARTTV]],\n [\n /crkey/i // Google Chromecast\n ],\n [\n [MODEL, CHROME + \"cast\"],\n [VENDOR, GOOGLE],\n [TYPE, SMARTTV]\n ],\n [\n /droid.+aft(\\w)( bui|\\))/i // Fire TV\n ],\n [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]],\n [\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ],\n [MODEL, [VENDOR, \"Sharp\"], [TYPE, SMARTTV]],\n [\n /(bravia[\\w- ]+) bui/i // Sony\n ],\n [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]],\n [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w ]*; *(\\w[^;]*);([^;]*)/i // HbbTV devices\n ],\n [\n [VENDOR, trim],\n [MODEL, trim],\n [TYPE, SMARTTV]\n ],\n [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ],\n [[TYPE, SMARTTV]],\n [\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ],\n [VENDOR, MODEL, [TYPE, WEARABLE]],\n [\n /droid.+; (glass) \\d/i // Google Glass\n ],\n [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]],\n [/droid.+; (wt63?0{2,3})\\)/i],\n [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]],\n [\n /(quest( 2)?)/i // Oculus Quest\n ],\n [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]],\n [\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ],\n [VENDOR, [TYPE, EMBEDDED]],\n [\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ],\n [MODEL, [TYPE, MOBILE]],\n [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ],\n [MODEL, [TYPE, TABLET]],\n [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ],\n [[TYPE, TABLET]],\n [\n /(phone|mobile(?:[;\\/]| safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ],\n [[TYPE, MOBILE]],\n [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ],\n [MODEL, [VENDOR, \"Generic\"]]\n ],\n\n engine: [\n [\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ],\n [VERSION, [NAME, EDGE + \"HTML\"]],\n [\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ],\n [VERSION, [NAME, \"Blink\"]],\n [\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i // iCab\n ],\n [NAME, VERSION],\n [\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ],\n [VERSION, NAME]\n ],\n\n os: [\n [\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ],\n [NAME, VERSION],\n [\n /(windows) nt 6\\.2; (arm)/i, // Windows RT\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i, // Windows Phone\n /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n ],\n [NAME, [VERSION, strMapper, windowsVersionMap]],\n [/(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i],\n [\n [NAME, \"Windows\"],\n [VERSION, strMapper, windowsVersionMap]\n ],\n [\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /cfnetwork\\/.+darwin/i\n ],\n [\n [VERSION, /_/g, \".\"],\n [NAME, \"iOS\"]\n ],\n [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ],\n [\n [NAME, \"Mac OS\"],\n [VERSION, /_/g, \".\"]\n ],\n [\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86)/i // Android-x86\n ],\n [VERSION, NAME],\n [\n // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ],\n [NAME, VERSION],\n [\n /\\(bb(10);/i // BlackBerry 10\n ],\n [VERSION, [NAME, BLACKBERRY]],\n [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ],\n [VERSION, [NAME, \"Symbian\"]],\n [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ],\n [VERSION, [NAME, FIREFOX + \" OS\"]],\n [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ],\n [VERSION, [NAME, \"webOS\"]],\n [\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ],\n [VERSION, [NAME, CHROME + \"cast\"]],\n [\n /(cros) [\\w]+ ([\\w\\.]+\\w)/i // Chromium OS\n ],\n [[NAME, \"Chromium OS\"], VERSION],\n [\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ],\n [NAME, VERSION],\n [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ],\n [[NAME, \"Solaris\"], VERSION],\n [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX\n /(unix) ?([\\w\\.]*)/i // UNIX\n ],\n [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua =\n ua ||\n (typeof window !== UNDEF_TYPE &&\n window.navigator &&\n window.navigator.userAgent ? window.navigator.userAgent : EMPTY);\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser.major = majorize(_browser.version);\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n this.getResult = function () {\n return {\n ua: this.getUA(),\n browser: this.getBrowser(),\n engine: this.getEngine(),\n os: this.getOS(),\n device: this.getDevice(),\n cpu: this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua =\n typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([\n MODEL,\n VENDOR,\n TYPE,\n CONSOLE,\n MOBILE,\n SMARTTV,\n TABLET,\n WEARABLE,\n EMBEDDED\n ]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof exports !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof define === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n})(typeof window === \"object\" ? window : this);\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/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __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\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __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}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { ErrorFactory, deepEqual, isBrowserExtension, isMobileCordova, isReactNative, FirebaseError, querystring, getModularInstance, base64Decode, getUA, isIE, createSubscribe, querystringDecode, extractQuerystring, isEmpty, getExperimentalSetting, getDefaultEmulatorHost } from '@firebase/util';\nimport { SDK_VERSION, _getProvider, _registerComponent, registerVersion, getApp } from '@firebase/app';\nimport { Logger, LogLevel } from '@firebase/logger';\nimport { __rest } from 'tslib';\nimport { Component } from '@firebase/component';\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An enum of factors that may be used for multifactor authentication.\r\n *\r\n * @public\r\n */\r\nconst FactorId = {\r\n /** Phone as second factor */\r\n PHONE: 'phone'\r\n};\r\n/**\r\n * Enumeration of supported providers.\r\n *\r\n * @public\r\n */\r\nconst ProviderId = {\r\n /** Facebook provider ID */\r\n FACEBOOK: 'facebook.com',\r\n /** GitHub provider ID */\r\n GITHUB: 'github.com',\r\n /** Google provider ID */\r\n GOOGLE: 'google.com',\r\n /** Password provider */\r\n PASSWORD: 'password',\r\n /** Phone provider */\r\n PHONE: 'phone',\r\n /** Twitter provider ID */\r\n TWITTER: 'twitter.com'\r\n};\r\n/**\r\n * Enumeration of supported sign-in methods.\r\n *\r\n * @public\r\n */\r\nconst SignInMethod = {\r\n /** Email link sign in method */\r\n EMAIL_LINK: 'emailLink',\r\n /** Email/password sign in method */\r\n EMAIL_PASSWORD: 'password',\r\n /** Facebook sign in method */\r\n FACEBOOK: 'facebook.com',\r\n /** GitHub sign in method */\r\n GITHUB: 'github.com',\r\n /** Google sign in method */\r\n GOOGLE: 'google.com',\r\n /** Phone sign in method */\r\n PHONE: 'phone',\r\n /** Twitter sign in method */\r\n TWITTER: 'twitter.com'\r\n};\r\n/**\r\n * Enumeration of supported operation types.\r\n *\r\n * @public\r\n */\r\nconst OperationType = {\r\n /** Operation involving linking an additional provider to an already signed-in user. */\r\n LINK: 'link',\r\n /** Operation involving using a provider to reauthenticate an already signed-in user. */\r\n REAUTHENTICATE: 'reauthenticate',\r\n /** Operation involving signing in a user. */\r\n SIGN_IN: 'signIn'\r\n};\r\n/**\r\n * An enumeration of the possible email action types.\r\n *\r\n * @public\r\n */\r\nconst ActionCodeOperation = {\r\n /** The email link sign-in action. */\r\n EMAIL_SIGNIN: 'EMAIL_SIGNIN',\r\n /** The password reset action. */\r\n PASSWORD_RESET: 'PASSWORD_RESET',\r\n /** The email revocation action. */\r\n RECOVER_EMAIL: 'RECOVER_EMAIL',\r\n /** The revert second factor addition email action. */\r\n REVERT_SECOND_FACTOR_ADDITION: 'REVERT_SECOND_FACTOR_ADDITION',\r\n /** The revert second factor addition email action. */\r\n VERIFY_AND_CHANGE_EMAIL: 'VERIFY_AND_CHANGE_EMAIL',\r\n /** The email verification action. */\r\n VERIFY_EMAIL: 'VERIFY_EMAIL'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _debugErrorMap() {\r\n return {\r\n [\"admin-restricted-operation\" /* AuthErrorCode.ADMIN_ONLY_OPERATION */]: 'This operation is restricted to administrators only.',\r\n [\"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */]: '',\r\n [\"app-not-authorized\" /* AuthErrorCode.APP_NOT_AUTHORIZED */]: \"This app, identified by the domain where it's hosted, is not \" +\r\n 'authorized to use Firebase Authentication with the provided API key. ' +\r\n 'Review your key configuration in the Google API console.',\r\n [\"app-not-installed\" /* AuthErrorCode.APP_NOT_INSTALLED */]: 'The requested mobile application corresponding to the identifier (' +\r\n 'Android package name or iOS bundle ID) provided is not installed on ' +\r\n 'this device.',\r\n [\"captcha-check-failed\" /* AuthErrorCode.CAPTCHA_CHECK_FAILED */]: 'The reCAPTCHA response token provided is either invalid, expired, ' +\r\n 'already used or the domain associated with it does not match the list ' +\r\n 'of whitelisted domains.',\r\n [\"code-expired\" /* AuthErrorCode.CODE_EXPIRED */]: 'The SMS code has expired. Please re-send the verification code to try ' +\r\n 'again.',\r\n [\"cordova-not-ready\" /* AuthErrorCode.CORDOVA_NOT_READY */]: 'Cordova framework is not ready.',\r\n [\"cors-unsupported\" /* AuthErrorCode.CORS_UNSUPPORTED */]: 'This browser is not supported.',\r\n [\"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */]: 'This credential is already associated with a different user account.',\r\n [\"custom-token-mismatch\" /* AuthErrorCode.CREDENTIAL_MISMATCH */]: 'The custom token corresponds to a different audience.',\r\n [\"requires-recent-login\" /* AuthErrorCode.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */]: 'This operation is sensitive and requires recent authentication. Log in ' +\r\n 'again before retrying this request.',\r\n [\"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */]: 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\r\n 'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\r\n 'starting any other Firebase SDK.',\r\n [\"dynamic-link-not-activated\" /* AuthErrorCode.DYNAMIC_LINK_NOT_ACTIVATED */]: 'Please activate Dynamic Links in the Firebase Console and agree to the terms and ' +\r\n 'conditions.',\r\n [\"email-change-needs-verification\" /* AuthErrorCode.EMAIL_CHANGE_NEEDS_VERIFICATION */]: 'Multi-factor users must always have a verified email.',\r\n [\"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */]: 'The email address is already in use by another account.',\r\n [\"emulator-config-failed\" /* AuthErrorCode.EMULATOR_CONFIG_FAILED */]: 'Auth instance has already been used to make a network call. Auth can ' +\r\n 'no longer be configured to use the emulator. Try calling ' +\r\n '\"connectAuthEmulator()\" sooner.',\r\n [\"expired-action-code\" /* AuthErrorCode.EXPIRED_OOB_CODE */]: 'The action code has expired.',\r\n [\"cancelled-popup-request\" /* AuthErrorCode.EXPIRED_POPUP_REQUEST */]: 'This operation has been cancelled due to another conflicting popup being opened.',\r\n [\"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */]: 'An internal AuthError has occurred.',\r\n [\"invalid-app-credential\" /* AuthErrorCode.INVALID_APP_CREDENTIAL */]: 'The phone verification request contains an invalid application verifier.' +\r\n ' The reCAPTCHA token response is either invalid or expired.',\r\n [\"invalid-app-id\" /* AuthErrorCode.INVALID_APP_ID */]: 'The mobile app identifier is not registed for the current project.',\r\n [\"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */]: \"This user's credential isn't valid for this project. This can happen \" +\r\n \"if the user's token has been tampered with, or if the user isn't for \" +\r\n 'the project associated with this API key.',\r\n [\"invalid-auth-event\" /* AuthErrorCode.INVALID_AUTH_EVENT */]: 'An internal AuthError has occurred.',\r\n [\"invalid-verification-code\" /* AuthErrorCode.INVALID_CODE */]: 'The SMS verification code used to create the phone auth credential is ' +\r\n 'invalid. Please resend the verification code sms and be sure to use the ' +\r\n 'verification code provided by the user.',\r\n [\"invalid-continue-uri\" /* AuthErrorCode.INVALID_CONTINUE_URI */]: 'The continue URL provided in the request is invalid.',\r\n [\"invalid-cordova-configuration\" /* AuthErrorCode.INVALID_CORDOVA_CONFIGURATION */]: 'The following Cordova plugins must be installed to enable OAuth sign-in: ' +\r\n 'cordova-plugin-buildinfo, cordova-universal-links-plugin, ' +\r\n 'cordova-plugin-browsertab, cordova-plugin-inappbrowser and ' +\r\n 'cordova-plugin-customurlscheme.',\r\n [\"invalid-custom-token\" /* AuthErrorCode.INVALID_CUSTOM_TOKEN */]: 'The custom token format is incorrect. Please check the documentation.',\r\n [\"invalid-dynamic-link-domain\" /* AuthErrorCode.INVALID_DYNAMIC_LINK_DOMAIN */]: 'The provided dynamic link domain is not configured or authorized for the current project.',\r\n [\"invalid-email\" /* AuthErrorCode.INVALID_EMAIL */]: 'The email address is badly formatted.',\r\n [\"invalid-emulator-scheme\" /* AuthErrorCode.INVALID_EMULATOR_SCHEME */]: 'Emulator URL must start with a valid scheme (http:// or https://).',\r\n [\"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */]: 'Your API key is invalid, please check you have copied it correctly.',\r\n [\"invalid-cert-hash\" /* AuthErrorCode.INVALID_CERT_HASH */]: 'The SHA-1 certificate hash provided is invalid.',\r\n [\"invalid-credential\" /* AuthErrorCode.INVALID_IDP_RESPONSE */]: 'The supplied auth credential is malformed or has expired.',\r\n [\"invalid-message-payload\" /* AuthErrorCode.INVALID_MESSAGE_PAYLOAD */]: 'The email template corresponding to this action contains invalid characters in its message. ' +\r\n 'Please fix by going to the Auth email templates section in the Firebase Console.',\r\n [\"invalid-multi-factor-session\" /* AuthErrorCode.INVALID_MFA_SESSION */]: 'The request does not contain a valid proof of first factor successful sign-in.',\r\n [\"invalid-oauth-provider\" /* AuthErrorCode.INVALID_OAUTH_PROVIDER */]: 'EmailAuthProvider is not supported for this operation. This operation ' +\r\n 'only supports OAuth providers.',\r\n [\"invalid-oauth-client-id\" /* AuthErrorCode.INVALID_OAUTH_CLIENT_ID */]: 'The OAuth client ID provided is either invalid or does not match the ' +\r\n 'specified API key.',\r\n [\"unauthorized-domain\" /* AuthErrorCode.INVALID_ORIGIN */]: 'This domain is not authorized for OAuth operations for your Firebase ' +\r\n 'project. Edit the list of authorized domains from the Firebase console.',\r\n [\"invalid-action-code\" /* AuthErrorCode.INVALID_OOB_CODE */]: 'The action code is invalid. This can happen if the code is malformed, ' +\r\n 'expired, or has already been used.',\r\n [\"wrong-password\" /* AuthErrorCode.INVALID_PASSWORD */]: 'The password is invalid or the user does not have a password.',\r\n [\"invalid-persistence-type\" /* AuthErrorCode.INVALID_PERSISTENCE */]: 'The specified persistence type is invalid. It can only be local, session or none.',\r\n [\"invalid-phone-number\" /* AuthErrorCode.INVALID_PHONE_NUMBER */]: 'The format of the phone number provided is incorrect. Please enter the ' +\r\n 'phone number in a format that can be parsed into E.164 format. E.164 ' +\r\n 'phone numbers are written in the format [+][country code][subscriber ' +\r\n 'number including area code].',\r\n [\"invalid-provider-id\" /* AuthErrorCode.INVALID_PROVIDER_ID */]: 'The specified provider ID is invalid.',\r\n [\"invalid-recipient-email\" /* AuthErrorCode.INVALID_RECIPIENT_EMAIL */]: 'The email corresponding to this action failed to send as the provided ' +\r\n 'recipient email address is invalid.',\r\n [\"invalid-sender\" /* AuthErrorCode.INVALID_SENDER */]: 'The email template corresponding to this action contains an invalid sender email or name. ' +\r\n 'Please fix by going to the Auth email templates section in the Firebase Console.',\r\n [\"invalid-verification-id\" /* AuthErrorCode.INVALID_SESSION_INFO */]: 'The verification ID used to create the phone auth credential is invalid.',\r\n [\"invalid-tenant-id\" /* AuthErrorCode.INVALID_TENANT_ID */]: \"The Auth instance's tenant ID is invalid.\",\r\n [\"login-blocked\" /* AuthErrorCode.LOGIN_BLOCKED */]: 'Login blocked by user-provided method: {$originalMessage}',\r\n [\"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */]: 'An Android Package Name must be provided if the Android App is required to be installed.',\r\n [\"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */]: 'Be sure to include authDomain when calling firebase.initializeApp(), ' +\r\n 'by following the instructions in the Firebase console.',\r\n [\"missing-app-credential\" /* AuthErrorCode.MISSING_APP_CREDENTIAL */]: 'The phone verification request is missing an application verifier ' +\r\n 'assertion. A reCAPTCHA response token needs to be provided.',\r\n [\"missing-verification-code\" /* AuthErrorCode.MISSING_CODE */]: 'The phone auth credential was created with an empty SMS verification code.',\r\n [\"missing-continue-uri\" /* AuthErrorCode.MISSING_CONTINUE_URI */]: 'A continue URL must be provided in the request.',\r\n [\"missing-iframe-start\" /* AuthErrorCode.MISSING_IFRAME_START */]: 'An internal AuthError has occurred.',\r\n [\"missing-ios-bundle-id\" /* AuthErrorCode.MISSING_IOS_BUNDLE_ID */]: 'An iOS Bundle ID must be provided if an App Store ID is provided.',\r\n [\"missing-or-invalid-nonce\" /* AuthErrorCode.MISSING_OR_INVALID_NONCE */]: 'The request does not contain a valid nonce. This can occur if the ' +\r\n 'SHA-256 hash of the provided raw nonce does not match the hashed nonce ' +\r\n 'in the ID token payload.',\r\n [\"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */]: 'No second factor identifier is provided.',\r\n [\"missing-multi-factor-session\" /* AuthErrorCode.MISSING_MFA_SESSION */]: 'The request is missing proof of first factor successful sign-in.',\r\n [\"missing-phone-number\" /* AuthErrorCode.MISSING_PHONE_NUMBER */]: 'To send verification codes, provide a phone number for the recipient.',\r\n [\"missing-verification-id\" /* AuthErrorCode.MISSING_SESSION_INFO */]: 'The phone auth credential was created with an empty verification ID.',\r\n [\"app-deleted\" /* AuthErrorCode.MODULE_DESTROYED */]: 'This instance of FirebaseApp has been deleted.',\r\n [\"multi-factor-info-not-found\" /* AuthErrorCode.MFA_INFO_NOT_FOUND */]: 'The user does not have a second factor matching the identifier provided.',\r\n [\"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */]: 'Proof of ownership of a second factor is required to complete sign-in.',\r\n [\"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */]: 'An account already exists with the same email address but different ' +\r\n 'sign-in credentials. Sign in using a provider associated with this ' +\r\n 'email address.',\r\n [\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */]: 'A network AuthError (such as timeout, interrupted connection or unreachable host) has occurred.',\r\n [\"no-auth-event\" /* AuthErrorCode.NO_AUTH_EVENT */]: 'An internal AuthError has occurred.',\r\n [\"no-such-provider\" /* AuthErrorCode.NO_SUCH_PROVIDER */]: 'User was not linked to an account with the given provider.',\r\n [\"null-user\" /* AuthErrorCode.NULL_USER */]: 'A null user object was provided as the argument for an operation which ' +\r\n 'requires a non-null user object.',\r\n [\"operation-not-allowed\" /* AuthErrorCode.OPERATION_NOT_ALLOWED */]: 'The given sign-in provider is disabled for this Firebase project. ' +\r\n 'Enable it in the Firebase console, under the sign-in method tab of the ' +\r\n 'Auth section.',\r\n [\"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */]: 'This operation is not supported in the environment this application is ' +\r\n 'running on. \"location.protocol\" must be http, https or chrome-extension' +\r\n ' and web storage must be enabled.',\r\n [\"popup-blocked\" /* AuthErrorCode.POPUP_BLOCKED */]: 'Unable to establish a connection with the popup. It may have been blocked by the browser.',\r\n [\"popup-closed-by-user\" /* AuthErrorCode.POPUP_CLOSED_BY_USER */]: 'The popup has been closed by the user before finalizing the operation.',\r\n [\"provider-already-linked\" /* AuthErrorCode.PROVIDER_ALREADY_LINKED */]: 'User can only be linked to one identity for the given provider.',\r\n [\"quota-exceeded\" /* AuthErrorCode.QUOTA_EXCEEDED */]: \"The project's quota for this operation has been exceeded.\",\r\n [\"redirect-cancelled-by-user\" /* AuthErrorCode.REDIRECT_CANCELLED_BY_USER */]: 'The redirect operation has been cancelled by the user before finalizing.',\r\n [\"redirect-operation-pending\" /* AuthErrorCode.REDIRECT_OPERATION_PENDING */]: 'A redirect sign-in operation is already pending.',\r\n [\"rejected-credential\" /* AuthErrorCode.REJECTED_CREDENTIAL */]: 'The request contains malformed or mismatching credentials.',\r\n [\"second-factor-already-in-use\" /* AuthErrorCode.SECOND_FACTOR_ALREADY_ENROLLED */]: 'The second factor is already enrolled on this account.',\r\n [\"maximum-second-factor-count-exceeded\" /* AuthErrorCode.SECOND_FACTOR_LIMIT_EXCEEDED */]: 'The maximum allowed number of second factors on a user has been exceeded.',\r\n [\"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */]: \"The provided tenant ID does not match the Auth instance's tenant ID\",\r\n [\"timeout\" /* AuthErrorCode.TIMEOUT */]: 'The operation has timed out.',\r\n [\"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */]: \"The user's credential is no longer valid. The user must sign in again.\",\r\n [\"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */]: 'We have blocked all requests from this device due to unusual activity. ' +\r\n 'Try again later.',\r\n [\"unauthorized-continue-uri\" /* AuthErrorCode.UNAUTHORIZED_DOMAIN */]: 'The domain of the continue URL is not whitelisted. Please whitelist ' +\r\n 'the domain in the Firebase console.',\r\n [\"unsupported-first-factor\" /* AuthErrorCode.UNSUPPORTED_FIRST_FACTOR */]: 'Enrolling a second factor or signing in with a multi-factor account requires sign-in with a supported first factor.',\r\n [\"unsupported-persistence-type\" /* AuthErrorCode.UNSUPPORTED_PERSISTENCE */]: 'The current environment does not support the specified persistence type.',\r\n [\"unsupported-tenant-operation\" /* AuthErrorCode.UNSUPPORTED_TENANT_OPERATION */]: 'This operation is not supported in a multi-tenant context.',\r\n [\"unverified-email\" /* AuthErrorCode.UNVERIFIED_EMAIL */]: 'The operation requires a verified email.',\r\n [\"user-cancelled\" /* AuthErrorCode.USER_CANCELLED */]: 'The user did not grant your application the permissions it requested.',\r\n [\"user-not-found\" /* AuthErrorCode.USER_DELETED */]: 'There is no user record corresponding to this identifier. The user may ' +\r\n 'have been deleted.',\r\n [\"user-disabled\" /* AuthErrorCode.USER_DISABLED */]: 'The user account has been disabled by an administrator.',\r\n [\"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */]: 'The supplied credentials do not correspond to the previously signed in user.',\r\n [\"user-signed-out\" /* AuthErrorCode.USER_SIGNED_OUT */]: '',\r\n [\"weak-password\" /* AuthErrorCode.WEAK_PASSWORD */]: 'The password must be 6 characters long or more.',\r\n [\"web-storage-unsupported\" /* AuthErrorCode.WEB_STORAGE_UNSUPPORTED */]: 'This browser is not supported or 3rd party cookies and data may be disabled.',\r\n [\"already-initialized\" /* AuthErrorCode.ALREADY_INITIALIZED */]: 'initializeAuth() has already been called with ' +\r\n 'different options. To avoid this error, call initializeAuth() with the ' +\r\n 'same options as when it was originally called, or call getAuth() to return the' +\r\n ' already initialized instance.'\r\n };\r\n}\r\nfunction _prodErrorMap() {\r\n // We will include this one message in the prod error map since by the very\r\n // nature of this error, developers will never be able to see the message\r\n // using the debugErrorMap (which is installed during auth initialization).\r\n return {\r\n [\"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */]: 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\r\n 'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\r\n 'starting any other Firebase SDK.'\r\n };\r\n}\r\n/**\r\n * A verbose error map with detailed descriptions for most error codes.\r\n *\r\n * See discussion at {@link AuthErrorMap}\r\n *\r\n * @public\r\n */\r\nconst debugErrorMap = _debugErrorMap;\r\n/**\r\n * A minimal error map with all verbose error messages stripped.\r\n *\r\n * See discussion at {@link AuthErrorMap}\r\n *\r\n * @public\r\n */\r\nconst prodErrorMap = _prodErrorMap;\r\nconst _DEFAULT_AUTH_ERROR_FACTORY = new ErrorFactory('auth', 'Firebase', _prodErrorMap());\r\n/**\r\n * A map of potential `Auth` error codes, for easier comparison with errors\r\n * thrown by the SDK.\r\n *\r\n * @remarks\r\n * Note that you can't tree-shake individual keys\r\n * in the map, so by using the map you might substantially increase your\r\n * bundle size.\r\n *\r\n * @public\r\n */\r\nconst AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY = {\r\n ADMIN_ONLY_OPERATION: 'auth/admin-restricted-operation',\r\n ARGUMENT_ERROR: 'auth/argument-error',\r\n APP_NOT_AUTHORIZED: 'auth/app-not-authorized',\r\n APP_NOT_INSTALLED: 'auth/app-not-installed',\r\n CAPTCHA_CHECK_FAILED: 'auth/captcha-check-failed',\r\n CODE_EXPIRED: 'auth/code-expired',\r\n CORDOVA_NOT_READY: 'auth/cordova-not-ready',\r\n CORS_UNSUPPORTED: 'auth/cors-unsupported',\r\n CREDENTIAL_ALREADY_IN_USE: 'auth/credential-already-in-use',\r\n CREDENTIAL_MISMATCH: 'auth/custom-token-mismatch',\r\n CREDENTIAL_TOO_OLD_LOGIN_AGAIN: 'auth/requires-recent-login',\r\n DEPENDENT_SDK_INIT_BEFORE_AUTH: 'auth/dependent-sdk-initialized-before-auth',\r\n DYNAMIC_LINK_NOT_ACTIVATED: 'auth/dynamic-link-not-activated',\r\n EMAIL_CHANGE_NEEDS_VERIFICATION: 'auth/email-change-needs-verification',\r\n EMAIL_EXISTS: 'auth/email-already-in-use',\r\n EMULATOR_CONFIG_FAILED: 'auth/emulator-config-failed',\r\n EXPIRED_OOB_CODE: 'auth/expired-action-code',\r\n EXPIRED_POPUP_REQUEST: 'auth/cancelled-popup-request',\r\n INTERNAL_ERROR: 'auth/internal-error',\r\n INVALID_API_KEY: 'auth/invalid-api-key',\r\n INVALID_APP_CREDENTIAL: 'auth/invalid-app-credential',\r\n INVALID_APP_ID: 'auth/invalid-app-id',\r\n INVALID_AUTH: 'auth/invalid-user-token',\r\n INVALID_AUTH_EVENT: 'auth/invalid-auth-event',\r\n INVALID_CERT_HASH: 'auth/invalid-cert-hash',\r\n INVALID_CODE: 'auth/invalid-verification-code',\r\n INVALID_CONTINUE_URI: 'auth/invalid-continue-uri',\r\n INVALID_CORDOVA_CONFIGURATION: 'auth/invalid-cordova-configuration',\r\n INVALID_CUSTOM_TOKEN: 'auth/invalid-custom-token',\r\n INVALID_DYNAMIC_LINK_DOMAIN: 'auth/invalid-dynamic-link-domain',\r\n INVALID_EMAIL: 'auth/invalid-email',\r\n INVALID_EMULATOR_SCHEME: 'auth/invalid-emulator-scheme',\r\n INVALID_IDP_RESPONSE: 'auth/invalid-credential',\r\n INVALID_MESSAGE_PAYLOAD: 'auth/invalid-message-payload',\r\n INVALID_MFA_SESSION: 'auth/invalid-multi-factor-session',\r\n INVALID_OAUTH_CLIENT_ID: 'auth/invalid-oauth-client-id',\r\n INVALID_OAUTH_PROVIDER: 'auth/invalid-oauth-provider',\r\n INVALID_OOB_CODE: 'auth/invalid-action-code',\r\n INVALID_ORIGIN: 'auth/unauthorized-domain',\r\n INVALID_PASSWORD: 'auth/wrong-password',\r\n INVALID_PERSISTENCE: 'auth/invalid-persistence-type',\r\n INVALID_PHONE_NUMBER: 'auth/invalid-phone-number',\r\n INVALID_PROVIDER_ID: 'auth/invalid-provider-id',\r\n INVALID_RECIPIENT_EMAIL: 'auth/invalid-recipient-email',\r\n INVALID_SENDER: 'auth/invalid-sender',\r\n INVALID_SESSION_INFO: 'auth/invalid-verification-id',\r\n INVALID_TENANT_ID: 'auth/invalid-tenant-id',\r\n MFA_INFO_NOT_FOUND: 'auth/multi-factor-info-not-found',\r\n MFA_REQUIRED: 'auth/multi-factor-auth-required',\r\n MISSING_ANDROID_PACKAGE_NAME: 'auth/missing-android-pkg-name',\r\n MISSING_APP_CREDENTIAL: 'auth/missing-app-credential',\r\n MISSING_AUTH_DOMAIN: 'auth/auth-domain-config-required',\r\n MISSING_CODE: 'auth/missing-verification-code',\r\n MISSING_CONTINUE_URI: 'auth/missing-continue-uri',\r\n MISSING_IFRAME_START: 'auth/missing-iframe-start',\r\n MISSING_IOS_BUNDLE_ID: 'auth/missing-ios-bundle-id',\r\n MISSING_OR_INVALID_NONCE: 'auth/missing-or-invalid-nonce',\r\n MISSING_MFA_INFO: 'auth/missing-multi-factor-info',\r\n MISSING_MFA_SESSION: 'auth/missing-multi-factor-session',\r\n MISSING_PHONE_NUMBER: 'auth/missing-phone-number',\r\n MISSING_SESSION_INFO: 'auth/missing-verification-id',\r\n MODULE_DESTROYED: 'auth/app-deleted',\r\n NEED_CONFIRMATION: 'auth/account-exists-with-different-credential',\r\n NETWORK_REQUEST_FAILED: 'auth/network-request-failed',\r\n NULL_USER: 'auth/null-user',\r\n NO_AUTH_EVENT: 'auth/no-auth-event',\r\n NO_SUCH_PROVIDER: 'auth/no-such-provider',\r\n OPERATION_NOT_ALLOWED: 'auth/operation-not-allowed',\r\n OPERATION_NOT_SUPPORTED: 'auth/operation-not-supported-in-this-environment',\r\n POPUP_BLOCKED: 'auth/popup-blocked',\r\n POPUP_CLOSED_BY_USER: 'auth/popup-closed-by-user',\r\n PROVIDER_ALREADY_LINKED: 'auth/provider-already-linked',\r\n QUOTA_EXCEEDED: 'auth/quota-exceeded',\r\n REDIRECT_CANCELLED_BY_USER: 'auth/redirect-cancelled-by-user',\r\n REDIRECT_OPERATION_PENDING: 'auth/redirect-operation-pending',\r\n REJECTED_CREDENTIAL: 'auth/rejected-credential',\r\n SECOND_FACTOR_ALREADY_ENROLLED: 'auth/second-factor-already-in-use',\r\n SECOND_FACTOR_LIMIT_EXCEEDED: 'auth/maximum-second-factor-count-exceeded',\r\n TENANT_ID_MISMATCH: 'auth/tenant-id-mismatch',\r\n TIMEOUT: 'auth/timeout',\r\n TOKEN_EXPIRED: 'auth/user-token-expired',\r\n TOO_MANY_ATTEMPTS_TRY_LATER: 'auth/too-many-requests',\r\n UNAUTHORIZED_DOMAIN: 'auth/unauthorized-continue-uri',\r\n UNSUPPORTED_FIRST_FACTOR: 'auth/unsupported-first-factor',\r\n UNSUPPORTED_PERSISTENCE: 'auth/unsupported-persistence-type',\r\n UNSUPPORTED_TENANT_OPERATION: 'auth/unsupported-tenant-operation',\r\n UNVERIFIED_EMAIL: 'auth/unverified-email',\r\n USER_CANCELLED: 'auth/user-cancelled',\r\n USER_DELETED: 'auth/user-not-found',\r\n USER_DISABLED: 'auth/user-disabled',\r\n USER_MISMATCH: 'auth/user-mismatch',\r\n USER_SIGNED_OUT: 'auth/user-signed-out',\r\n WEAK_PASSWORD: 'auth/weak-password',\r\n WEB_STORAGE_UNSUPPORTED: 'auth/web-storage-unsupported',\r\n ALREADY_INITIALIZED: 'auth/already-initialized'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logClient = new Logger('@firebase/auth');\r\nfunction _logError(msg, ...args) {\r\n if (logClient.logLevel <= LogLevel.ERROR) {\r\n logClient.error(`Auth (${SDK_VERSION}): ${msg}`, ...args);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _fail(authOrCode, ...rest) {\r\n throw createErrorInternal(authOrCode, ...rest);\r\n}\r\nfunction _createError(authOrCode, ...rest) {\r\n return createErrorInternal(authOrCode, ...rest);\r\n}\r\nfunction _errorWithCustomMessage(auth, code, message) {\r\n const errorMap = Object.assign(Object.assign({}, prodErrorMap()), { [code]: message });\r\n const factory = new ErrorFactory('auth', 'Firebase', errorMap);\r\n return factory.create(code, {\r\n appName: auth.name\r\n });\r\n}\r\nfunction _assertInstanceOf(auth, object, instance) {\r\n const constructorInstance = instance;\r\n if (!(object instanceof constructorInstance)) {\r\n if (constructorInstance.name !== object.constructor.name) {\r\n _fail(auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n }\r\n throw _errorWithCustomMessage(auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */, `Type of ${object.constructor.name} does not match expected instance.` +\r\n `Did you pass a reference from a different Auth SDK?`);\r\n }\r\n}\r\nfunction createErrorInternal(authOrCode, ...rest) {\r\n if (typeof authOrCode !== 'string') {\r\n const code = rest[0];\r\n const fullParams = [...rest.slice(1)];\r\n if (fullParams[0]) {\r\n fullParams[0].appName = authOrCode.name;\r\n }\r\n return authOrCode._errorFactory.create(code, ...fullParams);\r\n }\r\n return _DEFAULT_AUTH_ERROR_FACTORY.create(authOrCode, ...rest);\r\n}\r\nfunction _assert(assertion, authOrCode, ...rest) {\r\n if (!assertion) {\r\n throw createErrorInternal(authOrCode, ...rest);\r\n }\r\n}\r\n/**\r\n * Unconditionally fails, throwing an internal error with the given message.\r\n *\r\n * @param failure type of failure encountered\r\n * @throws Error\r\n */\r\nfunction debugFail(failure) {\r\n // Log the failure in addition to throw an exception, just in case the\r\n // exception is swallowed.\r\n const message = `INTERNAL ASSERTION FAILED: ` + failure;\r\n _logError(message);\r\n // NOTE: We don't use FirebaseError here because these are internal failures\r\n // that cannot be handled by the user. (Also it would create a circular\r\n // dependency between the error and assert modules which doesn't work.)\r\n throw new Error(message);\r\n}\r\n/**\r\n * Fails if the given assertion condition is false, throwing an Error with the\r\n * given message if it did.\r\n *\r\n * @param assertion\r\n * @param message\r\n */\r\nfunction debugAssert(assertion, message) {\r\n if (!assertion) {\r\n debugFail(message);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst instanceCache = new Map();\r\nfunction _getInstance(cls) {\r\n debugAssert(cls instanceof Function, 'Expected a class definition');\r\n let instance = instanceCache.get(cls);\r\n if (instance) {\r\n debugAssert(instance instanceof cls, 'Instance stored in cache mismatched with class');\r\n return instance;\r\n }\r\n instance = new cls();\r\n instanceCache.set(cls, instance);\r\n return instance;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Initializes an {@link Auth} instance with fine-grained control over\r\n * {@link Dependencies}.\r\n *\r\n * @remarks\r\n *\r\n * This function allows more control over the {@link Auth} instance than\r\n * {@link getAuth}. `getAuth` uses platform-specific defaults to supply\r\n * the {@link Dependencies}. In general, `getAuth` is the easiest way to\r\n * initialize Auth and works for most use cases. Use `initializeAuth` if you\r\n * need control over which persistence layer is used, or to minimize bundle\r\n * size if you're not using either `signInWithPopup` or `signInWithRedirect`.\r\n *\r\n * For example, if your app only uses anonymous accounts and you only want\r\n * accounts saved for the current session, initialize `Auth` with:\r\n *\r\n * ```js\r\n * const auth = initializeAuth(app, {\r\n * persistence: browserSessionPersistence,\r\n * popupRedirectResolver: undefined,\r\n * });\r\n * ```\r\n *\r\n * @public\r\n */\r\nfunction initializeAuth(app, deps) {\r\n const provider = _getProvider(app, 'auth');\r\n if (provider.isInitialized()) {\r\n const auth = provider.getImmediate();\r\n const initialOptions = provider.getOptions();\r\n if (deepEqual(initialOptions, deps !== null && deps !== void 0 ? deps : {})) {\r\n return auth;\r\n }\r\n else {\r\n _fail(auth, \"already-initialized\" /* AuthErrorCode.ALREADY_INITIALIZED */);\r\n }\r\n }\r\n const auth = provider.initialize({ options: deps });\r\n return auth;\r\n}\r\nfunction _initializeAuthInstance(auth, deps) {\r\n const persistence = (deps === null || deps === void 0 ? void 0 : deps.persistence) || [];\r\n const hierarchy = (Array.isArray(persistence) ? persistence : [persistence]).map(_getInstance);\r\n if (deps === null || deps === void 0 ? void 0 : deps.errorMap) {\r\n auth._updateErrorMap(deps.errorMap);\r\n }\r\n // This promise is intended to float; auth initialization happens in the\r\n // background, meanwhile the auth object may be used by the app.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n auth._initializeWithPersistence(hierarchy, deps === null || deps === void 0 ? void 0 : deps.popupRedirectResolver);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _getCurrentUrl() {\r\n var _a;\r\n return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.href)) || '';\r\n}\r\nfunction _isHttpOrHttps() {\r\n return _getCurrentScheme() === 'http:' || _getCurrentScheme() === 'https:';\r\n}\r\nfunction _getCurrentScheme() {\r\n var _a;\r\n return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.protocol)) || null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Determine whether the browser is working online\r\n */\r\nfunction _isOnline() {\r\n if (typeof navigator !== 'undefined' &&\r\n navigator &&\r\n 'onLine' in navigator &&\r\n typeof navigator.onLine === 'boolean' &&\r\n // Apply only for traditional web apps and Chrome extensions.\r\n // This is especially true for Cordova apps which have unreliable\r\n // navigator.onLine behavior unless cordova-plugin-network-information is\r\n // installed which overwrites the native navigator.onLine value and\r\n // defines navigator.connection.\r\n (_isHttpOrHttps() || isBrowserExtension() || 'connection' in navigator)) {\r\n return navigator.onLine;\r\n }\r\n // If we can't determine the state, assume it is online.\r\n return true;\r\n}\r\nfunction _getUserLanguage() {\r\n if (typeof navigator === 'undefined') {\r\n return null;\r\n }\r\n const navigatorLanguage = navigator;\r\n return (\r\n // Most reliable, but only supported in Chrome/Firefox.\r\n (navigatorLanguage.languages && navigatorLanguage.languages[0]) ||\r\n // Supported in most browsers, but returns the language of the browser\r\n // UI, not the language set in browser settings.\r\n navigatorLanguage.language ||\r\n // Couldn't determine language.\r\n null);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A structure to help pick between a range of long and short delay durations\r\n * depending on the current environment. In general, the long delay is used for\r\n * mobile environments whereas short delays are used for desktop environments.\r\n */\r\nclass Delay {\r\n constructor(shortDelay, longDelay) {\r\n this.shortDelay = shortDelay;\r\n this.longDelay = longDelay;\r\n // Internal error when improperly initialized.\r\n debugAssert(longDelay > shortDelay, 'Short delay should be less than long delay!');\r\n this.isMobile = isMobileCordova() || isReactNative();\r\n }\r\n get() {\r\n if (!_isOnline()) {\r\n // Pick the shorter timeout.\r\n return Math.min(5000 /* DelayMin.OFFLINE */, this.shortDelay);\r\n }\r\n // If running in a mobile environment, return the long delay, otherwise\r\n // return the short delay.\r\n // This could be improved in the future to dynamically change based on other\r\n // variables instead of just reading the current environment.\r\n return this.isMobile ? this.longDelay : this.shortDelay;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _emulatorUrl(config, path) {\r\n debugAssert(config.emulator, 'Emulator should always be set here');\r\n const { url } = config.emulator;\r\n if (!path) {\r\n return url;\r\n }\r\n return `${url}${path.startsWith('/') ? path.slice(1) : path}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FetchProvider {\r\n static initialize(fetchImpl, headersImpl, responseImpl) {\r\n this.fetchImpl = fetchImpl;\r\n if (headersImpl) {\r\n this.headersImpl = headersImpl;\r\n }\r\n if (responseImpl) {\r\n this.responseImpl = responseImpl;\r\n }\r\n }\r\n static fetch() {\r\n if (this.fetchImpl) {\r\n return this.fetchImpl;\r\n }\r\n if (typeof self !== 'undefined' && 'fetch' in self) {\r\n return self.fetch;\r\n }\r\n debugFail('Could not find fetch implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n }\r\n static headers() {\r\n if (this.headersImpl) {\r\n return this.headersImpl;\r\n }\r\n if (typeof self !== 'undefined' && 'Headers' in self) {\r\n return self.Headers;\r\n }\r\n debugFail('Could not find Headers implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n }\r\n static response() {\r\n if (this.responseImpl) {\r\n return this.responseImpl;\r\n }\r\n if (typeof self !== 'undefined' && 'Response' in self) {\r\n return self.Response;\r\n }\r\n debugFail('Could not find Response implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Map from errors returned by the server to errors to developer visible errors\r\n */\r\nconst SERVER_ERROR_MAP = {\r\n // Custom token errors.\r\n [\"CREDENTIAL_MISMATCH\" /* ServerError.CREDENTIAL_MISMATCH */]: \"custom-token-mismatch\" /* AuthErrorCode.CREDENTIAL_MISMATCH */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_CUSTOM_TOKEN\" /* ServerError.MISSING_CUSTOM_TOKEN */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Create Auth URI errors.\r\n [\"INVALID_IDENTIFIER\" /* ServerError.INVALID_IDENTIFIER */]: \"invalid-email\" /* AuthErrorCode.INVALID_EMAIL */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_CONTINUE_URI\" /* ServerError.MISSING_CONTINUE_URI */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Sign in with email and password errors (some apply to sign up too).\r\n [\"INVALID_PASSWORD\" /* ServerError.INVALID_PASSWORD */]: \"wrong-password\" /* AuthErrorCode.INVALID_PASSWORD */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_PASSWORD\" /* ServerError.MISSING_PASSWORD */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Sign up with email and password errors.\r\n [\"EMAIL_EXISTS\" /* ServerError.EMAIL_EXISTS */]: \"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */,\r\n [\"PASSWORD_LOGIN_DISABLED\" /* ServerError.PASSWORD_LOGIN_DISABLED */]: \"operation-not-allowed\" /* AuthErrorCode.OPERATION_NOT_ALLOWED */,\r\n // Verify assertion for sign in with credential errors:\r\n [\"INVALID_IDP_RESPONSE\" /* ServerError.INVALID_IDP_RESPONSE */]: \"invalid-credential\" /* AuthErrorCode.INVALID_IDP_RESPONSE */,\r\n [\"INVALID_PENDING_TOKEN\" /* ServerError.INVALID_PENDING_TOKEN */]: \"invalid-credential\" /* AuthErrorCode.INVALID_IDP_RESPONSE */,\r\n [\"FEDERATED_USER_ID_ALREADY_LINKED\" /* ServerError.FEDERATED_USER_ID_ALREADY_LINKED */]: \"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_REQ_TYPE\" /* ServerError.MISSING_REQ_TYPE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Send Password reset email errors:\r\n [\"EMAIL_NOT_FOUND\" /* ServerError.EMAIL_NOT_FOUND */]: \"user-not-found\" /* AuthErrorCode.USER_DELETED */,\r\n [\"RESET_PASSWORD_EXCEED_LIMIT\" /* ServerError.RESET_PASSWORD_EXCEED_LIMIT */]: \"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */,\r\n [\"EXPIRED_OOB_CODE\" /* ServerError.EXPIRED_OOB_CODE */]: \"expired-action-code\" /* AuthErrorCode.EXPIRED_OOB_CODE */,\r\n [\"INVALID_OOB_CODE\" /* ServerError.INVALID_OOB_CODE */]: \"invalid-action-code\" /* AuthErrorCode.INVALID_OOB_CODE */,\r\n // This can only happen if the SDK sends a bad request.\r\n [\"MISSING_OOB_CODE\" /* ServerError.MISSING_OOB_CODE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */,\r\n // Operations that require ID token in request:\r\n [\"CREDENTIAL_TOO_OLD_LOGIN_AGAIN\" /* ServerError.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */]: \"requires-recent-login\" /* AuthErrorCode.CREDENTIAL_TOO_OLD_LOGIN_AGAIN */,\r\n [\"INVALID_ID_TOKEN\" /* ServerError.INVALID_ID_TOKEN */]: \"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */,\r\n [\"TOKEN_EXPIRED\" /* ServerError.TOKEN_EXPIRED */]: \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */,\r\n [\"USER_NOT_FOUND\" /* ServerError.USER_NOT_FOUND */]: \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */,\r\n // Other errors.\r\n [\"TOO_MANY_ATTEMPTS_TRY_LATER\" /* ServerError.TOO_MANY_ATTEMPTS_TRY_LATER */]: \"too-many-requests\" /* AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER */,\r\n // Phone Auth related errors.\r\n [\"INVALID_CODE\" /* ServerError.INVALID_CODE */]: \"invalid-verification-code\" /* AuthErrorCode.INVALID_CODE */,\r\n [\"INVALID_SESSION_INFO\" /* ServerError.INVALID_SESSION_INFO */]: \"invalid-verification-id\" /* AuthErrorCode.INVALID_SESSION_INFO */,\r\n [\"INVALID_TEMPORARY_PROOF\" /* ServerError.INVALID_TEMPORARY_PROOF */]: \"invalid-credential\" /* AuthErrorCode.INVALID_IDP_RESPONSE */,\r\n [\"MISSING_SESSION_INFO\" /* ServerError.MISSING_SESSION_INFO */]: \"missing-verification-id\" /* AuthErrorCode.MISSING_SESSION_INFO */,\r\n [\"SESSION_EXPIRED\" /* ServerError.SESSION_EXPIRED */]: \"code-expired\" /* AuthErrorCode.CODE_EXPIRED */,\r\n // Other action code errors when additional settings passed.\r\n // MISSING_CONTINUE_URI is getting mapped to INTERNAL_ERROR above.\r\n // This is OK as this error will be caught by client side validation.\r\n [\"MISSING_ANDROID_PACKAGE_NAME\" /* ServerError.MISSING_ANDROID_PACKAGE_NAME */]: \"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */,\r\n [\"UNAUTHORIZED_DOMAIN\" /* ServerError.UNAUTHORIZED_DOMAIN */]: \"unauthorized-continue-uri\" /* AuthErrorCode.UNAUTHORIZED_DOMAIN */,\r\n // getProjectConfig errors when clientId is passed.\r\n [\"INVALID_OAUTH_CLIENT_ID\" /* ServerError.INVALID_OAUTH_CLIENT_ID */]: \"invalid-oauth-client-id\" /* AuthErrorCode.INVALID_OAUTH_CLIENT_ID */,\r\n // User actions (sign-up or deletion) disabled errors.\r\n [\"ADMIN_ONLY_OPERATION\" /* ServerError.ADMIN_ONLY_OPERATION */]: \"admin-restricted-operation\" /* AuthErrorCode.ADMIN_ONLY_OPERATION */,\r\n // Multi factor related errors.\r\n [\"INVALID_MFA_PENDING_CREDENTIAL\" /* ServerError.INVALID_MFA_PENDING_CREDENTIAL */]: \"invalid-multi-factor-session\" /* AuthErrorCode.INVALID_MFA_SESSION */,\r\n [\"MFA_ENROLLMENT_NOT_FOUND\" /* ServerError.MFA_ENROLLMENT_NOT_FOUND */]: \"multi-factor-info-not-found\" /* AuthErrorCode.MFA_INFO_NOT_FOUND */,\r\n [\"MISSING_MFA_ENROLLMENT_ID\" /* ServerError.MISSING_MFA_ENROLLMENT_ID */]: \"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */,\r\n [\"MISSING_MFA_PENDING_CREDENTIAL\" /* ServerError.MISSING_MFA_PENDING_CREDENTIAL */]: \"missing-multi-factor-session\" /* AuthErrorCode.MISSING_MFA_SESSION */,\r\n [\"SECOND_FACTOR_EXISTS\" /* ServerError.SECOND_FACTOR_EXISTS */]: \"second-factor-already-in-use\" /* AuthErrorCode.SECOND_FACTOR_ALREADY_ENROLLED */,\r\n [\"SECOND_FACTOR_LIMIT_EXCEEDED\" /* ServerError.SECOND_FACTOR_LIMIT_EXCEEDED */]: \"maximum-second-factor-count-exceeded\" /* AuthErrorCode.SECOND_FACTOR_LIMIT_EXCEEDED */,\r\n // Blocking functions related errors.\r\n [\"BLOCKING_FUNCTION_ERROR_RESPONSE\" /* ServerError.BLOCKING_FUNCTION_ERROR_RESPONSE */]: \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_API_TIMEOUT_MS = new Delay(30000, 60000);\r\nfunction _addTidIfNecessary(auth, request) {\r\n if (auth.tenantId && !request.tenantId) {\r\n return Object.assign(Object.assign({}, request), { tenantId: auth.tenantId });\r\n }\r\n return request;\r\n}\r\nasync function _performApiRequest(auth, method, path, request, customErrorMap = {}) {\r\n return _performFetchWithErrorHandling(auth, customErrorMap, async () => {\r\n let body = {};\r\n let params = {};\r\n if (request) {\r\n if (method === \"GET\" /* HttpMethod.GET */) {\r\n params = request;\r\n }\r\n else {\r\n body = {\r\n body: JSON.stringify(request)\r\n };\r\n }\r\n }\r\n const query = querystring(Object.assign({ key: auth.config.apiKey }, params)).slice(1);\r\n const headers = await auth._getAdditionalHeaders();\r\n headers[\"Content-Type\" /* HttpHeader.CONTENT_TYPE */] = 'application/json';\r\n if (auth.languageCode) {\r\n headers[\"X-Firebase-Locale\" /* HttpHeader.X_FIREBASE_LOCALE */] = auth.languageCode;\r\n }\r\n return FetchProvider.fetch()(_getFinalTarget(auth, auth.config.apiHost, path, query), Object.assign({ method,\r\n headers, referrerPolicy: 'no-referrer' }, body));\r\n });\r\n}\r\nasync function _performFetchWithErrorHandling(auth, customErrorMap, fetchFn) {\r\n auth._canInitEmulator = false;\r\n const errorMap = Object.assign(Object.assign({}, SERVER_ERROR_MAP), customErrorMap);\r\n try {\r\n const networkTimeout = new NetworkTimeout(auth);\r\n const response = await Promise.race([\r\n fetchFn(),\r\n networkTimeout.promise\r\n ]);\r\n // If we've reached this point, the fetch succeeded and the networkTimeout\r\n // didn't throw; clear the network timeout delay so that Node won't hang\r\n networkTimeout.clearNetworkTimeout();\r\n const json = await response.json();\r\n if ('needConfirmation' in json) {\r\n throw _makeTaggedError(auth, \"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */, json);\r\n }\r\n if (response.ok && !('errorMessage' in json)) {\r\n return json;\r\n }\r\n else {\r\n const errorMessage = response.ok ? json.errorMessage : json.error.message;\r\n const [serverErrorCode, serverErrorMessage] = errorMessage.split(' : ');\r\n if (serverErrorCode === \"FEDERATED_USER_ID_ALREADY_LINKED\" /* ServerError.FEDERATED_USER_ID_ALREADY_LINKED */) {\r\n throw _makeTaggedError(auth, \"credential-already-in-use\" /* AuthErrorCode.CREDENTIAL_ALREADY_IN_USE */, json);\r\n }\r\n else if (serverErrorCode === \"EMAIL_EXISTS\" /* ServerError.EMAIL_EXISTS */) {\r\n throw _makeTaggedError(auth, \"email-already-in-use\" /* AuthErrorCode.EMAIL_EXISTS */, json);\r\n }\r\n else if (serverErrorCode === \"USER_DISABLED\" /* ServerError.USER_DISABLED */) {\r\n throw _makeTaggedError(auth, \"user-disabled\" /* AuthErrorCode.USER_DISABLED */, json);\r\n }\r\n const authError = errorMap[serverErrorCode] ||\r\n serverErrorCode\r\n .toLowerCase()\r\n .replace(/[_\\s]+/g, '-');\r\n if (serverErrorMessage) {\r\n throw _errorWithCustomMessage(auth, authError, serverErrorMessage);\r\n }\r\n else {\r\n _fail(auth, authError);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n throw e;\r\n }\r\n _fail(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */);\r\n }\r\n}\r\nasync function _performSignInRequest(auth, method, path, request, customErrorMap = {}) {\r\n const serverResponse = (await _performApiRequest(auth, method, path, request, customErrorMap));\r\n if ('mfaPendingCredential' in serverResponse) {\r\n _fail(auth, \"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */, {\r\n _serverResponse: serverResponse\r\n });\r\n }\r\n return serverResponse;\r\n}\r\nfunction _getFinalTarget(auth, host, path, query) {\r\n const base = `${host}${path}?${query}`;\r\n if (!auth.config.emulator) {\r\n return `${auth.config.apiScheme}://${base}`;\r\n }\r\n return _emulatorUrl(auth.config, base);\r\n}\r\nclass NetworkTimeout {\r\n constructor(auth) {\r\n this.auth = auth;\r\n // Node timers and browser timers are fundamentally incompatible, but we\r\n // don't care about the value here\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.timer = null;\r\n this.promise = new Promise((_, reject) => {\r\n this.timer = setTimeout(() => {\r\n return reject(_createError(this.auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n }, DEFAULT_API_TIMEOUT_MS.get());\r\n });\r\n }\r\n clearNetworkTimeout() {\r\n clearTimeout(this.timer);\r\n }\r\n}\r\nfunction _makeTaggedError(auth, code, response) {\r\n const errorParams = {\r\n appName: auth.name\r\n };\r\n if (response.email) {\r\n errorParams.email = response.email;\r\n }\r\n if (response.phoneNumber) {\r\n errorParams.phoneNumber = response.phoneNumber;\r\n }\r\n const error = _createError(auth, code, errorParams);\r\n // We know customData is defined on error because errorParams is defined\r\n error.customData._tokenResponse = response;\r\n return error;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function deleteAccount(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:delete\" /* Endpoint.DELETE_ACCOUNT */, request);\r\n}\r\nasync function deleteLinkedAccounts(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\r\n}\r\nasync function getAccountInfo(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:lookup\" /* Endpoint.GET_ACCOUNT_INFO */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction utcTimestampToDateString(utcTimestamp) {\r\n if (!utcTimestamp) {\r\n return undefined;\r\n }\r\n try {\r\n // Convert to date object.\r\n const date = new Date(Number(utcTimestamp));\r\n // Test date is valid.\r\n if (!isNaN(date.getTime())) {\r\n // Convert to UTC date string.\r\n return date.toUTCString();\r\n }\r\n }\r\n catch (e) {\r\n // Do nothing. undefined will be returned.\r\n }\r\n return undefined;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a JSON Web Token (JWT) used to identify the user to a Firebase service.\r\n *\r\n * @remarks\r\n * Returns the current token if it has not expired or if it will not expire in the next five\r\n * minutes. Otherwise, this will refresh the token and return a new one.\r\n *\r\n * @param user - The user.\r\n * @param forceRefresh - Force refresh regardless of token expiration.\r\n *\r\n * @public\r\n */\r\nfunction getIdToken(user, forceRefresh = false) {\r\n return getModularInstance(user).getIdToken(forceRefresh);\r\n}\r\n/**\r\n * Returns a deserialized JSON Web Token (JWT) used to identitfy the user to a Firebase service.\r\n *\r\n * @remarks\r\n * Returns the current token if it has not expired or if it will not expire in the next five\r\n * minutes. Otherwise, this will refresh the token and return a new one.\r\n *\r\n * @param user - The user.\r\n * @param forceRefresh - Force refresh regardless of token expiration.\r\n *\r\n * @public\r\n */\r\nasync function getIdTokenResult(user, forceRefresh = false) {\r\n const userInternal = getModularInstance(user);\r\n const token = await userInternal.getIdToken(forceRefresh);\r\n const claims = _parseToken(token);\r\n _assert(claims && claims.exp && claims.auth_time && claims.iat, userInternal.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const firebase = typeof claims.firebase === 'object' ? claims.firebase : undefined;\r\n const signInProvider = firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_provider'];\r\n return {\r\n claims,\r\n token,\r\n authTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.auth_time)),\r\n issuedAtTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.iat)),\r\n expirationTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.exp)),\r\n signInProvider: signInProvider || null,\r\n signInSecondFactor: (firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_second_factor']) || null\r\n };\r\n}\r\nfunction secondsStringToMilliseconds(seconds) {\r\n return Number(seconds) * 1000;\r\n}\r\nfunction _parseToken(token) {\r\n const [algorithm, payload, signature] = token.split('.');\r\n if (algorithm === undefined ||\r\n payload === undefined ||\r\n signature === undefined) {\r\n _logError('JWT malformed, contained fewer than 3 sections');\r\n return null;\r\n }\r\n try {\r\n const decoded = base64Decode(payload);\r\n if (!decoded) {\r\n _logError('Failed to decode base64 JWT payload');\r\n return null;\r\n }\r\n return JSON.parse(decoded);\r\n }\r\n catch (e) {\r\n _logError('Caught error parsing JWT payload as JSON', e === null || e === void 0 ? void 0 : e.toString());\r\n return null;\r\n }\r\n}\r\n/**\r\n * Extract expiresIn TTL from a token by subtracting the expiration from the issuance.\r\n */\r\nfunction _tokenExpiresIn(token) {\r\n const parsedToken = _parseToken(token);\r\n _assert(parsedToken, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof parsedToken.exp !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof parsedToken.iat !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return Number(parsedToken.exp) - Number(parsedToken.iat);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _logoutIfInvalidated(user, promise, bypassAuthState = false) {\r\n if (bypassAuthState) {\r\n return promise;\r\n }\r\n try {\r\n return await promise;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError && isUserInvalidated(e)) {\r\n if (user.auth.currentUser === user) {\r\n await user.auth.signOut();\r\n }\r\n }\r\n throw e;\r\n }\r\n}\r\nfunction isUserInvalidated({ code }) {\r\n return (code === `auth/${\"user-disabled\" /* AuthErrorCode.USER_DISABLED */}` ||\r\n code === `auth/${\"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */}`);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ProactiveRefresh {\r\n constructor(user) {\r\n this.user = user;\r\n this.isRunning = false;\r\n // Node timers and browser timers return fundamentally different types.\r\n // We don't actually care what the value is but TS won't accept unknown and\r\n // we can't cast properly in both environments.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.timerId = null;\r\n this.errorBackoff = 30000 /* Duration.RETRY_BACKOFF_MIN */;\r\n }\r\n _start() {\r\n if (this.isRunning) {\r\n return;\r\n }\r\n this.isRunning = true;\r\n this.schedule();\r\n }\r\n _stop() {\r\n if (!this.isRunning) {\r\n return;\r\n }\r\n this.isRunning = false;\r\n if (this.timerId !== null) {\r\n clearTimeout(this.timerId);\r\n }\r\n }\r\n getInterval(wasError) {\r\n var _a;\r\n if (wasError) {\r\n const interval = this.errorBackoff;\r\n this.errorBackoff = Math.min(this.errorBackoff * 2, 960000 /* Duration.RETRY_BACKOFF_MAX */);\r\n return interval;\r\n }\r\n else {\r\n // Reset the error backoff\r\n this.errorBackoff = 30000 /* Duration.RETRY_BACKOFF_MIN */;\r\n const expTime = (_a = this.user.stsTokenManager.expirationTime) !== null && _a !== void 0 ? _a : 0;\r\n const interval = expTime - Date.now() - 300000 /* Duration.OFFSET */;\r\n return Math.max(0, interval);\r\n }\r\n }\r\n schedule(wasError = false) {\r\n if (!this.isRunning) {\r\n // Just in case...\r\n return;\r\n }\r\n const interval = this.getInterval(wasError);\r\n this.timerId = setTimeout(async () => {\r\n await this.iteration();\r\n }, interval);\r\n }\r\n async iteration() {\r\n try {\r\n await this.user.getIdToken(true);\r\n }\r\n catch (e) {\r\n // Only retry on network errors\r\n if ((e === null || e === void 0 ? void 0 : e.code) ===\r\n `auth/${\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */}`) {\r\n this.schedule(/* wasError */ true);\r\n }\r\n return;\r\n }\r\n this.schedule();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass UserMetadata {\r\n constructor(createdAt, lastLoginAt) {\r\n this.createdAt = createdAt;\r\n this.lastLoginAt = lastLoginAt;\r\n this._initializeTime();\r\n }\r\n _initializeTime() {\r\n this.lastSignInTime = utcTimestampToDateString(this.lastLoginAt);\r\n this.creationTime = utcTimestampToDateString(this.createdAt);\r\n }\r\n _copy(metadata) {\r\n this.createdAt = metadata.createdAt;\r\n this.lastLoginAt = metadata.lastLoginAt;\r\n this._initializeTime();\r\n }\r\n toJSON() {\r\n return {\r\n createdAt: this.createdAt,\r\n lastLoginAt: this.lastLoginAt\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _reloadWithoutSaving(user) {\r\n var _a;\r\n const auth = user.auth;\r\n const idToken = await user.getIdToken();\r\n const response = await _logoutIfInvalidated(user, getAccountInfo(auth, { idToken }));\r\n _assert(response === null || response === void 0 ? void 0 : response.users.length, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const coreAccount = response.users[0];\r\n user._notifyReloadListener(coreAccount);\r\n const newProviderData = ((_a = coreAccount.providerUserInfo) === null || _a === void 0 ? void 0 : _a.length)\r\n ? extractProviderData(coreAccount.providerUserInfo)\r\n : [];\r\n const providerData = mergeProviderData(user.providerData, newProviderData);\r\n // Preserves the non-nonymous status of the stored user, even if no more\r\n // credentials (federated or email/password) are linked to the user. If\r\n // the user was previously anonymous, then use provider data to update.\r\n // On the other hand, if it was not anonymous before, it should never be\r\n // considered anonymous now.\r\n const oldIsAnonymous = user.isAnonymous;\r\n const newIsAnonymous = !(user.email && coreAccount.passwordHash) && !(providerData === null || providerData === void 0 ? void 0 : providerData.length);\r\n const isAnonymous = !oldIsAnonymous ? false : newIsAnonymous;\r\n const updates = {\r\n uid: coreAccount.localId,\r\n displayName: coreAccount.displayName || null,\r\n photoURL: coreAccount.photoUrl || null,\r\n email: coreAccount.email || null,\r\n emailVerified: coreAccount.emailVerified || false,\r\n phoneNumber: coreAccount.phoneNumber || null,\r\n tenantId: coreAccount.tenantId || null,\r\n providerData,\r\n metadata: new UserMetadata(coreAccount.createdAt, coreAccount.lastLoginAt),\r\n isAnonymous\r\n };\r\n Object.assign(user, updates);\r\n}\r\n/**\r\n * Reloads user account data, if signed in.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nasync function reload(user) {\r\n const userInternal = getModularInstance(user);\r\n await _reloadWithoutSaving(userInternal);\r\n // Even though the current user hasn't changed, update\r\n // current user will trigger a persistence update w/ the\r\n // new info.\r\n await userInternal.auth._persistUserIfCurrent(userInternal);\r\n userInternal.auth._notifyListenersIfCurrent(userInternal);\r\n}\r\nfunction mergeProviderData(original, newData) {\r\n const deduped = original.filter(o => !newData.some(n => n.providerId === o.providerId));\r\n return [...deduped, ...newData];\r\n}\r\nfunction extractProviderData(providers) {\r\n return providers.map((_a) => {\r\n var { providerId } = _a, provider = __rest(_a, [\"providerId\"]);\r\n return {\r\n providerId,\r\n uid: provider.rawId || '',\r\n displayName: provider.displayName || null,\r\n email: provider.email || null,\r\n phoneNumber: provider.phoneNumber || null,\r\n photoURL: provider.photoUrl || null\r\n };\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function requestStsToken(auth, refreshToken) {\r\n const response = await _performFetchWithErrorHandling(auth, {}, async () => {\r\n const body = querystring({\r\n 'grant_type': 'refresh_token',\r\n 'refresh_token': refreshToken\r\n }).slice(1);\r\n const { tokenApiHost, apiKey } = auth.config;\r\n const url = _getFinalTarget(auth, tokenApiHost, \"/v1/token\" /* Endpoint.TOKEN */, `key=${apiKey}`);\r\n const headers = await auth._getAdditionalHeaders();\r\n headers[\"Content-Type\" /* HttpHeader.CONTENT_TYPE */] = 'application/x-www-form-urlencoded';\r\n return FetchProvider.fetch()(url, {\r\n method: \"POST\" /* HttpMethod.POST */,\r\n headers,\r\n body\r\n });\r\n });\r\n // The response comes back in snake_case. Convert to camel:\r\n return {\r\n accessToken: response.access_token,\r\n expiresIn: response.expires_in,\r\n refreshToken: response.refresh_token\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * We need to mark this class as internal explicitly to exclude it in the public typings, because\r\n * it references AuthInternal which has a circular dependency with UserInternal.\r\n *\r\n * @internal\r\n */\r\nclass StsTokenManager {\r\n constructor() {\r\n this.refreshToken = null;\r\n this.accessToken = null;\r\n this.expirationTime = null;\r\n }\r\n get isExpired() {\r\n return (!this.expirationTime ||\r\n Date.now() > this.expirationTime - 30000 /* Buffer.TOKEN_REFRESH */);\r\n }\r\n updateFromServerResponse(response) {\r\n _assert(response.idToken, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof response.idToken !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof response.refreshToken !== 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const expiresIn = 'expiresIn' in response && typeof response.expiresIn !== 'undefined'\r\n ? Number(response.expiresIn)\r\n : _tokenExpiresIn(response.idToken);\r\n this.updateTokensAndExpiration(response.idToken, response.refreshToken, expiresIn);\r\n }\r\n async getToken(auth, forceRefresh = false) {\r\n _assert(!this.accessToken || this.refreshToken, auth, \"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */);\r\n if (!forceRefresh && this.accessToken && !this.isExpired) {\r\n return this.accessToken;\r\n }\r\n if (this.refreshToken) {\r\n await this.refresh(auth, this.refreshToken);\r\n return this.accessToken;\r\n }\r\n return null;\r\n }\r\n clearRefreshToken() {\r\n this.refreshToken = null;\r\n }\r\n async refresh(auth, oldToken) {\r\n const { accessToken, refreshToken, expiresIn } = await requestStsToken(auth, oldToken);\r\n this.updateTokensAndExpiration(accessToken, refreshToken, Number(expiresIn));\r\n }\r\n updateTokensAndExpiration(accessToken, refreshToken, expiresInSec) {\r\n this.refreshToken = refreshToken || null;\r\n this.accessToken = accessToken || null;\r\n this.expirationTime = Date.now() + expiresInSec * 1000;\r\n }\r\n static fromJSON(appName, object) {\r\n const { refreshToken, accessToken, expirationTime } = object;\r\n const manager = new StsTokenManager();\r\n if (refreshToken) {\r\n _assert(typeof refreshToken === 'string', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\r\n appName\r\n });\r\n manager.refreshToken = refreshToken;\r\n }\r\n if (accessToken) {\r\n _assert(typeof accessToken === 'string', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\r\n appName\r\n });\r\n manager.accessToken = accessToken;\r\n }\r\n if (expirationTime) {\r\n _assert(typeof expirationTime === 'number', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, {\r\n appName\r\n });\r\n manager.expirationTime = expirationTime;\r\n }\r\n return manager;\r\n }\r\n toJSON() {\r\n return {\r\n refreshToken: this.refreshToken,\r\n accessToken: this.accessToken,\r\n expirationTime: this.expirationTime\r\n };\r\n }\r\n _assign(stsTokenManager) {\r\n this.accessToken = stsTokenManager.accessToken;\r\n this.refreshToken = stsTokenManager.refreshToken;\r\n this.expirationTime = stsTokenManager.expirationTime;\r\n }\r\n _clone() {\r\n return Object.assign(new StsTokenManager(), this.toJSON());\r\n }\r\n _performRefresh() {\r\n return debugFail('not implemented');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction assertStringOrUndefined(assertion, appName) {\r\n _assert(typeof assertion === 'string' || typeof assertion === 'undefined', \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */, { appName });\r\n}\r\nclass UserImpl {\r\n constructor(_a) {\r\n var { uid, auth, stsTokenManager } = _a, opt = __rest(_a, [\"uid\", \"auth\", \"stsTokenManager\"]);\r\n // For the user object, provider is always Firebase.\r\n this.providerId = \"firebase\" /* ProviderId.FIREBASE */;\r\n this.proactiveRefresh = new ProactiveRefresh(this);\r\n this.reloadUserInfo = null;\r\n this.reloadListener = null;\r\n this.uid = uid;\r\n this.auth = auth;\r\n this.stsTokenManager = stsTokenManager;\r\n this.accessToken = stsTokenManager.accessToken;\r\n this.displayName = opt.displayName || null;\r\n this.email = opt.email || null;\r\n this.emailVerified = opt.emailVerified || false;\r\n this.phoneNumber = opt.phoneNumber || null;\r\n this.photoURL = opt.photoURL || null;\r\n this.isAnonymous = opt.isAnonymous || false;\r\n this.tenantId = opt.tenantId || null;\r\n this.providerData = opt.providerData ? [...opt.providerData] : [];\r\n this.metadata = new UserMetadata(opt.createdAt || undefined, opt.lastLoginAt || undefined);\r\n }\r\n async getIdToken(forceRefresh) {\r\n const accessToken = await _logoutIfInvalidated(this, this.stsTokenManager.getToken(this.auth, forceRefresh));\r\n _assert(accessToken, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n if (this.accessToken !== accessToken) {\r\n this.accessToken = accessToken;\r\n await this.auth._persistUserIfCurrent(this);\r\n this.auth._notifyListenersIfCurrent(this);\r\n }\r\n return accessToken;\r\n }\r\n getIdTokenResult(forceRefresh) {\r\n return getIdTokenResult(this, forceRefresh);\r\n }\r\n reload() {\r\n return reload(this);\r\n }\r\n _assign(user) {\r\n if (this === user) {\r\n return;\r\n }\r\n _assert(this.uid === user.uid, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n this.displayName = user.displayName;\r\n this.photoURL = user.photoURL;\r\n this.email = user.email;\r\n this.emailVerified = user.emailVerified;\r\n this.phoneNumber = user.phoneNumber;\r\n this.isAnonymous = user.isAnonymous;\r\n this.tenantId = user.tenantId;\r\n this.providerData = user.providerData.map(userInfo => (Object.assign({}, userInfo)));\r\n this.metadata._copy(user.metadata);\r\n this.stsTokenManager._assign(user.stsTokenManager);\r\n }\r\n _clone(auth) {\r\n return new UserImpl(Object.assign(Object.assign({}, this), { auth, stsTokenManager: this.stsTokenManager._clone() }));\r\n }\r\n _onReload(callback) {\r\n // There should only ever be one listener, and that is a single instance of MultiFactorUser\r\n _assert(!this.reloadListener, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n this.reloadListener = callback;\r\n if (this.reloadUserInfo) {\r\n this._notifyReloadListener(this.reloadUserInfo);\r\n this.reloadUserInfo = null;\r\n }\r\n }\r\n _notifyReloadListener(userInfo) {\r\n if (this.reloadListener) {\r\n this.reloadListener(userInfo);\r\n }\r\n else {\r\n // If no listener is subscribed yet, save the result so it's available when they do subscribe\r\n this.reloadUserInfo = userInfo;\r\n }\r\n }\r\n _startProactiveRefresh() {\r\n this.proactiveRefresh._start();\r\n }\r\n _stopProactiveRefresh() {\r\n this.proactiveRefresh._stop();\r\n }\r\n async _updateTokensIfNecessary(response, reload = false) {\r\n let tokensRefreshed = false;\r\n if (response.idToken &&\r\n response.idToken !== this.stsTokenManager.accessToken) {\r\n this.stsTokenManager.updateFromServerResponse(response);\r\n tokensRefreshed = true;\r\n }\r\n if (reload) {\r\n await _reloadWithoutSaving(this);\r\n }\r\n await this.auth._persistUserIfCurrent(this);\r\n if (tokensRefreshed) {\r\n this.auth._notifyListenersIfCurrent(this);\r\n }\r\n }\r\n async delete() {\r\n const idToken = await this.getIdToken();\r\n await _logoutIfInvalidated(this, deleteAccount(this.auth, { idToken }));\r\n this.stsTokenManager.clearRefreshToken();\r\n // TODO: Determine if cancellable-promises are necessary to use in this class so that delete()\r\n // cancels pending actions...\r\n return this.auth.signOut();\r\n }\r\n toJSON() {\r\n return Object.assign(Object.assign({ uid: this.uid, email: this.email || undefined, emailVerified: this.emailVerified, displayName: this.displayName || undefined, isAnonymous: this.isAnonymous, photoURL: this.photoURL || undefined, phoneNumber: this.phoneNumber || undefined, tenantId: this.tenantId || undefined, providerData: this.providerData.map(userInfo => (Object.assign({}, userInfo))), stsTokenManager: this.stsTokenManager.toJSON(), \r\n // Redirect event ID must be maintained in case there is a pending\r\n // redirect event.\r\n _redirectEventId: this._redirectEventId }, this.metadata.toJSON()), { \r\n // Required for compatibility with the legacy SDK (go/firebase-auth-sdk-persistence-parsing):\r\n apiKey: this.auth.config.apiKey, appName: this.auth.name });\r\n }\r\n get refreshToken() {\r\n return this.stsTokenManager.refreshToken || '';\r\n }\r\n static _fromJSON(auth, object) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h;\r\n const displayName = (_a = object.displayName) !== null && _a !== void 0 ? _a : undefined;\r\n const email = (_b = object.email) !== null && _b !== void 0 ? _b : undefined;\r\n const phoneNumber = (_c = object.phoneNumber) !== null && _c !== void 0 ? _c : undefined;\r\n const photoURL = (_d = object.photoURL) !== null && _d !== void 0 ? _d : undefined;\r\n const tenantId = (_e = object.tenantId) !== null && _e !== void 0 ? _e : undefined;\r\n const _redirectEventId = (_f = object._redirectEventId) !== null && _f !== void 0 ? _f : undefined;\r\n const createdAt = (_g = object.createdAt) !== null && _g !== void 0 ? _g : undefined;\r\n const lastLoginAt = (_h = object.lastLoginAt) !== null && _h !== void 0 ? _h : undefined;\r\n const { uid, emailVerified, isAnonymous, providerData, stsTokenManager: plainObjectTokenManager } = object;\r\n _assert(uid && plainObjectTokenManager, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const stsTokenManager = StsTokenManager.fromJSON(this.name, plainObjectTokenManager);\r\n _assert(typeof uid === 'string', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n assertStringOrUndefined(displayName, auth.name);\r\n assertStringOrUndefined(email, auth.name);\r\n _assert(typeof emailVerified === 'boolean', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n _assert(typeof isAnonymous === 'boolean', auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n assertStringOrUndefined(phoneNumber, auth.name);\r\n assertStringOrUndefined(photoURL, auth.name);\r\n assertStringOrUndefined(tenantId, auth.name);\r\n assertStringOrUndefined(_redirectEventId, auth.name);\r\n assertStringOrUndefined(createdAt, auth.name);\r\n assertStringOrUndefined(lastLoginAt, auth.name);\r\n const user = new UserImpl({\r\n uid,\r\n auth,\r\n email,\r\n emailVerified,\r\n displayName,\r\n isAnonymous,\r\n photoURL,\r\n phoneNumber,\r\n tenantId,\r\n stsTokenManager,\r\n createdAt,\r\n lastLoginAt\r\n });\r\n if (providerData && Array.isArray(providerData)) {\r\n user.providerData = providerData.map(userInfo => (Object.assign({}, userInfo)));\r\n }\r\n if (_redirectEventId) {\r\n user._redirectEventId = _redirectEventId;\r\n }\r\n return user;\r\n }\r\n /**\r\n * Initialize a User from an idToken server response\r\n * @param auth\r\n * @param idTokenResponse\r\n */\r\n static async _fromIdTokenResponse(auth, idTokenResponse, isAnonymous = false) {\r\n const stsTokenManager = new StsTokenManager();\r\n stsTokenManager.updateFromServerResponse(idTokenResponse);\r\n // Initialize the Firebase Auth user.\r\n const user = new UserImpl({\r\n uid: idTokenResponse.localId,\r\n auth,\r\n stsTokenManager,\r\n isAnonymous\r\n });\r\n // Updates the user info and data and resolves with a user instance.\r\n await _reloadWithoutSaving(user);\r\n return user;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass InMemoryPersistence {\r\n constructor() {\r\n this.type = \"NONE\" /* PersistenceType.NONE */;\r\n this.storage = {};\r\n }\r\n async _isAvailable() {\r\n return true;\r\n }\r\n async _set(key, value) {\r\n this.storage[key] = value;\r\n }\r\n async _get(key) {\r\n const value = this.storage[key];\r\n return value === undefined ? null : value;\r\n }\r\n async _remove(key) {\r\n delete this.storage[key];\r\n }\r\n _addListener(_key, _listener) {\r\n // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\r\n return;\r\n }\r\n _removeListener(_key, _listener) {\r\n // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\r\n return;\r\n }\r\n}\r\nInMemoryPersistence.type = 'NONE';\r\n/**\r\n * An implementation of {@link Persistence} of type 'NONE'.\r\n *\r\n * @public\r\n */\r\nconst inMemoryPersistence = InMemoryPersistence;\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _persistenceKeyName(key, apiKey, appName) {\r\n return `${\"firebase\" /* Namespace.PERSISTENCE */}:${key}:${apiKey}:${appName}`;\r\n}\r\nclass PersistenceUserManager {\r\n constructor(persistence, auth, userKey) {\r\n this.persistence = persistence;\r\n this.auth = auth;\r\n this.userKey = userKey;\r\n const { config, name } = this.auth;\r\n this.fullUserKey = _persistenceKeyName(this.userKey, config.apiKey, name);\r\n this.fullPersistenceKey = _persistenceKeyName(\"persistence\" /* KeyName.PERSISTENCE_USER */, config.apiKey, name);\r\n this.boundEventHandler = auth._onStorageEvent.bind(auth);\r\n this.persistence._addListener(this.fullUserKey, this.boundEventHandler);\r\n }\r\n setCurrentUser(user) {\r\n return this.persistence._set(this.fullUserKey, user.toJSON());\r\n }\r\n async getCurrentUser() {\r\n const blob = await this.persistence._get(this.fullUserKey);\r\n return blob ? UserImpl._fromJSON(this.auth, blob) : null;\r\n }\r\n removeCurrentUser() {\r\n return this.persistence._remove(this.fullUserKey);\r\n }\r\n savePersistenceForRedirect() {\r\n return this.persistence._set(this.fullPersistenceKey, this.persistence.type);\r\n }\r\n async setPersistence(newPersistence) {\r\n if (this.persistence === newPersistence) {\r\n return;\r\n }\r\n const currentUser = await this.getCurrentUser();\r\n await this.removeCurrentUser();\r\n this.persistence = newPersistence;\r\n if (currentUser) {\r\n return this.setCurrentUser(currentUser);\r\n }\r\n }\r\n delete() {\r\n this.persistence._removeListener(this.fullUserKey, this.boundEventHandler);\r\n }\r\n static async create(auth, persistenceHierarchy, userKey = \"authUser\" /* KeyName.AUTH_USER */) {\r\n if (!persistenceHierarchy.length) {\r\n return new PersistenceUserManager(_getInstance(inMemoryPersistence), auth, userKey);\r\n }\r\n // Eliminate any persistences that are not available\r\n const availablePersistences = (await Promise.all(persistenceHierarchy.map(async (persistence) => {\r\n if (await persistence._isAvailable()) {\r\n return persistence;\r\n }\r\n return undefined;\r\n }))).filter(persistence => persistence);\r\n // Fall back to the first persistence listed, or in memory if none available\r\n let selectedPersistence = availablePersistences[0] ||\r\n _getInstance(inMemoryPersistence);\r\n const key = _persistenceKeyName(userKey, auth.config.apiKey, auth.name);\r\n // Pull out the existing user, setting the chosen persistence to that\r\n // persistence if the user exists.\r\n let userToMigrate = null;\r\n // Note, here we check for a user in _all_ persistences, not just the\r\n // ones deemed available. If we can migrate a user out of a broken\r\n // persistence, we will (but only if that persistence supports migration).\r\n for (const persistence of persistenceHierarchy) {\r\n try {\r\n const blob = await persistence._get(key);\r\n if (blob) {\r\n const user = UserImpl._fromJSON(auth, blob); // throws for unparsable blob (wrong format)\r\n if (persistence !== selectedPersistence) {\r\n userToMigrate = user;\r\n }\r\n selectedPersistence = persistence;\r\n break;\r\n }\r\n }\r\n catch (_a) { }\r\n }\r\n // If we find the user in a persistence that does support migration, use\r\n // that migration path (of only persistences that support migration)\r\n const migrationHierarchy = availablePersistences.filter(p => p._shouldAllowMigration);\r\n // If the persistence does _not_ allow migration, just finish off here\r\n if (!selectedPersistence._shouldAllowMigration ||\r\n !migrationHierarchy.length) {\r\n return new PersistenceUserManager(selectedPersistence, auth, userKey);\r\n }\r\n selectedPersistence = migrationHierarchy[0];\r\n if (userToMigrate) {\r\n // This normally shouldn't throw since chosenPersistence.isAvailable() is true, but if it does\r\n // we'll just let it bubble to surface the error.\r\n await selectedPersistence._set(key, userToMigrate.toJSON());\r\n }\r\n // Attempt to clear the key in other persistences but ignore errors. This helps prevent issues\r\n // such as users getting stuck with a previous account after signing out and refreshing the tab.\r\n await Promise.all(persistenceHierarchy.map(async (persistence) => {\r\n if (persistence !== selectedPersistence) {\r\n try {\r\n await persistence._remove(key);\r\n }\r\n catch (_a) { }\r\n }\r\n }));\r\n return new PersistenceUserManager(selectedPersistence, auth, userKey);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Determine the browser for the purposes of reporting usage to the API\r\n */\r\nfunction _getBrowserName(userAgent) {\r\n const ua = userAgent.toLowerCase();\r\n if (ua.includes('opera/') || ua.includes('opr/') || ua.includes('opios/')) {\r\n return \"Opera\" /* BrowserName.OPERA */;\r\n }\r\n else if (_isIEMobile(ua)) {\r\n // Windows phone IEMobile browser.\r\n return \"IEMobile\" /* BrowserName.IEMOBILE */;\r\n }\r\n else if (ua.includes('msie') || ua.includes('trident/')) {\r\n return \"IE\" /* BrowserName.IE */;\r\n }\r\n else if (ua.includes('edge/')) {\r\n return \"Edge\" /* BrowserName.EDGE */;\r\n }\r\n else if (_isFirefox(ua)) {\r\n return \"Firefox\" /* BrowserName.FIREFOX */;\r\n }\r\n else if (ua.includes('silk/')) {\r\n return \"Silk\" /* BrowserName.SILK */;\r\n }\r\n else if (_isBlackBerry(ua)) {\r\n // Blackberry browser.\r\n return \"Blackberry\" /* BrowserName.BLACKBERRY */;\r\n }\r\n else if (_isWebOS(ua)) {\r\n // WebOS default browser.\r\n return \"Webos\" /* BrowserName.WEBOS */;\r\n }\r\n else if (_isSafari(ua)) {\r\n return \"Safari\" /* BrowserName.SAFARI */;\r\n }\r\n else if ((ua.includes('chrome/') || _isChromeIOS(ua)) &&\r\n !ua.includes('edge/')) {\r\n return \"Chrome\" /* BrowserName.CHROME */;\r\n }\r\n else if (_isAndroid(ua)) {\r\n // Android stock browser.\r\n return \"Android\" /* BrowserName.ANDROID */;\r\n }\r\n else {\r\n // Most modern browsers have name/version at end of user agent string.\r\n const re = /([a-zA-Z\\d\\.]+)\\/[a-zA-Z\\d\\.]*$/;\r\n const matches = userAgent.match(re);\r\n if ((matches === null || matches === void 0 ? void 0 : matches.length) === 2) {\r\n return matches[1];\r\n }\r\n }\r\n return \"Other\" /* BrowserName.OTHER */;\r\n}\r\nfunction _isFirefox(ua = getUA()) {\r\n return /firefox\\//i.test(ua);\r\n}\r\nfunction _isSafari(userAgent = getUA()) {\r\n const ua = userAgent.toLowerCase();\r\n return (ua.includes('safari/') &&\r\n !ua.includes('chrome/') &&\r\n !ua.includes('crios/') &&\r\n !ua.includes('android'));\r\n}\r\nfunction _isChromeIOS(ua = getUA()) {\r\n return /crios\\//i.test(ua);\r\n}\r\nfunction _isIEMobile(ua = getUA()) {\r\n return /iemobile/i.test(ua);\r\n}\r\nfunction _isAndroid(ua = getUA()) {\r\n return /android/i.test(ua);\r\n}\r\nfunction _isBlackBerry(ua = getUA()) {\r\n return /blackberry/i.test(ua);\r\n}\r\nfunction _isWebOS(ua = getUA()) {\r\n return /webos/i.test(ua);\r\n}\r\nfunction _isIOS(ua = getUA()) {\r\n return (/iphone|ipad|ipod/i.test(ua) ||\r\n (/macintosh/i.test(ua) && /mobile/i.test(ua)));\r\n}\r\nfunction _isIOS7Or8(ua = getUA()) {\r\n return (/(iPad|iPhone|iPod).*OS 7_\\d/i.test(ua) ||\r\n /(iPad|iPhone|iPod).*OS 8_\\d/i.test(ua));\r\n}\r\nfunction _isIOSStandalone(ua = getUA()) {\r\n var _a;\r\n return _isIOS(ua) && !!((_a = window.navigator) === null || _a === void 0 ? void 0 : _a.standalone);\r\n}\r\nfunction _isIE10() {\r\n return isIE() && document.documentMode === 10;\r\n}\r\nfunction _isMobileBrowser(ua = getUA()) {\r\n // TODO: implement getBrowserName equivalent for OS.\r\n return (_isIOS(ua) ||\r\n _isAndroid(ua) ||\r\n _isWebOS(ua) ||\r\n _isBlackBerry(ua) ||\r\n /windows phone/i.test(ua) ||\r\n _isIEMobile(ua));\r\n}\r\nfunction _isIframe() {\r\n try {\r\n // Check that the current window is not the top window.\r\n // If so, return true.\r\n return !!(window && window !== window.top);\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/*\r\n * Determine the SDK version string\r\n */\r\nfunction _getClientVersion(clientPlatform, frameworks = []) {\r\n let reportedPlatform;\r\n switch (clientPlatform) {\r\n case \"Browser\" /* ClientPlatform.BROWSER */:\r\n // In a browser environment, report the browser name.\r\n reportedPlatform = _getBrowserName(getUA());\r\n break;\r\n case \"Worker\" /* ClientPlatform.WORKER */:\r\n // Technically a worker runs from a browser but we need to differentiate a\r\n // worker from a browser.\r\n // For example: Chrome-Worker/JsCore/4.9.1/FirebaseCore-web.\r\n reportedPlatform = `${_getBrowserName(getUA())}-${clientPlatform}`;\r\n break;\r\n default:\r\n reportedPlatform = clientPlatform;\r\n }\r\n const reportedFrameworks = frameworks.length\r\n ? frameworks.join(',')\r\n : 'FirebaseCore-web'; /* default value if no other framework is used */\r\n return `${reportedPlatform}/${\"JsCore\" /* ClientImplementation.CORE */}/${SDK_VERSION}/${reportedFrameworks}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthMiddlewareQueue {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.queue = [];\r\n }\r\n pushCallback(callback, onAbort) {\r\n // The callback could be sync or async. Wrap it into a\r\n // function that is always async.\r\n const wrappedCallback = (user) => new Promise((resolve, reject) => {\r\n try {\r\n const result = callback(user);\r\n // Either resolve with existing promise or wrap a non-promise\r\n // return value into a promise.\r\n resolve(result);\r\n }\r\n catch (e) {\r\n // Sync callback throws.\r\n reject(e);\r\n }\r\n });\r\n // Attach the onAbort if present\r\n wrappedCallback.onAbort = onAbort;\r\n this.queue.push(wrappedCallback);\r\n const index = this.queue.length - 1;\r\n return () => {\r\n // Unsubscribe. Replace with no-op. Do not remove from array, or it will disturb\r\n // indexing of other elements.\r\n this.queue[index] = () => Promise.resolve();\r\n };\r\n }\r\n async runMiddleware(nextUser) {\r\n if (this.auth.currentUser === nextUser) {\r\n return;\r\n }\r\n // While running the middleware, build a temporary stack of onAbort\r\n // callbacks to call if one middleware callback rejects.\r\n const onAbortStack = [];\r\n try {\r\n for (const beforeStateCallback of this.queue) {\r\n await beforeStateCallback(nextUser);\r\n // Only push the onAbort if the callback succeeds\r\n if (beforeStateCallback.onAbort) {\r\n onAbortStack.push(beforeStateCallback.onAbort);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // Run all onAbort, with separate try/catch to ignore any errors and\r\n // continue\r\n onAbortStack.reverse();\r\n for (const onAbort of onAbortStack) {\r\n try {\r\n onAbort();\r\n }\r\n catch (_) {\r\n /* swallow error */\r\n }\r\n }\r\n throw this.auth._errorFactory.create(\"login-blocked\" /* AuthErrorCode.LOGIN_BLOCKED */, {\r\n originalMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthImpl {\r\n constructor(app, heartbeatServiceProvider, config) {\r\n this.app = app;\r\n this.heartbeatServiceProvider = heartbeatServiceProvider;\r\n this.config = config;\r\n this.currentUser = null;\r\n this.emulatorConfig = null;\r\n this.operations = Promise.resolve();\r\n this.authStateSubscription = new Subscription(this);\r\n this.idTokenSubscription = new Subscription(this);\r\n this.beforeStateQueue = new AuthMiddlewareQueue(this);\r\n this.redirectUser = null;\r\n this.isProactiveRefreshEnabled = false;\r\n // Any network calls will set this to true and prevent subsequent emulator\r\n // initialization\r\n this._canInitEmulator = true;\r\n this._isInitialized = false;\r\n this._deleted = false;\r\n this._initializationPromise = null;\r\n this._popupRedirectResolver = null;\r\n this._errorFactory = _DEFAULT_AUTH_ERROR_FACTORY;\r\n // Tracks the last notified UID for state change listeners to prevent\r\n // repeated calls to the callbacks. Undefined means it's never been\r\n // called, whereas null means it's been called with a signed out user\r\n this.lastNotifiedUid = undefined;\r\n this.languageCode = null;\r\n this.tenantId = null;\r\n this.settings = { appVerificationDisabledForTesting: false };\r\n this.frameworks = [];\r\n this.name = app.name;\r\n this.clientVersion = config.sdkClientVersion;\r\n }\r\n _initializeWithPersistence(persistenceHierarchy, popupRedirectResolver) {\r\n if (popupRedirectResolver) {\r\n this._popupRedirectResolver = _getInstance(popupRedirectResolver);\r\n }\r\n // Have to check for app deletion throughout initialization (after each\r\n // promise resolution)\r\n this._initializationPromise = this.queue(async () => {\r\n var _a, _b;\r\n if (this._deleted) {\r\n return;\r\n }\r\n this.persistenceManager = await PersistenceUserManager.create(this, persistenceHierarchy);\r\n if (this._deleted) {\r\n return;\r\n }\r\n // Initialize the resolver early if necessary (only applicable to web:\r\n // this will cause the iframe to load immediately in certain cases)\r\n if ((_a = this._popupRedirectResolver) === null || _a === void 0 ? void 0 : _a._shouldInitProactively) {\r\n // If this fails, don't halt auth loading\r\n try {\r\n await this._popupRedirectResolver._initialize(this);\r\n }\r\n catch (e) {\r\n /* Ignore the error */\r\n }\r\n }\r\n await this.initializeCurrentUser(popupRedirectResolver);\r\n this.lastNotifiedUid = ((_b = this.currentUser) === null || _b === void 0 ? void 0 : _b.uid) || null;\r\n if (this._deleted) {\r\n return;\r\n }\r\n this._isInitialized = true;\r\n });\r\n return this._initializationPromise;\r\n }\r\n /**\r\n * If the persistence is changed in another window, the user manager will let us know\r\n */\r\n async _onStorageEvent() {\r\n if (this._deleted) {\r\n return;\r\n }\r\n const user = await this.assertedPersistence.getCurrentUser();\r\n if (!this.currentUser && !user) {\r\n // No change, do nothing (was signed out and remained signed out).\r\n return;\r\n }\r\n // If the same user is to be synchronized.\r\n if (this.currentUser && user && this.currentUser.uid === user.uid) {\r\n // Data update, simply copy data changes.\r\n this._currentUser._assign(user);\r\n // If tokens changed from previous user tokens, this will trigger\r\n // notifyAuthListeners_.\r\n await this.currentUser.getIdToken();\r\n return;\r\n }\r\n // Update current Auth state. Either a new login or logout.\r\n // Skip blocking callbacks, they should not apply to a change in another tab.\r\n await this._updateCurrentUser(user, /* skipBeforeStateCallbacks */ true);\r\n }\r\n async initializeCurrentUser(popupRedirectResolver) {\r\n var _a;\r\n // First check to see if we have a pending redirect event.\r\n const previouslyStoredUser = (await this.assertedPersistence.getCurrentUser());\r\n let futureCurrentUser = previouslyStoredUser;\r\n let needsTocheckMiddleware = false;\r\n if (popupRedirectResolver && this.config.authDomain) {\r\n await this.getOrInitRedirectPersistenceManager();\r\n const redirectUserEventId = (_a = this.redirectUser) === null || _a === void 0 ? void 0 : _a._redirectEventId;\r\n const storedUserEventId = futureCurrentUser === null || futureCurrentUser === void 0 ? void 0 : futureCurrentUser._redirectEventId;\r\n const result = await this.tryRedirectSignIn(popupRedirectResolver);\r\n // If the stored user (i.e. the old \"currentUser\") has a redirectId that\r\n // matches the redirect user, then we want to initially sign in with the\r\n // new user object from result.\r\n // TODO(samgho): More thoroughly test all of this\r\n if ((!redirectUserEventId || redirectUserEventId === storedUserEventId) &&\r\n (result === null || result === void 0 ? void 0 : result.user)) {\r\n futureCurrentUser = result.user;\r\n needsTocheckMiddleware = true;\r\n }\r\n }\r\n // If no user in persistence, there is no current user. Set to null.\r\n if (!futureCurrentUser) {\r\n return this.directlySetCurrentUser(null);\r\n }\r\n if (!futureCurrentUser._redirectEventId) {\r\n // This isn't a redirect link operation, we can reload and bail.\r\n // First though, ensure that we check the middleware is happy.\r\n if (needsTocheckMiddleware) {\r\n try {\r\n await this.beforeStateQueue.runMiddleware(futureCurrentUser);\r\n }\r\n catch (e) {\r\n futureCurrentUser = previouslyStoredUser;\r\n // We know this is available since the bit is only set when the\r\n // resolver is available\r\n this._popupRedirectResolver._overrideRedirectResult(this, () => Promise.reject(e));\r\n }\r\n }\r\n if (futureCurrentUser) {\r\n return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\r\n }\r\n else {\r\n return this.directlySetCurrentUser(null);\r\n }\r\n }\r\n _assert(this._popupRedirectResolver, this, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n await this.getOrInitRedirectPersistenceManager();\r\n // If the redirect user's event ID matches the current user's event ID,\r\n // DO NOT reload the current user, otherwise they'll be cleared from storage.\r\n // This is important for the reauthenticateWithRedirect() flow.\r\n if (this.redirectUser &&\r\n this.redirectUser._redirectEventId === futureCurrentUser._redirectEventId) {\r\n return this.directlySetCurrentUser(futureCurrentUser);\r\n }\r\n return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\r\n }\r\n async tryRedirectSignIn(redirectResolver) {\r\n // The redirect user needs to be checked (and signed in if available)\r\n // during auth initialization. All of the normal sign in and link/reauth\r\n // flows call back into auth and push things onto the promise queue. We\r\n // need to await the result of the redirect sign in *inside the promise\r\n // queue*. This presents a problem: we run into deadlock. See:\r\n // ┌> [Initialization] ─────â”\r\n // ┌> [<other queue tasks>] │\r\n // └─ [getRedirectResult] <─┘\r\n // where [] are tasks on the queue and arrows denote awaits\r\n // Initialization will never complete because it's waiting on something\r\n // that's waiting for initialization to complete!\r\n //\r\n // Instead, this method calls getRedirectResult() (stored in\r\n // _completeRedirectFn) with an optional parameter that instructs all of\r\n // the underlying auth operations to skip anything that mutates auth state.\r\n let result = null;\r\n try {\r\n // We know this._popupRedirectResolver is set since redirectResolver\r\n // is passed in. The _completeRedirectFn expects the unwrapped extern.\r\n result = await this._popupRedirectResolver._completeRedirectFn(this, redirectResolver, true);\r\n }\r\n catch (e) {\r\n // Swallow any errors here; the code can retrieve them in\r\n // getRedirectResult().\r\n await this._setRedirectUser(null);\r\n }\r\n return result;\r\n }\r\n async reloadAndSetCurrentUserOrClear(user) {\r\n try {\r\n await _reloadWithoutSaving(user);\r\n }\r\n catch (e) {\r\n if ((e === null || e === void 0 ? void 0 : e.code) !==\r\n `auth/${\"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */}`) {\r\n // Something's wrong with the user's token. Log them out and remove\r\n // them from storage\r\n return this.directlySetCurrentUser(null);\r\n }\r\n }\r\n return this.directlySetCurrentUser(user);\r\n }\r\n useDeviceLanguage() {\r\n this.languageCode = _getUserLanguage();\r\n }\r\n async _delete() {\r\n this._deleted = true;\r\n }\r\n async updateCurrentUser(userExtern) {\r\n // The public updateCurrentUser method needs to make a copy of the user,\r\n // and also check that the project matches\r\n const user = userExtern\r\n ? getModularInstance(userExtern)\r\n : null;\r\n if (user) {\r\n _assert(user.auth.config.apiKey === this.config.apiKey, this, \"invalid-user-token\" /* AuthErrorCode.INVALID_AUTH */);\r\n }\r\n return this._updateCurrentUser(user && user._clone(this));\r\n }\r\n async _updateCurrentUser(user, skipBeforeStateCallbacks = false) {\r\n if (this._deleted) {\r\n return;\r\n }\r\n if (user) {\r\n _assert(this.tenantId === user.tenantId, this, \"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */);\r\n }\r\n if (!skipBeforeStateCallbacks) {\r\n await this.beforeStateQueue.runMiddleware(user);\r\n }\r\n return this.queue(async () => {\r\n await this.directlySetCurrentUser(user);\r\n this.notifyAuthListeners();\r\n });\r\n }\r\n async signOut() {\r\n // Run first, to block _setRedirectUser() if any callbacks fail.\r\n await this.beforeStateQueue.runMiddleware(null);\r\n // Clear the redirect user when signOut is called\r\n if (this.redirectPersistenceManager || this._popupRedirectResolver) {\r\n await this._setRedirectUser(null);\r\n }\r\n // Prevent callbacks from being called again in _updateCurrentUser, as\r\n // they were already called in the first line.\r\n return this._updateCurrentUser(null, /* skipBeforeStateCallbacks */ true);\r\n }\r\n setPersistence(persistence) {\r\n return this.queue(async () => {\r\n await this.assertedPersistence.setPersistence(_getInstance(persistence));\r\n });\r\n }\r\n _getPersistence() {\r\n return this.assertedPersistence.persistence.type;\r\n }\r\n _updateErrorMap(errorMap) {\r\n this._errorFactory = new ErrorFactory('auth', 'Firebase', errorMap());\r\n }\r\n onAuthStateChanged(nextOrObserver, error, completed) {\r\n return this.registerStateListener(this.authStateSubscription, nextOrObserver, error, completed);\r\n }\r\n beforeAuthStateChanged(callback, onAbort) {\r\n return this.beforeStateQueue.pushCallback(callback, onAbort);\r\n }\r\n onIdTokenChanged(nextOrObserver, error, completed) {\r\n return this.registerStateListener(this.idTokenSubscription, nextOrObserver, error, completed);\r\n }\r\n toJSON() {\r\n var _a;\r\n return {\r\n apiKey: this.config.apiKey,\r\n authDomain: this.config.authDomain,\r\n appName: this.name,\r\n currentUser: (_a = this._currentUser) === null || _a === void 0 ? void 0 : _a.toJSON()\r\n };\r\n }\r\n async _setRedirectUser(user, popupRedirectResolver) {\r\n const redirectManager = await this.getOrInitRedirectPersistenceManager(popupRedirectResolver);\r\n return user === null\r\n ? redirectManager.removeCurrentUser()\r\n : redirectManager.setCurrentUser(user);\r\n }\r\n async getOrInitRedirectPersistenceManager(popupRedirectResolver) {\r\n if (!this.redirectPersistenceManager) {\r\n const resolver = (popupRedirectResolver && _getInstance(popupRedirectResolver)) ||\r\n this._popupRedirectResolver;\r\n _assert(resolver, this, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n this.redirectPersistenceManager = await PersistenceUserManager.create(this, [_getInstance(resolver._redirectPersistence)], \"redirectUser\" /* KeyName.REDIRECT_USER */);\r\n this.redirectUser =\r\n await this.redirectPersistenceManager.getCurrentUser();\r\n }\r\n return this.redirectPersistenceManager;\r\n }\r\n async _redirectUserForId(id) {\r\n var _a, _b;\r\n // Make sure we've cleared any pending persistence actions if we're not in\r\n // the initializer\r\n if (this._isInitialized) {\r\n await this.queue(async () => { });\r\n }\r\n if (((_a = this._currentUser) === null || _a === void 0 ? void 0 : _a._redirectEventId) === id) {\r\n return this._currentUser;\r\n }\r\n if (((_b = this.redirectUser) === null || _b === void 0 ? void 0 : _b._redirectEventId) === id) {\r\n return this.redirectUser;\r\n }\r\n return null;\r\n }\r\n async _persistUserIfCurrent(user) {\r\n if (user === this.currentUser) {\r\n return this.queue(async () => this.directlySetCurrentUser(user));\r\n }\r\n }\r\n /** Notifies listeners only if the user is current */\r\n _notifyListenersIfCurrent(user) {\r\n if (user === this.currentUser) {\r\n this.notifyAuthListeners();\r\n }\r\n }\r\n _key() {\r\n return `${this.config.authDomain}:${this.config.apiKey}:${this.name}`;\r\n }\r\n _startProactiveRefresh() {\r\n this.isProactiveRefreshEnabled = true;\r\n if (this.currentUser) {\r\n this._currentUser._startProactiveRefresh();\r\n }\r\n }\r\n _stopProactiveRefresh() {\r\n this.isProactiveRefreshEnabled = false;\r\n if (this.currentUser) {\r\n this._currentUser._stopProactiveRefresh();\r\n }\r\n }\r\n /** Returns the current user cast as the internal type */\r\n get _currentUser() {\r\n return this.currentUser;\r\n }\r\n notifyAuthListeners() {\r\n var _a, _b;\r\n if (!this._isInitialized) {\r\n return;\r\n }\r\n this.idTokenSubscription.next(this.currentUser);\r\n const currentUid = (_b = (_a = this.currentUser) === null || _a === void 0 ? void 0 : _a.uid) !== null && _b !== void 0 ? _b : null;\r\n if (this.lastNotifiedUid !== currentUid) {\r\n this.lastNotifiedUid = currentUid;\r\n this.authStateSubscription.next(this.currentUser);\r\n }\r\n }\r\n registerStateListener(subscription, nextOrObserver, error, completed) {\r\n if (this._deleted) {\r\n return () => { };\r\n }\r\n const cb = typeof nextOrObserver === 'function'\r\n ? nextOrObserver\r\n : nextOrObserver.next.bind(nextOrObserver);\r\n const promise = this._isInitialized\r\n ? Promise.resolve()\r\n : this._initializationPromise;\r\n _assert(promise, this, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n // The callback needs to be called asynchronously per the spec.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n promise.then(() => cb(this.currentUser));\r\n if (typeof nextOrObserver === 'function') {\r\n return subscription.addObserver(nextOrObserver, error, completed);\r\n }\r\n else {\r\n return subscription.addObserver(nextOrObserver);\r\n }\r\n }\r\n /**\r\n * Unprotected (from race conditions) method to set the current user. This\r\n * should only be called from within a queued callback. This is necessary\r\n * because the queue shouldn't rely on another queued callback.\r\n */\r\n async directlySetCurrentUser(user) {\r\n if (this.currentUser && this.currentUser !== user) {\r\n this._currentUser._stopProactiveRefresh();\r\n }\r\n if (user && this.isProactiveRefreshEnabled) {\r\n user._startProactiveRefresh();\r\n }\r\n this.currentUser = user;\r\n if (user) {\r\n await this.assertedPersistence.setCurrentUser(user);\r\n }\r\n else {\r\n await this.assertedPersistence.removeCurrentUser();\r\n }\r\n }\r\n queue(action) {\r\n // In case something errors, the callback still should be called in order\r\n // to keep the promise chain alive\r\n this.operations = this.operations.then(action, action);\r\n return this.operations;\r\n }\r\n get assertedPersistence() {\r\n _assert(this.persistenceManager, this, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return this.persistenceManager;\r\n }\r\n _logFramework(framework) {\r\n if (!framework || this.frameworks.includes(framework)) {\r\n return;\r\n }\r\n this.frameworks.push(framework);\r\n // Sort alphabetically so that \"FirebaseCore-web,FirebaseUI-web\" and\r\n // \"FirebaseUI-web,FirebaseCore-web\" aren't viewed as different.\r\n this.frameworks.sort();\r\n this.clientVersion = _getClientVersion(this.config.clientPlatform, this._getFrameworks());\r\n }\r\n _getFrameworks() {\r\n return this.frameworks;\r\n }\r\n async _getAdditionalHeaders() {\r\n var _a;\r\n // Additional headers on every request\r\n const headers = {\r\n [\"X-Client-Version\" /* HttpHeader.X_CLIENT_VERSION */]: this.clientVersion\r\n };\r\n if (this.app.options.appId) {\r\n headers[\"X-Firebase-gmpid\" /* HttpHeader.X_FIREBASE_GMPID */] = this.app.options.appId;\r\n }\r\n // If the heartbeat service exists, add the heartbeat string\r\n const heartbeatsHeader = await ((_a = this.heartbeatServiceProvider\r\n .getImmediate({\r\n optional: true\r\n })) === null || _a === void 0 ? void 0 : _a.getHeartbeatsHeader());\r\n if (heartbeatsHeader) {\r\n headers[\"X-Firebase-Client\" /* HttpHeader.X_FIREBASE_CLIENT */] = heartbeatsHeader;\r\n }\r\n return headers;\r\n }\r\n}\r\n/**\r\n * Method to be used to cast down to our private implmentation of Auth.\r\n * It will also handle unwrapping from the compat type if necessary\r\n *\r\n * @param auth Auth object passed in from developer\r\n */\r\nfunction _castAuth(auth) {\r\n return getModularInstance(auth);\r\n}\r\n/** Helper class to wrap subscriber logic */\r\nclass Subscription {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.observer = null;\r\n this.addObserver = createSubscribe(observer => (this.observer = observer));\r\n }\r\n get next() {\r\n _assert(this.observer, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return this.observer.next.bind(this.observer);\r\n }\r\n}\n\n/**\r\n * Changes the {@link Auth} instance to communicate with the Firebase Auth Emulator, instead of production\r\n * Firebase Auth services.\r\n *\r\n * @remarks\r\n * This must be called synchronously immediately following the first call to\r\n * {@link initializeAuth}. Do not use with production credentials as emulator\r\n * traffic is not encrypted.\r\n *\r\n *\r\n * @example\r\n * ```javascript\r\n * connectAuthEmulator(auth, 'http://127.0.0.1:9099', { disableWarnings: true });\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param url - The URL at which the emulator is running (eg, 'http://localhost:9099').\r\n * @param options - Optional. `options.disableWarnings` defaults to `false`. Set it to\r\n * `true` to disable the warning banner attached to the DOM.\r\n *\r\n * @public\r\n */\r\nfunction connectAuthEmulator(auth, url, options) {\r\n const authInternal = _castAuth(auth);\r\n _assert(authInternal._canInitEmulator, authInternal, \"emulator-config-failed\" /* AuthErrorCode.EMULATOR_CONFIG_FAILED */);\r\n _assert(/^https?:\\/\\//.test(url), authInternal, \"invalid-emulator-scheme\" /* AuthErrorCode.INVALID_EMULATOR_SCHEME */);\r\n const disableWarnings = !!(options === null || options === void 0 ? void 0 : options.disableWarnings);\r\n const protocol = extractProtocol(url);\r\n const { host, port } = extractHostAndPort(url);\r\n const portStr = port === null ? '' : `:${port}`;\r\n // Always replace path with \"/\" (even if input url had no path at all, or had a different one).\r\n authInternal.config.emulator = { url: `${protocol}//${host}${portStr}/` };\r\n authInternal.settings.appVerificationDisabledForTesting = true;\r\n authInternal.emulatorConfig = Object.freeze({\r\n host,\r\n port,\r\n protocol: protocol.replace(':', ''),\r\n options: Object.freeze({ disableWarnings })\r\n });\r\n if (!disableWarnings) {\r\n emitEmulatorWarning();\r\n }\r\n}\r\nfunction extractProtocol(url) {\r\n const protocolEnd = url.indexOf(':');\r\n return protocolEnd < 0 ? '' : url.substr(0, protocolEnd + 1);\r\n}\r\nfunction extractHostAndPort(url) {\r\n const protocol = extractProtocol(url);\r\n const authority = /(\\/\\/)?([^?#/]+)/.exec(url.substr(protocol.length)); // Between // and /, ? or #.\r\n if (!authority) {\r\n return { host: '', port: null };\r\n }\r\n const hostAndPort = authority[2].split('@').pop() || ''; // Strip out \"username:password@\".\r\n const bracketedIPv6 = /^(\\[[^\\]]+\\])(:|$)/.exec(hostAndPort);\r\n if (bracketedIPv6) {\r\n const host = bracketedIPv6[1];\r\n return { host, port: parsePort(hostAndPort.substr(host.length + 1)) };\r\n }\r\n else {\r\n const [host, port] = hostAndPort.split(':');\r\n return { host, port: parsePort(port) };\r\n }\r\n}\r\nfunction parsePort(portStr) {\r\n if (!portStr) {\r\n return null;\r\n }\r\n const port = Number(portStr);\r\n if (isNaN(port)) {\r\n return null;\r\n }\r\n return port;\r\n}\r\nfunction emitEmulatorWarning() {\r\n function attachBanner() {\r\n const el = document.createElement('p');\r\n const sty = el.style;\r\n el.innerText =\r\n 'Running in emulator mode. Do not use with production credentials.';\r\n sty.position = 'fixed';\r\n sty.width = '100%';\r\n sty.backgroundColor = '#ffffff';\r\n sty.border = '.1em solid #000000';\r\n sty.color = '#b50000';\r\n sty.bottom = '0px';\r\n sty.left = '0px';\r\n sty.margin = '0px';\r\n sty.zIndex = '10000';\r\n sty.textAlign = 'center';\r\n el.classList.add('firebase-emulator-warning');\r\n document.body.appendChild(el);\r\n }\r\n if (typeof console !== 'undefined' && typeof console.info === 'function') {\r\n console.info('WARNING: You are using the Auth Emulator,' +\r\n ' which is intended for local testing only. Do not use with' +\r\n ' production credentials.');\r\n }\r\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\r\n if (document.readyState === 'loading') {\r\n window.addEventListener('DOMContentLoaded', attachBanner);\r\n }\r\n else {\r\n attachBanner();\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface that represents the credentials returned by an {@link AuthProvider}.\r\n *\r\n * @remarks\r\n * Implementations specify the details about each auth provider's credential requirements.\r\n *\r\n * @public\r\n */\r\nclass AuthCredential {\r\n /** @internal */\r\n constructor(\r\n /**\r\n * The authentication provider ID for the credential.\r\n *\r\n * @remarks\r\n * For example, 'facebook.com', or 'google.com'.\r\n */\r\n providerId, \r\n /**\r\n * The authentication sign in method for the credential.\r\n *\r\n * @remarks\r\n * For example, {@link SignInMethod}.EMAIL_PASSWORD, or\r\n * {@link SignInMethod}.EMAIL_LINK. This corresponds to the sign-in method\r\n * identifier as returned in {@link fetchSignInMethodsForEmail}.\r\n */\r\n signInMethod) {\r\n this.providerId = providerId;\r\n this.signInMethod = signInMethod;\r\n }\r\n /**\r\n * Returns a JSON-serializable representation of this object.\r\n *\r\n * @returns a JSON-serializable representation of this object.\r\n */\r\n toJSON() {\r\n return debugFail('not implemented');\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(_auth) {\r\n return debugFail('not implemented');\r\n }\r\n /** @internal */\r\n _linkToIdToken(_auth, _idToken) {\r\n return debugFail('not implemented');\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(_auth) {\r\n return debugFail('not implemented');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function resetPassword(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:resetPassword\" /* Endpoint.RESET_PASSWORD */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function updateEmailPassword(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\r\n}\r\nasync function applyActionCode$1(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithPassword(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPassword\" /* Endpoint.SIGN_IN_WITH_PASSWORD */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function sendOobCode(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:sendOobCode\" /* Endpoint.SEND_OOB_CODE */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function sendEmailVerification$1(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\r\nasync function sendPasswordResetEmail$1(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\r\nasync function sendSignInLinkToEmail$1(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\r\nasync function verifyAndChangeEmail(auth, request) {\r\n return sendOobCode(auth, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithEmailLink$1(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithEmailLink\" /* Endpoint.SIGN_IN_WITH_EMAIL_LINK */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function signInWithEmailLinkForLinking(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithEmailLink\" /* Endpoint.SIGN_IN_WITH_EMAIL_LINK */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface that represents the credentials returned by {@link EmailAuthProvider} for\r\n * {@link ProviderId}.PASSWORD\r\n *\r\n * @remarks\r\n * Covers both {@link SignInMethod}.EMAIL_PASSWORD and\r\n * {@link SignInMethod}.EMAIL_LINK.\r\n *\r\n * @public\r\n */\r\nclass EmailAuthCredential extends AuthCredential {\r\n /** @internal */\r\n constructor(\r\n /** @internal */\r\n _email, \r\n /** @internal */\r\n _password, signInMethod, \r\n /** @internal */\r\n _tenantId = null) {\r\n super(\"password\" /* ProviderId.PASSWORD */, signInMethod);\r\n this._email = _email;\r\n this._password = _password;\r\n this._tenantId = _tenantId;\r\n }\r\n /** @internal */\r\n static _fromEmailAndPassword(email, password) {\r\n return new EmailAuthCredential(email, password, \"password\" /* SignInMethod.EMAIL_PASSWORD */);\r\n }\r\n /** @internal */\r\n static _fromEmailAndCode(email, oobCode, tenantId = null) {\r\n return new EmailAuthCredential(email, oobCode, \"emailLink\" /* SignInMethod.EMAIL_LINK */, tenantId);\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n return {\r\n email: this._email,\r\n password: this._password,\r\n signInMethod: this.signInMethod,\r\n tenantId: this._tenantId\r\n };\r\n }\r\n /**\r\n * Static method to deserialize a JSON representation of an object into an {@link AuthCredential}.\r\n *\r\n * @param json - Either `object` or the stringified representation of the object. When string is\r\n * provided, `JSON.parse` would be called first.\r\n *\r\n * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\r\n */\r\n static fromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n if ((obj === null || obj === void 0 ? void 0 : obj.email) && (obj === null || obj === void 0 ? void 0 : obj.password)) {\r\n if (obj.signInMethod === \"password\" /* SignInMethod.EMAIL_PASSWORD */) {\r\n return this._fromEmailAndPassword(obj.email, obj.password);\r\n }\r\n else if (obj.signInMethod === \"emailLink\" /* SignInMethod.EMAIL_LINK */) {\r\n return this._fromEmailAndCode(obj.email, obj.password, obj.tenantId);\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n async _getIdTokenResponse(auth) {\r\n switch (this.signInMethod) {\r\n case \"password\" /* SignInMethod.EMAIL_PASSWORD */:\r\n return signInWithPassword(auth, {\r\n returnSecureToken: true,\r\n email: this._email,\r\n password: this._password\r\n });\r\n case \"emailLink\" /* SignInMethod.EMAIL_LINK */:\r\n return signInWithEmailLink$1(auth, {\r\n email: this._email,\r\n oobCode: this._password\r\n });\r\n default:\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n }\r\n /** @internal */\r\n async _linkToIdToken(auth, idToken) {\r\n switch (this.signInMethod) {\r\n case \"password\" /* SignInMethod.EMAIL_PASSWORD */:\r\n return updateEmailPassword(auth, {\r\n idToken,\r\n returnSecureToken: true,\r\n email: this._email,\r\n password: this._password\r\n });\r\n case \"emailLink\" /* SignInMethod.EMAIL_LINK */:\r\n return signInWithEmailLinkForLinking(auth, {\r\n idToken,\r\n email: this._email,\r\n oobCode: this._password\r\n });\r\n default:\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n return this._getIdTokenResponse(auth);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithIdp(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithIdp\" /* Endpoint.SIGN_IN_WITH_IDP */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IDP_REQUEST_URI$1 = 'http://localhost';\r\n/**\r\n * Represents the OAuth credentials returned by an {@link OAuthProvider}.\r\n *\r\n * @remarks\r\n * Implementations specify the details about each auth provider's credential requirements.\r\n *\r\n * @public\r\n */\r\nclass OAuthCredential extends AuthCredential {\r\n constructor() {\r\n super(...arguments);\r\n this.pendingToken = null;\r\n }\r\n /** @internal */\r\n static _fromParams(params) {\r\n const cred = new OAuthCredential(params.providerId, params.signInMethod);\r\n if (params.idToken || params.accessToken) {\r\n // OAuth 2 and either ID token or access token.\r\n if (params.idToken) {\r\n cred.idToken = params.idToken;\r\n }\r\n if (params.accessToken) {\r\n cred.accessToken = params.accessToken;\r\n }\r\n // Add nonce if available and no pendingToken is present.\r\n if (params.nonce && !params.pendingToken) {\r\n cred.nonce = params.nonce;\r\n }\r\n if (params.pendingToken) {\r\n cred.pendingToken = params.pendingToken;\r\n }\r\n }\r\n else if (params.oauthToken && params.oauthTokenSecret) {\r\n // OAuth 1 and OAuth token with token secret\r\n cred.accessToken = params.oauthToken;\r\n cred.secret = params.oauthTokenSecret;\r\n }\r\n else {\r\n _fail(\"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n }\r\n return cred;\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n return {\r\n idToken: this.idToken,\r\n accessToken: this.accessToken,\r\n secret: this.secret,\r\n nonce: this.nonce,\r\n pendingToken: this.pendingToken,\r\n providerId: this.providerId,\r\n signInMethod: this.signInMethod\r\n };\r\n }\r\n /**\r\n * Static method to deserialize a JSON representation of an object into an\r\n * {@link AuthCredential}.\r\n *\r\n * @param json - Input can be either Object or the stringified representation of the object.\r\n * When string is provided, JSON.parse would be called first.\r\n *\r\n * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\r\n */\r\n static fromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n const { providerId, signInMethod } = obj, rest = __rest(obj, [\"providerId\", \"signInMethod\"]);\r\n if (!providerId || !signInMethod) {\r\n return null;\r\n }\r\n const cred = new OAuthCredential(providerId, signInMethod);\r\n cred.idToken = rest.idToken || undefined;\r\n cred.accessToken = rest.accessToken || undefined;\r\n cred.secret = rest.secret;\r\n cred.nonce = rest.nonce;\r\n cred.pendingToken = rest.pendingToken || null;\r\n return cred;\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(auth) {\r\n const request = this.buildRequest();\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _linkToIdToken(auth, idToken) {\r\n const request = this.buildRequest();\r\n request.idToken = idToken;\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n const request = this.buildRequest();\r\n request.autoCreate = false;\r\n return signInWithIdp(auth, request);\r\n }\r\n buildRequest() {\r\n const request = {\r\n requestUri: IDP_REQUEST_URI$1,\r\n returnSecureToken: true\r\n };\r\n if (this.pendingToken) {\r\n request.pendingToken = this.pendingToken;\r\n }\r\n else {\r\n const postBody = {};\r\n if (this.idToken) {\r\n postBody['id_token'] = this.idToken;\r\n }\r\n if (this.accessToken) {\r\n postBody['access_token'] = this.accessToken;\r\n }\r\n if (this.secret) {\r\n postBody['oauth_token_secret'] = this.secret;\r\n }\r\n postBody['providerId'] = this.providerId;\r\n if (this.nonce && !this.pendingToken) {\r\n postBody['nonce'] = this.nonce;\r\n }\r\n request.postBody = querystring(postBody);\r\n }\r\n return request;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function sendPhoneVerificationCode(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:sendVerificationCode\" /* Endpoint.SEND_VERIFICATION_CODE */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function signInWithPhoneNumber$1(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function linkWithPhoneNumber$1(auth, request) {\r\n const response = await _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, request));\r\n if (response.temporaryProof) {\r\n throw _makeTaggedError(auth, \"account-exists-with-different-credential\" /* AuthErrorCode.NEED_CONFIRMATION */, response);\r\n }\r\n return response;\r\n}\r\nconst VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_ = {\r\n [\"USER_NOT_FOUND\" /* ServerError.USER_NOT_FOUND */]: \"user-not-found\" /* AuthErrorCode.USER_DELETED */\r\n};\r\nasync function verifyPhoneNumberForExisting(auth, request) {\r\n const apiRequest = Object.assign(Object.assign({}, request), { operation: 'REAUTH' });\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithPhoneNumber\" /* Endpoint.SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, apiRequest), VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Represents the credentials returned by {@link PhoneAuthProvider}.\r\n *\r\n * @public\r\n */\r\nclass PhoneAuthCredential extends AuthCredential {\r\n constructor(params) {\r\n super(\"phone\" /* ProviderId.PHONE */, \"phone\" /* SignInMethod.PHONE */);\r\n this.params = params;\r\n }\r\n /** @internal */\r\n static _fromVerification(verificationId, verificationCode) {\r\n return new PhoneAuthCredential({ verificationId, verificationCode });\r\n }\r\n /** @internal */\r\n static _fromTokenResponse(phoneNumber, temporaryProof) {\r\n return new PhoneAuthCredential({ phoneNumber, temporaryProof });\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(auth) {\r\n return signInWithPhoneNumber$1(auth, this._makeVerificationRequest());\r\n }\r\n /** @internal */\r\n _linkToIdToken(auth, idToken) {\r\n return linkWithPhoneNumber$1(auth, Object.assign({ idToken }, this._makeVerificationRequest()));\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n return verifyPhoneNumberForExisting(auth, this._makeVerificationRequest());\r\n }\r\n /** @internal */\r\n _makeVerificationRequest() {\r\n const { temporaryProof, phoneNumber, verificationId, verificationCode } = this.params;\r\n if (temporaryProof && phoneNumber) {\r\n return { temporaryProof, phoneNumber };\r\n }\r\n return {\r\n sessionInfo: verificationId,\r\n code: verificationCode\r\n };\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n const obj = {\r\n providerId: this.providerId\r\n };\r\n if (this.params.phoneNumber) {\r\n obj.phoneNumber = this.params.phoneNumber;\r\n }\r\n if (this.params.temporaryProof) {\r\n obj.temporaryProof = this.params.temporaryProof;\r\n }\r\n if (this.params.verificationCode) {\r\n obj.verificationCode = this.params.verificationCode;\r\n }\r\n if (this.params.verificationId) {\r\n obj.verificationId = this.params.verificationId;\r\n }\r\n return obj;\r\n }\r\n /** Generates a phone credential based on a plain object or a JSON string. */\r\n static fromJSON(json) {\r\n if (typeof json === 'string') {\r\n json = JSON.parse(json);\r\n }\r\n const { verificationId, verificationCode, phoneNumber, temporaryProof } = json;\r\n if (!verificationCode &&\r\n !verificationId &&\r\n !phoneNumber &&\r\n !temporaryProof) {\r\n return null;\r\n }\r\n return new PhoneAuthCredential({\r\n verificationId,\r\n verificationCode,\r\n phoneNumber,\r\n temporaryProof\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Maps the mode string in action code URL to Action Code Info operation.\r\n *\r\n * @param mode\r\n */\r\nfunction parseMode(mode) {\r\n switch (mode) {\r\n case 'recoverEmail':\r\n return \"RECOVER_EMAIL\" /* ActionCodeOperation.RECOVER_EMAIL */;\r\n case 'resetPassword':\r\n return \"PASSWORD_RESET\" /* ActionCodeOperation.PASSWORD_RESET */;\r\n case 'signIn':\r\n return \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */;\r\n case 'verifyEmail':\r\n return \"VERIFY_EMAIL\" /* ActionCodeOperation.VERIFY_EMAIL */;\r\n case 'verifyAndChangeEmail':\r\n return \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */;\r\n case 'revertSecondFactorAddition':\r\n return \"REVERT_SECOND_FACTOR_ADDITION\" /* ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION */;\r\n default:\r\n return null;\r\n }\r\n}\r\n/**\r\n * Helper to parse FDL links\r\n *\r\n * @param url\r\n */\r\nfunction parseDeepLink(url) {\r\n const link = querystringDecode(extractQuerystring(url))['link'];\r\n // Double link case (automatic redirect).\r\n const doubleDeepLink = link\r\n ? querystringDecode(extractQuerystring(link))['deep_link_id']\r\n : null;\r\n // iOS custom scheme links.\r\n const iOSDeepLink = querystringDecode(extractQuerystring(url))['deep_link_id'];\r\n const iOSDoubleDeepLink = iOSDeepLink\r\n ? querystringDecode(extractQuerystring(iOSDeepLink))['link']\r\n : null;\r\n return iOSDoubleDeepLink || iOSDeepLink || doubleDeepLink || link || url;\r\n}\r\n/**\r\n * A utility class to parse email action URLs such as password reset, email verification,\r\n * email link sign in, etc.\r\n *\r\n * @public\r\n */\r\nclass ActionCodeURL {\r\n /**\r\n * @param actionLink - The link from which to extract the URL.\r\n * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\r\n *\r\n * @internal\r\n */\r\n constructor(actionLink) {\r\n var _a, _b, _c, _d, _e, _f;\r\n const searchParams = querystringDecode(extractQuerystring(actionLink));\r\n const apiKey = (_a = searchParams[\"apiKey\" /* QueryField.API_KEY */]) !== null && _a !== void 0 ? _a : null;\r\n const code = (_b = searchParams[\"oobCode\" /* QueryField.CODE */]) !== null && _b !== void 0 ? _b : null;\r\n const operation = parseMode((_c = searchParams[\"mode\" /* QueryField.MODE */]) !== null && _c !== void 0 ? _c : null);\r\n // Validate API key, code and mode.\r\n _assert(apiKey && code && operation, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n this.apiKey = apiKey;\r\n this.operation = operation;\r\n this.code = code;\r\n this.continueUrl = (_d = searchParams[\"continueUrl\" /* QueryField.CONTINUE_URL */]) !== null && _d !== void 0 ? _d : null;\r\n this.languageCode = (_e = searchParams[\"languageCode\" /* QueryField.LANGUAGE_CODE */]) !== null && _e !== void 0 ? _e : null;\r\n this.tenantId = (_f = searchParams[\"tenantId\" /* QueryField.TENANT_ID */]) !== null && _f !== void 0 ? _f : null;\r\n }\r\n /**\r\n * Parses the email action link string and returns an {@link ActionCodeURL} if the link is valid,\r\n * otherwise returns null.\r\n *\r\n * @param link - The email action link string.\r\n * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\r\n *\r\n * @public\r\n */\r\n static parseLink(link) {\r\n const actionLink = parseDeepLink(link);\r\n try {\r\n return new ActionCodeURL(actionLink);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/**\r\n * Parses the email action link string and returns an {@link ActionCodeURL} if\r\n * the link is valid, otherwise returns null.\r\n *\r\n * @public\r\n */\r\nfunction parseActionCodeURL(link) {\r\n return ActionCodeURL.parseLink(link);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating {@link EmailAuthCredential}.\r\n *\r\n * @public\r\n */\r\nclass EmailAuthProvider {\r\n constructor() {\r\n /**\r\n * Always set to {@link ProviderId}.PASSWORD, even for email link.\r\n */\r\n this.providerId = EmailAuthProvider.PROVIDER_ID;\r\n }\r\n /**\r\n * Initialize an {@link AuthCredential} using an email and password.\r\n *\r\n * @example\r\n * ```javascript\r\n * const authCredential = EmailAuthProvider.credential(email, password);\r\n * const userCredential = await signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * const userCredential = await signInWithEmailAndPassword(auth, email, password);\r\n * ```\r\n *\r\n * @param email - Email address.\r\n * @param password - User account password.\r\n * @returns The auth provider credential.\r\n */\r\n static credential(email, password) {\r\n return EmailAuthCredential._fromEmailAndPassword(email, password);\r\n }\r\n /**\r\n * Initialize an {@link AuthCredential} using an email and an email link after a sign in with\r\n * email link operation.\r\n *\r\n * @example\r\n * ```javascript\r\n * const authCredential = EmailAuthProvider.credentialWithLink(auth, email, emailLink);\r\n * const userCredential = await signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * await sendSignInLinkToEmail(auth, email);\r\n * // Obtain emailLink from user.\r\n * const userCredential = await signInWithEmailLink(auth, email, emailLink);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance used to verify the link.\r\n * @param email - Email address.\r\n * @param emailLink - Sign-in email link.\r\n * @returns - The auth provider credential.\r\n */\r\n static credentialWithLink(email, emailLink) {\r\n const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\r\n _assert(actionCodeUrl, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return EmailAuthCredential._fromEmailAndCode(email, actionCodeUrl.code, actionCodeUrl.tenantId);\r\n }\r\n}\r\n/**\r\n * Always set to {@link ProviderId}.PASSWORD, even for email link.\r\n */\r\nEmailAuthProvider.PROVIDER_ID = \"password\" /* ProviderId.PASSWORD */;\r\n/**\r\n * Always set to {@link SignInMethod}.EMAIL_PASSWORD.\r\n */\r\nEmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD = \"password\" /* SignInMethod.EMAIL_PASSWORD */;\r\n/**\r\n * Always set to {@link SignInMethod}.EMAIL_LINK.\r\n */\r\nEmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD = \"emailLink\" /* SignInMethod.EMAIL_LINK */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The base class for all Federated providers (OAuth (including OIDC), SAML).\r\n *\r\n * This class is not meant to be instantiated directly.\r\n *\r\n * @public\r\n */\r\nclass FederatedAuthProvider {\r\n /**\r\n * Constructor for generic OAuth providers.\r\n *\r\n * @param providerId - Provider for which credentials should be generated.\r\n */\r\n constructor(providerId) {\r\n this.providerId = providerId;\r\n /** @internal */\r\n this.defaultLanguageCode = null;\r\n /** @internal */\r\n this.customParameters = {};\r\n }\r\n /**\r\n * Set the language gode.\r\n *\r\n * @param languageCode - language code\r\n */\r\n setDefaultLanguage(languageCode) {\r\n this.defaultLanguageCode = languageCode;\r\n }\r\n /**\r\n * Sets the OAuth custom parameters to pass in an OAuth request for popup and redirect sign-in\r\n * operations.\r\n *\r\n * @remarks\r\n * For a detailed list, check the reserved required OAuth 2.0 parameters such as `client_id`,\r\n * `redirect_uri`, `scope`, `response_type`, and `state` are not allowed and will be ignored.\r\n *\r\n * @param customOAuthParameters - The custom OAuth parameters to pass in the OAuth request.\r\n */\r\n setCustomParameters(customOAuthParameters) {\r\n this.customParameters = customOAuthParameters;\r\n return this;\r\n }\r\n /**\r\n * Retrieve the current list of {@link CustomParameters}.\r\n */\r\n getCustomParameters() {\r\n return this.customParameters;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Common code to all OAuth providers. This is separate from the\r\n * {@link OAuthProvider} so that child providers (like\r\n * {@link GoogleAuthProvider}) don't inherit the `credential` instance method.\r\n * Instead, they rely on a static `credential` method.\r\n */\r\nclass BaseOAuthProvider extends FederatedAuthProvider {\r\n constructor() {\r\n super(...arguments);\r\n /** @internal */\r\n this.scopes = [];\r\n }\r\n /**\r\n * Add an OAuth scope to the credential.\r\n *\r\n * @param scope - Provider OAuth scope to add.\r\n */\r\n addScope(scope) {\r\n // If not already added, add scope to list.\r\n if (!this.scopes.includes(scope)) {\r\n this.scopes.push(scope);\r\n }\r\n return this;\r\n }\r\n /**\r\n * Retrieve the current list of OAuth scopes.\r\n */\r\n getScopes() {\r\n return [...this.scopes];\r\n }\r\n}\r\n/**\r\n * Provider for generating generic {@link OAuthCredential}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new OAuthProvider('google.com');\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a OAuth Access Token for the provider.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new OAuthProvider('google.com');\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a OAuth Access Token for the provider.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * ```\r\n * @public\r\n */\r\nclass OAuthProvider extends BaseOAuthProvider {\r\n /**\r\n * Creates an {@link OAuthCredential} from a JSON string or a plain object.\r\n * @param json - A plain object or a JSON string\r\n */\r\n static credentialFromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n _assert('providerId' in obj && 'signInMethod' in obj, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return OAuthCredential._fromParams(obj);\r\n }\r\n /**\r\n * Creates a {@link OAuthCredential} from a generic OAuth provider's access token or ID token.\r\n *\r\n * @remarks\r\n * The raw nonce is required when an ID token with a nonce field is provided. The SHA-256 hash of\r\n * the raw nonce must match the nonce field in the ID token.\r\n *\r\n * @example\r\n * ```javascript\r\n * // `googleUser` from the onsuccess Google Sign In callback.\r\n * // Initialize a generate OAuth provider with a `google.com` providerId.\r\n * const provider = new OAuthProvider('google.com');\r\n * const credential = provider.credential({\r\n * idToken: googleUser.getAuthResponse().id_token,\r\n * });\r\n * const result = await signInWithCredential(credential);\r\n * ```\r\n *\r\n * @param params - Either the options object containing the ID token, access token and raw nonce\r\n * or the ID token string.\r\n */\r\n credential(params) {\r\n return this._credential(Object.assign(Object.assign({}, params), { nonce: params.rawNonce }));\r\n }\r\n /** An internal credential method that accepts more permissive options */\r\n _credential(params) {\r\n _assert(params.idToken || params.accessToken, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n // For OAuthCredential, sign in method is same as providerId.\r\n return OAuthCredential._fromParams(Object.assign(Object.assign({}, params), { providerId: this.providerId, signInMethod: this.providerId }));\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return OAuthProvider.oauthCredentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return OAuthProvider.oauthCredentialFromTaggedObject((error.customData || {}));\r\n }\r\n static oauthCredentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { oauthIdToken, oauthAccessToken, oauthTokenSecret, pendingToken, nonce, providerId } = tokenResponse;\r\n if (!oauthAccessToken &&\r\n !oauthTokenSecret &&\r\n !oauthIdToken &&\r\n !pendingToken) {\r\n return null;\r\n }\r\n if (!providerId) {\r\n return null;\r\n }\r\n try {\r\n return new OAuthProvider(providerId)._credential({\r\n idToken: oauthIdToken,\r\n accessToken: oauthAccessToken,\r\n nonce,\r\n pendingToken\r\n });\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.FACEBOOK.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('user_birthday');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = FacebookAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * provider.addScope('user_birthday');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = FacebookAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass FacebookAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"facebook.com\" /* ProviderId.FACEBOOK */);\r\n }\r\n /**\r\n * Creates a credential for Facebook.\r\n *\r\n * @example\r\n * ```javascript\r\n * // `event` from the Facebook auth.authResponseChange callback.\r\n * const credential = FacebookAuthProvider.credential(event.authResponse.accessToken);\r\n * const result = await signInWithCredential(credential);\r\n * ```\r\n *\r\n * @param accessToken - Facebook access token.\r\n */\r\n static credential(accessToken) {\r\n return OAuthCredential._fromParams({\r\n providerId: FacebookAuthProvider.PROVIDER_ID,\r\n signInMethod: FacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD,\r\n accessToken\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return FacebookAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return FacebookAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\r\n return null;\r\n }\r\n if (!tokenResponse.oauthAccessToken) {\r\n return null;\r\n }\r\n try {\r\n return FacebookAuthProvider.credential(tokenResponse.oauthAccessToken);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.FACEBOOK. */\r\nFacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD = \"facebook.com\" /* SignInMethod.FACEBOOK */;\r\n/** Always set to {@link ProviderId}.FACEBOOK. */\r\nFacebookAuthProvider.PROVIDER_ID = \"facebook.com\" /* ProviderId.FACEBOOK */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an an {@link OAuthCredential} for {@link ProviderId}.GOOGLE.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new GoogleAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Google Access Token.\r\n * const credential = GoogleAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new GoogleAuthProvider();\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Google Access Token.\r\n * const credential = GoogleAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass GoogleAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"google.com\" /* ProviderId.GOOGLE */);\r\n this.addScope('profile');\r\n }\r\n /**\r\n * Creates a credential for Google. At least one of ID token and access token is required.\r\n *\r\n * @example\r\n * ```javascript\r\n * // \\`googleUser\\` from the onsuccess Google Sign In callback.\r\n * const credential = GoogleAuthProvider.credential(googleUser.getAuthResponse().id_token);\r\n * const result = await signInWithCredential(credential);\r\n * ```\r\n *\r\n * @param idToken - Google ID token.\r\n * @param accessToken - Google access token.\r\n */\r\n static credential(idToken, accessToken) {\r\n return OAuthCredential._fromParams({\r\n providerId: GoogleAuthProvider.PROVIDER_ID,\r\n signInMethod: GoogleAuthProvider.GOOGLE_SIGN_IN_METHOD,\r\n idToken,\r\n accessToken\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return GoogleAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return GoogleAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { oauthIdToken, oauthAccessToken } = tokenResponse;\r\n if (!oauthIdToken && !oauthAccessToken) {\r\n // This could be an oauth 1 credential or a phone credential\r\n return null;\r\n }\r\n try {\r\n return GoogleAuthProvider.credential(oauthIdToken, oauthAccessToken);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.GOOGLE. */\r\nGoogleAuthProvider.GOOGLE_SIGN_IN_METHOD = \"google.com\" /* SignInMethod.GOOGLE */;\r\n/** Always set to {@link ProviderId}.GOOGLE. */\r\nGoogleAuthProvider.PROVIDER_ID = \"google.com\" /* ProviderId.GOOGLE */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.GITHUB.\r\n *\r\n * @remarks\r\n * GitHub requires an OAuth 2.0 redirect, so you can either handle the redirect directly, or use\r\n * the {@link signInWithPopup} handler:\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new GithubAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('repo');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Github Access Token.\r\n * const credential = GithubAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new GithubAuthProvider();\r\n * provider.addScope('repo');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Github Access Token.\r\n * const credential = GithubAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n * @public\r\n */\r\nclass GithubAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"github.com\" /* ProviderId.GITHUB */);\r\n }\r\n /**\r\n * Creates a credential for Github.\r\n *\r\n * @param accessToken - Github access token.\r\n */\r\n static credential(accessToken) {\r\n return OAuthCredential._fromParams({\r\n providerId: GithubAuthProvider.PROVIDER_ID,\r\n signInMethod: GithubAuthProvider.GITHUB_SIGN_IN_METHOD,\r\n accessToken\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return GithubAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return GithubAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\r\n return null;\r\n }\r\n if (!tokenResponse.oauthAccessToken) {\r\n return null;\r\n }\r\n try {\r\n return GithubAuthProvider.credential(tokenResponse.oauthAccessToken);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.GITHUB. */\r\nGithubAuthProvider.GITHUB_SIGN_IN_METHOD = \"github.com\" /* SignInMethod.GITHUB */;\r\n/** Always set to {@link ProviderId}.GITHUB. */\r\nGithubAuthProvider.PROVIDER_ID = \"github.com\" /* ProviderId.GITHUB */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IDP_REQUEST_URI = 'http://localhost';\r\n/**\r\n * @public\r\n */\r\nclass SAMLAuthCredential extends AuthCredential {\r\n /** @internal */\r\n constructor(providerId, pendingToken) {\r\n super(providerId, providerId);\r\n this.pendingToken = pendingToken;\r\n }\r\n /** @internal */\r\n _getIdTokenResponse(auth) {\r\n const request = this.buildRequest();\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _linkToIdToken(auth, idToken) {\r\n const request = this.buildRequest();\r\n request.idToken = idToken;\r\n return signInWithIdp(auth, request);\r\n }\r\n /** @internal */\r\n _getReauthenticationResolver(auth) {\r\n const request = this.buildRequest();\r\n request.autoCreate = false;\r\n return signInWithIdp(auth, request);\r\n }\r\n /** {@inheritdoc AuthCredential.toJSON} */\r\n toJSON() {\r\n return {\r\n signInMethod: this.signInMethod,\r\n providerId: this.providerId,\r\n pendingToken: this.pendingToken\r\n };\r\n }\r\n /**\r\n * Static method to deserialize a JSON representation of an object into an\r\n * {@link AuthCredential}.\r\n *\r\n * @param json - Input can be either Object or the stringified representation of the object.\r\n * When string is provided, JSON.parse would be called first.\r\n *\r\n * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\r\n */\r\n static fromJSON(json) {\r\n const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n const { providerId, signInMethod, pendingToken } = obj;\r\n if (!providerId ||\r\n !signInMethod ||\r\n !pendingToken ||\r\n providerId !== signInMethod) {\r\n return null;\r\n }\r\n return new SAMLAuthCredential(providerId, pendingToken);\r\n }\r\n /**\r\n * Helper static method to avoid exposing the constructor to end users.\r\n *\r\n * @internal\r\n */\r\n static _create(providerId, pendingToken) {\r\n return new SAMLAuthCredential(providerId, pendingToken);\r\n }\r\n buildRequest() {\r\n return {\r\n requestUri: IDP_REQUEST_URI,\r\n returnSecureToken: true,\r\n pendingToken: this.pendingToken\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst SAML_PROVIDER_PREFIX = 'saml.';\r\n/**\r\n * An {@link AuthProvider} for SAML.\r\n *\r\n * @public\r\n */\r\nclass SAMLAuthProvider extends FederatedAuthProvider {\r\n /**\r\n * Constructor. The providerId must start with \"saml.\"\r\n * @param providerId - SAML provider ID.\r\n */\r\n constructor(providerId) {\r\n _assert(providerId.startsWith(SAML_PROVIDER_PREFIX), \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n super(providerId);\r\n }\r\n /**\r\n * Generates an {@link AuthCredential} from a {@link UserCredential} after a\r\n * successful SAML flow completes.\r\n *\r\n * @remarks\r\n *\r\n * For example, to get an {@link AuthCredential}, you could write the\r\n * following code:\r\n *\r\n * ```js\r\n * const userCredential = await signInWithPopup(auth, samlProvider);\r\n * const credential = SAMLAuthProvider.credentialFromResult(userCredential);\r\n * ```\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return SAMLAuthProvider.samlCredentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return SAMLAuthProvider.samlCredentialFromTaggedObject((error.customData || {}));\r\n }\r\n /**\r\n * Creates an {@link AuthCredential} from a JSON string or a plain object.\r\n * @param json - A plain object or a JSON string\r\n */\r\n static credentialFromJSON(json) {\r\n const credential = SAMLAuthCredential.fromJSON(json);\r\n _assert(credential, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return credential;\r\n }\r\n static samlCredentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { pendingToken, providerId } = tokenResponse;\r\n if (!pendingToken || !providerId) {\r\n return null;\r\n }\r\n try {\r\n return SAMLAuthCredential._create(providerId, pendingToken);\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.TWITTER.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new TwitterAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Twitter Access Token and Secret.\r\n * const credential = TwitterAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * const secret = credential.secret;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new TwitterAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Twitter Access Token and Secret.\r\n * const credential = TwitterAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * const secret = credential.secret;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass TwitterAuthProvider extends BaseOAuthProvider {\r\n constructor() {\r\n super(\"twitter.com\" /* ProviderId.TWITTER */);\r\n }\r\n /**\r\n * Creates a credential for Twitter.\r\n *\r\n * @param token - Twitter access token.\r\n * @param secret - Twitter secret.\r\n */\r\n static credential(token, secret) {\r\n return OAuthCredential._fromParams({\r\n providerId: TwitterAuthProvider.PROVIDER_ID,\r\n signInMethod: TwitterAuthProvider.TWITTER_SIGN_IN_METHOD,\r\n oauthToken: token,\r\n oauthTokenSecret: secret\r\n });\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n return TwitterAuthProvider.credentialFromTaggedObject(userCredential);\r\n }\r\n /**\r\n * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n * thrown during a sign-in, link, or reauthenticate operation.\r\n *\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromError(error) {\r\n return TwitterAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { oauthAccessToken, oauthTokenSecret } = tokenResponse;\r\n if (!oauthAccessToken || !oauthTokenSecret) {\r\n return null;\r\n }\r\n try {\r\n return TwitterAuthProvider.credential(oauthAccessToken, oauthTokenSecret);\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n }\r\n}\r\n/** Always set to {@link SignInMethod}.TWITTER. */\r\nTwitterAuthProvider.TWITTER_SIGN_IN_METHOD = \"twitter.com\" /* SignInMethod.TWITTER */;\r\n/** Always set to {@link ProviderId}.TWITTER. */\r\nTwitterAuthProvider.PROVIDER_ID = \"twitter.com\" /* ProviderId.TWITTER */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signUp(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signUp\" /* Endpoint.SIGN_UP */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass UserCredentialImpl {\r\n constructor(params) {\r\n this.user = params.user;\r\n this.providerId = params.providerId;\r\n this._tokenResponse = params._tokenResponse;\r\n this.operationType = params.operationType;\r\n }\r\n static async _fromIdTokenResponse(auth, operationType, idTokenResponse, isAnonymous = false) {\r\n const user = await UserImpl._fromIdTokenResponse(auth, idTokenResponse, isAnonymous);\r\n const providerId = providerIdForResponse(idTokenResponse);\r\n const userCred = new UserCredentialImpl({\r\n user,\r\n providerId,\r\n _tokenResponse: idTokenResponse,\r\n operationType\r\n });\r\n return userCred;\r\n }\r\n static async _forOperation(user, operationType, response) {\r\n await user._updateTokensIfNecessary(response, /* reload */ true);\r\n const providerId = providerIdForResponse(response);\r\n return new UserCredentialImpl({\r\n user,\r\n providerId,\r\n _tokenResponse: response,\r\n operationType\r\n });\r\n }\r\n}\r\nfunction providerIdForResponse(response) {\r\n if (response.providerId) {\r\n return response.providerId;\r\n }\r\n if ('phoneNumber' in response) {\r\n return \"phone\" /* ProviderId.PHONE */;\r\n }\r\n return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Asynchronously signs in as an anonymous user.\r\n *\r\n * @remarks\r\n * If there is already an anonymous user signed in, that user will be returned; otherwise, a\r\n * new anonymous user identity will be created and returned.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nasync function signInAnonymously(auth) {\r\n var _a;\r\n const authInternal = _castAuth(auth);\r\n await authInternal._initializationPromise;\r\n if ((_a = authInternal.currentUser) === null || _a === void 0 ? void 0 : _a.isAnonymous) {\r\n // If an anonymous user is already signed in, no need to sign them in again.\r\n return new UserCredentialImpl({\r\n user: authInternal.currentUser,\r\n providerId: null,\r\n operationType: \"signIn\" /* OperationType.SIGN_IN */\r\n });\r\n }\r\n const response = await signUp(authInternal, {\r\n returnSecureToken: true\r\n });\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response, true);\r\n await authInternal._updateCurrentUser(userCredential.user);\r\n return userCredential;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorError extends FirebaseError {\r\n constructor(auth, error, operationType, user) {\r\n var _a;\r\n super(error.code, error.message);\r\n this.operationType = operationType;\r\n this.user = user;\r\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n Object.setPrototypeOf(this, MultiFactorError.prototype);\r\n this.customData = {\r\n appName: auth.name,\r\n tenantId: (_a = auth.tenantId) !== null && _a !== void 0 ? _a : undefined,\r\n _serverResponse: error.customData._serverResponse,\r\n operationType\r\n };\r\n }\r\n static _fromErrorAndOperation(auth, error, operationType, user) {\r\n return new MultiFactorError(auth, error, operationType, user);\r\n }\r\n}\r\nfunction _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user) {\r\n const idTokenProvider = operationType === \"reauthenticate\" /* OperationType.REAUTHENTICATE */\r\n ? credential._getReauthenticationResolver(auth)\r\n : credential._getIdTokenResponse(auth);\r\n return idTokenProvider.catch(error => {\r\n if (error.code === `auth/${\"multi-factor-auth-required\" /* AuthErrorCode.MFA_REQUIRED */}`) {\r\n throw MultiFactorError._fromErrorAndOperation(auth, error, operationType, user);\r\n }\r\n throw error;\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Takes a set of UserInfo provider data and converts it to a set of names\r\n */\r\nfunction providerDataAsNames(providerData) {\r\n return new Set(providerData\r\n .map(({ providerId }) => providerId)\r\n .filter(pid => !!pid));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Unlinks a provider from a user account.\r\n *\r\n * @param user - The user.\r\n * @param providerId - The provider to unlink.\r\n *\r\n * @public\r\n */\r\nasync function unlink(user, providerId) {\r\n const userInternal = getModularInstance(user);\r\n await _assertLinkedStatus(true, userInternal, providerId);\r\n const { providerUserInfo } = await deleteLinkedAccounts(userInternal.auth, {\r\n idToken: await userInternal.getIdToken(),\r\n deleteProvider: [providerId]\r\n });\r\n const providersLeft = providerDataAsNames(providerUserInfo || []);\r\n userInternal.providerData = userInternal.providerData.filter(pd => providersLeft.has(pd.providerId));\r\n if (!providersLeft.has(\"phone\" /* ProviderId.PHONE */)) {\r\n userInternal.phoneNumber = null;\r\n }\r\n await userInternal.auth._persistUserIfCurrent(userInternal);\r\n return userInternal;\r\n}\r\nasync function _link$1(user, credential, bypassAuthState = false) {\r\n const response = await _logoutIfInvalidated(user, credential._linkToIdToken(user.auth, await user.getIdToken()), bypassAuthState);\r\n return UserCredentialImpl._forOperation(user, \"link\" /* OperationType.LINK */, response);\r\n}\r\nasync function _assertLinkedStatus(expected, user, provider) {\r\n await _reloadWithoutSaving(user);\r\n const providerIds = providerDataAsNames(user.providerData);\r\n const code = expected === false\r\n ? \"provider-already-linked\" /* AuthErrorCode.PROVIDER_ALREADY_LINKED */\r\n : \"no-such-provider\" /* AuthErrorCode.NO_SUCH_PROVIDER */;\r\n _assert(providerIds.has(provider) === expected, user.auth, code);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _reauthenticate(user, credential, bypassAuthState = false) {\r\n const { auth } = user;\r\n const operationType = \"reauthenticate\" /* OperationType.REAUTHENTICATE */;\r\n try {\r\n const response = await _logoutIfInvalidated(user, _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user), bypassAuthState);\r\n _assert(response.idToken, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const parsed = _parseToken(response.idToken);\r\n _assert(parsed, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const { sub: localId } = parsed;\r\n _assert(user.uid === localId, auth, \"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */);\r\n return UserCredentialImpl._forOperation(user, operationType, response);\r\n }\r\n catch (e) {\r\n // Convert user deleted error into user mismatch\r\n if ((e === null || e === void 0 ? void 0 : e.code) === `auth/${\"user-not-found\" /* AuthErrorCode.USER_DELETED */}`) {\r\n _fail(auth, \"user-mismatch\" /* AuthErrorCode.USER_MISMATCH */);\r\n }\r\n throw e;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _signInWithCredential(auth, credential, bypassAuthState = false) {\r\n const operationType = \"signIn\" /* OperationType.SIGN_IN */;\r\n const response = await _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential);\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(auth, operationType, response);\r\n if (!bypassAuthState) {\r\n await auth._updateCurrentUser(userCredential.user);\r\n }\r\n return userCredential;\r\n}\r\n/**\r\n * Asynchronously signs in with the given credentials.\r\n *\r\n * @remarks\r\n * An {@link AuthProvider} can be used to generate the credential.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function signInWithCredential(auth, credential) {\r\n return _signInWithCredential(_castAuth(auth), credential);\r\n}\r\n/**\r\n * Links the user account with the given credentials.\r\n *\r\n * @remarks\r\n * An {@link AuthProvider} can be used to generate the credential.\r\n *\r\n * @param user - The user.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function linkWithCredential(user, credential) {\r\n const userInternal = getModularInstance(user);\r\n await _assertLinkedStatus(false, userInternal, credential.providerId);\r\n return _link$1(userInternal, credential);\r\n}\r\n/**\r\n * Re-authenticates a user using a fresh credential.\r\n *\r\n * @remarks\r\n * Use before operations such as {@link updatePassword} that require tokens from recent sign-in\r\n * attempts. This method can be used to recover from a `CREDENTIAL_TOO_OLD_LOGIN_AGAIN` error.\r\n *\r\n * @param user - The user.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithCredential(user, credential) {\r\n return _reauthenticate(getModularInstance(user), credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithCustomToken$1(auth, request) {\r\n return _performSignInRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:signInWithCustomToken\" /* Endpoint.SIGN_IN_WITH_CUSTOM_TOKEN */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Asynchronously signs in using a custom token.\r\n *\r\n * @remarks\r\n * Custom tokens are used to integrate Firebase Auth with existing auth systems, and must\r\n * be generated by an auth backend using the\r\n * {@link https://firebase.google.com/docs/reference/admin/node/admin.auth.Auth#createcustomtoken | createCustomToken}\r\n * method in the {@link https://firebase.google.com/docs/auth/admin | Admin SDK} .\r\n *\r\n * Fails with an error if the token is invalid, expired, or not accepted by the Firebase Auth service.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param customToken - The custom token to sign in with.\r\n *\r\n * @public\r\n */\r\nasync function signInWithCustomToken(auth, customToken) {\r\n const authInternal = _castAuth(auth);\r\n const response = await signInWithCustomToken$1(authInternal, {\r\n token: customToken,\r\n returnSecureToken: true\r\n });\r\n const cred = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response);\r\n await authInternal._updateCurrentUser(cred.user);\r\n return cred;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorInfoImpl {\r\n constructor(factorId, response) {\r\n this.factorId = factorId;\r\n this.uid = response.mfaEnrollmentId;\r\n this.enrollmentTime = new Date(response.enrolledAt).toUTCString();\r\n this.displayName = response.displayName;\r\n }\r\n static _fromServerResponse(auth, enrollment) {\r\n if ('phoneInfo' in enrollment) {\r\n return PhoneMultiFactorInfoImpl._fromServerResponse(auth, enrollment);\r\n }\r\n return _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n}\r\nclass PhoneMultiFactorInfoImpl extends MultiFactorInfoImpl {\r\n constructor(response) {\r\n super(\"phone\" /* FactorId.PHONE */, response);\r\n this.phoneNumber = response.phoneInfo;\r\n }\r\n static _fromServerResponse(_auth, enrollment) {\r\n return new PhoneMultiFactorInfoImpl(enrollment);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _setActionCodeSettingsOnRequest(auth, request, actionCodeSettings) {\r\n var _a;\r\n _assert(((_a = actionCodeSettings.url) === null || _a === void 0 ? void 0 : _a.length) > 0, auth, \"invalid-continue-uri\" /* AuthErrorCode.INVALID_CONTINUE_URI */);\r\n _assert(typeof actionCodeSettings.dynamicLinkDomain === 'undefined' ||\r\n actionCodeSettings.dynamicLinkDomain.length > 0, auth, \"invalid-dynamic-link-domain\" /* AuthErrorCode.INVALID_DYNAMIC_LINK_DOMAIN */);\r\n request.continueUrl = actionCodeSettings.url;\r\n request.dynamicLinkDomain = actionCodeSettings.dynamicLinkDomain;\r\n request.canHandleCodeInApp = actionCodeSettings.handleCodeInApp;\r\n if (actionCodeSettings.iOS) {\r\n _assert(actionCodeSettings.iOS.bundleId.length > 0, auth, \"missing-ios-bundle-id\" /* AuthErrorCode.MISSING_IOS_BUNDLE_ID */);\r\n request.iOSBundleId = actionCodeSettings.iOS.bundleId;\r\n }\r\n if (actionCodeSettings.android) {\r\n _assert(actionCodeSettings.android.packageName.length > 0, auth, \"missing-android-pkg-name\" /* AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME */);\r\n request.androidInstallApp = actionCodeSettings.android.installApp;\r\n request.androidMinimumVersionCode =\r\n actionCodeSettings.android.minimumVersion;\r\n request.androidPackageName = actionCodeSettings.android.packageName;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Sends a password reset email to the given email address.\r\n *\r\n * @remarks\r\n * To complete the password reset, call {@link confirmPasswordReset} with the code supplied in\r\n * the email sent to the user, along with the new password specified by the user.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendPasswordResetEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain code from user.\r\n * await confirmPasswordReset('user@example.com', code);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendPasswordResetEmail(auth, email, actionCodeSettings) {\r\n const authModular = getModularInstance(auth);\r\n const request = {\r\n requestType: \"PASSWORD_RESET\" /* ActionCodeOperation.PASSWORD_RESET */,\r\n email\r\n };\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(authModular, request, actionCodeSettings);\r\n }\r\n await sendPasswordResetEmail$1(authModular, request);\r\n}\r\n/**\r\n * Completes the password reset process, given a confirmation code and new password.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A confirmation code sent to the user.\r\n * @param newPassword - The new password.\r\n *\r\n * @public\r\n */\r\nasync function confirmPasswordReset(auth, oobCode, newPassword) {\r\n await resetPassword(getModularInstance(auth), {\r\n oobCode,\r\n newPassword\r\n });\r\n // Do not return the email.\r\n}\r\n/**\r\n * Applies a verification code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function applyActionCode(auth, oobCode) {\r\n await applyActionCode$1(getModularInstance(auth), { oobCode });\r\n}\r\n/**\r\n * Checks a verification code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @returns metadata about the code.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function checkActionCode(auth, oobCode) {\r\n const authModular = getModularInstance(auth);\r\n const response = await resetPassword(authModular, { oobCode });\r\n // Email could be empty only if the request type is EMAIL_SIGNIN or\r\n // VERIFY_AND_CHANGE_EMAIL.\r\n // New email should not be empty if the request type is\r\n // VERIFY_AND_CHANGE_EMAIL.\r\n // Multi-factor info could not be empty if the request type is\r\n // REVERT_SECOND_FACTOR_ADDITION.\r\n const operation = response.requestType;\r\n _assert(operation, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n switch (operation) {\r\n case \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */:\r\n break;\r\n case \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */:\r\n _assert(response.newEmail, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n break;\r\n case \"REVERT_SECOND_FACTOR_ADDITION\" /* ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION */:\r\n _assert(response.mfaInfo, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n // fall through\r\n default:\r\n _assert(response.email, authModular, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n // The multi-factor info for revert second factor addition\r\n let multiFactorInfo = null;\r\n if (response.mfaInfo) {\r\n multiFactorInfo = MultiFactorInfoImpl._fromServerResponse(_castAuth(authModular), response.mfaInfo);\r\n }\r\n return {\r\n data: {\r\n email: (response.requestType === \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */\r\n ? response.newEmail\r\n : response.email) || null,\r\n previousEmail: (response.requestType === \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */\r\n ? response.email\r\n : response.newEmail) || null,\r\n multiFactorInfo\r\n },\r\n operation\r\n };\r\n}\r\n/**\r\n * Checks a password reset code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @returns the user's email address if valid.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param code - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function verifyPasswordResetCode(auth, code) {\r\n const { data } = await checkActionCode(getModularInstance(auth), code);\r\n // Email should always be present since a code was sent to it\r\n return data.email;\r\n}\r\n/**\r\n * Creates a new user account associated with the specified email address and password.\r\n *\r\n * @remarks\r\n * On successful creation of the user account, this user will also be signed in to your application.\r\n *\r\n * User account creation can fail if the account already exists or the password is invalid.\r\n *\r\n * Note: The email address acts as a unique identifier for the user and enables an email-based\r\n * password reset. This function will create a new user account and set the initial user password.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param password - The user's chosen password.\r\n *\r\n * @public\r\n */\r\nasync function createUserWithEmailAndPassword(auth, email, password) {\r\n const authInternal = _castAuth(auth);\r\n const response = await signUp(authInternal, {\r\n returnSecureToken: true,\r\n email,\r\n password\r\n });\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* OperationType.SIGN_IN */, response);\r\n await authInternal._updateCurrentUser(userCredential.user);\r\n return userCredential;\r\n}\r\n/**\r\n * Asynchronously signs in using an email and password.\r\n *\r\n * @remarks\r\n * Fails with an error if the email address and password do not match.\r\n *\r\n * Note: The user's password is NOT the password used to access the user's email account. The\r\n * email address serves as a unique identifier for the user, and the password is used to access\r\n * the user's account in your Firebase project. See also: {@link createUserWithEmailAndPassword}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The users email address.\r\n * @param password - The users password.\r\n *\r\n * @public\r\n */\r\nfunction signInWithEmailAndPassword(auth, email, password) {\r\n return signInWithCredential(getModularInstance(auth), EmailAuthProvider.credential(email, password));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Sends a sign-in email link to the user with the specified email.\r\n *\r\n * @remarks\r\n * The sign-in operation has to always be completed in the app unlike other out of band email\r\n * actions (password reset and email verifications). This is because, at the end of the flow,\r\n * the user is expected to be signed in and their Auth state persisted within the app.\r\n *\r\n * To complete sign in with the email link, call {@link signInWithEmailLink} with the email\r\n * address and the email link supplied in the email sent to the user.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain emailLink from the user.\r\n * if(isSignInWithEmailLink(auth, emailLink)) {\r\n * await signInWithEmailLink(auth, 'user@example.com', emailLink);\r\n * }\r\n * ```\r\n *\r\n * @param authInternal - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendSignInLinkToEmail(auth, email, actionCodeSettings) {\r\n const authModular = getModularInstance(auth);\r\n const request = {\r\n requestType: \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */,\r\n email\r\n };\r\n _assert(actionCodeSettings.handleCodeInApp, authModular, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(authModular, request, actionCodeSettings);\r\n }\r\n await sendSignInLinkToEmail$1(authModular, request);\r\n}\r\n/**\r\n * Checks if an incoming link is a sign-in with email link suitable for {@link signInWithEmailLink}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param emailLink - The link sent to the user's email address.\r\n *\r\n * @public\r\n */\r\nfunction isSignInWithEmailLink(auth, emailLink) {\r\n const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\r\n return (actionCodeUrl === null || actionCodeUrl === void 0 ? void 0 : actionCodeUrl.operation) === \"EMAIL_SIGNIN\" /* ActionCodeOperation.EMAIL_SIGNIN */;\r\n}\r\n/**\r\n * Asynchronously signs in using an email and sign-in email link.\r\n *\r\n * @remarks\r\n * If no link is passed, the link is inferred from the current URL.\r\n *\r\n * Fails with an error if the email address is invalid or OTP in email link expires.\r\n *\r\n * Note: Confirm the link is a sign-in email link before calling this method firebase.auth.Auth.isSignInWithEmailLink.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain emailLink from the user.\r\n * if(isSignInWithEmailLink(auth, emailLink)) {\r\n * await signInWithEmailLink(auth, 'user@example.com', emailLink);\r\n * }\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param emailLink - The link sent to the user's email address.\r\n *\r\n * @public\r\n */\r\nasync function signInWithEmailLink(auth, email, emailLink) {\r\n const authModular = getModularInstance(auth);\r\n const credential = EmailAuthProvider.credentialWithLink(email, emailLink || _getCurrentUrl());\r\n // Check if the tenant ID in the email link matches the tenant ID on Auth\r\n // instance.\r\n _assert(credential._tenantId === (authModular.tenantId || null), authModular, \"tenant-id-mismatch\" /* AuthErrorCode.TENANT_ID_MISMATCH */);\r\n return signInWithCredential(authModular, credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function createAuthUri(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:createAuthUri\" /* Endpoint.CREATE_AUTH_URI */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Gets the list of possible sign in methods for the given email address.\r\n *\r\n * @remarks\r\n * This is useful to differentiate methods of sign-in for the same provider, eg.\r\n * {@link EmailAuthProvider} which has 2 methods of sign-in,\r\n * {@link SignInMethod}.EMAIL_PASSWORD and\r\n * {@link SignInMethod}.EMAIL_LINK.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n *\r\n * @public\r\n */\r\nasync function fetchSignInMethodsForEmail(auth, email) {\r\n // createAuthUri returns an error if continue URI is not http or https.\r\n // For environments like Cordova, Chrome extensions, native frameworks, file\r\n // systems, etc, use http://localhost as continue URL.\r\n const continueUri = _isHttpOrHttps() ? _getCurrentUrl() : 'http://localhost';\r\n const request = {\r\n identifier: email,\r\n continueUri\r\n };\r\n const { signinMethods } = await createAuthUri(getModularInstance(auth), request);\r\n return signinMethods || [];\r\n}\r\n/**\r\n * Sends a verification email to a user.\r\n *\r\n * @remarks\r\n * The verification process is completed by calling {@link applyActionCode}.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await sendEmailVerification(user, actionCodeSettings);\r\n * // Obtain code from the user.\r\n * await applyActionCode(auth, code);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendEmailVerification(user, actionCodeSettings) {\r\n const userInternal = getModularInstance(user);\r\n const idToken = await user.getIdToken();\r\n const request = {\r\n requestType: \"VERIFY_EMAIL\" /* ActionCodeOperation.VERIFY_EMAIL */,\r\n idToken\r\n };\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);\r\n }\r\n const { email } = await sendEmailVerification$1(userInternal.auth, request);\r\n if (email !== user.email) {\r\n await user.reload();\r\n }\r\n}\r\n/**\r\n * Sends a verification email to a new email address.\r\n *\r\n * @remarks\r\n * The user's email will be updated to the new one after being verified.\r\n *\r\n * If you have a custom email action handler, you can complete the verification process by calling\r\n * {@link applyActionCode}.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n * url: 'https://www.example.com/?email=user@example.com',\r\n * iOS: {\r\n * bundleId: 'com.example.ios'\r\n * },\r\n * android: {\r\n * packageName: 'com.example.android',\r\n * installApp: true,\r\n * minimumVersion: '12'\r\n * },\r\n * handleCodeInApp: true\r\n * };\r\n * await verifyBeforeUpdateEmail(user, 'newemail@example.com', actionCodeSettings);\r\n * // Obtain code from the user.\r\n * await applyActionCode(auth, code);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param newEmail - The new email address to be verified before update.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function verifyBeforeUpdateEmail(user, newEmail, actionCodeSettings) {\r\n const userInternal = getModularInstance(user);\r\n const idToken = await user.getIdToken();\r\n const request = {\r\n requestType: \"VERIFY_AND_CHANGE_EMAIL\" /* ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL */,\r\n idToken,\r\n newEmail\r\n };\r\n if (actionCodeSettings) {\r\n _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);\r\n }\r\n const { email } = await verifyAndChangeEmail(userInternal.auth, request);\r\n if (email !== user.email) {\r\n // If the local copy of the email on user is outdated, reload the\r\n // user.\r\n await user.reload();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function updateProfile$1(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v1/accounts:update\" /* Endpoint.SET_ACCOUNT_INFO */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Updates a user's profile data.\r\n *\r\n * @param user - The user.\r\n * @param profile - The profile's `displayName` and `photoURL` to update.\r\n *\r\n * @public\r\n */\r\nasync function updateProfile(user, { displayName, photoURL: photoUrl }) {\r\n if (displayName === undefined && photoUrl === undefined) {\r\n return;\r\n }\r\n const userInternal = getModularInstance(user);\r\n const idToken = await userInternal.getIdToken();\r\n const profileRequest = {\r\n idToken,\r\n displayName,\r\n photoUrl,\r\n returnSecureToken: true\r\n };\r\n const response = await _logoutIfInvalidated(userInternal, updateProfile$1(userInternal.auth, profileRequest));\r\n userInternal.displayName = response.displayName || null;\r\n userInternal.photoURL = response.photoUrl || null;\r\n // Update the password provider as well\r\n const passwordProvider = userInternal.providerData.find(({ providerId }) => providerId === \"password\" /* ProviderId.PASSWORD */);\r\n if (passwordProvider) {\r\n passwordProvider.displayName = userInternal.displayName;\r\n passwordProvider.photoURL = userInternal.photoURL;\r\n }\r\n await userInternal._updateTokensIfNecessary(response);\r\n}\r\n/**\r\n * Updates the user's email address.\r\n *\r\n * @remarks\r\n * An email will be sent to the original email address (if it was set) that allows to revoke the\r\n * email address change, in order to protect them from account hijacking.\r\n *\r\n * Important: this is a security sensitive operation that requires the user to have recently signed\r\n * in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n * @param newEmail - The new email address.\r\n *\r\n * @public\r\n */\r\nfunction updateEmail(user, newEmail) {\r\n return updateEmailOrPassword(getModularInstance(user), newEmail, null);\r\n}\r\n/**\r\n * Updates the user's password.\r\n *\r\n * @remarks\r\n * Important: this is a security sensitive operation that requires the user to have recently signed\r\n * in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n * @param newPassword - The new password.\r\n *\r\n * @public\r\n */\r\nfunction updatePassword(user, newPassword) {\r\n return updateEmailOrPassword(getModularInstance(user), null, newPassword);\r\n}\r\nasync function updateEmailOrPassword(user, email, password) {\r\n const { auth } = user;\r\n const idToken = await user.getIdToken();\r\n const request = {\r\n idToken,\r\n returnSecureToken: true\r\n };\r\n if (email) {\r\n request.email = email;\r\n }\r\n if (password) {\r\n request.password = password;\r\n }\r\n const response = await _logoutIfInvalidated(user, updateEmailPassword(auth, request));\r\n await user._updateTokensIfNecessary(response, /* reload */ true);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Parse the `AdditionalUserInfo` from the ID token response.\r\n *\r\n */\r\nfunction _fromIdTokenResponse(idTokenResponse) {\r\n var _a, _b;\r\n if (!idTokenResponse) {\r\n return null;\r\n }\r\n const { providerId } = idTokenResponse;\r\n const profile = idTokenResponse.rawUserInfo\r\n ? JSON.parse(idTokenResponse.rawUserInfo)\r\n : {};\r\n const isNewUser = idTokenResponse.isNewUser ||\r\n idTokenResponse.kind === \"identitytoolkit#SignupNewUserResponse\" /* IdTokenResponseKind.SignupNewUser */;\r\n if (!providerId && (idTokenResponse === null || idTokenResponse === void 0 ? void 0 : idTokenResponse.idToken)) {\r\n const signInProvider = (_b = (_a = _parseToken(idTokenResponse.idToken)) === null || _a === void 0 ? void 0 : _a.firebase) === null || _b === void 0 ? void 0 : _b['sign_in_provider'];\r\n if (signInProvider) {\r\n const filteredProviderId = signInProvider !== \"anonymous\" /* ProviderId.ANONYMOUS */ &&\r\n signInProvider !== \"custom\" /* ProviderId.CUSTOM */\r\n ? signInProvider\r\n : null;\r\n // Uses generic class in accordance with the legacy SDK.\r\n return new GenericAdditionalUserInfo(isNewUser, filteredProviderId);\r\n }\r\n }\r\n if (!providerId) {\r\n return null;\r\n }\r\n switch (providerId) {\r\n case \"facebook.com\" /* ProviderId.FACEBOOK */:\r\n return new FacebookAdditionalUserInfo(isNewUser, profile);\r\n case \"github.com\" /* ProviderId.GITHUB */:\r\n return new GithubAdditionalUserInfo(isNewUser, profile);\r\n case \"google.com\" /* ProviderId.GOOGLE */:\r\n return new GoogleAdditionalUserInfo(isNewUser, profile);\r\n case \"twitter.com\" /* ProviderId.TWITTER */:\r\n return new TwitterAdditionalUserInfo(isNewUser, profile, idTokenResponse.screenName || null);\r\n case \"custom\" /* ProviderId.CUSTOM */:\r\n case \"anonymous\" /* ProviderId.ANONYMOUS */:\r\n return new GenericAdditionalUserInfo(isNewUser, null);\r\n default:\r\n return new GenericAdditionalUserInfo(isNewUser, providerId, profile);\r\n }\r\n}\r\nclass GenericAdditionalUserInfo {\r\n constructor(isNewUser, providerId, profile = {}) {\r\n this.isNewUser = isNewUser;\r\n this.providerId = providerId;\r\n this.profile = profile;\r\n }\r\n}\r\nclass FederatedAdditionalUserInfoWithUsername extends GenericAdditionalUserInfo {\r\n constructor(isNewUser, providerId, profile, username) {\r\n super(isNewUser, providerId, profile);\r\n this.username = username;\r\n }\r\n}\r\nclass FacebookAdditionalUserInfo extends GenericAdditionalUserInfo {\r\n constructor(isNewUser, profile) {\r\n super(isNewUser, \"facebook.com\" /* ProviderId.FACEBOOK */, profile);\r\n }\r\n}\r\nclass GithubAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\r\n constructor(isNewUser, profile) {\r\n super(isNewUser, \"github.com\" /* ProviderId.GITHUB */, profile, typeof (profile === null || profile === void 0 ? void 0 : profile.login) === 'string' ? profile === null || profile === void 0 ? void 0 : profile.login : null);\r\n }\r\n}\r\nclass GoogleAdditionalUserInfo extends GenericAdditionalUserInfo {\r\n constructor(isNewUser, profile) {\r\n super(isNewUser, \"google.com\" /* ProviderId.GOOGLE */, profile);\r\n }\r\n}\r\nclass TwitterAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\r\n constructor(isNewUser, profile, screenName) {\r\n super(isNewUser, \"twitter.com\" /* ProviderId.TWITTER */, profile, screenName);\r\n }\r\n}\r\n/**\r\n * Extracts provider specific {@link AdditionalUserInfo} for the given credential.\r\n *\r\n * @param userCredential - The user credential.\r\n *\r\n * @public\r\n */\r\nfunction getAdditionalUserInfo(userCredential) {\r\n const { user, _tokenResponse } = userCredential;\r\n if (user.isAnonymous && !_tokenResponse) {\r\n // Handle the special case where signInAnonymously() gets called twice.\r\n // No network call is made so there's nothing to actually fill this in\r\n return {\r\n providerId: null,\r\n isNewUser: false,\r\n profile: null\r\n };\r\n }\r\n return _fromIdTokenResponse(_tokenResponse);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Non-optional auth methods.\r\n/**\r\n * Changes the type of persistence on the {@link Auth} instance for the currently saved\r\n * `Auth` session and applies this type of persistence for future sign-in requests, including\r\n * sign-in with redirect requests.\r\n *\r\n * @remarks\r\n * This makes it easy for a user signing in to specify whether their session should be\r\n * remembered or not. It also makes it easier to never persist the `Auth` state for applications\r\n * that are shared by other users or have sensitive data.\r\n *\r\n * @example\r\n * ```javascript\r\n * setPersistence(auth, browserSessionPersistence);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param persistence - The {@link Persistence} to use.\r\n * @returns A `Promise` that resolves once the persistence change has completed\r\n *\r\n * @public\r\n */\r\nfunction setPersistence(auth, persistence) {\r\n return getModularInstance(auth).setPersistence(persistence);\r\n}\r\n/**\r\n * Adds an observer for changes to the signed-in user's ID token.\r\n *\r\n * @remarks\r\n * This includes sign-in, sign-out, and token refresh events.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param nextOrObserver - callback triggered on change.\r\n * @param error - Deprecated. This callback is never triggered. Errors\r\n * on signing in/out can be caught in promises returned from\r\n * sign-in/sign-out functions.\r\n * @param completed - Deprecated. This callback is never triggered.\r\n *\r\n * @public\r\n */\r\nfunction onIdTokenChanged(auth, nextOrObserver, error, completed) {\r\n return getModularInstance(auth).onIdTokenChanged(nextOrObserver, error, completed);\r\n}\r\n/**\r\n * Adds a blocking callback that runs before an auth state change\r\n * sets a new user.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param callback - callback triggered before new user value is set.\r\n * If this throws, it blocks the user from being set.\r\n * @param onAbort - callback triggered if a later `beforeAuthStateChanged()`\r\n * callback throws, allowing you to undo any side effects.\r\n */\r\nfunction beforeAuthStateChanged(auth, callback, onAbort) {\r\n return getModularInstance(auth).beforeAuthStateChanged(callback, onAbort);\r\n}\r\n/**\r\n * Adds an observer for changes to the user's sign-in state.\r\n *\r\n * @remarks\r\n * To keep the old behavior, see {@link onIdTokenChanged}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param nextOrObserver - callback triggered on change.\r\n * @param error - Deprecated. This callback is never triggered. Errors\r\n * on signing in/out can be caught in promises returned from\r\n * sign-in/sign-out functions.\r\n * @param completed - Deprecated. This callback is never triggered.\r\n *\r\n * @public\r\n */\r\nfunction onAuthStateChanged(auth, nextOrObserver, error, completed) {\r\n return getModularInstance(auth).onAuthStateChanged(nextOrObserver, error, completed);\r\n}\r\n/**\r\n * Sets the current language to the default device/browser preference.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nfunction useDeviceLanguage(auth) {\r\n getModularInstance(auth).useDeviceLanguage();\r\n}\r\n/**\r\n * Asynchronously sets the provided user as {@link Auth.currentUser} on the\r\n * {@link Auth} instance.\r\n *\r\n * @remarks\r\n * A new instance copy of the user provided will be made and set as currentUser.\r\n *\r\n * This will trigger {@link onAuthStateChanged} and {@link onIdTokenChanged} listeners\r\n * like other sign in methods.\r\n *\r\n * The operation fails with an error if the user to be updated belongs to a different Firebase\r\n * project.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param user - The new {@link User}.\r\n *\r\n * @public\r\n */\r\nfunction updateCurrentUser(auth, user) {\r\n return getModularInstance(auth).updateCurrentUser(user);\r\n}\r\n/**\r\n * Signs out the current user.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nfunction signOut(auth) {\r\n return getModularInstance(auth).signOut();\r\n}\r\n/**\r\n * Deletes and signs out the user.\r\n *\r\n * @remarks\r\n * Important: this is a security-sensitive operation that requires the user to have recently\r\n * signed in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nasync function deleteUser(user) {\r\n return getModularInstance(user).delete();\r\n}\n\nclass MultiFactorSessionImpl {\r\n constructor(type, credential, auth) {\r\n this.type = type;\r\n this.credential = credential;\r\n this.auth = auth;\r\n }\r\n static _fromIdtoken(idToken, auth) {\r\n return new MultiFactorSessionImpl(\"enroll\" /* MultiFactorSessionType.ENROLL */, idToken, auth);\r\n }\r\n static _fromMfaPendingCredential(mfaPendingCredential) {\r\n return new MultiFactorSessionImpl(\"signin\" /* MultiFactorSessionType.SIGN_IN */, mfaPendingCredential);\r\n }\r\n toJSON() {\r\n const key = this.type === \"enroll\" /* MultiFactorSessionType.ENROLL */\r\n ? 'idToken'\r\n : 'pendingCredential';\r\n return {\r\n multiFactorSession: {\r\n [key]: this.credential\r\n }\r\n };\r\n }\r\n static fromJSON(obj) {\r\n var _a, _b;\r\n if (obj === null || obj === void 0 ? void 0 : obj.multiFactorSession) {\r\n if ((_a = obj.multiFactorSession) === null || _a === void 0 ? void 0 : _a.pendingCredential) {\r\n return MultiFactorSessionImpl._fromMfaPendingCredential(obj.multiFactorSession.pendingCredential);\r\n }\r\n else if ((_b = obj.multiFactorSession) === null || _b === void 0 ? void 0 : _b.idToken) {\r\n return MultiFactorSessionImpl._fromIdtoken(obj.multiFactorSession.idToken);\r\n }\r\n }\r\n return null;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorResolverImpl {\r\n constructor(session, hints, signInResolver) {\r\n this.session = session;\r\n this.hints = hints;\r\n this.signInResolver = signInResolver;\r\n }\r\n /** @internal */\r\n static _fromError(authExtern, error) {\r\n const auth = _castAuth(authExtern);\r\n const serverResponse = error.customData._serverResponse;\r\n const hints = (serverResponse.mfaInfo || []).map(enrollment => MultiFactorInfoImpl._fromServerResponse(auth, enrollment));\r\n _assert(serverResponse.mfaPendingCredential, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const session = MultiFactorSessionImpl._fromMfaPendingCredential(serverResponse.mfaPendingCredential);\r\n return new MultiFactorResolverImpl(session, hints, async (assertion) => {\r\n const mfaResponse = await assertion._process(auth, session);\r\n // Clear out the unneeded fields from the old login response\r\n delete serverResponse.mfaInfo;\r\n delete serverResponse.mfaPendingCredential;\r\n // Use in the new token & refresh token in the old response\r\n const idTokenResponse = Object.assign(Object.assign({}, serverResponse), { idToken: mfaResponse.idToken, refreshToken: mfaResponse.refreshToken });\r\n // TODO: we should collapse this switch statement into UserCredentialImpl._forOperation and have it support the SIGN_IN case\r\n switch (error.operationType) {\r\n case \"signIn\" /* OperationType.SIGN_IN */:\r\n const userCredential = await UserCredentialImpl._fromIdTokenResponse(auth, error.operationType, idTokenResponse);\r\n await auth._updateCurrentUser(userCredential.user);\r\n return userCredential;\r\n case \"reauthenticate\" /* OperationType.REAUTHENTICATE */:\r\n _assert(error.user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return UserCredentialImpl._forOperation(error.user, error.operationType, idTokenResponse);\r\n default:\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n });\r\n }\r\n async resolveSignIn(assertionExtern) {\r\n const assertion = assertionExtern;\r\n return this.signInResolver(assertion);\r\n }\r\n}\r\n/**\r\n * Provides a {@link MultiFactorResolver} suitable for completion of a\r\n * multi-factor flow.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param error - The {@link MultiFactorError} raised during a sign-in, or\r\n * reauthentication operation.\r\n *\r\n * @public\r\n */\r\nfunction getMultiFactorResolver(auth, error) {\r\n var _a;\r\n const authModular = getModularInstance(auth);\r\n const errorInternal = error;\r\n _assert(error.customData.operationType, authModular, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert((_a = errorInternal.customData._serverResponse) === null || _a === void 0 ? void 0 : _a.mfaPendingCredential, authModular, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return MultiFactorResolverImpl._fromError(authModular, errorInternal);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction startEnrollPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:start\" /* Endpoint.START_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeEnrollPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:finalize\" /* Endpoint.FINALIZE_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction withdrawMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaEnrollment:withdraw\" /* Endpoint.WITHDRAW_MFA */, _addTidIfNecessary(auth, request));\r\n}\n\nclass MultiFactorUserImpl {\r\n constructor(user) {\r\n this.user = user;\r\n this.enrolledFactors = [];\r\n user._onReload(userInfo => {\r\n if (userInfo.mfaInfo) {\r\n this.enrolledFactors = userInfo.mfaInfo.map(enrollment => MultiFactorInfoImpl._fromServerResponse(user.auth, enrollment));\r\n }\r\n });\r\n }\r\n static _fromUser(user) {\r\n return new MultiFactorUserImpl(user);\r\n }\r\n async getSession() {\r\n return MultiFactorSessionImpl._fromIdtoken(await this.user.getIdToken(), this.user.auth);\r\n }\r\n async enroll(assertionExtern, displayName) {\r\n const assertion = assertionExtern;\r\n const session = (await this.getSession());\r\n const finalizeMfaResponse = await _logoutIfInvalidated(this.user, assertion._process(this.user.auth, session, displayName));\r\n // New tokens will be issued after enrollment of the new second factors.\r\n // They need to be updated on the user.\r\n await this.user._updateTokensIfNecessary(finalizeMfaResponse);\r\n // The user needs to be reloaded to get the new multi-factor information\r\n // from server. USER_RELOADED event will be triggered and `enrolledFactors`\r\n // will be updated.\r\n return this.user.reload();\r\n }\r\n async unenroll(infoOrUid) {\r\n const mfaEnrollmentId = typeof infoOrUid === 'string' ? infoOrUid : infoOrUid.uid;\r\n const idToken = await this.user.getIdToken();\r\n const idTokenResponse = await _logoutIfInvalidated(this.user, withdrawMfa(this.user.auth, {\r\n idToken,\r\n mfaEnrollmentId\r\n }));\r\n // Remove the second factor from the user's list.\r\n this.enrolledFactors = this.enrolledFactors.filter(({ uid }) => uid !== mfaEnrollmentId);\r\n // Depending on whether the backend decided to revoke the user's session,\r\n // the tokenResponse may be empty. If the tokens were not updated (and they\r\n // are now invalid), reloading the user will discover this and invalidate\r\n // the user's state accordingly.\r\n await this.user._updateTokensIfNecessary(idTokenResponse);\r\n try {\r\n await this.user.reload();\r\n }\r\n catch (e) {\r\n if ((e === null || e === void 0 ? void 0 : e.code) !== `auth/${\"user-token-expired\" /* AuthErrorCode.TOKEN_EXPIRED */}`) {\r\n throw e;\r\n }\r\n }\r\n }\r\n}\r\nconst multiFactorUserCache = new WeakMap();\r\n/**\r\n * The {@link MultiFactorUser} corresponding to the user.\r\n *\r\n * @remarks\r\n * This is used to access all multi-factor properties and operations related to the user.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nfunction multiFactor(user) {\r\n const userModular = getModularInstance(user);\r\n if (!multiFactorUserCache.has(userModular)) {\r\n multiFactorUserCache.set(userModular, MultiFactorUserImpl._fromUser(userModular));\r\n }\r\n return multiFactorUserCache.get(userModular);\r\n}\n\nconst STORAGE_AVAILABLE_KEY = '__sak';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// There are two different browser persistence types: local and session.\r\n// Both have the same implementation but use a different underlying storage\r\n// object.\r\nclass BrowserPersistenceClass {\r\n constructor(storageRetriever, type) {\r\n this.storageRetriever = storageRetriever;\r\n this.type = type;\r\n }\r\n _isAvailable() {\r\n try {\r\n if (!this.storage) {\r\n return Promise.resolve(false);\r\n }\r\n this.storage.setItem(STORAGE_AVAILABLE_KEY, '1');\r\n this.storage.removeItem(STORAGE_AVAILABLE_KEY);\r\n return Promise.resolve(true);\r\n }\r\n catch (_a) {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n _set(key, value) {\r\n this.storage.setItem(key, JSON.stringify(value));\r\n return Promise.resolve();\r\n }\r\n _get(key) {\r\n const json = this.storage.getItem(key);\r\n return Promise.resolve(json ? JSON.parse(json) : null);\r\n }\r\n _remove(key) {\r\n this.storage.removeItem(key);\r\n return Promise.resolve();\r\n }\r\n get storage() {\r\n return this.storageRetriever();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _iframeCannotSyncWebStorage() {\r\n const ua = getUA();\r\n return _isSafari(ua) || _isIOS(ua);\r\n}\r\n// The polling period in case events are not supported\r\nconst _POLLING_INTERVAL_MS$1 = 1000;\r\n// The IE 10 localStorage cross tab synchronization delay in milliseconds\r\nconst IE10_LOCAL_STORAGE_SYNC_DELAY = 10;\r\nclass BrowserLocalPersistence extends BrowserPersistenceClass {\r\n constructor() {\r\n super(() => window.localStorage, \"LOCAL\" /* PersistenceType.LOCAL */);\r\n this.boundEventHandler = (event, poll) => this.onStorageEvent(event, poll);\r\n this.listeners = {};\r\n this.localCache = {};\r\n // setTimeout return value is platform specific\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.pollTimer = null;\r\n // Safari or iOS browser and embedded in an iframe.\r\n this.safariLocalStorageNotSynced = _iframeCannotSyncWebStorage() && _isIframe();\r\n // Whether to use polling instead of depending on window events\r\n this.fallbackToPolling = _isMobileBrowser();\r\n this._shouldAllowMigration = true;\r\n }\r\n forAllChangedKeys(cb) {\r\n // Check all keys with listeners on them.\r\n for (const key of Object.keys(this.listeners)) {\r\n // Get value from localStorage.\r\n const newValue = this.storage.getItem(key);\r\n const oldValue = this.localCache[key];\r\n // If local map value does not match, trigger listener with storage event.\r\n // Differentiate this simulated event from the real storage event.\r\n if (newValue !== oldValue) {\r\n cb(key, oldValue, newValue);\r\n }\r\n }\r\n }\r\n onStorageEvent(event, poll = false) {\r\n // Key would be null in some situations, like when localStorage is cleared\r\n if (!event.key) {\r\n this.forAllChangedKeys((key, _oldValue, newValue) => {\r\n this.notifyListeners(key, newValue);\r\n });\r\n return;\r\n }\r\n const key = event.key;\r\n // Check the mechanism how this event was detected.\r\n // The first event will dictate the mechanism to be used.\r\n if (poll) {\r\n // Environment detects storage changes via polling.\r\n // Remove storage event listener to prevent possible event duplication.\r\n this.detachListener();\r\n }\r\n else {\r\n // Environment detects storage changes via storage event listener.\r\n // Remove polling listener to prevent possible event duplication.\r\n this.stopPolling();\r\n }\r\n // Safari embedded iframe. Storage event will trigger with the delta\r\n // changes but no changes will be applied to the iframe localStorage.\r\n if (this.safariLocalStorageNotSynced) {\r\n // Get current iframe page value.\r\n const storedValue = this.storage.getItem(key);\r\n // Value not synchronized, synchronize manually.\r\n if (event.newValue !== storedValue) {\r\n if (event.newValue !== null) {\r\n // Value changed from current value.\r\n this.storage.setItem(key, event.newValue);\r\n }\r\n else {\r\n // Current value deleted.\r\n this.storage.removeItem(key);\r\n }\r\n }\r\n else if (this.localCache[key] === event.newValue && !poll) {\r\n // Already detected and processed, do not trigger listeners again.\r\n return;\r\n }\r\n }\r\n const triggerListeners = () => {\r\n // Keep local map up to date in case storage event is triggered before\r\n // poll.\r\n const storedValue = this.storage.getItem(key);\r\n if (!poll && this.localCache[key] === storedValue) {\r\n // Real storage event which has already been detected, do nothing.\r\n // This seems to trigger in some IE browsers for some reason.\r\n return;\r\n }\r\n this.notifyListeners(key, storedValue);\r\n };\r\n const storedValue = this.storage.getItem(key);\r\n if (_isIE10() &&\r\n storedValue !== event.newValue &&\r\n event.newValue !== event.oldValue) {\r\n // IE 10 has this weird bug where a storage event would trigger with the\r\n // correct key, oldValue and newValue but localStorage.getItem(key) does\r\n // not yield the updated value until a few milliseconds. This ensures\r\n // this recovers from that situation.\r\n setTimeout(triggerListeners, IE10_LOCAL_STORAGE_SYNC_DELAY);\r\n }\r\n else {\r\n triggerListeners();\r\n }\r\n }\r\n notifyListeners(key, value) {\r\n this.localCache[key] = value;\r\n const listeners = this.listeners[key];\r\n if (listeners) {\r\n for (const listener of Array.from(listeners)) {\r\n listener(value ? JSON.parse(value) : value);\r\n }\r\n }\r\n }\r\n startPolling() {\r\n this.stopPolling();\r\n this.pollTimer = setInterval(() => {\r\n this.forAllChangedKeys((key, oldValue, newValue) => {\r\n this.onStorageEvent(new StorageEvent('storage', {\r\n key,\r\n oldValue,\r\n newValue\r\n }), \r\n /* poll */ true);\r\n });\r\n }, _POLLING_INTERVAL_MS$1);\r\n }\r\n stopPolling() {\r\n if (this.pollTimer) {\r\n clearInterval(this.pollTimer);\r\n this.pollTimer = null;\r\n }\r\n }\r\n attachListener() {\r\n window.addEventListener('storage', this.boundEventHandler);\r\n }\r\n detachListener() {\r\n window.removeEventListener('storage', this.boundEventHandler);\r\n }\r\n _addListener(key, listener) {\r\n if (Object.keys(this.listeners).length === 0) {\r\n // Whether browser can detect storage event when it had already been pushed to the background.\r\n // This may happen in some mobile browsers. A localStorage change in the foreground window\r\n // will not be detected in the background window via the storage event.\r\n // This was detected in iOS 7.x mobile browsers\r\n if (this.fallbackToPolling) {\r\n this.startPolling();\r\n }\r\n else {\r\n this.attachListener();\r\n }\r\n }\r\n if (!this.listeners[key]) {\r\n this.listeners[key] = new Set();\r\n // Populate the cache to avoid spuriously triggering on first poll.\r\n this.localCache[key] = this.storage.getItem(key);\r\n }\r\n this.listeners[key].add(listener);\r\n }\r\n _removeListener(key, listener) {\r\n if (this.listeners[key]) {\r\n this.listeners[key].delete(listener);\r\n if (this.listeners[key].size === 0) {\r\n delete this.listeners[key];\r\n }\r\n }\r\n if (Object.keys(this.listeners).length === 0) {\r\n this.detachListener();\r\n this.stopPolling();\r\n }\r\n }\r\n // Update local cache on base operations:\r\n async _set(key, value) {\r\n await super._set(key, value);\r\n this.localCache[key] = JSON.stringify(value);\r\n }\r\n async _get(key) {\r\n const value = await super._get(key);\r\n this.localCache[key] = JSON.stringify(value);\r\n return value;\r\n }\r\n async _remove(key) {\r\n await super._remove(key);\r\n delete this.localCache[key];\r\n }\r\n}\r\nBrowserLocalPersistence.type = 'LOCAL';\r\n/**\r\n * An implementation of {@link Persistence} of type `LOCAL` using `localStorage`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst browserLocalPersistence = BrowserLocalPersistence;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass BrowserSessionPersistence extends BrowserPersistenceClass {\r\n constructor() {\r\n super(() => window.sessionStorage, \"SESSION\" /* PersistenceType.SESSION */);\r\n }\r\n _addListener(_key, _listener) {\r\n // Listeners are not supported for session storage since it cannot be shared across windows\r\n return;\r\n }\r\n _removeListener(_key, _listener) {\r\n // Listeners are not supported for session storage since it cannot be shared across windows\r\n return;\r\n }\r\n}\r\nBrowserSessionPersistence.type = 'SESSION';\r\n/**\r\n * An implementation of {@link Persistence} of `SESSION` using `sessionStorage`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst browserSessionPersistence = BrowserSessionPersistence;\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Shim for Promise.allSettled, note the slightly different format of `fulfilled` vs `status`.\r\n *\r\n * @param promises - Array of promises to wait on.\r\n */\r\nfunction _allSettled(promises) {\r\n return Promise.all(promises.map(async (promise) => {\r\n try {\r\n const value = await promise;\r\n return {\r\n fulfilled: true,\r\n value\r\n };\r\n }\r\n catch (reason) {\r\n return {\r\n fulfilled: false,\r\n reason\r\n };\r\n }\r\n }));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface class for receiving messages.\r\n *\r\n */\r\nclass Receiver {\r\n constructor(eventTarget) {\r\n this.eventTarget = eventTarget;\r\n this.handlersMap = {};\r\n this.boundEventHandler = this.handleEvent.bind(this);\r\n }\r\n /**\r\n * Obtain an instance of a Receiver for a given event target, if none exists it will be created.\r\n *\r\n * @param eventTarget - An event target (such as window or self) through which the underlying\r\n * messages will be received.\r\n */\r\n static _getInstance(eventTarget) {\r\n // The results are stored in an array since objects can't be keys for other\r\n // objects. In addition, setting a unique property on an event target as a\r\n // hash map key may not be allowed due to CORS restrictions.\r\n const existingInstance = this.receivers.find(receiver => receiver.isListeningto(eventTarget));\r\n if (existingInstance) {\r\n return existingInstance;\r\n }\r\n const newInstance = new Receiver(eventTarget);\r\n this.receivers.push(newInstance);\r\n return newInstance;\r\n }\r\n isListeningto(eventTarget) {\r\n return this.eventTarget === eventTarget;\r\n }\r\n /**\r\n * Fans out a MessageEvent to the appropriate listeners.\r\n *\r\n * @remarks\r\n * Sends an {@link Status.ACK} upon receipt and a {@link Status.DONE} once all handlers have\r\n * finished processing.\r\n *\r\n * @param event - The MessageEvent.\r\n *\r\n */\r\n async handleEvent(event) {\r\n const messageEvent = event;\r\n const { eventId, eventType, data } = messageEvent.data;\r\n const handlers = this.handlersMap[eventType];\r\n if (!(handlers === null || handlers === void 0 ? void 0 : handlers.size)) {\r\n return;\r\n }\r\n messageEvent.ports[0].postMessage({\r\n status: \"ack\" /* _Status.ACK */,\r\n eventId,\r\n eventType\r\n });\r\n const promises = Array.from(handlers).map(async (handler) => handler(messageEvent.origin, data));\r\n const response = await _allSettled(promises);\r\n messageEvent.ports[0].postMessage({\r\n status: \"done\" /* _Status.DONE */,\r\n eventId,\r\n eventType,\r\n response\r\n });\r\n }\r\n /**\r\n * Subscribe an event handler for a particular event.\r\n *\r\n * @param eventType - Event name to subscribe to.\r\n * @param eventHandler - The event handler which should receive the events.\r\n *\r\n */\r\n _subscribe(eventType, eventHandler) {\r\n if (Object.keys(this.handlersMap).length === 0) {\r\n this.eventTarget.addEventListener('message', this.boundEventHandler);\r\n }\r\n if (!this.handlersMap[eventType]) {\r\n this.handlersMap[eventType] = new Set();\r\n }\r\n this.handlersMap[eventType].add(eventHandler);\r\n }\r\n /**\r\n * Unsubscribe an event handler from a particular event.\r\n *\r\n * @param eventType - Event name to unsubscribe from.\r\n * @param eventHandler - Optinoal event handler, if none provided, unsubscribe all handlers on this event.\r\n *\r\n */\r\n _unsubscribe(eventType, eventHandler) {\r\n if (this.handlersMap[eventType] && eventHandler) {\r\n this.handlersMap[eventType].delete(eventHandler);\r\n }\r\n if (!eventHandler || this.handlersMap[eventType].size === 0) {\r\n delete this.handlersMap[eventType];\r\n }\r\n if (Object.keys(this.handlersMap).length === 0) {\r\n this.eventTarget.removeEventListener('message', this.boundEventHandler);\r\n }\r\n }\r\n}\r\nReceiver.receivers = [];\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _generateEventId(prefix = '', digits = 10) {\r\n let random = '';\r\n for (let i = 0; i < digits; i++) {\r\n random += Math.floor(Math.random() * 10);\r\n }\r\n return prefix + random;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface for sending messages and waiting for a completion response.\r\n *\r\n */\r\nclass Sender {\r\n constructor(target) {\r\n this.target = target;\r\n this.handlers = new Set();\r\n }\r\n /**\r\n * Unsubscribe the handler and remove it from our tracking Set.\r\n *\r\n * @param handler - The handler to unsubscribe.\r\n */\r\n removeMessageHandler(handler) {\r\n if (handler.messageChannel) {\r\n handler.messageChannel.port1.removeEventListener('message', handler.onMessage);\r\n handler.messageChannel.port1.close();\r\n }\r\n this.handlers.delete(handler);\r\n }\r\n /**\r\n * Send a message to the Receiver located at {@link target}.\r\n *\r\n * @remarks\r\n * We'll first wait a bit for an ACK , if we get one we will wait significantly longer until the\r\n * receiver has had a chance to fully process the event.\r\n *\r\n * @param eventType - Type of event to send.\r\n * @param data - The payload of the event.\r\n * @param timeout - Timeout for waiting on an ACK from the receiver.\r\n *\r\n * @returns An array of settled promises from all the handlers that were listening on the receiver.\r\n */\r\n async _send(eventType, data, timeout = 50 /* _TimeoutDuration.ACK */) {\r\n const messageChannel = typeof MessageChannel !== 'undefined' ? new MessageChannel() : null;\r\n if (!messageChannel) {\r\n throw new Error(\"connection_unavailable\" /* _MessageError.CONNECTION_UNAVAILABLE */);\r\n }\r\n // Node timers and browser timers return fundamentally different types.\r\n // We don't actually care what the value is but TS won't accept unknown and\r\n // we can't cast properly in both environments.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let completionTimer;\r\n let handler;\r\n return new Promise((resolve, reject) => {\r\n const eventId = _generateEventId('', 20);\r\n messageChannel.port1.start();\r\n const ackTimer = setTimeout(() => {\r\n reject(new Error(\"unsupported_event\" /* _MessageError.UNSUPPORTED_EVENT */));\r\n }, timeout);\r\n handler = {\r\n messageChannel,\r\n onMessage(event) {\r\n const messageEvent = event;\r\n if (messageEvent.data.eventId !== eventId) {\r\n return;\r\n }\r\n switch (messageEvent.data.status) {\r\n case \"ack\" /* _Status.ACK */:\r\n // The receiver should ACK first.\r\n clearTimeout(ackTimer);\r\n completionTimer = setTimeout(() => {\r\n reject(new Error(\"timeout\" /* _MessageError.TIMEOUT */));\r\n }, 3000 /* _TimeoutDuration.COMPLETION */);\r\n break;\r\n case \"done\" /* _Status.DONE */:\r\n // Once the receiver's handlers are finished we will get the results.\r\n clearTimeout(completionTimer);\r\n resolve(messageEvent.data.response);\r\n break;\r\n default:\r\n clearTimeout(ackTimer);\r\n clearTimeout(completionTimer);\r\n reject(new Error(\"invalid_response\" /* _MessageError.INVALID_RESPONSE */));\r\n break;\r\n }\r\n }\r\n };\r\n this.handlers.add(handler);\r\n messageChannel.port1.addEventListener('message', handler.onMessage);\r\n this.target.postMessage({\r\n eventType,\r\n eventId,\r\n data\r\n }, [messageChannel.port2]);\r\n }).finally(() => {\r\n if (handler) {\r\n this.removeMessageHandler(handler);\r\n }\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Lazy accessor for window, since the compat layer won't tree shake this out,\r\n * we need to make sure not to mess with window unless we have to\r\n */\r\nfunction _window() {\r\n return window;\r\n}\r\nfunction _setWindowLocation(url) {\r\n _window().location.href = url;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _isWorker() {\r\n return (typeof _window()['WorkerGlobalScope'] !== 'undefined' &&\r\n typeof _window()['importScripts'] === 'function');\r\n}\r\nasync function _getActiveServiceWorker() {\r\n if (!(navigator === null || navigator === void 0 ? void 0 : navigator.serviceWorker)) {\r\n return null;\r\n }\r\n try {\r\n const registration = await navigator.serviceWorker.ready;\r\n return registration.active;\r\n }\r\n catch (_a) {\r\n return null;\r\n }\r\n}\r\nfunction _getServiceWorkerController() {\r\n var _a;\r\n return ((_a = navigator === null || navigator === void 0 ? void 0 : navigator.serviceWorker) === null || _a === void 0 ? void 0 : _a.controller) || null;\r\n}\r\nfunction _getWorkerGlobalScope() {\r\n return _isWorker() ? self : null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DB_NAME = 'firebaseLocalStorageDb';\r\nconst DB_VERSION = 1;\r\nconst DB_OBJECTSTORE_NAME = 'firebaseLocalStorage';\r\nconst DB_DATA_KEYPATH = 'fbase_key';\r\n/**\r\n * Promise wrapper for IDBRequest\r\n *\r\n * Unfortunately we can't cleanly extend Promise<T> since promises are not callable in ES6\r\n *\r\n */\r\nclass DBPromise {\r\n constructor(request) {\r\n this.request = request;\r\n }\r\n toPromise() {\r\n return new Promise((resolve, reject) => {\r\n this.request.addEventListener('success', () => {\r\n resolve(this.request.result);\r\n });\r\n this.request.addEventListener('error', () => {\r\n reject(this.request.error);\r\n });\r\n });\r\n }\r\n}\r\nfunction getObjectStore(db, isReadWrite) {\r\n return db\r\n .transaction([DB_OBJECTSTORE_NAME], isReadWrite ? 'readwrite' : 'readonly')\r\n .objectStore(DB_OBJECTSTORE_NAME);\r\n}\r\nfunction _deleteDatabase() {\r\n const request = indexedDB.deleteDatabase(DB_NAME);\r\n return new DBPromise(request).toPromise();\r\n}\r\nfunction _openDatabase() {\r\n const request = indexedDB.open(DB_NAME, DB_VERSION);\r\n return new Promise((resolve, reject) => {\r\n request.addEventListener('error', () => {\r\n reject(request.error);\r\n });\r\n request.addEventListener('upgradeneeded', () => {\r\n const db = request.result;\r\n try {\r\n db.createObjectStore(DB_OBJECTSTORE_NAME, { keyPath: DB_DATA_KEYPATH });\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n });\r\n request.addEventListener('success', async () => {\r\n const db = request.result;\r\n // Strange bug that occurs in Firefox when multiple tabs are opened at the\r\n // same time. The only way to recover seems to be deleting the database\r\n // and re-initializing it.\r\n // https://github.com/firebase/firebase-js-sdk/issues/634\r\n if (!db.objectStoreNames.contains(DB_OBJECTSTORE_NAME)) {\r\n // Need to close the database or else you get a `blocked` event\r\n db.close();\r\n await _deleteDatabase();\r\n resolve(await _openDatabase());\r\n }\r\n else {\r\n resolve(db);\r\n }\r\n });\r\n });\r\n}\r\nasync function _putObject(db, key, value) {\r\n const request = getObjectStore(db, true).put({\r\n [DB_DATA_KEYPATH]: key,\r\n value\r\n });\r\n return new DBPromise(request).toPromise();\r\n}\r\nasync function getObject(db, key) {\r\n const request = getObjectStore(db, false).get(key);\r\n const data = await new DBPromise(request).toPromise();\r\n return data === undefined ? null : data.value;\r\n}\r\nfunction _deleteObject(db, key) {\r\n const request = getObjectStore(db, true).delete(key);\r\n return new DBPromise(request).toPromise();\r\n}\r\nconst _POLLING_INTERVAL_MS = 800;\r\nconst _TRANSACTION_RETRY_COUNT = 3;\r\nclass IndexedDBLocalPersistence {\r\n constructor() {\r\n this.type = \"LOCAL\" /* PersistenceType.LOCAL */;\r\n this._shouldAllowMigration = true;\r\n this.listeners = {};\r\n this.localCache = {};\r\n // setTimeout return value is platform specific\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.pollTimer = null;\r\n this.pendingWrites = 0;\r\n this.receiver = null;\r\n this.sender = null;\r\n this.serviceWorkerReceiverAvailable = false;\r\n this.activeServiceWorker = null;\r\n // Fire & forget the service worker registration as it may never resolve\r\n this._workerInitializationPromise =\r\n this.initializeServiceWorkerMessaging().then(() => { }, () => { });\r\n }\r\n async _openDb() {\r\n if (this.db) {\r\n return this.db;\r\n }\r\n this.db = await _openDatabase();\r\n return this.db;\r\n }\r\n async _withRetries(op) {\r\n let numAttempts = 0;\r\n while (true) {\r\n try {\r\n const db = await this._openDb();\r\n return await op(db);\r\n }\r\n catch (e) {\r\n if (numAttempts++ > _TRANSACTION_RETRY_COUNT) {\r\n throw e;\r\n }\r\n if (this.db) {\r\n this.db.close();\r\n this.db = undefined;\r\n }\r\n // TODO: consider adding exponential backoff\r\n }\r\n }\r\n }\r\n /**\r\n * IndexedDB events do not propagate from the main window to the worker context. We rely on a\r\n * postMessage interface to send these events to the worker ourselves.\r\n */\r\n async initializeServiceWorkerMessaging() {\r\n return _isWorker() ? this.initializeReceiver() : this.initializeSender();\r\n }\r\n /**\r\n * As the worker we should listen to events from the main window.\r\n */\r\n async initializeReceiver() {\r\n this.receiver = Receiver._getInstance(_getWorkerGlobalScope());\r\n // Refresh from persistence if we receive a KeyChanged message.\r\n this.receiver._subscribe(\"keyChanged\" /* _EventType.KEY_CHANGED */, async (_origin, data) => {\r\n const keys = await this._poll();\r\n return {\r\n keyProcessed: keys.includes(data.key)\r\n };\r\n });\r\n // Let the sender know that we are listening so they give us more timeout.\r\n this.receiver._subscribe(\"ping\" /* _EventType.PING */, async (_origin, _data) => {\r\n return [\"keyChanged\" /* _EventType.KEY_CHANGED */];\r\n });\r\n }\r\n /**\r\n * As the main window, we should let the worker know when keys change (set and remove).\r\n *\r\n * @remarks\r\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/ready | ServiceWorkerContainer.ready}\r\n * may not resolve.\r\n */\r\n async initializeSender() {\r\n var _a, _b;\r\n // Check to see if there's an active service worker.\r\n this.activeServiceWorker = await _getActiveServiceWorker();\r\n if (!this.activeServiceWorker) {\r\n return;\r\n }\r\n this.sender = new Sender(this.activeServiceWorker);\r\n // Ping the service worker to check what events they can handle.\r\n const results = await this.sender._send(\"ping\" /* _EventType.PING */, {}, 800 /* _TimeoutDuration.LONG_ACK */);\r\n if (!results) {\r\n return;\r\n }\r\n if (((_a = results[0]) === null || _a === void 0 ? void 0 : _a.fulfilled) &&\r\n ((_b = results[0]) === null || _b === void 0 ? void 0 : _b.value.includes(\"keyChanged\" /* _EventType.KEY_CHANGED */))) {\r\n this.serviceWorkerReceiverAvailable = true;\r\n }\r\n }\r\n /**\r\n * Let the worker know about a changed key, the exact key doesn't technically matter since the\r\n * worker will just trigger a full sync anyway.\r\n *\r\n * @remarks\r\n * For now, we only support one service worker per page.\r\n *\r\n * @param key - Storage key which changed.\r\n */\r\n async notifyServiceWorker(key) {\r\n if (!this.sender ||\r\n !this.activeServiceWorker ||\r\n _getServiceWorkerController() !== this.activeServiceWorker) {\r\n return;\r\n }\r\n try {\r\n await this.sender._send(\"keyChanged\" /* _EventType.KEY_CHANGED */, { key }, \r\n // Use long timeout if receiver has previously responded to a ping from us.\r\n this.serviceWorkerReceiverAvailable\r\n ? 800 /* _TimeoutDuration.LONG_ACK */\r\n : 50 /* _TimeoutDuration.ACK */);\r\n }\r\n catch (_a) {\r\n // This is a best effort approach. Ignore errors.\r\n }\r\n }\r\n async _isAvailable() {\r\n try {\r\n if (!indexedDB) {\r\n return false;\r\n }\r\n const db = await _openDatabase();\r\n await _putObject(db, STORAGE_AVAILABLE_KEY, '1');\r\n await _deleteObject(db, STORAGE_AVAILABLE_KEY);\r\n return true;\r\n }\r\n catch (_a) { }\r\n return false;\r\n }\r\n async _withPendingWrite(write) {\r\n this.pendingWrites++;\r\n try {\r\n await write();\r\n }\r\n finally {\r\n this.pendingWrites--;\r\n }\r\n }\r\n async _set(key, value) {\r\n return this._withPendingWrite(async () => {\r\n await this._withRetries((db) => _putObject(db, key, value));\r\n this.localCache[key] = value;\r\n return this.notifyServiceWorker(key);\r\n });\r\n }\r\n async _get(key) {\r\n const obj = (await this._withRetries((db) => getObject(db, key)));\r\n this.localCache[key] = obj;\r\n return obj;\r\n }\r\n async _remove(key) {\r\n return this._withPendingWrite(async () => {\r\n await this._withRetries((db) => _deleteObject(db, key));\r\n delete this.localCache[key];\r\n return this.notifyServiceWorker(key);\r\n });\r\n }\r\n async _poll() {\r\n // TODO: check if we need to fallback if getAll is not supported\r\n const result = await this._withRetries((db) => {\r\n const getAllRequest = getObjectStore(db, false).getAll();\r\n return new DBPromise(getAllRequest).toPromise();\r\n });\r\n if (!result) {\r\n return [];\r\n }\r\n // If we have pending writes in progress abort, we'll get picked up on the next poll\r\n if (this.pendingWrites !== 0) {\r\n return [];\r\n }\r\n const keys = [];\r\n const keysInResult = new Set();\r\n for (const { fbase_key: key, value } of result) {\r\n keysInResult.add(key);\r\n if (JSON.stringify(this.localCache[key]) !== JSON.stringify(value)) {\r\n this.notifyListeners(key, value);\r\n keys.push(key);\r\n }\r\n }\r\n for (const localKey of Object.keys(this.localCache)) {\r\n if (this.localCache[localKey] && !keysInResult.has(localKey)) {\r\n // Deleted\r\n this.notifyListeners(localKey, null);\r\n keys.push(localKey);\r\n }\r\n }\r\n return keys;\r\n }\r\n notifyListeners(key, newValue) {\r\n this.localCache[key] = newValue;\r\n const listeners = this.listeners[key];\r\n if (listeners) {\r\n for (const listener of Array.from(listeners)) {\r\n listener(newValue);\r\n }\r\n }\r\n }\r\n startPolling() {\r\n this.stopPolling();\r\n this.pollTimer = setInterval(async () => this._poll(), _POLLING_INTERVAL_MS);\r\n }\r\n stopPolling() {\r\n if (this.pollTimer) {\r\n clearInterval(this.pollTimer);\r\n this.pollTimer = null;\r\n }\r\n }\r\n _addListener(key, listener) {\r\n if (Object.keys(this.listeners).length === 0) {\r\n this.startPolling();\r\n }\r\n if (!this.listeners[key]) {\r\n this.listeners[key] = new Set();\r\n // Populate the cache to avoid spuriously triggering on first poll.\r\n void this._get(key); // This can happen in the background async and we can return immediately.\r\n }\r\n this.listeners[key].add(listener);\r\n }\r\n _removeListener(key, listener) {\r\n if (this.listeners[key]) {\r\n this.listeners[key].delete(listener);\r\n if (this.listeners[key].size === 0) {\r\n delete this.listeners[key];\r\n }\r\n }\r\n if (Object.keys(this.listeners).length === 0) {\r\n this.stopPolling();\r\n }\r\n }\r\n}\r\nIndexedDBLocalPersistence.type = 'LOCAL';\r\n/**\r\n * An implementation of {@link Persistence} of type `LOCAL` using `indexedDB`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst indexedDBLocalPersistence = IndexedDBLocalPersistence;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction startSignInPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaSignIn:start\" /* Endpoint.START_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeSignInPhoneMfa(auth, request) {\r\n return _performApiRequest(auth, \"POST\" /* HttpMethod.POST */, \"/v2/accounts/mfaSignIn:finalize\" /* Endpoint.FINALIZE_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function getRecaptchaParams(auth) {\r\n return ((await _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v1/recaptchaParams\" /* Endpoint.GET_RECAPTCHA_PARAM */)).recaptchaSiteKey || '');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getScriptParentElement() {\r\n var _a, _b;\r\n return (_b = (_a = document.getElementsByTagName('head')) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : document;\r\n}\r\nfunction _loadJS(url) {\r\n // TODO: consider adding timeout support & cancellation\r\n return new Promise((resolve, reject) => {\r\n const el = document.createElement('script');\r\n el.setAttribute('src', url);\r\n el.onload = resolve;\r\n el.onerror = e => {\r\n const error = _createError(\"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n error.customData = e;\r\n reject(error);\r\n };\r\n el.type = 'text/javascript';\r\n el.charset = 'UTF-8';\r\n getScriptParentElement().appendChild(el);\r\n });\r\n}\r\nfunction _generateCallbackName(prefix) {\r\n return `__${prefix}${Math.floor(Math.random() * 1000000)}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _SOLVE_TIME_MS = 500;\r\nconst _EXPIRATION_TIME_MS = 60000;\r\nconst _WIDGET_ID_START = 1000000000000;\r\nclass MockReCaptcha {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.counter = _WIDGET_ID_START;\r\n this._widgets = new Map();\r\n }\r\n render(container, parameters) {\r\n const id = this.counter;\r\n this._widgets.set(id, new MockWidget(container, this.auth.name, parameters || {}));\r\n this.counter++;\r\n return id;\r\n }\r\n reset(optWidgetId) {\r\n var _a;\r\n const id = optWidgetId || _WIDGET_ID_START;\r\n void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.delete());\r\n this._widgets.delete(id);\r\n }\r\n getResponse(optWidgetId) {\r\n var _a;\r\n const id = optWidgetId || _WIDGET_ID_START;\r\n return ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.getResponse()) || '';\r\n }\r\n async execute(optWidgetId) {\r\n var _a;\r\n const id = optWidgetId || _WIDGET_ID_START;\r\n void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.execute());\r\n return '';\r\n }\r\n}\r\nclass MockWidget {\r\n constructor(containerOrId, appName, params) {\r\n this.params = params;\r\n this.timerId = null;\r\n this.deleted = false;\r\n this.responseToken = null;\r\n this.clickHandler = () => {\r\n this.execute();\r\n };\r\n const container = typeof containerOrId === 'string'\r\n ? document.getElementById(containerOrId)\r\n : containerOrId;\r\n _assert(container, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */, { appName });\r\n this.container = container;\r\n this.isVisible = this.params.size !== 'invisible';\r\n if (this.isVisible) {\r\n this.execute();\r\n }\r\n else {\r\n this.container.addEventListener('click', this.clickHandler);\r\n }\r\n }\r\n getResponse() {\r\n this.checkIfDeleted();\r\n return this.responseToken;\r\n }\r\n delete() {\r\n this.checkIfDeleted();\r\n this.deleted = true;\r\n if (this.timerId) {\r\n clearTimeout(this.timerId);\r\n this.timerId = null;\r\n }\r\n this.container.removeEventListener('click', this.clickHandler);\r\n }\r\n execute() {\r\n this.checkIfDeleted();\r\n if (this.timerId) {\r\n return;\r\n }\r\n this.timerId = window.setTimeout(() => {\r\n this.responseToken = generateRandomAlphaNumericString(50);\r\n const { callback, 'expired-callback': expiredCallback } = this.params;\r\n if (callback) {\r\n try {\r\n callback(this.responseToken);\r\n }\r\n catch (e) { }\r\n }\r\n this.timerId = window.setTimeout(() => {\r\n this.timerId = null;\r\n this.responseToken = null;\r\n if (expiredCallback) {\r\n try {\r\n expiredCallback();\r\n }\r\n catch (e) { }\r\n }\r\n if (this.isVisible) {\r\n this.execute();\r\n }\r\n }, _EXPIRATION_TIME_MS);\r\n }, _SOLVE_TIME_MS);\r\n }\r\n checkIfDeleted() {\r\n if (this.deleted) {\r\n throw new Error('reCAPTCHA mock was already deleted!');\r\n }\r\n }\r\n}\r\nfunction generateRandomAlphaNumericString(len) {\r\n const chars = [];\r\n const allowedChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n for (let i = 0; i < len; i++) {\r\n chars.push(allowedChars.charAt(Math.floor(Math.random() * allowedChars.length)));\r\n }\r\n return chars.join('');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// ReCaptcha will load using the same callback, so the callback function needs\r\n// to be kept around\r\nconst _JSLOAD_CALLBACK = _generateCallbackName('rcb');\r\nconst NETWORK_TIMEOUT_DELAY = new Delay(30000, 60000);\r\nconst RECAPTCHA_BASE = 'https://www.google.com/recaptcha/api.js?';\r\n/**\r\n * Loader for the GReCaptcha library. There should only ever be one of this.\r\n */\r\nclass ReCaptchaLoaderImpl {\r\n constructor() {\r\n var _a;\r\n this.hostLanguage = '';\r\n this.counter = 0;\r\n /**\r\n * Check for `render()` method. `window.grecaptcha` will exist if the Enterprise\r\n * version of the ReCAPTCHA script was loaded by someone else (e.g. App Check) but\r\n * `window.grecaptcha.render()` will not. Another load will add it.\r\n */\r\n this.librarySeparatelyLoaded = !!((_a = _window().grecaptcha) === null || _a === void 0 ? void 0 : _a.render);\r\n }\r\n load(auth, hl = '') {\r\n _assert(isHostLanguageValid(hl), auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n if (this.shouldResolveImmediately(hl)) {\r\n return Promise.resolve(_window().grecaptcha);\r\n }\r\n return new Promise((resolve, reject) => {\r\n const networkTimeout = _window().setTimeout(() => {\r\n reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n }, NETWORK_TIMEOUT_DELAY.get());\r\n _window()[_JSLOAD_CALLBACK] = () => {\r\n _window().clearTimeout(networkTimeout);\r\n delete _window()[_JSLOAD_CALLBACK];\r\n const recaptcha = _window().grecaptcha;\r\n if (!recaptcha) {\r\n reject(_createError(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */));\r\n return;\r\n }\r\n // Wrap the greptcha render function so that we know if the developer has\r\n // called it separately\r\n const render = recaptcha.render;\r\n recaptcha.render = (container, params) => {\r\n const widgetId = render(container, params);\r\n this.counter++;\r\n return widgetId;\r\n };\r\n this.hostLanguage = hl;\r\n resolve(recaptcha);\r\n };\r\n const url = `${RECAPTCHA_BASE}?${querystring({\r\n onload: _JSLOAD_CALLBACK,\r\n render: 'explicit',\r\n hl\r\n })}`;\r\n _loadJS(url).catch(() => {\r\n clearTimeout(networkTimeout);\r\n reject(_createError(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */));\r\n });\r\n });\r\n }\r\n clearedOneInstance() {\r\n this.counter--;\r\n }\r\n shouldResolveImmediately(hl) {\r\n var _a;\r\n // We can resolve immediately if:\r\n // • grecaptcha is already defined AND (\r\n // 1. the requested language codes are the same OR\r\n // 2. there exists already a ReCaptcha on the page\r\n // 3. the library was already loaded by the app\r\n // In cases (2) and (3), we _can't_ reload as it would break the recaptchas\r\n // that are already in the page\r\n return (!!((_a = _window().grecaptcha) === null || _a === void 0 ? void 0 : _a.render) &&\r\n (hl === this.hostLanguage ||\r\n this.counter > 0 ||\r\n this.librarySeparatelyLoaded));\r\n }\r\n}\r\nfunction isHostLanguageValid(hl) {\r\n return hl.length <= 6 && /^\\s*[a-zA-Z0-9\\-]*\\s*$/.test(hl);\r\n}\r\nclass MockReCaptchaLoaderImpl {\r\n async load(auth) {\r\n return new MockReCaptcha(auth);\r\n }\r\n clearedOneInstance() { }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst RECAPTCHA_VERIFIER_TYPE = 'recaptcha';\r\nconst DEFAULT_PARAMS = {\r\n theme: 'light',\r\n type: 'image'\r\n};\r\n/**\r\n * An {@link https://www.google.com/recaptcha/ | reCAPTCHA}-based application verifier.\r\n *\r\n * @public\r\n */\r\nclass RecaptchaVerifier {\r\n /**\r\n *\r\n * @param containerOrId - The reCAPTCHA container parameter.\r\n *\r\n * @remarks\r\n * This has different meaning depending on whether the reCAPTCHA is hidden or visible. For a\r\n * visible reCAPTCHA the container must be empty. If a string is used, it has to correspond to\r\n * an element ID. The corresponding element must also must be in the DOM at the time of\r\n * initialization.\r\n *\r\n * @param parameters - The optional reCAPTCHA parameters.\r\n *\r\n * @remarks\r\n * Check the reCAPTCHA docs for a comprehensive list. All parameters are accepted except for\r\n * the sitekey. Firebase Auth backend provisions a reCAPTCHA for each project and will\r\n * configure this upon rendering. For an invisible reCAPTCHA, a size key must have the value\r\n * 'invisible'.\r\n *\r\n * @param authExtern - The corresponding Firebase {@link Auth} instance.\r\n */\r\n constructor(containerOrId, parameters = Object.assign({}, DEFAULT_PARAMS), authExtern) {\r\n this.parameters = parameters;\r\n /**\r\n * The application verifier type.\r\n *\r\n * @remarks\r\n * For a reCAPTCHA verifier, this is 'recaptcha'.\r\n */\r\n this.type = RECAPTCHA_VERIFIER_TYPE;\r\n this.destroyed = false;\r\n this.widgetId = null;\r\n this.tokenChangeListeners = new Set();\r\n this.renderPromise = null;\r\n this.recaptcha = null;\r\n this.auth = _castAuth(authExtern);\r\n this.isInvisible = this.parameters.size === 'invisible';\r\n _assert(typeof document !== 'undefined', this.auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n const container = typeof containerOrId === 'string'\r\n ? document.getElementById(containerOrId)\r\n : containerOrId;\r\n _assert(container, this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n this.container = container;\r\n this.parameters.callback = this.makeTokenCallback(this.parameters.callback);\r\n this._recaptchaLoader = this.auth.settings.appVerificationDisabledForTesting\r\n ? new MockReCaptchaLoaderImpl()\r\n : new ReCaptchaLoaderImpl();\r\n this.validateStartingState();\r\n // TODO: Figure out if sdk version is needed\r\n }\r\n /**\r\n * Waits for the user to solve the reCAPTCHA and resolves with the reCAPTCHA token.\r\n *\r\n * @returns A Promise for the reCAPTCHA token.\r\n */\r\n async verify() {\r\n this.assertNotDestroyed();\r\n const id = await this.render();\r\n const recaptcha = this.getAssertedRecaptcha();\r\n const response = recaptcha.getResponse(id);\r\n if (response) {\r\n return response;\r\n }\r\n return new Promise(resolve => {\r\n const tokenChange = (token) => {\r\n if (!token) {\r\n return; // Ignore token expirations.\r\n }\r\n this.tokenChangeListeners.delete(tokenChange);\r\n resolve(token);\r\n };\r\n this.tokenChangeListeners.add(tokenChange);\r\n if (this.isInvisible) {\r\n recaptcha.execute(id);\r\n }\r\n });\r\n }\r\n /**\r\n * Renders the reCAPTCHA widget on the page.\r\n *\r\n * @returns A Promise that resolves with the reCAPTCHA widget ID.\r\n */\r\n render() {\r\n try {\r\n this.assertNotDestroyed();\r\n }\r\n catch (e) {\r\n // This method returns a promise. Since it's not async (we want to return the\r\n // _same_ promise if rendering is still occurring), the API surface should\r\n // reject with the error rather than just throw\r\n return Promise.reject(e);\r\n }\r\n if (this.renderPromise) {\r\n return this.renderPromise;\r\n }\r\n this.renderPromise = this.makeRenderPromise().catch(e => {\r\n this.renderPromise = null;\r\n throw e;\r\n });\r\n return this.renderPromise;\r\n }\r\n /** @internal */\r\n _reset() {\r\n this.assertNotDestroyed();\r\n if (this.widgetId !== null) {\r\n this.getAssertedRecaptcha().reset(this.widgetId);\r\n }\r\n }\r\n /**\r\n * Clears the reCAPTCHA widget from the page and destroys the instance.\r\n */\r\n clear() {\r\n this.assertNotDestroyed();\r\n this.destroyed = true;\r\n this._recaptchaLoader.clearedOneInstance();\r\n if (!this.isInvisible) {\r\n this.container.childNodes.forEach(node => {\r\n this.container.removeChild(node);\r\n });\r\n }\r\n }\r\n validateStartingState() {\r\n _assert(!this.parameters.sitekey, this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert(this.isInvisible || !this.container.hasChildNodes(), this.auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert(typeof document !== 'undefined', this.auth, \"operation-not-supported-in-this-environment\" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);\r\n }\r\n makeTokenCallback(existing) {\r\n return token => {\r\n this.tokenChangeListeners.forEach(listener => listener(token));\r\n if (typeof existing === 'function') {\r\n existing(token);\r\n }\r\n else if (typeof existing === 'string') {\r\n const globalFunc = _window()[existing];\r\n if (typeof globalFunc === 'function') {\r\n globalFunc(token);\r\n }\r\n }\r\n };\r\n }\r\n assertNotDestroyed() {\r\n _assert(!this.destroyed, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n async makeRenderPromise() {\r\n await this.init();\r\n if (!this.widgetId) {\r\n let container = this.container;\r\n if (!this.isInvisible) {\r\n const guaranteedEmpty = document.createElement('div');\r\n container.appendChild(guaranteedEmpty);\r\n container = guaranteedEmpty;\r\n }\r\n this.widgetId = this.getAssertedRecaptcha().render(container, this.parameters);\r\n }\r\n return this.widgetId;\r\n }\r\n async init() {\r\n _assert(_isHttpOrHttps() && !_isWorker(), this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n await domReady();\r\n this.recaptcha = await this._recaptchaLoader.load(this.auth, this.auth.languageCode || undefined);\r\n const siteKey = await getRecaptchaParams(this.auth);\r\n _assert(siteKey, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n this.parameters.sitekey = siteKey;\r\n }\r\n getAssertedRecaptcha() {\r\n _assert(this.recaptcha, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return this.recaptcha;\r\n }\r\n}\r\nfunction domReady() {\r\n let resolver = null;\r\n return new Promise(resolve => {\r\n if (document.readyState === 'complete') {\r\n resolve();\r\n return;\r\n }\r\n // Document not ready, wait for load before resolving.\r\n // Save resolver, so we can remove listener in case it was externally\r\n // cancelled.\r\n resolver = () => resolve();\r\n window.addEventListener('load', resolver);\r\n }).catch(e => {\r\n if (resolver) {\r\n window.removeEventListener('load', resolver);\r\n }\r\n throw e;\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ConfirmationResultImpl {\r\n constructor(verificationId, onConfirmation) {\r\n this.verificationId = verificationId;\r\n this.onConfirmation = onConfirmation;\r\n }\r\n confirm(verificationCode) {\r\n const authCredential = PhoneAuthCredential._fromVerification(this.verificationId, verificationCode);\r\n return this.onConfirmation(authCredential);\r\n }\r\n}\r\n/**\r\n * Asynchronously signs in using a phone number.\r\n *\r\n * @remarks\r\n * This method sends a code via SMS to the given\r\n * phone number, and returns a {@link ConfirmationResult}. After the user\r\n * provides the code sent to their phone, call {@link ConfirmationResult.confirm}\r\n * with the code to sign the user in.\r\n *\r\n * For abuse prevention, this method also requires a {@link ApplicationVerifier}.\r\n * This SDK includes a reCAPTCHA-based implementation, {@link RecaptchaVerifier}.\r\n * This function can work on other platforms that do not support the\r\n * {@link RecaptchaVerifier} (like React Native), but you need to use a\r\n * third-party {@link ApplicationVerifier} implementation.\r\n *\r\n * @example\r\n * ```javascript\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container');\r\n * const confirmationResult = await signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n * // Obtain a verificationCode from the user.\r\n * const credential = await confirmationResult.confirm(verificationCode);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function signInWithPhoneNumber(auth, phoneNumber, appVerifier) {\r\n const authInternal = _castAuth(auth);\r\n const verificationId = await _verifyPhoneNumber(authInternal, phoneNumber, getModularInstance(appVerifier));\r\n return new ConfirmationResultImpl(verificationId, cred => signInWithCredential(authInternal, cred));\r\n}\r\n/**\r\n * Links the user account with the given phone number.\r\n *\r\n * @param user - The user.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function linkWithPhoneNumber(user, phoneNumber, appVerifier) {\r\n const userInternal = getModularInstance(user);\r\n await _assertLinkedStatus(false, userInternal, \"phone\" /* ProviderId.PHONE */);\r\n const verificationId = await _verifyPhoneNumber(userInternal.auth, phoneNumber, getModularInstance(appVerifier));\r\n return new ConfirmationResultImpl(verificationId, cred => linkWithCredential(userInternal, cred));\r\n}\r\n/**\r\n * Re-authenticates a user using a fresh phone credential.\r\n *\r\n * @remarks Use before operations such as {@link updatePassword} that require tokens from recent sign-in attempts.\r\n *\r\n * @param user - The user.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithPhoneNumber(user, phoneNumber, appVerifier) {\r\n const userInternal = getModularInstance(user);\r\n const verificationId = await _verifyPhoneNumber(userInternal.auth, phoneNumber, getModularInstance(appVerifier));\r\n return new ConfirmationResultImpl(verificationId, cred => reauthenticateWithCredential(userInternal, cred));\r\n}\r\n/**\r\n * Returns a verification ID to be used in conjunction with the SMS code that is sent.\r\n *\r\n */\r\nasync function _verifyPhoneNumber(auth, options, verifier) {\r\n var _a;\r\n const recaptchaToken = await verifier.verify();\r\n try {\r\n _assert(typeof recaptchaToken === 'string', auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n _assert(verifier.type === RECAPTCHA_VERIFIER_TYPE, auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n let phoneInfoOptions;\r\n if (typeof options === 'string') {\r\n phoneInfoOptions = {\r\n phoneNumber: options\r\n };\r\n }\r\n else {\r\n phoneInfoOptions = options;\r\n }\r\n if ('session' in phoneInfoOptions) {\r\n const session = phoneInfoOptions.session;\r\n if ('phoneNumber' in phoneInfoOptions) {\r\n _assert(session.type === \"enroll\" /* MultiFactorSessionType.ENROLL */, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const response = await startEnrollPhoneMfa(auth, {\r\n idToken: session.credential,\r\n phoneEnrollmentInfo: {\r\n phoneNumber: phoneInfoOptions.phoneNumber,\r\n recaptchaToken\r\n }\r\n });\r\n return response.phoneSessionInfo.sessionInfo;\r\n }\r\n else {\r\n _assert(session.type === \"signin\" /* MultiFactorSessionType.SIGN_IN */, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n const mfaEnrollmentId = ((_a = phoneInfoOptions.multiFactorHint) === null || _a === void 0 ? void 0 : _a.uid) ||\r\n phoneInfoOptions.multiFactorUid;\r\n _assert(mfaEnrollmentId, auth, \"missing-multi-factor-info\" /* AuthErrorCode.MISSING_MFA_INFO */);\r\n const response = await startSignInPhoneMfa(auth, {\r\n mfaPendingCredential: session.credential,\r\n mfaEnrollmentId,\r\n phoneSignInInfo: {\r\n recaptchaToken\r\n }\r\n });\r\n return response.phoneResponseInfo.sessionInfo;\r\n }\r\n }\r\n else {\r\n const { sessionInfo } = await sendPhoneVerificationCode(auth, {\r\n phoneNumber: phoneInfoOptions.phoneNumber,\r\n recaptchaToken\r\n });\r\n return sessionInfo;\r\n }\r\n }\r\n finally {\r\n verifier._reset();\r\n }\r\n}\r\n/**\r\n * Updates the user's phone number.\r\n *\r\n * @example\r\n * ```\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new RecaptchaVerifier('recaptcha-container');\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber('+16505550101', applicationVerifier);\r\n * // Obtain the verificationCode from the user.\r\n * const phoneCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * await updatePhoneNumber(user, phoneCredential);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param credential - A credential authenticating the new phone number.\r\n *\r\n * @public\r\n */\r\nasync function updatePhoneNumber(user, credential) {\r\n await _link$1(getModularInstance(user), credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link PhoneAuthCredential}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new RecaptchaVerifier('recaptcha-container');\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber('+16505550101', applicationVerifier);\r\n * // Obtain the verificationCode from the user.\r\n * const phoneCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * const userCredential = await signInWithCredential(auth, phoneCredential);\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass PhoneAuthProvider {\r\n /**\r\n * @param auth - The Firebase {@link Auth} instance in which sign-ins should occur.\r\n *\r\n */\r\n constructor(auth) {\r\n /** Always set to {@link ProviderId}.PHONE. */\r\n this.providerId = PhoneAuthProvider.PROVIDER_ID;\r\n this.auth = _castAuth(auth);\r\n }\r\n /**\r\n *\r\n * Starts a phone number authentication flow by sending a verification code to the given phone\r\n * number.\r\n *\r\n * @example\r\n * ```javascript\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber(phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const authCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * const userCredential = await signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * An alternative flow is provided using the `signInWithPhoneNumber` method.\r\n * ```javascript\r\n * const confirmationResult = signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const userCredential = confirmationResult.confirm(verificationCode);\r\n * ```\r\n *\r\n * @param phoneInfoOptions - The user's {@link PhoneInfoOptions}. The phone number should be in\r\n * E.164 format (e.g. +16505550101).\r\n * @param applicationVerifier - For abuse prevention, this method also requires a\r\n * {@link ApplicationVerifier}. This SDK includes a reCAPTCHA-based implementation,\r\n * {@link RecaptchaVerifier}.\r\n *\r\n * @returns A Promise for a verification ID that can be passed to\r\n * {@link PhoneAuthProvider.credential} to identify this flow..\r\n */\r\n verifyPhoneNumber(phoneOptions, applicationVerifier) {\r\n return _verifyPhoneNumber(this.auth, phoneOptions, getModularInstance(applicationVerifier));\r\n }\r\n /**\r\n * Creates a phone auth credential, given the verification ID from\r\n * {@link PhoneAuthProvider.verifyPhoneNumber} and the code that was sent to the user's\r\n * mobile device.\r\n *\r\n * @example\r\n * ```javascript\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = provider.verifyPhoneNumber(phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const authCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * const userCredential = signInWithCredential(auth, authCredential);\r\n * ```\r\n *\r\n * @example\r\n * An alternative flow is provided using the `signInWithPhoneNumber` method.\r\n * ```javascript\r\n * const confirmationResult = await signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n * // Obtain verificationCode from the user.\r\n * const userCredential = await confirmationResult.confirm(verificationCode);\r\n * ```\r\n *\r\n * @param verificationId - The verification ID returned from {@link PhoneAuthProvider.verifyPhoneNumber}.\r\n * @param verificationCode - The verification code sent to the user's mobile device.\r\n *\r\n * @returns The auth provider credential.\r\n */\r\n static credential(verificationId, verificationCode) {\r\n return PhoneAuthCredential._fromVerification(verificationId, verificationCode);\r\n }\r\n /**\r\n * Generates an {@link AuthCredential} from a {@link UserCredential}.\r\n * @param userCredential - The user credential.\r\n */\r\n static credentialFromResult(userCredential) {\r\n const credential = userCredential;\r\n return PhoneAuthProvider.credentialFromTaggedObject(credential);\r\n }\r\n /**\r\n * Returns an {@link AuthCredential} when passed an error.\r\n *\r\n * @remarks\r\n *\r\n * This method works for errors like\r\n * `auth/account-exists-with-different-credentials`. This is useful for\r\n * recovering when attempting to set a user's phone number but the number\r\n * in question is already tied to another account. For example, the following\r\n * code tries to update the current user's phone number, and if that\r\n * fails, links the user with the account associated with that number:\r\n *\r\n * ```js\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber(number, verifier);\r\n * try {\r\n * const code = ''; // Prompt the user for the verification code\r\n * await updatePhoneNumber(\r\n * auth.currentUser,\r\n * PhoneAuthProvider.credential(verificationId, code));\r\n * } catch (e) {\r\n * if ((e as FirebaseError)?.code === 'auth/account-exists-with-different-credential') {\r\n * const cred = PhoneAuthProvider.credentialFromError(e);\r\n * await linkWithCredential(auth.currentUser, cred);\r\n * }\r\n * }\r\n *\r\n * // At this point, auth.currentUser.phoneNumber === number.\r\n * ```\r\n *\r\n * @param error - The error to generate a credential from.\r\n */\r\n static credentialFromError(error) {\r\n return PhoneAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n }\r\n static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n if (!tokenResponse) {\r\n return null;\r\n }\r\n const { phoneNumber, temporaryProof } = tokenResponse;\r\n if (phoneNumber && temporaryProof) {\r\n return PhoneAuthCredential._fromTokenResponse(phoneNumber, temporaryProof);\r\n }\r\n return null;\r\n }\r\n}\r\n/** Always set to {@link ProviderId}.PHONE. */\r\nPhoneAuthProvider.PROVIDER_ID = \"phone\" /* ProviderId.PHONE */;\r\n/** Always set to {@link SignInMethod}.PHONE. */\r\nPhoneAuthProvider.PHONE_SIGN_IN_METHOD = \"phone\" /* SignInMethod.PHONE */;\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Chooses a popup/redirect resolver to use. This prefers the override (which\r\n * is directly passed in), and falls back to the property set on the auth\r\n * object. If neither are available, this function errors w/ an argument error.\r\n */\r\nfunction _withDefaultResolver(auth, resolverOverride) {\r\n if (resolverOverride) {\r\n return _getInstance(resolverOverride);\r\n }\r\n _assert(auth._popupRedirectResolver, auth, \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */);\r\n return auth._popupRedirectResolver;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass IdpCredential extends AuthCredential {\r\n constructor(params) {\r\n super(\"custom\" /* ProviderId.CUSTOM */, \"custom\" /* ProviderId.CUSTOM */);\r\n this.params = params;\r\n }\r\n _getIdTokenResponse(auth) {\r\n return signInWithIdp(auth, this._buildIdpRequest());\r\n }\r\n _linkToIdToken(auth, idToken) {\r\n return signInWithIdp(auth, this._buildIdpRequest(idToken));\r\n }\r\n _getReauthenticationResolver(auth) {\r\n return signInWithIdp(auth, this._buildIdpRequest());\r\n }\r\n _buildIdpRequest(idToken) {\r\n const request = {\r\n requestUri: this.params.requestUri,\r\n sessionId: this.params.sessionId,\r\n postBody: this.params.postBody,\r\n tenantId: this.params.tenantId,\r\n pendingToken: this.params.pendingToken,\r\n returnSecureToken: true,\r\n returnIdpCredential: true\r\n };\r\n if (idToken) {\r\n request.idToken = idToken;\r\n }\r\n return request;\r\n }\r\n}\r\nfunction _signIn(params) {\r\n return _signInWithCredential(params.auth, new IdpCredential(params), params.bypassAuthState);\r\n}\r\nfunction _reauth(params) {\r\n const { auth, user } = params;\r\n _assert(user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return _reauthenticate(user, new IdpCredential(params), params.bypassAuthState);\r\n}\r\nasync function _link(params) {\r\n const { auth, user } = params;\r\n _assert(user, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return _link$1(user, new IdpCredential(params), params.bypassAuthState);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Popup event manager. Handles the popup's entire lifecycle; listens to auth\r\n * events\r\n */\r\nclass AbstractPopupRedirectOperation {\r\n constructor(auth, filter, resolver, user, bypassAuthState = false) {\r\n this.auth = auth;\r\n this.resolver = resolver;\r\n this.user = user;\r\n this.bypassAuthState = bypassAuthState;\r\n this.pendingPromise = null;\r\n this.eventManager = null;\r\n this.filter = Array.isArray(filter) ? filter : [filter];\r\n }\r\n execute() {\r\n return new Promise(async (resolve, reject) => {\r\n this.pendingPromise = { resolve, reject };\r\n try {\r\n this.eventManager = await this.resolver._initialize(this.auth);\r\n await this.onExecution();\r\n this.eventManager.registerConsumer(this);\r\n }\r\n catch (e) {\r\n this.reject(e);\r\n }\r\n });\r\n }\r\n async onAuthEvent(event) {\r\n const { urlResponse, sessionId, postBody, tenantId, error, type } = event;\r\n if (error) {\r\n this.reject(error);\r\n return;\r\n }\r\n const params = {\r\n auth: this.auth,\r\n requestUri: urlResponse,\r\n sessionId: sessionId,\r\n tenantId: tenantId || undefined,\r\n postBody: postBody || undefined,\r\n user: this.user,\r\n bypassAuthState: this.bypassAuthState\r\n };\r\n try {\r\n this.resolve(await this.getIdpTask(type)(params));\r\n }\r\n catch (e) {\r\n this.reject(e);\r\n }\r\n }\r\n onError(error) {\r\n this.reject(error);\r\n }\r\n getIdpTask(type) {\r\n switch (type) {\r\n case \"signInViaPopup\" /* AuthEventType.SIGN_IN_VIA_POPUP */:\r\n case \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */:\r\n return _signIn;\r\n case \"linkViaPopup\" /* AuthEventType.LINK_VIA_POPUP */:\r\n case \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */:\r\n return _link;\r\n case \"reauthViaPopup\" /* AuthEventType.REAUTH_VIA_POPUP */:\r\n case \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */:\r\n return _reauth;\r\n default:\r\n _fail(this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }\r\n }\r\n resolve(cred) {\r\n debugAssert(this.pendingPromise, 'Pending promise was never set');\r\n this.pendingPromise.resolve(cred);\r\n this.unregisterAndCleanUp();\r\n }\r\n reject(error) {\r\n debugAssert(this.pendingPromise, 'Pending promise was never set');\r\n this.pendingPromise.reject(error);\r\n this.unregisterAndCleanUp();\r\n }\r\n unregisterAndCleanUp() {\r\n if (this.eventManager) {\r\n this.eventManager.unregisterConsumer(this);\r\n }\r\n this.pendingPromise = null;\r\n this.cleanUp();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _POLL_WINDOW_CLOSE_TIMEOUT = new Delay(2000, 10000);\r\n/**\r\n * Authenticates a Firebase client using a popup-based OAuth authentication flow.\r\n *\r\n * @remarks\r\n * If succeeds, returns the signed in user along with the provider's credential. If sign in was\r\n * unsuccessful, returns an error object containing additional information about the error.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n *\r\n * @public\r\n */\r\nasync function signInWithPopup(auth, provider, resolver) {\r\n const authInternal = _castAuth(auth);\r\n _assertInstanceOf(auth, provider, FederatedAuthProvider);\r\n const resolverInternal = _withDefaultResolver(authInternal, resolver);\r\n const action = new PopupOperation(authInternal, \"signInViaPopup\" /* AuthEventType.SIGN_IN_VIA_POPUP */, provider, resolverInternal);\r\n return action.executeNotNull();\r\n}\r\n/**\r\n * Reauthenticates the current user with the specified {@link OAuthProvider} using a pop-up based\r\n * OAuth flow.\r\n *\r\n * @remarks\r\n * If the reauthentication is successful, the returned result will contain the user and the\r\n * provider's credential.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n * // Reauthenticate using a popup.\r\n * await reauthenticateWithPopup(result.user, provider);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithPopup(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n const action = new PopupOperation(userInternal.auth, \"reauthViaPopup\" /* AuthEventType.REAUTH_VIA_POPUP */, provider, resolverInternal, userInternal);\r\n return action.executeNotNull();\r\n}\r\n/**\r\n * Links the authenticated provider to the user account using a pop-up based OAuth flow.\r\n *\r\n * @remarks\r\n * If the linking is successful, the returned result will contain the user and the provider's credential.\r\n *\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using some other provider.\r\n * const result = await signInWithEmailAndPassword(auth, email, password);\r\n * // Link using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * await linkWithPopup(result.user, provider);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function linkWithPopup(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n const action = new PopupOperation(userInternal.auth, \"linkViaPopup\" /* AuthEventType.LINK_VIA_POPUP */, provider, resolverInternal, userInternal);\r\n return action.executeNotNull();\r\n}\r\n/**\r\n * Popup event manager. Handles the popup's entire lifecycle; listens to auth\r\n * events\r\n *\r\n */\r\nclass PopupOperation extends AbstractPopupRedirectOperation {\r\n constructor(auth, filter, provider, resolver, user) {\r\n super(auth, filter, resolver, user);\r\n this.provider = provider;\r\n this.authWindow = null;\r\n this.pollId = null;\r\n if (PopupOperation.currentPopupAction) {\r\n PopupOperation.currentPopupAction.cancel();\r\n }\r\n PopupOperation.currentPopupAction = this;\r\n }\r\n async executeNotNull() {\r\n const result = await this.execute();\r\n _assert(result, this.auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return result;\r\n }\r\n async onExecution() {\r\n debugAssert(this.filter.length === 1, 'Popup operations only handle one event');\r\n const eventId = _generateEventId();\r\n this.authWindow = await this.resolver._openPopup(this.auth, this.provider, this.filter[0], // There's always one, see constructor\r\n eventId);\r\n this.authWindow.associatedEvent = eventId;\r\n // Check for web storage support and origin validation _after_ the popup is\r\n // loaded. These operations are slow (~1 second or so) Rather than\r\n // waiting on them before opening the window, optimistically open the popup\r\n // and check for storage support at the same time. If storage support is\r\n // not available, this will cause the whole thing to reject properly. It\r\n // will also close the popup, but since the promise has already rejected,\r\n // the popup closed by user poll will reject into the void.\r\n this.resolver._originValidation(this.auth).catch(e => {\r\n this.reject(e);\r\n });\r\n this.resolver._isIframeWebStorageSupported(this.auth, isSupported => {\r\n if (!isSupported) {\r\n this.reject(_createError(this.auth, \"web-storage-unsupported\" /* AuthErrorCode.WEB_STORAGE_UNSUPPORTED */));\r\n }\r\n });\r\n // Handle user closure. Notice this does *not* use await\r\n this.pollUserCancellation();\r\n }\r\n get eventId() {\r\n var _a;\r\n return ((_a = this.authWindow) === null || _a === void 0 ? void 0 : _a.associatedEvent) || null;\r\n }\r\n cancel() {\r\n this.reject(_createError(this.auth, \"cancelled-popup-request\" /* AuthErrorCode.EXPIRED_POPUP_REQUEST */));\r\n }\r\n cleanUp() {\r\n if (this.authWindow) {\r\n this.authWindow.close();\r\n }\r\n if (this.pollId) {\r\n window.clearTimeout(this.pollId);\r\n }\r\n this.authWindow = null;\r\n this.pollId = null;\r\n PopupOperation.currentPopupAction = null;\r\n }\r\n pollUserCancellation() {\r\n const poll = () => {\r\n var _a, _b;\r\n if ((_b = (_a = this.authWindow) === null || _a === void 0 ? void 0 : _a.window) === null || _b === void 0 ? void 0 : _b.closed) {\r\n // Make sure that there is sufficient time for whatever action to\r\n // complete. The window could have closed but the sign in network\r\n // call could still be in flight.\r\n this.pollId = window.setTimeout(() => {\r\n this.pollId = null;\r\n this.reject(_createError(this.auth, \"popup-closed-by-user\" /* AuthErrorCode.POPUP_CLOSED_BY_USER */));\r\n }, 2000 /* _Timeout.AUTH_EVENT */);\r\n return;\r\n }\r\n this.pollId = window.setTimeout(poll, _POLL_WINDOW_CLOSE_TIMEOUT.get());\r\n };\r\n poll();\r\n }\r\n}\r\n// Only one popup is ever shown at once. The lifecycle of the current popup\r\n// can be managed / cancelled by the constructor.\r\nPopupOperation.currentPopupAction = null;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PENDING_REDIRECT_KEY = 'pendingRedirect';\r\n// We only get one redirect outcome for any one auth, so just store it\r\n// in here.\r\nconst redirectOutcomeMap = new Map();\r\nclass RedirectAction extends AbstractPopupRedirectOperation {\r\n constructor(auth, resolver, bypassAuthState = false) {\r\n super(auth, [\r\n \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */,\r\n \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */,\r\n \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */,\r\n \"unknown\" /* AuthEventType.UNKNOWN */\r\n ], resolver, undefined, bypassAuthState);\r\n this.eventId = null;\r\n }\r\n /**\r\n * Override the execute function; if we already have a redirect result, then\r\n * just return it.\r\n */\r\n async execute() {\r\n let readyOutcome = redirectOutcomeMap.get(this.auth._key());\r\n if (!readyOutcome) {\r\n try {\r\n const hasPendingRedirect = await _getAndClearPendingRedirectStatus(this.resolver, this.auth);\r\n const result = hasPendingRedirect ? await super.execute() : null;\r\n readyOutcome = () => Promise.resolve(result);\r\n }\r\n catch (e) {\r\n readyOutcome = () => Promise.reject(e);\r\n }\r\n redirectOutcomeMap.set(this.auth._key(), readyOutcome);\r\n }\r\n // If we're not bypassing auth state, the ready outcome should be set to\r\n // null.\r\n if (!this.bypassAuthState) {\r\n redirectOutcomeMap.set(this.auth._key(), () => Promise.resolve(null));\r\n }\r\n return readyOutcome();\r\n }\r\n async onAuthEvent(event) {\r\n if (event.type === \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */) {\r\n return super.onAuthEvent(event);\r\n }\r\n else if (event.type === \"unknown\" /* AuthEventType.UNKNOWN */) {\r\n // This is a sentinel value indicating there's no pending redirect\r\n this.resolve(null);\r\n return;\r\n }\r\n if (event.eventId) {\r\n const user = await this.auth._redirectUserForId(event.eventId);\r\n if (user) {\r\n this.user = user;\r\n return super.onAuthEvent(event);\r\n }\r\n else {\r\n this.resolve(null);\r\n }\r\n }\r\n }\r\n async onExecution() { }\r\n cleanUp() { }\r\n}\r\nasync function _getAndClearPendingRedirectStatus(resolver, auth) {\r\n const key = pendingRedirectKey(auth);\r\n const persistence = resolverPersistence(resolver);\r\n if (!(await persistence._isAvailable())) {\r\n return false;\r\n }\r\n const hasPendingRedirect = (await persistence._get(key)) === 'true';\r\n await persistence._remove(key);\r\n return hasPendingRedirect;\r\n}\r\nasync function _setPendingRedirectStatus(resolver, auth) {\r\n return resolverPersistence(resolver)._set(pendingRedirectKey(auth), 'true');\r\n}\r\nfunction _clearRedirectOutcomes() {\r\n redirectOutcomeMap.clear();\r\n}\r\nfunction _overrideRedirectResult(auth, result) {\r\n redirectOutcomeMap.set(auth._key(), result);\r\n}\r\nfunction resolverPersistence(resolver) {\r\n return _getInstance(resolver._redirectPersistence);\r\n}\r\nfunction pendingRedirectKey(auth) {\r\n return _persistenceKeyName(PENDING_REDIRECT_KEY, auth.config.apiKey, auth.name);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Authenticates a Firebase client using a full-page redirect flow.\r\n *\r\n * @remarks\r\n * To handle the results and errors for this operation, refer to {@link getRedirectResult}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // You can add additional scopes to the provider:\r\n * provider.addScope('user_birthday');\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * }\r\n * // As this API can be used for sign-in, linking and reauthentication,\r\n * // check the operationType to determine what triggered this redirect\r\n * // operation.\r\n * const operationType = result.operationType;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nfunction signInWithRedirect(auth, provider, resolver) {\r\n return _signInWithRedirect(auth, provider, resolver);\r\n}\r\nasync function _signInWithRedirect(auth, provider, resolver) {\r\n const authInternal = _castAuth(auth);\r\n _assertInstanceOf(auth, provider, FederatedAuthProvider);\r\n const resolverInternal = _withDefaultResolver(authInternal, resolver);\r\n await _setPendingRedirectStatus(resolverInternal, authInternal);\r\n return resolverInternal._openRedirect(authInternal, provider, \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */);\r\n}\r\n/**\r\n * Reauthenticates the current user with the specified {@link OAuthProvider} using a full-page redirect flow.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * // Link using a redirect.\r\n * await linkWithRedirect(result.user, provider);\r\n * // This will again trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nfunction reauthenticateWithRedirect(user, provider, resolver) {\r\n return _reauthenticateWithRedirect(user, provider, resolver);\r\n}\r\nasync function _reauthenticateWithRedirect(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n // Allow the resolver to error before persisting the redirect user\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n await _setPendingRedirectStatus(resolverInternal, userInternal.auth);\r\n const eventId = await prepareUserForRedirect(userInternal);\r\n return resolverInternal._openRedirect(userInternal.auth, provider, \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */, eventId);\r\n}\r\n/**\r\n * Links the {@link OAuthProvider} to the user account using a full-page redirect flow.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using some other provider.\r\n * const result = await signInWithEmailAndPassword(auth, email, password);\r\n * // Link using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * await linkWithRedirect(result.user, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n *\r\n * @public\r\n */\r\nfunction linkWithRedirect(user, provider, resolver) {\r\n return _linkWithRedirect(user, provider, resolver);\r\n}\r\nasync function _linkWithRedirect(user, provider, resolver) {\r\n const userInternal = getModularInstance(user);\r\n _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n // Allow the resolver to error before persisting the redirect user\r\n const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n await _assertLinkedStatus(false, userInternal, provider.providerId);\r\n await _setPendingRedirectStatus(resolverInternal, userInternal.auth);\r\n const eventId = await prepareUserForRedirect(userInternal);\r\n return resolverInternal._openRedirect(userInternal.auth, provider, \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */, eventId);\r\n}\r\n/**\r\n * Returns a {@link UserCredential} from the redirect-based sign-in flow.\r\n *\r\n * @remarks\r\n * If sign-in succeeded, returns the signed in user. If sign-in was unsuccessful, fails with an\r\n * error. If no redirect operation was called, returns `null`.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // You can add additional scopes to the provider:\r\n * provider.addScope('user_birthday');\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n * // This is the signed-in user\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * }\r\n * // As this API can be used for sign-in, linking and reauthentication,\r\n * // check the operationType to determine what triggered this redirect\r\n * // operation.\r\n * const operationType = result.operationType;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function getRedirectResult(auth, resolver) {\r\n await _castAuth(auth)._initializationPromise;\r\n return _getRedirectResult(auth, resolver, false);\r\n}\r\nasync function _getRedirectResult(auth, resolverExtern, bypassAuthState = false) {\r\n const authInternal = _castAuth(auth);\r\n const resolver = _withDefaultResolver(authInternal, resolverExtern);\r\n const action = new RedirectAction(authInternal, resolver, bypassAuthState);\r\n const result = await action.execute();\r\n if (result && !bypassAuthState) {\r\n delete result.user._redirectEventId;\r\n await authInternal._persistUserIfCurrent(result.user);\r\n await authInternal._setRedirectUser(null, resolverExtern);\r\n }\r\n return result;\r\n}\r\nasync function prepareUserForRedirect(user) {\r\n const eventId = _generateEventId(`${user.uid}:::`);\r\n user._redirectEventId = eventId;\r\n await user.auth._setRedirectUser(user);\r\n await user.auth._persistUserIfCurrent(user);\r\n return eventId;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// The amount of time to store the UIDs of seen events; this is\r\n// set to 10 min by default\r\nconst EVENT_DUPLICATION_CACHE_DURATION_MS = 10 * 60 * 1000;\r\nclass AuthEventManager {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.cachedEventUids = new Set();\r\n this.consumers = new Set();\r\n this.queuedRedirectEvent = null;\r\n this.hasHandledPotentialRedirect = false;\r\n this.lastProcessedEventTime = Date.now();\r\n }\r\n registerConsumer(authEventConsumer) {\r\n this.consumers.add(authEventConsumer);\r\n if (this.queuedRedirectEvent &&\r\n this.isEventForConsumer(this.queuedRedirectEvent, authEventConsumer)) {\r\n this.sendToConsumer(this.queuedRedirectEvent, authEventConsumer);\r\n this.saveEventToCache(this.queuedRedirectEvent);\r\n this.queuedRedirectEvent = null;\r\n }\r\n }\r\n unregisterConsumer(authEventConsumer) {\r\n this.consumers.delete(authEventConsumer);\r\n }\r\n onEvent(event) {\r\n // Check if the event has already been handled\r\n if (this.hasEventBeenHandled(event)) {\r\n return false;\r\n }\r\n let handled = false;\r\n this.consumers.forEach(consumer => {\r\n if (this.isEventForConsumer(event, consumer)) {\r\n handled = true;\r\n this.sendToConsumer(event, consumer);\r\n this.saveEventToCache(event);\r\n }\r\n });\r\n if (this.hasHandledPotentialRedirect || !isRedirectEvent(event)) {\r\n // If we've already seen a redirect before, or this is a popup event,\r\n // bail now\r\n return handled;\r\n }\r\n this.hasHandledPotentialRedirect = true;\r\n // If the redirect wasn't handled, hang on to it\r\n if (!handled) {\r\n this.queuedRedirectEvent = event;\r\n handled = true;\r\n }\r\n return handled;\r\n }\r\n sendToConsumer(event, consumer) {\r\n var _a;\r\n if (event.error && !isNullRedirectEvent(event)) {\r\n const code = ((_a = event.error.code) === null || _a === void 0 ? void 0 : _a.split('auth/')[1]) ||\r\n \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */;\r\n consumer.onError(_createError(this.auth, code));\r\n }\r\n else {\r\n consumer.onAuthEvent(event);\r\n }\r\n }\r\n isEventForConsumer(event, consumer) {\r\n const eventIdMatches = consumer.eventId === null ||\r\n (!!event.eventId && event.eventId === consumer.eventId);\r\n return consumer.filter.includes(event.type) && eventIdMatches;\r\n }\r\n hasEventBeenHandled(event) {\r\n if (Date.now() - this.lastProcessedEventTime >=\r\n EVENT_DUPLICATION_CACHE_DURATION_MS) {\r\n this.cachedEventUids.clear();\r\n }\r\n return this.cachedEventUids.has(eventUid(event));\r\n }\r\n saveEventToCache(event) {\r\n this.cachedEventUids.add(eventUid(event));\r\n this.lastProcessedEventTime = Date.now();\r\n }\r\n}\r\nfunction eventUid(e) {\r\n return [e.type, e.eventId, e.sessionId, e.tenantId].filter(v => v).join('-');\r\n}\r\nfunction isNullRedirectEvent({ type, error }) {\r\n return (type === \"unknown\" /* AuthEventType.UNKNOWN */ &&\r\n (error === null || error === void 0 ? void 0 : error.code) === `auth/${\"no-auth-event\" /* AuthErrorCode.NO_AUTH_EVENT */}`);\r\n}\r\nfunction isRedirectEvent(event) {\r\n switch (event.type) {\r\n case \"signInViaRedirect\" /* AuthEventType.SIGN_IN_VIA_REDIRECT */:\r\n case \"linkViaRedirect\" /* AuthEventType.LINK_VIA_REDIRECT */:\r\n case \"reauthViaRedirect\" /* AuthEventType.REAUTH_VIA_REDIRECT */:\r\n return true;\r\n case \"unknown\" /* AuthEventType.UNKNOWN */:\r\n return isNullRedirectEvent(event);\r\n default:\r\n return false;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _getProjectConfig(auth, request = {}) {\r\n return _performApiRequest(auth, \"GET\" /* HttpMethod.GET */, \"/v1/projects\" /* Endpoint.GET_PROJECT_CONFIG */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IP_ADDRESS_REGEX = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\r\nconst HTTP_REGEX = /^https?/;\r\nasync function _validateOrigin(auth) {\r\n // Skip origin validation if we are in an emulated environment\r\n if (auth.config.emulator) {\r\n return;\r\n }\r\n const { authorizedDomains } = await _getProjectConfig(auth);\r\n for (const domain of authorizedDomains) {\r\n try {\r\n if (matchDomain(domain)) {\r\n return;\r\n }\r\n }\r\n catch (_a) {\r\n // Do nothing if there's a URL error; just continue searching\r\n }\r\n }\r\n // In the old SDK, this error also provides helpful messages.\r\n _fail(auth, \"unauthorized-domain\" /* AuthErrorCode.INVALID_ORIGIN */);\r\n}\r\nfunction matchDomain(expected) {\r\n const currentUrl = _getCurrentUrl();\r\n const { protocol, hostname } = new URL(currentUrl);\r\n if (expected.startsWith('chrome-extension://')) {\r\n const ceUrl = new URL(expected);\r\n if (ceUrl.hostname === '' && hostname === '') {\r\n // For some reason we're not parsing chrome URLs properly\r\n return (protocol === 'chrome-extension:' &&\r\n expected.replace('chrome-extension://', '') ===\r\n currentUrl.replace('chrome-extension://', ''));\r\n }\r\n return protocol === 'chrome-extension:' && ceUrl.hostname === hostname;\r\n }\r\n if (!HTTP_REGEX.test(protocol)) {\r\n return false;\r\n }\r\n if (IP_ADDRESS_REGEX.test(expected)) {\r\n // The domain has to be exactly equal to the pattern, as an IP domain will\r\n // only contain the IP, no extra character.\r\n return hostname === expected;\r\n }\r\n // Dots in pattern should be escaped.\r\n const escapedDomainPattern = expected.replace(/\\./g, '\\\\.');\r\n // Non ip address domains.\r\n // domain.com = *.domain.com OR domain.com\r\n const re = new RegExp('^(.+\\\\.' + escapedDomainPattern + '|' + escapedDomainPattern + ')$', 'i');\r\n return re.test(hostname);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst NETWORK_TIMEOUT = new Delay(30000, 60000);\r\n/**\r\n * Reset unlaoded GApi modules. If gapi.load fails due to a network error,\r\n * it will stop working after a retrial. This is a hack to fix this issue.\r\n */\r\nfunction resetUnloadedGapiModules() {\r\n // Clear last failed gapi.load state to force next gapi.load to first\r\n // load the failed gapi.iframes module.\r\n // Get gapix.beacon context.\r\n const beacon = _window().___jsl;\r\n // Get current hint.\r\n if (beacon === null || beacon === void 0 ? void 0 : beacon.H) {\r\n // Get gapi hint.\r\n for (const hint of Object.keys(beacon.H)) {\r\n // Requested modules.\r\n beacon.H[hint].r = beacon.H[hint].r || [];\r\n // Loaded modules.\r\n beacon.H[hint].L = beacon.H[hint].L || [];\r\n // Set requested modules to a copy of the loaded modules.\r\n beacon.H[hint].r = [...beacon.H[hint].L];\r\n // Clear pending callbacks.\r\n if (beacon.CP) {\r\n for (let i = 0; i < beacon.CP.length; i++) {\r\n // Remove all failed pending callbacks.\r\n beacon.CP[i] = null;\r\n }\r\n }\r\n }\r\n }\r\n}\r\nfunction loadGapi(auth) {\r\n return new Promise((resolve, reject) => {\r\n var _a, _b, _c;\r\n // Function to run when gapi.load is ready.\r\n function loadGapiIframe() {\r\n // The developer may have tried to previously run gapi.load and failed.\r\n // Run this to fix that.\r\n resetUnloadedGapiModules();\r\n gapi.load('gapi.iframes', {\r\n callback: () => {\r\n resolve(gapi.iframes.getContext());\r\n },\r\n ontimeout: () => {\r\n // The above reset may be sufficient, but having this reset after\r\n // failure ensures that if the developer calls gapi.load after the\r\n // connection is re-established and before another attempt to embed\r\n // the iframe, it would work and would not be broken because of our\r\n // failed attempt.\r\n // Timeout when gapi.iframes.Iframe not loaded.\r\n resetUnloadedGapiModules();\r\n reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n },\r\n timeout: NETWORK_TIMEOUT.get()\r\n });\r\n }\r\n if ((_b = (_a = _window().gapi) === null || _a === void 0 ? void 0 : _a.iframes) === null || _b === void 0 ? void 0 : _b.Iframe) {\r\n // If gapi.iframes.Iframe available, resolve.\r\n resolve(gapi.iframes.getContext());\r\n }\r\n else if (!!((_c = _window().gapi) === null || _c === void 0 ? void 0 : _c.load)) {\r\n // Gapi loader ready, load gapi.iframes.\r\n loadGapiIframe();\r\n }\r\n else {\r\n // Create a new iframe callback when this is called so as not to overwrite\r\n // any previous defined callback. This happens if this method is called\r\n // multiple times in parallel and could result in the later callback\r\n // overwriting the previous one. This would end up with a iframe\r\n // timeout.\r\n const cbName = _generateCallbackName('iframefcb');\r\n // GApi loader not available, dynamically load platform.js.\r\n _window()[cbName] = () => {\r\n // GApi loader should be ready.\r\n if (!!gapi.load) {\r\n loadGapiIframe();\r\n }\r\n else {\r\n // Gapi loader failed, throw error.\r\n reject(_createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */));\r\n }\r\n };\r\n // Load GApi loader.\r\n return _loadJS(`https://apis.google.com/js/api.js?onload=${cbName}`)\r\n .catch(e => reject(e));\r\n }\r\n }).catch(error => {\r\n // Reset cached promise to allow for retrial.\r\n cachedGApiLoader = null;\r\n throw error;\r\n });\r\n}\r\nlet cachedGApiLoader = null;\r\nfunction _loadGapi(auth) {\r\n cachedGApiLoader = cachedGApiLoader || loadGapi(auth);\r\n return cachedGApiLoader;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PING_TIMEOUT = new Delay(5000, 15000);\r\nconst IFRAME_PATH = '__/auth/iframe';\r\nconst EMULATED_IFRAME_PATH = 'emulator/auth/iframe';\r\nconst IFRAME_ATTRIBUTES = {\r\n style: {\r\n position: 'absolute',\r\n top: '-100px',\r\n width: '1px',\r\n height: '1px'\r\n },\r\n 'aria-hidden': 'true',\r\n tabindex: '-1'\r\n};\r\n// Map from apiHost to endpoint ID for passing into iframe. In current SDK, apiHost can be set to\r\n// anything (not from a list of endpoints with IDs as in legacy), so this is the closest we can get.\r\nconst EID_FROM_APIHOST = new Map([\r\n [\"identitytoolkit.googleapis.com\" /* DefaultConfig.API_HOST */, 'p'],\r\n ['staging-identitytoolkit.sandbox.googleapis.com', 's'],\r\n ['test-identitytoolkit.sandbox.googleapis.com', 't'] // test\r\n]);\r\nfunction getIframeUrl(auth) {\r\n const config = auth.config;\r\n _assert(config.authDomain, auth, \"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */);\r\n const url = config.emulator\r\n ? _emulatorUrl(config, EMULATED_IFRAME_PATH)\r\n : `https://${auth.config.authDomain}/${IFRAME_PATH}`;\r\n const params = {\r\n apiKey: config.apiKey,\r\n appName: auth.name,\r\n v: SDK_VERSION\r\n };\r\n const eid = EID_FROM_APIHOST.get(auth.config.apiHost);\r\n if (eid) {\r\n params.eid = eid;\r\n }\r\n const frameworks = auth._getFrameworks();\r\n if (frameworks.length) {\r\n params.fw = frameworks.join(',');\r\n }\r\n return `${url}?${querystring(params).slice(1)}`;\r\n}\r\nasync function _openIframe(auth) {\r\n const context = await _loadGapi(auth);\r\n const gapi = _window().gapi;\r\n _assert(gapi, auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n return context.open({\r\n where: document.body,\r\n url: getIframeUrl(auth),\r\n messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER,\r\n attributes: IFRAME_ATTRIBUTES,\r\n dontclear: true\r\n }, (iframe) => new Promise(async (resolve, reject) => {\r\n await iframe.restyle({\r\n // Prevent iframe from closing on mouse out.\r\n setHideOnLeave: false\r\n });\r\n const networkError = _createError(auth, \"network-request-failed\" /* AuthErrorCode.NETWORK_REQUEST_FAILED */);\r\n // Confirm iframe is correctly loaded.\r\n // To fallback on failure, set a timeout.\r\n const networkErrorTimer = _window().setTimeout(() => {\r\n reject(networkError);\r\n }, PING_TIMEOUT.get());\r\n // Clear timer and resolve pending iframe ready promise.\r\n function clearTimerAndResolve() {\r\n _window().clearTimeout(networkErrorTimer);\r\n resolve(iframe);\r\n }\r\n // This returns an IThenable. However the reject part does not call\r\n // when the iframe is not loaded.\r\n iframe.ping(clearTimerAndResolve).then(clearTimerAndResolve, () => {\r\n reject(networkError);\r\n });\r\n }));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst BASE_POPUP_OPTIONS = {\r\n location: 'yes',\r\n resizable: 'yes',\r\n statusbar: 'yes',\r\n toolbar: 'no'\r\n};\r\nconst DEFAULT_WIDTH = 500;\r\nconst DEFAULT_HEIGHT = 600;\r\nconst TARGET_BLANK = '_blank';\r\nconst FIREFOX_EMPTY_URL = 'http://localhost';\r\nclass AuthPopup {\r\n constructor(window) {\r\n this.window = window;\r\n this.associatedEvent = null;\r\n }\r\n close() {\r\n if (this.window) {\r\n try {\r\n this.window.close();\r\n }\r\n catch (e) { }\r\n }\r\n }\r\n}\r\nfunction _open(auth, url, name, width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT) {\r\n const top = Math.max((window.screen.availHeight - height) / 2, 0).toString();\r\n const left = Math.max((window.screen.availWidth - width) / 2, 0).toString();\r\n let target = '';\r\n const options = Object.assign(Object.assign({}, BASE_POPUP_OPTIONS), { width: width.toString(), height: height.toString(), top,\r\n left });\r\n // Chrome iOS 7 and 8 is returning an undefined popup win when target is\r\n // specified, even though the popup is not necessarily blocked.\r\n const ua = getUA().toLowerCase();\r\n if (name) {\r\n target = _isChromeIOS(ua) ? TARGET_BLANK : name;\r\n }\r\n if (_isFirefox(ua)) {\r\n // Firefox complains when invalid URLs are popped out. Hacky way to bypass.\r\n url = url || FIREFOX_EMPTY_URL;\r\n // Firefox disables by default scrolling on popup windows, which can create\r\n // issues when the user has many Google accounts, for instance.\r\n options.scrollbars = 'yes';\r\n }\r\n const optionsString = Object.entries(options).reduce((accum, [key, value]) => `${accum}${key}=${value},`, '');\r\n if (_isIOSStandalone(ua) && target !== '_self') {\r\n openAsNewWindowIOS(url || '', target);\r\n return new AuthPopup(null);\r\n }\r\n // about:blank getting sanitized causing browsers like IE/Edge to display\r\n // brief error message before redirecting to handler.\r\n const newWin = window.open(url || '', target, optionsString);\r\n _assert(newWin, auth, \"popup-blocked\" /* AuthErrorCode.POPUP_BLOCKED */);\r\n // Flaky on IE edge, encapsulate with a try and catch.\r\n try {\r\n newWin.focus();\r\n }\r\n catch (e) { }\r\n return new AuthPopup(newWin);\r\n}\r\nfunction openAsNewWindowIOS(url, target) {\r\n const el = document.createElement('a');\r\n el.href = url;\r\n el.target = target;\r\n const click = document.createEvent('MouseEvent');\r\n click.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 1, null);\r\n el.dispatchEvent(click);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * URL for Authentication widget which will initiate the OAuth handshake\r\n *\r\n * @internal\r\n */\r\nconst WIDGET_PATH = '__/auth/handler';\r\n/**\r\n * URL for emulated environment\r\n *\r\n * @internal\r\n */\r\nconst EMULATOR_WIDGET_PATH = 'emulator/auth/handler';\r\nfunction _getRedirectUrl(auth, provider, authType, redirectUrl, eventId, additionalParams) {\r\n _assert(auth.config.authDomain, auth, \"auth-domain-config-required\" /* AuthErrorCode.MISSING_AUTH_DOMAIN */);\r\n _assert(auth.config.apiKey, auth, \"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */);\r\n const params = {\r\n apiKey: auth.config.apiKey,\r\n appName: auth.name,\r\n authType,\r\n redirectUrl,\r\n v: SDK_VERSION,\r\n eventId\r\n };\r\n if (provider instanceof FederatedAuthProvider) {\r\n provider.setDefaultLanguage(auth.languageCode);\r\n params.providerId = provider.providerId || '';\r\n if (!isEmpty(provider.getCustomParameters())) {\r\n params.customParameters = JSON.stringify(provider.getCustomParameters());\r\n }\r\n // TODO set additionalParams from the provider as well?\r\n for (const [key, value] of Object.entries(additionalParams || {})) {\r\n params[key] = value;\r\n }\r\n }\r\n if (provider instanceof BaseOAuthProvider) {\r\n const scopes = provider.getScopes().filter(scope => scope !== '');\r\n if (scopes.length > 0) {\r\n params.scopes = scopes.join(',');\r\n }\r\n }\r\n if (auth.tenantId) {\r\n params.tid = auth.tenantId;\r\n }\r\n // TODO: maybe set eid as endipointId\r\n // TODO: maybe set fw as Frameworks.join(\",\")\r\n const paramsDict = params;\r\n for (const key of Object.keys(paramsDict)) {\r\n if (paramsDict[key] === undefined) {\r\n delete paramsDict[key];\r\n }\r\n }\r\n return `${getHandlerBase(auth)}?${querystring(paramsDict).slice(1)}`;\r\n}\r\nfunction getHandlerBase({ config }) {\r\n if (!config.emulator) {\r\n return `https://${config.authDomain}/${WIDGET_PATH}`;\r\n }\r\n return _emulatorUrl(config, EMULATOR_WIDGET_PATH);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The special web storage event\r\n *\r\n */\r\nconst WEB_STORAGE_SUPPORT_KEY = 'webStorageSupport';\r\nclass BrowserPopupRedirectResolver {\r\n constructor() {\r\n this.eventManagers = {};\r\n this.iframes = {};\r\n this.originValidationPromises = {};\r\n this._redirectPersistence = browserSessionPersistence;\r\n this._completeRedirectFn = _getRedirectResult;\r\n this._overrideRedirectResult = _overrideRedirectResult;\r\n }\r\n // Wrapping in async even though we don't await anywhere in order\r\n // to make sure errors are raised as promise rejections\r\n async _openPopup(auth, provider, authType, eventId) {\r\n var _a;\r\n debugAssert((_a = this.eventManagers[auth._key()]) === null || _a === void 0 ? void 0 : _a.manager, '_initialize() not called before _openPopup()');\r\n const url = _getRedirectUrl(auth, provider, authType, _getCurrentUrl(), eventId);\r\n return _open(auth, url, _generateEventId());\r\n }\r\n async _openRedirect(auth, provider, authType, eventId) {\r\n await this._originValidation(auth);\r\n _setWindowLocation(_getRedirectUrl(auth, provider, authType, _getCurrentUrl(), eventId));\r\n return new Promise(() => { });\r\n }\r\n _initialize(auth) {\r\n const key = auth._key();\r\n if (this.eventManagers[key]) {\r\n const { manager, promise } = this.eventManagers[key];\r\n if (manager) {\r\n return Promise.resolve(manager);\r\n }\r\n else {\r\n debugAssert(promise, 'If manager is not set, promise should be');\r\n return promise;\r\n }\r\n }\r\n const promise = this.initAndGetManager(auth);\r\n this.eventManagers[key] = { promise };\r\n // If the promise is rejected, the key should be removed so that the\r\n // operation can be retried later.\r\n promise.catch(() => {\r\n delete this.eventManagers[key];\r\n });\r\n return promise;\r\n }\r\n async initAndGetManager(auth) {\r\n const iframe = await _openIframe(auth);\r\n const manager = new AuthEventManager(auth);\r\n iframe.register('authEvent', (iframeEvent) => {\r\n _assert(iframeEvent === null || iframeEvent === void 0 ? void 0 : iframeEvent.authEvent, auth, \"invalid-auth-event\" /* AuthErrorCode.INVALID_AUTH_EVENT */);\r\n // TODO: Consider splitting redirect and popup events earlier on\r\n const handled = manager.onEvent(iframeEvent.authEvent);\r\n return { status: handled ? \"ACK\" /* GapiOutcome.ACK */ : \"ERROR\" /* GapiOutcome.ERROR */ };\r\n }, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);\r\n this.eventManagers[auth._key()] = { manager };\r\n this.iframes[auth._key()] = iframe;\r\n return manager;\r\n }\r\n _isIframeWebStorageSupported(auth, cb) {\r\n const iframe = this.iframes[auth._key()];\r\n iframe.send(WEB_STORAGE_SUPPORT_KEY, { type: WEB_STORAGE_SUPPORT_KEY }, result => {\r\n var _a;\r\n const isSupported = (_a = result === null || result === void 0 ? void 0 : result[0]) === null || _a === void 0 ? void 0 : _a[WEB_STORAGE_SUPPORT_KEY];\r\n if (isSupported !== undefined) {\r\n cb(!!isSupported);\r\n }\r\n _fail(auth, \"internal-error\" /* AuthErrorCode.INTERNAL_ERROR */);\r\n }, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);\r\n }\r\n _originValidation(auth) {\r\n const key = auth._key();\r\n if (!this.originValidationPromises[key]) {\r\n this.originValidationPromises[key] = _validateOrigin(auth);\r\n }\r\n return this.originValidationPromises[key];\r\n }\r\n get _shouldInitProactively() {\r\n // Mobile browsers and Safari need to optimistically initialize\r\n return _isMobileBrowser() || _isSafari() || _isIOS();\r\n }\r\n}\r\n/**\r\n * An implementation of {@link PopupRedirectResolver} suitable for browser\r\n * based applications.\r\n *\r\n * @public\r\n */\r\nconst browserPopupRedirectResolver = BrowserPopupRedirectResolver;\n\nclass MultiFactorAssertionImpl {\r\n constructor(factorId) {\r\n this.factorId = factorId;\r\n }\r\n _process(auth, session, displayName) {\r\n switch (session.type) {\r\n case \"enroll\" /* MultiFactorSessionType.ENROLL */:\r\n return this._finalizeEnroll(auth, session.credential, displayName);\r\n case \"signin\" /* MultiFactorSessionType.SIGN_IN */:\r\n return this._finalizeSignIn(auth, session.credential);\r\n default:\r\n return debugFail('unexpected MultiFactorSessionType');\r\n }\r\n }\r\n}\n\n/**\r\n * {@inheritdoc PhoneMultiFactorAssertion}\r\n *\r\n * @public\r\n */\r\nclass PhoneMultiFactorAssertionImpl extends MultiFactorAssertionImpl {\r\n constructor(credential) {\r\n super(\"phone\" /* FactorId.PHONE */);\r\n this.credential = credential;\r\n }\r\n /** @internal */\r\n static _fromCredential(credential) {\r\n return new PhoneMultiFactorAssertionImpl(credential);\r\n }\r\n /** @internal */\r\n _finalizeEnroll(auth, idToken, displayName) {\r\n return finalizeEnrollPhoneMfa(auth, {\r\n idToken,\r\n displayName,\r\n phoneVerificationInfo: this.credential._makeVerificationRequest()\r\n });\r\n }\r\n /** @internal */\r\n _finalizeSignIn(auth, mfaPendingCredential) {\r\n return finalizeSignInPhoneMfa(auth, {\r\n mfaPendingCredential,\r\n phoneVerificationInfo: this.credential._makeVerificationRequest()\r\n });\r\n }\r\n}\r\n/**\r\n * Provider for generating a {@link PhoneMultiFactorAssertion}.\r\n *\r\n * @public\r\n */\r\nclass PhoneMultiFactorGenerator {\r\n constructor() { }\r\n /**\r\n * Provides a {@link PhoneMultiFactorAssertion} to confirm ownership of the phone second factor.\r\n *\r\n * @param phoneAuthCredential - A credential provided by {@link PhoneAuthProvider.credential}.\r\n * @returns A {@link PhoneMultiFactorAssertion} which can be used with\r\n * {@link MultiFactorResolver.resolveSignIn}\r\n */\r\n static assertion(credential) {\r\n return PhoneMultiFactorAssertionImpl._fromCredential(credential);\r\n }\r\n}\r\n/**\r\n * The identifier of the phone second factor: `phone`.\r\n */\r\nPhoneMultiFactorGenerator.FACTOR_ID = 'phone';\n\nvar name = \"@firebase/auth\";\nvar version = \"0.21.0\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthInterop {\r\n constructor(auth) {\r\n this.auth = auth;\r\n this.internalListeners = new Map();\r\n }\r\n getUid() {\r\n var _a;\r\n this.assertAuthConfigured();\r\n return ((_a = this.auth.currentUser) === null || _a === void 0 ? void 0 : _a.uid) || null;\r\n }\r\n async getToken(forceRefresh) {\r\n this.assertAuthConfigured();\r\n await this.auth._initializationPromise;\r\n if (!this.auth.currentUser) {\r\n return null;\r\n }\r\n const accessToken = await this.auth.currentUser.getIdToken(forceRefresh);\r\n return { accessToken };\r\n }\r\n addAuthTokenListener(listener) {\r\n this.assertAuthConfigured();\r\n if (this.internalListeners.has(listener)) {\r\n return;\r\n }\r\n const unsubscribe = this.auth.onIdTokenChanged(user => {\r\n listener((user === null || user === void 0 ? void 0 : user.stsTokenManager.accessToken) || null);\r\n });\r\n this.internalListeners.set(listener, unsubscribe);\r\n this.updateProactiveRefresh();\r\n }\r\n removeAuthTokenListener(listener) {\r\n this.assertAuthConfigured();\r\n const unsubscribe = this.internalListeners.get(listener);\r\n if (!unsubscribe) {\r\n return;\r\n }\r\n this.internalListeners.delete(listener);\r\n unsubscribe();\r\n this.updateProactiveRefresh();\r\n }\r\n assertAuthConfigured() {\r\n _assert(this.auth._initializationPromise, \"dependent-sdk-initialized-before-auth\" /* AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH */);\r\n }\r\n updateProactiveRefresh() {\r\n if (this.internalListeners.size > 0) {\r\n this.auth._startProactiveRefresh();\r\n }\r\n else {\r\n this.auth._stopProactiveRefresh();\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getVersionForPlatform(clientPlatform) {\r\n switch (clientPlatform) {\r\n case \"Node\" /* ClientPlatform.NODE */:\r\n return 'node';\r\n case \"ReactNative\" /* ClientPlatform.REACT_NATIVE */:\r\n return 'rn';\r\n case \"Worker\" /* ClientPlatform.WORKER */:\r\n return 'webworker';\r\n case \"Cordova\" /* ClientPlatform.CORDOVA */:\r\n return 'cordova';\r\n default:\r\n return undefined;\r\n }\r\n}\r\n/** @internal */\r\nfunction registerAuth(clientPlatform) {\r\n _registerComponent(new Component(\"auth\" /* _ComponentName.AUTH */, (container, { options: deps }) => {\r\n const app = container.getProvider('app').getImmediate();\r\n const heartbeatServiceProvider = container.getProvider('heartbeat');\r\n const { apiKey, authDomain } = app.options;\r\n return ((app, heartbeatServiceProvider) => {\r\n _assert(apiKey && !apiKey.includes(':'), \"invalid-api-key\" /* AuthErrorCode.INVALID_API_KEY */, { appName: app.name });\r\n // Auth domain is optional if IdP sign in isn't being used\r\n _assert(!(authDomain === null || authDomain === void 0 ? void 0 : authDomain.includes(':')), \"argument-error\" /* AuthErrorCode.ARGUMENT_ERROR */, {\r\n appName: app.name\r\n });\r\n const config = {\r\n apiKey,\r\n authDomain,\r\n clientPlatform,\r\n apiHost: \"identitytoolkit.googleapis.com\" /* DefaultConfig.API_HOST */,\r\n tokenApiHost: \"securetoken.googleapis.com\" /* DefaultConfig.TOKEN_API_HOST */,\r\n apiScheme: \"https\" /* DefaultConfig.API_SCHEME */,\r\n sdkClientVersion: _getClientVersion(clientPlatform)\r\n };\r\n const authInstance = new AuthImpl(app, heartbeatServiceProvider, config);\r\n _initializeAuthInstance(authInstance, deps);\r\n return authInstance;\r\n })(app, heartbeatServiceProvider);\r\n }, \"PUBLIC\" /* ComponentType.PUBLIC */)\r\n /**\r\n * Auth can only be initialized by explicitly calling getAuth() or initializeAuth()\r\n * For why we do this, See go/firebase-next-auth-init\r\n */\r\n .setInstantiationMode(\"EXPLICIT\" /* InstantiationMode.EXPLICIT */)\r\n /**\r\n * Because all firebase products that depend on auth depend on auth-internal directly,\r\n * we need to initialize auth-internal after auth is initialized to make it available to other firebase products.\r\n */\r\n .setInstanceCreatedCallback((container, _instanceIdentifier, _instance) => {\r\n const authInternalProvider = container.getProvider(\"auth-internal\" /* _ComponentName.AUTH_INTERNAL */);\r\n authInternalProvider.initialize();\r\n }));\r\n _registerComponent(new Component(\"auth-internal\" /* _ComponentName.AUTH_INTERNAL */, container => {\r\n const auth = _castAuth(container.getProvider(\"auth\" /* _ComponentName.AUTH */).getImmediate());\r\n return (auth => new AuthInterop(auth))(auth);\r\n }, \"PRIVATE\" /* ComponentType.PRIVATE */).setInstantiationMode(\"EXPLICIT\" /* InstantiationMode.EXPLICIT */));\r\n registerVersion(name, version, getVersionForPlatform(clientPlatform));\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_ID_TOKEN_MAX_AGE = 5 * 60;\r\nconst authIdTokenMaxAge = getExperimentalSetting('authIdTokenMaxAge') || DEFAULT_ID_TOKEN_MAX_AGE;\r\nlet lastPostedIdToken = null;\r\nconst mintCookieFactory = (url) => async (user) => {\r\n const idTokenResult = user && (await user.getIdTokenResult());\r\n const idTokenAge = idTokenResult &&\r\n (new Date().getTime() - Date.parse(idTokenResult.issuedAtTime)) / 1000;\r\n if (idTokenAge && idTokenAge > authIdTokenMaxAge) {\r\n return;\r\n }\r\n // Specifically trip null => undefined when logged out, to delete any existing cookie\r\n const idToken = idTokenResult === null || idTokenResult === void 0 ? void 0 : idTokenResult.token;\r\n if (lastPostedIdToken === idToken) {\r\n return;\r\n }\r\n lastPostedIdToken = idToken;\r\n await fetch(url, {\r\n method: idToken ? 'POST' : 'DELETE',\r\n headers: idToken\r\n ? {\r\n 'Authorization': `Bearer ${idToken}`\r\n }\r\n : {}\r\n });\r\n};\r\n/**\r\n * Returns the Auth instance associated with the provided {@link @firebase/app#FirebaseApp}.\r\n * If no instance exists, initializes an Auth instance with platform-specific default dependencies.\r\n *\r\n * @param app - The Firebase App.\r\n *\r\n * @public\r\n */\r\nfunction getAuth(app = getApp()) {\r\n const provider = _getProvider(app, 'auth');\r\n if (provider.isInitialized()) {\r\n return provider.getImmediate();\r\n }\r\n const auth = initializeAuth(app, {\r\n popupRedirectResolver: browserPopupRedirectResolver,\r\n persistence: [\r\n indexedDBLocalPersistence,\r\n browserLocalPersistence,\r\n browserSessionPersistence\r\n ]\r\n });\r\n const authTokenSyncUrl = getExperimentalSetting('authTokenSyncURL');\r\n if (authTokenSyncUrl) {\r\n const mintCookie = mintCookieFactory(authTokenSyncUrl);\r\n beforeAuthStateChanged(auth, mintCookie, () => mintCookie(auth.currentUser));\r\n onIdTokenChanged(auth, user => mintCookie(user));\r\n }\r\n const authEmulatorHost = getDefaultEmulatorHost('auth');\r\n if (authEmulatorHost) {\r\n connectAuthEmulator(auth, `http://${authEmulatorHost}`);\r\n }\r\n return auth;\r\n}\r\nregisterAuth(\"Browser\" /* ClientPlatform.BROWSER */);\n\nexport { signInWithCustomToken as $, ActionCodeOperation as A, debugErrorMap as B, prodErrorMap as C, AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY as D, initializeAuth as E, FactorId as F, connectAuthEmulator as G, AuthCredential as H, EmailAuthCredential as I, OAuthCredential as J, PhoneAuthCredential as K, inMemoryPersistence as L, EmailAuthProvider as M, FacebookAuthProvider as N, OperationType as O, PhoneAuthProvider as P, GoogleAuthProvider as Q, RecaptchaVerifier as R, SignInMethod as S, GithubAuthProvider as T, OAuthProvider as U, SAMLAuthProvider as V, TwitterAuthProvider as W, signInAnonymously as X, signInWithCredential as Y, linkWithCredential as Z, reauthenticateWithCredential as _, browserSessionPersistence as a, sendPasswordResetEmail as a0, confirmPasswordReset as a1, applyActionCode as a2, checkActionCode as a3, verifyPasswordResetCode as a4, createUserWithEmailAndPassword as a5, signInWithEmailAndPassword as a6, sendSignInLinkToEmail as a7, isSignInWithEmailLink as a8, signInWithEmailLink as a9, _persistenceKeyName as aA, _getRedirectResult as aB, _overrideRedirectResult as aC, _clearRedirectOutcomes as aD, _castAuth as aE, UserImpl as aF, AuthImpl as aG, _getClientVersion as aH, _generateEventId as aI, AuthPopup as aJ, FetchProvider as aK, SAMLAuthCredential as aL, fetchSignInMethodsForEmail as aa, sendEmailVerification as ab, verifyBeforeUpdateEmail as ac, ActionCodeURL as ad, parseActionCodeURL as ae, updateProfile as af, updateEmail as ag, updatePassword as ah, getIdToken as ai, getIdTokenResult as aj, unlink as ak, getAdditionalUserInfo as al, reload as am, getMultiFactorResolver as an, multiFactor as ao, debugAssert as ap, _isIOS as aq, _isAndroid as ar, _fail as as, _getRedirectUrl as at, _getProjectConfig as au, _isIOS7Or8 as av, _createError as aw, _assert as ax, AuthEventManager as ay, _getInstance as az, browserLocalPersistence as b, signInWithPopup as c, linkWithPopup as d, reauthenticateWithPopup as e, signInWithRedirect as f, linkWithRedirect as g, reauthenticateWithRedirect as h, indexedDBLocalPersistence as i, getRedirectResult as j, browserPopupRedirectResolver as k, linkWithPhoneNumber as l, PhoneMultiFactorGenerator as m, getAuth as n, ProviderId as o, setPersistence as p, onIdTokenChanged as q, reauthenticateWithPhoneNumber as r, signInWithPhoneNumber as s, beforeAuthStateChanged as t, updatePhoneNumber as u, onAuthStateChanged as v, useDeviceLanguage as w, updateCurrentUser as x, signOut as y, deleteUser as z };\n//# sourceMappingURL=index-c6def6da.js.map\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\r\n */\r\nconst CONSTANTS = {\r\n /**\r\n * @define {boolean} Whether this is the client Node.js SDK.\r\n */\r\n NODE_CLIENT: false,\r\n /**\r\n * @define {boolean} Whether this is the Admin Node.js SDK.\r\n */\r\n NODE_ADMIN: false,\r\n /**\r\n * Firebase SDK Version\r\n */\r\n SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws an error if the provided assertion is falsy\r\n */\r\nconst assert = function (assertion, message) {\r\n if (!assertion) {\r\n throw assertionError(message);\r\n }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n */\r\nconst assertionError = function (message) {\r\n return new Error('Firebase Database (' +\r\n CONSTANTS.SDK_VERSION +\r\n ') INTERNAL ASSERT FAILED: ' +\r\n message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst stringToByteArray$1 = function (str) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if ((c & 0xfc00) === 0xd800 &&\r\n i + 1 < str.length &&\r\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\r\n // Surrogate Pair\r\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param bytes Array of numbers representing characters.\r\n * @return Stringification of the array.\r\n */\r\nconst byteArrayToString = function (bytes) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let pos = 0, c = 0;\r\n while (pos < bytes.length) {\r\n const c1 = bytes[pos++];\r\n if (c1 < 128) {\r\n out[c++] = String.fromCharCode(c1);\r\n }\r\n else if (c1 > 191 && c1 < 224) {\r\n const c2 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n }\r\n else if (c1 > 239 && c1 < 365) {\r\n // Surrogate Pair\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n const c4 = bytes[pos++];\r\n const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n 0x10000;\r\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n }\r\n else {\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n }\r\n }\r\n return out.join('');\r\n};\r\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\r\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\r\n// Static lookup maps, lazily populated by init_()\r\nconst base64 = {\r\n /**\r\n * Maps bytes to characters.\r\n */\r\n byteToCharMap_: null,\r\n /**\r\n * Maps characters to bytes.\r\n */\r\n charToByteMap_: null,\r\n /**\r\n * Maps bytes to websafe characters.\r\n * @private\r\n */\r\n byteToCharMapWebSafe_: null,\r\n /**\r\n * Maps websafe characters to bytes.\r\n * @private\r\n */\r\n charToByteMapWebSafe_: null,\r\n /**\r\n * Our default alphabet, shared between\r\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n */\r\n ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n /**\r\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n */\r\n get ENCODED_VALS() {\r\n return this.ENCODED_VALS_BASE + '+/=';\r\n },\r\n /**\r\n * Our websafe alphabet.\r\n */\r\n get ENCODED_VALS_WEBSAFE() {\r\n return this.ENCODED_VALS_BASE + '-_.';\r\n },\r\n /**\r\n * Whether this browser supports the atob and btoa functions. This extension\r\n * started at Mozilla but is now implemented by many browsers. We use the\r\n * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n * but still allowing the standard per-browser compilations.\r\n *\r\n */\r\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n /**\r\n * Base64-encode an array of bytes.\r\n *\r\n * @param input An array of bytes (numbers with\r\n * value in [0, 255]) to encode.\r\n * @param webSafe Boolean indicating we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeByteArray(input, webSafe) {\r\n if (!Array.isArray(input)) {\r\n throw Error('encodeByteArray takes an array as a parameter');\r\n }\r\n this.init_();\r\n const byteToCharMap = webSafe\r\n ? this.byteToCharMapWebSafe_\r\n : this.byteToCharMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length; i += 3) {\r\n const byte1 = input[i];\r\n const haveByte2 = i + 1 < input.length;\r\n const byte2 = haveByte2 ? input[i + 1] : 0;\r\n const haveByte3 = i + 2 < input.length;\r\n const byte3 = haveByte3 ? input[i + 2] : 0;\r\n const outByte1 = byte1 >> 2;\r\n const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n let outByte4 = byte3 & 0x3f;\r\n if (!haveByte3) {\r\n outByte4 = 64;\r\n if (!haveByte2) {\r\n outByte3 = 64;\r\n }\r\n }\r\n output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n }\r\n return output.join('');\r\n },\r\n /**\r\n * Base64-encode a string.\r\n *\r\n * @param input A string to encode.\r\n * @param webSafe If true, we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return btoa(input);\r\n }\r\n return this.encodeByteArray(stringToByteArray$1(input), webSafe);\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * @param input to decode.\r\n * @param webSafe True if we should use the\r\n * alternative alphabet.\r\n * @return string representing the decoded value.\r\n */\r\n decodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return atob(input);\r\n }\r\n return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * In base-64 decoding, groups of four characters are converted into three\r\n * bytes. If the encoder did not apply padding, the input length may not\r\n * be a multiple of 4.\r\n *\r\n * In this case, the last group will have fewer than 4 characters, and\r\n * padding will be inferred. If the group has one or two characters, it decodes\r\n * to one byte. If the group has three characters, it decodes to two bytes.\r\n *\r\n * @param input Input to decode.\r\n * @param webSafe True if we should use the web-safe alphabet.\r\n * @return bytes representing the decoded value.\r\n */\r\n decodeStringToByteArray(input, webSafe) {\r\n this.init_();\r\n const charToByteMap = webSafe\r\n ? this.charToByteMapWebSafe_\r\n : this.charToByteMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length;) {\r\n const byte1 = charToByteMap[input.charAt(i++)];\r\n const haveByte2 = i < input.length;\r\n const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n ++i;\r\n const haveByte3 = i < input.length;\r\n const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n const haveByte4 = i < input.length;\r\n const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n throw Error();\r\n }\r\n const outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n output.push(outByte1);\r\n if (byte3 !== 64) {\r\n const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n output.push(outByte2);\r\n if (byte4 !== 64) {\r\n const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n output.push(outByte3);\r\n }\r\n }\r\n }\r\n return output;\r\n },\r\n /**\r\n * Lazy static initialization function. Called before\r\n * accessing any of the static map variables.\r\n * @private\r\n */\r\n init_() {\r\n if (!this.byteToCharMap_) {\r\n this.byteToCharMap_ = {};\r\n this.charToByteMap_ = {};\r\n this.byteToCharMapWebSafe_ = {};\r\n this.charToByteMapWebSafe_ = {};\r\n // We want quick mappings back and forth, so we precompute two maps.\r\n for (let i = 0; i < this.ENCODED_VALS.length; i++) {\r\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n // Be forgiving when decoding and correctly decode both encodings.\r\n if (i >= this.ENCODED_VALS_BASE.length) {\r\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n/**\r\n * URL-safe base64 encoding\r\n */\r\nconst base64Encode = function (str) {\r\n const utf8Bytes = stringToByteArray$1(str);\r\n return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 encoding (without \".\" padding in the end).\r\n * e.g. Used in JSON Web Token (JWT) parts.\r\n */\r\nconst base64urlEncodeWithoutPadding = function (str) {\r\n // Use base64url encoding and remove padding in the end (dot characters).\r\n return base64Encode(str).replace(/\\./g, '');\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param str To be decoded\r\n * @return Decoded result, if possible\r\n */\r\nconst base64Decode = function (str) {\r\n try {\r\n return base64.decodeString(str, true);\r\n }\r\n catch (e) {\r\n console.error('base64Decode failed: ', e);\r\n }\r\n return null;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays). Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n *\r\n * Note: we don't merge __proto__ to prevent prototype pollution\r\n */\r\nfunction deepExtend(target, source) {\r\n if (!(source instanceof Object)) {\r\n return source;\r\n }\r\n switch (source.constructor) {\r\n case Date:\r\n // Treat Dates like scalars; if the target date object had any child\r\n // properties - they will be lost!\r\n const dateValue = source;\r\n return new Date(dateValue.getTime());\r\n case Object:\r\n if (target === undefined) {\r\n target = {};\r\n }\r\n break;\r\n case Array:\r\n // Always copy the array source and overwrite the target.\r\n target = [];\r\n break;\r\n default:\r\n // Not a plain Object - treat it as a scalar.\r\n return source;\r\n }\r\n for (const prop in source) {\r\n // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\r\n if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\r\n continue;\r\n }\r\n target[prop] = deepExtend(target[prop], source[prop]);\r\n }\r\n return target;\r\n}\r\nfunction isValidKey(key) {\r\n return key !== '__proto__';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return user agent string\r\n */\r\nfunction getUA() {\r\n if (typeof navigator !== 'undefined' &&\r\n typeof navigator['userAgent'] === 'string') {\r\n return navigator['userAgent'];\r\n }\r\n else {\r\n return '';\r\n }\r\n}\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\r\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\r\n * wait for a callback.\r\n */\r\nfunction isMobileCordova() {\r\n return (typeof window !== 'undefined' &&\r\n // @ts-ignore Setting up an broadly applicable index signature for Window\r\n // just to deal with this case would probably be a bad idea.\r\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n}\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return true if Node.js environment is detected.\r\n */\r\n// Node detection logic from: https://github.com/iliakan/detect-node/\r\nfunction isNode() {\r\n try {\r\n return (Object.prototype.toString.call(global.process) === '[object process]');\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Detect Browser Environment\r\n */\r\nfunction isBrowser() {\r\n return typeof self === 'object' && self.self === self;\r\n}\r\nfunction isBrowserExtension() {\r\n const runtime = typeof chrome === 'object'\r\n ? chrome.runtime\r\n : typeof browser === 'object'\r\n ? browser.runtime\r\n : undefined;\r\n return typeof runtime === 'object' && runtime.id !== undefined;\r\n}\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return true if ReactNative environment is detected.\r\n */\r\nfunction isReactNative() {\r\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n}\r\n/** Detects Electron apps. */\r\nfunction isElectron() {\r\n return getUA().indexOf('Electron/') >= 0;\r\n}\r\n/** Detects Internet Explorer. */\r\nfunction isIE() {\r\n const ua = getUA();\r\n return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\r\n}\r\n/** Detects Universal Windows Platform apps. */\r\nfunction isUWP() {\r\n return getUA().indexOf('MSAppHost/') >= 0;\r\n}\r\n/**\r\n * Detect whether the current SDK build is the Node version.\r\n *\r\n * @return true if it's the Node SDK build.\r\n */\r\nfunction isNodeSdk() {\r\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n}\r\n/** Returns true if we are running in Safari. */\r\nfunction isSafari() {\r\n return (!isNode() &&\r\n navigator.userAgent.includes('Safari') &&\r\n !navigator.userAgent.includes('Chrome'));\r\n}\r\n/**\r\n * This method checks if indexedDB is supported by current browser/service worker context\r\n * @return true if indexedDB is supported by current browser/service worker context\r\n */\r\nfunction isIndexedDBAvailable() {\r\n try {\r\n return typeof indexedDB === 'object';\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\r\n * if errors occur during the database open operation.\r\n *\r\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\r\n * private browsing)\r\n */\r\nfunction validateIndexedDBOpenable() {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n let preExist = true;\r\n const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\r\n const request = self.indexedDB.open(DB_CHECK_NAME);\r\n request.onsuccess = () => {\r\n request.result.close();\r\n // delete database only when it doesn't pre-exist\r\n if (!preExist) {\r\n self.indexedDB.deleteDatabase(DB_CHECK_NAME);\r\n }\r\n resolve(true);\r\n };\r\n request.onupgradeneeded = () => {\r\n preExist = false;\r\n };\r\n request.onerror = () => {\r\n var _a;\r\n reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\r\n };\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n });\r\n}\r\n/**\r\n *\r\n * This method checks whether cookie is enabled within current browser\r\n * @return true if cookie is enabled within current browser\r\n */\r\nfunction areCookiesEnabled() {\r\n if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Polyfill for `globalThis` object.\r\n * @returns the `globalThis` object for the given environment.\r\n */\r\nfunction getGlobal() {\r\n if (typeof self !== 'undefined') {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined') {\r\n return window;\r\n }\r\n if (typeof global !== 'undefined') {\r\n return global;\r\n }\r\n throw new Error('Unable to locate global object.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;\r\n/**\r\n * Attempt to read defaults from a JSON string provided to\r\n * process.env.__FIREBASE_DEFAULTS__ or a JSON file whose path is in\r\n * process.env.__FIREBASE_DEFAULTS_PATH__\r\n */\r\nconst getDefaultsFromEnvVariable = () => {\r\n if (typeof process === 'undefined' || typeof process.env === 'undefined') {\r\n return;\r\n }\r\n const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\r\n if (defaultsJsonString) {\r\n return JSON.parse(defaultsJsonString);\r\n }\r\n};\r\nconst getDefaultsFromCookie = () => {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n let match;\r\n try {\r\n match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\r\n }\r\n catch (e) {\r\n // Some environments such as Angular Universal SSR have a\r\n // `document` object but error on accessing `document.cookie`.\r\n return;\r\n }\r\n const decoded = match && base64Decode(match[1]);\r\n return decoded && JSON.parse(decoded);\r\n};\r\n/**\r\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\r\n * (1) if such an object exists as a property of `globalThis`\r\n * (2) if such an object was provided on a shell environment variable\r\n * (3) if such an object exists in a cookie\r\n */\r\nconst getDefaults = () => {\r\n try {\r\n return (getDefaultsFromGlobal() ||\r\n getDefaultsFromEnvVariable() ||\r\n getDefaultsFromCookie());\r\n }\r\n catch (e) {\r\n /**\r\n * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\r\n * to any environment case we have not accounted for. Log to\r\n * info instead of swallowing so we can find these unknown cases\r\n * and add paths for them if needed.\r\n */\r\n console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\r\n return;\r\n }\r\n};\r\n/**\r\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };\r\n/**\r\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHostnameAndPort = (productName) => {\r\n const host = getDefaultEmulatorHost(productName);\r\n if (!host) {\r\n return undefined;\r\n }\r\n const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\r\n if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\r\n throw new Error(`Invalid host ${host} with no separate hostname and port!`);\r\n }\r\n // eslint-disable-next-line no-restricted-globals\r\n const port = parseInt(host.substring(separatorIndex + 1), 10);\r\n if (host[0] === '[') {\r\n // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\r\n return [host.substring(1, separatorIndex - 1), port];\r\n }\r\n else {\r\n return [host.substring(0, separatorIndex), port];\r\n }\r\n};\r\n/**\r\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\r\n * @public\r\n */\r\nconst getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };\r\n/**\r\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\r\n * prefixed by \"_\")\r\n * @public\r\n */\r\nconst getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Deferred {\r\n constructor() {\r\n this.reject = () => { };\r\n this.resolve = () => { };\r\n this.promise = new Promise((resolve, reject) => {\r\n this.resolve = resolve;\r\n this.reject = reject;\r\n });\r\n }\r\n /**\r\n * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n */\r\n wrapCallback(callback) {\r\n return (error, value) => {\r\n if (error) {\r\n this.reject(error);\r\n }\r\n else {\r\n this.resolve(value);\r\n }\r\n if (typeof callback === 'function') {\r\n // Attaching noop handler just in case developer wasn't expecting\r\n // promises\r\n this.promise.catch(() => { });\r\n // Some of our callbacks don't expect a value and our own tests\r\n // assert that the parameter length is 1\r\n if (callback.length === 1) {\r\n callback(error);\r\n }\r\n else {\r\n callback(error, value);\r\n }\r\n }\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction createMockUserToken(token, projectId) {\r\n if (token.uid) {\r\n throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\r\n }\r\n // Unsecured JWTs use \"none\" as the algorithm.\r\n const header = {\r\n alg: 'none',\r\n type: 'JWT'\r\n };\r\n const project = projectId || 'demo-project';\r\n const iat = token.iat || 0;\r\n const sub = token.sub || token.user_id;\r\n if (!sub) {\r\n throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\r\n }\r\n const payload = Object.assign({ \r\n // Set all required fields to decent defaults\r\n iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\r\n sign_in_provider: 'custom',\r\n identities: {}\r\n } }, token);\r\n // Unsecured JWTs use the empty string as a signature.\r\n const signature = '';\r\n return [\r\n base64urlEncodeWithoutPadding(JSON.stringify(header)),\r\n base64urlEncodeWithoutPadding(JSON.stringify(payload)),\r\n signature\r\n ].join('.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Standardized Firebase Error.\r\n *\r\n * Usage:\r\n *\r\n * // Typescript string literals for type-safe codes\r\n * type Err =\r\n * 'unknown' |\r\n * 'object-not-found'\r\n * ;\r\n *\r\n * // Closure enum for type-safe error codes\r\n * // at-enum {string}\r\n * var Err = {\r\n * UNKNOWN: 'unknown',\r\n * OBJECT_NOT_FOUND: 'object-not-found',\r\n * }\r\n *\r\n * let errors: Map<Err, string> = {\r\n * 'generic-error': \"Unknown error\",\r\n * 'file-not-found': \"Could not find file: {$file}\",\r\n * };\r\n *\r\n * // Type-safe function - must pass a valid error code as param.\r\n * let error = new ErrorFactory<Err>('service', 'Service', errors);\r\n *\r\n * ...\r\n * throw error.create(Err.GENERIC);\r\n * ...\r\n * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\r\n * ...\r\n * // Service: Could not file file: foo.txt (service/file-not-found).\r\n *\r\n * catch (e) {\r\n * assert(e.message === \"Could not find file: foo.txt.\");\r\n * if ((e as FirebaseError)?.code === 'service/file-not-found') {\r\n * console.log(\"Could not read file: \" + e['file']);\r\n * }\r\n * }\r\n */\r\nconst ERROR_NAME = 'FirebaseError';\r\n// Based on code from:\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\r\nclass FirebaseError extends Error {\r\n constructor(\r\n /** The error code for this error. */\r\n code, message, \r\n /** Custom data for this error. */\r\n customData) {\r\n super(message);\r\n this.code = code;\r\n this.customData = customData;\r\n /** The custom name for all FirebaseErrors. */\r\n this.name = ERROR_NAME;\r\n // Fix For ES5\r\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n Object.setPrototypeOf(this, FirebaseError.prototype);\r\n // Maintains proper stack trace for where our error was thrown.\r\n // Only available on V8.\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ErrorFactory.prototype.create);\r\n }\r\n }\r\n}\r\nclass ErrorFactory {\r\n constructor(service, serviceName, errors) {\r\n this.service = service;\r\n this.serviceName = serviceName;\r\n this.errors = errors;\r\n }\r\n create(code, ...data) {\r\n const customData = data[0] || {};\r\n const fullCode = `${this.service}/${code}`;\r\n const template = this.errors[code];\r\n const message = template ? replaceTemplate(template, customData) : 'Error';\r\n // Service Name: Error message (service/code).\r\n const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\r\n const error = new FirebaseError(fullCode, fullMessage, customData);\r\n return error;\r\n }\r\n}\r\nfunction replaceTemplate(template, data) {\r\n return template.replace(PATTERN, (_, key) => {\r\n const value = data[key];\r\n return value != null ? String(value) : `<${key}?>`;\r\n });\r\n}\r\nconst PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n return JSON.stringify(data);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst decode = function (token) {\r\n let header = {}, claims = {}, data = {}, signature = '';\r\n try {\r\n const parts = token.split('.');\r\n header = jsonEval(base64Decode(parts[0]) || '');\r\n claims = jsonEval(base64Decode(parts[1]) || '');\r\n signature = parts[2];\r\n data = claims['d'] || {};\r\n delete claims['d'];\r\n }\r\n catch (e) { }\r\n return {\r\n header,\r\n claims,\r\n data,\r\n signature\r\n };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidTimestamp = function (token) {\r\n const claims = decode(token).claims;\r\n const now = Math.floor(new Date().getTime() / 1000);\r\n let validSince = 0, validUntil = 0;\r\n if (typeof claims === 'object') {\r\n if (claims.hasOwnProperty('nbf')) {\r\n validSince = claims['nbf'];\r\n }\r\n else if (claims.hasOwnProperty('iat')) {\r\n validSince = claims['iat'];\r\n }\r\n if (claims.hasOwnProperty('exp')) {\r\n validUntil = claims['exp'];\r\n }\r\n else {\r\n // token will expire after 24h by default\r\n validUntil = validSince + 86400;\r\n }\r\n }\r\n return (!!now &&\r\n !!validSince &&\r\n !!validUntil &&\r\n now >= validSince &&\r\n now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst issuedAtTime = function (token) {\r\n const claims = decode(token).claims;\r\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n return claims['iat'];\r\n }\r\n return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidFormat = function (token) {\r\n const decoded = decode(token), claims = decoded.claims;\r\n return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isAdmin = function (token) {\r\n const claims = decode(token).claims;\r\n return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction contains(obj, key) {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n}\r\nfunction safeGet(obj, key) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return obj[key];\r\n }\r\n else {\r\n return undefined;\r\n }\r\n}\r\nfunction isEmpty(obj) {\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction map(obj, fn, contextObj) {\r\n const res = {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n res[key] = fn.call(contextObj, obj[key], key, obj);\r\n }\r\n }\r\n return res;\r\n}\r\n/**\r\n * Deep equal two objects. Support Arrays and Objects.\r\n */\r\nfunction deepEqual(a, b) {\r\n if (a === b) {\r\n return true;\r\n }\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n for (const k of aKeys) {\r\n if (!bKeys.includes(k)) {\r\n return false;\r\n }\r\n const aProp = a[k];\r\n const bProp = b[k];\r\n if (isObject(aProp) && isObject(bProp)) {\r\n if (!deepEqual(aProp, bProp)) {\r\n return false;\r\n }\r\n }\r\n else if (aProp !== bProp) {\r\n return false;\r\n }\r\n }\r\n for (const k of bKeys) {\r\n if (!aKeys.includes(k)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isObject(thing) {\r\n return thing !== null && typeof thing === 'object';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Rejects if the given promise doesn't resolve in timeInMS milliseconds.\r\n * @internal\r\n */\r\nfunction promiseWithTimeout(promise, timeInMS = 2000) {\r\n const deferredPromise = new Deferred();\r\n setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);\r\n promise.then(deferredPromise.resolve, deferredPromise.reject);\r\n return deferredPromise.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\r\n * params object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n */\r\nfunction querystring(querystringParams) {\r\n const params = [];\r\n for (const [key, value] of Object.entries(querystringParams)) {\r\n if (Array.isArray(value)) {\r\n value.forEach(arrayVal => {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n });\r\n }\r\n else {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n }\r\n }\r\n return params.length ? '&' + params.join('&') : '';\r\n}\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\r\n * (e.g. {arg: 'val', arg2: 'val2'})\r\n */\r\nfunction querystringDecode(querystring) {\r\n const obj = {};\r\n const tokens = querystring.replace(/^\\?/, '').split('&');\r\n tokens.forEach(token => {\r\n if (token) {\r\n const [key, value] = token.split('=');\r\n obj[decodeURIComponent(key)] = decodeURIComponent(value);\r\n }\r\n });\r\n return obj;\r\n}\r\n/**\r\n * Extract the query string part of a URL, including the leading question mark (if present).\r\n */\r\nfunction extractQuerystring(url) {\r\n const queryStart = url.indexOf('?');\r\n if (!queryStart) {\r\n return '';\r\n }\r\n const fragmentStart = url.indexOf('#', queryStart);\r\n return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n * var sha1 = new sha1();\r\n * sha1.update(bytes);\r\n * var hash = sha1.digest();\r\n *\r\n * Performance:\r\n * Chrome 23: ~400 Mbit/s\r\n * Firefox 16: ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @final\r\n * @struct\r\n */\r\nclass Sha1 {\r\n constructor() {\r\n /**\r\n * Holds the previous values of accumulated variables a-e in the compress_\r\n * function.\r\n * @private\r\n */\r\n this.chain_ = [];\r\n /**\r\n * A buffer holding the partially computed hash result.\r\n * @private\r\n */\r\n this.buf_ = [];\r\n /**\r\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\r\n * as the message schedule in the docs.\r\n * @private\r\n */\r\n this.W_ = [];\r\n /**\r\n * Contains data needed to pad messages less than 64 bytes.\r\n * @private\r\n */\r\n this.pad_ = [];\r\n /**\r\n * @private {number}\r\n */\r\n this.inbuf_ = 0;\r\n /**\r\n * @private {number}\r\n */\r\n this.total_ = 0;\r\n this.blockSize = 512 / 8;\r\n this.pad_[0] = 128;\r\n for (let i = 1; i < this.blockSize; ++i) {\r\n this.pad_[i] = 0;\r\n }\r\n this.reset();\r\n }\r\n reset() {\r\n this.chain_[0] = 0x67452301;\r\n this.chain_[1] = 0xefcdab89;\r\n this.chain_[2] = 0x98badcfe;\r\n this.chain_[3] = 0x10325476;\r\n this.chain_[4] = 0xc3d2e1f0;\r\n this.inbuf_ = 0;\r\n this.total_ = 0;\r\n }\r\n /**\r\n * Internal compress helper function.\r\n * @param buf Block to compress.\r\n * @param offset Offset of the block in the buffer.\r\n * @private\r\n */\r\n compress_(buf, offset) {\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n const W = this.W_;\r\n // get 16 big endian words\r\n if (typeof buf === 'string') {\r\n for (let i = 0; i < 16; i++) {\r\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n // have a bug that turns the post-increment ++ operator into pre-increment\r\n // during JIT compilation. We have code that depends heavily on SHA-1 for\r\n // correctness and which is affected by this bug, so I've removed all uses\r\n // of post-increment ++ in which the result value is used. We can revert\r\n // this change once the Safari bug\r\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n // most clients have been updated.\r\n W[i] =\r\n (buf.charCodeAt(offset) << 24) |\r\n (buf.charCodeAt(offset + 1) << 16) |\r\n (buf.charCodeAt(offset + 2) << 8) |\r\n buf.charCodeAt(offset + 3);\r\n offset += 4;\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < 16; i++) {\r\n W[i] =\r\n (buf[offset] << 24) |\r\n (buf[offset + 1] << 16) |\r\n (buf[offset + 2] << 8) |\r\n buf[offset + 3];\r\n offset += 4;\r\n }\r\n }\r\n // expand to 80 words\r\n for (let i = 16; i < 80; i++) {\r\n const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n }\r\n let a = this.chain_[0];\r\n let b = this.chain_[1];\r\n let c = this.chain_[2];\r\n let d = this.chain_[3];\r\n let e = this.chain_[4];\r\n let f, k;\r\n // TODO(user): Try to unroll this loop to speed up the computation.\r\n for (let i = 0; i < 80; i++) {\r\n if (i < 40) {\r\n if (i < 20) {\r\n f = d ^ (b & (c ^ d));\r\n k = 0x5a827999;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0x6ed9eba1;\r\n }\r\n }\r\n else {\r\n if (i < 60) {\r\n f = (b & c) | (d & (b | c));\r\n k = 0x8f1bbcdc;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0xca62c1d6;\r\n }\r\n }\r\n const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n e = d;\r\n d = c;\r\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n b = a;\r\n a = t;\r\n }\r\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n }\r\n update(bytes, length) {\r\n // TODO(johnlenz): tighten the function signature and remove this check\r\n if (bytes == null) {\r\n return;\r\n }\r\n if (length === undefined) {\r\n length = bytes.length;\r\n }\r\n const lengthMinusBlock = length - this.blockSize;\r\n let n = 0;\r\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n const buf = this.buf_;\r\n let inbuf = this.inbuf_;\r\n // The outer while loop should execute at most twice.\r\n while (n < length) {\r\n // When we have no data in the block to top up, we can directly process the\r\n // input buffer (assuming it contains sufficient data). This gives ~25%\r\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n // the data is provided in large chunks (or in multiples of 64 bytes).\r\n if (inbuf === 0) {\r\n while (n <= lengthMinusBlock) {\r\n this.compress_(bytes, n);\r\n n += this.blockSize;\r\n }\r\n }\r\n if (typeof bytes === 'string') {\r\n while (n < length) {\r\n buf[inbuf] = bytes.charCodeAt(n);\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n while (n < length) {\r\n buf[inbuf] = bytes[n];\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.inbuf_ = inbuf;\r\n this.total_ += length;\r\n }\r\n /** @override */\r\n digest() {\r\n const digest = [];\r\n let totalBits = this.total_ * 8;\r\n // Add pad 0x80 0x00*.\r\n if (this.inbuf_ < 56) {\r\n this.update(this.pad_, 56 - this.inbuf_);\r\n }\r\n else {\r\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n }\r\n // Add # bits.\r\n for (let i = this.blockSize - 1; i >= 56; i--) {\r\n this.buf_[i] = totalBits & 255;\r\n totalBits /= 256; // Don't use bit-shifting here!\r\n }\r\n this.compress_(this.buf_);\r\n let n = 0;\r\n for (let i = 0; i < 5; i++) {\r\n for (let j = 24; j >= 0; j -= 8) {\r\n digest[n] = (this.chain_[i] >> j) & 255;\r\n ++n;\r\n }\r\n }\r\n return digest;\r\n }\r\n}\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n const proxy = new ObserverProxy(executor, onNoObservers);\r\n return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nclass ObserverProxy {\r\n /**\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\n constructor(executor, onNoObservers) {\r\n this.observers = [];\r\n this.unsubscribes = [];\r\n this.observerCount = 0;\r\n // Micro-task scheduling by calling task.then().\r\n this.task = Promise.resolve();\r\n this.finalized = false;\r\n this.onNoObservers = onNoObservers;\r\n // Call the executor asynchronously so subscribers that are called\r\n // synchronously after the creation of the subscribe function\r\n // can still receive the very first value generated in the executor.\r\n this.task\r\n .then(() => {\r\n executor(this);\r\n })\r\n .catch(e => {\r\n this.error(e);\r\n });\r\n }\r\n next(value) {\r\n this.forEachObserver((observer) => {\r\n observer.next(value);\r\n });\r\n }\r\n error(error) {\r\n this.forEachObserver((observer) => {\r\n observer.error(error);\r\n });\r\n this.close(error);\r\n }\r\n complete() {\r\n this.forEachObserver((observer) => {\r\n observer.complete();\r\n });\r\n this.close();\r\n }\r\n /**\r\n * Subscribe function that can be used to add an Observer to the fan-out list.\r\n *\r\n * - We require that no event is sent to a subscriber sychronously to their\r\n * call to subscribe().\r\n */\r\n subscribe(nextOrObserver, error, complete) {\r\n let observer;\r\n if (nextOrObserver === undefined &&\r\n error === undefined &&\r\n complete === undefined) {\r\n throw new Error('Missing Observer.');\r\n }\r\n // Assemble an Observer object when passed as callback functions.\r\n if (implementsAnyMethods(nextOrObserver, [\r\n 'next',\r\n 'error',\r\n 'complete'\r\n ])) {\r\n observer = nextOrObserver;\r\n }\r\n else {\r\n observer = {\r\n next: nextOrObserver,\r\n error,\r\n complete\r\n };\r\n }\r\n if (observer.next === undefined) {\r\n observer.next = noop;\r\n }\r\n if (observer.error === undefined) {\r\n observer.error = noop;\r\n }\r\n if (observer.complete === undefined) {\r\n observer.complete = noop;\r\n }\r\n const unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n // Attempt to subscribe to a terminated Observable - we\r\n // just respond to the Observer with the final error or complete\r\n // event.\r\n if (this.finalized) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n try {\r\n if (this.finalError) {\r\n observer.error(this.finalError);\r\n }\r\n else {\r\n observer.complete();\r\n }\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n return;\r\n });\r\n }\r\n this.observers.push(observer);\r\n return unsub;\r\n }\r\n // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n // any unsubscribed Observer.\r\n unsubscribeOne(i) {\r\n if (this.observers === undefined || this.observers[i] === undefined) {\r\n return;\r\n }\r\n delete this.observers[i];\r\n this.observerCount -= 1;\r\n if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n this.onNoObservers(this);\r\n }\r\n }\r\n forEachObserver(fn) {\r\n if (this.finalized) {\r\n // Already closed by previous event....just eat the additional values.\r\n return;\r\n }\r\n // Since sendOne calls asynchronously - there is no chance that\r\n // this.observers will become undefined.\r\n for (let i = 0; i < this.observers.length; i++) {\r\n this.sendOne(i, fn);\r\n }\r\n }\r\n // Call the Observer via one of it's callback function. We are careful to\r\n // confirm that the observe has not been unsubscribed since this asynchronous\r\n // function had been queued.\r\n sendOne(i, fn) {\r\n // Execute the callback asynchronously\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n if (this.observers !== undefined && this.observers[i] !== undefined) {\r\n try {\r\n fn(this.observers[i]);\r\n }\r\n catch (e) {\r\n // Ignore exceptions raised in Observers or missing methods of an\r\n // Observer.\r\n // Log error to console. b/31404806\r\n if (typeof console !== 'undefined' && console.error) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n close(err) {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n if (err !== undefined) {\r\n this.finalError = err;\r\n }\r\n // Proxy is no longer needed - garbage collect references\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n this.observers = undefined;\r\n this.onNoObservers = undefined;\r\n });\r\n }\r\n}\r\n/** Turn synchronous function into one called asynchronously. */\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction async(fn, onError) {\r\n return (...args) => {\r\n Promise.resolve(true)\r\n .then(() => {\r\n fn(...args);\r\n })\r\n .catch((error) => {\r\n if (onError) {\r\n onError(error);\r\n }\r\n });\r\n };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n for (const method of methods) {\r\n if (method in obj && typeof obj[method] === 'function') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction noop() {\r\n // do nothing\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param fnName The function name\r\n * @param minCount The minimum number of arguments to allow for the function call\r\n * @param maxCount The maximum number of argument to allow for the function call\r\n * @param argCount The actual number of arguments provided.\r\n */\r\nconst validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n let argError;\r\n if (argCount < minCount) {\r\n argError = 'at least ' + minCount;\r\n }\r\n else if (argCount > maxCount) {\r\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n }\r\n if (argError) {\r\n const error = fnName +\r\n ' failed: Was called with ' +\r\n argCount +\r\n (argCount === 1 ? ' argument.' : ' arguments.') +\r\n ' Expects ' +\r\n argError +\r\n '.';\r\n throw new Error(error);\r\n }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param fnName The function name\r\n * @param argName The name of the argument\r\n * @return The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argName) {\r\n return `${fnName} failed: ${argName} argument `;\r\n}\r\n/**\r\n * @param fnName\r\n * @param argumentNumber\r\n * @param namespace\r\n * @param optional\r\n */\r\nfunction validateNamespace(fnName, namespace, optional) {\r\n if (optional && !namespace) {\r\n return;\r\n }\r\n if (typeof namespace !== 'string') {\r\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');\r\n }\r\n}\r\nfunction validateCallback(fnName, argumentName, \r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\ncallback, optional) {\r\n if (optional && !callback) {\r\n return;\r\n }\r\n if (typeof callback !== 'function') {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');\r\n }\r\n}\r\nfunction validateContextObject(fnName, argumentName, context, optional) {\r\n if (optional && !context) {\r\n return;\r\n }\r\n if (typeof context !== 'object' || context === null) {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript. All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nconst stringToByteArray = function (str) {\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n // Is this the lead surrogate in a surrogate pair?\r\n if (c >= 0xd800 && c <= 0xdbff) {\r\n const high = c - 0xd800; // the high 10 bits.\r\n i++;\r\n assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n c = 0x10000 + (high << 10) + low;\r\n }\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if (c < 65536) {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nconst stringLength = function (str) {\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const c = str.charCodeAt(i);\r\n if (c < 128) {\r\n p++;\r\n }\r\n else if (c < 2048) {\r\n p += 2;\r\n }\r\n else if (c >= 0xd800 && c <= 0xdbff) {\r\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\r\n p += 4;\r\n i++; // skip trail surrogate.\r\n }\r\n else {\r\n p += 3;\r\n }\r\n }\r\n return p;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Copied from https://stackoverflow.com/a/2117523\r\n * Generates a new uuid.\r\n * @public\r\n */\r\nconst uuidv4 = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The amount of milliseconds to exponentially increase.\r\n */\r\nconst DEFAULT_INTERVAL_MILLIS = 1000;\r\n/**\r\n * The factor to backoff by.\r\n * Should be a number greater than 1.\r\n */\r\nconst DEFAULT_BACKOFF_FACTOR = 2;\r\n/**\r\n * The maximum milliseconds to increase to.\r\n *\r\n * <p>Visible for testing\r\n */\r\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\r\n/**\r\n * The percentage of backoff time to randomize by.\r\n * See\r\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\r\n * for context.\r\n *\r\n * <p>Visible for testing\r\n */\r\nconst RANDOM_FACTOR = 0.5;\r\n/**\r\n * Based on the backoff method from\r\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\r\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\r\n */\r\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\r\n // Calculates an exponentially increasing value.\r\n // Deviation: calculates value from count and a constant interval, so we only need to save value\r\n // and count to restore state.\r\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\r\n // A random \"fuzz\" to avoid waves of retries.\r\n // Deviation: randomFactor is required.\r\n const randomWait = Math.round(\r\n // A fraction of the backoff value to add/subtract.\r\n // Deviation: changes multiplication order to improve readability.\r\n RANDOM_FACTOR *\r\n currBaseValue *\r\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\r\n // if we add or subtract.\r\n (Math.random() - 0.5) *\r\n 2);\r\n // Limits backoff to max to avoid effectively permanent backoff.\r\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provide English ordinal letters after a number\r\n */\r\nfunction ordinal(i) {\r\n if (!Number.isFinite(i)) {\r\n return `${i}`;\r\n }\r\n return i + indicator(i);\r\n}\r\nfunction indicator(i) {\r\n i = Math.abs(i);\r\n const cent = i % 100;\r\n if (cent >= 10 && cent <= 20) {\r\n return 'th';\r\n }\r\n const dec = i % 10;\r\n if (dec === 1) {\r\n return 'st';\r\n }\r\n if (dec === 2) {\r\n return 'nd';\r\n }\r\n if (dec === 3) {\r\n return 'rd';\r\n }\r\n return 'th';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getModularInstance(service) {\r\n if (service && service._delegate) {\r\n return service._delegate;\r\n }\r\n else {\r\n return service;\r\n }\r\n}\n\nexport { CONSTANTS, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, uuidv4, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n//# sourceMappingURL=index.esm2017.js.map\n","var V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!V3_URL_REGEX.test(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(V3_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a <body> element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"1.46.0\",\n startTime: startTime\n });\n};\n\nvar stripePromise = null;\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise !== null) {\n return stripePromise;\n }\n\n stripePromise = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n }\n\n script.addEventListener('load', function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n });\n script.addEventListener('error', function () {\n reject(new Error('Failed to load Stripe.js'));\n });\n } catch (error) {\n reject(error);\n return;\n }\n });\n return stripePromise;\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n if (maybeStripe === null) {\n return null;\n }\n\n var stripe = maybeStripe.apply(undefined, args);\n registerWrapper(stripe, startTime);\n return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\n// own script injection.\n\nvar stripePromise$1 = Promise.resolve().then(function () {\n return loadScript(null);\n});\nvar loadCalled = false;\nstripePromise$1[\"catch\"](function (err) {\n if (!loadCalled) {\n console.warn(err);\n }\n});\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadCalled = true;\n var startTime = Date.now();\n return stripePromise$1.then(function (maybeStripe) {\n return initStripe(maybeStripe, args, startTime);\n });\n};\n\nexport { loadStripe };\n","/**\n * vee-validate v4.7.3\n * (c) 2022 Abdelrahman Awad\n * @license MIT\n */\n/* eslint-disable no-misleading-character-class */\r\n/**\r\n * Some Alpha Regex helpers.\r\n * https://github.com/chriso/validator.js/blob/master/src/lib/alpha.js\r\n */\r\nconst alpha = {\r\n en: /^[A-Z]*$/i,\r\n cs: /^[A-ZÃČĎÉĚÃŇÓŘŠŤÚŮÃŽ]*$/i,\r\n da: /^[A-ZÆØÅ]*$/i,\r\n de: /^[A-ZÄÖÜß]*$/i,\r\n es: /^[A-ZÃÉÃÑÓÚÜ]*$/i,\r\n fr: /^[A-ZÀÂÆÇÉÈÊËÃÎÔŒÙÛÜŸ]*$/i,\r\n it: /^[A-Z\\xC0-\\xFF]*$/i,\r\n lt: /^[A-ZĄČĘĖĮŠŲŪŽ]*$/i,\r\n nl: /^[A-ZÉËÃÓÖÜ]*$/i,\r\n hu: /^[A-ZÃÉÃÓÖÅÚÜŰ]*$/i,\r\n pl: /^[A-ZĄĆĘŚÅŃÓŻŹ]*$/i,\r\n pt: /^[A-ZÃÃÀÂÇÉÊÃÕÓÔÚÜ]*$/i,\r\n ru: /^[Ð-ЯÐ]*$/i,\r\n sk: /^[A-ZÃÄČĎÉÃĹĽŇÓŔŠŤÚÃŽ]*$/i,\r\n sr: /^[A-ZČĆŽŠÄ]*$/i,\r\n sv: /^[A-ZÅÄÖ]*$/i,\r\n tr: /^[A-ZÇĞİıÖŞÜ]*$/i,\r\n uk: /^[Ð-ЩЬЮЯЄІЇÒ]*$/i,\r\n ar: /^[ءآأؤإئابةتثجØخدذرزسشصضطظعغÙقكلمنهوىيًٌÙÙŽÙÙّْٰ]*$/,\r\n az: /^[A-ZÇÆĞİıÖŞÜ]*$/i,\r\n ug: /^[A-ZÚ†Û‹ÛرتيۇÚوپھسداەىقكلزشغۈبنمژÙگخجۆئ]*$/i,\r\n};\r\nconst alphaSpaces = {\r\n en: /^[A-Z\\s]*$/i,\r\n cs: /^[A-ZÃČĎÉĚÃŇÓŘŠŤÚŮÃŽ\\s]*$/i,\r\n da: /^[A-ZÆØÅ\\s]*$/i,\r\n de: /^[A-ZÄÖÜß\\s]*$/i,\r\n es: /^[A-ZÃÉÃÑÓÚÜ\\s]*$/i,\r\n fr: /^[A-ZÀÂÆÇÉÈÊËÃÎÔŒÙÛÜŸ\\s]*$/i,\r\n it: /^[A-Z\\xC0-\\xFF\\s]*$/i,\r\n lt: /^[A-ZĄČĘĖĮŠŲŪŽ\\s]*$/i,\r\n nl: /^[A-ZÉËÃÓÖÜ\\s]*$/i,\r\n hu: /^[A-ZÃÉÃÓÖÅÚÜŰ\\s]*$/i,\r\n pl: /^[A-ZĄĆĘŚÅŃÓŻŹ\\s]*$/i,\r\n pt: /^[A-ZÃÃÀÂÇÉÊÃÕÓÔÚÜ\\s]*$/i,\r\n ru: /^[Ð-ЯÐ\\s]*$/i,\r\n sk: /^[A-ZÃÄČĎÉÃĹĽŇÓŔŠŤÚÃŽ\\s]*$/i,\r\n sr: /^[A-ZČĆŽŠÄ\\s]*$/i,\r\n sv: /^[A-ZÅÄÖ\\s]*$/i,\r\n tr: /^[A-ZÇĞİıÖŞÜ\\s]*$/i,\r\n uk: /^[Ð-ЩЬЮЯЄІЇÒ\\s]*$/i,\r\n ar: /^[ءآأؤإئابةتثجØخدذرزسشصضطظعغÙقكلمنهوىيًٌÙÙŽÙÙّْٰ\\s]*$/,\r\n az: /^[A-ZÇÆĞİıÖŞÜ\\s]*$/i,\r\n ug: /^[A-ZÚ†Û‹ÛرتيۇÚوپھسداەىقكلزشغۈبنمژÙگخجۆئ\\s]*$/i,\r\n};\r\nconst alphanumeric = {\r\n en: /^[0-9A-Z]*$/i,\r\n cs: /^[0-9A-ZÃČĎÉĚÃŇÓŘŠŤÚŮÃŽ]*$/i,\r\n da: /^[0-9A-ZÆØÅ]$/i,\r\n de: /^[0-9A-ZÄÖÜß]*$/i,\r\n es: /^[0-9A-ZÃÉÃÑÓÚÜ]*$/i,\r\n fr: /^[0-9A-ZÀÂÆÇÉÈÊËÃÎÔŒÙÛÜŸ]*$/i,\r\n it: /^[0-9A-Z\\xC0-\\xFF]*$/i,\r\n lt: /^[0-9A-ZĄČĘĖĮŠŲŪŽ]*$/i,\r\n hu: /^[0-9A-ZÃÉÃÓÖÅÚÜŰ]*$/i,\r\n nl: /^[0-9A-ZÉËÃÓÖÜ]*$/i,\r\n pl: /^[0-9A-ZĄĆĘŚÅŃÓŻŹ]*$/i,\r\n pt: /^[0-9A-ZÃÃÀÂÇÉÊÃÕÓÔÚÜ]*$/i,\r\n ru: /^[0-9Ð-ЯÐ]*$/i,\r\n sk: /^[0-9A-ZÃÄČĎÉÃĹĽŇÓŔŠŤÚÃŽ]*$/i,\r\n sr: /^[0-9A-ZČĆŽŠÄ]*$/i,\r\n sv: /^[0-9A-ZÅÄÖ]*$/i,\r\n tr: /^[0-9A-ZÇĞİıÖŞÜ]*$/i,\r\n uk: /^[0-9Ð-ЩЬЮЯЄІЇÒ]*$/i,\r\n ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجØخدذرزسشصضطظعغÙقكلمنهوىيًٌÙÙŽÙÙّْٰ]*$/,\r\n az: /^[0-9A-ZÇÆĞİıÖŞÜ]*$/i,\r\n ug: /^[0-9A-ZÚ†Û‹ÛرتيۇÚوپھسداەىقكلزشغۈبنمژÙگخجۆئ]*$/i,\r\n};\r\nconst alphaDash = {\r\n en: /^[0-9A-Z_-]*$/i,\r\n cs: /^[0-9A-ZÃČĎÉĚÃŇÓŘŠŤÚŮÃŽ_-]*$/i,\r\n da: /^[0-9A-ZÆØÅ_-]*$/i,\r\n de: /^[0-9A-ZÄÖÜß_-]*$/i,\r\n es: /^[0-9A-ZÃÉÃÑÓÚÜ_-]*$/i,\r\n fr: /^[0-9A-ZÀÂÆÇÉÈÊËÃÎÔŒÙÛÜŸ_-]*$/i,\r\n it: /^[0-9A-Z\\xC0-\\xFF_-]*$/i,\r\n lt: /^[0-9A-ZĄČĘĖĮŠŲŪŽ_-]*$/i,\r\n nl: /^[0-9A-ZÉËÃÓÖÜ_-]*$/i,\r\n hu: /^[0-9A-ZÃÉÃÓÖÅÚÜŰ_-]*$/i,\r\n pl: /^[0-9A-ZĄĆĘŚÅŃÓŻŹ_-]*$/i,\r\n pt: /^[0-9A-ZÃÃÀÂÇÉÊÃÕÓÔÚÜ_-]*$/i,\r\n ru: /^[0-9Ð-ЯÐ_-]*$/i,\r\n sk: /^[0-9A-ZÃÄČĎÉÃĹĽŇÓŔŠŤÚÃŽ_-]*$/i,\r\n sr: /^[0-9A-ZČĆŽŠÄ_-]*$/i,\r\n sv: /^[0-9A-ZÅÄÖ_-]*$/i,\r\n tr: /^[0-9A-ZÇĞİıÖŞÜ_-]*$/i,\r\n uk: /^[0-9Ð-ЩЬЮЯЄІЇÒ_-]*$/i,\r\n ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجØخدذرزسشصضطظعغÙقكلمنهوىيًٌÙÙŽÙÙّْٰ_-]*$/,\r\n az: /^[0-9A-ZÇÆĞİıÖŞÜ_-]*$/i,\r\n ug: /^[0-9A-ZÚ†Û‹ÛرتيۇÚوپھسداەىقكلزشغۈبنمژÙگخجۆئ_-]*$/i,\r\n};\r\nconst getLocale = (params) => {\r\n if (!params) {\r\n return undefined;\r\n }\r\n return Array.isArray(params) ? params[0] : params.locale;\r\n};\n\nfunction getSingleParam(params, paramName) {\r\n return Array.isArray(params) ? params[0] : params[paramName];\r\n}\r\nfunction isEmpty(value) {\r\n if (value === null || value === undefined || value === '') {\r\n return true;\r\n }\r\n if (Array.isArray(value) && value.length === 0) {\r\n return true;\r\n }\r\n return false;\r\n}\n\nconst alphaValidator = (value, params) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const locale = getLocale(params);\r\n if (Array.isArray(value)) {\r\n return value.every(val => alphaValidator(val, { locale }));\r\n }\r\n const valueAsString = String(value);\r\n // Match at least one locale.\r\n if (!locale) {\r\n return Object.keys(alpha).some(loc => alpha[loc].test(valueAsString));\r\n }\r\n return (alpha[locale] || alpha.en).test(valueAsString);\r\n};\n\nconst alphaDashValidator = (value, params) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const locale = getLocale(params);\r\n if (Array.isArray(value)) {\r\n return value.every(val => alphaDashValidator(val, { locale }));\r\n }\r\n const valueAsString = String(value);\r\n // Match at least one locale.\r\n if (!locale) {\r\n return Object.keys(alphaDash).some(loc => alphaDash[loc].test(valueAsString));\r\n }\r\n return (alphaDash[locale] || alphaDash.en).test(valueAsString);\r\n};\n\nconst alphaNumValidator = (value, params) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const locale = getLocale(params);\r\n if (Array.isArray(value)) {\r\n return value.every(val => alphaNumValidator(val, { locale }));\r\n }\r\n const valueAsString = String(value);\r\n // Match at least one locale.\r\n if (!locale) {\r\n return Object.keys(alphanumeric).some(loc => alphanumeric[loc].test(valueAsString));\r\n }\r\n return (alphanumeric[locale] || alphanumeric.en).test(valueAsString);\r\n};\n\nconst alphaSpacesValidator = (value, params) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const locale = getLocale(params);\r\n if (Array.isArray(value)) {\r\n return value.every(val => alphaSpacesValidator(val, { locale }));\r\n }\r\n const valueAsString = String(value);\r\n // Match at least one locale.\r\n if (!locale) {\r\n return Object.keys(alphaSpaces).some(loc => alphaSpaces[loc].test(valueAsString));\r\n }\r\n return (alphaSpaces[locale] || alphaSpaces.en).test(valueAsString);\r\n};\n\nfunction getParams$1(params) {\r\n if (!params) {\r\n return {\r\n min: 0,\r\n max: 0,\r\n };\r\n }\r\n if (Array.isArray(params)) {\r\n return { min: params[0], max: params[1] };\r\n }\r\n return params;\r\n}\r\nconst betweenValidator = (value, params) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const { min, max } = getParams$1(params);\r\n if (Array.isArray(value)) {\r\n return value.every(val => !!betweenValidator(val, { min, max }));\r\n }\r\n const valueAsNumber = Number(value);\r\n return Number(min) <= valueAsNumber && Number(max) >= valueAsNumber;\r\n};\n\nconst confirmedValidator = (value, params) => {\r\n const target = getSingleParam(params, 'target');\r\n return String(value) === String(target);\r\n};\n\nconst digitsValidator = (value, params) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const length = getSingleParam(params, 'length');\r\n if (Array.isArray(value)) {\r\n return value.every(val => digitsValidator(val, { length }));\r\n }\r\n const strVal = String(value);\r\n return /^[0-9]*$/.test(strVal) && strVal.length === Number(length);\r\n};\n\nconst validateImage = (file, width, height) => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const URL = window.URL || window.webkitURL;\r\n return new Promise(resolve => {\r\n const image = new Image();\r\n image.onerror = () => resolve(false);\r\n image.onload = () => resolve(image.width === width && image.height === height);\r\n image.src = URL.createObjectURL(file);\r\n });\r\n};\r\nfunction getParams(params) {\r\n if (!params) {\r\n return { width: 0, height: 0 };\r\n }\r\n if (Array.isArray(params)) {\r\n return { width: Number(params[0]), height: Number(params[1]) };\r\n }\r\n return {\r\n width: Number(params.width),\r\n height: Number(params.height),\r\n };\r\n}\r\nconst dimensionsValidator = (files, params) => {\r\n if (isEmpty(files)) {\r\n return true;\r\n }\r\n const { width, height } = getParams(params);\r\n const list = [];\r\n const fileList = Array.isArray(files) ? files : [files];\r\n for (let i = 0; i < fileList.length; i++) {\r\n // if file is not an image, reject.\r\n if (!/\\.(jpg|svg|jpeg|png|bmp|gif)$/i.test(fileList[i].name)) {\r\n return Promise.resolve(false);\r\n }\r\n list.push(fileList[i]);\r\n }\r\n return Promise.all(list.map(file => validateImage(file, width, height))).then(values => {\r\n return values.every(v => v);\r\n });\r\n};\n\n/* eslint-disable no-useless-escape */\r\nconst emailValidator = (value) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n if (Array.isArray(value)) {\r\n return value.every(val => re.test(String(val)));\r\n }\r\n return re.test(String(value));\r\n};\n\nconst extValidator = (files, extensions) => {\r\n if (isEmpty(files)) {\r\n return true;\r\n }\r\n if (!extensions) {\r\n extensions = [];\r\n }\r\n const regex = new RegExp(`.(${extensions.join('|')})$`, 'i');\r\n if (Array.isArray(files)) {\r\n return files.every(file => regex.test(file.name));\r\n }\r\n return regex.test(files.name);\r\n};\n\nconst imageValidator = (files) => {\r\n if (isEmpty(files)) {\r\n return true;\r\n }\r\n const regex = /\\.(jpg|svg|jpeg|png|bmp|gif|webp)$/i;\r\n if (Array.isArray(files)) {\r\n return files.every(file => regex.test(file.name));\r\n }\r\n return regex.test(files.name);\r\n};\n\nconst integerValidator = (value) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n if (Array.isArray(value)) {\r\n return value.every(val => /^-?[0-9]+$/.test(String(val)));\r\n }\r\n return /^-?[0-9]+$/.test(String(value));\r\n};\n\nconst isValidator = (value, params) => {\r\n const other = getSingleParam(params, 'other');\r\n return value === other;\r\n};\n\nconst isNotValidator = (value, params) => {\r\n const other = getSingleParam(params, 'other');\r\n return value !== other;\r\n};\n\nfunction isNullOrUndefined(value) {\r\n return value === null || value === undefined;\r\n}\r\nfunction isEmptyArray(arr) {\r\n return Array.isArray(arr) && arr.length === 0;\r\n}\n\nconst lengthValidator = (value, params) => {\r\n // Normalize the length value\r\n const length = getSingleParam(params, 'length');\r\n if (isNullOrUndefined(value)) {\r\n return false;\r\n }\r\n if (typeof value === 'number') {\r\n value = String(value);\r\n }\r\n if (!value.length) {\r\n value = Array.from(value);\r\n }\r\n return value.length === Number(length);\r\n};\n\nconst maxLengthValidator = (value, params) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const length = getSingleParam(params, 'length');\r\n if (Array.isArray(value)) {\r\n return value.every(val => maxLengthValidator(val, { length }));\r\n }\r\n return String(value).length <= Number(length);\r\n};\n\nconst maxValueValidator = (value, params) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const max = getSingleParam(params, 'max');\r\n if (Array.isArray(value)) {\r\n return value.length > 0 && value.every(val => maxValueValidator(val, { max }));\r\n }\r\n return Number(value) <= Number(max);\r\n};\n\nconst mimesValidator = (files, mimes) => {\r\n if (isEmpty(files)) {\r\n return true;\r\n }\r\n if (!mimes) {\r\n mimes = [];\r\n }\r\n const regex = new RegExp(`${mimes.join('|').replace('*', '.+')}$`, 'i');\r\n if (Array.isArray(files)) {\r\n return files.every(file => regex.test(file.type));\r\n }\r\n return regex.test(files.type);\r\n};\n\nconst minValidator = (value, params) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const length = getSingleParam(params, 'length');\r\n if (Array.isArray(value)) {\r\n return value.every(val => minValidator(val, { length }));\r\n }\r\n return String(value).length >= Number(length);\r\n};\n\nconst minValueValidator = (value, params) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const min = getSingleParam(params, 'min');\r\n if (Array.isArray(value)) {\r\n return value.length > 0 && value.every(val => minValueValidator(val, { min }));\r\n }\r\n return Number(value) >= Number(min);\r\n};\n\nconst oneOfValidator = (value, list) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n if (Array.isArray(value)) {\r\n return value.every(val => oneOfValidator(val, list));\r\n }\r\n return Array.from(list).some(item => {\r\n // eslint-disable-next-line\r\n return item == value;\r\n });\r\n};\n\nconst notOneOfValidator = (value, list) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n return !oneOfValidator(value, list);\r\n};\n\nconst ar = /^[٠١٢٣٤٥٦٧٨٩]+$/;\r\nconst en = /^[0-9]+$/;\r\nconst numericValidator = (value) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n const testValue = (val) => {\r\n const strValue = String(val);\r\n return en.test(strValue) || ar.test(strValue);\r\n };\r\n if (Array.isArray(value)) {\r\n return value.every(testValue);\r\n }\r\n return testValue(value);\r\n};\n\nconst regexValidator = (value, params) => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n let regex = getSingleParam(params, 'regex');\r\n if (typeof regex === 'string') {\r\n regex = new RegExp(regex);\r\n }\r\n if (Array.isArray(value)) {\r\n return value.every(val => regexValidator(val, { regex }));\r\n }\r\n return regex.test(String(value));\r\n};\n\nconst requiredValidator = (value) => {\r\n if (isNullOrUndefined(value) || isEmptyArray(value) || value === false) {\r\n return false;\r\n }\r\n return !!String(value).trim().length;\r\n};\n\nconst sizeValidator = (files, params) => {\r\n if (isEmpty(files)) {\r\n return true;\r\n }\r\n let size = getSingleParam(params, 'size');\r\n size = Number(size);\r\n if (isNaN(size)) {\r\n return false;\r\n }\r\n const nSize = size * 1024;\r\n if (!Array.isArray(files)) {\r\n return files.size <= nSize;\r\n }\r\n for (let i = 0; i < files.length; i++) {\r\n if (files[i].size > nSize) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n};\n\nconst urlValidator = (value, params) => {\r\n var _a;\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n let pattern = getSingleParam(params, 'pattern');\r\n if (typeof pattern === 'string') {\r\n pattern = new RegExp(pattern);\r\n }\r\n try {\r\n // eslint-disable-next-line no-new\r\n new URL(value);\r\n }\r\n catch (_b) {\r\n return false;\r\n }\r\n return (_a = pattern === null || pattern === void 0 ? void 0 : pattern.test(value)) !== null && _a !== void 0 ? _a : true;\r\n};\n\n/* eslint-disable camelcase */\r\nconst all = {\r\n alpha_dash: alphaDashValidator,\r\n alpha_num: alphaNumValidator,\r\n alpha_spaces: alphaSpacesValidator,\r\n alpha: alphaValidator,\r\n between: betweenValidator,\r\n confirmed: confirmedValidator,\r\n digits: digitsValidator,\r\n dimensions: dimensionsValidator,\r\n email: emailValidator,\r\n ext: extValidator,\r\n image: imageValidator,\r\n integer: integerValidator,\r\n is_not: isNotValidator,\r\n is: isValidator,\r\n length: lengthValidator,\r\n max_value: maxValueValidator,\r\n max: maxLengthValidator,\r\n mimes: mimesValidator,\r\n min_value: minValueValidator,\r\n min: minValidator,\r\n not_one_of: notOneOfValidator,\r\n numeric: numericValidator,\r\n one_of: oneOfValidator,\r\n regex: regexValidator,\r\n required: requiredValidator,\r\n size: sizeValidator,\r\n url: urlValidator,\r\n};\n\nexport { alphaValidator as alpha, alphaDashValidator as alpha_dash, alphaNumValidator as alpha_num, alphaSpacesValidator as alpha_spaces, betweenValidator as between, confirmedValidator as confirmed, all as default, digitsValidator as digits, dimensionsValidator as dimensions, emailValidator as email, extValidator as ext, imageValidator as image, integerValidator as integer, isValidator as is, isNotValidator as is_not, lengthValidator as length, maxLengthValidator as max, maxValueValidator as max_value, mimesValidator as mimes, minValidator as min, minValueValidator as min_value, notOneOfValidator as not_one_of, numericValidator as numeric, oneOfValidator as one_of, regexValidator as regex, requiredValidator as required, sizeValidator as size, urlValidator as url };\n","import { extend, isArray, toNumber, isMap, isIntegerKey, hasOwn, isSymbol, isObject, hasChanged, makeMap, capitalize, toRawType, def, isFunction, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this.active = true;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index =\n (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n }\n }\n run(fn) {\n if (this.active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n }\n finally {\n activeEffectScope = currentEffectScope;\n }\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n activeEffectScope = this;\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n activeEffectScope = this.parent;\n }\n stop(fromParent) {\n if (this.active) {\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n }\n // nested scope, dereference from parent to avoid memory leaks\n if (!this.detached && this.parent && !fromParent) {\n // optimized O(1) removal\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = undefined;\n this.active = false;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n if (scope && scope.active) {\n scope.effects.push(effect);\n }\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`onScopeDispose() is called when there is no active effect scope` +\n ` to be associated with.`);\n }\n}\n\nconst createDep = (effects) => {\n const dep = new Set(effects);\n dep.w = 0;\n dep.n = 0;\n return dep;\n};\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\nconst initDepMarkers = ({ deps }) => {\n if (deps.length) {\n for (let i = 0; i < deps.length; i++) {\n deps[i].w |= trackOpBit; // set was tracked\n }\n }\n};\nconst finalizeDepMarkers = (effect) => {\n const { deps } = effect;\n if (deps.length) {\n let ptr = 0;\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (wasTracked(dep) && !newTracked(dep)) {\n dep.delete(effect);\n }\n else {\n deps[ptr++] = dep;\n }\n // clear bits\n dep.w &= ~trackOpBit;\n dep.n &= ~trackOpBit;\n }\n deps.length = ptr;\n }\n};\n\nconst targetMap = new WeakMap();\n// The number of effects currently being tracked recursively.\nlet effectTrackDepth = 0;\nlet trackOpBit = 1;\n/**\n * The bitwise track markers support at most 30 levels of recursion.\n * This value is chosen to enable modern JS engines to use a SMI on all platforms.\n * When recursion depth is greater, fall back to using a full cleanup.\n */\nconst maxMarkerBits = 30;\nlet activeEffect;\nconst ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'iterate' : '');\nconst MAP_KEY_ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'Map key iterate' : '');\nclass ReactiveEffect {\n constructor(fn, scheduler = null, scope) {\n this.fn = fn;\n this.scheduler = scheduler;\n this.active = true;\n this.deps = [];\n this.parent = undefined;\n recordEffectScope(this, scope);\n }\n run() {\n if (!this.active) {\n return this.fn();\n }\n let parent = activeEffect;\n let lastShouldTrack = shouldTrack;\n while (parent) {\n if (parent === this) {\n return;\n }\n parent = parent.parent;\n }\n try {\n this.parent = activeEffect;\n activeEffect = this;\n shouldTrack = true;\n trackOpBit = 1 << ++effectTrackDepth;\n if (effectTrackDepth <= maxMarkerBits) {\n initDepMarkers(this);\n }\n else {\n cleanupEffect(this);\n }\n return this.fn();\n }\n finally {\n if (effectTrackDepth <= maxMarkerBits) {\n finalizeDepMarkers(this);\n }\n trackOpBit = 1 << --effectTrackDepth;\n activeEffect = this.parent;\n shouldTrack = lastShouldTrack;\n this.parent = undefined;\n if (this.deferStop) {\n this.stop();\n }\n }\n }\n stop() {\n // stopped while running itself - defer the cleanup\n if (activeEffect === this) {\n this.deferStop = true;\n }\n else if (this.active) {\n cleanupEffect(this);\n if (this.onStop) {\n this.onStop();\n }\n this.active = false;\n }\n }\n}\nfunction cleanupEffect(effect) {\n const { deps } = effect;\n if (deps.length) {\n for (let i = 0; i < deps.length; i++) {\n deps[i].delete(effect);\n }\n deps.length = 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect) {\n fn = fn.effect.fn;\n }\n const _effect = new ReactiveEffect(fn);\n if (options) {\n extend(_effect, options);\n if (options.scope)\n recordEffectScope(_effect, options.scope);\n }\n if (!options || !options.lazy) {\n _effect.run();\n }\n const runner = _effect.run.bind(_effect);\n runner.effect = _effect;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === undefined ? true : last;\n}\nfunction track(target, type, key) {\n if (shouldTrack && activeEffect) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, (depsMap = new Map()));\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, (dep = createDep()));\n }\n const eventInfo = (process.env.NODE_ENV !== 'production')\n ? { effect: activeEffect, target, type, key }\n : undefined;\n trackEffects(dep, eventInfo);\n }\n}\nfunction trackEffects(dep, debuggerEventExtraInfo) {\n let shouldTrack = false;\n if (effectTrackDepth <= maxMarkerBits) {\n if (!newTracked(dep)) {\n dep.n |= trackOpBit; // set newly tracked\n shouldTrack = !wasTracked(dep);\n }\n }\n else {\n // Full cleanup mode.\n shouldTrack = !dep.has(activeEffect);\n }\n if (shouldTrack) {\n dep.add(activeEffect);\n activeEffect.deps.push(dep);\n if ((process.env.NODE_ENV !== 'production') && activeEffect.onTrack) {\n activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n // never been tracked\n return;\n }\n let deps = [];\n if (type === \"clear\" /* TriggerOpTypes.CLEAR */) {\n // collection being cleared\n // trigger all effects for target\n deps = [...depsMap.values()];\n }\n else if (key === 'length' && isArray(target)) {\n const newLength = toNumber(newValue);\n depsMap.forEach((dep, key) => {\n if (key === 'length' || key >= newLength) {\n deps.push(dep);\n }\n });\n }\n else {\n // schedule runs for SET | ADD | DELETE\n if (key !== void 0) {\n deps.push(depsMap.get(key));\n }\n // also run for iteration key on ADD | DELETE | Map.SET\n switch (type) {\n case \"add\" /* TriggerOpTypes.ADD */:\n if (!isArray(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n else if (isIntegerKey(key)) {\n // new index added to array -> length changes\n deps.push(depsMap.get('length'));\n }\n break;\n case \"delete\" /* TriggerOpTypes.DELETE */:\n if (!isArray(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\" /* TriggerOpTypes.SET */:\n if (isMap(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n const eventInfo = (process.env.NODE_ENV !== 'production')\n ? { target, type, key, newValue, oldValue, oldTarget }\n : undefined;\n if (deps.length === 1) {\n if (deps[0]) {\n if ((process.env.NODE_ENV !== 'production')) {\n triggerEffects(deps[0], eventInfo);\n }\n else {\n triggerEffects(deps[0]);\n }\n }\n }\n else {\n const effects = [];\n for (const dep of deps) {\n if (dep) {\n effects.push(...dep);\n }\n }\n if ((process.env.NODE_ENV !== 'production')) {\n triggerEffects(createDep(effects), eventInfo);\n }\n else {\n triggerEffects(createDep(effects));\n }\n }\n}\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\n // spread into array for stabilization\n const effects = isArray(dep) ? dep : [...dep];\n for (const effect of effects) {\n if (effect.computed) {\n triggerEffect(effect, debuggerEventExtraInfo);\n }\n }\n for (const effect of effects) {\n if (!effect.computed) {\n triggerEffect(effect, debuggerEventExtraInfo);\n }\n }\n}\nfunction triggerEffect(effect, debuggerEventExtraInfo) {\n if (effect !== activeEffect || effect.allowRecurse) {\n if ((process.env.NODE_ENV !== 'production') && effect.onTrigger) {\n effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));\n }\n if (effect.scheduler) {\n effect.scheduler();\n }\n else {\n effect.run();\n }\n }\n}\n\nconst isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n/*#__PURE__*/\nObject.getOwnPropertyNames(Symbol)\n // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller'\n // but accessing them on Symbol leads to TypeError because Symbol is a strict mode\n // function\n .filter(key => key !== 'arguments' && key !== 'caller')\n .map(key => Symbol[key])\n .filter(isSymbol));\nconst get = /*#__PURE__*/ createGetter();\nconst shallowGet = /*#__PURE__*/ createGetter(false, true);\nconst readonlyGet = /*#__PURE__*/ createGetter(true);\nconst shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\nconst arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n const instrumentations = {};\n ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n instrumentations[key] = function (...args) {\n const arr = toRaw(this);\n for (let i = 0, l = this.length; i < l; i++) {\n track(arr, \"get\" /* TrackOpTypes.GET */, i + '');\n }\n // we run the method using the original args first (which may be reactive)\n const res = arr[key](...args);\n if (res === -1 || res === false) {\n // if that didn't work, run it again using raw values.\n return arr[key](...args.map(toRaw));\n }\n else {\n return res;\n }\n };\n });\n ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\n instrumentations[key] = function (...args) {\n pauseTracking();\n const res = toRaw(this)[key].apply(this, args);\n resetTracking();\n return res;\n };\n });\n return instrumentations;\n}\nfunction createGetter(isReadonly = false, shallow = false) {\n return function get(target, key, receiver) {\n if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n return !isReadonly;\n }\n else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n return isReadonly;\n }\n else if (key === \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */) {\n return shallow;\n }\n else if (key === \"__v_raw\" /* ReactiveFlags.RAW */ &&\n receiver ===\n (isReadonly\n ? shallow\n ? shallowReadonlyMap\n : readonlyMap\n : shallow\n ? shallowReactiveMap\n : reactiveMap).get(target)) {\n return target;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) {\n return Reflect.get(arrayInstrumentations, key, receiver);\n }\n const res = Reflect.get(target, key, receiver);\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly) {\n track(target, \"get\" /* TrackOpTypes.GET */, key);\n }\n if (shallow) {\n return res;\n }\n if (isRef(res)) {\n // ref unwrapping - skip unwrap for Array + integer key.\n return targetIsArray && isIntegerKey(key) ? res : res.value;\n }\n if (isObject(res)) {\n // Convert returned value into a proxy as well. we do the isObject check\n // here to avoid invalid value warning. Also need to lazy access readonly\n // and reactive here to avoid circular dependency.\n return isReadonly ? readonly(res) : reactive(res);\n }\n return res;\n };\n}\nconst set = /*#__PURE__*/ createSetter();\nconst shallowSet = /*#__PURE__*/ createSetter(true);\nfunction createSetter(shallow = false) {\n return function set(target, key, value, receiver) {\n let oldValue = target[key];\n if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n return false;\n }\n if (!shallow) {\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n }\n }\n const hadKey = isArray(target) && isIntegerKey(key)\n ? Number(key) < target.length\n : hasOwn(target, key);\n const result = Reflect.set(target, key, value, receiver);\n // don't trigger if target is something up in the prototype chain of original\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n }\n else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n }\n }\n return result;\n };\n}\nfunction deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n }\n return result;\n}\nfunction has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\" /* TrackOpTypes.HAS */, key);\n }\n return result;\n}\nfunction ownKeys(target) {\n track(target, \"iterate\" /* TrackOpTypes.ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);\n return Reflect.ownKeys(target);\n}\nconst mutableHandlers = {\n get,\n set,\n deleteProperty,\n has,\n ownKeys\n};\nconst readonlyHandlers = {\n get: readonlyGet,\n set(target, key) {\n if ((process.env.NODE_ENV !== 'production')) {\n warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n }\n return true;\n },\n deleteProperty(target, key) {\n if ((process.env.NODE_ENV !== 'production')) {\n warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n }\n return true;\n }\n};\nconst shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {\n get: shallowGet,\n set: shallowSet\n});\n// Props handlers are special in the sense that it should not unwrap top-level\n// refs (in order to allow refs to be explicitly passed down), but should\n// retain the reactivity of the normal readonly object.\nconst shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {\n get: shallowReadonlyGet\n});\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get$1(target, key, isReadonly = false, isShallow = false) {\n // #1772: readonly(reactive(Map)) should return readonly + reactive version\n // of the value\n target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!isReadonly) {\n if (key !== rawKey) {\n track(rawTarget, \"get\" /* TrackOpTypes.GET */, key);\n }\n track(rawTarget, \"get\" /* TrackOpTypes.GET */, rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n }\n else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n }\n else if (target !== rawTarget) {\n // #3602 readonly(reactive(Map))\n // ensure that the nested reactive `Map` can do tracking for itself\n target.get(key);\n }\n}\nfunction has$1(key, isReadonly = false) {\n const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!isReadonly) {\n if (key !== rawKey) {\n track(rawTarget, \"has\" /* TrackOpTypes.HAS */, key);\n }\n track(rawTarget, \"has\" /* TrackOpTypes.HAS */, rawKey);\n }\n return key === rawKey\n ? target.has(key)\n : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n target = target[\"__v_raw\" /* ReactiveFlags.RAW */];\n !isReadonly && track(toRaw(target), \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n return Reflect.get(target, 'size', target);\n}\nfunction add(value) {\n value = toRaw(value);\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\" /* TriggerOpTypes.ADD */, value, value);\n }\n return this;\n}\nfunction set$1(key, value) {\n value = toRaw(value);\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\" /* TriggerOpTypes.ADD */, key, value);\n }\n else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\" /* TriggerOpTypes.SET */, key, value, oldValue);\n }\n return this;\n}\nfunction deleteEntry(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : undefined;\n // forward the operation before queueing reactions\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\" /* TriggerOpTypes.DELETE */, key, undefined, oldValue);\n }\n return result;\n}\nfunction clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = (process.env.NODE_ENV !== 'production')\n ? isMap(target)\n ? new Map(target)\n : new Set(target)\n : undefined;\n // forward the operation before queueing reactions\n const result = target.clear();\n if (hadItems) {\n trigger(target, \"clear\" /* TriggerOpTypes.CLEAR */, undefined, undefined, oldTarget);\n }\n return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n return function forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n const rawTarget = toRaw(target);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly && track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, ITERATE_KEY);\n return target.forEach((value, key) => {\n // important: make sure the callback is\n // 1. invoked with the reactive map as `this` and 3rd arg\n // 2. the value received should be a corresponding reactive/readonly.\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n return function (...args) {\n const target = this[\"__v_raw\" /* ReactiveFlags.RAW */];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\n const isKeyOnly = method === 'keys' && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly &&\n track(rawTarget, \"iterate\" /* TrackOpTypes.ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n // return a wrapped iterator which returns observed versions of the\n // values emitted from the real iterator\n return {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done\n ? { value, done }\n : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n },\n // iterable protocol\n [Symbol.iterator]() {\n return this;\n }\n };\n };\n}\nfunction createReadonlyMethod(type) {\n return function (...args) {\n if ((process.env.NODE_ENV !== 'production')) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n }\n return type === \"delete\" /* TriggerOpTypes.DELETE */ ? false : this;\n };\n}\nfunction createInstrumentations() {\n const mutableInstrumentations = {\n get(key) {\n return get$1(this, key);\n },\n get size() {\n return size(this);\n },\n has: has$1,\n add,\n set: set$1,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, false)\n };\n const shallowInstrumentations = {\n get(key) {\n return get$1(this, key, false, true);\n },\n get size() {\n return size(this);\n },\n has: has$1,\n add,\n set: set$1,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, true)\n };\n const readonlyInstrumentations = {\n get(key) {\n return get$1(this, key, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has$1.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n forEach: createForEach(true, false)\n };\n const shallowReadonlyInstrumentations = {\n get(key) {\n return get$1(this, key, true, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has$1.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\" /* TriggerOpTypes.ADD */),\n set: createReadonlyMethod(\"set\" /* TriggerOpTypes.SET */),\n delete: createReadonlyMethod(\"delete\" /* TriggerOpTypes.DELETE */),\n clear: createReadonlyMethod(\"clear\" /* TriggerOpTypes.CLEAR */),\n forEach: createForEach(true, true)\n };\n const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\n iteratorMethods.forEach(method => {\n mutableInstrumentations[method] = createIterableMethod(method, false, false);\n readonlyInstrumentations[method] = createIterableMethod(method, true, false);\n shallowInstrumentations[method] = createIterableMethod(method, false, true);\n shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\n });\n return [\n mutableInstrumentations,\n readonlyInstrumentations,\n shallowInstrumentations,\n shallowReadonlyInstrumentations\n ];\n}\nconst [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n const instrumentations = shallow\n ? isReadonly\n ? shallowReadonlyInstrumentations\n : shallowInstrumentations\n : isReadonly\n ? readonlyInstrumentations\n : mutableInstrumentations;\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */) {\n return !isReadonly;\n }\n else if (key === \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */) {\n return isReadonly;\n }\n else if (key === \"__v_raw\" /* ReactiveFlags.RAW */) {\n return target;\n }\n return Reflect.get(hasOwn(instrumentations, key) && key in target\n ? instrumentations\n : target, key, receiver);\n };\n}\nconst mutableCollectionHandlers = {\n get: /*#__PURE__*/ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /*#__PURE__*/ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /*#__PURE__*/ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /*#__PURE__*/ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = toRawType(target);\n console.warn(`Reactive ${type} contains both the raw and reactive ` +\n `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\n `which can lead to inconsistencies. ` +\n `Avoid differentiating between the raw and reactive versions ` +\n `of an object and only use the reactive version if possible.`);\n }\n}\n\nconst reactiveMap = new WeakMap();\nconst shallowReactiveMap = new WeakMap();\nconst readonlyMap = new WeakMap();\nconst shallowReadonlyMap = new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case 'Object':\n case 'Array':\n return 1 /* TargetType.COMMON */;\n case 'Map':\n case 'Set':\n case 'WeakMap':\n case 'WeakSet':\n return 2 /* TargetType.COLLECTION */;\n default:\n return 0 /* TargetType.INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\" /* ReactiveFlags.SKIP */] || !Object.isExtensible(value)\n ? 0 /* TargetType.INVALID */\n : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n // if trying to observe a readonly proxy, return the readonly version.\n if (isReadonly(target)) {\n return target;\n }\n return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\n}\n/**\n * Creates a readonly copy of the original object. Note the returned copy is not\n * made reactive, but `readonly` can be called on an already reactive object.\n */\nfunction readonly(target) {\n return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\n}\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.warn(`value cannot be made reactive: ${String(target)}`);\n }\n return target;\n }\n // target is already a Proxy, return it.\n // exception: calling readonly() on a reactive object\n if (target[\"__v_raw\" /* ReactiveFlags.RAW */] &&\n !(isReadonly && target[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */])) {\n return target;\n }\n // target already has corresponding Proxy\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n // only specific value types can be observed.\n const targetType = getTargetType(target);\n if (targetType === 0 /* TargetType.INVALID */) {\n return target;\n }\n const proxy = new Proxy(target, targetType === 2 /* TargetType.COLLECTION */ ? collectionHandlers : baseHandlers);\n proxyMap.set(target, proxy);\n return proxy;\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n }\n return !!(value && value[\"__v_isReactive\" /* ReactiveFlags.IS_REACTIVE */]);\n}\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */]);\n}\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */]);\n}\nfunction isProxy(value) {\n return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref) {\n if (shouldTrack && activeEffect) {\n ref = toRaw(ref);\n if ((process.env.NODE_ENV !== 'production')) {\n trackEffects(ref.dep || (ref.dep = createDep()), {\n target: ref,\n type: \"get\" /* TrackOpTypes.GET */,\n key: 'value'\n });\n }\n else {\n trackEffects(ref.dep || (ref.dep = createDep()));\n }\n }\n}\nfunction triggerRefValue(ref, newVal) {\n ref = toRaw(ref);\n if (ref.dep) {\n if ((process.env.NODE_ENV !== 'production')) {\n triggerEffects(ref.dep, {\n target: ref,\n type: \"set\" /* TriggerOpTypes.SET */,\n key: 'value',\n newValue: newVal\n });\n }\n else {\n triggerEffects(ref.dep);\n }\n }\n}\nfunction isRef(r) {\n return !!(r && r.__v_isRef === true);\n}\nfunction ref(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, __v_isShallow) {\n this.__v_isShallow = __v_isShallow;\n this.dep = undefined;\n this.__v_isRef = true;\n this._rawValue = __v_isShallow ? value : toRaw(value);\n this._value = __v_isShallow ? value : toReactive(value);\n }\n get value() {\n trackRefValue(this);\n return this._value;\n }\n set value(newVal) {\n const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n newVal = useDirectValue ? newVal : toRaw(newVal);\n if (hasChanged(newVal, this._rawValue)) {\n this._rawValue = newVal;\n this._value = useDirectValue ? newVal : toReactive(newVal);\n triggerRefValue(this, newVal);\n }\n }\n}\nfunction triggerRef(ref) {\n triggerRefValue(ref, (process.env.NODE_ENV !== 'production') ? ref.value : void 0);\n}\nfunction unref(ref) {\n return isRef(ref) ? ref.value : ref;\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n }\n else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs)\n ? objectWithRefs\n : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this.dep = undefined;\n this.__v_isRef = true;\n const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n if ((process.env.NODE_ENV !== 'production') && !isProxy(object)) {\n console.warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = toRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, _key, _defaultValue) {\n this._object = _object;\n this._key = _key;\n this._defaultValue = _defaultValue;\n this.__v_isRef = true;\n }\n get value() {\n const val = this._object[this._key];\n return val === undefined ? this._defaultValue : val;\n }\n set value(newVal) {\n this._object[this._key] = newVal;\n }\n}\nfunction toRef(object, key, defaultValue) {\n const val = object[key];\n return isRef(val)\n ? val\n : new ObjectRefImpl(object, key, defaultValue);\n}\n\nvar _a;\nclass ComputedRefImpl {\n constructor(getter, _setter, isReadonly, isSSR) {\n this._setter = _setter;\n this.dep = undefined;\n this.__v_isRef = true;\n this[_a] = false;\n this._dirty = true;\n this.effect = new ReactiveEffect(getter, () => {\n if (!this._dirty) {\n this._dirty = true;\n triggerRefValue(this);\n }\n });\n this.effect.computed = this;\n this.effect.active = this._cacheable = !isSSR;\n this[\"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */] = isReadonly;\n }\n get value() {\n // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n const self = toRaw(this);\n trackRefValue(self);\n if (self._dirty || !self._cacheable) {\n self._dirty = false;\n self._value = self.effect.run();\n }\n return self._value;\n }\n set value(newValue) {\n this._setter(newValue);\n }\n}\n_a = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n const onlyGetter = isFunction(getterOrOptions);\n if (onlyGetter) {\n getter = getterOrOptions;\n setter = (process.env.NODE_ENV !== 'production')\n ? () => {\n console.warn('Write operation failed: computed value is readonly');\n }\n : NOOP;\n }\n else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n if ((process.env.NODE_ENV !== 'production') && debugOptions && !isSSR) {\n cRef.effect.onTrack = debugOptions.onTrack;\n cRef.effect.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nvar _a$1;\nconst tick = /*#__PURE__*/ Promise.resolve();\nconst queue = [];\nlet queued = false;\nconst scheduler = (fn) => {\n queue.push(fn);\n if (!queued) {\n queued = true;\n tick.then(flush);\n }\n};\nconst flush = () => {\n for (let i = 0; i < queue.length; i++) {\n queue[i]();\n }\n queue.length = 0;\n queued = false;\n};\nclass DeferredComputedRefImpl {\n constructor(getter) {\n this.dep = undefined;\n this._dirty = true;\n this.__v_isRef = true;\n this[_a$1] = true;\n let compareTarget;\n let hasCompareTarget = false;\n let scheduled = false;\n this.effect = new ReactiveEffect(getter, (computedTrigger) => {\n if (this.dep) {\n if (computedTrigger) {\n compareTarget = this._value;\n hasCompareTarget = true;\n }\n else if (!scheduled) {\n const valueToCompare = hasCompareTarget ? compareTarget : this._value;\n scheduled = true;\n hasCompareTarget = false;\n scheduler(() => {\n if (this.effect.active && this._get() !== valueToCompare) {\n triggerRefValue(this);\n }\n scheduled = false;\n });\n }\n // chained upstream computeds are notified synchronously to ensure\n // value invalidation in case of sync access; normal effects are\n // deferred to be triggered in scheduler.\n for (const e of this.dep) {\n if (e.computed instanceof DeferredComputedRefImpl) {\n e.scheduler(true /* computedTrigger */);\n }\n }\n }\n this._dirty = true;\n });\n this.effect.computed = this;\n }\n _get() {\n if (this._dirty) {\n this._dirty = false;\n return (this._value = this.effect.run());\n }\n return this._value;\n }\n get value() {\n trackRefValue(this);\n // the computed ref may get wrapped by other proxies e.g. readonly() #3376\n return toRaw(this)._get();\n }\n}\n_a$1 = \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */;\nfunction deferredComputed(getter) {\n return new DeferredComputedRefImpl(getter);\n}\n\nexport { EffectScope, ITERATE_KEY, ReactiveEffect, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, pauseTracking, proxyRefs, reactive, readonly, ref, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, track, trigger, triggerRef, unref };\n","import { pauseTracking, resetTracking, isRef, toRaw, isShallow as isShallow$1, isReactive, ReactiveEffect, ref, shallowReadonly, track, reactive, shallowReactive, trigger, isProxy, EffectScope, markRaw, proxyRefs, computed as computed$1, isReadonly } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, customRef, effect, effectScope, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, isPromise, isArray, NOOP, getGlobalThis, extend, EMPTY_OBJ, toHandlerKey, toNumber, hyphenate, camelize, isObject, isOn, hasOwn, isModelListener, hasChanged, remove, isSet, isMap, isPlainObject, invokeArrayFns, isBuiltInDirective, capitalize, isGloballyWhitelisted, def, isReservedProp, EMPTY_ARR, toRawType, makeMap, NO, normalizeClass, normalizeStyle } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nfunction warn(msg, ...args) {\n if (!(process.env.NODE_ENV !== 'production'))\n return;\n // avoid props formatting or warn handler tracking deps that might be mutated\n // during patch, leading to infinite recursion.\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(appWarnHandler, instance, 11 /* ErrorCodes.APP_WARN_HANDLER */, [\n msg + args.join(''),\n instance && instance.proxy,\n trace\n .map(({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`)\n .join('\\n'),\n trace\n ]);\n }\n else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n /* istanbul ignore if */\n if (trace.length &&\n // avoid spamming console during tests\n !false) {\n warnArgs.push(`\\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n // we can't just use the stack because it will be incomplete during updates\n // that did not start from the root. Re-construct the parent chain using\n // instance parent pointers.\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n }\n else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\n/* istanbul ignore next */\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...(i === 0 ? [] : [`\\n`]), ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(vnode.component, vnode.type, isRoot)}`;\n const close = `>` + postfix;\n return vnode.props\n ? [open, ...formatProps(vnode.props), close]\n : [open + close];\n}\n/* istanbul ignore next */\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach(key => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\n/* istanbul ignore next */\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n }\n else if (typeof value === 'number' ||\n typeof value === 'boolean' ||\n value == null) {\n return raw ? value : [`${key}=${value}`];\n }\n else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n }\n else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n }\n else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\n\nconst ErrorTypeStrings = {\n [\"sp\" /* LifecycleHooks.SERVER_PREFETCH */]: 'serverPrefetch hook',\n [\"bc\" /* LifecycleHooks.BEFORE_CREATE */]: 'beforeCreate hook',\n [\"c\" /* LifecycleHooks.CREATED */]: 'created hook',\n [\"bm\" /* LifecycleHooks.BEFORE_MOUNT */]: 'beforeMount hook',\n [\"m\" /* LifecycleHooks.MOUNTED */]: 'mounted hook',\n [\"bu\" /* LifecycleHooks.BEFORE_UPDATE */]: 'beforeUpdate hook',\n [\"u\" /* LifecycleHooks.UPDATED */]: 'updated',\n [\"bum\" /* LifecycleHooks.BEFORE_UNMOUNT */]: 'beforeUnmount hook',\n [\"um\" /* LifecycleHooks.UNMOUNTED */]: 'unmounted hook',\n [\"a\" /* LifecycleHooks.ACTIVATED */]: 'activated hook',\n [\"da\" /* LifecycleHooks.DEACTIVATED */]: 'deactivated hook',\n [\"ec\" /* LifecycleHooks.ERROR_CAPTURED */]: 'errorCaptured hook',\n [\"rtc\" /* LifecycleHooks.RENDER_TRACKED */]: 'renderTracked hook',\n [\"rtg\" /* LifecycleHooks.RENDER_TRIGGERED */]: 'renderTriggered hook',\n [0 /* ErrorCodes.SETUP_FUNCTION */]: 'setup function',\n [1 /* ErrorCodes.RENDER_FUNCTION */]: 'render function',\n [2 /* ErrorCodes.WATCH_GETTER */]: 'watcher getter',\n [3 /* ErrorCodes.WATCH_CALLBACK */]: 'watcher callback',\n [4 /* ErrorCodes.WATCH_CLEANUP */]: 'watcher cleanup function',\n [5 /* ErrorCodes.NATIVE_EVENT_HANDLER */]: 'native event handler',\n [6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */]: 'component event handler',\n [7 /* ErrorCodes.VNODE_HOOK */]: 'vnode hook',\n [8 /* ErrorCodes.DIRECTIVE_HOOK */]: 'directive hook',\n [9 /* ErrorCodes.TRANSITION_HOOK */]: 'transition hook',\n [10 /* ErrorCodes.APP_ERROR_HANDLER */]: 'app errorHandler',\n [11 /* ErrorCodes.APP_WARN_HANDLER */]: 'app warnHandler',\n [12 /* ErrorCodes.FUNCTION_REF */]: 'ref function',\n [13 /* ErrorCodes.ASYNC_COMPONENT_LOADER */]: 'async component loader',\n [14 /* ErrorCodes.SCHEDULER */]: 'scheduler flush. This is likely a Vue internals bug. ' +\n 'Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core'\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n let res;\n try {\n res = args ? fn(...args) : fn();\n }\n catch (err) {\n handleError(err, instance, type);\n }\n return res;\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch(err => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n if (instance) {\n let cur = instance.parent;\n // the exposed instance is the render proxy to keep it consistent with 2.x\n const exposedInstance = instance.proxy;\n // in production the hook receives only the error code\n const errorInfo = (process.env.NODE_ENV !== 'production') ? ErrorTypeStrings[type] : type;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n // app-level handling\n const appErrorHandler = instance.appContext.config.errorHandler;\n if (appErrorHandler) {\n callWithErrorHandling(appErrorHandler, null, 10 /* ErrorCodes.APP_ERROR_HANDLER */, [err, exposedInstance, errorInfo]);\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev);\n}\nfunction logError(err, type, contextVNode, throwInDev = true) {\n if ((process.env.NODE_ENV !== 'production')) {\n const info = ErrorTypeStrings[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n // crash in dev by default so it's more noticeable\n if (throwInDev) {\n throw err;\n }\n else {\n console.error(err);\n }\n }\n else {\n // recover in prod to reduce the impact on end-user\n console.error(err);\n }\n}\n\nlet isFlushing = false;\nlet isFlushPending = false;\nconst queue = [];\nlet flushIndex = 0;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /*#__PURE__*/ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\n// #2768\n// Use binary-search to find a suitable position in the queue,\n// so that the queue maintains the increasing order of job's id,\n// which can prevent the job from being skipped and also can avoid repeated patching.\nfunction findInsertionIndex(id) {\n // the start index should be `flushIndex + 1`\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = (start + end) >>> 1;\n const middleJobId = getId(queue[middle]);\n middleJobId < id ? (start = middle + 1) : (end = middle);\n }\n return start;\n}\nfunction queueJob(job) {\n // the dedupe search uses the startIndex argument of Array.includes()\n // by default the search index includes the current job that is being run\n // so it cannot recursively trigger itself again.\n // if the job is a watch() callback, the search will start with a +1 index to\n // allow it recursively trigger itself - it is the user's responsibility to\n // ensure it doesn't end up in an infinite loop.\n if (!queue.length ||\n !queue.includes(job, isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex)) {\n if (job.id == null) {\n queue.push(job);\n }\n else {\n queue.splice(findInsertionIndex(job.id), 0, job);\n }\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!isFlushing && !isFlushPending) {\n isFlushPending = true;\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction invalidateJob(job) {\n const i = queue.indexOf(job);\n if (i > flushIndex) {\n queue.splice(i, 1);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (!activePostFlushCbs ||\n !activePostFlushCbs.includes(cb, cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex)) {\n pendingPostFlushCbs.push(cb);\n }\n }\n else {\n // if cb is an array, it is a component lifecycle hook which can only be\n // triggered by a job, which is already deduped in the main queue, so\n // we can skip duplicate check here to improve perf\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(seen, \n// if currently flushing, skip the current job itself\ni = isFlushing ? flushIndex + 1 : 0) {\n if ((process.env.NODE_ENV !== 'production')) {\n seen = seen || new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.pre) {\n if ((process.env.NODE_ENV !== 'production') && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n cb();\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)];\n pendingPostFlushCbs.length = 0;\n // #1947 already has active queue, nested flushPostFlushCbs call\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if ((process.env.NODE_ENV !== 'production')) {\n seen = seen || new Map();\n }\n activePostFlushCbs.sort((a, b) => getId(a) - getId(b));\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n if ((process.env.NODE_ENV !== 'production') &&\n checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {\n continue;\n }\n activePostFlushCbs[postFlushIndex]();\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? Infinity : job.id;\nconst comparator = (a, b) => {\n const diff = getId(a) - getId(b);\n if (diff === 0) {\n if (a.pre && !b.pre)\n return -1;\n if (b.pre && !a.pre)\n return 1;\n }\n return diff;\n};\nfunction flushJobs(seen) {\n isFlushPending = false;\n isFlushing = true;\n if ((process.env.NODE_ENV !== 'production')) {\n seen = seen || new Map();\n }\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child so its render effect will have smaller\n // priority number)\n // 2. If a component is unmounted during a parent component's update,\n // its update can be skipped.\n queue.sort(comparator);\n // conditional usage of checkRecursiveUpdate must be determined out of\n // try ... catch block since Rollup by default de-optimizes treeshaking\n // inside try-catch. This can leave all warning code unshaked. Although\n // they would get eventually shaken by a minifier like terser, some minifiers\n // would fail to do that (e.g. https://github.com/evanw/esbuild/issues/1610)\n const check = (process.env.NODE_ENV !== 'production')\n ? (job) => checkRecursiveUpdates(seen, job)\n : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && job.active !== false) {\n if ((process.env.NODE_ENV !== 'production') && check(job)) {\n continue;\n }\n // console.log(`running:`, job.id)\n callWithErrorHandling(job, null, 14 /* ErrorCodes.SCHEDULER */);\n }\n }\n }\n finally {\n flushIndex = 0;\n queue.length = 0;\n flushPostFlushCbs(seen);\n isFlushing = false;\n currentFlushPromise = null;\n // some postFlushCb queued jobs!\n // keep flushing until it drains.\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n if (!seen.has(fn)) {\n seen.set(fn, 1);\n }\n else {\n const count = seen.get(fn);\n if (count > RECURSION_LIMIT) {\n const instance = fn.ownerInstance;\n const componentName = instance && getComponentName(instance.type);\n warn(`Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. ` +\n `This means you have a reactive effect that is mutating its own ` +\n `dependencies and thus recursively triggering itself. Possible sources ` +\n `include component template, render function, updated hook or ` +\n `watcher source function.`);\n return true;\n }\n else {\n seen.set(fn, count + 1);\n }\n }\n}\n\n/* eslint-disable no-restricted-globals */\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = new Set();\n// Expose the HMR runtime on the global object\n// This makes it entirely tree-shakable without polluting the exports and makes\n// it easier to be used in toolings like vue-loader\n// Note: for a component to be eligible for HMR it also needs the __hmrId option\n// to be set so that its instances can be registered / removed.\nif ((process.env.NODE_ENV !== 'production')) {\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n // update initial record (for not-yet-rendered component)\n record.initialDef.render = newRender;\n [...record.instances].forEach(instance => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n // this flag forces child components with slot content to update\n isHmrUpdating = true;\n instance.update();\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record)\n return;\n newComp = normalizeClassComponent(newComp);\n // update initial def (for not-yet-rendered components)\n updateComponentDef(record.initialDef, newComp);\n // create a snapshot which avoids the set being mutated during updates\n const instances = [...record.instances];\n for (const instance of instances) {\n const oldComp = normalizeClassComponent(instance.type);\n if (!hmrDirtyComponents.has(oldComp)) {\n // 1. Update existing comp definition to match new one\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n // 2. mark definition dirty. This forces the renderer to replace the\n // component on patch.\n hmrDirtyComponents.add(oldComp);\n }\n // 3. invalidate options resolution cache\n instance.appContext.optionsCache.delete(instance.type);\n // 4. actually update\n if (instance.ceReload) {\n // custom element\n hmrDirtyComponents.add(oldComp);\n instance.ceReload(newComp.styles);\n hmrDirtyComponents.delete(oldComp);\n }\n else if (instance.parent) {\n // 4. Force the parent instance to re-render. This will cause all updated\n // components to be unmounted and re-mounted. Queue the update so that we\n // don't end up forcing the same parent to re-render multiple times.\n queueJob(instance.parent.update);\n }\n else if (instance.appContext.reload) {\n // root instance mounted via createApp() has a reload method\n instance.appContext.reload();\n }\n else if (typeof window !== 'undefined') {\n // root instance inside tree created via raw render(). Force reload.\n window.location.reload();\n }\n else {\n console.warn('[HMR] Root or manually mounted instance modified. Full reload required.');\n }\n }\n // 5. make sure to cleanup dirty hmr components after update\n queuePostFlushCb(() => {\n for (const instance of instances) {\n hmrDirtyComponents.delete(normalizeClassComponent(instance.type));\n }\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n extend(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== '__file' && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n }\n catch (e) {\n console.error(e);\n console.warn(`[HMR] Something went wrong during Vue component hot-reload. ` +\n `Full reload required.`);\n }\n };\n}\n\nlet devtools;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit(event, ...args) {\n if (devtools) {\n devtools.emit(event, ...args);\n }\n else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook(hook, target) {\n var _a, _b;\n devtools = hook;\n if (devtools) {\n devtools.enabled = true;\n buffer.forEach(({ event, args }) => devtools.emit(event, ...args));\n buffer = [];\n }\n else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== 'undefined' &&\n // some envs mock window but not fully\n window.HTMLElement &&\n // also exclude jsdom\n !((_b = (_a = window.navigator) === null || _a === void 0 ? void 0 : _a.userAgent) === null || _b === void 0 ? void 0 : _b.includes('jsdom'))) {\n const replay = (target.__VUE_DEVTOOLS_HOOK_REPLAY__ =\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []);\n replay.push((newHook) => {\n setDevtoolsHook(newHook, target);\n });\n // clear buffer after 3s - the user probably doesn't have devtools installed\n // at all, and keeping the buffer will cause memory leaks (#4738)\n setTimeout(() => {\n if (!devtools) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3000);\n }\n else {\n // non-browser env, assume not installed\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit(\"app:init\" /* DevtoolsHooks.APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit(\"app:unmount\" /* DevtoolsHooks.APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /*#__PURE__*/ createDevtoolsComponentHook(\"component:added\" /* DevtoolsHooks.COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = \n/*#__PURE__*/ createDevtoolsComponentHook(\"component:updated\" /* DevtoolsHooks.COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /*#__PURE__*/ createDevtoolsComponentHook(\"component:removed\" /* DevtoolsHooks.COMPONENT_REMOVED */);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools &&\n typeof devtools.cleanupBuffer === 'function' &&\n // remove the component if it wasn't buffered\n !devtools.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit(hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : undefined, component);\n };\n}\nconst devtoolsPerfStart = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:start\" /* DevtoolsHooks.PERFORMANCE_START */);\nconst devtoolsPerfEnd = /*#__PURE__*/ createDevtoolsPerformanceHook(\"perf:end\" /* DevtoolsHooks.PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit(\"component:emit\" /* DevtoolsHooks.COMPONENT_EMIT */, component.appContext.app, component, event, params);\n}\n\nfunction emit$1(instance, event, ...rawArgs) {\n if (instance.isUnmounted)\n return;\n const props = instance.vnode.props || EMPTY_OBJ;\n if ((process.env.NODE_ENV !== 'production')) {\n const { emitsOptions, propsOptions: [propsOptions] } = instance;\n if (emitsOptions) {\n if (!(event in emitsOptions) &&\n !(false )) {\n if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {\n warn(`Component emitted event \"${event}\" but it is neither declared in ` +\n `the emits option nor as an \"${toHandlerKey(event)}\" prop.`);\n }\n }\n else {\n const validator = emitsOptions[event];\n if (isFunction(validator)) {\n const isValid = validator(...rawArgs);\n if (!isValid) {\n warn(`Invalid event arguments: event validation failed for event \"${event}\".`);\n }\n }\n }\n }\n }\n let args = rawArgs;\n const isModelListener = event.startsWith('update:');\n // for v-model update:xxx events, apply modifiers on args\n const modelArg = isModelListener && event.slice(7);\n if (modelArg && modelArg in props) {\n const modifiersKey = `${modelArg === 'modelValue' ? 'model' : modelArg}Modifiers`;\n const { number, trim } = props[modifiersKey] || EMPTY_OBJ;\n if (trim) {\n args = rawArgs.map(a => (isString(a) ? a.trim() : a));\n }\n if (number) {\n args = rawArgs.map(toNumber);\n }\n }\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentEmit(instance, event, args);\n }\n if ((process.env.NODE_ENV !== 'production')) {\n const lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n warn(`Event \"${lowerCaseEvent}\" is emitted in component ` +\n `${formatComponentName(instance, instance.type)} but the handler is registered for \"${event}\". ` +\n `Note that HTML attributes are case-insensitive and you cannot use ` +\n `v-on to listen to camelCase events when using in-DOM templates. ` +\n `You should probably use \"${hyphenate(event)}\" instead of \"${event}\".`);\n }\n }\n let handlerName;\n let handler = props[(handlerName = toHandlerKey(event))] ||\n // also try camelCase event handler (#2249)\n props[(handlerName = toHandlerKey(camelize(event)))];\n // for v-model update:xxx events, also trigger kebab-case equivalent\n // for props passed via kebab-case\n if (!handler && isModelListener) {\n handler = props[(handlerName = toHandlerKey(hyphenate(event)))];\n }\n if (handler) {\n callWithAsyncErrorHandling(handler, instance, 6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */, args);\n }\n const onceHandler = props[handlerName + `Once`];\n if (onceHandler) {\n if (!instance.emitted) {\n instance.emitted = {};\n }\n else if (instance.emitted[handlerName]) {\n return;\n }\n instance.emitted[handlerName] = true;\n callWithAsyncErrorHandling(onceHandler, instance, 6 /* ErrorCodes.COMPONENT_EVENT_HANDLER */, args);\n }\n}\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n const cache = appContext.emitsCache;\n const cached = cache.get(comp);\n if (cached !== undefined) {\n return cached;\n }\n const raw = comp.emits;\n let normalized = {};\n // apply mixin/extends props\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendEmits = (raw) => {\n const normalizedFromExtend = normalizeEmitsOptions(raw, appContext, true);\n if (normalizedFromExtend) {\n hasExtends = true;\n extend(normalized, normalizedFromExtend);\n }\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendEmits);\n }\n if (comp.extends) {\n extendEmits(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendEmits);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, null);\n }\n return null;\n }\n if (isArray(raw)) {\n raw.forEach(key => (normalized[key] = null));\n }\n else {\n extend(normalized, raw);\n }\n if (isObject(comp)) {\n cache.set(comp, normalized);\n }\n return normalized;\n}\n// Check if an incoming prop key is a declared emit event listener.\n// e.g. With `emits: { click: null }`, props named `onClick` and `onclick` are\n// both considered matched listeners.\nfunction isEmitListener(options, key) {\n if (!options || !isOn(key)) {\n return false;\n }\n key = key.slice(2).replace(/Once$/, '');\n return (hasOwn(options, key[0].toLowerCase() + key.slice(1)) ||\n hasOwn(options, hyphenate(key)) ||\n hasOwn(options, key));\n}\n\n/**\n * mark the current rendering instance for asset resolution (e.g.\n * resolveComponent, resolveDirective) during render\n */\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\n/**\n * Note: rendering calls maybe nested. The function returns the parent rendering\n * instance if present, which should be restored after the render is done:\n *\n * ```js\n * const prev = setCurrentRenderingInstance(i)\n * // ...render\n * setCurrentRenderingInstance(prev)\n * ```\n */\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = (instance && instance.type.__scopeId) || null;\n return prev;\n}\n/**\n * Set scope id when creating hoisted vnodes.\n * @private compiler helper\n */\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\n/**\n * Technically we no longer need this after 3.0.8 but we need to keep the same\n * API for backwards compat w/ code generated by compilers.\n * @private\n */\nfunction popScopeId() {\n currentScopeId = null;\n}\n/**\n * Only for backwards compat\n * @private\n */\nconst withScopeId = (_id) => withCtx;\n/**\n * Wrap a slot function to memoize current rendering instance\n * @private compiler helper\n */\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot // false only\n) {\n if (!ctx)\n return fn;\n // already normalized\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n // If a user calls a compiled slot inside a template expression (#1745), it\n // can mess up block tracking, so by default we disable block tracking and\n // force bail out when invoking a compiled slot (indicated by the ._d flag).\n // This isn't necessary if rendering a compiled `<slot>`, so we flip the\n // ._d flag off when invoking the wrapped fn inside `renderSlot`.\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n let res;\n try {\n res = fn(...args);\n }\n finally {\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n // mark normalized to avoid duplicated wrapping\n renderFnWithContext._n = true;\n // mark this as compiled by default\n // this is used in vnode.ts -> normalizeChildren() to set the slot\n // rendering flag.\n renderFnWithContext._c = true;\n // disable block tracking by default\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\n/**\n * dev only flag to track whether $attrs was used during render.\n * If $attrs was used during render then the warning for failed attrs\n * fallthrough can be suppressed.\n */\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx, inheritAttrs } = instance;\n let result;\n let fallthroughAttrs;\n const prev = setCurrentRenderingInstance(instance);\n if ((process.env.NODE_ENV !== 'production')) {\n accessedAttrs = false;\n }\n try {\n if (vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */) {\n // withProxy is a proxy with a different `has` trap only for\n // runtime-compiled render functions using `with` block.\n const proxyToUse = withProxy || proxy;\n result = normalizeVNode(render.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx));\n fallthroughAttrs = attrs;\n }\n else {\n // functional\n const render = Component;\n // in dev, mark attrs accessed if optional props (attrs === props)\n if ((process.env.NODE_ENV !== 'production') && attrs === props) {\n markAttrsAccessed();\n }\n result = normalizeVNode(render.length > 1\n ? render(props, (process.env.NODE_ENV !== 'production')\n ? {\n get attrs() {\n markAttrsAccessed();\n return attrs;\n },\n slots,\n emit\n }\n : { attrs, slots, emit })\n : render(props, null /* we know it doesn't need it */));\n fallthroughAttrs = Component.props\n ? attrs\n : getFunctionalFallthrough(attrs);\n }\n }\n catch (err) {\n blockStack.length = 0;\n handleError(err, instance, 1 /* ErrorCodes.RENDER_FUNCTION */);\n result = createVNode(Comment);\n }\n // attr merging\n // in dev mode, comments are preserved, and it's possible for a template\n // to have comments along side the root element which makes it a fragment\n let root = result;\n let setRoot = undefined;\n if ((process.env.NODE_ENV !== 'production') &&\n result.patchFlag > 0 &&\n result.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */) {\n [root, setRoot] = getChildRoot(result);\n }\n if (fallthroughAttrs && inheritAttrs !== false) {\n const keys = Object.keys(fallthroughAttrs);\n const { shapeFlag } = root;\n if (keys.length) {\n if (shapeFlag & (1 /* ShapeFlags.ELEMENT */ | 6 /* ShapeFlags.COMPONENT */)) {\n if (propsOptions && keys.some(isModelListener)) {\n // If a v-model listener (onUpdate:xxx) has a corresponding declared\n // prop, it indicates this component expects to handle v-model and\n // it should not fallthrough.\n // related: #1543, #1643, #1989\n fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);\n }\n root = cloneVNode(root, fallthroughAttrs);\n }\n else if ((process.env.NODE_ENV !== 'production') && !accessedAttrs && root.type !== Comment) {\n const allAttrs = Object.keys(attrs);\n const eventAttrs = [];\n const extraAttrs = [];\n for (let i = 0, l = allAttrs.length; i < l; i++) {\n const key = allAttrs[i];\n if (isOn(key)) {\n // ignore v-model handlers when they fail to fallthrough\n if (!isModelListener(key)) {\n // remove `on`, lowercase first letter to reflect event casing\n // accurately\n eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n }\n }\n else {\n extraAttrs.push(key);\n }\n }\n if (extraAttrs.length) {\n warn(`Extraneous non-props attributes (` +\n `${extraAttrs.join(', ')}) ` +\n `were passed to component but could not be automatically inherited ` +\n `because component renders fragment or text root nodes.`);\n }\n if (eventAttrs.length) {\n warn(`Extraneous non-emits event listeners (` +\n `${eventAttrs.join(', ')}) ` +\n `were passed to component but could not be automatically inherited ` +\n `because component renders fragment or text root nodes. ` +\n `If the listener is intended to be a component custom event listener only, ` +\n `declare it using the \"emits\" option.`);\n }\n }\n }\n }\n // inherit directives\n if (vnode.dirs) {\n if ((process.env.NODE_ENV !== 'production') && !isElementRoot(root)) {\n warn(`Runtime directive used on component with non-element root node. ` +\n `The directives will not function as intended.`);\n }\n // clone before mutating since the root may be a hoisted vnode\n root = cloneVNode(root);\n root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n }\n // inherit transition data\n if (vnode.transition) {\n if ((process.env.NODE_ENV !== 'production') && !isElementRoot(root)) {\n warn(`Component inside <Transition> renders non-element root node ` +\n `that cannot be animated.`);\n }\n root.transition = vnode.transition;\n }\n if ((process.env.NODE_ENV !== 'production') && setRoot) {\n setRoot(root);\n }\n else {\n result = root;\n }\n setCurrentRenderingInstance(prev);\n return result;\n}\n/**\n * dev only\n * In dev mode, template root level comments are rendered, which turns the\n * template into a fragment root, but we need to locate the single element\n * root for attrs and scope id processing.\n */\nconst getChildRoot = (vnode) => {\n const rawChildren = vnode.children;\n const dynamicChildren = vnode.dynamicChildren;\n const childRoot = filterSingleRoot(rawChildren);\n if (!childRoot) {\n return [vnode, undefined];\n }\n const index = rawChildren.indexOf(childRoot);\n const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n const setRoot = (updatedRoot) => {\n rawChildren[index] = updatedRoot;\n if (dynamicChildren) {\n if (dynamicIndex > -1) {\n dynamicChildren[dynamicIndex] = updatedRoot;\n }\n else if (updatedRoot.patchFlag > 0) {\n vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n }\n }\n };\n return [normalizeVNode(childRoot), setRoot];\n};\nfunction filterSingleRoot(children) {\n let singleRoot;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n // ignore user comment\n if (child.type !== Comment || child.children === 'v-if') {\n if (singleRoot) {\n // has more than 1 non-comment child, return now\n return;\n }\n else {\n singleRoot = child;\n }\n }\n }\n else {\n return;\n }\n }\n return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n let res;\n for (const key in attrs) {\n if (key === 'class' || key === 'style' || isOn(key)) {\n (res || (res = {}))[key] = attrs[key];\n }\n }\n return res;\n};\nconst filterModelListeners = (attrs, props) => {\n const res = {};\n for (const key in attrs) {\n if (!isModelListener(key) || !(key.slice(9) in props)) {\n res[key] = attrs[key];\n }\n }\n return res;\n};\nconst isElementRoot = (vnode) => {\n return (vnode.shapeFlag & (6 /* ShapeFlags.COMPONENT */ | 1 /* ShapeFlags.ELEMENT */) ||\n vnode.type === Comment // potential v-if branch switch\n );\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n const { props: prevProps, children: prevChildren, component } = prevVNode;\n const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n const emits = component.emitsOptions;\n // Parent component's render function was hot-updated. Since this may have\n // caused the child component's slots content to have changed, we need to\n // force the child to update as well.\n if ((process.env.NODE_ENV !== 'production') && (prevChildren || nextChildren) && isHmrUpdating) {\n return true;\n }\n // force child update for runtime directive or transition on component vnode.\n if (nextVNode.dirs || nextVNode.transition) {\n return true;\n }\n if (optimized && patchFlag >= 0) {\n if (patchFlag & 1024 /* PatchFlags.DYNAMIC_SLOTS */) {\n // slot content that references values that might have changed,\n // e.g. in a v-for\n return true;\n }\n if (patchFlag & 16 /* PatchFlags.FULL_PROPS */) {\n if (!prevProps) {\n return !!nextProps;\n }\n // presence of this flag indicates props are always non-null\n return hasPropsChanged(prevProps, nextProps, emits);\n }\n else if (patchFlag & 8 /* PatchFlags.PROPS */) {\n const dynamicProps = nextVNode.dynamicProps;\n for (let i = 0; i < dynamicProps.length; i++) {\n const key = dynamicProps[i];\n if (nextProps[key] !== prevProps[key] &&\n !isEmitListener(emits, key)) {\n return true;\n }\n }\n }\n }\n else {\n // this path is only taken by manually written render functions\n // so presence of any children leads to a forced update\n if (prevChildren || nextChildren) {\n if (!nextChildren || !nextChildren.$stable) {\n return true;\n }\n }\n if (prevProps === nextProps) {\n return false;\n }\n if (!prevProps) {\n return !!nextProps;\n }\n if (!nextProps) {\n return true;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n }\n return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n const nextKeys = Object.keys(nextProps);\n if (nextKeys.length !== Object.keys(prevProps).length) {\n return true;\n }\n for (let i = 0; i < nextKeys.length; i++) {\n const key = nextKeys[i];\n if (nextProps[key] !== prevProps[key] &&\n !isEmitListener(emitsOptions, key)) {\n return true;\n }\n }\n return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el // HostNode\n) {\n while (parent && parent.subTree === vnode) {\n (vnode = parent.vnode).el = el;\n parent = parent.parent;\n }\n}\n\nconst isSuspense = (type) => type.__isSuspense;\n// Suspense exposes a component-like API, and is treated like a component\n// in the compiler, but internally it's a special built-in type that hooks\n// directly into the renderer.\nconst SuspenseImpl = {\n name: 'Suspense',\n // In order to make Suspense tree-shakable, we need to avoid importing it\n // directly in the renderer. The renderer checks for the __isSuspense flag\n // on a vnode's type and calls the `process` method, passing in renderer\n // internals.\n __isSuspense: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, \n // platform-specific impl passed from renderer\n rendererInternals) {\n if (n1 == null) {\n mountSuspense(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals);\n }\n else {\n patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, rendererInternals);\n }\n },\n hydrate: hydrateSuspense,\n create: createSuspenseBoundary,\n normalize: normalizeSuspenseChildren\n};\n// Force-casted public typing for h and TSX props inference\nconst Suspense = (SuspenseImpl\n );\nfunction triggerEvent(vnode, name) {\n const eventListener = vnode.props && vnode.props[name];\n if (isFunction(eventListener)) {\n eventListener();\n }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) {\n const { p: patch, o: { createElement } } = rendererInternals;\n const hiddenContainer = createElement('div');\n const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals));\n // start mounting the content subtree in an off-dom container\n patch(null, (suspense.pendingBranch = vnode.ssContent), hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds);\n // now check if we have encountered any async deps\n if (suspense.deps > 0) {\n // has async\n // invoke @fallback event\n triggerEvent(vnode, 'onPending');\n triggerEvent(vnode, 'onFallback');\n // mount the fallback tree\n patch(null, vnode.ssFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n isSVG, slotScopeIds);\n setActiveBranch(suspense, vnode.ssFallback);\n }\n else {\n // Suspense has no async deps. Just resolve.\n suspense.resolve();\n }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n const suspense = (n2.suspense = n1.suspense);\n suspense.vnode = n2;\n n2.el = n1.el;\n const newBranch = n2.ssContent;\n const newFallback = n2.ssFallback;\n const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n if (pendingBranch) {\n suspense.pendingBranch = newBranch;\n if (isSameVNodeType(newBranch, pendingBranch)) {\n // same root type but content may have changed.\n patch(pendingBranch, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n else if (isInFallback) {\n patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n isSVG, slotScopeIds, optimized);\n setActiveBranch(suspense, newFallback);\n }\n }\n else {\n // toggled before pending tree is resolved\n suspense.pendingId++;\n if (isHydrating) {\n // if toggled before hydration is finished, the current DOM tree is\n // no longer valid. set it as the active branch so it will be unmounted\n // when resolved\n suspense.isHydrating = false;\n suspense.activeBranch = pendingBranch;\n }\n else {\n unmount(pendingBranch, parentComponent, suspense);\n }\n // increment pending ID. this is used to invalidate async callbacks\n // reset suspense state\n suspense.deps = 0;\n // discard effects from pending branch\n suspense.effects.length = 0;\n // discard previous container\n suspense.hiddenContainer = createElement('div');\n if (isInFallback) {\n // already in fallback state\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n else {\n patch(activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n isSVG, slotScopeIds, optimized);\n setActiveBranch(suspense, newFallback);\n }\n }\n else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n // toggled \"back\" to current active branch\n patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n // force resolve\n suspense.resolve(true);\n }\n else {\n // switched to a 3rd branch\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n }\n }\n }\n else {\n if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n // root did not change, just normal patch\n patch(activeBranch, newBranch, container, anchor, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n setActiveBranch(suspense, newBranch);\n }\n else {\n // root node toggled\n // invoke @pending event\n triggerEvent(n2, 'onPending');\n // mount pending branch in off-dom container\n suspense.pendingBranch = newBranch;\n suspense.pendingId++;\n patch(null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, isSVG, slotScopeIds, optimized);\n if (suspense.deps <= 0) {\n // incoming branch has no async deps, resolve now.\n suspense.resolve();\n }\n else {\n const { timeout, pendingId } = suspense;\n if (timeout > 0) {\n setTimeout(() => {\n if (suspense.pendingId === pendingId) {\n suspense.fallback(newFallback);\n }\n }, timeout);\n }\n else if (timeout === 0) {\n suspense.fallback(newFallback);\n }\n }\n }\n }\n}\nlet hasWarned = false;\nfunction createSuspenseBoundary(vnode, parent, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n /* istanbul ignore if */\n if ((process.env.NODE_ENV !== 'production') && !false && !hasWarned) {\n hasWarned = true;\n // @ts-ignore `console.info` cannot be null error\n console[console.info ? 'info' : 'log'](`<Suspense> is an experimental feature and its API will likely change.`);\n }\n const { p: patch, m: move, um: unmount, n: next, o: { parentNode, remove } } = rendererInternals;\n const timeout = toNumber(vnode.props && vnode.props.timeout);\n const suspense = {\n vnode,\n parent,\n parentComponent,\n isSVG,\n container,\n hiddenContainer,\n anchor,\n deps: 0,\n pendingId: 0,\n timeout: typeof timeout === 'number' ? timeout : -1,\n activeBranch: null,\n pendingBranch: null,\n isInFallback: true,\n isHydrating,\n isUnmounted: false,\n effects: [],\n resolve(resume = false) {\n if ((process.env.NODE_ENV !== 'production')) {\n if (!resume && !suspense.pendingBranch) {\n throw new Error(`suspense.resolve() is called without a pending branch.`);\n }\n if (suspense.isUnmounted) {\n throw new Error(`suspense.resolve() is called on an already unmounted suspense boundary.`);\n }\n }\n const { vnode, activeBranch, pendingBranch, pendingId, effects, parentComponent, container } = suspense;\n if (suspense.isHydrating) {\n suspense.isHydrating = false;\n }\n else if (!resume) {\n const delayEnter = activeBranch &&\n pendingBranch.transition &&\n pendingBranch.transition.mode === 'out-in';\n if (delayEnter) {\n activeBranch.transition.afterLeave = () => {\n if (pendingId === suspense.pendingId) {\n move(pendingBranch, container, anchor, 0 /* MoveType.ENTER */);\n }\n };\n }\n // this is initial anchor on mount\n let { anchor } = suspense;\n // unmount current active tree\n if (activeBranch) {\n // if the fallback tree was mounted, it may have been moved\n // as part of a parent suspense. get the latest anchor for insertion\n anchor = next(activeBranch);\n unmount(activeBranch, parentComponent, suspense, true);\n }\n if (!delayEnter) {\n // move content from off-dom container to actual container\n move(pendingBranch, container, anchor, 0 /* MoveType.ENTER */);\n }\n }\n setActiveBranch(suspense, pendingBranch);\n suspense.pendingBranch = null;\n suspense.isInFallback = false;\n // flush buffered effects\n // check if there is a pending parent suspense\n let parent = suspense.parent;\n let hasUnresolvedAncestor = false;\n while (parent) {\n if (parent.pendingBranch) {\n // found a pending parent suspense, merge buffered post jobs\n // into that parent\n parent.effects.push(...effects);\n hasUnresolvedAncestor = true;\n break;\n }\n parent = parent.parent;\n }\n // no pending parent suspense, flush all jobs\n if (!hasUnresolvedAncestor) {\n queuePostFlushCb(effects);\n }\n suspense.effects = [];\n // invoke @resolve event\n triggerEvent(vnode, 'onResolve');\n },\n fallback(fallbackVNode) {\n if (!suspense.pendingBranch) {\n return;\n }\n const { vnode, activeBranch, parentComponent, container, isSVG } = suspense;\n // invoke @fallback event\n triggerEvent(vnode, 'onFallback');\n const anchor = next(activeBranch);\n const mountFallback = () => {\n if (!suspense.isInFallback) {\n return;\n }\n // mount the fallback tree\n patch(null, fallbackVNode, container, anchor, parentComponent, null, // fallback tree will not have suspense context\n isSVG, slotScopeIds, optimized);\n setActiveBranch(suspense, fallbackVNode);\n };\n const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === 'out-in';\n if (delayEnter) {\n activeBranch.transition.afterLeave = mountFallback;\n }\n suspense.isInFallback = true;\n // unmount current active branch\n unmount(activeBranch, parentComponent, null, // no suspense so unmount hooks fire now\n true // shouldRemove\n );\n if (!delayEnter) {\n mountFallback();\n }\n },\n move(container, anchor, type) {\n suspense.activeBranch &&\n move(suspense.activeBranch, container, anchor, type);\n suspense.container = container;\n },\n next() {\n return suspense.activeBranch && next(suspense.activeBranch);\n },\n registerDep(instance, setupRenderEffect) {\n const isInPendingSuspense = !!suspense.pendingBranch;\n if (isInPendingSuspense) {\n suspense.deps++;\n }\n const hydratedEl = instance.vnode.el;\n instance\n .asyncDep.catch(err => {\n handleError(err, instance, 0 /* ErrorCodes.SETUP_FUNCTION */);\n })\n .then(asyncSetupResult => {\n // retry when the setup() promise resolves.\n // component may have been unmounted before resolve.\n if (instance.isUnmounted ||\n suspense.isUnmounted ||\n suspense.pendingId !== instance.suspenseId) {\n return;\n }\n // retry from this component\n instance.asyncResolved = true;\n const { vnode } = instance;\n if ((process.env.NODE_ENV !== 'production')) {\n pushWarningContext(vnode);\n }\n handleSetupResult(instance, asyncSetupResult, false);\n if (hydratedEl) {\n // vnode may have been replaced if an update happened before the\n // async dep is resolved.\n vnode.el = hydratedEl;\n }\n const placeholder = !hydratedEl && instance.subTree.el;\n setupRenderEffect(instance, vnode, \n // component may have been moved before resolve.\n // if this is not a hydration, instance.subTree will be the comment\n // placeholder.\n parentNode(hydratedEl || instance.subTree.el), \n // anchor will not be used if this is hydration, so only need to\n // consider the comment placeholder case.\n hydratedEl ? null : next(instance.subTree), suspense, isSVG, optimized);\n if (placeholder) {\n remove(placeholder);\n }\n updateHOCHostEl(instance, vnode.el);\n if ((process.env.NODE_ENV !== 'production')) {\n popWarningContext();\n }\n // only decrease deps count if suspense is not already resolved\n if (isInPendingSuspense && --suspense.deps === 0) {\n suspense.resolve();\n }\n });\n },\n unmount(parentSuspense, doRemove) {\n suspense.isUnmounted = true;\n if (suspense.activeBranch) {\n unmount(suspense.activeBranch, parentComponent, parentSuspense, doRemove);\n }\n if (suspense.pendingBranch) {\n unmount(suspense.pendingBranch, parentComponent, parentSuspense, doRemove);\n }\n }\n };\n return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n /* eslint-disable no-restricted-globals */\n const suspense = (vnode.suspense = createSuspenseBoundary(vnode, parentSuspense, parentComponent, node.parentNode, document.createElement('div'), null, isSVG, slotScopeIds, optimized, rendererInternals, true /* hydrating */));\n // there are two possible scenarios for server-rendered suspense:\n // - success: ssr content should be fully resolved\n // - failure: ssr content should be the fallback branch.\n // however, on the client we don't really know if it has failed or not\n // attempt to hydrate the DOM assuming it has succeeded, but we still\n // need to construct a suspense boundary first\n const result = hydrateNode(node, (suspense.pendingBranch = vnode.ssContent), parentComponent, suspense, slotScopeIds, optimized);\n if (suspense.deps === 0) {\n suspense.resolve();\n }\n return result;\n /* eslint-enable no-restricted-globals */\n}\nfunction normalizeSuspenseChildren(vnode) {\n const { shapeFlag, children } = vnode;\n const isSlotChildren = shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */;\n vnode.ssContent = normalizeSuspenseSlot(isSlotChildren ? children.default : children);\n vnode.ssFallback = isSlotChildren\n ? normalizeSuspenseSlot(children.fallback)\n : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n let block;\n if (isFunction(s)) {\n const trackBlock = isBlockTreeEnabled && s._c;\n if (trackBlock) {\n // disableTracking: false\n // allow block tracking for compiled slots\n // (see ./componentRenderContext.ts)\n s._d = false;\n openBlock();\n }\n s = s();\n if (trackBlock) {\n s._d = true;\n block = currentBlock;\n closeBlock();\n }\n }\n if (isArray(s)) {\n const singleChild = filterSingleRoot(s);\n if ((process.env.NODE_ENV !== 'production') && !singleChild) {\n warn(`<Suspense> slots expect a single root node.`);\n }\n s = singleChild;\n }\n s = normalizeVNode(s);\n if (block && !s.dynamicChildren) {\n s.dynamicChildren = block.filter(c => c !== s);\n }\n return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n if (suspense && suspense.pendingBranch) {\n if (isArray(fn)) {\n suspense.effects.push(...fn);\n }\n else {\n suspense.effects.push(fn);\n }\n }\n else {\n queuePostFlushCb(fn);\n }\n}\nfunction setActiveBranch(suspense, branch) {\n suspense.activeBranch = branch;\n const { vnode, parentComponent } = suspense;\n const el = (vnode.el = branch.el);\n // in case suspense is the root node of a component,\n // recursively update the HOC el\n if (parentComponent && parentComponent.subTree === vnode) {\n parentComponent.vnode.el = el;\n updateHOCHostEl(parentComponent, el);\n }\n}\n\nfunction provide(key, value) {\n if (!currentInstance) {\n if ((process.env.NODE_ENV !== 'production')) {\n warn(`provide() can only be used inside setup().`);\n }\n }\n else {\n let provides = currentInstance.provides;\n // by default an instance inherits its parent's provides object\n // but when it needs to provide values of its own, it creates its\n // own provides object using parent provides object as prototype.\n // this way in `inject` we can simply look up injections from direct\n // parent and let the prototype chain do the work.\n const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n if (parentProvides === provides) {\n provides = currentInstance.provides = Object.create(parentProvides);\n }\n // TS doesn't allow symbol as index type\n provides[key] = value;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n // fallback to `currentRenderingInstance` so that this can be called in\n // a functional component\n const instance = currentInstance || currentRenderingInstance;\n if (instance) {\n // #2400\n // to support `app.use` plugins,\n // fallback to appContext's `provides` if the instance is at root\n const provides = instance.parent == null\n ? instance.vnode.appContext && instance.vnode.appContext.provides\n : instance.parent.provides;\n if (provides && key in provides) {\n // TS doesn't allow symbol as index type\n return provides[key];\n }\n else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue)\n ? defaultValue.call(instance.proxy)\n : defaultValue;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`injection \"${String(key)}\" not found.`);\n }\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`inject() can only be used inside setup() or functional components.`);\n }\n}\n\n// Simple effect.\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(effect, null, ((process.env.NODE_ENV !== 'production')\n ? Object.assign(Object.assign({}, options), { flush: 'post' }) : { flush: 'post' }));\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(effect, null, ((process.env.NODE_ENV !== 'production')\n ? Object.assign(Object.assign({}, options), { flush: 'sync' }) : { flush: 'sync' }));\n}\n// initial value for watchers to trigger on undefined initial values\nconst INITIAL_WATCHER_VALUE = {};\n// implementation\nfunction watch(source, cb, options) {\n if ((process.env.NODE_ENV !== 'production') && !isFunction(cb)) {\n warn(`\\`watch(fn, options?)\\` signature has been moved to a separate API. ` +\n `Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only ` +\n `supports \\`watch(source, cb, options?) signature.`);\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ) {\n if ((process.env.NODE_ENV !== 'production') && !cb) {\n if (immediate !== undefined) {\n warn(`watch() \"immediate\" option is only respected when using the ` +\n `watch(source, callback, options?) signature.`);\n }\n if (deep !== undefined) {\n warn(`watch() \"deep\" option is only respected when using the ` +\n `watch(source, callback, options?) signature.`);\n }\n }\n const warnInvalidSource = (s) => {\n warn(`Invalid watch source: `, s, `A watch source can only be a getter/effect function, a ref, ` +\n `a reactive object, or an array of these types.`);\n };\n const instance = currentInstance;\n let getter;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow$1(source);\n }\n else if (isReactive(source)) {\n getter = () => source;\n deep = true;\n }\n else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some(s => isReactive(s) || isShallow$1(s));\n getter = () => source.map(s => {\n if (isRef(s)) {\n return s.value;\n }\n else if (isReactive(s)) {\n return traverse(s);\n }\n else if (isFunction(s)) {\n return callWithErrorHandling(s, instance, 2 /* ErrorCodes.WATCH_GETTER */);\n }\n else {\n (process.env.NODE_ENV !== 'production') && warnInvalidSource(s);\n }\n });\n }\n else if (isFunction(source)) {\n if (cb) {\n // getter with cb\n getter = () => callWithErrorHandling(source, instance, 2 /* ErrorCodes.WATCH_GETTER */);\n }\n else {\n // no cb -> simple effect\n getter = () => {\n if (instance && instance.isUnmounted) {\n return;\n }\n if (cleanup) {\n cleanup();\n }\n return callWithAsyncErrorHandling(source, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [onCleanup]);\n };\n }\n }\n else {\n getter = NOOP;\n (process.env.NODE_ENV !== 'production') && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n getter = () => traverse(baseGetter());\n }\n let cleanup;\n let onCleanup = (fn) => {\n cleanup = effect.onStop = () => {\n callWithErrorHandling(fn, instance, 4 /* ErrorCodes.WATCH_CLEANUP */);\n };\n };\n // in SSR there is no need to setup an actual effect, and it should be noop\n // unless it's eager or sync flush\n let ssrCleanup;\n if (isInSSRComponentSetup) {\n // we will also not call the invalidate callback (+ runner is not set up)\n onCleanup = NOOP;\n if (!cb) {\n getter();\n }\n else if (immediate) {\n callWithAsyncErrorHandling(cb, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [\n getter(),\n isMultiSource ? [] : undefined,\n onCleanup\n ]);\n }\n if (flush === 'sync') {\n const ctx = useSSRContext();\n ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n }\n else {\n return NOOP;\n }\n }\n let oldValue = isMultiSource\n ? new Array(source.length).fill(INITIAL_WATCHER_VALUE)\n : INITIAL_WATCHER_VALUE;\n const job = () => {\n if (!effect.active) {\n return;\n }\n if (cb) {\n // watch(source, cb)\n const newValue = effect.run();\n if (deep ||\n forceTrigger ||\n (isMultiSource\n ? newValue.some((v, i) => hasChanged(v, oldValue[i]))\n : hasChanged(newValue, oldValue)) ||\n (false )) {\n // cleanup before running cb again\n if (cleanup) {\n cleanup();\n }\n callWithAsyncErrorHandling(cb, instance, 3 /* ErrorCodes.WATCH_CALLBACK */, [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE\n ? undefined\n : (isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE)\n ? []\n : oldValue,\n onCleanup\n ]);\n oldValue = newValue;\n }\n }\n else {\n // watchEffect\n effect.run();\n }\n };\n // important: mark the job as a watcher callback so that scheduler knows\n // it is allowed to self-trigger (#1727)\n job.allowRecurse = !!cb;\n let scheduler;\n if (flush === 'sync') {\n scheduler = job; // the scheduler function gets called directly\n }\n else if (flush === 'post') {\n scheduler = () => queuePostRenderEffect(job, instance && instance.suspense);\n }\n else {\n // default: 'pre'\n job.pre = true;\n if (instance)\n job.id = instance.uid;\n scheduler = () => queueJob(job);\n }\n const effect = new ReactiveEffect(getter, scheduler);\n if ((process.env.NODE_ENV !== 'production')) {\n effect.onTrack = onTrack;\n effect.onTrigger = onTrigger;\n }\n // initial run\n if (cb) {\n if (immediate) {\n job();\n }\n else {\n oldValue = effect.run();\n }\n }\n else if (flush === 'post') {\n queuePostRenderEffect(effect.run.bind(effect), instance && instance.suspense);\n }\n else {\n effect.run();\n }\n const unwatch = () => {\n effect.stop();\n if (instance && instance.scope) {\n remove(instance.scope.effects, effect);\n }\n };\n if (ssrCleanup)\n ssrCleanup.push(unwatch);\n return unwatch;\n}\n// this.$watch\nfunction instanceWatch(source, value, options) {\n const publicThis = this.proxy;\n const getter = isString(source)\n ? source.includes('.')\n ? createPathGetter(publicThis, source)\n : () => publicThis[source]\n : source.bind(publicThis, publicThis);\n let cb;\n if (isFunction(value)) {\n cb = value;\n }\n else {\n cb = value.handler;\n options = value;\n }\n const cur = currentInstance;\n setCurrentInstance(this);\n const res = doWatch(getter, cb.bind(publicThis), options);\n if (cur) {\n setCurrentInstance(cur);\n }\n else {\n unsetCurrentInstance();\n }\n return res;\n}\nfunction createPathGetter(ctx, path) {\n const segments = path.split('.');\n return () => {\n let cur = ctx;\n for (let i = 0; i < segments.length && cur; i++) {\n cur = cur[segments[i]];\n }\n return cur;\n };\n}\nfunction traverse(value, seen) {\n if (!isObject(value) || value[\"__v_skip\" /* ReactiveFlags.SKIP */]) {\n return value;\n }\n seen = seen || new Set();\n if (seen.has(value)) {\n return value;\n }\n seen.add(value);\n if (isRef(value)) {\n traverse(value.value, seen);\n }\n else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], seen);\n }\n }\n else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, seen);\n });\n }\n else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], seen);\n }\n }\n return value;\n}\n\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n let prevTransitionKey;\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n if (!children || !children.length) {\n return;\n }\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n // locate first non-comment child\n for (const c of children) {\n if (c.type !== Comment) {\n if ((process.env.NODE_ENV !== 'production') && hasFound) {\n // warn more than one non-comment child\n warn('<transition> can only be used on a single element or component. ' +\n 'Use <transition-group> for lists.');\n break;\n }\n child = c;\n hasFound = true;\n if (!(process.env.NODE_ENV !== 'production'))\n break;\n }\n }\n }\n // there's no need to track reactivity for these props so use the raw\n // props for a bit better perf\n const rawProps = toRaw(props);\n const { mode } = rawProps;\n // check mode\n if ((process.env.NODE_ENV !== 'production') &&\n mode &&\n mode !== 'in-out' &&\n mode !== 'out-in' &&\n mode !== 'default') {\n warn(`invalid <transition> mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n // in the case of <transition><keep-alive/></transition>, we need to\n // compare the type of the kept-alive children.\n const innerChild = getKeepAliveChild(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n const enterHooks = resolveTransitionHooks(innerChild, rawProps, state, instance);\n setTransitionHooks(innerChild, enterHooks);\n const oldChild = instance.subTree;\n const oldInnerChild = oldChild && getKeepAliveChild(oldChild);\n let transitionKeyChanged = false;\n const { getTransitionKey } = innerChild.type;\n if (getTransitionKey) {\n const key = getTransitionKey();\n if (prevTransitionKey === undefined) {\n prevTransitionKey = key;\n }\n else if (key !== prevTransitionKey) {\n prevTransitionKey = key;\n transitionKeyChanged = true;\n }\n }\n // handle mode\n if (oldInnerChild &&\n oldInnerChild.type !== Comment &&\n (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged)) {\n const leavingHooks = resolveTransitionHooks(oldInnerChild, rawProps, state, instance);\n // update old tree's hooks in case of dynamic transition\n setTransitionHooks(oldInnerChild, leavingHooks);\n // switching between different views\n if (mode === 'out-in') {\n state.isLeaving = true;\n // return placeholder node and queue update when leave finishes\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n // #6835\n // it also needs to be updated when active is undefined\n if (instance.update.active !== false) {\n instance.update();\n }\n };\n return emptyPlaceholder(child);\n }\n else if (mode === 'in-out' && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(state, oldInnerChild);\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n // early removal callback\n el._leaveCb = () => {\n earlyRemove();\n el._leaveCb = undefined;\n delete enterHooks.delayedLeave;\n };\n enterHooks.delayedLeave = delayedLeave;\n };\n }\n }\n return child;\n };\n }\n};\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\n// The transition hooks are attached to the vnode as vnode.transition\n// and will be called at appropriate timing in the renderer.\nfunction resolveTransitionHooks(vnode, props, state, instance) {\n const { appear, mode, persisted = false, onBeforeEnter, onEnter, onAfterEnter, onEnterCancelled, onBeforeLeave, onLeave, onAfterLeave, onLeaveCancelled, onBeforeAppear, onAppear, onAfterAppear, onAppearCancelled } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook &&\n callWithAsyncErrorHandling(hook, instance, 9 /* ErrorCodes.TRANSITION_HOOK */, args);\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if (isArray(hook)) {\n if (hook.every(hook => hook.length <= 1))\n done();\n }\n else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n }\n else {\n return;\n }\n }\n // for same element (v-show)\n if (el._leaveCb) {\n el._leaveCb(true /* cancelled */);\n }\n // for toggled element with same key (v-if)\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode &&\n isSameVNodeType(vnode, leavingVNode) &&\n leavingVNode.el._leaveCb) {\n // force early removal (not cancelled)\n leavingVNode.el._leaveCb();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n }\n else {\n return;\n }\n }\n let called = false;\n const done = (el._enterCb = (cancelled) => {\n if (called)\n return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n }\n else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el._enterCb = undefined;\n });\n if (hook) {\n callAsyncHook(hook, [el, done]);\n }\n else {\n done();\n }\n },\n leave(el, remove) {\n const key = String(vnode.key);\n if (el._enterCb) {\n el._enterCb(true /* cancelled */);\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n const done = (el._leaveCb = (cancelled) => {\n if (called)\n return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n }\n else {\n callHook(onAfterLeave, [el]);\n }\n el._leaveCb = undefined;\n if (leavingVNodesCache[key] === vnode) {\n delete leavingVNodesCache[key];\n }\n });\n leavingVNodesCache[key] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n }\n else {\n done();\n }\n },\n clone(vnode) {\n return resolveTransitionHooks(vnode, props, state, instance);\n }\n };\n return hooks;\n}\n// the placeholder really only handles one special case: KeepAlive\n// in the case of a KeepAlive in a leave phase we need to return a KeepAlive\n// placeholder with empty content to avoid the KeepAlive instance from being\n// unmounted.\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getKeepAliveChild(vnode) {\n return isKeepAlive(vnode)\n ? vnode.children\n ? vnode.children[0]\n : undefined\n : vnode;\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 /* ShapeFlags.COMPONENT */ && vnode.component) {\n setTransitionHooks(vnode.component.subTree, hooks);\n }\n else if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n }\n else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n // #5360 inherit parent key in case of <template v-for>\n const key = parentKey == null\n ? child.key\n : String(parentKey) + String(child.key != null ? child.key : i);\n // handle fragment children case, e.g. v-for\n if (child.type === Fragment) {\n if (child.patchFlag & 128 /* PatchFlags.KEYED_FRAGMENT */)\n keyedFragmentCount++;\n ret = ret.concat(getTransitionRawChildren(child.children, keepComment, key));\n }\n // comment placeholders should be skipped, e.g. v-if\n else if (keepComment || child.type !== Comment) {\n ret.push(key != null ? cloneVNode(child, { key }) : child);\n }\n }\n // #1126 if a transition children list contains multiple sub fragments, these\n // fragments will be merged into a flat children array. Since each v-for\n // fragment may contain different static bindings inside, we need to de-op\n // these children to force full diffs to ensure correct behavior.\n if (keyedFragmentCount > 1) {\n for (let i = 0; i < ret.length; i++) {\n ret[i].patchFlag = -2 /* PatchFlags.BAIL */;\n }\n }\n return ret;\n}\n\n// implementation, close to no-op\nfunction defineComponent(options) {\n return isFunction(options) ? { setup: options, name: options.name } : options;\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = { loader: source };\n }\n const { loader, loadingComponent, errorComponent, delay = 200, timeout, // undefined = never times out\n suspensible = true, onError: userOnError } = source;\n let pendingRequest = null;\n let resolvedComp;\n let retries = 0;\n const retry = () => {\n retries++;\n pendingRequest = null;\n return load();\n };\n const load = () => {\n let thisRequest;\n return (pendingRequest ||\n (thisRequest = pendingRequest =\n loader()\n .catch(err => {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise((resolve, reject) => {\n const userRetry = () => resolve(retry());\n const userFail = () => reject(err);\n userOnError(err, userRetry, userFail, retries + 1);\n });\n }\n else {\n throw err;\n }\n })\n .then((comp) => {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if ((process.env.NODE_ENV !== 'production') && !comp) {\n warn(`Async component loader resolved to undefined. ` +\n `If you are using retry(), make sure to return its return value.`);\n }\n // interop module default\n if (comp &&\n (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {\n comp = comp.default;\n }\n if ((process.env.NODE_ENV !== 'production') && comp && !isObject(comp) && !isFunction(comp)) {\n throw new Error(`Invalid async component load result: ${comp}`);\n }\n resolvedComp = comp;\n return comp;\n })));\n };\n return defineComponent({\n name: 'AsyncComponentWrapper',\n __asyncLoader: load,\n get __asyncResolved() {\n return resolvedComp;\n },\n setup() {\n const instance = currentInstance;\n // already resolved\n if (resolvedComp) {\n return () => createInnerComp(resolvedComp, instance);\n }\n const onError = (err) => {\n pendingRequest = null;\n handleError(err, instance, 13 /* ErrorCodes.ASYNC_COMPONENT_LOADER */, !errorComponent /* do not throw in dev if user provided error component */);\n };\n // suspense-controlled or SSR.\n if ((suspensible && instance.suspense) ||\n (isInSSRComponentSetup)) {\n return load()\n .then(comp => {\n return () => createInnerComp(comp, instance);\n })\n .catch(err => {\n onError(err);\n return () => errorComponent\n ? createVNode(errorComponent, {\n error: err\n })\n : null;\n });\n }\n const loaded = ref(false);\n const error = ref();\n const delayed = ref(!!delay);\n if (delay) {\n setTimeout(() => {\n delayed.value = false;\n }, delay);\n }\n if (timeout != null) {\n setTimeout(() => {\n if (!loaded.value && !error.value) {\n const err = new Error(`Async component timed out after ${timeout}ms.`);\n onError(err);\n error.value = err;\n }\n }, timeout);\n }\n load()\n .then(() => {\n loaded.value = true;\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n // parent is keep-alive, force update so the loaded component's\n // name is taken into account\n queueJob(instance.parent.update);\n }\n })\n .catch(err => {\n onError(err);\n error.value = err;\n });\n return () => {\n if (loaded.value && resolvedComp) {\n return createInnerComp(resolvedComp, instance);\n }\n else if (error.value && errorComponent) {\n return createVNode(errorComponent, {\n error: error.value\n });\n }\n else if (loadingComponent && !delayed.value) {\n return createVNode(loadingComponent);\n }\n };\n }\n });\n}\nfunction createInnerComp(comp, parent) {\n const { ref, props, children, ce } = parent.vnode;\n const vnode = createVNode(comp, props, children);\n // ensure inner component inherits the async wrapper's ref owner\n vnode.ref = ref;\n // pass the custom element callback on to the inner comp\n // and remove it from the async wrapper\n vnode.ce = ce;\n delete parent.vnode.ce;\n return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n name: `KeepAlive`,\n // Marker for special handling inside the renderer. We are not using a ===\n // check directly on KeepAlive in the renderer, because importing it directly\n // would prevent it from being tree-shaken.\n __isKeepAlive: true,\n props: {\n include: [String, RegExp, Array],\n exclude: [String, RegExp, Array],\n max: [String, Number]\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n // KeepAlive communicates with the instantiated renderer via the\n // ctx where the renderer passes in its internals,\n // and the KeepAlive instance exposes activate/deactivate implementations.\n // The whole point of this is to avoid importing KeepAlive directly in the\n // renderer to facilitate tree-shaking.\n const sharedContext = instance.ctx;\n // if the internal renderer is not registered, it indicates that this is server-side rendering,\n // for KeepAlive, we just need to render its children\n if (!sharedContext.renderer) {\n return () => {\n const children = slots.default && slots.default();\n return children && children.length === 1 ? children[0] : children;\n };\n }\n const cache = new Map();\n const keys = new Set();\n let current = null;\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n instance.__v_cache = cache;\n }\n const parentSuspense = instance.suspense;\n const { renderer: { p: patch, m: move, um: _unmount, o: { createElement } } } = sharedContext;\n const storageContainer = createElement('div');\n sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => {\n const instance = vnode.component;\n move(vnode, container, anchor, 0 /* MoveType.ENTER */, parentSuspense);\n // in case props have changed\n patch(instance.vnode, vnode, container, anchor, instance, parentSuspense, isSVG, vnode.slotScopeIds, optimized);\n queuePostRenderEffect(() => {\n instance.isDeactivated = false;\n if (instance.a) {\n invokeArrayFns(instance.a);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance.parent, vnode);\n }\n }, parentSuspense);\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n // Update components tree\n devtoolsComponentAdded(instance);\n }\n };\n sharedContext.deactivate = (vnode) => {\n const instance = vnode.component;\n move(vnode, storageContainer, null, 1 /* MoveType.LEAVE */, parentSuspense);\n queuePostRenderEffect(() => {\n if (instance.da) {\n invokeArrayFns(instance.da);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance.parent, vnode);\n }\n instance.isDeactivated = true;\n }, parentSuspense);\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n // Update components tree\n devtoolsComponentAdded(instance);\n }\n };\n function unmount(vnode) {\n // reset the shapeFlag so it can be properly unmounted\n resetShapeFlag(vnode);\n _unmount(vnode, instance, parentSuspense, true);\n }\n function pruneCache(filter) {\n cache.forEach((vnode, key) => {\n const name = getComponentName(vnode.type);\n if (name && (!filter || !filter(name))) {\n pruneCacheEntry(key);\n }\n });\n }\n function pruneCacheEntry(key) {\n const cached = cache.get(key);\n if (!current || cached.type !== current.type) {\n unmount(cached);\n }\n else if (current) {\n // current active instance should no longer be kept-alive.\n // we can't unmount it now but it might be later, so reset its flag now.\n resetShapeFlag(current);\n }\n cache.delete(key);\n keys.delete(key);\n }\n // prune cache on include/exclude prop change\n watch(() => [props.include, props.exclude], ([include, exclude]) => {\n include && pruneCache(name => matches(include, name));\n exclude && pruneCache(name => !matches(exclude, name));\n }, \n // prune post-render after `current` has been updated\n { flush: 'post', deep: true });\n // cache sub tree after render\n let pendingCacheKey = null;\n const cacheSubtree = () => {\n // fix #1621, the pendingCacheKey could be 0\n if (pendingCacheKey != null) {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }\n };\n onMounted(cacheSubtree);\n onUpdated(cacheSubtree);\n onBeforeUnmount(() => {\n cache.forEach(cached => {\n const { subTree, suspense } = instance;\n const vnode = getInnerChild(subTree);\n if (cached.type === vnode.type) {\n // current instance will be unmounted as part of keep-alive's unmount\n resetShapeFlag(vnode);\n // but invoke its deactivated hook here\n const da = vnode.component.da;\n da && queuePostRenderEffect(da, suspense);\n return;\n }\n unmount(cached);\n });\n });\n return () => {\n pendingCacheKey = null;\n if (!slots.default) {\n return null;\n }\n const children = slots.default();\n const rawVNode = children[0];\n if (children.length > 1) {\n if ((process.env.NODE_ENV !== 'production')) {\n warn(`KeepAlive should contain exactly one component child.`);\n }\n current = null;\n return children;\n }\n else if (!isVNode(rawVNode) ||\n (!(rawVNode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */) &&\n !(rawVNode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */))) {\n current = null;\n return rawVNode;\n }\n let vnode = getInnerChild(rawVNode);\n const comp = vnode.type;\n // for async components, name check should be based in its loaded\n // inner component if available\n const name = getComponentName(isAsyncWrapper(vnode)\n ? vnode.type.__asyncResolved || {}\n : comp);\n const { include, exclude, max } = props;\n if ((include && (!name || !matches(include, name))) ||\n (exclude && name && matches(exclude, name))) {\n current = vnode;\n return rawVNode;\n }\n const key = vnode.key == null ? comp : vnode.key;\n const cachedVNode = cache.get(key);\n // clone vnode if it's reused because we are going to mutate it\n if (vnode.el) {\n vnode = cloneVNode(vnode);\n if (rawVNode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n rawVNode.ssContent = vnode;\n }\n }\n // #1513 it's possible for the returned vnode to be cloned due to attr\n // fallthrough or scopeId, so the vnode here may not be the final vnode\n // that is mounted. Instead of caching it directly, we store the pending\n // key and cache `instance.subTree` (the normalized vnode) in\n // beforeMount/beforeUpdate hooks.\n pendingCacheKey = key;\n if (cachedVNode) {\n // copy over mounted state\n vnode.el = cachedVNode.el;\n vnode.component = cachedVNode.component;\n if (vnode.transition) {\n // recursively update transition hooks on subTree\n setTransitionHooks(vnode, vnode.transition);\n }\n // avoid vnode being mounted as fresh\n vnode.shapeFlag |= 512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */;\n // make this key the freshest\n keys.delete(key);\n keys.add(key);\n }\n else {\n keys.add(key);\n // prune oldest entry\n if (max && keys.size > parseInt(max, 10)) {\n pruneCacheEntry(keys.values().next().value);\n }\n }\n // avoid vnode being unmounted\n vnode.shapeFlag |= 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */;\n current = vnode;\n return isSuspense(rawVNode.type) ? rawVNode : vnode;\n };\n }\n};\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.some((p) => matches(p, name));\n }\n else if (isString(pattern)) {\n return pattern.split(',').includes(name);\n }\n else if (pattern.test) {\n return pattern.test(name);\n }\n /* istanbul ignore next */\n return false;\n}\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\" /* LifecycleHooks.ACTIVATED */, target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\" /* LifecycleHooks.DEACTIVATED */, target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n // cache the deactivate branch check wrapper for injected hooks so the same\n // hook can be properly deduped by the scheduler. \"__wdc\" stands for \"with\n // deactivation check\".\n const wrappedHook = hook.__wdc ||\n (hook.__wdc = () => {\n // only fire the hook if the target instance is NOT in a deactivated branch.\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n // In addition to registering it on the target instance, we walk up the parent\n // chain and register it on all ancestor instances that are keep-alive roots.\n // This avoids the need to walk the entire component tree when invoking these\n // hooks, and more importantly, avoids the need to track child components in\n // arrays.\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n // injectHook wraps the original for error handling, so make sure to remove\n // the wrapped version.\n const injected = injectHook(type, hook, keepAliveRoot, true /* prepend */);\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\nfunction resetShapeFlag(vnode) {\n // bitwise operations to remove keep alive flags\n vnode.shapeFlag &= ~256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */;\n vnode.shapeFlag &= ~512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */;\n}\nfunction getInnerChild(vnode) {\n return vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */ ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n const hooks = target[type] || (target[type] = []);\n // cache the error handling wrapper for injected hooks so the same hook\n // can be properly deduped by the scheduler. \"__weh\" stands for \"with error\n // handling\".\n const wrappedHook = hook.__weh ||\n (hook.__weh = (...args) => {\n if (target.isUnmounted) {\n return;\n }\n // disable tracking inside all lifecycle hooks\n // since they can potentially be called inside effects.\n pauseTracking();\n // Set currentInstance during hook invocation.\n // This assumes the hook does not synchronously trigger other hooks, which\n // can only be false when the user does something really funky.\n setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n unsetCurrentInstance();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n }\n else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n const apiName = toHandlerKey(ErrorTypeStrings[type].replace(/ hook$/, ''));\n warn(`${apiName} is called when there is no active component instance to be ` +\n `associated with. ` +\n `Lifecycle injection APIs can only be used during execution of setup().` +\n (` If you are using async setup(), make sure to register lifecycle ` +\n `hooks before the first await statement.`\n ));\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => \n// post-create lifecycle registrations are noops during SSR (except for serverPrefetch)\n(!isInSSRComponentSetup || lifecycle === \"sp\" /* LifecycleHooks.SERVER_PREFETCH */) &&\n injectHook(lifecycle, (...args) => hook(...args), target);\nconst onBeforeMount = createHook(\"bm\" /* LifecycleHooks.BEFORE_MOUNT */);\nconst onMounted = createHook(\"m\" /* LifecycleHooks.MOUNTED */);\nconst onBeforeUpdate = createHook(\"bu\" /* LifecycleHooks.BEFORE_UPDATE */);\nconst onUpdated = createHook(\"u\" /* LifecycleHooks.UPDATED */);\nconst onBeforeUnmount = createHook(\"bum\" /* LifecycleHooks.BEFORE_UNMOUNT */);\nconst onUnmounted = createHook(\"um\" /* LifecycleHooks.UNMOUNTED */);\nconst onServerPrefetch = createHook(\"sp\" /* LifecycleHooks.SERVER_PREFETCH */);\nconst onRenderTriggered = createHook(\"rtg\" /* LifecycleHooks.RENDER_TRIGGERED */);\nconst onRenderTracked = createHook(\"rtc\" /* LifecycleHooks.RENDER_TRACKED */);\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\" /* LifecycleHooks.ERROR_CAPTURED */, hook, target);\n}\n\n/**\nRuntime helper for applying directives to a vnode. Example usage:\n\nconst comp = resolveComponent('comp')\nconst foo = resolveDirective('foo')\nconst bar = resolveDirective('bar')\n\nreturn withDirectives(h(comp), [\n [foo, this.x],\n [bar, this.y]\n])\n*/\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn('Do not use built-in directive ids as custom directive id: ' + name);\n }\n}\n/**\n * Adds directives to a VNode.\n */\nfunction withDirectives(vnode, directives) {\n const internalInstance = currentRenderingInstance;\n if (internalInstance === null) {\n (process.env.NODE_ENV !== 'production') && warn(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getExposeProxy(internalInstance) ||\n internalInstance.proxy;\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n const bindings = vnode.dirs;\n const oldBindings = prevVNode && prevVNode.dirs;\n for (let i = 0; i < bindings.length; i++) {\n const binding = bindings[i];\n if (oldBindings) {\n binding.oldValue = oldBindings[i].value;\n }\n let hook = binding.dir[name];\n if (hook) {\n // disable tracking inside all lifecycle hooks\n // since they can potentially be called inside effects.\n pauseTracking();\n callWithAsyncErrorHandling(hook, instance, 8 /* ErrorCodes.DIRECTIVE_HOOK */, [\n vnode.el,\n binding,\n vnode,\n prevVNode\n ]);\n resetTracking();\n }\n }\n}\n\nconst COMPONENTS = 'components';\nconst DIRECTIVES = 'directives';\n/**\n * @private\n */\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = Symbol();\n/**\n * @private\n */\nfunction resolveDynamicComponent(component) {\n if (isString(component)) {\n return resolveAsset(COMPONENTS, component, false) || component;\n }\n else {\n // invalid types will fallthrough to createVNode and raise warning\n return (component || NULL_DYNAMIC_COMPONENT);\n }\n}\n/**\n * @private\n */\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\n// implementation\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n // explicit self name has highest priority\n if (type === COMPONENTS) {\n const selfName = getComponentName(Component, false /* do not include inferred name to avoid breaking existing code */);\n if (selfName &&\n (selfName === name ||\n selfName === camelize(name) ||\n selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = \n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) ||\n // global registration\n resolve(instance.appContext[type], name);\n if (!res && maybeSelfReference) {\n // fallback to implicit self-reference\n return Component;\n }\n if ((process.env.NODE_ENV !== 'production') && warnMissing && !res) {\n const extra = type === COMPONENTS\n ? `\\nIf this is a native custom element, make sure to exclude it from ` +\n `component resolution via compilerOptions.isCustomElement.`\n : ``;\n warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`resolve${capitalize(type.slice(0, -1))} ` +\n `can only be used in render() or setup().`);\n }\n}\nfunction resolve(registry, name) {\n return (registry &&\n (registry[name] ||\n registry[camelize(name)] ||\n registry[capitalize(camelize(name))]));\n}\n\n/**\n * Actual implementation\n */\nfunction renderList(source, renderItem, cache, index) {\n let ret;\n const cached = (cache && cache[index]);\n if (isArray(source) || isString(source)) {\n ret = new Array(source.length);\n for (let i = 0, l = source.length; i < l; i++) {\n ret[i] = renderItem(source[i], i, undefined, cached && cached[i]);\n }\n }\n else if (typeof source === 'number') {\n if ((process.env.NODE_ENV !== 'production') && !Number.isInteger(source)) {\n warn(`The v-for range expect an integer value but got ${source}.`);\n }\n ret = new Array(source);\n for (let i = 0; i < source; i++) {\n ret[i] = renderItem(i + 1, i, undefined, cached && cached[i]);\n }\n }\n else if (isObject(source)) {\n if (source[Symbol.iterator]) {\n ret = Array.from(source, (item, i) => renderItem(item, i, undefined, cached && cached[i]));\n }\n else {\n const keys = Object.keys(source);\n ret = new Array(keys.length);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n }\n }\n }\n else {\n ret = [];\n }\n if (cache) {\n cache[index] = ret;\n }\n return ret;\n}\n\n/**\n * Compiler runtime helper for creating dynamic slots object\n * @private\n */\nfunction createSlots(slots, dynamicSlots) {\n for (let i = 0; i < dynamicSlots.length; i++) {\n const slot = dynamicSlots[i];\n // array of dynamic slot generated by <template v-for=\"...\" #[...]>\n if (isArray(slot)) {\n for (let j = 0; j < slot.length; j++) {\n slots[slot[j].name] = slot[j].fn;\n }\n }\n else if (slot) {\n // conditional single slot generated by <template v-if=\"...\" #foo>\n slots[slot.name] = slot.key\n ? (...args) => {\n const res = slot.fn(...args);\n // attach branch key so each conditional branch is considered a\n // different fragment\n if (res)\n res.key = slot.key;\n return res;\n }\n : slot.fn;\n }\n }\n return slots;\n}\n\n/**\n * Compiler runtime helper for rendering `<slot/>`\n * @private\n */\nfunction renderSlot(slots, name, props = {}, \n// this is not a user-facing function, so the fallback is always generated by\n// the compiler and guaranteed to be a function returning an array\nfallback, noSlotted) {\n if (currentRenderingInstance.isCE ||\n (currentRenderingInstance.parent &&\n isAsyncWrapper(currentRenderingInstance.parent) &&\n currentRenderingInstance.parent.isCE)) {\n if (name !== 'default')\n props.name = name;\n return createVNode('slot', props, fallback && fallback());\n }\n let slot = slots[name];\n if ((process.env.NODE_ENV !== 'production') && slot && slot.length > 1) {\n warn(`SSR-optimized slot function detected in a non-SSR-optimized render ` +\n `function. You need to mark this component with $dynamic-slots in the ` +\n `parent template.`);\n slot = () => [];\n }\n // a compiled slot disables block tracking by default to avoid manual\n // invocation interfering with template-based block tracking, but in\n // `renderSlot` we can be sure that it's template-based so we can force\n // enable it.\n if (slot && slot._c) {\n slot._d = false;\n }\n openBlock();\n const validSlotContent = slot && ensureValidVNode(slot(props));\n const rendered = createBlock(Fragment, {\n key: props.key ||\n // slot content array of a dynamic conditional slot may have a branch\n // key attached in the `createSlots` helper, respect that\n (validSlotContent && validSlotContent.key) ||\n `_${name}`\n }, validSlotContent || (fallback ? fallback() : []), validSlotContent && slots._ === 1 /* SlotFlags.STABLE */\n ? 64 /* PatchFlags.STABLE_FRAGMENT */\n : -2 /* PatchFlags.BAIL */);\n if (!noSlotted && rendered.scopeId) {\n rendered.slotScopeIds = [rendered.scopeId + '-s'];\n }\n if (slot && slot._c) {\n slot._d = true;\n }\n return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n return vnodes.some(child => {\n if (!isVNode(child))\n return true;\n if (child.type === Comment)\n return false;\n if (child.type === Fragment &&\n !ensureValidVNode(child.children))\n return false;\n return true;\n })\n ? vnodes\n : null;\n}\n\n/**\n * For prefixing keys in v-on=\"obj\" with \"on\"\n * @private\n */\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if ((process.env.NODE_ENV !== 'production') && !isObject(obj)) {\n warn(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key)\n ? `on:${key}`\n : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\n/**\n * #2437 In Vue 3, functional components do not have a public instance proxy but\n * they exist in the internal parent chain. For code that relies on traversing\n * public $parent chains, skip functional ones and go to the parent instead.\n */\nconst getPublicInstance = (i) => {\n if (!i)\n return null;\n if (isStatefulComponent(i))\n return getExposeProxy(i) || i.proxy;\n return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = \n// Move PURE marker to new line to workaround compiler discarding it\n// due to type annotation\n/*#__PURE__*/ extend(Object.create(null), {\n $: i => i,\n $el: i => i.vnode.el,\n $data: i => i.data,\n $props: i => ((process.env.NODE_ENV !== 'production') ? shallowReadonly(i.props) : i.props),\n $attrs: i => ((process.env.NODE_ENV !== 'production') ? shallowReadonly(i.attrs) : i.attrs),\n $slots: i => ((process.env.NODE_ENV !== 'production') ? shallowReadonly(i.slots) : i.slots),\n $refs: i => ((process.env.NODE_ENV !== 'production') ? shallowReadonly(i.refs) : i.refs),\n $parent: i => getPublicInstance(i.parent),\n $root: i => getPublicInstance(i.root),\n $emit: i => i.emit,\n $options: i => (__VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type),\n $forceUpdate: i => i.f || (i.f = () => queueJob(i.update)),\n $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy)),\n $watch: i => (__VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP)\n});\nconst isReservedPrefix = (key) => key === '_' || key === '$';\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n // for internal formatters to know that this is a Vue instance\n if ((process.env.NODE_ENV !== 'production') && key === '__isVue') {\n return true;\n }\n // data / props / ctx\n // This getter gets called for every property access on the render context\n // during render and is a major hotspot. The most expensive part of this\n // is the multiple hasOwn() calls. It's much faster to do a simple property\n // access on a plain object, so we use an accessCache object (with null\n // prototype) to memoize what access type a key corresponds to.\n let normalizedProps;\n if (key[0] !== '$') {\n const n = accessCache[key];\n if (n !== undefined) {\n switch (n) {\n case 1 /* AccessTypes.SETUP */:\n return setupState[key];\n case 2 /* AccessTypes.DATA */:\n return data[key];\n case 4 /* AccessTypes.CONTEXT */:\n return ctx[key];\n case 3 /* AccessTypes.PROPS */:\n return props[key];\n // default: just fallthrough\n }\n }\n else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* AccessTypes.SETUP */;\n return setupState[key];\n }\n else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* AccessTypes.DATA */;\n return data[key];\n }\n else if (\n // only cache other properties when instance has declared (thus stable)\n // props\n (normalizedProps = instance.propsOptions[0]) &&\n hasOwn(normalizedProps, key)) {\n accessCache[key] = 3 /* AccessTypes.PROPS */;\n return props[key];\n }\n else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* AccessTypes.CONTEXT */;\n return ctx[key];\n }\n else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* AccessTypes.OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n // public $xxx properties\n if (publicGetter) {\n if (key === '$attrs') {\n track(instance, \"get\" /* TrackOpTypes.GET */, key);\n (process.env.NODE_ENV !== 'production') && markAttrsAccessed();\n }\n return publicGetter(instance);\n }\n else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) &&\n (cssModule = cssModule[key])) {\n return cssModule;\n }\n else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n // user may set custom properties to `this` that start with `$`\n accessCache[key] = 4 /* AccessTypes.CONTEXT */;\n return ctx[key];\n }\n else if (\n // global properties\n ((globalProperties = appContext.config.globalProperties),\n hasOwn(globalProperties, key))) {\n {\n return globalProperties[key];\n }\n }\n else if ((process.env.NODE_ENV !== 'production') &&\n currentRenderingInstance &&\n (!isString(key) ||\n // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf('__v') !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn(`Property ${JSON.stringify(key)} must be accessed via $data because it starts with a reserved ` +\n `character (\"$\" or \"_\") and is not proxied on the render context.`);\n }\n else if (instance === currentRenderingInstance) {\n warn(`Property ${JSON.stringify(key)} was accessed during render ` +\n `but is not defined on instance.`);\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n }\n else if ((process.env.NODE_ENV !== 'production') &&\n setupState.__isScriptSetup &&\n hasOwn(setupState, key)) {\n warn(`Cannot mutate <script setup> binding \"${key}\" from Options API.`);\n return false;\n }\n else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n data[key] = value;\n return true;\n }\n else if (hasOwn(instance.props, key)) {\n (process.env.NODE_ENV !== 'production') && warn(`Attempting to mutate prop \"${key}\". Props are readonly.`);\n return false;\n }\n if (key[0] === '$' && key.slice(1) in instance) {\n (process.env.NODE_ENV !== 'production') &&\n warn(`Attempting to mutate public property \"${key}\". ` +\n `Properties starting with $ are reserved and readonly.`);\n return false;\n }\n else {\n if ((process.env.NODE_ENV !== 'production') && key in instance.appContext.config.globalProperties) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n value\n });\n }\n else {\n ctx[key] = value;\n }\n }\n return true;\n },\n has({ _: { data, setupState, accessCache, ctx, appContext, propsOptions } }, key) {\n let normalizedProps;\n return (!!accessCache[key] ||\n (data !== EMPTY_OBJ && hasOwn(data, key)) ||\n hasSetupBinding(setupState, key) ||\n ((normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key)) ||\n hasOwn(ctx, key) ||\n hasOwn(publicPropertiesMap, key) ||\n hasOwn(appContext.config.globalProperties, key));\n },\n defineProperty(target, key, descriptor) {\n if (descriptor.get != null) {\n // invalidate key cache of a getter based property #5417\n target._.accessCache[key] = 0;\n }\n else if (hasOwn(descriptor, 'value')) {\n this.set(target, key, descriptor.value, null);\n }\n return Reflect.defineProperty(target, key, descriptor);\n }\n};\nif ((process.env.NODE_ENV !== 'production') && !false) {\n PublicInstanceProxyHandlers.ownKeys = (target) => {\n warn(`Avoid app logic that relies on enumerating keys on a component instance. ` +\n `The keys will be empty in production mode to avoid performance overhead.`);\n return Reflect.ownKeys(target);\n };\n}\nconst RuntimeCompiledPublicInstanceProxyHandlers = /*#__PURE__*/ extend({}, PublicInstanceProxyHandlers, {\n get(target, key) {\n // fast path for unscopables when using `with` block\n if (key === Symbol.unscopables) {\n return;\n }\n return PublicInstanceProxyHandlers.get(target, key, target);\n },\n has(_, key) {\n const has = key[0] !== '_' && !isGloballyWhitelisted(key);\n if ((process.env.NODE_ENV !== 'production') && !has && PublicInstanceProxyHandlers.has(_, key)) {\n warn(`Property ${JSON.stringify(key)} should not start with _ which is a reserved prefix for Vue internals.`);\n }\n return has;\n }\n});\n// dev only\n// In dev mode, the proxy target exposes the same properties as seen on `this`\n// for easier console inspection. In prod mode it will be an empty object so\n// these properties definitions can be skipped.\nfunction createDevRenderContext(instance) {\n const target = {};\n // expose internal instance for proxy handlers\n Object.defineProperty(target, `_`, {\n configurable: true,\n enumerable: false,\n get: () => instance\n });\n // expose public properties\n Object.keys(publicPropertiesMap).forEach(key => {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: false,\n get: () => publicPropertiesMap[key](instance),\n // intercepted by the proxy so no need for implementation,\n // but needed to prevent set errors\n set: NOOP\n });\n });\n return target;\n}\n// dev only\nfunction exposePropsOnRenderContext(instance) {\n const { ctx, propsOptions: [propsOptions] } = instance;\n if (propsOptions) {\n Object.keys(propsOptions).forEach(key => {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => instance.props[key],\n set: NOOP\n });\n });\n }\n}\n// dev only\nfunction exposeSetupStateOnRenderContext(instance) {\n const { ctx, setupState } = instance;\n Object.keys(toRaw(setupState)).forEach(key => {\n if (!setupState.__isScriptSetup) {\n if (isReservedPrefix(key[0])) {\n warn(`setup() return property ${JSON.stringify(key)} should not start with \"$\" or \"_\" ` +\n `which are reserved prefixes for Vue internals.`);\n return;\n }\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => setupState[key],\n set: NOOP\n });\n }\n });\n}\n\nfunction createDuplicateChecker() {\n const cache = Object.create(null);\n return (type, key) => {\n if (cache[key]) {\n warn(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\n }\n else {\n cache[key] = type;\n }\n };\n}\nlet shouldCacheAccess = true;\nfunction applyOptions(instance) {\n const options = resolveMergedOptions(instance);\n const publicThis = instance.proxy;\n const ctx = instance.ctx;\n // do not cache property access on public proxy during state initialization\n shouldCacheAccess = false;\n // call beforeCreate first before accessing other options since\n // the hook may mutate resolved options (#2791)\n if (options.beforeCreate) {\n callHook(options.beforeCreate, instance, \"bc\" /* LifecycleHooks.BEFORE_CREATE */);\n }\n const { \n // state\n data: dataOptions, computed: computedOptions, methods, watch: watchOptions, provide: provideOptions, inject: injectOptions, \n // lifecycle\n created, beforeMount, mounted, beforeUpdate, updated, activated, deactivated, beforeDestroy, beforeUnmount, destroyed, unmounted, render, renderTracked, renderTriggered, errorCaptured, serverPrefetch, \n // public API\n expose, inheritAttrs, \n // assets\n components, directives, filters } = options;\n const checkDuplicateProperties = (process.env.NODE_ENV !== 'production') ? createDuplicateChecker() : null;\n if ((process.env.NODE_ENV !== 'production')) {\n const [propsOptions] = instance.propsOptions;\n if (propsOptions) {\n for (const key in propsOptions) {\n checkDuplicateProperties(\"Props\" /* OptionTypes.PROPS */, key);\n }\n }\n }\n // options initialization order (to be consistent with Vue 2):\n // - props (already done outside of this function)\n // - inject\n // - methods\n // - data (deferred since it relies on `this` access)\n // - computed\n // - watch (deferred since it relies on `this` access)\n if (injectOptions) {\n resolveInjections(injectOptions, ctx, checkDuplicateProperties, instance.appContext.config.unwrapInjectedRef);\n }\n if (methods) {\n for (const key in methods) {\n const methodHandler = methods[key];\n if (isFunction(methodHandler)) {\n // In dev mode, we use the `createRenderContext` function to define\n // methods to the proxy target, and those are read-only but\n // reconfigurable, so it needs to be redefined here\n if ((process.env.NODE_ENV !== 'production')) {\n Object.defineProperty(ctx, key, {\n value: methodHandler.bind(publicThis),\n configurable: true,\n enumerable: true,\n writable: true\n });\n }\n else {\n ctx[key] = methodHandler.bind(publicThis);\n }\n if ((process.env.NODE_ENV !== 'production')) {\n checkDuplicateProperties(\"Methods\" /* OptionTypes.METHODS */, key);\n }\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. ` +\n `Did you reference the function correctly?`);\n }\n }\n }\n if (dataOptions) {\n if ((process.env.NODE_ENV !== 'production') && !isFunction(dataOptions)) {\n warn(`The data option must be a function. ` +\n `Plain object usage is no longer supported.`);\n }\n const data = dataOptions.call(publicThis, publicThis);\n if ((process.env.NODE_ENV !== 'production') && isPromise(data)) {\n warn(`data() returned a Promise - note data() cannot be async; If you ` +\n `intend to perform data fetching before component renders, use ` +\n `async setup() + <Suspense>.`);\n }\n if (!isObject(data)) {\n (process.env.NODE_ENV !== 'production') && warn(`data() should return an object.`);\n }\n else {\n instance.data = reactive(data);\n if ((process.env.NODE_ENV !== 'production')) {\n for (const key in data) {\n checkDuplicateProperties(\"Data\" /* OptionTypes.DATA */, key);\n // expose data on ctx during dev\n if (!isReservedPrefix(key[0])) {\n Object.defineProperty(ctx, key, {\n configurable: true,\n enumerable: true,\n get: () => data[key],\n set: NOOP\n });\n }\n }\n }\n }\n }\n // state initialization complete at this point - start caching access\n shouldCacheAccess = true;\n if (computedOptions) {\n for (const key in computedOptions) {\n const opt = computedOptions[key];\n const get = isFunction(opt)\n ? opt.bind(publicThis, publicThis)\n : isFunction(opt.get)\n ? opt.get.bind(publicThis, publicThis)\n : NOOP;\n if ((process.env.NODE_ENV !== 'production') && get === NOOP) {\n warn(`Computed property \"${key}\" has no getter.`);\n }\n const set = !isFunction(opt) && isFunction(opt.set)\n ? opt.set.bind(publicThis)\n : (process.env.NODE_ENV !== 'production')\n ? () => {\n warn(`Write operation failed: computed property \"${key}\" is readonly.`);\n }\n : NOOP;\n const c = computed({\n get,\n set\n });\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => c.value,\n set: v => (c.value = v)\n });\n if ((process.env.NODE_ENV !== 'production')) {\n checkDuplicateProperties(\"Computed\" /* OptionTypes.COMPUTED */, key);\n }\n }\n }\n if (watchOptions) {\n for (const key in watchOptions) {\n createWatcher(watchOptions[key], ctx, publicThis, key);\n }\n }\n if (provideOptions) {\n const provides = isFunction(provideOptions)\n ? provideOptions.call(publicThis)\n : provideOptions;\n Reflect.ownKeys(provides).forEach(key => {\n provide(key, provides[key]);\n });\n }\n if (created) {\n callHook(created, instance, \"c\" /* LifecycleHooks.CREATED */);\n }\n function registerLifecycleHook(register, hook) {\n if (isArray(hook)) {\n hook.forEach(_hook => register(_hook.bind(publicThis)));\n }\n else if (hook) {\n register(hook.bind(publicThis));\n }\n }\n registerLifecycleHook(onBeforeMount, beforeMount);\n registerLifecycleHook(onMounted, mounted);\n registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n registerLifecycleHook(onUpdated, updated);\n registerLifecycleHook(onActivated, activated);\n registerLifecycleHook(onDeactivated, deactivated);\n registerLifecycleHook(onErrorCaptured, errorCaptured);\n registerLifecycleHook(onRenderTracked, renderTracked);\n registerLifecycleHook(onRenderTriggered, renderTriggered);\n registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n registerLifecycleHook(onUnmounted, unmounted);\n registerLifecycleHook(onServerPrefetch, serverPrefetch);\n if (isArray(expose)) {\n if (expose.length) {\n const exposed = instance.exposed || (instance.exposed = {});\n expose.forEach(key => {\n Object.defineProperty(exposed, key, {\n get: () => publicThis[key],\n set: val => (publicThis[key] = val)\n });\n });\n }\n else if (!instance.exposed) {\n instance.exposed = {};\n }\n }\n // options that are handled when creating the instance but also need to be\n // applied from mixins\n if (render && instance.render === NOOP) {\n instance.render = render;\n }\n if (inheritAttrs != null) {\n instance.inheritAttrs = inheritAttrs;\n }\n // asset options.\n if (components)\n instance.components = components;\n if (directives)\n instance.directives = directives;\n}\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP, unwrapRef = false) {\n if (isArray(injectOptions)) {\n injectOptions = normalizeInject(injectOptions);\n }\n for (const key in injectOptions) {\n const opt = injectOptions[key];\n let injected;\n if (isObject(opt)) {\n if ('default' in opt) {\n injected = inject(opt.from || key, opt.default, true /* treat default function as factory */);\n }\n else {\n injected = inject(opt.from || key);\n }\n }\n else {\n injected = inject(opt);\n }\n if (isRef(injected)) {\n // TODO remove the check in 3.3\n if (unwrapRef) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => injected.value,\n set: v => (injected.value = v)\n });\n }\n else {\n if ((process.env.NODE_ENV !== 'production')) {\n warn(`injected property \"${key}\" is a ref and will be auto-unwrapped ` +\n `and no longer needs \\`.value\\` in the next minor release. ` +\n `To opt-in to the new behavior now, ` +\n `set \\`app.config.unwrapInjectedRef = true\\` (this config is ` +\n `temporary and will not be needed in the future.)`);\n }\n ctx[key] = injected;\n }\n }\n else {\n ctx[key] = injected;\n }\n if ((process.env.NODE_ENV !== 'production')) {\n checkDuplicateProperties(\"Inject\" /* OptionTypes.INJECT */, key);\n }\n }\n}\nfunction callHook(hook, instance, type) {\n callWithAsyncErrorHandling(isArray(hook)\n ? hook.map(h => h.bind(instance.proxy))\n : hook.bind(instance.proxy), instance, type);\n}\nfunction createWatcher(raw, ctx, publicThis, key) {\n const getter = key.includes('.')\n ? createPathGetter(publicThis, key)\n : () => publicThis[key];\n if (isString(raw)) {\n const handler = ctx[raw];\n if (isFunction(handler)) {\n watch(getter, handler);\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`Invalid watch handler specified by key \"${raw}\"`, handler);\n }\n }\n else if (isFunction(raw)) {\n watch(getter, raw.bind(publicThis));\n }\n else if (isObject(raw)) {\n if (isArray(raw)) {\n raw.forEach(r => createWatcher(r, ctx, publicThis, key));\n }\n else {\n const handler = isFunction(raw.handler)\n ? raw.handler.bind(publicThis)\n : ctx[raw.handler];\n if (isFunction(handler)) {\n watch(getter, handler, raw);\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\n }\n }\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`Invalid watch option: \"${key}\"`, raw);\n }\n}\n/**\n * Resolve merged options and cache it on the component.\n * This is done only once per-component since the merging does not involve\n * instances.\n */\nfunction resolveMergedOptions(instance) {\n const base = instance.type;\n const { mixins, extends: extendsOptions } = base;\n const { mixins: globalMixins, optionsCache: cache, config: { optionMergeStrategies } } = instance.appContext;\n const cached = cache.get(base);\n let resolved;\n if (cached) {\n resolved = cached;\n }\n else if (!globalMixins.length && !mixins && !extendsOptions) {\n {\n resolved = base;\n }\n }\n else {\n resolved = {};\n if (globalMixins.length) {\n globalMixins.forEach(m => mergeOptions(resolved, m, optionMergeStrategies, true));\n }\n mergeOptions(resolved, base, optionMergeStrategies);\n }\n if (isObject(base)) {\n cache.set(base, resolved);\n }\n return resolved;\n}\nfunction mergeOptions(to, from, strats, asMixin = false) {\n const { mixins, extends: extendsOptions } = from;\n if (extendsOptions) {\n mergeOptions(to, extendsOptions, strats, true);\n }\n if (mixins) {\n mixins.forEach((m) => mergeOptions(to, m, strats, true));\n }\n for (const key in from) {\n if (asMixin && key === 'expose') {\n (process.env.NODE_ENV !== 'production') &&\n warn(`\"expose\" option is ignored when declared in mixins or extends. ` +\n `It should only be declared in the base component itself.`);\n }\n else {\n const strat = internalOptionMergeStrats[key] || (strats && strats[key]);\n to[key] = strat ? strat(to[key], from[key]) : from[key];\n }\n }\n return to;\n}\nconst internalOptionMergeStrats = {\n data: mergeDataFn,\n props: mergeObjectOptions,\n emits: mergeObjectOptions,\n // objects\n methods: mergeObjectOptions,\n computed: mergeObjectOptions,\n // lifecycle\n beforeCreate: mergeAsArray,\n created: mergeAsArray,\n beforeMount: mergeAsArray,\n mounted: mergeAsArray,\n beforeUpdate: mergeAsArray,\n updated: mergeAsArray,\n beforeDestroy: mergeAsArray,\n beforeUnmount: mergeAsArray,\n destroyed: mergeAsArray,\n unmounted: mergeAsArray,\n activated: mergeAsArray,\n deactivated: mergeAsArray,\n errorCaptured: mergeAsArray,\n serverPrefetch: mergeAsArray,\n // assets\n components: mergeObjectOptions,\n directives: mergeObjectOptions,\n // watch\n watch: mergeWatchOptions,\n // provide / inject\n provide: mergeDataFn,\n inject: mergeInject\n};\nfunction mergeDataFn(to, from) {\n if (!from) {\n return to;\n }\n if (!to) {\n return from;\n }\n return function mergedDataFn() {\n return (extend)(isFunction(to) ? to.call(this, this) : to, isFunction(from) ? from.call(this, this) : from);\n };\n}\nfunction mergeInject(to, from) {\n return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n}\nfunction normalizeInject(raw) {\n if (isArray(raw)) {\n const res = {};\n for (let i = 0; i < raw.length; i++) {\n res[raw[i]] = raw[i];\n }\n return res;\n }\n return raw;\n}\nfunction mergeAsArray(to, from) {\n return to ? [...new Set([].concat(to, from))] : from;\n}\nfunction mergeObjectOptions(to, from) {\n return to ? extend(extend(Object.create(null), to), from) : from;\n}\nfunction mergeWatchOptions(to, from) {\n if (!to)\n return from;\n if (!from)\n return to;\n const merged = extend(Object.create(null), to);\n for (const key in from) {\n merged[key] = mergeAsArray(to[key], from[key]);\n }\n return merged;\n}\n\nfunction initProps(instance, rawProps, isStateful, // result of bitwise flag comparison\nisSSR = false) {\n const props = {};\n const attrs = {};\n def(attrs, InternalObjectKey, 1);\n instance.propsDefaults = Object.create(null);\n setFullProps(instance, rawProps, props, attrs);\n // ensure all declared prop keys are present\n for (const key in instance.propsOptions[0]) {\n if (!(key in props)) {\n props[key] = undefined;\n }\n }\n // validation\n if ((process.env.NODE_ENV !== 'production')) {\n validateProps(rawProps || {}, props, instance);\n }\n if (isStateful) {\n // stateful\n instance.props = isSSR ? props : shallowReactive(props);\n }\n else {\n if (!instance.type.props) {\n // functional w/ optional props, props === attrs\n instance.props = attrs;\n }\n else {\n // functional w/ declared props\n instance.props = props;\n }\n }\n instance.attrs = attrs;\n}\nfunction isInHmrContext(instance) {\n while (instance) {\n if (instance.type.__hmrId)\n return true;\n instance = instance.parent;\n }\n}\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\n const { props, attrs, vnode: { patchFlag } } = instance;\n const rawCurrentProps = toRaw(props);\n const [options] = instance.propsOptions;\n let hasAttrsChanged = false;\n if (\n // always force full diff in dev\n // - #1942 if hmr is enabled with sfc component\n // - vite#872 non-sfc component used by sfc component\n !((process.env.NODE_ENV !== 'production') && isInHmrContext(instance)) &&\n (optimized || patchFlag > 0) &&\n !(patchFlag & 16 /* PatchFlags.FULL_PROPS */)) {\n if (patchFlag & 8 /* PatchFlags.PROPS */) {\n // Compiler-generated props & no keys change, just set the updated\n // the props.\n const propsToUpdate = instance.vnode.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n let key = propsToUpdate[i];\n // skip if the prop key is a declared emit event listener\n if (isEmitListener(instance.emitsOptions, key)) {\n continue;\n }\n // PROPS flag guarantees rawProps to be non-null\n const value = rawProps[key];\n if (options) {\n // attr / props separation was done on init and will be consistent\n // in this code path, so just check if attrs have it.\n if (hasOwn(attrs, key)) {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n else {\n const camelizedKey = camelize(key);\n props[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance, false /* isAbsent */);\n }\n }\n else {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n }\n else {\n // full props update.\n if (setFullProps(instance, rawProps, props, attrs)) {\n hasAttrsChanged = true;\n }\n // in case of dynamic props, check if we need to delete keys from\n // the props object\n let kebabKey;\n for (const key in rawCurrentProps) {\n if (!rawProps ||\n // for camelCase\n (!hasOwn(rawProps, key) &&\n // it's possible the original props was passed in as kebab-case\n // and converted to camelCase (#955)\n ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey)))) {\n if (options) {\n if (rawPrevProps &&\n // for camelCase\n (rawPrevProps[key] !== undefined ||\n // for kebab-case\n rawPrevProps[kebabKey] !== undefined)) {\n props[key] = resolvePropValue(options, rawCurrentProps, key, undefined, instance, true /* isAbsent */);\n }\n }\n else {\n delete props[key];\n }\n }\n }\n // in the case of functional component w/o props declaration, props and\n // attrs point to the same object so it should already have been updated.\n if (attrs !== rawCurrentProps) {\n for (const key in attrs) {\n if (!rawProps ||\n (!hasOwn(rawProps, key) &&\n (!false ))) {\n delete attrs[key];\n hasAttrsChanged = true;\n }\n }\n }\n }\n // trigger updates for $attrs in case it's used in component slots\n if (hasAttrsChanged) {\n trigger(instance, \"set\" /* TriggerOpTypes.SET */, '$attrs');\n }\n if ((process.env.NODE_ENV !== 'production')) {\n validateProps(rawProps || {}, props, instance);\n }\n}\nfunction setFullProps(instance, rawProps, props, attrs) {\n const [options, needCastKeys] = instance.propsOptions;\n let hasAttrsChanged = false;\n let rawCastValues;\n if (rawProps) {\n for (let key in rawProps) {\n // key, ref are reserved and never passed down\n if (isReservedProp(key)) {\n continue;\n }\n const value = rawProps[key];\n // prop option names are camelized during normalization, so to support\n // kebab -> camel conversion here we need to camelize the key.\n let camelKey;\n if (options && hasOwn(options, (camelKey = camelize(key)))) {\n if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n props[camelKey] = value;\n }\n else {\n (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n }\n }\n else if (!isEmitListener(instance.emitsOptions, key)) {\n if (!(key in attrs) || value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n if (needCastKeys) {\n const rawCurrentProps = toRaw(props);\n const castValues = rawCastValues || EMPTY_OBJ;\n for (let i = 0; i < needCastKeys.length; i++) {\n const key = needCastKeys[i];\n props[key] = resolvePropValue(options, rawCurrentProps, key, castValues[key], instance, !hasOwn(castValues, key));\n }\n }\n return hasAttrsChanged;\n}\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\n const opt = options[key];\n if (opt != null) {\n const hasDefault = hasOwn(opt, 'default');\n // default values\n if (hasDefault && value === undefined) {\n const defaultValue = opt.default;\n if (opt.type !== Function && isFunction(defaultValue)) {\n const { propsDefaults } = instance;\n if (key in propsDefaults) {\n value = propsDefaults[key];\n }\n else {\n setCurrentInstance(instance);\n value = propsDefaults[key] = defaultValue.call(null, props);\n unsetCurrentInstance();\n }\n }\n else {\n value = defaultValue;\n }\n }\n // boolean casting\n if (opt[0 /* BooleanFlags.shouldCast */]) {\n if (isAbsent && !hasDefault) {\n value = false;\n }\n else if (opt[1 /* BooleanFlags.shouldCastTrue */] &&\n (value === '' || value === hyphenate(key))) {\n value = true;\n }\n }\n }\n return value;\n}\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n const cache = appContext.propsCache;\n const cached = cache.get(comp);\n if (cached) {\n return cached;\n }\n const raw = comp.props;\n const normalized = {};\n const needCastKeys = [];\n // apply mixin/extends props\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendProps = (raw) => {\n hasExtends = true;\n const [props, keys] = normalizePropsOptions(raw, appContext, true);\n extend(normalized, props);\n if (keys)\n needCastKeys.push(...keys);\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendProps);\n }\n if (comp.extends) {\n extendProps(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendProps);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, EMPTY_ARR);\n }\n return EMPTY_ARR;\n }\n if (isArray(raw)) {\n for (let i = 0; i < raw.length; i++) {\n if ((process.env.NODE_ENV !== 'production') && !isString(raw[i])) {\n warn(`props must be strings when using array syntax.`, raw[i]);\n }\n const normalizedKey = camelize(raw[i]);\n if (validatePropName(normalizedKey)) {\n normalized[normalizedKey] = EMPTY_OBJ;\n }\n }\n }\n else if (raw) {\n if ((process.env.NODE_ENV !== 'production') && !isObject(raw)) {\n warn(`invalid props options`, raw);\n }\n for (const key in raw) {\n const normalizedKey = camelize(key);\n if (validatePropName(normalizedKey)) {\n const opt = raw[key];\n const prop = (normalized[normalizedKey] =\n isArray(opt) || isFunction(opt) ? { type: opt } : Object.assign({}, opt));\n if (prop) {\n const booleanIndex = getTypeIndex(Boolean, prop.type);\n const stringIndex = getTypeIndex(String, prop.type);\n prop[0 /* BooleanFlags.shouldCast */] = booleanIndex > -1;\n prop[1 /* BooleanFlags.shouldCastTrue */] =\n stringIndex < 0 || booleanIndex < stringIndex;\n // if the prop needs boolean casting or default value\n if (booleanIndex > -1 || hasOwn(prop, 'default')) {\n needCastKeys.push(normalizedKey);\n }\n }\n }\n }\n }\n const res = [normalized, needCastKeys];\n if (isObject(comp)) {\n cache.set(comp, res);\n }\n return res;\n}\nfunction validatePropName(key) {\n if (key[0] !== '$') {\n return true;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`Invalid prop name: \"${key}\" is a reserved property.`);\n }\n return false;\n}\n// use function string name to check type constructors\n// so that it works across vms / iframes.\nfunction getType(ctor) {\n const match = ctor && ctor.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ctor === null ? 'null' : '';\n}\nfunction isSameType(a, b) {\n return getType(a) === getType(b);\n}\nfunction getTypeIndex(type, expectedTypes) {\n if (isArray(expectedTypes)) {\n return expectedTypes.findIndex(t => isSameType(t, type));\n }\n else if (isFunction(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1;\n }\n return -1;\n}\n/**\n * dev only\n */\nfunction validateProps(rawProps, props, instance) {\n const resolvedValues = toRaw(props);\n const options = instance.propsOptions[0];\n for (const key in options) {\n let opt = options[key];\n if (opt == null)\n continue;\n validateProp(key, resolvedValues[key], opt, !hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key)));\n }\n}\n/**\n * dev only\n */\nfunction validateProp(name, value, prop, isAbsent) {\n const { type, required, validator } = prop;\n // required!\n if (required && isAbsent) {\n warn('Missing required prop: \"' + name + '\"');\n return;\n }\n // missing but optional\n if (value == null && !prop.required) {\n return;\n }\n // type check\n if (type != null && type !== true) {\n let isValid = false;\n const types = isArray(type) ? type : [type];\n const expectedTypes = [];\n // value is valid as long as one of the specified types match\n for (let i = 0; i < types.length && !isValid; i++) {\n const { valid, expectedType } = assertType(value, types[i]);\n expectedTypes.push(expectedType || '');\n isValid = valid;\n }\n if (!isValid) {\n warn(getInvalidTypeMessage(name, value, expectedTypes));\n return;\n }\n }\n // custom validator\n if (validator && !validator(value)) {\n warn('Invalid prop: custom validator check failed for prop \"' + name + '\".');\n }\n}\nconst isSimpleType = /*#__PURE__*/ makeMap('String,Number,Boolean,Function,Symbol,BigInt');\n/**\n * dev only\n */\nfunction assertType(value, type) {\n let valid;\n const expectedType = getType(type);\n if (isSimpleType(expectedType)) {\n const t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n }\n else if (expectedType === 'Object') {\n valid = isObject(value);\n }\n else if (expectedType === 'Array') {\n valid = isArray(value);\n }\n else if (expectedType === 'null') {\n valid = value === null;\n }\n else {\n valid = value instanceof type;\n }\n return {\n valid,\n expectedType\n };\n}\n/**\n * dev only\n */\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n let message = `Invalid prop: type check failed for prop \"${name}\".` +\n ` Expected ${expectedTypes.map(capitalize).join(' | ')}`;\n const expectedType = expectedTypes[0];\n const receivedType = toRawType(value);\n const expectedValue = styleValue(value, expectedType);\n const receivedValue = styleValue(value, receivedType);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n !isBoolean(expectedType, receivedType)) {\n message += ` with value ${expectedValue}`;\n }\n message += `, got ${receivedType} `;\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += `with value ${receivedValue}.`;\n }\n return message;\n}\n/**\n * dev only\n */\nfunction styleValue(value, type) {\n if (type === 'String') {\n return `\"${value}\"`;\n }\n else if (type === 'Number') {\n return `${Number(value)}`;\n }\n else {\n return `${value}`;\n }\n}\n/**\n * dev only\n */\nfunction isExplicable(type) {\n const explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(elem => type.toLowerCase() === elem);\n}\n/**\n * dev only\n */\nfunction isBoolean(...args) {\n return args.some(elem => elem.toLowerCase() === 'boolean');\n}\n\nconst isInternalKey = (key) => key[0] === '_' || key === '$stable';\nconst normalizeSlotValue = (value) => isArray(value)\n ? value.map(normalizeVNode)\n : [normalizeVNode(value)];\nconst normalizeSlot = (key, rawSlot, ctx) => {\n if (rawSlot._n) {\n // already normalized - #5353\n return rawSlot;\n }\n const normalized = withCtx((...args) => {\n if ((process.env.NODE_ENV !== 'production') && currentInstance) {\n warn(`Slot \"${key}\" invoked outside of the render function: ` +\n `this will not track dependencies used in the slot. ` +\n `Invoke the slot function inside the render function instead.`);\n }\n return normalizeSlotValue(rawSlot(...args));\n }, ctx);\n normalized._c = false;\n return normalized;\n};\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\n const ctx = rawSlots._ctx;\n for (const key in rawSlots) {\n if (isInternalKey(key))\n continue;\n const value = rawSlots[key];\n if (isFunction(value)) {\n slots[key] = normalizeSlot(key, value, ctx);\n }\n else if (value != null) {\n if ((process.env.NODE_ENV !== 'production') &&\n !(false )) {\n warn(`Non-function value encountered for slot \"${key}\". ` +\n `Prefer function slots for better performance.`);\n }\n const normalized = normalizeSlotValue(value);\n slots[key] = () => normalized;\n }\n }\n};\nconst normalizeVNodeSlots = (instance, children) => {\n if ((process.env.NODE_ENV !== 'production') &&\n !isKeepAlive(instance.vnode) &&\n !(false )) {\n warn(`Non-function value encountered for default slot. ` +\n `Prefer function slots for better performance.`);\n }\n const normalized = normalizeSlotValue(children);\n instance.slots.default = () => normalized;\n};\nconst initSlots = (instance, children) => {\n if (instance.vnode.shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */) {\n const type = children._;\n if (type) {\n // users can get the shallow readonly version of the slots object through `this.$slots`,\n // we should avoid the proxy object polluting the slots of the internal instance\n instance.slots = toRaw(children);\n // make compiler marker non-enumerable\n def(children, '_', type);\n }\n else {\n normalizeObjectSlots(children, (instance.slots = {}));\n }\n }\n else {\n instance.slots = {};\n if (children) {\n normalizeVNodeSlots(instance, children);\n }\n }\n def(instance.slots, InternalObjectKey, 1);\n};\nconst updateSlots = (instance, children, optimized) => {\n const { vnode, slots } = instance;\n let needDeletionCheck = true;\n let deletionComparisonTarget = EMPTY_OBJ;\n if (vnode.shapeFlag & 32 /* ShapeFlags.SLOTS_CHILDREN */) {\n const type = children._;\n if (type) {\n // compiled slots.\n if ((process.env.NODE_ENV !== 'production') && isHmrUpdating) {\n // Parent was HMR updated so slot content may have changed.\n // force update slots and mark instance for hmr as well\n extend(slots, children);\n }\n else if (optimized && type === 1 /* SlotFlags.STABLE */) {\n // compiled AND stable.\n // no need to update, and skip stale slots removal.\n needDeletionCheck = false;\n }\n else {\n // compiled but dynamic (v-if/v-for on slots) - update slots, but skip\n // normalization.\n extend(slots, children);\n // #2893\n // when rendering the optimized slots by manually written render function,\n // we need to delete the `slots._` flag if necessary to make subsequent updates reliable,\n // i.e. let the `renderSlot` create the bailed Fragment\n if (!optimized && type === 1 /* SlotFlags.STABLE */) {\n delete slots._;\n }\n }\n }\n else {\n needDeletionCheck = !children.$stable;\n normalizeObjectSlots(children, slots);\n }\n deletionComparisonTarget = children;\n }\n else if (children) {\n // non slot object children (direct value) passed to a component\n normalizeVNodeSlots(instance, children);\n deletionComparisonTarget = { default: 1 };\n }\n // delete stale slots\n if (needDeletionCheck) {\n for (const key in slots) {\n if (!isInternalKey(key) && !(key in deletionComparisonTarget)) {\n delete slots[key];\n }\n }\n }\n};\n\nfunction createAppContext() {\n return {\n app: null,\n config: {\n isNativeTag: NO,\n performance: false,\n globalProperties: {},\n optionMergeStrategies: {},\n errorHandler: undefined,\n warnHandler: undefined,\n compilerOptions: {}\n },\n mixins: [],\n components: {},\n directives: {},\n provides: Object.create(null),\n optionsCache: new WeakMap(),\n propsCache: new WeakMap(),\n emitsCache: new WeakMap()\n };\n}\nlet uid = 0;\nfunction createAppAPI(render, hydrate) {\n return function createApp(rootComponent, rootProps = null) {\n if (!isFunction(rootComponent)) {\n rootComponent = Object.assign({}, rootComponent);\n }\n if (rootProps != null && !isObject(rootProps)) {\n (process.env.NODE_ENV !== 'production') && warn(`root props passed to app.mount() must be an object.`);\n rootProps = null;\n }\n const context = createAppContext();\n const installedPlugins = new Set();\n let isMounted = false;\n const app = (context.app = {\n _uid: uid++,\n _component: rootComponent,\n _props: rootProps,\n _container: null,\n _context: context,\n _instance: null,\n version,\n get config() {\n return context.config;\n },\n set config(v) {\n if ((process.env.NODE_ENV !== 'production')) {\n warn(`app.config cannot be replaced. Modify individual options instead.`);\n }\n },\n use(plugin, ...options) {\n if (installedPlugins.has(plugin)) {\n (process.env.NODE_ENV !== 'production') && warn(`Plugin has already been applied to target app.`);\n }\n else if (plugin && isFunction(plugin.install)) {\n installedPlugins.add(plugin);\n plugin.install(app, ...options);\n }\n else if (isFunction(plugin)) {\n installedPlugins.add(plugin);\n plugin(app, ...options);\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`A plugin must either be a function or an object with an \"install\" ` +\n `function.`);\n }\n return app;\n },\n mixin(mixin) {\n if (__VUE_OPTIONS_API__) {\n if (!context.mixins.includes(mixin)) {\n context.mixins.push(mixin);\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn('Mixin has already been applied to target app' +\n (mixin.name ? `: ${mixin.name}` : ''));\n }\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn('Mixins are only available in builds supporting Options API');\n }\n return app;\n },\n component(name, component) {\n if ((process.env.NODE_ENV !== 'production')) {\n validateComponentName(name, context.config);\n }\n if (!component) {\n return context.components[name];\n }\n if ((process.env.NODE_ENV !== 'production') && context.components[name]) {\n warn(`Component \"${name}\" has already been registered in target app.`);\n }\n context.components[name] = component;\n return app;\n },\n directive(name, directive) {\n if ((process.env.NODE_ENV !== 'production')) {\n validateDirectiveName(name);\n }\n if (!directive) {\n return context.directives[name];\n }\n if ((process.env.NODE_ENV !== 'production') && context.directives[name]) {\n warn(`Directive \"${name}\" has already been registered in target app.`);\n }\n context.directives[name] = directive;\n return app;\n },\n mount(rootContainer, isHydrate, isSVG) {\n if (!isMounted) {\n // #5571\n if ((process.env.NODE_ENV !== 'production') && rootContainer.__vue_app__) {\n warn(`There is already an app instance mounted on the host container.\\n` +\n ` If you want to mount another app on the same host container,` +\n ` you need to unmount the previous app by calling \\`app.unmount()\\` first.`);\n }\n const vnode = createVNode(rootComponent, rootProps);\n // store app context on the root VNode.\n // this will be set on the root instance on initial mount.\n vnode.appContext = context;\n // HMR root reload\n if ((process.env.NODE_ENV !== 'production')) {\n context.reload = () => {\n render(cloneVNode(vnode), rootContainer, isSVG);\n };\n }\n if (isHydrate && hydrate) {\n hydrate(vnode, rootContainer);\n }\n else {\n render(vnode, rootContainer, isSVG);\n }\n isMounted = true;\n app._container = rootContainer;\n rootContainer.__vue_app__ = app;\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n app._instance = vnode.component;\n devtoolsInitApp(app, version);\n }\n return getExposeProxy(vnode.component) || vnode.component.proxy;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`App has already been mounted.\\n` +\n `If you want to remount the same app, move your app creation logic ` +\n `into a factory function and create fresh app instances for each ` +\n `mount - e.g. \\`const createMyApp = () => createApp(App)\\``);\n }\n },\n unmount() {\n if (isMounted) {\n render(null, app._container);\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n app._instance = null;\n devtoolsUnmountApp(app);\n }\n delete app._container.__vue_app__;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`Cannot unmount an app that is not mounted.`);\n }\n },\n provide(key, value) {\n if ((process.env.NODE_ENV !== 'production') && key in context.provides) {\n warn(`App already provides property with key \"${String(key)}\". ` +\n `It will be overwritten with the new value.`);\n }\n context.provides[key] = value;\n return app;\n }\n });\n return app;\n };\n}\n\n/**\n * Function for handling a template ref\n */\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n if (isArray(rawRef)) {\n rawRef.forEach((r, i) => setRef(r, oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), parentSuspense, vnode, isUnmount));\n return;\n }\n if (isAsyncWrapper(vnode) && !isUnmount) {\n // when mounting async components, nothing needs to be done,\n // because the template ref is forwarded to inner component\n return;\n }\n const refValue = vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */\n ? getExposeProxy(vnode.component) || vnode.component.proxy\n : vnode.el;\n const value = isUnmount ? null : refValue;\n const { i: owner, r: ref } = rawRef;\n if ((process.env.NODE_ENV !== 'production') && !owner) {\n warn(`Missing ref owner context. ref cannot be used on hoisted vnodes. ` +\n `A vnode with ref must be created inside the render function.`);\n return;\n }\n const oldRef = oldRawRef && oldRawRef.r;\n const refs = owner.refs === EMPTY_OBJ ? (owner.refs = {}) : owner.refs;\n const setupState = owner.setupState;\n // dynamic ref changed. unset old ref\n if (oldRef != null && oldRef !== ref) {\n if (isString(oldRef)) {\n refs[oldRef] = null;\n if (hasOwn(setupState, oldRef)) {\n setupState[oldRef] = null;\n }\n }\n else if (isRef(oldRef)) {\n oldRef.value = null;\n }\n }\n if (isFunction(ref)) {\n callWithErrorHandling(ref, owner, 12 /* ErrorCodes.FUNCTION_REF */, [value, refs]);\n }\n else {\n const _isString = isString(ref);\n const _isRef = isRef(ref);\n if (_isString || _isRef) {\n const doSet = () => {\n if (rawRef.f) {\n const existing = _isString\n ? hasOwn(setupState, ref)\n ? setupState[ref]\n : refs[ref]\n : ref.value;\n if (isUnmount) {\n isArray(existing) && remove(existing, refValue);\n }\n else {\n if (!isArray(existing)) {\n if (_isString) {\n refs[ref] = [refValue];\n if (hasOwn(setupState, ref)) {\n setupState[ref] = refs[ref];\n }\n }\n else {\n ref.value = [refValue];\n if (rawRef.k)\n refs[rawRef.k] = ref.value;\n }\n }\n else if (!existing.includes(refValue)) {\n existing.push(refValue);\n }\n }\n }\n else if (_isString) {\n refs[ref] = value;\n if (hasOwn(setupState, ref)) {\n setupState[ref] = value;\n }\n }\n else if (_isRef) {\n ref.value = value;\n if (rawRef.k)\n refs[rawRef.k] = value;\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn('Invalid template ref type:', ref, `(${typeof ref})`);\n }\n };\n if (value) {\n doSet.id = -1;\n queuePostRenderEffect(doSet, parentSuspense);\n }\n else {\n doSet();\n }\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn('Invalid template ref type:', ref, `(${typeof ref})`);\n }\n }\n}\n\nlet hasMismatch = false;\nconst isSVGContainer = (container) => /svg/.test(container.namespaceURI) && container.tagName !== 'foreignObject';\nconst isComment = (node) => node.nodeType === 8 /* DOMNodeTypes.COMMENT */;\n// Note: hydration is DOM-specific\n// But we have to place it in core due to tight coupling with core - splitting\n// it out creates a ton of unnecessary complexity.\n// Hydration also depends on some renderer internal logic which needs to be\n// passed in via arguments.\nfunction createHydrationFunctions(rendererInternals) {\n const { mt: mountComponent, p: patch, o: { patchProp, createText, nextSibling, parentNode, remove, insert, createComment } } = rendererInternals;\n const hydrate = (vnode, container) => {\n if (!container.hasChildNodes()) {\n (process.env.NODE_ENV !== 'production') &&\n warn(`Attempting to hydrate existing markup but container is empty. ` +\n `Performing full mount instead.`);\n patch(null, vnode, container);\n flushPostFlushCbs();\n container._vnode = vnode;\n return;\n }\n hasMismatch = false;\n hydrateNode(container.firstChild, vnode, null, null, null);\n flushPostFlushCbs();\n container._vnode = vnode;\n if (hasMismatch && !false) {\n // this error should show up in production\n console.error(`Hydration completed but contains mismatches.`);\n }\n };\n const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n const isFragmentStart = isComment(node) && node.data === '[';\n const onMismatch = () => handleMismatch(node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragmentStart);\n const { type, ref, shapeFlag, patchFlag } = vnode;\n let domType = node.nodeType;\n vnode.el = node;\n if (patchFlag === -2 /* PatchFlags.BAIL */) {\n optimized = false;\n vnode.dynamicChildren = null;\n }\n let nextNode = null;\n switch (type) {\n case Text:\n if (domType !== 3 /* DOMNodeTypes.TEXT */) {\n // #5728 empty text node inside a slot can cause hydration failure\n // because the server rendered HTML won't contain a text node\n if (vnode.children === '') {\n insert((vnode.el = createText('')), parentNode(node), node);\n nextNode = node;\n }\n else {\n nextNode = onMismatch();\n }\n }\n else {\n if (node.data !== vnode.children) {\n hasMismatch = true;\n (process.env.NODE_ENV !== 'production') &&\n warn(`Hydration text mismatch:` +\n `\\n- Client: ${JSON.stringify(node.data)}` +\n `\\n- Server: ${JSON.stringify(vnode.children)}`);\n node.data = vnode.children;\n }\n nextNode = nextSibling(node);\n }\n break;\n case Comment:\n if (domType !== 8 /* DOMNodeTypes.COMMENT */ || isFragmentStart) {\n nextNode = onMismatch();\n }\n else {\n nextNode = nextSibling(node);\n }\n break;\n case Static:\n if (isFragmentStart) {\n // entire template is static but SSRed as a fragment\n node = nextSibling(node);\n domType = node.nodeType;\n }\n if (domType === 1 /* DOMNodeTypes.ELEMENT */ || domType === 3 /* DOMNodeTypes.TEXT */) {\n // determine anchor, adopt content\n nextNode = node;\n // if the static vnode has its content stripped during build,\n // adopt it from the server-rendered HTML.\n const needToAdoptContent = !vnode.children.length;\n for (let i = 0; i < vnode.staticCount; i++) {\n if (needToAdoptContent)\n vnode.children +=\n nextNode.nodeType === 1 /* DOMNodeTypes.ELEMENT */\n ? nextNode.outerHTML\n : nextNode.data;\n if (i === vnode.staticCount - 1) {\n vnode.anchor = nextNode;\n }\n nextNode = nextSibling(nextNode);\n }\n return isFragmentStart ? nextSibling(nextNode) : nextNode;\n }\n else {\n onMismatch();\n }\n break;\n case Fragment:\n if (!isFragmentStart) {\n nextNode = onMismatch();\n }\n else {\n nextNode = hydrateFragment(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\n }\n break;\n default:\n if (shapeFlag & 1 /* ShapeFlags.ELEMENT */) {\n if (domType !== 1 /* DOMNodeTypes.ELEMENT */ ||\n vnode.type.toLowerCase() !==\n node.tagName.toLowerCase()) {\n nextNode = onMismatch();\n }\n else {\n nextNode = hydrateElement(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\n }\n }\n else if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n // when setting up the render effect, if the initial vnode already\n // has .el set, the component will perform hydration instead of mount\n // on its sub-tree.\n vnode.slotScopeIds = slotScopeIds;\n const container = parentNode(node);\n mountComponent(vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), optimized);\n // component may be async, so in the case of fragments we cannot rely\n // on component's rendered output to determine the end of the fragment\n // instead, we do a lookahead to find the end anchor node.\n nextNode = isFragmentStart\n ? locateClosingAsyncAnchor(node)\n : nextSibling(node);\n // #4293 teleport as component root\n if (nextNode &&\n isComment(nextNode) &&\n nextNode.data === 'teleport end') {\n nextNode = nextSibling(nextNode);\n }\n // #3787\n // if component is async, it may get moved / unmounted before its\n // inner component is loaded, so we need to give it a placeholder\n // vnode that matches its adopted DOM.\n if (isAsyncWrapper(vnode)) {\n let subTree;\n if (isFragmentStart) {\n subTree = createVNode(Fragment);\n subTree.anchor = nextNode\n ? nextNode.previousSibling\n : container.lastChild;\n }\n else {\n subTree =\n node.nodeType === 3 ? createTextVNode('') : createVNode('div');\n }\n subTree.el = node;\n vnode.component.subTree = subTree;\n }\n }\n else if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n if (domType !== 8 /* DOMNodeTypes.COMMENT */) {\n nextNode = onMismatch();\n }\n else {\n nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, rendererInternals, hydrateChildren);\n }\n }\n else if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n nextNode = vnode.type.hydrate(node, vnode, parentComponent, parentSuspense, isSVGContainer(parentNode(node)), slotScopeIds, optimized, rendererInternals, hydrateNode);\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn('Invalid HostVNode type:', type, `(${typeof type})`);\n }\n }\n if (ref != null) {\n setRef(ref, null, parentSuspense, vnode);\n }\n return nextNode;\n };\n const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const { type, props, patchFlag, shapeFlag, dirs } = vnode;\n // #4006 for form elements with non-string v-model value bindings\n // e.g. <option :value=\"obj\">, <input type=\"checkbox\" :true-value=\"1\">\n const forcePatchValue = (type === 'input' && dirs) || type === 'option';\n // skip props & children if this is hoisted static nodes\n // #5405 in dev, always hydrate children for HMR\n if ((process.env.NODE_ENV !== 'production') || forcePatchValue || patchFlag !== -1 /* PatchFlags.HOISTED */) {\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, 'created');\n }\n // props\n if (props) {\n if (forcePatchValue ||\n !optimized ||\n patchFlag & (16 /* PatchFlags.FULL_PROPS */ | 32 /* PatchFlags.HYDRATE_EVENTS */)) {\n for (const key in props) {\n if ((forcePatchValue && key.endsWith('value')) ||\n (isOn(key) && !isReservedProp(key))) {\n patchProp(el, key, null, props[key], false, undefined, parentComponent);\n }\n }\n }\n else if (props.onClick) {\n // Fast path for click listeners (which is most often) to avoid\n // iterating through props.\n patchProp(el, 'onClick', null, props.onClick, false, undefined, parentComponent);\n }\n }\n // vnode / directive hooks\n let vnodeHooks;\n if ((vnodeHooks = props && props.onVnodeBeforeMount)) {\n invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount');\n }\n if ((vnodeHooks = props && props.onVnodeMounted) || dirs) {\n queueEffectWithSuspense(() => {\n vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted');\n }, parentSuspense);\n }\n // children\n if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */ &&\n // skip if element has innerHTML / textContent\n !(props && (props.innerHTML || props.textContent))) {\n let next = hydrateChildren(el.firstChild, vnode, el, parentComponent, parentSuspense, slotScopeIds, optimized);\n let hasWarned = false;\n while (next) {\n hasMismatch = true;\n if ((process.env.NODE_ENV !== 'production') && !hasWarned) {\n warn(`Hydration children mismatch in <${vnode.type}>: ` +\n `server rendered element contains more child nodes than client vdom.`);\n hasWarned = true;\n }\n // The SSRed DOM contains more nodes than it should. Remove them.\n const cur = next;\n next = next.nextSibling;\n remove(cur);\n }\n }\n else if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n if (el.textContent !== vnode.children) {\n hasMismatch = true;\n (process.env.NODE_ENV !== 'production') &&\n warn(`Hydration text content mismatch in <${vnode.type}>:\\n` +\n `- Client: ${el.textContent}\\n` +\n `- Server: ${vnode.children}`);\n el.textContent = vnode.children;\n }\n }\n }\n return el.nextSibling;\n };\n const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!parentVNode.dynamicChildren;\n const children = parentVNode.children;\n const l = children.length;\n let hasWarned = false;\n for (let i = 0; i < l; i++) {\n const vnode = optimized\n ? children[i]\n : (children[i] = normalizeVNode(children[i]));\n if (node) {\n node = hydrateNode(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized);\n }\n else if (vnode.type === Text && !vnode.children) {\n continue;\n }\n else {\n hasMismatch = true;\n if ((process.env.NODE_ENV !== 'production') && !hasWarned) {\n warn(`Hydration children mismatch in <${container.tagName.toLowerCase()}>: ` +\n `server rendered element contains fewer child nodes than client vdom.`);\n hasWarned = true;\n }\n // the SSRed DOM didn't contain enough nodes. Mount the missing ones.\n patch(null, vnode, container, null, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds);\n }\n }\n return node;\n };\n const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds\n ? slotScopeIds.concat(fragmentSlotScopeIds)\n : fragmentSlotScopeIds;\n }\n const container = parentNode(node);\n const next = hydrateChildren(nextSibling(node), vnode, container, parentComponent, parentSuspense, slotScopeIds, optimized);\n if (next && isComment(next) && next.data === ']') {\n return nextSibling((vnode.anchor = next));\n }\n else {\n // fragment didn't hydrate successfully, since we didn't get a end anchor\n // back. This should have led to node/children mismatch warnings.\n hasMismatch = true;\n // since the anchor is missing, we need to create one and insert it\n insert((vnode.anchor = createComment(`]`)), container, next);\n return next;\n }\n };\n const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n hasMismatch = true;\n (process.env.NODE_ENV !== 'production') &&\n warn(`Hydration node mismatch:\\n- Client vnode:`, vnode.type, `\\n- Server rendered DOM:`, node, node.nodeType === 3 /* DOMNodeTypes.TEXT */\n ? `(text)`\n : isComment(node) && node.data === '['\n ? `(start of fragment)`\n : ``);\n vnode.el = null;\n if (isFragment) {\n // remove excessive fragment nodes\n const end = locateClosingAsyncAnchor(node);\n while (true) {\n const next = nextSibling(node);\n if (next && next !== end) {\n remove(next);\n }\n else {\n break;\n }\n }\n }\n const next = nextSibling(node);\n const container = parentNode(node);\n remove(node);\n patch(null, vnode, container, next, parentComponent, parentSuspense, isSVGContainer(container), slotScopeIds);\n return next;\n };\n const locateClosingAsyncAnchor = (node) => {\n let match = 0;\n while (node) {\n node = nextSibling(node);\n if (node && isComment(node)) {\n if (node.data === '[')\n match++;\n if (node.data === ']') {\n if (match === 0) {\n return nextSibling(node);\n }\n else {\n match--;\n }\n }\n }\n }\n return node;\n };\n return [hydrate, hydrateNode];\n}\n\n/* eslint-disable no-restricted-globals */\nlet supported;\nlet perf;\nfunction startMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n perf.mark(`vue-${type}-${instance.uid}`);\n }\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction endMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n const startTag = `vue-${type}-${instance.uid}`;\n const endTag = startTag + `:end`;\n perf.mark(endTag);\n perf.measure(`<${formatComponentName(instance, instance.type)}> ${type}`, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n }\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction isSupported() {\n if (supported !== undefined) {\n return supported;\n }\n if (typeof window !== 'undefined' && window.performance) {\n supported = true;\n perf = window.performance;\n }\n else {\n supported = false;\n }\n return supported;\n}\n\n/**\n * This is only called in esm-bundler builds.\n * It is called when a renderer is created, in `baseCreateRenderer` so that\n * importing runtime-core is side-effects free.\n *\n * istanbul-ignore-next\n */\nfunction initFeatureFlags() {\n const needWarn = [];\n if (typeof __VUE_OPTIONS_API__ !== 'boolean') {\n (process.env.NODE_ENV !== 'production') && needWarn.push(`__VUE_OPTIONS_API__`);\n getGlobalThis().__VUE_OPTIONS_API__ = true;\n }\n if (typeof __VUE_PROD_DEVTOOLS__ !== 'boolean') {\n (process.env.NODE_ENV !== 'production') && needWarn.push(`__VUE_PROD_DEVTOOLS__`);\n getGlobalThis().__VUE_PROD_DEVTOOLS__ = false;\n }\n if ((process.env.NODE_ENV !== 'production') && needWarn.length) {\n const multi = needWarn.length > 1;\n console.warn(`Feature flag${multi ? `s` : ``} ${needWarn.join(', ')} ${multi ? `are` : `is`} not explicitly defined. You are running the esm-bundler build of Vue, ` +\n `which expects these compile-time feature flags to be globally injected ` +\n `via the bundler config in order to get better tree-shaking in the ` +\n `production bundle.\\n\\n` +\n `For more details, see https://link.vuejs.org/feature-flags.`);\n }\n}\n\nconst queuePostRenderEffect = queueEffectWithSuspense\n ;\n/**\n * The createRenderer function accepts two generic arguments:\n * HostNode and HostElement, corresponding to Node and Element types in the\n * host environment. For example, for runtime-dom, HostNode would be the DOM\n * `Node` interface and HostElement would be the DOM `Element` interface.\n *\n * Custom renderers can pass in the platform specific types like this:\n *\n * ``` js\n * const { render, createApp } = createRenderer<Node, Element>({\n * patchProp,\n * ...nodeOps\n * })\n * ```\n */\nfunction createRenderer(options) {\n return baseCreateRenderer(options);\n}\n// Separate API for creating hydration-enabled renderer.\n// Hydration logic is only used when calling this function, making it\n// tree-shakable.\nfunction createHydrationRenderer(options) {\n return baseCreateRenderer(options, createHydrationFunctions);\n}\n// implementation\nfunction baseCreateRenderer(options, createHydrationFns) {\n // compile-time feature flags check\n {\n initFeatureFlags();\n }\n const target = getGlobalThis();\n target.__VUE__ = true;\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);\n }\n const { insert: hostInsert, remove: hostRemove, patchProp: hostPatchProp, createElement: hostCreateElement, createText: hostCreateText, createComment: hostCreateComment, setText: hostSetText, setElementText: hostSetElementText, parentNode: hostParentNode, nextSibling: hostNextSibling, setScopeId: hostSetScopeId = NOOP, insertStaticContent: hostInsertStaticContent } = options;\n // Note: functions inside this closure should use `const xxx = () => {}`\n // style in order to prevent being inlined by minifiers.\n const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, isSVG = false, slotScopeIds = null, optimized = (process.env.NODE_ENV !== 'production') && isHmrUpdating ? false : !!n2.dynamicChildren) => {\n if (n1 === n2) {\n return;\n }\n // patching & not same type, unmount old tree\n if (n1 && !isSameVNodeType(n1, n2)) {\n anchor = getNextHostNode(n1);\n unmount(n1, parentComponent, parentSuspense, true);\n n1 = null;\n }\n if (n2.patchFlag === -2 /* PatchFlags.BAIL */) {\n optimized = false;\n n2.dynamicChildren = null;\n }\n const { type, ref, shapeFlag } = n2;\n switch (type) {\n case Text:\n processText(n1, n2, container, anchor);\n break;\n case Comment:\n processCommentNode(n1, n2, container, anchor);\n break;\n case Static:\n if (n1 == null) {\n mountStaticNode(n2, container, anchor, isSVG);\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n patchStaticNode(n1, n2, container, isSVG);\n }\n break;\n case Fragment:\n processFragment(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n break;\n default:\n if (shapeFlag & 1 /* ShapeFlags.ELEMENT */) {\n processElement(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n else if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n processComponent(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n else if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);\n }\n else if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn('Invalid VNode type:', type, `(${typeof type})`);\n }\n }\n // set ref\n if (ref != null && parentComponent) {\n setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n }\n };\n const processText = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert((n2.el = hostCreateText(n2.children)), container, anchor);\n }\n else {\n const el = (n2.el = n1.el);\n if (n2.children !== n1.children) {\n hostSetText(el, n2.children);\n }\n }\n };\n const processCommentNode = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert((n2.el = hostCreateComment(n2.children || '')), container, anchor);\n }\n else {\n // there's no support for dynamic comments\n n2.el = n1.el;\n }\n };\n const mountStaticNode = (n2, container, anchor, isSVG) => {\n [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG, n2.el, n2.anchor);\n };\n /**\n * Dev / HMR only\n */\n const patchStaticNode = (n1, n2, container, isSVG) => {\n // static nodes are only patched during dev for HMR\n if (n2.children !== n1.children) {\n const anchor = hostNextSibling(n1.anchor);\n // remove existing\n removeStaticNode(n1);\n [n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG);\n }\n else {\n n2.el = n1.el;\n n2.anchor = n1.anchor;\n }\n };\n const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostInsert(el, container, nextSibling);\n el = next;\n }\n hostInsert(anchor, container, nextSibling);\n };\n const removeStaticNode = ({ el, anchor }) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostRemove(el);\n el = next;\n }\n hostRemove(anchor);\n };\n const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n isSVG = isSVG || n2.type === 'svg';\n if (n1 == null) {\n mountElement(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n else {\n patchElement(n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n };\n const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n let el;\n let vnodeHook;\n const { type, props, shapeFlag, transition, dirs } = vnode;\n el = vnode.el = hostCreateElement(vnode.type, isSVG, props && props.is, props);\n // mount children first, since some props may rely on child content\n // being already rendered, e.g. `<select value>`\n if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n hostSetElementText(el, vnode.children);\n }\n else if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n mountChildren(vnode.children, el, null, parentComponent, parentSuspense, isSVG && type !== 'foreignObject', slotScopeIds, optimized);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, 'created');\n }\n // props\n if (props) {\n for (const key in props) {\n if (key !== 'value' && !isReservedProp(key)) {\n hostPatchProp(el, key, null, props[key], isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n }\n }\n /**\n * Special case for setting value on DOM elements:\n * - it can be order-sensitive (e.g. should be set *after* min/max, #2325, #4024)\n * - it needs to be forced (#1471)\n * #2353 proposes adding another renderer option to configure this, but\n * the properties affects are so finite it is worth special casing it\n * here to reduce the complexity. (Special casing it also should not\n * affect non-DOM renderers)\n */\n if ('value' in props) {\n hostPatchProp(el, 'value', null, props.value);\n }\n if ((vnodeHook = props.onVnodeBeforeMount)) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n }\n // scopeId\n setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n Object.defineProperty(el, '__vnode', {\n value: vnode,\n enumerable: false\n });\n Object.defineProperty(el, '__vueParentComponent', {\n value: parentComponent,\n enumerable: false\n });\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount');\n }\n // #1583 For inside suspense + suspense not resolved case, enter hook should call when suspense resolved\n // #1689 For inside suspense + suspense resolved case, just call it\n const needCallTransitionHooks = (!parentSuspense || (parentSuspense && !parentSuspense.pendingBranch)) &&\n transition &&\n !transition.persisted;\n if (needCallTransitionHooks) {\n transition.beforeEnter(el);\n }\n hostInsert(el, container, anchor);\n if ((vnodeHook = props && props.onVnodeMounted) ||\n needCallTransitionHooks ||\n dirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted');\n }, parentSuspense);\n }\n };\n const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n if (scopeId) {\n hostSetScopeId(el, scopeId);\n }\n if (slotScopeIds) {\n for (let i = 0; i < slotScopeIds.length; i++) {\n hostSetScopeId(el, slotScopeIds[i]);\n }\n }\n if (parentComponent) {\n let subTree = parentComponent.subTree;\n if ((process.env.NODE_ENV !== 'production') &&\n subTree.patchFlag > 0 &&\n subTree.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */) {\n subTree =\n filterSingleRoot(subTree.children) || subTree;\n }\n if (vnode === subTree) {\n const parentVNode = parentComponent.vnode;\n setScopeId(el, parentVNode, parentVNode.scopeId, parentVNode.slotScopeIds, parentComponent.parent);\n }\n }\n };\n const mountChildren = (children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, start = 0) => {\n for (let i = start; i < children.length; i++) {\n const child = (children[i] = optimized\n ? cloneIfMounted(children[i])\n : normalizeVNode(children[i]));\n patch(null, child, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n };\n const patchElement = (n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n const el = (n2.el = n1.el);\n let { patchFlag, dynamicChildren, dirs } = n2;\n // #1426 take the old vnode's patch flag into account since user may clone a\n // compiler-generated vnode, which de-opts to FULL_PROPS\n patchFlag |= n1.patchFlag & 16 /* PatchFlags.FULL_PROPS */;\n const oldProps = n1.props || EMPTY_OBJ;\n const newProps = n2.props || EMPTY_OBJ;\n let vnodeHook;\n // disable recurse in beforeUpdate hooks\n parentComponent && toggleRecurse(parentComponent, false);\n if ((vnodeHook = newProps.onVnodeBeforeUpdate)) {\n invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n }\n if (dirs) {\n invokeDirectiveHook(n2, n1, parentComponent, 'beforeUpdate');\n }\n parentComponent && toggleRecurse(parentComponent, true);\n if ((process.env.NODE_ENV !== 'production') && isHmrUpdating) {\n // HMR updated, force full diff\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n const areChildrenSVG = isSVG && n2.type !== 'foreignObject';\n if (dynamicChildren) {\n patchBlockChildren(n1.dynamicChildren, dynamicChildren, el, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds);\n if ((process.env.NODE_ENV !== 'production') && parentComponent && parentComponent.type.__hmrId) {\n traverseStaticChildren(n1, n2);\n }\n }\n else if (!optimized) {\n // full diff\n patchChildren(n1, n2, el, null, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds, false);\n }\n if (patchFlag > 0) {\n // the presence of a patchFlag means this element's render code was\n // generated by the compiler and can take the fast path.\n // in this path old node and new node are guaranteed to have the same shape\n // (i.e. at the exact same position in the source template)\n if (patchFlag & 16 /* PatchFlags.FULL_PROPS */) {\n // element props contain dynamic keys, full diff needed\n patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);\n }\n else {\n // class\n // this flag is matched when the element has dynamic class bindings.\n if (patchFlag & 2 /* PatchFlags.CLASS */) {\n if (oldProps.class !== newProps.class) {\n hostPatchProp(el, 'class', null, newProps.class, isSVG);\n }\n }\n // style\n // this flag is matched when the element has dynamic style bindings\n if (patchFlag & 4 /* PatchFlags.STYLE */) {\n hostPatchProp(el, 'style', oldProps.style, newProps.style, isSVG);\n }\n // props\n // This flag is matched when the element has dynamic prop/attr bindings\n // other than class and style. The keys of dynamic prop/attrs are saved for\n // faster iteration.\n // Note dynamic keys like :[foo]=\"bar\" will cause this optimization to\n // bail out and go through a full diff because we need to unset the old key\n if (patchFlag & 8 /* PatchFlags.PROPS */) {\n // if the flag is present then dynamicProps must be non-null\n const propsToUpdate = n2.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n const key = propsToUpdate[i];\n const prev = oldProps[key];\n const next = newProps[key];\n // #1471 force patch value\n if (next !== prev || key === 'value') {\n hostPatchProp(el, key, prev, next, isSVG, n1.children, parentComponent, parentSuspense, unmountChildren);\n }\n }\n }\n }\n // text\n // This flag is matched when the element has only dynamic text children.\n if (patchFlag & 1 /* PatchFlags.TEXT */) {\n if (n1.children !== n2.children) {\n hostSetElementText(el, n2.children);\n }\n }\n }\n else if (!optimized && dynamicChildren == null) {\n // unoptimized, full diff\n patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);\n }\n if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n dirs && invokeDirectiveHook(n2, n1, parentComponent, 'updated');\n }, parentSuspense);\n }\n };\n // The fast path for blocks.\n const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, isSVG, slotScopeIds) => {\n for (let i = 0; i < newChildren.length; i++) {\n const oldVNode = oldChildren[i];\n const newVNode = newChildren[i];\n // Determine the container (parent element) for the patch.\n const container = \n // oldVNode may be an errored async setup() component inside Suspense\n // which will not have a mounted element\n oldVNode.el &&\n // - In the case of a Fragment, we need to provide the actual parent\n // of the Fragment itself so it can move its children.\n (oldVNode.type === Fragment ||\n // - In the case of different nodes, there is going to be a replacement\n // which also requires the correct parent container\n !isSameVNodeType(oldVNode, newVNode) ||\n // - In the case of a component, it could contain anything.\n oldVNode.shapeFlag & (6 /* ShapeFlags.COMPONENT */ | 64 /* ShapeFlags.TELEPORT */))\n ? hostParentNode(oldVNode.el)\n : // In other cases, the parent container is not actually used so we\n // just pass the block element here to avoid a DOM parentNode call.\n fallbackContainer;\n patch(oldVNode, newVNode, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, true);\n }\n };\n const patchProps = (el, vnode, oldProps, newProps, parentComponent, parentSuspense, isSVG) => {\n if (oldProps !== newProps) {\n if (oldProps !== EMPTY_OBJ) {\n for (const key in oldProps) {\n if (!isReservedProp(key) && !(key in newProps)) {\n hostPatchProp(el, key, oldProps[key], null, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n }\n }\n }\n for (const key in newProps) {\n // empty string is not valid prop\n if (isReservedProp(key))\n continue;\n const next = newProps[key];\n const prev = oldProps[key];\n // defer patching value\n if (next !== prev && key !== 'value') {\n hostPatchProp(el, key, prev, next, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);\n }\n }\n if ('value' in newProps) {\n hostPatchProp(el, 'value', oldProps.value, newProps.value);\n }\n }\n };\n const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n const fragmentStartAnchor = (n2.el = n1 ? n1.el : hostCreateText(''));\n const fragmentEndAnchor = (n2.anchor = n1 ? n1.anchor : hostCreateText(''));\n let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n if ((process.env.NODE_ENV !== 'production') &&\n // #5523 dev root fragment may inherit directives\n (isHmrUpdating || patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */)) {\n // HMR updated / Dev root fragment (w/ comments), force full diff\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n // check if this is a slot fragment with :slotted scope ids\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds\n ? slotScopeIds.concat(fragmentSlotScopeIds)\n : fragmentSlotScopeIds;\n }\n if (n1 == null) {\n hostInsert(fragmentStartAnchor, container, anchor);\n hostInsert(fragmentEndAnchor, container, anchor);\n // a fragment can only have array children\n // since they are either generated by the compiler, or implicitly created\n // from arrays.\n mountChildren(n2.children, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n else {\n if (patchFlag > 0 &&\n patchFlag & 64 /* PatchFlags.STABLE_FRAGMENT */ &&\n dynamicChildren &&\n // #2715 the previous fragment could've been a BAILed one as a result\n // of renderSlot() with no valid children\n n1.dynamicChildren) {\n // a stable fragment (template root or <template v-for>) doesn't need to\n // patch children order, but it may contain dynamicChildren.\n patchBlockChildren(n1.dynamicChildren, dynamicChildren, container, parentComponent, parentSuspense, isSVG, slotScopeIds);\n if ((process.env.NODE_ENV !== 'production') && parentComponent && parentComponent.type.__hmrId) {\n traverseStaticChildren(n1, n2);\n }\n else if (\n // #2080 if the stable fragment has a key, it's a <template v-for> that may\n // get moved around. Make sure all root level vnodes inherit el.\n // #2134 or if it's a component root, it may also get moved around\n // as the component is being moved.\n n2.key != null ||\n (parentComponent && n2 === parentComponent.subTree)) {\n traverseStaticChildren(n1, n2, true /* shallow */);\n }\n }\n else {\n // keyed / unkeyed, or manual fragments.\n // for keyed & unkeyed, since they are compiler generated from v-for,\n // each child is guaranteed to be a block so the fragment will never\n // have dynamicChildren.\n patchChildren(n1, n2, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n }\n };\n const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n n2.slotScopeIds = slotScopeIds;\n if (n1 == null) {\n if (n2.shapeFlag & 512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */) {\n parentComponent.ctx.activate(n2, container, anchor, isSVG, optimized);\n }\n else {\n mountComponent(n2, container, anchor, parentComponent, parentSuspense, isSVG, optimized);\n }\n }\n else {\n updateComponent(n1, n2, optimized);\n }\n };\n const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, isSVG, optimized) => {\n const instance = (initialVNode.component = createComponentInstance(initialVNode, parentComponent, parentSuspense));\n if ((process.env.NODE_ENV !== 'production') && instance.type.__hmrId) {\n registerHMR(instance);\n }\n if ((process.env.NODE_ENV !== 'production')) {\n pushWarningContext(initialVNode);\n startMeasure(instance, `mount`);\n }\n // inject renderer internals for keepAlive\n if (isKeepAlive(initialVNode)) {\n instance.ctx.renderer = internals;\n }\n // resolve props and slots for setup context\n {\n if ((process.env.NODE_ENV !== 'production')) {\n startMeasure(instance, `init`);\n }\n setupComponent(instance);\n if ((process.env.NODE_ENV !== 'production')) {\n endMeasure(instance, `init`);\n }\n }\n // setup() is async. This component relies on async logic to be resolved\n // before proceeding\n if (instance.asyncDep) {\n parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect);\n // Give it a placeholder if this is not hydration\n // TODO handle self-defined fallback\n if (!initialVNode.el) {\n const placeholder = (instance.subTree = createVNode(Comment));\n processCommentNode(null, placeholder, container, anchor);\n }\n return;\n }\n setupRenderEffect(instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized);\n if ((process.env.NODE_ENV !== 'production')) {\n popWarningContext();\n endMeasure(instance, `mount`);\n }\n };\n const updateComponent = (n1, n2, optimized) => {\n const instance = (n2.component = n1.component);\n if (shouldUpdateComponent(n1, n2, optimized)) {\n if (instance.asyncDep &&\n !instance.asyncResolved) {\n // async & still pending - just update props and slots\n // since the component's reactive effect for render isn't set-up yet\n if ((process.env.NODE_ENV !== 'production')) {\n pushWarningContext(n2);\n }\n updateComponentPreRender(instance, n2, optimized);\n if ((process.env.NODE_ENV !== 'production')) {\n popWarningContext();\n }\n return;\n }\n else {\n // normal update\n instance.next = n2;\n // in case the child component is also queued, remove it to avoid\n // double updating the same child component in the same flush.\n invalidateJob(instance.update);\n // instance.update is the reactive effect.\n instance.update();\n }\n }\n else {\n // no update needed. just copy over properties\n n2.el = n1.el;\n instance.vnode = n2;\n }\n };\n const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized) => {\n const componentUpdateFn = () => {\n if (!instance.isMounted) {\n let vnodeHook;\n const { el, props } = initialVNode;\n const { bm, m, parent } = instance;\n const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n toggleRecurse(instance, false);\n // beforeMount hook\n if (bm) {\n invokeArrayFns(bm);\n }\n // onVnodeBeforeMount\n if (!isAsyncWrapperVNode &&\n (vnodeHook = props && props.onVnodeBeforeMount)) {\n invokeVNodeHook(vnodeHook, parent, initialVNode);\n }\n toggleRecurse(instance, true);\n if (el && hydrateNode) {\n // vnode has adopted host node - perform hydration instead of mount.\n const hydrateSubTree = () => {\n if ((process.env.NODE_ENV !== 'production')) {\n startMeasure(instance, `render`);\n }\n instance.subTree = renderComponentRoot(instance);\n if ((process.env.NODE_ENV !== 'production')) {\n endMeasure(instance, `render`);\n }\n if ((process.env.NODE_ENV !== 'production')) {\n startMeasure(instance, `hydrate`);\n }\n hydrateNode(el, instance.subTree, instance, parentSuspense, null);\n if ((process.env.NODE_ENV !== 'production')) {\n endMeasure(instance, `hydrate`);\n }\n };\n if (isAsyncWrapperVNode) {\n initialVNode.type.__asyncLoader().then(\n // note: we are moving the render call into an async callback,\n // which means it won't track dependencies - but it's ok because\n // a server-rendered async wrapper is already in resolved state\n // and it will never need to change.\n () => !instance.isUnmounted && hydrateSubTree());\n }\n else {\n hydrateSubTree();\n }\n }\n else {\n if ((process.env.NODE_ENV !== 'production')) {\n startMeasure(instance, `render`);\n }\n const subTree = (instance.subTree = renderComponentRoot(instance));\n if ((process.env.NODE_ENV !== 'production')) {\n endMeasure(instance, `render`);\n }\n if ((process.env.NODE_ENV !== 'production')) {\n startMeasure(instance, `patch`);\n }\n patch(null, subTree, container, anchor, instance, parentSuspense, isSVG);\n if ((process.env.NODE_ENV !== 'production')) {\n endMeasure(instance, `patch`);\n }\n initialVNode.el = subTree.el;\n }\n // mounted hook\n if (m) {\n queuePostRenderEffect(m, parentSuspense);\n }\n // onVnodeMounted\n if (!isAsyncWrapperVNode &&\n (vnodeHook = props && props.onVnodeMounted)) {\n const scopedInitialVNode = initialVNode;\n queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode), parentSuspense);\n }\n // activated hook for keep-alive roots.\n // #1742 activated hook must be accessed after first render\n // since the hook may be injected by a child keep-alive\n if (initialVNode.shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */ ||\n (parent &&\n isAsyncWrapper(parent.vnode) &&\n parent.vnode.shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */)) {\n instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n }\n instance.isMounted = true;\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance);\n }\n // #2458: deference mount-only object parameters to prevent memleaks\n initialVNode = container = anchor = null;\n }\n else {\n // updateComponent\n // This is triggered by mutation of component's own state (next: null)\n // OR parent calling processComponent (next: VNode)\n let { next, bu, u, parent, vnode } = instance;\n let originNext = next;\n let vnodeHook;\n if ((process.env.NODE_ENV !== 'production')) {\n pushWarningContext(next || instance.vnode);\n }\n // Disallow component effect recursion during pre-lifecycle hooks.\n toggleRecurse(instance, false);\n if (next) {\n next.el = vnode.el;\n updateComponentPreRender(instance, next, optimized);\n }\n else {\n next = vnode;\n }\n // beforeUpdate hook\n if (bu) {\n invokeArrayFns(bu);\n }\n // onVnodeBeforeUpdate\n if ((vnodeHook = next.props && next.props.onVnodeBeforeUpdate)) {\n invokeVNodeHook(vnodeHook, parent, next, vnode);\n }\n toggleRecurse(instance, true);\n // render\n if ((process.env.NODE_ENV !== 'production')) {\n startMeasure(instance, `render`);\n }\n const nextTree = renderComponentRoot(instance);\n if ((process.env.NODE_ENV !== 'production')) {\n endMeasure(instance, `render`);\n }\n const prevTree = instance.subTree;\n instance.subTree = nextTree;\n if ((process.env.NODE_ENV !== 'production')) {\n startMeasure(instance, `patch`);\n }\n patch(prevTree, nextTree, \n // parent may have changed if it's in a teleport\n hostParentNode(prevTree.el), \n // anchor may have changed if it's in a fragment\n getNextHostNode(prevTree), instance, parentSuspense, isSVG);\n if ((process.env.NODE_ENV !== 'production')) {\n endMeasure(instance, `patch`);\n }\n next.el = nextTree.el;\n if (originNext === null) {\n // self-triggered update. In case of HOC, update parent component\n // vnode el. HOC is indicated by parent instance's subTree pointing\n // to child component's vnode\n updateHOCHostEl(instance, nextTree.el);\n }\n // updated hook\n if (u) {\n queuePostRenderEffect(u, parentSuspense);\n }\n // onVnodeUpdated\n if ((vnodeHook = next.props && next.props.onVnodeUpdated)) {\n queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, next, vnode), parentSuspense);\n }\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(instance);\n }\n if ((process.env.NODE_ENV !== 'production')) {\n popWarningContext();\n }\n }\n };\n // create reactive effect for rendering\n const effect = (instance.effect = new ReactiveEffect(componentUpdateFn, () => queueJob(update), instance.scope // track it in component's effect scope\n ));\n const update = (instance.update = () => effect.run());\n update.id = instance.uid;\n // allowRecurse\n // #1801, #2043 component render effects should allow recursive updates\n toggleRecurse(instance, true);\n if ((process.env.NODE_ENV !== 'production')) {\n effect.onTrack = instance.rtc\n ? e => invokeArrayFns(instance.rtc, e)\n : void 0;\n effect.onTrigger = instance.rtg\n ? e => invokeArrayFns(instance.rtg, e)\n : void 0;\n update.ownerInstance = instance;\n }\n update();\n };\n const updateComponentPreRender = (instance, nextVNode, optimized) => {\n nextVNode.component = instance;\n const prevProps = instance.vnode.props;\n instance.vnode = nextVNode;\n instance.next = null;\n updateProps(instance, nextVNode.props, prevProps, optimized);\n updateSlots(instance, nextVNode.children, optimized);\n pauseTracking();\n // props update may have triggered pre-flush watchers.\n // flush them before the render update.\n flushPreFlushCbs();\n resetTracking();\n };\n const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized = false) => {\n const c1 = n1 && n1.children;\n const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n const c2 = n2.children;\n const { patchFlag, shapeFlag } = n2;\n // fast path\n if (patchFlag > 0) {\n if (patchFlag & 128 /* PatchFlags.KEYED_FRAGMENT */) {\n // this could be either fully-keyed or mixed (some keyed some not)\n // presence of patchFlag means children are guaranteed to be arrays\n patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n return;\n }\n else if (patchFlag & 256 /* PatchFlags.UNKEYED_FRAGMENT */) {\n // unkeyed\n patchUnkeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n return;\n }\n }\n // children has 3 possibilities: text, array or no children.\n if (shapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n // text children fast path\n if (prevShapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n unmountChildren(c1, parentComponent, parentSuspense);\n }\n if (c2 !== c1) {\n hostSetElementText(container, c2);\n }\n }\n else {\n if (prevShapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n // prev children was array\n if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n // two arrays, cannot assume anything, do full diff\n patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n else {\n // no new children, just unmount old\n unmountChildren(c1, parentComponent, parentSuspense, true);\n }\n }\n else {\n // prev children was text OR null\n // new children is array OR null\n if (prevShapeFlag & 8 /* ShapeFlags.TEXT_CHILDREN */) {\n hostSetElementText(container, '');\n }\n // mount new if array\n if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n }\n }\n };\n const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n c1 = c1 || EMPTY_ARR;\n c2 = c2 || EMPTY_ARR;\n const oldLength = c1.length;\n const newLength = c2.length;\n const commonLength = Math.min(oldLength, newLength);\n let i;\n for (i = 0; i < commonLength; i++) {\n const nextChild = (c2[i] = optimized\n ? cloneIfMounted(c2[i])\n : normalizeVNode(c2[i]));\n patch(c1[i], nextChild, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n if (oldLength > newLength) {\n // remove old\n unmountChildren(c1, parentComponent, parentSuspense, true, false, commonLength);\n }\n else {\n // mount new\n mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, commonLength);\n }\n };\n // can be all-keyed or mixed\n const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {\n let i = 0;\n const l2 = c2.length;\n let e1 = c1.length - 1; // prev ending index\n let e2 = l2 - 1; // next ending index\n // 1. sync from start\n // (a b) c\n // (a b) d e\n while (i <= e1 && i <= e2) {\n const n1 = c1[i];\n const n2 = (c2[i] = optimized\n ? cloneIfMounted(c2[i])\n : normalizeVNode(c2[i]));\n if (isSameVNodeType(n1, n2)) {\n patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n else {\n break;\n }\n i++;\n }\n // 2. sync from end\n // a (b c)\n // d e (b c)\n while (i <= e1 && i <= e2) {\n const n1 = c1[e1];\n const n2 = (c2[e2] = optimized\n ? cloneIfMounted(c2[e2])\n : normalizeVNode(c2[e2]));\n if (isSameVNodeType(n1, n2)) {\n patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n else {\n break;\n }\n e1--;\n e2--;\n }\n // 3. common sequence + mount\n // (a b)\n // (a b) c\n // i = 2, e1 = 1, e2 = 2\n // (a b)\n // c (a b)\n // i = 0, e1 = -1, e2 = 0\n if (i > e1) {\n if (i <= e2) {\n const nextPos = e2 + 1;\n const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n while (i <= e2) {\n patch(null, (c2[i] = optimized\n ? cloneIfMounted(c2[i])\n : normalizeVNode(c2[i])), container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n i++;\n }\n }\n }\n // 4. common sequence + unmount\n // (a b) c\n // (a b)\n // i = 2, e1 = 2, e2 = 1\n // a (b c)\n // (b c)\n // i = 0, e1 = 0, e2 = -1\n else if (i > e2) {\n while (i <= e1) {\n unmount(c1[i], parentComponent, parentSuspense, true);\n i++;\n }\n }\n // 5. unknown sequence\n // [i ... e1 + 1]: a b [c d e] f g\n // [i ... e2 + 1]: a b [e d c h] f g\n // i = 2, e1 = 4, e2 = 5\n else {\n const s1 = i; // prev starting index\n const s2 = i; // next starting index\n // 5.1 build key:index map for newChildren\n const keyToNewIndexMap = new Map();\n for (i = s2; i <= e2; i++) {\n const nextChild = (c2[i] = optimized\n ? cloneIfMounted(c2[i])\n : normalizeVNode(c2[i]));\n if (nextChild.key != null) {\n if ((process.env.NODE_ENV !== 'production') && keyToNewIndexMap.has(nextChild.key)) {\n warn(`Duplicate keys found during update:`, JSON.stringify(nextChild.key), `Make sure keys are unique.`);\n }\n keyToNewIndexMap.set(nextChild.key, i);\n }\n }\n // 5.2 loop through old children left to be patched and try to patch\n // matching nodes & remove nodes that are no longer present\n let j;\n let patched = 0;\n const toBePatched = e2 - s2 + 1;\n let moved = false;\n // used to track whether any node has moved\n let maxNewIndexSoFar = 0;\n // works as Map<newIndex, oldIndex>\n // Note that oldIndex is offset by +1\n // and oldIndex = 0 is a special value indicating the new node has\n // no corresponding old node.\n // used for determining longest stable subsequence\n const newIndexToOldIndexMap = new Array(toBePatched);\n for (i = 0; i < toBePatched; i++)\n newIndexToOldIndexMap[i] = 0;\n for (i = s1; i <= e1; i++) {\n const prevChild = c1[i];\n if (patched >= toBePatched) {\n // all new children have been patched so this can only be a removal\n unmount(prevChild, parentComponent, parentSuspense, true);\n continue;\n }\n let newIndex;\n if (prevChild.key != null) {\n newIndex = keyToNewIndexMap.get(prevChild.key);\n }\n else {\n // key-less node, try to locate a key-less node of the same type\n for (j = s2; j <= e2; j++) {\n if (newIndexToOldIndexMap[j - s2] === 0 &&\n isSameVNodeType(prevChild, c2[j])) {\n newIndex = j;\n break;\n }\n }\n }\n if (newIndex === undefined) {\n unmount(prevChild, parentComponent, parentSuspense, true);\n }\n else {\n newIndexToOldIndexMap[newIndex - s2] = i + 1;\n if (newIndex >= maxNewIndexSoFar) {\n maxNewIndexSoFar = newIndex;\n }\n else {\n moved = true;\n }\n patch(prevChild, c2[newIndex], container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n patched++;\n }\n }\n // 5.3 move and mount\n // generate longest stable subsequence only when nodes have moved\n const increasingNewIndexSequence = moved\n ? getSequence(newIndexToOldIndexMap)\n : EMPTY_ARR;\n j = increasingNewIndexSequence.length - 1;\n // looping backwards so that we can use last patched node as anchor\n for (i = toBePatched - 1; i >= 0; i--) {\n const nextIndex = s2 + i;\n const nextChild = c2[nextIndex];\n const anchor = nextIndex + 1 < l2 ? c2[nextIndex + 1].el : parentAnchor;\n if (newIndexToOldIndexMap[i] === 0) {\n // mount new\n patch(null, nextChild, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n else if (moved) {\n // move if:\n // There is no stable subsequence (e.g. a reverse)\n // OR current node is not among the stable sequence\n if (j < 0 || i !== increasingNewIndexSequence[j]) {\n move(nextChild, container, anchor, 2 /* MoveType.REORDER */);\n }\n else {\n j--;\n }\n }\n }\n }\n };\n const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n const { el, type, transition, children, shapeFlag } = vnode;\n if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n move(vnode.component.subTree, container, anchor, moveType);\n return;\n }\n if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n vnode.suspense.move(container, anchor, moveType);\n return;\n }\n if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n type.move(vnode, container, anchor, internals);\n return;\n }\n if (type === Fragment) {\n hostInsert(el, container, anchor);\n for (let i = 0; i < children.length; i++) {\n move(children[i], container, anchor, moveType);\n }\n hostInsert(vnode.anchor, container, anchor);\n return;\n }\n if (type === Static) {\n moveStaticNode(vnode, container, anchor);\n return;\n }\n // single nodes\n const needTransition = moveType !== 2 /* MoveType.REORDER */ &&\n shapeFlag & 1 /* ShapeFlags.ELEMENT */ &&\n transition;\n if (needTransition) {\n if (moveType === 0 /* MoveType.ENTER */) {\n transition.beforeEnter(el);\n hostInsert(el, container, anchor);\n queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n }\n else {\n const { leave, delayLeave, afterLeave } = transition;\n const remove = () => hostInsert(el, container, anchor);\n const performLeave = () => {\n leave(el, () => {\n remove();\n afterLeave && afterLeave();\n });\n };\n if (delayLeave) {\n delayLeave(el, remove, performLeave);\n }\n else {\n performLeave();\n }\n }\n }\n else {\n hostInsert(el, container, anchor);\n }\n };\n const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n const { type, props, ref, children, dynamicChildren, shapeFlag, patchFlag, dirs } = vnode;\n // unset ref\n if (ref != null) {\n setRef(ref, null, parentSuspense, vnode, true);\n }\n if (shapeFlag & 256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */) {\n parentComponent.ctx.deactivate(vnode);\n return;\n }\n const shouldInvokeDirs = shapeFlag & 1 /* ShapeFlags.ELEMENT */ && dirs;\n const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n let vnodeHook;\n if (shouldInvokeVnodeHook &&\n (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n if (shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n unmountComponent(vnode.component, parentSuspense, doRemove);\n }\n else {\n if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n vnode.suspense.unmount(parentSuspense, doRemove);\n return;\n }\n if (shouldInvokeDirs) {\n invokeDirectiveHook(vnode, null, parentComponent, 'beforeUnmount');\n }\n if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n vnode.type.remove(vnode, parentComponent, parentSuspense, optimized, internals, doRemove);\n }\n else if (dynamicChildren &&\n // #1153: fast path should not be taken for non-stable (v-for) fragments\n (type !== Fragment ||\n (patchFlag > 0 && patchFlag & 64 /* PatchFlags.STABLE_FRAGMENT */))) {\n // fast path for block nodes: only need to unmount dynamic children.\n unmountChildren(dynamicChildren, parentComponent, parentSuspense, false, true);\n }\n else if ((type === Fragment &&\n patchFlag &\n (128 /* PatchFlags.KEYED_FRAGMENT */ | 256 /* PatchFlags.UNKEYED_FRAGMENT */)) ||\n (!optimized && shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */)) {\n unmountChildren(children, parentComponent, parentSuspense);\n }\n if (doRemove) {\n remove(vnode);\n }\n }\n if ((shouldInvokeVnodeHook &&\n (vnodeHook = props && props.onVnodeUnmounted)) ||\n shouldInvokeDirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n shouldInvokeDirs &&\n invokeDirectiveHook(vnode, null, parentComponent, 'unmounted');\n }, parentSuspense);\n }\n };\n const remove = vnode => {\n const { type, el, anchor, transition } = vnode;\n if (type === Fragment) {\n if ((process.env.NODE_ENV !== 'production') &&\n vnode.patchFlag > 0 &&\n vnode.patchFlag & 2048 /* PatchFlags.DEV_ROOT_FRAGMENT */ &&\n transition &&\n !transition.persisted) {\n vnode.children.forEach(child => {\n if (child.type === Comment) {\n hostRemove(child.el);\n }\n else {\n remove(child);\n }\n });\n }\n else {\n removeFragment(el, anchor);\n }\n return;\n }\n if (type === Static) {\n removeStaticNode(vnode);\n return;\n }\n const performRemove = () => {\n hostRemove(el);\n if (transition && !transition.persisted && transition.afterLeave) {\n transition.afterLeave();\n }\n };\n if (vnode.shapeFlag & 1 /* ShapeFlags.ELEMENT */ &&\n transition &&\n !transition.persisted) {\n const { leave, delayLeave } = transition;\n const performLeave = () => leave(el, performRemove);\n if (delayLeave) {\n delayLeave(vnode.el, performRemove, performLeave);\n }\n else {\n performLeave();\n }\n }\n else {\n performRemove();\n }\n };\n const removeFragment = (cur, end) => {\n // For fragments, directly remove all contained DOM nodes.\n // (fragment child nodes cannot have transition)\n let next;\n while (cur !== end) {\n next = hostNextSibling(cur);\n hostRemove(cur);\n cur = next;\n }\n hostRemove(end);\n };\n const unmountComponent = (instance, parentSuspense, doRemove) => {\n if ((process.env.NODE_ENV !== 'production') && instance.type.__hmrId) {\n unregisterHMR(instance);\n }\n const { bum, scope, update, subTree, um } = instance;\n // beforeUnmount hook\n if (bum) {\n invokeArrayFns(bum);\n }\n // stop effects in component scope\n scope.stop();\n // update may be null if a component is unmounted before its async\n // setup has resolved.\n if (update) {\n // so that scheduler will no longer invoke it\n update.active = false;\n unmount(subTree, instance, parentSuspense, doRemove);\n }\n // unmounted hook\n if (um) {\n queuePostRenderEffect(um, parentSuspense);\n }\n queuePostRenderEffect(() => {\n instance.isUnmounted = true;\n }, parentSuspense);\n // A component with async dep inside a pending suspense is unmounted before\n // its async dep resolves. This should remove the dep from the suspense, and\n // cause the suspense to resolve immediately if that was the last dep.\n if (parentSuspense &&\n parentSuspense.pendingBranch &&\n !parentSuspense.isUnmounted &&\n instance.asyncDep &&\n !instance.asyncResolved &&\n instance.suspenseId === parentSuspense.pendingId) {\n parentSuspense.deps--;\n if (parentSuspense.deps === 0) {\n parentSuspense.resolve();\n }\n }\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentRemoved(instance);\n }\n };\n const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n for (let i = start; i < children.length; i++) {\n unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n }\n };\n const getNextHostNode = vnode => {\n if (vnode.shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n return getNextHostNode(vnode.component.subTree);\n }\n if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n return vnode.suspense.next();\n }\n return hostNextSibling((vnode.anchor || vnode.el));\n };\n const render = (vnode, container, isSVG) => {\n if (vnode == null) {\n if (container._vnode) {\n unmount(container._vnode, null, null, true);\n }\n }\n else {\n patch(container._vnode || null, vnode, container, null, null, null, isSVG);\n }\n flushPreFlushCbs();\n flushPostFlushCbs();\n container._vnode = vnode;\n };\n const internals = {\n p: patch,\n um: unmount,\n m: move,\n r: remove,\n mt: mountComponent,\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n n: getNextHostNode,\n o: options\n };\n let hydrate;\n let hydrateNode;\n if (createHydrationFns) {\n [hydrate, hydrateNode] = createHydrationFns(internals);\n }\n return {\n render,\n hydrate,\n createApp: createAppAPI(render, hydrate)\n };\n}\nfunction toggleRecurse({ effect, update }, allowed) {\n effect.allowRecurse = update.allowRecurse = allowed;\n}\n/**\n * #1156\n * When a component is HMR-enabled, we need to make sure that all static nodes\n * inside a block also inherit the DOM element from the previous tree so that\n * HMR updates (which are full updates) can retrieve the element for patching.\n *\n * #2080\n * Inside keyed `template` fragment static children, if a fragment is moved,\n * the children will always be moved. Therefore, in order to ensure correct move\n * position, el should be inherited from previous nodes.\n */\nfunction traverseStaticChildren(n1, n2, shallow = false) {\n const ch1 = n1.children;\n const ch2 = n2.children;\n if (isArray(ch1) && isArray(ch2)) {\n for (let i = 0; i < ch1.length; i++) {\n // this is only called in the optimized path so array children are\n // guaranteed to be vnodes\n const c1 = ch1[i];\n let c2 = ch2[i];\n if (c2.shapeFlag & 1 /* ShapeFlags.ELEMENT */ && !c2.dynamicChildren) {\n if (c2.patchFlag <= 0 || c2.patchFlag === 32 /* PatchFlags.HYDRATE_EVENTS */) {\n c2 = ch2[i] = cloneIfMounted(ch2[i]);\n c2.el = c1.el;\n }\n if (!shallow)\n traverseStaticChildren(c1, c2);\n }\n // #6852 also inherit for text nodes\n if (c2.type === Text) {\n c2.el = c1.el;\n }\n // also inherit for comment nodes, but not placeholders (e.g. v-if which\n // would have received .el during block patch)\n if ((process.env.NODE_ENV !== 'production') && c2.type === Comment && !c2.el) {\n c2.el = c1.el;\n }\n }\n }\n}\n// https://en.wikipedia.org/wiki/Longest_increasing_subsequence\nfunction getSequence(arr) {\n const p = arr.slice();\n const result = [0];\n let i, j, u, v, c;\n const len = arr.length;\n for (i = 0; i < len; i++) {\n const arrI = arr[i];\n if (arrI !== 0) {\n j = result[result.length - 1];\n if (arr[j] < arrI) {\n p[i] = j;\n result.push(i);\n continue;\n }\n u = 0;\n v = result.length - 1;\n while (u < v) {\n c = (u + v) >> 1;\n if (arr[result[c]] < arrI) {\n u = c + 1;\n }\n else {\n v = c;\n }\n }\n if (arrI < arr[result[u]]) {\n if (u > 0) {\n p[i] = result[u - 1];\n }\n result[u] = i;\n }\n }\n }\n u = result.length;\n v = result[u - 1];\n while (u-- > 0) {\n result[u] = v;\n v = p[v];\n }\n return result;\n}\n\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === '');\nconst isTargetSVG = (target) => typeof SVGElement !== 'undefined' && target instanceof SVGElement;\nconst resolveTarget = (props, select) => {\n const targetSelector = props && props.to;\n if (isString(targetSelector)) {\n if (!select) {\n (process.env.NODE_ENV !== 'production') &&\n warn(`Current renderer does not support string target for Teleports. ` +\n `(missing querySelector renderer option)`);\n return null;\n }\n else {\n const target = select(targetSelector);\n if (!target) {\n (process.env.NODE_ENV !== 'production') &&\n warn(`Failed to locate Teleport target with selector \"${targetSelector}\". ` +\n `Note the target element must exist before the component is mounted - ` +\n `i.e. the target cannot be rendered by the component itself, and ` +\n `ideally should be outside of the entire Vue component tree.`);\n }\n return target;\n }\n }\n else {\n if ((process.env.NODE_ENV !== 'production') && !targetSelector && !isTeleportDisabled(props)) {\n warn(`Invalid Teleport target: ${targetSelector}`);\n }\n return targetSelector;\n }\n};\nconst TeleportImpl = {\n __isTeleport: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals) {\n const { mc: mountChildren, pc: patchChildren, pbc: patchBlockChildren, o: { insert, querySelector, createText, createComment } } = internals;\n const disabled = isTeleportDisabled(n2.props);\n let { shapeFlag, children, dynamicChildren } = n2;\n // #3302\n // HMR updated, force full diff\n if ((process.env.NODE_ENV !== 'production') && isHmrUpdating) {\n optimized = false;\n dynamicChildren = null;\n }\n if (n1 == null) {\n // insert anchors in the main view\n const placeholder = (n2.el = (process.env.NODE_ENV !== 'production')\n ? createComment('teleport start')\n : createText(''));\n const mainAnchor = (n2.anchor = (process.env.NODE_ENV !== 'production')\n ? createComment('teleport end')\n : createText(''));\n insert(placeholder, container, anchor);\n insert(mainAnchor, container, anchor);\n const target = (n2.target = resolveTarget(n2.props, querySelector));\n const targetAnchor = (n2.targetAnchor = createText(''));\n if (target) {\n insert(targetAnchor, target);\n // #2652 we could be teleporting from a non-SVG tree into an SVG tree\n isSVG = isSVG || isTargetSVG(target);\n }\n else if ((process.env.NODE_ENV !== 'production') && !disabled) {\n warn('Invalid Teleport target on mount:', target, `(${typeof target})`);\n }\n const mount = (container, anchor) => {\n // Teleport *always* has Array children. This is enforced in both the\n // compiler and vnode children normalization.\n if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n mountChildren(children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);\n }\n };\n if (disabled) {\n mount(container, mainAnchor);\n }\n else if (target) {\n mount(target, targetAnchor);\n }\n }\n else {\n // update content\n n2.el = n1.el;\n const mainAnchor = (n2.anchor = n1.anchor);\n const target = (n2.target = n1.target);\n const targetAnchor = (n2.targetAnchor = n1.targetAnchor);\n const wasDisabled = isTeleportDisabled(n1.props);\n const currentContainer = wasDisabled ? container : target;\n const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n isSVG = isSVG || isTargetSVG(target);\n if (dynamicChildren) {\n // fast path when the teleport happens to be a block root\n patchBlockChildren(n1.dynamicChildren, dynamicChildren, currentContainer, parentComponent, parentSuspense, isSVG, slotScopeIds);\n // even in block tree mode we need to make sure all root-level nodes\n // in the teleport inherit previous DOM references so that they can\n // be moved in future patches.\n traverseStaticChildren(n1, n2, true);\n }\n else if (!optimized) {\n patchChildren(n1, n2, currentContainer, currentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, false);\n }\n if (disabled) {\n if (!wasDisabled) {\n // enabled -> disabled\n // move into main container\n moveTeleport(n2, container, mainAnchor, internals, 1 /* TeleportMoveTypes.TOGGLE */);\n }\n }\n else {\n // target changed\n if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n const nextTarget = (n2.target = resolveTarget(n2.props, querySelector));\n if (nextTarget) {\n moveTeleport(n2, nextTarget, null, internals, 0 /* TeleportMoveTypes.TARGET_CHANGE */);\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn('Invalid Teleport target on update:', target, `(${typeof target})`);\n }\n }\n else if (wasDisabled) {\n // disabled -> enabled\n // move into teleport target\n moveTeleport(n2, target, targetAnchor, internals, 1 /* TeleportMoveTypes.TOGGLE */);\n }\n }\n }\n updateCssVars(n2);\n },\n remove(vnode, parentComponent, parentSuspense, optimized, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n const { shapeFlag, children, anchor, targetAnchor, target, props } = vnode;\n if (target) {\n hostRemove(targetAnchor);\n }\n // an unmounted teleport should always remove its children if not disabled\n if (doRemove || !isTeleportDisabled(props)) {\n hostRemove(anchor);\n if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n unmount(child, parentComponent, parentSuspense, true, !!child.dynamicChildren);\n }\n }\n }\n },\n move: moveTeleport,\n hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2 /* TeleportMoveTypes.REORDER */) {\n // move target anchor if this is a target change.\n if (moveType === 0 /* TeleportMoveTypes.TARGET_CHANGE */) {\n insert(vnode.targetAnchor, container, parentAnchor);\n }\n const { el, anchor, shapeFlag, children, props } = vnode;\n const isReorder = moveType === 2 /* TeleportMoveTypes.REORDER */;\n // move main view anchor if this is a re-order.\n if (isReorder) {\n insert(el, container, parentAnchor);\n }\n // if this is a re-order and teleport is enabled (content is in target)\n // do not move children. So the opposite is: only move children if this\n // is not a reorder, or the teleport is disabled\n if (!isReorder || isTeleportDisabled(props)) {\n // Teleport has either Array children or no children.\n if (shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n for (let i = 0; i < children.length; i++) {\n move(children[i], container, parentAnchor, 2 /* MoveType.REORDER */);\n }\n }\n }\n // move main view anchor if this is a re-order.\n if (isReorder) {\n insert(anchor, container, parentAnchor);\n }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, { o: { nextSibling, parentNode, querySelector } }, hydrateChildren) {\n const target = (vnode.target = resolveTarget(vnode.props, querySelector));\n if (target) {\n // if multiple teleports rendered to the same target element, we need to\n // pick up from where the last teleport finished instead of the first node\n const targetNode = target._lpa || target.firstChild;\n if (vnode.shapeFlag & 16 /* ShapeFlags.ARRAY_CHILDREN */) {\n if (isTeleportDisabled(vnode.props)) {\n vnode.anchor = hydrateChildren(nextSibling(node), vnode, parentNode(node), parentComponent, parentSuspense, slotScopeIds, optimized);\n vnode.targetAnchor = targetNode;\n }\n else {\n vnode.anchor = nextSibling(node);\n // lookahead until we find the target anchor\n // we cannot rely on return value of hydrateChildren() because there\n // could be nested teleports\n let targetAnchor = targetNode;\n while (targetAnchor) {\n targetAnchor = nextSibling(targetAnchor);\n if (targetAnchor &&\n targetAnchor.nodeType === 8 &&\n targetAnchor.data === 'teleport anchor') {\n vnode.targetAnchor = targetAnchor;\n target._lpa =\n vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n break;\n }\n }\n hydrateChildren(targetNode, vnode, target, parentComponent, parentSuspense, slotScopeIds, optimized);\n }\n }\n updateCssVars(vnode);\n }\n return vnode.anchor && nextSibling(vnode.anchor);\n}\n// Force-casted public typing for h and TSX props inference\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode) {\n // presence of .ut method indicates owner component uses css vars.\n // code path here can assume browser environment.\n const ctx = vnode.ctx;\n if (ctx && ctx.ut) {\n let node = vnode.children[0].el;\n while (node !== vnode.targetAnchor) {\n if (node.nodeType === 1)\n node.setAttribute('data-v-owner', ctx.uid);\n node = node.nextSibling;\n }\n ctx.ut();\n }\n}\n\nconst Fragment = Symbol((process.env.NODE_ENV !== 'production') ? 'Fragment' : undefined);\nconst Text = Symbol((process.env.NODE_ENV !== 'production') ? 'Text' : undefined);\nconst Comment = Symbol((process.env.NODE_ENV !== 'production') ? 'Comment' : undefined);\nconst Static = Symbol((process.env.NODE_ENV !== 'production') ? 'Static' : undefined);\n// Since v-if and v-for are the two possible ways node structure can dynamically\n// change, once we consider v-if branches and each v-for fragment a block, we\n// can divide a template into nested blocks, and within each block the node\n// structure would be stable. This allows us to skip most children diffing\n// and only worry about the dynamic nodes (indicated by patch flags).\nconst blockStack = [];\nlet currentBlock = null;\n/**\n * Open a block.\n * This must be called before `createBlock`. It cannot be part of `createBlock`\n * because the children of the block are evaluated before `createBlock` itself\n * is called. The generated code typically looks like this:\n *\n * ```js\n * function render() {\n * return (openBlock(),createBlock('div', null, [...]))\n * }\n * ```\n * disableTracking is true when creating a v-for fragment block, since a v-for\n * fragment always diffs its children.\n *\n * @private\n */\nfunction openBlock(disableTracking = false) {\n blockStack.push((currentBlock = disableTracking ? null : []));\n}\nfunction closeBlock() {\n blockStack.pop();\n currentBlock = blockStack[blockStack.length - 1] || null;\n}\n// Whether we should be tracking dynamic child nodes inside a block.\n// Only tracks when this value is > 0\n// We are not using a simple boolean because this value may need to be\n// incremented/decremented by nested usage of v-once (see below)\nlet isBlockTreeEnabled = 1;\n/**\n * Block tracking sometimes needs to be disabled, for example during the\n * creation of a tree that needs to be cached by v-once. The compiler generates\n * code like this:\n *\n * ``` js\n * _cache[1] || (\n * setBlockTracking(-1),\n * _cache[1] = createVNode(...),\n * setBlockTracking(1),\n * _cache[1]\n * )\n * ```\n *\n * @private\n */\nfunction setBlockTracking(value) {\n isBlockTreeEnabled += value;\n}\nfunction setupBlock(vnode) {\n // save current block children on the block vnode\n vnode.dynamicChildren =\n isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;\n // close block\n closeBlock();\n // a block is always going to be patched, so track it as a child of its\n // parent block\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\n/**\n * @private\n */\nfunction createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\n return setupBlock(createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, true /* isBlock */));\n}\n/**\n * Create a block root vnode. Takes the same exact arguments as `createVNode`.\n * A block root keeps track of dynamic nodes within the block in the\n * `dynamicChildren` array.\n *\n * @private\n */\nfunction createBlock(type, props, children, patchFlag, dynamicProps) {\n return setupBlock(createVNode(type, props, children, patchFlag, dynamicProps, true /* isBlock: prevent a block from tracking itself */));\n}\nfunction isVNode(value) {\n return value ? value.__v_isVNode === true : false;\n}\nfunction isSameVNodeType(n1, n2) {\n if ((process.env.NODE_ENV !== 'production') &&\n n2.shapeFlag & 6 /* ShapeFlags.COMPONENT */ &&\n hmrDirtyComponents.has(n2.type)) {\n // #7042, ensure the vnode being unmounted during HMR\n // bitwise operations to remove keep alive flags\n n1.shapeFlag &= ~256 /* ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE */;\n n2.shapeFlag &= ~512 /* ShapeFlags.COMPONENT_KEPT_ALIVE */;\n // HMR only: if the component has been hot-updated, force a reload.\n return false;\n }\n return n1.type === n2.type && n1.key === n2.key;\n}\nlet vnodeArgsTransformer;\n/**\n * Internal API for registering an arguments transform for createVNode\n * used for creating stubs in the test-utils\n * It is *internal* but needs to be exposed for test-utils to pick up proper\n * typings\n */\nfunction transformVNodeArgs(transformer) {\n vnodeArgsTransformer = transformer;\n}\nconst createVNodeWithArgsTransform = (...args) => {\n return _createVNode(...(vnodeArgsTransformer\n ? vnodeArgsTransformer(args, currentRenderingInstance)\n : args));\n};\nconst InternalObjectKey = `__vInternal`;\nconst normalizeKey = ({ key }) => key != null ? key : null;\nconst normalizeRef = ({ ref, ref_key, ref_for }) => {\n return (ref != null\n ? isString(ref) || isRef(ref) || isFunction(ref)\n ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for }\n : ref\n : null);\n};\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1 /* ShapeFlags.ELEMENT */, isBlockNode = false, needFullChildrenNormalization = false) {\n const vnode = {\n __v_isVNode: true,\n __v_skip: true,\n type,\n props,\n key: props && normalizeKey(props),\n ref: props && normalizeRef(props),\n scopeId: currentScopeId,\n slotScopeIds: null,\n children,\n component: null,\n suspense: null,\n ssContent: null,\n ssFallback: null,\n dirs: null,\n transition: null,\n el: null,\n anchor: null,\n target: null,\n targetAnchor: null,\n staticCount: 0,\n shapeFlag,\n patchFlag,\n dynamicProps,\n dynamicChildren: null,\n appContext: null,\n ctx: currentRenderingInstance\n };\n if (needFullChildrenNormalization) {\n normalizeChildren(vnode, children);\n // normalize suspense children\n if (shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n type.normalize(vnode);\n }\n }\n else if (children) {\n // compiled element vnode - if children is passed, only possible types are\n // string or Array.\n vnode.shapeFlag |= isString(children)\n ? 8 /* ShapeFlags.TEXT_CHILDREN */\n : 16 /* ShapeFlags.ARRAY_CHILDREN */;\n }\n // validate key\n if ((process.env.NODE_ENV !== 'production') && vnode.key !== vnode.key) {\n warn(`VNode created with invalid key (NaN). VNode type:`, vnode.type);\n }\n // track vnode for block tree\n if (isBlockTreeEnabled > 0 &&\n // avoid a block node from tracking itself\n !isBlockNode &&\n // has current parent block\n currentBlock &&\n // presence of a patch flag indicates this node needs patching on updates.\n // component nodes also should always be patched, because even if the\n // component doesn't need to update, it needs to persist the instance on to\n // the next vnode so that it can be properly unmounted later.\n (vnode.patchFlag > 0 || shapeFlag & 6 /* ShapeFlags.COMPONENT */) &&\n // the EVENTS flag is only for hydration and if it is the only flag, the\n // vnode should not be considered dynamic due to handler caching.\n vnode.patchFlag !== 32 /* PatchFlags.HYDRATE_EVENTS */) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\nconst createVNode = ((process.env.NODE_ENV !== 'production') ? createVNodeWithArgsTransform : _createVNode);\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n if (!type || type === NULL_DYNAMIC_COMPONENT) {\n if ((process.env.NODE_ENV !== 'production') && !type) {\n warn(`Invalid vnode type when creating vnode: ${type}.`);\n }\n type = Comment;\n }\n if (isVNode(type)) {\n // createVNode receiving an existing vnode. This happens in cases like\n // <component :is=\"vnode\"/>\n // #2078 make sure to merge refs during the clone instead of overwriting it\n const cloned = cloneVNode(type, props, true /* mergeRef: true */);\n if (children) {\n normalizeChildren(cloned, children);\n }\n if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n if (cloned.shapeFlag & 6 /* ShapeFlags.COMPONENT */) {\n currentBlock[currentBlock.indexOf(type)] = cloned;\n }\n else {\n currentBlock.push(cloned);\n }\n }\n cloned.patchFlag |= -2 /* PatchFlags.BAIL */;\n return cloned;\n }\n // class component normalization.\n if (isClassComponent(type)) {\n type = type.__vccOpts;\n }\n // class & style normalization.\n if (props) {\n // for reactive or proxy objects, we need to clone it to enable mutation.\n props = guardReactiveProps(props);\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (isObject(style)) {\n // reactive state objects need to be cloned since they are likely to be\n // mutated\n if (isProxy(style) && !isArray(style)) {\n style = extend({}, style);\n }\n props.style = normalizeStyle(style);\n }\n }\n // encode the vnode type information into a bitmap\n const shapeFlag = isString(type)\n ? 1 /* ShapeFlags.ELEMENT */\n : isSuspense(type)\n ? 128 /* ShapeFlags.SUSPENSE */\n : isTeleport(type)\n ? 64 /* ShapeFlags.TELEPORT */\n : isObject(type)\n ? 4 /* ShapeFlags.STATEFUL_COMPONENT */\n : isFunction(type)\n ? 2 /* ShapeFlags.FUNCTIONAL_COMPONENT */\n : 0;\n if ((process.env.NODE_ENV !== 'production') && shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */ && isProxy(type)) {\n type = toRaw(type);\n warn(`Vue received a Component which was made a reactive object. This can ` +\n `lead to unnecessary performance overhead, and should be avoided by ` +\n `marking the component with \\`markRaw\\` or using \\`shallowRef\\` ` +\n `instead of \\`ref\\`.`, `\\nComponent that was made reactive: `, type);\n }\n return createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, isBlockNode, true);\n}\nfunction guardReactiveProps(props) {\n if (!props)\n return null;\n return isProxy(props) || InternalObjectKey in props\n ? extend({}, props)\n : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false) {\n // This is intentionally NOT using spread or extend to avoid the runtime\n // key enumeration cost.\n const { props, ref, patchFlag, children } = vnode;\n const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n const cloned = {\n __v_isVNode: true,\n __v_skip: true,\n type: vnode.type,\n props: mergedProps,\n key: mergedProps && normalizeKey(mergedProps),\n ref: extraProps && extraProps.ref\n ? // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n // if the vnode itself already has a ref, cloneVNode will need to merge\n // the refs so the single vnode can be set on multiple refs\n mergeRef && ref\n ? isArray(ref)\n ? ref.concat(normalizeRef(extraProps))\n : [ref, normalizeRef(extraProps)]\n : normalizeRef(extraProps)\n : ref,\n scopeId: vnode.scopeId,\n slotScopeIds: vnode.slotScopeIds,\n children: (process.env.NODE_ENV !== 'production') && patchFlag === -1 /* PatchFlags.HOISTED */ && isArray(children)\n ? children.map(deepCloneVNode)\n : children,\n target: vnode.target,\n targetAnchor: vnode.targetAnchor,\n staticCount: vnode.staticCount,\n shapeFlag: vnode.shapeFlag,\n // if the vnode is cloned with extra props, we can no longer assume its\n // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n // note: preserve flag for fragments since they use the flag for children\n // fast paths only.\n patchFlag: extraProps && vnode.type !== Fragment\n ? patchFlag === -1 // hoisted node\n ? 16 /* PatchFlags.FULL_PROPS */\n : patchFlag | 16 /* PatchFlags.FULL_PROPS */\n : patchFlag,\n dynamicProps: vnode.dynamicProps,\n dynamicChildren: vnode.dynamicChildren,\n appContext: vnode.appContext,\n dirs: vnode.dirs,\n transition: vnode.transition,\n // These should technically only be non-null on mounted VNodes. However,\n // they *should* be copied for kept-alive vnodes. So we just always copy\n // them since them being non-null during a mount doesn't affect the logic as\n // they will simply be overwritten.\n component: vnode.component,\n suspense: vnode.suspense,\n ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n el: vnode.el,\n anchor: vnode.anchor,\n ctx: vnode.ctx\n };\n return cloned;\n}\n/**\n * Dev only, for HMR of hoisted vnodes reused in v-for\n * https://github.com/vitejs/vite/issues/2022\n */\nfunction deepCloneVNode(vnode) {\n const cloned = cloneVNode(vnode);\n if (isArray(vnode.children)) {\n cloned.children = vnode.children.map(deepCloneVNode);\n }\n return cloned;\n}\n/**\n * @private\n */\nfunction createTextVNode(text = ' ', flag = 0) {\n return createVNode(Text, null, text, flag);\n}\n/**\n * @private\n */\nfunction createStaticVNode(content, numberOfNodes) {\n // A static vnode can contain multiple stringified elements, and the number\n // of elements is necessary for hydration.\n const vnode = createVNode(Static, null, content);\n vnode.staticCount = numberOfNodes;\n return vnode;\n}\n/**\n * @private\n */\nfunction createCommentVNode(text = '', \n// when used as the v-else branch, the comment node must be created as a\n// block to ensure correct updates.\nasBlock = false) {\n return asBlock\n ? (openBlock(), createBlock(Comment, null, text))\n : createVNode(Comment, null, text);\n}\nfunction normalizeVNode(child) {\n if (child == null || typeof child === 'boolean') {\n // empty placeholder\n return createVNode(Comment);\n }\n else if (isArray(child)) {\n // fragment\n return createVNode(Fragment, null, \n // #3666, avoid reference pollution when reusing vnode\n child.slice());\n }\n else if (typeof child === 'object') {\n // already vnode, this should be the most common since compiled templates\n // always produce all-vnode children arrays\n return cloneIfMounted(child);\n }\n else {\n // strings and numbers\n return createVNode(Text, null, String(child));\n }\n}\n// optimized normalization for template-compiled render fns\nfunction cloneIfMounted(child) {\n return (child.el === null && child.patchFlag !== -1 /* PatchFlags.HOISTED */) ||\n child.memo\n ? child\n : cloneVNode(child);\n}\nfunction normalizeChildren(vnode, children) {\n let type = 0;\n const { shapeFlag } = vnode;\n if (children == null) {\n children = null;\n }\n else if (isArray(children)) {\n type = 16 /* ShapeFlags.ARRAY_CHILDREN */;\n }\n else if (typeof children === 'object') {\n if (shapeFlag & (1 /* ShapeFlags.ELEMENT */ | 64 /* ShapeFlags.TELEPORT */)) {\n // Normalize slot to plain children for plain element and Teleport\n const slot = children.default;\n if (slot) {\n // _c marker is added by withCtx() indicating this is a compiled slot\n slot._c && (slot._d = false);\n normalizeChildren(vnode, slot());\n slot._c && (slot._d = true);\n }\n return;\n }\n else {\n type = 32 /* ShapeFlags.SLOTS_CHILDREN */;\n const slotFlag = children._;\n if (!slotFlag && !(InternalObjectKey in children)) {\n children._ctx = currentRenderingInstance;\n }\n else if (slotFlag === 3 /* SlotFlags.FORWARDED */ && currentRenderingInstance) {\n // a child component receives forwarded slots from the parent.\n // its slot type is determined by its parent's slot type.\n if (currentRenderingInstance.slots._ === 1 /* SlotFlags.STABLE */) {\n children._ = 1 /* SlotFlags.STABLE */;\n }\n else {\n children._ = 2 /* SlotFlags.DYNAMIC */;\n vnode.patchFlag |= 1024 /* PatchFlags.DYNAMIC_SLOTS */;\n }\n }\n }\n }\n else if (isFunction(children)) {\n children = { default: children, _ctx: currentRenderingInstance };\n type = 32 /* ShapeFlags.SLOTS_CHILDREN */;\n }\n else {\n children = String(children);\n // force teleport children to array so it can be moved around\n if (shapeFlag & 64 /* ShapeFlags.TELEPORT */) {\n type = 16 /* ShapeFlags.ARRAY_CHILDREN */;\n children = [createTextVNode(children)];\n }\n else {\n type = 8 /* ShapeFlags.TEXT_CHILDREN */;\n }\n }\n vnode.children = children;\n vnode.shapeFlag |= type;\n}\nfunction mergeProps(...args) {\n const ret = {};\n for (let i = 0; i < args.length; i++) {\n const toMerge = args[i];\n for (const key in toMerge) {\n if (key === 'class') {\n if (ret.class !== toMerge.class) {\n ret.class = normalizeClass([ret.class, toMerge.class]);\n }\n }\n else if (key === 'style') {\n ret.style = normalizeStyle([ret.style, toMerge.style]);\n }\n else if (isOn(key)) {\n const existing = ret[key];\n const incoming = toMerge[key];\n if (incoming &&\n existing !== incoming &&\n !(isArray(existing) && existing.includes(incoming))) {\n ret[key] = existing\n ? [].concat(existing, incoming)\n : incoming;\n }\n }\n else if (key !== '') {\n ret[key] = toMerge[key];\n }\n }\n }\n return ret;\n}\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n callWithAsyncErrorHandling(hook, instance, 7 /* ErrorCodes.VNODE_HOOK */, [\n vnode,\n prevVNode\n ]);\n}\n\nconst emptyAppContext = createAppContext();\nlet uid$1 = 0;\nfunction createComponentInstance(vnode, parent, suspense) {\n const type = vnode.type;\n // inherit parent app context - or - if root, adopt from root vnode\n const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n const instance = {\n uid: uid$1++,\n vnode,\n type,\n parent,\n appContext,\n root: null,\n next: null,\n subTree: null,\n effect: null,\n update: null,\n scope: new EffectScope(true /* detached */),\n render: null,\n proxy: null,\n exposed: null,\n exposeProxy: null,\n withProxy: null,\n provides: parent ? parent.provides : Object.create(appContext.provides),\n accessCache: null,\n renderCache: [],\n // local resolved assets\n components: null,\n directives: null,\n // resolved props and emits options\n propsOptions: normalizePropsOptions(type, appContext),\n emitsOptions: normalizeEmitsOptions(type, appContext),\n // emit\n emit: null,\n emitted: null,\n // props default value\n propsDefaults: EMPTY_OBJ,\n // inheritAttrs\n inheritAttrs: type.inheritAttrs,\n // state\n ctx: EMPTY_OBJ,\n data: EMPTY_OBJ,\n props: EMPTY_OBJ,\n attrs: EMPTY_OBJ,\n slots: EMPTY_OBJ,\n refs: EMPTY_OBJ,\n setupState: EMPTY_OBJ,\n setupContext: null,\n // suspense related\n suspense,\n suspenseId: suspense ? suspense.pendingId : 0,\n asyncDep: null,\n asyncResolved: false,\n // lifecycle hooks\n // not using enums here because it results in computed properties\n isMounted: false,\n isUnmounted: false,\n isDeactivated: false,\n bc: null,\n c: null,\n bm: null,\n m: null,\n bu: null,\n u: null,\n um: null,\n bum: null,\n da: null,\n a: null,\n rtg: null,\n rtc: null,\n ec: null,\n sp: null\n };\n if ((process.env.NODE_ENV !== 'production')) {\n instance.ctx = createDevRenderContext(instance);\n }\n else {\n instance.ctx = { _: instance };\n }\n instance.root = parent ? parent.root : instance;\n instance.emit = emit$1.bind(null, instance);\n // apply custom element special handling\n if (vnode.ce) {\n vnode.ce(instance);\n }\n return instance;\n}\nlet currentInstance = null;\nconst getCurrentInstance = () => currentInstance || currentRenderingInstance;\nconst setCurrentInstance = (instance) => {\n currentInstance = instance;\n instance.scope.on();\n};\nconst unsetCurrentInstance = () => {\n currentInstance && currentInstance.scope.off();\n currentInstance = null;\n};\nconst isBuiltInTag = /*#__PURE__*/ makeMap('slot,component');\nfunction validateComponentName(name, config) {\n const appIsNativeTag = config.isNativeTag || NO;\n if (isBuiltInTag(name) || appIsNativeTag(name)) {\n warn('Do not use built-in or reserved HTML elements as component id: ' + name);\n }\n}\nfunction isStatefulComponent(instance) {\n return instance.vnode.shapeFlag & 4 /* ShapeFlags.STATEFUL_COMPONENT */;\n}\nlet isInSSRComponentSetup = false;\nfunction setupComponent(instance, isSSR = false) {\n isInSSRComponentSetup = isSSR;\n const { props, children } = instance.vnode;\n const isStateful = isStatefulComponent(instance);\n initProps(instance, props, isStateful, isSSR);\n initSlots(instance, children);\n const setupResult = isStateful\n ? setupStatefulComponent(instance, isSSR)\n : undefined;\n isInSSRComponentSetup = false;\n return setupResult;\n}\nfunction setupStatefulComponent(instance, isSSR) {\n var _a;\n const Component = instance.type;\n if ((process.env.NODE_ENV !== 'production')) {\n if (Component.name) {\n validateComponentName(Component.name, instance.appContext.config);\n }\n if (Component.components) {\n const names = Object.keys(Component.components);\n for (let i = 0; i < names.length; i++) {\n validateComponentName(names[i], instance.appContext.config);\n }\n }\n if (Component.directives) {\n const names = Object.keys(Component.directives);\n for (let i = 0; i < names.length; i++) {\n validateDirectiveName(names[i]);\n }\n }\n if (Component.compilerOptions && isRuntimeOnly()) {\n warn(`\"compilerOptions\" is only supported when using a build of Vue that ` +\n `includes the runtime compiler. Since you are using a runtime-only ` +\n `build, the options should be passed via your build tool config instead.`);\n }\n }\n // 0. create render proxy property access cache\n instance.accessCache = Object.create(null);\n // 1. create public instance / render proxy\n // also mark it raw so it's never observed\n instance.proxy = markRaw(new Proxy(instance.ctx, PublicInstanceProxyHandlers));\n if ((process.env.NODE_ENV !== 'production')) {\n exposePropsOnRenderContext(instance);\n }\n // 2. call setup()\n const { setup } = Component;\n if (setup) {\n const setupContext = (instance.setupContext =\n setup.length > 1 ? createSetupContext(instance) : null);\n setCurrentInstance(instance);\n pauseTracking();\n const setupResult = callWithErrorHandling(setup, instance, 0 /* ErrorCodes.SETUP_FUNCTION */, [(process.env.NODE_ENV !== 'production') ? shallowReadonly(instance.props) : instance.props, setupContext]);\n resetTracking();\n unsetCurrentInstance();\n if (isPromise(setupResult)) {\n setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n if (isSSR) {\n // return the promise so server-renderer can wait on it\n return setupResult\n .then((resolvedResult) => {\n handleSetupResult(instance, resolvedResult, isSSR);\n })\n .catch(e => {\n handleError(e, instance, 0 /* ErrorCodes.SETUP_FUNCTION */);\n });\n }\n else {\n // async setup returned Promise.\n // bail here and wait for re-entry.\n instance.asyncDep = setupResult;\n if ((process.env.NODE_ENV !== 'production') && !instance.suspense) {\n const name = (_a = Component.name) !== null && _a !== void 0 ? _a : 'Anonymous';\n warn(`Component <${name}>: setup function returned a promise, but no ` +\n `<Suspense> boundary was found in the parent component tree. ` +\n `A component with async setup() must be nested in a <Suspense> ` +\n `in order to be rendered.`);\n }\n }\n }\n else {\n handleSetupResult(instance, setupResult, isSSR);\n }\n }\n else {\n finishComponentSetup(instance, isSSR);\n }\n}\nfunction handleSetupResult(instance, setupResult, isSSR) {\n if (isFunction(setupResult)) {\n // setup returned an inline render function\n if (instance.type.__ssrInlineRender) {\n // when the function's name is `ssrRender` (compiled by SFC inline mode),\n // set it as ssrRender instead.\n instance.ssrRender = setupResult;\n }\n else {\n instance.render = setupResult;\n }\n }\n else if (isObject(setupResult)) {\n if ((process.env.NODE_ENV !== 'production') && isVNode(setupResult)) {\n warn(`setup() should not return VNodes directly - ` +\n `return a render function instead.`);\n }\n // setup returned bindings.\n // assuming a render function compiled from template is present.\n if ((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) {\n instance.devtoolsRawSetupState = setupResult;\n }\n instance.setupState = proxyRefs(setupResult);\n if ((process.env.NODE_ENV !== 'production')) {\n exposeSetupStateOnRenderContext(instance);\n }\n }\n else if ((process.env.NODE_ENV !== 'production') && setupResult !== undefined) {\n warn(`setup() should return an object. Received: ${setupResult === null ? 'null' : typeof setupResult}`);\n }\n finishComponentSetup(instance, isSSR);\n}\nlet compile;\nlet installWithProxy;\n/**\n * For runtime-dom to register the compiler.\n * Note the exported method uses any to avoid d.ts relying on the compiler types.\n */\nfunction registerRuntimeCompiler(_compile) {\n compile = _compile;\n installWithProxy = i => {\n if (i.render._rc) {\n i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\n }\n };\n}\n// dev only\nconst isRuntimeOnly = () => !compile;\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\n const Component = instance.type;\n // template / render function normalization\n // could be already set when returned from setup()\n if (!instance.render) {\n // only do on-the-fly compile if not in SSR - SSR on-the-fly compilation\n // is done by server-renderer\n if (!isSSR && compile && !Component.render) {\n const template = Component.template ||\n resolveMergedOptions(instance).template;\n if (template) {\n if ((process.env.NODE_ENV !== 'production')) {\n startMeasure(instance, `compile`);\n }\n const { isCustomElement, compilerOptions } = instance.appContext.config;\n const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n const finalCompilerOptions = extend(extend({\n isCustomElement,\n delimiters\n }, compilerOptions), componentCompilerOptions);\n Component.render = compile(template, finalCompilerOptions);\n if ((process.env.NODE_ENV !== 'production')) {\n endMeasure(instance, `compile`);\n }\n }\n }\n instance.render = (Component.render || NOOP);\n // for runtime-compiled render functions using `with` blocks, the render\n // proxy used needs a different `has` handler which is more performant and\n // also only allows a whitelist of globals to fallthrough.\n if (installWithProxy) {\n installWithProxy(instance);\n }\n }\n // support for 2.x options\n if (__VUE_OPTIONS_API__ && !(false )) {\n setCurrentInstance(instance);\n pauseTracking();\n applyOptions(instance);\n resetTracking();\n unsetCurrentInstance();\n }\n // warn missing template/render\n // the runtime compilation of template in SSR is done by server-render\n if ((process.env.NODE_ENV !== 'production') && !Component.render && instance.render === NOOP && !isSSR) {\n /* istanbul ignore if */\n if (!compile && Component.template) {\n warn(`Component provided template option but ` +\n `runtime compilation is not supported in this build of Vue.` +\n (` Configure your bundler to alias \"vue\" to \"vue/dist/vue.esm-bundler.js\".`\n ) /* should not happen */);\n }\n else {\n warn(`Component is missing template or render function.`);\n }\n }\n}\nfunction createAttrsProxy(instance) {\n return new Proxy(instance.attrs, (process.env.NODE_ENV !== 'production')\n ? {\n get(target, key) {\n markAttrsAccessed();\n track(instance, \"get\" /* TrackOpTypes.GET */, '$attrs');\n return target[key];\n },\n set() {\n warn(`setupContext.attrs is readonly.`);\n return false;\n },\n deleteProperty() {\n warn(`setupContext.attrs is readonly.`);\n return false;\n }\n }\n : {\n get(target, key) {\n track(instance, \"get\" /* TrackOpTypes.GET */, '$attrs');\n return target[key];\n }\n });\n}\nfunction createSetupContext(instance) {\n const expose = exposed => {\n if ((process.env.NODE_ENV !== 'production') && instance.exposed) {\n warn(`expose() should be called only once per setup().`);\n }\n instance.exposed = exposed || {};\n };\n let attrs;\n if ((process.env.NODE_ENV !== 'production')) {\n // We use getters in dev in case libs like test-utils overwrite instance\n // properties (overwrites should not be done in prod)\n return Object.freeze({\n get attrs() {\n return attrs || (attrs = createAttrsProxy(instance));\n },\n get slots() {\n return shallowReadonly(instance.slots);\n },\n get emit() {\n return (event, ...args) => instance.emit(event, ...args);\n },\n expose\n });\n }\n else {\n return {\n get attrs() {\n return attrs || (attrs = createAttrsProxy(instance));\n },\n slots: instance.slots,\n emit: instance.emit,\n expose\n };\n }\n}\nfunction getExposeProxy(instance) {\n if (instance.exposed) {\n return (instance.exposeProxy ||\n (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {\n get(target, key) {\n if (key in target) {\n return target[key];\n }\n else if (key in publicPropertiesMap) {\n return publicPropertiesMap[key](instance);\n }\n },\n has(target, key) {\n return key in target || key in publicPropertiesMap;\n }\n })));\n }\n}\nconst classifyRE = /(?:^|[-_])(\\w)/g;\nconst classify = (str) => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');\nfunction getComponentName(Component, includeInferred = true) {\n return isFunction(Component)\n ? Component.displayName || Component.name\n : Component.name || (includeInferred && Component.__name);\n}\n/* istanbul ignore next */\nfunction formatComponentName(instance, Component, isRoot = false) {\n let name = getComponentName(Component);\n if (!name && Component.__file) {\n const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n if (match) {\n name = match[1];\n }\n }\n if (!name && instance && instance.parent) {\n // try to infer the name based on reverse resolution\n const inferFromRegistry = (registry) => {\n for (const key in registry) {\n if (registry[key] === Component) {\n return key;\n }\n }\n };\n name =\n inferFromRegistry(instance.components ||\n instance.parent.type.components) || inferFromRegistry(instance.appContext.components);\n }\n return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n}\nfunction isClassComponent(value) {\n return isFunction(value) && '__vccOpts' in value;\n}\n\nconst computed = ((getterOrOptions, debugOptions) => {\n // @ts-ignore\n return computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\n});\n\n// dev only\nconst warnRuntimeUsage = (method) => warn(`${method}() is a compiler-hint helper that is only usable inside ` +\n `<script setup> of a single file component. Its arguments should be ` +\n `compiled away and passing it at runtime has no effect.`);\n// implementation\nfunction defineProps() {\n if ((process.env.NODE_ENV !== 'production')) {\n warnRuntimeUsage(`defineProps`);\n }\n return null;\n}\n// implementation\nfunction defineEmits() {\n if ((process.env.NODE_ENV !== 'production')) {\n warnRuntimeUsage(`defineEmits`);\n }\n return null;\n}\n/**\n * Vue `<script setup>` compiler macro for declaring a component's exposed\n * instance properties when it is accessed by a parent component via template\n * refs.\n *\n * `<script setup>` components are closed by default - i.e. variables inside\n * the `<script setup>` scope is not exposed to parent unless explicitly exposed\n * via `defineExpose`.\n *\n * This is only usable inside `<script setup>`, is compiled away in the\n * output and should **not** be actually called at runtime.\n */\nfunction defineExpose(exposed) {\n if ((process.env.NODE_ENV !== 'production')) {\n warnRuntimeUsage(`defineExpose`);\n }\n}\n/**\n * Vue `<script setup>` compiler macro for providing props default values when\n * using type-based `defineProps` declaration.\n *\n * Example usage:\n * ```ts\n * withDefaults(defineProps<{\n * size?: number\n * labels?: string[]\n * }>(), {\n * size: 3,\n * labels: () => ['default label']\n * })\n * ```\n *\n * This is only usable inside `<script setup>`, is compiled away in the output\n * and should **not** be actually called at runtime.\n */\nfunction withDefaults(props, defaults) {\n if ((process.env.NODE_ENV !== 'production')) {\n warnRuntimeUsage(`withDefaults`);\n }\n return null;\n}\nfunction useSlots() {\n return getContext().slots;\n}\nfunction useAttrs() {\n return getContext().attrs;\n}\nfunction getContext() {\n const i = getCurrentInstance();\n if ((process.env.NODE_ENV !== 'production') && !i) {\n warn(`useContext() called without active instance.`);\n }\n return i.setupContext || (i.setupContext = createSetupContext(i));\n}\n/**\n * Runtime helper for merging default declarations. Imported by compiled code\n * only.\n * @internal\n */\nfunction mergeDefaults(raw, defaults) {\n const props = isArray(raw)\n ? raw.reduce((normalized, p) => ((normalized[p] = {}), normalized), {})\n : raw;\n for (const key in defaults) {\n const opt = props[key];\n if (opt) {\n if (isArray(opt) || isFunction(opt)) {\n props[key] = { type: opt, default: defaults[key] };\n }\n else {\n opt.default = defaults[key];\n }\n }\n else if (opt === null) {\n props[key] = { default: defaults[key] };\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`props default key \"${key}\" has no corresponding declaration.`);\n }\n }\n return props;\n}\n/**\n * Used to create a proxy for the rest element when destructuring props with\n * defineProps().\n * @internal\n */\nfunction createPropsRestProxy(props, excludedKeys) {\n const ret = {};\n for (const key in props) {\n if (!excludedKeys.includes(key)) {\n Object.defineProperty(ret, key, {\n enumerable: true,\n get: () => props[key]\n });\n }\n }\n return ret;\n}\n/**\n * `<script setup>` helper for persisting the current instance context over\n * async/await flows.\n *\n * `@vue/compiler-sfc` converts the following:\n *\n * ```ts\n * const x = await foo()\n * ```\n *\n * into:\n *\n * ```ts\n * let __temp, __restore\n * const x = (([__temp, __restore] = withAsyncContext(() => foo())),__temp=await __temp,__restore(),__temp)\n * ```\n * @internal\n */\nfunction withAsyncContext(getAwaitable) {\n const ctx = getCurrentInstance();\n if ((process.env.NODE_ENV !== 'production') && !ctx) {\n warn(`withAsyncContext called without active current instance. ` +\n `This is likely a bug.`);\n }\n let awaitable = getAwaitable();\n unsetCurrentInstance();\n if (isPromise(awaitable)) {\n awaitable = awaitable.catch(e => {\n setCurrentInstance(ctx);\n throw e;\n });\n }\n return [awaitable, () => setCurrentInstance(ctx)];\n}\n\n// Actual implementation\nfunction h(type, propsOrChildren, children) {\n const l = arguments.length;\n if (l === 2) {\n if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {\n // single vnode without props\n if (isVNode(propsOrChildren)) {\n return createVNode(type, null, [propsOrChildren]);\n }\n // props without children\n return createVNode(type, propsOrChildren);\n }\n else {\n // omit props\n return createVNode(type, null, propsOrChildren);\n }\n }\n else {\n if (l > 3) {\n children = Array.prototype.slice.call(arguments, 2);\n }\n else if (l === 3 && isVNode(children)) {\n children = [children];\n }\n return createVNode(type, propsOrChildren, children);\n }\n}\n\nconst ssrContextKey = Symbol((process.env.NODE_ENV !== 'production') ? `ssrContext` : ``);\nconst useSSRContext = () => {\n {\n const ctx = inject(ssrContextKey);\n if (!ctx) {\n (process.env.NODE_ENV !== 'production') &&\n warn(`Server rendering context not provided. Make sure to only call ` +\n `useSSRContext() conditionally in the server build.`);\n }\n return ctx;\n }\n};\n\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */]);\n}\n\nfunction initCustomFormatter() {\n /* eslint-disable no-restricted-globals */\n if (!(process.env.NODE_ENV !== 'production') || typeof window === 'undefined') {\n return;\n }\n const vueStyle = { style: 'color:#3ba776' };\n const numberStyle = { style: 'color:#0b1bc9' };\n const stringStyle = { style: 'color:#b62e24' };\n const keywordStyle = { style: 'color:#9d288c' };\n // custom formatter for Chrome\n // https://www.mattzeunert.com/2016/02/19/custom-chrome-devtools-object-formatters.html\n const formatter = {\n header(obj) {\n // TODO also format ComponentPublicInstance & ctx.slots/attrs in setup\n if (!isObject(obj)) {\n return null;\n }\n if (obj.__isVue) {\n return ['div', vueStyle, `VueInstance`];\n }\n else if (isRef(obj)) {\n return [\n 'div',\n {},\n ['span', vueStyle, genRefFlag(obj)],\n '<',\n formatValue(obj.value),\n `>`\n ];\n }\n else if (isReactive(obj)) {\n return [\n 'div',\n {},\n ['span', vueStyle, isShallow(obj) ? 'ShallowReactive' : 'Reactive'],\n '<',\n formatValue(obj),\n `>${isReadonly(obj) ? ` (readonly)` : ``}`\n ];\n }\n else if (isReadonly(obj)) {\n return [\n 'div',\n {},\n ['span', vueStyle, isShallow(obj) ? 'ShallowReadonly' : 'Readonly'],\n '<',\n formatValue(obj),\n '>'\n ];\n }\n return null;\n },\n hasBody(obj) {\n return obj && obj.__isVue;\n },\n body(obj) {\n if (obj && obj.__isVue) {\n return [\n 'div',\n {},\n ...formatInstance(obj.$)\n ];\n }\n }\n };\n function formatInstance(instance) {\n const blocks = [];\n if (instance.type.props && instance.props) {\n blocks.push(createInstanceBlock('props', toRaw(instance.props)));\n }\n if (instance.setupState !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock('setup', instance.setupState));\n }\n if (instance.data !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock('data', toRaw(instance.data)));\n }\n const computed = extractKeys(instance, 'computed');\n if (computed) {\n blocks.push(createInstanceBlock('computed', computed));\n }\n const injected = extractKeys(instance, 'inject');\n if (injected) {\n blocks.push(createInstanceBlock('injected', injected));\n }\n blocks.push([\n 'div',\n {},\n [\n 'span',\n {\n style: keywordStyle.style + ';opacity:0.66'\n },\n '$ (internal): '\n ],\n ['object', { object: instance }]\n ]);\n return blocks;\n }\n function createInstanceBlock(type, target) {\n target = extend({}, target);\n if (!Object.keys(target).length) {\n return ['span', {}];\n }\n return [\n 'div',\n { style: 'line-height:1.25em;margin-bottom:0.6em' },\n [\n 'div',\n {\n style: 'color:#476582'\n },\n type\n ],\n [\n 'div',\n {\n style: 'padding-left:1.25em'\n },\n ...Object.keys(target).map(key => {\n return [\n 'div',\n {},\n ['span', keywordStyle, key + ': '],\n formatValue(target[key], false)\n ];\n })\n ]\n ];\n }\n function formatValue(v, asRaw = true) {\n if (typeof v === 'number') {\n return ['span', numberStyle, v];\n }\n else if (typeof v === 'string') {\n return ['span', stringStyle, JSON.stringify(v)];\n }\n else if (typeof v === 'boolean') {\n return ['span', keywordStyle, v];\n }\n else if (isObject(v)) {\n return ['object', { object: asRaw ? toRaw(v) : v }];\n }\n else {\n return ['span', stringStyle, String(v)];\n }\n }\n function extractKeys(instance, type) {\n const Comp = instance.type;\n if (isFunction(Comp)) {\n return;\n }\n const extracted = {};\n for (const key in instance.ctx) {\n if (isKeyOfType(Comp, key, type)) {\n extracted[key] = instance.ctx[key];\n }\n }\n return extracted;\n }\n function isKeyOfType(Comp, key, type) {\n const opts = Comp[type];\n if ((isArray(opts) && opts.includes(key)) ||\n (isObject(opts) && key in opts)) {\n return true;\n }\n if (Comp.extends && isKeyOfType(Comp.extends, key, type)) {\n return true;\n }\n if (Comp.mixins && Comp.mixins.some(m => isKeyOfType(m, key, type))) {\n return true;\n }\n }\n function genRefFlag(v) {\n if (isShallow(v)) {\n return `ShallowRef`;\n }\n if (v.effect) {\n return `ComputedRef`;\n }\n return `Ref`;\n }\n if (window.devtoolsFormatters) {\n window.devtoolsFormatters.push(formatter);\n }\n else {\n window.devtoolsFormatters = [formatter];\n }\n}\n\nfunction withMemo(memo, render, cache, index) {\n const cached = cache[index];\n if (cached && isMemoSame(cached, memo)) {\n return cached;\n }\n const ret = render();\n // shallow clone\n ret.memo = memo.slice();\n return (cache[index] = ret);\n}\nfunction isMemoSame(cached, memo) {\n const prev = cached.memo;\n if (prev.length != memo.length) {\n return false;\n }\n for (let i = 0; i < prev.length; i++) {\n if (hasChanged(prev[i], memo[i])) {\n return false;\n }\n }\n // make sure to let parent block track it when returning cached\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(cached);\n }\n return true;\n}\n\n// Core API ------------------------------------------------------------------\nconst version = \"3.2.45\";\nconst _ssrUtils = {\n createComponentInstance,\n setupComponent,\n renderComponentRoot,\n setCurrentRenderingInstance,\n isVNode,\n normalizeVNode\n};\n/**\n * SSR utils for \\@vue/server-renderer. Only exposed in ssr-possible builds.\n * @internal\n */\nconst ssrUtils = (_ssrUtils );\n/**\n * @internal only exposed in compat builds\n */\nconst resolveFilter = null;\n/**\n * @internal only exposed in compat builds.\n */\nconst compatUtils = (null);\n\nexport { BaseTransition, Comment, Fragment, KeepAlive, Static, Suspense, Teleport, Text, callWithAsyncErrorHandling, callWithErrorHandling, cloneVNode, compatUtils, computed, createBlock, createCommentVNode, createElementBlock, createBaseVNode as createElementVNode, createHydrationRenderer, createPropsRestProxy, createRenderer, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, defineEmits, defineExpose, defineProps, devtools, getCurrentInstance, getTransitionRawChildren, guardReactiveProps, h, handleError, initCustomFormatter, inject, isMemoSame, isRuntimeOnly, isVNode, mergeDefaults, mergeProps, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onServerPrefetch, onUnmounted, onUpdated, openBlock, popScopeId, provide, pushScopeId, queuePostFlushCb, registerRuntimeCompiler, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, resolveFilter, resolveTransitionHooks, setBlockTracking, setDevtoolsHook, setTransitionHooks, ssrContextKey, ssrUtils, toHandlers, transformVNodeArgs, useAttrs, useSSRContext, useSlots, useTransitionState, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect, withAsyncContext, withCtx, withDefaults, withDirectives, withMemo, withScopeId };\n","import { warn, camelize, callWithAsyncErrorHandling, defineComponent, nextTick, createVNode, getCurrentInstance, watchPostEffect, onMounted, onUnmounted, Fragment, Static, h, BaseTransition, useTransitionState, onUpdated, toRaw, getTransitionRawChildren, setTransitionHooks, resolveTransitionHooks, createRenderer, isRuntimeOnly, createHydrationRenderer } from '@vue/runtime-core';\nexport * from '@vue/runtime-core';\nimport { isString, isArray, hyphenate, capitalize, isSpecialBooleanAttr, includeBooleanAttr, isOn, isModelListener, isFunction, camelize as camelize$1, toNumber, extend, EMPTY_OBJ, isObject, invokeArrayFns, looseIndexOf, isSet, looseEqual, isHTMLTag, isSVGTag } from '@vue/shared';\n\nconst svgNS = 'http://www.w3.org/2000/svg';\nconst doc = (typeof document !== 'undefined' ? document : null);\nconst templateContainer = doc && /*#__PURE__*/ doc.createElement('template');\nconst nodeOps = {\n insert: (child, parent, anchor) => {\n parent.insertBefore(child, anchor || null);\n },\n remove: child => {\n const parent = child.parentNode;\n if (parent) {\n parent.removeChild(child);\n }\n },\n createElement: (tag, isSVG, is, props) => {\n const el = isSVG\n ? doc.createElementNS(svgNS, tag)\n : doc.createElement(tag, is ? { is } : undefined);\n if (tag === 'select' && props && props.multiple != null) {\n el.setAttribute('multiple', props.multiple);\n }\n return el;\n },\n createText: text => doc.createTextNode(text),\n createComment: text => doc.createComment(text),\n setText: (node, text) => {\n node.nodeValue = text;\n },\n setElementText: (el, text) => {\n el.textContent = text;\n },\n parentNode: node => node.parentNode,\n nextSibling: node => node.nextSibling,\n querySelector: selector => doc.querySelector(selector),\n setScopeId(el, id) {\n el.setAttribute(id, '');\n },\n // __UNSAFE__\n // Reason: innerHTML.\n // Static content here can only come from compiled templates.\n // As long as the user only uses trusted templates, this is safe.\n insertStaticContent(content, parent, anchor, isSVG, start, end) {\n // <parent> before | first ... last | anchor </parent>\n const before = anchor ? anchor.previousSibling : parent.lastChild;\n // #5308 can only take cached path if:\n // - has a single root node\n // - nextSibling info is still available\n if (start && (start === end || start.nextSibling)) {\n // cached\n while (true) {\n parent.insertBefore(start.cloneNode(true), anchor);\n if (start === end || !(start = start.nextSibling))\n break;\n }\n }\n else {\n // fresh insert\n templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content;\n const template = templateContainer.content;\n if (isSVG) {\n // remove outer svg wrapper\n const wrapper = template.firstChild;\n while (wrapper.firstChild) {\n template.appendChild(wrapper.firstChild);\n }\n template.removeChild(wrapper);\n }\n parent.insertBefore(template, anchor);\n }\n return [\n // first\n before ? before.nextSibling : parent.firstChild,\n // last\n anchor ? anchor.previousSibling : parent.lastChild\n ];\n }\n};\n\n// compiler should normalize class + :class bindings on the same element\n// into a single binding ['staticClass', dynamic]\nfunction patchClass(el, value, isSVG) {\n // directly setting className should be faster than setAttribute in theory\n // if this is an element during a transition, take the temporary transition\n // classes into account.\n const transitionClasses = el._vtc;\n if (transitionClasses) {\n value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(' ');\n }\n if (value == null) {\n el.removeAttribute('class');\n }\n else if (isSVG) {\n el.setAttribute('class', value);\n }\n else {\n el.className = value;\n }\n}\n\nfunction patchStyle(el, prev, next) {\n const style = el.style;\n const isCssString = isString(next);\n if (next && !isCssString) {\n for (const key in next) {\n setStyle(style, key, next[key]);\n }\n if (prev && !isString(prev)) {\n for (const key in prev) {\n if (next[key] == null) {\n setStyle(style, key, '');\n }\n }\n }\n }\n else {\n const currentDisplay = style.display;\n if (isCssString) {\n if (prev !== next) {\n style.cssText = next;\n }\n }\n else if (prev) {\n el.removeAttribute('style');\n }\n // indicates that the `display` of the element is controlled by `v-show`,\n // so we always keep the current `display` value regardless of the `style`\n // value, thus handing over control to `v-show`.\n if ('_vod' in el) {\n style.display = currentDisplay;\n }\n }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n if (isArray(val)) {\n val.forEach(v => setStyle(style, name, v));\n }\n else {\n if (val == null)\n val = '';\n if ((process.env.NODE_ENV !== 'production')) {\n if (semicolonRE.test(val)) {\n warn(`Unexpected semicolon at the end of '${name}' style value: '${val}'`);\n }\n }\n if (name.startsWith('--')) {\n // custom property definition\n style.setProperty(name, val);\n }\n else {\n const prefixed = autoPrefix(style, name);\n if (importantRE.test(val)) {\n // !important\n style.setProperty(hyphenate(prefixed), val.replace(importantRE, ''), 'important');\n }\n else {\n style[prefixed] = val;\n }\n }\n }\n}\nconst prefixes = ['Webkit', 'Moz', 'ms'];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n const cached = prefixCache[rawName];\n if (cached) {\n return cached;\n }\n let name = camelize(rawName);\n if (name !== 'filter' && name in style) {\n return (prefixCache[rawName] = name);\n }\n name = capitalize(name);\n for (let i = 0; i < prefixes.length; i++) {\n const prefixed = prefixes[i] + name;\n if (prefixed in style) {\n return (prefixCache[rawName] = prefixed);\n }\n }\n return rawName;\n}\n\nconst xlinkNS = 'http://www.w3.org/1999/xlink';\nfunction patchAttr(el, key, value, isSVG, instance) {\n if (isSVG && key.startsWith('xlink:')) {\n if (value == null) {\n el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n }\n else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n }\n else {\n // note we are only checking boolean attributes that don't have a\n // corresponding dom prop of the same name here.\n const isBoolean = isSpecialBooleanAttr(key);\n if (value == null || (isBoolean && !includeBooleanAttr(value))) {\n el.removeAttribute(key);\n }\n else {\n el.setAttribute(key, isBoolean ? '' : value);\n }\n }\n}\n\n// __UNSAFE__\n// functions. The user is responsible for using them with only trusted content.\nfunction patchDOMProp(el, key, value, \n// the following args are passed only due to potential innerHTML/textContent\n// overriding existing VNodes, in which case the old tree must be properly\n// unmounted.\nprevChildren, parentComponent, parentSuspense, unmountChildren) {\n if (key === 'innerHTML' || key === 'textContent') {\n if (prevChildren) {\n unmountChildren(prevChildren, parentComponent, parentSuspense);\n }\n el[key] = value == null ? '' : value;\n return;\n }\n if (key === 'value' &&\n el.tagName !== 'PROGRESS' &&\n // custom elements may use _value internally\n !el.tagName.includes('-')) {\n // store value as _value as well since\n // non-string values will be stringified.\n el._value = value;\n const newValue = value == null ? '' : value;\n if (el.value !== newValue ||\n // #4956: always set for OPTION elements because its value falls back to\n // textContent if no value attribute is present. And setting .value for\n // OPTION has no side effect\n el.tagName === 'OPTION') {\n el.value = newValue;\n }\n if (value == null) {\n el.removeAttribute(key);\n }\n return;\n }\n let needRemove = false;\n if (value === '' || value == null) {\n const type = typeof el[key];\n if (type === 'boolean') {\n // e.g. <select multiple> compiles to { multiple: '' }\n value = includeBooleanAttr(value);\n }\n else if (value == null && type === 'string') {\n // e.g. <div :id=\"null\">\n value = '';\n needRemove = true;\n }\n else if (type === 'number') {\n // e.g. <img :width=\"null\">\n value = 0;\n needRemove = true;\n }\n }\n // some properties perform value validation and throw,\n // some properties has getter, no setter, will error in 'use strict'\n // eg. <select :type=\"null\"></select> <select :willValidate=\"null\"></select>\n try {\n el[key] = value;\n }\n catch (e) {\n // do not warn if value is auto-coerced from nullish values\n if ((process.env.NODE_ENV !== 'production') && !needRemove) {\n warn(`Failed setting prop \"${key}\" on <${el.tagName.toLowerCase()}>: ` +\n `value ${value} is invalid.`, e);\n }\n }\n needRemove && el.removeAttribute(key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n el.removeEventListener(event, handler, options);\n}\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n // vei = vue event invokers\n const invokers = el._vei || (el._vei = {});\n const existingInvoker = invokers[rawName];\n if (nextValue && existingInvoker) {\n // patch\n existingInvoker.value = nextValue;\n }\n else {\n const [name, options] = parseName(rawName);\n if (nextValue) {\n // add\n const invoker = (invokers[rawName] = createInvoker(nextValue, instance));\n addEventListener(el, name, invoker, options);\n }\n else if (existingInvoker) {\n // remove\n removeEventListener(el, name, existingInvoker, options);\n invokers[rawName] = undefined;\n }\n }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n let options;\n if (optionsModifierRE.test(name)) {\n options = {};\n let m;\n while ((m = name.match(optionsModifierRE))) {\n name = name.slice(0, name.length - m[0].length);\n options[m[0].toLowerCase()] = true;\n }\n }\n const event = name[2] === ':' ? name.slice(3) : hyphenate(name.slice(2));\n return [event, options];\n}\n// To avoid the overhead of repeatedly calling Date.now(), we cache\n// and use the same timestamp for all event listeners attached in the same tick.\nlet cachedNow = 0;\nconst p = /*#__PURE__*/ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => (cachedNow = 0)), (cachedNow = Date.now()));\nfunction createInvoker(initialValue, instance) {\n const invoker = (e) => {\n // async edge case vuejs/vue#6566\n // inner click event triggers patch, event handler\n // attached to outer element during patch, and triggered again. This\n // happens because browsers fire microtask ticks between event propagation.\n // this no longer happens for templates in Vue 3, but could still be\n // theoretically possible for hand-written render functions.\n // the solution: we save the timestamp when a handler is attached,\n // and also attach the timestamp to any event that was handled by vue\n // for the first time (to avoid inconsistent event timestamp implementations\n // or events fired from iframes, e.g. #2513)\n // The handler would only fire if the event passed to it was fired\n // AFTER it was attached.\n if (!e._vts) {\n e._vts = Date.now();\n }\n else if (e._vts <= invoker.attached) {\n return;\n }\n callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5 /* ErrorCodes.NATIVE_EVENT_HANDLER */, [e]);\n };\n invoker.value = initialValue;\n invoker.attached = getNow();\n return invoker;\n}\nfunction patchStopImmediatePropagation(e, value) {\n if (isArray(value)) {\n const originalStop = e.stopImmediatePropagation;\n e.stopImmediatePropagation = () => {\n originalStop.call(e);\n e._stopped = true;\n };\n return value.map(fn => (e) => !e._stopped && fn && fn(e));\n }\n else {\n return value;\n }\n}\n\nconst nativeOnRE = /^on[a-z]/;\nconst patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => {\n if (key === 'class') {\n patchClass(el, nextValue, isSVG);\n }\n else if (key === 'style') {\n patchStyle(el, prevValue, nextValue);\n }\n else if (isOn(key)) {\n // ignore v-model listeners\n if (!isModelListener(key)) {\n patchEvent(el, key, prevValue, nextValue, parentComponent);\n }\n }\n else if (key[0] === '.'\n ? ((key = key.slice(1)), true)\n : key[0] === '^'\n ? ((key = key.slice(1)), false)\n : shouldSetAsProp(el, key, nextValue, isSVG)) {\n patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);\n }\n else {\n // special case for <input v-model type=\"checkbox\"> with\n // :true-value & :false-value\n // store value as dom properties since non-string values will be\n // stringified.\n if (key === 'true-value') {\n el._trueValue = nextValue;\n }\n else if (key === 'false-value') {\n el._falseValue = nextValue;\n }\n patchAttr(el, key, nextValue, isSVG);\n }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n if (isSVG) {\n // most keys must be set as attribute on svg elements to work\n // ...except innerHTML & textContent\n if (key === 'innerHTML' || key === 'textContent') {\n return true;\n }\n // or native onclick with function values\n if (key in el && nativeOnRE.test(key) && isFunction(value)) {\n return true;\n }\n return false;\n }\n // these are enumerated attrs, however their corresponding DOM properties\n // are actually booleans - this leads to setting it with a string \"false\"\n // value leading it to be coerced to `true`, so we need to always treat\n // them as attributes.\n // Note that `contentEditable` doesn't have this problem: its DOM\n // property is also enumerated string values.\n if (key === 'spellcheck' || key === 'draggable' || key === 'translate') {\n return false;\n }\n // #1787, #2840 form property on form elements is readonly and must be set as\n // attribute.\n if (key === 'form') {\n return false;\n }\n // #1526 <input list> must be set as attribute\n if (key === 'list' && el.tagName === 'INPUT') {\n return false;\n }\n // #2766 <textarea type> must be set as attribute\n if (key === 'type' && el.tagName === 'TEXTAREA') {\n return false;\n }\n // native onclick with string value, must be set as attribute\n if (nativeOnRE.test(key) && isString(value)) {\n return false;\n }\n return key in el;\n}\n\nfunction defineCustomElement(options, hydrate) {\n const Comp = defineComponent(options);\n class VueCustomElement extends VueElement {\n constructor(initialProps) {\n super(Comp, initialProps, hydrate);\n }\n }\n VueCustomElement.def = Comp;\n return VueCustomElement;\n}\nconst defineSSRCustomElement = ((options) => {\n // @ts-ignore\n return defineCustomElement(options, hydrate);\n});\nconst BaseClass = (typeof HTMLElement !== 'undefined' ? HTMLElement : class {\n});\nclass VueElement extends BaseClass {\n constructor(_def, _props = {}, hydrate) {\n super();\n this._def = _def;\n this._props = _props;\n /**\n * @internal\n */\n this._instance = null;\n this._connected = false;\n this._resolved = false;\n this._numberProps = null;\n if (this.shadowRoot && hydrate) {\n hydrate(this._createVNode(), this.shadowRoot);\n }\n else {\n if ((process.env.NODE_ENV !== 'production') && this.shadowRoot) {\n warn(`Custom element has pre-rendered declarative shadow root but is not ` +\n `defined as hydratable. Use \\`defineSSRCustomElement\\`.`);\n }\n this.attachShadow({ mode: 'open' });\n if (!this._def.__asyncLoader) {\n // for sync component defs we can immediately resolve props\n this._resolveProps(this._def);\n }\n }\n }\n connectedCallback() {\n this._connected = true;\n if (!this._instance) {\n if (this._resolved) {\n this._update();\n }\n else {\n this._resolveDef();\n }\n }\n }\n disconnectedCallback() {\n this._connected = false;\n nextTick(() => {\n if (!this._connected) {\n render(null, this.shadowRoot);\n this._instance = null;\n }\n });\n }\n /**\n * resolve inner component definition (handle possible async component)\n */\n _resolveDef() {\n this._resolved = true;\n // set initial attrs\n for (let i = 0; i < this.attributes.length; i++) {\n this._setAttr(this.attributes[i].name);\n }\n // watch future attr changes\n new MutationObserver(mutations => {\n for (const m of mutations) {\n this._setAttr(m.attributeName);\n }\n }).observe(this, { attributes: true });\n const resolve = (def, isAsync = false) => {\n const { props, styles } = def;\n // cast Number-type props set before resolve\n let numberProps;\n if (props && !isArray(props)) {\n for (const key in props) {\n const opt = props[key];\n if (opt === Number || (opt && opt.type === Number)) {\n if (key in this._props) {\n this._props[key] = toNumber(this._props[key]);\n }\n (numberProps || (numberProps = Object.create(null)))[camelize$1(key)] = true;\n }\n }\n }\n this._numberProps = numberProps;\n if (isAsync) {\n // defining getter/setters on prototype\n // for sync defs, this already happened in the constructor\n this._resolveProps(def);\n }\n // apply CSS\n this._applyStyles(styles);\n // initial render\n this._update();\n };\n const asyncDef = this._def.__asyncLoader;\n if (asyncDef) {\n asyncDef().then(def => resolve(def, true));\n }\n else {\n resolve(this._def);\n }\n }\n _resolveProps(def) {\n const { props } = def;\n const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});\n // check if there are props set pre-upgrade or connect\n for (const key of Object.keys(this)) {\n if (key[0] !== '_' && declaredPropKeys.includes(key)) {\n this._setProp(key, this[key], true, false);\n }\n }\n // defining getter/setters on prototype\n for (const key of declaredPropKeys.map(camelize$1)) {\n Object.defineProperty(this, key, {\n get() {\n return this._getProp(key);\n },\n set(val) {\n this._setProp(key, val);\n }\n });\n }\n }\n _setAttr(key) {\n let value = this.getAttribute(key);\n const camelKey = camelize$1(key);\n if (this._numberProps && this._numberProps[camelKey]) {\n value = toNumber(value);\n }\n this._setProp(camelKey, value, false);\n }\n /**\n * @internal\n */\n _getProp(key) {\n return this._props[key];\n }\n /**\n * @internal\n */\n _setProp(key, val, shouldReflect = true, shouldUpdate = true) {\n if (val !== this._props[key]) {\n this._props[key] = val;\n if (shouldUpdate && this._instance) {\n this._update();\n }\n // reflect\n if (shouldReflect) {\n if (val === true) {\n this.setAttribute(hyphenate(key), '');\n }\n else if (typeof val === 'string' || typeof val === 'number') {\n this.setAttribute(hyphenate(key), val + '');\n }\n else if (!val) {\n this.removeAttribute(hyphenate(key));\n }\n }\n }\n }\n _update() {\n render(this._createVNode(), this.shadowRoot);\n }\n _createVNode() {\n const vnode = createVNode(this._def, extend({}, this._props));\n if (!this._instance) {\n vnode.ce = instance => {\n this._instance = instance;\n instance.isCE = true;\n // HMR\n if ((process.env.NODE_ENV !== 'production')) {\n instance.ceReload = newStyles => {\n // always reset styles\n if (this._styles) {\n this._styles.forEach(s => this.shadowRoot.removeChild(s));\n this._styles.length = 0;\n }\n this._applyStyles(newStyles);\n this._instance = null;\n this._update();\n };\n }\n const dispatch = (event, args) => {\n this.dispatchEvent(new CustomEvent(event, {\n detail: args\n }));\n };\n // intercept emit\n instance.emit = (event, ...args) => {\n // dispatch both the raw and hyphenated versions of an event\n // to match Vue behavior\n dispatch(event, args);\n if (hyphenate(event) !== event) {\n dispatch(hyphenate(event), args);\n }\n };\n // locate nearest Vue custom element parent for provide/inject\n let parent = this;\n while ((parent =\n parent && (parent.parentNode || parent.host))) {\n if (parent instanceof VueElement) {\n instance.parent = parent._instance;\n instance.provides = parent._instance.provides;\n break;\n }\n }\n };\n }\n return vnode;\n }\n _applyStyles(styles) {\n if (styles) {\n styles.forEach(css => {\n const s = document.createElement('style');\n s.textContent = css;\n this.shadowRoot.appendChild(s);\n // record for HMR\n if ((process.env.NODE_ENV !== 'production')) {\n (this._styles || (this._styles = [])).push(s);\n }\n });\n }\n }\n}\n\nfunction useCssModule(name = '$style') {\n /* istanbul ignore else */\n {\n const instance = getCurrentInstance();\n if (!instance) {\n (process.env.NODE_ENV !== 'production') && warn(`useCssModule must be called inside setup()`);\n return EMPTY_OBJ;\n }\n const modules = instance.type.__cssModules;\n if (!modules) {\n (process.env.NODE_ENV !== 'production') && warn(`Current instance does not have CSS modules injected.`);\n return EMPTY_OBJ;\n }\n const mod = modules[name];\n if (!mod) {\n (process.env.NODE_ENV !== 'production') &&\n warn(`Current instance does not have CSS module named \"${name}\".`);\n return EMPTY_OBJ;\n }\n return mod;\n }\n}\n\n/**\n * Runtime helper for SFC's CSS variable injection feature.\n * @private\n */\nfunction useCssVars(getter) {\n const instance = getCurrentInstance();\n /* istanbul ignore next */\n if (!instance) {\n (process.env.NODE_ENV !== 'production') &&\n warn(`useCssVars is called without current active component instance.`);\n return;\n }\n const updateTeleports = (instance.ut = (vars = getter(instance.proxy)) => {\n Array.from(document.querySelectorAll(`[data-v-owner=\"${instance.uid}\"]`)).forEach(node => setVarsOnNode(node, vars));\n });\n const setVars = () => {\n const vars = getter(instance.proxy);\n setVarsOnVNode(instance.subTree, vars);\n updateTeleports(vars);\n };\n watchPostEffect(setVars);\n onMounted(() => {\n const ob = new MutationObserver(setVars);\n ob.observe(instance.subTree.el.parentNode, { childList: true });\n onUnmounted(() => ob.disconnect());\n });\n}\nfunction setVarsOnVNode(vnode, vars) {\n if (vnode.shapeFlag & 128 /* ShapeFlags.SUSPENSE */) {\n const suspense = vnode.suspense;\n vnode = suspense.activeBranch;\n if (suspense.pendingBranch && !suspense.isHydrating) {\n suspense.effects.push(() => {\n setVarsOnVNode(suspense.activeBranch, vars);\n });\n }\n }\n // drill down HOCs until it's a non-component vnode\n while (vnode.component) {\n vnode = vnode.component.subTree;\n }\n if (vnode.shapeFlag & 1 /* ShapeFlags.ELEMENT */ && vnode.el) {\n setVarsOnNode(vnode.el, vars);\n }\n else if (vnode.type === Fragment) {\n vnode.children.forEach(c => setVarsOnVNode(c, vars));\n }\n else if (vnode.type === Static) {\n let { el, anchor } = vnode;\n while (el) {\n setVarsOnNode(el, vars);\n if (el === anchor)\n break;\n el = el.nextSibling;\n }\n }\n}\nfunction setVarsOnNode(el, vars) {\n if (el.nodeType === 1) {\n const style = el.style;\n for (const key in vars) {\n style.setProperty(`--${key}`, vars[key]);\n }\n }\n}\n\nconst TRANSITION = 'transition';\nconst ANIMATION = 'animation';\n// DOM Transition is a higher-order-component based on the platform-agnostic\n// base Transition component, with DOM-specific logic.\nconst Transition = (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots);\nTransition.displayName = 'Transition';\nconst DOMTransitionPropsValidators = {\n name: String,\n type: String,\n css: {\n type: Boolean,\n default: true\n },\n duration: [String, Number, Object],\n enterFromClass: String,\n enterActiveClass: String,\n enterToClass: String,\n appearFromClass: String,\n appearActiveClass: String,\n appearToClass: String,\n leaveFromClass: String,\n leaveActiveClass: String,\n leaveToClass: String\n};\nconst TransitionPropsValidators = (Transition.props =\n /*#__PURE__*/ extend({}, BaseTransition.props, DOMTransitionPropsValidators));\n/**\n * #3227 Incoming hooks may be merged into arrays when wrapping Transition\n * with custom HOCs.\n */\nconst callHook = (hook, args = []) => {\n if (isArray(hook)) {\n hook.forEach(h => h(...args));\n }\n else if (hook) {\n hook(...args);\n }\n};\n/**\n * Check if a hook expects a callback (2nd arg), which means the user\n * intends to explicitly control the end of the transition.\n */\nconst hasExplicitCallback = (hook) => {\n return hook\n ? isArray(hook)\n ? hook.some(h => h.length > 1)\n : hook.length > 1\n : false;\n};\nfunction resolveTransitionProps(rawProps) {\n const baseProps = {};\n for (const key in rawProps) {\n if (!(key in DOMTransitionPropsValidators)) {\n baseProps[key] = rawProps[key];\n }\n }\n if (rawProps.css === false) {\n return baseProps;\n }\n const { name = 'v', type, duration, enterFromClass = `${name}-enter-from`, enterActiveClass = `${name}-enter-active`, enterToClass = `${name}-enter-to`, appearFromClass = enterFromClass, appearActiveClass = enterActiveClass, appearToClass = enterToClass, leaveFromClass = `${name}-leave-from`, leaveActiveClass = `${name}-leave-active`, leaveToClass = `${name}-leave-to` } = rawProps;\n const durations = normalizeDuration(duration);\n const enterDuration = durations && durations[0];\n const leaveDuration = durations && durations[1];\n const { onBeforeEnter, onEnter, onEnterCancelled, onLeave, onLeaveCancelled, onBeforeAppear = onBeforeEnter, onAppear = onEnter, onAppearCancelled = onEnterCancelled } = baseProps;\n const finishEnter = (el, isAppear, done) => {\n removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n done && done();\n };\n const finishLeave = (el, done) => {\n el._isLeaving = false;\n removeTransitionClass(el, leaveFromClass);\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n done && done();\n };\n const makeEnterHook = (isAppear) => {\n return (el, done) => {\n const hook = isAppear ? onAppear : onEnter;\n const resolve = () => finishEnter(el, isAppear, done);\n callHook(hook, [el, resolve]);\n nextFrame(() => {\n removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n if (!hasExplicitCallback(hook)) {\n whenTransitionEnds(el, type, enterDuration, resolve);\n }\n });\n };\n };\n return extend(baseProps, {\n onBeforeEnter(el) {\n callHook(onBeforeEnter, [el]);\n addTransitionClass(el, enterFromClass);\n addTransitionClass(el, enterActiveClass);\n },\n onBeforeAppear(el) {\n callHook(onBeforeAppear, [el]);\n addTransitionClass(el, appearFromClass);\n addTransitionClass(el, appearActiveClass);\n },\n onEnter: makeEnterHook(false),\n onAppear: makeEnterHook(true),\n onLeave(el, done) {\n el._isLeaving = true;\n const resolve = () => finishLeave(el, done);\n addTransitionClass(el, leaveFromClass);\n // force reflow so *-leave-from classes immediately take effect (#2593)\n forceReflow();\n addTransitionClass(el, leaveActiveClass);\n nextFrame(() => {\n if (!el._isLeaving) {\n // cancelled\n return;\n }\n removeTransitionClass(el, leaveFromClass);\n addTransitionClass(el, leaveToClass);\n if (!hasExplicitCallback(onLeave)) {\n whenTransitionEnds(el, type, leaveDuration, resolve);\n }\n });\n callHook(onLeave, [el, resolve]);\n },\n onEnterCancelled(el) {\n finishEnter(el, false);\n callHook(onEnterCancelled, [el]);\n },\n onAppearCancelled(el) {\n finishEnter(el, true);\n callHook(onAppearCancelled, [el]);\n },\n onLeaveCancelled(el) {\n finishLeave(el);\n callHook(onLeaveCancelled, [el]);\n }\n });\n}\nfunction normalizeDuration(duration) {\n if (duration == null) {\n return null;\n }\n else if (isObject(duration)) {\n return [NumberOf(duration.enter), NumberOf(duration.leave)];\n }\n else {\n const n = NumberOf(duration);\n return [n, n];\n }\n}\nfunction NumberOf(val) {\n const res = toNumber(val);\n if ((process.env.NODE_ENV !== 'production'))\n validateDuration(res);\n return res;\n}\nfunction validateDuration(val) {\n if (typeof val !== 'number') {\n warn(`<transition> explicit duration is not a valid number - ` +\n `got ${JSON.stringify(val)}.`);\n }\n else if (isNaN(val)) {\n warn(`<transition> explicit duration is NaN - ` +\n 'the duration expression might be incorrect.');\n }\n}\nfunction addTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach(c => c && el.classList.add(c));\n (el._vtc ||\n (el._vtc = new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach(c => c && el.classList.remove(c));\n const { _vtc } = el;\n if (_vtc) {\n _vtc.delete(cls);\n if (!_vtc.size) {\n el._vtc = undefined;\n }\n }\n}\nfunction nextFrame(cb) {\n requestAnimationFrame(() => {\n requestAnimationFrame(cb);\n });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n const id = (el._endId = ++endId);\n const resolveIfNotStale = () => {\n if (id === el._endId) {\n resolve();\n }\n };\n if (explicitTimeout) {\n return setTimeout(resolveIfNotStale, explicitTimeout);\n }\n const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n if (!type) {\n return resolve();\n }\n const endEvent = type + 'end';\n let ended = 0;\n const end = () => {\n el.removeEventListener(endEvent, onEnd);\n resolveIfNotStale();\n };\n const onEnd = (e) => {\n if (e.target === el && ++ended >= propCount) {\n end();\n }\n };\n setTimeout(() => {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n const styles = window.getComputedStyle(el);\n // JSDOM may return undefined for transition properties\n const getStyleProperties = (key) => (styles[key] || '').split(', ');\n const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n const animationTimeout = getTimeout(animationDelays, animationDurations);\n let type = null;\n let timeout = 0;\n let propCount = 0;\n /* istanbul ignore if */\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n }\n else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n }\n else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type =\n timeout > 0\n ? transitionTimeout > animationTimeout\n ? TRANSITION\n : ANIMATION\n : null;\n propCount = type\n ? type === TRANSITION\n ? transitionDurations.length\n : animationDurations.length\n : 0;\n }\n const hasTransform = type === TRANSITION &&\n /\\b(transform|all)(,|$)/.test(getStyleProperties(`${TRANSITION}Property`).toString());\n return {\n type,\n timeout,\n propCount,\n hasTransform\n };\n}\nfunction getTimeout(delays, durations) {\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer\n// numbers in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down\n// (i.e. acting as a floor function) causing unexpected behaviors\nfunction toMs(s) {\n return Number(s.slice(0, -1).replace(',', '.')) * 1000;\n}\n// synchronously force layout to put elements into a certain state\nfunction forceReflow() {\n return document.body.offsetHeight;\n}\n\nconst positionMap = new WeakMap();\nconst newPositionMap = new WeakMap();\nconst TransitionGroupImpl = {\n name: 'TransitionGroup',\n props: /*#__PURE__*/ extend({}, TransitionPropsValidators, {\n tag: String,\n moveClass: String\n }),\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n let prevChildren;\n let children;\n onUpdated(() => {\n // children is guaranteed to exist after initial render\n if (!prevChildren.length) {\n return;\n }\n const moveClass = props.moveClass || `${props.name || 'v'}-move`;\n if (!hasCSSTransform(prevChildren[0].el, instance.vnode.el, moveClass)) {\n return;\n }\n // we divide the work into three loops to avoid mixing DOM reads and writes\n // in each iteration - which helps prevent layout thrashing.\n prevChildren.forEach(callPendingCbs);\n prevChildren.forEach(recordPosition);\n const movedChildren = prevChildren.filter(applyTranslation);\n // force reflow to put everything in position\n forceReflow();\n movedChildren.forEach(c => {\n const el = c.el;\n const style = el.style;\n addTransitionClass(el, moveClass);\n style.transform = style.webkitTransform = style.transitionDuration = '';\n const cb = (el._moveCb = (e) => {\n if (e && e.target !== el) {\n return;\n }\n if (!e || /transform$/.test(e.propertyName)) {\n el.removeEventListener('transitionend', cb);\n el._moveCb = null;\n removeTransitionClass(el, moveClass);\n }\n });\n el.addEventListener('transitionend', cb);\n });\n });\n return () => {\n const rawProps = toRaw(props);\n const cssTransitionProps = resolveTransitionProps(rawProps);\n let tag = rawProps.tag || Fragment;\n prevChildren = children;\n children = slots.default ? getTransitionRawChildren(slots.default()) : [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.key != null) {\n setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\n }\n else if ((process.env.NODE_ENV !== 'production')) {\n warn(`<TransitionGroup> children must be keyed.`);\n }\n }\n if (prevChildren) {\n for (let i = 0; i < prevChildren.length; i++) {\n const child = prevChildren[i];\n setTransitionHooks(child, resolveTransitionHooks(child, cssTransitionProps, state, instance));\n positionMap.set(child, child.el.getBoundingClientRect());\n }\n }\n return createVNode(tag, null, children);\n };\n }\n};\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n const el = c.el;\n if (el._moveCb) {\n el._moveCb();\n }\n if (el._enterCb) {\n el._enterCb();\n }\n}\nfunction recordPosition(c) {\n newPositionMap.set(c, c.el.getBoundingClientRect());\n}\nfunction applyTranslation(c) {\n const oldPos = positionMap.get(c);\n const newPos = newPositionMap.get(c);\n const dx = oldPos.left - newPos.left;\n const dy = oldPos.top - newPos.top;\n if (dx || dy) {\n const s = c.el.style;\n s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n s.transitionDuration = '0s';\n return c;\n }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n // Detect whether an element with the move class applied has\n // CSS transitions. Since the element may be inside an entering\n // transition at this very moment, we make a clone of it and remove\n // all other transition classes applied to ensure only the move class\n // is applied.\n const clone = el.cloneNode();\n if (el._vtc) {\n el._vtc.forEach(cls => {\n cls.split(/\\s+/).forEach(c => c && clone.classList.remove(c));\n });\n }\n moveClass.split(/\\s+/).forEach(c => c && clone.classList.add(c));\n clone.style.display = 'none';\n const container = (root.nodeType === 1 ? root : root.parentNode);\n container.appendChild(clone);\n const { hasTransform } = getTransitionInfo(clone);\n container.removeChild(clone);\n return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n const fn = vnode.props['onUpdate:modelValue'] ||\n (false );\n return isArray(fn) ? value => invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n const target = e.target;\n if (target.composing) {\n target.composing = false;\n target.dispatchEvent(new Event('input'));\n }\n}\n// We are exporting the v-model runtime directly as vnode hooks so that it can\n// be tree-shaken in case v-model is never used.\nconst vModelText = {\n created(el, { modifiers: { lazy, trim, number } }, vnode) {\n el._assign = getModelAssigner(vnode);\n const castToNumber = number || (vnode.props && vnode.props.type === 'number');\n addEventListener(el, lazy ? 'change' : 'input', e => {\n if (e.target.composing)\n return;\n let domValue = el.value;\n if (trim) {\n domValue = domValue.trim();\n }\n if (castToNumber) {\n domValue = toNumber(domValue);\n }\n el._assign(domValue);\n });\n if (trim) {\n addEventListener(el, 'change', () => {\n el.value = el.value.trim();\n });\n }\n if (!lazy) {\n addEventListener(el, 'compositionstart', onCompositionStart);\n addEventListener(el, 'compositionend', onCompositionEnd);\n // Safari < 10.2 & UIWebView doesn't fire compositionend when\n // switching focus before confirming composition choice\n // this also fixes the issue where some browsers e.g. iOS Chrome\n // fires \"change\" instead of \"input\" on autocomplete.\n addEventListener(el, 'change', onCompositionEnd);\n }\n },\n // set value on mounted so it's after min/max for type=\"range\"\n mounted(el, { value }) {\n el.value = value == null ? '' : value;\n },\n beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) {\n el._assign = getModelAssigner(vnode);\n // avoid clearing unresolved text. #2302\n if (el.composing)\n return;\n if (document.activeElement === el && el.type !== 'range') {\n if (lazy) {\n return;\n }\n if (trim && el.value.trim() === value) {\n return;\n }\n if ((number || el.type === 'number') && toNumber(el.value) === value) {\n return;\n }\n }\n const newValue = value == null ? '' : value;\n if (el.value !== newValue) {\n el.value = newValue;\n }\n }\n};\nconst vModelCheckbox = {\n // #4096 array checkboxes need to be deep traversed\n deep: true,\n created(el, _, vnode) {\n el._assign = getModelAssigner(vnode);\n addEventListener(el, 'change', () => {\n const modelValue = el._modelValue;\n const elementValue = getValue(el);\n const checked = el.checked;\n const assign = el._assign;\n if (isArray(modelValue)) {\n const index = looseIndexOf(modelValue, elementValue);\n const found = index !== -1;\n if (checked && !found) {\n assign(modelValue.concat(elementValue));\n }\n else if (!checked && found) {\n const filtered = [...modelValue];\n filtered.splice(index, 1);\n assign(filtered);\n }\n }\n else if (isSet(modelValue)) {\n const cloned = new Set(modelValue);\n if (checked) {\n cloned.add(elementValue);\n }\n else {\n cloned.delete(elementValue);\n }\n assign(cloned);\n }\n else {\n assign(getCheckboxValue(el, checked));\n }\n });\n },\n // set initial checked on mount to wait for true-value/false-value\n mounted: setChecked,\n beforeUpdate(el, binding, vnode) {\n el._assign = getModelAssigner(vnode);\n setChecked(el, binding, vnode);\n }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n el._modelValue = value;\n if (isArray(value)) {\n el.checked = looseIndexOf(value, vnode.props.value) > -1;\n }\n else if (isSet(value)) {\n el.checked = value.has(vnode.props.value);\n }\n else if (value !== oldValue) {\n el.checked = looseEqual(value, getCheckboxValue(el, true));\n }\n}\nconst vModelRadio = {\n created(el, { value }, vnode) {\n el.checked = looseEqual(value, vnode.props.value);\n el._assign = getModelAssigner(vnode);\n addEventListener(el, 'change', () => {\n el._assign(getValue(el));\n });\n },\n beforeUpdate(el, { value, oldValue }, vnode) {\n el._assign = getModelAssigner(vnode);\n if (value !== oldValue) {\n el.checked = looseEqual(value, vnode.props.value);\n }\n }\n};\nconst vModelSelect = {\n // <select multiple> value need to be deep traversed\n deep: true,\n created(el, { value, modifiers: { number } }, vnode) {\n const isSetModel = isSet(value);\n addEventListener(el, 'change', () => {\n const selectedVal = Array.prototype.filter\n .call(el.options, (o) => o.selected)\n .map((o) => number ? toNumber(getValue(o)) : getValue(o));\n el._assign(el.multiple\n ? isSetModel\n ? new Set(selectedVal)\n : selectedVal\n : selectedVal[0]);\n });\n el._assign = getModelAssigner(vnode);\n },\n // set value in mounted & updated because <select> relies on its children\n // <option>s.\n mounted(el, { value }) {\n setSelected(el, value);\n },\n beforeUpdate(el, _binding, vnode) {\n el._assign = getModelAssigner(vnode);\n },\n updated(el, { value }) {\n setSelected(el, value);\n }\n};\nfunction setSelected(el, value) {\n const isMultiple = el.multiple;\n if (isMultiple && !isArray(value) && !isSet(value)) {\n (process.env.NODE_ENV !== 'production') &&\n warn(`<select multiple v-model> expects an Array or Set value for its binding, ` +\n `but got ${Object.prototype.toString.call(value).slice(8, -1)}.`);\n return;\n }\n for (let i = 0, l = el.options.length; i < l; i++) {\n const option = el.options[i];\n const optionValue = getValue(option);\n if (isMultiple) {\n if (isArray(value)) {\n option.selected = looseIndexOf(value, optionValue) > -1;\n }\n else {\n option.selected = value.has(optionValue);\n }\n }\n else {\n if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i)\n el.selectedIndex = i;\n return;\n }\n }\n }\n if (!isMultiple && el.selectedIndex !== -1) {\n el.selectedIndex = -1;\n }\n}\n// retrieve raw value set via :value bindings\nfunction getValue(el) {\n return '_value' in el ? el._value : el.value;\n}\n// retrieve raw value for true-value and false-value set via :true-value or :false-value bindings\nfunction getCheckboxValue(el, checked) {\n const key = checked ? '_trueValue' : '_falseValue';\n return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n created(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, 'created');\n },\n mounted(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, 'mounted');\n },\n beforeUpdate(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, 'beforeUpdate');\n },\n updated(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, 'updated');\n }\n};\nfunction resolveDynamicModel(tagName, type) {\n switch (tagName) {\n case 'SELECT':\n return vModelSelect;\n case 'TEXTAREA':\n return vModelText;\n default:\n switch (type) {\n case 'checkbox':\n return vModelCheckbox;\n case 'radio':\n return vModelRadio;\n default:\n return vModelText;\n }\n }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n const modelToUse = resolveDynamicModel(el.tagName, vnode.props && vnode.props.type);\n const fn = modelToUse[hook];\n fn && fn(el, binding, vnode, prevVNode);\n}\n// SSR vnode transforms, only used when user includes client-oriented render\n// function in SSR\nfunction initVModelForSSR() {\n vModelText.getSSRProps = ({ value }) => ({ value });\n vModelRadio.getSSRProps = ({ value }, vnode) => {\n if (vnode.props && looseEqual(vnode.props.value, value)) {\n return { checked: true };\n }\n };\n vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n if (isArray(value)) {\n if (vnode.props && looseIndexOf(value, vnode.props.value) > -1) {\n return { checked: true };\n }\n }\n else if (isSet(value)) {\n if (vnode.props && value.has(vnode.props.value)) {\n return { checked: true };\n }\n }\n else if (value) {\n return { checked: true };\n }\n };\n vModelDynamic.getSSRProps = (binding, vnode) => {\n if (typeof vnode.type !== 'string') {\n return;\n }\n const modelToUse = resolveDynamicModel(\n // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n vnode.type.toUpperCase(), vnode.props && vnode.props.type);\n if (modelToUse.getSSRProps) {\n return modelToUse.getSSRProps(binding, vnode);\n }\n };\n}\n\nconst systemModifiers = ['ctrl', 'shift', 'alt', 'meta'];\nconst modifierGuards = {\n stop: e => e.stopPropagation(),\n prevent: e => e.preventDefault(),\n self: e => e.target !== e.currentTarget,\n ctrl: e => !e.ctrlKey,\n shift: e => !e.shiftKey,\n alt: e => !e.altKey,\n meta: e => !e.metaKey,\n left: e => 'button' in e && e.button !== 0,\n middle: e => 'button' in e && e.button !== 1,\n right: e => 'button' in e && e.button !== 2,\n exact: (e, modifiers) => systemModifiers.some(m => e[`${m}Key`] && !modifiers.includes(m))\n};\n/**\n * @private\n */\nconst withModifiers = (fn, modifiers) => {\n return (event, ...args) => {\n for (let i = 0; i < modifiers.length; i++) {\n const guard = modifierGuards[modifiers[i]];\n if (guard && guard(event, modifiers))\n return;\n }\n return fn(event, ...args);\n };\n};\n// Kept for 2.x compat.\n// Note: IE11 compat for `spacebar` and `del` is removed for now.\nconst keyNames = {\n esc: 'escape',\n space: ' ',\n up: 'arrow-up',\n left: 'arrow-left',\n right: 'arrow-right',\n down: 'arrow-down',\n delete: 'backspace'\n};\n/**\n * @private\n */\nconst withKeys = (fn, modifiers) => {\n return (event) => {\n if (!('key' in event)) {\n return;\n }\n const eventKey = hyphenate(event.key);\n if (modifiers.some(k => k === eventKey || keyNames[k] === eventKey)) {\n return fn(event);\n }\n };\n};\n\nconst vShow = {\n beforeMount(el, { value }, { transition }) {\n el._vod = el.style.display === 'none' ? '' : el.style.display;\n if (transition && value) {\n transition.beforeEnter(el);\n }\n else {\n setDisplay(el, value);\n }\n },\n mounted(el, { value }, { transition }) {\n if (transition && value) {\n transition.enter(el);\n }\n },\n updated(el, { value, oldValue }, { transition }) {\n if (!value === !oldValue)\n return;\n if (transition) {\n if (value) {\n transition.beforeEnter(el);\n setDisplay(el, true);\n transition.enter(el);\n }\n else {\n transition.leave(el, () => {\n setDisplay(el, false);\n });\n }\n }\n else {\n setDisplay(el, value);\n }\n },\n beforeUnmount(el, { value }) {\n setDisplay(el, value);\n }\n};\nfunction setDisplay(el, value) {\n el.style.display = value ? el._vod : 'none';\n}\n// SSR vnode transforms, only used when user includes client-oriented render\n// function in SSR\nfunction initVShowForSSR() {\n vShow.getSSRProps = ({ value }) => {\n if (!value) {\n return { style: { display: 'none' } };\n }\n };\n}\n\nconst rendererOptions = /*#__PURE__*/ extend({ patchProp }, nodeOps);\n// lazy create the renderer - this makes core renderer logic tree-shakable\n// in case the user only imports reactivity utilities from Vue.\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n return (renderer ||\n (renderer = createRenderer(rendererOptions)));\n}\nfunction ensureHydrationRenderer() {\n renderer = enabledHydration\n ? renderer\n : createHydrationRenderer(rendererOptions);\n enabledHydration = true;\n return renderer;\n}\n// use explicit type casts here to avoid import() calls in rolled-up d.ts\nconst render = ((...args) => {\n ensureRenderer().render(...args);\n});\nconst hydrate = ((...args) => {\n ensureHydrationRenderer().hydrate(...args);\n});\nconst createApp = ((...args) => {\n const app = ensureRenderer().createApp(...args);\n if ((process.env.NODE_ENV !== 'production')) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (!container)\n return;\n const component = app._component;\n if (!isFunction(component) && !component.render && !component.template) {\n // __UNSAFE__\n // Reason: potential execution of JS expressions in in-DOM template.\n // The user must make sure the in-DOM template is trusted. If it's\n // rendered by the server, the template should not contain any user data.\n component.template = container.innerHTML;\n }\n // clear content before mounting\n container.innerHTML = '';\n const proxy = mount(container, false, container instanceof SVGElement);\n if (container instanceof Element) {\n container.removeAttribute('v-cloak');\n container.setAttribute('data-v-app', '');\n }\n return proxy;\n };\n return app;\n});\nconst createSSRApp = ((...args) => {\n const app = ensureHydrationRenderer().createApp(...args);\n if ((process.env.NODE_ENV !== 'production')) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (container) {\n return mount(container, true, container instanceof SVGElement);\n }\n };\n return app;\n});\nfunction injectNativeTagCheck(app) {\n // Inject `isNativeTag`\n // this is used for component name validation (dev only)\n Object.defineProperty(app.config, 'isNativeTag', {\n value: (tag) => isHTMLTag(tag) || isSVGTag(tag),\n writable: false\n });\n}\n// dev only\nfunction injectCompilerOptionsCheck(app) {\n if (isRuntimeOnly()) {\n const isCustomElement = app.config.isCustomElement;\n Object.defineProperty(app.config, 'isCustomElement', {\n get() {\n return isCustomElement;\n },\n set() {\n warn(`The \\`isCustomElement\\` config option is deprecated. Use ` +\n `\\`compilerOptions.isCustomElement\\` instead.`);\n }\n });\n const compilerOptions = app.config.compilerOptions;\n const msg = `The \\`compilerOptions\\` config option is only respected when using ` +\n `a build of Vue.js that includes the runtime compiler (aka \"full build\"). ` +\n `Since you are using the runtime-only build, \\`compilerOptions\\` ` +\n `must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\\n` +\n `- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\\n` +\n `- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\\n` +\n `- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-dom`;\n Object.defineProperty(app.config, 'compilerOptions', {\n get() {\n warn(msg);\n return compilerOptions;\n },\n set() {\n warn(msg);\n }\n });\n }\n}\nfunction normalizeContainer(container) {\n if (isString(container)) {\n const res = document.querySelector(container);\n if ((process.env.NODE_ENV !== 'production') && !res) {\n warn(`Failed to mount app: mount target selector \"${container}\" returned null.`);\n }\n return res;\n }\n if ((process.env.NODE_ENV !== 'production') &&\n window.ShadowRoot &&\n container instanceof window.ShadowRoot &&\n container.mode === 'closed') {\n warn(`mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`);\n }\n return container;\n}\nlet ssrDirectiveInitialized = false;\n/**\n * @internal\n */\nconst initDirectivesForSSR = () => {\n if (!ssrDirectiveInitialized) {\n ssrDirectiveInitialized = true;\n initVModelForSSR();\n initVShowForSSR();\n }\n }\n ;\n\nexport { Transition, TransitionGroup, VueElement, createApp, createSSRApp, defineCustomElement, defineSSRCustomElement, hydrate, initDirectivesForSSR, render, useCssModule, useCssVars, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, withKeys, withModifiers };\n","/**\n * Make a map and return a function for checking if a key\n * is in that map.\n * IMPORTANT: all calls of this function must be prefixed with\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\n * So that rollup can tree-shake them if necessary.\n */\nfunction makeMap(str, expectsLowerCase) {\n const map = Object.create(null);\n const list = str.split(',');\n for (let i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\n}\n\n/**\n * dev only flag -> name mapping\n */\nconst PatchFlagNames = {\n [1 /* PatchFlags.TEXT */]: `TEXT`,\n [2 /* PatchFlags.CLASS */]: `CLASS`,\n [4 /* PatchFlags.STYLE */]: `STYLE`,\n [8 /* PatchFlags.PROPS */]: `PROPS`,\n [16 /* PatchFlags.FULL_PROPS */]: `FULL_PROPS`,\n [32 /* PatchFlags.HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\n [64 /* PatchFlags.STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\n [128 /* PatchFlags.KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\n [256 /* PatchFlags.UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\n [512 /* PatchFlags.NEED_PATCH */]: `NEED_PATCH`,\n [1024 /* PatchFlags.DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\n [2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\n [-1 /* PatchFlags.HOISTED */]: `HOISTED`,\n [-2 /* PatchFlags.BAIL */]: `BAIL`\n};\n\n/**\n * Dev only\n */\nconst slotFlagsText = {\n [1 /* SlotFlags.STABLE */]: 'STABLE',\n [2 /* SlotFlags.DYNAMIC */]: 'DYNAMIC',\n [3 /* SlotFlags.FORWARDED */]: 'FORWARDED'\n};\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\n 'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\n 'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n // Split the content into individual lines but capture the newline sequence\n // that separated each line. This is important because the actual sequence is\n // needed to properly take into account the full line length for offset\n // comparison\n let lines = source.split(/(\\r?\\n)/);\n // Separate the lines and newline sequences into separate arrays for easier referencing\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count +=\n lines[i].length +\n ((newlineSequences[i] && newlineSequences[i].length) || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length)\n continue;\n const line = j + 1;\n res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`);\n const lineLength = lines[j].length;\n const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\n if (j === i) {\n // push underline\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(1, end > count ? lineLength - pad : end - start);\n res.push(` | ` + ' '.repeat(pad) + '^'.repeat(length));\n }\n else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + '^'.repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join('\\n');\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item)\n ? parseStringStyle(item)\n : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n }\n else if (isString(value)) {\n return value;\n }\n else if (isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*.*?\\*\\//gs;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText\n .replace(styleCommentRE, '')\n .split(listDelimiterRE)\n .forEach(item => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n let ret = '';\n if (!styles || isString(styles)) {\n return ret;\n }\n for (const key in styles) {\n const value = styles[key];\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n if (isString(value) || typeof value === 'number') {\n // only render valid values\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = '';\n if (isString(value)) {\n res = value;\n }\n else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + ' ';\n }\n }\n }\n else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + ' ';\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props)\n return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\n 'header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\n 'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\n 'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\n 'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\n 'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\n 'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\n 'option,output,progress,select,textarea,details,dialog,menu,' +\n 'summary,template,blockquote,iframe,tfoot';\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\n 'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\n 'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\n 'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\n 'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\n 'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\n 'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\n 'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\n 'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\n 'text,textPath,title,tspan,unknown,use,view';\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\n */\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\n */\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\n/**\n * Compiler only.\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\n */\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\n/**\n * On the client we only need to offer special cases for boolean attributes that\n * have different names from their corresponding dom properties:\n * - itemscope -> N/A\n * - allowfullscreen -> allowFullscreen\n * - formnovalidate -> formNoValidate\n * - ismap -> isMap\n * - nomodule -> noModule\n * - novalidate -> noValidate\n * - readonly -> readOnly\n */\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\n/**\n * The full list is needed during SSR to produce the correct initial markup.\n */\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\n `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\n `loop,open,required,reversed,scoped,seamless,` +\n `checked,muted,multiple,selected`);\n/**\n * Boolean attributes should be included if the value is truthy or ''.\n * e.g. `<select multiple>` compiles to `{ multiple: '' }`\n */\nfunction includeBooleanAttr(value) {\n return !!value || value === '';\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return (attrValidationCache[name] = !isUnsafe);\n}\nconst propsToAttrMap = {\n acceptCharset: 'accept-charset',\n className: 'class',\n htmlFor: 'for',\n httpEquiv: 'http-equiv'\n};\n/**\n * Known attributes, this is used for stringification of runtime static nodes\n * so that we don't stringify bindings that cannot be set from HTML.\n * Don't also forget to allow `data-*` and `aria-*`!\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\n */\nconst isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +\n `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +\n `border,buffered,capture,challenge,charset,checked,cite,class,code,` +\n `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +\n `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +\n `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +\n `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +\n `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +\n `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +\n `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +\n `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +\n `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +\n `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +\n `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +\n `value,width,wrap`);\n/**\n * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\n */\nconst isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +\n `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +\n `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +\n `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +\n `color-interpolation-filters,color-profile,color-rendering,` +\n `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +\n `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +\n `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +\n `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +\n `font-family,font-size,font-size-adjust,font-stretch,font-style,` +\n `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +\n `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +\n `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +\n `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +\n `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +\n `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +\n `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +\n `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +\n `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +\n `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +\n `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +\n `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +\n `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +\n `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +\n `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +\n `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +\n `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +\n `strikethrough-position,strikethrough-thickness,string,stroke,` +\n `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +\n `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +\n `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +\n `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +\n `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +\n `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +\n `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +\n `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +\n `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +\n `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +\n `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = '' + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = '';\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escaped = '"';\n break;\n case 38: // &\n escaped = '&';\n break;\n case 39: // '\n escaped = ''';\n break;\n case 60: // <\n escaped = '<';\n break;\n case 62: // >\n escaped = '>';\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\n// https://www.w3.org/TR/html52/syntax.html#comments\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n return src.replace(commentStripRE, '');\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length)\n return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b)\n return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n /* istanbul ignore if: this if will probably never be called */\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if ((aHasKey && !bHasKey) ||\n (!aHasKey && bHasKey) ||\n !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex(item => looseEqual(item, val));\n}\n\n/**\n * For converting {{ interpolation }} values to displayed strings.\n * @private\n */\nconst toDisplayString = (val) => {\n return isString(val)\n ? val\n : val == null\n ? ''\n : isArray(val) ||\n (isObject(val) &&\n (val.toString === objectToString || !isFunction(val.toString)))\n ? JSON.stringify(val, replacer, 2)\n : String(val);\n};\nconst replacer = (_key, val) => {\n // can't use isRef here since @vue/shared has no deps\n if (val && val.__v_isRef) {\n return replacer(_key, val.value);\n }\n else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\n entries[`${key} =>`] = val;\n return entries;\n }, {})\n };\n }\n else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()]\n };\n }\n else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\n\nconst EMPTY_OBJ = (process.env.NODE_ENV !== 'production')\n ? Object.freeze({})\n : {};\nconst EMPTY_ARR = (process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];\nconst NOOP = () => { };\n/**\n * Always return false.\n */\nconst NO = () => false;\nconst onRE = /^on[^a-z]/;\nconst isOn = (key) => onRE.test(key);\nconst isModelListener = (key) => key.startsWith('onUpdate:');\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === '[object Map]';\nconst isSet = (val) => toTypeString(val) === '[object Set]';\nconst isDate = (val) => toTypeString(val) === '[object Date]';\nconst isFunction = (val) => typeof val === 'function';\nconst isString = (val) => typeof val === 'string';\nconst isSymbol = (val) => typeof val === 'symbol';\nconst isObject = (val) => val !== null && typeof val === 'object';\nconst isPromise = (val) => {\n return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n // extract \"RawType\" from strings like \"[object RawType]\"\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\nconst isIntegerKey = (key) => isString(key) &&\n key !== 'NaN' &&\n key[0] !== '-' &&\n '' + parseInt(key, 10) === key;\nconst isReservedProp = /*#__PURE__*/ makeMap(\n// the leading comma is intentional so empty string \"\" is also included\n',key,ref,ref_for,ref_key,' +\n 'onVnodeBeforeMount,onVnodeMounted,' +\n 'onVnodeBeforeUpdate,onVnodeUpdated,' +\n 'onVnodeBeforeUnmount,onVnodeUnmounted');\nconst isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\nconst cacheStringFunction = (fn) => {\n const cache = Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nconst camelizeRE = /-(\\w)/g;\n/**\n * @private\n */\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\n});\nconst hyphenateRE = /\\B([A-Z])/g;\n/**\n * @private\n */\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\n/**\n * @private\n */\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\n/**\n * @private\n */\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\n// compare whether a value has changed, accounting for NaN.\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](arg);\n }\n};\nconst def = (obj, key, value) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n value\n });\n};\nconst toNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return (_globalThis ||\n (_globalThis =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {}));\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name)\n ? `__props.${name}`\n : `__props[${JSON.stringify(name)}]`;\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, genPropsAccessExp, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isModelListener, isObject, isOn, isPlainObject, isPromise, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","import { __awaiter, __generator } from \"tslib\";\n/**\n * Checks whether we're in a Node.js environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv() {\n var _a;\n return typeof process === 'object' && ((_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node) !== undefined;\n}\n/**\n * Checks whether we're in a browser environment\n *\n * @returns Answer to given question\n */\nexport function isBrowserEnv() {\n return typeof window === 'object' && (window === null || window === void 0 ? void 0 : window.document) !== undefined;\n}\nvar fallbackGlobalObject = {};\n/**\n * Safely get global scope object\n *\n * @returns Global scope object\n */\nexport var getGlobalObject = function () {\n if (isNodeEnv()) {\n return global;\n }\n else if (typeof window !== 'undefined') {\n return window;\n }\n else if (typeof self !== 'undefined') {\n return self;\n }\n else {\n return fallbackGlobalObject;\n }\n};\nexport var getGlobalAmplitudeNamespace = function () {\n var global = getGlobalObject();\n if (global.__AMPLITUDE__ === undefined) {\n global.__AMPLITUDE__ = {};\n }\n return global.__AMPLITUDE__;\n};\n/**\n * A promise-based way to sleep for x millseconds, then queue ourselves back to the\n * JS event loop.\n *\n * @param milliseconds The number of milliseconds to wait for\n */\nexport var asyncSleep = function (milliseconds) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, milliseconds); })];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n}); };\n/**\n * Fixes browser edge case where Prototype.js injects Array.prototype.toJSON and breaks the built-in JSON.stringify()\n *\n * @returns true if Array.prototype.toJSON was deleted, false if not\n */\nexport var prototypeJsFix = function () {\n var _a;\n if (isBrowserEnv()) {\n var augmentedWindow = window;\n var augmentedArray = Array;\n if (augmentedWindow.Prototype !== undefined && ((_a = augmentedArray.prototype) === null || _a === void 0 ? void 0 : _a.toJSON) !== undefined) {\n delete augmentedArray.prototype.toJSON;\n return true;\n }\n }\n return false;\n};\n//# sourceMappingURL=misc.js.map","import { UAParser } from '@amplitude/ua-parser-js';\n\nvar ApplicationContextProviderImpl = /** @class */ (function () {\n function ApplicationContextProviderImpl() {\n this.ua = new UAParser(typeof navigator !== 'undefined' ? navigator.userAgent : null).getResult();\n }\n ApplicationContextProviderImpl.prototype.getApplicationContext = function () {\n return {\n versionName: this.versionName,\n language: getLanguage(),\n platform: 'Web',\n os: getOs(this.ua),\n deviceModel: getDeviceModel(this.ua),\n };\n };\n return ApplicationContextProviderImpl;\n}());\nvar getOs = function (ua) {\n var _a, _b;\n return [(_a = ua.browser) === null || _a === void 0 ? void 0 : _a.name, (_b = ua.browser) === null || _b === void 0 ? void 0 : _b.major]\n .filter(function (e) { return e !== null && e !== undefined; })\n .join(' ');\n};\nvar getDeviceModel = function (ua) {\n var _a;\n return (_a = ua.os) === null || _a === void 0 ? void 0 : _a.name;\n};\nvar getLanguage = function () {\n return ((typeof navigator !== 'undefined' &&\n ((navigator.languages && navigator.languages[0]) ||\n navigator.language)) ||\n '');\n};\n\nvar EventBridgeImpl = /** @class */ (function () {\n function EventBridgeImpl() {\n this.queue = [];\n }\n EventBridgeImpl.prototype.logEvent = function (event) {\n if (!this.receiver) {\n if (this.queue.length < 512) {\n this.queue.push(event);\n }\n }\n else {\n this.receiver(event);\n }\n };\n EventBridgeImpl.prototype.setEventReceiver = function (receiver) {\n this.receiver = receiver;\n if (this.queue.length > 0) {\n this.queue.forEach(function (event) {\n receiver(event);\n });\n this.queue = [];\n }\n };\n return EventBridgeImpl;\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***************************************************************************** */\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar isEqual = function (obj1, obj2) {\n var primitive = ['string', 'number', 'boolean', 'undefined'];\n var typeA = typeof obj1;\n var typeB = typeof obj2;\n if (typeA !== typeB) {\n return false;\n }\n for (var _i = 0, primitive_1 = primitive; _i < primitive_1.length; _i++) {\n var p = primitive_1[_i];\n if (p === typeA) {\n return obj1 === obj2;\n }\n }\n // check null\n if (obj1 == null && obj2 == null) {\n return true;\n }\n else if (obj1 == null || obj2 == null) {\n return false;\n }\n // if got here - objects\n if (obj1.length !== obj2.length) {\n return false;\n }\n //check if arrays\n var isArrayA = Array.isArray(obj1);\n var isArrayB = Array.isArray(obj2);\n if (isArrayA !== isArrayB) {\n return false;\n }\n if (isArrayA && isArrayB) {\n //arrays\n for (var i = 0; i < obj1.length; i++) {\n if (!isEqual(obj1[i], obj2[i])) {\n return false;\n }\n }\n }\n else {\n //objects\n var sorted1 = Object.keys(obj1).sort();\n var sorted2 = Object.keys(obj2).sort();\n if (!isEqual(sorted1, sorted2)) {\n return false;\n }\n //compare object values\n var result_1 = true;\n Object.keys(obj1).forEach(function (key) {\n if (!isEqual(obj1[key], obj2[key])) {\n result_1 = false;\n }\n });\n return result_1;\n }\n return true;\n};\n\nvar ID_OP_SET = '$set';\nvar ID_OP_UNSET = '$unset';\nvar ID_OP_CLEAR_ALL = '$clearAll';\n// Polyfill for Object.entries\nif (!Object.entries) {\n Object.entries = function (obj) {\n var ownProps = Object.keys(obj);\n var i = ownProps.length;\n var resArray = new Array(i);\n while (i--) {\n resArray[i] = [ownProps[i], obj[ownProps[i]]];\n }\n return resArray;\n };\n}\nvar IdentityStoreImpl = /** @class */ (function () {\n function IdentityStoreImpl() {\n this.identity = { userProperties: {} };\n this.listeners = new Set();\n }\n IdentityStoreImpl.prototype.editIdentity = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n var actingUserProperties = __assign({}, this.identity.userProperties);\n var actingIdentity = __assign(__assign({}, this.identity), { userProperties: actingUserProperties });\n return {\n setUserId: function (userId) {\n actingIdentity.userId = userId;\n return this;\n },\n setDeviceId: function (deviceId) {\n actingIdentity.deviceId = deviceId;\n return this;\n },\n setUserProperties: function (userProperties) {\n actingIdentity.userProperties = userProperties;\n return this;\n },\n updateUserProperties: function (actions) {\n var actingProperties = actingIdentity.userProperties || {};\n for (var _i = 0, _a = Object.entries(actions); _i < _a.length; _i++) {\n var _b = _a[_i], action = _b[0], properties = _b[1];\n switch (action) {\n case ID_OP_SET:\n for (var _c = 0, _d = Object.entries(properties); _c < _d.length; _c++) {\n var _e = _d[_c], key = _e[0], value = _e[1];\n actingProperties[key] = value;\n }\n break;\n case ID_OP_UNSET:\n for (var _f = 0, _g = Object.keys(properties); _f < _g.length; _f++) {\n var key = _g[_f];\n delete actingProperties[key];\n }\n break;\n case ID_OP_CLEAR_ALL:\n actingProperties = {};\n break;\n }\n }\n actingIdentity.userProperties = actingProperties;\n return this;\n },\n commit: function () {\n self.setIdentity(actingIdentity);\n return this;\n },\n };\n };\n IdentityStoreImpl.prototype.getIdentity = function () {\n return __assign({}, this.identity);\n };\n IdentityStoreImpl.prototype.setIdentity = function (identity) {\n var originalIdentity = __assign({}, this.identity);\n this.identity = __assign({}, identity);\n if (!isEqual(originalIdentity, this.identity)) {\n this.listeners.forEach(function (listener) {\n listener(identity);\n });\n }\n };\n IdentityStoreImpl.prototype.addIdentityListener = function (listener) {\n this.listeners.add(listener);\n };\n IdentityStoreImpl.prototype.removeIdentityListener = function (listener) {\n this.listeners.delete(listener);\n };\n return IdentityStoreImpl;\n}());\n\nvar safeGlobal = typeof globalThis !== 'undefined'\n ? globalThis\n : typeof global !== 'undefined'\n ? global\n : self;\n\nvar AnalyticsConnector = /** @class */ (function () {\n function AnalyticsConnector() {\n this.identityStore = new IdentityStoreImpl();\n this.eventBridge = new EventBridgeImpl();\n this.applicationContextProvider = new ApplicationContextProviderImpl();\n }\n AnalyticsConnector.getInstance = function (instanceName) {\n if (!safeGlobal['analyticsConnectorInstances']) {\n safeGlobal['analyticsConnectorInstances'] = {};\n }\n if (!safeGlobal['analyticsConnectorInstances'][instanceName]) {\n safeGlobal['analyticsConnectorInstances'][instanceName] =\n new AnalyticsConnector();\n }\n return safeGlobal['analyticsConnectorInstances'][instanceName];\n };\n return AnalyticsConnector;\n}());\n\nexport { AnalyticsConnector };\n","import { isBrowserEnv, prototypeJsFix } from '@amplitude/utils';\nimport md5 from 'blueimp-md5';\nimport queryString from 'query-string';\nimport UAParser from '@amplitude/ua-parser-js';\nimport { AnalyticsConnector } from '@amplitude/analytics-connector';\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _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\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar Constants = {\n DEFAULT_INSTANCE: '$default_instance',\n API_VERSION: 2,\n MAX_STRING_LENGTH: 4096,\n MAX_PROPERTY_KEYS: 1000,\n IDENTIFY_EVENT: '$identify',\n GROUP_IDENTIFY_EVENT: '$groupidentify',\n EVENT_LOG_URL: 'api.amplitude.com',\n EVENT_LOG_EU_URL: 'api.eu.amplitude.com',\n DYNAMIC_CONFIG_URL: 'regionconfig.amplitude.com',\n DYNAMIC_CONFIG_EU_URL: 'regionconfig.eu.amplitude.com',\n // localStorageKeys\n LAST_EVENT_ID: 'amplitude_lastEventId',\n LAST_EVENT_TIME: 'amplitude_lastEventTime',\n LAST_IDENTIFY_ID: 'amplitude_lastIdentifyId',\n LAST_SEQUENCE_NUMBER: 'amplitude_lastSequenceNumber',\n SESSION_ID: 'amplitude_sessionId',\n // Used in cookie as well\n DEVICE_ID: 'amplitude_deviceId',\n OPT_OUT: 'amplitude_optOut',\n USER_ID: 'amplitude_userId',\n // indexes of properties in cookie v2 storage format\n DEVICE_ID_INDEX: 0,\n USER_ID_INDEX: 1,\n OPT_OUT_INDEX: 2,\n SESSION_ID_INDEX: 3,\n LAST_EVENT_TIME_INDEX: 4,\n EVENT_ID_INDEX: 5,\n IDENTIFY_ID_INDEX: 6,\n SEQUENCE_NUMBER_INDEX: 7,\n COOKIE_TEST_PREFIX: 'amp_cookie_test',\n COOKIE_PREFIX: 'amp',\n // Storage options\n STORAGE_DEFAULT: '',\n STORAGE_COOKIES: 'cookies',\n STORAGE_NONE: 'none',\n STORAGE_LOCAL: 'localStorage',\n STORAGE_SESSION: 'sessionStorage',\n // revenue keys\n REVENUE_EVENT: 'revenue_amount',\n REVENUE_PRODUCT_ID: '$productId',\n REVENUE_QUANTITY: '$quantity',\n REVENUE_PRICE: '$price',\n REVENUE_REVENUE_TYPE: '$revenueType',\n AMP_DEVICE_ID_PARAM: 'amp_device_id',\n // url param\n AMP_REFERRER_PARAM: 'amp_referrer',\n // url param for overwriting the document.refer\n REFERRER: 'referrer',\n // UTM Params\n UTM_SOURCE: 'utm_source',\n UTM_MEDIUM: 'utm_medium',\n UTM_CAMPAIGN: 'utm_campaign',\n UTM_TERM: 'utm_term',\n UTM_CONTENT: 'utm_content',\n ATTRIBUTION_EVENT: '[Amplitude] Attribution Captured',\n TRANSPORT_HTTP: 'http',\n TRANSPORT_BEACON: 'beacon'\n};\n\n/*\n * UTF-8 encoder/decoder\n * http://www.webtoolkit.info/\n */\nvar UTF8 = {\n encode: function encode(s) {\n var utftext = '';\n\n for (var n = 0; n < s.length; n++) {\n var c = s.charCodeAt(n);\n\n if (c < 128) {\n utftext += String.fromCharCode(c);\n } else if (c > 127 && c < 2048) {\n utftext += String.fromCharCode(c >> 6 | 192);\n utftext += String.fromCharCode(c & 63 | 128);\n } else {\n utftext += String.fromCharCode(c >> 12 | 224);\n utftext += String.fromCharCode(c >> 6 & 63 | 128);\n utftext += String.fromCharCode(c & 63 | 128);\n }\n }\n\n return utftext;\n },\n decode: function decode(utftext) {\n var s = '';\n var i = 0;\n var c = 0,\n c1 = 0,\n c2 = 0;\n\n while (i < utftext.length) {\n c = utftext.charCodeAt(i);\n\n if (c < 128) {\n s += String.fromCharCode(c);\n i++;\n } else if (c > 191 && c < 224) {\n c1 = utftext.charCodeAt(i + 1);\n s += String.fromCharCode((c & 31) << 6 | c1 & 63);\n i += 2;\n } else {\n c1 = utftext.charCodeAt(i + 1);\n c2 = utftext.charCodeAt(i + 2);\n s += String.fromCharCode((c & 15) << 12 | (c1 & 63) << 6 | c2 & 63);\n i += 3;\n }\n }\n\n return s;\n }\n};\n\n/* global globalThis */\nvar GlobalScope = function () {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n}();\n\n/*\n * Base64 encoder/decoder\n * http://www.webtoolkit.info/\n */\n\nvar Base64 = {\n _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n encode: function encode(input) {\n try {\n if (GlobalScope.btoa && GlobalScope.atob) {\n return GlobalScope.btoa(unescape(encodeURIComponent(input)));\n }\n } catch (e) {//log(e);\n }\n\n return Base64._encode(input);\n },\n _encode: function _encode(input) {\n var output = '';\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n var i = 0;\n input = UTF8.encode(input);\n\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n enc1 = chr1 >> 2;\n enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output + Base64._keyStr.charAt(enc1) + Base64._keyStr.charAt(enc2) + Base64._keyStr.charAt(enc3) + Base64._keyStr.charAt(enc4);\n }\n\n return output;\n },\n decode: function decode(input) {\n try {\n if (GlobalScope.btoa && GlobalScope.atob) {\n return decodeURIComponent(escape(GlobalScope.atob(input)));\n }\n } catch (e) {//log(e);\n }\n\n return Base64._decode(input);\n },\n _decode: function _decode(input) {\n var output = '';\n var chr1, chr2, chr3;\n var enc1, enc2, enc3, enc4;\n var i = 0;\n input = input.replace(/[^A-Za-z0-9+/=]/g, '');\n\n while (i < input.length) {\n enc1 = Base64._keyStr.indexOf(input.charAt(i++));\n enc2 = Base64._keyStr.indexOf(input.charAt(i++));\n enc3 = Base64._keyStr.indexOf(input.charAt(i++));\n enc4 = Base64._keyStr.indexOf(input.charAt(i++));\n chr1 = enc1 << 2 | enc2 >> 4;\n chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n chr3 = (enc3 & 3) << 6 | enc4;\n output = output + String.fromCharCode(chr1);\n\n if (enc3 !== 64) {\n output = output + String.fromCharCode(chr2);\n }\n\n if (enc4 !== 64) {\n output = output + String.fromCharCode(chr3);\n }\n }\n\n output = UTF8.decode(output);\n return output;\n }\n};\n\n/**\n * toString ref.\n * @private\n */\nvar toString = Object.prototype.toString;\n/**\n * Return the type of `val`.\n * @private\n * @param {Mixed} val\n * @return {String}\n * @api public\n */\n\nfunction type (val) {\n switch (toString.call(val)) {\n case '[object Date]':\n return 'date';\n\n case '[object RegExp]':\n return 'regexp';\n\n case '[object Arguments]':\n return 'arguments';\n\n case '[object Array]':\n return 'array';\n\n case '[object Error]':\n return 'error';\n }\n\n if (val === null) {\n return 'null';\n }\n\n if (val === undefined) {\n return 'undefined';\n }\n\n if (val !== val) {\n return 'nan';\n }\n\n if (val && val.nodeType === 1) {\n return 'element';\n }\n\n if (typeof Buffer !== 'undefined' && typeof Buffer.isBuffer === 'function' && Buffer.isBuffer(val)) {\n return 'buffer';\n }\n\n val = val.valueOf ? val.valueOf() : Object.prototype.valueOf.apply(val);\n return _typeof(val);\n}\n\nvar logLevels = {\n DISABLE: 0,\n ERROR: 1,\n WARN: 2,\n INFO: 3\n};\nvar logLevel = logLevels.WARN;\n\nvar setLogLevel = function setLogLevel(logLevelName) {\n if (Object.prototype.hasOwnProperty.call(logLevels, logLevelName)) {\n logLevel = logLevels[logLevelName];\n }\n};\n\nvar getLogLevel = function getLogLevel() {\n return logLevel;\n};\n\nvar log = {\n error: function error(s) {\n if (logLevel >= logLevels.ERROR) {\n _log(s);\n }\n },\n warn: function warn(s) {\n if (logLevel >= logLevels.WARN) {\n _log(s);\n }\n },\n info: function info(s) {\n if (logLevel >= logLevels.INFO) {\n _log(s);\n }\n }\n};\n\nvar _log = function _log(s) {\n try {\n console.log('[Amplitude] ' + s);\n } catch (e) {// console logging not available\n }\n};\n\nvar isEmptyString = function isEmptyString(str) {\n return !str || str.length === 0;\n};\n\nvar sessionStorageEnabled = function sessionStorageEnabled() {\n try {\n if (GlobalScope.sessionStorage) {\n return true;\n }\n } catch (e) {// sessionStorage disabled\n }\n\n return false;\n}; // truncate string values in event and user properties so that request size does not get too large\n\n\nvar truncate = function truncate(value) {\n if (type(value) === 'array') {\n for (var i = 0; i < value.length; i++) {\n value[i] = truncate(value[i]);\n }\n } else if (type(value) === 'object') {\n for (var key in value) {\n if (key in value) {\n value[key] = truncate(value[key]);\n }\n }\n } else {\n value = _truncateValue(value);\n }\n\n return value;\n};\n\nvar _truncateValue = function _truncateValue(value) {\n if (type(value) === 'string') {\n return value.length > Constants.MAX_STRING_LENGTH ? value.substring(0, Constants.MAX_STRING_LENGTH) : value;\n }\n\n return value;\n};\n\nvar validateInput = function validateInput(input, name, expectedType) {\n if (type(input) !== expectedType) {\n log.error('Invalid ' + name + ' input type. Expected ' + expectedType + ' but received ' + type(input));\n return false;\n }\n\n return true;\n};\n\nvar validateDeviceId = function validateDeviceId(deviceId) {\n if (!validateInput(deviceId, 'deviceId', 'string')) {\n return false;\n }\n\n if (deviceId.indexOf('.') >= 0) {\n log.error(\"Device IDs may not contain '.' characters. Value will be ignored: \\\"\".concat(deviceId, \"\\\"\"));\n return false;\n }\n\n return true;\n};\n\nvar validateTransport = function validateTransport(transport) {\n if (!validateInput(transport, 'transport', 'string')) {\n return false;\n }\n\n if (transport !== Constants.TRANSPORT_HTTP && transport !== Constants.TRANSPORT_BEACON) {\n log.error(\"transport value must be one of '\".concat(Constants.TRANSPORT_BEACON, \"' or '\").concat(Constants.TRANSPORT_HTTP, \"'\"));\n return false;\n }\n\n if (transport !== Constants.TRANSPORT_HTTP && typeof navigator !== 'undefined' && !navigator.sendBeacon) {\n log.error(\"browser does not support sendBeacon, so transport must be HTTP\");\n return false;\n }\n\n return true;\n}; // do some basic sanitization and type checking, also catch property dicts with more than 1000 key/value pairs\n\n\nvar validateProperties = function validateProperties(properties) {\n var propsType = type(properties);\n\n if (propsType !== 'object') {\n log.error('Error: invalid properties format. Expecting Javascript object, received ' + propsType + ', ignoring');\n return {};\n }\n\n if (Object.keys(properties).length > Constants.MAX_PROPERTY_KEYS) {\n log.error('Error: too many properties (more than 1000), ignoring');\n return {};\n }\n\n var copy = {}; // create a copy with all of the valid properties\n\n for (var property in properties) {\n if (!Object.prototype.hasOwnProperty.call(properties, property)) {\n continue;\n } // validate key\n\n\n var key = property;\n var keyType = type(key);\n\n if (keyType !== 'string') {\n key = String(key);\n log.warn('WARNING: Non-string property key, received type ' + keyType + ', coercing to string \"' + key + '\"');\n } // validate value\n\n\n var value = validatePropertyValue(key, properties[property]);\n\n if (value === null) {\n continue;\n }\n\n copy[key] = value;\n }\n\n return copy;\n};\n\nvar invalidValueTypes = ['nan', 'function', 'arguments', 'regexp', 'element'];\n\nvar validatePropertyValue = function validatePropertyValue(key, value) {\n var valueType = type(value);\n\n if (invalidValueTypes.indexOf(valueType) !== -1) {\n log.warn('WARNING: Property key \"' + key + '\" with invalid value type ' + valueType + ', ignoring');\n value = null;\n } else if (valueType === 'undefined') {\n value = null;\n } else if (valueType === 'error') {\n value = String(value);\n log.warn('WARNING: Property key \"' + key + '\" with value type error, coercing to ' + value);\n } else if (valueType === 'array') {\n // check for nested arrays or objects\n var arrayCopy = [];\n\n for (var i = 0; i < value.length; i++) {\n var element = value[i];\n var elemType = type(element);\n\n if (elemType === 'array') {\n log.warn('WARNING: Cannot have ' + elemType + ' nested in an array property value, skipping');\n continue;\n } else if (elemType === 'object') {\n arrayCopy.push(validateProperties(element));\n } else {\n arrayCopy.push(validatePropertyValue(key, element));\n }\n }\n\n value = arrayCopy;\n } else if (valueType === 'object') {\n value = validateProperties(value);\n }\n\n return value;\n};\n\nvar validateGroups = function validateGroups(groups) {\n var groupsType = type(groups);\n\n if (groupsType !== 'object') {\n log.error('Error: invalid groups format. Expecting Javascript object, received ' + groupsType + ', ignoring');\n return {};\n }\n\n var copy = {}; // create a copy with all of the valid properties\n\n for (var group in groups) {\n if (!Object.prototype.hasOwnProperty.call(groups, group)) {\n continue;\n } // validate key\n\n\n var key = group;\n var keyType = type(key);\n\n if (keyType !== 'string') {\n key = String(key);\n log.warn('WARNING: Non-string groupType, received type ' + keyType + ', coercing to string \"' + key + '\"');\n } // validate value\n\n\n var value = validateGroupName(key, groups[group]);\n\n if (value === null) {\n continue;\n }\n\n copy[key] = value;\n }\n\n return copy;\n};\n\nvar validateGroupName = function validateGroupName(key, groupName) {\n var groupNameType = type(groupName);\n\n if (groupNameType === 'string') {\n return groupName;\n }\n\n if (groupNameType === 'date' || groupNameType === 'number' || groupNameType === 'boolean') {\n groupName = String(groupName);\n log.warn('WARNING: Non-string groupName, received type ' + groupNameType + ', coercing to string \"' + groupName + '\"');\n return groupName;\n }\n\n if (groupNameType === 'array') {\n // check for nested arrays or objects\n var arrayCopy = [];\n\n for (var i = 0; i < groupName.length; i++) {\n var element = groupName[i];\n var elemType = type(element);\n\n if (elemType === 'array' || elemType === 'object') {\n log.warn('WARNING: Skipping nested ' + elemType + ' in array groupName');\n continue;\n } else if (elemType === 'string') {\n arrayCopy.push(element);\n } else if (elemType === 'date' || elemType === 'number' || elemType === 'boolean') {\n element = String(element);\n log.warn('WARNING: Non-string groupName, received type ' + elemType + ', coercing to string \"' + element + '\"');\n arrayCopy.push(element);\n }\n }\n\n return arrayCopy;\n }\n\n log.warn('WARNING: Non-string groupName, received type ' + groupNameType + '. Please use strings or array of strings for groupName');\n}; // parses the value of a url param (for example ?gclid=1234&...)\n\n\nvar getQueryParam = function getQueryParam(name, query) {\n name = name.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n var regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\n var results = regex.exec(query);\n return results === null ? undefined : decodeURIComponent(results[1].replace(/\\+/g, ' '));\n};\n\nvar isWebWorkerEnvironment = function isWebWorkerEnvironment() {\n return typeof WorkerGlobalScope !== 'undefined';\n};\n\nvar validateSessionId = function validateSessionId(sessionId) {\n if (validateInput(sessionId, 'sessionId', 'number') && new Date(sessionId).getTime() > 0) {\n return true;\n }\n\n log.error(\"sessionId value must in milliseconds since epoch (Unix Timestamp)\");\n return false;\n};\n\nvar utils = {\n setLogLevel: setLogLevel,\n getLogLevel: getLogLevel,\n logLevels: logLevels,\n log: log,\n isEmptyString: isEmptyString,\n isWebWorkerEnvironment: isWebWorkerEnvironment,\n getQueryParam: getQueryParam,\n sessionStorageEnabled: sessionStorageEnabled,\n truncate: truncate,\n validateGroups: validateGroups,\n validateInput: validateInput,\n validateProperties: validateProperties,\n validateDeviceId: validateDeviceId,\n validateTransport: validateTransport,\n validateSessionId: validateSessionId\n};\n\nvar getLocation = function getLocation() {\n return GlobalScope.location;\n};\n\n// A URL safe variation on the the list of Base64 characters\nvar base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\nvar base64Id = function base64Id() {\n var str = '';\n\n for (var i = 0; i < 22; ++i) {\n str += base64Chars.charAt(Math.floor(Math.random() * 64));\n }\n\n return str;\n};\n\nvar get$1 = function get(name) {\n try {\n var ca = document.cookie.split(';');\n var value = null;\n\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n\n if (c.indexOf(name) === 0) {\n value = c.substring(name.length, c.length);\n break;\n }\n }\n\n return value;\n } catch (e) {\n return null;\n }\n};\n\nvar getAll = function getAll(name) {\n try {\n var cookieArray = document.cookie.split(';').map(function (c) {\n return c.trimStart();\n });\n var values = [];\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = cookieArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var cookie = _step.value;\n\n while (cookie.charAt(0) === ' ') {\n cookie = cookie.substring(1);\n }\n\n if (cookie.indexOf(name) === 0) {\n values.push(cookie.substring(name.length));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return values;\n } catch (e) {\n return [];\n }\n};\n\nvar set$1 = function set(name, value, opts) {\n var expires = value !== null ? opts.expirationDays : -1;\n\n if (expires) {\n var date = new Date();\n date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n expires = date;\n }\n\n var str = name + '=' + value;\n\n if (expires) {\n str += '; expires=' + expires.toUTCString();\n }\n\n str += '; path=/';\n\n if (opts.domain) {\n str += '; domain=' + opts.domain;\n }\n\n if (opts.secure) {\n str += '; Secure';\n }\n\n if (opts.sameSite) {\n str += '; SameSite=' + opts.sameSite;\n }\n\n document.cookie = str;\n};\n\nvar getLastEventTime = function getLastEventTime() {\n var cookie = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var strValue = cookie.split('.')[Constants.LAST_EVENT_TIME_INDEX];\n var parsedValue;\n\n if (strValue) {\n parsedValue = parseInt(strValue, 32);\n }\n\n if (parsedValue) {\n return parsedValue;\n } else {\n utils.log.warn(\"unable to parse malformed cookie: \".concat(cookie));\n return 0;\n }\n};\n\nvar sortByEventTime = function sortByEventTime(cookies) {\n return _toConsumableArray(cookies).sort(function (c1, c2) {\n var t1 = getLastEventTime(c1);\n var t2 = getLastEventTime(c2); // sort c1 first if its last event time is more recent\n // i.e its event time integer is larger that c2's\n\n return t2 - t1;\n });\n}; // test that cookies are enabled - navigator.cookiesEnabled yields false positives in IE, need to test directly\n\n\nvar areCookiesEnabled = function areCookiesEnabled() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var cookieName = Constants.COOKIE_TEST_PREFIX + base64Id();\n\n if (typeof document === 'undefined') {\n return false;\n }\n\n var _areCookiesEnabled = false;\n\n try {\n var uid = String(Date.now());\n set$1(cookieName, uid, opts);\n utils.log.info(\"Testing if cookies available\");\n _areCookiesEnabled = get$1(cookieName + '=') === uid;\n } catch (e) {\n utils.log.warn(\"Error thrown when checking for cookies. Reason: \\\"\".concat(e, \"\\\"\"));\n } finally {\n utils.log.info(\"Cleaning up cookies availability test\");\n set$1(cookieName, null, opts);\n }\n\n return _areCookiesEnabled;\n};\n\nvar baseCookie = {\n set: set$1,\n get: get$1,\n getAll: getAll,\n getLastEventTime: getLastEventTime,\n sortByEventTime: sortByEventTime,\n areCookiesEnabled: areCookiesEnabled\n};\n\nvar getHost = function getHost(url) {\n var defaultHostname = GlobalScope.location ? GlobalScope.location.hostname : '';\n\n if (url) {\n if (typeof document !== 'undefined') {\n var a = document.createElement('a');\n a.href = url;\n return a.hostname || defaultHostname;\n }\n\n if (typeof URL === 'function') {\n var u = new URL(url);\n return u.hostname || defaultHostname;\n }\n }\n\n return defaultHostname;\n};\n\nvar topDomain = function topDomain(url) {\n var host = getHost(url);\n var parts = host.split('.');\n var levels = [];\n var cname = '_tldtest_' + base64Id();\n if (utils.isWebWorkerEnvironment()) return '';\n\n for (var i = parts.length - 2; i >= 0; --i) {\n levels.push(parts.slice(i).join('.'));\n }\n\n for (var _i = 0; _i < levels.length; ++_i) {\n var domain = levels[_i];\n var opts = {\n domain: '.' + domain\n };\n baseCookie.set(cname, 1, opts);\n\n if (baseCookie.get(cname)) {\n baseCookie.set(cname, null, opts);\n return domain;\n }\n }\n\n return '';\n};\n\n/*\n * Cookie data\n */\nvar _options = {\n expirationDays: undefined,\n domain: undefined\n};\n\nvar reset = function reset() {\n _options = {\n expirationDays: undefined,\n domain: undefined\n };\n};\n\nvar options = function options(opts) {\n if (arguments.length === 0) {\n return _options;\n }\n\n opts = opts || {};\n _options.expirationDays = opts.expirationDays;\n _options.secure = opts.secure;\n _options.sameSite = opts.sameSite;\n var domain = !utils.isEmptyString(opts.domain) ? opts.domain : '.' + topDomain(getLocation().href);\n var token = Math.random();\n _options.domain = domain;\n set('amplitude_test', token);\n var stored = get('amplitude_test');\n\n if (!stored || stored !== token) {\n domain = null;\n }\n\n remove('amplitude_test');\n _options.domain = domain;\n return _options;\n};\n\nvar _domainSpecific = function _domainSpecific(name) {\n // differentiate between cookies on different domains\n var suffix = '';\n\n if (_options.domain) {\n suffix = _options.domain.charAt(0) === '.' ? _options.domain.substring(1) : _options.domain;\n }\n\n return name + suffix;\n};\n\nvar get = function get(name) {\n var nameEq = _domainSpecific(name) + '=';\n var value = baseCookie.get(nameEq);\n\n try {\n if (value) {\n return JSON.parse(Base64.decode(value));\n }\n } catch (e) {\n return null;\n }\n\n return null;\n};\n\nvar set = function set(name, value) {\n try {\n baseCookie.set(_domainSpecific(name), Base64.encode(JSON.stringify(value)), _options);\n return true;\n } catch (e) {\n return false;\n }\n};\n\nvar setRaw = function setRaw(name, value) {\n try {\n baseCookie.set(_domainSpecific(name), value, _options);\n return true;\n } catch (e) {\n return false;\n }\n};\n\nvar getRaw = function getRaw(name) {\n var nameEq = _domainSpecific(name) + '=';\n return baseCookie.get(nameEq);\n};\n\nvar remove = function remove(name) {\n try {\n baseCookie.set(_domainSpecific(name), null, _options);\n return true;\n } catch (e) {\n return false;\n }\n};\n\nvar Cookie = {\n reset: reset,\n options: options,\n get: get,\n set: set,\n remove: remove,\n setRaw: setRaw,\n getRaw: getRaw\n};\n\nvar WorkerStorage =\n/*#__PURE__*/\nfunction () {\n function WorkerStorage() {\n _classCallCheck(this, WorkerStorage);\n\n this.map = new Map();\n this.length = 0;\n }\n\n _createClass(WorkerStorage, [{\n key: \"key\",\n value: function key(index) {\n var keys = Array.from(this.map.keys());\n var key = keys[index];\n return this.map.get(key);\n }\n }, {\n key: \"getItem\",\n value: function getItem(key) {\n return this.map.get(key);\n }\n }, {\n key: \"setItem\",\n value: function setItem(key, value) {\n if (!this.map.has(key)) {\n this.length += 1;\n }\n\n this.map.set(key, value);\n }\n }, {\n key: \"removeItem\",\n value: function removeItem(key) {\n if (this.map.has(key)) {\n this.length -= 1;\n this.map.delete(key);\n }\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.map.clear();\n this.length = 0;\n }\n }]);\n\n return WorkerStorage;\n}();\n\n/*\n * Implement localStorage to support Firefox 2-3 and IE 5-7\n */\nvar localStorage;\n\n{\n // test that Window.localStorage is available and works\n var windowLocalStorageAvailable = function windowLocalStorageAvailable() {\n var uid = new Date();\n var result;\n\n try {\n GlobalScope.localStorage.setItem(uid, uid);\n result = GlobalScope.localStorage.getItem(uid) === String(uid);\n GlobalScope.localStorage.removeItem(uid);\n return result;\n } catch (e) {// localStorage not available\n }\n\n return false;\n };\n\n if (windowLocalStorageAvailable()) {\n localStorage = GlobalScope.localStorage;\n } else if (typeof GlobalScope !== 'undefined' && GlobalScope.globalStorage) {\n // Firefox 2-3 use globalStorage\n // See https://developer.mozilla.org/en/dom/storage#globalStorage\n try {\n localStorage = GlobalScope.globalStorage[GlobalScope.location.hostname];\n } catch (e) {// Something bad happened...\n }\n } else if (typeof document !== 'undefined') {\n // IE 5-7 use userData\n // See http://msdn.microsoft.com/en-us/library/ms531424(v=vs.85).aspx\n var div = document.createElement('div'),\n attrKey = 'localStorage';\n div.style.display = 'none';\n document.getElementsByTagName('head')[0].appendChild(div);\n\n if (div.addBehavior) {\n div.addBehavior('#default#userdata');\n localStorage = {\n length: 0,\n setItem: function setItem(k, v) {\n div.load(attrKey);\n\n if (!div.getAttribute(k)) {\n this.length++;\n }\n\n div.setAttribute(k, v);\n div.save(attrKey);\n },\n getItem: function getItem(k) {\n div.load(attrKey);\n return div.getAttribute(k);\n },\n removeItem: function removeItem(k) {\n div.load(attrKey);\n\n if (div.getAttribute(k)) {\n this.length--;\n }\n\n div.removeAttribute(k);\n div.save(attrKey);\n },\n clear: function clear() {\n div.load(attrKey);\n var i = 0;\n var attr;\n\n while (attr = div.XMLDocument.documentElement.attributes[i++]) {\n div.removeAttribute(attr.name);\n }\n\n div.save(attrKey);\n this.length = 0;\n },\n key: function key(k) {\n div.load(attrKey);\n return div.XMLDocument.documentElement.attributes[k];\n }\n };\n div.load(attrKey);\n localStorage.length = div.XMLDocument.documentElement.attributes.length;\n }\n } else if (utils.isWebWorkerEnvironment()) {\n // Web worker\n localStorage = new WorkerStorage();\n }\n\n if (!localStorage) {\n /* eslint-disable no-unused-vars */\n localStorage = {\n length: 0,\n setItem: function setItem(k, v) {},\n getItem: function getItem(k) {},\n removeItem: function removeItem(k) {},\n clear: function clear() {},\n key: function key(k) {}\n };\n /* eslint-enable no-unused-vars */\n }\n}\n\nvar localStorage$1 = localStorage;\n\n/*\n * Abstraction layer for cookie storage.\n * Uses cookie if available, otherwise fallback to localstorage.\n */\n\nvar cookieStorage = function cookieStorage() {\n this.storage = null;\n};\n\ncookieStorage.prototype.getStorage = function () {\n if (this.storage !== null) {\n return this.storage;\n }\n\n if (baseCookie.areCookiesEnabled()) {\n this.storage = Cookie;\n } else {\n // if cookies disabled, fallback to localstorage\n // note: localstorage does not persist across subdomains\n var keyPrefix = 'amp_cookiestore_';\n this.storage = {\n _options: {\n expirationDays: undefined,\n domain: undefined,\n secure: false\n },\n reset: function reset() {\n this._options = {\n expirationDays: undefined,\n domain: undefined,\n secure: false\n };\n },\n options: function options(opts) {\n if (arguments.length === 0) {\n return this._options;\n }\n\n opts = opts || {};\n this._options.expirationDays = opts.expirationDays || this._options.expirationDays; // localStorage is specific to subdomains\n\n this._options.domain = opts.domain || this._options.domain || GlobalScope && GlobalScope.location && GlobalScope.location.hostname;\n return this._options.secure = opts.secure || false;\n },\n get: function get(name) {\n try {\n return JSON.parse(localStorage$1.getItem(keyPrefix + name));\n } catch (e) {}\n /* eslint-disable-line no-empty */\n\n\n return null;\n },\n set: function set(name, value) {\n try {\n localStorage$1.setItem(keyPrefix + name, JSON.stringify(value));\n return true;\n } catch (e) {}\n /* eslint-disable-line no-empty */\n\n\n return false;\n },\n remove: function remove(name) {\n try {\n localStorage$1.removeItem(keyPrefix + name);\n } catch (e) {\n return false;\n }\n }\n };\n }\n\n return this.storage;\n};\n\nvar _storageOptionExists;\nvar storageOptionExists = (_storageOptionExists = {}, _defineProperty(_storageOptionExists, Constants.STORAGE_COOKIES, true), _defineProperty(_storageOptionExists, Constants.STORAGE_NONE, true), _defineProperty(_storageOptionExists, Constants.STORAGE_LOCAL, true), _defineProperty(_storageOptionExists, Constants.STORAGE_SESSION, true), _storageOptionExists);\n/**\n * MetadataStorage involves SDK data persistance\n * storage priority: cookies -> localStorage -> in memory\n * This priority can be overriden by setting the storage options.\n * if in localStorage, unable track users between subdomains\n * if in memory, then memory can't be shared between different tabs\n */\n\nvar MetadataStorage =\n/*#__PURE__*/\nfunction () {\n function MetadataStorage(_ref) {\n var storageKey = _ref.storageKey,\n disableCookies = _ref.disableCookies,\n domain = _ref.domain,\n secure = _ref.secure,\n sameSite = _ref.sameSite,\n expirationDays = _ref.expirationDays,\n storage = _ref.storage;\n\n _classCallCheck(this, MetadataStorage);\n\n this.storageKey = storageKey;\n this.domain = domain;\n this.secure = secure;\n this.sameSite = sameSite;\n this.expirationDays = expirationDays;\n this.cookieDomain = '';\n var loc = getLocation() ? getLocation().href : undefined;\n var writableTopDomain = topDomain(loc);\n this.cookieDomain = domain || (writableTopDomain ? '.' + writableTopDomain : null);\n\n if (storageOptionExists[storage]) {\n this.storage = storage;\n } else {\n var disableCookieStorage = disableCookies || !baseCookie.areCookiesEnabled({\n domain: this.cookieDomain,\n secure: this.secure,\n sameSite: this.sameSite,\n expirationDays: this.expirationDays\n });\n\n if (disableCookieStorage) {\n this.storage = Constants.STORAGE_LOCAL;\n } else {\n this.storage = Constants.STORAGE_COOKIES;\n }\n }\n }\n\n _createClass(MetadataStorage, [{\n key: \"getCookieStorageKey\",\n value: function getCookieStorageKey() {\n if (!this.domain) {\n return this.storageKey;\n }\n\n var suffix = this.domain.charAt(0) === '.' ? this.domain.substring(1) : this.domain;\n return \"\".concat(this.storageKey).concat(suffix ? \"_\".concat(suffix) : '');\n }\n /*\n * Data is saved as delimited values rather than JSO to minimize cookie space\n * Should not change order of the items\n */\n\n }, {\n key: \"save\",\n value: function save(_ref2) {\n var deviceId = _ref2.deviceId,\n userId = _ref2.userId,\n optOut = _ref2.optOut,\n sessionId = _ref2.sessionId,\n lastEventTime = _ref2.lastEventTime,\n eventId = _ref2.eventId,\n identifyId = _ref2.identifyId,\n sequenceNumber = _ref2.sequenceNumber;\n\n if (this.storage === Constants.STORAGE_NONE) {\n return;\n }\n\n var value = [deviceId, Base64.encode(userId || ''), // used to convert not unicode to alphanumeric since cookies only use alphanumeric\n optOut ? '1' : '', sessionId ? sessionId.toString(32) : '0', // generated when instantiated, timestamp (but re-uses session id in cookie if not expired) @TODO clients may want custom session id\n lastEventTime ? lastEventTime.toString(32) : '0', // last time an event was set\n eventId ? eventId.toString(32) : '0', identifyId ? identifyId.toString(32) : '0', sequenceNumber ? sequenceNumber.toString(32) : '0'].join('.');\n\n switch (this.storage) {\n case Constants.STORAGE_SESSION:\n if (GlobalScope.sessionStorage) {\n GlobalScope.sessionStorage.setItem(this.storageKey, value);\n }\n\n break;\n\n case Constants.STORAGE_LOCAL:\n localStorage$1.setItem(this.storageKey, value);\n break;\n\n case Constants.STORAGE_COOKIES:\n this.saveCookie(value);\n break;\n }\n }\n }, {\n key: \"saveCookie\",\n value: function saveCookie(value) {\n baseCookie.set(this.getCookieStorageKey(), value, {\n domain: this.cookieDomain,\n secure: this.secure,\n sameSite: this.sameSite,\n expirationDays: this.expirationDays\n });\n }\n }, {\n key: \"load\",\n value: function load() {\n var _this = this;\n\n var str;\n\n if (this.storage === Constants.STORAGE_COOKIES) {\n var cookieKey = this.getCookieStorageKey() + '=';\n var allCookies = baseCookie.getAll(cookieKey);\n\n if (allCookies.length === 0 || allCookies.length === 1) {\n str = allCookies[0];\n } else {\n // dedup cookies by deleting them all and restoring\n // the one with the most recent event time\n var latestCookie = baseCookie.sortByEventTime(allCookies)[0];\n allCookies.forEach(function () {\n return baseCookie.set(_this.getCookieStorageKey(), null, {});\n });\n this.saveCookie(latestCookie);\n str = baseCookie.get(cookieKey);\n }\n }\n\n if (!str) {\n str = localStorage$1.getItem(this.storageKey);\n }\n\n if (!str) {\n try {\n str = GlobalScope.sessionStorage && GlobalScope.sessionStorage.getItem(this.storageKey);\n } catch (e) {\n utils.log.info(\"window.sessionStorage unavailable. Reason: \\\"\".concat(e, \"\\\"\"));\n }\n }\n\n if (!str) {\n return null;\n }\n\n var values = str.split('.');\n var userId = null;\n\n if (values[Constants.USER_ID_INDEX]) {\n try {\n userId = Base64.decode(values[Constants.USER_ID_INDEX]);\n } catch (e) {\n userId = null;\n }\n }\n\n return {\n deviceId: values[Constants.DEVICE_ID_INDEX],\n userId: userId,\n optOut: values[Constants.OPT_OUT_INDEX] === '1',\n sessionId: parseInt(values[Constants.SESSION_ID_INDEX], 32),\n lastEventTime: parseInt(values[Constants.LAST_EVENT_TIME_INDEX], 32),\n eventId: parseInt(values[Constants.EVENT_ID_INDEX], 32),\n identifyId: parseInt(values[Constants.IDENTIFY_ID_INDEX], 32),\n sequenceNumber: parseInt(values[Constants.SEQUENCE_NUMBER_INDEX], 32)\n };\n }\n /**\n * Clears any saved metadata storage\n * @constructor AmplitudeClient\n * @public\n * @return {boolean} True if metadata was cleared, false if none existed\n */\n\n }, {\n key: \"clear\",\n value: function clear() {\n var str;\n\n if (this.storage === Constants.STORAGE_COOKIES) {\n str = baseCookie.get(this.getCookieStorageKey() + '=');\n baseCookie.set(this.getCookieStorageKey(), null, {\n domain: this.cookieDomain,\n secure: this.secure,\n sameSite: this.sameSite,\n expirationDays: 0\n });\n }\n\n if (!str) {\n str = localStorage$1.getItem(this.storageKey);\n localStorage$1.clear();\n }\n\n if (!str) {\n try {\n str = GlobalScope.sessionStorage && GlobalScope.sessionStorage.getItem(this.storageKey);\n GlobalScope.sessionStorage.clear();\n } catch (e) {\n utils.log.info(\"window.sessionStorage unavailable. Reason: \\\"\".concat(e, \"\\\"\"));\n }\n }\n\n return !!str;\n }\n }]);\n\n return MetadataStorage;\n}();\n\nvar getUtmData = function getUtmData(rawCookie, query) {\n // Translate the utmz cookie format into url query string format.\n var cookie = rawCookie ? '?' + rawCookie.split('.').slice(-1)[0].replace(/\\|/g, '&') : '';\n\n var fetchParam = function fetchParam(queryName, query, cookieName, cookie) {\n return utils.getQueryParam(queryName, query) || utils.getQueryParam(cookieName, cookie);\n };\n\n var utmSource = fetchParam(Constants.UTM_SOURCE, query, 'utmcsr', cookie);\n var utmMedium = fetchParam(Constants.UTM_MEDIUM, query, 'utmcmd', cookie);\n var utmCampaign = fetchParam(Constants.UTM_CAMPAIGN, query, 'utmccn', cookie);\n var utmTerm = fetchParam(Constants.UTM_TERM, query, 'utmctr', cookie);\n var utmContent = fetchParam(Constants.UTM_CONTENT, query, 'utmcct', cookie);\n var utmData = {};\n\n var addIfNotNull = function addIfNotNull(key, value) {\n if (!utils.isEmptyString(value)) {\n utmData[key] = value;\n }\n };\n\n addIfNotNull(Constants.UTM_SOURCE, utmSource);\n addIfNotNull(Constants.UTM_MEDIUM, utmMedium);\n addIfNotNull(Constants.UTM_CAMPAIGN, utmCampaign);\n addIfNotNull(Constants.UTM_TERM, utmTerm);\n addIfNotNull(Constants.UTM_CONTENT, utmContent);\n return utmData;\n};\n\n/*\n * Wrapper for a user properties JSON object that supports operations.\n * Note: if a user property is used in multiple operations on the same Identify object,\n * only the first operation will be saved, and the rest will be ignored.\n */\n\nvar AMP_OP_ADD = '$add';\nvar AMP_OP_APPEND = '$append';\nvar AMP_OP_CLEAR_ALL = '$clearAll';\nvar AMP_OP_PREPEND = '$prepend';\nvar AMP_OP_SET = '$set';\nvar AMP_OP_SET_ONCE = '$setOnce';\nvar AMP_OP_UNSET = '$unset';\nvar AMP_OP_PREINSERT = '$preInsert';\nvar AMP_OP_POSTINSERT = '$postInsert';\nvar AMP_OP_REMOVE = '$remove';\n/**\n * Identify API - instance constructor. Identify objects are a wrapper for user property operations.\n * Each method adds a user property operation to the Identify object, and returns the same Identify object,\n * allowing you to chain multiple method calls together.\n * Note: if the same user property is used in multiple operations on a single Identify object,\n * only the first operation on that property will be saved, and the rest will be ignored.\n * @constructor Identify\n * @public\n * @example var identify = new amplitude.Identify();\n */\n\nvar Identify = function Identify() {\n this.userPropertiesOperations = {};\n this.properties = []; // keep track of keys that have been added\n};\n/**\n * Increment a user property by a given value (can also be negative to decrement).\n * If the user property does not have a value set yet, it will be initialized to 0 before being incremented.\n * @public\n * @param {string} property - The user property key.\n * @param {number|string} value - The amount by which to increment the user property. Allows numbers as strings (ex: '123').\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().add('karma', 1).add('friends', 1);\n * amplitude.identify(identify); // send the Identify call\n */\n\n\nIdentify.prototype.add = function (property, value) {\n if (type(value) === 'number' || type(value) === 'string') {\n this._addOperation(AMP_OP_ADD, property, value);\n } else {\n utils.log.error('Unsupported type for value: ' + type(value) + ', expecting number or string');\n }\n\n return this;\n};\n/**\n * Append a value or values to a user property.\n * If the user property does not have a value set yet,\n * it will be initialized to an empty list before the new values are appended.\n * If the user property has an existing value and it is not a list,\n * the existing value will be converted into a list with the new values appended.\n * @public\n * @param {string} property - The user property key.\n * @param {number|string|list|object} value - A value or values to append.\n * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().append('ab-tests', 'new-user-tests');\n * identify.append('some_list', [1, 2, 3, 4, 'values']);\n * amplitude.identify(identify); // send the Identify call\n */\n\n\nIdentify.prototype.append = function (property, value) {\n this._addOperation(AMP_OP_APPEND, property, value);\n\n return this;\n};\n/**\n * Clear all user properties for the current user.\n * SDK user should instead call amplitude.clearUserProperties() instead of using this.\n * $clearAll needs to be sent on its own Identify object. If there are already other operations, then don't add $clearAll.\n * If $clearAll already in an Identify object, don't allow other operations to be added.\n * @private\n */\n\n\nIdentify.prototype.clearAll = function () {\n if (Object.keys(this.userPropertiesOperations).length > 0) {\n if (!Object.prototype.hasOwnProperty.call(this.userPropertiesOperations, AMP_OP_CLEAR_ALL)) {\n utils.log.error('Need to send $clearAll on its own Identify object without any other operations, skipping $clearAll');\n }\n\n return this;\n }\n\n this.userPropertiesOperations[AMP_OP_CLEAR_ALL] = '-';\n return this;\n};\n/**\n * Prepend a value or values to a user property.\n * Prepend means inserting the value or values at the front of a list.\n * If the user property does not have a value set yet,\n * it will be initialized to an empty list before the new values are prepended.\n * If the user property has an existing value and it is not a list,\n * the existing value will be converted into a list with the new values prepended.\n * @public\n * @param {string} property - The user property key.\n * @param {number|string|list|object} value - A value or values to prepend.\n * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().prepend('ab-tests', 'new-user-tests');\n * identify.prepend('some_list', [1, 2, 3, 4, 'values']);\n * amplitude.identify(identify); // send the Identify call\n */\n\n\nIdentify.prototype.prepend = function (property, value) {\n this._addOperation(AMP_OP_PREPEND, property, value);\n\n return this;\n};\n/**\n * Sets the value of a given user property. If a value already exists, it will be overwriten with the new value.\n * @public\n * @param {string} property - The user property key.\n * @param {number|string|list|boolean|object} value - A value or values to set.\n * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().set('user_type', 'beta');\n * identify.set('name', {'first': 'John', 'last': 'Doe'}); // dict is flattened and becomes name.first: John, name.last: Doe\n * amplitude.identify(identify); // send the Identify call\n */\n\n\nIdentify.prototype.set = function (property, value) {\n this._addOperation(AMP_OP_SET, property, value);\n\n return this;\n};\n/**\n * Sets the value of a given user property only once. Subsequent setOnce operations on that user property will be ignored;\n * however, that user property can still be modified through any of the other operations.\n * Useful for capturing properties such as 'initial_signup_date', 'initial_referrer', etc.\n * @public\n * @param {string} property - The user property key.\n * @param {number|string|list|boolean|object} value - A value or values to set once.\n * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().setOnce('sign_up_date', '2016-04-01');\n * amplitude.identify(identify); // send the Identify call\n */\n\n\nIdentify.prototype.setOnce = function (property, value) {\n this._addOperation(AMP_OP_SET_ONCE, property, value);\n\n return this;\n};\n/**\n * Unset and remove a user property. This user property will no longer show up in a user's profile.\n * @public\n * @param {string} property - The user property key.\n * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n * @example var identify = new amplitude.Identify().unset('user_type').unset('age');\n * amplitude.identify(identify); // send the Identify call\n */\n\n\nIdentify.prototype.unset = function (property) {\n this._addOperation(AMP_OP_UNSET, property, '-');\n\n return this;\n};\n/**\n * Preinsert a value or values to a user property, if it does not exist in the user property already.\n * Preinsert means inserting the value or values to the beginning of the specified user property.\n * If the item already exists in the user property, it will be a no-op.\n * @public\n * @param {string} property - The user property key.\n * @param {number|string|list|object} value - A value or values to insert.\n * @returns {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n */\n\n\nIdentify.prototype.preInsert = function (property, value) {\n this._addOperation(AMP_OP_PREINSERT, property, value);\n\n return this;\n};\n/**\n * Postinsert a value or values to a user property, if it does not exist in the user property already.\n * Postinsert means inserting the value or values to the beginning of the specified user property.\n * If the item already exists in the user property, it will be a no-op.\n * @param {string} property - The user property key.\n * @param {number|string|list|object} value - A value or values to insert.\n * @returns {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n */\n\n\nIdentify.prototype.postInsert = function (property, value) {\n this._addOperation(AMP_OP_POSTINSERT, property, value);\n\n return this;\n};\n/**\n * Remove a value or values to a user property, if it does exist in the user property.\n * If the item does not exist in the user property, it will be a no-op.\n * @param {string} property - The user property key.\n * @param {number|string|list|object} value - A value or values to remove.\n * @returns {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n */\n\n\nIdentify.prototype.remove = function (property, value) {\n this._addOperation(AMP_OP_REMOVE, property, value);\n\n return this;\n};\n/**\n * Helper function that adds operation to the Identify's object\n * Handle's filtering of duplicate user property keys, and filtering for clearAll.\n * @private\n */\n\n\nIdentify.prototype._addOperation = function (operation, property, value) {\n // check that the identify doesn't already contain a clearAll\n if (Object.prototype.hasOwnProperty.call(this.userPropertiesOperations, AMP_OP_CLEAR_ALL)) {\n utils.log.error('This identify already contains a $clearAll operation, skipping operation ' + operation);\n return;\n } // check that property wasn't already used in this Identify\n\n\n if (this.properties.indexOf(property) !== -1) {\n utils.log.error('User property \"' + property + '\" already used in this identify, skipping operation ' + operation);\n return;\n }\n\n if (!Object.prototype.hasOwnProperty.call(this.userPropertiesOperations, operation)) {\n this.userPropertiesOperations[operation] = {};\n }\n\n this.userPropertiesOperations[operation][property] = value;\n this.properties.push(property);\n};\n\n/*\n * Simple AJAX request object\n */\n\nvar Request = function Request(url, data, headers) {\n this.url = url;\n this.data = data || {};\n this.headers = headers;\n};\n\nvar CORS_HEADER = 'Cross-Origin-Resource-Policy';\n\nfunction setHeaders(xhr, headers) {\n for (var header in headers) {\n if (header === CORS_HEADER && !headers[header]) {\n continue;\n }\n\n xhr.setRequestHeader(header, headers[header]);\n }\n}\n\nRequest.prototype.send = function (callback) {\n var isIE = GlobalScope.XDomainRequest ? true : false;\n\n if (isIE) {\n var xdr = new GlobalScope.XDomainRequest();\n xdr.open('POST', this.url, true);\n\n xdr.onload = function () {\n callback(200, xdr.responseText);\n };\n\n xdr.onerror = function () {\n // status code not available from xdr, try string matching on responseText\n if (xdr.responseText === 'Request Entity Too Large') {\n callback(413, xdr.responseText);\n } else {\n callback(500, xdr.responseText);\n }\n };\n\n xdr.ontimeout = function () {};\n\n xdr.onprogress = function () {};\n\n xdr.send(queryString.stringify(this.data));\n } else if (typeof XMLHttpRequest !== 'undefined') {\n var xhr = new XMLHttpRequest();\n xhr.open('POST', this.url, true);\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.status, xhr.responseText);\n }\n };\n\n setHeaders(xhr, this.headers);\n xhr.send(queryString.stringify(this.data));\n } else {\n var responseStatus = undefined;\n fetch(this.url, {\n method: 'POST',\n headers: this.headers,\n body: queryString.stringify(this.data)\n }).then(function (response) {\n responseStatus = response.status;\n return response.text();\n }).then(function (responseText) {\n callback(responseStatus, responseText);\n });\n } //log('sent request to ' + this.url + ' with data ' + decodeURIComponent(queryString(this.data)));\n\n};\n\n/**\n * Revenue API - instance constructor. Wrapper for logging Revenue data. Revenue objects get passed to amplitude.logRevenueV2 to send to Amplitude servers.\n * Each method updates a revenue property in the Revenue object, and returns the same Revenue object,\n * allowing you to chain multiple method calls together.\n *\n * Note: price is a required field to log revenue events.\n * If quantity is not specified then defaults to 1.\n * @constructor Revenue\n * @public\n * @example var revenue = new amplitude.Revenue();\n */\n\nvar Revenue = function Revenue() {\n // required fields\n this._price = null; // optional fields\n\n this._productId = null;\n this._quantity = 1;\n this._revenueType = null;\n this._properties = null;\n};\n/**\n * Set a value for the product identifer.\n * @public\n * @param {string} productId - The value for the product identifier. Empty and invalid strings are ignored.\n * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n * amplitude.logRevenueV2(revenue);\n */\n\n\nRevenue.prototype.setProductId = function setProductId(productId) {\n if (type(productId) !== 'string') {\n utils.log.error('Unsupported type for productId: ' + type(productId) + ', expecting string');\n } else if (utils.isEmptyString(productId)) {\n utils.log.error('Invalid empty productId');\n } else {\n this._productId = productId;\n }\n\n return this;\n};\n/**\n * Set a value for the quantity. Note revenue amount is calculated as price * quantity.\n * @public\n * @param {number} quantity - Integer value for the quantity. If not set, quantity defaults to 1.\n * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setQuantity(5);\n * amplitude.logRevenueV2(revenue);\n */\n\n\nRevenue.prototype.setQuantity = function setQuantity(quantity) {\n if (type(quantity) !== 'number') {\n utils.log.error('Unsupported type for quantity: ' + type(quantity) + ', expecting number');\n } else {\n this._quantity = parseInt(quantity);\n }\n\n return this;\n};\n/**\n * Set a value for the price. This field is required for all revenue being logged.\n *\n * Note: revenue amount is calculated as price * quantity.\n * @public\n * @param {number} price - Double value for the quantity.\n * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n * amplitude.logRevenueV2(revenue);\n */\n\n\nRevenue.prototype.setPrice = function setPrice(price) {\n if (type(price) !== 'number') {\n utils.log.error('Unsupported type for price: ' + type(price) + ', expecting number');\n } else {\n this._price = price;\n }\n\n return this;\n};\n/**\n * Set a value for the revenueType (for example purchase, cost, tax, refund, etc).\n * @public\n * @param {string} revenueType - RevenueType to designate.\n * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setRevenueType('purchase');\n * amplitude.logRevenueV2(revenue);\n */\n\n\nRevenue.prototype.setRevenueType = function setRevenueType(revenueType) {\n if (type(revenueType) !== 'string') {\n utils.log.error('Unsupported type for revenueType: ' + type(revenueType) + ', expecting string');\n } else {\n this._revenueType = revenueType;\n }\n\n return this;\n};\n/**\n * Set event properties for the revenue event.\n * @public\n * @param {object} eventProperties - Revenue event properties to set.\n * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n * @example var event_properties = {'city': 'San Francisco'};\n * var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setEventProperties(event_properties);\n * amplitude.logRevenueV2(revenue);\n */\n\n\nRevenue.prototype.setEventProperties = function setEventProperties(eventProperties) {\n if (type(eventProperties) !== 'object') {\n utils.log.error('Unsupported type for eventProperties: ' + type(eventProperties) + ', expecting object');\n } else {\n this._properties = utils.validateProperties(eventProperties);\n }\n\n return this;\n};\n/**\n * @private\n */\n\n\nRevenue.prototype._isValidRevenue = function _isValidRevenue() {\n if (type(this._price) !== 'number') {\n utils.log.error('Invalid revenue, need to set price field');\n return false;\n }\n\n return true;\n};\n/**\n * @private\n */\n\n\nRevenue.prototype._toJSONObject = function _toJSONObject() {\n var obj = type(this._properties) === 'object' ? this._properties : {};\n\n if (this._productId !== null) {\n obj[Constants.REVENUE_PRODUCT_ID] = this._productId;\n }\n\n if (this._quantity !== null) {\n obj[Constants.REVENUE_QUANTITY] = this._quantity;\n }\n\n if (this._price !== null) {\n obj[Constants.REVENUE_PRICE] = this._price;\n }\n\n if (this._revenueType !== null) {\n obj[Constants.REVENUE_REVENUE_TYPE] = this._revenueType;\n }\n\n return obj;\n};\n\n/**\n * Source: [jed's gist]{@link https://gist.github.com/982883}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\nvar uuid = function uuid(a) {\n return a // if the placeholder was passed, return\n ? // a random number from 0 to 15\n (a ^ // unless b is 8,\n Math.random() * // in which case\n 16 >> // a random number from\n a / 4). // 8 to 11\n toString(16) // in hexadecimal\n : // or otherwise a concatenated string:\n ([1e7] + // 10000000 +\n -1e3 + // -1000 +\n -4e3 + // -4000 +\n -8e3 + // -80000000 +\n -1e11). // -100000000000,\n replace( // replacing\n /[018]/g, // zeroes, ones, and eights with\n uuid // random hex digits\n );\n};\n\nvar getLanguage = function getLanguage() {\n return typeof navigator !== 'undefined' && (navigator.languages && navigator.languages[0] || navigator.language || navigator.userLanguage) || '';\n};\n\nvar language = {\n getLanguage: getLanguage\n};\n\n/**\n * AmplitudeServerZone is for Data Residency and handling server zone related properties.\n * The server zones now are US and EU.\n *\n * For usage like sending data to Amplitude's EU servers, you need to configure the serverZone during nitializing.\n */\n\nvar AmplitudeServerZone = {\n US: 'US',\n EU: 'EU'\n};\n\nvar getEventLogApi = function getEventLogApi(serverZone) {\n var eventLogUrl = Constants.EVENT_LOG_URL;\n\n switch (serverZone) {\n case AmplitudeServerZone.EU:\n eventLogUrl = Constants.EVENT_LOG_EU_URL;\n break;\n\n case AmplitudeServerZone.US:\n eventLogUrl = Constants.EVENT_LOG_URL;\n break;\n }\n\n return eventLogUrl;\n};\n\nvar getDynamicConfigApi = function getDynamicConfigApi(serverZone) {\n var dynamicConfigUrl = Constants.DYNAMIC_CONFIG_URL;\n\n switch (serverZone) {\n case AmplitudeServerZone.EU:\n dynamicConfigUrl = Constants.DYNAMIC_CONFIG_EU_URL;\n break;\n\n case AmplitudeServerZone.US:\n dynamicConfigUrl = Constants.DYNAMIC_CONFIG_URL;\n break;\n }\n\n return dynamicConfigUrl;\n};\n\nvar version = \"8.21.3\";\n\n/**\n * Options used when initializing Amplitude\n * @typedef {Object} Options\n * @property {string} [apiEndpoint=`api.amplitude.com`] - Endpoint to send amplitude event requests to.\n * @property {boolean} [batchEvents=`false`] - If `true`, then events are batched together and uploaded only when the number of unsent events is greater than or equal to eventUploadThreshold or after eventUploadPeriodMillis milliseconds have passed since the first unsent event was logged.\n * @property {number} [cookieExpiration=`365`] - The number of days after which the Amplitude cookie will expire. 12 months is for GDPR compliance.\n * @property {string} [cookieName=`amplitude_id`] - *DEPRECATED*\n * @property {string} [sameSiteCookie='None'] - Sets the SameSite flag on the amplitude cookie. Decides cookie privacy policy.\n * @property {boolean} [cookieForceUpgrade=`false`] - Forces pre-v6.0.0 instances to adopt post-v6.0.0 compat cookie formats.\n * @property {boolean} [deferInitialization=`null`] - If `true`, disables the core functionality of the sdk, including saving a cookie and all logging, until explicitly enabled. To enable tracking, please call `amplitude.getInstance().enableTracking()` *Note: This will not affect users who already have an amplitude cookie. The decision to track events is determined by whether or not a user has an amplitude analytics cookie. If the `cookieExpiration</code> is manually defined to be a short lifespan, you may need to run `amplitude.getInstance().enableTracking()` upon the cookie expiring or upon logging in.*\n * @property {boolean} [disableCookies=`false`] - Disable Ampllitude cookies altogether.\n * @property {string} [deviceId=A randomly generated UUID.] - The custom Device ID to set. *Note: This is not recommended unless you know what you are doing (e.g. you have your own system for tracking user devices).*\n * @property {boolean} [deviceIdFromUrlParam=`false`] - If `true`, then the SDK will parse Device ID values from the URL parameter amp_device_id if available. Device IDs defined in the configuration options during init will take priority over Device IDs from URL parameters.\n * @property {string} [domain=The top domain of the current page's URL. ('https://amplitude.com')] - Set a custom domain for the Amplitude cookie. To include subdomains, add a preceding period, eg: `.amplitude.com`.\n * @property {number} [eventUploadPeriodMillis=`30000` (30 sec)] - Amount of time in milliseconds that the SDK waits before uploading events if batchEvents is true.\n * @property {number} [eventUploadThreshold=`30`] - Minimum number of events to batch together per request if batchEvents is true.\n * @property {boolean} [forceHttps=`true`] - If `true`, the events will always be uploaded to HTTPS endpoint. Otherwise, it will use the embedding site's protocol.\n * @property {boolean} [includeFbclid=`false`] - If `true`, captures the fbclid URL parameter as well as the user's initial_fbclid via a setOnce operation.\n * @property {boolean} [includeGclid=`false`] - If `true`, captures the gclid URL parameter as well as the user's initial_gclid via a setOnce operation.\n * @property {boolean} [includeReferrer=`false`] - If `true`, captures the referrer and referring_domain for each session, as well as the user's initial_referrer and initial_referring_domain via a setOnce operation.\n * @property {boolean} [includeUtm=`false`] - If `true`, finds UTM parameters in the query string or the _utmz cookie, parses, and includes them as user properties on all events uploaded. This also captures initial UTM parameters for each session via a setOnce operation.\n * @property {Object} [ingestionMetadata] Ingestion metadata\n * @property {string} [ingestionMetadata.sourceName] source name in ingestion metadata, e.g. \"ampli\"\n * @property {string} [ingestionMetadata.sourceVersion] source version in ingestion metadata, e.g. \"1.0.0\"\n * @property {string} [language=The language determined by the browser] - Custom language to set.\n * @property {Object} [library=`{ name: 'amplitude-js', version: packageJsonVersion }`] - Values for the library version\n * @property {string} [logLevel=`WARN`] - Level of logs to be printed in the developer console. Valid values are 'DISABLE', 'ERROR', 'WARN', 'INFO'. To learn more about the different options, see below.\n * @property {boolean} [logAttributionCapturedEvent=`false`] - If `true`, the SDK will log an Amplitude event anytime new attribution values are captured from the user. **Note: These events count towards your event volume.** Event name being logged: [Amplitude] Attribution Captured. Event Properties that can be logged: `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`, `referrer`, `referring_domain`, `gclid`, `fbclid`. For UTM properties to be logged, `includeUtm` must be set to `true`. For the `referrer` and `referring_domain` properties to be logged, `includeReferrer` must be set to `true`. For the `gclid` property to be logged, `includeGclid` must be set to `true`. For the `fbclid` property to be logged, `includeFbclid` must be set to `true`.\n * @property {boolean} [optOut=`false`] - Whether or not to disable tracking for the current user.\n * @property {function} [onError=`() => {}`] - Function to call on error.\n * @property {function} [onExitPage=`() => {}`] - Function called when the user exits the browser. Useful logging on page exit.\n * @property {Object} [plan] Tracking plan properties\n * @property {string} [plan.branch] The tracking plan branch name e.g. \"main\"\n * @property {string} [plan.source] The tracking plan source e.g. \"web\"\n * @property {string} [plan.version] The tracking plan version e.g. \"1\", \"15\"\n * @property {string} [plan.versionId] The tracking plan version Id e.g. \"9ec23ba0-275f-468f-80d1-66b88bff9529\"\n * @property {string} [platform=`Web`] - Platform device is running on. Defaults to `Web` (browser, including mobile browsers).\n * @property {number} [savedMaxCount=`1000`] - Maximum number of events to save in localStorage. If more events are logged while offline, then old events are removed.\n * @property {boolean} [saveEvents=`true`] - If `true`, saves events to localStorage and removes them upon successful upload. *Note: Without saving events, events may be lost if the user navigates to another page before the events are uploaded.*\n * @property {boolean} [saveParamsReferrerOncePerSession=`true`] - If `true`, then includeGclid, includeFbclid, includeReferrer, and includeUtm will only track their respective properties once per session. New values that come in during the middle of the user's session will be ignored. Set to false to always capture new values.\n * @property {boolean} [secureCookie=`false`] - If `true`, the amplitude cookie will be set with the Secure flag.\n * @property {number} [sessionTimeout=`30*60*1000` (30 min)] - The time between logged events before a new session starts in milliseconds.\n * @property {string[]} [storage=`''`] - Sets storage strategy. Options are 'cookies', 'localStorage', 'sessionStorage', or `none`. Will override `disableCookies` option\n * @property {Object} [trackingOptions=`{ city: true, country: true, carrier: true, device_manufacturer: true, device_model: true, dma: true, ip_address: true, language: true, os_name: true, os_version: true, platform: true, region: true, version_name: true}`] - Type of data associated with a user.\n * @property {string} [transport=`http`] - Network transport mechanism used to send events. Options are 'http' and 'beacon'.\n * @property {boolean} [unsetParamsReferrerOnNewSession=`false`] - If `false`, the existing `referrer` and `utm_parameter` values will be carried through each new session. If set to `true`, the `referrer` and `utm_parameter` user properties, which include `referrer`, `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, and `utm_content`, will be set to `null` upon instantiating a new session. Note: This only works if `includeReferrer` or `includeUtm` is set to `true`.\n * @property {string} [unsentKey=`amplitude_unsent`] - localStorage key that stores unsent events.\n * @property {string} [unsentIdentifyKey=`amplitude_unsent_identify`] - localStorage key that stores unsent identifies.\n * @property {number} [uploadBatchSize=`100`] - The maximum number of events to send to the server per request.\n * @property {Object} [headers=`{ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }`] - Headers attached to an event(s) upload network request. Custom header properties are merged with this object.\n * @property {string} [serverZone] - For server zone related configuration, used for server api endpoint and dynamic configuration.\n * @property {boolean} [useDynamicConfig] - Enable dynamic configuration to find best server url for user.\n * @property {boolean} [serverZoneBasedApi] - To update api endpoint with serverZone change or not. For data residency, recommend to enable it unless using own proxy server.\n * @property {number} [sessionId=`null`] - The custom Session ID for the current session. *Note: This is not recommended unless you know what you are doing because the Session ID of a session is utilized for all session metrics in Amplitude.\n * @property {string} [partnerId=`null`] - The partner id value\n */\n\nvar DEFAULT_OPTIONS = {\n apiEndpoint: Constants.EVENT_LOG_URL,\n batchEvents: false,\n cookieExpiration: 365,\n // 12 months is for GDPR compliance\n cookieName: 'amplitude_id',\n // this is a deprecated option\n sameSiteCookie: 'Lax',\n // cookie privacy policy\n cookieForceUpgrade: false,\n deferInitialization: false,\n disableCookies: false,\n // this is a deprecated option\n deviceIdFromUrlParam: false,\n domain: '',\n eventUploadPeriodMillis: 30 * 1000,\n // 30s\n eventUploadThreshold: 30,\n forceHttps: true,\n includeFbclid: false,\n includeGclid: false,\n includeReferrer: false,\n includeUtm: false,\n ingestionMetadata: {\n sourceName: '',\n sourceVersion: ''\n },\n language: language.getLanguage(),\n library: {\n name: 'amplitude-js',\n version: version\n },\n logLevel: 'WARN',\n logAttributionCapturedEvent: false,\n optOut: false,\n onError: function onError() {},\n onExitPage: function onExitPage() {},\n onNewSessionStart: function onNewSessionStart() {},\n plan: {\n branch: '',\n source: '',\n version: '',\n versionId: ''\n },\n platform: 'Web',\n savedMaxCount: 1000,\n saveEvents: true,\n saveParamsReferrerOncePerSession: true,\n secureCookie: false,\n sessionTimeout: 30 * 60 * 1000,\n storage: Constants.STORAGE_DEFAULT,\n trackingOptions: {\n city: true,\n country: true,\n carrier: true,\n device_manufacturer: true,\n device_model: true,\n dma: true,\n ip_address: true,\n language: true,\n os_name: true,\n os_version: true,\n platform: true,\n region: true,\n version_name: true\n },\n transport: Constants.TRANSPORT_HTTP,\n unsetParamsReferrerOnNewSession: false,\n unsentKey: 'amplitude_unsent',\n unsentIdentifyKey: 'amplitude_unsent_identify',\n uploadBatchSize: 100,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n 'Cross-Origin-Resource-Policy': 'cross-origin'\n },\n serverZone: AmplitudeServerZone.US,\n useDynamicConfig: false,\n serverZoneBasedApi: false,\n sessionId: null,\n partnerId: ''\n};\n\n/**\n * Dynamic Configuration\n * Find the best server url automatically based on app users' geo location.\n */\n\nvar ConfigManager =\n/*#__PURE__*/\nfunction () {\n function ConfigManager() {\n _classCallCheck(this, ConfigManager);\n\n if (!ConfigManager.instance) {\n this.ingestionEndpoint = Constants.EVENT_LOG_URL;\n ConfigManager.instance = this;\n }\n\n return ConfigManager.instance;\n }\n\n _createClass(ConfigManager, [{\n key: \"refresh\",\n value: function refresh(serverZone, forceHttps, callback) {\n var protocol = 'https';\n\n if (!forceHttps && 'https:' !== GlobalScope.location.protocol) {\n protocol = 'http';\n }\n\n var dynamicConfigUrl = protocol + '://' + getDynamicConfigApi(serverZone);\n var self = this;\n var isIE = GlobalScope.XDomainRequest ? true : false;\n\n if (isIE) {\n var xdr = new GlobalScope.XDomainRequest();\n xdr.open('GET', dynamicConfigUrl, true);\n\n xdr.onload = function () {\n var response = JSON.parse(xdr.responseText);\n self.ingestionEndpoint = response['ingestionEndpoint'];\n\n if (callback) {\n callback();\n }\n };\n\n xdr.onerror = function () {};\n\n xdr.ontimeout = function () {};\n\n xdr.onprogress = function () {};\n\n xdr.send();\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', dynamicConfigUrl, true);\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4 && xhr.status === 200) {\n var response = JSON.parse(xhr.responseText);\n self.ingestionEndpoint = response['ingestionEndpoint'];\n\n if (callback) {\n callback();\n }\n }\n };\n\n xhr.send();\n }\n }\n }]);\n\n return ConfigManager;\n}();\n\nvar instance$1 = new ConfigManager();\n\n/**\n * AmplitudeClient SDK API - instance constructor.\n * The Amplitude class handles creation of client instances, all you need to do is call amplitude.getInstance()\n * @constructor AmplitudeClient\n * @public\n * @example var amplitudeClient = new AmplitudeClient();\n */\n\nvar AmplitudeClient = function AmplitudeClient(instanceName) {\n if (!isBrowserEnv() && !utils.isWebWorkerEnvironment()) {\n utils.log.warn('amplitude-js will not work in a non-browser environment. If you are planning to add Amplitude to a node environment, please use @amplitude/node');\n }\n\n this._instanceName = utils.isEmptyString(instanceName) ? Constants.DEFAULT_INSTANCE : instanceName.toLowerCase();\n this._unsentEvents = [];\n this._unsentIdentifys = [];\n this.options = _objectSpread({}, DEFAULT_OPTIONS, {\n headers: _objectSpread({}, DEFAULT_OPTIONS.headers),\n ingestionMetadata: _objectSpread({}, DEFAULT_OPTIONS.ingestionMetadata),\n library: _objectSpread({}, DEFAULT_OPTIONS.library),\n plan: _objectSpread({}, DEFAULT_OPTIONS.plan),\n trackingOptions: _objectSpread({}, DEFAULT_OPTIONS.trackingOptions)\n });\n this.cookieStorage = new cookieStorage().getStorage();\n this._q = []; // queue for proxied functions before script load\n\n this._sending = false;\n this._updateScheduled = false;\n this._onInitCallbacks = [];\n this._onNewSessionStartCallbacks = []; // event meta data\n\n this._eventId = 0;\n this._identifyId = 0;\n this._lastEventTime = null;\n this._newSession = false; // sequence used for by frontend for prioritizing event send retries\n\n this._sequenceNumber = 0;\n this._sessionId = null;\n this._isInitialized = false; // used to integrate with experiment SDK (client-side exposure tracking & real-time user properties)\n\n this._connector = null;\n this._userAgent = typeof navigator !== 'undefined' && navigator && navigator.userAgent || null;\n this._ua = new UAParser(this._userAgent).getResult();\n};\n\nAmplitudeClient.prototype.Identify = Identify;\nAmplitudeClient.prototype.Revenue = Revenue;\n/**\n * Initializes the Amplitude Javascript SDK with your apiKey and any optional configurations.\n * This is required before any other methods can be called.\n * @public\n * @param {string} apiKey - The API key for your app.\n * @param {string} opt_userId - (optional) An identifier for this user.\n * @param {object} opt_config - (optional) Configuration options.\n * See [options.js](https://amplitude.github.io/Amplitude-JavaScript/Options) for a list of options and default values.\n * @param {function} opt_callback - (optional) Provide a callback function to run after initialization is complete.\n * @example amplitudeClient.init('API_KEY', 'USER_ID', {includeReferrer: true, includeUtm: true}, function() { alert('init complete'); });\n */\n\nAmplitudeClient.prototype.init = function init(apiKey, opt_userId, opt_config, opt_callback) {\n var _this = this;\n\n if (type(apiKey) !== 'string' || utils.isEmptyString(apiKey)) {\n utils.log.error('Invalid apiKey. Please re-initialize with a valid apiKey');\n return;\n }\n\n try {\n // used to integrate with experiment SDK (client-side exposure tracking & real-time user properties)\n this._connector = AnalyticsConnector.getInstance(this._instanceName);\n\n _parseConfig(this.options, opt_config);\n\n if ((isBrowserEnv() || utils.isWebWorkerEnvironment()) && GlobalScope.Prototype !== undefined && Array.prototype.toJSON) {\n prototypeJsFix();\n utils.log.warn('Prototype.js injected Array.prototype.toJSON. Deleting Array.prototype.toJSON to prevent double-stringify');\n }\n\n if (this.options.cookieName !== DEFAULT_OPTIONS.cookieName) {\n utils.log.warn('The cookieName option is deprecated. We will be ignoring it for newer cookies');\n }\n\n if (this.options.serverZoneBasedApi) {\n this.options.apiEndpoint = getEventLogApi(this.options.serverZone);\n }\n\n this._refreshDynamicConfig();\n\n this.options.apiKey = apiKey;\n this._storageSuffix = '_' + apiKey + (this._instanceName === Constants.DEFAULT_INSTANCE ? '' : '_' + this._instanceName);\n this._storageSuffixV5 = apiKey.slice(0, 6);\n this._oldCookiename = this.options.cookieName + this._storageSuffix;\n this._unsentKey = this.options.unsentKey + this._storageSuffix;\n this._unsentIdentifyKey = this.options.unsentIdentifyKey + this._storageSuffix;\n this._cookieName = Constants.COOKIE_PREFIX + '_' + this._storageSuffixV5;\n this.cookieStorage.options({\n expirationDays: this.options.cookieExpiration,\n domain: this.options.domain,\n secure: this.options.secureCookie,\n sameSite: this.options.sameSiteCookie\n });\n this._metadataStorage = new MetadataStorage({\n storageKey: this._cookieName,\n disableCookies: this.options.disableCookies,\n expirationDays: this.options.cookieExpiration,\n domain: this.options.domain,\n secure: this.options.secureCookie,\n sameSite: this.options.sameSiteCookie,\n storage: this.options.storage\n });\n var hasOldCookie = !!this.cookieStorage.get(this._oldCookiename);\n var hasNewCookie = !!this._metadataStorage.load();\n this._useOldCookie = !hasNewCookie && hasOldCookie && !this.options.cookieForceUpgrade;\n var hasCookie = hasNewCookie || hasOldCookie;\n\n if (this.options.deferInitialization && !hasCookie) {\n this._deferInitialization(apiKey, opt_userId, opt_config, opt_callback);\n\n return;\n }\n\n this.options.domain = this.cookieStorage.options().domain;\n\n if (type(this.options.logLevel) === 'string') {\n utils.setLogLevel(this.options.logLevel);\n }\n\n var trackingOptions = _generateApiPropertiesTrackingConfig(this);\n\n this._apiPropertiesTrackingOptions = Object.keys(trackingOptions).length > 0 ? {\n tracking_options: trackingOptions\n } : {};\n\n if (this.options.cookieForceUpgrade && hasOldCookie) {\n if (!hasNewCookie) {\n _upgradeCookieData(this);\n }\n\n this.cookieStorage.remove(this._oldCookiename);\n }\n\n _loadCookieData(this);\n\n this._pendingReadStorage = true;\n\n var initFromStorage = function initFromStorage(storedDeviceId) {\n if (opt_config && opt_config.deviceId && !utils.validateDeviceId(opt_config.deviceId)) {\n utils.log.error(\"Invalid device ID rejected. Randomly generated UUID will be used instead of \\\"\".concat(opt_config.deviceId, \"\\\"\"));\n delete opt_config.deviceId;\n }\n\n _this.options.deviceId = _this._getInitialDeviceId(opt_config && opt_config.deviceId, storedDeviceId);\n _this.options.userId = type(opt_userId) === 'string' && !utils.isEmptyString(opt_userId) && opt_userId || type(opt_userId) === 'number' && opt_userId.toString() || _this.options.userId || null;\n var now = new Date().getTime();\n var startNewSession = !_this._sessionId || !_this._lastEventTime || now - _this._lastEventTime > _this.options.sessionTimeout || _this.options.sessionId;\n\n if (startNewSession) {\n if (_this.options.unsetParamsReferrerOnNewSession) {\n _this._unsetUTMParams();\n }\n\n _this._newSession = true;\n _this._sessionId = _this.options.sessionId || now; // reset this.options.sessionId to avoid re-usage\n // use instance.getSessionId() to get session id\n\n _this.options.sessionId = undefined; // only capture UTM params and referrer if new session\n\n if (_this.options.saveParamsReferrerOncePerSession) {\n _this._trackParamsAndReferrer();\n }\n }\n\n if (!_this.options.saveParamsReferrerOncePerSession) {\n _this._trackParamsAndReferrer();\n } // load unsent events and identifies before any attempt to log new ones\n\n\n if (_this.options.saveEvents) {\n _validateUnsentEventQueue(_this._unsentEvents);\n\n _validateUnsentEventQueue(_this._unsentIdentifys);\n }\n\n _this._lastEventTime = now;\n\n _saveCookieData(_this);\n\n _this._pendingReadStorage = false;\n\n _this._sendEventsIfReady(); // try sending unsent events\n\n\n for (var i = 0; i < _this._onInitCallbacks.length; i++) {\n _this._onInitCallbacks[i](_this);\n }\n\n _this._onInitCallbacks = [];\n _this._isInitialized = true;\n\n if (startNewSession) {\n _this._runNewSessionStartCallbacks();\n }\n };\n\n if (this.options.saveEvents) {\n this._unsentEvents = this._loadSavedUnsentEvents(this.options.unsentKey).map(function (event) {\n return {\n event: event\n };\n }).concat(this._unsentEvents);\n this._unsentIdentifys = this._loadSavedUnsentEvents(this.options.unsentIdentifyKey).map(function (event) {\n return {\n event: event\n };\n }).concat(this._unsentIdentifys);\n }\n\n if (opt_config && opt_config.onNewSessionStart) {\n this.onNewSessionStart(this.options.onNewSessionStart);\n }\n\n initFromStorage();\n this.runQueuedFunctions();\n\n if (type(opt_callback) === 'function') {\n opt_callback(this);\n }\n\n var onExitPage = this.options.onExitPage;\n\n if (type(onExitPage) === 'function' && GlobalScope.addEventListener) {\n if (!this.pageHandlersAdded) {\n this.pageHandlersAdded = true;\n\n var handleVisibilityChange = function handleVisibilityChange() {\n var prevTransport = _this.options.transport;\n\n _this.setTransport(Constants.TRANSPORT_BEACON);\n\n onExitPage();\n\n _this.setTransport(prevTransport);\n }; // Monitoring just page exits because that is the most requested feature for now\n // \"If you're specifically trying to detect page unload events, the pagehide event is the best option.\"\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/pagehide_event\n\n\n GlobalScope.addEventListener('pagehide', function () {\n handleVisibilityChange();\n }, false);\n }\n } // Sets an event receiver to receive and forward exposure events from the experiment SDK.\n\n\n this._connector.eventBridge.setEventReceiver(function (event) {\n _this._logEvent(event.eventType, event.eventProperties, event.userProperties);\n }); // Set the user ID and device ID in the core identity store to enable fetching variants.\n\n\n var editor = this._connector.identityStore.editIdentity();\n\n if (this.options.deviceId) {\n editor.setDeviceId(this.options.deviceId);\n }\n\n if (this.options.userId) {\n editor.setUserId(this.options.userId);\n }\n\n editor.commit();\n } catch (err) {\n utils.log.error(err);\n\n if (opt_config && type(opt_config.onError) === 'function') {\n opt_config.onError(err);\n }\n }\n};\n\nAmplitudeClient.prototype._runNewSessionStartCallbacks = function () {\n for (var i = 0; i < this._onNewSessionStartCallbacks.length; i++) {\n this._onNewSessionStartCallbacks[i](this);\n }\n};\n\nAmplitudeClient.prototype.deleteLowerLevelDomainCookies = function () {\n var host = getHost();\n var cookieHost = this.options.domain && this.options.domain[0] === '.' ? this.options.domain.slice(1) : this.options.domain;\n\n if (!cookieHost || !utils.isWebWorkerEnvironment()) {\n return;\n }\n\n if (host !== cookieHost) {\n if (new RegExp(cookieHost + '$').test(host)) {\n var hostParts = host.split('.');\n var cookieHostParts = cookieHost.split('.');\n\n for (var i = hostParts.length; i > cookieHostParts.length; --i) {\n var deleteDomain = hostParts.slice(hostParts.length - i).join('.');\n baseCookie.set(this._cookieName, null, {\n domain: '.' + deleteDomain\n });\n }\n\n baseCookie.set(this._cookieName, null, {});\n }\n }\n};\n\nAmplitudeClient.prototype._getInitialDeviceId = function (configDeviceId, storedDeviceId) {\n if (configDeviceId) {\n return configDeviceId;\n }\n\n if (this.options.deviceIdFromUrlParam) {\n var deviceIdFromUrlParam = this._getDeviceIdFromUrlParam(this._getUrlParams());\n\n if (deviceIdFromUrlParam) {\n return deviceIdFromUrlParam;\n }\n }\n\n if (this.options.deviceId) {\n return this.options.deviceId;\n }\n\n if (storedDeviceId) {\n return storedDeviceId;\n }\n\n return base64Id();\n}; // validate properties for unsent events\n\n\nvar _validateUnsentEventQueue = function _validateUnsentEventQueue(queue) {\n for (var i = 0; i < queue.length; i++) {\n var userProperties = queue[i].event.user_properties;\n var eventProperties = queue[i].event.event_properties;\n var groups = queue[i].event.groups;\n queue[i].event.user_properties = utils.validateProperties(userProperties);\n queue[i].event.event_properties = utils.validateProperties(eventProperties);\n queue[i].event.groups = utils.validateGroups(groups);\n }\n};\n/**\n * @private\n */\n\n\nAmplitudeClient.prototype._trackParamsAndReferrer = function _trackParamsAndReferrer() {\n var utmProperties;\n var referrerProperties;\n var gclidProperties;\n var fbclidProperties;\n\n if (this.options.includeUtm) {\n utmProperties = this._initUtmData();\n }\n\n if (this.options.includeReferrer) {\n referrerProperties = this._saveReferrer(this._getReferrer());\n }\n\n if (this.options.includeGclid) {\n gclidProperties = this._saveGclid(this._getUrlParams());\n }\n\n if (this.options.includeFbclid) {\n fbclidProperties = this._saveFbclid(this._getUrlParams());\n }\n\n if (this.options.logAttributionCapturedEvent) {\n var attributionProperties = _objectSpread({}, utmProperties, referrerProperties, gclidProperties, fbclidProperties);\n\n if (Object.keys(attributionProperties).length > 0) {\n this.logEvent(Constants.ATTRIBUTION_EVENT, attributionProperties);\n }\n }\n};\n/**\n * Parse and validate user specified config values and overwrite existing option value\n * DEFAULT_OPTIONS provides list of all config keys that are modifiable, as well as expected types for values\n * @private\n */\n\n\nvar _parseConfig = function _parseConfig(options, config) {\n if (type(config) !== 'object') {\n return;\n } // Add exception in headers\n\n\n var freeFormObjectKeys = new Set(['headers']); // validates config value is defined, is the correct type, and some additional value sanity checks\n\n var parseValidateAndLoad = function parseValidateAndLoad(key) {\n if (!Object.prototype.hasOwnProperty.call(options, key)) {\n return; // skip bogus config values\n }\n\n var inputValue = config[key];\n var expectedType = type(options[key]);\n\n if (key === 'transport' && !utils.validateTransport(inputValue)) {\n return;\n } else if (key === 'sessionId' && inputValue !== null) {\n options[key] = utils.validateSessionId(inputValue) ? inputValue : null;\n return;\n } else if (!utils.validateInput(inputValue, key + ' option', expectedType)) {\n return;\n }\n\n if (expectedType === 'boolean') {\n options[key] = !!inputValue;\n } else if (expectedType === 'string' && !utils.isEmptyString(inputValue) || expectedType === 'number' && inputValue > 0 || expectedType === 'function') {\n options[key] = inputValue;\n } else if (expectedType === 'object') {\n _parseConfig(options[key], inputValue);\n }\n };\n\n for (var key in config) {\n if (freeFormObjectKeys.has(key)) {\n options[key] = _objectSpread({}, options[key], config[key]);\n } else if (Object.prototype.hasOwnProperty.call(config, key)) {\n parseValidateAndLoad(key);\n }\n }\n};\n/**\n * Run functions queued up by proxy loading snippet\n * @private\n */\n\n\nAmplitudeClient.prototype.runQueuedFunctions = function () {\n var queue = this._q;\n this._q = [];\n\n for (var i = 0; i < queue.length; i++) {\n var fn = this[queue[i][0]];\n\n if (type(fn) === 'function') {\n fn.apply(this, queue[i].slice(1));\n }\n }\n};\n/**\n * Check that the apiKey is set before calling a function. Logs a warning message if not set.\n * @private\n */\n\n\nAmplitudeClient.prototype._apiKeySet = function _apiKeySet(methodName) {\n if (utils.isEmptyString(this.options.apiKey)) {\n utils.log.error('Invalid apiKey. Please set a valid apiKey with init() before calling ' + methodName);\n return false;\n }\n\n return true;\n};\n/**\n * Load saved events from localStorage. JSON deserializes event array. Handles case where string is corrupted.\n * @private\n */\n\n\nAmplitudeClient.prototype._loadSavedUnsentEvents = function _loadSavedUnsentEvents(unsentKey) {\n var savedUnsentEventsString = this._getFromStorage(localStorage$1, unsentKey);\n\n var unsentEvents = this._parseSavedUnsentEventsString(savedUnsentEventsString, unsentKey);\n\n this._setInStorage(localStorage$1, unsentKey, JSON.stringify(unsentEvents));\n\n return unsentEvents;\n};\n/**\n * Load saved events from localStorage. JSON deserializes event array. Handles case where string is corrupted.\n * @private\n */\n\n\nAmplitudeClient.prototype._parseSavedUnsentEventsString = function _parseSavedUnsentEventsString(savedUnsentEventsString, unsentKey) {\n if (utils.isEmptyString(savedUnsentEventsString)) {\n return []; // new app, does not have any saved events\n }\n\n if (type(savedUnsentEventsString) === 'string') {\n try {\n var events = JSON.parse(savedUnsentEventsString);\n\n if (type(events) === 'array') {\n // handle case where JSON dumping of unsent events is corrupted\n return events;\n }\n } catch (e) {}\n /* eslint-disable-line no-empty */\n\n }\n\n utils.log.error('Unable to load ' + unsentKey + ' events. Restart with a new empty queue.');\n return [];\n};\n/**\n * Returns true if a new session was created during initialization, otherwise false.\n * @public\n * @return {boolean} Whether a new session was created during initialization.\n */\n\n\nAmplitudeClient.prototype.isNewSession = function isNewSession() {\n return this._newSession;\n};\n/**\n * Add callbacks to call after init. Useful for users who load Amplitude through a snippet.\n * @public\n */\n\n\nAmplitudeClient.prototype.onInit = function onInit(callback) {\n if (this._isInitialized) {\n callback(this);\n } else {\n this._onInitCallbacks.push(callback);\n }\n};\n/**\n * Add callbacks to call after new session start.\n * @public\n */\n\n\nAmplitudeClient.prototype.onNewSessionStart = function onNewSessionStart(callback) {\n this._onNewSessionStartCallbacks.push(callback);\n};\n/**\n * Returns the id of the current session.\n * @public\n * @return {number} Id of the current session.\n */\n\n\nAmplitudeClient.prototype.getSessionId = function getSessionId() {\n return this._sessionId;\n};\n/**\n * Increments the eventId and returns it.\n * @private\n */\n\n\nAmplitudeClient.prototype.nextEventId = function nextEventId() {\n this._eventId++;\n return this._eventId;\n};\n/**\n * Increments the identifyId and returns it.\n * @private\n */\n\n\nAmplitudeClient.prototype.nextIdentifyId = function nextIdentifyId() {\n this._identifyId++;\n return this._identifyId;\n};\n/**\n * Increments the sequenceNumber and returns it.\n * @private\n */\n\n\nAmplitudeClient.prototype.nextSequenceNumber = function nextSequenceNumber() {\n this._sequenceNumber++;\n return this._sequenceNumber;\n};\n/**\n * Returns the total count of unsent events and identifys\n * @private\n */\n\n\nAmplitudeClient.prototype._unsentCount = function _unsentCount() {\n return this._unsentEvents.length + this._unsentIdentifys.length;\n};\n/**\n * Send events if ready. Returns true if events are sent.\n * @private\n */\n\n\nAmplitudeClient.prototype._sendEventsIfReady = function _sendEventsIfReady() {\n if (this._unsentCount() === 0) {\n return false;\n } // if batching disabled, send any unsent events immediately\n\n\n if (!this.options.batchEvents) {\n this.sendEvents();\n return true;\n } // if batching enabled, check if min threshold met for batch size\n\n\n if (this._unsentCount() >= this.options.eventUploadThreshold) {\n this.sendEvents();\n return true;\n } // if beacon transport is activated, send events immediately\n // because there is no way to retry them later\n\n\n if (this.options.transport === Constants.TRANSPORT_BEACON) {\n this.sendEvents();\n return true;\n } // otherwise schedule an upload after 30s\n\n\n if (!this._updateScheduled) {\n // make sure we only schedule 1 upload\n this._updateScheduled = true;\n setTimeout(function () {\n this._updateScheduled = false;\n this.sendEvents();\n }.bind(this), this.options.eventUploadPeriodMillis);\n }\n\n return false; // an upload was scheduled, no events were uploaded\n};\n/**\n * Clears any stored events and metadata. Storage is then re-created on next event sending.\n * @public\n * @return {boolean} True if metadata was cleared, false if none existed\n */\n\n\nAmplitudeClient.prototype.clearStorage = function clearStorage() {\n return this._metadataStorage.clear();\n};\n/**\n * Helper function to fetch values from storage\n * Storage argument allows for localStoraoge and sessionStoraoge\n * @private\n */\n\n\nAmplitudeClient.prototype._getFromStorage = function _getFromStorage(storage, key) {\n return storage.getItem(key + this._storageSuffix);\n};\n/**\n * Helper function to set values in storage\n * Storage argument allows for localStoraoge and sessionStoraoge\n * @private\n */\n\n\nAmplitudeClient.prototype._setInStorage = function _setInStorage(storage, key, value) {\n storage.setItem(key + this._storageSuffix, value);\n};\n/**\n * Fetches deviceId, userId, event meta data from amplitude cookie\n * @private\n */\n\n\nvar _loadCookieData = function _loadCookieData(scope) {\n if (!scope._useOldCookie) {\n var props = scope._metadataStorage.load();\n\n if (type(props) === 'object') {\n _loadCookieDataProps(scope, props);\n }\n\n return;\n }\n\n var cookieData = scope.cookieStorage.get(scope._oldCookiename);\n\n if (type(cookieData) === 'object') {\n _loadCookieDataProps(scope, cookieData);\n\n return;\n }\n};\n\nvar _upgradeCookieData = function _upgradeCookieData(scope) {\n var cookieData = scope.cookieStorage.get(scope._oldCookiename);\n\n if (type(cookieData) === 'object') {\n _loadCookieDataProps(scope, cookieData);\n\n _saveCookieData(scope);\n }\n};\n\nvar _loadCookieDataProps = function _loadCookieDataProps(scope, cookieData) {\n if (cookieData.deviceId) {\n scope.options.deviceId = cookieData.deviceId;\n }\n\n if (cookieData.userId) {\n scope.options.userId = cookieData.userId;\n }\n\n if (cookieData.optOut !== null && cookieData.optOut !== undefined) {\n // Do not clobber config opt out value if cookieData has optOut as false\n if (cookieData.optOut !== false) {\n scope.options.optOut = cookieData.optOut;\n }\n }\n\n if (cookieData.sessionId) {\n scope._sessionId = parseInt(cookieData.sessionId, 10);\n }\n\n if (cookieData.lastEventTime) {\n scope._lastEventTime = parseInt(cookieData.lastEventTime, 10);\n }\n\n if (cookieData.eventId) {\n scope._eventId = parseInt(cookieData.eventId, 10);\n }\n\n if (cookieData.identifyId) {\n scope._identifyId = parseInt(cookieData.identifyId, 10);\n }\n\n if (cookieData.sequenceNumber) {\n scope._sequenceNumber = parseInt(cookieData.sequenceNumber, 10);\n }\n};\n/**\n * Saves deviceId, userId, event meta data to amplitude cookie\n * @private\n */\n\n\nvar _saveCookieData = function _saveCookieData(scope) {\n var cookieData = {\n deviceId: scope.options.deviceId,\n userId: scope.options.userId,\n optOut: scope.options.optOut,\n sessionId: scope._sessionId,\n lastEventTime: scope._lastEventTime,\n eventId: scope._eventId,\n identifyId: scope._identifyId,\n sequenceNumber: scope._sequenceNumber\n };\n\n if (scope._useOldCookie) {\n scope.cookieStorage.set(scope.options.cookieName + scope._storageSuffix, cookieData);\n } else {\n scope._metadataStorage.save(cookieData);\n }\n};\n/**\n * Parse the utm properties out of cookies and query for adding to user properties.\n * @private\n */\n\n\nAmplitudeClient.prototype._initUtmData = function _initUtmData(queryParams, cookieParams) {\n queryParams = queryParams || this._getUrlParams();\n cookieParams = cookieParams || this.cookieStorage.get('__utmz');\n var utmProperties = getUtmData(cookieParams, queryParams);\n\n _sendParamsReferrerUserProperties(this, utmProperties);\n\n return utmProperties;\n};\n/**\n * Unset the utm params from the Amplitude instance and update the identify.\n * @private\n */\n\n\nAmplitudeClient.prototype._unsetUTMParams = function _unsetUTMParams() {\n var identify = new Identify();\n identify.unset(Constants.REFERRER);\n identify.unset(Constants.UTM_SOURCE);\n identify.unset(Constants.UTM_MEDIUM);\n identify.unset(Constants.UTM_CAMPAIGN);\n identify.unset(Constants.UTM_TERM);\n identify.unset(Constants.UTM_CONTENT);\n this.identify(identify);\n};\n/**\n * The calling function should determine when it is appropriate to send these user properties. This function\n * will no longer contain any session storage checking logic.\n * @private\n */\n\n\nvar _sendParamsReferrerUserProperties = function _sendParamsReferrerUserProperties(scope, userProperties) {\n if (type(userProperties) !== 'object' || Object.keys(userProperties).length === 0) {\n return;\n } // setOnce the initial user properties\n\n\n var identify = new Identify();\n\n for (var key in userProperties) {\n if (Object.prototype.hasOwnProperty.call(userProperties, key)) {\n identify.setOnce('initial_' + key, userProperties[key]);\n identify.set(key, userProperties[key]);\n }\n }\n\n scope.identify(identify);\n};\n/**\n * @private\n */\n\n\nAmplitudeClient.prototype._getReferrer = function _getReferrer() {\n var urlRefer = this._getReferrerFromUrlParam(this._getUrlParams());\n\n if (urlRefer) return urlRefer;else return typeof document !== 'undefined' ? document.referrer : '';\n};\n/**\n * @private\n */\n\n\nAmplitudeClient.prototype._getUrlParams = function _getUrlParams() {\n return GlobalScope.location.search;\n};\n/**\n * Try to fetch Google Gclid from url params.\n * @private\n */\n\n\nAmplitudeClient.prototype._saveGclid = function _saveGclid(urlParams) {\n var gclid = utils.getQueryParam('gclid', urlParams);\n\n if (utils.isEmptyString(gclid)) {\n return;\n }\n\n var gclidProperties = {\n gclid: gclid\n };\n\n _sendParamsReferrerUserProperties(this, gclidProperties);\n\n return gclidProperties;\n};\n/**\n * Try to fetch Facebook Fbclid from url params.\n * @private\n */\n\n\nAmplitudeClient.prototype._saveFbclid = function _saveFbclid(urlParams) {\n var fbclid = utils.getQueryParam('fbclid', urlParams);\n\n if (utils.isEmptyString(fbclid)) {\n return;\n }\n\n var fbclidProperties = {\n fbclid: fbclid\n };\n\n _sendParamsReferrerUserProperties(this, fbclidProperties);\n\n return fbclidProperties;\n};\n/**\n * Try to fetch Amplitude device id from url params.\n * @private\n */\n\n\nAmplitudeClient.prototype._getDeviceIdFromUrlParam = function _getDeviceIdFromUrlParam(urlParams) {\n return utils.getQueryParam(Constants.AMP_DEVICE_ID_PARAM, urlParams);\n};\n/**\n * Try to fetch referrer from url params.\n * @private\n */\n\n\nAmplitudeClient.prototype._getReferrerFromUrlParam = function _getReferrerFromUrlParam(urlParams) {\n return utils.getQueryParam(Constants.AMP_REFERRER_PARAM, urlParams);\n};\n/**\n * Parse the domain from referrer info\n * @private\n */\n\n\nAmplitudeClient.prototype._getReferringDomain = function _getReferringDomain(referrer) {\n if (utils.isEmptyString(referrer)) {\n return null;\n }\n\n var parts = referrer.split('/');\n\n if (parts.length >= 3) {\n return parts[2];\n }\n\n return null;\n};\n/**\n * Fetch the referrer information, parse the domain and send.\n * Since user properties are propagated on the server, only send once per session, don't need to send with every event\n * @private\n */\n\n\nAmplitudeClient.prototype._saveReferrer = function _saveReferrer(referrer) {\n if (utils.isEmptyString(referrer)) {\n return;\n }\n\n var referrerInfo = {\n referrer: referrer,\n referring_domain: this._getReferringDomain(referrer)\n };\n\n _sendParamsReferrerUserProperties(this, referrerInfo);\n\n return referrerInfo;\n};\n/**\n * Saves unsent events and identifies to localStorage. JSON stringifies event queues before saving.\n * Note: this is called automatically every time events are logged, unless you explicitly set option saveEvents to false.\n * @private\n */\n\n\nAmplitudeClient.prototype.saveEvents = function saveEvents() {\n try {\n var serializedUnsentEvents = JSON.stringify(this._unsentEvents.map(function (_ref) {\n var event = _ref.event;\n return event;\n }));\n\n this._setInStorage(localStorage$1, this.options.unsentKey, serializedUnsentEvents);\n } catch (e) {}\n /* eslint-disable-line no-empty */\n\n\n try {\n var serializedIdentifys = JSON.stringify(this._unsentIdentifys.map(function (unsentIdentify) {\n return unsentIdentify.event;\n }));\n\n this._setInStorage(localStorage$1, this.options.unsentIdentifyKey, serializedIdentifys);\n } catch (e) {}\n /* eslint-disable-line no-empty */\n\n};\n/**\n * Sets a customer domain for the amplitude cookie. Useful if you want to support cross-subdomain tracking.\n * @public\n * @param {string} domain to set.\n * @example amplitudeClient.setDomain('.amplitude.com');\n */\n\n\nAmplitudeClient.prototype.setDomain = function setDomain(domain) {\n if (this._shouldDeferCall()) {\n return this._q.push(['setDomain'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!utils.validateInput(domain, 'domain', 'string')) {\n return;\n }\n\n try {\n this.cookieStorage.options({\n expirationDays: this.options.cookieExpiration,\n secure: this.options.secureCookie,\n domain: domain,\n sameSite: this.options.sameSiteCookie\n });\n this.options.domain = this.cookieStorage.options().domain;\n\n _loadCookieData(this);\n\n _saveCookieData(this);\n } catch (e) {\n utils.log.error(e);\n }\n};\n/**\n * Sets an identifier for the current user.\n * @public\n * @param {string} userId - identifier to set. Can be null.\n * @param {boolean} startNewSession - (optional) if start a new session or not\n * @example amplitudeClient.setUserId('joe@gmail.com');\n */\n\n\nAmplitudeClient.prototype.setUserId = function setUserId(userId) {\n var startNewSession = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!utils.validateInput(startNewSession, 'startNewSession', 'boolean')) {\n return;\n }\n\n if (this._shouldDeferCall()) {\n return this._q.push(['setUserId'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n try {\n this.options.userId = userId !== undefined && userId !== null && '' + userId || null;\n\n if (startNewSession) {\n if (this.options.unsetParamsReferrerOnNewSession) {\n this._unsetUTMParams();\n }\n\n this._newSession = true;\n this._sessionId = new Date().getTime();\n\n this._runNewSessionStartCallbacks(); // only capture UTM params and referrer if new session\n\n\n if (this.options.saveParamsReferrerOncePerSession) {\n this._trackParamsAndReferrer();\n }\n }\n\n _saveCookieData(this); // Update core identity store to propagate new user info\n // to experiment SDK and trigger a fetch if the ID has changed.\n\n\n if (this._connector) {\n this._connector.identityStore.editIdentity().setUserId(this.options.userId).commit();\n }\n } catch (e) {\n utils.log.error(e);\n }\n};\n/**\n * Add user to a group or groups. You need to specify a groupType and groupName(s).\n *\n * For example you can group people by their organization.\n * In that case, groupType is \"orgId\" and groupName would be the actual ID(s).\n * groupName can be a string or an array of strings to indicate a user in multiple gruups.\n * You can also call setGroup multiple times with different groupTypes to track multiple types of groups (up to 5 per app).\n *\n * Note: this will also set groupType: groupName as a user property.\n * See the [advanced topics article](https://developers.amplitude.com/docs/javascript#user-groups) for more information.\n * @public\n * @param {string} groupType - the group type (ex: orgId)\n * @param {string|list} groupName - the name of the group (ex: 15), or a list of names of the groups\n * @example amplitudeClient.setGroup('orgId', 15); // this adds the current user to orgId 15.\n */\n\n\nAmplitudeClient.prototype.setGroup = function (groupType, groupName) {\n if (this._shouldDeferCall()) {\n return this._q.push(['setGroup'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!this._apiKeySet('setGroup()') || !utils.validateInput(groupType, 'groupType', 'string') || utils.isEmptyString(groupType)) {\n return;\n }\n\n var groups = {};\n groups[groupType] = groupName;\n var identify = new Identify().set(groupType, groupName);\n\n this._logEvent(Constants.IDENTIFY_EVENT, null, null, identify.userPropertiesOperations, groups, null, null, null);\n};\n/**\n * Sets whether to opt current user out of tracking.\n * @public\n * @param {boolean} enable - if true then no events will be logged or sent.\n * @example: amplitude.setOptOut(true);\n */\n\n\nAmplitudeClient.prototype.setOptOut = function setOptOut(enable) {\n if (this._shouldDeferCall()) {\n return this._q.push(['setOptOut'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!utils.validateInput(enable, 'enable', 'boolean')) {\n return;\n }\n\n try {\n this.options.optOut = enable;\n\n _saveCookieData(this);\n } catch (e) {\n utils.log.error(e);\n }\n};\n/**\n * Set a custom Session ID for the current session.\n * Note: This is not recommended unless you know what you are doing because the Session ID of a session is utilized for all session metrics in Amplitude.\n * The Session ID to set for the current session must be in milliseconds since epoch (Unix Timestamp).\n * @public\n * @param {int} sessionId to set.\n * @example amplitudeClient.setSessionId(1622158968000);\n */\n\n\nAmplitudeClient.prototype.setSessionId = function setSessionId(sessionId) {\n if (!utils.validateInput(sessionId, 'sessionId', 'number')) {\n return;\n }\n\n try {\n this._sessionId = sessionId;\n\n _saveCookieData(this);\n } catch (e) {\n utils.log.error(e);\n }\n};\n/**\n * Sets the current Unix timestamp as the new Session ID for the instance.\n * @public\n * @example amplitudeClient.resetSessionId();\n */\n\n\nAmplitudeClient.prototype.resetSessionId = function resetSessionId() {\n this.setSessionId(new Date().getTime());\n};\n/**\n * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n * are doing. This can be used in conjunction with `setUserId(null)` to anonymize users after they log out.\n * With a null userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n * This uses src/uuid.js to regenerate the deviceId.\n * @public\n */\n\n\nAmplitudeClient.prototype.regenerateDeviceId = function regenerateDeviceId() {\n if (this._shouldDeferCall()) {\n return this._q.push(['regenerateDeviceId'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n this.setDeviceId(base64Id());\n};\n/**\n * Sets a custom deviceId for current user. **Values may not have `.` inside them**\n * Note: this is not recommended unless you know what you are doing (like if you have your own system for managing deviceIds).\n * Make sure the deviceId you set is sufficiently unique\n * (we recommend something like a UUID - see src/uuid.js for an example of how to generate) to prevent conflicts with other devices in our system.\n * @public\n * @param {string} deviceId - custom deviceId for current user.\n * @example amplitudeClient.setDeviceId('45f0954f-eb79-4463-ac8a-233a6f45a8f0');\n */\n\n\nAmplitudeClient.prototype.setDeviceId = function setDeviceId(deviceId) {\n if (this._shouldDeferCall()) {\n return this._q.push(['setDeviceId'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!utils.validateDeviceId(deviceId)) {\n return;\n }\n\n try {\n if (!utils.isEmptyString(deviceId)) {\n this.options.deviceId = '' + deviceId;\n\n _saveCookieData(this); // Update core identity store to propagate new user info\n // to experiment SDK and trigger a fetch if the ID has changed.\n\n\n if (this._connector) {\n this._connector.identityStore.editIdentity().setDeviceId(this.options.deviceId).commit();\n }\n }\n } catch (e) {\n utils.log.error(e);\n }\n};\n/**\n * Sets the network transport type for events. Typically used to set to 'beacon'\n * on an end-of-lifecycle event handler such as `onpagehide` or `onvisibilitychange`\n * @public\n * @param {string} transport - transport mechanism to use for events. Must be one of `http` or `beacon`.\n * @example amplitudeClient.setTransport('beacon');\n */\n\n\nAmplitudeClient.prototype.setTransport = function setTransport(transport) {\n if (this._shouldDeferCall()) {\n return this._q.push(['setTransport'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!utils.validateTransport(transport)) {\n return;\n }\n\n this.options.transport = transport;\n};\n/**\n * Sets user properties for the current user.\n * @public\n * @param {object} - object with string keys and values for the user properties to set.\n * @param {boolean} - DEPRECATED opt_replace: in earlier versions of the JS SDK the user properties object was kept in\n * memory and replace = true would replace the object in memory. Now the properties are no longer stored in memory, so replace is deprecated.\n * @example amplitudeClient.setUserProperties({'gender': 'female', 'sign_up_complete': true})\n */\n\n\nAmplitudeClient.prototype.setUserProperties = function setUserProperties(userProperties) {\n if (this._shouldDeferCall()) {\n return this._q.push(['setUserProperties'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!this._apiKeySet('setUserProperties()') || !utils.validateInput(userProperties, 'userProperties', 'object')) {\n return;\n } // sanitize the userProperties dict before converting into identify\n\n\n var sanitized = utils.truncate(utils.validateProperties(userProperties));\n\n if (Object.keys(sanitized).length === 0) {\n return;\n } // convert userProperties into an identify call\n\n\n var identify = new Identify();\n\n for (var property in sanitized) {\n if (Object.prototype.hasOwnProperty.call(sanitized, property)) {\n identify.set(property, sanitized[property]);\n }\n }\n\n this.identify(identify);\n};\n/**\n * Clear all of the user properties for the current user. Note: clearing user properties is irreversible!\n * @public\n * @example amplitudeClient.clearUserProperties();\n */\n\n\nAmplitudeClient.prototype.clearUserProperties = function clearUserProperties() {\n if (this._shouldDeferCall()) {\n return this._q.push(['clearUserProperties'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!this._apiKeySet('clearUserProperties()')) {\n return;\n }\n\n var identify = new Identify();\n identify.clearAll();\n this.identify(identify);\n};\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n * @private\n */\n\n\nvar _convertProxyObjectToRealObject = function _convertProxyObjectToRealObject(instance, proxy) {\n for (var i = 0; i < proxy._q.length; i++) {\n var fn = instance[proxy._q[i][0]];\n\n if (type(fn) === 'function') {\n fn.apply(instance, proxy._q[i].slice(1));\n }\n }\n\n return instance;\n};\n/**\n * Send an identify call containing user property operations to Amplitude servers.\n * See the [Identify](https://amplitude.github.io/Amplitude-JavaScript/Identify/)\n * reference page for more information on the Identify API and user property operations.\n * @param {Identify} identify_obj - the Identify object containing the user property operations to send.\n * @param {Amplitude~eventCallback} opt_callback - (optional) callback function to run when the identify event has been sent.\n * Note: the server response code and response body from the identify event upload are passed to the callback function.\n * @param {Amplitude~eventCallback} opt_error_callback - (optional) a callback function to run after the event logging\n * fails. The failure can be from the request being malformed or from a network failure\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @example\n * var identify = new amplitude.Identify().set('colors', ['rose', 'gold']).add('karma', 1).setOnce('sign_up_date', '2016-03-31');\n * amplitude.identify(identify);\n */\n\n\nAmplitudeClient.prototype.identify = function (identify_obj, opt_callback, opt_error_callback, outOfSession) {\n if (this._shouldDeferCall()) {\n return this._q.push(['identify'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!this._apiKeySet('identify()')) {\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'API key is not set'\n });\n\n return;\n } // if identify input is a proxied object created by the async loading snippet, convert it into an identify object\n\n\n if (type(identify_obj) === 'object' && Object.prototype.hasOwnProperty.call(identify_obj, '_q')) {\n identify_obj = _convertProxyObjectToRealObject(new Identify(), identify_obj);\n }\n\n if (identify_obj instanceof Identify) {\n // only send if there are operations\n if (Object.keys(identify_obj.userPropertiesOperations).length > 0) {\n return this._logEvent(Constants.IDENTIFY_EVENT, null, null, identify_obj.userPropertiesOperations, null, null, null, opt_callback, opt_error_callback, outOfSession);\n } else {\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'No user property operations'\n });\n }\n } else {\n utils.log.error('Invalid identify input type. Expected Identify object but saw ' + type(identify_obj));\n\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'Invalid identify input type'\n });\n }\n};\n\nAmplitudeClient.prototype.groupIdentify = function (group_type, group_name, identify_obj, opt_callback, opt_error_callback, outOfSession) {\n if (this._shouldDeferCall()) {\n return this._q.push(['groupIdentify'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!this._apiKeySet('groupIdentify()')) {\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'API key is not set'\n });\n\n return;\n }\n\n if (!utils.validateInput(group_type, 'group_type', 'string') || utils.isEmptyString(group_type)) {\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'Invalid group type'\n });\n\n return;\n }\n\n if (group_name === null || group_name === undefined) {\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'Invalid group name'\n });\n\n return;\n } // if identify input is a proxied object created by the async loading snippet, convert it into an identify object\n\n\n if (type(identify_obj) === 'object' && Object.prototype.hasOwnProperty.call(identify_obj, '_q')) {\n identify_obj = _convertProxyObjectToRealObject(new Identify(), identify_obj);\n }\n\n if (identify_obj instanceof Identify) {\n // only send if there are operations\n if (Object.keys(identify_obj.userPropertiesOperations).length > 0) {\n return this._logEvent(Constants.GROUP_IDENTIFY_EVENT, null, null, null, _defineProperty({}, group_type, group_name), identify_obj.userPropertiesOperations, null, opt_callback, opt_error_callback, outOfSession);\n } else {\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'No group property operations'\n });\n }\n } else {\n utils.log.error('Invalid identify input type. Expected Identify object but saw ' + type(identify_obj));\n\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'Invalid identify input type'\n });\n }\n};\n/**\n * Set a versionName for your application.\n * @public\n * @param {string} versionName - The version to set for your application.\n * @example amplitudeClient.setVersionName('1.12.3');\n */\n\n\nAmplitudeClient.prototype.setVersionName = function setVersionName(versionName) {\n if (this._shouldDeferCall()) {\n return this._q.push(['setVersionName'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!utils.validateInput(versionName, 'versionName', 'string')) {\n return;\n }\n\n this.options.versionName = versionName;\n};\n/**\n * Private logEvent method. Keeps apiProperties from being publicly exposed.\n * @private\n */\n\n\nAmplitudeClient.prototype._logEvent = function _logEvent(eventType, eventProperties, apiProperties, userProperties, groups, groupProperties, timestamp, callback, errorCallback, outOfSession) {\n _loadCookieData(this); // reload cookie before each log event to sync event meta-data between windows and tabs\n\n\n if (!eventType) {\n _logErrorsWithCallbacks(callback, errorCallback, 0, 'No request sent', {\n reason: 'Missing eventType'\n });\n\n return;\n }\n\n if (this.options.optOut) {\n _logErrorsWithCallbacks(callback, errorCallback, 0, 'No request sent', {\n reason: 'optOut is set to true'\n });\n\n return;\n }\n\n try {\n var eventId;\n\n if (eventType === Constants.IDENTIFY_EVENT || eventType === Constants.GROUP_IDENTIFY_EVENT) {\n eventId = this.nextIdentifyId();\n } else {\n eventId = this.nextEventId();\n }\n\n var sequenceNumber = this.nextSequenceNumber();\n var eventTime = type(timestamp) === 'number' ? timestamp : new Date().getTime();\n\n if (outOfSession) {\n this._sessionId = -1;\n } else if (!this._sessionId || !this._lastEventTime || eventTime - this._lastEventTime > this.options.sessionTimeout) {\n this._sessionId = eventTime;\n\n this._runNewSessionStartCallbacks();\n }\n\n this._lastEventTime = eventTime;\n\n _saveCookieData(this);\n\n var osName = this._ua.browser.name;\n var osVersion = this._ua.browser.major;\n var deviceModel = this._ua.device.model || this._ua.os.name;\n var deviceVendor = this._ua.device.vendor;\n userProperties = userProperties || {};\n\n var trackingOptions = _objectSpread({}, this._apiPropertiesTrackingOptions);\n\n apiProperties = _objectSpread({}, apiProperties || {}, trackingOptions);\n eventProperties = eventProperties || {};\n groups = groups || {};\n groupProperties = groupProperties || {};\n var event = {\n device_id: this.options.deviceId,\n user_id: this.options.userId,\n timestamp: eventTime,\n event_id: eventId,\n session_id: this._sessionId || -1,\n event_type: eventType,\n version_name: this.options.versionName || null,\n platform: _shouldTrackField(this, 'platform') ? this.options.platform : null,\n os_name: _shouldTrackField(this, 'os_name') ? osName || null : null,\n os_version: _shouldTrackField(this, 'os_version') ? osVersion || null : null,\n device_model: _shouldTrackField(this, 'device_model') ? deviceModel || null : null,\n device_manufacturer: _shouldTrackField(this, 'device_manufacturer') ? deviceVendor || null : null,\n language: _shouldTrackField(this, 'language') ? this.options.language : null,\n api_properties: apiProperties,\n event_properties: utils.truncate(utils.validateProperties(eventProperties)),\n user_properties: utils.truncate(utils.validateProperties(userProperties)),\n uuid: uuid(),\n library: this.options.library,\n sequence_number: sequenceNumber,\n // for ordering events and identifys\n groups: utils.truncate(utils.validateGroups(groups)),\n group_properties: utils.truncate(utils.validateProperties(groupProperties)),\n user_agent: this._userAgent,\n partner_id: this.options.partnerId || null\n };\n\n if (_isObservePlanSet(this)) {\n event.plan = {\n branch: this.options.plan.branch || undefined,\n source: this.options.plan.source || undefined,\n version: this.options.plan.version || undefined,\n versionId: this.options.plan.versionId || undefined\n };\n }\n\n if (_isIngestionMetadataSet(this)) {\n event.ingestion_metadata = {\n source_name: this.options.ingestionMetadata.sourceName || undefined,\n source_version: this.options.ingestionMetadata.sourceVersion || undefined\n };\n }\n\n if (eventType === Constants.IDENTIFY_EVENT || eventType === Constants.GROUP_IDENTIFY_EVENT) {\n this._unsentIdentifys.push({\n event: event,\n callback: callback,\n errorCallback: errorCallback\n });\n\n this._limitEventsQueued(this._unsentIdentifys);\n } else {\n this._unsentEvents.push({\n event: event,\n callback: callback,\n errorCallback: errorCallback\n });\n\n this._limitEventsQueued(this._unsentEvents);\n }\n\n if (this.options.saveEvents) {\n this.saveEvents();\n }\n\n this._sendEventsIfReady(); // In the case of an identify event, update the core user store so the experiment SDK can fetch new variants and\n // utilize user properties in real time.\n\n\n if (eventType === Constants.IDENTIFY_EVENT && this._connector) {\n this._connector.identityStore.editIdentity().updateUserProperties(utils.truncate(utils.validateProperties(userProperties))).commit();\n }\n\n return eventId;\n } catch (e) {\n utils.log.error(e);\n }\n};\n\nvar _isObservePlanSet = function _isObservePlanSet(scope) {\n return scope.options.plan && (scope.options.plan.source || scope.options.plan.branch || scope.options.plan.version || scope.options.plan.versionId);\n};\n\nvar _isIngestionMetadataSet = function _isIngestionMetadataSet(scope) {\n return scope.options.ingestionMetadata && (scope.options.ingestionMetadata.sourceName || scope.options.ingestionMetadata.sourceVersion);\n};\n\nvar _shouldTrackField = function _shouldTrackField(scope, field) {\n return !!scope.options.trackingOptions[field];\n};\n\nvar _generateApiPropertiesTrackingConfig = function _generateApiPropertiesTrackingConfig(scope) {\n // to limit size of config payload, only send fields that have been disabled\n var fields = ['city', 'country', 'dma', 'ip_address', 'region'];\n var config = {};\n\n for (var i = 0; i < fields.length; i++) {\n var field = fields[i];\n\n if (!_shouldTrackField(scope, field)) {\n config[field] = false;\n }\n }\n\n return config;\n};\n/**\n * Remove old events from the beginning of the array if too many have accumulated. Default limit is 1000 events.\n * @private\n */\n\n\nAmplitudeClient.prototype._limitEventsQueued = function _limitEventsQueued(queue) {\n if (queue.length > this.options.savedMaxCount) {\n var deletedEvents = queue.splice(0, queue.length - this.options.savedMaxCount);\n deletedEvents.forEach(function (event) {\n _logErrorsWithCallbacks(event.callback, event.errorCallback, 0, 'No request sent', {\n reason: 'Event dropped because options.savedMaxCount exceeded. User may be offline or have a content blocker'\n });\n });\n }\n};\n/**\n * This is the callback for logEvent and identify calls. It gets called after the event/identify is uploaded,\n * and the server response code and response body from the upload request are passed to the callback function.\n * @callback Amplitude~eventCallback\n * @param {number} responseCode - Server response code for the event / identify upload request.\n * @param {string} responseBody - Server response body for the event / identify upload request.\n * @param {object} details - (optional) Additional information associated with sending event.\n */\n\n/**\n * Log an event with eventType and eventProperties\n * @public\n * @param {string} eventType - name of event\n * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @param {Amplitude~eventCallback} opt_error_callback - (optional) a callback function to run after the event logging\n * fails. The failure can be from the request being malformed or from a network failure\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @param {boolean} outOfSession - (optional) if this event is out of session or not\n * @example amplitudeClient.logEvent('Clicked Homepage Button', {'finished_flow': false, 'clicks': 15});\n */\n\n\nAmplitudeClient.prototype.logEvent = function logEvent(eventType, eventProperties, opt_callback, opt_error_callback) {\n var outOfSession = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (this._shouldDeferCall()) {\n return this._q.push(['logEvent'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n return this.logEventWithTimestamp(eventType, eventProperties, null, opt_callback, opt_error_callback, outOfSession);\n};\n/**\n * Log an event with eventType and eventProperties and a custom timestamp\n * @public\n * @param {string} eventType - name of event\n * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n * @param {number} timestamp - (optional) the custom timestamp as milliseconds since epoch.\n * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @param {Amplitude~eventCallback} opt_error_callback - (optional) a callback function to run after the event logging\n * fails. The failure can be from the request being malformed or from a network failure\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @param {boolean} outOfSession - (optional) if out of the sessioin or not\n * @example amplitudeClient.logEventWithTimestamp('Clicked Homepage Button', {'finished_flow': false, 'clicks': 15}, Date.now());\n */\n\n\nAmplitudeClient.prototype.logEventWithTimestamp = function logEvent(eventType, eventProperties, timestamp, opt_callback, opt_error_callback) {\n var outOfSession = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n\n if (this._shouldDeferCall()) {\n return this._q.push(['logEventWithTimestamp'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!this._apiKeySet('logEvent()')) {\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'API key not set'\n });\n\n return -1;\n }\n\n if (!utils.validateInput(eventType, 'eventType', 'string')) {\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'Invalid type for eventType'\n });\n\n return -1;\n }\n\n if (utils.isEmptyString(eventType)) {\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'Missing eventType'\n });\n\n return -1;\n }\n\n if (!utils.validateInput(outOfSession, 'outOfSession', 'boolean')) {\n _logErrorsWithCallbacks(opt_callback, opt_error_callback, 0, 'No request sent', {\n reason: 'Invalid outOfSession value'\n });\n }\n\n return this._logEvent(eventType, eventProperties, null, null, null, null, timestamp, opt_callback, opt_error_callback, outOfSession);\n};\n/**\n * Log an event with eventType, eventProperties, and groups. Use this to set event-level groups.\n * Note: the group(s) set only apply for the specific event type being logged and does not persist on the user\n * (unless you explicitly set it with setGroup).\n *\n * See the [advanced topics article](https://developers.amplitude.com/docs/javascript#user-groups) for more information\n * about groups and Count by Distinct on the Amplitude platform.\n * @public\n * @param {string} eventType - name of event\n * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n * @param {object} groups - (optional) an object with string groupType: groupName values for the event being logged.\n * groupName can be a string or an array of strings.\n * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @param {Amplitude~eventCallback} opt_error_callback - (optional) a callback function to run after the event logging\n * fails. The failure can be from the request being malformed or from a network failure\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @example amplitudeClient.logEventWithGroups('Clicked Button', null, {'orgId': 24});\n */\n\n\nAmplitudeClient.prototype.logEventWithGroups = function (eventType, eventProperties, groups, opt_callback, opt_error_callback) {\n var outOfSession = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n\n if (this._shouldDeferCall()) {\n return this._q.push(['logEventWithGroups'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!this._apiKeySet('logEventWithGroups()')) {\n _logErrorsWithCallbacks(event.callback, event.errorCallback, 0, 'No request sent', {\n reason: 'API key not set'\n });\n\n return -1;\n }\n\n if (!utils.validateInput(eventType, 'eventType', 'string')) {\n _logErrorsWithCallbacks(event.callback, event.errorCallback, 0, 'No request sent', {\n reason: 'Invalid type for eventType'\n });\n\n return -1;\n }\n\n if (!utils.validateInput(outOfSession, 'outOfSession', 'boolean')) {\n _logErrorsWithCallbacks(event.callback, event.errorCallback, 0, 'No request sent', {\n reason: 'Invalid outOfSession value'\n });\n }\n\n return this._logEvent(eventType, eventProperties, null, null, groups, null, null, opt_callback, opt_error_callback, outOfSession);\n};\n/**\n * Test that n is a number or a numeric value.\n * @private\n */\n\n\nvar _isNumber = function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n};\n/**\n * Handles errors that are sent to both callbacks\n * @private\n */\n\n\nvar _logErrorsWithCallbacks = function _logErrorsWithCallbacks(opt_callback, opt_error_callback, status, response, details) {\n if (type(opt_callback) === 'function') {\n opt_callback(status, response, details);\n }\n\n if (type(opt_error_callback) === 'function') {\n opt_error_callback(status, response, details);\n }\n};\n/**\n * Log revenue with Revenue interface. The new revenue interface allows for more revenue fields like\n * revenueType and event properties.\n *\n * See the [Revenue](https://amplitude.github.io/Amplitude-JavaScript/Revenue/)\n * reference page for more information on the Revenue interface and logging revenue.\n * @public\n * @param {Revenue} revenue_obj - the revenue object containing the revenue data being logged.\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n * amplitude.logRevenueV2(revenue);\n */\n\n\nAmplitudeClient.prototype.logRevenueV2 = function logRevenueV2(revenue_obj) {\n if (this._shouldDeferCall()) {\n return this._q.push(['logRevenueV2'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n if (!this._apiKeySet('logRevenueV2()')) {\n return;\n } // if revenue input is a proxied object created by the async loading snippet, convert it into an revenue object\n\n\n if (type(revenue_obj) === 'object' && Object.prototype.hasOwnProperty.call(revenue_obj, '_q')) {\n revenue_obj = _convertProxyObjectToRealObject(new Revenue(), revenue_obj);\n }\n\n if (revenue_obj instanceof Revenue) {\n // only send if revenue is valid\n if (revenue_obj && revenue_obj._isValidRevenue()) {\n return this.logEvent(Constants.REVENUE_EVENT, revenue_obj._toJSONObject());\n }\n } else {\n utils.log.error('Invalid revenue input type. Expected Revenue object but saw ' + type(revenue_obj));\n }\n};\n\n{\n /**\n * Log revenue event with a price, quantity, and product identifier. DEPRECATED - use logRevenueV2\n * @public\n * @deprecated\n * @param {number} price - price of revenue event\n * @param {number} quantity - (optional) quantity of products in revenue event. If no quantity specified default to 1.\n * @param {string} product - (optional) product identifier\n * @example amplitudeClient.logRevenue(3.99, 1, 'product_1234');\n */\n AmplitudeClient.prototype.logRevenue = function logRevenue(price, quantity, product) {\n if (this._shouldDeferCall()) {\n return this._q.push(['logRevenue'].concat(Array.prototype.slice.call(arguments, 0)));\n } // Test that the parameters are of the right type.\n\n\n if (!this._apiKeySet('logRevenue()') || !_isNumber(price) || quantity !== undefined && !_isNumber(quantity)) {\n // utils.log('Price and quantity arguments to logRevenue must be numbers');\n return -1;\n }\n\n return this._logEvent(Constants.REVENUE_EVENT, {}, {\n productId: product,\n special: 'revenue_amount',\n quantity: quantity || 1,\n price: price\n }, null, null, null, null, null);\n };\n}\n/**\n * Calls error callback on unsent events\n * @private\n */\n\n\nAmplitudeClient.prototype._logErrorsOnEvents = function _logErrorsOnEvents(maxEventId, maxIdentifyId, status, response) {\n var queues = ['_unsentEvents', '_unsentIdentifys'];\n\n for (var j = 0; j < queues.length; j++) {\n var queue = queues[j];\n var maxId = queue === '_unsentEvents' ? maxEventId : maxIdentifyId;\n\n for (var i = 0; i < this[queue].length || 0; i++) {\n var unsentEvent = this[queue][i];\n\n if (unsentEvent.event.event_id <= maxId) {\n if (unsentEvent.errorCallback) {\n unsentEvent.errorCallback(status, response);\n }\n }\n }\n }\n};\n/**\n * Remove events in storage with event ids up to and including maxEventId.\n * @private\n */\n\n\nAmplitudeClient.prototype.removeEvents = function removeEvents(maxEventId, maxIdentifyId, status, response) {\n _removeEvents(this, '_unsentEvents', maxEventId, status, response);\n\n _removeEvents(this, '_unsentIdentifys', maxIdentifyId, status, response);\n};\n/**\n * Helper function to remove events up to maxId from a single queue.\n * Does a true filter in case events get out of order or old events are removed.\n * @private\n */\n\n\nvar _removeEvents = function _removeEvents(scope, eventQueue, maxId, status, response) {\n if (maxId < 0) {\n return;\n }\n\n var filteredEvents = [];\n\n for (var i = 0; i < scope[eventQueue].length || 0; i++) {\n var unsentEvent = scope[eventQueue][i];\n\n if (unsentEvent.event.event_id > maxId) {\n filteredEvents.push(unsentEvent);\n } else {\n if (unsentEvent.callback) {\n unsentEvent.callback(status, response);\n }\n }\n }\n\n scope[eventQueue] = filteredEvents;\n};\n/**\n * Send unsent events. Note: this is called automatically after events are logged if option batchEvents is false.\n * If batchEvents is true, then events are only sent when batch criterias are met.\n * @private\n */\n\n\nAmplitudeClient.prototype.sendEvents = function sendEvents() {\n if (!this._apiKeySet('sendEvents()')) {\n this.removeEvents(Infinity, Infinity, 0, 'No request sent', {\n reason: 'API key not set'\n });\n return;\n }\n\n if (this.options.optOut) {\n this.removeEvents(Infinity, Infinity, 0, 'No request sent', {\n reason: 'Opt out is set to true'\n });\n return;\n } // How is it possible to get into this state?\n\n\n if (this._unsentCount() === 0) {\n return;\n } // We only make one request at a time. sendEvents will be invoked again once\n // the last request completes.\n // beacon data is sent synchronously, so don't pause for it\n\n\n if (this.options.transport !== Constants.TRANSPORT_BEACON) {\n if (this._sending) {\n return;\n }\n\n this._sending = true;\n }\n\n var protocol = this.options.forceHttps ? 'https' : 'https:' === GlobalScope.location.protocol ? 'https' : 'http';\n var url = protocol + '://' + this.options.apiEndpoint; // fetch events to send\n\n var numEvents = Math.min(this._unsentCount(), this.options.uploadBatchSize);\n\n var mergedEvents = this._mergeEventsAndIdentifys(numEvents);\n\n var maxEventId = mergedEvents.maxEventId;\n var maxIdentifyId = mergedEvents.maxIdentifyId;\n var events = JSON.stringify(mergedEvents.eventsToSend.map(function (_ref2) {\n var event = _ref2.event;\n return event;\n }));\n var uploadTime = new Date().getTime();\n var data = {\n client: this.options.apiKey,\n e: events,\n v: Constants.API_VERSION,\n upload_time: uploadTime,\n checksum: md5(Constants.API_VERSION + this.options.apiKey + events + uploadTime)\n };\n\n if (this.options.transport === Constants.TRANSPORT_BEACON && typeof navigator !== 'undefined') {\n var success = navigator.sendBeacon(url, new URLSearchParams(data));\n\n if (success) {\n this.removeEvents(maxEventId, maxIdentifyId, 200, 'success');\n\n if (this.options.saveEvents) {\n this.saveEvents();\n }\n } else {\n this._logErrorsOnEvents(maxEventId, maxIdentifyId, 0, '');\n }\n\n return;\n }\n\n var scope = this;\n\n try {\n new Request(url, data, this.options.headers).send(function (status, response) {\n scope._sending = false;\n\n try {\n if (status === 200 && response === 'success') {\n scope.removeEvents(maxEventId, maxIdentifyId, status, response); // Update the event cache after the removal of sent events.\n\n if (scope.options.saveEvents) {\n scope.saveEvents();\n } // Send more events if any queued during previous send.\n\n\n scope._sendEventsIfReady(); // handle payload too large\n\n } else {\n scope._logErrorsOnEvents(maxEventId, maxIdentifyId, status, response);\n\n if (status === 413) {\n // utils.log('request too large');\n // Can't even get this one massive event through. Drop it, even if it is an identify.\n if (scope.options.uploadBatchSize === 1) {\n scope.removeEvents(maxEventId, maxIdentifyId, status, response);\n } // The server complained about the length of the request. Backoff and try again.\n\n\n scope.options.uploadBatchSize = Math.ceil(numEvents / 2);\n scope.sendEvents();\n }\n } // else {\n // all the events are still queued, and will be retried when the next\n // event is sent In the interest of debugging, it would be nice to have\n // something like an event emitter for a better debugging experince\n // here.\n // }\n\n } catch (e) {// utils.log.error('failed upload');\n }\n });\n } catch (e) {\n var status = 0,\n response = 'Request failed to send';\n utils.log.error(response);\n\n scope._logErrorsOnEvents(maxEventId, maxIdentifyId, status, response);\n\n scope.removeEvents(maxEventId, maxIdentifyId, status, response, {\n reason: e.message\n });\n }\n};\n/**\n * Merge unsent events and identifys together in sequential order based on their sequence number, for uploading.\n * Identifys given higher priority than Events. Also earlier sequence given priority\n * @private\n */\n\n\nAmplitudeClient.prototype._mergeEventsAndIdentifys = function _mergeEventsAndIdentifys(numEvents) {\n // coalesce events from both queues\n var eventsToSend = [];\n var eventIndex = 0;\n var maxEventId = -1;\n var identifyIndex = 0;\n var maxIdentifyId = -1;\n\n while (eventsToSend.length < numEvents) {\n var unsentEvent = void 0;\n var noIdentifys = identifyIndex >= this._unsentIdentifys.length;\n var noEvents = eventIndex >= this._unsentEvents.length; // case 0: no events or identifys left\n // note this should not happen, this means we have less events and identifys than expected\n\n if (noEvents && noIdentifys) {\n utils.log.error('Merging Events and Identifys, less events and identifys than expected');\n break;\n } // case 1: no identifys - grab from events\n else if (noIdentifys) {\n unsentEvent = this._unsentEvents[eventIndex++];\n maxEventId = unsentEvent.event.event_id; // case 2: no events - grab from identifys\n } else if (noEvents) {\n unsentEvent = this._unsentIdentifys[identifyIndex++];\n maxIdentifyId = unsentEvent.event.event_id; // case 3: need to compare sequence numbers\n } else {\n // events logged before v2.5.0 won't have a sequence number, put those first\n if (!('sequence_number' in this._unsentEvents[eventIndex].event) || this._unsentEvents[eventIndex].event.sequence_number < this._unsentIdentifys[identifyIndex].event.sequence_number) {\n unsentEvent = this._unsentEvents[eventIndex++];\n maxEventId = unsentEvent.event.event_id;\n } else {\n unsentEvent = this._unsentIdentifys[identifyIndex++];\n maxIdentifyId = unsentEvent.event.event_id;\n }\n }\n\n eventsToSend.push(unsentEvent);\n }\n\n return {\n eventsToSend: eventsToSend,\n maxEventId: maxEventId,\n maxIdentifyId: maxIdentifyId\n };\n};\n\n{\n /**\n * Set global user properties. Note this is deprecated, and we recommend using setUserProperties\n * @public\n * @deprecated\n */\n AmplitudeClient.prototype.setGlobalUserProperties = function setGlobalUserProperties(userProperties) {\n this.setUserProperties(userProperties);\n };\n}\n/**\n * Get the current version of Amplitude's Javascript SDK.\n * @public\n * @returns {number} version number\n * @example var amplitudeVersion = amplitude.__VERSION__;\n */\n\n\nAmplitudeClient.prototype.__VERSION__ = function getVersion() {\n return this.options.library.version;\n};\n/**\n * Sets the library name and version. Default is `amplitude-js` and the version defined in package.json. Used if you're building another library on top of amplitude-js and want a custom data source value\n * @public\n * @param {string} name - Custom library name\n * @param {string} version - Custom library version\n */\n\n\nAmplitudeClient.prototype.setLibrary = function setLibrary(name, version) {\n if (name !== null && typeof name !== 'undefined') {\n this.options.library.name = name;\n }\n\n if (version !== null && typeof version !== 'undefined') {\n this.options.library.version = version;\n }\n};\n/**\n * Determines whether or not to push call to this._q or invoke it\n * @private\n */\n\n\nAmplitudeClient.prototype._shouldDeferCall = function _shouldDeferCall() {\n return this._pendingReadStorage || this._initializationDeferred;\n};\n/**\n * Defers Initialization by putting all functions into storage until users\n * have accepted terms for tracking\n * @private\n */\n\n\nAmplitudeClient.prototype._deferInitialization = function _deferInitialization() {\n this._initializationDeferred = true;\n\n this._q.push(['init'].concat(Array.prototype.slice.call(arguments, 0)));\n};\n/**\n * Enable tracking via logging events and dropping a cookie\n * Intended to be used with the deferInitialization configuration flag\n * This will drop a cookie and reset initialization deferred\n * @public\n */\n\n\nAmplitudeClient.prototype.enableTracking = function enableTracking() {\n // This will call init (which drops the cookie) and will run any pending tasks\n this._initializationDeferred = false;\n\n _saveCookieData(this);\n\n this.runQueuedFunctions();\n};\n/**\n * Find best server url if choose to enable dynamic configuration.\n */\n\n\nAmplitudeClient.prototype._refreshDynamicConfig = function _refreshDynamicConfig() {\n if (this.options.useDynamicConfig) {\n instance$1.refresh(this.options.serverZone, this.options.forceHttps, function () {\n this.options.apiEndpoint = instance$1.ingestionEndpoint;\n }.bind(this));\n }\n};\n/**\n * Returns the deviceId value.\n * @public\n * @return {string} Id of current device.\n */\n\n\nAmplitudeClient.prototype.getDeviceId = function getDeviceId() {\n return this.options.deviceId;\n};\n/**\n * Returns the userId.\n * @public\n * @return {string} Id of current user.\n */\n\n\nAmplitudeClient.prototype.getUserId = function getUserId() {\n return this.options.userId;\n};\n/**\n * Set a custom session expiration time.\n * @public\n * @param {number} timeInMillis - session expireation time in milliseconds.\n */\n\n\nAmplitudeClient.prototype.setMinTimeBetweenSessionsMillis = function setMinTimeBetweenSessionsMillis(timeInMillis) {\n if (!utils.validateInput(timeInMillis, 'timeInMillis', 'number')) {\n return;\n }\n\n if (this._shouldDeferCall()) {\n return this._q.push(['setMinTimeBetweenSessionsMillis'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n try {\n this.options.sessionTimeout = timeInMillis;\n } catch (e) {\n utils.log.error(e);\n }\n};\n/**\n * Sets minimum number of events to batch together per request if batchEvents is true.\n * @public\n * @param {number} eventUploadThreshold - The number of the event upload threshold. Default value is 30.\n * @example amplitudeClient.setEventUploadThreshold(10);\n */\n\n\nAmplitudeClient.prototype.setEventUploadThreshold = function setEventUploadThreshold(eventUploadThreshold) {\n if (!utils.validateInput(eventUploadThreshold, 'eventUploadThreshold', 'number')) {\n return;\n }\n\n if (this._shouldDeferCall()) {\n return this._q.push(['setEventUploadThreshold'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n try {\n this.options.eventUploadThreshold = eventUploadThreshold;\n } catch (e) {\n utils.log.error(e);\n }\n};\n/**\n * Dynamically adjust server URL\n * @public\n * @param {bool} useDynamicConfig - if enable dynamic config or not.\n * @example amplitudeClient.setUseDynamicConfig(true);\n */\n\n\nAmplitudeClient.prototype.setUseDynamicConfig = function setUseDynamicConfig(useDynamicConfig) {\n if (!utils.validateInput(useDynamicConfig, 'useDynamicConfig', 'boolean')) {\n return;\n }\n\n if (this._shouldDeferCall()) {\n return this._q.push(['setUseDynamicConfig'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n try {\n this.options.useDynamicConfig = useDynamicConfig;\n\n this._refreshDynamicConfig();\n } catch (e) {\n utils.log.error(e);\n }\n};\n/**\n * Sets the server zone, used for server api endpoint and dynamic configuration.\n * @public\n * @param {string} serverZone - the server zone value. AmplitudeServerZone.US or AmplitudeServerZone.EU.\n * @param {bool} serverZoneBasedApi - (optional) update api endpoint with serverZone change or not. For data residency, recommend to enable it unless using own proxy server.\n * @example amplitudeClient.setServerZone(AmplitudeServerZone.EU, true);\n */\n\n\nAmplitudeClient.prototype.setServerZone = function setServerZone(serverZone) {\n var serverZoneBasedApi = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (serverZone !== AmplitudeServerZone.EU && serverZone !== AmplitudeServerZone.US || !utils.validateInput(serverZoneBasedApi, 'serverZoneBasedApi', 'boolean')) {\n return;\n }\n\n if (this._shouldDeferCall()) {\n return this._q.push(['setServerZone'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n try {\n this.options.serverZone = serverZone;\n this.options.serverZoneBasedApi = serverZoneBasedApi;\n\n if (serverZoneBasedApi) {\n this.options.apiEndpoint = getEventLogApi(this.options.serverZone);\n }\n } catch (e) {\n utils.log.error(e);\n }\n};\n/**\n * Sets the server URL for the request.\n * @public\n * @param {string} serverUrl - The value of the server URL.\n * @example amplitudeClient.setServerUrl('api.amplitude.com');\n */\n\n\nAmplitudeClient.prototype.setServerUrl = function setServerUrl(serverUrl) {\n if (!utils.validateInput(serverUrl, 'serverUrl', 'string')) {\n return;\n }\n\n if (this._shouldDeferCall()) {\n return this._q.push(['setServerUrl'].concat(Array.prototype.slice.call(arguments, 0)));\n }\n\n try {\n this.options.apiEndpoint = serverUrl;\n } catch (e) {\n utils.log.error(e);\n }\n};\n\n/**\n * Deprecated legacy API of the Amplitude JS SDK - instance manager.\n *\n * Wraps around the current [AmplitudeClient](https://amplitude.github.io/Amplitude-JavaScript/) which provides more features\n * Function calls directly on amplitude have been deprecated. Please call methods on the default shared instance: amplitude.getInstance() instead.\n *\n * See the [3.0.0 changelog](https://github.com/amplitude/Amplitude-JavaScript/blob/ed405afb5f06d5cf5b72539a5d09179abcf7e1fe/README.md#300-update-and-logging-events-to-multiple-amplitude-apps) for more information about this change.\n * @constructor Amplitude\n * @public\n * @deprecated\n * @example var amplitude = new Amplitude();\n */\n\nvar Amplitude = function Amplitude() {\n this.options = _objectSpread({}, DEFAULT_OPTIONS);\n this._q = [];\n this._instances = {}; // mapping of instance names to instances\n};\n\nAmplitude.prototype.Identify = Identify;\nAmplitude.prototype.Revenue = Revenue;\n\nAmplitude.prototype.getInstance = function getInstance(instance) {\n instance = utils.isEmptyString(instance) ? Constants.DEFAULT_INSTANCE : instance.toLowerCase();\n var client = this._instances[instance];\n\n if (client === undefined) {\n client = new AmplitudeClient(instance);\n this._instances[instance] = client;\n }\n\n return client;\n};\n\n{\n /**\n * Initializes the Amplitude Javascript SDK with your apiKey and any optional configurations.\n * This is required before any other methods can be called.\n * @public\n * @param {string} apiKey - The API key for your app.\n * @param {string} opt_userId - (optional) An identifier for this user.\n * @param {object} opt_config - (optional) Configuration options.\n * See [options.js](https://github.com/amplitude/Amplitude-JavaScript/blob/master/src/options.js#L14) for list of options and default values.\n * @param {function} opt_callback - (optional) Provide a callback function to run after initialization is complete.\n * @deprecated Please use amplitude.getInstance().init(apiKey, opt_userId, opt_config, opt_callback);\n * @example amplitude.init('API_KEY', 'USER_ID', {includeReferrer: true, includeUtm: true}, function() { alert('init complete'); });\n */\n Amplitude.prototype.init = function init(apiKey, opt_userId, opt_config, opt_callback) {\n this.getInstance().init(apiKey, opt_userId, opt_config, function (instance) {\n // make options such as deviceId available for callback functions\n this.options = instance.options;\n\n if (type(opt_callback) === 'function') {\n opt_callback(instance);\n }\n }.bind(this));\n };\n /**\n * Returns true if a new session was created during initialization, otherwise false.\n * @public\n * @return {boolean} Whether a new session was created during initialization.\n * @deprecated Please use amplitude.getInstance().isNewSession();\n */\n\n\n Amplitude.prototype.isNewSession = function isNewSession() {\n return this.getInstance().isNewSession();\n };\n /**\n * Returns the id of the current session.\n * @public\n * @return {number} Id of the current session.\n * @deprecated Please use amplitude.getInstance().getSessionId();\n */\n\n\n Amplitude.prototype.getSessionId = function getSessionId() {\n return this.getInstance().getSessionId();\n };\n /**\n * Increments the eventId and returns it.\n * @private\n */\n\n\n Amplitude.prototype.nextEventId = function nextEventId() {\n return this.getInstance().nextEventId();\n };\n /**\n * Increments the identifyId and returns it.\n * @private\n */\n\n\n Amplitude.prototype.nextIdentifyId = function nextIdentifyId() {\n return this.getInstance().nextIdentifyId();\n };\n /**\n * Increments the sequenceNumber and returns it.\n * @private\n */\n\n\n Amplitude.prototype.nextSequenceNumber = function nextSequenceNumber() {\n return this.getInstance().nextSequenceNumber();\n };\n /**\n * Saves unsent events and identifies to localStorage. JSON stringifies event queues before saving.\n * Note: this is called automatically every time events are logged, unless you explicitly set option saveEvents to false.\n * @private\n */\n\n\n Amplitude.prototype.saveEvents = function saveEvents() {\n this.getInstance().saveEvents();\n };\n /**\n * Sets a customer domain for the amplitude cookie. Useful if you want to support cross-subdomain tracking.\n * @public\n * @param {string} domain to set.\n * @deprecated Please use amplitude.getInstance().setDomain(domain);\n * @example amplitude.setDomain('.amplitude.com');\n */\n\n\n Amplitude.prototype.setDomain = function setDomain(domain) {\n this.getInstance().setDomain(domain);\n };\n /**\n * Sets an identifier for the current user.\n * @public\n * @param {string} userId - identifier to set. Can be null.\n * @deprecated Please use amplitude.getInstance().setUserId(userId);\n * @example amplitude.setUserId('joe@gmail.com');\n */\n\n\n Amplitude.prototype.setUserId = function setUserId(userId) {\n this.getInstance().setUserId(userId);\n };\n /**\n * Add user to a group or groups. You need to specify a groupType and groupName(s).\n * For example you can group people by their organization.\n * In that case groupType is \"orgId\" and groupName would be the actual ID(s).\n * groupName can be a string or an array of strings to indicate a user in multiple gruups.\n * You can also call setGroup multiple times with different groupTypes to track multiple types of groups (up to 5 per app).\n * Note: this will also set groupType: groupName as a user property.\n * See the [advanced topics article](https://developers.amplitude.com/docs/javascript#user-groups) for more information.\n * @public\n * @param {string} groupType - the group type (ex: orgId)\n * @param {string|list} groupName - the name of the group (ex: 15), or a list of names of the groups\n * @deprecated Please use amplitude.getInstance().setGroup(groupType, groupName);\n * @example amplitude.setGroup('orgId', 15); // this adds the current user to orgId 15.\n */\n\n\n Amplitude.prototype.setGroup = function (groupType, groupName) {\n this.getInstance().setGroup(groupType, groupName);\n };\n /**\n * Sets whether to opt current user out of tracking.\n * @public\n * @param {boolean} enable - if true then no events will be logged or sent.\n * @deprecated Please use amplitude.getInstance().setOptOut(enable);\n * @example: amplitude.setOptOut(true);\n */\n\n\n Amplitude.prototype.setOptOut = function setOptOut(enable) {\n this.getInstance().setOptOut(enable);\n };\n /**\n * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n * are doing. This can be used in conjunction with `setUserId(null)` to anonymize users after they log out.\n * With a null userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n * This uses src/uuid.js to regenerate the deviceId.\n * @public\n * @deprecated Please use amplitude.getInstance().regenerateDeviceId();\n */\n\n\n Amplitude.prototype.regenerateDeviceId = function regenerateDeviceId() {\n this.getInstance().regenerateDeviceId();\n };\n /**\n * Sets a custom deviceId for current user. Note: this is not recommended unless you know what you are doing\n * (like if you have your own system for managing deviceIds).\n *\n * Make sure the deviceId you set is sufficiently unique\n * (we recommend something like a UUID - see src/uuid.js for an example of how to generate) to prevent conflicts with other devices in our system.\n * @public\n * @param {string} deviceId - custom deviceId for current user.\n * @deprecated Please use amplitude.getInstance().setDeviceId(deviceId);\n * @example amplitude.setDeviceId('45f0954f-eb79-4463-ac8a-233a6f45a8f0');\n */\n\n\n Amplitude.prototype.setDeviceId = function setDeviceId(deviceId) {\n this.getInstance().setDeviceId(deviceId);\n };\n /**\n * Sets user properties for the current user.\n * @public\n * @param {object} userProperties - object with string keys and values for the user properties to set.\n * @param {boolean} opt_replace - Deprecated. In earlier versions of the JS SDK the user properties object was kept in\n * memory and replace = true would replace the object in memory. Now the properties are no longer stored in memory, so replace is deprecated.\n * @deprecated Please use amplitude.getInstance().setUserProperties(userProperties);\n * @example amplitude.setUserProperties({'gender': 'female', 'sign_up_complete': true})\n */\n\n\n Amplitude.prototype.setUserProperties = function setUserProperties(userProperties) {\n this.getInstance().setUserProperties(userProperties);\n };\n /**\n * Clear all of the user properties for the current user. Note: clearing user properties is irreversible!\n * @public\n * @deprecated Please use amplitude.getInstance().clearUserProperties();\n * @example amplitude.clearUserProperties();\n */\n\n\n Amplitude.prototype.clearUserProperties = function clearUserProperties() {\n this.getInstance().clearUserProperties();\n };\n /**\n * Send an identify call containing user property operations to Amplitude servers.\n * See the [Identify](https://amplitude.github.io/Amplitude-JavaScript/Identify/)\n * reference page for more information on the Identify API and user property operations.\n * @param {Identify} identify_obj - the Identify object containing the user property operations to send.\n * @param {Amplitude~eventCallback} opt_callback - (optional) callback function to run when the identify event has been sent.\n * Note: the server response code and response body from the identify event upload are passed to the callback function.\n * @deprecated Please use amplitude.getInstance().identify(identify);\n * @example\n * var identify = new amplitude.Identify().set('colors', ['rose', 'gold']).add('karma', 1).setOnce('sign_up_date', '2016-03-31');\n * amplitude.identify(identify);\n */\n\n\n Amplitude.prototype.identify = function (identify_obj, opt_callback) {\n this.getInstance().identify(identify_obj, opt_callback);\n };\n /**\n * Set a versionName for your application.\n * @public\n * @param {string} versionName - The version to set for your application.\n * @deprecated Please use amplitude.getInstance().setVersionName(versionName);\n * @example amplitude.setVersionName('1.12.3');\n */\n\n\n Amplitude.prototype.setVersionName = function setVersionName(versionName) {\n this.getInstance().setVersionName(versionName);\n };\n /**\n * This is the callback for logEvent and identify calls. It gets called after the event/identify is uploaded,\n * and the server response code and response body from the upload request are passed to the callback function.\n * @callback Amplitude~eventCallback\n * @param {number} responseCode - Server response code for the event / identify upload request.\n * @param {string} responseBody - Server response body for the event / identify upload request.\n */\n\n /**\n * Log an event with eventType and eventProperties\n * @public\n * @param {string} eventType - name of event\n * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @deprecated Please use amplitude.getInstance().logEvent(eventType, eventProperties, opt_callback);\n * @example amplitude.logEvent('Clicked Homepage Button', {'finished_flow': false, 'clicks': 15});\n */\n\n\n Amplitude.prototype.logEvent = function logEvent(eventType, eventProperties, opt_callback) {\n return this.getInstance().logEvent(eventType, eventProperties, opt_callback);\n };\n /**\n * Log an event with eventType, eventProperties, and groups. Use this to set event-level groups.\n *\n * Note: the group(s) set only apply for the specific event type being logged and does not persist on the user\n * (unless you explicitly set it with setGroup).\n *\n * See the [advanced topics article](https://developers.amplitude.com/docs/javascript#user-groups) for more information\n * about groups and Count by Distinct on the Amplitude platform.\n * @public\n * @param {string} eventType - name of event\n * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n * @param {object} groups - (optional) an object with string groupType: groupName values for the event being logged.\n * groupName can be a string or an array of strings.\n * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n * Note: the server response code and response body from the event upload are passed to the callback function.\n * @deprecated Please use amplitude.getInstance().logEventWithGroups(eventType, eventProperties, groups, opt_callback);\n * @example amplitude.logEventWithGroups('Clicked Button', null, {'orgId': 24});\n */\n\n\n Amplitude.prototype.logEventWithGroups = function (eventType, eventProperties, groups, opt_callback) {\n return this.getInstance().logEventWithGroups(eventType, eventProperties, groups, opt_callback);\n };\n /**\n * Log revenue with Revenue interface. The new revenue interface allows for more revenue fields like\n * revenueType and event properties.\n *\n * See the [Revenue](https://amplitude.github.io/Amplitude-JavaScript/Revenue/)\n * reference page for more information on the Revenue interface and logging revenue.\n * @public\n * @param {Revenue} revenue_obj - the revenue object containing the revenue data being logged.\n * @deprecated Please use amplitude.getInstance().logRevenueV2(revenue_obj);\n * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n * amplitude.logRevenueV2(revenue);\n */\n\n\n Amplitude.prototype.logRevenueV2 = function logRevenueV2(revenue_obj) {\n return this.getInstance().logRevenueV2(revenue_obj);\n };\n /**\n * Log revenue event with a price, quantity, and product identifier.\n * @public\n * @param {number} price - price of revenue event\n * @param {number} quantity - (optional) quantity of products in revenue event. If no quantity specified default to 1.\n * @param {string} product - (optional) product identifier\n * @deprecated Please use amplitude.getInstance().logRevenueV2(revenue_obj);\n * @example amplitude.logRevenue(3.99, 1, 'product_1234');\n */\n\n\n Amplitude.prototype.logRevenue = function logRevenue(price, quantity, product) {\n return this.getInstance().logRevenue(price, quantity, product);\n };\n /**\n * Remove events in storage with event ids up to and including maxEventId.\n * @private\n */\n\n\n Amplitude.prototype.removeEvents = function removeEvents(maxEventId, maxIdentifyId) {\n this.getInstance().removeEvents(maxEventId, maxIdentifyId);\n };\n /**\n * Send unsent events. Note: this is called automatically after events are logged if option batchEvents is false.\n * If batchEvents is true, then events are only sent when batch criterias are met.\n * @private\n * @param {Amplitude~eventCallback} callback - (optional) callback to run after events are sent.\n * Note the server response code and response body are passed to the callback as input arguments.\n */\n\n\n Amplitude.prototype.sendEvents = function sendEvents(callback) {\n this.getInstance().sendEvents(callback);\n };\n /**\n * Set global user properties.\n * @public\n * @deprecated Please use amplitudeClient.setUserProperties\n */\n\n\n Amplitude.prototype.setGlobalUserProperties = function setGlobalUserProperties(userProperties) {\n this.getInstance().setUserProperties(userProperties);\n };\n}\n/**\n * Get the current version of Amplitude's Javascript SDK.\n * @public\n * @returns {number} version number\n * @example var amplitudeVersion = amplitude.__VERSION__;\n */\n\n\nAmplitude.prototype.__VERSION__ = version;\n\n// Entry point\nvar old = typeof GlobalScope !== 'undefined' && GlobalScope.amplitude || {};\nvar newInstance = new Amplitude();\nnewInstance._q = old._q || [];\n/**\n * Instantiates Amplitude object and runs all queued function logged by stubbed methods provided by snippets\n * Event queue allows async loading of SDK to not blocking client's app\n */\n\nfor (var instance in old._iq) {\n // migrate each instance's queue\n if (Object.prototype.hasOwnProperty.call(old._iq, instance)) {\n newInstance.getInstance(instance)._q = old._iq[instance]._q || [];\n }\n} // If SDK is enabled as snippet, process the events queued by stubbed function\n\nexport { newInstance as default };\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/* global define */\n\n/* eslint-disable strict */\n\n;(function ($) {\n 'use strict'\n\n /**\n * Add integers, wrapping at 2^32.\n * This uses 16-bit operations internally to work around bugs in interpreters.\n *\n * @param {number} x First integer\n * @param {number} y Second integer\n * @returns {number} Sum\n */\n function safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff)\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16)\n return (msw << 16) | (lsw & 0xffff)\n }\n\n /**\n * Bitwise rotate a 32-bit number to the left.\n *\n * @param {number} num 32-bit number\n * @param {number} cnt Rotation count\n * @returns {number} Rotated number\n */\n function bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt))\n }\n\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} q q\n * @param {number} a a\n * @param {number} b b\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n function md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n function md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t)\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n function md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t)\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n function md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t)\n }\n /**\n * Basic operation the algorithm uses.\n *\n * @param {number} a a\n * @param {number} b b\n * @param {number} c c\n * @param {number} d d\n * @param {number} x x\n * @param {number} s s\n * @param {number} t t\n * @returns {number} Result\n */\n function md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t)\n }\n\n /**\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n *\n * @param {Array} x Array of little-endian words\n * @param {number} len Bit length\n * @returns {Array<number>} MD5 Array\n */\n function binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32\n x[(((len + 64) >>> 9) << 4) + 14] = len\n\n var i\n var olda\n var oldb\n var oldc\n var oldd\n var a = 1732584193\n var b = -271733879\n var c = -1732584194\n var d = 271733878\n\n for (i = 0; i < x.length; i += 16) {\n olda = a\n oldb = b\n oldc = c\n oldd = d\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936)\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586)\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819)\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330)\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897)\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426)\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341)\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983)\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416)\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417)\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063)\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162)\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682)\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101)\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290)\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329)\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510)\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632)\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713)\n b = md5gg(b, c, d, a, x[i], 20, -373897302)\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691)\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083)\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335)\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848)\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438)\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690)\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961)\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501)\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467)\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784)\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473)\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734)\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558)\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463)\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562)\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556)\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060)\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353)\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632)\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640)\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174)\n d = md5hh(d, a, b, c, x[i], 11, -358537222)\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979)\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189)\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487)\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835)\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520)\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651)\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844)\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415)\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905)\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055)\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571)\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606)\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523)\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799)\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359)\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744)\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380)\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649)\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070)\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379)\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259)\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551)\n\n a = safeAdd(a, olda)\n b = safeAdd(b, oldb)\n c = safeAdd(c, oldc)\n d = safeAdd(d, oldd)\n }\n return [a, b, c, d]\n }\n\n /**\n * Convert an array of little-endian words to a string\n *\n * @param {Array<number>} input MD5 Array\n * @returns {string} MD5 string\n */\n function binl2rstr(input) {\n var i\n var output = ''\n var length32 = input.length * 32\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> i % 32) & 0xff)\n }\n return output\n }\n\n /**\n * Convert a raw string to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n *\n * @param {string} input Raw input string\n * @returns {Array<number>} Array of little-endian words\n */\n function rstr2binl(input) {\n var i\n var output = []\n output[(input.length >> 2) - 1] = undefined\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0\n }\n var length8 = input.length * 8\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32\n }\n return output\n }\n\n /**\n * Calculate the MD5 of a raw string\n *\n * @param {string} s Input string\n * @returns {string} Raw MD5 string\n */\n function rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8))\n }\n\n /**\n * Calculates the HMAC-MD5 of a key and some data (raw strings)\n *\n * @param {string} key HMAC key\n * @param {string} data Raw input string\n * @returns {string} Raw MD5 string\n */\n function rstrHMACMD5(key, data) {\n var i\n var bkey = rstr2binl(key)\n var ipad = []\n var opad = []\n var hash\n ipad[15] = opad[15] = undefined\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8)\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636\n opad[i] = bkey[i] ^ 0x5c5c5c5c\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8)\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128))\n }\n\n /**\n * Convert a raw string to a hex string\n *\n * @param {string} input Raw input string\n * @returns {string} Hex encoded string\n */\n function rstr2hex(input) {\n var hexTab = '0123456789abcdef'\n var output = ''\n var x\n var i\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i)\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f)\n }\n return output\n }\n\n /**\n * Encode a string as UTF-8\n *\n * @param {string} input Input string\n * @returns {string} UTF8 string\n */\n function str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input))\n }\n\n /**\n * Encodes input string as raw MD5 string\n *\n * @param {string} s Input string\n * @returns {string} Raw MD5 string\n */\n function rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s))\n }\n /**\n * Encodes input string as Hex encoded string\n *\n * @param {string} s Input string\n * @returns {string} Hex encoded string\n */\n function hexMD5(s) {\n return rstr2hex(rawMD5(s))\n }\n /**\n * Calculates the raw HMAC-MD5 for the given key and data\n *\n * @param {string} k HMAC key\n * @param {string} d Input string\n * @returns {string} Raw MD5 string\n */\n function rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))\n }\n /**\n * Calculates the Hex encoded HMAC-MD5 for the given key and data\n *\n * @param {string} k HMAC key\n * @param {string} d Input string\n * @returns {string} Raw MD5 string\n */\n function hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d))\n }\n\n /**\n * Calculates MD5 value for a given string.\n * If a key is provided, calculates the HMAC-MD5 value.\n * Returns a Hex encoded string unless the raw argument is given.\n *\n * @param {string} string Input string\n * @param {string} [key] HMAC key\n * @param {boolean} [raw] Raw output switch\n * @returns {string} MD5 output\n */\n function md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string)\n }\n return rawMD5(string)\n }\n if (!raw) {\n return hexHMACMD5(key, string)\n }\n return rawHMACMD5(key, string)\n }\n\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return md5\n })\n } else if (typeof module === 'object' && module.exports) {\n module.exports = md5\n } else {\n $.md5 = md5\n }\n})(this)\n","var isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw $TypeError(tryToString(argument) + ' is not a function');\n};\n","var isCallable = require('../internals/is-callable');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","var isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw $TypeError('Incorrect invocation');\n};\n","var isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw $TypeError($String(argument) + ' is not an object');\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar isArray = require('../internals/is-array');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Safari < 13 does not throw an error in this case\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n // makes no sense without proper strict mode support\n if (this !== undefined) return true;\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).length = 1;\n } catch (error) {\n return error instanceof TypeError;\n }\n}();\n\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n throw $TypeError('Cannot set read only .length');\n } return O.length = length;\n} : function (O, length) {\n return O.length = length;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n if (!options) options = {};\n var simple = options.enumerable;\n var name = options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key] = value;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple = true;\n } catch (error) { /* empty */ }\n if (simple) O[key] = value;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var documentAll = typeof document == 'object' && document.all;\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nvar IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;\n\nmodule.exports = {\n all: documentAll,\n IS_HTMLDDA: IS_HTMLDDA\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n return it;\n};\n","module.exports = {\n IndexSizeError: { s: 'INDEX_SIZE_ERR', c: 1, m: 1 },\n DOMStringSizeError: { s: 'DOMSTRING_SIZE_ERR', c: 2, m: 0 },\n HierarchyRequestError: { s: 'HIERARCHY_REQUEST_ERR', c: 3, m: 1 },\n WrongDocumentError: { s: 'WRONG_DOCUMENT_ERR', c: 4, m: 1 },\n InvalidCharacterError: { s: 'INVALID_CHARACTER_ERR', c: 5, m: 1 },\n NoDataAllowedError: { s: 'NO_DATA_ALLOWED_ERR', c: 6, m: 0 },\n NoModificationAllowedError: { s: 'NO_MODIFICATION_ALLOWED_ERR', c: 7, m: 1 },\n NotFoundError: { s: 'NOT_FOUND_ERR', c: 8, m: 1 },\n NotSupportedError: { s: 'NOT_SUPPORTED_ERR', c: 9, m: 1 },\n InUseAttributeError: { s: 'INUSE_ATTRIBUTE_ERR', c: 10, m: 1 },\n InvalidStateError: { s: 'INVALID_STATE_ERR', c: 11, m: 1 },\n SyntaxError: { s: 'SYNTAX_ERR', c: 12, m: 1 },\n InvalidModificationError: { s: 'INVALID_MODIFICATION_ERR', c: 13, m: 1 },\n NamespaceError: { s: 'NAMESPACE_ERR', c: 14, m: 1 },\n InvalidAccessError: { s: 'INVALID_ACCESS_ERR', c: 15, m: 1 },\n ValidationError: { s: 'VALIDATION_ERR', c: 16, m: 0 },\n TypeMismatchError: { s: 'TYPE_MISMATCH_ERR', c: 17, m: 1 },\n SecurityError: { s: 'SECURITY_ERR', c: 18, m: 1 },\n NetworkError: { s: 'NETWORK_ERR', c: 19, m: 1 },\n AbortError: { s: 'ABORT_ERR', c: 20, m: 1 },\n URLMismatchError: { s: 'URL_MISMATCH_ERR', c: 21, m: 1 },\n QuotaExceededError: { s: 'QUOTA_EXCEEDED_ERR', c: 22, m: 1 },\n TimeoutError: { s: 'TIMEOUT_ERR', c: 23, m: 1 },\n InvalidNodeTypeError: { s: 'INVALID_NODE_TYPE_ERR', c: 24, m: 1 },\n DataCloneError: { s: 'DATA_CLONE_ERR', c: 25, m: 1 }\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Error = Error;\nvar replace = uncurryThis(''.replace);\n\nvar TEST = (function (arg) { return String($Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {\n while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n } return stack;\n};\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || defineGlobalProperty(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","var $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","var isCallable = require('../internals/is-callable');\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = false;\n","var getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","var toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw $TypeError(\"Can't convert object to primitive value\");\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.27.1',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.27.1/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","var call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n","var $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar fails = require('../internals/fails');\n\nvar INCORRECT_TO_LENGTH = fails(function () {\n return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;\n});\n\n// V8 and Safari <= 15.4, FF < 23 throws InternalError\n// https://bugs.chromium.org/p/v8/issues/detail?id=12681\nvar SILENT_ON_NON_WRITABLE_LENGTH = !function () {\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).push();\n } catch (error) {\n return error instanceof TypeError;\n }\n}();\n\n// `Array.prototype.push` method\n// https://tc39.es/ecma262/#sec-array.prototype.push\n$({ target: 'Array', proto: true, arity: 1, forced: INCORRECT_TO_LENGTH || SILENT_ON_NON_WRITABLE_LENGTH }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n push: function push(item) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var argCount = arguments.length;\n doesNotExceedSafeInteger(len + argCount);\n for (var i = 0; i < argCount; i++) {\n O[len] = arguments[i];\n len++;\n }\n setArrayLength(O, len);\n return len;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar anInstance = require('../internals/an-instance');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar DOMExceptionConstants = require('../internals/dom-exception-constants');\nvar clearErrorStack = require('../internals/error-stack-clear');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IS_PURE = require('../internals/is-pure');\n\nvar DOM_EXCEPTION = 'DOMException';\nvar Error = getBuiltIn('Error');\nvar NativeDOMException = getBuiltIn(DOM_EXCEPTION);\n\nvar $DOMException = function DOMException() {\n anInstance(this, DOMExceptionPrototype);\n var argumentsLength = arguments.length;\n var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);\n var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');\n var that = new NativeDOMException(message, name);\n var error = Error(message);\n error.name = DOM_EXCEPTION;\n defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));\n inheritIfRequired(that, this, $DOMException);\n return that;\n};\n\nvar DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype;\n\nvar ERROR_HAS_STACK = 'stack' in Error(DOM_EXCEPTION);\nvar DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2);\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(global, DOM_EXCEPTION);\n\n// Bun ~ 0.1.1 DOMException have incorrect descriptor and we can't redefine it\n// https://github.com/Jarred-Sumner/bun/issues/399\nvar BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable);\n\nvar FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK;\n\n// `DOMException` constructor patch for `.stack` where it's required\n// https://webidl.spec.whatwg.org/#es-DOMException-specialness\n$({ global: true, constructor: true, forced: IS_PURE || FORCED_CONSTRUCTOR }, { // TODO: fix export logic\n DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException\n});\n\nvar PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);\nvar PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;\n\nif (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) {\n if (!IS_PURE) {\n defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException));\n }\n\n for (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {\n var constant = DOMExceptionConstants[key];\n var constantName = constant.s;\n if (!hasOwn(PolyfilledDOMException, constantName)) {\n defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c));\n }\n }\n}\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.attributeNames = exports.elementNames = void 0;\nexports.elementNames = new Map([\n \"altGlyph\",\n \"altGlyphDef\",\n \"altGlyphItem\",\n \"animateColor\",\n \"animateMotion\",\n \"animateTransform\",\n \"clipPath\",\n \"feBlend\",\n \"feColorMatrix\",\n \"feComponentTransfer\",\n \"feComposite\",\n \"feConvolveMatrix\",\n \"feDiffuseLighting\",\n \"feDisplacementMap\",\n \"feDistantLight\",\n \"feDropShadow\",\n \"feFlood\",\n \"feFuncA\",\n \"feFuncB\",\n \"feFuncG\",\n \"feFuncR\",\n \"feGaussianBlur\",\n \"feImage\",\n \"feMerge\",\n \"feMergeNode\",\n \"feMorphology\",\n \"feOffset\",\n \"fePointLight\",\n \"feSpecularLighting\",\n \"feSpotLight\",\n \"feTile\",\n \"feTurbulence\",\n \"foreignObject\",\n \"glyphRef\",\n \"linearGradient\",\n \"radialGradient\",\n \"textPath\",\n].map(function (val) { return [val.toLowerCase(), val]; }));\nexports.attributeNames = new Map([\n \"definitionURL\",\n \"attributeName\",\n \"attributeType\",\n \"baseFrequency\",\n \"baseProfile\",\n \"calcMode\",\n \"clipPathUnits\",\n \"diffuseConstant\",\n \"edgeMode\",\n \"filterUnits\",\n \"glyphRef\",\n \"gradientTransform\",\n \"gradientUnits\",\n \"kernelMatrix\",\n \"kernelUnitLength\",\n \"keyPoints\",\n \"keySplines\",\n \"keyTimes\",\n \"lengthAdjust\",\n \"limitingConeAngle\",\n \"markerHeight\",\n \"markerUnits\",\n \"markerWidth\",\n \"maskContentUnits\",\n \"maskUnits\",\n \"numOctaves\",\n \"pathLength\",\n \"patternContentUnits\",\n \"patternTransform\",\n \"patternUnits\",\n \"pointsAtX\",\n \"pointsAtY\",\n \"pointsAtZ\",\n \"preserveAlpha\",\n \"preserveAspectRatio\",\n \"primitiveUnits\",\n \"refX\",\n \"refY\",\n \"repeatCount\",\n \"repeatDur\",\n \"requiredExtensions\",\n \"requiredFeatures\",\n \"specularConstant\",\n \"specularExponent\",\n \"spreadMethod\",\n \"startOffset\",\n \"stdDeviation\",\n \"stitchTiles\",\n \"surfaceScale\",\n \"systemLanguage\",\n \"tableValues\",\n \"targetX\",\n \"targetY\",\n \"textLength\",\n \"viewBox\",\n \"viewTarget\",\n \"xChannelSelector\",\n \"yChannelSelector\",\n \"zoomAndPan\",\n].map(function (val) { return [val.toLowerCase(), val]; }));\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.render = void 0;\n/*\n * Module dependencies\n */\nvar ElementType = __importStar(require(\"domelementtype\"));\nvar entities_1 = require(\"entities\");\n/**\n * Mixed-case SVG and MathML tags & attributes\n * recognized by the HTML parser.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n */\nvar foreignNames_js_1 = require(\"./foreignNames.js\");\nvar unencodedElements = new Set([\n \"style\",\n \"script\",\n \"xmp\",\n \"iframe\",\n \"noembed\",\n \"noframes\",\n \"plaintext\",\n \"noscript\",\n]);\nfunction replaceQuotes(value) {\n return value.replace(/\"/g, \""\");\n}\n/**\n * Format attributes\n */\nfunction formatAttributes(attributes, opts) {\n var _a;\n if (!attributes)\n return;\n var encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false\n ? replaceQuotes\n : opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? entities_1.encodeXML\n : entities_1.escapeAttribute;\n return Object.keys(attributes)\n .map(function (key) {\n var _a, _b;\n var value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case attribute names */\n key = (_b = foreignNames_js_1.attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n }\n if (!opts.emptyAttrs && !opts.xmlMode && value === \"\") {\n return key;\n }\n return \"\".concat(key, \"=\\\"\").concat(encode(value), \"\\\"\");\n })\n .join(\" \");\n}\n/**\n * Self-enclosing tags\n */\nvar singleTag = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n *\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nfunction render(node, options) {\n if (options === void 0) { options = {}; }\n var nodes = \"length\" in node ? node : [node];\n var output = \"\";\n for (var i = 0; i < nodes.length; i++) {\n output += renderNode(nodes[i], options);\n }\n return output;\n}\nexports.render = render;\nexports.default = render;\nfunction renderNode(node, options) {\n switch (node.type) {\n case ElementType.Root:\n return render(node.children, options);\n // @ts-expect-error We don't use `Doctype` yet\n case ElementType.Doctype:\n case ElementType.Directive:\n return renderDirective(node);\n case ElementType.Comment:\n return renderComment(node);\n case ElementType.CDATA:\n return renderCdata(node);\n case ElementType.Script:\n case ElementType.Style:\n case ElementType.Tag:\n return renderTag(node, options);\n case ElementType.Text:\n return renderText(node, options);\n }\n}\nvar foreignModeIntegrationPoints = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignObject\",\n \"desc\",\n \"title\",\n]);\nvar foreignElements = new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n var _a;\n // Handle SVG / MathML in HTML\n if (opts.xmlMode === \"foreign\") {\n /* Fix up mixed-case element names */\n elem.name = (_a = foreignNames_js_1.elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n /* Exit foreign mode at integration points */\n if (elem.parent &&\n foreignModeIntegrationPoints.has(elem.parent.name)) {\n opts = __assign(__assign({}, opts), { xmlMode: false });\n }\n }\n if (!opts.xmlMode && foreignElements.has(elem.name)) {\n opts = __assign(__assign({}, opts), { xmlMode: \"foreign\" });\n }\n var tag = \"<\".concat(elem.name);\n var attribs = formatAttributes(elem.attribs, opts);\n if (attribs) {\n tag += \" \".concat(attribs);\n }\n if (elem.children.length === 0 &&\n (opts.xmlMode\n ? // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags\n opts.selfClosingTags !== false\n : // User explicitly asked for self-closing tags, even in HTML mode\n opts.selfClosingTags && singleTag.has(elem.name))) {\n if (!opts.xmlMode)\n tag += \" \";\n tag += \"/>\";\n }\n else {\n tag += \">\";\n if (elem.children.length > 0) {\n tag += render(elem.children, opts);\n }\n if (opts.xmlMode || !singleTag.has(elem.name)) {\n tag += \"</\".concat(elem.name, \">\");\n }\n }\n return tag;\n}\nfunction renderDirective(elem) {\n return \"<\".concat(elem.data, \">\");\n}\nfunction renderText(elem, opts) {\n var _a;\n var data = elem.data || \"\";\n // If entities weren't decoded, no need to encode them back\n if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false &&\n !(!opts.xmlMode &&\n elem.parent &&\n unencodedElements.has(elem.parent.name))) {\n data =\n opts.xmlMode || opts.encodeEntities !== \"utf8\"\n ? (0, entities_1.encodeXML)(data)\n : (0, entities_1.escapeText)(data);\n }\n return data;\n}\nfunction renderCdata(elem) {\n return \"<![CDATA[\".concat(elem.children[0].data, \"]]>\");\n}\nfunction renderComment(elem) {\n return \"<!--\".concat(elem.data, \"-->\");\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = void 0;\n/** Types of elements found in htmlparser2's DOM */\nvar ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType = exports.ElementType || (exports.ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nfunction isTag(elem) {\n return (elem.type === ElementType.Tag ||\n elem.type === ElementType.Script ||\n elem.type === ElementType.Style);\n}\nexports.isTag = isTag;\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexports.Root = ElementType.Root;\n/** Type for Text */\nexports.Text = ElementType.Text;\n/** Type for <? ... ?> */\nexports.Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexports.Comment = ElementType.Comment;\n/** Type for <script> tags */\nexports.Script = ElementType.Script;\n/** Type for <style> tags */\nexports.Style = ElementType.Style;\n/** Type for Any tag */\nexports.Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexports.CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexports.Doctype = ElementType.Doctype;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DomHandler = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\nvar node_js_1 = require(\"./node.js\");\n__exportStar(require(\"./node.js\"), exports);\n// Default options\nvar defaultOpts = {\n withStartIndices: false,\n withEndIndices: false,\n xmlMode: false,\n};\nvar DomHandler = /** @class */ (function () {\n /**\n * @param callback Called once parsing has completed.\n * @param options Settings for the handler.\n * @param elementCB Callback whenever a tag is closed.\n */\n function DomHandler(callback, options, elementCB) {\n /** The elements of the DOM */\n this.dom = [];\n /** The root element for the DOM */\n this.root = new node_js_1.Document(this.dom);\n /** Indicated whether parsing has been completed. */\n this.done = false;\n /** Stack of open tags. */\n this.tagStack = [this.root];\n /** A data node that is still being written to. */\n this.lastNode = null;\n /** Reference to the parser instance. Used for location information. */\n this.parser = null;\n // Make it possible to skip arguments, for backwards-compatibility\n if (typeof options === \"function\") {\n elementCB = options;\n options = defaultOpts;\n }\n if (typeof callback === \"object\") {\n options = callback;\n callback = undefined;\n }\n this.callback = callback !== null && callback !== void 0 ? callback : null;\n this.options = options !== null && options !== void 0 ? options : defaultOpts;\n this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n }\n DomHandler.prototype.onparserinit = function (parser) {\n this.parser = parser;\n };\n // Resets the handler back to starting state\n DomHandler.prototype.onreset = function () {\n this.dom = [];\n this.root = new node_js_1.Document(this.dom);\n this.done = false;\n this.tagStack = [this.root];\n this.lastNode = null;\n this.parser = null;\n };\n // Signals the handler that parsing is done\n DomHandler.prototype.onend = function () {\n if (this.done)\n return;\n this.done = true;\n this.parser = null;\n this.handleCallback(null);\n };\n DomHandler.prototype.onerror = function (error) {\n this.handleCallback(error);\n };\n DomHandler.prototype.onclosetag = function () {\n this.lastNode = null;\n var elem = this.tagStack.pop();\n if (this.options.withEndIndices) {\n elem.endIndex = this.parser.endIndex;\n }\n if (this.elementCB)\n this.elementCB(elem);\n };\n DomHandler.prototype.onopentag = function (name, attribs) {\n var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;\n var element = new node_js_1.Element(name, attribs, undefined, type);\n this.addNode(element);\n this.tagStack.push(element);\n };\n DomHandler.prototype.ontext = function (data) {\n var lastNode = this.lastNode;\n if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {\n lastNode.data += data;\n if (this.options.withEndIndices) {\n lastNode.endIndex = this.parser.endIndex;\n }\n }\n else {\n var node = new node_js_1.Text(data);\n this.addNode(node);\n this.lastNode = node;\n }\n };\n DomHandler.prototype.oncomment = function (data) {\n if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {\n this.lastNode.data += data;\n return;\n }\n var node = new node_js_1.Comment(data);\n this.addNode(node);\n this.lastNode = node;\n };\n DomHandler.prototype.oncommentend = function () {\n this.lastNode = null;\n };\n DomHandler.prototype.oncdatastart = function () {\n var text = new node_js_1.Text(\"\");\n var node = new node_js_1.CDATA([text]);\n this.addNode(node);\n text.parent = node;\n this.lastNode = text;\n };\n DomHandler.prototype.oncdataend = function () {\n this.lastNode = null;\n };\n DomHandler.prototype.onprocessinginstruction = function (name, data) {\n var node = new node_js_1.ProcessingInstruction(name, data);\n this.addNode(node);\n };\n DomHandler.prototype.handleCallback = function (error) {\n if (typeof this.callback === \"function\") {\n this.callback(error, this.dom);\n }\n else if (error) {\n throw error;\n }\n };\n DomHandler.prototype.addNode = function (node) {\n var parent = this.tagStack[this.tagStack.length - 1];\n var previousSibling = parent.children[parent.children.length - 1];\n if (this.options.withStartIndices) {\n node.startIndex = this.parser.startIndex;\n }\n if (this.options.withEndIndices) {\n node.endIndex = this.parser.endIndex;\n }\n parent.children.push(node);\n if (previousSibling) {\n node.prev = previousSibling;\n previousSibling.next = node;\n }\n node.parent = parent;\n this.lastNode = null;\n };\n return DomHandler;\n}());\nexports.DomHandler = DomHandler;\nexports.default = DomHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cloneNode = exports.hasChildren = exports.isDocument = exports.isDirective = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = exports.Element = exports.Document = exports.CDATA = exports.NodeWithChildren = exports.ProcessingInstruction = exports.Comment = exports.Text = exports.DataNode = exports.Node = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nvar Node = /** @class */ (function () {\n function Node() {\n /** Parent of the node */\n this.parent = null;\n /** Previous sibling */\n this.prev = null;\n /** Next sibling */\n this.next = null;\n /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n this.startIndex = null;\n /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n this.endIndex = null;\n }\n Object.defineProperty(Node.prototype, \"parentNode\", {\n // Read-write aliases for properties\n /**\n * Same as {@link parent}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.parent;\n },\n set: function (parent) {\n this.parent = parent;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"previousSibling\", {\n /**\n * Same as {@link prev}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.prev;\n },\n set: function (prev) {\n this.prev = prev;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"nextSibling\", {\n /**\n * Same as {@link next}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.next;\n },\n set: function (next) {\n this.next = next;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Clone this node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\n Node.prototype.cloneNode = function (recursive) {\n if (recursive === void 0) { recursive = false; }\n return cloneNode(this, recursive);\n };\n return Node;\n}());\nexports.Node = Node;\n/**\n * A node that contains some data.\n */\nvar DataNode = /** @class */ (function (_super) {\n __extends(DataNode, _super);\n /**\n * @param data The content of the data node\n */\n function DataNode(data) {\n var _this = _super.call(this) || this;\n _this.data = data;\n return _this;\n }\n Object.defineProperty(DataNode.prototype, \"nodeValue\", {\n /**\n * Same as {@link data}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.data;\n },\n set: function (data) {\n this.data = data;\n },\n enumerable: false,\n configurable: true\n });\n return DataNode;\n}(Node));\nexports.DataNode = DataNode;\n/**\n * Text within the document.\n */\nvar Text = /** @class */ (function (_super) {\n __extends(Text, _super);\n function Text() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.Text;\n return _this;\n }\n Object.defineProperty(Text.prototype, \"nodeType\", {\n get: function () {\n return 3;\n },\n enumerable: false,\n configurable: true\n });\n return Text;\n}(DataNode));\nexports.Text = Text;\n/**\n * Comments within the document.\n */\nvar Comment = /** @class */ (function (_super) {\n __extends(Comment, _super);\n function Comment() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.Comment;\n return _this;\n }\n Object.defineProperty(Comment.prototype, \"nodeType\", {\n get: function () {\n return 8;\n },\n enumerable: false,\n configurable: true\n });\n return Comment;\n}(DataNode));\nexports.Comment = Comment;\n/**\n * Processing instructions, including doc types.\n */\nvar ProcessingInstruction = /** @class */ (function (_super) {\n __extends(ProcessingInstruction, _super);\n function ProcessingInstruction(name, data) {\n var _this = _super.call(this, data) || this;\n _this.name = name;\n _this.type = domelementtype_1.ElementType.Directive;\n return _this;\n }\n Object.defineProperty(ProcessingInstruction.prototype, \"nodeType\", {\n get: function () {\n return 1;\n },\n enumerable: false,\n configurable: true\n });\n return ProcessingInstruction;\n}(DataNode));\nexports.ProcessingInstruction = ProcessingInstruction;\n/**\n * A `Node` that can have children.\n */\nvar NodeWithChildren = /** @class */ (function (_super) {\n __extends(NodeWithChildren, _super);\n /**\n * @param children Children of the node. Only certain node types can have children.\n */\n function NodeWithChildren(children) {\n var _this = _super.call(this) || this;\n _this.children = children;\n return _this;\n }\n Object.defineProperty(NodeWithChildren.prototype, \"firstChild\", {\n // Aliases\n /** First child of the node. */\n get: function () {\n var _a;\n return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NodeWithChildren.prototype, \"lastChild\", {\n /** Last child of the node. */\n get: function () {\n return this.children.length > 0\n ? this.children[this.children.length - 1]\n : null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(NodeWithChildren.prototype, \"childNodes\", {\n /**\n * Same as {@link children}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.children;\n },\n set: function (children) {\n this.children = children;\n },\n enumerable: false,\n configurable: true\n });\n return NodeWithChildren;\n}(Node));\nexports.NodeWithChildren = NodeWithChildren;\nvar CDATA = /** @class */ (function (_super) {\n __extends(CDATA, _super);\n function CDATA() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.CDATA;\n return _this;\n }\n Object.defineProperty(CDATA.prototype, \"nodeType\", {\n get: function () {\n return 4;\n },\n enumerable: false,\n configurable: true\n });\n return CDATA;\n}(NodeWithChildren));\nexports.CDATA = CDATA;\n/**\n * The root node of the document.\n */\nvar Document = /** @class */ (function (_super) {\n __extends(Document, _super);\n function Document() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = domelementtype_1.ElementType.Root;\n return _this;\n }\n Object.defineProperty(Document.prototype, \"nodeType\", {\n get: function () {\n return 9;\n },\n enumerable: false,\n configurable: true\n });\n return Document;\n}(NodeWithChildren));\nexports.Document = Document;\n/**\n * An element within the DOM.\n */\nvar Element = /** @class */ (function (_super) {\n __extends(Element, _super);\n /**\n * @param name Name of the tag, eg. `div`, `span`.\n * @param attribs Object mapping attribute names to attribute values.\n * @param children Children of the node.\n */\n function Element(name, attribs, children, type) {\n if (children === void 0) { children = []; }\n if (type === void 0) { type = name === \"script\"\n ? domelementtype_1.ElementType.Script\n : name === \"style\"\n ? domelementtype_1.ElementType.Style\n : domelementtype_1.ElementType.Tag; }\n var _this = _super.call(this, children) || this;\n _this.name = name;\n _this.attribs = attribs;\n _this.type = type;\n return _this;\n }\n Object.defineProperty(Element.prototype, \"nodeType\", {\n get: function () {\n return 1;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Element.prototype, \"tagName\", {\n // DOM Level 1 aliases\n /**\n * Same as {@link name}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get: function () {\n return this.name;\n },\n set: function (name) {\n this.name = name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Element.prototype, \"attributes\", {\n get: function () {\n var _this = this;\n return Object.keys(this.attribs).map(function (name) {\n var _a, _b;\n return ({\n name: name,\n value: _this.attribs[name],\n namespace: (_a = _this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n prefix: (_b = _this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n });\n });\n },\n enumerable: false,\n configurable: true\n });\n return Element;\n}(NodeWithChildren));\nexports.Element = Element;\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nfunction isTag(node) {\n return (0, domelementtype_1.isTag)(node);\n}\nexports.isTag = isTag;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nfunction isCDATA(node) {\n return node.type === domelementtype_1.ElementType.CDATA;\n}\nexports.isCDATA = isCDATA;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nfunction isText(node) {\n return node.type === domelementtype_1.ElementType.Text;\n}\nexports.isText = isText;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nfunction isComment(node) {\n return node.type === domelementtype_1.ElementType.Comment;\n}\nexports.isComment = isComment;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDirective(node) {\n return node.type === domelementtype_1.ElementType.Directive;\n}\nexports.isDirective = isDirective;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDocument(node) {\n return node.type === domelementtype_1.ElementType.Root;\n}\nexports.isDocument = isDocument;\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nfunction hasChildren(node) {\n return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\nexports.hasChildren = hasChildren;\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nfunction cloneNode(node, recursive) {\n if (recursive === void 0) { recursive = false; }\n var result;\n if (isText(node)) {\n result = new Text(node.data);\n }\n else if (isComment(node)) {\n result = new Comment(node.data);\n }\n else if (isTag(node)) {\n var children = recursive ? cloneChildren(node.children) : [];\n var clone_1 = new Element(node.name, __assign({}, node.attribs), children);\n children.forEach(function (child) { return (child.parent = clone_1); });\n if (node.namespace != null) {\n clone_1.namespace = node.namespace;\n }\n if (node[\"x-attribsNamespace\"]) {\n clone_1[\"x-attribsNamespace\"] = __assign({}, node[\"x-attribsNamespace\"]);\n }\n if (node[\"x-attribsPrefix\"]) {\n clone_1[\"x-attribsPrefix\"] = __assign({}, node[\"x-attribsPrefix\"]);\n }\n result = clone_1;\n }\n else if (isCDATA(node)) {\n var children = recursive ? cloneChildren(node.children) : [];\n var clone_2 = new CDATA(children);\n children.forEach(function (child) { return (child.parent = clone_2); });\n result = clone_2;\n }\n else if (isDocument(node)) {\n var children = recursive ? cloneChildren(node.children) : [];\n var clone_3 = new Document(children);\n children.forEach(function (child) { return (child.parent = clone_3); });\n if (node[\"x-mode\"]) {\n clone_3[\"x-mode\"] = node[\"x-mode\"];\n }\n result = clone_3;\n }\n else if (isDirective(node)) {\n var instruction = new ProcessingInstruction(node.name, node.data);\n if (node[\"x-name\"] != null) {\n instruction[\"x-name\"] = node[\"x-name\"];\n instruction[\"x-publicId\"] = node[\"x-publicId\"];\n instruction[\"x-systemId\"] = node[\"x-systemId\"];\n }\n result = instruction;\n }\n else {\n throw new Error(\"Not implemented yet: \".concat(node.type));\n }\n result.startIndex = node.startIndex;\n result.endIndex = node.endIndex;\n if (node.sourceCodeLocation != null) {\n result.sourceCodeLocation = node.sourceCodeLocation;\n }\n return result;\n}\nexports.cloneNode = cloneNode;\nfunction cloneChildren(childs) {\n var children = childs.map(function (child) { return cloneNode(child, true); });\n for (var i = 1; i < children.length; i++) {\n children[i].prev = children[i - 1];\n children[i - 1].next = children[i];\n }\n return children;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFeed = void 0;\nvar stringify_js_1 = require(\"./stringify.js\");\nvar legacy_js_1 = require(\"./legacy.js\");\n/**\n * Get the feed object from the root of a DOM tree.\n *\n * @category Feeds\n * @param doc - The DOM to to extract the feed from.\n * @returns The feed.\n */\nfunction getFeed(doc) {\n var feedRoot = getOneElement(isValidFeed, doc);\n return !feedRoot\n ? null\n : feedRoot.name === \"feed\"\n ? getAtomFeed(feedRoot)\n : getRssFeed(feedRoot);\n}\nexports.getFeed = getFeed;\n/**\n * Parse an Atom feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getAtomFeed(feedRoot) {\n var _a;\n var childs = feedRoot.children;\n var feed = {\n type: \"atom\",\n items: (0, legacy_js_1.getElementsByTagName)(\"entry\", childs).map(function (item) {\n var _a;\n var children = item.children;\n var entry = { media: getMediaElements(children) };\n addConditionally(entry, \"id\", \"id\", children);\n addConditionally(entry, \"title\", \"title\", children);\n var href = (_a = getOneElement(\"link\", children)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n if (href) {\n entry.link = href;\n }\n var description = fetch(\"summary\", children) || fetch(\"content\", children);\n if (description) {\n entry.description = description;\n }\n var pubDate = fetch(\"updated\", children);\n if (pubDate) {\n entry.pubDate = new Date(pubDate);\n }\n return entry;\n }),\n };\n addConditionally(feed, \"id\", \"id\", childs);\n addConditionally(feed, \"title\", \"title\", childs);\n var href = (_a = getOneElement(\"link\", childs)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n if (href) {\n feed.link = href;\n }\n addConditionally(feed, \"description\", \"subtitle\", childs);\n var updated = fetch(\"updated\", childs);\n if (updated) {\n feed.updated = new Date(updated);\n }\n addConditionally(feed, \"author\", \"email\", childs, true);\n return feed;\n}\n/**\n * Parse a RSS feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getRssFeed(feedRoot) {\n var _a, _b;\n var childs = (_b = (_a = getOneElement(\"channel\", feedRoot.children)) === null || _a === void 0 ? void 0 : _a.children) !== null && _b !== void 0 ? _b : [];\n var feed = {\n type: feedRoot.name.substr(0, 3),\n id: \"\",\n items: (0, legacy_js_1.getElementsByTagName)(\"item\", feedRoot.children).map(function (item) {\n var children = item.children;\n var entry = { media: getMediaElements(children) };\n addConditionally(entry, \"id\", \"guid\", children);\n addConditionally(entry, \"title\", \"title\", children);\n addConditionally(entry, \"link\", \"link\", children);\n addConditionally(entry, \"description\", \"description\", children);\n var pubDate = fetch(\"pubDate\", children);\n if (pubDate)\n entry.pubDate = new Date(pubDate);\n return entry;\n }),\n };\n addConditionally(feed, \"title\", \"title\", childs);\n addConditionally(feed, \"link\", \"link\", childs);\n addConditionally(feed, \"description\", \"description\", childs);\n var updated = fetch(\"lastBuildDate\", childs);\n if (updated) {\n feed.updated = new Date(updated);\n }\n addConditionally(feed, \"author\", \"managingEditor\", childs, true);\n return feed;\n}\nvar MEDIA_KEYS_STRING = [\"url\", \"type\", \"lang\"];\nvar MEDIA_KEYS_INT = [\n \"fileSize\",\n \"bitrate\",\n \"framerate\",\n \"samplingrate\",\n \"channels\",\n \"duration\",\n \"height\",\n \"width\",\n];\n/**\n * Get all media elements of a feed item.\n *\n * @param where Nodes to search in.\n * @returns Media elements.\n */\nfunction getMediaElements(where) {\n return (0, legacy_js_1.getElementsByTagName)(\"media:content\", where).map(function (elem) {\n var attribs = elem.attribs;\n var media = {\n medium: attribs[\"medium\"],\n isDefault: !!attribs[\"isDefault\"],\n };\n for (var _i = 0, MEDIA_KEYS_STRING_1 = MEDIA_KEYS_STRING; _i < MEDIA_KEYS_STRING_1.length; _i++) {\n var attrib = MEDIA_KEYS_STRING_1[_i];\n if (attribs[attrib]) {\n media[attrib] = attribs[attrib];\n }\n }\n for (var _a = 0, MEDIA_KEYS_INT_1 = MEDIA_KEYS_INT; _a < MEDIA_KEYS_INT_1.length; _a++) {\n var attrib = MEDIA_KEYS_INT_1[_a];\n if (attribs[attrib]) {\n media[attrib] = parseInt(attribs[attrib], 10);\n }\n }\n if (attribs[\"expression\"]) {\n media.expression = attribs[\"expression\"];\n }\n return media;\n });\n}\n/**\n * Get one element by tag name.\n *\n * @param tagName Tag name to look for\n * @param node Node to search in\n * @returns The element or null\n */\nfunction getOneElement(tagName, node) {\n return (0, legacy_js_1.getElementsByTagName)(tagName, node, true, 1)[0];\n}\n/**\n * Get the text content of an element with a certain tag name.\n *\n * @param tagName Tag name to look for.\n * @param where Node to search in.\n * @param recurse Whether to recurse into child nodes.\n * @returns The text content of the element.\n */\nfunction fetch(tagName, where, recurse) {\n if (recurse === void 0) { recurse = false; }\n return (0, stringify_js_1.textContent)((0, legacy_js_1.getElementsByTagName)(tagName, where, recurse, 1)).trim();\n}\n/**\n * Adds a property to an object if it has a value.\n *\n * @param obj Object to be extended\n * @param prop Property name\n * @param tagName Tag name that contains the conditionally added property\n * @param where Element to search for the property\n * @param recurse Whether to recurse into child nodes.\n */\nfunction addConditionally(obj, prop, tagName, where, recurse) {\n if (recurse === void 0) { recurse = false; }\n var val = fetch(tagName, where, recurse);\n if (val)\n obj[prop] = val;\n}\n/**\n * Checks if an element is a feed root node.\n *\n * @param value The name of the element to check.\n * @returns Whether an element is a feed root node.\n */\nfunction isValidFeed(value) {\n return value === \"rss\" || value === \"feed\" || value === \"rdf:RDF\";\n}\n//# sourceMappingURL=feeds.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uniqueSort = exports.compareDocumentPosition = exports.DocumentPosition = exports.removeSubsets = void 0;\nvar domhandler_1 = require(\"domhandler\");\n/**\n * Given an array of nodes, remove any member that is contained by another.\n *\n * @category Helpers\n * @param nodes Nodes to filter.\n * @returns Remaining nodes that aren't subtrees of each other.\n */\nfunction removeSubsets(nodes) {\n var idx = nodes.length;\n /*\n * Check if each node (or one of its ancestors) is already contained in the\n * array.\n */\n while (--idx >= 0) {\n var node = nodes[idx];\n /*\n * Remove the node if it is not unique.\n * We are going through the array from the end, so we only\n * have to check nodes that preceed the node under consideration in the array.\n */\n if (idx > 0 && nodes.lastIndexOf(node, idx - 1) >= 0) {\n nodes.splice(idx, 1);\n continue;\n }\n for (var ancestor = node.parent; ancestor; ancestor = ancestor.parent) {\n if (nodes.includes(ancestor)) {\n nodes.splice(idx, 1);\n break;\n }\n }\n }\n return nodes;\n}\nexports.removeSubsets = removeSubsets;\n/**\n * @category Helpers\n * @see {@link http://dom.spec.whatwg.org/#dom-node-comparedocumentposition}\n */\nvar DocumentPosition;\n(function (DocumentPosition) {\n DocumentPosition[DocumentPosition[\"DISCONNECTED\"] = 1] = \"DISCONNECTED\";\n DocumentPosition[DocumentPosition[\"PRECEDING\"] = 2] = \"PRECEDING\";\n DocumentPosition[DocumentPosition[\"FOLLOWING\"] = 4] = \"FOLLOWING\";\n DocumentPosition[DocumentPosition[\"CONTAINS\"] = 8] = \"CONTAINS\";\n DocumentPosition[DocumentPosition[\"CONTAINED_BY\"] = 16] = \"CONTAINED_BY\";\n})(DocumentPosition = exports.DocumentPosition || (exports.DocumentPosition = {}));\n/**\n * Compare the position of one node against another node in any other document.\n * The return value is a bitmask with the values from {@link DocumentPosition}.\n *\n * Document order:\n * > There is an ordering, document order, defined on all the nodes in the\n * > document corresponding to the order in which the first character of the\n * > XML representation of each node occurs in the XML representation of the\n * > document after expansion of general entities. Thus, the document element\n * > node will be the first node. Element nodes occur before their children.\n * > Thus, document order orders element nodes in order of the occurrence of\n * > their start-tag in the XML (after expansion of entities). The attribute\n * > nodes of an element occur after the element and before its children. The\n * > relative order of attribute nodes is implementation-dependent.\n *\n * Source:\n * http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order\n *\n * @category Helpers\n * @param nodeA The first node to use in the comparison\n * @param nodeB The second node to use in the comparison\n * @returns A bitmask describing the input nodes' relative position.\n *\n * See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for\n * a description of these values.\n */\nfunction compareDocumentPosition(nodeA, nodeB) {\n var aParents = [];\n var bParents = [];\n if (nodeA === nodeB) {\n return 0;\n }\n var current = (0, domhandler_1.hasChildren)(nodeA) ? nodeA : nodeA.parent;\n while (current) {\n aParents.unshift(current);\n current = current.parent;\n }\n current = (0, domhandler_1.hasChildren)(nodeB) ? nodeB : nodeB.parent;\n while (current) {\n bParents.unshift(current);\n current = current.parent;\n }\n var maxIdx = Math.min(aParents.length, bParents.length);\n var idx = 0;\n while (idx < maxIdx && aParents[idx] === bParents[idx]) {\n idx++;\n }\n if (idx === 0) {\n return DocumentPosition.DISCONNECTED;\n }\n var sharedParent = aParents[idx - 1];\n var siblings = sharedParent.children;\n var aSibling = aParents[idx];\n var bSibling = bParents[idx];\n if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {\n if (sharedParent === nodeB) {\n return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY;\n }\n return DocumentPosition.FOLLOWING;\n }\n if (sharedParent === nodeA) {\n return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS;\n }\n return DocumentPosition.PRECEDING;\n}\nexports.compareDocumentPosition = compareDocumentPosition;\n/**\n * Sort an array of nodes based on their relative position in the document and\n * remove any duplicate nodes. If the array contains nodes that do not belong to\n * the same document, sort order is unspecified.\n *\n * @category Helpers\n * @param nodes Array of DOM nodes.\n * @returns Collection of unique nodes, sorted in document order.\n */\nfunction uniqueSort(nodes) {\n nodes = nodes.filter(function (node, i, arr) { return !arr.includes(node, i + 1); });\n nodes.sort(function (a, b) {\n var relative = compareDocumentPosition(a, b);\n if (relative & DocumentPosition.PRECEDING) {\n return -1;\n }\n else if (relative & DocumentPosition.FOLLOWING) {\n return 1;\n }\n return 0;\n });\n return nodes;\n}\nexports.uniqueSort = uniqueSort;\n//# sourceMappingURL=helpers.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasChildren = exports.isDocument = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = void 0;\n__exportStar(require(\"./stringify.js\"), exports);\n__exportStar(require(\"./traversal.js\"), exports);\n__exportStar(require(\"./manipulation.js\"), exports);\n__exportStar(require(\"./querying.js\"), exports);\n__exportStar(require(\"./legacy.js\"), exports);\n__exportStar(require(\"./helpers.js\"), exports);\n__exportStar(require(\"./feeds.js\"), exports);\n/** @deprecated Use these methods from `domhandler` directly. */\nvar domhandler_1 = require(\"domhandler\");\nObject.defineProperty(exports, \"isTag\", { enumerable: true, get: function () { return domhandler_1.isTag; } });\nObject.defineProperty(exports, \"isCDATA\", { enumerable: true, get: function () { return domhandler_1.isCDATA; } });\nObject.defineProperty(exports, \"isText\", { enumerable: true, get: function () { return domhandler_1.isText; } });\nObject.defineProperty(exports, \"isComment\", { enumerable: true, get: function () { return domhandler_1.isComment; } });\nObject.defineProperty(exports, \"isDocument\", { enumerable: true, get: function () { return domhandler_1.isDocument; } });\nObject.defineProperty(exports, \"hasChildren\", { enumerable: true, get: function () { return domhandler_1.hasChildren; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getElementsByTagType = exports.getElementsByTagName = exports.getElementById = exports.getElements = exports.testElement = void 0;\nvar domhandler_1 = require(\"domhandler\");\nvar querying_js_1 = require(\"./querying.js\");\nvar Checks = {\n tag_name: function (name) {\n if (typeof name === \"function\") {\n return function (elem) { return (0, domhandler_1.isTag)(elem) && name(elem.name); };\n }\n else if (name === \"*\") {\n return domhandler_1.isTag;\n }\n return function (elem) { return (0, domhandler_1.isTag)(elem) && elem.name === name; };\n },\n tag_type: function (type) {\n if (typeof type === \"function\") {\n return function (elem) { return type(elem.type); };\n }\n return function (elem) { return elem.type === type; };\n },\n tag_contains: function (data) {\n if (typeof data === \"function\") {\n return function (elem) { return (0, domhandler_1.isText)(elem) && data(elem.data); };\n }\n return function (elem) { return (0, domhandler_1.isText)(elem) && elem.data === data; };\n },\n};\n/**\n * @param attrib Attribute to check.\n * @param value Attribute value to look for.\n * @returns A function to check whether the a node has an attribute with a\n * particular value.\n */\nfunction getAttribCheck(attrib, value) {\n if (typeof value === \"function\") {\n return function (elem) { return (0, domhandler_1.isTag)(elem) && value(elem.attribs[attrib]); };\n }\n return function (elem) { return (0, domhandler_1.isTag)(elem) && elem.attribs[attrib] === value; };\n}\n/**\n * @param a First function to combine.\n * @param b Second function to combine.\n * @returns A function taking a node and returning `true` if either of the input\n * functions returns `true` for the node.\n */\nfunction combineFuncs(a, b) {\n return function (elem) { return a(elem) || b(elem); };\n}\n/**\n * @param options An object describing nodes to look for.\n * @returns A function executing all checks in `options` and returning `true` if\n * any of them match a node.\n */\nfunction compileTest(options) {\n var funcs = Object.keys(options).map(function (key) {\n var value = options[key];\n return Object.prototype.hasOwnProperty.call(Checks, key)\n ? Checks[key](value)\n : getAttribCheck(key, value);\n });\n return funcs.length === 0 ? null : funcs.reduce(combineFuncs);\n}\n/**\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param node The element to test.\n * @returns Whether the element matches the description in `options`.\n */\nfunction testElement(options, node) {\n var test = compileTest(options);\n return test ? test(node) : true;\n}\nexports.testElement = testElement;\n/**\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes that match `options`.\n */\nfunction getElements(options, nodes, recurse, limit) {\n if (limit === void 0) { limit = Infinity; }\n var test = compileTest(options);\n return test ? (0, querying_js_1.filter)(test, nodes, recurse, limit) : [];\n}\nexports.getElements = getElements;\n/**\n * @category Legacy Query Functions\n * @param id The unique ID attribute value to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @returns The node with the supplied ID.\n */\nfunction getElementById(id, nodes, recurse) {\n if (recurse === void 0) { recurse = true; }\n if (!Array.isArray(nodes))\n nodes = [nodes];\n return (0, querying_js_1.findOne)(getAttribCheck(\"id\", id), nodes, recurse);\n}\nexports.getElementById = getElementById;\n/**\n * @category Legacy Query Functions\n * @param tagName Tag name to search for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `tagName`.\n */\nfunction getElementsByTagName(tagName, nodes, recurse, limit) {\n if (recurse === void 0) { recurse = true; }\n if (limit === void 0) { limit = Infinity; }\n return (0, querying_js_1.filter)(Checks[\"tag_name\"](tagName), nodes, recurse, limit);\n}\nexports.getElementsByTagName = getElementsByTagName;\n/**\n * @category Legacy Query Functions\n * @param type Element type to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `type`.\n */\nfunction getElementsByTagType(type, nodes, recurse, limit) {\n if (recurse === void 0) { recurse = true; }\n if (limit === void 0) { limit = Infinity; }\n return (0, querying_js_1.filter)(Checks[\"tag_type\"](type), nodes, recurse, limit);\n}\nexports.getElementsByTagType = getElementsByTagType;\n//# sourceMappingURL=legacy.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.prepend = exports.prependChild = exports.append = exports.appendChild = exports.replaceElement = exports.removeElement = void 0;\n/**\n * Remove an element from the dom\n *\n * @category Manipulation\n * @param elem The element to be removed\n */\nfunction removeElement(elem) {\n if (elem.prev)\n elem.prev.next = elem.next;\n if (elem.next)\n elem.next.prev = elem.prev;\n if (elem.parent) {\n var childs = elem.parent.children;\n childs.splice(childs.lastIndexOf(elem), 1);\n }\n}\nexports.removeElement = removeElement;\n/**\n * Replace an element in the dom\n *\n * @category Manipulation\n * @param elem The element to be replaced\n * @param replacement The element to be added\n */\nfunction replaceElement(elem, replacement) {\n var prev = (replacement.prev = elem.prev);\n if (prev) {\n prev.next = replacement;\n }\n var next = (replacement.next = elem.next);\n if (next) {\n next.prev = replacement;\n }\n var parent = (replacement.parent = elem.parent);\n if (parent) {\n var childs = parent.children;\n childs[childs.lastIndexOf(elem)] = replacement;\n elem.parent = null;\n }\n}\nexports.replaceElement = replaceElement;\n/**\n * Append a child to an element.\n *\n * @category Manipulation\n * @param elem The element to append to.\n * @param child The element to be added as a child.\n */\nfunction appendChild(elem, child) {\n removeElement(child);\n child.next = null;\n child.parent = elem;\n if (elem.children.push(child) > 1) {\n var sibling = elem.children[elem.children.length - 2];\n sibling.next = child;\n child.prev = sibling;\n }\n else {\n child.prev = null;\n }\n}\nexports.appendChild = appendChild;\n/**\n * Append an element after another.\n *\n * @category Manipulation\n * @param elem The element to append after.\n * @param next The element be added.\n */\nfunction append(elem, next) {\n removeElement(next);\n var parent = elem.parent;\n var currNext = elem.next;\n next.next = currNext;\n next.prev = elem;\n elem.next = next;\n next.parent = parent;\n if (currNext) {\n currNext.prev = next;\n if (parent) {\n var childs = parent.children;\n childs.splice(childs.lastIndexOf(currNext), 0, next);\n }\n }\n else if (parent) {\n parent.children.push(next);\n }\n}\nexports.append = append;\n/**\n * Prepend a child to an element.\n *\n * @category Manipulation\n * @param elem The element to prepend before.\n * @param child The element to be added as a child.\n */\nfunction prependChild(elem, child) {\n removeElement(child);\n child.parent = elem;\n child.prev = null;\n if (elem.children.unshift(child) !== 1) {\n var sibling = elem.children[1];\n sibling.prev = child;\n child.next = sibling;\n }\n else {\n child.next = null;\n }\n}\nexports.prependChild = prependChild;\n/**\n * Prepend an element before another.\n *\n * @category Manipulation\n * @param elem The element to prepend before.\n * @param prev The element be added.\n */\nfunction prepend(elem, prev) {\n removeElement(prev);\n var parent = elem.parent;\n if (parent) {\n var childs = parent.children;\n childs.splice(childs.indexOf(elem), 0, prev);\n }\n if (elem.prev) {\n elem.prev.next = prev;\n }\n prev.parent = parent;\n prev.prev = elem.prev;\n prev.next = elem;\n elem.prev = prev;\n}\nexports.prepend = prepend;\n//# sourceMappingURL=manipulation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findAll = exports.existsOne = exports.findOne = exports.findOneChild = exports.find = exports.filter = void 0;\nvar domhandler_1 = require(\"domhandler\");\n/**\n * Search a node and its children for nodes passing a test function.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param node Node to search. Will be included in the result set if it matches.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nfunction filter(test, node, recurse, limit) {\n if (recurse === void 0) { recurse = true; }\n if (limit === void 0) { limit = Infinity; }\n if (!Array.isArray(node))\n node = [node];\n return find(test, node, recurse, limit);\n}\nexports.filter = filter;\n/**\n * Search an array of node and its children for nodes passing a test function.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nfunction find(test, nodes, recurse, limit) {\n var result = [];\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var elem = nodes_1[_i];\n if (test(elem)) {\n result.push(elem);\n if (--limit <= 0)\n break;\n }\n if (recurse && (0, domhandler_1.hasChildren)(elem) && elem.children.length > 0) {\n var children = find(test, elem.children, recurse, limit);\n result.push.apply(result, children);\n limit -= children.length;\n if (limit <= 0)\n break;\n }\n }\n return result;\n}\nexports.find = find;\n/**\n * Finds the first element inside of an array that matches a test function.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns The first node in the array that passes `test`.\n * @deprecated Use `Array.prototype.find` directly.\n */\nfunction findOneChild(test, nodes) {\n return nodes.find(test);\n}\nexports.findOneChild = findOneChild;\n/**\n * Finds one element in a tree that passes a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @param recurse Also consider child nodes.\n * @returns The first child node that passes `test`.\n */\nfunction findOne(test, nodes, recurse) {\n if (recurse === void 0) { recurse = true; }\n var elem = null;\n for (var i = 0; i < nodes.length && !elem; i++) {\n var checked = nodes[i];\n if (!(0, domhandler_1.isTag)(checked)) {\n continue;\n }\n else if (test(checked)) {\n elem = checked;\n }\n else if (recurse && checked.children.length > 0) {\n elem = findOne(test, checked.children, true);\n }\n }\n return elem;\n}\nexports.findOne = findOne;\n/**\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns Whether a tree of nodes contains at least one node passing the test.\n */\nfunction existsOne(test, nodes) {\n return nodes.some(function (checked) {\n return (0, domhandler_1.isTag)(checked) &&\n (test(checked) ||\n (checked.children.length > 0 &&\n existsOne(test, checked.children)));\n });\n}\nexports.existsOne = existsOne;\n/**\n * Search and array of nodes and its children for elements passing a test function.\n *\n * Same as `find`, but limited to elements and with less options, leading to reduced complexity.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns All nodes passing `test`.\n */\nfunction findAll(test, nodes) {\n var _a;\n var result = [];\n var stack = nodes.filter(domhandler_1.isTag);\n var elem;\n while ((elem = stack.shift())) {\n var children = (_a = elem.children) === null || _a === void 0 ? void 0 : _a.filter(domhandler_1.isTag);\n if (children && children.length > 0) {\n stack.unshift.apply(stack, children);\n }\n if (test(elem))\n result.push(elem);\n }\n return result;\n}\nexports.findAll = findAll;\n//# sourceMappingURL=querying.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.innerText = exports.textContent = exports.getText = exports.getInnerHTML = exports.getOuterHTML = void 0;\nvar domhandler_1 = require(\"domhandler\");\nvar dom_serializer_1 = __importDefault(require(\"dom-serializer\"));\nvar domelementtype_1 = require(\"domelementtype\");\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the outer HTML of.\n * @param options Options for serialization.\n * @returns `node`'s outer HTML.\n */\nfunction getOuterHTML(node, options) {\n return (0, dom_serializer_1.default)(node, options);\n}\nexports.getOuterHTML = getOuterHTML;\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the inner HTML of.\n * @param options Options for serialization.\n * @returns `node`'s inner HTML.\n */\nfunction getInnerHTML(node, options) {\n return (0, domhandler_1.hasChildren)(node)\n ? node.children.map(function (node) { return getOuterHTML(node, options); }).join(\"\")\n : \"\";\n}\nexports.getInnerHTML = getInnerHTML;\n/**\n * Get a node's inner text. Same as `textContent`, but inserts newlines for `<br>` tags.\n *\n * @category Stringify\n * @deprecated Use `textContent` instead.\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n */\nfunction getText(node) {\n if (Array.isArray(node))\n return node.map(getText).join(\"\");\n if ((0, domhandler_1.isTag)(node))\n return node.name === \"br\" ? \"\\n\" : getText(node.children);\n if ((0, domhandler_1.isCDATA)(node))\n return getText(node.children);\n if ((0, domhandler_1.isText)(node))\n return node.data;\n return \"\";\n}\nexports.getText = getText;\n/**\n * Get a node's text content.\n *\n * @category Stringify\n * @param node Node to get the text content of.\n * @returns `node`'s text content.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent}\n */\nfunction textContent(node) {\n if (Array.isArray(node))\n return node.map(textContent).join(\"\");\n if ((0, domhandler_1.hasChildren)(node) && !(0, domhandler_1.isComment)(node)) {\n return textContent(node.children);\n }\n if ((0, domhandler_1.isText)(node))\n return node.data;\n return \"\";\n}\nexports.textContent = textContent;\n/**\n * Get a node's inner text.\n *\n * @category Stringify\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText}\n */\nfunction innerText(node) {\n if (Array.isArray(node))\n return node.map(innerText).join(\"\");\n if ((0, domhandler_1.hasChildren)(node) && (node.type === domelementtype_1.ElementType.Tag || (0, domhandler_1.isCDATA)(node))) {\n return innerText(node.children);\n }\n if ((0, domhandler_1.isText)(node))\n return node.data;\n return \"\";\n}\nexports.innerText = innerText;\n//# sourceMappingURL=stringify.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.prevElementSibling = exports.nextElementSibling = exports.getName = exports.hasAttrib = exports.getAttributeValue = exports.getSiblings = exports.getParent = exports.getChildren = void 0;\nvar domhandler_1 = require(\"domhandler\");\n/**\n * Get a node's children.\n *\n * @category Traversal\n * @param elem Node to get the children of.\n * @returns `elem`'s children, or an empty array.\n */\nfunction getChildren(elem) {\n return (0, domhandler_1.hasChildren)(elem) ? elem.children : [];\n}\nexports.getChildren = getChildren;\n/**\n * Get a node's parent.\n *\n * @category Traversal\n * @param elem Node to get the parent of.\n * @returns `elem`'s parent node.\n */\nfunction getParent(elem) {\n return elem.parent || null;\n}\nexports.getParent = getParent;\n/**\n * Gets an elements siblings, including the element itself.\n *\n * Attempts to get the children through the element's parent first. If we don't\n * have a parent (the element is a root node), we walk the element's `prev` &\n * `next` to get all remaining nodes.\n *\n * @category Traversal\n * @param elem Element to get the siblings of.\n * @returns `elem`'s siblings.\n */\nfunction getSiblings(elem) {\n var _a, _b;\n var parent = getParent(elem);\n if (parent != null)\n return getChildren(parent);\n var siblings = [elem];\n var prev = elem.prev, next = elem.next;\n while (prev != null) {\n siblings.unshift(prev);\n (_a = prev, prev = _a.prev);\n }\n while (next != null) {\n siblings.push(next);\n (_b = next, next = _b.next);\n }\n return siblings;\n}\nexports.getSiblings = getSiblings;\n/**\n * Gets an attribute from an element.\n *\n * @category Traversal\n * @param elem Element to check.\n * @param name Attribute name to retrieve.\n * @returns The element's attribute value, or `undefined`.\n */\nfunction getAttributeValue(elem, name) {\n var _a;\n return (_a = elem.attribs) === null || _a === void 0 ? void 0 : _a[name];\n}\nexports.getAttributeValue = getAttributeValue;\n/**\n * Checks whether an element has an attribute.\n *\n * @category Traversal\n * @param elem Element to check.\n * @param name Attribute name to look for.\n * @returns Returns whether `elem` has the attribute `name`.\n */\nfunction hasAttrib(elem, name) {\n return (elem.attribs != null &&\n Object.prototype.hasOwnProperty.call(elem.attribs, name) &&\n elem.attribs[name] != null);\n}\nexports.hasAttrib = hasAttrib;\n/**\n * Get the tag name of an element.\n *\n * @category Traversal\n * @param elem The element to get the name for.\n * @returns The tag name of `elem`.\n */\nfunction getName(elem) {\n return elem.name;\n}\nexports.getName = getName;\n/**\n * Returns the next element sibling of a node.\n *\n * @category Traversal\n * @param elem The element to get the next sibling of.\n * @returns `elem`'s next sibling that is a tag.\n */\nfunction nextElementSibling(elem) {\n var _a;\n var next = elem.next;\n while (next !== null && !(0, domhandler_1.isTag)(next))\n (_a = next, next = _a.next);\n return next;\n}\nexports.nextElementSibling = nextElementSibling;\n/**\n * Returns the previous element sibling of a node.\n *\n * @category Traversal\n * @param elem The element to get the previous sibling of.\n * @returns `elem`'s previous sibling that is a tag.\n */\nfunction prevElementSibling(elem) {\n var _a;\n var prev = elem.prev;\n while (prev !== null && !(0, domhandler_1.isTag)(prev))\n (_a = prev, prev = _a.prev);\n return prev;\n}\nexports.prevElementSibling = prevElementSibling;\n//# sourceMappingURL=traversal.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTML = exports.determineBranch = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0;\nvar decode_data_html_js_1 = __importDefault(require(\"./generated/decode-data-html.js\"));\nexports.htmlDecodeTree = decode_data_html_js_1.default;\nvar decode_data_xml_js_1 = __importDefault(require(\"./generated/decode-data-xml.js\"));\nexports.xmlDecodeTree = decode_data_xml_js_1.default;\nvar decode_codepoint_js_1 = __importDefault(require(\"./decode_codepoint.js\"));\nexports.decodeCodePoint = decode_codepoint_js_1.default;\nvar decode_codepoint_js_2 = require(\"./decode_codepoint.js\");\nObject.defineProperty(exports, \"replaceCodePoint\", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } });\nObject.defineProperty(exports, \"fromCodePoint\", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } });\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n /** Bit that needs to be set to convert an upper case ASCII character to lower case */\n CharCodes[CharCodes[\"To_LOWER_BIT\"] = 32] = \"To_LOWER_BIT\";\n})(CharCodes || (CharCodes = {}));\nvar BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {}));\nfunction getDecoder(decodeTree) {\n return function decodeHTMLBinary(str, strict) {\n var ret = \"\";\n var lastIdx = 0;\n var strIdx = 0;\n while ((strIdx = str.indexOf(\"&\", strIdx)) >= 0) {\n ret += str.slice(lastIdx, strIdx);\n lastIdx = strIdx;\n // Skip the \"&\"\n strIdx += 1;\n // If we have a numeric entity, handle this separately.\n if (str.charCodeAt(strIdx) === CharCodes.NUM) {\n // Skip the leading \"&#\". For hex entities, also skip the leading \"x\".\n var start = strIdx + 1;\n var base = 10;\n var cp = str.charCodeAt(start);\n if ((cp | CharCodes.To_LOWER_BIT) === CharCodes.LOWER_X) {\n base = 16;\n strIdx += 1;\n start += 1;\n }\n do\n cp = str.charCodeAt(++strIdx);\n while ((cp >= CharCodes.ZERO && cp <= CharCodes.NINE) ||\n (base === 16 &&\n (cp | CharCodes.To_LOWER_BIT) >= CharCodes.LOWER_A &&\n (cp | CharCodes.To_LOWER_BIT) <= CharCodes.LOWER_F));\n if (start !== strIdx) {\n var entity = str.substring(start, strIdx);\n var parsed = parseInt(entity, base);\n if (str.charCodeAt(strIdx) === CharCodes.SEMI) {\n strIdx += 1;\n }\n else if (strict) {\n continue;\n }\n ret += (0, decode_codepoint_js_1.default)(parsed);\n lastIdx = strIdx;\n }\n continue;\n }\n var resultIdx = 0;\n var excess = 1;\n var treeIdx = 0;\n var current = decodeTree[treeIdx];\n for (; strIdx < str.length; strIdx++, excess++) {\n treeIdx = determineBranch(decodeTree, current, treeIdx + 1, str.charCodeAt(strIdx));\n if (treeIdx < 0)\n break;\n current = decodeTree[treeIdx];\n var masked = current & BinTrieFlags.VALUE_LENGTH;\n // If the branch is a value, store it and continue\n if (masked) {\n // If we have a legacy entity while parsing strictly, just skip the number of bytes\n if (!strict || str.charCodeAt(strIdx) === CharCodes.SEMI) {\n resultIdx = treeIdx;\n excess = 0;\n }\n // The mask is the number of bytes of the value, including the current byte.\n var valueLength = (masked >> 14) - 1;\n if (valueLength === 0)\n break;\n treeIdx += valueLength;\n }\n }\n if (resultIdx !== 0) {\n var valueLength = (decodeTree[resultIdx] & BinTrieFlags.VALUE_LENGTH) >> 14;\n ret +=\n valueLength === 1\n ? String.fromCharCode(decodeTree[resultIdx] & ~BinTrieFlags.VALUE_LENGTH)\n : valueLength === 2\n ? String.fromCharCode(decodeTree[resultIdx + 1])\n : String.fromCharCode(decodeTree[resultIdx + 1], decodeTree[resultIdx + 2]);\n lastIdx = strIdx - excess + 1;\n }\n }\n return ret + str.slice(lastIdx);\n };\n}\nfunction determineBranch(decodeTree, current, nodeIdx, char) {\n var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n var jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n var value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIdx + value] - 1;\n }\n // Case 3: Multiple branches encoded in dictionary\n // Binary search for the character.\n var lo = nodeIdx;\n var hi = lo + branchCount - 1;\n while (lo <= hi) {\n var mid = (lo + hi) >>> 1;\n var midVal = decodeTree[mid];\n if (midVal < char) {\n lo = mid + 1;\n }\n else if (midVal > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[mid + branchCount];\n }\n }\n return -1;\n}\nexports.determineBranch = determineBranch;\nvar htmlDecoder = getDecoder(decode_data_html_js_1.default);\nvar xmlDecoder = getDecoder(decode_data_xml_js_1.default);\n/**\n * Decodes an HTML string, allowing for entities not terminated by a semi-colon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nfunction decodeHTML(str) {\n return htmlDecoder(str, false);\n}\nexports.decodeHTML = decodeHTML;\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semi-colon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nfunction decodeHTMLStrict(str) {\n return htmlDecoder(str, true);\n}\nexports.decodeHTMLStrict = decodeHTMLStrict;\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semi-colon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nfunction decodeXML(str) {\n return xmlDecoder(str, true);\n}\nexports.decodeXML = decodeXML;\n//# sourceMappingURL=decode.js.map","\"use strict\";\n// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.replaceCodePoint = exports.fromCodePoint = void 0;\nvar decodeMap = new Map([\n [0, 65533],\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\nexports.fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n var output = \"\";\n if (codePoint > 0xffff) {\n codePoint -= 0x10000;\n output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n codePoint = 0xdc00 | (codePoint & 0x3ff);\n }\n output += String.fromCharCode(codePoint);\n return output;\n};\nfunction replaceCodePoint(codePoint) {\n var _a;\n if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n return 0xfffd;\n }\n return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\nexports.replaceCodePoint = replaceCodePoint;\nfunction decodeCodePoint(codePoint) {\n return (0, exports.fromCodePoint)(replaceCodePoint(codePoint));\n}\nexports.default = decodeCodePoint;\n//# sourceMappingURL=decode_codepoint.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encodeNonAsciiHTML = exports.encodeHTML = void 0;\nvar encode_html_js_1 = __importDefault(require(\"./generated/encode-html.js\"));\nvar escape_js_1 = require(\"./escape.js\");\nvar htmlReplacer = /[\\t\\n!-,./:-@[-`\\f{-}$\\x80-\\uFFFF]/g;\n/**\n * Encodes all characters in the input using HTML entities. This includes\n * characters that are valid ASCII characters in HTML documents, such as `#`.\n *\n * To get a more compact output, consider using the `encodeNonAsciiHTML`\n * function, which will only encode characters that are not valid in HTML\n * documents, as well as non-ASCII characters.\n *\n * If a character has no equivalent entity, a numeric hexadecimal reference\n * (eg. `ü`) will be used.\n */\nfunction encodeHTML(data) {\n return encodeHTMLTrieRe(htmlReplacer, data);\n}\nexports.encodeHTML = encodeHTML;\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in HTML\n * documents using HTML entities. This function will not encode characters that\n * are valid in HTML documents, such as `#`.\n *\n * If a character has no equivalent entity, a numeric hexadecimal reference\n * (eg. `ü`) will be used.\n */\nfunction encodeNonAsciiHTML(data) {\n return encodeHTMLTrieRe(escape_js_1.xmlReplacer, data);\n}\nexports.encodeNonAsciiHTML = encodeNonAsciiHTML;\nfunction encodeHTMLTrieRe(regExp, str) {\n var ret = \"\";\n var lastIdx = 0;\n var match;\n while ((match = regExp.exec(str)) !== null) {\n var i = match.index;\n ret += str.substring(lastIdx, i);\n var char = str.charCodeAt(i);\n var next = encode_html_js_1.default.get(char);\n if (typeof next === \"object\") {\n // We are in a branch. Try to match the next char.\n if (i + 1 < str.length) {\n var nextChar = str.charCodeAt(i + 1);\n var value = typeof next.n === \"number\"\n ? next.n === nextChar\n ? next.o\n : undefined\n : next.n.get(nextChar);\n if (value !== undefined) {\n ret += value;\n lastIdx = regExp.lastIndex += 1;\n continue;\n }\n }\n next = next.v;\n }\n // We might have a tree node without a value; skip and use a numeric entitiy.\n if (next !== undefined) {\n ret += next;\n lastIdx = i + 1;\n }\n else {\n var cp = (0, escape_js_1.getCodePoint)(str, i);\n ret += \"&#x\".concat(cp.toString(16), \";\");\n // Increase by 1 if we have a surrogate pair\n lastIdx = regExp.lastIndex += Number(cp !== char);\n }\n }\n return ret + str.substr(lastIdx);\n}\n//# sourceMappingURL=encode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.getCodePoint = exports.xmlReplacer = void 0;\nexports.xmlReplacer = /[\"&'<>$\\x80-\\uFFFF]/g;\nvar xmlCodeMap = new Map([\n [34, \""\"],\n [38, \"&\"],\n [39, \"'\"],\n [60, \"<\"],\n [62, \">\"],\n]);\n// For compatibility with node < 4, we wrap `codePointAt`\nexports.getCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null\n ? function (str, index) { return str.codePointAt(index); }\n : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n function (c, index) {\n return (c.charCodeAt(index) & 0xfc00) === 0xd800\n ? (c.charCodeAt(index) - 0xd800) * 0x400 +\n c.charCodeAt(index + 1) -\n 0xdc00 +\n 0x10000\n : c.charCodeAt(index);\n };\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `ü`) will be used.\n */\nfunction encodeXML(str) {\n var ret = \"\";\n var lastIdx = 0;\n var match;\n while ((match = exports.xmlReplacer.exec(str)) !== null) {\n var i = match.index;\n var char = str.charCodeAt(i);\n var next = xmlCodeMap.get(char);\n if (next !== undefined) {\n ret += str.substring(lastIdx, i) + next;\n lastIdx = i + 1;\n }\n else {\n ret += \"\".concat(str.substring(lastIdx, i), \"&#x\").concat((0, exports.getCodePoint)(str, i).toString(16), \";\");\n // Increase by 1 if we have a surrogate pair\n lastIdx = exports.xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);\n }\n }\n return ret + str.substr(lastIdx);\n}\nexports.encodeXML = encodeXML;\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `ü`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nexports.escape = encodeXML;\nfunction getEscaper(regex, map) {\n return function escape(data) {\n var match;\n var lastIdx = 0;\n var result = \"\";\n while ((match = regex.exec(data))) {\n if (lastIdx !== match.index) {\n result += data.substring(lastIdx, match.index);\n }\n // We know that this chararcter will be in the map.\n result += map.get(match[0].charCodeAt(0));\n // Every match will be of length 1\n lastIdx = match.index + 1;\n }\n return result + data.substring(lastIdx);\n };\n}\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nexports.escapeUTF8 = getEscaper(/[&<>'\"]/g, xmlCodeMap);\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexports.escapeAttribute = getEscaper(/[\"&\\u00A0]/g, new Map([\n [34, \""\"],\n [38, \"&\"],\n [160, \" \"],\n]));\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexports.escapeText = getEscaper(/[&<>\\u00A0]/g, new Map([\n [38, \"&\"],\n [60, \"<\"],\n [62, \">\"],\n [160, \" \"],\n]));\n//# sourceMappingURL=escape.js.map","\"use strict\";\n// Generated using scripts/write-decode-map.ts\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = new Uint16Array(\n// prettier-ignore\n\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map(function (c) { return c.charCodeAt(0); }));\n//# sourceMappingURL=decode-data-html.js.map","\"use strict\";\n// Generated using scripts/write-decode-map.ts\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n .split(\"\")\n .map(function (c) { return c.charCodeAt(0); }));\n//# sourceMappingURL=decode-data-xml.js.map","\"use strict\";\n// Generated using scripts/write-encode-map.ts\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction restoreDiff(arr) {\n for (var i = 1; i < arr.length; i++) {\n arr[i][0] += arr[i - 1][0] + 1;\n }\n return arr;\n}\n// prettier-ignore\nexports.default = new Map(/* #__PURE__ */ restoreDiff([[9, \"	\"], [0, \"
\"], [22, \"!\"], [0, \""\"], [0, \"#\"], [0, \"$\"], [0, \"%\"], [0, \"&\"], [0, \"'\"], [0, \"(\"], [0, \")\"], [0, \"*\"], [0, \"+\"], [0, \",\"], [1, \".\"], [0, \"/\"], [10, \":\"], [0, \";\"], [0, { v: \"<\", n: 8402, o: \"<⃒\" }], [0, { v: \"=\", n: 8421, o: \"=⃥\" }], [0, { v: \">\", n: 8402, o: \">⃒\" }], [0, \"?\"], [0, \"@\"], [26, \"[\"], [0, \"\\"], [0, \"]\"], [0, \"^\"], [0, \"_\"], [0, \"`\"], [5, { n: 106, o: \"fj\" }], [20, \"{\"], [0, \"|\"], [0, \"}\"], [34, \" \"], [0, \"¡\"], [0, \"¢\"], [0, \"£\"], [0, \"¤\"], [0, \"¥\"], [0, \"¦\"], [0, \"§\"], [0, \"¨\"], [0, \"©\"], [0, \"ª\"], [0, \"«\"], [0, \"¬\"], [0, \"­\"], [0, \"®\"], [0, \"¯\"], [0, \"°\"], [0, \"±\"], [0, \"²\"], [0, \"³\"], [0, \"´\"], [0, \"µ\"], [0, \"¶\"], [0, \"·\"], [0, \"¸\"], [0, \"¹\"], [0, \"º\"], [0, \"»\"], [0, \"¼\"], [0, \"½\"], [0, \"¾\"], [0, \"¿\"], [0, \"À\"], [0, \"Á\"], [0, \"Â\"], [0, \"Ã\"], [0, \"Ä\"], [0, \"Å\"], [0, \"Æ\"], [0, \"Ç\"], [0, \"È\"], [0, \"É\"], [0, \"Ê\"], [0, \"Ë\"], [0, \"Ì\"], [0, \"Í\"], [0, \"Î\"], [0, \"Ï\"], [0, \"Ð\"], [0, \"Ñ\"], [0, \"Ò\"], [0, \"Ó\"], [0, \"Ô\"], [0, \"Õ\"], [0, \"Ö\"], [0, \"×\"], [0, \"Ø\"], [0, \"Ù\"], [0, \"Ú\"], [0, \"Û\"], [0, \"Ü\"], [0, \"Ý\"], [0, \"Þ\"], [0, \"ß\"], [0, \"à\"], [0, \"á\"], [0, \"â\"], [0, \"ã\"], [0, \"ä\"], [0, \"å\"], [0, \"æ\"], [0, \"ç\"], [0, \"è\"], [0, \"é\"], [0, \"ê\"], [0, \"ë\"], [0, \"ì\"], [0, \"í\"], [0, \"î\"], [0, \"ï\"], [0, \"ð\"], [0, \"ñ\"], [0, \"ò\"], [0, \"ó\"], [0, \"ô\"], [0, \"õ\"], [0, \"ö\"], [0, \"÷\"], [0, \"ø\"], [0, \"ù\"], [0, \"ú\"], [0, \"û\"], [0, \"ü\"], [0, \"ý\"], [0, \"þ\"], [0, \"ÿ\"], [0, \"Ā\"], [0, \"ā\"], [0, \"Ă\"], [0, \"ă\"], [0, \"Ą\"], [0, \"ą\"], [0, \"Ć\"], [0, \"ć\"], [0, \"Ĉ\"], [0, \"ĉ\"], [0, \"Ċ\"], [0, \"ċ\"], [0, \"Č\"], [0, \"č\"], [0, \"Ď\"], [0, \"ď\"], [0, \"Đ\"], [0, \"đ\"], [0, \"Ē\"], [0, \"ē\"], [2, \"Ė\"], [0, \"ė\"], [0, \"Ę\"], [0, \"ę\"], [0, \"Ě\"], [0, \"ě\"], [0, \"Ĝ\"], [0, \"ĝ\"], [0, \"Ğ\"], [0, \"ğ\"], [0, \"Ġ\"], [0, \"ġ\"], [0, \"Ģ\"], [1, \"Ĥ\"], [0, \"ĥ\"], [0, \"Ħ\"], [0, \"ħ\"], [0, \"Ĩ\"], [0, \"ĩ\"], [0, \"Ī\"], [0, \"ī\"], [2, \"Į\"], [0, \"į\"], [0, \"İ\"], [0, \"ı\"], [0, \"IJ\"], [0, \"ij\"], [0, \"Ĵ\"], [0, \"ĵ\"], [0, \"Ķ\"], [0, \"ķ\"], [0, \"ĸ\"], [0, \"Ĺ\"], [0, \"ĺ\"], [0, \"Ļ\"], [0, \"ļ\"], [0, \"Ľ\"], [0, \"ľ\"], [0, \"Ŀ\"], [0, \"ŀ\"], [0, \"Ł\"], [0, \"ł\"], [0, \"Ń\"], [0, \"ń\"], [0, \"Ņ\"], [0, \"ņ\"], [0, \"Ň\"], [0, \"ň\"], [0, \"ʼn\"], [0, \"Ŋ\"], [0, \"ŋ\"], [0, \"Ō\"], [0, \"ō\"], [2, \"Ő\"], [0, \"ő\"], [0, \"Œ\"], [0, \"œ\"], [0, \"Ŕ\"], [0, \"ŕ\"], [0, \"Ŗ\"], [0, \"ŗ\"], [0, \"Ř\"], [0, \"ř\"], [0, \"Ś\"], [0, \"ś\"], [0, \"Ŝ\"], [0, \"ŝ\"], [0, \"Ş\"], [0, \"ş\"], [0, \"Š\"], [0, \"š\"], [0, \"Ţ\"], [0, \"ţ\"], [0, \"Ť\"], [0, \"ť\"], [0, \"Ŧ\"], [0, \"ŧ\"], [0, \"Ũ\"], [0, \"ũ\"], [0, \"Ū\"], [0, \"ū\"], [0, \"Ŭ\"], [0, \"ŭ\"], [0, \"Ů\"], [0, \"ů\"], [0, \"Ű\"], [0, \"ű\"], [0, \"Ų\"], [0, \"ų\"], [0, \"Ŵ\"], [0, \"ŵ\"], [0, \"Ŷ\"], [0, \"ŷ\"], [0, \"Ÿ\"], [0, \"Ź\"], [0, \"ź\"], [0, \"Ż\"], [0, \"ż\"], [0, \"Ž\"], [0, \"ž\"], [19, \"ƒ\"], [34, \"Ƶ\"], [63, \"ǵ\"], [65, \"ȷ\"], [142, \"ˆ\"], [0, \"ˇ\"], [16, \"˘\"], [0, \"˙\"], [0, \"˚\"], [0, \"˛\"], [0, \"˜\"], [0, \"˝\"], [51, \"̑\"], [127, \"Α\"], [0, \"Β\"], [0, \"Γ\"], [0, \"Δ\"], [0, \"Ε\"], [0, \"Ζ\"], [0, \"Η\"], [0, \"Θ\"], [0, \"Ι\"], [0, \"Κ\"], [0, \"Λ\"], [0, \"Μ\"], [0, \"Ν\"], [0, \"Ξ\"], [0, \"Ο\"], [0, \"Π\"], [0, \"Ρ\"], [1, \"Σ\"], [0, \"Τ\"], [0, \"Υ\"], [0, \"Φ\"], [0, \"Χ\"], [0, \"Ψ\"], [0, \"Ω\"], [7, \"α\"], [0, \"β\"], [0, \"γ\"], [0, \"δ\"], [0, \"ε\"], [0, \"ζ\"], [0, \"η\"], [0, \"θ\"], [0, \"ι\"], [0, \"κ\"], [0, \"λ\"], [0, \"μ\"], [0, \"ν\"], [0, \"ξ\"], [0, \"ο\"], [0, \"π\"], [0, \"ρ\"], [0, \"ς\"], [0, \"σ\"], [0, \"τ\"], [0, \"υ\"], [0, \"φ\"], [0, \"χ\"], [0, \"ψ\"], [0, \"ω\"], [7, \"ϑ\"], [0, \"ϒ\"], [2, \"ϕ\"], [0, \"ϖ\"], [5, \"Ϝ\"], [0, \"ϝ\"], [18, \"ϰ\"], [0, \"ϱ\"], [3, \"ϵ\"], [0, \"϶\"], [10, \"Ё\"], [0, \"Ђ\"], [0, \"Ѓ\"], [0, \"Є\"], [0, \"Ѕ\"], [0, \"І\"], [0, \"Ї\"], [0, \"Ј\"], [0, \"Љ\"], [0, \"Њ\"], [0, \"Ћ\"], [0, \"Ќ\"], [1, \"Ў\"], [0, \"Џ\"], [0, \"А\"], [0, \"Б\"], [0, \"В\"], [0, \"Г\"], [0, \"Д\"], [0, \"Е\"], [0, \"Ж\"], [0, \"З\"], [0, \"И\"], [0, \"Й\"], [0, \"К\"], [0, \"Л\"], [0, \"М\"], [0, \"Н\"], [0, \"О\"], [0, \"П\"], [0, \"Р\"], [0, \"С\"], [0, \"Т\"], [0, \"У\"], [0, \"Ф\"], [0, \"Х\"], [0, \"Ц\"], [0, \"Ч\"], [0, \"Ш\"], [0, \"Щ\"], [0, \"Ъ\"], [0, \"Ы\"], [0, \"Ь\"], [0, \"Э\"], [0, \"Ю\"], [0, \"Я\"], [0, \"а\"], [0, \"б\"], [0, \"в\"], [0, \"г\"], [0, \"д\"], [0, \"е\"], [0, \"ж\"], [0, \"з\"], [0, \"и\"], [0, \"й\"], [0, \"к\"], [0, \"л\"], [0, \"м\"], [0, \"н\"], [0, \"о\"], [0, \"п\"], [0, \"р\"], [0, \"с\"], [0, \"т\"], [0, \"у\"], [0, \"ф\"], [0, \"х\"], [0, \"ц\"], [0, \"ч\"], [0, \"ш\"], [0, \"щ\"], [0, \"ъ\"], [0, \"ы\"], [0, \"ь\"], [0, \"э\"], [0, \"ю\"], [0, \"я\"], [1, \"ё\"], [0, \"ђ\"], [0, \"ѓ\"], [0, \"є\"], [0, \"ѕ\"], [0, \"і\"], [0, \"ї\"], [0, \"ј\"], [0, \"љ\"], [0, \"њ\"], [0, \"ћ\"], [0, \"ќ\"], [1, \"ў\"], [0, \"џ\"], [7074, \" \"], [0, \" \"], [0, \" \"], [0, \" \"], [1, \" \"], [0, \" \"], [0, \" \"], [0, \" \"], [0, \"​\"], [0, \"‌\"], [0, \"‍\"], [0, \"‎\"], [0, \"‏\"], [0, \"‐\"], [2, \"–\"], [0, \"—\"], [0, \"―\"], [0, \"‖\"], [1, \"‘\"], [0, \"’\"], [0, \"‚\"], [1, \"“\"], [0, \"”\"], [0, \"„\"], [1, \"†\"], [0, \"‡\"], [0, \"•\"], [2, \"‥\"], [0, \"…\"], [9, \"‰\"], [0, \"‱\"], [0, \"′\"], [0, \"″\"], [0, \"‴\"], [0, \"‵\"], [3, \"‹\"], [0, \"›\"], [3, \"‾\"], [2, \"⁁\"], [1, \"⁃\"], [0, \"⁄\"], [10, \"⁏\"], [7, \"⁗\"], [7, { v: \" \", n: 8202, o: \"  \" }], [0, \"⁠\"], [0, \"⁡\"], [0, \"⁢\"], [0, \"⁣\"], [72, \"€\"], [46, \"⃛\"], [0, \"⃜\"], [37, \"ℂ\"], [2, \"℅\"], [4, \"ℊ\"], [0, \"ℋ\"], [0, \"ℌ\"], [0, \"ℍ\"], [0, \"ℎ\"], [0, \"ℏ\"], [0, \"ℐ\"], [0, \"ℑ\"], [0, \"ℒ\"], [0, \"ℓ\"], [1, \"ℕ\"], [0, \"№\"], [0, \"℗\"], [0, \"℘\"], [0, \"ℙ\"], [0, \"ℚ\"], [0, \"ℛ\"], [0, \"ℜ\"], [0, \"ℝ\"], [0, \"℞\"], [3, \"™\"], [1, \"ℤ\"], [2, \"℧\"], [0, \"ℨ\"], [0, \"℩\"], [2, \"ℬ\"], [0, \"ℭ\"], [1, \"ℯ\"], [0, \"ℰ\"], [0, \"ℱ\"], [1, \"ℳ\"], [0, \"ℴ\"], [0, \"ℵ\"], [0, \"ℶ\"], [0, \"ℷ\"], [0, \"ℸ\"], [12, \"ⅅ\"], [0, \"ⅆ\"], [0, \"ⅇ\"], [0, \"ⅈ\"], [10, \"⅓\"], [0, \"⅔\"], [0, \"⅕\"], [0, \"⅖\"], [0, \"⅗\"], [0, \"⅘\"], [0, \"⅙\"], [0, \"⅚\"], [0, \"⅛\"], [0, \"⅜\"], [0, \"⅝\"], [0, \"⅞\"], [49, \"←\"], [0, \"↑\"], [0, \"→\"], [0, \"↓\"], [0, \"↔\"], [0, \"↕\"], [0, \"↖\"], [0, \"↗\"], [0, \"↘\"], [0, \"↙\"], [0, \"↚\"], [0, \"↛\"], [1, { v: \"↝\", n: 824, o: \"↝̸\" }], [0, \"↞\"], [0, \"↟\"], [0, \"↠\"], [0, \"↡\"], [0, \"↢\"], [0, \"↣\"], [0, \"↤\"], [0, \"↥\"], [0, \"↦\"], [0, \"↧\"], [1, \"↩\"], [0, \"↪\"], [0, \"↫\"], [0, \"↬\"], [0, \"↭\"], [0, \"↮\"], [1, \"↰\"], [0, \"↱\"], [0, \"↲\"], [0, \"↳\"], [1, \"↵\"], [0, \"↶\"], [0, \"↷\"], [2, \"↺\"], [0, \"↻\"], [0, \"↼\"], [0, \"↽\"], [0, \"↾\"], [0, \"↿\"], [0, \"⇀\"], [0, \"⇁\"], [0, \"⇂\"], [0, \"⇃\"], [0, \"⇄\"], [0, \"⇅\"], [0, \"⇆\"], [0, \"⇇\"], [0, \"⇈\"], [0, \"⇉\"], [0, \"⇊\"], [0, \"⇋\"], [0, \"⇌\"], [0, \"⇍\"], [0, \"⇎\"], [0, \"⇏\"], [0, \"⇐\"], [0, \"⇑\"], [0, \"⇒\"], [0, \"⇓\"], [0, \"⇔\"], [0, \"⇕\"], [0, \"⇖\"], [0, \"⇗\"], [0, \"⇘\"], [0, \"⇙\"], [0, \"⇚\"], [0, \"⇛\"], [1, \"⇝\"], [6, \"⇤\"], [0, \"⇥\"], [15, \"⇵\"], [7, \"⇽\"], [0, \"⇾\"], [0, \"⇿\"], [0, \"∀\"], [0, \"∁\"], [0, { v: \"∂\", n: 824, o: \"∂̸\" }], [0, \"∃\"], [0, \"∄\"], [0, \"∅\"], [1, \"∇\"], [0, \"∈\"], [0, \"∉\"], [1, \"∋\"], [0, \"∌\"], [2, \"∏\"], [0, \"∐\"], [0, \"∑\"], [0, \"−\"], [0, \"∓\"], [0, \"∔\"], [1, \"∖\"], [0, \"∗\"], [0, \"∘\"], [1, \"√\"], [2, \"∝\"], [0, \"∞\"], [0, \"∟\"], [0, { v: \"∠\", n: 8402, o: \"∠⃒\" }], [0, \"∡\"], [0, \"∢\"], [0, \"∣\"], [0, \"∤\"], [0, \"∥\"], [0, \"∦\"], [0, \"∧\"], [0, \"∨\"], [0, { v: \"∩\", n: 65024, o: \"∩︀\" }], [0, { v: \"∪\", n: 65024, o: \"∪︀\" }], [0, \"∫\"], [0, \"∬\"], [0, \"∭\"], [0, \"∮\"], [0, \"∯\"], [0, \"∰\"], [0, \"∱\"], [0, \"∲\"], [0, \"∳\"], [0, \"∴\"], [0, \"∵\"], [0, \"∶\"], [0, \"∷\"], [0, \"∸\"], [1, \"∺\"], [0, \"∻\"], [0, { v: \"∼\", n: 8402, o: \"∼⃒\" }], [0, { v: \"∽\", n: 817, o: \"∽̱\" }], [0, { v: \"∾\", n: 819, o: \"∾̳\" }], [0, \"∿\"], [0, \"≀\"], [0, \"≁\"], [0, { v: \"≂\", n: 824, o: \"≂̸\" }], [0, \"≃\"], [0, \"≄\"], [0, \"≅\"], [0, \"≆\"], [0, \"≇\"], [0, \"≈\"], [0, \"≉\"], [0, \"≊\"], [0, { v: \"≋\", n: 824, o: \"≋̸\" }], [0, \"≌\"], [0, { v: \"≍\", n: 8402, o: \"≍⃒\" }], [0, { v: \"≎\", n: 824, o: \"≎̸\" }], [0, { v: \"≏\", n: 824, o: \"≏̸\" }], [0, { v: \"≐\", n: 824, o: \"≐̸\" }], [0, \"≑\"], [0, \"≒\"], [0, \"≓\"], [0, \"≔\"], [0, \"≕\"], [0, \"≖\"], [0, \"≗\"], [1, \"≙\"], [0, \"≚\"], [1, \"≜\"], [2, \"≟\"], [0, \"≠\"], [0, { v: \"≡\", n: 8421, o: \"≡⃥\" }], [0, \"≢\"], [1, { v: \"≤\", n: 8402, o: \"≤⃒\" }], [0, { v: \"≥\", n: 8402, o: \"≥⃒\" }], [0, { v: \"≦\", n: 824, o: \"≦̸\" }], [0, { v: \"≧\", n: 824, o: \"≧̸\" }], [0, { v: \"≨\", n: 65024, o: \"≨︀\" }], [0, { v: \"≩\", n: 65024, o: \"≩︀\" }], [0, { v: \"≪\", n: new Map(/* #__PURE__ */ restoreDiff([[824, \"≪̸\"], [7577, \"≪⃒\"]])) }], [0, { v: \"≫\", n: new Map(/* #__PURE__ */ restoreDiff([[824, \"≫̸\"], [7577, \"≫⃒\"]])) }], [0, \"≬\"], [0, \"≭\"], [0, \"≮\"], [0, \"≯\"], [0, \"≰\"], [0, \"≱\"], [0, \"≲\"], [0, \"≳\"], [0, \"≴\"], [0, \"≵\"], [0, \"≶\"], [0, \"≷\"], [0, \"≸\"], [0, \"≹\"], [0, \"≺\"], [0, \"≻\"], [0, \"≼\"], [0, \"≽\"], [0, \"≾\"], [0, { v: \"≿\", n: 824, o: \"≿̸\" }], [0, \"⊀\"], [0, \"⊁\"], [0, { v: \"⊂\", n: 8402, o: \"⊂⃒\" }], [0, { v: \"⊃\", n: 8402, o: \"⊃⃒\" }], [0, \"⊄\"], [0, \"⊅\"], [0, \"⊆\"], [0, \"⊇\"], [0, \"⊈\"], [0, \"⊉\"], [0, { v: \"⊊\", n: 65024, o: \"⊊︀\" }], [0, { v: \"⊋\", n: 65024, o: \"⊋︀\" }], [1, \"⊍\"], [0, \"⊎\"], [0, { v: \"⊏\", n: 824, o: \"⊏̸\" }], [0, { v: \"⊐\", n: 824, o: \"⊐̸\" }], [0, \"⊑\"], [0, \"⊒\"], [0, { v: \"⊓\", n: 65024, o: \"⊓︀\" }], [0, { v: \"⊔\", n: 65024, o: \"⊔︀\" }], [0, \"⊕\"], [0, \"⊖\"], [0, \"⊗\"], [0, \"⊘\"], [0, \"⊙\"], [0, \"⊚\"], [0, \"⊛\"], [1, \"⊝\"], [0, \"⊞\"], [0, \"⊟\"], [0, \"⊠\"], [0, \"⊡\"], [0, \"⊢\"], [0, \"⊣\"], [0, \"⊤\"], [0, \"⊥\"], [1, \"⊧\"], [0, \"⊨\"], [0, \"⊩\"], [0, \"⊪\"], [0, \"⊫\"], [0, \"⊬\"], [0, \"⊭\"], [0, \"⊮\"], [0, \"⊯\"], [0, \"⊰\"], [1, \"⊲\"], [0, \"⊳\"], [0, { v: \"⊴\", n: 8402, o: \"⊴⃒\" }], [0, { v: \"⊵\", n: 8402, o: \"⊵⃒\" }], [0, \"⊶\"], [0, \"⊷\"], [0, \"⊸\"], [0, \"⊹\"], [0, \"⊺\"], [0, \"⊻\"], [1, \"⊽\"], [0, \"⊾\"], [0, \"⊿\"], [0, \"⋀\"], [0, \"⋁\"], [0, \"⋂\"], [0, \"⋃\"], [0, \"⋄\"], [0, \"⋅\"], [0, \"⋆\"], [0, \"⋇\"], [0, \"⋈\"], [0, \"⋉\"], [0, \"⋊\"], [0, \"⋋\"], [0, \"⋌\"], [0, \"⋍\"], [0, \"⋎\"], [0, \"⋏\"], [0, \"⋐\"], [0, \"⋑\"], [0, \"⋒\"], [0, \"⋓\"], [0, \"⋔\"], [0, \"⋕\"], [0, \"⋖\"], [0, \"⋗\"], [0, { v: \"⋘\", n: 824, o: \"⋘̸\" }], [0, { v: \"⋙\", n: 824, o: \"⋙̸\" }], [0, { v: \"⋚\", n: 65024, o: \"⋚︀\" }], [0, { v: \"⋛\", n: 65024, o: \"⋛︀\" }], [2, \"⋞\"], [0, \"⋟\"], [0, \"⋠\"], [0, \"⋡\"], [0, \"⋢\"], [0, \"⋣\"], [2, \"⋦\"], [0, \"⋧\"], [0, \"⋨\"], [0, \"⋩\"], [0, \"⋪\"], [0, \"⋫\"], [0, \"⋬\"], [0, \"⋭\"], [0, \"⋮\"], [0, \"⋯\"], [0, \"⋰\"], [0, \"⋱\"], [0, \"⋲\"], [0, \"⋳\"], [0, \"⋴\"], [0, { v: \"⋵\", n: 824, o: \"⋵̸\" }], [0, \"⋶\"], [0, \"⋷\"], [1, { v: \"⋹\", n: 824, o: \"⋹̸\" }], [0, \"⋺\"], [0, \"⋻\"], [0, \"⋼\"], [0, \"⋽\"], [0, \"⋾\"], [6, \"⌅\"], [0, \"⌆\"], [1, \"⌈\"], [0, \"⌉\"], [0, \"⌊\"], [0, \"⌋\"], [0, \"⌌\"], [0, \"⌍\"], [0, \"⌎\"], [0, \"⌏\"], [0, \"⌐\"], [1, \"⌒\"], [0, \"⌓\"], [1, \"⌕\"], [0, \"⌖\"], [5, \"⌜\"], [0, \"⌝\"], [0, \"⌞\"], [0, \"⌟\"], [2, \"⌢\"], [0, \"⌣\"], [9, \"⌭\"], [0, \"⌮\"], [7, \"⌶\"], [6, \"⌽\"], [1, \"⌿\"], [60, \"⍼\"], [51, \"⎰\"], [0, \"⎱\"], [2, \"⎴\"], [0, \"⎵\"], [0, \"⎶\"], [37, \"⏜\"], [0, \"⏝\"], [0, \"⏞\"], [0, \"⏟\"], [2, \"⏢\"], [4, \"⏧\"], [59, \"␣\"], [164, \"Ⓢ\"], [55, \"─\"], [1, \"│\"], [9, \"┌\"], [3, \"┐\"], [3, \"└\"], [3, \"┘\"], [3, \"├\"], [7, \"┤\"], [7, \"┬\"], [7, \"┴\"], [7, \"┼\"], [19, \"═\"], [0, \"║\"], [0, \"╒\"], [0, \"╓\"], [0, \"╔\"], [0, \"╕\"], [0, \"╖\"], [0, \"╗\"], [0, \"╘\"], [0, \"╙\"], [0, \"╚\"], [0, \"╛\"], [0, \"╜\"], [0, \"╝\"], [0, \"╞\"], [0, \"╟\"], [0, \"╠\"], [0, \"╡\"], [0, \"╢\"], [0, \"╣\"], [0, \"╤\"], [0, \"╥\"], [0, \"╦\"], [0, \"╧\"], [0, \"╨\"], [0, \"╩\"], [0, \"╪\"], [0, \"╫\"], [0, \"╬\"], [19, \"▀\"], [3, \"▄\"], [3, \"█\"], [8, \"░\"], [0, \"▒\"], [0, \"▓\"], [13, \"□\"], [8, \"▪\"], [0, \"▫\"], [1, \"▭\"], [0, \"▮\"], [2, \"▱\"], [1, \"△\"], [0, \"▴\"], [0, \"▵\"], [2, \"▸\"], [0, \"▹\"], [3, \"▽\"], [0, \"▾\"], [0, \"▿\"], [2, \"◂\"], [0, \"◃\"], [6, \"◊\"], [0, \"○\"], [32, \"◬\"], [2, \"◯\"], [8, \"◸\"], [0, \"◹\"], [0, \"◺\"], [0, \"◻\"], [0, \"◼\"], [8, \"★\"], [0, \"☆\"], [7, \"☎\"], [49, \"♀\"], [1, \"♂\"], [29, \"♠\"], [2, \"♣\"], [1, \"♥\"], [0, \"♦\"], [3, \"♪\"], [2, \"♭\"], [0, \"♮\"], [0, \"♯\"], [163, \"✓\"], [3, \"✗\"], [8, \"✠\"], [21, \"✶\"], [33, \"❘\"], [25, \"❲\"], [0, \"❳\"], [84, \"⟈\"], [0, \"⟉\"], [28, \"⟦\"], [0, \"⟧\"], [0, \"⟨\"], [0, \"⟩\"], [0, \"⟪\"], [0, \"⟫\"], [0, \"⟬\"], [0, \"⟭\"], [7, \"⟵\"], [0, \"⟶\"], [0, \"⟷\"], [0, \"⟸\"], [0, \"⟹\"], [0, \"⟺\"], [1, \"⟼\"], [2, \"⟿\"], [258, \"⤂\"], [0, \"⤃\"], [0, \"⤄\"], [0, \"⤅\"], [6, \"⤌\"], [0, \"⤍\"], [0, \"⤎\"], [0, \"⤏\"], [0, \"⤐\"], [0, \"⤑\"], [0, \"⤒\"], [0, \"⤓\"], [2, \"⤖\"], [2, \"⤙\"], [0, \"⤚\"], [0, \"⤛\"], [0, \"⤜\"], [0, \"⤝\"], [0, \"⤞\"], [0, \"⤟\"], [0, \"⤠\"], [2, \"⤣\"], [0, \"⤤\"], [0, \"⤥\"], [0, \"⤦\"], [0, \"⤧\"], [0, \"⤨\"], [0, \"⤩\"], [0, \"⤪\"], [8, { v: \"⤳\", n: 824, o: \"⤳̸\" }], [1, \"⤵\"], [0, \"⤶\"], [0, \"⤷\"], [0, \"⤸\"], [0, \"⤹\"], [2, \"⤼\"], [0, \"⤽\"], [7, \"⥅\"], [2, \"⥈\"], [0, \"⥉\"], [0, \"⥊\"], [0, \"⥋\"], [2, \"⥎\"], [0, \"⥏\"], [0, \"⥐\"], [0, \"⥑\"], [0, \"⥒\"], [0, \"⥓\"], [0, \"⥔\"], [0, \"⥕\"], [0, \"⥖\"], [0, \"⥗\"], [0, \"⥘\"], [0, \"⥙\"], [0, \"⥚\"], [0, \"⥛\"], [0, \"⥜\"], [0, \"⥝\"], [0, \"⥞\"], [0, \"⥟\"], [0, \"⥠\"], [0, \"⥡\"], [0, \"⥢\"], [0, \"⥣\"], [0, \"⥤\"], [0, \"⥥\"], [0, \"⥦\"], [0, \"⥧\"], [0, \"⥨\"], [0, \"⥩\"], [0, \"⥪\"], [0, \"⥫\"], [0, \"⥬\"], [0, \"⥭\"], [0, \"⥮\"], [0, \"⥯\"], [0, \"⥰\"], [0, \"⥱\"], [0, \"⥲\"], [0, \"⥳\"], [0, \"⥴\"], [0, \"⥵\"], [0, \"⥶\"], [1, \"⥸\"], [0, \"⥹\"], [1, \"⥻\"], [0, \"⥼\"], [0, \"⥽\"], [0, \"⥾\"], [0, \"⥿\"], [5, \"⦅\"], [0, \"⦆\"], [4, \"⦋\"], [0, \"⦌\"], [0, \"⦍\"], [0, \"⦎\"], [0, \"⦏\"], [0, \"⦐\"], [0, \"⦑\"], [0, \"⦒\"], [0, \"⦓\"], [0, \"⦔\"], [0, \"⦕\"], [0, \"⦖\"], [3, \"⦚\"], [1, \"⦜\"], [0, \"⦝\"], [6, \"⦤\"], [0, \"⦥\"], [0, \"⦦\"], [0, \"⦧\"], [0, \"⦨\"], [0, \"⦩\"], [0, \"⦪\"], [0, \"⦫\"], [0, \"⦬\"], [0, \"⦭\"], [0, \"⦮\"], [0, \"⦯\"], [0, \"⦰\"], [0, \"⦱\"], [0, \"⦲\"], [0, \"⦳\"], [0, \"⦴\"], [0, \"⦵\"], [0, \"⦶\"], [0, \"⦷\"], [1, \"⦹\"], [1, \"⦻\"], [0, \"⦼\"], [1, \"⦾\"], [0, \"⦿\"], [0, \"⧀\"], [0, \"⧁\"], [0, \"⧂\"], [0, \"⧃\"], [0, \"⧄\"], [0, \"⧅\"], [3, \"⧉\"], [3, \"⧍\"], [0, \"⧎\"], [0, { v: \"⧏\", n: 824, o: \"⧏̸\" }], [0, { v: \"⧐\", n: 824, o: \"⧐̸\" }], [11, \"⧜\"], [0, \"⧝\"], [0, \"⧞\"], [4, \"⧣\"], [0, \"⧤\"], [0, \"⧥\"], [5, \"⧫\"], [8, \"⧴\"], [1, \"⧶\"], [9, \"⨀\"], [0, \"⨁\"], [0, \"⨂\"], [1, \"⨄\"], [1, \"⨆\"], [5, \"⨌\"], [0, \"⨍\"], [2, \"⨐\"], [0, \"⨑\"], [0, \"⨒\"], [0, \"⨓\"], [0, \"⨔\"], [0, \"⨕\"], [0, \"⨖\"], [0, \"⨗\"], [10, \"⨢\"], [0, \"⨣\"], [0, \"⨤\"], [0, \"⨥\"], [0, \"⨦\"], [0, \"⨧\"], [1, \"⨩\"], [0, \"⨪\"], [2, \"⨭\"], [0, \"⨮\"], [0, \"⨯\"], [0, \"⨰\"], [0, \"⨱\"], [1, \"⨳\"], [0, \"⨴\"], [0, \"⨵\"], [0, \"⨶\"], [0, \"⨷\"], [0, \"⨸\"], [0, \"⨹\"], [0, \"⨺\"], [0, \"⨻\"], [0, \"⨼\"], [2, \"⨿\"], [0, \"⩀\"], [1, \"⩂\"], [0, \"⩃\"], [0, \"⩄\"], [0, \"⩅\"], [0, \"⩆\"], [0, \"⩇\"], [0, \"⩈\"], [0, \"⩉\"], [0, \"⩊\"], [0, \"⩋\"], [0, \"⩌\"], [0, \"⩍\"], [2, \"⩐\"], [2, \"⩓\"], [0, \"⩔\"], [0, \"⩕\"], [0, \"⩖\"], [0, \"⩗\"], [0, \"⩘\"], [1, \"⩚\"], [0, \"⩛\"], [0, \"⩜\"], [0, \"⩝\"], [1, \"⩟\"], [6, \"⩦\"], [3, \"⩪\"], [2, { v: \"⩭\", n: 824, o: \"⩭̸\" }], [0, \"⩮\"], [0, \"⩯\"], [0, { v: \"⩰\", n: 824, o: \"⩰̸\" }], [0, \"⩱\"], [0, \"⩲\"], [0, \"⩳\"], [0, \"⩴\"], [0, \"⩵\"], [1, \"⩷\"], [0, \"⩸\"], [0, \"⩹\"], [0, \"⩺\"], [0, \"⩻\"], [0, \"⩼\"], [0, { v: \"⩽\", n: 824, o: \"⩽̸\" }], [0, { v: \"⩾\", n: 824, o: \"⩾̸\" }], [0, \"⩿\"], [0, \"⪀\"], [0, \"⪁\"], [0, \"⪂\"], [0, \"⪃\"], [0, \"⪄\"], [0, \"⪅\"], [0, \"⪆\"], [0, \"⪇\"], [0, \"⪈\"], [0, \"⪉\"], [0, \"⪊\"], [0, \"⪋\"], [0, \"⪌\"], [0, \"⪍\"], [0, \"⪎\"], [0, \"⪏\"], [0, \"⪐\"], [0, \"⪑\"], [0, \"⪒\"], [0, \"⪓\"], [0, \"⪔\"], [0, \"⪕\"], [0, \"⪖\"], [0, \"⪗\"], [0, \"⪘\"], [0, \"⪙\"], [0, \"⪚\"], [2, \"⪝\"], [0, \"⪞\"], [0, \"⪟\"], [0, \"⪠\"], [0, { v: \"⪡\", n: 824, o: \"⪡̸\" }], [0, { v: \"⪢\", n: 824, o: \"⪢̸\" }], [1, \"⪤\"], [0, \"⪥\"], [0, \"⪦\"], [0, \"⪧\"], [0, \"⪨\"], [0, \"⪩\"], [0, \"⪪\"], [0, \"⪫\"], [0, { v: \"⪬\", n: 65024, o: \"⪬︀\" }], [0, { v: \"⪭\", n: 65024, o: \"⪭︀\" }], [0, \"⪮\"], [0, { v: \"⪯\", n: 824, o: \"⪯̸\" }], [0, { v: \"⪰\", n: 824, o: \"⪰̸\" }], [2, \"⪳\"], [0, \"⪴\"], [0, \"⪵\"], [0, \"⪶\"], [0, \"⪷\"], [0, \"⪸\"], [0, \"⪹\"], [0, \"⪺\"], [0, \"⪻\"], [0, \"⪼\"], [0, \"⪽\"], [0, \"⪾\"], [0, \"⪿\"], [0, \"⫀\"], [0, \"⫁\"], [0, \"⫂\"], [0, \"⫃\"], [0, \"⫄\"], [0, { v: \"⫅\", n: 824, o: \"⫅̸\" }], [0, { v: \"⫆\", n: 824, o: \"⫆̸\" }], [0, \"⫇\"], [0, \"⫈\"], [2, { v: \"⫋\", n: 65024, o: \"⫋︀\" }], [0, { v: \"⫌\", n: 65024, o: \"⫌︀\" }], [2, \"⫏\"], [0, \"⫐\"], [0, \"⫑\"], [0, \"⫒\"], [0, \"⫓\"], [0, \"⫔\"], [0, \"⫕\"], [0, \"⫖\"], [0, \"⫗\"], [0, \"⫘\"], [0, \"⫙\"], [0, \"⫚\"], [0, \"⫛\"], [8, \"⫤\"], [1, \"⫦\"], [0, \"⫧\"], [0, \"⫨\"], [0, \"⫩\"], [1, \"⫫\"], [0, \"⫬\"], [0, \"⫭\"], [0, \"⫮\"], [0, \"⫯\"], [0, \"⫰\"], [0, \"⫱\"], [0, \"⫲\"], [0, \"⫳\"], [9, { v: \"⫽\", n: 8421, o: \"⫽⃥\" }], [44343, { n: new Map(/* #__PURE__ */ restoreDiff([[56476, \"𝒜\"], [1, \"𝒞\"], [0, \"𝒟\"], [2, \"𝒢\"], [2, \"𝒥\"], [0, \"𝒦\"], [2, \"𝒩\"], [0, \"𝒪\"], [0, \"𝒫\"], [0, \"𝒬\"], [1, \"𝒮\"], [0, \"𝒯\"], [0, \"𝒰\"], [0, \"𝒱\"], [0, \"𝒲\"], [0, \"𝒳\"], [0, \"𝒴\"], [0, \"𝒵\"], [0, \"𝒶\"], [0, \"𝒷\"], [0, \"𝒸\"], [0, \"𝒹\"], [1, \"𝒻\"], [1, \"𝒽\"], [0, \"𝒾\"], [0, \"𝒿\"], [0, \"𝓀\"], [0, \"𝓁\"], [0, \"𝓂\"], [0, \"𝓃\"], [1, \"𝓅\"], [0, \"𝓆\"], [0, \"𝓇\"], [0, \"𝓈\"], [0, \"𝓉\"], [0, \"𝓊\"], [0, \"𝓋\"], [0, \"𝓌\"], [0, \"𝓍\"], [0, \"𝓎\"], [0, \"𝓏\"], [52, \"𝔄\"], [0, \"𝔅\"], [1, \"𝔇\"], [0, \"𝔈\"], [0, \"𝔉\"], [0, \"𝔊\"], [2, \"𝔍\"], [0, \"𝔎\"], [0, \"𝔏\"], [0, \"𝔐\"], [0, \"𝔑\"], [0, \"𝔒\"], [0, \"𝔓\"], [0, \"𝔔\"], [1, \"𝔖\"], [0, \"𝔗\"], [0, \"𝔘\"], [0, \"𝔙\"], [0, \"𝔚\"], [0, \"𝔛\"], [0, \"𝔜\"], [1, \"𝔞\"], [0, \"𝔟\"], [0, \"𝔠\"], [0, \"𝔡\"], [0, \"𝔢\"], [0, \"𝔣\"], [0, \"𝔤\"], [0, \"𝔥\"], [0, \"𝔦\"], [0, \"𝔧\"], [0, \"𝔨\"], [0, \"𝔩\"], [0, \"𝔪\"], [0, \"𝔫\"], [0, \"𝔬\"], [0, \"𝔭\"], [0, \"𝔮\"], [0, \"𝔯\"], [0, \"𝔰\"], [0, \"𝔱\"], [0, \"𝔲\"], [0, \"𝔳\"], [0, \"𝔴\"], [0, \"𝔵\"], [0, \"𝔶\"], [0, \"𝔷\"], [0, \"𝔸\"], [0, \"𝔹\"], [1, \"𝔻\"], [0, \"𝔼\"], [0, \"𝔽\"], [0, \"𝔾\"], [1, \"𝕀\"], [0, \"𝕁\"], [0, \"𝕂\"], [0, \"𝕃\"], [0, \"𝕄\"], [1, \"𝕆\"], [3, \"𝕊\"], [0, \"𝕋\"], [0, \"𝕌\"], [0, \"𝕍\"], [0, \"𝕎\"], [0, \"𝕏\"], [0, \"𝕐\"], [1, \"𝕒\"], [0, \"𝕓\"], [0, \"𝕔\"], [0, \"𝕕\"], [0, \"𝕖\"], [0, \"𝕗\"], [0, \"𝕘\"], [0, \"𝕙\"], [0, \"𝕚\"], [0, \"𝕛\"], [0, \"𝕜\"], [0, \"𝕝\"], [0, \"𝕞\"], [0, \"𝕟\"], [0, \"𝕠\"], [0, \"𝕡\"], [0, \"𝕢\"], [0, \"𝕣\"], [0, \"𝕤\"], [0, \"𝕥\"], [0, \"𝕦\"], [0, \"𝕧\"], [0, \"𝕨\"], [0, \"𝕩\"], [0, \"𝕪\"], [0, \"𝕫\"]])) }], [8906, \"ff\"], [0, \"fi\"], [0, \"fl\"], [0, \"ffi\"], [0, \"ffl\"]]));\n//# sourceMappingURL=encode-html.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.encodeHTML5 = exports.encodeHTML4 = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = exports.EncodingMode = exports.DecodingMode = exports.EntityLevel = void 0;\nvar decode_js_1 = require(\"./decode.js\");\nvar encode_js_1 = require(\"./encode.js\");\nvar escape_js_1 = require(\"./escape.js\");\n/** The level of entities to support. */\nvar EntityLevel;\n(function (EntityLevel) {\n /** Support only XML entities. */\n EntityLevel[EntityLevel[\"XML\"] = 0] = \"XML\";\n /** Support HTML entities, which are a superset of XML entities. */\n EntityLevel[EntityLevel[\"HTML\"] = 1] = \"HTML\";\n})(EntityLevel = exports.EntityLevel || (exports.EntityLevel = {}));\n/** Determines whether some entities are allowed to be written without a trailing `;`. */\nvar DecodingMode;\n(function (DecodingMode) {\n /** Support legacy HTML entities. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Do not support legacy HTML entities. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n})(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {}));\nvar EncodingMode;\n(function (EncodingMode) {\n /**\n * The output is UTF-8 encoded. Only characters that need escaping within\n * XML will be escaped.\n */\n EncodingMode[EncodingMode[\"UTF8\"] = 0] = \"UTF8\";\n /**\n * The output consists only of ASCII characters. Characters that need\n * escaping within HTML, and characters that aren't ASCII characters will\n * be escaped.\n */\n EncodingMode[EncodingMode[\"ASCII\"] = 1] = \"ASCII\";\n /**\n * Encode all characters that have an equivalent entity, as well as all\n * characters that are not ASCII characters.\n */\n EncodingMode[EncodingMode[\"Extensive\"] = 2] = \"Extensive\";\n /**\n * Encode all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n */\n EncodingMode[EncodingMode[\"Attribute\"] = 3] = \"Attribute\";\n /**\n * Encode all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n */\n EncodingMode[EncodingMode[\"Text\"] = 4] = \"Text\";\n})(EncodingMode = exports.EncodingMode || (exports.EncodingMode = {}));\n/**\n * Decodes a string with entities.\n *\n * @param data String to decode.\n * @param options Decoding options.\n */\nfunction decode(data, options) {\n if (options === void 0) { options = EntityLevel.XML; }\n var opts = typeof options === \"number\" ? { level: options } : options;\n if (opts.level === EntityLevel.HTML) {\n if (opts.mode === DecodingMode.Strict) {\n return (0, decode_js_1.decodeHTMLStrict)(data);\n }\n return (0, decode_js_1.decodeHTML)(data);\n }\n return (0, decode_js_1.decodeXML)(data);\n}\nexports.decode = decode;\n/**\n * Decodes a string with entities. Does not allow missing trailing semicolons for entities.\n *\n * @param data String to decode.\n * @param options Decoding options.\n * @deprecated Use `decode` with the `mode` set to `Strict`.\n */\nfunction decodeStrict(data, options) {\n if (options === void 0) { options = EntityLevel.XML; }\n var opts = typeof options === \"number\" ? { level: options } : options;\n if (opts.level === EntityLevel.HTML) {\n if (opts.mode === DecodingMode.Legacy) {\n return (0, decode_js_1.decodeHTML)(data);\n }\n return (0, decode_js_1.decodeHTMLStrict)(data);\n }\n return (0, decode_js_1.decodeXML)(data);\n}\nexports.decodeStrict = decodeStrict;\n/**\n * Encodes a string with entities.\n *\n * @param data String to encode.\n * @param options Encoding options.\n */\nfunction encode(data, options) {\n if (options === void 0) { options = EntityLevel.XML; }\n var opts = typeof options === \"number\" ? { level: options } : options;\n // Mode `UTF8` just escapes XML entities\n if (opts.mode === EncodingMode.UTF8)\n return (0, escape_js_1.escapeUTF8)(data);\n if (opts.mode === EncodingMode.Attribute)\n return (0, escape_js_1.escapeAttribute)(data);\n if (opts.mode === EncodingMode.Text)\n return (0, escape_js_1.escapeText)(data);\n if (opts.level === EntityLevel.HTML) {\n if (opts.mode === EncodingMode.ASCII) {\n return (0, encode_js_1.encodeNonAsciiHTML)(data);\n }\n return (0, encode_js_1.encodeHTML)(data);\n }\n // ASCII and Extensive are equivalent\n return (0, escape_js_1.encodeXML)(data);\n}\nexports.encode = encode;\nvar escape_js_2 = require(\"./escape.js\");\nObject.defineProperty(exports, \"encodeXML\", { enumerable: true, get: function () { return escape_js_2.encodeXML; } });\nObject.defineProperty(exports, \"escape\", { enumerable: true, get: function () { return escape_js_2.escape; } });\nObject.defineProperty(exports, \"escapeUTF8\", { enumerable: true, get: function () { return escape_js_2.escapeUTF8; } });\nObject.defineProperty(exports, \"escapeAttribute\", { enumerable: true, get: function () { return escape_js_2.escapeAttribute; } });\nObject.defineProperty(exports, \"escapeText\", { enumerable: true, get: function () { return escape_js_2.escapeText; } });\nvar encode_js_2 = require(\"./encode.js\");\nObject.defineProperty(exports, \"encodeHTML\", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeNonAsciiHTML\", { enumerable: true, get: function () { return encode_js_2.encodeNonAsciiHTML; } });\n// Legacy aliases (deprecated)\nObject.defineProperty(exports, \"encodeHTML4\", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeHTML5\", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } });\nvar decode_js_2 = require(\"./decode.js\");\nObject.defineProperty(exports, \"decodeXML\", { enumerable: true, get: function () { return decode_js_2.decodeXML; } });\nObject.defineProperty(exports, \"decodeHTML\", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTMLStrict\", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });\n// Legacy aliases (deprecated)\nObject.defineProperty(exports, \"decodeHTML4\", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML5\", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML4Strict\", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeHTML5Strict\", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeXMLStrict\", { enumerable: true, get: function () { return decode_js_2.decodeXML; } });\n//# sourceMappingURL=index.js.map","'use strict';\n\nmodule.exports = string => {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a \\unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Parser = void 0;\nvar Tokenizer_js_1 = __importStar(require(\"./Tokenizer.js\"));\nvar decode_js_1 = require(\"entities/lib/decode.js\");\nvar formTags = new Set([\n \"input\",\n \"option\",\n \"optgroup\",\n \"select\",\n \"button\",\n \"datalist\",\n \"textarea\",\n]);\nvar pTag = new Set([\"p\"]);\nvar tableSectionTags = new Set([\"thead\", \"tbody\"]);\nvar ddtTags = new Set([\"dd\", \"dt\"]);\nvar rtpTags = new Set([\"rt\", \"rp\"]);\nvar openImpliesClose = new Map([\n [\"tr\", new Set([\"tr\", \"th\", \"td\"])],\n [\"th\", new Set([\"th\"])],\n [\"td\", new Set([\"thead\", \"th\", \"td\"])],\n [\"body\", new Set([\"head\", \"link\", \"script\"])],\n [\"li\", new Set([\"li\"])],\n [\"p\", pTag],\n [\"h1\", pTag],\n [\"h2\", pTag],\n [\"h3\", pTag],\n [\"h4\", pTag],\n [\"h5\", pTag],\n [\"h6\", pTag],\n [\"select\", formTags],\n [\"input\", formTags],\n [\"output\", formTags],\n [\"button\", formTags],\n [\"datalist\", formTags],\n [\"textarea\", formTags],\n [\"option\", new Set([\"option\"])],\n [\"optgroup\", new Set([\"optgroup\", \"option\"])],\n [\"dd\", ddtTags],\n [\"dt\", ddtTags],\n [\"address\", pTag],\n [\"article\", pTag],\n [\"aside\", pTag],\n [\"blockquote\", pTag],\n [\"details\", pTag],\n [\"div\", pTag],\n [\"dl\", pTag],\n [\"fieldset\", pTag],\n [\"figcaption\", pTag],\n [\"figure\", pTag],\n [\"footer\", pTag],\n [\"form\", pTag],\n [\"header\", pTag],\n [\"hr\", pTag],\n [\"main\", pTag],\n [\"nav\", pTag],\n [\"ol\", pTag],\n [\"pre\", pTag],\n [\"section\", pTag],\n [\"table\", pTag],\n [\"ul\", pTag],\n [\"rt\", rtpTags],\n [\"rp\", rtpTags],\n [\"tbody\", tableSectionTags],\n [\"tfoot\", tableSectionTags],\n]);\nvar voidElements = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\nvar foreignContextElements = new Set([\"math\", \"svg\"]);\nvar htmlIntegrationElements = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignobject\",\n \"desc\",\n \"title\",\n]);\nvar reNameEnd = /\\s|\\//;\nvar Parser = /** @class */ (function () {\n function Parser(cbs, options) {\n if (options === void 0) { options = {}; }\n var _a, _b, _c, _d, _e;\n this.options = options;\n /** The start index of the last event. */\n this.startIndex = 0;\n /** The end index of the last event. */\n this.endIndex = 0;\n /**\n * Store the start index of the current open tag,\n * so we can update the start index for attributes.\n */\n this.openTagStart = 0;\n this.tagname = \"\";\n this.attribname = \"\";\n this.attribvalue = \"\";\n this.attribs = null;\n this.stack = [];\n this.foreignContext = [];\n this.buffers = [];\n this.bufferOffset = 0;\n /** The index of the last written buffer. Used when resuming after a `pause()`. */\n this.writeIndex = 0;\n /** Indicates whether the parser has finished running / `.end` has been called. */\n this.ended = false;\n this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};\n this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== void 0 ? _a : !options.xmlMode;\n this.lowerCaseAttributeNames =\n (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : !options.xmlMode;\n this.tokenizer = new ((_c = options.Tokenizer) !== null && _c !== void 0 ? _c : Tokenizer_js_1.default)(this.options, this);\n (_e = (_d = this.cbs).onparserinit) === null || _e === void 0 ? void 0 : _e.call(_d, this);\n }\n // Tokenizer event handlers\n /** @internal */\n Parser.prototype.ontext = function (start, endIndex) {\n var _a, _b;\n var data = this.getSlice(start, endIndex);\n this.endIndex = endIndex - 1;\n (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, data);\n this.startIndex = endIndex;\n };\n /** @internal */\n Parser.prototype.ontextentity = function (cp) {\n var _a, _b;\n /*\n * Entities can be emitted on the character, or directly after.\n * We use the section start here to get accurate indices.\n */\n var idx = this.tokenizer.getSectionStart();\n this.endIndex = idx - 1;\n (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, (0, decode_js_1.fromCodePoint)(cp));\n this.startIndex = idx;\n };\n Parser.prototype.isVoidElement = function (name) {\n return !this.options.xmlMode && voidElements.has(name);\n };\n /** @internal */\n Parser.prototype.onopentagname = function (start, endIndex) {\n this.endIndex = endIndex;\n var name = this.getSlice(start, endIndex);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n this.emitOpenTag(name);\n };\n Parser.prototype.emitOpenTag = function (name) {\n var _a, _b, _c, _d;\n this.openTagStart = this.startIndex;\n this.tagname = name;\n var impliesClose = !this.options.xmlMode && openImpliesClose.get(name);\n if (impliesClose) {\n while (this.stack.length > 0 &&\n impliesClose.has(this.stack[this.stack.length - 1])) {\n var el = this.stack.pop();\n (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, el, true);\n }\n }\n if (!this.isVoidElement(name)) {\n this.stack.push(name);\n if (foreignContextElements.has(name)) {\n this.foreignContext.push(true);\n }\n else if (htmlIntegrationElements.has(name)) {\n this.foreignContext.push(false);\n }\n }\n (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);\n if (this.cbs.onopentag)\n this.attribs = {};\n };\n Parser.prototype.endOpenTag = function (isImplied) {\n var _a, _b;\n this.startIndex = this.openTagStart;\n if (this.attribs) {\n (_b = (_a = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a, this.tagname, this.attribs, isImplied);\n this.attribs = null;\n }\n if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {\n this.cbs.onclosetag(this.tagname, true);\n }\n this.tagname = \"\";\n };\n /** @internal */\n Parser.prototype.onopentagend = function (endIndex) {\n this.endIndex = endIndex;\n this.endOpenTag(false);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n };\n /** @internal */\n Parser.prototype.onclosetag = function (start, endIndex) {\n var _a, _b, _c, _d, _e, _f;\n this.endIndex = endIndex;\n var name = this.getSlice(start, endIndex);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n if (foreignContextElements.has(name) ||\n htmlIntegrationElements.has(name)) {\n this.foreignContext.pop();\n }\n if (!this.isVoidElement(name)) {\n var pos = this.stack.lastIndexOf(name);\n if (pos !== -1) {\n if (this.cbs.onclosetag) {\n var count = this.stack.length - pos;\n while (count--) {\n // We know the stack has sufficient elements.\n this.cbs.onclosetag(this.stack.pop(), count !== 0);\n }\n }\n else\n this.stack.length = pos;\n }\n else if (!this.options.xmlMode && name === \"p\") {\n // Implicit open before close\n this.emitOpenTag(\"p\");\n this.closeCurrentTag(true);\n }\n }\n else if (!this.options.xmlMode && name === \"br\") {\n // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.\n (_b = (_a = this.cbs).onopentagname) === null || _b === void 0 ? void 0 : _b.call(_a, \"br\");\n (_d = (_c = this.cbs).onopentag) === null || _d === void 0 ? void 0 : _d.call(_c, \"br\", {}, true);\n (_f = (_e = this.cbs).onclosetag) === null || _f === void 0 ? void 0 : _f.call(_e, \"br\", false);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n };\n /** @internal */\n Parser.prototype.onselfclosingtag = function (endIndex) {\n this.endIndex = endIndex;\n if (this.options.xmlMode ||\n this.options.recognizeSelfClosing ||\n this.foreignContext[this.foreignContext.length - 1]) {\n this.closeCurrentTag(false);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n else {\n // Ignore the fact that the tag is self-closing.\n this.onopentagend(endIndex);\n }\n };\n Parser.prototype.closeCurrentTag = function (isOpenImplied) {\n var _a, _b;\n var name = this.tagname;\n this.endOpenTag(isOpenImplied);\n // Self-closing tags will be on the top of the stack\n if (this.stack[this.stack.length - 1] === name) {\n // If the opening tag isn't implied, the closing tag has to be implied.\n (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, name, !isOpenImplied);\n this.stack.pop();\n }\n };\n /** @internal */\n Parser.prototype.onattribname = function (start, endIndex) {\n this.startIndex = start;\n var name = this.getSlice(start, endIndex);\n this.attribname = this.lowerCaseAttributeNames\n ? name.toLowerCase()\n : name;\n };\n /** @internal */\n Parser.prototype.onattribdata = function (start, endIndex) {\n this.attribvalue += this.getSlice(start, endIndex);\n };\n /** @internal */\n Parser.prototype.onattribentity = function (cp) {\n this.attribvalue += (0, decode_js_1.fromCodePoint)(cp);\n };\n /** @internal */\n Parser.prototype.onattribend = function (quote, endIndex) {\n var _a, _b;\n this.endIndex = endIndex;\n (_b = (_a = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a, this.attribname, this.attribvalue, quote === Tokenizer_js_1.QuoteType.Double\n ? '\"'\n : quote === Tokenizer_js_1.QuoteType.Single\n ? \"'\"\n : quote === Tokenizer_js_1.QuoteType.NoValue\n ? undefined\n : null);\n if (this.attribs &&\n !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {\n this.attribs[this.attribname] = this.attribvalue;\n }\n this.attribvalue = \"\";\n };\n Parser.prototype.getInstructionName = function (value) {\n var idx = value.search(reNameEnd);\n var name = idx < 0 ? value : value.substr(0, idx);\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n return name;\n };\n /** @internal */\n Parser.prototype.ondeclaration = function (start, endIndex) {\n this.endIndex = endIndex;\n var value = this.getSlice(start, endIndex);\n if (this.cbs.onprocessinginstruction) {\n var name = this.getInstructionName(value);\n this.cbs.onprocessinginstruction(\"!\".concat(name), \"!\".concat(value));\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n };\n /** @internal */\n Parser.prototype.onprocessinginstruction = function (start, endIndex) {\n this.endIndex = endIndex;\n var value = this.getSlice(start, endIndex);\n if (this.cbs.onprocessinginstruction) {\n var name = this.getInstructionName(value);\n this.cbs.onprocessinginstruction(\"?\".concat(name), \"?\".concat(value));\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n };\n /** @internal */\n Parser.prototype.oncomment = function (start, endIndex, offset) {\n var _a, _b, _c, _d;\n this.endIndex = endIndex;\n (_b = (_a = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a, this.getSlice(start, endIndex - offset));\n (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n };\n /** @internal */\n Parser.prototype.oncdata = function (start, endIndex, offset) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n this.endIndex = endIndex;\n var value = this.getSlice(start, endIndex - offset);\n if (this.options.xmlMode || this.options.recognizeCDATA) {\n (_b = (_a = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a);\n (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);\n (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);\n }\n else {\n (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, \"[CDATA[\".concat(value, \"]]\"));\n (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);\n }\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n };\n /** @internal */\n Parser.prototype.onend = function () {\n var _a, _b;\n if (this.cbs.onclosetag) {\n // Set the end index for all remaining tags\n this.endIndex = this.startIndex;\n for (var i = this.stack.length; i > 0; this.cbs.onclosetag(this.stack[--i], true))\n ;\n }\n (_b = (_a = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n /**\n * Resets the parser to a blank state, ready to parse a new HTML document\n */\n Parser.prototype.reset = function () {\n var _a, _b, _c, _d;\n (_b = (_a = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a);\n this.tokenizer.reset();\n this.tagname = \"\";\n this.attribname = \"\";\n this.attribs = null;\n this.stack.length = 0;\n this.startIndex = 0;\n this.endIndex = 0;\n (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);\n this.buffers.length = 0;\n this.bufferOffset = 0;\n this.writeIndex = 0;\n this.ended = false;\n };\n /**\n * Resets the parser, then parses a complete document and\n * pushes it to the handler.\n *\n * @param data Document to parse.\n */\n Parser.prototype.parseComplete = function (data) {\n this.reset();\n this.end(data);\n };\n Parser.prototype.getSlice = function (start, end) {\n while (start - this.bufferOffset >= this.buffers[0].length) {\n this.shiftBuffer();\n }\n var str = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);\n while (end - this.bufferOffset > this.buffers[0].length) {\n this.shiftBuffer();\n str += this.buffers[0].slice(0, end - this.bufferOffset);\n }\n return str;\n };\n Parser.prototype.shiftBuffer = function () {\n this.bufferOffset += this.buffers[0].length;\n this.writeIndex--;\n this.buffers.shift();\n };\n /**\n * Parses a chunk of data and calls the corresponding callbacks.\n *\n * @param chunk Chunk to parse.\n */\n Parser.prototype.write = function (chunk) {\n var _a, _b;\n if (this.ended) {\n (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".write() after done!\"));\n return;\n }\n this.buffers.push(chunk);\n if (this.tokenizer.running) {\n this.tokenizer.write(chunk);\n this.writeIndex++;\n }\n };\n /**\n * Parses the end of the buffer and clears the stack, calls onend.\n *\n * @param chunk Optional final chunk to parse.\n */\n Parser.prototype.end = function (chunk) {\n var _a, _b;\n if (this.ended) {\n (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, Error(\".end() after done!\"));\n return;\n }\n if (chunk)\n this.write(chunk);\n this.ended = true;\n this.tokenizer.end();\n };\n /**\n * Pauses parsing. The parser won't emit events until `resume` is called.\n */\n Parser.prototype.pause = function () {\n this.tokenizer.pause();\n };\n /**\n * Resumes parsing after `pause` was called.\n */\n Parser.prototype.resume = function () {\n this.tokenizer.resume();\n while (this.tokenizer.running &&\n this.writeIndex < this.buffers.length) {\n this.tokenizer.write(this.buffers[this.writeIndex++]);\n }\n if (this.ended)\n this.tokenizer.end();\n };\n /**\n * Alias of `write`, for backwards compatibility.\n *\n * @param chunk Chunk to parse.\n * @deprecated\n */\n Parser.prototype.parseChunk = function (chunk) {\n this.write(chunk);\n };\n /**\n * Alias of `end`, for backwards compatibility.\n *\n * @param chunk Optional final chunk to parse.\n * @deprecated\n */\n Parser.prototype.done = function (chunk) {\n this.end(chunk);\n };\n return Parser;\n}());\nexports.Parser = Parser;\n//# sourceMappingURL=Parser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.QuoteType = void 0;\nvar decode_js_1 = require(\"entities/lib/decode.js\");\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"Tab\"] = 9] = \"Tab\";\n CharCodes[CharCodes[\"NewLine\"] = 10] = \"NewLine\";\n CharCodes[CharCodes[\"FormFeed\"] = 12] = \"FormFeed\";\n CharCodes[CharCodes[\"CarriageReturn\"] = 13] = \"CarriageReturn\";\n CharCodes[CharCodes[\"Space\"] = 32] = \"Space\";\n CharCodes[CharCodes[\"ExclamationMark\"] = 33] = \"ExclamationMark\";\n CharCodes[CharCodes[\"Num\"] = 35] = \"Num\";\n CharCodes[CharCodes[\"Amp\"] = 38] = \"Amp\";\n CharCodes[CharCodes[\"SingleQuote\"] = 39] = \"SingleQuote\";\n CharCodes[CharCodes[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n CharCodes[CharCodes[\"Dash\"] = 45] = \"Dash\";\n CharCodes[CharCodes[\"Slash\"] = 47] = \"Slash\";\n CharCodes[CharCodes[\"Zero\"] = 48] = \"Zero\";\n CharCodes[CharCodes[\"Nine\"] = 57] = \"Nine\";\n CharCodes[CharCodes[\"Semi\"] = 59] = \"Semi\";\n CharCodes[CharCodes[\"Lt\"] = 60] = \"Lt\";\n CharCodes[CharCodes[\"Eq\"] = 61] = \"Eq\";\n CharCodes[CharCodes[\"Gt\"] = 62] = \"Gt\";\n CharCodes[CharCodes[\"Questionmark\"] = 63] = \"Questionmark\";\n CharCodes[CharCodes[\"UpperA\"] = 65] = \"UpperA\";\n CharCodes[CharCodes[\"LowerA\"] = 97] = \"LowerA\";\n CharCodes[CharCodes[\"UpperF\"] = 70] = \"UpperF\";\n CharCodes[CharCodes[\"LowerF\"] = 102] = \"LowerF\";\n CharCodes[CharCodes[\"UpperZ\"] = 90] = \"UpperZ\";\n CharCodes[CharCodes[\"LowerZ\"] = 122] = \"LowerZ\";\n CharCodes[CharCodes[\"LowerX\"] = 120] = \"LowerX\";\n CharCodes[CharCodes[\"OpeningSquareBracket\"] = 91] = \"OpeningSquareBracket\";\n})(CharCodes || (CharCodes = {}));\n/** All the states the tokenizer can be in. */\nvar State;\n(function (State) {\n State[State[\"Text\"] = 1] = \"Text\";\n State[State[\"BeforeTagName\"] = 2] = \"BeforeTagName\";\n State[State[\"InTagName\"] = 3] = \"InTagName\";\n State[State[\"InSelfClosingTag\"] = 4] = \"InSelfClosingTag\";\n State[State[\"BeforeClosingTagName\"] = 5] = \"BeforeClosingTagName\";\n State[State[\"InClosingTagName\"] = 6] = \"InClosingTagName\";\n State[State[\"AfterClosingTagName\"] = 7] = \"AfterClosingTagName\";\n // Attributes\n State[State[\"BeforeAttributeName\"] = 8] = \"BeforeAttributeName\";\n State[State[\"InAttributeName\"] = 9] = \"InAttributeName\";\n State[State[\"AfterAttributeName\"] = 10] = \"AfterAttributeName\";\n State[State[\"BeforeAttributeValue\"] = 11] = \"BeforeAttributeValue\";\n State[State[\"InAttributeValueDq\"] = 12] = \"InAttributeValueDq\";\n State[State[\"InAttributeValueSq\"] = 13] = \"InAttributeValueSq\";\n State[State[\"InAttributeValueNq\"] = 14] = \"InAttributeValueNq\";\n // Declarations\n State[State[\"BeforeDeclaration\"] = 15] = \"BeforeDeclaration\";\n State[State[\"InDeclaration\"] = 16] = \"InDeclaration\";\n // Processing instructions\n State[State[\"InProcessingInstruction\"] = 17] = \"InProcessingInstruction\";\n // Comments & CDATA\n State[State[\"BeforeComment\"] = 18] = \"BeforeComment\";\n State[State[\"CDATASequence\"] = 19] = \"CDATASequence\";\n State[State[\"InSpecialComment\"] = 20] = \"InSpecialComment\";\n State[State[\"InCommentLike\"] = 21] = \"InCommentLike\";\n // Special tags\n State[State[\"BeforeSpecialS\"] = 22] = \"BeforeSpecialS\";\n State[State[\"SpecialStartSequence\"] = 23] = \"SpecialStartSequence\";\n State[State[\"InSpecialTag\"] = 24] = \"InSpecialTag\";\n State[State[\"BeforeEntity\"] = 25] = \"BeforeEntity\";\n State[State[\"BeforeNumericEntity\"] = 26] = \"BeforeNumericEntity\";\n State[State[\"InNamedEntity\"] = 27] = \"InNamedEntity\";\n State[State[\"InNumericEntity\"] = 28] = \"InNumericEntity\";\n State[State[\"InHexEntity\"] = 29] = \"InHexEntity\";\n})(State || (State = {}));\nfunction isWhitespace(c) {\n return (c === CharCodes.Space ||\n c === CharCodes.NewLine ||\n c === CharCodes.Tab ||\n c === CharCodes.FormFeed ||\n c === CharCodes.CarriageReturn);\n}\nfunction isEndOfTagSection(c) {\n return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);\n}\nfunction isNumber(c) {\n return c >= CharCodes.Zero && c <= CharCodes.Nine;\n}\nfunction isASCIIAlpha(c) {\n return ((c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||\n (c >= CharCodes.UpperA && c <= CharCodes.UpperZ));\n}\nfunction isHexDigit(c) {\n return ((c >= CharCodes.UpperA && c <= CharCodes.UpperF) ||\n (c >= CharCodes.LowerA && c <= CharCodes.LowerF));\n}\nvar QuoteType;\n(function (QuoteType) {\n QuoteType[QuoteType[\"NoValue\"] = 0] = \"NoValue\";\n QuoteType[QuoteType[\"Unquoted\"] = 1] = \"Unquoted\";\n QuoteType[QuoteType[\"Single\"] = 2] = \"Single\";\n QuoteType[QuoteType[\"Double\"] = 3] = \"Double\";\n})(QuoteType = exports.QuoteType || (exports.QuoteType = {}));\n/**\n * Sequences used to match longer strings.\n *\n * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End\n * sequences with an increased offset.\n */\nvar Sequences = {\n Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]),\n CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]),\n CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]),\n ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]),\n StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]),\n TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`\n};\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(_a, cbs) {\n var _b = _a.xmlMode, xmlMode = _b === void 0 ? false : _b, _c = _a.decodeEntities, decodeEntities = _c === void 0 ? true : _c;\n this.cbs = cbs;\n /** The current state the tokenizer is in. */\n this.state = State.Text;\n /** The read buffer. */\n this.buffer = \"\";\n /** The beginning of the section that is currently being read. */\n this.sectionStart = 0;\n /** The index within the buffer that we are currently looking at. */\n this.index = 0;\n /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n this.baseState = State.Text;\n /** For special parsing behavior inside of script and style tags. */\n this.isSpecial = false;\n /** Indicates whether the tokenizer has been paused. */\n this.running = true;\n /** The offset of the current buffer. */\n this.offset = 0;\n this.sequenceIndex = 0;\n this.trieIndex = 0;\n this.trieCurrent = 0;\n /** For named entities, the index of the value. For numeric entities, the code point. */\n this.entityResult = 0;\n this.entityExcess = 0;\n this.xmlMode = xmlMode;\n this.decodeEntities = decodeEntities;\n this.entityTrie = xmlMode ? decode_js_1.xmlDecodeTree : decode_js_1.htmlDecodeTree;\n }\n Tokenizer.prototype.reset = function () {\n this.state = State.Text;\n this.buffer = \"\";\n this.sectionStart = 0;\n this.index = 0;\n this.baseState = State.Text;\n this.currentSequence = undefined;\n this.running = true;\n this.offset = 0;\n };\n Tokenizer.prototype.write = function (chunk) {\n this.offset += this.buffer.length;\n this.buffer = chunk;\n this.parse();\n };\n Tokenizer.prototype.end = function () {\n if (this.running)\n this.finish();\n };\n Tokenizer.prototype.pause = function () {\n this.running = false;\n };\n Tokenizer.prototype.resume = function () {\n this.running = true;\n if (this.index < this.buffer.length + this.offset) {\n this.parse();\n }\n };\n /**\n * The current index within all of the written data.\n */\n Tokenizer.prototype.getIndex = function () {\n return this.index;\n };\n /**\n * The start of the current section.\n */\n Tokenizer.prototype.getSectionStart = function () {\n return this.sectionStart;\n };\n Tokenizer.prototype.stateText = function (c) {\n if (c === CharCodes.Lt ||\n (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))) {\n if (this.index > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, this.index);\n }\n this.state = State.BeforeTagName;\n this.sectionStart = this.index;\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.state = State.BeforeEntity;\n }\n };\n Tokenizer.prototype.stateSpecialStartSequence = function (c) {\n var isEnd = this.sequenceIndex === this.currentSequence.length;\n var isMatch = isEnd\n ? // If we are at the end of the sequence, make sure the tag name has ended\n isEndOfTagSection(c)\n : // Otherwise, do a case-insensitive comparison\n (c | 0x20) === this.currentSequence[this.sequenceIndex];\n if (!isMatch) {\n this.isSpecial = false;\n }\n else if (!isEnd) {\n this.sequenceIndex++;\n return;\n }\n this.sequenceIndex = 0;\n this.state = State.InTagName;\n this.stateInTagName(c);\n };\n /** Look for an end tag. For <title> tags, also decode entities. */\n Tokenizer.prototype.stateInSpecialTag = function (c) {\n if (this.sequenceIndex === this.currentSequence.length) {\n if (c === CharCodes.Gt || isWhitespace(c)) {\n var endOfText = this.index - this.currentSequence.length;\n if (this.sectionStart < endOfText) {\n // Spoof the index so that reported locations match up.\n var actualIndex = this.index;\n this.index = endOfText;\n this.cbs.ontext(this.sectionStart, endOfText);\n this.index = actualIndex;\n }\n this.isSpecial = false;\n this.sectionStart = endOfText + 2; // Skip over the `</`\n this.stateInClosingTagName(c);\n return; // We are done; skip the rest of the function.\n }\n this.sequenceIndex = 0;\n }\n if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {\n this.sequenceIndex += 1;\n }\n else if (this.sequenceIndex === 0) {\n if (this.currentSequence === Sequences.TitleEnd) {\n // We have to parse entities in <title> tags.\n if (this.decodeEntities && c === CharCodes.Amp) {\n this.state = State.BeforeEntity;\n }\n }\n else if (this.fastForwardTo(CharCodes.Lt)) {\n // Outside of <title> tags, we can fast-forward.\n this.sequenceIndex = 1;\n }\n }\n else {\n // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.\n this.sequenceIndex = Number(c === CharCodes.Lt);\n }\n };\n Tokenizer.prototype.stateCDATASequence = function (c) {\n if (c === Sequences.Cdata[this.sequenceIndex]) {\n if (++this.sequenceIndex === Sequences.Cdata.length) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CdataEnd;\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n }\n }\n else {\n this.sequenceIndex = 0;\n this.state = State.InDeclaration;\n this.stateInDeclaration(c); // Reconsume the character\n }\n };\n /**\n * When we wait for one specific character, we can speed things up\n * by skipping through the buffer until we find it.\n *\n * @returns Whether the character was found.\n */\n Tokenizer.prototype.fastForwardTo = function (c) {\n while (++this.index < this.buffer.length + this.offset) {\n if (this.buffer.charCodeAt(this.index - this.offset) === c) {\n return true;\n }\n }\n /*\n * We increment the index at the end of the `parse` loop,\n * so set it to `buffer.length - 1` here.\n *\n * TODO: Refactor `parse` to increment index before calling states.\n */\n this.index = this.buffer.length + this.offset - 1;\n return false;\n };\n /**\n * Comments and CDATA end with `-->` and `]]>`.\n *\n * Their common qualities are:\n * - Their end sequences have a distinct character they start with.\n * - That character is then repeated, so we have to check multiple repeats.\n * - All characters but the start character of the sequence can be skipped.\n */\n Tokenizer.prototype.stateInCommentLike = function (c) {\n if (c === this.currentSequence[this.sequenceIndex]) {\n if (++this.sequenceIndex === this.currentSequence.length) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, this.index, 2);\n }\n else {\n this.cbs.oncomment(this.sectionStart, this.index, 2);\n }\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n this.state = State.Text;\n }\n }\n else if (this.sequenceIndex === 0) {\n // Fast-forward to the first character of the sequence\n if (this.fastForwardTo(this.currentSequence[0])) {\n this.sequenceIndex = 1;\n }\n }\n else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n // Allow long sequences, eg. --->, ]]]>\n this.sequenceIndex = 0;\n }\n };\n /**\n * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.\n *\n * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).\n * We allow anything that wouldn't end the tag.\n */\n Tokenizer.prototype.isTagStartChar = function (c) {\n return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);\n };\n Tokenizer.prototype.startSpecial = function (sequence, offset) {\n this.isSpecial = true;\n this.currentSequence = sequence;\n this.sequenceIndex = offset;\n this.state = State.SpecialStartSequence;\n };\n Tokenizer.prototype.stateBeforeTagName = function (c) {\n if (c === CharCodes.ExclamationMark) {\n this.state = State.BeforeDeclaration;\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.Questionmark) {\n this.state = State.InProcessingInstruction;\n this.sectionStart = this.index + 1;\n }\n else if (this.isTagStartChar(c)) {\n var lower = c | 0x20;\n this.sectionStart = this.index;\n if (!this.xmlMode && lower === Sequences.TitleEnd[2]) {\n this.startSpecial(Sequences.TitleEnd, 3);\n }\n else {\n this.state =\n !this.xmlMode && lower === Sequences.ScriptEnd[2]\n ? State.BeforeSpecialS\n : State.InTagName;\n }\n }\n else if (c === CharCodes.Slash) {\n this.state = State.BeforeClosingTagName;\n }\n else {\n this.state = State.Text;\n this.stateText(c);\n }\n };\n Tokenizer.prototype.stateInTagName = function (c) {\n if (isEndOfTagSection(c)) {\n this.cbs.onopentagname(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n };\n Tokenizer.prototype.stateBeforeClosingTagName = function (c) {\n if (isWhitespace(c)) {\n // Ignore\n }\n else if (c === CharCodes.Gt) {\n this.state = State.Text;\n }\n else {\n this.state = this.isTagStartChar(c)\n ? State.InClosingTagName\n : State.InSpecialComment;\n this.sectionStart = this.index;\n }\n };\n Tokenizer.prototype.stateInClosingTagName = function (c) {\n if (c === CharCodes.Gt || isWhitespace(c)) {\n this.cbs.onclosetag(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.AfterClosingTagName;\n this.stateAfterClosingTagName(c);\n }\n };\n Tokenizer.prototype.stateAfterClosingTagName = function (c) {\n // Skip everything until \">\"\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n };\n Tokenizer.prototype.stateBeforeAttributeName = function (c) {\n if (c === CharCodes.Gt) {\n this.cbs.onopentagend(this.index);\n if (this.isSpecial) {\n this.state = State.InSpecialTag;\n this.sequenceIndex = 0;\n }\n else {\n this.state = State.Text;\n }\n this.baseState = this.state;\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.Slash) {\n this.state = State.InSelfClosingTag;\n }\n else if (!isWhitespace(c)) {\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n };\n Tokenizer.prototype.stateInSelfClosingTag = function (c) {\n if (c === CharCodes.Gt) {\n this.cbs.onselfclosingtag(this.index);\n this.state = State.Text;\n this.baseState = State.Text;\n this.sectionStart = this.index + 1;\n this.isSpecial = false; // Reset special state, in case of self-closing special tags\n }\n else if (!isWhitespace(c)) {\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n };\n Tokenizer.prototype.stateInAttributeName = function (c) {\n if (c === CharCodes.Eq || isEndOfTagSection(c)) {\n this.cbs.onattribname(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.AfterAttributeName;\n this.stateAfterAttributeName(c);\n }\n };\n Tokenizer.prototype.stateAfterAttributeName = function (c) {\n if (c === CharCodes.Eq) {\n this.state = State.BeforeAttributeValue;\n }\n else if (c === CharCodes.Slash || c === CharCodes.Gt) {\n this.cbs.onattribend(QuoteType.NoValue, this.index);\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n else if (!isWhitespace(c)) {\n this.cbs.onattribend(QuoteType.NoValue, this.index);\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n };\n Tokenizer.prototype.stateBeforeAttributeValue = function (c) {\n if (c === CharCodes.DoubleQuote) {\n this.state = State.InAttributeValueDq;\n this.sectionStart = this.index + 1;\n }\n else if (c === CharCodes.SingleQuote) {\n this.state = State.InAttributeValueSq;\n this.sectionStart = this.index + 1;\n }\n else if (!isWhitespace(c)) {\n this.sectionStart = this.index;\n this.state = State.InAttributeValueNq;\n this.stateInAttributeValueNoQuotes(c); // Reconsume token\n }\n };\n Tokenizer.prototype.handleInAttributeValue = function (c, quote) {\n if (c === quote ||\n (!this.decodeEntities && this.fastForwardTo(quote))) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(quote === CharCodes.DoubleQuote\n ? QuoteType.Double\n : QuoteType.Single, this.index);\n this.state = State.BeforeAttributeName;\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.baseState = this.state;\n this.state = State.BeforeEntity;\n }\n };\n Tokenizer.prototype.stateInAttributeValueDoubleQuotes = function (c) {\n this.handleInAttributeValue(c, CharCodes.DoubleQuote);\n };\n Tokenizer.prototype.stateInAttributeValueSingleQuotes = function (c) {\n this.handleInAttributeValue(c, CharCodes.SingleQuote);\n };\n Tokenizer.prototype.stateInAttributeValueNoQuotes = function (c) {\n if (isWhitespace(c) || c === CharCodes.Gt) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(QuoteType.Unquoted, this.index);\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n else if (this.decodeEntities && c === CharCodes.Amp) {\n this.baseState = this.state;\n this.state = State.BeforeEntity;\n }\n };\n Tokenizer.prototype.stateBeforeDeclaration = function (c) {\n if (c === CharCodes.OpeningSquareBracket) {\n this.state = State.CDATASequence;\n this.sequenceIndex = 0;\n }\n else {\n this.state =\n c === CharCodes.Dash\n ? State.BeforeComment\n : State.InDeclaration;\n }\n };\n Tokenizer.prototype.stateInDeclaration = function (c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.ondeclaration(this.sectionStart, this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n };\n Tokenizer.prototype.stateInProcessingInstruction = function (c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n };\n Tokenizer.prototype.stateBeforeComment = function (c) {\n if (c === CharCodes.Dash) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CommentEnd;\n // Allow short comments (eg. <!-->)\n this.sequenceIndex = 2;\n this.sectionStart = this.index + 1;\n }\n else {\n this.state = State.InDeclaration;\n }\n };\n Tokenizer.prototype.stateInSpecialComment = function (c) {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.oncomment(this.sectionStart, this.index, 0);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n };\n Tokenizer.prototype.stateBeforeSpecialS = function (c) {\n var lower = c | 0x20;\n if (lower === Sequences.ScriptEnd[3]) {\n this.startSpecial(Sequences.ScriptEnd, 4);\n }\n else if (lower === Sequences.StyleEnd[3]) {\n this.startSpecial(Sequences.StyleEnd, 4);\n }\n else {\n this.state = State.InTagName;\n this.stateInTagName(c); // Consume the token again\n }\n };\n Tokenizer.prototype.stateBeforeEntity = function (c) {\n // Start excess with 1 to include the '&'\n this.entityExcess = 1;\n this.entityResult = 0;\n if (c === CharCodes.Num) {\n this.state = State.BeforeNumericEntity;\n }\n else if (c === CharCodes.Amp) {\n // We have two `&` characters in a row. Stay in the current state.\n }\n else {\n this.trieIndex = 0;\n this.trieCurrent = this.entityTrie[0];\n this.state = State.InNamedEntity;\n this.stateInNamedEntity(c);\n }\n };\n Tokenizer.prototype.stateInNamedEntity = function (c) {\n this.entityExcess += 1;\n this.trieIndex = (0, decode_js_1.determineBranch)(this.entityTrie, this.trieCurrent, this.trieIndex + 1, c);\n if (this.trieIndex < 0) {\n this.emitNamedEntity();\n this.index--;\n return;\n }\n this.trieCurrent = this.entityTrie[this.trieIndex];\n var masked = this.trieCurrent & decode_js_1.BinTrieFlags.VALUE_LENGTH;\n // If the branch is a value, store it and continue\n if (masked) {\n // The mask is the number of bytes of the value, including the current byte.\n var valueLength = (masked >> 14) - 1;\n // If we have a legacy entity while parsing strictly, just skip the number of bytes\n if (!this.allowLegacyEntity() && c !== CharCodes.Semi) {\n this.trieIndex += valueLength;\n }\n else {\n // Add 1 as we have already incremented the excess\n var entityStart = this.index - this.entityExcess + 1;\n if (entityStart > this.sectionStart) {\n this.emitPartial(this.sectionStart, entityStart);\n }\n // If this is a surrogate pair, consume the next two bytes\n this.entityResult = this.trieIndex;\n this.trieIndex += valueLength;\n this.entityExcess = 0;\n this.sectionStart = this.index + 1;\n if (valueLength === 0) {\n this.emitNamedEntity();\n }\n }\n }\n };\n Tokenizer.prototype.emitNamedEntity = function () {\n this.state = this.baseState;\n if (this.entityResult === 0) {\n return;\n }\n var valueLength = (this.entityTrie[this.entityResult] & decode_js_1.BinTrieFlags.VALUE_LENGTH) >>\n 14;\n switch (valueLength) {\n case 1:\n this.emitCodePoint(this.entityTrie[this.entityResult] &\n ~decode_js_1.BinTrieFlags.VALUE_LENGTH);\n break;\n case 2:\n this.emitCodePoint(this.entityTrie[this.entityResult + 1]);\n break;\n case 3: {\n this.emitCodePoint(this.entityTrie[this.entityResult + 1]);\n this.emitCodePoint(this.entityTrie[this.entityResult + 2]);\n }\n }\n };\n Tokenizer.prototype.stateBeforeNumericEntity = function (c) {\n if ((c | 0x20) === CharCodes.LowerX) {\n this.entityExcess++;\n this.state = State.InHexEntity;\n }\n else {\n this.state = State.InNumericEntity;\n this.stateInNumericEntity(c);\n }\n };\n Tokenizer.prototype.emitNumericEntity = function (strict) {\n var entityStart = this.index - this.entityExcess - 1;\n var numberStart = entityStart + 2 + Number(this.state === State.InHexEntity);\n if (numberStart !== this.index) {\n // Emit leading data if any\n if (entityStart > this.sectionStart) {\n this.emitPartial(this.sectionStart, entityStart);\n }\n this.sectionStart = this.index + Number(strict);\n this.emitCodePoint((0, decode_js_1.replaceCodePoint)(this.entityResult));\n }\n this.state = this.baseState;\n };\n Tokenizer.prototype.stateInNumericEntity = function (c) {\n if (c === CharCodes.Semi) {\n this.emitNumericEntity(true);\n }\n else if (isNumber(c)) {\n this.entityResult = this.entityResult * 10 + (c - CharCodes.Zero);\n this.entityExcess++;\n }\n else {\n if (this.allowLegacyEntity()) {\n this.emitNumericEntity(false);\n }\n else {\n this.state = this.baseState;\n }\n this.index--;\n }\n };\n Tokenizer.prototype.stateInHexEntity = function (c) {\n if (c === CharCodes.Semi) {\n this.emitNumericEntity(true);\n }\n else if (isNumber(c)) {\n this.entityResult = this.entityResult * 16 + (c - CharCodes.Zero);\n this.entityExcess++;\n }\n else if (isHexDigit(c)) {\n this.entityResult =\n this.entityResult * 16 + ((c | 0x20) - CharCodes.LowerA + 10);\n this.entityExcess++;\n }\n else {\n if (this.allowLegacyEntity()) {\n this.emitNumericEntity(false);\n }\n else {\n this.state = this.baseState;\n }\n this.index--;\n }\n };\n Tokenizer.prototype.allowLegacyEntity = function () {\n return (!this.xmlMode &&\n (this.baseState === State.Text ||\n this.baseState === State.InSpecialTag));\n };\n /**\n * Remove data that has already been consumed from the buffer.\n */\n Tokenizer.prototype.cleanup = function () {\n // If we are inside of text or attributes, emit what we already have.\n if (this.running && this.sectionStart !== this.index) {\n if (this.state === State.Text ||\n (this.state === State.InSpecialTag && this.sequenceIndex === 0)) {\n this.cbs.ontext(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n else if (this.state === State.InAttributeValueDq ||\n this.state === State.InAttributeValueSq ||\n this.state === State.InAttributeValueNq) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n }\n };\n Tokenizer.prototype.shouldContinue = function () {\n return this.index < this.buffer.length + this.offset && this.running;\n };\n /**\n * Iterates through the buffer, calling the function corresponding to the current state.\n *\n * States that are more likely to be hit are higher up, as a performance improvement.\n */\n Tokenizer.prototype.parse = function () {\n while (this.shouldContinue()) {\n var c = this.buffer.charCodeAt(this.index - this.offset);\n if (this.state === State.Text) {\n this.stateText(c);\n }\n else if (this.state === State.SpecialStartSequence) {\n this.stateSpecialStartSequence(c);\n }\n else if (this.state === State.InSpecialTag) {\n this.stateInSpecialTag(c);\n }\n else if (this.state === State.CDATASequence) {\n this.stateCDATASequence(c);\n }\n else if (this.state === State.InAttributeValueDq) {\n this.stateInAttributeValueDoubleQuotes(c);\n }\n else if (this.state === State.InAttributeName) {\n this.stateInAttributeName(c);\n }\n else if (this.state === State.InCommentLike) {\n this.stateInCommentLike(c);\n }\n else if (this.state === State.InSpecialComment) {\n this.stateInSpecialComment(c);\n }\n else if (this.state === State.BeforeAttributeName) {\n this.stateBeforeAttributeName(c);\n }\n else if (this.state === State.InTagName) {\n this.stateInTagName(c);\n }\n else if (this.state === State.InClosingTagName) {\n this.stateInClosingTagName(c);\n }\n else if (this.state === State.BeforeTagName) {\n this.stateBeforeTagName(c);\n }\n else if (this.state === State.AfterAttributeName) {\n this.stateAfterAttributeName(c);\n }\n else if (this.state === State.InAttributeValueSq) {\n this.stateInAttributeValueSingleQuotes(c);\n }\n else if (this.state === State.BeforeAttributeValue) {\n this.stateBeforeAttributeValue(c);\n }\n else if (this.state === State.BeforeClosingTagName) {\n this.stateBeforeClosingTagName(c);\n }\n else if (this.state === State.AfterClosingTagName) {\n this.stateAfterClosingTagName(c);\n }\n else if (this.state === State.BeforeSpecialS) {\n this.stateBeforeSpecialS(c);\n }\n else if (this.state === State.InAttributeValueNq) {\n this.stateInAttributeValueNoQuotes(c);\n }\n else if (this.state === State.InSelfClosingTag) {\n this.stateInSelfClosingTag(c);\n }\n else if (this.state === State.InDeclaration) {\n this.stateInDeclaration(c);\n }\n else if (this.state === State.BeforeDeclaration) {\n this.stateBeforeDeclaration(c);\n }\n else if (this.state === State.BeforeComment) {\n this.stateBeforeComment(c);\n }\n else if (this.state === State.InProcessingInstruction) {\n this.stateInProcessingInstruction(c);\n }\n else if (this.state === State.InNamedEntity) {\n this.stateInNamedEntity(c);\n }\n else if (this.state === State.BeforeEntity) {\n this.stateBeforeEntity(c);\n }\n else if (this.state === State.InHexEntity) {\n this.stateInHexEntity(c);\n }\n else if (this.state === State.InNumericEntity) {\n this.stateInNumericEntity(c);\n }\n else {\n // `this._state === State.BeforeNumericEntity`\n this.stateBeforeNumericEntity(c);\n }\n this.index++;\n }\n this.cleanup();\n };\n Tokenizer.prototype.finish = function () {\n if (this.state === State.InNamedEntity) {\n this.emitNamedEntity();\n }\n // If there is remaining data, emit it in a reasonable way\n if (this.sectionStart < this.index) {\n this.handleTrailingData();\n }\n this.cbs.onend();\n };\n /** Handle any trailing data. */\n Tokenizer.prototype.handleTrailingData = function () {\n var endIndex = this.buffer.length + this.offset;\n if (this.state === State.InCommentLike) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, endIndex, 0);\n }\n else {\n this.cbs.oncomment(this.sectionStart, endIndex, 0);\n }\n }\n else if (this.state === State.InNumericEntity &&\n this.allowLegacyEntity()) {\n this.emitNumericEntity(false);\n // All trailing data will have been consumed\n }\n else if (this.state === State.InHexEntity &&\n this.allowLegacyEntity()) {\n this.emitNumericEntity(false);\n // All trailing data will have been consumed\n }\n else if (this.state === State.InTagName ||\n this.state === State.BeforeAttributeName ||\n this.state === State.BeforeAttributeValue ||\n this.state === State.AfterAttributeName ||\n this.state === State.InAttributeName ||\n this.state === State.InAttributeValueSq ||\n this.state === State.InAttributeValueDq ||\n this.state === State.InAttributeValueNq ||\n this.state === State.InClosingTagName) {\n /*\n * If we are currently in an opening or closing tag, us not calling the\n * respective callback signals that the tag should be ignored.\n */\n }\n else {\n this.cbs.ontext(this.sectionStart, endIndex);\n }\n };\n Tokenizer.prototype.emitPartial = function (start, endIndex) {\n if (this.baseState !== State.Text &&\n this.baseState !== State.InSpecialTag) {\n this.cbs.onattribdata(start, endIndex);\n }\n else {\n this.cbs.ontext(start, endIndex);\n }\n };\n Tokenizer.prototype.emitCodePoint = function (cp) {\n if (this.baseState !== State.Text &&\n this.baseState !== State.InSpecialTag) {\n this.cbs.onattribentity(cp);\n }\n else {\n this.cbs.ontextentity(cp);\n }\n };\n return Tokenizer;\n}());\nexports.default = Tokenizer;\n//# sourceMappingURL=Tokenizer.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultHandler = exports.DomUtils = exports.parseFeed = exports.getFeed = exports.ElementType = exports.Tokenizer = exports.createDomStream = exports.parseDOM = exports.parseDocument = exports.DomHandler = exports.Parser = void 0;\nvar Parser_js_1 = require(\"./Parser.js\");\nObject.defineProperty(exports, \"Parser\", { enumerable: true, get: function () { return Parser_js_1.Parser; } });\nvar domhandler_1 = require(\"domhandler\");\nObject.defineProperty(exports, \"DomHandler\", { enumerable: true, get: function () { return domhandler_1.DomHandler; } });\nObject.defineProperty(exports, \"DefaultHandler\", { enumerable: true, get: function () { return domhandler_1.DomHandler; } });\n// Helper methods\n/**\n * Parses the data, returns the resulting document.\n *\n * @param data The data that should be parsed.\n * @param options Optional options for the parser and DOM builder.\n */\nfunction parseDocument(data, options) {\n var handler = new domhandler_1.DomHandler(undefined, options);\n new Parser_js_1.Parser(handler, options).end(data);\n return handler.root;\n}\nexports.parseDocument = parseDocument;\n/**\n * Parses data, returns an array of the root nodes.\n *\n * Note that the root nodes still have a `Document` node as their parent.\n * Use `parseDocument` to get the `Document` node instead.\n *\n * @param data The data that should be parsed.\n * @param options Optional options for the parser and DOM builder.\n * @deprecated Use `parseDocument` instead.\n */\nfunction parseDOM(data, options) {\n return parseDocument(data, options).children;\n}\nexports.parseDOM = parseDOM;\n/**\n * Creates a parser instance, with an attached DOM handler.\n *\n * @param cb A callback that will be called once parsing has been completed.\n * @param options Optional options for the parser and DOM builder.\n * @param elementCb An optional callback that will be called every time a tag has been completed inside of the DOM.\n */\nfunction createDomStream(cb, options, elementCb) {\n var handler = new domhandler_1.DomHandler(cb, options, elementCb);\n return new Parser_js_1.Parser(handler, options);\n}\nexports.createDomStream = createDomStream;\nvar Tokenizer_js_1 = require(\"./Tokenizer.js\");\nObject.defineProperty(exports, \"Tokenizer\", { enumerable: true, get: function () { return __importDefault(Tokenizer_js_1).default; } });\n/*\n * All of the following exports exist for backwards-compatibility.\n * They should probably be removed eventually.\n */\nvar ElementType = __importStar(require(\"domelementtype\"));\nexports.ElementType = ElementType;\nvar domutils_1 = require(\"domutils\");\nObject.defineProperty(exports, \"getFeed\", { enumerable: true, get: function () { return domutils_1.getFeed; } });\n/**\n * Parse a feed.\n *\n * @param feed The feed that should be parsed, as a string.\n * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`.\n */\nfunction parseFeed(feed, options) {\n if (options === void 0) { options = { xmlMode: true }; }\n return (0, domutils_1.getFeed)(parseDOM(feed, options));\n}\nexports.parseFeed = parseFeed;\nexports.DomUtils = __importStar(require(\"domutils\"));\n//# sourceMappingURL=index.js.map","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*!\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nfunction isPlainObject(o) {\n var ctor,prot;\n\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n\nexports.isPlainObject = isPlainObject;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Srcset Parser\n *\n * By Alex Bell | MIT License\n *\n * JS Parser for the string value that appears in markup <img srcset=\"here\">\n *\n * @returns Array [{url: _, d: _, w: _, h:_}, ...]\n *\n * Based super duper closely on the reference algorithm at:\n * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute\n *\n * Most comments are copied in directly from the spec\n * (except for comments in parens).\n */\n\n(function (root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t} else if (typeof module === 'object' && module.exports) {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.parseSrcset = factory();\n\t}\n}(this, function () {\n\n\t// 1. Let input be the value passed to this algorithm.\n\treturn function (input) {\n\n\t\t// UTILITY FUNCTIONS\n\n\t\t// Manual is faster than RegEx\n\t\t// http://bjorn.tipling.com/state-and-regular-expressions-in-javascript\n\t\t// http://jsperf.com/whitespace-character/5\n\t\tfunction isSpace(c) {\n\t\t\treturn (c === \"\\u0020\" || // space\n\t\t\tc === \"\\u0009\" || // horizontal tab\n\t\t\tc === \"\\u000A\" || // new line\n\t\t\tc === \"\\u000C\" || // form feed\n\t\t\tc === \"\\u000D\"); // carriage return\n\t\t}\n\n\t\tfunction collectCharacters(regEx) {\n\t\t\tvar chars,\n\t\t\t\tmatch = regEx.exec(input.substring(pos));\n\t\t\tif (match) {\n\t\t\t\tchars = match[ 0 ];\n\t\t\t\tpos += chars.length;\n\t\t\t\treturn chars;\n\t\t\t}\n\t\t}\n\n\t\tvar inputLength = input.length,\n\n\t\t\t// (Don't use \\s, to avoid matching non-breaking space)\n\t\t\tregexLeadingSpaces = /^[ \\t\\n\\r\\u000c]+/,\n\t\t\tregexLeadingCommasOrSpaces = /^[, \\t\\n\\r\\u000c]+/,\n\t\t\tregexLeadingNotSpaces = /^[^ \\t\\n\\r\\u000c]+/,\n\t\t\tregexTrailingCommas = /[,]+$/,\n\t\t\tregexNonNegativeInteger = /^\\d+$/,\n\n\t\t\t// ( Positive or negative or unsigned integers or decimals, without or without exponents.\n\t\t\t// Must include at least one digit.\n\t\t\t// According to spec tests any decimal point must be followed by a digit.\n\t\t\t// No leading plus sign is allowed.)\n\t\t\t// https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number\n\t\t\tregexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,\n\n\t\t\turl,\n\t\t\tdescriptors,\n\t\t\tcurrentDescriptor,\n\t\t\tstate,\n\t\t\tc,\n\n\t\t\t// 2. Let position be a pointer into input, initially pointing at the start\n\t\t\t// of the string.\n\t\t\tpos = 0,\n\n\t\t\t// 3. Let candidates be an initially empty source set.\n\t\t\tcandidates = [];\n\n\t\t// 4. Splitting loop: Collect a sequence of characters that are space\n\t\t// characters or U+002C COMMA characters. If any U+002C COMMA characters\n\t\t// were collected, that is a parse error.\n\t\twhile (true) {\n\t\t\tcollectCharacters(regexLeadingCommasOrSpaces);\n\n\t\t\t// 5. If position is past the end of input, return candidates and abort these steps.\n\t\t\tif (pos >= inputLength) {\n\t\t\t\treturn candidates; // (we're done, this is the sole return path)\n\t\t\t}\n\n\t\t\t// 6. Collect a sequence of characters that are not space characters,\n\t\t\t// and let that be url.\n\t\t\turl = collectCharacters(regexLeadingNotSpaces);\n\n\t\t\t// 7. Let descriptors be a new empty list.\n\t\t\tdescriptors = [];\n\n\t\t\t// 8. If url ends with a U+002C COMMA character (,), follow these substeps:\n\t\t\t//\t\t(1). Remove all trailing U+002C COMMA characters from url. If this removed\n\t\t\t// more than one character, that is a parse error.\n\t\t\tif (url.slice(-1) === \",\") {\n\t\t\t\turl = url.replace(regexTrailingCommas, \"\");\n\t\t\t\t// (Jump ahead to step 9 to skip tokenization and just push the candidate).\n\t\t\t\tparseDescriptors();\n\n\t\t\t\t//\tOtherwise, follow these substeps:\n\t\t\t} else {\n\t\t\t\ttokenize();\n\t\t\t} // (close else of step 8)\n\n\t\t\t// 16. Return to the step labeled splitting loop.\n\t\t} // (Close of big while loop.)\n\n\t\t/**\n\t\t * Tokenizes descriptor properties prior to parsing\n\t\t * Returns undefined.\n\t\t */\n\t\tfunction tokenize() {\n\n\t\t\t// 8.1. Descriptor tokeniser: Skip whitespace\n\t\t\tcollectCharacters(regexLeadingSpaces);\n\n\t\t\t// 8.2. Let current descriptor be the empty string.\n\t\t\tcurrentDescriptor = \"\";\n\n\t\t\t// 8.3. Let state be in descriptor.\n\t\t\tstate = \"in descriptor\";\n\n\t\t\twhile (true) {\n\n\t\t\t\t// 8.4. Let c be the character at position.\n\t\t\t\tc = input.charAt(pos);\n\n\t\t\t\t// Do the following depending on the value of state.\n\t\t\t\t// For the purpose of this step, \"EOF\" is a special character representing\n\t\t\t\t// that position is past the end of input.\n\n\t\t\t\t// In descriptor\n\t\t\t\tif (state === \"in descriptor\") {\n\t\t\t\t\t// Do the following, depending on the value of c:\n\n\t\t\t\t\t// Space character\n\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t// descriptors and let current descriptor be the empty string.\n\t\t\t\t\t// Set state to after descriptor.\n\t\t\t\t\tif (isSpace(c)) {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t\tcurrentDescriptor = \"\";\n\t\t\t\t\t\t\tstate = \"after descriptor\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// U+002C COMMA (,)\n\t\t\t\t\t\t// Advance position to the next character in input. If current descriptor\n\t\t\t\t\t\t// is not empty, append current descriptor to descriptors. Jump to the step\n\t\t\t\t\t\t// labeled descriptor parser.\n\t\t\t\t\t} else if (c === \",\") {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// U+0028 LEFT PARENTHESIS (()\n\t\t\t\t\t\t// Append c to current descriptor. Set state to in parens.\n\t\t\t\t\t} else if (c === \"\\u0028\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in parens\";\n\n\t\t\t\t\t\t// EOF\n\t\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t\t// descriptors. Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\t\t\t\t\t// (end \"in descriptor\"\n\n\t\t\t\t\t// In parens\n\t\t\t\t} else if (state === \"in parens\") {\n\n\t\t\t\t\t// U+0029 RIGHT PARENTHESIS ())\n\t\t\t\t\t// Append c to current descriptor. Set state to in descriptor.\n\t\t\t\t\tif (c === \")\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in descriptor\";\n\n\t\t\t\t\t\t// EOF\n\t\t\t\t\t\t// Append current descriptor to descriptors. Jump to the step labeled\n\t\t\t\t\t\t// descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\n\t\t\t\t\t// After descriptor\n\t\t\t\t} else if (state === \"after descriptor\") {\n\n\t\t\t\t\t// Do the following, depending on the value of c:\n\t\t\t\t\t// Space character: Stay in this state.\n\t\t\t\t\tif (isSpace(c)) {\n\n\t\t\t\t\t\t// EOF: Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Set state to in descriptor. Set position to the previous character in input.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = \"in descriptor\";\n\t\t\t\t\t\tpos -= 1;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Advance position to the next character in input.\n\t\t\t\tpos += 1;\n\n\t\t\t\t// Repeat this step.\n\t\t\t} // (close while true loop)\n\t\t}\n\n\t\t/**\n\t\t * Adds descriptor properties to a candidate, pushes to the candidates array\n\t\t * @return undefined\n\t\t */\n\t\t// Declared outside of the while loop so that it's only created once.\n\t\tfunction parseDescriptors() {\n\n\t\t\t// 9. Descriptor parser: Let error be no.\n\t\t\tvar pError = false,\n\n\t\t\t\t// 10. Let width be absent.\n\t\t\t\t// 11. Let density be absent.\n\t\t\t\t// 12. Let future-compat-h be absent. (We're implementing it now as h)\n\t\t\t\tw, d, h, i,\n\t\t\t\tcandidate = {},\n\t\t\t\tdesc, lastChar, value, intVal, floatVal;\n\n\t\t\t// 13. For each descriptor in descriptors, run the appropriate set of steps\n\t\t\t// from the following list:\n\t\t\tfor (i = 0 ; i < descriptors.length; i++) {\n\t\t\t\tdesc = descriptors[ i ];\n\n\t\t\t\tlastChar = desc[ desc.length - 1 ];\n\t\t\t\tvalue = desc.substring(0, desc.length - 1);\n\t\t\t\tintVal = parseInt(value, 10);\n\t\t\t\tfloatVal = parseFloat(value);\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0077 LATIN SMALL LETTER W character\n\t\t\t\tif (regexNonNegativeInteger.test(value) && (lastChar === \"w\")) {\n\n\t\t\t\t\t// If width and density are not both absent, then let error be yes.\n\t\t\t\t\tif (w || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes.\n\t\t\t\t\t// Otherwise, let width be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {w = intVal;}\n\n\t\t\t\t\t// If the descriptor consists of a valid floating-point number followed by\n\t\t\t\t\t// a U+0078 LATIN SMALL LETTER X character\n\t\t\t\t} else if (regexFloatingPoint.test(value) && (lastChar === \"x\")) {\n\n\t\t\t\t\t// If width, density and future-compat-h are not all absent, then let error\n\t\t\t\t\t// be yes.\n\t\t\t\t\tif (w || d || h) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing floating-point number values to the descriptor.\n\t\t\t\t\t// If the result is less than zero, let error be yes. Otherwise, let density\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (floatVal < 0) {pError = true;} else {d = floatVal;}\n\n\t\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t\t// a U+0068 LATIN SMALL LETTER H character\n\t\t\t\t} else if (regexNonNegativeInteger.test(value) && (lastChar === \"h\")) {\n\n\t\t\t\t\t// If height and density are not both absent, then let error be yes.\n\t\t\t\t\tif (h || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes. Otherwise, let future-compat-h\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {h = intVal;}\n\n\t\t\t\t\t// Anything else, Let error be yes.\n\t\t\t\t} else {pError = true;}\n\t\t\t} // (close step 13 for loop)\n\n\t\t\t// 15. If error is still no, then append a new image source to candidates whose\n\t\t\t// URL is url, associated with a width width if not absent and a pixel\n\t\t\t// density density if not absent. Otherwise, there is a parse error.\n\t\t\tif (!pError) {\n\t\t\t\tcandidate.url = url;\n\t\t\t\tif (w) { candidate.w = w;}\n\t\t\t\tif (d) { candidate.d = d;}\n\t\t\t\tif (h) { candidate.h = h;}\n\t\t\t\tcandidates.push(candidate);\n\t\t\t} else if (console && console.log) {\n\t\t\t\tconsole.log(\"Invalid srcset descriptor found in '\" +\n\t\t\t\t\tinput + \"' at '\" + desc + \"'.\");\n\t\t\t}\n\t\t} // (close parseDescriptors fn)\n\n\t}\n}));\n","var x=String;\nvar create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}};\nmodule.exports=create();\nmodule.exports.createColors = create;\n","'use strict'\n\nlet Container = require('./container')\n\nclass AtRule extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'atrule'\n }\n\n append(...children) {\n if (!this.proxyOf.nodes) this.nodes = []\n return super.append(...children)\n }\n\n prepend(...children) {\n if (!this.proxyOf.nodes) this.nodes = []\n return super.prepend(...children)\n }\n}\n\nmodule.exports = AtRule\nAtRule.default = AtRule\n\nContainer.registerAtRule(AtRule)\n","'use strict'\n\nlet Node = require('./node')\n\nclass Comment extends Node {\n constructor(defaults) {\n super(defaults)\n this.type = 'comment'\n }\n}\n\nmodule.exports = Comment\nComment.default = Comment\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet Declaration = require('./declaration')\nlet Comment = require('./comment')\nlet Node = require('./node')\n\nlet parse, Rule, AtRule, Root\n\nfunction cleanSource(nodes) {\n return nodes.map(i => {\n if (i.nodes) i.nodes = cleanSource(i.nodes)\n delete i.source\n return i\n })\n}\n\nfunction markDirtyUp(node) {\n node[isClean] = false\n if (node.proxyOf.nodes) {\n for (let i of node.proxyOf.nodes) {\n markDirtyUp(i)\n }\n }\n}\n\nclass Container extends Node {\n append(...children) {\n for (let child of children) {\n let nodes = this.normalize(child, this.last)\n for (let node of nodes) this.proxyOf.nodes.push(node)\n }\n\n this.markDirty()\n\n return this\n }\n\n cleanRaws(keepBetween) {\n super.cleanRaws(keepBetween)\n if (this.nodes) {\n for (let node of this.nodes) node.cleanRaws(keepBetween)\n }\n }\n\n each(callback) {\n if (!this.proxyOf.nodes) return undefined\n let iterator = this.getIterator()\n\n let index, result\n while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n index = this.indexes[iterator]\n result = callback(this.proxyOf.nodes[index], index)\n if (result === false) break\n\n this.indexes[iterator] += 1\n }\n\n delete this.indexes[iterator]\n return result\n }\n\n every(condition) {\n return this.nodes.every(condition)\n }\n\n getIterator() {\n if (!this.lastEach) this.lastEach = 0\n if (!this.indexes) this.indexes = {}\n\n this.lastEach += 1\n let iterator = this.lastEach\n this.indexes[iterator] = 0\n\n return iterator\n }\n\n getProxyProcessor() {\n return {\n get(node, prop) {\n if (prop === 'proxyOf') {\n return node\n } else if (!node[prop]) {\n return node[prop]\n } else if (\n prop === 'each' ||\n (typeof prop === 'string' && prop.startsWith('walk'))\n ) {\n return (...args) => {\n return node[prop](\n ...args.map(i => {\n if (typeof i === 'function') {\n return (child, index) => i(child.toProxy(), index)\n } else {\n return i\n }\n })\n )\n }\n } else if (prop === 'every' || prop === 'some') {\n return cb => {\n return node[prop]((child, ...other) =>\n cb(child.toProxy(), ...other)\n )\n }\n } else if (prop === 'root') {\n return () => node.root().toProxy()\n } else if (prop === 'nodes') {\n return node.nodes.map(i => i.toProxy())\n } else if (prop === 'first' || prop === 'last') {\n return node[prop].toProxy()\n } else {\n return node[prop]\n }\n },\n\n set(node, prop, value) {\n if (node[prop] === value) return true\n node[prop] = value\n if (prop === 'name' || prop === 'params' || prop === 'selector') {\n node.markDirty()\n }\n return true\n }\n }\n }\n\n index(child) {\n if (typeof child === 'number') return child\n if (child.proxyOf) child = child.proxyOf\n return this.proxyOf.nodes.indexOf(child)\n }\n\n insertAfter(exist, add) {\n let existIndex = this.index(exist)\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()\n existIndex = this.index(exist)\n for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (existIndex < index) {\n this.indexes[id] = index + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n insertBefore(exist, add) {\n let existIndex = this.index(exist)\n let type = existIndex === 0 ? 'prepend' : false\n let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse()\n existIndex = this.index(exist)\n for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (existIndex <= index) {\n this.indexes[id] = index + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n normalize(nodes, sample) {\n if (typeof nodes === 'string') {\n nodes = cleanSource(parse(nodes).nodes)\n } else if (Array.isArray(nodes)) {\n nodes = nodes.slice(0)\n for (let i of nodes) {\n if (i.parent) i.parent.removeChild(i, 'ignore')\n }\n } else if (nodes.type === 'root' && this.type !== 'document') {\n nodes = nodes.nodes.slice(0)\n for (let i of nodes) {\n if (i.parent) i.parent.removeChild(i, 'ignore')\n }\n } else if (nodes.type) {\n nodes = [nodes]\n } else if (nodes.prop) {\n if (typeof nodes.value === 'undefined') {\n throw new Error('Value field is missed in node creation')\n } else if (typeof nodes.value !== 'string') {\n nodes.value = String(nodes.value)\n }\n nodes = [new Declaration(nodes)]\n } else if (nodes.selector) {\n nodes = [new Rule(nodes)]\n } else if (nodes.name) {\n nodes = [new AtRule(nodes)]\n } else if (nodes.text) {\n nodes = [new Comment(nodes)]\n } else {\n throw new Error('Unknown node type in node creation')\n }\n\n let processed = nodes.map(i => {\n /* c8 ignore next */\n if (!i[my]) Container.rebuild(i)\n i = i.proxyOf\n if (i.parent) i.parent.removeChild(i)\n if (i[isClean]) markDirtyUp(i)\n if (typeof i.raws.before === 'undefined') {\n if (sample && typeof sample.raws.before !== 'undefined') {\n i.raws.before = sample.raws.before.replace(/\\S/g, '')\n }\n }\n i.parent = this.proxyOf\n return i\n })\n\n return processed\n }\n\n prepend(...children) {\n children = children.reverse()\n for (let child of children) {\n let nodes = this.normalize(child, this.first, 'prepend').reverse()\n for (let node of nodes) this.proxyOf.nodes.unshift(node)\n for (let id in this.indexes) {\n this.indexes[id] = this.indexes[id] + nodes.length\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n push(child) {\n child.parent = this\n this.proxyOf.nodes.push(child)\n return this\n }\n\n removeAll() {\n for (let node of this.proxyOf.nodes) node.parent = undefined\n this.proxyOf.nodes = []\n\n this.markDirty()\n\n return this\n }\n\n removeChild(child) {\n child = this.index(child)\n this.proxyOf.nodes[child].parent = undefined\n this.proxyOf.nodes.splice(child, 1)\n\n let index\n for (let id in this.indexes) {\n index = this.indexes[id]\n if (index >= child) {\n this.indexes[id] = index - 1\n }\n }\n\n this.markDirty()\n\n return this\n }\n\n replaceValues(pattern, opts, callback) {\n if (!callback) {\n callback = opts\n opts = {}\n }\n\n this.walkDecls(decl => {\n if (opts.props && !opts.props.includes(decl.prop)) return\n if (opts.fast && !decl.value.includes(opts.fast)) return\n\n decl.value = decl.value.replace(pattern, callback)\n })\n\n this.markDirty()\n\n return this\n }\n\n some(condition) {\n return this.nodes.some(condition)\n }\n\n walk(callback) {\n return this.each((child, i) => {\n let result\n try {\n result = callback(child, i)\n } catch (e) {\n throw child.addToError(e)\n }\n if (result !== false && child.walk) {\n result = child.walk(callback)\n }\n\n return result\n })\n }\n\n walkAtRules(name, callback) {\n if (!callback) {\n callback = name\n return this.walk((child, i) => {\n if (child.type === 'atrule') {\n return callback(child, i)\n }\n })\n }\n if (name instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'atrule' && name.test(child.name)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'atrule' && child.name === name) {\n return callback(child, i)\n }\n })\n }\n\n walkComments(callback) {\n return this.walk((child, i) => {\n if (child.type === 'comment') {\n return callback(child, i)\n }\n })\n }\n\n walkDecls(prop, callback) {\n if (!callback) {\n callback = prop\n return this.walk((child, i) => {\n if (child.type === 'decl') {\n return callback(child, i)\n }\n })\n }\n if (prop instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'decl' && prop.test(child.prop)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'decl' && child.prop === prop) {\n return callback(child, i)\n }\n })\n }\n\n walkRules(selector, callback) {\n if (!callback) {\n callback = selector\n\n return this.walk((child, i) => {\n if (child.type === 'rule') {\n return callback(child, i)\n }\n })\n }\n if (selector instanceof RegExp) {\n return this.walk((child, i) => {\n if (child.type === 'rule' && selector.test(child.selector)) {\n return callback(child, i)\n }\n })\n }\n return this.walk((child, i) => {\n if (child.type === 'rule' && child.selector === selector) {\n return callback(child, i)\n }\n })\n }\n\n get first() {\n if (!this.proxyOf.nodes) return undefined\n return this.proxyOf.nodes[0]\n }\n\n get last() {\n if (!this.proxyOf.nodes) return undefined\n return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]\n }\n}\n\nContainer.registerParse = dependant => {\n parse = dependant\n}\n\nContainer.registerRule = dependant => {\n Rule = dependant\n}\n\nContainer.registerAtRule = dependant => {\n AtRule = dependant\n}\n\nContainer.registerRoot = dependant => {\n Root = dependant\n}\n\nmodule.exports = Container\nContainer.default = Container\n\n/* c8 ignore start */\nContainer.rebuild = node => {\n if (node.type === 'atrule') {\n Object.setPrototypeOf(node, AtRule.prototype)\n } else if (node.type === 'rule') {\n Object.setPrototypeOf(node, Rule.prototype)\n } else if (node.type === 'decl') {\n Object.setPrototypeOf(node, Declaration.prototype)\n } else if (node.type === 'comment') {\n Object.setPrototypeOf(node, Comment.prototype)\n } else if (node.type === 'root') {\n Object.setPrototypeOf(node, Root.prototype)\n }\n\n node[my] = true\n\n if (node.nodes) {\n node.nodes.forEach(child => {\n Container.rebuild(child)\n })\n }\n}\n/* c8 ignore stop */\n","'use strict'\n\nlet pico = require('picocolors')\n\nlet terminalHighlight = require('./terminal-highlight')\n\nclass CssSyntaxError extends Error {\n constructor(message, line, column, source, file, plugin) {\n super(message)\n this.name = 'CssSyntaxError'\n this.reason = message\n\n if (file) {\n this.file = file\n }\n if (source) {\n this.source = source\n }\n if (plugin) {\n this.plugin = plugin\n }\n if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n if (typeof line === 'number') {\n this.line = line\n this.column = column\n } else {\n this.line = line.line\n this.column = line.column\n this.endLine = column.line\n this.endColumn = column.column\n }\n }\n\n this.setMessage()\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CssSyntaxError)\n }\n }\n\n setMessage() {\n this.message = this.plugin ? this.plugin + ': ' : ''\n this.message += this.file ? this.file : '<css input>'\n if (typeof this.line !== 'undefined') {\n this.message += ':' + this.line + ':' + this.column\n }\n this.message += ': ' + this.reason\n }\n\n showSourceCode(color) {\n if (!this.source) return ''\n\n let css = this.source\n if (color == null) color = pico.isColorSupported\n if (terminalHighlight) {\n if (color) css = terminalHighlight(css)\n }\n\n let lines = css.split(/\\r?\\n/)\n let start = Math.max(this.line - 3, 0)\n let end = Math.min(this.line + 2, lines.length)\n\n let maxWidth = String(end).length\n\n let mark, aside\n if (color) {\n let { bold, gray, red } = pico.createColors(true)\n mark = text => bold(red(text))\n aside = text => gray(text)\n } else {\n mark = aside = str => str\n }\n\n return lines\n .slice(start, end)\n .map((line, index) => {\n let number = start + 1 + index\n let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '\n if (number === this.line) {\n let spacing =\n aside(gutter.replace(/\\d/g, ' ')) +\n line.slice(0, this.column - 1).replace(/[^\\t]/g, ' ')\n return mark('>') + aside(gutter) + line + '\\n ' + spacing + mark('^')\n }\n return ' ' + aside(gutter) + line\n })\n .join('\\n')\n }\n\n toString() {\n let code = this.showSourceCode()\n if (code) {\n code = '\\n\\n' + code + '\\n'\n }\n return this.name + ': ' + this.message + code\n }\n}\n\nmodule.exports = CssSyntaxError\nCssSyntaxError.default = CssSyntaxError\n","'use strict'\n\nlet Node = require('./node')\n\nclass Declaration extends Node {\n constructor(defaults) {\n if (\n defaults &&\n typeof defaults.value !== 'undefined' &&\n typeof defaults.value !== 'string'\n ) {\n defaults = { ...defaults, value: String(defaults.value) }\n }\n super(defaults)\n this.type = 'decl'\n }\n\n get variable() {\n return this.prop.startsWith('--') || this.prop[0] === '$'\n }\n}\n\nmodule.exports = Declaration\nDeclaration.default = Declaration\n","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Document extends Container {\n constructor(defaults) {\n // type needs to be passed to super, otherwise child roots won't be normalized correctly\n super({ type: 'document', ...defaults })\n\n if (!this.nodes) {\n this.nodes = []\n }\n }\n\n toResult(opts = {}) {\n let lazy = new LazyResult(new Processor(), this, opts)\n\n return lazy.stringify()\n }\n}\n\nDocument.registerLazyResult = dependant => {\n LazyResult = dependant\n}\n\nDocument.registerProcessor = dependant => {\n Processor = dependant\n}\n\nmodule.exports = Document\nDocument.default = Document\n","'use strict'\n\nlet Declaration = require('./declaration')\nlet PreviousMap = require('./previous-map')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Input = require('./input')\nlet Root = require('./root')\nlet Rule = require('./rule')\n\nfunction fromJSON(json, inputs) {\n if (Array.isArray(json)) return json.map(n => fromJSON(n))\n\n let { inputs: ownInputs, ...defaults } = json\n if (ownInputs) {\n inputs = []\n for (let input of ownInputs) {\n let inputHydrated = { ...input, __proto__: Input.prototype }\n if (inputHydrated.map) {\n inputHydrated.map = {\n ...inputHydrated.map,\n __proto__: PreviousMap.prototype\n }\n }\n inputs.push(inputHydrated)\n }\n }\n if (defaults.nodes) {\n defaults.nodes = json.nodes.map(n => fromJSON(n, inputs))\n }\n if (defaults.source) {\n let { inputId, ...source } = defaults.source\n defaults.source = source\n if (inputId != null) {\n defaults.source.input = inputs[inputId]\n }\n }\n if (defaults.type === 'root') {\n return new Root(defaults)\n } else if (defaults.type === 'decl') {\n return new Declaration(defaults)\n } else if (defaults.type === 'rule') {\n return new Rule(defaults)\n } else if (defaults.type === 'comment') {\n return new Comment(defaults)\n } else if (defaults.type === 'atrule') {\n return new AtRule(defaults)\n } else {\n throw new Error('Unknown node type: ' + json.type)\n }\n}\n\nmodule.exports = fromJSON\nfromJSON.default = fromJSON\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { fileURLToPath, pathToFileURL } = require('url')\nlet { isAbsolute, resolve } = require('path')\nlet { nanoid } = require('nanoid/non-secure')\n\nlet terminalHighlight = require('./terminal-highlight')\nlet CssSyntaxError = require('./css-syntax-error')\nlet PreviousMap = require('./previous-map')\n\nlet fromOffsetCache = Symbol('fromOffsetCache')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(resolve && isAbsolute)\n\nclass Input {\n constructor(css, opts = {}) {\n if (\n css === null ||\n typeof css === 'undefined' ||\n (typeof css === 'object' && !css.toString)\n ) {\n throw new Error(`PostCSS received ${css} instead of CSS string`)\n }\n\n this.css = css.toString()\n\n if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n this.hasBOM = true\n this.css = this.css.slice(1)\n } else {\n this.hasBOM = false\n }\n\n if (opts.from) {\n if (\n !pathAvailable ||\n /^\\w+:\\/\\//.test(opts.from) ||\n isAbsolute(opts.from)\n ) {\n this.file = opts.from\n } else {\n this.file = resolve(opts.from)\n }\n }\n\n if (pathAvailable && sourceMapAvailable) {\n let map = new PreviousMap(this.css, opts)\n if (map.text) {\n this.map = map\n let file = map.consumer().file\n if (!this.file && file) this.file = this.mapResolve(file)\n }\n }\n\n if (!this.file) {\n this.id = '<input css ' + nanoid(6) + '>'\n }\n if (this.map) this.map.file = this.from\n }\n\n error(message, line, column, opts = {}) {\n let result, endLine, endColumn\n\n if (line && typeof line === 'object') {\n let start = line\n let end = column\n if (typeof start.offset === 'number') {\n let pos = this.fromOffset(start.offset)\n line = pos.line\n column = pos.col\n } else {\n line = start.line\n column = start.column\n }\n if (typeof end.offset === 'number') {\n let pos = this.fromOffset(end.offset)\n endLine = pos.line\n endColumn = pos.col\n } else {\n endLine = end.line\n endColumn = end.column\n }\n } else if (!column) {\n let pos = this.fromOffset(line)\n line = pos.line\n column = pos.col\n }\n\n let origin = this.origin(line, column, endLine, endColumn)\n if (origin) {\n result = new CssSyntaxError(\n message,\n origin.endLine === undefined\n ? origin.line\n : { column: origin.column, line: origin.line },\n origin.endLine === undefined\n ? origin.column\n : { column: origin.endColumn, line: origin.endLine },\n origin.source,\n origin.file,\n opts.plugin\n )\n } else {\n result = new CssSyntaxError(\n message,\n endLine === undefined ? line : { column, line },\n endLine === undefined ? column : { column: endColumn, line: endLine },\n this.css,\n this.file,\n opts.plugin\n )\n }\n\n result.input = { column, endColumn, endLine, line, source: this.css }\n if (this.file) {\n if (pathToFileURL) {\n result.input.url = pathToFileURL(this.file).toString()\n }\n result.input.file = this.file\n }\n\n return result\n }\n\n fromOffset(offset) {\n let lastLine, lineToIndex\n if (!this[fromOffsetCache]) {\n let lines = this.css.split('\\n')\n lineToIndex = new Array(lines.length)\n let prevIndex = 0\n\n for (let i = 0, l = lines.length; i < l; i++) {\n lineToIndex[i] = prevIndex\n prevIndex += lines[i].length + 1\n }\n\n this[fromOffsetCache] = lineToIndex\n } else {\n lineToIndex = this[fromOffsetCache]\n }\n lastLine = lineToIndex[lineToIndex.length - 1]\n\n let min = 0\n if (offset >= lastLine) {\n min = lineToIndex.length - 1\n } else {\n let max = lineToIndex.length - 2\n let mid\n while (min < max) {\n mid = min + ((max - min) >> 1)\n if (offset < lineToIndex[mid]) {\n max = mid - 1\n } else if (offset >= lineToIndex[mid + 1]) {\n min = mid + 1\n } else {\n min = mid\n break\n }\n }\n }\n return {\n col: offset - lineToIndex[min] + 1,\n line: min + 1\n }\n }\n\n mapResolve(file) {\n if (/^\\w+:\\/\\//.test(file)) {\n return file\n }\n return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file)\n }\n\n origin(line, column, endLine, endColumn) {\n if (!this.map) return false\n let consumer = this.map.consumer()\n\n let from = consumer.originalPositionFor({ column, line })\n if (!from.source) return false\n\n let to\n if (typeof endLine === 'number') {\n to = consumer.originalPositionFor({ column: endColumn, line: endLine })\n }\n\n let fromUrl\n\n if (isAbsolute(from.source)) {\n fromUrl = pathToFileURL(from.source)\n } else {\n fromUrl = new URL(\n from.source,\n this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)\n )\n }\n\n let result = {\n column: from.column,\n endColumn: to && to.column,\n endLine: to && to.line,\n line: from.line,\n url: fromUrl.toString()\n }\n\n if (fromUrl.protocol === 'file:') {\n if (fileURLToPath) {\n result.file = fileURLToPath(fromUrl)\n } else {\n /* c8 ignore next 2 */\n throw new Error(`file: protocol is not available in this PostCSS build`)\n }\n }\n\n let source = consumer.sourceContentFor(from.source)\n if (source) result.source = source\n\n return result\n }\n\n toJSON() {\n let json = {}\n for (let name of ['hasBOM', 'css', 'file', 'id']) {\n if (this[name] != null) {\n json[name] = this[name]\n }\n }\n if (this.map) {\n json.map = { ...this.map }\n if (json.map.consumerCache) {\n json.map.consumerCache = undefined\n }\n }\n return json\n }\n\n get from() {\n return this.file || this.id\n }\n}\n\nmodule.exports = Input\nInput.default = Input\n\nif (terminalHighlight && terminalHighlight.registerInput) {\n terminalHighlight.registerInput(Input)\n}\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet MapGenerator = require('./map-generator')\nlet stringify = require('./stringify')\nlet Container = require('./container')\nlet Document = require('./document')\nlet warnOnce = require('./warn-once')\nlet Result = require('./result')\nlet parse = require('./parse')\nlet Root = require('./root')\n\nconst TYPE_TO_CLASS_NAME = {\n atrule: 'AtRule',\n comment: 'Comment',\n decl: 'Declaration',\n document: 'Document',\n root: 'Root',\n rule: 'Rule'\n}\n\nconst PLUGIN_PROPS = {\n AtRule: true,\n AtRuleExit: true,\n Comment: true,\n CommentExit: true,\n Declaration: true,\n DeclarationExit: true,\n Document: true,\n DocumentExit: true,\n Once: true,\n OnceExit: true,\n postcssPlugin: true,\n prepare: true,\n Root: true,\n RootExit: true,\n Rule: true,\n RuleExit: true\n}\n\nconst NOT_VISITORS = {\n Once: true,\n postcssPlugin: true,\n prepare: true\n}\n\nconst CHILDREN = 0\n\nfunction isPromise(obj) {\n return typeof obj === 'object' && typeof obj.then === 'function'\n}\n\nfunction getEvents(node) {\n let key = false\n let type = TYPE_TO_CLASS_NAME[node.type]\n if (node.type === 'decl') {\n key = node.prop.toLowerCase()\n } else if (node.type === 'atrule') {\n key = node.name.toLowerCase()\n }\n\n if (key && node.append) {\n return [\n type,\n type + '-' + key,\n CHILDREN,\n type + 'Exit',\n type + 'Exit-' + key\n ]\n } else if (key) {\n return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key]\n } else if (node.append) {\n return [type, CHILDREN, type + 'Exit']\n } else {\n return [type, type + 'Exit']\n }\n}\n\nfunction toStack(node) {\n let events\n if (node.type === 'document') {\n events = ['Document', CHILDREN, 'DocumentExit']\n } else if (node.type === 'root') {\n events = ['Root', CHILDREN, 'RootExit']\n } else {\n events = getEvents(node)\n }\n\n return {\n eventIndex: 0,\n events,\n iterator: 0,\n node,\n visitorIndex: 0,\n visitors: []\n }\n}\n\nfunction cleanMarks(node) {\n node[isClean] = false\n if (node.nodes) node.nodes.forEach(i => cleanMarks(i))\n return node\n}\n\nlet postcss = {}\n\nclass LazyResult {\n constructor(processor, css, opts) {\n this.stringified = false\n this.processed = false\n\n let root\n if (\n typeof css === 'object' &&\n css !== null &&\n (css.type === 'root' || css.type === 'document')\n ) {\n root = cleanMarks(css)\n } else if (css instanceof LazyResult || css instanceof Result) {\n root = cleanMarks(css.root)\n if (css.map) {\n if (typeof opts.map === 'undefined') opts.map = {}\n if (!opts.map.inline) opts.map.inline = false\n opts.map.prev = css.map\n }\n } else {\n let parser = parse\n if (opts.syntax) parser = opts.syntax.parse\n if (opts.parser) parser = opts.parser\n if (parser.parse) parser = parser.parse\n\n try {\n root = parser(css, opts)\n } catch (error) {\n this.processed = true\n this.error = error\n }\n\n if (root && !root[my]) {\n /* c8 ignore next 2 */\n Container.rebuild(root)\n }\n }\n\n this.result = new Result(processor, root, opts)\n this.helpers = { ...postcss, postcss, result: this.result }\n this.plugins = this.processor.plugins.map(plugin => {\n if (typeof plugin === 'object' && plugin.prepare) {\n return { ...plugin, ...plugin.prepare(this.result) }\n } else {\n return plugin\n }\n })\n }\n\n async() {\n if (this.error) return Promise.reject(this.error)\n if (this.processed) return Promise.resolve(this.result)\n if (!this.processing) {\n this.processing = this.runAsync()\n }\n return this.processing\n }\n\n catch(onRejected) {\n return this.async().catch(onRejected)\n }\n\n finally(onFinally) {\n return this.async().then(onFinally, onFinally)\n }\n\n getAsyncError() {\n throw new Error('Use process(css).then(cb) to work with async plugins')\n }\n\n handleError(error, node) {\n let plugin = this.result.lastPlugin\n try {\n if (node) node.addToError(error)\n this.error = error\n if (error.name === 'CssSyntaxError' && !error.plugin) {\n error.plugin = plugin.postcssPlugin\n error.setMessage()\n } else if (plugin.postcssVersion) {\n if (process.env.NODE_ENV !== 'production') {\n let pluginName = plugin.postcssPlugin\n let pluginVer = plugin.postcssVersion\n let runtimeVer = this.result.processor.version\n let a = pluginVer.split('.')\n let b = runtimeVer.split('.')\n\n if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n // eslint-disable-next-line no-console\n console.error(\n 'Unknown error from PostCSS plugin. Your current PostCSS ' +\n 'version is ' +\n runtimeVer +\n ', but ' +\n pluginName +\n ' uses ' +\n pluginVer +\n '. Perhaps this is the source of the error below.'\n )\n }\n }\n }\n } catch (err) {\n /* c8 ignore next 3 */\n // eslint-disable-next-line no-console\n if (console && console.error) console.error(err)\n }\n return error\n }\n\n prepareVisitors() {\n this.listeners = {}\n let add = (plugin, type, cb) => {\n if (!this.listeners[type]) this.listeners[type] = []\n this.listeners[type].push([plugin, cb])\n }\n for (let plugin of this.plugins) {\n if (typeof plugin === 'object') {\n for (let event in plugin) {\n if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n throw new Error(\n `Unknown event ${event} in ${plugin.postcssPlugin}. ` +\n `Try to update PostCSS (${this.processor.version} now).`\n )\n }\n if (!NOT_VISITORS[event]) {\n if (typeof plugin[event] === 'object') {\n for (let filter in plugin[event]) {\n if (filter === '*') {\n add(plugin, event, plugin[event][filter])\n } else {\n add(\n plugin,\n event + '-' + filter.toLowerCase(),\n plugin[event][filter]\n )\n }\n }\n } else if (typeof plugin[event] === 'function') {\n add(plugin, event, plugin[event])\n }\n }\n }\n }\n }\n this.hasListener = Object.keys(this.listeners).length > 0\n }\n\n async runAsync() {\n this.plugin = 0\n for (let i = 0; i < this.plugins.length; i++) {\n let plugin = this.plugins[i]\n let promise = this.runOnRoot(plugin)\n if (isPromise(promise)) {\n try {\n await promise\n } catch (error) {\n throw this.handleError(error)\n }\n }\n }\n\n this.prepareVisitors()\n if (this.hasListener) {\n let root = this.result.root\n while (!root[isClean]) {\n root[isClean] = true\n let stack = [toStack(root)]\n while (stack.length > 0) {\n let promise = this.visitTick(stack)\n if (isPromise(promise)) {\n try {\n await promise\n } catch (e) {\n let node = stack[stack.length - 1].node\n throw this.handleError(e, node)\n }\n }\n }\n }\n\n if (this.listeners.OnceExit) {\n for (let [plugin, visitor] of this.listeners.OnceExit) {\n this.result.lastPlugin = plugin\n try {\n if (root.type === 'document') {\n let roots = root.nodes.map(subRoot =>\n visitor(subRoot, this.helpers)\n )\n\n await Promise.all(roots)\n } else {\n await visitor(root, this.helpers)\n }\n } catch (e) {\n throw this.handleError(e)\n }\n }\n }\n }\n\n this.processed = true\n return this.stringify()\n }\n\n runOnRoot(plugin) {\n this.result.lastPlugin = plugin\n try {\n if (typeof plugin === 'object' && plugin.Once) {\n if (this.result.root.type === 'document') {\n let roots = this.result.root.nodes.map(root =>\n plugin.Once(root, this.helpers)\n )\n\n if (isPromise(roots[0])) {\n return Promise.all(roots)\n }\n\n return roots\n }\n\n return plugin.Once(this.result.root, this.helpers)\n } else if (typeof plugin === 'function') {\n return plugin(this.result.root, this.result)\n }\n } catch (error) {\n throw this.handleError(error)\n }\n }\n\n stringify() {\n if (this.error) throw this.error\n if (this.stringified) return this.result\n this.stringified = true\n\n this.sync()\n\n let opts = this.result.opts\n let str = stringify\n if (opts.syntax) str = opts.syntax.stringify\n if (opts.stringifier) str = opts.stringifier\n if (str.stringify) str = str.stringify\n\n let map = new MapGenerator(str, this.result.root, this.result.opts)\n let data = map.generate()\n this.result.css = data[0]\n this.result.map = data[1]\n\n return this.result\n }\n\n sync() {\n if (this.error) throw this.error\n if (this.processed) return this.result\n this.processed = true\n\n if (this.processing) {\n throw this.getAsyncError()\n }\n\n for (let plugin of this.plugins) {\n let promise = this.runOnRoot(plugin)\n if (isPromise(promise)) {\n throw this.getAsyncError()\n }\n }\n\n this.prepareVisitors()\n if (this.hasListener) {\n let root = this.result.root\n while (!root[isClean]) {\n root[isClean] = true\n this.walkSync(root)\n }\n if (this.listeners.OnceExit) {\n if (root.type === 'document') {\n for (let subRoot of root.nodes) {\n this.visitSync(this.listeners.OnceExit, subRoot)\n }\n } else {\n this.visitSync(this.listeners.OnceExit, root)\n }\n }\n }\n\n return this.result\n }\n\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== 'production') {\n if (!('from' in this.opts)) {\n warnOnce(\n 'Without `from` option PostCSS could generate wrong source map ' +\n 'and will not find Browserslist config. Set it to CSS file path ' +\n 'or to `undefined` to prevent this warning.'\n )\n }\n }\n return this.async().then(onFulfilled, onRejected)\n }\n\n toString() {\n return this.css\n }\n\n visitSync(visitors, node) {\n for (let [plugin, visitor] of visitors) {\n this.result.lastPlugin = plugin\n let promise\n try {\n promise = visitor(node, this.helpers)\n } catch (e) {\n throw this.handleError(e, node.proxyOf)\n }\n if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n return true\n }\n if (isPromise(promise)) {\n throw this.getAsyncError()\n }\n }\n }\n\n visitTick(stack) {\n let visit = stack[stack.length - 1]\n let { node, visitors } = visit\n\n if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n stack.pop()\n return\n }\n\n if (visitors.length > 0 && visit.visitorIndex < visitors.length) {\n let [plugin, visitor] = visitors[visit.visitorIndex]\n visit.visitorIndex += 1\n if (visit.visitorIndex === visitors.length) {\n visit.visitors = []\n visit.visitorIndex = 0\n }\n this.result.lastPlugin = plugin\n try {\n return visitor(node.toProxy(), this.helpers)\n } catch (e) {\n throw this.handleError(e, node)\n }\n }\n\n if (visit.iterator !== 0) {\n let iterator = visit.iterator\n let child\n while ((child = node.nodes[node.indexes[iterator]])) {\n node.indexes[iterator] += 1\n if (!child[isClean]) {\n child[isClean] = true\n stack.push(toStack(child))\n return\n }\n }\n visit.iterator = 0\n delete node.indexes[iterator]\n }\n\n let events = visit.events\n while (visit.eventIndex < events.length) {\n let event = events[visit.eventIndex]\n visit.eventIndex += 1\n if (event === CHILDREN) {\n if (node.nodes && node.nodes.length) {\n node[isClean] = true\n visit.iterator = node.getIterator()\n }\n return\n } else if (this.listeners[event]) {\n visit.visitors = this.listeners[event]\n return\n }\n }\n stack.pop()\n }\n\n walkSync(node) {\n node[isClean] = true\n let events = getEvents(node)\n for (let event of events) {\n if (event === CHILDREN) {\n if (node.nodes) {\n node.each(child => {\n if (!child[isClean]) this.walkSync(child)\n })\n }\n } else {\n let visitors = this.listeners[event]\n if (visitors) {\n if (this.visitSync(visitors, node.toProxy())) return\n }\n }\n }\n }\n\n warnings() {\n return this.sync().warnings()\n }\n\n get content() {\n return this.stringify().content\n }\n\n get css() {\n return this.stringify().css\n }\n\n get map() {\n return this.stringify().map\n }\n\n get messages() {\n return this.sync().messages\n }\n\n get opts() {\n return this.result.opts\n }\n\n get processor() {\n return this.result.processor\n }\n\n get root() {\n return this.sync().root\n }\n\n get [Symbol.toStringTag]() {\n return 'LazyResult'\n }\n}\n\nLazyResult.registerPostcss = dependant => {\n postcss = dependant\n}\n\nmodule.exports = LazyResult\nLazyResult.default = LazyResult\n\nRoot.registerLazyResult(LazyResult)\nDocument.registerLazyResult(LazyResult)\n","'use strict'\n\nlet list = {\n comma(string) {\n return list.split(string, [','], true)\n },\n\n space(string) {\n let spaces = [' ', '\\n', '\\t']\n return list.split(string, spaces)\n },\n\n split(string, separators, last) {\n let array = []\n let current = ''\n let split = false\n\n let func = 0\n let inQuote = false\n let prevQuote = ''\n let escape = false\n\n for (let letter of string) {\n if (escape) {\n escape = false\n } else if (letter === '\\\\') {\n escape = true\n } else if (inQuote) {\n if (letter === prevQuote) {\n inQuote = false\n }\n } else if (letter === '\"' || letter === \"'\") {\n inQuote = true\n prevQuote = letter\n } else if (letter === '(') {\n func += 1\n } else if (letter === ')') {\n if (func > 0) func -= 1\n } else if (func === 0) {\n if (separators.includes(letter)) split = true\n }\n\n if (split) {\n if (current !== '') array.push(current.trim())\n current = ''\n split = false\n } else {\n current += letter\n }\n }\n\n if (last || current !== '') array.push(current.trim())\n return array\n }\n}\n\nmodule.exports = list\nlist.default = list\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { dirname, relative, resolve, sep } = require('path')\nlet { pathToFileURL } = require('url')\n\nlet Input = require('./input')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(dirname && resolve && relative && sep)\n\nclass MapGenerator {\n constructor(stringify, root, opts, cssString) {\n this.stringify = stringify\n this.mapOpts = opts.map || {}\n this.root = root\n this.opts = opts\n this.css = cssString\n this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute\n\n this.memoizedFileURLs = new Map()\n this.memoizedPaths = new Map()\n this.memoizedURLs = new Map()\n }\n\n addAnnotation() {\n let content\n\n if (this.isInline()) {\n content =\n 'data:application/json;base64,' + this.toBase64(this.map.toString())\n } else if (typeof this.mapOpts.annotation === 'string') {\n content = this.mapOpts.annotation\n } else if (typeof this.mapOpts.annotation === 'function') {\n content = this.mapOpts.annotation(this.opts.to, this.root)\n } else {\n content = this.outputFile() + '.map'\n }\n let eol = '\\n'\n if (this.css.includes('\\r\\n')) eol = '\\r\\n'\n\n this.css += eol + '/*# sourceMappingURL=' + content + ' */'\n }\n\n applyPrevMaps() {\n for (let prev of this.previous()) {\n let from = this.toUrl(this.path(prev.file))\n let root = prev.root || dirname(prev.file)\n let map\n\n if (this.mapOpts.sourcesContent === false) {\n map = new SourceMapConsumer(prev.text)\n if (map.sourcesContent) {\n map.sourcesContent = map.sourcesContent.map(() => null)\n }\n } else {\n map = prev.consumer()\n }\n\n this.map.applySourceMap(map, from, this.toUrl(this.path(root)))\n }\n }\n\n clearAnnotation() {\n if (this.mapOpts.annotation === false) return\n\n if (this.root) {\n let node\n for (let i = this.root.nodes.length - 1; i >= 0; i--) {\n node = this.root.nodes[i]\n if (node.type !== 'comment') continue\n if (node.text.indexOf('# sourceMappingURL=') === 0) {\n this.root.removeChild(i)\n }\n }\n } else if (this.css) {\n this.css = this.css.replace(/(\\n)?\\/\\*#[\\S\\s]*?\\*\\/$/gm, '')\n }\n }\n\n generate() {\n this.clearAnnotation()\n if (pathAvailable && sourceMapAvailable && this.isMap()) {\n return this.generateMap()\n } else {\n let result = ''\n this.stringify(this.root, i => {\n result += i\n })\n return [result]\n }\n }\n\n generateMap() {\n if (this.root) {\n this.generateString()\n } else if (this.previous().length === 1) {\n let prev = this.previous()[0].consumer()\n prev.file = this.outputFile()\n this.map = SourceMapGenerator.fromSourceMap(prev)\n } else {\n this.map = new SourceMapGenerator({ file: this.outputFile() })\n this.map.addMapping({\n generated: { column: 0, line: 1 },\n original: { column: 0, line: 1 },\n source: this.opts.from\n ? this.toUrl(this.path(this.opts.from))\n : '<no source>'\n })\n }\n\n if (this.isSourcesContent()) this.setSourcesContent()\n if (this.root && this.previous().length > 0) this.applyPrevMaps()\n if (this.isAnnotation()) this.addAnnotation()\n\n if (this.isInline()) {\n return [this.css]\n } else {\n return [this.css, this.map]\n }\n }\n\n generateString() {\n this.css = ''\n this.map = new SourceMapGenerator({ file: this.outputFile() })\n\n let line = 1\n let column = 1\n\n let noSource = '<no source>'\n let mapping = {\n generated: { column: 0, line: 0 },\n original: { column: 0, line: 0 },\n source: ''\n }\n\n let lines, last\n this.stringify(this.root, (str, node, type) => {\n this.css += str\n\n if (node && type !== 'end') {\n mapping.generated.line = line\n mapping.generated.column = column - 1\n if (node.source && node.source.start) {\n mapping.source = this.sourcePath(node)\n mapping.original.line = node.source.start.line\n mapping.original.column = node.source.start.column - 1\n this.map.addMapping(mapping)\n } else {\n mapping.source = noSource\n mapping.original.line = 1\n mapping.original.column = 0\n this.map.addMapping(mapping)\n }\n }\n\n lines = str.match(/\\n/g)\n if (lines) {\n line += lines.length\n last = str.lastIndexOf('\\n')\n column = str.length - last\n } else {\n column += str.length\n }\n\n if (node && type !== 'start') {\n let p = node.parent || { raws: {} }\n let childless =\n node.type === 'decl' || (node.type === 'atrule' && !node.nodes)\n if (!childless || node !== p.last || p.raws.semicolon) {\n if (node.source && node.source.end) {\n mapping.source = this.sourcePath(node)\n mapping.original.line = node.source.end.line\n mapping.original.column = node.source.end.column - 1\n mapping.generated.line = line\n mapping.generated.column = column - 2\n this.map.addMapping(mapping)\n } else {\n mapping.source = noSource\n mapping.original.line = 1\n mapping.original.column = 0\n mapping.generated.line = line\n mapping.generated.column = column - 1\n this.map.addMapping(mapping)\n }\n }\n }\n })\n }\n\n isAnnotation() {\n if (this.isInline()) {\n return true\n }\n if (typeof this.mapOpts.annotation !== 'undefined') {\n return this.mapOpts.annotation\n }\n if (this.previous().length) {\n return this.previous().some(i => i.annotation)\n }\n return true\n }\n\n isInline() {\n if (typeof this.mapOpts.inline !== 'undefined') {\n return this.mapOpts.inline\n }\n\n let annotation = this.mapOpts.annotation\n if (typeof annotation !== 'undefined' && annotation !== true) {\n return false\n }\n\n if (this.previous().length) {\n return this.previous().some(i => i.inline)\n }\n return true\n }\n\n isMap() {\n if (typeof this.opts.map !== 'undefined') {\n return !!this.opts.map\n }\n return this.previous().length > 0\n }\n\n isSourcesContent() {\n if (typeof this.mapOpts.sourcesContent !== 'undefined') {\n return this.mapOpts.sourcesContent\n }\n if (this.previous().length) {\n return this.previous().some(i => i.withContent())\n }\n return true\n }\n\n outputFile() {\n if (this.opts.to) {\n return this.path(this.opts.to)\n } else if (this.opts.from) {\n return this.path(this.opts.from)\n } else {\n return 'to.css'\n }\n }\n\n path(file) {\n if (this.mapOpts.absolute) return file\n if (file.charCodeAt(0) === 60 /* `<` */) return file\n if (/^\\w+:\\/\\//.test(file)) return file\n let cached = this.memoizedPaths.get(file)\n if (cached) return cached\n\n let from = this.opts.to ? dirname(this.opts.to) : '.'\n\n if (typeof this.mapOpts.annotation === 'string') {\n from = dirname(resolve(from, this.mapOpts.annotation))\n }\n\n let path = relative(from, file)\n this.memoizedPaths.set(file, path)\n\n return path\n }\n\n previous() {\n if (!this.previousMaps) {\n this.previousMaps = []\n if (this.root) {\n this.root.walk(node => {\n if (node.source && node.source.input.map) {\n let map = node.source.input.map\n if (!this.previousMaps.includes(map)) {\n this.previousMaps.push(map)\n }\n }\n })\n } else {\n let input = new Input(this.css, this.opts)\n if (input.map) this.previousMaps.push(input.map)\n }\n }\n\n return this.previousMaps\n }\n\n setSourcesContent() {\n let already = {}\n if (this.root) {\n this.root.walk(node => {\n if (node.source) {\n let from = node.source.input.from\n if (from && !already[from]) {\n already[from] = true\n let fromUrl = this.usesFileUrls\n ? this.toFileUrl(from)\n : this.toUrl(this.path(from))\n this.map.setSourceContent(fromUrl, node.source.input.css)\n }\n }\n })\n } else if (this.css) {\n let from = this.opts.from\n ? this.toUrl(this.path(this.opts.from))\n : '<no source>'\n this.map.setSourceContent(from, this.css)\n }\n }\n\n sourcePath(node) {\n if (this.mapOpts.from) {\n return this.toUrl(this.mapOpts.from)\n } else if (this.usesFileUrls) {\n return this.toFileUrl(node.source.input.from)\n } else {\n return this.toUrl(this.path(node.source.input.from))\n }\n }\n\n toBase64(str) {\n if (Buffer) {\n return Buffer.from(str).toString('base64')\n } else {\n return window.btoa(unescape(encodeURIComponent(str)))\n }\n }\n\n toFileUrl(path) {\n let cached = this.memoizedFileURLs.get(path)\n if (cached) return cached\n\n if (pathToFileURL) {\n let fileURL = pathToFileURL(path).toString()\n this.memoizedFileURLs.set(path, fileURL)\n\n return fileURL\n } else {\n throw new Error(\n '`map.absolute` option is not available in this PostCSS build'\n )\n }\n }\n\n toUrl(path) {\n let cached = this.memoizedURLs.get(path)\n if (cached) return cached\n\n if (sep === '\\\\') {\n path = path.replace(/\\\\/g, '/')\n }\n\n let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent)\n this.memoizedURLs.set(path, url)\n\n return url\n }\n}\n\nmodule.exports = MapGenerator\n","'use strict'\n\nlet MapGenerator = require('./map-generator')\nlet stringify = require('./stringify')\nlet warnOnce = require('./warn-once')\nlet parse = require('./parse')\nconst Result = require('./result')\n\nclass NoWorkResult {\n constructor(processor, css, opts) {\n css = css.toString()\n this.stringified = false\n\n this._processor = processor\n this._css = css\n this._opts = opts\n this._map = undefined\n let root\n\n let str = stringify\n this.result = new Result(this._processor, root, this._opts)\n this.result.css = css\n\n let self = this\n Object.defineProperty(this.result, 'root', {\n get() {\n return self.root\n }\n })\n\n let map = new MapGenerator(str, root, this._opts, css)\n if (map.isMap()) {\n let [generatedCSS, generatedMap] = map.generate()\n if (generatedCSS) {\n this.result.css = generatedCSS\n }\n if (generatedMap) {\n this.result.map = generatedMap\n }\n }\n }\n\n async() {\n if (this.error) return Promise.reject(this.error)\n return Promise.resolve(this.result)\n }\n\n catch(onRejected) {\n return this.async().catch(onRejected)\n }\n\n finally(onFinally) {\n return this.async().then(onFinally, onFinally)\n }\n\n sync() {\n if (this.error) throw this.error\n return this.result\n }\n\n then(onFulfilled, onRejected) {\n if (process.env.NODE_ENV !== 'production') {\n if (!('from' in this._opts)) {\n warnOnce(\n 'Without `from` option PostCSS could generate wrong source map ' +\n 'and will not find Browserslist config. Set it to CSS file path ' +\n 'or to `undefined` to prevent this warning.'\n )\n }\n }\n\n return this.async().then(onFulfilled, onRejected)\n }\n\n toString() {\n return this._css\n }\n\n warnings() {\n return []\n }\n\n get content() {\n return this.result.css\n }\n\n get css() {\n return this.result.css\n }\n\n get map() {\n return this.result.map\n }\n\n get messages() {\n return []\n }\n\n get opts() {\n return this.result.opts\n }\n\n get processor() {\n return this.result.processor\n }\n\n get root() {\n if (this._root) {\n return this._root\n }\n\n let root\n let parser = parse\n\n try {\n root = parser(this._css, this._opts)\n } catch (error) {\n this.error = error\n }\n\n if (this.error) {\n throw this.error\n } else {\n this._root = root\n return root\n }\n }\n\n get [Symbol.toStringTag]() {\n return 'NoWorkResult'\n }\n}\n\nmodule.exports = NoWorkResult\nNoWorkResult.default = NoWorkResult\n","'use strict'\n\nlet { isClean, my } = require('./symbols')\nlet CssSyntaxError = require('./css-syntax-error')\nlet Stringifier = require('./stringifier')\nlet stringify = require('./stringify')\n\nfunction cloneNode(obj, parent) {\n let cloned = new obj.constructor()\n\n for (let i in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n /* c8 ignore next 2 */\n continue\n }\n if (i === 'proxyCache') continue\n let value = obj[i]\n let type = typeof value\n\n if (i === 'parent' && type === 'object') {\n if (parent) cloned[i] = parent\n } else if (i === 'source') {\n cloned[i] = value\n } else if (Array.isArray(value)) {\n cloned[i] = value.map(j => cloneNode(j, cloned))\n } else {\n if (type === 'object' && value !== null) value = cloneNode(value)\n cloned[i] = value\n }\n }\n\n return cloned\n}\n\nclass Node {\n constructor(defaults = {}) {\n this.raws = {}\n this[isClean] = false\n this[my] = true\n\n for (let name in defaults) {\n if (name === 'nodes') {\n this.nodes = []\n for (let node of defaults[name]) {\n if (typeof node.clone === 'function') {\n this.append(node.clone())\n } else {\n this.append(node)\n }\n }\n } else {\n this[name] = defaults[name]\n }\n }\n }\n\n addToError(error) {\n error.postcssNode = this\n if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n let s = this.source\n error.stack = error.stack.replace(\n /\\n\\s{4}at /,\n `$&${s.input.from}:${s.start.line}:${s.start.column}$&`\n )\n }\n return error\n }\n\n after(add) {\n this.parent.insertAfter(this, add)\n return this\n }\n\n assign(overrides = {}) {\n for (let name in overrides) {\n this[name] = overrides[name]\n }\n return this\n }\n\n before(add) {\n this.parent.insertBefore(this, add)\n return this\n }\n\n cleanRaws(keepBetween) {\n delete this.raws.before\n delete this.raws.after\n if (!keepBetween) delete this.raws.between\n }\n\n clone(overrides = {}) {\n let cloned = cloneNode(this)\n for (let name in overrides) {\n cloned[name] = overrides[name]\n }\n return cloned\n }\n\n cloneAfter(overrides = {}) {\n let cloned = this.clone(overrides)\n this.parent.insertAfter(this, cloned)\n return cloned\n }\n\n cloneBefore(overrides = {}) {\n let cloned = this.clone(overrides)\n this.parent.insertBefore(this, cloned)\n return cloned\n }\n\n error(message, opts = {}) {\n if (this.source) {\n let { end, start } = this.rangeBy(opts)\n return this.source.input.error(\n message,\n { column: start.column, line: start.line },\n { column: end.column, line: end.line },\n opts\n )\n }\n return new CssSyntaxError(message)\n }\n\n getProxyProcessor() {\n return {\n get(node, prop) {\n if (prop === 'proxyOf') {\n return node\n } else if (prop === 'root') {\n return () => node.root().toProxy()\n } else {\n return node[prop]\n }\n },\n\n set(node, prop, value) {\n if (node[prop] === value) return true\n node[prop] = value\n if (\n prop === 'prop' ||\n prop === 'value' ||\n prop === 'name' ||\n prop === 'params' ||\n prop === 'important' ||\n /* c8 ignore next */\n prop === 'text'\n ) {\n node.markDirty()\n }\n return true\n }\n }\n }\n\n markDirty() {\n if (this[isClean]) {\n this[isClean] = false\n let next = this\n while ((next = next.parent)) {\n next[isClean] = false\n }\n }\n }\n\n next() {\n if (!this.parent) return undefined\n let index = this.parent.index(this)\n return this.parent.nodes[index + 1]\n }\n\n positionBy(opts, stringRepresentation) {\n let pos = this.source.start\n if (opts.index) {\n pos = this.positionInside(opts.index, stringRepresentation)\n } else if (opts.word) {\n stringRepresentation = this.toString()\n let index = stringRepresentation.indexOf(opts.word)\n if (index !== -1) pos = this.positionInside(index, stringRepresentation)\n }\n return pos\n }\n\n positionInside(index, stringRepresentation) {\n let string = stringRepresentation || this.toString()\n let column = this.source.start.column\n let line = this.source.start.line\n\n for (let i = 0; i < index; i++) {\n if (string[i] === '\\n') {\n column = 1\n line += 1\n } else {\n column += 1\n }\n }\n\n return { column, line }\n }\n\n prev() {\n if (!this.parent) return undefined\n let index = this.parent.index(this)\n return this.parent.nodes[index - 1]\n }\n\n rangeBy(opts) {\n let start = {\n column: this.source.start.column,\n line: this.source.start.line\n }\n let end = this.source.end\n ? {\n column: this.source.end.column + 1,\n line: this.source.end.line\n }\n : {\n column: start.column + 1,\n line: start.line\n }\n\n if (opts.word) {\n let stringRepresentation = this.toString()\n let index = stringRepresentation.indexOf(opts.word)\n if (index !== -1) {\n start = this.positionInside(index, stringRepresentation)\n end = this.positionInside(index + opts.word.length, stringRepresentation)\n }\n } else {\n if (opts.start) {\n start = {\n column: opts.start.column,\n line: opts.start.line\n }\n } else if (opts.index) {\n start = this.positionInside(opts.index)\n }\n\n if (opts.end) {\n end = {\n column: opts.end.column,\n line: opts.end.line\n }\n } else if (opts.endIndex) {\n end = this.positionInside(opts.endIndex)\n } else if (opts.index) {\n end = this.positionInside(opts.index + 1)\n }\n }\n\n if (\n end.line < start.line ||\n (end.line === start.line && end.column <= start.column)\n ) {\n end = { column: start.column + 1, line: start.line }\n }\n\n return { end, start }\n }\n\n raw(prop, defaultType) {\n let str = new Stringifier()\n return str.raw(this, prop, defaultType)\n }\n\n remove() {\n if (this.parent) {\n this.parent.removeChild(this)\n }\n this.parent = undefined\n return this\n }\n\n replaceWith(...nodes) {\n if (this.parent) {\n let bookmark = this\n let foundSelf = false\n for (let node of nodes) {\n if (node === this) {\n foundSelf = true\n } else if (foundSelf) {\n this.parent.insertAfter(bookmark, node)\n bookmark = node\n } else {\n this.parent.insertBefore(bookmark, node)\n }\n }\n\n if (!foundSelf) {\n this.remove()\n }\n }\n\n return this\n }\n\n root() {\n let result = this\n while (result.parent && result.parent.type !== 'document') {\n result = result.parent\n }\n return result\n }\n\n toJSON(_, inputs) {\n let fixed = {}\n let emitInputs = inputs == null\n inputs = inputs || new Map()\n let inputsNextIndex = 0\n\n for (let name in this) {\n if (!Object.prototype.hasOwnProperty.call(this, name)) {\n /* c8 ignore next 2 */\n continue\n }\n if (name === 'parent' || name === 'proxyCache') continue\n let value = this[name]\n\n if (Array.isArray(value)) {\n fixed[name] = value.map(i => {\n if (typeof i === 'object' && i.toJSON) {\n return i.toJSON(null, inputs)\n } else {\n return i\n }\n })\n } else if (typeof value === 'object' && value.toJSON) {\n fixed[name] = value.toJSON(null, inputs)\n } else if (name === 'source') {\n let inputId = inputs.get(value.input)\n if (inputId == null) {\n inputId = inputsNextIndex\n inputs.set(value.input, inputsNextIndex)\n inputsNextIndex++\n }\n fixed[name] = {\n end: value.end,\n inputId,\n start: value.start\n }\n } else {\n fixed[name] = value\n }\n }\n\n if (emitInputs) {\n fixed.inputs = [...inputs.keys()].map(input => input.toJSON())\n }\n\n return fixed\n }\n\n toProxy() {\n if (!this.proxyCache) {\n this.proxyCache = new Proxy(this, this.getProxyProcessor())\n }\n return this.proxyCache\n }\n\n toString(stringifier = stringify) {\n if (stringifier.stringify) stringifier = stringifier.stringify\n let result = ''\n stringifier(this, i => {\n result += i\n })\n return result\n }\n\n warn(result, text, opts) {\n let data = { node: this }\n for (let i in opts) data[i] = opts[i]\n return result.warn(text, data)\n }\n\n get proxyOf() {\n return this\n }\n}\n\nmodule.exports = Node\nNode.default = Node\n","'use strict'\n\nlet Container = require('./container')\nlet Parser = require('./parser')\nlet Input = require('./input')\n\nfunction parse(css, opts) {\n let input = new Input(css, opts)\n let parser = new Parser(input)\n try {\n parser.parse()\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n if (e.name === 'CssSyntaxError' && opts && opts.from) {\n if (/\\.scss$/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse SCSS with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-scss parser'\n } else if (/\\.sass/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse Sass with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-sass parser'\n } else if (/\\.less$/i.test(opts.from)) {\n e.message +=\n '\\nYou tried to parse Less with ' +\n 'the standard CSS parser; ' +\n 'try again with the postcss-less parser'\n }\n }\n }\n throw e\n }\n\n return parser.root\n}\n\nmodule.exports = parse\nparse.default = parse\n\nContainer.registerParse(parse)\n","'use strict'\n\nlet Declaration = require('./declaration')\nlet tokenizer = require('./tokenize')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Root = require('./root')\nlet Rule = require('./rule')\n\nconst SAFE_COMMENT_NEIGHBOR = {\n empty: true,\n space: true\n}\n\nfunction findLastWithPosition(tokens) {\n for (let i = tokens.length - 1; i >= 0; i--) {\n let token = tokens[i]\n let pos = token[3] || token[2]\n if (pos) return pos\n }\n}\n\nclass Parser {\n constructor(input) {\n this.input = input\n\n this.root = new Root()\n this.current = this.root\n this.spaces = ''\n this.semicolon = false\n this.customProperty = false\n\n this.createTokenizer()\n this.root.source = { input, start: { column: 1, line: 1, offset: 0 } }\n }\n\n atrule(token) {\n let node = new AtRule()\n node.name = token[1].slice(1)\n if (node.name === '') {\n this.unnamedAtrule(node, token)\n }\n this.init(node, token[2])\n\n let type\n let prev\n let shift\n let last = false\n let open = false\n let params = []\n let brackets = []\n\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken()\n type = token[0]\n\n if (type === '(' || type === '[') {\n brackets.push(type === '(' ? ')' : ']')\n } else if (type === '{' && brackets.length > 0) {\n brackets.push('}')\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop()\n }\n\n if (brackets.length === 0) {\n if (type === ';') {\n node.source.end = this.getPosition(token[2])\n node.source.end.offset++\n this.semicolon = true\n break\n } else if (type === '{') {\n open = true\n break\n } else if (type === '}') {\n if (params.length > 0) {\n shift = params.length - 1\n prev = params[shift]\n while (prev && prev[0] === 'space') {\n prev = params[--shift]\n }\n if (prev) {\n node.source.end = this.getPosition(prev[3] || prev[2])\n node.source.end.offset++\n }\n }\n this.end(token)\n break\n } else {\n params.push(token)\n }\n } else {\n params.push(token)\n }\n\n if (this.tokenizer.endOfFile()) {\n last = true\n break\n }\n }\n\n node.raws.between = this.spacesAndCommentsFromEnd(params)\n if (params.length) {\n node.raws.afterName = this.spacesAndCommentsFromStart(params)\n this.raw(node, 'params', params)\n if (last) {\n token = params[params.length - 1]\n node.source.end = this.getPosition(token[3] || token[2])\n node.source.end.offset++\n this.spaces = node.raws.between\n node.raws.between = ''\n }\n } else {\n node.raws.afterName = ''\n node.params = ''\n }\n\n if (open) {\n node.nodes = []\n this.current = node\n }\n }\n\n checkMissedSemicolon(tokens) {\n let colon = this.colon(tokens)\n if (colon === false) return\n\n let founded = 0\n let token\n for (let j = colon - 1; j >= 0; j--) {\n token = tokens[j]\n if (token[0] !== 'space') {\n founded += 1\n if (founded === 2) break\n }\n }\n // If the token is a word, e.g. `!important`, `red` or any other valid property's value.\n // Then we need to return the colon after that word token. [3] is the \"end\" colon of that word.\n // And because we need it after that one we do +1 to get the next one.\n throw this.input.error(\n 'Missed semicolon',\n token[0] === 'word' ? token[3] + 1 : token[2]\n )\n }\n\n colon(tokens) {\n let brackets = 0\n let token, type, prev\n for (let [i, element] of tokens.entries()) {\n token = element\n type = token[0]\n\n if (type === '(') {\n brackets += 1\n }\n if (type === ')') {\n brackets -= 1\n }\n if (brackets === 0 && type === ':') {\n if (!prev) {\n this.doubleColon(token)\n } else if (prev[0] === 'word' && prev[1] === 'progid') {\n continue\n } else {\n return i\n }\n }\n\n prev = token\n }\n return false\n }\n\n comment(token) {\n let node = new Comment()\n this.init(node, token[2])\n node.source.end = this.getPosition(token[3] || token[2])\n node.source.end.offset++\n\n let text = token[1].slice(2, -2)\n if (/^\\s*$/.test(text)) {\n node.text = ''\n node.raws.left = text\n node.raws.right = ''\n } else {\n let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/)\n node.text = match[2]\n node.raws.left = match[1]\n node.raws.right = match[3]\n }\n }\n\n createTokenizer() {\n this.tokenizer = tokenizer(this.input)\n }\n\n decl(tokens, customProperty) {\n let node = new Declaration()\n this.init(node, tokens[0][2])\n\n let last = tokens[tokens.length - 1]\n if (last[0] === ';') {\n this.semicolon = true\n tokens.pop()\n }\n\n node.source.end = this.getPosition(\n last[3] || last[2] || findLastWithPosition(tokens)\n )\n node.source.end.offset++\n\n while (tokens[0][0] !== 'word') {\n if (tokens.length === 1) this.unknownWord(tokens)\n node.raws.before += tokens.shift()[1]\n }\n node.source.start = this.getPosition(tokens[0][2])\n\n node.prop = ''\n while (tokens.length) {\n let type = tokens[0][0]\n if (type === ':' || type === 'space' || type === 'comment') {\n break\n }\n node.prop += tokens.shift()[1]\n }\n\n node.raws.between = ''\n\n let token\n while (tokens.length) {\n token = tokens.shift()\n\n if (token[0] === ':') {\n node.raws.between += token[1]\n break\n } else {\n if (token[0] === 'word' && /\\w/.test(token[1])) {\n this.unknownWord([token])\n }\n node.raws.between += token[1]\n }\n }\n\n if (node.prop[0] === '_' || node.prop[0] === '*') {\n node.raws.before += node.prop[0]\n node.prop = node.prop.slice(1)\n }\n\n let firstSpaces = []\n let next\n while (tokens.length) {\n next = tokens[0][0]\n if (next !== 'space' && next !== 'comment') break\n firstSpaces.push(tokens.shift())\n }\n\n this.precheckMissedSemicolon(tokens)\n\n for (let i = tokens.length - 1; i >= 0; i--) {\n token = tokens[i]\n if (token[1].toLowerCase() === '!important') {\n node.important = true\n let string = this.stringFrom(tokens, i)\n string = this.spacesFromEnd(tokens) + string\n if (string !== ' !important') node.raws.important = string\n break\n } else if (token[1].toLowerCase() === 'important') {\n let cache = tokens.slice(0)\n let str = ''\n for (let j = i; j > 0; j--) {\n let type = cache[j][0]\n if (str.trim().indexOf('!') === 0 && type !== 'space') {\n break\n }\n str = cache.pop()[1] + str\n }\n if (str.trim().indexOf('!') === 0) {\n node.important = true\n node.raws.important = str\n tokens = cache\n }\n }\n\n if (token[0] !== 'space' && token[0] !== 'comment') {\n break\n }\n }\n\n let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment')\n\n if (hasWord) {\n node.raws.between += firstSpaces.map(i => i[1]).join('')\n firstSpaces = []\n }\n this.raw(node, 'value', firstSpaces.concat(tokens), customProperty)\n\n if (node.value.includes(':') && !customProperty) {\n this.checkMissedSemicolon(tokens)\n }\n }\n\n doubleColon(token) {\n throw this.input.error(\n 'Double colon',\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n )\n }\n\n emptyRule(token) {\n let node = new Rule()\n this.init(node, token[2])\n node.selector = ''\n node.raws.between = ''\n this.current = node\n }\n\n end(token) {\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon\n }\n this.semicolon = false\n\n this.current.raws.after = (this.current.raws.after || '') + this.spaces\n this.spaces = ''\n\n if (this.current.parent) {\n this.current.source.end = this.getPosition(token[2])\n this.current.source.end.offset++\n this.current = this.current.parent\n } else {\n this.unexpectedClose(token)\n }\n }\n\n endFile() {\n if (this.current.parent) this.unclosedBlock()\n if (this.current.nodes && this.current.nodes.length) {\n this.current.raws.semicolon = this.semicolon\n }\n this.current.raws.after = (this.current.raws.after || '') + this.spaces\n this.root.source.end = this.getPosition(this.tokenizer.position())\n }\n\n freeSemicolon(token) {\n this.spaces += token[1]\n if (this.current.nodes) {\n let prev = this.current.nodes[this.current.nodes.length - 1]\n if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {\n prev.raws.ownSemicolon = this.spaces\n this.spaces = ''\n }\n }\n }\n\n // Helpers\n\n getPosition(offset) {\n let pos = this.input.fromOffset(offset)\n return {\n column: pos.col,\n line: pos.line,\n offset\n }\n }\n\n init(node, offset) {\n this.current.push(node)\n node.source = {\n input: this.input,\n start: this.getPosition(offset)\n }\n node.raws.before = this.spaces\n this.spaces = ''\n if (node.type !== 'comment') this.semicolon = false\n }\n\n other(start) {\n let end = false\n let type = null\n let colon = false\n let bracket = null\n let brackets = []\n let customProperty = start[1].startsWith('--')\n\n let tokens = []\n let token = start\n while (token) {\n type = token[0]\n tokens.push(token)\n\n if (type === '(' || type === '[') {\n if (!bracket) bracket = token\n brackets.push(type === '(' ? ')' : ']')\n } else if (customProperty && colon && type === '{') {\n if (!bracket) bracket = token\n brackets.push('}')\n } else if (brackets.length === 0) {\n if (type === ';') {\n if (colon) {\n this.decl(tokens, customProperty)\n return\n } else {\n break\n }\n } else if (type === '{') {\n this.rule(tokens)\n return\n } else if (type === '}') {\n this.tokenizer.back(tokens.pop())\n end = true\n break\n } else if (type === ':') {\n colon = true\n }\n } else if (type === brackets[brackets.length - 1]) {\n brackets.pop()\n if (brackets.length === 0) bracket = null\n }\n\n token = this.tokenizer.nextToken()\n }\n\n if (this.tokenizer.endOfFile()) end = true\n if (brackets.length > 0) this.unclosedBracket(bracket)\n\n if (end && colon) {\n if (!customProperty) {\n while (tokens.length) {\n token = tokens[tokens.length - 1][0]\n if (token !== 'space' && token !== 'comment') break\n this.tokenizer.back(tokens.pop())\n }\n }\n this.decl(tokens, customProperty)\n } else {\n this.unknownWord(tokens)\n }\n }\n\n parse() {\n let token\n while (!this.tokenizer.endOfFile()) {\n token = this.tokenizer.nextToken()\n\n switch (token[0]) {\n case 'space':\n this.spaces += token[1]\n break\n\n case ';':\n this.freeSemicolon(token)\n break\n\n case '}':\n this.end(token)\n break\n\n case 'comment':\n this.comment(token)\n break\n\n case 'at-word':\n this.atrule(token)\n break\n\n case '{':\n this.emptyRule(token)\n break\n\n default:\n this.other(token)\n break\n }\n }\n this.endFile()\n }\n\n precheckMissedSemicolon(/* tokens */) {\n // Hook for Safe Parser\n }\n\n raw(node, prop, tokens, customProperty) {\n let token, type\n let length = tokens.length\n let value = ''\n let clean = true\n let next, prev\n\n for (let i = 0; i < length; i += 1) {\n token = tokens[i]\n type = token[0]\n if (type === 'space' && i === length - 1 && !customProperty) {\n clean = false\n } else if (type === 'comment') {\n prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty'\n next = tokens[i + 1] ? tokens[i + 1][0] : 'empty'\n if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n if (value.slice(-1) === ',') {\n clean = false\n } else {\n value += token[1]\n }\n } else {\n clean = false\n }\n } else {\n value += token[1]\n }\n }\n if (!clean) {\n let raw = tokens.reduce((all, i) => all + i[1], '')\n node.raws[prop] = { raw, value }\n }\n node[prop] = value\n }\n\n rule(tokens) {\n tokens.pop()\n\n let node = new Rule()\n this.init(node, tokens[0][2])\n\n node.raws.between = this.spacesAndCommentsFromEnd(tokens)\n this.raw(node, 'selector', tokens)\n this.current = node\n }\n\n spacesAndCommentsFromEnd(tokens) {\n let lastTokenType\n let spaces = ''\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0]\n if (lastTokenType !== 'space' && lastTokenType !== 'comment') break\n spaces = tokens.pop()[1] + spaces\n }\n return spaces\n }\n\n // Errors\n\n spacesAndCommentsFromStart(tokens) {\n let next\n let spaces = ''\n while (tokens.length) {\n next = tokens[0][0]\n if (next !== 'space' && next !== 'comment') break\n spaces += tokens.shift()[1]\n }\n return spaces\n }\n\n spacesFromEnd(tokens) {\n let lastTokenType\n let spaces = ''\n while (tokens.length) {\n lastTokenType = tokens[tokens.length - 1][0]\n if (lastTokenType !== 'space') break\n spaces = tokens.pop()[1] + spaces\n }\n return spaces\n }\n\n stringFrom(tokens, from) {\n let result = ''\n for (let i = from; i < tokens.length; i++) {\n result += tokens[i][1]\n }\n tokens.splice(from, tokens.length - from)\n return result\n }\n\n unclosedBlock() {\n let pos = this.current.source.start\n throw this.input.error('Unclosed block', pos.line, pos.column)\n }\n\n unclosedBracket(bracket) {\n throw this.input.error(\n 'Unclosed bracket',\n { offset: bracket[2] },\n { offset: bracket[2] + 1 }\n )\n }\n\n unexpectedClose(token) {\n throw this.input.error(\n 'Unexpected }',\n { offset: token[2] },\n { offset: token[2] + 1 }\n )\n }\n\n unknownWord(tokens) {\n throw this.input.error(\n 'Unknown word',\n { offset: tokens[0][2] },\n { offset: tokens[0][2] + tokens[0][1].length }\n )\n }\n\n unnamedAtrule(node, token) {\n throw this.input.error(\n 'At-rule without name',\n { offset: token[2] },\n { offset: token[2] + token[1].length }\n )\n }\n}\n\nmodule.exports = Parser\n","'use strict'\n\nlet CssSyntaxError = require('./css-syntax-error')\nlet Declaration = require('./declaration')\nlet LazyResult = require('./lazy-result')\nlet Container = require('./container')\nlet Processor = require('./processor')\nlet stringify = require('./stringify')\nlet fromJSON = require('./fromJSON')\nlet Document = require('./document')\nlet Warning = require('./warning')\nlet Comment = require('./comment')\nlet AtRule = require('./at-rule')\nlet Result = require('./result.js')\nlet Input = require('./input')\nlet parse = require('./parse')\nlet list = require('./list')\nlet Rule = require('./rule')\nlet Root = require('./root')\nlet Node = require('./node')\n\nfunction postcss(...plugins) {\n if (plugins.length === 1 && Array.isArray(plugins[0])) {\n plugins = plugins[0]\n }\n return new Processor(plugins)\n}\n\npostcss.plugin = function plugin(name, initializer) {\n let warningPrinted = false\n function creator(...args) {\n // eslint-disable-next-line no-console\n if (console && console.warn && !warningPrinted) {\n warningPrinted = true\n // eslint-disable-next-line no-console\n console.warn(\n name +\n ': postcss.plugin was deprecated. Migration guide:\\n' +\n 'https://evilmartians.com/chronicles/postcss-8-plugin-migration'\n )\n if (process.env.LANG && process.env.LANG.startsWith('cn')) {\n /* c8 ignore next 7 */\n // eslint-disable-next-line no-console\n console.warn(\n name +\n ': é‡Œé¢ postcss.plugin 被弃用. è¿ç§»æŒ‡å—:\\n' +\n 'https://www.w3ctech.com/topic/2226'\n )\n }\n }\n let transformer = initializer(...args)\n transformer.postcssPlugin = name\n transformer.postcssVersion = new Processor().version\n return transformer\n }\n\n let cache\n Object.defineProperty(creator, 'postcss', {\n get() {\n if (!cache) cache = creator()\n return cache\n }\n })\n\n creator.process = function (css, processOpts, pluginOpts) {\n return postcss([creator(pluginOpts)]).process(css, processOpts)\n }\n\n return creator\n}\n\npostcss.stringify = stringify\npostcss.parse = parse\npostcss.fromJSON = fromJSON\npostcss.list = list\n\npostcss.comment = defaults => new Comment(defaults)\npostcss.atRule = defaults => new AtRule(defaults)\npostcss.decl = defaults => new Declaration(defaults)\npostcss.rule = defaults => new Rule(defaults)\npostcss.root = defaults => new Root(defaults)\npostcss.document = defaults => new Document(defaults)\n\npostcss.CssSyntaxError = CssSyntaxError\npostcss.Declaration = Declaration\npostcss.Container = Container\npostcss.Processor = Processor\npostcss.Document = Document\npostcss.Comment = Comment\npostcss.Warning = Warning\npostcss.AtRule = AtRule\npostcss.Result = Result\npostcss.Input = Input\npostcss.Rule = Rule\npostcss.Root = Root\npostcss.Node = Node\n\nLazyResult.registerPostcss(postcss)\n\nmodule.exports = postcss\npostcss.default = postcss\n","'use strict'\n\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { existsSync, readFileSync } = require('fs')\nlet { dirname, join } = require('path')\n\nfunction fromBase64(str) {\n if (Buffer) {\n return Buffer.from(str, 'base64').toString()\n } else {\n /* c8 ignore next 2 */\n return window.atob(str)\n }\n}\n\nclass PreviousMap {\n constructor(css, opts) {\n if (opts.map === false) return\n this.loadAnnotation(css)\n this.inline = this.startWith(this.annotation, 'data:')\n\n let prev = opts.map ? opts.map.prev : undefined\n let text = this.loadMap(opts.from, prev)\n if (!this.mapFile && opts.from) {\n this.mapFile = opts.from\n }\n if (this.mapFile) this.root = dirname(this.mapFile)\n if (text) this.text = text\n }\n\n consumer() {\n if (!this.consumerCache) {\n this.consumerCache = new SourceMapConsumer(this.text)\n }\n return this.consumerCache\n }\n\n decodeInline(text) {\n let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/\n let baseUri = /^data:application\\/json;base64,/\n let charsetUri = /^data:application\\/json;charset=utf-?8,/\n let uri = /^data:application\\/json,/\n\n if (charsetUri.test(text) || uri.test(text)) {\n return decodeURIComponent(text.substr(RegExp.lastMatch.length))\n }\n\n if (baseCharsetUri.test(text) || baseUri.test(text)) {\n return fromBase64(text.substr(RegExp.lastMatch.length))\n }\n\n let encoding = text.match(/data:application\\/json;([^,]+),/)[1]\n throw new Error('Unsupported source map encoding ' + encoding)\n }\n\n getAnnotationURL(sourceMapString) {\n return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, '').trim()\n }\n\n isMap(map) {\n if (typeof map !== 'object') return false\n return (\n typeof map.mappings === 'string' ||\n typeof map._mappings === 'string' ||\n Array.isArray(map.sections)\n )\n }\n\n loadAnnotation(css) {\n let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/gm)\n if (!comments) return\n\n // sourceMappingURLs from comments, strings, etc.\n let start = css.lastIndexOf(comments.pop())\n let end = css.indexOf('*/', start)\n\n if (start > -1 && end > -1) {\n // Locate the last sourceMappingURL to avoid pickin\n this.annotation = this.getAnnotationURL(css.substring(start, end))\n }\n }\n\n loadFile(path) {\n this.root = dirname(path)\n if (existsSync(path)) {\n this.mapFile = path\n return readFileSync(path, 'utf-8').toString().trim()\n }\n }\n\n loadMap(file, prev) {\n if (prev === false) return false\n\n if (prev) {\n if (typeof prev === 'string') {\n return prev\n } else if (typeof prev === 'function') {\n let prevPath = prev(file)\n if (prevPath) {\n let map = this.loadFile(prevPath)\n if (!map) {\n throw new Error(\n 'Unable to load previous source map: ' + prevPath.toString()\n )\n }\n return map\n }\n } else if (prev instanceof SourceMapConsumer) {\n return SourceMapGenerator.fromSourceMap(prev).toString()\n } else if (prev instanceof SourceMapGenerator) {\n return prev.toString()\n } else if (this.isMap(prev)) {\n return JSON.stringify(prev)\n } else {\n throw new Error(\n 'Unsupported previous source map format: ' + prev.toString()\n )\n }\n } else if (this.inline) {\n return this.decodeInline(this.annotation)\n } else if (this.annotation) {\n let map = this.annotation\n if (file) map = join(dirname(file), map)\n return this.loadFile(map)\n }\n }\n\n startWith(string, start) {\n if (!string) return false\n return string.substr(0, start.length) === start\n }\n\n withContent() {\n return !!(\n this.consumer().sourcesContent &&\n this.consumer().sourcesContent.length > 0\n )\n }\n}\n\nmodule.exports = PreviousMap\nPreviousMap.default = PreviousMap\n","'use strict'\n\nlet NoWorkResult = require('./no-work-result')\nlet LazyResult = require('./lazy-result')\nlet Document = require('./document')\nlet Root = require('./root')\n\nclass Processor {\n constructor(plugins = []) {\n this.version = '8.4.31'\n this.plugins = this.normalize(plugins)\n }\n\n normalize(plugins) {\n let normalized = []\n for (let i of plugins) {\n if (i.postcss === true) {\n i = i()\n } else if (i.postcss) {\n i = i.postcss\n }\n\n if (typeof i === 'object' && Array.isArray(i.plugins)) {\n normalized = normalized.concat(i.plugins)\n } else if (typeof i === 'object' && i.postcssPlugin) {\n normalized.push(i)\n } else if (typeof i === 'function') {\n normalized.push(i)\n } else if (typeof i === 'object' && (i.parse || i.stringify)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'PostCSS syntaxes cannot be used as plugins. Instead, please use ' +\n 'one of the syntax/parser/stringifier options as outlined ' +\n 'in your PostCSS runner documentation.'\n )\n }\n } else {\n throw new Error(i + ' is not a PostCSS plugin')\n }\n }\n return normalized\n }\n\n process(css, opts = {}) {\n if (\n this.plugins.length === 0 &&\n typeof opts.parser === 'undefined' &&\n typeof opts.stringifier === 'undefined' &&\n typeof opts.syntax === 'undefined'\n ) {\n return new NoWorkResult(this, css, opts)\n } else {\n return new LazyResult(this, css, opts)\n }\n }\n\n use(plugin) {\n this.plugins = this.plugins.concat(this.normalize([plugin]))\n return this\n }\n}\n\nmodule.exports = Processor\nProcessor.default = Processor\n\nRoot.registerProcessor(Processor)\nDocument.registerProcessor(Processor)\n","'use strict'\n\nlet Warning = require('./warning')\n\nclass Result {\n constructor(processor, root, opts) {\n this.processor = processor\n this.messages = []\n this.root = root\n this.opts = opts\n this.css = undefined\n this.map = undefined\n }\n\n toString() {\n return this.css\n }\n\n warn(text, opts = {}) {\n if (!opts.plugin) {\n if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n opts.plugin = this.lastPlugin.postcssPlugin\n }\n }\n\n let warning = new Warning(text, opts)\n this.messages.push(warning)\n\n return warning\n }\n\n warnings() {\n return this.messages.filter(i => i.type === 'warning')\n }\n\n get content() {\n return this.css\n }\n}\n\nmodule.exports = Result\nResult.default = Result\n","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Root extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'root'\n if (!this.nodes) this.nodes = []\n }\n\n normalize(child, sample, type) {\n let nodes = super.normalize(child)\n\n if (sample) {\n if (type === 'prepend') {\n if (this.nodes.length > 1) {\n sample.raws.before = this.nodes[1].raws.before\n } else {\n delete sample.raws.before\n }\n } else if (this.first !== sample) {\n for (let node of nodes) {\n node.raws.before = sample.raws.before\n }\n }\n }\n\n return nodes\n }\n\n removeChild(child, ignore) {\n let index = this.index(child)\n\n if (!ignore && index === 0 && this.nodes.length > 1) {\n this.nodes[1].raws.before = this.nodes[index].raws.before\n }\n\n return super.removeChild(child)\n }\n\n toResult(opts = {}) {\n let lazy = new LazyResult(new Processor(), this, opts)\n return lazy.stringify()\n }\n}\n\nRoot.registerLazyResult = dependant => {\n LazyResult = dependant\n}\n\nRoot.registerProcessor = dependant => {\n Processor = dependant\n}\n\nmodule.exports = Root\nRoot.default = Root\n\nContainer.registerRoot(Root)\n","'use strict'\n\nlet Container = require('./container')\nlet list = require('./list')\n\nclass Rule extends Container {\n constructor(defaults) {\n super(defaults)\n this.type = 'rule'\n if (!this.nodes) this.nodes = []\n }\n\n get selectors() {\n return list.comma(this.selector)\n }\n\n set selectors(values) {\n let match = this.selector ? this.selector.match(/,\\s*/) : null\n let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')\n this.selector = values.join(sep)\n }\n}\n\nmodule.exports = Rule\nRule.default = Rule\n\nContainer.registerRule(Rule)\n","'use strict'\n\nconst DEFAULT_RAW = {\n after: '\\n',\n beforeClose: '\\n',\n beforeComment: '\\n',\n beforeDecl: '\\n',\n beforeOpen: ' ',\n beforeRule: '\\n',\n colon: ': ',\n commentLeft: ' ',\n commentRight: ' ',\n emptyBody: '',\n indent: ' ',\n semicolon: false\n}\n\nfunction capitalize(str) {\n return str[0].toUpperCase() + str.slice(1)\n}\n\nclass Stringifier {\n constructor(builder) {\n this.builder = builder\n }\n\n atrule(node, semicolon) {\n let name = '@' + node.name\n let params = node.params ? this.rawValue(node, 'params') : ''\n\n if (typeof node.raws.afterName !== 'undefined') {\n name += node.raws.afterName\n } else if (params) {\n name += ' '\n }\n\n if (node.nodes) {\n this.block(node, name + params)\n } else {\n let end = (node.raws.between || '') + (semicolon ? ';' : '')\n this.builder(name + params + end, node)\n }\n }\n\n beforeAfter(node, detect) {\n let value\n if (node.type === 'decl') {\n value = this.raw(node, null, 'beforeDecl')\n } else if (node.type === 'comment') {\n value = this.raw(node, null, 'beforeComment')\n } else if (detect === 'before') {\n value = this.raw(node, null, 'beforeRule')\n } else {\n value = this.raw(node, null, 'beforeClose')\n }\n\n let buf = node.parent\n let depth = 0\n while (buf && buf.type !== 'root') {\n depth += 1\n buf = buf.parent\n }\n\n if (value.includes('\\n')) {\n let indent = this.raw(node, null, 'indent')\n if (indent.length) {\n for (let step = 0; step < depth; step++) value += indent\n }\n }\n\n return value\n }\n\n block(node, start) {\n let between = this.raw(node, 'between', 'beforeOpen')\n this.builder(start + between + '{', node, 'start')\n\n let after\n if (node.nodes && node.nodes.length) {\n this.body(node)\n after = this.raw(node, 'after')\n } else {\n after = this.raw(node, 'after', 'emptyBody')\n }\n\n if (after) this.builder(after)\n this.builder('}', node, 'end')\n }\n\n body(node) {\n let last = node.nodes.length - 1\n while (last > 0) {\n if (node.nodes[last].type !== 'comment') break\n last -= 1\n }\n\n let semicolon = this.raw(node, 'semicolon')\n for (let i = 0; i < node.nodes.length; i++) {\n let child = node.nodes[i]\n let before = this.raw(child, 'before')\n if (before) this.builder(before)\n this.stringify(child, last !== i || semicolon)\n }\n }\n\n comment(node) {\n let left = this.raw(node, 'left', 'commentLeft')\n let right = this.raw(node, 'right', 'commentRight')\n this.builder('/*' + left + node.text + right + '*/', node)\n }\n\n decl(node, semicolon) {\n let between = this.raw(node, 'between', 'colon')\n let string = node.prop + between + this.rawValue(node, 'value')\n\n if (node.important) {\n string += node.raws.important || ' !important'\n }\n\n if (semicolon) string += ';'\n this.builder(string, node)\n }\n\n document(node) {\n this.body(node)\n }\n\n raw(node, own, detect) {\n let value\n if (!detect) detect = own\n\n // Already had\n if (own) {\n value = node.raws[own]\n if (typeof value !== 'undefined') return value\n }\n\n let parent = node.parent\n\n if (detect === 'before') {\n // Hack for first rule in CSS\n if (!parent || (parent.type === 'root' && parent.first === node)) {\n return ''\n }\n\n // `root` nodes in `document` should use only their own raws\n if (parent && parent.type === 'document') {\n return ''\n }\n }\n\n // Floating child without parent\n if (!parent) return DEFAULT_RAW[detect]\n\n // Detect style by other nodes\n let root = node.root()\n if (!root.rawCache) root.rawCache = {}\n if (typeof root.rawCache[detect] !== 'undefined') {\n return root.rawCache[detect]\n }\n\n if (detect === 'before' || detect === 'after') {\n return this.beforeAfter(node, detect)\n } else {\n let method = 'raw' + capitalize(detect)\n if (this[method]) {\n value = this[method](root, node)\n } else {\n root.walk(i => {\n value = i.raws[own]\n if (typeof value !== 'undefined') return false\n })\n }\n }\n\n if (typeof value === 'undefined') value = DEFAULT_RAW[detect]\n\n root.rawCache[detect] = value\n return value\n }\n\n rawBeforeClose(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length > 0) {\n if (typeof i.raws.after !== 'undefined') {\n value = i.raws.after\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n }\n })\n if (value) value = value.replace(/\\S/g, '')\n return value\n }\n\n rawBeforeComment(root, node) {\n let value\n root.walkComments(i => {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n })\n if (typeof value === 'undefined') {\n value = this.raw(node, null, 'beforeDecl')\n } else if (value) {\n value = value.replace(/\\S/g, '')\n }\n return value\n }\n\n rawBeforeDecl(root, node) {\n let value\n root.walkDecls(i => {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n })\n if (typeof value === 'undefined') {\n value = this.raw(node, null, 'beforeRule')\n } else if (value) {\n value = value.replace(/\\S/g, '')\n }\n return value\n }\n\n rawBeforeOpen(root) {\n let value\n root.walk(i => {\n if (i.type !== 'decl') {\n value = i.raws.between\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawBeforeRule(root) {\n let value\n root.walk(i => {\n if (i.nodes && (i.parent !== root || root.first !== i)) {\n if (typeof i.raws.before !== 'undefined') {\n value = i.raws.before\n if (value.includes('\\n')) {\n value = value.replace(/[^\\n]+$/, '')\n }\n return false\n }\n }\n })\n if (value) value = value.replace(/\\S/g, '')\n return value\n }\n\n rawColon(root) {\n let value\n root.walkDecls(i => {\n if (typeof i.raws.between !== 'undefined') {\n value = i.raws.between.replace(/[^\\s:]/g, '')\n return false\n }\n })\n return value\n }\n\n rawEmptyBody(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length === 0) {\n value = i.raws.after\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawIndent(root) {\n if (root.raws.indent) return root.raws.indent\n let value\n root.walk(i => {\n let p = i.parent\n if (p && p !== root && p.parent && p.parent === root) {\n if (typeof i.raws.before !== 'undefined') {\n let parts = i.raws.before.split('\\n')\n value = parts[parts.length - 1]\n value = value.replace(/\\S/g, '')\n return false\n }\n }\n })\n return value\n }\n\n rawSemicolon(root) {\n let value\n root.walk(i => {\n if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n value = i.raws.semicolon\n if (typeof value !== 'undefined') return false\n }\n })\n return value\n }\n\n rawValue(node, prop) {\n let value = node[prop]\n let raw = node.raws[prop]\n if (raw && raw.value === value) {\n return raw.raw\n }\n\n return value\n }\n\n root(node) {\n this.body(node)\n if (node.raws.after) this.builder(node.raws.after)\n }\n\n rule(node) {\n this.block(node, this.rawValue(node, 'selector'))\n if (node.raws.ownSemicolon) {\n this.builder(node.raws.ownSemicolon, node, 'end')\n }\n }\n\n stringify(node, semicolon) {\n /* c8 ignore start */\n if (!this[node.type]) {\n throw new Error(\n 'Unknown AST node type ' +\n node.type +\n '. ' +\n 'Maybe you need to change PostCSS stringifier.'\n )\n }\n /* c8 ignore stop */\n this[node.type](node, semicolon)\n }\n}\n\nmodule.exports = Stringifier\nStringifier.default = Stringifier\n","'use strict'\n\nlet Stringifier = require('./stringifier')\n\nfunction stringify(node, builder) {\n let str = new Stringifier(builder)\n str.stringify(node)\n}\n\nmodule.exports = stringify\nstringify.default = stringify\n","'use strict'\n\nmodule.exports.isClean = Symbol('isClean')\n\nmodule.exports.my = Symbol('my')\n","'use strict'\n\nconst SINGLE_QUOTE = \"'\".charCodeAt(0)\nconst DOUBLE_QUOTE = '\"'.charCodeAt(0)\nconst BACKSLASH = '\\\\'.charCodeAt(0)\nconst SLASH = '/'.charCodeAt(0)\nconst NEWLINE = '\\n'.charCodeAt(0)\nconst SPACE = ' '.charCodeAt(0)\nconst FEED = '\\f'.charCodeAt(0)\nconst TAB = '\\t'.charCodeAt(0)\nconst CR = '\\r'.charCodeAt(0)\nconst OPEN_SQUARE = '['.charCodeAt(0)\nconst CLOSE_SQUARE = ']'.charCodeAt(0)\nconst OPEN_PARENTHESES = '('.charCodeAt(0)\nconst CLOSE_PARENTHESES = ')'.charCodeAt(0)\nconst OPEN_CURLY = '{'.charCodeAt(0)\nconst CLOSE_CURLY = '}'.charCodeAt(0)\nconst SEMICOLON = ';'.charCodeAt(0)\nconst ASTERISK = '*'.charCodeAt(0)\nconst COLON = ':'.charCodeAt(0)\nconst AT = '@'.charCodeAt(0)\n\nconst RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g\nconst RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g\nconst RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/\nconst RE_HEX_ESCAPE = /[\\da-f]/i\n\nmodule.exports = function tokenizer(input, options = {}) {\n let css = input.css.valueOf()\n let ignore = options.ignoreErrors\n\n let code, next, quote, content, escape\n let escaped, escapePos, prev, n, currentToken\n\n let length = css.length\n let pos = 0\n let buffer = []\n let returned = []\n\n function position() {\n return pos\n }\n\n function unclosed(what) {\n throw input.error('Unclosed ' + what, pos)\n }\n\n function endOfFile() {\n return returned.length === 0 && pos >= length\n }\n\n function nextToken(opts) {\n if (returned.length) return returned.pop()\n if (pos >= length) return\n\n let ignoreUnclosed = opts ? opts.ignoreUnclosed : false\n\n code = css.charCodeAt(pos)\n\n switch (code) {\n case NEWLINE:\n case SPACE:\n case TAB:\n case CR:\n case FEED: {\n next = pos\n do {\n next += 1\n code = css.charCodeAt(next)\n } while (\n code === SPACE ||\n code === NEWLINE ||\n code === TAB ||\n code === CR ||\n code === FEED\n )\n\n currentToken = ['space', css.slice(pos, next)]\n pos = next - 1\n break\n }\n\n case OPEN_SQUARE:\n case CLOSE_SQUARE:\n case OPEN_CURLY:\n case CLOSE_CURLY:\n case COLON:\n case SEMICOLON:\n case CLOSE_PARENTHESES: {\n let controlChar = String.fromCharCode(code)\n currentToken = [controlChar, controlChar, pos]\n break\n }\n\n case OPEN_PARENTHESES: {\n prev = buffer.length ? buffer.pop()[1] : ''\n n = css.charCodeAt(pos + 1)\n if (\n prev === 'url' &&\n n !== SINGLE_QUOTE &&\n n !== DOUBLE_QUOTE &&\n n !== SPACE &&\n n !== NEWLINE &&\n n !== TAB &&\n n !== FEED &&\n n !== CR\n ) {\n next = pos\n do {\n escaped = false\n next = css.indexOf(')', next + 1)\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos\n break\n } else {\n unclosed('bracket')\n }\n }\n escapePos = next\n while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n escapePos -= 1\n escaped = !escaped\n }\n } while (escaped)\n\n currentToken = ['brackets', css.slice(pos, next + 1), pos, next]\n\n pos = next\n } else {\n next = css.indexOf(')', pos + 1)\n content = css.slice(pos, next + 1)\n\n if (next === -1 || RE_BAD_BRACKET.test(content)) {\n currentToken = ['(', '(', pos]\n } else {\n currentToken = ['brackets', content, pos, next]\n pos = next\n }\n }\n\n break\n }\n\n case SINGLE_QUOTE:\n case DOUBLE_QUOTE: {\n quote = code === SINGLE_QUOTE ? \"'\" : '\"'\n next = pos\n do {\n escaped = false\n next = css.indexOf(quote, next + 1)\n if (next === -1) {\n if (ignore || ignoreUnclosed) {\n next = pos + 1\n break\n } else {\n unclosed('string')\n }\n }\n escapePos = next\n while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n escapePos -= 1\n escaped = !escaped\n }\n } while (escaped)\n\n currentToken = ['string', css.slice(pos, next + 1), pos, next]\n pos = next\n break\n }\n\n case AT: {\n RE_AT_END.lastIndex = pos + 1\n RE_AT_END.test(css)\n if (RE_AT_END.lastIndex === 0) {\n next = css.length - 1\n } else {\n next = RE_AT_END.lastIndex - 2\n }\n\n currentToken = ['at-word', css.slice(pos, next + 1), pos, next]\n\n pos = next\n break\n }\n\n case BACKSLASH: {\n next = pos\n escape = true\n while (css.charCodeAt(next + 1) === BACKSLASH) {\n next += 1\n escape = !escape\n }\n code = css.charCodeAt(next + 1)\n if (\n escape &&\n code !== SLASH &&\n code !== SPACE &&\n code !== NEWLINE &&\n code !== TAB &&\n code !== CR &&\n code !== FEED\n ) {\n next += 1\n if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {\n next += 1\n }\n if (css.charCodeAt(next + 1) === SPACE) {\n next += 1\n }\n }\n }\n\n currentToken = ['word', css.slice(pos, next + 1), pos, next]\n\n pos = next\n break\n }\n\n default: {\n if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n next = css.indexOf('*/', pos + 2) + 1\n if (next === 0) {\n if (ignore || ignoreUnclosed) {\n next = css.length\n } else {\n unclosed('comment')\n }\n }\n\n currentToken = ['comment', css.slice(pos, next + 1), pos, next]\n pos = next\n } else {\n RE_WORD_END.lastIndex = pos + 1\n RE_WORD_END.test(css)\n if (RE_WORD_END.lastIndex === 0) {\n next = css.length - 1\n } else {\n next = RE_WORD_END.lastIndex - 2\n }\n\n currentToken = ['word', css.slice(pos, next + 1), pos, next]\n buffer.push(currentToken)\n pos = next\n }\n\n break\n }\n }\n\n pos++\n return currentToken\n }\n\n function back(token) {\n returned.push(token)\n }\n\n return {\n back,\n endOfFile,\n nextToken,\n position\n }\n}\n","/* eslint-disable no-console */\n'use strict'\n\nlet printed = {}\n\nmodule.exports = function warnOnce(message) {\n if (printed[message]) return\n printed[message] = true\n\n if (typeof console !== 'undefined' && console.warn) {\n console.warn(message)\n }\n}\n","'use strict'\n\nclass Warning {\n constructor(text, opts = {}) {\n this.type = 'warning'\n this.text = text\n\n if (opts.node && opts.node.source) {\n let range = opts.node.rangeBy(opts)\n this.line = range.start.line\n this.column = range.start.column\n this.endLine = range.end.line\n this.endColumn = range.end.column\n }\n\n for (let opt in opts) this[opt] = opts[opt]\n }\n\n toString() {\n if (this.node) {\n return this.node.error(this.text, {\n index: this.index,\n plugin: this.plugin,\n word: this.word\n }).message\n }\n\n if (this.plugin) {\n return this.plugin + ': ' + this.text\n }\n\n return this.text\n }\n}\n\nmodule.exports = Warning\nWarning.default = Warning\n","'use strict';\nvar strictUriEncode = require('strict-uri-encode');\nvar objectAssign = require('object-assign');\nvar decodeComponent = require('decode-uri-component');\n\nfunction encoderForArrayFormat(opts) {\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, index) {\n\t\t\t\treturn value === null ? [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tindex,\n\t\t\t\t\t']'\n\t\t\t\t].join('') : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tencode(index, opts),\n\t\t\t\t\t']=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[]=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(opts) {\n\tvar result;\n\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t} else if (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction encode(value, opts) {\n\tif (opts.encode) {\n\t\treturn opts.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t} else if (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input)).sort(function (a, b) {\n\t\t\treturn Number(a) - Number(b);\n\t\t}).map(function (key) {\n\t\t\treturn input[key];\n\t\t});\n\t}\n\n\treturn input;\n}\n\nfunction extract(str) {\n\tvar queryStart = str.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\treturn str.slice(queryStart + 1);\n}\n\nfunction parse(str, opts) {\n\topts = objectAssign({arrayFormat: 'none'}, opts);\n\n\tvar formatter = parserForArrayFormat(opts);\n\n\t// Create an object with no prototype\n\t// https://github.com/sindresorhus/query-string/issues/47\n\tvar ret = Object.create(null);\n\n\tif (typeof str !== 'string') {\n\t\treturn ret;\n\t}\n\n\tstr = str.trim().replace(/^[?#&]/, '');\n\n\tif (!str) {\n\t\treturn ret;\n\t}\n\n\tstr.split('&').forEach(function (param) {\n\t\tvar parts = param.replace(/\\+/g, ' ').split('=');\n\t\t// Firefox (pre 40) decodes `%3D` to `=`\n\t\t// https://github.com/sindresorhus/query-string/pull/37\n\t\tvar key = parts.shift();\n\t\tvar val = parts.length > 0 ? parts.join('=') : undefined;\n\n\t\t// missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tval = val === undefined ? null : decodeComponent(val);\n\n\t\tformatter(decodeComponent(key), val, ret);\n\t});\n\n\treturn Object.keys(ret).sort().reduce(function (result, key) {\n\t\tvar val = ret[key];\n\t\tif (Boolean(val) && typeof val === 'object' && !Array.isArray(val)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(val);\n\t\t} else {\n\t\t\tresult[key] = val;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = function (obj, opts) {\n\tvar defaults = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none'\n\t};\n\n\topts = objectAssign(defaults, opts);\n\n\tif (opts.sort === false) {\n\t\topts.sort = function () {};\n\t}\n\n\tvar formatter = encoderForArrayFormat(opts);\n\n\treturn obj ? Object.keys(obj).sort(opts.sort).map(function (key) {\n\t\tvar val = obj[key];\n\n\t\tif (val === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (val === null) {\n\t\t\treturn encode(key, opts);\n\t\t}\n\n\t\tif (Array.isArray(val)) {\n\t\t\tvar result = [];\n\n\t\t\tval.slice().forEach(function (val2) {\n\t\t\t\tif (val2 === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresult.push(formatter(key, val2, result.length));\n\t\t\t});\n\n\t\t\treturn result.join('&');\n\t\t}\n\n\t\treturn encode(key, opts) + '=' + encode(val, opts);\n\t}).filter(function (x) {\n\t\treturn x.length > 0;\n\t}).join('&') : '';\n};\n\nexports.parseUrl = function (str, opts) {\n\treturn {\n\t\turl: str.split('?')[0] || '',\n\t\tquery: parse(extract(str), opts)\n\t};\n};\n","const htmlparser = require('htmlparser2');\nconst escapeStringRegexp = require('escape-string-regexp');\nconst { isPlainObject } = require('is-plain-object');\nconst deepmerge = require('deepmerge');\nconst parseSrcset = require('parse-srcset');\nconst { parse: postcssParse } = require('postcss');\n// Tags that can conceivably represent stand-alone media.\nconst mediaTags = [\n 'img', 'audio', 'video', 'picture', 'svg',\n 'object', 'map', 'iframe', 'embed'\n];\n// Tags that are inherently vulnerable to being used in XSS attacks.\nconst vulnerableTags = [ 'script', 'style' ];\n\nfunction each(obj, cb) {\n if (obj) {\n Object.keys(obj).forEach(function (key) {\n cb(obj[key], key);\n });\n }\n}\n\n// Avoid false positives with .__proto__, .hasOwnProperty, etc.\nfunction has(obj, key) {\n return ({}).hasOwnProperty.call(obj, key);\n}\n\n// Returns those elements of `a` for which `cb(a)` returns truthy\nfunction filter(a, cb) {\n const n = [];\n each(a, function(v) {\n if (cb(v)) {\n n.push(v);\n }\n });\n return n;\n}\n\nfunction isEmptyObject(obj) {\n for (const key in obj) {\n if (has(obj, key)) {\n return false;\n }\n }\n return true;\n}\n\nfunction stringifySrcset(parsedSrcset) {\n return parsedSrcset.map(function(part) {\n if (!part.url) {\n throw new Error('URL missing');\n }\n\n return (\n part.url +\n (part.w ? ` ${part.w}w` : '') +\n (part.h ? ` ${part.h}h` : '') +\n (part.d ? ` ${part.d}x` : '')\n );\n }).join(', ');\n}\n\nmodule.exports = sanitizeHtml;\n\n// A valid attribute name.\n// We use a tolerant definition based on the set of strings defined by\n// html.spec.whatwg.org/multipage/parsing.html#before-attribute-name-state\n// and html.spec.whatwg.org/multipage/parsing.html#attribute-name-state .\n// The characters accepted are ones which can be appended to the attribute\n// name buffer without triggering a parse error:\n// * unexpected-equals-sign-before-attribute-name\n// * unexpected-null-character\n// * unexpected-character-in-attribute-name\n// We exclude the empty string because it's impossible to get to the after\n// attribute name state with an empty attribute name buffer.\nconst VALID_HTML_ATTRIBUTE_NAME = /^[^\\0\\t\\n\\f\\r /<=>]+$/;\n\n// Ignore the _recursing flag; it's there for recursive\n// invocation as a guard against this exploit:\n// https://github.com/fb55/htmlparser2/issues/105\n\nfunction sanitizeHtml(html, options, _recursing) {\n if (html == null) {\n return '';\n }\n if (typeof html === 'number') {\n html = html.toString();\n }\n\n let result = '';\n // Used for hot swapping the result variable with an empty string in order to \"capture\" the text written to it.\n let tempResult = '';\n\n function Frame(tag, attribs) {\n const that = this;\n this.tag = tag;\n this.attribs = attribs || {};\n this.tagPosition = result.length;\n this.text = ''; // Node inner text\n this.mediaChildren = [];\n\n this.updateParentNodeText = function() {\n if (stack.length) {\n const parentFrame = stack[stack.length - 1];\n parentFrame.text += that.text;\n }\n };\n\n this.updateParentNodeMediaChildren = function() {\n if (stack.length && mediaTags.includes(this.tag)) {\n const parentFrame = stack[stack.length - 1];\n parentFrame.mediaChildren.push(this.tag);\n }\n };\n }\n\n options = Object.assign({}, sanitizeHtml.defaults, options);\n options.parser = Object.assign({}, htmlParserDefaults, options.parser);\n\n // vulnerableTags\n vulnerableTags.forEach(function (tag) {\n if (\n options.allowedTags !== false && (options.allowedTags || []).indexOf(tag) > -1 &&\n !options.allowVulnerableTags\n ) {\n console.warn(`\\n\\nâš ï¸ Your \\`allowedTags\\` option includes, \\`${tag}\\`, which is inherently\\nvulnerable to XSS attacks. Please remove it from \\`allowedTags\\`.\\nOr, to disable this warning, add the \\`allowVulnerableTags\\` option\\nand ensure you are accounting for this risk.\\n\\n`);\n }\n });\n\n // Tags that contain something other than HTML, or where discarding\n // the text when the tag is disallowed makes sense for other reasons.\n // If we are not allowing these tags, we should drop their content too.\n // For other tags you would drop the tag but keep its content.\n const nonTextTagsArray = options.nonTextTags || [\n 'script',\n 'style',\n 'textarea',\n 'option'\n ];\n let allowedAttributesMap;\n let allowedAttributesGlobMap;\n if (options.allowedAttributes) {\n allowedAttributesMap = {};\n allowedAttributesGlobMap = {};\n each(options.allowedAttributes, function(attributes, tag) {\n allowedAttributesMap[tag] = [];\n const globRegex = [];\n attributes.forEach(function(obj) {\n if (typeof obj === 'string' && obj.indexOf('*') >= 0) {\n globRegex.push(escapeStringRegexp(obj).replace(/\\\\\\*/g, '.*'));\n } else {\n allowedAttributesMap[tag].push(obj);\n }\n });\n if (globRegex.length) {\n allowedAttributesGlobMap[tag] = new RegExp('^(' + globRegex.join('|') + ')$');\n }\n });\n }\n const allowedClassesMap = {};\n const allowedClassesGlobMap = {};\n const allowedClassesRegexMap = {};\n each(options.allowedClasses, function(classes, tag) {\n // Implicitly allows the class attribute\n if (allowedAttributesMap) {\n if (!has(allowedAttributesMap, tag)) {\n allowedAttributesMap[tag] = [];\n }\n allowedAttributesMap[tag].push('class');\n }\n\n allowedClassesMap[tag] = [];\n allowedClassesRegexMap[tag] = [];\n const globRegex = [];\n classes.forEach(function(obj) {\n if (typeof obj === 'string' && obj.indexOf('*') >= 0) {\n globRegex.push(escapeStringRegexp(obj).replace(/\\\\\\*/g, '.*'));\n } else if (obj instanceof RegExp) {\n allowedClassesRegexMap[tag].push(obj);\n } else {\n allowedClassesMap[tag].push(obj);\n }\n });\n if (globRegex.length) {\n allowedClassesGlobMap[tag] = new RegExp('^(' + globRegex.join('|') + ')$');\n }\n });\n\n const transformTagsMap = {};\n let transformTagsAll;\n each(options.transformTags, function(transform, tag) {\n let transFun;\n if (typeof transform === 'function') {\n transFun = transform;\n } else if (typeof transform === 'string') {\n transFun = sanitizeHtml.simpleTransform(transform);\n }\n if (tag === '*') {\n transformTagsAll = transFun;\n } else {\n transformTagsMap[tag] = transFun;\n }\n });\n\n let depth;\n let stack;\n let skipMap;\n let transformMap;\n let skipText;\n let skipTextDepth;\n let addedText = false;\n\n initializeState();\n\n const parser = new htmlparser.Parser({\n onopentag: function(name, attribs) {\n // If `enforceHtmlBoundary` is `true` and this has found the opening\n // `html` tag, reset the state.\n if (options.enforceHtmlBoundary && name === 'html') {\n initializeState();\n }\n\n if (skipText) {\n skipTextDepth++;\n return;\n }\n const frame = new Frame(name, attribs);\n stack.push(frame);\n\n let skip = false;\n const hasText = !!frame.text;\n let transformedTag;\n if (has(transformTagsMap, name)) {\n transformedTag = transformTagsMap[name](name, attribs);\n\n frame.attribs = attribs = transformedTag.attribs;\n\n if (transformedTag.text !== undefined) {\n frame.innerText = transformedTag.text;\n }\n\n if (name !== transformedTag.tagName) {\n frame.name = name = transformedTag.tagName;\n transformMap[depth] = transformedTag.tagName;\n }\n }\n if (transformTagsAll) {\n transformedTag = transformTagsAll(name, attribs);\n\n frame.attribs = attribs = transformedTag.attribs;\n if (name !== transformedTag.tagName) {\n frame.name = name = transformedTag.tagName;\n transformMap[depth] = transformedTag.tagName;\n }\n }\n\n if ((options.allowedTags !== false && (options.allowedTags || []).indexOf(name) === -1) || (options.disallowedTagsMode === 'recursiveEscape' && !isEmptyObject(skipMap)) || (options.nestingLimit != null && depth >= options.nestingLimit)) {\n skip = true;\n skipMap[depth] = true;\n if (options.disallowedTagsMode === 'discard') {\n if (nonTextTagsArray.indexOf(name) !== -1) {\n skipText = true;\n skipTextDepth = 1;\n }\n }\n skipMap[depth] = true;\n }\n depth++;\n if (skip) {\n if (options.disallowedTagsMode === 'discard') {\n // We want the contents but not this tag\n return;\n }\n tempResult = result;\n result = '';\n }\n result += '<' + name;\n\n if (name === 'script') {\n if (options.allowedScriptHostnames || options.allowedScriptDomains) {\n frame.innerText = '';\n }\n }\n\n if (!allowedAttributesMap || has(allowedAttributesMap, name) || allowedAttributesMap['*']) {\n each(attribs, function(value, a) {\n if (!VALID_HTML_ATTRIBUTE_NAME.test(a)) {\n // This prevents part of an attribute name in the output from being\n // interpreted as the end of an attribute, or end of a tag.\n delete frame.attribs[a];\n return;\n }\n // check allowedAttributesMap for the element and attribute and modify the value\n // as necessary if there are specific values defined.\n let passedAllowedAttributesMapCheck = false;\n if (!allowedAttributesMap ||\n (has(allowedAttributesMap, name) && allowedAttributesMap[name].indexOf(a) !== -1) ||\n (allowedAttributesMap['*'] && allowedAttributesMap['*'].indexOf(a) !== -1) ||\n (has(allowedAttributesGlobMap, name) && allowedAttributesGlobMap[name].test(a)) ||\n (allowedAttributesGlobMap['*'] && allowedAttributesGlobMap['*'].test(a))) {\n passedAllowedAttributesMapCheck = true;\n } else if (allowedAttributesMap && allowedAttributesMap[name]) {\n for (const o of allowedAttributesMap[name]) {\n if (isPlainObject(o) && o.name && (o.name === a)) {\n passedAllowedAttributesMapCheck = true;\n let newValue = '';\n if (o.multiple === true) {\n // verify the values that are allowed\n const splitStrArray = value.split(' ');\n for (const s of splitStrArray) {\n if (o.values.indexOf(s) !== -1) {\n if (newValue === '') {\n newValue = s;\n } else {\n newValue += ' ' + s;\n }\n }\n }\n } else if (o.values.indexOf(value) >= 0) {\n // verified an allowed value matches the entire attribute value\n newValue = value;\n }\n value = newValue;\n }\n }\n }\n if (passedAllowedAttributesMapCheck) {\n if (options.allowedSchemesAppliedToAttributes.indexOf(a) !== -1) {\n if (naughtyHref(name, value)) {\n delete frame.attribs[a];\n return;\n }\n }\n\n if (name === 'script' && a === 'src') {\n\n let allowed = true;\n\n try {\n const parsed = parseUrl(value);\n\n if (options.allowedScriptHostnames || options.allowedScriptDomains) {\n const allowedHostname = (options.allowedScriptHostnames || []).find(function (hostname) {\n return hostname === parsed.url.hostname;\n });\n const allowedDomain = (options.allowedScriptDomains || []).find(function(domain) {\n return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);\n });\n allowed = allowedHostname || allowedDomain;\n }\n } catch (e) {\n allowed = false;\n }\n\n if (!allowed) {\n delete frame.attribs[a];\n return;\n }\n }\n\n if (name === 'iframe' && a === 'src') {\n let allowed = true;\n try {\n const parsed = parseUrl(value);\n\n if (parsed.isRelativeUrl) {\n // default value of allowIframeRelativeUrls is true\n // unless allowedIframeHostnames or allowedIframeDomains specified\n allowed = has(options, 'allowIframeRelativeUrls')\n ? options.allowIframeRelativeUrls\n : (!options.allowedIframeHostnames && !options.allowedIframeDomains);\n } else if (options.allowedIframeHostnames || options.allowedIframeDomains) {\n const allowedHostname = (options.allowedIframeHostnames || []).find(function (hostname) {\n return hostname === parsed.url.hostname;\n });\n const allowedDomain = (options.allowedIframeDomains || []).find(function(domain) {\n return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);\n });\n allowed = allowedHostname || allowedDomain;\n }\n } catch (e) {\n // Unparseable iframe src\n allowed = false;\n }\n if (!allowed) {\n delete frame.attribs[a];\n return;\n }\n }\n if (a === 'srcset') {\n try {\n let parsed = parseSrcset(value);\n parsed.forEach(function(value) {\n if (naughtyHref('srcset', value.url)) {\n value.evil = true;\n }\n });\n parsed = filter(parsed, function(v) {\n return !v.evil;\n });\n if (!parsed.length) {\n delete frame.attribs[a];\n return;\n } else {\n value = stringifySrcset(filter(parsed, function(v) {\n return !v.evil;\n }));\n frame.attribs[a] = value;\n }\n } catch (e) {\n // Unparseable srcset\n delete frame.attribs[a];\n return;\n }\n }\n if (a === 'class') {\n const allowedSpecificClasses = allowedClassesMap[name];\n const allowedWildcardClasses = allowedClassesMap['*'];\n const allowedSpecificClassesGlob = allowedClassesGlobMap[name];\n const allowedSpecificClassesRegex = allowedClassesRegexMap[name];\n const allowedWildcardClassesGlob = allowedClassesGlobMap['*'];\n const allowedClassesGlobs = [\n allowedSpecificClassesGlob,\n allowedWildcardClassesGlob\n ]\n .concat(allowedSpecificClassesRegex)\n .filter(function (t) {\n return t;\n });\n if (allowedSpecificClasses && allowedWildcardClasses) {\n value = filterClasses(value, deepmerge(allowedSpecificClasses, allowedWildcardClasses), allowedClassesGlobs);\n } else {\n value = filterClasses(value, allowedSpecificClasses || allowedWildcardClasses, allowedClassesGlobs);\n }\n if (!value.length) {\n delete frame.attribs[a];\n return;\n }\n }\n if (a === 'style') {\n try {\n const abstractSyntaxTree = postcssParse(name + ' {' + value + '}');\n const filteredAST = filterCss(abstractSyntaxTree, options.allowedStyles);\n\n value = stringifyStyleAttributes(filteredAST);\n\n if (value.length === 0) {\n delete frame.attribs[a];\n return;\n }\n } catch (e) {\n delete frame.attribs[a];\n return;\n }\n }\n result += ' ' + a;\n if (value && value.length) {\n result += '=\"' + escapeHtml(value, true) + '\"';\n }\n } else {\n delete frame.attribs[a];\n }\n });\n }\n if (options.selfClosing.indexOf(name) !== -1) {\n result += ' />';\n } else {\n result += '>';\n if (frame.innerText && !hasText && !options.textFilter) {\n result += escapeHtml(frame.innerText);\n addedText = true;\n }\n }\n if (skip) {\n result = tempResult + escapeHtml(result);\n tempResult = '';\n }\n },\n ontext: function(text) {\n if (skipText) {\n return;\n }\n const lastFrame = stack[stack.length - 1];\n let tag;\n\n if (lastFrame) {\n tag = lastFrame.tag;\n // If inner text was set by transform function then let's use it\n text = lastFrame.innerText !== undefined ? lastFrame.innerText : text;\n }\n\n if (options.disallowedTagsMode === 'discard' && ((tag === 'script') || (tag === 'style'))) {\n // htmlparser2 gives us these as-is. Escaping them ruins the content. Allowing\n // script tags is, by definition, game over for XSS protection, so if that's\n // your concern, don't allow them. The same is essentially true for style tags\n // which have their own collection of XSS vectors.\n result += text;\n } else {\n const escaped = escapeHtml(text, false);\n if (options.textFilter && !addedText) {\n result += options.textFilter(escaped, tag);\n } else if (!addedText) {\n result += escaped;\n }\n }\n if (stack.length) {\n const frame = stack[stack.length - 1];\n frame.text += text;\n }\n },\n onclosetag: function(name) {\n\n if (skipText) {\n skipTextDepth--;\n if (!skipTextDepth) {\n skipText = false;\n } else {\n return;\n }\n }\n\n const frame = stack.pop();\n if (!frame) {\n // Do not crash on bad markup\n return;\n }\n\n if (frame.tag !== name) {\n // Another case of bad markup.\n // Push to stack, so that it will be used in future closing tags.\n stack.push(frame);\n return;\n }\n\n skipText = options.enforceHtmlBoundary ? name === 'html' : false;\n depth--;\n const skip = skipMap[depth];\n if (skip) {\n delete skipMap[depth];\n if (options.disallowedTagsMode === 'discard') {\n frame.updateParentNodeText();\n return;\n }\n tempResult = result;\n result = '';\n }\n\n if (transformMap[depth]) {\n name = transformMap[depth];\n delete transformMap[depth];\n }\n\n if (options.exclusiveFilter && options.exclusiveFilter(frame)) {\n result = result.substr(0, frame.tagPosition);\n return;\n }\n\n frame.updateParentNodeMediaChildren();\n frame.updateParentNodeText();\n\n if (options.selfClosing.indexOf(name) !== -1) {\n // Already output />\n if (skip) {\n result = tempResult;\n tempResult = '';\n }\n return;\n }\n\n result += '</' + name + '>';\n if (skip) {\n result = tempResult + escapeHtml(result);\n tempResult = '';\n }\n addedText = false;\n }\n }, options.parser);\n parser.write(html);\n parser.end();\n\n return result;\n\n function initializeState() {\n result = '';\n depth = 0;\n stack = [];\n skipMap = {};\n transformMap = {};\n skipText = false;\n skipTextDepth = 0;\n }\n\n function escapeHtml(s, quote) {\n if (typeof (s) !== 'string') {\n s = s + '';\n }\n if (options.parser.decodeEntities) {\n s = s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n if (quote) {\n s = s.replace(/\"/g, '"');\n }\n }\n // TODO: this is inadequate because it will pass `&0;`. This approach\n // will not work, each & must be considered with regard to whether it\n // is followed by a 100% syntactically valid entity or not, and escaped\n // if it is not. If this bothers you, don't set parser.decodeEntities\n // to false. (The default is true.)\n s = s.replace(/&(?![a-zA-Z0-9#]{1,20};)/g, '&') // Match ampersands not part of existing HTML entity\n .replace(/</g, '<')\n .replace(/>/g, '>');\n if (quote) {\n s = s.replace(/\"/g, '"');\n }\n return s;\n }\n\n function naughtyHref(name, href) {\n // Browsers ignore character codes of 32 (space) and below in a surprising\n // number of situations. Start reading here:\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#Embedded_tab\n // eslint-disable-next-line no-control-regex\n href = href.replace(/[\\x00-\\x20]+/g, '');\n // Clobber any comments in URLs, which the browser might\n // interpret inside an XML data island, allowing\n // a javascript: URL to be snuck through\n while (true) {\n const firstIndex = href.indexOf('<!--');\n if (firstIndex === -1) {\n break;\n }\n const lastIndex = href.indexOf('-->', firstIndex + 4);\n if (lastIndex === -1) {\n break;\n }\n href = href.substring(0, firstIndex) + href.substring(lastIndex + 3);\n }\n // Case insensitive so we don't get faked out by JAVASCRIPT #1\n // Allow more characters after the first so we don't get faked\n // out by certain schemes browsers accept\n const matches = href.match(/^([a-zA-Z][a-zA-Z0-9.\\-+]*):/);\n if (!matches) {\n // Protocol-relative URL starting with any combination of '/' and '\\'\n if (href.match(/^[/\\\\]{2}/)) {\n return !options.allowProtocolRelative;\n }\n\n // No scheme\n return false;\n }\n const scheme = matches[1].toLowerCase();\n\n if (has(options.allowedSchemesByTag, name)) {\n return options.allowedSchemesByTag[name].indexOf(scheme) === -1;\n }\n\n return !options.allowedSchemes || options.allowedSchemes.indexOf(scheme) === -1;\n }\n\n function parseUrl(value) {\n value = value.replace(/^(\\w+:)?\\s*[\\\\/]\\s*[\\\\/]/, '$1//');\n if (value.startsWith('relative:')) {\n // An attempt to exploit our workaround for base URLs being\n // mandatory for relative URL validation in the WHATWG\n // URL parser, reject it\n throw new Error('relative: exploit attempt');\n }\n // naughtyHref is in charge of whether protocol relative URLs\n // are cool. Here we are concerned just with allowed hostnames and\n // whether to allow relative URLs.\n //\n // Build a placeholder \"base URL\" against which any reasonable\n // relative URL may be parsed successfully\n let base = 'relative://relative-site';\n for (let i = 0; (i < 100); i++) {\n base += `/${i}`;\n }\n\n const parsed = new URL(value, base);\n\n const isRelativeUrl = parsed && parsed.hostname === 'relative-site' && parsed.protocol === 'relative:';\n return {\n isRelativeUrl,\n url: parsed\n };\n }\n /**\n * Filters user input css properties by allowlisted regex attributes.\n * Modifies the abstractSyntaxTree object.\n *\n * @param {object} abstractSyntaxTree - Object representation of CSS attributes.\n * @property {array[Declaration]} abstractSyntaxTree.nodes[0] - Each object cointains prop and value key, i.e { prop: 'color', value: 'red' }.\n * @param {object} allowedStyles - Keys are properties (i.e color), value is list of permitted regex rules (i.e /green/i).\n * @return {object} - The modified tree.\n */\n function filterCss(abstractSyntaxTree, allowedStyles) {\n if (!allowedStyles) {\n return abstractSyntaxTree;\n }\n\n const astRules = abstractSyntaxTree.nodes[0];\n let selectedRule;\n\n // Merge global and tag-specific styles into new AST.\n if (allowedStyles[astRules.selector] && allowedStyles['*']) {\n selectedRule = deepmerge(\n allowedStyles[astRules.selector],\n allowedStyles['*']\n );\n } else {\n selectedRule = allowedStyles[astRules.selector] || allowedStyles['*'];\n }\n\n if (selectedRule) {\n abstractSyntaxTree.nodes[0].nodes = astRules.nodes.reduce(filterDeclarations(selectedRule), []);\n }\n\n return abstractSyntaxTree;\n }\n\n /**\n * Extracts the style attributes from an AbstractSyntaxTree and formats those\n * values in the inline style attribute format.\n *\n * @param {AbstractSyntaxTree} filteredAST\n * @return {string} - Example: \"color:yellow;text-align:center !important;font-family:helvetica;\"\n */\n function stringifyStyleAttributes(filteredAST) {\n return filteredAST.nodes[0].nodes\n .reduce(function(extractedAttributes, attrObject) {\n extractedAttributes.push(\n `${attrObject.prop}:${attrObject.value}${attrObject.important ? ' !important' : ''}`\n );\n return extractedAttributes;\n }, [])\n .join(';');\n }\n\n /**\n * Filters the existing attributes for the given property. Discards any attributes\n * which don't match the allowlist.\n *\n * @param {object} selectedRule - Example: { color: red, font-family: helvetica }\n * @param {array} allowedDeclarationsList - List of declarations which pass the allowlist.\n * @param {object} attributeObject - Object representing the current css property.\n * @property {string} attributeObject.type - Typically 'declaration'.\n * @property {string} attributeObject.prop - The CSS property, i.e 'color'.\n * @property {string} attributeObject.value - The corresponding value to the css property, i.e 'red'.\n * @return {function} - When used in Array.reduce, will return an array of Declaration objects\n */\n function filterDeclarations(selectedRule) {\n return function (allowedDeclarationsList, attributeObject) {\n // If this property is allowlisted...\n if (has(selectedRule, attributeObject.prop)) {\n const matchesRegex = selectedRule[attributeObject.prop].some(function(regularExpression) {\n return regularExpression.test(attributeObject.value);\n });\n\n if (matchesRegex) {\n allowedDeclarationsList.push(attributeObject);\n }\n }\n return allowedDeclarationsList;\n };\n }\n\n function filterClasses(classes, allowed, allowedGlobs) {\n if (!allowed) {\n // The class attribute is allowed without filtering on this tag\n return classes;\n }\n classes = classes.split(/\\s+/);\n return classes.filter(function(clss) {\n return allowed.indexOf(clss) !== -1 || allowedGlobs.some(function(glob) {\n return glob.test(clss);\n });\n }).join(' ');\n }\n}\n\n// Defaults are accessible to you so that you can use them as a starting point\n// programmatically if you wish\n\nconst htmlParserDefaults = {\n decodeEntities: true\n};\nsanitizeHtml.defaults = {\n allowedTags: [\n // Sections derived from MDN element categories and limited to the more\n // benign categories.\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Element\n // Content sectioning\n 'address', 'article', 'aside', 'footer', 'header',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup',\n 'main', 'nav', 'section',\n // Text content\n 'blockquote', 'dd', 'div', 'dl', 'dt', 'figcaption', 'figure',\n 'hr', 'li', 'main', 'ol', 'p', 'pre', 'ul',\n // Inline text semantics\n 'a', 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'dfn',\n 'em', 'i', 'kbd', 'mark', 'q',\n 'rb', 'rp', 'rt', 'rtc', 'ruby',\n 's', 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'var', 'wbr',\n // Table content\n 'caption', 'col', 'colgroup', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr'\n ],\n disallowedTagsMode: 'discard',\n allowedAttributes: {\n a: [ 'href', 'name', 'target' ],\n // We don't currently allow img itself by default, but\n // these attributes would make sense if we did.\n img: [ 'src', 'srcset', 'alt', 'title', 'width', 'height', 'loading' ]\n },\n // Lots of these won't come up by default because we don't allow them\n selfClosing: [ 'img', 'br', 'hr', 'area', 'base', 'basefont', 'input', 'link', 'meta' ],\n // URL schemes we permit\n allowedSchemes: [ 'http', 'https', 'ftp', 'mailto', 'tel' ],\n allowedSchemesByTag: {},\n allowedSchemesAppliedToAttributes: [ 'href', 'src', 'cite' ],\n allowProtocolRelative: true,\n enforceHtmlBoundary: false\n};\n\nsanitizeHtml.simpleTransform = function(newTagName, newAttribs, merge) {\n merge = (merge === undefined) ? true : merge;\n newAttribs = newAttribs || {};\n\n return function(tagName, attribs) {\n let attrib;\n if (merge) {\n for (attrib in newAttribs) {\n attribs[attrib] = newAttribs[attrib];\n }\n } else {\n attribs = newAttribs;\n }\n\n return {\n tagName: newTagName,\n attribs: attribs\n };\n };\n};\n","'use strict';\nmodule.exports = function (str) {\n\treturn encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n\t\treturn '%' + c.charCodeAt(0).toString(16).toUpperCase();\n\t});\n};\n","/**\n * vee-validate v4.7.3\n * (c) 2022 Abdelrahman Awad\n * @license MIT\n */\nimport { getCurrentInstance, inject, warn as warn$1, ref, watch, unref, computed, reactive, onUnmounted, nextTick, onMounted, provide, isRef, onBeforeUnmount, defineComponent, toRef, resolveDynamicComponent, h, watchEffect, markRaw } from 'vue';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\nfunction isCallable(fn) {\r\n return typeof fn === 'function';\r\n}\r\nfunction isNullOrUndefined(value) {\r\n return value === null || value === undefined;\r\n}\r\nconst isObject = (obj) => obj !== null && !!obj && typeof obj === 'object' && !Array.isArray(obj);\r\nfunction isIndex(value) {\r\n return Number(value) >= 0;\r\n}\r\nfunction toNumber(value) {\r\n const n = parseFloat(value);\r\n return isNaN(n) ? value : n;\r\n}\n\nconst RULES = {};\r\n/**\r\n * Adds a custom validator to the list of validation rules.\r\n */\r\nfunction defineRule(id, validator) {\r\n // makes sure new rules are properly formatted.\r\n guardExtend(id, validator);\r\n RULES[id] = validator;\r\n}\r\n/**\r\n * Gets an already defined rule\r\n */\r\nfunction resolveRule(id) {\r\n return RULES[id];\r\n}\r\n/**\r\n * Guards from extension violations.\r\n */\r\nfunction guardExtend(id, validator) {\r\n if (isCallable(validator)) {\r\n return;\r\n }\r\n throw new Error(`Extension Error: The validator '${id}' must be a function.`);\r\n}\n\nconst FormContextKey = Symbol('vee-validate-form');\r\nconst FieldContextKey = Symbol('vee-validate-field-instance');\r\nconst IS_ABSENT = Symbol('Default empty value');\n\nconst isClient = typeof window !== 'undefined';\r\nfunction isLocator(value) {\r\n return isCallable(value) && !!value.__locatorRef;\r\n}\r\nfunction isYupValidator(value) {\r\n return !!value && isCallable(value.validate);\r\n}\r\nfunction hasCheckedAttr(type) {\r\n return type === 'checkbox' || type === 'radio';\r\n}\r\nfunction isContainerValue(value) {\r\n return isObject(value) || Array.isArray(value);\r\n}\r\n/**\r\n * True if the value is an empty object or array\r\n */\r\nfunction isEmptyContainer(value) {\r\n if (Array.isArray(value)) {\r\n return value.length === 0;\r\n }\r\n return isObject(value) && Object.keys(value).length === 0;\r\n}\r\n/**\r\n * Checks if the path opted out of nested fields using `[fieldName]` syntax\r\n */\r\nfunction isNotNestedPath(path) {\r\n return /^\\[.+\\]$/i.test(path);\r\n}\r\n/**\r\n * Checks if an element is a native HTML5 multi-select input element\r\n */\r\nfunction isNativeMultiSelect(el) {\r\n return isNativeSelect(el) && el.multiple;\r\n}\r\n/**\r\n * Checks if an element is a native HTML5 select input element\r\n */\r\nfunction isNativeSelect(el) {\r\n return el.tagName === 'SELECT';\r\n}\r\n/**\r\n * Checks if a tag name with attrs object will render a native multi-select element\r\n */\r\nfunction isNativeMultiSelectNode(tag, attrs) {\r\n // The falsy value array is the values that Vue won't add the `multiple` prop if it has one of these values\r\n const hasTruthyBindingValue = ![false, null, undefined, 0].includes(attrs.multiple) && !Number.isNaN(attrs.multiple);\r\n return tag === 'select' && 'multiple' in attrs && hasTruthyBindingValue;\r\n}\r\n/**\r\n * Checks if a node should have a `:value` binding or not\r\n *\r\n * These nodes should not have a value binding\r\n * For files, because they are not reactive\r\n * For multi-selects because the value binding will reset the value\r\n */\r\nfunction shouldHaveValueBinding(tag, attrs) {\r\n return !isNativeMultiSelectNode(tag, attrs) && attrs.type !== 'file' && !hasCheckedAttr(attrs.type);\r\n}\r\nfunction isFormSubmitEvent(evt) {\r\n return isEvent(evt) && evt.target && 'submit' in evt.target;\r\n}\r\nfunction isEvent(evt) {\r\n if (!evt) {\r\n return false;\r\n }\r\n if (typeof Event !== 'undefined' && isCallable(Event) && evt instanceof Event) {\r\n return true;\r\n }\r\n // this is for IE and Cypress #3161\r\n /* istanbul ignore next */\r\n if (evt && evt.srcElement) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction isPropPresent(obj, prop) {\r\n return prop in obj && obj[prop] !== IS_ABSENT;\r\n}\r\n/**\r\n * Compares if two values are the same borrowed from:\r\n * https://github.com/epoberezkin/fast-deep-equal\r\n * We added a case for file matching since `Object.keys` doesn't work with Files.\r\n * */\r\nfunction isEqual(a, b) {\r\n if (a === b)\r\n return true;\r\n if (a && b && typeof a === 'object' && typeof b === 'object') {\r\n if (a.constructor !== b.constructor)\r\n return false;\r\n // eslint-disable-next-line no-var\r\n var length, i, keys;\r\n if (Array.isArray(a)) {\r\n length = a.length;\r\n // eslint-disable-next-line eqeqeq\r\n if (length != b.length)\r\n return false;\r\n for (i = length; i-- !== 0;)\r\n if (!isEqual(a[i], b[i]))\r\n return false;\r\n return true;\r\n }\r\n if (a instanceof Map && b instanceof Map) {\r\n if (a.size !== b.size)\r\n return false;\r\n for (i of a.entries())\r\n if (!b.has(i[0]))\r\n return false;\r\n for (i of a.entries())\r\n if (!isEqual(i[1], b.get(i[0])))\r\n return false;\r\n return true;\r\n }\r\n // We added this part for file comparison, arguably a little naive but should work for most cases.\r\n // #3911\r\n if (isFile(a) && isFile(b)) {\r\n if (a.size !== b.size)\r\n return false;\r\n if (a.name !== b.name)\r\n return false;\r\n if (a.lastModified !== b.lastModified)\r\n return false;\r\n if (a.type !== b.type)\r\n return false;\r\n return true;\r\n }\r\n if (a instanceof Set && b instanceof Set) {\r\n if (a.size !== b.size)\r\n return false;\r\n for (i of a.entries())\r\n if (!b.has(i[0]))\r\n return false;\r\n return true;\r\n }\r\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\r\n length = a.length;\r\n // eslint-disable-next-line eqeqeq\r\n if (length != b.length)\r\n return false;\r\n for (i = length; i-- !== 0;)\r\n if (a[i] !== b[i])\r\n return false;\r\n return true;\r\n }\r\n if (a.constructor === RegExp)\r\n return a.source === b.source && a.flags === b.flags;\r\n if (a.valueOf !== Object.prototype.valueOf)\r\n return a.valueOf() === b.valueOf();\r\n if (a.toString !== Object.prototype.toString)\r\n return a.toString() === b.toString();\r\n keys = Object.keys(a);\r\n length = keys.length;\r\n if (length !== Object.keys(b).length)\r\n return false;\r\n for (i = length; i-- !== 0;)\r\n if (!Object.prototype.hasOwnProperty.call(b, keys[i]))\r\n return false;\r\n for (i = length; i-- !== 0;) {\r\n // eslint-disable-next-line no-var\r\n var key = keys[i];\r\n if (!isEqual(a[key], b[key]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n // true if both NaN, false otherwise\r\n // eslint-disable-next-line no-self-compare\r\n return a !== a && b !== b;\r\n}\r\nfunction isFile(a) {\r\n if (!isClient) {\r\n return false;\r\n }\r\n return a instanceof File;\r\n}\n\nfunction set(obj, key, val) {\n\tif (typeof val.value === 'object') val.value = klona(val.value);\n\tif (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {\n\t\tObject.defineProperty(obj, key, val);\n\t} else obj[key] = val.value;\n}\n\nfunction klona(x) {\n\tif (typeof x !== 'object') return x;\n\n\tvar i=0, k, list, tmp, str=Object.prototype.toString.call(x);\n\n\tif (str === '[object Object]') {\n\t\ttmp = Object.create(x.__proto__ || null);\n\t} else if (str === '[object Array]') {\n\t\ttmp = Array(x.length);\n\t} else if (str === '[object Set]') {\n\t\ttmp = new Set;\n\t\tx.forEach(function (val) {\n\t\t\ttmp.add(klona(val));\n\t\t});\n\t} else if (str === '[object Map]') {\n\t\ttmp = new Map;\n\t\tx.forEach(function (val, key) {\n\t\t\ttmp.set(klona(key), klona(val));\n\t\t});\n\t} else if (str === '[object Date]') {\n\t\ttmp = new Date(+x);\n\t} else if (str === '[object RegExp]') {\n\t\ttmp = new RegExp(x.source, x.flags);\n\t} else if (str === '[object DataView]') {\n\t\ttmp = new x.constructor( klona(x.buffer) );\n\t} else if (str === '[object ArrayBuffer]') {\n\t\ttmp = x.slice(0);\n\t} else if (str.slice(-6) === 'Array]') {\n\t\t// ArrayBuffer.isView(x)\n\t\t// ~> `new` bcuz `Buffer.slice` => ref\n\t\ttmp = new x.constructor(x);\n\t}\n\n\tif (tmp) {\n\t\tfor (list=Object.getOwnPropertySymbols(x); i < list.length; i++) {\n\t\t\tset(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i]));\n\t\t}\n\n\t\tfor (i=0, list=Object.getOwnPropertyNames(x); i < list.length; i++) {\n\t\t\tif (Object.hasOwnProperty.call(tmp, k=list[i]) && tmp[k] === x[k]) continue;\n\t\t\tset(tmp, k, Object.getOwnPropertyDescriptor(x, k));\n\t\t}\n\t}\n\n\treturn tmp || x;\n}\n\nfunction cleanupNonNestedPath(path) {\r\n if (isNotNestedPath(path)) {\r\n return path.replace(/\\[|\\]/gi, '');\r\n }\r\n return path;\r\n}\r\nfunction getFromPath(object, path, fallback) {\r\n if (!object) {\r\n return fallback;\r\n }\r\n if (isNotNestedPath(path)) {\r\n return object[cleanupNonNestedPath(path)];\r\n }\r\n const resolvedValue = (path || '')\r\n .split(/\\.|\\[(\\d+)\\]/)\r\n .filter(Boolean)\r\n .reduce((acc, propKey) => {\r\n if (isContainerValue(acc) && propKey in acc) {\r\n return acc[propKey];\r\n }\r\n return fallback;\r\n }, object);\r\n return resolvedValue;\r\n}\r\n/**\r\n * Sets a nested property value in a path, creates the path properties if it doesn't exist\r\n */\r\nfunction setInPath(object, path, value) {\r\n if (isNotNestedPath(path)) {\r\n object[cleanupNonNestedPath(path)] = value;\r\n return;\r\n }\r\n const keys = path.split(/\\.|\\[(\\d+)\\]/).filter(Boolean);\r\n let acc = object;\r\n for (let i = 0; i < keys.length; i++) {\r\n // Last key, set it\r\n if (i === keys.length - 1) {\r\n acc[keys[i]] = value;\r\n return;\r\n }\r\n // Key does not exist, create a container for it\r\n if (!(keys[i] in acc) || isNullOrUndefined(acc[keys[i]])) {\r\n // container can be either an object or an array depending on the next key if it exists\r\n acc[keys[i]] = isIndex(keys[i + 1]) ? [] : {};\r\n }\r\n acc = acc[keys[i]];\r\n }\r\n}\r\nfunction unset(object, key) {\r\n if (Array.isArray(object) && isIndex(key)) {\r\n object.splice(Number(key), 1);\r\n return;\r\n }\r\n if (isObject(object)) {\r\n delete object[key];\r\n }\r\n}\r\n/**\r\n * Removes a nested property from object\r\n */\r\nfunction unsetPath(object, path) {\r\n if (isNotNestedPath(path)) {\r\n delete object[cleanupNonNestedPath(path)];\r\n return;\r\n }\r\n const keys = path.split(/\\.|\\[(\\d+)\\]/).filter(Boolean);\r\n let acc = object;\r\n for (let i = 0; i < keys.length; i++) {\r\n // Last key, unset it\r\n if (i === keys.length - 1) {\r\n unset(acc, keys[i]);\r\n break;\r\n }\r\n // Key does not exist, exit\r\n if (!(keys[i] in acc) || isNullOrUndefined(acc[keys[i]])) {\r\n break;\r\n }\r\n acc = acc[keys[i]];\r\n }\r\n const pathValues = keys.map((_, idx) => {\r\n return getFromPath(object, keys.slice(0, idx).join('.'));\r\n });\r\n for (let i = pathValues.length - 1; i >= 0; i--) {\r\n if (!isEmptyContainer(pathValues[i])) {\r\n continue;\r\n }\r\n if (i === 0) {\r\n unset(object, keys[0]);\r\n continue;\r\n }\r\n unset(pathValues[i - 1], keys[i - 1]);\r\n }\r\n}\r\n/**\r\n * A typed version of Object.keys\r\n */\r\nfunction keysOf(record) {\r\n return Object.keys(record);\r\n}\r\n// Uses same component provide as its own injections\r\n// Due to changes in https://github.com/vuejs/vue-next/pull/2424\r\nfunction injectWithSelf(symbol, def = undefined) {\r\n const vm = getCurrentInstance();\r\n return (vm === null || vm === void 0 ? void 0 : vm.provides[symbol]) || inject(symbol, def);\r\n}\r\nfunction warn(message) {\r\n warn$1(`[vee-validate]: ${message}`);\r\n}\r\n/**\r\n * Ensures we deal with a singular field value\r\n */\r\nfunction normalizeField(field) {\r\n if (Array.isArray(field)) {\r\n return field[0];\r\n }\r\n return field;\r\n}\r\nfunction resolveNextCheckboxValue(currentValue, checkedValue, uncheckedValue) {\r\n if (Array.isArray(currentValue)) {\r\n const newVal = [...currentValue];\r\n // Use isEqual since checked object values can possibly fail the equality check #3883\r\n const idx = newVal.findIndex(v => isEqual(v, checkedValue));\r\n idx >= 0 ? newVal.splice(idx, 1) : newVal.push(checkedValue);\r\n return newVal;\r\n }\r\n return isEqual(currentValue, checkedValue) ? uncheckedValue : checkedValue;\r\n}\r\n/**\r\n * Creates a throttled function that only invokes the provided function (`func`) at most once per within a given number of milliseconds\r\n * (`limit`)\r\n */\r\nfunction throttle(func, limit) {\r\n let inThrottle;\r\n let lastResult;\r\n return function (...args) {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const context = this;\r\n if (!inThrottle) {\r\n inThrottle = true;\r\n setTimeout(() => (inThrottle = false), limit);\r\n lastResult = func.apply(context, args);\r\n }\r\n return lastResult;\r\n };\r\n}\r\nfunction debounceAsync(inner, ms = 0) {\r\n let timer = null;\r\n let resolves = [];\r\n return function (...args) {\r\n // Run the function after a certain amount of time\r\n if (timer) {\r\n window.clearTimeout(timer);\r\n }\r\n timer = window.setTimeout(() => {\r\n // Get the result of the inner function, then apply it to the resolve function of\r\n // each promise that has been created since the last time the inner function was run\r\n const result = inner(...args);\r\n resolves.forEach(r => r(result));\r\n resolves = [];\r\n }, ms);\r\n return new Promise(resolve => resolves.push(resolve));\r\n };\r\n}\r\nfunction applyModelModifiers(value, modifiers) {\r\n if (!isObject(modifiers)) {\r\n return value;\r\n }\r\n if (modifiers.number) {\r\n return toNumber(value);\r\n }\r\n return value;\r\n}\r\nfunction withLatest(fn, onDone) {\r\n let latestRun;\r\n return async function runLatest(...args) {\r\n const pending = fn(...args);\r\n latestRun = pending;\r\n const result = await pending;\r\n if (pending !== latestRun) {\r\n return result;\r\n }\r\n latestRun = undefined;\r\n onDone(result, args);\r\n return result;\r\n };\r\n}\r\nfunction computedDeep({ get, set }) {\r\n const baseRef = ref(klona(get()));\r\n watch(get, newValue => {\r\n if (isEqual(newValue, baseRef.value)) {\r\n return;\r\n }\r\n baseRef.value = klona(newValue);\r\n }, {\r\n deep: true,\r\n });\r\n watch(baseRef, newValue => {\r\n if (isEqual(newValue, get())) {\r\n return;\r\n }\r\n set(klona(newValue));\r\n }, {\r\n deep: true,\r\n });\r\n return baseRef;\r\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst normalizeChildren = (tag, context, slotProps) => {\r\n if (!context.slots.default) {\r\n return context.slots.default;\r\n }\r\n if (typeof tag === 'string' || !tag) {\r\n return context.slots.default(slotProps());\r\n }\r\n return {\r\n default: () => { var _a, _b; return (_b = (_a = context.slots).default) === null || _b === void 0 ? void 0 : _b.call(_a, slotProps()); },\r\n };\r\n};\r\n/**\r\n * Vue adds a `_value` prop at the moment on the input elements to store the REAL value on them, real values are different than the `value` attribute\r\n * as they do not get casted to strings unlike `el.value` which preserves user-code behavior\r\n */\r\nfunction getBoundValue(el) {\r\n if (hasValueBinding(el)) {\r\n return el._value;\r\n }\r\n return undefined;\r\n}\r\n/**\r\n * Vue adds a `_value` prop at the moment on the input elements to store the REAL value on them, real values are different than the `value` attribute\r\n * as they do not get casted to strings unlike `el.value` which preserves user-code behavior\r\n */\r\nfunction hasValueBinding(el) {\r\n return '_value' in el;\r\n}\n\nfunction normalizeEventValue(value) {\r\n if (!isEvent(value)) {\r\n return value;\r\n }\r\n const input = value.target;\r\n // Vue sets the current bound value on `_value` prop\r\n // for checkboxes it it should fetch the value binding type as is (boolean instead of string)\r\n if (hasCheckedAttr(input.type) && hasValueBinding(input)) {\r\n return getBoundValue(input);\r\n }\r\n if (input.type === 'file' && input.files) {\r\n const files = Array.from(input.files);\r\n return input.multiple ? files : files[0];\r\n }\r\n if (isNativeMultiSelect(input)) {\r\n return Array.from(input.options)\r\n .filter(opt => opt.selected && !opt.disabled)\r\n .map(getBoundValue);\r\n }\r\n // makes sure we get the actual `option` bound value\r\n // #3440\r\n if (isNativeSelect(input)) {\r\n const selectedOption = Array.from(input.options).find(opt => opt.selected);\r\n return selectedOption ? getBoundValue(selectedOption) : input.value;\r\n }\r\n return input.value;\r\n}\n\n/**\r\n * Normalizes the given rules expression.\r\n */\r\nfunction normalizeRules(rules) {\r\n const acc = {};\r\n Object.defineProperty(acc, '_$$isNormalized', {\r\n value: true,\r\n writable: false,\r\n enumerable: false,\r\n configurable: false,\r\n });\r\n if (!rules) {\r\n return acc;\r\n }\r\n // Object is already normalized, skip.\r\n if (isObject(rules) && rules._$$isNormalized) {\r\n return rules;\r\n }\r\n if (isObject(rules)) {\r\n return Object.keys(rules).reduce((prev, curr) => {\r\n const params = normalizeParams(rules[curr]);\r\n if (rules[curr] !== false) {\r\n prev[curr] = buildParams(params);\r\n }\r\n return prev;\r\n }, acc);\r\n }\r\n /* istanbul ignore if */\r\n if (typeof rules !== 'string') {\r\n return acc;\r\n }\r\n return rules.split('|').reduce((prev, rule) => {\r\n const parsedRule = parseRule(rule);\r\n if (!parsedRule.name) {\r\n return prev;\r\n }\r\n prev[parsedRule.name] = buildParams(parsedRule.params);\r\n return prev;\r\n }, acc);\r\n}\r\n/**\r\n * Normalizes a rule param.\r\n */\r\nfunction normalizeParams(params) {\r\n if (params === true) {\r\n return [];\r\n }\r\n if (Array.isArray(params)) {\r\n return params;\r\n }\r\n if (isObject(params)) {\r\n return params;\r\n }\r\n return [params];\r\n}\r\nfunction buildParams(provided) {\r\n const mapValueToLocator = (value) => {\r\n // A target param using interpolation\r\n if (typeof value === 'string' && value[0] === '@') {\r\n return createLocator(value.slice(1));\r\n }\r\n return value;\r\n };\r\n if (Array.isArray(provided)) {\r\n return provided.map(mapValueToLocator);\r\n }\r\n // #3073\r\n if (provided instanceof RegExp) {\r\n return [provided];\r\n }\r\n return Object.keys(provided).reduce((prev, key) => {\r\n prev[key] = mapValueToLocator(provided[key]);\r\n return prev;\r\n }, {});\r\n}\r\n/**\r\n * Parses a rule string expression.\r\n */\r\nconst parseRule = (rule) => {\r\n let params = [];\r\n const name = rule.split(':')[0];\r\n if (rule.includes(':')) {\r\n params = rule.split(':').slice(1).join(':').split(',');\r\n }\r\n return { name, params };\r\n};\r\nfunction createLocator(value) {\r\n const locator = (crossTable) => {\r\n const val = getFromPath(crossTable, value) || crossTable[value];\r\n return val;\r\n };\r\n locator.__locatorRef = value;\r\n return locator;\r\n}\r\nfunction extractLocators(params) {\r\n if (Array.isArray(params)) {\r\n return params.filter(isLocator);\r\n }\r\n return keysOf(params)\r\n .filter(key => isLocator(params[key]))\r\n .map(key => params[key]);\r\n}\n\nconst DEFAULT_CONFIG = {\r\n generateMessage: ({ field }) => `${field} is not valid.`,\r\n bails: true,\r\n validateOnBlur: true,\r\n validateOnChange: true,\r\n validateOnInput: false,\r\n validateOnModelUpdate: true,\r\n};\r\nlet currentConfig = Object.assign({}, DEFAULT_CONFIG);\r\nconst getConfig = () => currentConfig;\r\nconst setConfig = (newConf) => {\r\n currentConfig = Object.assign(Object.assign({}, currentConfig), newConf);\r\n};\r\nconst configure = setConfig;\n\n/**\r\n * Validates a value against the rules.\r\n */\r\nasync function validate(value, rules, options = {}) {\r\n const shouldBail = options === null || options === void 0 ? void 0 : options.bails;\r\n const field = {\r\n name: (options === null || options === void 0 ? void 0 : options.name) || '{field}',\r\n rules,\r\n bails: shouldBail !== null && shouldBail !== void 0 ? shouldBail : true,\r\n formData: (options === null || options === void 0 ? void 0 : options.values) || {},\r\n };\r\n const result = await _validate(field, value);\r\n const errors = result.errors;\r\n return {\r\n errors,\r\n valid: !errors.length,\r\n };\r\n}\r\n/**\r\n * Starts the validation process.\r\n */\r\nasync function _validate(field, value) {\r\n if (isYupValidator(field.rules)) {\r\n return validateFieldWithYup(value, field.rules, { bails: field.bails });\r\n }\r\n // if a generic function or chain of generic functions\r\n if (isCallable(field.rules) || Array.isArray(field.rules)) {\r\n const ctx = {\r\n field: field.name,\r\n form: field.formData,\r\n value: value,\r\n };\r\n // Normalize the pipeline\r\n const pipeline = Array.isArray(field.rules) ? field.rules : [field.rules];\r\n const length = pipeline.length;\r\n const errors = [];\r\n for (let i = 0; i < length; i++) {\r\n const rule = pipeline[i];\r\n const result = await rule(value, ctx);\r\n const isValid = typeof result !== 'string' && result;\r\n if (isValid) {\r\n continue;\r\n }\r\n const message = typeof result === 'string' ? result : _generateFieldError(ctx);\r\n errors.push(message);\r\n if (field.bails) {\r\n return {\r\n errors,\r\n };\r\n }\r\n }\r\n return {\r\n errors,\r\n };\r\n }\r\n const normalizedContext = Object.assign(Object.assign({}, field), { rules: normalizeRules(field.rules) });\r\n const errors = [];\r\n const rulesKeys = Object.keys(normalizedContext.rules);\r\n const length = rulesKeys.length;\r\n for (let i = 0; i < length; i++) {\r\n const rule = rulesKeys[i];\r\n const result = await _test(normalizedContext, value, {\r\n name: rule,\r\n params: normalizedContext.rules[rule],\r\n });\r\n if (result.error) {\r\n errors.push(result.error);\r\n if (field.bails) {\r\n return {\r\n errors,\r\n };\r\n }\r\n }\r\n }\r\n return {\r\n errors,\r\n };\r\n}\r\n/**\r\n * Handles yup validation\r\n */\r\nasync function validateFieldWithYup(value, validator, opts) {\r\n var _a;\r\n const errors = await validator\r\n .validate(value, {\r\n abortEarly: (_a = opts.bails) !== null && _a !== void 0 ? _a : true,\r\n })\r\n .then(() => [])\r\n .catch((err) => {\r\n // Yup errors have a name prop one them.\r\n // https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\r\n if (err.name === 'ValidationError') {\r\n return err.errors;\r\n }\r\n // re-throw the error so we don't hide it\r\n throw err;\r\n });\r\n return {\r\n errors,\r\n };\r\n}\r\n/**\r\n * Tests a single input value against a rule.\r\n */\r\nasync function _test(field, value, rule) {\r\n const validator = resolveRule(rule.name);\r\n if (!validator) {\r\n throw new Error(`No such validator '${rule.name}' exists.`);\r\n }\r\n const params = fillTargetValues(rule.params, field.formData);\r\n const ctx = {\r\n field: field.name,\r\n value,\r\n form: field.formData,\r\n rule: Object.assign(Object.assign({}, rule), { params }),\r\n };\r\n const result = await validator(value, params, ctx);\r\n if (typeof result === 'string') {\r\n return {\r\n error: result,\r\n };\r\n }\r\n return {\r\n error: result ? undefined : _generateFieldError(ctx),\r\n };\r\n}\r\n/**\r\n * Generates error messages.\r\n */\r\nfunction _generateFieldError(fieldCtx) {\r\n const message = getConfig().generateMessage;\r\n if (!message) {\r\n return 'Field is invalid';\r\n }\r\n return message(fieldCtx);\r\n}\r\nfunction fillTargetValues(params, crossTable) {\r\n const normalize = (value) => {\r\n if (isLocator(value)) {\r\n return value(crossTable);\r\n }\r\n return value;\r\n };\r\n if (Array.isArray(params)) {\r\n return params.map(normalize);\r\n }\r\n return Object.keys(params).reduce((acc, param) => {\r\n acc[param] = normalize(params[param]);\r\n return acc;\r\n }, {});\r\n}\r\nasync function validateYupSchema(schema, values) {\r\n const errorObjects = await schema\r\n .validate(values, { abortEarly: false })\r\n .then(() => [])\r\n .catch((err) => {\r\n // Yup errors have a name prop one them.\r\n // https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\r\n if (err.name !== 'ValidationError') {\r\n throw err;\r\n }\r\n // list of aggregated errors\r\n return err.inner || [];\r\n });\r\n const results = {};\r\n const errors = {};\r\n for (const error of errorObjects) {\r\n const messages = error.errors;\r\n results[error.path] = { valid: !messages.length, errors: messages };\r\n if (messages.length) {\r\n errors[error.path] = messages[0];\r\n }\r\n }\r\n return {\r\n valid: !errorObjects.length,\r\n results,\r\n errors,\r\n };\r\n}\r\nasync function validateObjectSchema(schema, values, opts) {\r\n const paths = keysOf(schema);\r\n const validations = paths.map(async (path) => {\r\n var _a, _b, _c;\r\n const fieldResult = await validate(getFromPath(values, path), schema[path], {\r\n name: ((_a = opts === null || opts === void 0 ? void 0 : opts.names) === null || _a === void 0 ? void 0 : _a[path]) || path,\r\n values: values,\r\n bails: (_c = (_b = opts === null || opts === void 0 ? void 0 : opts.bailsMap) === null || _b === void 0 ? void 0 : _b[path]) !== null && _c !== void 0 ? _c : true,\r\n });\r\n return Object.assign(Object.assign({}, fieldResult), { path });\r\n });\r\n let isAllValid = true;\r\n const validationResults = await Promise.all(validations);\r\n const results = {};\r\n const errors = {};\r\n for (const result of validationResults) {\r\n results[result.path] = {\r\n valid: result.valid,\r\n errors: result.errors,\r\n };\r\n if (!result.valid) {\r\n isAllValid = false;\r\n errors[result.path] = result.errors[0];\r\n }\r\n }\r\n return {\r\n valid: isAllValid,\r\n results,\r\n errors,\r\n };\r\n}\n\nlet ID_COUNTER = 0;\r\nfunction useFieldState(path, init) {\r\n const { value, initialValue, setInitialValue } = _useFieldValue(path, init.modelValue, init.form);\r\n const { errorMessage, errors, setErrors } = _useFieldErrors(path, init.form);\r\n const meta = _useFieldMeta(value, initialValue, errors);\r\n const id = ID_COUNTER >= Number.MAX_SAFE_INTEGER ? 0 : ++ID_COUNTER;\r\n function setState(state) {\r\n var _a;\r\n if ('value' in state) {\r\n value.value = state.value;\r\n }\r\n if ('errors' in state) {\r\n setErrors(state.errors);\r\n }\r\n if ('touched' in state) {\r\n meta.touched = (_a = state.touched) !== null && _a !== void 0 ? _a : meta.touched;\r\n }\r\n if ('initialValue' in state) {\r\n setInitialValue(state.initialValue);\r\n }\r\n }\r\n return {\r\n id,\r\n path,\r\n value,\r\n initialValue,\r\n meta,\r\n errors,\r\n errorMessage,\r\n setState,\r\n };\r\n}\r\n/**\r\n * Creates the field value and resolves the initial value\r\n */\r\nfunction _useFieldValue(path, modelValue, form) {\r\n const modelRef = ref(unref(modelValue));\r\n function resolveInitialValue() {\r\n if (!form) {\r\n return unref(modelRef);\r\n }\r\n return getFromPath(form.meta.value.initialValues, unref(path), unref(modelRef));\r\n }\r\n function setInitialValue(value) {\r\n if (!form) {\r\n modelRef.value = value;\r\n return;\r\n }\r\n form.stageInitialValue(unref(path), value, true);\r\n }\r\n const initialValue = computed(resolveInitialValue);\r\n // if no form is associated, use a regular ref.\r\n if (!form) {\r\n const value = ref(resolveInitialValue());\r\n return {\r\n value,\r\n initialValue,\r\n setInitialValue,\r\n };\r\n }\r\n // to set the initial value, first check if there is a current value, if there is then use it.\r\n // otherwise use the configured initial value if it exists.\r\n // prioritize model value over form values\r\n // #3429\r\n const currentValue = modelValue ? unref(modelValue) : getFromPath(form.values, unref(path), unref(initialValue));\r\n form.stageInitialValue(unref(path), currentValue, true);\r\n // otherwise use a computed setter that triggers the `setFieldValue`\r\n const value = computed({\r\n get() {\r\n return getFromPath(form.values, unref(path));\r\n },\r\n set(newVal) {\r\n form.setFieldValue(unref(path), newVal);\r\n },\r\n });\r\n return {\r\n value,\r\n initialValue,\r\n setInitialValue,\r\n };\r\n}\r\n/**\r\n * Creates meta flags state and some associated effects with them\r\n */\r\nfunction _useFieldMeta(currentValue, initialValue, errors) {\r\n const meta = reactive({\r\n touched: false,\r\n pending: false,\r\n valid: true,\r\n validated: !!unref(errors).length,\r\n initialValue: computed(() => unref(initialValue)),\r\n dirty: computed(() => {\r\n return !isEqual(unref(currentValue), unref(initialValue));\r\n }),\r\n });\r\n watch(errors, value => {\r\n meta.valid = !value.length;\r\n }, {\r\n immediate: true,\r\n flush: 'sync',\r\n });\r\n return meta;\r\n}\r\n/**\r\n * Creates the error message state for the field state\r\n */\r\nfunction _useFieldErrors(path, form) {\r\n function normalizeErrors(messages) {\r\n if (!messages) {\r\n return [];\r\n }\r\n return Array.isArray(messages) ? messages : [messages];\r\n }\r\n if (!form) {\r\n const errors = ref([]);\r\n return {\r\n errors,\r\n errorMessage: computed(() => errors.value[0]),\r\n setErrors: (messages) => {\r\n errors.value = normalizeErrors(messages);\r\n },\r\n };\r\n }\r\n const errors = computed(() => form.errorBag.value[unref(path)] || []);\r\n return {\r\n errors,\r\n errorMessage: computed(() => errors.value[0]),\r\n setErrors: (messages) => {\r\n form.setFieldErrorBag(unref(path), normalizeErrors(messages));\r\n },\r\n };\r\n}\n\nfunction installDevtoolsPlugin(app) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n setupDevtoolsPlugin({\r\n id: 'vee-validate-devtools-plugin',\r\n label: 'VeeValidate Plugin',\r\n packageName: 'vee-validate',\r\n homepage: 'https://vee-validate.logaretm.com/v4',\r\n app,\r\n logo: 'https://vee-validate.logaretm.com/v4/logo.png',\r\n }, setupApiHooks);\r\n }\r\n}\r\nconst DEVTOOLS_FORMS = {};\r\nconst DEVTOOLS_FIELDS = {};\r\nlet API;\r\nconst refreshInspector = throttle(() => {\r\n setTimeout(async () => {\r\n await nextTick();\r\n API === null || API === void 0 ? void 0 : API.sendInspectorState(INSPECTOR_ID);\r\n API === null || API === void 0 ? void 0 : API.sendInspectorTree(INSPECTOR_ID);\r\n }, 100);\r\n}, 100);\r\nfunction registerFormWithDevTools(form) {\r\n const vm = getCurrentInstance();\r\n if (!API) {\r\n const app = vm === null || vm === void 0 ? void 0 : vm.appContext.app;\r\n if (!app) {\r\n return;\r\n }\r\n installDevtoolsPlugin(app);\r\n }\r\n DEVTOOLS_FORMS[form.formId] = Object.assign({}, form);\r\n DEVTOOLS_FORMS[form.formId]._vm = vm;\r\n onUnmounted(() => {\r\n delete DEVTOOLS_FORMS[form.formId];\r\n refreshInspector();\r\n });\r\n refreshInspector();\r\n}\r\nfunction registerSingleFieldWithDevtools(field) {\r\n const vm = getCurrentInstance();\r\n if (!API) {\r\n const app = vm === null || vm === void 0 ? void 0 : vm.appContext.app;\r\n if (!app) {\r\n return;\r\n }\r\n installDevtoolsPlugin(app);\r\n }\r\n DEVTOOLS_FIELDS[field.id] = Object.assign({}, field);\r\n DEVTOOLS_FIELDS[field.id]._vm = vm;\r\n onUnmounted(() => {\r\n delete DEVTOOLS_FIELDS[field.id];\r\n refreshInspector();\r\n });\r\n refreshInspector();\r\n}\r\nconst INSPECTOR_ID = 'vee-validate-inspector';\r\nconst COLORS = {\r\n error: 0xbd4b4b,\r\n success: 0x06d77b,\r\n unknown: 0x54436b,\r\n white: 0xffffff,\r\n black: 0x000000,\r\n blue: 0x035397,\r\n purple: 0xb980f0,\r\n orange: 0xf5a962,\r\n gray: 0xbbbfca,\r\n};\r\nlet SELECTED_NODE = null;\r\nfunction setupApiHooks(api) {\r\n API = api;\r\n api.addInspector({\r\n id: INSPECTOR_ID,\r\n icon: 'rule',\r\n label: 'vee-validate',\r\n noSelectionText: 'Select a vee-validate node to inspect',\r\n actions: [\r\n {\r\n icon: 'done_outline',\r\n tooltip: 'Validate selected item',\r\n action: async () => {\r\n if (!SELECTED_NODE) {\r\n console.error('There is not a valid selected vee-validate node or component');\r\n return;\r\n }\r\n const result = await SELECTED_NODE.validate();\r\n console.log(result);\r\n },\r\n },\r\n {\r\n icon: 'delete_sweep',\r\n tooltip: 'Clear validation state of the selected item',\r\n action: () => {\r\n if (!SELECTED_NODE) {\r\n console.error('There is not a valid selected vee-validate node or component');\r\n return;\r\n }\r\n if ('id' in SELECTED_NODE) {\r\n SELECTED_NODE.resetField();\r\n return;\r\n }\r\n SELECTED_NODE.resetForm();\r\n },\r\n },\r\n ],\r\n });\r\n api.on.getInspectorTree(payload => {\r\n if (payload.inspectorId !== INSPECTOR_ID) {\r\n return;\r\n }\r\n const forms = Object.values(DEVTOOLS_FORMS);\r\n const fields = Object.values(DEVTOOLS_FIELDS);\r\n payload.rootNodes = [\r\n ...forms.map(mapFormForDevtoolsInspector),\r\n ...fields.map(field => mapFieldForDevtoolsInspector(field)),\r\n ];\r\n });\r\n api.on.getInspectorState((payload, ctx) => {\r\n if (payload.inspectorId !== INSPECTOR_ID || ctx.currentTab !== `custom-inspector:${INSPECTOR_ID}`) {\r\n return;\r\n }\r\n const { form, field, type } = decodeNodeId(payload.nodeId);\r\n if (form && type === 'form') {\r\n payload.state = buildFormState(form);\r\n SELECTED_NODE = form;\r\n return;\r\n }\r\n if (field && type === 'field') {\r\n payload.state = buildFieldState(field);\r\n SELECTED_NODE = field;\r\n return;\r\n }\r\n SELECTED_NODE = null;\r\n });\r\n}\r\nfunction mapFormForDevtoolsInspector(form) {\r\n const { textColor, bgColor } = getTagTheme(form);\r\n const formTreeNodes = {};\r\n Object.values(form.fieldsByPath.value).forEach(field => {\r\n const fieldInstance = Array.isArray(field) ? field[0] : field;\r\n if (!fieldInstance) {\r\n return;\r\n }\r\n setInPath(formTreeNodes, unref(fieldInstance.name), mapFieldForDevtoolsInspector(fieldInstance, form));\r\n });\r\n function buildFormTree(tree, path = []) {\r\n const key = [...path].pop();\r\n if ('id' in tree) {\r\n return Object.assign(Object.assign({}, tree), { label: key || tree.label });\r\n }\r\n if (isObject(tree)) {\r\n return {\r\n id: `${path.join('.')}`,\r\n label: key || '',\r\n children: Object.keys(tree).map(key => buildFormTree(tree[key], [...path, key])),\r\n };\r\n }\r\n if (Array.isArray(tree)) {\r\n return {\r\n id: `${path.join('.')}`,\r\n label: `${key}[]`,\r\n children: tree.map((c, idx) => buildFormTree(c, [...path, String(idx)])),\r\n };\r\n }\r\n return { id: '', label: '', children: [] };\r\n }\r\n const { children } = buildFormTree(formTreeNodes);\r\n return {\r\n id: encodeNodeId(form),\r\n label: 'Form',\r\n children,\r\n tags: [\r\n {\r\n label: 'Form',\r\n textColor,\r\n backgroundColor: bgColor,\r\n },\r\n {\r\n label: `${Object.keys(form.fieldsByPath.value).length} fields`,\r\n textColor: COLORS.white,\r\n backgroundColor: COLORS.unknown,\r\n },\r\n ],\r\n };\r\n}\r\nfunction mapFieldForDevtoolsInspector(field, form) {\r\n const fieldInstance = normalizeField(field);\r\n const { textColor, bgColor } = getTagTheme(fieldInstance);\r\n const isGroup = Array.isArray(field) && field.length > 1;\r\n return {\r\n id: encodeNodeId(form, fieldInstance, !isGroup),\r\n label: unref(fieldInstance.name),\r\n children: Array.isArray(field) ? field.map(fieldItem => mapFieldForDevtoolsInspector(fieldItem, form)) : undefined,\r\n tags: [\r\n isGroup\r\n ? undefined\r\n : {\r\n label: 'Field',\r\n textColor,\r\n backgroundColor: bgColor,\r\n },\r\n !form\r\n ? {\r\n label: 'Standalone',\r\n textColor: COLORS.black,\r\n backgroundColor: COLORS.gray,\r\n }\r\n : undefined,\r\n !isGroup && fieldInstance.type === 'checkbox'\r\n ? {\r\n label: 'Checkbox',\r\n textColor: COLORS.white,\r\n backgroundColor: COLORS.blue,\r\n }\r\n : undefined,\r\n !isGroup && fieldInstance.type === 'radio'\r\n ? {\r\n label: 'Radio',\r\n textColor: COLORS.white,\r\n backgroundColor: COLORS.purple,\r\n }\r\n : undefined,\r\n isGroup\r\n ? {\r\n label: 'Group',\r\n textColor: COLORS.black,\r\n backgroundColor: COLORS.orange,\r\n }\r\n : undefined,\r\n ].filter(Boolean),\r\n };\r\n}\r\nfunction encodeNodeId(form, field, encodeIndex = true) {\r\n const fieldPath = form ? unref(field === null || field === void 0 ? void 0 : field.name) : field === null || field === void 0 ? void 0 : field.id;\r\n const fieldGroup = fieldPath ? form === null || form === void 0 ? void 0 : form.fieldsByPath.value[fieldPath] : undefined;\r\n let idx;\r\n if (encodeIndex && field && Array.isArray(fieldGroup)) {\r\n idx = fieldGroup.indexOf(field);\r\n }\r\n const idObject = { f: form === null || form === void 0 ? void 0 : form.formId, ff: fieldPath, idx, type: field ? 'field' : 'form' };\r\n return btoa(JSON.stringify(idObject));\r\n}\r\nfunction decodeNodeId(nodeId) {\r\n try {\r\n const idObject = JSON.parse(atob(nodeId));\r\n const form = DEVTOOLS_FORMS[idObject.f];\r\n if (!form && idObject.ff) {\r\n const field = DEVTOOLS_FIELDS[idObject.ff];\r\n if (!field) {\r\n return {};\r\n }\r\n return {\r\n type: idObject.type,\r\n field,\r\n };\r\n }\r\n if (!form) {\r\n return {};\r\n }\r\n const fieldGroup = form.fieldsByPath.value[idObject.ff];\r\n return {\r\n type: idObject.type,\r\n form,\r\n field: Array.isArray(fieldGroup) ? fieldGroup[idObject.idx || 0] : fieldGroup,\r\n };\r\n }\r\n catch (err) {\r\n // console.error(`Devtools: [vee-validate] Failed to parse node id ${nodeId}`);\r\n }\r\n return {};\r\n}\r\nfunction buildFieldState(field) {\r\n const { errors, meta, value } = field;\r\n return {\r\n 'Field state': [\r\n { key: 'errors', value: errors.value },\r\n {\r\n key: 'initialValue',\r\n value: meta.initialValue,\r\n },\r\n {\r\n key: 'currentValue',\r\n value: value.value,\r\n },\r\n {\r\n key: 'touched',\r\n value: meta.touched,\r\n },\r\n {\r\n key: 'dirty',\r\n value: meta.dirty,\r\n },\r\n {\r\n key: 'valid',\r\n value: meta.valid,\r\n },\r\n ],\r\n };\r\n}\r\nfunction buildFormState(form) {\r\n const { errorBag, meta, values, isSubmitting, submitCount } = form;\r\n return {\r\n 'Form state': [\r\n {\r\n key: 'submitCount',\r\n value: submitCount.value,\r\n },\r\n {\r\n key: 'isSubmitting',\r\n value: isSubmitting.value,\r\n },\r\n {\r\n key: 'touched',\r\n value: meta.value.touched,\r\n },\r\n {\r\n key: 'dirty',\r\n value: meta.value.dirty,\r\n },\r\n {\r\n key: 'valid',\r\n value: meta.value.valid,\r\n },\r\n {\r\n key: 'initialValues',\r\n value: meta.value.initialValues,\r\n },\r\n {\r\n key: 'currentValues',\r\n value: values,\r\n },\r\n {\r\n key: 'errors',\r\n value: keysOf(errorBag.value).reduce((acc, key) => {\r\n var _a;\r\n const message = (_a = errorBag.value[key]) === null || _a === void 0 ? void 0 : _a[0];\r\n if (message) {\r\n acc[key] = message;\r\n }\r\n return acc;\r\n }, {}),\r\n },\r\n ],\r\n };\r\n}\r\n/**\r\n * Resolves the tag color based on the form state\r\n */\r\nfunction getTagTheme(fieldOrForm) {\r\n // const fallbackColors = {\r\n // bgColor: COLORS.unknown,\r\n // textColor: COLORS.white,\r\n // };\r\n const isValid = 'id' in fieldOrForm ? fieldOrForm.meta.valid : fieldOrForm.meta.value.valid;\r\n return {\r\n bgColor: isValid ? COLORS.success : COLORS.error,\r\n textColor: isValid ? COLORS.black : COLORS.white,\r\n };\r\n}\n\n/**\r\n * Creates a field composite.\r\n */\r\nfunction useField(name, rules, opts) {\r\n if (hasCheckedAttr(opts === null || opts === void 0 ? void 0 : opts.type)) {\r\n return useCheckboxField(name, rules, opts);\r\n }\r\n return _useField(name, rules, opts);\r\n}\r\nfunction _useField(name, rules, opts) {\r\n const { initialValue: modelValue, validateOnMount, bails, type, checkedValue, label, validateOnValueUpdate, uncheckedValue, controlled, keepValueOnUnmount, modelPropName, syncVModel, form: controlForm, } = normalizeOptions(unref(name), opts);\r\n const injectedForm = controlled ? injectWithSelf(FormContextKey) : undefined;\r\n const form = controlForm || injectedForm;\r\n // a flag indicating if the field is about to be removed/unmounted.\r\n let markedForRemoval = false;\r\n const { id, value, initialValue, meta, setState, errors, errorMessage } = useFieldState(name, {\r\n modelValue,\r\n form,\r\n });\r\n if (syncVModel) {\r\n useVModel({ value, prop: modelPropName, handleChange });\r\n }\r\n /**\r\n * Handles common onBlur meta update\r\n */\r\n const handleBlur = () => {\r\n meta.touched = true;\r\n };\r\n const normalizedRules = computed(() => {\r\n let rulesValue = unref(rules);\r\n const schema = unref(form === null || form === void 0 ? void 0 : form.schema);\r\n if (schema && !isYupValidator(schema)) {\r\n rulesValue = extractRuleFromSchema(schema, unref(name)) || rulesValue;\r\n }\r\n if (isYupValidator(rulesValue) || isCallable(rulesValue) || Array.isArray(rulesValue)) {\r\n return rulesValue;\r\n }\r\n return normalizeRules(rulesValue);\r\n });\r\n async function validateCurrentValue(mode) {\r\n var _a, _b;\r\n if (form === null || form === void 0 ? void 0 : form.validateSchema) {\r\n return (_a = (await form.validateSchema(mode)).results[unref(name)]) !== null && _a !== void 0 ? _a : { valid: true, errors: [] };\r\n }\r\n return validate(value.value, normalizedRules.value, {\r\n name: unref(label) || unref(name),\r\n values: (_b = form === null || form === void 0 ? void 0 : form.values) !== null && _b !== void 0 ? _b : {},\r\n bails,\r\n });\r\n }\r\n const validateWithStateMutation = withLatest(async () => {\r\n meta.pending = true;\r\n meta.validated = true;\r\n return validateCurrentValue('validated-only');\r\n }, result => {\r\n if (markedForRemoval) {\r\n result.valid = true;\r\n result.errors = [];\r\n }\r\n setState({ errors: result.errors });\r\n meta.pending = false;\r\n return result;\r\n });\r\n const validateValidStateOnly = withLatest(async () => {\r\n return validateCurrentValue('silent');\r\n }, result => {\r\n if (markedForRemoval) {\r\n result.valid = true;\r\n }\r\n meta.valid = result.valid;\r\n return result;\r\n });\r\n function validate$1(opts) {\r\n if ((opts === null || opts === void 0 ? void 0 : opts.mode) === 'silent') {\r\n return validateValidStateOnly();\r\n }\r\n return validateWithStateMutation();\r\n }\r\n // Common input/change event handler\r\n function handleChange(e, shouldValidate = true) {\r\n const newValue = normalizeEventValue(e);\r\n value.value = newValue;\r\n if (!validateOnValueUpdate && shouldValidate) {\r\n validateWithStateMutation();\r\n }\r\n }\r\n // Runs the initial validation\r\n onMounted(() => {\r\n if (validateOnMount) {\r\n return validateWithStateMutation();\r\n }\r\n // validate self initially if no form was handling this\r\n // forms should have their own initial silent validation run to make things more efficient\r\n if (!form || !form.validateSchema) {\r\n validateValidStateOnly();\r\n }\r\n });\r\n function setTouched(isTouched) {\r\n meta.touched = isTouched;\r\n }\r\n let unwatchValue;\r\n let lastWatchedValue = klona(value.value);\r\n function watchValue() {\r\n unwatchValue = watch(value, (val, oldVal) => {\r\n if (isEqual(val, oldVal) && isEqual(val, lastWatchedValue)) {\r\n return;\r\n }\r\n const validateFn = validateOnValueUpdate ? validateWithStateMutation : validateValidStateOnly;\r\n validateFn();\r\n lastWatchedValue = klona(val);\r\n }, {\r\n deep: true,\r\n });\r\n }\r\n watchValue();\r\n function resetField(state) {\r\n var _a;\r\n unwatchValue === null || unwatchValue === void 0 ? void 0 : unwatchValue();\r\n const newValue = state && 'value' in state ? state.value : initialValue.value;\r\n setState({\r\n value: klona(newValue),\r\n initialValue: klona(newValue),\r\n touched: (_a = state === null || state === void 0 ? void 0 : state.touched) !== null && _a !== void 0 ? _a : false,\r\n errors: (state === null || state === void 0 ? void 0 : state.errors) || [],\r\n });\r\n meta.pending = false;\r\n meta.validated = false;\r\n validateValidStateOnly();\r\n // need to watch at next tick to avoid triggering the value watcher\r\n nextTick(() => {\r\n watchValue();\r\n });\r\n }\r\n function setValue(newValue) {\r\n value.value = newValue;\r\n }\r\n function setErrors(errors) {\r\n setState({ errors: Array.isArray(errors) ? errors : [errors] });\r\n }\r\n const field = {\r\n id,\r\n name,\r\n label,\r\n value,\r\n meta,\r\n errors,\r\n errorMessage,\r\n type,\r\n checkedValue,\r\n uncheckedValue,\r\n bails,\r\n keepValueOnUnmount,\r\n resetField,\r\n handleReset: () => resetField(),\r\n validate: validate$1,\r\n handleChange,\r\n handleBlur,\r\n setState,\r\n setTouched,\r\n setErrors,\r\n setValue,\r\n };\r\n provide(FieldContextKey, field);\r\n if (isRef(rules) && typeof unref(rules) !== 'function') {\r\n watch(rules, (value, oldValue) => {\r\n if (isEqual(value, oldValue)) {\r\n return;\r\n }\r\n meta.validated ? validateWithStateMutation() : validateValidStateOnly();\r\n }, {\r\n deep: true,\r\n });\r\n }\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n field._vm = getCurrentInstance();\r\n watch(() => (Object.assign(Object.assign({ errors: errors.value }, meta), { value: value.value })), refreshInspector, {\r\n deep: true,\r\n });\r\n if (!form) {\r\n registerSingleFieldWithDevtools(field);\r\n }\r\n }\r\n // if no associated form return the field API immediately\r\n if (!form) {\r\n return field;\r\n }\r\n // associate the field with the given form\r\n form.register(field);\r\n onBeforeUnmount(() => {\r\n markedForRemoval = true;\r\n form.unregister(field);\r\n });\r\n // extract cross-field dependencies in a computed prop\r\n const dependencies = computed(() => {\r\n const rulesVal = normalizedRules.value;\r\n // is falsy, a function schema or a yup schema\r\n if (!rulesVal || isCallable(rulesVal) || isYupValidator(rulesVal) || Array.isArray(rulesVal)) {\r\n return {};\r\n }\r\n return Object.keys(rulesVal).reduce((acc, rule) => {\r\n const deps = extractLocators(rulesVal[rule])\r\n .map((dep) => dep.__locatorRef)\r\n .reduce((depAcc, depName) => {\r\n const depValue = getFromPath(form.values, depName) || form.values[depName];\r\n if (depValue !== undefined) {\r\n depAcc[depName] = depValue;\r\n }\r\n return depAcc;\r\n }, {});\r\n Object.assign(acc, deps);\r\n return acc;\r\n }, {});\r\n });\r\n // Adds a watcher that runs the validation whenever field dependencies change\r\n watch(dependencies, (deps, oldDeps) => {\r\n // Skip if no dependencies or if the field wasn't manipulated\r\n if (!Object.keys(deps).length) {\r\n return;\r\n }\r\n const shouldValidate = !isEqual(deps, oldDeps);\r\n if (shouldValidate) {\r\n meta.validated ? validateWithStateMutation() : validateValidStateOnly();\r\n }\r\n });\r\n return field;\r\n}\r\n/**\r\n * Normalizes partial field options to include the full options\r\n */\r\nfunction normalizeOptions(name, opts) {\r\n const defaults = () => ({\r\n initialValue: undefined,\r\n validateOnMount: false,\r\n bails: true,\r\n label: name,\r\n validateOnValueUpdate: true,\r\n keepValueOnUnmount: undefined,\r\n modelPropName: 'modelValue',\r\n syncVModel: true,\r\n controlled: true,\r\n });\r\n if (!opts) {\r\n return defaults();\r\n }\r\n // TODO: Deprecate this in next major release\r\n const checkedValue = 'valueProp' in opts ? opts.valueProp : opts.checkedValue;\r\n const controlled = 'standalone' in opts ? !opts.standalone : opts.controlled;\r\n return Object.assign(Object.assign(Object.assign({}, defaults()), (opts || {})), { controlled: controlled !== null && controlled !== void 0 ? controlled : true, checkedValue });\r\n}\r\n/**\r\n * Extracts the validation rules from a schema\r\n */\r\nfunction extractRuleFromSchema(schema, fieldName) {\r\n // no schema at all\r\n if (!schema) {\r\n return undefined;\r\n }\r\n // there is a key on the schema object for this field\r\n return schema[fieldName];\r\n}\r\nfunction useCheckboxField(name, rules, opts) {\r\n const form = !(opts === null || opts === void 0 ? void 0 : opts.standalone) ? injectWithSelf(FormContextKey) : undefined;\r\n const checkedValue = opts === null || opts === void 0 ? void 0 : opts.checkedValue;\r\n const uncheckedValue = opts === null || opts === void 0 ? void 0 : opts.uncheckedValue;\r\n function patchCheckboxApi(field) {\r\n const handleChange = field.handleChange;\r\n const checked = computed(() => {\r\n const currentValue = unref(field.value);\r\n const checkedVal = unref(checkedValue);\r\n return Array.isArray(currentValue)\r\n ? currentValue.findIndex(v => isEqual(v, checkedVal)) >= 0\r\n : isEqual(checkedVal, currentValue);\r\n });\r\n function handleCheckboxChange(e, shouldValidate = true) {\r\n var _a;\r\n if (checked.value === ((_a = e === null || e === void 0 ? void 0 : e.target) === null || _a === void 0 ? void 0 : _a.checked)) {\r\n if (shouldValidate) {\r\n field.validate();\r\n }\r\n return;\r\n }\r\n let newValue = normalizeEventValue(e);\r\n // Single checkbox field without a form to toggle it's value\r\n if (!form) {\r\n newValue = resolveNextCheckboxValue(unref(field.value), unref(checkedValue), unref(uncheckedValue));\r\n }\r\n handleChange(newValue, shouldValidate);\r\n }\r\n return Object.assign(Object.assign({}, field), { checked,\r\n checkedValue,\r\n uncheckedValue, handleChange: handleCheckboxChange });\r\n }\r\n return patchCheckboxApi(_useField(name, rules, opts));\r\n}\r\nfunction useVModel({ prop, value, handleChange }) {\r\n const vm = getCurrentInstance();\r\n /* istanbul ignore next */\r\n if (!vm) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n console.warn('Failed to setup model events because `useField` was not called in setup.');\r\n }\r\n return;\r\n }\r\n const propName = prop || 'modelValue';\r\n const emitName = `update:${propName}`;\r\n // Component doesn't have a model prop setup (must be defined on the props)\r\n if (!(propName in vm.props)) {\r\n return;\r\n }\r\n watch(value, newValue => {\r\n if (isEqual(newValue, getCurrentModelValue(vm, propName))) {\r\n return;\r\n }\r\n vm.emit(emitName, newValue);\r\n });\r\n watch(() => getCurrentModelValue(vm, propName), propValue => {\r\n if (propValue === IS_ABSENT && value.value === undefined) {\r\n return;\r\n }\r\n const newValue = propValue === IS_ABSENT ? undefined : propValue;\r\n if (isEqual(newValue, applyModelModifiers(value.value, vm.props.modelModifiers))) {\r\n return;\r\n }\r\n handleChange(newValue);\r\n });\r\n}\r\nfunction getCurrentModelValue(vm, propName) {\r\n return vm.props[propName];\r\n}\n\nconst FieldImpl = defineComponent({\r\n name: 'Field',\r\n inheritAttrs: false,\r\n props: {\r\n as: {\r\n type: [String, Object],\r\n default: undefined,\r\n },\r\n name: {\r\n type: String,\r\n required: true,\r\n },\r\n rules: {\r\n type: [Object, String, Function],\r\n default: undefined,\r\n },\r\n validateOnMount: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n validateOnBlur: {\r\n type: Boolean,\r\n default: undefined,\r\n },\r\n validateOnChange: {\r\n type: Boolean,\r\n default: undefined,\r\n },\r\n validateOnInput: {\r\n type: Boolean,\r\n default: undefined,\r\n },\r\n validateOnModelUpdate: {\r\n type: Boolean,\r\n default: undefined,\r\n },\r\n bails: {\r\n type: Boolean,\r\n default: () => getConfig().bails,\r\n },\r\n label: {\r\n type: String,\r\n default: undefined,\r\n },\r\n uncheckedValue: {\r\n type: null,\r\n default: undefined,\r\n },\r\n modelValue: {\r\n type: null,\r\n default: IS_ABSENT,\r\n },\r\n modelModifiers: {\r\n type: null,\r\n default: () => ({}),\r\n },\r\n 'onUpdate:modelValue': {\r\n type: null,\r\n default: undefined,\r\n },\r\n standalone: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n keepValue: {\r\n type: Boolean,\r\n default: undefined,\r\n },\r\n },\r\n setup(props, ctx) {\r\n const rules = toRef(props, 'rules');\r\n const name = toRef(props, 'name');\r\n const label = toRef(props, 'label');\r\n const uncheckedValue = toRef(props, 'uncheckedValue');\r\n const keepValue = toRef(props, 'keepValue');\r\n const { errors, value, errorMessage, validate: validateField, handleChange, handleBlur, setTouched, resetField, handleReset, meta, checked, setErrors, } = useField(name, rules, {\r\n validateOnMount: props.validateOnMount,\r\n bails: props.bails,\r\n standalone: props.standalone,\r\n type: ctx.attrs.type,\r\n initialValue: resolveInitialValue(props, ctx),\r\n // Only for checkboxes and radio buttons\r\n checkedValue: ctx.attrs.value,\r\n uncheckedValue,\r\n label,\r\n validateOnValueUpdate: false,\r\n keepValueOnUnmount: keepValue,\r\n });\r\n // If there is a v-model applied on the component we need to emit the `update:modelValue` whenever the value binding changes\r\n const onChangeHandler = function handleChangeWithModel(e, shouldValidate = true) {\r\n handleChange(e, shouldValidate);\r\n ctx.emit('update:modelValue', value.value);\r\n };\r\n const handleInput = (e) => {\r\n if (!hasCheckedAttr(ctx.attrs.type)) {\r\n value.value = normalizeEventValue(e);\r\n }\r\n };\r\n const onInputHandler = function handleInputWithModel(e) {\r\n handleInput(e);\r\n ctx.emit('update:modelValue', value.value);\r\n };\r\n const fieldProps = computed(() => {\r\n const { validateOnInput, validateOnChange, validateOnBlur, validateOnModelUpdate } = resolveValidationTriggers(props);\r\n const baseOnBlur = [handleBlur, ctx.attrs.onBlur, validateOnBlur ? validateField : undefined].filter(Boolean);\r\n const baseOnInput = [(e) => onChangeHandler(e, validateOnInput), ctx.attrs.onInput].filter(Boolean);\r\n const baseOnChange = [(e) => onChangeHandler(e, validateOnChange), ctx.attrs.onChange].filter(Boolean);\r\n const attrs = {\r\n name: props.name,\r\n onBlur: baseOnBlur,\r\n onInput: baseOnInput,\r\n onChange: baseOnChange,\r\n };\r\n attrs['onUpdate:modelValue'] = e => onChangeHandler(e, validateOnModelUpdate);\r\n if (hasCheckedAttr(ctx.attrs.type) && checked) {\r\n attrs.checked = checked.value;\r\n }\r\n const tag = resolveTag(props, ctx);\r\n if (shouldHaveValueBinding(tag, ctx.attrs)) {\r\n attrs.value = value.value;\r\n }\r\n return attrs;\r\n });\r\n function slotProps() {\r\n return {\r\n field: fieldProps.value,\r\n value: value.value,\r\n meta,\r\n errors: errors.value,\r\n errorMessage: errorMessage.value,\r\n validate: validateField,\r\n resetField,\r\n handleChange: onChangeHandler,\r\n handleInput: onInputHandler,\r\n handleReset,\r\n handleBlur,\r\n setTouched,\r\n setErrors,\r\n };\r\n }\r\n ctx.expose({\r\n setErrors,\r\n setTouched,\r\n reset: resetField,\r\n validate: validateField,\r\n handleChange,\r\n });\r\n return () => {\r\n const tag = resolveDynamicComponent(resolveTag(props, ctx));\r\n const children = normalizeChildren(tag, ctx, slotProps);\r\n if (tag) {\r\n return h(tag, Object.assign(Object.assign({}, ctx.attrs), fieldProps.value), children);\r\n }\r\n return children;\r\n };\r\n },\r\n});\r\nfunction resolveTag(props, ctx) {\r\n let tag = props.as || '';\r\n if (!props.as && !ctx.slots.default) {\r\n tag = 'input';\r\n }\r\n return tag;\r\n}\r\nfunction resolveValidationTriggers(props) {\r\n var _a, _b, _c, _d;\r\n const { validateOnInput, validateOnChange, validateOnBlur, validateOnModelUpdate } = getConfig();\r\n return {\r\n validateOnInput: (_a = props.validateOnInput) !== null && _a !== void 0 ? _a : validateOnInput,\r\n validateOnChange: (_b = props.validateOnChange) !== null && _b !== void 0 ? _b : validateOnChange,\r\n validateOnBlur: (_c = props.validateOnBlur) !== null && _c !== void 0 ? _c : validateOnBlur,\r\n validateOnModelUpdate: (_d = props.validateOnModelUpdate) !== null && _d !== void 0 ? _d : validateOnModelUpdate,\r\n };\r\n}\r\nfunction resolveInitialValue(props, ctx) {\r\n // Gets the initial value either from `value` prop/attr or `v-model` binding (modelValue)\r\n // For checkboxes and radio buttons it will always be the model value not the `value` attribute\r\n if (!hasCheckedAttr(ctx.attrs.type)) {\r\n return isPropPresent(props, 'modelValue') ? props.modelValue : ctx.attrs.value;\r\n }\r\n return isPropPresent(props, 'modelValue') ? props.modelValue : undefined;\r\n}\r\nconst Field = FieldImpl;\n\nlet FORM_COUNTER = 0;\r\nfunction useForm(opts) {\r\n var _a;\r\n const formId = FORM_COUNTER++;\r\n const controlledModelPaths = new Set();\r\n // Prevents fields from double resetting their values, which causes checkboxes to toggle their initial value\r\n // TODO: This won't be needed if we centralize all the state inside the `form` for form inputs\r\n let RESET_LOCK = false;\r\n // A lookup containing fields or field groups\r\n const fieldsByPath = ref({});\r\n // If the form is currently submitting\r\n const isSubmitting = ref(false);\r\n // The number of times the user tried to submit the form\r\n const submitCount = ref(0);\r\n // field arrays managed by this form\r\n const fieldArrays = [];\r\n // a private ref for all form values\r\n const formValues = reactive(klona(unref(opts === null || opts === void 0 ? void 0 : opts.initialValues) || {}));\r\n // the source of errors for the form fields\r\n const { errorBag, setErrorBag, setFieldErrorBag } = useErrorBag(opts === null || opts === void 0 ? void 0 : opts.initialErrors);\r\n // Gets the first error of each field\r\n const errors = computed(() => {\r\n return keysOf(errorBag.value).reduce((acc, key) => {\r\n const bag = errorBag.value[key];\r\n if (bag && bag.length) {\r\n acc[key] = bag[0];\r\n }\r\n return acc;\r\n }, {});\r\n });\r\n function getFirstFieldAtPath(path) {\r\n const fieldOrGroup = fieldsByPath.value[path];\r\n return Array.isArray(fieldOrGroup) ? fieldOrGroup[0] : fieldOrGroup;\r\n }\r\n function fieldExists(path) {\r\n return !!fieldsByPath.value[path];\r\n }\r\n /**\r\n * Holds a computed reference to all fields names and labels\r\n */\r\n const fieldNames = computed(() => {\r\n return keysOf(fieldsByPath.value).reduce((names, path) => {\r\n const field = getFirstFieldAtPath(path);\r\n if (field) {\r\n names[path] = unref(field.label || field.name) || '';\r\n }\r\n return names;\r\n }, {});\r\n });\r\n const fieldBailsMap = computed(() => {\r\n return keysOf(fieldsByPath.value).reduce((map, path) => {\r\n var _a;\r\n const field = getFirstFieldAtPath(path);\r\n if (field) {\r\n map[path] = (_a = field.bails) !== null && _a !== void 0 ? _a : true;\r\n }\r\n return map;\r\n }, {});\r\n });\r\n // mutable non-reactive reference to initial errors\r\n // we need this to process initial errors then unset them\r\n const initialErrors = Object.assign({}, ((opts === null || opts === void 0 ? void 0 : opts.initialErrors) || {}));\r\n const keepValuesOnUnmount = (_a = opts === null || opts === void 0 ? void 0 : opts.keepValuesOnUnmount) !== null && _a !== void 0 ? _a : false;\r\n // initial form values\r\n const { initialValues, originalInitialValues, setInitialValues } = useFormInitialValues(fieldsByPath, formValues, opts === null || opts === void 0 ? void 0 : opts.initialValues);\r\n // form meta aggregations\r\n const meta = useFormMeta(fieldsByPath, formValues, originalInitialValues, errors);\r\n const controlledValues = computed(() => {\r\n return [...controlledModelPaths, ...keysOf(fieldsByPath.value)].reduce((acc, path) => {\r\n const value = getFromPath(formValues, path);\r\n setInPath(acc, path, value);\r\n return acc;\r\n }, {});\r\n });\r\n const schema = opts === null || opts === void 0 ? void 0 : opts.validationSchema;\r\n /**\r\n * Batches validation runs in 5ms batches\r\n * Must have two distinct batch queues to make sure they don't override each other settings #3783\r\n */\r\n const debouncedSilentValidation = debounceAsync(_validateSchema, 5);\r\n const debouncedValidation = debounceAsync(_validateSchema, 5);\r\n const validateSchema = withLatest(async (mode) => {\r\n return (await mode) === 'silent' ? debouncedSilentValidation() : debouncedValidation();\r\n }, (formResult, [mode]) => {\r\n // fields by id lookup\r\n const fieldsById = formCtx.fieldsByPath.value || {};\r\n // errors fields names, we need it to also check if custom errors are updated\r\n const currentErrorsPaths = keysOf(formCtx.errorBag.value);\r\n // collect all the keys from the schema and all fields\r\n // this ensures we have a complete keymap of all the fields\r\n const paths = [\r\n ...new Set([...keysOf(formResult.results), ...keysOf(fieldsById), ...currentErrorsPaths]),\r\n ];\r\n // aggregates the paths into a single result object while applying the results on the fields\r\n return paths.reduce((validation, path) => {\r\n const field = fieldsById[path];\r\n const messages = (formResult.results[path] || { errors: [] }).errors;\r\n const fieldResult = {\r\n errors: messages,\r\n valid: !messages.length,\r\n };\r\n validation.results[path] = fieldResult;\r\n if (!fieldResult.valid) {\r\n validation.errors[path] = fieldResult.errors[0];\r\n }\r\n // field not rendered\r\n if (!field) {\r\n setFieldError(path, messages);\r\n return validation;\r\n }\r\n // always update the valid flag regardless of the mode\r\n applyFieldMutation(field, f => (f.meta.valid = fieldResult.valid));\r\n if (mode === 'silent') {\r\n return validation;\r\n }\r\n const wasValidated = Array.isArray(field) ? field.some(f => f.meta.validated) : field.meta.validated;\r\n if (mode === 'validated-only' && !wasValidated) {\r\n return validation;\r\n }\r\n applyFieldMutation(field, f => f.setState({ errors: fieldResult.errors }));\r\n return validation;\r\n }, { valid: formResult.valid, results: {}, errors: {} });\r\n });\r\n function makeSubmissionFactory(onlyControlled) {\r\n return function submitHandlerFactory(fn, onValidationError) {\r\n return function submissionHandler(e) {\r\n if (e instanceof Event) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n // Touch all fields\r\n setTouched(keysOf(fieldsByPath.value).reduce((acc, field) => {\r\n acc[field] = true;\r\n return acc;\r\n }, {}));\r\n isSubmitting.value = true;\r\n submitCount.value++;\r\n return validate()\r\n .then(result => {\r\n const values = klona(formValues);\r\n if (result.valid && typeof fn === 'function') {\r\n const controlled = klona(controlledValues.value);\r\n return fn(onlyControlled ? controlled : values, {\r\n evt: e,\r\n controlledValues: controlled,\r\n setErrors,\r\n setFieldError,\r\n setTouched,\r\n setFieldTouched,\r\n setValues,\r\n setFieldValue,\r\n resetForm,\r\n });\r\n }\r\n if (!result.valid && typeof onValidationError === 'function') {\r\n onValidationError({\r\n values,\r\n evt: e,\r\n errors: result.errors,\r\n results: result.results,\r\n });\r\n }\r\n })\r\n .then(returnVal => {\r\n isSubmitting.value = false;\r\n return returnVal;\r\n }, err => {\r\n isSubmitting.value = false;\r\n // re-throw the err so it doesn't go silent\r\n throw err;\r\n });\r\n };\r\n };\r\n }\r\n const handleSubmitImpl = makeSubmissionFactory(false);\r\n const handleSubmit = handleSubmitImpl;\r\n handleSubmit.withControlled = makeSubmissionFactory(true);\r\n const formCtx = {\r\n formId,\r\n fieldsByPath,\r\n values: formValues,\r\n controlledValues,\r\n errorBag,\r\n errors,\r\n schema,\r\n submitCount,\r\n meta,\r\n isSubmitting,\r\n fieldArrays,\r\n keepValuesOnUnmount,\r\n validateSchema: unref(schema) ? validateSchema : undefined,\r\n validate,\r\n register: registerField,\r\n unregister: unregisterField,\r\n setFieldErrorBag,\r\n validateField,\r\n setFieldValue,\r\n setValues,\r\n setErrors,\r\n setFieldError,\r\n setFieldTouched,\r\n setTouched,\r\n resetForm,\r\n handleSubmit,\r\n stageInitialValue,\r\n unsetInitialValue,\r\n setFieldInitialValue,\r\n useFieldModel,\r\n };\r\n function isFieldGroup(fieldOrGroup) {\r\n return Array.isArray(fieldOrGroup);\r\n }\r\n function applyFieldMutation(fieldOrGroup, mutation) {\r\n if (Array.isArray(fieldOrGroup)) {\r\n return fieldOrGroup.forEach(mutation);\r\n }\r\n return mutation(fieldOrGroup);\r\n }\r\n function mutateAllFields(mutation) {\r\n Object.values(fieldsByPath.value).forEach(field => {\r\n if (!field) {\r\n return;\r\n }\r\n // avoid resetting the field values, because they should've been reset already.\r\n applyFieldMutation(field, mutation);\r\n });\r\n }\r\n /**\r\n * Manually sets an error message on a specific field\r\n */\r\n function setFieldError(field, message) {\r\n setFieldErrorBag(field, message);\r\n }\r\n /**\r\n * Sets errors for the fields specified in the object\r\n */\r\n function setErrors(fields) {\r\n setErrorBag(fields);\r\n }\r\n /**\r\n * Sets a single field value\r\n */\r\n function setFieldValue(field, value, { force } = { force: false }) {\r\n var _a;\r\n const fieldInstance = fieldsByPath.value[field];\r\n const clonedValue = klona(value);\r\n // field wasn't found, create a virtual field as a placeholder\r\n if (!fieldInstance) {\r\n setInPath(formValues, field, clonedValue);\r\n return;\r\n }\r\n if (isFieldGroup(fieldInstance) && ((_a = fieldInstance[0]) === null || _a === void 0 ? void 0 : _a.type) === 'checkbox' && !Array.isArray(value)) {\r\n // Multiple checkboxes, and only one of them got updated\r\n const newValue = klona(resolveNextCheckboxValue(getFromPath(formValues, field) || [], value, undefined));\r\n setInPath(formValues, field, newValue);\r\n return;\r\n }\r\n let newValue = clonedValue;\r\n // Single Checkbox: toggles the field value unless the field is being reset then force it\r\n if (!isFieldGroup(fieldInstance) && fieldInstance.type === 'checkbox' && !force && !RESET_LOCK) {\r\n newValue = klona(resolveNextCheckboxValue(getFromPath(formValues, field), value, unref(fieldInstance.uncheckedValue)));\r\n }\r\n setInPath(formValues, field, newValue);\r\n }\r\n /**\r\n * Sets multiple fields values\r\n */\r\n function setValues(fields) {\r\n // clean up old values\r\n keysOf(formValues).forEach(key => {\r\n delete formValues[key];\r\n });\r\n // set up new values\r\n keysOf(fields).forEach(path => {\r\n setFieldValue(path, fields[path]);\r\n });\r\n // regenerate the arrays when the form values change\r\n fieldArrays.forEach(f => f && f.reset());\r\n }\r\n function createModel(path) {\r\n const { value } = _useFieldValue(path, undefined, formCtx);\r\n watch(value, () => {\r\n if (!fieldExists(unref(path))) {\r\n validate({ mode: 'validated-only' });\r\n }\r\n }, {\r\n deep: true,\r\n });\r\n controlledModelPaths.add(unref(path));\r\n return value;\r\n }\r\n function useFieldModel(path) {\r\n if (!Array.isArray(path)) {\r\n return createModel(path);\r\n }\r\n return path.map(createModel);\r\n }\r\n /**\r\n * Sets the touched meta state on a field\r\n */\r\n function setFieldTouched(field, isTouched) {\r\n const fieldInstance = fieldsByPath.value[field];\r\n if (fieldInstance) {\r\n applyFieldMutation(fieldInstance, f => f.setTouched(isTouched));\r\n }\r\n }\r\n /**\r\n * Sets the touched meta state on multiple fields\r\n */\r\n function setTouched(fields) {\r\n keysOf(fields).forEach(field => {\r\n setFieldTouched(field, !!fields[field]);\r\n });\r\n }\r\n /**\r\n * Resets all fields\r\n */\r\n function resetForm(state) {\r\n RESET_LOCK = true;\r\n // Reset all field states first\r\n mutateAllFields(f => f.resetField());\r\n // reset values\r\n const newValues = (state === null || state === void 0 ? void 0 : state.values) ? state.values : originalInitialValues.value;\r\n setInitialValues(newValues);\r\n setValues(newValues);\r\n if (state === null || state === void 0 ? void 0 : state.touched) {\r\n setTouched(state.touched);\r\n }\r\n setErrors((state === null || state === void 0 ? void 0 : state.errors) || {});\r\n submitCount.value = (state === null || state === void 0 ? void 0 : state.submitCount) || 0;\r\n nextTick(() => {\r\n RESET_LOCK = false;\r\n });\r\n }\r\n function insertFieldAtPath(field, path) {\r\n const rawField = markRaw(field);\r\n const fieldPath = path;\r\n // first field at that path\r\n if (!fieldsByPath.value[fieldPath]) {\r\n fieldsByPath.value[fieldPath] = rawField;\r\n return;\r\n }\r\n const fieldAtPath = fieldsByPath.value[fieldPath];\r\n if (fieldAtPath && !Array.isArray(fieldAtPath)) {\r\n fieldsByPath.value[fieldPath] = [fieldAtPath];\r\n }\r\n // add the new array to that path\r\n fieldsByPath.value[fieldPath] = [...fieldsByPath.value[fieldPath], rawField];\r\n }\r\n function removeFieldFromPath(field, path) {\r\n const fieldPath = path;\r\n const fieldAtPath = fieldsByPath.value[fieldPath];\r\n if (!fieldAtPath) {\r\n return;\r\n }\r\n // same field at path\r\n if (!isFieldGroup(fieldAtPath) && field.id === fieldAtPath.id) {\r\n delete fieldsByPath.value[fieldPath];\r\n return;\r\n }\r\n if (isFieldGroup(fieldAtPath)) {\r\n const idx = fieldAtPath.findIndex(f => f.id === field.id);\r\n if (idx === -1) {\r\n return;\r\n }\r\n fieldAtPath.splice(idx, 1);\r\n if (!fieldAtPath.length) {\r\n delete fieldsByPath.value[fieldPath];\r\n }\r\n }\r\n }\r\n function registerField(field) {\r\n const fieldPath = unref(field.name);\r\n insertFieldAtPath(field, fieldPath);\r\n if (isRef(field.name)) {\r\n // ensures when a field's name was already taken that it preserves its same value\r\n // necessary for fields generated by loops\r\n watch(field.name, async (newPath, oldPath) => {\r\n // cache the value\r\n await nextTick();\r\n removeFieldFromPath(field, oldPath);\r\n insertFieldAtPath(field, newPath);\r\n // re-validate if either path had errors before\r\n if (errors.value[oldPath] || errors.value[newPath]) {\r\n // clear up both paths errors\r\n setFieldError(oldPath, undefined);\r\n validateField(newPath);\r\n }\r\n // clean up the old path if no other field is sharing that name\r\n // #3325\r\n await nextTick();\r\n if (!fieldExists(oldPath)) {\r\n unsetPath(formValues, oldPath);\r\n }\r\n });\r\n }\r\n // if field already had errors (initial errors) that's not user-set, validate it again to ensure state is correct\r\n // the difference being that `initialErrors` will contain the error message while other errors (pre-validated schema) won't have them as initial errors\r\n // #3342\r\n const initialErrorMessage = unref(field.errorMessage);\r\n if (initialErrorMessage && (initialErrors === null || initialErrors === void 0 ? void 0 : initialErrors[fieldPath]) !== initialErrorMessage) {\r\n validateField(fieldPath);\r\n }\r\n // marks the initial error as \"consumed\" so it won't be matched later with same non-initial error\r\n delete initialErrors[fieldPath];\r\n }\r\n function unregisterField(field) {\r\n const fieldName = unref(field.name);\r\n const fieldInstance = fieldsByPath.value[fieldName];\r\n const isGroup = !!fieldInstance && isFieldGroup(fieldInstance);\r\n removeFieldFromPath(field, fieldName);\r\n // clears a field error on unmounted\r\n // we wait till next tick to make sure if the field is completely removed and doesn't have any siblings like checkboxes\r\n nextTick(() => {\r\n var _a;\r\n const shouldKeepValue = (_a = unref(field.keepValueOnUnmount)) !== null && _a !== void 0 ? _a : unref(keepValuesOnUnmount);\r\n const currentGroupValue = getFromPath(formValues, fieldName);\r\n // The boolean here is we check if the field still belongs to the same control group with that name\r\n // if another group claimed the name, we should avoid handling it since it is no longer the same group\r\n // this happens with `v-for` over some checkboxes and field arrays.\r\n // also if the group no longer exist we can assume this group was the last one that controlled it\r\n const isSameGroup = isGroup && (fieldInstance === fieldsByPath.value[fieldName] || !fieldsByPath.value[fieldName]);\r\n // group field that still has a dangling value, the field may exist or not after it was removed.\r\n // This used to be handled in the useField composable but the form has better context on when it should/not happen.\r\n // if it does belong to it that means the group still exists\r\n // #3844\r\n if (isSameGroup && !shouldKeepValue) {\r\n if (Array.isArray(currentGroupValue)) {\r\n const valueIdx = currentGroupValue.findIndex(i => isEqual(i, unref(field.checkedValue)));\r\n if (valueIdx > -1) {\r\n const newVal = [...currentGroupValue];\r\n newVal.splice(valueIdx, 1);\r\n setFieldValue(fieldName, newVal, { force: true });\r\n }\r\n }\r\n else if (currentGroupValue === unref(field.checkedValue)) {\r\n // Remove field if it is a group but does not have an array value, like for radio inputs #3963\r\n unsetPath(formValues, fieldName);\r\n }\r\n }\r\n // Field was removed entirely, we should unset its path\r\n // #3384\r\n if (!fieldExists(fieldName)) {\r\n setFieldError(fieldName, undefined);\r\n // Checks if the field was configured to be unset during unmount or not\r\n // Checks both the form-level config and field-level one\r\n // Field has the priority if it is set, otherwise it goes to the form settings\r\n if (shouldKeepValue) {\r\n return;\r\n }\r\n // Don't apply emptyContainer check unless the current group value is an array\r\n if (isGroup && Array.isArray(currentGroupValue) && !isEmptyContainer(currentGroupValue)) {\r\n return;\r\n }\r\n unsetPath(formValues, fieldName);\r\n }\r\n });\r\n }\r\n async function validate(opts) {\r\n const mode = (opts === null || opts === void 0 ? void 0 : opts.mode) || 'force';\r\n if (mode === 'force') {\r\n mutateAllFields(f => (f.meta.validated = true));\r\n }\r\n if (formCtx.validateSchema) {\r\n return formCtx.validateSchema(mode);\r\n }\r\n // No schema, each field is responsible to validate itself\r\n const validations = await Promise.all(Object.values(fieldsByPath.value).map(field => {\r\n const fieldInstance = Array.isArray(field) ? field[0] : field;\r\n if (!fieldInstance) {\r\n return Promise.resolve({ key: '', valid: true, errors: [] });\r\n }\r\n return fieldInstance.validate(opts).then((result) => {\r\n return {\r\n key: unref(fieldInstance.name),\r\n valid: result.valid,\r\n errors: result.errors,\r\n };\r\n });\r\n }));\r\n const results = {};\r\n const errors = {};\r\n for (const validation of validations) {\r\n results[validation.key] = {\r\n valid: validation.valid,\r\n errors: validation.errors,\r\n };\r\n if (validation.errors.length) {\r\n errors[validation.key] = validation.errors[0];\r\n }\r\n }\r\n return {\r\n valid: validations.every(r => r.valid),\r\n results,\r\n errors,\r\n };\r\n }\r\n async function validateField(field) {\r\n const fieldInstance = fieldsByPath.value[field];\r\n if (!fieldInstance) {\r\n warn$1(`field with name ${field} was not found`);\r\n return Promise.resolve({ errors: [], valid: true });\r\n }\r\n if (Array.isArray(fieldInstance)) {\r\n return fieldInstance.map(f => f.validate())[0];\r\n }\r\n return fieldInstance.validate();\r\n }\r\n function unsetInitialValue(path) {\r\n unsetPath(initialValues.value, path);\r\n }\r\n /**\r\n * Sneaky function to set initial field values\r\n */\r\n function stageInitialValue(path, value, updateOriginal = false) {\r\n setInPath(formValues, path, value);\r\n setFieldInitialValue(path, value);\r\n if (updateOriginal && !(opts === null || opts === void 0 ? void 0 : opts.initialValues)) {\r\n setInPath(originalInitialValues.value, path, klona(value));\r\n }\r\n }\r\n function setFieldInitialValue(path, value) {\r\n setInPath(initialValues.value, path, klona(value));\r\n }\r\n async function _validateSchema() {\r\n const schemaValue = unref(schema);\r\n if (!schemaValue) {\r\n return { valid: true, results: {}, errors: {} };\r\n }\r\n const formResult = isYupValidator(schemaValue)\r\n ? await validateYupSchema(schemaValue, formValues)\r\n : await validateObjectSchema(schemaValue, formValues, {\r\n names: fieldNames.value,\r\n bailsMap: fieldBailsMap.value,\r\n });\r\n return formResult;\r\n }\r\n const submitForm = handleSubmit((_, { evt }) => {\r\n if (isFormSubmitEvent(evt)) {\r\n evt.target.submit();\r\n }\r\n });\r\n // Trigger initial validation\r\n onMounted(() => {\r\n if (opts === null || opts === void 0 ? void 0 : opts.initialErrors) {\r\n setErrors(opts.initialErrors);\r\n }\r\n if (opts === null || opts === void 0 ? void 0 : opts.initialTouched) {\r\n setTouched(opts.initialTouched);\r\n }\r\n // if validate on mount was enabled\r\n if (opts === null || opts === void 0 ? void 0 : opts.validateOnMount) {\r\n validate();\r\n return;\r\n }\r\n // otherwise run initial silent validation through schema if available\r\n // the useField should skip their own silent validation if a yup schema is present\r\n if (formCtx.validateSchema) {\r\n formCtx.validateSchema('silent');\r\n }\r\n });\r\n if (isRef(schema)) {\r\n watch(schema, () => {\r\n var _a;\r\n (_a = formCtx.validateSchema) === null || _a === void 0 ? void 0 : _a.call(formCtx, 'validated-only');\r\n });\r\n }\r\n // Provide injections\r\n provide(FormContextKey, formCtx);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n registerFormWithDevTools(formCtx);\r\n watch(() => (Object.assign(Object.assign({ errors: errorBag.value }, meta.value), { values: formValues, isSubmitting: isSubmitting.value, submitCount: submitCount.value })), refreshInspector, {\r\n deep: true,\r\n });\r\n }\r\n return Object.assign(Object.assign({}, formCtx), { handleReset: () => resetForm(), submitForm });\r\n}\r\n/**\r\n * Manages form meta aggregation\r\n */\r\nfunction useFormMeta(fieldsByPath, currentValues, initialValues, errors) {\r\n const MERGE_STRATEGIES = {\r\n touched: 'some',\r\n pending: 'some',\r\n valid: 'every',\r\n };\r\n const isDirty = computed(() => {\r\n return !isEqual(currentValues, unref(initialValues));\r\n });\r\n function calculateFlags() {\r\n const fields = Object.values(fieldsByPath.value).flat(1).filter(Boolean);\r\n return keysOf(MERGE_STRATEGIES).reduce((acc, flag) => {\r\n const mergeMethod = MERGE_STRATEGIES[flag];\r\n acc[flag] = fields[mergeMethod](field => field.meta[flag]);\r\n return acc;\r\n }, {});\r\n }\r\n const flags = reactive(calculateFlags());\r\n watchEffect(() => {\r\n const value = calculateFlags();\r\n flags.touched = value.touched;\r\n flags.valid = value.valid;\r\n flags.pending = value.pending;\r\n });\r\n return computed(() => {\r\n return Object.assign(Object.assign({ initialValues: unref(initialValues) }, flags), { valid: flags.valid && !keysOf(errors.value).length, dirty: isDirty.value });\r\n });\r\n}\r\n/**\r\n * Manages the initial values prop\r\n */\r\nfunction useFormInitialValues(fields, formValues, providedValues) {\r\n // these are the mutable initial values as the fields are mounted/unmounted\r\n const initialValues = ref(klona(unref(providedValues)) || {});\r\n // these are the original initial value as provided by the user initially, they don't keep track of conditional fields\r\n // this is important because some conditional fields will overwrite the initial values for other fields who had the same name\r\n // like array fields, any push/insert operation will overwrite the initial values because they \"create new fields\"\r\n // so these are the values that the reset function should use\r\n // these only change when the user explicitly chanegs the initial values or when the user resets them with new values.\r\n const originalInitialValues = ref(klona(unref(providedValues)) || {});\r\n function setInitialValues(values, updateFields = false) {\r\n initialValues.value = klona(values);\r\n originalInitialValues.value = klona(values);\r\n if (!updateFields) {\r\n return;\r\n }\r\n // update the pristine non-touched fields\r\n // those are excluded because it's unlikely you want to change the form values using initial values\r\n // we mostly watch them for API population or newly inserted fields\r\n // if the user API is taking too much time before user interaction they should consider disabling or hiding their inputs until the values are ready\r\n keysOf(fields.value).forEach(fieldPath => {\r\n const field = fields.value[fieldPath];\r\n const wasTouched = Array.isArray(field) ? field.some(f => f.meta.touched) : field === null || field === void 0 ? void 0 : field.meta.touched;\r\n if (!field || wasTouched) {\r\n return;\r\n }\r\n const newValue = getFromPath(initialValues.value, fieldPath);\r\n setInPath(formValues, fieldPath, klona(newValue));\r\n });\r\n }\r\n if (isRef(providedValues)) {\r\n watch(providedValues, value => {\r\n setInitialValues(value, true);\r\n }, {\r\n deep: true,\r\n });\r\n }\r\n return {\r\n initialValues,\r\n originalInitialValues,\r\n setInitialValues,\r\n };\r\n}\r\nfunction useErrorBag(initialErrors) {\r\n const errorBag = ref({});\r\n function normalizeErrorItem(message) {\r\n return Array.isArray(message) ? message : message ? [message] : [];\r\n }\r\n /**\r\n * Manually sets an error message on a specific field\r\n */\r\n function setFieldErrorBag(field, message) {\r\n if (!message) {\r\n delete errorBag.value[field];\r\n return;\r\n }\r\n errorBag.value[field] = normalizeErrorItem(message);\r\n }\r\n /**\r\n * Sets errors for the fields specified in the object\r\n */\r\n function setErrorBag(fields) {\r\n errorBag.value = keysOf(fields).reduce((acc, key) => {\r\n const message = fields[key];\r\n if (message) {\r\n acc[key] = normalizeErrorItem(message);\r\n }\r\n return acc;\r\n }, {});\r\n }\r\n if (initialErrors) {\r\n setErrorBag(initialErrors);\r\n }\r\n return {\r\n errorBag,\r\n setErrorBag,\r\n setFieldErrorBag,\r\n };\r\n}\n\nconst FormImpl = defineComponent({\r\n name: 'Form',\r\n inheritAttrs: false,\r\n props: {\r\n as: {\r\n type: String,\r\n default: 'form',\r\n },\r\n validationSchema: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n initialValues: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n initialErrors: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n initialTouched: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n validateOnMount: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n onSubmit: {\r\n type: Function,\r\n default: undefined,\r\n },\r\n onInvalidSubmit: {\r\n type: Function,\r\n default: undefined,\r\n },\r\n keepValues: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n setup(props, ctx) {\r\n const initialValues = toRef(props, 'initialValues');\r\n const validationSchema = toRef(props, 'validationSchema');\r\n const keepValues = toRef(props, 'keepValues');\r\n const { errors, values, meta, isSubmitting, submitCount, controlledValues, validate, validateField, handleReset, resetForm, handleSubmit, setErrors, setFieldError, setFieldValue, setValues, setFieldTouched, setTouched, } = useForm({\r\n validationSchema: validationSchema.value ? validationSchema : undefined,\r\n initialValues,\r\n initialErrors: props.initialErrors,\r\n initialTouched: props.initialTouched,\r\n validateOnMount: props.validateOnMount,\r\n keepValuesOnUnmount: keepValues,\r\n });\r\n const submitForm = handleSubmit((_, { evt }) => {\r\n if (isFormSubmitEvent(evt)) {\r\n evt.target.submit();\r\n }\r\n }, props.onInvalidSubmit);\r\n const onSubmit = props.onSubmit ? handleSubmit(props.onSubmit, props.onInvalidSubmit) : submitForm;\r\n function handleFormReset(e) {\r\n if (isEvent(e)) {\r\n // Prevent default form reset behavior\r\n e.preventDefault();\r\n }\r\n handleReset();\r\n if (typeof ctx.attrs.onReset === 'function') {\r\n ctx.attrs.onReset();\r\n }\r\n }\r\n function handleScopedSlotSubmit(evt, onSubmit) {\r\n const onSuccess = typeof evt === 'function' && !onSubmit ? evt : onSubmit;\r\n return handleSubmit(onSuccess, props.onInvalidSubmit)(evt);\r\n }\r\n function slotProps() {\r\n return {\r\n meta: meta.value,\r\n errors: errors.value,\r\n values: values,\r\n isSubmitting: isSubmitting.value,\r\n submitCount: submitCount.value,\r\n controlledValues: controlledValues.value,\r\n validate,\r\n validateField,\r\n handleSubmit: handleScopedSlotSubmit,\r\n handleReset,\r\n submitForm,\r\n setErrors,\r\n setFieldError,\r\n setFieldValue,\r\n setValues,\r\n setFieldTouched,\r\n setTouched,\r\n resetForm,\r\n };\r\n }\r\n // expose these functions and methods as part of public API\r\n ctx.expose({\r\n setFieldError,\r\n setErrors,\r\n setFieldValue,\r\n setValues,\r\n setFieldTouched,\r\n setTouched,\r\n resetForm,\r\n validate,\r\n validateField,\r\n });\r\n return function renderForm() {\r\n // avoid resolving the form component as itself\r\n const tag = props.as === 'form' ? props.as : resolveDynamicComponent(props.as);\r\n const children = normalizeChildren(tag, ctx, slotProps);\r\n if (!props.as) {\r\n return children;\r\n }\r\n // Attributes to add on a native `form` tag\r\n const formAttrs = props.as === 'form'\r\n ? {\r\n // Disables native validation as vee-validate will handle it.\r\n novalidate: true,\r\n }\r\n : {};\r\n return h(tag, Object.assign(Object.assign(Object.assign({}, formAttrs), ctx.attrs), { onSubmit, onReset: handleFormReset }), children);\r\n };\r\n },\r\n});\r\nconst Form = FormImpl;\n\nfunction useFieldArray(arrayPath) {\r\n const form = injectWithSelf(FormContextKey, undefined);\r\n const fields = ref([]);\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n const noOp = () => { };\r\n const noOpApi = {\r\n fields,\r\n remove: noOp,\r\n push: noOp,\r\n swap: noOp,\r\n insert: noOp,\r\n update: noOp,\r\n replace: noOp,\r\n prepend: noOp,\r\n move: noOp,\r\n };\r\n if (!form) {\r\n warn('FieldArray requires being a child of `<Form/>` or `useForm` being called before it. Array fields may not work correctly');\r\n return noOpApi;\r\n }\r\n if (!unref(arrayPath)) {\r\n warn('FieldArray requires a field path to be provided, did you forget to pass the `name` prop?');\r\n return noOpApi;\r\n }\r\n const alreadyExists = form.fieldArrays.find(a => unref(a.path) === unref(arrayPath));\r\n if (alreadyExists) {\r\n return alreadyExists;\r\n }\r\n let entryCounter = 0;\r\n function initFields() {\r\n const currentValues = getFromPath(form === null || form === void 0 ? void 0 : form.values, unref(arrayPath), []) || [];\r\n fields.value = currentValues.map(createEntry);\r\n updateEntryFlags();\r\n }\r\n initFields();\r\n function updateEntryFlags() {\r\n const fieldsLength = fields.value.length;\r\n for (let i = 0; i < fieldsLength; i++) {\r\n const entry = fields.value[i];\r\n entry.isFirst = i === 0;\r\n entry.isLast = i === fieldsLength - 1;\r\n }\r\n }\r\n function createEntry(value) {\r\n const key = entryCounter++;\r\n const entry = {\r\n key,\r\n value: computedDeep({\r\n get() {\r\n const currentValues = getFromPath(form === null || form === void 0 ? void 0 : form.values, unref(arrayPath), []) || [];\r\n const idx = fields.value.findIndex(e => e.key === key);\r\n return idx === -1 ? value : currentValues[idx];\r\n },\r\n set(value) {\r\n const idx = fields.value.findIndex(e => e.key === key);\r\n if (idx === -1) {\r\n warn(`Attempting to update a non-existent array item`);\r\n return;\r\n }\r\n update(idx, value);\r\n },\r\n }),\r\n isFirst: false,\r\n isLast: false,\r\n };\r\n return entry;\r\n }\r\n function remove(idx) {\r\n const pathName = unref(arrayPath);\r\n const pathValue = getFromPath(form === null || form === void 0 ? void 0 : form.values, pathName);\r\n if (!pathValue || !Array.isArray(pathValue)) {\r\n return;\r\n }\r\n const newValue = [...pathValue];\r\n newValue.splice(idx, 1);\r\n form === null || form === void 0 ? void 0 : form.unsetInitialValue(pathName + `[${idx}]`);\r\n form === null || form === void 0 ? void 0 : form.setFieldValue(pathName, newValue);\r\n fields.value.splice(idx, 1);\r\n updateEntryFlags();\r\n }\r\n function push(value) {\r\n const pathName = unref(arrayPath);\r\n const pathValue = getFromPath(form === null || form === void 0 ? void 0 : form.values, pathName);\r\n const normalizedPathValue = isNullOrUndefined(pathValue) ? [] : pathValue;\r\n if (!Array.isArray(normalizedPathValue)) {\r\n return;\r\n }\r\n const newValue = [...normalizedPathValue];\r\n newValue.push(value);\r\n form === null || form === void 0 ? void 0 : form.stageInitialValue(pathName + `[${newValue.length - 1}]`, value);\r\n form === null || form === void 0 ? void 0 : form.setFieldValue(pathName, newValue);\r\n fields.value.push(createEntry(value));\r\n updateEntryFlags();\r\n }\r\n function swap(indexA, indexB) {\r\n const pathName = unref(arrayPath);\r\n const pathValue = getFromPath(form === null || form === void 0 ? void 0 : form.values, pathName);\r\n if (!Array.isArray(pathValue) || !(indexA in pathValue) || !(indexB in pathValue)) {\r\n return;\r\n }\r\n const newValue = [...pathValue];\r\n const newFields = [...fields.value];\r\n // the old switcheroo\r\n const temp = newValue[indexA];\r\n newValue[indexA] = newValue[indexB];\r\n newValue[indexB] = temp;\r\n const tempEntry = newFields[indexA];\r\n newFields[indexA] = newFields[indexB];\r\n newFields[indexB] = tempEntry;\r\n form === null || form === void 0 ? void 0 : form.setFieldValue(pathName, newValue);\r\n fields.value = newFields;\r\n updateEntryFlags();\r\n }\r\n function insert(idx, value) {\r\n const pathName = unref(arrayPath);\r\n const pathValue = getFromPath(form === null || form === void 0 ? void 0 : form.values, pathName);\r\n if (!Array.isArray(pathValue) || pathValue.length < idx) {\r\n return;\r\n }\r\n const newValue = [...pathValue];\r\n const newFields = [...fields.value];\r\n newValue.splice(idx, 0, value);\r\n newFields.splice(idx, 0, createEntry(value));\r\n form === null || form === void 0 ? void 0 : form.setFieldValue(pathName, newValue);\r\n fields.value = newFields;\r\n updateEntryFlags();\r\n }\r\n function replace(arr) {\r\n const pathName = unref(arrayPath);\r\n form === null || form === void 0 ? void 0 : form.setFieldValue(pathName, arr);\r\n initFields();\r\n }\r\n function update(idx, value) {\r\n const pathName = unref(arrayPath);\r\n const pathValue = getFromPath(form === null || form === void 0 ? void 0 : form.values, pathName);\r\n if (!Array.isArray(pathValue) || pathValue.length - 1 < idx) {\r\n return;\r\n }\r\n form === null || form === void 0 ? void 0 : form.setFieldValue(`${pathName}[${idx}]`, value);\r\n form === null || form === void 0 ? void 0 : form.validate({ mode: 'validated-only' });\r\n }\r\n function prepend(value) {\r\n const pathName = unref(arrayPath);\r\n const pathValue = getFromPath(form === null || form === void 0 ? void 0 : form.values, pathName);\r\n const normalizedPathValue = isNullOrUndefined(pathValue) ? [] : pathValue;\r\n if (!Array.isArray(normalizedPathValue)) {\r\n return;\r\n }\r\n const newValue = [value, ...normalizedPathValue];\r\n form === null || form === void 0 ? void 0 : form.stageInitialValue(pathName + `[${newValue.length - 1}]`, value);\r\n form === null || form === void 0 ? void 0 : form.setFieldValue(pathName, newValue);\r\n fields.value.unshift(createEntry(value));\r\n updateEntryFlags();\r\n }\r\n function move(oldIdx, newIdx) {\r\n const pathName = unref(arrayPath);\r\n const pathValue = getFromPath(form === null || form === void 0 ? void 0 : form.values, pathName);\r\n const newValue = isNullOrUndefined(pathValue) ? [] : [...pathValue];\r\n if (!Array.isArray(pathValue) || !(oldIdx in pathValue) || !(newIdx in pathValue)) {\r\n return;\r\n }\r\n const newFields = [...fields.value];\r\n const movedItem = newFields[oldIdx];\r\n newFields.splice(oldIdx, 1);\r\n newFields.splice(newIdx, 0, movedItem);\r\n const movedValue = newValue[oldIdx];\r\n newValue.splice(oldIdx, 1);\r\n newValue.splice(newIdx, 0, movedValue);\r\n form === null || form === void 0 ? void 0 : form.setFieldValue(pathName, newValue);\r\n fields.value = newFields;\r\n updateEntryFlags();\r\n }\r\n const fieldArrayCtx = {\r\n fields,\r\n remove,\r\n push,\r\n swap,\r\n insert,\r\n update,\r\n replace,\r\n prepend,\r\n move,\r\n };\r\n form.fieldArrays.push(Object.assign({ path: arrayPath, reset: initFields }, fieldArrayCtx));\r\n onBeforeUnmount(() => {\r\n const idx = form.fieldArrays.findIndex(i => unref(i.path) === unref(arrayPath));\r\n if (idx >= 0) {\r\n form.fieldArrays.splice(idx, 1);\r\n }\r\n });\r\n return fieldArrayCtx;\r\n}\n\nconst FieldArrayImpl = defineComponent({\r\n name: 'FieldArray',\r\n inheritAttrs: false,\r\n props: {\r\n name: {\r\n type: String,\r\n required: true,\r\n },\r\n },\r\n setup(props, ctx) {\r\n const { push, remove, swap, insert, replace, update, prepend, move, fields } = useFieldArray(toRef(props, 'name'));\r\n function slotProps() {\r\n return {\r\n fields: fields.value,\r\n push,\r\n remove,\r\n swap,\r\n insert,\r\n update,\r\n replace,\r\n prepend,\r\n move,\r\n };\r\n }\r\n ctx.expose({\r\n push,\r\n remove,\r\n swap,\r\n insert,\r\n update,\r\n replace,\r\n prepend,\r\n move,\r\n });\r\n return () => {\r\n const children = normalizeChildren(undefined, ctx, slotProps);\r\n return children;\r\n };\r\n },\r\n});\r\nconst FieldArray = FieldArrayImpl;\n\nconst ErrorMessageImpl = defineComponent({\r\n name: 'ErrorMessage',\r\n props: {\r\n as: {\r\n type: String,\r\n default: undefined,\r\n },\r\n name: {\r\n type: String,\r\n required: true,\r\n },\r\n },\r\n setup(props, ctx) {\r\n const form = inject(FormContextKey, undefined);\r\n const message = computed(() => {\r\n return form === null || form === void 0 ? void 0 : form.errors.value[props.name];\r\n });\r\n function slotProps() {\r\n return {\r\n message: message.value,\r\n };\r\n }\r\n return () => {\r\n // Renders nothing if there are no messages\r\n if (!message.value) {\r\n return undefined;\r\n }\r\n const tag = (props.as ? resolveDynamicComponent(props.as) : props.as);\r\n const children = normalizeChildren(tag, ctx, slotProps);\r\n const attrs = Object.assign({ role: 'alert' }, ctx.attrs);\r\n // If no tag was specified and there are children\r\n // render the slot as is without wrapping it\r\n if (!tag && (Array.isArray(children) || !children) && (children === null || children === void 0 ? void 0 : children.length)) {\r\n return children;\r\n }\r\n // If no children in slot\r\n // render whatever specified and fallback to a <span> with the message in it's contents\r\n if ((Array.isArray(children) || !children) && !(children === null || children === void 0 ? void 0 : children.length)) {\r\n return h(tag || 'span', attrs, message.value);\r\n }\r\n return h(tag, attrs, children);\r\n };\r\n },\r\n});\r\nconst ErrorMessage = ErrorMessageImpl;\n\nfunction useResetForm() {\r\n const form = injectWithSelf(FormContextKey);\r\n if (!form) {\r\n warn('No vee-validate <Form /> or `useForm` was detected in the component tree');\r\n }\r\n return function resetForm(state) {\r\n if (!form) {\r\n return;\r\n }\r\n return form.resetForm(state);\r\n };\r\n}\n\n/**\r\n * If a field is dirty or not\r\n */\r\nfunction useIsFieldDirty(path) {\r\n const form = injectWithSelf(FormContextKey);\r\n let field = path ? undefined : inject(FieldContextKey);\r\n return computed(() => {\r\n if (path) {\r\n field = normalizeField(form === null || form === void 0 ? void 0 : form.fieldsByPath.value[unref(path)]);\r\n }\r\n if (!field) {\r\n warn(`field with name ${unref(path)} was not found`);\r\n return false;\r\n }\r\n return field.meta.dirty;\r\n });\r\n}\n\n/**\r\n * If a field is touched or not\r\n */\r\nfunction useIsFieldTouched(path) {\r\n const form = injectWithSelf(FormContextKey);\r\n let field = path ? undefined : inject(FieldContextKey);\r\n return computed(() => {\r\n if (path) {\r\n field = normalizeField(form === null || form === void 0 ? void 0 : form.fieldsByPath.value[unref(path)]);\r\n }\r\n if (!field) {\r\n warn(`field with name ${unref(path)} was not found`);\r\n return false;\r\n }\r\n return field.meta.touched;\r\n });\r\n}\n\n/**\r\n * If a field is validated and is valid\r\n */\r\nfunction useIsFieldValid(path) {\r\n const form = injectWithSelf(FormContextKey);\r\n let field = path ? undefined : inject(FieldContextKey);\r\n return computed(() => {\r\n if (path) {\r\n field = normalizeField(form === null || form === void 0 ? void 0 : form.fieldsByPath.value[unref(path)]);\r\n }\r\n if (!field) {\r\n warn(`field with name ${unref(path)} was not found`);\r\n return false;\r\n }\r\n return field.meta.valid;\r\n });\r\n}\n\n/**\r\n * If the form is submitting or not\r\n */\r\nfunction useIsSubmitting() {\r\n const form = injectWithSelf(FormContextKey);\r\n if (!form) {\r\n warn('No vee-validate <Form /> or `useForm` was detected in the component tree');\r\n }\r\n return computed(() => {\r\n var _a;\r\n return (_a = form === null || form === void 0 ? void 0 : form.isSubmitting.value) !== null && _a !== void 0 ? _a : false;\r\n });\r\n}\n\n/**\r\n * Validates a single field\r\n */\r\nfunction useValidateField(path) {\r\n const form = injectWithSelf(FormContextKey);\r\n let field = path ? undefined : inject(FieldContextKey);\r\n return function validateField() {\r\n if (path) {\r\n field = normalizeField(form === null || form === void 0 ? void 0 : form.fieldsByPath.value[unref(path)]);\r\n }\r\n if (!field) {\r\n warn(`field with name ${unref(path)} was not found`);\r\n return Promise.resolve({\r\n errors: [],\r\n valid: true,\r\n });\r\n }\r\n return field.validate();\r\n };\r\n}\n\n/**\r\n * If the form is dirty or not\r\n */\r\nfunction useIsFormDirty() {\r\n const form = injectWithSelf(FormContextKey);\r\n if (!form) {\r\n warn('No vee-validate <Form /> or `useForm` was detected in the component tree');\r\n }\r\n return computed(() => {\r\n var _a;\r\n return (_a = form === null || form === void 0 ? void 0 : form.meta.value.dirty) !== null && _a !== void 0 ? _a : false;\r\n });\r\n}\n\n/**\r\n * If the form is touched or not\r\n */\r\nfunction useIsFormTouched() {\r\n const form = injectWithSelf(FormContextKey);\r\n if (!form) {\r\n warn('No vee-validate <Form /> or `useForm` was detected in the component tree');\r\n }\r\n return computed(() => {\r\n var _a;\r\n return (_a = form === null || form === void 0 ? void 0 : form.meta.value.touched) !== null && _a !== void 0 ? _a : false;\r\n });\r\n}\n\n/**\r\n * If the form has been validated and is valid\r\n */\r\nfunction useIsFormValid() {\r\n const form = injectWithSelf(FormContextKey);\r\n if (!form) {\r\n warn('No vee-validate <Form /> or `useForm` was detected in the component tree');\r\n }\r\n return computed(() => {\r\n var _a;\r\n return (_a = form === null || form === void 0 ? void 0 : form.meta.value.valid) !== null && _a !== void 0 ? _a : false;\r\n });\r\n}\n\n/**\r\n * Validate multiple fields\r\n */\r\nfunction useValidateForm() {\r\n const form = injectWithSelf(FormContextKey);\r\n if (!form) {\r\n warn('No vee-validate <Form /> or `useForm` was detected in the component tree');\r\n }\r\n return function validateField() {\r\n if (!form) {\r\n return Promise.resolve({ results: {}, errors: {}, valid: true });\r\n }\r\n return form.validate();\r\n };\r\n}\n\n/**\r\n * The number of form's submission count\r\n */\r\nfunction useSubmitCount() {\r\n const form = injectWithSelf(FormContextKey);\r\n if (!form) {\r\n warn('No vee-validate <Form /> or `useForm` was detected in the component tree');\r\n }\r\n return computed(() => {\r\n var _a;\r\n return (_a = form === null || form === void 0 ? void 0 : form.submitCount.value) !== null && _a !== void 0 ? _a : 0;\r\n });\r\n}\n\n/**\r\n * Gives access to a field's current value\r\n */\r\nfunction useFieldValue(path) {\r\n const form = injectWithSelf(FormContextKey);\r\n // We don't want to use self injected context as it doesn't make sense\r\n const field = path ? undefined : inject(FieldContextKey);\r\n return computed(() => {\r\n if (path) {\r\n return getFromPath(form === null || form === void 0 ? void 0 : form.values, unref(path));\r\n }\r\n return unref(field === null || field === void 0 ? void 0 : field.value);\r\n });\r\n}\n\n/**\r\n * Gives access to a form's values\r\n */\r\nfunction useFormValues() {\r\n const form = injectWithSelf(FormContextKey);\r\n if (!form) {\r\n warn('No vee-validate <Form /> or `useForm` was detected in the component tree');\r\n }\r\n return computed(() => {\r\n return (form === null || form === void 0 ? void 0 : form.values) || {};\r\n });\r\n}\n\n/**\r\n * Gives access to all form errors\r\n */\r\nfunction useFormErrors() {\r\n const form = injectWithSelf(FormContextKey);\r\n if (!form) {\r\n warn('No vee-validate <Form /> or `useForm` was detected in the component tree');\r\n }\r\n return computed(() => {\r\n return ((form === null || form === void 0 ? void 0 : form.errors.value) || {});\r\n });\r\n}\n\n/**\r\n * Gives access to a single field error\r\n */\r\nfunction useFieldError(path) {\r\n const form = injectWithSelf(FormContextKey);\r\n // We don't want to use self injected context as it doesn't make sense\r\n const field = path ? undefined : inject(FieldContextKey);\r\n return computed(() => {\r\n if (path) {\r\n return form === null || form === void 0 ? void 0 : form.errors.value[unref(path)];\r\n }\r\n return field === null || field === void 0 ? void 0 : field.errorMessage.value;\r\n });\r\n}\n\nfunction useSubmitForm(cb) {\r\n const form = injectWithSelf(FormContextKey);\r\n if (!form) {\r\n warn('No vee-validate <Form /> or `useForm` was detected in the component tree');\r\n }\r\n const onSubmit = form ? form.handleSubmit(cb) : undefined;\r\n return function submitForm(e) {\r\n if (!onSubmit) {\r\n return;\r\n }\r\n return onSubmit(e);\r\n };\r\n}\n\nexport { ErrorMessage, Field, FieldArray, FieldContextKey, Form, FormContextKey, IS_ABSENT, configure, defineRule, useField, useFieldArray, useFieldError, useFieldValue, useForm, useFormErrors, useFormValues, useIsFieldDirty, useIsFieldTouched, useIsFieldValid, useIsFormDirty, useIsFormTouched, useIsFormValid, useIsSubmitting, useResetForm, useSubmitCount, useSubmitForm, useValidateField, useValidateForm, validate };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// runtime helper for setting properties on components\n// in a tree-shakable way\nexports.default = (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n};\n","exports.sync = function (store, router, options) {\n var moduleName = (options || {}).moduleName || 'route'\n\n store.registerModule(moduleName, {\n namespaced: true,\n state: cloneRoute(router.currentRoute),\n mutations: {\n 'ROUTE_CHANGED': function ROUTE_CHANGED (state, transition) {\n store.state[moduleName] = cloneRoute(transition.to, transition.from)\n }\n }\n })\n\n var isTimeTraveling = false\n var currentPath\n\n // sync router on store change\n var storeUnwatch = store.watch(\n function (state) { return state[moduleName]; },\n function (route) {\n var fullPath = route.fullPath;\n if (fullPath === currentPath) {\n return\n }\n if (currentPath != null) {\n isTimeTraveling = true\n router.push(route)\n }\n currentPath = fullPath\n },\n { sync: true }\n )\n\n // sync store on router navigation\n var afterEachUnHook = router.afterEach(function (to, from) {\n if (isTimeTraveling) {\n isTimeTraveling = false\n return\n }\n currentPath = to.fullPath\n store.commit(moduleName + '/ROUTE_CHANGED', { to: to, from: from })\n })\n\n return function unsync () {\n // On unsync, remove router hook\n if (afterEachUnHook != null) {\n afterEachUnHook()\n }\n\n // On unsync, remove store watch\n if (storeUnwatch != null) {\n storeUnwatch()\n }\n\n // On unsync, unregister Module with store\n store.unregisterModule(moduleName)\n }\n}\n\nfunction cloneRoute (to, from) {\n var clone = {\n name: to.name,\n path: to.path,\n hash: to.hash,\n query: to.query,\n params: to.params,\n fullPath: to.fullPath,\n meta: to.meta\n }\n if (from) {\n clone.from = cloneRoute(from)\n }\n return Object.freeze(clone)\n}\n\n","export function getDevtoolsGlobalHook() {\n return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;\n}\nexport function getTarget() {\n // @ts-ignore\n return (typeof navigator !== 'undefined' && typeof window !== 'undefined')\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n}\nexport const isProxyAvailable = typeof Proxy === 'function';\n","export const HOOK_SETUP = 'devtools-plugin:setup';\nexport const HOOK_PLUGIN_SETTINGS_SET = 'plugin:settings:set';\n","let supported;\nlet perf;\nexport function isPerformanceSupported() {\n var _a;\n if (supported !== undefined) {\n return supported;\n }\n if (typeof window !== 'undefined' && window.performance) {\n supported = true;\n perf = window.performance;\n }\n else if (typeof global !== 'undefined' && ((_a = global.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) {\n supported = true;\n perf = global.perf_hooks.performance;\n }\n else {\n supported = false;\n }\n return supported;\n}\nexport function now() {\n return isPerformanceSupported() ? perf.now() : Date.now();\n}\n","import { HOOK_PLUGIN_SETTINGS_SET } from './const.js';\nimport { now } from './time.js';\nexport class ApiProxy {\n constructor(plugin, hook) {\n this.target = null;\n this.targetQueue = [];\n this.onQueue = [];\n this.plugin = plugin;\n this.hook = hook;\n const defaultSettings = {};\n if (plugin.settings) {\n for (const id in plugin.settings) {\n const item = plugin.settings[id];\n defaultSettings[id] = item.defaultValue;\n }\n }\n const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;\n let currentSettings = Object.assign({}, defaultSettings);\n try {\n const raw = localStorage.getItem(localSettingsSaveId);\n const data = JSON.parse(raw);\n Object.assign(currentSettings, data);\n }\n catch (e) {\n // noop\n }\n this.fallbacks = {\n getSettings() {\n return currentSettings;\n },\n setSettings(value) {\n try {\n localStorage.setItem(localSettingsSaveId, JSON.stringify(value));\n }\n catch (e) {\n // noop\n }\n currentSettings = value;\n },\n now() {\n return now();\n },\n };\n if (hook) {\n hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {\n if (pluginId === this.plugin.id) {\n this.fallbacks.setSettings(value);\n }\n });\n }\n this.proxiedOn = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target.on[prop];\n }\n else {\n return (...args) => {\n this.onQueue.push({\n method: prop,\n args,\n });\n };\n }\n },\n });\n this.proxiedTarget = new Proxy({}, {\n get: (_target, prop) => {\n if (this.target) {\n return this.target[prop];\n }\n else if (prop === 'on') {\n return this.proxiedOn;\n }\n else if (Object.keys(this.fallbacks).includes(prop)) {\n return (...args) => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve: () => { },\n });\n return this.fallbacks[prop](...args);\n };\n }\n else {\n return (...args) => {\n return new Promise(resolve => {\n this.targetQueue.push({\n method: prop,\n args,\n resolve,\n });\n });\n };\n }\n },\n });\n }\n async setRealTarget(target) {\n this.target = target;\n for (const item of this.onQueue) {\n this.target.on[item.method](...item.args);\n }\n for (const item of this.targetQueue) {\n item.resolve(await this.target[item.method](...item.args));\n }\n }\n}\n","import { getTarget, getDevtoolsGlobalHook, isProxyAvailable } from './env.js';\nimport { HOOK_SETUP } from './const.js';\nimport { ApiProxy } from './proxy.js';\nexport * from './api/index.js';\nexport * from './plugin.js';\nexport * from './time.js';\nexport function setupDevtoolsPlugin(pluginDescriptor, setupFn) {\n const descriptor = pluginDescriptor;\n const target = getTarget();\n const hook = getDevtoolsGlobalHook();\n const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;\n if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {\n hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);\n }\n else {\n const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;\n const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];\n list.push({\n pluginDescriptor: descriptor,\n setupFn,\n proxy,\n });\n if (proxy)\n setupFn(proxy.proxiedTarget);\n }\n}\n","/*!\n * vuex v4.1.0\n * (c) 2022 Evan You\n * @license MIT\n */\nimport { inject, effectScope, reactive, watch, computed } from 'vue';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\nvar storeKey = 'store';\n\nfunction useStore (key) {\n if ( key === void 0 ) key = null;\n\n return inject(key !== null ? key : storeKey)\n}\n\n/**\n * Get the first item that pass the test\n * by second argument function\n *\n * @param {Array} list\n * @param {Function} f\n * @return {*}\n */\nfunction find (list, f) {\n return list.filter(f)[0]\n}\n\n/**\n * Deep copy the given object considering circular structure.\n * This function caches all nested objects and its copies.\n * If it detects circular structure, use cached copy to avoid infinite loop.\n *\n * @param {*} obj\n * @param {Array<Object>} cache\n * @return {*}\n */\nfunction deepCopy (obj, cache) {\n if ( cache === void 0 ) cache = [];\n\n // just return if obj is immutable value\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n // if obj is hit, it is in circular structure\n var hit = find(cache, function (c) { return c.original === obj; });\n if (hit) {\n return hit.copy\n }\n\n var copy = Array.isArray(obj) ? [] : {};\n // put the copy into cache at first\n // because we want to refer it in recursive deepCopy\n cache.push({\n original: obj,\n copy: copy\n });\n\n Object.keys(obj).forEach(function (key) {\n copy[key] = deepCopy(obj[key], cache);\n });\n\n return copy\n}\n\n/**\n * forEach for object\n */\nfunction forEachValue (obj, fn) {\n Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\n}\n\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\nfunction isPromise (val) {\n return val && typeof val.then === 'function'\n}\n\nfunction assert (condition, msg) {\n if (!condition) { throw new Error((\"[vuex] \" + msg)) }\n}\n\nfunction partial (fn, arg) {\n return function () {\n return fn(arg)\n }\n}\n\nfunction genericSubscribe (fn, subs, options) {\n if (subs.indexOf(fn) < 0) {\n options && options.prepend\n ? subs.unshift(fn)\n : subs.push(fn);\n }\n return function () {\n var i = subs.indexOf(fn);\n if (i > -1) {\n subs.splice(i, 1);\n }\n }\n}\n\nfunction resetStore (store, hot) {\n store._actions = Object.create(null);\n store._mutations = Object.create(null);\n store._wrappedGetters = Object.create(null);\n store._modulesNamespaceMap = Object.create(null);\n var state = store.state;\n // init all modules\n installModule(store, state, [], store._modules.root, true);\n // reset state\n resetStoreState(store, state, hot);\n}\n\nfunction resetStoreState (store, state, hot) {\n var oldState = store._state;\n var oldScope = store._scope;\n\n // bind store public getters\n store.getters = {};\n // reset local getters cache\n store._makeLocalGettersCache = Object.create(null);\n var wrappedGetters = store._wrappedGetters;\n var computedObj = {};\n var computedCache = {};\n\n // create a new effect scope and create computed object inside it to avoid\n // getters (computed) getting destroyed on component unmount.\n var scope = effectScope(true);\n\n scope.run(function () {\n forEachValue(wrappedGetters, function (fn, key) {\n // use computed to leverage its lazy-caching mechanism\n // direct inline function use will lead to closure preserving oldState.\n // using partial to return function with only arguments preserved in closure environment.\n computedObj[key] = partial(fn, store);\n computedCache[key] = computed(function () { return computedObj[key](); });\n Object.defineProperty(store.getters, key, {\n get: function () { return computedCache[key].value; },\n enumerable: true // for local getters\n });\n });\n });\n\n store._state = reactive({\n data: state\n });\n\n // register the newly created effect scope to the store so that we can\n // dispose the effects when this method runs again in the future.\n store._scope = scope;\n\n // enable strict mode for new state\n if (store.strict) {\n enableStrictMode(store);\n }\n\n if (oldState) {\n if (hot) {\n // dispatch changes in all subscribed watchers\n // to force getter re-evaluation for hot reloading.\n store._withCommit(function () {\n oldState.data = null;\n });\n }\n }\n\n // dispose previously registered effect scope if there is one.\n if (oldScope) {\n oldScope.stop();\n }\n}\n\nfunction installModule (store, rootState, path, module, hot) {\n var isRoot = !path.length;\n var namespace = store._modules.getNamespace(path);\n\n // register in namespace map\n if (module.namespaced) {\n if (store._modulesNamespaceMap[namespace] && (process.env.NODE_ENV !== 'production')) {\n console.error((\"[vuex] duplicate namespace \" + namespace + \" for the namespaced module \" + (path.join('/'))));\n }\n store._modulesNamespaceMap[namespace] = module;\n }\n\n // set state\n if (!isRoot && !hot) {\n var parentState = getNestedState(rootState, path.slice(0, -1));\n var moduleName = path[path.length - 1];\n store._withCommit(function () {\n if ((process.env.NODE_ENV !== 'production')) {\n if (moduleName in parentState) {\n console.warn(\n (\"[vuex] state field \\\"\" + moduleName + \"\\\" was overridden by a module with the same name at \\\"\" + (path.join('.')) + \"\\\"\")\n );\n }\n }\n parentState[moduleName] = module.state;\n });\n }\n\n var local = module.context = makeLocalContext(store, namespace, path);\n\n module.forEachMutation(function (mutation, key) {\n var namespacedType = namespace + key;\n registerMutation(store, namespacedType, mutation, local);\n });\n\n module.forEachAction(function (action, key) {\n var type = action.root ? key : namespace + key;\n var handler = action.handler || action;\n registerAction(store, type, handler, local);\n });\n\n module.forEachGetter(function (getter, key) {\n var namespacedType = namespace + key;\n registerGetter(store, namespacedType, getter, local);\n });\n\n module.forEachChild(function (child, key) {\n installModule(store, rootState, path.concat(key), child, hot);\n });\n}\n\n/**\n * make localized dispatch, commit, getters and state\n * if there is no namespace, just use root ones\n */\nfunction makeLocalContext (store, namespace, path) {\n var noNamespace = namespace === '';\n\n var local = {\n dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\n var args = unifyObjectStyle(_type, _payload, _options);\n var payload = args.payload;\n var options = args.options;\n var type = args.type;\n\n if (!options || !options.root) {\n type = namespace + type;\n if ((process.env.NODE_ENV !== 'production') && !store._actions[type]) {\n console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\n return\n }\n }\n\n return store.dispatch(type, payload)\n },\n\n commit: noNamespace ? store.commit : function (_type, _payload, _options) {\n var args = unifyObjectStyle(_type, _payload, _options);\n var payload = args.payload;\n var options = args.options;\n var type = args.type;\n\n if (!options || !options.root) {\n type = namespace + type;\n if ((process.env.NODE_ENV !== 'production') && !store._mutations[type]) {\n console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\n return\n }\n }\n\n store.commit(type, payload, options);\n }\n };\n\n // getters and state object must be gotten lazily\n // because they will be changed by state update\n Object.defineProperties(local, {\n getters: {\n get: noNamespace\n ? function () { return store.getters; }\n : function () { return makeLocalGetters(store, namespace); }\n },\n state: {\n get: function () { return getNestedState(store.state, path); }\n }\n });\n\n return local\n}\n\nfunction makeLocalGetters (store, namespace) {\n if (!store._makeLocalGettersCache[namespace]) {\n var gettersProxy = {};\n var splitPos = namespace.length;\n Object.keys(store.getters).forEach(function (type) {\n // skip if the target getter is not match this namespace\n if (type.slice(0, splitPos) !== namespace) { return }\n\n // extract local getter type\n var localType = type.slice(splitPos);\n\n // Add a port to the getters proxy.\n // Define as getter property because\n // we do not want to evaluate the getters in this time.\n Object.defineProperty(gettersProxy, localType, {\n get: function () { return store.getters[type]; },\n enumerable: true\n });\n });\n store._makeLocalGettersCache[namespace] = gettersProxy;\n }\n\n return store._makeLocalGettersCache[namespace]\n}\n\nfunction registerMutation (store, type, handler, local) {\n var entry = store._mutations[type] || (store._mutations[type] = []);\n entry.push(function wrappedMutationHandler (payload) {\n handler.call(store, local.state, payload);\n });\n}\n\nfunction registerAction (store, type, handler, local) {\n var entry = store._actions[type] || (store._actions[type] = []);\n entry.push(function wrappedActionHandler (payload) {\n var res = handler.call(store, {\n dispatch: local.dispatch,\n commit: local.commit,\n getters: local.getters,\n state: local.state,\n rootGetters: store.getters,\n rootState: store.state\n }, payload);\n if (!isPromise(res)) {\n res = Promise.resolve(res);\n }\n if (store._devtoolHook) {\n return res.catch(function (err) {\n store._devtoolHook.emit('vuex:error', err);\n throw err\n })\n } else {\n return res\n }\n });\n}\n\nfunction registerGetter (store, type, rawGetter, local) {\n if (store._wrappedGetters[type]) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.error((\"[vuex] duplicate getter key: \" + type));\n }\n return\n }\n store._wrappedGetters[type] = function wrappedGetter (store) {\n return rawGetter(\n local.state, // local state\n local.getters, // local getters\n store.state, // root state\n store.getters // root getters\n )\n };\n}\n\nfunction enableStrictMode (store) {\n watch(function () { return store._state.data; }, function () {\n if ((process.env.NODE_ENV !== 'production')) {\n assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\n }\n }, { deep: true, flush: 'sync' });\n}\n\nfunction getNestedState (state, path) {\n return path.reduce(function (state, key) { return state[key]; }, state)\n}\n\nfunction unifyObjectStyle (type, payload, options) {\n if (isObject(type) && type.type) {\n options = payload;\n payload = type;\n type = type.type;\n }\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\n }\n\n return { type: type, payload: payload, options: options }\n}\n\nvar LABEL_VUEX_BINDINGS = 'vuex bindings';\nvar MUTATIONS_LAYER_ID = 'vuex:mutations';\nvar ACTIONS_LAYER_ID = 'vuex:actions';\nvar INSPECTOR_ID = 'vuex';\n\nvar actionId = 0;\n\nfunction addDevtools (app, store) {\n setupDevtoolsPlugin(\n {\n id: 'org.vuejs.vuex',\n app: app,\n label: 'Vuex',\n homepage: 'https://next.vuex.vuejs.org/',\n logo: 'https://vuejs.org/images/icons/favicon-96x96.png',\n packageName: 'vuex',\n componentStateTypes: [LABEL_VUEX_BINDINGS]\n },\n function (api) {\n api.addTimelineLayer({\n id: MUTATIONS_LAYER_ID,\n label: 'Vuex Mutations',\n color: COLOR_LIME_500\n });\n\n api.addTimelineLayer({\n id: ACTIONS_LAYER_ID,\n label: 'Vuex Actions',\n color: COLOR_LIME_500\n });\n\n api.addInspector({\n id: INSPECTOR_ID,\n label: 'Vuex',\n icon: 'storage',\n treeFilterPlaceholder: 'Filter stores...'\n });\n\n api.on.getInspectorTree(function (payload) {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n if (payload.filter) {\n var nodes = [];\n flattenStoreForInspectorTree(nodes, store._modules.root, payload.filter, '');\n payload.rootNodes = nodes;\n } else {\n payload.rootNodes = [\n formatStoreForInspectorTree(store._modules.root, '')\n ];\n }\n }\n });\n\n api.on.getInspectorState(function (payload) {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n var modulePath = payload.nodeId;\n makeLocalGetters(store, modulePath);\n payload.state = formatStoreForInspectorState(\n getStoreModule(store._modules, modulePath),\n modulePath === 'root' ? store.getters : store._makeLocalGettersCache,\n modulePath\n );\n }\n });\n\n api.on.editInspectorState(function (payload) {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n var modulePath = payload.nodeId;\n var path = payload.path;\n if (modulePath !== 'root') {\n path = modulePath.split('/').filter(Boolean).concat( path);\n }\n store._withCommit(function () {\n payload.set(store._state.data, path, payload.state.value);\n });\n }\n });\n\n store.subscribe(function (mutation, state) {\n var data = {};\n\n if (mutation.payload) {\n data.payload = mutation.payload;\n }\n\n data.state = state;\n\n api.notifyComponentUpdate();\n api.sendInspectorTree(INSPECTOR_ID);\n api.sendInspectorState(INSPECTOR_ID);\n\n api.addTimelineEvent({\n layerId: MUTATIONS_LAYER_ID,\n event: {\n time: Date.now(),\n title: mutation.type,\n data: data\n }\n });\n });\n\n store.subscribeAction({\n before: function (action, state) {\n var data = {};\n if (action.payload) {\n data.payload = action.payload;\n }\n action._id = actionId++;\n action._time = Date.now();\n data.state = state;\n\n api.addTimelineEvent({\n layerId: ACTIONS_LAYER_ID,\n event: {\n time: action._time,\n title: action.type,\n groupId: action._id,\n subtitle: 'start',\n data: data\n }\n });\n },\n after: function (action, state) {\n var data = {};\n var duration = Date.now() - action._time;\n data.duration = {\n _custom: {\n type: 'duration',\n display: (duration + \"ms\"),\n tooltip: 'Action duration',\n value: duration\n }\n };\n if (action.payload) {\n data.payload = action.payload;\n }\n data.state = state;\n\n api.addTimelineEvent({\n layerId: ACTIONS_LAYER_ID,\n event: {\n time: Date.now(),\n title: action.type,\n groupId: action._id,\n subtitle: 'end',\n data: data\n }\n });\n }\n });\n }\n );\n}\n\n// extracted from tailwind palette\nvar COLOR_LIME_500 = 0x84cc16;\nvar COLOR_DARK = 0x666666;\nvar COLOR_WHITE = 0xffffff;\n\nvar TAG_NAMESPACED = {\n label: 'namespaced',\n textColor: COLOR_WHITE,\n backgroundColor: COLOR_DARK\n};\n\n/**\n * @param {string} path\n */\nfunction extractNameFromPath (path) {\n return path && path !== 'root' ? path.split('/').slice(-2, -1)[0] : 'Root'\n}\n\n/**\n * @param {*} module\n * @return {import('@vue/devtools-api').CustomInspectorNode}\n */\nfunction formatStoreForInspectorTree (module, path) {\n return {\n id: path || 'root',\n // all modules end with a `/`, we want the last segment only\n // cart/ -> cart\n // nested/cart/ -> cart\n label: extractNameFromPath(path),\n tags: module.namespaced ? [TAG_NAMESPACED] : [],\n children: Object.keys(module._children).map(function (moduleName) { return formatStoreForInspectorTree(\n module._children[moduleName],\n path + moduleName + '/'\n ); }\n )\n }\n}\n\n/**\n * @param {import('@vue/devtools-api').CustomInspectorNode[]} result\n * @param {*} module\n * @param {string} filter\n * @param {string} path\n */\nfunction flattenStoreForInspectorTree (result, module, filter, path) {\n if (path.includes(filter)) {\n result.push({\n id: path || 'root',\n label: path.endsWith('/') ? path.slice(0, path.length - 1) : path || 'Root',\n tags: module.namespaced ? [TAG_NAMESPACED] : []\n });\n }\n Object.keys(module._children).forEach(function (moduleName) {\n flattenStoreForInspectorTree(result, module._children[moduleName], filter, path + moduleName + '/');\n });\n}\n\n/**\n * @param {*} module\n * @return {import('@vue/devtools-api').CustomInspectorState}\n */\nfunction formatStoreForInspectorState (module, getters, path) {\n getters = path === 'root' ? getters : getters[path];\n var gettersKeys = Object.keys(getters);\n var storeState = {\n state: Object.keys(module.state).map(function (key) { return ({\n key: key,\n editable: true,\n value: module.state[key]\n }); })\n };\n\n if (gettersKeys.length) {\n var tree = transformPathsToObjectTree(getters);\n storeState.getters = Object.keys(tree).map(function (key) { return ({\n key: key.endsWith('/') ? extractNameFromPath(key) : key,\n editable: false,\n value: canThrow(function () { return tree[key]; })\n }); });\n }\n\n return storeState\n}\n\nfunction transformPathsToObjectTree (getters) {\n var result = {};\n Object.keys(getters).forEach(function (key) {\n var path = key.split('/');\n if (path.length > 1) {\n var target = result;\n var leafKey = path.pop();\n path.forEach(function (p) {\n if (!target[p]) {\n target[p] = {\n _custom: {\n value: {},\n display: p,\n tooltip: 'Module',\n abstract: true\n }\n };\n }\n target = target[p]._custom.value;\n });\n target[leafKey] = canThrow(function () { return getters[key]; });\n } else {\n result[key] = canThrow(function () { return getters[key]; });\n }\n });\n return result\n}\n\nfunction getStoreModule (moduleMap, path) {\n var names = path.split('/').filter(function (n) { return n; });\n return names.reduce(\n function (module, moduleName, i) {\n var child = module[moduleName];\n if (!child) {\n throw new Error((\"Missing module \\\"\" + moduleName + \"\\\" for path \\\"\" + path + \"\\\".\"))\n }\n return i === names.length - 1 ? child : child._children\n },\n path === 'root' ? moduleMap : moduleMap.root._children\n )\n}\n\nfunction canThrow (cb) {\n try {\n return cb()\n } catch (e) {\n return e\n }\n}\n\n// Base data struct for store's module, package with some attribute and method\nvar Module = function Module (rawModule, runtime) {\n this.runtime = runtime;\n // Store some children item\n this._children = Object.create(null);\n // Store the origin module object which passed by programmer\n this._rawModule = rawModule;\n var rawState = rawModule.state;\n\n // Store the origin module's state\n this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\n};\n\nvar prototypeAccessors$1 = { namespaced: { configurable: true } };\n\nprototypeAccessors$1.namespaced.get = function () {\n return !!this._rawModule.namespaced\n};\n\nModule.prototype.addChild = function addChild (key, module) {\n this._children[key] = module;\n};\n\nModule.prototype.removeChild = function removeChild (key) {\n delete this._children[key];\n};\n\nModule.prototype.getChild = function getChild (key) {\n return this._children[key]\n};\n\nModule.prototype.hasChild = function hasChild (key) {\n return key in this._children\n};\n\nModule.prototype.update = function update (rawModule) {\n this._rawModule.namespaced = rawModule.namespaced;\n if (rawModule.actions) {\n this._rawModule.actions = rawModule.actions;\n }\n if (rawModule.mutations) {\n this._rawModule.mutations = rawModule.mutations;\n }\n if (rawModule.getters) {\n this._rawModule.getters = rawModule.getters;\n }\n};\n\nModule.prototype.forEachChild = function forEachChild (fn) {\n forEachValue(this._children, fn);\n};\n\nModule.prototype.forEachGetter = function forEachGetter (fn) {\n if (this._rawModule.getters) {\n forEachValue(this._rawModule.getters, fn);\n }\n};\n\nModule.prototype.forEachAction = function forEachAction (fn) {\n if (this._rawModule.actions) {\n forEachValue(this._rawModule.actions, fn);\n }\n};\n\nModule.prototype.forEachMutation = function forEachMutation (fn) {\n if (this._rawModule.mutations) {\n forEachValue(this._rawModule.mutations, fn);\n }\n};\n\nObject.defineProperties( Module.prototype, prototypeAccessors$1 );\n\nvar ModuleCollection = function ModuleCollection (rawRootModule) {\n // register root module (Vuex.Store options)\n this.register([], rawRootModule, false);\n};\n\nModuleCollection.prototype.get = function get (path) {\n return path.reduce(function (module, key) {\n return module.getChild(key)\n }, this.root)\n};\n\nModuleCollection.prototype.getNamespace = function getNamespace (path) {\n var module = this.root;\n return path.reduce(function (namespace, key) {\n module = module.getChild(key);\n return namespace + (module.namespaced ? key + '/' : '')\n }, '')\n};\n\nModuleCollection.prototype.update = function update$1 (rawRootModule) {\n update([], this.root, rawRootModule);\n};\n\nModuleCollection.prototype.register = function register (path, rawModule, runtime) {\n var this$1$1 = this;\n if ( runtime === void 0 ) runtime = true;\n\n if ((process.env.NODE_ENV !== 'production')) {\n assertRawModule(path, rawModule);\n }\n\n var newModule = new Module(rawModule, runtime);\n if (path.length === 0) {\n this.root = newModule;\n } else {\n var parent = this.get(path.slice(0, -1));\n parent.addChild(path[path.length - 1], newModule);\n }\n\n // register nested modules\n if (rawModule.modules) {\n forEachValue(rawModule.modules, function (rawChildModule, key) {\n this$1$1.register(path.concat(key), rawChildModule, runtime);\n });\n }\n};\n\nModuleCollection.prototype.unregister = function unregister (path) {\n var parent = this.get(path.slice(0, -1));\n var key = path[path.length - 1];\n var child = parent.getChild(key);\n\n if (!child) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.warn(\n \"[vuex] trying to unregister module '\" + key + \"', which is \" +\n \"not registered\"\n );\n }\n return\n }\n\n if (!child.runtime) {\n return\n }\n\n parent.removeChild(key);\n};\n\nModuleCollection.prototype.isRegistered = function isRegistered (path) {\n var parent = this.get(path.slice(0, -1));\n var key = path[path.length - 1];\n\n if (parent) {\n return parent.hasChild(key)\n }\n\n return false\n};\n\nfunction update (path, targetModule, newModule) {\n if ((process.env.NODE_ENV !== 'production')) {\n assertRawModule(path, newModule);\n }\n\n // update target module\n targetModule.update(newModule);\n\n // update nested modules\n if (newModule.modules) {\n for (var key in newModule.modules) {\n if (!targetModule.getChild(key)) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.warn(\n \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\n 'manual reload is needed'\n );\n }\n return\n }\n update(\n path.concat(key),\n targetModule.getChild(key),\n newModule.modules[key]\n );\n }\n }\n}\n\nvar functionAssert = {\n assert: function (value) { return typeof value === 'function'; },\n expected: 'function'\n};\n\nvar objectAssert = {\n assert: function (value) { return typeof value === 'function' ||\n (typeof value === 'object' && typeof value.handler === 'function'); },\n expected: 'function or object with \"handler\" function'\n};\n\nvar assertTypes = {\n getters: functionAssert,\n mutations: functionAssert,\n actions: objectAssert\n};\n\nfunction assertRawModule (path, rawModule) {\n Object.keys(assertTypes).forEach(function (key) {\n if (!rawModule[key]) { return }\n\n var assertOptions = assertTypes[key];\n\n forEachValue(rawModule[key], function (value, type) {\n assert(\n assertOptions.assert(value),\n makeAssertionMessage(path, key, type, value, assertOptions.expected)\n );\n });\n });\n}\n\nfunction makeAssertionMessage (path, key, type, value, expected) {\n var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\n if (path.length > 0) {\n buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\n }\n buf += \" is \" + (JSON.stringify(value)) + \".\";\n return buf\n}\n\nfunction createStore (options) {\n return new Store(options)\n}\n\nvar Store = function Store (options) {\n var this$1$1 = this;\n if ( options === void 0 ) options = {};\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\n assert(this instanceof Store, \"store must be called with the new operator.\");\n }\n\n var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\n var strict = options.strict; if ( strict === void 0 ) strict = false;\n var devtools = options.devtools;\n\n // store internal state\n this._committing = false;\n this._actions = Object.create(null);\n this._actionSubscribers = [];\n this._mutations = Object.create(null);\n this._wrappedGetters = Object.create(null);\n this._modules = new ModuleCollection(options);\n this._modulesNamespaceMap = Object.create(null);\n this._subscribers = [];\n this._makeLocalGettersCache = Object.create(null);\n\n // EffectScope instance. when registering new getters, we wrap them inside\n // EffectScope so that getters (computed) would not be destroyed on\n // component unmount.\n this._scope = null;\n\n this._devtools = devtools;\n\n // bind commit and dispatch to self\n var store = this;\n var ref = this;\n var dispatch = ref.dispatch;\n var commit = ref.commit;\n this.dispatch = function boundDispatch (type, payload) {\n return dispatch.call(store, type, payload)\n };\n this.commit = function boundCommit (type, payload, options) {\n return commit.call(store, type, payload, options)\n };\n\n // strict mode\n this.strict = strict;\n\n var state = this._modules.root.state;\n\n // init root module.\n // this also recursively registers all sub-modules\n // and collects all module getters inside this._wrappedGetters\n installModule(this, state, [], this._modules.root);\n\n // initialize the store state, which is responsible for the reactivity\n // (also registers _wrappedGetters as computed properties)\n resetStoreState(this, state);\n\n // apply plugins\n plugins.forEach(function (plugin) { return plugin(this$1$1); });\n};\n\nvar prototypeAccessors = { state: { configurable: true } };\n\nStore.prototype.install = function install (app, injectKey) {\n app.provide(injectKey || storeKey, this);\n app.config.globalProperties.$store = this;\n\n var useDevtools = this._devtools !== undefined\n ? this._devtools\n : (process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__;\n\n if (useDevtools) {\n addDevtools(app, this);\n }\n};\n\nprototypeAccessors.state.get = function () {\n return this._state.data\n};\n\nprototypeAccessors.state.set = function (v) {\n if ((process.env.NODE_ENV !== 'production')) {\n assert(false, \"use store.replaceState() to explicit replace store state.\");\n }\n};\n\nStore.prototype.commit = function commit (_type, _payload, _options) {\n var this$1$1 = this;\n\n // check object-style commit\n var ref = unifyObjectStyle(_type, _payload, _options);\n var type = ref.type;\n var payload = ref.payload;\n var options = ref.options;\n\n var mutation = { type: type, payload: payload };\n var entry = this._mutations[type];\n if (!entry) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.error((\"[vuex] unknown mutation type: \" + type));\n }\n return\n }\n this._withCommit(function () {\n entry.forEach(function commitIterator (handler) {\n handler(payload);\n });\n });\n\n this._subscribers\n .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe\n .forEach(function (sub) { return sub(mutation, this$1$1.state); });\n\n if (\n (process.env.NODE_ENV !== 'production') &&\n options && options.silent\n ) {\n console.warn(\n \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\n 'Use the filter functionality in the vue-devtools'\n );\n }\n};\n\nStore.prototype.dispatch = function dispatch (_type, _payload) {\n var this$1$1 = this;\n\n // check object-style dispatch\n var ref = unifyObjectStyle(_type, _payload);\n var type = ref.type;\n var payload = ref.payload;\n\n var action = { type: type, payload: payload };\n var entry = this._actions[type];\n if (!entry) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.error((\"[vuex] unknown action type: \" + type));\n }\n return\n }\n\n try {\n this._actionSubscribers\n .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe\n .filter(function (sub) { return sub.before; })\n .forEach(function (sub) { return sub.before(action, this$1$1.state); });\n } catch (e) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.warn(\"[vuex] error in before action subscribers: \");\n console.error(e);\n }\n }\n\n var result = entry.length > 1\n ? Promise.all(entry.map(function (handler) { return handler(payload); }))\n : entry[0](payload);\n\n return new Promise(function (resolve, reject) {\n result.then(function (res) {\n try {\n this$1$1._actionSubscribers\n .filter(function (sub) { return sub.after; })\n .forEach(function (sub) { return sub.after(action, this$1$1.state); });\n } catch (e) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.warn(\"[vuex] error in after action subscribers: \");\n console.error(e);\n }\n }\n resolve(res);\n }, function (error) {\n try {\n this$1$1._actionSubscribers\n .filter(function (sub) { return sub.error; })\n .forEach(function (sub) { return sub.error(action, this$1$1.state, error); });\n } catch (e) {\n if ((process.env.NODE_ENV !== 'production')) {\n console.warn(\"[vuex] error in error action subscribers: \");\n console.error(e);\n }\n }\n reject(error);\n });\n })\n};\n\nStore.prototype.subscribe = function subscribe (fn, options) {\n return genericSubscribe(fn, this._subscribers, options)\n};\n\nStore.prototype.subscribeAction = function subscribeAction (fn, options) {\n var subs = typeof fn === 'function' ? { before: fn } : fn;\n return genericSubscribe(subs, this._actionSubscribers, options)\n};\n\nStore.prototype.watch = function watch$1 (getter, cb, options) {\n var this$1$1 = this;\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(typeof getter === 'function', \"store.watch only accepts a function.\");\n }\n return watch(function () { return getter(this$1$1.state, this$1$1.getters); }, cb, Object.assign({}, options))\n};\n\nStore.prototype.replaceState = function replaceState (state) {\n var this$1$1 = this;\n\n this._withCommit(function () {\n this$1$1._state.data = state;\n });\n};\n\nStore.prototype.registerModule = function registerModule (path, rawModule, options) {\n if ( options === void 0 ) options = {};\n\n if (typeof path === 'string') { path = [path]; }\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(Array.isArray(path), \"module path must be a string or an Array.\");\n assert(path.length > 0, 'cannot register the root module by using registerModule.');\n }\n\n this._modules.register(path, rawModule);\n installModule(this, this.state, path, this._modules.get(path), options.preserveState);\n // reset store to update getters...\n resetStoreState(this, this.state);\n};\n\nStore.prototype.unregisterModule = function unregisterModule (path) {\n var this$1$1 = this;\n\n if (typeof path === 'string') { path = [path]; }\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(Array.isArray(path), \"module path must be a string or an Array.\");\n }\n\n this._modules.unregister(path);\n this._withCommit(function () {\n var parentState = getNestedState(this$1$1.state, path.slice(0, -1));\n delete parentState[path[path.length - 1]];\n });\n resetStore(this);\n};\n\nStore.prototype.hasModule = function hasModule (path) {\n if (typeof path === 'string') { path = [path]; }\n\n if ((process.env.NODE_ENV !== 'production')) {\n assert(Array.isArray(path), \"module path must be a string or an Array.\");\n }\n\n return this._modules.isRegistered(path)\n};\n\nStore.prototype.hotUpdate = function hotUpdate (newOptions) {\n this._modules.update(newOptions);\n resetStore(this, true);\n};\n\nStore.prototype._withCommit = function _withCommit (fn) {\n var committing = this._committing;\n this._committing = true;\n fn();\n this._committing = committing;\n};\n\nObject.defineProperties( Store.prototype, prototypeAccessors );\n\n/**\n * Reduce the code which written in Vue.js for getting the state.\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\n * @param {Object}\n */\nvar mapState = normalizeNamespace(function (namespace, states) {\n var res = {};\n if ((process.env.NODE_ENV !== 'production') && !isValidMap(states)) {\n console.error('[vuex] mapState: mapper parameter must be either an Array or an Object');\n }\n normalizeMap(states).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedState () {\n var state = this.$store.state;\n var getters = this.$store.getters;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapState', namespace);\n if (!module) {\n return\n }\n state = module.context.state;\n getters = module.context.getters;\n }\n return typeof val === 'function'\n ? val.call(this, state, getters)\n : state[val]\n };\n // mark vuex getter for devtools\n res[key].vuex = true;\n });\n return res\n});\n\n/**\n * Reduce the code which written in Vue.js for committing the mutation\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept another params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n * @return {Object}\n */\nvar mapMutations = normalizeNamespace(function (namespace, mutations) {\n var res = {};\n if ((process.env.NODE_ENV !== 'production') && !isValidMap(mutations)) {\n console.error('[vuex] mapMutations: mapper parameter must be either an Array or an Object');\n }\n normalizeMap(mutations).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedMutation () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n // Get the commit method from store\n var commit = this.$store.commit;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\n if (!module) {\n return\n }\n commit = module.context.commit;\n }\n return typeof val === 'function'\n ? val.apply(this, [commit].concat(args))\n : commit.apply(this.$store, [val].concat(args))\n };\n });\n return res\n});\n\n/**\n * Reduce the code which written in Vue.js for getting the getters\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} getters\n * @return {Object}\n */\nvar mapGetters = normalizeNamespace(function (namespace, getters) {\n var res = {};\n if ((process.env.NODE_ENV !== 'production') && !isValidMap(getters)) {\n console.error('[vuex] mapGetters: mapper parameter must be either an Array or an Object');\n }\n normalizeMap(getters).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n // The namespace has been mutated by normalizeNamespace\n val = namespace + val;\n res[key] = function mappedGetter () {\n if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\n return\n }\n if ((process.env.NODE_ENV !== 'production') && !(val in this.$store.getters)) {\n console.error((\"[vuex] unknown getter: \" + val));\n return\n }\n return this.$store.getters[val]\n };\n // mark vuex getter for devtools\n res[key].vuex = true;\n });\n return res\n});\n\n/**\n * Reduce the code which written in Vue.js for dispatch the action\n * @param {String} [namespace] - Module's namespace\n * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n * @return {Object}\n */\nvar mapActions = normalizeNamespace(function (namespace, actions) {\n var res = {};\n if ((process.env.NODE_ENV !== 'production') && !isValidMap(actions)) {\n console.error('[vuex] mapActions: mapper parameter must be either an Array or an Object');\n }\n normalizeMap(actions).forEach(function (ref) {\n var key = ref.key;\n var val = ref.val;\n\n res[key] = function mappedAction () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n // get dispatch function from store\n var dispatch = this.$store.dispatch;\n if (namespace) {\n var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\n if (!module) {\n return\n }\n dispatch = module.context.dispatch;\n }\n return typeof val === 'function'\n ? val.apply(this, [dispatch].concat(args))\n : dispatch.apply(this.$store, [val].concat(args))\n };\n });\n return res\n});\n\n/**\n * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\n * @param {String} namespace\n * @return {Object}\n */\nvar createNamespacedHelpers = function (namespace) { return ({\n mapState: mapState.bind(null, namespace),\n mapGetters: mapGetters.bind(null, namespace),\n mapMutations: mapMutations.bind(null, namespace),\n mapActions: mapActions.bind(null, namespace)\n}); };\n\n/**\n * Normalize the map\n * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\n * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\n * @param {Array|Object} map\n * @return {Object}\n */\nfunction normalizeMap (map) {\n if (!isValidMap(map)) {\n return []\n }\n return Array.isArray(map)\n ? map.map(function (key) { return ({ key: key, val: key }); })\n : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\n}\n\n/**\n * Validate whether given map is valid or not\n * @param {*} map\n * @return {Boolean}\n */\nfunction isValidMap (map) {\n return Array.isArray(map) || isObject(map)\n}\n\n/**\n * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\n * @param {Function} fn\n * @return {Function}\n */\nfunction normalizeNamespace (fn) {\n return function (namespace, map) {\n if (typeof namespace !== 'string') {\n map = namespace;\n namespace = '';\n } else if (namespace.charAt(namespace.length - 1) !== '/') {\n namespace += '/';\n }\n return fn(namespace, map)\n }\n}\n\n/**\n * Search a special module from store by namespace. if module not exist, print error message.\n * @param {Object} store\n * @param {String} helper\n * @param {String} namespace\n * @return {Object}\n */\nfunction getModuleByNamespace (store, helper, namespace) {\n var module = store._modulesNamespaceMap[namespace];\n if ((process.env.NODE_ENV !== 'production') && !module) {\n console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\n }\n return module\n}\n\n// Credits: borrowed code from fcomb/redux-logger\n\nfunction createLogger (ref) {\n if ( ref === void 0 ) ref = {};\n var collapsed = ref.collapsed; if ( collapsed === void 0 ) collapsed = true;\n var filter = ref.filter; if ( filter === void 0 ) filter = function (mutation, stateBefore, stateAfter) { return true; };\n var transformer = ref.transformer; if ( transformer === void 0 ) transformer = function (state) { return state; };\n var mutationTransformer = ref.mutationTransformer; if ( mutationTransformer === void 0 ) mutationTransformer = function (mut) { return mut; };\n var actionFilter = ref.actionFilter; if ( actionFilter === void 0 ) actionFilter = function (action, state) { return true; };\n var actionTransformer = ref.actionTransformer; if ( actionTransformer === void 0 ) actionTransformer = function (act) { return act; };\n var logMutations = ref.logMutations; if ( logMutations === void 0 ) logMutations = true;\n var logActions = ref.logActions; if ( logActions === void 0 ) logActions = true;\n var logger = ref.logger; if ( logger === void 0 ) logger = console;\n\n return function (store) {\n var prevState = deepCopy(store.state);\n\n if (typeof logger === 'undefined') {\n return\n }\n\n if (logMutations) {\n store.subscribe(function (mutation, state) {\n var nextState = deepCopy(state);\n\n if (filter(mutation, prevState, nextState)) {\n var formattedTime = getFormattedTime();\n var formattedMutation = mutationTransformer(mutation);\n var message = \"mutation \" + (mutation.type) + formattedTime;\n\n startMessage(logger, message, collapsed);\n logger.log('%c prev state', 'color: #9E9E9E; font-weight: bold', transformer(prevState));\n logger.log('%c mutation', 'color: #03A9F4; font-weight: bold', formattedMutation);\n logger.log('%c next state', 'color: #4CAF50; font-weight: bold', transformer(nextState));\n endMessage(logger);\n }\n\n prevState = nextState;\n });\n }\n\n if (logActions) {\n store.subscribeAction(function (action, state) {\n if (actionFilter(action, state)) {\n var formattedTime = getFormattedTime();\n var formattedAction = actionTransformer(action);\n var message = \"action \" + (action.type) + formattedTime;\n\n startMessage(logger, message, collapsed);\n logger.log('%c action', 'color: #03A9F4; font-weight: bold', formattedAction);\n endMessage(logger);\n }\n });\n }\n }\n}\n\nfunction startMessage (logger, message, collapsed) {\n var startMessage = collapsed\n ? logger.groupCollapsed\n : logger.group;\n\n // render\n try {\n startMessage.call(logger, message);\n } catch (e) {\n logger.log(message);\n }\n}\n\nfunction endMessage (logger) {\n try {\n logger.groupEnd();\n } catch (e) {\n logger.log('—— log end ——');\n }\n}\n\nfunction getFormattedTime () {\n var time = new Date();\n return (\" @ \" + (pad(time.getHours(), 2)) + \":\" + (pad(time.getMinutes(), 2)) + \":\" + (pad(time.getSeconds(), 2)) + \".\" + (pad(time.getMilliseconds(), 3)))\n}\n\nfunction repeat (str, times) {\n return (new Array(times + 1)).join(str)\n}\n\nfunction pad (num, maxLength) {\n return repeat('0', maxLength - num.toString().length) + num\n}\n\nvar index = {\n version: '4.1.0',\n Store: Store,\n storeKey: storeKey,\n createStore: createStore,\n useStore: useStore,\n mapState: mapState,\n mapMutations: mapMutations,\n mapGetters: mapGetters,\n mapActions: mapActions,\n createNamespacedHelpers: createNamespacedHelpers,\n createLogger: createLogger\n};\n\nexport default index;\nexport { Store, createLogger, createNamespacedHelpers, createStore, mapActions, mapGetters, mapMutations, mapState, storeKey, useStore };\n","let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = ''\n let i = size\n while (i--) {\n id += alphabet[(Math.random() * alphabet.length) | 0]\n }\n return id\n }\n}\nlet nanoid = (size = 21) => {\n let id = ''\n let i = size\n while (i--) {\n id += urlAlphabet[(Math.random() * 64) | 0]\n }\n return id\n}\nmodule.exports = { nanoid, customAlphabet }\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","import { Component, ComponentContainer } from '@firebase/component';\nimport { Logger, setUserLogHandler, setLogLevel as setLogLevel$1 } from '@firebase/logger';\nimport { ErrorFactory, getDefaultAppConfig, deepEqual, FirebaseError, base64urlEncodeWithoutPadding, isIndexedDBAvailable, validateIndexedDBOpenable } from '@firebase/util';\nexport { FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PlatformLoggerServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n }\r\n // In initial implementation, this will be called by installations on\r\n // auth token refresh, and installations will send this string.\r\n getPlatformInfoString() {\r\n const providers = this.container.getProviders();\r\n // Loop through providers and get library/version pairs from any that are\r\n // version components.\r\n return providers\r\n .map(provider => {\r\n if (isVersionServiceProvider(provider)) {\r\n const service = provider.getImmediate();\r\n return `${service.library}/${service.version}`;\r\n }\r\n else {\r\n return null;\r\n }\r\n })\r\n .filter(logString => logString)\r\n .join(' ');\r\n }\r\n}\r\n/**\r\n *\r\n * @param provider check if this provider provides a VersionService\r\n *\r\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\r\n * provides VersionService. The provider is not necessarily a 'app-version'\r\n * provider.\r\n */\r\nfunction isVersionServiceProvider(provider) {\r\n const component = provider.getComponent();\r\n return (component === null || component === void 0 ? void 0 : component.type) === \"VERSION\" /* ComponentType.VERSION */;\r\n}\n\nconst name$o = \"@firebase/app\";\nconst version$1 = \"0.9.0\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logger = new Logger('@firebase/app');\n\nconst name$n = \"@firebase/app-compat\";\n\nconst name$m = \"@firebase/analytics-compat\";\n\nconst name$l = \"@firebase/analytics\";\n\nconst name$k = \"@firebase/app-check-compat\";\n\nconst name$j = \"@firebase/app-check\";\n\nconst name$i = \"@firebase/auth\";\n\nconst name$h = \"@firebase/auth-compat\";\n\nconst name$g = \"@firebase/database\";\n\nconst name$f = \"@firebase/database-compat\";\n\nconst name$e = \"@firebase/functions\";\n\nconst name$d = \"@firebase/functions-compat\";\n\nconst name$c = \"@firebase/installations\";\n\nconst name$b = \"@firebase/installations-compat\";\n\nconst name$a = \"@firebase/messaging\";\n\nconst name$9 = \"@firebase/messaging-compat\";\n\nconst name$8 = \"@firebase/performance\";\n\nconst name$7 = \"@firebase/performance-compat\";\n\nconst name$6 = \"@firebase/remote-config\";\n\nconst name$5 = \"@firebase/remote-config-compat\";\n\nconst name$4 = \"@firebase/storage\";\n\nconst name$3 = \"@firebase/storage-compat\";\n\nconst name$2 = \"@firebase/firestore\";\n\nconst name$1 = \"@firebase/firestore-compat\";\n\nconst name = \"firebase\";\nconst version = \"9.15.0\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The default app name\r\n *\r\n * @internal\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\r\nconst PLATFORM_LOG_STRING = {\r\n [name$o]: 'fire-core',\r\n [name$n]: 'fire-core-compat',\r\n [name$l]: 'fire-analytics',\r\n [name$m]: 'fire-analytics-compat',\r\n [name$j]: 'fire-app-check',\r\n [name$k]: 'fire-app-check-compat',\r\n [name$i]: 'fire-auth',\r\n [name$h]: 'fire-auth-compat',\r\n [name$g]: 'fire-rtdb',\r\n [name$f]: 'fire-rtdb-compat',\r\n [name$e]: 'fire-fn',\r\n [name$d]: 'fire-fn-compat',\r\n [name$c]: 'fire-iid',\r\n [name$b]: 'fire-iid-compat',\r\n [name$a]: 'fire-fcm',\r\n [name$9]: 'fire-fcm-compat',\r\n [name$8]: 'fire-perf',\r\n [name$7]: 'fire-perf-compat',\r\n [name$6]: 'fire-rc',\r\n [name$5]: 'fire-rc-compat',\r\n [name$4]: 'fire-gcs',\r\n [name$3]: 'fire-gcs-compat',\r\n [name$2]: 'fire-fst',\r\n [name$1]: 'fire-fst-compat',\r\n 'fire-js': 'fire-js',\r\n [name]: 'fire-js-all'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nconst _apps = new Map();\r\n/**\r\n * Registered components.\r\n *\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst _components = new Map();\r\n/**\r\n * @param component - the component being added to this app's container\r\n *\r\n * @internal\r\n */\r\nfunction _addComponent(app, component) {\r\n try {\r\n app.container.addComponent(component);\r\n }\r\n catch (e) {\r\n logger.debug(`Component ${component.name} failed to register with FirebaseApp ${app.name}`, e);\r\n }\r\n}\r\n/**\r\n *\r\n * @internal\r\n */\r\nfunction _addOrOverwriteComponent(app, component) {\r\n app.container.addOrOverwriteComponent(component);\r\n}\r\n/**\r\n *\r\n * @param component - the component to register\r\n * @returns whether or not the component is registered successfully\r\n *\r\n * @internal\r\n */\r\nfunction _registerComponent(component) {\r\n const componentName = component.name;\r\n if (_components.has(componentName)) {\r\n logger.debug(`There were multiple attempts to register component ${componentName}.`);\r\n return false;\r\n }\r\n _components.set(componentName, component);\r\n // add the component to existing app instances\r\n for (const app of _apps.values()) {\r\n _addComponent(app, component);\r\n }\r\n return true;\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n *\r\n * @returns the provider for the service with the matching name\r\n *\r\n * @internal\r\n */\r\nfunction _getProvider(app, name) {\r\n const heartbeatController = app.container\r\n .getProvider('heartbeat')\r\n .getImmediate({ optional: true });\r\n if (heartbeatController) {\r\n void heartbeatController.triggerHeartbeat();\r\n }\r\n return app.container.getProvider(name);\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\r\n *\r\n * @internal\r\n */\r\nfunction _removeServiceInstance(app, name, instanceIdentifier = DEFAULT_ENTRY_NAME) {\r\n _getProvider(app, name).clearInstance(instanceIdentifier);\r\n}\r\n/**\r\n * Test only\r\n *\r\n * @internal\r\n */\r\nfunction _clearComponents() {\r\n _components.clear();\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERRORS = {\r\n [\"no-app\" /* AppError.NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\r\n 'call Firebase App.initializeApp()',\r\n [\"bad-app-name\" /* AppError.BAD_APP_NAME */]: \"Illegal App name: '{$appName}\",\r\n [\"duplicate-app\" /* AppError.DUPLICATE_APP */]: \"Firebase App named '{$appName}' already exists with different options or config\",\r\n [\"app-deleted\" /* AppError.APP_DELETED */]: \"Firebase App named '{$appName}' already deleted\",\r\n [\"no-options\" /* AppError.NO_OPTIONS */]: 'Need to provide options, when not being deployed to hosting via source.',\r\n [\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\r\n 'Firebase App instance.',\r\n [\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */]: 'First argument to `onLog` must be null or a function.',\r\n [\"idb-open\" /* AppError.IDB_OPEN */]: 'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-get\" /* AppError.IDB_GET */]: 'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-set\" /* AppError.IDB_WRITE */]: 'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-delete\" /* AppError.IDB_DELETE */]: 'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('app', 'Firebase', ERRORS);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FirebaseAppImpl {\r\n constructor(options, config, container) {\r\n this._isDeleted = false;\r\n this._options = Object.assign({}, options);\r\n this._config = Object.assign({}, config);\r\n this._name = config.name;\r\n this._automaticDataCollectionEnabled =\r\n config.automaticDataCollectionEnabled;\r\n this._container = container;\r\n this.container.addComponent(new Component('app', () => this, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n }\r\n get automaticDataCollectionEnabled() {\r\n this.checkDestroyed();\r\n return this._automaticDataCollectionEnabled;\r\n }\r\n set automaticDataCollectionEnabled(val) {\r\n this.checkDestroyed();\r\n this._automaticDataCollectionEnabled = val;\r\n }\r\n get name() {\r\n this.checkDestroyed();\r\n return this._name;\r\n }\r\n get options() {\r\n this.checkDestroyed();\r\n return this._options;\r\n }\r\n get config() {\r\n this.checkDestroyed();\r\n return this._config;\r\n }\r\n get container() {\r\n return this._container;\r\n }\r\n get isDeleted() {\r\n return this._isDeleted;\r\n }\r\n set isDeleted(val) {\r\n this._isDeleted = val;\r\n }\r\n /**\r\n * This function will throw an Error if the App has already been deleted -\r\n * use before performing API actions on the App.\r\n */\r\n checkDestroyed() {\r\n if (this.isDeleted) {\r\n throw ERROR_FACTORY.create(\"app-deleted\" /* AppError.APP_DELETED */, { appName: this._name });\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The current SDK version.\r\n *\r\n * @public\r\n */\r\nconst SDK_VERSION = version;\r\nfunction initializeApp(_options, rawConfig = {}) {\r\n let options = _options;\r\n if (typeof rawConfig !== 'object') {\r\n const name = rawConfig;\r\n rawConfig = { name };\r\n }\r\n const config = Object.assign({ name: DEFAULT_ENTRY_NAME, automaticDataCollectionEnabled: false }, rawConfig);\r\n const name = config.name;\r\n if (typeof name !== 'string' || !name) {\r\n throw ERROR_FACTORY.create(\"bad-app-name\" /* AppError.BAD_APP_NAME */, {\r\n appName: String(name)\r\n });\r\n }\r\n options || (options = getDefaultAppConfig());\r\n if (!options) {\r\n throw ERROR_FACTORY.create(\"no-options\" /* AppError.NO_OPTIONS */);\r\n }\r\n const existingApp = _apps.get(name);\r\n if (existingApp) {\r\n // return the existing app if options and config deep equal the ones in the existing app.\r\n if (deepEqual(options, existingApp.options) &&\r\n deepEqual(config, existingApp.config)) {\r\n return existingApp;\r\n }\r\n else {\r\n throw ERROR_FACTORY.create(\"duplicate-app\" /* AppError.DUPLICATE_APP */, { appName: name });\r\n }\r\n }\r\n const container = new ComponentContainer(name);\r\n for (const component of _components.values()) {\r\n container.addComponent(component);\r\n }\r\n const newApp = new FirebaseAppImpl(options, config, container);\r\n _apps.set(name, newApp);\r\n return newApp;\r\n}\r\n/**\r\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\r\n *\r\n * When called with no arguments, the default app is returned. When an app name\r\n * is provided, the app corresponding to that name is returned.\r\n *\r\n * An exception is thrown if the app being retrieved has not yet been\r\n * initialized.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return the default app\r\n * const app = getApp();\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return a named app\r\n * const otherApp = getApp(\"otherApp\");\r\n * ```\r\n *\r\n * @param name - Optional name of the app to return. If no name is\r\n * provided, the default is `\"[DEFAULT]\"`.\r\n *\r\n * @returns The app corresponding to the provided app name.\r\n * If no app name is provided, the default app is returned.\r\n *\r\n * @public\r\n */\r\nfunction getApp(name = DEFAULT_ENTRY_NAME) {\r\n const app = _apps.get(name);\r\n if (!app && name === DEFAULT_ENTRY_NAME) {\r\n return initializeApp();\r\n }\r\n if (!app) {\r\n throw ERROR_FACTORY.create(\"no-app\" /* AppError.NO_APP */, { appName: name });\r\n }\r\n return app;\r\n}\r\n/**\r\n * A (read-only) array of all initialized apps.\r\n * @public\r\n */\r\nfunction getApps() {\r\n return Array.from(_apps.values());\r\n}\r\n/**\r\n * Renders this app unusable and frees the resources of all associated\r\n * services.\r\n *\r\n * @example\r\n * ```javascript\r\n * deleteApp(app)\r\n * .then(function() {\r\n * console.log(\"App deleted successfully\");\r\n * })\r\n * .catch(function(error) {\r\n * console.log(\"Error deleting app:\", error);\r\n * });\r\n * ```\r\n *\r\n * @public\r\n */\r\nasync function deleteApp(app) {\r\n const name = app.name;\r\n if (_apps.has(name)) {\r\n _apps.delete(name);\r\n await Promise.all(app.container\r\n .getProviders()\r\n .map(provider => provider.delete()));\r\n app.isDeleted = true;\r\n }\r\n}\r\n/**\r\n * Registers a library's name and version for platform logging purposes.\r\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\r\n * @param version - Current version of that library.\r\n * @param variant - Bundle variant, e.g., node, rn, etc.\r\n *\r\n * @public\r\n */\r\nfunction registerVersion(libraryKeyOrName, version, variant) {\r\n var _a;\r\n // TODO: We can use this check to whitelist strings when/if we set up\r\n // a good whitelist system.\r\n let library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;\r\n if (variant) {\r\n library += `-${variant}`;\r\n }\r\n const libraryMismatch = library.match(/\\s|\\//);\r\n const versionMismatch = version.match(/\\s|\\//);\r\n if (libraryMismatch || versionMismatch) {\r\n const warning = [\r\n `Unable to register library \"${library}\" with version \"${version}\":`\r\n ];\r\n if (libraryMismatch) {\r\n warning.push(`library name \"${library}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n if (libraryMismatch && versionMismatch) {\r\n warning.push('and');\r\n }\r\n if (versionMismatch) {\r\n warning.push(`version name \"${version}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n logger.warn(warning.join(' '));\r\n return;\r\n }\r\n _registerComponent(new Component(`${library}-version`, () => ({ library, version }), \"VERSION\" /* ComponentType.VERSION */));\r\n}\r\n/**\r\n * Sets log handler for all Firebase SDKs.\r\n * @param logCallback - An optional custom log handler that executes user code whenever\r\n * the Firebase SDK makes a logging call.\r\n *\r\n * @public\r\n */\r\nfunction onLog(logCallback, options) {\r\n if (logCallback !== null && typeof logCallback !== 'function') {\r\n throw ERROR_FACTORY.create(\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */);\r\n }\r\n setUserLogHandler(logCallback, options);\r\n}\r\n/**\r\n * Sets log level for all Firebase SDKs.\r\n *\r\n * All of the log types above the current log level are captured (i.e. if\r\n * you set the log level to `info`, errors are logged, but `debug` and\r\n * `verbose` logs are not).\r\n *\r\n * @public\r\n */\r\nfunction setLogLevel(logLevel) {\r\n setLogLevel$1(logLevel);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DB_NAME = 'firebase-heartbeat-database';\r\nconst DB_VERSION = 1;\r\nconst STORE_NAME = 'firebase-heartbeat-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DB_NAME, DB_VERSION, {\r\n upgrade: (db, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through\r\n // behavior is what we want, because if there are multiple versions between\r\n // the old version and the current version, we want ALL the migrations\r\n // that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n db.createObjectStore(STORE_NAME);\r\n }\r\n }\r\n }).catch(e => {\r\n throw ERROR_FACTORY.create(\"idb-open\" /* AppError.IDB_OPEN */, {\r\n originalErrorMessage: e.message\r\n });\r\n });\r\n }\r\n return dbPromise;\r\n}\r\nasync function readHeartbeatsFromIndexedDB(app) {\r\n try {\r\n const db = await getDbPromise();\r\n return db\r\n .transaction(STORE_NAME)\r\n .objectStore(STORE_NAME)\r\n .get(computeKey(app));\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-get\" /* AppError.IDB_GET */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nasync function writeHeartbeatsToIndexedDB(app, heartbeatObject) {\r\n try {\r\n const db = await getDbPromise();\r\n const tx = db.transaction(STORE_NAME, 'readwrite');\r\n const objectStore = tx.objectStore(STORE_NAME);\r\n await objectStore.put(heartbeatObject, computeKey(app));\r\n return tx.done;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-set\" /* AppError.IDB_WRITE */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nfunction computeKey(app) {\r\n return `${app.name}!${app.options.appId}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst MAX_HEADER_BYTES = 1024;\r\n// 30 days\r\nconst STORED_HEARTBEAT_RETENTION_MAX_MILLIS = 30 * 24 * 60 * 60 * 1000;\r\nclass HeartbeatServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n /**\r\n * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\r\n * the header string.\r\n * Stores one record per date. This will be consolidated into the standard\r\n * format of one record per user agent string before being sent as a header.\r\n * Populated from indexedDB when the controller is instantiated and should\r\n * be kept in sync with indexedDB.\r\n * Leave public for easier testing.\r\n */\r\n this._heartbeatsCache = null;\r\n const app = this.container.getProvider('app').getImmediate();\r\n this._storage = new HeartbeatStorageImpl(app);\r\n this._heartbeatsCachePromise = this._storage.read().then(result => {\r\n this._heartbeatsCache = result;\r\n return result;\r\n });\r\n }\r\n /**\r\n * Called to report a heartbeat. The function will generate\r\n * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\r\n * to IndexedDB.\r\n * Note that we only store one heartbeat per day. So if a heartbeat for today is\r\n * already logged, subsequent calls to this function in the same day will be ignored.\r\n */\r\n async triggerHeartbeat() {\r\n const platformLogger = this.container\r\n .getProvider('platform-logger')\r\n .getImmediate();\r\n // This is the \"Firebase user agent\" string from the platform logger\r\n // service, not the browser user agent.\r\n const agent = platformLogger.getPlatformInfoString();\r\n const date = getUTCDateString();\r\n if (this._heartbeatsCache === null) {\r\n this._heartbeatsCache = await this._heartbeatsCachePromise;\r\n }\r\n // Do not store a heartbeat if one is already stored for this day\r\n // or if a header has already been sent today.\r\n if (this._heartbeatsCache.lastSentHeartbeatDate === date ||\r\n this._heartbeatsCache.heartbeats.some(singleDateHeartbeat => singleDateHeartbeat.date === date)) {\r\n return;\r\n }\r\n else {\r\n // There is no entry for this date. Create one.\r\n this._heartbeatsCache.heartbeats.push({ date, agent });\r\n }\r\n // Remove entries older than 30 days.\r\n this._heartbeatsCache.heartbeats = this._heartbeatsCache.heartbeats.filter(singleDateHeartbeat => {\r\n const hbTimestamp = new Date(singleDateHeartbeat.date).valueOf();\r\n const now = Date.now();\r\n return now - hbTimestamp <= STORED_HEARTBEAT_RETENTION_MAX_MILLIS;\r\n });\r\n return this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n /**\r\n * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\r\n * It also clears all heartbeats from memory as well as in IndexedDB.\r\n *\r\n * NOTE: Consuming product SDKs should not send the header if this method\r\n * returns an empty string.\r\n */\r\n async getHeartbeatsHeader() {\r\n if (this._heartbeatsCache === null) {\r\n await this._heartbeatsCachePromise;\r\n }\r\n // If it's still null or the array is empty, there is no data to send.\r\n if (this._heartbeatsCache === null ||\r\n this._heartbeatsCache.heartbeats.length === 0) {\r\n return '';\r\n }\r\n const date = getUTCDateString();\r\n // Extract as many heartbeats from the cache as will fit under the size limit.\r\n const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(this._heartbeatsCache.heartbeats);\r\n const headerString = base64urlEncodeWithoutPadding(JSON.stringify({ version: 2, heartbeats: heartbeatsToSend }));\r\n // Store last sent date to prevent another being logged/sent for the same day.\r\n this._heartbeatsCache.lastSentHeartbeatDate = date;\r\n if (unsentEntries.length > 0) {\r\n // Store any unsent entries if they exist.\r\n this._heartbeatsCache.heartbeats = unsentEntries;\r\n // This seems more likely than emptying the array (below) to lead to some odd state\r\n // since the cache isn't empty and this will be called again on the next request,\r\n // and is probably safest if we await it.\r\n await this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n else {\r\n this._heartbeatsCache.heartbeats = [];\r\n // Do not wait for this, to reduce latency.\r\n void this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n return headerString;\r\n }\r\n}\r\nfunction getUTCDateString() {\r\n const today = new Date();\r\n // Returns date format 'YYYY-MM-DD'\r\n return today.toISOString().substring(0, 10);\r\n}\r\nfunction extractHeartbeatsForHeader(heartbeatsCache, maxSize = MAX_HEADER_BYTES) {\r\n // Heartbeats grouped by user agent in the standard format to be sent in\r\n // the header.\r\n const heartbeatsToSend = [];\r\n // Single date format heartbeats that are not sent.\r\n let unsentEntries = heartbeatsCache.slice();\r\n for (const singleDateHeartbeat of heartbeatsCache) {\r\n // Look for an existing entry with the same user agent.\r\n const heartbeatEntry = heartbeatsToSend.find(hb => hb.agent === singleDateHeartbeat.agent);\r\n if (!heartbeatEntry) {\r\n // If no entry for this user agent exists, create one.\r\n heartbeatsToSend.push({\r\n agent: singleDateHeartbeat.agent,\r\n dates: [singleDateHeartbeat.date]\r\n });\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n // If the header would exceed max size, remove the added heartbeat\r\n // entry and stop adding to the header.\r\n heartbeatsToSend.pop();\r\n break;\r\n }\r\n }\r\n else {\r\n heartbeatEntry.dates.push(singleDateHeartbeat.date);\r\n // If the header would exceed max size, remove the added date\r\n // and stop adding to the header.\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n heartbeatEntry.dates.pop();\r\n break;\r\n }\r\n }\r\n // Pop unsent entry from queue. (Skipped if adding the entry exceeded\r\n // quota and the loop breaks early.)\r\n unsentEntries = unsentEntries.slice(1);\r\n }\r\n return {\r\n heartbeatsToSend,\r\n unsentEntries\r\n };\r\n}\r\nclass HeartbeatStorageImpl {\r\n constructor(app) {\r\n this.app = app;\r\n this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\r\n }\r\n async runIndexedDBEnvironmentCheck() {\r\n if (!isIndexedDBAvailable()) {\r\n return false;\r\n }\r\n else {\r\n return validateIndexedDBOpenable()\r\n .then(() => true)\r\n .catch(() => false);\r\n }\r\n }\r\n /**\r\n * Read all heartbeats.\r\n */\r\n async read() {\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return { heartbeats: [] };\r\n }\r\n else {\r\n const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\r\n return idbHeartbeatObject || { heartbeats: [] };\r\n }\r\n }\r\n // overwrite the storage with the provided heartbeats\r\n async overwrite(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: heartbeatsObject.heartbeats\r\n });\r\n }\r\n }\r\n // add heartbeats\r\n async add(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: [\r\n ...existingHeartbeatsObject.heartbeats,\r\n ...heartbeatsObject.heartbeats\r\n ]\r\n });\r\n }\r\n }\r\n}\r\n/**\r\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\r\n * in a platform logging header JSON object, stringified, and converted\r\n * to base 64.\r\n */\r\nfunction countBytes(heartbeatsCache) {\r\n // base64 has a restricted set of characters, all of which should be 1 byte.\r\n return base64urlEncodeWithoutPadding(\r\n // heartbeatsCache wrapper properties\r\n JSON.stringify({ version: 2, heartbeats: heartbeatsCache })).length;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerCoreComponents(variant) {\r\n _registerComponent(new Component('platform-logger', container => new PlatformLoggerServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n _registerComponent(new Component('heartbeat', container => new HeartbeatServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n // Register `app` package.\r\n registerVersion(name$o, version$1, variant);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name$o, version$1, 'esm2017');\r\n // Register platform SDK identifier (no version).\r\n registerVersion('fire-js', '');\r\n}\n\n/**\r\n * Firebase App\r\n *\r\n * @remarks This package coordinates the communication between the different Firebase components\r\n * @packageDocumentation\r\n */\r\nregisterCoreComponents('');\n\nexport { SDK_VERSION, DEFAULT_ENTRY_NAME as _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _registerComponent, _removeServiceInstance, deleteApp, getApp, getApps, initializeApp, onLog, registerVersion, setLogLevel };\n//# sourceMappingURL=index.esm2017.js.map\n","import { Deferred } from '@firebase/util';\n\n/**\r\n * Component for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass Component {\r\n /**\r\n *\r\n * @param name The public service name, e.g. app, auth, firestore, database\r\n * @param instanceFactory Service factory responsible for creating the public interface\r\n * @param type whether the service provided by the component is public or private\r\n */\r\n constructor(name, instanceFactory, type) {\r\n this.name = name;\r\n this.instanceFactory = instanceFactory;\r\n this.type = type;\r\n this.multipleInstances = false;\r\n /**\r\n * Properties to be added to the service namespace\r\n */\r\n this.serviceProps = {};\r\n this.instantiationMode = \"LAZY\" /* InstantiationMode.LAZY */;\r\n this.onInstanceCreated = null;\r\n }\r\n setInstantiationMode(mode) {\r\n this.instantiationMode = mode;\r\n return this;\r\n }\r\n setMultipleInstances(multipleInstances) {\r\n this.multipleInstances = multipleInstances;\r\n return this;\r\n }\r\n setServiceProps(props) {\r\n this.serviceProps = props;\r\n return this;\r\n }\r\n setInstanceCreatedCallback(callback) {\r\n this.onInstanceCreated = callback;\r\n return this;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\r\n * NameServiceMapping[T] is an alias for the type of the instance\r\n */\r\nclass Provider {\r\n constructor(name, container) {\r\n this.name = name;\r\n this.container = container;\r\n this.component = null;\r\n this.instances = new Map();\r\n this.instancesDeferred = new Map();\r\n this.instancesOptions = new Map();\r\n this.onInitCallbacks = new Map();\r\n }\r\n /**\r\n * @param identifier A provider can provide mulitple instances of a service\r\n * if this.component.multipleInstances is true.\r\n */\r\n get(identifier) {\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n if (!this.instancesDeferred.has(normalizedIdentifier)) {\r\n const deferred = new Deferred();\r\n this.instancesDeferred.set(normalizedIdentifier, deferred);\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n // initialize the service if it can be auto-initialized\r\n try {\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n if (instance) {\r\n deferred.resolve(instance);\r\n }\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception during get(), it should not cause\r\n // a fatal error. We just return the unresolved promise in this case.\r\n }\r\n }\r\n }\r\n return this.instancesDeferred.get(normalizedIdentifier).promise;\r\n }\r\n getImmediate(options) {\r\n var _a;\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(options === null || options === void 0 ? void 0 : options.identifier);\r\n const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n try {\r\n return this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n }\r\n catch (e) {\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n }\r\n else {\r\n // In case a component is not initialized and should/can not be auto-initialized at the moment, return null if the optional flag is set, or throw\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw Error(`Service ${this.name} is not available`);\r\n }\r\n }\r\n }\r\n getComponent() {\r\n return this.component;\r\n }\r\n setComponent(component) {\r\n if (component.name !== this.name) {\r\n throw Error(`Mismatching Component ${component.name} for Provider ${this.name}.`);\r\n }\r\n if (this.component) {\r\n throw Error(`Component for ${this.name} has already been provided`);\r\n }\r\n this.component = component;\r\n // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\r\n if (!this.shouldAutoInitialize()) {\r\n return;\r\n }\r\n // if the service is eager, initialize the default instance\r\n if (isComponentEager(component)) {\r\n try {\r\n this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\r\n }\r\n catch (e) {\r\n // when the instance factory for an eager Component throws an exception during the eager\r\n // initialization, it should not cause a fatal error.\r\n // TODO: Investigate if we need to make it configurable, because some component may want to cause\r\n // a fatal error in this case?\r\n }\r\n }\r\n // Create service instances for the pending promises and resolve them\r\n // NOTE: if this.multipleInstances is false, only the default instance will be created\r\n // and all promises with resolve with it regardless of the identifier.\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n try {\r\n // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n instanceDeferred.resolve(instance);\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception, it should not cause\r\n // a fatal error. We just leave the promise unresolved.\r\n }\r\n }\r\n }\r\n clearInstance(identifier = DEFAULT_ENTRY_NAME) {\r\n this.instancesDeferred.delete(identifier);\r\n this.instancesOptions.delete(identifier);\r\n this.instances.delete(identifier);\r\n }\r\n // app.delete() will call this method on every provider to delete the services\r\n // TODO: should we mark the provider as deleted?\r\n async delete() {\r\n const services = Array.from(this.instances.values());\r\n await Promise.all([\r\n ...services\r\n .filter(service => 'INTERNAL' in service) // legacy services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service.INTERNAL.delete()),\r\n ...services\r\n .filter(service => '_delete' in service) // modularized services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service._delete())\r\n ]);\r\n }\r\n isComponentSet() {\r\n return this.component != null;\r\n }\r\n isInitialized(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instances.has(identifier);\r\n }\r\n getOptions(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instancesOptions.get(identifier) || {};\r\n }\r\n initialize(opts = {}) {\r\n const { options = {} } = opts;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(opts.instanceIdentifier);\r\n if (this.isInitialized(normalizedIdentifier)) {\r\n throw Error(`${this.name}(${normalizedIdentifier}) has already been initialized`);\r\n }\r\n if (!this.isComponentSet()) {\r\n throw Error(`Component ${this.name} has not been registered yet`);\r\n }\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier,\r\n options\r\n });\r\n // resolve any pending promise waiting for the service instance\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n if (normalizedIdentifier === normalizedDeferredIdentifier) {\r\n instanceDeferred.resolve(instance);\r\n }\r\n }\r\n return instance;\r\n }\r\n /**\r\n *\r\n * @param callback - a function that will be invoked after the provider has been initialized by calling provider.initialize().\r\n * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\r\n *\r\n * @param identifier An optional instance identifier\r\n * @returns a function to unregister the callback\r\n */\r\n onInit(callback, identifier) {\r\n var _a;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n const existingCallbacks = (_a = this.onInitCallbacks.get(normalizedIdentifier)) !== null && _a !== void 0 ? _a : new Set();\r\n existingCallbacks.add(callback);\r\n this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\r\n const existingInstance = this.instances.get(normalizedIdentifier);\r\n if (existingInstance) {\r\n callback(existingInstance, normalizedIdentifier);\r\n }\r\n return () => {\r\n existingCallbacks.delete(callback);\r\n };\r\n }\r\n /**\r\n * Invoke onInit callbacks synchronously\r\n * @param instance the service instance`\r\n */\r\n invokeOnInitCallbacks(instance, identifier) {\r\n const callbacks = this.onInitCallbacks.get(identifier);\r\n if (!callbacks) {\r\n return;\r\n }\r\n for (const callback of callbacks) {\r\n try {\r\n callback(instance, identifier);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInit callback\r\n }\r\n }\r\n }\r\n getOrInitializeService({ instanceIdentifier, options = {} }) {\r\n let instance = this.instances.get(instanceIdentifier);\r\n if (!instance && this.component) {\r\n instance = this.component.instanceFactory(this.container, {\r\n instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\r\n options\r\n });\r\n this.instances.set(instanceIdentifier, instance);\r\n this.instancesOptions.set(instanceIdentifier, options);\r\n /**\r\n * Invoke onInit listeners.\r\n * Note this.component.onInstanceCreated is different, which is used by the component creator,\r\n * while onInit listeners are registered by consumers of the provider.\r\n */\r\n this.invokeOnInitCallbacks(instance, instanceIdentifier);\r\n /**\r\n * Order is important\r\n * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\r\n * makes `isInitialized()` return true.\r\n */\r\n if (this.component.onInstanceCreated) {\r\n try {\r\n this.component.onInstanceCreated(this.container, instanceIdentifier, instance);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInstanceCreatedCallback\r\n }\r\n }\r\n }\r\n return instance || null;\r\n }\r\n normalizeInstanceIdentifier(identifier = DEFAULT_ENTRY_NAME) {\r\n if (this.component) {\r\n return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\r\n }\r\n else {\r\n return identifier; // assume multiple instances are supported before the component is provided.\r\n }\r\n }\r\n shouldAutoInitialize() {\r\n return (!!this.component &&\r\n this.component.instantiationMode !== \"EXPLICIT\" /* InstantiationMode.EXPLICIT */);\r\n }\r\n}\r\n// undefined should be passed to the service factory for the default instance\r\nfunction normalizeIdentifierForFactory(identifier) {\r\n return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\r\n}\r\nfunction isComponentEager(component) {\r\n return component.instantiationMode === \"EAGER\" /* InstantiationMode.EAGER */;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass ComponentContainer {\r\n constructor(name) {\r\n this.name = name;\r\n this.providers = new Map();\r\n }\r\n /**\r\n *\r\n * @param component Component being added\r\n * @param overwrite When a component with the same name has already been registered,\r\n * if overwrite is true: overwrite the existing component with the new component and create a new\r\n * provider with the new component. It can be useful in tests where you want to use different mocks\r\n * for different tests.\r\n * if overwrite is false: throw an exception\r\n */\r\n addComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n throw new Error(`Component ${component.name} has already been registered with ${this.name}`);\r\n }\r\n provider.setComponent(component);\r\n }\r\n addOrOverwriteComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n // delete the existing provider from the container, so we can register the new component\r\n this.providers.delete(component.name);\r\n }\r\n this.addComponent(component);\r\n }\r\n /**\r\n * getProvider provides a type safe interface where it can only be called with a field name\r\n * present in NameServiceMapping interface.\r\n *\r\n * Firebase SDKs providing services should extend NameServiceMapping interface to register\r\n * themselves.\r\n */\r\n getProvider(name) {\r\n if (this.providers.has(name)) {\r\n return this.providers.get(name);\r\n }\r\n // create a Provider for a service that hasn't registered with Firebase\r\n const provider = new Provider(name, this);\r\n this.providers.set(name, provider);\r\n return provider;\r\n }\r\n getProviders() {\r\n return Array.from(this.providers.values());\r\n }\r\n}\n\nexport { Component, ComponentContainer, Provider };\n//# sourceMappingURL=index.esm2017.js.map\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A container for all of the Logger instances\r\n */\r\nconst instances = [];\r\n/**\r\n * The JS SDK supports 5 log levels and also allows a user the ability to\r\n * silence the logs altogether.\r\n *\r\n * The order is a follows:\r\n * DEBUG < VERBOSE < INFO < WARN < ERROR\r\n *\r\n * All of the log types above the current log level will be captured (i.e. if\r\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\r\n * `VERBOSE` logs will not)\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\r\n LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\r\n LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\r\n LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\r\n LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\r\n LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\r\n})(LogLevel || (LogLevel = {}));\r\nconst levelStringToEnum = {\r\n 'debug': LogLevel.DEBUG,\r\n 'verbose': LogLevel.VERBOSE,\r\n 'info': LogLevel.INFO,\r\n 'warn': LogLevel.WARN,\r\n 'error': LogLevel.ERROR,\r\n 'silent': LogLevel.SILENT\r\n};\r\n/**\r\n * The default log level\r\n */\r\nconst defaultLogLevel = LogLevel.INFO;\r\n/**\r\n * By default, `console.debug` is not displayed in the developer console (in\r\n * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n * logs to the `console.log` function.\r\n */\r\nconst ConsoleMethod = {\r\n [LogLevel.DEBUG]: 'log',\r\n [LogLevel.VERBOSE]: 'log',\r\n [LogLevel.INFO]: 'info',\r\n [LogLevel.WARN]: 'warn',\r\n [LogLevel.ERROR]: 'error'\r\n};\r\n/**\r\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n * messages on to their corresponding console counterparts (if the log method\r\n * is supported by the current log level)\r\n */\r\nconst defaultLogHandler = (instance, logType, ...args) => {\r\n if (logType < instance.logLevel) {\r\n return;\r\n }\r\n const now = new Date().toISOString();\r\n const method = ConsoleMethod[logType];\r\n if (method) {\r\n console[method](`[${now}] ${instance.name}:`, ...args);\r\n }\r\n else {\r\n throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\r\n }\r\n};\r\nclass Logger {\r\n /**\r\n * Gives you an instance of a Logger to capture messages according to\r\n * Firebase's logging scheme.\r\n *\r\n * @param name The name that the logs will be associated with\r\n */\r\n constructor(name) {\r\n this.name = name;\r\n /**\r\n * The log level of the given Logger instance.\r\n */\r\n this._logLevel = defaultLogLevel;\r\n /**\r\n * The main (internal) log handler for the Logger instance.\r\n * Can be set to a new function in internal package code but not by user.\r\n */\r\n this._logHandler = defaultLogHandler;\r\n /**\r\n * The optional, additional, user-defined log handler for the Logger instance.\r\n */\r\n this._userLogHandler = null;\r\n /**\r\n * Capture the current instance for later use\r\n */\r\n instances.push(this);\r\n }\r\n get logLevel() {\r\n return this._logLevel;\r\n }\r\n set logLevel(val) {\r\n if (!(val in LogLevel)) {\r\n throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\r\n }\r\n this._logLevel = val;\r\n }\r\n // Workaround for setter/getter having to be the same type.\r\n setLogLevel(val) {\r\n this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\r\n }\r\n get logHandler() {\r\n return this._logHandler;\r\n }\r\n set logHandler(val) {\r\n if (typeof val !== 'function') {\r\n throw new TypeError('Value assigned to `logHandler` must be a function');\r\n }\r\n this._logHandler = val;\r\n }\r\n get userLogHandler() {\r\n return this._userLogHandler;\r\n }\r\n set userLogHandler(val) {\r\n this._userLogHandler = val;\r\n }\r\n /**\r\n * The functions below are all based on the `console` interface\r\n */\r\n debug(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\r\n this._logHandler(this, LogLevel.DEBUG, ...args);\r\n }\r\n log(...args) {\r\n this._userLogHandler &&\r\n this._userLogHandler(this, LogLevel.VERBOSE, ...args);\r\n this._logHandler(this, LogLevel.VERBOSE, ...args);\r\n }\r\n info(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\r\n this._logHandler(this, LogLevel.INFO, ...args);\r\n }\r\n warn(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\r\n this._logHandler(this, LogLevel.WARN, ...args);\r\n }\r\n error(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\r\n this._logHandler(this, LogLevel.ERROR, ...args);\r\n }\r\n}\r\nfunction setLogLevel(level) {\r\n instances.forEach(inst => {\r\n inst.setLogLevel(level);\r\n });\r\n}\r\nfunction setUserLogHandler(logCallback, options) {\r\n for (const instance of instances) {\r\n let customLogLevel = null;\r\n if (options && options.level) {\r\n customLogLevel = levelStringToEnum[options.level];\r\n }\r\n if (logCallback === null) {\r\n instance.userLogHandler = null;\r\n }\r\n else {\r\n instance.userLogHandler = (instance, level, ...args) => {\r\n const message = args\r\n .map(arg => {\r\n if (arg == null) {\r\n return null;\r\n }\r\n else if (typeof arg === 'string') {\r\n return arg;\r\n }\r\n else if (typeof arg === 'number' || typeof arg === 'boolean') {\r\n return arg.toString();\r\n }\r\n else if (arg instanceof Error) {\r\n return arg.message;\r\n }\r\n else {\r\n try {\r\n return JSON.stringify(arg);\r\n }\r\n catch (ignored) {\r\n return null;\r\n }\r\n }\r\n })\r\n .filter(arg => arg)\r\n .join(' ');\r\n if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\r\n logCallback({\r\n level: LogLevel[level].toLowerCase(),\r\n message,\r\n args,\r\n type: instance.name\r\n });\r\n }\r\n };\r\n }\r\n }\r\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };\n//# sourceMappingURL=index.esm2017.js.map\n","function f(r){throw new Error(\"Unexpected object: \"+r)}var a=(e=>(e[e.First=0]=\"First\",e[e.Previous=1]=\"Previous\",e[e.Next=2]=\"Next\",e[e.Last=3]=\"Last\",e[e.Specific=4]=\"Specific\",e[e.Nothing=5]=\"Nothing\",e))(a||{});function x(r,n){let t=n.resolveItems();if(t.length<=0)return null;let l=n.resolveActiveIndex(),s=l!=null?l:-1,d=(()=>{switch(r.focus){case 0:return t.findIndex(e=>!n.resolveDisabled(e));case 1:{let e=t.slice().reverse().findIndex((i,c,u)=>s!==-1&&u.length-c-1>=s?!1:!n.resolveDisabled(i));return e===-1?e:t.length-1-e}case 2:return t.findIndex((e,i)=>i<=s?!1:!n.resolveDisabled(e));case 3:{let e=t.slice().reverse().findIndex(i=>!n.resolveDisabled(i));return e===-1?e:t.length-1-e}case 4:return t.findIndex(e=>n.resolveId(e)===r.id);case 5:return null;default:f(r)}})();return d===-1?l:d}export{a as Focus,x as calculateActiveIndex};\n","import{watchEffect as u}from\"vue\";import{getOwnerDocument as E}from'../utils/owner.js';function p({container:e,accept:t,walk:d,enabled:o}){u(()=>{let r=e.value;if(!r||o!==void 0&&!o.value)return;let l=E(e);if(!l)return;let c=Object.assign(f=>t(f),{acceptNode:t}),n=l.createTreeWalker(r,NodeFilter.SHOW_ELEMENT,c,!1);for(;n.nextNode();)d(n.currentNode)})}export{p as useTreeWalker};\n","import{ref as o}from\"vue\";function r(e){return[e.screenX,e.screenY]}function u(){let e=o([-1,-1]);return{wasMoved(n){let t=r(n);return e.value[0]===t[0]&&e.value[1]===t[1]?!1:(e.value=t,!0)},update(n){e.value=r(n)}}}export{u as useTrackedPointer};\n","import{Fragment as Z,computed as c,defineComponent as H,h as Q,inject as z,nextTick as N,onMounted as J,onUnmounted as ee,provide as te,ref as M,toRaw as x,watch as W,watchEffect as G}from\"vue\";import{Features as q,render as K,omit as X,compact as oe}from'../../utils/render.js';import{useId as U}from'../../hooks/use-id.js';import{Keys as D}from'../../keyboard.js';import{calculateActiveIndex as le,Focus as V}from'../../utils/calculate-active-index.js';import{dom as g}from'../../utils/dom.js';import{useOpenClosed as ne,State as _,useOpenClosedProvider as ae}from'../../internal/open-closed.js';import{match as L}from'../../utils/match.js';import{useResolveButtonType as ie}from'../../hooks/use-resolve-button-type.js';import{useTreeWalker as ue}from'../../hooks/use-tree-walker.js';import{sortByDomNode as re}from'../../utils/focus-management.js';import{useOutsideClick as se}from'../../hooks/use-outside-click.js';import{Hidden as de,Features as pe}from'../../internal/hidden.js';import{objectToFormEntries as fe}from'../../utils/form.js';import{useControllable as be}from'../../hooks/use-controllable.js';import{useTrackedPointer as ve}from'../../hooks/use-tracked-pointer.js';import{isMobile as me}from'../../utils/platform.js';import{disposables as ce}from'../../utils/disposables.js';import{getOwnerDocument as xe}from'../../utils/owner.js';function Oe(l,y){return l===y}var Se=(r=>(r[r.Open=0]=\"Open\",r[r.Closed=1]=\"Closed\",r))(Se||{}),Ce=(r=>(r[r.Single=0]=\"Single\",r[r.Multi=1]=\"Multi\",r))(Ce||{}),ge=(r=>(r[r.Pointer=0]=\"Pointer\",r[r.Other=1]=\"Other\",r))(ge||{});let Y=Symbol(\"ComboboxContext\");function $(l){let y=z(Y,null);if(y===null){let r=new Error(`<${l} /> is missing a parent <Combobox /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,$),r}return y}let Je=H({name:\"Combobox\",emits:{\"update:modelValue\":l=>!0},props:{as:{type:[Object,String],default:\"template\"},disabled:{type:[Boolean],default:!1},by:{type:[String,Function],default:()=>Oe},modelValue:{type:[Object,String,Number,Boolean],default:void 0},defaultValue:{type:[Object,String,Number,Boolean],default:void 0},form:{type:String,optional:!0},name:{type:String,optional:!0},nullable:{type:Boolean,default:!1},multiple:{type:[Boolean],default:!1}},inheritAttrs:!1,setup(l,{slots:y,attrs:r,emit:w}){let e=M(1),t=M(null),S=M(null),p=M(null),d=M(null),b=M({static:!1,hold:!1}),v=M([]),O=M(null),I=M(1),P=M(!1);function j(n=u=>u){let u=O.value!==null?v.value[O.value]:null,s=re(n(v.value.slice()),f=>g(f.dataRef.domRef)),a=u?s.indexOf(u):null;return a===-1&&(a=null),{options:s,activeOptionIndex:a}}let k=c(()=>l.multiple?1:0),m=c(()=>l.nullable),[o,h]=be(c(()=>l.modelValue),n=>w(\"update:modelValue\",n),c(()=>l.defaultValue)),C=c(()=>o.value===void 0?L(k.value,{[1]:[],[0]:void 0}):o.value),E=null,R=null,i={comboboxState:e,value:C,mode:k,compare(n,u){if(typeof l.by==\"string\"){let s=l.by;return(n==null?void 0:n[s])===(u==null?void 0:u[s])}return l.by(n,u)},defaultValue:c(()=>l.defaultValue),nullable:m,inputRef:S,labelRef:t,buttonRef:p,optionsRef:d,disabled:c(()=>l.disabled),options:v,change(n){h(n)},activeOptionIndex:c(()=>{if(P.value&&O.value===null&&v.value.length>0){let n=v.value.findIndex(u=>!u.dataRef.disabled);n!==-1&&(O.value=n)}return O.value}),activationTrigger:I,optionsPropsRef:b,closeCombobox(){P.value=!1,!l.disabled&&e.value!==1&&(e.value=1,O.value=null)},openCombobox(){if(P.value=!0,l.disabled||e.value===0)return;let n=v.value.findIndex(u=>{let s=x(u.dataRef.value);return L(k.value,{[0]:()=>i.compare(x(i.value.value),x(s)),[1]:()=>x(i.value.value).some(f=>i.compare(x(f),x(s)))})});n!==-1&&(O.value=n),e.value=0},goToOption(n,u,s){P.value=!1,E!==null&&cancelAnimationFrame(E),E=requestAnimationFrame(()=>{if(l.disabled||d.value&&!b.value.static&&e.value===1)return;let a=j();if(a.activeOptionIndex===null){let T=a.options.findIndex(B=>!B.dataRef.disabled);T!==-1&&(a.activeOptionIndex=T)}let f=le(n===V.Specific?{focus:V.Specific,id:u}:{focus:n},{resolveItems:()=>a.options,resolveActiveIndex:()=>a.activeOptionIndex,resolveId:T=>T.id,resolveDisabled:T=>T.dataRef.disabled});O.value=f,I.value=s!=null?s:1,v.value=a.options})},selectOption(n){let u=v.value.find(a=>a.id===n);if(!u)return;let{dataRef:s}=u;h(L(k.value,{[0]:()=>s.value,[1]:()=>{let a=x(i.value.value).slice(),f=x(s.value),T=a.findIndex(B=>i.compare(f,x(B)));return T===-1?a.push(f):a.splice(T,1),a}}))},selectActiveOption(){if(i.activeOptionIndex.value===null)return;let{dataRef:n,id:u}=v.value[i.activeOptionIndex.value];h(L(k.value,{[0]:()=>n.value,[1]:()=>{let s=x(i.value.value).slice(),a=x(n.value),f=s.findIndex(T=>i.compare(a,x(T)));return f===-1?s.push(a):s.splice(f,1),s}})),i.goToOption(V.Specific,u)},registerOption(n,u){R&&cancelAnimationFrame(R);let s={id:n,dataRef:u},a=j(f=>(f.push(s),f));if(O.value===null){let f=u.value.value;L(k.value,{[0]:()=>i.compare(x(i.value.value),x(f)),[1]:()=>x(i.value.value).some(B=>i.compare(x(B),x(f)))})&&(a.activeOptionIndex=a.options.indexOf(s))}v.value=a.options,O.value=a.activeOptionIndex,I.value=1,a.options.some(f=>!g(f.dataRef.domRef))&&(R=requestAnimationFrame(()=>{let f=j();v.value=f.options,O.value=f.activeOptionIndex}))},unregisterOption(n){var s;i.activeOptionIndex.value!==null&&((s=i.options.value[i.activeOptionIndex.value])==null?void 0:s.id)===n&&(P.value=!0);let u=j(a=>{let f=a.findIndex(T=>T.id===n);return f!==-1&&a.splice(f,1),a});v.value=u.options,O.value=u.activeOptionIndex,I.value=1}};se([S,p,d],()=>i.closeCombobox(),c(()=>e.value===0)),te(Y,i),ae(c(()=>L(e.value,{[0]:_.Open,[1]:_.Closed})));let A=c(()=>i.activeOptionIndex.value===null?null:v.value[i.activeOptionIndex.value].dataRef.value),F=c(()=>{var n;return(n=g(S))==null?void 0:n.closest(\"form\")});return J(()=>{W([F],()=>{if(!F.value||l.defaultValue===void 0)return;function n(){i.change(l.defaultValue)}return F.value.addEventListener(\"reset\",n),()=>{var u;(u=F.value)==null||u.removeEventListener(\"reset\",n)}},{immediate:!0})}),()=>{let{name:n,disabled:u,form:s,...a}=l,f={open:e.value===0,disabled:u,activeIndex:i.activeOptionIndex.value,activeOption:A.value,value:C.value};return Q(Z,[...n!=null&&C.value!=null?fe({[n]:C.value}).map(([T,B])=>Q(de,oe({features:pe.Hidden,key:T,as:\"input\",type:\"hidden\",hidden:!0,readOnly:!0,form:s,name:T,value:B}))):[],K({theirProps:{...r,...X(a,[\"modelValue\",\"defaultValue\",\"nullable\",\"multiple\",\"onUpdate:modelValue\",\"by\"])},ourProps:{},slot:f,slots:y,attrs:r,name:\"Combobox\"})])}}}),We=H({name:\"ComboboxLabel\",props:{as:{type:[Object,String],default:\"label\"},id:{type:String,default:()=>`headlessui-combobox-label-${U()}`}},setup(l,{attrs:y,slots:r}){let w=$(\"ComboboxLabel\");function e(){var t;(t=g(w.inputRef))==null||t.focus({preventScroll:!0})}return()=>{let t={open:w.comboboxState.value===0,disabled:w.disabled.value},{id:S,...p}=l,d={id:S,ref:w.labelRef,onClick:e};return K({ourProps:d,theirProps:p,slot:t,attrs:y,slots:r,name:\"ComboboxLabel\"})}}}),Ge=H({name:\"ComboboxButton\",props:{as:{type:[Object,String],default:\"button\"},id:{type:String,default:()=>`headlessui-combobox-button-${U()}`}},setup(l,{attrs:y,slots:r,expose:w}){let e=$(\"ComboboxButton\");w({el:e.buttonRef,$el:e.buttonRef});function t(d){e.disabled.value||(e.comboboxState.value===0?e.closeCombobox():(d.preventDefault(),e.openCombobox()),N(()=>{var b;return(b=g(e.inputRef))==null?void 0:b.focus({preventScroll:!0})}))}function S(d){switch(d.key){case D.ArrowDown:d.preventDefault(),d.stopPropagation(),e.comboboxState.value===1&&e.openCombobox(),N(()=>{var b;return(b=e.inputRef.value)==null?void 0:b.focus({preventScroll:!0})});return;case D.ArrowUp:d.preventDefault(),d.stopPropagation(),e.comboboxState.value===1&&(e.openCombobox(),N(()=>{e.value.value||e.goToOption(V.Last)})),N(()=>{var b;return(b=e.inputRef.value)==null?void 0:b.focus({preventScroll:!0})});return;case D.Escape:if(e.comboboxState.value!==0)return;d.preventDefault(),e.optionsRef.value&&!e.optionsPropsRef.value.static&&d.stopPropagation(),e.closeCombobox(),N(()=>{var b;return(b=e.inputRef.value)==null?void 0:b.focus({preventScroll:!0})});return}}let p=ie(c(()=>({as:l.as,type:y.type})),e.buttonRef);return()=>{var I,P;let d={open:e.comboboxState.value===0,disabled:e.disabled.value,value:e.value.value},{id:b,...v}=l,O={ref:e.buttonRef,id:b,type:p.value,tabindex:\"-1\",\"aria-haspopup\":\"listbox\",\"aria-controls\":(I=g(e.optionsRef))==null?void 0:I.id,\"aria-expanded\":e.comboboxState.value===0,\"aria-labelledby\":e.labelRef.value?[(P=g(e.labelRef))==null?void 0:P.id,b].join(\" \"):void 0,disabled:e.disabled.value===!0?!0:void 0,onKeydown:S,onClick:t};return K({ourProps:O,theirProps:v,slot:d,attrs:y,slots:r,name:\"ComboboxButton\"})}}}),Qe=H({name:\"ComboboxInput\",props:{as:{type:[Object,String],default:\"input\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},displayValue:{type:Function},defaultValue:{type:String,default:void 0},id:{type:String,default:()=>`headlessui-combobox-input-${U()}`}},emits:{change:l=>!0},setup(l,{emit:y,attrs:r,slots:w,expose:e}){let t=$(\"ComboboxInput\"),S=c(()=>xe(g(t.inputRef))),p={value:!1};e({el:t.inputRef,$el:t.inputRef});function d(){t.change(null);let o=g(t.optionsRef);o&&(o.scrollTop=0),t.goToOption(V.Nothing)}let b=c(()=>{var h;let o=t.value.value;return g(t.inputRef)?typeof l.displayValue!=\"undefined\"&&o!==void 0?(h=l.displayValue(o))!=null?h:\"\":typeof o==\"string\"?o:\"\":\"\"});J(()=>{W([b,t.comboboxState,S],([o,h],[C,E])=>{if(p.value)return;let R=g(t.inputRef);R&&((E===0&&h===1||o!==C)&&(R.value=o),requestAnimationFrame(()=>{var F;if(p.value||!R||((F=S.value)==null?void 0:F.activeElement)!==R)return;let{selectionStart:i,selectionEnd:A}=R;Math.abs((A!=null?A:0)-(i!=null?i:0))===0&&i===0&&R.setSelectionRange(R.value.length,R.value.length)}))},{immediate:!0}),W([t.comboboxState],([o],[h])=>{if(o===0&&h===1){if(p.value)return;let C=g(t.inputRef);if(!C)return;let E=C.value,{selectionStart:R,selectionEnd:i,selectionDirection:A}=C;C.value=\"\",C.value=E,A!==null?C.setSelectionRange(R,i,A):C.setSelectionRange(R,i)}})});let v=M(!1);function O(){v.value=!0}function I(){ce().nextFrame(()=>{v.value=!1})}function P(o){switch(p.value=!0,o.key){case D.Enter:if(p.value=!1,t.comboboxState.value!==0||v.value)return;if(o.preventDefault(),o.stopPropagation(),t.activeOptionIndex.value===null){t.closeCombobox();return}t.selectActiveOption(),t.mode.value===0&&t.closeCombobox();break;case D.ArrowDown:return p.value=!1,o.preventDefault(),o.stopPropagation(),L(t.comboboxState.value,{[0]:()=>t.goToOption(V.Next),[1]:()=>t.openCombobox()});case D.ArrowUp:return p.value=!1,o.preventDefault(),o.stopPropagation(),L(t.comboboxState.value,{[0]:()=>t.goToOption(V.Previous),[1]:()=>{t.openCombobox(),N(()=>{t.value.value||t.goToOption(V.Last)})}});case D.Home:if(o.shiftKey)break;return p.value=!1,o.preventDefault(),o.stopPropagation(),t.goToOption(V.First);case D.PageUp:return p.value=!1,o.preventDefault(),o.stopPropagation(),t.goToOption(V.First);case D.End:if(o.shiftKey)break;return p.value=!1,o.preventDefault(),o.stopPropagation(),t.goToOption(V.Last);case D.PageDown:return p.value=!1,o.preventDefault(),o.stopPropagation(),t.goToOption(V.Last);case D.Escape:if(p.value=!1,t.comboboxState.value!==0)return;o.preventDefault(),t.optionsRef.value&&!t.optionsPropsRef.value.static&&o.stopPropagation(),t.nullable.value&&t.mode.value===0&&t.value.value===null&&d(),t.closeCombobox();break;case D.Tab:if(p.value=!1,t.comboboxState.value!==0)return;t.mode.value===0&&t.selectActiveOption(),t.closeCombobox();break}}function j(o){y(\"change\",o),t.nullable.value&&t.mode.value===0&&o.target.value===\"\"&&d(),t.openCombobox()}function k(){p.value=!1}let m=c(()=>{var o,h,C,E;return(E=(C=(h=l.defaultValue)!=null?h:t.defaultValue.value!==void 0?(o=l.displayValue)==null?void 0:o.call(l,t.defaultValue.value):null)!=null?C:t.defaultValue.value)!=null?E:\"\"});return()=>{var A,F,n,u,s,a;let o={open:t.comboboxState.value===0},{id:h,displayValue:C,onChange:E,...R}=l,i={\"aria-controls\":(A=t.optionsRef.value)==null?void 0:A.id,\"aria-expanded\":t.comboboxState.value===0,\"aria-activedescendant\":t.activeOptionIndex.value===null||(F=t.options.value[t.activeOptionIndex.value])==null?void 0:F.id,\"aria-labelledby\":(s=(n=g(t.labelRef))==null?void 0:n.id)!=null?s:(u=g(t.buttonRef))==null?void 0:u.id,\"aria-autocomplete\":\"list\",id:h,onCompositionstart:O,onCompositionend:I,onKeydown:P,onInput:j,onBlur:k,role:\"combobox\",type:(a=r.type)!=null?a:\"text\",tabIndex:0,ref:t.inputRef,defaultValue:m.value,disabled:t.disabled.value===!0?!0:void 0};return K({ourProps:i,theirProps:R,slot:o,attrs:r,slots:w,features:q.RenderStrategy|q.Static,name:\"ComboboxInput\"})}}}),Xe=H({name:\"ComboboxOptions\",props:{as:{type:[Object,String],default:\"ul\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},hold:{type:[Boolean],default:!1}},setup(l,{attrs:y,slots:r,expose:w}){let e=$(\"ComboboxOptions\"),t=`headlessui-combobox-options-${U()}`;w({el:e.optionsRef,$el:e.optionsRef}),G(()=>{e.optionsPropsRef.value.static=l.static}),G(()=>{e.optionsPropsRef.value.hold=l.hold});let S=ne(),p=c(()=>S!==null?(S.value&_.Open)===_.Open:e.comboboxState.value===0);return ue({container:c(()=>g(e.optionsRef)),enabled:c(()=>e.comboboxState.value===0),accept(d){return d.getAttribute(\"role\")===\"option\"?NodeFilter.FILTER_REJECT:d.hasAttribute(\"role\")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(d){d.setAttribute(\"role\",\"none\")}}),()=>{var O,I,P;let d={open:e.comboboxState.value===0},b={\"aria-labelledby\":(P=(O=g(e.labelRef))==null?void 0:O.id)!=null?P:(I=g(e.buttonRef))==null?void 0:I.id,id:t,ref:e.optionsRef,role:\"listbox\",\"aria-multiselectable\":e.mode.value===1?!0:void 0},v=X(l,[\"hold\"]);return K({ourProps:b,theirProps:v,slot:d,attrs:y,slots:r,features:q.RenderStrategy|q.Static,visible:p.value,name:\"ComboboxOptions\"})}}}),Ye=H({name:\"ComboboxOption\",props:{as:{type:[Object,String],default:\"li\"},value:{type:[Object,String,Number,Boolean]},disabled:{type:Boolean,default:!1}},setup(l,{slots:y,attrs:r,expose:w}){let e=$(\"ComboboxOption\"),t=`headlessui-combobox-option-${U()}`,S=M(null);w({el:S,$el:S});let p=c(()=>e.activeOptionIndex.value!==null?e.options.value[e.activeOptionIndex.value].id===t:!1),d=c(()=>L(e.mode.value,{[0]:()=>e.compare(x(e.value.value),x(l.value)),[1]:()=>x(e.value.value).some(m=>e.compare(x(m),x(l.value)))})),b=c(()=>({disabled:l.disabled,value:l.value,domRef:S}));J(()=>e.registerOption(t,b)),ee(()=>e.unregisterOption(t)),G(()=>{e.comboboxState.value===0&&p.value&&e.activationTrigger.value!==0&&N(()=>{var m,o;return(o=(m=g(S))==null?void 0:m.scrollIntoView)==null?void 0:o.call(m,{block:\"nearest\"})})});function v(m){if(l.disabled)return m.preventDefault();e.selectOption(t),e.mode.value===0&&e.closeCombobox(),me()||requestAnimationFrame(()=>{var o;return(o=g(e.inputRef))==null?void 0:o.focus()})}function O(){if(l.disabled)return e.goToOption(V.Nothing);e.goToOption(V.Specific,t)}let I=ve();function P(m){I.update(m)}function j(m){I.wasMoved(m)&&(l.disabled||p.value||e.goToOption(V.Specific,t,0))}function k(m){I.wasMoved(m)&&(l.disabled||p.value&&(e.optionsPropsRef.value.hold||e.goToOption(V.Nothing)))}return()=>{let{disabled:m}=l,o={active:p.value,selected:d.value,disabled:m},h={id:t,ref:S,role:\"option\",tabIndex:m===!0?void 0:-1,\"aria-disabled\":m===!0?!0:void 0,\"aria-selected\":d.value,disabled:void 0,onClick:v,onFocus:O,onPointerenter:P,onMouseenter:P,onPointermove:j,onMousemove:j,onPointerleave:k,onMouseleave:k};return K({ourProps:h,theirProps:l,slot:o,attrs:r,slots:y,name:\"ComboboxOption\"})}}});export{Je as Combobox,Ge as ComboboxButton,Qe as ComboboxInput,We as ComboboxLabel,Ye as ComboboxOption,Xe as ComboboxOptions};\n","import{computed as m,defineComponent as x,inject as R,onMounted as v,onUnmounted as D,provide as j,ref as u,unref as y}from\"vue\";import{useId as C}from'../../hooks/use-id.js';import{render as h}from'../../utils/render.js';let p=Symbol(\"DescriptionContext\");function b(){let t=R(p,null);if(t===null)throw new Error(\"Missing parent\");return t}function M({slot:t=u({}),name:i=\"Description\",props:o={}}={}){let e=u([]);function s(n){return e.value.push(n),()=>{let r=e.value.indexOf(n);r!==-1&&e.value.splice(r,1)}}return j(p,{register:s,slot:t,name:i,props:o}),m(()=>e.value.length>0?e.value.join(\" \"):void 0)}let E=x({name:\"Description\",props:{as:{type:[Object,String],default:\"p\"},id:{type:String,default:()=>`headlessui-description-${C()}`}},setup(t,{attrs:i,slots:o}){let e=b();return v(()=>D(e.register(t.id))),()=>{let{name:s=\"Description\",slot:n=u({}),props:r={}}=e,{id:d,...l}=t,c={...Object.entries(r).reduce((f,[a,g])=>Object.assign(f,{[a]:y(g)}),{}),id:d};return h({ourProps:c,theirProps:l,slot:n.value,attrs:i,slots:o,name:s})}}});export{E as Description,M as useDescriptions};\n","import{ref as a}from\"vue\";import{useWindowEvent as t}from'./use-window-event.js';var d=(r=>(r[r.Forwards=0]=\"Forwards\",r[r.Backwards=1]=\"Backwards\",r))(d||{});function n(){let o=a(0);return t(\"keydown\",e=>{e.key===\"Tab\"&&(o.value=e.shiftKey?1:0)}),o}export{d as Direction,n as useTabDirection};\n","import{watchEffect as i}from\"vue\";import{env as a}from'../utils/env.js';function E(n,e,o,r){a.isServer||i(t=>{n=n!=null?n:window,n.addEventListener(e,o,r),t(()=>n.removeEventListener(e,o,r))})}export{E as useEventListener};\n","function t(n){function e(){document.readyState!==\"loading\"&&(n(),document.removeEventListener(\"DOMContentLoaded\",e))}typeof window!=\"undefined\"&&typeof document!=\"undefined\"&&(document.addEventListener(\"DOMContentLoaded\",e),e())}export{t as onDocumentReady};\n","import{computed as F,defineComponent as I,h,onMounted as y,onUnmounted as R,ref as T,watch as k,Fragment as j,watchEffect as K}from\"vue\";import{render as U}from'../../utils/render.js';import{Hidden as D,Features as C}from'../../internal/hidden.js';import{dom as f}from'../../utils/dom.js';import{focusIn as w,Focus as v,focusElement as p,FocusResult as _}from'../../utils/focus-management.js';import{match as P}from'../../utils/match.js';import{useTabDirection as q,Direction as b}from'../../hooks/use-tab-direction.js';import{getOwnerDocument as G}from'../../utils/owner.js';import{useEventListener as W}from'../../hooks/use-event-listener.js';import{microTask as S}from'../../utils/micro-task.js';import{onDocumentReady as $}from'../../utils/document-ready.js';function B(e){if(!e)return new Set;if(typeof e==\"function\")return new Set(e());let t=new Set;for(let l of e.value){let o=f(l);o instanceof HTMLElement&&t.add(o)}return t}var A=(n=>(n[n.None=1]=\"None\",n[n.InitialFocus=2]=\"InitialFocus\",n[n.TabLock=4]=\"TabLock\",n[n.FocusLock=8]=\"FocusLock\",n[n.RestoreFocus=16]=\"RestoreFocus\",n[n.All=30]=\"All\",n))(A||{});let ce=Object.assign(I({name:\"FocusTrap\",props:{as:{type:[Object,String],default:\"div\"},initialFocus:{type:Object,default:null},features:{type:Number,default:30},containers:{type:[Object,Function],default:T(new Set)}},inheritAttrs:!1,setup(e,{attrs:t,slots:l,expose:o}){let r=T(null);o({el:r,$el:r});let i=F(()=>G(r)),n=T(!1);y(()=>n.value=!0),R(()=>n.value=!1),z({ownerDocument:i},F(()=>n.value&&Boolean(e.features&16)));let m=J({ownerDocument:i,container:r,initialFocus:F(()=>e.initialFocus)},F(()=>n.value&&Boolean(e.features&2)));Q({ownerDocument:i,container:r,containers:e.containers,previousActiveElement:m},F(()=>n.value&&Boolean(e.features&8)));let c=q();function u(a){let d=f(r);if(!d)return;(g=>g())(()=>{P(c.value,{[b.Forwards]:()=>{w(d,v.First,{skipElements:[a.relatedTarget]})},[b.Backwards]:()=>{w(d,v.Last,{skipElements:[a.relatedTarget]})}})})}let s=T(!1);function H(a){a.key===\"Tab\"&&(s.value=!0,requestAnimationFrame(()=>{s.value=!1}))}function M(a){if(!n.value)return;let d=B(e.containers);f(r)instanceof HTMLElement&&d.add(f(r));let E=a.relatedTarget;E instanceof HTMLElement&&E.dataset.headlessuiFocusGuard!==\"true\"&&(N(d,E)||(s.value?w(f(r),P(c.value,{[b.Forwards]:()=>v.Next,[b.Backwards]:()=>v.Previous})|v.WrapAround,{relativeTo:a.target}):a.target instanceof HTMLElement&&p(a.target)))}return()=>{let a={},d={ref:r,onKeydown:H,onFocusout:M},{features:E,initialFocus:g,containers:X,...O}=e;return h(j,[Boolean(E&4)&&h(D,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:u,features:C.Focusable}),U({ourProps:d,theirProps:{...t,...O},slot:a,attrs:t,slots:l,name:\"FocusTrap\"}),Boolean(E&4)&&h(D,{as:\"button\",type:\"button\",\"data-headlessui-focus-guard\":!0,onFocus:u,features:C.Focusable})])}}}),{features:A}),L=[];$(()=>{function e(t){t.target instanceof HTMLElement&&t.target!==document.body&&L[0]!==t.target&&(L.unshift(t.target),L=L.filter(l=>l!=null&&l.isConnected),L.splice(10))}window.addEventListener(\"click\",e,{capture:!0}),window.addEventListener(\"mousedown\",e,{capture:!0}),window.addEventListener(\"focus\",e,{capture:!0}),document.body.addEventListener(\"click\",e,{capture:!0}),document.body.addEventListener(\"mousedown\",e,{capture:!0}),document.body.addEventListener(\"focus\",e,{capture:!0})});function x(e){let t=T(L.slice());return k([e],([l],[o])=>{o===!0&&l===!1?S(()=>{t.value.splice(0)}):o===!1&&l===!0&&(t.value=L.slice())},{flush:\"post\"}),()=>{var l;return(l=t.value.find(o=>o!=null&&o.isConnected))!=null?l:null}}function z({ownerDocument:e},t){let l=x(t);y(()=>{K(()=>{var o,r;t.value||((o=e.value)==null?void 0:o.activeElement)===((r=e.value)==null?void 0:r.body)&&p(l())},{flush:\"post\"})}),R(()=>{t.value&&p(l())})}function J({ownerDocument:e,container:t,initialFocus:l},o){let r=T(null),i=T(!1);return y(()=>i.value=!0),R(()=>i.value=!1),y(()=>{k([t,l,o],(n,m)=>{if(n.every((u,s)=>(m==null?void 0:m[s])===u)||!o.value)return;let c=f(t);c&&S(()=>{var H,M;if(!i.value)return;let u=f(l),s=(H=e.value)==null?void 0:H.activeElement;if(u){if(u===s){r.value=s;return}}else if(c.contains(s)){r.value=s;return}u?p(u):w(c,v.First|v.NoScroll)===_.Error&&console.warn(\"There are no focusable elements inside the <FocusTrap />\"),r.value=(M=e.value)==null?void 0:M.activeElement})},{immediate:!0,flush:\"post\"})}),r}function Q({ownerDocument:e,container:t,containers:l,previousActiveElement:o},r){var i;W((i=e.value)==null?void 0:i.defaultView,\"focus\",n=>{if(!r.value)return;let m=B(l);f(t)instanceof HTMLElement&&m.add(f(t));let c=o.value;if(!c)return;let u=n.target;u&&u instanceof HTMLElement?N(m,u)?(o.value=u,p(u)):(n.preventDefault(),n.stopPropagation(),p(c)):p(o.value)},!0)}function N(e,t){for(let l of e)if(l.contains(t))return!0;return!1}export{ce as FocusTrap};\n","import{ref as m,watchEffect as s}from\"vue\";import{dom as h}from'../utils/dom.js';let i=new Map,t=new Map;function E(d,f=m(!0)){s(o=>{var a;if(!f.value)return;let e=h(d);if(!e)return;o(function(){var u;if(!e)return;let r=(u=t.get(e))!=null?u:1;if(r===1?t.delete(e):t.set(e,r-1),r!==1)return;let n=i.get(e);n&&(n[\"aria-hidden\"]===null?e.removeAttribute(\"aria-hidden\"):e.setAttribute(\"aria-hidden\",n[\"aria-hidden\"]),e.inert=n.inert,i.delete(e))});let l=(a=t.get(e))!=null?a:0;t.set(e,l+1),l===0&&(i.set(e,{\"aria-hidden\":e.getAttribute(\"aria-hidden\"),inert:e.inert}),e.setAttribute(\"aria-hidden\",\"true\"),e.inert=!0)})}export{E as useInert};\n","import{defineComponent as l,inject as a,provide as c}from\"vue\";import{render as p}from'../utils/render.js';let e=Symbol(\"ForcePortalRootContext\");function u(){return a(e,!1)}let P=l({name:\"ForcePortalRoot\",props:{as:{type:[Object,String],default:\"template\"},force:{type:Boolean,default:!1}},setup(o,{slots:t,attrs:r}){return c(e,o.force),()=>{let{force:f,...n}=o;return p({theirProps:n,ourProps:{},slot:{},slots:t,attrs:r,name:\"ForcePortalRoot\"})}}});export{P as ForcePortalRoot,u as usePortalRoot};\n","import{Teleport as x,computed as C,defineComponent as p,h as H,inject as m,onMounted as M,onUnmounted as c,provide as g,reactive as L,ref as s,watchEffect as j}from\"vue\";import{render as T}from'../../utils/render.js';import{usePortalRoot as b}from'../../internal/portal-force-root.js';import{getOwnerDocument as y}from'../../utils/owner.js';import{dom as w}from'../../utils/dom.js';function E(t){let e=y(t);if(!e){if(t===null)return null;throw new Error(`[Headless UI]: Cannot find ownerDocument for contextElement: ${t}`)}let u=e.getElementById(\"headlessui-portal-root\");if(u)return u;let r=e.createElement(\"div\");return r.setAttribute(\"id\",\"headlessui-portal-root\"),e.body.appendChild(r)}let U=p({name:\"Portal\",props:{as:{type:[Object,String],default:\"div\"}},setup(t,{slots:e,attrs:u}){let r=s(null),i=C(()=>y(r)),l=b(),n=m(h,null),o=s(l===!0||n==null?E(r.value):n.resolveTarget());j(()=>{l||n!=null&&(o.value=n.resolveTarget())});let d=m(f,null);return M(()=>{let a=w(r);a&&d&&c(d.register(a))}),c(()=>{var v,P;let a=(v=i.value)==null?void 0:v.getElementById(\"headlessui-portal-root\");a&&o.value===a&&o.value.children.length<=0&&((P=o.value.parentElement)==null||P.removeChild(o.value))}),()=>{if(o.value===null)return null;let a={ref:r,\"data-headlessui-portal\":\"\"};return H(x,{to:o.value},T({ourProps:a,theirProps:t,slot:{},attrs:u,slots:e,name:\"Portal\"}))}}}),f=Symbol(\"PortalParentContext\");function V(){let t=m(f,null),e=s([]);function u(l){return e.value.push(l),t&&t.register(l),()=>r(l)}function r(l){let n=e.value.indexOf(l);n!==-1&&e.value.splice(n,1),t&&t.unregister(l)}let i={register:u,unregister:r,portals:e};return[e,p({name:\"PortalWrapper\",setup(l,{slots:n}){return g(f,i),()=>{var o;return(o=n.default)==null?void 0:o.call(n)}}})]}let h=Symbol(\"PortalGroupContext\"),_=p({name:\"PortalGroup\",props:{as:{type:[Object,String],default:\"template\"},target:{type:Object,default:null}},setup(t,{attrs:e,slots:u}){let r=L({resolveTarget(){return t.target}});return g(h,r),()=>{let{target:i,...l}=t;return T({theirProps:l,ourProps:{},slot:{},attrs:e,slots:u,name:\"PortalGroup\"})}}});export{U as Portal,_ as PortalGroup,V as useNestedPortals};\n","import{inject as f,provide as m,onMounted as l,onUnmounted as c,watch as s}from\"vue\";let u=Symbol(\"StackContext\");var p=(e=>(e[e.Add=0]=\"Add\",e[e.Remove=1]=\"Remove\",e))(p||{});function v(){return f(u,()=>{})}function S({type:o,enabled:r,element:e,onUpdate:i}){let a=v();function t(...n){i==null||i(...n),a(...n)}l(()=>{s(r,(n,d)=>{n?t(0,o,e):d===!0&&t(1,o,e)},{immediate:!0,flush:\"sync\"})}),c(()=>{r.value&&t(1,o,e)}),m(u,t)}export{p as StackMessage,v as useStackContext,S as useStackProvider};\n","import{onUnmounted as o,shallowRef as n}from\"vue\";function m(t){let e=n(t.getSnapshot());return o(t.subscribe(()=>{e.value=t.getSnapshot()})),e}export{m as useStore};\n","function a(o,r){let t=o(),n=new Set;return{getSnapshot(){return t},subscribe(e){return n.add(e),()=>n.delete(e)},dispatch(e,...s){let i=r[e].call(t,...s);i&&(t=i,n.forEach(c=>c()))}}}export{a as createStore};\n","function c(){let o;return{before({doc:e}){var l;let n=e.documentElement;o=((l=e.defaultView)!=null?l:window).innerWidth-n.clientWidth},after({doc:e,d:n}){let t=e.documentElement,l=t.clientWidth-t.offsetWidth,r=o-l;n.style(t,\"paddingRight\",`${r}px`)}}}export{c as adjustScrollbarPadding};\n","import{disposables as f}from'../../utils/disposables.js';import{isIOS as m}from'../../utils/platform.js';function w(){if(!m())return{};let r;return{before(){r=window.pageYOffset},after({doc:n,d:o,meta:s}){function i(e){return s.containers.flatMap(t=>t()).some(t=>t.contains(e))}if(window.getComputedStyle(n.documentElement).scrollBehavior!==\"auto\"){let e=f();e.style(n.documentElement,\"scroll-behavior\",\"auto\"),o.add(()=>o.microTask(()=>e.dispose()))}o.style(n.body,\"marginTop\",`-${r}px`),window.scrollTo(0,0);let l=null;o.addEventListener(n,\"click\",e=>{if(e.target instanceof HTMLElement)try{let t=e.target.closest(\"a\");if(!t)return;let{hash:c}=new URL(t.href),a=n.querySelector(c);a&&!i(a)&&(l=a)}catch{}},!0),o.addEventListener(n,\"touchmove\",e=>{e.target instanceof HTMLElement&&!i(e.target)&&e.preventDefault()},{passive:!1}),o.add(()=>{window.scrollTo(0,window.pageYOffset+r),l&&l.isConnected&&(l.scrollIntoView({block:\"nearest\"}),l=null)})}}}export{w as handleIOSLocking};\n","function l(){return{before({doc:e,d:o}){o.style(e.documentElement,\"overflow\",\"hidden\")}}}export{l as preventScroll};\n","import{disposables as s}from'../../utils/disposables.js';import{createStore as i}from'../../utils/store.js';import{adjustScrollbarPadding as l}from'./adjust-scrollbar-padding.js';import{handleIOSLocking as d}from'./handle-ios-locking.js';import{preventScroll as p}from'./prevent-scroll.js';function m(e){let n={};for(let t of e)Object.assign(n,t(n));return n}let a=i(()=>new Map,{PUSH(e,n){var o;let t=(o=this.get(e))!=null?o:{doc:e,count:0,d:s(),meta:new Set};return t.count++,t.meta.add(n),this.set(e,t),this},POP(e,n){let t=this.get(e);return t&&(t.count--,t.meta.delete(n)),this},SCROLL_PREVENT({doc:e,d:n,meta:t}){let o={doc:e,d:n,meta:m(t)},c=[d(),l(),p()];c.forEach(({before:r})=>r==null?void 0:r(o)),c.forEach(({after:r})=>r==null?void 0:r(o))},SCROLL_ALLOW({d:e}){e.dispose()},TEARDOWN({doc:e}){this.delete(e)}});a.subscribe(()=>{let e=a.getSnapshot(),n=new Map;for(let[t]of e)n.set(t,t.documentElement.style.overflow);for(let t of e.values()){let o=n.get(t.doc)===\"hidden\",c=t.count!==0;(c&&!o||!c&&o)&&a.dispatch(t.count>0?\"SCROLL_PREVENT\":\"SCROLL_ALLOW\",t),t.count===0&&a.dispatch(\"TEARDOWN\",t)}});export{a as overflows};\n","import{useStore as p}from'../../hooks/use-store.js';import{overflows as u}from'./overflow-store.js';import{computed as s,watch as v}from\"vue\";function d(t,a,n){let i=p(u),l=s(()=>{let e=t.value?i.value.get(t.value):void 0;return e?e.count>0:!1});return v([t,a],([e,m],[r],o)=>{if(!e||!m)return;u.dispatch(\"PUSH\",e,n);let f=!1;o(()=>{f||(u.dispatch(\"POP\",r!=null?r:e,n),f=!0)})},{immediate:!0}),l}export{d as useDocumentOverflowLockedEffect};\n","import{ref as f,h as a}from\"vue\";import{Hidden as m,Features as d}from'../internal/hidden.js';import{getOwnerDocument as T}from'../utils/owner.js';import{dom as H}from'../utils/dom.js';function p({defaultContainers:t=[],portals:o,mainTreeNodeRef:s}={}){let i=f(null),r=T(i);function u(){var l;let n=[];for(let e of t)e!==null&&(e instanceof HTMLElement?n.push(e):\"value\"in e&&e.value instanceof HTMLElement&&n.push(e.value));if(o!=null&&o.value)for(let e of o.value)n.push(e);for(let e of(l=r==null?void 0:r.querySelectorAll(\"html > *, body > *\"))!=null?l:[])e!==document.body&&e!==document.head&&e instanceof HTMLElement&&e.id!==\"headlessui-portal-root\"&&(e.contains(H(i))||n.some(c=>e.contains(c))||n.push(e));return n}return{resolveContainers:u,contains(n){return u().some(l=>l.contains(n))},mainTreeNodeRef:i,MainTreeNode(){return s!=null?null:a(m,{features:d.Hidden,ref:i})}}}function N(){let t=f(null);return{mainTreeNodeRef:t,MainTreeNode(){return a(m,{features:d.Hidden,ref:t})}}}export{N as useMainTreeNode,p as useRootContainers};\n","import{computed as a,defineComponent as h,h as g,inject as K,nextTick as ae,onMounted as B,onUnmounted as ne,provide as ie,ref as S,watchEffect as ue}from\"vue\";import{render as O,Features as _}from'../../utils/render.js';import{Keys as se}from'../../keyboard.js';import{useId as P}from'../../hooks/use-id.js';import{FocusTrap as b}from'../../components/focus-trap/focus-trap.js';import{useInert as q}from'../../hooks/use-inert.js';import{Portal as U,PortalGroup as pe,useNestedPortals as fe}from'../portal/portal.js';import{StackMessage as Y,useStackProvider as de}from'../../internal/stack-context.js';import{match as z}from'../../utils/match.js';import{ForcePortalRoot as I}from'../../internal/portal-force-root.js';import{Description as ce,useDescriptions as ge}from'../description/description.js';import{dom as L}from'../../utils/dom.js';import{useOpenClosed as me,State as w}from'../../internal/open-closed.js';import{useOutsideClick as ve}from'../../hooks/use-outside-click.js';import{getOwnerDocument as De}from'../../utils/owner.js';import{useEventListener as Se}from'../../hooks/use-event-listener.js';import{useDocumentOverflowLockedEffect as ye}from'../../hooks/document-overflow/use-document-overflow.js';import{useRootContainers as he}from'../../hooks/use-root-containers.js';var Oe=(t=>(t[t.Open=0]=\"Open\",t[t.Closed=1]=\"Closed\",t))(Oe||{});let F=Symbol(\"DialogContext\");function C(o){let n=K(F,null);if(n===null){let t=new Error(`<${o} /> is missing a parent <Dialog /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,C),t}return n}let M=\"DC8F892D-2EBD-447C-A4C8-A03058436FF4\",Ue=h({name:\"Dialog\",inheritAttrs:!1,props:{as:{type:[Object,String],default:\"div\"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},open:{type:[Boolean,String],default:M},initialFocus:{type:Object,default:null},id:{type:String,default:()=>`headlessui-dialog-${P()}`}},emits:{close:o=>!0},setup(o,{emit:n,attrs:t,slots:u,expose:i}){var N;let r=S(!1);B(()=>{r.value=!0});let s=S(0),p=me(),m=a(()=>o.open===M&&p!==null?(p.value&w.Open)===w.Open:o.open),v=S(null),T=a(()=>De(v));if(i({el:v,$el:v}),!(o.open!==M||p!==null))throw new Error(\"You forgot to provide an `open` prop to the `Dialog`.\");if(typeof m.value!=\"boolean\")throw new Error(`You provided an \\`open\\` prop to the \\`Dialog\\`, but the value is not a boolean. Received: ${m.value===M?void 0:o.open}`);let c=a(()=>r.value&&m.value?0:1),R=a(()=>c.value===0),E=a(()=>s.value>1),$=K(F,null)!==null,[G,V]=fe(),{resolveContainers:x,mainTreeNodeRef:j,MainTreeNode:W}=he({portals:G,defaultContainers:[a(()=>{var e;return(e=y.panelRef.value)!=null?e:v.value})]}),J=a(()=>E.value?\"parent\":\"leaf\"),H=a(()=>p!==null?(p.value&w.Closing)===w.Closing:!1),Q=a(()=>$||H.value?!1:R.value),X=a(()=>{var e,l,f;return(f=Array.from((l=(e=T.value)==null?void 0:e.querySelectorAll(\"body > *\"))!=null?l:[]).find(d=>d.id===\"headlessui-portal-root\"?!1:d.contains(L(j))&&d instanceof HTMLElement))!=null?f:null});q(X,Q);let Z=a(()=>E.value?!0:R.value),ee=a(()=>{var e,l,f;return(f=Array.from((l=(e=T.value)==null?void 0:e.querySelectorAll(\"[data-headlessui-portal]\"))!=null?l:[]).find(d=>d.contains(L(j))&&d instanceof HTMLElement))!=null?f:null});q(ee,Z),de({type:\"Dialog\",enabled:a(()=>c.value===0),element:v,onUpdate:(e,l)=>{if(l===\"Dialog\")return z(e,{[Y.Add]:()=>s.value+=1,[Y.Remove]:()=>s.value-=1})}});let te=ge({name:\"DialogDescription\",slot:a(()=>({open:m.value}))}),k=S(null),y={titleId:k,panelRef:S(null),dialogState:c,setTitleId(e){k.value!==e&&(k.value=e)},close(){n(\"close\",!1)}};ie(F,y);let le=a(()=>!(!R.value||E.value));ve(x,(e,l)=>{y.close(),ae(()=>l==null?void 0:l.focus())},le);let oe=a(()=>!(E.value||c.value!==0));Se((N=T.value)==null?void 0:N.defaultView,\"keydown\",e=>{oe.value&&(e.defaultPrevented||e.key===se.Escape&&(e.preventDefault(),e.stopPropagation(),y.close()))});let re=a(()=>!(H.value||c.value!==0||$));return ye(T,re,e=>{var l;return{containers:[...(l=e.containers)!=null?l:[],x]}}),ue(e=>{if(c.value!==0)return;let l=L(v);if(!l)return;let f=new ResizeObserver(d=>{for(let A of d){let D=A.target.getBoundingClientRect();D.x===0&&D.y===0&&D.width===0&&D.height===0&&y.close()}});f.observe(l),e(()=>f.disconnect())}),()=>{let{id:e,open:l,initialFocus:f,...d}=o,A={...t,ref:v,id:e,role:\"dialog\",\"aria-modal\":c.value===0?!0:void 0,\"aria-labelledby\":k.value,\"aria-describedby\":te.value},D={open:c.value===0};return g(I,{force:!0},()=>[g(U,()=>g(pe,{target:v.value},()=>g(I,{force:!1},()=>g(b,{initialFocus:f,containers:x,features:R.value?z(J.value,{parent:b.features.RestoreFocus,leaf:b.features.All&~b.features.FocusLock}):b.features.None},()=>g(V,{},()=>O({ourProps:A,theirProps:{...d,...t},slot:D,attrs:t,slots:u,visible:c.value===0,features:_.RenderStrategy|_.Static,name:\"Dialog\"})))))),g(W)])}}}),Ye=h({name:\"DialogOverlay\",props:{as:{type:[Object,String],default:\"div\"},id:{type:String,default:()=>`headlessui-dialog-overlay-${P()}`}},setup(o,{attrs:n,slots:t}){let u=C(\"DialogOverlay\");function i(r){r.target===r.currentTarget&&(r.preventDefault(),r.stopPropagation(),u.close())}return()=>{let{id:r,...s}=o;return O({ourProps:{id:r,\"aria-hidden\":!0,onClick:i},theirProps:s,slot:{open:u.dialogState.value===0},attrs:n,slots:t,name:\"DialogOverlay\"})}}}),ze=h({name:\"DialogBackdrop\",props:{as:{type:[Object,String],default:\"div\"},id:{type:String,default:()=>`headlessui-dialog-backdrop-${P()}`}},inheritAttrs:!1,setup(o,{attrs:n,slots:t,expose:u}){let i=C(\"DialogBackdrop\"),r=S(null);return u({el:r,$el:r}),B(()=>{if(i.panelRef.value===null)throw new Error(\"A <DialogBackdrop /> component is being used, but a <DialogPanel /> component is missing.\")}),()=>{let{id:s,...p}=o,m={id:s,ref:r,\"aria-hidden\":!0};return g(I,{force:!0},()=>g(U,()=>O({ourProps:m,theirProps:{...n,...p},slot:{open:i.dialogState.value===0},attrs:n,slots:t,name:\"DialogBackdrop\"})))}}}),Ge=h({name:\"DialogPanel\",props:{as:{type:[Object,String],default:\"div\"},id:{type:String,default:()=>`headlessui-dialog-panel-${P()}`}},setup(o,{attrs:n,slots:t,expose:u}){let i=C(\"DialogPanel\");u({el:i.panelRef,$el:i.panelRef});function r(s){s.stopPropagation()}return()=>{let{id:s,...p}=o,m={id:s,ref:i.panelRef,onClick:r};return O({ourProps:m,theirProps:p,slot:{open:i.dialogState.value===0},attrs:n,slots:t,name:\"DialogPanel\"})}}}),Ve=h({name:\"DialogTitle\",props:{as:{type:[Object,String],default:\"h2\"},id:{type:String,default:()=>`headlessui-dialog-title-${P()}`}},setup(o,{attrs:n,slots:t}){let u=C(\"DialogTitle\");return B(()=>{u.setTitleId(o.id),ne(()=>u.setTitleId(null))}),()=>{let{id:i,...r}=o;return O({ourProps:{id:i},theirProps:r,slot:{open:u.dialogState.value===0},attrs:n,slots:t,name:\"DialogTitle\"})}}}),We=ce;export{Ue as Dialog,ze as DialogBackdrop,We as DialogDescription,Ye as DialogOverlay,Ge as DialogPanel,Ve as DialogTitle};\n","import{computed as m,defineComponent as v,inject as x,onMounted as L,onUnmounted as k,provide as C,ref as j,unref as h}from\"vue\";import{useId as w}from'../../hooks/use-id.js';import{render as R}from'../../utils/render.js';let a=Symbol(\"LabelContext\");function d(){let t=x(a,null);if(t===null){let n=new Error(\"You used a <Label /> component, but it is not inside a parent.\");throw Error.captureStackTrace&&Error.captureStackTrace(n,d),n}return t}function K({slot:t={},name:n=\"Label\",props:i={}}={}){let e=j([]);function l(r){return e.value.push(r),()=>{let o=e.value.indexOf(r);o!==-1&&e.value.splice(o,1)}}return C(a,{register:l,slot:t,name:n,props:i}),m(()=>e.value.length>0?e.value.join(\" \"):void 0)}let T=v({name:\"Label\",props:{as:{type:[Object,String],default:\"label\"},passive:{type:[Boolean],default:!1},id:{type:String,default:()=>`headlessui-label-${w()}`}},setup(t,{slots:n,attrs:i}){let e=d();return L(()=>k(e.register(t.id))),()=>{let{name:l=\"Label\",slot:r={},props:o={}}=e,{id:p,passive:c,...u}=t,s={...Object.entries(o).reduce((f,[b,g])=>Object.assign(f,{[b]:h(g)}),{}),id:p};return c&&(delete s.onClick,delete s.htmlFor,delete u.onClick),R({ourProps:s,theirProps:u,slot:r,attrs:i,slots:n,name:l})}}});export{T as Label,K as useLabels};\n","import{Fragment as T,computed as d,defineComponent as m,h,inject as H,provide as M,ref as y,watch as B,onMounted as P}from\"vue\";import{render as b,compact as j,omit as G}from'../../utils/render.js';import{useId as V}from'../../hooks/use-id.js';import{Keys as v}from'../../keyboard.js';import{Label as F,useLabels as I}from'../label/label.js';import{Description as O,useDescriptions as A}from'../description/description.js';import{useResolveButtonType as $}from'../../hooks/use-resolve-button-type.js';import{Hidden as N,Features as U}from'../../internal/hidden.js';import{attemptSubmit as _}from'../../utils/form.js';import{useControllable as q}from'../../hooks/use-controllable.js';import{dom as z}from'../../utils/dom.js';let S=Symbol(\"GroupContext\"),ae=m({name:\"SwitchGroup\",props:{as:{type:[Object,String],default:\"template\"}},setup(l,{slots:p,attrs:a}){let o=y(null),f=I({name:\"SwitchLabel\",props:{htmlFor:d(()=>{var r;return(r=o.value)==null?void 0:r.id}),onClick(r){o.value&&(r.currentTarget.tagName===\"LABEL\"&&r.preventDefault(),o.value.click(),o.value.focus({preventScroll:!0}))}}}),t=A({name:\"SwitchDescription\"});return M(S,{switchRef:o,labelledby:f,describedby:t}),()=>b({theirProps:l,ourProps:{},slot:{},slots:p,attrs:a,name:\"SwitchGroup\"})}}),ue=m({name:\"Switch\",emits:{\"update:modelValue\":l=>!0},props:{as:{type:[Object,String],default:\"button\"},modelValue:{type:Boolean,default:void 0},defaultChecked:{type:Boolean,optional:!0},form:{type:String,optional:!0},name:{type:String,optional:!0},value:{type:String,optional:!0},id:{type:String,default:()=>`headlessui-switch-${V()}`}},inheritAttrs:!1,setup(l,{emit:p,attrs:a,slots:o,expose:f}){let t=H(S,null),[i,r]=q(d(()=>l.modelValue),e=>p(\"update:modelValue\",e),d(()=>l.defaultChecked));function s(){r(!i.value)}let w=y(null),u=t===null?w:t.switchRef,g=$(d(()=>({as:l.as,type:a.type})),u);f({el:u,$el:u});function k(e){e.preventDefault(),s()}function C(e){e.key===v.Space?(e.preventDefault(),s()):e.key===v.Enter&&_(e.currentTarget)}function E(e){e.preventDefault()}let c=d(()=>{var e,n;return(n=(e=z(u))==null?void 0:e.closest)==null?void 0:n.call(e,\"form\")});return P(()=>{B([c],()=>{if(!c.value||l.defaultChecked===void 0)return;function e(){r(l.defaultChecked)}return c.value.addEventListener(\"reset\",e),()=>{var n;(n=c.value)==null||n.removeEventListener(\"reset\",e)}},{immediate:!0})}),()=>{let{id:e,name:n,value:L,form:D,...R}=l,K={checked:i.value},x={id:e,ref:u,role:\"switch\",type:g.value,tabIndex:0,\"aria-checked\":i.value,\"aria-labelledby\":t==null?void 0:t.labelledby.value,\"aria-describedby\":t==null?void 0:t.describedby.value,onClick:k,onKeyup:C,onKeypress:E};return h(T,[n!=null&&i.value!=null?h(N,j({features:U.Hidden,as:\"input\",type:\"checkbox\",hidden:!0,readOnly:!0,checked:i.value,form:D,name:n,value:L})):null,b({ourProps:x,theirProps:{...a,...G(R,[\"modelValue\",\"defaultChecked\"])},slot:K,attrs:a,slots:o,name:\"Switch\"})])}}}),de=F,ce=O;export{ue as Switch,ce as SwitchDescription,ae as SwitchGroup,de as SwitchLabel};\n","function l(r){let e={called:!1};return(...t)=>{if(!e.called)return e.called=!0,r(...t)}}export{l as once};\n","import{once as f}from'../../../utils/once.js';import{disposables as p}from'../../../utils/disposables.js';function m(e,...t){e&&t.length>0&&e.classList.add(...t)}function d(e,...t){e&&t.length>0&&e.classList.remove(...t)}var g=(i=>(i.Finished=\"finished\",i.Cancelled=\"cancelled\",i))(g||{});function F(e,t){let i=p();if(!e)return i.dispose;let{transitionDuration:n,transitionDelay:a}=getComputedStyle(e),[l,s]=[n,a].map(o=>{let[u=0]=o.split(\",\").filter(Boolean).map(r=>r.includes(\"ms\")?parseFloat(r):parseFloat(r)*1e3).sort((r,c)=>c-r);return u});return l!==0?i.setTimeout(()=>t(\"finished\"),l+s):t(\"finished\"),i.add(()=>t(\"cancelled\")),i.dispose}function L(e,t,i,n,a,l){let s=p(),o=l!==void 0?f(l):()=>{};return d(e,...a),m(e,...t,...i),s.nextFrame(()=>{d(e,...i),m(e,...n),s.add(F(e,u=>(d(e,...n,...t),m(e,...a),o(u))))}),s.add(()=>d(e,...t,...i,...n,...a)),s.add(()=>o(\"cancelled\")),s.dispose}export{g as Reason,L as transition};\n","import{computed as w,defineComponent as K,h as k,inject as F,onMounted as C,onUnmounted as z,provide as B,ref as m,watch as ae,watchEffect as x,normalizeClass as le}from\"vue\";import{useId as ie}from'../../hooks/use-id.js';import{match as O}from'../../utils/match.js';import{env as se}from'../../utils/env.js';import{Features as oe,omit as ue,render as $,RenderStrategy as T}from'../../utils/render.js';import{Reason as q,transition as G}from'./utils/transition.js';import{dom as J}from'../../utils/dom.js';import{useOpenClosedProvider as fe,State as u,useOpenClosed as de,hasOpenClosed as ve}from'../../internal/open-closed.js';function g(e=\"\"){return e.split(\" \").filter(t=>t.trim().length>1)}let R=Symbol(\"TransitionContext\");var pe=(a=>(a.Visible=\"visible\",a.Hidden=\"hidden\",a))(pe||{});function me(){return F(R,null)!==null}function Te(){let e=F(R,null);if(e===null)throw new Error(\"A <TransitionChild /> is used but it is missing a parent <TransitionRoot />.\");return e}function ge(){let e=F(N,null);if(e===null)throw new Error(\"A <TransitionChild /> is used but it is missing a parent <TransitionRoot />.\");return e}let N=Symbol(\"NestingContext\");function L(e){return\"children\"in e?L(e.children):e.value.filter(({state:t})=>t===\"visible\").length>0}function Q(e){let t=m([]),a=m(!1);C(()=>a.value=!0),z(()=>a.value=!1);function s(n,r=T.Hidden){let l=t.value.findIndex(({id:f})=>f===n);l!==-1&&(O(r,{[T.Unmount](){t.value.splice(l,1)},[T.Hidden](){t.value[l].state=\"hidden\"}}),!L(t)&&a.value&&(e==null||e()))}function h(n){let r=t.value.find(({id:l})=>l===n);return r?r.state!==\"visible\"&&(r.state=\"visible\"):t.value.push({id:n,state:\"visible\"}),()=>s(n,T.Unmount)}return{children:t,register:h,unregister:s}}let W=oe.RenderStrategy,he=K({props:{as:{type:[Object,String],default:\"div\"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:\"\"},enterFrom:{type:[String],default:\"\"},enterTo:{type:[String],default:\"\"},entered:{type:[String],default:\"\"},leave:{type:[String],default:\"\"},leaveFrom:{type:[String],default:\"\"},leaveTo:{type:[String],default:\"\"}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(e,{emit:t,attrs:a,slots:s,expose:h}){let n=m(0);function r(){n.value|=u.Opening,t(\"beforeEnter\")}function l(){n.value&=~u.Opening,t(\"afterEnter\")}function f(){n.value|=u.Closing,t(\"beforeLeave\")}function S(){n.value&=~u.Closing,t(\"afterLeave\")}if(!me()&&ve())return()=>k(Se,{...e,onBeforeEnter:r,onAfterEnter:l,onBeforeLeave:f,onAfterLeave:S},s);let d=m(null),b=w(()=>e.unmount?T.Unmount:T.Hidden);h({el:d,$el:d});let{show:v,appear:A}=Te(),{register:D,unregister:H}=ge(),i=m(v.value?\"visible\":\"hidden\"),I={value:!0},c=ie(),y={value:!1},P=Q(()=>{!y.value&&i.value!==\"hidden\"&&(i.value=\"hidden\",H(c),S())});C(()=>{let o=D(c);z(o)}),x(()=>{if(b.value===T.Hidden&&c){if(v.value&&i.value!==\"visible\"){i.value=\"visible\";return}O(i.value,{[\"hidden\"]:()=>H(c),[\"visible\"]:()=>D(c)})}});let j=g(e.enter),M=g(e.enterFrom),X=g(e.enterTo),_=g(e.entered),Y=g(e.leave),Z=g(e.leaveFrom),ee=g(e.leaveTo);C(()=>{x(()=>{if(i.value===\"visible\"){let o=J(d);if(o instanceof Comment&&o.data===\"\")throw new Error(\"Did you forget to passthrough the `ref` to the actual DOM node?\")}})});function te(o){let E=I.value&&!A.value,p=J(d);!p||!(p instanceof HTMLElement)||E||(y.value=!0,v.value&&r(),v.value||f(),o(v.value?G(p,j,M,X,_,V=>{y.value=!1,V===q.Finished&&l()}):G(p,Y,Z,ee,_,V=>{y.value=!1,V===q.Finished&&(L(P)||(i.value=\"hidden\",H(c),S()))})))}return C(()=>{ae([v],(o,E,p)=>{te(p),I.value=!1},{immediate:!0})}),B(N,P),fe(w(()=>O(i.value,{[\"visible\"]:u.Open,[\"hidden\"]:u.Closed})|n.value)),()=>{let{appear:o,show:E,enter:p,enterFrom:V,enterTo:Ce,entered:be,leave:ye,leaveFrom:Ee,leaveTo:Ve,...U}=e,ne={ref:d},re={...U,...A.value&&v.value&&se.isServer?{class:le([a.class,U.class,...j,...M])}:{}};return $({theirProps:re,ourProps:ne,slot:{},slots:s,attrs:a,features:W,visible:i.value===\"visible\",name:\"TransitionChild\"})}}}),ce=he,Se=K({inheritAttrs:!1,props:{as:{type:[Object,String],default:\"div\"},show:{type:[Boolean],default:null},unmount:{type:[Boolean],default:!0},appear:{type:[Boolean],default:!1},enter:{type:[String],default:\"\"},enterFrom:{type:[String],default:\"\"},enterTo:{type:[String],default:\"\"},entered:{type:[String],default:\"\"},leave:{type:[String],default:\"\"},leaveFrom:{type:[String],default:\"\"},leaveTo:{type:[String],default:\"\"}},emits:{beforeEnter:()=>!0,afterEnter:()=>!0,beforeLeave:()=>!0,afterLeave:()=>!0},setup(e,{emit:t,attrs:a,slots:s}){let h=de(),n=w(()=>e.show===null&&h!==null?(h.value&u.Open)===u.Open:e.show);x(()=>{if(![!0,!1].includes(n.value))throw new Error('A <Transition /> is used but it is missing a `:show=\"true | false\"` prop.')});let r=m(n.value?\"visible\":\"hidden\"),l=Q(()=>{r.value=\"hidden\"}),f=m(!0),S={show:n,appear:w(()=>e.appear||!f.value)};return C(()=>{x(()=>{f.value=!1,n.value?r.value=\"visible\":L(l)||(r.value=\"hidden\")})}),B(N,l),B(R,S),()=>{let d=ue(e,[\"show\",\"appear\",\"unmount\",\"onBeforeEnter\",\"onBeforeLeave\",\"onAfterEnter\",\"onAfterLeave\"]),b={unmount:e.unmount};return $({ourProps:{...b,as:\"template\"},theirProps:{},slot:{},slots:{...s,default:()=>[k(ce,{onBeforeEnter:()=>t(\"beforeEnter\"),onAfterEnter:()=>t(\"afterEnter\"),onBeforeLeave:()=>t(\"beforeLeave\"),onAfterLeave:()=>t(\"afterLeave\"),...a,...b,...d},s.default)]},attrs:{},features:W,visible:r.value===\"visible\",name:\"Transition\"})}}});export{he as TransitionChild,Se as TransitionRoot};\n","import{computed as p,ref as s}from\"vue\";function d(u,e,r){let i=s(r==null?void 0:r.value),f=p(()=>u.value!==void 0);return[p(()=>f.value?u.value:i.value),function(t){return f.value||(i.value=t),e==null?void 0:e(t)}]}export{d as useControllable};\n","let e=0;function n(){return++e}function t(){return n()}export{t as useId};\n","import{watchEffect as r}from\"vue\";import{env as m}from'../utils/env.js';function u(e,t,n){m.isServer||r(o=>{document.addEventListener(e,t,n),o(()=>document.removeEventListener(e,t,n))})}export{u as useDocumentEvent};\n","import{computed as E,ref as s}from\"vue\";import{FocusableMode as d,isFocusableElement as p}from'../utils/focus-management.js';import{dom as C}from'../utils/dom.js';import{useDocumentEvent as l}from'./use-document-event.js';import{useWindowEvent as T}from'./use-window-event.js';function y(f,c,i=E(()=>!0)){function a(e,r){if(!i.value||e.defaultPrevented)return;let t=r(e);if(t===null||!t.getRootNode().contains(t))return;let m=function o(n){return typeof n==\"function\"?o(n()):Array.isArray(n)||n instanceof Set?n:[n]}(f);for(let o of m){if(o===null)continue;let n=o instanceof HTMLElement?o:C(o);if(n!=null&&n.contains(t)||e.composed&&e.composedPath().includes(n))return}return!p(t,d.Loose)&&t.tabIndex!==-1&&e.preventDefault(),c(e,t)}let u=s(null);l(\"pointerdown\",e=>{var r,t;i.value&&(u.value=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),l(\"mousedown\",e=>{var r,t;i.value&&(u.value=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),l(\"click\",e=>{u.value&&(a(e,()=>u.value),u.value=null)},!0),l(\"touchend\",e=>a(e,()=>e.target instanceof HTMLElement?e.target:null),!0),T(\"blur\",e=>a(e,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}export{y as useOutsideClick};\n","import{ref as f,onMounted as i,watchEffect as l}from\"vue\";import{dom as u}from'../utils/dom.js';function r(t,e){if(t)return t;let n=e!=null?e:\"button\";if(typeof n==\"string\"&&n.toLowerCase()===\"button\")return\"button\"}function b(t,e){let n=f(r(t.value.type,t.value.as));return i(()=>{n.value=r(t.value.type,t.value.as)}),l(()=>{var o;n.value||u(e)&&u(e)instanceof HTMLButtonElement&&!((o=u(e))!=null&&o.hasAttribute(\"type\"))&&(n.value=\"button\")}),n}export{b as useResolveButtonType};\n","import{watchEffect as i}from\"vue\";import{env as r}from'../utils/env.js';function w(e,n,t){r.isServer||i(o=>{window.addEventListener(e,n,t),o(()=>window.removeEventListener(e,n,t))})}export{w as useWindowEvent};\n","import{defineComponent as i}from\"vue\";import{render as p}from'../utils/render.js';var a=(e=>(e[e.None=1]=\"None\",e[e.Focusable=2]=\"Focusable\",e[e.Hidden=4]=\"Hidden\",e))(a||{});let f=i({name:\"Hidden\",props:{as:{type:[Object,String],default:\"div\"},features:{type:Number,default:1}},setup(r,{slots:t,attrs:d}){return()=>{let{features:e,...o}=r,n={\"aria-hidden\":(e&2)===2?!0:void 0,style:{position:\"fixed\",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:\"hidden\",clip:\"rect(0, 0, 0, 0)\",whiteSpace:\"nowrap\",borderWidth:\"0\",...(e&4)===4&&(e&2)!==2&&{display:\"none\"}}};return p({ourProps:n,theirProps:o,slot:{},attrs:d,slots:t,name:\"Hidden\"})}}});export{a as Features,f as Hidden};\n","import{inject as r,provide as i}from\"vue\";let n=Symbol(\"Context\");var l=(e=>(e[e.Open=1]=\"Open\",e[e.Closed=2]=\"Closed\",e[e.Closing=4]=\"Closing\",e[e.Opening=8]=\"Opening\",e))(l||{});function C(){return p()!==null}function p(){return r(n,null)}function c(o){i(n,o)}export{l as State,C as hasOpenClosed,p as useOpenClosed,c as useOpenClosedProvider};\n","var o=(r=>(r.Space=\" \",r.Enter=\"Enter\",r.Escape=\"Escape\",r.Backspace=\"Backspace\",r.Delete=\"Delete\",r.ArrowLeft=\"ArrowLeft\",r.ArrowUp=\"ArrowUp\",r.ArrowRight=\"ArrowRight\",r.ArrowDown=\"ArrowDown\",r.Home=\"Home\",r.End=\"End\",r.PageUp=\"PageUp\",r.PageDown=\"PageDown\",r.Tab=\"Tab\",r))(o||{});export{o as Keys};\n","import{microTask as n}from'./micro-task.js';function o(){let a=[],s={addEventListener(e,t,r,i){return e.addEventListener(t,r,i),s.add(()=>e.removeEventListener(t,r,i))},requestAnimationFrame(...e){let t=requestAnimationFrame(...e);s.add(()=>cancelAnimationFrame(t))},nextFrame(...e){s.requestAnimationFrame(()=>{s.requestAnimationFrame(...e)})},setTimeout(...e){let t=setTimeout(...e);s.add(()=>clearTimeout(t))},microTask(...e){let t={current:!0};return n(()=>{t.current&&e[0]()}),s.add(()=>{t.current=!1})},style(e,t,r){let i=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:r}),this.add(()=>{Object.assign(e.style,{[t]:i})})},group(e){let t=o();return e(t),this.add(()=>t.dispose())},add(e){return a.push(e),()=>{let t=a.indexOf(e);if(t>=0)for(let r of a.splice(t,1))r()}},dispose(){for(let e of a.splice(0))e()}};return s}export{o as disposables};\n","function o(n){var l;return n==null||n.value==null?null:(l=n.value.$el)!=null?l:n.value}export{o as dom};\n","var i=Object.defineProperty;var d=(t,e,r)=>e in t?i(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var n=(t,e,r)=>(d(t,typeof e!=\"symbol\"?e+\"\":e,r),r);class s{constructor(){n(this,\"current\",this.detect());n(this,\"currentId\",0)}set(e){this.current!==e&&(this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current===\"server\"}get isClient(){return this.current===\"client\"}detect(){return typeof window==\"undefined\"||typeof document==\"undefined\"?\"server\":\"client\"}}let c=new s;export{c as env};\n","import{nextTick as b}from\"vue\";import{match as M}from'./match.js';import{getOwnerDocument as f}from'./owner.js';let c=[\"[contentEditable=true]\",\"[tabindex]\",\"a[href]\",\"area[href]\",\"button:not([disabled])\",\"iframe\",\"input:not([disabled])\",\"select:not([disabled])\",\"textarea:not([disabled])\"].map(e=>`${e}:not([tabindex='-1'])`).join(\",\");var N=(n=>(n[n.First=1]=\"First\",n[n.Previous=2]=\"Previous\",n[n.Next=4]=\"Next\",n[n.Last=8]=\"Last\",n[n.WrapAround=16]=\"WrapAround\",n[n.NoScroll=32]=\"NoScroll\",n))(N||{}),T=(o=>(o[o.Error=0]=\"Error\",o[o.Overflow=1]=\"Overflow\",o[o.Success=2]=\"Success\",o[o.Underflow=3]=\"Underflow\",o))(T||{}),F=(t=>(t[t.Previous=-1]=\"Previous\",t[t.Next=1]=\"Next\",t))(F||{});function E(e=document.body){return e==null?[]:Array.from(e.querySelectorAll(c)).sort((r,t)=>Math.sign((r.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}var h=(t=>(t[t.Strict=0]=\"Strict\",t[t.Loose=1]=\"Loose\",t))(h||{});function w(e,r=0){var t;return e===((t=f(e))==null?void 0:t.body)?!1:M(r,{[0](){return e.matches(c)},[1](){let l=e;for(;l!==null;){if(l.matches(c))return!0;l=l.parentElement}return!1}})}function _(e){let r=f(e);b(()=>{r&&!w(r.activeElement,0)&&S(e)})}var y=(t=>(t[t.Keyboard=0]=\"Keyboard\",t[t.Mouse=1]=\"Mouse\",t))(y||{});typeof window!=\"undefined\"&&typeof document!=\"undefined\"&&(document.addEventListener(\"keydown\",e=>{e.metaKey||e.altKey||e.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible=\"\")},!0),document.addEventListener(\"click\",e=>{e.detail===1?delete document.documentElement.dataset.headlessuiFocusVisible:e.detail===0&&(document.documentElement.dataset.headlessuiFocusVisible=\"\")},!0));function S(e){e==null||e.focus({preventScroll:!0})}let H=[\"textarea\",\"input\"].join(\",\");function I(e){var r,t;return(t=(r=e==null?void 0:e.matches)==null?void 0:r.call(e,H))!=null?t:!1}function O(e,r=t=>t){return e.slice().sort((t,l)=>{let o=r(t),i=r(l);if(o===null||i===null)return 0;let n=o.compareDocumentPosition(i);return n&Node.DOCUMENT_POSITION_FOLLOWING?-1:n&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function v(e,r){return P(E(),r,{relativeTo:e})}function P(e,r,{sorted:t=!0,relativeTo:l=null,skipElements:o=[]}={}){var m;let i=(m=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:e==null?void 0:e.ownerDocument)!=null?m:document,n=Array.isArray(e)?t?O(e):e:E(e);o.length>0&&n.length>1&&(n=n.filter(s=>!o.includes(s))),l=l!=null?l:i.activeElement;let x=(()=>{if(r&5)return 1;if(r&10)return-1;throw new Error(\"Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last\")})(),p=(()=>{if(r&1)return 0;if(r&2)return Math.max(0,n.indexOf(l))-1;if(r&4)return Math.max(0,n.indexOf(l))+1;if(r&8)return n.length-1;throw new Error(\"Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last\")})(),L=r&32?{preventScroll:!0}:{},a=0,d=n.length,u;do{if(a>=d||a+d<=0)return 0;let s=p+a;if(r&16)s=(s+d)%d;else{if(s<0)return 3;if(s>=d)return 1}u=n[s],u==null||u.focus(L),a+=x}while(u!==i.activeElement);return r&6&&I(u)&&u.select(),2}export{N as Focus,T as FocusResult,h as FocusableMode,S as focusElement,v as focusFrom,P as focusIn,E as getFocusableElements,w as isFocusableElement,_ as restoreFocusIfNecessary,O as sortByDomNode};\n","function e(i={},s=null,t=[]){for(let[r,n]of Object.entries(i))o(t,f(s,r),n);return t}function f(i,s){return i?i+\"[\"+s+\"]\":s}function o(i,s,t){if(Array.isArray(t))for(let[r,n]of t.entries())o(i,f(s,r.toString()),n);else t instanceof Date?i.push([s,t.toISOString()]):typeof t==\"boolean\"?i.push([s,t?\"1\":\"0\"]):typeof t==\"string\"?i.push([s,t]):typeof t==\"number\"?i.push([s,`${t}`]):t==null?i.push([s,\"\"]):e(t,s,i)}function p(i){var t,r;let s=(t=i==null?void 0:i.form)!=null?t:i.closest(\"form\");if(s){for(let n of s.elements)if(n!==i&&(n.tagName===\"INPUT\"&&n.type===\"submit\"||n.tagName===\"BUTTON\"&&n.type===\"submit\"||n.nodeName===\"INPUT\"&&n.type===\"image\")){n.click();return}(r=s.requestSubmit)==null||r.call(s)}}export{p as attemptSubmit,e as objectToFormEntries};\n","function u(r,n,...a){if(r in n){let e=n[r];return typeof e==\"function\"?e(...a):e}let t=new Error(`Tried to handle \"${r}\" but there is no handler defined. Only defined handlers are: ${Object.keys(n).map(e=>`\"${e}\"`).join(\", \")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,u),t}export{u as match};\n","function t(e){typeof queueMicrotask==\"function\"?queueMicrotask(e):Promise.resolve().then(e).catch(o=>setTimeout(()=>{throw o}))}export{t as microTask};\n","import{dom as o}from'./dom.js';import{env as t}from'./env.js';function m(r){if(t.isServer)return null;if(r instanceof Node)return r.ownerDocument;if(r!=null&&r.hasOwnProperty(\"value\")){let n=o(r);if(n)return n.ownerDocument}return document}export{m as getOwnerDocument};\n","function t(){return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0}function i(){return/Android/gi.test(window.navigator.userAgent)}function n(){return t()||i()}export{i as isAndroid,t as isIOS,n as isMobile};\n","import{h as O,cloneVNode as x,Fragment as k}from\"vue\";import{match as w}from'./match.js';var N=(o=>(o[o.None=0]=\"None\",o[o.RenderStrategy=1]=\"RenderStrategy\",o[o.Static=2]=\"Static\",o))(N||{}),S=(e=>(e[e.Unmount=0]=\"Unmount\",e[e.Hidden=1]=\"Hidden\",e))(S||{});function H({visible:r=!0,features:t=0,ourProps:e,theirProps:o,...i}){var a;let n=j(o,e),l=Object.assign(i,{props:n});if(r||t&2&&n.static)return y(l);if(t&1){let d=(a=n.unmount)==null||a?0:1;return w(d,{[0](){return null},[1](){return y({...i,props:{...n,hidden:!0,style:{display:\"none\"}}})}})}return y(l)}function y({props:r,attrs:t,slots:e,slot:o,name:i}){var m,h;let{as:n,...l}=T(r,[\"unmount\",\"static\"]),a=(m=e.default)==null?void 0:m.call(e,o),d={};if(o){let u=!1,c=[];for(let[p,f]of Object.entries(o))typeof f==\"boolean\"&&(u=!0),f===!0&&c.push(p);u&&(d[\"data-headlessui-state\"]=c.join(\" \"))}if(n===\"template\"){if(a=b(a!=null?a:[]),Object.keys(l).length>0||Object.keys(t).length>0){let[u,...c]=a!=null?a:[];if(!v(u)||c.length>0)throw new Error(['Passing props on \"template\"!',\"\",`The current component <${i} /> is rendering a \"template\".`,\"However we need to passthrough the following props:\",Object.keys(l).concat(Object.keys(t)).map(s=>s.trim()).filter((s,g,R)=>R.indexOf(s)===g).sort((s,g)=>s.localeCompare(g)).map(s=>` - ${s}`).join(`\n`),\"\",\"You can apply a few solutions:\",['Add an `as=\"...\"` prop, to ensure that we render an actual element instead of a \"template\".',\"Render a single element as the child so that we can forward the props onto that element.\"].map(s=>` - ${s}`).join(`\n`)].join(`\n`));let p=j((h=u.props)!=null?h:{},l),f=x(u,p);for(let s in p)s.startsWith(\"on\")&&(f.props||(f.props={}),f.props[s]=p[s]);return f}return Array.isArray(a)&&a.length===1?a[0]:a}return O(n,Object.assign({},l,d),{default:()=>a})}function b(r){return r.flatMap(t=>t.type===k?b(t.children):[t])}function j(...r){var o;if(r.length===0)return{};if(r.length===1)return r[0];let t={},e={};for(let i of r)for(let n in i)n.startsWith(\"on\")&&typeof i[n]==\"function\"?((o=e[n])!=null||(e[n]=[]),e[n].push(i[n])):t[n]=i[n];if(t.disabled||t[\"aria-disabled\"])return Object.assign(t,Object.fromEntries(Object.keys(e).map(i=>[i,void 0])));for(let i in e)Object.assign(t,{[i](n,...l){let a=e[i];for(let d of a){if(n instanceof Event&&n.defaultPrevented)return;d(n,...l)}}});return t}function K(r){let t=Object.assign({},r);for(let e in t)t[e]===void 0&&delete t[e];return t}function T(r,t=[]){let e=Object.assign({},r);for(let o of t)o in e&&delete e[o];return e}function v(r){return r==null?!1:typeof r.type==\"string\"||typeof r.type==\"object\"||typeof r.type==\"function\"}export{N as Features,S as RenderStrategy,K as compact,T as omit,H as render};\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, provide, inject, isVue3, version, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, isVue2, set as set$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, {\n ...options,\n flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n });\n return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n let v = void 0;\n let track;\n let trigger;\n const dirty = ref(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = typeof fn === \"function\" ? fn : fn.get;\n const set = typeof fn === \"function\" ? void 0 : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get();\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? void 0 : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = /* @__PURE__ */ new Set();\n const off = (fn) => {\n fns.delete(fn);\n };\n const on = (fn) => {\n fns.add(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (...args) => {\n return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n };\n return {\n on,\n off,\n trigger\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return (...args) => {\n if (!initialized) {\n state = scope.run(() => stateFactory(...args));\n initialized = true;\n }\n return state;\n };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst provideLocal = (key, value) => {\n var _a;\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"provideLocal must be called in setup\");\n if (!localProvidedStateMap.has(instance))\n localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n const localProvidedState = localProvidedStateMap.get(instance);\n localProvidedState[key] = value;\n provide(key, value);\n};\n\nconst injectLocal = (...args) => {\n var _a;\n const key = args[0];\n const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n if (instance == null)\n throw new Error(\"injectLocal must be called in setup\");\n if (localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n return localProvidedStateMap.get(instance)[key];\n return inject(...args);\n};\n\nfunction createInjectionState(composable, options) {\n const key = (options == null ? void 0 : options.injectionKey) || Symbol(\"InjectionState\");\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provideLocal(key, state);\n return state;\n };\n const useInjectedState = () => injectLocal(key);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = void 0;\n scope = void 0;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!state) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n if (!isVue3 && !version.startsWith(\"2.7.\")) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] extendRef only works in Vue 2.7 or above.\");\n return;\n }\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = { ...obj };\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction toValue(r) {\n return typeof r === \"function\" ? r() : unref(r);\n}\nconst resolveUnref = toValue;\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(\n keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n })\n );\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n var _a, _b;\n return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n const filter = (invoke) => {\n const duration = toValue(ms);\n const maxDuration = toValue(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(invoke());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true, rejectOnCancel = false) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = toValue(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n const isActive = ref(true);\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nconst directiveHooks = {\n mounted: isVue3 ? \"mounted\" : \"inserted\",\n updated: isVue3 ? \"updated\" : \"componentUpdated\",\n unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction cacheStringFunction(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = void 0;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = Number.parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== void 0)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n return (!omitUndefined || value !== void 0) && !keys.includes(key);\n }));\n}\nfunction objectEntries(obj) {\n return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n const instance = target || getCurrentInstance();\n return isVue3 ? instance : instance == null ? void 0 : instance.proxy;\n}\n\nfunction toRef(...args) {\n if (args.length !== 1)\n return toRef$1(...args);\n const r = args[0];\n return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = toValue(defaultValue);\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = toValue(defaultValue);\n trigger();\n }, toValue(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(\n debounceFilter(ms, options),\n fn\n );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(\n throttleFilter(ms, trailing, leading, rejectOnCancel),\n fn\n );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(\n ref,\n {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n },\n { enumerable: true }\n );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n if (isVue2) {\n set$1(...args);\n } else {\n const [target, key, value] = args;\n target[key] = value;\n }\n }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n return watch(\n source,\n createFilterWrapper(\n eventFilter,\n cb\n ),\n watchOptions\n );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n const {\n eventFilter: filter,\n ...watchOptions\n } = options;\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n const stop = watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter\n }\n );\n return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options || {};\n const watchers = [];\n const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n if (direction === \"both\" || direction === \"ltr\") {\n watchers.push(watchPausable(\n left,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n right.value = transformLTR(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchers.push(watchPausable(\n right,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n left.value = transformRTL(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n const stop = () => {\n watchers.forEach((w) => w.stop());\n };\n return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n if (!Array.isArray(targets))\n targets = [targets];\n return watch(\n source,\n (newValue) => targets.forEach((target) => target.value = newValue),\n { flush, deep, immediate }\n );\n}\n\nfunction toRefs(objectRef, options = {}) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n var _a;\n const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;\n if (replaceRef) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = { ...objectRef.value, [key]: v };\n Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n objectRef.value = newObject;\n }\n } else {\n objectRef.value[key] = v;\n }\n }\n }));\n }\n return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeMount(fn, instance);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeUnmount(fn, instance);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onMounted(fn, instance);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onUnmounted(fn, instance);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n r,\n (v) => {\n if (condition(v) !== isNot) {\n stop == null ? void 0 : stop();\n resolve(v);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop())\n );\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n [r, value],\n ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n stop == null ? void 0 : stop();\n resolve(v1);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n stop == null ? void 0 : stop();\n return toValue(r);\n })\n );\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(void 0, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(toValue(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(toValue(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n return value === othVal;\n}\nfunction useArrayDifference(...args) {\n var _a;\n const list = args[0];\n const values = args[1];\n let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n if (typeof compareFn === \"string\") {\n const key = compareFn;\n compareFn = (value, othVal) => value[key] === othVal[key];\n }\n return computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(() => toValue(\n toValue(list).find((element, index, array) => fn(toValue(element), index, array))\n ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(() => toValue(\n !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))\n ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n var _a;\n const list = args[0];\n const value = args[1];\n let comparator = args[2];\n let formIndex = 0;\n if (isArrayIncludesOptions(comparator)) {\n formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n comparator = comparator.comparator;\n }\n if (typeof comparator === \"string\") {\n const key = comparator;\n comparator = (element, value2) => element[key] === toValue(value2);\n }\n comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2);\n return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(\n toValue(element),\n toValue(value),\n index,\n toValue(array)\n )));\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n return computed(() => {\n const resolved = toValue(list);\n return args.length ? resolved.reduce(reduceCallback, toValue(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction uniq(array) {\n return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n return array.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x, array)))\n acc.push(v);\n return acc;\n }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n return computed(() => {\n const resolvedList = toValue(list).map((element) => toValue(element));\n return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n let _initialValue = unref(initialValue);\n const count = ref(initialValue);\n const {\n max = Number.POSITIVE_INFINITY,\n min = Number.NEGATIVE_INFINITY\n } = options;\n const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = _initialValue) => {\n _initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = num % 100;\n return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const matches = {\n Yo: () => formatOrdinal(years),\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n Mo: () => formatOrdinal(month + 1),\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n D: () => String(days),\n Do: () => formatOrdinal(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n Ho: () => formatOrdinal(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n ho: () => formatOrdinal(hours % 12 || 12),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mo: () => formatOrdinal(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n so: () => formatOrdinal(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true)\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n var _a2, _b;\n return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n });\n}\nfunction normalizeDate(date) {\n if (date === null)\n return new Date(Number.NaN);\n if (date === void 0)\n return /* @__PURE__ */ new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = ref(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = toValue(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || typeof interval === \"function\") {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = ref(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(\n callback ? () => {\n update();\n callback(counter.value);\n } : update,\n interval,\n { immediate }\n );\n if (exposeControls) {\n return {\n counter,\n reset,\n ...controls\n };\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = ref((_a = options.initialValue) != null ? _a : null);\n watch(\n source,\n () => ms.value = timestamp(),\n options\n );\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const isPending = ref(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, toValue(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(\n callback != null ? callback : noop,\n interval,\n options\n );\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return {\n ready,\n ...controls\n };\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = toValue(value);\n if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && Number.isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${toValue(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = ref(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = toValue(truthyValue);\n _value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? void 0 : options.immediate) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = Array.from({ length: oldList.length });\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n const {\n count,\n ...watchOptions\n } = options;\n const current = ref(0);\n const stop = watchWithFilter(\n source,\n (...args) => {\n current.value += 1;\n if (current.value >= toValue(count))\n nextTick(() => stop());\n cb(...args);\n },\n watchOptions\n );\n return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n const {\n debounce = 0,\n maxWait = void 0,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: debounceFilter(debounce, { maxWait })\n }\n );\n}\n\nfunction watchDeep(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n deep: true\n }\n );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n const filteredCb = createFilterWrapper(\n eventFilter,\n cb\n );\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = ref(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(\n source,\n (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n },\n watchOptions\n );\n } else {\n const disposables = [];\n const ignoreCounter = ref(0);\n const syncCounter = ref(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(\n watch(\n source,\n () => {\n syncCounter.value++;\n },\n { ...watchOptions, flush: \"sync\" }\n )\n );\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(\n watch(\n source,\n (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n },\n watchOptions\n )\n );\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n immediate: true\n }\n );\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n const {\n throttle = 0,\n trailing = true,\n leading = true,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: throttleFilter(throttle, trailing, leading)\n }\n );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = void 0;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return {\n ...res,\n trigger\n };\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => toValue(item));\n return toValue(sources);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n return watch(\n source,\n (v, ov, onInvalidate) => {\n if (v)\n cb(v, ov, onInvalidate);\n },\n options\n );\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, makeDestructurable, camelize, toValue, isClient, isObject, tryOnScopeDispose, isIOS, tryOnMounted, computedWithControl, objectOmit, promiseTimeout, until, increaseWithUnit, objectEntries, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, toRefs, notNullish, useIntervalFn, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, tryOnBeforeUnmount, identity, isDef, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, isVue3, version, defineComponent, h, TransitionGroup, shallowReactive, Fragment, watch, getCurrentInstance, customRef, onUpdated, onMounted, readonly, nextTick, reactive, markRaw, unref, getCurrentScope, isVue2, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\nimport { useEventListener as useEventListener$1 } from '@vueuse/core';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = void 0,\n shallow = true,\n onError = noop\n } = options;\n const started = ref(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nfunction createReusableTemplate(options = {}) {\n if (!isVue3 && !version.startsWith(\"2.7.\")) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] createReusableTemplate only works in Vue 2.7 or above.\");\n return;\n }\n const {\n inheritAttrs = true\n } = options;\n const render = shallowRef();\n const define = /* #__PURE__ */ defineComponent({\n setup(_, { slots }) {\n return () => {\n render.value = slots.default;\n };\n }\n });\n const reuse = /* #__PURE__ */ defineComponent({\n inheritAttrs,\n setup(_, { attrs, slots }) {\n return () => {\n var _a;\n if (!render.value && process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n const vnode = (_a = render.value) == null ? void 0 : _a.call(render, { ...keysToCamelKebabCase(attrs), $slots: slots });\n return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n };\n }\n });\n return makeDestructurable(\n { define, reuse },\n [define, reuse]\n );\n}\nfunction keysToCamelKebabCase(obj) {\n const newObj = {};\n for (const key in obj)\n newObj[camelize(key)] = obj[key];\n return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n if (!isVue3) {\n if (process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] createTemplatePromise only works in Vue 3 or above.\");\n return;\n }\n let index = 0;\n const instances = ref([]);\n function create(...args) {\n const props = shallowReactive({\n key: index++,\n args,\n promise: void 0,\n resolve: () => {\n },\n reject: () => {\n },\n isResolving: false,\n options\n });\n instances.value.push(props);\n props.promise = new Promise((_resolve, _reject) => {\n props.resolve = (v) => {\n props.isResolving = true;\n return _resolve(v);\n };\n props.reject = _reject;\n }).finally(() => {\n props.promise = void 0;\n const index2 = instances.value.indexOf(props);\n if (index2 !== -1)\n instances.value.splice(index2, 1);\n });\n return props.promise;\n }\n function start(...args) {\n if (options.singleton && instances.value.length > 0)\n return instances.value[0].promise;\n return create(...args);\n }\n const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n const renderList = () => instances.value.map((props) => {\n var _a;\n return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n });\n if (options.transition)\n return () => h(TransitionGroup, options.transition, renderList);\n return renderList;\n });\n component.start = start;\n return component;\n}\n\nfunction createUnrefFn(fn) {\n return function(...args) {\n return fn.apply(this, args.map((i) => toValue(i)));\n };\n}\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n if (!Array.isArray(events))\n events = [events];\n if (!Array.isArray(listeners))\n listeners = [listeners];\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(\n () => [unrefElement(target), toValue(options)],\n ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n const optionsClone = isObject(options2) ? { ...options2 } : options2;\n cleanups.push(\n ...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, optionsClone));\n })\n );\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n window.document.documentElement.addEventListener(\"click\", noop);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return ignore.some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n const listener = (event) => {\n const el = unrefElement(target);\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n const cleanup = [\n useEventListener(window, \"click\", listener, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement)))\n handler(event);\n }, 0);\n })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n posStart = void 0;\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n timeout = setTimeout(\n () => handler(ev),\n (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], clear, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction isFocusedElementEditable() {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n if (keyCode >= 97 && keyCode <= 122)\n return true;\n return false;\n}\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const {\n window = defaultWindow,\n deep = true\n } = options;\n const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n const getDeepActiveElement = () => {\n var _a2;\n let element = document == null ? void 0 : document.activeElement;\n if (deep) {\n while (element == null ? void 0 : element.shadowRoot)\n element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n }\n return element;\n };\n const activeElement = computedWithControl(\n () => null,\n () => getDeepActiveElement()\n );\n if (window) {\n useEventListener(window, \"blur\", (event) => {\n if (event.relatedTarget !== null)\n return;\n activeElement.trigger();\n }, true);\n useEventListener(window, \"focus\", activeElement.trigger, true);\n }\n return activeElement;\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n if (getCurrentInstance()) {\n onMounted(() => {\n isMounted.value = true;\n });\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n fpsLimit = void 0,\n window = defaultWindow\n } = options;\n const isActive = ref(false);\n const intervalLimit = fpsLimit ? 1e3 / fpsLimit : null;\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n const delta = timestamp - (previousFrameTimestamp || timestamp);\n if (intervalLimit && delta < intervalLimit) {\n rafId = window.requestAnimationFrame(loop);\n return;\n }\n fn({ delta, timestamp });\n previousFrameTimestamp = timestamp;\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nfunction useAnimate(target, keyframes, options) {\n let config;\n let animateOptions;\n if (isObject(options)) {\n config = options;\n animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n } else {\n config = { duration: options };\n animateOptions = options;\n }\n const {\n window = defaultWindow,\n immediate = true,\n commitStyles,\n persist,\n playbackRate: _playbackRate = 1,\n onReady,\n onError = (e) => {\n console.error(e);\n }\n } = config;\n const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n const animate = shallowRef(void 0);\n const store = shallowReactive({\n startTime: null,\n currentTime: null,\n timeline: null,\n playbackRate: _playbackRate,\n pending: false,\n playState: immediate ? \"idle\" : \"paused\",\n replaceState: \"active\"\n });\n const pending = computed(() => store.pending);\n const playState = computed(() => store.playState);\n const replaceState = computed(() => store.replaceState);\n const startTime = computed({\n get() {\n return store.startTime;\n },\n set(value) {\n store.startTime = value;\n if (animate.value)\n animate.value.startTime = value;\n }\n });\n const currentTime = computed({\n get() {\n return store.currentTime;\n },\n set(value) {\n store.currentTime = value;\n if (animate.value) {\n animate.value.currentTime = value;\n syncResume();\n }\n }\n });\n const timeline = computed({\n get() {\n return store.timeline;\n },\n set(value) {\n store.timeline = value;\n if (animate.value)\n animate.value.timeline = value;\n }\n });\n const playbackRate = computed({\n get() {\n return store.playbackRate;\n },\n set(value) {\n store.playbackRate = value;\n if (animate.value)\n animate.value.playbackRate = value;\n }\n });\n const play = () => {\n if (animate.value) {\n try {\n animate.value.play();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n } else {\n update();\n }\n };\n const pause = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.pause();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const reverse = () => {\n var _a;\n !animate.value && update();\n try {\n (_a = animate.value) == null ? void 0 : _a.reverse();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n };\n const finish = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.finish();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const cancel = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.cancel();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n watch(() => unrefElement(target), (el) => {\n el && update();\n });\n watch(() => keyframes, (value) => {\n !animate.value && update();\n if (!unrefElement(target) && animate.value) {\n animate.value.effect = new KeyframeEffect(\n unrefElement(target),\n toValue(value),\n animateOptions\n );\n }\n }, { deep: true });\n tryOnMounted(() => {\n nextTick(() => update(true));\n });\n tryOnScopeDispose(cancel);\n function update(init) {\n const el = unrefElement(target);\n if (!isSupported.value || !el)\n return;\n animate.value = el.animate(toValue(keyframes), animateOptions);\n if (commitStyles)\n animate.value.commitStyles();\n if (persist)\n animate.value.persist();\n if (_playbackRate !== 1)\n animate.value.playbackRate = _playbackRate;\n if (init && !immediate)\n animate.value.pause();\n else\n syncResume();\n onReady == null ? void 0 : onReady(animate.value);\n }\n useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause);\n const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n if (!animate.value)\n return;\n store.pending = animate.value.pending;\n store.playState = animate.value.playState;\n store.replaceState = animate.value.replaceState;\n store.startTime = animate.value.startTime;\n store.currentTime = animate.value.currentTime;\n store.timeline = animate.value.timeline;\n store.playbackRate = animate.value.playbackRate;\n }, { immediate: false });\n function syncResume() {\n if (isSupported.value)\n resumeRef();\n }\n function syncPause() {\n if (isSupported.value && window)\n window.requestAnimationFrame(pauseRef);\n }\n return {\n isSupported,\n animate,\n // actions\n play,\n pause,\n reverse,\n finish,\n cancel,\n // state\n pending,\n playState,\n replaceState,\n startTime,\n currentTime,\n timeline,\n playbackRate\n };\n}\n\nfunction useAsyncQueue(tasks, options) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop,\n signal\n } = options || {};\n const promiseState = {\n aborted: \"aborted\",\n fulfilled: \"fulfilled\",\n pending: \"pending\",\n rejected: \"rejected\"\n };\n const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = ref(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, new Error(\"aborted\"));\n return;\n }\n if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n const done = curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n activeIndex.value === tasks.length - 1 && onFinished();\n return currentRes;\n });\n if (!signal)\n return done;\n return Promise.race([done, whenAborted(signal)]);\n }).catch((e) => {\n if (signal == null ? void 0 : signal.aborted) {\n updateResult(promiseState.aborted, e);\n return e;\n }\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\nfunction whenAborted(signal) {\n return new Promise((resolve, reject) => {\n const error = new Error(\"aborted\");\n if (signal.aborted)\n reject(error);\n else\n signal.addEventListener(\"abort\", () => reject(error), { once: true });\n });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = shallowRef(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate)\n execute(delay);\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = ref(\"\");\n const promise = ref();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = toValue(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => base64.value = res);\n return promise.value;\n }\n if (isRef(target) || typeof target === \"function\")\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useBattery(options = {}) {\n const { navigator = defaultNavigator } = options;\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator);\n const charging = ref(false);\n const chargingTime = ref(0);\n const dischargingTime = ref(0);\n const level = ref(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n useEventListener(battery, events, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = void 0,\n optionalServices = void 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef(void 0);\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = ref();\n const isConnected = computed(() => {\n var _a;\n return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n });\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n device.value.addEventListener(\"gattserverdisconnected\", () => {\n });\n try {\n server.value = await device.value.gatt.connect();\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n });\n return {\n isSupported,\n isConnected,\n // Device:\n device,\n requestDevice,\n // Server:\n server,\n // Errors:\n error\n };\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n let mediaQuery;\n const matches = ref(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", handler);\n else\n mediaQuery.removeListener(handler);\n };\n const stopWatch = watchEffect(() => {\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(toValue(query));\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", handler);\n else\n mediaQuery.addListener(handler);\n matches.value = mediaQuery.matches;\n });\n tryOnScopeDispose(() => {\n stopWatch();\n cleanup();\n mediaQuery = void 0;\n });\n return matches;\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetify = {\n xs: 600,\n sm: 960,\n md: 1264,\n lg: 1904\n};\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 600,\n sm: 1024,\n md: 1440,\n lg: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = toValue(breakpoints[k]);\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow } = options;\n function match(query) {\n if (!window)\n return false;\n return window.matchMedia(query).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => greaterOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n return Object.assign(shortcutMethods, {\n greater(k) {\n return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n },\n greaterOrEqual,\n smaller(k) {\n return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n },\n smallerOrEqual(k) {\n return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n },\n between(a, b) {\n return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(`(min-width: ${getValue(k, 0.1)})`);\n },\n isGreaterOrEqual(k) {\n return match(`(min-width: ${getValue(k)})`);\n },\n isSmaller(k) {\n return match(`(max-width: ${getValue(k, -0.1)})`);\n },\n isSmallerOrEqual(k) {\n return match(`(max-width: ${getValue(k)})`);\n },\n isInBetween(a, b) {\n return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n },\n current() {\n const points = Object.keys(breakpoints).map((i) => [i, greaterOrEqual(i)]);\n return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n }\n });\n}\n\nfunction useBroadcastChannel(options) {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = ref(false);\n const channel = ref();\n const data = ref();\n const error = shallowRef(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n channel.value.addEventListener(\"message\", (e) => {\n data.value = e.data;\n }, { passive: true });\n channel.value.addEventListener(\"messageerror\", (e) => {\n error.value = e;\n }, { passive: true });\n channel.value.addEventListener(\"close\", () => {\n isClosed.value = true;\n });\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n}\n\nconst WRITABLE_PROPERTIES = [\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n const { window = defaultWindow } = options;\n const refs = Object.fromEntries(\n WRITABLE_PROPERTIES.map((key) => [key, ref()])\n );\n for (const [key, ref2] of objectEntries(refs)) {\n watch(ref2, (value) => {\n if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n return;\n window.location[key] = value;\n });\n }\n const buildState = (trigger) => {\n var _a;\n const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n const { origin } = (window == null ? void 0 : window.location) || {};\n for (const key of WRITABLE_PROPERTIES)\n refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n return reactive({\n trigger,\n state: state2,\n length,\n origin,\n ...refs\n });\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n const cachedValue = ref(refValue.value);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n let permissionStatus;\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = ref();\n const onChange = () => {\n if (permissionStatus)\n state.value = permissionStatus.state;\n };\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus) {\n try {\n permissionStatus = await navigator.permissions.query(desc);\n useEventListener(permissionStatus, \"change\", onChange);\n onChange();\n } catch (e) {\n state.value = \"prompt\";\n }\n }\n return permissionStatus;\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const permissionRead = usePermission(\"clipboard-read\");\n const permissionWrite = usePermission(\"clipboard-write\");\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = ref(\"\");\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateText() {\n if (isClipboardApiSupported.value && permissionRead.value !== \"denied\") {\n navigator.clipboard.readText().then((value) => {\n text.value = value;\n });\n } else {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateText);\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n if (isClipboardApiSupported.value && permissionWrite.value !== \"denied\")\n await navigator.clipboard.writeText(value);\n else\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nfunction useClipboardItems(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500\n } = options;\n const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const content = ref([]);\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateContent() {\n if (isSupported.value) {\n navigator.clipboard.read().then((items) => {\n content.value = items;\n });\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateContent);\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n await navigator.clipboard.write(value);\n content.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n return {\n isSupported,\n content,\n copied,\n copy\n };\n}\n\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const {\n manual,\n clone = cloneFnJSON,\n // watch options\n deep = true,\n immediate = true\n } = options;\n function sync() {\n cloned.value = clone(toValue(source));\n }\n if (!manual && (isRef(source) || typeof source === \"function\")) {\n watch(source, sync, {\n ...options,\n deep,\n immediate\n });\n } else {\n sync();\n }\n return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n useEventListener(window, \"storage\", update);\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n return data;\n function write(v) {\n try {\n if (v == null) {\n storage.removeItem(key);\n } else {\n const serialized = serializer.write(v);\n const oldValue = storage.getItem(key);\n if (oldValue !== serialized) {\n storage.setItem(key, serialized);\n if (window) {\n window.dispatchEvent(new CustomEvent(customStorageEventName, {\n detail: {\n key,\n oldValue,\n newValue: serialized,\n storageArea: storage\n }\n }));\n }\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n const styleString = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n style.appendChild(document.createTextNode(styleString));\n window.document.head.appendChild(style);\n }\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n el.classList.add(v);\n else\n el.classList.remove(v);\n });\n } else {\n el.setAttribute(attribute2, value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n try {\n return Object.assign(auto, { store, system, state });\n } catch (e) {\n return auto;\n }\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const stopWatch = watch(\n () => unrefElement(target),\n (el) => {\n cleanup();\n if (isSupported.value && window && el) {\n observer = new MutationObserver(callback);\n observer.observe(el, mutationOptions);\n }\n },\n { immediate: true }\n );\n const takeRecords = () => {\n return observer == null ? void 0 : observer.takeRecords();\n };\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue = \"\", observe = false } = options;\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n variable.value = value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n updateCssVar,\n { immediate: true }\n );\n watch(\n variable,\n (val) => {\n var _a;\n if ((_a = elRef.value) == null ? void 0 : _a.style)\n elRef.value.style.setProperty(toValue(prop), val);\n }\n );\n return variable;\n}\n\nfunction useCurrentElement() {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(\n () => null,\n () => vm.proxy.$el\n );\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n const state = shallowRef(getInitialValue());\n const listRef = toRef(list);\n const index = computed({\n get() {\n var _a;\n const targetList = listRef.value;\n let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const targetList = listRef.value;\n const length = targetList.length;\n const index2 = (i % length + length) % length;\n const value = targetList[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n function getInitialValue() {\n var _a, _b;\n return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n }\n watch(listRef, () => set(index.value));\n return {\n state,\n index,\n next,\n prev\n };\n}\n\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\",\n window = defaultWindow\n } = options;\n const mode = useColorMode({\n ...options,\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n });\n const system = computed(() => {\n if (mode.system) {\n return mode.system.value;\n } else {\n const preferredDark = usePreferredDark({ window });\n return preferredDark.value ? \"dark\" : \"light\";\n }\n });\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n const modeVal = v ? \"dark\" : \"light\";\n if (system.value === modeVal)\n mode.value = \"auto\";\n else\n mode.value = modeVal;\n }\n });\n return isDark;\n}\n\nfunction fnBypass(v) {\n return v;\n}\nfunction fnSetSource(source, value) {\n return source.value = value;\n}\nfunction defaultDump(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(\n source,\n commit,\n { deep, flush, eventFilter: composedFilter }\n );\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return {\n ...manualHistory,\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n eventFilter = bypassFilter\n } = options;\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = ref(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n if (window) {\n const onDeviceMotion = createFilterWrapper(\n eventFilter,\n (event) => {\n acceleration.value = event.acceleration;\n accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n rotationRate.value = event.rotationRate;\n interval.value = event.interval;\n }\n );\n useEventListener(window, \"devicemotion\", onDeviceMotion);\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = ref(false);\n const alpha = ref(null);\n const beta = ref(null);\n const gamma = ref(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const pixelRatio = ref(1);\n if (window) {\n let observe2 = function() {\n pixelRatio.value = window.devicePixelRatio;\n cleanup2();\n media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n media.addEventListener(\"change\", observe2, { once: true });\n }, cleanup2 = function() {\n media == null ? void 0 : media.removeEventListener(\"change\", observe2);\n };\n let media;\n observe2();\n tryOnScopeDispose(cleanup2);\n }\n return { pixelRatio };\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = ref(false);\n let stream;\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? void 0 : onUpdated(devices.value);\n if (stream) {\n stream.getTracks().forEach((t) => t.stop());\n stream = null;\n }\n }\n async function ensurePermissions() {\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(\"camera\", { controls: true });\n await query();\n if (state.value !== \"granted\") {\n stream = await navigator.mediaDevices.getUserMedia(constraints);\n update();\n permissionGranted.value = true;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update);\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility(options = {}) {\n const { document = defaultDocument } = options;\n if (!document)\n return ref(\"visible\");\n const visibility = ref(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n });\n return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n var _a, _b;\n const {\n pointerTypes,\n preventDefault,\n stopPropagation,\n exact,\n onMove,\n onEnd,\n onStart,\n initialValue,\n axis = \"both\",\n draggingElement = defaultWindow,\n containerElement,\n handle: draggingHandle = target\n } = options;\n const position = ref(\n (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n );\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (pointerTypes)\n return pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (toValue(preventDefault))\n e.preventDefault();\n if (toValue(stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (!filterEvent(e))\n return;\n if (toValue(exact) && e.target !== toValue(target))\n return;\n const container = toValue(containerElement);\n const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n const targetRect = toValue(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - (container ? targetRect.left - containerRect.left : targetRect.left),\n y: e.clientY - (container ? targetRect.top - containerRect.top : targetRect.top)\n };\n if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n var _a2;\n if (!filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n const container = toValue(containerElement);\n const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n const targetRect = toValue(target).getBoundingClientRect();\n let { x, y } = position.value;\n if (axis === \"x\" || axis === \"both\") {\n x = e.clientX - pressedDelta.value.x;\n if (container)\n x = Math.min(Math.max(0, x), containerRect.width - targetRect.width);\n }\n if (axis === \"y\" || axis === \"both\") {\n y = e.clientY - pressedDelta.value.y;\n if (container)\n y = Math.min(Math.max(0, y), containerRect.height - targetRect.height);\n }\n position.value = {\n x,\n y\n };\n onMove == null ? void 0 : onMove(position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n if (!filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = void 0;\n onEnd == null ? void 0 : onEnd(position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n const config = { capture: (_b = options.capture) != null ? _b : true };\n useEventListener(draggingHandle, \"pointerdown\", start, config);\n useEventListener(draggingElement, \"pointermove\", move, config);\n useEventListener(draggingElement, \"pointerup\", end, config);\n }\n return {\n ...toRefs(position),\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(\n () => `left:${position.value.x}px;top:${position.value.y}px;`\n )\n };\n}\n\nfunction useDropZone(target, options = {}) {\n const isOverDropZone = ref(false);\n const files = shallowRef(null);\n let counter = 0;\n let isDataTypeIncluded = true;\n if (isClient) {\n const _options = typeof options === \"function\" ? { onDrop: options } : options;\n const getFiles = (event) => {\n var _a, _b;\n const list = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n return files.value = list.length === 0 ? null : list;\n };\n useEventListener$1(target, \"dragenter\", (event) => {\n var _a, _b;\n const types = Array.from(((_a = event == null ? void 0 : event.dataTransfer) == null ? void 0 : _a.items) || []).map((i) => i.kind === \"file\" ? i.type : null).filter(notNullish);\n if (_options.dataTypes && event.dataTransfer) {\n const dataTypes = unref(_options.dataTypes);\n isDataTypeIncluded = typeof dataTypes === \"function\" ? dataTypes(types) : dataTypes ? dataTypes.some((item) => types.includes(item)) : true;\n if (!isDataTypeIncluded)\n return;\n }\n event.preventDefault();\n counter += 1;\n isOverDropZone.value = true;\n (_b = _options.onEnter) == null ? void 0 : _b.call(_options, getFiles(event), event);\n });\n useEventListener$1(target, \"dragover\", (event) => {\n var _a;\n if (!isDataTypeIncluded)\n return;\n event.preventDefault();\n (_a = _options.onOver) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n useEventListener$1(target, \"dragleave\", (event) => {\n var _a;\n if (!isDataTypeIncluded)\n return;\n event.preventDefault();\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n (_a = _options.onLeave) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n useEventListener$1(target, \"drop\", (event) => {\n var _a;\n event.preventDefault();\n counter = 0;\n isOverDropZone.value = false;\n (_a = _options.onDrop) == null ? void 0 : _a.call(_options, getFiles(event), event);\n });\n }\n return {\n files,\n isOverDropZone\n };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => Array.isArray(target) ? target.map((el) => unrefElement(el)) : [unrefElement(target)]);\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els)\n _el && observer.observe(_el, observerOptions);\n }\n },\n { immediate: true, flush: \"post\", deep: true }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true\n } = options;\n const height = ref(0);\n const bottom = ref(0);\n const left = ref(0);\n const right = ref(0);\n const top = ref(0);\n const width = ref(0);\n const x = ref(0);\n const y = ref(0);\n function update() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useElementByPoint(options) {\n const {\n x,\n y,\n document = defaultDocument,\n multiple,\n interval = \"requestAnimationFrame\",\n immediate = true\n } = options;\n const isSupported = useSupported(() => {\n if (toValue(multiple))\n return document && \"elementsFromPoint\" in document;\n return document && \"elementFromPoint\" in document;\n });\n const element = ref(null);\n const cb = () => {\n var _a, _b;\n element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n };\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n return {\n isSupported,\n element,\n ...controls\n };\n}\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n window = defaultWindow\n } = options;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const styles = window.getComputedStyle($elem);\n width.value = Number.parseFloat(styles.width);\n height.value = Number.parseFloat(styles.height);\n }\n } else {\n if (boxSize) {\n const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0.1,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = ref(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const { window = defaultWindow, scrollTarget } = options;\n const elementIsVisible = ref(false);\n useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n },\n {\n root: scrollTarget,\n window,\n threshold: 0\n }\n );\n return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || /* @__PURE__ */ new Set();\n listeners.add(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n listeners.delete(listener);\n if (!listeners.size)\n reset();\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction useEventSource(url, events = [], options = {}) {\n const event = ref(null);\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const eventSource = ref(null);\n const error = shallowRef(null);\n const {\n withCredentials = false\n } = options;\n const close = () => {\n if (eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n }\n };\n const es = new EventSource(url, { withCredentials });\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n eventSource,\n event,\n data,\n status,\n error,\n close\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = ref(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = toRef(newIcon);\n const applyIcon = (icon) => {\n const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n if (!elements || elements.length === 0) {\n const link = document == null ? void 0 : document.createElement(\"link\");\n if (link) {\n link.rel = rel;\n link.href = `${baseUrl}${icon}`;\n link.type = `image/${icon.split(\".\").pop()}`;\n document == null ? void 0 : document.head.append(link);\n }\n return;\n }\n elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(\n favicon,\n (i, o) => {\n if (typeof i === \"string\" && i !== o)\n applyIcon(i);\n },\n { immediate: true }\n );\n return favicon;\n}\n\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nfunction isAbsoluteURL(url) {\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries([...headers.entries()]);\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n const callback = callbacks[callbacks.length - 1];\n if (callback)\n return { ...ctx, ...await callback(ctx) };\n return ctx;\n };\n } else {\n return async (ctx) => {\n for (const callback of callbacks) {\n if (callback)\n ctx = { ...ctx, ...await callback(ctx) };\n }\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = toValue(config.baseUrl);\n const targetUrl = toValue(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = {\n ...options,\n ...args[0],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n };\n } else {\n fetchOptions = {\n ...fetchOptions,\n ...args[0],\n headers: {\n ...headersToObject(fetchOptions.headers) || {},\n ...headersToObject(args[0].headers) || {}\n }\n };\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = {\n ...options,\n ...args[1],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n };\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = {\n immediate: true,\n refetch: false,\n timeout: 0,\n updateDataOnError: false\n };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: void 0\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = { ...options, ...args[0] };\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = { ...options, ...args[1] };\n }\n const {\n fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = ref(false);\n const isFetching = ref(false);\n const aborted = ref(false);\n const statusCode = ref(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData || null);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort) {\n controller == null ? void 0 : controller.abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = {\n ...fetchOptions,\n signal: controller.signal\n };\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n let executeCounter = 0;\n const execute = async (throwOnFailed = false) => {\n var _a2, _b;\n abort();\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n executeCounter += 1;\n const currentExecuteCounter = executeCounter;\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n if (config.payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n const payload = toValue(config.payload);\n if (!config.payloadType && payload && Object.getPrototypeOf(payload) === Object.prototype && !(payload instanceof FormData))\n config.payloadType = \"json\";\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: toValue(url),\n options: {\n ...defaultFetchOptions,\n ...fetchOptions\n },\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return fetch(\n context.url,\n {\n ...defaultFetchOptions,\n ...context.options,\n headers: {\n ...headersToObject(defaultFetchOptions.headers),\n ...headersToObject((_b = context.options) == null ? void 0 : _b.headers)\n }\n }\n ).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse.clone()[config.type]();\n if (!fetchResponse.ok) {\n data.value = initialData || null;\n throw new Error(fetchResponse.statusText);\n }\n if (options.afterFetch) {\n ({ data: responseData } = await options.afterFetch({\n data: responseData,\n response: fetchResponse\n }));\n }\n data.value = responseData;\n responseEvent.trigger(fetchResponse);\n return fetchResponse;\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError) {\n ({ error: errorData, data: responseData } = await options.onFetchError({\n data: responseData,\n error: fetchError,\n response: response.value\n }));\n }\n error.value = errorData;\n if (options.updateDataOnError)\n data.value = responseData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n throw fetchError;\n return null;\n }).finally(() => {\n if (currentExecuteCounter === executeCounter)\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n };\n const refetch = toRef(options.refetch);\n watch(\n [\n refetch,\n toRef(url)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n const shell = {\n isFinished,\n statusCode,\n response,\n error,\n data,\n isFetching,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n // method\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n // type\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch(\n [\n refetch,\n toRef(config.payload)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return void 0;\n };\n }\n if (options.immediate)\n Promise.resolve().then(() => execute());\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n return `${start}/${end}`;\n return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\",\n reset: false,\n directory: false\n};\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(null);\n const { on: onChange, trigger } = createEventHook();\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n trigger(files.value);\n };\n }\n const reset = () => {\n files.value = null;\n if (input) {\n input.value = \"\";\n trigger(null);\n }\n };\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = {\n ...DEFAULT_OPTIONS,\n ...options,\n ...localOptions\n };\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n input.webkitdirectory = _options.directory;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n if (_options.reset)\n reset();\n input.click();\n };\n return {\n files: readonly(files),\n open,\n reset,\n onChange\n };\n}\n\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = options;\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = ref();\n const data = ref();\n const file = ref();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n fileHandle.value = handle;\n await updateFile();\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n data.value = void 0;\n await updateFile();\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n const type = toValue(dataType);\n if (type === \"Text\")\n data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n else if (type === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n else if (type === \"Blob\")\n data.value = file.value;\n }\n watch(() => toValue(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false, focusVisible = false } = options;\n const innerFocused = ref(false);\n const targetElement = computed(() => unrefElement(target));\n useEventListener(targetElement, \"focus\", (event) => {\n var _a, _b;\n if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n innerFocused.value = true;\n });\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? void 0 : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? void 0 : _b.focus();\n }\n });\n watch(\n targetElement,\n () => {\n focused.value = initialValue;\n },\n { immediate: true, flush: \"post\" }\n );\n return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n const activeElement = useActiveElement(options);\n const targetElement = computed(() => unrefElement(target));\n const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = ref(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst eventHandlers = [\n \"fullscreenchange\",\n \"webkitfullscreenchange\",\n \"webkitendfullscreen\",\n \"mozfullscreenchange\",\n \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n const {\n document = defaultDocument,\n autoExit = false\n } = options;\n const targetRef = computed(() => {\n var _a;\n return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.querySelector(\"html\");\n });\n const isFullscreen = ref(false);\n const requestMethod = computed(() => {\n return [\n \"requestFullscreen\",\n \"webkitRequestFullscreen\",\n \"webkitEnterFullscreen\",\n \"webkitEnterFullScreen\",\n \"webkitRequestFullScreen\",\n \"mozRequestFullScreen\",\n \"msRequestFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const exitMethod = computed(() => {\n return [\n \"exitFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitExitFullScreen\",\n \"webkitCancelFullScreen\",\n \"mozCancelFullScreen\",\n \"msExitFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenEnabled = computed(() => {\n return [\n \"fullScreen\",\n \"webkitIsFullScreen\",\n \"webkitDisplayingFullscreen\",\n \"mozFullScreen\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenElementMethod = [\n \"fullscreenElement\",\n \"webkitFullscreenElement\",\n \"mozFullScreenElement\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document);\n const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n const isCurrentElementFullScreen = () => {\n if (fullscreenElementMethod)\n return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n return false;\n };\n const isElementFullScreen = () => {\n if (fullscreenEnabled.value) {\n if (document && document[fullscreenEnabled.value] != null) {\n return document[fullscreenEnabled.value];\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n return Boolean(target2[fullscreenEnabled.value]);\n }\n }\n }\n return false;\n };\n async function exit() {\n if (!isSupported.value || !isFullscreen.value)\n return;\n if (exitMethod.value) {\n if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n await document[exitMethod.value]();\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n await target2[exitMethod.value]();\n }\n }\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value || isFullscreen.value)\n return;\n if (isElementFullScreen())\n await exit();\n const target2 = targetRef.value;\n if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n await target2[requestMethod.value]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n await (isFullscreen.value ? exit() : enter());\n }\n const handlerCallback = () => {\n const isElementFullScreenValue = isElementFullScreen();\n if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n isFullscreen.value = isElementFullScreenValue;\n };\n useEventListener(document, eventHandlers, handlerCallback, false);\n useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, false);\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n ...gamepad,\n id: gamepad.id,\n hapticActuators,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (let i = 0; i < _gamepads.length; ++i) {\n const gamepad = _gamepads[i];\n if (gamepad) {\n const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index);\n if (index > -1)\n gamepads.value[index] = stateFromGamepad(gamepad);\n }\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n if (_gamepads) {\n for (let i = 0; i < _gamepads.length; ++i) {\n const gamepad = _gamepads[i];\n if (gamepad)\n onGamepadConnected(gamepad);\n }\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = ref(null);\n const error = shallowRef(null);\n const coords = ref({\n accuracy: 0,\n latitude: Number.POSITIVE_INFINITY,\n longitude: Number.POSITIVE_INFINITY,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(\n updatePosition,\n (err) => error.value = err,\n {\n enableHighAccuracy,\n maximumAge,\n timeout\n }\n );\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = ref(initialState);\n const lastActive = ref(timestamp());\n let timer;\n const reset = () => {\n idle.value = false;\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n };\n const onEvent = createFilterWrapper(\n eventFilter,\n () => {\n lastActive.value = timestamp();\n reset();\n }\n );\n if (window) {\n const document = window.document;\n for (const event of events)\n useEventListener(window, event, onEvent, { passive: true });\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n });\n }\n reset();\n }\n return {\n idle,\n lastActive,\n reset\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n img.src = src;\n if (srcset)\n img.srcset = srcset;\n if (sizes)\n img.sizes = sizes;\n if (clazz)\n img.className = clazz;\n if (loading)\n img.loading = loading;\n if (crossorigin)\n img.crossOrigin = crossorigin;\n if (referrerPolicy)\n img.referrerPolicy = referrerPolicy;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n void 0,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = target.document ? target.document.documentElement : (_a = target.documentElement) != null ? _a : target;\n const { display, flexDirection } = getComputedStyle(el);\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = Math.abs(scrollLeft) <= 0 + (offset.left || 0);\n const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = Math.abs(scrollTop) <= 0 + (offset.top || 0);\n const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n return {\n isLoading\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = ref(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(/* @__PURE__ */ new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = /* @__PURE__ */ new Set();\n const usedKeys = /* @__PURE__ */ new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive: true });\n useEventListener(\"focus\", reset, { passive: true });\n const proxy = new Proxy(\n refs,\n {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n } else {\n refs[prop] = ref(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? toValue(r) : r;\n }\n }\n );\n return proxy;\n}\n\nfunction usingElRef(source, cb) {\n if (toValue(source))\n cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n options = {\n ...defaultOptions,\n ...options\n };\n const {\n document = defaultDocument\n } = options;\n const currentTime = ref(0);\n const duration = ref(0);\n const seeking = ref(false);\n const volume = ref(1);\n const waiting = ref(false);\n const ended = ref(false);\n const playing = ref(false);\n const rate = ref(1);\n const stalled = ref(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = ref(-1);\n const isPictureInPicture = ref(false);\n const muted = ref(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = typeof track === \"number\" ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = typeof track === \"number\" ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = toValue(target);\n if (!el)\n return;\n const src = toValue(options.src);\n let sources = [];\n if (!src)\n return;\n if (typeof src === \"string\")\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n e.remove();\n });\n sources.forEach(({ src: src2, type }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.addEventListener(\"error\", sourceErrorEvent.trigger);\n el.appendChild(source);\n });\n el.load();\n });\n tryOnScopeDispose(() => {\n const el = toValue(target);\n if (!el)\n return;\n el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n });\n watch([target, volume], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.volume = volume.value;\n });\n watch([target, muted], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.muted = muted.value;\n });\n watch([target, rate], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.playbackRate = rate.value;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = toValue(options.tracks);\n const el = toValue(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = toValue(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = toValue(target);\n if (!el)\n return;\n isPlaying ? el.play() : el.pause();\n });\n useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime));\n useEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration);\n useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered));\n useEventListener(target, \"seeking\", () => seeking.value = true);\n useEventListener(target, \"seeked\", () => seeking.value = false);\n useEventListener(target, [\"waiting\", \"loadstart\"], () => {\n waiting.value = true;\n ignorePlayingUpdates(() => playing.value = false);\n });\n useEventListener(target, \"loadeddata\", () => waiting.value = false);\n useEventListener(target, \"playing\", () => {\n waiting.value = false;\n ended.value = false;\n ignorePlayingUpdates(() => playing.value = true);\n });\n useEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate);\n useEventListener(target, \"stalled\", () => stalled.value = true);\n useEventListener(target, \"ended\", () => ended.value = true);\n useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n useEventListener(target, \"volumechange\", () => {\n const el = toValue(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n });\n const listeners = [];\n const stop = watch([target], () => {\n const el = toValue(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n // Volume\n volume,\n muted,\n // Tracks\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n // Picture in Picture\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n // Events\n onSourceError: sourceErrorEvent.on\n };\n}\n\nfunction getMapVue2Compat() {\n const data = shallowReactive({});\n return {\n get: (key) => data[key],\n set: (key, value) => set(data, key, value),\n has: (key) => hasOwn(data, key),\n delete: (key) => del(data, key),\n clear: () => {\n Object.keys(data).forEach((key) => {\n del(data, key);\n });\n }\n };\n}\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? void 0 : options.cache)\n return shallowReactive(options.cache);\n if (isVue2)\n return getMapVue2Compat();\n return shallowReactive(/* @__PURE__ */ new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n page: (event) => [event.pageX, event.pageY],\n client: (event) => [event.clientX, event.clientY],\n screen: (event) => [event.screenX, event.screenY],\n movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n target = window,\n scroll = true,\n eventFilter\n } = options;\n let _prevMouseEvent = null;\n const x = ref(initialValue.x);\n const y = ref(initialValue.y);\n const sourceType = ref(null);\n const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n const mouseHandler = (event) => {\n const result = extractor(event);\n _prevMouseEvent = event;\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"mouse\";\n }\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const result = extractor(event.touches[0]);\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"touch\";\n }\n }\n };\n const scrollHandler = () => {\n if (!_prevMouseEvent || !window)\n return;\n const pos = extractor(_prevMouseEvent);\n if (_prevMouseEvent instanceof MouseEvent && pos) {\n x.value = pos[0] + window.scrollX;\n y.value = pos[1] + window.scrollY;\n }\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n if (touch && type !== \"movement\") {\n useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n if (resetOnTouchEnds)\n useEventListener(target, \"touchend\", reset, listenerOptions);\n }\n if (scroll && type === \"page\")\n useEventListener(window, \"scroll\", scrollHandlerWrapper, { passive: true });\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const type = options.type || \"page\";\n const { x, y, sourceType } = useMouse(options);\n const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n const elementX = ref(0);\n const elementY = ref(0);\n const elementPositionX = ref(0);\n const elementPositionY = ref(0);\n const elementHeight = ref(0);\n const elementWidth = ref(0);\n const isOutside = ref(true);\n let stop = () => {\n };\n if (window) {\n stop = watch(\n [targetRef, x, y],\n () => {\n const el = unrefElement(targetRef);\n if (!el)\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n },\n { immediate: true }\n );\n useEventListener(document, \"mouseleave\", () => {\n isOutside.value = true;\n });\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n capture = false,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = ref(initialValue);\n const sourceType = ref(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => () => {\n pressed.value = true;\n sourceType.value = srcType;\n };\n const onReleased = () => {\n pressed.value = false;\n sourceType.value = null;\n };\n const target = computed(() => unrefElement(options.target) || window);\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true, capture });\n useEventListener(window, \"mouseleave\", onReleased, { passive: true, capture });\n useEventListener(window, \"mouseup\", onReleased, { passive: true, capture });\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true, capture });\n useEventListener(window, \"drop\", onReleased, { passive: true, capture });\n useEventListener(window, \"dragend\", onReleased, { passive: true, capture });\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true, capture });\n useEventListener(window, \"touchend\", onReleased, { passive: true, capture });\n useEventListener(window, \"touchcancel\", onReleased, { passive: true, capture });\n }\n return {\n pressed,\n sourceType\n };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = ref(navigator == null ? void 0 : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n });\n return {\n isSupported,\n language\n };\n}\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = ref(true);\n const saveData = ref(false);\n const offlineAt = ref(void 0);\n const onlineAt = ref(void 0);\n const downlink = ref(void 0);\n const downlinkMax = ref(void 0);\n const rtt = ref(void 0);\n const effectiveType = ref(void 0);\n const type = ref(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? void 0 : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : void 0;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n });\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n });\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, false);\n updateNetworkInformation();\n return {\n isSupported,\n isOnline,\n saveData,\n offlineAt,\n onlineAt,\n downlink,\n downlinkMax,\n effectiveType,\n rtt,\n type\n };\n}\n\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(/* @__PURE__ */ new Date());\n const update = () => now.value = /* @__PURE__ */ new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return {\n now,\n ...controls\n };\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = ref();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = void 0;\n };\n watch(\n () => toValue(object),\n (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n },\n { immediate: true }\n );\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (typeof value === \"function\" || isReadonly(value))\n return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, toValue(min), toValue(max));\n },\n set(value2) {\n _value.value = clamp(value2, toValue(min), toValue(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n const pageCount = computed(() => Math.max(\n 1,\n Math.ceil(toValue(total) / toValue(currentPageSize))\n ));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page)) {\n syncRef(page, currentPage, {\n direction: isReadonly(page) ? \"ltr\" : \"both\"\n });\n }\n if (isRef(pageSize)) {\n syncRef(pageSize, currentPageSize, {\n direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n });\n }\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = ref(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n useEventListener(window, \"mouseout\", handler, { passive: true });\n useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n }\n return isLeft;\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))\n return \"deviceOrientation\";\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n const value = -orientation.beta / 90;\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n const value = orientation.gamma / 90;\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n const parentElement = shallowRef();\n const update = () => {\n const el = unrefElement(element);\n if (el)\n parentElement.value = el.parentElement;\n };\n tryOnMounted(update);\n watch(() => toValue(element), update);\n return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n const {\n window = defaultWindow,\n immediate = true,\n ...performanceOptions\n } = options;\n const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n let observer;\n const stop = () => {\n observer == null ? void 0 : observer.disconnect();\n };\n const start = () => {\n if (isSupported.value) {\n stop();\n observer = new PerformanceObserver(callback);\n observer.observe(performanceOptions);\n }\n };\n tryOnScopeDispose(stop);\n if (immediate)\n start();\n return {\n isSupported,\n start,\n stop\n };\n}\n\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = ref(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n }\n return {\n ...toRefs(state),\n isInside\n };\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument, pointerLockOptions } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = ref();\n const triggerElement = ref();\n let targetElement;\n if (isSupported.value) {\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n });\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n });\n }\n async function lock(e, options2) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock(options2 != null ? options2 : pointerLockOptions);\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = toRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n disableTextSelect = false\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = ref(false);\n const isPointerDown = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? \"left\" : \"right\";\n } else {\n return distanceY.value > 0 ? \"up\" : \"down\";\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n const eventTarget = e.target;\n eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }),\n useEventListener(target, \"pointerup\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n })\n ];\n tryOnMounted(() => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n if (disableTextSelect) {\n (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty(\"-webkit-user-select\", \"none\");\n (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty(\"-ms-user-select\", \"none\");\n (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty(\"user-select\", \"none\");\n }\n });\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(\n toRef(value),\n (_, oldValue) => {\n previous.value = oldValue;\n },\n { flush: \"sync\" }\n );\n return readonly(previous);\n}\n\nfunction useScreenOrientation(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = ref(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n });\n }\n const lockOrientation = (type) => {\n if (isSupported.value && typeof screenOrientation.lock === \"function\")\n return screenOrientation.lock(type);\n return Promise.reject(new Error(\"Not supported\"));\n };\n const unlockOrientation = () => {\n if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = ref(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = toValue(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n el.addEventListener(\"error\", (event) => reject(event));\n el.addEventListener(\"abort\", (event) => reject(event));\n el.addEventListener(\"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n });\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow;\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, initialOverflow);\n if (isLocked.value)\n ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n var _a;\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n el.style.overflow = (_a = elInitialOverflow.get(el)) != null ? _a : \"\";\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else\n unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = {\n ...toValue(shareOptions),\n ...toValue(overrideOptions)\n };\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...toValue(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(toValue(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n window = defaultWindow\n } = options;\n const lang = toRef(options.lang || \"en-US\");\n const isListening = ref(false);\n const isFinal = ref(false);\n const result = ref(\"\");\n const error = shallowRef(void 0);\n const toggle = (value = !isListening.value) => {\n isListening.value = value;\n };\n const start = () => {\n isListening.value = true;\n };\n const stop = () => {\n isListening.value = false;\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n let recognition;\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = toValue(lang);\n recognition.onstart = () => {\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const transcript = Array.from(event.results).map((result2) => {\n isFinal.value = result2.isFinal;\n return result2[0];\n }).map((result2) => result2.transcript).join(\"\");\n result.value = transcript;\n error.value = void 0;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = toValue(lang);\n };\n watch(isListening, () => {\n if (isListening.value)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n isListening.value = false;\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = ref(false);\n const status = ref(\"init\");\n const spokenText = toRef(text || \"\");\n const lang = toRef(options.lang || \"en-US\");\n const error = shallowRef(void 0);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = toValue(lang);\n utterance2.voice = toValue(options.voice) || null;\n utterance2.pitch = toValue(pitch);\n utterance2.rate = toValue(rate);\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n utterance && synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = toValue(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(initialValue);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = { ...rawInit, ...value };\n else\n data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)));\n if (storage) {\n watchWithFilter(\n data,\n async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n },\n {\n flush,\n deep,\n eventFilter\n }\n );\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = ref(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = ref(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(\n cssRef,\n (value) => {\n el.textContent = value;\n },\n { immediate: true }\n );\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true,\n window = defaultWindow\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? \"left\" : \"right\";\n } else {\n return diffY.value > 0 ? \"up\" : \"down\";\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n let listenerOptions;\n const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n if (!passive)\n listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n else\n listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n if (listenerOptions.capture && !listenerOptions.passive)\n e.preventDefault();\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isPassiveEventSupported,\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop\n };\n}\nfunction checkPassiveEventSupport(document) {\n if (!document)\n return false;\n let supportsPassive = false;\n const optionsBlock = {\n get passive() {\n supportsPassive = true;\n return false;\n }\n };\n document.addEventListener(\"x\", noop, optionsBlock);\n document.removeEventListener(\"x\", noop);\n return supportsPassive;\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(\n document.querySelector(selector),\n () => dir.value = getValue(),\n { attributes: true }\n );\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange);\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction useTextareaAutosize(options) {\n const textarea = ref(options == null ? void 0 : options.element);\n const input = ref(options == null ? void 0 : options.input);\n const textareaScrollHeight = ref(1);\n function triggerResize() {\n var _a, _b;\n if (!textarea.value)\n return;\n let height = \"\";\n textarea.value.style.height = \"1px\";\n textareaScrollHeight.value = (_a = textarea.value) == null ? void 0 : _a.scrollHeight;\n if (options == null ? void 0 : options.styleTarget)\n toValue(options.styleTarget).style.height = `${textareaScrollHeight.value}px`;\n else\n height = `${textareaScrollHeight.value}px`;\n textarea.value.style.height = height;\n (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);\n }\n watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n useResizeObserver(textarea, () => triggerResize());\n if (options == null ? void 0 : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n if (exposeControls) {\n return {\n timeAgo,\n ...controls\n };\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n const { start } = useTimeoutFn(loop, interval, { immediate: false });\n const isActive = ref(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = ref(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return {\n timestamp: ts,\n ...controls\n };\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b, _c;\n const {\n document = defaultDocument,\n restoreOnUnmount = (t) => t\n } = options;\n const originalTitle = (_a = document == null ? void 0 : document.title) != null ? _a : \"\";\n const title = toRef((_b = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _b : null);\n const isReadonly = newTitle && typeof newTitle === \"function\";\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n }\n watch(\n title,\n (t, o) => {\n if (t !== o && document)\n document.title = format(typeof t === \"string\" ? t : \"\");\n },\n { immediate: true }\n );\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver(\n (_c = document.head) == null ? void 0 : _c.querySelector(\"title\"),\n () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n },\n { childList: true }\n );\n }\n tryOnBeforeUnmount(() => {\n if (restoreOnUnmount) {\n const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n if (restoredTitle != null && document)\n document.title = restoredTitle;\n }\n });\n return title;\n}\n\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n return a + alpha * (b - a);\n}\nfunction toVec(t) {\n return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n var _a, _b;\n const fromVal = toValue(from);\n const toVal = toValue(to);\n const v1 = toVec(fromVal);\n const v2 = toVec(toVal);\n const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n const startedAt = Date.now();\n const endAt = Date.now() + duration;\n const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n return new Promise((resolve) => {\n source.value = fromVal;\n const tick = () => {\n var _a2;\n if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n resolve();\n return;\n }\n const now = Date.now();\n const alpha = ease((now - startedAt) / duration);\n const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n if (Array.isArray(source.value))\n source.value = arr.map((n, i) => {\n var _a3, _b2;\n return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n });\n else if (typeof source.value === \"number\")\n source.value = arr[0];\n if (now < endAt) {\n requestAnimationFrame(tick);\n } else {\n source.value = toVal;\n resolve();\n }\n };\n tick();\n });\n}\nfunction useTransition(source, options = {}) {\n let currentId = 0;\n const sourceVal = () => {\n const v = toValue(source);\n return typeof v === \"number\" ? v : v.map(toValue);\n };\n const outputRef = ref(sourceVal());\n watch(sourceVal, async (to) => {\n var _a, _b;\n if (toValue(options.disabled))\n return;\n const id = ++currentId;\n if (options.delay)\n await promiseTimeout(toValue(options.delay));\n if (id !== currentId)\n return;\n const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n (_a = options.onStarted) == null ? void 0 : _a.call(options);\n await executeTransition(outputRef, outputRef.value, toVal, {\n ...options,\n abort: () => {\n var _a2;\n return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n }\n });\n (_b = options.onFinished) == null ? void 0 : _b.call(options);\n }, { deep: true });\n watch(() => toValue(options.disabled), (disabled) => {\n if (disabled) {\n currentId++;\n outputRef.value = sourceVal();\n }\n });\n tryOnScopeDispose(() => {\n currentId++;\n });\n return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(\n state,\n () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params);\n },\n { deep: true }\n );\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n window.history.replaceState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n useEventListener(window, \"popstate\", onChanged, false);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, false);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n const constraints = ref(options.constraints);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(type) {\n switch (type) {\n case \"video\": {\n if (constraints.value)\n return constraints.value.video || false;\n break;\n }\n case \"audio\": {\n if (constraints.value)\n return constraints.value.audio || false;\n break;\n }\n }\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(\"video\"),\n audio: getDeviceOptions(\"audio\")\n });\n return stream.value;\n }\n function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n watch(\n constraints,\n () => {\n if (autoSwitch.value && stream.value)\n restart();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n constraints,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c, _d, _e;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue,\n shouldEmit\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n let event = eventName;\n if (!key) {\n if (isVue2) {\n const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n if (!eventName)\n event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n } else {\n key = \"modelValue\";\n }\n }\n event = event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n const triggerEmit = (value) => {\n if (shouldEmit) {\n if (shouldEmit(value))\n _emit(event, value);\n } else {\n _emit(event, value);\n }\n };\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n let isUpdating = false;\n watch(\n () => props[key],\n (v) => {\n if (!isUpdating) {\n isUpdating = true;\n proxy.value = cloneFn(v);\n nextTick(() => isUpdating = false);\n }\n }\n );\n watch(\n proxy,\n (v) => {\n if (!isUpdating && (v !== props[key] || deep))\n triggerEmit(v);\n },\n { deep }\n );\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n triggerEmit(value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props) {\n ret[key] = useVModel(\n props,\n key,\n emit,\n options\n );\n }\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = toRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? void 0 : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(\n vibrate,\n interval,\n {\n immediate: false,\n immediateCallback: false\n }\n );\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = ref(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, calculateRange) {\n watch([size.width, size.height, list], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nfunction useWakeLock(options = {}) {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n let wakeLock;\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = ref(false);\n async function onVisibilityChange() {\n if (!isSupported.value || !wakeLock)\n return;\n if (document && document.visibilityState === \"visible\")\n wakeLock = await navigator.wakeLock.request(\"screen\");\n isActive.value = !wakeLock.released;\n }\n if (document)\n useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n async function request(type) {\n if (!isSupported.value)\n return;\n wakeLock = await navigator.wakeLock.request(type);\n isActive.value = !wakeLock.released;\n }\n async function release() {\n if (!isSupported.value || !wakeLock)\n return;\n await wakeLock.release();\n isActive.value = !wakeLock.released;\n wakeLock = null;\n }\n return {\n isSupported,\n isActive,\n request,\n release\n };\n}\n\nfunction useWebNotification(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions: _requestForPermissions = true\n } = options;\n const defaultWebNotificationOptions = options;\n const isSupported = useSupported(() => !!window && \"Notification\" in window);\n const permissionGranted = ref(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n const notification = ref(null);\n const ensurePermissions = async () => {\n if (!isSupported.value)\n return;\n if (!permissionGranted.value && Notification.permission !== \"denied\") {\n const result = await Notification.requestPermission();\n if (result === \"granted\")\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n };\n const { on: onClick, trigger: clickTrigger } = createEventHook();\n const { on: onShow, trigger: showTrigger } = createEventHook();\n const { on: onError, trigger: errorTrigger } = createEventHook();\n const { on: onClose, trigger: closeTrigger } = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value || !permissionGranted.value)\n return;\n const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n notification.value = new Notification(options2.title || \"\", options2);\n notification.value.onclick = clickTrigger;\n notification.value.onshow = showTrigger;\n notification.value.onerror = errorTrigger;\n notification.value.onclose = closeTrigger;\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n if (_requestForPermissions)\n tryOnMounted(ensurePermissions);\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n ensurePermissions,\n permissionGranted,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = ref(\"CLOSED\");\n const wsRef = ref();\n const urlRef = toRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let pongTimeoutWait;\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = void 0;\n };\n const close = (code = 1e3, reason) => {\n if (!isClient || !wsRef.value)\n return;\n explicitlyClosed = true;\n resetHeartbeat();\n heartbeatPause == null ? void 0 : heartbeatPause();\n wsRef.value.close(code, reason);\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n onConnected == null ? void 0 : onConnected(ws);\n heartbeatResume == null ? void 0 : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n wsRef.value = void 0;\n onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n ws.onerror = (e) => {\n onError == null ? void 0 : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === message)\n return;\n }\n data.value = e.data;\n onMessage == null ? void 0 : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(\n () => {\n send(message, false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n explicitlyClosed = false;\n }, pongTimeout);\n },\n interval,\n { immediate: false }\n );\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n if (isClient)\n useEventListener(\"beforeunload\", () => close());\n tryOnScopeDispose(close);\n }\n const open = () => {\n if (!isClient && !isWorker)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n watch(urlRef, open, { immediate: true });\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = (...args) => {\n if (!worker.value)\n return;\n worker.value.postMessage(...args);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (typeof arg0 === \"string\")\n worker.value = new Worker(arg0, workerOptions);\n else if (typeof arg0 === \"function\")\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nfunction jobRunner(userFunc) {\n return (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n };\n}\n\nfunction depsParser(deps) {\n if (deps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n return `importScripts(${depsString})`;\n}\n\nfunction createWorkerBlobUrl(fn, deps) {\n const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n const {\n dependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = ref(\"PENDING\");\n const promise = ref({});\n const timeoutId = ref();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = void 0;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n e.preventDefault();\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(\n () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n timeout\n );\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n promise.value = {\n resolve,\n reject\n };\n worker.value && worker.value.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\n \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n );\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n}\n\nfunction useWindowFocus(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref(false);\n const focused = ref(window.document.hasFocus());\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n });\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n });\n return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n const { window = defaultWindow, behavior = \"auto\" } = options;\n if (!window) {\n return {\n x: ref(0),\n y: ref(0)\n };\n }\n const internalX = ref(window.scrollX);\n const internalY = ref(window.scrollY);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo({ left: x2, behavior });\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo({ top: y2, behavior });\n }\n });\n useEventListener(\n window,\n \"scroll\",\n () => {\n internalX.value = window.scrollX;\n internalY.value = window.scrollY;\n },\n {\n capture: false,\n passive: true\n }\n );\n return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Number.POSITIVE_INFINITY,\n initialHeight = Number.POSITIVE_INFINITY,\n listenOrientation = true,\n includeScrollbar = true\n } = options;\n const width = ref(initialWidth);\n const height = ref(initialHeight);\n const update = () => {\n if (window) {\n if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n useEventListener(\"resize\", update, { passive: true });\n if (listenOrientation) {\n const matches = useMediaQuery(\"(orientation: portrait)\");\n watch(matches, () => update());\n }\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"9.15.0\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nregisterVersion(name, version, 'app');\n//# sourceMappingURL=index.esm.js.map\n","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","/**\n * Vue Currency Input 3.0.3\n * (c) 2018-2022 Matthias Stiller\n * @license MIT\n */\nimport { ref, getCurrentInstance, version, computed, watch } from 'vue';\n\nvar CurrencyDisplay;\n(function (CurrencyDisplay) {\n CurrencyDisplay[\"symbol\"] = \"symbol\";\n CurrencyDisplay[\"narrowSymbol\"] = \"narrowSymbol\";\n CurrencyDisplay[\"code\"] = \"code\";\n CurrencyDisplay[\"name\"] = \"name\";\n CurrencyDisplay[\"hidden\"] = \"hidden\";\n})(CurrencyDisplay || (CurrencyDisplay = {}));\nvar ValueScaling;\n(function (ValueScaling) {\n ValueScaling[\"precision\"] = \"precision\";\n ValueScaling[\"thousands\"] = \"thousands\";\n ValueScaling[\"millions\"] = \"millions\";\n ValueScaling[\"billions\"] = \"billions\";\n})(ValueScaling || (ValueScaling = {}));\n\nconst escapeRegExp = (str) => {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n};\nconst removeLeadingZeros = (str) => {\n return str.replace(/^0+(0$|[^0])/, '$1');\n};\nconst count = (str, search) => {\n return (str.match(new RegExp(escapeRegExp(search), 'g')) || []).length;\n};\nconst substringBefore = (str, search) => {\n return str.substring(0, str.indexOf(search));\n};\n\nconst DECIMAL_SEPARATORS = [',', '.', 'Ù«'];\nconst INTEGER_PATTERN = '(0|[1-9]\\\\d*)';\nclass CurrencyFormat {\n constructor(options) {\n var _a, _b, _c, _d, _e, _f;\n const { currency, currencyDisplay, locale, precision, accountingSign, useGrouping } = options;\n this.locale = locale;\n this.options = {\n currency,\n useGrouping,\n style: 'currency',\n currencySign: accountingSign ? 'accounting' : undefined,\n currencyDisplay: currencyDisplay !== CurrencyDisplay.hidden ? currencyDisplay : undefined\n };\n const numberFormat = new Intl.NumberFormat(locale, this.options);\n const formatParts = numberFormat.formatToParts(123456);\n this.currency = (_a = formatParts.find(({ type }) => type === 'currency')) === null || _a === void 0 ? void 0 : _a.value;\n this.digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((i) => i.toLocaleString(locale));\n this.decimalSymbol = (_b = formatParts.find(({ type }) => type === 'decimal')) === null || _b === void 0 ? void 0 : _b.value;\n this.groupingSymbol = (_c = formatParts.find(({ type }) => type === 'group')) === null || _c === void 0 ? void 0 : _c.value;\n this.minusSign = (_d = numberFormat.formatToParts(-1).find(({ type }) => type === 'minusSign')) === null || _d === void 0 ? void 0 : _d.value;\n if (this.decimalSymbol === undefined) {\n this.minimumFractionDigits = this.maximumFractionDigits = 0;\n }\n else if (typeof precision === 'number') {\n this.minimumFractionDigits = this.maximumFractionDigits = precision;\n }\n else {\n this.minimumFractionDigits = (_e = precision === null || precision === void 0 ? void 0 : precision.min) !== null && _e !== void 0 ? _e : numberFormat.resolvedOptions().minimumFractionDigits;\n this.maximumFractionDigits = (_f = precision === null || precision === void 0 ? void 0 : precision.max) !== null && _f !== void 0 ? _f : numberFormat.resolvedOptions().maximumFractionDigits;\n }\n const getPrefix = (str) => {\n return substringBefore(str, this.digits[1]);\n };\n const getSuffix = (str) => {\n return str.substring(str.lastIndexOf(this.decimalSymbol ? this.digits[0] : this.digits[1]) + 1);\n };\n this.prefix = getPrefix(numberFormat.format(1));\n this.suffix = getSuffix(numberFormat.format(1));\n this.negativePrefix = getPrefix(numberFormat.format(-1));\n this.negativeSuffix = getSuffix(numberFormat.format(-1));\n }\n parse(str) {\n if (str) {\n const negative = this.isNegative(str);\n str = this.normalizeDigits(str);\n str = this.stripCurrency(str, negative);\n str = this.stripSignLiterals(str);\n const fraction = this.decimalSymbol ? `(?:${escapeRegExp(this.decimalSymbol)}(\\\\d*))?` : '';\n const match = this.stripGroupingSeparator(str).match(new RegExp(`^${INTEGER_PATTERN}${fraction}$`));\n if (match && this.isValidIntegerFormat(this.decimalSymbol ? str.split(this.decimalSymbol)[0] : str, Number(match[1]))) {\n return Number(`${negative ? '-' : ''}${this.onlyDigits(match[1])}.${this.onlyDigits(match[2] || '')}`);\n }\n }\n return null;\n }\n isValidIntegerFormat(formattedNumber, integerNumber) {\n const options = { ...this.options, minimumFractionDigits: 0 };\n return [\n this.stripCurrency(this.normalizeDigits(integerNumber.toLocaleString(this.locale, { ...options, useGrouping: true })), false),\n this.stripCurrency(this.normalizeDigits(integerNumber.toLocaleString(this.locale, { ...options, useGrouping: false })), false)\n ].includes(formattedNumber);\n }\n format(value, options = {\n minimumFractionDigits: this.minimumFractionDigits,\n maximumFractionDigits: this.maximumFractionDigits\n }) {\n return value != null ? value.toLocaleString(this.locale, { ...this.options, ...options }) : '';\n }\n toFraction(str) {\n return `${this.digits[0]}${this.decimalSymbol}${this.onlyLocaleDigits(str.substr(1)).substr(0, this.maximumFractionDigits)}`;\n }\n isFractionIncomplete(str) {\n return !!this.normalizeDigits(this.stripGroupingSeparator(str)).match(new RegExp(`^${INTEGER_PATTERN}${escapeRegExp(this.decimalSymbol)}$`));\n }\n isNegative(str) {\n return (str.startsWith(this.negativePrefix) ||\n (this.minusSign === undefined && (str.startsWith('(') || str.startsWith('-'))) ||\n (this.minusSign !== undefined && str.replace('-', this.minusSign).startsWith(this.minusSign)));\n }\n insertCurrency(str, negative) {\n return `${negative ? this.negativePrefix : this.prefix}${str}${negative ? this.negativeSuffix : this.suffix}`;\n }\n stripGroupingSeparator(str) {\n return this.groupingSymbol !== undefined ? str.replace(new RegExp(escapeRegExp(this.groupingSymbol), 'g'), '') : str;\n }\n stripSignLiterals(str) {\n if (this.minusSign !== undefined) {\n return str.replace('-', this.minusSign).replace(this.minusSign, '');\n }\n else {\n return str.replace(/[-()]/g, '');\n }\n }\n stripCurrency(str, negative) {\n return str.replace(negative ? this.negativePrefix : this.prefix, '').replace(negative ? this.negativeSuffix : this.suffix, '');\n }\n normalizeDecimalSeparator(str, from) {\n DECIMAL_SEPARATORS.forEach((s) => {\n str = str.substr(0, from) + str.substr(from).replace(s, this.decimalSymbol);\n });\n return str;\n }\n normalizeDigits(str) {\n if (this.digits[0] !== '0') {\n this.digits.forEach((digit, index) => {\n str = str.replace(new RegExp(digit, 'g'), String(index));\n });\n }\n return str;\n }\n onlyDigits(str) {\n return this.normalizeDigits(str).replace(/\\D+/g, '');\n }\n onlyLocaleDigits(str) {\n return str.replace(new RegExp(`[^${this.digits.join('')}]*`, 'g'), '');\n }\n}\n\nclass AbstractInputMask {\n constructor(currencyFormat) {\n this.currencyFormat = currencyFormat;\n }\n}\nclass DefaultInputMask extends AbstractInputMask {\n conformToMask(str, previousConformedValue = '') {\n const negative = this.currencyFormat.isNegative(str);\n const isEmptyNegativeValue = (str) => str === '' &&\n negative &&\n !(this.currencyFormat.minusSign === undefined\n ? previousConformedValue === this.currencyFormat.negativePrefix + this.currencyFormat.negativeSuffix\n : previousConformedValue === this.currencyFormat.negativePrefix);\n const checkIncompleteValue = (str) => {\n if (isEmptyNegativeValue(str)) {\n return '';\n }\n else if (this.currencyFormat.maximumFractionDigits > 0) {\n if (this.currencyFormat.isFractionIncomplete(str)) {\n return str;\n }\n else if (str.startsWith(this.currencyFormat.decimalSymbol)) {\n return this.currencyFormat.toFraction(str);\n }\n }\n return null;\n };\n let value = str;\n value = this.currencyFormat.stripCurrency(value, negative);\n value = this.currencyFormat.stripSignLiterals(value);\n const incompleteValue = checkIncompleteValue(value);\n if (incompleteValue != null) {\n return this.currencyFormat.insertCurrency(incompleteValue, negative);\n }\n const [integer, ...fraction] = value.split(this.currencyFormat.decimalSymbol);\n const integerDigits = removeLeadingZeros(this.currencyFormat.onlyDigits(integer));\n const fractionDigits = this.currencyFormat.onlyDigits(fraction.join('')).substr(0, this.currencyFormat.maximumFractionDigits);\n const invalidFraction = fraction.length > 0 && fractionDigits.length === 0;\n const invalidNegativeValue = integerDigits === '' &&\n negative &&\n (this.currencyFormat.minusSign === undefined\n ? previousConformedValue === str.slice(0, -2) + this.currencyFormat.negativeSuffix\n : previousConformedValue === str.slice(0, -1));\n if (invalidFraction || invalidNegativeValue || isEmptyNegativeValue(integerDigits)) {\n return previousConformedValue;\n }\n else if (integerDigits.match(/\\d+/)) {\n return {\n numberValue: Number(`${negative ? '-' : ''}${integerDigits}.${fractionDigits}`),\n fractionDigits\n };\n }\n else {\n return '';\n }\n }\n}\nclass AutoDecimalDigitsInputMask extends AbstractInputMask {\n conformToMask(str, previousConformedValue = '') {\n if (str === '' ||\n (this.currencyFormat.parse(previousConformedValue) === 0 &&\n this.currencyFormat.stripCurrency(previousConformedValue, true).slice(0, -1) === this.currencyFormat.stripCurrency(str, true))) {\n return '';\n }\n const negative = this.currencyFormat.isNegative(str);\n const numberValue = this.currencyFormat.stripSignLiterals(str) === ''\n ? -0\n : Number(`${negative ? '-' : ''}${removeLeadingZeros(this.currencyFormat.onlyDigits(str))}`) / Math.pow(10, this.currencyFormat.maximumFractionDigits);\n return {\n numberValue,\n fractionDigits: numberValue.toFixed(this.currencyFormat.maximumFractionDigits).slice(-this.currencyFormat.maximumFractionDigits)\n };\n }\n}\n\nconst DEFAULT_OPTIONS = {\n locale: undefined,\n currency: undefined,\n currencyDisplay: undefined,\n hideGroupingSeparatorOnFocus: true,\n hideCurrencySymbolOnFocus: true,\n hideNegligibleDecimalDigitsOnFocus: true,\n precision: undefined,\n autoDecimalDigits: false,\n valueRange: undefined,\n useGrouping: undefined,\n valueScaling: undefined\n};\nclass CurrencyInput {\n constructor(args) {\n this.el = args.el;\n this.onInput = args.onInput;\n this.onChange = args.onChange;\n this.addEventListener();\n this.init(args.options);\n }\n setOptions(options) {\n this.init(options);\n this.applyFixedFractionFormat(this.numberValue, true);\n }\n getValue() {\n const numberValue = this.valueScaling && this.numberValue != null ? this.toInteger(this.numberValue, this.valueScaling) : this.numberValue;\n return { number: numberValue, formatted: this.formattedValue };\n }\n setValue(value) {\n const newValue = this.valueScaling !== undefined && value != null ? this.toFloat(value, this.valueScaling) : value;\n if (newValue !== this.numberValue) {\n this.applyFixedFractionFormat(newValue);\n }\n }\n init(options) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options\n };\n if (this.options.autoDecimalDigits) {\n this.options.hideNegligibleDecimalDigitsOnFocus = false;\n this.el.setAttribute('inputmode', 'numeric');\n }\n else {\n this.el.setAttribute('inputmode', 'decimal');\n }\n this.currencyFormat = new CurrencyFormat(this.options);\n this.numberMask = this.options.autoDecimalDigits ? new AutoDecimalDigitsInputMask(this.currencyFormat) : new DefaultInputMask(this.currencyFormat);\n const valueScalingOptions = {\n [ValueScaling.precision]: this.currencyFormat.maximumFractionDigits,\n [ValueScaling.thousands]: 3,\n [ValueScaling.millions]: 6,\n [ValueScaling.billions]: 9\n };\n this.valueScaling = this.options.valueScaling ? valueScalingOptions[this.options.valueScaling] : undefined;\n this.valueScalingFractionDigits =\n this.valueScaling !== undefined && this.options.valueScaling !== ValueScaling.precision\n ? this.valueScaling + this.currencyFormat.maximumFractionDigits\n : this.currencyFormat.maximumFractionDigits;\n this.minValue = this.getMinValue();\n this.maxValue = this.getMaxValue();\n }\n getMinValue() {\n var _a, _b;\n let min = this.toFloat(-Number.MAX_SAFE_INTEGER);\n if (((_a = this.options.valueRange) === null || _a === void 0 ? void 0 : _a.min) !== undefined) {\n min = Math.max((_b = this.options.valueRange) === null || _b === void 0 ? void 0 : _b.min, this.toFloat(-Number.MAX_SAFE_INTEGER));\n }\n return min;\n }\n getMaxValue() {\n var _a, _b;\n let max = this.toFloat(Number.MAX_SAFE_INTEGER);\n if (((_a = this.options.valueRange) === null || _a === void 0 ? void 0 : _a.max) !== undefined) {\n max = Math.min((_b = this.options.valueRange) === null || _b === void 0 ? void 0 : _b.max, this.toFloat(Number.MAX_SAFE_INTEGER));\n }\n return max;\n }\n toFloat(value, maxFractionDigits) {\n return value / Math.pow(10, maxFractionDigits !== null && maxFractionDigits !== void 0 ? maxFractionDigits : this.valueScalingFractionDigits);\n }\n toInteger(value, maxFractionDigits) {\n return Number(value\n .toFixed(maxFractionDigits !== null && maxFractionDigits !== void 0 ? maxFractionDigits : this.valueScalingFractionDigits)\n .split('.')\n .join(''));\n }\n validateValueRange(value) {\n return value != null ? Math.min(Math.max(value, this.minValue), this.maxValue) : value;\n }\n applyFixedFractionFormat(number, forcedChange = false) {\n this.format(this.currencyFormat.format(this.validateValueRange(number)));\n if (number !== this.numberValue || forcedChange) {\n this.onChange(this.getValue());\n }\n }\n format(value, hideNegligibleDecimalDigits = false) {\n if (value != null) {\n if (this.decimalSymbolInsertedAt !== undefined) {\n value = this.currencyFormat.normalizeDecimalSeparator(value, this.decimalSymbolInsertedAt);\n this.decimalSymbolInsertedAt = undefined;\n }\n const conformedValue = this.numberMask.conformToMask(value, this.formattedValue);\n let formattedValue;\n if (typeof conformedValue === 'object') {\n const { numberValue, fractionDigits } = conformedValue;\n let { maximumFractionDigits, minimumFractionDigits } = this.currencyFormat;\n if (this.focus) {\n minimumFractionDigits = hideNegligibleDecimalDigits\n ? fractionDigits.replace(/0+$/, '').length\n : Math.min(maximumFractionDigits, fractionDigits.length);\n }\n else if (Number.isInteger(numberValue) && !this.options.autoDecimalDigits && (this.options.precision === undefined || minimumFractionDigits === 0)) {\n minimumFractionDigits = maximumFractionDigits = 0;\n }\n formattedValue =\n this.toInteger(Math.abs(numberValue)) > Number.MAX_SAFE_INTEGER\n ? this.formattedValue\n : this.currencyFormat.format(numberValue, {\n useGrouping: this.options.useGrouping !== false && !(this.focus && this.options.hideGroupingSeparatorOnFocus),\n minimumFractionDigits,\n maximumFractionDigits\n });\n }\n else {\n formattedValue = conformedValue;\n }\n if (this.maxValue <= 0 && !this.currencyFormat.isNegative(formattedValue) && this.currencyFormat.parse(formattedValue) !== 0) {\n formattedValue = formattedValue.replace(this.currencyFormat.prefix, this.currencyFormat.negativePrefix);\n }\n if (this.minValue >= 0) {\n formattedValue = formattedValue.replace(this.currencyFormat.negativePrefix, this.currencyFormat.prefix);\n }\n if (this.options.currencyDisplay === CurrencyDisplay.hidden || (this.focus && this.options.hideCurrencySymbolOnFocus)) {\n formattedValue = formattedValue\n .replace(this.currencyFormat.negativePrefix, this.currencyFormat.minusSign !== undefined ? this.currencyFormat.minusSign : '(')\n .replace(this.currencyFormat.negativeSuffix, this.currencyFormat.minusSign !== undefined ? '' : ')')\n .replace(this.currencyFormat.prefix, '')\n .replace(this.currencyFormat.suffix, '');\n }\n this.el.value = formattedValue;\n this.numberValue = this.currencyFormat.parse(formattedValue);\n }\n else {\n this.el.value = '';\n this.numberValue = null;\n }\n this.formattedValue = this.el.value;\n this.onInput(this.getValue());\n }\n addEventListener() {\n this.el.addEventListener('input', (e) => {\n const { value, selectionStart } = this.el;\n const inputEvent = e;\n if (selectionStart && inputEvent.data && DECIMAL_SEPARATORS.includes(inputEvent.data)) {\n this.decimalSymbolInsertedAt = selectionStart - 1;\n }\n this.format(value);\n if (this.focus && selectionStart != null) {\n const getCaretPositionAfterFormat = () => {\n const { prefix, suffix, decimalSymbol, maximumFractionDigits, groupingSymbol } = this.currencyFormat;\n let caretPositionFromLeft = value.length - selectionStart;\n const newValueLength = this.formattedValue.length;\n if (this.currencyFormat.minusSign === undefined && (value.startsWith('(') || value.startsWith('-')) && !value.endsWith(')')) {\n return newValueLength - this.currencyFormat.negativeSuffix.length > 1 ? this.formattedValue.substring(selectionStart).length : 1;\n }\n if (this.formattedValue.substr(selectionStart, 1) === groupingSymbol &&\n count(this.formattedValue, groupingSymbol) === count(value, groupingSymbol) + 1) {\n return newValueLength - caretPositionFromLeft - 1;\n }\n if (newValueLength < caretPositionFromLeft) {\n return selectionStart;\n }\n if (decimalSymbol !== undefined && value.indexOf(decimalSymbol) !== -1) {\n const decimalSymbolPosition = value.indexOf(decimalSymbol) + 1;\n if (Math.abs(newValueLength - value.length) > 1 && selectionStart <= decimalSymbolPosition) {\n return this.formattedValue.indexOf(decimalSymbol) + 1;\n }\n else {\n if (!this.options.autoDecimalDigits && selectionStart > decimalSymbolPosition) {\n if (this.currencyFormat.onlyDigits(value.substr(decimalSymbolPosition)).length - 1 === maximumFractionDigits) {\n caretPositionFromLeft -= 1;\n }\n }\n }\n }\n return this.options.hideCurrencySymbolOnFocus || this.options.currencyDisplay === CurrencyDisplay.hidden\n ? newValueLength - caretPositionFromLeft\n : Math.max(newValueLength - Math.max(caretPositionFromLeft, suffix.length), prefix.length);\n };\n this.setCaretPosition(getCaretPositionAfterFormat());\n }\n });\n this.el.addEventListener('focus', () => {\n this.focus = true;\n setTimeout(() => {\n const { value, selectionStart, selectionEnd } = this.el;\n this.format(value, this.options.hideNegligibleDecimalDigitsOnFocus);\n if (selectionStart != null && selectionEnd != null && Math.abs(selectionStart - selectionEnd) > 0) {\n this.setCaretPosition(0, this.el.value.length);\n }\n else if (selectionStart != null) {\n const caretPositionOnFocus = this.getCaretPositionOnFocus(value, selectionStart);\n this.setCaretPosition(caretPositionOnFocus);\n }\n });\n });\n this.el.addEventListener('blur', () => {\n this.focus = false;\n this.applyFixedFractionFormat(this.numberValue);\n });\n this.el.addEventListener('change', () => {\n this.onChange(this.getValue());\n });\n }\n getCaretPositionOnFocus(value, selectionStart) {\n if (this.numberValue == null) {\n return selectionStart;\n }\n const { prefix, negativePrefix, suffix, negativeSuffix, groupingSymbol, currency } = this.currencyFormat;\n const isNegative = this.numberValue < 0;\n const currentPrefix = isNegative ? negativePrefix : prefix;\n const prefixLength = currentPrefix.length;\n if (this.options.hideCurrencySymbolOnFocus || this.options.currencyDisplay === CurrencyDisplay.hidden) {\n if (isNegative) {\n if (selectionStart <= 1) {\n return 1;\n }\n else if (value.endsWith(')') && selectionStart > value.indexOf(')')) {\n return this.formattedValue.length - 1;\n }\n }\n }\n else {\n const suffixLength = isNegative ? negativeSuffix.length : suffix.length;\n if (selectionStart >= value.length - suffixLength) {\n return this.formattedValue.length - suffixLength;\n }\n else if (selectionStart < prefixLength) {\n return prefixLength;\n }\n }\n let result = selectionStart;\n if (this.options.hideCurrencySymbolOnFocus &&\n this.options.currencyDisplay !== CurrencyDisplay.hidden &&\n selectionStart >= prefixLength &&\n currency !== undefined &&\n currentPrefix.includes(currency)) {\n result -= prefixLength;\n if (isNegative) {\n result += 1;\n }\n }\n if (this.options.hideGroupingSeparatorOnFocus && groupingSymbol !== undefined) {\n result -= count(value.substring(0, selectionStart), groupingSymbol);\n }\n return result;\n }\n setCaretPosition(start, end = start) {\n this.el.setSelectionRange(start, end);\n }\n}\n\nconst findInput = (el) => ((el === null || el === void 0 ? void 0 : el.matches('input')) ? el : el === null || el === void 0 ? void 0 : el.querySelector('input'));\nfunction useCurrencyInput(options, autoEmit) {\n var _a, _b, _c, _d;\n let currencyInput;\n const inputRef = ref(null);\n const formattedValue = ref(null);\n const numberValue = ref(null);\n const vm = getCurrentInstance();\n const emit = (vm === null || vm === void 0 ? void 0 : vm.emit) || ((_b = (_a = vm === null || vm === void 0 ? void 0 : vm.proxy) === null || _a === void 0 ? void 0 : _a.$emit) === null || _b === void 0 ? void 0 : _b.bind(vm === null || vm === void 0 ? void 0 : vm.proxy));\n const props = ((vm === null || vm === void 0 ? void 0 : vm.props) || ((_c = vm === null || vm === void 0 ? void 0 : vm.proxy) === null || _c === void 0 ? void 0 : _c.$props));\n const isVue3 = version.startsWith('3');\n const lazyModel = isVue3 && ((_d = vm === null || vm === void 0 ? void 0 : vm.attrs.modelModifiers) === null || _d === void 0 ? void 0 : _d.lazy);\n const modelValue = computed(() => props === null || props === void 0 ? void 0 : props[isVue3 ? 'modelValue' : 'value']);\n const inputEvent = isVue3 ? 'update:modelValue' : 'input';\n const changeEvent = lazyModel ? 'update:modelValue' : 'change';\n watch(inputRef, (value) => {\n var _a;\n if (value) {\n const el = findInput((_a = value === null || value === void 0 ? void 0 : value.$el) !== null && _a !== void 0 ? _a : value);\n if (el) {\n currencyInput = new CurrencyInput({\n el,\n options,\n onInput: (value) => {\n if (!lazyModel && autoEmit !== false && modelValue.value !== value.number) {\n emit === null || emit === void 0 ? void 0 : emit(inputEvent, value.number);\n }\n numberValue.value = value.number;\n formattedValue.value = value.formatted;\n },\n onChange: (value) => {\n emit === null || emit === void 0 ? void 0 : emit(changeEvent, value.number);\n }\n });\n currencyInput.setValue(modelValue.value);\n }\n else {\n console.error('No input element found. Please make sure that the \"inputRef\" template ref is properly assigned.');\n }\n }\n else {\n currencyInput = null;\n }\n });\n return {\n inputRef,\n numberValue,\n formattedValue,\n setValue: (value) => currencyInput === null || currencyInput === void 0 ? void 0 : currencyInput.setValue(value),\n setOptions: (options) => currencyInput === null || currencyInput === void 0 ? void 0 : currencyInput.setOptions(options)\n };\n}\n\nexport { CurrencyDisplay, ValueScaling, useCurrencyInput };\n","/*!\n * vue-router v4.1.6\n * (c) 2022 Eduardo San Martin Morote\n * @license MIT\n */\nimport { getCurrentInstance, inject, onUnmounted, onDeactivated, onActivated, computed, unref, watchEffect, defineComponent, reactive, h, provide, ref, watch, shallowRef, nextTick } from 'vue';\nimport { setupDevtoolsPlugin } from '@vue/devtools-api';\n\nconst isBrowser = typeof window !== 'undefined';\n\nfunction isESModule(obj) {\r\n return obj.__esModule || obj[Symbol.toStringTag] === 'Module';\r\n}\r\nconst assign = Object.assign;\r\nfunction applyToParams(fn, params) {\r\n const newParams = {};\r\n for (const key in params) {\r\n const value = params[key];\r\n newParams[key] = isArray(value)\r\n ? value.map(fn)\r\n : fn(value);\r\n }\r\n return newParams;\r\n}\r\nconst noop = () => { };\r\n/**\r\n * Typesafe alternative to Array.isArray\r\n * https://github.com/microsoft/TypeScript/pull/48228\r\n */\r\nconst isArray = Array.isArray;\n\nfunction warn(msg) {\r\n // avoid using ...args as it breaks in older Edge builds\r\n const args = Array.from(arguments).slice(1);\r\n console.warn.apply(console, ['[Vue Router warn]: ' + msg].concat(args));\r\n}\n\nconst TRAILING_SLASH_RE = /\\/$/;\r\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, '');\r\n/**\r\n * Transforms a URI into a normalized history location\r\n *\r\n * @param parseQuery\r\n * @param location - URI to normalize\r\n * @param currentLocation - current absolute location. Allows resolving relative\r\n * paths. Must start with `/`. Defaults to `/`\r\n * @returns a normalized history location\r\n */\r\nfunction parseURL(parseQuery, location, currentLocation = '/') {\r\n let path, query = {}, searchString = '', hash = '';\r\n // Could use URL and URLSearchParams but IE 11 doesn't support it\r\n // TODO: move to new URL()\r\n const hashPos = location.indexOf('#');\r\n let searchPos = location.indexOf('?');\r\n // the hash appears before the search, so it's not part of the search string\r\n if (hashPos < searchPos && hashPos >= 0) {\r\n searchPos = -1;\r\n }\r\n if (searchPos > -1) {\r\n path = location.slice(0, searchPos);\r\n searchString = location.slice(searchPos + 1, hashPos > -1 ? hashPos : location.length);\r\n query = parseQuery(searchString);\r\n }\r\n if (hashPos > -1) {\r\n path = path || location.slice(0, hashPos);\r\n // keep the # character\r\n hash = location.slice(hashPos, location.length);\r\n }\r\n // no search and no query\r\n path = resolveRelativePath(path != null ? path : location, currentLocation);\r\n // empty path means a relative query or hash `?foo=f`, `#thing`\r\n return {\r\n fullPath: path + (searchString && '?') + searchString + hash,\r\n path,\r\n query,\r\n hash,\r\n };\r\n}\r\n/**\r\n * Stringifies a URL object\r\n *\r\n * @param stringifyQuery\r\n * @param location\r\n */\r\nfunction stringifyURL(stringifyQuery, location) {\r\n const query = location.query ? stringifyQuery(location.query) : '';\r\n return location.path + (query && '?') + query + (location.hash || '');\r\n}\r\n/**\r\n * Strips off the base from the beginning of a location.pathname in a non-case-sensitive way.\r\n *\r\n * @param pathname - location.pathname\r\n * @param base - base to strip off\r\n */\r\nfunction stripBase(pathname, base) {\r\n // no base or base is not found at the beginning\r\n if (!base || !pathname.toLowerCase().startsWith(base.toLowerCase()))\r\n return pathname;\r\n return pathname.slice(base.length) || '/';\r\n}\r\n/**\r\n * Checks if two RouteLocation are equal. This means that both locations are\r\n * pointing towards the same {@link RouteRecord} and that all `params`, `query`\r\n * parameters and `hash` are the same\r\n *\r\n * @param a - first {@link RouteLocation}\r\n * @param b - second {@link RouteLocation}\r\n */\r\nfunction isSameRouteLocation(stringifyQuery, a, b) {\r\n const aLastIndex = a.matched.length - 1;\r\n const bLastIndex = b.matched.length - 1;\r\n return (aLastIndex > -1 &&\r\n aLastIndex === bLastIndex &&\r\n isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) &&\r\n isSameRouteLocationParams(a.params, b.params) &&\r\n stringifyQuery(a.query) === stringifyQuery(b.query) &&\r\n a.hash === b.hash);\r\n}\r\n/**\r\n * Check if two `RouteRecords` are equal. Takes into account aliases: they are\r\n * considered equal to the `RouteRecord` they are aliasing.\r\n *\r\n * @param a - first {@link RouteRecord}\r\n * @param b - second {@link RouteRecord}\r\n */\r\nfunction isSameRouteRecord(a, b) {\r\n // since the original record has an undefined value for aliasOf\r\n // but all aliases point to the original record, this will always compare\r\n // the original record\r\n return (a.aliasOf || a) === (b.aliasOf || b);\r\n}\r\nfunction isSameRouteLocationParams(a, b) {\r\n if (Object.keys(a).length !== Object.keys(b).length)\r\n return false;\r\n for (const key in a) {\r\n if (!isSameRouteLocationParamsValue(a[key], b[key]))\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction isSameRouteLocationParamsValue(a, b) {\r\n return isArray(a)\r\n ? isEquivalentArray(a, b)\r\n : isArray(b)\r\n ? isEquivalentArray(b, a)\r\n : a === b;\r\n}\r\n/**\r\n * Check if two arrays are the same or if an array with one single entry is the\r\n * same as another primitive value. Used to check query and parameters\r\n *\r\n * @param a - array of values\r\n * @param b - array of values or a single value\r\n */\r\nfunction isEquivalentArray(a, b) {\r\n return isArray(b)\r\n ? a.length === b.length && a.every((value, i) => value === b[i])\r\n : a.length === 1 && a[0] === b;\r\n}\r\n/**\r\n * Resolves a relative path that starts with `.`.\r\n *\r\n * @param to - path location we are resolving\r\n * @param from - currentLocation.path, should start with `/`\r\n */\r\nfunction resolveRelativePath(to, from) {\r\n if (to.startsWith('/'))\r\n return to;\r\n if ((process.env.NODE_ENV !== 'production') && !from.startsWith('/')) {\r\n warn(`Cannot resolve a relative location without an absolute path. Trying to resolve \"${to}\" from \"${from}\". It should look like \"/${from}\".`);\r\n return to;\r\n }\r\n if (!to)\r\n return from;\r\n const fromSegments = from.split('/');\r\n const toSegments = to.split('/');\r\n let position = fromSegments.length - 1;\r\n let toPosition;\r\n let segment;\r\n for (toPosition = 0; toPosition < toSegments.length; toPosition++) {\r\n segment = toSegments[toPosition];\r\n // we stay on the same position\r\n if (segment === '.')\r\n continue;\r\n // go up in the from array\r\n if (segment === '..') {\r\n // we can't go below zero, but we still need to increment toPosition\r\n if (position > 1)\r\n position--;\r\n // continue\r\n }\r\n // we reached a non-relative path, we stop here\r\n else\r\n break;\r\n }\r\n return (fromSegments.slice(0, position).join('/') +\r\n '/' +\r\n toSegments\r\n // ensure we use at least the last element in the toSegments\r\n .slice(toPosition - (toPosition === toSegments.length ? 1 : 0))\r\n .join('/'));\r\n}\n\nvar NavigationType;\r\n(function (NavigationType) {\r\n NavigationType[\"pop\"] = \"pop\";\r\n NavigationType[\"push\"] = \"push\";\r\n})(NavigationType || (NavigationType = {}));\r\nvar NavigationDirection;\r\n(function (NavigationDirection) {\r\n NavigationDirection[\"back\"] = \"back\";\r\n NavigationDirection[\"forward\"] = \"forward\";\r\n NavigationDirection[\"unknown\"] = \"\";\r\n})(NavigationDirection || (NavigationDirection = {}));\r\n/**\r\n * Starting location for Histories\r\n */\r\nconst START = '';\r\n// Generic utils\r\n/**\r\n * Normalizes a base by removing any trailing slash and reading the base tag if\r\n * present.\r\n *\r\n * @param base - base to normalize\r\n */\r\nfunction normalizeBase(base) {\r\n if (!base) {\r\n if (isBrowser) {\r\n // respect <base> tag\r\n const baseEl = document.querySelector('base');\r\n base = (baseEl && baseEl.getAttribute('href')) || '/';\r\n // strip full URL origin\r\n base = base.replace(/^\\w+:\\/\\/[^\\/]+/, '');\r\n }\r\n else {\r\n base = '/';\r\n }\r\n }\r\n // ensure leading slash when it was removed by the regex above avoid leading\r\n // slash with hash because the file could be read from the disk like file://\r\n // and the leading slash would cause problems\r\n if (base[0] !== '/' && base[0] !== '#')\r\n base = '/' + base;\r\n // remove the trailing slash so all other method can just do `base + fullPath`\r\n // to build an href\r\n return removeTrailingSlash(base);\r\n}\r\n// remove any character before the hash\r\nconst BEFORE_HASH_RE = /^[^#]+#/;\r\nfunction createHref(base, location) {\r\n return base.replace(BEFORE_HASH_RE, '#') + location;\r\n}\n\nfunction getElementPosition(el, offset) {\r\n const docRect = document.documentElement.getBoundingClientRect();\r\n const elRect = el.getBoundingClientRect();\r\n return {\r\n behavior: offset.behavior,\r\n left: elRect.left - docRect.left - (offset.left || 0),\r\n top: elRect.top - docRect.top - (offset.top || 0),\r\n };\r\n}\r\nconst computeScrollPosition = () => ({\r\n left: window.pageXOffset,\r\n top: window.pageYOffset,\r\n});\r\nfunction scrollToPosition(position) {\r\n let scrollToOptions;\r\n if ('el' in position) {\r\n const positionEl = position.el;\r\n const isIdSelector = typeof positionEl === 'string' && positionEl.startsWith('#');\r\n /**\r\n * `id`s can accept pretty much any characters, including CSS combinators\r\n * like `>` or `~`. It's still possible to retrieve elements using\r\n * `document.getElementById('~')` but it needs to be escaped when using\r\n * `document.querySelector('#\\\\~')` for it to be valid. The only\r\n * requirements for `id`s are them to be unique on the page and to not be\r\n * empty (`id=\"\"`). Because of that, when passing an id selector, it should\r\n * be properly escaped for it to work with `querySelector`. We could check\r\n * for the id selector to be simple (no CSS combinators `+ >~`) but that\r\n * would make things inconsistent since they are valid characters for an\r\n * `id` but would need to be escaped when using `querySelector`, breaking\r\n * their usage and ending up in no selector returned. Selectors need to be\r\n * escaped:\r\n *\r\n * - `#1-thing` becomes `#\\31 -thing`\r\n * - `#with~symbols` becomes `#with\\\\~symbols`\r\n *\r\n * - More information about the topic can be found at\r\n * https://mathiasbynens.be/notes/html5-id-class.\r\n * - Practical example: https://mathiasbynens.be/demo/html5-id\r\n */\r\n if ((process.env.NODE_ENV !== 'production') && typeof position.el === 'string') {\r\n if (!isIdSelector || !document.getElementById(position.el.slice(1))) {\r\n try {\r\n const foundEl = document.querySelector(position.el);\r\n if (isIdSelector && foundEl) {\r\n warn(`The selector \"${position.el}\" should be passed as \"el: document.querySelector('${position.el}')\" because it starts with \"#\".`);\r\n // return to avoid other warnings\r\n return;\r\n }\r\n }\r\n catch (err) {\r\n warn(`The selector \"${position.el}\" is invalid. If you are using an id selector, make sure to escape it. You can find more information about escaping characters in selectors at https://mathiasbynens.be/notes/css-escapes or use CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape).`);\r\n // return to avoid other warnings\r\n return;\r\n }\r\n }\r\n }\r\n const el = typeof positionEl === 'string'\r\n ? isIdSelector\r\n ? document.getElementById(positionEl.slice(1))\r\n : document.querySelector(positionEl)\r\n : positionEl;\r\n if (!el) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn(`Couldn't find element using selector \"${position.el}\" returned by scrollBehavior.`);\r\n return;\r\n }\r\n scrollToOptions = getElementPosition(el, position);\r\n }\r\n else {\r\n scrollToOptions = position;\r\n }\r\n if ('scrollBehavior' in document.documentElement.style)\r\n window.scrollTo(scrollToOptions);\r\n else {\r\n window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.pageXOffset, scrollToOptions.top != null ? scrollToOptions.top : window.pageYOffset);\r\n }\r\n}\r\nfunction getScrollKey(path, delta) {\r\n const position = history.state ? history.state.position - delta : -1;\r\n return position + path;\r\n}\r\nconst scrollPositions = new Map();\r\nfunction saveScrollPosition(key, scrollPosition) {\r\n scrollPositions.set(key, scrollPosition);\r\n}\r\nfunction getSavedScrollPosition(key) {\r\n const scroll = scrollPositions.get(key);\r\n // consume it so it's not used again\r\n scrollPositions.delete(key);\r\n return scroll;\r\n}\r\n// TODO: RFC about how to save scroll position\r\n/**\r\n * ScrollBehavior instance used by the router to compute and restore the scroll\r\n * position when navigating.\r\n */\r\n// export interface ScrollHandler<ScrollPositionEntry extends HistoryStateValue, ScrollPosition extends ScrollPositionEntry> {\r\n// // returns a scroll position that can be saved in history\r\n// compute(): ScrollPositionEntry\r\n// // can take an extended ScrollPositionEntry\r\n// scroll(position: ScrollPosition): void\r\n// }\r\n// export const scrollHandler: ScrollHandler<ScrollPosition> = {\r\n// compute: computeScroll,\r\n// scroll: scrollToPosition,\r\n// }\n\nlet createBaseLocation = () => location.protocol + '//' + location.host;\r\n/**\r\n * Creates a normalized history location from a window.location object\r\n * @param location -\r\n */\r\nfunction createCurrentLocation(base, location) {\r\n const { pathname, search, hash } = location;\r\n // allows hash bases like #, /#, #/, #!, #!/, /#!/, or even /folder#end\r\n const hashPos = base.indexOf('#');\r\n if (hashPos > -1) {\r\n let slicePos = hash.includes(base.slice(hashPos))\r\n ? base.slice(hashPos).length\r\n : 1;\r\n let pathFromHash = hash.slice(slicePos);\r\n // prepend the starting slash to hash so the url starts with /#\r\n if (pathFromHash[0] !== '/')\r\n pathFromHash = '/' + pathFromHash;\r\n return stripBase(pathFromHash, '');\r\n }\r\n const path = stripBase(pathname, base);\r\n return path + search + hash;\r\n}\r\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\r\n let listeners = [];\r\n let teardowns = [];\r\n // TODO: should it be a stack? a Dict. Check if the popstate listener\r\n // can trigger twice\r\n let pauseState = null;\r\n const popStateHandler = ({ state, }) => {\r\n const to = createCurrentLocation(base, location);\r\n const from = currentLocation.value;\r\n const fromState = historyState.value;\r\n let delta = 0;\r\n if (state) {\r\n currentLocation.value = to;\r\n historyState.value = state;\r\n // ignore the popstate and reset the pauseState\r\n if (pauseState && pauseState === from) {\r\n pauseState = null;\r\n return;\r\n }\r\n delta = fromState ? state.position - fromState.position : 0;\r\n }\r\n else {\r\n replace(to);\r\n }\r\n // console.log({ deltaFromCurrent })\r\n // Here we could also revert the navigation by calling history.go(-delta)\r\n // this listener will have to be adapted to not trigger again and to wait for the url\r\n // to be updated before triggering the listeners. Some kind of validation function would also\r\n // need to be passed to the listeners so the navigation can be accepted\r\n // call all listeners\r\n listeners.forEach(listener => {\r\n listener(currentLocation.value, from, {\r\n delta,\r\n type: NavigationType.pop,\r\n direction: delta\r\n ? delta > 0\r\n ? NavigationDirection.forward\r\n : NavigationDirection.back\r\n : NavigationDirection.unknown,\r\n });\r\n });\r\n };\r\n function pauseListeners() {\r\n pauseState = currentLocation.value;\r\n }\r\n function listen(callback) {\r\n // set up the listener and prepare teardown callbacks\r\n listeners.push(callback);\r\n const teardown = () => {\r\n const index = listeners.indexOf(callback);\r\n if (index > -1)\r\n listeners.splice(index, 1);\r\n };\r\n teardowns.push(teardown);\r\n return teardown;\r\n }\r\n function beforeUnloadListener() {\r\n const { history } = window;\r\n if (!history.state)\r\n return;\r\n history.replaceState(assign({}, history.state, { scroll: computeScrollPosition() }), '');\r\n }\r\n function destroy() {\r\n for (const teardown of teardowns)\r\n teardown();\r\n teardowns = [];\r\n window.removeEventListener('popstate', popStateHandler);\r\n window.removeEventListener('beforeunload', beforeUnloadListener);\r\n }\r\n // set up the listeners and prepare teardown callbacks\r\n window.addEventListener('popstate', popStateHandler);\r\n window.addEventListener('beforeunload', beforeUnloadListener);\r\n return {\r\n pauseListeners,\r\n listen,\r\n destroy,\r\n };\r\n}\r\n/**\r\n * Creates a state object\r\n */\r\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\r\n return {\r\n back,\r\n current,\r\n forward,\r\n replaced,\r\n position: window.history.length,\r\n scroll: computeScroll ? computeScrollPosition() : null,\r\n };\r\n}\r\nfunction useHistoryStateNavigation(base) {\r\n const { history, location } = window;\r\n // private variables\r\n const currentLocation = {\r\n value: createCurrentLocation(base, location),\r\n };\r\n const historyState = { value: history.state };\r\n // build current history entry as this is a fresh navigation\r\n if (!historyState.value) {\r\n changeLocation(currentLocation.value, {\r\n back: null,\r\n current: currentLocation.value,\r\n forward: null,\r\n // the length is off by one, we need to decrease it\r\n position: history.length - 1,\r\n replaced: true,\r\n // don't add a scroll as the user may have an anchor, and we want\r\n // scrollBehavior to be triggered without a saved position\r\n scroll: null,\r\n }, true);\r\n }\r\n function changeLocation(to, state, replace) {\r\n /**\r\n * if a base tag is provided, and we are on a normal domain, we have to\r\n * respect the provided `base` attribute because pushState() will use it and\r\n * potentially erase anything before the `#` like at\r\n * https://github.com/vuejs/router/issues/685 where a base of\r\n * `/folder/#` but a base of `/` would erase the `/folder/` section. If\r\n * there is no host, the `<base>` tag makes no sense and if there isn't a\r\n * base tag we can just use everything after the `#`.\r\n */\r\n const hashIndex = base.indexOf('#');\r\n const url = hashIndex > -1\r\n ? (location.host && document.querySelector('base')\r\n ? base\r\n : base.slice(hashIndex)) + to\r\n : createBaseLocation() + base + to;\r\n try {\r\n // BROWSER QUIRK\r\n // NOTE: Safari throws a SecurityError when calling this function 100 times in 30 seconds\r\n history[replace ? 'replaceState' : 'pushState'](state, '', url);\r\n historyState.value = state;\r\n }\r\n catch (err) {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn('Error with push/replace State', err);\r\n }\r\n else {\r\n console.error(err);\r\n }\r\n // Force the navigation, this also resets the call count\r\n location[replace ? 'replace' : 'assign'](url);\r\n }\r\n }\r\n function replace(to, data) {\r\n const state = assign({}, history.state, buildState(historyState.value.back, \r\n // keep back and forward entries but override current position\r\n to, historyState.value.forward, true), data, { position: historyState.value.position });\r\n changeLocation(to, state, true);\r\n currentLocation.value = to;\r\n }\r\n function push(to, data) {\r\n // Add to current entry the information of where we are going\r\n // as well as saving the current position\r\n const currentState = assign({}, \r\n // use current history state to gracefully handle a wrong call to\r\n // history.replaceState\r\n // https://github.com/vuejs/router/issues/366\r\n historyState.value, history.state, {\r\n forward: to,\r\n scroll: computeScrollPosition(),\r\n });\r\n if ((process.env.NODE_ENV !== 'production') && !history.state) {\r\n warn(`history.state seems to have been manually replaced without preserving the necessary values. Make sure to preserve existing history state if you are manually calling history.replaceState:\\n\\n` +\r\n `history.replaceState(history.state, '', url)\\n\\n` +\r\n `You can find more information at https://next.router.vuejs.org/guide/migration/#usage-of-history-state.`);\r\n }\r\n changeLocation(currentState.current, currentState, true);\r\n const state = assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data);\r\n changeLocation(to, state, false);\r\n currentLocation.value = to;\r\n }\r\n return {\r\n location: currentLocation,\r\n state: historyState,\r\n push,\r\n replace,\r\n };\r\n}\r\n/**\r\n * Creates an HTML5 history. Most common history for single page applications.\r\n *\r\n * @param base -\r\n */\r\nfunction createWebHistory(base) {\r\n base = normalizeBase(base);\r\n const historyNavigation = useHistoryStateNavigation(base);\r\n const historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\r\n function go(delta, triggerListeners = true) {\r\n if (!triggerListeners)\r\n historyListeners.pauseListeners();\r\n history.go(delta);\r\n }\r\n const routerHistory = assign({\r\n // it's overridden right after\r\n location: '',\r\n base,\r\n go,\r\n createHref: createHref.bind(null, base),\r\n }, historyNavigation, historyListeners);\r\n Object.defineProperty(routerHistory, 'location', {\r\n enumerable: true,\r\n get: () => historyNavigation.location.value,\r\n });\r\n Object.defineProperty(routerHistory, 'state', {\r\n enumerable: true,\r\n get: () => historyNavigation.state.value,\r\n });\r\n return routerHistory;\r\n}\n\n/**\r\n * Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\r\n * It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\r\n *\r\n * @param base - Base applied to all urls, defaults to '/'\r\n * @returns a history object that can be passed to the router constructor\r\n */\r\nfunction createMemoryHistory(base = '') {\r\n let listeners = [];\r\n let queue = [START];\r\n let position = 0;\r\n base = normalizeBase(base);\r\n function setLocation(location) {\r\n position++;\r\n if (position === queue.length) {\r\n // we are at the end, we can simply append a new entry\r\n queue.push(location);\r\n }\r\n else {\r\n // we are in the middle, we remove everything from here in the queue\r\n queue.splice(position);\r\n queue.push(location);\r\n }\r\n }\r\n function triggerListeners(to, from, { direction, delta }) {\r\n const info = {\r\n direction,\r\n delta,\r\n type: NavigationType.pop,\r\n };\r\n for (const callback of listeners) {\r\n callback(to, from, info);\r\n }\r\n }\r\n const routerHistory = {\r\n // rewritten by Object.defineProperty\r\n location: START,\r\n // TODO: should be kept in queue\r\n state: {},\r\n base,\r\n createHref: createHref.bind(null, base),\r\n replace(to) {\r\n // remove current entry and decrement position\r\n queue.splice(position--, 1);\r\n setLocation(to);\r\n },\r\n push(to, data) {\r\n setLocation(to);\r\n },\r\n listen(callback) {\r\n listeners.push(callback);\r\n return () => {\r\n const index = listeners.indexOf(callback);\r\n if (index > -1)\r\n listeners.splice(index, 1);\r\n };\r\n },\r\n destroy() {\r\n listeners = [];\r\n queue = [START];\r\n position = 0;\r\n },\r\n go(delta, shouldTrigger = true) {\r\n const from = this.location;\r\n const direction = \r\n // we are considering delta === 0 going forward, but in abstract mode\r\n // using 0 for the delta doesn't make sense like it does in html5 where\r\n // it reloads the page\r\n delta < 0 ? NavigationDirection.back : NavigationDirection.forward;\r\n position = Math.max(0, Math.min(position + delta, queue.length - 1));\r\n if (shouldTrigger) {\r\n triggerListeners(this.location, from, {\r\n direction,\r\n delta,\r\n });\r\n }\r\n },\r\n };\r\n Object.defineProperty(routerHistory, 'location', {\r\n enumerable: true,\r\n get: () => queue[position],\r\n });\r\n return routerHistory;\r\n}\n\n/**\r\n * Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to\r\n * handle any URL is not possible.\r\n *\r\n * @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `<base>` tag\r\n * in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState()\r\n * calls**, meaning that if you use a `<base>` tag, it's `href` value **has to match this parameter** (ignoring anything\r\n * after the `#`).\r\n *\r\n * @example\r\n * ```js\r\n * // at https://example.com/folder\r\n * createWebHashHistory() // gives a url of `https://example.com/folder#`\r\n * createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\r\n * // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\r\n * createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\r\n * // you should avoid doing this because it changes the original url and breaks copying urls\r\n * createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\r\n *\r\n * // at file:///usr/etc/folder/index.html\r\n * // for locations with no `host`, the base is ignored\r\n * createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\r\n * ```\r\n */\r\nfunction createWebHashHistory(base) {\r\n // Make sure this implementation is fine in terms of encoding, specially for IE11\r\n // for `file://`, directly use the pathname and ignore the base\r\n // location.pathname contains an initial `/` even at the root: `https://example.com`\r\n base = location.host ? base || location.pathname + location.search : '';\r\n // allow the user to provide a `#` in the middle: `/base/#/app`\r\n if (!base.includes('#'))\r\n base += '#';\r\n if ((process.env.NODE_ENV !== 'production') && !base.endsWith('#/') && !base.endsWith('#')) {\r\n warn(`A hash base must end with a \"#\":\\n\"${base}\" should be \"${base.replace(/#.*$/, '#')}\".`);\r\n }\r\n return createWebHistory(base);\r\n}\n\nfunction isRouteLocation(route) {\r\n return typeof route === 'string' || (route && typeof route === 'object');\r\n}\r\nfunction isRouteName(name) {\r\n return typeof name === 'string' || typeof name === 'symbol';\r\n}\n\n/**\r\n * Initial route location where the router is. Can be used in navigation guards\r\n * to differentiate the initial navigation.\r\n *\r\n * @example\r\n * ```js\r\n * import { START_LOCATION } from 'vue-router'\r\n *\r\n * router.beforeEach((to, from) => {\r\n * if (from === START_LOCATION) {\r\n * // initial navigation\r\n * }\r\n * })\r\n * ```\r\n */\r\nconst START_LOCATION_NORMALIZED = {\r\n path: '/',\r\n name: undefined,\r\n params: {},\r\n query: {},\r\n hash: '',\r\n fullPath: '/',\r\n matched: [],\r\n meta: {},\r\n redirectedFrom: undefined,\r\n};\n\nconst NavigationFailureSymbol = Symbol((process.env.NODE_ENV !== 'production') ? 'navigation failure' : '');\r\n/**\r\n * Enumeration with all possible types for navigation failures. Can be passed to\r\n * {@link isNavigationFailure} to check for specific failures.\r\n */\r\nvar NavigationFailureType;\r\n(function (NavigationFailureType) {\r\n /**\r\n * An aborted navigation is a navigation that failed because a navigation\r\n * guard returned `false` or called `next(false)`\r\n */\r\n NavigationFailureType[NavigationFailureType[\"aborted\"] = 4] = \"aborted\";\r\n /**\r\n * A cancelled navigation is a navigation that failed because a more recent\r\n * navigation finished started (not necessarily finished).\r\n */\r\n NavigationFailureType[NavigationFailureType[\"cancelled\"] = 8] = \"cancelled\";\r\n /**\r\n * A duplicated navigation is a navigation that failed because it was\r\n * initiated while already being at the exact same location.\r\n */\r\n NavigationFailureType[NavigationFailureType[\"duplicated\"] = 16] = \"duplicated\";\r\n})(NavigationFailureType || (NavigationFailureType = {}));\r\n// DEV only debug messages\r\nconst ErrorTypeMessages = {\r\n [1 /* ErrorTypes.MATCHER_NOT_FOUND */]({ location, currentLocation }) {\r\n return `No match for\\n ${JSON.stringify(location)}${currentLocation\r\n ? '\\nwhile being at\\n' + JSON.stringify(currentLocation)\r\n : ''}`;\r\n },\r\n [2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */]({ from, to, }) {\r\n return `Redirected from \"${from.fullPath}\" to \"${stringifyRoute(to)}\" via a navigation guard.`;\r\n },\r\n [4 /* ErrorTypes.NAVIGATION_ABORTED */]({ from, to }) {\r\n return `Navigation aborted from \"${from.fullPath}\" to \"${to.fullPath}\" via a navigation guard.`;\r\n },\r\n [8 /* ErrorTypes.NAVIGATION_CANCELLED */]({ from, to }) {\r\n return `Navigation cancelled from \"${from.fullPath}\" to \"${to.fullPath}\" with a new navigation.`;\r\n },\r\n [16 /* ErrorTypes.NAVIGATION_DUPLICATED */]({ from, to }) {\r\n return `Avoided redundant navigation to current location: \"${from.fullPath}\".`;\r\n },\r\n};\r\nfunction createRouterError(type, params) {\r\n // keep full error messages in cjs versions\r\n if ((process.env.NODE_ENV !== 'production') || !true) {\r\n return assign(new Error(ErrorTypeMessages[type](params)), {\r\n type,\r\n [NavigationFailureSymbol]: true,\r\n }, params);\r\n }\r\n else {\r\n return assign(new Error(), {\r\n type,\r\n [NavigationFailureSymbol]: true,\r\n }, params);\r\n }\r\n}\r\nfunction isNavigationFailure(error, type) {\r\n return (error instanceof Error &&\r\n NavigationFailureSymbol in error &&\r\n (type == null || !!(error.type & type)));\r\n}\r\nconst propertiesToLog = ['params', 'query', 'hash'];\r\nfunction stringifyRoute(to) {\r\n if (typeof to === 'string')\r\n return to;\r\n if ('path' in to)\r\n return to.path;\r\n const location = {};\r\n for (const key of propertiesToLog) {\r\n if (key in to)\r\n location[key] = to[key];\r\n }\r\n return JSON.stringify(location, null, 2);\r\n}\n\n// default pattern for a param: non-greedy everything but /\r\nconst BASE_PARAM_PATTERN = '[^/]+?';\r\nconst BASE_PATH_PARSER_OPTIONS = {\r\n sensitive: false,\r\n strict: false,\r\n start: true,\r\n end: true,\r\n};\r\n// Special Regex characters that must be escaped in static tokens\r\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\r\n/**\r\n * Creates a path parser from an array of Segments (a segment is an array of Tokens)\r\n *\r\n * @param segments - array of segments returned by tokenizePath\r\n * @param extraOptions - optional options for the regexp\r\n * @returns a PathParser\r\n */\r\nfunction tokensToParser(segments, extraOptions) {\r\n const options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\r\n // the amount of scores is the same as the length of segments except for the root segment \"/\"\r\n const score = [];\r\n // the regexp as a string\r\n let pattern = options.start ? '^' : '';\r\n // extracted keys\r\n const keys = [];\r\n for (const segment of segments) {\r\n // the root segment needs special treatment\r\n const segmentScores = segment.length ? [] : [90 /* PathScore.Root */];\r\n // allow trailing slash\r\n if (options.strict && !segment.length)\r\n pattern += '/';\r\n for (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\r\n const token = segment[tokenIndex];\r\n // resets the score if we are inside a sub-segment /:a-other-:b\r\n let subSegmentScore = 40 /* PathScore.Segment */ +\r\n (options.sensitive ? 0.25 /* PathScore.BonusCaseSensitive */ : 0);\r\n if (token.type === 0 /* TokenType.Static */) {\r\n // prepend the slash if we are starting a new segment\r\n if (!tokenIndex)\r\n pattern += '/';\r\n pattern += token.value.replace(REGEX_CHARS_RE, '\\\\$&');\r\n subSegmentScore += 40 /* PathScore.Static */;\r\n }\r\n else if (token.type === 1 /* TokenType.Param */) {\r\n const { value, repeatable, optional, regexp } = token;\r\n keys.push({\r\n name: value,\r\n repeatable,\r\n optional,\r\n });\r\n const re = regexp ? regexp : BASE_PARAM_PATTERN;\r\n // the user provided a custom regexp /:id(\\\\d+)\r\n if (re !== BASE_PARAM_PATTERN) {\r\n subSegmentScore += 10 /* PathScore.BonusCustomRegExp */;\r\n // make sure the regexp is valid before using it\r\n try {\r\n new RegExp(`(${re})`);\r\n }\r\n catch (err) {\r\n throw new Error(`Invalid custom RegExp for param \"${value}\" (${re}): ` +\r\n err.message);\r\n }\r\n }\r\n // when we repeat we must take care of the repeating leading slash\r\n let subPattern = repeatable ? `((?:${re})(?:/(?:${re}))*)` : `(${re})`;\r\n // prepend the slash if we are starting a new segment\r\n if (!tokenIndex)\r\n subPattern =\r\n // avoid an optional / if there are more segments e.g. /:p?-static\r\n // or /:p?-:p2\r\n optional && segment.length < 2\r\n ? `(?:/${subPattern})`\r\n : '/' + subPattern;\r\n if (optional)\r\n subPattern += '?';\r\n pattern += subPattern;\r\n subSegmentScore += 20 /* PathScore.Dynamic */;\r\n if (optional)\r\n subSegmentScore += -8 /* PathScore.BonusOptional */;\r\n if (repeatable)\r\n subSegmentScore += -20 /* PathScore.BonusRepeatable */;\r\n if (re === '.*')\r\n subSegmentScore += -50 /* PathScore.BonusWildcard */;\r\n }\r\n segmentScores.push(subSegmentScore);\r\n }\r\n // an empty array like /home/ -> [[{home}], []]\r\n // if (!segment.length) pattern += '/'\r\n score.push(segmentScores);\r\n }\r\n // only apply the strict bonus to the last score\r\n if (options.strict && options.end) {\r\n const i = score.length - 1;\r\n score[i][score[i].length - 1] += 0.7000000000000001 /* PathScore.BonusStrict */;\r\n }\r\n // TODO: dev only warn double trailing slash\r\n if (!options.strict)\r\n pattern += '/?';\r\n if (options.end)\r\n pattern += '$';\r\n // allow paths like /dynamic to only match dynamic or dynamic/... but not dynamic_something_else\r\n else if (options.strict)\r\n pattern += '(?:/|$)';\r\n const re = new RegExp(pattern, options.sensitive ? '' : 'i');\r\n function parse(path) {\r\n const match = path.match(re);\r\n const params = {};\r\n if (!match)\r\n return null;\r\n for (let i = 1; i < match.length; i++) {\r\n const value = match[i] || '';\r\n const key = keys[i - 1];\r\n params[key.name] = value && key.repeatable ? value.split('/') : value;\r\n }\r\n return params;\r\n }\r\n function stringify(params) {\r\n let path = '';\r\n // for optional parameters to allow to be empty\r\n let avoidDuplicatedSlash = false;\r\n for (const segment of segments) {\r\n if (!avoidDuplicatedSlash || !path.endsWith('/'))\r\n path += '/';\r\n avoidDuplicatedSlash = false;\r\n for (const token of segment) {\r\n if (token.type === 0 /* TokenType.Static */) {\r\n path += token.value;\r\n }\r\n else if (token.type === 1 /* TokenType.Param */) {\r\n const { value, repeatable, optional } = token;\r\n const param = value in params ? params[value] : '';\r\n if (isArray(param) && !repeatable) {\r\n throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\r\n }\r\n const text = isArray(param)\r\n ? param.join('/')\r\n : param;\r\n if (!text) {\r\n if (optional) {\r\n // if we have more than one optional param like /:a?-static we don't need to care about the optional param\r\n if (segment.length < 2) {\r\n // remove the last slash as we could be at the end\r\n if (path.endsWith('/'))\r\n path = path.slice(0, -1);\r\n // do not append a slash on the next iteration\r\n else\r\n avoidDuplicatedSlash = true;\r\n }\r\n }\r\n else\r\n throw new Error(`Missing required param \"${value}\"`);\r\n }\r\n path += text;\r\n }\r\n }\r\n }\r\n // avoid empty path when we have multiple optional params\r\n return path || '/';\r\n }\r\n return {\r\n re,\r\n score,\r\n keys,\r\n parse,\r\n stringify,\r\n };\r\n}\r\n/**\r\n * Compares an array of numbers as used in PathParser.score and returns a\r\n * number. This function can be used to `sort` an array\r\n *\r\n * @param a - first array of numbers\r\n * @param b - second array of numbers\r\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\r\n * should be sorted first\r\n */\r\nfunction compareScoreArray(a, b) {\r\n let i = 0;\r\n while (i < a.length && i < b.length) {\r\n const diff = b[i] - a[i];\r\n // only keep going if diff === 0\r\n if (diff)\r\n return diff;\r\n i++;\r\n }\r\n // if the last subsegment was Static, the shorter segments should be sorted first\r\n // otherwise sort the longest segment first\r\n if (a.length < b.length) {\r\n return a.length === 1 && a[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\r\n ? -1\r\n : 1;\r\n }\r\n else if (a.length > b.length) {\r\n return b.length === 1 && b[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\r\n ? 1\r\n : -1;\r\n }\r\n return 0;\r\n}\r\n/**\r\n * Compare function that can be used with `sort` to sort an array of PathParser\r\n *\r\n * @param a - first PathParser\r\n * @param b - second PathParser\r\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\r\n */\r\nfunction comparePathParserScore(a, b) {\r\n let i = 0;\r\n const aScore = a.score;\r\n const bScore = b.score;\r\n while (i < aScore.length && i < bScore.length) {\r\n const comp = compareScoreArray(aScore[i], bScore[i]);\r\n // do not return if both are equal\r\n if (comp)\r\n return comp;\r\n i++;\r\n }\r\n if (Math.abs(bScore.length - aScore.length) === 1) {\r\n if (isLastScoreNegative(aScore))\r\n return 1;\r\n if (isLastScoreNegative(bScore))\r\n return -1;\r\n }\r\n // if a and b share the same score entries but b has more, sort b first\r\n return bScore.length - aScore.length;\r\n // this is the ternary version\r\n // return aScore.length < bScore.length\r\n // ? 1\r\n // : aScore.length > bScore.length\r\n // ? -1\r\n // : 0\r\n}\r\n/**\r\n * This allows detecting splats at the end of a path: /home/:id(.*)*\r\n *\r\n * @param score - score to check\r\n * @returns true if the last entry is negative\r\n */\r\nfunction isLastScoreNegative(score) {\r\n const last = score[score.length - 1];\r\n return score.length > 0 && last[last.length - 1] < 0;\r\n}\n\nconst ROOT_TOKEN = {\r\n type: 0 /* TokenType.Static */,\r\n value: '',\r\n};\r\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\r\n// After some profiling, the cache seems to be unnecessary because tokenizePath\r\n// (the slowest part of adding a route) is very fast\r\n// const tokenCache = new Map<string, Token[][]>()\r\nfunction tokenizePath(path) {\r\n if (!path)\r\n return [[]];\r\n if (path === '/')\r\n return [[ROOT_TOKEN]];\r\n if (!path.startsWith('/')) {\r\n throw new Error((process.env.NODE_ENV !== 'production')\r\n ? `Route paths should start with a \"/\": \"${path}\" should be \"/${path}\".`\r\n : `Invalid path \"${path}\"`);\r\n }\r\n // if (tokenCache.has(path)) return tokenCache.get(path)!\r\n function crash(message) {\r\n throw new Error(`ERR (${state})/\"${buffer}\": ${message}`);\r\n }\r\n let state = 0 /* TokenizerState.Static */;\r\n let previousState = state;\r\n const tokens = [];\r\n // the segment will always be valid because we get into the initial state\r\n // with the leading /\r\n let segment;\r\n function finalizeSegment() {\r\n if (segment)\r\n tokens.push(segment);\r\n segment = [];\r\n }\r\n // index on the path\r\n let i = 0;\r\n // char at index\r\n let char;\r\n // buffer of the value read\r\n let buffer = '';\r\n // custom regexp for a param\r\n let customRe = '';\r\n function consumeBuffer() {\r\n if (!buffer)\r\n return;\r\n if (state === 0 /* TokenizerState.Static */) {\r\n segment.push({\r\n type: 0 /* TokenType.Static */,\r\n value: buffer,\r\n });\r\n }\r\n else if (state === 1 /* TokenizerState.Param */ ||\r\n state === 2 /* TokenizerState.ParamRegExp */ ||\r\n state === 3 /* TokenizerState.ParamRegExpEnd */) {\r\n if (segment.length > 1 && (char === '*' || char === '+'))\r\n crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\r\n segment.push({\r\n type: 1 /* TokenType.Param */,\r\n value: buffer,\r\n regexp: customRe,\r\n repeatable: char === '*' || char === '+',\r\n optional: char === '*' || char === '?',\r\n });\r\n }\r\n else {\r\n crash('Invalid state to consume buffer');\r\n }\r\n buffer = '';\r\n }\r\n function addCharToBuffer() {\r\n buffer += char;\r\n }\r\n while (i < path.length) {\r\n char = path[i++];\r\n if (char === '\\\\' && state !== 2 /* TokenizerState.ParamRegExp */) {\r\n previousState = state;\r\n state = 4 /* TokenizerState.EscapeNext */;\r\n continue;\r\n }\r\n switch (state) {\r\n case 0 /* TokenizerState.Static */:\r\n if (char === '/') {\r\n if (buffer) {\r\n consumeBuffer();\r\n }\r\n finalizeSegment();\r\n }\r\n else if (char === ':') {\r\n consumeBuffer();\r\n state = 1 /* TokenizerState.Param */;\r\n }\r\n else {\r\n addCharToBuffer();\r\n }\r\n break;\r\n case 4 /* TokenizerState.EscapeNext */:\r\n addCharToBuffer();\r\n state = previousState;\r\n break;\r\n case 1 /* TokenizerState.Param */:\r\n if (char === '(') {\r\n state = 2 /* TokenizerState.ParamRegExp */;\r\n }\r\n else if (VALID_PARAM_RE.test(char)) {\r\n addCharToBuffer();\r\n }\r\n else {\r\n consumeBuffer();\r\n state = 0 /* TokenizerState.Static */;\r\n // go back one character if we were not modifying\r\n if (char !== '*' && char !== '?' && char !== '+')\r\n i--;\r\n }\r\n break;\r\n case 2 /* TokenizerState.ParamRegExp */:\r\n // TODO: is it worth handling nested regexp? like :p(?:prefix_([^/]+)_suffix)\r\n // it already works by escaping the closing )\r\n // https://paths.esm.dev/?p=AAMeJbiAwQEcDKbAoAAkP60PG2R6QAvgNaA6AFACM2ABuQBB#\r\n // is this really something people need since you can also write\r\n // /prefix_:p()_suffix\r\n if (char === ')') {\r\n // handle the escaped )\r\n if (customRe[customRe.length - 1] == '\\\\')\r\n customRe = customRe.slice(0, -1) + char;\r\n else\r\n state = 3 /* TokenizerState.ParamRegExpEnd */;\r\n }\r\n else {\r\n customRe += char;\r\n }\r\n break;\r\n case 3 /* TokenizerState.ParamRegExpEnd */:\r\n // same as finalizing a param\r\n consumeBuffer();\r\n state = 0 /* TokenizerState.Static */;\r\n // go back one character if we were not modifying\r\n if (char !== '*' && char !== '?' && char !== '+')\r\n i--;\r\n customRe = '';\r\n break;\r\n default:\r\n crash('Unknown state');\r\n break;\r\n }\r\n }\r\n if (state === 2 /* TokenizerState.ParamRegExp */)\r\n crash(`Unfinished custom RegExp for param \"${buffer}\"`);\r\n consumeBuffer();\r\n finalizeSegment();\r\n // tokenCache.set(path, tokens)\r\n return tokens;\r\n}\n\nfunction createRouteRecordMatcher(record, parent, options) {\r\n const parser = tokensToParser(tokenizePath(record.path), options);\r\n // warn against params with the same name\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const existingKeys = new Set();\r\n for (const key of parser.keys) {\r\n if (existingKeys.has(key.name))\r\n warn(`Found duplicated params with name \"${key.name}\" for path \"${record.path}\". Only the last one will be available on \"$route.params\".`);\r\n existingKeys.add(key.name);\r\n }\r\n }\r\n const matcher = assign(parser, {\r\n record,\r\n parent,\r\n // these needs to be populated by the parent\r\n children: [],\r\n alias: [],\r\n });\r\n if (parent) {\r\n // both are aliases or both are not aliases\r\n // we don't want to mix them because the order is used when\r\n // passing originalRecord in Matcher.addRoute\r\n if (!matcher.record.aliasOf === !parent.record.aliasOf)\r\n parent.children.push(matcher);\r\n }\r\n return matcher;\r\n}\n\n/**\r\n * Creates a Router Matcher.\r\n *\r\n * @internal\r\n * @param routes - array of initial routes\r\n * @param globalOptions - global route options\r\n */\r\nfunction createRouterMatcher(routes, globalOptions) {\r\n // normalized ordered array of matchers\r\n const matchers = [];\r\n const matcherMap = new Map();\r\n globalOptions = mergeOptions({ strict: false, end: true, sensitive: false }, globalOptions);\r\n function getRecordMatcher(name) {\r\n return matcherMap.get(name);\r\n }\r\n function addRoute(record, parent, originalRecord) {\r\n // used later on to remove by name\r\n const isRootAdd = !originalRecord;\r\n const mainNormalizedRecord = normalizeRouteRecord(record);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent);\r\n }\r\n // we might be the child of an alias\r\n mainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\r\n const options = mergeOptions(globalOptions, record);\r\n // generate an array of records to correctly handle aliases\r\n const normalizedRecords = [\r\n mainNormalizedRecord,\r\n ];\r\n if ('alias' in record) {\r\n const aliases = typeof record.alias === 'string' ? [record.alias] : record.alias;\r\n for (const alias of aliases) {\r\n normalizedRecords.push(assign({}, mainNormalizedRecord, {\r\n // this allows us to hold a copy of the `components` option\r\n // so that async components cache is hold on the original record\r\n components: originalRecord\r\n ? originalRecord.record.components\r\n : mainNormalizedRecord.components,\r\n path: alias,\r\n // we might be the child of an alias\r\n aliasOf: originalRecord\r\n ? originalRecord.record\r\n : mainNormalizedRecord,\r\n // the aliases are always of the same kind as the original since they\r\n // are defined on the same record\r\n }));\r\n }\r\n }\r\n let matcher;\r\n let originalMatcher;\r\n for (const normalizedRecord of normalizedRecords) {\r\n const { path } = normalizedRecord;\r\n // Build up the path for nested routes if the child isn't an absolute\r\n // route. Only add the / delimiter if the child path isn't empty and if the\r\n // parent path doesn't have a trailing slash\r\n if (parent && path[0] !== '/') {\r\n const parentPath = parent.record.path;\r\n const connectingSlash = parentPath[parentPath.length - 1] === '/' ? '' : '/';\r\n normalizedRecord.path =\r\n parent.record.path + (path && connectingSlash + path);\r\n }\r\n if ((process.env.NODE_ENV !== 'production') && normalizedRecord.path === '*') {\r\n throw new Error('Catch all routes (\"*\") must now be defined using a param with a custom regexp.\\n' +\r\n 'See more at https://next.router.vuejs.org/guide/migration/#removed-star-or-catch-all-routes.');\r\n }\r\n // create the object beforehand, so it can be passed to children\r\n matcher = createRouteRecordMatcher(normalizedRecord, parent, options);\r\n if ((process.env.NODE_ENV !== 'production') && parent && path[0] === '/')\r\n checkMissingParamsInAbsolutePath(matcher, parent);\r\n // if we are an alias we must tell the original record that we exist,\r\n // so we can be removed\r\n if (originalRecord) {\r\n originalRecord.alias.push(matcher);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n checkSameParams(originalRecord, matcher);\r\n }\r\n }\r\n else {\r\n // otherwise, the first record is the original and others are aliases\r\n originalMatcher = originalMatcher || matcher;\r\n if (originalMatcher !== matcher)\r\n originalMatcher.alias.push(matcher);\r\n // remove the route if named and only for the top record (avoid in nested calls)\r\n // this works because the original record is the first one\r\n if (isRootAdd && record.name && !isAliasRecord(matcher))\r\n removeRoute(record.name);\r\n }\r\n if (mainNormalizedRecord.children) {\r\n const children = mainNormalizedRecord.children;\r\n for (let i = 0; i < children.length; i++) {\r\n addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\r\n }\r\n }\r\n // if there was no original record, then the first one was not an alias and all\r\n // other aliases (if any) need to reference this record when adding children\r\n originalRecord = originalRecord || matcher;\r\n // TODO: add normalized records for more flexibility\r\n // if (parent && isAliasRecord(originalRecord)) {\r\n // parent.children.push(originalRecord)\r\n // }\r\n // Avoid adding a record that doesn't display anything. This allows passing through records without a component to\r\n // not be reached and pass through the catch all route\r\n if ((matcher.record.components &&\r\n Object.keys(matcher.record.components).length) ||\r\n matcher.record.name ||\r\n matcher.record.redirect) {\r\n insertMatcher(matcher);\r\n }\r\n }\r\n return originalMatcher\r\n ? () => {\r\n // since other matchers are aliases, they should be removed by the original matcher\r\n removeRoute(originalMatcher);\r\n }\r\n : noop;\r\n }\r\n function removeRoute(matcherRef) {\r\n if (isRouteName(matcherRef)) {\r\n const matcher = matcherMap.get(matcherRef);\r\n if (matcher) {\r\n matcherMap.delete(matcherRef);\r\n matchers.splice(matchers.indexOf(matcher), 1);\r\n matcher.children.forEach(removeRoute);\r\n matcher.alias.forEach(removeRoute);\r\n }\r\n }\r\n else {\r\n const index = matchers.indexOf(matcherRef);\r\n if (index > -1) {\r\n matchers.splice(index, 1);\r\n if (matcherRef.record.name)\r\n matcherMap.delete(matcherRef.record.name);\r\n matcherRef.children.forEach(removeRoute);\r\n matcherRef.alias.forEach(removeRoute);\r\n }\r\n }\r\n }\r\n function getRoutes() {\r\n return matchers;\r\n }\r\n function insertMatcher(matcher) {\r\n let i = 0;\r\n while (i < matchers.length &&\r\n comparePathParserScore(matcher, matchers[i]) >= 0 &&\r\n // Adding children with empty path should still appear before the parent\r\n // https://github.com/vuejs/router/issues/1124\r\n (matcher.record.path !== matchers[i].record.path ||\r\n !isRecordChildOf(matcher, matchers[i])))\r\n i++;\r\n matchers.splice(i, 0, matcher);\r\n // only add the original record to the name map\r\n if (matcher.record.name && !isAliasRecord(matcher))\r\n matcherMap.set(matcher.record.name, matcher);\r\n }\r\n function resolve(location, currentLocation) {\r\n let matcher;\r\n let params = {};\r\n let path;\r\n let name;\r\n if ('name' in location && location.name) {\r\n matcher = matcherMap.get(location.name);\r\n if (!matcher)\r\n throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\r\n location,\r\n });\r\n // warn if the user is passing invalid params so they can debug it better when they get removed\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n const invalidParams = Object.keys(location.params || {}).filter(paramName => !matcher.keys.find(k => k.name === paramName));\r\n if (invalidParams.length) {\r\n warn(`Discarded invalid param(s) \"${invalidParams.join('\", \"')}\" when navigating. See https://github.com/vuejs/router/blob/main/packages/router/CHANGELOG.md#414-2022-08-22 for more details.`);\r\n }\r\n }\r\n name = matcher.record.name;\r\n params = assign(\r\n // paramsFromLocation is a new object\r\n paramsFromLocation(currentLocation.params, \r\n // only keep params that exist in the resolved location\r\n // TODO: only keep optional params coming from a parent record\r\n matcher.keys.filter(k => !k.optional).map(k => k.name)), \r\n // discard any existing params in the current location that do not exist here\r\n // #1497 this ensures better active/exact matching\r\n location.params &&\r\n paramsFromLocation(location.params, matcher.keys.map(k => k.name)));\r\n // throws if cannot be stringified\r\n path = matcher.stringify(params);\r\n }\r\n else if ('path' in location) {\r\n // no need to resolve the path with the matcher as it was provided\r\n // this also allows the user to control the encoding\r\n path = location.path;\r\n if ((process.env.NODE_ENV !== 'production') && !path.startsWith('/')) {\r\n warn(`The Matcher cannot resolve relative paths but received \"${path}\". Unless you directly called \\`matcher.resolve(\"${path}\")\\`, this is probably a bug in vue-router. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/router.`);\r\n }\r\n matcher = matchers.find(m => m.re.test(path));\r\n // matcher should have a value after the loop\r\n if (matcher) {\r\n // we know the matcher works because we tested the regexp\r\n params = matcher.parse(path);\r\n name = matcher.record.name;\r\n }\r\n // location is a relative path\r\n }\r\n else {\r\n // match by name or path of current route\r\n matcher = currentLocation.name\r\n ? matcherMap.get(currentLocation.name)\r\n : matchers.find(m => m.re.test(currentLocation.path));\r\n if (!matcher)\r\n throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\r\n location,\r\n currentLocation,\r\n });\r\n name = matcher.record.name;\r\n // since we are navigating to the same location, we don't need to pick the\r\n // params like when `name` is provided\r\n params = assign({}, currentLocation.params, location.params);\r\n path = matcher.stringify(params);\r\n }\r\n const matched = [];\r\n let parentMatcher = matcher;\r\n while (parentMatcher) {\r\n // reversed order so parents are at the beginning\r\n matched.unshift(parentMatcher.record);\r\n parentMatcher = parentMatcher.parent;\r\n }\r\n return {\r\n name,\r\n path,\r\n params,\r\n matched,\r\n meta: mergeMetaFields(matched),\r\n };\r\n }\r\n // add initial routes\r\n routes.forEach(route => addRoute(route));\r\n return { addRoute, resolve, removeRoute, getRoutes, getRecordMatcher };\r\n}\r\nfunction paramsFromLocation(params, keys) {\r\n const newParams = {};\r\n for (const key of keys) {\r\n if (key in params)\r\n newParams[key] = params[key];\r\n }\r\n return newParams;\r\n}\r\n/**\r\n * Normalizes a RouteRecordRaw. Creates a copy\r\n *\r\n * @param record\r\n * @returns the normalized version\r\n */\r\nfunction normalizeRouteRecord(record) {\r\n return {\r\n path: record.path,\r\n redirect: record.redirect,\r\n name: record.name,\r\n meta: record.meta || {},\r\n aliasOf: undefined,\r\n beforeEnter: record.beforeEnter,\r\n props: normalizeRecordProps(record),\r\n children: record.children || [],\r\n instances: {},\r\n leaveGuards: new Set(),\r\n updateGuards: new Set(),\r\n enterCallbacks: {},\r\n components: 'components' in record\r\n ? record.components || null\r\n : record.component && { default: record.component },\r\n };\r\n}\r\n/**\r\n * Normalize the optional `props` in a record to always be an object similar to\r\n * components. Also accept a boolean for components.\r\n * @param record\r\n */\r\nfunction normalizeRecordProps(record) {\r\n const propsObject = {};\r\n // props does not exist on redirect records, but we can set false directly\r\n const props = record.props || false;\r\n if ('component' in record) {\r\n propsObject.default = props;\r\n }\r\n else {\r\n // NOTE: we could also allow a function to be applied to every component.\r\n // Would need user feedback for use cases\r\n for (const name in record.components)\r\n propsObject[name] = typeof props === 'boolean' ? props : props[name];\r\n }\r\n return propsObject;\r\n}\r\n/**\r\n * Checks if a record or any of its parent is an alias\r\n * @param record\r\n */\r\nfunction isAliasRecord(record) {\r\n while (record) {\r\n if (record.record.aliasOf)\r\n return true;\r\n record = record.parent;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Merge meta fields of an array of records\r\n *\r\n * @param matched - array of matched records\r\n */\r\nfunction mergeMetaFields(matched) {\r\n return matched.reduce((meta, record) => assign(meta, record.meta), {});\r\n}\r\nfunction mergeOptions(defaults, partialOptions) {\r\n const options = {};\r\n for (const key in defaults) {\r\n options[key] = key in partialOptions ? partialOptions[key] : defaults[key];\r\n }\r\n return options;\r\n}\r\nfunction isSameParam(a, b) {\r\n return (a.name === b.name &&\r\n a.optional === b.optional &&\r\n a.repeatable === b.repeatable);\r\n}\r\n/**\r\n * Check if a path and its alias have the same required params\r\n *\r\n * @param a - original record\r\n * @param b - alias record\r\n */\r\nfunction checkSameParams(a, b) {\r\n for (const key of a.keys) {\r\n if (!key.optional && !b.keys.find(isSameParam.bind(null, key)))\r\n return warn(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\r\n }\r\n for (const key of b.keys) {\r\n if (!key.optional && !a.keys.find(isSameParam.bind(null, key)))\r\n return warn(`Alias \"${b.record.path}\" and the original record: \"${a.record.path}\" must have the exact same param named \"${key.name}\"`);\r\n }\r\n}\r\n/**\r\n * A route with a name and a child with an empty path without a name should warn when adding the route\r\n *\r\n * @param mainNormalizedRecord - RouteRecordNormalized\r\n * @param parent - RouteRecordMatcher\r\n */\r\nfunction checkChildMissingNameWithEmptyPath(mainNormalizedRecord, parent) {\r\n if (parent &&\r\n parent.record.name &&\r\n !mainNormalizedRecord.name &&\r\n !mainNormalizedRecord.path) {\r\n warn(`The route named \"${String(parent.record.name)}\" has a child without a name and an empty path. Using that name won't render the empty path child so you probably want to move the name to the child instead. If this is intentional, add a name to the child route to remove the warning.`);\r\n }\r\n}\r\nfunction checkMissingParamsInAbsolutePath(record, parent) {\r\n for (const key of parent.keys) {\r\n if (!record.keys.find(isSameParam.bind(null, key)))\r\n return warn(`Absolute path \"${record.record.path}\" must have the exact same param named \"${key.name}\" as its parent \"${parent.record.path}\".`);\r\n }\r\n}\r\nfunction isRecordChildOf(record, parent) {\r\n return parent.children.some(child => child === record || isRecordChildOf(record, child));\r\n}\n\n/**\r\n * Encoding Rules ⣠= Space Path: ⣠\" < > # ? { } Query: ⣠\" < > # & = Hash: ⣠\"\r\n * < > `\r\n *\r\n * On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\r\n * defines some extra characters to be encoded. Most browsers do not encode them\r\n * in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\r\n * also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\r\n * plus `-._~`. This extra safety should be applied to query by patching the\r\n * string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\r\n * should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\r\n * into a `/` if directly typed in. The _backtick_ (`````) should also be\r\n * encoded everywhere because some browsers like FF encode it when directly\r\n * written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\r\n */\r\n// const EXTRA_RESERVED_RE = /[!'()*]/g\r\n// const encodeReservedReplacer = (c: string) => '%' + c.charCodeAt(0).toString(16)\r\nconst HASH_RE = /#/g; // %23\r\nconst AMPERSAND_RE = /&/g; // %26\r\nconst SLASH_RE = /\\//g; // %2F\r\nconst EQUAL_RE = /=/g; // %3D\r\nconst IM_RE = /\\?/g; // %3F\r\nconst PLUS_RE = /\\+/g; // %2B\r\n/**\r\n * NOTE: It's not clear to me if we should encode the + symbol in queries, it\r\n * seems to be less flexible than not doing so and I can't find out the legacy\r\n * systems requiring this for regular requests like text/html. In the standard,\r\n * the encoding of the plus character is only mentioned for\r\n * application/x-www-form-urlencoded\r\n * (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\r\n * leave the plus character as is in queries. To be more flexible, we allow the\r\n * plus character on the query, but it can also be manually encoded by the user.\r\n *\r\n * Resources:\r\n * - https://url.spec.whatwg.org/#urlencoded-parsing\r\n * - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\r\n */\r\nconst ENC_BRACKET_OPEN_RE = /%5B/g; // [\r\nconst ENC_BRACKET_CLOSE_RE = /%5D/g; // ]\r\nconst ENC_CARET_RE = /%5E/g; // ^\r\nconst ENC_BACKTICK_RE = /%60/g; // `\r\nconst ENC_CURLY_OPEN_RE = /%7B/g; // {\r\nconst ENC_PIPE_RE = /%7C/g; // |\r\nconst ENC_CURLY_CLOSE_RE = /%7D/g; // }\r\nconst ENC_SPACE_RE = /%20/g; // }\r\n/**\r\n * Encode characters that need to be encoded on the path, search and hash\r\n * sections of the URL.\r\n *\r\n * @internal\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction commonEncode(text) {\r\n return encodeURI('' + text)\r\n .replace(ENC_PIPE_RE, '|')\r\n .replace(ENC_BRACKET_OPEN_RE, '[')\r\n .replace(ENC_BRACKET_CLOSE_RE, ']');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the hash section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeHash(text) {\r\n return commonEncode(text)\r\n .replace(ENC_CURLY_OPEN_RE, '{')\r\n .replace(ENC_CURLY_CLOSE_RE, '}')\r\n .replace(ENC_CARET_RE, '^');\r\n}\r\n/**\r\n * Encode characters that need to be encoded query values on the query\r\n * section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeQueryValue(text) {\r\n return (commonEncode(text)\r\n // Encode the space as +, encode the + to differentiate it from the space\r\n .replace(PLUS_RE, '%2B')\r\n .replace(ENC_SPACE_RE, '+')\r\n .replace(HASH_RE, '%23')\r\n .replace(AMPERSAND_RE, '%26')\r\n .replace(ENC_BACKTICK_RE, '`')\r\n .replace(ENC_CURLY_OPEN_RE, '{')\r\n .replace(ENC_CURLY_CLOSE_RE, '}')\r\n .replace(ENC_CARET_RE, '^'));\r\n}\r\n/**\r\n * Like `encodeQueryValue` but also encodes the `=` character.\r\n *\r\n * @param text - string to encode\r\n */\r\nfunction encodeQueryKey(text) {\r\n return encodeQueryValue(text).replace(EQUAL_RE, '%3D');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodePath(text) {\r\n return commonEncode(text).replace(HASH_RE, '%23').replace(IM_RE, '%3F');\r\n}\r\n/**\r\n * Encode characters that need to be encoded on the path section of the URL as a\r\n * param. This function encodes everything {@link encodePath} does plus the\r\n * slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\r\n * string instead.\r\n *\r\n * @param text - string to encode\r\n * @returns encoded string\r\n */\r\nfunction encodeParam(text) {\r\n return text == null ? '' : encodePath(text).replace(SLASH_RE, '%2F');\r\n}\r\n/**\r\n * Decode text using `decodeURIComponent`. Returns the original text if it\r\n * fails.\r\n *\r\n * @param text - string to decode\r\n * @returns decoded string\r\n */\r\nfunction decode(text) {\r\n try {\r\n return decodeURIComponent('' + text);\r\n }\r\n catch (err) {\r\n (process.env.NODE_ENV !== 'production') && warn(`Error decoding \"${text}\". Using original value`);\r\n }\r\n return '' + text;\r\n}\n\n/**\r\n * Transforms a queryString into a {@link LocationQuery} object. Accept both, a\r\n * version with the leading `?` and without Should work as URLSearchParams\r\n\n * @internal\r\n *\r\n * @param search - search string to parse\r\n * @returns a query object\r\n */\r\nfunction parseQuery(search) {\r\n const query = {};\r\n // avoid creating an object with an empty key and empty value\r\n // because of split('&')\r\n if (search === '' || search === '?')\r\n return query;\r\n const hasLeadingIM = search[0] === '?';\r\n const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&');\r\n for (let i = 0; i < searchParams.length; ++i) {\r\n // pre decode the + into space\r\n const searchParam = searchParams[i].replace(PLUS_RE, ' ');\r\n // allow the = character\r\n const eqPos = searchParam.indexOf('=');\r\n const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\r\n const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\r\n if (key in query) {\r\n // an extra variable for ts types\r\n let currentValue = query[key];\r\n if (!isArray(currentValue)) {\r\n currentValue = query[key] = [currentValue];\r\n }\r\n currentValue.push(value);\r\n }\r\n else {\r\n query[key] = value;\r\n }\r\n }\r\n return query;\r\n}\r\n/**\r\n * Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\r\n * doesn't prepend a `?`\r\n *\r\n * @internal\r\n *\r\n * @param query - query object to stringify\r\n * @returns string version of the query without the leading `?`\r\n */\r\nfunction stringifyQuery(query) {\r\n let search = '';\r\n for (let key in query) {\r\n const value = query[key];\r\n key = encodeQueryKey(key);\r\n if (value == null) {\r\n // only null adds the value\r\n if (value !== undefined) {\r\n search += (search.length ? '&' : '') + key;\r\n }\r\n continue;\r\n }\r\n // keep null values\r\n const values = isArray(value)\r\n ? value.map(v => v && encodeQueryValue(v))\r\n : [value && encodeQueryValue(value)];\r\n values.forEach(value => {\r\n // skip undefined values in arrays as if they were not present\r\n // smaller code than using filter\r\n if (value !== undefined) {\r\n // only append & with non-empty search\r\n search += (search.length ? '&' : '') + key;\r\n if (value != null)\r\n search += '=' + value;\r\n }\r\n });\r\n }\r\n return search;\r\n}\r\n/**\r\n * Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\r\n * numbers into strings, removing keys with an undefined value and replacing\r\n * undefined with null in arrays\r\n *\r\n * @param query - query object to normalize\r\n * @returns a normalized query object\r\n */\r\nfunction normalizeQuery(query) {\r\n const normalizedQuery = {};\r\n for (const key in query) {\r\n const value = query[key];\r\n if (value !== undefined) {\r\n normalizedQuery[key] = isArray(value)\r\n ? value.map(v => (v == null ? null : '' + v))\r\n : value == null\r\n ? value\r\n : '' + value;\r\n }\r\n }\r\n return normalizedQuery;\r\n}\n\n/**\r\n * RouteRecord being rendered by the closest ancestor Router View. Used for\r\n * `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View\r\n * Location Matched\r\n *\r\n * @internal\r\n */\r\nconst matchedRouteKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view location matched' : '');\r\n/**\r\n * Allows overriding the router view depth to control which component in\r\n * `matched` is rendered. rvd stands for Router View Depth\r\n *\r\n * @internal\r\n */\r\nconst viewDepthKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view depth' : '');\r\n/**\r\n * Allows overriding the router instance returned by `useRouter` in tests. r\r\n * stands for router\r\n *\r\n * @internal\r\n */\r\nconst routerKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router' : '');\r\n/**\r\n * Allows overriding the current route returned by `useRoute` in tests. rl\r\n * stands for route location\r\n *\r\n * @internal\r\n */\r\nconst routeLocationKey = Symbol((process.env.NODE_ENV !== 'production') ? 'route location' : '');\r\n/**\r\n * Allows overriding the current route used by router-view. Internally this is\r\n * used when the `route` prop is passed.\r\n *\r\n * @internal\r\n */\r\nconst routerViewLocationKey = Symbol((process.env.NODE_ENV !== 'production') ? 'router view location' : '');\n\n/**\r\n * Create a list of callbacks that can be reset. Used to create before and after navigation guards list\r\n */\r\nfunction useCallbacks() {\r\n let handlers = [];\r\n function add(handler) {\r\n handlers.push(handler);\r\n return () => {\r\n const i = handlers.indexOf(handler);\r\n if (i > -1)\r\n handlers.splice(i, 1);\r\n };\r\n }\r\n function reset() {\r\n handlers = [];\r\n }\r\n return {\r\n add,\r\n list: () => handlers,\r\n reset,\r\n };\r\n}\n\nfunction registerGuard(record, name, guard) {\r\n const removeFromList = () => {\r\n record[name].delete(guard);\r\n };\r\n onUnmounted(removeFromList);\r\n onDeactivated(removeFromList);\r\n onActivated(() => {\r\n record[name].add(guard);\r\n });\r\n record[name].add(guard);\r\n}\r\n/**\r\n * Add a navigation guard that triggers whenever the component for the current\r\n * location is about to be left. Similar to {@link beforeRouteLeave} but can be\r\n * used in any component. The guard is removed when the component is unmounted.\r\n *\r\n * @param leaveGuard - {@link NavigationGuard}\r\n */\r\nfunction onBeforeRouteLeave(leaveGuard) {\r\n if ((process.env.NODE_ENV !== 'production') && !getCurrentInstance()) {\r\n warn('getCurrentInstance() returned null. onBeforeRouteLeave() must be called at the top of a setup function');\r\n return;\r\n }\r\n const activeRecord = inject(matchedRouteKey, \r\n // to avoid warning\r\n {}).value;\r\n if (!activeRecord) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn('No active route record was found when calling `onBeforeRouteLeave()`. Make sure you call this function inside a component child of <router-view>. Maybe you called it inside of App.vue?');\r\n return;\r\n }\r\n registerGuard(activeRecord, 'leaveGuards', leaveGuard);\r\n}\r\n/**\r\n * Add a navigation guard that triggers whenever the current location is about\r\n * to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\r\n * component. The guard is removed when the component is unmounted.\r\n *\r\n * @param updateGuard - {@link NavigationGuard}\r\n */\r\nfunction onBeforeRouteUpdate(updateGuard) {\r\n if ((process.env.NODE_ENV !== 'production') && !getCurrentInstance()) {\r\n warn('getCurrentInstance() returned null. onBeforeRouteUpdate() must be called at the top of a setup function');\r\n return;\r\n }\r\n const activeRecord = inject(matchedRouteKey, \r\n // to avoid warning\r\n {}).value;\r\n if (!activeRecord) {\r\n (process.env.NODE_ENV !== 'production') &&\r\n warn('No active route record was found when calling `onBeforeRouteUpdate()`. Make sure you call this function inside a component child of <router-view>. Maybe you called it inside of App.vue?');\r\n return;\r\n }\r\n registerGuard(activeRecord, 'updateGuards', updateGuard);\r\n}\r\nfunction guardToPromiseFn(guard, to, from, record, name) {\r\n // keep a reference to the enterCallbackArray to prevent pushing callbacks if a new navigation took place\r\n const enterCallbackArray = record &&\r\n // name is defined if record is because of the function overload\r\n (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\r\n return () => new Promise((resolve, reject) => {\r\n const next = (valid) => {\r\n if (valid === false) {\r\n reject(createRouterError(4 /* ErrorTypes.NAVIGATION_ABORTED */, {\r\n from,\r\n to,\r\n }));\r\n }\r\n else if (valid instanceof Error) {\r\n reject(valid);\r\n }\r\n else if (isRouteLocation(valid)) {\r\n reject(createRouterError(2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */, {\r\n from: to,\r\n to: valid,\r\n }));\r\n }\r\n else {\r\n if (enterCallbackArray &&\r\n // since enterCallbackArray is truthy, both record and name also are\r\n record.enterCallbacks[name] === enterCallbackArray &&\r\n typeof valid === 'function') {\r\n enterCallbackArray.push(valid);\r\n }\r\n resolve();\r\n }\r\n };\r\n // wrapping with Promise.resolve allows it to work with both async and sync guards\r\n const guardReturn = guard.call(record && record.instances[name], to, from, (process.env.NODE_ENV !== 'production') ? canOnlyBeCalledOnce(next, to, from) : next);\r\n let guardCall = Promise.resolve(guardReturn);\r\n if (guard.length < 3)\r\n guardCall = guardCall.then(next);\r\n if ((process.env.NODE_ENV !== 'production') && guard.length > 2) {\r\n const message = `The \"next\" callback was never called inside of ${guard.name ? '\"' + guard.name + '\"' : ''}:\\n${guard.toString()}\\n. If you are returning a value instead of calling \"next\", make sure to remove the \"next\" parameter from your function.`;\r\n if (typeof guardReturn === 'object' && 'then' in guardReturn) {\r\n guardCall = guardCall.then(resolvedValue => {\r\n // @ts-expect-error: _called is added at canOnlyBeCalledOnce\r\n if (!next._called) {\r\n warn(message);\r\n return Promise.reject(new Error('Invalid navigation guard'));\r\n }\r\n return resolvedValue;\r\n });\r\n }\r\n else if (guardReturn !== undefined) {\r\n // @ts-expect-error: _called is added at canOnlyBeCalledOnce\r\n if (!next._called) {\r\n warn(message);\r\n reject(new Error('Invalid navigation guard'));\r\n return;\r\n }\r\n }\r\n }\r\n guardCall.catch(err => reject(err));\r\n });\r\n}\r\nfunction canOnlyBeCalledOnce(next, to, from) {\r\n let called = 0;\r\n return function () {\r\n if (called++ === 1)\r\n warn(`The \"next\" callback was called more than once in one navigation guard when going from \"${from.fullPath}\" to \"${to.fullPath}\". It should be called exactly one time in each navigation guard. This will fail in production.`);\r\n // @ts-expect-error: we put it in the original one because it's easier to check\r\n next._called = true;\r\n if (called === 1)\r\n next.apply(null, arguments);\r\n };\r\n}\r\nfunction extractComponentsGuards(matched, guardType, to, from) {\r\n const guards = [];\r\n for (const record of matched) {\r\n if ((process.env.NODE_ENV !== 'production') && !record.components && !record.children.length) {\r\n warn(`Record with path \"${record.path}\" is either missing a \"component(s)\"` +\r\n ` or \"children\" property.`);\r\n }\r\n for (const name in record.components) {\r\n let rawComponent = record.components[name];\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (!rawComponent ||\r\n (typeof rawComponent !== 'object' &&\r\n typeof rawComponent !== 'function')) {\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is not` +\r\n ` a valid component. Received \"${String(rawComponent)}\".`);\r\n // throw to ensure we stop here but warn to ensure the message isn't\r\n // missed by the user\r\n throw new Error('Invalid route component');\r\n }\r\n else if ('then' in rawComponent) {\r\n // warn if user wrote import('/component.vue') instead of () =>\r\n // import('./component.vue')\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is a ` +\r\n `Promise instead of a function that returns a Promise. Did you ` +\r\n `write \"import('./MyPage.vue')\" instead of ` +\r\n `\"() => import('./MyPage.vue')\" ? This will break in ` +\r\n `production if not fixed.`);\r\n const promise = rawComponent;\r\n rawComponent = () => promise;\r\n }\r\n else if (rawComponent.__asyncLoader &&\r\n // warn only once per component\r\n !rawComponent.__warnedDefineAsync) {\r\n rawComponent.__warnedDefineAsync = true;\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is defined ` +\r\n `using \"defineAsyncComponent()\". ` +\r\n `Write \"() => import('./MyPage.vue')\" instead of ` +\r\n `\"defineAsyncComponent(() => import('./MyPage.vue'))\".`);\r\n }\r\n }\r\n // skip update and leave guards if the route component is not mounted\r\n if (guardType !== 'beforeRouteEnter' && !record.instances[name])\r\n continue;\r\n if (isRouteComponent(rawComponent)) {\r\n // __vccOpts is added by vue-class-component and contain the regular options\r\n const options = rawComponent.__vccOpts || rawComponent;\r\n const guard = options[guardType];\r\n guard && guards.push(guardToPromiseFn(guard, to, from, record, name));\r\n }\r\n else {\r\n // start requesting the chunk already\r\n let componentPromise = rawComponent();\r\n if ((process.env.NODE_ENV !== 'production') && !('catch' in componentPromise)) {\r\n warn(`Component \"${name}\" in record with path \"${record.path}\" is a function that does not return a Promise. If you were passing a functional component, make sure to add a \"displayName\" to the component. This will break in production if not fixed.`);\r\n componentPromise = Promise.resolve(componentPromise);\r\n }\r\n guards.push(() => componentPromise.then(resolved => {\r\n if (!resolved)\r\n return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`));\r\n const resolvedComponent = isESModule(resolved)\r\n ? resolved.default\r\n : resolved;\r\n // replace the function with the resolved component\r\n // cannot be null or undefined because we went into the for loop\r\n record.components[name] = resolvedComponent;\r\n // __vccOpts is added by vue-class-component and contain the regular options\r\n const options = resolvedComponent.__vccOpts || resolvedComponent;\r\n const guard = options[guardType];\r\n return guard && guardToPromiseFn(guard, to, from, record, name)();\r\n }));\r\n }\r\n }\r\n }\r\n return guards;\r\n}\r\n/**\r\n * Allows differentiating lazy components from functional components and vue-class-component\r\n * @internal\r\n *\r\n * @param component\r\n */\r\nfunction isRouteComponent(component) {\r\n return (typeof component === 'object' ||\r\n 'displayName' in component ||\r\n 'props' in component ||\r\n '__vccOpts' in component);\r\n}\r\n/**\r\n * Ensures a route is loaded, so it can be passed as o prop to `<RouterView>`.\r\n *\r\n * @param route - resolved route to load\r\n */\r\nfunction loadRouteLocation(route) {\r\n return route.matched.every(record => record.redirect)\r\n ? Promise.reject(new Error('Cannot load a route that redirects.'))\r\n : Promise.all(route.matched.map(record => record.components &&\r\n Promise.all(Object.keys(record.components).reduce((promises, name) => {\r\n const rawComponent = record.components[name];\r\n if (typeof rawComponent === 'function' &&\r\n !('displayName' in rawComponent)) {\r\n promises.push(rawComponent().then(resolved => {\r\n if (!resolved)\r\n return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\". Ensure you passed a function that returns a promise.`));\r\n const resolvedComponent = isESModule(resolved)\r\n ? resolved.default\r\n : resolved;\r\n // replace the function with the resolved component\r\n // cannot be null or undefined because we went into the for loop\r\n record.components[name] = resolvedComponent;\r\n return;\r\n }));\r\n }\r\n return promises;\r\n }, [])))).then(() => route);\r\n}\n\n// TODO: we could allow currentRoute as a prop to expose `isActive` and\r\n// `isExactActive` behavior should go through an RFC\r\nfunction useLink(props) {\r\n const router = inject(routerKey);\r\n const currentRoute = inject(routeLocationKey);\r\n const route = computed(() => router.resolve(unref(props.to)));\r\n const activeRecordIndex = computed(() => {\r\n const { matched } = route.value;\r\n const { length } = matched;\r\n const routeMatched = matched[length - 1];\r\n const currentMatched = currentRoute.matched;\r\n if (!routeMatched || !currentMatched.length)\r\n return -1;\r\n const index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\r\n if (index > -1)\r\n return index;\r\n // possible parent record\r\n const parentRecordPath = getOriginalPath(matched[length - 2]);\r\n return (\r\n // we are dealing with nested routes\r\n length > 1 &&\r\n // if the parent and matched route have the same path, this link is\r\n // referring to the empty child. Or we currently are on a different\r\n // child of the same parent\r\n getOriginalPath(routeMatched) === parentRecordPath &&\r\n // avoid comparing the child with its parent\r\n currentMatched[currentMatched.length - 1].path !== parentRecordPath\r\n ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2]))\r\n : index);\r\n });\r\n const isActive = computed(() => activeRecordIndex.value > -1 &&\r\n includesParams(currentRoute.params, route.value.params));\r\n const isExactActive = computed(() => activeRecordIndex.value > -1 &&\r\n activeRecordIndex.value === currentRoute.matched.length - 1 &&\r\n isSameRouteLocationParams(currentRoute.params, route.value.params));\r\n function navigate(e = {}) {\r\n if (guardEvent(e)) {\r\n return router[unref(props.replace) ? 'replace' : 'push'](unref(props.to)\r\n // avoid uncaught errors are they are logged anyway\r\n ).catch(noop);\r\n }\r\n return Promise.resolve();\r\n }\r\n // devtools only\r\n if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && isBrowser) {\r\n const instance = getCurrentInstance();\r\n if (instance) {\r\n const linkContextDevtools = {\r\n route: route.value,\r\n isActive: isActive.value,\r\n isExactActive: isExactActive.value,\r\n };\r\n // @ts-expect-error: this is internal\r\n instance.__vrl_devtools = instance.__vrl_devtools || [];\r\n // @ts-expect-error: this is internal\r\n instance.__vrl_devtools.push(linkContextDevtools);\r\n watchEffect(() => {\r\n linkContextDevtools.route = route.value;\r\n linkContextDevtools.isActive = isActive.value;\r\n linkContextDevtools.isExactActive = isExactActive.value;\r\n }, { flush: 'post' });\r\n }\r\n }\r\n /**\r\n * NOTE: update {@link _RouterLinkI}'s `$slots` type when updating this\r\n */\r\n return {\r\n route,\r\n href: computed(() => route.value.href),\r\n isActive,\r\n isExactActive,\r\n navigate,\r\n };\r\n}\r\nconst RouterLinkImpl = /*#__PURE__*/ defineComponent({\r\n name: 'RouterLink',\r\n compatConfig: { MODE: 3 },\r\n props: {\r\n to: {\r\n type: [String, Object],\r\n required: true,\r\n },\r\n replace: Boolean,\r\n activeClass: String,\r\n // inactiveClass: String,\r\n exactActiveClass: String,\r\n custom: Boolean,\r\n ariaCurrentValue: {\r\n type: String,\r\n default: 'page',\r\n },\r\n },\r\n useLink,\r\n setup(props, { slots }) {\r\n const link = reactive(useLink(props));\r\n const { options } = inject(routerKey);\r\n const elClass = computed(() => ({\r\n [getLinkClass(props.activeClass, options.linkActiveClass, 'router-link-active')]: link.isActive,\r\n // [getLinkClass(\r\n // props.inactiveClass,\r\n // options.linkInactiveClass,\r\n // 'router-link-inactive'\r\n // )]: !link.isExactActive,\r\n [getLinkClass(props.exactActiveClass, options.linkExactActiveClass, 'router-link-exact-active')]: link.isExactActive,\r\n }));\r\n return () => {\r\n const children = slots.default && slots.default(link);\r\n return props.custom\r\n ? children\r\n : h('a', {\r\n 'aria-current': link.isExactActive\r\n ? props.ariaCurrentValue\r\n : null,\r\n href: link.href,\r\n // this would override user added attrs but Vue will still add\r\n // the listener, so we end up triggering both\r\n onClick: link.navigate,\r\n class: elClass.value,\r\n }, children);\r\n };\r\n },\r\n});\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\n/**\r\n * Component to render a link that triggers a navigation on click.\r\n */\r\nconst RouterLink = RouterLinkImpl;\r\nfunction guardEvent(e) {\r\n // don't redirect with control keys\r\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\r\n return;\r\n // don't redirect when preventDefault called\r\n if (e.defaultPrevented)\r\n return;\r\n // don't redirect on right click\r\n if (e.button !== undefined && e.button !== 0)\r\n return;\r\n // don't redirect if `target=\"_blank\"`\r\n // @ts-expect-error getAttribute does exist\r\n if (e.currentTarget && e.currentTarget.getAttribute) {\r\n // @ts-expect-error getAttribute exists\r\n const target = e.currentTarget.getAttribute('target');\r\n if (/\\b_blank\\b/i.test(target))\r\n return;\r\n }\r\n // this may be a Weex event which doesn't have this method\r\n if (e.preventDefault)\r\n e.preventDefault();\r\n return true;\r\n}\r\nfunction includesParams(outer, inner) {\r\n for (const key in inner) {\r\n const innerValue = inner[key];\r\n const outerValue = outer[key];\r\n if (typeof innerValue === 'string') {\r\n if (innerValue !== outerValue)\r\n return false;\r\n }\r\n else {\r\n if (!isArray(outerValue) ||\r\n outerValue.length !== innerValue.length ||\r\n innerValue.some((value, i) => value !== outerValue[i]))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * Get the original path value of a record by following its aliasOf\r\n * @param record\r\n */\r\nfunction getOriginalPath(record) {\r\n return record ? (record.aliasOf ? record.aliasOf.path : record.path) : '';\r\n}\r\n/**\r\n * Utility class to get the active class based on defaults.\r\n * @param propClass\r\n * @param globalClass\r\n * @param defaultClass\r\n */\r\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null\r\n ? propClass\r\n : globalClass != null\r\n ? globalClass\r\n : defaultClass;\n\nconst RouterViewImpl = /*#__PURE__*/ defineComponent({\r\n name: 'RouterView',\r\n // #674 we manually inherit them\r\n inheritAttrs: false,\r\n props: {\r\n name: {\r\n type: String,\r\n default: 'default',\r\n },\r\n route: Object,\r\n },\r\n // Better compat for @vue/compat users\r\n // https://github.com/vuejs/router/issues/1315\r\n compatConfig: { MODE: 3 },\r\n setup(props, { attrs, slots }) {\r\n (process.env.NODE_ENV !== 'production') && warnDeprecatedUsage();\r\n const injectedRoute = inject(routerViewLocationKey);\r\n const routeToDisplay = computed(() => props.route || injectedRoute.value);\r\n const injectedDepth = inject(viewDepthKey, 0);\r\n // The depth changes based on empty components option, which allows passthrough routes e.g. routes with children\r\n // that are used to reuse the `path` property\r\n const depth = computed(() => {\r\n let initialDepth = unref(injectedDepth);\r\n const { matched } = routeToDisplay.value;\r\n let matchedRoute;\r\n while ((matchedRoute = matched[initialDepth]) &&\r\n !matchedRoute.components) {\r\n initialDepth++;\r\n }\r\n return initialDepth;\r\n });\r\n const matchedRouteRef = computed(() => routeToDisplay.value.matched[depth.value]);\r\n provide(viewDepthKey, computed(() => depth.value + 1));\r\n provide(matchedRouteKey, matchedRouteRef);\r\n provide(routerViewLocationKey, routeToDisplay);\r\n const viewRef = ref();\r\n // watch at the same time the component instance, the route record we are\r\n // rendering, and the name\r\n watch(() => [viewRef.value, matchedRouteRef.value, props.name], ([instance, to, name], [oldInstance, from, oldName]) => {\r\n // copy reused instances\r\n if (to) {\r\n // this will update the instance for new instances as well as reused\r\n // instances when navigating to a new route\r\n to.instances[name] = instance;\r\n // the component instance is reused for a different route or name, so\r\n // we copy any saved update or leave guards. With async setup, the\r\n // mounting component will mount before the matchedRoute changes,\r\n // making instance === oldInstance, so we check if guards have been\r\n // added before. This works because we remove guards when\r\n // unmounting/deactivating components\r\n if (from && from !== to && instance && instance === oldInstance) {\r\n if (!to.leaveGuards.size) {\r\n to.leaveGuards = from.leaveGuards;\r\n }\r\n if (!to.updateGuards.size) {\r\n to.updateGuards = from.updateGuards;\r\n }\r\n }\r\n }\r\n // trigger beforeRouteEnter next callbacks\r\n if (instance &&\r\n to &&\r\n // if there is no instance but to and from are the same this might be\r\n // the first visit\r\n (!from || !isSameRouteRecord(to, from) || !oldInstance)) {\r\n (to.enterCallbacks[name] || []).forEach(callback => callback(instance));\r\n }\r\n }, { flush: 'post' });\r\n return () => {\r\n const route = routeToDisplay.value;\r\n // we need the value at the time we render because when we unmount, we\r\n // navigated to a different location so the value is different\r\n const currentName = props.name;\r\n const matchedRoute = matchedRouteRef.value;\r\n const ViewComponent = matchedRoute && matchedRoute.components[currentName];\r\n if (!ViewComponent) {\r\n return normalizeSlot(slots.default, { Component: ViewComponent, route });\r\n }\r\n // props from route configuration\r\n const routePropsOption = matchedRoute.props[currentName];\r\n const routeProps = routePropsOption\r\n ? routePropsOption === true\r\n ? route.params\r\n : typeof routePropsOption === 'function'\r\n ? routePropsOption(route)\r\n : routePropsOption\r\n : null;\r\n const onVnodeUnmounted = vnode => {\r\n // remove the instance reference to prevent leak\r\n if (vnode.component.isUnmounted) {\r\n matchedRoute.instances[currentName] = null;\r\n }\r\n };\r\n const component = h(ViewComponent, assign({}, routeProps, attrs, {\r\n onVnodeUnmounted,\r\n ref: viewRef,\r\n }));\r\n if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) &&\r\n isBrowser &&\r\n component.ref) {\r\n // TODO: can display if it's an alias, its props\r\n const info = {\r\n depth: depth.value,\r\n name: matchedRoute.name,\r\n path: matchedRoute.path,\r\n meta: matchedRoute.meta,\r\n };\r\n const internalInstances = isArray(component.ref)\r\n ? component.ref.map(r => r.i)\r\n : [component.ref.i];\r\n internalInstances.forEach(instance => {\r\n // @ts-expect-error\r\n instance.__vrv_devtools = info;\r\n });\r\n }\r\n return (\r\n // pass the vnode to the slot as a prop.\r\n // h and <component :is=\"...\"> both accept vnodes\r\n normalizeSlot(slots.default, { Component: component, route }) ||\r\n component);\r\n };\r\n },\r\n});\r\nfunction normalizeSlot(slot, data) {\r\n if (!slot)\r\n return null;\r\n const slotContent = slot(data);\r\n return slotContent.length === 1 ? slotContent[0] : slotContent;\r\n}\r\n// export the public type for h/tsx inference\r\n// also to avoid inline import() in generated d.ts files\r\n/**\r\n * Component to display the current route the user is at.\r\n */\r\nconst RouterView = RouterViewImpl;\r\n// warn against deprecated usage with <transition> & <keep-alive>\r\n// due to functional component being no longer eager in Vue 3\r\nfunction warnDeprecatedUsage() {\r\n const instance = getCurrentInstance();\r\n const parentName = instance.parent && instance.parent.type.name;\r\n if (parentName &&\r\n (parentName === 'KeepAlive' || parentName.includes('Transition'))) {\r\n const comp = parentName === 'KeepAlive' ? 'keep-alive' : 'transition';\r\n warn(`<router-view> can no longer be used directly inside <transition> or <keep-alive>.\\n` +\r\n `Use slot props instead:\\n\\n` +\r\n `<router-view v-slot=\"{ Component }\">\\n` +\r\n ` <${comp}>\\n` +\r\n ` <component :is=\"Component\" />\\n` +\r\n ` </${comp}>\\n` +\r\n `</router-view>`);\r\n }\r\n}\n\n/**\r\n * Copies a route location and removes any problematic properties that cannot be shown in devtools (e.g. Vue instances).\r\n *\r\n * @param routeLocation - routeLocation to format\r\n * @param tooltip - optional tooltip\r\n * @returns a copy of the routeLocation\r\n */\r\nfunction formatRouteLocation(routeLocation, tooltip) {\r\n const copy = assign({}, routeLocation, {\r\n // remove variables that can contain vue instances\r\n matched: routeLocation.matched.map(matched => omit(matched, ['instances', 'children', 'aliasOf'])),\r\n });\r\n return {\r\n _custom: {\r\n type: null,\r\n readOnly: true,\r\n display: routeLocation.fullPath,\r\n tooltip,\r\n value: copy,\r\n },\r\n };\r\n}\r\nfunction formatDisplay(display) {\r\n return {\r\n _custom: {\r\n display,\r\n },\r\n };\r\n}\r\n// to support multiple router instances\r\nlet routerId = 0;\r\nfunction addDevtools(app, router, matcher) {\r\n // Take over router.beforeEach and afterEach\r\n // make sure we are not registering the devtool twice\r\n if (router.__hasDevtools)\r\n return;\r\n router.__hasDevtools = true;\r\n // increment to support multiple router instances\r\n const id = routerId++;\r\n setupDevtoolsPlugin({\r\n id: 'org.vuejs.router' + (id ? '.' + id : ''),\r\n label: 'Vue Router',\r\n packageName: 'vue-router',\r\n homepage: 'https://router.vuejs.org',\r\n logo: 'https://router.vuejs.org/logo.png',\r\n componentStateTypes: ['Routing'],\r\n app,\r\n }, api => {\r\n if (typeof api.now !== 'function') {\r\n console.warn('[Vue Router]: You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.');\r\n }\r\n // display state added by the router\r\n api.on.inspectComponent((payload, ctx) => {\r\n if (payload.instanceData) {\r\n payload.instanceData.state.push({\r\n type: 'Routing',\r\n key: '$route',\r\n editable: false,\r\n value: formatRouteLocation(router.currentRoute.value, 'Current Route'),\r\n });\r\n }\r\n });\r\n // mark router-link as active and display tags on router views\r\n api.on.visitComponentTree(({ treeNode: node, componentInstance }) => {\r\n if (componentInstance.__vrv_devtools) {\r\n const info = componentInstance.__vrv_devtools;\r\n node.tags.push({\r\n label: (info.name ? `${info.name.toString()}: ` : '') + info.path,\r\n textColor: 0,\r\n tooltip: 'This component is rendered by <router-view>',\r\n backgroundColor: PINK_500,\r\n });\r\n }\r\n // if multiple useLink are used\r\n if (isArray(componentInstance.__vrl_devtools)) {\r\n componentInstance.__devtoolsApi = api;\r\n componentInstance.__vrl_devtools.forEach(devtoolsData => {\r\n let backgroundColor = ORANGE_400;\r\n let tooltip = '';\r\n if (devtoolsData.isExactActive) {\r\n backgroundColor = LIME_500;\r\n tooltip = 'This is exactly active';\r\n }\r\n else if (devtoolsData.isActive) {\r\n backgroundColor = BLUE_600;\r\n tooltip = 'This link is active';\r\n }\r\n node.tags.push({\r\n label: devtoolsData.route.path,\r\n textColor: 0,\r\n tooltip,\r\n backgroundColor,\r\n });\r\n });\r\n }\r\n });\r\n watch(router.currentRoute, () => {\r\n // refresh active state\r\n refreshRoutesView();\r\n api.notifyComponentUpdate();\r\n api.sendInspectorTree(routerInspectorId);\r\n api.sendInspectorState(routerInspectorId);\r\n });\r\n const navigationsLayerId = 'router:navigations:' + id;\r\n api.addTimelineLayer({\r\n id: navigationsLayerId,\r\n label: `Router${id ? ' ' + id : ''} Navigations`,\r\n color: 0x40a8c4,\r\n });\r\n // const errorsLayerId = 'router:errors'\r\n // api.addTimelineLayer({\r\n // id: errorsLayerId,\r\n // label: 'Router Errors',\r\n // color: 0xea5455,\r\n // })\r\n router.onError((error, to) => {\r\n api.addTimelineEvent({\r\n layerId: navigationsLayerId,\r\n event: {\r\n title: 'Error during Navigation',\r\n subtitle: to.fullPath,\r\n logType: 'error',\r\n time: api.now(),\r\n data: { error },\r\n groupId: to.meta.__navigationId,\r\n },\r\n });\r\n });\r\n // attached to `meta` and used to group events\r\n let navigationId = 0;\r\n router.beforeEach((to, from) => {\r\n const data = {\r\n guard: formatDisplay('beforeEach'),\r\n from: formatRouteLocation(from, 'Current Location during this navigation'),\r\n to: formatRouteLocation(to, 'Target location'),\r\n };\r\n // Used to group navigations together, hide from devtools\r\n Object.defineProperty(to.meta, '__navigationId', {\r\n value: navigationId++,\r\n });\r\n api.addTimelineEvent({\r\n layerId: navigationsLayerId,\r\n event: {\r\n time: api.now(),\r\n title: 'Start of navigation',\r\n subtitle: to.fullPath,\r\n data,\r\n groupId: to.meta.__navigationId,\r\n },\r\n });\r\n });\r\n router.afterEach((to, from, failure) => {\r\n const data = {\r\n guard: formatDisplay('afterEach'),\r\n };\r\n if (failure) {\r\n data.failure = {\r\n _custom: {\r\n type: Error,\r\n readOnly: true,\r\n display: failure ? failure.message : '',\r\n tooltip: 'Navigation Failure',\r\n value: failure,\r\n },\r\n };\r\n data.status = formatDisplay('âŒ');\r\n }\r\n else {\r\n data.status = formatDisplay('✅');\r\n }\r\n // we set here to have the right order\r\n data.from = formatRouteLocation(from, 'Current Location during this navigation');\r\n data.to = formatRouteLocation(to, 'Target location');\r\n api.addTimelineEvent({\r\n layerId: navigationsLayerId,\r\n event: {\r\n title: 'End of navigation',\r\n subtitle: to.fullPath,\r\n time: api.now(),\r\n data,\r\n logType: failure ? 'warning' : 'default',\r\n groupId: to.meta.__navigationId,\r\n },\r\n });\r\n });\r\n /**\r\n * Inspector of Existing routes\r\n */\r\n const routerInspectorId = 'router-inspector:' + id;\r\n api.addInspector({\r\n id: routerInspectorId,\r\n label: 'Routes' + (id ? ' ' + id : ''),\r\n icon: 'book',\r\n treeFilterPlaceholder: 'Search routes',\r\n });\r\n function refreshRoutesView() {\r\n // the routes view isn't active\r\n if (!activeRoutesPayload)\r\n return;\r\n const payload = activeRoutesPayload;\r\n // children routes will appear as nested\r\n let routes = matcher.getRoutes().filter(route => !route.parent);\r\n // reset match state to false\r\n routes.forEach(resetMatchStateOnRouteRecord);\r\n // apply a match state if there is a payload\r\n if (payload.filter) {\r\n routes = routes.filter(route => \r\n // save matches state based on the payload\r\n isRouteMatching(route, payload.filter.toLowerCase()));\r\n }\r\n // mark active routes\r\n routes.forEach(route => markRouteRecordActive(route, router.currentRoute.value));\r\n payload.rootNodes = routes.map(formatRouteRecordForInspector);\r\n }\r\n let activeRoutesPayload;\r\n api.on.getInspectorTree(payload => {\r\n activeRoutesPayload = payload;\r\n if (payload.app === app && payload.inspectorId === routerInspectorId) {\r\n refreshRoutesView();\r\n }\r\n });\r\n /**\r\n * Display information about the currently selected route record\r\n */\r\n api.on.getInspectorState(payload => {\r\n if (payload.app === app && payload.inspectorId === routerInspectorId) {\r\n const routes = matcher.getRoutes();\r\n const route = routes.find(route => route.record.__vd_id === payload.nodeId);\r\n if (route) {\r\n payload.state = {\r\n options: formatRouteRecordMatcherForStateInspector(route),\r\n };\r\n }\r\n }\r\n });\r\n api.sendInspectorTree(routerInspectorId);\r\n api.sendInspectorState(routerInspectorId);\r\n });\r\n}\r\nfunction modifierForKey(key) {\r\n if (key.optional) {\r\n return key.repeatable ? '*' : '?';\r\n }\r\n else {\r\n return key.repeatable ? '+' : '';\r\n }\r\n}\r\nfunction formatRouteRecordMatcherForStateInspector(route) {\r\n const { record } = route;\r\n const fields = [\r\n { editable: false, key: 'path', value: record.path },\r\n ];\r\n if (record.name != null) {\r\n fields.push({\r\n editable: false,\r\n key: 'name',\r\n value: record.name,\r\n });\r\n }\r\n fields.push({ editable: false, key: 'regexp', value: route.re });\r\n if (route.keys.length) {\r\n fields.push({\r\n editable: false,\r\n key: 'keys',\r\n value: {\r\n _custom: {\r\n type: null,\r\n readOnly: true,\r\n display: route.keys\r\n .map(key => `${key.name}${modifierForKey(key)}`)\r\n .join(' '),\r\n tooltip: 'Param keys',\r\n value: route.keys,\r\n },\r\n },\r\n });\r\n }\r\n if (record.redirect != null) {\r\n fields.push({\r\n editable: false,\r\n key: 'redirect',\r\n value: record.redirect,\r\n });\r\n }\r\n if (route.alias.length) {\r\n fields.push({\r\n editable: false,\r\n key: 'aliases',\r\n value: route.alias.map(alias => alias.record.path),\r\n });\r\n }\r\n if (Object.keys(route.record.meta).length) {\r\n fields.push({\r\n editable: false,\r\n key: 'meta',\r\n value: route.record.meta,\r\n });\r\n }\r\n fields.push({\r\n key: 'score',\r\n editable: false,\r\n value: {\r\n _custom: {\r\n type: null,\r\n readOnly: true,\r\n display: route.score.map(score => score.join(', ')).join(' | '),\r\n tooltip: 'Score used to sort routes',\r\n value: route.score,\r\n },\r\n },\r\n });\r\n return fields;\r\n}\r\n/**\r\n * Extracted from tailwind palette\r\n */\r\nconst PINK_500 = 0xec4899;\r\nconst BLUE_600 = 0x2563eb;\r\nconst LIME_500 = 0x84cc16;\r\nconst CYAN_400 = 0x22d3ee;\r\nconst ORANGE_400 = 0xfb923c;\r\n// const GRAY_100 = 0xf4f4f5\r\nconst DARK = 0x666666;\r\nfunction formatRouteRecordForInspector(route) {\r\n const tags = [];\r\n const { record } = route;\r\n if (record.name != null) {\r\n tags.push({\r\n label: String(record.name),\r\n textColor: 0,\r\n backgroundColor: CYAN_400,\r\n });\r\n }\r\n if (record.aliasOf) {\r\n tags.push({\r\n label: 'alias',\r\n textColor: 0,\r\n backgroundColor: ORANGE_400,\r\n });\r\n }\r\n if (route.__vd_match) {\r\n tags.push({\r\n label: 'matches',\r\n textColor: 0,\r\n backgroundColor: PINK_500,\r\n });\r\n }\r\n if (route.__vd_exactActive) {\r\n tags.push({\r\n label: 'exact',\r\n textColor: 0,\r\n backgroundColor: LIME_500,\r\n });\r\n }\r\n if (route.__vd_active) {\r\n tags.push({\r\n label: 'active',\r\n textColor: 0,\r\n backgroundColor: BLUE_600,\r\n });\r\n }\r\n if (record.redirect) {\r\n tags.push({\r\n label: typeof record.redirect === 'string'\r\n ? `redirect: ${record.redirect}`\r\n : 'redirects',\r\n textColor: 0xffffff,\r\n backgroundColor: DARK,\r\n });\r\n }\r\n // add an id to be able to select it. Using the `path` is not possible because\r\n // empty path children would collide with their parents\r\n let id = record.__vd_id;\r\n if (id == null) {\r\n id = String(routeRecordId++);\r\n record.__vd_id = id;\r\n }\r\n return {\r\n id,\r\n label: record.path,\r\n tags,\r\n children: route.children.map(formatRouteRecordForInspector),\r\n };\r\n}\r\n// incremental id for route records and inspector state\r\nlet routeRecordId = 0;\r\nconst EXTRACT_REGEXP_RE = /^\\/(.*)\\/([a-z]*)$/;\r\nfunction markRouteRecordActive(route, currentRoute) {\r\n // no route will be active if matched is empty\r\n // reset the matching state\r\n const isExactActive = currentRoute.matched.length &&\r\n isSameRouteRecord(currentRoute.matched[currentRoute.matched.length - 1], route.record);\r\n route.__vd_exactActive = route.__vd_active = isExactActive;\r\n if (!isExactActive) {\r\n route.__vd_active = currentRoute.matched.some(match => isSameRouteRecord(match, route.record));\r\n }\r\n route.children.forEach(childRoute => markRouteRecordActive(childRoute, currentRoute));\r\n}\r\nfunction resetMatchStateOnRouteRecord(route) {\r\n route.__vd_match = false;\r\n route.children.forEach(resetMatchStateOnRouteRecord);\r\n}\r\nfunction isRouteMatching(route, filter) {\r\n const found = String(route.re).match(EXTRACT_REGEXP_RE);\r\n route.__vd_match = false;\r\n if (!found || found.length < 3) {\r\n return false;\r\n }\r\n // use a regexp without $ at the end to match nested routes better\r\n const nonEndingRE = new RegExp(found[1].replace(/\\$$/, ''), found[2]);\r\n if (nonEndingRE.test(filter)) {\r\n // mark children as matches\r\n route.children.forEach(child => isRouteMatching(child, filter));\r\n // exception case: `/`\r\n if (route.record.path !== '/' || filter === '/') {\r\n route.__vd_match = route.re.test(filter);\r\n return true;\r\n }\r\n // hide the / route\r\n return false;\r\n }\r\n const path = route.record.path.toLowerCase();\r\n const decodedPath = decode(path);\r\n // also allow partial matching on the path\r\n if (!filter.startsWith('/') &&\r\n (decodedPath.includes(filter) || path.includes(filter)))\r\n return true;\r\n if (decodedPath.startsWith(filter) || path.startsWith(filter))\r\n return true;\r\n if (route.record.name && String(route.record.name).includes(filter))\r\n return true;\r\n return route.children.some(child => isRouteMatching(child, filter));\r\n}\r\nfunction omit(obj, keys) {\r\n const ret = {};\r\n for (const key in obj) {\r\n if (!keys.includes(key)) {\r\n // @ts-expect-error\r\n ret[key] = obj[key];\r\n }\r\n }\r\n return ret;\r\n}\n\n/**\r\n * Creates a Router instance that can be used by a Vue app.\r\n *\r\n * @param options - {@link RouterOptions}\r\n */\r\nfunction createRouter(options) {\r\n const matcher = createRouterMatcher(options.routes, options);\r\n const parseQuery$1 = options.parseQuery || parseQuery;\r\n const stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\r\n const routerHistory = options.history;\r\n if ((process.env.NODE_ENV !== 'production') && !routerHistory)\r\n throw new Error('Provide the \"history\" option when calling \"createRouter()\":' +\r\n ' https://next.router.vuejs.org/api/#history.');\r\n const beforeGuards = useCallbacks();\r\n const beforeResolveGuards = useCallbacks();\r\n const afterGuards = useCallbacks();\r\n const currentRoute = shallowRef(START_LOCATION_NORMALIZED);\r\n let pendingLocation = START_LOCATION_NORMALIZED;\r\n // leave the scrollRestoration if no scrollBehavior is provided\r\n if (isBrowser && options.scrollBehavior && 'scrollRestoration' in history) {\r\n history.scrollRestoration = 'manual';\r\n }\r\n const normalizeParams = applyToParams.bind(null, paramValue => '' + paramValue);\r\n const encodeParams = applyToParams.bind(null, encodeParam);\r\n const decodeParams = \r\n // @ts-expect-error: intentionally avoid the type check\r\n applyToParams.bind(null, decode);\r\n function addRoute(parentOrRoute, route) {\r\n let parent;\r\n let record;\r\n if (isRouteName(parentOrRoute)) {\r\n parent = matcher.getRecordMatcher(parentOrRoute);\r\n record = route;\r\n }\r\n else {\r\n record = parentOrRoute;\r\n }\r\n return matcher.addRoute(record, parent);\r\n }\r\n function removeRoute(name) {\r\n const recordMatcher = matcher.getRecordMatcher(name);\r\n if (recordMatcher) {\r\n matcher.removeRoute(recordMatcher);\r\n }\r\n else if ((process.env.NODE_ENV !== 'production')) {\r\n warn(`Cannot remove non-existent route \"${String(name)}\"`);\r\n }\r\n }\r\n function getRoutes() {\r\n return matcher.getRoutes().map(routeMatcher => routeMatcher.record);\r\n }\r\n function hasRoute(name) {\r\n return !!matcher.getRecordMatcher(name);\r\n }\r\n function resolve(rawLocation, currentLocation) {\r\n // const objectLocation = routerLocationAsObject(rawLocation)\r\n // we create a copy to modify it later\r\n currentLocation = assign({}, currentLocation || currentRoute.value);\r\n if (typeof rawLocation === 'string') {\r\n const locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\r\n const matchedRoute = matcher.resolve({ path: locationNormalized.path }, currentLocation);\r\n const href = routerHistory.createHref(locationNormalized.fullPath);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (href.startsWith('//'))\r\n warn(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\r\n else if (!matchedRoute.matched.length) {\r\n warn(`No match found for location with path \"${rawLocation}\"`);\r\n }\r\n }\r\n // locationNormalized is always a new object\r\n return assign(locationNormalized, matchedRoute, {\r\n params: decodeParams(matchedRoute.params),\r\n hash: decode(locationNormalized.hash),\r\n redirectedFrom: undefined,\r\n href,\r\n });\r\n }\r\n let matcherLocation;\r\n // path could be relative in object as well\r\n if ('path' in rawLocation) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n 'params' in rawLocation &&\r\n !('name' in rawLocation) &&\r\n // @ts-expect-error: the type is never\r\n Object.keys(rawLocation.params).length) {\r\n warn(`Path \"${\r\n // @ts-expect-error: the type is never\r\n rawLocation.path}\" was passed with params but they will be ignored. Use a named route alongside params instead.`);\r\n }\r\n matcherLocation = assign({}, rawLocation, {\r\n path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path,\r\n });\r\n }\r\n else {\r\n // remove any nullish param\r\n const targetParams = assign({}, rawLocation.params);\r\n for (const key in targetParams) {\r\n if (targetParams[key] == null) {\r\n delete targetParams[key];\r\n }\r\n }\r\n // pass encoded values to the matcher, so it can produce encoded path and fullPath\r\n matcherLocation = assign({}, rawLocation, {\r\n params: encodeParams(rawLocation.params),\r\n });\r\n // current location params are decoded, we need to encode them in case the\r\n // matcher merges the params\r\n currentLocation.params = encodeParams(currentLocation.params);\r\n }\r\n const matchedRoute = matcher.resolve(matcherLocation, currentLocation);\r\n const hash = rawLocation.hash || '';\r\n if ((process.env.NODE_ENV !== 'production') && hash && !hash.startsWith('#')) {\r\n warn(`A \\`hash\\` should always start with the character \"#\". Replace \"${hash}\" with \"#${hash}\".`);\r\n }\r\n // the matcher might have merged current location params, so\r\n // we need to run the decoding again\r\n matchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\r\n const fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\r\n hash: encodeHash(hash),\r\n path: matchedRoute.path,\r\n }));\r\n const href = routerHistory.createHref(fullPath);\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n if (href.startsWith('//')) {\r\n warn(`Location \"${rawLocation}\" resolved to \"${href}\". A resolved location cannot start with multiple slashes.`);\r\n }\r\n else if (!matchedRoute.matched.length) {\r\n warn(`No match found for location with path \"${'path' in rawLocation ? rawLocation.path : rawLocation}\"`);\r\n }\r\n }\r\n return assign({\r\n fullPath,\r\n // keep the hash encoded so fullPath is effectively path + encodedQuery +\r\n // hash\r\n hash,\r\n query: \r\n // if the user is using a custom query lib like qs, we might have\r\n // nested objects, so we keep the query as is, meaning it can contain\r\n // numbers at `$route.query`, but at the point, the user will have to\r\n // use their own type anyway.\r\n // https://github.com/vuejs/router/issues/328#issuecomment-649481567\r\n stringifyQuery$1 === stringifyQuery\r\n ? normalizeQuery(rawLocation.query)\r\n : (rawLocation.query || {}),\r\n }, matchedRoute, {\r\n redirectedFrom: undefined,\r\n href,\r\n });\r\n }\r\n function locationAsObject(to) {\r\n return typeof to === 'string'\r\n ? parseURL(parseQuery$1, to, currentRoute.value.path)\r\n : assign({}, to);\r\n }\r\n function checkCanceledNavigation(to, from) {\r\n if (pendingLocation !== to) {\r\n return createRouterError(8 /* ErrorTypes.NAVIGATION_CANCELLED */, {\r\n from,\r\n to,\r\n });\r\n }\r\n }\r\n function push(to) {\r\n return pushWithRedirect(to);\r\n }\r\n function replace(to) {\r\n return push(assign(locationAsObject(to), { replace: true }));\r\n }\r\n function handleRedirectRecord(to) {\r\n const lastMatched = to.matched[to.matched.length - 1];\r\n if (lastMatched && lastMatched.redirect) {\r\n const { redirect } = lastMatched;\r\n let newTargetLocation = typeof redirect === 'function' ? redirect(to) : redirect;\r\n if (typeof newTargetLocation === 'string') {\r\n newTargetLocation =\r\n newTargetLocation.includes('?') || newTargetLocation.includes('#')\r\n ? (newTargetLocation = locationAsObject(newTargetLocation))\r\n : // force empty params\r\n { path: newTargetLocation };\r\n // @ts-expect-error: force empty params when a string is passed to let\r\n // the router parse them again\r\n newTargetLocation.params = {};\r\n }\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n !('path' in newTargetLocation) &&\r\n !('name' in newTargetLocation)) {\r\n warn(`Invalid redirect found:\\n${JSON.stringify(newTargetLocation, null, 2)}\\n when navigating to \"${to.fullPath}\". A redirect must contain a name or path. This will break in production.`);\r\n throw new Error('Invalid redirect');\r\n }\r\n return assign({\r\n query: to.query,\r\n hash: to.hash,\r\n // avoid transferring params if the redirect has a path\r\n params: 'path' in newTargetLocation ? {} : to.params,\r\n }, newTargetLocation);\r\n }\r\n }\r\n function pushWithRedirect(to, redirectedFrom) {\r\n const targetLocation = (pendingLocation = resolve(to));\r\n const from = currentRoute.value;\r\n const data = to.state;\r\n const force = to.force;\r\n // to could be a string where `replace` is a function\r\n const replace = to.replace === true;\r\n const shouldRedirect = handleRedirectRecord(targetLocation);\r\n if (shouldRedirect)\r\n return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\r\n state: typeof shouldRedirect === 'object'\r\n ? assign({}, data, shouldRedirect.state)\r\n : data,\r\n force,\r\n replace,\r\n }), \r\n // keep original redirectedFrom if it exists\r\n redirectedFrom || targetLocation);\r\n // if it was a redirect we already called `pushWithRedirect` above\r\n const toLocation = targetLocation;\r\n toLocation.redirectedFrom = redirectedFrom;\r\n let failure;\r\n if (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\r\n failure = createRouterError(16 /* ErrorTypes.NAVIGATION_DUPLICATED */, { to: toLocation, from });\r\n // trigger scroll to allow scrolling to the same anchor\r\n handleScroll(from, from, \r\n // this is a push, the only way for it to be triggered from a\r\n // history.listen is with a redirect, which makes it become a push\r\n true, \r\n // This cannot be the first navigation because the initial location\r\n // cannot be manually navigated to\r\n false);\r\n }\r\n return (failure ? Promise.resolve(failure) : navigate(toLocation, from))\r\n .catch((error) => isNavigationFailure(error)\r\n ? // navigation redirects still mark the router as ready\r\n isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)\r\n ? error\r\n : markAsReady(error) // also returns the error\r\n : // reject any unknown error\r\n triggerError(error, toLocation, from))\r\n .then((failure) => {\r\n if (failure) {\r\n if (isNavigationFailure(failure, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\r\n if ((process.env.NODE_ENV !== 'production') &&\r\n // we are redirecting to the same location we were already at\r\n isSameRouteLocation(stringifyQuery$1, resolve(failure.to), toLocation) &&\r\n // and we have done it a couple of times\r\n redirectedFrom &&\r\n // @ts-expect-error: added only in dev\r\n (redirectedFrom._count = redirectedFrom._count\r\n ? // @ts-expect-error\r\n redirectedFrom._count + 1\r\n : 1) > 10) {\r\n warn(`Detected an infinite redirection in a navigation guard when going from \"${from.fullPath}\" to \"${toLocation.fullPath}\". Aborting to avoid a Stack Overflow. This will break in production if not fixed.`);\r\n return Promise.reject(new Error('Infinite redirect in navigation guard'));\r\n }\r\n return pushWithRedirect(\r\n // keep options\r\n assign({\r\n // preserve an existing replacement but allow the redirect to override it\r\n replace,\r\n }, locationAsObject(failure.to), {\r\n state: typeof failure.to === 'object'\r\n ? assign({}, data, failure.to.state)\r\n : data,\r\n force,\r\n }), \r\n // preserve the original redirectedFrom if any\r\n redirectedFrom || toLocation);\r\n }\r\n }\r\n else {\r\n // if we fail we don't finalize the navigation\r\n failure = finalizeNavigation(toLocation, from, true, replace, data);\r\n }\r\n triggerAfterEach(toLocation, from, failure);\r\n return failure;\r\n });\r\n }\r\n /**\r\n * Helper to reject and skip all navigation guards if a new navigation happened\r\n * @param to\r\n * @param from\r\n */\r\n function checkCanceledNavigationAndReject(to, from) {\r\n const error = checkCanceledNavigation(to, from);\r\n return error ? Promise.reject(error) : Promise.resolve();\r\n }\r\n // TODO: refactor the whole before guards by internally using router.beforeEach\r\n function navigate(to, from) {\r\n let guards;\r\n const [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\r\n // all components here have been resolved once because we are leaving\r\n guards = extractComponentsGuards(leavingRecords.reverse(), 'beforeRouteLeave', to, from);\r\n // leavingRecords is already reversed\r\n for (const record of leavingRecords) {\r\n record.leaveGuards.forEach(guard => {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n });\r\n }\r\n const canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeRouteLeave guards\r\n return (runGuardQueue(guards)\r\n .then(() => {\r\n // check global guards beforeEach\r\n guards = [];\r\n for (const guard of beforeGuards.list()) {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n }\r\n guards.push(canceledNavigationCheck);\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // check in components beforeRouteUpdate\r\n guards = extractComponentsGuards(updatingRecords, 'beforeRouteUpdate', to, from);\r\n for (const record of updatingRecords) {\r\n record.updateGuards.forEach(guard => {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n });\r\n }\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeEnter guards\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // check the route beforeEnter\r\n guards = [];\r\n for (const record of to.matched) {\r\n // do not trigger beforeEnter on reused views\r\n if (record.beforeEnter && !from.matched.includes(record)) {\r\n if (isArray(record.beforeEnter)) {\r\n for (const beforeEnter of record.beforeEnter)\r\n guards.push(guardToPromiseFn(beforeEnter, to, from));\r\n }\r\n else {\r\n guards.push(guardToPromiseFn(record.beforeEnter, to, from));\r\n }\r\n }\r\n }\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeEnter guards\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // NOTE: at this point to.matched is normalized and does not contain any () => Promise<Component>\r\n // clear existing enterCallbacks, these are added by extractComponentsGuards\r\n to.matched.forEach(record => (record.enterCallbacks = {}));\r\n // check in-component beforeRouteEnter\r\n guards = extractComponentsGuards(enteringRecords, 'beforeRouteEnter', to, from);\r\n guards.push(canceledNavigationCheck);\r\n // run the queue of per route beforeEnter guards\r\n return runGuardQueue(guards);\r\n })\r\n .then(() => {\r\n // check global guards beforeResolve\r\n guards = [];\r\n for (const guard of beforeResolveGuards.list()) {\r\n guards.push(guardToPromiseFn(guard, to, from));\r\n }\r\n guards.push(canceledNavigationCheck);\r\n return runGuardQueue(guards);\r\n })\r\n // catch any navigation canceled\r\n .catch(err => isNavigationFailure(err, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)\r\n ? err\r\n : Promise.reject(err)));\r\n }\r\n function triggerAfterEach(to, from, failure) {\r\n // navigation is confirmed, call afterGuards\r\n // TODO: wrap with error handlers\r\n for (const guard of afterGuards.list())\r\n guard(to, from, failure);\r\n }\r\n /**\r\n * - Cleans up any navigation guards\r\n * - Changes the url if necessary\r\n * - Calls the scrollBehavior\r\n */\r\n function finalizeNavigation(toLocation, from, isPush, replace, data) {\r\n // a more recent navigation took place\r\n const error = checkCanceledNavigation(toLocation, from);\r\n if (error)\r\n return error;\r\n // only consider as push if it's not the first navigation\r\n const isFirstNavigation = from === START_LOCATION_NORMALIZED;\r\n const state = !isBrowser ? {} : history.state;\r\n // change URL only if the user did a push/replace and if it's not the initial navigation because\r\n // it's just reflecting the url\r\n if (isPush) {\r\n // on the initial navigation, we want to reuse the scroll position from\r\n // history state if it exists\r\n if (replace || isFirstNavigation)\r\n routerHistory.replace(toLocation.fullPath, assign({\r\n scroll: isFirstNavigation && state && state.scroll,\r\n }, data));\r\n else\r\n routerHistory.push(toLocation.fullPath, data);\r\n }\r\n // accept current navigation\r\n currentRoute.value = toLocation;\r\n handleScroll(toLocation, from, isPush, isFirstNavigation);\r\n markAsReady();\r\n }\r\n let removeHistoryListener;\r\n // attach listener to history to trigger navigations\r\n function setupListeners() {\r\n // avoid setting up listeners twice due to an invalid first navigation\r\n if (removeHistoryListener)\r\n return;\r\n removeHistoryListener = routerHistory.listen((to, _from, info) => {\r\n if (!router.listening)\r\n return;\r\n // cannot be a redirect route because it was in history\r\n const toLocation = resolve(to);\r\n // due to dynamic routing, and to hash history with manual navigation\r\n // (manually changing the url or calling history.hash = '#/somewhere'),\r\n // there could be a redirect record in history\r\n const shouldRedirect = handleRedirectRecord(toLocation);\r\n if (shouldRedirect) {\r\n pushWithRedirect(assign(shouldRedirect, { replace: true }), toLocation).catch(noop);\r\n return;\r\n }\r\n pendingLocation = toLocation;\r\n const from = currentRoute.value;\r\n // TODO: should be moved to web history?\r\n if (isBrowser) {\r\n saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\r\n }\r\n navigate(toLocation, from)\r\n .catch((error) => {\r\n if (isNavigationFailure(error, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\r\n return error;\r\n }\r\n if (isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\r\n // Here we could call if (info.delta) routerHistory.go(-info.delta,\r\n // false) but this is bug prone as we have no way to wait the\r\n // navigation to be finished before calling pushWithRedirect. Using\r\n // a setTimeout of 16ms seems to work but there is no guarantee for\r\n // it to work on every browser. So instead we do not restore the\r\n // history entry and trigger a new navigation as requested by the\r\n // navigation guard.\r\n // the error is already handled by router.push we just want to avoid\r\n // logging the error\r\n pushWithRedirect(error.to, toLocation\r\n // avoid an uncaught rejection, let push call triggerError\r\n )\r\n .then(failure => {\r\n // manual change in hash history #916 ending up in the URL not\r\n // changing, but it was changed by the manual url change, so we\r\n // need to manually change it ourselves\r\n if (isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ |\r\n 16 /* ErrorTypes.NAVIGATION_DUPLICATED */) &&\r\n !info.delta &&\r\n info.type === NavigationType.pop) {\r\n routerHistory.go(-1, false);\r\n }\r\n })\r\n .catch(noop);\r\n // avoid the then branch\r\n return Promise.reject();\r\n }\r\n // do not restore history on unknown direction\r\n if (info.delta) {\r\n routerHistory.go(-info.delta, false);\r\n }\r\n // unrecognized error, transfer to the global handler\r\n return triggerError(error, toLocation, from);\r\n })\r\n .then((failure) => {\r\n failure =\r\n failure ||\r\n finalizeNavigation(\r\n // after navigation, all matched components are resolved\r\n toLocation, from, false);\r\n // revert the navigation\r\n if (failure) {\r\n if (info.delta &&\r\n // a new navigation has been triggered, so we do not want to revert, that will change the current history\r\n // entry while a different route is displayed\r\n !isNavigationFailure(failure, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\r\n routerHistory.go(-info.delta, false);\r\n }\r\n else if (info.type === NavigationType.pop &&\r\n isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 16 /* ErrorTypes.NAVIGATION_DUPLICATED */)) {\r\n // manual change in hash history #916\r\n // it's like a push but lacks the information of the direction\r\n routerHistory.go(-1, false);\r\n }\r\n }\r\n triggerAfterEach(toLocation, from, failure);\r\n })\r\n .catch(noop);\r\n });\r\n }\r\n // Initialization and Errors\r\n let readyHandlers = useCallbacks();\r\n let errorHandlers = useCallbacks();\r\n let ready;\r\n /**\r\n * Trigger errorHandlers added via onError and throws the error as well\r\n *\r\n * @param error - error to throw\r\n * @param to - location we were navigating to when the error happened\r\n * @param from - location we were navigating from when the error happened\r\n * @returns the error as a rejected promise\r\n */\r\n function triggerError(error, to, from) {\r\n markAsReady(error);\r\n const list = errorHandlers.list();\r\n if (list.length) {\r\n list.forEach(handler => handler(error, to, from));\r\n }\r\n else {\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n warn('uncaught error during route navigation:');\r\n }\r\n console.error(error);\r\n }\r\n return Promise.reject(error);\r\n }\r\n function isReady() {\r\n if (ready && currentRoute.value !== START_LOCATION_NORMALIZED)\r\n return Promise.resolve();\r\n return new Promise((resolve, reject) => {\r\n readyHandlers.add([resolve, reject]);\r\n });\r\n }\r\n function markAsReady(err) {\r\n if (!ready) {\r\n // still not ready if an error happened\r\n ready = !err;\r\n setupListeners();\r\n readyHandlers\r\n .list()\r\n .forEach(([resolve, reject]) => (err ? reject(err) : resolve()));\r\n readyHandlers.reset();\r\n }\r\n return err;\r\n }\r\n // Scroll behavior\r\n function handleScroll(to, from, isPush, isFirstNavigation) {\r\n const { scrollBehavior } = options;\r\n if (!isBrowser || !scrollBehavior)\r\n return Promise.resolve();\r\n const scrollPosition = (!isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0))) ||\r\n ((isFirstNavigation || !isPush) &&\r\n history.state &&\r\n history.state.scroll) ||\r\n null;\r\n return nextTick()\r\n .then(() => scrollBehavior(to, from, scrollPosition))\r\n .then(position => position && scrollToPosition(position))\r\n .catch(err => triggerError(err, to, from));\r\n }\r\n const go = (delta) => routerHistory.go(delta);\r\n let started;\r\n const installedApps = new Set();\r\n const router = {\r\n currentRoute,\r\n listening: true,\r\n addRoute,\r\n removeRoute,\r\n hasRoute,\r\n getRoutes,\r\n resolve,\r\n options,\r\n push,\r\n replace,\r\n go,\r\n back: () => go(-1),\r\n forward: () => go(1),\r\n beforeEach: beforeGuards.add,\r\n beforeResolve: beforeResolveGuards.add,\r\n afterEach: afterGuards.add,\r\n onError: errorHandlers.add,\r\n isReady,\r\n install(app) {\r\n const router = this;\r\n app.component('RouterLink', RouterLink);\r\n app.component('RouterView', RouterView);\r\n app.config.globalProperties.$router = router;\r\n Object.defineProperty(app.config.globalProperties, '$route', {\r\n enumerable: true,\r\n get: () => unref(currentRoute),\r\n });\r\n // this initial navigation is only necessary on client, on server it doesn't\r\n // make sense because it will create an extra unnecessary navigation and could\r\n // lead to problems\r\n if (isBrowser &&\r\n // used for the initial navigation client side to avoid pushing\r\n // multiple times when the router is used in multiple apps\r\n !started &&\r\n currentRoute.value === START_LOCATION_NORMALIZED) {\r\n // see above\r\n started = true;\r\n push(routerHistory.location).catch(err => {\r\n if ((process.env.NODE_ENV !== 'production'))\r\n warn('Unexpected error when starting the router:', err);\r\n });\r\n }\r\n const reactiveRoute = {};\r\n for (const key in START_LOCATION_NORMALIZED) {\r\n // @ts-expect-error: the key matches\r\n reactiveRoute[key] = computed(() => currentRoute.value[key]);\r\n }\r\n app.provide(routerKey, router);\r\n app.provide(routeLocationKey, reactive(reactiveRoute));\r\n app.provide(routerViewLocationKey, currentRoute);\r\n const unmountApp = app.unmount;\r\n installedApps.add(app);\r\n app.unmount = function () {\r\n installedApps.delete(app);\r\n // the router is not attached to an app anymore\r\n if (installedApps.size < 1) {\r\n // invalidate the current navigation\r\n pendingLocation = START_LOCATION_NORMALIZED;\r\n removeHistoryListener && removeHistoryListener();\r\n removeHistoryListener = null;\r\n currentRoute.value = START_LOCATION_NORMALIZED;\r\n started = false;\r\n ready = false;\r\n }\r\n unmountApp();\r\n };\r\n // TODO: this probably needs to be updated so it can be used by vue-termui\r\n if (((process.env.NODE_ENV !== 'production') || __VUE_PROD_DEVTOOLS__) && isBrowser) {\r\n addDevtools(app, router, matcher);\r\n }\r\n },\r\n };\r\n return router;\r\n}\r\nfunction runGuardQueue(guards) {\r\n return guards.reduce((promise, guard) => promise.then(() => guard()), Promise.resolve());\r\n}\r\nfunction extractChangingRecords(to, from) {\r\n const leavingRecords = [];\r\n const updatingRecords = [];\r\n const enteringRecords = [];\r\n const len = Math.max(from.matched.length, to.matched.length);\r\n for (let i = 0; i < len; i++) {\r\n const recordFrom = from.matched[i];\r\n if (recordFrom) {\r\n if (to.matched.find(record => isSameRouteRecord(record, recordFrom)))\r\n updatingRecords.push(recordFrom);\r\n else\r\n leavingRecords.push(recordFrom);\r\n }\r\n const recordTo = to.matched[i];\r\n if (recordTo) {\r\n // the type doesn't matter because we are comparing per reference\r\n if (!from.matched.find(record => isSameRouteRecord(record, recordTo))) {\r\n enteringRecords.push(recordTo);\r\n }\r\n }\r\n }\r\n return [leavingRecords, updatingRecords, enteringRecords];\r\n}\n\n/**\r\n * Returns the router instance. Equivalent to using `$router` inside\r\n * templates.\r\n */\r\nfunction useRouter() {\r\n return inject(routerKey);\r\n}\r\n/**\r\n * Returns the current route location. Equivalent to using `$route` inside\r\n * templates.\r\n */\r\nfunction useRoute() {\r\n return inject(routeLocationKey);\r\n}\n\nexport { NavigationFailureType, RouterLink, RouterView, START_LOCATION_NORMALIZED as START_LOCATION, createMemoryHistory, createRouter, createRouterMatcher, createWebHashHistory, createWebHistory, isNavigationFailure, loadRouteLocation, matchedRouteKey, onBeforeRouteLeave, onBeforeRouteUpdate, parseQuery, routeLocationKey, routerKey, routerViewLocationKey, stringifyQuery, useLink, useRoute, useRouter, viewDepthKey };\n"],"names":["window","undefined","LIBVERSION","EMPTY","UNKNOWN","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","UA_MAX_LENGTH","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","EDGE","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SONY","XIAOMI","ZEBRA","FACEBOOK","extend","regexes","extensions","mergedRegexes","i","length","concat","enumerize","arr","enums","toUpperCase","has","str1","str2","lowerize","indexOf","str","toLowerCase","majorize","version","replace","split","trim","len","substring","rgxMapper","ua","arrays","j","k","p","q","matches","match","regex","props","exec","this","call","test","strMapper","map","oldSafariMap","windowsVersionMap","ME","XP","Vista","RT","browser","cpu","device","engine","os","UAParser","getResult","_ua","navigator","userAgent","_rgxmap","getBrowser","_browser","major","getCPU","_cpu","getDevice","_device","getEngine","_engine","getOS","_os","getUA","setUA","CPU","DEVICE","ENGINE","OS","exports","module","$","jQuery","Zepto","parser","get","set","result","prop","__rest","s","e","t","Object","prototype","hasOwnProperty","getOwnPropertySymbols","propertyIsEnumerable","create","_prodErrorMap","prodErrorMap","_DEFAULT_AUTH_ERROR_FACTORY","logClient","_logError","msg","args","logLevel","ERROR","error","_fail","authOrCode","rest","createErrorInternal","_createError","_errorWithCustomMessage","auth","code","message","errorMap","assign","factory","appName","name","fullParams","slice","_errorFactory","_assert","assertion","debugFail","failure","Error","debugAssert","instanceCache","Map","_getInstance","cls","Function","instance","initializeAuth","app","deps","provider","isInitialized","getImmediate","initialOptions","getOptions","initialize","options","_initializeAuthInstance","persistence","hierarchy","Array","isArray","_updateErrorMap","_initializeWithPersistence","popupRedirectResolver","_getCurrentUrl","_a","self","location","href","_isHttpOrHttps","_getCurrentScheme","protocol","_isOnline","onLine","_getUserLanguage","navigatorLanguage","languages","language","Delay","constructor","shortDelay","longDelay","isMobile","Math","min","_emulatorUrl","config","path","emulator","url","startsWith","FetchProvider","static","fetchImpl","headersImpl","responseImpl","fetch","Headers","Response","SERVER_ERROR_MAP","DEFAULT_API_TIMEOUT_MS","_addTidIfNecessary","request","tenantId","async","_performApiRequest","method","customErrorMap","_performFetchWithErrorHandling","body","params","JSON","stringify","query","key","apiKey","headers","_getAdditionalHeaders","languageCode","_getFinalTarget","apiHost","referrerPolicy","fetchFn","_canInitEmulator","networkTimeout","NetworkTimeout","response","Promise","race","promise","clearNetworkTimeout","json","_makeTaggedError","ok","errorMessage","serverErrorCode","serverErrorMessage","authError","_performSignInRequest","serverResponse","_serverResponse","host","base","apiScheme","timer","_","reject","setTimeout","clearTimeout","errorParams","email","phoneNumber","customData","_tokenResponse","deleteAccount","getAccountInfo","utcTimestampToDateString","utcTimestamp","date","Date","Number","isNaN","getTime","toUTCString","getIdTokenResult","user","forceRefresh","userInternal","token","getIdToken","claims","_parseToken","exp","auth_time","iat","firebase","signInProvider","authTime","secondsStringToMilliseconds","issuedAtTime","expirationTime","signInSecondFactor","seconds","algorithm","payload","signature","decoded","parse","toString","_tokenExpiresIn","parsedToken","_logoutIfInvalidated","bypassAuthState","isUserInvalidated","currentUser","signOut","ProactiveRefresh","isRunning","timerId","errorBackoff","_start","schedule","_stop","getInterval","wasError","interval","expTime","stsTokenManager","now","max","iteration","UserMetadata","createdAt","lastLoginAt","_initializeTime","lastSignInTime","creationTime","_copy","metadata","toJSON","_reloadWithoutSaving","idToken","users","coreAccount","_notifyReloadListener","newProviderData","providerUserInfo","extractProviderData","providerData","mergeProviderData","oldIsAnonymous","isAnonymous","newIsAnonymous","passwordHash","updates","uid","localId","displayName","photoURL","photoUrl","emailVerified","reload","_persistUserIfCurrent","_notifyListenersIfCurrent","original","newData","deduped","filter","o","some","n","providerId","providers","rawId","requestStsToken","refreshToken","tokenApiHost","accessToken","access_token","expiresIn","expires_in","refresh_token","StsTokenManager","isExpired","updateFromServerResponse","updateTokensAndExpiration","refresh","clearRefreshToken","oldToken","expiresInSec","object","manager","_assign","_clone","_performRefresh","assertStringOrUndefined","UserImpl","opt","proactiveRefresh","reloadUserInfo","reloadListener","getToken","userInfo","_onReload","callback","_startProactiveRefresh","_stopProactiveRefresh","tokensRefreshed","_redirectEventId","_b","_c","_d","_e","_f","_g","_h","plainObjectTokenManager","fromJSON","idTokenResponse","InMemoryPersistence","type","storage","value","_addListener","_key","_listener","_removeListener","inMemoryPersistence","_persistenceKeyName","PersistenceUserManager","userKey","fullUserKey","fullPersistenceKey","boundEventHandler","_onStorageEvent","bind","setCurrentUser","_set","blob","_get","_fromJSON","removeCurrentUser","_remove","savePersistenceForRedirect","newPersistence","getCurrentUser","delete","persistenceHierarchy","availablePersistences","all","_isAvailable","selectedPersistence","userToMigrate","migrationHierarchy","_shouldAllowMigration","_getBrowserName","includes","_isIEMobile","_isFirefox","_isBlackBerry","_isWebOS","_isSafari","_isChromeIOS","_isAndroid","re","_isIOS","_isIOSStandalone","standalone","_isIE10","document","documentMode","_isMobileBrowser","_isIframe","top","_getClientVersion","clientPlatform","frameworks","reportedPlatform","reportedFrameworks","join","AuthMiddlewareQueue","queue","pushCallback","onAbort","wrappedCallback","resolve","push","index","nextUser","onAbortStack","beforeStateCallback","reverse","originalMessage","AuthImpl","heartbeatServiceProvider","emulatorConfig","operations","authStateSubscription","Subscription","idTokenSubscription","beforeStateQueue","redirectUser","isProactiveRefreshEnabled","_isInitialized","_deleted","_initializationPromise","_popupRedirectResolver","lastNotifiedUid","settings","appVerificationDisabledForTesting","clientVersion","sdkClientVersion","persistenceManager","_shouldInitProactively","_initialize","initializeCurrentUser","assertedPersistence","_currentUser","_updateCurrentUser","previouslyStoredUser","futureCurrentUser","needsTocheckMiddleware","authDomain","getOrInitRedirectPersistenceManager","redirectUserEventId","storedUserEventId","tryRedirectSignIn","directlySetCurrentUser","runMiddleware","_overrideRedirectResult","reloadAndSetCurrentUserOrClear","redirectResolver","_completeRedirectFn","_setRedirectUser","useDeviceLanguage","userExtern","skipBeforeStateCallbacks","notifyAuthListeners","redirectPersistenceManager","setPersistence","_getPersistence","onAuthStateChanged","nextOrObserver","completed","registerStateListener","beforeAuthStateChanged","onIdTokenChanged","redirectManager","resolver","_redirectPersistence","id","next","currentUid","subscription","cb","then","addObserver","action","_logFramework","framework","sort","_getFrameworks","appId","heartbeatsHeader","optional","getHeartbeatsHeader","_castAuth","observer","connectAuthEmulator","authInternal","disableWarnings","extractProtocol","port","extractHostAndPort","portStr","freeze","emitEmulatorWarning","protocolEnd","substr","authority","hostAndPort","pop","bracketedIPv6","parsePort","attachBanner","el","createElement","sty","style","innerText","position","width","backgroundColor","border","color","bottom","left","margin","zIndex","textAlign","classList","add","appendChild","console","info","readyState","addEventListener","AuthCredential","signInMethod","_getIdTokenResponse","_auth","_linkToIdToken","_idToken","_getReauthenticationResolver","resetPassword","updateEmailPassword","signInWithPassword","sendOobCode","sendPasswordResetEmail$1","signInWithEmailLink$1","signInWithEmailLinkForLinking","EmailAuthCredential","_email","_password","_tenantId","super","password","oobCode","obj","_fromEmailAndPassword","_fromEmailAndCode","returnSecureToken","signInWithIdp","IDP_REQUEST_URI$1","OAuthCredential","arguments","pendingToken","cred","nonce","oauthToken","oauthTokenSecret","secret","buildRequest","autoCreate","requestUri","postBody","sendPhoneVerificationCode","signInWithPhoneNumber$1","linkWithPhoneNumber$1","temporaryProof","VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_","verifyPhoneNumberForExisting","apiRequest","operation","PhoneAuthCredential","verificationId","verificationCode","_makeVerificationRequest","sessionInfo","parseMode","mode","parseDeepLink","link","doubleDeepLink","iOSDeepLink","iOSDoubleDeepLink","ActionCodeURL","actionLink","searchParams","continueUrl","EmailAuthProvider","PROVIDER_ID","emailLink","actionCodeUrl","parseLink","EMAIL_PASSWORD_SIGN_IN_METHOD","EMAIL_LINK_SIGN_IN_METHOD","FederatedAuthProvider","defaultLanguageCode","customParameters","setDefaultLanguage","setCustomParameters","customOAuthParameters","getCustomParameters","BaseOAuthProvider","scopes","addScope","scope","getScopes","FacebookAuthProvider","_fromParams","FACEBOOK_SIGN_IN_METHOD","userCredential","credentialFromTaggedObject","tokenResponse","oauthAccessToken","credential","GoogleAuthProvider","GOOGLE_SIGN_IN_METHOD","oauthIdToken","GithubAuthProvider","GITHUB_SIGN_IN_METHOD","TwitterAuthProvider","TWITTER_SIGN_IN_METHOD","signUp","UserCredentialImpl","operationType","_fromIdTokenResponse","providerIdForResponse","userCred","_updateTokensIfNecessary","signInAnonymously","MultiFactorError","setPrototypeOf","_processCredentialSavingMfaContextIfNecessary","idTokenProvider","catch","_fromErrorAndOperation","_link$1","_forOperation","_reauthenticate","parsed","sub","_signInWithCredential","signInWithCredential","reauthenticateWithCredential","signInWithCustomToken$1","signInWithCustomToken","customToken","MultiFactorInfoImpl","factorId","mfaEnrollmentId","enrollmentTime","enrolledAt","enrollment","PhoneMultiFactorInfoImpl","_fromServerResponse","phoneInfo","_setActionCodeSettingsOnRequest","actionCodeSettings","dynamicLinkDomain","canHandleCodeInApp","handleCodeInApp","iOS","bundleId","iOSBundleId","android","packageName","androidInstallApp","installApp","androidMinimumVersionCode","minimumVersion","androidPackageName","sendPasswordResetEmail","authModular","requestType","confirmPasswordReset","newPassword","checkActionCode","newEmail","mfaInfo","multiFactorInfo","data","previousEmail","verifyPasswordResetCode","signInWithEmailAndPassword","updateEmail","updateEmailOrPassword","startEnrollPhoneMfa","finalizeEnrollPhoneMfa","WeakMap","STORAGE_AVAILABLE_KEY","BrowserPersistenceClass","storageRetriever","setItem","removeItem","getItem","_iframeCannotSyncWebStorage","_POLLING_INTERVAL_MS$1","IE10_LOCAL_STORAGE_SYNC_DELAY","BrowserLocalPersistence","localStorage","event","poll","onStorageEvent","listeners","localCache","pollTimer","safariLocalStorageNotSynced","fallbackToPolling","forAllChangedKeys","keys","newValue","oldValue","_oldValue","notifyListeners","detachListener","stopPolling","storedValue","triggerListeners","listener","from","startPolling","setInterval","StorageEvent","clearInterval","attachListener","removeEventListener","Set","size","browserLocalPersistence","BrowserSessionPersistence","sessionStorage","browserSessionPersistence","_allSettled","promises","fulfilled","reason","Receiver","eventTarget","handlersMap","handleEvent","existingInstance","receivers","find","receiver","isListeningto","newInstance","messageEvent","eventId","eventType","handlers","ports","postMessage","status","handler","origin","_subscribe","eventHandler","_unsubscribe","_generateEventId","prefix","digits","random","floor","Sender","target","removeMessageHandler","messageChannel","port1","onMessage","close","timeout","MessageChannel","completionTimer","start","ackTimer","port2","finally","_window","_setWindowLocation","_isWorker","_getActiveServiceWorker","serviceWorker","registration","ready","active","_getServiceWorkerController","controller","_getWorkerGlobalScope","DB_NAME","DB_VERSION","DB_OBJECTSTORE_NAME","DB_DATA_KEYPATH","DBPromise","toPromise","getObjectStore","db","isReadWrite","transaction","objectStore","_deleteDatabase","indexedDB","deleteDatabase","_openDatabase","open","createObjectStore","keyPath","objectStoreNames","contains","_putObject","put","getObject","_deleteObject","_POLLING_INTERVAL_MS","_TRANSACTION_RETRY_COUNT","IndexedDBLocalPersistence","pendingWrites","sender","serviceWorkerReceiverAvailable","activeServiceWorker","_workerInitializationPromise","initializeServiceWorkerMessaging","op","numAttempts","_openDb","initializeReceiver","initializeSender","_origin","_poll","keyProcessed","_data","results","_send","write","_withPendingWrite","_withRetries","notifyServiceWorker","getAllRequest","getAll","keysInResult","fbase_key","localKey","indexedDBLocalPersistence","startSignInPhoneMfa","finalizeSignInPhoneMfa","getScriptParentElement","getElementsByTagName","_loadJS","setAttribute","onload","onerror","charset","_generateCallbackName","RECAPTCHA_VERIFIER_TYPE","_verifyPhoneNumber","verifier","recaptchaToken","verify","phoneInfoOptions","session","phoneEnrollmentInfo","phoneSessionInfo","multiFactorHint","multiFactorUid","mfaPendingCredential","phoneSignInInfo","phoneResponseInfo","_reset","PhoneAuthProvider","verifyPhoneNumber","phoneOptions","applicationVerifier","_fromVerification","_fromTokenResponse","_withDefaultResolver","resolverOverride","PHONE_SIGN_IN_METHOD","IdpCredential","_buildIdpRequest","sessionId","returnIdpCredential","_signIn","_reauth","_link","AbstractPopupRedirectOperation","pendingPromise","eventManager","execute","onExecution","registerConsumer","urlResponse","getIdpTask","onError","unregisterAndCleanUp","unregisterConsumer","cleanUp","_POLL_WINDOW_CLOSE_TIMEOUT","PopupOperation","authWindow","pollId","currentPopupAction","cancel","_openPopup","associatedEvent","_originValidation","_isIframeWebStorageSupported","isSupported","pollUserCancellation","closed","PENDING_REDIRECT_KEY","redirectOutcomeMap","RedirectAction","readyOutcome","hasPendingRedirect","_getAndClearPendingRedirectStatus","onAuthEvent","_redirectUserForId","pendingRedirectKey","resolverPersistence","_getRedirectResult","resolverExtern","EVENT_DUPLICATION_CACHE_DURATION_MS","AuthEventManager","cachedEventUids","consumers","queuedRedirectEvent","hasHandledPotentialRedirect","lastProcessedEventTime","authEventConsumer","isEventForConsumer","sendToConsumer","saveEventToCache","onEvent","hasEventBeenHandled","handled","forEach","consumer","isRedirectEvent","isNullRedirectEvent","eventIdMatches","clear","eventUid","v","_getProjectConfig","IP_ADDRESS_REGEX","HTTP_REGEX","_validateOrigin","authorizedDomains","domain","matchDomain","expected","currentUrl","hostname","URL","ceUrl","escapedDomainPattern","RegExp","NETWORK_TIMEOUT","resetUnloadedGapiModules","beacon","___jsl","H","hint","r","L","CP","loadGapi","loadGapiIframe","gapi","load","iframes","getContext","ontimeout","Iframe","cbName","cachedGApiLoader","_loadGapi","PING_TIMEOUT","IFRAME_PATH","EMULATED_IFRAME_PATH","IFRAME_ATTRIBUTES","height","tabindex","EID_FROM_APIHOST","getIframeUrl","eid","fw","_openIframe","context","where","messageHandlersFilter","CROSS_ORIGIN_IFRAMES_FILTER","attributes","dontclear","iframe","restyle","setHideOnLeave","networkError","networkErrorTimer","clearTimerAndResolve","ping","BASE_POPUP_OPTIONS","resizable","statusbar","toolbar","DEFAULT_WIDTH","DEFAULT_HEIGHT","TARGET_BLANK","FIREFOX_EMPTY_URL","AuthPopup","_open","screen","availHeight","availWidth","scrollbars","optionsString","entries","reduce","accum","openAsNewWindowIOS","newWin","focus","click","createEvent","initMouseEvent","dispatchEvent","WIDGET_PATH","EMULATOR_WIDGET_PATH","_getRedirectUrl","authType","redirectUrl","additionalParams","tid","paramsDict","getHandlerBase","WEB_STORAGE_SUPPORT_KEY","BrowserPopupRedirectResolver","eventManagers","originValidationPromises","initAndGetManager","register","iframeEvent","authEvent","send","browserPopupRedirectResolver","MultiFactorAssertionImpl","_process","_finalizeEnroll","_finalizeSignIn","PhoneMultiFactorAssertionImpl","phoneVerificationInfo","PhoneMultiFactorGenerator","_fromCredential","FACTOR_ID","AuthInterop","internalListeners","getUid","assertAuthConfigured","addAuthTokenListener","unsubscribe","updateProactiveRefresh","removeAuthTokenListener","getVersionForPlatform","registerAuth","container","getProvider","authInstance","setInstantiationMode","setInstanceCreatedCallback","_instanceIdentifier","_instance","authInternalProvider","DEFAULT_ID_TOKEN_MAX_AGE","authIdTokenMaxAge","lastPostedIdToken","mintCookieFactory","idTokenResult","idTokenAge","getAuth","authTokenSyncUrl","mintCookie","authEmulatorHost","stringToByteArray$1","out","c","charCodeAt","byteArrayToString","bytes","pos","c1","String","fromCharCode","c2","c3","c4","u","base64","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","ENCODED_VALS","ENCODED_VALS_WEBSAFE","HAS_NATIVE_SUPPORT","atob","encodeByteArray","input","webSafe","init_","byteToCharMap","output","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","encodeString","btoa","decodeString","decodeStringToByteArray","charToByteMap","charAt","haveByte4","byte4","base64Encode","utf8Bytes","base64urlEncodeWithoutPadding","base64Decode","isMobileCordova","isBrowserExtension","runtime","chrome","isReactNative","isIE","isIndexedDBAvailable","validateIndexedDBOpenable","preExist","DB_CHECK_NAME","onsuccess","onupgradeneeded","getGlobal","g","getDefaultsFromGlobal","__FIREBASE_DEFAULTS__","getDefaultsFromEnvVariable","process","defaultsJsonString","getDefaultsFromCookie","cookie","getDefaults","getDefaultEmulatorHost","productName","emulatorHosts","getDefaultAppConfig","getExperimentalSetting","Deferred","wrapCallback","ERROR_NAME","FirebaseError","captureStackTrace","ErrorFactory","service","serviceName","errors","fullCode","template","replaceTemplate","fullMessage","PATTERN","isEmpty","deepEqual","a","b","aKeys","bKeys","aProp","bProp","isObject","thing","querystring","querystringParams","arrayVal","encodeURIComponent","querystringDecode","tokens","decodeURIComponent","extractQuerystring","queryStart","fragmentStart","createSubscribe","executor","onNoObservers","proxy","ObserverProxy","subscribe","observers","unsubscribes","observerCount","task","finalized","forEachObserver","complete","implementsAnyMethods","noop","unsub","unsubscribeOne","finalError","fn","sendOne","err","methods","getModularInstance","_delegate","V3_URL","V3_URL_REGEX","EXISTING_SCRIPT_MESSAGE","findScript","scripts","querySelectorAll","script","src","injectScript","queryString","advancedFraudSignals","headOrBody","head","registerWrapper","stripe","startTime","_registerWrapper","stripePromise","loadScript","Stripe","warn","initStripe","maybeStripe","apply","stripePromise$1","loadCalled","loadStripe","_len","alpha","en","cs","da","de","es","fr","it","lt","nl","hu","pl","pt","ru","sk","sr","sv","tr","uk","ar","az","ug","alphaSpaces","getLocale","locale","getSingleParam","paramName","alphaValidator","every","val","valueAsString","loc","alphaSpacesValidator","emailValidator","isNullOrUndefined","isEmptyArray","lengthValidator","maxLengthValidator","maxValueValidator","minValidator","minValueValidator","numericValidator","testValue","strValue","requiredValidator","activeEffectScope","EffectScope","detached","effects","cleanups","parent","run","currentEffectScope","on","off","stop","fromParent","l","last","effectScope","recordEffectScope","effect","getCurrentScope","onScopeDispose","createDep","dep","w","wasTracked","trackOpBit","newTracked","initDepMarkers","finalizeDepMarkers","ptr","targetMap","effectTrackDepth","maxMarkerBits","activeEffect","ITERATE_KEY","Symbol","MAP_KEY_ITERATE_KEY","ReactiveEffect","scheduler","lastShouldTrack","shouldTrack","cleanupEffect","deferStop","onStop","trackStack","pauseTracking","resetTracking","track","depsMap","eventInfo","trackEffects","debuggerEventExtraInfo","trigger","oldTarget","values","newLength","triggerEffects","computed","triggerEffect","allowRecurse","isNonTrackableKeys","builtInSymbols","getOwnPropertyNames","createGetter","shallowGet","readonlyGet","arrayInstrumentations","createArrayInstrumentations","instrumentations","toRaw","res","isReadonly","shallow","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","targetIsArray","Reflect","isRef","readonly","reactive","createSetter","shallowSet","isShallow","hadKey","deleteProperty","ownKeys","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","toShallow","getProto","getPrototypeOf","get$1","rawTarget","rawKey","wrap","toReadonly","toReactive","has$1","proto","set$1","deleteEntry","hadItems","createForEach","thisArg","observed","createIterableMethod","targetIsMap","isPair","iterator","isKeyOnly","innerIterator","done","createReadonlyMethod","createInstrumentations","mutableInstrumentations","shallowInstrumentations","readonlyInstrumentations","shallowReadonlyInstrumentations","iteratorMethods","createInstrumentationGetter","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","targetTypeMap","rawType","getTargetType","isExtensible","createReactiveObject","shallowReactive","baseHandlers","collectionHandlers","proxyMap","existingProxy","targetType","Proxy","isReactive","isProxy","raw","markRaw","trackRefValue","ref","triggerRefValue","newVal","__v_isRef","createRef","shallowRef","rawValue","RefImpl","__v_isShallow","_rawValue","_value","useDirectValue","unref","shallowUnwrapHandlers","proxyRefs","objectWithRefs","ObjectRefImpl","_object","_defaultValue","toRef","defaultValue","ComputedRefImpl","getter","_setter","isSSR","_dirty","_cacheable","getterOrOptions","debugOptions","setter","onlyGetter","cRef","callWithErrorHandling","handleError","callWithAsyncErrorHandling","throwInDev","contextVNode","vnode","cur","exposedInstance","errorInfo","errorCapturedHooks","ec","appErrorHandler","appContext","errorHandler","logError","isFlushing","isFlushPending","flushIndex","pendingPostFlushCbs","activePostFlushCbs","postFlushIndex","resolvedPromise","currentFlushPromise","nextTick","findInsertionIndex","end","middle","middleJobId","getId","queueJob","job","splice","queueFlush","flushJobs","invalidateJob","queuePostFlushCb","flushPreFlushCbs","seen","pre","flushPostFlushCbs","Infinity","comparator","diff","emit$1","rawArgs","isUnmounted","isModelListener","modelArg","modifiersKey","number","handlerName","onceHandler","emitted","normalizeEmitsOptions","comp","asMixin","cache","emitsCache","cached","emits","normalized","hasExtends","extendEmits","normalizedFromExtend","mixins","extends","isEmitListener","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","prev","__scopeId","pushScopeId","popScopeId","withCtx","ctx","isNonScopedSlot","_n","renderFnWithContext","setBlockTracking","prevInstance","renderComponentRoot","Component","withProxy","propsOptions","slots","attrs","emit","render","renderCache","setupState","inheritAttrs","fallthroughAttrs","shapeFlag","proxyToUse","normalizeVNode","getFunctionalFallthrough","blockStack","createVNode","Comment","root","filterModelListeners","cloneVNode","dirs","transition","shouldUpdateComponent","prevVNode","nextVNode","optimized","prevProps","children","prevChildren","component","nextProps","nextChildren","patchFlag","emitsOptions","$stable","hasPropsChanged","dynamicProps","nextKeys","updateHOCHostEl","subTree","isSuspense","__isSuspense","queueEffectWithSuspense","suspense","pendingBranch","provide","currentInstance","provides","parentProvides","inject","treatDefaultAsFactory","watchEffect","doWatch","INITIAL_WATCHER_VALUE","watch","source","immediate","deep","flush","onTrack","onTrigger","cleanup","forceTrigger","isMultiSource","traverse","onCleanup","baseGetter","ssrCleanup","isInSSRComponentSetup","useSSRContext","__watcherHandles","fill","queuePostRenderEffect","unwatch","instanceWatch","publicThis","createPathGetter","setCurrentInstance","unsetCurrentInstance","segments","useTransitionState","state","isMounted","isLeaving","isUnmounting","leavingVNodes","onMounted","onBeforeUnmount","TransitionHookValidator","BaseTransitionImpl","appear","Boolean","persisted","onBeforeEnter","onEnter","onAfterEnter","onEnterCancelled","onBeforeLeave","onLeave","onAfterLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAfterAppear","onAppearCancelled","setup","getCurrentInstance","prevTransitionKey","default","getTransitionRawChildren","child","hasFound","rawProps","emptyPlaceholder","innerChild","getKeepAliveChild","enterHooks","resolveTransitionHooks","setTransitionHooks","oldChild","oldInnerChild","transitionKeyChanged","getTransitionKey","isSameVNodeType","leavingHooks","afterLeave","update","delayLeave","earlyRemove","delayedLeave","leavingVNodesCache","getLeavingNodesForType","_leaveCb","BaseTransition","callHook","hook","callAsyncHook","hooks","beforeEnter","leavingVNode","enter","afterHook","cancelHook","called","_enterCb","cancelled","leave","remove","clone","isKeepAlive","ssContent","ssFallback","keepComment","parentKey","ret","keyedFragmentCount","Fragment","defineComponent","isAsyncWrapper","__asyncLoader","__isKeepAlive","pattern","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","__wdc","current","isDeactivated","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","resetShapeFlag","getInnerChild","prepend","__weh","unshift","createHook","lifecycle","onBeforeMount","onBeforeUpdate","onUpdated","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","withDirectives","directives","internalInstance","getExposeProxy","bindings","dir","arg","modifiers","mounted","updated","invokeDirectiveHook","oldBindings","binding","COMPONENTS","DIRECTIVES","resolveComponent","maybeSelfReference","resolveAsset","NULL_DYNAMIC_COMPONENT","resolveDynamicComponent","resolveDirective","warnMissing","selfName","getComponentName","registry","renderList","renderItem","item","renderSlot","fallback","noSlotted","isCE","slot","openBlock","validSlotContent","ensureValidVNode","rendered","createBlock","scopeId","slotScopeIds","vnodes","isVNode","getPublicInstance","isStatefulComponent","publicPropertiesMap","$el","$data","$props","$attrs","$slots","$refs","refs","$parent","$root","$emit","$options","resolveMergedOptions","$forceUpdate","f","$nextTick","$watch","hasSetupBinding","__isScriptSetup","PublicInstanceProxyHandlers","accessCache","normalizedProps","shouldCacheAccess","publicGetter","cssModule","globalProperties","__cssModules","defineProperty","descriptor","applyOptions","beforeCreate","dataOptions","computedOptions","watchOptions","provideOptions","injectOptions","created","beforeMount","beforeUpdate","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","components","filters","checkDuplicateProperties","resolveInjections","unwrapInjectedRef","methodHandler","enumerable","configurable","createWatcher","registerLifecycleHook","_hook","exposed","unwrapRef","normalizeInject","h","extendsOptions","globalMixins","optionsCache","optionMergeStrategies","resolved","m","mergeOptions","to","strats","strat","internalOptionMergeStrats","mergeDataFn","mergeObjectOptions","mergeAsArray","mergeWatchOptions","mergeInject","merged","initProps","isStateful","InternalObjectKey","propsDefaults","setFullProps","updateProps","rawPrevProps","rawCurrentProps","hasAttrsChanged","kebabKey","resolvePropValue","propsToUpdate","camelizedKey","needCastKeys","rawCastValues","camelKey","castValues","isAbsent","hasDefault","normalizePropsOptions","propsCache","extendProps","normalizedKey","validatePropName","booleanIndex","getTypeIndex","stringIndex","getType","ctor","isSameType","expectedTypes","findIndex","isInternalKey","normalizeSlotValue","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","_ctx","normalizeVNodeSlots","initSlots","updateSlots","needDeletionCheck","deletionComparisonTarget","createAppContext","isNativeTag","NO","performance","warnHandler","compilerOptions","createAppAPI","hydrate","rootComponent","rootProps","installedPlugins","_uid","_component","_props","_container","_context","use","plugin","install","mixin","directive","mount","rootContainer","isHydrate","isSVG","__vue_app__","unmount","setRef","rawRef","oldRawRef","parentSuspense","isUnmount","refValue","owner","oldRef","_isString","_isRef","doSet","existing","initFeatureFlags","createRenderer","baseCreateRenderer","createHydrationFns","__VUE__","insert","hostInsert","hostRemove","patchProp","hostPatchProp","hostCreateElement","createText","hostCreateText","createComment","hostCreateComment","setText","hostSetText","setElementText","hostSetElementText","parentNode","hostParentNode","nextSibling","hostNextSibling","setScopeId","hostSetScopeId","insertStaticContent","hostInsertStaticContent","patch","n1","n2","anchor","parentComponent","dynamicChildren","getNextHostNode","Text","processText","processCommentNode","Static","mountStaticNode","processFragment","processElement","processComponent","internals","moveStaticNode","removeStaticNode","mountElement","patchElement","vnodeHook","is","mountChildren","unmountChildren","onVnodeBeforeMount","invokeVNodeHook","needCallTransitionHooks","onVnodeMounted","parentVNode","cloneIfMounted","oldProps","newProps","toggleRecurse","onVnodeBeforeUpdate","areChildrenSVG","patchBlockChildren","patchChildren","patchProps","class","onVnodeUpdated","oldChildren","newChildren","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","fragmentSlotScopeIds","traverseStaticChildren","activate","mountComponent","updateComponent","initialVNode","createComponentInstance","renderer","setupComponent","asyncDep","registerDep","setupRenderEffect","placeholder","asyncResolved","updateComponentPreRender","componentUpdateFn","bu","originNext","nextTree","prevTree","bm","isAsyncWrapperVNode","hydrateNode","hydrateSubTree","scopedInitialVNode","prevShapeFlag","patchKeyedChildren","patchUnkeyedChildren","oldLength","commonLength","nextChild","parentAnchor","l2","e1","e2","nextPos","s1","s2","keyToNewIndexMap","patched","toBePatched","moved","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","newIndex","increasingNewIndexSequence","getSequence","nextIndex","move","moveType","needTransition","performLeave","doRemove","deactivate","shouldInvokeDirs","shouldInvokeVnodeHook","onVnodeBeforeUnmount","unmountComponent","onVnodeUnmounted","removeFragment","performRemove","bum","um","suspenseId","pendingId","_vnode","mt","mc","pc","pbc","createApp","allowed","ch1","ch2","arrI","isTeleport","__isTeleport","isTeleportDisabled","disabled","isTargetSVG","SVGElement","resolveTarget","select","targetSelector","TeleportImpl","querySelector","mainAnchor","targetAnchor","wasDisabled","currentContainer","currentAnchor","moveTeleport","nextTarget","updateCssVars","hydrateTeleport","isReorder","node","hydrateChildren","targetNode","_lpa","firstChild","nodeType","Teleport","ut","currentBlock","disableTracking","closeBlock","isBlockTreeEnabled","setupBlock","createElementBlock","createBaseVNode","__v_isVNode","normalizeKey","normalizeRef","ref_key","ref_for","isBlockNode","needFullChildrenNormalization","__v_skip","staticCount","normalizeChildren","normalize","_createVNode","cloned","isClassComponent","__vccOpts","guardReactiveProps","klass","extraProps","mergeRef","mergedProps","mergeProps","createTextVNode","text","flag","createStaticVNode","content","numberOfNodes","createCommentVNode","asBlock","memo","slotFlag","toMerge","incoming","emptyAppContext","uid$1","exposeProxy","setupContext","bc","rtg","rtc","sp","ce","compile","installWithProxy","setupResult","setupStatefulComponent","createSetupContext","resolvedResult","handleSetupResult","finishComponentSetup","__ssrInlineRender","ssrRender","skipOptions","isCustomElement","delimiters","componentCompilerOptions","finalCompilerOptions","createAttrsProxy","includeInferred","__name","withAsyncContext","getAwaitable","awaitable","propsOrChildren","ssrContextKey","svgNS","doc","templateContainer","nodeOps","insertBefore","removeChild","tag","createElementNS","multiple","createTextNode","nodeValue","textContent","selector","before","previousSibling","lastChild","cloneNode","innerHTML","wrapper","patchClass","transitionClasses","_vtc","removeAttribute","className","patchStyle","isCssString","setStyle","currentDisplay","display","cssText","importantRE","setProperty","prefixed","autoPrefix","prefixes","prefixCache","rawName","xlinkNS","patchAttr","removeAttributeNS","setAttributeNS","isBoolean","patchDOMProp","tagName","needRemove","patchEvent","prevValue","nextValue","invokers","_vei","existingInvoker","parseName","invoker","createInvoker","optionsModifierRE","cachedNow","getNow","initialValue","_vts","attached","patchStopImmediatePropagation","originalStop","stopImmediatePropagation","_stopped","nativeOnRE","shouldSetAsProp","_trueValue","_falseValue","HTMLElement","TRANSITION","ANIMATION","Transition","resolveTransitionProps","DOMTransitionPropsValidators","css","duration","enterFromClass","enterActiveClass","enterToClass","appearFromClass","appearActiveClass","appearToClass","leaveFromClass","leaveActiveClass","leaveToClass","hasExplicitCallback","baseProps","durations","normalizeDuration","enterDuration","leaveDuration","finishEnter","isAppear","removeTransitionClass","finishLeave","_isLeaving","makeEnterHook","nextFrame","addTransitionClass","whenTransitionEnds","forceReflow","NumberOf","requestAnimationFrame","endId","expectedType","explicitTimeout","_endId","resolveIfNotStale","propCount","getTransitionInfo","endEvent","ended","onEnd","styles","getComputedStyle","getStyleProperties","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","d","toMs","offsetHeight","getModelAssigner","onCompositionStart","composing","onCompositionEnd","Event","vModelText","lazy","castToNumber","domValue","activeElement","vModelCheckbox","modelValue","_modelValue","elementValue","getValue","checked","found","filtered","getCheckboxValue","setChecked","vModelRadio","vModelSelect","isSetModel","selectedVal","selected","setSelected","_binding","isMultiple","option","optionValue","selectedIndex","vModelDynamic","callModelHook","resolveDynamicModel","modelToUse","systemModifiers","modifierGuards","stopPropagation","prevent","preventDefault","currentTarget","ctrl","ctrlKey","shift","shiftKey","alt","altKey","meta","metaKey","button","right","exact","withModifiers","guard","keyNames","esc","space","up","down","withKeys","eventKey","vShow","_vod","setDisplay","rendererOptions","ensureRenderer","containerOrSelector","normalizeContainer","Element","makeMap","expectsLowerCase","list","GLOBALS_WHITE_LISTED","isGloballyWhitelisted","normalizeStyle","isString","parseStringStyle","listDelimiterRE","propertyDelimiterRE","styleCommentRE","tmp","normalizeClass","specialBooleanAttrs","isSpecialBooleanAttr","includeBooleanAttr","looseCompareArrays","equal","looseEqual","aValidType","isDate","bValidType","isSymbol","aKeysCount","bKeysCount","aHasKey","bHasKey","looseIndexOf","toDisplayString","objectToString","isFunction","replacer","isMap","isSet","isPlainObject","EMPTY_OBJ","EMPTY_ARR","NOOP","onRE","isOn","hasOwn","toTypeString","isPromise","toRawType","isIntegerKey","parseInt","isReservedProp","cacheStringFunction","hit","camelizeRE","camelize","hyphenateRE","hyphenate","capitalize","toHandlerKey","hasChanged","invokeArrayFns","fns","def","toNumber","parseFloat","_globalThis","getGlobalThis","globalThis","isBrowserEnv","prototypeJsFix","augmentedWindow","augmentedArray","Prototype","ApplicationContextProviderImpl","getApplicationContext","versionName","getLanguage","platform","getOs","deviceModel","getDeviceModel","EventBridgeImpl","logEvent","setEventReceiver","__assign","isEqual","obj1","obj2","primitive","typeA","typeB","_i","primitive_1","isArrayA","isArrayB","sorted1","sorted2","result_1","ID_OP_SET","ID_OP_UNSET","ID_OP_CLEAR_ALL","ownProps","resArray","IdentityStoreImpl","identity","userProperties","editIdentity","actingUserProperties","actingIdentity","setUserId","userId","setDeviceId","deviceId","setUserProperties","updateUserProperties","actions","actingProperties","properties","commit","setIdentity","getIdentity","originalIdentity","addIdentityListener","removeIdentityListener","safeGlobal","AnalyticsConnector","identityStore","eventBridge","applicationContextProvider","getInstance","instanceName","_typeof","_classCallCheck","Constructor","TypeError","_defineProperties","writable","_createClass","protoProps","staticProps","_defineProperty","_objectSpread","sym","getOwnPropertyDescriptor","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","arr2","iter","Constants","DEFAULT_INSTANCE","API_VERSION","MAX_STRING_LENGTH","MAX_PROPERTY_KEYS","IDENTIFY_EVENT","GROUP_IDENTIFY_EVENT","EVENT_LOG_URL","EVENT_LOG_EU_URL","DYNAMIC_CONFIG_URL","DYNAMIC_CONFIG_EU_URL","LAST_EVENT_ID","LAST_EVENT_TIME","LAST_IDENTIFY_ID","LAST_SEQUENCE_NUMBER","SESSION_ID","DEVICE_ID","OPT_OUT","USER_ID","DEVICE_ID_INDEX","USER_ID_INDEX","OPT_OUT_INDEX","SESSION_ID_INDEX","LAST_EVENT_TIME_INDEX","EVENT_ID_INDEX","IDENTIFY_ID_INDEX","SEQUENCE_NUMBER_INDEX","COOKIE_TEST_PREFIX","COOKIE_PREFIX","STORAGE_DEFAULT","STORAGE_COOKIES","STORAGE_NONE","STORAGE_LOCAL","STORAGE_SESSION","REVENUE_EVENT","REVENUE_PRODUCT_ID","REVENUE_QUANTITY","REVENUE_PRICE","REVENUE_REVENUE_TYPE","AMP_DEVICE_ID_PARAM","AMP_REFERRER_PARAM","REFERRER","UTM_SOURCE","UTM_MEDIUM","UTM_CAMPAIGN","UTM_TERM","UTM_CONTENT","ATTRIBUTION_EVENT","TRANSPORT_HTTP","TRANSPORT_BEACON","UTF8","encode","utftext","decode","GlobalScope","Base64","_keyStr","unescape","_encode","chr1","chr2","chr3","enc1","enc2","enc3","enc4","escape","_decode","Buffer","isBuffer","valueOf","logLevels","DISABLE","WARN","INFO","setLogLevel","logLevelName","getLogLevel","log","_log","isEmptyString","sessionStorageEnabled","truncate","_truncateValue","validateInput","validateDeviceId","validateTransport","transport","sendBeacon","validateProperties","propsType","copy","property","keyType","validatePropertyValue","invalidValueTypes","valueType","arrayCopy","element","elemType","validateGroups","groups","groupsType","group","validateGroupName","groupName","groupNameType","getQueryParam","isWebWorkerEnvironment","WorkerGlobalScope","validateSessionId","utils","getLocation","base64Chars","base64Id","ca","cookieArray","trimStart","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","return","opts","expires","expirationDays","setTime","secure","sameSite","getLastEventTime","parsedValue","sortByEventTime","cookies","t1","t2","areCookiesEnabled","cookieName","_areCookiesEnabled","baseCookie","getHost","defaultHostname","topDomain","parts","levels","cname","_options","stored","_domainSpecific","suffix","nameEq","setRaw","getRaw","Cookie","reset","WorkerStorage","windowLocalStorageAvailable","globalStorage","div","attrKey","addBehavior","getAttribute","save","attr","XMLDocument","documentElement","_storageOptionExists","localStorage$1","cookieStorage","getStorage","keyPrefix","storageOptionExists","MetadataStorage","_ref","storageKey","disableCookies","cookieDomain","writableTopDomain","disableCookieStorage","_ref2","optOut","lastEventTime","identifyId","sequenceNumber","saveCookie","getCookieStorageKey","_this","cookieKey","allCookies","latestCookie","getUtmData","rawCookie","fetchParam","queryName","utmSource","utmMedium","utmCampaign","utmTerm","utmContent","utmData","addIfNotNull","AMP_OP_ADD","AMP_OP_APPEND","AMP_OP_CLEAR_ALL","AMP_OP_PREPEND","AMP_OP_SET","AMP_OP_SET_ONCE","AMP_OP_UNSET","AMP_OP_PREINSERT","AMP_OP_POSTINSERT","AMP_OP_REMOVE","Identify","userPropertiesOperations","_addOperation","append","clearAll","setOnce","unset","preInsert","postInsert","Request","CORS_HEADER","setHeaders","xhr","header","setRequestHeader","XDomainRequest","xdr","responseText","onprogress","XMLHttpRequest","onreadystatechange","responseStatus","Revenue","_price","_productId","_quantity","_revenueType","_properties","setProductId","productId","setQuantity","quantity","setPrice","price","setRevenueType","revenueType","setEventProperties","eventProperties","_isValidRevenue","_toJSONObject","uuid","userLanguage","AmplitudeServerZone","US","EU","getEventLogApi","serverZone","eventLogUrl","getDynamicConfigApi","dynamicConfigUrl","DEFAULT_OPTIONS","apiEndpoint","batchEvents","cookieExpiration","sameSiteCookie","cookieForceUpgrade","deferInitialization","deviceIdFromUrlParam","eventUploadPeriodMillis","eventUploadThreshold","forceHttps","includeFbclid","includeGclid","includeReferrer","includeUtm","ingestionMetadata","sourceName","sourceVersion","library","logAttributionCapturedEvent","onExitPage","onNewSessionStart","plan","branch","versionId","savedMaxCount","saveEvents","saveParamsReferrerOncePerSession","secureCookie","sessionTimeout","trackingOptions","city","country","carrier","device_manufacturer","device_model","dma","ip_address","os_name","os_version","region","version_name","unsetParamsReferrerOnNewSession","unsentKey","unsentIdentifyKey","uploadBatchSize","useDynamicConfig","serverZoneBasedApi","partnerId","ConfigManager","ingestionEndpoint","instance$1","AmplitudeClient","_instanceName","_unsentEvents","_unsentIdentifys","_q","_sending","_updateScheduled","_onInitCallbacks","_onNewSessionStartCallbacks","_eventId","_identifyId","_lastEventTime","_newSession","_sequenceNumber","_sessionId","_connector","_userAgent","init","opt_userId","opt_config","opt_callback","_parseConfig","_refreshDynamicConfig","_storageSuffix","_storageSuffixV5","_oldCookiename","_unsentKey","_unsentIdentifyKey","_cookieName","_metadataStorage","hasOldCookie","hasNewCookie","_useOldCookie","hasCookie","_deferInitialization","_generateApiPropertiesTrackingConfig","_apiPropertiesTrackingOptions","tracking_options","_upgradeCookieData","_loadCookieData","_pendingReadStorage","initFromStorage","storedDeviceId","_getInitialDeviceId","startNewSession","_unsetUTMParams","_trackParamsAndReferrer","_validateUnsentEventQueue","_saveCookieData","_sendEventsIfReady","_runNewSessionStartCallbacks","_loadSavedUnsentEvents","runQueuedFunctions","pageHandlersAdded","handleVisibilityChange","prevTransport","setTransport","_logEvent","editor","deleteLowerLevelDomainCookies","cookieHost","hostParts","cookieHostParts","deleteDomain","configDeviceId","_getDeviceIdFromUrlParam","_getUrlParams","user_properties","event_properties","utmProperties","referrerProperties","gclidProperties","fbclidProperties","_initUtmData","_saveReferrer","_getReferrer","_saveGclid","_saveFbclid","attributionProperties","freeFormObjectKeys","parseValidateAndLoad","inputValue","_apiKeySet","methodName","savedUnsentEventsString","_getFromStorage","unsentEvents","_parseSavedUnsentEventsString","_setInStorage","events","isNewSession","onInit","getSessionId","nextEventId","nextIdentifyId","nextSequenceNumber","_unsentCount","sendEvents","clearStorage","cookieData","_loadCookieDataProps","queryParams","cookieParams","_sendParamsReferrerUserProperties","identify","urlRefer","_getReferrerFromUrlParam","referrer","search","urlParams","gclid","fbclid","_getReferringDomain","referrerInfo","referring_domain","serializedUnsentEvents","serializedIdentifys","unsentIdentify","setDomain","_shouldDeferCall","setGroup","groupType","setOptOut","enable","setSessionId","resetSessionId","regenerateDeviceId","sanitized","clearUserProperties","_convertProxyObjectToRealObject","identify_obj","opt_error_callback","outOfSession","_logErrorsWithCallbacks","groupIdentify","group_type","group_name","setVersionName","apiProperties","groupProperties","timestamp","errorCallback","eventTime","osName","osVersion","model","deviceVendor","vendor","device_id","user_id","event_id","session_id","event_type","_shouldTrackField","api_properties","sequence_number","group_properties","user_agent","partner_id","_isObservePlanSet","_isIngestionMetadataSet","ingestion_metadata","source_name","source_version","_limitEventsQueued","field","fields","deletedEvents","logEventWithTimestamp","logEventWithGroups","_isNumber","isFinite","details","logRevenueV2","revenue_obj","logRevenue","product","special","_logErrorsOnEvents","maxEventId","maxIdentifyId","queues","maxId","unsentEvent","removeEvents","_removeEvents","eventQueue","filteredEvents","numEvents","mergedEvents","_mergeEventsAndIdentifys","eventsToSend","uploadTime","client","upload_time","checksum","ceil","success","URLSearchParams","eventIndex","identifyIndex","noIdentifys","noEvents","setGlobalUserProperties","__VERSION__","setLibrary","_initializationDeferred","enableTracking","getDeviceId","getUserId","setMinTimeBetweenSessionsMillis","timeInMillis","setEventUploadThreshold","setUseDynamicConfig","setServerZone","setServerUrl","serverUrl","Amplitude","_instances","old","amplitude","_iq","safeAdd","x","y","lsw","msw","bitRotateLeft","num","cnt","md5cmn","md5ff","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","rstr2binl","length8","rstrMD5","rstrHMACMD5","hash","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","rawMD5","hexMD5","rawHMACMD5","hexHMACMD5","md5","string","isCallable","tryToString","$TypeError","argument","$String","isPrototypeOf","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","fromIndex","O","DESCRIPTORS","SILENT_ON_NON_WRITABLE_LENGTH_SET","uncurryThis","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","wellKnownSymbol","TO_STRING_TAG","$Object","CORRECT_ARGUMENTS","tryGet","callee","getOwnPropertyDescriptorModule","definePropertyModule","exceptions","createPropertyDescriptor","bitmap","makeBuiltIn","defineGlobalProperty","simple","global","unsafe","nonConfigurable","nonWritable","fails","documentAll","IS_HTMLDDA","EXISTS","MAX_SAFE_INTEGER","IndexSizeError","DOMStringSizeError","HierarchyRequestError","WrongDocumentError","InvalidCharacterError","NoDataAllowedError","NoModificationAllowedError","NotFoundError","NotSupportedError","InUseAttributeError","InvalidStateError","SyntaxError","InvalidModificationError","NamespaceError","InvalidAccessError","ValidationError","TypeMismatchError","SecurityError","NetworkError","AbortError","URLMismatchError","QuotaExceededError","TimeoutError","InvalidNodeTypeError","DataCloneError","getBuiltIn","Deno","versions","v8","$Error","TEST","stack","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","dropEntries","prepareStackTrace","createNonEnumerableProperty","defineBuiltIn","copyConstructorProperties","isForced","FORCED","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","dontCallGetSet","forced","sham","NATIVE_BIND","FunctionPrototype","getDescriptor","PROPER","CONFIGURABLE","uncurryThisWithBind","aFunction","namespace","aCallable","V","P","func","check","toObject","classof","dummy","Wrapper","NewTarget","NewTargetPrototype","store","functionToString","inspectSource","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","enforce","getterFor","facade","STATE","$documentAll","replacement","feature","detection","POLYFILL","NATIVE","USE_SYMBOL_AS_UID","$Symbol","toLength","CONFIGURABLE_FUNCTION_NAME","InternalStateModule","enforceInternalState","getInternalState","CONFIGURABLE_LENGTH","TEMPLATE","arity","trunc","$default","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","anObject","toPropertyKey","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","propertyIsEnumerableModule","internalObjectKeys","enumBugKeys","names","$propertyIsEnumerable","NASHORN_BUG","aPossiblePrototype","CORRECT_SETTER","__proto__","pref","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","SHARED","IS_PURE","copyright","license","V8_VERSION","symbol","toIntegerOrInfinity","integer","IndexedObject","requireObjectCoercible","getMethod","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","toPrimitive","postfix","NATIVE_SYMBOL","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","description","setArrayLength","doesNotExceedSafeInteger","INCORRECT_TO_LENGTH","SILENT_ON_NON_WRITABLE_LENGTH","argCount","anInstance","inheritIfRequired","normalizeStringArgument","DOMExceptionConstants","clearErrorStack","DOM_EXCEPTION","NativeDOMException","$DOMException","DOMExceptionPrototype","argumentsLength","that","ERROR_HAS_STACK","DOM_EXCEPTION_HAS_STACK","BUGGY_DESCRIPTOR","FORCED_CONSTRUCTOR","DOMException","PolyfilledDOMException","PolyfilledDOMExceptionPrototype","constant","constantName","singleMatcher","multiMatcher","decodeComponents","customDecodeURIComponent","replaceMap","encodedURI","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","canUseSymbol","for","REACT_ELEMENT_TYPE","$$typeof","emptyTarget","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","getMergeFunction","customMerge","getEnumerableOwnPropertySymbols","getKeys","propertyIsOnObject","propertyIsUnsafe","mergeObject","destination","arrayMerge","sourceIsArray","sourceAndTargetTypesMatch","array","deepmerge_1","attributeNames","elementNames","__createBinding","k2","desc","__esModule","__setModuleDefault","__importStar","mod","ElementType","entities_1","foreignNames_js_1","unencodedElements","replaceQuotes","formatAttributes","encodeEntities","decodeEntities","xmlMode","encodeXML","escapeAttribute","emptyAttrs","singleTag","nodes","renderNode","Root","Doctype","Directive","renderDirective","renderComment","CDATA","renderCdata","Script","Style","Tag","renderTag","renderText","foreignModeIntegrationPoints","foreignElements","elem","attribs","selfClosingTags","escapeText","isTag","__exportStar","DomHandler","domelementtype_1","node_js_1","defaultOpts","withStartIndices","withEndIndices","elementCB","dom","Document","tagStack","lastNode","onparserinit","onreset","onend","handleCallback","onclosetag","endIndex","onopentag","addNode","ontext","oncomment","oncommentend","oncdatastart","oncdataend","onprocessinginstruction","ProcessingInstruction","startIndex","__extends","extendStatics","__","hasChildren","isDocument","isDirective","isComment","isText","isCDATA","NodeWithChildren","DataNode","Node","recursive","_super","cloneChildren","clone_1","clone_2","clone_3","instruction","sourceCodeLocation","childs","getFeed","stringify_js_1","legacy_js_1","feedRoot","getOneElement","isValidFeed","getAtomFeed","getRssFeed","feed","items","entry","media","getMediaElements","addConditionally","pubDate","MEDIA_KEYS_STRING","MEDIA_KEYS_INT","medium","isDefault","MEDIA_KEYS_STRING_1","attrib","MEDIA_KEYS_INT_1","expression","recurse","uniqueSort","compareDocumentPosition","DocumentPosition","removeSubsets","domhandler_1","idx","lastIndexOf","ancestor","nodeA","nodeB","aParents","bParents","maxIdx","DISCONNECTED","sharedParent","siblings","aSibling","bSibling","FOLLOWING","CONTAINED_BY","PRECEDING","CONTAINS","relative","getElementsByTagType","getElementById","getElements","testElement","querying_js_1","Checks","tag_name","tag_type","tag_contains","getAttribCheck","combineFuncs","compileTest","funcs","limit","findOne","removeElement","replaceElement","sibling","currNext","prependChild","findAll","existsOne","findOneChild","nodes_1","__importDefault","getText","getInnerHTML","getOuterHTML","dom_serializer_1","prevElementSibling","nextElementSibling","getName","hasAttrib","getAttributeValue","getSiblings","getParent","getChildren","decodeXML","decodeHTMLStrict","decodeHTML","determineBranch","BinTrieFlags","fromCodePoint","replaceCodePoint","decodeCodePoint","xmlDecodeTree","htmlDecodeTree","decode_data_html_js_1","decode_data_xml_js_1","decode_codepoint_js_1","CharCodes","decode_codepoint_js_2","getDecoder","decodeTree","strict","lastIdx","strIdx","NUM","resultIdx","excess","treeIdx","masked","VALUE_LENGTH","SEMI","valueLength","cp","To_LOWER_BIT","LOWER_X","ZERO","NINE","LOWER_A","LOWER_F","entity","nodeIdx","char","branchCount","BRANCH_LENGTH","jumpOffset","JUMP_TABLE","lo","hi","mid","midVal","htmlDecoder","xmlDecoder","decodeMap","codePoint","encodeNonAsciiHTML","encodeHTML","encode_html_js_1","escape_js_1","htmlReplacer","encodeHTMLTrieRe","xmlReplacer","regExp","nextChar","lastIndex","getCodePoint","escapeUTF8","xmlCodeMap","getEscaper","codePointAt","Uint16Array","restoreDiff","decodeXMLStrict","decodeHTML5Strict","decodeHTML4Strict","decodeHTML5","decodeHTML4","encodeHTML5","encodeHTML4","decodeStrict","EncodingMode","DecodingMode","EntityLevel","decode_js_1","encode_js_1","XML","level","HTML","Strict","Legacy","Attribute","ASCII","escape_js_2","encode_js_2","decode_js_2","Parser","Tokenizer_js_1","formTags","pTag","tableSectionTags","ddtTags","rtpTags","openImpliesClose","voidElements","foreignContextElements","htmlIntegrationElements","reNameEnd","cbs","openTagStart","tagname","attribname","attribvalue","foreignContext","buffers","bufferOffset","writeIndex","lowerCaseTagNames","lowerCaseTags","lowerCaseAttributeNames","tokenizer","Tokenizer","getSlice","ontextentity","getSectionStart","isVoidElement","onopentagname","emitOpenTag","impliesClose","endOpenTag","isImplied","onopentagend","count","closeCurrentTag","onselfclosingtag","recognizeSelfClosing","isOpenImplied","onattribname","onattribdata","onattribentity","onattribend","quote","onattribute","QuoteType","Double","Single","NoValue","getInstructionName","ondeclaration","offset","oncdata","_j","_k","recognizeCDATA","parseComplete","shiftBuffer","chunk","running","pause","resume","parseChunk","State","isWhitespace","Space","NewLine","Tab","FormFeed","CarriageReturn","isEndOfTagSection","Slash","Gt","isNumber","Zero","Nine","isASCIIAlpha","LowerA","LowerZ","UpperA","UpperZ","isHexDigit","UpperF","LowerF","Sequences","Cdata","Uint8Array","CdataEnd","CommentEnd","ScriptEnd","StyleEnd","TitleEnd","buffer","sectionStart","baseState","sequenceIndex","trieIndex","trieCurrent","entityResult","entityExcess","entityTrie","currentSequence","finish","getIndex","stateText","Lt","fastForwardTo","BeforeTagName","Amp","BeforeEntity","stateSpecialStartSequence","isEnd","isMatch","InTagName","stateInTagName","stateInSpecialTag","endOfText","actualIndex","stateInClosingTagName","stateCDATASequence","InCommentLike","InDeclaration","stateInDeclaration","stateInCommentLike","isTagStartChar","startSpecial","sequence","SpecialStartSequence","stateBeforeTagName","ExclamationMark","BeforeDeclaration","Questionmark","InProcessingInstruction","lower","BeforeSpecialS","BeforeClosingTagName","BeforeAttributeName","stateBeforeAttributeName","stateBeforeClosingTagName","InClosingTagName","InSpecialComment","AfterClosingTagName","stateAfterClosingTagName","InSpecialTag","InSelfClosingTag","InAttributeName","stateInSelfClosingTag","stateInAttributeName","Eq","AfterAttributeName","stateAfterAttributeName","BeforeAttributeValue","stateBeforeAttributeValue","DoubleQuote","InAttributeValueDq","SingleQuote","InAttributeValueSq","InAttributeValueNq","stateInAttributeValueNoQuotes","handleInAttributeValue","stateInAttributeValueDoubleQuotes","stateInAttributeValueSingleQuotes","Unquoted","stateBeforeDeclaration","OpeningSquareBracket","CDATASequence","Dash","BeforeComment","stateInProcessingInstruction","stateBeforeComment","stateInSpecialComment","stateBeforeSpecialS","stateBeforeEntity","Num","BeforeNumericEntity","InNamedEntity","stateInNamedEntity","emitNamedEntity","allowLegacyEntity","Semi","entityStart","emitPartial","emitCodePoint","stateBeforeNumericEntity","LowerX","InHexEntity","InNumericEntity","stateInNumericEntity","emitNumericEntity","numberStart","stateInHexEntity","shouldContinue","handleTrailingData","DefaultHandler","DomUtils","parseFeed","createDomStream","parseDOM","parseDocument","Parser_js_1","elementCb","domutils_1","prot","propIsEnumerable","shouldUseNative","test1","test2","order2","test3","letter","symbols","isSpace","collectCharacters","regEx","chars","descriptors","currentDescriptor","inputLength","regexLeadingSpaces","regexLeadingCommasOrSpaces","regexLeadingNotSpaces","regexTrailingCommas","regexNonNegativeInteger","regexFloatingPoint","candidates","parseDescriptors","tokenize","lastChar","intVal","floatVal","pError","candidate","isColorSupported","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","createColors","Container","AtRule","defaults","proxyOf","registerAtRule","Rule","isClean","my","Declaration","cleanSource","markDirtyUp","markDirty","cleanRaws","keepBetween","each","getIterator","indexes","condition","lastEach","getProxyProcessor","toProxy","other","insertAfter","exist","existIndex","sample","processed","rebuild","raws","first","removeAll","replaceValues","walkDecls","decl","fast","walk","addToError","walkAtRules","walkComments","walkRules","registerParse","dependant","registerRule","registerRoot","pico","terminalHighlight","CssSyntaxError","line","column","file","endLine","endColumn","setMessage","showSourceCode","mark","aside","lines","maxWidth","gutter","spacing","variable","LazyResult","Processor","toResult","registerLazyResult","registerProcessor","PreviousMap","Input","inputs","ownInputs","inputHydrated","inputId","SourceMapConsumer","SourceMapGenerator","fileURLToPath","pathToFileURL","isAbsolute","nanoid","fromOffsetCache","sourceMapAvailable","pathAvailable","hasBOM","mapResolve","fromOffset","col","lastLine","lineToIndex","prevIndex","sourceRoot","fromUrl","originalPositionFor","mapFile","sourceContentFor","consumerCache","registerInput","MapGenerator","Result","TYPE_TO_CLASS_NAME","atrule","comment","rule","PLUGIN_PROPS","AtRuleExit","CommentExit","DeclarationExit","DocumentExit","Once","OnceExit","postcssPlugin","prepare","RootExit","RuleExit","NOT_VISITORS","CHILDREN","getEvents","toStack","visitorIndex","visitors","cleanMarks","postcss","processor","stringified","inline","syntax","helpers","plugins","processing","runAsync","onRejected","onFinally","getAsyncError","lastPlugin","postcssVersion","prepareVisitors","hasListener","runOnRoot","visitTick","visitor","roots","subRoot","sync","stringifier","generate","walkSync","visitSync","onFulfilled","visit","warnings","messages","toStringTag","registerPostcss","comma","spaces","separators","inQuote","prevQuote","dirname","sep","cssString","mapOpts","usesFileUrls","absolute","memoizedFileURLs","memoizedPaths","memoizedURLs","addAnnotation","isInline","toBase64","annotation","outputFile","eol","applyPrevMaps","previous","toUrl","sourcesContent","applySourceMap","clearAnnotation","generateMap","generateString","fromSourceMap","addMapping","generated","isSourcesContent","setSourcesContent","isAnnotation","noSource","mapping","sourcePath","childless","semicolon","withContent","previousMaps","already","toFileUrl","setSourceContent","fileURL","encodeURI","NoWorkResult","_processor","_css","_opts","_map","generatedCSS","generatedMap","_root","Stringifier","postcssNode","after","overrides","between","cloneAfter","cloneBefore","rangeBy","positionBy","stringRepresentation","positionInside","word","defaultType","replaceWith","bookmark","foundSelf","fixed","emitInputs","inputsNextIndex","proxyCache","SAFE_COMMENT_NEIGHBOR","empty","findLastWithPosition","customProperty","createTokenizer","unnamedAtrule","brackets","endOfFile","nextToken","getPosition","spacesAndCommentsFromEnd","afterName","spacesAndCommentsFromStart","checkMissedSemicolon","colon","founded","doubleColon","unknownWord","firstSpaces","precheckMissedSemicolon","important","stringFrom","spacesFromEnd","hasWord","emptyRule","unexpectedClose","endFile","unclosedBlock","freeSemicolon","ownSemicolon","bracket","back","unclosedBracket","clean","lastTokenType","Warning","initializer","warningPrinted","creator","LANG","transformer","processOpts","pluginOpts","atRule","existsSync","readFileSync","fromBase64","loadAnnotation","startWith","loadMap","decodeInline","baseCharsetUri","baseUri","charsetUri","uri","lastMatch","encoding","getAnnotationURL","sourceMapString","mappings","_mappings","sections","comments","loadFile","prevPath","warning","ignore","selectors","DEFAULT_RAW","beforeClose","beforeComment","beforeDecl","beforeOpen","beforeRule","commentLeft","commentRight","emptyBody","indent","builder","block","beforeAfter","detect","buf","depth","step","own","rawCache","rawBeforeClose","rawBeforeComment","rawBeforeDecl","rawBeforeOpen","rawBeforeRule","rawColon","rawEmptyBody","rawIndent","rawSemicolon","SINGLE_QUOTE","DOUBLE_QUOTE","BACKSLASH","SLASH","NEWLINE","SPACE","FEED","TAB","CR","OPEN_SQUARE","CLOSE_SQUARE","OPEN_PARENTHESES","CLOSE_PARENTHESES","OPEN_CURLY","CLOSE_CURLY","SEMICOLON","ASTERISK","COLON","AT","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","escaped","escapePos","currentToken","ignoreErrors","returned","unclosed","what","ignoreUnclosed","controlChar","printed","range","strictUriEncode","objectAssign","decodeComponent","encoderForArrayFormat","arrayFormat","parserForArrayFormat","accumulator","keysSorter","extract","formatter","param","val2","parseUrl","htmlparser","escapeStringRegexp","parseSrcset","postcssParse","mediaTags","vulnerableTags","isEmptyObject","stringifySrcset","parsedSrcset","part","sanitizeHtml","VALID_HTML_ATTRIBUTE_NAME","html","_recursing","tempResult","Frame","tagPosition","mediaChildren","updateParentNodeText","parentFrame","updateParentNodeMediaChildren","htmlParserDefaults","allowedTags","allowVulnerableTags","nonTextTagsArray","nonTextTags","allowedAttributesMap","allowedAttributesGlobMap","allowedAttributes","globRegex","allowedClassesMap","allowedClassesGlobMap","allowedClassesRegexMap","allowedClasses","classes","transformTagsMap","transformTagsAll","skipMap","transformMap","skipText","skipTextDepth","transformTags","transform","transFun","simpleTransform","addedText","initializeState","enforceHtmlBoundary","frame","skip","hasText","transformedTag","disallowedTagsMode","nestingLimit","allowedScriptHostnames","allowedScriptDomains","passedAllowedAttributesMapCheck","splitStrArray","allowedSchemesAppliedToAttributes","naughtyHref","allowedHostname","allowedDomain","endsWith","isRelativeUrl","allowIframeRelativeUrls","allowedIframeHostnames","allowedIframeDomains","evil","allowedSpecificClasses","allowedWildcardClasses","allowedSpecificClassesGlob","allowedSpecificClassesRegex","allowedWildcardClassesGlob","allowedClassesGlobs","filterClasses","abstractSyntaxTree","filteredAST","filterCss","allowedStyles","stringifyStyleAttributes","escapeHtml","selfClosing","textFilter","lastFrame","exclusiveFilter","firstIndex","allowProtocolRelative","scheme","allowedSchemesByTag","allowedSchemes","astRules","selectedRule","filterDeclarations","extractedAttributes","attrObject","allowedDeclarationsList","attributeObject","matchesRegex","regularExpression","allowedGlobs","clss","glob","img","newTagName","newAttribs","merge","isIndex","RULES","defineRule","validator","guardExtend","resolveRule","FormContextKey","FieldContextKey","IS_ABSENT","isClient","isLocator","__locatorRef","isYupValidator","validate","hasCheckedAttr","isContainerValue","isEmptyContainer","isNotNestedPath","isNativeMultiSelect","isNativeSelect","isNativeMultiSelectNode","hasTruthyBindingValue","shouldHaveValueBinding","isFormSubmitEvent","evt","isEvent","srcElement","isPropPresent","isFile","lastModified","ArrayBuffer","isView","flags","File","klona","cleanupNonNestedPath","getFromPath","resolvedValue","acc","propKey","setInPath","unsetPath","pathValues","keysOf","record","injectWithSelf","vm","resolveNextCheckboxValue","currentValue","checkedValue","uncheckedValue","throttle","inThrottle","lastResult","debounceAsync","inner","ms","resolves","applyModelModifiers","withLatest","onDone","latestRun","pending","computedDeep","baseRef","slotProps","getBoundValue","hasValueBinding","normalizeEventValue","files","selectedOption","normalizeRules","rules","_$$isNormalized","curr","normalizeParams","buildParams","parsedRule","parseRule","provided","mapValueToLocator","createLocator","locator","crossTable","extractLocators","DEFAULT_CONFIG","generateMessage","bails","validateOnBlur","validateOnChange","validateOnInput","validateOnModelUpdate","currentConfig","getConfig","setConfig","newConf","configure","shouldBail","formData","_validate","valid","validateFieldWithYup","form","pipeline","isValid","_generateFieldError","normalizedContext","rulesKeys","_test","abortEarly","fillTargetValues","fieldCtx","validateYupSchema","schema","errorObjects","validateObjectSchema","paths","validations","fieldResult","bailsMap","isAllValid","validationResults","ID_COUNTER","useFieldState","setInitialValue","_useFieldValue","setErrors","_useFieldErrors","_useFieldMeta","setState","touched","modelRef","resolveInitialValue","initialValues","stageInitialValue","setFieldValue","validated","dirty","normalizeErrors","errorBag","setFieldErrorBag","API","sendInspectorState","INSPECTOR_ID","sendInspectorTree","useField","useCheckboxField","_useField","validateOnMount","label","validateOnValueUpdate","controlled","keepValueOnUnmount","modelPropName","syncVModel","controlForm","normalizeOptions","injectedForm","markedForRemoval","useVModel","handleChange","handleBlur","normalizedRules","rulesValue","extractRuleFromSchema","validateCurrentValue","validateSchema","validateWithStateMutation","validateValidStateOnly","validate$1","shouldValidate","setTouched","isTouched","unwatchValue","lastWatchedValue","watchValue","oldVal","validateFn","resetField","setValue","handleReset","unregister","dependencies","rulesVal","depAcc","depName","depValue","oldDeps","valueProp","fieldName","patchCheckboxApi","checkedVal","handleCheckboxChange","propName","emitName","getCurrentModelValue","propValue","modelModifiers","as","required","keepValue","validateField","onChangeHandler","handleInput","onInputHandler","fieldProps","resolveValidationTriggers","baseOnBlur","onBlur","baseOnInput","onInput","baseOnChange","onChange","resolveTag","FORM_COUNTER","useForm","formId","controlledModelPaths","RESET_LOCK","fieldsByPath","isSubmitting","submitCount","fieldArrays","formValues","setErrorBag","useErrorBag","initialErrors","bag","getFirstFieldAtPath","fieldOrGroup","fieldExists","fieldNames","fieldBailsMap","keepValuesOnUnmount","originalInitialValues","setInitialValues","useFormInitialValues","useFormMeta","controlledValues","validationSchema","debouncedSilentValidation","_validateSchema","debouncedValidation","formResult","fieldsById","formCtx","currentErrorsPaths","validation","setFieldError","applyFieldMutation","wasValidated","makeSubmissionFactory","onlyControlled","onValidationError","setFieldTouched","setValues","resetForm","returnVal","handleSubmitImpl","handleSubmit","withControlled","registerField","unregisterField","unsetInitialValue","setFieldInitialValue","useFieldModel","isFieldGroup","mutation","mutateAllFields","force","fieldInstance","clonedValue","createModel","newValues","insertFieldAtPath","rawField","fieldPath","fieldAtPath","removeFieldFromPath","newPath","oldPath","initialErrorMessage","isGroup","shouldKeepValue","currentGroupValue","isSameGroup","valueIdx","updateOriginal","schemaValue","submitForm","submit","initialTouched","currentValues","MERGE_STRATEGIES","isDirty","calculateFlags","flat","mergeMethod","providedValues","updateFields","wasTouched","normalizeErrorItem","FormImpl","onSubmit","onInvalidSubmit","keepValues","handleFormReset","onReset","handleScopedSlotSubmit","onSuccess","formAttrs","novalidate","Form","useFieldArray","arrayPath","noOp","noOpApi","swap","alreadyExists","entryCounter","initFields","createEntry","updateEntryFlags","fieldsLength","isFirst","isLast","pathName","pathValue","normalizedPathValue","indexA","indexB","newFields","temp","tempEntry","oldIdx","newIdx","movedItem","movedValue","fieldArrayCtx","role","sfc","cloneRoute","fullPath","router","moduleName","registerModule","namespaced","currentRoute","mutations","currentPath","isTimeTraveling","storeUnwatch","route","afterEachUnHook","afterEach","unregisterModule","getDevtoolsGlobalHook","getTarget","__VUE_DEVTOOLS_GLOBAL_HOOK__","isProxyAvailable","HOOK_SETUP","HOOK_PLUGIN_SETTINGS_SET","supported","perf","isPerformanceSupported","perf_hooks","ApiProxy","targetQueue","onQueue","defaultSettings","localSettingsSaveId","currentSettings","fallbacks","getSettings","setSettings","pluginId","proxiedOn","_target","proxiedTarget","setupDevtoolsPlugin","pluginDescriptor","setupFn","enableProxy","enableEarlyProxy","__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__","__VUE_DEVTOOLS_PLUGINS__","storeKey","useStore","forEachValue","partial","genericSubscribe","subs","resetStore","hot","_actions","_mutations","_wrappedGetters","_modulesNamespaceMap","installModule","_modules","resetStoreState","oldState","_state","oldScope","_scope","getters","_makeLocalGettersCache","wrappedGetters","computedObj","computedCache","enableStrictMode","_withCommit","rootState","isRoot","getNamespace","parentState","getNestedState","local","makeLocalContext","forEachMutation","namespacedType","registerMutation","forEachAction","registerAction","forEachGetter","registerGetter","forEachChild","noNamespace","dispatch","_type","_payload","unifyObjectStyle","defineProperties","makeLocalGetters","gettersProxy","splitPos","localType","rootGetters","_devtoolHook","rawGetter","LABEL_VUEX_BINDINGS","MUTATIONS_LAYER_ID","ACTIONS_LAYER_ID","actionId","addDevtools","homepage","logo","componentStateTypes","api","addTimelineLayer","COLOR_LIME_500","addInspector","icon","treeFilterPlaceholder","getInspectorTree","inspectorId","flattenStoreForInspectorTree","rootNodes","formatStoreForInspectorTree","getInspectorState","modulePath","nodeId","formatStoreForInspectorState","getStoreModule","editInspectorState","notifyComponentUpdate","addTimelineEvent","layerId","time","title","subscribeAction","_id","_time","groupId","subtitle","_custom","tooltip","COLOR_DARK","COLOR_WHITE","TAG_NAMESPACED","textColor","extractNameFromPath","tags","_children","gettersKeys","storeState","editable","tree","transformPathsToObjectTree","canThrow","leafKey","abstract","moduleMap","Module","rawModule","_rawModule","rawState","prototypeAccessors$1","addChild","getChild","hasChild","ModuleCollection","rawRootModule","targetModule","newModule","modules","this$1$1","rawChildModule","isRegistered","createStore","Store","devtools","_committing","_actionSubscribers","_subscribers","_devtools","prototypeAccessors","injectKey","$store","useDevtools","replaceState","preserveState","hasModule","hotUpdate","newOptions","committing","mapState","normalizeNamespace","states","normalizeMap","getModuleByNamespace","vuex","mapMutations","mapGetters","mapActions","isValidMap","helper","urlAlphabet","customAlphabet","alphabet","defaultSize","instanceOfAny","constructors","idbProxyableTypes","cursorAdvanceMethods","getIdbProxyableTypes","IDBDatabase","IDBObjectStore","IDBIndex","IDBCursor","IDBTransaction","getCursorAdvanceMethods","advance","continue","continuePrimaryKey","cursorRequestMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","promisifyRequest","unlisten","cacheDonePromiseForTransaction","tx","idbProxyTraps","replaceTraps","wrapFunction","unwrap","storeNames","transformCachableValue","IDBRequest","openDB","blocked","upgrade","blocking","terminated","openPromise","oldVersion","newVersion","readMethods","writeMethods","cachedMethods","targetFuncName","useIndex","isWrite","storeName","oldTraps","PlatformLoggerServiceImpl","getPlatformInfoString","getProviders","isVersionServiceProvider","logString","getComponent","name$o","version$1","logger","name$n","name$m","name$l","name$k","name$j","name$i","name$h","name$g","name$f","name$e","name$d","name$c","name$b","name$a","name$9","name$8","name$7","name$6","name$5","name$4","name$3","name$2","name$1","DEFAULT_ENTRY_NAME","PLATFORM_LOG_STRING","_apps","_components","_addComponent","addComponent","debug","_registerComponent","componentName","_getProvider","heartbeatController","triggerHeartbeat","ERRORS","ERROR_FACTORY","FirebaseAppImpl","_isDeleted","_config","_name","_automaticDataCollectionEnabled","automaticDataCollectionEnabled","checkDestroyed","isDeleted","SDK_VERSION","initializeApp","rawConfig","existingApp","newApp","getApp","registerVersion","libraryKeyOrName","variant","libraryMismatch","versionMismatch","STORE_NAME","dbPromise","getDbPromise","originalErrorMessage","readHeartbeatsFromIndexedDB","computeKey","idbGetError","writeHeartbeatsToIndexedDB","heartbeatObject","MAX_HEADER_BYTES","STORED_HEARTBEAT_RETENTION_MAX_MILLIS","HeartbeatServiceImpl","_heartbeatsCache","_storage","HeartbeatStorageImpl","_heartbeatsCachePromise","read","platformLogger","agent","getUTCDateString","lastSentHeartbeatDate","heartbeats","singleDateHeartbeat","hbTimestamp","overwrite","heartbeatsToSend","unsentEntries","extractHeartbeatsForHeader","headerString","today","toISOString","heartbeatsCache","maxSize","heartbeatEntry","hb","dates","countBytes","_canUseIndexedDBPromise","runIndexedDBEnvironmentCheck","canUseIndexedDB","idbHeartbeatObject","heartbeatsObject","existingHeartbeatsObject","registerCoreComponents","instanceFactory","multipleInstances","serviceProps","instantiationMode","onInstanceCreated","setMultipleInstances","setServiceProps","Provider","instances","instancesDeferred","instancesOptions","onInitCallbacks","identifier","normalizedIdentifier","normalizeInstanceIdentifier","deferred","shouldAutoInitialize","getOrInitializeService","instanceIdentifier","setComponent","isComponentEager","instanceDeferred","clearInstance","services","INTERNAL","_delete","isComponentSet","normalizedDeferredIdentifier","existingCallbacks","invokeOnInitCallbacks","callbacks","normalizeIdentifierForFactory","ComponentContainer","addOrOverwriteComponent","LogLevel","levelStringToEnum","DEBUG","VERBOSE","SILENT","defaultLogLevel","ConsoleMethod","defaultLogHandler","logType","Logger","_logLevel","_logHandler","_userLogHandler","logHandler","userLogHandler","First","Previous","Next","Last","Specific","Nothing","resolveItems","resolveActiveIndex","resolveDisabled","resolveId","accept","enabled","acceptNode","createTreeWalker","NodeFilter","SHOW_ELEMENT","nextNode","currentNode","screenX","screenY","wasMoved","Oe","Se","Open","Closed","Ce","Multi","ge","Pointer","Other","Y","Je","by","nullable","S","hold","I","dataRef","domRef","activeOptionIndex","C","E","R","comboboxState","compare","inputRef","labelRef","buttonRef","optionsRef","change","activationTrigger","optionsPropsRef","closeCombobox","openCombobox","goToOption","cancelAnimationFrame","T","B","selectOption","selectActiveOption","registerOption","unregisterOption","A","F","closest","activeIndex","activeOption","features","Hidden","readOnly","theirProps","ourProps","Qe","preventScroll","onClick","ArrowDown","ArrowUp","Escape","onKeydown","displayValue","scrollTop","selectionStart","selectionEnd","abs","setSelectionRange","selectionDirection","Enter","Home","PageUp","End","PageDown","onCompositionstart","onCompositionend","tabIndex","RenderStrategy","Xe","FILTER_REJECT","hasAttribute","FILTER_SKIP","FILTER_ACCEPT","visible","Ye","scrollIntoView","onFocus","onPointerenter","onMouseenter","onPointermove","onMousemove","onPointerleave","onMouseleave","M","Forwards","Backwards","isServer","None","InitialFocus","TabLock","FocusLock","RestoreFocus","All","initialFocus","containers","z","ownerDocument","J","Q","previousActiveElement","skipElements","relatedTarget","dataset","headlessuiFocusGuard","N","WrapAround","relativeTo","onFocusout","X","Focusable","isConnected","NoScroll","defaultView","capture","inert","U","parentElement","portals","Add","Remove","onUpdate","getSnapshot","innerWidth","clientWidth","offsetWidth","pageYOffset","flatMap","scrollBehavior","microTask","dispose","scrollTo","passive","PUSH","POP","SCROLL_PREVENT","SCROLL_ALLOW","TEARDOWN","defaultContainers","mainTreeNodeRef","resolveContainers","MainTreeNode","overflow","Ue","G","W","panelRef","Closing","Z","ee","te","titleId","dialogState","setTitleId","le","oe","defaultPrevented","ResizeObserver","D","getBoundingClientRect","observe","disconnect","leaf","Ge","K","htmlFor","ae","switchRef","labelledby","describedby","ue","defaultChecked","onKeyup","onKeypress","Finished","Cancelled","transitionDuration","transitionDelay","pe","Visible","me","Te","Unmount","he","show","enterFrom","enterTo","entered","leaveFrom","leaveTo","afterEnter","beforeLeave","Opening","be","ye","Ee","Ve","ne","getRootNode","composed","composedPath","Loose","HTMLIFrameElement","HTMLButtonElement","padding","clip","whiteSpace","borderWidth","Backspace","Delete","ArrowLeft","ArrowRight","getPropertyValue","currentId","nextId","Overflow","Success","Underflow","sign","Keyboard","Mouse","headlessuiFocusVisible","detail","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","sorted","elements","nodeName","requestSubmit","queueMicrotask","maxTouchPoints","localeCompare","fromEntries","invoke","extendFilter","isActive","eventFilter","watchPausable","unrefElement","elRef","plain","defaultWindow","useEventListener","options2","stopWatch","optionsClone","POSITIVE_INFINITY","useUrlSearchParams","removeNullishValues","removeFalsyValues","enableWrite","getRawParams","constructQuery","updateState","unusedKeys","paramsForKey","mapEntry","shouldUpdate","history","pathname","onChanged","initial","_toPrimitive","prim","_toPropertyKey","CurrencyDisplay","ValueScaling","escapeRegExp","removeLeadingZeros","substringBefore","DECIMAL_SEPARATORS","INTEGER_PATTERN","CurrencyFormat","currency","currencyDisplay","precision","accountingSign","useGrouping","currencySign","numberFormat","Intl","NumberFormat","formatParts","formatToParts","toLocaleString","decimalSymbol","groupingSymbol","minusSign","minimumFractionDigits","maximumFractionDigits","resolvedOptions","getPrefix","getSuffix","format","negativePrefix","negativeSuffix","negative","isNegative","normalizeDigits","stripCurrency","stripSignLiterals","fraction","stripGroupingSeparator","isValidIntegerFormat","onlyDigits","formattedNumber","integerNumber","toFraction","onlyLocaleDigits","isFractionIncomplete","insertCurrency","normalizeDecimalSeparator","digit","AbstractInputMask","currencyFormat","DefaultInputMask","conformToMask","previousConformedValue","isEmptyNegativeValue","checkIncompleteValue","incompleteValue","integerDigits","fractionDigits","invalidFraction","invalidNegativeValue","numberValue","AutoDecimalDigitsInputMask","pow","toFixed","hideGroupingSeparatorOnFocus","hideCurrencySymbolOnFocus","hideNegligibleDecimalDigitsOnFocus","autoDecimalDigits","valueRange","valueScaling","CurrencyInput","setOptions","applyFixedFractionFormat","toInteger","formatted","formattedValue","toFloat","numberMask","valueScalingOptions","thousands","millions","billions","valueScalingFractionDigits","minValue","getMinValue","maxValue","getMaxValue","maxFractionDigits","validateValueRange","forcedChange","hideNegligibleDecimalDigits","decimalSymbolInsertedAt","conformedValue","isInteger","inputEvent","getCaretPositionAfterFormat","caretPositionFromLeft","newValueLength","decimalSymbolPosition","setCaretPosition","caretPositionOnFocus","getCaretPositionOnFocus","currentPrefix","prefixLength","suffixLength","findInput","useCurrencyInput","autoEmit","currencyInput","isVue3","lazyModel","changeEvent","isBrowser","isESModule","applyToParams","newParams","TRAILING_SLASH_RE","removeTrailingSlash","parseURL","parseQuery","currentLocation","searchString","hashPos","searchPos","resolveRelativePath","stringifyURL","stringifyQuery","stripBase","isSameRouteLocation","aLastIndex","matched","bLastIndex","isSameRouteRecord","isSameRouteLocationParams","aliasOf","isSameRouteLocationParamsValue","isEquivalentArray","fromSegments","toSegments","toPosition","segment","NavigationType","NavigationDirection","normalizeBase","baseEl","BEFORE_HASH_RE","createHref","getElementPosition","docRect","elRect","behavior","computeScrollPosition","pageXOffset","scrollToPosition","scrollToOptions","positionEl","isIdSelector","getScrollKey","delta","scrollPositions","saveScrollPosition","scrollPosition","getSavedScrollPosition","scroll","createBaseLocation","createCurrentLocation","slicePos","pathFromHash","useHistoryListeners","historyState","teardowns","pauseState","popStateHandler","fromState","direction","forward","unknown","pauseListeners","listen","teardown","beforeUnloadListener","destroy","buildState","replaced","computeScroll","useHistoryStateNavigation","changeLocation","hashIndex","currentState","createWebHistory","historyNavigation","historyListeners","go","routerHistory","isRouteLocation","isRouteName","START_LOCATION_NORMALIZED","redirectedFrom","NavigationFailureSymbol","NavigationFailureType","createRouterError","isNavigationFailure","BASE_PARAM_PATTERN","BASE_PATH_PARSER_OPTIONS","sensitive","REGEX_CHARS_RE","tokensToParser","extraOptions","score","segmentScores","tokenIndex","subSegmentScore","repeatable","regexp","subPattern","avoidDuplicatedSlash","compareScoreArray","comparePathParserScore","aScore","bScore","isLastScoreNegative","ROOT_TOKEN","VALID_PARAM_RE","tokenizePath","crash","previousState","finalizeSegment","customRe","consumeBuffer","addCharToBuffer","createRouteRecordMatcher","matcher","alias","createRouterMatcher","routes","globalOptions","matchers","matcherMap","getRecordMatcher","addRoute","originalRecord","isRootAdd","mainNormalizedRecord","normalizeRouteRecord","normalizedRecords","aliases","originalMatcher","normalizedRecord","parentPath","connectingSlash","isAliasRecord","removeRoute","redirect","insertMatcher","matcherRef","getRoutes","isRecordChildOf","paramsFromLocation","parentMatcher","mergeMetaFields","normalizeRecordProps","leaveGuards","updateGuards","enterCallbacks","propsObject","partialOptions","HASH_RE","AMPERSAND_RE","SLASH_RE","EQUAL_RE","IM_RE","PLUS_RE","ENC_BRACKET_OPEN_RE","ENC_BRACKET_CLOSE_RE","ENC_CARET_RE","ENC_BACKTICK_RE","ENC_CURLY_OPEN_RE","ENC_PIPE_RE","ENC_CURLY_CLOSE_RE","ENC_SPACE_RE","commonEncode","encodeHash","encodeQueryValue","encodeQueryKey","encodePath","encodeParam","hasLeadingIM","searchParam","eqPos","normalizeQuery","normalizedQuery","matchedRouteKey","viewDepthKey","routerKey","routeLocationKey","routerViewLocationKey","useCallbacks","guardToPromiseFn","enterCallbackArray","guardReturn","guardCall","extractComponentsGuards","guardType","guards","rawComponent","isRouteComponent","componentPromise","resolvedComponent","useLink","activeRecordIndex","routeMatched","currentMatched","parentRecordPath","getOriginalPath","includesParams","isExactActive","navigate","guardEvent","RouterLinkImpl","compatConfig","MODE","activeClass","exactActiveClass","custom","ariaCurrentValue","elClass","getLinkClass","linkActiveClass","linkExactActiveClass","RouterLink","outer","innerValue","outerValue","propClass","globalClass","defaultClass","RouterViewImpl","injectedRoute","routeToDisplay","injectedDepth","initialDepth","matchedRoute","matchedRouteRef","viewRef","oldInstance","oldName","currentName","ViewComponent","routePropsOption","routeProps","slotContent","RouterView","createRouter","parseQuery$1","stringifyQuery$1","beforeGuards","beforeResolveGuards","afterGuards","pendingLocation","scrollRestoration","paramValue","encodeParams","decodeParams","parentOrRoute","recordMatcher","routeMatcher","hasRoute","rawLocation","locationNormalized","matcherLocation","targetParams","locationAsObject","checkCanceledNavigation","pushWithRedirect","handleRedirectRecord","lastMatched","newTargetLocation","targetLocation","shouldRedirect","toLocation","handleScroll","markAsReady","triggerError","finalizeNavigation","triggerAfterEach","checkCanceledNavigationAndReject","leavingRecords","updatingRecords","enteringRecords","extractChangingRecords","canceledNavigationCheck","runGuardQueue","isPush","isFirstNavigation","removeHistoryListener","setupListeners","_from","listening","readyHandlers","errorHandlers","isReady","started","installedApps","beforeEach","beforeResolve","$router","reactiveRoute","unmountApp","recordFrom","recordTo","useRoute"],"sourceRoot":""}